Li4gTWV0YWZ1bmN0aW9ucy9Db25jZXB0cy8vTWV0YWZ1bmN0aW9uIENsYXNzIHwyMAoKTWV0YWZ1bmN0aW9uIENsYXNzCj09PT09PT09PT09PT09PT09PQoKU3VtbWFyeQotLS0tLS0tCgpBICptZXRhZnVuY3Rpb24gY2xhc3MqIGlzIGEgY2VydGFpbiBmb3JtIG9mIG1ldGFmdW5jdGlvbiByZXByZXNlbnRhdGlvbiAKdGhhdCBlbmFibGVzIGhpZ2hlci1vcmRlciBtZXRhcHJvZ3JhbW1pbmcuIE1vcmUgcHJlY2lzZWx5LCBpdCdzIGEgY2xhc3MKd2l0aCBhIHB1YmxpY2x5LWFjY2Vzc2libGUgbmVzdGVkIHxtZXRhZnVuY3Rpb258IGNhbGxlZCBgYGFwcGx5YGAuIApDb3JyZXNwb25kaW5nbHksIGEgbWV0YWZ1bmN0aW9uIGNsYXNzIGludm9jYXRpb24gaXMgZGVmaW5lZCBhcyBpbnZvY2F0aW9uCm9mIGl0cyBuZXN0ZWQgYGBhcHBseWBgIG1ldGFmdW5jdGlvbi4KCgpFeHByZXNzaW9uIHJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKfEluIHRoZSBmb2xsb3dpbmcgdGFibGUuLi58IGBgZmBgIGlzIGEgfE1ldGFmdW5jdGlvbiBDbGFzc3wuCgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IEV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICB8IENvbXBsZXhpdHkgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IGBgZjo6YXBwbHk6OnR5cGVgYCAgICAgICAgICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgICAgICB8IFVuc3BlY2lmaWVkLiAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgZjo6YXBwbHk8Pjo6dHlwZWBgICAgICAgICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgICAgICB8IFVuc3BlY2lmaWVkLiAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgZjo6YXBwbHk8YTEsLi4uYW4+Ojp0eXBlYGAgIHwgQW55IHR5cGUgICAgICAgICAgICAgICAgICB8IFVuc3BlY2lmaWVkLiAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBmOjphcHBseTo6dHlwZSB4OwoKOlByZWNvbmRpdGlvbjoKICAgIGBgZmBgIGlzIGEgbnVsbGFyeSB8TWV0YWZ1bmN0aW9uIENsYXNzfDsgYGBmOjphcHBseTo6dHlwZWBgIGlzIGEgKnR5cGUtbmFtZSouCgo6U2VtYW50aWNzOgogICAgYGB4YGAgaXMgdGhlIHJlc3VsdCBvZiB0aGUgbWV0YWZ1bmN0aW9uIGNsYXNzIGludm9jYXRpb24uCgoKLi4gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGY6OmFwcGx5PD46OnR5cGUgeDsKCjpQcmVjb25kaXRpb246CiAgICBgYGZgYCBpcyBhIG51bGxhcnkgfE1ldGFmdW5jdGlvbiBDbGFzc3w7IGBgZjo6YXBwbHk8Pjo6dHlwZWBgIGlzIGEgKnR5cGUtbmFtZSouCgo6U2VtYW50aWNzOgogICAgYGB4YGAgaXMgdGhlIHJlc3VsdCBvZiB0aGUgbWV0YWZ1bmN0aW9uIGNsYXNzIGludm9jYXRpb24uCgoKLi4gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCi4uIHBhcnNlZC1saXRlcmFsOjoKCiAgICB0eXBlZGVmIGY6OmFwcGx5PGExLFwgfC4uLnxcIGFcICpuKlw+Ojp0eXBlIHg7Cgo6UHJlY29uZGl0aW9uOgogICAgYGBmYGAgaXMgYW4gKm4qLWFyeSBtZXRhZnVuY3Rpb24gY2xhc3M7IGBgYXBwbHlgYCBpcyBhIHxNZXRhZnVuY3Rpb258LgogICAgCjpTZW1hbnRpY3M6CiAgICBgYHhgYCBpcyB0aGUgcmVzdWx0IG9mIHRoZSBtZXRhZnVuY3Rpb24gY2xhc3MKICAgIGludm9jYXRpb24gd2l0aCB0aGUgYWN0dWFsIGFyZ3VtZW50cyB8YTEuLi5hbnwuCgoKTW9kZWxzCi0tLS0tLQoKKiB8YWx3YXlzfAoqIHxhcmd8CiogfHF1b3RlfAoqIHxudW1lcmljX2Nhc3R8CiogfHVucGFja19hcmdzfAoKClNlZSBhbHNvCi0tLS0tLS0tCgp8TWV0YWZ1bmN0aW9uc3wsIHxNZXRhZnVuY3Rpb258LCB8TGFtYmRhIEV4cHJlc3Npb258LCB8SW52b2NhdGlvbnwsIHxhcHBseV93cmFwfCwgfGJpbmR8LCB8cXVvdGV8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=