Li4gU2VxdWVuY2VzL0NsYXNzZXMvL3ZlY3Rvcl9jIHw3MAoKdmVjdG9yX2MKPT09PT09PT0KCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpgYHZlY3Rvcl9jYGAgaXMgYW4gfEludGVncmFsIFNlcXVlbmNlIFdyYXBwZXJ8IGZvciB8dmVjdG9yfC4gQXMgc3VjaCwgaXQgc2hhcmVzCmFsbCB8dmVjdG9yfCBjaGFyYWN0ZXJpc3RpY3MgYW5kIHJlcXVpcmVtZW50cywgYW5kIGRpZmZlcnMgb25seSBpbiB0aGUgd2F5IHRoZSAKb3JpZ2luYWwgc2VxdWVuY2UgY29udGVudCBpcyBzcGVjaWZpZWQuCgpIZWFkZXIKLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBTZXF1ZW5jZSBmb3JtICAgICB8IEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IFZhcmlhZGljICAgICAgICAgIHwgYGAjaW5jbHVkZSA8Ym9vc3QvbXBsL3ZlY3Rvcl9jLmhwcD5gYCAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgTnVtYmVyZWQgICAgICAgICAgfCBgYCNpbmNsdWRlIDxib29zdC9tcGwvdmVjdG9yL3ZlY3RvcmBgXCAqbipcIGBgX2MuaHBwPmBgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKCgpNb2RlbCBvZgotLS0tLS0tLQoKKiB8SW50ZWdyYWwgU2VxdWVuY2UgV3JhcHBlcnwKKiB8VmFyaWFkaWMgU2VxdWVuY2V8CiogfFJhbmRvbSBBY2Nlc3MgU2VxdWVuY2V8CiogfEV4dGVuc2libGUgU2VxdWVuY2V8CiogfEJhY2sgRXh0ZW5zaWJsZSBTZXF1ZW5jZXwKKiB8RnJvbnQgRXh0ZW5zaWJsZSBTZXF1ZW5jZXwKCgpFeHByZXNzaW9uIHNlbWFudGljcwotLS0tLS0tLS0tLS0tLS0tLS0tLQoKfFNlbWFudGljcyBkaXNjbGFpbWVyLi4ufCB8dmVjdG9yfC4KCi4uIHdvcmthcm91bmQgc3Vic3RpdHV0aW9uIGJ1ZyAoc2hvdWxkIGJlIHJlcGxhY2U6OiB2ZWN0b3JcICpuKlwgX2M8VCxcIHxjMS4uLmNufD4pCi4uIHx2ZWN0b3JuX2M8VCwuLi4+fCByZXBsYWNlOjogdmVjdG9yXCAqbipcIF9jPFQsXCAqYypcIDpzdWI6YDFgLFwgKmMqXCA6c3ViOmAyYCwuLi4gXCAqYypcIDpzdWI6YG5gXCA+CgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNlbWFudGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8IC4uIHBhcnNlZC1saXRlcmFsOjogICAgICAgICAgICAgICAgICAgICAgIHwgQSB8dmVjdG9yfCBvZiBpbnRlZ3JhbCBjb25zdGFudCB3cmFwcGVycyAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgaW50ZWdyYWxfYzxULGBgXCB8YzF8XCBgYD5gYCwgICAgICAgICAgICAgICB8CnwgICAgdmVjdG9yX2M8VCxcIHxjMS4uLmNufD4gICAgICAgICAgICAgICAgfCBgYGludGVncmFsX2M8VCxgYFwgfGMyfFwgYGA+YGAsIC4uLiAgICAgICAgICAgfAp8ICAgIHx2ZWN0b3JuX2M8VCwuLi4+fCAgICAgICAgICAgICAgICAgICAgIHwgYGBpbnRlZ3JhbF9jPFQsYGBcIHxjbnxcIGBgPmBgOyAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZSB8SW50ZWdyYWwgU2VxdWVuY2UgV3JhcHBlcnwuICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IC4uIHBhcnNlZC1saXRlcmFsOjogICAgICAgICAgICAgICAgICAgICAgIHwgSWRlbnRpY2FsIHRvIGBgdmVjdG9yYGBcICpuKlwgYGA8YGAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgaW50ZWdyYWxfYzxULGBgXCB8YzF8XCBgYD5gYCwgICAgICAgICAgICAgICB8CnwgICAgdmVjdG9yX2M8VCxcIHxjMS4uLmNufD46OnR5cGUgICAgICAgICAgfCBgYGludGVncmFsX2M8VCxgYFwgfGMyfFwgYGA+YGAsIC4uLiAgICAgICAgICAgfAp8ICAgIHx2ZWN0b3JuX2M8VCwuLi4+fDo6dHlwZSAgICAgICAgICAgICAgIHwgYGBpbnRlZ3JhbF9jPFQsYGBcIHxjbnxcIGBgPmBgIGBgPmBgOyAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZSB8SW50ZWdyYWwgU2VxdWVuY2UgV3JhcHBlcnwuICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IC4uIHBhcnNlZC1saXRlcmFsOjogICAgICAgICAgICAgICAgICAgICAgIHwgSWRlbnRpY2FsIHRvIGBgVGBgOyBzZWUgICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHxJbnRlZ3JhbCBTZXF1ZW5jZSBXcmFwcGVyfC4gICAgICAgICAgICAgICAgICB8CnwgICB2ZWN0b3JfYzxULFwgfGMxLi4uY258Pjo6dmFsdWVfdHlwZSAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgfHZlY3Rvcm5fYzxULC4uLj58Ojp2YWx1ZV90eXBlICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgdmVjdG9yX2M8aW50LDEsMSwyLDMsNSw4LDEzLDIxLDM0PiBmaWJvbmFjY2k7CiAgICB0eXBlZGVmIHB1c2hfYmFjazxmaWJvbmFjY2ksaW50Xzw1NT4gPjo6dHlwZSBmaWJvbmFjY2kyOwoKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIGZyb250PGZpYm9uYWNjaTI+Ojp0eXBlOjp2YWx1ZSwgPT0sIDEgKTsKICAgIEJPT1NUX01QTF9BU1NFUlRfUkVMQVRJT04oIGJhY2s8Zmlib25hY2NpMj46OnR5cGU6OnZhbHVlLCA9PSwgNTUgKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfFNlcXVlbmNlc3wsIHxJbnRlZ3JhbCBTZXF1ZW5jZSBXcmFwcGVyfCwgfHZlY3RvcnwsIHxpbnRlZ3JhbF9jfCwgfHNldF9jfCwgfGxpc3RfY3wsIHxyYW5nZV9jfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK