Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9lcmFzZV9rZXkKCmVyYXNlX2tleQo9PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgQXNzb2NTZXEKICAgICAgICAsIHR5cGVuYW1lIEtleQogICAgICAgID4KICAgIHN0cnVjdCBlcmFzZV9rZXkKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpFcmFzZXMgZWxlbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgYGBLZXlgYCBpbiB0aGUgfEV4dGVuc2libGUgQXNzb2NpYXRpdmUgU2VxdWVuY2V8IApgYEFzc29jU2VxYGAgLiAKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9lcmFzZV9rZXkuaHBwPgoKCk1vZGVsIG9mCi0tLS0tLS0tCgp8VGFnIERpc3BhdGNoZWQgTWV0YWZ1bmN0aW9ufAoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYEFzc29jU2VxYGAgIHwgfEV4dGVuc2libGUgQXNzb2NpYXRpdmUgU2VxdWVuY2V8IHwgQSBzZXF1ZW5jZSB0byBlcmFzZSBlbGVtZW50cyBmcm9tLiAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYEtleWBgICAgICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQSBrZXkgZm9yIHRoZSBlbGVtZW50cyB0byBiZSByZW1vdmVkLiAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKRm9yIGFueSB8RXh0ZW5zaWJsZSBBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwgYGBzYGAsIGFuZCBhcmJpdHJhcnkgdHlwZSBgYGtleWBgOgoKCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGVyYXNlX2tleTxzLGtleT46OnR5cGUgcjsgCgo6UmV0dXJuIHR5cGU6CiAgICB8RXh0ZW5zaWJsZSBBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwuCiAgICAKOlNlbWFudGljczoKICAgIGBgcmBgIGlzIHxjb25jZXB0LWlkZW50aWNhbHwgYW5kIGVxdWl2YWxlbnQgdG8gYGBzYGAgZXhjZXB0IHRoYXQgCiAgICBgYGhhc19rZXk8cixrPjo6dmFsdWUgPT0gZmFsc2VgYC4KCjpQb3N0Y29uZGl0aW9uOgogICAgYGBzaXplPHI+Ojp2YWx1ZSA9PSBzaXplPHM+Ojp2YWx1ZSAtIDFgYC4gCgoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgbWFwPCBwYWlyPGludCx1bnNpZ25lZD4sIHBhaXI8Y2hhcixsb25nPiA+IG07CiAgICB0eXBlZGVmIGVyYXNlX2tleTxtLGNoYXI+Ojp0eXBlIG0xOwoKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHNpemU8bTE+Ojp0eXBlOjp2YWx1ZSwgPT0sIDEgKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBhdDxtMSxjaGFyPjo6dHlwZSx2b2lkXF8gPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBpc19zYW1lPCBhdDxtMSxpbnQ+Ojp0eXBlLHVuc2lnbmVkID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxFeHRlbnNpYmxlIEFzc29jaWF0aXZlIFNlcXVlbmNlfCwgfGVyYXNlfCwgfGhhc19rZXl8LCB8aW5zZXJ0fAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK