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