Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9zaXplCgpzaXplCj09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICA+CiAgICBzdHJ1Y3Qgc2l6ZQogICAgewogICAgICAgIHR5cGVkZWYgfHVuc3BlY2lmaWVkfCB0eXBlOwogICAgfTsKCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KCmBgc2l6ZWBgIHJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc2VxdWVuY2UsIHRoYXQgaXMsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgCmluIHRoZSByYW5nZSBbYGBiZWdpbjxTZXF1ZW5jZT46OnR5cGVgYCwgYGBlbmQ8U2VxdWVuY2U+Ojp0eXBlYGApLgoKCkhlYWRlcgotLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKICAgIAogICAgI2luY2x1ZGUgPGJvb3N0L21wbC9zaXplLmhwcD4KCgoKTW9kZWwgb2YKLS0tLS0tLS0KCnxUYWcgRGlzcGF0Y2hlZCBNZXRhZnVuY3Rpb258CgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgU2VxdWVuY2VgYCAgfCB8Rm9yd2FyZCBTZXF1ZW5jZXwgICAgfCBBIHNlcXVlbmNlIHRvIHF1ZXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKRm9yIGFueSB8Rm9yd2FyZCBTZXF1ZW5jZXwgYGBzYGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgc2l6ZTxzPjo6dHlwZSBuOyAKCjpSZXR1cm4gdHlwZToKICAgIHxJbnRlZ3JhbCBDb25zdGFudHwuCgo6U2VtYW50aWNzOgogICAgRXF1aXZhbGVudCB0byAKCiAgICAuLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICAgIHR5cGVkZWYgZGlzdGFuY2U8IGJlZ2luPHM+Ojp0eXBlLGVuZDxzPjo6dHlwZSA+Ojp0eXBlIG47CgoKOlBvc3Rjb25kaXRpb246CiAgICBgYG46OnZhbHVlID49IDBgYC4KCgoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgpUaGUgY29tcGxleGl0eSBvZiB0aGUgYGBzaXplYGAgbWV0YWZ1bmN0aW9uIGRpcmVjdGx5IGRlcGVuZHMgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIAp0aGUgcGFydGljdWxhciBzZXF1ZW5jZSBpdCBpcyBhcHBsaWVkIHRvLiBJbiB0aGUgd29yc3QgY2FzZSwgYGBzaXplYGAgZ3VhcmFudGVlcyBhIApsaW5lYXIgY29tcGxleGl0eS4KCklmIHRoZSBgYHNgYCBpcyBhIHxSYW5kb20gQWNjZXNzIFNlcXVlbmNlfCwgYGBzaXplPHM+Ojp0eXBlYGAgaXMgYW4gfE8oMSl8IG9wZXJhdGlvbi4gClRoZSBvcHBvc2l0ZSBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB8LS18IGZvciBleGFtcGxlLCBhIHNlcXVlbmNlIGNsYXNzIHRoYXQgbW9kZWxzIAp8Rm9yd2FyZCBTZXF1ZW5jZXwgbWlnaHQgc3RpbGwgZ2l2ZSB1cyBhbiB8TygxKXwgYGBzaXplYGAgaW1wbGVtZW50YXRpb24uCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgbGlzdDA8PiBlbXB0eV9saXN0OwogICAgdHlwZWRlZiB2ZWN0b3JfYzxpbnQsMCwxLDIsMyw0LDU+IG51bWJlcnM7CiAgICB0eXBlZGVmIHJhbmdlX2M8aW50LDAsMTAwPiBtb3JlX251bWJlcnM7CiAgICAKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIHNpemU8bGlzdD46OnZhbHVlLCA9PSwgMCApOwogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggc2l6ZTxudW1iZXJzPjo6dmFsdWUsID09LCA1ICk7CiAgICBCT09TVF9NUExfQVNTRVJUX1JFTEFUSU9OKCBzaXplPG1vcmVfbnVtYmVycz46OnZhbHVlLCA9PSwgMTAwICk7CgoKU2VlIGFsc28KLS0tLS0tLS0KCnxGb3J3YXJkIFNlcXVlbmNlfCwgfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8LCB8ZW1wdHl8LCB8YmVnaW58LCB8ZW5kfCwgfGRpc3RhbmNlfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK