Li4gTWV0YWZ1bmN0aW9ucy9UeXBlIFNlbGVjdGlvbi8vZXZhbF9pZiB8MzAKCmV2YWxfaWYKPT09PT09PQoKU3lub3BzaXMKLS0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdGVtcGxhdGU8IAogICAgICAgICAgdHlwZW5hbWUgQwogICAgICAgICwgdHlwZW5hbWUgRjEKICAgICAgICAsIHR5cGVuYW1lIEYyCiAgICAgICAgPgogICAgc3RydWN0IGV2YWxfaWYKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpFdmFsdWF0ZXMgb25lIG9mIGl0cyB0d28gfG51bGxhcnkgbWV0YWZ1bmN0aW9ufCBhcmd1bWVudHMsIGBgRjFgYCBvciBgYEYyYGAsIGRlcGVuZGluZyAKb24gdGhlIHZhbHVlIGBgQ2BgLgoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9ldmFsX2lmLmhwcD4KCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBDYGAgICAgICAgICB8IHxJbnRlZ3JhbCBDb25zdGFudHwgICAgICAgICAgICAgICB8IEFuIGV2YWx1YXRpb24gY29uZGl0aW9uLiAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBGMWBgLCBgYEYyYGB8IE51bGxhcnkgfE1ldGFmdW5jdGlvbnwgICAgICAgICAgICB8IE1ldGFmdW5jdGlvbnMgdG8gc2VsZWN0IGZvciBldmFsdWF0aW9uIGZyb20uICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZvciBhbnkgfEludGVncmFsIENvbnN0YW50fCBgYGNgYCBhbmQgbnVsbGFyeSB8TWV0YWZ1bmN0aW9ufFwgcyBgYGYxYGAsIGBgZjJgYDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBldmFsX2lmPGMsZjEsZjI+Ojp0eXBlIHQ7Cgo6UmV0dXJuIHR5cGU6CiAgICBBbnkgdHlwZS4KCjpTZW1hbnRpY3M6CiAgICBJZiBgYGM6OnZhbHVlID09IHRydWVgYCwgYGB0YGAgaXMgaWRlbnRpY2FsIHRvIGBgZjE6OnR5cGVgYDsgb3RoZXJ3aXNlIGBgdGBgIGlzIAogICAgaWRlbnRpY2FsIHRvIGBgZjI6OnR5cGVgYC4KCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgdHlwZWRlZiBldmFsX2lmPCB0cnVlXF8sIGlkZW50aXR5PGNoYXI+LCBpZGVudGl0eTxsb25nPiA+Ojp0eXBlIHQxOwogICAgdHlwZWRlZiBldmFsX2lmPCBmYWxzZVxfLCBpZGVudGl0eTxjaGFyPiwgaWRlbnRpdHk8bG9uZz4gPjo6dHlwZSB0MjsKCiAgICBCT09TVF9NUExfQVNTRVJUKCggaXNfc2FtZTx0MSxjaGFyPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPHQyLGxvbmc+ICkpOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8TWV0YWZ1bmN0aW9uc3wsIHxJbnRlZ3JhbCBDb25zdGFudHwsIHxldmFsX2lmX2N8LCB8aWZffAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK