PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPkNhY2hpbmcgR3VpZGUgLSBBcGFjaGUgSFRUUCBTZXJ2ZXI8L3RpdGxlPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPgo8bGluayBocmVmPSIuL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Ii4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjI8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZmVhdGhlci5naWYiIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi8iPlZlcnNpb24gMi4yPC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5DYWNoaW5nIEd1aWRlPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuL2VuL2NhY2hpbmcuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvY2FjaGluZy5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vdHIvY2FjaGluZy5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PgoKICAgIDxwPlRoaXMgZG9jdW1lbnQgc3VwcGxlbWVudHMgdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiwKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kaXNrX2NhY2hlLmh0bWwiPm1vZF9kaXNrX2NhY2hlPC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9tZW1fY2FjaGUuaHRtbCI+bW9kX21lbV9jYWNoZTwvYT48L2NvZGU+LAogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCI+bW9kX2ZpbGVfY2FjaGU8L2E+PC9jb2RlPiBhbmQgPGEgaHJlZj0icHJvZ3JhbXMvaHRjYWNoZWNsZWFuLmh0bWwiPmh0Y2FjaGVjbGVhbjwvYT4gcmVmZXJlbmNlIGRvY3VtZW50YXRpb24uCiAgICBJdCBkZXNjcmliZXMgaG93IHRvIHVzZSBBcGFjaGUncyBjYWNoaW5nIGZlYXR1cmVzIHRvIGFjY2VsZXJhdGUgd2ViIGFuZCAKICAgIHByb3h5IHNlcnZpbmcsIHdoaWxlIGF2b2lkaW5nIGNvbW1vbiBwcm9ibGVtcyBhbmQgbWlzY29uZmlndXJhdGlvbnMuPC9wPgogIDwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjx1bCBpZD0idG9jIj48bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2ludHJvZHVjdGlvbiI+SW50cm9kdWN0aW9uPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjb3ZlcnZpZXciPkNhY2hpbmcgT3ZlcnZpZXc8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZWN1cml0eSI+U2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNmaWxlaGFuZGxlIj5GaWxlLUhhbmRsZSBDYWNoaW5nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjaW5tZW1vcnkiPkluLU1lbW9yeSBDYWNoaW5nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZGlzayI+RGlzay1iYXNlZCBDYWNoaW5nPC9hPjwvbGk+CjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iaW50cm9kdWN0aW9uIiBpZD0iaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9oMj4KICAgIAoKICAgIDxwPkFzIG9mIEFwYWNoZSBIVFRQIHNlcnZlciB2ZXJzaW9uIDIuMiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4KICAgIGFuZCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sIj5tb2RfZmlsZV9jYWNoZTwvYT48L2NvZGU+IGFyZSBubyBsb25nZXIgbWFya2VkCiAgICBleHBlcmltZW50YWwgYW5kIGFyZSBjb25zaWRlcmVkIHN1aXRhYmxlIGZvciBwcm9kdWN0aW9uIHVzZS4gVGhlc2UKICAgIGNhY2hpbmcgYXJjaGl0ZWN0dXJlcyBwcm92aWRlIGEgcG93ZXJmdWwgbWVhbnMgdG8gYWNjZWxlcmF0ZSBIVFRQCiAgICBoYW5kbGluZywgYm90aCBhcyBhbiBvcmlnaW4gd2Vic2VydmVyIGFuZCBhcyBhIHByb3h5LjwvcD4KCiAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gYW5kIGl0cyBwcm92aWRlciBtb2R1bGVzIAogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX21lbV9jYWNoZS5odG1sIj5tb2RfbWVtX2NhY2hlPC9hPjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kaXNrX2NhY2hlLmh0bWwiPm1vZF9kaXNrX2NhY2hlPC9hPjwvY29kZT4gCiAgICBwcm92aWRlIGludGVsbGlnZW50LCBIVFRQLWF3YXJlIGNhY2hpbmcuIFRoZSBjb250ZW50IGl0c2VsZiBpcyBzdG9yZWQKICAgIGluIHRoZSBjYWNoZSwgYW5kIG1vZF9jYWNoZSBhaW1zIHRvIGhvbm91ciBhbGwgb2YgdGhlIHZhcmlvdXMgSFRUUAogICAgaGVhZGVycyBhbmQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGNhY2hhYmlsaXR5IG9mIGNvbnRlbnQuIEl0IGNhbgogICAgaGFuZGxlIGJvdGggbG9jYWwgYW5kIHByb3hpZWQgY29udGVudC4gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+CiAgICBpcyBhaW1lZCBhdCBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBjYWNoaW5nIGNvbmZpZ3VyYXRpb25zLCB3aGVyZQogICAgeW91IGFyZSBkZWFsaW5nIHdpdGggcHJveGllZCBjb250ZW50LCBkeW5hbWljIGxvY2FsIGNvbnRlbnQgb3IgCiAgICBoYXZlIGEgbmVlZCB0byBzcGVlZCB1cCBhY2Nlc3MgdG8gbG9jYWwgZmlsZXMgd2hpY2ggY2hhbmdlIHdpdGggCiAgICB0aW1lLjwvcD4KCiAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sIj5tb2RfZmlsZV9jYWNoZTwvYT48L2NvZGU+IG9uIHRoZSBvdGhlciBoYW5kIHByZXNlbnRzIGEgbW9yZQogICAgYmFzaWMsIGJ1dCBzb21ldGltZXMgdXNlZnVsLCBmb3JtIG9mIGNhY2hpbmcuIFJhdGhlciB0aGFuIG1haW50YWluCiAgICB0aGUgY29tcGxleGl0eSBvZiBhY3RpdmVseSBlbnN1cmluZyB0aGUgY2FjaGFiaWxpdHkgb2YgVVJMcywKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwiPm1vZF9maWxlX2NhY2hlPC9hPjwvY29kZT4gb2ZmZXJzIGZpbGUtaGFuZGxlIGFuZCBtZW1vcnktbWFwcGluZyAKICAgIHRyaWNrcyB0byBrZWVwIGEgY2FjaGUgb2YgZmlsZXMgYXMgdGhleSB3ZXJlIHdoZW4gQXBhY2hlIHdhcyBsYXN0IAogICAgc3RhcnRlZC4gQXMgc3VjaCwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCI+bW9kX2ZpbGVfY2FjaGU8L2E+PC9jb2RlPiBpcyBhaW1lZCBhdCBpbXByb3ZpbmcgCiAgICB0aGUgYWNjZXNzIHRpbWUgdG8gbG9jYWwgc3RhdGljIGZpbGVzIHdoaWNoIGRvIG5vdCBjaGFuZ2UgdmVyeQogICAgb2Z0ZW4uPC9wPgoKICAgIDxwPkFzIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwiPm1vZF9maWxlX2NhY2hlPC9hPjwvY29kZT4gcHJlc2VudHMgYSByZWxhdGl2ZWx5IHNpbXBsZQogICAgY2FjaGluZyBpbXBsZW1lbnRhdGlvbiwgYXBhcnQgZnJvbSB0aGUgc3BlY2lmaWMgc2VjdGlvbnMgb24gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCNjYWNoZWZpbGUiPkNhY2hlRmlsZTwvYT48L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI21tYXBmaWxlIj5NTWFwRmlsZTwvYT48L2NvZGU+LCB0aGUgZXhwbGFuYXRpb25zCiAgICBpbiB0aGlzIGd1aWRlIGNvdmVyIHRoZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gY2FjaGluZyAKICAgIGFyY2hpdGVjdHVyZS48L3A+CgogICAgPHA+VG8gZ2V0IHRoZSBtb3N0IGZyb20gdGhpcyBkb2N1bWVudCwgeW91IHNob3VsZCBiZSBmYW1pbGlhciB3aXRoIAogICAgdGhlIGJhc2ljcyBvZiBIVFRQLCBhbmQgaGF2ZSByZWFkIHRoZSBVc2VycycgR3VpZGVzIHRvIAogICAgPGEgaHJlZj0idXJsbWFwcGluZy5odG1sIj5NYXBwaW5nIFVSTHMgdG8gdGhlIEZpbGVzeXN0ZW08L2E+IGFuZCAKICAgIDxhIGhyZWY9ImNvbnRlbnQtbmVnb3RpYXRpb24uaHRtbCI+Q29udGVudCBuZWdvdGlhdGlvbjwvYT4uPC9wPgoKICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im92ZXJ2aWV3IiBpZD0ib3ZlcnZpZXciPkNhY2hpbmcgT3ZlcnZpZXc8L2E+PC9oMj4KCiAgICAKICAgIAogICAgPHRhYmxlIGNsYXNzPSJyZWxhdGVkIj48dHI+PHRoPlJlbGF0ZWQgTW9kdWxlczwvdGg+PHRoPlJlbGF0ZWQgRGlyZWN0aXZlczwvdGg+PC90cj48dHI+PHRkPjx1bD48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX21lbV9jYWNoZS5odG1sIj5tb2RfbWVtX2NhY2hlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZGlza19jYWNoZS5odG1sIj5tb2RfZGlza19jYWNoZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCI+bW9kX2ZpbGVfY2FjaGU8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlZW5hYmxlIj5DYWNoZUVuYWJsZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVkaXNhYmxlIj5DYWNoZURpc2FibGU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwjY2FjaGVmaWxlIj5DYWNoZUZpbGU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwjbW1hcGZpbGUiPk1NYXBGaWxlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjdXNlY2Fub25pY2FsbmFtZSI+VXNlQ2Fub25pY2FsTmFtZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwjY2FjaGVuZWdvdGlhdGVkZG9jcyI+Q2FjaGVOZWdvdGlhdGVkRG9jczwvYT48L2NvZGU+PC9saT48L3VsPjwvdGQ+PC90cj48L3RhYmxlPgoKICAgIDxwPlRoZXJlIGFyZSB0d28gbWFpbiBzdGFnZXMgaW4gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IHRoYXQgY2FuCiAgICBvY2N1ciBpbiB0aGUgbGlmZXRpbWUgb2YgYSByZXF1ZXN0LiBGaXJzdCwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+CiAgICBpcyBhIFVSTCBtYXBwaW5nIG1vZHVsZSwgd2hpY2ggbWVhbnMgdGhhdCBpZiBhIFVSTCBoYXMgYmVlbiBjYWNoZWQsCiAgICBhbmQgdGhlIGNhY2hlZCB2ZXJzaW9uIG9mIHRoYXQgVVJMIGhhcyBub3QgZXhwaXJlZCwgdGhlIHJlcXVlc3Qgd2lsbCAKICAgIGJlIHNlcnZlZCBkaXJlY3RseSBieSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4uPC9wPgoKICAgIDxwPlRoaXMgbWVhbnMgdGhhdCBhbnkgb3RoZXIgc3RhZ2VzIHRoYXQgbWlnaHQgb3JkaW5hcmlseSBoYXBwZW4KICAgIGluIHRoZSBwcm9jZXNzIG9mIHNlcnZpbmcgYSByZXF1ZXN0IC0tIGZvciBleGFtcGxlIGJlaW5nIGhhbmRsZWQKICAgIGJ5IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPiwgb3IgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCI+bW9kX3Jld3JpdGU8L2E+PC9jb2RlPiAtLQogICAgd29uJ3QgaGFwcGVuLiAgQnV0IHRoZW4gdGhpcyBpcyB0aGUgcG9pbnQgb2YgY2FjaGluZyBjb250ZW50IGluCiAgICB0aGUgZmlyc3QgcGxhY2UuPC9wPgoKICAgIDxwPklmIHRoZSBVUkwgaXMgbm90IGZvdW5kIHdpdGhpbiB0aGUgY2FjaGUsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPgogICAgd2lsbCBhZGQgYSA8YSBocmVmPSJmaWx0ZXIuaHRtbCI+ZmlsdGVyPC9hPiB0byB0aGUgcmVxdWVzdCBoYW5kbGluZy4gQWZ0ZXIKICAgIEFwYWNoZSBoYXMgbG9jYXRlZCB0aGUgY29udGVudCBieSB0aGUgdXN1YWwgbWVhbnMsIHRoZSBmaWx0ZXIgd2lsbCBiZSBydW4KICAgIGFzIHRoZSBjb250ZW50IGlzIHNlcnZlZC4gSWYgdGhlIGNvbnRlbnQgaXMgZGV0ZXJtaW5lZCB0byBiZSBjYWNoZWFibGUsIAogICAgdGhlIGNvbnRlbnQgd2lsbCBiZSBzYXZlZCB0byB0aGUgY2FjaGUgZm9yIGZ1dHVyZSBzZXJ2aW5nLjwvcD4KCiAgICA8cD5JZiB0aGUgVVJMIGlzIGZvdW5kIHdpdGhpbiB0aGUgY2FjaGUsIGJ1dCBhbHNvIGZvdW5kIHRvIGhhdmUgZXhwaXJlZCwKICAgIHRoZSBmaWx0ZXIgaXMgYWRkZWQgYW55d2F5LCBidXQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IHdpbGwgY3JlYXRlCiAgICBhIGNvbmRpdGlvbmFsIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQsIHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGVkIHZlcnNpb24KICAgIGlzIHN0aWxsIGN1cnJlbnQuIElmIHRoZSBjYWNoZWQgdmVyc2lvbiBpcyBzdGlsbCBjdXJyZW50LCBpdHMKICAgIG1ldGEtaW5mb3JtYXRpb24gd2lsbCBiZSB1cGRhdGVkIGFuZCB0aGUgcmVxdWVzdCB3aWxsIGJlIHNlcnZlZCBmcm9tIHRoZQogICAgY2FjaGUuIElmIHRoZSBjYWNoZWQgdmVyc2lvbiBpcyBubyBsb25nZXIgY3VycmVudCwgdGhlIGNhY2hlZCB2ZXJzaW9uCiAgICB3aWxsIGJlIGRlbGV0ZWQgYW5kIHRoZSBmaWx0ZXIgd2lsbCBzYXZlIHRoZSB1cGRhdGVkIGNvbnRlbnQgdG8gdGhlIGNhY2hlCiAgICBhcyBpdCBpcyBzZXJ2ZWQuPC9wPgoKICAgIDxoMz5JbXByb3ZpbmcgQ2FjaGUgSGl0czwvaDM+CiAgICAgIAoKICAgICAgPHA+V2hlbiBjYWNoaW5nIGxvY2FsbHkgZ2VuZXJhdGVkIGNvbnRlbnQsIGVuc3VyaW5nIHRoYXQgIAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjdXNlY2Fub25pY2FsbmFtZSI+VXNlQ2Fub25pY2FsTmFtZTwvYT48L2NvZGU+IGlzIHNldCB0byAKICAgICAgPGNvZGU+T248L2NvZGU+IGNhbiBkcmFtYXRpY2FsbHkgaW1wcm92ZSB0aGUgcmF0aW8gb2YgY2FjaGUgaGl0cy4gVGhpcwogICAgICBpcyBiZWNhdXNlIHRoZSBob3N0bmFtZSBvZiB0aGUgdmlydHVhbC1ob3N0IHNlcnZpbmcgdGhlIGNvbnRlbnQgZm9ybXMKICAgICAgYSBwYXJ0IG9mIHRoZSBjYWNoZSBrZXkuIFdpdGggdGhlIHNldHRpbmcgc2V0IHRvIDxjb2RlPk9uPC9jb2RlPgogICAgICB2aXJ0dWFsLWhvc3RzIHdpdGggbXVsdGlwbGUgc2VydmVyIG5hbWVzIG9yIGFsaWFzZXMgd2lsbCBub3QgcHJvZHVjZQogICAgICBkaWZmZXJlbnRseSBjYWNoZWQgZW50aXRpZXMsIGFuZCBpbnN0ZWFkIGNvbnRlbnQgd2lsbCBiZSBjYWNoZWQgYXMKICAgICAgcGVyIHRoZSBjYW5vbmljYWwgaG9zdG5hbWUuPC9wPgoKICAgICAgPHA+QmVjYXVzZSBjYWNoaW5nIGlzIHBlcmZvcm1lZCB3aXRoaW4gdGhlIFVSTCB0byBmaWxlbmFtZSB0cmFuc2xhdGlvbiAKICAgICAgcGhhc2UsIGNhY2hlZCBkb2N1bWVudHMgd2lsbCBvbmx5IGJlIHNlcnZlZCBpbiByZXNwb25zZSB0byBVUkwgcmVxdWVzdHMuCiAgICAgIE9yZGluYXJpbHkgdGhpcyBpcyBvZiBsaXR0bGUgY29uc2VxdWVuY2UsIGJ1dCB0aGVyZSBpcyBvbmUgY2lyY3Vtc3RhbmNlCiAgICAgIGluIHdoaWNoIGl0IG1hdHRlcnM6IElmIHlvdSBhcmUgdXNpbmcgPGEgaHJlZj0iaG93dG8vc3NpLmh0bWwiPlNlcnZlciAKICAgICAgU2lkZSBJbmNsdWRlczwvYT47PC9wPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHByZT4KJmx0OyEtLSBUaGUgZm9sbG93aW5nIGluY2x1ZGUgY2FuIGJlIGNhY2hlZCAtLSZndDsKJmx0OyEtLSNpbmNsdWRlIHZpcnR1YWw9Ii9mb290ZXIuaHRtbCIgLS0mZ3Q7IAoKJmx0OyEtLSBUaGUgZm9sbG93aW5nIGluY2x1ZGUgY2FuIG5vdCBiZSBjYWNoZWQgLS0mZ3Q7CiZsdDshLS0jaW5jbHVkZSBmaWxlPSIvcGF0aC90by9mb290ZXIuaHRtbCIgLS0mZ3Q7PC9wcmU+PC9kaXY+CgogICAgICA8cD5JZiB5b3UgYXJlIHVzaW5nIFNlcnZlciBTaWRlIEluY2x1ZGVzLCBhbmQgd2FudCB0aGUgYmVuZWZpdCBvZiBzcGVlZHkKICAgICAgc2VydmVzIGZyb20gdGhlIGNhY2hlLCB5b3Ugc2hvdWxkIHVzZSA8Y29kZT52aXJ0dWFsPC9jb2RlPiBpbmNsdWRlCiAgICAgIHR5cGVzLjwvcD4KICAgIAogICAgCiAgICA8aDM+RXhwaXJ5IFBlcmlvZHM8L2gzPgogICAgICAKICAgIAogICAgICA8cD5UaGUgZGVmYXVsdCBleHBpcnkgcGVyaW9kIGZvciBjYWNoZWQgZW50aXRpZXMgaXMgb25lIGhvdXIsIGhvd2V2ZXIgCiAgICAgIHRoaXMgY2FuIGJlIGVhc2lseSBvdmVyLXJpZGRlbiBieSB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVkZWZhdWx0ZXhwaXJlIj5DYWNoZURlZmF1bHRFeHBpcmU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuIFRoaXMKICAgICAgZGVmYXVsdCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgb3JpZ2luYWwgc291cmNlIG9mIHRoZSBjb250ZW50IGRvZXMgbm90CiAgICAgIHNwZWNpZnkgYW4gZXhwaXJlIHRpbWUgb3IgdGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbi48L3A+CgogICAgICA8cD5JZiBhIHJlc3BvbnNlIGRvZXMgbm90IGluY2x1ZGUgYW4gPGNvZGU+RXhwaXJlczwvY29kZT4gaGVhZGVyIGJ1dCBkb2VzCiAgICAgIGluY2x1ZGUgYSA8Y29kZT5MYXN0LU1vZGlmaWVkPC9jb2RlPiBoZWFkZXIsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPgogICAgICBjYW4gaW5mZXIgYW4gZXhwaXJ5IHBlcmlvZCBiYXNlZCBvbiB0aGUgdXNlIG9mIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZWxhc3Rtb2RpZmllZGZhY3RvciI+Q2FjaGVMYXN0TW9kaWZpZWRGYWN0b3I8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9wPgoKICAgICAgPHA+Rm9yIGxvY2FsIGNvbnRlbnQsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9leHBpcmVzLmh0bWwiPm1vZF9leHBpcmVzPC9hPjwvY29kZT4gbWF5IGJlIHVzZWQgdG8KICAgICAgZmluZS10dW5lIHRoZSBleHBpcnkgcGVyaW9kLjwvcD4KCiAgICAgIDxwPlRoZSBtYXhpbXVtIGV4cGlyeSBwZXJpb2QgbWF5IGFsc28gYmUgY29udHJvbGxlZCBieSB1c2luZyB0aGUKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVtYXhleHBpcmUiPkNhY2hlTWF4RXhwaXJlPC9hPjwvY29kZT4uPC9wPgoKICAgIAoKICAgIDxoMz5BIEJyaWVmIEd1aWRlIHRvIENvbmRpdGlvbmFsIFJlcXVlc3RzPC9oMz4KICAgICAgCgogICAgICA8cD5XaGVuIGNvbnRlbnQgZXhwaXJlcyBmcm9tIHRoZSBjYWNoZSBhbmQgaXMgcmUtcmVxdWVzdGVkIGZyb20gdGhlIAogICAgICBiYWNrZW5kIG9yIGNvbnRlbnQgcHJvdmlkZXIsIHJhdGhlciB0aGFuIHBhc3Mgb24gdGhlIG9yaWdpbmFsIHJlcXVlc3QsCiAgICAgIEFwYWNoZSB3aWxsIHVzZSBhIGNvbmRpdGlvbmFsIHJlcXVlc3QgaW5zdGVhZC48L3A+CgogICAgICA8cD5IVFRQIG9mZmVycyBhIG51bWJlciBvZiBoZWFkZXJzIHdoaWNoIGFsbG93IGEgY2xpZW50LCBvciBjYWNoZQogICAgICB0byBkaXNjZXJuIGJldHdlZW4gZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBzYW1lIGNvbnRlbnQuIEZvcgogICAgICBleGFtcGxlIGlmIGEgcmVzb3VyY2Ugd2FzIHNlcnZlZCB3aXRoIGFuICJFdGFnOiIgaGVhZGVyLCBpdCBpcwogICAgICBwb3NzaWJsZSB0byBtYWtlIGEgY29uZGl0aW9uYWwgcmVxdWVzdCB3aXRoIGFuICJJZi1Ob25lLU1hdGNoOiIgCiAgICAgIGhlYWRlci4gSWYgYSByZXNvdXJjZSB3YXMgc2VydmVkIHdpdGggYSAiTGFzdC1Nb2RpZmllZDoiIGhlYWRlcgogICAgICBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGEgY29uZGl0aW9uYWwgcmVxdWVzdCB3aXRoIGFuIAogICAgICAiSWYtTW9kaWZpZWQtU2luY2U6IiBoZWFkZXIsIGFuZCBzbyBvbi48L3A+CgogICAgICA8cD5XaGVuIHN1Y2ggYSBjb25kaXRpb25hbCByZXF1ZXN0IGlzIG1hZGUsIHRoZSByZXNwb25zZSBkaWZmZXJzCiAgICAgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBjb250ZW50IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuIElmIGEgcmVxdWVzdCBpcyAKICAgICAgbWFkZSB3aXRoIGFuICJJZi1Nb2RpZmllZC1TaW5jZToiIGhlYWRlciwgYW5kIHRoZSBjb250ZW50IGhhcyBub3QgYmVlbiAKICAgICAgbW9kaWZpZWQgc2luY2UgdGhlIHRpbWUgaW5kaWNhdGVkIGluIHRoZSByZXF1ZXN0IHRoZW4gYSB0ZXJzZSAiMzA0IE5vdCAKICAgICAgTW9kaWZpZWQiIHJlc3BvbnNlIGlzIGlzc3VlZC48L3A+CgogICAgICA8cD5JZiB0aGUgY29udGVudCBoYXMgY2hhbmdlZCwgdGhlbiBpdCBpcyBzZXJ2ZWQgYXMgaWYgdGhlIHJlcXVlc3Qgd2VyZQogICAgICBub3QgY29uZGl0aW9uYWwgdG8gYmVnaW4gd2l0aC48L3A+CgogICAgICA8cD5UaGUgYmVuZWZpdHMgb2YgY29uZGl0aW9uYWwgcmVxdWVzdHMgaW4gcmVsYXRpb24gdG8gY2FjaGluZyBhcmUgCiAgICAgIHR3b2ZvbGQuIEZpcnN0bHksIHdoZW4gbWFraW5nIHN1Y2ggYSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kLCBpZiB0aGUgCiAgICAgIGNvbnRlbnQgZnJvbSB0aGUgYmFja2VuZCBtYXRjaGVzIHRoZSBjb250ZW50IGluIHRoZSBzdG9yZSwgdGhpcyBjYW4gYmUKICAgICAgZGV0ZXJtaW5lZCBlYXNpbHkgYW5kIHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mIHRyYW5zZmVycmluZyB0aGUgZW50aXJlCiAgICAgIHJlc291cmNlLjwvcD4KCiAgICAgIDxwPlNlY29uZGx5LCBjb25kaXRpb25hbCByZXF1ZXN0cyBhcmUgdXN1YWxseSBsZXNzIHN0cmVudW91cyBvbiB0aGUKICAgICAgYmFja2VuZC4gRm9yIHN0YXRpYyBmaWxlcywgdHlwaWNhbGx5IGFsbCB0aGF0IGlzIGludm9sdmVkIGlzIGEgY2FsbAogICAgICB0byA8Y29kZT5zdGF0KCk8L2NvZGU+IG9yIHNpbWlsYXIgc3lzdGVtIGNhbGwsIHRvIHNlZSBpZiB0aGUgZmlsZSBoYXMKICAgICAgY2hhbmdlZCBpbiBzaXplIG9yIG1vZGlmaWNhdGlvbiB0aW1lLiBBcyBzdWNoLCBldmVuIGlmIEFwYWNoZSBpcwogICAgICBjYWNoaW5nIGxvY2FsIGNvbnRlbnQsIGV2ZW4gZXhwaXJlZCBjb250ZW50IG1heSBzdGlsbCBiZSBzZXJ2ZWQgZmFzdGVyCiAgICAgIGZyb20gdGhlIGNhY2hlIGlmIGl0IGhhcyBub3QgY2hhbmdlZC4gQXMgbG9uZyBhcyByZWFkaW5nIGZyb20gdGhlIGNhY2hlCiAgICAgIHN0b3JlIGlzIGZhc3RlciB0aGFuIHJlYWRpbmcgZnJvbSB0aGUgYmFja2VuZCAoZS5nLiBhbiBpbi1tZW1vcnkgY2FjaGUgCiAgICAgIGNvbXBhcmVkIHRvIHJlYWRpbmcgZnJvbSBkaXNrKS48L3A+IAogICAgCgogICAgPGgzPldoYXQgQ2FuIGJlIENhY2hlZD88L2gzPgogICAgICAKCiAgICAgIDxwPkFzIG1lbnRpb25lZCBhbHJlYWR5LCB0aGUgdHdvIHN0eWxlcyBvZiBjYWNoaW5nIGluIEFwYWNoZSB3b3JrIAogICAgICBkaWZmZXJlbnRseSwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCI+bW9kX2ZpbGVfY2FjaGU8L2E+PC9jb2RlPiBjYWNoaW5nIG1haW50YWlucyBmaWxlIAogICAgICBjb250ZW50cyBhcyB0aGV5IHdlcmUgd2hlbiBBcGFjaGUgd2FzIHN0YXJ0ZWQuIFdoZW4gYSByZXF1ZXN0IGlzIAogICAgICBtYWRlIGZvciBhIGZpbGUgdGhhdCBpcyBjYWNoZWQgYnkgdGhpcyBtb2R1bGUsIGl0IGlzIGludGVyY2VwdGVkIAogICAgICBhbmQgdGhlIGNhY2hlZCBmaWxlIGlzIHNlcnZlZC48L3A+CgogICAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gY2FjaGluZyBvbiB0aGUgb3RoZXIgaGFuZCBpcyBtb3JlCiAgICAgIGNvbXBsZXguIFdoZW4gc2VydmluZyBhIHJlcXVlc3QsIGlmIGl0IGhhcyBub3QgYmVlbiBjYWNoZWQKICAgICAgcHJldmlvdXNseSwgdGhlIGNhY2hpbmcgbW9kdWxlIHdpbGwgZGV0ZXJtaW5lIGlmIHRoZSBjb250ZW50CiAgICAgIGlzIGNhY2hlYWJsZS4gVGhlIGNvbmRpdGlvbnMgZm9yIGRldGVybWluaW5nIGNhY2hhYmlsaXR5IG9mIAogICAgICBhIHJlc3BvbnNlIGFyZTs8L3A+CgogICAgICA8b2w+CiAgICAgICAgPGxpPkNhY2hpbmcgbXVzdCBiZSBlbmFibGVkIGZvciB0aGlzIFVSTC4gU2VlIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZWVuYWJsZSI+Q2FjaGVFbmFibGU8L2E+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVkaXNhYmxlIj5DYWNoZURpc2FibGU8L2E+PC9jb2RlPiBkaXJlY3RpdmVzLjwvbGk+CgogICAgICAgIDxsaT5UaGUgcmVzcG9uc2UgbXVzdCBoYXZlIGEgSFRUUCBzdGF0dXMgY29kZSBvZiAyMDAsIDIwMywgMzAwLCAzMDEgb3IgCiAgICAgICAgNDEwLjwvbGk+CgogICAgICAgIDxsaT5UaGUgcmVxdWVzdCBtdXN0IGJlIGEgSFRUUCBHRVQgcmVxdWVzdC48L2xpPgoKICAgICAgICA8bGk+SWYgdGhlIHJlcXVlc3QgY29udGFpbnMgYW4gIkF1dGhvcml6YXRpb246IiBoZWFkZXIsIHRoZSByZXNwb25zZQogICAgICAgIHdpbGwgbm90IGJlIGNhY2hlZC48L2xpPgoKICAgICAgICA8bGk+SWYgdGhlIHJlc3BvbnNlIGNvbnRhaW5zIGFuICJBdXRob3JpemF0aW9uOiIgaGVhZGVyLCBpdCBtdXN0CiAgICAgICAgYWxzbyBjb250YWluIGFuICJzLW1heGFnZSIsICJtdXN0LXJldmFsaWRhdGUiIG9yICJwdWJsaWMiIG9wdGlvbgogICAgICAgIGluIHRoZSAiQ2FjaGUtQ29udHJvbDoiIGhlYWRlci48L2xpPgoKICAgICAgICA8bGk+SWYgdGhlIFVSTCBpbmNsdWRlZCBhIHF1ZXJ5IHN0cmluZyAoZS5nLiBmcm9tIGEgSFRNTCBmb3JtIEdFVAogICAgICAgIG1ldGhvZCkgaXQgd2lsbCBub3QgYmUgY2FjaGVkIHVubGVzcyB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYW4KICAgICAgICAiRXhwaXJlczoiIGhlYWRlciwgYXMgcGVyIFJGQzI2MTYgc2VjdGlvbiAxMy45LjwvbGk+CgogICAgICAgIDxsaT5JZiB0aGUgcmVzcG9uc2UgaGFzIGEgc3RhdHVzIG9mIDIwMCAoT0spLCB0aGUgcmVzcG9uc2UgbXVzdAogICAgICAgIGFsc28gaW5jbHVkZSBhdCBsZWFzdCBvbmUgb2YgdGhlICJFdGFnIiwgIkxhc3QtTW9kaWZpZWQiIG9yCiAgICAgICAgdGhlICJFeHBpcmVzIiBoZWFkZXJzLCB1bmxlc3MgdGhlIAogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlaWdub3Jlbm9sYXN0bW9kIj5DYWNoZUlnbm9yZU5vTGFzdE1vZDwvYT48L2NvZGU+IAogICAgICAgIGRpcmVjdGl2ZSBoYXMgYmVlbiB1c2VkIHRvIHJlcXVpcmUgb3RoZXJ3aXNlLjwvbGk+CgogICAgICAgIDxsaT5JZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgdGhlICJwcml2YXRlIiBvcHRpb24gaW4gYSAiQ2FjaGUtQ29udHJvbDoiCiAgICAgICAgaGVhZGVyLCBpdCB3aWxsIG5vdCBiZSBzdG9yZWQgdW5sZXNzIHRoZSAKICAgICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZXN0b3JlcHJpdmF0ZSI+Q2FjaGVTdG9yZVByaXZhdGU8L2E+PC9jb2RlPiBoYXMgYmVlbgogICAgICAgIHVzZWQgdG8gcmVxdWlyZSBvdGhlcndpc2UuPC9saT4KCiAgICAgICAgPGxpPkxpa2V3aXNlLCBpZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgdGhlICJuby1zdG9yZSIgb3B0aW9uIGluIGEgCiAgICAgICAgIkNhY2hlLUNvbnRyb2w6IiBoZWFkZXIsIGl0IHdpbGwgbm90IGJlIHN0b3JlZCB1bmxlc3MgdGhlIAogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlc3RvcmVub3N0b3JlIj5DYWNoZVN0b3JlTm9TdG9yZTwvYT48L2NvZGU+IGhhcyBiZWVuCiAgICAgICAgdXNlZC48L2xpPgoKICAgICAgICA8bGk+QSByZXNwb25zZSB3aWxsIG5vdCBiZSBzdG9yZWQgaWYgaXQgaW5jbHVkZXMgYSAiVmFyeToiIGhlYWRlcgogICAgICAgIGNvbnRhaW5pbmcgdGhlIG1hdGNoLWFsbCAiKiIuPC9saT4KICAgICAgPC9vbD4KICAgIAoKICAgIDxoMz5XaGF0IFNob3VsZCBOb3QgYmUgQ2FjaGVkPzwvaDM+CiAgICAgIAogICAgCiAgICAgIDxwPkluIHNob3J0LCBhbnkgY29udGVudCB3aGljaCBpcyBoaWdobHkgdGltZS1zZW5zaXRpdmUsIG9yIHdoaWNoIHZhcmllcwogICAgICBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXJzIG9mIHRoZSByZXF1ZXN0IHRoYXQgYXJlIG5vdCBjb3ZlcmVkIGJ5CiAgICAgIEhUVFAgbmVnb3RpYXRpb24sIHNob3VsZCBub3QgYmUgY2FjaGVkLjwvcD4KCiAgICAgIDxwPklmIHlvdSBoYXZlIGR5bmFtaWMgY29udGVudCB3aGljaCBjaGFuZ2VzIGRlcGVuZGluZyBvbiB0aGUgSVAgYWRkcmVzcwogICAgICBvZiB0aGUgcmVxdWVzdGVyLCBvciBjaGFuZ2VzIGV2ZXJ5IDUgbWludXRlcywgaXQgc2hvdWxkIGFsbW9zdCBjZXJ0YWlubHkKICAgICAgbm90IGJlIGNhY2hlZC48L3A+CgogICAgICA8cD5JZiBvbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGNvbnRlbnQgc2VydmVkIGRpZmZlcnMgZGVwZW5kaW5nIG9uIHRoZQogICAgICB2YWx1ZXMgb2YgdmFyaW91cyBIVFRQIGhlYWRlcnMsIGl0IG1pZ2h0IGJlIHBvc3NpYmxlCiAgICAgIHRvIGNhY2hlIGl0IGludGVsbGlnZW50bHkgdGhyb3VnaCB0aGUgdXNlIG9mIGEgIlZhcnkiIGhlYWRlci48L3A+CiAgICAKCiAgICA8aDM+VmFyaWFibGUvTmVnb3RpYXRlZCBDb250ZW50PC9oMz4KICAgICAgCgogICAgICA8cD5JZiBhIHJlc3BvbnNlIHdpdGggYSAiVmFyeSIgaGVhZGVyIGlzIHJlY2VpdmVkIGJ5IAogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gd2hlbiByZXF1ZXN0aW5nIGNvbnRlbnQgYnkgdGhlIGJhY2tlbmQgaXQKICAgICAgd2lsbCBhdHRlbXB0IHRvIGhhbmRsZSBpdCBpbnRlbGxpZ2VudGx5LiBJZiBwb3NzaWJsZSwgCiAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiB3aWxsIGRldGVjdCB0aGUgaGVhZGVycyBhdHRyaWJ1dGVkIGluIHRoZQogICAgICAiVmFyeSIgcmVzcG9uc2UgaW4gZnV0dXJlIHJlcXVlc3RzIGFuZCBzZXJ2ZSB0aGUgY29ycmVjdCBjYWNoZWQgCiAgICAgIHJlc3BvbnNlLjwvcD4KCiAgICAgIDxwPklmIGZvciBleGFtcGxlLCBhIHJlc3BvbnNlIGlzIHJlY2VpdmVkIHdpdGggYSB2YXJ5IGhlYWRlciBzdWNoIGFzOzwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgpWYXJ5OiBuZWdvdGlhdGUsYWNjZXB0LWxhbmd1YWdlLGFjY2VwdC1jaGFyc2V0CiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gd2lsbCBvbmx5IHNlcnZlIHRoZSBjYWNoZWQgY29udGVudCB0bwogICAgICByZXF1ZXN0ZXJzIHdpdGggYWNjZXB0LWxhbmd1YWdlIGFuZCBhY2NlcHQtY2hhcnNldCBoZWFkZXJzCiAgICAgIG1hdGNoaW5nIHRob3NlIG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0LjwvcD4KICAgIAogIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ic2VjdXJpdHkiIGlkPSJzZWN1cml0eSI+U2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM8L2E+PC9oMj4KICAgIAoKICAgIDxoMz5BdXRob3JpemF0aW9uIGFuZCBBY2Nlc3MgQ29udHJvbDwvaDM+CiAgICAgIAoKICAgICAgPHA+VXNpbmcgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IGlzIHZlcnkgbXVjaCBsaWtlIGhhdmluZyBhIGJ1aWx0CiAgICAgIGluIHJldmVyc2UtcHJveHkuIFJlcXVlc3RzIHdpbGwgYmUgc2VydmVkIGJ5IHRoZSBjYWNoaW5nIG1vZHVsZSB1bmxlc3MKICAgICAgaXQgZGV0ZXJtaW5lcyB0aGF0IHRoZSBiYWNrZW5kIHNob3VsZCBiZSBxdWVyaWVkLiBXaGVuIGNhY2hpbmcgbG9jYWwKICAgICAgcmVzb3VyY2VzLCB0aGlzIGRyYXN0aWNhbGx5IGNoYW5nZXMgdGhlIHNlY3VyaXR5IG1vZGVsIG9mIEFwYWNoZS48L3A+CgogICAgICA8cD5BcyB0cmF2ZXJzaW5nIGEgZmlsZXN5c3RlbSBoaWVyYXJjaHkgdG8gZXhhbWluZSBwb3RlbnRpYWwKICAgICAgPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlcyB3b3VsZCBiZSBhIHZlcnkgZXhwZW5zaXZlIG9wZXJhdGlvbiwKICAgICAgcGFydGlhbGx5IGRlZmVhdGluZyB0aGUgcG9pbnQgb2YgY2FjaGluZyAodG8gc3BlZWQgdXAgcmVxdWVzdHMpLAogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gbWFrZXMgbm8gZGVjaXNpb24gYWJvdXQgd2hldGhlciBhIGNhY2hlZAogICAgICBlbnRpdHkgaXMgYXV0aG9yaXNlZCBmb3Igc2VydmluZy4gSW4gb3RoZXIgd29yZHM7IGlmCiAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiBoYXMgY2FjaGVkIHNvbWUgY29udGVudCwgaXQgd2lsbCBiZSBzZXJ2ZWQKICAgICAgZnJvbSB0aGUgY2FjaGUgYXMgbG9uZyBhcyB0aGF0IGNvbnRlbnQgaGFzIG5vdCBleHBpcmVkLjwvcD4KCiAgICAgIDxwPklmLCBmb3IgZXhhbXBsZSwgeW91ciBjb25maWd1cmF0aW9uIHBlcm1pdHMgYWNjZXNzIHRvIGEgcmVzb3VyY2UgYnkgSVAKICAgICAgYWRkcmVzcyB5b3Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoaXMgY29udGVudCBpcyBub3QgY2FjaGVkLiBZb3UgY2FuIGRvIHRoaXMgYnkKICAgICAgdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlZGlzYWJsZSI+Q2FjaGVEaXNhYmxlPC9hPjwvY29kZT4KICAgICAgZGlyZWN0aXZlLCBvciA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZXhwaXJlcy5odG1sIj5tb2RfZXhwaXJlczwvYT48L2NvZGU+LiBMZWZ0IHVuY2hlY2tlZCwKICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IC0gdmVyeSBtdWNoIGxpa2UgYSByZXZlcnNlIHByb3h5IC0gd291bGQgY2FjaGUKICAgICAgdGhlIGNvbnRlbnQgd2hlbiBzZXJ2ZWQgYW5kIHRoZW4gc2VydmUgaXQgdG8gYW55IGNsaWVudCwgb24gYW55IElQCiAgICAgIGFkZHJlc3MuPC9wPgogICAgCgogICAgPGgzPkxvY2FsIGV4cGxvaXRzPC9oMz4KICAgICAgCgogICAgICA8cD5BcyByZXF1ZXN0cyB0byBlbmQtdXNlcnMgY2FuIGJlIHNlcnZlZCBmcm9tIHRoZSBjYWNoZSwgdGhlIGNhY2hlCiAgICAgIGl0c2VsZiBjYW4gYmVjb21lIGEgdGFyZ2V0IGZvciB0aG9zZSB3aXNoaW5nIHRvIGRlZmFjZSBvciBpbnRlcmZlcmUgd2l0aAogICAgICBjb250ZW50LiBJdCBpcyBpbXBvcnRhbnQgdG8gYmVhciBpbiBtaW5kIHRoYXQgdGhlIGNhY2hlIG11c3QgYXQgYWxsCiAgICAgIHRpbWVzIGJlIHdyaXRhYmxlIGJ5IHRoZSB1c2VyIHdoaWNoIEFwYWNoZSBpcyBydW5uaW5nIGFzLiBUaGlzIGlzIGluIAogICAgICBzdGFyayBjb250cmFzdCB0byB0aGUgdXN1YWxseSByZWNvbW1lbmRlZCBzaXR1YXRpb24gb2YgbWFpbnRhaW5pbmcKICAgICAgYWxsIGNvbnRlbnQgdW53cml0YWJsZSBieSB0aGUgQXBhY2hlIHVzZXIuPC9wPgoKICAgICAgPHA+SWYgdGhlIEFwYWNoZSB1c2VyIGlzIGNvbXByb21pc2VkLCBmb3IgZXhhbXBsZSB0aHJvdWdoIGEgZmxhdyBpbgogICAgICBhIENHSSBwcm9jZXNzLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjYWNoZSBtYXkgYmUgdGFyZ2V0ZWQuIFdoZW4KICAgICAgdXNpbmcgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2Rpc2tfY2FjaGUuaHRtbCI+bW9kX2Rpc2tfY2FjaGU8L2E+PC9jb2RlPiwgaXQgaXMgcmVsYXRpdmVseSBlYXN5IHRvIAogICAgICBpbnNlcnQgb3IgbW9kaWZ5IGEgY2FjaGVkIGVudGl0eS48L3A+CgogICAgICA8cD5UaGlzIHByZXNlbnRzIGEgc29tZXdoYXQgZWxldmF0ZWQgcmlzayBpbiBjb21wYXJpc29uIHRvIHRoZSBvdGhlciAKICAgICAgdHlwZXMgb2YgYXR0YWNrIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgYXMgdGhlIEFwYWNoZSB1c2VyLiBJZiB5b3UgYXJlIAogICAgICB1c2luZyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZGlza19jYWNoZS5odG1sIj5tb2RfZGlza19jYWNoZTwvYT48L2NvZGU+IHlvdSBzaG91bGQgYmVhciB0aGlzIGluIG1pbmQgLSAKICAgICAgZW5zdXJlIHlvdSB1cGdyYWRlIEFwYWNoZSB3aGVuIHNlY3VyaXR5IHVwZ3JhZGVzIGFyZSBhbm5vdW5jZWQgYW5kIAogICAgICBydW4gQ0dJIHByb2Nlc3NlcyBhcyBhIG5vbi1BcGFjaGUgdXNlciB1c2luZyA8YSBocmVmPSJzdWV4ZWMuaHRtbCI+c3VFWEVDPC9hPiBpZiBwb3NzaWJsZS48L3A+CgogICAgCgogICAgPGgzPkNhY2hlIFBvaXNvbmluZzwvaDM+CiAgICAgIAoKICAgICAgPHA+V2hlbiBydW5uaW5nIEFwYWNoZSBhcyBhIGNhY2hpbmcgcHJveHkgc2VydmVyLCB0aGVyZSBpcyBhbHNvIHRoZQogICAgICBwb3RlbnRpYWwgZm9yIHNvLWNhbGxlZCBjYWNoZSBwb2lzb25pbmcuIENhY2hlIFBvaXNvbmluZyBpcyBhIGJyb2FkIAogICAgICB0ZXJtIGZvciBhdHRhY2tzIGluIHdoaWNoIGFuIGF0dGFja2VyIGNhdXNlcyB0aGUgcHJveHkgc2VydmVyIHRvIAogICAgICByZXRyaWV2ZSBpbmNvcnJlY3QgKGFuZCB1c3VhbGx5IHVuZGVzaXJhYmxlKSBjb250ZW50IGZyb20gdGhlIGJhY2tlbmQuCiAgICAgIDwvcD4KCiAgICAgIDxwPkZvciBleGFtcGxlIGlmIHRoZSBETlMgc2VydmVycyB1c2VkIGJ5IHlvdXIgc3lzdGVtIHJ1bm5pbmcgQXBhY2hlCiAgICAgIGFyZSB2dWxuZXJhYmxlIHRvIEROUyBjYWNoZSBwb2lzb25pbmcsIGFuIGF0dGFja2VyIG1heSBiZSBhYmxlIHRvIGNvbnRyb2wKICAgICAgd2hlcmUgQXBhY2hlIGNvbm5lY3RzIHRvIHdoZW4gcmVxdWVzdGluZyBjb250ZW50IGZyb20gdGhlIG9yaWdpbiBzZXJ2ZXIuCiAgICAgIEFub3RoZXIgZXhhbXBsZSBpcyBzby1jYWxsZWQgSFRUUCByZXF1ZXN0LXNtdWdnbGluZyBhdHRhY2tzLjwvcD4KCiAgICAgIDxwPlRoaXMgZG9jdW1lbnQgaXMgbm90IHRoZSBjb3JyZWN0IHBsYWNlIGZvciBhbiBpbi1kZXB0aCBkaXNjdXNzaW9uCiAgICAgIG9mIEhUVFAgcmVxdWVzdCBzbXVnZ2xpbmcgKGluc3RlYWQsIHRyeSB5b3VyIGZhdm91cml0ZSBzZWFyY2ggZW5naW5lKQogICAgICBob3dldmVyIGl0IGlzIGltcG9ydGFudCB0byBiZSBhd2FyZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UKICAgICAgYSBzZXJpZXMgb2YgcmVxdWVzdHMsIGFuZCB0byBleHBsb2l0IGEgdnVsbmVyYWJpbGl0eSBvbiBhbiBvcmlnaW4KICAgICAgd2Vic2VydmVyIHN1Y2ggdGhhdCB0aGUgYXR0YWNrZXIgY2FuIGVudGlyZWx5IGNvbnRyb2wgdGhlIGNvbnRlbnQKICAgICAgcmV0cmlldmVkIGJ5IHRoZSBwcm94eS48L3A+CiAgICAKICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImZpbGVoYW5kbGUiIGlkPSJmaWxlaGFuZGxlIj5GaWxlLUhhbmRsZSBDYWNoaW5nPC9hPjwvaDI+CiAgICAKCiAgICA8dGFibGUgY2xhc3M9InJlbGF0ZWQiPjx0cj48dGg+UmVsYXRlZCBNb2R1bGVzPC90aD48dGg+UmVsYXRlZCBEaXJlY3RpdmVzPC90aD48L3RyPjx0cj48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sIj5tb2RfZmlsZV9jYWNoZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX21lbV9jYWNoZS5odG1sIj5tb2RfbWVtX2NhY2hlPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI2NhY2hlZmlsZSI+Q2FjaGVGaWxlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZWVuYWJsZSI+Q2FjaGVFbmFibGU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlZGlzYWJsZSI+Q2FjaGVEaXNhYmxlPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48L3RyPjwvdGFibGU+CgogICAgPHA+VGhlIGFjdCBvZiBvcGVuaW5nIGEgZmlsZSBjYW4gaXRzZWxmIGJlIGEgc291cmNlIG9mIGRlbGF5LCBwYXJ0aWN1bGFybHkgCiAgICBvbiBuZXR3b3JrIGZpbGVzeXN0ZW1zLiBCeSBtYWludGFpbmluZyBhIGNhY2hlIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycwogICAgZm9yIGNvbW1vbmx5IHNlcnZlZCBmaWxlcywgQXBhY2hlIGNhbiBhdm9pZCB0aGlzIGRlbGF5LiBDdXJyZW50bHkgQXBhY2hlCiAgICBwcm92aWRlcyB0d28gZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZiBGaWxlLUhhbmRsZSBDYWNoaW5nLjwvcD4gCgogICAgPGgzPkNhY2hlRmlsZTwvaDM+CiAgICAgIAoKICAgICAgPHA+VGhlIG1vc3QgYmFzaWMgZm9ybSBvZiBjYWNoaW5nIHByZXNlbnQgaW4gQXBhY2hlIGlzIHRoZSBmaWxlLWhhbmRsZQogICAgICBjYWNoaW5nIHByb3ZpZGVkIGJ5IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwiPm1vZF9maWxlX2NhY2hlPC9hPjwvY29kZT4uIFJhdGhlciB0aGFuIGNhY2hpbmcgCiAgICAgIGZpbGUtY29udGVudHMsIHRoaXMgY2FjaGUgbWFpbnRhaW5zIGEgdGFibGUgb2Ygb3BlbiBmaWxlIGRlc2NyaXB0b3JzLiBGaWxlcyAKICAgICAgdG8gYmUgY2FjaGVkIGluIHRoaXMgbWFubmVyIGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2luZwogICAgICB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCNjYWNoZWZpbGUiPkNhY2hlRmlsZTwvYT48L2NvZGU+IAogICAgICBkaXJlY3RpdmUuPC9wPgoKICAgICAgPHA+VGhlIAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI2NhY2hlZmlsZSI+Q2FjaGVGaWxlPC9hPjwvY29kZT4gZGlyZWN0aXZlIAogICAgICBpbnN0cnVjdHMgQXBhY2hlIHRvIG9wZW4gdGhlIGZpbGUgd2hlbiBBcGFjaGUgaXMgc3RhcnRlZCBhbmQgdG8gcmUtdXNlIAogICAgICB0aGlzIGZpbGUtaGFuZGxlIGZvciBhbGwgc3Vic2VxdWVudCBhY2Nlc3MgdG8gdGhpcyBmaWxlLjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+Q2FjaGVGaWxlIC91c3IvbG9jYWwvYXBhY2hlMi9odGRvY3MvaW5kZXguaHRtbDwvcHJlPjwvZGl2PgoKICAgICAgPHA+SWYgeW91IGludGVuZCB0byBjYWNoZSBhIGxhcmdlIG51bWJlciBvZiBmaWxlcyBpbiB0aGlzIG1hbm5lciwgeW91IAogICAgICBtdXN0IGVuc3VyZSB0aGF0IHlvdXIgb3BlcmF0aW5nIHN5c3RlbSdzIGxpbWl0IGZvciB0aGUgbnVtYmVyIG9mIG9wZW4gCiAgICAgIGZpbGVzIGlzIHNldCBhcHByb3ByaWF0ZWx5LjwvcD4KCiAgICAgIDxwPkFsdGhvdWdoIHVzaW5nIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwjY2FjaGVmaWxlIj5DYWNoZUZpbGU8L2E+PC9jb2RlPgogICAgICBkb2VzIG5vdCBjYXVzZSB0aGUgZmlsZS1jb250ZW50cyB0byBiZSBjYWNoZWQgcGVyLXNlLCBpdCBkb2VzIG1lYW4KICAgICAgdGhhdCBpZiB0aGUgZmlsZSBjaGFuZ2VzIHdoaWxlIEFwYWNoZSBpcyBydW5uaW5nIHRoZXNlIGNoYW5nZXMgd2lsbAogICAgICBub3QgYmUgcGlja2VkIHVwLiBUaGUgZmlsZSB3aWxsIGJlIGNvbnNpc3RlbnRseSBzZXJ2ZWQgYXMgaXQgd2FzCiAgICAgIHdoZW4gQXBhY2hlIHdhcyBzdGFydGVkLjwvcD4KCiAgICAgIDxwPklmIHRoZSBmaWxlIGlzIHJlbW92ZWQgd2hpbGUgQXBhY2hlIGlzIHJ1bm5pbmcsIEFwYWNoZSB3aWxsIGNvbnRpbnVlCiAgICAgIHRvIG1haW50YWluIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGFuZCBzZXJ2ZSB0aGUgZmlsZSBhcyBpdCB3YXMgd2hlbgogICAgICBBcGFjaGUgd2FzIHN0YXJ0ZWQuIFRoaXMgdXN1YWxseSBhbHNvIG1lYW5zIHRoYXQgYWx0aG91Z2ggdGhlIGZpbGUKICAgICAgd2lsbCBoYXZlIGJlZW4gZGVsZXRlZCwgYW5kIG5vdCBzaG93IHVwIG9uIHRoZSBmaWxlc3lzdGVtLCBleHRyYSBmcmVlCiAgICAgIHNwYWNlIHdpbGwgbm90IGJlIHJlY292ZXJlZCB1bnRpbCBBcGFjaGUgaXMgc3RvcHBlZCBhbmQgdGhlIGZpbGUKICAgICAgZGVzY3JpcHRvciBjbG9zZWQuPC9wPgogICAgCgogICAgPGgzPkNhY2hlRW5hYmxlIGZkPC9oMz4KICAgICAgCgogICAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfbWVtX2NhY2hlLmh0bWwiPm1vZF9tZW1fY2FjaGU8L2E+PC9jb2RlPiBhbHNvIHByb3ZpZGVzIGl0cyBvd24gZmlsZS1oYW5kbGUgCiAgICAgIGNhY2hpbmcgc2NoZW1lLCB3aGljaCBjYW4gYmUgZW5hYmxlZCB2aWEgdGhlIAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCNjYWNoZWVuYWJsZSI+Q2FjaGVFbmFibGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9wPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHByZT5DYWNoZUVuYWJsZSBmZCAvPC9wcmU+PC9kaXY+CgogICAgICA8cD5BcyB3aXRoIGFsbCBvZiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4gdGhpcyB0eXBlIG9mIGZpbGUtaGFuZGxlCiAgICAgIGNhY2hpbmcgaXMgaW50ZWxsaWdlbnQsIGFuZCBoYW5kbGVzIHdpbGwgbm90IGJlIG1haW50YWluZWQgYmV5b25kCiAgICAgIHRoZSBleHBpcnkgdGltZSBvZiB0aGUgY2FjaGVkIGNvbnRlbnQuPC9wPgogICAgCiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJpbm1lbW9yeSIgaWQ9ImlubWVtb3J5Ij5Jbi1NZW1vcnkgQ2FjaGluZzwvYT48L2gyPgogICAgCgogICAgIDx0YWJsZSBjbGFzcz0icmVsYXRlZCI+PHRyPjx0aD5SZWxhdGVkIE1vZHVsZXM8L3RoPjx0aD5SZWxhdGVkIERpcmVjdGl2ZXM8L3RoPjwvdHI+PHRyPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9tZW1fY2FjaGUuaHRtbCI+bW9kX21lbV9jYWNoZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCI+bW9kX2ZpbGVfY2FjaGU8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlZW5hYmxlIj5DYWNoZUVuYWJsZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVkaXNhYmxlIj5DYWNoZURpc2FibGU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwjbW1hcGZpbGUiPk1NYXBGaWxlPC9hPjwvY29kZT48L2xpPjwvdWw+PC90ZD48L3RyPjwvdGFibGU+CiAgICAgICAKICAgIDxwPlNlcnZpbmcgZGlyZWN0bHkgZnJvbSBzeXN0ZW0gbWVtb3J5IGlzIHVuaXZlcnNhbGx5IHRoZSBmYXN0ZXN0IG1ldGhvZAogICAgb2Ygc2VydmluZyBjb250ZW50LiBSZWFkaW5nIGZpbGVzIGZyb20gYSBkaXNrIGNvbnRyb2xsZXIgb3IsIGV2ZW4gd29yc2UsCiAgICBmcm9tIGEgcmVtb3RlIG5ldHdvcmsgaXMgb3JkZXJzIG9mIG1hZ25pdHVkZSBzbG93ZXIuIERpc2sgY29udHJvbGxlcnMKICAgIHVzdWFsbHkgaW52b2x2ZSBwaHlzaWNhbCBwcm9jZXNzZXMsIGFuZCBuZXR3b3JrIGFjY2VzcyBpcyBsaW1pdGVkIGJ5CiAgICB5b3VyIGF2YWlsYWJsZSBiYW5kd2lkdGguIE1lbW9yeSBhY2Nlc3Mgb24gdGhlIG90aGVyIGhhbmQgY2FuIHRha2UgbWVyZQogICAgbmFuby1zZWNvbmRzLjwvcD4KCiAgICA8cD5TeXN0ZW0gbWVtb3J5IGlzbid0IGNoZWFwIHRob3VnaCwgYnl0ZSBmb3IgYnl0ZSBpdCdzIGJ5IGZhciB0aGUgbW9zdAogICAgZXhwZW5zaXZlIHR5cGUgb2Ygc3RvcmFnZSBhbmQgaXQncyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgdXNlZAogICAgZWZmaWNpZW50bHkuIEJ5IGNhY2hpbmcgZmlsZXMgaW4gbWVtb3J5IHlvdSBkZWNyZWFzZSB0aGUgYW1vdW50IG9mIAogICAgbWVtb3J5IGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLiBBcyB3ZSdsbCBzZWUsIGluIHRoZSBjYXNlIG9mIG9wZXJhdGluZwogICAgc3lzdGVtIGNhY2hpbmcsIHRoaXMgaXMgbm90IHNvIG11Y2ggb2YgYW4gaXNzdWUsIGJ1dCB3aGVuIHVzaW5nCiAgICBBcGFjaGUncyBvd24gaW4tbWVtb3J5IGNhY2hpbmcgaXQgaXMgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQogICAgZG8gbm90IGFsbG9jYXRlIHRvbyBtdWNoIG1lbW9yeSB0byBhIGNhY2hlLiBPdGhlcndpc2UgdGhlIHN5c3RlbQogICAgd2lsbCBiZSBmb3JjZWQgdG8gc3dhcCBvdXQgbWVtb3J5LCB3aGljaCB3aWxsIGxpa2VseSBkZWdyYWRlIAogICAgcGVyZm9ybWFuY2UuPC9wPgoKICAgIDxoMz5PcGVyYXRpbmcgU3lzdGVtIENhY2hpbmc8L2gzPgogICAgICAKCiAgICAgIDxwPkFsbW9zdCBhbGwgbW9kZXJuIG9wZXJhdGluZyBzeXN0ZW1zIGNhY2hlIGZpbGUtZGF0YSBpbiBtZW1vcnkgbWFuYWdlZAogICAgICBkaXJlY3RseSBieSB0aGUga2VybmVsLiBUaGlzIGlzIGEgcG93ZXJmdWwgZmVhdHVyZSwgYW5kIGZvciB0aGUgbW9zdAogICAgICBwYXJ0IG9wZXJhdGluZyBzeXN0ZW1zIGdldCBpdCByaWdodC4gRm9yIGV4YW1wbGUsIG9uIExpbnV4LCBsZXQncyBsb29rIGF0CiAgICAgIHRoZSBkaWZmZXJlbmNlIGluIHRoZSB0aW1lIGl0IHRha2VzIHRvIHJlYWQgYSBmaWxlIGZvciB0aGUgZmlyc3QgdGltZQogICAgICBhbmQgdGhlIHNlY29uZCB0aW1lOzwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+CmNvbG1AY29yb2VidXM6fiQgdGltZSBjYXQgdGVzdGZpbGUgJmd0OyAvZGV2L251bGwKcmVhbCAgICAwbTAuMDY1cwp1c2VyICAgIDBtMC4wMDBzCnN5cyAgICAgMG0wLjAwMXMKY29sbUBjb3JvZWJ1czp+JCB0aW1lIGNhdCB0ZXN0ZmlsZSAmZ3Q7IC9kZXYvbnVsbApyZWFsICAgIDBtMC4wMDNzCnVzZXIgICAgMG0wLjAwM3MKc3lzICAgICAwbTAuMDAwczwvcHJlPjwvZGl2PgoKICAgICAgPHA+RXZlbiBmb3IgdGhpcyBzbWFsbCBmaWxlLCB0aGVyZSBpcyBhIGh1Z2UgZGlmZmVyZW5jZSBpbiB0aGUgYW1vdW50CiAgICAgIG9mIHRpbWUgaXQgdGFrZXMgdG8gcmVhZCB0aGUgZmlsZS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBrZXJuZWwgaGFzIGNhY2hlZAogICAgICB0aGUgZmlsZSBjb250ZW50cyBpbiBtZW1vcnkuPC9wPgoKICAgICAgPHA+QnkgZW5zdXJpbmcgdGhlcmUgaXMgInNwYXJlIiBtZW1vcnkgb24geW91ciBzeXN0ZW0sIHlvdSBjYW4gZW5zdXJlIAogICAgICB0aGF0IG1vcmUgYW5kIG1vcmUgZmlsZS1jb250ZW50cyB3aWxsIGJlIHN0b3JlZCBpbiB0aGlzIGNhY2hlLiBUaGlzIAogICAgICBjYW4gYmUgYSB2ZXJ5IGVmZmljaWVudCBtZWFucyBvZiBpbi1tZW1vcnkgY2FjaGluZywgYW5kIGludm9sdmVzIG5vIAogICAgICBleHRyYSBjb25maWd1cmF0aW9uIG9mIEFwYWNoZSBhdCBhbGwuPC9wPgoKICAgICAgPHA+QWRkaXRpb25hbGx5LCBiZWNhdXNlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGtub3dzIHdoZW4gZmlsZXMgYXJlIAogICAgICBkZWxldGVkIG9yIG1vZGlmaWVkLCBpdCBjYW4gYXV0b21hdGljYWxseSByZW1vdmUgZmlsZSBjb250ZW50cyBmcm9tIHRoZSAKICAgICAgY2FjaGUgd2hlbiBuZWNjZXNzYXJ5LiBUaGlzIGlzIGEgYmlnIGFkdmFudGFnZSBvdmVyIEFwYWNoZSdzIGluLW1lbW9yeSAKICAgICAgY2FjaGluZyB3aGljaCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hlbiBhIGZpbGUgaGFzIGNoYW5nZWQuPC9wPgogICAgCgogICAgPHA+RGVzcGl0ZSB0aGUgcGVyZm9ybWFuY2UgYW5kIGFkdmFudGFnZXMgb2YgYXV0b21hdGljIG9wZXJhdGluZyBzeXN0ZW0KICAgIGNhY2hpbmcgdGhlcmUgYXJlIHNvbWUgY2lyY3Vtc3RhbmNlcyBpbiB3aGljaCBpbi1tZW1vcnkgY2FjaGluZyBtYXkgYmUgCiAgICBiZXR0ZXIgcGVyZm9ybWVkIGJ5IEFwYWNoZS48L3A+CgogICAgPHA+Rmlyc3RseSwgYW4gb3BlcmF0aW5nIHN5c3RlbSBjYW4gb25seSBjYWNoZSBmaWxlcyBpdCBrbm93cyBhYm91dC4gSWYgCiAgICB5b3UgYXJlIHJ1bm5pbmcgQXBhY2hlIGFzIGEgcHJveHkgc2VydmVyLCB0aGUgZmlsZXMgeW91IGFyZSBjYWNoaW5nIGFyZQogICAgbm90IGxvY2FsbHkgc3RvcmVkIGJ1dCByZW1vdGVseSBzZXJ2ZWQuIElmIHlvdSBzdGlsbCB3YW50IHRoZSB1bmJlYXRhYmxlCiAgICBzcGVlZCBvZiBpbi1tZW1vcnkgY2FjaGluZywgQXBhY2hlJ3Mgb3duIG1lbW9yeSBjYWNoaW5nIGlzIG5lZWRlZC48L3A+CgogICAgPGgzPk1NYXBGaWxlIENhY2hpbmc8L2gzPgogICAgICAKCiAgICAgIDxwPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwiPm1vZF9maWxlX2NhY2hlPC9hPjwvY29kZT4gcHJvdmlkZXMgdGhlIAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI21tYXBmaWxlIj5NTWFwRmlsZTwvYT48L2NvZGU+IGRpcmVjdGl2ZSwgd2hpY2gKICAgICAgYWxsb3dzIHlvdSB0byBoYXZlIEFwYWNoZSBtYXAgYSBzdGF0aWMgZmlsZSdzIGNvbnRlbnRzIGludG8gbWVtb3J5IGF0CiAgICAgIHN0YXJ0IHRpbWUgKHVzaW5nIHRoZSBtbWFwIHN5c3RlbSBjYWxsKS4gQXBhY2hlIHdpbGwgdXNlIHRoZSBpbi1tZW1vcnkgCiAgICAgIGNvbnRlbnRzIGZvciBhbGwgc3Vic2VxdWVudCBhY2Nlc3NlcyB0byB0aGlzIGZpbGUuPC9wPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHByZT5NTWFwRmlsZSAvdXNyL2xvY2FsL2FwYWNoZTIvaHRkb2NzL2luZGV4Lmh0bWw8L3ByZT48L2Rpdj4KCiAgICAgIDxwPkFzIHdpdGggdGhlCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9maWxlX2NhY2hlLmh0bWwjY2FjaGVmaWxlIj5DYWNoZUZpbGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUsIGFueQogICAgICBjaGFuZ2VzIGluIHRoZXNlIGZpbGVzIHdpbGwgbm90IGJlIHBpY2tlZCB1cCBieSBBcGFjaGUgYWZ0ZXIgaXQgaGFzCiAgICAgIHN0YXJ0ZWQuPC9wPgoKICAgICAgPHA+IFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsZV9jYWNoZS5odG1sI21tYXBmaWxlIj5NTWFwRmlsZTwvYT48L2NvZGU+IAogICAgICBkaXJlY3RpdmUgZG9lcyBub3Qga2VlcCB0cmFjayBvZiBob3cgbXVjaCBtZW1vcnkgaXQgYWxsb2NhdGVzLCBzbwogICAgICB5b3UgbXVzdCBlbnN1cmUgbm90IHRvIG92ZXItdXNlIHRoZSBkaXJlY3RpdmUuIEVhY2ggQXBhY2hlIGNoaWxkCiAgICAgIHByb2Nlc3Mgd2lsbCByZXBsaWNhdGUgdGhpcyBtZW1vcnksIHNvIGl0IGlzIGNyaXRpY2FsbHkgaW1wb3J0YW50CiAgICAgIHRvIGVuc3VyZSB0aGF0IHRoZSBmaWxlcyBtYXBwZWQgYXJlIG5vdCBzbyBsYXJnZSBhcyB0byBjYXVzZSB0aGUKICAgICAgc3lzdGVtIHRvIHN3YXAgbWVtb3J5LjwvcD4KICAgIAoKICAgIDxoMz5tb2RfbWVtX2NhY2hlIENhY2hpbmc8L2gzPgogICAgICAKCiAgICAgIDxwPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9tZW1fY2FjaGUuaHRtbCI+bW9kX21lbV9jYWNoZTwvYT48L2NvZGU+IHByb3ZpZGVzIGEgSFRUUC1hd2FyZSBpbnRlbGxpZ2VudAogICAgICBpbi1tZW1vcnkgY2FjaGUuIEl0IGFsc28gdXNlcyBoZWFwIG1lbW9yeSBkaXJlY3RseSwgd2hpY2ggbWVhbnMgdGhhdAogICAgICBldmVuIGlmIDx2YXI+TU1hcDwvdmFyPiBpcyBub3Qgc3VwcG9ydGVkIG9uIHlvdXIgc3lzdGVtLCAKICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX21lbV9jYWNoZS5odG1sIj5tb2RfbWVtX2NhY2hlPC9hPjwvY29kZT4gbWF5IHN0aWxsIGJlIGFibGUgdG8gcGVyZm9ybSBjYWNoaW5nLjwvcD4KCiAgICAgIDxwPkNhY2hpbmcgb2YgdGhpcyB0eXBlIGlzIGVuYWJsZWQgdmlhOzwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+CiMgRW5hYmxlIG1lbW9yeSBjYWNoaW5nCkNhY2hlRW5hYmxlIG1lbSAvCgojIExpbWl0IHRoZSBzaXplIG9mIHRoZSBjYWNoZSB0byAxIE1lZ2FieXRlCk1DYWNoZVNpemUgMTAyNDwvcHJlPjwvZGl2PgogICAgCiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJkaXNrIiBpZD0iZGlzayI+RGlzay1iYXNlZCBDYWNoaW5nPC9hPjwvaDI+CiAgICAKCiAgICAgPHRhYmxlIGNsYXNzPSJyZWxhdGVkIj48dHI+PHRoPlJlbGF0ZWQgTW9kdWxlczwvdGg+PHRoPlJlbGF0ZWQgRGlyZWN0aXZlczwvdGg+PC90cj48dHI+PHRkPjx1bD48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2Rpc2tfY2FjaGUuaHRtbCI+bW9kX2Rpc2tfY2FjaGU8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjx0ZD48dWw+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9jYWNoZS5odG1sI2NhY2hlZW5hYmxlIj5DYWNoZUVuYWJsZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwjY2FjaGVkaXNhYmxlIj5DYWNoZURpc2FibGU8L2E+PC9jb2RlPjwvbGk+PC91bD48L3RkPjwvdHI+PC90YWJsZT4KICAgICAgIAogICAgPHA+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2Rpc2tfY2FjaGUuaHRtbCI+bW9kX2Rpc2tfY2FjaGU8L2E+PC9jb2RlPiBwcm92aWRlcyBhIGRpc2stYmFzZWQgY2FjaGluZyBtZWNoYW5pc20gCiAgICBmb3IgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+LiBBcyB3aXRoIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9tZW1fY2FjaGUuaHRtbCI+bW9kX21lbV9jYWNoZTwvYT48L2NvZGU+CiAgICB0aGlzIGNhY2hlIGlzIGludGVsbGlnZW50IGFuZCBjb250ZW50IHdpbGwgYmUgc2VydmVkIGZyb20gdGhlIGNhY2hlIG9ubHkKICAgIGFzIGxvbmcgYXMgaXQgaXMgY29uc2lkZXJlZCB2YWxpZC48L3A+CgogICAgPHA+VHlwaWNhbGx5IHRoZSBtb2R1bGUgd2lsbCBiZSBjb25maWd1cmVkIGFzIHNvOzwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cHJlPgpDYWNoZVJvb3QgICAvdmFyL2NhY2hlL2FwYWNoZS8KQ2FjaGVFbmFibGUgZGlzayAvCkNhY2hlRGlyTGV2ZWxzIDIKQ2FjaGVEaXJMZW5ndGggMTwvcHJlPjwvZGl2PgoKICAgIDxwPkltcG9ydGFudGx5LCBhcyB0aGUgY2FjaGVkIGZpbGVzIGFyZSBsb2NhbGx5IHN0b3JlZCwgb3BlcmF0aW5nIHN5c3RlbQogICAgaW4tbWVtb3J5IGNhY2hpbmcgd2lsbCB0eXBpY2FsbHkgYmUgYXBwbGllZCB0byB0aGVpciBhY2Nlc3MgYWxzby4gU28gCiAgICBhbHRob3VnaCB0aGUgZmlsZXMgYXJlIHN0b3JlZCBvbiBkaXNrLCBpZiB0aGV5IGFyZSBmcmVxdWVudGx5IGFjY2Vzc2VkIAogICAgaXQgaXMgbGlrZWx5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgZW5zdXJlIHRoYXQgdGhleSBhcmUgYWN0dWFsbHkKICAgIHNlcnZlZCBmcm9tIG1lbW9yeS48L3A+CgogICAgPGgzPlVuZGVyc3RhbmRpbmcgdGhlIENhY2hlLVN0b3JlPC9oMz4KICAgICAgCgogICAgICA8cD5UbyBzdG9yZSBpdGVtcyBpbiB0aGUgY2FjaGUsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kaXNrX2NhY2hlLmh0bWwiPm1vZF9kaXNrX2NhY2hlPC9hPjwvY29kZT4gY3JlYXRlcwogICAgICBhIDIyIGNoYXJhY3RlciBoYXNoIG9mIHRoZSBVUkwgYmVpbmcgcmVxdWVzdGVkLiBUaGlzIGhhc2ggaW5jb3Jwb3JhdGVzCiAgICAgIHRoZSBob3N0bmFtZSwgcHJvdG9jb2wsIHBvcnQsIHBhdGggYW5kIGFueSBDR0kgYXJndW1lbnRzIHRvIHRoZSBVUkwsCiAgICAgIHRvIGVuc3VyZSB0aGF0IG11bHRpcGxlIFVSTHMgZG8gbm90IGNvbGxpZGUuPC9wPgoKICAgICAgPHA+RWFjaCBjaGFyYWN0ZXIgbWF5IGJlIGFueSBvbmUgb2YgNjQtZGlmZmVyZW50IGNoYXJhY3RlcnMsIHdoaWNoIG1lYW4KICAgICAgdGhhdCBvdmVyYWxsIHRoZXJlIGFyZSA2NF4yMiBwb3NzaWJsZSBoYXNoZXMuIEZvciBleGFtcGxlLCBhIFVSTCBtaWdodAogICAgICBiZSBoYXNoZWQgdG8gPGNvZGU+eHlUR3hTTU8yYjY4bUJDeWtxa3AxdzwvY29kZT4uIFRoaXMgaGFzaCBpcyB1c2VkCiAgICAgIGFzIGEgcHJlZml4IGZvciB0aGUgbmFtaW5nIG9mIHRoZSBmaWxlcyBzcGVjaWZpYyB0byB0aGF0IFVSTCB3aXRoaW4KICAgICAgdGhlIGNhY2hlLCBob3dldmVyIGZpcnN0IGl0IGlzIHNwbGl0IHVwIGludG8gZGlyZWN0b3JpZXMgYXMgcGVyCiAgICAgIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZGlza19jYWNoZS5odG1sI2NhY2hlZGlybGV2ZWxzIj5DYWNoZURpckxldmVsczwvYT48L2NvZGU+IGFuZAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZGlza19jYWNoZS5odG1sI2NhY2hlZGlybGVuZ3RoIj5DYWNoZURpckxlbmd0aDwvYT48L2NvZGU+IAogICAgICBkaXJlY3RpdmVzLjwvcD4KCiAgICAgIDxwPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kaXNrX2NhY2hlLmh0bWwjY2FjaGVkaXJsZXZlbHMiPkNhY2hlRGlyTGV2ZWxzPC9hPjwvY29kZT4gCiAgICAgIHNwZWNpZmllcyBob3cgbWFueSBsZXZlbHMgb2Ygc3ViZGlyZWN0b3J5IHRoZXJlIHNob3VsZCBiZSwgYW5kCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kaXNrX2NhY2hlLmh0bWwjY2FjaGVkaXJsZW5ndGgiPkNhY2hlRGlyTGVuZ3RoPC9hPjwvY29kZT4KICAgICAgc3BlY2lmaWVzIGhvdyBtYW55IGNoYXJhY3RlcnMgc2hvdWxkIGJlIGluIGVhY2ggZGlyZWN0b3J5LiBXaXRoCiAgICAgIHRoZSBleGFtcGxlIHNldHRpbmdzIGdpdmVuIGFib3ZlLCB0aGUgaGFzaCB3b3VsZCBiZSB0dXJuZWQgaW50bwogICAgICBhIGZpbGVuYW1lIHByZWZpeCBhcyAKICAgICAgPGNvZGU+L3Zhci9jYWNoZS9hcGFjaGUveC95L1RHeFNNTzJiNjhtQkN5a3FrcDF3PC9jb2RlPi48L3A+CgogICAgICA8cD5UaGUgb3ZlcmFsbCBhaW0gb2YgdGhpcyB0ZWNobmlxdWUgaXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YKICAgICAgc3ViZGlyZWN0b3JpZXMgb3IgZmlsZXMgdGhhdCBtYXkgYmUgaW4gYSBwYXJ0aWN1bGFyIGRpcmVjdG9yeSwKICAgICAgYXMgbW9zdCBmaWxlLXN5c3RlbXMgc2xvdyBkb3duIGFzIHRoaXMgbnVtYmVyIGluY3JlYXNlcy4gV2l0aAogICAgICBzZXR0aW5nIG9mICIxIiBmb3IgCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kaXNrX2NhY2hlLmh0bWwjY2FjaGVkaXJsZW5ndGgiPkNhY2hlRGlyTGVuZ3RoPC9hPjwvY29kZT4KICAgICAgdGhlcmUgY2FuIGF0IG1vc3QgYmUgNjQgc3ViZGlyZWN0b3JpZXMgYXQgYW55IHBhcnRpY3VsYXIgbGV2ZWwuIAogICAgICBXaXRoIGEgc2V0dGluZyBvZiAyIHRoZXJlIGNhbiBiZSA2NCAqIDY0IHN1YmRpcmVjdG9yaWVzLCBhbmQgc28gb24uCiAgICAgIFVubGVzcyB5b3UgaGF2ZSBhIGdvb2QgcmVhc29uIG5vdCB0bywgdXNpbmcgYSBzZXR0aW5nIG9mICIxIgogICAgICBmb3IgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2Rpc2tfY2FjaGUuaHRtbCNjYWNoZWRpcmxlbmd0aCI+Q2FjaGVEaXJMZW5ndGg8L2E+PC9jb2RlPgogICAgICBpcyByZWNvbW1lbmRlZC48L3A+CgogICAgICA8cD5TZXR0aW5nIAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZGlza19jYWNoZS5odG1sI2NhY2hlZGlybGV2ZWxzIj5DYWNoZURpckxldmVsczwvYT48L2NvZGU+CiAgICAgIGRlcGVuZHMgb24gaG93IG1hbnkgZmlsZXMgeW91IGFudGljaXBhdGUgdG8gc3RvcmUgaW4gdGhlIGNhY2hlLgogICAgICBXaXRoIHRoZSBzZXR0aW5nIG9mICIyIiB1c2VkIGluIHRoZSBhYm92ZSBleGFtcGxlLCBhIGdyYW5kCiAgICAgIHRvdGFsIG9mIDQwOTYgc3ViZGlyZWN0b3JpZXMgY2FuIHVsdGltYXRlbHkgYmUgY3JlYXRlZC4gV2l0aAogICAgICAxIG1pbGxpb24gZmlsZXMgY2FjaGVkLCB0aGlzIHdvcmtzIG91dCBhdCByb3VnaGx5IDI0NSBjYWNoZWQgCiAgICAgIFVSTHMgcGVyIGRpcmVjdG9yeS48L3A+CgogICAgICA8cD5FYWNoIFVSTCB1c2VzIGF0IGxlYXN0IHR3byBmaWxlcyBpbiB0aGUgY2FjaGUtc3RvcmUuIFR5cGljYWxseQogICAgICB0aGVyZSBpcyBhICIuaGVhZGVyIiBmaWxlLCB3aGljaCBpbmNsdWRlcyBtZXRhLWluZm9ybWF0aW9uIGFib3V0IAogICAgICB0aGUgVVJMLCBzdWNoIGFzIHdoZW4gaXQgaXMgZHVlIHRvIGV4cGlyZSBhbmQgYSAiLmRhdGEiIGZpbGUKICAgICAgd2hpY2ggaXMgYSB2ZXJiYXRpbSBjb3B5IG9mIHRoZSBjb250ZW50IHRvIGJlIHNlcnZlZC48L3A+CgogICAgICA8cD5JbiB0aGUgY2FzZSBvZiBhIGNvbnRlbnQgbmVnb3RpYXRlZCB2aWEgdGhlICJWYXJ5IiBoZWFkZXIsIGEKICAgICAgIi52YXJ5IiBkaXJlY3Rvcnkgd2lsbCBiZSBjcmVhdGVkIGZvciB0aGUgVVJMIGluIHF1ZXN0aW9uLiBUaGlzIAogICAgICBkaXJlY3Rvcnkgd2lsbCBoYXZlIG11bHRpcGxlICIuZGF0YSIgZmlsZXMgY29ycmVzcG9uZGluZyB0byB0aGUKICAgICAgZGlmZmVyZW50bHkgbmVnb3RpYXRlZCBjb250ZW50LjwvcD4KICAgIAoKICAgIDxoMz5NYWludGFpbmluZyB0aGUgRGlzayBDYWNoZTwvaDM+CiAgICAgIAogICAgCiAgICAgIDxwPkFsdGhvdWdoIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kaXNrX2NhY2hlLmh0bWwiPm1vZF9kaXNrX2NhY2hlPC9hPjwvY29kZT4gd2lsbCByZW1vdmUgY2FjaGVkIGNvbnRlbnQKICAgICAgYXMgaXQgaXMgZXhwaXJlZCwgaXQgZG9lcyBub3QgbWFpbnRhaW4gYW55IGluZm9ybWF0aW9uIG9uIHRoZSB0b3RhbAogICAgICBzaXplIG9mIHRoZSBjYWNoZSBvciBob3cgbGl0dGxlIGZyZWUgc3BhY2UgbWF5IGJlIGxlZnQuPC9wPgoKICAgICAgPHA+SW5zdGVhZCwgcHJvdmlkZWQgd2l0aCBBcGFjaGUgaXMgdGhlIDxhIGhyZWY9InByb2dyYW1zL2h0Y2FjaGVjbGVhbi5odG1sIj5odGNhY2hlY2xlYW48L2E+IHRvb2wgd2hpY2gsIGFzIHRoZSBuYW1lCiAgICAgIHN1Z2dlc3RzLCBhbGxvd3MgeW91IHRvIGNsZWFuIHRoZSBjYWNoZSBwZXJpb2RpY2FsbHkuIERldGVybWluaW5nIAogICAgICBob3cgZnJlcXVlbnRseSB0byBydW4gPGEgaHJlZj0icHJvZ3JhbXMvaHRjYWNoZWNsZWFuLmh0bWwiPmh0Y2FjaGVjbGVhbjwvYT4gYW5kIHdoYXQgdGFyZ2V0IHNpemUgdG8gCiAgICAgIHVzZSBmb3IgdGhlIGNhY2hlIGlzIHNvbWV3aGF0IGNvbXBsZXggYW5kIHRyaWFsIGFuZCBlcnJvciBtYXkgYmUgbmVlZGVkIHRvCiAgICAgIHNlbGVjdCBvcHRpbWFsIHZhbHVlcy48L3A+CgogICAgICA8cD48YSBocmVmPSJwcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCI+aHRjYWNoZWNsZWFuPC9hPiBoYXMgdHdvIG1vZGVzIG9mIAogICAgICBvcGVyYXRpb24uIEl0IGNhbiBiZSBydW4gYXMgcGVyc2lzdGVudCBkYWVtb24sIG9yIHBlcmlvZGljYWxseSBmcm9tIAogICAgICBjcm9uLiA8YSBocmVmPSJwcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCI+aHRjYWNoZWNsZWFuPC9hPiBjYW4gdGFrZSB1cCB0byBhbiBob3VyIAogICAgICBvciBtb3JlIHRvIHByb2Nlc3MgdmVyeSBsYXJnZSAodGVucyBvZiBnaWdhYnl0ZXMpIGNhY2hlcyBhbmQgaWYgeW91IGFyZSAKICAgICAgcnVubmluZyBpdCBmcm9tIGNyb24gaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgZGV0ZXJtaW5lIGhvdyBsb25nIGEgdHlwaWNhbCAKICAgICAgcnVuIHRha2VzLCB0byBhdm9pZCBydW5uaW5nIG1vcmUgdGhhbiBvbmUgaW5zdGFuY2UgYXQgYSB0aW1lLjwvcD4KCiAgICAgIDxwIGNsYXNzPSJmaWd1cmUiPgogICAgICA8aW1nIHNyYz0iaW1hZ2VzL2NhY2hpbmdfZmlnMS5naWYiIGFsdD0iIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjQwNiIgLz48YnIgLz4KICAgICAgPGEgaWQ9ImZpZ3VyZTEiIG5hbWU9ImZpZ3VyZTEiPjxkZm4+RmlndXJlIDE8L2Rmbj48L2E+OiBUeXBpY2FsCiAgICAgIGNhY2hlIGdyb3d0aCAvIGNsZWFuIHNlcXVlbmNlLjwvcD4KCiAgICAgIDxwPkJlY2F1c2UgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2Rpc2tfY2FjaGUuaHRtbCI+bW9kX2Rpc2tfY2FjaGU8L2E+PC9jb2RlPiBkb2VzIG5vdCBpdHNlbGYgcGF5IGF0dGVudGlvbgogICAgICB0byBob3cgbXVjaCBzcGFjZSBpcyB1c2VkIHlvdSBzaG91bGQgZW5zdXJlIHRoYXQgCiAgICAgIDxhIGhyZWY9InByb2dyYW1zL2h0Y2FjaGVjbGVhbi5odG1sIj5odGNhY2hlY2xlYW48L2E+IGlzIGNvbmZpZ3VyZWQgdG8gCiAgICAgIGxlYXZlIGVub3VnaCAiZ3JvdyByb29tIiBmb2xsb3dpbmcgYSBjbGVhbi48L3A+CiAgICAKCiAgPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9lbi9jYWNoaW5nLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2ZyL2NhY2hpbmcuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL2NhY2hpbmcuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAwOSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Ii4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2Pgo8L2JvZHk+PC9odG1sPg==