LyoKICoJT0xFMk5MUyBsaWJyYXJ5CiAqCiAqCUNvcHlyaWdodCAxOTk1CU1hcnRpbiB2b24gTG9ld2lzCiAqICAgICAgQ29weXJpZ2h0IDE5OTggIERhdmlkIExlZSBMYW1iZXJ0CiAqICAgICAgQ29weXJpZ2h0IDIwMDAgIEp1bGlvIEPpc2FyIEfhenF1ZXoKICovCiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxsb2NhbGUuaD4KI2luY2x1ZGUgIndpbmRlZi5oIgojaW5jbHVkZSAid2luZ2RpLmgiCiNpbmNsdWRlICJ3aW51c2VyLmgiCiNpbmNsdWRlICJ3aW5lL3dpbmRlZjE2LmgiCiNpbmNsdWRlICJoZWFwLmgiCiNpbmNsdWRlICJ3aW52ZXIuaCIKI2luY2x1ZGUgIndpbm5scy5oIgojaW5jbHVkZSAid2lucmVnLmgiCiNpbmNsdWRlICJ3aW5lcnJvci5oIgojaW5jbHVkZSAiZGVidWd0b29scy5oIgoKREVGQVVMVF9ERUJVR19DSEFOTkVMKG9sZSk7CgpzdGF0aWMgTFBWT0lEIGxwTkxTSW5mbyA9IE5VTEw7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCQlHZXRMb2NhbGVJbmZvMTYJW09MRTJOTFMuNV0KICogSXMgdGhlIGxhc3QgcGFyYW1ldGVyIHJlYWxseSBXT1JEIGZvciBXaW4xNj8KICovCklOVDE2IFdJTkFQSSBHZXRMb2NhbGVJbmZvMTYoTENJRCBsY2lkLExDVFlQRSBMQ1R5cGUsTFBTVFIgYnVmLElOVDE2IGxlbikKewoJcmV0dXJuIEdldExvY2FsZUluZm9BKGxjaWQsTENUeXBlLGJ1ZixsZW4pOwp9CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCQlHZXRTdHJpbmdUeXBlMTYJW09MRTJOTFMuN10KICovCkJPT0wxNiBXSU5BUEkgR2V0U3RyaW5nVHlwZTE2KExDSUQgbG9jYWxlLERXT1JEIGR3SW5mb1R5cGUsTFBDU1RSIHNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UMTYgY2NoU3JjLExQV09SRCBjaGFydHlwZSkKewoJcmV0dXJuIEdldFN0cmluZ1R5cGVFeEEobG9jYWxlLGR3SW5mb1R5cGUsc3JjLGNjaFNyYyxjaGFydHlwZSk7Cn0KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgQ29tcGFyZVN0cmluZzE2ICAgICAgIChPTEUyTkxTLjgpCiAqLwpVSU5UMTYgV0lOQVBJIENvbXBhcmVTdHJpbmcxNihEV09SRCBsY2lkLERXT1JEIGZkd1N0eWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUENTVFIgczEsRFdPUkQgbDEsTFBDU1RSIHMyLERXT1JEIGwyKQp7CglyZXR1cm4gKFVJTlQxNilDb21wYXJlU3RyaW5nQShsY2lkLGZkd1N0eWxlLHMxLGwxLHMyLGwyKTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgIFJlZ2lzdGVyTkxTSW5mb0NoYW5nZWQgIFtPTEUyTkxTLjEwXQogKi8KQk9PTDE2IFdJTkFQSSBSZWdpc3Rlck5MU0luZm9DaGFuZ2VkMTYoTFBWT0lEIGxwTmV3TkxTSW5mbykgLyogWz8/P10gRklYTUUgKi8KewoJRklYTUUoIkZ1bGx5IGltcGxlbWVudGVkLCBidXQgZG9lc24ndCBlZmZlY3QgYW55dGhpbmcuXG4iKTsKCglpZiAoIWxwTmV3TkxTSW5mbykgewoJCWxwTkxTSW5mbyA9IE5VTEw7CgkJcmV0dXJuIFRSVUU7Cgl9CgllbHNlIHsKCQlpZiAoIWxwTkxTSW5mbykgewoJCQlscE5MU0luZm8gPSBscE5ld05MU0luZm87CgkJCXJldHVybiBUUlVFOwoJCX0KCX0KCglyZXR1cm4gRkFMU0U7IC8qIHB0ciBub3Qgc2V0ICovCn0gCgo=