MjAwMjA2MDYKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xNSAyMTo1NjozOAogICAgIFtzZXJ2Y29uZi5jIHNzaGQuOCBzc2hkX2NvbmZpZ10KICAgICByZS1lbmFibGUgcHJpdnNlcCBhbmQgZGlzYWJsZSBzZXR1aWQgZm9yIHBvc3QtMy4yLjIKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTYgMjI6MDI6NTAKICAgICBbY2lwaGVyLmMga2V4LmggbWFjLmNdCiAgICAgZml4IHdhcm5pbmdzIChvcGVuc3NsIDAuOS43IHJlcXVpcmVzIGNvbnN0KQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTYgMjI6MDk6NTkKICAgICBbc2Vzc2lvbi5jIHNzaC5jXQogICAgIGRvbid0IGxpbWl0IHhhdXRoIHBhdGhsZW4gb24gY2xpZW50IHNpZGUgYW5kIGxvbmdlciBwcmludCBsZW5ndGggb24KICAgICBzZXJ2ZXIgd2hlbiBkZWJ1Zzsgb2sgbWFya3VzQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTkgMjA6NTQ6NTIKICAgICBbbG9nLmhdCiAgICAgZXh0cmEgY29tbWFzIGluIGVudW0gbm90IDEwMCUgcG9ydGFibGUKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzIyIDIzOjE4OjI1CiAgICAgW3NzaC5jIHNzaGQuY10KICAgICBzcGVsbGluZzsgYWJpc2hvZmZAYXJjLm5hc2EuZ292CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzIzIDE5OjI0OjMwCiAgICAgW2F1dGhmaWxlLmMgYXV0aGZpbGUuaCBwYXRobmFtZXMuaCBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdC5oIAogICAgICBzc2hjb25uZWN0MS5jIHNzaGNvbm5lY3QyLmMgc3NoLWtleXNpZ24uOCBzc2gta2V5c2lnbi5jIE1ha2VmaWxlLmluXQogICAgIGFkZCAvdXNyL2xpYmV4ZWMvc3NoLWtleXNpZ246IGEgc2V0dWlkIGhlbHBlciBwcm9ncmFtIGZvciBob3N0YmFzZWQgCiAgICAgYXV0aGVudGljYXRpb24gaW4gcHJvdG9jb2wgdjIgKG5lZWRzIHRvIGFjY2VzcyB0aGUgaG9zdGtleXMpLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yMyAxOTozOTozNAogICAgIFtzc2guY10KICAgICBhZGQgY29tbWVudCBhYm91dCBzc2gta2V5c2lnbgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yNCAwODo0NToxNAogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIHN0YXQgc3NoLWtleXNpZ24gZmlyc3QsIHByaW50IGVycm9yIGlmIHN0YXQgZmFpbHM7CiAgICAgc29tZSBkZWJ1Zy0+ZXJyb3I7IGZpeCBjb21tZW50CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI1IDA4OjUwOjM5CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgZXhlY2xwLT5leGVjbDsgZnJvbSBzdGV2ZXNrCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI1IDE4OjUxOjA3CiAgICAgW2F1dGguaCBhdXRoMi5jIGF1dGgyLWhvc3RiYXNlZC5jIGF1dGgyLWtiZGludC5jIGF1dGgyLW5vbmUuYwogICAgICBhdXRoMi1wYXNzd2QuYyBhdXRoMi1wdWJrZXkuYyBNYWtlZmlsZS5pbl0KICAgICBzcGxpdCBhdXRoMi5jIGludG8gb25lIGZpbGUgcGVyIG1ldGhvZDsgb2sgcHJvdm9zQC9kZXJhYWR0QAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjYgMjA6MzU6MTAKICAgICBbc3NoLjFdCiAgICAgc29ydCBDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yOCAxNjo0NToyNwogICAgIFttb25pdG9yX21tLmNdCiAgICAgcHJpbnQgc3RyZXJyb3IoZXJybm8pIG9uIG1tYXAvbXVubWFwIGVycm9yOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8yOCAxNzoyODowMgogICAgIFt1aWRzd2FwLmNdCiAgICAgZm9ybWF0IHNwZWMgY2hhbmdlL2Nhc3RzIGFuZCBzb21lIEtORjsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjggMjE6MjQ6MDAKICAgICBbdWlkc3dhcC5jXQogICAgIHVzZSBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUgaW4gZmF0YWwoKQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMjkgMDM6MDY6MzAKICAgICBbc3NoLjEgc3NoZC44XQogICAgIHNwZWxsaW5nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzI5IDExOjIxOjU3CiAgICAgW3NzaGQuY10KICAgICBkb24ndCBzdGFydCBpZiBwcml2c2VwIGlzIGVuYWJsZWQgYW5kIFNTSF9QUklWU0VQX1VTRVIgb3IKICAgICBfUEFUSF9QUklWU0VQX0NIUk9PVF9ESVIgYXJlIG1pc3Npbmc7IG9rIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzMwIDA4OjA3OjMxCiAgICAgW2NpcGhlci5jXQogICAgIHVzZSByaWpuZGFlbC9hZXMgZnJvbSBsaWJjcnlwdG8gKG9wZW5zc2wgPj0gMC45LjcpIGluc3RlYWQgb2YKICAgICBvdXIgb3duIGltcGxlbWVudGF0aW9uLiBhbGxvdyB1c2Ugb2YgQUVTIGhhcmR3YXJlIHZpYSBsaWJjcnlwdG8sIAogICAgIG9rIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzMxIDEwOjMwOjMzCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgZXh0ZW50IHNzaC1rZXlzaWduIHByb3RvY29sOgogICAgIHBhc3MgIyBvZiBzb2NrZXQtZmQgdG8gc3NoLWtleXNpZ24sIGtleXNpZ24gdmVyZmllcyBsb2NhbGx5IHVzZWQKICAgICBpcC1hZGRyZXNzIHVzaW5nIHRoaXMgc29ja2V0LWZkLCByZXN0cmljdHMgZmFrZSBsb2NhbCBob3N0bmFtZXMKICAgICB0byBhY3R1YWwgbG9jYWwgaG9zdG5hbWVzOyBvayBzdGV2ZXNrQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8zMSAxMTozNToxNQogICAgIFthdXRoLmggYXV0aDIuY10KICAgICBtb3ZlIEF1dGhtZXRob2QgZGVmaW5pdG9ucyB0byBwZXItbWV0aG9kIGZpbGUuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzMxIDEzOjE2OjQ4CiAgICAgW2tleS5jXQogICAgIGFkZCBjb21tZW50OgogICAgIGtleV92ZXJpZnkgcmV0dXJucyAxIGZvciBhIGNvcnJlY3Qgc2lnbmF0dXJlLCAwIGZvciBhbiBpbmNvcnJlY3Qgc2lnbmF0dXJlCiAgICAgYW5kIC0xIG9uIGVycm9yLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8zMSAxMzoyMDo1MAogICAgIFtzc2gtcnNhLmNdCiAgICAgcGFkIHJlY2VpdmVkIHNpZ25hdHVyZSB3aXRoIGxlYWRpbmcgemVyb3MsIGJlY2F1c2UgUlNBX3ZlcmlmeSBleHBlY3RzCiAgICAgYSBzaWduYXR1cmUgb2YgUlNBX3NpemUuIHRoZSBkcmFmdHMgc2F5cyB0aGUgc2lnbmF0dXJlIGlzIHRyYW5zbWl0dGVkCiAgICAgdW5wYWRkZWQgKGUuZy4gcHV0dHkgZG9lcyBub3QgcGFkKSwgcmVwb3J0ZWQgYnkgYW5ha2luQHBvYm94LmNvbQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDMgMTI6MDQ6MDcKICAgICBbc3NoLmhdCiAgICAgY29tcGF0aWJsaXR5IC0+IGNvbXBhdGliaWxpdHkKICAgICBkZWNyaXB0b3IgLT4gZGVzY3JpcHRvcgogICAgIGF1dGhlbnRjaWF0ZWQgLT4gYXV0aGVudGljYXRlZAogICAgIHRyYW5zbWl0aW9uIC0+IHRyYW5zbWlzc2lvbgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNCAxOTo0MjozNQogICAgIFttb25pdG9yLmNdCiAgICAgb25seSBhbGxvdyBlbmFibGVkIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHM7IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDQgMTk6NTM6NDAKICAgICBbbW9uaXRvci5jXQogICAgIHNhdmUgdGhlIHNlc3Npb24gaWQgKGhhc2gpIGZvciBzc2gyIChpdCB3aWxsIGJlIHBhc3NlZCB3aXRoIHRoZSAKICAgICBpbml0aWFsIHNpZ24gcmVxdWVzdCkgYW5kIHZlcmlmeSB0aGF0IHRoaXMgdmFsdWUgaXMgdXNlZCBkdXJpbmcgCiAgICAgYXV0aGVudGljYXRpb247IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDQgMjM6MDI6MDYKICAgICBbcGFja2V0LmNdCiAgICAgcmVtb3ZlIF9fRlVOQ1RJT05fXwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNCAyMzowNTo0OQogICAgIFtjaXBoZXIuYyBtb25pdG9yLmMgbW9uaXRvcl9mZHBhc3MuYyBtb25pdG9yX21tLmMgbW9uaXRvcl93cmFwLmNdCiAgICAgX19GVU5DVElPTl9fIC0+IF9fZnVuY19fCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA2LzA1IDE2OjA4OjA3CiAgICAgW3NzaC1hZ2VudC4xIHNzaC1hZ2VudC5jXQogICAgICctYSBiaW5kX2FkZHJlc3MnIGJpbmRzIHRoZSBhZ2VudCB0byB1c2VyLXNwZWNpZmllZCB1bml4LWRvbWFpbgogICAgIHNvY2tldCBpbnN0ZWFkIG9mIC90bXAvc3NoLVhYWFhYWFhYL2FnZW50LjxwaWQ+OyBvayBkam1AIChzb21lIHRpbWUgYWdvKS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDYvMDUgMTY6MDg6MDcKICAgICBbc3NoLWFnZW50LjEgc3NoLWFnZW50LmNdCiAgICAgJy1hIGJpbmRfYWRkcmVzcycgYmluZHMgdGhlIGFnZW50IHRvIHVzZXItc3BlY2lmaWVkIHVuaXgtZG9tYWluCiAgICAgc29ja2V0IGluc3RlYWQgb2YgL3RtcC9zc2gtWFhYWFhYWFgvYWdlbnQuPHBpZD47IG9rIGRqbUAgKHNvbWUgdGltZSBhZ28pLgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNi8wNSAxNjo0ODo1NAogICAgIFtzc2gtYWdlbnQuY10KICAgICBjb3B5IGN1cnJlbnQgcmVxdWVzdCBpbnRvIGFuIGV4dHJhIGJ1ZmZlciBhbmQganVzdCBmbHVzaCB0aGlzCiAgICAgcmVxdWVzdCBvbiBlcnJvcnMsIG9rIHByb3Zvc0AKCjIwMDIwNjA0CiAtIChzdGV2ZXNrKSBbY2hhbm5lbHMuY10gYnVnICMxNjQgcGF0Y2ggZnJvbSBZT1NISUZVSkkgSGlkZWFraSAoY2hhbmdlZAogICBzZXRzb2Nrb3B0IGZyb20gZGVidWcgdG8gZXJyb3IgZm9yIG5vdykuCgoyMDAyMDUyNwogLSAodGltKSBbY29uZmlndXJlLmFjLm9yaWcgbW9uaXRvcl9mZHBhc3MuY10gRW5haG5jZSBtc2doZHIgdGVzdHMgdG8gYWRkcmVzcwogICBidWlsZCBwcm9ibGVtIG9uIElyaXggcmVwb3J0ZWQgYnkgRGF2ZSBMb3ZlIDxkLmxvdmVAZGwuYWMudWs+LiBCYWNrIG91dAogICBsYXN0IG1vbml0b3JfZmRwYXNzLmMgY2hhbmdlcyB0aGF0IGFyZSBubyBsb25nZXIgbmVlZGVkIHdpdGggbmV3IHRlc3RzLgogICBQYXRjaCB0ZXN0ZWQgb24gSXJpeCBieSBKYW4tRnJvZGUgTXlrbGVidXN0IDxqYW5mcm9kZUBwYXJhbGxhYi51aWIubm8+CgoyMDAyMDUyMgogLSAoZGptKSBGaXggc3BlbGxpbmcgbWlzdGFrZXMsIHNwb3R0ZWQgYnkgU29sYXIgRGVzaWduZXIgaQogICA8c29sYXJAb3BlbndhbGwuY29tPgogLSBTeW5jIHNjYXJkLyAobm90IHN1cmUgd2hlbiBpdCBkcmlmdGVkKQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jOgogICBbYXV0aC5jXQogICBGaXggdHlwby90aGlua28uICBQYXNzIGluIGFzIHRvIGF1dGhfYXBwcm92YWwoKSwgbm90IE5VTEwuCiAgIENsb3NlcyBQUiAyNjU5LgogLSBDcmFuayB2ZXJzaW9uCiAtIENyYW5rIFJQTSBzcGVjIHZlcnNpb25zCgoyMDAyMDUyMQogLSAoc3RldmVzaykgW3NzaGQuY10gYnVnIDI0NTsgZGlzYWJsZSBzZXRzaWQoKSBmb3Igbm93CiAtIChzdGV2ZXNrKSBbc3NoZC5jXSAjaWZuZGVmIEhBVkVfQ1lHV0lOIGZvciBzZXRncm91cHMoKQoKMjAwMjA1MTcKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gcmVtb3ZlIGV4dHJhIE1ENV9NU0c9Im5vIiBsaW5lLgoKMjAwMjA1MTUKIC0gKGJhbCkgQ1ZTIElEIGZpeCB1cCBvbiBhdXRoLXBhc3N3ZC5jCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzA3IDE5OjU0OjM2CiAgICAgW3NzaC5oXQogICAgIHVzZSBzc2ggdWlkCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8wOCAyMTowNjozNAogICAgIFtzc2guaF0KICAgICBtb3ZlIHRvIHNzaGQuc3NoZCBpbnN0ZWFkCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xMSAyMDoyNDo0OAogICAgIFtzc2guaF0KICAgICB0eXBvIGluIGNvbW1lbnQKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTMgMDI6Mzc6MzkKICAgICBbYXV0aC1za2V5LmMgYXV0aDIuY10KICAgICBsZXNzIHdhcm5pbmdzLiAgc2tleV97cmVzcG9uZCxxdWVyeX0gYXJlIHB1YmxpYyAoaW4gYXV0aC5oKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xMyAyMDo0NDo1OAogICAgIFthdXRoLW9wdGlvbnMuYyBhdXRoLmMgYXV0aC5oXQogICAgIG1vdmUgdGhlIHBhY2tldF9zZW5kX2RlYnVnIGhhbmRsaW5nIGZyb20gYXV0aC1vcHRpb25zLmMgdG8gYXV0aC5jOyAKICAgICBvayBwcm92b3NACiAgIC0gbWlsbGVydEBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xMyAxNTo1MzoxOQogICAgIFtzc2hkLmNdCiAgICAgQ2FsbCBzZXRzaWQoKSBpbiB0aGUgY2hpbGQgYWZ0ZXIgc3NoZCBhY2NlcHRzIHRoZSBjb25uZWN0aW9uIGFuZCBmb3Jrcy4KICAgICBUaGlzIGlzIG5lZWRlZCBmb3IgcHJpdnNlcCB3aGljaCBjYWxscyBzZXRsb2dpbigpIHdoZW4gaXQgY2hhbmdlcyB1aWRzLgogICAgIFdpdGhvdXQgdGhpcywgdGhlcmUgaXMgYSByYWNlIHdoZXJlIHRoZSBsb2dpbiBuYW1lIG9mIGFuIGV4aXN0aW5nIAogICAgIGNvbm5lY3Rpb24sIGFzIHJldHVybmVkIGJ5IGdldGxvZ2luKCksIG1heSBiZSBjaGFuZ2VkIHRvIHRoZSBwcml2c2VwIAogICAgIHVzZXIgKHNzaGQpLiAgbWFya3VzQCBPSwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xMyAyMToyNjo0OQogICAgIFthdXRoLXJob3N0cy5jXQogICAgIGhhbmRsZSBkZWJ1ZyBtZXNzYWdlcyBkdXJpbmcgcmhvc3RzLXJzYSBhbmQgaG9zdGJhc2VkIGF1dGhlbnRpY2F0aW9uOyAKICAgICBvayBwcm92b3NACiAgIC0gbW91cmluZ0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNS8xNSAxNTo0Nzo0OQogICAgIFtrZXguYyBtb25pdG9yLmMgbW9uaXRvcl93cmFwLmMgc3NoZC5jXQogICAgICdtb25pdG9yJyB2YXJpYWJsZSBjbGFzaGVzIHdpdGggYXQgbGVhc3Qgb25lIGxhbWUgcGxhdGZvcm0gKE5lWFQpLiAgaQogICAgIFJlbmFtZWQgdG8gJ3Btb25pdG9yJy4gIHByb3Zvc0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA1LzA0IDAyOjM5OjM1CiAgICAgW3NlcnZjb25mLmMgc3NoZC44IHNzaGRfY29uZmlnXQogICAgIGVuYWJsZSBwcml2c2VwIGJ5IGRlZmF1bHQ7IHByb3ZvcyBvawogICAtIG1pbGxlcnRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMDYgMjM6MzQ6MzMKICAgICBbc3NoLjEgc3NoZC44XQogICAgIEtpbGwvYWRqdXN0IHIobG9naW58ZXhlYylkPyByZWZlcmVuY2VzIG5vdyB0aGF0IHRob3NlIGFyZSBubyBsb25nZXIgaW4KICAgICB0aGUgdHJlZS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTUgMjE6MDI6NTMKICAgICBbc2VydmNvbmYuYyBzc2hkLjggc3NoZF9jb25maWddCiAgICAgZGlzYWJsZSBwcml2c2VwIGFuZCBlbmFibGUgc2V0dWlkIGZvciB0aGUgMy4yLjIgcmVsZWFzZQogLSAoYmFsKSBGaXhlZCB1cCBQQU0gY2FzZS4gIEkgdGhpbmsuCiAtIChiYWwpIENsYXJpZmllZCBvcGVuYnNkLWNvbXBhdC8qLWNyYXkuKiBMaWNlbmNlIHByb3ZpZGVkIGJ5IFdlbmR5CiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDUvMTUgMjE6MDU6MjkKICAgICBbdmVyc2lvbi5oXQogICAgIGVudGVyIE9wZW5TU0hfMy4yLjIKIC0gKGJhbCkgQ2FsZGFyYSwgU3VzZSwgYW5kIFJlZGhhdCBvcGVuc3NoLnNwZWNzIHVwZGF0ZWQuCgoyMDAyMDUxNAogLSAoc3RldmVzaykgW1JFQURNRS5wcml2c2VwXSBQQU0rcHJpdnNlcCB3b3JrcyB3aXRoIFNvbGFyaXMgOC4KIC0gKHRpbSkgW3NzaHB0eS5jXSBzZXQgdHR5IG1vZGVzIHdoZW4gYWxsb2NhdGluZyBvbGQgc3R5bGUgYnNkIHB0eXMgdG8KICAgbWF0Y2ggd2hhdCBuZXdlciBzdHlsZSBwdHlzIGhhdmUgd2hlbiBhbGxvY2F0ZWQuIEJhc2VkIG9uIGEgcGF0Y2ggYnkKICAgUm9nZXIgQ29ybmVsaXVzIDxyYWNAdGVuemluZy5vcmc+CiAtICh0aW0pIFtSRUFETUUucHJpdnNlcF0gVW5peFdhcmUgNyBhbmQgT3BlblVOSVggOCB3b3JrLgogLSAodGltKSBbUkVBRE1FLnByaXZzZXBdIHJlbW92ZSByZWZlcmVuY2UgdG8gVW5peFdhcmUgNyBhbmQgT3BlblVOSVggOAogICBmcm9tIFBBTS1lbmFibGVkIHByYWdyYXBoLiBVbml4V2FyZSBoYXMgbm8gUEFNLgogLSAodGltKSBbY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlY10gdXBkYXRlIHZlcnNpb24uCgoyMDAyMDUxMwogLSAoc3RldmVzaykgYWRkIGluaXRpYWwgUkVBRE1FLnByaXZzZXAKIC0gKHN0ZXZlc2spIFtjb25maWd1cmUuYWNdIG5pY2VyIG1lc3NhZ2U6IC0td2l0aC1wcml2c2VwLXVzZXI9dXNlcgogLSAoZGptKSBBZGQgLS13aXRoLXN1cGVydXNlci1wYXRoPXh4eCBjb25maWd1cmUgb3B0aW9uIHRvIHNwZWNpZnkgCiAgIHdoYXQgJFBBVEggdGhlIHN1cGVydXNlciByZWNlaXZlcy4KIC0gKGRqbSkgQnVnICMyMzE6IFVzZVByaXZpbGVnZVNlcGFyYXRpb24gdHVybnMgb2ZmIEJhbm5lci4KIC0gKGRqbSkgQWRkIC0td2l0aC1wcml2c2VwLXBhdGggY29uZmlndXJlIG9wdGlvbgogLSAoZGptKSBVcGRhdGUgUlBNIHNwZWMgZmlsZTogZGlmZmVyZW50IHN1cGVydXNlciBwYXRoLCB1c2UKICAgL3Zhci9lbXB0eS9zc2hkIGZvciBwcml2c2VwCiAtIChkam0pIEJ1ZyAjMjM0OiBtaXNzaW5nIHJlYWRwYXNzcGhyYXNlIGRlY2xhcmF0aW9uIGFuZCBkZWZpbmVzCiAtIChkam0pIEFkZCBJTlNUQUxMIHdhcm5pbmcgYWJvdXQgU1NIIHByb3RvY29sIDEgYmxvd2Zpc2ggdy8gCiAgICBPcGVuU1NMIDwgMC45LjYKCjIwMDIwNTExCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIGFwcGxpZWQgYSByZXdvcmsgb2YgZGptJ3MgT3BlblNTTCBzZWFyY2ggY2xlYW51cCBwYXRjaC4KICAgTm93IG9ubHkgc2VhcmNoZXMgc3lzdGVtIGFuZCAvdXNyL2xvY2FsL3NzbCAoT3BlblNTTCdzIGRlZmF1bHQgaW5zdGFsbCBwYXRoKQogICBPdGhlcnMgbXVzdCB1c2UgLS13aXRoLXNzbC1kaXI9Li4uLgogLSAodGltKSBbbW9uaXRvcl9mZHBhc3MuY10gZml4IGZvciBzeXN0ZW1zIHRoYXQgaGF2ZSBib3RoCiAgIEhBVkVfQUNDUklHSFRTX0lOX01TR0hEUiBhbmQgSEFWRV9DT05UUk9MX0lOX01TR0hEUi4gSWUuIHN5cy9zb2NrZXQuaCAKICAgaGFzICNkZWZpbmUgbXNnX2FjY3JpZ2h0cyBtc2dfY29udHJvbAoKMjAwMjA1MTAKIC0gKHN0ZXZlc2spIFthdXRoLmNdIFNoYWRvdyBhY2NvdW50IGFuZCBleHBpcmF0aW9uIGNsZWFudXAuICBOb3cKICAgY2hlY2sgZm9yIHJvb3QgZm9yY2VkIGV4cGlyZS4gIFN0aWxsIGRvbid0IGNoZWNrIGZvciBpbmFjdGl2ZS4KIC0gKGRqbSkgUmV3b3JrIFJlZEhhdCBSUE0gZmlsZXMuIEJhc2VkIG9uIHNwZWMgZnJvbSBOYWxpbiAKICAgRGFoeWFiaGFpIDxuYWxpbkByZWRoYXQuY29tPiBhbmQgcGF0Y2hlcyBmcm9tIAogICBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPgogLSAoZGptKSBUcnkgdG8gZHJvcCBzdXBwbGVtZW50YWwgZ3JvdXBzIGF0IGRhZW1vbiBzdGFydHVwLiBQYXRjaCBmcm9tIAogICBSZWRIYXQKIC0gKGJhbCkgQmFjayBhbGwgdGhlIHdheSBvdXQgb2YgYXV0aC1wYXNzd2QuYyBjaGFuZ2VzLiAgQnJlYWtzIHRvbyBtYW55CiAgIHRoaW5ncyB0aGF0IGRvbid0IHNldCBwdy0+cHdfcGFzc3dkLgoKMjAwMjA1MDkKIC0gKHRpbSkgW01ha2VmaWxlLmluXSBVbmJyZWFrIG1ha2UgLWYgTWFrZWZpbGUuaW4gZGlzdHByZXAKCjIwMDIwNTA4CiAtICh0aW0pIFtvcGVuYnNkLWNvbXBhdC9ic2QtYXJjNHJhbmRvbS5jXSBmaXggbG9naWMgb24gd2hlbiBzZWVkX3JuZygpIGlzCiAgIGNhbGxlZC4gUmVwb3J0IGJ5IENocmlzIE1heHdlbGwgPG1heHdlbGxAY3MuZGFsLmNhPgogLSAodGltKSBbTWFrZWZpbGUuaW4gY29uZmlndXJlLmFjXSBzZXQgU0hFTEwgdmFyaWFibGUgaW4gTWFrZWZpbGUKIC0gKGRqbSkgRGlzYWJsZSBQQU0ga2JkLWludCBhdXRoIGlmIHByaXZzZXAgaXMgdHVybmVkIG9uIChpdCBkb2Vzbid0IHdvcmspCgoyMDAyMDUwNwogLSAodGltKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuaF0KICAgQWRkIHRydW5jYXRlKCkgZW11bGF0aW9uIHRvIGFkZHJlc3MgQnVnIDIwOAoKMjAwMjA1MDYKIC0gKGRqbSkgVW5icmVhayBhdXRoLXBhc3N3ZC5jIGZvciBQQU0gYW5kIFNJQQogLSAoZGptKSBVbmJyZWFrIFBBTSBhdXRoIGZvciBwcm90b2NvbCAxLiBSZXBvcnQgZnJvbSBQZWtrYSBTYXZvbGEgCiAgIDxwZWtrYXNAbmV0Y29yZS5maT4KIC0gKGRqbSkgRG9uJ3QgcmVpbml0aWFsaXNlIFBBTSBjcmVkZW50aWFscyBiZWZvcmUgd2UgaGF2ZSBzdGFydGVkIFBBTS4KICAgUmVwb3J0IGZyb20gUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4KICAgCjIwMDIwNTA2CiAtIChiYWwpIEZpeGVkIGF1dGgtcGFzc3dkLmMgdG8gcmVzb2x2ZSBQZXJtaXRFbXB0eVBhc3N3b3JkIGlzc3VlCiAKMjAwMjA1MDEKIC0gKGRqbSkgSW1wb3J0IE9wZW5CU0QgcmVncmVzc2lvbiB0ZXN0cy4gUmVxdWlyZXMgQlNEIG1ha2UgdG8gcnVuCiAtIChkam0pIEZpeCByZWFkcGFzc3BoYXNlIGNvbXBpbGF0aW9uIGZvciBzeXN0ZW1zIHdoaWNoIGhhdmUgaXQKCjIwMDIwNDI5CiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSB1cGRhdGUgZml4VVAgdG8gcmVmbGVjdCBjaGFuZ2VzIGluCiAgIHNzaGRfY29uZmlnLgogLSAodGltKSBbY29udHJpYi9jeWd3aW4vUkVBRE1FXSByZW1vdmUgcmVmZXJlbmNlIHRvIHJlZ2V4LgogICBwYXRjaCBmcm9tIENvcmlubmEgVmluc2NoZW4gPHZpbnNjaGVuQHJlZGhhdC5jb20+CgoyMDAyMDQyNgogLSAoZGptKSBCdWcgIzEzNywgIzIwOTogZml4IG1ha2UgcHJvYmxlbXMgZm9yIHNjYXJkL1NzaC5iaW4sIGRvIHV1ZGVjb2RlCiAgIGR1cmluZyBkaXN0cHJlcCBvbmx5CiAtIChkam0pIERpc2FibGUgUEFNIHBhc3N3b3JkIGV4cGlyeSB1bnRpbCBhIGNvbXBsZXRlIGZpeCBmb3IgYnVnICMxODggCiAgIGV4aXN0cwogLSAoZGptKSBCdWcgIzE4MDogU2V0IFRvUyBiaXRzIG9uIElQdjQtaW4tSVB2NiBtYXBwZWQgYWRkcmVzc2VzLiBCYXNlZCBvbiAKICAgcGF0Y2ggZnJvbSBvcGVuc3NoQG1pc2MudGVjcS5vcmcKCjIwMDIwNDI1CiAtIChzdGV2ZXNrKSBbZGVmaW5lcy5oXSByZW1vdmUgVVNFX1RJTUVWQUw7IHVudXNlZAogLSAoc3RldmVzaykgW2FjY29uZmlnLmggYXV0aC1wYXNzd2QuYyBjb25maWd1cmUuYWMgc3NoZC5jXSBIUC1VWCAxMC4yNgogICBzdXBwb3J0LiAgYnVnICMxODQuICBtb3N0IGZyb20gZGNvbGVAa2V5c29mdHN5cy5jb20uCgoyMDAyMDQyNAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIzIDEyOjU0OjEwCiAgICAgW3ZlcnNpb24uaF0KICAgICAzLjIuMQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMyAyMjoxNjoyOQogICAgIFtzc2hkLmNdCiAgICAgSW1wcm92ZSBlcnJvciBtZXNzYWdlOyBvayBtYXJrdXNAIHN0ZXZlc2tACgoyMDAyMDQyMwogLSAoc3RldmVzaykgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIHNlc3Npb24uY10gTE9HSU5fTk9fRU5ET1BUIGZvciBIUC1VWAogLSAoc3RldmVzaykgW2FjY29uZmlnLmhdIE5FRURfSU5fU1lTVE1fSCB1bnVzZWQKIC0gKG1hcmt1cykgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMyAxMjo1ODoyNgogICAgIFtyYWRpeC5jXQogICAgIHNlbmQgY29tcGxldGUgdGlja2V0OyBzZW1lcmFkQHNzMTAwMC5tcy5tZmYuY3VuaS5jegogLSAoZGptKSBUcmltIENoYW5nZUxvZyB0byBpbmNsdWRlIG9ubHkgcG9zdC0zLjEgY2hhbmdlcwogLSAoZGptKSBVcGRhdGUgUlBNIHNwZWMgZmlsZSB2ZXJzaW9ucwogLSAoZGptKSBSZWRoYXQgc3BlYyBlbmFibGVzIEtyYlYgYnkgZGVmYXVsdAogLSAoZGptKSBBcHBsaWVkIE9wZW5TQyBzbWFydGNhcmQgdXBkYXRlcyBmcm9tIE1hcmt1cyAmIAogICBBbnR0aSBUYXBhbmluZW4gPGFldEBjYy5odXQuZmk+CiAtIChkam0pIERlZmluZSBCUk9LRU5fUkVBTFBBVEggZm9yIEFJWCwgcGF0Y2ggZnJvbSAKICAgQW50dGkgVGFwYW5pbmVuIDxhZXRAY2MuaHV0LmZpPgogLSAoZGptKSBCdWcgIzIxNDogRml4IHV0bXAgZm9yIElyaXggKGRvbid0IHN0cmlwICJ0dHkiKS4gUGF0Y2ggZnJvbSAKICAgS2V2aW4gVGF5bG9yIDxub0Bub3doZXJlLm9yZz4gKD8/KSB2aWEgUGhpbGlwcCBHcmF1CiAgIDxwaGdyYXVAemVkYXQuZnUtYmVybGluLmRlPgogLSAoZGptKSBCdWcgIzIxMzogU2ltcGxpZnkgQ01TR19BTElHTiBtYWNyb3MgdG8gYXZvaWQgc3ltYm9sIGNsYXNoZXMuIAogICBSZXBvcnRlZCBieSBEb3VnIE1hbnRvbiA8ZG1hbnRvbkBlbWVhLmF0dC5jb20+CiAtIChkam0pIEJ1ZyAjMjIyOiBGaXggdGVzdHMgZm9yIGdldGFkZHJpbmZvIG9uIE9TRi8xLiBTcG90dGVkIGJ5CiAgIFJvYmVydCBVcmJhbiA8dXJiYW5Ac3BpZWx3aWVzZS5kZT4KIC0gKGRqbSkgQnVnICMyMDYgLSBibGlicGF0aCBpc24ndCBhbHdheXMgbmVlZGVkIGZvciBBSVggbGQsIGF2b2lkIAogICBzaXplb2YobG9uZyBsb25nIGludCkgPT0gNCBicmVha2FnZS4gUGF0Y2ggZnJvbSBNYXR0aGV3IENsYXJrZQogICA8TWF0dGhld19DbGFya2VAbWluZGxpbmsuYmMuY2E+CiAtIChkam0pIE1ha2UgcHJpdnNlcCB3b3JrIHdpdGggUEFNIChzdGlsbCBleHBlcmltZW50YWwpCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIwIDA5OjAyOjAzCiAgICAgW3NlcnZjb25mLmNdCiAgICAgTm8sIGFmcyByZXF1aXJlcyBleHBsaWNpdCBlbmFibGluZwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMCAwOToxNDo1OAogICAgIFtidWZhdXguYyBidWZhdXguaF0KICAgICBhZGQgYnVmZmVyX3tnZXQscHV0fV9zaG9ydAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMCAwOToxNzoxOQogICAgIFtyYWRpeC5jXQogICAgIHJld3JpdGUgdXNpbmcgdGhlIGJ1ZmZlcl8qIEFQSSwgZml4ZXMgb3ZlcmZsb3c7IG9rIGRlcmFhZHRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMSAxNjoxOToyNwogICAgIFtzc2hkLjggc3NoZF9jb25maWddCiAgICAgZG9jdW1lbnQgZGVmYXVsdCBBRlNUb2tlblBhc3Npbmcgbm87IG9rIGRlcmFhZHRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMSAxNjoyNTowNgogICAgIFtzc2hjb25uZWN0MS5jXQogICAgIHNwZWxsaW5nIGluIGVycm9yIG1lc3NhZ2U7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMjIgMDY6MTU6NDcKICAgICBbcmFkaXguY10KICAgICBmaXggY2hlY2sgZm9yIG92ZXJmbG93CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzIyIDE2OjE2OjUzCiAgICAgW3NlcnZjb25mLmMgc3NoZC44IHNzaGRfY29uZmlnXQogICAgIGRvIG5vdCBhdXRvLWVuYWJsZSBLZXJiZXJvc0F1dGhlbnRpY2F0aW9uOyBvayBkam1ALCBwcm92b3NALCBkZXJhYWR0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8yMiAyMTowNDo1MgogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBjbGllbnRsb29wLmggc3NoLmNdCiAgICAgcmVxdWVzdCByZXBseSAoc3VjY2Vzcy9mYWlsdXJlKSBmb3IgLVIgc3R5bGUgZndkIGluIHByb3RvY29sIHYyLAogICAgIGRlcGVuZHMgb24gb3JkZXJlZCByZXBsaWVzLgogICAgIGZpeGVzIGh0dHA6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OyBvayBwcm92b3NACgoyMDAyMDQyMQogLSAodGltKSBbZW50cm9weS5jLl0gUG9ydGFiaWxpdHkgZml4IGZvciBTQ08gVW5peCAzLjJ2NC54IChTQ08gT1NSIDMuMCkuCiAgIGVudHJvcHkuYyBuZWVkcyBzZXRldWlkKGdldHVpZCgpKSBmb3IgdGhlIHNldHVpZChvcmlnaW5hbF91aWQpIHRvIAogICBzdWNjZWVkLiBQYXRjaCBieSBnZXJ0QGdyZWVuaWUubXVjLmRlLiBUaGlzIGZpeGVzIG9uZSBwYXJ0IG9mIEJ1ZyAyMDgKCjIwMDIwNDE4CiAtIChkam0pIEF2b2lkIFNJR0NITEQgYnJlYWthZ2Ugd2hlbiBydW4gZnJvbSByc3luYy4gRml4IGZyb20gCiAgIFN0dXJsZSBTdW5kZSA8c3R1cmxlLnN1bmRlQHVzaXQudWlvLm5vPgoKMjAwMjA0MTcKIC0gKGRqbSkgVGVsbCB1c2VycyB0byBjb25maWd1cmUgL2Rldi9yYW5kb20gc3VwcG9ydCBpbnRvIE9wZW5TU0wgaW4gCiAgIElOU1RBTEwKIC0gKGRqbSkgRml4IC5ObSBpbiBtZG9jMm1hbi5wbCBmcm9tIHBzcGVuY2VyQGZpZWxkcy51dG9yb250by5jYQogLSAodGltKSBbY29uZmlndXJlLmFjXSBJc3N1ZSB3YXJuaW5nIG9uIC0td2l0aC1kZWZhdWx0LXBhdGg9L3NvbWVfcGF0aAogICBpZiBMT0dJTl9DQVAgaXMgZW5hYmxlZC4gUmVwb3J0ICYgdGVzdGluZyBieSBUdWMgPHR1Y0B0dHNnLmNvbT4KCjIwMDIwNDE1CiAtIChkam0pIFVuYnJlYWsgIm1ha2UgaW5zdGFsbCIuIEZpeCBmcm9tIERhcnJlbiBUdWNrZXIgCiAgIDxkdHVja2VyQHppcC5jb20uYXU+CiAtIChzdGV2ZXNrKSBic2QtY3lnd2luX3V0aWwuW2NoXSBCU0QgbGljZW5zZSBmcm9tIENvcmlubmEgVmluc2NoZW4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gYWRkIHRlc3RzIGZvciByZWN2bXNnIGFuZCBzZW5kbXNnLgogICBbbW9uaXRvcl9mZHBhc3MuY10gYWRkIGNoZWNrcyBmb3IgSEFWRV9TRU5ETVNHIGFuZCBIQVZFX1JFQ1ZNU0cgZm9yCiAgIHN5c3RlbXMgdGhhdCBIQVZFX0FDQ1JJR0hUU19JTl9NU0dIRFIgYnV0IG5vIHJlY3Ztc2cgb3Igc2VuZG1zZy4KCjIwMDIwNDE0CiAtIChkam0pIHNzaC1yYW5kLWhlbHBlciBpbXByb3ZlbWVudHMKICAgLSBBZGQgY29tbWFuZGxpbmUgZGVidWdnaW5nIG9wdGlvbnMKICAgLSBEb24ndCB3cml0ZSBiaW5hcnkgZGF0YSBpZiBzdGRvdXQgaXMgYSB0dHkgKHVzZSBoZXggaW5zdGVhZCkKICAgLSBHaXZlIGl0IGEgbWFucGFnZQogLSAoZGptKSBSYW5kb20gbnVtYmVyIGNvbGxlY3Rpb24gZG9jIGZpeGVzIGZyb20gQmVuCgoyMDAyMDQxMwogLSAoZGptKSBBZGQgS3JiViBzdXBwb3J0IHBhdGNoIGZyb20gU2ltb24gV2lsa2luc29uIDxzaW1vbkBzeHcub3JnLnVrPgoKMjAwMjA0MTIKIC0gKHN0ZXZlc2spIFthdXRoLXNpYS5bY2hdXSBhZGQgQlNEIGxpY2Vuc2UgZnJvbSBDaHJpcyBBZGFtcwogLSAodGltKSBbY29uZmlndXJlLmFjXSBhZGQgPHN5cy90eXBlcy5oPiB0byBtc2doZHIgdGVzdHMuIENoYW5nZSAtTAogICB0byAtaCBvbiB0ZXN0aW5nIGZvciAvYmluIGJlaW5nIHN5bWJvbGljIGxpbmsKIC0gKGJhbCkgTWlzdGFrZW4gaW4gQ3lnd2luIHNjcmlwdHMgZm9yIHNzaCBzdGFydGluZy4gIFBhdGNoIGJ5CiAgIENvcmlubmEgVmluc2NoZW4gPHZpbnNjaGVuQHJlZGhhdC5jb20+IAogLSAoYmFsKSBkaXNhYmxlIHByaXZzZXAgaWYgbm8gTUFQX0FOT04uICBXZSBjYW4gcmUtZW5hYmxlIGl0CiAgIGFmdGVyIHRoZSByZWxlYXNlIHdoZW4gd2UgY2FuIGRvIG1vcmUgdGVzdGluZy4KCjIwMDIwNDExCiAtIChzdGV2ZXNrKSBbYXV0aC1zaWEuY10gY2xlYW51cAogLSAodGltKSBbYWNjb25maWcuaCBkZWZpbmVzLmggaW5jbHVkZXMuaF0gcHV0IGluY2x1ZGVzIGluIGluY2x1ZGVzLmggYW5kCiAgIGRlZmluZXMgaW4gZGVmaW5lcy5oIFtyaWpuZGFlbC5jIG9wZW5ic2QtY29tcGF0L2Zha2Utc29ja2V0LmgKICAgb3BlbmJzZC1jb21wYXQvaW5ldF9hdG9uLmNdIGluY2x1ZGUgImluY2x1ZGVzLmgiIGluc3RlYWQgb2YgImNvbmZpZy5oIgogICBvayBzdGV2ZXNrQAoKMjAwMjA0MTAKIC0gKHN0ZXZlc2spIFtjb25maWd1cmUuYWMgbW9uaXRvci5jXSBIQVZFX1NPQ0tFVFBBSVIKIC0gKHN0ZXZlc2spIFthdXRoLXNpYS5jXSBjb21waWxlIGZpeCBDaHJpcyBBZGFtcyA8Y21hZGFtc0BoaXdhYXkubmV0PgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzEwIDA4OjIxOjQ3CiAgICAgW2F1dGgxLmMgY29tcGF0LmMgY29tcGF0LmhdCiAgICAgc3RyaXAgJ0AnIGZyb20gdXNlcm5hbWUgb25seSBmb3IgS2VyYlYgYW5kIGtub3duIGJyb2tlbiBjbGllbnRzLCAKICAgICBidWcgIzIwNAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8xMCAwODo1NjowMQogICAgIFt2ZXJzaW9uLmhdCiAgICAgT3BlblNTSF8zLjIKIC0gQWRkZWQgcDEgdG8gaWRlbmlmeSBQb3J0YWJsZSByZWxlYXNlIHZlcnNpb24uCgoyMDAyMDQwOAogLSAoYmFsKSBNaW5vciBPcGVuU0MgdXBkYXRlcy4gIEZpeCB1cCBoZWFkZXIgbG9jYXRpb25zIGFuZCB1cGRhdGUKICAgUkVBRE1FLnNtYXJ0Y2FyZCBwcm92aWRlZCBieSBKdWhhIFlyavZs5CA8anlyam9sYUBjYy5odXQuZmk+CgoyMDAyMDQwNwogLSAoc3RldmVzaykgSEFWRV9DT05UUk9MX0lOX01TR0hEUjsgbm90IHVzZWQgcmlnaHQgbm93LgogICBGdXR1cmU6IHdlIG1heSB3YW50IHRvIHRlc3QgaWYgZmQgcGFzc2luZyB3b3JrcyBjb3JyZWN0bHkuCiAtIChzdGV2ZXNrKSBbbW9uaXRvcl9mZHBhc3MuY10gZmF0YWwoKSBmb3IgVXNlUHJpdmlsZWdlU2VwYXJhdGlvbj15ZXMKICAgYW5kIG5vIGZkIHBhc3Npbmcgc3VwcG9ydC4KIC0gKHN0ZXZlc2spIEhBVkVfTU1BUCBhbmQgSEFWRV9TWVNfTU1BTl9IIGFuZCB1c2UgdGhlbSBpbgogICBtb25pdG9yX21tLmMKIC0gKHN0ZXZlc2spIHJlbW92ZSBjb25maWd1cmUgc3VwcG9ydCBmb3IgcG9sbC5oOyBpdCB3YXMgcmVtb3ZlZAogICBmcm9tIHNzaGQuYyBhIGxvbmcgdGltZSBhZ28uCiAtIChzdGV2ZXNrKSAtLXdpdGgtcHJpdnNlcC11c2VyOyBkZWZhdWx0IHNzaGQKIC0gKHN0ZXZlc2spIHdyYXAgbXVubWFwKCkgd2l0aCBIQVZFX01NQVAgYWxzby4KCjIwMDIwNDA2CiAtIChkam0pIFR5cG8gaW4gU3VzZSBTUEVDIGZpbGUuIEZpeCBmcm9tIENhcnN0ZW4gR3JvaG1hbm4gCiAgIDxjYXJzdGVuLmdyb2htYW5uQGRyLWJhbGRld2VnLmRlPgogLSAoYmFsKSBBZGRlZCBNQVBfRkFJTEVEIHRvIGFsbG93IEFJWCBhbmQgVHJ1c3RlZCBIUCB0byBjb21waWxlLgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzA2IDAwOjMwOjA4CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgRml4IG9jY2FzaW9uYWwgY29ycnVwdGlvbiBvbiB1cGxvYWQgZHVlIHRvIGJhZCByZXVzZSBvZiByZXF1ZXN0IAogICAgIGlkLCBzcG90dGVkIGJ5IGNob21iaWVyQG1hYy5jb207IG9rIG1hcmt1c0AKICAgLSBtb3VyaW5nQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzA2IDE4OjI0OjA5CiAgICAgW3NjcC5jXQogICAgIEZpeGVzIHBvdGVudGFsIGRvdWJsZSAvLyB3aXRoaW4gcGF0aC4KICAgICBodHRwOi8vYnVnemlsbGEubWluZHJvdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2CiAtIChiYWwpIFNsaWdodCB1cGRhdGUgdG8gT3BlblNDIHN1cHBvcnQuICBCZXR0ZXIgdmVyc2lvbiBjaGVja2luZy4gcGF0Y2gKICAgYnkgSnVoYSBZcmr2bOQgPGp5cmpvbGFAY2MuaHV0LmZpPiAKIC0gKGJhbCkgUmV2ZXJlZCBvdXQgb2YgcnVudGltZSBJUklYIGRldGVjdGlvbiBvZiBqb2JsaW1pdHMuICBDb2RlIGlzCiAgIGluY29tcGxldGUuCiAtIChiYWwpIFF1aWV0IGRvd24gY29uZmlndXJlLmFjIGlmIC9iaW4vdGVzdCBkb2VzIG5vdCBleGlzdC4KIC0gKGJhbCkgV2Ugbm8gbG9uZ2VyIHVzZSBhdGV4aXQoKS94YXRleGl0KCkvb25fZXhpdCgpCgoyMDAyMDQwNQogLSAoYmFsKSBQYXRjaCBmb3IgT3BlblNDIFNtYXJ0Q2FyZCBsaWJyYXJ5OyBvayBtYXJrdXNAOyBwYXRjaCBieQogICBKdWhhIFlyavZs5CA8anlyam9sYUBjYy5odXQuZmk+CiAtIChiYWwpIE1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlIHRvIHJlZmxlY3Qgc21hcnRjYXJkIGxpYnJhcnkKICAgc3VwcG9ydCBjaGFuZ2VzLgogLSAoYmFsKSBUb28gbWFueSA8c3lzL3F1ZXVlLmg+IGlzc3Vlcy4gIFJlbW92ZSBhbGwgd29ya2Fyb3VuZHMgYW5kCiAgIHVzaW5nIGludGVybmFsIHZlcnNpb24gb25seS4KIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDUgMjA6NTY6MjEKICAgICBbc3NoZC44XQogICAgIGNsYXJpZnkgc3NocmMgc29tZSBhbmQgaGFuZGxlIFgxMVVzZUxvY2FsaG9zdD15ZXM7IG9rIG1hcmt1c0AKCjIwMDIwNDA0CiAtIChzdGV2ZXNrKSBbYXV0aC1wYW0uYyBhdXRoLXBhbS5oIGF1dGgtcGFzc3dkLmMgYXV0aC1zaWEuYyBhdXRoLXNpYS5oCiAgICBhdXRoMS5jIGF1dGgyLmNdIFBBTSwgT1NGX1NJQSBwYXNzd29yZCBhdXRoIGNsZWFudXA7IGZyb20gZGptLgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzAzIDA5OjI2OjExCiAgICAgW2NpcGhlci5jIG15cHJvcG9zYWwuaF0KICAgICByZS1hZGQgcmlqbmRhZWwtY2JjQGx5c2F0b3IubGl1LnNlIGZvciBNYWNTU0g7IGFzaEBsYWIucG9jLm5ldAoKMjAwMjA0MDIKIC0gKGJhbCkgSGFuZCBTeW5jIG9mIHNjcC5jIChyZXZlcnRlZCB0byB1cHN0cmVhbSBjb2RlKQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMzAgMTc6NDU6NDYKICAgICBbc2NwLmNdCiAgICAgc3RyZXRjaCBiYW5uZXJzCiAtIChiYWwpIENWUyBJRCBzeW5jIG9mIHVpZHN3YXAuYwogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jIChub3cgZm9yIHRoZSByZWFsIHN5bmMpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI3IDIyOjIxOjQ1CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICB0cnkgdG8gaW1wb3J0IGtleXMgd2l0aCBleHRyYSB0cmFpbGluZyA9PT0gKHNlZW4gd2l0aCBzc2guY29tIDwgCiAgICAgMi4wLjEyKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yOCAxNTozNDo1MQogICAgIFtzZXNzaW9uLmNdCiAgICAgZG8gbm90IGNhbGwgcmVjb3JkX2xvZ2luIHR3aWNlIChmb3IgdXNlX3ByaXZzZXApCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI5IDE4OjU5OjMyCiAgICAgW3Nlc3Npb24uYyBzZXNzaW9uLmhdCiAgICAgcmV0cmlldmUgbGFzdCBsb2dpbiB0aW1lIGJlZm9yZSB0aGUgcHR5IGlzIGFsbG9jYXRlZCwgc3RvcmUgcGVyIAogICAgIHNlc3Npb24KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI5IDE5OjE2OjIyCiAgICAgW3NzaGQuOF0KICAgICBSU0Ega2V5IG1vZHVsdXMgc2l6ZSBtaW5pbXVtIDc2ODsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjkgMTk6MTg6MzMKICAgICBbYXV0aC1yc2EuYyBzc2gtcnNhLmMgc3NoLmhdCiAgICAgbWFrZSBSU0EgbW9kdWx1cyBtaW5pbXVtICNkZWZpbmU7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMzAgMTg6NTE6MTUKICAgICBbbW9uaXRvci5jIHNlcnZlcmxvb3AuYyBzZnRwLWludC5jIHNmdHAuYyBzc2hkLmNdCiAgICAgY2hlY2sgd2FpdHBpZCBmb3IgRUlOVFI7IGJhc2VkIG9uIHBhdGNoIGZyb20gcGV0ZXJAaWZtLmxpdS5zZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wNC8wMSAyMjowMjoxNgogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIDIwNDgwIGlzIGFuIHVwcGVyIGxpbWl0IGZvciBvbGRlciBzZXJ2ZXIKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDEgMjI6MDc6MTcKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBmYWxsYmFjayB0byBzdGF0IGlmIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGxzdGF0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzA0LzAyIDExOjQ5OjM5CiAgICAgW3NzaC1hZ2VudC5jXQogICAgIGNoZWNrICRTSEVMTCBmb3IgLWsgYW5kIC1kLCB0b287CiAgICAgaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDIgMTc6Mzc6NDgKICAgICBbc2Z0cC5jXQogICAgIGFsd2F5cyBjYWxsIGxvZ19pbml0KCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDQvMDIgMjA6MTE6MzgKICAgICBbc3NoLXJzYS5jXQogICAgIGlnbm9yZSBTU0hfQlVHX1NJR0JMT0IgZm9yIHNzaC1yc2E7ICMxODcKIC0gKGJhbCkgbWlzcGVsbGluZyBpbiB1aWRzd2FwLmMgKHBvcnRhYmxlIG9ubHkpCgoyMDAyMDQwMQogLSAoc3RldmVzaykgW21vbml0b3IuY10gUEFNIHNob3VsZCB3b3JrIGFnYWluOyB3aWxsICpub3QqIHdvcmsgd2l0aAogICBVc2VQcml2aWxlZ2VTZXBhcmF0aW9uPXllcy4KIC0gKHN0ZXZlc2spIFthdXRoMS5jXSBmaXggcGFzc3dvcmQgYXV0aCBmb3IgcHJvdG9jb2wgMSB3aGVuCiAgICFVU0VfUEFNICYmICFIQVZFX09TRl9TSUE7IG1lcmdlIGlzc3VlLgoKMjAwMjAzMzEKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gdXNlIC9iaW4vdGVzdCAtTCB0byB3b3JrIGFyb3VuZCBicm9rZW4gYnVpbHRpbiBvbgogICBTb2xhcmlzIDgKIC0gKHRpbSkgW3NzaGNvbm5lY3QyLmNdIGNoYW5nZSB1aW50MzJfdCB0byB1X2ludDMyX3QKCjIwMDIwMzMwCiAtIChzdGV2ZXNrKSBbY29uZmlndXJlLmFjXSByZW1vdmUgaGVhZGVyIGNoZWNrIGZvciBzeXMvdHRjb21wYXQuaAogICBidWcgMTY3CgoyMDAyMDMyNwogLSAoYmFsKSAncHcnIHNob3VsZCBiZSAnYXV0aGN0eHQtPnB3JyBpbiBhdXRoMS5jIHNwb3R0ZWQgYnkgCiAgIGtlbnRAbHlzYXRvci5saXUuc2UKIC0gKGJhbCkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAxMTozNDo0OQogICAgIFtzc2guMSBzc2hkLjhdCiAgICAgdXBkYXRlIHRvIHJlY2VudCBkcmFmdHMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMTE6Mzc6MDUKICAgICBbc3NoLmNdCiAgICAgdXBkYXRlIENvcHlyaWdodAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAxNToyMzo0MAogICAgIFtidWZhdXguY10KICAgICBkbyBub3QgdGFsayBhYm91dCBwYWNrZXRzIGluIGJ1ZmF1eAogICAtIHJlZXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMTg6NDY6NTkKICAgICBbc2NhcmQuY10KICAgICB0cnlfQVVUMCBpbiByZWFkX3B1YmtleSB0b28sIGZvciB0aG9zZSBwYXJhbm9pZCBmZXcgd2hvIHdhbnQgdG8gCiAgICAgYWNsICdzaCcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjYgMjI6NTA6MzkKICAgICBbY2hhbm5lbHMuaF0KICAgICBDSEFOTkVMX0VGRF9PVVRQVVRfQUNUSVZFIGlzIGZhbHNlIGZvciBDSEFOX0NMT1NFX1JDVkQsIHRvbwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAyMzoxMzowMwogICAgIFthdXRoLXJzYS5jXQogICAgIGRpc2FsbG93IFJTQSBrZXlzIDwgNzY4IGZvciBwcm90b2NvbCAxLCB0b28gKHJob3N0cy1yc2EgYW5kIHJzYSBhdXRoKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAyMzoxNDo1MQogICAgIFtrZXguY10KICAgICBnZW5lcmF0ZSBhIG5ldyBjb29raWUgZm9yIGVhY2ggU1NIMl9NU0dfS0VYSU5JVCBtZXNzYWdlIHdlIHNlbmQgb3V0CiAgIC0gbW91cmluZ0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNyAxMTo0NTo0MgogICAgIFttb25pdG9yLmNdCiAgICAgbW9uaXRvcl9hbGxvd2VkX2tleSgpIHJldHVybnMgaW50IGluc3RlYWQgb2YgcG9pbnRlci4gIG9rIG1hcmt1c0AKICAKMjAwMjAzMjUKIC0gKHN0ZXZlc2spIGltcG9ydCBPcGVuQlNEIDxzeXMvdHJlZS5oPiBhcyAib3BlbmJzZC1jb21wYXQvdHJlZS5oIgogLSAoYmFsKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMyAyMDo1NzoyNgogICAgIFtzc2hkLmNdCiAgICAgc2V0cHJvY3RpdGxlKCkgYWZ0ZXIgcHJlYXV0aCBjaGlsZDsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxNjowMDoyNwogICAgIFtzZXJ2ZXJsb29wLmNdCiAgICAgcmVtb3ZlIHVudXNlZCBkZWJ1ZwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxNjowMToxMwogICAgIFtwYWNrZXQuY10KICAgICBkZWJ1Zy0+ZGVidWczIGZvciBleHRyYSBwYWRkaW5nCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxNzoyNzowMwogICAgIFtrZXhnZXguY10KICAgICB0eXBvOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNCAxNzo1MzoxNgogICAgIFttb25pdG9yX2ZkcGFzcy5jXQogICAgIG1pbm9yIGNsZWFudXAgYW5kIG1vcmUgZXJyb3IgY2hlY2tpbmc7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjQgMTg6MDU6MjkKICAgICBbc2NhcmQuY10KICAgICB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgQVVUMCBmb3Igc2NfcHJpdmF0ZV9lbmNyeXB0LCB0b28KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI0IDIzOjIwOjAwCiAgICAgW21vbml0b3IuY10KICAgICByZW1vdmUgIlxuIiBmcm9tIGZhdGFsKCkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMDk6MjE6MTMKICAgICBbYXV0aC1yc2EuY10KICAgICByZXR1cm4gMCAobm90IE5VTEwpOyB0b21oQHBvLmNybC5nby5qcAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAwOToyNTowNgogICAgIFthdXRoLXJoLXJzYS5jXQogICAgIHJtIGJvZ3VzIGNvbW1lbnQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMTc6MzQ6MjcKICAgICBbc2NhcmQuYyBzY2FyZC5oIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uYyBzc2guY10KICAgICBjaGFuZ2Ugc2NfZ2V0X2tleSB0byBzY19nZXRfa2V5cyBhbmQgaGlkZSBzbWFydGNhcmQgZGV0YWlscyBpbiBzY2FyZC5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNSAyMDoxMjoxMAogICAgIFttb25pdG9yX21tLmMgbW9uaXRvcl93cmFwLmNdCiAgICAgc3NpemVfdCBhcmdzIHVzZSAiJWxkIiBhbmQgY2FzdCB0byAobG9uZykKICAgICBzaXplX3QgYXJncyB1c2UgIiVsdSIgYW5kIGNhc3QgdG8gKHVfbG9uZykKICAgICBvayBtYXJrdXNAIGFuZCB0aGFua3MgbWlsbGVydEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjUgMjE6MDQ6MDIKICAgICBbc3NoLmNdCiAgICAgc2ltcGxpZnkgbnVtX2lkZW50aXR5X2ZpbGVzIGhhbmRsaW5nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzI1IDIxOjEzOjUxCiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjb21wYXQuYyBjb21wYXQuaCBuY2hhbi5jXQogICAgIGRvbid0IHNlbmQgc3RkZXJyIGRhdGEgYWZ0ZXIgRU9GLCBhY2NlcHQgdGhpcyBmcm9tIG9sZGVyIGtub3duIAogICAgIChicm9rZW4pIHNzaGQgc2VydmVycyBvbmx5LCBmaXhlcwogICAgIGh0dHA6Ly9idWd6aWxsYS5taW5kcm90Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yNiAwMzoyNDowMQogICAgIFttb25pdG9yLmggbW9uaXRvcl9mZHBhc3MuaCBtb25pdG9yX21tLmggbW9uaXRvcl93cmFwLmhdCiAgICAgJE9wZW5CU0QkCgoyMDAyMDMyNAogLSAoc3RldmVzaykgW3Nlc3Npb24uY10gZGlzYWJsZSBMT0dJTl9ORUVEU19URVJNIHVudGlsIHdlIGFyZSBzdXJlCiAgIGl0IGNhbiBiZSByZW1vdmVkLiBvbmx5IHVzZWQgb24gc29sYXJpcy4gd2lsbCBubyBsb25nZXIgY29tcGlsZSB3aXRoCiAgIHByaXZzZXAgc2h1ZmZsaW5nLgoKMjAwMjAzMjIKIC0gKHN0ZXZlc2spIEhBVkVfQUNDUklHSFRTX0lOX01TR0hEUiBjb25maWd1cmUgc3VwcG9ydAogLSAoc3RldmVzaykgW21vbml0b3IuYyBtb25pdG9yX3dyYXAuY10gI2lmZGVmIEhBVkVfUFdfQ0xBU1NfSU5fUEFTU1dECiAtIChzdGV2ZXNrKSBjb25maWd1cmUgYW5kIGNwcCBfX0ZVTkNUSU9OX18gZ3ltbmFzdGljcyB0byBoYW5kbGUgbmllbHNpc21zCiAtIChzdGV2ZXNrKSBbbW9uaXRvcl9mZHBhc3MuY10gc3VwcG9ydCBmb3IgYWNjZXNzIHJpZ2h0cyBzdHlsZSBmaWxlCiAgIGRlc2NyaXB0b3IgcGFzc2luZwogLSAoc3RldmVzaykgW2F1dGgyLmNdIG1lcmdlIGNsZWFudXAvc3luYwogLSAoc3RldmVzaykgW2RlZmluZXMuaF0gaHAtdXggMTEgaGFzIGFuY2lsbGFyeSBkYXRhIHN0eWxlIGZkIHBhc3NpbmcsIGJ1dAogICBpcyBtaXNzaW5nIENNU0dfTEVOKCkgYW5kIENNU0dfU1BBQ0UoKSBtYWNyb3MuCiAtIChzdGV2ZXNrKSBbZGVmaW5lcy5oXSAjZGVmaW5lIE1BUF9BTk9OIE1BUF9BTk9OWU1PVVMgZm9yIEhQLVVYOyBvdGhlcgogICBwbGF0Zm9ybXMgbWF5IG5lZWQgdGhpcy0tSSdtIG5vdCBzdXJlLiAgbW1hcCgpIGlzc3VlcyB3aWxsIG5lZWQgdG8gYmUKICAgYWRkcmVzc2VkIGZ1cnRoZXIuCiAtICh0aW0pIFtjaXBoZXIuY10gZml4IHByb2JsZW0gd2l0aCBPcGVuQlNEIHN5bmMKIC0gKHN0ZXZlc2spIFtMSUNFTkNFXSBPcGVuQlNEIHN5bmMKCjIwMDIwMzIxCiAtIChiYWwpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMDggMDY6MTA6MTYKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBwcmludGYgdHlwZSBtaXNtYXRjaAogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xMSAwMzoxODo0OQogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIGNvcnJlY3QgdHlwZSBtaXNtYXRjaGVzICh1X2ludDY0X3QgIT0gdW5zaWduZWQgbG9uZyBsb25nKQogICAtIGl0b2p1bkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xMSAwMzoxOTo1MwogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIGluZGVudAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNCAxNToyNDoyNwogICAgIFtzc2hjb25uZWN0MS5jXQogICAgIGRvbid0IHRydXN0IHNpemUgc2VudCBieSAocm9ndWUpIHNlcnZlcjsgbm90ZWQgYnkgCiAgICAgcy5lc3NlckBlLW1hdHRlcnMuZGUKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTQgMTY6Mzg6MjYKICAgICBbc3NoZC5jXQogICAgIHNwbGl0IG91dCBzc2gxIHNlc3Npb24ga2V5IGRlY3J5cHRpb247IG9rIHByb3Zvc0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTQgMTY6NTY6MzMKICAgICBbYXV0aC1yaC1yc2EuYyBhdXRoLXJzYS5jIGF1dGguaF0KICAgICBzcGxpdCBhdXRoX3JzYSgpIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkgYW5kIHByaXZzZXA7IG9rIHByb3Zvc0AKICAgLSBpdG9qdW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTUgMTE6MDA6MzgKICAgICBbYXV0aC5jXQogICAgIGZpeCBmaWxlIHR5cGUgY2hlY2tpbmcgKHVzZSBTX0lTUkVHKS4gIG9rIGJ5IG1hcmt1cwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNiAxMToyNDo1MwogICAgIFtjb21wcmVzcy5jXQogICAgIHNraXAgaW5mbGF0ZUVuZCBpZiBpbmZsYXRlIGZhaWxzOyBvayBwcm92b3NACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE2IDE3OjIyOjA5CiAgICAgW2F1dGgtcmgtcnNhLmMgYXV0aC5oXQogICAgIHNwbGl0IGF1dGhfcmhvc3RzX3JzYSgpLCBvayBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xNiAxNzo0MToyNQogICAgIFthdXRoLWtyYjUuY10KICAgICBCU0QgbGljZW5zZS4gIGZyb20gRGFuaWVsIEtvdXJpbCB2aWEgRHVnIFNvbmcuICBvayBtYXJrdXNACiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE3IDIwOjI1OjU2CiAgICAgW2F1dGguYyBhdXRoLmggYXV0aDEuYyBhdXRoMi5jXQogICAgIGdldHB3bmFtYWxsb3cgcmV0dXJucyBzdHJ1Y3QgcGFzc3dkICogb25seSBpZiB1c2VyIHZhbGlkOyAKICAgICBva2F5IG1hcmt1c0AKICAgLSBwcm92b3NAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTggMDE6MTI6MTQKICAgICBbYXV0aC5oIGF1dGgxLmMgYXV0aDIuYyBzc2hkLmNdCiAgICAgaGF2ZSB0aGUgYXV0aGVudGljYXRpb24gZnVuY3Rpb25zIHJldHVybiB0aGUgYXV0aGVudGljYXRpb24gY29udGV4dAogICAgIGFuZCB0aGVuIGRvX2F1dGhlbnRpY2F0ZWQ7IG9rYXkgbWlsbGVydEAKICAgLSBkdWdzb25nQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDAxOjMwOjEwCiAgICAgW2F1dGgta3JiNC5jXQogICAgIHNldCBjbGllbnQgdG8gTlVMTCBhZnRlciB4ZnJlZSgpLCBmcm9tIFJvbGYgQnJhdW4gCiAgICAgPHJicmF1bitzc2hAYW5kcmV3LmNtdS5lZHU+CiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDAzOjQxOjA4CiAgICAgW2F1dGguYyBzZXNzaW9uLmNdCiAgICAgbW92ZSBhdXRoX2FwcHJvdmFsIGludG8gZ2V0cHduYW1hbGxvdyB3aXRoIGhlbHAgZnJvbSBtaWxsZXJ0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzoxMzoxNQogICAgIFtjaXBoZXIuYyBjaXBoZXIuaF0KICAgICBleHBvcnQvaW1wb3J0IGNpcGhlciBzdGF0ZXM7IG5lZWRlZCBieSBzc2gtcHJpdnNlcAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzoxNjozOAogICAgIFtwYWNrZXQuYyBwYWNrZXQuaF0KICAgICBleHBvcnQvaW1wb3J0IGNpcGhlciBzdGF0ZSwgaXYgYW5kIHNzaDIgc2VxbnI7IG5lZWRlZCBieSBzc2gtcHJpdnNlcAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzoyMzozMQogICAgIFtrZXkuYyBrZXkuaF0KICAgICBhZGQga2V5X2RlbW90ZSgpIGZvciBzc2gtcHJpdnNlcAogICAtIHByb3Zvc0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAxNzoyNToyOQogICAgIFtidWZhdXguYyBidWZhdXguaF0KICAgICBidWZmZXJfc2tpcF9zdHJpbmcgYW5kIGV4dHJhIHNhbml0eSBjaGVja2luZzsgbmVlZGVkIGJ5IHNzaC1wcml2c2VwCiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjMxOjU0CiAgICAgW2NvbXByZXNzLmNdCiAgICAgZXhwb3J0IGNvbXByZXNzaW9uIHN0cmVhbXMgZm9yIHNzaC1wcml2c2VwCiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjUwOjMxCiAgICAgW2F1dGgtYnNkYXV0aC5jIGF1dGgtb3B0aW9ucy5jIGF1dGgtcmgtcnNhLmMgYXV0aC1yc2EuY10KICAgICBbYXV0aC1za2V5LmMgYXV0aC5oIGF1dGgxLmMgYXV0aDItY2hhbGwuYyBhdXRoMi5jIGtleC5jIGtleC5oIGtleGRoLmNdCiAgICAgW2tleGdleC5jIHNlcnZjb25mLmNdCiAgICAgW3Nlc3Npb24uaCBzZXJ2Y29uZi5oIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc3NoZC5jXQogICAgIGludGVncmF0ZSBwcml2aWxlZ2Ugc2VwYXJhdGVkIG9wZW5zc2g7IGl0cyB0dXJuZWQgb2ZmIGJ5IGRlZmF1bHQgCiAgICAgZm9yIG5vdy4gd29yayBkb25lIGJ5IG1lIGFuZCBtYXJrdXNACiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjUzOjA4CiAgICAgW3NzaGQuOF0KICAgICBjcmVkaXRzIGZvciBwcml2c2VwCiAgIC0gcHJvdm9zQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE4IDE3OjU5OjA5CiAgICAgW3NzaGQuOF0KICAgICBkb2N1bWVudCBVc2VQcml2aWxlZ2VTZXBhcmF0aW9uCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8xOCAyMzo1Mjo1MQogICAgIFtzZXJ2Y29uZi5jXQogICAgIFVucHJpdlVzZXIvVW5wcml2R3JvdXAgdXNhYmxlIG5vdy0tc3BlY2lmeSBudW1lcmljIHVzZXIvZ3JvdXA7IG9rCiAgICAgcHJvdm9zQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMDM6MDM6NDMKICAgICBbcGF0aG5hbWVzLmggc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNzaGQuY10KICAgICBfUEFUSF9QUklWU0VQX0NIUk9PVF9ESVI7IG9rIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDA1OjIzOjA4CiAgICAgW3NzaGQuOF0KICAgICBCYW5uZXIgaGFzIG5vIGRlZmF1bHQuCiAgIC0gbXBlY2hAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMDY6MzI6NTYKICAgICBbc2Z0cC1pbnQuY10KICAgICB1c2UgeGZyZWUoKSBhZnRlciB4c3RyZHVwKCkuCgogICAgIG1hcmt1c0Agb2sKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMTA6MzU6MzkKICAgICBbYXV0aC1vcHRpb25zLmMgYXV0aC5oIHNlc3Npb24uYyBzZXNzaW9uLmggc3NoZC5jXQogICAgIGNsZWFuIHVwIHByb3RvdHlwZXMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMTkgMTA6NDk6MzUKICAgICBbYXV0aC1rcmI1LmMgYXV0aC1yaC1yc2EuYyBhdXRoLmMgY2lwaGVyLmMga2V5LmMgbWlzYy5oXQogICAgIFtwYWNrZXQuYyBzZXNzaW9uLmMgc2Z0cC1jbGllbnQuYyBzZnRwLWdsb2IuaCBzZnRwLmMgc3NoLWFkZC5jIHNzaC5jXQogICAgIFtzc2hjb25uZWN0Mi5jIHNzaGQuYyB0dHltb2Rlcy5jXQogICAgIEtORiB3aGl0ZXNwYWNlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDE0OjI3OjM5CiAgICAgW2F1dGguYyBhdXRoMS5jIGF1dGgyLmNdCiAgICAgbWFrZSBnZXRwd25hbWFsbG93KCkgYWxsd2F5cyBjYWxsIHB3Y29weSgpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzE5IDE1OjMxOjQ3CiAgICAgW2F1dGguY10KICAgICBjaGVjayBmb3IgTlVMTDsgZnJvbSBwcm92b3NACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMCAxOToxMjoyNQogICAgIFtzZXJ2Y29uZi5jIHNlcnZjb25mLmggc3NoLmggc3NoZC5jXQogICAgIGZvciB1bnByaXZpbGVnZWQgdXNlciwgZ3JvdXAgZG86CiAgICAgcHc9Z2V0cHduYW0oU1NIX1BSSVZTRVBfVVNFUik7IGRvX3NldHVzZXJjb250ZXh0KHB3KS4gIG9rIHByb3Zvc0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIwIDIxOjA4OjA4CiAgICAgW3NzaGQuY10KICAgICBzdHJlcnJvcigpIG9uIGNoZGlyKCkgZmFpbDsgb2sgcHJvdm9zQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxMDoyMToyMAogICAgIFtzc2gtYWRkLmNdCiAgICAgaWdub3JlIGVycm9ycyBmb3Igbm9uZXhpc3RpbmcgZGVmYXVsdCBrZXlzIGluIHNzaC1hZGQsCiAgICAgZml4ZXMgaHR0cDovL2J1Z3ppbGxhLm1pbmRyb3Qub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxNToxNzoyNgogICAgIFtjbGllbnRsb29wLmMgc3NoLjFdCiAgICAgYWRkIGJ1aWx0LWluIGNvbW1hbmQgbGluZSBmb3IgYWRkaW5nIG5ldyBwb3J0IGZvcndhcmRpbmdzIG9uIHRoZSBmbHkuCiAgICAgYmFzZWQgb24gYSBwYXRjaCBmcm9tIGJyaWFuIHdlbGxpbmd0b24uIG9rIG1hcmt1c0AuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDE2OjM4OjA2CiAgICAgW3NjYXJkLmNdCiAgICAgbWFrZSBjb21waWxlIHcvIG9wZW5zc2wgMC45LjcKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTY6NTQ6NTMKICAgICBbc2NhcmQuYyBzY2FyZC5oIHNzaC1rZXlnZW4uY10KICAgICBtb3ZlIGtleSB1cGxvYWQgdG8gc2NhcmQuW2NoXQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxNjo1NzoxNQogICAgIFtzY2FyZC5jXQogICAgIHJlbW92ZSBjb25zdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMi8wMy8yMSAxNjo1ODoxMwogICAgIFtjbGllbnRsb29wLmNdCiAgICAgcmVtb3ZlIHVudXNlZAogICAtIHJlZXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMTg6MDg6MTUKICAgICBbc2NhcmQuY10KICAgICBJbiBzY19wdXRfa2V5KCksIHNjX3JlYWRlcl9pZCBzaG91bGQgYmUgaWQuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDIwOjUxOjEyCiAgICAgW3NzaGRfY29uZmlnXQogICAgIGFkZCBwcml2c2VwIChvZmYpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDIxOjIzOjM0CiAgICAgW3NzaGQuY10KICAgICBhZGQgcHJpdnNlcF9wcmVhdXRoKCkgYW5kIHJlbW92ZSAxIGdvdG87IG9rIHByb3Zvc0AKICAgLSByZWVzQGN2cy5vcGVuYnNkLm9yZyAyMDAyLzAzLzIxIDIxOjU0OjM0CiAgICAgW3NjYXJkLmMgc2NhcmQuaCBzc2gta2V5Z2VuLmNdCiAgICAgQWRkIFBJTi1wcm90ZWN0aW9uIGZvciBzZWNyZXQga2V5LgogICAtIHJlZXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjI6NDQ6MDUKICAgICBbYXV0aGZkLmMgYXV0aGZkLmggc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC5jXQogICAgIEFkZCBQSU4tcHJvdGVjdGlvbiBmb3Igc2VjcmV0IGtleS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDIvMDMvMjEgMjM6MDc6MzcKICAgICBbY2xpZW50bG9vcC5jXQogICAgIHJlbW92ZSB1bnVzZWQsIHN5bmMgdy8gY21kbGluZSBwYXRjaCBpbiBteSB0cmVlLgoKMjAwMjAzMTcKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQXNzdW1lIHBhdGggZ2l2ZW4gd2l0aCAtLXdpdGgtcGlkLWRpcj1QQVRIIGlzIAogICB3YW50ZWQsIHdhcm4gaWYgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQdXQgc3lzdGVtIGRpcmVjdG9yaWVzIGluIAogICBmcm9udCBvZiBQQVRIIGZvciBmaW5kaW5nIGVudG9ycHkgY29tbWFuZHMuCiAtICh0aW0pIFtjb250cmliL2FpeC9idWlsZGJmZi5zaCBjb250cmliL2FpeC9pbnZlbnRvcnkuc2hdIEFJWCBwYWNrYWdlCiAgIGJ1aWxkIGZpeGVzLiAgUGF0Y2ggYnkgRGFycmVuIFR1Y2tlciA8ZHR1Y2tlckB6aXAuY29tLmF1PgogICBbY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoXSBhZGQgbWlzc2luZyBkaXJzIHRvIFNZU1RFTV9ESVIuIEhhdmUKICAgcG9zdGluc3RhbGwgY2hlY2sgZm9yICRwaWRkaXIgYW5kIGFkZCBpZiBuZWNlc3NhcnkuCgoyMDAyMDMxMQogLSAodGltKSBbY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoLCBjb250cmliL3NvbGFyaXMvUkVBRE1FXSBVcGRhdGVkIHRvCiAgIGJ1aWxkIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IFNWUjQgc3R5bGUgcGFja2FnZSB0b29scy4gTm93IHJ1bnMKICAgZnJvbSBidWlsZCBkaXIuIFBhcnRzIGFyZSBiYXNlZCBvbiBwYXRjaGVzIGZyb20gQW50b25pbyBOYXZhcnJvLCBhbmQKICAgRGFycmVuIFR1Y2tlci4KCjIwMDIwMzA4CiAtIChkam0pIFJldmVydCBiaXRzIG9mIE1hcmt1cycgT3BlblNTTCBjb21wYXQgcGF0Y2ggd2hpY2ggd2FzIAogICBhY2NpZGVudGFsbHkgY29tbWl0dGVkLgogLSAoZGptKSBBZGQgTWFya3VzJyBwYXRjaCBmb3IgY29tcGF0IHdpaCBPcGVuU1NMIDwgMC45LjYuIAogICBLbm93biBpc3N1ZTogQmxvd2Zpc2ggZm9yIFNTSDEgZG9lcyBub3Qgd29yawogLSAoc3RldmVzaykgZW50cm9weS5jOiB0eXBvIGluIGRlYnVnIG1lc3NhZ2UKIC0gKGRqbSkgc3NoLWtleWdlbiAtaSBuZWVkcyBzZWVkZWQgUk5HOyByZXBvcnQgZnJvbSBtYXJrdXNACgokSWQ6IENoYW5nZUxvZyx2IDEuMjE3MyAyMDAyLzA2LzA2IDIxOjQ4OjU3IG1vdXJpbmcgRXhwICQK