Li4gTWV0YWZ1bmN0aW9ucy9NaXNjZWxsYW5lb3VzLy9hbHdheXMgfDIwCgphbHdheXMKPT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwgCiAgICAgICAgICB0eXBlbmFtZSBYCiAgICAgICAgPgogICAgc3RydWN0IGFsd2F5cwogICAgewogICAgICAgIC8vIHx1bnNwZWNpZmllZHwKICAgICAgICAvLyB8Li4ufAogICAgfTsKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKYGBhbHdheXM8WD5gYCBzcGVjaWFsaXphdGlvbiBpcyBhIHZhcmlhZGljIHxNZXRhZnVuY3Rpb24gQ2xhc3N8IGFsd2F5cyByZXR1cm5pbmcgdGhlIApzYW1lIHR5cGUsIGBgWGBgLCByZWdhcmRsZXNzIG9mIHRoZSBudW1iZXIgYW5kIHR5cGVzIG9mIHBhc3NlZCBhcmd1bWVudHMuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL2Fsd2F5cy5ocHA+CgpNb2RlbCBvZgotLS0tLS0tLQoKfE1ldGFmdW5jdGlvbiBDbGFzc3wKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBQYXJhbWV0ZXIgICAgIHwgUmVxdWlyZW1lbnQgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBYYGAgICAgICAgICB8IEFueSB0eXBlICAgICAgICAgIHwgQSB0eXBlIHRvIGJlIHJldHVybmVkLiAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW4gYXJiaXRyYXJ5IHR5cGUgYGB4YGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgYWx3YXlzPHg+IGY7Cgo6UmV0dXJuIHR5cGU6CiAgICB8TWV0YWZ1bmN0aW9uIENsYXNzfC4KCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvCiAgICAKICAgIC4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgICAgIHN0cnVjdCBmIDogYmluZDwgaWRlbnRpdHk8XzE+LCB4ID4ge307CgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgYWx3YXlzPHRydWVcXz4gYWx3YXlzX3RydWU7CgogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGFwcGx5PCBhbHdheXNfdHJ1ZSxmYWxzZVxfPiApKTsKICAgIEJPT1NUX01QTF9BU1NFUlQoKCBhcHBseTwgYWx3YXlzX3RydWUsZmFsc2VcXyxmYWxzZVxfID4gKSk7CiAgICBCT09TVF9NUExfQVNTRVJUKCggYXBwbHk8IGFsd2F5c190cnVlLGZhbHNlXF8sZmFsc2VcXyxmYWxzZVxfID4gKSk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxNZXRhZnVuY3Rpb25zfCwgfE1ldGFmdW5jdGlvbiBDbGFzc3wsIHxpZGVudGl0eXwsIHxiaW5kfCwgfGFwcGx5fAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK