MjAwMzExMjIKIC0gKGR0dWNrZXIpIFtjaGFubmVscy5jXSBNYWtlIEFJWCB3cml0ZSBsaW1pdCBjb2RlIGNsZWFyZXIuICBTdWdnZXN0ZWQgYnkgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFzc3dkLmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oXQogICBNb3ZlIEFJWCBzcGVjaWZpYyBwYXNzd29yZCBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIHBvcnQtYWl4LmMsIGNhbGwKICAgYXV0aGVudGljYXRlKCkgdW50aWwgcmVlbnRlciBmbGFnIGlzIGNsZWFyLgoKMjAwMzExMjEKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8yMCAxMTozOToyOAogICAgIFtwcm9ncmVzc21ldGVyLmNdCiAgICAgZml4IHJvdW5kaW5nIGVycm9yczsgZnJvbSBhbmRyZWFzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8yMSAxMTo1NzowMwogICAgIFtldmVyeXRoaW5nXQogICAgIHVuZXhwYW5kIGFuZCBkZWxldGUgd2hpdGVzcGFjZSBhdCBFT0w7IG9rIG1hcmt1c0AKICAgICAoZG9uZSBsb2NhbGx5IGFuZCBSQ1MgSURzIHN5bmNlZCkKCjIwMDMxMTE4CiAtIChkam0pIEZpeCBlYXJseSBleGl0IGZvciByb290IGF1dGggc3VjY2VzcyB3aGVuIFVzZVBBTT15ZXMgYW5kIAogICBQZXJtaXRSb290TG9naW49bm8KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBDb252ZXJ0IGNoYXV0aHRva19jb252IGludG8gYSBnZW5lcmljIHR0eV9jb252LAogICBhbmQgdXNlIGl0IGZvciBkb19wYW1fc2Vzc2lvbi4gIEZpeGVzIHByb2JsZW1zIGxpa2UgcGFtX21vdGQgbm90CiAgIGRpc3BsYXlpbmcgYW55dGhpbmcuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gT25seSB1c2UgcGFtX3B1dGVudiBpZiBvdXIgcGxhdGZvcm0gaGFzIGl0LiBvayBkam1ACiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzE4IDAwOjQwOjA1CiAgICAgW3NlcnZlcmxvb3AuY10KICAgICBDb3JyZWN0IGNoZWNrIGZvciBhdXRoY3R4dC0+dmFsaWQuICBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzE4IDEwOjUzOjA3CiAgICAgW21vbml0b3IuY10KICAgICB1bmJyZWFrIGZha2UgYXV0aGxvb3AgZm9yIG5vbi1leGlzdGVudCB1c2VycyAobXkgc2NyZXd1cCkuIFNwb3R0ZWQgYW5kCiAgICAgdGVzdGVkIGJ5IGR0dWNrZXJAOyBvayBtYXJrdXNACgoyMDAzMTExNwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzAzIDA5OjAzOjM3CiAgICAgW2F1dGgtY2hhbGwuY10KICAgICBtYWtlIHRoaXMgYSBsaXR0bGUgbW9yZSBpZGlvdC1wcm9vZjsgb2sgbWFya3VzQAogICAgIChpbmNsdWRlcyBwb3J0YWJsZS1zcGVjaWZpYyBjaGFuZ2VzKQogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzAzIDA5OjA5OjQxCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBtb3ZlIGNoYW5nZWQga2V5IHdhcm5pbmcgaW50byB3YXJuX2NoYW5nZWRfa2V5KCkuIG9rIG1hcmt1c0AKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8wMyAwOTozNzozMgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgZG8gbm90IGZyZWUgc3RhdGljIHR5cGUgcG9pbnRlciBpbiB3YXJuX2NoYW5nZWRfa2V5KCkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMDQgMDg6NTQ6MDkKICAgICBbYXV0aDEuYyBhdXRoMi5jIGF1dGgyLXB1YmtleS5jIGF1dGguaCBhdXRoLWtyYjUuYyBhdXRoLXBhc3N3ZC5jXQogICAgIFthdXRoLXJob3N0cy5jIGF1dGgtcmgtcnNhLmMgYXV0aC1yc2EuYyBtb25pdG9yLmMgc2VydmVybG9vcC5jXQogICAgIFtzZXNzaW9uLmNdCiAgICAgc3RhbmRhcmRpc2UgYXJndW1lbnRzIHRvIGF1dGggbWV0aG9kcyAtIHRoZXkgc2hvdWxkIGFsbCB0YWtlIGF1dGhjdHh0LgogICAgIGNoZWNrIGF1dGhjdHh0LT52YWxpZCByYXRoZXIgdGhlbiBwdyAhPSBOVUxMOyBvayBtYXJrdXNACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMDggMTY6MDI6NDAKICAgICBbYXV0aDEuY10KICAgICByZW1vdmUgdW51c2VkIHZhcmlhYmxlIChwdykuIG9rIGRqbUAKICAgICAoaWQgc3luYyBvbmx5IC0gc3RpbGwgdXNlZCBpbiBwb3J0YWJsZSkKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMDggMTk6MTc6MjkKICAgICBbc2Z0cC1pbnQuY10KICAgICB0eXBvcyBmcm9tIEpvbmF0aG9uIEdyYXk7CiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMTAgMTY6MjM6NDEKICAgICBbYnVmYXV4LmMgYnVmYXV4LmggY2lwaGVyLmMgY2lwaGVyLmggaG9zdGZpbGUuYyBob3N0ZmlsZS5oIGtleS5jXQogICAgIFtrZXkuaCBzZnRwLWNvbW1vbi5jIHNmdHAtY29tbW9uLmggc2Z0cC1zZXJ2ZXIuYyBzc2hjb25uZWN0LmMgc3NoZC5jXQogICAgIFtzc2gtZHNzLmMgc3NoLXJzYS5jIHV1ZW5jb2RlLmMgdXVlbmNvZGUuaF0KICAgICBjb25zdGlmeS4gb2sgbWFya3VzQCAmIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzEyIDEwOjEyOjE1CiAgICAgW3NjcC5jXQogICAgIFdoZW4gY2FsbGVkIHdpdGggLXEsIHBhc3MgLXEgdG8gc3NoOyBzdXBwcmVzc2VzIFNTSDIgYmFubmVyLiAgb2sgbWFya3VzQAogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzEyIDE2OjM5OjU4CiAgICAgW2Rucy5jIGRucy5oIHJlYWRjb25mLmMgc3NoX2NvbmZpZy41IHNzaGNvbm5lY3QuY10KICAgICB1cGRhdGUgU1NIRlAgdmFsaWRhdGlvbi4gb2sgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8xMiAyMDoxNDo1MQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgbWFrZSB2ZXJiIGFncmVlIHdpdGggc3ViamVjdCwgYW5kIGtpbGwgc29tZSB3aGl0ZXNwYWNlOwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8xNCAxMzoxOTowOQogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIGNsZWFudXAgYW5kIG1pbm9yIGZpeGVzIGZvciB0aGUgY2xpZW50IGNvZGU7IGZyb20gU2ltb24gV2lsa2luc29uCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzE3IDA5OjQ1OjM5CiAgICAgW21zZy5jIG1zZy5oIHNzaGNvbm5lY3QyLmMgc3NoLWtleXNpZ24uY10KICAgICByZXR1cm4gZXJyb3Igb24gbXNnIHNlbmQvcmVjZWl2ZSBmYWlsdXJlIChyYXRoZXIgdGhhbiBmYXRhbCk7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMTcgMTE6MDY6MDcKICAgICBbYXV0aDItZ3NzLmMgZ3NzLWdlbnIuYyBnc3Mtc2Vydi5jIG1vbml0b3IuYyBtb25pdG9yLmggbW9uaXRvcl93cmFwLmNdCiAgICAgW21vbml0b3Jfd3JhcC5oIHNzaGNvbm5lY3QyLmMgc3NoLWdzcy5oXQogICAgIHJlcGxhY2UgImdzc2FwaSIgd2l0aCAiZ3NzYXBpLXdpdGgtbWljIjsgZnJvbSBTaW1vbiBXaWxraW5zb247IAogICAgIHRlc3QgKyBvayBqYWtvYi4KIC0gKGRqbSkgQnVnICM2MzI6IERvbid0IGNhbGwgcGFtX2VuZCBpbmRpcmVjdGx5IGZyb20gd2l0aGluIGtiZC1pbnQKICAgY29udmVyc2F0aW9uIGZ1bmN0aW9uCiAtIChkam0pIEV4cG9ydCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBhdXRoZW50aWNhdGlvbiBzdWJwcm9jZXNzIHRvIAogICBwYXJlbnQuIFBhcnQgb2YgQnVnICM3MTcKCjIwMDMxMTE1CiAtIChkdHVja2VyKSBbcmVncmVzcy9hZ2VudC1wdHJhY2Uuc2hdIFRlc3QgZm9yIEdEQiBvdXRwdXQgZnJvbSBTb2xhcmlzIGFuZAogICBIUC1VWCwgc2tpcCB0ZXN0IG9uIEFJWC4KCjIwMDMxMTEzCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gQXBwZW5kIG5ld2xpbmVzIHRvIGxpbmVzIG91dHB1dCBieSB0aGUKICAgcGFtX2NoYXV0aHRva19jb252KCkuCiAtIChkdHVja2VyKSBbUkVBRE1FIHNzaC1ob3N0LWNvbmZpZyBzc2gtdXNlci1jb25maWcgTWFrZWZpbGVdIChBbGwKICAgY29udHJpYi9jeWd3aW4pLiAgTWFqb3IgdXBkYXRlIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KICAgLSBNYWtlZmlsZSBwcm92aWRlcyBhIGBjeWd3aW4tcG9zdGluc3RhbGwnIHRhcmdldCB0byBydW4gcmlnaHQgYWZ0ZXIKICAgICBgbWFrZSBpbnN0YWxsJy4KICAgLSBCZXR0ZXIgc3VwcG9ydCBmb3IgV2luZG93cyAyMDAzIFNlcnZlci4KICAgLSBUcnkgdG8gZ2V0IHBlcm1pc3Npb25zIGFzIGNvcnJlY3QgYXMgcG9zc2libGUuCiAgIC0gTmV3IGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIGFsbG93IGZ1bGwgYXV0b21hdGVkIGhvc3QgY29uZmlndXJhdGlvbi4KICAgLSBDcmVhdGUgY29uZmlncyBmcm9tIHNrZWxldG9ucyBpbiAvZXRjL2RlZmF1bHRzL2V0Yy4KICAgLSBVc2UgL2Jpbi9iYXNoLCBhbGxvd3MgcmVhZGluZyB1c2VyIGlucHV0IHdpdGggcmVhZGxpbmUgc3VwcG9ydC4KICAgLSBSZW1vdmUgcmVhbGx5IG9sZCBjb25maWdzIGZyb20gL3Vzci9sb2NhbC4KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBBZGQgbmV3bGluZSB0byBhY2N1bXVsYXRlZCBQQU1fVEVYVF9JTkZPIGFuZAogICBQQU1fRVJST1JfTVNHIG1lc3NhZ2VzLgoKMjAwMzExMDYKIC0gKGRqbSkgQ2xhcmlmeSBVc2VQQU0gY29uc2VxdWVuY2VzIGEgbGl0dGxlIG1vcmUKCjIwMDMxMTAzCiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBFbnN1cmUgZW50cmllcyBpbiAvZXRjL3NlcnZpY2VzCiAgIGFyZSBjcmVhdGVkIGNvcnJlY3RseSB3aXRoIENSTEYgbGluZSB0ZXJtaW5hdGlvbnMuICBQYXRjaCBmcm9tIHZpbnNjaGVuIGF0CiAgIHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzE1IDA5OjQ4OjQ1CiAgICAgW21vbml0b3Jfd3JhcC5jXQogICAgIGNoZWNrIHBtb25pdG9yICE9IE5VTEwKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMjEgMDk6NTA6MDYKICAgICBbYXV0aDItZ3NzLmNdCiAgICAgbWFrZSBzdXJlIHRoZSBkb2lkIGlzIGxhcmdlciB0aGFuIDIKICAgLSBhdnNtQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzI2IDE2OjU3OjQzCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgcmVuYW1lICdzdXBwb3J0ZWQnIHN0YXRpYyB2YXIgaW4gdXNlcmF1dGhfZ3NzYXBpKCkgdG8gJ2dzc19zdXBwb3J0ZWQnCiAgICAgdG8gYXZvaWQgc2hhZG93aW5nIHRoZSBnbG9iYWwgdmVyc2lvbi4gIG1hcmt1c0Agb2sKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMjggMDk6MDg6MDYKICAgICBbbWlzYy5jXQogICAgIGVycm9yLT5kZWJ1ZyBmb3IgZ2V0c29ja29wdCtUQ1BfTk9ERUxBWTsgc2V2ZXJhbCByZXF1ZXN0cwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8wMiAxMTowMTowMwogICAgIFthdXRoMi1nc3MuYyBjb21wYXQuYyBjb21wYXQuaCBzc2hjb25uZWN0Mi5jXQogICAgIHJlbW92ZSBzdXBwb3J0IGZvciBTU0hfQlVHX0dTU0FQSV9CRVI7IHNpbW9uQHN4dy5vcmcudWsKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2FnZW50LXB0cmFjZS5zaF0gVXNlIG51bWVyaWMgdWlkIGFuZCBnaWQuCgoyMDAzMTAyMQogLSAoZHR1Y2tlcikgW0lOU1RBTExdIFNvbWUgc3lzdGVtIGNyeXB0KCkgZnVuY3Rpb25zIHN1cHBvcnQgTUQ1IHBhc3N3b3JkcwogICBkaXJlY3RseS4gIE5vdGVkIGJ5IERhcnJlbi5Nb2ZmYXQgYXQgc3VuLmNvbS4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2FnZW50LXB0cmFjZS5zaF0gU2tpcCBhZ2VudC10ZXN0IHVubGVzcyBTVURPIGlzIHNldCwKICAgbWFrZSBhZ2VudCBzZXRnaWQgZHVyaW5nIHRlc3QuCgoyMDAzMTAxNwogLSAoZHR1Y2tlcikgW0lOU1RBTExdIE5vdGUgdGhhdCAtLXdpdGgtbWQ1IGlzIG5vdyByZXF1aXJlZCBvbiBwbGF0Zm9ybXMgd2l0aAogICBNRDUgcGFzc3dvcmRzIGV2ZW4gaWYgUEFNIHN1cHBvcnQgaXMgZW5hYmxlZC4gIEZyb20gc3RlZXYgYXQgZGV0cml0dXMubmV0LgoKMjAwMzEwMTUKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDggMDg6Mjc6MzYKICAgICBbc2NwLjEgc2NwLmMgc2Z0cC1zZXJ2ZXIuOCBzZnRwLjEgc2Z0cC5jIHNzaC4xIHNzaGQuOF0KICAgICBzY3AgYW5kIHNmdHA6IGFkZCBvcHRpb25zIGxpc3QgYW5kIHNvcnQgb3B0aW9ucy4gb3B0aW9ucyBsaXN0IHJlcXVlc3RlZAogICAgIGJ5IGRlcmFhZHRACiAgICAgc3NoZDogdXNlIHNhbWUgZm9ybWF0IGFzIHNzaAogICAgIHNzaDogcmVtb3ZlIHdyb25nIG9wdGlvbiBmcm9tIGxpc3QKICAgICBzZnRwLXNlcnZlcjogU3Vic3lzdGVtIGlzIGRvY3VtZW50ZWQgaW4gc3NoX2NvbmZpZyg1KSwgbm90IHNzaGQoOCkKICAgICBvayBkZXJhYWR0QCBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzA4IDE1OjIxOjI0CiAgICAgW3JlYWRjb25mLmMgc3NoX2NvbmZpZy41XQogICAgIGRlZmF1bHQgR1NTIEFQSSB0byBubyBpbiBjbGllbnQsIHRvbzsgb2sgamFrb2IsIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzExIDA4OjI0OjA4CiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzc2guMSBzc2guYyBzc2hfY29uZmlnLjVdCiAgICAgcmVtb3RlIHgxMSBjbGllbnRzIGFyZSBub3cgdW50cnVzdGVkIGJ5IGRlZmF1bHQsIHVzZXMgeGF1dGgoOCkgdG8gZ2VuZXJhdGUKICAgICB1bnRydXN0ZWQgY29va2llczsgRm9yd2FyZFgxMVRydXN0ZWQ9eWVzIHJlc3RvcmVzIG9sZCBiZWhhdmlvdXIuCiAgICAgb2sgZGVyYWFkdDsgZmVlZGJhY2sgYW5kIG9rIGRqbS9mcmllcwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8xMSAwODoyNjo0MwogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIHNlYXJjaCBrZXlzIGluIHJldmVyc2Ugb3JkZXI7IGZpeGVzICM2ODQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTEgMTE6MzY6MjMKICAgICBbbW9uaXRvcl93cmFwLmNdCiAgICAgcmV0dXJuIE5VTEwgZm9yIG1pc3NpbmcgYmFubmVyOyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzEyIDEzOjEyOjEzCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBub3RlIHRoYXQgRW5hYmxlU1NIS2V5U2lnbiBzaG91bGQgYmUgaW4gdGhlIG5vbi1ob3N0c3BlY2lmaWMgc2VjdGlvbjsKICAgICByZW1vdmUgdW5uZWNlc3NhcnkgLlBwOwogICAgIG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTMgMDg6MjI6MjUKICAgICBbc2NwLjEgc2Z0cC4xXQogICAgIGRvbid0IHJlZmVyIHRvIG9wdGlvbnMgcmVsYXRlZCB0byBmb3J3YXJkaW5nOyBvayBqbWNACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTQgMTk6NDI6MTAKICAgICBbZG5zLmMgZG5zLmggcmVhZGNvbmYuYyBzc2gta2V5Z2VuLmMgc3NoY29ubmVjdC5jXQogICAgIGluY2x1ZGUgU1NIRlAgbG9va3VwIGNvZGUgKG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQpLiBvayBtYXJrdXNACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTQgMTk6NDM6MjMKICAgICBbUkVBRE1FLmRuc10KICAgICB1cGRhdGUKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTQgMTk6NTQ6MzkKICAgICBbc2Vzc2lvbi5jIHNzaC1hZ2VudC5jXQogICAgIDEwWCBmb3IgbWtkdGVtcDsgZGptQAogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIGRucy5jIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmMKICAgb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuaF0gRE5TIGZpbmdlcnByaW50IHN1cHBvcnQgaXMgbm93IGFsd2F5cwogICBjb21waWxlZCBpbiBidXQgZGlzYWJsZWQgaW4gY29uZmlnLgogLSAoZHR1Y2tlcikgW2F1dGguY10gQ2hlY2sgZm9yIGRpc2FibGVkIHBhc3N3b3JkIGV4cGlyeSBvbiBIUC1VWCBUcnVzdGVkIE1vZGUuCiAtICh0aW0pIFtyZWdyZXNzL2Jhbm5lci5zaF0gcG9ydGFiaWxpdHkgZml4LgoKMjAwMzEwMDkKIC0gKGR0dWNrZXIpIFtzc2hkX2NvbmZpZy41XSBVc2VQQU0gZGVmYXVsdHMgdG8gIm5vIi4gIG9rIGRqbUAKCjIwMDMxMDA4CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8wNyAwMTo0NzoyNwogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIERvbid0IHVzZSBsb2dpdCBmb3IgYmFubmVyLCBzaW5jZSBpdCB0cnVuY2F0ZXMgdG8gTVNHQlVGU0laOyBieiAjNjY4ICYKICAgICAjNzA3LiAgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8wNyAwNzowNDoxNgogICAgIFtzZnRwLWludC5jXQogICAgIHNmdHAgcXVvdGluZyBmaXggZnJvbSBhZG1vcnRlbiBBVCB1bWljaC5lZHU7IG9rIG1hcmt1c0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzA3IDIxOjU4OjI4CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgc2V0IHB0ciB0byBOVUxMIGFmdGVyIGZyZWUKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzA3IDAxOjUyOjEzCiAgICAgW3JlZ3Jlc3MvTWFrZWZpbGUgcmVncmVzcy9iYW5uZXIuc2hdCiAgICAgVGVzdCBTU0gyIGJhbm5lci4gIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDcgMDc6MDQ6NTIKICAgICBbcmVncmVzcy9zZnRwLWNtZHMuc2hdCiAgICAgbW9yZSBzZnRwIHF1b3RpbmcgcmVncmVzcyB0ZXN0czsgb2sgbWFya3VzCgoyMDAzMTAwNwogLSAoZGptKSBEZWxldGUgYXV0b200dGUuY2FjaGUgYWZ0ZXIgYXV0b3JlY29uZgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmMgYXV0aC1wYW0uaCBzZXNzaW9uLmNdIE1ha2UgUEFNIHVzZSB0aGUgbmV3IHN0YXRpYwogICBjbGVhbnVwIGZ1bmN0aW9ucy4gIFdpdGggJiBvayBkam1ACiAtIChkdHVja2VyKSBbY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjXSBCdWcgIzcxNDogTm93IHRoYXQgVXNlUEFNIGlzIGEKICAgcnVuLXRpbWUgc3dpdGNoLCBhbHdheXMgYnVpbGQgLS13aXRoLW1kNS1wYXNzd29yZHMuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIG9wZW5ic2QtY29tcGF0L3N0cnRvdWwuY10KICAgQnVnICM2NzA6IGFkZCBzdHJ0b3VsKCkgdG8gb3BlbmJzZC1jb21wYXQgZm9yIHBsYXRmb3JtcyBsYWNraW5nIGl0LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM3MTU6IFNldCBCUk9LRU5fU0VUUkVVSUQgYW5kIEJST0tFTl9TRVRSRUdJRAogICBvbiBSZWxpYW50IFVuaXguICBQYXRjaCBmcm9tIFJvYmVydC5EYWhsZW0gYXQgc2llbWVucy5jb20uCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzcxMDogQ2hlY2sgZm9yIGRsc3ltKCkgaW4gbGliZGwgb24KICAgUmVsaWFudCBVbml4LiAgQmFzZWQgb24gcGF0Y2ggZnJvbSBSb2JlcnQuRGFobGVtIGF0IHNpZW1lbnMuY29tLgoKMjAwMzEwMDMKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDIgMTA6NDE6NTkKICAgICBbc3NoZC5jXQogICAgIHByaW50IG9wZW5zc2wgdmVyc2lvbiwgdG9vLCBzZXZlcmFsIHJlcXVlc3RzOyBvayBoZW5uaW5nL2RqbS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDIgMDg6MjY6NTMKICAgICBbc3NoLWdzcy5oXQogICAgIG1pc3NpbmcgJE9wZW5CU0Q6OyBkdHVja2VyCiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSBSZW1vdmUgb2Jzb2xldGUgLS13aXRoLWlwdjQtZGVmYXVsdAogICBvcHRpb24uCgoyMDAzMTAwMgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8yMyAyMDoxNzoxMQogICAgIFtNYWtlZmlsZS5pbiBhdXRoMS5jIGF1dGgyLmMgYXV0aC5jIGF1dGguaCBhdXRoLWtyYjUuYyBjYW5vaG9zdC5jCiAgICAgY2xlYW51cC5jIGNsaWVudGxvb3AuYyBmYXRhbC5jIGdzcy1zZXJ2LmMgbG9nLmMgbG9nLmggbW9uaXRvci5jIG1vbml0b3IuaAogICAgIG1vbml0b3Jfd3JhcC5jIG1vbml0b3Jfd3JhcC5oIHBhY2tldC5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc2Vzc2lvbi5oCiAgICAgc3NoLWFnZW50LmMgc3NoZC5jXQogICAgIHJlcGxhY2UgZmF0YWxfY2xlYW51cCgpIGFuZCBsaW5rZWQgbGlzdCBvZiBmYXRhbCBjYWxsYmFja3Mgd2l0aCBzdGF0aWMKICAgICBjbGVhbnVwX2V4aXQoKSBmdW5jdGlvbi4gIHJlLXJlZmluZSBjbGVhbnVwX2V4aXQoKSB3aGVyZSBhcHByb3ByaWF0ZSwKICAgICBhbGxvY2F0ZSBzc2hkJ3MgYXV0aGN0eHQgZWFyeSB0byBhbGxvdyBzaW1wbGVyIGNsZWFudXAgaW4gc3NoZC4KICAgICB0ZXN0ZWQgYnkgbWFueSwgb2sgZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMjMgMjA6MTg6NTIKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIGRvbid0IHByaW50IHRyYWlsaW5nIFwwOyBidWcgIzcwOTsgUm9iZXJ0LkRhaGxlbUBzaWVtZW5zLmNvbQogICAgIG9rIG1pbGxlcnQvZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMjMgMjA6NDE6MTEKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuY10KICAgICBtb3ZlIGNsaWVudCBvbmx5IGFnZW50IGNvZGUgdG8gY2xpZW50bG9vcC5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzI2IDA4OjE5OjI5CiAgICAgW3NzaGQuY10KICAgICBubyBuZWVkIHRvIHNldCB0aGUgbGlzdGVuIHNvY2tldHMgdG8gbm9uLWJsb2NrOyBvayBkZXJhYWR0QAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8yOSAxMTo0MDo1MQogICAgIFtzc2guMV0KICAgICAtIGFkZCBsaXN0IG9mIG9wdGlvbnMgdG8gLW8gYW5kIC5YciBzc2hfY29uZmlnKDUpCiAgICAgLSBzb21lIG90aGVyIGNsZWFudXAKICAgICByZXF1ZXN0ZWQgYnkgZGVyYWFkdEA7CiAgICAgb2sgZGVyYWFkdEAgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8yOSAyMDoxOTo1NwogICAgIFtzZXJ2Y29uZi5jIHNzaGRfY29uZmlnXQogICAgIEdTU0FQSUNsZWFudXBDcmVkcyAtPiBHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIERvbid0IHNldCBESVNBQkxFX1NIQURPVyB3aGVuIGNvbmZpZ3VyaW5nCiAgIC0td2l0aC1wYW0uICBvayBkam1ACiAtIChkdHVja2VyKSBbc3NoLWdzcy5oXSBQcm90b3R5cGUgY2hhbmdlIG1pc3NlZCBpbiBzeW5jLgogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gRml4IGJ1cyBlcnJvcnMgb24gc29tZSA2NC1iaXQgU29sYXJpcyBjb25maWd1cmF0aW9ucy4KICAgQmFzZWQgb24gcGF0Y2hlcyBieSBNYXR0aGlhcyBLb2VwcGUgYW5kIFRob21hcyBCYWRlbi4gIG9rIGRqbUAKCjIwMDMwOTMwCiAtIChiYWwpIEZpeCBpc3N1ZXMgaW4gb3BlbmJzZC1jb21wYXQvcmVhbHBhdGguYwoKMjAwMzA5MjUKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQveGNyeXB0LmNdIEJ1ZyAjNjMzOiBSZW1vdmUKICAgRElTQUJMRV9TSEFET1cgZm9yIEhQLVVYLCB1c2UgZ2V0c3BuYW0gaW5zdGVhZCBvZiBnZXRwcnB3bmFtLiAgUGF0Y2ggZnJvbQogICBtaWNoYWVsX3N0ZWZmZW5zIGF0IGhwLmNvbSwgb2sgZGptQAogLSAodGltKSBbc3NoZF9jb25maWddIFVzZVBBTSBkZWZhdWx0cyB0byBuby4KCjIwMDMwOTI0CiAtIChkam0pIFVwZGF0ZSB2ZXJzaW9uLmggYW5kIHNwZWMgZmlsZXMgZm9yIEhFQUQKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIElSSVg1IG5lZWRzIHRoZSBzYW1lIHNldHJlW3VnXWlkIGRlZmluZXMgYXMgSVJJWDYuCgoyMDAzMDkyMwogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluXSBCdWcgIzY0NDogRml4ICJtYWtlIGNsZWFuIiBmb3Igb3V0LW9mLXRyZWUKICAgYnVpbGRzLiAgUG9ydGFiaWxpdHkgY29ycmVjdGlvbnMgZnJvbSB0aW1ALgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM2NjU6IHVpZCBzd2FwcGluZyBpc3N1ZXMgb24gTWFjIE9TIFguCiAgIFBhdGNoIGZyb20gbWF4IGF0IHF1ZW5kaS5kZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjNjU3OiB1aWQgc3dhcHBpbmcgaXNzdWVzIG9uIEJTRGkuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzY1MzogdWlkIHN3YXBwaW5nIGlzc3VlcyBvbiBUcnU2NC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjNjkzOiB1aWQgc3dhcHBpbmcgaXNzdWVzIG9uIE5DUiBNUC1SQVMuCiAgIFBhdGNoIGZyb20gZGF2aWQuaGF1Z2h0b24gYXQgbmNyLmNvbQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM2NTk6IHVpZCBzd2FwcGluZyBpc3N1ZXMgb24gSVJJWCA2LgogICBQYXJ0IG9mIHBhdGNoIHN1cHBsaWVkIGJ5IGJ1Z3ppbGxhLW9wZW5zc2ggYXQgdGhld3JpdHRlbndvcmQuY29tCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5jCiAgIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oXSBCdWcgIzY1OTogVGVzdCBmb3IgYW5kIGhhbmRsZSBzeXN0ZW1zIHdpdGgKICAgd2hlcmUgZ2FpX3N0cmVycm9yIGlzIGRlZmluZWQgYXMgImNvbnN0IGNoYXIgKiIuICBQYXJ0IG9mIHBhdGNoIHN1cHBsaWVkCiAgIGJ5IGJ1Z3ppbGxhLW9wZW5zc2ggYXQgdGhld3JpdHRlbndvcmQuY29tCiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vUkVBRE1FIGNvbnRyaWIvY3lnd2luL3NzaC1ob3N0LWNvbmZpZ10gVXBkYXRlCiAgIHNzaC1ob3N0LWNvbmZpZyB0byBtYXRjaCBjdXJyZW50IGRlZmF1bHRzLCBidW1wIFJFQURNRSB2ZXJzaW9uLiAgUGF0Y2ggZnJvbQogICB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgogLSAoZHR1Y2tlcikgW3VpZHN3YXAuY10gRG9uJ3QgdGVzdCByZXN0b3JhdGlvbiBvZiB1aWQgb24gQ3lnd2luIHNpbmNlIHRoZQogICBPUyBkb2VzIG5vdCBzdXBwb3J0IHBlcm1hbmVudGx5IGRyb3BwaW5nIHByaXZpbGVnZXMuICBQYXRjaCBmcm9tCiAgIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gVXNlIGNvcnJlY3QgaW5jbHVkZSBmb3IgeG1hbGxvYy5oLAogICBhZGQgY2Fub2hvc3QuaCB0byBzdG9wIHdhcm5pbmcuICBCYXNlZCBvbiBwYXRjaCBmcm9tIG9wZW5zc2gtdW5peC1kZXYgYXQKICAgdGhld3JpdHRlbndvcmQuY29tCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gQnVnICM2ODY6IERvY3VtZW50IHJlcXVpcmVtZW50IGZvciB6bGliIDEuMS40IG9yCiAgIGhpZ2hlci4KIC0gKHRpbSkgRml4IHR5cG8uIHMvU0VURUlVRF9CUkVBS1NfU0VUVUlEL1NFVEVVSURfQlJFQUtTX1NFVFVJRC8KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQnVnIDY2NTogbW92ZSAzIG5ldyBBQ19ERUZJTkVTIG91dHNpZGUgb2YgQUNfVFJZX1JVTi4KICAgUmVwb3J0IGJ5IGRpc3RsZXIgQVQgZ29sZW0gcGggdXRleGFzIGVkdS4KIC0gKGR0dWNrZXIpIFtjb250cmliL2FpeC9wYW0uY29uZl0gSW5jbHVkZSBleGFtcGxlIHBhbS5jb25mIGZvciBBSVggZnJvbQogICBhcnRpY2xlIGJ5IGdlbnR5IGF0IGF1c3Rpbi5pYm0uY29tLCBpbmNsdWRlZCB3aXRoIHRoZSBhdXRob3IncyBwZXJtaXNzaW9uLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOCAwNzo1Mjo1NAogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgbWlzc2luZyB7fTsgYnVnICM2NTY7IGpjbG9uZ3VldCBhdCBmcmVlLmZyCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE4IDA3OjU0OjQ4CiAgICAgW2J1ZmZlci5jXQogICAgIHByb3RlY3QgYWdhaW5zdCBkb3VibGUgZnJlZTsgIzY2MDsgIHphcmRveiBhdCB1c2Vycy5zZi5uZXQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTggMDc6NTY6MDUKICAgICBbYXV0aGZpbGUuY10KICAgICBtaXNzaW5nICBidWZmZXJfZnJlZSgmZW5jcnlwdGVkKTsgIzY2MjsgemFyZG96IGF0IHVzZXJzLnNmLm5ldAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOCAwODo0OTo0NQogICAgIFtkZWF0dGFjay5jIG1pc2MuYyBzZXNzaW9uLmMgc3NoLWFnZW50LmNdCiAgICAgbW9yZSBidWZmZXIgYWxsb2NhdGlvbiBmaXhlczsgZnJvbSBTb2xhciBEZXNpZ25lcjsgQ0FOLTIwMDMtMDY4MjsKICAgICBvayBtaWxsZXJ0QAogICAtIG1pb2RAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTggMTM6MDI6MjEKICAgICBbYXV0aGZkLmMgYnVmYXV4LmMgZGguYyBtYWMuYyBzc2gta2V5Z2VuLmNdCiAgICAgQSBmZXcgc2lnbmVkbmVzcyBmaXhlcyBmb3IgaGFybWxlc3Mgc2l0dWF0aW9uczsgbWFya3VzQCBvawogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAwOTowMjowMgogICAgIFtwYWNrZXQuY10KICAgICBidWZmZXJfZHVtcCBvbmx5IGlmIFBBQ0tFVF9ERUJVRyBpcyBkZWZpbmVkOyBKZWRpL1NlY3RvciBPbmU7IHByIDM0NzEKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTkgMDk6MDM6MDAKICAgICBbYnVmZmVyLmNdCiAgICAgc2lnbiBmaXggaW4gYnVmZmVyX2R1bXA7IEplZGkvU2VjdG9yIE9uZTsgcHIgMzQ3MwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAxMToyOTo0MAogICAgIFtzc2gtYWdlbnQuY10KICAgICBwcm92aWRlIGEgc3NoLWFnZW50IHNwZWNpZmljIGZhdGFsKCkgZnVuY3Rpb247IG9rIGRlcmFhZHQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTkgMTE6MzA6MzkKICAgICBbc3NoLWtleXNjYW4uY10KICAgICBhdm9pZCBmYXRhbF9jbGVhbnVwLCBqdXN0IGNhbGwgZXhpdCgpOyBvayBkZXJhYWR0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE5IDExOjMxOjMzCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgZG8gbm90IGNhbGwgY2hhbm5lbF9mcmVlX2FsbCBvbiBmYXRhbDsgb2sgZGVyYWFkdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAxMTozMzowOQogICAgIFtwYWNrZXQuYyBzc2hkLmNdCiAgICAgZG8gbm90IGNhbGwgcGFja2V0X2Nsb3NlIG9uIGZhdGFsOyBvayBkZXJhYWR0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE5IDE3OjQwOjIwCiAgICAgW3NjcC5jXQogICAgIGVycm9yIGhhbmRsaW5nIGZvciByZW1vdGUtcmVtb3RlIGNvcHk7ICM2Mzg7IHJlcG9ydCBIYXJhbGQgS29lbmlnOwogICAgIG9rIG1pbGxlcnQsIGZncywgaGVubmluZywgZGVyYWFkdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAxNzo0MzozNQogICAgIFtjbGllbnRsb29wLmMgc3NodHR5LmMgc3NodHR5LmhdCiAgICAgcmVtb3ZlIGZhdGFsIGNhbGxiYWNrcyBmcm9tIGNsaWVudCBjb2RlOyBvayBkZXJhYWR0CiAtIChiYWwpICJleHRyYXRpb24iIC0+ICJleHRyYWN0aW9uIiBpbiBzc2gtcmFuZC1oZWxwZXIuYzsgcmVwb3RlZCBieSBqb2huCglvbiAjdW5peGhlbHBAZWZuZXQKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gYWRkIC0tZGlzYWJsZS1ldGMtZGVmYXVsdC1sb2dpbiBvcHRpb24uIG9rIGRqbQogLSAoZGptKSBTeW5jIHdpdGggVl8zXzcgYnJhbmNoOgogICAtIChkam0pIEZpeCBTU0gxIGNoYWxsZW5nZSBrbHVkZ2UKICAgLSAoZGptKSBCdWcgIzY3MTogRml4IGJ1aWxkcyBvbiBPcGVuQlNECiAgIC0gKGRqbSkgQnVnICM2NzY6IEZpeCBQQU0gc3RhY2sgY29ycnVwdGlvbgogICAtIChkam0pIEZpeCBiYWQgZnJlZSgpIGluIFBBTSBjb2RlCiAgIC0gKGRqbSkgRG9uJ3QgY2FsbCBwYW1fZW5kIGJlZm9yZSBwYW1faW5pdAogICAtIChkam0pIEVuYWJsZSBidWlsZCB3aXRoIG9sZCBPcGVuU1NMIGFnYWluCiAgIC0gKGRqbSkgVHJpbSBkZXByZWNhdGVkIG9wdGlvbnMgZnJvbSBJTlNUQUxMLiBNZW50aW9uIFVzZVBBTQogICAtIChkam0pIEZpeCBxdW90ZSBoYW5kbGluZyBpbiBzZnRwOyBQYXRjaCBmcm9tIGFkbW9ydGVuIEFUIHVtaWNoLmVkdQoKMjAwMzA5MTkKIC0gKGRqbSkgQnVnICM2ODM6IFJlbW92ZSByZWZlcmVuY2UgdG8gLS13aXRoLWlwdjQtZGVmYXVsdCBmcm9tIElOU1RBTEw7CiAgIGRqYXN0IEFUIGNzLnRvcm9udG8uZWR1CiAtIChkam0pIEJ1ZyAjNjYxOiBSZW1vdmUgZHVwbGljYXRlIGNoZWNrIGZvciBiYXNlbmFtZTsgZnJvbSAKICAgYnVnemlsbGEtb3BlbnNzaCBBVCB0aGV3cml0dGVud29yZC5jb20KIC0gKGRqbSkgQnVnICM2NDE6IEFsbG93IFJlZEhhdCBSUE0gYnVpbGRpbmcgd2l0aG91dCBHVEstMjsgUGF0Y2ggZnJvbQogICBqYXNvbiBBVCBkZXZyYW5kb20ub3JnCiAtIChkam0pIEJ1ZyAjNjQ2OiBGaXggbG9jYXRpb24gb2YgeDExLXNzaC1hc2twYXNzOyBKaW0KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oXSBCdWcgIzY0MDogRG9uJ3QgaW5jbHVkZSBhdWRpdC5oCiAgIHVubGVzcyByZXF1aXJlZC4gIFJlb3JkZXIgdG8gcmVkdWNlIHdhcm5pbmdzLgogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQnVnICM2NDM6IEZpeCBzaXplX3QgLT4gdV9pbnQgYW5kIGZpeCBudWxsIGRlcmVmCiAgIHdoZW4gL2V0Yy9kZWZhdWx0L2xvZ2luIGRvZXNuJ3QgZXhpc3Qgb3IgaXNuJ3QgcmVhZGFibGUuICBGaXhlcyBmcm9tCiAgIGpwYXJzb25zLWxpc3RzIGF0IHNhZmZyb24ubmV0IGFuZCBnZW9yZy5vcHBlbmJlcmcgYXQgZGV1IG1jaSBjb20uCiAtIChkdHVja2VyKSBbYWNjb25maWcuaF0gVXBkYXRlZCBiYXNlbmFtZSB0ZXN0IG5lZWRzIEhBVkVfQkFTRU5BTUUKCjIwMDMwOTE4CiAtIChkam0pIEJ1ZyAjNjUyOiBGaXggZW1wdHkgcGFzc3dvcmQgYXV0aAoKMjAwMzA5MTcKIC0gKGRqbSkgU3luYyB3aXRoIFZfM183IGJyYW5jaAogLSAoZGptKSBPcGVuQlNEIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTYgMjE6MDI6NDAKICAgICBbYnVmZmVyLmMgY2hhbm5lbHMuYyB2ZXJzaW9uLmhdCiAgICAgbW9yZSBtYWxsb2MvZmF0YWwgZml4ZXM7IG9rIG1pbGxlcnQvZGVyYWFkdDsgZ2h1ZHNvbiBhdCBNSVQuRURVCiAtIChkam0pIENyYW5rIFJQTSBzcGVjIGZpbGUgdmVyc2lvbnMKIC0gKHRpbSkgW29wZW5ic2QtY29tcGF0L2luZXRfbnRvYS5jXSAyMDAzMDkxNyAiU3luYyB3aXRoIFZfM183IGJyYW5jaCIgdW5kaWQKICAgMjAwMzA5MTYgIk1pc3NlZCBkZWFkIGhlYWRlciBpbiBpbmV0X250b2EuYyIKIAoyMDAzMDkxNgogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIGRlZmluZXMuaCBzZXNzaW9uLmNdIEJ1ZyAjMjUyOiBSZXRyaWV2ZQogICBQQVRIIChvciBTVVBBVEgpIGFuZCBVTUFTSyBmcm9tIC9ldGMvZGVmYXVsdC9sb2dpbiBvbiBwbGF0Zm9ybXMgdGhhdCBoYXZlIGl0CiAgIChlZyBTb2xhcmlzLCBSZWxpYW50IFVuaXgpLiAgUGF0Y2ggZnJvbSBSb2JlcnQuRGFobGVtIGF0IHNpZW1lbnMuY29tLiAgCiAgIG9rIGRqbUAKIC0gKGJhbCkgT3BlbkJTRCBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xNiAwMzowMzo0NwogICAgIFtidWZmZXIuY10KICAgICBkbyBub3QgZXhwYW5kIGJ1ZmZlciBiZWZvcmUgYXR0ZW1wdGluZyB0byByZWFsbG9jYXRlIGl0OyBtYXJrdXMgb2sKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gRml4IHBvcnRhYmlsaXR5IGlzc3Vlcy4KIC0gKGJhbCkgTWlzc2VkIGRlYWQgaGVhZGVyIGluIGluZXRfbnRvYS5jCgoyMDAzMDkxNAogLSAoZHR1Y2tlcikgW01ha2VmaWxlIHJlZ3Jlc3MvTWFrZWZpbGVdIEZpeCBwb3J0YWJpbGl0eSBpc3N1ZXMgcHJldmVudGluZwogICB0aGUgcmVncmVzc2lvbiB0ZXN0cyBmcm9tIHJ1bm5pbmcgd2l0aCBTb2xhcmlzJyBtYWtlLiAgUGF0Y2ggZnJvbSBCcmlhbgogICBQb29sZSAocmFqIGF0IGNlcmlhcy5wdXJkdWUuZWR1KS4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL01ha2VmaWxlXSBBSVgncyBtYWtlIGRvZXNuJ3QgbGlrZSAiICs9Iiwgc28gcmVwbGFjZQogICB3aXRoIHZhbmlsbGEgIj0iLgoKMjAwMzA5MTMKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2FnZW50LXRpbWVvdXQuc2hdIFRpbWVvdXQgb2YgNSBzZWMgaXMgYm9yZGVybGluZSBmb3IKICAgc2xvd2VyIGhvc3RzLCBpbmNyZWFzZSB0byAxMCBzZWMuCiAtIChkdHVja2VyKSBbYXV0aC1wYXNzd2QuY10gT24gQUlYLCBjYWxsIHNldGF1dGhkYigpIGJlZm9yZSBsb2dpbnN1Y2Nlc3MoKSwKICAgcmVxdWlyZWQgdG8gY29ycmVjdGx5IHJlc2V0IGZhaWxlZCBsb2dpbiBjb3VudCB3aGVuIHVzaW5nIGEgcGFzc3dvcmQKICAgcmVnaXN0cnkgb3RoZXIgdGhhbiAiZmlsZXMiIChlZyBMREFQLCBzZWUgYnVnICM1NDMpLgogLSAodGltKSBbY29uZmlndXJlLmFjXSBkZWZpbmUgV0lUSF9BQkJSRVZfTk9fVFRZIGZvciBTQ08uCiAgIFJlcG9ydCBieSBSb2dlciBDb3JuZWxpdXMuCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gVXNlIFNTSERfUEFNX1NFUlZJQ0UgZm9yIFBBTSBzZXJ2aWNlIG5hbWUsIHBhdGNoCiAgIGZyb20gY2p3YXRzb24gYXQgZGViaWFuLm9yZy4KCjIwMDMwOTEyCiAtICh0aW0pIFtyZWdyZXNzL2FnZW50LXB0cmFjZS5zaF0gc2ggZG9lc24ndCBsaWtlICJpZiAhIHNoZWxsX2Z1bmN0aW9uOyB0aGVuIi4KIC0gKHRpbSkgW01ha2VmaWxlLmluXSBvbmx5IG1rZGlyIHJlZ3Jlc3MgaWYgaXQgZG9lcyBub3QgZXhpc3QuCiAtICh0aW0pIFtyZWdyZXNzL3llcy1oZWFkLnNoXSBzaGVsbCBwb3J0YWJpbGl0eSBmaXguCgoyMDAzMDkxMQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM1ODgsICM2MTU6IE1vdmUgb3RoZXIgbGliZ2VuIHRlc3RzIHRvIGFmdGVyCiAgIHRoZSBkaXJuYW1lIHRlc3QsIHRvIGFsbG93IGEgYnJva2VuIGRpcm5hbWUgdG8gYmUgZGV0ZWN0ZWQgY29ycmVjdGx5LgogICBCYXNlZCBwYXJ0aWFsbHkgb24gcGF0Y2ggc3VwcGxpZWQgYnkgYWxleC5raWVybmFuIGF0IHRodXMubmV0LiAgb2sgZGptQAogLSAodGltKSBbY29uZmlndXJlLmFjXSBNb3ZlIGxpYmdlbiB0ZXN0cyB0byBiZWZvcmUgbGlid3JhcCB0byB1bmJyZWFrCiAgIFVuaXhXYXJlIDIuMDMgdXNpbmcgLS13aXRoLXRjcC13cmFwcGVycy4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gUHJlZmVyIHNldHVpZC9zZXRnaWQgb24gVW5peFdhcmUgYW5kIE9wZW4gU2VydmVyLgogLSAodGltKSBbcmVncmVzcy9hZ2VudC1wdHJhY2Uuc2ggcmVncmVzcy9keW5hbWljLWZvcndhcmQuc2gKICAgcmVncmVzcy9zZnRwLWNtZHMuc2ggcmVncmVzcy9zdGRlcnItYWZ0ZXItZW9mLnNoIHJlZ3Jlc3MvdGVzdC1leGVjLnNoXQogICBubyBsb25nZXIgZGVwZW5kcyBvbiB3aGljaCgxKS4gcGF0Y2ggYnkgZHR1Y2tlckAKCjIwMDMwOTEwCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzYzNjogQWRkIHN1cHBvcnQgZm9yIENyYXkncyBuZXcgWDEgbWFjaGluZS4KICAgUGF0Y2ggZnJvbSB3ZW5keXAgYXQgY3JheS5jb20uCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBQYXJ0IG9mIGJ1ZyAjNjE1OiB0Y3NlbmRicmVhayBtaWdodCBiZSBhIG1hY3JvLgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3NoL3llcy1oZWFkLnNoXSBTb21lIHBsYXRmb3JtcyAoZWcgU29sYXJpcykgZG9uJ3QgaGF2ZQogICAieWVzIi4KCjIwMDMwOTA5CiAtICh0aW0pIFtyZWdyZXNzL01ha2VmaWxlXSBGaXhlcyBmb3IgYnVpbGRpbmcgb3V0c2lkZSBvZiBhIHJlYWQtb25seQogICBzb3VyY2UgdHJlZS4KIC0gKHRpbSkgW3JlZ3Jlc3MvYWdlbnQtdGltZW91dC5zaF0gcy9USU1FT1VUL1NTSEFHRU5UX1RJTUVPVVQvIEZpeGVzIGNvbmZsaWN0CiAgIHdpdGggc2hlbGwgcmVhZC1vbmx5IHZhcmlhYmxlLgogLSAodGltKSBbcmVncmVzcy9zZnRwLWJhZGNtZHMuc2ggcmVncmVzcy9zZnRwLWNtZHMuc2hdIEZpeCBlcnJvcnMgbGlrZQogICBVWDpybTogRVJST1I6IENhbm5vdCByZW1vdmUgJy4nIG9yICcuLicKCjIwMDMwOTA4CiAtICh0aW0pIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gd3JhcCBfZ2V0c2hvcnQgYW5kCiAgIF9nZXRsb25nIGluICNpZm5kZWYKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hYyBhY2NvbmZpZy5oIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIHRlc3QgZm9yCiAgIEhFQURFUi5hZCBpbiBhcnBhL25hbWVzZXIuaAogLSAodGltKSBbc3NoLWtleWdlbi5jXSBzL1BBVEhfTUFYL01BWFBBVEhMRU4vIG9rIG1vdXJpbmdACgoyMDAzMDkwNwogLSAoZHR1Y2tlcikgW2FnZW50LXB0cmFjZS5zaCBkeW5hbWljLWZvcndhcmQuc2ggKGFsbCByZWdyZXNzLyldCiAgIFB1dCAid2hpY2giIGluc2lkZSBxdW90ZXMuCiAtIChkdHVja2VyKSBbZHluYW1pYy1mb3J3YXJkLnNoIGZvcndhcmRpbmcuc2ggc2Z0cC1iYXRjaC5zaCAoYWxsIHJlZ3Jlc3MvKV0KICAgQWRkICR7RVhFRVhUfTogcmVxdWlyZWQgdG8gd29yayBvbiBDeWd3aW4uCiAtIChkdHVja2VyKSBbcmVncmVzcy9zZnRwLWJhdGNoLnNoXSBNYWtlIHRlbXBvcmFyeSBiYXRjaCBmaWxlIG5hbWUgbW9yZQogICBkaXN0aW5jdGl2ZSwgc28gInJtICR7QkFUQ0h9LioiIGRvZXNuJ3QgbWF0Y2ggdGhlIHNjcmlwdCBpdHNlbGYuCiAtIChkdHVja2VyKSBbcmVncmVzcy9zZnRwLWNtZHMuc2hdIFNraXAgcXVvdGVkIGZpbGUgdGVzdCBvbiBDeWd3aW4uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQveGNyeXB0LmNdICNlbHNpZiAtPiAjZWxpZgogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmhdIFR5cG8uCiAtIChkdHVja2VyKSBbQ1JFRElUUyBNYWtlZmlsZS5pbiBjb25maWd1cmUuYWMgbWRvYzJtYW4uYXdrIG1kb2MybWFuLnBsXQogICBSZXBsYWNlIG1kb2MybWFuLnBsIHdpdGggbWRvYzJtYW4uYXdrLCBwcm92aWRlZCBieSBQZXRlciBTdHVnZS4KCjIwMDMwOTA2CiAtIChkdHVja2VyKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgdWlkc3dhcC5jXSBQcmVmZXIgc2V0dWlkL3NldGdpZCBvbiBBSVguCgoyMDAzMDkwNQogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluXSBBZGQgZGlzdGNsZWFuIHRhcmdldCBmb3IgcmVncmVzcy8sIGZpeCBjbGVhbiB0YXJnZXQuCgoyMDAzMDkwNAogLSAoZHR1Y2tlcikgUG9ydGFibGl6ZSByZWdyZXNzaW9uIHRlc3RzLiAgUGFydHMgY29udHJpYnV0ZWQgYnkgUm91bWVuCiAgIFBldHJvdiwgRGF2aWQgTS4gV2lsbGlhbXMgYW5kIENvcmlubmEgVmluc2NoZW4uCiAgIC0gW01ha2VmaWxlLmluXSBBZGQgIm1ha2UgdGVzdHMiIHRhcmdldCBhbmQgIm1ha2UgY2xlYW4iIGhvb2tzLgogICAtIFtyZWdyZXNzL2FnZW50LWdldHBlZXJlaWQuc2hdIFNraXAgdGVzdCBvbiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0CiAgICAgZ2V0cGVlcmVpZC4KICAgLSBbcmVncmVzcy9hZ2VudC1wdHJhY2Uuc2hdIFNraXAgdGVzdHMgaWYgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0IGl0IG9yCiAgICAgZ2RiIGNhbm5vdCBiZSBmb3VuZC4KICAgLSBbcmVncmVzcy9yZWNvbmZpZ3VyZS9zaF0gTWFrZSBwYXRoIHRvIHNzaGQgZnVsbHkgcXVhbGlmaWVkIGlmIHJlcXVpcmVkLgogICAtIFtyZWdyZXNzL3Jla2V5LnNoXSBSZW1vdmUgZGVwZW5kZW5jZSBvbiAvZGV2L3plcm8gKG5vdCBhbGwgcGxhdGZvcm1zIGhhdmUKICAgICBpdCkuICBUaGUgc3BhcnNlIGZpbGUgd2lsbCB0YWtlIGxlc3MgZGlzayBzcGFjZSB0b28uCiAgIC0gW3JlZ3Jlc3Mvc2Z0cC1jbWRzLnNoXSBFbnN1cmUgZmlsZXMgdXNlZCBmb3IgdGVzdCBhcmUgcmVhZGFibGUuCiAgIC0gW3JlZ3Jlc3Mvc3RkZXJyLWFmdGVyLWVvZi5zaF0gU2VhcmNoIGZvciBhIHVzYWJsZSBjaGVja3N1bSBwcm9ncmFtLgogICAtIFtyZWdyZXNzL3NmdHAtYmFkY21kcy5zaCByZWdyZXNzL3NmdHAtY21kcy5zaCByZWdyZXNzL3NmdHAuc2gKICAgICByZWdyZXNzL3NzaC1jb20tY2xpZW50LnNoIHJlZ3Jlc3Mvc3NoLWNvbS1zZnRwLnNoIHJlZ3Jlc3Mvc3RkZXJyLWRhdGEuc2gKICAgICByZWdyZXNzL3RyYW5zZmVyLnNoXSBVc2UgJHtFWEVFWFR9IHdoZXJlIGFwcHJvcHJpYXRlLgogICAtIFtyZWdyZXNzL3NmdHAuc2ggcmVncmVzcy9zc2gtY29tLXNmdHAuc2hdIFJlbW92ZSBkZXBlbmRlbmN5IG9uIC9kZXYvc3RkaW4uCiAgIC0gW3JlZ3Jlc3MvYWdlbnQtcHRyYWNlLnNoIHJlZ3Jlc3MvYWdlbnQtdGltZW91dC5zaF0KICAgICAiZ3JlcCAtcSIgLT4gImdyZXAgPi9kZXYvbnVsbCIKICAgLSBbcmVncmVzcy9hZ2VudC5zaCByZWdyZXNzL3Byb3RvLXZlcnNpb24uc2ggcmVncmVzcy9zc2gtY29tLnNoCiAgICAgcmVncmVzcy90ZXN0LWV4ZWMuc2hdIEhhbmRsZSBkaWZmZXJlbnQgd2F5cyBvZiBlY2hvaW5nIHdpdGhvdXQgbmV3bGluZXMuCiAgIC0gW3JlZ3Jlc3MvZHluYW1pYy1mb3J3YXJkLnNoXSBTb21lICJ3aGljaCIgcHJvZ3JhbXMgb3V0cHV0IG9uIHN0ZGVyci4KICAgLSBbcmVncmVzcy9zZnRwLWNtZHMuc2hdIFVzZSBwb3J0YWJsZSAidGVzdCIgb3B0aW9uLgogICAtIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0gVXNlIHN1ZG8sIHNlYXJjaCBmb3IgIndob2FtaSIgZXF1aXZhbGVudCwgYWx3YXlzCiAgICAgdXNlIFN0cmljdG1vZGVzIG5vLCB3YWl0IGxvbmdlciBmb3Igc3NoZCBzdGFydHVwLgogICAtIFtyZWdyZXNzL01ha2VmaWxlXSBSZW1vdmUgQlNEaXNtcy4KICAgLSBbcmVncmVzcy9SRUFETUUucmVncmVzc10gQWRkIGEgYmFzaWMgcmVhZG1lLgogICAtIFtNYWtlZmlsZS5pbiByZWdyZXNzL2FnZW50LWdldHBlZXJlaWQuc2hdIGNvbmZpZy5oIGlzIG5vdyBpbiAkQlVJTERESVIKICAgICBub3QgJE9CSi4KICAgLSBbTWFrZWZpbGUuaW4gcmVncmVzcy9hZ2VudC1wdHJhY2VdIEZpeCBtaW5vciByZWdyZXNzIGlzc3VlcyBvbiBDeWd3aW4uCgoyMDAzMDkwMwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA4LzI2IDA5OjU4OjQzCiAgICAgW2F1dGgtcGFzc3dkLmMgYXV0aC5jIGF1dGguaCBhdXRoMS5jIGF1dGgyLW5vbmUuYyBhdXRoMi1wYXNzd2QuY10KICAgICBbYXV0aDIuYyBtb25pdG9yLmNdCiAgICAgZml4IHBhc3N3ZCBhdXRoIGZvciAndXNlcm5hbWUgbGVha3MgdmlhIHRpbWluZyc7IHdpdGggZGptQCwgb3JpZ2luYWwgCiAgICAgcGF0Y2hlcyBmcm9tIHNvbGFyCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA4LzI4IDEyOjU0OjM0CiAgICAgW2F1dGguaF0KICAgICByZW1vdmUga2VyYmVyb3Mgc3VwcG9ydCBmcm9tIHNzaDEsIHNpbmNlIGl0IGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggR1NTQVBJOwogICAgIGJ1dCBrZWVwIGtlcmJlcm9zIHBhc3N3ZCBhdXRoIGZvciBzc2gxIGFuZCAyOyBvayBkam0sIGhpbiwgaGVubmluZywgLi4uCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzAyIDE2OjQwOjI5CiAgICAgW3ZlcnNpb24uaF0KICAgICBlbnRlciAzLjcKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMDIgMTg6NTA6MDYKICAgICBbc2Z0cC4xIHNzaF9jb25maWcuNV0KICAgICBlc2NhcGUgcHVuY3R1YXRpb247CiAgICAgb2sgZGVyYWFkdEAKCjIwMDMwOTAyCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA4LzI0IDE3OjM2OjUxCiAgICAgW2F1dGgyLWdzcy5jXQogICAgIDY0IGJpdCBjbGVhbnVwczsgbWFya3VzIG9rCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA4LzI4IDEyOjU0OjM0CiAgICAgW2F1dGgta3JiNS5jIGF1dGguaCBhdXRoMS5jIG1vbml0b3IuYyBtb25pdG9yLmggbW9uaXRvcl93cmFwLmNdCiAgICAgW21vbml0b3Jfd3JhcC5oIHJlYWRjb25mLmMgc2VydmNvbmYuYyBzZXNzaW9uLmMgc3NoX2NvbmZpZy41XQogICAgIFtzc2hjb25uZWN0MS5jIHNzaGQuYyBzc2hkX2NvbmZpZyBzc2hkX2NvbmZpZy41XQogICAgIHJlbW92ZSBrZXJiZXJvcyBzdXBwb3J0IGZyb20gc3NoMSwgc2luY2UgaXQgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBHU1NBUEk7CiAgICAgYnV0IGtlZXAga2VyYmVyb3MgcGFzc3dkIGF1dGggZm9yIHNzaDEgYW5kIDI7IG9rIGRqbSwgaGluLCBoZW5uaW5nLCAuLi4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDgvMjkgMTA6MDM6MTUKICAgICBbY29tcGF0LmMgY29tcGF0LmhdCiAgICAgU1NIX0JVR19LNVVTRVIgaXMgdW51c2VkOyBvayBoZW5uaW5nQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOC8yOSAxMDowNDozNgogICAgIFtjaGFubmVscy5jIG5jaGFuLmNdCiAgICAgYmUgbGVzcyBjaGF0dHk7IGRlYnVnIC0+IGRlYnVnMiwgY2xlYW51cDsgb2sgaGVubmluZ0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDgvMzEgMTA6MjY6MDQKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIHBhc3MgZmlsZV9zaXplICsgMSB0byBzbnByaW50ZjogZml4ZXMgcHJpbnRpbmcgb2YgdHJ1bmNhdGVkCiAgICAgZmlsZSBuYW1lczsgZml4IGJhc2VkIG9uIHBhdGNoL3JlcG9ydCBmcm9tIHN0dXJtQDsKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDgvMzEgMTI6MTQ6MjIKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIGRvIHdyaXRlIHRvIGJ1ZlstMV0KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDgvMzEgMTM6Mjk6MDUKICAgICBbc2Vzc2lvbi5jXQogICAgIGNhbGwgc3NoX2dzc2FwaV9zdG9yZWNyZWRzIGNvbmRpdGlvbmFsbHkgZnJvbSBkb19leGVjKCk7IAogICAgIHdpdGggc3h3QGluZi5lZC5hYy51awogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOC8zMSAxMzozMDoxOAogICAgIFtnc3Mtc2Vydi5jXQogICAgIGNvcnJlY3Qgc3RyaW5nIHRlcm1pbmF0aW9uIGluIHBhcnNlX2VuYW1lKCk7IHN4d0BpbmYuZWQuYWMudWsKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDgvMzEgMTM6MzE6NTcKICAgICBbZ3NzLXNlcnYuY10KICAgICB3aGl0c3BhY2UgS05GCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzAxIDA5OjUwOjA0CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgZ3NzIGtleCBpcyBub3Qgc3VwcG9ydGVkOyBzeHdAaW5mLmVkLmFjLnVrCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzAxIDEyOjUwOjQ2CiAgICAgW3JlYWRjb25mLmNdCiAgICAgcm0gZ3NzYXBpZGVsZWdhdGVjcmVkcyBhbGlhczsgbmV2ZXIgc3VwcG9ydGVkIGJlZm9yZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8wMSAxMzo1MjoxOAogICAgIFtzc2guaF0KICAgICBybSB3aGl0ZXNwYWNlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzAxIDE4OjE1OjUwCiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzZXJ2Y29uZi5jIHNlcnZjb25mLmggc3NoLmNdCiAgICAgcmVtb3ZlIHVudXNlZCBrZXJiZXJvcyBjb2RlOyBvayBoZW5uaW5nQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8wMSAyMDo0NDo1NAogICAgIFthdXRoMi1nc3MuY10KICAgICBmaXggbGVhawogLSAoZGptKSBEb24ndCBpbml0aWFsaXNlIHBhbV9jb252IHN0cnVjdHVyZXMgaW5saW5lLiBBdm9pZHMgSFAvVVggY29tcGlsZXIKICAgZXJyb3IuIFBhcnQgb2YgQnVnICM0MjMsIHBhdGNoIGZyb20gIG1pY2hhZWxfc3RlZmZlbnMgQVQgaHAuY29tCiAtIChkam0pIEJ1ZyAjNDIzOiByZW9yZGVyIHNldHRpbmcgb2YgUEFNX1RUWSBhbmQgY2FsbGluZyBvZiBQQU0gc2Vzc2lvbiAKICAgbWFuYWdlbWVudCAobm93IGRvbmUgaW4gZG9fc2V0dXNlcmNvbnRleHQpLiBMYXJnZWx5IGZyb20gCiAgIG1pY2hhZWxfc3RlZmZlbnMgQVQgaHAuY29tCiAtIChkam0pIEZpeCBvcGVuYnNkLWNvbXBhdC8gYWdhaW4gLSByZW1vdmUgcmVmZXJlbmNlcyB0byBzdHJsKGNweXxjYXQpLmggCiAKMjAwMzA4MjkKIC0gKGJhbCkgb3BlbmJzZC1jb21wYXQvIGNsZWFuIHVwLiAgQ29uc2lkYXRlIGhlYWRlcnMsIGFkZCBpbiBJZCBvbiBvdXIKICAgZmlsZXMsIGFuZCBhZGRlZCBtaXNzaW5nIGxpY2Vuc2UgdG8gaGVhZGVyLgoKMjAwMzA4MjYKIC0gKGRqbSkgQnVnICM2Mjk6IE1hcmsgc3NoX2NvbmZpZyBvcHRpb24gInBhbWF1dGhlbnRpY2F0aW9udmlha2JkaW50IgogICBhcyBkZXByZWNhdGVkLiBSZW1vdmUgbWVudGlvbiBmcm9tIFJFQURNRS5wcml2c2VwLiBQYXRjaCBmcm9tIAogICBhZXQgQVQgY2MuaHV0LmZpCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA4LzIyIDEwOjU2OjA5CiAgICAgW2F1dGgyLmMgYXV0aDItZ3NzLmMgYXV0aC5oIGNvbXBhdC5jIGNvbXBhdC5oIGdzcy1nZW5yLmMgZ3NzLXNlcnYta3JiNS5jCiAgICAgZ3NzLXNlcnYuYyBtb25pdG9yLmMgbW9uaXRvci5oIG1vbml0b3Jfd3JhcC5jIG1vbml0b3Jfd3JhcC5oIHJlYWRjb25mLmMKICAgICByZWFkY29uZi5oIHNlcnZjb25mLmMgc2VydmNvbmYuaCBzZXNzaW9uLmMgc2Vzc2lvbi5oIHNzaC1nc3MuaAogICAgIHNzaF9jb25maWcuNSBzc2hjb25uZWN0Mi5jIHNzaGRfY29uZmlnIHNzaGRfY29uZmlnLjVdCiAgICAgc3VwcG9ydCBHU1MgQVBJIHVzZXIgYXV0aGVudGljYXRpb247IHBhdGNoZXMgZnJvbSBTaW1vbiBXaWxraW5zb24sCiAgICAgc3RyaXBwZWQgZG93biBhbmQgdGVzdGVkIGJ5IEpha29iIGFuZCBteXNlbGYuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA4LzIyIDEzOjIwOjAzCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgcmVtb3ZlIHN1cHBvcnQgZm9yICJrZXJiZXJvcy0yQHNzaC5jb20iCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA4LzIyIDEzOjIyOjI3CiAgICAgW2F1dGgyLmNdIChhdXRoMi1rcmI1LmMgcmVtb3ZlZCkKICAgICBudWtlICJrZXJiZXJvcy0yQHNzaC5jb20iCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA4LzIyIDIwOjU1OjA2CiAgICAgW0xJQ0VOQ0VdCiAgICAgYWRkIFNpbW9uIFdpbGtpbnNvbgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDgvMjQgMTc6MzY6NTIKICAgICBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jIHNzaGNvbm5lY3QyLmNdCiAgICAgNjQgYml0IGNsZWFudXBzOyBtYXJrdXMgb2sKICAgLSBmZ3NjaEBjdnMub3BlbmJzZC5vcmcgMjAwMy8wOC8yNSAwODoxMzowOQogICAgIFtzZnRwLWludC5jXQogICAgIGZpeCBkaXYgYnkgemVybyB3aGVuIGxpc3RpbmcgZm9yIGZpbGVuYW1lIGxlbmd0aHMgbG9uZ2VyIHRoYW4gd2lkdGguCiAgICAgbWFya3VzQCBvay4KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDgvMjUgMTA6MzM6MzMKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBmcHJpbnRmLT5sb2dpdCB0byBzaWxlbmNlIGxvZ2luIGJhbm5lciB3aXRoICJzc2ggLXEiOyBvayBtYXJrdXNACiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW4gYWNjb25maWcuaCBhdXRoLWtyYjUuYyBhdXRoLXBhbS5jIGF1dGgtcGFtLmgKICAgY29uZmlndXJlLmFjIGRlZmluZXMuaCBnc3Mtc2Vydi1rcmI1LmMgc2Vzc2lvbi5jIHNzaC1nc3MuaCBzc2hjb25uZWN0MS5jCiAgIHNzaGNvbm5lY3QyLmNdIEFkZCBQb3J0YWJsZSBHU1NBUEkgc3VwcG9ydCwgcGF0Y2ggYnkgU2ltb24gV2lsa2luc29uLgogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluXSBSZW1vdmUgYXV0aDIta3JiNS4KIC0gKGR0dWNrZXIpIFtjb250cmliL2FpeC9pbnZlbnRvcnkuc2hdIEFkZCBwdWJsaWMgZG9tYWluIG5vdGljZS4gIG9rIG1vdXJpbmdACiAgICh0aGUgb3JpZ2luYWwgYXV0aG9yKQogLSAoZHR1Y2tlcikgW2F1dGguY10gRG8gbm90IGNoZWNrIGZvciBsb2NrZWQgYWNjb3VudHMgd2hlbiBQQU0gaXMgZW5hYmxlZC4KCjIwMDMwODI1CiAtIChkam0pIEJ1ZyAjNjIxOiBTZWxlY3QgT3BlblNDIGtleXMgYnkgdXNhZ2UgYXR0cmlidXRlcy4gUGF0Y2ggZnJvbSAKICAgbGFyc2NoQHRydXN0Y2VudGVyLmRlCiAtIChiYWwpIG9wZW5ic2QtY29tcGF0LyBPcGVuQlNEIHVwZGF0ZXMuICBNb3N0bHkgbGljZW5zaW5nLCBhbnNpZmljYXRpb25zCiAgIGFuZCBtaW5vciBmaXhlcy4gT0sgZGptQAogLSAoYmFsKSByZWRvIGhvdyB3ZSBoYW5kbGUgJ215c2lnbmFsKCknLiAgTW92ZSBpdCB0byAKICAgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuYywgcy9teXNpZ25hbC9zaWduYWwvIGFuZCAjZGVmaW5lIHNpZ25hbCB0bwogICBiZSBvdXIgJ215c2lnbmFsJyBieSBkZWZhdWx0LiAgT0sgZGptQAogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggYXV0aC5jIGNvbmZpZ3VyZS5hYyBzc2hkLjhdIEJ1ZyAjNDIyIGFnYWluOiBkZW55CiAgIGFueSBhY2Nlc3MgdG8gbG9ja2VkIGFjY291bnRzLiAgb2sgZGptQAogLSAoZGptKSBCdWcgIzU2NDogUGVyZm9ybSBQQU0gYWNjb3VudCBjaGVja3MgZm9yIGFsbCBhdXRoZW50aWNhdGlvbnMgd2hlbgogICBVc2VQQU09eWVzOyBvayBkdHVja2VyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzUzMywgIzU1MTogZGVmaW5lIEJST0tFTl9HRVRBRERSSU5GTyBvbgogICBUcnU2NCwgc29sdmVzIGdldG5hbWVpbmZvIGFuZCAiYmFkIGFkZHIgb3IgaG9zdCIgZXJyb3JzLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW1JFQURNRSBidWlsZGJmZi5zaCBpbnZlbnRvcnkuc2hdIChhbGwgaW4gY29udHJpYi9haXgpCiAgIFVwZGF0ZSBwYWNrYWdlIGJ1aWxkZXI6IGNvcnJlY3RseSBoYW5kbGUgY29uZmlnIHZhcmlhYmxlcywgdXNlIGxzdXNlcgogICByYXRoZXIgdGhhbiAvZXRjL3Bhc3N3ZCwgZml4IHR5cG9zLCBhZGQgSWQncy4KCjIwMDMwODIyCiAtIChkam0pIHMvZ2V0X3Byb2duYW1lL3NzaF9nZXRfcHJvZ25hbWUvZyB0byBhdm9pZCBjb25mbGljdCB3aXRoIEhlaW1kYWwgCiAgIC1sYnJva2VuOyBvayBkdHVja2VyIAogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY3lnd2luL3NzaC11c2VyLWNvbmZpZ10gUHV0IGtleXMgaW4gYXV0aG9yaXplZF9rZXlzCiAgIHJhdGhlciB0aGF0IGF1dGhvcml6ZWRfa2V5czIuICBQYXRjaCBmcm9tIHZpbnNjaGVuQHJlZGhhdC5jb20uCgoyMDAzMDgyMQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOC8xNCAxNjowODo1OAogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgZXhpdCBhZnRlciBwcmltZXRlc3QsIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtkZWZpbmVzLmhdIFB1dCBDTVNHX0RBVEEsIENNU0dfRklSU1RIRFIgd2l0aCBvdGhlciBDTVNHKiBtYWNyb3MsCiAgIGNoYW5nZSBDTVNHX0RBVEEgdG8gdXNlIF9fQ01TR19BTElHTiAoYW5kIHRodXMgd29yayBwcm9wZXJseSksIHJlZm9ybWF0IGZvcgogICBjb25zaXN0ZW5jeS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIE1vdmUgb3BlbnB0eS9jdHR5IHRlc3Qgb3V0c2lkZSBvZiBjYXNlIHN0YXRlbWVudAogICBhbmQgYWZ0ZXIgbm9ybWFsIG9wZW5wdHkgdGVzdC4KCjIwMDMwODEzCiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jXSBSZW1vdmUgI2lmZGVmIFRJT0NTQlJLIGtsdWRnZS4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDgvMTMgMDg6MzM6MDIKICAgICBbc2Vzc2lvbi5jXQogICAgIHVzZSBtb3JlIHBvcnRhYmxlIHRjc2VuZGJyZWFrKDMpIGFuZCBpZ25vcmUgYnJlYWtfbGVuZ3RoOwogICAgIG9rIGRlcmFhZHQsIG1pbGxlcnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDgvMTMgMDg6NDY6MzEKICAgICBbYXV0aDEuYyByZWFkY29uZi5jIHJlYWRjb25mLmggc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNzaC5jIHNzaF9jb25maWcKICAgICBzc2hfY29uZmlnLjUgc3NoY29ubmVjdDEuYyBzc2hkLjggc3NoZC5jIHNzaGRfY29uZmlnIHNzaGRfY29uZmlnLjVdCiAgICAgcmVtb3ZlIFJob3N0c0F1dGhlbnRpY2F0aW9uOyBzdWdnZXN0ZWQgYnkgZGptQCBiZWZvcmU7IG9rIGRqbUAsIGRlcmFhZHRALAogICAgIGZnc2NoQCwgbWlvZEAsIGhlbm5pbmdALCBqYWtvYkAgYW5kIG90aGVycwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOC8xMyAwOTowNzoxMAogICAgIFtyZWFkY29uZi5jIHNzaC5jXQogICAgIHNvY2tzNC0+c29ja3MsIHNpbmNlIHdpdGggc3VwcG9ydCBib3RoIDQgYW5kIDU7IGR0dWNrZXJAemlwLmNvbS5hdQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmhdCiAgIEFkZCBhIHRjc2VuZGJyZWFrIGZ1bmN0aW9uIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBoYXZlIG9uZSwgYmFzZWQgb24gdGhlCiAgIG9uZSBmcm9tIE9wZW5CU0QuCgoyMDAzMDgxMQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAodGhhbmtzIHRvIFNpbW9uIFdpbGtpbnNvbiBmb3IgaGVscCB3aXRoIHRoaXMgLWR0KQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNy8xNiAxNTowMjowNgogICAgIFthdXRoLWtyYjUuY10KICAgICBtY2MgLT4gZmNjOyBmcm9tIExvdmUgSPZybnF1aXN0IMVzdHJhbmQgPGxoYUBpdC5zdS5zZT4KICAgICBvdGhlcndpc2UgdGhlIGtlcmJlcm9zIGNyZWRlbnRpbmFsIGlzIHN0b3JlZCBpbiBhIG1lbW9yeSBjYWNoZQogICAgIGluIHRoZSBwcml2aWxlZ2VkIHNzaGQuIG9rIGphYm9iQCwgaGluQCAoc29tZSB0aW1lIGFnbykKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC94Y3J5cHQuY10gUmVtb3ZlIEN5Z3dpbiAjaWZkZWYgYmxvY2sgKGR1cGxpY2F0ZQogICBpbiBic2QtY3lnd2luX3V0aWwuaCkuCgoyMDAzMDgwOAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oXSBPbGRlciBMaW51eGVzIGhhdmUgQUlfUEFTU0lWRSBhbmQKICAgQUlfQ0FOT05OQU1FIGluIG5ldGRiLmggYnV0IG5vdCBBSV9OVU1FUklDSE9TVCwgc28gY2hlY2sgZWFjaCBkZWZpbml0aW9uCiAgIHNlcGFyYXRlbHkgYmVmb3JlIGRlZmluaW5nIHRoZW0uCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gRG9uJ3Qgc2V0IFBBTV9UVFkgaWYgdHR5IGlzIG51bGwuICBvayBkam1ACgoyMDAzMDgwNwogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gSGF2ZSBzZXNzaW9uX2JyZWFrX3JlcSBub3QgYXR0ZW1wdCB0byBzZW5kIGEgYnJlYWsKICAgaWYgVElPQ1NCUksgYW5kIFRJT0NDQlJLIGFyZSBub3QgZGVmaW5lZCAoZWcgQ3lnd2luKS4KIC0gKGR0dWNrZXIpIFtjYW5vaG9zdC5jXSBCdWcgIzMzNjogT25seSBjaGVjayBpcCBvcHRpb25zIGlmIElQX09QVElPTlMgaXMKICAgZGVmaW5lZCAoZml4ZXMgY29tcGlsZSBlcnJvciBvbiByZWFsbHkgb2xkIExpbnV4ZXMpLgogLSAoZHR1Y2tlcikgW2RlZmluZXMuaF0gQnVnICMzMzY6IEFkZCBDTVNHX0RBVEEgYW5kIENNU0dfRklSU1RIRFIgbWFjcm9zIGlmCiAgIG5vdCBhbHJlYWR5IGRlZmluZWQgKGVnIExpbnV4IHdpdGggc29tZSB2ZXJzaW9ucyBvZiBsaWJjNSksIGJhc2VkIG9uIHRob3NlCiAgIGZyb20gT3BlbkJTRC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuYyBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuaF0KICAgUmVtb3ZlIGluY29ycmVjdCBmaWxlbmFtZXMgZnJvbSBjb21tZW50cyAoZmlsZSBuYW1lcyBhcmUgaW4gSWQgdGFncykuCiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5oXSBNb3ZlIEN5Z3dpbgogICBzcGVjaWZpYyBkZWZpbmVzIGFuZCBpbmNsdWRlcyB0byBic2QtY3lnd2luX3V0aWwuaC4gIEZpeGVzIGJ1aWxkIGVycm9yIHRvby4KCjIwMDMwODAyCiAtIChkdHVja2VyKSBbbW9uaXRvci5oIG1vbml0b3Jfd3JhcC5oXSBSZW1vdmUgZXhjZXNzIGlkZW50IHRhZ3MuCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA3LzIyIDEzOjM1OjIyCiAgICAgW2F1dGgxLmMgYXV0aC5oIGF1dGgtcGFzc3dkLmMgbW9uaXRvci5jIG1vbml0b3IuaCBtb25pdG9yX3dyYXAuYwogICAgIG1vbml0b3Jfd3JhcC5oIHJlYWRjb25mLmMgcmVhZGNvbmYuaCBzZXJ2Y29uZi5jIHNlcnZjb25mLmggc2Vzc2lvbi5jIHNzaC4xCiAgICAgc3NoLmMgc3NoX2NvbmZpZy41IHNzaGNvbm5lY3QxLmMgc3NoZC5jIHNzaGRfY29uZmlnLjUgc3NoLmhdCiAgICAgcmVtb3ZlIChhbHJlYWR5IGRpc2FibGVkKSBLUkI0L0FGUyBzdXBwb3J0LCByZS1lbmFibGUgLWsgaW4gc3NoKDEpOwogICAgIHRlc3Qrb2sgaGVubmluZ0AKIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbiBhY2NvbmZpZy5oIGNvbmZpZ3VyZS5hY10gUmVtb3ZlIEtSQjQvQUZTIHN1cHBvcnQuCiAtIChkdHVja2VyKSBbYXV0aC1rcmI0LmMgcmFkaXguYyByYWRpeC5oXSBSZW1vdmUgS1JCNC9BRlMgc3BlY2lmaWMgZmlsZXMuCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA3LzIzIDA3OjQyOjQzCiAgICAgW3NzaGRfY29uZmlnXQogICAgIHJlbW92ZSBBRlM7IGl0b2p1bkAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDcvMjggMDk6NDk6NTYKICAgICBbc3NoLWtleWdlbi4xIHNzaC1rZXlnZW4uY10KICAgICBTdXBwb3J0IGZvciBnZW5lcmF0aW5nIERpZmZpZS1IZWxsbWFuIGdyb3VwcyAoL2V0Yy9tb2R1bGkpIGZyb20gc3NoLWtleWdlbi4KICAgICBCYXNlZCBvbiBjb2RlIGZyb20gUGhpbCBLYXJuLCBXaWxsaWFtIEFsbGVuIFNpbXBzb24gYW5kIE5pZWxzIFByb3Zvcy4KICAgICBvayBtYXJrdXNALCB0aGFua3Mgam1jQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNy8yOSAxODoyNDowMAogICAgIFtMSUNFTkNFIHByb2dyZXNzbWV0ZXIuY10KICAgICByZXBsYWNlIDQgY2xhdXNlIEJTRCBsaWNlbnNlZCBwcm9ncmVzc21ldGVyIGNvZGUgd2l0aCBhIHJlcGxhY2VtZW50CiAgICAgZnJvbSBOaWxzIE5vcmRtYW4gYW5kIG15c2VsZjsgb2sgZGVyYWFkdEAKICAgICAoY29waWVkIGZyb20gT3BlbkJTRCBhbiByZS1hcHBsaWVkIHBvcnRhYmxlIGNoYW5nZXMpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA3LzI5IDE4OjI2OjQ2CiAgICAgW3Byb2dyZXNzbWV0ZXIuY10KICAgICBmaXggbGVuZ3RoIGZvciAiLSBzdGFsbGVkIC0iIChpbmNsdWRlZCB3aXRoIHByZXZpb3VzIGltcG9ydCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDcvMzAgMDc6NDQ6MTQKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIHVzZSBvbmx5IDQgZGlnaXRzIGluIGZvcm1hdF9zaXplIChpbmNsdWRlZCB3aXRoIHByZXZpb3VzIGltcG9ydCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDcvMzAgMDc6NTM6MjcKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIHdoaXRlc3BhY2UgKGluY2x1ZGVkIHdpdGggcHJldmlvdXMgaW1wb3J0KQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNy8zMSAwOToyMTowMgogICAgIFthdXRoMi1ub25lLmNdCiAgICAgY2hlY2sgd2hldGhlciBwYXNzd2QgYXV0aCBpcyBhbGxvd2QsIHNpbWlsYXIgdG8gcHJvdG8gMTsgcm9iQHBpdG1hbi5jby56YQogICAgIG9rIGhlbm5pbmcKICAgLSBhdnNtQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA3LzMxIDE1OjUwOjE2CiAgICAgW2F0b21pY2lvLmNdCiAgICAgY29ycmVjdCBjb21tZW50OiBhdG9taWNpbyB0YWtlcyB2d3JpdGUsIG5vdCB3cml0ZTsgZGVyYWFkdEAgb2sKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDcvMzEgMjI6MzQ6MDMKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIHByaW50IHJhdGUgc2ltaWxhciBvbGQgdmVyc2lvbjsgcm91bmQgaW5zdGVhZCB0cnVuY2F0ZTsKICAgICAoaW5jbHVkZWQgaW4gcHJldmlvdXMgcHJvZ3Jlc3NtZXRlci5jIGNvbW1pdCkKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmhdCiAgIEFkZCBhIHRjZ2V0cGdycCBmdW5jdGlvbi4KIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbiBtb2R1bGkuYyBtb2R1bGkuaF0gQWRkIG5ldyBmaWxlcyBhbmQgdG8gTWFrZWZpbGUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuY10gRml4IGN1dC1hbmQtcGFzdGUgYnVnIGluIHRjZ2V0cGdycC4KCjIwMDMwNzMwCiAtIChkam0pIFthdXRoLXBhbS5jXSBEb24ndCB1c2UgY3JhcHB5IEFQSXMgbGlrZSBzcHJpbnRmLiBUaGFua3MgYmFsCgoyMDAzMDcyNgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3hjcnlwdC5jXSBGaXggdHlwbzogRElTQUJMRURfU0hBRE9XIC0+CiAgIERJU0FCTEVfU0hBRE9XLiAgRml4ZXMgSFAtVVggY29tcGlsZSBlcnJvci4KCjIwMDMwNzI0CiAtIChiYWwpIFthdXRoLXBhc3N3ZC5jIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIG9wZW5ic2QtY29tcGF0L3hjcnlwdC5jIAogICAgb3BlbmJzZC1jb21wYXQveGNyeXB0LmhdIFNwbGl0IG9mZiBlbmNyeXB0aW9uIGludG8geGNyeXB0KCkgaW50ZXJmYWNlLAogICAgYW5kIGlzb2xhdGUgc2hhZG93IHBhc3N3b3JkIGZ1bmN0aW9ucy4gIFRlc3RlZCBpbiBTb2xhcmlzLCBidXQgc2hvdWxkCiAgICBub3QgYnJlYWsgb3RoZXIgcGxhdGZvcm1zIHRvbyBiYWRseSAoZXhjZXB0IG1heWJlIEhQID0pLiAgQWxzbyBicmluZ3MKICAgIGF1dGgtcGFzc3dkLmMgaW50byBmdWxsIHN5bmMgd2l0aCBPcGVuQlNEIHRyZWUuCgoyMDAzMDcyMwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQmFjayBvdXQgY2hhbmdlIGZvciBidWcgIzYyMC4KCjIwMDMwNzE5CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzYyMDogRGVmaW5lIEJST0tFTl9HRVRBRERSSU5GTyBmb3IKICAgU29sYXJpcy94ODYuICBQYXRjaCBmcm9tIGpyaGV0dCBhdCBpc2l0ZS5uZXQuCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA3LzE0IDEyOjM2OjM3CiAgICAgW3NzaGQuY10KICAgICByZW1vdmUgdW5kb2N1bWVudGVkIC1WIG9wdGlvbi4gd291bGQgYmUgb25seSB1c2VmdWwgaWYgb3BlbnNzaCBpcyB1c2VkCiAgICAgYXMgc3NoIHYxIHNlcnZlciBmb3Igc3NoLmNvbSdzIHNzaCB2Mi4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDcvMTYgMTA6MzQ6NTMKICAgICBbc3NoLmMgc3NoZC5jXQogICAgIGRvbid0IGV4aXQgb24gbXVsdGlwbGUgLXYgb3IgLWQ7IG9rIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA3LzE2IDEwOjM2OjI4CiAgICAgW3NzaHR0eS5jXQogICAgIGNsZWFyIElVQ0xDIGluIGVudGVyX3Jhd19tb2RlOyBmcm9tIHJvYkBwaXRtYW4uY28uemE7IG9rIGRlcmFhZHRALCBmZ3NACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNy8xOCAwMTo1NDoyNQogICAgIFtzY3AuY10KICAgICB1c2VyaWQgaXMgdW5zaWduZWQsIGJ1dCB3ZWxsLCBmb3JjZSBpdCBhbnl3YXlzOyBhbmRydXNob2NrQGtvcm92aW5vLm5ldAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNy8xOSAwMDo0NTo1MwogICAgIFtzZnRwLWludC5jXQogICAgIGZpeCBzZnRwIGZpbGVuYW1lIHBhcnNpbmcgZm9yIGFyZ3VtZW50cyB3aXRoIGVzY2FwZWQgcXVvdGVzLiBieiAjNTE3OwogICAgIG9rIG1hcmt1cwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNy8xOSAwMDo0NjozMQogICAgIFtyZWdyZXNzL3NmdHAtY21kcy5zaF0KICAgICByZWdyZXNzIHRlc3QgZm9yIHNmdHAgYXJndW1lbnRzIHdpdGggZXNjYXBlZCBxdW90ZXM7IG9rIG1hcmt1cwoKMjAwMzA3MTQKIC0gKGR0dWNrZXIpIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBwb3J0LWFpeC5jXSBPbGRlciBBSVhlcyBkb24ndCBkZWNsYXJlCiAgIGxvZ2luZmFpbGVkIGF0IGFsbCwgc28gYXNzdW1lIDMtYXJnIGxvZ2luZmFpbGVkIGlmIG5vdCBkZWNsYXJlZC4KIC0gKGR0dWNrZXIpIFtwb3J0LWFpeC5oXSBXb3JrIGFyb3VuZCBuYW1lIGNvbGxpc2lvbiBvbiBBSVggZm9yIHJfdHlwZSBieQogICB1bmRlZidpbmcgaXQuCiAtIChkdHVja2VyKSBCdWcgIzU0MzogW2NvbmZpZ3VyZS5hYyBwb3J0LWFpeC5jIHBvcnQtYWl4LmhdCiAgIENhbGwgc2V0YXV0aGRiKCkgYmVmb3JlIGxvZ2luZmFpbGVkKCksIHdoaWNoIG1heSBsb2FkIHBhc3N3b3JkIHJlZ2lzdHJ5LQogICBzcGVjaWZpYyBmdW5jdGlvbnMuICBCYXNlZCBvbiBwYXRjaCBieSBjYXdsZmllbCBhdCB1cy5pYm0uY29tLgogLSAoZHR1Y2tlcikgW3BvcnQtYWl4LmhdIEZpeCBwcm90b3R5cGVzLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGF2c21AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDcvMDkgMTM6NTg6MTkKICAgICBba2V5LmNdCiAgICAgbWlub3IgdHdlYWs6IHdoZW4gZ2VuZXJhdGluZyB0aGUgaGV4IGZpbmdlcnByaW50LCBnaXZlIHN0cmxjYXQgdGhlIGZ1bGwKICAgICBib3VuZCB0byB0aGUgYnVmZmVyLCBhbmQgYWRkIGEgY29tbWVudCBiZWxvdyBleHBsYWluaW5nIHdoeSB0aGUKICAgICB6ZXJvLXRlcm1pbmF0aW9uIGlzIG9uZSBsZXNzIHRoYW4gdGhlIGJvdW5kLiAgbWFya3VzQCBvawogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNy8xMCAxNDo0MjoyOAogICAgIFtwYWNrZXQuY10KICAgICB0aGUgMl4oYmxvY2tzaXplKjIpIHJla2V5aW5nIGxpbWl0IGlzIHRvbyBleHBlbnNpdmUgZm9yIDNERVMsCiAgICAgYmxvd2Zpc2gsIGV0Yywgc28gZW5mb3JjZSBhIDFHQiBsaW1pdCBmb3Igc21hbGwgYmxvY2tzaXplcy4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDcvMTAgMjA6MDU6NTUKICAgICBbc2Z0cC5jXQogICAgIHN5bmMgdXNhZ2Ugd2l0aCBtYW5wYWdlLCBhZGQgbWlzc2luZyAtUgoKMjAwMzA3MDgKIC0gKGR0dWNrZXIpIFthY2NvbmZpZy5oIGF1dGgtcGFzc3dkLmMgY29uZmlndXJlLmFjIHNlc3Npb24uYyBwb3J0LWFpeC5bY2hdXQogICBJbmNsdWRlIEFJWCBoZWFkZXJzIGZvciBhdXRoZW50aWNhdGlvbiBmdW5jdGlvbnMgYW5kIG1ha2UgY2FsbHMgbWF0Y2gKICAgcHJvdG90eXBlcy4gIFRlc3QgZm9yIGFuZCBoYW5kbGUgMy1hcmcgYW5kIDQtYXJnIHZhcmlhbnRzIG9mIGxvZ2luZmFpbGVkLgogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIHNldHBjcmVkKCkuCiAtIChkdHVja2VyKSBbYXV0aC1wYXNzd2QuYyBhdXRoLmMgc2Vzc2lvbi5jIHNzaGQuYyBwb3J0LWFpeC5jIHBvcnQtYWl4LmhdCiAgIENvbnZlcnQgYWl4bG9naW5tc2cgaW50byBwbGF0Zm9ybS1pbmRlcGVuZGFudCBCdWZmZXIgbG9naW5tc2cuCgoyMDAzMDcwNwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM2MDA6IENoZWNrIHRoYXQgZ2V0cnVzYWdlIGlzIGRlY2xhcmVkIGJlZm9yZQogICBzZWFyY2hpbmcgbGlicmFyaWVzIGZvciBpdC4gIEZpeGVzIGJ1aWxkIGVycm9ycyBvbiBOQ1IgTVAtUkFTLgoKMjAwMzA3MDYKIC0gKGR0dWNrZXIpIFtzc2gtcmFuZC1oZWxwZXIuYyBsb2dpbnJlYy5jXQogICBBcHBseSBhdG9taWNpbyB0eXBpbmcgY2hhbmdlIHRvIHRoZXNlIHRvby4KCjIwMDMwNzAzCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzI4IDA3OjQ4OjEwCiAgICAgW3NzaGQuY10KICAgICByZXBvcnQgcGlkZmlsZSBjcmVhdGlvbiBlcnJvcnMsIGJhc2VkIG9uIHBhdGNoIGZyb20gUm91bWVuIFBldHJvdjsKICAgICBvayBtYXJrdXNACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNi8yOCAxNjoyMzowNgogICAgIFthdG9taWNpby5jIGF0b21pY2lvLmggYXV0aGZkLmMgY2xpZW50bG9vcC5jIG1vbml0b3Jfd3JhcC5jIG1zZy5jCiAgICAgcHJvZ3Jlc3NtZXRlci5jIHNjcC5jIHNmdHAtY2xpZW50LmMgc3NoLWtleXNjYW4uYyBzc2guaCBzc2hjb25uZWN0LmMKICAgICBzc2hkLmNdCiAgICAgZGVhbCB3aXRoIHR5cGluZyBvZiB3cml0ZSB2cyByZWFkIGluIGF0b21pY2lvCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzI5IDEyOjQ0OjM4CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBtZW1zZXQgMCwgbm90IFwwOyBhbmRydXNob2NrQGtvcm92aW5vLm5ldAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNy8wMiAxMjo1NjozNAogICAgIFtjaGFubmVscy5jXQogICAgIGRlbnkgZHluYW1pYyBmb3J3YXJkaW5nIHdpdGggLVIgZm9yIHYxLCB0b287IG9rIGRqbUAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDcvMDIgMTQ6NTE6MTYKICAgICBbY2hhbm5lbHMuYyBzc2guMSBzc2hfY29uZmlnLjVdCiAgICAgKHJlKWFkZCBzb2NrczUgc3VwcHBvcnQgdG8gLUQ7IG9rIGRqbUAKICAgICBub3cgc3NoKDEpIGNhbiBhY3QgYm90aCBhcyBhIHNvY2tzIDQgYW5kIHNvY2tzIDUgc2VydmVyIGFuZAogICAgIGR5bmFtaWNhbGx5IGZvcndhcmQgcG9ydHMuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA3LzAyIDIwOjM3OjQ4CiAgICAgW3NzaC5jXQogICAgIGNvbnZlcnQgaG9zdGtleWFsaWFzIHRvIGxvd2VyY2FzZSwgb3RoZXJ3aXNlIHVwcGVyY2FzZSBhbGlhc2VzIHdpbGwKICAgICBub3QgbWF0Y2ggYXQgYWxsOyBvayBoZW5uaW5nQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNy8wMyAwODoyMTo0NgogICAgIFtyZWdyZXNzL2R5bmFtaWMtZm9yd2FyZC5zaF0KICAgICBhZGQgc29ja3M1OyBzcGVlZHVwOyByZWZvcm1hdDsgYmFzZWQgb24gcGF0Y2ggZnJvbSBkdHVja2VyQHppcC5jb20uYXUKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDcvMDMgMDg6MjQ6MTMKICAgICBbcmVncmVzcy9NYWtlZmlsZV0KICAgICBlbmFibGUgdGVzdHMgZm9yIGR5bmFtaWMgZndkIHZpYSBzb2NrcyAoLUQpLCB1c2VzIG5jKDEpCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA3LzAzIDA4OjA5OjA2CiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzc2gta2V5c2lnbi5jIHNzaC5jXQogICAgIGZpeCBBZGRyZXNzRmFtaWx5IG9wdGlvbiBpbiBjb25maWcgZmlsZSwgZnJvbSBicmVudEBncmF2ZWxhbmQubmV0OwogICAgIG9rIG1hcmt1c0AKCjIwMDMwNjMwCiAtIChkam0pIFNlYXJjaCBmb3Igc3VwcG9ydCBmdW5jdGlvbnMgbmVjZXNzYXJ5IHRvIGJ1aWxkIG91ciAKICAgZ2V0cnJzZXRieW5hbWUoKSByZXBsYWNlbWVudC4gUGF0Y2ggZnJvbSBSb3VtZW4gUGV0cm92IAoKMjAwMzA2MjkKIC0gKGR0dWNrZXIpIFtpbmNsdWRlcy5oXSBCdWcgIzYwMjogbW92ZSAjaW5jbHVkZSBvZiBuZXRkYi5oIHRvIGFmdGVyIGluLmgKICAgKGZpeGVzIGNvbXBpbGVyIHdhcm5pbmdzIG9uIFNvbGFyaXMgMi41LjEpLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQWRkIHNhbml0eSB0ZXN0IGFmdGVyIHN5c3RlbS1kZXBlbmRhbnQgY29tcGlsZXIKICAgZmxhZyBtb2RpZmljYXRpb25zLgogICAKMjAwMzA2MjgKIC0gKGRqbSkgQnVnICM1OTE6IHVzZSBQS0NTIzE1IHByaXZhdGUga2V5IGxhYmVsIGFzIGEgY29tbWVudCBpbiBjYXNlIAogICBvZiBPcGVuU0MuIFJlcG9ydCBhbmQgcGF0Y2ggZnJvbSBsYXJzY2hAdHJ1c3RjZW50ZXIuZGUKIC0gKGRqbSkgQnVnICM1OTM6IFNhbml0eSBjaGVjayBPcGVuU0MgY2FyZCByZWFkZXIgbnVtYmVyOyBwYXRjaCBmcm9tIAogICBhakBkdW5nZW9uLmlua2EuZGUKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMjMgMDk6MDI6NDQKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGRvY3VtZW50IEVuYWJsZVNTSEtleXNpZ247IGJ1Z3ppbGxhICM1OTk7IG9rIGRlcmFhZHRALCBqbWNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzI0IDA4OjIzOjQ2CiAgICAgW2F1dGgyLWhvc3RiYXNlZC5jIGF1dGgyLXB1YmtleS5jIGF1dGgyLmMgY2hhbm5lbHMuYyBrZXkuYyBrZXkuaAogICAgICBtb25pdG9yLmMgcGFja2V0LmMgcGFja2V0Lmggc2VydmVybG9vcC5jIHNzaGNvbm5lY3QyLmMgc3NoZC5jXQogICAgIGludCAtPiB1X2ludDsgb2sgZGptQCwgZGVyYWFkdEAsIG1vdXJpbmdACiAgIC0gbWlvZEBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNi8yNSAyMjozOTozNgogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIFR5cG8gcG9saWNlOiBhdHRyaWJ1dGUgaXMgYmV0dGVyIHdyaXR0ZW4gd2l0aCBhbiAncicuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzI2IDIwOjA4OjMzCiAgICAgW3JlYWRjb25mLmNdCiAgICAgZG8gbm90IGR1bXAgY29yZSBmb3IgJ3NzaCAtbyBwcm94eWNvbW1hbmQgaG9zdCc7IG9rIGRlcmFhZHRACiAtIChkdHVja2VyKSBbcmVncmVzcy9keW5hbWljLWZvcndhcmQuc2hdIEltcG9ydCBuZXcgcmVncmVzc2lvbiB0ZXN0LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM1NzA6IEhhdmUgLi9jb25maWd1cmUgLS1lbmFibGUtRkVBVFVSRSAKICAgYWN0dWFsbHkgZW5hYmxlIHRoZSBmZWF0dXJlLCBmb3IgdGhvc2Ugbm9ybWFsbHkgZGlzYWJsZWQuICBQYXRjaCBieQogICBvcGVuc3NoIChhdCkgcm91bWVucGV0cm92LmluZm8uCgoyMDAzMDYyNAogLSAoZHR1Y2tlcikgSGF2ZSBjb25maWd1cmUgcmVmZXIgdGhlIHVzZXIgdG8gY29uZmlnLmxvZyBhbmQKICAgY29udHJpYi9maW5kc3NsLnNoIGZvciBPcGVuU1NMIGhlYWRlci9saWJyYXJ5IG1pc21hdGNoZXMuCgoyMDAzMDYyMgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNi8yMSAwOToxNDowNQogICAgIFtyZWdyZXNzL3JlY29uZmlndXJlLnNoXQogICAgIG1pc3NpbmcgJFNVRE87IGZyb20gZHR1Y2tlckB6aXAuY29tLmF1CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzE4IDExOjI4OjExCiAgICAgW3NzaC1yc2EuY10KICAgICBiYWNrb3V0IGxhc3QgY2hhbmdlLCBzaW5jZSBpdCB2aW9sYXRlcyBwa2NzIzEKICAgICBzd2l0Y2ggdG8gc2hhcmUvbWlzYy9saWNlbnNlLnRlbXBsYXRlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzIwIDA1OjQ3OjU4CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgc3luYyBkZXNjcmlwdGlvbiBvZiBwcm90b2NvbCAyIGNpcGhlciBwcm9wb3NhbDsgb2sgbWFya3VzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzIwIDA1OjQ4OjIxCiAgICAgW3NzaGRfY29uZmlnXQogICAgIHN5bmMgc29tZSBpbXBsZW1lbnRlZCBvcHRpb25zOyBvayBtYXJrdXNACiAtIChkdHVja2VyKSBbcmVncmVzcy9hdXRob3JpemVkX2tleXNfcm9vdF0gUmVtb3ZlIHRlbXAgZGF0YSBmaWxlIGZyb20gQ1ZTLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3NldHByb2N0aXRsZS5jXSBFbnN1cmUgU1BUX1RZUEUgaXMgZGVmaW5lZCBiZWZvcmUKICAgdGVzdGluZyBpdHMgdmFsdWUuCgoyMDAzMDYxOAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzEyIDA3OjU3OjM4CiAgICAgW21vbml0b3IuYyBzc2hsb2dpbi5jIHNzaHB0eS5jXQogICAgIHR5cG9zOyBkdHVja2VyIGF0IHppcC5jb20uYXUKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMTIgMTI6MjI6NDcKICAgICBbTElDRU5DRV0KICAgICBtZW50aW9uIG1vcmUgY29weXJpZ2h0IGhvbGRlcnM7IG9rIG1hcmt1c0AKICAgLSBuaW5vQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzEyIDE1OjM0OjA5CiAgICAgW3NjcC5jXQogICAgIFR5cG8uIE9rIG1hcmt1c0AuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzEyIDE5OjEyOjAzCiAgICAgW3NjYXJkLmMgc2NhcmQuaCBzc2gtYWdlbnQuYyBzc2guY10KICAgICBhZGQgc2NfZ2V0X2tleV9sYWJlbDsgbGFyc2NoIGF0IHRydXN0Y2VudGVyLmRlOyBidWd6aWxsYSM1OTEKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMTYgMDg6MjI6MzUKICAgICBbc3NoLXJzYS5jXQogICAgIG1ha2Ugc3VyZSB0aGUgc2lnbmF0dXJlIGhhcyBhdCBsZWFzdCB0aGUgZXhwZWN0ZWQgbGVuZ3RoIChkb24ndAogICAgIGluc2lzdCBvbiBsZW4gPT0gaGxlbiArIG9pZGxlbiwgc2luY2UgdGhpcyBicmVha3Mgc29tZSBzbWFydGNhcmRzKQogICAgIGJ1Z3ppbGxhICM1OTI7IG9rIGRqbUAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMTYgMTA6MjI6NDUKICAgICBbc3NoLWFkZC5jXQogICAgIHByaW50IG91dCBrZXkgY29tbWVudCBvbiBlYWNoIHByb21wdDsgbWFrZSBzc2gtYXNrcGFzcyBtb3JlIHVzZWFibGU7IG9rIGRqbUAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMTcgMTg6MTQ6MjMKICAgICBbY2lwaGVyLWN0ci5jXQogICAgIHVzZSBsaWNlbnNlIGZyb20gL3Vzci9zaGFyZS9taXNjL2xpY2Vuc2UudGVtcGxhdGUgZm9yIG5ldyBjb2RlCiAtIChkdHVja2VyKSBbcmVjb25maWd1cmUuc2ggcmVrZXkuc2ggc2Z0cC1iYWRjbWRzLnNoXQogICBJbXBvcnQgbmV3IHJlZ3Jlc3Npb24gdGVzdHMgZnJvbSBPcGVuQlNECiAtIChkdHVja2VyKSBbcmVncmVzcy9jb3B5LjEgcmVncmVzcy9jb3B5LjJdIFJlbW92ZSB0ZW1wIGRhdGEgZmlsZXMgZnJvbSBDVlMuCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jIChyZWdyZXNzLykKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMDIgMTI6MjE6MTMKICAgICBbTWFrZWZpbGVdCiAgICAgZW5hYmxlIHJla2V5IHRlc3QKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMDQgMDk6MzQ6MjIKICAgICBbTWFrZWZpbGUgc2Z0cC1jbWRzLnNoXQogICAgIE1vcmUgcmVncmVzc2lvbiB0ZXN0cywgaW5jbHVkaW5nIHJlY2VudCBkaXJlY3RvcnkgcmVuYW1lIGJ1Zzsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xNCAyMjowODoyNwogICAgIFtzc2gtY29tLWNsaWVudC5zaCBzc2gtY29tLWtleWdlbi5zaCBzc2gtY29tLXNmdHAuc2ggc3NoLWNvbS5zaF0KICAgICB0ZXN0IGFnYWluc3Qgc29tZSBuZXcgY29tbWVyaWNhbCB2ZXJzaW9ucwogICAtIG1vdXJpbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDUvMTUgMDQ6MDc6MTIKICAgICBbc2Z0cC1jbWRzLnNoXQogICAgIEFkdmFuY2VkIHB1dC9nZXQgdGVzdGluZyBmb3Igc2Z0cC4gIE9LIEBkam0KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMTIgMTU6NDA6MDEKICAgICBbdHJ5LWNpcGhlcnMuc2hdCiAgICAgYWRkIGN0cgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNi8xMiAxNTo0MzozMgogICAgIFtNYWtlZmlsZV0KICAgICB0ZXN0IC1IVVA7IGR0dWNrZXIgYXQgemlwLmNvbS5hdQoKMjAwMzA2MTQKIC0gKGRqbSkgVXBkYXRlIGxpY2Vuc2Ugb24gZmFrZS1yZmMyNTUzLltjaF07IG9rIGl0b2p1bkAKCjIwMDMwNjExCiAtIChkam0pIE1lbnRpb24gcG9ydGFibGUgY29weXJpZ2h0IGhvbGRlcnMgaW4gTElDRU5TRQogLSAoZGptKSBQdXQgbGljZW5zZXMgb24gc3Vic3RhbnRpYWwgaGVhZGVyIGZpbGVzCiAtIChkam0pIFN5bmMgTElDRU5TRSBhZ2FpbnN0IE9wZW5CU0QKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNi8xMCAwOToxMjoxMQogICAgIFtzY3AuMSBzZnRwLXNlcnZlci44IHNzaC4xIHNzaC1hZGQuMSBzc2gtYWdlbnQuMSBzc2hfY29uZmlnLjVdCiAgICAgW3NzaGQuOCBzc2hkX2NvbmZpZy41IHNzaC1rZXlnZW4uMSBzc2gta2V5c2Nhbi4xIHNzaC1rZXlzaWduLjhdCiAgICAgLSBzZWN0aW9uIHJlb3JkZXIKICAgICAtIENPTVBBVElCSUxJVFkgbWVyZ2UKICAgICAtIG1hY3JvIGNsZWFudXAKICAgICAtIGtpbGwgd2hpdGVzcGFjZSBhdCBFT0wKICAgICAtIG5ldyBzZW50ZW5jZSwgbmV3IGxpbmUKICAgICBzc2ggcGFnZXMgb2sgbWFya3VzQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMTAgMjI6MjA6NTIKICAgICBbcGFja2V0LmMgcHJvZ3Jlc3NtZXRlci5jXQogICAgIG1vc3RseSBhbnNpIGNsZWFudXA7IHB2YWwgb2sKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNi8xMSAxMDoxNjoxNgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgY2xlYW4gdXAgY2hlY2tfaG9zdF9rZXkoKSBhbmQgaW1wcm92ZSBTU0hGUCBmZWVkYmFjay4gb2sgbWFya3VzQAogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzExIDEwOjE4OjQ3CiAgICAgW2Rucy5jXQogICAgIHN5bmMgd2l0aCBjaGVja19ob3N0X2tleSgpIGNoYW5nZQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNi8xMSAxMToxODozOAogICAgIFthdXRoZmQuYyBhdXRoZmQuaCBzc2gtYWRkLmMgc3NoLWFnZW50LmNdCiAgICAgbWFrZSBhZ2VudCBjb25zdHJhaW50cyAobGlmZXRpbWUsIGNvbmZpcm0pIHdvcmsgd2l0aCBzbWFydGNhcmQga2V5czsgCiAgICAgb2sgbWFya3VzQAoKCjIwMDMwNjA5CiAtIChkam0pIFN5bmMgUkVBRE1FLnNtYXJ0Y2FyZCB3aXRoIE9wZW5CU0QgLWN1cnJlbnQKIC0gKGRqbSkgUmUtbWVyZ2UgT3BlblNDIGluZm8gaW50byBSRUFETUUuc21hcnRjYXJkCgoyMDAzMDYwNgogLSAoZHR1Y2tlcikgW3VpZHN3YXAuY10gRml4IHNldHJldWlkIGFuZCBhZGQgbWlzc2luZyBhcmdzIHRvIGZhdGFsKCkuIG9rIGRqbUAKCjIwMDMwNjA1CiAtIChkam0pIFN1cHBvcnQgQUlfTlVNRVJJQ0hPU1QgaW4gZmFrZS1nZXRhZGRyaW5mby5jLiBOZWVkZWQgZm9yIHJlY2VudAogICBjYW5vaG9zdC5jIGNoYW5nZXMuCiAtIChkam0pIEltcGxlbWVudCBwYXJhbm9pZCBwcml2IGRyb3BwaW5nIGNoZWNrcywgYmFzZWQgb246CiAgICJTZXRVSUQgZGVteXN0aWZpZWQiIC0gSGFvIENoZW4sIERhdmlkIFdhZ25lciBhbmQgRHJldyBEZWFuCiAgIFByb2NlZWRpbmdzIG9mIFVTRU5JWCBTZWN1cml0eSBTeW1wb3NpdW0gMjAwMgogLSAoZGptKSBEb24ndCB1c2UgeG1hbGxvYygpIG9yIHB1bGwgaW4gdG9wbGV2ZWwgaGVhZGVycyBpbiBmYWtlLSogY29kZQogLSAoZGptKSBNZXJnZSBhbGwgdGhlIG9wZW5ic2QvZmFrZS0qIGludG8gZmFrZS1yZmMyNTUzLltjaF0KIC0gKGRqbSkgQnVnICM1ODggLSBBZGQgc2NhcmQtb3BlbnNjLm8gYmFjayB0byBNYWtlZmlsZS5pbgogICBQYXRjaCBmcm9tIGxhcnNjaEB0cnVzdGNlbnRlci5kZQogLSAoZGptKSBCdWcgIzU4OSAtIHNjYXJkLW9wZW5zYzogbG9hZCBvbmx5IGtleXMgd2l0aCBhIHByaXZhdGUga2V5cwogICBQYXRjaCBmcm9tIGxhcnNjaEB0cnVzdGNlbnRlci5kZQogLSAoZHR1Y2tlcikgQWRkIGluY2x1ZGVzLmggdG8gZmFrZS1yZmMyNTUzLmMgc28gaXQgd2lsbCBidWlsZC4KIC0gKGR0dWNrZXIpIERlZmluZSBFQUlfTk9OQU1FIGluIGZha2UtcmZjMjU1My5oICh1c2VkIGJ5IGZha2UtcmZjMjU1My5jKS4KCjIwMDMwNjA0CiAtIChkam0pIEJ1ZyAjNTczIC0gUmVtb3ZlIHVubmVlZGVkIEtyYiBoZWFkZXJzIGFuZCBjb21wYXQgZ29vcC4gUGF0Y2ggZnJvbQogICBzaW1vbkBzeHcub3JnLnVrIChBbHNvIG1hdGNoZXMgYSBjaGFuZ2UgaW4gT3BlbkJTRCBhIHdoaWxlIGFnbykKIC0gKGRqbSkgQnVnICM1NzcgLSB3cm9uZyBmbGFnIGluIHNjYXJkLW9wZW5zYy5jIHNjX3ByaXZhdGVfZGVjcnlwdC4gCiAgIFBhdGNoIGZyb20gbGFyc2NoQHRydXN0Y2VudGVyLmRlOyBvayBtYXJrdXNACiAtIChkam0pIEJ1ZyAjNTg0OiBzY2FyZC1vcGVuc2MuYyBkb2Vzbid0IHdvcmsgd2l0aG91dCBQSU4uIFBhdGNoIGZyb20gCiAgIGxhcnNjaEB0cnVzdGNlbnRlci5kZTsgb2sgbWFya3VzQAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzA0IDA4OjI1OjE4CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBkaXNhYmxlIGNoYWxsZW5nZS9yZXNwb25zZSBhbmQga2V5Ym9hcmQtaW50ZXJhY3RpdmUgYXV0aCBtZXRob2RzIAogICAgIHVwb24gaG9zdGtleSBtaXNtYXRjaC4gYmFzZWQgb24gcGF0Y2ggZnJvbSBmY3VzYWNrIEFUIGZjdXNhY2suY29tLiAKICAgICBieiAjNTgwOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzA0IDEwOjIzOjQ4CiAgICAgW3NzaGQuY10KICAgICByZW1vdmUgZHVwbGljYXRlZCBncm91cC1kcm9wcGluZyBjb2RlOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzA0IDEyOjAzOjU5CiAgICAgW3NlcnZlcmxvb3AuY10KICAgICByZW1vdmUgYml0cm90dGVuIGNvbW1ldDsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNi8wNCAxMjoxODo0OQogICAgIFtzY3AuY10KICAgICBhbnNpZnk7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMDQgMTI6NDA6MzkKICAgICBbc2NwLmNdCiAgICAga2lsbCBzc2ggcHJvY2VzcyB1cG9uIHJlY2VpcHQgb2Ygc2lnbmFsLCBieiAjMjQxLgogICAgIGJhc2VkIG9uIHBhdGNoIGZyb20gZXNiIEFUIGhhd2FpaS5lZHU7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMDQgMTI6NDE6MjIKICAgICBbc2Z0cC5jXQogICAgIGtpbGwgc3NoIHByb2Nlc3Mgb24gcmVjZWlwdCBvZiBzaWduYWw7IG9rIG1hcmt1c0AKIC0gKGRqbSkgVXBkYXRlIHRvIGZpeCBvZiBidWcgIzU4NDogbG9jayBjYXJkIGJlZm9yZSByZXR1cm4uIAogICBGcm9tIGxhcnNjaEB0cnVzdGNlbnRlci5kZQogLSAoZGptKSBBbHdheXMgdXNlIG15c2lnbmFsKCkgZm9yIFNJR0FMUk0KCjIwMDMwNjAzCiAtIChkam0pIFJlcGxhY2Ugc2V0cHJvY3RpdGxlIHJlcGxhY2VtZW50IHdpdGggY29kZSBkZXJpdmVkIGZyb20gCiAgIFVDQiBzZW5kbWFpbAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA2LzAyIDA5OjE3OjM0CiAgICAgW2F1dGgyLWhvc3RiYXNlZC5jIGF1dGguYyBhdXRoLW9wdGlvbnMuYyBhdXRoLXJob3N0cy5jIGF1dGgtcmgtcnNhLmNdCiAgICAgW2Nhbm9ob3N0LmMgbW9uaXRvci5jIHNlcnZjb25mLmMgc2VydmNvbmYuaCBzZXNzaW9uLmMgc3NoZF9jb25maWddCiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgZGVwcmVjYXRlIFZlcmlmeVJldmVyc2VNYXBwaW5nIHNpbmNlIGl0J3MgZGFuZ2Vyb3VzIGlmIGNvbWJpbmVkCiAgICAgd2l0aCBJUCBiYXNlZCBhY2Nlc3MgY29udHJvbCBhcyBub3RlZCBieSBNaWtlIEhhcmRpbmc7IHJlcGxhY2Ugd2l0aAogICAgIGEgVXNlRE5TIG9wdGlvbiwgVXNlRE5TIGlzIG9uIGJ5IGRlZmF1bHQgYW5kIGluY2x1ZGVzIHRoZQogICAgIFZlcmlmeVJldmVyc2VNYXBwaW5nIGNoZWNrOyB3aXRoIGl0b2p1bkAsIHByb3Zvc0AsIGpha29iQCBhbmQgZGVyYWFkdEAKICAgICBvayBkZXJhYWR0QCwgZGptQAogICAtIG1pbGxlcnRAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMDMgMDI6NTY6MTYKICAgICBbc2NwLmNdCiAgICAgUmVtb3ZlIHRoZSBhZHZlcnRpc2luZyBjbGF1c2UgaW4gdGhlIFVDQiBsaWNlbnNlIHdoaWNoIEJlcmtlbGV5CiAgICAgcmVzY2luZGVkIDIyIEp1bHkgMTk5OS4gIFByb29mZWQgYnkgbXlzZWxmIGFuZCBUaGVvLgogLSAoZGptKSBGaXggcG9ydGFibGUtc3BlY2lmaWMgdXNlcyBvZiB2ZXJpZnlfcmV2ZXJzZV9tYXBwaW5nIHRvbwogLSAoZGptKSBTeW5jIG9wZW5ic2QtY29tcGF0IHdpdGggT3BlbkJTRCBDVlMuIAogICAgLSBObyBtb3JlIDQtdGVybSBCU0QgbGljZW5zZXMgaW4gbGlua2VkIGNvZGUKIC0gKGR0dWNrZXIpIFtwb3J0LWFpeC5jIGJzZC1jcmF5LmNdIEZpeCB1c2VzIG9mIHZlcmlmeV9yZXZlcnNlX21hcHBpbmcuCgoyMDAzMDYwMgogLSAoZGptKSBGaXggc2VndiBmcm9tIGJhZCByZW9yZGVyaW5nIGluIGF1dGgtcGFtLmMKIC0gKGRqbSkgQWx3YXlzIHVzZSBzYXZlZF9hcmd2IGluIHNzaGQuYyBhcyBjb21wYXRfaW5pdF9zZXRwcm9jdGl0bGUgbWF5IAogICBjbG9iYmVyCiAtICh0aW0pIG9wZW5ic2QtY29tcGF0L3htbWFwLltjaF0gTGljZW5zZSBjbGFyaWZpY2F0aW9ucy4gQWRkIG1pc3NpbmcKICAgQ1ZTIElELgogLSAoZGptKSBSZW1vdmUgIm5vaXA2IiBvcHRpb24gZnJvbSBSZWRIYXQgc3BlYyBmaWxlLiBUaGlzIG1heSBub3cgYmUgCiAgIHNldCBhdCBydW50aW1lIHVzaW5nIEFkZHJlc3NGYW1pbHkgb3B0aW9uLgogLSAoZGptKSBGaXggdXNlIG9mIG1hY3JvIGJlZm9yZSAjZGVmaW5lIGluIGNpcGhlci1hZXMuYwogLSAoZGptKSBTeW5jIGxpY2Vuc2Ugb24gb3BlbmJzZC1jb21wYXQvYmluZHJlc3Zwb3J0LmMgd2l0aCBPcGVuQlNEIENWUwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzI2IDEyOjU0OjQwCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBmaXggZm9ybWF0IHN0cmluZ3M7IG9rIG1hcmt1c0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzI5IDE2OjU4OjQ1CiAgICAgW3NzaGQuYyB1aWRzd2FwLmNdCiAgICAgc2V0ZXVpZCBhbmQgc2V0ZWdpZDsgbWFya3VzIG9rCiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDYvMDIgMDg6MzE6MTAKICAgICBbc3NoX2NvbmZpZy41XQogICAgIFZlcmlmeUhvc3RLZXlETlMgaXMgdjIgb25seS4gb2sgbWFya3VzQAoKMjAwMzA1MzAKIC0gKGR0dWNrZXIpIEFkZCBtaXNzaW5nIHNlbWljb2xvbiBpbiBtZDVjcnlwdC5jLCBwYXRjaCBmcm9tIG9wZW5zc2ggYXQKICAgcm91bWVucGV0cm92LmluZm8KIC0gKGR0dWNrZXIpIERlZmluZSBTU0hEX0FDUVVJUkVTX0NUVFkgZm9yIE5DUiBNUC1SQVMgYW5kIFJlbGlhbnQgVW5peC4KCjIwMDMwNTI2CiAtIChkam0pIEF2b2lkIGF1dGgyLWNoYWxsLmMgd2FybmluZyB3aGVuIGNvbXBpbGluZyB3aXRob3V0IAogICBQQU0sIEJTRF9BVVRIIGFuZCBTS0VZCgoyMDAzMDUyNQotIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDUvMjQgMDk6MDI6MjIKICAgICBbbG9nLmNdCiAgICAgcGFzcyBsb2dnZWQgZGF0YSB0aHJvdWdoIHN0cm52aXM7IG9rIG1hcmt1cwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8yNCAwOTozMDo0MAogICAgIFthdXRoZmlsZS5jIG1vbml0b3IuYyBzZnRwLWNvbW1vbi5jIHNzaHB0eS5jXQogICAgIGNhc3Qgc29tZSB0eXBlcyBmb3IgcHJpbnRpbmc7IG9rIG1hcmt1c0AKCjIwMDMwNTI0CiAtIChkdHVja2VyKSBDb3JyZWN0IC0tb3Nmc2lhIGluIElOU1RBTEwuICBQYXRjaCBieSBza2VsZXRlbiBhdCBzaGlsbGVzdC5uZXQKCjIwMDMwNTIzCiAtIChkam0pIFVzZSBWSVNfU0FGRSBvbiBsb2dnZWQgc3RyaW5ncyByYXRoZXIgdGhhbiBkZWZhdWx0IHN0cm52aXMgCiAgIGVuY29kaW5nICh3aGljaCBlbmNvZGVzIG1hbnkgbW9yZSBjaGFyYWN0ZXJzKQogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzIwIDEyOjAzOjM1CiAgICAgW3NmdHAuMV0KICAgICAtIG5ldyBzZW50ZW5jZSwgbmV3IGxpbmUKICAgICAtIGFkZGVkIC5YcidzCiAgICAgLSB0eXBvcwogICAgIG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDUvMjAgMTI6MDk6MzEKICAgICBbc3NoLjEgc3NoX2NvbmZpZy41IHNzaGQuOCBzc2hkX2NvbmZpZy41IHNzaC1rZXlnZW4uMV0KICAgICBuZXcgc2VudGVuY2UsIG5ldyBsaW5lCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzIzIDA4OjI5OjMwCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBmaXggbGVhazsgb2sgbWFya3VzQAoKMjAwMzA1MjAKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDUvMTggMjM6MjI6MDEKICAgICBbbG9nLmNdCiAgICAgdXNlIHN5c2xvZ19yKCkgaW4gYSBzaWduYWwgaGFuZGxlciBjYWxsZWQgcGxhY2U7IG1hcmt1cyBvawogLSAoZGptKSBDb25maWd1cmUgbG9naWMgdG8gZGV0ZWN0IHN5c2xvZ19yIGFuZCBmcmllbmRzCgoyMDAzMDUxOQogLSAoZGptKSBTeW5jIGF1dGgtcGFtLmggd2l0aCB3aGF0IHdlIGFjdHVhbGx5IGltcGxlbWVudAoKMjAwMzA1MTgKIC0gKGRqbSkgUmV0dXJuIG9mIHRoZSBkcmVhZGVkIFBBTV9UVFlfS0xVREdFLCB3aGljaCB3ZW50IG1pc3NpbmcgaW4gCiAgIHJlY2VudCBtZXJnZQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE2IDAzOjI3OjEyCiAgICAgW3JlYWRjb25mLmMgc3NoX2NvbmZpZyBzc2hfY29uZmlnLjUgc3NoLWtleXNpZ24uY10KICAgICBhZGQgQWRkcmVzc0ZhbWlseSBvcHRpb24gdG8gc3NoX2NvbmZpZyAobGlrZSAtNCwgLTYgb24gY29tbWFuZGxpbmUpLgogICAgIFBvcnRhYmxlIGJ1ZyAjNTM0OyBvayBtYXJrdXNACiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE3IDAzOjI1OjU4CiAgICAgW2F1dGgtcmhvc3RzLmNdCiAgICAganVzdCBpbiBjYXNlLCBwdXQgbnVtYmVycyB0byBzc2NhbmYgJXMgYXJnLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xNyAwNDoyNzo1MgogICAgIFtjaXBoZXIuYyBjaXBoZXItY3RyLmMgbXlwcm9wb3NhbC5oXQogICAgIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBhZXMtY3RyIG1vZGVzIGZyb20KICAgICBodHRwOi8vd3d3LmlldGYub3JnL2ludGVybmV0LWRyYWZ0cy9kcmFmdC1pZXRmLXNlY3NoLW5ld21vZGVzLTAwLnR4dAogICAgIG9rIGRqbUAKIC0gKGRqbSkgUmVtb3ZlIElQdjQgYnkgZGVmYXVsdCBoYWNrIG5vdyB0aGF0IHdlIGNhbiBzcGVjaWZ5IEFGIGluIGNvbmZpZwogLSAoZGptKSBUaWR5IGFuZCB0cmltIFRPRE8KIC0gKGRqbSkgU3luYyBvcGVuYnNkLWNvbXBhdC8gd2l0aCBPcGVuQlNEIENWUyBoZWFkCiAtIChkam0pIEJpZyBLTkYgb24gb3BlbmJzZC1jb21wYXQvCiAtIChkam0pIEtORiBvbiBtZDVjcnlwdC5bY2hdCiAtIChkam0pIEtORiBvbiBhdXRoLXNpYS5bY2hdCgoyMDAzMDUxNwogLSAoYmFsKSBzdHJjYXQgLT4gc3RybGNhdCBvbiBvcGVuYnNkLWNvbXBhdC9yZWFscGF0aC5jIChyZXYgMS44IE9wZW5CU0QpCgoyMDAzMDUxNgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE1IDEzOjUyOjEwCiAgICAgW3NzaC5jXQogICAgIE1ha2UgInNzaCAtViIgcHJpbnQgdGhlIE9wZW5TU0wgdmVyc2lvbiBpbiBhIGh1bWFuIHJlYWRhYmxlIGZvcm0uIFBhdGNoCiAgICAgZnJvbSBDcmFpZyBMZXJlcyAobWluZHJvdCBhdCBlZS5sYmwuZ292KTsgb2sgbWFya3VzQAogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE1IDE0OjAyOjQ3CiAgICAgW3JlYWRjb25mLmMgc2VydmNvbmYuY10KICAgICB3YXJuIGZvciB1bnN1cHBvcnRlZCBjb25maWcgb3B0aW9uLiBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE1IDE0OjA5OjIxCiAgICAgW2F1dGgyLWtyYjUuY10KICAgICBmaXggNjRiaXQgaXNzdWU7IHJlcG9ydCBpdG9qdW5ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE1IDE0OjU1OjI1CiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzc2hfY29uZmlnIHNzaF9jb25maWcuNSBzc2hjb25uZWN0LmNdCiAgICAgYWRkIGEgQ29ubmVjdFRpbWVvdXQgb3B0aW9uIHRvIHNzaCwgYmFzZWQgb24gcGF0Y2ggZnJvbQogICAgIEplYW4tQ2hhcmxlcyBMb25ndWV0IChqY2xvbmd1ZXQgYXQgZnJlZS5mcik7IHBvcnRhYmxlICMyMDcgb2sgbWFya3VzQAogLSAoZGptKSBBZGQgd2FybmluZyBmb3IgVXNlUEFNIHdoZW4gYnVpbHQgd2l0aG91dCBQQU0gc3VwcG9ydAogLSAoZGptKSBBIGZldyB0eXBlIG1pc21hdGNoIGZpeGVzIGZyb20gQnVnICM1NjUKIC0gKGRqbSkgR3VhcmQgZnJlZV9wYW1fZW52aXJvbm1lbnQgYWdhaW5zdCBOVUxMIGFyZ3VtZW50LiBXb3JrcyBhcm91bmQKICAgSFAvVVggUEFNIHByb2JsZW1zIGRlYnVnZ2VkIGJ5IGR0dWNrZXIKCjIwMDMwNTE1CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDUvMTQgMTM6MTE6NTYKICAgICBbc3NoLWFnZW50LjFdCiAgICAgc2V0dXAgLT4gc2V0IHVwOwogICAgIGZyb20gd2l6QG5ldGJzZAogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE0IDE4OjE2OjIwCiAgICAgW2tleS5jIGtleS5oIHJlYWRjb25mLmMgcmVhZGNvbmYuaCBzc2hfY29uZmlnLjUgc3NoY29ubmVjdC5jXQogICAgIFtkbnMuYyBkbnMuaCBSRUFETUUuZG5zIHNzaC1rZXlnZW4uMSBzc2gta2V5Z2VuLmNdCiAgICAgYWRkIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciB2ZXJpZnlpbmcgaG9zIGtleXMgdXNpbmcgRE5TIGFzIGRlc2NyaWJlZAogICAgIGluIGRyYWZ0LWlldGYtc2Vjc2gtZG5zLXh4LnR4dC4gbW9yZSBpbmZvcm1hdGlvbiBpbiBSRUFETUUuZG5zLgogICAgIG9rIG1hcmt1c0AgYW5kIGhlbm5pbmdACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE0IDIyOjI0OjQyCiAgICAgW2NsaWVudGxvb3AuYyBzZXNzaW9uLmMgc3NoLjFdCiAgICAgYWxsb3cgdG8gc2VuZCBhIEJSRUFLIHRvIHRoZSByZW1vdGUgc3lzdGVtOyBvayB2YXJpb3VzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE1IDAwOjI4OjI4CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgY2xlYW51cCB1bnJlZ2lzdGVyIG9mIHBlci1tZXRob2QgcGFja2V0IGhhbmRsZXJzOyBvayBkam1ACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDUvMTUgMDE6NDg6MTAKICAgICBbcmVhZGNvbmYuYyByZWFkY29uZi5oIHNlcnZjb25mLmMgc2VydmNvbmYuaF0KICAgICBhbHdheXMgcGFyc2Uga2VyYmVyb3Mgb3B0aW9ucy4gb2sgZGptQCBtYXJrdXNACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDUvMTUgMDI6Mjc6MTUKICAgICBbZG5zLmNdCiAgICAgYWRkIG1pc3NpbmcgZnJlZXJyc2V0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE1IDAzOjA4OjI5CiAgICAgW2NpcGhlci5jIGNpcGhlci1iZjEuYyBjaXBoZXItYWVzLmMgY2lwaGVyLTNkZXMxLmNdCiAgICAgc3BsaXQgb3V0IGN1c3RvbSBFVlAgY2lwaGVycwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xNSAwMzoxMDo1MgogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgYXZvaWQgd2FybmluZzsgb2sgamFrb2JACiAgIC0gbW91cmluZ0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xNSAwMzozOTowNwogICAgIFtzZnRwLWludC5jXQogICAgIE1ha2UgcHV0L2dldCAoZ2xvYmVkIGFuZCBub25nbG9iZWQpIGNvZGUgbW9yZSBjb25zaXN0YW50LiBPSyBkam1ACiAgIC0gbW91cmluZ0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xNSAwMzo0Mzo1OQogICAgIFtzZnRwLWludC5jIHNmdHAuY10KICAgICBUZWFjaCBscyBob3cgdG8gZGlzcGxheSBtdWx0aXBsZSBjb2x1bW4gZGlzcGxheSBhbmQgYWxsb3cgdXNlcnMgCiAgICAgdG8gcmV0dXJuIHRvIHNpbmdsZSBjb2x1bW4gZm9ybWF0IHZpYSAnbHMgLTEnLiAgT0sgQGRqbQogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE1IDA0OjA4OjQ0CiAgICAgW3JlYWRjb25mLmMgc2VydmNvbmYuY10KICAgICBkaXNhYmxlIGtlcmJlcm9zIHdoZW4gbm90IHN1cHBvcnRlZC4gb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xNSAwNDowODo0MQogICAgIFtzc2guMV0KICAgICB+QiBpcyBzc2gyIG9ubHkKIC0gKGRqbSkgQWx3YXlzIHBhcnNlIFVzZVBBTQogLSAoZGptKSBDb25maWd1cmUgZ2x1ZSBmb3IgRE5TIHN1cHBvcnQgKGNvZGUgZG9lc24ndCB3b3JrIGluIHBvcnRhYmxlIHlldCkKIC0gKGRqbSkgSW1wb3J0IGdldHJyc2V0YnluYW1lKCkgZnVuY3Rpb24gZnJvbSBPcGVuQlNEIGxpYmMgKGZvciBETlMgc3VwcG9ydCkKIC0gKGRqbSkgVGlkeSBNYWtlZmlsZSBjbGVhbiB0YXJnZXRzCiAtIChkam0pIEFkYXB0IFJFQURNRS5kbnMgZm9yIHBvcnRhYmxlCiAtIChkam0pIEF2b2lkIHV1ZW5jb2RlLmMgd2FybmluZ3MKIC0gKGRqbSkgRW5hYmxlIFVzZVBBTSB3aGVuIGJ1aWx0IC0td2l0aC1wYW0KIC0gKGRqbSkgT25seSBidWlsZCBnZXRycnNldGJ5bmFtZSByZXBsYWNlbWVudCB3aGVuIHVzaW5nIC0td2l0aC1kbnMKIC0gKGRqbSkgQnVnICM1Mjk6IHNzaGQgZG9lc24ndCB3b3JrIGNvcnJlY3RseSBhZnRlciBTSUdIVVAgKGNvcHkgYXJndiAKICAgICAgICAgY29ycmVjdGx5KQogLSAoZGptKSBCdWcgIzQ0NDogV3JvbmcgcGF0aHMgYWZ0ZXIgcmVjb25maWd1cmUKIC0gKGR0dWNrZXIpIEhQLVVYIG5lZWRzIHRvIGluY2x1ZGUgPHN5cy9zdHJ0aW8uaD4gZm9yIFRJT0NTQlJLCgoyMDAzMDUxNAogLSAoZGptKSBCdWcgIzExNzogRG9uJ3QgbGllIHRvIFBBTSBhYm91dCB1c2VybmFtZQogLSAoZGptKSBSQ1NJRCBzeW5jIHcvIE9wZW5CU0QKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNC8wOSAxMjowMDozNwogICAgIFtyZWFkY29uZi5jXQogICAgIHN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgZnJvbSBjb25maWcgbGluZXMgYmVmb3JlIHBhcnNpbmcuIAogICAgIEZpeGVzIGJ6IDUyODsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNC8xMiAxMDoxMzo1NwogICAgIFtjaXBoZXIuY10KICAgICBoaWRlIGNpcGhlciBkZXRhaWxzOyBvayBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA0LzEyIDEwOjE1OjM2CiAgICAgW21pc2MuY10KICAgICBkZWJ1Zy0+ZGVidWcyCiAgIC0gbmFkZHlAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMTIgMTE6NDA6MTUKICAgICBbc3NoLjFdCiAgICAgZG9jdW1lbnQgLVYgc3dpdGNoLCBmaXggd29yZGluZzsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNC8xNCAxNDoxNzo1MAogICAgIFtjaGFubmVscy5jIHNzaGNvbm5lY3QuYyBzc2hkLmMgc3NoLWtleXNjYW4uY10KICAgICBhdm9pZCBoYXJkY29kZWQgU09DS194eDsgd2l0aCBpdG9qdW5AOyBzaG91bGQgYWxsb3cgc3NoIG92ZXIgU0NUUAogICAtIG1vdXJpbmdAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMTQgMjE6MzE6MjcKICAgICBbc2Z0cC1pbnQuY10KICAgICBNaXNzaW5nIGdsb2JmcmVlKCZnKSBpbiBwcm9jZXNzX3B1dCgpIHNwb3R0ZWQgYnkgVmluY2UgQnJpbWhhbGwKICAgICA8VkJyaW1oYWxsQG5vdmVsbC5jb20+LiAgb2tAIFRoZW8KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMTYgMTQ6MzU6MjcKICAgICBbYXV0aC5oXQogICAgIGRvY3VtZW50IHN0cnVjdCBBdXRoY3R4dDsgd2l0aCBzb2xhcgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMjYgMDQ6Mjk6NDkKICAgICBbc3NoLWtleXNjYW4uY10KICAgICAtdCBpbiB1c2FnZSgpOyByb2dpZXJAcXVhYWsub3JnCiAgIC0gbW91cmluZ0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNC8zMCAwMToxNjoyMAogICAgIFtzc2hkLjggc3NoZF9jb25maWcuNV0KICAgICBFc2NhcGUgPywgKiBhbmQgISBpbiAuUWwgZm9yIG5yb2ZmIGNvbXBhdGliaWxpdHkuICBPcGVuU1NIIFBvcnRhYmxlIAogICAgIEJ1ZyAjNTUwIGFuZCAqIGVzY2FwaW5nIHN1Z2dlc3RlZCBieSBqbWNALgogICAtIGRhdmlkQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA0LzMwIDIwOjQxOjA3CiAgICAgW3NzaGQuOF0KICAgICBmaXggaW52YWxpZCAuUGYgbWFjcm8gdXNhZ2UgaW50cm9kdWNlZCBpbiBwcmV2aW91cyBjb21taXQKICAgICBvayBqbWNAIG1vdXJpbmdACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzExIDE2OjU2OjQ4CiAgICAgW2F1dGhmaWxlLmMgc3NoLWtleWdlbi5jXQogICAgIGNoYW5nZSBrZXlfbG9hZF9wdWJsaWMgdG8gdHJ5IHRvIHJlYWQgYSBwdWJsaWMgZnJvbToKICAgICByc2ExIHByaXZhdGUgb3IgcnNhMSBwdWJsaWMgYW5kIHNzaDIga2V5cy4KICAgICB0aGlzIG1ha2VzIHNzaC1rZXlnZW4gLWUgZmFpbCBmb3Igc3NoMSBrZXlzIG1vcmUgZ3JhY2VmdWxseQogICAgIGZvciBleGFtcGxlOyByZXBvcnQgZnJvbSBpdG9qdW4gKG5ldGJzZCBwciAyMDU1MCkuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzExIDIwOjMwOjI1CiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc3NoLmNdCiAgICAgbWFrZSBjaGFubmVsX25ldygpIHN0cmR1cCB0aGUgJ3JlbW90ZV9uYW1lJyAobm90IHRoZSBjYWxsZXIpOyBvayB0aGVvCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzEyIDE2OjU1OjM3CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgZm9yIHB1YmtleSBhdXRoZW50aWNhdGlvbiB0cnkgdGhlIHVzZXIga2V5cyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgogICAgICAgIDEuIGFnZW50IGtleXMgdGhhdCBhcmUgZm91bmQgaW4gdGhlIGNvbmZpZyBmaWxlCiAgICAgICAgMi4gb3RoZXIgYWdlbnQga2V5cwogICAgICAgIDMuIGtleXMgdGhhdCBhcmUgb25seSBsaXN0ZWQgaW4gdGhlIGNvbmZpZyBmaWxlCiAgICAgdGhpcyBoZWxwcyB3aGVuIGFuIGFnZW50IGhhcyBtYW55IGtleXMsIHdoZXJlIHRoZSBzZXJ2ZXIgbWlnaHQKICAgICBjbG9zZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgdGhlIGNvcnJlY3Qga2V5IGlzIHVzZWQuIHJlcG9ydCAmIG9rIHBiQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xMiAxODozNToxOAogICAgIFtzc2gta2V5c2Nhbi4xXQogICAgIHR5cG86IERTQSBrZXlzIGFyZSBvZiB0eXBlIHNzaC1kc3M7IEJyaWFuIFBvb2xlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE0IDAwOjUyOjU5CiAgICAgW3NzaDIuaF0KICAgICByYW5nZXMgZm9yIHBlciBhdXRoIG1ldGhvZCBtZXNzYWdlcwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xNCAwMTowMDo0NAogICAgIFtzZnRwLjFdCiAgICAgZW1waGFzaXNlIHRoZSBiYXRjaG1vZGUgZnVuY3Rpb25hbGl0eSBhbmQgbWFrZSByZWZlcmVuY2UgdG8gcHVia2V5IGF1dGgsCiAgICAgYm90aCBvZiB3aGljaCBhcmUgRkFRczsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xNCAwMjoxNTo0NwogICAgIFthdXRoMi5jIG1vbml0b3IuYyBzc2hjb25uZWN0Mi5jIGF1dGgyLWtyYjUuY10KICAgICBpbXBsZW1lbnQga2VyYmVyb3Mgb3ZlciBzc2gyICgia2VyYmVyb3MtMkBzc2guY29tIik7IHRlc3RlZCB3aXRoIGpha29iQAogICAgIHNlcnZlciBpbnRlcm9wcyB3aXRoIGNvbW1lcmNpYWwgY2xpZW50OyBvayBqYWtvYkAgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNS8xNCAwODoyNTozOQogICAgIFtzZnRwLjFdCiAgICAgLSBiZXR0ZXIgZm9ybWF0dGluZyBpbiBTWU5PUFNJUwogICAgIC0gd2hpdGVzcGFjZSBhdCBFT0wKICAgICBvayBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA1LzE0IDA4OjU3OjQ5CiAgICAgW21vbml0b3IuY10KICAgICBodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MAogICAgIFByaXZzZXAgY2hpbGQgY29udGludWVzIHRvIHJ1biBhZnRlciBtb25pdG9yIGtpbGxlZC4KICAgICBQYXNzIG1vbml0b3Igc2lnbmFscyB0aHJvdWdoIHRvIGNoaWxkOyBEYXJyZW4gVHVja2VyCiAtIChkam0pIE1ha2UgcG9ydGFibGUgYnVpbGQgd2l0aCBNSVQga3JiNSAoc29tZSBpc3N1ZXMgcmVtYWluKQogLSAoZGptKSBBZGQgbmV3IFVzZVBBTSBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSB0byBhbGxvdyBydW50aW1lIGNvbnRyb2wKICAgb3ZlciB1c2FnZSBvZiBQQU0uIFRoaXMgYWxsb3dzIG5vbi1yb290IHVzZSBvZiBzc2hkIHdoZW4gYnVpbHQgd2l0aAogICAtLXdpdGgtcGFtCiAtIChkam0pIERpZSBzY3JlYW1pbmcgaWYgc3RhcnRfcGFtKCkgaXMgY2FsbGVkIHdoZW4gVXNlUEFNPW5vCiAtIChkam0pIEF2b2lkIEtyYlYgbGVhayBmb3IgTUlUIEtlcmJlcm9zCiAtIChkdHVja2VyKSBTZXQgYWlfc29ja3R5cGUgYW5kIGFpX3Byb3RvY29sIGluIGZha2UtZ2V0YWRkcmluZm8uYy4gb2sgZGptQAogLSAoZGptKSBCdWcgIzI1ODogc3NjYW5mKCJbMC05XSIpIC0+IHNzY2FuZigiWzAxMjM0NTY3ODldIikgZm9yIHBvcnRhYmlsaXR5CgoyMDAzMDUxMgogLSAoZGptKSBSZWRoYXQgc3BlYzogRG9uJ3QgaW5zdGFsbCBwcm9maWxlLmQgc2NyaXB0cyB3aGVuIG5vdCAKICAgYnVpbGRpbmcgd2l0aCBHTk9NRS9HVEsgYXNrcGFzcyAocGF0Y2ggZnJvbSBiZXRAcmFodWwubmV0KQoKMjAwMzA1MTAKIC0gKGR0dWNrZXIpIEJ1ZyAjMzE4OiBDcmVhdGUgc3NoX3BybmdfY21kcy5vdXQgZHVyaW5nICJtYWtlIiByYXRoZXIgdGhhbgogICAibWFrZSBpbnN0YWxsIi4gIFBhdGNoIGJ5IHJvdGhAZmVlcC5uZXQuCiAtIChkdHVja2VyKSBCdWcgIzUzNjogVGVzdCBmb3IgYW5kIHdvcmsgYXJvdW5kIG9wZW5wdHkvY29udHJvbGxpbmcgdHR5CiAgIHByb2JsZW0gb24gTGludXggKGZpeGVzICJjb3VsZCBub3Qgc2V0IGNvbnRyb2xsaW5nIHR0eSIgZXJyb3JzKS4KIC0gKGRqbSkgTWVyZ2UgRnJlZUJTRCBQQU0gY29kZTogcmVwbGFjZXMgUEFNIHBhc3N3b3JkIGF1dGgga2x1ZGdlIHdpdGggCiAgIHByb3BlciBjaGFsbGVuZ2UtcmVzcG9uc2UgbW9kdWxlCiAtIChkam0pIDItY2xhdXNlIGxpY2Vuc2Ugb24gbG9naW5yZWMuYywgd2l0aCBwZXJtaXNzaW9uIGZyb20KICAgYW5kcmVAYWUtMzUuY29tCgoyMDAzMDUwNAogLSAoZHR1Y2tlcikgQnVnICM0OTc6IE1vdmUgI2luY2x1ZGUgb2YgYnNkLWN5Z3dpbl91dGlsLmggdG8gb3BlbmJzZC1jb21wYXQuaC4KICAgUGF0Y2ggZnJvbSB2aW5zY2hlbkByZWRoYXQuY29tLgoKMjAwMzA1MDMKIC0gKGR0dWNrZXIpIEFkZCBtaXNzaW5nICJ2b2lkIiB0byByZWNvcmRfZmFpbGVkX2xvZ2luIGluIGJzZC1jcmF5LmMuICBOb3RlZAogICBieSB3ZW5keXBAY3JheS5jb20uCgoyMDAzMDUwMgogLSAoZHR1Y2tlcikgQnVnICM1NDQ6IGlnbm9yZSBpbnZhbGlkIGNtc2dfdHlwZSBvbiBMaW51eCAyLjAga2VybmVscywKICAgcHJpdnNlcCBzaG91bGQgbm93IHdvcmsuCiAtIChkdHVja2VyKSBNb3ZlIGhhbmRsaW5nIG9mIGJhZCBwYXNzd29yZCBhdXRoZW50aWNhdGlvbnMgaW50byBhIHBsYXRmb3JtCiAgIHNwZWNpZmljIHJlY29yZF9mYWlsZWRfbG9naW4oKSBmdW5jdGlvbiAoYWZmZWN0cyBBSVggJiBVbmljb3MpLiBvayBtb3VyaW5nQAoKMjAwMzA0MjkKIC0gKGRqbSkgQWRkIGJhY2sgcmFkaXgubyAodXNlZCBieSBBRlMgc3VwcG9ydCksIGFmdGVyIGl0IHdlbnQgbWlzc2luZyBmcm9tCiAgIE1ha2VmaWxlIG1hbnkgbW9vbnMgYWdvCiAtIChkam0pIEFwcGx5ICJvd2wtYWx3YXlzLWF1dGgiIHBhdGNoIGZyb20gT3BlbndhbGwvU29sYXIgRGVzaWduZXIKIC0gKGRqbSkgRml4IGJsaWJwYXRoIHNwZWNpZmljYXRpb24gZm9yIEFJWC9nY2MKIC0gKGRqbSkgU29tZSBzeXN0ZW1zIGhhdmUgYmFzZW5hbWUgaW4gLWxnZW4uIEZpeCBmcm9tIGF5YW11cmFAYXlhbXVyYS5vcmcKCjIwMDMwNDI4CiAtIChiYWwpIFtkZWZpbmVzLmggcHJvZ3Jlc3NtZXRlci5jIHNjcC5jXSBTb21lIG1vcmUgY3VsbGluZyBvZiBub24gNjRiaXQgCiAgIGhhY2tlZCBjb2RlLgoKMjAwMzA0MjcKIC0gKGJhbCkgQnVnICM1NDE6IHJldHVybjsgd2FzIGRyb3BwZWQgYnkgbWlzdGFrZS4gIFJlcG9ydGVkIGJ5IAogICBmdXJyaWVyQGlnbG91LmNvbQogLSAoYmFsKSBTaW5jZSB3ZSBkb24ndCBzdXBwb3J0IHBsYXRmb3JtcyBsYWNraW5nIHVfaW50XzY0LiAgV2UgbWF5CiAgIGFzIHdlbGwgY2xlYW4gb3V0IHNvbWUgb2YgdGhvc2UgZXZpbCAjaWZkZWZzCiAtIChiYWwpIGF1dGgxLmMgbWlub3IgcmVzeW5jIHdoaWxlIGxvb2tpbmcgYXQgdGhlIGNvZGUuCiAtIChiYWwpIGF1dGgyLmMgc2FtZSBjaGFuZ2VkIGFzIGFib3ZlLgoKMjAwMzA0MDkKIC0gKGRqbSkgQnVnICM1Mzk6IFNwZWNpZnkgY3JlYXRpb24gbW9kZSB3aXRoIE9fQ1JFQVQgZm9yIGxhc3Rsb2cuIFJlcG9ydCAKICAgZnJvbSBtYXR0aEBlZWNzLmJlcmtlbGV5LmVkdQogLSAoZGptKSBNYWtlIHRoZSBzcGVjIHdvcmsgd2l0aCBSZWRoYXQgOS4wICh3aGljaCByZW5hbWVzIHNoYXJ1dGlscykKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNC8wMiAwOTo0ODowNwogICAgIFtjbGllbnRsb29wLmMgbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jIHBhY2tldC5jIHBhY2tldC5oIHJlYWRjb25mLmNdCiAgICAgW3JlYWRjb25mLmggc2VydmVybG9vcC5jIHNzaGNvbm5lY3QyLmNdCiAgICAgcmVhcHBseSByZWtleWluZyBjaGFnZSwgdGVzdGVkIGJ5IGhlbm5pbmdALCBvayBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA0LzAyIDE0OjM2OjI2CiAgICAgW3NzaC1rZXlzaWduLmNdCiAgICAgcG90ZW50aWFsIHNlZ2ZhdWx0IGlmIEtFWV9VTlNQRUM7IGNqd2F0c29uQGRlYmlhbi5vcmc7IGJ1ZyAjNTI2CiAgIC0gaXRvanVuQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA0LzAzIDA3OjI1OjI3CiAgICAgW3Byb2dyZXNzbWV0ZXIuY10KICAgICAkT3BlbkJTRCQKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMDMgMTA6MTc6MzUKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIHJlbW92ZSAkT3BlbkJTRCQsIGFzIG90aGVyICouYyBkb2VzIG5vdCBoYXZlIGl0LgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNC8wNyAwODoyOTo1NwogICAgIFttb25pdG9yX3dyYXAuY10KICAgICB0eXBvOiBnZXQgY29ycmVjdCBjb3VudGVyczsgaW50cm9kdWNlZCBkdXJpbmcgcmVrZXlpbmcgY2hhbmdlLgogICAtIG1pbGxlcnRAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMDcgMjE6NTg6MDUKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIFRoZSBVQ0IgY29weXJpZ2h0IGhlcmUgaXMgaW5jb3JyZWN0LiAgVGhpcyBjb2RlIGRpZCBub3Qgb3JpZ2luYXRlCiAgICAgYXQgVUNCLCBpdCB3YXMgd3JpdHRlbiBieSBMdWtlIE1ld2J1cm4uICBVcGRhdGVkIHRoZSBjb3B5cmlnaHQgYXQKICAgICB0aGUgYXV0aG9yJ3MgcmVxdWVzdC4gIG1hcmt1c0AgT0sKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMDggMjA6MjE6MjkKICAgICBbKi5jICouaF0KICAgICByZW5hbWUgbG9nKCkgaW50byBsb2dpdCgpIHRvIGF2b2lkIG5hbWUgY29uZmxpY3QuICBtYXJrdXMgb2ssIGZyb20KICAgICBuZXRic2QKICAgICAtIChkam0pIFhYWCAtIFBlcmZvcm1lZCBsb2NhbGx5IHVzaW5nOgogICAgICAgInBlcmwgLXAgLWkgLWUgJ3MvKFxzfF4pbG9nXCgvJDFsb2dpdFwoL2cnICouYyAqLmgiCiAgIC0gaGluQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA0LzA5IDA4OjIzOjUyCiAgICAgW3NlcnZjb25mLmNdCiAgICAgRG9uJ3QgaW5jbHVkZSA8a3JiLmg+IHdoZW4gY29tcGlsaW5nIHdpdGggS2VyYmVyb3MgNSBzdXBwb3J0CiAgIC0gKGRqbSkgRml4IHVwIG1pc3NpbmcgaW5jbHVkZSBmb3IgcGFja2V0LmMKICAgLSAoZGptKSBGaXggbWlzc2VkIGxvZyA9PiBsb2dpdCBvY2N1cmFuY2UgKHJlZmVyZW5jZSBieSBmdW5jdGlvbiBwb2ludGVyKQoKMjAwMzA0MDIKIC0gKGJhbCkgaWYgSVBfVE9TIGlzIG5vdCBmb3VuZCBvciBicm9rZW4gZG9uJ3QgdHJ5IHRvIGNvbXBpbGUgaW4KICAgcGFja2V0X3NldF90b3MoKSBmdW5jdGlvbiBjYWxsLiAgYnVnICM1MjcKCjIwMDMwNDAxCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDMvMjggMTA6MTE6NDMKICAgICBbc2NwLjEgc2Z0cC4xIHNzaC4xIHNzaC1hZGQuMSBzc2gtYWdlbnQuMSBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBbc3NoLWtleWdlbi4xIHNzaC1rZXlzY2FuLjEgc3NoLWtleXNpZ24uOF0KICAgICAtIGtpbGxlZCB3aGl0ZXNwYWNlCiAgICAgLSBuZXcgc2VudGVuY2UgbmV3IGxpbmUKICAgICAtIC5CayBmb3IgYXJndW1lbnRzCiAgICAgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wNC8wMSAxMDoxMDoyMwogICAgIFtjbGllbnRsb29wLmMgbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jIHBhY2tldC5jIHBhY2tldC5oIHJlYWRjb25mLmNdCiAgICAgW3JlYWRjb25mLmggc2VydmVybG9vcC5jIHNzaGNvbm5lY3QyLmNdCiAgICAgcmVrZXlpbmcgYnVnZml4ZXMgYW5kIGF1dG9tYXRpYyByZWtleWluZzoKICAgICAqIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIgcmVrZXkgX2F1dG9tYXRpY2FsbHlfCiAgICAgICAgICAgKGEpIGFmdGVyIDJeMzEgcGFja2V0cywgYmVjYXVzZSBhZnRlciAyXjMyIHBhY2tldHMKICAgICAgICAgICAgICAgdGhlIHNlcXVlbmNlIG51bWJlciBmb3IgcGFja2V0cyB3cmFwcwogICAgICAgICAgIChiKSBhZnRlciAyXihibG9ja3NpemVfaW5fYml0cy80KSBibG9ja3MKICAgICAgIChzZWU6IGRyYWZ0LWlldGYtc2Vjc2gtbmV3bW9kZXMtMDAudHh0KQogICAgICAgKGEpIGFuZCAoYikgYXJlIF9lbmFibGVkXyBieSBkZWZhdWx0LCBhbmQgb25seSBkaXNhYmxlZCBmb3Iga25vd24KICAgICAgIG9wZW5zc2ggdmVyc2lvbnMsIHRoYXQgZG9uJ3Qgc3VwcG9ydCByZWtleWluZyBwcm9wZXJseS4KICAgICAqIGNsaWVudCBvcHRpb24gJ1Jla2V5TGltaXQnCiAgICAgKiBkbyBub3QgcmVwbHkgdG8gcmVxdWVzdHMgZHVyaW5nIHJla2V5aW5nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA0LzAxIDEwOjIyOjIxCiAgICAgW2NsaWVudGxvb3AuYyBtb25pdG9yLmMgbW9uaXRvcl93cmFwLmMgcGFja2V0LmMgcGFja2V0LmggcmVhZGNvbmYuY10KICAgICBbcmVhZGNvbmYuaCBzZXJ2ZXJsb29wLmMgc3NoY29ubmVjdDIuY10KICAgICBiYWNrb3V0IHJla2V5aW5nIGNoYW5nZXMgKGZvciAzLjYuMSkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDQvMDEgMTA6MzE6MjYKICAgICBbY29tcGF0LmMgY29tcGF0Lmgga2V4LmNdCiAgICAgYnVnZml4IGNhdXNlcyBzdGFsbGVkIGNvbm5lY3Rpb25zIGZvciBzc2guY29tIDwgMy4wOyBub3RpY2VkIGJ5IGhvQDsgCiAgICAgdGVzdGVkIGJ5IGhvQCBhbmQgbXlzZWxmCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA0LzAxIDEwOjU2OjQ2CiAgICAgW3ZlcnNpb24uaF0KICAgICAzLjYuMQogLSAoZGptKSBDcmFuayBzcGVjIGZpbGUgdmVyc2lvbnMKIC0gKGRqbSkgUmVsZWFzZSAzLjYuMXAxCgoyMDAzMDMyNgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMy8wMy8yNiAwNDowMjo1MQogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIG9uZSBsYXN0IGZpeCB0byB0aGUgdHJlZTogcmFjZSBmaXggYnJva2Ugc3R1ZmY7IHByIDMxNjk7IAogICAgIHNycEBzcnBhcmlzaC5uZXQsIGhlbHAgZnJvbSBkam0KCjIwMDMwMzI1CiAtIChkam0pIEZpeCBnZXRwZWVyaWQgc3VwcG9ydCBmb3IgNjQgYml0IEJFIHN5c3RlbXMuIEZyb20gCiAgICBBcm5kIEJlcmdtYW5uIDxhcm5kYkBkZS5pYm0uY29tPgoKMjAwMzAzMjQKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wMy8yMyAxOTowMjowMAogICAgIFttb25pdG9yLmNdCiAgICAgdW5icmVhayByZWtleWluZyBmb3IgcHJpdnNlcDsgb2sgbWlsbGVydEAKIC0gUmVsZWFzZSAzLjZwMQogLSBGaXggc3NoZCBCaW5kQWRkcmVzcyBhbmQgLWIgb3B0aW9ucyBmb3Igc3lzdGVtcyB1c2luZyBmYWtlLWdldGFkZHJpbmZvLgogICBSZXBvcnQgZnJvbSBtdXJwbGVAbXVycGxlLm5ldCwgZGlhZ25vc2lzIGZyb20gZHR1Y2tlckB6aXAuY29tLmF1CgokSWQ6IENoYW5nZUxvZyx2IDEuMzEyMSAyMDAzLzExLzIyIDAzOjE2OjU2IGR0dWNrZXIgRXhwICQK