PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPm1vZF9wcm94eV9hanAgLSBBcGFjaGUgSFRUUCBTZXJ2ZXI8L3RpdGxlPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPgo8bGluayBocmVmPSIuLi9pbWFnZXMvZmF2aWNvbi5pY28iIHJlbD0ic2hvcnRjdXQgaWNvbiIgLz48L2hlYWQ+Cjxib2R5Pgo8ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iLi4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuMzwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5naWYiIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjM8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1vZHVsZXM8L2E+PC9kaXY+CjxkaXYgaWQ9InBhZ2UtY29udGVudCI+CjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QXBhY2hlIE1vZHVsZSBtb2RfcHJveHlfYWpwPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX3Byb3h5X2FqcC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvbW9kL21vZF9wcm94eV9hanAuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT48L3A+CjwvZGl2Pgo8dGFibGUgY2xhc3M9Im1vZHVsZSI+PHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QUpQIHN1cHBvcnQgbW9kdWxlIGZvcgo8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5Lmh0bWwiPm1vZF9wcm94eTwvYT48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI01vZHVsZUlkZW50aWZpZXIiPk1vZHVsZaBJZGVudGlmaWVyOjwvYT48L3RoPjx0ZD5wcm94eV9hanBfbW9kdWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU291cmNlRmlsZSI+U291cmNloEZpbGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eV9hanAuYzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiB2ZXJzaW9uIDIuMSBhbmQgbGF0ZXI8L3RkPjwvdHI+PC90YWJsZT4KPGgzPlN1bW1hcnk8L2gzPgoKICAgIDxwPlRoaXMgbW9kdWxlIDxlbT5yZXF1aXJlczwvZW0+IHRoZSBzZXJ2aWNlIG9mIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT4uIEl0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSAKICAgIDxjb2RlPkFwYWNoZSBKU2VydiBQcm90b2NvbCB2ZXJzaW9uIDEuMzwvY29kZT4gKGhlcmVhZnRlcgogICAgPGVtPkFKUDEzPC9lbT4pLjwvcD4KCiAgICA8cD5UaHVzLCBpbiBvcmRlciB0byBnZXQgdGhlIGFiaWxpdHkgb2YgaGFuZGxpbmcgPGNvZGU+QUpQMTM8L2NvZGU+CiAgICBwcm90b2NvbCwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPiBhbmQKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfYWpwLmh0bWwiPm1vZF9wcm94eV9hanA8L2E+PC9jb2RlPiBoYXZlIHRvIGJlIHByZXNlbnQgaW4gdGhlIHNlcnZlci48L3A+CgogICAgPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPldhcm5pbmc8L2gzPgogICAgICA8cD5EbyBub3QgZW5hYmxlIHByb3h5aW5nIHVudGlsIHlvdSBoYXZlIDxhIGhyZWY9Im1vZF9wcm94eS5odG1sI2FjY2VzcyI+c2VjdXJlZCB5b3VyIHNlcnZlcjwvYT4uIE9wZW4gcHJveHkKICAgICAgc2VydmVycyBhcmUgZGFuZ2Vyb3VzIGJvdGggdG8geW91ciBuZXR3b3JrIGFuZCB0byB0aGUgSW50ZXJuZXQgYXQKICAgICAgbGFyZ2UuPC9wPgogICAgPC9kaXY+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxoMyBjbGFzcz0iZGlyZWN0aXZlcyI+RGlyZWN0aXZlczwvaDM+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIG5vCiAgICAgICAgICAgIGRpcmVjdGl2ZXMuPC9wPgo8aDM+VG9waWNzPC9oMz4KPHVsIGlkPSJ0b3BpY3MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNlbnYiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNvdmVydmlld3Byb3RvY29sIj5PdmVydmlldyBvZiB0aGUgcHJvdG9jb2w8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYmFzcHBhY2tldHN0cnVjdCI+QmFzaWMgUGFja2V0IFN0cnVjdHVyZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNycGFjZXRzdHJ1Y3QiPlJlcXVlc3QgUGFja2V0IFN0cnVjdHVyZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNyZXNwcGFja2V0c3RydWN0Ij5SZXNwb25zZSBQYWNrZXQgU3RydWN0dXJlPC9hPjwvbGk+CjwvdWw+PGgzPlNlZSBhbHNvPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT48L2xpPgo8bGk+PGEgaHJlZj0iLi4vZW52Lmh0bWwiPkVudmlyb25tZW50IFZhcmlhYmxlIGRvY3VtZW50YXRpb248L2E+PC9saT4KPC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZW52IiBpZD0iZW52Ij5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9oMj4KICAgIDxwPkVudmlyb25tZW50IHZhcmlhYmxlcyB3aG9zZSBuYW1lcyBoYXZlIHRoZSBwcmVmaXggPGNvZGU+QUpQXzwvY29kZT4gCiAgICBhcmUgZm9yd2FyZGVkIHRvIHRoZSBvcmlnaW4gc2VydmVyIGFzIEFKUCByZXF1ZXN0IGF0dHJpYnV0ZXMgCiAgICAod2l0aCB0aGUgQUpQXyBwcmVmaXggcmVtb3ZlZCBmcm9tIHRoZSBuYW1lIG9mIHRoZSBrZXkpLjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ib3ZlcnZpZXdwcm90b2NvbCIgaWQ9Im92ZXJ2aWV3cHJvdG9jb2wiPk92ZXJ2aWV3IG9mIHRoZSBwcm90b2NvbDwvYT48L2gyPgogICAgPHA+VGhlIDxjb2RlPkFKUDEzPC9jb2RlPiBwcm90b2NvbCBpcyBwYWNrZXQtb3JpZW50ZWQuICBBIGJpbmFyeSBmb3JtYXQKICAgIHdhcyBwcmVzdW1hYmx5IGNob3NlbiBvdmVyIHRoZSBtb3JlIHJlYWRhYmxlIHBsYWluIHRleHQgZm9yIHJlYXNvbnMgb2YKICAgIHBlcmZvcm1hbmNlLiAgVGhlIHdlYiBzZXJ2ZXIgY29tbXVuaWNhdGVzIHdpdGggdGhlIHNlcnZsZXQgY29udGFpbmVyIG92ZXIKICAgIFRDUCBjb25uZWN0aW9ucy4gIFRvIGN1dCBkb3duIG9uIHRoZSBleHBlbnNpdmUgcHJvY2VzcyBvZiBzb2NrZXQgY3JlYXRpb24sCiAgICB0aGUgd2ViIHNlcnZlciB3aWxsIGF0dGVtcHQgdG8gbWFpbnRhaW4gcGVyc2lzdGVudCBUQ1AgY29ubmVjdGlvbnMgdG8gdGhlCiAgICBzZXJ2bGV0IGNvbnRhaW5lciwgYW5kIHRvIHJldXNlIGEgY29ubmVjdGlvbiBmb3IgbXVsdGlwbGUgcmVxdWVzdC9yZXNwb25zZQogICAgY3ljbGVzLjwvcD4KICAgIDxwPk9uY2UgYSBjb25uZWN0aW9uIGlzIGFzc2lnbmVkIHRvIGEgcGFydGljdWxhciByZXF1ZXN0LCBpdCB3aWxsIG5vdCBiZQogICAgdXNlZCBmb3IgYW55IG90aGVycyB1bnRpbCB0aGUgcmVxdWVzdC1oYW5kbGluZyBjeWNsZSBoYXMgdGVybWluYXRlZC4gIEluCiAgICBvdGhlciB3b3JkcywgcmVxdWVzdHMgYXJlIG5vdCBtdWx0aXBsZXhlZCBvdmVyIGNvbm5lY3Rpb25zLiAgVGhpcyBtYWtlcwogICAgZm9yIG11Y2ggc2ltcGxlciBjb2RlIGF0IGVpdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24sIGFsdGhvdWdoIGl0IGRvZXMKICAgIGNhdXNlIG1vcmUgY29ubmVjdGlvbnMgdG8gYmUgb3BlbiBhdCBvbmNlLjwvcD4KICAgIDxwPk9uY2UgdGhlIHdlYiBzZXJ2ZXIgaGFzIG9wZW5lZCBhIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZsZXQgY29udGFpbmVyLAogICAgdGhlIGNvbm5lY3Rpb24gY2FuIGJlIGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0YXRlczo8L3A+CiAgICA8dWw+CiAgICA8bGk+IElkbGUgPGJyIC8+IE5vIHJlcXVlc3QgaXMgYmVpbmcgaGFuZGxlZCBvdmVyIHRoaXMgY29ubmVjdGlvbi4gPC9saT4KICAgIDxsaT4gQXNzaWduZWQgPGJyIC8+IFRoZSBjb25uZWN0b24gaXMgaGFuZGxpbmcgYSBzcGVjaWZpYyByZXF1ZXN0LjwvbGk+CiAgICA8L3VsPgogICAgPHA+T25jZSBhIGNvbm5lY3Rpb24gaXMgYXNzaWduZWQgdG8gaGFuZGxlIGEgcGFydGljdWxhciByZXF1ZXN0LCB0aGUgYmFzaWMKICAgIHJlcXVlc3QgaW5mb3JtYXRvbiAoZS5nLiBIVFRQIGhlYWRlcnMsIGV0YykgaXMgc2VudCBvdmVyIHRoZSBjb25uZWN0aW9uIGluCiAgICBhIGhpZ2hseSBjb25kZW5zZWQgZm9ybSAoZS5nLiBjb21tb24gc3RyaW5ncyBhcmUgZW5jb2RlZCBhcyBpbnRlZ2VycykuCiAgICBEZXRhaWxzIG9mIHRoYXQgZm9ybWF0IGFyZSBiZWxvdyBpbiBSZXF1ZXN0IFBhY2tldCBTdHJ1Y3R1cmUuIElmIHRoZXJlIGlzIGEKICAgIGJvZHkgdG8gdGhlIHJlcXVlc3QgPGNvZGU+KGNvbnRlbnQtbGVuZ3RoICZndDsgMCk8L2NvZGU+LCB0aGF0IGlzIHNlbnQgaW4gYQogICAgc2VwYXJhdGUgcGFja2V0IGltbWVkaWF0ZWx5IGFmdGVyLjwvcD4KICAgIDxwPkF0IHRoaXMgcG9pbnQsIHRoZSBzZXJ2bGV0IGNvbnRhaW5lciBpcyBwcmVzdW1hYmx5IHJlYWR5IHRvIHN0YXJ0CiAgICBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0LiAgQXMgaXQgZG9lcyBzbywgaXQgY2FuIHNlbmQgdGhlCiAgICBmb2xsb3dpbmcgbWVzc2FnZXMgYmFjayB0byB0aGUgd2ViIHNlcnZlcjo8L3A+CiAgICA8dWw+CiAgICA8bGk+U0VORF9IRUFERVJTIDxiciAvPlNlbmQgYSBzZXQgb2YgaGVhZGVycyBiYWNrIHRvIHRoZSBicm93c2VyLjwvbGk+CiAgICA8bGk+U0VORF9CT0RZX0NIVU5LIDxiciAvPlNlbmQgYSBjaHVuayBvZiBib2R5IGRhdGEgYmFjayB0byB0aGUgYnJvd3Nlci4KICAgIDwvbGk+CiAgICA8bGk+R0VUX0JPRFlfQ0hVTksgPGJyIC8+R2V0IGZ1cnRoZXIgZGF0YSBmcm9tIHRoZSByZXF1ZXN0IGlmIGl0IGhhc24ndCBhbGwKICAgIGJlZW4gdHJhbnNmZXJyZWQgeWV0LiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgcGFja2V0cyBoYXZlIGEgZml4ZWQKICAgIG1heGltdW0gc2l6ZSBhbmQgYXJiaXRyYXJ5IGFtb3VudHMgb2YgZGF0YSBjYW4gYmUgaW5jbHVkZWQgdGhlIGJvZHkgb2YgYQogICAgcmVxdWVzdCAoZm9yIHVwbG9hZGVkIGZpbGVzLCBmb3IgZXhhbXBsZSkuICAoTm90ZTogdGhpcyBpcyB1bnJlbGF0ZWQgdG8KICAgIEhUVFAgY2h1bmtlZCB0cmFuZmVyKS48L2xpPgogICAgPGxpPkVORF9SRVNQT05TRSA8YnIgLz4gRmluaXNoIHRoZSByZXF1ZXN0LWhhbmRsaW5nIGN5Y2xlLjwvbGk+CiAgICA8L3VsPgogICAgPHA+RWFjaCBtZXNzYWdlIGlzIGFjY29tcGFuaWVkIGJ5IGEgZGlmZmVyZW50bHkgZm9ybWF0dGVkIHBhY2tldCBvZiBkYXRhLgogICAgU2VlIFJlc3BvbnNlIFBhY2tldCBTdHJ1Y3R1cmVzIGJlbG93IGZvciBkZXRhaWxzLjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iYmFzcHBhY2tldHN0cnVjdCIgaWQ9ImJhc3BwYWNrZXRzdHJ1Y3QiPkJhc2ljIFBhY2tldCBTdHJ1Y3R1cmU8L2E+PC9oMj4KICAgIDxwPlRoZXJlIGlzIGEgYml0IG9mIGFuIFhEUiBoZXJpdGFnZSB0byB0aGlzIHByb3RvY29sLCBidXQgaXQgZGlmZmVycwogICAgaW4gbG90cyBvZiB3YXlzIChubyA0IGJ5dGUgYWxpZ25tZW50LCBmb3IgZXhhbXBsZSkuPC9wPgogICAgPHA+Qnl0ZSBvcmRlcjogSSBhbSBub3QgY2xlYXIgYWJvdXQgdGhlIGVuZGlhbi1uZXNzIG9mIHRoZSBpbmRpdmlkdWFsCiAgICBieXRlcy4gIEknbSBndWVzc2luZyB0aGUgYnl0ZXMgYXJlIGxpdHRsZS1lbmRpYW4sIGJlY2F1c2UgdGhhdCdzIHdoYXQKICAgIFhEUiBzcGVjaWZpZXMsIGFuZCBJJ20gZ3Vlc3NpbmcgdGhhdCBzeXMvc29ja2V0IGxpYnJhcnkgaXMgbWFnaWNhbGx5CiAgICBtYWtpbmcgdGhhdCBzbyAob24gdGhlIEMgc2lkZSkuICBJZiBhbnlvbmUgd2l0aCBhIGJldHRlciBrbm93bGVkZ2Ugb2YKICAgIHNvY2tldCBjYWxscyBjYW4gc3RlcCBpbiwgdGhhdCB3b3VsZCBiZSBncmVhdC48L3A+CiAgICA8cD5UaGVyZSBhcmUgZm91ciBkYXRhIHR5cGVzIGluIHRoZSBwcm90b2NvbDogYnl0ZXMsIGJvb2xlYW5zLAogICAgaW50ZWdlcnMgYW5kIHN0cmluZ3MuPC9wPgogICAgPGRsPgogICAgPGR0PjxzdHJvbmc+Qnl0ZTwvc3Ryb25nPjwvZHQ+PGRkPkEgc2luZ2xlIGJ5dGUuPC9kZD4KICAgIDxkdD48c3Ryb25nPkJvb2xlYW48L3N0cm9uZz48L2R0PgogICAgICA8ZGQ+QSBzaW5nbGUgYnl0ZSwgPGNvZGU+MSA9IHRydWU8L2NvZGU+LCA8Y29kZT4wID0gZmFsc2U8L2NvZGU+LgogICAgICBVc2luZyBvdGhlciBub24temVybyB2YWx1ZXMgYXMgdHJ1ZSAoaS5lLiBDLXN0eWxlKSBtYXkgd29yayBpbiBzb21lIHBsYWNlcywKICAgICAgYnV0IGl0IHdvbid0IGluIG90aGVycy48L2RkPgogICAgPGR0PjxzdHJvbmc+SW50ZWdlcjwvc3Ryb25nPjwvZHQ+CiAgICAgIDxkZD5BIG51bWJlciBpbiB0aGUgcmFuZ2Ugb2YgPGNvZGU+MCB0byAyXjE2ICgzMjc2OCk8L2NvZGU+LiAgU3RvcmVkIGluCiAgICAgIDIgYnl0ZXMgd2l0aCB0aGUgaGlnaC1vcmRlciBieXRlIGZpcnN0LjwvZGQ+CiAgICA8ZHQ+PHN0cm9uZz5TdHJpbmc8L3N0cm9uZz48L2R0PgogICAgICA8ZGQ+QSB2YXJpYWJsZS1zaXplZCBzdHJpbmcgKGxlbmd0aCBib3VuZGVkIGJ5IDJeMTYpLiBFbmNvZGVkIHdpdGgKICAgICAgdGhlIGxlbmd0aCBwYWNrZWQgaW50byB0d28gYnl0ZXMgZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBzdHJpbmcKICAgICAgKGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgJ1wwJykuICBOb3RlIHRoYXQgdGhlIGVuY29kZWQgbGVuZ3RoIGRvZXMKICAgICAgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gaW5jbHVkZSB0aGUgdHJhaWxpbmcgJ1wwJyAtLSBpdCBpcyBsaWtlCiAgICAgIDxjb2RlPnN0cmxlbjwvY29kZT4uICBUaGlzIGlzIGEgdG91Y2ggY29uZnVzaW5nIG9uIHRoZSBKYXZhIHNpZGUsIHdoaWNoCiAgICAgIGlzIGxpdHRlcmVkIHdpdGggb2RkIGF1dG9pbmNyZW1lbnQgc3RhdGVtZW50cyB0byBza2lwIG92ZXIgdGhlc2UKICAgICAgdGVybWluYXRvcnMuICBJIGJlbGlldmUgdGhlIHJlYXNvbiB0aGlzIHdhcyBkb25lIHdhcyB0byBhbGxvdyB0aGUgQwogICAgICBjb2RlIHRvIGJlIGV4dHJhIGVmZmljaWVudCB3aGVuIHJlYWRpbmcgc3RyaW5ncyB3aGljaCB0aGUgc2VydmxldAogICAgICBjb250YWluZXIgaXMgc2VuZGluZyBiYWNrIC0tIHdpdGggdGhlIHRlcm1pbmF0aW5nIFwwIGNoYXJhY3RlciwgdGhlCiAgICAgIEMgY29kZSBjYW4gcGFzcyBhcm91bmQgcmVmZXJlbmNlcyBpbnRvIGEgc2luZ2xlIGJ1ZmZlciwgd2l0aG91dCBjb3B5aW5nLgogICAgICBpZiB0aGUgXDAgd2FzIG1pc3NpbmcsIHRoZSBDIGNvZGUgd291bGQgaGF2ZSB0byBjb3B5IHRoaW5ncyBvdXQgaW4gb3JkZXIKICAgICAgdG8gZ2V0IGl0cyBub3Rpb24gb2YgYSBzdHJpbmcuPC9kZD4KICAgIDwvZGw+CgogIDxoMz5QYWNrZXQgU2l6ZTwvaDM+CiAgICA8cD5BY2NvcmRpbmcgdG8gbXVjaCBvZiB0aGUgY29kZSwgdGhlIG1heCBwYWNrZXQgc2l6ZSBpcyA8Y29kZT4KICAgIDggKiAxMDI0IGJ5dGVzICg4Syk8L2NvZGU+LiAgVGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIHBhY2tldCBpcyBlbmNvZGVkIGluCiAgICB0aGUgaGVhZGVyLjwvcD4KICAKICA8aDM+UGFja2V0IEhlYWRlcnM8L2gzPgogICAgPHA+UGFja2V0cyBzZW50IGZyb20gdGhlIHNlcnZlciB0byB0aGUgY29udGFpbmVyIGJlZ2luIHdpdGgKICAgIDxjb2RlPjB4MTIzNDwvY29kZT4uICBQYWNrZXRzIHNlbnQgZnJvbSB0aGUgY29udGFpbmVyIHRvIHRoZSBzZXJ2ZXIKICAgIGJlZ2luIHdpdGggPGNvZGU+QUI8L2NvZGU+ICh0aGF0J3MgdGhlIEFTQ0lJIGNvZGUgZm9yIEEgZm9sbG93ZWQgYnkgdGhlCiAgICBBU0NJSSBjb2RlIGZvciBCKS4gIEFmdGVyIHRob3NlIGZpcnN0IHR3byBieXRlcywgdGhlcmUgaXMgYW4gaW50ZWdlcgogICAgKGVuY29kZWQgYXMgYWJvdmUpIHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgcGF5bG9hZC4gIEFsdGhvdWdoIHRoaXMgbWlnaHQKICAgIHN1Z2dlc3QgdGhhdCB0aGUgbWF4aW11bSBwYXlsb2FkIGNvdWxkIGJlIGFzIGxhcmdlIGFzIDJeMTYsIGluIGZhY3QsIHRoZQogICAgY29kZSBzZXRzIHRoZSBtYXhpbXVtIHRvIGJlIDhLLjwvcD4KICAgIDx0YWJsZT4KICAgICAgPHRyPgogICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij48ZW0+UGFja2V0IEZvcm1hdCAoU2VydmVyLSZndDtDb250YWluZXIpPC9lbT48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkPkJ5dGU8L3RkPgogICAgICAgIDx0ZD4wPC90ZD4KICAgICAgICA8dGQ+MTwvdGQ+CiAgICAgICAgPHRkPjI8L3RkPgogICAgICAgIDx0ZD4zPC90ZD4KICAgICAgICA8dGQ+NC4uLihuKzMpPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD5Db250ZW50czwvdGQ+CiAgICAgICAgPHRkPjB4MTI8L3RkPgogICAgICAgIDx0ZD4weDM0PC90ZD4KICAgICAgICA8dGQgY29sc3Bhbj0iMiI+RGF0YSBMZW5ndGggKG4pPC90ZD4KICAgICAgICA8dGQ+RGF0YTwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgogICAgPHRhYmxlPgogICAgICA8dHI+CiAgICAgICAgPHRkIGNvbHNwYW49IjYiPjxlbT5QYWNrZXQgRm9ybWF0IChDb250YWluZXItJmd0O1NlcnZlcik8L2VtPjwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+Qnl0ZTwvdGQ+CiAgICAgICAgPHRkPjA8L3RkPgogICAgICAgIDx0ZD4xPC90ZD4KICAgICAgICA8dGQ+MjwvdGQ+CiAgICAgICAgPHRkPjM8L3RkPgogICAgICAgIDx0ZD40Li4uKG4rMyk8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkPkNvbnRlbnRzPC90ZD4KICAgICAgICA8dGQ+QTwvdGQ+CiAgICAgICAgPHRkPkI8L3RkPgogICAgICAgIDx0ZCBjb2xzcGFuPSIyIj5EYXRhIExlbmd0aCAobik8L3RkPgogICAgICAgIDx0ZD5EYXRhPC90ZD4KICAgICAgPC90cj4KICAgIDwvdGFibGU+CiAgICA8cD5Gb3IgbW9zdCBwYWNrZXRzLCB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcGF5bG9hZCBlbmNvZGVzIHRoZSB0eXBlIG9mCiAgICAgbWVzc2FnZS4gIFRoZSBleGNlcHRpb24gaXMgZm9yIHJlcXVlc3QgYm9keSBwYWNrZXRzIHNlbnQgZnJvbSB0aGUgc2VydmVyIHRvCiAgICAgdGhlIGNvbnRhaW5lciAtLSB0aGV5IGFyZSBzZW50IHdpdGggYSBzdGFuZGFyZCBwYWNrZXQgaGVhZGVyICg8Y29kZT4KICAgICAweDEyMzQ8L2NvZGU+IGFuZCB0aGVuIGxlbmd0aCBvZiB0aGUgcGFja2V0KSwgYnV0IHdpdGhvdXQgYW55IHByZWZpeCBjb2RlCiAgICAgYWZ0ZXIgdGhhdC48L3A+CiAgICAgPHA+VGhlIHdlYiBzZXJ2ZXIgY2FuIHNlbmQgdGhlIGZvbGxvd2luZyBtZXNzYWdlcyB0byB0aGUgc2VydmxldAogICAgIGNvbnRhaW5lcjo8L3A+CiAgICA8dGFibGU+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+Q29kZTwvdGQ+CiAgICAgICAgPHRkPlR5cGUgb2YgUGFja2V0PC90ZD4KICAgICAgICA8dGQ+TWVhbmluZzwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+MjwvdGQ+CiAgICAgICAgPHRkPkZvcndhcmQgUmVxdWVzdDwvdGQ+CiAgICAgICAgPHRkPkJlZ2luIHRoZSByZXF1ZXN0LXByb2Nlc3NpbmcgY3ljbGUgd2l0aCB0aGUgZm9sbG93aW5nIGRhdGE8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkPjc8L3RkPgogICAgICAgIDx0ZD5TaHV0ZG93bjwvdGQ+CiAgICAgICAgPHRkPlRoZSB3ZWIgc2VydmVyIGFza3MgdGhlIGNvbnRhaW5lciB0byBzaHV0IGl0c2VsZiBkb3duLjwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+ODwvdGQ+CiAgICAgICAgPHRkPlBpbmc8L3RkPgogICAgICAgIDx0ZD5UaGUgd2ViIHNlcnZlciBhc2tzIHRoZSBjb250YWluZXIgdG8gdGFrZSBjb250cm9sCiAgICAgICAgKHNlY3VyZSBsb2dpbiBwaGFzZSkuPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD4xMDwvdGQ+CiAgICAgICAgPHRkPkNQaW5nPC90ZD4KICAgICAgICA8dGQ+VGhlIHdlYiBzZXJ2ZXIgYXNrcyB0aGUgY29udGFpbmVyIHRvIHJlc3BvbmQgcXVpY2tseSB3aXRoIGEgQ1BvbmcuCiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD5ub25lPC90ZD4KICAgICAgICA8dGQ+RGF0YTwvdGQ+CiAgICAgICAgPHRkPlNpemUgKDIgYnl0ZXMpIGFuZCBjb3JyZXNwb25kaW5nIGJvZHkgZGF0YS48L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KICAgIDxwPlRvIGVuc3VyZSBzb21lIGJhc2ljIHNlY3VyaXR5LCB0aGUgY29udGFpbmVyIHdpbGwgb25seSBhY3R1YWxseSBkbyB0aGUKICAgIDxjb2RlPlNodXRkb3duPC9jb2RlPiBpZiB0aGUgcmVxdWVzdCBjb21lcyBmcm9tIHRoZSBzYW1lIG1hY2hpbmUgb24gd2hpY2gKICAgIGl0J3MgaG9zdGVkLjwvcD4KICAgIDxwPlRoZSBmaXJzdCA8Y29kZT5EYXRhPC9jb2RlPiBwYWNrZXQgaXMgc2VuZCBpbW1lZGlhdGx5IGFmdGVyIHRoZQogICAgPGNvZGU+Rm9yd2FyZCBSZXF1ZXN0PC9jb2RlPiBieSB0aGUgd2ViIHNlcnZlci48L3A+CiAgICA8cD5UaGUgc2VydmxldCBjb250YWluZXIgY2FuIHNlbmQgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBtZXNzYWdlcyB0byB0aGUKICAgIHdlYnNlcnZlcjo8L3A+CiAgICA8dGFibGU+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+Q29kZTwvdGQ+CiAgICAgICAgPHRkPlR5cGUgb2YgUGFja2V0PC90ZD4KICAgICAgICA8dGQ+TWVhbmluZzwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+MzwvdGQ+CiAgICAgICAgPHRkPlNlbmQgQm9keSBDaHVuazwvdGQ+CiAgICAgICAgPHRkPlNlbmQgYSBjaHVuayBvZiB0aGUgYm9keSBmcm9tIHRoZSBzZXJ2bGV0IGNvbnRhaW5lciB0byB0aGUgd2ViCiAgICAgICAgc2VydmVyIChhbmQgcHJlc3VtYWJseSwgb250byB0aGUgYnJvd3NlcikuIDwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+NDwvdGQ+CiAgICAgICAgPHRkPlNlbmQgSGVhZGVyczwvdGQ+CiAgICAgICAgPHRkPlNlbmQgdGhlIHJlc3BvbnNlIGhlYWRlcnMgZnJvbSB0aGUgc2VydmxldCBjb250YWluZXIgdG8gdGhlIHdlYgogICAgICAgIHNlcnZlciAoYW5kIHByZXN1bWFibHksIG9udG8gdGhlIGJyb3dzZXIpLjwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+NTwvdGQ+CiAgICAgICAgPHRkPkVuZCBSZXNwb25zZTwvdGQ+CiAgICAgICAgPHRkPk1hcmtzIHRoZSBlbmQgb2YgdGhlIHJlc3BvbnNlIChhbmQgdGh1cyB0aGUgcmVxdWVzdC1oYW5kbGluZyBjeWNsZSkuCiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD42PC90ZD4KICAgICAgICA8dGQ+R2V0IEJvZHkgQ2h1bms8L3RkPgogICAgICAgIDx0ZD5HZXQgZnVydGhlciBkYXRhIGZyb20gdGhlIHJlcXVlc3QgaWYgaXQgaGFzbid0IGFsbCBiZWVuCiAgICAgICAgdHJhbnNmZXJyZWQgeWV0LjwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+OTwvdGQ+CiAgICAgICAgPHRkPkNQb25nIFJlcGx5PC90ZD4KICAgICAgICA8dGQ+VGhlIHJlcGx5IHRvIGEgQ1BpbmcgcmVxdWVzdDwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgogICAgPHA+RWFjaCBvZiB0aGUgYWJvdmUgbWVzc2FnZXMgaGFzIGEgZGlmZmVyZW50IGludGVybmFsIHN0cnVjdHVyZSwgZGV0YWlsZWQKICAgIGJlbG93LjwvcD4KICAKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0icnBhY2V0c3RydWN0IiBpZD0icnBhY2V0c3RydWN0Ij5SZXF1ZXN0IFBhY2tldCBTdHJ1Y3R1cmU8L2E+PC9oMj4KICAgIDxwPkZvciBtZXNzYWdlcyBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNvbnRhaW5lciBvZiB0eXBlCiAgICA8ZW0+Rm9yd2FyZCBSZXF1ZXN0PC9lbT46PC9wPgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHByZT4KQUpQMTNfRk9SV0FSRF9SRVFVRVNUIDo9CiAgICBwcmVmaXhfY29kZSAgICAgIChieXRlKSAweDAyID0gSktfQUpQMTNfRk9SV0FSRF9SRVFVRVNUCiAgICBtZXRob2QgICAgICAgICAgIChieXRlKQogICAgcHJvdG9jb2wgICAgICAgICAoc3RyaW5nKQogICAgcmVxX3VyaSAgICAgICAgICAoc3RyaW5nKQogICAgcmVtb3RlX2FkZHIgICAgICAoc3RyaW5nKQogICAgcmVtb3RlX2hvc3QgICAgICAoc3RyaW5nKQogICAgc2VydmVyX25hbWUgICAgICAoc3RyaW5nKQogICAgc2VydmVyX3BvcnQgICAgICAoaW50ZWdlcikKICAgIGlzX3NzbCAgICAgICAgICAgKGJvb2xlYW4pCiAgICBudW1faGVhZGVycyAgICAgIChpbnRlZ2VyKQogICAgcmVxdWVzdF9oZWFkZXJzICoocmVxX2hlYWRlcl9uYW1lIHJlcV9oZWFkZXJfdmFsdWUpCiAgICBhdHRyaWJ1dGVzICAgICAgKihhdHRyaWJ1dF9uYW1lIGF0dHJpYnV0ZV92YWx1ZSkKICAgIHJlcXVlc3RfdGVybWluYXRvciAoYnl0ZSkgT3hGRgogICAgPC9wcmU+PC9kaXY+CiAgICA8cD5UaGUgPGNvZGU+cmVxdWVzdF9oZWFkZXJzPC9jb2RlPiBoYXZlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgogICAgPC9wPjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+CnJlcV9oZWFkZXJfbmFtZSA6PSAKICAgIHNjX3JlcV9oZWFkZXJfbmFtZSB8IChzdHJpbmcpICBbc2VlIGJlbG93IGZvciBob3cgdGhpcyBpcyBwYXJzZWRdCgpzY19yZXFfaGVhZGVyX25hbWUgOj0gMHhBMHh4IChpbnRlZ2VyKQoKcmVxX2hlYWRlcl92YWx1ZSA6PSAoc3RyaW5nKQo8L3ByZT48L2Rpdj4KICAgIDxwPlRoZSA8Y29kZT5hdHRyaWJ1dGVzPC9jb2RlPiBhcmUgb3B0aW9uYWwgYW5kIGhhdmUgdGhlIGZvbGxvd2luZwogICAgc3RydWN0dXJlOjwvcD4KICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+CmF0dHJpYnV0ZV9uYW1lIDo9IHNjX2FfbmFtZSB8IChzY19hX3JlcV9hdHRyaWJ1dGUgc3RyaW5nKQoKYXR0cmlidXRlX3ZhbHVlIDo9IChzdHJpbmcpCgogICAgPC9wcmU+PC9kaXY+CiAgICA8cD5Ob3QgdGhhdCB0aGUgYWxsLWltcG9ydGFudCBoZWFkZXIgaXMgPGNvZGU+Y29udGVudC1sZW5ndGg8L2NvZGU+LAogICAgYmVjYXVzZSBpdCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBjb250YWluZXIgbG9va3MgZm9yIGFub3RoZXIKICAgIHBhY2tldCBpbW1lZGlhdGVseS48L3A+CiAgPGgzPkRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50cyBvZiBGb3J3YXJkIFJlcXVlc3QKICA8L2gzPgogIDxoMz5SZXF1ZXN0IHByZWZpeDwvaDM+CiAgICA8cD5Gb3IgYWxsIHJlcXVlc3RzLCB0aGlzIHdpbGwgYmUgMi4gU2VlIGFib3ZlIGZvciBkZXRhaWxzIG9uIG90aGVyIFByZWZpeAogICAgY29kZXMuPC9wPgogIAogIDxoMz5NZXRob2Q8L2gzPgogICAgPHA+VGhlIEhUVFAgbWV0aG9kLCBlbmNvZGVkIGFzIGEgc2luZ2xlIGJ5dGU6PC9wPgogICAgPHRhYmxlPgogICAgICA8dHI+PHRkPkNvbW1hbmQgTmFtZTwvdGQ+PHRkPkNvZGU8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+T1BUSU9OUzwvdGQ+PHRkPjE8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+R0VUPC90ZD48dGQ+MjwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5IRUFEPC90ZD48dGQ+MzwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5QT1NUPC90ZD48dGQ+NDwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5QVVQ8L3RkPjx0ZD41PC90ZD48L3RyPgogICAgICA8dHI+PHRkPkRFTEVURTwvdGQ+PHRkPjY8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+VFJBQ0U8L3RkPjx0ZD43PC90ZD48L3RyPgogICAgICA8dHI+PHRkPlBST1BGSU5EPC90ZD48dGQ+ODwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5QUk9QUEFUQ0g8L3RkPjx0ZD45PC90ZD48L3RyPgogICAgICA8dHI+PHRkPk1LQ09MPC90ZD48dGQ+MTA8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+Q09QWTwvdGQ+PHRkPjExPC90ZD48L3RyPgogICAgICA8dHI+PHRkPk1PVkU8L3RkPjx0ZD4xMjwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5MT0NLPC90ZD48dGQ+MTM8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+VU5MT0NLPC90ZD48dGQ+MTQ8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+QUNMPC90ZD48dGQ+MTU8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+UkVQT1JUPC90ZD48dGQ+MTY8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+VkVSU0lPTi1DT05UUk9MPC90ZD48dGQ+MTc8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+Q0hFQ0tJTjwvdGQ+PHRkPjE4PC90ZD48L3RyPgogICAgICA8dHI+PHRkPkNIRUNLT1VUPC90ZD48dGQ+MTk8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+VU5DSEVDS09VVDwvdGQ+PHRkPjIwPC90ZD48L3RyPgogICAgICA8dHI+PHRkPlNFQVJDSDwvdGQ+PHRkPjIxPC90ZD48L3RyPgogICAgICA8dHI+PHRkPk1LV09SS1NQQUNFPC90ZD48dGQ+MjI8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+VVBEQVRFPC90ZD48dGQ+MjM8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+TEFCRUw8L3RkPjx0ZD4yNDwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5NRVJHRTwvdGQ+PHRkPjI1PC90ZD48L3RyPgogICAgICA8dHI+PHRkPkJBU0VMSU5FX0NPTlRST0w8L3RkPjx0ZD4yNjwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5NS0FDVElWSVRZPC90ZD48dGQ+Mjc8L3RkPjwvdHI+CiAgICA8L3RhYmxlPgogICAgPHA+TGF0ZXIgdmVyc2lvbiBvZiBhanAxMywgd2lsbCB0cmFuc3BvcnQgCiAgICBhZGRpdGlvbmFsIG1ldGhvZHMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGluIHRoaXMgbGlzdC48L3A+CiAgCiAgPGgzPnByb3RvY29sLCByZXFfdXJpLCByZW1vdGVfYWRkciwgcmVtb3RlX2hvc3QsIHNlcnZlcl9uYW1lLAogIHNlcnZlcl9wb3J0LCBpc19zc2w8L2gzPgogICAgPHA+VGhlc2UgYXJlIGFsbCBmYWlybHkgc2VsZi1leHBsYW5hdG9yeS4gIEVhY2ggb2YgdGhlc2UgaXMgcmVxdWlyZWQsIGFuZAogICAgd2lsbCBiZSBzZW50IGZvciBldmVyeSByZXF1ZXN0LjwvcD4KICAKICA8aDM+SGVhZGVyczwvaDM+CiAgICA8cD5UaGUgc3RydWN0dXJlIG9mIDxjb2RlPnJlcXVlc3RfaGVhZGVyczwvY29kZT4gaXMgdGhlIGZvbGxvd2luZzoKICAgIEZpcnN0LCB0aGUgbnVtYmVyIG9mIGhlYWRlcnMgPGNvZGU+bnVtX2hlYWRlcnM8L2NvZGU+IGlzIGVuY29kZWQuCiAgICBUaGVuLCBhIHNlcmllcyBvZiBoZWFkZXIgbmFtZSA8Y29kZT5yZXFfaGVhZGVyX25hbWU8L2NvZGU+IC8gdmFsdWUKICAgIDxjb2RlPnJlcV9oZWFkZXJfdmFsdWU8L2NvZGU+IHBhaXJzIGZvbGxvd3MuCiAgICBDb21tb24gaGVhZGVyIG5hbWVzIGFyZSBlbmNvZGVkIGFzIGludGVnZXJzLAogICAgdG8gc2F2ZSBzcGFjZS4gIElmIHRoZSBoZWFkZXIgbmFtZSBpcyBub3QgaW4gdGhlIGxpc3Qgb2YgYmFzaWMgaGVhZGVycywKICAgIGl0IGlzIGVuY29kZWQgbm9ybWFsbHkgKGFzIGEgc3RyaW5nLCB3aXRoIHByZWZpeGVkIGxlbmd0aCkuICBUaGUgbGlzdCBvZgogICAgY29tbW9uIGhlYWRlcnMgPGNvZGU+c2NfcmVxX2hlYWRlcl9uYW1lPC9jb2RlPmFuZCB0aGVpciBjb2RlcwogICAgaXMgYXMgZm9sbG93cyAoYWxsIGFyZSBjYXNlLXNlbnNpdGl2ZSk6PC9wPgogICAgPHRhYmxlPgogICAgICA8dHI+PHRkPk5hbWU8L3RkPjx0ZD5Db2RlIHZhbHVlPC90ZD48dGQ+Q29kZSBuYW1lPC90ZD48L3RyPgogICAgICA8dHI+PHRkPmFjY2VwdDwvdGQ+PHRkPjB4QTAwMTwvdGQ+PHRkPlNDX1JFUV9BQ0NFUFQ8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+YWNjZXB0LWNoYXJzZXQ8L3RkPjx0ZD4weEEwMDI8L3RkPjx0ZD5TQ19SRVFfQUNDRVBUX0NIQVJTRVQKICAgICAgPC90ZD48L3RyPgogICAgICA8dHI+PHRkPmFjY2VwdC1lbmNvZGluZzwvdGQ+PHRkPjB4QTAwMzwvdGQ+PHRkPlNDX1JFUV9BQ0NFUFRfRU5DT0RJTkcKICAgICAgPC90ZD48L3RyPgogICAgICA8dHI+PHRkPmFjY2VwdC1sYW5ndWFnZTwvdGQ+PHRkPjB4QTAwNDwvdGQ+PHRkPlNDX1JFUV9BQ0NFUFRfTEFOR1VBR0UKICAgICAgPC90ZD48L3RyPgogICAgICA8dHI+PHRkPmF1dGhvcml6YXRpb248L3RkPjx0ZD4weEEwMDU8L3RkPjx0ZD5TQ19SRVFfQVVUSE9SSVpBVElPTjwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj48dGQ+Y29ubmVjdGlvbjwvdGQ+PHRkPjB4QTAwNjwvdGQ+PHRkPlNDX1JFUV9DT05ORUNUSU9OPC90ZD48L3RyPgogICAgICA8dHI+PHRkPmNvbnRlbnQtdHlwZTwvdGQ+PHRkPjB4QTAwNzwvdGQ+PHRkPlNDX1JFUV9DT05URU5UX1RZUEU8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+PHRkPmNvbnRlbnQtbGVuZ3RoPC90ZD48dGQ+MHhBMDA4PC90ZD48dGQ+U0NfUkVRX0NPTlRFTlRfTEVOR1RIPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPjx0ZD5jb29raWU8L3RkPjx0ZD4weEEwMDk8L3RkPjx0ZD5TQ19SRVFfQ09PS0lFPC90ZD48L3RyPgogICAgICA8dHI+PHRkPmNvb2tpZTI8L3RkPjx0ZD4weEEwMEE8L3RkPjx0ZD5TQ19SRVFfQ09PS0lFMjwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5ob3N0PC90ZD48dGQ+MHhBMDBCPC90ZD48dGQ+U0NfUkVRX0hPU1Q8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+cHJhZ21hPC90ZD48dGQ+MHhBMDBDPC90ZD48dGQ+U0NfUkVRX1BSQUdNQTwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5yZWZlcmVyPC90ZD48dGQ+MHhBMDBEPC90ZD48dGQ+U0NfUkVRX1JFRkVSRVI8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+dXNlci1hZ2VudDwvdGQ+PHRkPjB4QTAwRTwvdGQ+PHRkPlNDX1JFUV9VU0VSX0FHRU5UPC90ZD48L3RyPgogICAgPC90YWJsZT4KICAgIDxwPlRoZSBKYXZhIGNvZGUgdGhhdCByZWFkcyB0aGlzIGdyYWJzIHRoZSBmaXJzdCB0d28tYnl0ZSBpbnRlZ2VyIGFuZCBpZgogICAgaXQgc2VlcyBhbiA8Y29kZT4nMHhBMCc8L2NvZGU+IGluIHRoZSBtb3N0IHNpZ25pZmljYW50CiAgICBieXRlLCBpdCB1c2VzIHRoZSBpbnRlZ2VyIGluIHRoZSBzZWNvbmQgYnl0ZSBhcyBhbiBpbmRleCBpbnRvIGFuIGFycmF5IG9mCiAgICBoZWFkZXIgbmFtZXMuICBJZiB0aGUgZmlyc3QgYnl0ZSBpcyBub3QgPGNvZGU+MHhBMDwvY29kZT4sIGl0IGFzc3VtZXMgdGhhdAogICAgdGhlIHR3by1ieXRlIGludGVnZXIgaXMgdGhlIGxlbmd0aCBvZiBhIHN0cmluZywgd2hpY2ggaXMgdGhlbiByZWFkIGluLjwvcD4KICAgIDxwPlRoaXMgd29ya3Mgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBubyBoZWFkZXIgbmFtZXMgd2lsbCBoYXZlIGxlbmd0aAogICAgZ3JlYXRlciB0aGFuIDxjb2RlPjB4OTk5OSAoPT0weEEwMDAgLSAxKTwvY29kZT4sIHdoaWNoIGlzIHBlcmZlY3RseQogICAgcmVhc29uYWJsZSwgdGhvdWdoIHNvbWV3aGF0IGFyYml0cmFyeS48L3A+CiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTo8L2gzPgogICAgVGhlIDxjb2RlPmNvbnRlbnQtbGVuZ3RoPC9jb2RlPiBoZWFkZXIgaXMgZXh0cmVtZWx5CiAgICBpbXBvcnRhbnQuICBJZiBpdCBpcyBwcmVzZW50IGFuZCBub24temVybywgdGhlIGNvbnRhaW5lciBhc3N1bWVzIHRoYXQKICAgIHRoZSByZXF1ZXN0IGhhcyBhIGJvZHkgKGEgUE9TVCByZXF1ZXN0LCBmb3IgZXhhbXBsZSksIGFuZCBpbW1lZGlhdGVseQogICAgcmVhZHMgYSBzZXBhcmF0ZSBwYWNrZXQgb2ZmIHRoZSBpbnB1dCBzdHJlYW0gdG8gZ2V0IHRoYXQgYm9keS4KICAgIDwvZGl2PgogIAogIDxoMz5BdHRyaWJ1dGVzPC9oMz4KICAgIDxwPlRoZSBhdHRyaWJ1dGVzIHByZWZpeGVkIHdpdGggYSA8Y29kZT4/PC9jb2RlPgogICAgKGUuZy4gPGNvZGU+P2NvbnRleHQ8L2NvZGU+KSBhcmUgYWxsIG9wdGlvbmFsLiAgRm9yIGVhY2gsIHRoZXJlIGlzIGEKICAgIHNpbmdsZSBieXRlIGNvZGUgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgYXR0cmlidXRlLCBhbmQgdGhlbiBpdHMgdmFsdWUKICAgIChzdHJpbmcgb3IgaW50ZWdlcikuICBUaGV5IGNhbiBiZSBzZW50IGluIGFueSBvcmRlciAodGhvdWdoIHRoZSBDIGNvZGUKICAgIGFsd2F5cyBzZW5kcyB0aGVtIGluIHRoZSBvcmRlciBsaXN0ZWQgYmVsb3cpLiAgQSBzcGVjaWFsIHRlcm1pbmF0aW5nIGNvZGUKICAgIGlzIHNlbnQgdG8gc2lnbmFsIHRoZSBlbmQgb2YgdGhlIGxpc3Qgb2Ygb3B0aW9uYWwgYXR0cmlidXRlcy4gVGhlIGxpc3Qgb2YKICAgIGJ5dGUgY29kZXMgaXM6PC9wPgogICAgPHRhYmxlPgogICAgICA8dHI+PHRkPkluZm9ybWF0aW9uPC90ZD48dGQ+Q29kZSBWYWx1ZTwvdGQ+PHRkPlR5cGUgT2YgVmFsdWU8L3RkPjx0ZD5Ob3RlPC90ZD48L3RyPgogICAgICA8dHI+PHRkPj9jb250ZXh0PC90ZD48dGQ+MHgwMTwvdGQ+PHRkPi08L3RkPjx0ZD5Ob3QgY3VycmVudGx5IGltcGxlbWVudGVkCiAgICAgIDwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD4/c2VydmxldF9wYXRoPC90ZD48dGQ+MHgwMjwvdGQ+PHRkPi08L3RkPjx0ZD5Ob3QgY3VycmVudGx5IGltcGxlbWVudGVkCiAgICAgIDwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD4/cmVtb3RlX3VzZXI8L3RkPjx0ZD4weDAzPC90ZD48dGQ+U3RyaW5nPC90ZD48dGQgLz48L3RyPgogICAgICA8dHI+PHRkPj9hdXRoX3R5cGU8L3RkPjx0ZD4weDA0PC90ZD48dGQ+U3RyaW5nPC90ZD48dGQgLz48L3RyPgogICAgICA8dHI+PHRkPj9xdWVyeV9zdHJpbmc8L3RkPjx0ZD4weDA1PC90ZD48dGQ+U3RyaW5nPC90ZD48dGQgLz48L3RyPgogICAgICA8dHI+PHRkPj9qdm1fcm91dGU8L3RkPjx0ZD4weDA2PC90ZD48dGQ+U3RyaW5nPC90ZD48dGQgLz48L3RyPgogICAgICA8dHI+PHRkPj9zc2xfY2VydDwvdGQ+PHRkPjB4MDc8L3RkPjx0ZD5TdHJpbmc8L3RkPjx0ZCAvPjwvdHI+CiAgICAgIDx0cj48dGQ+P3NzbF9jaXBoZXI8L3RkPjx0ZD4weDA4PC90ZD48dGQ+U3RyaW5nPC90ZD48dGQgLz48L3RyPgogICAgICA8dHI+PHRkPj9zc2xfc2Vzc2lvbjwvdGQ+PHRkPjB4MDk8L3RkPjx0ZD5TdHJpbmc8L3RkPjx0ZCAvPjwvdHI+CiAgICAgIDx0cj48dGQ+P3JlcV9hdHRyaWJ1dGU8L3RkPjx0ZD4weDBBPC90ZD48dGQ+U3RyaW5nPC90ZD48dGQ+TmFtZSAodGhlIG5hbWUgb2YgdGhlCiAgICAgIGF0dHJpYnV0ZSBmb2xsb3dzKTwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD4/c3NsX2tleV9zaXplPC90ZD48dGQ+MHgwQjwvdGQ+PHRkPkludGVnZXI8L3RkPjx0ZCAvPjwvdHI+CiAgICAgIDx0cj48dGQ+YXJlX2RvbmU8L3RkPjx0ZD4weEZGPC90ZD48dGQ+LTwvdGQ+PHRkPnJlcXVlc3RfdGVybWluYXRvcjwvdGQ+PC90cj4KICAgIDwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGU+Y29udGV4dDwvY29kZT4gYW5kIDxjb2RlPnNlcnZsZXRfcGF0aDwvY29kZT4gYXJlIG5vdAogICAgY3VycmVudGx5IHNldCBieSB0aGUgQyBjb2RlLCBhbmQgbW9zdCBvZiB0aGUgSmF2YSBjb2RlIGNvbXBsZXRlbHkgaWdub3JlcwogICAgd2hhdGV2ZXIgaXMgc2VudCBvdmVyIGZvciB0aG9zZSBmaWVsZHMgKGFuZCBzb21lIG9mIGl0IHdpbGwgYWN0dWFsbHkgYnJlYWsKICAgIGlmIGEgc3RyaW5nIGlzIHNlbnQgYWxvbmcgYWZ0ZXIgb25lIG9mIHRob3NlIGNvZGVzKS4gIEkgZG9uJ3Qga25vdyBpZiB0aGlzCiAgICBpcyBhIGJ1ZyBvciBhbiB1bmltcGxlbWVudGVkIGZlYXR1cmUgb3IganVzdCB2ZXN0aWdpYWwgY29kZSwgYnV0IGl0J3MKICAgIG1pc3NpbmcgZnJvbSBib3RoIHNpZGVzIG9mIHRoZSBjb25uZWN0aW9uLjwvcD4KICAgIDxwPlRoZSA8Y29kZT5yZW1vdGVfdXNlcjwvY29kZT4gYW5kIDxjb2RlPmF1dGhfdHlwZTwvY29kZT4gcHJlc3VtYWJseQogICAgcmVmZXIgdG8gSFRUUC1sZXZlbCBhdXRoZW50aWNhdGlvbiwgYW5kIGNvbW11bmljYXRlIHRoZSByZW1vdGUgdXNlcidzCiAgICB1c2VybmFtZSBhbmQgdGhlIHR5cGUgb2YgYXV0aGVudGljYXRpb24gdXNlZCB0byBlc3RhYmxpc2ggdGhlaXIgaWRlbnRpdHkKICAgIChlLmcuIEJhc2ljLCBEaWdlc3QpLjwvcD4KICAgIDxwPlRoZSA8Y29kZT5xdWVyeV9zdHJpbmc8L2NvZGU+LCA8Y29kZT5zc2xfY2VydDwvY29kZT4sCiAgICA8Y29kZT5zc2xfY2lwaGVyPC9jb2RlPiwgYW5kIDxjb2RlPnNzbF9zZXNzaW9uPC9jb2RlPiByZWZlciB0byB0aGUKICAgIGNvcnJlc3BvbmRpbmcgcGllY2VzIG9mIEhUVFAgYW5kIEhUVFBTLjwvcD4KICAgIDxwPlRoZSA8Y29kZT5qdm1fcm91dGU8L2NvZGU+LCBpcyB1c2VkIHRvIHN1cHBvcnQgc3RpY2t5CiAgICBzZXNzaW9ucyAtLSBhc3NvY2lhdGluZyBhIHVzZXIncyBzZXNzb24gd2l0aCBhIHBhcnRpY3VsYXIgVG9tY2F0IGluc3RhbmNlCiAgICBpbiB0aGUgcHJlc2VuY2Ugb2YgbXVsdGlwbGUsIGxvYWQtYmFsYW5jaW5nIHNlcnZlcnMuPC9wPgogICAgPHA+QmV5b25kIHRoaXMgbGlzdCBvZiBiYXNpYyBhdHRyaWJ1dGVzLCBhbnkgbnVtYmVyIG9mIG90aGVyIGF0dHJpYnV0ZXMKICAgIGNhbiBiZSBzZW50IHZpYSB0aGUgPGNvZGU+cmVxX2F0dHJpYnV0ZTwvY29kZT4gY29kZSA8Y29kZT4weDBBPC9jb2RlPi4KICAgIEEgcGFpciBvZiBzdHJpbmdzIHRvIHJlcHJlc2VudCB0aGUgYXR0cmlidXRlIG5hbWUgYW5kIHZhbHVlIGFyZSBzZW50CiAgICBpbW1lZGlhdGVseSBhZnRlciBlYWNoIGluc3RhbmNlIG9mIHRoYXQgY29kZS4gIEVudmlyb25tZW50IHZhbHVlcyBhcmUgcGFzc2VkCiAgICBpbiB2aWEgdGhpcyBtZXRob2QuPC9wPgogICAgPHA+RmluYWxseSwgYWZ0ZXIgYWxsIHRoZSBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBzZW50LCB0aGUgYXR0cmlidXRlCiAgICB0ZXJtaW5hdG9yLCA8Y29kZT4weEZGPC9jb2RlPiwgaXMgc2VudC4gIFRoaXMgc2lnbmFscyBib3RoIHRoZSBlbmQgb2YgdGhlCiAgICBsaXN0IG9mIGF0dHJpYnV0ZXMgYW5kIGFsc28gdGhlbiBlbmQgb2YgdGhlIFJlcXVlc3QgUGFja2V0LjwvcD4KICAKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0icmVzcHBhY2tldHN0cnVjdCIgaWQ9InJlc3BwYWNrZXRzdHJ1Y3QiPlJlc3BvbnNlIFBhY2tldCBTdHJ1Y3R1cmU8L2E+PC9oMj4KICAgIDxwPmZvciBtZXNzYWdlcyB3aGljaCB0aGUgY29udGFpbmVyIGNhbiBzZW5kIGJhY2sgdG8gdGhlIHNlcnZlci48L3A+CiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cHJlPgpBSlAxM19TRU5EX0JPRFlfQ0hVTksgOj0KICBwcmVmaXhfY29kZSAgIDMKICBjaHVua19sZW5ndGggIChpbnRlZ2VyKQogIGNodW5rICAgICAgICAqKGJ5dGUpCiAgY2h1bmtfdGVybWluYXRvciAoYnl0ZSkgT3gwMAoKCkFKUDEzX1NFTkRfSEVBREVSUyA6PQogIHByZWZpeF9jb2RlICAgICAgIDQKICBodHRwX3N0YXR1c19jb2RlICAoaW50ZWdlcikKICBodHRwX3N0YXR1c19tc2cgICAoc3RyaW5nKQogIG51bV9oZWFkZXJzICAgICAgIChpbnRlZ2VyKQogIHJlc3BvbnNlX2hlYWRlcnMgKihyZXNfaGVhZGVyX25hbWUgaGVhZGVyX3ZhbHVlKQoKcmVzX2hlYWRlcl9uYW1lIDo9CiAgICBzY19yZXNfaGVhZGVyX25hbWUgfCAoc3RyaW5nKSAgIFtzZWUgYmVsb3cgZm9yIGhvdyB0aGlzIGlzIHBhcnNlZF0KCnNjX3Jlc19oZWFkZXJfbmFtZSA6PSAweEEwIChieXRlKQoKaGVhZGVyX3ZhbHVlIDo9IChzdHJpbmcpCgpBSlAxM19FTkRfUkVTUE9OU0UgOj0KICBwcmVmaXhfY29kZSAgICAgICA1CiAgcmV1c2UgICAgICAgICAgICAgKGJvb2xlYW4pCgoKQUpQMTNfR0VUX0JPRFlfQ0hVTksgOj0KICBwcmVmaXhfY29kZSAgICAgICA2CiAgcmVxdWVzdGVkX2xlbmd0aCAgKGludGVnZXIpCiAgICA8L3ByZT48L2Rpdj4KICA8aDM+RGV0YWlsczo8L2gzPgogIDxoMz5TZW5kIEJvZHkgQ2h1bms8L2gzPgogICAgPHA+VGhlIGNodW5rIGlzIGJhc2ljYWxseSBiaW5hcnkgZGF0YSwgYW5kIGlzIHNlbnQgZGlyZWN0bHkgYmFjayB0byB0aGUKICAgIGJyb3dzZXIuPC9wPgogIAogIDxoMz5TZW5kIEhlYWRlcnM8L2gzPgogICAgPHA+VGhlIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlIGFyZSB0aGUgdXN1YWwgSFRUUCB0aGluZ3MKICAgIChlLmcuIDxjb2RlPjIwMDwvY29kZT4gYW5kIDxjb2RlPk9LPC9jb2RlPikuIFRoZSByZXNwb25zZSBoZWFkZXIgbmFtZXMgYXJlCiAgICBlbmNvZGVkIHRoZSBzYW1lIHdheSB0aGUgcmVxdWVzdCBoZWFkZXIgbmFtZXMgYXJlLiBTZWUgaGVhZGVyX2VuY29kaW5nIGFib3ZlCiAgICBmb3IgZGV0YWlscyBhYm91dCBob3cgdGhlIGNvZGVzIGFyZSBkaXN0aW5ndWlzaGVkIGZyb20gdGhlIHN0cmluZ3MuPGJyIC8+CiAgICBUaGUgY29kZXMgZm9yIGNvbW1vbiBoZWFkZXJzIGFyZTo8L3A+CiAgICA8dGFibGU+CiAgICAgIDx0cj48dGQ+TmFtZTwvdGQ+PHRkPkNvZGUgdmFsdWU8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+Q29udGVudC1UeXBlPC90ZD48dGQ+MHhBMDAxPC90ZD48L3RyPgogICAgICA8dHI+PHRkPkNvbnRlbnQtTGFuZ3VhZ2U8L3RkPjx0ZD4weEEwMDI8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+Q29udGVudC1MZW5ndGg8L3RkPjx0ZD4weEEwMDM8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+RGF0ZTwvdGQ+PHRkPjB4QTAwNDwvdGQ+PC90cj4KICAgICAgPHRyPjx0ZD5MYXN0LU1vZGlmaWVkPC90ZD48dGQ+MHhBMDA1PC90ZD48L3RyPgogICAgICA8dHI+PHRkPkxvY2F0aW9uPC90ZD48dGQ+MHhBMDA2PC90ZD48L3RyPgogICAgICA8dHI+PHRkPlNldC1Db29raWU8L3RkPjx0ZD4weEEwMDc8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+U2V0LUNvb2tpZTI8L3RkPjx0ZD4weEEwMDg8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+U2VydmxldC1FbmdpbmU8L3RkPjx0ZD4weEEwMDk8L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+U3RhdHVzPC90ZD48dGQ+MHhBMDBBPC90ZD48L3RyPgogICAgICA8dHI+PHRkPldXVy1BdXRoZW50aWNhdGU8L3RkPjx0ZD4weEEwMEI8L3RkPjwvdHI+CiAgICA8L3RhYmxlPgogICAgPHA+IEFmdGVyIHRoZSBjb2RlIG9yIHRoZSBzdHJpbmcgaGVhZGVyIG5hbWUsIHRoZSBoZWFkZXIgdmFsdWUgaXMKICAgIGltbWVkaWF0ZWx5IGVuY29kZWQuPC9wPgogIAogIDxoMz5FbmQgUmVzcG9uc2U8L2gzPgogICAgPHA+U2lnbmFscyB0aGUgZW5kIG9mIHRoaXMgcmVxdWVzdC1oYW5kbGluZyBjeWNsZS4gIElmIHRoZQogICAgPGNvZGU+cmV1c2U8L2NvZGU+IGZsYWcgaXMgdHJ1ZSA8Y29kZT4oPT0xKTwvY29kZT4sIHRoaXMgVENQIGNvbm5lY3Rpb24gY2FuCiAgICBub3cgYmUgdXNlZCB0byBoYW5kbGUgbmV3IGluY29taW5nIHJlcXVlc3RzLiAgSWYgPGNvZGU+cmV1c2U8L2NvZGU+IGlzIGZhbHNlCiAgICAoYW55dGhpbmcgb3RoZXIgdGhhbiAxIGluIHRoZSBhY3R1YWwgQyBjb2RlKSwgdGhlIGNvbm5lY3Rpb24gc2hvdWxkCiAgICBiZSBjbG9zZWQuPC9wPgogIAogIDxoMz5HZXQgQm9keSBDaHVuazwvaDM+CiAgICA8cD5UaGUgY29udGFpbmVyIGFza3MgZm9yIG1vcmUgZGF0YSBmcm9tIHRoZSByZXF1ZXN0IChJZiB0aGUgYm9keSB3YXMKICAgIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIGZpcnN0IHBhY2tldCBzZW50IG92ZXIgb3Igd2hlbiB0aGUgcmVxdWVzdCBpcwogICAgY2h1bmNrZWQpLiBUaGUgc2VydmVyIHdpbGwgc2VuZCBhIGJvZHkgcGFja2V0IGJhY2sgd2l0aCBhbiBhbW91bnQgb2YgZGF0YQogICAgd2hpY2ggaXMgdGhlIG1pbmltdW0gb2YgdGhlIDxjb2RlPnJlcXVlc3RfbGVuZ3RoPC9jb2RlPiwgdGhlIG1heGltdW0gc2VuZAogICAgYm9keSBzaXplIDxjb2RlPig4MTg2ICg4IEtieXRlcyAtIDYpKTwvY29kZT4sIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzCiAgICBhY3R1YWxseSBsZWZ0IHRvIHNlbmQgZnJvbSB0aGUgcmVxdWVzdCBib2R5LjxiciAvPgogICAgSWYgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIGluIHRoZSBib2R5IChpLmUuIHRoZSBzZXJ2bGV0IGNvbnRhaW5lciBpcwogICAgdHJ5aW5nIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBib2R5KSwgdGhlIHNlcnZlciB3aWxsIHNlbmQgYmFjayBhbgogICAgPGVtPmVtcHR5PC9lbT4gcGFja2V0LCB3aGljaCBpcyBhIGJvZHkgcGFja2V0IHdpdGggYSBwYXlsb2FkIGxlbmd0aCBvZiAwLgogICAgPGNvZGU+KDB4MTIsMHgzNCwweDAwLDB4MDApPC9jb2RlPjwvcD4KICAKPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfcHJveHlfYWpwLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvbW9kX3Byb3h5X2FqcC5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Ii4uL2ZhcS8iPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2Pgo8L2JvZHk+PC9odG1sPg==