Li4gQWxnb3JpdGhtcy9JbnNlcnRlcnMvL2luc2VydGVyCgouLiBfYGluc2VydGVyX2A6CgppbnNlcnRlciAoY2xhc3MpCj09PT09PT09PT09PT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU3RhdGUKICAgICAgICAsIHR5cGVuYW1lIE9wZXJhdGlvbgogICAgICAgID4KICAgIHN0cnVjdCBpbnNlcnRlcgogICAgewogICAgICAgIHR5cGVkZWYgU3RhdGUgc3RhdGU7CiAgICAgICAgdHlwZWRlZiBPcGVyYXRpb24gb3BlcmF0aW9uOwogICAgfTsKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKQSBnZW5lcmFsLXB1cnBvc2UgbW9kZWwgb2YgdGhlIHxJbnNlcnRlcnwgY29uY2VwdC4gCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL2luc2VydGVyLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfEluc2VydGVyfAoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFN0YXRlYGAgICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgICAgICAgICAgfCBBIGluaXRpYWwgc3RhdGUuICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBPcGVyYXRpb25gYCB8IEJpbmFyeSB8TGFtYmRhIEV4cHJlc3Npb258ICAgIHwgQW4gb3V0cHV0IG9wZXJhdGlvbi4gICAgICAgICAgICAgIHwgICAgIAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKfFNlbWFudGljcyBkaXNjbGFpbWVyLi4ufCB8SW5zZXJ0ZXJ8LgoKRm9yIGFueSBiaW5hcnkgfExhbWJkYSBFeHByZXNzaW9ufCBgYG9wYGAgYW5kIGFyYml0cmFyeSB0eXBlIGBgc3RhdGVgYDoKCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgIHwgU2VtYW50aWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBpbnNlcnRlcjxvcCxzdGF0ZT5gYCAgICB8IEFuIHxJbnNlcnRlcnwuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgpBbW9ydGl6ZWQgY29uc3RhbnQgdGltZS4KCgpFeGFtcGxlCi0tLS0tLS0KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgTiA+IHN0cnVjdCBpc19vZGQgOiBib29sXzwgKCBOOjp2YWx1ZSAlIDIgKSA+IHt9OwogICAgCiAgICB0eXBlZGVmIGNvcHk8CiAgICAgICAgICByYW5nZV9jPGludCwwLDEwPgogICAgICAgICwgaW5zZXJ0ZXI8IC8vIGEgZmlsdGVyaW5nICdwdXNoX2JhY2snIGluc2VydGVyCiAgICAgICAgICAgICAgdmVjdG9yPD4KICAgICAgICAgICAgLCBpZl88IGlzX29kZDxfMj4sIHB1c2hfYmFjazxfMSxfMj4sIF8xID4KICAgICAgICAgICAgPgogICAgICAgID46OnR5cGUgb2RkczsKICAgICAgIAogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGVxdWFsPCBvZGRzLCB2ZWN0b3JfYzxpbnQsMSwzLDUsNyw5PiwgZXF1YWxfdG88XyxfPiA+ICkpOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8QWxnb3JpdGhtc3wsIHxJbnNlcnRlcnwsIHxSZXZlcnNpYmxlIEFsZ29yaXRobXwsIHxmcm9udF9pbnNlcnRlcnwsIHxiYWNrX2luc2VydGVyfAoKLi4gfFtpbnNlcnRlcl18IHJlcGxhY2U6OiBgaW5zZXJ0ZXIgKGNsYXNzKWBfCgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=