Li4gQWxnb3JpdGhtcy9RdWVyeWluZyBBbGdvcml0aG1zLy91cHBlcl9ib3VuZCB8NzAKCnVwcGVyX2JvdW5kCj09PT09PT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAgLCB0eXBlbmFtZSBUCiAgICAgICAgLCB0eXBlbmFtZSBQcmVkID0gbGVzczxfMSxfMj4KICAgICAgICA+CiAgICBzdHJ1Y3QgdXBwZXJfYm91bmQKICAgIHsKICAgICAgICB0eXBlZGVmIHx1bnNwZWNpZmllZHwgdHlwZTsKICAgIH07CgoKCkRlc2NyaXB0aW9uCi0tLS0tLS0tLS0tCgpSZXR1cm5zIHRoZSBsYXN0IHBvc2l0aW9uIGluIHRoZSBzb3J0ZWQgYGBTZXF1ZW5jZWBgIHdoZXJlIGBgVGBgIGNvdWxkIGJlIGluc2VydGVkIHdpdGhvdXQgCnZpb2xhdGluZyB0aGUgb3JkZXJpbmcuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL3VwcGVyX2JvdW5kLmhwcD4KCgoKUGFyYW1ldGVycwotLS0tLS0tLS0tCgorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwp8YGBTZXF1ZW5jZWBgICAgfCB8Rm9yd2FyZCBTZXF1ZW5jZXwgICAgICAgICAgICB8IEEgc29ydGVkIHNlcXVlbmNlIHRvIHNlYXJjaCBpbi4gICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfGBgVGBgICAgICAgICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgICAgICAgICAgfCBBIHR5cGUgdG8gc2VhcmNoIGEgcG9zaXRpb24gZm9yLiAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnxgYFByZWRgYCAgICAgICB8IEJpbmFyeSB8TGFtYmRhIEV4cHJlc3Npb258ICAgIHwgQSBzZWFyY2ggY3JpdGVyaWEuICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHNvcnRlZCB8Rm9yd2FyZCBTZXF1ZW5jZXwgYGBzYGAsIGJpbmFyeSB8TGFtYmRhIEV4cHJlc3Npb258IGBgcHJlZGBgLCBhbmQKYXJiaXRyYXJ5IHR5cGUgYGB4YGA6CgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgdXBwZXJfYm91bmQ8IHMseCxwcmVkID46OnR5cGUgaTsgCgo6UmV0dXJuIHR5cGU6CiAgICB8Rm9yd2FyZCBJdGVyYXRvcnwKCjpTZW1hbnRpY3M6CiAgICBgYGlgYCBpcyB0aGUgZnVydGhlcm1vc3QgaXRlcmF0b3IgaW4gfGJlZ2luL2VuZDxzPnwgc3VjaCB0aGF0LCBmb3IgZXZlcnkgaXRlcmF0b3IgCiAgICBgYGpgYCBpbiBgYFtiZWdpbjxzPjo6dHlwZSwgaSlgYCwKCiAgICAuLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICAgICBhcHBseTwgcHJlZCwgeCwgZGVyZWY8aj46OnR5cGUgPjo6dHlwZTo6dmFsdWUgPT0gZmFsc2UgCgoKQ29tcGxleGl0eQotLS0tLS0tLS0tCgpUaGUgbnVtYmVyIG9mIGNvbXBhcmlzb25zIGlzIGxvZ2FyaXRobWljOiBhdCBtb3N0IGxvZ1wgOnN1YjpgMmBcICggYGBzaXplPHM+Ojp2YWx1ZWBgICkgKyAxLiAKSWYgYGBzYGAgaXMgYSB8UmFuZG9tIEFjY2VzcyBTZXF1ZW5jZXwgdGhlbiB0aGUgbnVtYmVyIG9mIHN0ZXBzIHRocm91Z2ggdGhlIHJhbmdlIAppcyBhbHNvIGxvZ2FyaXRobWljOyBvdGhlcndpc2UsIHRoZSBudW1iZXIgb2Ygc3RlcHMgaXMgcHJvcG9ydGlvbmFsIHRvIApgYHNpemU8cz46OnZhbHVlYGAuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgdmVjdG9yX2M8aW50LDEsMiwzLDMsMyw1LDg+IG51bWJlcnM7CiAgICB0eXBlZGVmIHVwcGVyX2JvdW5kPCBudW1iZXJzLCBpbnRfPDM+ID46OnR5cGUgaXRlcjsKICAgIAogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTigKICAgICAgICAgIChkaXN0YW5jZTwgYmVnaW48bnVtYmVycz46OnR5cGUsaXRlciA+Ojp2YWx1ZSksID09LCA1CiAgICAgICAgKTsKIAogICAgQk9PU1RfTVBMX0FTU0VSVF9SRUxBVElPTiggZGVyZWY8aXRlcj46OnR5cGU6OnZhbHVlLCA9PSwgNSApOwoKClNlZSBhbHNvCi0tLS0tLS0tCgp8UXVlcnlpbmcgQWxnb3JpdGhtc3wsIHxsb3dlcl9ib3VuZHwsIHxmaW5kfCwgfGZpbmRfaWZ8LCB8bWluX2VsZW1lbnR8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=