Back to Templates
SigNoz logo

SigNoz

vv0.97.1

SigNoz is an open-source Datadog or New Relic alternative. Get APM, logs,traces, metrics, exceptions, & alerts in a single tool.

Deploy on Notploy

How to deploy

Deploy SigNoz on Notploy

  1. Install Notploy on your server if you haven't already.
  2. In your Notploy panel, open a project and click Create Service → Template.
  3. Search for SigNoz and click Create — Notploy configures domains, environment variables, and volumes for you.

Alternatively, create a Compose service, go to Advanced → Import from Base64, and paste this payload:

base64
ewogICJjb21wb3NlIjogIngtY29tbW9uOiAmY29tbW9uXG4gIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gIGxvZ2dpbmc6XG4gICAgb3B0aW9uczpcbiAgICAgIG1heC1zaXplOiA1MG1cbiAgICAgIG1heC1maWxlOiBcIjNcIlxueC1jbGlja2hvdXNlLWRlZmF1bHRzOiAmY2xpY2tob3VzZS1kZWZhdWx0c1xuICAhIW1lcmdlIDw8OiAqY29tbW9uXG4gIGltYWdlOiBjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNlxuICB0dHk6IHRydWVcbiAgbGFiZWxzOlxuICAgIHNpZ25vei5pby9zY3JhcGU6IFwidHJ1ZVwiXG4gICAgc2lnbm96LmlvL3BvcnQ6IFwiOTM2M1wiXG4gICAgc2lnbm96LmlvL3BhdGg6IFwiL21ldHJpY3NcIlxuICBkZXBlbmRzX29uOlxuICAgIGluaXQtY2xpY2tob3VzZTpcbiAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5XG4gICAgem9va2VlcGVyLTE6XG4gICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICBoZWFsdGhjaGVjazpcbiAgICB0ZXN0OlxuICAgICAgLSBDTURcbiAgICAgIC0gd2dldFxuICAgICAgLSAtLXNwaWRlclxuICAgICAgLSAtcVxuICAgICAgLSAwLjAuMC4wOjgxMjMvcGluZ1xuICAgIGludGVydmFsOiAzMHNcbiAgICB0aW1lb3V0OiA1c1xuICAgIHJldHJpZXM6IDNcbiAgdWxpbWl0czpcbiAgICBucHJvYzogNjU1MzVcbiAgICBub2ZpbGU6XG4gICAgICBzb2Z0OiAyNjIxNDRcbiAgICAgIGhhcmQ6IDI2MjE0NFxuICBlbnZpcm9ubWVudDpcbiAgICAtIENMSUNLSE9VU0VfU0tJUF9VU0VSX1NFVFVQPTFcbngtem9va2VlcGVyLWRlZmF1bHRzOiAmem9va2VlcGVyLWRlZmF1bHRzXG4gICEhbWVyZ2UgPDw6ICpjb21tb25cbiAgaW1hZ2U6IHNpZ25vei96b29rZWVwZXI6My43LjFcbiAgdXNlcjogcm9vdFxuICBsYWJlbHM6XG4gICAgc2lnbm96LmlvL3NjcmFwZTogXCJ0cnVlXCJcbiAgICBzaWdub3ouaW8vcG9ydDogXCI5MTQxXCJcbiAgICBzaWdub3ouaW8vcGF0aDogXCIvbWV0cmljc1wiXG4gIGhlYWx0aGNoZWNrOlxuICAgIHRlc3Q6XG4gICAgICAtIENNRC1TSEVMTFxuICAgICAgLSBjdXJsIC1zIC1tIDIgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2NvbW1hbmRzL3J1b2sgfCBncmVwIGVycm9yIHwgZ3JlcCBudWxsXG4gICAgaW50ZXJ2YWw6IDMwc1xuICAgIHRpbWVvdXQ6IDVzXG4gICAgcmV0cmllczogM1xueC1kYi1kZXBlbmQ6ICZkYi1kZXBlbmRcbiAgISFtZXJnZSA8PDogKmNvbW1vblxuICBkZXBlbmRzX29uOlxuICAgIGNsaWNraG91c2U6XG4gICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIHNjaGVtYS1taWdyYXRvci1zeW5jOlxuICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHlcbnNlcnZpY2VzOlxuICBpbml0LWNsaWNraG91c2U6XG4gICAgISFtZXJnZSA8PDogKmNvbW1vblxuICAgIGltYWdlOiBjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNlxuICAgIGNvbW1hbmQ6XG4gICAgICAtIGJhc2hcbiAgICAgIC0gLWNcbiAgICAgIC0gfFxuICAgICAgICB2ZXJzaW9uPVwidjAuMC4xXCJcbiAgICAgICAgbm9kZV9vcz0kJCh1bmFtZSAtcyB8IHRyICdbOnVwcGVyOl0nICdbOmxvd2VyOl0nKVxuICAgICAgICBub2RlX2FyY2g9JCQodW5hbWUgLW0gfCBzZWQgcy9hYXJjaDY0L2FybTY0LyB8IHNlZCBzL3g4Nl82NC9hbWQ2NC8pXG4gICAgICAgIGVjaG8gXCJGZXRjaGluZyBoaXN0b2dyYW0tYmluYXJ5IGZvciAkJHtub2RlX29zfS8kJHtub2RlX2FyY2h9XCJcbiAgICAgICAgY2QgL3RtcFxuICAgICAgICB3Z2V0IC1PIGhpc3RvZ3JhbS1xdWFudGlsZS50YXIuZ3ogXCJodHRwczovL2dpdGh1Yi5jb20vU2lnTm96L3NpZ25vei9yZWxlYXNlcy9kb3dubG9hZC9oaXN0b2dyYW0tcXVhbnRpbGUlMkYkJHt2ZXJzaW9ufS9oaXN0b2dyYW0tcXVhbnRpbGVfJCR7bm9kZV9vc31fJCR7bm9kZV9hcmNofS50YXIuZ3pcIlxuICAgICAgICB0YXIgLXh2emYgaGlzdG9ncmFtLXF1YW50aWxlLnRhci5nelxuICAgICAgICBtdiBoaXN0b2dyYW0tcXVhbnRpbGUgL3Zhci9saWIvY2xpY2tob3VzZS91c2VyX3NjcmlwdHMvaGlzdG9ncmFtUXVhbnRpbGVcbiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS91c2VyX3NjcmlwdHM6L3Zhci9saWIvY2xpY2tob3VzZS91c2VyX3NjcmlwdHMvXG4gIHpvb2tlZXBlci0xOlxuICAgICEhbWVyZ2UgPDw6ICp6b29rZWVwZXItZGVmYXVsdHNcbiAgICB2b2x1bWVzOlxuICAgICAgLSB6b29rZWVwZXItMTovYml0bmFtaS96b29rZWVwZXJcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gWk9PX1NFUlZFUl9JRD0xXG4gICAgICAtIEFMTE9XX0FOT05ZTU9VU19MT0dJTj15ZXNcbiAgICAgIC0gWk9PX0FVVE9QVVJHRV9JTlRFUlZBTD0xXG4gICAgICAtIFpPT19FTkFCTEVfUFJPTUVUSEVVU19NRVRSSUNTPXllc1xuICAgICAgLSBaT09fUFJPTUVUSEVVU19NRVRSSUNTX1BPUlRfTlVNQkVSPTkxNDFcbiAgY2xpY2tob3VzZTpcbiAgICAhIW1lcmdlIDw8OiAqY2xpY2tob3VzZS1kZWZhdWx0c1xuICAgIGhvc3RuYW1lOiBjbGlja2hvdXNlXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS9jb25maWcueG1sOi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvY29uZmlnLnhtbFxuICAgICAgLSAuLi9maWxlcy9jbGlja2hvdXNlL3VzZXJfc2NyaXB0czovdmFyL2xpYi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy9cbiAgICAgIC0gLi4vZmlsZXMvY2xpY2tob3VzZS9jbHVzdGVyLnhtbDovZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy5kL2NsdXN0ZXIueG1sXG4gICAgICAtIC4uL2ZpbGVzL2NsaWNraG91c2UvZG9ja2VyX3JlbGF0ZWRfY29uZmlnLnhtbDovZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy5kL2RvY2tlcl9yZWxhdGVkX2NvbmZpZy54bWxcbiAgICAgIC0gY2xpY2tob3VzZTovdmFyL2xpYi9jbGlja2hvdXNlL1xuICBzaWdub3o6XG4gICAgISFtZXJnZSA8PDogKmRiLWRlcGVuZFxuICAgIGltYWdlOiBzaWdub3ovc2lnbm96OnYwLjk3LjFcbiAgICBjb21tYW5kOlxuICAgICAgLSAtLWNvbmZpZz0vcm9vdC9jb25maWcvcHJvbWV0aGV1cy55bWxcbiAgICBleHBvc2U6XG4gICAgICAtIFwiODA4MFwiXG4gICAgdm9sdW1lczpcbiAgICAgIC0gLi4vZmlsZXMvc2lnbm96L3Byb21ldGhldXMueW1sOi9yb290L2NvbmZpZy9wcm9tZXRoZXVzLnltbFxuICAgICAgLSBzcWxpdGU6L3Zhci9saWIvc2lnbm96L1xuICAgIGVudmlyb25tZW50OlxuICAgICAgLSBTSUdOT1pfQUxFUlRNQU5BR0VSX1BST1ZJREVSPXNpZ25velxuICAgICAgLSBTSUdOT1pfVEVMRU1FVFJZU1RPUkVfQ0xJQ0tIT1VTRV9EU049dGNwOi8vY2xpY2tob3VzZTo5MDAwXG4gICAgICAtIFNJR05PWl9TUUxTVE9SRV9TUUxJVEVfUEFUSD0vdmFyL2xpYi9zaWdub3ovc2lnbm96LmRiXG4gICAgICAtIFNUT1JBR0U9Y2xpY2tob3VzZVxuICAgICAgLSBURUxFTUVUUllfRU5BQkxFRD10cnVlXG4gICAgICAtIERFUExPWU1FTlRfVFlQRT1kb2NrZXItc3RhbmRhbG9uZS1hbWRcbiAgICAgIC0gRE9UX01FVFJJQ1NfRU5BQkxFRD10cnVlXG4gICAgICAtIFNJR05PWl9KV1RfU0VDUkVUPSR7U0lHTk9aX0pXVF9TRUNSRVR9XG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OlxuICAgICAgICAtIENNRFxuICAgICAgICAtIHdnZXRcbiAgICAgICAgLSAtLXNwaWRlclxuICAgICAgICAtIC1xXG4gICAgICAgIC0gbG9jYWxob3N0OjgwODAvYXBpL3YxL2hlYWx0aFxuICAgICAgaW50ZXJ2YWw6IDMwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDNcbiAgb3RlbC1jb2xsZWN0b3I6XG4gICAgISFtZXJnZSA8PDogKmRiLWRlcGVuZFxuICAgIGltYWdlOiBzaWdub3ovc2lnbm96LW90ZWwtY29sbGVjdG9yOnYwLjEyOS43XG4gICAgY29tbWFuZDpcbiAgICAgIC0gLS1jb25maWc9L2V0Yy9vdGVsLWNvbGxlY3Rvci1jb25maWcueWFtbFxuICAgIHZvbHVtZXM6XG4gICAgICAtIC4uL2ZpbGVzL2NvbGxlY3Rvci9vdGVsLWNvbGxlY3Rvci1jb25maWcueWFtbDovZXRjL290ZWwtY29sbGVjdG9yLWNvbmZpZy55YW1sXG4gICAgZXhwb3NlOlxuICAgICAgLSBcIjQzMTdcIiAjIE9UTFAgZ1JQQyByZWNlaXZlclxuICAgICAgLSBcIjQzMThcIiAjIE9UTFAgSFRUUCByZWNlaXZlclxuICAgIGRlcGVuZHNfb246XG4gICAgICBzaWdub3o6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gIHNjaGVtYS1taWdyYXRvci1zeW5jOlxuICAgICEhbWVyZ2UgPDw6ICpjb21tb25cbiAgICBpbWFnZTogc2lnbm96L3NpZ25vei1zY2hlbWEtbWlncmF0b3I6djAuMTI5LjdcbiAgICBjb21tYW5kOlxuICAgICAgLSBzeW5jXG4gICAgICAtIC0tZHNuPXRjcDovL2NsaWNraG91c2U6OTAwMFxuICAgICAgLSAtLXVwPVxuICAgIGRlcGVuZHNfb246XG4gICAgICBjbGlja2hvdXNlOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgIHJlc3RhcnQ6IG9uLWZhaWx1cmVcbiAgc2NoZW1hLW1pZ3JhdG9yLWFzeW5jOlxuICAgICEhbWVyZ2UgPDw6ICpkYi1kZXBlbmRcbiAgICBpbWFnZTogc2lnbm96L3NpZ25vei1zY2hlbWEtbWlncmF0b3I6djAuMTI5LjdcbiAgICBjb21tYW5kOlxuICAgICAgLSBhc3luY1xuICAgICAgLSAtLWRzbj10Y3A6Ly9jbGlja2hvdXNlOjkwMDBcbiAgICAgIC0gLS11cD1cbiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlXG52b2x1bWVzOlxuICBjbGlja2hvdXNlOlxuICAgIG5hbWU6IHNpZ25vei1jbGlja2hvdXNlXG4gIHNxbGl0ZTpcbiAgICBuYW1lOiBzaWdub3otc3FsaXRlXG4gIHpvb2tlZXBlci0xOlxuICAgIG5hbWU6IHNpZ25vei16b29rZWVwZXItMSIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5vdGVsX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbmp3dF9zZWNyZXQgPSBcIiR7cGFzc3dvcmQ6NjR9XCJcblxuW2NvbmZpZ11cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInNpZ25velwiXG5wb3J0ID0gODA4MFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxucGF0aCA9IFwiL1wiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcIm90ZWwtY29sbGVjdG9yXCJcbnBvcnQgPSA0MzE4XG5ob3N0ID0gXCIke290ZWxfZG9tYWlufVwiXG5wYXRoID0gXCIvXCJcblxuW2NvbmZpZy5lbnZdXG5TSUdOT1pfSldUX1NFQ1JFVCA9IFwiJHtqd3Rfc2VjcmV0fVwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL2NsaWNraG91c2UvY29uZmlnLnhtbFwiXG5jb250ZW50ID0gXCJcIlwiXG48P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPCEtLVxuICBOT1RFOiBVc2VyIGFuZCBxdWVyeSBsZXZlbCBzZXR0aW5ncyBhcmUgc2V0IHVwIGluIFwidXNlcnMueG1sXCIgZmlsZS5cbiAgSWYgeW91IGhhdmUgYWNjaWRlbnRhbGx5IHNwZWNpZmllZCB1c2VyLWxldmVsIHNldHRpbmdzIGhlcmUsIHNlcnZlciB3b24ndCBzdGFydC5cbiAgWW91IGNhbiBlaXRoZXIgbW92ZSB0aGUgc2V0dGluZ3MgdG8gdGhlIHJpZ2h0IHBsYWNlIGluc2lkZSBcInVzZXJzLnhtbFwiIGZpbGVcbiAgIG9yIGFkZCA8c2tpcF9jaGVja19mb3JfaW5jb3JyZWN0X3NldHRpbmdzPjE8L3NraXBfY2hlY2tfZm9yX2luY29ycmVjdF9zZXR0aW5ncz4gaGVyZS5cbi0tPlxuPGNsaWNraG91c2U+XG4gICAgPGxvZ2dlcj5cbiAgICAgICAgPCEtLSBQb3NzaWJsZSBsZXZlbHMgWzFdOlxuXG4gICAgICAgICAgLSBub25lICh0dXJucyBvZmYgbG9nZ2luZylcbiAgICAgICAgICAtIGZhdGFsXG4gICAgICAgICAgLSBjcml0aWNhbFxuICAgICAgICAgIC0gZXJyb3JcbiAgICAgICAgICAtIHdhcm5pbmdcbiAgICAgICAgICAtIG5vdGljZVxuICAgICAgICAgIC0gaW5mb3JtYXRpb25cbiAgICAgICAgICAtIGRlYnVnXG4gICAgICAgICAgLSB0cmFjZVxuICAgICAgICAgIC0gdGVzdCAobm90IGZvciBwcm9kdWN0aW9uIHVzYWdlKVxuXG4gICAgICAgICAgICBbMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9wb2NvcHJvamVjdC9wb2NvL2Jsb2IvcG9jby0xLjkuNC1yZWxlYXNlL0ZvdW5kYXRpb24vaW5jbHVkZS9Qb2NvL0xvZ2dlci5oI0wxMDUtTDExNFxuICAgICAgICAtLT5cbiAgICAgICAgPGxldmVsPmluZm9ybWF0aW9uPC9sZXZlbD5cbiAgICAgICAgPGZvcm1hdHRpbmc+XG4gICAgICAgICAgICA8dHlwZT5qc29uPC90eXBlPlxuICAgICAgICA8L2Zvcm1hdHRpbmc+XG4gICAgICAgIDxsb2c+L3Zhci9sb2cvY2xpY2tob3VzZS1zZXJ2ZXIvY2xpY2tob3VzZS1zZXJ2ZXIubG9nPC9sb2c+XG4gICAgICAgIDxlcnJvcmxvZz4vdmFyL2xvZy9jbGlja2hvdXNlLXNlcnZlci9jbGlja2hvdXNlLXNlcnZlci5lcnIubG9nPC9lcnJvcmxvZz5cbiAgICAgICAgPCEtLSBSb3RhdGlvbiBwb2xpY3lcbiAgICAgICAgICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BvY29wcm9qZWN0L3BvY28vYmxvYi9wb2NvLTEuOS40LXJlbGVhc2UvRm91bmRhdGlvbi9pbmNsdWRlL1BvY28vRmlsZUNoYW5uZWwuaCNMNTQtTDg1XG4gICAgICAgICAgLS0+XG4gICAgICAgIDxzaXplPjEwMDBNPC9zaXplPlxuICAgICAgICA8Y291bnQ+MTA8L2NvdW50PlxuICAgICAgICA8IS0tIDxjb25zb2xlPjE8L2NvbnNvbGU+IC0tPiA8IS0tIERlZmF1bHQgYmVoYXZpb3IgaXMgYXV0b2RldGVjdGlvbiAobG9nIHRvIGNvbnNvbGUgaWYgbm90IGRhZW1vbiBtb2RlIGFuZCBpcyB0dHkpIC0tPlxuXG4gICAgICAgIDwhLS0gUGVyIGxldmVsIG92ZXJyaWRlcyAobGVnYWN5KTpcblxuICAgICAgICBGb3IgZXhhbXBsZSB0byBzdXBwcmVzcyBsb2dnaW5nIG9mIHRoZSBDb25maWdSZWxvYWRlciB5b3UgY2FuIHVzZTpcbiAgICAgICAgTk9URTogbGV2ZWxzLmxvZ2dlciBpcyByZXNlcnZlZCwgc2VlIGJlbG93LlxuICAgICAgICAtLT5cbiAgICAgICAgPCEtLVxuICAgICAgICA8bGV2ZWxzPlxuICAgICAgICAgIDxDb25maWdSZWxvYWRlcj5ub25lPC9Db25maWdSZWxvYWRlcj5cbiAgICAgICAgPC9sZXZlbHM+XG4gICAgICAgIC0tPlxuXG4gICAgICAgIDwhLS0gUGVyIGxldmVsIG92ZXJyaWRlczpcblxuICAgICAgICBGb3IgZXhhbXBsZSB0byBzdXBwcmVzcyBsb2dnaW5nIG9mIHRoZSBSQkFDIGZvciBkZWZhdWx0IHVzZXIgeW91IGNhbiB1c2U6XG4gICAgICAgIChCdXQgcGxlYXNlIG5vdGUgdGhhdCB0aGUgbG9nZ2VyIG5hbWUgbWF5YmUgY2hhbmdlZCBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbiwgZXZlbiBhZnRlciBtaW5vciB1cGdyYWRlKVxuICAgICAgICAtLT5cbiAgICAgICAgPCEtLVxuICAgICAgICA8bGV2ZWxzPlxuICAgICAgICAgIDxsb2dnZXI+XG4gICAgICAgICAgICA8bmFtZT5Db250ZXh0QWNjZXNzIChkZWZhdWx0KTwvbmFtZT5cbiAgICAgICAgICAgIDxsZXZlbD5ub25lPC9sZXZlbD5cbiAgICAgICAgICA8L2xvZ2dlcj5cbiAgICAgICAgICA8bG9nZ2VyPlxuICAgICAgICAgICAgPG5hbWU+RGF0YWJhc2VPcmRpbmFyeSAodGVzdCk8L25hbWU+XG4gICAgICAgICAgICA8bGV2ZWw+bm9uZTwvbGV2ZWw+XG4gICAgICAgICAgPC9sb2dnZXI+XG4gICAgICAgIDwvbGV2ZWxzPlxuICAgICAgICAtLT5cbiAgICA8L2xvZ2dlcj5cblxuICAgIDwhLS0gQWRkIGhlYWRlcnMgdG8gcmVzcG9uc2UgaW4gb3B0aW9ucyByZXF1ZXN0LiBPUFRJT05TIG1ldGhvZCBpcyB1c2VkIGluIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLiAtLT5cbiAgICA8IS0tIEl0IGlzIG9mZiBieSBkZWZhdWx0LiBOZXh0IGhlYWRlcnMgYXJlIG9ibGlnYXRlIGZvciBDT1JTLi0tPlxuICAgIDwhLS0gaHR0cF9vcHRpb25zX3Jlc3BvbnNlPlxuICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPG5hbWU+QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luPC9uYW1lPlxuICAgICAgICAgICAgPHZhbHVlPio8L3ZhbHVlPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgIDxuYW1lPkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnM8L25hbWU+XG4gICAgICAgICAgICA8dmFsdWU+b3JpZ2luLCB4LXJlcXVlc3RlZC13aXRoPC92YWx1ZT5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgIDxoZWFkZXI+XG4gICAgICAgICAgICA8bmFtZT5BY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzPC9uYW1lPlxuICAgICAgICAgICAgPHZhbHVlPlBPU1QsIEdFVCwgT1BUSU9OUzwvdmFsdWU+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPG5hbWU+QWNjZXNzLUNvbnRyb2wtTWF4LUFnZTwvbmFtZT5cbiAgICAgICAgICAgIDx2YWx1ZT44NjQwMDwvdmFsdWU+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgIDwvaHR0cF9vcHRpb25zX3Jlc3BvbnNlIC0tPlxuXG4gICAgPCEtLSBJdCBpcyB0aGUgbmFtZSB0aGF0IHdpbGwgYmUgc2hvd24gaW4gdGhlIGNsaWNraG91c2UtY2xpZW50LlxuICAgICAgICAgQnkgZGVmYXVsdCwgYW55dGhpbmcgd2l0aCBcInByb2R1Y3Rpb25cIiB3aWxsIGJlIGhpZ2hsaWdodGVkIGluIHJlZCBpbiBxdWVyeSBwcm9tcHQuXG4gICAgLS0+XG4gICAgPCEtLWRpc3BsYXlfbmFtZT5wcm9kdWN0aW9uPC9kaXNwbGF5X25hbWUtLT5cblxuICAgIDwhLS0gUG9ydCBmb3IgSFRUUCBBUEkuIFNlZSBhbHNvICdodHRwc19wb3J0JyBmb3Igc2VjdXJlIGNvbm5lY3Rpb25zLlxuICAgICAgICAgVGhpcyBpbnRlcmZhY2UgaXMgYWxzbyB1c2VkIGJ5IE9EQkMgYW5kIEpEQkMgZHJpdmVycyAoRGF0YUdyaXAsIERiZWF2ZXIsIC4uLilcbiAgICAgICAgIGFuZCBieSBtb3N0IG9mIHdlYiBpbnRlcmZhY2VzIChlbWJlZGRlZCBVSSwgR3JhZmFuYSwgUmVkYXNoLCAuLi4pLlxuICAgICAgLS0+XG4gICAgPGh0dHBfcG9ydD44MTIzPC9odHRwX3BvcnQ+XG5cbiAgICA8IS0tIFBvcnQgZm9yIGludGVyYWN0aW9uIGJ5IG5hdGl2ZSBwcm90b2NvbCB3aXRoOlxuICAgICAgICAgLSBjbGlja2hvdXNlLWNsaWVudCBhbmQgb3RoZXIgbmF0aXZlIENsaWNrSG91c2UgdG9vbHMgKGNsaWNraG91c2UtYmVuY2htYXJrLCBjbGlja2hvdXNlLWNvcGllcik7XG4gICAgICAgICAtIGNsaWNraG91c2Utc2VydmVyIHdpdGggb3RoZXIgY2xpY2tob3VzZS1zZXJ2ZXJzIGZvciBkaXN0cmlidXRlZCBxdWVyeSBwcm9jZXNzaW5nO1xuICAgICAgICAgLSBDbGlja0hvdXNlIGRyaXZlcnMgYW5kIGFwcGxpY2F0aW9ucyBzdXBwb3J0aW5nIG5hdGl2ZSBwcm90b2NvbFxuICAgICAgICAgKHRoaXMgcHJvdG9jb2wgaXMgYWxzbyBpbmZvcm1hbGx5IGNhbGxlZCBhcyBcInRoZSBUQ1AgcHJvdG9jb2xcIik7XG4gICAgICAgICBTZWUgYWxzbyAndGNwX3BvcnRfc2VjdXJlJyBmb3Igc2VjdXJlIGNvbm5lY3Rpb25zLlxuICAgIC0tPlxuICAgIDx0Y3BfcG9ydD45MDAwPC90Y3BfcG9ydD5cblxuICAgIDwhLS0gQ29tcGF0aWJpbGl0eSB3aXRoIE15U1FMIHByb3RvY29sLlxuICAgICAgICAgQ2xpY2tIb3VzZSB3aWxsIHByZXRlbmQgdG8gYmUgTXlTUUwgZm9yIGFwcGxpY2F0aW9ucyBjb25uZWN0aW5nIHRvIHRoaXMgcG9ydC5cbiAgICAtLT5cbiAgICA8bXlzcWxfcG9ydD45MDA0PC9teXNxbF9wb3J0PlxuXG4gICAgPCEtLSBDb21wYXRpYmlsaXR5IHdpdGggUG9zdGdyZVNRTCBwcm90b2NvbC5cbiAgICAgICAgIENsaWNrSG91c2Ugd2lsbCBwcmV0ZW5kIHRvIGJlIFBvc3RncmVTUUwgZm9yIGFwcGxpY2F0aW9ucyBjb25uZWN0aW5nIHRvIHRoaXMgcG9ydC5cbiAgICAtLT5cbiAgICA8cG9zdGdyZXNxbF9wb3J0PjkwMDU8L3Bvc3RncmVzcWxfcG9ydD5cblxuICAgIDwhLS0gSFRUUCBBUEkgd2l0aCBUTFMgKEhUVFBTKS5cbiAgICAgICAgIFlvdSBoYXZlIHRvIGNvbmZpZ3VyZSBjZXJ0aWZpY2F0ZSB0byBlbmFibGUgdGhpcyBpbnRlcmZhY2UuXG4gICAgICAgICBTZWUgdGhlIG9wZW5TU0wgc2VjdGlvbiBiZWxvdy5cbiAgICAtLT5cbiAgICA8IS0tIDxodHRwc19wb3J0Pjg0NDM8L2h0dHBzX3BvcnQ+IC0tPlxuXG4gICAgPCEtLSBOYXRpdmUgaW50ZXJmYWNlIHdpdGggVExTLlxuICAgICAgICAgWW91IGhhdmUgdG8gY29uZmlndXJlIGNlcnRpZmljYXRlIHRvIGVuYWJsZSB0aGlzIGludGVyZmFjZS5cbiAgICAgICAgIFNlZSB0aGUgb3BlblNTTCBzZWN0aW9uIGJlbG93LlxuICAgIC0tPlxuICAgIDwhLS0gPHRjcF9wb3J0X3NlY3VyZT45NDQwPC90Y3BfcG9ydF9zZWN1cmU+IC0tPlxuXG4gICAgPCEtLSBOYXRpdmUgaW50ZXJmYWNlIHdyYXBwZWQgd2l0aCBQUk9YWXYxIHByb3RvY29sXG4gICAgICAgICBQUk9YWXYxIGhlYWRlciBzZW50IGZvciBldmVyeSBjb25uZWN0aW9uLlxuICAgICAgICAgQ2xpY2tIb3VzZSB3aWxsIGV4dHJhY3QgaW5mb3JtYXRpb24gYWJvdXQgcHJveHktZm9yd2FyZGVkIGNsaWVudCBhZGRyZXNzIGZyb20gdGhlIGhlYWRlci5cbiAgICAtLT5cbiAgICA8IS0tIDx0Y3Bfd2l0aF9wcm94eV9wb3J0PjkwMTE8L3RjcF93aXRoX3Byb3h5X3BvcnQ+IC0tPlxuXG4gICAgPCEtLSBQb3J0IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gcmVwbGljYXMuIFVzZWQgZm9yIGRhdGEgZXhjaGFuZ2UuXG4gICAgICAgICBJdCBwcm92aWRlcyBsb3ctbGV2ZWwgZGF0YSBhY2Nlc3MgYmV0d2VlbiBzZXJ2ZXJzLlxuICAgICAgICAgVGhpcyBwb3J0IHNob3VsZCBub3QgYmUgYWNjZXNzaWJsZSBmcm9tIHVudHJ1c3RlZCBuZXR3b3Jrcy5cbiAgICAgICAgIFNlZSBhbHNvICdpbnRlcnNlcnZlcl9odHRwX2NyZWRlbnRpYWxzJy5cbiAgICAgICAgIERhdGEgdHJhbnNmZXJyZWQgb3ZlciBjb25uZWN0aW9ucyB0byB0aGlzIHBvcnQgc2hvdWxkIG5vdCBnbyB0aHJvdWdoIHVudHJ1c3RlZCBuZXR3b3Jrcy5cbiAgICAgICAgIFNlZSBhbHNvICdpbnRlcnNlcnZlcl9odHRwc19wb3J0Jy5cbiAgICAgIC0tPlxuICAgIDxpbnRlcnNlcnZlcl9odHRwX3BvcnQ+OTAwOTwvaW50ZXJzZXJ2ZXJfaHR0cF9wb3J0PlxuXG4gICAgPCEtLSBQb3J0IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gcmVwbGljYXMgd2l0aCBUTFMuXG4gICAgICAgICBZb3UgaGF2ZSB0byBjb25maWd1cmUgY2VydGlmaWNhdGUgdG8gZW5hYmxlIHRoaXMgaW50ZXJmYWNlLlxuICAgICAgICAgU2VlIHRoZSBvcGVuU1NMIHNlY3Rpb24gYmVsb3cuXG4gICAgICAgICBTZWUgYWxzbyAnaW50ZXJzZXJ2ZXJfaHR0cF9jcmVkZW50aWFscycuXG4gICAgICAtLT5cbiAgICA8IS0tIDxpbnRlcnNlcnZlcl9odHRwc19wb3J0PjkwMTA8L2ludGVyc2VydmVyX2h0dHBzX3BvcnQ+IC0tPlxuXG4gICAgPCEtLSBIb3N0bmFtZSB0aGF0IGlzIHVzZWQgYnkgb3RoZXIgcmVwbGljYXMgdG8gcmVxdWVzdCB0aGlzIHNlcnZlci5cbiAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gaXQgaXMgZGV0ZXJtaW5lZCBhbmFsb2dvdXMgdG8gJ2hvc3RuYW1lIC1mJyBjb21tYW5kLlxuICAgICAgICAgVGhpcyBzZXR0aW5nIGNvdWxkIGJlIHVzZWQgdG8gc3dpdGNoIHJlcGxpY2F0aW9uIHRvIGFub3RoZXIgbmV0d29yayBpbnRlcmZhY2VcbiAgICAgICAgICh0aGUgc2VydmVyIG1heSBiZSBjb25uZWN0ZWQgdG8gbXVsdGlwbGUgbmV0d29ya3MgdmlhIG11bHRpcGxlIGFkZHJlc3NlcylcbiAgICAgIC0tPlxuXG4gICAgPCEtLVxuICAgIDxpbnRlcnNlcnZlcl9odHRwX2hvc3Q+ZXhhbXBsZS5jbGlja2hvdXNlLmNvbTwvaW50ZXJzZXJ2ZXJfaHR0cF9ob3N0PlxuICAgIC0tPlxuXG4gICAgPCEtLSBZb3UgY2FuIHNwZWNpZnkgY3JlZGVudGlhbHMgZm9yIGF1dGhlbnRoaWNhdGlvbiBiZXR3ZWVuIHJlcGxpY2FzLlxuICAgICAgICAgVGhpcyBpcyByZXF1aXJlZCB3aGVuIGludGVyc2VydmVyX2h0dHBzX3BvcnQgaXMgYWNjZXNzaWJsZSBmcm9tIHVudHJ1c3RlZCBuZXR3b3JrcyxcbiAgICAgICAgIGFuZCBhbHNvIHJlY29tbWVuZGVkIHRvIGF2b2lkIFNTUkYgYXR0YWNrcyBmcm9tIHBvc3NpYmx5IGNvbXByb21pc2VkIHNlcnZpY2VzIGluIHlvdXIgbmV0d29yay5cbiAgICAgIC0tPlxuICAgIDwhLS08aW50ZXJzZXJ2ZXJfaHR0cF9jcmVkZW50aWFscz5cbiAgICAgICAgPHVzZXI+aW50ZXJzZXJ2ZXI8L3VzZXI+XG4gICAgICAgIDxwYXNzd29yZD48L3Bhc3N3b3JkPlxuICAgIDwvaW50ZXJzZXJ2ZXJfaHR0cF9jcmVkZW50aWFscz4tLT5cblxuICAgIDwhLS0gTGlzdGVuIHNwZWNpZmllZCBhZGRyZXNzLlxuICAgICAgICAgVXNlIDo6ICh3aWxkY2FyZCBJUHY2IGFkZHJlc3MpLCBpZiB5b3Ugd2FudCB0byBhY2NlcHQgY29ubmVjdGlvbnMgYm90aCB3aXRoIElQdjQgYW5kIElQdjYgZnJvbSBldmVyeXdoZXJlLlxuICAgICAgICAgTm90ZXM6XG4gICAgICAgICBJZiB5b3Ugb3BlbiBjb25uZWN0aW9ucyBmcm9tIHdpbGRjYXJkIGFkZHJlc3MsIG1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIG1lYXN1cmVzIGFwcGxpZWQ6XG4gICAgICAgICAtIHNlcnZlciBpcyBwcm90ZWN0ZWQgYnkgZmlyZXdhbGwgYW5kIG5vdCBhY2Nlc3NpYmxlIGZyb20gdW50cnVzdGVkIG5ldHdvcmtzO1xuICAgICAgICAgLSBhbGwgdXNlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gc3Vic2V0IG9mIG5ldHdvcmsgYWRkcmVzc2VzIChzZWUgdXNlcnMueG1sKTtcbiAgICAgICAgIC0gYWxsIHVzZXJzIGhhdmUgc3Ryb25nIHBhc3N3b3Jkcywgb25seSBzZWN1cmUgKFRMUykgaW50ZXJmYWNlcyBhcmUgYWNjZXNzaWJsZSwgb3IgY29ubmVjdGlvbnMgYXJlIG9ubHkgbWFkZSB2aWEgVExTIGludGVyZmFjZXMuXG4gICAgICAgICAtIHVzZXJzIHdpdGhvdXQgcGFzc3dvcmQgaGF2ZSByZWFkb25seSBhY2Nlc3MuXG4gICAgICAgICBTZWUgYWxzbzogaHR0cHM6Ly93d3cuc2hvZGFuLmlvL3NlYXJjaD9xdWVyeT1jbGlja2hvdXNlXG4gICAgICAtLT5cbiAgICA8IS0tIDxsaXN0ZW5faG9zdD46OjwvbGlzdGVuX2hvc3Q+IC0tPlxuXG5cbiAgICA8IS0tIFNhbWUgZm9yIGhvc3RzIHdpdGhvdXQgc3VwcG9ydCBmb3IgSVB2NjogLS0+XG4gICAgPCEtLSA8bGlzdGVuX2hvc3Q+MC4wLjAuMDwvbGlzdGVuX2hvc3Q+IC0tPlxuXG4gICAgPCEtLSBEZWZhdWx0IHZhbHVlcyAtIHRyeSBsaXN0ZW4gbG9jYWxob3N0IG9uIElQdjQgYW5kIElQdjYuIC0tPlxuICAgIDwhLS1cbiAgICA8bGlzdGVuX2hvc3Q+OjoxPC9saXN0ZW5faG9zdD5cbiAgICA8bGlzdGVuX2hvc3Q+MTI3LjAuMC4xPC9saXN0ZW5faG9zdD5cbiAgICAtLT5cblxuICAgIDwhLS0gRG9uJ3QgZXhpdCBpZiBJUHY2IG9yIElQdjQgbmV0d29ya3MgYXJlIHVuYXZhaWxhYmxlIHdoaWxlIHRyeWluZyB0byBsaXN0ZW4uIC0tPlxuICAgIDwhLS0gPGxpc3Rlbl90cnk+MDwvbGlzdGVuX3RyeT4gLS0+XG5cbiAgICA8IS0tIEFsbG93IG11bHRpcGxlIHNlcnZlcnMgdG8gbGlzdGVuIG9uIHRoZSBzYW1lIGFkZHJlc3M6cG9ydC4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAgICAtLT5cbiAgICA8IS0tIDxsaXN0ZW5fcmV1c2VfcG9ydD4wPC9saXN0ZW5fcmV1c2VfcG9ydD4gLS0+XG5cbiAgICA8IS0tIDxsaXN0ZW5fYmFja2xvZz40MDk2PC9saXN0ZW5fYmFja2xvZz4gLS0+XG5cbiAgICA8bWF4X2Nvbm5lY3Rpb25zPjQwOTY8L21heF9jb25uZWN0aW9ucz5cblxuICAgIDwhLS0gRm9yICdDb25uZWN0aW9uOiBrZWVwLWFsaXZlJyBpbiBIVFRQIDEuMSAtLT5cbiAgICA8a2VlcF9hbGl2ZV90aW1lb3V0PjM8L2tlZXBfYWxpdmVfdGltZW91dD5cblxuICAgIDwhLS0gZ1JQQyBwcm90b2NvbCAoc2VlIHNyYy9TZXJ2ZXIvZ3JwY19wcm90b3MvY2xpY2tob3VzZV9ncnBjLnByb3RvIGZvciB0aGUgQVBJKSAtLT5cbiAgICA8IS0tIDxncnBjX3BvcnQ+OTEwMDwvZ3JwY19wb3J0PiAtLT5cbiAgICA8Z3JwYz5cbiAgICAgICAgPGVuYWJsZV9zc2w+ZmFsc2U8L2VuYWJsZV9zc2w+XG5cbiAgICAgICAgPCEtLSBUaGUgZm9sbG93aW5nIHR3byBmaWxlcyBhcmUgdXNlZCBvbmx5IGlmIGVuYWJsZV9zc2w9MSAtLT5cbiAgICAgICAgPHNzbF9jZXJ0X2ZpbGU+L3BhdGgvdG8vc3NsX2NlcnRfZmlsZTwvc3NsX2NlcnRfZmlsZT5cbiAgICAgICAgPHNzbF9rZXlfZmlsZT4vcGF0aC90by9zc2xfa2V5X2ZpbGU8L3NzbF9rZXlfZmlsZT5cblxuICAgICAgICA8IS0tIFdoZXRoZXIgc2VydmVyIHdpbGwgcmVxdWVzdCBjbGllbnQgZm9yIGEgY2VydGlmaWNhdGUgLS0+XG4gICAgICAgIDxzc2xfcmVxdWlyZV9jbGllbnRfYXV0aD5mYWxzZTwvc3NsX3JlcXVpcmVfY2xpZW50X2F1dGg+XG5cbiAgICAgICAgPCEtLSBUaGUgZm9sbG93aW5nIGZpbGUgaXMgdXNlZCBvbmx5IGlmIHNzbF9yZXF1aXJlX2NsaWVudF9hdXRoPTEgLS0+XG4gICAgICAgIDxzc2xfY2FfY2VydF9maWxlPi9wYXRoL3RvL3NzbF9jYV9jZXJ0X2ZpbGU8L3NzbF9jYV9jZXJ0X2ZpbGU+XG5cbiAgICAgICAgPCEtLSBEZWZhdWx0IHRyYW5zcG9ydCBjb21wcmVzc2lvbiB0eXBlIChjYW4gYmUgb3ZlcnJpZGRlbiBieSBjbGllbnQsIHNlZSB0aGUgdHJhbnNwb3J0X2NvbXByZXNzaW9uX3R5cGUgZmllbGQgaW4gUXVlcnlJbmZvKS5cbiAgICAgICAgICAgICBTdXBwb3J0ZWQgYWxnb3JpdGhtczogbm9uZSwgZGVmbGF0ZSwgZ3ppcCwgc3RyZWFtX2d6aXAgLS0+XG4gICAgICAgIDx0cmFuc3BvcnRfY29tcHJlc3Npb25fdHlwZT5ub25lPC90cmFuc3BvcnRfY29tcHJlc3Npb25fdHlwZT5cblxuICAgICAgICA8IS0tIERlZmF1bHQgdHJhbnNwb3J0IGNvbXByZXNzaW9uIGxldmVsLiBTdXBwb3J0ZWQgbGV2ZWxzOiAwLi4zIC0tPlxuICAgICAgICA8dHJhbnNwb3J0X2NvbXByZXNzaW9uX2xldmVsPjA8L3RyYW5zcG9ydF9jb21wcmVzc2lvbl9sZXZlbD5cblxuICAgICAgICA8IS0tIFNlbmQvcmVjZWl2ZSBtZXNzYWdlIHNpemUgbGltaXRzIGluIGJ5dGVzLiAtMSBtZWFucyB1bmxpbWl0ZWQgLS0+XG4gICAgICAgIDxtYXhfc2VuZF9tZXNzYWdlX3NpemU+LTE8L21heF9zZW5kX21lc3NhZ2Vfc2l6ZT5cbiAgICAgICAgPG1heF9yZWNlaXZlX21lc3NhZ2Vfc2l6ZT4tMTwvbWF4X3JlY2VpdmVfbWVzc2FnZV9zaXplPlxuXG4gICAgICAgIDwhLS0gRW5hYmxlIGlmIHlvdSB3YW50IHZlcnkgZGV0YWlsZWQgbG9ncyAtLT5cbiAgICAgICAgPHZlcmJvc2VfbG9ncz5mYWxzZTwvdmVyYm9zZV9sb2dzPlxuICAgIDwvZ3JwYz5cblxuICAgIDwhLS0gVXNlZCB3aXRoIGh0dHBzX3BvcnQgYW5kIHRjcF9wb3J0X3NlY3VyZS4gRnVsbCBzc2wgb3B0aW9ucyBsaXN0OiBodHRwczovL2dpdGh1Yi5jb20vQ2xpY2tIb3VzZS1FeHRyYXMvcG9jby9ibG9iL21hc3Rlci9OZXRTU0xfT3BlblNTTC9pbmNsdWRlL1BvY28vTmV0L1NTTE1hbmFnZXIuaCNMNzEgLS0+XG4gICAgPG9wZW5TU0w+XG4gICAgICAgIDxzZXJ2ZXI+IDwhLS0gVXNlZCBmb3IgaHR0cHMgc2VydmVyIEFORCBzZWN1cmUgdGNwIHBvcnQgLS0+XG4gICAgICAgICAgICA8IS0tIG9wZW5zc2wgcmVxIC1zdWJqIFwiL0NOPWxvY2FsaG9zdFwiIC1uZXcgLW5ld2tleSByc2E6MjA0OCAtZGF5cyAzNjUgLW5vZGVzIC14NTA5IC1rZXlvdXQgL2V0Yy9jbGlja2hvdXNlLXNlcnZlci9zZXJ2ZXIua2V5IC1vdXQgL2V0Yy9jbGlja2hvdXNlLXNlcnZlci9zZXJ2ZXIuY3J0IC0tPlxuICAgICAgICAgICAgPCEtLSA8Y2VydGlmaWNhdGVGaWxlPi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvc2VydmVyLmNydDwvY2VydGlmaWNhdGVGaWxlPiAtLT5cbiAgICAgICAgICAgIDwhLS0gPHByaXZhdGVLZXlGaWxlPi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvc2VydmVyLmtleTwvcHJpdmF0ZUtleUZpbGU+IC0tPlxuICAgICAgICAgICAgPCEtLSBkaHBhcmFtcyBhcmUgb3B0aW9uYWwuIFlvdSBjYW4gZGVsZXRlIHRoZSA8ZGhQYXJhbXNGaWxlPiBlbGVtZW50LlxuICAgICAgICAgICAgICAgICBUbyBnZW5lcmF0ZSBkaHBhcmFtcywgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgICAgICAgICAgICAgICAgIG9wZW5zc2wgZGhwYXJhbSAtb3V0IC9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvZGhwYXJhbS5wZW0gNDA5NlxuICAgICAgICAgICAgICAgICBPbmx5IGZpbGUgZm9ybWF0IHdpdGggQkVHSU4gREggUEFSQU1FVEVSUyBpcyBzdXBwb3J0ZWQuXG4gICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPCEtLSA8ZGhQYXJhbXNGaWxlPi9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvZGhwYXJhbS5wZW08L2RoUGFyYW1zRmlsZT4tLT5cbiAgICAgICAgICAgIDx2ZXJpZmljYXRpb25Nb2RlPm5vbmU8L3ZlcmlmaWNhdGlvbk1vZGU+XG4gICAgICAgICAgICA8bG9hZERlZmF1bHRDQUZpbGU+dHJ1ZTwvbG9hZERlZmF1bHRDQUZpbGU+XG4gICAgICAgICAgICA8Y2FjaGVTZXNzaW9ucz50cnVlPC9jYWNoZVNlc3Npb25zPlxuICAgICAgICAgICAgPGRpc2FibGVQcm90b2NvbHM+c3NsdjIsc3NsdjM8L2Rpc2FibGVQcm90b2NvbHM+XG4gICAgICAgICAgICA8cHJlZmVyU2VydmVyQ2lwaGVycz50cnVlPC9wcmVmZXJTZXJ2ZXJDaXBoZXJzPlxuICAgICAgICA8L3NlcnZlcj5cblxuICAgICAgICA8Y2xpZW50PiA8IS0tIFVzZWQgZm9yIGNvbm5lY3RpbmcgdG8gaHR0cHMgZGljdGlvbmFyeSBzb3VyY2UgYW5kIHNlY3VyZWQgWm9va2VlcGVyIGNvbW11bmljYXRpb24gLS0+XG4gICAgICAgICAgICA8bG9hZERlZmF1bHRDQUZpbGU+dHJ1ZTwvbG9hZERlZmF1bHRDQUZpbGU+XG4gICAgICAgICAgICA8Y2FjaGVTZXNzaW9ucz50cnVlPC9jYWNoZVNlc3Npb25zPlxuICAgICAgICAgICAgPGRpc2FibGVQcm90b2NvbHM+c3NsdjIsc3NsdjM8L2Rpc2FibGVQcm90b2NvbHM+XG4gICAgICAgICAgICA8cHJlZmVyU2VydmVyQ2lwaGVycz50cnVlPC9wcmVmZXJTZXJ2ZXJDaXBoZXJzPlxuICAgICAgICAgICAgPCEtLSBVc2UgZm9yIHNlbGYtc2lnbmVkOiA8dmVyaWZpY2F0aW9uTW9kZT5ub25lPC92ZXJpZmljYXRpb25Nb2RlPiAtLT5cbiAgICAgICAgICAgIDxpbnZhbGlkQ2VydGlmaWNhdGVIYW5kbGVyPlxuICAgICAgICAgICAgICAgIDwhLS0gVXNlIGZvciBzZWxmLXNpZ25lZDogPG5hbWU+QWNjZXB0Q2VydGlmaWNhdGVIYW5kbGVyPC9uYW1lPiAtLT5cbiAgICAgICAgICAgICAgICA8bmFtZT5SZWplY3RDZXJ0aWZpY2F0ZUhhbmRsZXI8L25hbWU+XG4gICAgICAgICAgICA8L2ludmFsaWRDZXJ0aWZpY2F0ZUhhbmRsZXI+XG4gICAgICAgIDwvY2xpZW50PlxuICAgIDwvb3BlblNTTD5cblxuICAgIDwhLS0gRGVmYXVsdCByb290IHBhZ2Ugb24gaHR0cFtzXSBzZXJ2ZXIuIEZvciBleGFtcGxlIGxvYWQgVUkgZnJvbSBodHRwczovL3RhYml4LmlvLyB3aGVuIG9wZW5pbmcgaHR0cDovL2xvY2FsaG9zdDo4MTIzIC0tPlxuICAgIDwhLS1cbiAgICA8aHR0cF9zZXJ2ZXJfZGVmYXVsdF9yZXNwb25zZT48IVtDREFUQVs8aHRtbCBuZy1hcHA9XCJTTUkyXCI+PGhlYWQ+PGJhc2UgaHJlZj1cImh0dHA6Ly91aS50YWJpeC5pby9cIj48L2hlYWQ+PGJvZHk+PGRpdiB1aS12aWV3PVwiXCIgY2xhc3M9XCJjb250ZW50LXVpXCI+PC9kaXY+PHNjcmlwdCBzcmM9XCJodHRwOi8vbG9hZGVyLnRhYml4LmlvL21hc3Rlci5qc1wiPjwvc2NyaXB0PjwvYm9keT48L2h0bWw+XV0+PC9odHRwX3NlcnZlcl9kZWZhdWx0X3Jlc3BvbnNlPlxuICAgIC0tPlxuXG4gICAgPCEtLSBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHF1ZXJpZXMuIC0tPlxuICAgIDxtYXhfY29uY3VycmVudF9xdWVyaWVzPjEwMDwvbWF4X2NvbmN1cnJlbnRfcXVlcmllcz5cblxuICAgIDwhLS0gTWF4aW11bSBtZW1vcnkgdXNhZ2UgKHJlc2lkZW50IHNldCBzaXplKSBmb3Igc2VydmVyIHByb2Nlc3MuXG4gICAgICAgICBaZXJvIHZhbHVlIG9yIHVuc2V0IG1lYW5zIGRlZmF1bHQuIERlZmF1bHQgaXMgXCJtYXhfc2VydmVyX21lbW9yeV91c2FnZV90b19yYW1fcmF0aW9cIiBvZiBhdmFpbGFibGUgcGh5c2ljYWwgUkFNLlxuICAgICAgICAgSWYgdGhlIHZhbHVlIGlzIGxhcmdlciB0aGFuIFwibWF4X3NlcnZlcl9tZW1vcnlfdXNhZ2VfdG9fcmFtX3JhdGlvXCIgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIFJBTSwgaXQgd2lsbCBiZSBjdXQgZG93bi5cblxuICAgICAgICAgVGhlIGNvbnN0cmFpbnQgaXMgY2hlY2tlZCBvbiBxdWVyeSBleGVjdXRpb24gdGltZS5cbiAgICAgICAgIElmIGEgcXVlcnkgdHJpZXMgdG8gYWxsb2NhdGUgbWVtb3J5IGFuZCB0aGUgY3VycmVudCBtZW1vcnkgdXNhZ2UgcGx1cyBhbGxvY2F0aW9uIGlzIGdyZWF0ZXJcbiAgICAgICAgICB0aGFuIHNwZWNpZmllZCB0aHJlc2hvbGQsIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi5cblxuICAgICAgICAgSXQgaXMgbm90IHByYWN0aWNhbCB0byBzZXQgdGhpcyBjb25zdHJhaW50IHRvIHNtYWxsIHZhbHVlcyBsaWtlIGp1c3QgYSBmZXcgZ2lnYWJ5dGVzLFxuICAgICAgICAgIGJlY2F1c2UgbWVtb3J5IGFsbG9jYXRvciB3aWxsIGtlZXAgdGhpcyBhbW91bnQgb2YgbWVtb3J5IGluIGNhY2hlcyBhbmQgdGhlIHNlcnZlciB3aWxsIGRlbnkgc2VydmljZSBvZiBxdWVyaWVzLlxuICAgICAgLS0+XG4gICAgPG1heF9zZXJ2ZXJfbWVtb3J5X3VzYWdlPjA8L21heF9zZXJ2ZXJfbWVtb3J5X3VzYWdlPlxuXG4gICAgPCEtLSBNYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIGluIHRoZSBHbG9iYWwgdGhyZWFkIHBvb2wuXG4gICAgVGhpcyB3aWxsIGRlZmF1bHQgdG8gYSBtYXhpbXVtIG9mIDEwMDAwIHRocmVhZHMgaWYgbm90IHNwZWNpZmllZC5cbiAgICBUaGlzIHNldHRpbmcgd2lsbCBiZSB1c2VmdWwgaW4gc2NlbmFyaW9zIHdoZXJlIHRoZXJlIGFyZSBhIGxhcmdlIG51bWJlclxuICAgIG9mIGRpc3RyaWJ1dGVkIHF1ZXJpZXMgdGhhdCBhcmUgcnVubmluZyBjb25jdXJyZW50bHkgYnV0IGFyZSBpZGxpbmcgbW9zdFxuICAgIG9mIHRoZSB0aW1lLCBpbiB3aGljaCBjYXNlIGEgaGlnaGVyIG51bWJlciBvZiB0aHJlYWRzIG1pZ2h0IGJlIHJlcXVpcmVkLlxuICAgIC0tPlxuXG4gICAgPG1heF90aHJlYWRfcG9vbF9zaXplPjEwMDAwPC9tYXhfdGhyZWFkX3Bvb2xfc2l6ZT5cblxuICAgIDwhLS0gTnVtYmVyIG9mIHdvcmtlcnMgdG8gcmVjeWNsZSBjb25uZWN0aW9ucyBpbiBiYWNrZ3JvdW5kIChzZWUgYWxzbyBkcmFpbl90aW1lb3V0KS5cbiAgICAgICAgIElmIHRoZSBwb29sIGlzIGZ1bGwsIGNvbm5lY3Rpb24gd2lsbCBiZSBkcmFpbmVkIHN5bmNocm9ub3VzbHkuIC0tPlxuICAgIDwhLS0gPG1heF90aHJlYWRzX2Zvcl9jb25uZWN0aW9uX2NvbGxlY3Rvcj4xMDwvbWF4X3RocmVhZHNfZm9yX2Nvbm5lY3Rpb25fY29sbGVjdG9yPiAtLT5cblxuICAgIDwhLS0gT24gbWVtb3J5IGNvbnN0cmFpbmVkIGVudmlyb25tZW50cyB5b3UgbWF5IGhhdmUgdG8gc2V0IHRoaXMgdG8gdmFsdWUgbGFyZ2VyIHRoYW4gMS5cbiAgICAgIC0tPlxuICAgIDxtYXhfc2VydmVyX21lbW9yeV91c2FnZV90b19yYW1fcmF0aW8+MC45PC9tYXhfc2VydmVyX21lbW9yeV91c2FnZV90b19yYW1fcmF0aW8+XG5cbiAgICA8IS0tIFNpbXBsZSBzZXJ2ZXItd2lkZSBtZW1vcnkgcHJvZmlsZXIuIENvbGxlY3QgYSBzdGFjayB0cmFjZSBhdCBldmVyeSBwZWFrIGFsbG9jYXRpb24gc3RlcCAoaW4gYnl0ZXMpLlxuICAgICAgICAgRGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBzeXN0ZW0udHJhY2VfbG9nIHRhYmxlIHdpdGggcXVlcnlfaWQgPSBlbXB0eSBzdHJpbmcuXG4gICAgICAgICBaZXJvIG1lYW5zIGRpc2FibGVkLlxuICAgICAgLS0+XG4gICAgPHRvdGFsX21lbW9yeV9wcm9maWxlcl9zdGVwPjQxOTQzMDQ8L3RvdGFsX21lbW9yeV9wcm9maWxlcl9zdGVwPlxuXG4gICAgPCEtLSBDb2xsZWN0IHJhbmRvbSBhbGxvY2F0aW9ucyBhbmQgZGVhbGxvY2F0aW9ucyBhbmQgd3JpdGUgdGhlbSBpbnRvIHN5c3RlbS50cmFjZV9sb2cgd2l0aCAnTWVtb3J5U2FtcGxlJyB0cmFjZV90eXBlLlxuICAgICAgICAgVGhlIHByb2JhYmlsaXR5IGlzIGZvciBldmVyeSBhbGxvYy9mcmVlIHJlZ2FyZGxlc3MgdG8gdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRpb24uXG4gICAgICAgICBOb3RlIHRoYXQgc2FtcGxpbmcgaGFwcGVucyBvbmx5IHdoZW4gdGhlIGFtb3VudCBvZiB1bnRyYWNrZWQgbWVtb3J5IGV4Y2VlZHMgdGhlIHVudHJhY2tlZCBtZW1vcnkgbGltaXQsXG4gICAgICAgICAgd2hpY2ggaXMgNCBNaUIgYnkgZGVmYXVsdCBidXQgY2FuIGJlIGxvd2VyZWQgaWYgJ3RvdGFsX21lbW9yeV9wcm9maWxlcl9zdGVwJyBpcyBsb3dlcmVkLlxuICAgICAgICAgWW91IG1heSB3YW50IHRvIHNldCAndG90YWxfbWVtb3J5X3Byb2ZpbGVyX3N0ZXAnIHRvIDEgZm9yIGV4dHJhIGZpbmUgZ3JhaW5lZCBzYW1wbGluZy5cbiAgICAgIC0tPlxuICAgIDx0b3RhbF9tZW1vcnlfdHJhY2tlcl9zYW1wbGVfcHJvYmFiaWxpdHk+MDwvdG90YWxfbWVtb3J5X3RyYWNrZXJfc2FtcGxlX3Byb2JhYmlsaXR5PlxuXG4gICAgPCEtLSBTZXQgbGltaXQgb24gbnVtYmVyIG9mIG9wZW4gZmlsZXMgKGRlZmF1bHQ6IG1heGltdW0pLiBUaGlzIHNldHRpbmcgbWFrZXMgc2Vuc2Ugb24gTWFjIE9TIFggYmVjYXVzZSBnZXRybGltaXQoKSBmYWlscyB0byByZXRyaWV2ZVxuICAgICAgICAgY29ycmVjdCBtYXhpbXVtIHZhbHVlLiAtLT5cbiAgICA8IS0tIDxtYXhfb3Blbl9maWxlcz4yNjIxNDQ8L21heF9vcGVuX2ZpbGVzPiAtLT5cblxuICAgIDwhLS0gU2l6ZSBvZiBjYWNoZSBvZiB1bmNvbXByZXNzZWQgYmxvY2tzIG9mIGRhdGEsIHVzZWQgaW4gdGFibGVzIG9mIE1lcmdlVHJlZSBmYW1pbHkuXG4gICAgICAgICBJbiBieXRlcy4gQ2FjaGUgaXMgc2luZ2xlIGZvciBzZXJ2ZXIuIE1lbW9yeSBpcyBhbGxvY2F0ZWQgb25seSBvbiBkZW1hbmQuXG4gICAgICAgICBDYWNoZSBpcyB1c2VkIHdoZW4gJ3VzZV91bmNvbXByZXNzZWRfY2FjaGUnIHVzZXIgc2V0dGluZyB0dXJuZWQgb24gKG9mZiBieSBkZWZhdWx0KS5cbiAgICAgICAgIFVuY29tcHJlc3NlZCBjYWNoZSBpcyBhZHZhbnRhZ2VvdXMgb25seSBmb3IgdmVyeSBzaG9ydCBxdWVyaWVzIGFuZCBpbiByYXJlIGNhc2VzLlxuXG4gICAgICAgICBOb3RlOiB1bmNvbXByZXNzZWQgY2FjaGUgY2FuIGJlIHBvaW50bGVzcyBmb3IgbHo0LCBiZWNhdXNlIG1lbW9yeSBiYW5kd2lkdGhcbiAgICAgICAgIGlzIHNsb3dlciB0aGFuIG11bHRpLWNvcmUgZGVjb21wcmVzc2lvbiBvbiBzb21lIHNlcnZlciBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgIEVuYWJsaW5nIGl0IGNhbiBzb21ldGltZXMgcGFyYWRveGljYWxseSBtYWtlIHF1ZXJpZXMgc2xvd2VyLlxuICAgICAgLS0+XG4gICAgPHVuY29tcHJlc3NlZF9jYWNoZV9zaXplPjg1ODk5MzQ1OTI8L3VuY29tcHJlc3NlZF9jYWNoZV9zaXplPlxuXG4gICAgPCEtLSBBcHByb3hpbWF0ZSBzaXplIG9mIG1hcmsgY2FjaGUsIHVzZWQgaW4gdGFibGVzIG9mIE1lcmdlVHJlZSBmYW1pbHkuXG4gICAgICAgICBJbiBieXRlcy4gQ2FjaGUgaXMgc2luZ2xlIGZvciBzZXJ2ZXIuIE1lbW9yeSBpcyBhbGxvY2F0ZWQgb25seSBvbiBkZW1hbmQuXG4gICAgICAgICBZb3Ugc2hvdWxkIG5vdCBsb3dlciB0aGlzIHZhbHVlLlxuICAgICAgLS0+XG4gICAgPG1hcmtfY2FjaGVfc2l6ZT41MzY4NzA5MTIwPC9tYXJrX2NhY2hlX3NpemU+XG5cblxuICAgIDwhLS0gSWYgeW91IGVuYWJsZSB0aGUgYG1pbl9ieXRlc190b191c2VfbW1hcF9pb2Agc2V0dGluZyxcbiAgICAgICAgIHRoZSBkYXRhIGluIE1lcmdlVHJlZSB0YWJsZXMgY2FuIGJlIHJlYWQgd2l0aCBtbWFwIHRvIGF2b2lkIGNvcHlpbmcgZnJvbSBrZXJuZWwgdG8gdXNlcnNwYWNlLlxuICAgICAgICAgSXQgbWFrZXMgc2Vuc2Ugb25seSBmb3IgbGFyZ2UgZmlsZXMgYW5kIGhlbHBzIG9ubHkgaWYgZGF0YSByZXNpZGUgaW4gcGFnZSBjYWNoZS5cbiAgICAgICAgIFRvIGF2b2lkIGZyZXF1ZW50IG9wZW4vbW1hcC9tdW5tYXAvY2xvc2UgY2FsbHMgKHdoaWNoIGFyZSB2ZXJ5IGV4cGVuc2l2ZSBkdWUgdG8gY29uc2VxdWVudCBwYWdlIGZhdWx0cylcbiAgICAgICAgIGFuZCB0byByZXVzZSBtYXBwaW5ncyBmcm9tIHNldmVyYWwgdGhyZWFkcyBhbmQgcXVlcmllcyxcbiAgICAgICAgIHRoZSBjYWNoZSBvZiBtYXBwZWQgZmlsZXMgaXMgbWFpbnRhaW5lZC4gSXRzIHNpemUgaXMgdGhlIG51bWJlciBvZiBtYXBwZWQgcmVnaW9ucyAodXN1YWxseSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIG1hcHBlZCBmaWxlcykuXG4gICAgICAgICBUaGUgYW1vdW50IG9mIGRhdGEgaW4gbWFwcGVkIGZpbGVzIGNhbiBiZSBtb25pdG9yZWRcbiAgICAgICAgIGluIHN5c3RlbS5tZXRyaWNzLCBzeXN0ZW0ubWV0cmljX2xvZyBieSB0aGUgTU1hcHBlZEZpbGVzLCBNTWFwcGVkRmlsZUJ5dGVzIG1ldHJpY3NcbiAgICAgICAgIGFuZCBpbiBzeXN0ZW0uYXN5bmNocm9ub3VzX21ldHJpY3MsIHN5c3RlbS5hc3luY2hyb25vdXNfbWV0cmljc19sb2cgYnkgdGhlIE1NYXBDYWNoZUNlbGxzIG1ldHJpYyxcbiAgICAgICAgIGFuZCBhbHNvIGluIHN5c3RlbS5ldmVudHMsIHN5c3RlbS5wcm9jZXNzZXMsIHN5c3RlbS5xdWVyeV9sb2csIHN5c3RlbS5xdWVyeV90aHJlYWRfbG9nLCBzeXN0ZW0ucXVlcnlfdmlld3NfbG9nIGJ5IHRoZVxuICAgICAgICAgQ3JlYXRlZFJlYWRCdWZmZXJNTWFwLCBDcmVhdGVkUmVhZEJ1ZmZlck1NYXBGYWlsZWQsIE1NYXBwZWRGaWxlQ2FjaGVIaXRzLCBNTWFwcGVkRmlsZUNhY2hlTWlzc2VzIGV2ZW50cy5cbiAgICAgICAgIE5vdGUgdGhhdCB0aGUgYW1vdW50IG9mIGRhdGEgaW4gbWFwcGVkIGZpbGVzIGRvZXMgbm90IGNvbnN1bWUgbWVtb3J5IGRpcmVjdGx5IGFuZCBpcyBub3QgYWNjb3VudGVkXG4gICAgICAgICBpbiBxdWVyeSBvciBzZXJ2ZXIgbWVtb3J5IHVzYWdlIC0gYmVjYXVzZSB0aGlzIG1lbW9yeSBjYW4gYmUgZGlzY2FyZGVkIHNpbWlsYXIgdG8gT1MgcGFnZSBjYWNoZS5cbiAgICAgICAgIFRoZSBjYWNoZSBpcyBkcm9wcGVkICh0aGUgZmlsZXMgYXJlIGNsb3NlZCkgYXV0b21hdGljYWxseSBvbiByZW1vdmFsIG9mIG9sZCBwYXJ0cyBpbiBNZXJnZVRyZWUsXG4gICAgICAgICBhbHNvIGl0IGNhbiBiZSBkcm9wcGVkIG1hbnVhbGx5IGJ5IHRoZSBTWVNURU0gRFJPUCBNTUFQIENBQ0hFIHF1ZXJ5LlxuICAgICAgLS0+XG4gICAgPG1tYXBfY2FjaGVfc2l6ZT4xMDAwPC9tbWFwX2NhY2hlX3NpemU+XG5cbiAgICA8IS0tIENhY2hlIHNpemUgaW4gYnl0ZXMgZm9yIGNvbXBpbGVkIGV4cHJlc3Npb25zLi0tPlxuICAgIDxjb21waWxlZF9leHByZXNzaW9uX2NhY2hlX3NpemU+MTM0MjE3NzI4PC9jb21waWxlZF9leHByZXNzaW9uX2NhY2hlX3NpemU+XG5cbiAgICA8IS0tIENhY2hlIHNpemUgaW4gZWxlbWVudHMgZm9yIGNvbXBpbGVkIGV4cHJlc3Npb25zLi0tPlxuICAgIDxjb21waWxlZF9leHByZXNzaW9uX2NhY2hlX2VsZW1lbnRzX3NpemU+MTAwMDA8L2NvbXBpbGVkX2V4cHJlc3Npb25fY2FjaGVfZWxlbWVudHNfc2l6ZT5cblxuICAgIDwhLS0gUGF0aCB0byBkYXRhIGRpcmVjdG9yeSwgd2l0aCB0cmFpbGluZyBzbGFzaC4gLS0+XG4gICAgPHBhdGg+L3Zhci9saWIvY2xpY2tob3VzZS88L3BhdGg+XG5cbiAgICA8IS0tIFBhdGggdG8gdGVtcG9yYXJ5IGRhdGEgZm9yIHByb2Nlc3NpbmcgaGFyZCBxdWVyaWVzLiAtLT5cbiAgICA8dG1wX3BhdGg+L3Zhci9saWIvY2xpY2tob3VzZS90bXAvPC90bXBfcGF0aD5cblxuICAgIDwhLS0gRGlzYWJsZSBBdXRoVHlwZSBwbGFpbnRleHRfcGFzc3dvcmQgYW5kIG5vX3Bhc3N3b3JkIGZvciBBQ0wuIC0tPlxuICAgIDwhLS0gPGFsbG93X3BsYWludGV4dF9wYXNzd29yZD4wPC9hbGxvd19wbGFpbnRleHRfcGFzc3dvcmQ+IC0tPlxuICAgIDwhLS0gPGFsbG93X25vX3Bhc3N3b3JkPjA8L2FsbG93X25vX3Bhc3N3b3JkPiAtLT5gXG5cbiAgICA8IS0tIFBvbGljeSBmcm9tIHRoZSA8c3RvcmFnZV9jb25maWd1cmF0aW9uPiBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlcy5cbiAgICAgICAgIElmIG5vdCBzZXQgPHRtcF9wYXRoPiBpcyB1c2VkLCBvdGhlcndpc2UgPHRtcF9wYXRoPiBpcyBpZ25vcmVkLlxuXG4gICAgICAgICBOb3RlczpcbiAgICAgICAgIC0gbW92ZV9mYWN0b3IgICAgICAgICAgICAgIGlzIGlnbm9yZWRcbiAgICAgICAgIC0ga2VlcF9mcmVlX3NwYWNlX2J5dGVzICAgIGlzIGlnbm9yZWRcbiAgICAgICAgIC0gbWF4X2RhdGFfcGFydF9zaXplX2J5dGVzIGlzIGlnbm9yZWRcbiAgICAgICAgIC0geW91IG11c3QgaGF2ZSBleGFjdGx5IG9uZSB2b2x1bWUgaW4gdGhhdCBwb2xpY3lcbiAgICAtLT5cbiAgICA8IS0tIDx0bXBfcG9saWN5PnRtcDwvdG1wX3BvbGljeT4gLS0+XG5cbiAgICA8IS0tIERpcmVjdG9yeSB3aXRoIHVzZXIgcHJvdmlkZWQgZmlsZXMgdGhhdCBhcmUgYWNjZXNzaWJsZSBieSAnZmlsZScgdGFibGUgZnVuY3Rpb24uIC0tPlxuICAgIDx1c2VyX2ZpbGVzX3BhdGg+L3Zhci9saWIvY2xpY2tob3VzZS91c2VyX2ZpbGVzLzwvdXNlcl9maWxlc19wYXRoPlxuXG4gICAgPCEtLSBMREFQIHNlcnZlciBkZWZpbml0aW9ucy4gLS0+XG4gICAgPGxkYXBfc2VydmVycz5cbiAgICAgICAgPCEtLSBMaXN0IExEQVAgc2VydmVycyB3aXRoIHRoZWlyIGNvbm5lY3Rpb24gcGFyYW1ldGVycyBoZXJlIHRvIGxhdGVyIDEpIHVzZSB0aGVtIGFzIGF1dGhlbnRpY2F0b3JzIGZvciBkZWRpY2F0ZWQgbG9jYWwgdXNlcnMsXG4gICAgICAgICAgICAgIHdobyBoYXZlICdsZGFwJyBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gc3BlY2lmaWVkIGluc3RlYWQgb2YgJ3Bhc3N3b3JkJywgb3IgdG8gMikgdXNlIHRoZW0gYXMgcmVtb3RlIHVzZXIgZGlyZWN0b3JpZXMuXG4gICAgICAgICAgICAgUGFyYW1ldGVyczpcbiAgICAgICAgICAgICAgICBob3N0IC0gTERBUCBzZXJ2ZXIgaG9zdG5hbWUgb3IgSVAsIHRoaXMgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBhbmQgY2Fubm90IGJlIGVtcHR5LlxuICAgICAgICAgICAgICAgIHBvcnQgLSBMREFQIHNlcnZlciBwb3J0LCBkZWZhdWx0IGlzIDYzNiBpZiBlbmFibGVfdGxzIGlzIHNldCB0byB0cnVlLCAzODkgb3RoZXJ3aXNlLlxuICAgICAgICAgICAgICAgIGJpbmRfZG4gLSB0ZW1wbGF0ZSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgRE4gdG8gYmluZCB0by5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgRE4gd2lsbCBiZSBjb25zdHJ1Y3RlZCBieSByZXBsYWNpbmcgYWxsICd7dXNlcl9uYW1lfScgc3Vic3RyaW5ncyBvZiB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgYWN0dWFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgdXNlciBuYW1lIGR1cmluZyBlYWNoIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHQuXG4gICAgICAgICAgICAgICAgdXNlcl9kbl9kZXRlY3Rpb24gLSBzZWN0aW9uIHdpdGggTERBUCBzZWFyY2ggcGFyYW1ldGVycyBmb3IgZGV0ZWN0aW5nIHRoZSBhY3R1YWwgdXNlciBETiBvZiB0aGUgYm91bmQgdXNlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgbWFpbmx5IHVzZWQgaW4gc2VhcmNoIGZpbHRlcnMgZm9yIGZ1cnRoZXIgcm9sZSBtYXBwaW5nIHdoZW4gdGhlIHNlcnZlciBpcyBBY3RpdmUgRGlyZWN0b3J5LiBUaGVcbiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRpbmcgdXNlciBETiB3aWxsIGJlIHVzZWQgd2hlbiByZXBsYWNpbmcgJ3t1c2VyX2RufScgc3Vic3RyaW5ncyB3aGVyZXZlciB0aGV5IGFyZSBhbGxvd2VkLiBCeSBkZWZhdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIgRE4gaXMgc2V0IGVxdWFsIHRvIGJpbmQgRE4sIGJ1dCBvbmNlIHNlYXJjaCBpcyBwZXJmb3JtZWQsIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRvIHRoZSBhY3R1YWwgZGV0ZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIEROIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICBiYXNlX2RuIC0gdGVtcGxhdGUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGJhc2UgRE4gZm9yIHRoZSBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIEROIHdpbGwgYmUgY29uc3RydWN0ZWQgYnkgcmVwbGFjaW5nIGFsbCAne3VzZXJfbmFtZX0nIGFuZCAne2JpbmRfZG59JyBzdWJzdHJpbmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBhY3R1YWwgdXNlciBuYW1lIGFuZCBiaW5kIEROIGR1cmluZyB0aGUgTERBUCBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlIC0gc2NvcGUgb2YgdGhlIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdGVkIHZhbHVlcyBhcmU6ICdiYXNlJywgJ29uZV9sZXZlbCcsICdjaGlsZHJlbicsICdzdWJ0cmVlJyAodGhlIGRlZmF1bHQpLlxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfZmlsdGVyIC0gdGVtcGxhdGUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHNlYXJjaCBmaWx0ZXIgZm9yIHRoZSBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIGZpbHRlciB3aWxsIGJlIGNvbnN0cnVjdGVkIGJ5IHJlcGxhY2luZyBhbGwgJ3t1c2VyX25hbWV9JywgJ3tiaW5kX2RufScsIGFuZCAne2Jhc2VfZG59J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHJpbmdzIG9mIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBhY3R1YWwgdXNlciBuYW1lLCBiaW5kIEROLCBhbmQgYmFzZSBETiBkdXJpbmcgdGhlIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUsIHRoYXQgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyBtdXN0IGJlIGVzY2FwZWQgcHJvcGVybHkgaW4gWE1MLlxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb29sZG93biAtIGEgcGVyaW9kIG9mIHRpbWUsIGluIHNlY29uZHMsIGFmdGVyIGEgc3VjY2Vzc2Z1bCBiaW5kIGF0dGVtcHQsIGR1cmluZyB3aGljaCBhIHVzZXIgd2lsbCBiZSBhc3N1bWVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgc3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQgZm9yIGFsbCBjb25zZWN1dGl2ZSByZXF1ZXN0cyB3aXRob3V0IGNvbnRhY3RpbmcgdGhlIExEQVAgc2VydmVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSAwICh0aGUgZGVmYXVsdCkgdG8gZGlzYWJsZSBjYWNoaW5nIGFuZCBmb3JjZSBjb250YWN0aW5nIHRoZSBMREFQIHNlcnZlciBmb3IgZWFjaCBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuICAgICAgICAgICAgICAgIGVuYWJsZV90bHMgLSBmbGFnIHRvIHRyaWdnZXIgdXNlIG9mIHNlY3VyZSBjb25uZWN0aW9uIHRvIHRoZSBMREFQIHNlcnZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgJ25vJyBmb3IgcGxhaW4gdGV4dCAobGRhcDovLykgcHJvdG9jb2wgKG5vdCByZWNvbW1lbmRlZCkuXG4gICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWZ5ICd5ZXMnIGZvciBMREFQIG92ZXIgU1NML1RMUyAobGRhcHM6Ly8pIHByb3RvY29sIChyZWNvbW1lbmRlZCwgdGhlIGRlZmF1bHQpLlxuICAgICAgICAgICAgICAgICAgICAgICAgU3BlY2lmeSAnc3RhcnR0bHMnIGZvciBsZWdhY3kgU3RhcnRUTFMgcHJvdG9jb2wgKHBsYWluIHRleHQgKGxkYXA6Ly8pIHByb3RvY29sLCB1cGdyYWRlZCB0byBUTFMpLlxuICAgICAgICAgICAgICAgIHRsc19taW5pbXVtX3Byb3RvY29sX3ZlcnNpb24gLSB0aGUgbWluaW11bSBwcm90b2NvbCB2ZXJzaW9uIG9mIFNTTC9UTFMuXG4gICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRlZCB2YWx1ZXMgYXJlOiAnc3NsMicsICdzc2wzJywgJ3RsczEuMCcsICd0bHMxLjEnLCAndGxzMS4yJyAodGhlIGRlZmF1bHQpLlxuICAgICAgICAgICAgICAgIHRsc19yZXF1aXJlX2NlcnQgLSBTU0wvVExTIHBlZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGJlaGF2aW9yLlxuICAgICAgICAgICAgICAgICAgICAgICAgQWNjZXB0ZWQgdmFsdWVzIGFyZTogJ25ldmVyJywgJ2FsbG93JywgJ3RyeScsICdkZW1hbmQnICh0aGUgZGVmYXVsdCkuXG4gICAgICAgICAgICAgICAgdGxzX2NlcnRfZmlsZSAtIHBhdGggdG8gY2VydGlmaWNhdGUgZmlsZS5cbiAgICAgICAgICAgICAgICB0bHNfa2V5X2ZpbGUgLSBwYXRoIHRvIGNlcnRpZmljYXRlIGtleSBmaWxlLlxuICAgICAgICAgICAgICAgIHRsc19jYV9jZXJ0X2ZpbGUgLSBwYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUuXG4gICAgICAgICAgICAgICAgdGxzX2NhX2NlcnRfZGlyIC0gcGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgQ0EgY2VydGlmaWNhdGVzLlxuICAgICAgICAgICAgICAgIHRsc19jaXBoZXJfc3VpdGUgLSBhbGxvd2VkIGNpcGhlciBzdWl0ZSAoaW4gT3BlblNTTCBub3RhdGlvbikuXG4gICAgICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgICAgICA8bXlfbGRhcF9zZXJ2ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxob3N0PmxvY2FsaG9zdDwvaG9zdD5cbiAgICAgICAgICAgICAgICAgICAgPHBvcnQ+NjM2PC9wb3J0PlxuICAgICAgICAgICAgICAgICAgICA8YmluZF9kbj51aWQ9e3VzZXJfbmFtZX0sb3U9dXNlcnMsZGM9ZXhhbXBsZSxkYz1jb208L2JpbmRfZG4+XG4gICAgICAgICAgICAgICAgICAgIDx2ZXJpZmljYXRpb25fY29vbGRvd24+MzAwPC92ZXJpZmljYXRpb25fY29vbGRvd24+XG4gICAgICAgICAgICAgICAgICAgIDxlbmFibGVfdGxzPnllczwvZW5hYmxlX3Rscz5cbiAgICAgICAgICAgICAgICAgICAgPHRsc19taW5pbXVtX3Byb3RvY29sX3ZlcnNpb24+dGxzMS4yPC90bHNfbWluaW11bV9wcm90b2NvbF92ZXJzaW9uPlxuICAgICAgICAgICAgICAgICAgICA8dGxzX3JlcXVpcmVfY2VydD5kZW1hbmQ8L3Rsc19yZXF1aXJlX2NlcnQ+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfY2VydF9maWxlPi9wYXRoL3RvL3Rsc19jZXJ0X2ZpbGU8L3Rsc19jZXJ0X2ZpbGU+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfa2V5X2ZpbGU+L3BhdGgvdG8vdGxzX2tleV9maWxlPC90bHNfa2V5X2ZpbGU+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfY2FfY2VydF9maWxlPi9wYXRoL3RvL3Rsc19jYV9jZXJ0X2ZpbGU8L3Rsc19jYV9jZXJ0X2ZpbGU+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfY2FfY2VydF9kaXI+L3BhdGgvdG8vdGxzX2NhX2NlcnRfZGlyPC90bHNfY2FfY2VydF9kaXI+XG4gICAgICAgICAgICAgICAgICAgIDx0bHNfY2lwaGVyX3N1aXRlPkVDREhFLUVDRFNBLUFFUzI1Ni1HQ00tU0hBMzg0OkVDREhFLVJTQS1BRVMyNTYtR0NNLVNIQTM4NDpBRVMyNTYtR0NNLVNIQTM4NDwvdGxzX2NpcGhlcl9zdWl0ZT5cbiAgICAgICAgICAgICAgICA8L215X2xkYXBfc2VydmVyPlxuICAgICAgICAgICAgIEV4YW1wbGUgKHR5cGljYWwgQWN0aXZlIERpcmVjdG9yeSB3aXRoIGNvbmZpZ3VyZWQgdXNlciBETiBkZXRlY3Rpb24gZm9yIGZ1cnRoZXIgcm9sZSBtYXBwaW5nKTpcbiAgICAgICAgICAgICAgICA8bXlfYWRfc2VydmVyPlxuICAgICAgICAgICAgICAgICAgICA8aG9zdD5sb2NhbGhvc3Q8L2hvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxwb3J0PjM4OTwvcG9ydD5cbiAgICAgICAgICAgICAgICAgICAgPGJpbmRfZG4+RVhBTVBMRVxcXFx7dXNlcl9uYW1lfTwvYmluZF9kbj5cbiAgICAgICAgICAgICAgICAgICAgPHVzZXJfZG5fZGV0ZWN0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJhc2VfZG4+Q049VXNlcnMsREM9ZXhhbXBsZSxEQz1jb208L2Jhc2VfZG4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VhcmNoX2ZpbHRlcj4oJmFtcDsob2JqZWN0Q2xhc3M9dXNlcikoc0FNQWNjb3VudE5hbWU9e3VzZXJfbmFtZX0pKTwvc2VhcmNoX2ZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC91c2VyX2RuX2RldGVjdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPGVuYWJsZV90bHM+bm88L2VuYWJsZV90bHM+XG4gICAgICAgICAgICAgICAgPC9teV9hZF9zZXJ2ZXI+XG4gICAgICAgIC0tPlxuICAgIDwvbGRhcF9zZXJ2ZXJzPlxuXG4gICAgPCEtLSBUbyBlbmFibGUgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gc3VwcG9ydCBmb3IgSFRUUCByZXF1ZXN0cyAoR1NTLVNQTkVHTyksIGZvciB0aG9zZSB1c2VycyB3aG8gYXJlIGV4cGxpY2l0bHkgY29uZmlndXJlZFxuICAgICAgICAgIHRvIGF1dGhlbnRpY2F0ZSB2aWEgS2VyYmVyb3MsIGRlZmluZSBhIHNpbmdsZSAna2VyYmVyb3MnIHNlY3Rpb24gaGVyZS5cbiAgICAgICAgIFBhcmFtZXRlcnM6XG4gICAgICAgICAgICBwcmluY2lwYWwgLSBjYW5vbmljYWwgc2VydmljZSBwcmluY2lwYWwgbmFtZSwgdGhhdCB3aWxsIGJlIGFjcXVpcmVkIGFuZCB1c2VkIHdoZW4gYWNjZXB0aW5nIHNlY3VyaXR5IGNvbnRleHRzLlxuICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCwgaWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgcHJpbmNpcGFsIHdpbGwgYmUgdXNlZC5cbiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoICdyZWFsbScgcGFyYW1ldGVyLlxuICAgICAgICAgICAgcmVhbG0gLSBhIHJlYWxtLCB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXN0cmljdCBhdXRoZW50aWNhdGlvbiB0byBvbmx5IHRob3NlIHJlcXVlc3RzIHdob3NlIGluaXRpYXRvcidzIHJlYWxtIG1hdGNoZXMgaXQuXG4gICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsLCBpZiBvbWl0dGVkLCBubyBhZGRpdGlvbmFsIGZpbHRlcmluZyBieSByZWFsbSB3aWxsIGJlIGFwcGxpZWQuXG4gICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAncHJpbmNpcGFsJyBwYXJhbWV0ZXIuXG4gICAgICAgICBFeGFtcGxlOlxuICAgICAgICAgICAgPGtlcmJlcm9zIC8+XG4gICAgICAgICBFeGFtcGxlOlxuICAgICAgICAgICAgPGtlcmJlcm9zPlxuICAgICAgICAgICAgICAgIDxwcmluY2lwYWw+SFRUUC9jbGlja2hvdXNlLmV4YW1wbGUuY29tQEVYQU1QTEUuQ09NPC9wcmluY2lwYWw+XG4gICAgICAgICAgICA8L2tlcmJlcm9zPlxuICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgIDxrZXJiZXJvcz5cbiAgICAgICAgICAgICAgICA8cmVhbG0+RVhBTVBMRS5DT008L3JlYWxtPlxuICAgICAgICAgICAgPC9rZXJiZXJvcz5cbiAgICAtLT5cblxuICAgIDwhLS0gU291cmNlcyB0byByZWFkIHVzZXJzLCByb2xlcywgYWNjZXNzIHJpZ2h0cywgcHJvZmlsZXMgb2Ygc2V0dGluZ3MsIHF1b3Rhcy4gLS0+XG4gICAgPHVzZXJfZGlyZWN0b3JpZXM+XG4gICAgICAgIDx1c2Vyc194bWw+XG4gICAgICAgICAgICA8IS0tIFBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIHdpdGggcHJlZGVmaW5lZCB1c2Vycy4gLS0+XG4gICAgICAgICAgICA8cGF0aD51c2Vycy54bWw8L3BhdGg+XG4gICAgICAgIDwvdXNlcnNfeG1sPlxuICAgICAgICA8bG9jYWxfZGlyZWN0b3J5PlxuICAgICAgICAgICAgPCEtLSBQYXRoIHRvIGZvbGRlciB3aGVyZSB1c2VycyBjcmVhdGVkIGJ5IFNRTCBjb21tYW5kcyBhcmUgc3RvcmVkLiAtLT5cbiAgICAgICAgICAgIDxwYXRoPi92YXIvbGliL2NsaWNraG91c2UvYWNjZXNzLzwvcGF0aD5cbiAgICAgICAgPC9sb2NhbF9kaXJlY3Rvcnk+XG5cbiAgICAgICAgPCEtLSBUbyBhZGQgYW4gTERBUCBzZXJ2ZXIgYXMgYSByZW1vdGUgdXNlciBkaXJlY3Rvcnkgb2YgdXNlcnMgdGhhdCBhcmUgbm90IGRlZmluZWQgbG9jYWxseSwgZGVmaW5lIGEgc2luZ2xlICdsZGFwJyBzZWN0aW9uXG4gICAgICAgICAgICAgIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICAgICAgICAgICAgICAgIHNlcnZlciAtIG9uZSBvZiBMREFQIHNlcnZlciBuYW1lcyBkZWZpbmVkIGluICdsZGFwX3NlcnZlcnMnIGNvbmZpZyBzZWN0aW9uIGFib3ZlLlxuICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5IGFuZCBjYW5ub3QgYmUgZW1wdHkuXG4gICAgICAgICAgICAgICAgcm9sZXMgLSBzZWN0aW9uIHdpdGggYSBsaXN0IG9mIGxvY2FsbHkgZGVmaW5lZCByb2xlcyB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gZWFjaCB1c2VyIHJldHJpZXZlZCBmcm9tIHRoZSBMREFQIHNlcnZlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vIHJvbGVzIGFyZSBzcGVjaWZpZWQgaGVyZSBvciBhc3NpZ25lZCBkdXJpbmcgcm9sZSBtYXBwaW5nIChiZWxvdyksIHVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBwZXJmb3JtIGFueVxuICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnMgYWZ0ZXIgYXV0aGVudGljYXRpb24uXG4gICAgICAgICAgICAgICAgcm9sZV9tYXBwaW5nIC0gc2VjdGlvbiB3aXRoIExEQVAgc2VhcmNoIHBhcmFtZXRlcnMgYW5kIG1hcHBpbmcgcnVsZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICBXaGVuIGEgdXNlciBhdXRoZW50aWNhdGVzLCB3aGlsZSBzdGlsbCBib3VuZCB0byBMREFQLCBhbiBMREFQIHNlYXJjaCBpcyBwZXJmb3JtZWQgdXNpbmcgc2VhcmNoX2ZpbHRlciBhbmQgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBvZiB0aGUgbG9nZ2VkIGluIHVzZXIuIEZvciBlYWNoIGVudHJ5IGZvdW5kIGR1cmluZyB0aGF0IHNlYXJjaCwgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkLiBGb3IgZWFjaCBhdHRyaWJ1dGUgdmFsdWUgdGhhdCBoYXMgdGhlIHNwZWNpZmllZCBwcmVmaXgsIHRoZSBwcmVmaXggaXMgcmVtb3ZlZCwgYW5kIHRoZSByZXN0IG9mIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGJlY29tZXMgdGhlIG5hbWUgb2YgYSBsb2NhbCByb2xlIGRlZmluZWQgaW4gQ2xpY2tIb3VzZSwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgY3JlYXRlZCBiZWZvcmVoYW5kIGJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgQ1JFQVRFIFJPTEUgY29tbWFuZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlIGNhbiBiZSBtdWx0aXBsZSAncm9sZV9tYXBwaW5nJyBzZWN0aW9ucyBkZWZpbmVkIGluc2lkZSB0aGUgc2FtZSAnbGRhcCcgc2VjdGlvbi4gQWxsIG9mIHRoZW0gd2lsbCBiZVxuICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpZWQuXG4gICAgICAgICAgICAgICAgICAgIGJhc2VfZG4gLSB0ZW1wbGF0ZSB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgYmFzZSBETiBmb3IgdGhlIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSByZXN1bHRpbmcgRE4gd2lsbCBiZSBjb25zdHJ1Y3RlZCBieSByZXBsYWNpbmcgYWxsICd7dXNlcl9uYW1lfScsICd7YmluZF9kbn0nLCBhbmQgJ3t1c2VyX2RufSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RyaW5ncyBvZiB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgYWN0dWFsIHVzZXIgbmFtZSwgYmluZCBETiwgYW5kIHVzZXIgRE4gZHVyaW5nIGVhY2ggTERBUCBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlIC0gc2NvcGUgb2YgdGhlIExEQVAgc2VhcmNoLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdGVkIHZhbHVlcyBhcmU6ICdiYXNlJywgJ29uZV9sZXZlbCcsICdjaGlsZHJlbicsICdzdWJ0cmVlJyAodGhlIGRlZmF1bHQpLlxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hfZmlsdGVyIC0gdGVtcGxhdGUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIHNlYXJjaCBmaWx0ZXIgZm9yIHRoZSBMREFQIHNlYXJjaC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIGZpbHRlciB3aWxsIGJlIGNvbnN0cnVjdGVkIGJ5IHJlcGxhY2luZyBhbGwgJ3t1c2VyX25hbWV9JywgJ3tiaW5kX2RufScsICd7dXNlcl9kbn0nLCBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tiYXNlX2RufScgc3Vic3RyaW5ncyBvZiB0aGUgdGVtcGxhdGUgd2l0aCB0aGUgYWN0dWFsIHVzZXIgbmFtZSwgYmluZCBETiwgdXNlciBETiwgYW5kIGJhc2UgRE4gZHVyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggTERBUCBzZWFyY2guXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSwgdGhhdCB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIG11c3QgYmUgZXNjYXBlZCBwcm9wZXJseSBpbiBYTUwuXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAtIGF0dHJpYnV0ZSBuYW1lIHdob3NlIHZhbHVlcyB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZSBMREFQIHNlYXJjaC4gJ2NuJywgYnkgZGVmYXVsdC5cbiAgICAgICAgICAgICAgICAgICAgcHJlZml4IC0gcHJlZml4LCB0aGF0IHdpbGwgYmUgZXhwZWN0ZWQgdG8gYmUgaW4gZnJvbnQgb2YgZWFjaCBzdHJpbmcgaW4gdGhlIG9yaWdpbmFsIGxpc3Qgb2Ygc3RyaW5ncyByZXR1cm5lZCBieVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgTERBUCBzZWFyY2guIFByZWZpeCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgb3JpZ2luYWwgc3RyaW5ncyBhbmQgcmVzdWx0aW5nIHN0cmluZ3Mgd2lsbCBiZSB0cmVhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGxvY2FsIHJvbGUgbmFtZXMuIEVtcHR5LCBieSBkZWZhdWx0LlxuICAgICAgICAgICAgIEV4YW1wbGU6XG4gICAgICAgICAgICAgICAgPGxkYXA+XG4gICAgICAgICAgICAgICAgICAgIDxzZXJ2ZXI+bXlfbGRhcF9zZXJ2ZXI8L3NlcnZlcj5cbiAgICAgICAgICAgICAgICAgICAgPHJvbGVzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG15X2xvY2FsX3JvbGUxIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bXlfbG9jYWxfcm9sZTIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9yb2xlcz5cbiAgICAgICAgICAgICAgICAgICAgPHJvbGVfbWFwcGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiYXNlX2RuPm91PWdyb3VwcyxkYz1leGFtcGxlLGRjPWNvbTwvYmFzZV9kbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzY29wZT5zdWJ0cmVlPC9zY29wZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWFyY2hfZmlsdGVyPigmYW1wOyhvYmplY3RDbGFzcz1ncm91cE9mTmFtZXMpKG1lbWJlcj17YmluZF9kbn0pKTwvc2VhcmNoX2ZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGU+Y248L2F0dHJpYnV0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwcmVmaXg+Y2xpY2tob3VzZV88L3ByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgPC9yb2xlX21hcHBpbmc+XG4gICAgICAgICAgICAgICAgPC9sZGFwPlxuICAgICAgICAgICAgIEV4YW1wbGUgKHR5cGljYWwgQWN0aXZlIERpcmVjdG9yeSB3aXRoIHJvbGUgbWFwcGluZyB0aGF0IHJlbGllcyBvbiB0aGUgZGV0ZWN0ZWQgdXNlciBETik6XG4gICAgICAgICAgICAgICAgPGxkYXA+XG4gICAgICAgICAgICAgICAgICAgIDxzZXJ2ZXI+bXlfYWRfc2VydmVyPC9zZXJ2ZXI+XG4gICAgICAgICAgICAgICAgICAgIDxyb2xlX21hcHBpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YmFzZV9kbj5DTj1Vc2VycyxEQz1leGFtcGxlLERDPWNvbTwvYmFzZV9kbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGU+Q048L2F0dHJpYnV0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzY29wZT5zdWJ0cmVlPC9zY29wZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWFyY2hfZmlsdGVyPigmYW1wOyhvYmplY3RDbGFzcz1ncm91cCkobWVtYmVyPXt1c2VyX2RufSkpPC9zZWFyY2hfZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHByZWZpeD5jbGlja2hvdXNlXzwvcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8L3JvbGVfbWFwcGluZz5cbiAgICAgICAgICAgICAgICA8L2xkYXA+XG4gICAgICAgIC0tPlxuICAgIDwvdXNlcl9kaXJlY3Rvcmllcz5cblxuICAgIDwhLS0gRGVmYXVsdCBwcm9maWxlIG9mIHNldHRpbmdzLiAtLT5cbiAgICA8ZGVmYXVsdF9wcm9maWxlPmRlZmF1bHQ8L2RlZmF1bHRfcHJvZmlsZT5cblxuICAgIDwhLS0gQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcHJlZml4ZXMgZm9yIHVzZXItZGVmaW5lZCBzZXR0aW5ncy4gLS0+XG4gICAgPGN1c3RvbV9zZXR0aW5nc19wcmVmaXhlcz48L2N1c3RvbV9zZXR0aW5nc19wcmVmaXhlcz5cblxuICAgIDwhLS0gU3lzdGVtIHByb2ZpbGUgb2Ygc2V0dGluZ3MuIFRoaXMgc2V0dGluZ3MgYXJlIHVzZWQgYnkgaW50ZXJuYWwgcHJvY2Vzc2VzIChEaXN0cmlidXRlZCBEREwgd29ya2VyIGFuZCBzbyBvbikuIC0tPlxuICAgIDwhLS0gPHN5c3RlbV9wcm9maWxlPmRlZmF1bHQ8L3N5c3RlbV9wcm9maWxlPiAtLT5cblxuICAgIDwhLS0gQnVmZmVyIHByb2ZpbGUgb2Ygc2V0dGluZ3MuXG4gICAgICAgICBUaGlzIHNldHRpbmdzIGFyZSB1c2VkIGJ5IEJ1ZmZlciBzdG9yYWdlIHRvIGZsdXNoIGRhdGEgdG8gdGhlIHVuZGVybHlpbmcgdGFibGUuXG4gICAgICAgICBEZWZhdWx0OiB1c2VkIGZyb20gc3lzdGVtX3Byb2ZpbGUgZGlyZWN0aXZlLlxuICAgIC0tPlxuICAgIDwhLS0gPGJ1ZmZlcl9wcm9maWxlPmRlZmF1bHQ8L2J1ZmZlcl9wcm9maWxlPiAtLT5cblxuICAgIDwhLS0gRGVmYXVsdCBkYXRhYmFzZS4gLS0+XG4gICAgPGRlZmF1bHRfZGF0YWJhc2U+ZGVmYXVsdDwvZGVmYXVsdF9kYXRhYmFzZT5cblxuICAgIDwhLS0gU2VydmVyIHRpbWUgem9uZSBjb3VsZCBiZSBzZXQgaGVyZS5cblxuICAgICAgICAgVGltZSB6b25lIGlzIHVzZWQgd2hlbiBjb252ZXJ0aW5nIGJldHdlZW4gU3RyaW5nIGFuZCBEYXRlVGltZSB0eXBlcyxcbiAgICAgICAgICB3aGVuIHByaW50aW5nIERhdGVUaW1lIGluIHRleHQgZm9ybWF0cyBhbmQgcGFyc2luZyBEYXRlVGltZSBmcm9tIHRleHQsXG4gICAgICAgICAgaXQgaXMgdXNlZCBpbiBkYXRlIGFuZCB0aW1lIHJlbGF0ZWQgZnVuY3Rpb25zLCBpZiBzcGVjaWZpYyB0aW1lIHpvbmUgd2FzIG5vdCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG5cbiAgICAgICAgIFRpbWUgem9uZSBpcyBzcGVjaWZpZWQgYXMgaWRlbnRpZmllciBmcm9tIElBTkEgdGltZSB6b25lIGRhdGFiYXNlLCBsaWtlIFVUQyBvciBBZnJpY2EvQWJpZGphbi5cbiAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQsIHN5c3RlbSB0aW1lIHpvbmUgYXQgc2VydmVyIHN0YXJ0dXAgaXMgdXNlZC5cblxuICAgICAgICAgUGxlYXNlIG5vdGUsIHRoYXQgc2VydmVyIGNvdWxkIGRpc3BsYXkgdGltZSB6b25lIGFsaWFzIGluc3RlYWQgb2Ygc3BlY2lmaWVkIG5hbWUuXG4gICAgICAgICBFeGFtcGxlOiBadWx1IGlzIGFuIGFsaWFzIGZvciBVVEMuXG4gICAgLS0+XG4gICAgPCEtLSA8dGltZXpvbmU+VVRDPC90aW1lem9uZT4gLS0+XG5cbiAgICA8IS0tIFlvdSBjYW4gc3BlY2lmeSB1bWFzayBoZXJlIChzZWUgXCJtYW4gdW1hc2tcIikuIFNlcnZlciB3aWxsIGFwcGx5IGl0IG9uIHN0YXJ0dXAuXG4gICAgICAgICBOdW1iZXIgaXMgYWx3YXlzIHBhcnNlZCBhcyBvY3RhbC4gRGVmYXVsdCB1bWFzayBpcyAwMjcgKG90aGVyIHVzZXJzIGNhbm5vdCByZWFkIGxvZ3MsIGRhdGEgZmlsZXMsIGV0YzsgZ3JvdXAgY2FuIG9ubHkgcmVhZCkuXG4gICAgLS0+XG4gICAgPCEtLSA8dW1hc2s+MDIyPC91bWFzaz4gLS0+XG5cbiAgICA8IS0tIFBlcmZvcm0gbWxvY2thbGwgYWZ0ZXIgc3RhcnR1cCB0byBsb3dlciBmaXJzdCBxdWVyaWVzIGxhdGVuY3lcbiAgICAgICAgICBhbmQgdG8gcHJldmVudCBjbGlja2hvdXNlIGV4ZWN1dGFibGUgZnJvbSBiZWluZyBwYWdlZCBvdXQgdW5kZXIgaGlnaCBJTyBsb2FkLlxuICAgICAgICAgRW5hYmxpbmcgdGhpcyBvcHRpb24gaXMgcmVjb21tZW5kZWQgYnV0IHdpbGwgbGVhZCB0byBpbmNyZWFzZWQgc3RhcnR1cCB0aW1lIGZvciB1cCB0byBhIGZldyBzZWNvbmRzLlxuICAgIC0tPlxuICAgIDxtbG9ja19leGVjdXRhYmxlPnRydWU8L21sb2NrX2V4ZWN1dGFibGU+XG5cbiAgICA8IS0tIFJlYWxsb2NhdGUgbWVtb3J5IGZvciBtYWNoaW5lIGNvZGUgKFwidGV4dFwiKSB1c2luZyBodWdlIHBhZ2VzLiBIaWdobHkgZXhwZXJpbWVudGFsLiAtLT5cbiAgICA8cmVtYXBfZXhlY3V0YWJsZT5mYWxzZTwvcmVtYXBfZXhlY3V0YWJsZT5cblxuICAgIDwhW0NEQVRBW1xuICAgICAgICAgVW5jb21tZW50IGJlbG93IGluIG9yZGVyIHRvIHVzZSBKREJDIHRhYmxlIGVuZ2luZSBhbmQgZnVuY3Rpb24uXG5cbiAgICAgICAgIFRvIGluc3RhbGwgYW5kIHJ1biBKREJDIGJyaWRnZSBpbiBiYWNrZ3JvdW5kOlxuICAgICAgICAgKiBbRGViaWFuL1VidW50dV1cbiAgICAgICAgICAgZXhwb3J0IE1WTl9VUkw9aHR0cHM6Ly9yZXBvMS5tYXZlbi5vcmcvbWF2ZW4yL3J1L3lhbmRleC9jbGlja2hvdXNlL2NsaWNraG91c2UtamRiYy1icmlkZ2VcbiAgICAgICAgICAgZXhwb3J0IFBLR19WRVI9JChjdXJsIC1zTCAkTVZOX1VSTC9tYXZlbi1tZXRhZGF0YS54bWwgfCBncmVwICc8cmVsZWFzZT4nIHwgc2VkIC1lICdzfC4qPlxcXFwoLipcXFxcKTwuKnxcXFxcMXwnKVxuICAgICAgICAgICB3Z2V0IGh0dHBzOi8vZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtamRiYy1icmlkZ2UvcmVsZWFzZXMvZG93bmxvYWQvdiRQS0dfVkVSL2NsaWNraG91c2UtamRiYy1icmlkZ2VfJFBLR19WRVItMV9hbGwuZGViXG4gICAgICAgICAgIGFwdCBpbnN0YWxsIC0tbm8taW5zdGFsbC1yZWNvbW1lbmRzIC1mIC4vY2xpY2tob3VzZS1qZGJjLWJyaWRnZV8kUEtHX1ZFUi0xX2FsbC5kZWJcbiAgICAgICAgICAgY2xpY2tob3VzZS1qZGJjLWJyaWRnZSAmXG5cbiAgICAgICAgICogW0NlbnRPUy9SSEVMXVxuICAgICAgICAgICBleHBvcnQgTVZOX1VSTD1odHRwczovL3JlcG8xLm1hdmVuLm9yZy9tYXZlbjIvcnUveWFuZGV4L2NsaWNraG91c2UvY2xpY2tob3VzZS1qZGJjLWJyaWRnZVxuICAgICAgICAgICBleHBvcnQgUEtHX1ZFUj0kKGN1cmwgLXNMICRNVk5fVVJML21hdmVuLW1ldGFkYXRhLnhtbCB8IGdyZXAgJzxyZWxlYXNlPicgfCBzZWQgLWUgJ3N8Lio+XFxcXCguKlxcXFwpPC4qfFxcXFwxfCcpXG4gICAgICAgICAgIHdnZXQgaHR0cHM6Ly9naXRodWIuY29tL0NsaWNrSG91c2UvY2xpY2tob3VzZS1qZGJjLWJyaWRnZS9yZWxlYXNlcy9kb3dubG9hZC92JFBLR19WRVIvY2xpY2tob3VzZS1qZGJjLWJyaWRnZS0kUEtHX1ZFUi0xLm5vYXJjaC5ycG1cbiAgICAgICAgICAgeXVtIGxvY2FsaW5zdGFsbCAteSBjbGlja2hvdXNlLWpkYmMtYnJpZGdlLSRQS0dfVkVSLTEubm9hcmNoLnJwbVxuICAgICAgICAgICBjbGlja2hvdXNlLWpkYmMtYnJpZGdlICZcblxuICAgICAgICAgUGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9DbGlja0hvdXNlL2NsaWNraG91c2UtamRiYy1icmlkZ2UjdXNhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgXV0+XG4gICAgPCEtLVxuICAgIDxqZGJjX2JyaWRnZT5cbiAgICAgICAgPGhvc3Q+MTI3LjAuMC4xPC9ob3N0PlxuICAgICAgICA8cG9ydD45MDE5PC9wb3J0PlxuICAgIDwvamRiY19icmlkZ2U+XG4gICAgLS0+XG5cbiAgICA8IS0tIFRoZSBsaXN0IG9mIGhvc3RzIGFsbG93ZWQgdG8gdXNlIGluIFVSTC1yZWxhdGVkIHN0b3JhZ2UgZW5naW5lcyBhbmQgdGFibGUgZnVuY3Rpb25zLlxuICAgICAgICBJZiB0aGlzIHNlY3Rpb24gaXMgbm90IHByZXNlbnQgaW4gY29uZmlndXJhdGlvbiwgYWxsIGhvc3RzIGFyZSBhbGxvd2VkLlxuICAgIC0tPlxuICAgIDwhLS08cmVtb3RlX3VybF9hbGxvd19ob3N0cz4tLT5cbiAgICAgICAgPCEtLSBIb3N0IHNob3VsZCBiZSBzcGVjaWZpZWQgZXhhY3RseSBhcyBpbiBVUkwuIFRoZSBuYW1lIGlzIGNoZWNrZWQgYmVmb3JlIEROUyByZXNvbHV0aW9uLlxuICAgICAgICAgICAgRXhhbXBsZTogXCJjbGlja2hvdXNlLmNvbVwiLCBcImNsaWNraG91c2UuY29tLlwiIGFuZCBcInd3dy5jbGlja2hvdXNlLmNvbVwiIGFyZSBkaWZmZXJlbnQgaG9zdHMuXG4gICAgICAgICAgICAgICAgICAgIElmIHBvcnQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gVVJMLCB0aGUgaG9zdDpwb3J0IGlzIGNoZWNrZWQgYXMgYSB3aG9sZS5cbiAgICAgICAgICAgICAgICAgICAgSWYgaG9zdCBzcGVjaWZpZWQgaGVyZSB3aXRob3V0IHBvcnQsIGFueSBwb3J0IHdpdGggdGhpcyBob3N0IGFsbG93ZWQuXG4gICAgICAgICAgICAgICAgICAgIFwiY2xpY2tob3VzZS5jb21cIiAtPiBcImNsaWNraG91c2UuY29tOjQ0M1wiLCBcImNsaWNraG91c2UuY29tOjgwXCIgZXRjLiBpcyBhbGxvd2VkLCBidXQgXCJjbGlja2hvdXNlLmNvbTo4MFwiIC0+IG9ubHkgXCJjbGlja2hvdXNlLmNvbTo4MFwiIGlzIGFsbG93ZWQuXG4gICAgICAgICAgICBJZiB0aGUgaG9zdCBpcyBzcGVjaWZpZWQgYXMgSVAgYWRkcmVzcywgaXQgaXMgY2hlY2tlZCBhcyBzcGVjaWZpZWQgaW4gVVJMLiBFeGFtcGxlOiBcIlsyYTAyOjZiODphOjphXVwiLlxuICAgICAgICAgICAgSWYgdGhlcmUgYXJlIHJlZGlyZWN0cyBhbmQgc3VwcG9ydCBmb3IgcmVkaXJlY3RzIGlzIGVuYWJsZWQsIGV2ZXJ5IHJlZGlyZWN0ICh0aGUgTG9jYXRpb24gZmllbGQpIGlzIGNoZWNrZWQuXG4gICAgICAgICAgICBIb3N0IHNob3VsZCBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIGhvc3QgeG1sIHRhZzpcbiAgICAgICAgICAgICAgICAgICAgPGhvc3Q+Y2xpY2tob3VzZS5jb208L2hvc3Q+XG4gICAgICAgIC0tPlxuXG4gICAgICAgIDwhLS0gUmVndWxhciBleHByZXNzaW9uIGNhbiBiZSBzcGVjaWZpZWQuIFJFMiBlbmdpbmUgaXMgdXNlZCBmb3IgcmVnZXhwcy5cbiAgICAgICAgICAgIFJlZ2V4cHMgYXJlIG5vdCBhbGlnbmVkOiBkb24ndCBmb3JnZXQgdG8gYWRkIF4gYW5kICQuIEFsc28gZG9uJ3QgZm9yZ2V0IHRvIGVzY2FwZSBkb3QgKC4pIG1ldGFjaGFyYWN0ZXJcbiAgICAgICAgICAgIChmb3JnZXR0aW5nIHRvIGRvIHNvIGlzIGEgY29tbW9uIHNvdXJjZSBvZiBlcnJvcikuXG4gICAgICAgIC0tPlxuICAgIDwhLS08L3JlbW90ZV91cmxfYWxsb3dfaG9zdHM+LS0+XG5cbiAgICA8IS0tIElmIGVsZW1lbnQgaGFzICdpbmNsJyBhdHRyaWJ1dGUsIHRoZW4gZm9yIGl0J3MgdmFsdWUgd2lsbCBiZSB1c2VkIGNvcnJlc3BvbmRpbmcgc3Vic3RpdHV0aW9uIGZyb20gYW5vdGhlciBmaWxlLlxuICAgICAgICAgQnkgZGVmYXVsdCwgcGF0aCB0byBmaWxlIHdpdGggc3Vic3RpdHV0aW9ucyBpcyAvZXRjL21ldHJpa2EueG1sLiBJdCBjb3VsZCBiZSBjaGFuZ2VkIGluIGNvbmZpZyBpbiAnaW5jbHVkZV9mcm9tJyBlbGVtZW50LlxuICAgICAgICAgVmFsdWVzIGZvciBzdWJzdGl0dXRpb25zIGFyZSBzcGVjaWZpZWQgaW4gL2NsaWNraG91c2UvbmFtZV9vZl9zdWJzdGl0dXRpb24gZWxlbWVudHMgaW4gdGhhdCBmaWxlLlxuICAgICAgLS0+XG5cbiAgICA8IS0tIFN1YnN0aXR1dGlvbnMgZm9yIHBhcmFtZXRlcnMgb2YgcmVwbGljYXRlZCB0YWJsZXMuXG4gICAgICAgICAgT3B0aW9uYWwuIElmIHlvdSBkb24ndCB1c2UgcmVwbGljYXRlZCB0YWJsZXMsIHlvdSBjb3VsZCBvbWl0IHRoYXQuXG5cbiAgICAgICAgIFNlZSBodHRwczovL2NsaWNraG91c2UuY29tL2RvY3MvZW4vZW5naW5lcy90YWJsZS1lbmdpbmVzL21lcmdldHJlZS1mYW1pbHkvcmVwbGljYXRpb24vI2NyZWF0aW5nLXJlcGxpY2F0ZWQtdGFibGVzXG4gICAgICAtLT5cblxuICAgIDxtYWNyb3M+XG4gICAgICAgIDxzaGFyZD4wMTwvc2hhcmQ+XG4gICAgICAgIDxyZXBsaWNhPmV4YW1wbGUwMS0wMS0xPC9yZXBsaWNhPlxuICAgIDwvbWFjcm9zPlxuXG5cblxuICAgIDwhLS0gUmVsb2FkaW5nIGludGVydmFsIGZvciBlbWJlZGRlZCBkaWN0aW9uYXJpZXMsIGluIHNlY29uZHMuIERlZmF1bHQ6IDM2MDAuIC0tPlxuICAgIDxidWlsdGluX2RpY3Rpb25hcmllc19yZWxvYWRfaW50ZXJ2YWw+MzYwMDwvYnVpbHRpbl9kaWN0aW9uYXJpZXNfcmVsb2FkX2ludGVydmFsPlxuXG5cbiAgICA8IS0tIE1heGltdW0gc2Vzc2lvbiB0aW1lb3V0LCBpbiBzZWNvbmRzLiBEZWZhdWx0OiAzNjAwLiAtLT5cbiAgICA8bWF4X3Nlc3Npb25fdGltZW91dD4zNjAwPC9tYXhfc2Vzc2lvbl90aW1lb3V0PlxuXG4gICAgPCEtLSBEZWZhdWx0IHNlc3Npb24gdGltZW91dCwgaW4gc2Vjb25kcy4gRGVmYXVsdDogNjAuIC0tPlxuICAgIDxkZWZhdWx0X3Nlc3Npb25fdGltZW91dD42MDwvZGVmYXVsdF9zZXNzaW9uX3RpbWVvdXQ+XG5cbiAgICA8IS0tIFNlbmRpbmcgZGF0YSB0byBHcmFwaGl0ZSBmb3IgbW9uaXRvcmluZy4gU2V2ZXJhbCBzZWN0aW9ucyBjYW4gYmUgZGVmaW5lZC4gLS0+XG4gICAgPCEtLVxuICAgICAgICBpbnRlcnZhbCAtIHNlbmQgZXZlcnkgWCBzZWNvbmRcbiAgICAgICAgcm9vdF9wYXRoIC0gcHJlZml4IGZvciBrZXlzXG4gICAgICAgIGhvc3RuYW1lX2luX3BhdGggLSBhcHBlbmQgaG9zdG5hbWUgdG8gcm9vdF9wYXRoIChkZWZhdWx0ID0gdHJ1ZSlcbiAgICAgICAgbWV0cmljcyAtIHNlbmQgZGF0YSBmcm9tIHRhYmxlIHN5c3RlbS5tZXRyaWNzXG4gICAgICAgIGV2ZW50cyAtIHNlbmQgZGF0YSBmcm9tIHRhYmxlIHN5c3RlbS5ldmVudHNcbiAgICAgICAgYXN5bmNocm9ub3VzX21ldHJpY3MgLSBzZW5kIGRhdGEgZnJvbSB0YWJsZSBzeXN0ZW0uYXN5bmNocm9ub3VzX21ldHJpY3NcbiAgICAtLT5cbiAgICA8IS0tXG4gICAgPGdyYXBoaXRlPlxuICAgICAgICA8aG9zdD5sb2NhbGhvc3Q8L2hvc3Q+XG4gICAgICAgIDxwb3J0PjQyMDAwPC9wb3J0PlxuICAgICAgICA8dGltZW91dD4wLjE8L3RpbWVvdXQ+XG4gICAgICAgIDxpbnRlcnZhbD42MDwvaW50ZXJ2YWw+XG4gICAgICAgIDxyb290X3BhdGg+b25lX21pbjwvcm9vdF9wYXRoPlxuICAgICAgICA8aG9zdG5hbWVfaW5fcGF0aD50cnVlPC9ob3N0bmFtZV9pbl9wYXRoPlxuXG4gICAgICAgIDxtZXRyaWNzPnRydWU8L21ldHJpY3M+XG4gICAgICAgIDxldmVudHM+dHJ1ZTwvZXZlbnRzPlxuICAgICAgICA8ZXZlbnRzX2N1bXVsYXRpdmU+ZmFsc2U8L2V2ZW50c19jdW11bGF0aXZlPlxuICAgICAgICA8YXN5bmNocm9ub3VzX21ldHJpY3M+dHJ1ZTwvYXN5bmNocm9ub3VzX21ldHJpY3M+XG4gICAgPC9ncmFwaGl0ZT5cbiAgICA8Z3JhcGhpdGU+XG4gICAgICAgIDxob3N0PmxvY2FsaG9zdDwvaG9zdD5cbiAgICAgICAgPHBvcnQ+NDIwMDA8L3BvcnQ+XG4gICAgICAgIDx0aW1lb3V0PjAuMTwvdGltZW91dD5cbiAgICAgICAgPGludGVydmFsPjE8L2ludGVydmFsPlxuICAgICAgICA8cm9vdF9wYXRoPm9uZV9zZWM8L3Jvb3RfcGF0aD5cblxuICAgICAgICA8bWV0cmljcz50cnVlPC9tZXRyaWNzPlxuICAgICAgICA8ZXZlbnRzPnRydWU8L2V2ZW50cz5cbiAgICAgICAgPGV2ZW50c19jdW11bGF0aXZlPmZhbHNlPC9ldmVudHNfY3VtdWxhdGl2ZT5cbiAgICAgICAgPGFzeW5jaHJvbm91c19tZXRyaWNzPmZhbHNlPC9hc3luY2hyb25vdXNfbWV0cmljcz5cbiAgICA8L2dyYXBoaXRlPlxuICAgIC0tPlxuXG4gICAgPCEtLSBTZXJ2ZSBlbmRwb2ludCBmb3IgUHJvbWV0aGV1cyBtb25pdG9yaW5nLiAtLT5cbiAgICA8IS0tXG4gICAgICAgIGVuZHBvaW50IC0gbWVydGljcyBwYXRoIChyZWxhdGl2ZSB0byByb290LCBzdGF0cmluZyB3aXRoIFwiL1wiKVxuICAgICAgICBwb3J0IC0gcG9ydCB0byBzZXR1cCBzZXJ2ZXIuIElmIG5vdCBkZWZpbmVkIG9yIDAgdGhhbiBodHRwX3BvcnQgdXNlZFxuICAgICAgICBtZXRyaWNzIC0gc2VuZCBkYXRhIGZyb20gdGFibGUgc3lzdGVtLm1ldHJpY3NcbiAgICAgICAgZXZlbnRzIC0gc2VuZCBkYXRhIGZyb20gdGFibGUgc3lzdGVtLmV2ZW50c1xuICAgICAgICBhc3luY2hyb25vdXNfbWV0cmljcyAtIHNlbmQgZGF0YSBmcm9tIHRhYmxlIHN5c3RlbS5hc3luY2hyb25vdXNfbWV0cmljc1xuICAgICAgICBzdGF0dXNfaW5mbyAtIHNlbmQgZGF0YSBmcm9tIGRpZmZlcmVudCBjb21wb25lbnQgZnJvbSBDSCwgZXg6IERpY3Rpb25hcmllcyBzdGF0dXNcbiAgICAtLT5cblxuICAgIDxwcm9tZXRoZXVzPlxuICAgICAgICA8ZW5kcG9pbnQ+L21ldHJpY3M8L2VuZHBvaW50PlxuICAgICAgICA8cG9ydD45MzYzPC9wb3J0PlxuXG4gICAgICAgIDxtZXRyaWNzPnRydWU8L21ldHJpY3M+XG4gICAgICAgIDxldmVudHM+dHJ1ZTwvZXZlbnRzPlxuICAgICAgICA8YXN5bmNocm9ub3VzX21ldHJpY3M+dHJ1ZTwvYXN5bmNocm9ub3VzX21ldHJpY3M+XG4gICAgICAgIDxzdGF0dXNfaW5mbz50cnVlPC9zdGF0dXNfaW5mbz5cbiAgICA8L3Byb21ldGhldXM+XG5cbiAgICA8IS0tIFF1ZXJ5IGxvZy4gVXNlZCBvbmx5IGZvciBxdWVyaWVzIHdpdGggc2V0dGluZyBsb2dfcXVlcmllcyA9IDEuIC0tPlxuICAgIDxxdWVyeV9sb2c+XG4gICAgICAgIDwhLS0gV2hhdCB0YWJsZSB0byBpbnNlcnQgZGF0YS4gSWYgdGFibGUgaXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgICAgICAgICAgV2hlbiBxdWVyeSBsb2cgc3RydWN0dXJlIGlzIGNoYW5nZWQgYWZ0ZXIgc3lzdGVtIHVwZGF0ZSxcbiAgICAgICAgICAgICAgdGhlbiBvbGQgdGFibGUgd2lsbCBiZSByZW5hbWVkIGFuZCBuZXcgdGFibGUgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICAgIC0tPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPnF1ZXJ5X2xvZzwvdGFibGU+XG4gICAgICAgIDwhLS1cbiAgICAgICAgICAgIFBBUlRJVElPTiBCWSBleHByOiBodHRwczovL2NsaWNraG91c2UuY29tL2RvY3MvZW4vdGFibGVfZW5naW5lcy9tZXJnZXRyZWUtZmFtaWx5L2N1c3RvbV9wYXJ0aXRpb25pbmdfa2V5L1xuICAgICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgICAgICBldmVudF9kYXRlXG4gICAgICAgICAgICAgICAgdG9Nb25kYXkoZXZlbnRfZGF0ZSlcbiAgICAgICAgICAgICAgICB0b1lZWVlNTShldmVudF9kYXRlKVxuICAgICAgICAgICAgICAgIHRvU3RhcnRPZkhvdXIoZXZlbnRfdGltZSlcbiAgICAgICAgLS0+XG4gICAgICAgIDxwYXJ0aXRpb25fYnk+dG9ZWVlZTU0oZXZlbnRfZGF0ZSk8L3BhcnRpdGlvbl9ieT5cbiAgICAgICAgPCEtLVxuICAgICAgICAgICAgVGFibGUgVFRMIHNwZWNpZmljYXRpb246IGh0dHBzOi8vY2xpY2tob3VzZS5jb20vZG9jcy9lbi9lbmdpbmVzL3RhYmxlLWVuZ2luZXMvbWVyZ2V0cmVlLWZhbWlseS9tZXJnZXRyZWUvI21lcmdldHJlZS10YWJsZS10dGxcbiAgICAgICAgICAgIEV4YW1wbGU6XG4gICAgICAgICAgICAgICAgZXZlbnRfZGF0ZSArIElOVEVSVkFMIDEgV0VFS1xuICAgICAgICAgICAgICAgIGV2ZW50X2RhdGUgKyBJTlRFUlZBTCA3IERBWSBERUxFVEVcbiAgICAgICAgICAgICAgICBldmVudF9kYXRlICsgSU5URVJWQUwgMiBXRUVLIFRPIERJU0sgJ2JiYidcblxuICAgICAgICA8dHRsPmV2ZW50X2RhdGUgKyBJTlRFUlZBTCAzMCBEQVkgREVMRVRFPC90dGw+XG4gICAgICAgIC0tPlxuXG4gICAgICAgIDwhLS0gSW5zdGVhZCBvZiBwYXJ0aXRpb25fYnksIHlvdSBjYW4gcHJvdmlkZSBmdWxsIGVuZ2luZSBleHByZXNzaW9uIChzdGFydGluZyB3aXRoIEVOR0lORSA9ICkgd2l0aCBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgIEV4YW1wbGU6IDxlbmdpbmU+RU5HSU5FID0gTWVyZ2VUcmVlIFBBUlRJVElPTiBCWSB0b1lZWVlNTShldmVudF9kYXRlKSBPUkRFUiBCWSAoZXZlbnRfZGF0ZSwgZXZlbnRfdGltZSkgU0VUVElOR1MgaW5kZXhfZ3JhbnVsYXJpdHkgPSAxMDI0PC9lbmdpbmU+XG4gICAgICAgICAgLS0+XG5cbiAgICAgICAgPCEtLSBJbnRlcnZhbCBvZiBmbHVzaGluZyBkYXRhLiAtLT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC9xdWVyeV9sb2c+XG5cbiAgICA8IS0tIFRyYWNlIGxvZy4gU3RvcmVzIHN0YWNrIHRyYWNlcyBjb2xsZWN0ZWQgYnkgcXVlcnkgcHJvZmlsZXJzLlxuICAgICAgICAgU2VlIHF1ZXJ5X3Byb2ZpbGVyX3JlYWxfdGltZV9wZXJpb2RfbnMgYW5kIHF1ZXJ5X3Byb2ZpbGVyX2NwdV90aW1lX3BlcmlvZF9ucyBzZXR0aW5ncy4gLS0+XG4gICAgPHRyYWNlX2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT50cmFjZV9sb2c8L3RhYmxlPlxuXG4gICAgICAgIDxwYXJ0aXRpb25fYnk+dG9ZWVlZTU0oZXZlbnRfZGF0ZSk8L3BhcnRpdGlvbl9ieT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgPC90cmFjZV9sb2c+XG5cbiAgICA8IS0tIFF1ZXJ5IHRocmVhZCBsb2cuIEhhcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhyZWFkcyBwYXJ0aWNpcGF0ZWQgaW4gcXVlcnkgZXhlY3V0aW9uLlxuICAgICAgICAgVXNlZCBvbmx5IGZvciBxdWVyaWVzIHdpdGggc2V0dGluZyBsb2dfcXVlcnlfdGhyZWFkcyA9IDEuIC0tPlxuICAgIDxxdWVyeV90aHJlYWRfbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPnF1ZXJ5X3RocmVhZF9sb2c8L3RhYmxlPlxuICAgICAgICA8cGFydGl0aW9uX2J5PnRvWVlZWU1NKGV2ZW50X2RhdGUpPC9wYXJ0aXRpb25fYnk+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvcXVlcnlfdGhyZWFkX2xvZz5cblxuICAgIDwhLS0gUXVlcnkgdmlld3MgbG9nLiBIYXMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGRlcGVuZGVudCB2aWV3cyBhc3NvY2lhdGVkIHdpdGggYSBxdWVyeS5cbiAgICAgICAgIFVzZWQgb25seSBmb3IgcXVlcmllcyB3aXRoIHNldHRpbmcgbG9nX3F1ZXJ5X3ZpZXdzID0gMS4gLS0+XG4gICAgPHF1ZXJ5X3ZpZXdzX2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5xdWVyeV92aWV3c19sb2c8L3RhYmxlPlxuICAgICAgICA8cGFydGl0aW9uX2J5PnRvWVlZWU1NKGV2ZW50X2RhdGUpPC9wYXJ0aXRpb25fYnk+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvcXVlcnlfdmlld3NfbG9nPlxuXG4gICAgPCEtLSBVbmNvbW1lbnQgaWYgdXNlIHBhcnQgbG9nLlxuICAgICAgICAgUGFydCBsb2cgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGFjdGlvbnMgd2l0aCBwYXJ0cyBpbiBNZXJnZVRyZWUgdGFibGVzIChjcmVhdGlvbiwgZGVsZXRpb24sIG1lcmdlcywgZG93bmxvYWRzKS4tLT5cbiAgICA8cGFydF9sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+cGFydF9sb2c8L3RhYmxlPlxuICAgICAgICA8cGFydGl0aW9uX2J5PnRvWVlZWU1NKGV2ZW50X2RhdGUpPC9wYXJ0aXRpb25fYnk+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvcGFydF9sb2c+XG5cbiAgICA8IS0tIFVuY29tbWVudCB0byB3cml0ZSB0ZXh0IGxvZyBpbnRvIHRhYmxlLlxuICAgICAgICAgVGV4dCBsb2cgY29udGFpbnMgYWxsIGluZm9ybWF0aW9uIGZyb20gdXN1YWwgc2VydmVyIGxvZyBidXQgc3RvcmVzIGl0IGluIHN0cnVjdHVyZWQgYW5kIGVmZmljaWVudCB3YXkuXG4gICAgICAgICBUaGUgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VzIHRoYXQgZ29lcyB0byB0aGUgdGFibGUgY2FuIGJlIGxpbWl0ZWQgKDxsZXZlbD4pLCBpZiBub3Qgc3BlY2lmaWVkIGFsbCBtZXNzYWdlcyB3aWxsIGdvIHRvIHRoZSB0YWJsZS5cbiAgICA8dGV4dF9sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+dGV4dF9sb2c8L3RhYmxlPlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICAgICAgPGxldmVsPjwvbGV2ZWw+XG4gICAgPC90ZXh0X2xvZz5cbiAgICAtLT5cblxuICAgIDwhLS0gTWV0cmljIGxvZyBjb250YWlucyByb3dzIHdpdGggY3VycmVudCB2YWx1ZXMgb2YgUHJvZmlsZUV2ZW50cywgQ3VycmVudE1ldHJpY3MgY29sbGVjdGVkIHdpdGggXCJjb2xsZWN0X2ludGVydmFsX21pbGxpc2Vjb25kc1wiIGludGVydmFsLiAtLT5cbiAgICA8bWV0cmljX2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5tZXRyaWNfbG9nPC90YWJsZT5cbiAgICAgICAgPGZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz43NTAwPC9mbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+XG4gICAgICAgIDxjb2xsZWN0X2ludGVydmFsX21pbGxpc2Vjb25kcz4xMDAwPC9jb2xsZWN0X2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L21ldHJpY19sb2c+XG5cbiAgICA8IS0tXG4gICAgICAgIEFzeW5jaHJvbm91cyBtZXRyaWMgbG9nIGNvbnRhaW5zIHZhbHVlcyBvZiBtZXRyaWNzIGZyb21cbiAgICAgICAgc3lzdGVtLmFzeW5jaHJvbm91c19tZXRyaWNzLlxuICAgIC0tPlxuICAgIDxhc3luY2hyb25vdXNfbWV0cmljX2xvZz5cbiAgICAgICAgPGRhdGFiYXNlPnN5c3RlbTwvZGF0YWJhc2U+XG4gICAgICAgIDx0YWJsZT5hc3luY2hyb25vdXNfbWV0cmljX2xvZzwvdGFibGU+XG4gICAgICAgIDwhLS1cbiAgICAgICAgICAgIEFzeW5jaHJvbm91cyBtZXRyaWNzIGFyZSB1cGRhdGVkIG9uY2UgYSBtaW51dGUsIHNvIHRoZXJlIGlzXG4gICAgICAgICAgICBubyBuZWVkIHRvIGZsdXNoIG1vcmUgb2Z0ZW4uXG4gICAgICAgIC0tPlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjcwMDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L2FzeW5jaHJvbm91c19tZXRyaWNfbG9nPlxuXG4gICAgPCEtLVxuICAgICAgICBPcGVuVGVsZW1ldHJ5IGxvZyBjb250YWlucyBPcGVuVGVsZW1ldHJ5IHRyYWNlIHNwYW5zLlxuICAgIC0tPlxuICAgIDxvcGVudGVsZW1ldHJ5X3NwYW5fbG9nPlxuICAgICAgICA8IS0tXG4gICAgICAgICAgICBUaGUgZGVmYXVsdCB0YWJsZSBjcmVhdGlvbiBjb2RlIGlzIGluc3VmZmljaWVudCwgdGhpcyA8ZW5naW5lPiBzcGVjXG4gICAgICAgICAgICBpcyBhIHdvcmthcm91bmQuIFRoZXJlIGlzIG5vICdldmVudF90aW1lJyBmb3IgdGhpcyBsb2csIGJ1dCB0d28gdGltZXMsXG4gICAgICAgICAgICBzdGFydCBhbmQgZmluaXNoLiBJdCBpcyBzb3J0ZWQgYnkgZmluaXNoIHRpbWUsIHRvIGF2b2lkIGluc2VydGluZ1xuICAgICAgICAgICAgZGF0YSB0b28gZmFyIGF3YXkgaW4gdGhlIHBhc3QgKHByb2JhYmx5IHdlIGNhbiBzb21ldGltZXMgaW5zZXJ0IGEgc3BhblxuICAgICAgICAgICAgdGhhdCBpcyBzZWNvbmRzIGVhcmxpZXIgdGhhbiB0aGUgbGFzdCBzcGFuIGluIHRoZSB0YWJsZSwgZHVlIHRvIGEgcmFjZVxuICAgICAgICAgICAgYmV0d2VlbiBzZXZlcmFsIHNwYW5zIGluc2VydGVkIGluIHBhcmFsbGVsKS4gVGhpcyBnaXZlcyB0aGUgc3BhbnMgYVxuICAgICAgICAgICAgZ2xvYmFsIG9yZGVyIHRoYXQgd2UgY2FuIHVzZSB0byBlLmcuIHJldHJ5IGluc2VydGlvbiBpbnRvIHNvbWUgZXh0ZXJuYWxcbiAgICAgICAgICAgIHN5c3RlbS5cbiAgICAgICAgLS0+XG4gICAgICAgIDxlbmdpbmU+XG4gICAgICAgICAgICBlbmdpbmUgTWVyZ2VUcmVlXG4gICAgICAgICAgICBwYXJ0aXRpb24gYnkgdG9ZWVlZTU0oZmluaXNoX2RhdGUpXG4gICAgICAgICAgICBvcmRlciBieSAoZmluaXNoX2RhdGUsIGZpbmlzaF90aW1lX3VzLCB0cmFjZV9pZClcbiAgICAgICAgPC9lbmdpbmU+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+b3BlbnRlbGVtZXRyeV9zcGFuX2xvZzwvdGFibGU+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvb3BlbnRlbGVtZXRyeV9zcGFuX2xvZz5cblxuXG4gICAgPCEtLSBDcmFzaCBsb2cuIFN0b3JlcyBzdGFjayB0cmFjZXMgZm9yIGZhdGFsIGVycm9ycy5cbiAgICAgICAgIFRoaXMgdGFibGUgaXMgbm9ybWFsbHkgZW1wdHkuIC0tPlxuICAgIDxjcmFzaF9sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+Y3Jhc2hfbG9nPC90YWJsZT5cblxuICAgICAgICA8cGFydGl0aW9uX2J5IC8+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+MTAwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvY3Jhc2hfbG9nPlxuXG4gICAgPCEtLSBTZXNzaW9uIGxvZy4gU3RvcmVzIHVzZXIgbG9nIGluIChzdWNjZXNzZnVsIG9yIG5vdCkgYW5kIGxvZyBvdXQgZXZlbnRzLlxuXG4gICAgICAgIE5vdGU6IHNlc3Npb24gbG9nIGhhcyBrbm93biBzZWN1cml0eSBpc3N1ZXMgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBwcm9kdWN0aW9uLlxuICAgIC0tPlxuICAgIDwhLS0gPHNlc3Npb25fbG9nPlxuICAgICAgICA8ZGF0YWJhc2U+c3lzdGVtPC9kYXRhYmFzZT5cbiAgICAgICAgPHRhYmxlPnNlc3Npb25fbG9nPC90YWJsZT5cblxuICAgICAgICA8cGFydGl0aW9uX2J5PnRvWVlZWU1NKGV2ZW50X2RhdGUpPC9wYXJ0aXRpb25fYnk+XG4gICAgICAgIDxmbHVzaF9pbnRlcnZhbF9taWxsaXNlY29uZHM+NzUwMDwvZmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPlxuICAgIDwvc2Vzc2lvbl9sb2c+IC0tPlxuXG4gICAgPCEtLSBQcm9maWxpbmcgb24gUHJvY2Vzc29ycyBsZXZlbC4gLS0+XG4gICAgPHByb2Nlc3NvcnNfcHJvZmlsZV9sb2c+XG4gICAgICAgIDxkYXRhYmFzZT5zeXN0ZW08L2RhdGFiYXNlPlxuICAgICAgICA8dGFibGU+cHJvY2Vzc29yc19wcm9maWxlX2xvZzwvdGFibGU+XG5cbiAgICAgICAgPHBhcnRpdGlvbl9ieT50b1lZWVlNTShldmVudF9kYXRlKTwvcGFydGl0aW9uX2J5PlxuICAgICAgICA8Zmx1c2hfaW50ZXJ2YWxfbWlsbGlzZWNvbmRzPjc1MDA8L2ZsdXNoX2ludGVydmFsX21pbGxpc2Vjb25kcz5cbiAgICA8L3Byb2Nlc3NvcnNfcHJvZmlsZV9sb2c+XG5cbiAgICA8IS0tIDx0b3BfbGV2ZWxfZG9tYWluc19wYXRoPi92YXIvbGliL2NsaWNraG91c2UvdG9wX2xldmVsX2RvbWFpbnMvPC90b3BfbGV2ZWxfZG9tYWluc19wYXRoPiAtLT5cbiAgICA8IS0tIEN1c3RvbSBUTEQgbGlzdHMuXG4gICAgICAgICBGb3JtYXQ6IDxuYW1lPi9wYXRoL3RvL2ZpbGU8L25hbWU+XG5cbiAgICAgICAgIENoYW5nZXMgd2lsbCBub3QgYmUgYXBwbGllZCB3L28gc2VydmVyIHJlc3RhcnQuXG4gICAgICAgICBQYXRoIHRvIHRoZSBsaXN0IGlzIHVuZGVyIHRvcF9sZXZlbF9kb21haW5zX3BhdGggKHNlZSBhYm92ZSkuXG4gICAgLS0+XG4gICAgPHRvcF9sZXZlbF9kb21haW5zX2xpc3RzPlxuICAgICAgICA8IS0tXG4gICAgICAgIDxwdWJsaWNfc3VmZml4X2xpc3Q+L3BhdGgvdG8vcHVibGljX3N1ZmZpeF9saXN0LmRhdDwvcHVibGljX3N1ZmZpeF9saXN0PlxuICAgICAgICAtLT5cbiAgICA8L3RvcF9sZXZlbF9kb21haW5zX2xpc3RzPlxuXG4gICAgPCEtLSBDb25maWd1cmF0aW9uIG9mIGV4dGVybmFsIGRpY3Rpb25hcmllcy4gU2VlOlxuICAgICAgICAgaHR0cHM6Ly9jbGlja2hvdXNlLmNvbS9kb2NzL2VuL3NxbC1yZWZlcmVuY2UvZGljdGlvbmFyaWVzL2V4dGVybmFsLWRpY3Rpb25hcmllcy9leHRlcm5hbC1kaWN0c1xuICAgIC0tPlxuICAgIDxkaWN0aW9uYXJpZXNfY29uZmlnPipfZGljdGlvbmFyeS54bWw8L2RpY3Rpb25hcmllc19jb25maWc+XG5cbiAgICA8IS0tIENvbmZpZ3VyYXRpb24gb2YgdXNlciBkZWZpbmVkIGV4ZWN1dGFibGUgZnVuY3Rpb25zIC0tPlxuICAgIDx1c2VyX2RlZmluZWRfZXhlY3V0YWJsZV9mdW5jdGlvbnNfY29uZmlnPipmdW5jdGlvbi54bWw8L3VzZXJfZGVmaW5lZF9leGVjdXRhYmxlX2Z1bmN0aW9uc19jb25maWc+XG4gICAgPHVzZXJfc2NyaXB0c19wYXRoPi92YXIvbGliL2NsaWNraG91c2UvdXNlcl9zY3JpcHRzLzwvdXNlcl9zY3JpcHRzX3BhdGg+XG5cbiAgICA8IS0tIFVuY29tbWVudCBpZiB5b3Ugd2FudCBkYXRhIHRvIGJlIGNvbXByZXNzZWQgMzAtMTAwJSBiZXR0ZXIuXG4gICAgICAgICBEb24ndCBkbyB0aGF0IGlmIHlvdSBqdXN0IHN0YXJ0ZWQgdXNpbmcgQ2xpY2tIb3VzZS5cbiAgICAgIC0tPlxuICAgIDwhLS1cbiAgICA8Y29tcHJlc3Npb24+XG4gICAgICAgIDwhLSAtIFNldCBvZiB2YXJpYW50cy4gQ2hlY2tlZCBpbiBvcmRlci4gTGFzdCBtYXRjaGluZyBjYXNlIHdpbnMuIElmIG5vdGhpbmcgbWF0Y2hlcywgbHo0IHdpbGwgYmUgdXNlZC4gLSAtPlxuICAgICAgICA8Y2FzZT5cblxuICAgICAgICAgICAgPCEtIC0gQ29uZGl0aW9ucy4gQWxsIG11c3QgYmUgc2F0aXNmaWVkLiBTb21lIGNvbmRpdGlvbnMgbWF5IGJlIG9taXR0ZWQuIC0gLT5cbiAgICAgICAgICAgIDxtaW5fcGFydF9zaXplPjEwMDAwMDAwMDAwPC9taW5fcGFydF9zaXplPiAgICAgICAgPCEtIC0gTWluIHBhcnQgc2l6ZSBpbiBieXRlcy4gLSAtPlxuICAgICAgICAgICAgPG1pbl9wYXJ0X3NpemVfcmF0aW8+MC4wMTwvbWluX3BhcnRfc2l6ZV9yYXRpbz4gICA8IS0gLSBNaW4gc2l6ZSBvZiBwYXJ0IHJlbGF0aXZlIHRvIHdob2xlIHRhYmxlIHNpemUuIC0gLT5cblxuICAgICAgICAgICAgPCEtIC0gV2hhdCBjb21wcmVzc2lvbiBtZXRob2QgdG8gdXNlLiAtIC0+XG4gICAgICAgICAgICA8bWV0aG9kPnpzdGQ8L21ldGhvZD5cbiAgICAgICAgPC9jYXNlPlxuICAgIDwvY29tcHJlc3Npb24+XG4gICAgLS0+XG5cbiAgICA8IS0tIENvbmZpZ3VyYXRpb24gb2YgZW5jcnlwdGlvbi4gVGhlIHNlcnZlciBleGVjdXRlcyBhIGNvbW1hbmQgdG9cbiAgICAgICAgIG9idGFpbiBhbiBlbmNyeXB0aW9uIGtleSBhdCBzdGFydHVwIGlmIHN1Y2ggYSBjb21tYW5kIGlzXG4gICAgICAgICBkZWZpbmVkLCBvciBlbmNyeXB0aW9uIGNvZGVjcyB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZS4gVGhlXG4gICAgICAgICBjb21tYW5kIGlzIGV4ZWN1dGVkIHRocm91Z2ggL2Jpbi9zaCBhbmQgaXMgZXhwZWN0ZWQgdG8gd3JpdGVcbiAgICAgICAgIGEgQmFzZTY0LWVuY29kZWQga2V5IHRvIHRoZSBzdGRvdXQuIC0tPlxuICAgIDxlbmNyeXB0aW9uX2NvZGVjcz5cbiAgICAgICAgPCEtLSBhZXNfMTI4X2djbV9zaXYgLS0+XG4gICAgICAgICAgICA8IS0tIEV4YW1wbGUgb2YgZ2V0dGluZyBoZXgga2V5IGZyb20gZW52IC0tPlxuICAgICAgICAgICAgPCEtLSB0aGUgY29kZSBzaG91bGQgdXNlIHRoaXMga2V5IGFuZCB0aHJvdyBhbiBleGNlcHRpb24gaWYgaXRzIGxlbmd0aCBpcyBub3QgMTYgYnl0ZXMgLS0+XG4gICAgICAgICAgICA8IS0ta2V5X2hleCBmcm9tX2Vudj1cIi4uLlwiPjwva2V5X2hleCAtLT5cblxuICAgICAgICAgICAgPCEtLSBFeGFtcGxlIG9mIG11bHRpcGxlIGhleCBrZXlzLiBUaGV5IGNhbiBiZSBpbXBvcnRlZCBmcm9tIGVudiBvciBiZSB3cml0dGVuIGRvd24gaW4gY29uZmlnLS0+XG4gICAgICAgICAgICA8IS0tIHRoZSBjb2RlIHNob3VsZCB1c2UgdGhlc2Uga2V5cyBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZWlyIGxlbmd0aCBpcyBub3QgMTYgYnl0ZXMgLS0+XG4gICAgICAgICAgICA8IS0tIGtleV9oZXggaWQ9XCIwXCI+Li4uPC9rZXlfaGV4IC0tPlxuICAgICAgICAgICAgPCEtLSBrZXlfaGV4IGlkPVwiMVwiIGZyb21fZW52PVwiLi5cIj48L2tleV9oZXggLS0+XG4gICAgICAgICAgICA8IS0tIGtleV9oZXggaWQ9XCIyXCI+Li4uPC9rZXlfaGV4IC0tPlxuICAgICAgICAgICAgPCEtLSBjdXJyZW50X2tleV9pZD4yPC9jdXJyZW50X2tleV9pZCAtLT5cblxuICAgICAgICAgICAgPCEtLSBFeGFtcGxlIG9mIGdldHRpbmcgaGV4IGtleSBmcm9tIGNvbmZpZyAtLT5cbiAgICAgICAgICAgIDwhLS0gdGhlIGNvZGUgc2hvdWxkIHVzZSB0aGlzIGtleSBhbmQgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGl0cyBsZW5ndGggaXMgbm90IDE2IGJ5dGVzIC0tPlxuICAgICAgICAgICAgPCEtLSBrZXk+Li4uPC9rZXkgLS0+XG5cbiAgICAgICAgICAgIDwhLS0gZXhhbXBsZSBvZiBhZGRpbmcgbm9uY2UgLS0+XG4gICAgICAgICAgICA8IS0tIG5vbmNlPi4uLjwvbm9uY2UgLS0+XG5cbiAgICAgICAgPCEtLSAvYWVzXzEyOF9nY21fc2l2IC0tPlxuICAgIDwvZW5jcnlwdGlvbl9jb2RlY3M+XG5cbiAgICA8IS0tIEFsbG93IHRvIGV4ZWN1dGUgZGlzdHJpYnV0ZWQgRERMIHF1ZXJpZXMgKENSRUFURSwgRFJPUCwgQUxURVIsIFJFTkFNRSkgb24gY2x1c3Rlci5cbiAgICAgICAgIFdvcmtzIG9ubHkgaWYgWm9vS2VlcGVyIGlzIGVuYWJsZWQuIENvbW1lbnQgaXQgaWYgc3VjaCBmdW5jdGlvbmFsaXR5IGlzbid0IHJlcXVpcmVkLiAtLT5cbiAgICA8ZGlzdHJpYnV0ZWRfZGRsPlxuICAgICAgICA8IS0tIFBhdGggaW4gWm9vS2VlcGVyIHRvIHF1ZXVlIHdpdGggRERMIHF1ZXJpZXMgLS0+XG4gICAgICAgIDxwYXRoPi9jbGlja2hvdXNlL3Rhc2tfcXVldWUvZGRsPC9wYXRoPlxuXG4gICAgICAgIDwhLS0gU2V0dGluZ3MgZnJvbSB0aGlzIHByb2ZpbGUgd2lsbCBiZSB1c2VkIHRvIGV4ZWN1dGUgRERMIHF1ZXJpZXMgLS0+XG4gICAgICAgIDwhLS0gPHByb2ZpbGU+ZGVmYXVsdDwvcHJvZmlsZT4gLS0+XG5cbiAgICAgICAgPCEtLSBDb250cm9scyBob3cgbXVjaCBPTiBDTFVTVEVSIHF1ZXJpZXMgY2FuIGJlIHJ1biBzaW11bHRhbmVvdXNseS4gLS0+XG4gICAgICAgIDwhLS0gPHBvb2xfc2l6ZT4xPC9wb29sX3NpemU+IC0tPlxuXG4gICAgICAgIDwhLS1cbiAgICAgICAgICAgICBDbGVhbnVwIHNldHRpbmdzIChhY3RpdmUgdGFza3Mgd2lsbCBub3QgYmUgcmVtb3ZlZClcbiAgICAgICAgLS0+XG5cbiAgICAgICAgPCEtLSBDb250cm9scyB0YXNrIFRUTCAoZGVmYXVsdCAxIHdlZWspIC0tPlxuICAgICAgICA8IS0tIDx0YXNrX21heF9saWZldGltZT42MDQ4MDA8L3Rhc2tfbWF4X2xpZmV0aW1lPiAtLT5cblxuICAgICAgICA8IS0tIENvbnRyb2xzIGhvdyBvZnRlbiBjbGVhbnVwIHNob3VsZCBiZSBwZXJmb3JtZWQgKGluIHNlY29uZHMpIC0tPlxuICAgICAgICA8IS0tIDxjbGVhbnVwX2RlbGF5X3BlcmlvZD42MDwvY2xlYW51cF9kZWxheV9wZXJpb2Q+IC0tPlxuXG4gICAgICAgIDwhLS0gQ29udHJvbHMgaG93IG1hbnkgdGFza3MgY291bGQgYmUgaW4gdGhlIHF1ZXVlIC0tPlxuICAgICAgICA8IS0tIDxtYXhfdGFza3NfaW5fcXVldWU+MTAwMDwvbWF4X3Rhc2tzX2luX3F1ZXVlPiAtLT5cbiAgICA8L2Rpc3RyaWJ1dGVkX2RkbD5cblxuICAgIDwhLS0gU2V0dGluZ3MgdG8gZmluZSB0dW5lIE1lcmdlVHJlZSB0YWJsZXMuIFNlZSBkb2N1bWVudGF0aW9uIGluIHNvdXJjZSBjb2RlLCBpbiBNZXJnZVRyZWVTZXR0aW5ncy5oIC0tPlxuICAgIDwhLS1cbiAgICA8bWVyZ2VfdHJlZT5cbiAgICAgICAgPG1heF9zdXNwaWNpb3VzX2Jyb2tlbl9wYXJ0cz41PC9tYXhfc3VzcGljaW91c19icm9rZW5fcGFydHM+XG4gICAgPC9tZXJnZV90cmVlPlxuICAgIC0tPlxuXG4gICAgPCEtLSBQcm90ZWN0aW9uIGZyb20gYWNjaWRlbnRhbCBEUk9QLlxuICAgICAgICAgSWYgc2l6ZSBvZiBhIE1lcmdlVHJlZSB0YWJsZSBpcyBncmVhdGVyIHRoYW4gbWF4X3RhYmxlX3NpemVfdG9fZHJvcCAoaW4gYnl0ZXMpIHRoYW4gdGFibGUgY291bGQgbm90IGJlIGRyb3BwZWQgd2l0aCBhbnkgRFJPUCBxdWVyeS5cbiAgICAgICAgIElmIHlvdSB3YW50IGRvIGRlbGV0ZSBvbmUgdGFibGUgYW5kIGRvbid0IHdhbnQgdG8gY2hhbmdlIGNsaWNraG91c2Utc2VydmVyIGNvbmZpZywgeW91IGNvdWxkIGNyZWF0ZSBzcGVjaWFsIGZpbGUgPGNsaWNraG91c2UtcGF0aD4vZmxhZ3MvZm9yY2VfZHJvcF90YWJsZSBhbmQgbWFrZSBEUk9QIG9uY2UuXG4gICAgICAgICBCeSBkZWZhdWx0IG1heF90YWJsZV9zaXplX3RvX2Ryb3AgaXMgNTBHQjsgbWF4X3RhYmxlX3NpemVfdG9fZHJvcD0wIGFsbG93cyB0byBEUk9QIGFueSB0YWJsZXMuXG4gICAgICAgICBUaGUgc2FtZSBmb3IgbWF4X3BhcnRpdGlvbl9zaXplX3RvX2Ryb3AuXG4gICAgICAgICBVbmNvbW1lbnQgdG8gZGlzYWJsZSBwcm90ZWN0aW9uLlxuICAgIC0tPlxuICAgIDwhLS0gPG1heF90YWJsZV9zaXplX3RvX2Ryb3A+MDwvbWF4X3RhYmxlX3NpemVfdG9fZHJvcD4gLS0+XG4gICAgPCEtLSA8bWF4X3BhcnRpdGlvbl9zaXplX3RvX2Ryb3A+MDwvbWF4X3BhcnRpdGlvbl9zaXplX3RvX2Ryb3A+IC0tPlxuXG4gICAgPCEtLSBFeGFtcGxlIG9mIHBhcmFtZXRlcnMgZm9yIEdyYXBoaXRlTWVyZ2VUcmVlIHRhYmxlIGVuZ2luZSAtLT5cbiAgICA8Z3JhcGhpdGVfcm9sbHVwX2V4YW1wbGU+XG4gICAgICAgIDxwYXR0ZXJuPlxuICAgICAgICAgICAgPHJlZ2V4cD5jbGlja19jb3N0PC9yZWdleHA+XG4gICAgICAgICAgICA8ZnVuY3Rpb24+YW55PC9mdW5jdGlvbj5cbiAgICAgICAgICAgIDxyZXRlbnRpb24+XG4gICAgICAgICAgICAgICAgPGFnZT4wPC9hZ2U+XG4gICAgICAgICAgICAgICAgPHByZWNpc2lvbj4zNjAwPC9wcmVjaXNpb24+XG4gICAgICAgICAgICA8L3JldGVudGlvbj5cbiAgICAgICAgICAgIDxyZXRlbnRpb24+XG4gICAgICAgICAgICAgICAgPGFnZT44NjQwMDwvYWdlPlxuICAgICAgICAgICAgICAgIDxwcmVjaXNpb24+NjA8L3ByZWNpc2lvbj5cbiAgICAgICAgICAgIDwvcmV0ZW50aW9uPlxuICAgICAgICA8L3BhdHRlcm4+XG4gICAgICAgIDxkZWZhdWx0PlxuICAgICAgICAgICAgPGZ1bmN0aW9uPm1heDwvZnVuY3Rpb24+XG4gICAgICAgICAgICA8cmV0ZW50aW9uPlxuICAgICAgICAgICAgICAgIDxhZ2U+MDwvYWdlPlxuICAgICAgICAgICAgICAgIDxwcmVjaXNpb24+NjA8L3ByZWNpc2lvbj5cbiAgICAgICAgICAgIDwvcmV0ZW50aW9uPlxuICAgICAgICAgICAgPHJldGVudGlvbj5cbiAgICAgICAgICAgICAgICA8YWdlPjM2MDA8L2FnZT5cbiAgICAgICAgICAgICAgICA8cHJlY2lzaW9uPjMwMDwvcHJlY2lzaW9uPlxuICAgICAgICAgICAgPC9yZXRlbnRpb24+XG4gICAgICAgICAgICA8cmV0ZW50aW9uPlxuICAgICAgICAgICAgICAgIDxhZ2U+ODY0MDA8L2FnZT5cbiAgICAgICAgICAgICAgICA8cHJlY2lzaW9uPjM2MDA8L3ByZWNpc2lvbj5cbiAgICAgICAgICAgIDwvcmV0ZW50aW9uPlxuICAgICAgICA8L2RlZmF1bHQ+XG4gICAgPC9ncmFwaGl0ZV9yb2xsdXBfZXhhbXBsZT5cblxuICAgIDwhLS0gRGlyZWN0b3J5IGluIDxjbGlja2hvdXNlLXBhdGg+IGNvbnRhaW5pbmcgc2NoZW1hIGZpbGVzIGZvciB2YXJpb3VzIGlucHV0IGZvcm1hdHMuXG4gICAgICAgICBUaGUgZGlyZWN0b3J5IHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgLS0+XG4gICAgPGZvcm1hdF9zY2hlbWFfcGF0aD4vdmFyL2xpYi9jbGlja2hvdXNlL2Zvcm1hdF9zY2hlbWFzLzwvZm9ybWF0X3NjaGVtYV9wYXRoPlxuXG4gICAgPCEtLSBEZWZhdWx0IHF1ZXJ5IG1hc2tpbmcgcnVsZXMsIG1hdGNoaW5nIGxpbmVzIHdvdWxkIGJlIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nIGVsc2UgaW4gdGhlIGxvZ3NcbiAgICAgICAgKGJvdGggdGV4dCBsb2dzIGFuZCBzeXN0ZW0ucXVlcnlfbG9nKS5cbiAgICAgICAgbmFtZSAtIG5hbWUgZm9yIHRoZSBydWxlIChvcHRpb25hbClcbiAgICAgICAgcmVnZXhwIC0gUkUyIGNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9uIChtYW5kYXRvcnkpXG4gICAgICAgIHJlcGxhY2UgLSBzdWJzdGl0dXRpb24gc3RyaW5nIGZvciBzZW5zaXRpdmUgZGF0YSAob3B0aW9uYWwsIGJ5IGRlZmF1bHQgLSBzaXggYXN0ZXJpc2tzKVxuICAgIC0tPlxuICAgIDxxdWVyeV9tYXNraW5nX3J1bGVzPlxuICAgICAgICA8cnVsZT5cbiAgICAgICAgICAgIDxuYW1lPmhpZGUgZW5jcnlwdC9kZWNyeXB0IGFyZ3VtZW50czwvbmFtZT5cbiAgICAgICAgICAgIDxyZWdleHA+KCg/OmFlc18pPyg/OmVuY3J5cHR8ZGVjcnlwdCkoPzpfbXlzcWwpPylcXFxccypcXFxcKFxcXFxzKig/OicoPzpcXFxcJ3wuKSsnfC4qPylcXFxccypcXFxcKTwvcmVnZXhwPlxuICAgICAgICAgICAgPCEtLSBvciBtb3JlIHNlY3VyZSwgYnV0IGFsc28gbW9yZSBpbnZhc2l2ZTpcbiAgICAgICAgICAgICAgICAoYWVzX1xcXFx3KylcXFxccypcXFxcKC4qXFxcXClcbiAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPHJlcGxhY2U+XFxcXDEoPz8/KTwvcmVwbGFjZT5cbiAgICAgICAgPC9ydWxlPlxuICAgIDwvcXVlcnlfbWFza2luZ19ydWxlcz5cblxuICAgIDwhLS0gVW5jb21tZW50IHRvIHVzZSBjdXN0b20gaHR0cCBoYW5kbGVycy5cbiAgICAgICAgcnVsZXMgYXJlIGNoZWNrZWQgZnJvbSB0b3AgdG8gYm90dG9tLCBmaXJzdCBtYXRjaCBydW5zIHRoZSBoYW5kbGVyXG4gICAgICAgICAgICB1cmwgLSB0byBtYXRjaCByZXF1ZXN0IFVSTCwgeW91IGNhbiB1c2UgJ3JlZ2V4OicgcHJlZml4IHRvIHVzZSByZWdleCBtYXRjaChvcHRpb25hbClcbiAgICAgICAgICAgIG1ldGhvZHMgLSB0byBtYXRjaCByZXF1ZXN0IG1ldGhvZCwgeW91IGNhbiB1c2UgY29tbWFzIHRvIHNlcGFyYXRlIG11bHRpcGxlIG1ldGhvZCBtYXRjaGVzKG9wdGlvbmFsKVxuICAgICAgICAgICAgaGVhZGVycyAtIHRvIG1hdGNoIHJlcXVlc3QgaGVhZGVycywgbWF0Y2ggZWFjaCBjaGlsZCBlbGVtZW50KGNoaWxkIGVsZW1lbnQgbmFtZSBpcyBoZWFkZXIgbmFtZSksIHlvdSBjYW4gdXNlICdyZWdleDonIHByZWZpeCB0byB1c2UgcmVnZXggbWF0Y2gob3B0aW9uYWwpXG4gICAgICAgIGhhbmRsZXIgaXMgcmVxdWVzdCBoYW5kbGVyXG4gICAgICAgICAgICB0eXBlIC0gc3VwcG9ydGVkIHR5cGVzOiBzdGF0aWMsIGR5bmFtaWNfcXVlcnlfaGFuZGxlciwgcHJlZGVmaW5lZF9xdWVyeV9oYW5kbGVyXG4gICAgICAgICAgICBxdWVyeSAtIHVzZSB3aXRoIHByZWRlZmluZWRfcXVlcnlfaGFuZGxlciB0eXBlLCBleGVjdXRlcyBxdWVyeSB3aGVuIHRoZSBoYW5kbGVyIGlzIGNhbGxlZFxuICAgICAgICAgICAgcXVlcnlfcGFyYW1fbmFtZSAtIHVzZSB3aXRoIGR5bmFtaWNfcXVlcnlfaGFuZGxlciB0eXBlLCBleHRyYWN0cyBhbmQgZXhlY3V0ZXMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIDxxdWVyeV9wYXJhbV9uYW1lPiB2YWx1ZSBpbiBIVFRQIHJlcXVlc3QgcGFyYW1zXG4gICAgICAgICAgICBzdGF0dXMgLSB1c2Ugd2l0aCBzdGF0aWMgdHlwZSwgcmVzcG9uc2Ugc3RhdHVzIGNvZGVcbiAgICAgICAgICAgIGNvbnRlbnRfdHlwZSAtIHVzZSB3aXRoIHN0YXRpYyB0eXBlLCByZXNwb25zZSBjb250ZW50LXR5cGVcbiAgICAgICAgICAgIHJlc3BvbnNlX2NvbnRlbnQgLSB1c2Ugd2l0aCBzdGF0aWMgdHlwZSwgUmVzcG9uc2UgY29udGVudCBzZW50IHRvIGNsaWVudCwgd2hlbiB1c2luZyB0aGUgcHJlZml4ICdmaWxlOi8vJyBvciAnY29uZmlnOi8vJywgZmluZCB0aGUgY29udGVudCBmcm9tIHRoZSBmaWxlIG9yIGNvbmZpZ3VyYXRpb24gc2VuZCB0byBjbGllbnQuXG5cbiAgICA8aHR0cF9oYW5kbGVycz5cbiAgICAgICAgPHJ1bGU+XG4gICAgICAgICAgICA8dXJsPi88L3VybD5cbiAgICAgICAgICAgIDxtZXRob2RzPlBPU1QsR0VUPC9tZXRob2RzPlxuICAgICAgICAgICAgPGhlYWRlcnM+PHByYWdtYT5uby1jYWNoZTwvcHJhZ21hPjwvaGVhZGVycz5cbiAgICAgICAgICAgIDxoYW5kbGVyPlxuICAgICAgICAgICAgICAgIDx0eXBlPmR5bmFtaWNfcXVlcnlfaGFuZGxlcjwvdHlwZT5cbiAgICAgICAgICAgICAgICA8cXVlcnlfcGFyYW1fbmFtZT5xdWVyeTwvcXVlcnlfcGFyYW1fbmFtZT5cbiAgICAgICAgICAgIDwvaGFuZGxlcj5cbiAgICAgICAgPC9ydWxlPlxuXG4gICAgICAgIDxydWxlPlxuICAgICAgICAgICAgPHVybD4vcHJlZGVmaW5lZF9xdWVyeTwvdXJsPlxuICAgICAgICAgICAgPG1ldGhvZHM+UE9TVCxHRVQ8L21ldGhvZHM+XG4gICAgICAgICAgICA8aGFuZGxlcj5cbiAgICAgICAgICAgICAgICA8dHlwZT5wcmVkZWZpbmVkX3F1ZXJ5X2hhbmRsZXI8L3R5cGU+XG4gICAgICAgICAgICAgICAgPHF1ZXJ5PlNFTEVDVCAqIEZST00gc3lzdGVtLnNldHRpbmdzPC9xdWVyeT5cbiAgICAgICAgICAgIDwvaGFuZGxlcj5cbiAgICAgICAgPC9ydWxlPlxuXG4gICAgICAgIDxydWxlPlxuICAgICAgICAgICAgPGhhbmRsZXI+XG4gICAgICAgICAgICAgICAgPHR5cGU+c3RhdGljPC90eXBlPlxuICAgICAgICAgICAgICAgIDxzdGF0dXM+MjAwPC9zdGF0dXM+XG4gICAgICAgICAgICAgICAgPGNvbnRlbnRfdHlwZT50ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04PC9jb250ZW50X3R5cGU+XG4gICAgICAgICAgICAgICAgPHJlc3BvbnNlX2NvbnRlbnQ+Y29uZmlnOi8vaHR0cF9zZXJ2ZXJfZGVmYXVsdF9yZXNwb25zZTwvcmVzcG9uc2VfY29udGVudD5cbiAgICAgICAgICAgIDwvaGFuZGxlcj5cbiAgICAgICAgPC9ydWxlPlxuICAgIDwvaHR0cF9oYW5kbGVycz5cbiAgICAtLT5cblxuICAgIDxzZW5kX2NyYXNoX3JlcG9ydHM+XG4gICAgICAgIDwhLS0gQ2hhbmdpbmcgPGVuYWJsZWQ+IHRvIHRydWUgYWxsb3dzIHNlbmRpbmcgY3Jhc2ggcmVwb3J0cyB0byAtLT5cbiAgICAgICAgPCEtLSB0aGUgQ2xpY2tIb3VzZSBjb3JlIGRldmVsb3BlcnMgdGVhbSB2aWEgU2VudHJ5IGh0dHBzOi8vc2VudHJ5LmlvIC0tPlxuICAgICAgICA8IS0tIERvaW5nIHNvIGF0IGxlYXN0IGluIHByZS1wcm9kdWN0aW9uIGVudmlyb25tZW50cyBpcyBoaWdobHkgYXBwcmVjaWF0ZWQgLS0+XG4gICAgICAgIDxlbmFibGVkPmZhbHNlPC9lbmFibGVkPlxuICAgICAgICA8IS0tIENoYW5nZSA8YW5vbnltaXplPiB0byB0cnVlIGlmIHlvdSBkb24ndCBmZWVsIGNvbWZvcnRhYmxlIGF0dGFjaGluZyB0aGUgc2VydmVyIGhvc3RuYW1lIHRvIHRoZSBjcmFzaCByZXBvcnQgLS0+XG4gICAgICAgIDxhbm9ueW1pemU+ZmFsc2U8L2Fub255bWl6ZT5cbiAgICAgICAgPCEtLSBEZWZhdWx0IGVuZHBvaW50IHNob3VsZCBiZSBjaGFuZ2VkIHRvIGRpZmZlcmVudCBTZW50cnkgRFNOIG9ubHkgaWYgeW91IGhhdmUgLS0+XG4gICAgICAgIDwhLS0gc29tZSBpbi1ob3VzZSBlbmdpbmVlcnMgb3IgaGlyZWQgY29uc3VsdGFudHMgd2hvJ3JlIGdvaW5nIHRvIGRlYnVnIENsaWNrSG91c2UgaXNzdWVzIGZvciB5b3UgLS0+XG4gICAgICAgIDxlbmRwb2ludD5odHRwczovLzZmMzMwMzRjZmU2ODRkZDdhM2FiOTg3NWU1N2IxYzhkQG8zODg4NzAuaW5nZXN0LnNlbnRyeS5pby81MjI2Mjc3PC9lbmRwb2ludD5cbiAgICA8L3NlbmRfY3Jhc2hfcmVwb3J0cz5cblxuICAgIDwhLS0gVW5jb21tZW50IHRvIGRpc2FibGUgQ2xpY2tIb3VzZSBpbnRlcm5hbCBETlMgY2FjaGluZy4gLS0+XG4gICAgPCEtLSA8ZGlzYWJsZV9pbnRlcm5hbF9kbnNfY2FjaGU+MTwvZGlzYWJsZV9pbnRlcm5hbF9kbnNfY2FjaGU+IC0tPlxuXG4gICAgPCEtLSBZb3UgY2FuIGFsc28gY29uZmlndXJlIHJvY2tzZGIgbGlrZSB0aGlzOiAtLT5cbiAgICA8IS0tXG4gICAgPHJvY2tzZGI+XG4gICAgICAgIDxvcHRpb25zPlxuICAgICAgICAgICAgPG1heF9iYWNrZ3JvdW5kX2pvYnM+ODwvbWF4X2JhY2tncm91bmRfam9icz5cbiAgICAgICAgPC9vcHRpb25zPlxuICAgICAgICA8Y29sdW1uX2ZhbWlseV9vcHRpb25zPlxuICAgICAgICAgICAgPG51bV9sZXZlbHM+MjwvbnVtX2xldmVscz5cbiAgICAgICAgPC9jb2x1bW5fZmFtaWx5X29wdGlvbnM+XG4gICAgICAgIDx0YWJsZXM+XG4gICAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICAgICAgPG5hbWU+VEFCTEU8L25hbWU+XG4gICAgICAgICAgICAgICAgPG9wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxtYXhfYmFja2dyb3VuZF9qb2JzPjg8L21heF9iYWNrZ3JvdW5kX2pvYnM+XG4gICAgICAgICAgICAgICAgPC9vcHRpb25zPlxuICAgICAgICAgICAgICAgIDxjb2x1bW5fZmFtaWx5X29wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxudW1fbGV2ZWxzPjI8L251bV9sZXZlbHM+XG4gICAgICAgICAgICAgICAgPC9jb2x1bW5fZmFtaWx5X29wdGlvbnM+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L3RhYmxlcz5cbiAgICA8L3JvY2tzZGI+XG4gICAgLS0+XG5cbiAgICA8IS0tIFVuY29tbWVudCBpZiBlbmFibGUgbWVyZ2UgdHJlZSBtZXRhZGF0YSBjYWNoZSAtLT5cbiAgICA8bWVyZ2VfdHJlZV9tZXRhZGF0YV9jYWNoZT5cbiAgICAgICAgPGxydV9jYWNoZV9zaXplPjI2ODQzNTQ1NjwvbHJ1X2NhY2hlX3NpemU+XG4gICAgICAgIDxjb250aW51ZV9pZl9jb3JydXB0ZWQ+dHJ1ZTwvY29udGludWVfaWZfY29ycnVwdGVkPlxuICAgIDwvbWVyZ2VfdHJlZV9tZXRhZGF0YV9jYWNoZT5cbjwvY2xpY2tob3VzZT5cblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi9jbGlja2hvdXNlL2NsdXN0ZXIueG1sXCJcbmNvbnRlbnQgPSBcIlwiXCJcbjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48Y2xpY2tob3VzZT5cbiAgICA8IS0tIFpvb0tlZXBlciBpcyB1c2VkIHRvIHN0b3JlIG1ldGFkYXRhIGFib3V0IHJlcGxpY2FzLCB3aGVuIHVzaW5nIFJlcGxpY2F0ZWQgdGFibGVzLlxuICAgICAgICAgT3B0aW9uYWwuIElmIHlvdSBkb24ndCB1c2UgcmVwbGljYXRlZCB0YWJsZXMsIHlvdSBjb3VsZCBvbWl0IHRoYXQuXG5cbiAgICAgICAgIFNlZSBodHRwczovL2NsaWNraG91c2UuY29tL2RvY3MvZW4vZW5naW5lcy90YWJsZS1lbmdpbmVzL21lcmdldHJlZS1mYW1pbHkvcmVwbGljYXRpb24vXG4gICAgICAtLT5cbiAgICA8em9va2VlcGVyPlxuICAgICAgICA8bm9kZSBpbmRleD1cIjFcIj5cbiAgICAgICAgICAgIDxob3N0Pnpvb2tlZXBlci0xPC9ob3N0PlxuICAgICAgICAgICAgPHBvcnQ+MjE4MTwvcG9ydD5cbiAgICAgICAgPC9ub2RlPlxuICAgICAgICA8IS0tIDxub2RlIGluZGV4PVwiMlwiPlxuICAgICAgICAgICAgPGhvc3Q+em9va2VlcGVyLTI8L2hvc3Q+XG4gICAgICAgICAgICA8cG9ydD4yMTgxPC9wb3J0PlxuICAgICAgICA8L25vZGU+XG4gICAgICAgIDxub2RlIGluZGV4PVwiM1wiPlxuICAgICAgICAgICAgPGhvc3Q+em9va2VlcGVyLTM8L2hvc3Q+XG4gICAgICAgICAgICA8cG9ydD4yMTgxPC9wb3J0PlxuICAgICAgICA8L25vZGU+IC0tPlxuICAgIDwvem9va2VlcGVyPlxuXG4gICAgPCEtLSBDb25maWd1cmF0aW9uIG9mIGNsdXN0ZXJzIHRoYXQgY291bGQgYmUgdXNlZCBpbiBEaXN0cmlidXRlZCB0YWJsZXMuXG4gICAgICAgICBodHRwczovL2NsaWNraG91c2UuY29tL2RvY3MvZW4vb3BlcmF0aW9ucy90YWJsZV9lbmdpbmVzL2Rpc3RyaWJ1dGVkL1xuICAgICAgLS0+XG4gICAgPHJlbW90ZV9zZXJ2ZXJzPlxuICAgICAgICA8Y2x1c3Rlcj5cbiAgICAgICAgICAgIDwhLS0gSW50ZXItc2VydmVyIHBlci1jbHVzdGVyIHNlY3JldCBmb3IgRGlzdHJpYnV0ZWQgcXVlcmllc1xuICAgICAgICAgICAgICAgICBkZWZhdWx0OiBubyBzZWNyZXQgKG5vIGF1dGhlbnRpY2F0aW9uIHdpbGwgYmUgcGVyZm9ybWVkKVxuXG4gICAgICAgICAgICAgICAgIElmIHNldCwgdGhlbiBEaXN0cmlidXRlZCBxdWVyaWVzIHdpbGwgYmUgdmFsaWRhdGVkIG9uIHNoYXJkcywgc28gYXQgbGVhc3Q6XG4gICAgICAgICAgICAgICAgIC0gc3VjaCBjbHVzdGVyIHNob3VsZCBleGlzdCBvbiB0aGUgc2hhcmQsXG4gICAgICAgICAgICAgICAgIC0gc3VjaCBjbHVzdGVyIHNob3VsZCBoYXZlIHRoZSBzYW1lIHNlY3JldC5cblxuICAgICAgICAgICAgICAgICBBbmQgYWxzbyAoYW5kIHdoaWNoIGlzIG1vcmUgaW1wb3J0YW50KSwgdGhlIGluaXRpYWxfdXNlciB3aWxsXG4gICAgICAgICAgICAgICAgIGJlIHVzZWQgYXMgY3VycmVudCB1c2VyIGZvciB0aGUgcXVlcnkuXG5cbiAgICAgICAgICAgICAgICAgUmlnaHQgbm93IHRoZSBwcm90b2NvbCBpcyBwcmV0dHkgc2ltcGxlIGFuZCBpdCBvbmx5IHRha2VzIGludG8gYWNjb3VudDpcbiAgICAgICAgICAgICAgICAgLSBjbHVzdGVyIG5hbWVcbiAgICAgICAgICAgICAgICAgLSBxdWVyeVxuXG4gICAgICAgICAgICAgICAgIEFsc28gaXQgd2lsbCBiZSBuaWNlIGlmIHRoZSBmb2xsb3dpbmcgd2lsbCBiZSBpbXBsZW1lbnRlZDpcbiAgICAgICAgICAgICAgICAgLSBzb3VyY2UgaG9zdG5hbWUgKHNlZSBpbnRlcnNlcnZlcl9odHRwX2hvc3QpLCBidXQgdGhlbiBpdCB3aWxsIGRlcGVuZHMgZnJvbSBETlMsXG4gICAgICAgICAgICAgICAgICAgaXQgY2FuIHVzZSBJUCBhZGRyZXNzIGluc3RlYWQsIGJ1dCB0aGVuIHRoZSB5b3UgbmVlZCB0byBnZXQgY29ycmVjdCBvbiB0aGUgaW5pdGlhdG9yIG5vZGUuXG4gICAgICAgICAgICAgICAgIC0gdGFyZ2V0IGhvc3RuYW1lIC8gaXAgYWRkcmVzcyAoc2FtZSBub3RlcyBhcyBmb3Igc291cmNlIGhvc3RuYW1lKVxuICAgICAgICAgICAgICAgICAtIHRpbWUtYmFzZWQgc2VjdXJpdHkgdG9rZW5zXG4gICAgICAgICAgICAtLT5cbiAgICAgICAgICAgIDwhLS0gPHNlY3JldD48L3NlY3JldD4gLS0+XG4gICAgICAgICAgICA8c2hhcmQ+XG4gICAgICAgICAgICAgICAgPCEtLSBPcHRpb25hbC4gV2hldGhlciB0byB3cml0ZSBkYXRhIHRvIGp1c3Qgb25lIG9mIHRoZSByZXBsaWNhcy4gRGVmYXVsdDogZmFsc2UgKHdyaXRlIGRhdGEgdG8gYWxsIHJlcGxpY2FzKS4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8aW50ZXJuYWxfcmVwbGljYXRpb24+ZmFsc2U8L2ludGVybmFsX3JlcGxpY2F0aW9uPiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbmFsLiBTaGFyZCB3ZWlnaHQgd2hlbiB3cml0aW5nIGRhdGEuIERlZmF1bHQ6IDEuIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gPHdlaWdodD4xPC93ZWlnaHQ+IC0tPlxuICAgICAgICAgICAgICAgIDxyZXBsaWNhPlxuICAgICAgICAgICAgICAgICAgICA8aG9zdD5jbGlja2hvdXNlPC9ob3N0PlxuICAgICAgICAgICAgICAgICAgICA8cG9ydD45MDAwPC9wb3J0PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbmFsLiBQcmlvcml0eSBvZiB0aGUgcmVwbGljYSBmb3IgbG9hZF9iYWxhbmNpbmcuIERlZmF1bHQ6IDEgKGxlc3MgdmFsdWUgaGFzIG1vcmUgcHJpb3JpdHkpLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8cHJpb3JpdHk+MTwvcHJpb3JpdHk+IC0tPlxuICAgICAgICAgICAgICAgIDwvcmVwbGljYT5cbiAgICAgICAgICAgIDwvc2hhcmQ+XG4gICAgICAgICAgICA8IS0tIDxzaGFyZD5cbiAgICAgICAgICAgICAgICA8cmVwbGljYT5cbiAgICAgICAgICAgICAgICAgICAgPGhvc3Q+Y2xpY2tob3VzZS0yPC9ob3N0PlxuICAgICAgICAgICAgICAgICAgICA8cG9ydD45MDAwPC9wb3J0PlxuICAgICAgICAgICAgICAgIDwvcmVwbGljYT5cbiAgICAgICAgICAgIDwvc2hhcmQ+XG4gICAgICAgICAgICA8c2hhcmQ+XG4gICAgICAgICAgICAgICAgPHJlcGxpY2E+XG4gICAgICAgICAgICAgICAgICAgIDxob3N0PmNsaWNraG91c2UtMzwvaG9zdD5cbiAgICAgICAgICAgICAgICAgICAgPHBvcnQ+OTAwMDwvcG9ydD5cbiAgICAgICAgICAgICAgICA8L3JlcGxpY2E+XG4gICAgICAgICAgICA8L3NoYXJkPiAtLT5cbiAgICAgICAgPC9jbHVzdGVyPlxuICAgIDwvcmVtb3RlX3NlcnZlcnM+XG48L2NsaWNraG91c2U+XG5cIlwiXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCIvY2xpY2tob3VzZS9kb2NrZXJfcmVsYXRlZF9jb25maWcueG1sXCJcbmNvbnRlbnQgPSBcIlwiXCJcbjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48Y2xpY2tob3VzZT5cbiAgICA8IS0tIE92ZXJyaWRlcyB0aGUgZG9ja2VyIGltYWdlJ3MgZGVmYXVsdCBjb25maWcuZC9kb2NrZXJfcmVsYXRlZF9jb25maWcueG1sLFxuICAgICAgICAgd2hpY2ggbGlzdGVucyBvbiB0aGUgSVB2NiB3aWxkY2FyZCBhZGRyZXNzIChbOjpdKSBmaXJzdC4gT24gaG9zdHMgd2l0aG91dFxuICAgICAgICAgSVB2NiBzdXBwb3J0IHRoZSBiaW5kIGZhaWxzLCBzbyBsaXN0ZW4gb24gSVB2NCBvbmx5LiAtLT5cbiAgICA8bGlzdGVuX2hvc3Q+MC4wLjAuMDwvbGlzdGVuX2hvc3Q+XG4gICAgPGxpc3Rlbl90cnk+MTwvbGlzdGVuX3RyeT5cbiAgICA8IS0tIENvbnRhaW5lciBJUHMgY2FuIGNoYW5nZSBhbmQgRE5TIHJlY29yZHMgKHpvb2tlZXBlci0xLCBjbGlja2hvdXNlKSBtYXkgbm90XG4gICAgICAgICBiZSByZWFkeSB0aGUgbW9tZW50IENsaWNrSG91c2Ugc3RhcnRzLiBEbyBub3QgY2FjaGUgRE5TIGxvb2t1cCBmYWlsdXJlcy4gLS0+XG4gICAgPGRpc2FibGVfaW50ZXJuYWxfZG5zX2NhY2hlPjE8L2Rpc2FibGVfaW50ZXJuYWxfZG5zX2NhY2hlPlxuPC9jbGlja2hvdXNlPlxuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL3NpZ25vei9wcm9tZXRoZXVzLnltbFwiXG5jb250ZW50ID0gXCJcIlwiXG4jIG15IGdsb2JhbCBjb25maWdcbmdsb2JhbDpcbiAgc2NyYXBlX2ludGVydmFsOiAgICAgNXMgIyBTZXQgdGhlIHNjcmFwZSBpbnRlcnZhbCB0byBldmVyeSAxNSBzZWNvbmRzLiBEZWZhdWx0IGlzIGV2ZXJ5IDEgbWludXRlLlxuICBldmFsdWF0aW9uX2ludGVydmFsOiAxNXMgIyBFdmFsdWF0ZSBydWxlcyBldmVyeSAxNSBzZWNvbmRzLiBUaGUgZGVmYXVsdCBpcyBldmVyeSAxIG1pbnV0ZS5cbiAgIyBzY3JhcGVfdGltZW91dCBpcyBzZXQgdG8gdGhlIGdsb2JhbCBkZWZhdWx0ICgxMHMpLlxuXG4jIEFsZXJ0bWFuYWdlciBjb25maWd1cmF0aW9uXG5hbGVydGluZzpcbiAgYWxlcnRtYW5hZ2VyczpcbiAgLSBzdGF0aWNfY29uZmlnczpcbiAgICAtIHRhcmdldHM6XG4gICAgICAtIGFsZXJ0bWFuYWdlcjo5MDkzXG5cbiMgTG9hZCBydWxlcyBvbmNlIGFuZCBwZXJpb2RpY2FsbHkgZXZhbHVhdGUgdGhlbSBhY2NvcmRpbmcgdG8gdGhlIGdsb2JhbCAnZXZhbHVhdGlvbl9pbnRlcnZhbCcuXG5ydWxlX2ZpbGVzOiBbXVxuICAjIC0gXCJmaXJzdF9ydWxlcy55bWxcIlxuICAjIC0gXCJzZWNvbmRfcnVsZXMueW1sXCJcbiAgIyAtICdhbGVydHMueW1sJ1xuXG4jIEEgc2NyYXBlIGNvbmZpZ3VyYXRpb24gY29udGFpbmluZyBleGFjdGx5IG9uZSBlbmRwb2ludCB0byBzY3JhcGU6XG4jIEhlcmUgaXQncyBQcm9tZXRoZXVzIGl0c2VsZi5cbnNjcmFwZV9jb25maWdzOiBbXVxuXG5yZW1vdGVfcmVhZDpcbiAgLSB1cmw6IHRjcDovL2NsaWNraG91c2U6OTAwMC9zaWdub3pfbWV0cmljc1xuXCJcIlwiXG5cbltbY29uZmlnLm1vdW50c11dXG5maWxlUGF0aCA9IFwiL2NvbGxlY3Rvci9vdGVsLWNvbGxlY3Rvci1jb25maWcueWFtbFwiXG5jb250ZW50ID0gXCJcIlwiXG5yZWNlaXZlcnM6XG4gIG90bHA6XG4gICAgcHJvdG9jb2xzOlxuICAgICAgZ3JwYzpcbiAgICAgICAgZW5kcG9pbnQ6IDAuMC4wLjA6NDMxN1xuICAgICAgaHR0cDpcbiAgICAgICAgZW5kcG9pbnQ6IDAuMC4wLjA6NDMxOFxucHJvY2Vzc29yczpcbiAgYmF0Y2g6XG5leHBvcnRlcnM6XG4gIGNsaWNraG91c2V0cmFjZXM6XG4gICAgZGF0YXNvdXJjZTogdGNwOi8vY2xpY2tob3VzZTo5MDAwL3NpZ25vel90cmFjZXNcbiAgICB1c2VfbmV3X3NjaGVtYTogdHJ1ZVxuICBzaWdub3pjbGlja2hvdXNlbWV0cmljczpcbiAgICBkc246IHRjcDovL2NsaWNraG91c2U6OTAwMC9zaWdub3pfbWV0cmljc1xuICAgIHRpbWVvdXQ6IDE1c1xuICBjbGlja2hvdXNlbG9nc2V4cG9ydGVyOlxuICAgIGRzbjogdGNwOi8vY2xpY2tob3VzZTo5MDAwL3NpZ25vel9sb2dzXG4gICAgdGltZW91dDogMTBzXG4gICAgdXNlX25ld19zY2hlbWE6IHRydWVcbiAgbWV0YWRhdGFleHBvcnRlcjpcbiAgICBkc246IHRjcDovL2NsaWNraG91c2U6OTAwMC9zaWdub3pfbWV0YWRhdGFcbiAgICB0aW1lb3V0OiAxMHNcbnNlcnZpY2U6XG4gIHBpcGVsaW5lczpcbiAgICB0cmFjZXM6XG4gICAgICByZWNlaXZlcnM6IFtvdGxwXVxuICAgICAgcHJvY2Vzc29yczogW2JhdGNoXVxuICAgICAgZXhwb3J0ZXJzOiBbY2xpY2tob3VzZXRyYWNlcywgbWV0YWRhdGFleHBvcnRlcl1cbiAgICBtZXRyaWNzOlxuICAgICAgcmVjZWl2ZXJzOiBbb3RscF1cbiAgICAgIHByb2Nlc3NvcnM6IFtiYXRjaF1cbiAgICAgIGV4cG9ydGVyczogW3NpZ25vemNsaWNraG91c2VtZXRyaWNzLCBtZXRhZGF0YWV4cG9ydGVyXVxuICAgIGxvZ3M6XG4gICAgICByZWNlaXZlcnM6IFtvdGxwXVxuICAgICAgcHJvY2Vzc29yczogW2JhdGNoXVxuICAgICAgZXhwb3J0ZXJzOiBbY2xpY2tob3VzZWxvZ3NleHBvcnRlciwgbWV0YWRhdGFleHBvcnRlcl1cblwiXCJcIlxuXG5bW2NvbmZpZy5tb3VudHNdXVxuZmlsZVBhdGggPSBcIi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy9lbXB0eS50eHRcIlxuY29udGVudCA9IFwiXCIiCn0=

Reference files

Configuration

The exact Docker Compose and template configuration this template deploys.

More like this

Free and open source

Self-host SigNoz in minutes

Notploy is a free, open source deployment platform. Deploy SigNoz and 571+ other templates on your own infrastructure with a single click.