MjAwMjA5MDMKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wOC8xMiAxMDo0NjozNQogICAgIFtzc2gtYWdlbnQuY10KICAgICBtYWtlIHNzaC1hZ2VudCBzZXRnaWQsIGRpc2FsbG93IHB0cmFjZS4KICAgLSBlc3BpZUBjdnMub3BlbmJzZC5vcmcgMjAwMi8wOC8yMSAxMToyMDo1OQogICAgIFtzc2hkLjhdCiAgICAgYFJTQScgdXBkYXRlZCB0byByZWZlciB0byBgcHVibGljIGtleScsIHdoZXJlIGl0IG1hdHRlcnMuCiAgICAgb2theSBtYXJrdXNACgoyMDAyMDgyMAogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWlsbGVydEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wOC8wMiAxNDo0MzoxNQogICAgIFttb25pdG9yLmMgbW9uaXRvcl9tbS5jXQogICAgIENoYW5nZSBtbV96YWxsb2MoKSBzYW5pdHkgY2hlY2tzIHRvIGJlIG1vcmUgaW4gbGluZSB3aXRoIHdoYXQKICAgICB3ZSBkbyBpbiBjYWxsb2MoKSBhbmQgYWRkIGEgY2hlY2sgdG8gbW9uaXRvcl9tbS5jLgogICAgIE9LIHByb3Zvc0AgYW5kIG1hcmt1c0AKICAgLSBtYXJjQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA4LzAyIDE2OjAwOjA3CiAgICAgW3NzaC4xIHNzaGQuOF0KICAgICBub3RlIHRoYXQgLnNzaC9lbnZpcm9ubWVudCBpcyBvbmx5IHJlYWQgd2hlbgogICAgIGFsbG93ZWQgKFBlcm1pdFVzZXJFbnZpcm9ubWVudCBpbiBzc2hkX2NvbmZpZykuCiAgICAgT0sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wOC8wMiAyMToyMzo0MQogICAgIFtzc2gtcnNhLmNdCiAgICAgZGlmZiBpcyB1X2ludCAoMngpOyBvayBkZXJhYWR0L3Byb3ZvcwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wOC8wMiAyMjoyMDozMAogICAgIFtzc2gtcnNhLmNdCiAgICAgcmVwbGFjZSBSU0FfdmVyaWZ5IHdpdGggb3VyIG93biB2ZXJzaW9uIGFuZCBhdm9pZCB0aGUgT3BlblNTTCBBU04uMSBwYXJzZXIKICAgICBmb3IgYXV0aGVudGljYXRpb247IG9rIGRlcmFhZHQvZGptCiAgIC0gYWFyb25AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDgvMDggMTM6NTA6MjMKICAgICBbc3NoY29ubmVjdDEuY10KICAgICBVc2UgJiB0byB0ZXN0IGlmIGJpdHMgYXJlIHNldCwgbm90ICYmOyBtYXJrdXNAIG9rLgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDgvMDggMjM6NTQ6NTIKICAgICBbYXV0aC5jXQogICAgIHR5cG8gaW4gY29tbWVudAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDgvMDkgMTc6MjE6NDIKICAgICBbc3NoZF9jb25maWcuNV0KICAgICB1c2UgT3AgZm9yIG1kb2MgY29uZm9ybWFuY2U7IGZyb20gZXNyQGdvbHV4LnRoeXJzdXMuY29tCiAgICAgb2sgYWFyb25ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wOC8wOSAxNzo0MToxMgogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHByb3h5IHZzLiBmYWtlIGRpc3BsYXkKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA4LzEyIDE3OjMwOjM1CiAgICAgW3NzaC4xIHNzaGQuOCBzc2hkX2NvbmZpZy41XQogICAgIG1vcmUgUGVybWl0VXNlckVudmlyb25tZW50OyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wOC8xNyAyMzowNzoxNAogICAgIFtzc2guMV0KICAgICBGb3J3YXJkQWdlbnQgaGFzIGRlZmF1bHRlZCB0byBubyBmb3Igb3ZlciAyIHllYXJzOyBiZSBtb3JlIGNsZWFyIGhlcmUuCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wOC8xNyAyMzo1NTowMQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgb3JkZXJlZCBsaXN0IGhlcmUKIC0gKGJhbCkgW2RlZmluZXMuaF0gU29tZSBwbGF0Zm9ybXMgZG9uJ3QgaGF2ZSBTSVpFX1RfTUFYLiAgU28gYXNzaWduIAogICBpdCB0byBVTE9OR19NQVguCgoyMDAyMDgxMwogLSAodGltKSBbY29uZmlndXJlLmFjXSBEaXNwbGF5IE9wZW5TU0wgaGVhZGVyL2xpYnJhcnkgdmVyc2lvbi4KICAgUGF0Y2ggYnkgZHR1Y2tlckB6aXAuY29tLmF1CgoyMDAyMDczMQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzI0IDE2OjExOjE4CiAgICAgW2hvc3RmaWxlLmMgaG9zdGZpbGUuaCBzc2hjb25uZWN0LmNdCiAgICAgcHJpbnQgb3V0IGFsbCBrbm93biBrZXlzIGZvciBhIGhvc3QgaWYgd2UgZ2V0IGEgdW5rbm93biBob3N0IGtleSwKICAgICBzZWUgZGlzY3Vzc2lvbiBhdCBodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz90PTEwMTA2OTIxMDEwMDAxNiZyPTEmdz00CgogICAgIHRoZSBzc2hhcnAgbWl0bSB0b29sIGF0dGFja3MgdXNlcnMgaW4gYSBzaW1pbGFyIHdheSwgc28gaSdkIGxpa2UgdG8KICAgICBwb2ludGVkIG91dCBhZ2FpbjoKICAgICAgICBBIE1JVE0gYXR0YWNrIGlzIGFsd2F5cyBwb3NzaWJsZSBpZiB0aGUgc3NoIGNsaWVudCBwcmludHM6CiAgICAgICAgVGhlIGF1dGhlbnRpY2l0eSBvZiBob3N0ICdibGEnIGNhbid0IGJlIGVzdGFibGlzaGVkLgogICAgIChwcm90b2NvbCB2ZXJzaW9uIDIgd2l0aCBwdWJrZXkgYXV0aGVudGljYXRpb24gYWxsb3dzIHlvdSB0byBkZXRlY3QKICAgICBNSVRNIGF0dGFja3MpCiAgIC0gbW91cmluZ0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8yNSAwMToxNjo1OQogICAgIFtzZnRwLmNdCiAgICAgRmFsbEJhY2tUb1JzaCBkb2VzIG5vdCBleGlzdCBhbnl3aGVyZSBlbHNlLiAgUmVtb3ZlIGl0IGZyb20gaGVyZS4KICAgICBPSyBkZXJhYWR0LgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8yOSAxODo1NzozMAogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgcHJpbnQgZmlsZTpsaW5lCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzMwIDE3OjAzOjU1CiAgICAgW2F1dGgtb3B0aW9ucy5jIHNlcnZjb25mLmMgc2VydmNvbmYuaCBzZXNzaW9uLmMgc3NoZF9jb25maWcgc3NoZF9jb25maWcuNV0KICAgICBhZGQgUGVybWl0VXNlckVudmlyb25tZW50IChvZmYgYnkgZGVmYXVsdCEpOyBmcm9tIGRvdEBkb3RhdC5hdDsKICAgICBvayBwcm92b3MsIGRlcmFhZHQKCjIwMDIwNzMwCiAtIChiYWwpIFt1aWRzd2FwLmNdIFNDTyBjb21waWxlIGNvcnJlY3Rpb24gYnkgZ2VydEBncmVlbmllLm11Yy5kZQoKMjAwMjA3MjgKIC0gKHN0ZXZlc2spIFthdXRoLXBhbS5jXSBzaG91bGQgdXNlIFBBTV9NU0dfTUVNQkVSKCk7IGZyb20gc29sYXIKIC0gKHN0ZXZlc2spIFtDUkVESVRTXSBzb2xhcgogLSAoc3RldmVzaykgW3NzaC1yYW5kLWhlbHBlci5jXSBSQU5EX2J5dGVzKCkgYW5kIFNIQTFfRmluYWwoKSB1bnNpZ25lZAogICBjaGFyIGFyZy4KCjIwMDIwNzI1CiAtIChkam0pIFJlbW92ZSBzb21lIGNydWZ0IGZyb20gSU5TVEFMTAogLSAoZGptKSBMYXRlc3QgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIGZyb20gZnRwOi8vZnRwLmdudS5vcmcvZ251L2NvbmZpZy8KCjIwMDIwNzIzCiAtIChiYWwpIFtic2QtY3JheS5jIGJzZC1jcmF5LmhdIFBhcnQgMiBvZiBDcmF5IG1lcmdlci4gCiAtIChiYWwpIHN5bmMgSUQgdy8gc3NoLWFnZW50LmMKIC0gKGJhbCkgT3BlbkJTRCBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzE5IDE1OjQzOjMzCiAgICAgW2xvZy5jIGxvZy5oIHNlc3Npb24uYyBzc2hkLmNdCiAgICAgcmVtb3ZlIGZhdGFsIGNsZWFudXBzIGFmdGVyIGZvcms7IGJhc2VkIG9uIGRpc2N1c3Npb25zIHdpdGggYW5kIGNvZGUKICAgICBmcm9tIHNvbGFyLgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMTkgMTc6NDI6NDAKICAgICBbc3NoLmNdCiAgICAgZGlzcGxheSBhIHdhcm5pbmcgZnJvbSBzc2ggd2hlbiBYQXV0aExvY2F0aW9uIGRvZXMgbm90IGV4aXN0IG9yIHhhdXRoCiAgICAgcmV0dXJuZWQgbm8gYXV0aGVudGljYXRpb24gZGF0YS4gb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMjEgMTg6MzI6MjAKICAgICBbYXV0aC1vcHRpb25zLmNdCiAgICAgdW5uZWVkZWQgaW5jbHVkZXMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzIxIDE4OjM0OjQzCiAgICAgW2F1dGgtb3B0aW9ucy5oXQogICAgIHJlbW92ZSBpbnZhbGlkIGNvbW1lbnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMjIgMTE6MDM6MDYKICAgICBbc2Vzc2lvbi5jXQogICAgIGZhbGxiYWNrIHRvIF9QQVRIX1NURFBBVEggb24gc2V0dXNlcmNvbnRleHQrTE9HSU5fU0VUUEFUSCBlcnJvcnM7CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8yMiAxNzozMjo1NgogICAgIFttb25pdG9yLmNdCiAgICAgdV9pbnQgaGVyZTsgb2sgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMjMgMTY6MDM6MTAKICAgICBbc3NoZC5jXQogICAgIHV0bXBfbGVuIGlzIHVuc2lnbmVkOyBkaXNwbGF5IGVycm9yIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBvcHRpb25zLgogICAgIG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzE1IDE3OjE1OjMxCiAgICAgW3VpZHN3YXAuY10KICAgICBsaXR0bGUgbW9yZSBkZWJ1Z2dpbmc7IG9rIG1hcmt1c0AKCjIwMDIwNzIyCiAtIChiYWwpIEFJWCB0dHkgZGF0YSBsaW1pdGluZyBwYXRjaCBmaXggYnkgbGVpZ2hAc29saW5uby5jby51awogLSAoc3RldmVzaykgW3htbWFwLmNdIG1pc3NpbmcgcHJvdG90eXBlIGZvciBmYXRhbCgpCiAtIChiYWwpIFtjb25maWd1cmUuYWMgZGVmaW5lcy5oIGxvZ2lucmVjLmMgc3NoZC5jIHNzaHB0eS5jXSBQYXJ0aWFsIHN5bmMKICAgd2l0aCBDcmF5IChtb3N0bHkgI2lmZGVmIHJlbmFtaW5nKS4gIFBhdGNoIGJ5IHdlbmR5cEBjcmF5LmNvbS4KIC0gKGJhbCkgW2NvbmZpZ3VyZS5hY10gIE1pc3NpbmcgOzsgZnJvbSBjcmF5IHBhdGNoLgogLSAoYmFsKSBbbW9uaXRvcl9tbS5jIG9wZW5ic2QtY29tcGF0L3htbWFwLmhdIE1vdmUgeG1tYXAoKSBkZWZpbmVzCiAgIGludG8gaXQncyBvd24gaGVhZGVyLgogLSAoc3RldmVzaykgW2F1dGgtcGFtLltjaF0gc2Vzc2lvbi5jXSBwYW1fZ2V0ZW52bGlzdCgpIG11c3QgYmUKICAgZnJlZWQgYnkgdGhlIGNhbGxlcjsgYWRkIGZyZWVfcGFtX2Vudmlyb25tZW50KCkgYW5kIHVzZSBpdC4KIC0gKHN0ZXZlc2spIFthdXRoLXBhbS5jXSB0eXBvIGluIGNvbW1lbnQKCjIwMDIwNzIxCiAtIChzdGV2ZXNrKSBbYXV0aC1wYW0uY10gbWVyZ2UgY29zbWV0aWMgY2hhbmdlcyBmcm9tIHNvbGFyJ3MKICAgb3BlbnNzaC0zLjRwMS1vd2wtcGFzc3dvcmQtY2hhbmdpbmcuZGlmZgogLSAoc3RldmVzaykgW2F1dGgtcGFtLmNdIG1lcmdlIHJlc3Qgb2Ygc29sYXIncyBQQU0gcGF0Y2g7CiAgIFBBTV9ORVdfQVVUSFRPS19SRVFEIHJlbWFpbnMgaW4gI2lmIDAgZm9yIG5vdy4KIC0gKHN0ZXZlc2spIFthdXRoLXBhbS5jXSBjYXN0IHRvIGF2b2lkIGluaXRpYWxpemF0aW9uIHR5cGUgbWlzbWF0Y2gKICAgd2FybmluZyBvbiBwYW1fY29udiBzdHJ1Y3QgY29udmVyc2F0aW9uIGZ1bmN0aW9uLgogLSAoc3RldmVzaykgW2F1dGgtcGFtLmhdIGxpY2Vuc2UKIC0gKHN0ZXZlc2spIFthdXRoLXBhbS5oXSB1bm5lZWRlZCBpbmNsdWRlCiAtIChzdGV2ZXNrKSBbYXV0aC1wYW0uW2NoXSBzc2guaF0gbW92ZSBTU0hEX1BBTV9TRVJWSUNFIHRvIGF1dGgtcGFtLmgKCjIwMDIwNzIwCiAtIChzdGV2ZXNrKSBbc3NoLWtleWdlbi5jXSBidWcgIzIzMTogYWx3YXlzIGluaXQvc2VlZF9ybmcoKS4KCjIwMDIwNzE5CiAtICh0aW0pIFtjb250cmliL3NvbGFyaXMvYnVpbGRwa2cuc2hdIGNyZWF0ZSBwcml2c2VwIHVzZXIvZ3JvdXAgaWYgbmVlZGVkLgogICBQYXRjaCBieSBkdHVja2VyQHppcC5jb20uYXUKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gIHRlc3QgZm9yIGxpYnhuZXQgb24gSFAuIFBhdGNoIGJ5IGR0dWNrZXJAemlwLmNvbS5hdQoKMjAwMjA3MTgKIC0gKHRpbSkgW2RlZmluZXMuaF0gQnVnIDMxMyBwYXRjaCBieSBkaXJrLm1leWVyQGRpbm9leC5zdWIub3JnCiAtICh0aW0pIFttb25pdG9yX21tLmNdIGFkZCBtaXNzaW5nIGRlY2xhcmF0aW9uIGZvciB4bW1hcCgpLiBSZXBvcnRlZAogICBieSBheWFtdXJhQGF5YW11cmEub3JnCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEJ1ZyAyNjcgcmV3b3JrIGludDY0X3QgdGVzdC4KIC0gKHRpbSkgW2luY2x1ZGVzLmhdIEJ1ZyAyNjcgYWRkIHN0ZGludC5oCgoyMDAyMDcxNwogLSAoYmFsKSBhaXhiZmYgcGFja2FnZSB1cGRhdGVkIGJ5IGR0dWNrZXJAemlwLmNvbS5hdQogLSAodGltKSBbY29uZmlndXJlLmFjXSBjaGFuZ2UgaG93IHdlIGRvIHBhdGhzIGluIEFDX1BBVEhfUFJPR1MgdGVzdHMKICAgZm9yIGF1dG9jb25mIDIuNTMuIEJhc2VkIG9uIGEgcGF0Y2ggYnkganJqQHB1cmR1ZS5lZHUKCjIwMDIwNzE2CiAtICh0aW0pIFtjb250cmliL3NvbGFyaXMvb3BlbnNzaGQuaW5dIE9ubHkga2lsbCBzc2hkIGlmIC5waWQgZmlsZSBmb3VuZAoKMjAwMjA3MTUKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8xMiAxMzoyOTowOQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgcHJpbnQgY29ubmVjdCBmYWlsdXJlIGR1cmluZyBkZWJ1Z2dpbmcgbW9kZS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMTIgMTU6NTA6MTcKICAgICBbY2lwaGVyLmNdCiAgICAgRVZQX0NJUEhfQ1VTVE9NX0lWIGZvciBvdXIgb3duIHJpam5kYWVsCiAtIChiYWwpIFJlbW92ZSB1bnVzZWQgdHR5IGRlZmluZWQgaW4gZG9fc2V0dXNlcmNvbnRleHQoKSBwb2ludGVkIG91dCBieQogICBkdHVja2VyQHppcC5jb20uYXUgcGx1cyBhIGEgbW9yZSBLTkYgc2luY2UgSSBhbSBuZWFyIGl0LgogLSAoYmFsKSBQcml2c2VwIHVzZXIgY3JlYXRpb24gc3VwcG9ydCBpbiBTb2xhcmlzIGJ1aWxkcGtnLnNoIGJ5IAogICBkdHVja2VyQHppcC5jb20uYXUKCjIwMDIwNzE0CiAtICh0aW0pIFtNYWtlZmlsZS5pbl0gcmVwbGFjZSAiaWQgc3NoZCIgd2l0aCAic3NoZCAtdCIKIC0gKGJhbC90aW0pIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBtb25pdG9yX21tLmMgc2VydmNvbmYuYwogICBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbl0gc3VwcG9ydCBjb21wcmVzc2lvbiBvbiBwbGF0Zm9ybXMgdGhhdAogICBoYXZlIG5vL2Jyb2tlbiBNQVBfQU5PTi4gTW92ZWQgY29kZSB0byBvcGVuYnNkLWNvbXBhdC94bW1hcC5jCiAgIEJhc2VkIG9uIHBhdGNoIGZyb20gbmFsaW5AcmVkaGF0LmNvbSBvZiBjb2RlIGV4dHJhY3RlZCBmcm9tIE93bCdzIHBhY2thZ2UKIC0gKHRpbSkgW3NzaF9wcm5nX2NtZHMuaW5dIEJ1ZyAzMjMgYXJwIC1uIGZsYWcgZG9lc24ndCBleGlzdCB1bmRlciBTb2xhcmlzLgogICByZXBvcnQgYnkgY2hyaXNAYnktZGVzaWduLm5ldAogLSAodGltKSBbbG9naW5yZWMuY10gQnVnIDM0NzogRml4IHR5cG8gKFdUTVBYX0ZJTEUpIHJlcG9ydCBieSByb2RuZXlAYm9uZC5uZXQKIC0gKHRpbSkgW2xvZ2lucmVjLmNdIEJ1ZyAzNDg6IGFkZCBtaXNzaW5nIGZvdW5kID0gMTsgdG8gd3RtcHhfaXNsb2dpbigpCiAgIHJlcG9ydCBieSByb2RuZXlAYm9uZC5uZXQKCjIwMDIwNzEyCiAtICh0aW0pIFtNYWtlZmlsZS5pbl0gcXVpZXQgZG93biBpbnN0YWxsLWZpbGVzOiBhbmQgY2hlY2stdXNlcjoKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gcmVtb3ZlIHVudXNlZCBmaWxlcHJpdiBsaW5lCgoyMDAyMDcxMAogLSAodGltKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBleHBsaWNpdGVseSBzZXRzIHRoZSBwZXJtaXNzaW9ucwogICBvbiAvdmFyL2VtcHR5IHRvIDc1NSBQYXRjaCBieSB2aW5zY2hlbkByZWRoYXQuY29tCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMDkgMTE6NTY6NTAKICAgICBbc3NoY29ubmVjdC5jXQogICAgIHNpbGVudGx5IHRyeSBuZXh0IGFkZHJlc3Mgb24gY29ubmVjdCgyKS4gIG1hcmt1cyBvawogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8wOSAxMTo1NjoyNwogICAgIFtjYW5vaG9zdC5jXQogICAgIHN1cHByZXNzIGxvZyBvbiByZXZlcnNlIGxvb2t1cCBmYWlsaXVyZSwgYXMgdGhlcmUncyBubyByZWFsIHZhbHVlIGluCiAgICAgZG9pbmcgc28uCiAgICAgbWFya3VzIG9rCiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzA5IDEyOjA0OjAyCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBlZCBzdGF0aWMgZnVuY3Rpb24gKGxlc3Mgd2FybmluZ3MpCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8wOSAxNzo0NjoyNQogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIGNsYXJpZnkgbm8gcHJlZmVyZW5jZSBvcmRlcmluZyBpbiBwcm90b2NvbCBsaXN0OyBvayBtYXJrdXNACiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzEwIDEwOjI4OjE1CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBiYXJrIGlmIGFsbCBjb25uZWN0aW9uIGF0dGVtcHQgZmFpbHMuCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8xMCAxNzo1Mzo1NAogICAgIFtyaWpuZGFlbC5jXQogICAgIHVzZSByaWdodCBzaXplb2YgaW4gbWVtY3B5OyBtYXJrdXMgb2sKCjIwMDIwNzA5CiAtIChiYWwpIE5PX0lQUE9SVF9SRVNFUlZFRF9DT05DRVBUIHVzZWQgaW5zdGVhZCBvZiBDWUdXSU4gc28gb3RoZXIgcGxhdGZvcm1zCiAgIGxhY2tpbmcgdGhhdCBjb25jZXB0IGNhbiBzaGFyZSBpdC4gUGF0Y2ggYnkgdmluc2NoZW5AcmVkaGF0LmNvbQoKMjAwMjA3MDgKIC0gKHRpbSkgW29wZW5zc2gvY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoXSBhZGQgUEtHX0lOU1RBTExfUk9PVCB0bwogICB3b3JrIGluIGEganVtcHN0YXJ0IGVudmlyb25tZW50LiBwYXRjaCBieSBrYnJpbnRAcnVmdXMubmV0CiAtICh0aW0pIFtNYWtlZmlsZS5pbl0gd29ya2Fyb3VuZCBmb3IgYnJva2VuIHBha2FkZCBvbiBzb21lIHN5c3RlbXMuCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIGZpeCBsaWJjODkgdXRpbWVzIHRlc3QuIE1lbnRpb24gZGVmYXVsdCBwYXRoIGZvcgogICAtLXdpdGgtcHJpdnNlcC1wYXRoPQoKMjAwMjA3MDcKIC0gKHRpbSkgW01ha2VmaWxlLmluXSB1c2UgdW1hc2sgaW5zdGVhZCBvZiBjaG1vZCBvbiAkKFBSSVZTRVBfUEFUSCkKIC0gKHRpbSkgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIHNzaGQuY10KICAgcy9CUk9LRU5fRkRfUEFTU0lORy9ESVNBQkxFX0ZEX1BBU1NJTkcvCiAtICh0aW0pIFtjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddIHNzaGQgYWNjb3VudCBjcmVhdGlvbiBmaXhlcwogICBwYXRjaCBmcm9tIHZpbnNjaGVuQHJlZGhhdC5jb20KIC0gKGJhbCkgW3JlYWxwYXRoLmNdIFVwZGF0ZWQgd2l0aCBPcGVuQlNEIHRyZWUuCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzA0IDA0OjE1OjMzCiAgICAgW2tleS5jIG1vbml0b3Jfd3JhcC5jIHNmdHAtZ2xvYi5jIHNzaC1kc3MuYyBzc2gtcnNhLmNdCiAgICAgcGF0Y2ggbWVtb3J5IGxlYWtzOyBncmVuZGVsQHplaXRib21iZS5vcmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzA0IDA4OjEyOjE1CiAgICAgW2NoYW5uZWxzLmMgcGFja2V0LmNdCiAgICAgYmxhaCBibGFoIG1pbm9yIG5vdGhpbmcgYXMgaSByZWFkIGFuZCByZS1yZWFkIGFuZCByZS1yZWFkLi4uCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzA0IDEwOjQxOjQ3CiAgICAgW2tleS5jIG1vbml0b3Jfd3JhcC5jIHNzaC1kc3MuYyBzc2gtcnNhLmNdCiAgICAgZG9uJ3QgYWxsb2NhdGUsIGNvcHksIGFuZCBkaXNjYXJkIGlmIHRoZXJlIGlzIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBkYXRhOyAKICAgICBvayBkZXJhYWR0QAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMDYgMDE6MDA6NDkKICAgICBbbG9nLmNdCiAgICAgS05GCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8wNiAwMTowMToyNgogICAgIFtzc2gta2V5c2Nhbi5jXQogICAgIEtORiwgcmVhbGxvYyBmaXgsIGFuZCBjbGVhbiB1c2FnZQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDcvMDYgMTc6NDc6NTgKICAgICBbc3NoLWtleXNjYW4uY10KICAgICB1bnVzZWQgdmFyaWFibGUKIC0gKGJhbCkgTWlub3IgS05GIG9uIHNzaC1rZXlzY2FuLmMKCjIwMDIwNzA1CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEFJWCA0LjIuMSBoYXMgYXV0aGVudGljYXRlKCkgaW4gbGlicy4KICAgUmVwb3J0ZWQgYnkgRGFycmVuIFR1Y2tlciA8ZHR1Y2tlckB6aXAuY29tLmF1PgogLSAodGltKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBkb3VibGUgc2xhc2ggY29ycmN0aW9uCiAgIGZyb20gdmluc2NoZW5AcmVkaGF0LmNvbQoKMjAwMjA3MDQKIC0gKGJhbCkgTGltaXQgZGF0YSB0byBUVFkgZm9yIEFJWCBvbmx5IChOZXdlciB2ZXJzaW9ucyBjYW4ndCBoYW5kbGUgdGhlCiAgIGZhc3RlciBkYXRhIHJhdGUpICBCdWcgIzEyNAogLSAoYmFsKSBnbG9iLmMgZGVmaW5lcyBUSUxERSBhbmQgQUlYIGFsc28gZGVmaW5lcyBpdC4gICN1bmRlZiBpdCBmaXJzdC4KICAgYnVnICMyNjUKIC0gKGJhbCkgT25lIHRvbyBtYW55IG51bGxzIGluIHBvcnRzLWFpeC5jCiAKMjAwMjA3MDMKIC0gKGJhbCkgVXBkYXRlZCBjb250cmliL2N5Z3dpbi8gIHBhdGNoIGJ5IHZpbnNjaGVuQHJlZGhhdC5jb20gCiAtIChiYWwpIG1pbm9yIGNvcnJlY3Rpb24gdG8gdXRpbWVzKCkgcmVwbGFjZW1lbnQuICBQYXRjaCBieQogICBvbm9lQHNtLnNvbnkuY28uanAKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNyAwODo0OTo0NAogICAgIFtkaC5jIHNzaC1rZXlzY2FuLmMgc3NoY29ubmVjdC5jXQogICAgIG1vcmUgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzOyBmcm9tIGdyZW5kZWxAemVpdGJvbWJlLm9yZzsgb2sgZGVyYWFkdEAKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI3IDA5OjA4OjAwCiAgICAgW21vbml0b3IuY10KICAgICBpbXByb3ZlIG1tX3phbGxvYyBjaGVjazsgbWFya3VzIG9rCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNyAxMDozNTo0NwogICAgIFthdXRoMi1ub25lLmMgbW9uaXRvci5jIHNmdHAtY2xpZW50LmNdCiAgICAgdXNlIHhmcmVlKCkKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI3IDE5OjQ5OjA4CiAgICAgW3NzaC1rZXlzY2FuLmNdCiAgICAgdXNlIGNvbnZ0aW1lKCk7IG9rIG1hcmt1c0AKICAgLSBtaWxsZXJ0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI4IDAxOjQ5OjMxCiAgICAgW21vbml0b3JfbW0uY10KICAgICB0cmVlKDMpIHdhbnRzIGFuIGludCByZXR1cm4gdmFsdWUgZm9yIGl0cyBjb21wYXJlIGZ1bmN0aW9ucyBhbmQKICAgICB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBwb2ludGVycyBpcyBub3QgYW4gaW50LiAgSnVzdCBkbyB0aGUKICAgICBzYWZlc3QgdGhpbmcgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gYSBsb25nIGFuZCB0aGVuIHJldHVybiAwLAogICAgIC0xLCBvciAxIGJhc2VkIG9uIHRoYXQgcmVzdWx0LgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjggMDE6NTA6MzcKICAgICBbbW9uaXRvcl93cmFwLmNdCiAgICAgdXNlIHNzaXplX3QKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI4IDEwOjA4OjI1CiAgICAgW3NzaGQuY10KICAgICByYW5nZSBjaGVjayAtdSBvcHRpb24gYXQgaW52b2NhdGlvbgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjggMjM6MDU6MDYKICAgICBbc3NoZC5jXQogICAgIGdpZHNldFsyXSAtPiBnaWRzZXRbMV07IG1hcmt1cyBvawogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMzAgMjE6NTQ6MTYKICAgICBbYXV0aDIuYyBzZXNzaW9uLmMgc3NoZC5jXQogICAgIGxpbnQgYXNrcyB0aGF0IHdlIHVzZSBuYW1lcyB0aGF0IGRvIG5vdCBvdmVybGFwCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8zMCAyMTo1OTo0NQogICAgIFthdXRoLWJzZGF1dGguYyBhdXRoLXNrZXkuYyBhdXRoMi1jaGFsbC5jIGNsaWVudGxvb3AuYyBrZXkuYwogICAgICBtb25pdG9yX3dyYXAuYyBtb25pdG9yX3dyYXAuaCBzY2FyZC5oIHNlc3Npb24uaCBzZnRwLWdsb2IuYyBzc2guYwogICAgICBzc2hjb25uZWN0Mi5jIHNzaGQuY10KICAgICBtaW5vciBLTkYKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzAxIDE2OjE1OjI1CiAgICAgW21zZy5jXQogICAgICV1CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA3LzAxIDE5OjQ4OjQ2CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgZm9yIGNvbXByZXNzaW9uPXllcywgd2UgZmFsbGJhY2sgdG8gbm8tY29tcHJlc3Npb24gaWYgdGhlIHNlcnZlciBkb2VzCiAgICAgbm90IHN1cHBvcnQgY29tcHJlc3Npb24sIHZpY2UgdmVyc2EgZm9yIGNvbXByZXNzaW9uPW5vLiBvayBtb3VyaW5nQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8wMyAwOTo1NTozOAogICAgIFtzc2gta2V5c2lnbi5jXQogICAgIHVzZSBSU0FfYmxpbmRpbmdfb24oKSBmb3IgcnNhIGhvc3RrZXlzIChzdWdnZXN0ZWQgYnkgQmlsbCBTb21tZXJmZWxkKQogICAgIGluIG9yZGVyIHRvIGF2b2lkIGEgcG9zc2libGUgS29jaGVyIHRpbWluZyBhdHRhY2sgcG9pbnRlZCBvdXQgYnkgQ2hhcmxlcwogICAgIEhhbm51bTsgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNy8wMyAxNDoyMTowNQogICAgIFtzc2gta2V5c2lnbi44IHNzaC1rZXlzaWduLmMgc3NoLmMgc3NoX2NvbmZpZ10KICAgICByZS1lbmFibGUgc3NoLWtleXNpZ24ncyBzYml0LCBidXQgbWFrZSBzc2gta2V5c2lnbiByZWFkIAogICAgIC9ldGMvc3NoL3NzaF9jb25maWcgYW5kIGV4aXQgaWYgSG9zdGJhc2VkQXV0aGVudGljYXRpb24gaXMgZGlzYWJsZWQgCiAgICAgZ2xvYmFsbHkuIGJhc2VkIG9uIGRpc2N1c3Npb25zIHdpdGggZGVyYWFkdCwgaXRvanVuIGFuZCBzb21tZXJmZWxkOyAKICAgICBvayBpdG9qdW5ACiAtIChiYWwpIEZhaWxlZCBwYXNzd29yZCBhdHRlbXB0cyBkb24ndCBpbmNyZW1lbnQgY291bnRlciBvbiBBSVguIEJ1ZyAjMTQ1CiAtIChiYWwpIE1pc3NlZCBNYWtlZmlsZS5pbiBjaGFuZ2UuICBrZXlzaWduIG5lZWRzIHJlYWRjb25mLm8KIC0gKGJhbCkgQ2xlYW4gdXAgYWl4X3VzcmluZm8oKS4gIElnbm9yZSBUVFk9IHBlcmlvZCBJIGd1ZXNzLgogIAoyMDAyMDcwMgogLSAoZGptKSBVc2UgUEFNX01TR19NRU1CRVIgZm9yIFBBTV9URVhUX0lORk8gbWVzc2FnZXMsIHVzZSB4bWFsbG9jICYgCiAgIGZyaWVuZHMgY29uc2lzdGVudGx5LiBTcG90dGVkIGJ5IFNvbGFyIERlc2lnbmVyIDxzb2xhckBvcGVud2FsbC5jb20+CgoyMDAyMDYyOQogLSAoYmFsKSBmaXggdG8gYXV0aDItcGFtLmMgdG8gc3dhcCBmYXRhbCgpIGFyZ3VtZW50cywgIEEgYml0IG9mIHN0eWxlCiAgIGNsZWFuIHVwIHdoaWxlIEknbSBuZWFyIGl0LgoKMjAwMjA2MjgKIC0gKHN0ZXZlc2spIFtzc2hkX2NvbmZpZ10gUEFNQXV0aGVudGljYXRpb25WaWFLYmRJbnQgbm87IGNvbW1lbnRlZAogICBvcHRpb25zIHNob3VsZCBjb250YWluIGRlZmF1bHQgdmFsdWUuICBmcm9tIHNvbGFyLgogLSAoYmFsKSBDeWd3aW4gdWlkMCBmaXggYnkgdmluc2NoZW5AcmVkaGF0LmNvbQogLSAoYmFsKSBzL2NvbmZpZy5oL2luY2x1ZGVzLmgvIGluIG9wZW5ic2QtY29tcGF0LyBmb3IgKi5jLiAgT3RoZXJ3aXNlIHdpc2UKICAgaGF2ZSBpc3N1ZXMgb2Ygb3VyIGZpeGVzIG5vdCBwcm9wb2dhdGluZyByaWdodCAoaWUgYmNvcHkgaW5zdGVhZCBvZgogICBtZW1tb3ZlKS4gIE9LIHRpbQogLSAoYmFsKSBGcmVlQlNEIG5lZWRzIDxzeXMvdHlwZXMuaD4gdG8gZGV0ZWN0IGlmIG1tYXAoKSBpcyBzdXBwb3J0ZWQuCiAgIEJ1ZyAjMzAzCgoyMDAyMDYyNwogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAxNDo0OTozNgogICAgIFttb25pdG9yLmNdCiAgICAgY29ycmVjdCAldQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMTQ6NTA6MDQKICAgICBbbW9uaXRvcl9mZHBhc3MuY10KICAgICB1c2Ugc3NpemVfdCBmb3IgcmVjdm1zZygpIGFuZCBzZW5kbXNnKCkgcmV0dXJuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDE0OjUxOjMzCiAgICAgW3NzaC1hZGQuY10KICAgICBmaXggZXhpdCBjb2RlIGZvciAtWC8teAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMTU6MDA6MzIKICAgICBbbW9uaXRvcl93cmFwLmNdCiAgICAgbW9yZSAldQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAyMjoyNzozMgogICAgIFtzc2gta2V5c2lnbi5jXQogICAgIGJ1ZyAjMzA0LCB4ZnJlZShkYXRhKSBjYWxsZWQgdG8gZWFybHk7IG9wZW5zc2hAc2lnaW50LmNzLnB1cmR1ZS5lZHUKCjIwMDIwNjI2CiAtIChzdGV2ZXNrKSBbbW9uaXRvci5jXSByZW1vdmUgZHVwbGljYXRlIHByb3RvMTUgZGlzcGF0Y2ggZW50cnkgZm9yIFBBTQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDIxOjM0OjA3CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgdGNvZGUgaXMgdV9pbnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjQgMTM6MTI6MjMKICAgICBbc3NoLWFnZW50LjFdCiAgICAgdGhlIHNvY2tldCBuYW1lIGNvbnRhaW5zIHNzaC1hZ2VudCdzIHBwaWQ7IHZpYSBtcGVjaEAgZnJvbSBmb3JtQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNCAxNDozMzoyNwogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggY2xpZW50bG9vcC5jIHNlcnZlcmxvb3AuY10KICAgICBtb3ZlIGNoYW5uZWwgY291bnRlciB0byB1X2ludAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNCAxNDo1NTozOAogICAgIFthdXRoZmlsZS5jIGtleC5jIHNzaC1hZ2VudC5jXQogICAgIGNhdCB0byAodm9pZCkgd2hlbiBvdXRwdXQgZnJvbSBidWZmZXJfZ2V0X1ggaXMgaWdub3JlZAogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNCAxNTo0OToyMgogICAgIFttc2cuY10KICAgICBwcmludGYgdHlwZSBwZWRhbnQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI0IDE3OjU3OjIwCiAgICAgW3NmdHAtc2VydmVyLmMgc3NocHR5LmNdCiAgICAgZXhwbGljaXQgKHVfaW50KSBmb3IgdWlkIGFuZCBnaWQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjUgMTY6MjI6NDIKICAgICBbYXV0aGZkLmNdCiAgICAgdW5uZWNlc3NhcnkgY2FzdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNSAxODo1MTowNAogICAgIFtzc2hkLmNdCiAgICAgbGlnaHR3ZWlnaHQgZG9fc2V0dXNlcmNvbnRleHQgYWZ0ZXIgY2hyb290KCkKIC0gKGJhbCkgVXBkYXRlZCBBSVggcGFja2FnZSBidWlsZC4gIFBhdGNoIGJ5IGR0dWNrZXJAemlwLmNvbS5hdQogLSAodGltKSBbTWFrZWZpbGUuaW5dIGZpeCB0ZXN0IG9uIGluc3RhbGxpbmcgc3NoLXJhbmQtaGVscGVyLjgKIC0gKGJhbCkgYWRkZWQgYmFjayBpbiBlcnJvciBjaGVjayBmb3IgbW1hcCgpLiAgSSBzY3Jld2VkIHVwLCBQb2ludGVkCiAgIG91dCBieSBzdGV2ZXNrQAogLSAodGltKSBbUkVBRE1FLnByaXZzZXBdIFVuaXhXYXJlIHRpcCBubyBsb25nZXIgbmVlZGVkLgogLSAoYmFsKSBmaXhlZCBOZVhUU3RlcCBtaXNzaW5nIG11bm1hcCgpIGlzc3VlLiBJdCBkZWZpbmVzIEhBVkVfTU1BUCwKICAgYnV0IGl0IGFsbCBkYW1uZWQgbGllcy4KIC0gKHN0ZXZlc2spIFtSRUFETUUucHJpdnNlcF0gbW9yZSBmb3Igc3NoZCBwc2V1ZG8tYWNjb3VudC4KIC0gKHRpbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWNdIGFkZCBzdXBwb3J0IGZvciBwcml2c2VwCiAtIChkam0pIHNldGxvZ2luIG5lZWRzIHBnaWQ9PXBpZCBvbiBCU0QvT1M7IGZyb20gaXRvanVuQAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDA4OjUzOjEyCiAgICAgW2J1ZmF1eC5jXQogICAgIGxpbWl0IHNpemUgb2YgQk5zIHRvIDhLQjsgb2sgcHJvdm9zL2RlcmFhZHQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMDg6NTQ6MTgKICAgICBbYnVmZmVyLmNdCiAgICAgbGltaXQgYXBwZW5kIHRvIDFNQiBhbmQgYnVmZmVycyB0byAxME1CCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzI2IDA4OjU1OjAyCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgbGltaXQgIyBvZiBjaGFubmVscyB0byAxMDAwMAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAwODo1ODoyNgogICAgIFtzZXNzaW9uLmNdCiAgICAgbGltaXQgIyBvZiBlbnYgdmFycyB0byAxMDAwOyBvayBkZXJhYWR0L2RqbQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMTM6MjA6NTcKICAgICBbbW9uaXRvci5jXQogICAgIGJlIGNhcmVmdWwgaW4gbW1femFsbG9jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAxMzo0OToyNgogICAgIFtzZXNzaW9uLmNdCiAgICAgZGlzY2xvc2UgbGVzcyBpbmZvcm1hdGlvbiBmcm9tIGVudmlyb25tZW50IGZpbGVzOyBiYXNlZCBvbiBpbnB1dCAKICAgICBmcm9tIGRqbSwgYW5kIGRzY2h1bHR6QHVjbGluay5CZXJrZWxleS5FRFUKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjYgMTM6NTU6MzcKICAgICBbYXV0aDItY2hhbGwuY10KICAgICBtYWtlIHN1cmUgIyBvZiByZXNwb25zZSBtYXRjaGVzICMgb2YgcXVlcmllcywgZml4ZXMgaW50IG92ZXJmbG93OyAKICAgICBmcm9tIElTUwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yNiAxMzo1NjoyNwogICAgIFt2ZXJzaW9uLmhdCiAgICAgMy40CiAtIChkam0pIFJlcXVpcmUga3JiNSBkZXZlbCBmb3IgUlBNIGJ1aWxkIHcvIEtyYlYgCiAtIChkam0pIEltcHJvdmUgUEFNQXV0aGVudGljYXRpb25WaWFLYmRJbnQgdGV4dCBmcm9tIE5hbGluIERhaHlhYmhhaSAKICAgPG5hbGluQHJlZGhhdC5jb20+CiAtIChkam0pIFVwZGF0ZSBzcGVjIGZpbGVzIGZvciByZWxlYXNlIAogLSAoZGptKSBGaXggaW50IG92ZXJmbG93IGluIGF1dGgyLXBhbS5jLCBzaW1pbGFyIHRvIG9uZSBkaXNjb3ZlcmVkIGJ5IElTUwogLSAoZGptKSBSZWxlYXNlIDMuNHAxCiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSByZW1vdmUgMiBjb25maWd1cmUgb3B0aW9ucyBJIHB1dCBpbgogICBieSBtaXN0YWtlCgoyMDAyMDYyNQogLSAoc3RldmVzaykgW0lOU1RBTEwgYWNjb25maWcuaCBjb25maWd1cmUuYWMgZGVmaW5lcy5oXSByZW1vdmUgLS13aXRoLXJzaAogLSAoc3RldmVzaykgW1JFQURNRS5wcml2c2VwXSBtaW5vciB1cGRhdGVzCiAtIChkam0pIENyZWF0ZSBwcml2c2VwIGRpcmVjdG9yeSBhbmQgd2FybiBpZiBwcml2c2VwIHVzZXIgaXMgbWlzc2luZyAKICAgZHVyaW5nIG1ha2UgaW5zdGFsbAogLSAoYmFsKSBTdGFydGVkIGxpc3Qgb2YgUHJpdlNlcCBpc3N1ZXMgaW4gVE9ETwogLSAoYmFsKSBpZiBtbWFwKCkgaXMgc3Vic3RhbmRhcmQsIGRvbid0IGFsbG93IGNvbXByZXNzaW9uIG9uIHNlcnZlciBzaWRlLgogICBQb3N0ICdldmVudCcgd2Ugd2lsbCBhZGQgbW9yZSBvcHRpb25zLgogLSAodGltKSBbY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlY10gU3luYyB3aXRoIENhbGRlcmEKIC0gKGJhbCkgbW92ZWQgYWl4X3VzcmluZm8oKSBhbmQgbm90ZWQgbm90IHNldHRpbmcgcmVhbCBUVFkuICBQYXRjaCBieQogICBkdHVja2VyQHppcC5jb20uYXUKIC0gKHRpbSkgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIHNzaGQuY10gQlJPS0VOX0ZEX1BBU1NJTkcgZml4IGZyb20gTWFya3VzCiAgIGZvciBDeWd3aW4sIENyYXksICYgU0NPCgoyMDAyMDYyNAogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAwMzoyNTo1MAogICAgIFt0aWxkZXhwYW5kLmNdCiAgICAgS05GCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAwMzoyNjoxOQogICAgIFtjaXBoZXIuYyBrZXkuY10KICAgICBLTkYKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDAzOjMwOjU4CiAgICAgW3NjYXJkLmMgc3NoLWRzcy5jIHNzaC1yc2EuYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDIuYyBzc2hkLmMgc3NobG9naW4uYwogICAgICBzc2hwdHkuY10KICAgICB2YXJpb3VzIEtORiBhbmQgJWQgZm9yIHVuc2lnbmVkCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAwOTozMDoxNAogICAgIFtzZnRwLWNsaWVudC5jIHNmdHAtY2xpZW50Lmggc2Z0cC1jb21tb24uYyBzZnRwLWludC5jIHNmdHAtc2VydmVyLmMKICAgICAgc2Z0cC5jXQogICAgIGJ1bmNoIG9mIHVfaW50IHZzIGludCBzdHVmZgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMDk6Mzk6NTUKICAgICBbc3NoLWtleWdlbi5jXQogICAgIHVfaW50IHN0dWZmCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAwOTo0Njo1MQogICAgIFtidWZhdXguYyBzZXJ2Y29uZi5jXQogICAgIG1pbm9yIEtORi4gIHRoaW5ncyB0aGUgZmluZ2VycyBkbyB3aGlsZSB5b3UgcmVhZAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMTA6Mjk6NTIKICAgICBbc3NoLWFnZW50LmMgc3NoZC5jXQogICAgIHNvbWUgbWlub3IgS05GIGFuZCAldQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjMgMjA6Mzk6NDUKICAgICBbc2Vzc2lvbi5jXQogICAgIGNvbXByZXNzaW9uX2xldmVsIGlzIHVfaW50CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAyMTowNjoxMwogICAgIFtzc2hwdHkuY10KICAgICBLTkYKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIzIDIxOjA2OjQxCiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBzZXNzaW9uLmMgc2Vzc2lvbi5oXQogICAgIGRpc3BsYXksIHNjcmVlbiwgcm93LCBjb2wsIHhwaXhlbCwgeXBpeGVsIGFyZSB1X2ludDsgbWFya3VzIG9rCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMyAyMToxMDowMgogICAgIFtwYWNrZXQuY10KICAgICBwYWNrZXRfZ2V0X2ludCgpIHJldHVybnMgdW5zaWduZWQgZm9yIHJlYXNvbiAmIHNlcW5yCiAgLSAoYmFsKSBBbHNvIGZpeGVkIElQQUREUl9JTl9ESVNQTEFZIGNhc2Ugd2hlcmUgZGlzcGxheSwgc2NyZWVuLCByb3csIGNvbCwKICAgIHhwaXhlbCBhcmUgdV9pbnQuCgoKMjAwMjA2MjMKIC0gKHN0ZXZlc2spIFtjb25maWd1cmUuYWNdIGJ1ZyAjMjU1IExPR0lOX05FRURTX1VUTVBYIGZvciBBSVguCiAtIChiYWwpIHJlbW92ZWQgR05VaXNtIGZvciBnZXRvcHMgaW4gc3NoLWFnZW50IHNpbmNlIGdsaWJjIGxhY2tzIG9wdHJlc2V0LgogLSAoYmFsKSBhZGQgZXh0ZXJuIGNoYXIgKmdldG9wdC4gIEJhc2VkIG9uIHJlcG9ydCBieSBkdHVja2VyQHppcC5jb20uYXUgCiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIyIDAyOjAwOjI5CiAgICAgW3NzaC5oXQogICAgIGNvcnJlY3QgY29tbWVudAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjIgMDI6NDA6MjMKICAgICBbc3NoLjFdCiAgICAgc2VjdGlvbiA1IG5vdCA0IGZvciBzc2hfY29uZmlnCiAgIC0gbmFkZHlAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjIgMTE6NTE6MzkKICAgICBbc3NoLjFdCiAgICAgdHlwbwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjIgMTY6MzI6NTQKICAgICBbc3NoZC44XQogICAgIGFkZCAvdmFyL2VtcHR5IGluIEZJTEVTIHNlY3Rpb24KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIyIDE2OjQwOjE5CiAgICAgW3NzaGQuY10KICAgICBjaGVjayAvdmFyL2VtcHR5IG93bmVyIG1vZGU7IG9rIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIyIDE2OjQxOjU3CiAgICAgW3NjcC4xXQogICAgIHR5cG8KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIyIDE2OjQ1OjI5CiAgICAgW3NzaC1hZ2VudC4xIHNzaGQuOCBzc2hkX2NvbmZpZy41XQogICAgIHVzZSBwcm9jZXNzIElEIHZzLiBwaWQvUElEL3Byb2Nlc3MgaWRlbnRpZmllcgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjIgMjA6MDU6MjcKICAgICBbc3NoZC5jXQogICAgIGRvbid0IGNhbGwgc2V0c2lkKCkgaWYgZGVidWdnaW5nIG9yIHJ1biBmcm9tIGluZXRkOyBubyAiT3BlcmF0aW9uIG5vdAogICAgIHBlcm1pdHRlZCIgZXJyb3JzIG5vdzsgb2sgbWlsbGVydEAgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjIgMjM6MDk6NTEKICAgICBbbW9uaXRvci5jXQogICAgIHNhdmUgYXV0aCBtZXRob2QgYmVmb3JlIG1vbml0b3JfcmVzZXRfa2V5X3N0YXRlKCk7IGJ1Z3ppbGxhIGJ1ZyAjMjg0OwogICAgIG9rIHByb3Zvc0AKCjIwMDIwNjIyCiAtIChkam0pIFVwZGF0ZSBSRUFETUUucHJpdnNlcDsgc3BvdHRlZCBieSBmcmllc0AKIC0gKGRqbSkgUmVsZWFzZSAzLjNwMQogLSAoYmFsKSBnZXRvcHQgbm93IGNhbiBiZSBzdGF0aWNseSBjb21waWxlZCBvbiB0aG9zZSBwbGF0Zm9ybXMgbWlzc2luZwogICBvcHRyZXNldC4gIFBhdGNoIGJ5IGJpbmRlckBhcmFnby5kZQoKMjAwMjA2MjEKIC0gKGRqbSkgU3luYzoKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjEgMDU6NTA6NTEKICAgICBbbW9uaXRvci5jXQogICAgIERvbid0IGluaXRpYWxpc2UgY29tcHJlc3Npb24gYnVmZmVycyB3aGVuIGNvbXByZXNzaW9uPW5vIGluIHNzaGRfY29uZmlnOwogICAgIG9rIE5pZWxzQAogIC0gSUQgc3luYyBmb3IgYXV0aC1wYXNzd2QuYwogLSAoZGptKSBXYXJuIGFuZCBkaXNhYmxlIGNvbXByZXNzaW9uIG9uIHBsYXRmb3JtcyB3aGljaCBjYW4ndCBoYW5kbGUgYm90aAogICB1c2Vwcml2aWxlZ2VzZXBhcmF0aW9uPXllcyBhbmQgY29tcHJlc3Npb249eWVzCiAtIChkam0pIGNvbnRyaWIvcmVkaGF0L29wZW5zc2guc3BlYyBoYWNraW5nOgogICAtIE1lcmdlIGluIHNwZWMgY2hhbmdlcyBmcm9tIHNlYmFAaXEucGwgKFNlYmFzdGlhbiBQYWNodXRhKQogICAtIEFkZCBuZXcge3NzaCxzc2hkfV9jb25maWcuNSBtYW5wYWdlcwogICAtIEFkZCBuZXcgc3NoLWtleXNpZ24gcHJvZ3JhbSBhbmQgcmVtb3ZlIHNldHVpZCBmcm9tIHNzaCBjbGllbnQKCjIwMDIwNjIwCiAtIChiYWwpIEZpeGVkIEFJWCBlbnZpcm9ubWVudCBoYW5kbGluZywgdXNlIHNldHBjcmVkKCkgaW5zdGVhZCBvZiBleGlzdGluZwogICBjb2RlLiAgKEJ1Z3ppbGxhIEJ1ZyAyNjEpCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSB0b2RkQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzE0IDIxOjM1OjAwCiAgICAgW21vbml0b3Jfd3JhcC5jXQogICAgIHNwZWxsaW5nOyBmcm9tIEJyaWFuIFBvb2xlIDxyYWpAY2VyaWFzLnB1cmR1ZS5lZHU+CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzE1IDAwOjAxOjM2CiAgICAgW2F1dGhmZC5jIGF1dGhmZC5oIHNzaC1hZGQuYyBzc2gtYWdlbnQuY10KICAgICBicmVhayBhZ2VudCBrZXkgbGlmZXRpbWUgcHJvdG9jb2wgYW5kIGFsbG93IG90aGVyIGNvbnRyYWludHMgZm9yIGtleQogICAgIHVzYWdlLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xNSAwMDowNzozOAogICAgIFthdXRoZmQuYyBhdXRoZmQuaCBzc2gtYWRkLmMgc3NoLWFnZW50LmNdCiAgICAgZml4IHN0dXBpZCB0eXBvCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzE1IDAxOjI3OjQ4CiAgICAgW2F1dGhmZC5jIGF1dGhmZC5oIHNzaC1hZGQuYyBzc2gtYWdlbnQuY10KICAgICByZW1vdmUgdGhlIENPTlNUUkFJTl9JREVOVElUWSBtZXNzYWdlcyBhbmQgaW50cm9kdWNlIGEgbmV3CiAgICAgQUREX0lEIG1lc3NhZ2Ugd2l0aCBjb250cmFpbnRzIGluc3RlYWQuIGNvbnRyYWludHMgY2FuIGJlCiAgICAgb25seSBhZGRlZCB0b2dldGhlciB3aXRoIHRoZSBwcml2YXRlIGtleS4KICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTYgMjE6MzA6NTgKICAgICBbc3NoLWtleXNjYW4uY10KICAgICB1c2UgVEFJTFFfeHggbWFjcm8uICBmcm9tIGx1a2VtQG5ldGJzZC4gIG1hcmt1cyBvawogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTcgMDY6MDU6NTYKICAgICBbc2NwLmNdCiAgICAgbWFrZSB1c2FnZSBsaWtlIG1hbiBwYWdlCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xOSAwMDoyNzo1NQogICAgIFthdXRoLWJzZGF1dGguYyBhdXRoLXNrZXkuYyBhdXRoMS5jIGF1dGgyLWNoYWxsLmMgYXV0aDItbm9uZS5jIGF1dGhmZC5jCiAgICAgIGF1dGhmZC5oIG1vbml0b3Jfd3JhcC5jIG1zZy5jIG5jaGFuLmMgcmFkaXguYyByZWFkY29uZi5jIHNjcC5jIHNmdHAuMQogICAgICBzc2gtYWRkLjEgc3NoLWFkZC5jIHNzaC1hZ2VudC4xIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uMSBzc2gta2V5Z2VuLmMKICAgICAgc3NoLWtleXNpZ24uYyBzc2guMSBzc2hjb25uZWN0LmMgc3NoY29ubmVjdC5oIHNzaGNvbm5lY3QyLmMgdHR5bW9kZXMuYwogICAgICB4bWFsbG9jLmhdCiAgICAgS05GIGRvbmUgYXV0b21hdGljYWxseSB3aGlsZSByZWFkaW5nLi4uLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xOSAxODowMTowMAogICAgIFtjaXBoZXIuYyBtb25pdG9yLmMgbW9uaXRvcl93cmFwLmMgcGFja2V0LmMgcGFja2V0LmhdCiAgICAgbWFrZSB0aGUgbW9uaXRvciBzeW5jIHRoZSB0cmFuc2ZlciBzc2gxIHNlc3Npb24ga2V5OwogICAgIHRyYW5zZmVyIGtleWNvbnRleHQgb25seSBmb3IgUkM0ICh0aGlzIGlzIHN0aWxsIGRlcGVuZHMgb24gRVZQCiAgICAgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaXMgYnJva2VuKS4KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzIwIDE5OjU2OjA3CiAgICAgW3NzaC4xIHNzaGQuOF0KICAgICBtb3ZlIGNvbmZpZ3VyYXRpb24gZmlsZSBvcHRpb25zIGZyb20gc3NoLjEvc3NoZC44IHRvCiAgICAgc3NoX2NvbmZpZy41L3NzaGRfY29uZmlnLjU7IG9rIGRlcmFhZHRAIG1pbGxlcnRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMCAyMDowMDowNQogICAgIFtzY3AuMSBzZnRwLjFdCiAgICAgc3NoX2NvbmZpZyg1KQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjAgMjA6MDM6MzQKICAgICBbc3NoX2NvbmZpZyBzc2hkX2NvbmZpZ10KICAgICByZWZlciB0byBjb25maWcgZmlsZSBtYW4gcGFnZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8yMCAyMzowNTo1NgogICAgIFtzZXJ2Y29uZi5jIHNlcnZjb25mLmggc2Vzc2lvbi5jIHNzaGQuY10KICAgICBhbGxvdyBDb21wcmVzc2lvbj15ZXMvbm8gaW4gc3NoZF9jb25maWcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMjAgMjM6Mzc6MTIKICAgICBbc3NoZF9jb25maWddCiAgICAgYWRkIENvbXByZXNzaW9uCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yNSAyMDo0MDowOAogICAgIFtMSUNFTkNFXQogICAgIG1pc3NlZCBQZXIgQWxsYW5zc29uIChhdXRoMi1jaGFsbC5jKQogLSAoYmFsKSBDeWd3aW4gc3BlY2lhbCBoYW5kbGluZyBvZiBlbXB0eSBwYXNzd29yZHMgd3JvbmcuICBQYXRjaCBieQogICB2aW5zY2hlbkByZWRoYXQuY29tCiAtIChiYWwpIE1pc3NlZCBpbnRlZ3JhdGluZyBzc2hfY29uZmlnLjUgYW5kIHNzaGRfY29uZmlnLjUKIC0gKGJhbCkgU3RpbGwgbW9yZSBNYWtlZmlsZS5pbiB1cGRhdGVzIGZvciBzc2h7ZH1fY29uZmlnLjUKCjIwMDIwNjEzCiAtIChiYWwpIHR5cG8gb2Ygc2V0Z3JvdXAgZm9yIGN5Z3dpbi4gIFBhdGNoIGJ5IHZpbnNjaGVuQHJlZGhhdC5jb20KCjIwMDIwNjEyCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTEgMjM6MDM6NTQKICAgICBbc3NoLmNdCiAgICAgcmVtb3ZlIHVudXNlZCBjcnVmdC4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTIgMDE6MDk6NTIKICAgICBbc3NoLmNdCiAgICAgc3NoX2Nvbm5lY3QgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKIC0gKGJhbCkgQnVpbGQgbm9vcCBzZXRncm91cHMoKSBmb3IgY3lnd2luIHRvIGNsZWFuIHVwIGNvZGUgKEZvciBvdGhlcgogICBwbGF0Zm9ybXMgd2l0aG91dCB0aGUgc2V0Z3JvdXBzKCkgcmVxdWlyZW1lbnQsIHlvdSBNVVNUIGRlZmluZQogICBTRVRHUk9VUFNfTk9PUCBpbiB0aGUgY29uZmlndXJlLmFjKSBCYXNlZCBvbiBwYXRjaCBieSB2aW5zY2hlbkByZWRoYXQuY29tCiAtIChiYWwpIFNvbWUgcGxhdGZvcm1zIGRvbid0IGhhdmUgT05MQ1IgKE5vdGFibGUgTWludCkKCjIwMDIwNjExCiAtIChiYWwpIHNzaC1hZ2VudC5jIFJDU0QgZml4ICh8dW5leHBhbmQgYWxyZWFkeSBkb25lKQogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOSAyMjoxNToxNQogICAgIFtzc2guMV0KICAgICB1cGRhdGUgZm9yIG5vIHNldHVpZCByb290IGFuZCBzc2gta2V5c2lnbjsgb2sgZGVyYWFkdEAKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDkgMjI6MTc6MjEKICAgICBbc3NoY29ubmVjdC5jXQogICAgIHBhc3Mgc2FsZW4gdG8gc29ja2FkZHJfbnRvcCBzbyB0aGF0IHdlIGFyZSBoYXBweSBvbiBsaW51eC9zb2xhcmlzCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMCAxNjo1MzowNgogICAgIFthdXRoLXJzYS5jIHNzaC1yc2EuY10KICAgICBkaXNwbGF5IG1pbmltdW0gUlNBIG1vZHVsdXMgaW4gZXJyb3IoKTsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTAgMTY6NTY6MzAKICAgICBbc3NoLWtleXNpZ24uOF0KICAgICBtZXJnZSBpbiBzdHVmZiBmcm9tIG15IG1hbiBwYWdlOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMCAxNzozNjoyMwogICAgIFtzc2gtYWRkLjEgc3NoLWFkZC5jXQogICAgIHVzZSBjb252dGltZSgpIHRvIHBhcnNlIGFuZCB2YWxpZGF0ZSBrZXkgbGlmZXRpbWUuICBjYW4gbm93CiAgICAgdXNlICctdCAyaCcgZXRjLiAgb2sgbWFya3VzQCBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8xMCAxNzo0NToyMAogICAgIFtyZWFkY29uZi5jIHNzaC4xXQogICAgIGNoYW5nZSBSaG9zdHNSU0FBdXRoZW50aWNhdGlvbiBhbmQgUmhvc3RzQXV0aGVudGljYXRpb24gZGVmYXVsdCB0byBubwogICAgIHNpbmNlIHNzaCBpcyBubyBsb25nZXIgc2V0dWlkIHJvb3QgYnkgZGVmYXVsdDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTAgMjE6MjE6MTAKICAgICBbc3NoX2NvbmZpZ10KICAgICB1cGRhdGUgZGVmYXVsdHMgZm9yIFJob3N0c1JTQUF1dGhlbnRpY2F0aW9uIGFuZCBSaG9zdHNBdXRoZW50aWNhdGlvbgogICAgIGhlcmUgdG9vIChhbGwgb3B0aW9ucyBjb21tZW50ZWQgb3V0IHdpdGggZGVmYXVsdCB2YWx1ZSkuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzEwIDIyOjI4OjQxCiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBzZXNzaW9uLmNdCiAgICAgbW92ZSBjcmVhdGlvbiBvZiBhZ2VudCBzb2NrZXQgdG8gc2Vzc2lvbi5jOyBubyBuZWVkIGZvciB1aWRzd2FwcGluZwogICAgIGluIGNoYW5uZWwuYy4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTEgMDQ6MTQ6MjYKICAgICBbc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QuaF0KICAgICBubyBsb25nZXIgdXNlIHVpZHN3YXAuW2NoXSBmcm9tIHRoZSBzc2ggY2xpZW50CiAgICAgcnVuIGxlc3MgY29kZSB3aXRoIGV1aWQ9PTAgaWYgc3NoIGlzIGluc3RhbGxlZCBzZXR1aWQgcm9vdAogICAgIGp1c3Qgc3dpdGNoIHRoZSBldWlkLCBkb24ndCBzd2l0Y2ggdGhlIGNvbXBsZXRlIHNldCBvZiBncm91cHMKICAgICAodGhpcyBpcyBvbmx5IG5lZWRlZCBieSBzc2hkKS4gb2sgcHJvdm9zQAogICAtIG1wZWNoQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzExIDA1OjQ2OjIwCiAgICAgW2F1dGgta3JiNC5jIG1vbml0b3IuaCBzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jIHNzaC1hZ2VudC5jIHNzaGQuY10KICAgICBwaWRfdCBjbGVhbnVwLiBNYXJrdXMgbmVlZCB0aGlzIG5vdyB0byBrZWVwIGhhY2tpbmcuCiAgICAgbWFya3VzQCwgbWlsbGVydEAgb2sKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMTEgMDg6MTE6NDUKICAgICBbY2Fub2hvc3QuY10KICAgICB1c2UgIm50b3AiIG9ubHkgYWZ0ZXIgaW5pdGlhbGl6ZWQKIC0gKGJhbCkgQ3lnd2luIGZpeCB1cCBmcm9tIHN3YXAgdWlkIGNsZWFuIHVwIGluIHNzaC5jIHBhdGNoIGJ5CiAgIHZpbnNjaGVuQHJlZGhhdC5jb20KCjIwMDIwNjA5CiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDggMDU6MDc6NTYKICAgICBbc3NoLmNdCiAgICAgbnVrZSBwdHJhY2UgY29tbWVudAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOCAwNTowNzowOQogICAgIFtzc2gta2V5c2lnbi5jXQogICAgIG9ubHkgYWNjZXB0IDIwIGJ5dGUgc2Vzc2lvbiBpZHMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDggMDU6MTc6MDEKICAgICBbcmVhZGNvbmYuYyByZWFkY29uZi5oIHNzaC4xIHNzaC5jXQogICAgIGRlcHJlY2F0ZSBGYWxsQmFja1RvUnNoIGFuZCBVc2VSc2g7IHBhdGNoIGZyb20gZGptQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOCAwNTo0MDowMQogICAgIFtyZWFkY29uZi5jXQogICAgIGp1c3Qgd2FybiBhYm91dCBEZXByZWNhdGVkIG9wdGlvbnMgZm9yIG5vdwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOCAwNTo0MToxOAogICAgIFtzc2hfY29uZmlnXQogICAgIHJlbW92ZSBGYWxsQmFja1RvUnNoL1VzZVJzaAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOCAxMjozNjo1MwogICAgIFtzY3AuY10KICAgICByZW1vdmUgRmFsbEJhY2tUb1JzaAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOCAxMjo0NjoxNAogICAgIFtyZWFkY29uZi5jXQogICAgIHNpbGVudGx5IGlnbm9yZSBkZXByZWNhdGVkIG9wdGlvbnMsIHNpbmNlIEZhbGxCYWNrVG9Sc2ggbWlnaHQgYmUgcGFzc2VkCiAgICAgYnkgcmVtb3RlIHNjcCBjb21tYW5kcy4KICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wOCAyMToxNToyNwogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgYWx3YXlzIHVzZSBnZXRuYW1laW5mby4gIChkaWFnIG1lc3NhZ2Ugb25seSkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDkgMDQ6MzM6MjcKICAgICBbc3NoY29ubmVjdC5jXQogICAgIGFib3J0KCkgLSA+IGZhdGFsKCkKIC0gKGJhbCkgUkNTSUQgdGFnIHVwZGF0ZXMgb24gY2hhbm5lbHMuYywgY2xpZW50bG9vcC5jLCBuY2hhbi5jLAogICBzZnRwLWNsaWVudC5jLCBzc2gtYWdlbmV0LmMsIHNzaC1rZXlnZW4uYyBhbmQgY29ubmVjdC5oICh3ZSBkaWQgdW5leHBhbmQKICAgaW5kZXBlbmRhbnQgb2YgdGhlbSkKCjIwMDIwNjA3CiAtIChiYWwpIFJlbW92ZWQgLS17ZW5hYmxlL2Rpc2FibGV9LXN1aWQtc3NoCiAtIChiYWwpIE1pc3NlZCBfX3Byb2duYW1lIGluIHNzaC1rZXlzaWduLmMgIHBhdGNoIGJ5IGR0dWNrZXJAemlwLmNvbS5hdQogLSAoYmFsKSB1c2UgJ0xPR0lOX1BST0dSQU0nICBub3QgJy91c3IvYmluL2xvZ2luJyBpbiBzZXNzaW9uLmMgcGF0Y2ggYnkKICAgQmVydHJhbmQuVmVsbGVAYXBvZ2VlLWNvbS5mcgoKMjAwMjA2MDYKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xNSAyMTo1NjozOAogICAgIFtzZXJ2Y29uZi5jIHNzaGQuOCBzc2hkX2NvbmZpZ10KICAgICByZS1lbmFibGUgcHJpdnNlcCBhbmQgZGlzYWJsZSBzZXR1aWQgZm9yIHBvc3QtMy4yLjIKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTYgMjI6MDI6NTAKICAgICBbY2lwaGVyLmMga2V4LmggbWFjLmNdCiAgICAgZml4IHdhcm5pbmdzIChvcGVuc3NsIDAuOS43IHJlcXVpcmVzIGNvbnN0KQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTYgMjI6MDk6NTkKICAgICBbc2Vzc2lvbi5jIHNzaC5jXQogICAgIGRvbid0IGxpbWl0IHhhdXRoIHBhdGhsZW4gb24gY2xpZW50IHNpZGUgYW5kIGxvbmdlciBwcmludCBsZW5ndGggb24KICAgICBzZXJ2ZXIgd2hlbiBkZWJ1Zzsgb2sgbWFya3VzQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTkgMjA6NTQ6NTIKICAgICBbbG9nLmhdCiAgICAgZXh0cmEgY29tbWFzIGluIGVudW0gbm90IDEwMCUgcG9ydGFibGUKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzIyIDIzOjE4OjI1CiAgICAgW3NzaC5jIHNzaGQuY10KICAgICBzcGVsbGluZzsgYWJpc2hvZmZAYXJjLm5hc2EuZ292CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzIzIDE5OjI0OjMwCiAgICAgW2F1dGhmaWxlLmMgYXV0aGZpbGUuaCBwYXRobmFtZXMuaCBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdC5oIAogICAgICBzc2hjb25uZWN0MS5jIHNzaGNvbm5lY3QyLmMgc3NoLWtleXNpZ24uOCBzc2gta2V5c2lnbi5jIE1ha2VmaWxlLmluXQogICAgIGFkZCAvdXNyL2xpYmV4ZWMvc3NoLWtleXNpZ246IGEgc2V0dWlkIGhlbHBlciBwcm9ncmFtIGZvciBob3N0YmFzZWQgCiAgICAgYXV0aGVudGljYXRpb24gaW4gcHJvdG9jb2wgdjIgKG5lZWRzIHRvIGFjY2VzcyB0aGUgaG9zdGtleXMpLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yMyAxOTozOTozNAogICAgIFtzc2guY10KICAgICBhZGQgY29tbWVudCBhYm91dCBzc2gta2V5c2lnbgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yNCAwODo0NToxNAogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIHN0YXQgc3NoLWtleXNpZ24gZmlyc3QsIHByaW50IGVycm9yIGlmIHN0YXQgZmFpbHM7CiAgICAgc29tZSBkZWJ1Zy0+ZXJyb3I7IGZpeCBjb21tZW50CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI1IDA4OjUwOjM5CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgZXhlY2xwLT5leGVjbDsgZnJvbSBzdGV2ZXNrCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI1IDE4OjUxOjA3CiAgICAgW2F1dGguaCBhdXRoMi5jIGF1dGgyLWhvc3RiYXNlZC5jIGF1dGgyLWtiZGludC5jIGF1dGgyLW5vbmUuYwogICAgICBhdXRoMi1wYXNzd2QuYyBhdXRoMi1wdWJrZXkuYyBNYWtlZmlsZS5pbl0KICAgICBzcGxpdCBhdXRoMi5jIGludG8gb25lIGZpbGUgcGVyIG1ldGhvZDsgb2sgcHJvdm9zQC9kZXJhYWR0QAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjYgMjA6MzU6MTAKICAgICBbc3NoLjFdCiAgICAgc29ydCBDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yOCAxNjo0NToyNwogICAgIFttb25pdG9yX21tLmNdCiAgICAgcHJpbnQgc3RyZXJyb3IoZXJybm8pIG9uIG1tYXAvbXVubWFwIGVycm9yOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yOCAxNzoyODowMgogICAgIFt1aWRzd2FwLmNdCiAgICAgZm9ybWF0IHNwZWMgY2hhbmdlL2Nhc3RzIGFuZCBzb21lIEtORjsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjggMjE6MjQ6MDAKICAgICBbdWlkc3dhcC5jXQogICAgIHVzZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUgaW4gZmF0YWwoKQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjkgMDM6MDY6MzAKICAgICBbc3NoLjEgc3NoZC44XQogICAgIHNwZWxsaW5nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI5IDExOjIxOjU3CiAgICAgW3NzaGQuY10KICAgICBkb24ndCBzdGFydCBpZiBwcml2c2VwIGlzIGVuYWJsZWQgYW5kIFNTSF9QUklWU0VQX1VTRVIgb3IKICAgICBfUEFUSF9QUklWU0VQX0NIUk9PVF9ESVIgYXJlIG1pc3Npbmc7IG9rIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzMwIDA4OjA3OjMxCiAgICAgW2NpcGhlci5jXQogICAgIHVzZSByaWpuZGFlbC9hZXMgZnJvbSBsaWJjcnlwdG8gKG9wZW5zc2wgPj0gMC45LjcpIGluc3RlYWQgb2YKICAgICBvdXIgb3duIGltcGxlbWVudGF0aW9uLiBhbGxvdyB1c2Ugb2YgQUVTIGhhcmR3YXJlIHZpYSBsaWJjcnlwdG8sIAogICAgIG9rIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzMxIDEwOjMwOjMzCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgZXh0ZW50IHNzaC1rZXlzaWduIHByb3RvY29sOgogICAgIHBhc3MgIyBvZiBzb2NrZXQtZmQgdG8gc3NoLWtleXNpZ24sIGtleXNpZ24gdmVyZmllcyBsb2NhbGx5IHVzZWQKICAgICBpcC1hZGRyZXNzIHVzaW5nIHRoaXMgc29ja2V0LWZkLCByZXN0cmljdHMgZmFrZSBsb2NhbCBob3N0bmFtZXMKICAgICB0byBhY3R1YWwgbG9jYWwgaG9zdG5hbWVzOyBvayBzdGV2ZXNrQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8zMSAxMTozNToxNQogICAgIFthdXRoLmggYXV0aDIuY10KICAgICBtb3ZlIEF1dGhtZXRob2QgZGVmaW5pdG9ucyB0byBwZXItbWV0aG9kIGZpbGUuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzMxIDEzOjE2OjQ4CiAgICAgW2tleS5jXQogICAgIGFkZCBjb21tZW50OgogICAgIGtleV92ZXJpZnkgcmV0dXJucyAxIGZvciBhIGNvcnJlY3Qgc2lnbmF0dXJlLCAwIGZvciBhbiBpbmNvcnJlY3Qgc2lnbmF0dXJlCiAgICAgYW5kIC0xIG9uIGVycm9yLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8zMSAxMzoyMDo1MAogICAgIFtzc2gtcnNhLmNdCiAgICAgcGFkIHJlY2VpdmVkIHNpZ25hdHVyZSB3aXRoIGxlYWRpbmcgemVyb3MsIGJlY2F1c2UgUlNBX3ZlcmlmeSBleHBlY3RzCiAgICAgYSBzaWduYXR1cmUgb2YgUlNBX3NpemUuIHRoZSBkcmFmdHMgc2F5cyB0aGUgc2lnbmF0dXJlIGlzIHRyYW5zbWl0dGVkCiAgICAgdW5wYWRkZWQgKGUuZy4gcHV0dHkgZG9lcyBub3QgcGFkKSwgcmVwb3J0ZWQgYnkgYW5ha2luQHBvYm94LmNvbQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDMgMTI6MDQ6MDcKICAgICBbc3NoLmhdCiAgICAgY29tcGF0aWJsaXR5IC0+IGNvbXBhdGliaWxpdHkKICAgICBkZWNyaXB0b3IgLT4gZGVzY3JpcHRvcgogICAgIGF1dGhlbnRjaWF0ZWQgLT4gYXV0aGVudGljYXRlZAogICAgIHRyYW5zbWl0aW9uIC0+IHRyYW5zbWlzc2lvbgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNCAxOTo0MjozNQogICAgIFttb25pdG9yLmNdCiAgICAgb25seSBhbGxvdyBlbmFibGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHM7IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDQgMTk6NTM6NDAKICAgICBbbW9uaXRvci5jXQogICAgIHNhdmUgdGhlIHNlc3Npb24gaWQgKGhhc2gpIGZvciBzc2gyIChpdCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSAKICAgICBpbml0aWFsIHNpZ24gcmVxdWVzdCkgYW5kIHZlcmlmeSB0aGF0IHRoaXMgdmFsdWUgaXMgdXNlZCBkdXJpbmcgCiAgICAgYXV0aGVudGljYXRpb247IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDQgMjM6MDI6MDYKICAgICBbcGFja2V0LmNdCiAgICAgcmVtb3ZlIF9fRlVOQ1RJT05fXwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNCAyMzowNTo0OQogICAgIFtjaXBoZXIuYyBtb25pdG9yLmMgbW9uaXRvcl9mZHBhc3MuYyBtb25pdG9yX21tLmMgbW9uaXRvcl93cmFwLmNdCiAgICAgX19GVU5DVElPTl9fIC0+IF9fZnVuY19fCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA1IDE2OjA4OjA3CiAgICAgW3NzaC1hZ2VudC4xIHNzaC1hZ2VudC5jXQogICAgICctYSBiaW5kX2FkZHJlc3MnIGJpbmRzIHRoZSBhZ2VudCB0byB1c2VyLXNwZWNpZmllZCB1bml4LWRvbWFpbgogICAgIHNvY2tldCBpbnN0ZWFkIG9mIC90bXAvc3NoLVhYWFhYWFhYL2FnZW50LjxwaWQ+OyBvayBkam1AIChzb21lIHRpbWUgYWdvKS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDUgMTY6MDg6MDcKICAgICBbc3NoLWFnZW50LjEgc3NoLWFnZW50LmNdCiAgICAgJy1hIGJpbmRfYWRkcmVzcycgYmluZHMgdGhlIGFnZW50IHRvIHVzZXItc3BlY2lmaWVkIHVuaXgtZG9tYWluCiAgICAgc29ja2V0IGluc3RlYWQgb2YgL3RtcC9zc2gtWFhYWFhYWFgvYWdlbnQuPHBpZD47IG9rIGRqbUAgKHNvbWUgdGltZSBhZ28pLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNSAxNjo0ODo1NAogICAgIFtzc2gtYWdlbnQuY10KICAgICBjb3B5IGN1cnJlbnQgcmVxdWVzdCBpbnRvIGFuIGV4dHJhIGJ1ZmZlciBhbmQganVzdCBmbHVzaCB0aGlzCiAgICAgcmVxdWVzdCBvbiBlcnJvcnMsIG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDUgMTk6NTc6MTIKICAgICBbYXV0aGZkLmMgYXV0aGZkLmggc3NoLWFkZC4xIHNzaC1hZGQuYyBzc2gtYWdlbnQuY10KICAgICBzc2gtYWRkIC14IGZvciBsb2NrIGFuZCAtWCBmb3IgdW5sb2NraW5nIHRoZSBhZ2VudC4KICAgICB0b2RvOiBlbmNyeXB0IHByaXZhdGUga2V5cyB3aXRoIGxvY2tlZC4uLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNSAyMDo1NjozOQogICAgIFtzc2gtYWRkLmNdCiAgICAgYWRkIC14Ly1YIHRvIHVzYWdlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA1IDIxOjU1OjQ0CiAgICAgW2F1dGhmZC5jIGF1dGhmZC5oIHNzaC1hZGQuMSBzc2gtYWRkLmMgc3NoLWFnZW50LmNdCiAgICAgc3NoLWFkZCAtdCBsaWZlLCAgU2V0IGxpZmV0aW1lIChpbiBzZWNvbmRzKSB3aGVuIGFkZGluZyBpZGVudGl0aWVzOyAKICAgICBvayBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNiAwMTowOTo0MQogICAgIFttb25pdG9yLmhdCiAgICAgbm8gdHJhaWxpbmcgY29tbWEgaW4gZW51bTsgY2hpbmFAdGhld3JpdHRlbndvcmQuY29tCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA2IDE3OjEyOjQ0CiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgZGlzY2FyZCByZW1haW5pbmcgYnl0ZXMgb2YgY3VycmVudCByZXF1ZXN0OyBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA2IDE3OjMwOjExCiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgdXNlIGdldF9pbnQoKSBtYWNybyAoaGlkZSBpcXVldWUpCiAtIChiYWwpIE1pc3NlZCBtc2cuW2NoXSBpbiBtZXJnZS4gIFJlcXVpcmVkIGZvciBzc2gta2V5c2lnbi4KIC0gKGJhbCkgRm9yZ290IHRvIGFkZCBtc2cuYyBNYWtlZmlsZS5pbi4KIC0gKGJhbCkgbW9uaXRvcl9tbS5jIHR5cG9zLgogLSAoYmFsKSBSZWZpeGVkIGF1dGgyLmMuICBJdCB3YXMgbmV2ZXIgZnVsbHkgY29tbWl0ZWQgd2hpbGUgc3BsaXRpbmcgb3V0CiAgIGF1dGhlbnRpY2F0aW9uIHRvIGRpZmZlcmVudCBmaWxlcy4KIC0gKGJhbCkgc3NoLWtleXNpZ24gc2hvdWxkIGJ1aWxkIGFuZCBpbnN0YWxsIGNvcnJlY3RseSBub3cuICBQaGFzZSB0d28KICAgd291bGQgYmUgdG8gY2xlYW4gb3V0IGFueSBkZWFkIHdvb2QgYW5kIGRpc2FibGUgc3NoIHNldHVpZCBvbiBpbnN0YWxsLgogLSAoYmFsKSBSZXZlcnNlIGxvZ2ljLCB1c2UgX19mdW5jX18gZmlyc3Qgc2luY2UgaXQncyBDOTkKCjIwMDIwNjA0CiAtIChzdGV2ZXNrKSBbY2hhbm5lbHMuY10gYnVnICMxNjQgcGF0Y2ggZnJvbSBZT1NISUZVSkkgSGlkZWFraSAoY2hhbmdlZAogICBzZXRzb2Nrb3B0IGZyb20gZGVidWcgdG8gZXJyb3IgZm9yIG5vdykuCgoyMDAyMDUyNwogLSAodGltKSBbY29uZmlndXJlLmFjLm9yaWcgbW9uaXRvcl9mZHBhc3MuY10gRW5haG5jZSBtc2doZHIgdGVzdHMgdG8gYWRkcmVzcwogICBidWlsZCBwcm9ibGVtIG9uIElyaXggcmVwb3J0ZWQgYnkgRGF2ZSBMb3ZlIDxkLmxvdmVAZGwuYWMudWs+LiBCYWNrIG91dAogICBsYXN0IG1vbml0b3JfZmRwYXNzLmMgY2hhbmdlcyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkIHdpdGggbmV3IHRlc3RzLgogICBQYXRjaCB0ZXN0ZWQgb24gSXJpeCBieSBKYW4tRnJvZGUgTXlrbGVidXN0IDxqYW5mcm9kZUBwYXJhbGxhYi51aWIubm8+CgoyMDAyMDUyMgogLSAoZGptKSBGaXggc3BlbGxpbmcgbWlzdGFrZXMsIHNwb3R0ZWQgYnkgU29sYXIgRGVzaWduZXIgaQogICA8c29sYXJAb3BlbndhbGwuY29tPgogLSBTeW5jIHNjYXJkLyAobm90IHN1cmUgd2hlbiBpdCBkcmlmdGVkKQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jOgogICBbYXV0aC5jXQogICBGaXggdHlwby90aGlua28uICBQYXNzIGluIGFzIHRvIGF1dGhfYXBwcm92YWwoKSwgbm90IE5VTEwuCiAgIENsb3NlcyBQUiAyNjU5LgogLSBDcmFuayB2ZXJzaW9uCiAtIENyYW5rIFJQTSBzcGVjIHZlcnNpb25zCgoyMDAyMDUyMQogLSAoc3RldmVzaykgW3NzaGQuY10gYnVnIDI0NTsgZGlzYWJsZSBzZXRzaWQoKSBmb3Igbm93CiAtIChzdGV2ZXNrKSBbc3NoZC5jXSAjaWZuZGVmIEhBVkVfQ1lHV0lOIGZvciBzZXRncm91cHMoKQoKMjAwMjA1MTcKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gcmVtb3ZlIGV4dHJhIE1ENV9NU0c9Im5vIiBsaW5lLgoKMjAwMjA1MTUKIC0gKGJhbCkgQ1ZTIElEIGZpeCB1cCBvbiBhdXRoLXBhc3N3ZC5jCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzA3IDE5OjU0OjM2CiAgICAgW3NzaC5oXQogICAgIHVzZSBzc2ggdWlkCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8wOCAyMTowNjozNAogICAgIFtzc2guaF0KICAgICBtb3ZlIHRvIHNzaGQuc3NoZCBpbnN0ZWFkCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xMSAyMDoyNDo0OAogICAgIFtzc2guaF0KICAgICB0eXBvIGluIGNvbW1lbnQKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTMgMDI6Mzc6MzkKICAgICBbYXV0aC1za2V5LmMgYXV0aDIuY10KICAgICBsZXNzIHdhcm5pbmdzLiAgc2tleV97cmVzcG9uZCxxdWVyeX0gYXJlIHB1YmxpYyAoaW4gYXV0aC5oKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xMyAyMDo0NDo1OAogICAgIFthdXRoLW9wdGlvbnMuYyBhdXRoLmMgYXV0aC5oXQogICAgIG1vdmUgdGhlIHBhY2tldF9zZW5kX2RlYnVnIGhhbmRsaW5nIGZyb20gYXV0aC1vcHRpb25zLmMgdG8gYXV0aC5jOyAKICAgICBvayBwcm92b3NACiAgIC0gbWlsbGVydEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xMyAxNTo1MzoxOQogICAgIFtzc2hkLmNdCiAgICAgQ2FsbCBzZXRzaWQoKSBpbiB0aGUgY2hpbGQgYWZ0ZXIgc3NoZCBhY2NlcHRzIHRoZSBjb25uZWN0aW9uIGFuZCBmb3Jrcy4KICAgICBUaGlzIGlzIG5lZWRlZCBmb3IgcHJpdnNlcCB3aGljaCBjYWxscyBzZXRsb2dpbigpIHdoZW4gaXQgY2hhbmdlcyB1aWRzLgogICAgIFdpdGhvdXQgdGhpcywgdGhlcmUgaXMgYSByYWNlIHdoZXJlIHRoZSBsb2dpbiBuYW1lIG9mIGFuIGV4aXN0aW5nIAogICAgIGNvbm5lY3Rpb24sIGFzIHJldHVybmVkIGJ5IGdldGxvZ2luKCksIG1heSBiZSBjaGFuZ2VkIHRvIHRoZSBwcml2c2VwIAogICAgIHVzZXIgKHNzaGQpLiAgbWFya3VzQCBPSwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xMyAyMToyNjo0OQogICAgIFthdXRoLXJob3N0cy5jXQogICAgIGhhbmRsZSBkZWJ1ZyBtZXNzYWdlcyBkdXJpbmcgcmhvc3RzLXJzYSBhbmQgaG9zdGJhc2VkIGF1dGhlbnRpY2F0aW9uOyAKICAgICBvayBwcm92b3NACiAgIC0gbW91cmluZ0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xNSAxNTo0Nzo0OQogICAgIFtrZXguYyBtb25pdG9yLmMgbW9uaXRvcl93cmFwLmMgc3NoZC5jXQogICAgICdtb25pdG9yJyB2YXJpYWJsZSBjbGFzaGVzIHdpdGggYXQgbGVhc3Qgb25lIGxhbWUgcGxhdGZvcm0gKE5lWFQpLiAgaQogICAgIFJlbmFtZWQgdG8gJ3Btb25pdG9yJy4gIHByb3Zvc0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzA0IDAyOjM5OjM1CiAgICAgW3NlcnZjb25mLmMgc3NoZC44IHNzaGRfY29uZmlnXQogICAgIGVuYWJsZSBwcml2c2VwIGJ5IGRlZmF1bHQ7IHByb3ZvcyBvawogICAtIG1pbGxlcnRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMDYgMjM6MzQ6MzMKICAgICBbc3NoLjEgc3NoZC44XQogICAgIEtpbGwvYWRqdXN0IHIobG9naW58ZXhlYylkPyByZWZlcmVuY2VzIG5vdyB0aGF0IHRob3NlIGFyZSBubyBsb25nZXIgaW4KICAgICB0aGUgdHJlZS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTUgMjE6MDI6NTMKICAgICBbc2VydmNvbmYuYyBzc2hkLjggc3NoZF9jb25maWddCiAgICAgZGlzYWJsZSBwcml2c2VwIGFuZCBlbmFibGUgc2V0dWlkIGZvciB0aGUgMy4yLjIgcmVsZWFzZQogLSAoYmFsKSBGaXhlZCB1cCBQQU0gY2FzZS4gIEkgdGhpbmsuCiAtIChiYWwpIENsYXJpZmllZCBvcGVuYnNkLWNvbXBhdC8qLWNyYXkuKiBMaWNlbmNlIHByb3ZpZGVkIGJ5IFdlbmR5CiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTUgMjE6MDU6MjkKICAgICBbdmVyc2lvbi5oXQogICAgIGVudGVyIE9wZW5TU0hfMy4yLjIKIC0gKGJhbCkgQ2FsZGFyYSwgU3VzZSwgYW5kIFJlZGhhdCBvcGVuc3NoLnNwZWNzIHVwZGF0ZWQuCgoyMDAyMDUxNAogLSAoc3RldmVzaykgW1JFQURNRS5wcml2c2VwXSBQQU0rcHJpdnNlcCB3b3JrcyB3aXRoIFNvbGFyaXMgOC4KIC0gKHRpbSkgW3NzaHB0eS5jXSBzZXQgdHR5IG1vZGVzIHdoZW4gYWxsb2NhdGluZyBvbGQgc3R5bGUgYnNkIHB0eXMgdG8KICAgbWF0Y2ggd2hhdCBuZXdlciBzdHlsZSBwdHlzIGhhdmUgd2hlbiBhbGxvY2F0ZWQuIEJhc2VkIG9uIGEgcGF0Y2ggYnkKICAgUm9nZXIgQ29ybmVsaXVzIDxyYWNAdGVuemluZy5vcmc+CiAtICh0aW0pIFtSRUFETUUucHJpdnNlcF0gVW5peFdhcmUgNyBhbmQgT3BlblVOSVggOCB3b3JrLgogLSAodGltKSBbUkVBRE1FLnByaXZzZXBdIHJlbW92ZSByZWZlcmVuY2UgdG8gVW5peFdhcmUgNyBhbmQgT3BlblVOSVggOAogICBmcm9tIFBBTS1lbmFibGVkIHByYWdyYXBoLiBVbml4V2FyZSBoYXMgbm8gUEFNLgogLSAodGltKSBbY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlY10gdXBkYXRlIHZlcnNpb24uCgoyMDAyMDUxMwogLSAoc3RldmVzaykgYWRkIGluaXRpYWwgUkVBRE1FLnByaXZzZXAKIC0gKHN0ZXZlc2spIFtjb25maWd1cmUuYWNdIG5pY2VyIG1lc3NhZ2U6IC0td2l0aC1wcml2c2VwLXVzZXI9dXNlcgogLSAoZGptKSBBZGQgLS13aXRoLXN1cGVydXNlci1wYXRoPXh4eCBjb25maWd1cmUgb3B0aW9uIHRvIHNwZWNpZnkgCiAgIHdoYXQgJFBBVEggdGhlIHN1cGVydXNlciByZWNlaXZlcy4KIC0gKGRqbSkgQnVnICMyMzE6IFVzZVByaXZpbGVnZVNlcGFyYXRpb24gdHVybnMgb2ZmIEJhbm5lci4KIC0gKGRqbSkgQWRkIC0td2l0aC1wcml2c2VwLXBhdGggY29uZmlndXJlIG9wdGlvbgogLSAoZGptKSBVcGRhdGUgUlBNIHNwZWMgZmlsZTogZGlmZmVyZW50IHN1cGVydXNlciBwYXRoLCB1c2UKICAgL3Zhci9lbXB0eS9zc2hkIGZvciBwcml2c2VwCiAtIChkam0pIEJ1ZyAjMjM0OiBtaXNzaW5nIHJlYWRwYXNzcGhyYXNlIGRlY2xhcmF0aW9uIGFuZCBkZWZpbmVzCiAtIChkam0pIEFkZCBJTlNUQUxMIHdhcm5pbmcgYWJvdXQgU1NIIHByb3RvY29sIDEgYmxvd2Zpc2ggdy8gCiAgICBPcGVuU1NMIDwgMC45LjYKCjIwMDIwNTExCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIGFwcGxpZWQgYSByZXdvcmsgb2YgZGptJ3MgT3BlblNTTCBzZWFyY2ggY2xlYW51cCBwYXRjaC4KICAgTm93IG9ubHkgc2VhcmNoZXMgc3lzdGVtIGFuZCAvdXNyL2xvY2FsL3NzbCAoT3BlblNTTCdzIGRlZmF1bHQgaW5zdGFsbCBwYXRoKQogICBPdGhlcnMgbXVzdCB1c2UgLS13aXRoLXNzbC1kaXI9Li4uLgogLSAodGltKSBbbW9uaXRvcl9mZHBhc3MuY10gZml4IGZvciBzeXN0ZW1zIHRoYXQgaGF2ZSBib3RoCiAgIEhBVkVfQUNDUklHSFRTX0lOX01TR0hEUiBhbmQgSEFWRV9DT05UUk9MX0lOX01TR0hEUi4gSWUuIHN5cy9zb2NrZXQuaCAKICAgaGFzICNkZWZpbmUgbXNnX2FjY3JpZ2h0cyBtc2dfY29udHJvbAoKMjAwMjA1MTAKIC0gKHN0ZXZlc2spIFthdXRoLmNdIFNoYWRvdyBhY2NvdW50IGFuZCBleHBpcmF0aW9uIGNsZWFudXAuICBOb3cKICAgY2hlY2sgZm9yIHJvb3QgZm9yY2VkIGV4cGlyZS4gIFN0aWxsIGRvbid0IGNoZWNrIGZvciBpbmFjdGl2ZS4KIC0gKGRqbSkgUmV3b3JrIFJlZEhhdCBSUE0gZmlsZXMuIEJhc2VkIG9uIHNwZWMgZnJvbSBOYWxpbiAKICAgRGFoeWFiaGFpIDxuYWxpbkByZWRoYXQuY29tPiBhbmQgcGF0Y2hlcyBmcm9tIAogICBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPgogLSAoZGptKSBUcnkgdG8gZHJvcCBzdXBwbGVtZW50YWwgZ3JvdXBzIGF0IGRhZW1vbiBzdGFydHVwLiBQYXRjaCBmcm9tIAogICBSZWRIYXQKIC0gKGJhbCkgQmFjayBhbGwgdGhlIHdheSBvdXQgb2YgYXV0aC1wYXNzd2QuYyBjaGFuZ2VzLiAgQnJlYWtzIHRvbyBtYW55CiAgIHRoaW5ncyB0aGF0IGRvbid0IHNldCBwdy0+cHdfcGFzc3dkLgoKMjAwMjA1MDkKIC0gKHRpbSkgW01ha2VmaWxlLmluXSBVbmJyZWFrIG1ha2UgLWYgTWFrZWZpbGUuaW4gZGlzdHByZXAKCjIwMDIwNTA4CiAtICh0aW0pIFtvcGVuYnNkLWNvbXBhdC9ic2QtYXJjNHJhbmRvbS5jXSBmaXggbG9naWMgb24gd2hlbiBzZWVkX3JuZygpIGlzCiAgIGNhbGxlZC4gUmVwb3J0IGJ5IENocmlzIE1heHdlbGwgPG1heHdlbGxAY3MuZGFsLmNhPgogLSAodGltKSBbTWFrZWZpbGUuaW4gY29uZmlndXJlLmFjXSBzZXQgU0hFTEwgdmFyaWFibGUgaW4gTWFrZWZpbGUKIC0gKGRqbSkgRGlzYWJsZSBQQU0ga2JkLWludCBhdXRoIGlmIHByaXZzZXAgaXMgdHVybmVkIG9uIChpdCBkb2Vzbid0IHdvcmspCgoyMDAyMDUwNwogLSAodGltKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaF0KICAgQWRkIHRydW5jYXRlKCkgZW11bGF0aW9uIHRvIGFkZHJlc3MgQnVnIDIwOAoKMjAwMjA1MDYKIC0gKGRqbSkgVW5icmVhayBhdXRoLXBhc3N3ZC5jIGZvciBQQU0gYW5kIFNJQQogLSAoZGptKSBVbmJyZWFrIFBBTSBhdXRoIGZvciBwcm90b2NvbCAxLiBSZXBvcnQgZnJvbSBQZWtrYSBTYXZvbGEgCiAgIDxwZWtrYXNAbmV0Y29yZS5maT4KIC0gKGRqbSkgRG9uJ3QgcmVpbml0aWFsaXNlIFBBTSBjcmVkZW50aWFscyBiZWZvcmUgd2UgaGF2ZSBzdGFydGVkIFBBTS4KICAgUmVwb3J0IGZyb20gUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4KICAgCjIwMDIwNTA2CiAtIChiYWwpIEZpeGVkIGF1dGgtcGFzc3dkLmMgdG8gcmVzb2x2ZSBQZXJtaXRFbXB0eVBhc3N3b3JkIGlzc3VlCiAKMjAwMjA1MDEKIC0gKGRqbSkgSW1wb3J0IE9wZW5CU0QgcmVncmVzc2lvbiB0ZXN0cy4gUmVxdWlyZXMgQlNEIG1ha2UgdG8gcnVuCiAtIChkam0pIEZpeCByZWFkcGFzc3BoYXNlIGNvbXBpbGF0aW9uIGZvciBzeXN0ZW1zIHdoaWNoIGhhdmUgaXQKCjIwMDIwNDI5CiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSB1cGRhdGUgZml4VVAgdG8gcmVmbGVjdCBjaGFuZ2VzIGluCiAgIHNzaGRfY29uZmlnLgogLSAodGltKSBbY29udHJpYi9jeWd3aW4vUkVBRE1FXSByZW1vdmUgcmVmZXJlbmNlIHRvIHJlZ2V4LgogICBwYXRjaCBmcm9tIENvcmlubmEgVmluc2NoZW4gPHZpbnNjaGVuQHJlZGhhdC5jb20+CgoyMDAyMDQyNgogLSAoZGptKSBCdWcgIzEzNywgIzIwOTogZml4IG1ha2UgcHJvYmxlbXMgZm9yIHNjYXJkL1NzaC5iaW4sIGRvIHV1ZGVjb2RlCiAgIGR1cmluZyBkaXN0cHJlcCBvbmx5CiAtIChkam0pIERpc2FibGUgUEFNIHBhc3N3b3JkIGV4cGlyeSB1bnRpbCBhIGNvbXBsZXRlIGZpeCBmb3IgYnVnICMxODggCiAgIGV4aXN0cwogLSAoZGptKSBCdWcgIzE4MDogU2V0IFRvUyBiaXRzIG9uIElQdjQtaW4tSVB2NiBtYXBwZWQgYWRkcmVzc2VzLiBCYXNlZCBvbiAKICAgcGF0Y2ggZnJvbSBvcGVuc3NoQG1pc2MudGVjcS5vcmcKCjIwMDIwNDI1CiAtIChzdGV2ZXNrKSBbZGVmaW5lcy5oXSByZW1vdmUgVVNFX1RJTUVWQUw7IHVudXNlZAogLSAoc3RldmVzaykgW2FjY29uZmlnLmggYXV0aC1wYXNzd2QuYyBjb25maWd1cmUuYWMgc3NoZC5jXSBIUC1VWCAxMC4yNgogICBzdXBwb3J0LiAgYnVnICMxODQuICBtb3N0IGZyb20gZGNvbGVAa2V5c29mdHN5cy5jb20uCgoyMDAyMDQyNAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIzIDEyOjU0OjEwCiAgICAgW3ZlcnNpb24uaF0KICAgICAzLjIuMQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMyAyMjoxNjoyOQogICAgIFtzc2hkLmNdCiAgICAgSW1wcm92ZSBlcnJvciBtZXNzYWdlOyBvayBtYXJrdXNAIHN0ZXZlc2tACgoyMDAyMDQyMwogLSAoc3RldmVzaykgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIHNlc3Npb24uY10gTE9HSU5fTk9fRU5ET1BUIGZvciBIUC1VWAogLSAoc3RldmVzaykgW2FjY29uZmlnLmhdIE5FRURfSU5fU1lTVE1fSCB1bnVzZWQKIC0gKG1hcmt1cykgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMyAxMjo1ODoyNgogICAgIFtyYWRpeC5jXQogICAgIHNlbmQgY29tcGxldGUgdGlja2V0OyBzZW1lcmFkQHNzMTAwMC5tcy5tZmYuY3VuaS5jegogLSAoZGptKSBUcmltIENoYW5nZUxvZyB0byBpbmNsdWRlIG9ubHkgcG9zdC0zLjEgY2hhbmdlcwogLSAoZGptKSBVcGRhdGUgUlBNIHNwZWMgZmlsZSB2ZXJzaW9ucwogLSAoZGptKSBSZWRoYXQgc3BlYyBlbmFibGVzIEtyYlYgYnkgZGVmYXVsdAogLSAoZGptKSBBcHBsaWVkIE9wZW5TQyBzbWFydGNhcmQgdXBkYXRlcyBmcm9tIE1hcmt1cyAmIAogICBBbnR0aSBUYXBhbmluZW4gPGFldEBjYy5odXQuZmk+CiAtIChkam0pIERlZmluZSBCUk9LRU5fUkVBTFBBVEggZm9yIEFJWCwgcGF0Y2ggZnJvbSAKICAgQW50dGkgVGFwYW5pbmVuIDxhZXRAY2MuaHV0LmZpPgogLSAoZGptKSBCdWcgIzIxNDogRml4IHV0bXAgZm9yIElyaXggKGRvbid0IHN0cmlwICJ0dHkiKS4gUGF0Y2ggZnJvbSAKICAgS2V2aW4gVGF5bG9yIDxub0Bub3doZXJlLm9yZz4gKD8/KSB2aWEgUGhpbGlwcCBHcmF1CiAgIDxwaGdyYXVAemVkYXQuZnUtYmVybGluLmRlPgogLSAoZGptKSBCdWcgIzIxMzogU2ltcGxpZnkgQ01TR19BTElHTiBtYWNyb3MgdG8gYXZvaWQgc3ltYm9sIGNsYXNoZXMuIAogICBSZXBvcnRlZCBieSBEb3VnIE1hbnRvbiA8ZG1hbnRvbkBlbWVhLmF0dC5jb20+CiAtIChkam0pIEJ1ZyAjMjIyOiBGaXggdGVzdHMgZm9yIGdldGFkZHJpbmZvIG9uIE9TRi8xLiBTcG90dGVkIGJ5CiAgIFJvYmVydCBVcmJhbiA8dXJiYW5Ac3BpZWx3aWVzZS5kZT4KIC0gKGRqbSkgQnVnICMyMDYgLSBibGlicGF0aCBpc24ndCBhbHdheXMgbmVlZGVkIGZvciBBSVggbGQsIGF2b2lkIAogICBzaXplb2YobG9uZyBsb25nIGludCkgPT0gNCBicmVha2FnZS4gUGF0Y2ggZnJvbSBNYXR0aGV3IENsYXJrZQogICA8TWF0dGhld19DbGFya2VAbWluZGxpbmsuYmMuY2E+CiAtIChkam0pIE1ha2UgcHJpdnNlcCB3b3JrIHdpdGggUEFNIChzdGlsbCBleHBlcmltZW50YWwpCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIwIDA5OjAyOjAzCiAgICAgW3NlcnZjb25mLmNdCiAgICAgTm8sIGFmcyByZXF1aXJlcyBleHBsaWNpdCBlbmFibGluZwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMCAwOToxNDo1OAogICAgIFtidWZhdXguYyBidWZhdXguaF0KICAgICBhZGQgYnVmZmVyX3tnZXQscHV0fV9zaG9ydAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMCAwOToxNzoxOQogICAgIFtyYWRpeC5jXQogICAgIHJld3JpdGUgdXNpbmcgdGhlIGJ1ZmZlcl8qIEFQSSwgZml4ZXMgb3ZlcmZsb3c7IG9rIGRlcmFhZHRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMSAxNjoxOToyNwogICAgIFtzc2hkLjggc3NoZF9jb25maWddCiAgICAgZG9jdW1lbnQgZGVmYXVsdCBBRlNUb2tlblBhc3Npbmcgbm87IG9rIGRlcmFhZHRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMSAxNjoyNTowNgogICAgIFtzc2hjb25uZWN0MS5jXQogICAgIHNwZWxsaW5nIGluIGVycm9yIG1lc3NhZ2U7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjIgMDY6MTU6NDcKICAgICBbcmFkaXguY10KICAgICBmaXggY2hlY2sgZm9yIG92ZXJmbG93CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIyIDE2OjE2OjUzCiAgICAgW3NlcnZjb25mLmMgc3NoZC44IHNzaGRfY29uZmlnXQogICAgIGRvIG5vdCBhdXRvLWVuYWJsZSBLZXJiZXJvc0F1dGhlbnRpY2F0aW9uOyBvayBkam1ALCBwcm92b3NALCBkZXJhYWR0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMiAyMTowNDo1MgogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBjbGllbnRsb29wLmggc3NoLmNdCiAgICAgcmVxdWVzdCByZXBseSAoc3VjY2Vzcy9mYWlsdXJlKSBmb3IgLVIgc3R5bGUgZndkIGluIHByb3RvY29sIHYyLAogICAgIGRlcGVuZHMgb24gb3JkZXJlZCByZXBsaWVzLgogICAgIGZpeGVzIGh0dHA6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OyBvayBwcm92b3NACgoyMDAyMDQyMQogLSAodGltKSBbZW50cm9weS5jLl0gUG9ydGFiaWxpdHkgZml4IGZvciBTQ08gVW5peCAzLjJ2NC54IChTQ08gT1NSIDMuMCkuCiAgIGVudHJvcHkuYyBuZWVkcyBzZXRldWlkKGdldHVpZCgpKSBmb3IgdGhlIHNldHVpZChvcmlnaW5hbF91aWQpIHRvIAogICBzdWNjZWVkLiBQYXRjaCBieSBnZXJ0QGdyZWVuaWUubXVjLmRlLiBUaGlzIGZpeGVzIG9uZSBwYXJ0IG9mIEJ1ZyAyMDgKCjIwMDIwNDE4CiAtIChkam0pIEF2b2lkIFNJR0NITEQgYnJlYWthZ2Ugd2hlbiBydW4gZnJvbSByc3luYy4gRml4IGZyb20gCiAgIFN0dXJsZSBTdW5kZSA8c3R1cmxlLnN1bmRlQHVzaXQudWlvLm5vPgoKMjAwMjA0MTcKIC0gKGRqbSkgVGVsbCB1c2VycyB0byBjb25maWd1cmUgL2Rldi9yYW5kb20gc3VwcG9ydCBpbnRvIE9wZW5TU0wgaW4gCiAgIElOU1RBTEwKIC0gKGRqbSkgRml4IC5ObSBpbiBtZG9jMm1hbi5wbCBmcm9tIHBzcGVuY2VyQGZpZWxkcy51dG9yb250by5jYQogLSAodGltKSBbY29uZmlndXJlLmFjXSBJc3N1ZSB3YXJuaW5nIG9uIC0td2l0aC1kZWZhdWx0LXBhdGg9L3NvbWVfcGF0aAogICBpZiBMT0dJTl9DQVAgaXMgZW5hYmxlZC4gUmVwb3J0ICYgdGVzdGluZyBieSBUdWMgPHR1Y0B0dHNnLmNvbT4KCjIwMDIwNDE1CiAtIChkam0pIFVuYnJlYWsgIm1ha2UgaW5zdGFsbCIuIEZpeCBmcm9tIERhcnJlbiBUdWNrZXIgCiAgIDxkdHVja2VyQHppcC5jb20uYXU+CiAtIChzdGV2ZXNrKSBic2QtY3lnd2luX3V0aWwuW2NoXSBCU0QgbGljZW5zZSBmcm9tIENvcmlubmEgVmluc2NoZW4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gYWRkIHRlc3RzIGZvciByZWN2bXNnIGFuZCBzZW5kbXNnLgogICBbbW9uaXRvcl9mZHBhc3MuY10gYWRkIGNoZWNrcyBmb3IgSEFWRV9TRU5ETVNHIGFuZCBIQVZFX1JFQ1ZNU0cgZm9yCiAgIHN5c3RlbXMgdGhhdCBIQVZFX0FDQ1JJR0hUU19JTl9NU0dIRFIgYnV0IG5vIHJlY3Ztc2cgb3Igc2VuZG1zZy4KCjIwMDIwNDE0CiAtIChkam0pIHNzaC1yYW5kLWhlbHBlciBpbXByb3ZlbWVudHMKICAgLSBBZGQgY29tbWFuZGxpbmUgZGVidWdnaW5nIG9wdGlvbnMKICAgLSBEb24ndCB3cml0ZSBiaW5hcnkgZGF0YSBpZiBzdGRvdXQgaXMgYSB0dHkgKHVzZSBoZXggaW5zdGVhZCkKICAgLSBHaXZlIGl0IGEgbWFucGFnZQogLSAoZGptKSBSYW5kb20gbnVtYmVyIGNvbGxlY3Rpb24gZG9jIGZpeGVzIGZyb20gQmVuCgoyMDAyMDQxMwogLSAoZGptKSBBZGQgS3JiViBzdXBwb3J0IHBhdGNoIGZyb20gU2ltb24gV2lsa2luc29uIDxzaW1vbkBzeHcub3JnLnVrPgoKMjAwMjA0MTIKIC0gKHN0ZXZlc2spIFthdXRoLXNpYS5bY2hdXSBhZGQgQlNEIGxpY2Vuc2UgZnJvbSBDaHJpcyBBZGFtcwogLSAodGltKSBbY29uZmlndXJlLmFjXSBhZGQgPHN5cy90eXBlcy5oPiB0byBtc2doZHIgdGVzdHMuIENoYW5nZSAtTAogICB0byAtaCBvbiB0ZXN0aW5nIGZvciAvYmluIGJlaW5nIHN5bWJvbGljIGxpbmsKIC0gKGJhbCkgTWlzdGFrZW4gaW4gQ3lnd2luIHNjcmlwdHMgZm9yIHNzaCBzdGFydGluZy4gIFBhdGNoIGJ5CiAgIENvcmlubmEgVmluc2NoZW4gPHZpbnNjaGVuQHJlZGhhdC5jb20+IAogLSAoYmFsKSBkaXNhYmxlIHByaXZzZXAgaWYgbm8gTUFQX0FOT04uICBXZSBjYW4gcmUtZW5hYmxlIGl0CiAgIGFmdGVyIHRoZSByZWxlYXNlIHdoZW4gd2UgY2FuIGRvIG1vcmUgdGVzdGluZy4KCjIwMDIwNDExCiAtIChzdGV2ZXNrKSBbYXV0aC1zaWEuY10gY2xlYW51cAogLSAodGltKSBbYWNjb25maWcuaCBkZWZpbmVzLmggaW5jbHVkZXMuaF0gcHV0IGluY2x1ZGVzIGluIGluY2x1ZGVzLmggYW5kCiAgIGRlZmluZXMgaW4gZGVmaW5lcy5oIFtyaWpuZGFlbC5jIG9wZW5ic2QtY29tcGF0L2Zha2Utc29ja2V0LmgKICAgb3BlbmJzZC1jb21wYXQvaW5ldF9hdG9uLmNdIGluY2x1ZGUgImluY2x1ZGVzLmgiIGluc3RlYWQgb2YgImNvbmZpZy5oIgogICBvayBzdGV2ZXNrQAoKMjAwMjA0MTAKIC0gKHN0ZXZlc2spIFtjb25maWd1cmUuYWMgbW9uaXRvci5jXSBIQVZFX1NPQ0tFVFBBSVIKIC0gKHN0ZXZlc2spIFthdXRoLXNpYS5jXSBjb21waWxlIGZpeCBDaHJpcyBBZGFtcyA8Y21hZGFtc0BoaXdhYXkubmV0PgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzEwIDA4OjIxOjQ3CiAgICAgW2F1dGgxLmMgY29tcGF0LmMgY29tcGF0LmhdCiAgICAgc3RyaXAgJ0AnIGZyb20gdXNlcm5hbWUgb25seSBmb3IgS2VyYlYgYW5kIGtub3duIGJyb2tlbiBjbGllbnRzLCAKICAgICBidWcgIzIwNAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8xMCAwODo1NjowMQogICAgIFt2ZXJzaW9uLmhdCiAgICAgT3BlblNTSF8zLjIKIC0gQWRkZWQgcDEgdG8gaWRlbmlmeSBQb3J0YWJsZSByZWxlYXNlIHZlcnNpb24uCgoyMDAyMDQwOAogLSAoYmFsKSBNaW5vciBPcGVuU0MgdXBkYXRlcy4gIEZpeCB1cCBoZWFkZXIgbG9jYXRpb25zIGFuZCB1cGRhdGUKICAgUkVBRE1FLnNtYXJ0Y2FyZCBwcm92aWRlZCBieSBKdWhhIFlyavZs5CA8anlyam9sYUBjYy5odXQuZmk+CgoyMDAyMDQwNwogLSAoc3RldmVzaykgSEFWRV9DT05UUk9MX0lOX01TR0hEUjsgbm90IHVzZWQgcmlnaHQgbm93LgogICBGdXR1cmU6IHdlIG1heSB3YW50IHRvIHRlc3QgaWYgZmQgcGFzc2luZyB3b3JrcyBjb3JyZWN0bHkuCiAtIChzdGV2ZXNrKSBbbW9uaXRvcl9mZHBhc3MuY10gZmF0YWwoKSBmb3IgVXNlUHJpdmlsZWdlU2VwYXJhdGlvbj15ZXMKICAgYW5kIG5vIGZkIHBhc3Npbmcgc3VwcG9ydC4KIC0gKHN0ZXZlc2spIEhBVkVfTU1BUCBhbmQgSEFWRV9TWVNfTU1BTl9IIGFuZCB1c2UgdGhlbSBpbgogICBtb25pdG9yX21tLmMKIC0gKHN0ZXZlc2spIHJlbW92ZSBjb25maWd1cmUgc3VwcG9ydCBmb3IgcG9sbC5oOyBpdCB3YXMgcmVtb3ZlZAogICBmcm9tIHNzaGQuYyBhIGxvbmcgdGltZSBhZ28uCiAtIChzdGV2ZXNrKSAtLXdpdGgtcHJpdnNlcC11c2VyOyBkZWZhdWx0IHNzaGQKIC0gKHN0ZXZlc2spIHdyYXAgbXVubWFwKCkgd2l0aCBIQVZFX01NQVAgYWxzby4KCjIwMDIwNDA2CiAtIChkam0pIFR5cG8gaW4gU3VzZSBTUEVDIGZpbGUuIEZpeCBmcm9tIENhcnN0ZW4gR3JvaG1hbm4gCiAgIDxjYXJzdGVuLmdyb2htYW5uQGRyLWJhbGRld2VnLmRlPgogLSAoYmFsKSBBZGRlZCBNQVBfRkFJTEVEIHRvIGFsbG93IEFJWCBhbmQgVHJ1c3RlZCBIUCB0byBjb21waWxlLgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzA2IDAwOjMwOjA4CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgRml4IG9jY2FzaW9uYWwgY29ycnVwdGlvbiBvbiB1cGxvYWQgZHVlIHRvIGJhZCByZXVzZSBvZiByZXF1ZXN0IAogICAgIGlkLCBzcG90dGVkIGJ5IGNob21iaWVyQG1hYy5jb207IG9rIG1hcmt1c0AKICAgLSBtb3VyaW5nQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzA2IDE4OjI0OjA5CiAgICAgW3NjcC5jXQogICAgIEZpeGVzIHBvdGVudGFsIGRvdWJsZSAvLyB3aXRoaW4gcGF0aC4KICAgICBodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2CiAtIChiYWwpIFNsaWdodCB1cGRhdGUgdG8gT3BlblNDIHN1cHBvcnQuICBCZXR0ZXIgdmVyc2lvbiBjaGVja2luZy4gcGF0Y2gKICAgYnkgSnVoYSBZcmr2bOQgPGp5cmpvbGFAY2MuaHV0LmZpPiAKIC0gKGJhbCkgUmV2ZXJlZCBvdXQgb2YgcnVudGltZSBJUklYIGRldGVjdGlvbiBvZiBqb2JsaW1pdHMuICBDb2RlIGlzCiAgIGluY29tcGxldGUuCiAtIChiYWwpIFF1aWV0IGRvd24gY29uZmlndXJlLmFjIGlmIC9iaW4vdGVzdCBkb2VzIG5vdCBleGlzdC4KIC0gKGJhbCkgV2Ugbm8gbG9uZ2VyIHVzZSBhdGV4aXQoKS94YXRleGl0KCkvb25fZXhpdCgpCgoyMDAyMDQwNQogLSAoYmFsKSBQYXRjaCBmb3IgT3BlblNDIFNtYXJ0Q2FyZCBsaWJyYXJ5OyBvayBtYXJrdXNAOyBwYXRjaCBieQogICBKdWhhIFlyavZs5CA8anlyam9sYUBjYy5odXQuZmk+CiAtIChiYWwpIE1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlIHRvIHJlZmxlY3Qgc21hcnRjYXJkIGxpYnJhcnkKICAgc3VwcG9ydCBjaGFuZ2VzLgogLSAoYmFsKSBUb28gbWFueSA8c3lzL3F1ZXVlLmg+IGlzc3Vlcy4gIFJlbW92ZSBhbGwgd29ya2Fyb3VuZHMgYW5kCiAgIHVzaW5nIGludGVybmFsIHZlcnNpb24gb25seS4KIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDUgMjA6NTY6MjEKICAgICBbc3NoZC44XQogICAgIGNsYXJpZnkgc3NocmMgc29tZSBhbmQgaGFuZGxlIFgxMVVzZUxvY2FsaG9zdD15ZXM7IG9rIG1hcmt1c0AKCjIwMDIwNDA0CiAtIChzdGV2ZXNrKSBbYXV0aC1wYW0uYyBhdXRoLXBhbS5oIGF1dGgtcGFzc3dkLmMgYXV0aC1zaWEuYyBhdXRoLXNpYS5oCiAgICBhdXRoMS5jIGF1dGgyLmNdIFBBTSwgT1NGX1NJQSBwYXNzd29yZCBhdXRoIGNsZWFudXA7IGZyb20gZGptLgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzAzIDA5OjI2OjExCiAgICAgW2NpcGhlci5jIG15cHJvcG9zYWwuaF0KICAgICByZS1hZGQgcmlqbmRhZWwtY2JjQGx5c2F0b3IubGl1LnNlIGZvciBNYWNTU0g7IGFzaEBsYWIucG9jLm5ldAoKMjAwMjA0MDIKIC0gKGJhbCkgSGFuZCBTeW5jIG9mIHNjcC5jIChyZXZlcnRlZCB0byB1cHN0cmVhbSBjb2RlKQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMzAgMTc6NDU6NDYKICAgICBbc2NwLmNdCiAgICAgc3RyZXRjaCBiYW5uZXJzCiAtIChiYWwpIENWUyBJRCBzeW5jIG9mIHVpZHN3YXAuYwogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jIChub3cgZm9yIHRoZSByZWFsIHN5bmMpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI3IDIyOjIxOjQ1CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICB0cnkgdG8gaW1wb3J0IGtleXMgd2l0aCBleHRyYSB0cmFpbGluZyA9PT0gKHNlZW4gd2l0aCBzc2guY29tIDwgCiAgICAgMi4wLjEyKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yOCAxNTozNDo1MQogICAgIFtzZXNzaW9uLmNdCiAgICAgZG8gbm90IGNhbGwgcmVjb3JkX2xvZ2luIHR3aWNlIChmb3IgdXNlX3ByaXZzZXApCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI5IDE4OjU5OjMyCiAgICAgW3Nlc3Npb24uYyBzZXNzaW9uLmhdCiAgICAgcmV0cmlldmUgbGFzdCBsb2dpbiB0aW1lIGJlZm9yZSB0aGUgcHR5IGlzIGFsbG9jYXRlZCwgc3RvcmUgcGVyIAogICAgIHNlc3Npb24KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI5IDE5OjE2OjIyCiAgICAgW3NzaGQuOF0KICAgICBSU0Ega2V5IG1vZHVsdXMgc2l6ZSBtaW5pbXVtIDc2ODsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjkgMTk6MTg6MzMKICAgICBbYXV0aC1yc2EuYyBzc2gtcnNhLmMgc3NoLmhdCiAgICAgbWFrZSBSU0EgbW9kdWx1cyBtaW5pbXVtICNkZWZpbmU7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMzAgMTg6NTE6MTUKICAgICBbbW9uaXRvci5jIHNlcnZlcmxvb3AuYyBzZnRwLWludC5jIHNmdHAuYyBzc2hkLmNdCiAgICAgY2hlY2sgd2FpdHBpZCBmb3IgRUlOVFI7IGJhc2VkIG9uIHBhdGNoIGZyb20gcGV0ZXJAaWZtLmxpdS5zZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMSAyMjowMjoxNgogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIDIwNDgwIGlzIGFuIHVwcGVyIGxpbWl0IGZvciBvbGRlciBzZXJ2ZXIKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDEgMjI6MDc6MTcKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBmYWxsYmFjayB0byBzdGF0IGlmIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGxzdGF0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzAyIDExOjQ5OjM5CiAgICAgW3NzaC1hZ2VudC5jXQogICAgIGNoZWNrICRTSEVMTCBmb3IgLWsgYW5kIC1kLCB0b287CiAgICAgaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDIgMTc6Mzc6NDgKICAgICBbc2Z0cC5jXQogICAgIGFsd2F5cyBjYWxsIGxvZ19pbml0KCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDIgMjA6MTE6MzgKICAgICBbc3NoLXJzYS5jXQogICAgIGlnbm9yZSBTU0hfQlVHX1NJR0JMT0IgZm9yIHNzaC1yc2E7ICMxODcKIC0gKGJhbCkgbWlzcGVsbGluZyBpbiB1aWRzd2FwLmMgKHBvcnRhYmxlIG9ubHkpCgoyMDAyMDQwMQogLSAoc3RldmVzaykgW21vbml0b3IuY10gUEFNIHNob3VsZCB3b3JrIGFnYWluOyB3aWxsICpub3QqIHdvcmsgd2l0aAogICBVc2VQcml2aWxlZ2VTZXBhcmF0aW9uPXllcy4KIC0gKHN0ZXZlc2spIFthdXRoMS5jXSBmaXggcGFzc3dvcmQgYXV0aCBmb3IgcHJvdG9jb2wgMSB3aGVuCiAgICFVU0VfUEFNICYmICFIQVZFX09TRl9TSUE7IG1lcmdlIGlzc3VlLgoKMjAwMjAzMzEKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gdXNlIC9iaW4vdGVzdCAtTCB0byB3b3JrIGFyb3VuZCBicm9rZW4gYnVpbHRpbiBvbgogICBTb2xhcmlzIDgKIC0gKHRpbSkgW3NzaGNvbm5lY3QyLmNdIGNoYW5nZSB1aW50MzJfdCB0byB1X2ludDMyX3QKCjIwMDIwMzMwCiAtIChzdGV2ZXNrKSBbY29uZmlndXJlLmFjXSByZW1vdmUgaGVhZGVyIGNoZWNrIGZvciBzeXMvdHRjb21wYXQuaAogICBidWcgMTY3CgoyMDAyMDMyNwogLSAoYmFsKSAncHcnIHNob3VsZCBiZSAnYXV0aGN0eHQtPnB3JyBpbiBhdXRoMS5jIHNwb3R0ZWQgYnkgCiAgIGtlbnRAbHlzYXRvci5saXUuc2UKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAxMTozNDo0OQogICAgIFtzc2guMSBzc2hkLjhdCiAgICAgdXBkYXRlIHRvIHJlY2VudCBkcmFmdHMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMTE6Mzc6MDUKICAgICBbc3NoLmNdCiAgICAgdXBkYXRlIENvcHlyaWdodAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAxNToyMzo0MAogICAgIFtidWZhdXguY10KICAgICBkbyBub3QgdGFsayBhYm91dCBwYWNrZXRzIGluIGJ1ZmF1eAogICAtIHJlZXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMTg6NDY6NTkKICAgICBbc2NhcmQuY10KICAgICB0cnlfQVVUMCBpbiByZWFkX3B1YmtleSB0b28sIGZvciB0aG9zZSBwYXJhbm9pZCBmZXcgd2hvIHdhbnQgdG8gCiAgICAgYWNsICdzaCcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMjI6NTA6MzkKICAgICBbY2hhbm5lbHMuaF0KICAgICBDSEFOTkVMX0VGRF9PVVRQVVRfQUNUSVZFIGlzIGZhbHNlIGZvciBDSEFOX0NMT1NFX1JDVkQsIHRvbwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAyMzoxMzowMwogICAgIFthdXRoLXJzYS5jXQogICAgIGRpc2FsbG93IFJTQSBrZXlzIDwgNzY4IGZvciBwcm90b2NvbCAxLCB0b28gKHJob3N0cy1yc2EgYW5kIHJzYSBhdXRoKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAyMzoxNDo1MQogICAgIFtrZXguY10KICAgICBnZW5lcmF0ZSBhIG5ldyBjb29raWUgZm9yIGVhY2ggU1NIMl9NU0dfS0VYSU5JVCBtZXNzYWdlIHdlIHNlbmQgb3V0CiAgIC0gbW91cmluZ0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNyAxMTo0NTo0MgogICAgIFttb25pdG9yLmNdCiAgICAgbW9uaXRvcl9hbGxvd2VkX2tleSgpIHJldHVybnMgaW50IGluc3RlYWQgb2YgcG9pbnRlci4gIG9rIG1hcmt1c0AKICAKMjAwMjAzMjUKIC0gKHN0ZXZlc2spIGltcG9ydCBPcGVuQlNEIDxzeXMvdHJlZS5oPiBhcyAib3BlbmJzZC1jb21wYXQvdHJlZS5oIgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMyAyMDo1NzoyNgogICAgIFtzc2hkLmNdCiAgICAgc2V0cHJvY3RpdGxlKCkgYWZ0ZXIgcHJlYXV0aCBjaGlsZDsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxNjowMDoyNwogICAgIFtzZXJ2ZXJsb29wLmNdCiAgICAgcmVtb3ZlIHVudXNlZCBkZWJ1ZwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxNjowMToxMwogICAgIFtwYWNrZXQuY10KICAgICBkZWJ1Zy0+ZGVidWczIGZvciBleHRyYSBwYWRkaW5nCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxNzoyNzowMwogICAgIFtrZXhnZXguY10KICAgICB0eXBvOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxNzo1MzoxNgogICAgIFttb25pdG9yX2ZkcGFzcy5jXQogICAgIG1pbm9yIGNsZWFudXAgYW5kIG1vcmUgZXJyb3IgY2hlY2tpbmc7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjQgMTg6MDU6MjkKICAgICBbc2NhcmQuY10KICAgICB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgQVVUMCBmb3Igc2NfcHJpdmF0ZV9lbmNyeXB0LCB0b28KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDIzOjIwOjAwCiAgICAgW21vbml0b3IuY10KICAgICByZW1vdmUgIlxuIiBmcm9tIGZhdGFsKCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMDk6MjE6MTMKICAgICBbYXV0aC1yc2EuY10KICAgICByZXR1cm4gMCAobm90IE5VTEwpOyB0b21oQHBvLmNybC5nby5qcAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAwOToyNTowNgogICAgIFthdXRoLXJoLXJzYS5jXQogICAgIHJtIGJvZ3VzIGNvbW1lbnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMTc6MzQ6MjcKICAgICBbc2NhcmQuYyBzY2FyZC5oIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uYyBzc2guY10KICAgICBjaGFuZ2Ugc2NfZ2V0X2tleSB0byBzY19nZXRfa2V5cyBhbmQgaGlkZSBzbWFydGNhcmQgZGV0YWlscyBpbiBzY2FyZC5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAyMDoxMjoxMAogICAgIFttb25pdG9yX21tLmMgbW9uaXRvcl93cmFwLmNdCiAgICAgc3NpemVfdCBhcmdzIHVzZSAiJWxkIiBhbmQgY2FzdCB0byAobG9uZykKICAgICBzaXplX3QgYXJncyB1c2UgIiVsdSIgYW5kIGNhc3QgdG8gKHVfbG9uZykKICAgICBvayBtYXJrdXNAIGFuZCB0aGFua3MgbWlsbGVydEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMjE6MDQ6MDIKICAgICBbc3NoLmNdCiAgICAgc2ltcGxpZnkgbnVtX2lkZW50aXR5X2ZpbGVzIGhhbmRsaW5nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI1IDIxOjEzOjUxCiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjb21wYXQuYyBjb21wYXQuaCBuY2hhbi5jXQogICAgIGRvbid0IHNlbmQgc3RkZXJyIGRhdGEgYWZ0ZXIgRU9GLCBhY2NlcHQgdGhpcyBmcm9tIG9sZGVyIGtub3duIAogICAgIChicm9rZW4pIHNzaGQgc2VydmVycyBvbmx5LCBmaXhlcwogICAgIGh0dHA6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAwMzoyNDowMQogICAgIFttb25pdG9yLmggbW9uaXRvcl9mZHBhc3MuaCBtb25pdG9yX21tLmggbW9uaXRvcl93cmFwLmhdCiAgICAgJE9wZW5CU0QkCgoyMDAyMDMyNAogLSAoc3RldmVzaykgW3Nlc3Npb24uY10gZGlzYWJsZSBMT0dJTl9ORUVEU19URVJNIHVudGlsIHdlIGFyZSBzdXJlCiAgIGl0IGNhbiBiZSByZW1vdmVkLiBvbmx5IHVzZWQgb24gc29sYXJpcy4gd2lsbCBubyBsb25nZXIgY29tcGlsZSB3aXRoCiAgIHByaXZzZXAgc2h1ZmZsaW5nLgoKMjAwMjAzMjIKIC0gKHN0ZXZlc2spIEhBVkVfQUNDUklHSFRTX0lOX01TR0hEUiBjb25maWd1cmUgc3VwcG9ydAogLSAoc3RldmVzaykgW21vbml0b3IuYyBtb25pdG9yX3dyYXAuY10gI2lmZGVmIEhBVkVfUFdfQ0xBU1NfSU5fUEFTU1dECiAtIChzdGV2ZXNrKSBjb25maWd1cmUgYW5kIGNwcCBfX0ZVTkNUSU9OX18gZ3ltbmFzdGljcyB0byBoYW5kbGUgbmllbHNpc21zCiAtIChzdGV2ZXNrKSBbbW9uaXRvcl9mZHBhc3MuY10gc3VwcG9ydCBmb3IgYWNjZXNzIHJpZ2h0cyBzdHlsZSBmaWxlCiAgIGRlc2NyaXB0b3IgcGFzc2luZwogLSAoc3RldmVzaykgW2F1dGgyLmNdIG1lcmdlIGNsZWFudXAvc3luYwogLSAoc3RldmVzaykgW2RlZmluZXMuaF0gaHAtdXggMTEgaGFzIGFuY2lsbGFyeSBkYXRhIHN0eWxlIGZkIHBhc3NpbmcsIGJ1dAogICBpcyBtaXNzaW5nIENNU0dfTEVOKCkgYW5kIENNU0dfU1BBQ0UoKSBtYWNyb3MuCiAtIChzdGV2ZXNrKSBbZGVmaW5lcy5oXSAjZGVmaW5lIE1BUF9BTk9OIE1BUF9BTk9OWU1PVVMgZm9yIEhQLVVYOyBvdGhlcgogICBwbGF0Zm9ybXMgbWF5IG5lZWQgdGhpcy0tSSdtIG5vdCBzdXJlLiAgbW1hcCgpIGlzc3VlcyB3aWxsIG5lZWQgdG8gYmUKICAgYWRkcmVzc2VkIGZ1cnRoZXIuCiAtICh0aW0pIFtjaXBoZXIuY10gZml4IHByb2JsZW0gd2l0aCBPcGVuQlNEIHN5bmMKIC0gKHN0ZXZlc2spIFtMSUNFTkNFXSBPcGVuQlNEIHN5bmMKCjIwMDIwMzIxCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMDggMDY6MTA6MTYKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBwcmludGYgdHlwZSBtaXNtYXRjaAogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xMSAwMzoxODo0OQogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIGNvcnJlY3QgdHlwZSBtaXNtYXRjaGVzICh1X2ludDY0X3QgIT0gdW5zaWduZWQgbG9uZyBsb25nKQogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xMSAwMzoxOTo1MwogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIGluZGVudAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNCAxNToyNDoyNwogICAgIFtzc2hjb25uZWN0MS5jXQogICAgIGRvbid0IHRydXN0IHNpemUgc2VudCBieSAocm9ndWUpIHNlcnZlcjsgbm90ZWQgYnkgCiAgICAgcy5lc3NlckBlLW1hdHRlcnMuZGUKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTQgMTY6Mzg6MjYKICAgICBbc3NoZC5jXQogICAgIHNwbGl0IG91dCBzc2gxIHNlc3Npb24ga2V5IGRlY3J5cHRpb247IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTQgMTY6NTY6MzMKICAgICBbYXV0aC1yaC1yc2EuYyBhdXRoLXJzYS5jIGF1dGguaF0KICAgICBzcGxpdCBhdXRoX3JzYSgpIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkgYW5kIHByaXZzZXA7IG9rIHByb3Zvc0AKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTUgMTE6MDA6MzgKICAgICBbYXV0aC5jXQogICAgIGZpeCBmaWxlIHR5cGUgY2hlY2tpbmcgKHVzZSBTX0lTUkVHKS4gIG9rIGJ5IG1hcmt1cwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNiAxMToyNDo1MwogICAgIFtjb21wcmVzcy5jXQogICAgIHNraXAgaW5mbGF0ZUVuZCBpZiBpbmZsYXRlIGZhaWxzOyBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE2IDE3OjIyOjA5CiAgICAgW2F1dGgtcmgtcnNhLmMgYXV0aC5oXQogICAgIHNwbGl0IGF1dGhfcmhvc3RzX3JzYSgpLCBvayBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNiAxNzo0MToyNQogICAgIFthdXRoLWtyYjUuY10KICAgICBCU0QgbGljZW5zZS4gIGZyb20gRGFuaWVsIEtvdXJpbCB2aWEgRHVnIFNvbmcuICBvayBtYXJrdXNACiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE3IDIwOjI1OjU2CiAgICAgW2F1dGguYyBhdXRoLmggYXV0aDEuYyBhdXRoMi5jXQogICAgIGdldHB3bmFtYWxsb3cgcmV0dXJucyBzdHJ1Y3QgcGFzc3dkICogb25seSBpZiB1c2VyIHZhbGlkOyAKICAgICBva2F5IG1hcmt1c0AKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMDE6MTI6MTQKICAgICBbYXV0aC5oIGF1dGgxLmMgYXV0aDIuYyBzc2hkLmNdCiAgICAgaGF2ZSB0aGUgYXV0aGVudGljYXRpb24gZnVuY3Rpb25zIHJldHVybiB0aGUgYXV0aGVudGljYXRpb24gY29udGV4dAogICAgIGFuZCB0aGVuIGRvX2F1dGhlbnRpY2F0ZWQ7IG9rYXkgbWlsbGVydEAKICAgLSBkdWdzb25nQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDAxOjMwOjEwCiAgICAgW2F1dGgta3JiNC5jXQogICAgIHNldCBjbGllbnQgdG8gTlVMTCBhZnRlciB4ZnJlZSgpLCBmcm9tIFJvbGYgQnJhdW4gCiAgICAgPHJicmF1bitzc2hAYW5kcmV3LmNtdS5lZHU+CiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDAzOjQxOjA4CiAgICAgW2F1dGguYyBzZXNzaW9uLmNdCiAgICAgbW92ZSBhdXRoX2FwcHJvdmFsIGludG8gZ2V0cHduYW1hbGxvdyB3aXRoIGhlbHAgZnJvbSBtaWxsZXJ0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzoxMzoxNQogICAgIFtjaXBoZXIuYyBjaXBoZXIuaF0KICAgICBleHBvcnQvaW1wb3J0IGNpcGhlciBzdGF0ZXM7IG5lZWRlZCBieSBzc2gtcHJpdnNlcAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzoxNjozOAogICAgIFtwYWNrZXQuYyBwYWNrZXQuaF0KICAgICBleHBvcnQvaW1wb3J0IGNpcGhlciBzdGF0ZSwgaXYgYW5kIHNzaDIgc2VxbnI7IG5lZWRlZCBieSBzc2gtcHJpdnNlcAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzoyMzozMQogICAgIFtrZXkuYyBrZXkuaF0KICAgICBhZGQga2V5X2RlbW90ZSgpIGZvciBzc2gtcHJpdnNlcAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzoyNToyOQogICAgIFtidWZhdXguYyBidWZhdXguaF0KICAgICBidWZmZXJfc2tpcF9zdHJpbmcgYW5kIGV4dHJhIHNhbml0eSBjaGVja2luZzsgbmVlZGVkIGJ5IHNzaC1wcml2c2VwCiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjMxOjU0CiAgICAgW2NvbXByZXNzLmNdCiAgICAgZXhwb3J0IGNvbXByZXNzaW9uIHN0cmVhbXMgZm9yIHNzaC1wcml2c2VwCiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjUwOjMxCiAgICAgW2F1dGgtYnNkYXV0aC5jIGF1dGgtb3B0aW9ucy5jIGF1dGgtcmgtcnNhLmMgYXV0aC1yc2EuY10KICAgICBbYXV0aC1za2V5LmMgYXV0aC5oIGF1dGgxLmMgYXV0aDItY2hhbGwuYyBhdXRoMi5jIGtleC5jIGtleC5oIGtleGRoLmNdCiAgICAgW2tleGdleC5jIHNlcnZjb25mLmNdCiAgICAgW3Nlc3Npb24uaCBzZXJ2Y29uZi5oIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc3NoZC5jXQogICAgIGludGVncmF0ZSBwcml2aWxlZ2Ugc2VwYXJhdGVkIG9wZW5zc2g7IGl0cyB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQgCiAgICAgZm9yIG5vdy4gd29yayBkb25lIGJ5IG1lIGFuZCBtYXJrdXNACiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjUzOjA4CiAgICAgW3NzaGQuOF0KICAgICBjcmVkaXRzIGZvciBwcml2c2VwCiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjU5OjA5CiAgICAgW3NzaGQuOF0KICAgICBkb2N1bWVudCBVc2VQcml2aWxlZ2VTZXBhcmF0aW9uCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAyMzo1Mjo1MQogICAgIFtzZXJ2Y29uZi5jXQogICAgIFVucHJpdlVzZXIvVW5wcml2R3JvdXAgdXNhYmxlIG5vdy0tc3BlY2lmeSBudW1lcmljIHVzZXIvZ3JvdXA7IG9rCiAgICAgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMDM6MDM6NDMKICAgICBbcGF0aG5hbWVzLmggc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNzaGQuY10KICAgICBfUEFUSF9QUklWU0VQX0NIUk9PVF9ESVI7IG9rIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDA1OjIzOjA4CiAgICAgW3NzaGQuOF0KICAgICBCYW5uZXIgaGFzIG5vIGRlZmF1bHQuCiAgIC0gbXBlY2hAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMDY6MzI6NTYKICAgICBbc2Z0cC1pbnQuY10KICAgICB1c2UgeGZyZWUoKSBhZnRlciB4c3RyZHVwKCkuCgogICAgIG1hcmt1c0Agb2sKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMTA6MzU6MzkKICAgICBbYXV0aC1vcHRpb25zLmMgYXV0aC5oIHNlc3Npb24uYyBzZXNzaW9uLmggc3NoZC5jXQogICAgIGNsZWFuIHVwIHByb3RvdHlwZXMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMTA6NDk6MzUKICAgICBbYXV0aC1rcmI1LmMgYXV0aC1yaC1yc2EuYyBhdXRoLmMgY2lwaGVyLmMga2V5LmMgbWlzYy5oXQogICAgIFtwYWNrZXQuYyBzZXNzaW9uLmMgc2Z0cC1jbGllbnQuYyBzZnRwLWdsb2IuaCBzZnRwLmMgc3NoLWFkZC5jIHNzaC5jXQogICAgIFtzc2hjb25uZWN0Mi5jIHNzaGQuYyB0dHltb2Rlcy5jXQogICAgIEtORiB3aGl0ZXNwYWNlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDE0OjI3OjM5CiAgICAgW2F1dGguYyBhdXRoMS5jIGF1dGgyLmNdCiAgICAgbWFrZSBnZXRwd25hbWFsbG93KCkgYWxsd2F5cyBjYWxsIHB3Y29weSgpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDE1OjMxOjQ3CiAgICAgW2F1dGguY10KICAgICBjaGVjayBmb3IgTlVMTDsgZnJvbSBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMCAxOToxMjoyNQogICAgIFtzZXJ2Y29uZi5jIHNlcnZjb25mLmggc3NoLmggc3NoZC5jXQogICAgIGZvciB1bnByaXZpbGVnZWQgdXNlciwgZ3JvdXAgZG86CiAgICAgcHc9Z2V0cHduYW0oU1NIX1BSSVZTRVBfVVNFUik7IGRvX3NldHVzZXJjb250ZXh0KHB3KS4gIG9rIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIwIDIxOjA4OjA4CiAgICAgW3NzaGQuY10KICAgICBzdHJlcnJvcigpIG9uIGNoZGlyKCkgZmFpbDsgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxMDoyMToyMAogICAgIFtzc2gtYWRkLmNdCiAgICAgaWdub3JlIGVycm9ycyBmb3Igbm9uZXhpc3RpbmcgZGVmYXVsdCBrZXlzIGluIHNzaC1hZGQsCiAgICAgZml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxNToxNzoyNgogICAgIFtjbGllbnRsb29wLmMgc3NoLjFdCiAgICAgYWRkIGJ1aWx0LWluIGNvbW1hbmQgbGluZSBmb3IgYWRkaW5nIG5ldyBwb3J0IGZvcndhcmRpbmdzIG9uIHRoZSBmbHkuCiAgICAgYmFzZWQgb24gYSBwYXRjaCBmcm9tIGJyaWFuIHdlbGxpbmd0b24uIG9rIG1hcmt1c0AuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE2OjM4OjA2CiAgICAgW3NjYXJkLmNdCiAgICAgbWFrZSBjb21waWxlIHcvIG9wZW5zc2wgMC45LjcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTY6NTQ6NTMKICAgICBbc2NhcmQuYyBzY2FyZC5oIHNzaC1rZXlnZW4uY10KICAgICBtb3ZlIGtleSB1cGxvYWQgdG8gc2NhcmQuW2NoXQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxNjo1NzoxNQogICAgIFtzY2FyZC5jXQogICAgIHJlbW92ZSBjb25zdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxNjo1ODoxMwogICAgIFtjbGllbnRsb29wLmNdCiAgICAgcmVtb3ZlIHVudXNlZAogICAtIHJlZXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTg6MDg6MTUKICAgICBbc2NhcmQuY10KICAgICBJbiBzY19wdXRfa2V5KCksIHNjX3JlYWRlcl9pZCBzaG91bGQgYmUgaWQuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDIwOjUxOjEyCiAgICAgW3NzaGRfY29uZmlnXQogICAgIGFkZCBwcml2c2VwIChvZmYpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDIxOjIzOjM0CiAgICAgW3NzaGQuY10KICAgICBhZGQgcHJpdnNlcF9wcmVhdXRoKCkgYW5kIHJlbW92ZSAxIGdvdG87IG9rIHByb3Zvc0AKICAgLSByZWVzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDIxOjU0OjM0CiAgICAgW3NjYXJkLmMgc2NhcmQuaCBzc2gta2V5Z2VuLmNdCiAgICAgQWRkIFBJTi1wcm90ZWN0aW9uIGZvciBzZWNyZXQga2V5LgogICAtIHJlZXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjI6NDQ6MDUKICAgICBbYXV0aGZkLmMgYXV0aGZkLmggc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC5jXQogICAgIEFkZCBQSU4tcHJvdGVjdGlvbiBmb3Igc2VjcmV0IGtleS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjM6MDc6MzcKICAgICBbY2xpZW50bG9vcC5jXQogICAgIHJlbW92ZSB1bnVzZWQsIHN5bmMgdy8gY21kbGluZSBwYXRjaCBpbiBteSB0cmVlLgoKMjAwMjAzMTcKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQXNzdW1lIHBhdGggZ2l2ZW4gd2l0aCAtLXdpdGgtcGlkLWRpcj1QQVRIIGlzIAogICB3YW50ZWQsIHdhcm4gaWYgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQdXQgc3lzdGVtIGRpcmVjdG9yaWVzIGluIAogICBmcm9udCBvZiBQQVRIIGZvciBmaW5kaW5nIGVudG9ycHkgY29tbWFuZHMuCiAtICh0aW0pIFtjb250cmliL2FpeC9idWlsZGJmZi5zaCBjb250cmliL2FpeC9pbnZlbnRvcnkuc2hdIEFJWCBwYWNrYWdlCiAgIGJ1aWxkIGZpeGVzLiAgUGF0Y2ggYnkgRGFycmVuIFR1Y2tlciA8ZHR1Y2tlckB6aXAuY29tLmF1PgogICBbY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoXSBhZGQgbWlzc2luZyBkaXJzIHRvIFNZU1RFTV9ESVIuIEhhdmUKICAgcG9zdGluc3RhbGwgY2hlY2sgZm9yICRwaWRkaXIgYW5kIGFkZCBpZiBuZWNlc3NhcnkuCgoyMDAyMDMxMQogLSAodGltKSBbY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoLCBjb250cmliL3NvbGFyaXMvUkVBRE1FXSBVcGRhdGVkIHRvCiAgIGJ1aWxkIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IFNWUjQgc3R5bGUgcGFja2FnZSB0b29scy4gTm93IHJ1bnMKICAgZnJvbSBidWlsZCBkaXIuIFBhcnRzIGFyZSBiYXNlZCBvbiBwYXRjaGVzIGZyb20gQW50b25pbyBOYXZhcnJvLCBhbmQKICAgRGFycmVuIFR1Y2tlci4KCjIwMDIwMzA4CiAtIChkam0pIFJldmVydCBiaXRzIG9mIE1hcmt1cycgT3BlblNTTCBjb21wYXQgcGF0Y2ggd2hpY2ggd2FzIAogICBhY2NpZGVudGFsbHkgY29tbWl0dGVkLgogLSAoZGptKSBBZGQgTWFya3VzJyBwYXRjaCBmb3IgY29tcGF0IHdpaCBPcGVuU1NMIDwgMC45LjYuIAogICBLbm93biBpc3N1ZTogQmxvd2Zpc2ggZm9yIFNTSDEgZG9lcyBub3Qgd29yawogLSAoc3RldmVzaykgZW50cm9weS5jOiB0eXBvIGluIGRlYnVnIG1lc3NhZ2UKIC0gKGRqbSkgc3NoLWtleWdlbiAtaSBuZWVkcyBzZWVkZWQgUk5HOyByZXBvcnQgZnJvbSBtYXJrdXNACgokSWQ6IENoYW5nZUxvZyx2IDEuMjQyOCAyMDAyLzA5LzA0IDA2OjI0OjU1IGRqbSBFeHAgJAo=