Li4gU2VxdWVuY2VzL0ludHJpbnNpYyBNZXRhZnVuY3Rpb25zLy9vcmRlcgoKb3JkZXIKPT09PT0KClN5bm9wc2lzCi0tLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UKICAgICAgICAsIHR5cGVuYW1lIEtleQogICAgICAgID4KICAgIHN0cnVjdCBvcmRlcgogICAgewogICAgICAgIHR5cGVkZWYgfHVuc3BlY2lmaWVkfCB0eXBlOwogICAgfTsKCgoKRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0KClJldHVybnMgYSB1bmlxdWUgdW5zaWduZWQgfEludGVncmFsIENvbnN0YW50fCBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSBgYEtleWBgIGluIApgYFNlcXVlbmNlYGAuCgoKSGVhZGVyCi0tLS0tLQoKLi4gcGFyc2VkLWxpdGVyYWw6OgogICAgCiAgICAjaW5jbHVkZSA8Ym9vc3QvbXBsL29yZGVyLmhwcD4KCgpNb2RlbCBvZgotLS0tLS0tLQoKfFRhZyBEaXNwYXRjaGVkIE1ldGFmdW5jdGlvbnwKCgpQYXJhbWV0ZXJzCi0tLS0tLS0tLS0KCistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IFBhcmFtZXRlciAgICAgfCBSZXF1aXJlbWVudCAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBTZXF1ZW5jZWBgICB8IHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwgICAgfCBBIHNlcXVlbmNlIHRvIHF1ZXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYEtleWBgICAgICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgICAgICB8IFRoZSBxdWVyaWVkIGtleS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CistLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgpGb3IgYW55IHxBc3NvY2lhdGl2ZSBTZXF1ZW5jZXwgYGBzYGAsIGFuZCBhcmJpdHJhcnkgdHlwZSBgYGtleWBgOgoKLi4gcGFyc2VkLWxpdGVyYWw6OgoKICAgIHR5cGVkZWYgb3JkZXI8cyxrZXk+Ojp0eXBlIG47IAoKOlJldHVybiB0eXBlOgogICAgVW5zaWduZWQgfEludGVncmFsIENvbnN0YW50fC4KICAgIAo6U2VtYW50aWNzOgogICAgSWYgYGBoYXNfa2V5PHMsa2V5Pjo6dmFsdWUgPT0gdHJ1ZWBgLCBgYG5gYCBpcyBhIHVuaXF1ZSB1bnNpZ25lZCAKICAgIHxJbnRlZ3JhbCBDb25zdGFudHwgYXNzb2NpYXRlZCB3aXRoIGBga2V5YGAgaW4gYGBzYGA7IG90aGVyd2lzZSwgCiAgICBgYG5gYCBpcyBpZGVudGljYWwgdG8gYGB2b2lkX2BgLgoKCkNvbXBsZXhpdHkKLS0tLS0tLS0tLQoKQW1vcnRpemVkIGNvbnN0YW50IHRpbWUuCgoKRXhhbXBsZQotLS0tLS0tCgouLiBwYXJzZWQtbGl0ZXJhbDo6CiAgICAKICAgIHR5cGVkZWYgbWFwPCBwYWlyPGludCx1bnNpZ25lZD4sIHBhaXI8Y2hhcixsb25nPiA+IG07CgogICAgQk9PU1RfTVBMX0FTU0VSVF9OT1QoKCBpc19zYW1lPCBvcmRlcjxtLGludD46OnR5cGUsIHZvaWRcXyA+ICkpOwogICAgQk9PU1RfTVBMX0FTU0VSVCgoIGlzX3NhbWU8IG9yZGVyPG0sbG9uZz46OnR5cGUsdm9pZFxfID4gKSk7CgoKClNlZSBhbHNvCi0tLS0tLS0tCgp8QXNzb2NpYXRpdmUgU2VxdWVuY2V8LCB8aGFzX2tleXwsIHxjb3VudHwsIHxtYXB8CgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=