Mercurial > repos > metexplore > met4j
diff tests.html @ 9:0976a6257300 draft
planemo upload for repository https://forgemia.inra.fr/metexplore/met4j-galaxy commit 05db35f63cadb9d56dafff594a3507c59cd85273
author | metexplore |
---|---|
date | Fri, 31 Jan 2025 18:28:53 +0000 |
parents | 1274e2a62479 |
children | 6a112eaf8f38 |
line wrap: on
line diff
--- a/tests.html Wed Jul 26 15:33:45 2023 +0000 +++ b/tests.html Fri Jan 31 18:28:53 2025 +0000 @@ -285,7 +285,7 @@ var md = window.markdownit({ html: true, }); - target.innerHTML = md.render(atob('IyMgVGVzdCBTdW1tYXJ5Cgo8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdWNjZXNzIiBzdHlsZT0id2lkdGg6IDEwMC4wJSIgYXJpYS12YWx1ZW5vdz0iODMiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjgzIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IjgzIFBhc3NlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nIiBzdHlsZT0id2lkdGg6IDAuMCUiIGFyaWEtdmFsdWVub3c9IjAiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjgzIiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IjAgU2tpcHBlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1kYW5nZXIiIHN0eWxlPSJ3aWR0aDogMC4wJSIgYXJpYS12YWx1ZW5vdz0iMCIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0iODMiIHRpdGxlPSIwIEZhaWxlZCBvciBFcnJvcmVkIj4KICA8L2Rpdj4KPC9kaXY+Cgp8IFRlc3QgU3RhdGUgfCBDb3VudCB8CnwgLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBUb3RhbCAgICAgIHwgODMgfAp8IFBhc3NlZCAgICAgfCA4MyB8CnwgRXJyb3IgICAgICB8IDAgfAp8IEZhaWx1cmUgICAgfCAwIHwKfCBTa2lwcGVkICAgIHwgMCB8CgoKPGRldGFpbHM+PHN1bW1hcnk+UGFzc2VkIFRlc3RzPC9zdW1tYXJ5PgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC9hLzEvZGF0YXNldF84YTFjMzZhMi00ODhlLTQ1MzItYjQ5Yi04NzAxMjgyODAzZGEuZGF0IiAtZyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9iLzMvOS9kYXRhc2V0X2IzOWMwZjg1LTY1OTItNDBiOC05ZDIzLTExZjI4NTk1YTdlOS5kYXQiICAgICAgICAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzk5ZTdlYWI2LTQ2YWItNGIzNi1hMDAxLTQ5ZTM5M2I0MzQ2Zi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAgRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF85OWU3ZWFiNi00NmFiLTRiMzYtYTAwMS00OWUzOTNiNDM0NmYuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy81L2IvZS9kYXRhc2V0XzViZWI3YWQ5LTExNzMtNDdjZS04NjEzLTc3ZWJmMWU2OGY0Ni5kYXQiIC1nICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzgvNC8wL2RhdGFzZXRfODQwMWEzN2ItMWQzYy00MzNlLTlhZGQtYzFiOTNjZTFhMmNhLmRhdCIgLWtzICAgICAgICAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfN2Y1MWY3MDktMzZhOC00OTFhLTk5NGEtNjkwZjlkMTRlY2M3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzdmNTFmNzA5LTM2YTgtNDkxYS05OTRhLTY5MGY5ZDE0ZWNjNy5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCB0cnVlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWFpbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZyb21JbmRleGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy82LzIvZGF0YXNldF9jNjI3ZmI4Zi02ZjI2LTRlZDUtODJkMC1iNDY2NWY4N2FhMmMuZGF0IiAtZyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9lLzIvZi9kYXRhc2V0X2UyZjA5MDNlLTAzMTQtNDFlNy1iMWEzLWY2ZjFjZDk4OWU2OS5kYXQiICAtbWMgICAgICAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzliMGJiOGQ4LWIwMTYtNGNlYy1hNDg4LTBiMThhZWZlMWJhOS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgTWVyZ2luZyBjb21wYXJ0bWVudHMuLi4gRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzliMGJiOGQ4LWIwMTYtNGNlYy1hNDg4LTBiMThhZWZlMWJhOS5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWVyZ2VDb21wIHwgYCB0cnVlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWFpbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZyb21JbmRleGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2FyYm9uU2tlbGV0b25OZXQgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMy80LzYvZGF0YXNldF8zNDY0NWQ0MS0zOTVmLTQyYzgtYTRhNi02MDNiMjlkM2NhNTYuZGF0IiAtZyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80L2IvMC9kYXRhc2V0XzRiMDU4Y2FkLWQzNzMtNGViMi04NDcxLTYzZTE0MDU5OWRjYS5kYXQiICAgLW1lICAgICAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9iMTVmMGU3YS02OGVhLTQ0ZmUtYWM2NS1mYTRhMDYwOTE3NDEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgMCBlZGdlcyBpbiBmaWxlIG5vdCBmb3VuZCBpbiB0aGUgZ3JhcGgKICAgICAgMjA1IHdlaWdodHMgc2V0IGFtb25nIDUwMiBlZGdlcyBpbiBncmFwaAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEJ1aWxkaW5pZyBOZXR3b3JrLi4uIERvbmUuCiAgICAgIFByb2Nlc3NpbmcgYXRvbSBtYXBwaW5ncy4uLkRvbmUuCiAgICAgIFNraXAgY29tcG91bmRzIHdpdGggbGVzcyB0aGFuIHR3byBjYXJib25zIGRldGVjdGVkLi4uCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgIERvbmUuCiAgICAgIE1lcmdpbmcgZWRnZXMuLi4gRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYjE1ZjBlN2EtNjhlYS00NGZlLWFjNjUtZmE0YTA2MDkxNzQxLmRhdCBjcmVhdGVkLgogICAgICAgRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGtlZXBTaW5nbGVDYXJib24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCB0cnVlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy81LzQvNy9kYXRhc2V0XzU0NzEyM2ZjLWE4ZDEtNDk1NS05YzFmLTNiYjE5NTRmZDdjNi5kYXQiIC1nICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzEvNS9jL2RhdGFzZXRfMTVjZmYxOGUtOGNkZS00ZTAwLTljYTktYWM3Zjc2Yzg0OTQ2LmRhdCIgICAgLXJpICAgICAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2FmM2FkMmIyLWRkMzktNDlhMC1hODFkLTdhMWU4YWY3ZGIxZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCiAgICAgIDE2IGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAgRG9uZS4KICAgICAgUmVtb3ZlIGlzb2xhdGVkIG5vZGVzLi4uCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIFBpCiAgICAgIAlyZW1vdmluZyBnYWxhY3Rvc2UKICAgICAgCXJlbW92aW5nIENPMgogICAgICAJcmVtb3ZpbmcgZnJ1Y3Rvc2UKICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIENPMgogICAgICAJcmVtb3ZpbmcgSDJPCiAgICAgIAlyZW1vdmluZyBIKwogICAgICAJcmVtb3ZpbmcgSDJPCiAgICAgIAlyZW1vdmluZyAzLWtldG8tYmV0YS1ELWdhbGFjdG9zZQogICAgICAJcmVtb3ZpbmcgZnJ1Y3Rvc2UtMy1waG9zcGhhdGUKICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBQUGkKICAgICAgCXJlbW92aW5nIEgrCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9hZjNhZDJiMi1kZDM5LTQ5YTAtYTgxZC03YTFlOGFmN2RiMWUuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIzYpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkNhcmJvblNrZWxldG9uTmV0IC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvMC80L2RhdGFzZXRfMDA0YmRiYmQtNGIxMy00MDdlLThkNDgtZWQwMGExNDFlYTc5LmRhdCIgLWcgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOS9iLzUvZGF0YXNldF85YjVmZGI5Zi1lZWNiLTRiNWQtOWIwOC02NjlmNzRkMzE1MTEuZGF0IiAgICAgLXVuICAgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDg0ZTNkYzMtMjQyZi00ZGE2LTkyMzAtZDBjMDFhODk4MTk0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTgvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9kODRlM2RjMy0yNDJmLTRkYTYtOTIzMC1kMGMwMWE4OTgxOTQuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIzcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkNhcmJvblNrZWxldG9uTmV0IC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2MvZS8yL2RhdGFzZXRfY2UyOTY2OWItN2UwZS00MzRiLTliMjgtMWZlM2YyNTVlZGIyLmRhdCIgLWcgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOS8zLzgvZGF0YXNldF85Mzg1NzEzZi01NmU3LTQwMTItYTY2ZS01NGY2ZGEwOTNlNGYuZGF0IiAgICAgICAtYW0gICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNjAzZGEzNGUtMzNjZC00YjE4LWI0NzItZGQ3YWVlYzM2YTBjLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4gRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGtlZXBTaW5nbGVDYXJib24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzTWF0cml4IHwgYCB0cnVlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NhcmJvblNrZWxldG9uTmV0IChUZXN0ICM4KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5DYXJib25Ta2VsZXRvbk5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy83LzQvMC9kYXRhc2V0Xzc0MDk1MDgyLTk2NDgtNDFlNi05Yzg4LWNlNDhlNDJhOGFmYS5kYXQiIC1nICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2UvOS9jL2RhdGFzZXRfZTljYTQ2Y2QtNWQ1YS00N2Y4LTk4YjAtZDJhYTU0ZTg0YmQ3LmRhdCIgICAgICAgICAtaSAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzI0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzJhYmNmYTAtZDIxNC00ZTU1LWJjNDktMTRlZGIxZmI3YzEwLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNiB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluaWcgTmV0d29yay4uLiBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi4vdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83MmFiY2ZhMC1kMjE0LTRlNTUtYmM0OS0xNGVkYjFmYjdjMTAuZGF0IGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2hva2VQb2ludCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuQ2hva2VQb2ludCAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9hLzkvYi9kYXRhc2V0X2E5YmFhZDgxLTNhYjMtNGQ4My05ZjgwLWJlMTI4NjI3OWFjNC5kYXQiIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF80NGMzMWZhYy1hNDFkLTRjZDAtOGE4OS00MjRlZGJhMWFmMzYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBDb21wdXRpbmcgY2hva2UgcG9pbnRzLi4uCiAgICAgIEV4cG9ydCByZXN1bHRzLi4uCiAgICAgIGRvbmUuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NvbXBvdW5kTmV0IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Db21wb3VuZE5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8wL2YvYy9kYXRhc2V0XzBmYzE5MTU0LWU2YzYtNDE2MS04NjM2LWYwM2ZmMTQ3MzA3Ny5kYXQiIC1zYyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy81L2QvMi9kYXRhc2V0XzVkMjdlNjk2LWQ1MzEtNGRjMC04OTg0LWVjMDc1MTk5MTUyZC5kYXQiIC1tYyAibm8iICAgICAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zYjA1ODUxMC0wOGEwLTQ5NDQtODNiMC02MzdmNjdlN2FkZGQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgY29tcG91bmRzIHJlbW92ZWQuCgogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwogICAgICBXQVJOSU5HOmdhbGF4eS5tb2RlbDpEYXRhdHlwZSBjbGFzcyBub3QgZm91bmQgZm9yIGV4dGVuc2lvbiAnZ21sJwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KICAgICAgQnVpbGRpbmlnIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgIERvbmUuCiAgICAgIEV4cG9ydGluZy4uLi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzNiMDU4NTEwLTA4YTAtNDk0NC04M2IwLTYzN2Y2N2U3YWRkZC5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJubyIgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYXNNYXRyaXggfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0NvbXBvdW5kTmV0IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Db21wb3VuZE5ldCAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9iL2EvMi9kYXRhc2V0X2JhMmUzYjBkLWQ2MjEtNDkyZS05YTQ4LTI0NTM2NmRmNzI5ZS5kYXQiIC1zYyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9lLzQvMy9kYXRhc2V0X2U0MzlkNjQwLWM0NDQtNGRkYi1iYzJmLWUwMjFlOTYzNDU5Ny5kYXQiIC1tYyAiYnlfaWQiICAtcmkgLWR3IC11biAtdHAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF80ZWZmNzQ3Zi0yZGUxLTRhNTAtODc4My05YzUxMzY2YWVhMDEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgY29tcG91bmRzIHJlbW92ZWQuCiAgICAgIFNldHRpbmcgZWRnZSB3ZWlnaHRzICh0YXJnZXQgZGVncmVlKS4uLgogICAgICAxMiBpc29sYXRlZCBub2RlcyByZW1vdmVkIAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEJ1aWxkaW5pZyBOZXR3b3JrLi4uIERvbmUuCiAgICAgICBEb25lLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICAgRG9uZS4KICAgICAgTWVyZ2luZyBjb21wYXJ0bWVudHMuLi4gRG9uZS4KICAgICAgUmVtb3ZlIGlzb2xhdGVkIG5vZGVzLi4uCiAgICAgIAlyZW1vdmluZyBHbHljZXJvcGhvc3Bob2dseWNlcm9sCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob18xX2lub3NpdG9sCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob2Nob2xpbmUKICAgICAgCXJlbW92aW5nIE1fc19jCiAgICAgIAlyZW1vdmluZyBtZXRoYW5lc3VsZm9uYXRlCiAgICAgIAlyZW1vdmluZyBQMV9QNF9CaXNfNV9fYWRlbm9zeWxfX3RldHJhcGhvc3BoYXRlCiAgICAgIAlyZW1vdmluZyBNX2N5c19EX2MKICAgICAgCXJlbW92aW5nIE1fbWV0X0RfYwogICAgICAJcmVtb3ZpbmcgUDFfUDVfQmlzXzVfX2FkZW5vc3lsX19wZW50YXBob3NwaGF0ZQogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9ldGhhbm9sYW1pbmUKICAgICAgCXJlbW92aW5nIEdseWNlcm9waG9zcGhvc2VyaW5lCiAgICAgIAlyZW1vdmluZyBEX0dseWNlcmFsZGVoeWRlCiAgICAgICBEb25lLgogICAgICBDb21wdXRlIHRyYW5zaXRpb24gbWF0cml4Li4uIERvbmUuCiAgICAgIEV4cG9ydGluZy4uLi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8zMi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzRlZmY3NDdmLTJkZTEtNGE1MC04NzgzLTljNTEzNjZhZWEwMS5kYXQgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJieV9pZCIgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCB0cnVlIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCB0cnVlIGAgfAogICAgICAgfCBhc01hdHJpeCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGVjb21wb3NlU0JNTCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkRlY29tcG9zZVNCTUwgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNy84LzcvZGF0YXNldF83ODc1NGE4MC1lZTMwLTQxYWQtOGJlMi01ZjZkYmNlZGQzOTMuZGF0IiAgICAgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzM0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNzFhMjA3N2UtNzNhZS00NDAwLTljYWQtNGZkMDQ5MDI5MjJhLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgcHJpbnRNZXRhYm9saXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UmVhY3Rpb25zIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRDb21wYXJ0bWVudHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwcmludFBhdGh3YXlzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRHZW5lcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vVHlwZUNvbCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGVjb21wb3NlU0JNTCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkRlY29tcG9zZVNCTUwgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi8zLzEvZGF0YXNldF9iMzFjYmFmYi01ODdiLTRjYzItOWU4ZS01MmFhNzU2ZGU1NzguZGF0IiAtbSAtciAtYyAgLWcgLW50IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zOTUwZWUwYS0yN2Y1LTRlNjQtYTgyNy0zNzk3NTgzNDViYzYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBwcmludE1ldGFib2xpdGVzIHwgYCB0cnVlIGAgfAogICAgICAgfCBwcmludFJlYWN0aW9ucyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcHJpbnRDb21wYXJ0bWVudHMgfCBgIHRydWUgYCB8CiAgICAgICB8IHByaW50UGF0aHdheXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwcmludEdlbmVzIHwgYCB0cnVlIGAgfAogICAgICAgfCBub1R5cGVDb2wgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGlzdGFuY2VNYXRyaXggKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvMC8xL2RhdGFzZXRfYjAxYmM2NGYtNWVlZi00YmIzLTk3ZWQtNGIwOWNiMjQyNGExLmRhdCIgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzM4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYTYyMWM5OWEtYzdlNS00MDM0LTg5MmEtZDkyNzlmN2I0N2UxLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlQ29tcG91bmRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBzZWVkRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGlzdGFuY2VNYXRyaXggKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvMi8wL2RhdGFzZXRfMzIwMTk0YTEtZjU5OS00MDI4LWFiZTItOTA3M2JmMTAyYjdhLmRhdCIgLXNjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzUvOS84L2RhdGFzZXRfNTk4Yjg1OWItNTg5OC00M2E0LTlmNWItOWFlMzJjOTE1MDcwLmRhdCIgLWR3IC11IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF82M2M3MjAyZS03NDNmLTRjMDctODA3OC04NzU0NThiYTRhNjQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgcmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgMSBzaWRlIGNvbXBvdW5kcyBpZ25vcmVkIGR1cmluZyBncmFwaCBidWlsZC4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNlZWRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBkZWdyZWUgfCBgIHRydWUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFBhdGh3YXlzIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuRXh0cmFjdFBhdGh3YXlzIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvMS8yL2RhdGFzZXRfMDEyNGYzOTYtMjhkYS00ZmJhLWIzNTgtOWQwNDQ4YmQ1ZWFjLmRhdCIgLXAgIkNpdHJpY19BY2lkX0N5Y2xlK0ZvbGF0ZV9NZXRhYm9saXNtK3RvdG8iIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZTJjMGEzNy0xNzc3LTQ0MmEtYWJmMS00NzRjNTc3YjBjZDkuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIG5ldHdvcmsgZXhwb3J0ZWQuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIE51bWJlciBvZiByZWFjdGlvbnMgaW4gb3JpZ2luYWwgbmV0d29yazogMTE1OAogICAgICBOdW1iZXIgb2Ygc3BlY2llcyBpbiBvcmlnaW5hbCBuZXR3b3JrOiAxMTA3CiAgICAgIE51bWJlciBvZiBnZW5lcyBpbiBvcmlnaW5hbCBuZXR3b3JrOiA1NzIKICAgICAgTnVtYmVyIG9mIHJlYWN0aW9ucyBpbiBwYXRod2F5IENpdHJpY19BY2lkX0N5Y2xlIChDaXRyaWNfQWNpZF9DeWNsZSk6IDExCiAgICAgIE51bWJlciBvZiBzcGVjaWVzIGluIHBhdGh3YXkgQ2l0cmljX0FjaWRfQ3ljbGUgKENpdHJpY19BY2lkX0N5Y2xlKTogMjYKICAgICAgTnVtYmVyIG9mIGdlbmVzIGluIHBhdGh3YXkgQ2l0cmljX0FjaWRfQ3ljbGUgKENpdHJpY19BY2lkX0N5Y2xlKTogMTgKICAgICAgTnVtYmVyIG9mIHJlYWN0aW9ucyBpbiBwYXRod2F5IEZvbGF0ZV9NZXRhYm9saXNtIChGb2xhdGVfTWV0YWJvbGlzbSk6IDYKICAgICAgTnVtYmVyIG9mIHNwZWNpZXMgaW4gcGF0aHdheSBGb2xhdGVfTWV0YWJvbGlzbSAoRm9sYXRlX01ldGFib2xpc20pOiAxNgogICAgICBOdW1iZXIgb2YgZ2VuZXMgaW4gcGF0aHdheSBGb2xhdGVfTWV0YWJvbGlzbSAoRm9sYXRlX01ldGFib2xpc20pOiA4CiAgICAgIEVycm9yOiBQYXRod2F5IHRvdG8gbm90IGZvdW5kIGluIG5ldHdvcmssIHBsZWFzZSBjaGVjayBzYm1sIGZpbGUuCiAgICAgIE51bWJlciBvZiByZWFjdGlvbnMgaW4gbmV0d29yazogMTcKICAgICAgTnVtYmVyIG9mIHNwZWNpZXMgaW4gbmV0d29yazogMzUKICAgICAgTnVtYmVyIG9mIGdlbmVzIGluIG5ldHdvcms6IDI1CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBwYXRod2F5SWQgfCBgICJDaXRyaWNfQWNpZF9DeWNsZStGb2xhdGVfTWV0YWJvbGlzbSt0b3RvIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U2JtbEFubm90IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuRXh0cmFjdFNibWxBbm5vdCAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy81LzMvZi9kYXRhc2V0XzUzZjlhY2EzLTIwZGYtNDhjNS05ZGM4LWQ1OWZlYjI3NjIxNS5kYXQiIC1leHBvcnQgIk1FVEFCT0xJVEUiIC1kYiAibWV0YW5ldHguY2hlbWljYWwiICAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC80NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2JhYTRiZjQ3LWQ0N2QtNDE4ZC1hOTUwLTZkMjM1N2MwNjExNy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgYW5ub3RhdGlvbnMgZm91bmQgZm9yIDExMC8xMTEgbWV0YWJvbGl0ZXMKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGV4cG9ydCB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBkYiB8IGAgIm1ldGFuZXR4LmNoZW1pY2FsIiBgIHwKICAgICAgIHwgdW5pcSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHNraXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0V4dHJhY3RTYm1sQW5ub3QgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5FeHRyYWN0U2JtbEFubm90IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzIvNS9hL2RhdGFzZXRfMjVhNDk2OTItNjA1Zi00NWMxLTk2MjYtZDM5ZDA1ZTlhOTA2LmRhdCIgLWV4cG9ydCAiTUVUQUJPTElURSIgLWRiICJtZXRhbmV0eC5jaGVtaWNhbCIgIC1za2lwIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83NjQyMWNjMC1lMjVjLTRlNGItYTI2Yi00M2E4MmYxNDI5ZGEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIGFubm90YXRpb25zIGZvdW5kIGZvciAxMTAvMTExIG1ldGFib2xpdGVzCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBleHBvcnQgfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgZGIgfCBgICJtZXRhbmV0eC5jaGVtaWNhbCIgYCB8CiAgICAgICB8IHVuaXEgfCBgIGZhbHNlIGAgfAogICAgICAgfCBza2lwIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0V4dHJhY3RTYm1sQW5ub3QgKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5FeHRyYWN0U2JtbEFubm90IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2MvNS82L2RhdGFzZXRfYzU2NmZiZDktZWVlMS00ZDIzLWI3ZmUtODI5MmI2YWY3ODcyLmRhdCIgLWV4cG9ydCAiTUVUQUJPTElURSIgLWRiICJtZXRhbmV0eC5jaGVtaWNhbCIgLXVuaXEgLXNraXAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC80OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzYzOTg3ZjVmLWY3ZDMtNDk5ZS1iMzBhLThlMjJmOWVlODY5NC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgYW5ub3RhdGlvbnMgZm91bmQgZm9yIDExMC8xMTEgbWV0YWJvbGl0ZXMKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGV4cG9ydCB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBkYiB8IGAgIm1ldGFuZXR4LmNoZW1pY2FsIiBgIHwKICAgICAgIHwgdW5pcSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgc2tpcCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViQmlwTmV0d29yayAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuRXh0cmFjdFN1YkJpcE5ldHdvcmsgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMC83LzcvZGF0YXNldF8wNzcwYmEwZC1jZjcwLTQzOWYtYjVhMy01ZTE2YzhjMGMxZjguZGF0IiAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8yLzAvZC9kYXRhc2V0XzIwZDNkYjI4LTJjMmEtNDk0My1hNWYwLTRhMjIxMGZlMjBhMy5kYXQiIC10ICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvMi80L2RhdGFzZXRfYjI0OGExNTktZWI3YS00NjE5LWJkZmUtOTc5OTQyNTkzMjJhLmRhdCIgICAtc2MgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy8wLzQvZGF0YXNldF9jMDQ1ODY4NC0zMzA4LTRjMDMtYmM0Mi03YjY0MzI4NzhhZGMuZGF0IiAtayAiMSIgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNTQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF84ZmM2MTVlZS1lZGEyLTQ0ZTEtYmU0ZS03MDIzOTkwZmU2N2YuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgaW1wb3J0aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIGV4dHJhY3Rpbmcgc291cmNlcyBhbmQgdGFyZ2V0cwoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzU0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOGZjNjE1ZWUtZWRhMi00NGUxLWJlNGUtNzAyMzk5MGZlNjdmLmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBibGtkUmVhY3Rpb25GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBrIHwgYCAiMSIgYCB8CiAgICAgICB8IHN0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViTmV0d29yayAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuRXh0cmFjdFN1Yk5ldHdvcmsgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvZC81LzgvZGF0YXNldF9kNTg0NjY5Ny1jZjViLTQ2ZjktOTc0ZS1mNzRmOTg0ZWM0YmUuZGF0IiAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9iLzgvYy9kYXRhc2V0X2I4YzRkNDIzLTJiZGYtNGUzNy1iZjI4LTA5NWI5ZjgwY2E1Yi5kYXQiIC10ICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvMC80L2RhdGFzZXRfMzA0Y2RiYTktMGYyYy00NDE0LTgzOTEtN2MwNmZjOTY3NDlhLmRhdCIgICAgIC1rICIxIiAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81OC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2M3MTBkODcwLTZhZGQtNGIyNS1hN2M3LTUwZjI4MWNmNTVmYi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBleHRyYWN0aW5nIHNvdXJjZXMgYW5kIHRhcmdldHMKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81OC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2M3MTBkODcwLTZhZGQtNGIyNS1hN2M3LTUwZjI4MWNmNTVmYi5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGNoZW1pY2FsU2ltIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrIHwgYCAiMSIgYCB8CiAgICAgICB8IHN0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViUmVhY3Rpb25OZXR3b3JrIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5FeHRyYWN0U3ViUmVhY3Rpb25OZXR3b3JrIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzgvOS80L2RhdGFzZXRfODk0ZDZhNDktMWU4NS00YmRkLTg4MWMtNmFmZDMzNmYxYjNkLmRhdCIgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi9mL2QvZGF0YXNldF9iZmQ4ODMzZS1mYWJjLTQ5YmMtOWVjMy03NzAzNDM4MDY1ZmEuZGF0IiAgIC10ICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvNC81L2RhdGFzZXRfOTQ1MTZmZTgtYWE0ZS00YzhlLTliYzAtYWUyZGYwY2QyM2NmLmRhdCIgLXNjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvNC9mL2RhdGFzZXRfMzRmZjgxODAtMzcyNC00N2JlLTg1ODgtZWQ1MDkyMTc5M2JjLmRhdCIgLWsgIjEiICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzYzL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMTk1MWVhNzAtNzJmMC00MTlkLTg0NmMtMDU4NDA2M2IzZTkzLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIGltcG9ydGluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICAwIHNpZGUgY29tcG91bmRzIGlnbm9yZWQgZHVyaW5nIGdyYXBoIGJ1aWxkLgogICAgICBleHRyYWN0aW5nIHNvdXJjZXMgYW5kIHRhcmdldHMKCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCiAgICAgIFdBUk5JTkc6Z2FsYXh5Lm1vZGVsOkRhdGF0eXBlIGNsYXNzIG5vdCBmb3VuZCBmb3IgZXh0ZW5zaW9uICdnbWwnCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82My9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzE5NTFlYTcwLTcyZjAtNDE5ZC04NDZjLTA1ODQwNjNiM2U5My5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBhc1RhYmxlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgckV4Y2x1ZGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGsgfCBgICIxIiBgIHwKICAgICAgIHwgc3QgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0ZiY1RvTm90ZXMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5GYmNUb05vdGVzIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzUvMy8zL2RhdGFzZXRfNTMzNjI5MzEtOGFhZS00NGIwLWFkNDMtNDkwNmM0NzU0ZjUwLmRhdCIgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2Q3NDVlNjg1LTE0MTYtNDk5My1iMDg0LTAxYTQ5YmIyNjAwYy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgaU1MMTUxNQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBpTUwxNTE1CiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBpTUwxNTE1CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGhhc1Byb3BlcnR5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaGFzUHJvcGVydHksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9HZXRHZW5lc0Zyb21SZWFjdGlvbnMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRHZW5lc0Zyb21SZWFjdGlvbnMgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNC85LzIvZGF0YXNldF80OTJlYjhmZC03YWU1LTQyMDktYTI4OS04YzEwOWI0YzVkMDIuZGF0IiAtciAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy84LzcvNS9kYXRhc2V0Xzg3NTU5ZTJlLTcxZDAtNDdhYS1hYmY0LTEwYjE1NDVkMGRlMC5kYXQiIC1zZXAgIgkiICAtY29sICIxIiAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzY4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNTgxY2JhNTItYjQ3Yi00YzM1LThlNzYtOWI5YmQ2NWYyYzJkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0TW9kZWxQcm90ZW9tZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBiaWdnLkdldE1vZGVsUHJvdGVvbWUgLW0gImVfY29saV9jb3JlIiAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzY5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZjdjN2ZjYjctYjQ2YS00N2Q0LTg5OTktZWU0YjMxODdkNDJlLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IG1vZGVsSWQgfCBgICJlX2NvbGlfY29yZSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgImRhdGEiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0dldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzYvMS9hL2RhdGFzZXRfNjFhOGZkMTctNmU1OS00MDFhLWFmNTktZTA2YjA2MWMxODEyLmRhdCIgLXIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy9lL2IvZGF0YXNldF9jZWIxODIwMS1jYjBjLTQ2MjctYjdjMC00OGY0MTE2MzFmYWYuZGF0IiAtc2VwICIJIiAgLWNvbCAiMSIgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzcyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOTMwNjQ2NmMtNWEzYS00ZmE4LTgyYjYtYzNhNjAzMWI4NTM5LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IHByaW50U3Vic3RyYXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UHJvZHVjdHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0dldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzgvMi83L2RhdGFzZXRfODI3ZWFiMDMtYjc4MS00MWE3LTkzNzItMmVhNjdlNGY2MmZmLmRhdCIgLXIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC9iL2UvZGF0YXNldF84YmUxZWRmZi1mNzc3LTQ5MmQtYTVhZC0wYzRhNjg5MWNkNDcuZGF0IiAtc2VwICIJIiAgLWNvbCAiMSIgLXMgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNzUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mMDgzMDIwMC1kYzNlLTQ5MjQtOWM3NS03MzIwOWRjYzVkMTQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIHJlYWN0aW9ucyBtYXBwZWQKICAgICAgMCByZWFjdGlvbnMgbm90IGZvdW5kIGluIG1vZGVsCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzZXAgfCBgICJcdCIgYCB8CiAgICAgICB8IGhhc0hlYWRlciB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGkgfCBgICIxIiBgIHwKICAgICAgIHwgcHJpbnRTdWJzdHJhdGVzIHwgYCB0cnVlIGAgfAogICAgICAgfCBwcmludFByb2R1Y3RzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuR2V0UmVhY3RhbnRzRnJvbVJlYWN0aW9ucyAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8xL2EvMi9kYXRhc2V0XzFhMmIxMDUzLTQzMDYtNGVmOC05NzQzLWRjODg1OGI2Yzc3YS5kYXQiIC1yICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2EvZC81L2RhdGFzZXRfYWQ1MTEzNGMtODA0My00YWVhLTk4ZjEtMGM3ZmU5NDgxYTBkLmRhdCIgLXNlcCAiCSIgIC1jb2wgIjEiICAtcCAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzc4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNjhmZTM3NGYtMzdmOC00OTUwLWJjZGItYWFjNWM0NjdjZDE1LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IHByaW50U3Vic3RyYXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UHJvZHVjdHMgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfTG9hZFBvaW50IChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Mb2FkUG9pbnQgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNS8xLzAvZGF0YXNldF81MTA5M2VjZC1mNDYwLTQxNjktYWM3Mi1lMTEwODEwNWJhOTcuZGF0IiAtayAiMSIgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84MC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzQ1NmZiZDRiLTA3NjItNGEyOS05MDUyLTc2MWJjMDVkZTE2OS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBDb21wdXRpbmcgbG9hZCBwb2ludHMuLi4KICAgICAgRXhwb3J0IHJlc3VsdHMuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGsgfCBgICIxIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9NZXRhYm9SYW5rIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5NZXRhYm9SYW5rIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzYvOS85L2RhdGFzZXRfNjk5NzVlOTUtYTUyMC00ZjZhLWFlYWMtMTBjZTQ4MTlhMjM1LmRhdCIgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMS8xLzYvZGF0YXNldF8xMTZiZGZkZS0xMjdjLTQ1ZWQtYTU5OS02NzFkMzMzMDAyNWMuZGF0IiAtc2MgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMS9jLzQvZGF0YXNldF8xYzQzYWEwOS1kMGU1LTQyOGUtYWE0Yy1lMWE0ODljYWJkOTIuZGF0IiAtbWF4ICIxNTAwMCIgLXQgIjAuMDAxIiAtZCAiMC44NSIgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84NC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2IwOWEyNjUwLTJjMzItNDg4NS04ZjQ5LTU4ZDU1MWM4NzlhOC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIG1vZGVsIGltcG9ydGVkLgogICAgICBjb21wb3VuZCBncmFwaCBjcmVhdGVkLgogICAgICByZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IGNvbXBvdW5kcyByZW1vdmVkLgogICAgICAyIGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCiAgICAgIHdlaWdodHMgY29tcHV0ZWQuCiAgICAgIHJldmVyc2UgZ3JhcGggY3JlYXRlZC4KICAgICAgdHJhbnNpdGlvbiBwcm9iYWJpbGl0aWVzIGNvbXB1dGVkCiAgICAgIHRyYW5zaXRpb24gcHJvYmFiaWxpdGllcyBjb21wdXRlZCAocmV2ZXJzZSBncmFwaCkKICAgICAgc2VlZHMgZmlsZSBpbXBvcnRlZAogICAgICAzIHNlZWRzCiAgICAgIGdsb2JhbCBwYWdlUmFuayBjb21wdXRlZAogICAgICBnbG9iYWwgY2hlaVJhbmsgY29tcHV0ZWQKICAgICAgcGFnZVJhbmsgY29tcHV0ZWQKICAgICAgY2hlaVJhbmsgY29tcHV0ZWQKICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGVkZ2VXZWlnaHRzRmlsZVBhdGhzIHwgYCBOb25lIGAgfAogICAgICAgfCBtYXhOYk9mSXRlciB8IGAgIjE1MDAwIiBgIHwKICAgICAgIHwgdG9sZXJhbmNlIHwgYCAiMC4wMDEiIGAgfAogICAgICAgfCBkYW1waW5nRmFjdG9yIHwgYCAiMC44NSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfTmV0d29ya1N1bW1hcnkgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLk5ldHdvcmtTdW1tYXJ5IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzgvMC82L2RhdGFzZXRfODA2OTkxNjEtYWQ5Mi00MzVlLWEwZDQtNWZjZWE2YmRhZWE2LmRhdCIgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzg2L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDU5ZGI4YmMtZjQ3ZS00MmZhLTkzM2MtZWZmNDQ0MmE2ZmI3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIHBlcmZvcm0gYmFzaWMgYW5hbHlzaXMuLi4KICAgICAgZXh0cmFjdCBjb25uZWN0ZWQgY29tcG9uZW50Li4uCiAgICAgIENvbXB1dGUgZGVuc2l0eS4uLgogICAgICBDb21wdXRlIGxvY2FsIGNsdXN0ZXJpbmcgY29lZmZpY2llbnRzLi4uCiAgICAgIENvbXB1dGUgZGVncmVlIHN0YXRpc3RpY3MuLi4KICAgICAgQ29tcHV0ZSBkaXN0YW5jZXMuLi4KICAgICAgQ29tcHV0ZSBkaXN0YW5jZXMgc3RhdGlzdGljcy4uLgogICAgICBDb21wdXRlIGNlbnRyYWxpdHkuLi4KICAgICAgCUNsb3NlbmVzcyBkb25lLgogICAgICBEb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgc2tpcGRpc3QgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfT1JBcGF0aHdheUVucmljaG1lbnQgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbWFwcGluZy5PUkFwYXRod2F5RW5yaWNobWVudCAtdGggIjAuMCIgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYS85L2YvZGF0YXNldF9hOWYyYzUwMi1jZWYzLTQ5Y2EtYTVmNi1kZGQ1MDIwOGQ3ODAuZGF0IiAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy85L2MvNS9kYXRhc2V0XzljNTdjNTljLTkxNWYtNDJhOC04Yjg5LTBhYjBjNjIxMzUyNi5kYXQiIC1jICJCZW5qYW1pbmlIb2NoYmVyZyIgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzI5ZDQ2ZWUxLTc0ZGQtNDYzMy1hNjYzLTI2OWIyZWFiMWNhYi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEltcG9ydCBkYXRhLi4uCiAgICAgIDMgY29tcG91bmRzIGltcG9ydGVkLgogICAgICAgRG9uZS4KICAgICAgUGVyZm9ybSBQYXRod2F5IEVucmljaG1lbnQuLi4gRG9uZS4KICAgICAgRXhwb3J0IHJlc3VsdHMuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHRoIHwgYCAiMC4wIiBgIHwKICAgICAgIHwgY29yciB8IGAgIkJlbmphbWluaUhvY2hiZXJnIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9PUkFwYXRod2F5RW5yaWNobWVudCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBtYXBwaW5nLk9SQXBhdGh3YXlFbnJpY2htZW50IC10aCAiMC4wMDUiIC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvZi85L2RhdGFzZXRfOWY5ZDNmMjUtYjkzMy00MTRhLTlmZGMtYmU0NGMzMTZmNGIxLmRhdCIgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNy9lL2YvZGF0YXNldF83ZWZhZGJmNC01NDc4LTRhNjAtYjU2YS03ZGJiMGM2ODJlZWEuZGF0IiAtYyAiSG9sbUJvbmZlcnJvbmkiIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF81MmIwY2NmZi0wNjhjLTRjMWUtOWYwNS01NDY1ZGE4ZmJkZDEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBJbXBvcnQgZGF0YS4uLgogICAgICAzIGNvbXBvdW5kcyBpbXBvcnRlZC4KICAgICAgIERvbmUuCiAgICAgIFBlcmZvcm0gUGF0aHdheSBFbnJpY2htZW50Li4uIERvbmUuCiAgICAgIFNlbGVjdCBzaWduaWZpY2FudCBwYXRod2F5cy4uLgogICAgICAJMiBzaWduaWZpY2FudCBwYXRod2F5cyBmb3VuZC4KICAgICAgIERvbmUuCiAgICAgIEV4cG9ydCByZXN1bHRzLi4uCiAgICAgIGRvbmUuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCB0aCB8IGAgIjAuMDA1IiBgIHwKICAgICAgIHwgY29yciB8IGAgIkhvbG1Cb25mZXJyb25pIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9QcmVjdXJzb3JOZXR3b3JrIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5QcmVjdXJzb3JOZXR3b3JrIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2QvMC85L2RhdGFzZXRfZDA5MDVmYWQtMzY2OC00MDI3LTk5ZGUtNGM4YWMxYjIwYTgxLmRhdCIgLXQgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYS82LzAvZGF0YXNldF9hNjAyMmI1My0xZTgxLTRkMDctYmVjYS1jZTg0MzI0MWM2ODcuZGF0IiAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC85NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2E0ZDk5MjZjLTBlNTEtNDVjOC1hMGE4LWIzZjI5ZjNhMDg1OS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzk1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYTRkOTkyNmMtMGU1MS00NWM4LWEwYTgtYjNmMjlmM2EwODU5LmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgcmVhY3Rpb25Ub0lnbm9yZUZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1JlYWN0aW9uRGlzdGFuY2VNYXRyaXggKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlJlYWN0aW9uRGlzdGFuY2VNYXRyaXggLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNS84L2QvZGF0YXNldF81OGQ1ZjhkMS0yMzE2LTQ3OWYtODM0NS0wYTY1MDg2MDQ4Y2YuZGF0IiAgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF83ZTcwODJkOC03ZjAyLTQ3MWYtYWJiYS0yZDA0YjFjYjZmNWMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJFeGNsdWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByeG5GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9SZWFjdGlvbkRpc3RhbmNlTWF0cml4IChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5SZWFjdGlvbkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvMS8wL2RhdGFzZXRfOTEwNTY0ZjMtYzNhOS00NGNiLTg2M2EtYTY0NTNiZWRlNjlhLmRhdCIgIC11IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvOTkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9hYTBkMWYzNC1iMjM3LTQ0ZjMtOTc4ZC1hM2QxMjkwMDllZmYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJFeGNsdWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByeG5GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1JlYWN0aW9uRGlzdGFuY2VNYXRyaXggKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlJlYWN0aW9uRGlzdGFuY2VNYXRyaXggLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNy8wL2QvZGF0YXNldF83MGQ4NTVlNi1iZWE5LTQ1N2MtOTFjNS1jNGY5MGI3NWI3ZDMuZGF0IiAtc2MgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMS85L2UvZGF0YXNldF8xOWU1NjYyZS1lYTVmLTQ5MmUtYTg2OS0yOGQ2NDI1ZjNjY2EuZGF0IiAgLXUgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMDIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF84ZDBjYWMwMS01N2I3LTRlMDgtOTBkYi01MjAyMjVmYTJkMTguZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgcmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgMSBzaWRlIGNvbXBvdW5kcyB0byBpZ25vcmUgZHVyaW5nIGdyYXBoIGJ1aWxkCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBkZWdyZWUgfCBgIGZhbHNlIGAgfAogICAgICAgfCByRXhjbHVkZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgcnhuRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9SZWFjdGlvbkRpc3RhbmNlTWF0cml4IChUZXN0ICM0KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5SZWFjdGlvbkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvZC8xL2RhdGFzZXRfYmQxMmQ4ODMtZWM1Ni00Mzg2LWFhYTgtNTM5Njk0MTQ4MWZhLmRhdCIgIC1yZSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8zL2MvNC9kYXRhc2V0XzNjNDJmZDA3LTZjYjctNDllNi1iZjMyLWZjMDY2ZjRmMmQxOS5kYXQiIC11IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTA1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMjhhNDM2ODEtYTJkNS00ZGUyLTkxOWMtZTljOTRiY2U5MTljLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIHJlbW92aW5nIHJlYWN0aW9ucyB0byBleGNsdWRlLi4uCiAgICAgIDEgcmVhY3Rpb25zIGlnbm9yZWQgZHVyaW5nIGdyYXBoIGJ1aWxkLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcnhuRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9SZWFjdGlvbkRpc3RhbmNlTWF0cml4IChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5SZWFjdGlvbkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzIvOS81L2RhdGFzZXRfMjk1Mjg1MjAtYWMyZS00NWY1LThhODYtMTViZmJmZmNjYjc5LmRhdCIgLXNjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvZC85L2RhdGFzZXRfM2Q5NjQ1NzYtM2NlYi00YzIxLWEyMWEtNmJhNDFjMTU1YTFlLmRhdCIgIC1yZSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8wLzEvNC9kYXRhc2V0XzAxNDA5M2RjLTYxZDEtNDZhNy1iODc5LTUyNzg5OGJmYWZmOC5kYXQiIC11IC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTA5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMTQ4NTgxYWYtNDJmZi00ZmI0LWEzNjItN2ZiNzY0ZGIyNWNkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDEgc2lkZSBjb21wb3VuZHMgdG8gaWdub3JlIGR1cmluZyBncmFwaCBidWlsZAogICAgICByZW1vdmluZyByZWFjdGlvbnMgdG8gZXhjbHVkZS4uLgogICAgICAxIHJlYWN0aW9ucyBpZ25vcmVkIGR1cmluZyBncmFwaCBidWlsZC4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJ4bkZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfUmVhY3Rpb25EaXN0YW5jZU1hdHJpeCAoVGVzdCAjNik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuUmVhY3Rpb25EaXN0YW5jZU1hdHJpeCAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8zL2UvYi9kYXRhc2V0XzNlYjkyYjMxLThlZDgtNDA5Ny1iMzUwLTc4NDFkMDU0M2ExMC5kYXQiIC1zYyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80LzMvMi9kYXRhc2V0XzQzMmRiYWVjLWQ3OWItNDRlOS05ZDYxLWIyNDAyZDdkMGQxYi5kYXQiICAtcmUgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvZC9lL2YvZGF0YXNldF9kZWYyMGI3OC0xODNkLTQ2N2ItYWY0My0yMTUxZDJmNGExZjEuZGF0IiAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMTMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8wMDEyN2M4OS1hN2M0LTQ5MWUtYTgyZi02Y2EwMGIyZGQ1OWMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgcmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgMSBzaWRlIGNvbXBvdW5kcyB0byBpZ25vcmUgZHVyaW5nIGdyYXBoIGJ1aWxkCiAgICAgIHJlbW92aW5nIHJlYWN0aW9ucyB0byBleGNsdWRlLi4uCiAgICAgIDEgcmVhY3Rpb25zIGlnbm9yZWQgZHVyaW5nIGdyYXBoIGJ1aWxkLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgZGVncmVlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcnhuRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU0JNTHdpemFyZCAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNCTUx3aXphcmQgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNy85L2MvZGF0YXNldF83OWM1ZGI3NS04Yzc4LTRiOGEtOGFjMi0xNGFiYzU4NmUzYjAuZGF0IiAtcmljIC1yMCAtbWMgImJ5X2lkIiAtcmRyIC1yRVggInMiIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTE1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNmVlOWZhNjQtMjI3Zi00Yzg3LWFkNmUtZjVjNzU2N2E2YWYyLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfMzIyZGZjMzdfNTI1MF80MDdjX2EzNDBfOTZjNmExODc3YjUzCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCgoKICAgICAgCWNvbXBhcnRtZW50czoJNQogICAgICAJbWV0YWJvbGl0ZXM6CTExMQogICAgICAJcmVhY3Rpb25zOgk3NQogICAgICAJZW56eW1lczoJODUKICAgICAgCWdlbmVzOgk4NgogICAgICAJcHJvdGVpbjoJODYKICAgICAgCXBhdGh3YXk6CTMKCgogICAgICByZW1vdmluZyByZWFjdGlvbiB3aXRoIGNsb3NlZCBmbHV4IGJvdW5kLi4uCiAgICAgIDAgImNsb3NlZCIgcmVhY3Rpb25zIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBleHRlcm5hbCBjb21wYXJ0bWVudC4uLgogICAgICAxMyBleHRlcm5hbCBzcGVjaWVzIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBpc29sYXRlZCBjb21wb3VuZHMuLi4KICAgICAgMCBpc29sYXRlZCBjb21wb3VuZHMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIE1lcmdpbmcgY29tcGFydG1lbnRzLi4uIERvbmUuCiAgICAgIHJlbW92aW5nIGR1cGxpY2F0ZWQgcmVhY3Rpb25zLi4uCiAgICAgIDEgZHVwbGljYXRlZCByZWFjdGlvbnMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCgoKICAgICAgCWNvbXBhcnRtZW50czoJMQogICAgICAJbWV0YWJvbGl0ZXM6CTQ5CiAgICAgIAlyZWFjdGlvbnM6CTM0CiAgICAgIAllbnp5bWVzOgk4NQogICAgICAJZ2VuZXM6CTg2CiAgICAgIAlwcm90ZWluOgk4NgogICAgICAJcGF0aHdheToJMwoKCiAgICAgIEV4cG9ydGluZy4uLiBEb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgaW5wdXRSZWFjdGlvbnMgfCBgIE5vbmUgYCB8CiAgICAgICB8IHJlbW92ZU5vRmx1eCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAiYnlfaWQiIGAgfAogICAgICAgfCByZW1vdmVEdXBsaWNhdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBleGNoYW5nZUNvbXBUb1JlbW92ZSB8IGAgInMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NCTUx3aXphcmQgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TQk1Md2l6YXJkIC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvMC8wL2RhdGFzZXRfYjAwMjBmYjMtNzdjYy00ZjA4LTgyNzYtZDM0MDNkNTE3ZWZmLmRhdCIgLXJjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2YvNS8zL2RhdGFzZXRfZjUzZTdhZWUtODA0Yi00MDRjLWFkODUtMjA3ZjYxNGMzMmY5LmRhdCIgLXJpYyAtcnIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOS80L2EvZGF0YXNldF85NGFiZmFmNi1jYWIyLTQ1MTItOTdjNC00Yzc2YzA0ZWY2YzguZGF0IiAtcjAgLW1jICJubyIgLXJkciAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzExOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2U1OTgzNjgyLTUzN2YtNDBiZC1iZTg5LTk4ODFjYzZjODg0Yy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KCgogICAgICAJY29tcGFydG1lbnRzOgkzCiAgICAgIAltZXRhYm9saXRlczoJMTEwNwogICAgICAJcmVhY3Rpb25zOgkxMTU4CiAgICAgIAllbnp5bWVzOgk1MTQKICAgICAgCWdlbmVzOgk1NzIKICAgICAgCXByb3RlaW46CTU3MgogICAgICAJcGF0aHdheToJNDgKCgogICAgICByZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IHNpZGUgY29tcG91bmRzIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBzaWRlIHJlYWN0aW9uLi4uCiAgICAgIDIgaXJyZWxldmFudCByZWFjdGlvbnMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIHJlbW92aW5nIHJlYWN0aW9uIHdpdGggY2xvc2VkIGZsdXggYm91bmQuLi4KICAgICAgMCAiY2xvc2VkIiByZWFjdGlvbnMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIHJlbW92aW5nIGlzb2xhdGVkIGNvbXBvdW5kcy4uLgogICAgICAwIGlzb2xhdGVkIGNvbXBvdW5kcyByZW1vdmVkIGZyb20gbmV0d29yay4KICAgICAgcmVtb3ZpbmcgZHVwbGljYXRlZCByZWFjdGlvbnMuLi4KICAgICAgMCBkdXBsaWNhdGVkIHJlYWN0aW9ucyByZW1vdmVkIGZyb20gbmV0d29yay4KCgogICAgICAJY29tcGFydG1lbnRzOgkzCiAgICAgIAltZXRhYm9saXRlczoJMTEwMQogICAgICAJcmVhY3Rpb25zOgkxMTUyCiAgICAgIAllbnp5bWVzOgk1MTQKICAgICAgCWdlbmVzOgk1NzIKICAgICAgCXByb3RlaW46CTU3MgogICAgICAJcGF0aHdheToJNDgKCgogICAgICBFeHBvcnRpbmcuLi4gRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHJlbW92ZUlzb2xhdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCByZW1vdmVOb0ZsdXggfCBgIHRydWUgYCB8CiAgICAgICB8IG1lcmdpbmdTdHJhdCB8IGAgIm5vIiBgIHwKICAgICAgIHwgcmVtb3ZlRHVwbGljYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZXhjaGFuZ2VDb21wVG9SZW1vdmUgfCBgICIiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyR3JhcGggKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkdyYXBoIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvYy82L2RhdGFzZXRfOWM2MjFiMGYtNDY0Mi00MzA3LWE0MzEtYmQwZmVkYWNiNDExLmRhdCIgIC1jICAgLWdtbCAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzMyZGFlMDBmLTg5ZjgtNDA1OS04YzYyLWJkYjUyMmFlZDI1YS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIC90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMjEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zMmRhZTAwZi04OWY4LTQwNTktOGM2Mi1iZGI1MjJhZWQyNWEuZGF0IGNyZWF0ZWQuCgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBiaXBhcnRpdGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wb3VuZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcmVhY3Rpb24gfCBgIGZhbHNlIGAgfAogICAgICAgfCB0YWIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBnbWwgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJHcmFwaCAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyR3JhcGggLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNC85LzMvZGF0YXNldF80OTNiY2ZkMS02ZGZmLTRkNGUtOWFlOC1kZGZlN2VjMDRlMjYuZGF0IiAtYiAgICAtZ21sIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTIzL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfN2ZmYTIwMzUtMjRhZS00YmViLTljZjUtZjRkOTJjNDMzZjE2LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyMy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzdmZmEyMDM1LTI0YWUtNGJlYi05Y2Y1LWY0ZDkyYzQzM2YxNi5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGJpcGFydGl0ZSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY29tcG91bmQgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZWFjdGlvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHRhYiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGdtbCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sMkdyYXBoIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJHcmFwaCAtaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9kL2MvNy9kYXRhc2V0X2RjNzQ3ZGUwLTVhZTMtNGUxYS04NDNiLWE5NDY2N2Y3MmQwZi5kYXQiICAgLXIgIC1nbWwgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMjUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mMTA0MjhjYy01NGEyLTQ4YjEtOGRhYi03ZWZiOTM4ZjU3MGUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTI1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZjEwNDI4Y2MtNTRhMi00OGIxLThkYWItN2VmYjkzOGY1NzBlLmRhdCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgYmlwYXJ0aXRlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcG91bmQgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZWFjdGlvbiB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgdGFiIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZ21sIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyVGFiIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJUYWIgLWkgIi0tPiIgLXIgIjw9PT4iIC1pbiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy83L2YvNy9kYXRhc2V0XzdmN2QzZjM3LWU1ZWUtNGQ3Yy1hMjMxLWIxZDhmOTk2NmU5My5kYXQiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMjcvb3V0cHV0cy9nYWxheHlfZGF0YXNldF82MTI0MTY2Yi1mZWY0LTQxMWQtOTU0Zi00ZTA0OTRmYmUwYWMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJUYWIgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMlRhYiAtaSAiLT4iIC1yICI9IiAtaW4gIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNi9iLzUvZGF0YXNldF82YjUxOTI3Yy0wN2ViLTRmM2QtOGNiMy02YzY2OWI5MjgxMWMuZGF0IiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTI5L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZGEyMTZiYjUtYWFhYS00ZjkwLTlhYzAtM2U3NDRmMjFhZDUwLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpIHwgYCAiLT4iIGAgfAogICAgICAgfCByIHwgYCAiPSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldENoYXJnZXNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRDaGFyZ2VzRnJvbUZpbGUgLWNjICIyIiAtY2kgIjEiICAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzQvOC9iL2RhdGFzZXRfNDhiYTc0OGItYjI5MS00MWJlLWIxZTgtMWE1OTM3MTRjN2RkLmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9kL2YvMi9kYXRhc2V0X2RmMjJkNGNkLTNiMTQtNDg1OS04ZWEwLWVlNmYzZTU3MmNkYy5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTMyL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOWMxY2U4MjctYWQwYy00NGVlLTg1MDMtMDBlMDVkYzhiZDVjLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDIgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfZTExNDgxODJfOWIyY180OTc1Xzg0YzhfNjFlNTUwOTRhZDBiCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGNoYXJnZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldENoYXJnZXNGcm9tRmlsZSAtY2MgIjIiIC1jaSAiMSIgICAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvZS83L2IvZGF0YXNldF9lN2IxYjAxYy1jZDU4LTQxYzUtYTQxYy1jZjkyMzQ4YTRkM2EuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzcvYS8yL2RhdGFzZXRfN2EyNTYxNmEtNGQwMC00ODkyLWJjZjctMjk5ZGVhNzVjODU5LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMzUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zZjRhMWQ1NC1mMWNmLTQ4MzgtYmQ2Zi1lYmViOGM3NTcxMjYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMSBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF8xMzE2NmMzNF8yNGE0XzQyZTNfYjM3OF9lM2RlNzhkN2YxZGYKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sY2hhcmdlIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRDaGFyZ2VzRnJvbUZpbGUgKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIC1jYyAiMiIgLWNpICIxIiAgIC1uICIxIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9hL2QvYS9kYXRhc2V0X2FkYThiYmZiLTE0YjgtNDkxNC1hNTE4LTM5OTAyMzg1YzFlZS5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC9lLzcvZGF0YXNldF84ZTcyYWJhOS04MjNmLTQyMzctYWY0Yy1hNjkyNGYwNDY3OTEuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEzOC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzJjZmUyYzVhLTlmOTItNDRjNy1iYTIzLTBiMjRmMjg3NTcwMS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAxIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzY2NDY1ODAzX2VhOTlfNGUzMl85ZWU4XzQ3OWI2MmE1YWZjZgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xjaGFyZ2UgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjEiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldENoYXJnZXNGcm9tRmlsZSAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRDaGFyZ2VzRnJvbUZpbGUgLWNjICIyIiAtY2kgIjEiICAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2QvYS9hL2RhdGFzZXRfZGFhNGE0YzEtNjI4YS00YzI5LTgzZjMtYTUwZjg4NGY4ZDI4LmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9hLzQvYS9kYXRhc2V0X2E0YTNkYzM0LWY2ZTQtNDdmNS05Y2M1LTg2ZTlkZjRhYTdkNi5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfZDU2ZWU3NGQtNzVhZC00MjEwLWE4YWYtOWI1MGY5NTczYTYwLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzQ2ZmJiMmMxJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDIgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfMTVlZTU1ZTNfNDc2ZV80MWVhX2IxY2JfMmYwMmIyNTQ1NzU2CiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGNoYXJnZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Q2hhcmdlc0Zyb21GaWxlIChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldENoYXJnZXNGcm9tRmlsZSAtY2MgIjIiIC1jaSAiMSIgLXAgLXMgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzUvMC85L2RhdGFzZXRfNTA5MGM0YzctMWNmYy00YjA3LWI3OTMtMDUwNGJmODNmMDRhLmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8yLzkvZS9kYXRhc2V0XzI5ZWMxZGVhLTYxZTAtNDQ0OS05NDNmLWIzNDM2MGEzN2VjNC5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQ0L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYmE3MmFiN2EtZWVmMi00Mzc4LTkyOTQtNThiZGYzNjBlODk0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMyBhdHRyaWJ1dGlvbnMKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sY2hhcmdlIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIHRydWUgYCB8CiAgICAgICB8IHMgfCBgIHRydWUgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0RWNzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0RWNzRnJvbUZpbGUgLWNlYyAiMiIgLWNpICIxIiAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvMi9kL2RhdGFzZXRfYjJkOWRjMDktMjRhYS00ZWEyLTk5MmUtNWQwYjYzNzcwNmUyLmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9iL2YvZi9kYXRhc2V0X2JmZmNmOTk1LWU0YmMtNGU3Mi05NTAwLWQxNDFjYjg5NGQyOS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQ3L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfOTE1MmQyMDItMzgzZC00NzRjLThkOTItYTg1ZmVmODg3YzU4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIDIgcmVhY3Rpb25zIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzA4NGI4YzcxXzk1ZTBfNDUyYl85ZTdhXzM5OWFhZGM4YWY3YQogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xlYyB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRFY3NGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRFY3NGcm9tRmlsZSAtY2VjICIyIiAtY2kgIjEiICAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC83LzgvZGF0YXNldF84NzgwMDBmZS1mYzQzLTQ0ZmYtYjYxNi1lNmU1Yjc2OTdiZGQuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzYvYS8zL2RhdGFzZXRfNmEzNGJiNTYtNDgzZC00OTYyLWI0YzQtNmUzOTNhYzU5YWE0LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNTAvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZjc1MzQ5Ny1iNDBiLTRmZWEtYTJlMS00YzQyYzE3ZjhkMTAuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDEKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgKioqKioqKioKICAgICAgW1dhcm5pbmddQXR0cmlidXRlICIxLjIuMy40LjUiIG5vdCB3ZWxsIGZvcm1hdHRlZAogICAgICAqKioqKioqKgogICAgICBFcnJvciBpbiBzZXR0aW5nIEVDcwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZWMgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0Rm9ybXVsYXNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRGb3JtdWxhc0Zyb21GaWxlIC1jZiAiMiIgLWNpICIxIiAgIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8zLzgvYS9kYXRhc2V0XzM4YWIxNDkwLTIwYzctNGUyOS1hZGRiLTE2YTg1M2Y5NmE1Yy5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy9kLzYvZGF0YXNldF9jZDYyZmI5OC02ZmFkLTRiNTEtOGZjZC1jYzEyYWMzODdhZTMuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE1My9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2E0MTA4ZWVhLWVlM2MtNGE4MS1iYjE3LTdkZmRiNzZmZTgwOC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2M2ZTRkNGIyXzQzNzBfNDg5NV85MmNmXzliNzBmZTFjMzI0OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRGb3JtdWxhc0Zyb21GaWxlIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldEZvcm11bGFzRnJvbUZpbGUgLWNmICIyIiAtY2kgIjEiICAgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvNS82L2RhdGFzZXRfYjU2OWIxODQtOTdmNS00ZTFkLThhMDgtN2M0NDQ4OWQxMDg0LmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9kL2IvOC9kYXRhc2V0X2RiODk4MDk2LWQ2MjYtNDhjNC04ZTA3LWYzYTExOTU2Y2VhNS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTU2L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfNWFiYTUwMmUtYjgzZC00ZWVmLTliM2QtZjAwNDc3NmIyNmFiLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAxCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgICoqKioqKioqCiAgICAgIFtXYXJuaW5nXUF0dHJpYnV0ZSAiMTJDSDRPIiBub3Qgd2VsbCBmb3JtYXR0ZWQKICAgICAgKioqKioqKioKICAgICAgRXJyb3IgaW4gU2JtbFNldEZvcm11bGEKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldEdwcnNGcm9tRmlsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRHcHJzRnJvbUZpbGUgLWNncHIgIjIiIC1jaSAiMSIgIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy83LzIvNy9kYXRhc2V0XzcyNzdhYWY5LWE4NjMtNDUxYi1iNDdlLTRmMWNlYjEzNzI5ZC5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC8wLzUvZGF0YXNldF84MDViZTJmYS1jNTA0LTQ2OTktODkyMC04OTVhMWE1NTk1MjkuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE1OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzdlMGVmZWQ4LTFkMTItNGY3MS1hZmI4LTU5MGE0ZjZhN2RjNy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGdlbmUgYXNzb2NpYXRpb25zIGNyZWF0ZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF80MTllNWEyMF9hYmM5XzQzNWZfOTBjMl9iZmRkZTBhYmRhNjUKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZ3ByIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldElkc0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldElkc0Zyb21GaWxlIC1jbmV3ICIyIiAtY2kgIjEiICAgLW8gIk1FVEFCT0xJVEUiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9kLzgvMC9kYXRhc2V0X2Q4MDkzZjVmLWNkMzYtNDcwYy1hNDg2LTNjYjgxOTRjMmFkZS5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYy80L2MvZGF0YXNldF9jNGM1N2IwMy1iZTBhLTRmMTgtYTI2MC02ZWVmMmQwZTVkYjYuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE2Mi9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2YxMzliYjdkLTZlZjQtNDdhNy1hMzYwLTY4MjQ2NzNkZmNkNS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGVudGl0aWVzIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzgwNzE0YzBiXzY4YWVfNDMyNF9iZDAwXzJlZjliNDYxZTEyMQogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldElkc0Zyb21GaWxlIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldElkc0Zyb21GaWxlIC1jbmV3ICIyIiAtY2kgIjEiICAgLW8gIlJFQUNUSU9OIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC9jLzIvZGF0YXNldF84YzJkYTE1Mi0wYWJmLTQ2M2UtYTMwZC02NmZiNzQ1YTYxNmUuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2EvNS8xL2RhdGFzZXRfYTUxMDFhOTItOTA5ZC00OTUzLTg5NWYtM2VkZTQ3MTk0OGMzLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNjUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mM2YyYTAwYy1mOTdmLTQzY2UtODlhZC0wMjYzNTk3N2YwNzUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF83YjZjYmZhYl80MjhiXzQyNzVfOGQ0NF83ZDZhMjI0YWY5ZTMKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJSRUFDVElPTiIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0SWRzRnJvbUZpbGUgKFRlc3QgIzMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0SWRzRnJvbUZpbGUgLWNuZXcgIjIiIC1jaSAiMSIgICAtbyAiUEFUSFdBWSIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvOC8zL2RhdGFzZXRfMDgzYWU0MmUtMzA3Yy00ODM1LTk4YWItYjUxZTkxODlmZDEzLmRhdCIgLXRhYiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80L2MvNC9kYXRhc2V0XzRjNDA1MTE2LWMwNDItNDY1MS1hNDhiLTA4OTVkN2RhM2JlMS5kYXQiIC1jICIjIiAtb3V0ICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTY4L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMTRlYzU2ZGUtNDhjOS00MTYxLWExNDUtOTY5NzMyMmJiOGNkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgMiBlbnRpdGllcyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJQQVRIV0FZIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXRJZHNGcm9tRmlsZSAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRJZHNGcm9tRmlsZSAtY25ldyAiMiIgLWNpICIxIiAgIC1vICJHRU5FIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOS81LzAvZGF0YXNldF85NTBhMDQ2Ni04ZGEyLTQzOGQtYjY1MS04ZWFmZTY1ZDJkMGUuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvMi82L2RhdGFzZXRfMDI2MDg2MzItNDc5OS00OGRkLTgyODEtMmE2NDk3NDQ1ZWQzLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzEvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8wOWQ4MGU3Ny01ODQzLTQ0N2MtYTlhYi02Mjg2MWEyOTlkMjguZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIGVudGl0aWVzIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIkdFTkUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldElkc0Zyb21GaWxlIChUZXN0ICM1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldElkc0Zyb21GaWxlIC1jbmV3ICIyIiAtY2kgIjEiICAgLW8gIkNPTVBBUlRNRU5UIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYS85L2EvZGF0YXNldF9hOWE1N2IyZi0yYmVjLTRiYmUtODc1YS03ZWNmOTVlOTUyYzQuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzAvZC81L2RhdGFzZXRfMGQ1MmM2ZjYtMzM0Mi00YmE0LTlhMjctNjI0YzdmOTUxODFkLmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzQvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZTg2MGZlNi0yN2QzLTQ4NzEtOTAwYy1jNDAzZDdmN2NiYjUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIGVudGl0aWVzIHByb2Nlc3NlZAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIkNPTVBBUlRNRU5UIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXROYW1lc0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldE5hbWVzRnJvbUZpbGUgLWNuYW1lICIyIiAtY2kgIjEiICAgLW8gIk1FVEFCT0xJVEUiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy83LzgvYS9kYXRhc2V0Xzc4YTJjNWU2LTAwOTctNDIzYS04ZTMxLWE4OWM3Y2M5M2I2OC5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi83LzgvZGF0YXNldF9iNzg3MmRiNS0zMGY4LTQ3N2ItYTY5MS01ZWVkM2I5YzA2YzUuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE3Ny9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2U0NTU4ZWRhLTYxNTAtNGQ4NC04YmRjLWU4MWI0NmIyZDFjOS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzIxNDhkM2M2Xzk5MDBfNDUwZF9iYTQ2XzQ5ZWFmMGJhOGMxZQogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldE5hbWVzRnJvbUZpbGUgKFRlc3QgIzIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0TmFtZXNGcm9tRmlsZSAtY25hbWUgIjIiIC1jaSAiMSIgICAtbyAiUkVBQ1RJT04iIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy84LzYvZS9kYXRhc2V0Xzg2ZTE1ODU5LWU5ODMtNDM4My1iMGE5LTk0YmFhMDMxMDIwOC5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMi8wL2EvZGF0YXNldF8yMGFjNjNkYS00MjhlLTRiZTgtOWUyNC0wZTZkOWEzYmQzNmEuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4MC9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2Y0YTAzNTcwLThjZGItNGY3OS1iNmE5LTZmMTM1ZGJiODc2Mi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2Y4NjdkNjJjX2YzOGVfNDQ1Yl85YjI5XzljMTVkNjJmYWFlNwogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIlJFQUNUSU9OIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxTZXROYW1lc0Zyb21GaWxlIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldE5hbWVzRnJvbUZpbGUgLWNuYW1lICIyIiAtY2kgIjEiICAgLW8gIlBBVEhXQVkiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80LzIvNC9kYXRhc2V0XzQyNGJjZmRiLTUyYTQtNDRjNy04ZjRhLTMxMmIxOWY4ZmNmYi5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi8zLzcvZGF0YXNldF9iMzcyZjU0My1mNTBlLTQ2Y2YtOGEyZi04YWU1YjNhZWVkN2IuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4My9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2U0NTc1ZDRiLTI4NmQtNDQzMi04ZWFmLWJhYmFiMDE3ZjY3NS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDIgYXR0cmlidXRpb25zCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBYZm0xMTU4CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbG5hbWUgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvIHwgYCAiUEFUSFdBWSIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0TmFtZXNGcm9tRmlsZSAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXROYW1lc0Zyb21GaWxlIC1jbmFtZSAiMiIgLWNpICIxIiAgIC1vICJHRU5FIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMS9kLzgvZGF0YXNldF8xZDgyMDNjNS04NjViLTRjODQtYWY1OS0wMGRiOTZhYzEyOTUuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzYvNC85L2RhdGFzZXRfNjQ5OWMxZDItMWUzOC00MDI5LWE2ZGItYWNlODhkMzM1YmQ3LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xODYvb3V0cHV0cy9nYWxheHlfZGF0YXNldF84NjZhOTNmNC04MzllLTRhODktOGQyNS04OGJlZmY5MTEyMjQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgQ2hlbWljYWwgZm9ybXVsYSBub3QgaW4gZ29vZCBmb3JtYXQgKEM0MS41NTQwNjE4Mzc1NDAwNzVINzEuNzg1NTM1Mzc5NDg5NjROOS44NTM4MjQwMDg4NDAxNU8xNC45MzgyNDQwMTczODk5MzRQMC44ODExMjAwMjU4MDAwMTU2UjEuMjc2NzU2NDc4MzE4OTNFLTE1TW43LjM0OTE5RS00TW83LjM3Njg1RS02Q2wwLjAwNTUzMjYzOUswLjIwNzQ3Mzk1MUNvMi42NzQxMUUtNUN1Ny41MzM2MUUtNFMwLjI0NzAwOTE1Njc4MDAwMDAyWm4zLjYyMzg4RS00TWcwLjAwOTIyMTA2NE5pMy40MzAyNEUtNENhMC4wMDU1MzI2MzlGZTAuMDE3MzQ2NTE1Mzk5OTk5OTk4KSBmb3IgTV9CSU9NQVNTX1hGX2MKICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIkdFTkUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFNldFBhdGh3YXlzRnJvbUZpbGUgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TYm1sU2V0UGF0aHdheXNGcm9tRmlsZSAtY3AgIjIiIC1zZXAgInwiIC1jaSAiMSIgIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8yL2YvZS9kYXRhc2V0XzJmZWIyYWJkLTNjMTAtNGI1YS1iMTc3LWM2NjQ5NTJmY2FmMy5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi8wLzQvZGF0YXNldF9iMDRlOTFiZS1iMmExLTRmNjgtOTlhMy0xZjllZmI1MjhiMzMuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4OS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2NmNTUxOTdmLTNjMzgtNDZmYy04ZGIwLTRlZjFkMTUwYmFiZi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAzIHJlYWN0aW9ucyBwcm9jZXNzZWQKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF80ZWIzMWExNV9iZmZhXzQzMTJfOTQ5YV8zZTZmZWYxYjlhODcKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29scCB8IGAgIjIiIGAgfAogICAgICAgfCBzZXAgfCBgICJ8IiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0UGF0aHdheXNGcm9tRmlsZSAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxTZXRQYXRod2F5c0Zyb21GaWxlIC1jcCAiMiIgLXNlcCAiICsgIiAtY2kgIjEiICAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMi80L2IvZGF0YXNldF8yNGJjNTBjMi02Mzk4LTQxODMtYmE3OC03OTFjYzFmNWI0YTkuZGF0IiAtdGFiICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzkvOS81L2RhdGFzZXRfOTk1ZjdlYzAtODdmMi00NTIyLWFhODEtZGIyOGIzMTdlODQ0LmRhdCIgLWMgIiMiIC1vdXQgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xOTIvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8xYjRiMjA2Mi1iMTFkLTQ3OWQtYTQyZS1hZThjNTMxZmUzZDUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgMyByZWFjdGlvbnMgcHJvY2Vzc2VkCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfNTRiYzkxNDFfNjQ2NF80OWMyX2IxOTlfYmVhYTJlZjQxMTY3CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbHAgfCBgICIyIiBgIHwKICAgICAgIHwgc2VwIHwgYCAiICsgIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sU2V0UmVmc0Zyb21GaWxlIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2JtbFNldFJlZnNGcm9tRmlsZSAtY3IgIjIiIC1yZWYgIkluQ2hpIiAtY2kgIjEiICAgLW8gIk1FVEFCT0xJVEUiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8yLzkvYS9kYXRhc2V0XzI5YTQwMzI0LTM2NGEtNDZmOC1iN2I4LWRmOGE0MGFkYjQ2Mi5kYXQiIC10YWIgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvMy82LzQvZGF0YXNldF8zNjQ3OTRjOS0wNjc4LTQyNzUtOTAxZi01ZDY2ZjEwMzFjYzYuZGF0IiAtYyAiIyIgLW91dCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE5NS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2VlYjQ1Y2QxLTI3M2UtNGMyMC1hMDJlLWZlNTZiZDIwNjNmNy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAyIGF0dHJpYnV0aW9ucwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzExNDVmMDYyX2ZmYzBfNDIzYV84ZjI1X2U1YzhiMzI5MDNjMwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xSZWYgfCBgICIyIiBgIHwKICAgICAgIHwgcmVmIHwgYCAiSW5DaGkiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWxUb01ldGFib2xpdGVUYWJsZSAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNibWxUb01ldGFib2xpdGVUYWJsZSAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8xLzkvNy9kYXRhc2V0XzE5NzQ0MTNiLWEzZWYtNGY1Ni05MjA3LTgyZTMyODE3ZDVjMi5kYXQiIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTk3L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfYjY1YjU1NDQtNzRjMS00OWI0LWIxMzEtMmQ0ZjhkYjM1ZWY3LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1Njb3BlTmV0d29yayAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2NvcGVOZXR3b3JrIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2QvZC9kL2RhdGFzZXRfZGRkNWY1YWQtZDkxOS00ZDhmLWFkZDctZmFiOTBiZjMwM2JjLmRhdCIgLXMgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNS80LzEvZGF0YXNldF81NDExMjVhZi0xODJmLTQyY2QtYjRiNi1jYzMyYzQwOWVjYzUuZGF0IiAtc2MgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYS8zL2IvZGF0YXNldF9hM2I4ZDJlMy1mNzg2LTRmMWEtOGE0Yy1jZDA2YTY3MDA2OTUuZGF0IiAgICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2E5OTBhNTU0LTMxOGYtNDhlNC1iOGVhLWQ2YjE3N2FiNDNlYy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKICAgICAgV0FSTklORzpnYWxheHkubW9kZWw6RGF0YXR5cGUgY2xhc3Mgbm90IGZvdW5kIGZvciBleHRlbnNpb24gJ2dtbCcKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2E5OTBhNTU0LTMxOGYtNDhlNC1iOGVhLWQ2YjE3N2FiNDNlYy5kYXQgY3JlYXRlZC4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGluY2x1ZGVTaWRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJlYWN0aW9uVG9JZ25vcmVGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB0cmFjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGFzVGFibGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NlZWRzQW5kVGFyZ2V0cyAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2VlZHNBbmRUYXJnZXRzIC1pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2EvNS83L2RhdGFzZXRfYTU3MTdhOGQtYmM4Yi00ZTRkLTkxMjAtZDZlYzIzNmEwMGVjLmRhdCIgLXMgICAgICAgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMDMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8yMDE1NTQwOC0wZmE2LTQ2NTktYjdiNS1lMmQyNzdlZDI0MGYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCBjb21wIHwgYCAiIiBgIHwKICAgICAgIHwgc291cmNlIHwgYCB0cnVlIGAgfAogICAgICAgfCBzaW5rIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm90c291cmNlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm90c2luayB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGtlZXBJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVzZUJvcmVuc3RlaW5BbGcgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VJbnRlcm5hbCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2VlZHNBbmRUYXJnZXRzIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5TZWVkc0FuZFRhcmdldHMgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvZS9iLzMvZGF0YXNldF9lYjNiYjgyNy1kY2Y3LTQ0ZmUtYjY5ZC0zYjNjNjRhYTdiMDkuZGF0IiAtYyAiZSIgIC10ICAgICAtaW4gLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMDUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9jNDU1ODY1OC0zMGY1LTQzNTYtYmZkZC01MjkyNjc4YmIyYmMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCBjb21wIHwgYCAiZSIgYCB8CiAgICAgICB8IHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHNpbmsgfCBgIHRydWUgYCB8CiAgICAgICB8IG5vdHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vdHNpbmsgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrZWVwSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VCb3JlbnN0ZWluQWxnIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdXNlSW50ZXJuYWwgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2VlZHNBbmRUYXJnZXRzIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5TZWVkc0FuZFRhcmdldHMgLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvNS9iLzMvZGF0YXNldF81YjM1YTljMS0yMjVkLTQ3MWEtYjBlMi0yY2JlMWQxYjJkNGYuZGF0IiAtYyAiZSIgIC10ICAgIC1CICAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwNy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0X2Q0ZWIyMzJjLWIyMGYtNDdkNC1iZjg0LTFkYWU4YmI1NjljNC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIGRvbmUuCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpbnB1dFNpZGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGNvbXAgfCBgICJlIiBgIHwKICAgICAgIHwgc291cmNlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgc2luayB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbm90c291cmNlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm90c2luayB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGtlZXBJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVzZUJvcmVuc3RlaW5BbGcgfCBgIHRydWUgYCB8CiAgICAgICB8IHVzZUludGVybmFsIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TaWRlQ29tcG91bmRzU2NhbiAoVGVzdCAjMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2lkZUNvbXBvdW5kc1NjYW4gLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi81LzMvZGF0YXNldF9iNTM2MWQ3Ny1kMzJlLTQ2Y2EtYWUyYS1lYTAzMDk2YjEyMzYuZGF0IiAgIC1kICI0MDAiICAgLW0gIm5vIiAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzRlY2M2ZmI5LWIzZGYtNGQ4Mi1hZjFkLWQ0ZWJhODBlMDk1NS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIC90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi81LzMvZGF0YXNldF9iNTM2MWQ3Ny1kMzJlLTQ2Y2EtYWUyYS1lYTAzMDk2YjEyMzYuZGF0CiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIFNjYW5pbmcuLi4KICAgICAgZG9uZQogICAgICBmb3VuZCA2IHNpZGUgY29tcG91bmQgYW1vbmcgMTEwNyBjb21wb3VuZHMKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIwOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzRlY2M2ZmI5LWIzZGYtNGQ4Mi1hZjFkLWQ0ZWJhODBlMDk1NS5kYXQKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVPbmx5IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm9SZXBvcnRWYWx1ZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgIjQwMCIgYCB8CiAgICAgICB8IGRlZ3JlZVByZWNlbnRpbGUgfCBgICJuYW4iIGAgfAogICAgICAgfCBmbGFnSW5vcmdhbmljIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZmxhZ05vRm9ybXVsYSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHBhcmFsbGVsRWRnZSB8IGAgIm5hbiIgYCB8CiAgICAgICB8IG1lcmdpbmdTdHJhdCB8IGAgIm5vIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TaWRlQ29tcG91bmRzU2NhbiAoVGVzdCAjMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2lkZUNvbXBvdW5kc1NjYW4gLWkgIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC8wL2EvZGF0YXNldF84MGEwZjQ3NS1kNDk4LTRiMzEtYTlkYy03ZGI4ZWMzZjZmOWMuZGF0IiAgLWlkIC1kICI0MDAiICAgLW0gIm5vIiAtbyAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg1YzNlZTFlLWJiYjYtNGM2ZC1iNDZmLTBkNGIyNDFhNjAwYS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIC90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC8wL2EvZGF0YXNldF84MGEwZjQ3NS1kNDk4LTRiMzEtYTlkYy03ZGI4ZWMzZjZmOWMuZGF0CiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIFNjYW5pbmcuLi4KICAgICAgZG9uZQogICAgICBmb3VuZCA2IHNpZGUgY29tcG91bmQgYW1vbmcgMTEwNyBjb21wb3VuZHMKICAgICAgL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxMS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg1YzNlZTFlLWJiYjYtNGM2ZC1iNDZmLTBkNGIyNDFhNjAwYS5kYXQKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVPbmx5IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm9SZXBvcnRWYWx1ZSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCAiNDAwIiBgIHwKICAgICAgIHwgZGVncmVlUHJlY2VudGlsZSB8IGAgIm5hbiIgYCB8CiAgICAgICB8IGZsYWdJbm9yZ2FuaWMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmbGFnTm9Gb3JtdWxhIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcGFyYWxsZWxFZGdlIHwgYCAibmFuIiBgIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAibm8iIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICMxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIxIiAtY2YgIjIiICAgLWUgIl9iIiAtaSAiLS0+IiAtciAiPD09PiIgLWluICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2UvMS9hL2RhdGFzZXRfZTFhNzM3ZjAtZGY2Yi00ZTc3LWIwODYtMjQ1MWEwYThlMDBhLmRhdCIgLWlkICJOQSIgIC1kY3B0ICJjIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMTMvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mM2QwMTk4Mi0wOTQ1LTRiMzUtOTAwYy1lZjQzZjJmOTAyZWQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF9kYmQ0ZTEwOV81NTRiXzQ4ZWJfYTUyMl9iN2M0OWZmZjc3MjAKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjIiIGAgfAogICAgICAgfCBycCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1wIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZSB8IGAgIl9iIiBgIHwKICAgICAgIHwgaSB8IGAgIi0tPiIgYCB8CiAgICAgICB8IHIgfCBgICI8PT0+IiBgIHwKICAgICAgIHwgaWQgfCBgIDJhMDJkMmZhOGUyNTJiYTQgYCB8CiAgICAgICB8IGNyZWF0ZUNvbXBhcnRtZW50IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIyIiAtY2YgIjMiICAgLWUgIl9iIiAtaSAiLS0+IiAtciAiPD09PiIgLWluICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2UvMS9lL2RhdGFzZXRfZTFlNzc1OTQtNDgxMy00MGZkLWFkYjMtOTIzZGZkZDM2YzdhLmRhdCIgLWlkICJOQSIgIC1kY3B0ICJjIiAtbiAiMCIgLXNibWwgIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMTUvb3V0cHV0cy9nYWxheHlfZGF0YXNldF8zN2I4OTU5ZS01ODY5LTQ2ZDMtYTllZC05YWRiNWFiZmViMTEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF83MWRhYjJmOF8xMzkxXzRkMjFfYjEzZV8xZTA0Y2E5MTAxMGYKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29saWQgfCBgICIyIiBgIHwKICAgICAgIHwgY29sZm9ybXVsYSB8IGAgIjMiIGAgfAogICAgICAgfCBycCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1wIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZSB8IGAgIl9iIiBgIHwKICAgICAgIHwgaSB8IGAgIi0tPiIgYCB8CiAgICAgICB8IHIgfCBgICI8PT0+IiBgIHwKICAgICAgIHwgaWQgfCBgIDJhMDJkMmZhOGUyNTJiYTQgYCB8CiAgICAgICB8IGNyZWF0ZUNvbXBhcnRtZW50IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZGVmYXVsdENvbXBhcnRtZW50IHwgYCAiYyIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wMGQyczVrX2wvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInRhYnVsYXIiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICMzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIxIiAtY2YgIjIiICAgLWUgIl9iIiAtaSAiLT4iIC1yICI9IiAtaW4gIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvYi9hL2MvZGF0YXNldF9iYWM5MzVmYy1jM2YzLTRmZTEtYmY2My03M2NhMzkwZTg0NWQuZGF0IiAtaWQgIk5BIiAgLWRjcHQgImMiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxNy9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0Xzg1NzYwMGQxLTVkNmMtNGRkZS04YjdiLTFmNzkxYzJiNGI1YS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgVGhlIGlucHV0IGZpbGUgbG9va3MgZ29vZCBhbmQgY29udGFpbnMgNyByZWFjdGlvbnMKICAgICAgNyByZWFjdGlvbnMsIDggbWV0YWJvbGl0ZXMgYW5kIDIgY29tcGFydG1lbnRzIGNyZWF0ZWQKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzk1NjA4NDNjXzJkZjJfNDVjYl84MDM4XzRmYjMyZDE5MGIwOAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBlIHwgYCAiX2IiIGAgfAogICAgICAgfCBpIHwgYCAiLT4iIGAgfAogICAgICAgfCByIHwgYCAiPSIgYCB8CiAgICAgICB8IGlkIHwgYCAyYTAyZDJmYThlMjUyYmE0IGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9UYWIyU2JtbCAoVGVzdCAjNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMSIgLWNmICIyIiAtcnAgLW1wIC1lICJfZSIgLWkgIi0tPiIgLXIgIjw9PT4iIC1pbiAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy9hLzkvNC9kYXRhc2V0X2E5NDg4MGZiLWFmODMtNDA5Ny05YjNlLTQxMzI2MzJjMWNiNi5kYXQiIC1pZCAiTkEiIC1jcHQgLWRjcHQgImMiIC1uICIwIiAtc2JtbCAiL3RtcC90bXAwZDJzNWtfbC9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxOS9vdXRwdXRzL2dhbGF4eV9kYXRhc2V0XzQ0M2E2MDJiLWFmMGMtNGY0Ni1iYzA4LWYwN2EwZjQ1MDkwMC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgVGhlIGlucHV0IGZpbGUgbG9va3MgZ29vZCBhbmQgY29udGFpbnMgNyByZWFjdGlvbnMKICAgICAgNyByZWFjdGlvbnMsIDggbWV0YWJvbGl0ZXMgYW5kIDIgY29tcGFydG1lbnRzIGNyZWF0ZWQKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICc1Y2IwZDkwMicgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2JhYmY1YTAzX2E1ZDhfNDA3Y185NDQ4XzY0MWMwNzAzZDRjYgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCB0cnVlIGAgfAogICAgICAgfCBtcCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZSB8IGAgIl9lIiBgIHwKICAgICAgIHwgaSB8IGAgIi0tPiIgYCB8CiAgICAgICB8IHIgfCBgICI8PT0+IiBgIHwKICAgICAgIHwgaWQgfCBgIDJhMDJkMmZhOGUyNTJiYTQgYCB8CiAgICAgICB8IGNyZWF0ZUNvbXBhcnRtZW50IHwgYCB0cnVlIGAgfAogICAgICAgfCBkZWZhdWx0Q29tcGFydG1lbnQgfCBgICJjIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAidGFidWxhciIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfVGFiMlNibWwgKFRlc3QgIzUpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5UYWIyU2JtbCAtY2kgIjEiIC1jZiAiMiIgICAtZSAiX2IiIC1pICItLT4iIC1yICI8PT0+IiAtaW4gIi90bXAvdG1wMGQyczVrX2wvZmlsZXMvOC80L2UvZGF0YXNldF84NGU4ODY4ZS1hOTk4LTQ4YjQtYjhiZi0xMWFiMGQyMjVkOGUuZGF0IiAtaWQgIm15TW9kZWwiICAtZGNwdCAiYyIgLW4gIjAiIC1zYm1sICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjIxL291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfY2YwY2ZlNWItNGNkYS00YjMwLWEyNTQtZmRlYTZjZTFjOWE0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBUaGUgaW5wdXQgZmlsZSBsb29rcyBnb29kIGFuZCBjb250YWlucyA3IHJlYWN0aW9ucwogICAgICA3IHJlYWN0aW9ucywgOCBtZXRhYm9saXRlcyBhbmQgMiBjb21wYXJ0bWVudHMgY3JlYXRlZAogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBteU1vZGVsCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIyIiBgIHwKICAgICAgIHwgcnAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGUgfCBgICJfYiIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCBjOWFhYTZhNmMwNjA5NWZmNzlmYTU3YzM2YjhlZDlhYyBgIHwKICAgICAgIHwgY3JlYXRlQ29tcGFydG1lbnQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkZWZhdWx0Q29tcGFydG1lbnQgfCBgICJjIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAidGFidWxhciIgYCB8CgoKCiAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfVG9wb2xvZ2ljYWxQYXRod2F5QW5hbHlzaXMgKFRlc3QgIzEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlRvcG9sb2dpY2FsUGF0aHdheUFuYWx5c2lzIC1zICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzQvMi9kL2RhdGFzZXRfNDJkYjcwNTUtOGNmOS00OTZhLWIzZDQtYWY5YmQ4MTIwZWM4LmRhdCIgLXNjICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzL2IvOC84L2RhdGFzZXRfYjg4MTE0ZmItYTgyYy00Y2I4LWI0YjAtNWU5YTM5NWZiYWUyLmRhdCIgLW1jICJubyIgICAtbm9pICIvdG1wL3RtcDBkMnM1a19sL2ZpbGVzLzMvNC8xL2RhdGFzZXRfMzQxOTU0ZTEtM2Q0OS00MmM0LTgwYjYtNTZmMDY5NTM2OWM2LmRhdCIgIC1vICIvdG1wL3RtcDBkMnM1a19sL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjI1L291dHB1dHMvZ2FsYXh5X2RhdGFzZXRfMWI2OTE2N2YtNzI1Zi00YjBmLTk0YWEtNzBiODg3YWE5ZDE1LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzVjYjBkOTAyJyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KCgogICAgICBCdWlsZGluZyBOZXR3b3JrLi4uUmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgNiBjb21wb3VuZHMgcmVtb3ZlZC4KICAgICAgIE5ldHdvcmsgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuCgoKICAgICAgSW1wb3J0aW5nIG5vZGVzIG9mIGludGVyZXN0CiAgICAgIERvbmUuCiAgICAgIENvbXB1dGluZyBQYXRod2F5IHRvcG9sb2d5IEFuYWx5c2lzLi4uIChtYXkgdGFrZSBhIHdoaWxlKQogICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi5Eb25lLgoKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAibm8iIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvdXQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDBkMnM1a19sL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RvcG9sb2dpY2FsUGF0aHdheUFuYWx5c2lzIChUZXN0ICMyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Ub3BvbG9naWNhbFBhdGh3YXlBbmFseXNpcyAtcyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy8xLzkvZS9kYXRhc2V0XzE5ZTY3YzkyLWNhMGItNDU3YS04NDM4LTAwMjUzYjIxMDcyZC5kYXQiIC1zYyAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy80L2EvZS9kYXRhc2V0XzRhZTc1MjJjLWIyMGQtNGViZC05Mzg0LTA4MTNkOGZlMzIzNy5kYXQiIC1tYyAiYnlfaWQiIC1yaSAtdW4gLW5vaSAiL3RtcC90bXAwZDJzNWtfbC9maWxlcy82LzQvNy9kYXRhc2V0XzY0NzVlNzAxLTJiODctNGQzMi1iNzFkLTY1OTdmNDcyMWE4NC5kYXQiIC1vdXQgLW8gIi90bXAvdG1wMGQyczVrX2wvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMjkvb3V0cHV0cy9nYWxheHlfZGF0YXNldF9mZmU3YjI3OC1jMjRmLTRjYmQtYTRlZC1kZjFhZGM2OGQzMWQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnNWNiMGQ5MDInIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDEyIGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgoKCiAgICAgIEJ1aWxkaW5nIE5ldHdvcmsuLi5SZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IGNvbXBvdW5kcyByZW1vdmVkLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICBNZXJnaW5nIGNvbXBhcnRtZW50cy4uLiBEb25lLgogICAgICBSZW1vdmUgaXNvbGF0ZWQgbm9kZXMuLi4KICAgICAgCXJlbW92aW5nIEdseWNlcm9waG9zcGhvc2VyaW5lCiAgICAgIAlyZW1vdmluZyBtZXRoYW5lc3VsZm9uYXRlCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob2Nob2xpbmUKICAgICAgCXJlbW92aW5nIFAxX1A1X0Jpc181X19hZGVub3N5bF9fcGVudGFwaG9zcGhhdGUKICAgICAgCXJlbW92aW5nIE1fc19jCiAgICAgIAlyZW1vdmluZyBNX2N5c19EX2MKICAgICAgCXJlbW92aW5nIE1fbWV0X0RfYwogICAgICAJcmVtb3ZpbmcgRF9HbHljZXJhbGRlaHlkZQogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9fMV9pbm9zaXRvbAogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9ldGhhbm9sYW1pbmUKICAgICAgCXJlbW92aW5nIEdseWNlcm9waG9zcGhvZ2x5Y2Vyb2wKICAgICAgCXJlbW92aW5nIFAxX1A0X0Jpc181X19hZGVub3N5bF9fdGV0cmFwaG9zcGhhdGUKICAgICAgIERvbmUuCiAgICAgICBOZXR3b3JrIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLgoKCiAgICAgIEltcG9ydGluZyBub2RlcyBvZiBpbnRlcmVzdAogICAgICBEb25lLgogICAgICBDb21wdXRpbmcgUGF0aHdheSB0b3BvbG9neSBBbmFseXNpcy4uLiAobWF5IHRha2UgYSB3aGlsZSkKICAgICAgRG9uZS4KICAgICAgRXhwb3J0aW5nLi4uRG9uZS4KCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IG1lcmdpbmdTdHJhdCB8IGAgImJ5X2lkIiBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IG91dCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXAwZDJzNWtfbC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICA8L2Rpdj48L2RldGFpbHM+CgoKPC9kZXRhaWxzPgo=')); + target.innerHTML = md.render(atob('IyMgVGVzdCBTdW1tYXJ5Cgo8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdWNjZXNzIiBzdHlsZT0id2lkdGg6IDEwMC4wJSIgYXJpYS12YWx1ZW5vdz0iODQiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Ijg0IiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9Ijg0IFBhc3NlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nIiBzdHlsZT0id2lkdGg6IDAuMCUiIGFyaWEtdmFsdWVub3c9IjAiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9Ijg0IiBkYXRhLXRvZ2dsZT0idG9vbHRpcCIgdGl0bGU9IjAgU2tpcHBlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1kYW5nZXIiIHN0eWxlPSJ3aWR0aDogMC4wJSIgYXJpYS12YWx1ZW5vdz0iMCIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0iODQiIHRpdGxlPSIwIEZhaWxlZCBvciBFcnJvcmVkIj4KICA8L2Rpdj4KPC9kaXY+Cgp8IFRlc3QgU3RhdGUgfCBDb3VudCB8CnwgLS0tLS0tLS0tLSB8IC0tLS0tIHwKfCBUb3RhbCAgICAgIHwgODQgfAp8IFBhc3NlZCAgICAgfCA4NCB8CnwgRXJyb3IgICAgICB8IDAgfAp8IEZhaWx1cmUgICAgfCAwIHwKfCBTa2lwcGVkICAgIHwgMCB8CgoKPGRldGFpbHMgPjxzdW1tYXJ5PlBhc3NlZCBUZXN0czwvc3VtbWFyeT4KCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfQ2hva2VQb2ludCAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkNob2tlUG9pbnQgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZC9iLzEvZGF0YXNldF9kYjFmZDMyZC0wZjNkLTQxZWQtOGQ3Zi1mMDdkOWYxNmRhNDcuZGF0IiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIvb3V0cHV0cy9kYXRhc2V0XzliNWZjMjc2LWNkZjAtNDhjYi1hOWRhLWQ2MmMzMWEwYTA4NC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIENvbXB1dGluZyBjaG9rZSBwb2ludHMuLi4KICAgICAgRXhwb3J0IHJlc3VsdHMuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9DcmVhdGVNZXRhTmV0d29yayAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggcmVjb25zdHJ1Y3Rpb24uQ3JlYXRlTWV0YU5ldHdvcmsgLW4xICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzMvMC8xL2RhdGFzZXRfMzAxZjNiODEtMTEwNy00MjZlLTllZTUtYzVjOTI1YjY0NmQ5LmRhdCIgLW4yICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzcvMS85L2RhdGFzZXRfNzE5ZTcwYTgtN2NjZS00NDBhLTgyYTAtNzhkZTk5MTRhOGQwLmRhdCIgLW4xZXggInMiIC1uMmV4ICJlIiAtbjFweCAiaHNhIiAtbjJweCAiZWNvIiAgIC1tYyAiYnlfbWV0YW5ldHgiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNS9vdXRwdXRzL2RhdGFzZXRfNjU4YmM0MGMtODNkZC00ODc5LThhNjgtZDk3NjQ5ODRlNTEwLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgaU1MMTUxNQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBpTUwxNTE1CiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfOTE4YTI1OWJfZjhmZl80NDRiX2E5YjZfYTNiYjViZmI4YjI5CiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBJbXBvcnRpbmcgbmV0d29yayAxLi4uIERvbmUuCiAgICAgIEltcG9ydGluZyBuZXR3b3JrIDIuLi4gRG9uZS4KICAgICAgQ3JlYXRpbmcgbWV0YS1uZXR3b3JrLi4uIERvbmUuCiAgICAgIEV4cG9ydGluZyBNZXRhTmV0d29yay4uLiBEb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgZXh0ZXJuYWwxIHwgYCAicyIgYCB8CiAgICAgICB8IGV4dGVybmFsMiB8IGAgImUiIGAgfAogICAgICAgfCBuMXByZWZpeCB8IGAgImhzYSIgYCB8CiAgICAgICB8IG4ycHJlZml4IHwgYCAiZWNvIiBgIHwKICAgICAgIHwga2VlcENvbXBhcnRtZW50IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZmlyc3RJc01ldGEgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnaW5nQ3JpdGVyaW9uIHwgYCAiYnlfbWV0YW5ldHgiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRGlzdGFuY2VNYXRyaXggKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5EaXN0YW5jZU1hdHJpeCAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy80LzAvOC9kYXRhc2V0XzQwOGZiZDFkLWVhMmEtNGZlZC04Y2JiLTRiYTVhNGRhMWNhOS5kYXQiICAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC83L291dHB1dHMvZGF0YXNldF80OGI5Njc2NC0yYWNmLTRlZDktOWFlMS1jMGY3NjY0ZDRhOGYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHNlZWRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBkZWdyZWUgfCBgIGZhbHNlIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0Rpc3RhbmNlTWF0cml4IChUZXN0ICMgMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuRGlzdGFuY2VNYXRyaXggLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMC9jLzYvZGF0YXNldF8wYzYzNzEzOC1hYmQ5LTRkNTEtODc1My1kYzZjZjAwYjQ2ZDcuZGF0IiAtc2MgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZC82LzUvZGF0YXNldF9kNjVlNjg3Ni1iNGRmLTQyMzgtOTNjNi1jNzk4ZTQ0NzhhNzYuZGF0IiAtZHcgLXUgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMC9vdXRwdXRzL2RhdGFzZXRfNmViMWQzOTAtZTVjOS00YzM3LTg2NmItZTk0MjgzYzI4NzRhLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIFJlYWQgZmlsZSBjb250YWluaW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDEgc2lkZSBjb21wb3VuZHMgaWdub3JlZCBkdXJpbmcgZ3JhcGggYnVpbGQuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzZWVkRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCB0cnVlIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdEFubm90YXRpb25zIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkV4dHJhY3RBbm5vdGF0aW9ucyAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy85L2UvNy9kYXRhc2V0XzllNzhkZDI3LWQzODctNGFlNS1iY2NlLTExMTU3M2IxNjFjOC5kYXQiIC1leHBvcnQgIk1FVEFCT0xJVEUiIC1kYiAibWV0YW5ldHguY2hlbWljYWwiICAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMi9vdXRwdXRzL2RhdGFzZXRfYzVhMzlkNmUtYjUxMy00ODhjLTg3MTQtZGI1ZWMwMWJhZGZmLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgYW5ub3RhdGlvbnMgZm91bmQgZm9yIDExMC8xMTEgbWV0YWJvbGl0ZXMKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGV4cG9ydCB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBkYiB8IGAgIm1ldGFuZXR4LmNoZW1pY2FsIiBgIHwKICAgICAgIHwgdW5pcSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHNraXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdEFubm90YXRpb25zIChUZXN0ICMgMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkV4dHJhY3RBbm5vdGF0aW9ucyAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8zLzEvYy9kYXRhc2V0XzMxYzY3MjRiLTUwYzYtNDNjMS05NjVjLWRhMDhlMDhiMjJiZi5kYXQiIC1leHBvcnQgIk1FVEFCT0xJVEUiIC1kYiAibWV0YW5ldHguY2hlbWljYWwiICAtc2tpcCAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE0L291dHB1dHMvZGF0YXNldF9lNzhhODk0Yy05YjFkLTRiOGEtYWMzMy1jYjViN2I4ODNiMTMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBhbm5vdGF0aW9ucyBmb3VuZCBmb3IgMTEwLzExMSBtZXRhYm9saXRlcwoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgZXhwb3J0IHwgYCAiTUVUQUJPTElURSIgYCB8CiAgICAgICB8IGRiIHwgYCAibWV0YW5ldHguY2hlbWljYWwiIGAgfAogICAgICAgfCB1bmlxIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgc2tpcCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0V4dHJhY3RBbm5vdGF0aW9ucyAoVGVzdCAjIDMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5FeHRyYWN0QW5ub3RhdGlvbnMgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNS9iL2MvZGF0YXNldF81YmNkYjE4Yy1hNzBjLTRiODEtOWM3MS04ZWUzNzNjN2EyMDUuZGF0IiAtZXhwb3J0ICJNRVRBQk9MSVRFIiAtZGIgIm1ldGFuZXR4LmNoZW1pY2FsIiAtdW5pcSAtc2tpcCAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE2L291dHB1dHMvZGF0YXNldF9kZGZlYzRlZC04NmE4LTQ1OTMtYjY4Mi00N2M5ODA0M2VjNTkuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBhbm5vdGF0aW9ucyBmb3VuZCBmb3IgMTEwLzExMSBtZXRhYm9saXRlcwoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgZXhwb3J0IHwgYCAiTUVUQUJPTElURSIgYCB8CiAgICAgICB8IGRiIHwgYCAibWV0YW5ldHguY2hlbWljYWwiIGAgfAogICAgICAgfCB1bmlxIHwgYCB0cnVlIGAgfAogICAgICAgfCBza2lwIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFBhdGh3YXlzIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkV4dHJhY3RQYXRod2F5cyAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9lLzQvMi9kYXRhc2V0X2U0MjZkNDQ0LWY1OTItNDA4NC05OGU0LWMzY2Y2OWRjOWU4OS5kYXQiIC1wICJDaXRyaWNfQWNpZF9DeWNsZStGb2xhdGVfTWV0YWJvbGlzbSt0b3RvIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4L291dHB1dHMvZGF0YXNldF9lZDY5Mzg5ZC1hNTMyLTRhOTEtYmQ0OS03MjZmZTVlY2M2MjguZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBYZm0xMTU4CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgbmV0d29yayBleHBvcnRlZC4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgTnVtYmVyIG9mIHJlYWN0aW9ucyBpbiBvcmlnaW5hbCBuZXR3b3JrOiAxMTU4CiAgICAgIE51bWJlciBvZiBzcGVjaWVzIGluIG9yaWdpbmFsIG5ldHdvcms6IDExMDcKICAgICAgTnVtYmVyIG9mIGdlbmVzIGluIG9yaWdpbmFsIG5ldHdvcms6IDU3MQogICAgICBOdW1iZXIgb2YgcmVhY3Rpb25zIGluIHBhdGh3YXkgQ2l0cmljX0FjaWRfQ3ljbGUgKENpdHJpY19BY2lkX0N5Y2xlKTogMTEKICAgICAgTnVtYmVyIG9mIHNwZWNpZXMgaW4gcGF0aHdheSBDaXRyaWNfQWNpZF9DeWNsZSAoQ2l0cmljX0FjaWRfQ3ljbGUpOiAyNgogICAgICBOdW1iZXIgb2YgZ2VuZXMgaW4gcGF0aHdheSBDaXRyaWNfQWNpZF9DeWNsZSAoQ2l0cmljX0FjaWRfQ3ljbGUpOiAxOAogICAgICBOdW1iZXIgb2YgcmVhY3Rpb25zIGluIHBhdGh3YXkgRm9sYXRlX01ldGFib2xpc20gKEZvbGF0ZV9NZXRhYm9saXNtKTogNgogICAgICBOdW1iZXIgb2Ygc3BlY2llcyBpbiBwYXRod2F5IEZvbGF0ZV9NZXRhYm9saXNtIChGb2xhdGVfTWV0YWJvbGlzbSk6IDE2CiAgICAgIE51bWJlciBvZiBnZW5lcyBpbiBwYXRod2F5IEZvbGF0ZV9NZXRhYm9saXNtIChGb2xhdGVfTWV0YWJvbGlzbSk6IDgKICAgICAgRXJyb3I6IFBhdGh3YXkgdG90byBub3QgZm91bmQgaW4gbmV0d29yaywgcGxlYXNlIGNoZWNrIHNibWwgZmlsZS4KICAgICAgTnVtYmVyIG9mIHJlYWN0aW9ucyBpbiBuZXR3b3JrOiAxNwogICAgICBOdW1iZXIgb2Ygc3BlY2llcyBpbiBuZXR3b3JrOiAzNQogICAgICBOdW1iZXIgb2YgZ2VuZXMgaW4gbmV0d29yazogMjUKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHBhdGh3YXlJZCB8IGAgIkNpdHJpY19BY2lkX0N5Y2xlK0ZvbGF0ZV9NZXRhYm9saXNtK3RvdG8iIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFN1YkJpcE5ldHdvcmsgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5FeHRyYWN0U3ViQmlwTmV0d29yayAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9kLzAvYS9kYXRhc2V0X2QwYWVkOGZiLWJkMDEtNDM3Yi1hZTJkLWFhOTc0ZmQ3ZTFmYy5kYXQiIC1zICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzIvNy8wL2RhdGFzZXRfMjcwMzMxNzgtNDI5NS00ZWJkLTlhOWMtYzcyOGM4MTA4MDAwLmRhdCIgLXQgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOS8xLzQvZGF0YXNldF85MTRjMmJhNC1lYWE0LTQ3Y2MtYTUxNS04MzRmN2E3ZjRkZTEuZGF0IiAgLXNjICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2MvMC80L2RhdGFzZXRfYzA0MTNkOTEtNjNjOS00OGQyLWJlYjYtOWZiZTcwOTlmYjVkLmRhdCIgLWsgIjEiICAtZiAiZ21sIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIzL291dHB1dHMvZGF0YXNldF82YTM0MzcwNi1iYjEwLTQ3YTEtOWYwMi1jZTEzYjE1NmVhNDQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIGltcG9ydGluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICBSZWFkIGZpbGUgY29udGFpbmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICBleHRyYWN0aW5nIHNvdXJjZXMgYW5kIHRhcmdldHMKICAgICAgR01MIGNyZWF0ZWQuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgYmxrZFJlYWN0aW9uRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgayB8IGAgIjEiIGAgfAogICAgICAgfCBzdCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZvcm1hdCB8IGAgImdtbCIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9FeHRyYWN0U3ViTmV0d29yayAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkV4dHJhY3RTdWJOZXR3b3JrIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzYvNC83L2RhdGFzZXRfNjQ3MDQwYTctYTM4OS00MGFkLTg5NWEtMTM0Y2U1MjE4MGNhLmRhdCIgLXMgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvYS9iLzEvZGF0YXNldF9hYjEzYWIyMy05MmVkLTQ3ZWQtYWViYy0zNjhiZjkzNjdkMGEuZGF0IiAtdCAiL3RtcC90bXA5OW53YjZ3My9maWxlcy82LzcvYS9kYXRhc2V0XzY3YTU2Y2YzLTgwMDYtNGJhNS04MDc0LTUxNjk3OTViMDU1My5kYXQiICAgIC1rICIxIiAgLWYgImdtbCIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yNy9vdXRwdXRzL2RhdGFzZXRfYjA1MTM0YjktYTM2Zi00NzhkLTkzZWMtM2UxYWFjZDRjOTgxLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIGV4dHJhY3Rpbmcgc291cmNlcyBhbmQgdGFyZ2V0cwoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBHTUwgY3JlYXRlZC4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGNoZW1pY2FsU2ltIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGsgfCBgICIxIiBgIHwKICAgICAgIHwgc3QgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfRXh0cmFjdFN1YlJlYWN0aW9uTmV0d29yayAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLkV4dHJhY3RTdWJSZWFjdGlvbk5ldHdvcmsgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZC9kL2MvZGF0YXNldF9kZGMxODE2Yi04MjgzLTQ1ZTQtOWNlNi0yZTgxOTdkYTQ5ZmEuZGF0IiAtcyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8yLzYvMi9kYXRhc2V0XzI2MmQzM2M2LTMxNGMtNGZjNC04NjI2LTYzOThhMzUwMWVmMS5kYXQiICAtdCAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9jLzMvNy9kYXRhc2V0X2MzNzUxZGNmLTM4ZDQtNDVjNC05YTg5LWU2MzQ1NWNlZDE3ZC5kYXQiIC1zYyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9lLzAvNC9kYXRhc2V0X2UwNDYwMDBiLWJjOGItNGQzNy1iZWM1LTc1MTI3ZDhhNWE5NS5kYXQiIC1rICIxIiAgLWYgImdtbCIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8zMi9vdXRwdXRzL2RhdGFzZXRfMzEyMTdlMjUtMTZjZi00Njg1LTk0ZTUtMTZjNzdlZGIzZjUzLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIEVsZW1lbnQgLy8gQ29weXJpZ2h0IDIwMjUgbGNvdHRyZXQgbm90IGZvdW5kIGluIG5ldHdvcmsKICAgICAgRWxlbWVudCAvLyBub3QgZm91bmQgaW4gbmV0d29yawogICAgICBFbGVtZW50IC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyBub3QgZm91bmQgaW4gbmV0d29yawogICAgICBFbGVtZW50IC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gbm90IGZvdW5kIGluIG5ldHdvcmsKICAgICAgRWxlbWVudCAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgbm90IGZvdW5kIGluIG5ldHdvcmsKICAgICAgRWxlbWVudCAvLyBub3QgZm91bmQgaW4gbmV0d29yawogICAgICBFbGVtZW50IC8vICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIG5vdCBmb3VuZCBpbiBuZXR3b3JrCiAgICAgIEVsZW1lbnQgLy8gbm90IGZvdW5kIGluIG5ldHdvcmsKICAgICAgRWxlbWVudCAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIG5vdCBmb3VuZCBpbiBuZXR3b3JrCiAgICAgIEVsZW1lbnQgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgbm90IGZvdW5kIGluIG5ldHdvcmsKICAgICAgRWxlbWVudCAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gbm90IGZvdW5kIGluIG5ldHdvcmsKICAgICAgRWxlbWVudCAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIG5vdCBmb3VuZCBpbiBuZXR3b3JrCiAgICAgIEVsZW1lbnQgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIG5vdCBmb3VuZCBpbiBuZXR3b3JrCiAgICAgIEVsZW1lbnQgIG5vdCBmb3VuZCBpbiBuZXR3b3JrCiAgICAgIDE0IHNpZGUgY29tcG91bmRzIG5vdCBmb3VuZCBpbiBuZXR3b3JrLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgUmVhZCBmaWxlIGNvbnRhaW5pbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgZXh0cmFjdGluZyBzb3VyY2VzIGFuZCB0YXJnZXRzCiAgICAgIEdNTCBjcmVhdGVkLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJFeGNsdWRlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBrIHwgYCAiMSIgYCB8CiAgICAgICB8IHN0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZm9ybWF0IHwgYCAiZ21sIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0ZiY1RvTm90ZXMgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuRmJjVG9Ob3RlcyAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8yLzcvYS9kYXRhc2V0XzI3YTMwYTQzLWJhYWMtNDgwMC1iYWMwLTM0YjZlNTBmYmM1MS5kYXQiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzQvb3V0cHV0cy9kYXRhc2V0XzE1N2E2MTZiLWM1ZDctNDkxYy1hNjk2LWI2YWQyYmQ4MWYxZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgaU1MMTUxNQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBpTUwxNTE1CiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBpTUwxNTE1CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaGFzUHJvcGVydHksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBoYXNQcm9wZXJ0eSwgc2V0IHRvIEhBU19QUk9QRVJUWQoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX0dldEJpZ2dNb2RlbFByb3Rlb21lIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBiaWdnLkdldEJpZ2dNb2RlbFByb3Rlb21lIC1tICJlX2NvbGlfY29yZSIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8zNS9vdXRwdXRzL2RhdGFzZXRfYTlhN2FmMmItMzIxZi00NmQ1LWE4ZjQtNThmMWJhZTA0MDE2LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IG1vZGVsSWQgfCBgICJlX2NvbGlfY29yZSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgImRhdGEiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0RW50aXRpZXMgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuR2V0RW50aXRpZXMgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZS80LzkvZGF0YXNldF9lNDllMmU4My0wM2NmLTQ0ZDUtYmY2Yi1lNDk4ZGUwNjYyZjguZGF0IiAgICAgICAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzM3L291dHB1dHMvZGF0YXNldF9mNzgxZDA1OC1iM2IzLTQ1NmEtODA0ZC1iZjk0ZDg3YzhhZjkuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHByaW50TWV0YWJvbGl0ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwcmludFJlYWN0aW9ucyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50Q29tcGFydG1lbnRzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRQYXRod2F5cyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50R2VuZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBub1R5cGVDb2wgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0RW50aXRpZXMgKFRlc3QgIyAyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuR2V0RW50aXRpZXMgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvYy85L2EvZGF0YXNldF9jOWFlYzAwZS1mNjdkLTRlY2ItOWVjMC02MDA1YTE3ZWUwYmYuZGF0IiAtbSAtciAtYyAgLWcgLW50IC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMzkvb3V0cHV0cy9kYXRhc2V0X2MzNTgxMmM3LTc0MjktNDVkYS1iMWMxLWY5ZjAzNGM2ZmI0Ny5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgcHJpbnRNZXRhYm9saXRlcyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcHJpbnRSZWFjdGlvbnMgfCBgIHRydWUgYCB8CiAgICAgICB8IHByaW50Q29tcGFydG1lbnRzIHwgYCB0cnVlIGAgfAogICAgICAgfCBwcmludFBhdGh3YXlzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRHZW5lcyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbm9UeXBlQ29sIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0R2VuZXNGcm9tUmVhY3Rpb25zIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkdldEdlbmVzRnJvbVJlYWN0aW9ucyAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9jLzQvZC9kYXRhc2V0X2M0ZDRlMjdlLTIwNTItNDQ1Zi04MDY4LWRhYmM5NWExZTgwNC5kYXQiIC1yICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzYvMy9jL2RhdGFzZXRfNjNjNTBkYjgtNTA0ZS00MjhmLTlmMzYtY2UwMDUzZWVjNDI0LmRhdCIgLXNlcCAiCSIgIC1jb2wgIjEiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNDIvb3V0cHV0cy9kYXRhc2V0Xzc3YWZhOTM1LTBmM2ItNDA1YS04NWRiLTMzMjA4MDE0ZmQzMC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgcmVhY3Rpb25zIG1hcHBlZAogICAgICAwIHJlYWN0aW9ucyBub3QgZm91bmQgaW4gbW9kZWwKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNlcCB8IGAgIlx0IiBgIHwKICAgICAgIHwgaGFzSGVhZGVyIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgaSB8IGAgIjEiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0TWV0YWJvbGl0ZUF0dHJpYnV0ZXMgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuR2V0TWV0YWJvbGl0ZUF0dHJpYnV0ZXMgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMy8wL2MvZGF0YXNldF8zMGM1ODBkYS04ZjM4LTQ0MjEtYTJjMC0xOTM0YzYzODc1OWEuZGF0IiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzQ0L291dHB1dHMvZGF0YXNldF9kNmE4MTI5MS1kZmJjLTQ1NTItYWIzZS0zY2RjNmJhZWE5Y2MuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfR2V0UmVhY3RhbnRzRnJvbVJlYWN0aW9ucyAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2QvYS9kL2RhdGFzZXRfZGFkOWNmY2EtMDJkYS00ZGFlLTgwYzMtNTI0MmM4MTQ0ODkwLmRhdCIgLXIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNi9iL2YvZGF0YXNldF82YmYxYThhMS01NDQyLTQ5MjctYTFjNS04YmZiYTlmNGExOGEuZGF0IiAtc2VwICIJIiAgLWNvbCAiMSIgICAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzQ3L291dHB1dHMvZGF0YXNldF83ZWUyMzA4YS05YWMwLTQ2NjctOTk2NC0wYTAwZGY2NGMyYWYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAyIHJlYWN0aW9ucyBtYXBwZWQKICAgICAgMCByZWFjdGlvbnMgbm90IGZvdW5kIGluIG1vZGVsCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzZXAgfCBgICJcdCIgYCB8CiAgICAgICB8IGhhc0hlYWRlciB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGkgfCBgICIxIiBgIHwKICAgICAgIHwgcHJpbnRTdWJzdHJhdGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcHJpbnRQcm9kdWN0cyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIChUZXN0ICMgMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkdldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNC85LzkvZGF0YXNldF80OTlkMDkxYi1mNzY2LTQzZDItYTgzZi1hZDA0NzQ3YjAxNzUuZGF0IiAtciAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9jLzUvZS9kYXRhc2V0X2M1ZTgzNWZiLTFhOGQtNDI3My05OTlhLTJmYWU4MDNhY2ViYy5kYXQiIC1zZXAgIgkiICAtY29sICIxIiAtcyAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81MC9vdXRwdXRzL2RhdGFzZXRfOTgwMGI0ZjYtZDRhNS00MGY0LThiMWItZDAyZWVlMDM5YjExLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IHByaW50U3Vic3RyYXRlcyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcHJpbnRQcm9kdWN0cyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9HZXRSZWFjdGFudHNGcm9tUmVhY3Rpb25zIChUZXN0ICMgMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLkdldFJlYWN0YW50c0Zyb21SZWFjdGlvbnMgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNi82L2QvZGF0YXNldF82NmQxZTY3MS0xYTJiLTQ1MDQtYmVkMy1hMWE1NzczZGFmNGQuZGF0IiAtciAiL3RtcC90bXA5OW53YjZ3My9maWxlcy82L2IvZC9kYXRhc2V0XzZiZGJiM2I3LWM3OGItNGM2Yi04MmIwLWUxNWVmZWRjN2U2OC5kYXQiIC1zZXAgIgkiICAtY29sICIxIiAgLXAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81My9vdXRwdXRzL2RhdGFzZXRfNjgxNGE1NTAtYTZjMS00MGZjLWFlZTctYzNkNzZkYjhlMGFhLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgMiByZWFjdGlvbnMgbWFwcGVkCiAgICAgIDAgcmVhY3Rpb25zIG5vdCBmb3VuZCBpbiBtb2RlbAoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2VwIHwgYCAiXHQiIGAgfAogICAgICAgfCBoYXNIZWFkZXIgfCBgIGZhbHNlIGAgfAogICAgICAgfCBpIHwgYCAiMSIgYCB8CiAgICAgICB8IHByaW50U3Vic3RyYXRlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHByaW50UHJvZHVjdHMgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9Mb2FkUG9pbnQgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5Mb2FkUG9pbnQgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvYy83L2YvZGF0YXNldF9jN2ZjYTViNi01NzVlLTRjNzUtODRjNy03YWRjYWMzZWYyM2MuZGF0IiAtayAiMSIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC81NS9vdXRwdXRzL2RhdGFzZXRfYzAwNGZhNmEtNzAzMi00ZmY3LTg5M2QtMGI0NTFmNmM0OGM2LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIENvbXB1dGluZyBsb2FkIHBvaW50cy4uLgogICAgICBFeHBvcnQgcmVzdWx0cy4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgc2lkZUNvbXBvdW5kRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgayB8IGAgIjEiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfTWV0YWJvUmFuayAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLk1ldGFib1JhbmsgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNy85L2YvZGF0YXNldF83OWZhYWZmMC05OGEwLTRmOWMtYmJiZS05ZGI1MjNjMTlmMzIuZGF0IiAtcyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8xL2QvNi9kYXRhc2V0XzFkNjc3N2I2LTY5NDItNDFlYy1iYjQxLTRkMTc2M2UyYTJhYy5kYXQiIC1zYyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9lLzUvYi9kYXRhc2V0X2U1YjAwYWEyLTM3YzItNDVlMS05YzAwLWUwZDBkNDhlOTc1YS5kYXQiIC1tYXggIjE1MDAwIiAtdCAiMC4wMDEiIC1kICIwLjg1IiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzU5L291dHB1dHMvZGF0YXNldF8zMTY2NGUyMi1kMWVlLTRhMmItODUyMC01OWNhM2E0MmEyZjMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAyIGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCiAgICAgIHRyYW5zaXRpb24gcHJvYmFiaWxpdGllcyBjb21wdXRlZAogICAgICB0cmFuc2l0aW9uIHByb2JhYmlsaXRpZXMgY29tcHV0ZWQgKHJldmVyc2UgZ3JhcGgpCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBjb21wb3VuZCBncmFwaCBjcmVhdGVkLgogICAgICByZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICBSZWFkIGZpbGUgY29udGFpbmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IGNvbXBvdW5kcyByZW1vdmVkLgogICAgICB3ZWlnaHRzIGNvbXB1dGVkLgogICAgICByZXZlcnNlIGdyYXBoIGNyZWF0ZWQuCiAgICAgIHNlZWRzIGZpbGUgaW1wb3J0ZWQKICAgICAgMyBzZWVkcwogICAgICBnbG9iYWwgcGFnZVJhbmsgY29tcHV0ZWQKICAgICAgZ2xvYmFsIGNoZWlSYW5rIGNvbXB1dGVkCiAgICAgIHBhZ2VSYW5rIGNvbXB1dGVkCiAgICAgIGNoZWlSYW5rIGNvbXB1dGVkCiAgICAgIGRvbmUuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBlZGdlV2VpZ2h0c0ZpbGVQYXRocyB8IGAgTm9uZSBgIHwKICAgICAgIHwgbWF4TmJPZkl0ZXIgfCBgICIxNTAwMCIgYCB8CiAgICAgICB8IHRvbGVyYW5jZSB8IGAgIjAuMDAxIiBgIHwKICAgICAgIHwgZGFtcGluZ0ZhY3RvciB8IGAgIjAuODUiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfTmV0d29ya1N1bW1hcnkgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5OZXR3b3JrU3VtbWFyeSAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy84L2UvZS9kYXRhc2V0XzhlZTI4MWQzLWRkNDgtNDU4Yy05OWViLTAyZDg2ODhiZDdhNi5kYXQiICAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC82MS9vdXRwdXRzL2RhdGFzZXRfYmQ1M2I2ZGMtMDQxNi00M2UwLWFkMTEtYWRlMzVkNjljNmY4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBDcmVhdGluZyBncmFwaC4uLgogICAgICBwZXJmb3JtIGJhc2ljIGFuYWx5c2lzLi4uCiAgICAgIGV4dHJhY3QgY29ubmVjdGVkIGNvbXBvbmVudC4uLgogICAgICBDb21wdXRlIGRlbnNpdHkuLi4KICAgICAgQ29tcHV0ZSBsb2NhbCBjbHVzdGVyaW5nIGNvZWZmaWNpZW50cy4uLgogICAgICBDb21wdXRlIGRlZ3JlZSBzdGF0aXN0aWNzLi4uCiAgICAgIENvbXB1dGUgZGlzdGFuY2VzLi4uCiAgICAgIENvbXB1dGUgZGlzdGFuY2VzIHN0YXRpc3RpY3MuLi4KICAgICAgQ29tcHV0ZSBjZW50cmFsaXR5Li4uCiAgICAgIAlDbG9zZW5lc3MgZG9uZS4KICAgICAgRG9uZS4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHNraXBkaXN0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfT1JBcGF0aHdheUVucmljaG1lbnQgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG1hcHBpbmcuT1JBcGF0aHdheUVucmljaG1lbnQgLXRoICIwLjAiIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzcvNS9lL2RhdGFzZXRfNzVlZGEyNTUtNzIyNC00ZGEzLThmZTQtMDAyMzlkZDRlNjE3LmRhdCIgLWQgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMC8zL2YvZGF0YXNldF8wM2YyN2I2Yy00Yzc4LTRiMzEtOGQ3Mi1lY2VjNWZhN2FhM2QuZGF0IiAtYyAiQmVuamFtaW5pSG9jaGJlcmciIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNjQvb3V0cHV0cy9kYXRhc2V0XzhkNTg1ZTEyLWRiYWQtNDNkZC1hMDJmLWE5YjlmMjMzM2U1ZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEltcG9ydCBkYXRhLi4uCiAgICAgIDMgY29tcG91bmRzIGltcG9ydGVkLgogICAgICAgRG9uZS4KICAgICAgUGVyZm9ybSBQYXRod2F5IEVucmljaG1lbnQuLi4gRG9uZS4KICAgICAgRXhwb3J0IHJlc3VsdHMuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHRoIHwgYCAiMC4wIiBgIHwKICAgICAgIHwgY29yciB8IGAgIkJlbmphbWluaUhvY2hiZXJnIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX09SQXBhdGh3YXlFbnJpY2htZW50IChUZXN0ICMgMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBtYXBwaW5nLk9SQXBhdGh3YXlFbnJpY2htZW50IC10aCAiMC4wMDUiIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzIvYS9hL2RhdGFzZXRfMmFhNWZkZmYtZWYzNS00ODBiLWE4YzMtNzEzYTc0NTNiYjk4LmRhdCIgLWQgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZS9jLzMvZGF0YXNldF9lYzNjMWRkNS0zNTNmLTQ1OGEtODBhMi00ZmNiY2ZmZTBlYzIuZGF0IiAtYyAiSG9sbUJvbmZlcnJvbmkiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNjcvb3V0cHV0cy9kYXRhc2V0XzkxNzA1YWE0LTU1MjUtNGUxZS04YTUwLWI2ZDk4ZGU2ZTYwZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEltcG9ydCBkYXRhLi4uCiAgICAgIDMgY29tcG91bmRzIGltcG9ydGVkLgogICAgICAgRG9uZS4KICAgICAgUGVyZm9ybSBQYXRod2F5IEVucmljaG1lbnQuLi4gRG9uZS4KICAgICAgU2VsZWN0IHNpZ25pZmljYW50IHBhdGh3YXlzLi4uCiAgICAgIAkyIHNpZ25pZmljYW50IHBhdGh3YXlzIGZvdW5kLgogICAgICAgRG9uZS4KICAgICAgRXhwb3J0IHJlc3VsdHMuLi4KICAgICAgZG9uZS4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHRoIHwgYCAiMC4wMDUiIGAgfAogICAgICAgfCBjb3JyIHwgYCAiSG9sbUJvbmZlcnJvbmkiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfUHJlY3Vyc29yTmV0d29yayAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlByZWN1cnNvck5ldHdvcmsgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOS9hL2IvZGF0YXNldF85YWI4YmRjNy03YTM5LTRjMDctYTczOS0wZTU4NzA1ODI0NDcuZGF0IiAtdCAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8xL2QvYS9kYXRhc2V0XzFkYWI2Y2EzLWJjN2EtNDBhYi05ZGZiLWI3OTNhMGMzY2RmZC5kYXQiIC1mICJnbWwiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNzAvb3V0cHV0cy9kYXRhc2V0XzlhNDlkM2Q0LTU3MjUtNDk5YS1iM2I1LWU2NWVjYzhiODIwMC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBHTUwgY3JlYXRlZC4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHJlYWN0aW9uVG9JZ25vcmVGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfUmVhY3Rpb25EaXN0YW5jZU1hdHJpeCAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlJlYWN0aW9uRGlzdGFuY2VNYXRyaXggLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvYi8xL2MvZGF0YXNldF9iMWM2NjFlMS0xYjY5LTRjMTAtODYxMC02MTBmYjYzNDg4OGEuZGF0IiAgIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNzIvb3V0cHV0cy9kYXRhc2V0X2QwOTM2OTRhLWJiNmMtNGExOS1hOGM0LWEwZjVlNjM4OWViMS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJFeGNsdWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByeG5GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1JlYWN0aW9uRGlzdGFuY2VNYXRyaXggKFRlc3QgIyAyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5SZWFjdGlvbkRpc3RhbmNlTWF0cml4IC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2QvMS85L2RhdGFzZXRfZDE5ZmZhMTYtOWExZC00ZjcwLWExNDgtZmJhNzQ1YTllNWY5LmRhdCIgIC11IC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNzQvb3V0cHV0cy9kYXRhc2V0Xzc1YWI1NGMwLWU2NDQtNDVmMi04N2Q2LThhZDI1MTAzYjkzMi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJFeGNsdWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByeG5GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfUmVhY3Rpb25EaXN0YW5jZU1hdHJpeCAoVGVzdCAjIDMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlJlYWN0aW9uRGlzdGFuY2VNYXRyaXggLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOC8xL2MvZGF0YXNldF84MWNhOGU1ZC1jNWU0LTQzYjgtYWEwMC0wNGYwOTVmMDE5NmIuZGF0IiAtc2MgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOC9lLzMvZGF0YXNldF84ZTM1OWM5OS1kZDllLTQyNmItYTc4My02ZTYwNzEyZWYyYzMuZGF0IiAgLXUgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC83Ny9vdXRwdXRzL2RhdGFzZXRfMjNhZDYwMDEtY2EzMS00ODJkLWJhOGUtZmJmYWY2ZDM2YjlkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLgogICAgICBSZWFkIGZpbGUgY29udGFpbmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICAxIHNpZGUgY29tcG91bmRzIHRvIGlnbm9yZSBkdXJpbmcgZ3JhcGggYnVpbGQKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJFeGNsdWRlIHwgYCBOb25lIGAgfAogICAgICAgfCByeG5GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfUmVhY3Rpb25EaXN0YW5jZU1hdHJpeCAoVGVzdCAjIDQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlJlYWN0aW9uRGlzdGFuY2VNYXRyaXggLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvYS85L2UvZGF0YXNldF9hOWVkOWI2Yi1jMzMyLTQyMDAtOWQyNC00YTM3MzI5ODM1NWQuZGF0IiAgLXJlICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzUvMS8wL2RhdGFzZXRfNTEwYzRiMGEtYmYyZS00YTY4LTgwZjctMDE2N2Q1ZThhNTcxLmRhdCIgLXUgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84MC9vdXRwdXRzL2RhdGFzZXRfNjRlYzVjY2UtODQ0Ny00MzlkLWIwM2UtMWJmZTMyYmFkOTJmLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLgogICAgICByZW1vdmluZyByZWFjdGlvbnMgdG8gZXhjbHVkZS4uLgogICAgICAxIHJlYWN0aW9ucyBpZ25vcmVkIGR1cmluZyBncmFwaCBidWlsZC4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVDb21wb3VuZEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJ4bkZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9SZWFjdGlvbkRpc3RhbmNlTWF0cml4IChUZXN0ICMgNSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuUmVhY3Rpb25EaXN0YW5jZU1hdHJpeCAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8zLzAvNy9kYXRhc2V0XzMwNzQyYjliLTU4NDEtNDAxNS1hYTI0LTc0MmY1MmQ1M2ZkNi5kYXQiIC1zYyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy81LzgvZC9kYXRhc2V0XzU4ZDE0MGQ5LTIzZDktNGI4Ny05OTY2LWY0ZGMyMDI3NmNiNi5kYXQiICAtcmUgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNi9lLzAvZGF0YXNldF82ZTA3ODQzOS0xNDA4LTQ4YWYtYThlMS1lMjVlODliMWYzZTEuZGF0IiAtdSAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzg0L291dHB1dHMvZGF0YXNldF83OWQzYTlkNi05OTQ3LTQ0ZDctYmUwMy0xNWM0OTZlOGI5NmEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uCiAgICAgIFJlYWQgZmlsZSBjb250YWluaW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDEgc2lkZSBjb21wb3VuZHMgdG8gaWdub3JlIGR1cmluZyBncmFwaCBidWlsZAogICAgICByZW1vdmluZyByZWFjdGlvbnMgdG8gZXhjbHVkZS4uLgogICAgICAxIHJlYWN0aW9ucyBpZ25vcmVkIGR1cmluZyBncmFwaCBidWlsZC4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGRlZ3JlZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJ4bkZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHdlaWdodEZpbGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9SZWFjdGlvbkRpc3RhbmNlTWF0cml4IChUZXN0ICMgNik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuUmVhY3Rpb25EaXN0YW5jZU1hdHJpeCAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy82LzkvZS9kYXRhc2V0XzY5ZWQ2MzAwLWM3OGYtNGE5My05MmE3LTBmNjE2MDRmMDY5ZC5kYXQiIC1zYyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy81L2YvZS9kYXRhc2V0XzVmZTQ2NzIyLTg0YTUtNDcxYy1hYzBjLWM5ZjU5NzI2NGY4NC5kYXQiICAtcmUgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZi85LzIvZGF0YXNldF9mOTIxYmU1MS1jZDI5LTQyOGYtYTJlMS0xODk3ZjE0N2JlODQuZGF0IiAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC84OC9vdXRwdXRzL2RhdGFzZXRfZmYzNDA2MmQtODE2MS00Y2JjLWIzODktYjdmMDk5MjRkMTczLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLgogICAgICBSZWFkIGZpbGUgY29udGFpbmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICAxIHNpZGUgY29tcG91bmRzIHRvIGlnbm9yZSBkdXJpbmcgZ3JhcGggYnVpbGQKICAgICAgcmVtb3ZpbmcgcmVhY3Rpb25zIHRvIGV4Y2x1ZGUuLi4KICAgICAgMSByZWFjdGlvbnMgaWdub3JlZCBkdXJpbmcgZ3JhcGggYnVpbGQuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBkZWdyZWUgfCBgIGZhbHNlIGAgfAogICAgICAgfCByeG5GaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJDYXJib25Ta2VsZXRvbk5ldCAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy85L2UvOS9kYXRhc2V0XzllOWNkZGI2LTZmMGMtNDIwMS1hNjljLTZiZmQyNGNjOWE0Yy5kYXQiIC1nICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2IvYS84L2RhdGFzZXRfYmE4N2VkNjQtYzkxYi00YzE1LTk3ODMtNzdkNjZlZTY2N2RiLmRhdCIgICAgICAgLWYgImdtbCIgICAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzkxL291dHB1dHMvZGF0YXNldF8yOGQxMDkxNS04OWQ1LTQxNzMtOGYwYS1lMWZhZmJjYzc3NWQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLjc1IHJlYWN0aW9ucyBhbmQgMTExIG1ldGFib2xpdGVzIHJlYWQuCiAgICAgICBEb25lLgogICAgICBCdWlsZGluZyBOZXR3b3JrLi4uMTExIG5vZGVzIGFuZCA1MDIgZWRnZXMgY3JlYXRlZC4KICAgICAgIERvbmUuCiAgICAgIFByb2Nlc3NpbmcgYXRvbSBtYXBwaW5ncy4uLkRvbmUuCiAgICAgIFNraXAgY29tcG91bmRzIHdpdGggbGVzcyB0aGFuIHR3byBjYXJib25zIGRldGVjdGVkLi4uCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgIERvbmUuCiAgICAgIDExMSBub2RlcyBhbmQgMjAyIGVkZ2VzIGNyZWF0ZWQuCiAgICAgIEV4cG9ydGluZy4uLkdNTCBjcmVhdGVkLgogICAgICAgRG9uZS4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGtlZXBTaW5nbGVDYXJib24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZvcm1hdCB8IGAgImdtbCIgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sMkNhcmJvblNrZWxldG9uTmV0IChUZXN0ICMgMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyQ2FyYm9uU2tlbGV0b25OZXQgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMS85L2YvZGF0YXNldF8xOWY5OWYzYS04ZTkzLTQzNTYtOGJhMC01NjJjMjI1MWU0ZmUuZGF0IiAtZyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy84LzMvNS9kYXRhc2V0XzgzNTRiN2UzLTk5YmQtNDg5OC1iOTBmLTRhNTkyYzA3MDNjMi5kYXQiIC1rcyAgICAgIC1mICJnbWwiICAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC85NC9vdXRwdXRzL2RhdGFzZXRfMTI1MDU3NmUtZDFmMy00YzMwLWE5NTktYzVhYzc4MjRkMzY0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgMCBlZGdlcyBpbiBmaWxlIG5vdCBmb3VuZCBpbiB0aGUgZ3JhcGgKICAgICAgMjA1IHdlaWdodHMgc2V0IGFtb25nIDUwMiBlZGdlcyBpbiBncmFwaAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi43NSByZWFjdGlvbnMgYW5kIDExMSBtZXRhYm9saXRlcyByZWFkLgogICAgICAgRG9uZS4KICAgICAgQnVpbGRpbmcgTmV0d29yay4uLjExMSBub2RlcyBhbmQgNTAyIGVkZ2VzIGNyZWF0ZWQuCiAgICAgICBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICAxMTEgbm9kZXMgYW5kIDIwNSBlZGdlcyBjcmVhdGVkLgogICAgICBFeHBvcnRpbmcuLi5HTUwgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCB0cnVlIGAgfAogICAgICAgfCBtZXJnZUNvbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtZXJnZUVkZ2VzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZvcm1hdCB8IGAgImdtbCIgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sMkNhcmJvblNrZWxldG9uTmV0IChUZXN0ICMgMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyQ2FyYm9uU2tlbGV0b25OZXQgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNy8zL2MvZGF0YXNldF83M2M5NTFkMC05NmRiLTRkNGQtOGM2My0zN2Y2OWFjNTdhOWYuZGF0IiAtZyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9lLzAvOS9kYXRhc2V0X2UwOTg4NTk2LWM5MmEtNGIyYy1hOGI5LTU3Y2RkMGNhYTY5Zi5kYXQiICAtbWMgICAgIC1mICJnbWwiICAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC85Ny9vdXRwdXRzL2RhdGFzZXRfZGQwY2Q5NTMtZDJjOC00ZmUyLTljNGItZTUwODU3ODg1NWRhLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgMCBlZGdlcyBpbiBmaWxlIG5vdCBmb3VuZCBpbiB0aGUgZ3JhcGgKICAgICAgMjA1IHdlaWdodHMgc2V0IGFtb25nIDUwMiBlZGdlcyBpbiBncmFwaAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi43NSByZWFjdGlvbnMgYW5kIDExMSBtZXRhYm9saXRlcyByZWFkLgogICAgICAgRG9uZS4KICAgICAgQnVpbGRpbmcgTmV0d29yay4uLjExMSBub2RlcyBhbmQgNTAyIGVkZ2VzIGNyZWF0ZWQuCiAgICAgICBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBNZXJnaW5nIGNvbXBhcnRtZW50cy4uLiBEb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgIERvbmUuCiAgICAgIDgzIG5vZGVzIGFuZCAyMDIgZWRnZXMgY3JlYXRlZC4KICAgICAgRXhwb3J0aW5nLi4uR01MIGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbWVyZ2VFZGdlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJlbW92ZUlzb2xhdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJDYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjIDQpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkNhcmJvblNrZWxldG9uTmV0IC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2UvOC81L2RhdGFzZXRfZTg1ZGIxNjEtZGIwYi00NjhjLWFlMzgtNzRhNDc1NjE2MTdiLmRhdCIgLWcgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNy9mL2UvZGF0YXNldF83ZmU2YTkzNC1mYWJkLTQ0MzEtYjU5My1hMTc5YTQ0M2EwNTAuZGF0IiAgIC1tZSAgICAtZiAiZ21sIiAgIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTAwL291dHB1dHMvZGF0YXNldF8zZGJmZTQ0YS1lZWYyLTRlZjgtYjllNi1jYmY5NzRhZGM1Y2UuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLjc1IHJlYWN0aW9ucyBhbmQgMTExIG1ldGFib2xpdGVzIHJlYWQuCiAgICAgICBEb25lLgogICAgICBCdWlsZGluZyBOZXR3b3JrLi4uMTExIG5vZGVzIGFuZCA1MDIgZWRnZXMgY3JlYXRlZC4KICAgICAgIERvbmUuCiAgICAgIFByb2Nlc3NpbmcgYXRvbSBtYXBwaW5ncy4uLkRvbmUuCiAgICAgIFNraXAgY29tcG91bmRzIHdpdGggbGVzcyB0aGFuIHR3byBjYXJib25zIGRldGVjdGVkLi4uCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgIERvbmUuCiAgICAgIE1lcmdpbmcgZWRnZXMuLi4gRG9uZS4KICAgICAgMTExIG5vZGVzIGFuZCAxNDMgZWRnZXMgY3JlYXRlZC4KICAgICAgRXhwb3J0aW5nLi4uR01MIGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIHRydWUgYCB8CiAgICAgICB8IHJlbW92ZUlzb2xhdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJDYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjIDUpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkNhcmJvblNrZWxldG9uTmV0IC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzQvNi9jL2RhdGFzZXRfNDZjMjljOTUtNDc0ZC00NDM0LWFhNDAtZDA1NTMwNDJhNWE1LmRhdCIgLWcgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNy82LzkvZGF0YXNldF83NjlkZTU5Zi04ZDllLTQzMGItODNiYy1hZWFhMjM1YzVhZTYuZGF0IiAgICAtcmkgICAtZiAiZ21sIiAgIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTAzL291dHB1dHMvZGF0YXNldF82MTU4YWI4ZC00MjFmLTRiNGEtYjFiNC00ZmQzZTg3MmNmYjUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCiAgICAgIDE2IGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLjc1IHJlYWN0aW9ucyBhbmQgMTExIG1ldGFib2xpdGVzIHJlYWQuCiAgICAgICBEb25lLgogICAgICBCdWlsZGluZyBOZXR3b3JrLi4uMTExIG5vZGVzIGFuZCA1MDIgZWRnZXMgY3JlYXRlZC4KICAgICAgIERvbmUuCiAgICAgIFByb2Nlc3NpbmcgYXRvbSBtYXBwaW5ncy4uLkRvbmUuCiAgICAgIFNraXAgY29tcG91bmRzIHdpdGggbGVzcyB0aGFuIHR3byBjYXJib25zIGRldGVjdGVkLi4uCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgIERvbmUuCiAgICAgIFJlbW92ZSBpc29sYXRlZCBub2Rlcy4uLgogICAgICAJcmVtb3ZpbmcgQ08yCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIGZydWN0b3NlLTMtcGhvc3BoYXRlCiAgICAgIAlyZW1vdmluZyAzLWtldG8tYmV0YS1ELWdhbGFjdG9zZQogICAgICAJcmVtb3ZpbmcgZ2FsYWN0b3NlCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBIMk8KICAgICAgCXJlbW92aW5nIEgyTwogICAgICAJcmVtb3ZpbmcgSCsKICAgICAgCXJlbW92aW5nIEgrCiAgICAgIAlyZW1vdmluZyBQUGkKICAgICAgCXJlbW92aW5nIGZydWN0b3NlCiAgICAgIAlyZW1vdmluZyBDTzIKICAgICAgCXJlbW92aW5nIFBpCiAgICAgIAlyZW1vdmluZyBIKwogICAgICAgRG9uZS4KICAgICAgOTUgbm9kZXMgYW5kIDIwMiBlZGdlcyBjcmVhdGVkLgogICAgICBFeHBvcnRpbmcuLi5HTUwgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWVyZ2VDb21wIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWVyZ2VFZGdlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJlbW92ZUlzb2xhdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY29tcHV0ZVdlaWdodCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZvcm1hdCB8IGAgImdtbCIgYCB8CiAgICAgICB8IG1haW4gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmcm9tSW5kZXhlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sMkNhcmJvblNrZWxldG9uTmV0IChUZXN0ICMgNik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyQ2FyYm9uU2tlbGV0b25OZXQgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNi81L2MvZGF0YXNldF82NWMwMWE5MC0zN2JhLTQ3MTUtODljOC1lYWNmNzAzMGJjYTEuZGF0IiAtZyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9mL2IvNy9kYXRhc2V0X2ZiN2Q2ZThiLTM2OWMtNDIzYS04OTZhLTVkYzRjMTY4NjM5MS5kYXQiICAgICAtdW4gIC1mICJnbWwiICAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMDYvb3V0cHV0cy9kYXRhc2V0X2E4NzMyYTU0LTAyMjQtNDIwMy04MzYyLTlmZTA0YWE4ZmZmMS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIDAgZWRnZXMgaW4gZmlsZSBub3QgZm91bmQgaW4gdGhlIGdyYXBoCiAgICAgIDIwNSB3ZWlnaHRzIHNldCBhbW9uZyA1MDIgZWRnZXMgaW4gZ3JhcGgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uNzUgcmVhY3Rpb25zIGFuZCAxMTEgbWV0YWJvbGl0ZXMgcmVhZC4KICAgICAgIERvbmUuCiAgICAgIEJ1aWxkaW5nIE5ldHdvcmsuLi4xMTEgbm9kZXMgYW5kIDUwMiBlZGdlcyBjcmVhdGVkLgogICAgICAgRG9uZS4KICAgICAgUHJvY2Vzc2luZyBhdG9tIG1hcHBpbmdzLi4uRG9uZS4KICAgICAgQ3JlYXRlIFVuZGlyZWN0ZWQuLi4gRG9uZS4KICAgICAgU2tpcCBjb21wb3VuZHMgd2l0aCBsZXNzIHRoYW4gdHdvIGNhcmJvbnMgZGV0ZWN0ZWQuLi4KICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAgRG9uZS4KICAgICAgMTExIG5vZGVzIGFuZCAyNzAgZWRnZXMgY3JlYXRlZC4KICAgICAgRXhwb3J0aW5nLi4uR01MIGNyZWF0ZWQuCiAgICAgICBEb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJDYXJib25Ta2VsZXRvbk5ldCAoVGVzdCAjIDcpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkNhcmJvblNrZWxldG9uTmV0IC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2YvMy84L2RhdGFzZXRfZjM4YTc5Y2UtNjhlZC00NDNmLTllZGMtOTZkYzg4MGYzYzE4LmRhdCIgLWcgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvYy83LzkvZGF0YXNldF9jNzk4OWFlNi03MDVmLTQ5OWUtYmU2ZC0xMTUzYzZlNmZiMzAuZGF0IiAgICAgICAtZiAibWF0cml4IiAgIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTA5L291dHB1dHMvZGF0YXNldF8zN2Q0ZTFjMC03NGU5LTQ5NTQtYWU2Yy02ODVhZDU4MGI4NTYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICAwIGVkZ2VzIGluIGZpbGUgbm90IGZvdW5kIGluIHRoZSBncmFwaAogICAgICAyMDUgd2VpZ2h0cyBzZXQgYW1vbmcgNTAyIGVkZ2VzIGluIGdyYXBoCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLjc1IHJlYWN0aW9ucyBhbmQgMTExIG1ldGFib2xpdGVzIHJlYWQuCiAgICAgICBEb25lLgogICAgICBCdWlsZGluZyBOZXR3b3JrLi4uMTExIG5vZGVzIGFuZCA1MDIgZWRnZXMgY3JlYXRlZC4KICAgICAgIERvbmUuCiAgICAgIFByb2Nlc3NpbmcgYXRvbSBtYXBwaW5ncy4uLkRvbmUuCiAgICAgIFNraXAgY29tcG91bmRzIHdpdGggbGVzcyB0aGFuIHR3byBjYXJib25zIGRldGVjdGVkLi4uCiAgICAgIAlkaXNjb25uZWN0aW5nIENPMgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgIERvbmUuCiAgICAgIDExMSBub2RlcyBhbmQgMjAyIGVkZ2VzIGNyZWF0ZWQuCiAgICAgIEV4cG9ydGluZy4uLiBEb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwga2VlcFNpbmdsZUNhcmJvbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlQ29tcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVuZGlyZWN0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZm9ybWF0IHwgYCAibWF0cml4IiBgIHwKICAgICAgIHwgbWFpbiB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZyb21JbmRleGVzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NibWwyQ2FyYm9uU2tlbGV0b25OZXQgKFRlc3QgIyA4KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJDYXJib25Ta2VsZXRvbk5ldCAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9iL2YvMC9kYXRhc2V0X2JmMDBhZTg5LWVhNTgtNGM3MC1hNTA4LTc0ZmJhYjU0ZTNjOS5kYXQiIC1nICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2YvOC8zL2RhdGFzZXRfZjgzY2JmNTMtYTQxMy00NjAxLTllNGQtZWY3MzFlZGNkZjAwLmRhdCIgICAgICAgLWYgImdtbCIgIC1maSAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzExMi9vdXRwdXRzL2RhdGFzZXRfNWVkZTlmZmMtOGE2MS00NTExLWIxMGItNTU3NjAyYjM0NmIyLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBIdW1hbkdFTQogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgSHVtYW5HRU0KICAgICAgMCBlZGdlcyBpbiBmaWxlIG5vdCBmb3VuZCBpbiB0aGUgZ3JhcGgKICAgICAgMjA2IHdlaWdodHMgc2V0IGFtb25nIDUwMiBlZGdlcyBpbiBncmFwaAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi43NSByZWFjdGlvbnMgYW5kIDExMSBtZXRhYm9saXRlcyByZWFkLgogICAgICAgRG9uZS4KICAgICAgQnVpbGRpbmcgTmV0d29yay4uLjExMSBub2RlcyBhbmQgNTAyIGVkZ2VzIGNyZWF0ZWQuCiAgICAgICBEb25lLgogICAgICBQcm9jZXNzaW5nIGF0b20gbWFwcGluZ3MuLi5Eb25lLgogICAgICBTa2lwIGNvbXBvdW5kcyB3aXRoIGxlc3MgdGhhbiB0d28gY2FyYm9ucyBkZXRlY3RlZC4uLgogICAgICAJZGlzY29ubmVjdGluZyBDTzIKICAgICAgCWRpc2Nvbm5lY3RpbmcgQ08yCiAgICAgICBEb25lLgogICAgICAxMTEgbm9kZXMgYW5kIDIwMyBlZGdlcyBjcmVhdGVkLgogICAgICBFeHBvcnRpbmcuLi5HTUwgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBrZWVwU2luZ2xlQ2FyYm9uIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWVyZ2VDb21wIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbWVyZ2VFZGdlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJlbW92ZUlzb2xhdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBtYWluIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZnJvbUluZGV4ZXMgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sMkNvbXBvdW5kR3JhcGggKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJDb21wb3VuZEdyYXBoIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzQvNy9iL2RhdGFzZXRfNDdiZjkzN2YtYzg3YS00OWM0LTlhYTItNjhiMWY5NWYxZTY4LmRhdCIgLXNjICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzIvZS8xL2RhdGFzZXRfMmUxNjBhYzMtNTQxNC00YjFiLWI2MTktY2ViMmVjZmY3OGY0LmRhdCIgLW1jICJubyIgICAgICAtZiAiZ21sIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzExNS9vdXRwdXRzL2RhdGFzZXRfOGZjNDdiMzgtMzUyZC00Yjc1LTlmNzMtNTkwMGU1ODk0YTRhLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCiAgICAgIEJ1aWxkaW5nIE5ldHdvcmsuLi4gRG9uZS4KICAgICAgcmVtb3Zpbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgUmVhZCBmaWxlIGNvbnRhaW5pbmcgc2lkZSBjb21wb3VuZHMuLi4KICAgICAgNiBjb21wb3VuZHMgcmVtb3ZlZC4KICAgICAgIERvbmUuCiAgICAgIEV4cG9ydGluZy4uLkdNTCBjcmVhdGVkLgogICAgICAgRG9uZS4KCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IG1lcmdpbmdTdHJhdCB8IGAgIm5vIiBgIHwKICAgICAgIHwgbWVyZ2VFZGdlcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJlbW92ZUlzb2xhdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNvbXB1dGVXZWlnaHQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJDb21wb3VuZEdyYXBoIChUZXN0ICMgMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWwyQ29tcG91bmRHcmFwaCAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8yLzcvNi9kYXRhc2V0XzI3NjY3YTRlLTM0ZDItNDI5ZC1iNDNjLTI3ZTVjZjExMmMzOC5kYXQiIC1zYyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9mLzcvNS9kYXRhc2V0X2Y3NWQzNjE2LTVlZTctNDAzNi04NGNiLWZjNmQ3YWU0MWI0YS5kYXQiIC1tYyAiYnlfaWQiICAtcmkgLWR3IC11biAtdHAgLWYgImdtbCIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMTgvb3V0cHV0cy9kYXRhc2V0XzFlY2Y5OWVlLTUwNjktNDY2Yy04ODgzLTNiZjdlMTYzNTc2My5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIDEyIGlzb2xhdGVkIG5vZGVzIHJlbW92ZWQgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgogICAgICBCdWlsZGluZyBOZXR3b3JrLi4uIERvbmUuCiAgICAgIHJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIFJlYWQgZmlsZSBjb250YWluaW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgY29tcG91bmRzIHJlbW92ZWQuCiAgICAgICBEb25lLgogICAgICBDcmVhdGUgVW5kaXJlY3RlZC4uLiBEb25lLgogICAgICBTZXR0aW5nIGVkZ2Ugd2VpZ2h0cyAodGFyZ2V0IGRlZ3JlZSkuLi4KICAgICAgIERvbmUuCiAgICAgIE1lcmdpbmcgY29tcGFydG1lbnRzLi4uIERvbmUuCiAgICAgIFJlbW92ZSBpc29sYXRlZCBub2Rlcy4uLgogICAgICAJcmVtb3ZpbmcgTV9zX2MKICAgICAgCXJlbW92aW5nIERfR2x5Y2VyYWxkZWh5ZGUKICAgICAgCXJlbW92aW5nIHNuX0dseWNlcm9fM19waG9zcGhvZXRoYW5vbGFtaW5lCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob2Nob2xpbmUKICAgICAgCXJlbW92aW5nIHNuX0dseWNlcm9fM19waG9zcGhvXzFfaW5vc2l0b2wKICAgICAgCXJlbW92aW5nIFAxX1A0X0Jpc181X19hZGVub3N5bF9fdGV0cmFwaG9zcGhhdGUKICAgICAgCXJlbW92aW5nIE1fY3lzX0RfYwogICAgICAJcmVtb3ZpbmcgTV9tZXRfRF9jCiAgICAgIAlyZW1vdmluZyBtZXRoYW5lc3VsZm9uYXRlCiAgICAgIAlyZW1vdmluZyBQMV9QNV9CaXNfNV9fYWRlbm9zeWxfX3BlbnRhcGhvc3BoYXRlCiAgICAgIAlyZW1vdmluZyBHbHljZXJvcGhvc3Bob2dseWNlcm9sCiAgICAgIAlyZW1vdmluZyBHbHljZXJvcGhvc3Bob3NlcmluZQogICAgICAgRG9uZS4KICAgICAgQ29tcHV0ZSB0cmFuc2l0aW9uIG1hdHJpeC4uLiBEb25lLgogICAgICBFeHBvcnRpbmcuLi5HTUwgY3JlYXRlZC4KICAgICAgIERvbmUuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJieV9pZCIgYCB8CiAgICAgICB8IG1lcmdlRWRnZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCB0cnVlIGAgfAogICAgICAgfCB3ZWlnaHRGaWxlIHwgYCBOb25lIGAgfAogICAgICAgfCB1bmRpcmVjdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBjb21wdXRlV2VpZ2h0IHwgYCB0cnVlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJHcmFwaCAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkdyYXBoIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2QvNy9kL2RhdGFzZXRfZDdkYWM4NmMtY2EwNy00ZTUwLWEwZjEtMWE4M2VlMDhhMWMxLmRhdCIgIC1jICAtZiAiZ21sIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyMC9vdXRwdXRzL2RhdGFzZXRfNjkzZmQyYWEtN2JhMC00ZDY4LThlYzgtOTljODRkNjg5ZTg4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgR01MIGNyZWF0ZWQuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBiaXBhcnRpdGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wb3VuZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcmVhY3Rpb24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJHcmFwaCAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkdyYXBoIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzkvZS83L2RhdGFzZXRfOWU3YWE2OWMtMGVmZi00ODQ4LWFjMTItNGMxZDUxMDdjNTczLmRhdCIgLWIgICAtZiAiZ21sIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyMi9vdXRwdXRzL2RhdGFzZXRfNTc5NWE1ZTEtOGQ0MS00Zjk3LWIyZmEtYzU4M2VkYzM3MWY5LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgR01MIGNyZWF0ZWQuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBiaXBhcnRpdGUgfCBgIHRydWUgYCB8CiAgICAgICB8IGNvbXBvdW5kIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcmVhY3Rpb24gfCBgIGZhbHNlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJHcmFwaCAoVGVzdCAjIDMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMkdyYXBoIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzkvYS83L2RhdGFzZXRfOWE3MzViZmMtMmIyOS00ZDFhLThiYjItMTUxN2U4MGQxMzk2LmRhdCIgICAtciAtZiAiZ21sIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyNC9vdXRwdXRzL2RhdGFzZXRfMjJhNWVjMDktNTQxNi00ZWRmLThjZTctNmJjZGViZDYxY2ZjLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgR01MIGNyZWF0ZWQuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBiaXBhcnRpdGUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBjb21wb3VuZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHJlYWN0aW9uIHwgYCB0cnVlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbDJUYWIgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuU2JtbDJUYWIgLWlyciAiLS0+IiAtcmV2ICI8PT0+IiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8xL2UvYy9kYXRhc2V0XzFlY2Y5NzEzLTZlMzgtNDE0NS04NDZiLWY4MDQwYzgwMzA1NC5kYXQiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTI2L291dHB1dHMvZGF0YXNldF9kNDUyOTUxOS1iMTUwLTRhNGYtYjc2YS0zYWRiNGZkOTFlODEuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sMlRhYiAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sMlRhYiAtaXJyICItPiIgLXJldiAiPSIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZS84LzUvZGF0YXNldF9lODUxZGE4OC0zZDg4LTQwNDYtYTkwYi04YmQ1NDQ3NWM4ZWEuZGF0IiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEyOC9vdXRwdXRzL2RhdGFzZXRfMDBkNDFhZTctYmYxOS00OTA0LWJjYzUtMDQwN2IzZmEzYTliLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpIHwgYCAiLT4iIGAgfAogICAgICAgfCByIHwgYCAiPSIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TYm1sV2l6YXJkIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlNibWxXaXphcmQgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZS9iLzQvZGF0YXNldF9lYjRmYmVkYi1iNTRkLTQwODMtOTMxZi1mOWFjZDcxMjdlNzkuZGF0IiAtcmljIC1yMCAtbWMgImJ5X2lkIiAtcmRyIC1yRVggInMiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTMwL291dHB1dHMvZGF0YXNldF9lYzRiNWViZS1jYmE3LTQwNzktYTdmZC0yYTdmY2E5NjJhNmIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIEh1bWFuR0VNCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfMGQ2YzJlZWRfZTQ3Y180MjBkX2FmZWNfMjlkOWRjMzFlZDJmCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBCYWQgcHJvcGVydHkgaW4gYW5ub3RhdGlvbnM6IGlzRGVzY3JpYmVkQnksIHNldCB0byBIQVNfUFJPUEVSVFkKICAgICAgQmFkIHByb3BlcnR5IGluIGFubm90YXRpb25zOiBpc0Rlc2NyaWJlZEJ5LCBzZXQgdG8gSEFTX1BST1BFUlRZCiAgICAgIEJhZCBwcm9wZXJ0eSBpbiBhbm5vdGF0aW9uczogaXNEZXNjcmliZWRCeSwgc2V0IHRvIEhBU19QUk9QRVJUWQogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFJlYWRpbmcgU0JNTC4uLiBEb25lLgoKCiAgICAgIAljb21wYXJ0bWVudHM6CTUKICAgICAgCW1ldGFib2xpdGVzOgkxMTEKICAgICAgCXJlYWN0aW9uczoJNzUKICAgICAgCWVuenltZXM6CTg1CiAgICAgIAlnZW5lczoJODYKICAgICAgCXByb3RlaW46CTg2CiAgICAgIAlwYXRod2F5OgkzCgoKICAgICAgcmVtb3ZpbmcgcmVhY3Rpb24gd2l0aCBudWxsIGZsdXggYm91bmRzLi4uCiAgICAgIDAgImNsb3NlZCIgcmVhY3Rpb25zIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBleHRlcm5hbCBjb21wYXJ0bWVudC4uLgogICAgICAxMyBleHRlcm5hbCBzcGVjaWVzIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBpc29sYXRlZCBjb21wb3VuZHMuLi4KICAgICAgMCBpc29sYXRlZCBjb21wb3VuZHMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIE1lcmdpbmcgY29tcGFydG1lbnRzLi4uIERvbmUuCiAgICAgIHJlbW92aW5nIGR1cGxpY2F0ZWQgcmVhY3Rpb25zLi4uCiAgICAgIDEgZHVwbGljYXRlZCByZWFjdGlvbnMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCgoKICAgICAgCWNvbXBhcnRtZW50czoJMQogICAgICAJbWV0YWJvbGl0ZXM6CTQ5CiAgICAgIAlyZWFjdGlvbnM6CTM0CiAgICAgIAllbnp5bWVzOgk4NQogICAgICAJZ2VuZXM6CTg2CiAgICAgIAlwcm90ZWluOgk4NgogICAgICAJcGF0aHdheToJMwoKCiAgICAgIEV4cG9ydGluZy4uLiBEb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCB0b0tlZXBDIHwgYCBOb25lIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgaW5wdXRSZWFjdGlvbnMgfCBgIE5vbmUgYCB8CiAgICAgICB8IHRvS2VlcFIgfCBgIE5vbmUgYCB8CiAgICAgICB8IHJlbW92ZU5vRmx1eCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAiYnlfaWQiIGAgfAogICAgICAgfCByZW1vdmVEdXBsaWNhdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBleGNoYW5nZUNvbXBUb1JlbW92ZSB8IGAgInMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2JtbFdpemFyZCAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5TYm1sV2l6YXJkIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2MvNi80L2RhdGFzZXRfYzY0NjFmYzMtMjNiMi00OWQyLThlYWQtZDJmZDRiN2NmZWY3LmRhdCIgLXJjICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzEvMi8wL2RhdGFzZXRfMTIwOTQ4ZDUtYzg1MC00YzlkLTk1ZGEtNGE1Njg4NWExZDc0LmRhdCIgLXJpYyAtcnIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOS9lL2MvZGF0YXNldF85ZWNlYjc4Ni1mN2U3LTQ0ODAtYTc3ZC1lNDEyZjIyOWEzZTcuZGF0IiAtcjAgLW1jICJubyIgLXJkciAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzEzNC9vdXRwdXRzL2RhdGFzZXRfODhkNzViNTUtMDNiMy00ZjkxLTk4NWEtNDEzZDgwOGUyYjFkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KCgogICAgICAJY29tcGFydG1lbnRzOgkzCiAgICAgIAltZXRhYm9saXRlczoJMTEwNwogICAgICAJcmVhY3Rpb25zOgkxMTU4CiAgICAgIAllbnp5bWVzOgk1MTQKICAgICAgCWdlbmVzOgk1NzIKICAgICAgCXByb3RlaW46CTU3MgogICAgICAJcGF0aHdheToJNDgKCgogICAgICByZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICBSZWFkIGZpbGUgY29udGFpbmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IHNpZGUgY29tcG91bmRzIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBzaWRlIHJlYWN0aW9uLi4uCiAgICAgIDIgaXJyZWxldmFudCByZWFjdGlvbnMgcmVtb3ZlZCBmcm9tIG5ldHdvcmsuCiAgICAgIHJlbW92aW5nIHJlYWN0aW9uIHdpdGggbnVsbCBmbHV4IGJvdW5kcy4uLgogICAgICAwICJjbG9zZWQiIHJlYWN0aW9ucyByZW1vdmVkIGZyb20gbmV0d29yay4KICAgICAgcmVtb3ZpbmcgaXNvbGF0ZWQgY29tcG91bmRzLi4uCiAgICAgIDAgaXNvbGF0ZWQgY29tcG91bmRzIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgogICAgICByZW1vdmluZyBkdXBsaWNhdGVkIHJlYWN0aW9ucy4uLgogICAgICAwIGR1cGxpY2F0ZWQgcmVhY3Rpb25zIHJlbW92ZWQgZnJvbSBuZXR3b3JrLgoKCiAgICAgIAljb21wYXJ0bWVudHM6CTMKICAgICAgCW1ldGFib2xpdGVzOgkxMTAxCiAgICAgIAlyZWFjdGlvbnM6CTExNTIKICAgICAgCWVuenltZXM6CTUxNAogICAgICAJZ2VuZXM6CTU3MgogICAgICAJcHJvdGVpbjoJNTcyCiAgICAgIAlwYXRod2F5Ogk0OAoKCiAgICAgIEV4cG9ydGluZy4uLiBEb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgdG9LZWVwQyB8IGAgTm9uZSBgIHwKICAgICAgIHwgcmVtb3ZlSXNvbGF0ZWQgfCBgIHRydWUgYCB8CiAgICAgICB8IHRvS2VlcFIgfCBgIE5vbmUgYCB8CiAgICAgICB8IHJlbW92ZU5vRmx1eCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAibm8iIGAgfAogICAgICAgfCByZW1vdmVEdXBsaWNhdGVkIHwgYCB0cnVlIGAgfAogICAgICAgfCBleGNoYW5nZUNvbXBUb1JlbW92ZSB8IGAgIiIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TY29wZU5ldHdvcmsgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5TY29wZU5ldHdvcmsgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZi9mLzMvZGF0YXNldF9mZjMzNzE5NS0zNDIxLTQxMjItYjZhZS1mYjQ4ZjU2YTk4ZWQuZGF0IiAtcyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy83LzcvZC9kYXRhc2V0Xzc3ZDhmNDI4LWJhMzYtNDRjNi1hNGIzLTA4YWYwNDkwYzg3Yy5kYXQiIC1zYyAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8wLzcvMi9kYXRhc2V0XzA3MjFiNDQ1LTM3YWEtNGQ1YS05MGQ0LWRmZDFiMzA4ZDhlZC5kYXQiICAgLWYgImdtbCIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xMzgvb3V0cHV0cy9kYXRhc2V0X2FjYjU0ZDg5LWQ2OGQtNDBmMC04OGY4LTNiY2Y3Nzc2NWFkZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgR01MIGNyZWF0ZWQuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpbmNsdWRlU2lkZXMgfCBgIGZhbHNlIGAgfAogICAgICAgfCByZWFjdGlvblRvSWdub3JlRmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdHJhY2UgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmb3JtYXQgfCBgICJnbWwiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2VlZHNBbmRUYXJnZXRzIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuU2VlZHNBbmRUYXJnZXRzIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzUvOC9hL2RhdGFzZXRfNThhNDE4ZDktZDU0Ni00YzMxLTljYzctYmFkMzk0Mzk2ZTFmLmRhdCIgLXMgICAgICAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNDAvb3V0cHV0cy9kYXRhc2V0X2I0NjNhMjQ4LTI0OTktNGU2Yy1iMDkzLWQzZjNjODdjN2ZmMy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBDcmVhdGluZyBncmFwaC4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCBjb21wIHwgYCAiIiBgIHwKICAgICAgIHwgc291cmNlIHwgYCB0cnVlIGAgfAogICAgICAgfCBzaW5rIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm90c291cmNlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm90c2luayB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGtlZXBJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVzZUJvcmVuc3RlaW5BbGcgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VJbnRlcm5hbCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZWVkc0FuZFRhcmdldHMgKFRlc3QgIyAyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5TZWVkc0FuZFRhcmdldHMgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMS9jLzYvZGF0YXNldF8xYzY2YmE1NC1kYjhiLTQwNjUtYmI3Zi05NjkwOTQ2M2U2MDguZGF0IiAtYyAiZSIgIC10ICAgICAtaW4gLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNDIvb3V0cHV0cy9kYXRhc2V0XzZiYzBjODgwLWY3NjItNDYwZC04ZWQ0LWY1NGMxOTQzNTUzNC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBDcmVhdGluZyBncmFwaC4uLgogICAgICBkb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgaW5wdXRTaWRlIHwgYCBOb25lIGAgfAogICAgICAgfCBjb21wIHwgYCAiZSIgYCB8CiAgICAgICB8IHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHNpbmsgfCBgIHRydWUgYCB8CiAgICAgICB8IG5vdHNvdXJjZSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vdHNpbmsgfCBgIGZhbHNlIGAgfAogICAgICAgfCBrZWVwSXNvbGF0ZWQgfCBgIGZhbHNlIGAgfAogICAgICAgfCB1c2VCb3JlbnN0ZWluQWxnIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgdXNlSW50ZXJuYWwgfCBgIHRydWUgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZWVkc0FuZFRhcmdldHMgKFRlc3QgIyAzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5TZWVkc0FuZFRhcmdldHMgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZi8yLzUvZGF0YXNldF9mMjUwZDNkZC1lZjZkLTRlMTAtOWJkNy04YTBlODZjNDYzMDIuZGF0IiAtYyAiZSIgIC10ICAgIC1CICAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE0NC9vdXRwdXRzL2RhdGFzZXRfYTQ1OGFiM2EtZmI1NS00NGYxLWFlMTQtODBhNWI5NmMxMDM4LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgcmVhZGluZyBTQk1MLi4uCiAgICAgIENyZWF0aW5nIGdyYXBoLi4uCiAgICAgIGRvbmUuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBpbnB1dFNpZGUgfCBgIE5vbmUgYCB8CiAgICAgICB8IGNvbXAgfCBgICJlIiBgIHwKICAgICAgIHwgc291cmNlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgc2luayB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgbm90c291cmNlIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm90c2luayB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGtlZXBJc29sYXRlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHVzZUJvcmVuc3RlaW5BbGcgfCBgIHRydWUgYCB8CiAgICAgICB8IHVzZUludGVybmFsIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NldENoYXJnZXMgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2V0Q2hhcmdlcyAtY2MgIjIiIC1jaSAiMSIgICAtbiAiMCIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZS84LzkvZGF0YXNldF9lODllZGRiMy1jOTMzLTQ4YzAtYmQwMy1iN2NjY2MzNmVlMGEuZGF0IiAtdGFiICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzgvYi8zL2RhdGFzZXRfOGIzOWIzNjgtMTdjZS00NTZiLWEyNGYtYWRkZDE0MzY5YjA0LmRhdCIgLWMgIiMiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTQ3L291dHB1dHMvZGF0YXNldF9jMzgzNGFhMC1kMGVmLTQ3YjAtODgxZC1jZDY4NDAzY2M2YmYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF80MTg3MTgxNV9mNGY0XzQzN2VfYTg1MF84OTI3YWFmNjYwYzMKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAyIGF0dHJpYnV0aW9ucwoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sY2hhcmdlIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2V0Q2hhcmdlcyAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TZXRDaGFyZ2VzIC1jYyAiMiIgLWNpICIxIiAgIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9mLzEvNC9kYXRhc2V0X2YxNGVlZjg4LTA2ZWYtNGIzNC05YjE0LWI2M2I4YjE3OTQ1Ny5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNi8wLzAvZGF0YXNldF82MDBiZDkzYy0zNWEwLTQ5MTUtYjQ5Mi00ZDEyNWI0YTQ1ZDcuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNTAvb3V0cHV0cy9kYXRhc2V0Xzc2MDU0ODZhLTc5NzEtNDY1MC1hNmM4LTE0OTYzZWI5YjRkNC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzZhNTQzMjAyXzk2MzZfNDgxNV84Yzc4XzlmMDk3NDNiZjZmZAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDEgYXR0cmlidXRpb25zCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xjaGFyZ2UgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZXRDaGFyZ2VzIChUZXN0ICMgMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNldENoYXJnZXMgLWNjICIyIiAtY2kgIjEiICAgLW4gIjEiIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2YvZC8wL2RhdGFzZXRfZmQwOWVhZmItZjg4Ni00MWRhLTllMDktN2M1OWQ3YzNkY2JlLmRhdCIgLXRhYiAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8wLzUvMi9kYXRhc2V0XzA1MmY2MWUxLTk3ZTUtNDM4Yy1hZjEzLWQxZjE0MTdkNGE0OS5kYXQiIC1jICIjIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE1My9vdXRwdXRzL2RhdGFzZXRfM2JkZDk2MzktZjBlMy00YWU2LTlkMmYtNmI3MzgyNmEyNmE0LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfYmU5MzMwN2RfZjRmOV80NTZjXzg2OTVfM2JmMmUyZmNlOWJjCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgMSBhdHRyaWJ1dGlvbnMKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGNoYXJnZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMSIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NldENoYXJnZXMgKFRlc3QgIyA0KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2V0Q2hhcmdlcyAtY2MgIjIiIC1jaSAiMSIgICAtbiAiMCIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNy8yL2MvZGF0YXNldF83MmM4MTg4Zi0yOGE4LTQ2ZjEtYWViYy0zOWEzMmU0Mjc1NjcuZGF0IiAtdGFiICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzcvZC81L2RhdGFzZXRfN2Q1ZWNiZGItMDA1Ny00MWJjLWIxNmEtMGE3M2YwZjJhY2Q3LmRhdCIgLWMgIiMiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTU2L291dHB1dHMvZGF0YXNldF9mYjc3MTEzMy1iYTZjLTQyNjUtOTZjYS03N2EwM2NmN2Q5OGQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF83ZWJiNzBiN19iOGY5XzQwMTNfYTA4YV80NGYzYWVhNWVmZWUKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAyIGF0dHJpYnV0aW9ucwoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sY2hhcmdlIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2V0Q2hhcmdlcyAoVGVzdCAjIDUpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TZXRDaGFyZ2VzIC1jYyAiMiIgLWNpICIxIiAtcCAtcyAtbiAiMCIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNC9mLzIvZGF0YXNldF80ZjIxZmUwYi1mNTc5LTQyYjQtYWM4Yi1jNWYyYjY0NzY1MmMuZGF0IiAtdGFiICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzQvMS84L2RhdGFzZXRfNDE4Nzc5NDAtM2I3MC00MWQxLWFkY2EtNjcwYzg0MTJjZTMzLmRhdCIgLWMgIiMiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTU5L291dHB1dHMvZGF0YXNldF85MGFhNzkyZC03YTBmLTRiY2MtYWE2Yi1lNzM4ZTQ5ZGVhNGQuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDMgYXR0cmlidXRpb25zCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xjaGFyZ2UgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgcyB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2V0Q2hlbWljYWxGb3JtdWxhcyAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TZXRDaGVtaWNhbEZvcm11bGFzIC1jZiAiMiIgLWNpICIxIiAgIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9jL2QvZC9kYXRhc2V0X2NkZDEyNmY0LTliODMtNDJiMi04NzE2LTc1ZWQ5MDQ5YWZjMS5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMC8xL2UvZGF0YXNldF8wMWU0YzQ0Ny04NWM3LTRmNjYtOWI2Ny00OGYzODg2OGM3YTcuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNjIvb3V0cHV0cy9kYXRhc2V0X2E2M2YzZTM4LWVjZmEtNDY5MS1hZDUzLTZiYjk3NTRjNTUyMi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzYzZjM5ZGMxX2Q4ZDNfNGRiOV9iYTFjX2RjZTlmY2Q3MzIyYQogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgYXR0cmlidXRpb25zCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2V0Q2hlbWljYWxGb3JtdWxhcyAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TZXRDaGVtaWNhbEZvcm11bGFzIC1jZiAiMiIgLWNpICIxIiAgIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy82LzcvZS9kYXRhc2V0XzY3ZWE0NjVjLWQyOWQtNDMxNy1hOWNhLWVkZTBlNjYwNWM5Yi5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNi9kL2IvZGF0YXNldF82ZGI0ODJmMi1lY2M3LTQ0MDYtOGU4Ni0wODU5MmNkYzdjOWEuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNjUvb3V0cHV0cy9kYXRhc2V0XzU0ZWRhYjZhLTBhYTEtNGNlZi05ZTA3LTdhZTI2MzY1MTA2Ni5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMQogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICAqKioqKioqKgogICAgICBbV2FybmluZ11BdHRyaWJ1dGUgIjEyQ0g0TyIgbm90IHdlbGwgZm9ybWF0dGVkCiAgICAgICoqKioqKioqCiAgICAgIEVycm9yIHdoaWxlIHNldHRpbmcgZm9ybXVsYXMKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZXRFY051bWJlcnMgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2V0RWNOdW1iZXJzIC1jZWMgIjIiIC1jaSAiMSIgIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9lL2YvNS9kYXRhc2V0X2VmNTRjMzhmLWQ2YzAtNDNhMi1hMWE2LTBmZmM0ZWJiNGUzYi5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMS84LzgvZGF0YXNldF8xODg1N2U1Yi1mMzIwLTRhMjMtYjBiZS05ZGZhZjE0ZGE2MjcuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNjgvb3V0cHV0cy9kYXRhc2V0X2UzZjVlYjE0LWRiYjAtNDUzNC1iMGFhLWNkODQ2ZmZiY2M4Ni5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzkzNzg4Yzg0XzAwYmNfNDc1M19iOWE2X2I2ZWI2Y2EzNTA1YwogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgcmVhY3Rpb25zIHByb2Nlc3NlZAoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZWMgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NldEVjTnVtYmVycyAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TZXRFY051bWJlcnMgLWNlYyAiMiIgLWNpICIxIiAgLW4gIjAiIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2MvOS9mL2RhdGFzZXRfYzlmNGM3YjEtMzBlYy00ZWRiLWExYzMtNmFkZDY5M2Q3ZTc1LmRhdCIgLXRhYiAiL3RtcC90bXA5OW53YjZ3My9maWxlcy84L2MvMy9kYXRhc2V0XzhjMzdiMzcwLWIzNDItNDZmNC04MDBiLTdhNjRkNGE2MTAyOS5kYXQiIC1jICIjIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE3MS9vdXRwdXRzL2RhdGFzZXRfNzQ2ZmRiNGItNTU4NS00NWVmLWFjMWItODkyNjM4MTgzNzE2LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAxCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCAKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgCiAgICAgICoqKioqKioqCiAgICAgIFtXYXJuaW5nXUF0dHJpYnV0ZSAiMS4yLjMuNC41IiBub3Qgd2VsbCBmb3JtYXR0ZWQKICAgICAgKioqKioqKioKICAgICAgRXJyb3IgaW4gc2V0dGluZyBFQ3MKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGVjIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZXRHcHJzIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNldEdwcnMgLWNncHIgIjIiIC1jaSAiMSIgIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy83LzYvMy9kYXRhc2V0Xzc2MzU5YzFlLTYzMjMtNGQwMS1hOTQ1LWI0YjFkYjkyMDBlYy5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOS82LzEvZGF0YXNldF85NjEzYTU1OC0wMDQ2LTRmOGQtODNmNy1kZjUxZDBlYmM3ZGEuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzQvb3V0cHV0cy9kYXRhc2V0XzBhNzYzY2Y3LWQ3NDQtNGVjNC05Y2Q4LWYzZDc4OTIyYThiOC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzQ4OGIzMzUzXzk0OWFfNDNhNl9iN2M2XzhlZDYyODE1MDlmNQogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgZ2VuZSBhc3NvY2lhdGlvbnMgY3JlYXRlZAoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sZ3ByIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZXRJZHMgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2V0SWRzIC1jbmV3ICIyIiAtY2kgIjEiICAgLXQgIk1FVEFCT0xJVEUiIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9mL2MvNS9kYXRhc2V0X2ZjNTFmYWRhLWMxMGEtNDE1Yi1hMDBkLTA0MGQwOTY1N2JkZi5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZi9iLzYvZGF0YXNldF9mYjZjOWVlMy1mYTg3LTQzZWUtYTNlMS02YzJmY2RkYmEzMzAuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xNzcvb3V0cHV0cy9kYXRhc2V0XzViYTZjM2ZmLTJlZTMtNDhiYS04MGNlLTc4ODVlOTYzZDFjYy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzI4M2YzZGZiXzZiNmJfNGI2N19iOTY4XzA2MzljMzA3MTliNgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgZW50aXRpZXMgcHJvY2Vzc2VkCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZXRJZHMgKFRlc3QgIyAyKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2V0SWRzIC1jbmV3ICIyIiAtY2kgIjEiICAgLXQgIlJFQUNUSU9OIiAtbiAiMCIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOS85LzAvZGF0YXNldF85OTBkZDI5OS0xMDQwLTRjMTEtOGI2Zi1mM2U4ZTIyY2VjZTkuZGF0IiAtdGFiICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzUvNC81L2RhdGFzZXRfNTQ1Mjk2MzAtY2YyOC00NWRiLTk0NGEtYmRiNjg5YzU4NTZlLmRhdCIgLWMgIiMiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTgwL291dHB1dHMvZGF0YXNldF84YmNjNTcwOC0yYzJhLTQ1MDktODBjNy04ZGEyNTNmZTNkYWUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF9mZTcyN2M1M181OTcxXzQzODNfYWYxZl8wYjBmODE2MThjNjEKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAyIGVudGl0aWVzIHByb2Nlc3NlZAoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJSRUFDVElPTiIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NldElkcyAoVGVzdCAjIDMpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TZXRJZHMgLWNuZXcgIjIiIC1jaSAiMSIgICAtdCAiUEFUSFdBWSIgLW4gIjAiIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2UvZi9hL2RhdGFzZXRfZWZhMjg2ODctMDc0YS00NTBjLWE3OTEtOWUwZmI2YzgwNmI3LmRhdCIgLXRhYiAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9jLzIvMS9kYXRhc2V0X2MyMWM1Yzg5LTc1MDEtNDdjNS1iNDY3LTEzNGIxZDk3MTExMS5kYXQiIC1jICIjIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzE4My9vdXRwdXRzL2RhdGFzZXRfOWQ2OWQ5NDUtYTdmMC00OGNiLWFhMzItMmNmOGU1Y2I3ODBkLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIFhmbTExNTgKICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAyIGVudGl0aWVzIHByb2Nlc3NlZAoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29sbmFtZSB8IGAgIjIiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJQQVRIV0FZIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2V0SWRzIChUZXN0ICMgNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNldElkcyAtY25ldyAiMiIgLWNpICIxIiAgIC10ICJHRU5FIiAtbiAiMCIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOC8zLzcvZGF0YXNldF84MzdjZjA0ZS1jMDJjLTQ2NmEtYWQ2ZS05ZDAzYTdmNTI4OTAuZGF0IiAtdGFiICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzkvNS80L2RhdGFzZXRfOTU0YmE1ZDMtNmIyMi00YjJhLWE5NTMtMDA1NGE3OGUyYjljLmRhdCIgLWMgIiMiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTg2L291dHB1dHMvZGF0YXNldF85MWUwNDVhYS0wYmY3LTQ5OWItYjc0ZS1jZWZhMWRlMmNjNjcuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgQ2hlbWljYWwgZm9ybXVsYSBub3QgaW4gZ29vZCBmb3JtYXQgKEM0MS41NTQwNjE4Mzc1NDAwNzVINzEuNzg1NTM1Mzc5NDg5NjROOS44NTM4MjQwMDg4NDAxNU8xNC45MzgyNDQwMTczODk5MzRQMC44ODExMjAwMjU4MDAwMTU2UjEuMjc2NzU2NDc4MzE4OTNFLTE1TW43LjM0OTE5RS00TW83LjM3Njg1RS02Q2wwLjAwNTUzMjYzOUswLjIwNzQ3Mzk1MUNvMi42NzQxMUUtNUN1Ny41MzM2MUUtNFMwLjI0NzAwOTE1Njc4MDAwMDAyWm4zLjYyMzg4RS00TWcwLjAwOTIyMTA2NE5pMy40MzAyNEUtNENhMC4wMDU1MzI2MzlGZTAuMDE3MzQ2NTE1Mzk5OTk5OTk4KSBmb3IgTV9CSU9NQVNTX1hGX2MKICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgZW50aXRpZXMgcHJvY2Vzc2VkCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIkdFTkUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZXRJZHMgKFRlc3QgIyA1KTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2V0SWRzIC1jbmV3ICIyIiAtY2kgIjEiICAgLXQgIkNPTVBBUlRNRU5UIiAtbiAiMCIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMi9lLzUvZGF0YXNldF8yZTVmMGFhYS0yY2I5LTRjZWItOWI5YS02ZTc5YzdiN2I0YjkuZGF0IiAtdGFiICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzYvMi80L2RhdGFzZXRfNjI0ZjkxMWEtNmRjMC00N2E1LWExZWUtNWZhMmEzMzZlYTI0LmRhdCIgLWMgIiMiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMTg5L291dHB1dHMvZGF0YXNldF8xYjFiZDgxZS1iNmRmLTQ2OWMtYTk0Ny04ZmE3NDMzYzExMWIuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIENoZW1pY2FsIGZvcm11bGEgbm90IGluIGdvb2QgZm9ybWF0IChDNDEuNTU0MDYxODM3NTQwMDc1SDcxLjc4NTUzNTM3OTQ4OTY0TjkuODUzODI0MDA4ODQwMTVPMTQuOTM4MjQ0MDE3Mzg5OTM0UDAuODgxMTIwMDI1ODAwMDE1NlIxLjI3Njc1NjQ3ODMxODkzRS0xNU1uNy4zNDkxOUUtNE1vNy4zNzY4NUUtNkNsMC4wMDU1MzI2MzlLMC4yMDc0NzM5NTFDbzIuNjc0MTFFLTVDdTcuNTMzNjFFLTRTMC4yNDcwMDkxNTY3ODAwMDAwMlpuMy42MjM4OEUtNE1nMC4wMDkyMjEwNjROaTMuNDMwMjRFLTRDYTAuMDA1NTMyNjM5RmUwLjAxNzM0NjUxNTM5OTk5OTk5OCkgZm9yIE1fQklPTUFTU19YRl9jCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgZW50aXRpZXMgcHJvY2Vzc2VkCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIkNPTVBBUlRNRU5UIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2V0TmFtZXMgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2V0TmFtZXMgLWNuYW1lICIyIiAtY2kgIjEiICAgLXQgIk1FVEFCT0xJVEUiIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9hLzkvNy9kYXRhc2V0X2E5NzBlZTRlLTY3NDctNDE4YS1iYWU4LThhZDFjZmI3ZThkZS5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMC9mLzIvZGF0YXNldF8wZjJhMTZkNi04YjcyLTRhM2MtYTAwNS03NWM3Y2FmMjRhYjMuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xOTIvb3V0cHV0cy9kYXRhc2V0Xzc3ZGVlNmRiLTA5OWEtNDcwNS1hN2JiLTMwNmM4MDRlYjRkNS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2U4NjI2ZjRjXzFmNjdfNDk5Zl84NTUxXzNjMTc1ZmQ3ODUwMAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgYXR0cmlidXRpb25zCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIk1FVEFCT0xJVEUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZXROYW1lcyAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TZXROYW1lcyAtY25hbWUgIjIiIC1jaSAiMSIgICAtdCAiUkVBQ1RJT04iIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9mLzgvMS9kYXRhc2V0X2Y4MTYyYzJhLWEzOTEtNGVhMS05ZGY5LTVjZjZhNzgxMTU3ZC5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvZC8wLzkvZGF0YXNldF9kMDlkZDE0Mi1hZTJhLTRjMjMtYTVmYS03MTY1NDg4NWQ1MGUuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xOTUvb3V0cHV0cy9kYXRhc2V0XzVkNmU3Mzg1LTUyYmYtNGYyYi05OTA3LTBlODkxNWFiNTJjZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2EwMGQyZTE2XzA4N2ZfNDMzYl85MmE3X2RmN2MwNjNkYTAwMgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgYXR0cmlidXRpb25zCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIlJFQUNUSU9OIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2V0TmFtZXMgKFRlc3QgIyAzKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2V0TmFtZXMgLWNuYW1lICIyIiAtY2kgIjEiICAgLXQgIlBBVEhXQVkiIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9lLzAvMi9kYXRhc2V0X2UwMmU0M2IzLWZmYTMtNDQwMi1hNzk5LWNhZTA0ODBiYTI5Ni5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNi8xL2UvZGF0YXNldF82MWVjMDNiMS05YzNiLTQwMGQtYmM1YS03MGJiNjQ5MmRmNGUuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8xOTgvb3V0cHV0cy9kYXRhc2V0XzFkNjZhOTY4LTcxNDItNDllZC1hOGZiLTlmNzI2NTQzYzlmMy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBYZm0xMTU4CiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBDaGVtaWNhbCBmb3JtdWxhIG5vdCBpbiBnb29kIGZvcm1hdCAoQzQxLjU1NDA2MTgzNzU0MDA3NUg3MS43ODU1MzUzNzk0ODk2NE45Ljg1MzgyNDAwODg0MDE1TzE0LjkzODI0NDAxNzM4OTkzNFAwLjg4MTEyMDAyNTgwMDAxNTZSMS4yNzY3NTY0NzgzMTg5M0UtMTVNbjcuMzQ5MTlFLTRNbzcuMzc2ODVFLTZDbDAuMDA1NTMyNjM5SzAuMjA3NDczOTUxQ28yLjY3NDExRS01Q3U3LjUzMzYxRS00UzAuMjQ3MDA5MTU2NzgwMDAwMDJabjMuNjIzODhFLTRNZzAuMDA5MjIxMDY0TmkzLjQzMDI0RS00Q2EwLjAwNTUzMjYzOUZlMC4wMTczNDY1MTUzOTk5OTk5OTgpIGZvciBNX0JJT01BU1NfWEZfYwogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgMiBhdHRyaWJ1dGlvbnMKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbG5hbWUgfCBgICIyIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IHMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBvIHwgYCAiUEFUSFdBWSIgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NldE5hbWVzIChUZXN0ICMgNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNldE5hbWVzIC1jbmFtZSAiMiIgLWNpICIxIiAgIC10ICJHRU5FIiAtbiAiMCIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMi8zLzUvZGF0YXNldF8yMzVhYmI3Mi1jMWQ0LTRlMjUtOTIwYi0yOTA2MzZhYjdmYTAuZGF0IiAtdGFiICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzgvNS8zL2RhdGFzZXRfODUzOTQwMTItOGM0My00YWQ2LTlhZWItZTQxNmQ2ZGNkNzgzLmRhdCIgLWMgIiMiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjAxL291dHB1dHMvZGF0YXNldF9kOWVkMmRmOS05OTViLTQwOWEtYjhhYi0xNDBhODUwOTg5OGUuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgZ3JvdXBzIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBhbm5vdCBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgWGZtMTE1OAogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgQ2hlbWljYWwgZm9ybXVsYSBub3QgaW4gZ29vZCBmb3JtYXQgKEM0MS41NTQwNjE4Mzc1NDAwNzVINzEuNzg1NTM1Mzc5NDg5NjROOS44NTM4MjQwMDg4NDAxNU8xNC45MzgyNDQwMTczODk5MzRQMC44ODExMjAwMjU4MDAwMTU2UjEuMjc2NzU2NDc4MzE4OTNFLTE1TW43LjM0OTE5RS00TW83LjM3Njg1RS02Q2wwLjAwNTUzMjYzOUswLjIwNzQ3Mzk1MUNvMi42NzQxMUUtNUN1Ny41MzM2MUUtNFMwLjI0NzAwOTE1Njc4MDAwMDAyWm4zLjYyMzg4RS00TWcwLjAwOTIyMTA2NE5pMy40MzAyNEUtNENhMC4wMDU1MzI2MzlGZTAuMDE3MzQ2NTE1Mzk5OTk5OTk4KSBmb3IgTV9CSU9NQVNTX1hGX2MKICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgYXR0cmlidXRpb25zCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xuYW1lIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IHAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBzIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbyB8IGAgIkdFTkUiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjIHwgYCAiIyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TZXRQYXRod2F5cyAoVGVzdCAjIDEpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggYXR0cmlidXRlcy5TZXRQYXRod2F5cyAtY3AgIjIiIC1zZXAgInwiIC1jaSAiMSIgIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9jLzUvYi9kYXRhc2V0X2M1YmY5OTIzLThmMDAtNDhkYS05NDZjLWJmMGE4NDhiMTcyOC5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMC9hL2EvZGF0YXNldF8wYWE2ZmQ3YS0wMDFlLTQ5MWMtODAyNi04ZDFkMGU4YTdjZTguZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMDQvb3V0cHV0cy9kYXRhc2V0X2M2MDk1YzhhLWRmZTAtNDMwNi05ZmM0LWUzMjZkNGM2NWJlZC5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2YzNjgyZjljXzA2YTNfNDdhNV9hMzQ5XzRiYjlmYmJmNmQ0MgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDMgcmVhY3Rpb25zIHByb2Nlc3NlZAoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgY29scCB8IGAgIjIiIGAgfAogICAgICAgfCBzZXAgfCBgICJ8IiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NldFBhdGh3YXlzIChUZXN0ICMgMik8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBhdHRyaWJ1dGVzLlNldFBhdGh3YXlzIC1jcCAiMiIgLXNlcCAiICsgIiAtY2kgIjEiICAtbiAiMCIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMi9kLzgvZGF0YXNldF8yZDgzYmZjZC01NzcxLTRiMzMtYWY4Ni1lMzI0YzFmOGY3MjkuZGF0IiAtdGFiICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2IvMy84L2RhdGFzZXRfYjM4MmU1YWYtMmNlNC00MDIzLThjMTYtMWU0M2UzYWQ3OWNkLmRhdCIgLWMgIiMiIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjA3L291dHB1dHMvZGF0YXNldF82MWU1MTZjMy0zMzM3LTQ5ODktYjFmZC01N2Y0YTg2YTE5NmMuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGFubm90IHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCAKICAgICAgUGFyc2luZyBCaW9uZXR3b3JrIF83M2ExZmZmMV9hY2JkXzRhNjVfODVmZF80MDZmZTI3YzEwM2YKICAgICAgR2VuZXJhdGluZyBGbHV4IEJhbGFuY2UgQ29uc3RyYWludHMgbW9kdWxlcy4uLgogICAgICBHZW5lcmF0aW5nIFBhdGh3YXlzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgTm90ZXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICAzIHJlYWN0aW9ucyBwcm9jZXNzZWQKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbHAgfCBgICIyIiBgIHwKICAgICAgIHwgc2VwIHwgYCAiICsgIiBgIHwKICAgICAgIHwgY29saWQgfCBgICIxIiBgIHwKICAgICAgIHwgcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5Ta2lwIHwgYCAiMCIgYCB8CiAgICAgICB8IGMgfCBgICIjIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAicmRmIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1NldFJlZmVyZW5jZXMgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGF0dHJpYnV0ZXMuU2V0UmVmZXJlbmNlcyAtY3IgIjIiIC1yZWYgIkluQ2hpIiAtY2kgIjEiICAgLXQgIk1FVEFCT0xJVEUiIC1uICIwIiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8xLzgvZi9kYXRhc2V0XzE4ZjBiZTZiLTU4ODMtNGQ0ZC1hNTI3LTNjNDFmMGU2ODUxYS5kYXQiIC10YWIgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMy9jLzYvZGF0YXNldF8zYzZmZGZlNC1mMTE4LTQwNzgtOWQ3MS05YTk3ZmE0ZDEyZjAuZGF0IiAtYyAiIyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMTAvb3V0cHV0cy9kYXRhc2V0Xzg3ZjUzY2RhLTUyYTctNDIxYi05MmY2LTBiNGNmNDAwMjU3ZS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgCiAgICAgIFN0YXJ0aW5nIGZiYyB2ZXJzaW9uIDIgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgYW5ub3QgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIAogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzdlZjIyMDU1XzhhMGFfNDlkOF9iYTQ1XzBjNmEyMDMwYWFiMgogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIDIgYXR0cmlidXRpb25zCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xSZWYgfCBgICIyIiBgIHwKICAgICAgIHwgcmVmIHwgYCAiSW5DaGkiIGAgfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG8gfCBgICJNRVRBQk9MSVRFIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgYyB8IGAgIiMiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfU2lkZUNvbXBvdW5kc1NjYW4gKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIG5ldHdvcmtBbmFseXNpcy5TaWRlQ29tcG91bmRzU2NhbiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy9hLzAvOS9kYXRhc2V0X2EwOTk3YjhiLTFiOTktNGVjOC04ZDQ0LTI5ZDg4YzNlMjFhOS5kYXQiICAgLWQgIjQwMCIgICAtbSAibm8iIC1vICIvdG1wL3RtcDk5bndiNnczL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvMjEyL291dHB1dHMvZGF0YXNldF9jYTZkNzA4Ny04MzdmLTQ2NmYtOGZiZi00M2I1MWJhZTM2ZTYuZGF0IgogICAgICBgYGAKICAgICoqRXhpdCBDb2RlOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIDAKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIEVycm9yOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIEVSUk9SIFN0YXR1c0xvZ2dlciBSZWNvbmZpZ3VyYXRpb24gZmFpbGVkOiBObyBjb25maWd1cmF0aW9uIGZvdW5kIGZvciAnMzA5NDZlMDknIGF0ICdudWxsJyBpbiAnbnVsbCcKICAgICAgVmVyaWZ5aW5nIGVuYWJsZWQgUGx1Z2lucy4uLgogICAgICBQYXJzaW5nIG1vZGVsIFhmbTExNTgKICAgICAgU3RhcnRpbmcgZmJjIHZlcnNpb24gMiBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICByZWFkaW5nIFNCTUwuLi4KICAgICAgQ3JlYXRpbmcgbmV0d29yay4uLgogICAgICBTY2FuaW5nLi4uCiAgICAgIGRvbmUKICAgICAgZm91bmQgNiBzaWRlIGNvbXBvdW5kIGFtb25nIDExMDcgY29tcG91bmRzCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBzaWRlT25seSB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG5vUmVwb3J0VmFsdWUgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkZWdyZWUgfCBgICI0MDAiIGAgfAogICAgICAgfCBkZWdyZWVQcmVjZW50aWxlIHwgYCAibmFuIiBgIHwKICAgICAgIHwgZmxhZ0lub3JnYW5pYyB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGZsYWdOb0Zvcm11bGEgfCBgIGZhbHNlIGAgfAogICAgICAgfCBwYXJhbGxlbEVkZ2UgfCBgICJuYW4iIGAgfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJubyIgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9TaWRlQ29tcG91bmRzU2NhbiAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlNpZGVDb21wb3VuZHNTY2FuIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzMvYy85L2RhdGFzZXRfM2M5YzRkN2ItYzc4Yi00NjAyLTk1ZTgtMDMzNzZlNjI3YjBhLmRhdCIgIC1pZCAtZCAiNDAwIiAgIC1tICJubyIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMTQvb3V0cHV0cy9kYXRhc2V0X2VhMWQ5NDE0LTAwMWUtNDZkOS05NTAyLTczMTljOGQzZTFhOS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBmYmMgdmVyc2lvbiAyIHBsdWdpbi4uLgogICAgICBTdGFydGluZyBub3RlIHBsdWdpbi4uLgogICAgICBFbmQgUGFyc2luZyBtb2RlbCBYZm0xMTU4CgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIHJlYWRpbmcgU0JNTC4uLgogICAgICBDcmVhdGluZyBuZXR3b3JrLi4uCiAgICAgIFNjYW5pbmcuLi4KICAgICAgZG9uZQogICAgICBmb3VuZCA2IHNpZGUgY29tcG91bmQgYW1vbmcgMTEwNyBjb21wb3VuZHMKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IHNpZGVPbmx5IHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbm9SZXBvcnRWYWx1ZSB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgZGVncmVlIHwgYCAiNDAwIiBgIHwKICAgICAgIHwgZGVncmVlUHJlY2VudGlsZSB8IGAgIm5hbiIgYCB8CiAgICAgICB8IGZsYWdJbm9yZ2FuaWMgfCBgIGZhbHNlIGAgfAogICAgICAgfCBmbGFnTm9Gb3JtdWxhIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgcGFyYWxsZWxFZGdlIHwgYCAibmFuIiBgIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAibm8iIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCiogPGRldGFpbHMgY2xhc3M9InJjb3JuZXJzIGxpZ2h0LWdyZWVuIj48c3VtbWFyeSBjbGFzcz0ibGlnaHQtZ3JlZW4iPiYjOTk4OTsgbWV0NGpfVGFiMlNibWwgKFRlc3QgIyAxKTwvc3VtbWFyeT48ZGl2IGNsYXNzPSJwYWRkZWQiPgoKICAgICoqQ29tbWFuZCBMaW5lOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIHNoIC91c3IvYmluL21ldDRqLnNoIGNvbnZlcnQuVGFiMlNibWwgLWNpICIxIiAtY2YgIjIiICAgLWUgIl9iIiAtaXJyICItLT4iIC1yZXYgIjw9PT4iIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2UvNC8wL2RhdGFzZXRfZTQwNTJhZjgtYjYzZC00ZjhhLWFhNzYtYzdiOWNmMmRhMDFkLmRhdCIgLWlkICJOQSIgIC1kY3B0ICJjIiAtbiAiMCIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMTYvb3V0cHV0cy9kYXRhc2V0X2NjNzRiYzY4LTE2OGUtNDA3My05NjMzLWYzNmU2N2Q3NjRkNS5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgXzY3NmZmMzgzXzUyYjhfNGY0Zl9iZjVkXzVmMjZjODUzNTBkNwogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBlIHwgYCAiX2IiIGAgfAogICAgICAgfCBpIHwgYCAiLS0+IiBgIHwKICAgICAgIHwgciB8IGAgIjw9PT4iIGAgfAogICAgICAgfCBpZCB8IGAgIk5BIiBgIHwKICAgICAgIHwgY3JlYXRlQ29tcGFydG1lbnQgfCBgIGZhbHNlIGAgfAogICAgICAgfCBkZWZhdWx0Q29tcGFydG1lbnQgfCBgICJjIiBgIHwKICAgICAgIHwgblNraXAgfCBgICIwIiBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXA5OW53YjZ3My9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAidGFidWxhciIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9UYWIyU2JtbCAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggY29udmVydC5UYWIyU2JtbCAtY2kgIjIiIC1jZiAiMyIgICAtZSAiX2IiIC1pcnIgIi0tPiIgLXJldiAiPD09PiIgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOC85LzYvZGF0YXNldF84OTZkODdiOS1mODk3LTQ0ZDctYTRiZS1jMWU5ZGI2ZDM3ZWIuZGF0IiAtaWQgIk5BIiAgLWRjcHQgImMiIC1uICIwIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIxOC9vdXRwdXRzL2RhdGFzZXRfYWVjNjQxZjMtZjQ4Mi00NTZmLTkxOTQtOGExODNlOWViOGE1LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfNGMxMTQyNWJfMjY2ZV80YzBlX2EwYTNfYWNkZTJmMTgzNTA2CiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgVGhlIGlucHV0IGZpbGUgbG9va3MgZ29vZCBhbmQgY29udGFpbnMgNyByZWFjdGlvbnMKICAgICAgNyByZWFjdGlvbnMsIDggbWV0YWJvbGl0ZXMgYW5kIDIgY29tcGFydG1lbnRzIGNyZWF0ZWQKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGlkIHwgYCAiMiIgYCB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIzIiBgIHwKICAgICAgIHwgcnAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBtcCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGUgfCBgICJfYiIgYCB8CiAgICAgICB8IGkgfCBgICItLT4iIGAgfAogICAgICAgfCByIHwgYCAiPD09PiIgYCB8CiAgICAgICB8IGlkIHwgYCAiTkEiIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICMgMyk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMSIgLWNmICIyIiAgIC1lICJfYiIgLWlyciAiLT4iIC1yZXYgIj0iIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2UvNC9hL2RhdGFzZXRfZTRhZGI0OTYtZDllNC00NmVlLWI1ZGMtNjk2NjJiNjllYTQzLmRhdCIgLWlkICJOQSIgIC1kY3B0ICJjIiAtbiAiMCIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMjAvb3V0cHV0cy9kYXRhc2V0X2IwY2IxNDk1LTAyNmYtNGU0MC1hYTAwLTIzNjQzMmRmYjVlMi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgX2UwMzE5ZjdkX2Q2NjdfNDJlMF9hODM0X2IzODkwZDAzNmM2NAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBOb3Rlcy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIEFubm90YXRpb25zLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBlIHwgYCAiX2IiIGAgfAogICAgICAgfCBpIHwgYCAiLT4iIGAgfAogICAgICAgfCByIHwgYCAiPSIgYCB8CiAgICAgICB8IGlkIHwgYCAiTkEiIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICMgNCk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMSIgLWNmICIyIiAtcnAgLW1wIC1lICJfZSIgLWlyciAiLS0+IiAtcmV2ICI8PT0+IiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy8yLzIvOS9kYXRhc2V0XzIyOTQ4ZDI0LTNhOGUtNDhlNC1hN2Q1LWE1ZTgzZDQ4ODY5OC5kYXQiIC1pZCAiTkEiIC1jcHQgLWRjcHQgImMiIC1uICIwIiAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIyMi9vdXRwdXRzL2RhdGFzZXRfZDM4MDc1MTEtMDdmZS00ZDNjLTk0ZDktNTMxZGJmZjVjZDliLmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFBhcnNpbmcgQmlvbmV0d29yayBfNTE4ZWU5NTBfZWE2N180MTJmXzhiNGFfZWFlYTM1MmVlODkyCiAgICAgIEdlbmVyYXRpbmcgRmx1eCBCYWxhbmNlIENvbnN0cmFpbnRzIG1vZHVsZXMuLi4KICAgICAgR2VuZXJhdGluZyBQYXRod2F5cy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgTW9kZWwgQW5ub3RhdGlvbnMuLi4KCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgVGhlIGlucHV0IGZpbGUgbG9va3MgZ29vZCBhbmQgY29udGFpbnMgNyByZWFjdGlvbnMKICAgICAgNyByZWFjdGlvbnMsIDggbWV0YWJvbGl0ZXMgYW5kIDIgY29tcGFydG1lbnRzIGNyZWF0ZWQKCiAgICAgIGBgYAogICAgKipUcmFjZWJhY2s6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgCiAgICAgIGBgYAogICAqKkpvYiBQYXJhbWV0ZXJzOioqCgogICAqICAgfCBKb2IgcGFyYW1ldGVyIHwgUGFyYW1ldGVyIHZhbHVlIHwKICAgICAgIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8CiAgICAgICB8IGNvbGlkIHwgYCAiMSIgYCB8CiAgICAgICB8IGNvbGZvcm11bGEgfCBgICIyIiBgIHwKICAgICAgIHwgcnAgfCBgIHRydWUgYCB8CiAgICAgICB8IG1wIHwgYCB0cnVlIGAgfAogICAgICAgfCBlIHwgYCAiX2UiIGAgfAogICAgICAgfCBpIHwgYCAiLS0+IiBgIHwKICAgICAgIHwgciB8IGAgIjw9PT4iIGAgfAogICAgICAgfCBpZCB8IGAgIk5BIiBgIHwKICAgICAgIHwgY3JlYXRlQ29tcGFydG1lbnQgfCBgIHRydWUgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RhYjJTYm1sIChUZXN0ICMgNSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBjb252ZXJ0LlRhYjJTYm1sIC1jaSAiMSIgLWNmICIyIiAgIC1lICJfYiIgLWlyciAiLS0+IiAtcmV2ICI8PT0+IiAtaSAiL3RtcC90bXA5OW53YjZ3My9maWxlcy81LzQvNi9kYXRhc2V0XzU0NjYyNWI3LThlMTgtNDgxYy04MGYxLTc3MDdjOTRjYmMzYi5kYXQiIC1pZCAibXlNb2RlbCIgIC1kY3B0ICJjIiAtbiAiMCIgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMjQvb3V0cHV0cy9kYXRhc2V0X2Q2ZDE4NWYzLWQyOWQtNDZjZS1hMTZmLTI0YTQyN2RmZDNhNi5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBQYXJzaW5nIEJpb25ldHdvcmsgbXlNb2RlbAogICAgICBHZW5lcmF0aW5nIEZsdXggQmFsYW5jZSBDb25zdHJhaW50cyBtb2R1bGVzLi4uCiAgICAgIEdlbmVyYXRpbmcgUGF0aHdheXMuLi4KICAgICAgR2VuZXJhdGluZyBNb2RlbCBBbm5vdGF0aW9ucy4uLgogICAgICBHZW5lcmF0aW5nIE1vZGVsIE5vdGVzLi4uCgogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIExhdW5jaCBtZXQ0ai10b29sYm94CiAgICAgIFRoZSBpbnB1dCBmaWxlIGxvb2tzIGdvb2QgYW5kIGNvbnRhaW5zIDcgcmVhY3Rpb25zCiAgICAgIDcgcmVhY3Rpb25zLCA4IG1ldGFib2xpdGVzIGFuZCAyIGNvbXBhcnRtZW50cyBjcmVhdGVkCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBjb2xpZCB8IGAgIjEiIGAgfAogICAgICAgfCBjb2xmb3JtdWxhIHwgYCAiMiIgYCB8CiAgICAgICB8IHJwIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgbXAgfCBgIGZhbHNlIGAgfAogICAgICAgfCBlIHwgYCAiX2IiIGAgfAogICAgICAgfCBpIHwgYCAiLS0+IiBgIHwKICAgICAgIHwgciB8IGAgIjw9PT4iIGAgfAogICAgICAgfCBpZCB8IGAgIm15TW9kZWwiIGAgfAogICAgICAgfCBjcmVhdGVDb21wYXJ0bWVudCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGRlZmF1bHRDb21wYXJ0bWVudCB8IGAgImMiIGAgfAogICAgICAgfCBuU2tpcCB8IGAgIjAiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJ0YWJ1bGFyIiBgIHwKCgoKICAgIDwvZGl2PjwvZGV0YWlscz4KCgoqIDxkZXRhaWxzIGNsYXNzPSJyY29ybmVycyBsaWdodC1ncmVlbiI+PHN1bW1hcnkgY2xhc3M9ImxpZ2h0LWdyZWVuIj4mIzk5ODk7IG1ldDRqX1RvcG9sb2dpY2FsUGF0aHdheUFuYWx5c2lzIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBzaCAvdXNyL2Jpbi9tZXQ0ai5zaCBuZXR3b3JrQW5hbHlzaXMuVG9wb2xvZ2ljYWxQYXRod2F5QW5hbHlzaXMgLWkgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvMi9mL2EvZGF0YXNldF8yZmFiZjg3Mi05ZmQ2LTRkNDUtYjA4My02NGQxN2I1ZTdkNjcuZGF0IiAtc2MgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvOC8wLzIvZGF0YXNldF84MDI5MDQ3Yi03YmFlLTQ1NjItOTQ5YS03NzllMWIwMGRkZjguZGF0IiAtbWMgIm5vIiAgIC1ub2kgIi90bXAvdG1wOTlud2I2dzMvZmlsZXMvNi8xLzkvZGF0YXNldF82MTk3ZTMyZi1hZDJiLTRiZDgtOWUyNS05ZDgzOTQ3OTIwN2UuZGF0IiAgLW8gIi90bXAvdG1wOTlud2I2dzMvam9iX3dvcmtpbmdfZGlyZWN0b3J5LzAwMC8yMjgvb3V0cHV0cy9kYXRhc2V0XzRhZGFhMzE1LTNjODgtNDdmYi04MGE1LTFjODM5MWQ3MDczYy5kYXQiCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgRXJyb3I6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgRVJST1IgU3RhdHVzTG9nZ2VyIFJlY29uZmlndXJhdGlvbiBmYWlsZWQ6IE5vIGNvbmZpZ3VyYXRpb24gZm91bmQgZm9yICczMDk0NmUwOScgYXQgJ251bGwnIGluICdudWxsJwogICAgICBWZXJpZnlpbmcgZW5hYmxlZCBQbHVnaW5zLi4uCiAgICAgIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICBTdGFydGluZyBncm91cHMgcGx1Z2luLi4uCiAgICAgIFN0YXJ0aW5nIG5vdGUgcGx1Z2luLi4uCiAgICAgIEVuZCBQYXJzaW5nIG1vZGVsIFhmbTExNTgKCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgTGF1bmNoIG1ldDRqLXRvb2xib3gKICAgICAgUmVhZGluZyBTQk1MLi4uIERvbmUuCgoKICAgICAgQnVpbGRpbmcgZ3JhcGguLi5SZW1vdmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICBSZWFkIGZpbGUgY29udGFpbmluZyBzaWRlIGNvbXBvdW5kcy4uLgogICAgICA2IGNvbXBvdW5kcyByZW1vdmVkLgogICAgICAgTmV0d29yayBzdWNjZXNzZnVsbHkgY3JlYXRlZC4KCgogICAgICBJbXBvcnRpbmcgbm9kZXMgb2YgaW50ZXJlc3QKICAgICAgRG9uZS4KICAgICAgQ29tcHV0aW5nIFBhdGh3YXkgdG9wb2xvZ3kgQW5hbHlzaXMuLi4gKG1heSB0YWtlIGEgd2hpbGUpCiAgICAgIERvbmUuCiAgICAgIEV4cG9ydGluZy4uLkRvbmUuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBtZXJnaW5nU3RyYXQgfCBgICJubyIgYCB8CiAgICAgICB8IHJlbW92ZUlzb2xhdGVkIHwgYCBmYWxzZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IG91dCB8IGAgZmFsc2UgYCB8CiAgICAgICB8IGNocm9tSW5mbyB8IGAgIi90bXAvdG1wOTlud2I2dzMvZ2FsYXh5LWRldi90b29sLWRhdGEvc2hhcmVkL3Vjc2MvY2hyb20vPy5sZW4iIGAgfAogICAgICAgfCBkYmtleSB8IGAgIj8iIGAgfAogICAgICAgfCBcX1xfaW5wdXRcX2V4dCB8IGAgInJkZiIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBtZXQ0al9Ub3BvbG9naWNhbFBhdGh3YXlBbmFseXNpcyAoVGVzdCAjIDIpPC9zdW1tYXJ5PjxkaXYgY2xhc3M9InBhZGRlZCI+CgogICAgKipDb21tYW5kIExpbmU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgc2ggL3Vzci9iaW4vbWV0NGouc2ggbmV0d29ya0FuYWx5c2lzLlRvcG9sb2dpY2FsUGF0aHdheUFuYWx5c2lzIC1pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzkvNS82L2RhdGFzZXRfOTU2Yzk2Y2EtYmMzOS00OTY1LWFhNDgtODAwZjA4MzQ1MGU5LmRhdCIgLXNjICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzLzYvNC9iL2RhdGFzZXRfNjRiZDdmZTEtYzQ4Yy00NGIzLWE4ODgtZWU4YzUxZWY3OWJiLmRhdCIgLW1jICJieV9pZCIgLXJpIC11biAtbm9pICIvdG1wL3RtcDk5bndiNnczL2ZpbGVzL2QvOS9jL2RhdGFzZXRfZDljZjE3MGYtNDM3OS00Y2E3LWI5ZjEtNGExOWFkYTRiMzEzLmRhdCIgLW91dCAtbyAiL3RtcC90bXA5OW53YjZ3My9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzIzMi9vdXRwdXRzL2RhdGFzZXRfNGRiYzg0NjItNWZkZS00MTAwLTgxMWQtMjEyYmFiODVhNTE5LmRhdCIKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBFcnJvcjoqKgoKICAgICogYGBgY29uc29sZQogICAgICBFUlJPUiBTdGF0dXNMb2dnZXIgUmVjb25maWd1cmF0aW9uIGZhaWxlZDogTm8gY29uZmlndXJhdGlvbiBmb3VuZCBmb3IgJzMwOTQ2ZTA5JyBhdCAnbnVsbCcgaW4gJ251bGwnCiAgICAgIFZlcmlmeWluZyBlbmFibGVkIFBsdWdpbnMuLi4KICAgICAgUGFyc2luZyBtb2RlbCBYZm0xMTU4CiAgICAgIFN0YXJ0aW5nIGdyb3VwcyBwbHVnaW4uLi4KICAgICAgU3RhcnRpbmcgbm90ZSBwbHVnaW4uLi4KICAgICAgRW5kIFBhcnNpbmcgbW9kZWwgWGZtMTE1OAogICAgICAxMiBpc29sYXRlZCBub2RlcyByZW1vdmVkIAoKICAgICAgYGBgCiAgICAqKlN0YW5kYXJkIE91dHB1dDoqKgoKICAgICogYGBgY29uc29sZQogICAgICBMYXVuY2ggbWV0NGotdG9vbGJveAogICAgICBSZWFkaW5nIFNCTUwuLi4gRG9uZS4KCgogICAgICBCdWlsZGluZyBncmFwaC4uLlJlbW92aW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIFJlYWQgZmlsZSBjb250YWluaW5nIHNpZGUgY29tcG91bmRzLi4uCiAgICAgIDYgY29tcG91bmRzIHJlbW92ZWQuCiAgICAgIENyZWF0ZSBVbmRpcmVjdGVkLi4uIERvbmUuCiAgICAgIE1lcmdpbmcgY29tcGFydG1lbnRzLi4uIERvbmUuCiAgICAgIFJlbW92ZSBpc29sYXRlZCBub2Rlcy4uLgogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9jaG9saW5lCiAgICAgIAlyZW1vdmluZyBzbl9HbHljZXJvXzNfcGhvc3Bob2V0aGFub2xhbWluZQogICAgICAJcmVtb3ZpbmcgUDFfUDRfQmlzXzVfX2FkZW5vc3lsX190ZXRyYXBob3NwaGF0ZQogICAgICAJcmVtb3ZpbmcgbWV0aGFuZXN1bGZvbmF0ZQogICAgICAJcmVtb3ZpbmcgTV9tZXRfRF9jCiAgICAgIAlyZW1vdmluZyBHbHljZXJvcGhvc3Bob3NlcmluZQogICAgICAJcmVtb3ZpbmcgRF9HbHljZXJhbGRlaHlkZQogICAgICAJcmVtb3ZpbmcgR2x5Y2Vyb3Bob3NwaG9nbHljZXJvbAogICAgICAJcmVtb3Zpbmcgc25fR2x5Y2Vyb18zX3Bob3NwaG9fMV9pbm9zaXRvbAogICAgICAJcmVtb3ZpbmcgUDFfUDVfQmlzXzVfX2FkZW5vc3lsX19wZW50YXBob3NwaGF0ZQogICAgICAJcmVtb3ZpbmcgTV9zX2MKICAgICAgCXJlbW92aW5nIE1fY3lzX0RfYwogICAgICAgRG9uZS4KICAgICAgIE5ldHdvcmsgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuCgoKICAgICAgSW1wb3J0aW5nIG5vZGVzIG9mIGludGVyZXN0CiAgICAgIERvbmUuCiAgICAgIENvbXB1dGluZyBQYXRod2F5IHRvcG9sb2d5IEFuYWx5c2lzLi4uIChtYXkgdGFrZSBhIHdoaWxlKQogICAgICBEb25lLgogICAgICBFeHBvcnRpbmcuLi5Eb25lLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgbWVyZ2luZ1N0cmF0IHwgYCAiYnlfaWQiIGAgfAogICAgICAgfCByZW1vdmVJc29sYXRlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgd2VpZ2h0RmlsZSB8IGAgTm9uZSBgIHwKICAgICAgIHwgdW5kaXJlY3RlZCB8IGAgdHJ1ZSBgIHwKICAgICAgIHwgb3V0IHwgYCB0cnVlIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDk5bndiNnczL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJyZGYiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCjwvZGV0YWlscz4K')); </script> </body> </html> \ No newline at end of file