Li4gU2VxdWVuY2VzL0NvbmNlcHRzLy9Bc3NvY2lhdGl2ZSBTZXF1ZW5jZSB8NzAKCkFzc29jaWF0aXZlIFNlcXVlbmNlCj09PT09PT09PT09PT09PT09PT09CgpEZXNjcmlwdGlvbgotLS0tLS0tLS0tLQoKQW4gfEFzc29jaWF0aXZlIFNlcXVlbmNlfCBpcyBhIHxGb3J3YXJkIFNlcXVlbmNlfCB0aGF0IGFsbG93cyBlZmZpY2llbnQgcmV0cmlldmFsIG9mIAplbGVtZW50cyBiYXNlZCBvbiBrZXlzLiBVbmxpa2UgYXNzb2NpYXRpdmUgY29udGFpbmVycyBpbiB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnksIApNUEwgYXNzb2NpYXRpdmUgc2VxdWVuY2VzIGhhdmUgbm8gYXNzb2NpYXRlZCBvcmRlcmluZyByZWxhdGlvbi4gSW5zdGVhZCwgCip0eXBlIGlkZW50aXR5KiBpcyB1c2VkIHRvIGltcG9zZSBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbiBvbiBrZXlzLCBhbmQgdGhlIApvcmRlciBpbiB3aGljaCBzZXF1ZW5jZSBlbGVtZW50cyBhcmUgdHJhdmVyc2VkIGR1cmluZyBpdGVyYXRpb24gaXMgbGVmdCAKdW5zcGVjaWZpZWQuCgoKRGVmaW5pdGlvbnMKLS0tLS0tLS0tLS0KCi4uIF9ga2V5LXBhcnRgOgoKLi4gX2B2YWx1ZS1wYXJ0YDoKCiogQSAqa2V5KiBpcyBhIHBhcnQgb2YgdGhlIGVsZW1lbnQgdHlwZSB1c2VkIHRvIGlkZW50aWZ5IGFuZCByZXRyaWV2ZSAKICB0aGUgZWxlbWVudCB3aXRoaW4gdGhlIHNlcXVlbmNlLgoKKiBBICp2YWx1ZSogaXMgYSBwYXJ0IG9mIHRoZSBlbGVtZW50IHR5cGUgcmV0cmlldmllZCBmcm9tIHRoZSBzZXF1ZW5jZSAKICBieSBpdHMga2V5LgoKCkV4cHJlc3Npb24gcmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp8SW4gdGhlIGZvbGxvd2luZyB0YWJsZS4uLnwgYGBzYGAgaXMgYW4gfEFzc29jaWF0aXZlIFNlcXVlbmNlfCwgCmBgeGBgIGlzIGEgc2VxdWVuY2UgZWxlbWVudCwgYW5kIGBga2BgIGFuZCBgYGRlZmBgIGFyZSBhcmJpdHJhcnkgdHlwZXMuCgpJbiBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZW1lbnRzIGRlZmluZWQgaW4gfEZvcndhcmQgU2VxdWVuY2V8LCAKdGhlIGZvbGxvd2luZyBtdXN0IGJlIG1ldDoKCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbXBsZXhpdHkgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBoYXNfa2V5PHMsaz46OnR5cGVgYCAgICAgICAgfCBCb29sZWFuIHxJbnRlZ3JhbCBDb25zdGFudHwgICAgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZSAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgY291bnQ8cyxrPjo6dHlwZWBgICAgICAgICAgIHwgfEludGVncmFsIENvbnN0YW50fCAgICAgICAgICAgICAgIHwgQW1vcnRpemVkIGNvbnN0YW50IHRpbWUgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYG9yZGVyPHMsaz46OnR5cGVgYCAgICAgICAgICB8IHxJbnRlZ3JhbCBDb25zdGFudHwgb3IgYGB2b2lkX2BgICB8IEFtb3J0aXplZCBjb25zdGFudCB0aW1lICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBhdDxzLGs+Ojp0eXBlYGAgICAgICAgICAgICAgfCBBbnkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZSAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgYXQ8cyxrLGRlZj46OnR5cGVgYCAgICAgICAgIHwgQW55IHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQW1vcnRpemVkIGNvbnN0YW50IHRpbWUgICB8CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBgYGtleV90eXBlPHMseD46OnR5cGVgYCAgICAgICB8IEFueSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFtb3J0aXplZCBjb25zdGFudCB0aW1lICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGB2YWx1ZV90eXBlPHMseD46OnR5cGVgYCAgICAgfCBBbnkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBbW9ydGl6ZWQgY29uc3RhbnQgdGltZSAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCkV4cHJlc3Npb24gc2VtYW50aWNzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgp8U2VtYW50aWNzIGRpc2NsYWltZXIuLi58IHxGb3J3YXJkIFNlcXVlbmNlfC4KCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKfCBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICB8IFNlbWFudGljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCnwgYGBoYXNfa2V5PHMsaz46OnR5cGVgYCAgICAgICAgfCB8dHJ1ZSBpZiBhbmQgb25seSBpZnwgdGhlcmUgaXMgb25lIG9yIG1vcmUgICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVsZW1lbnRzIHdpdGggdGhlIGtleSBgYGtgYCBpbiBgYHNgYDsgc2VlIHxoYXNfa2V5fC4gICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBjb3VudDxzLGs+Ojp0eXBlYGAgICAgICAgICAgfCBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggdGhlIGtleSBgYGtgYCBpbiBgYHNgYDsgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZSB8Y291bnR8LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgYGBvcmRlcjxzLGs+Ojp0eXBlYGAgICAgICAgICAgfCBBIHVuaXF1ZSB1bnNpZ25lZCB8SW50ZWdyYWwgQ29uc3RhbnR8IGFzc29jaWF0ZWQgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdpdGggdGhlIGtleSBgYGtgYCBpbiB0aGUgc2VxdWVuY2UgYGBzYGA7IHNlZSB8b3JkZXJ8LiAgICAgICAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgLi4gcGFyc2VkLWxpdGVyYWw6OiAgICAgICAgICAgfCBUaGUgZmlyc3QgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSBgYGtgYCAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGluIHRoZSBzZXF1ZW5jZSBgYHNgYDsgc2VlIHxhdHwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8ICAgIGF0PHMsaz46OnR5cGUgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICAgYXQ8cyxrLGRlZj46OnR5cGUgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBga2V5X3R5cGU8cyx4Pjo6dHlwZWBgICAgICAgIHwgVGhlIGtleSBwYXJ0IG9mIHRoZSBlbGVtZW50IGBgeGBgIHRoYXQgd291bGQgYmUgICAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VkIHRvIGlkZW50aWZ5IGBgeGBgIGluIGBgc2BgOyBzZWUgfGtleV90eXBlfC4gICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwp8IGBgdmFsdWVfdHlwZTxzLHg+Ojp0eXBlYGAgICAgIHwgVGhlIHZhbHVlIHBhcnQgb2YgdGhlIGVsZW1lbnQgYGB4YGAgdGhhdCB3b3VsZCBiZSAgICAgICAgICAgICB8CnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VkIGZvciBgYHhgYCBpbiBgYHNgYDsgc2VlIHx2YWx1ZV90eXBlfC4gICAgICAgICAgICAgICAgICAgIHwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwoKCi4uIEludmFyaWFudHMKICAgLS0tLS0tLS0tLQoKICAgRm9yIGFueSBhc3NvY2lhdGl2ZSBzZXF1ZW5jZSBgYHNgYCB0aGUgZm9sbG93aW5nIGludmFyaWFudHMgYWx3YXlzIGhvbGQ6IAoKICAgICogPz8/CgoKTW9kZWxzCi0tLS0tLQoKKiB8c2V0fAoqIHxtYXB8CgouLiAqIHxtdWx0aXNldHwKCgpTZWUgYWxzbwotLS0tLS0tLQoKfFNlcXVlbmNlc3wsIHxFeHRlbnNpYmxlIEFzc29jaWF0aXZlIFNlcXVlbmNlfCwgfGhhc19rZXl8LCB8Y291bnR8LCB8b3JkZXJ8LCB8YXR8LCB8a2V5X3R5cGV8LCB8dmFsdWVfdHlwZXwKCgouLiB8a2V5fCByZXBsYWNlOjogYGtleWBfCi4uIF9ga2V5YDogYGtleS1wYXJ0YF8KCi4uIHx2YWx1ZXwgcmVwbGFjZTo6IGB2YWx1ZWBfCi4uIF9gdmFsdWVgOiBgdmFsdWUtcGFydGBfCgoKLi4gY29weXJpZ2h0OjogQ29weXJpZ2h0IKkgIDIwMDEtMjAwOSBBbGVrc2V5IEd1cnRvdm95IGFuZCBEYXZpZCBBYnJhaGFtcwogICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCiAgIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQo=