Li4gQWxnb3JpdGhtcy9RdWVyeWluZyBBbGdvcml0aG1zLy9jb250YWlucyB8MzAKCmNvbnRhaW5zCj09PT09PT09CgpTeW5vcHNpcwotLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAgLCB0eXBlbmFtZSBUCiAgICAgICAgPgogICAgc3RydWN0IGNvbnRhaW5zCiAgICB7CiAgICAgICAgdHlwZWRlZiB8dW5zcGVjaWZpZWR8IHR5cGU7CiAgICB9OwoKCgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKUmV0dXJucyBhIHRydWUtdmFsdWVkIHxJbnRlZ3JhbCBDb25zdGFudHwgaWYgb25lIG9yIG1vcmUgZWxlbWVudHMgaW4gYGBTZXF1ZW5jZWBgIAphcmUgaWRlbnRpY2FsIHRvIGBgVGBgLiAKCgpIZWFkZXIKLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgICNpbmNsdWRlIDxib29zdC9tcGwvY29udGFpbnMuaHBwPgoKClBhcmFtZXRlcnMKLS0tLS0tLS0tLQoKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgUGFyYW1ldGVyICAgICB8IFJlcXVpcmVtZW50ICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKfCBgYFNlcXVlbmNlYGAgIHwgfEZvcndhcmQgU2VxdWVuY2V8ICAgICAgICB8IEEgc2VxdWVuY2UgdG8gYmUgZXhhbWluZWQuICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgVGBgICAgICAgICAgfCBBbnkgdHlwZSAgICAgICAgICAgICAgICAgIHwgQSB0eXBlIHRvIHNlYXJjaCBmb3IuICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKRXhwcmVzc2lvbiBzZW1hbnRpY3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkZvciBhbnkgfEZvcndhcmQgU2VxdWVuY2V8IGBgc2BgIGFuZCBhcmJpdHJhcnkgdHlwZSBgYHRgYDoKCgouLiBwYXJzZWQtbGl0ZXJhbDo6CgogICAgdHlwZWRlZiBjb250YWluczxzLHQ+Ojp0eXBlIHI7CgoKOlJldHVybiB0eXBlOgogICAgfEludGVncmFsIENvbnN0YW50fC4KCjpTZW1hbnRpY3M6CiAgICBFcXVpdmFsZW50IHRvCgogICAgLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgICAgIAogICAgICAgIHR5cGVkZWYgbm90XzwgaXNfc2FtZTwgCiAgICAgICAgICAgICAgZmluZDxzLHQ+Ojp0eXBlCiAgICAgICAgICAgICwgZW5kPHM+Ojp0eXBlCiAgICAgICAgICAgID4gPjo6dHlwZSByOwoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKTGluZWFyLiBBdCBtb3N0IGBgc2l6ZTxzPjo6dmFsdWVgYCBjb21wYXJpc29ucyBmb3IgaWRlbnRpdHkuIAoKCkV4YW1wbGUKLS0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICB0eXBlZGVmIHZlY3RvcjxjaGFyLGludCx1bnNpZ25lZCxsb25nLHVuc2lnbmVkIGxvbmc+IHR5cGVzOwogICAgQk9PU1RfTVBMX0FTU0VSVF9OT1QoKCBjb250YWluczx0eXBlcyxib29sPiApKTsKCgpTZWUgYWxzbwotLS0tLS0tLQoKfFF1ZXJ5aW5nIEFsZ29yaXRobXN8LCB8ZmluZHwsIHxmaW5kX2lmfCwgfGNvdW50fCwgfGxvd2VyX2JvdW5kfAoKCi4uIGNvcHlyaWdodDo6IENvcHlyaWdodCCpICAyMDAxLTIwMDkgQWxla3NleSBHdXJ0b3ZveSBhbmQgRGF2aWQgQWJyYWhhbXMKICAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwogICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkK