PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPm1vZF9wcm94eSAtIEFwYWNoZSBIVFRQIFNlcnZlcjwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+CjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSIuLi9mYXEvIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi4zPC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLmdpZiIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy1wcm9qZWN0LyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLi8iPlZlcnNpb24gMi4zPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5Nb2R1bGVzPC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPgo8ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPkFwYWNoZSBNb2R1bGUgbW9kX3Byb3h5PC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX3Byb3h5Lmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvbW9kX3Byb3h5Lmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+PC9wPgo8L2Rpdj4KPHRhYmxlIGNsYXNzPSJtb2R1bGUiPjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkhUVFAvMS4xIHByb3h5L2dhdGV3YXkgc2VydmVyPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI01vZHVsZUlkZW50aWZpZXIiPk1vZHVsZaBJZGVudGlmaWVyOjwvYT48L3RoPjx0ZD5wcm94eV9tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5Tb3VyY2WgRmlsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5LmM8L3RkPjwvdHI+PC90YWJsZT4KPGgzPlN1bW1hcnk8L2gzPgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPjxoMz5XYXJuaW5nPC9oMz4KICAgICAgPHA+RG8gbm90IGVuYWJsZSBwcm94eWluZyB3aXRoIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXJlcXVlc3RzIj5Qcm94eVJlcXVlc3RzPC9hPjwvY29kZT4gdW50aWwgeW91IGhhdmUgPGEgaHJlZj0iI2FjY2VzcyI+c2VjdXJlZCB5b3VyIHNlcnZlcjwvYT4uIE9wZW4gcHJveHkgc2VydmVycyBhcmUgZGFuZ2Vyb3VzIGJvdGggdG8geW91cgogICAgICBuZXR3b3JrIGFuZCB0byB0aGUgSW50ZXJuZXQgYXQgbGFyZ2UuPC9wPgogICAgPC9kaXY+CgogICAgPHA+VGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIHByb3h5L2dhdGV3YXkgZm9yIEFwYWNoZS4gSXQgaW1wbGVtZW50cwogICAgcHJveHlpbmcgY2FwYWJpbGl0eSBmb3IgPGNvZGU+QUpQMTM8L2NvZGU+IChBcGFjaGUgSlNlcnZlIFByb3RvY29sCiAgICB2ZXJzaW9uIDEuMyksIDxjb2RlPkZUUDwvY29kZT4sIDxjb2RlPkNPTk5FQ1Q8L2NvZGU+IChmb3IgU1NMKSwKICAgIDxjb2RlPkhUVFAvMC45PC9jb2RlPiwgPGNvZGU+SFRUUC8xLjA8L2NvZGU+LCBhbmQgPGNvZGU+SFRUUC8xLjE8L2NvZGU+LgogICAgVGhlIG1vZHVsZSBjYW4gYmUgY29uZmlndXJlZCB0byBjb25uZWN0IHRvIG90aGVyIHByb3h5IG1vZHVsZXMgZm9yIHRoZXNlCiAgICBhbmQgb3RoZXIgcHJvdG9jb2xzLjwvcD4KCiAgICA8cD5BcGFjaGUncyBwcm94eSBmZWF0dXJlcyBhcmUgZGl2aWRlZCBpbnRvIHNldmVyYWwgbW9kdWxlcyBpbgogICAgYWRkaXRpb24gdG8gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPjoKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfaHR0cC5odG1sIj5tb2RfcHJveHlfaHR0cDwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2Z0cC5odG1sIj5tb2RfcHJveHlfZnRwPC9hPjwvY29kZT4sCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2FqcC5odG1sIj5tb2RfcHJveHlfYWpwPC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfYmFsYW5jZXIuaHRtbCI+bW9kX3Byb3h5X2JhbGFuY2VyPC9hPjwvY29kZT4sCiAgICBhbmQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9jb25uZWN0Lmh0bWwiPm1vZF9wcm94eV9jb25uZWN0PC9hPjwvY29kZT4uICBUaHVzLCBpZiB5b3Ugd2FudCB0byB1c2UKICAgIG9uZSBvciBtb3JlIG9mIHRoZSBwYXJ0aWN1bGFyIHByb3h5IGZ1bmN0aW9ucywgbG9hZAogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPiA8ZW0+YW5kPC9lbT4gdGhlIGFwcHJvcHJpYXRlIG1vZHVsZShzKQogICAgaW50byB0aGUgc2VydmVyIChlaXRoZXIgc3RhdGljYWxseSBhdCBjb21waWxlLXRpbWUgb3IgZHluYW1pY2FsbHkKICAgIHZpYSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zby5odG1sI2xvYWRtb2R1bGUiPkxvYWRNb2R1bGU8L2E+PC9jb2RlPgogICAgZGlyZWN0aXZlKS48L3A+CgogICAgPHA+SW4gYWRkaXRpb24sIGV4dGVuZGVkIGZlYXR1cmVzIGFyZSBwcm92aWRlZCBieSBvdGhlciBtb2R1bGVzLgogICAgQ2FjaGluZyBpcyBwcm92aWRlZCBieSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IGFuZCByZWxhdGVkCiAgICBtb2R1bGVzLiAgVGhlIGFiaWxpdHkgdG8gY29udGFjdCByZW1vdGUgc2VydmVycyB1c2luZyB0aGUgU1NML1RMUwogICAgcHJvdG9jb2wgaXMgcHJvdmlkZWQgYnkgdGhlIDxjb2RlPlNTTFByb3h5KjwvY29kZT4gZGlyZWN0aXZlcyBvZgogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zc2wuaHRtbCI+bW9kX3NzbDwvYT48L2NvZGU+LiAgVGhlc2UgYWRkaXRpb25hbCBtb2R1bGVzIHdpbGwgbmVlZAogICAgdG8gYmUgbG9hZGVkIGFuZCBjb25maWd1cmVkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZXNlIGZlYXR1cmVzLjwvcD4KPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PGgzIGNsYXNzPSJkaXJlY3RpdmVzIj5EaXJlY3RpdmVzPC9oMz4KPHVsIGlkPSJ0b2MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNhbGxvd2Nvbm5lY3QiPkFsbG93Q09OTkVDVDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNub3Byb3h5Ij5Ob1Byb3h5PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5Ij4mbHQ7UHJveHkmZ3Q7PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5YmFkaGVhZGVyIj5Qcm94eUJhZEhlYWRlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eWJsb2NrIj5Qcm94eUJsb2NrPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5ZG9tYWluIj5Qcm94eURvbWFpbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eWVycm9yb3ZlcnJpZGUiPlByb3h5RXJyb3JPdmVycmlkZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eWlvYnVmZmVyc2l6ZSI+UHJveHlJT0J1ZmZlclNpemU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHltYXRjaCI+Jmx0O1Byb3h5TWF0Y2gmZ3Q7PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5bWF4Zm9yd2FyZHMiPlByb3h5TWF4Rm9yd2FyZHM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlwYXNzIj5Qcm94eVBhc3M8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlwYXNzcmV2ZXJzZSI+UHJveHlQYXNzUmV2ZXJzZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eXBhc3NyZXZlcnNlY29va2llZG9tYWluIj5Qcm94eVBhc3NSZXZlcnNlQ29va2llRG9tYWluPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5cGFzc3JldmVyc2Vjb29raWVwYXRoIj5Qcm94eVBhc3NSZXZlcnNlQ29va2llUGF0aDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eXByZXNlcnZlaG9zdCI+UHJveHlQcmVzZXJ2ZUhvc3Q8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlyZWNlaXZlYnVmZmVyc2l6ZSI+UHJveHlSZWNlaXZlQnVmZmVyU2l6ZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eXJlbW90ZSI+UHJveHlSZW1vdGU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlyZW1vdGVtYXRjaCI+UHJveHlSZW1vdGVNYXRjaDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eXJlcXVlc3RzIj5Qcm94eVJlcXVlc3RzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5dGltZW91dCI+UHJveHlUaW1lb3V0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5dmlhIj5Qcm94eVZpYTwvYT48L2xpPgo8L3VsPgo8aDM+VG9waWNzPC9oMz4KPHVsIGlkPSJ0b3BpY3MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNmb3J3YXJkcmV2ZXJzZSI+Rm9yd2FyZCBhbmQgUmV2ZXJzZSBQcm94aWVzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2V4YW1wbGVzIj5CYXNpYyBFeGFtcGxlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNhY2Nlc3MiPkNvbnRyb2xsaW5nIGFjY2VzcyB0byB5b3VyIHByb3h5PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3N0YXJ0dXAiPlNsb3cgU3RhcnR1cDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNpbnRyYW5ldCI+SW50cmFuZXQgUHJveHk8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZW52c2V0dGluZ3MiPlByb3RvY29sIEFkanVzdG1lbnRzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3JlcXVlc3QtYm9kaWVzIj5SZXF1ZXN0IEJvZHlzPC9hPjwvbGk+CjwvdWw+PGgzPlNlZSBhbHNvPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT48L2xpPgo8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9odHRwLmh0bWwiPm1vZF9wcm94eV9odHRwPC9hPjwvY29kZT48L2xpPgo8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9mdHAuaHRtbCI+bW9kX3Byb3h5X2Z0cDwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfY29ubmVjdC5odG1sIj5tb2RfcHJveHlfY29ubmVjdDwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfYmFsYW5jZXIuaHRtbCI+bW9kX3Byb3h5X2JhbGFuY2VyPC9hPjwvY29kZT48L2xpPgo8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zc2wuaHRtbCI+bW9kX3NzbDwvYT48L2NvZGU+PC9saT4KPC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZm9yd2FyZHJldmVyc2UiIGlkPSJmb3J3YXJkcmV2ZXJzZSI+Rm9yd2FyZCBhbmQgUmV2ZXJzZSBQcm94aWVzPC9hPjwvaDI+CiAgICAgIDxwPkFwYWNoZSBjYW4gYmUgY29uZmlndXJlZCBpbiBib3RoIGEgPGRmbj5mb3J3YXJkPC9kZm4+IGFuZAogICAgICA8ZGZuPnJldmVyc2U8L2Rmbj4gcHJveHkgbW9kZS48L3A+CgogICAgICA8cD5BbiBvcmRpbmFyeSA8ZGZuPmZvcndhcmQgcHJveHk8L2Rmbj4gaXMgYW4gaW50ZXJtZWRpYXRlCiAgICAgIHNlcnZlciB0aGF0IHNpdHMgYmV0d2VlbiB0aGUgY2xpZW50IGFuZCB0aGUgPGVtPm9yaWdpbgogICAgICBzZXJ2ZXI8L2VtPi4gIEluIG9yZGVyIHRvIGdldCBjb250ZW50IGZyb20gdGhlIG9yaWdpbiBzZXJ2ZXIsCiAgICAgIHRoZSBjbGllbnQgc2VuZHMgYSByZXF1ZXN0IHRvIHRoZSBwcm94eSBuYW1pbmcgdGhlIG9yaWdpbiBzZXJ2ZXIKICAgICAgYXMgdGhlIHRhcmdldCBhbmQgdGhlIHByb3h5IHRoZW4gcmVxdWVzdHMgdGhlIGNvbnRlbnQgZnJvbSB0aGUKICAgICAgb3JpZ2luIHNlcnZlciBhbmQgcmV0dXJucyBpdCB0byB0aGUgY2xpZW50LiAgVGhlIGNsaWVudCBtdXN0IGJlCiAgICAgIHNwZWNpYWxseSBjb25maWd1cmVkIHRvIHVzZSB0aGUgZm9yd2FyZCBwcm94eSB0byBhY2Nlc3Mgb3RoZXIKICAgICAgc2l0ZXMuPC9wPgoKICAgICAgPHA+QSB0eXBpY2FsIHVzYWdlIG9mIGEgZm9yd2FyZCBwcm94eSBpcyB0byBwcm92aWRlIEludGVybmV0CiAgICAgIGFjY2VzcyB0byBpbnRlcm5hbCBjbGllbnRzIHRoYXQgYXJlIG90aGVyd2lzZSByZXN0cmljdGVkIGJ5IGEKICAgICAgZmlyZXdhbGwuICBUaGUgZm9yd2FyZCBwcm94eSBjYW4gYWxzbyB1c2UgY2FjaGluZyAoYXMgcHJvdmlkZWQKICAgICAgYnkgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPikgdG8gcmVkdWNlIG5ldHdvcmsgdXNhZ2UuPC9wPgoKICAgICAgPHA+VGhlIGZvcndhcmQgcHJveHkgaXMgYWN0aXZhdGVkIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlyZXF1ZXN0cyI+UHJveHlSZXF1ZXN0czwvYT48L2NvZGU+IGRpcmVjdGl2ZS4gIEJlY2F1c2UKICAgICAgZm9yd2FyZCBwcm94eXMgYWxsb3cgY2xpZW50cyB0byBhY2Nlc3MgYXJiaXRyYXJ5IHNpdGVzIHRocm91Z2gKICAgICAgeW91ciBzZXJ2ZXIgYW5kIHRvIGhpZGUgdGhlaXIgdHJ1ZSBvcmlnaW4sIGl0IGlzIGVzc2VudGlhbCB0aGF0CiAgICAgIHlvdSA8YSBocmVmPSIjYWNjZXNzIj5zZWN1cmUgeW91ciBzZXJ2ZXI8L2E+IHNvIHRoYXQgb25seQogICAgICBhdXRob3JpemVkIGNsaWVudHMgY2FuIGFjY2VzcyB0aGUgcHJveHkgYmVmb3JlIGFjdGl2YXRpbmcgYQogICAgICBmb3J3YXJkIHByb3h5LjwvcD4KCiAgICAgIDxwPkEgPGRmbj5yZXZlcnNlIHByb3h5PC9kZm4+LCBieSBjb250cmFzdCwgYXBwZWFycyB0byB0aGUKICAgICAgY2xpZW50IGp1c3QgbGlrZSBhbiBvcmRpbmFyeSB3ZWIgc2VydmVyLiAgTm8gc3BlY2lhbAogICAgICBjb25maWd1cmF0aW9uIG9uIHRoZSBjbGllbnQgaXMgbmVjZXNzYXJ5LiAgVGhlIGNsaWVudCBtYWtlcwogICAgICBvcmRpbmFyeSByZXF1ZXN0cyBmb3IgY29udGVudCBpbiB0aGUgbmFtZS1zcGFjZSBvZiB0aGUgcmV2ZXJzZQogICAgICBwcm94eS4gIFRoZSByZXZlcnNlIHByb3h5IHRoZW4gZGVjaWRlcyB3aGVyZSB0byBzZW5kIHRob3NlCiAgICAgIHJlcXVlc3RzLCBhbmQgcmV0dXJucyB0aGUgY29udGVudCBhcyBpZiBpdCB3YXMgaXRzZWxmIHRoZQogICAgICBvcmlnaW4uPC9wPgoKICAgICAgPHA+QSB0eXBpY2FsIHVzYWdlIG9mIGEgcmV2ZXJzZSBwcm94eSBpcyB0byBwcm92aWRlIEludGVybmV0CiAgICAgIHVzZXJzIGFjY2VzcyB0byBhIHNlcnZlciB0aGF0IGlzIGJlaGluZCBhIGZpcmV3YWxsLiAgUmV2ZXJzZQogICAgICBwcm94aWVzIGNhbiBhbHNvIGJlIHVzZWQgdG8gYmFsYW5jZSBsb2FkIGFtb25nIHNldmVyYWwgYmFjay1lbmQKICAgICAgc2VydmVycywgb3IgdG8gcHJvdmlkZSBjYWNoaW5nIGZvciBhIHNsb3dlciBiYWNrLWVuZCBzZXJ2ZXIuCiAgICAgIEluIGFkZGl0aW9uLCByZXZlcnNlIHByb3hpZXMgY2FuIGJlIHVzZWQgc2ltcGx5IHRvIGJyaW5nCiAgICAgIHNldmVyYWwgc2VydmVycyBpbnRvIHRoZSBzYW1lIFVSTCBzcGFjZS48L3A+CgogICAgICA8cD5BIHJldmVyc2UgcHJveHkgaXMgYWN0aXZhdGVkIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlwYXNzIj5Qcm94eVBhc3M8L2E+PC9jb2RlPiBkaXJlY3RpdmUgb3IgdGhlCiAgICAgIDxjb2RlPltQXTwvY29kZT4gZmxhZyB0byB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZXJ1bGUiPlJld3JpdGVSdWxlPC9hPjwvY29kZT4gZGlyZWN0aXZlLiAgSXQgaXMKICAgICAgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gbmVjZXNzYXJ5IHRvIHR1cm4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cmVxdWVzdHMiPlByb3h5UmVxdWVzdHM8L2E+PC9jb2RlPiBvbiBpbiBvcmRlciB0bwogICAgICBjb25maWd1cmUgYSByZXZlcnNlIHByb3h5LjwvcD4KICAgIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImV4YW1wbGVzIiBpZD0iZXhhbXBsZXMiPkJhc2ljIEV4YW1wbGVzPC9hPjwvaDI+CgogICAgPHA+VGhlIGV4YW1wbGVzIGJlbG93IGFyZSBvbmx5IGEgdmVyeSBiYXNpYyBpZGVhIHRvIGhlbHAgeW91CiAgICBnZXQgc3RhcnRlZC4gIFBsZWFzZSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBpbmRpdmlkdWFsCiAgICBkaXJlY3RpdmVzLjwvcD4KCiAgICA8cD5JbiBhZGRpdGlvbiwgaWYgeW91IHdpc2ggdG8gaGF2ZSBjYWNoaW5nIGVuYWJsZWQsIGNvbnN1bHQKICAgIHRoZSBkb2N1bWVudGF0aW9uIGZyb20gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPi48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkZvcndhcmQgUHJveHk8L2gzPjxwPjxjb2RlPgogICAgUHJveHlSZXF1ZXN0cyBPbjxiciAvPgogICAgUHJveHlWaWEgT248YnIgLz4KICAgIDxiciAvPgogICAgJmx0O1Byb3h5IComZ3Q7PGJyIC8+CiAgICA8c3BhbiBjbGFzcz0iaW5kZW50Ij4KICAgICAgT3JkZXIgZGVueSxhbGxvdzxiciAvPgogICAgICBEZW55IGZyb20gYWxsPGJyIC8+CiAgICAgIEFsbG93IGZyb20gaW50ZXJuYWwuZXhhbXBsZS5jb208YnIgLz4KICAgIDwvc3Bhbj4KICAgICZsdDsvUHJveHkmZ3Q7CiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5SZXZlcnNlIFByb3h5PC9oMz48cD48Y29kZT4KICAgIFByb3h5UmVxdWVzdHMgT2ZmPGJyIC8+CiAgICA8YnIgLz4KICAgICZsdDtQcm94eSAqJmd0OzxiciAvPgogICAgPHNwYW4gY2xhc3M9ImluZGVudCI+CiAgICAgIE9yZGVyIGRlbnksYWxsb3c8YnIgLz4KICAgICAgQWxsb3cgZnJvbSBhbGw8YnIgLz4KICAgIDwvc3Bhbj4KICAgICZsdDsvUHJveHkmZ3Q7PGJyIC8+CiAgICA8YnIgLz4KICAgIFByb3h5UGFzcyAvZm9vIGh0dHA6Ly9mb28uZXhhbXBsZS5jb20vYmFyPGJyIC8+CiAgICBQcm94eVBhc3NSZXZlcnNlIC9mb28gaHR0cDovL2Zvby5leGFtcGxlLmNvbS9iYXIKICAgIDwvY29kZT48L3A+PC9kaXY+CiAgICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJhY2Nlc3MiIGlkPSJhY2Nlc3MiPkNvbnRyb2xsaW5nIGFjY2VzcyB0byB5b3VyIHByb3h5PC9hPjwvaDI+CiAgICAgIDxwPllvdSBjYW4gY29udHJvbCB3aG8gY2FuIGFjY2VzcyB5b3VyIHByb3h5IHZpYSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5Ij4mbHQ7UHJveHkmZ3Q7PC9hPjwvY29kZT4gY29udHJvbCBibG9jayBhcyBpbgogICAgICB0aGUgZm9sbG93aW5nIGV4YW1wbGU6PC9wPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgJmx0O1Byb3h5IComZ3Q7PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImluZGVudCI+CiAgICAgICAgICBPcmRlciBEZW55LEFsbG93PGJyIC8+CiAgICAgICAgICBEZW55IGZyb20gYWxsPGJyIC8+CiAgICAgICAgICBBbGxvdyBmcm9tIDE5Mi4xNjguMDxiciAvPgogICAgICAgIDwvc3Bhbj4KICAgICAgICAmbHQ7L1Byb3h5Jmd0OwogICAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgICAgPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYWNjZXNzIGNvbnRyb2wgZGlyZWN0aXZlcywgc2VlCiAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfaG9zdC5odG1sIj5tb2RfYXV0aHpfaG9zdDwvYT48L2NvZGU+LjwvcD4KCiAgICAgIDxwPlN0cmljdGx5IGxpbWl0aW5nIGFjY2VzcyBpcyBlc3NlbnRpYWwgaWYgeW91IGFyZSB1c2luZyBhCiAgICAgIGZvcndhcmQgcHJveHkgKHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlyZXF1ZXN0cyI+UHJveHlSZXF1ZXN0czwvYT48L2NvZGU+IGRpcmVjdGl2ZSkuCiAgICAgIE90aGVyd2lzZSwgeW91ciBzZXJ2ZXIgY2FuIGJlIHVzZWQgYnkgYW55IGNsaWVudCB0byBhY2Nlc3MKICAgICAgYXJiaXRyYXJ5IGhvc3RzIHdoaWxlIGhpZGluZyBoaXMgb3IgaGVyIHRydWUgaWRlbnRpdHkuICBUaGlzIGlzCiAgICAgIGRhbmdlcm91cyBib3RoIGZvciB5b3VyIG5ldHdvcmsgYW5kIGZvciB0aGUgSW50ZXJuZXQgYXQgbGFyZ2UuCiAgICAgIFdoZW4gdXNpbmcgYSByZXZlcnNlIHByb3h5ICh1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cGFzcyI+UHJveHlQYXNzPC9hPjwvY29kZT4gZGlyZWN0aXZlIHdpdGgKICAgICAgPGNvZGU+UHJveHlSZXF1ZXN0cyBPZmY8L2NvZGU+KSwgYWNjZXNzIGNvbnRyb2wgaXMgbGVzcwogICAgICBjcml0aWNhbCBiZWNhdXNlIGNsaWVudHMgY2FuIG9ubHkgY29udGFjdCB0aGUgaG9zdHMgdGhhdCB5b3UKICAgICAgaGF2ZSBzcGVjaWZpY2FsbHkgY29uZmlndXJlZC48L3A+CgogICAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ic3RhcnR1cCIgaWQ9InN0YXJ0dXAiPlNsb3cgU3RhcnR1cDwvYT48L2gyPgogICAgICA8cD5JZiB5b3UncmUgdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eWJsb2NrIj5Qcm94eUJsb2NrPC9hPjwvY29kZT4gZGlyZWN0aXZlLCBob3N0bmFtZXMnIElQIGFkZHJlc3NlcyBhcmUgbG9va2VkIHVwCiAgICAgIGFuZCBjYWNoZWQgZHVyaW5nIHN0YXJ0dXAgZm9yIGxhdGVyIG1hdGNoIHRlc3QuIFRoaXMgbWF5IHRha2UgYSBmZXcKICAgICAgc2Vjb25kcyAob3IgbW9yZSkgZGVwZW5kaW5nIG9uIHRoZSBzcGVlZCB3aXRoIHdoaWNoIHRoZSBob3N0bmFtZSBsb29rdXBzCiAgICAgIG9jY3VyLjwvcD4KICAgIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImludHJhbmV0IiBpZD0iaW50cmFuZXQiPkludHJhbmV0IFByb3h5PC9hPjwvaDI+CiAgICAgIDxwPkFuIEFwYWNoZSBwcm94eSBzZXJ2ZXIgc2l0dWF0ZWQgaW4gYW4gaW50cmFuZXQgbmVlZHMgdG8gZm9yd2FyZAogICAgICBleHRlcm5hbCByZXF1ZXN0cyB0aHJvdWdoIHRoZSBjb21wYW55J3MgZmlyZXdhbGwgKGZvciB0aGlzLCBjb25maWd1cmUKICAgICAgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXJlbW90ZSI+UHJveHlSZW1vdGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUKICAgICAgdG8gZm9yd2FyZCB0aGUgcmVzcGVjdGl2ZSA8dmFyPnNjaGVtZTwvdmFyPiB0byB0aGUgZmlyZXdhbGwgcHJveHkpLgogICAgICBIb3dldmVyLCB3aGVuIGl0IGhhcyB0bwogICAgICBhY2Nlc3MgcmVzb3VyY2VzIHdpdGhpbiB0aGUgaW50cmFuZXQsIGl0IGNhbiBieXBhc3MgdGhlIGZpcmV3YWxsIHdoZW4KICAgICAgYWNjZXNzaW5nIGhvc3RzLiBUaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI25vcHJveHkiPk5vUHJveHk8L2E+PC9jb2RlPgogICAgICBkaXJlY3RpdmUgaXMgdXNlZnVsIGZvciBzcGVjaWZ5aW5nIHdoaWNoIGhvc3RzIGJlbG9uZyB0byB0aGUgaW50cmFuZXQgYW5kCiAgICAgIHNob3VsZCBiZSBhY2Nlc3NlZCBkaXJlY3RseS48L3A+CgogICAgICA8cD5Vc2VycyB3aXRoaW4gYW4gaW50cmFuZXQgdGVuZCB0byBvbWl0IHRoZSBsb2NhbCBkb21haW4gbmFtZSBmcm9tIHRoZWlyCiAgICAgIFdXVyByZXF1ZXN0cywgdGh1cyByZXF1ZXN0aW5nICJodHRwOi8vc29tZWhvc3QvIiBpbnN0ZWFkIG9mCiAgICAgIDxjb2RlPmh0dHA6Ly9zb21laG9zdC5leGFtcGxlLmNvbS88L2NvZGU+LiBTb21lIGNvbW1lcmNpYWwgcHJveHkgc2VydmVycwogICAgICBsZXQgdGhlbSBnZXQgYXdheSB3aXRoIHRoaXMgYW5kIHNpbXBseSBzZXJ2ZSB0aGUgcmVxdWVzdCwgaW1wbHlpbmcgYQogICAgICBjb25maWd1cmVkIGxvY2FsIGRvbWFpbi4gV2hlbiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5ZG9tYWluIj5Qcm94eURvbWFpbjwvYT48L2NvZGU+IGRpcmVjdGl2ZSBpcyB1c2VkIGFuZCB0aGUgc2VydmVyIGlzIDxhIGhyZWY9IiNwcm94eXJlcXVlc3RzIj5jb25maWd1cmVkIGZvciBwcm94eSBzZXJ2aWNlPC9hPiwgQXBhY2hlIGNhbiByZXR1cm4KICAgICAgYSByZWRpcmVjdCByZXNwb25zZSBhbmQgc2VuZCB0aGUgY2xpZW50IHRvIHRoZSBjb3JyZWN0LCBmdWxseSBxdWFsaWZpZWQsCiAgICAgIHNlcnZlciBhZGRyZXNzLiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kIHNpbmNlIHRoZSB1c2VyJ3MgYm9va21hcmsKICAgICAgZmlsZXMgd2lsbCB0aGVuIGNvbnRhaW4gZnVsbHkgcXVhbGlmaWVkIGhvc3RzLjwvcD4KICAgIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImVudnNldHRpbmdzIiBpZD0iZW52c2V0dGluZ3MiPlByb3RvY29sIEFkanVzdG1lbnRzPC9hPjwvaDI+CiAgICAgIDxwPkZvciBjaXJjdW1zdGFuY2VzIHdoZXJlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT4gaXMgc2VuZGluZwogICAgICByZXF1ZXN0cyB0byBhbiBvcmlnaW4gc2VydmVyIHRoYXQgZG9lc24ndCBwcm9wZXJseSBpbXBsZW1lbnQKICAgICAga2VlcGFsaXZlcyBvciBIVFRQLzEuMSwgdGhlcmUgYXJlIHR3byA8YSBocmVmPSIuLi9lbnYuaHRtbCI+ZW52aXJvbm1lbnQgdmFyaWFibGVzPC9hPiB0aGF0IGNhbiBmb3JjZSB0aGUKICAgICAgcmVxdWVzdCB0byB1c2UgSFRUUC8xLjAgd2l0aCBubyBrZWVwYWxpdmUuIFRoZXNlIGFyZSBzZXQgdmlhIHRoZQogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2Vudi5odG1sI3NldGVudiI+U2V0RW52PC9hPjwvY29kZT4gZGlyZWN0aXZlLjwvcD4KCiAgICAgIDxwPlRoZXNlIGFyZSB0aGUgPGNvZGU+Zm9yY2UtcHJveHktcmVxdWVzdC0xLjA8L2NvZGU+IGFuZAogICAgICA8Y29kZT5wcm94eS1ub2tlZXBhbGl2ZTwvY29kZT4gbm90ZXMuPC9wPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgJmx0O0xvY2F0aW9uIC9idWdneWFwcHNlcnZlci8mZ3Q7PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImluZGVudCI+CiAgICAgICAgICBQcm94eVBhc3MgaHR0cDovL2J1Z2d5YXBwc2VydmVyOjcwMDEvZm9vLzxiciAvPgogICAgICAgICAgU2V0RW52IGZvcmNlLXByb3h5LXJlcXVlc3QtMS4wIDE8YnIgLz4KICAgICAgICAgIFNldEVudiBwcm94eS1ub2tlZXBhbGl2ZSAxPGJyIC8+CiAgICAgICAgPC9zcGFuPgogICAgICAgICZsdDsvTG9jYXRpb24mZ3Q7CiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0icmVxdWVzdC1ib2RpZXMiIGlkPSJyZXF1ZXN0LWJvZGllcyI+UmVxdWVzdCBCb2R5czwvYT48L2gyPgoKICAgIDxwPlNvbWUgcmVxdWVzdCBtZXRob2RzIHN1Y2ggYXMgUE9TVCBpbmNsdWRlIGEgcmVxdWVzdCBib2R5LgogICAgVGhlIEhUVFAgcHJvdG9jb2wgcmVxdWlyZXMgdGhhdCByZXF1ZXN0cyB3aGljaCBpbmNsdWRlIGEgYm9keQogICAgZWl0aGVyIHVzZSBjaHVua2VkIHRyYW5zZmVyIGVuY29kaW5nIG9yIHNlbmQgYQogICAgPGNvZGU+Q29udGVudC1MZW5ndGg8L2NvZGU+IHJlcXVlc3QgaGVhZGVyLiAgV2hlbiBwYXNzaW5nIHRoZXNlCiAgICByZXF1ZXN0cyBvbiB0byB0aGUgb3JpZ2luIHNlcnZlciwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9odHRwLmh0bWwiPm1vZF9wcm94eV9odHRwPC9hPjwvY29kZT4KICAgIHdpbGwgYWx3YXlzIGF0dGVtcHQgdG8gc2VuZCB0aGUgPGNvZGU+Q29udGVudC1MZW5ndGg8L2NvZGU+LiAgQnV0CiAgICBpZiB0aGUgYm9keSBpcyBsYXJnZSBhbmQgdGhlIG9yaWdpbmFsIHJlcXVlc3QgdXNlZCBjaHVua2VkCiAgICBlbmNvZGluZywgdGhlbiBjaHVua2VkIGVuY29kaW5nIG1heSBhbHNvIGJlIHVzZWQgaW4gdGhlIHVwc3RyZWFtCiAgICByZXF1ZXN0LiAgWW91IGNhbiBjb250cm9sIHRoaXMgc2VsZWN0aW9uIHVzaW5nIDxhIGhyZWY9Ii4uL2Vudi5odG1sIj5lbnZpcm9ubWVudCB2YXJpYWJsZXM8L2E+LiAgU2V0dGluZwogICAgPGNvZGU+cHJveHktc2VuZGNsPC9jb2RlPiBlbnN1cmVzIG1heGltdW0gY29tcGF0aWJpbGl0eSB3aXRoCiAgICB1cHN0cmVhbSBzZXJ2ZXJzIGJ5IGFsd2F5cyBzZW5kaW5nIHRoZQogICAgPGNvZGU+Q29udGVudC1MZW5ndGg8L2NvZGU+LCB3aGlsZSBzZXR0aW5nCiAgICA8Y29kZT5wcm94eS1zZW5kY2h1bmtlZDwvY29kZT4gbWluaW1pemVzIHJlc291cmNlIHVzYWdlIGJ5IHVzaW5nCiAgICBjaHVua2VkIGVuY29kaW5nLjwvcD4KCiAgICA8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQWxsb3dDT05ORUNUIiBpZD0iQWxsb3dDT05ORUNUIj5BbGxvd0NPTk5FQ1Q8L2E+IDxhIG5hbWU9ImFsbG93Y29ubmVjdCIgaWQ9ImFsbG93Y29ubmVjdCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+UG9ydHMgdGhhdCBhcmUgYWxsb3dlZCB0byA8Y29kZT5DT05ORUNUPC9jb2RlPiB0aHJvdWdoIHRoZQpwcm94eTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5BbGxvd0NPTk5FQ1QgPHZhcj5wb3J0PC92YXI+IFs8dmFyPnBvcnQ8L3Zhcj5dIC4uLjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5BbGxvd0NPTk5FQ1QgNDQzIDU2MzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5BbGxvd0NPTk5FQ1Q8L2NvZGU+IGRpcmVjdGl2ZSBzcGVjaWZpZXMgYSBsaXN0CiAgICBvZiBwb3J0IG51bWJlcnMgdG8gd2hpY2ggdGhlIHByb3h5IDxjb2RlPkNPTk5FQ1Q8L2NvZGU+IG1ldGhvZCBtYXkKICAgIGNvbm5lY3QuICBUb2RheSdzIGJyb3dzZXJzIHVzZSB0aGlzIG1ldGhvZCB3aGVuIGEgPGNvZGU+aHR0cHM8L2NvZGU+CiAgICBjb25uZWN0aW9uIGlzIHJlcXVlc3RlZCBhbmQgcHJveHkgdHVubmVsaW5nIG92ZXIgSFRUUCBpcyBpbiBlZmZlY3QuPC9wPgoKICAgIDxwPkJ5IGRlZmF1bHQsIG9ubHkgdGhlIGRlZmF1bHQgaHR0cHMgcG9ydCAoPGNvZGU+NDQzPC9jb2RlPikgYW5kIHRoZQogICAgZGVmYXVsdCBzbmV3cyBwb3J0ICg8Y29kZT41NjM8L2NvZGU+KSBhcmUgZW5hYmxlZC4gVXNlIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+QWxsb3dDT05ORUNUPC9jb2RlPiBkaXJlY3RpdmUgdG8gb3ZlcnJpZGUgdGhpcyBkZWZhdWx0IGFuZAogICAgYWxsb3cgY29ubmVjdGlvbnMgdG8gdGhlIGxpc3RlZCBwb3J0cyBvbmx5LjwvcD4KCiAgICA8cD5Ob3RlIHRoYXQgeW91J2xsIG5lZWQgdG8gaGF2ZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2Nvbm5lY3QuaHRtbCI+bW9kX3Byb3h5X2Nvbm5lY3Q8L2E+PC9jb2RlPiBwcmVzZW50CiAgICBpbiB0aGUgc2VydmVyIGluIG9yZGVyIHRvIGdldCB0aGUgc3VwcG9ydCBmb3IgdGhlIDxjb2RlPkNPTk5FQ1Q8L2NvZGU+IGF0CiAgICBhbGwuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ik5vUHJveHkiIGlkPSJOb1Byb3h5Ij5Ob1Byb3h5PC9hPiA8YSBuYW1lPSJub3Byb3h5IiBpZD0ibm9wcm94eSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+SG9zdHMsIGRvbWFpbnMsIG9yIG5ldHdvcmtzIHRoYXQgd2lsbCBiZSBjb25uZWN0ZWQgdG8KZGlyZWN0bHk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Tm9Qcm94eSA8dmFyPmhvc3Q8L3Zhcj4gWzx2YXI+aG9zdDwvdmFyPl0gLi4uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgb25seSB1c2VmdWwgZm9yIEFwYWNoZSBwcm94eSBzZXJ2ZXJzIHdpdGhpbgogICAgaW50cmFuZXRzLiAgVGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPk5vUHJveHk8L2NvZGU+IGRpcmVjdGl2ZSBzcGVjaWZpZXMgYQogICAgbGlzdCBvZiBzdWJuZXRzLCBJUCBhZGRyZXNzZXMsIGhvc3RzIGFuZC9vciBkb21haW5zLCBzZXBhcmF0ZWQgYnkKICAgIHNwYWNlcy4gQSByZXF1ZXN0IHRvIGEgaG9zdCB3aGljaCBtYXRjaGVzIG9uZSBvciBtb3JlIG9mIHRoZXNlIGlzCiAgICBhbHdheXMgc2VydmVkIGRpcmVjdGx5LCB3aXRob3V0IGZvcndhcmRpbmcgdG8gdGhlIGNvbmZpZ3VyZWQKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXJlbW90ZSI+UHJveHlSZW1vdGU8L2E+PC9jb2RlPiBwcm94eSBzZXJ2ZXIocykuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cD48Y29kZT4KICAgICAgUHJveHlSZW1vdGUgICogIGh0dHA6Ly9maXJld2FsbC5teWNvbXBhbnkuY29tOjgxPGJyIC8+CiAgICAgIE5vUHJveHkgICAgICAgICAubXljb21wYW55LmNvbSAxOTIuMTY4LjExMi4wLzIxCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPlRoZSA8dmFyPmhvc3Q8L3Zhcj4gYXJndW1lbnRzIHRvIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Ob1Byb3h5PC9jb2RlPgogICAgZGlyZWN0aXZlIGFyZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlIGxpc3Q6PC9wPgoKICAgIDxkbD4KICAgIAogICAgPGR0Pjx2YXI+PGEgbmFtZT0iZG9tYWluIiBpZD0iZG9tYWluIj5Eb21haW48L2E+PC92YXI+PC9kdD4KICAgIDxkZD4KICAgIDxwPkEgPGRmbj5Eb21haW48L2Rmbj4gaXMgYSBwYXJ0aWFsbHkgcXVhbGlmaWVkIEROUyBkb21haW4gbmFtZSwgcHJlY2VkZWQKICAgIGJ5IGEgcGVyaW9kLiBJdCByZXByZXNlbnRzIGEgbGlzdCBvZiBob3N0cyB3aGljaCBsb2dpY2FsbHkgYmVsb25nIHRvIHRoZQogICAgc2FtZSBETlMgZG9tYWluIG9yIHpvbmUgKDxlbT5pLmUuPC9lbT4sIHRoZSBzdWZmaXhlcyBvZiB0aGUgaG9zdG5hbWVzIGFyZQogICAgYWxsIGVuZGluZyBpbiA8dmFyPkRvbWFpbjwvdmFyPikuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlczwvaDM+PHA+PGNvZGU+CiAgICAgIC5jb20gLmFwYWNoZS5vcmcuCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPlRvIGRpc3Rpbmd1aXNoIDx2YXI+RG9tYWluPC92YXI+cyBmcm9tIDx2YXI+PGEgaHJlZj0iI2hvc3RuYW1lIj5Ib3N0bmFtZTwvYT48L3Zhcj5zIChib3RoIHN5bnRhY3RpY2FsbHkgYW5kIHNlbWFudGljYWxseTsgYSBETlMgZG9tYWluIGNhbgogICAgaGF2ZSBhIEROUyBBIHJlY29yZCwgdG9vISksIDx2YXI+RG9tYWluPC92YXI+cyBhcmUgYWx3YXlzIHdyaXR0ZW4gd2l0aCBhCiAgICBsZWFkaW5nIHBlcmlvZC48L3A+CiAgICAKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgICAgPHA+RG9tYWluIG5hbWUgY29tcGFyaXNvbnMgYXJlIGRvbmUgd2l0aG91dCByZWdhcmQgdG8gdGhlIGNhc2UsIGFuZAogICAgICA8dmFyPkRvbWFpbjwvdmFyPnMgYXJlIGFsd2F5cyBhc3N1bWVkIHRvIGJlIGFuY2hvcmVkIGluIHRoZSByb290IG9mIHRoZQogICAgICBETlMgdHJlZSwgdGhlcmVmb3JlIHR3byBkb21haW5zIDxjb2RlPi5NeURvbWFpbi5jb208L2NvZGU+IGFuZAogICAgICA8Y29kZT4ubXlkb21haW4uY29tLjwvY29kZT4gKG5vdGUgdGhlIHRyYWlsaW5nIHBlcmlvZCkgYXJlIGNvbnNpZGVyZWQKICAgICAgZXF1YWwuIFNpbmNlIGEgZG9tYWluIGNvbXBhcmlzb24gZG9lcyBub3QgaW52b2x2ZSBhIEROUyBsb29rdXAsIGl0IGlzIG11Y2gKICAgICAgbW9yZSBlZmZpY2llbnQgdGhhbiBzdWJuZXQgY29tcGFyaXNvbi48L3A+CiAgICA8L2Rpdj48L2RkPgoKICAgIAogICAgPGR0Pjx2YXI+PGEgbmFtZT0ic3VibmV0IiBpZD0ic3VibmV0Ij5TdWJOZXQ8L2E+PC92YXI+PC9kdD4KICAgIDxkZD4KICAgIDxwPkEgPGRmbj5TdWJOZXQ8L2Rmbj4gaXMgYSBwYXJ0aWFsbHkgcXVhbGlmaWVkIGludGVybmV0IGFkZHJlc3MgaW4KICAgIG51bWVyaWMgKGRvdHRlZCBxdWFkKSBmb3JtLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgc2xhc2ggYW5kIHRoZSBuZXRtYXNrLAogICAgc3BlY2lmaWVkIGFzIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYml0cyBpbiB0aGUgPHZhcj5TdWJOZXQ8L3Zhcj4uIEl0IGlzCiAgICB1c2VkIHRvIHJlcHJlc2VudCBhIHN1Ym5ldCBvZiBob3N0cyB3aGljaCBjYW4gYmUgcmVhY2hlZCBvdmVyIGEgY29tbW9uCiAgICBuZXR3b3JrIGludGVyZmFjZS4gSW4gdGhlIGFic2VuY2Ugb2YgdGhlIGV4cGxpY2l0IG5ldCBtYXNrIGl0IGlzIGFzc3VtZWQKICAgIHRoYXQgb21pdHRlZCAob3IgemVybyB2YWx1ZWQpIHRyYWlsaW5nIGRpZ2l0cyBzcGVjaWZ5IHRoZSBtYXNrLiAoSW4gdGhpcwogICAgY2FzZSwgdGhlIG5ldG1hc2sgY2FuIG9ubHkgYmUgbXVsdGlwbGVzIG9mIDggYml0cyB3aWRlLikgRXhhbXBsZXM6PC9wPgoKICAgIDxkbD4KICAgIDxkdD48Y29kZT4xOTIuMTY4PC9jb2RlPiBvciA8Y29kZT4xOTIuMTY4LjAuMDwvY29kZT48L2R0PgogICAgPGRkPnRoZSBzdWJuZXQgMTkyLjE2OC4wLjAgd2l0aCBhbiBpbXBsaWVkIG5ldG1hc2sgb2YgMTYgdmFsaWQgYml0cwogICAgKHNvbWV0aW1lcyB1c2VkIGluIHRoZSBuZXRtYXNrIGZvcm0gPGNvZGU+MjU1LjI1NS4wLjA8L2NvZGU+KTwvZGQ+CiAgICA8ZHQ+PGNvZGU+MTkyLjE2OC4xMTIuMC8yMTwvY29kZT48L2R0PgogICAgPGRkPnRoZSBzdWJuZXQgPGNvZGU+MTkyLjE2OC4xMTIuMC8yMTwvY29kZT4gd2l0aCBhIG5ldG1hc2sgb2YgMjEKICAgIHZhbGlkIGJpdHMgKGFsc28gdXNlZCBpbiB0aGUgZm9ybSA8Y29kZT4yNTUuMjU1LjI0OC4wPC9jb2RlPik8L2RkPgogICAgPC9kbD4KCiAgICA8cD5BcyBhIGRlZ2VuZXJhdGUgY2FzZSwgYSA8ZW0+U3ViTmV0PC9lbT4gd2l0aCAzMiB2YWxpZCBiaXRzIGlzIHRoZQogICAgZXF1aXZhbGVudCB0byBhbiA8dmFyPjxhIGhyZWY9IiNpcGFkciI+SVBBZGRyPC9hPjwvdmFyPiwgd2hpbGUgYSA8dmFyPlN1Yk5ldDwvdmFyPiB3aXRoIHplcm8KICAgIHZhbGlkIGJpdHMgKDxlbT5lLmcuPC9lbT4sIDAuMC4wLjAvMCkgaXMgdGhlIHNhbWUgYXMgdGhlIGNvbnN0YW50CiAgICA8dmFyPl9EZWZhdWx0XzwvdmFyPiwgbWF0Y2hpbmcgYW55IElQIGFkZHJlc3MuPC9wPjwvZGQ+CgogICAgCiAgICA8ZHQ+PHZhcj48YSBuYW1lPSJpcGFkZHIiIGlkPSJpcGFkZHIiPklQQWRkcjwvYT48L3Zhcj48L2R0PgogICAgPGRkPgogICAgPHA+QSA8ZGZuPklQQWRkcjwvZGZuPiByZXByZXNlbnRzIGEgZnVsbHkgcXVhbGlmaWVkIGludGVybmV0IGFkZHJlc3MgaW4KICAgIG51bWVyaWMgKGRvdHRlZCBxdWFkKSBmb3JtLiBVc3VhbGx5LCB0aGlzIGFkZHJlc3MgcmVwcmVzZW50cyBhIGhvc3QsIGJ1dAogICAgdGhlcmUgbmVlZCBub3QgbmVjZXNzYXJpbHkgYmUgYSBETlMgZG9tYWluIG5hbWUgY29ubmVjdGVkIHdpdGggdGhlCiAgICBhZGRyZXNzLjwvcD4KICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cD48Y29kZT4KICAgICAgMTkyLjE2OC4xMjMuNwogICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPk5vdGU8L2gzPgogICAgICA8cD5BbiA8dmFyPklQQWRkcjwvdmFyPiBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlc29sdmVkIGJ5IHRoZSBETlMgc3lzdGVtLCBzbwogICAgICBpdCBjYW4gcmVzdWx0IGluIG1vcmUgZWZmZWN0aXZlIGFwYWNoZSBwZXJmb3JtYW5jZS48L3A+CiAgICA8L2Rpdj48L2RkPgoKICAgIAogICAgPGR0Pjx2YXI+PGEgbmFtZT0iaG9zdG5hbWUiIGlkPSJob3N0bmFtZSI+SG9zdG5hbWU8L2E+PC92YXI+PC9kdD4KICAgIDxkZD4KICAgIDxwPkEgPGRmbj5Ib3N0bmFtZTwvZGZuPiBpcyBhIGZ1bGx5IHF1YWxpZmllZCBETlMgZG9tYWluIG5hbWUgd2hpY2ggY2FuCiAgICBiZSByZXNvbHZlZCB0byBvbmUgb3IgbW9yZSA8dmFyPjxhIGhyZWY9IiNpcGFkZHIiPklQQWRkcnM8L2E+PC92YXI+IHZpYSB0aGUKICAgIEROUyBkb21haW4gbmFtZSBzZXJ2aWNlLiBJdCByZXByZXNlbnRzIGEgbG9naWNhbCBob3N0IChpbiBjb250cmFzdCB0bwoJPHZhcj48YSBocmVmPSIjZG9tYWluIj5Eb21haW48L2E+PC92YXI+cywgc2VlIGFib3ZlKSBhbmQgbXVzdCBiZSByZXNvbHZhYmxlCiAgICB0byBhdCBsZWFzdCBvbmUgPHZhcj48YSBocmVmPSIjaXBhZGRyIj5JUEFkZHI8L2E+PC92YXI+IChvciBvZnRlbiB0byBhIGxpc3QKICAgIG9mIGhvc3RzIHdpdGggZGlmZmVyZW50IDx2YXI+PGEgaHJlZj0iI2lwYWRkciI+SVBBZGRyPC9hPjwvdmFyPnMpLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZXM8L2gzPjxwPjxjb2RlPgogICAgICBwcmVwLmFpLm1pdC5lZHU8YnIgLz4KICAgICAgd3d3LmFwYWNoZS5vcmcKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPk5vdGU8L2gzPgogICAgICA8cD5JbiBtYW55IHNpdHVhdGlvbnMsIGl0IGlzIG1vcmUgZWZmZWN0aXZlIHRvIHNwZWNpZnkgYW4gPHZhcj48YSBocmVmPSIjaXBhZGRyIj5JUEFkZHI8L2E+PC92YXI+IGluIHBsYWNlIG9mIGEgPHZhcj5Ib3N0bmFtZTwvdmFyPiBzaW5jZSBhCiAgICAgIEROUyBsb29rdXAgY2FuIGJlIGF2b2lkZWQuIE5hbWUgcmVzb2x1dGlvbiBpbiBBcGFjaGUgY2FuIHRha2UgYSByZW1hcmthYmxlCiAgICAgIGRlYWwgb2YgdGltZSB3aGVuIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBuYW1lIHNlcnZlciB1c2VzIGEgc2xvdyBQUFAKICAgICAgbGluay48L3A+CiAgICAgIDxwPjx2YXI+SG9zdG5hbWU8L3Zhcj4gY29tcGFyaXNvbnMgYXJlIGRvbmUgd2l0aG91dCByZWdhcmQgdG8gdGhlIGNhc2UsCiAgICAgIGFuZCA8dmFyPkhvc3RuYW1lPC92YXI+cyBhcmUgYWx3YXlzIGFzc3VtZWQgdG8gYmUgYW5jaG9yZWQgaW4gdGhlIHJvb3QKICAgICAgb2YgdGhlIEROUyB0cmVlLCB0aGVyZWZvcmUgdHdvIGhvc3RzIDxjb2RlPldXVy5NeURvbWFpbi5jb208L2NvZGU+CiAgICAgIGFuZCA8Y29kZT53d3cubXlkb21haW4uY29tLjwvY29kZT4gKG5vdGUgdGhlIHRyYWlsaW5nIHBlcmlvZCkgYXJlCiAgICAgIGNvbnNpZGVyZWQgZXF1YWwuPC9wPgogICAgIDwvZGl2PjwvZGQ+CiAgICA8L2RsPgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGEgaHJlZj0iLi4vZG5zLWNhdmVhdHMuaHRtbCI+RE5TIElzc3VlczwvYT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHkiIGlkPSJQcm94eSI+Jmx0O1Byb3h5Jmd0OzwvYT4gPGEgbmFtZT0icHJveHkiIGlkPSJwcm94eSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q29udGFpbmVyIGZvciBkaXJlY3RpdmVzIGFwcGxpZWQgdG8gcHJveGllZCByZXNvdXJjZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Jmx0O1Byb3h5IDx2YXI+d2lsZGNhcmQtdXJsPC92YXI+Jmd0OyAuLi4mbHQ7L1Byb3h5Jmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPkRpcmVjdGl2ZXMgcGxhY2VkIGluIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtQcm94eSZndDs8L2NvZGU+CiAgICBzZWN0aW9ucyBhcHBseSBvbmx5IHRvIG1hdGNoaW5nIHByb3hpZWQgY29udGVudC4gIFNoZWxsLXN0eWxlIHdpbGRjYXJkcyBhcmUKICAgIGFsbG93ZWQuPC9wPgoKICAgIDxwPkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHdpbGwgYWxsb3cgb25seSBob3N0cyBpbgogICAgPGNvZGU+eW91cm5ldHdvcmsuZXhhbXBsZS5jb208L2NvZGU+IHRvIGFjY2VzcyBjb250ZW50IHZpYSB5b3VyIHByb3h5CiAgICBzZXJ2ZXI6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAmbHQ7UHJveHkgKiZndDs8YnIgLz4KICAgICAgPHNwYW4gY2xhc3M9ImluZGVudCI+CiAgICAgICAgT3JkZXIgRGVueSxBbGxvdzxiciAvPgogICAgICAgIERlbnkgZnJvbSBhbGw8YnIgLz4KICAgICAgICBBbGxvdyBmcm9tIHlvdXJuZXR3b3JrLmV4YW1wbGUuY29tPGJyIC8+CiAgICAgIDwvc3Bhbj4KICAgICAgJmx0Oy9Qcm94eSZndDsKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIHdpbGwgcHJvY2VzcyBhbGwgZmlsZXMgaW4gdGhlIDxjb2RlPmZvbzwvY29kZT4KICAgIGRpcmVjdG9yeSBvZiA8Y29kZT5leGFtcGxlLmNvbTwvY29kZT4gdGhyb3VnaCB0aGUgPGNvZGU+SU5DTFVERVM8L2NvZGU+CiAgICBmaWx0ZXIgd2hlbiB0aGV5IGFyZSBzZW50IHRocm91Z2ggdGhlIHByb3h5IHNlcnZlcjo8L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICZsdDtQcm94eSBodHRwOi8vZXhhbXBsZS5jb20vZm9vLyomZ3Q7PGJyIC8+CiAgICAgIDxzcGFuIGNsYXNzPSJpbmRlbnQiPgogICAgICAgIFNldE91dHB1dEZpbHRlciBJTkNMVURFUzxiciAvPgogICAgICA8L3NwYW4+CiAgICAgICZsdDsvUHJveHkmZ3Q7CiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eUJhZEhlYWRlciIgaWQ9IlByb3h5QmFkSGVhZGVyIj5Qcm94eUJhZEhlYWRlcjwvYT4gPGEgbmFtZT0icHJveHliYWRoZWFkZXIiIGlkPSJwcm94eWJhZGhlYWRlciI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RGV0ZXJtaW5lcyBob3cgdG8gaGFuZGxlIGJhZCBoZWFkZXIgbGluZXMgaW4gYQpyZXNwb25zZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eUJhZEhlYWRlciBJc0Vycm9yfElnbm9yZXxTdGFydEJvZHk8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlCYWRIZWFkZXIgSXNFcnJvcjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPmF2YWlsYWJsZSBpbiBBcGFjaGUgMi4wLjQ0IGFuZCBsYXRlcjwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm94eUJhZEhlYWRlcjwvY29kZT4gZGlyZWN0aXZlIGRldGVybWluZXMgdGhlCiAgICBiZWhhdmlvdXIgb2YgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPiBpZiBpdCByZWNlaXZlcyBzeW50YWN0aWNhbGx5IGludmFsaWQKICAgIGhlYWRlciBsaW5lcyAoPGVtPmkuZS48L2VtPiBjb250YWluaW5nIG5vIGNvbG9uKS4gVGhlIGZvbGxvd2luZyBhcmd1bWVudHMKICAgIGFyZSBwb3NzaWJsZTo8L3A+CgogICAgPGRsPgogICAgPGR0Pjxjb2RlPklzRXJyb3I8L2NvZGU+PC9kdD4KICAgIDxkZD5BYm9ydCB0aGUgcmVxdWVzdCBhbmQgZW5kIHVwIHdpdGggYSA1MDIgKEJhZCBHYXRld2F5KSByZXNwb25zZS4gVGhpcyBpcwogICAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLjwvZGQ+CgogICAgPGR0Pjxjb2RlPklnbm9yZTwvY29kZT48L2R0PgogICAgPGRkPlRyZWF0IGJhZCBoZWFkZXIgbGluZXMgYXMgaWYgdGhleSB3ZXJlbid0IHNlbnQuPC9kZD4KCiAgICA8ZHQ+PGNvZGU+U3RhcnRCb2R5PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+V2hlbiByZWNlaXZpbmcgdGhlIGZpcnN0IGJhZCBoZWFkZXIgbGluZSwgZmluaXNoIHJlYWRpbmcgdGhlIGhlYWRlcnMgYW5kCiAgICB0cmVhdCB0aGUgcmVtYWluZGVyIGFzIGJvZHkuIFRoaXMgaGVscHMgdG8gd29yayBhcm91bmQgYnVnZ3kgYmFja2VuZCBzZXJ2ZXJzCiAgICB3aGljaCBmb3JnZXQgdG8gaW5zZXJ0IGFuIGVtcHR5IGxpbmUgYmV0d2VlbiB0aGUgaGVhZGVycyBhbmQgdGhlIGJvZHkuPC9kZD4KICAgIDwvZGw+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlCbG9jayIgaWQ9IlByb3h5QmxvY2siPlByb3h5QmxvY2s8L2E+IDxhIG5hbWU9InByb3h5YmxvY2siIGlkPSJwcm94eWJsb2NrIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Xb3JkcywgaG9zdHMsIG9yIGRvbWFpbnMgdGhhdCBhcmUgYmFubmVkIGZyb20gYmVpbmcKcHJveGllZDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eUJsb2NrICp8PHZhcj53b3JkPC92YXI+fDx2YXI+aG9zdDwvdmFyPnw8dmFyPmRvbWFpbjwvdmFyPgpbPHZhcj53b3JkPC92YXI+fDx2YXI+aG9zdDwvdmFyPnw8dmFyPmRvbWFpbjwvdmFyPl0gLi4uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlByb3h5QmxvY2s8L2NvZGU+IGRpcmVjdGl2ZSBzcGVjaWZpZXMgYSBsaXN0IG9mCiAgICB3b3JkcywgaG9zdHMgYW5kL29yIGRvbWFpbnMsIHNlcGFyYXRlZCBieSBzcGFjZXMuICBIVFRQLCBIVFRQUywgYW5kCiAgICBGVFAgZG9jdW1lbnQgcmVxdWVzdHMgdG8gc2l0ZXMgd2hvc2UgbmFtZXMgY29udGFpbiBtYXRjaGVkIHdvcmRzLAogICAgaG9zdHMgb3IgZG9tYWlucyBhcmUgPGVtPmJsb2NrZWQ8L2VtPiBieSB0aGUgcHJveHkgc2VydmVyLiBUaGUgcHJveHkKICAgIG1vZHVsZSB3aWxsIGFsc28gYXR0ZW1wdCB0byBkZXRlcm1pbmUgSVAgYWRkcmVzc2VzIG9mIGxpc3QgaXRlbXMgd2hpY2gKICAgIG1heSBiZSBob3N0bmFtZXMgZHVyaW5nIHN0YXJ0dXAsIGFuZCBjYWNoZSB0aGVtIGZvciBtYXRjaCB0ZXN0IGFzCiAgICB3ZWxsLiBUaGF0IG1heSBzbG93IGRvd24gdGhlIHN0YXJ0dXAgdGltZSBvZiB0aGUgc2VydmVyLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHA+PGNvZGU+CiAgICAgIFByb3h5QmxvY2sgam9lcy1nYXJhZ2UuY29tIHNvbWUtaG9zdC5jby51ayByb2NreS53b3RzYW1hdHRhdS5lZHUKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+PGNvZGU+cm9ja3kud290c2FtYXR0YXUuZWR1PC9jb2RlPiB3b3VsZCBhbHNvIGJlIG1hdGNoZWQgaWYgcmVmZXJlbmNlZCBieQogICAgSVAgYWRkcmVzcy48L3A+CgogICAgPHA+Tm90ZSB0aGF0IDxjb2RlPndvdHNhbWF0dGF1PC9jb2RlPiB3b3VsZCBhbHNvIGJlIHN1ZmZpY2llbnQgdG8gbWF0Y2gKICAgIDxjb2RlPndvdHNhbWF0dGF1LmVkdTwvY29kZT4uPC9wPgoKICAgIDxwPk5vdGUgYWxzbyB0aGF0PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICBQcm94eUJsb2NrICoKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+YmxvY2tzIGNvbm5lY3Rpb25zIHRvIGFsbCBzaXRlcy48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlEb21haW4iIGlkPSJQcm94eURvbWFpbiI+UHJveHlEb21haW48L2E+IDxhIG5hbWU9InByb3h5ZG9tYWluIiBpZD0icHJveHlkb21haW4iPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkRlZmF1bHQgZG9tYWluIG5hbWUgZm9yIHByb3hpZWQgcmVxdWVzdHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlEb21haW4gPHZhcj5Eb21haW48L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBpcyBvbmx5IHVzZWZ1bCBmb3IgQXBhY2hlIHByb3h5IHNlcnZlcnMgd2l0aGluCiAgICBpbnRyYW5ldHMuIFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm94eURvbWFpbjwvY29kZT4gZGlyZWN0aXZlIHNwZWNpZmllcwogICAgdGhlIGRlZmF1bHQgZG9tYWluIHdoaWNoIHRoZSBhcGFjaGUgcHJveHkgc2VydmVyIHdpbGwgYmVsb25nIHRvLiBJZiBhCiAgICByZXF1ZXN0IHRvIGEgaG9zdCB3aXRob3V0IGEgZG9tYWluIG5hbWUgaXMgZW5jb3VudGVyZWQsIGEgcmVkaXJlY3Rpb24KICAgIHJlc3BvbnNlIHRvIHRoZSBzYW1lIGhvc3Qgd2l0aCB0aGUgY29uZmlndXJlZCA8dmFyPkRvbWFpbjwvdmFyPiBhcHBlbmRlZAogICAgd2lsbCBiZSBnZW5lcmF0ZWQuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cD48Y29kZT4KICAgICAgUHJveHlSZW1vdGUgICogIGh0dHA6Ly9maXJld2FsbC5teWNvbXBhbnkuY29tOjgxPGJyIC8+CiAgICAgIE5vUHJveHkgICAgICAgICAubXljb21wYW55LmNvbSAxOTIuMTY4LjExMi4wLzIxPGJyIC8+CiAgICAgIFByb3h5RG9tYWluICAgICAubXljb21wYW55LmNvbQogICAgPC9jb2RlPjwvcD48L2Rpdj4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eUVycm9yT3ZlcnJpZGUiIGlkPSJQcm94eUVycm9yT3ZlcnJpZGUiPlByb3h5RXJyb3JPdmVycmlkZTwvYT4gPGEgbmFtZT0icHJveHllcnJvcm92ZXJyaWRlIiBpZD0icHJveHllcnJvcm92ZXJyaWRlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5PdmVycmlkZSBlcnJvciBwYWdlcyBmb3IgcHJveGllZCBjb250ZW50PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5RXJyb3JPdmVycmlkZSBPbnxPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlFcnJvck92ZXJyaWRlIE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiB2ZXJzaW9uIDIuMCBhbmQgbGF0ZXI8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBpcyB1c2VmdWwgZm9yIHJldmVyc2UtcHJveHkgc2V0dXBzLCB3aGVyZSB5b3Ugd2FudCB0byAKICAgIGhhdmUgYSBjb21tb24gbG9vayBhbmQgZmVlbCBvbiB0aGUgZXJyb3IgcGFnZXMgc2VlbiBieSB0aGUgZW5kIHVzZXIuIAogICAgVGhpcyBhbHNvIGFsbG93cyBmb3IgaW5jbHVkZWQgZmlsZXMgKHZpYQogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT4ncyBTU0kpIHRvIGdldAogICAgdGhlIGVycm9yIGNvZGUgYW5kIGFjdCBhY2NvcmRpbmdseSAoZGVmYXVsdCBiZWhhdmlvciB3b3VsZCBkaXNwbGF5CiAgICB0aGUgZXJyb3IgcGFnZSBvZiB0aGUgcHJveGllZCBzZXJ2ZXIsIHR1cm5pbmcgdGhpcyBvbiBzaG93cyB0aGUgU1NJCiAgICBFcnJvciBtZXNzYWdlKS48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlJT0J1ZmZlclNpemUiIGlkPSJQcm94eUlPQnVmZmVyU2l6ZSI+UHJveHlJT0J1ZmZlclNpemU8L2E+IDxhIG5hbWU9InByb3h5aW9idWZmZXJzaXplIiBpZD0icHJveHlpb2J1ZmZlcnNpemUiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkRldGVybWluZSBzaXplIG9mIGludGVybmFsIGRhdGEgdGhyb3VnaHB1dCBidWZmZXI8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlJT0J1ZmZlclNpemUgPHZhcj5ieXRlczwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eUlPQnVmZmVyU2l6ZSA4MTkyPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlByb3h5SU9CdWZmZXJTaXplPC9jb2RlPiBkaXJlY3RpdmUgYWRqdXN0cyB0aGUgc2l6ZQogICAgb2YgdGhlIGludGVybmFsIGJ1ZmZlciwgd2hpY2ggaXMgdXNlZCBhcyBhIHNjcmF0Y2hwYWQgZm9yIHRoZSBkYXRhIGJldHdlZW4KICAgIGlucHV0IGFuZCBvdXRwdXQuIFRoZSBzaXplIG11c3QgYmUgbGVzcyBvciBlcXVhbCA8Y29kZT44MTkyPC9jb2RlPi48L3A+CgogICAgPHA+SW4gYWxtb3N0IGV2ZXJ5IGNhc2UgdGhlcmUncyBubyByZWFzb24gdG8gY2hhbmdlIHRoYXQgdmFsdWUuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5TWF0Y2giIGlkPSJQcm94eU1hdGNoIj4mbHQ7UHJveHlNYXRjaCZndDs8L2E+IDxhIG5hbWU9InByb3h5bWF0Y2giIGlkPSJwcm94eW1hdGNoIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db250YWluZXIgZm9yIGRpcmVjdGl2ZXMgYXBwbGllZCB0byByZWd1bGFyLWV4cHJlc3Npb24tbWF0Y2hlZCAKcHJveGllZCByZXNvdXJjZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Jmx0O1Byb3h5TWF0Y2ggPHZhcj5yZWdleDwvdmFyPiZndDsgLi4uJmx0Oy9Qcm94eU1hdGNoJmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7UHJveHlNYXRjaCZndDs8L2NvZGU+IGRpcmVjdGl2ZSBpcwogICAgaWRlbnRpY2FsIHRvIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHkiPiZsdDtQcm94eSZndDs8L2E+PC9jb2RlPiBkaXJlY3RpdmUsIGV4Y2VwdCBpdCBtYXRjaGVzIFVSTHMKICAgIHVzaW5nIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwjcmVnZXgiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPnJlZ3VsYXIgZXhwcmVzc2lvbnM8L2E+LjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eU1heEZvcndhcmRzIiBpZD0iUHJveHlNYXhGb3J3YXJkcyI+UHJveHlNYXhGb3J3YXJkczwvYT4gPGEgbmFtZT0icHJveHltYXhmb3J3YXJkcyIgaWQ9InByb3h5bWF4Zm9yd2FyZHMiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPk1heGltaXVtIG51bWJlciBvZiBwcm94aWVzIHRoYXQgYSByZXF1ZXN0IGNhbiBiZSBmb3J3YXJkZWQKdGhyb3VnaDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eU1heEZvcndhcmRzIDx2YXI+bnVtYmVyPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5TWF4Rm9yd2FyZHMgMTA8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5BdmFpbGFibGUgaW4gQXBhY2hlIDIuMCBhbmQgbGF0ZXI8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+UHJveHlNYXhGb3J3YXJkczwvY29kZT4gZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUKICAgIG1heGltdW0gbnVtYmVyIG9mIHByb3hpZXMgdGhyb3VnaCB3aGljaCBhIHJlcXVlc3QgbWF5IHBhc3MsIGlmIHRoZXJlJ3Mgbm8KICAgIDxjb2RlPk1heC1Gb3J3YXJkczwvY29kZT4gaGVhZGVyIHN1cHBsaWVkIHdpdGggdGhlIHJlcXVlc3QuIFRoaXMgaXMKICAgIHNldCB0byBwcmV2ZW50IGluZmluaXRlIHByb3h5IGxvb3BzLCBvciBhIERvUyBhdHRhY2suPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cD48Y29kZT4KICAgICAgUHJveHlNYXhGb3J3YXJkcyAxNQogICAgPC9jb2RlPjwvcD48L2Rpdj4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVBhc3MiIGlkPSJQcm94eVBhc3MiPlByb3h5UGFzczwvYT4gPGEgbmFtZT0icHJveHlwYXNzIiBpZD0icHJveHlwYXNzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5NYXBzIHJlbW90ZSBzZXJ2ZXJzIGludG8gdGhlIGxvY2FsIHNlcnZlciBVUkwtc3BhY2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlQYXNzIFs8dmFyPnBhdGg8L3Zhcj5dICF8PHZhcj51cmw8L3Zhcj4gWzx2YXI+a2V5PXZhbHVlPC92YXI+IDx2YXI+a2V5PXZhbHVlPC92YXI+IC4uLl1dPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBhbGxvd3MgcmVtb3RlIHNlcnZlcnMgdG8gYmUgbWFwcGVkIGludG8gdGhlIHNwYWNlIG9mCiAgICB0aGUgbG9jYWwgc2VydmVyOyB0aGUgbG9jYWwgc2VydmVyIGRvZXMgbm90IGFjdCBhcyBhIHByb3h5IGluIHRoZQogICAgY29udmVudGlvbmFsIHNlbnNlLCBidXQgYXBwZWFycyB0byBiZSBhIG1pcnJvciBvZiB0aGUgcmVtb3RlCiAgICBzZXJ2ZXIuIDx2YXI+cGF0aDwvdmFyPiBpcyB0aGUgbmFtZSBvZiBhIGxvY2FsIHZpcnR1YWwgcGF0aDsgPHZhcj51cmw8L3Zhcj4KICAgIGlzIGEgcGFydGlhbCBVUkwgZm9yIHRoZSByZW1vdGUgc2VydmVyIGFuZCBjYW5ub3QgaW5jbHVkZSBhIHF1ZXJ5CiAgICBzdHJpbmcuPC9wPgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlyZXF1ZXN0cyI+UHJveHlSZXF1ZXN0czwvYT48L2NvZGU+IGRpcmVjdGl2ZSBzaG91bGQKICAgIHVzdWFsbHkgYmUgc2V0IDxzdHJvbmc+b2ZmPC9zdHJvbmc+IHdoZW4gdXNpbmcKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlByb3h5UGFzczwvY29kZT4uPC9kaXY+CgogICAgPHA+U3VwcG9zZSB0aGUgbG9jYWwgc2VydmVyIGhhcyBhZGRyZXNzIDxjb2RlPmh0dHA6Ly9leGFtcGxlLmNvbS88L2NvZGU+OwogICAgdGhlbjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgUHJveHlQYXNzIC9taXJyb3IvZm9vLyBodHRwOi8vYmFja2VuZC5leGFtcGxlLmNvbS8KICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+d2lsbCBjYXVzZSBhIGxvY2FsIHJlcXVlc3QgZm9yCiAgICA8Y29kZT5odHRwOi8vZXhhbXBsZS5jb20vbWlycm9yL2Zvby9iYXI8L2NvZGU+IHRvIGJlIGludGVybmFsbHkgY29udmVydGVkCiAgICBpbnRvIGEgcHJveHkgcmVxdWVzdCB0byA8Y29kZT5odHRwOi8vYmFja2VuZC5leGFtcGxlLmNvbS9iYXI8L2NvZGU+LjwvcD4KCiAgICA8cD5UaGUgPGNvZGU+ITwvY29kZT4gZGlyZWN0aXZlIGlzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZXJlIHlvdSBkb24ndCB3YW50CiAgICB0byByZXZlcnNlLXByb3h5IGEgc3ViZGlyZWN0b3J5LCA8ZW0+ZS5nLjwvZW0+PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICBQcm94eVBhc3MgL21pcnJvci9mb28vaSAhPGJyIC8+CiAgICAgIFByb3h5UGFzcyAvbWlycm9yL2ZvbyBodHRwOi8vYmFja2VuZC5leGFtcGxlLmNvbQogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD53aWxsIHByb3h5IGFsbCByZXF1ZXN0cyB0byA8Y29kZT4vbWlycm9yL2ZvbzwvY29kZT4gdG8KICAgIDxjb2RlPmJhY2tlbmQuZXhhbXBsZS5jb208L2NvZGU+IDxlbT5leGNlcHQ8L2VtPiByZXF1ZXN0cyBtYWRlIHRvCiAgICA8Y29kZT4vbWlycm9yL2Zvby9pPC9jb2RlPi48L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPk5vdGU8L2gzPgogICAgICA8cD5PcmRlciBpcyBpbXBvcnRhbnQuIHlvdSBuZWVkIHRvIHB1dCB0aGUgZXhjbHVzaW9ucyA8ZW0+YmVmb3JlPC9lbT4gdGhlCiAgICAgIGdlbmVyYWwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+UHJveHlQYXNzPC9jb2RlPiBkaXJlY3RpdmUuPC9wPgogICAgPC9kaXY+CgogICAgPHA+QXMgb2YgQXBhY2hlIDIuMSwgdGhlIGFiaWxpdHkgdG8gdXNlIHBvb2xlZCBjb25uZWN0aW9ucyB0byBhIGJhY2tlbmQKICAgIHNlcnZlciBpcyBhdmFpbGFibGUuIFVzaW5nIHRoZSA8Y29kZT5rZXk9dmFsdWU8L2NvZGU+IHBhcmFtZXRlcnMgaXQgaXMKICAgIHBvc3NpYmxlIHRvIHR1bmUgdGhpcyBjb25uZWN0aW9uIHBvb2xpbmcuIFRoZSBkZWZhdWx0IGZvciBhIDxjb2RlPkhhcmQKICAgIE1heGltdW08L2NvZGU+IGZvciB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGlzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBwZXIKICAgIHByb2Nlc3MgaW4gdGhlIGFjdGl2ZSBNUE0uIEluIHRoZSBQcmVmb3JrIE1QTSwgdGhpcyBpcyBhbHdheXMgMSwgd2hpbGUgd2l0aAogICAgdGhlIFdvcmtlciBNUE0gaXQgaXMgY29udHJvbGxlZCBieSB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlRocmVhZHNQZXJDaGlsZDwvY29kZT4uPC9wPgoKICAgIDxwPlNldHRpbmcgPGNvZGU+bWluPC9jb2RlPiB3aWxsIGRldGVybWluZSBob3cgbWFueSBjb25uZWN0aW9ucyB3aWxsIGFsd2F5cyAKICAgIGJlIG9wZW4gdG8gdGhlIGJhY2tlbmQgc2VydmVyLiBVcHRvIHRoZSBTb2Z0IE1heGltdW0gb3IgPGNvZGU+c21heDwvY29kZT4gCiAgICBudW1iZXIgb2YgY29ubmVjdGlvbnMgd2lsbCBiZSBjcmVhdGVkIG9uIGRlbWFuZC4gQW55IGNvbm5lY3Rpb25zIGFib3ZlIAogICAgPGNvZGU+c21heDwvY29kZT4gYXJlIHN1YmplY3QgdG8gYSB0aW1lIHRvIGxpdmUgb3IgPGNvZGU+dHRsPC9jb2RlPi4gIEFwYWNoZQogICAgd2lsbCBuZXZlciBjcmVhdGUgbW9yZSB0aGFuIHRoZSBIYXJkIE1heGltdW0gb3IgPGNvZGU+bWF4PC9jb2RlPiBjb25uZWN0aW9ucwogICAgdG8gdGhlIGJhY2tlbmQgc2VydmVyLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICBQcm94eVBhc3MgL2V4YW1wbGUgaHR0cDovL2JhY2tlbmQuZXhhbXBsZS5jb20gc21heD01IG1heD0yMCB0dGw9MTIwIHJldHJ5PTMwMAogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8dGFibGU+CiAgICA8dHI+PHRoPlBhcmFtZXRlcjwvdGg+CiAgICAgICAgPHRoPkRlZmF1bHQ8L3RoPgogICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj4KICAgIDx0cj48dGQ+bWluPC90ZD4KICAgICAgICA8dGQ+MDwvdGQ+CiAgICAgICAgPHRkPk1pbnVtdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHRoYXQgd2lsbCBhbHdheXMKICAgICAgICAgICAgYmUgb3BlbiB0byB0aGUgYmFja2VuZCBzZXJ2ZXIuPC90ZD48L3RyPgogICAgPHRyPjx0ZD5tYXg8L3RkPgogICAgICAgIDx0ZD4xLi4ubjwvdGQ+CiAgICAgICAgPHRkPkhhcmQgTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgdGhhdCB3aWxsIGJlCiAgICBhbGxvd2VkIHRvIHRoZSBiYWNrZW5kIHNlcnZlci4gVGhlIGRlZmF1bHQgZm9yIGEgSGFyZCBNYXhpbXVtCiAgICBmb3IgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBpcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgcGVyIHByb2Nlc3MgaW4gdGhlIAogICAgYWN0aXZlIE1QTS4gSW4gdGhlIFByZWZvcmsgTVBNLCB0aGlzIGlzIGFsd2F5cyAxLCB3aGlsZSB3aXRoIHRoZSBXb3JrZXIgTVBNCiAgICBpdCBpcyBjb250cm9sbGVkIGJ5IHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5UaHJlYWRzUGVyQ2hpbGQ8L2NvZGU+LgogICAgQXBhY2hlIHdpbGwgbmV2ZXIgY3JlYXRlIG1vcmUgdGhhbiB0aGUgSGFyZCBNYXhpbXVtIGNvbm5lY3Rpb25zCiAgICB0byB0aGUgYmFja2VuZCBzZXJ2ZXIuPC90ZD48L3RyPgogICAgPHRyPjx0ZD5zbWF4PC90ZD4KICAgICAgICA8dGQ+bWF4PC90ZD4KICAgICAgICA8dGQ+VXB0byB0aGUgU29mdCBNYXhpbXVtCiAgICBudW1iZXIgb2YgY29ubmVjdGlvbnMgd2lsbCBiZSBjcmVhdGVkIG9uIGRlbWFuZC4gQW55IGNvbm5lY3Rpb25zIGFib3ZlIAogICAgPGNvZGU+c21heDwvY29kZT4gYXJlIHN1YmplY3QgdG8gYSB0aW1lIHRvIGxpdmUgb3IgPGNvZGU+dHRsPC9jb2RlPi4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+dHRsPC90ZD4KICAgICAgICA8dGQ+LTwvdGQ+CiAgICAgICAgPHRkPlRpbWUgVG8gTGl2ZSBmb3IgdGhlIGluYWN0aXZlIGNvbm5lY3Rpb25zIGFib3ZlIHRoZQogICAgICAgIDxjb2RlPnNtYXg8L2NvZGU+IGNvbm5lY3Rpb25zIGluIHNlY29uZHMuIEFwYWNoZSB3aWxsIGNsb3NlIGFsbAogICAgICAgIGNvbm5lY3Rpb25zIHRoYXQgaGFzIG5vdCBiZWVuIHVzZWQgaW5zaWRlIHRoYXQgdGltZSBwZXJpb2QuCiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPnRpbWVvdXQ8L3RkPgogICAgICAgIDx0ZD48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5UaW1lb3V0PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkNvbm5lY3Rpb24gdGltZW91dCBpbiBzZWNvbmRzLgogICAgICAgIElmIG5vdCBzZXQgdGhlIEFwYWNoZSB3aWxsIHdhaXQgdW50aWwgdGhlIGZyZWUgY29ubmVjdGlvbgogICAgICAgIGlzIGF2YWlsYWJsZS4gVGhpcyBkaXJlY3RpdmUgaXMgdXNlZCBmb3IgbGltaXRpbmcgdGhlIG51bWJlcgogICAgICAgIG9mIGNvbm5lY3Rpb25zIHRvIHRoZSBiYWNrZW5kIHNlcnZlciB0b2dldGhlciB3aXRoIDxjb2RlPm1heDwvY29kZT4KICAgICAgICBwYXJhbWV0ZXIuCiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPmFjcXVpcmU8L3RkPgogICAgICAgIDx0ZD4tPC90ZD4KICAgICAgICA8dGQ+SWYgc2V0IHRoaXMgd2lsbCBiZSB0aGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgZm9yIGEgZnJlZQogICAgY29ubmVjdGlvbiBpbiB0aGUgY29ubmVjdGlvbiBwb29sLiBJZiB0aGVyZSBhcmUgbm8gZnJlZSBjb25uZWN0aW9ucwogICAgaW4gdGhlIHBvb2wgdGhlIEFwYWNoZSB3aWxsIHJldHVybiA8Y29kZT5TRVJWRVJfQlVTWTwvY29kZT4gc3RhdHVzIHRvCiAgICB0aGUgY2xpZW50LgogICAgPC90ZD48L3RyPgogICAgPHRyPjx0ZD5rZWVwYWxpdmU8L3RkPgogICAgICAgIDx0ZD5PZmY8L3RkPgogICAgICAgIDx0ZD5UaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgdXNlZCB3aGVuIHlvdSBoYXZlIGEgZmlyZXdhbGwgYmV0d2VlbiB5b3VyCiAgICBBcGFjaGUgYW5kIHRoZSBiYWNrZW5kIHNlcnZlciwgd2hvIHRlbmQgdG8gZHJvcCBpbmFjdGl2ZSBjb25uZWN0aW9ucy4KICAgIFRoaXMgZmxhZyB3aWxsIHRlbGwgdGhlIE9wZXJhdGluZyBTeXN0ZW0gdG8gc2VuZCA8Y29kZT5LRUVQX0FMSVZFPC9jb2RlPgogICAgbWVzc2FnZXMgb24gaW5hY3RpdmUgY29ubmVjdGlvbnMgKGludGVydmFsIGRlcGVuZHMgb24gZ2xvYmFsIE9TIHNldHRpbmdzLAogICAgZ2VuZXJhbGx5IDEyMG1zKSwgYW5kIHRodXMgcHJldmVudCB0aGUgZmlyZXdhbGwgdG8gZHJvcCB0aGUgY29ubmVjdGlvbi4KICAgIFRvIGVuYWJsZSBrZWVwYWxpdmUgc2V0IHRoaXMgcHJvcGVydHkgdmFsdWUgdG8gPGNvZGU+T248L2NvZGU+LiAKICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+cmV0cnk8L3RkPgogICAgICAgIDx0ZD42MDwvdGQ+CiAgICAgICAgPHRkPkNvbm5lY3Rpb24gcG9vbCB3b3JrZXIgcmV0cnkgdGltZW91dCBpbiBzZWNvbmRzLgogICAgSWYgdGhlIGNvbm5lY3Rpb24gcG9vbCB3b3JrZXIgdG8gdGhlIGJhY2tlbmQgc2VydmVyIGlzIGluIHRoZSBlcnJvciBzdGF0ZSwKICAgIEFwYWNoZSB3aWxsIG5vdCBmb3J3YXJkIGFueSByZXF1ZXN0cyB0byB0aGF0IHNlcnZlciB1bnRpbCB0aGUgdGltZW91dAogICAgZXhwaXJlcy4gVGhpcyBlbmFibGVzIHRvIHNodXQgZG93biB0aGUgYmFja2VuZCBzZXJ2ZXIgZm9yIG1haW50ZW5hbmNlLAogICAgYW5kIGJyaW5nIGl0IGJhY2sgb25saW5lIGxhdGVyLgogICAgPC90ZD48L3RyPgogICAgPHRyPjx0ZD5sb2FkZmFjdG9yPC90ZD4KICAgICAgICA8dGQ+MTwvdGQ+CiAgICAgICAgPHRkPldvcmtlciBsb2FkIGZhY3Rvci4gVXNlZCB3aXRoIEJhbGFuY2VyTWVtYmVyLgogICAgICAgICBJdCBpcyBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDEwMCBhbmQgZGVmaW5lcyB0aGUgbm9ybWFsaXplZCB3ZWlnaHRlZAogICAgICAgICBsb2FkIGFwcGxpZWQgdG8gdGhlIHdvcmtlci4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+cm91dGU8L3RkPgogICAgICAgIDx0ZD4tPC90ZD4KICAgICAgICA8dGQ+Um91dGUgb2YgdGhlIHdvcmtlciB3aGVuIHVzZWQgaW5zaWRlIGxvYWQgYmFsYW5jZXIuCiAgICAgICAgVGhlIHJvdXRlIGlzIGEgdmFsdWUgYXBwZW5kZWQgdG8gc2Vlc2lvbiBpZC4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+cmVkaXJlY3Q8L3RkPgogICAgICAgIDx0ZD4tPC90ZD4KICAgICAgICA8dGQ+UmVkaXJlY3Rpb24gUm91dGUgb2YgdGhlIHdvcmtlci4gVGhpcyB2YWx1ZSBpcyB1c3VhbGx5CiAgICAgICAgc2V0IGR5bmFtaWNhbGx5IHRvIGVuYWJsZSBzYWZlIHJlbW92YWwgb2YgdGhlIG5vZGUgZnJvbQogICAgICAgIHRoZSBjbHVzdGVyLiBJZiBzZXQgYWxsIHJlcXVlc3RzIHdpdGhvdXQgc2Vzc2lvbiBpZCB3aWxsIGJlCiAgICAgICAgcmVkaXJlY3RlZCB0byB0aGUgQmFsYW5jZXJNZW1iZXIgdGhhdCBoYXMgcm91dGUgcGFyYW1ldGFyCiAgICAgICAgZXF1YWwgYXMgdGhpcyB2YWx1ZS4KICAgIDwvdGQ+PC90cj4KCiAgICA8L3RhYmxlPgoKICAgIDxwPklmIHRoZSBQcm94eSBkaXJlY3RpdmUgc2NoZW1lIHN0YXJ0cyB3aXRoIHRoZQogICAgPGNvZGU+YmFsYW5jZXI6Ly88L2NvZGU+IHRoZW4gYSB2aXJ0dWFsIHdvcmtlciB0aGF0IGRvZXMgbm90IHJlYWxseQogICAgY29tbXVuaWNhdGUgd2l0aCB0aGUgYmFja2VuZCBzZXJ2ZXIgd2lsbCBiZSBjcmVhdGVkLiBJbnN0ZWFkIGl0IGlzIHJlc3BvbnNpYmxlCiAgICBmb3IgdGhlIG1hbmFnZW1lbnQgb2Ygc2V2ZXJhbCAicmVhbCIgd29ya2Vycy4gSW4gdGhhdCBjYXNlIHRoZSBzcGVjaWFsIHNldCBvZgogICAgcGFyYW1ldGVycyBjYW4gYmUgYWRkIHRvIHRoaXMgdmlydHVhbCB3b3JrZXIuCiAgICA8L3A+CiAgICA8dGFibGU+CiAgICA8dHI+PHRoPlBhcmFtZXRlcjwvdGg+CiAgICAgICAgPHRoPkRlZmF1bHQ8L3RoPgogICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj4KICAgIDx0cj48dGQ+bGJtZXRob2Q8L3RkPgogICAgICAgIDx0ZD4tPC90ZD4KICAgICAgICA8dGQ+QmFsYW5jZXIgbG9hZC1iYWxhbmNlIG1ldGhvZC4gU2VsZWN0IHRoZSBsb2FkLWJhbGFuY2luZyBzY2hlZHVsZXIKICAgICAgICBtZXRob2QgdG8gdXNlLiBFaXRoZXIgPGNvZGU+YnlyZXF1ZXN0czwvY29kZT4sIHRvIHBlcmZvcm0gd2VpZ2h0ZWQKICAgICAgICByZXF1ZXN0IGNvdW50aW5nIG9yIDxjb2RlPmJ5dHJhZmZpYzwvY29kZT4sIHRvIHBlcmZvcm0gd2VpZ2h0ZWQKICAgICAgICB0cmFmZmljIGJ5dGUgY291bnQgYmFsYW5jaW5nLiBEZWZhdWx0IGlzIDxjb2RlPmJ5cmVxdWVzdHM8L2NvZGU+LgogICAgPC90ZD48L3RyPgogICAgPHRyPjx0ZD5zdGlja3lzZXNzaW9uPC90ZD4KICAgICAgICA8dGQ+LTwvdGQ+CiAgICAgICAgPHRkPkJhbGFuY2VyIHN0aWNreSBzZXNzaW9uIG5hbWUuIFRoZSB2YWx1ZSBpcyB1c3VhbGx5IHNldCB0byBzb21ldGhpbmcKICAgICAgICBsaWtlIDxjb2RlPkpTRVNTSU9OSUQ8L2NvZGU+IG9yIDxjb2RlPlBIUFNFU1NJT05JRDwvY29kZT4sCiAgICAgICAgYW5kIGl0IGRlcGVuZHMgb24gdGhlIGJhY2tlbmQgYXBwbGljYXRpb24gc2VydmVyIHRoYXQgc3VwcG9ydCBzZXNzaW9ucy4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+bm9mYWlsb3ZlcjwvdGQ+CiAgICAgICAgPHRkPk9mZjwvdGQ+CiAgICAgICAgPHRkPklmIHNldCB0byA8Y29kZT5PbjwvY29kZT4gdGhlIHNlc3Npb24gd2lsbCBicmVhayBpZiB0aGUgd29ya2VyIGlzIGluCiAgICAgICAgZXJyb3Igc3RhdGUgb3IgZGlzYWJsZWQuIFNldCB0aGlzIHZhbHVlIHRvIE9uIGlmIGJhY2tlbmQgc2VydmVycyBkbyBub3QKICAgICAgICBzdXBwb3J0IHNlc3Npb24gcmVwbGljYXRpb24uCiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPnRpbWVvdXQ8L3RkPgogICAgICAgIDx0ZD4wPC90ZD4KICAgICAgICA8dGQ+QmFsYW5jZXIgdGltZW91dCBpbiBzZWNvbmRzLiBJZiBzZXQgdGhpcyB3aWxsIGJlIHRoZSBtYXhpbXVtIHRpbWUKICAgICAgICB0byB3YWl0IGZvciBhIGZyZWUgd29ya2VyLiBEZWZhdWx0IGlzIG5vdCB0byB3YWl0LiAKICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+bWF4YXR0ZW1wdHM8L3RkPgogICAgICAgIDx0ZD4xPC90ZD4KICAgICAgICA8dGQ+TWF4aW11bSBudW1iZXIgb2YgZmFpbG92ZXIgYXR0ZW1wdHMgYmVmb3JlIGdpdmluZyB1cC4gCiAgICA8L3RkPjwvdHI+CiAgICAKICAgIDwvdGFibGU+CiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgUHJveHlQYXNzIC9zcGVjaWFsLWFyZWEgaHR0cDovL3NwZWNpYWwuZXhhbXBsZS5jb20vIHNtYXg9NSBtYXg9MTA8YnIgLz4KICAgICAgUHJveHlQYXNzIC8gYmFsYW5jZXI6Ly9teWNsdXN0ZXIgc3RpY2t5c2Vzc2lvbj1qc2Vzc2lvbmlkIG5vZmFpbG92ZXI9T248YnIgLz4KICAgICAgJmx0O1Byb3h5IGJhbGFuY2VyOi8vbXljbHVzdGVyJmd0OzxiciAvPgogICAgICA8c3BhbiBjbGFzcz0iaW5kZW50Ij4KICAgICAgICBCYWxhbmNlck1lbWJlciBodHRwOi8vMS4yLjMuNDo4MDA5PGJyIC8+CiAgICAgICAgQmFsYW5jZXJNZW1iZXIgaHR0cDovLzEuMi4zLjU6ODAwOSBzbWF4PTEwPGJyIC8+CiAgICAgICAgIyBMZXNzIHBvd2VyZnVsIHNlcnZlciwgZG9uJ3Qgc2VuZCBhcyBtYW55IHJlcXVlc3RzIHRoZXJlPGJyIC8+CiAgICAgICAgQmFsYW5jZXJNZW1iZXIgaHR0cDovLzEuMi4zLjY6ODAwOSBzbWF4PTEgbG9hZGZhY3Rvcj0yMDxiciAvPgogICAgICA8L3NwYW4+CiAgICAgICZsdDsvUHJveHkmZ3Q7CiAgICA8L2NvZGU+PC9wPjwvZGl2PgogICAgCiAgICA8cD5XaGVuIHVzZWQgaW5zaWRlIGEgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNsb2NhdGlvbiI+Jmx0O0xvY2F0aW9uJmd0OzwvYT48L2NvZGU+IHNlY3Rpb24sIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBvbWl0dGVkIGFuZCB0aGUgbG9jYWwKICAgIGRpcmVjdG9yeSBpcyBvYnRhaW5lZCBmcm9tIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI2xvY2F0aW9uIj4mbHQ7TG9jYXRpb24mZ3Q7PC9hPjwvY29kZT4uPC9wPgoKICAgIDxwPklmIHlvdSByZXF1aXJlIGEgbW9yZSBmbGV4aWJsZSByZXZlcnNlLXByb3h5IGNvbmZpZ3VyYXRpb24sIHNlZSB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGVydWxlIj5SZXdyaXRlUnVsZTwvYT48L2NvZGU+IGRpcmVjdGl2ZSB3aXRoIHRoZQogICAgPGNvZGU+W1BdPC9jb2RlPiBmbGFnLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVBhc3NSZXZlcnNlIiBpZD0iUHJveHlQYXNzUmV2ZXJzZSI+UHJveHlQYXNzUmV2ZXJzZTwvYT4gPGEgbmFtZT0icHJveHlwYXNzcmV2ZXJzZSIgaWQ9InByb3h5cGFzc3JldmVyc2UiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkFkanVzdHMgdGhlIFVSTCBpbiBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgc2VudCBmcm9tIGEgcmV2ZXJzZQpwcm94aWVkIHNlcnZlcjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eVBhc3NSZXZlcnNlIFs8dmFyPnBhdGg8L3Zhcj5dIDx2YXI+dXJsPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBsZXRzIEFwYWNoZSBhZGp1c3QgdGhlIFVSTCBpbiB0aGUgPGNvZGU+TG9jYXRpb248L2NvZGU+LAogICAgPGNvZGU+Q29udGVudC1Mb2NhdGlvbjwvY29kZT4gYW5kIDxjb2RlPlVSSTwvY29kZT4gaGVhZGVycyBvbiBIVFRQIHJlZGlyZWN0CiAgICByZXNwb25zZXMuIFRoaXMgaXMgZXNzZW50aWFsIHdoZW4gQXBhY2hlIGlzIHVzZWQgYXMgYSByZXZlcnNlIHByb3h5IHRvIGF2b2lkCiAgICBieS1wYXNzaW5nIHRoZSByZXZlcnNlIHByb3h5IGJlY2F1c2Ugb2YgSFRUUCByZWRpcmVjdHMgb24gdGhlIGJhY2tlbmQKICAgIHNlcnZlcnMgd2hpY2ggc3RheSBiZWhpbmQgdGhlIHJldmVyc2UgcHJveHkuPC9wPgoKICAgIDxwPk9ubHkgdGhlIEhUVFAgcmVzcG9uc2UgaGVhZGVycyBzcGVjaWZpY2FsbHkgbWVudGlvbmVkIGFib3ZlCiAgICB3aWxsIGJlIHJld3JpdHRlbi4gIEFwYWNoZSB3aWxsIG5vdCByZXdyaXRlIG90aGVyIHJlc3BvbnNlCiAgICBoZWFkZXJzLCBub3Igd2lsbCBpdCByZXdyaXRlIFVSTCByZWZlcmVuY2VzIGluc2lkZSBIVE1MIHBhZ2VzLgogICAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBwcm94aWVkIGNvbnRlbnQgY29udGFpbnMgYWJzb2x1dGUgVVJMCiAgICByZWZlcmVuY2VzLCB0aGV5IHdpbGwgYnktcGFzcyB0aGUgcHJveHkuICBBIHRoaXJkLXBhcnR5IG1vZHVsZQogICAgdGhhdCB3aWxsIGxvb2sgaW5zaWRlIHRoZSBIVE1MIGFuZCByZXdyaXRlIFVSTCByZWZlcmVuY2VzIGlzIE5pY2sKICAgIEtldydzIDxhIGhyZWY9Imh0dHA6Ly9hcGFjaGUud2VidGhpbmcuY29tL21vZF9wcm94eV9odG1sLyI+bW9kX3Byb3h5X2h0bWw8L2E+LjwvcD4KCiAgICA8cD48dmFyPnBhdGg8L3Zhcj4gaXMgdGhlIG5hbWUgb2YgYSBsb2NhbCB2aXJ0dWFsIHBhdGguIDx2YXI+dXJsPC92YXI+IGlzIGEKICAgIHBhcnRpYWwgVVJMIGZvciB0aGUgcmVtb3RlIHNlcnZlciAtIHRoZSBzYW1lIHdheSB0aGV5IGFyZSB1c2VkIGZvciB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXBhc3MiPlByb3h5UGFzczwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CgogICAgPHA+Rm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlIGxvY2FsIHNlcnZlciBoYXMgYWRkcmVzcwogICAgPGNvZGU+aHR0cDovL2V4YW1wbGUuY29tLzwvY29kZT47IHRoZW48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgIFByb3h5UGFzcyAgICAgICAgIC9taXJyb3IvZm9vLyBodHRwOi8vYmFja2VuZC5leGFtcGxlLmNvbS88YnIgLz4KICAgICAgUHJveHlQYXNzUmV2ZXJzZSAgL21pcnJvci9mb28vIGh0dHA6Ly9iYWNrZW5kLmV4YW1wbGUuY29tLzxiciAvPgogICAgICBQcm94eVBhc3NSZXZlcnNlQ29va2llRG9tYWluICBiYWNrZW5kLmV4YW1wbGUuY29tICBwdWJsaWMuZXhhbXBsZS5jb208YnIgLz4KICAgICAgUHJveHlQYXNzUmV2ZXJzZUNvb2tpZVBhdGggIC8gIC9taXJyb3IvZm9vLwogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD53aWxsIG5vdCBvbmx5IGNhdXNlIGEgbG9jYWwgcmVxdWVzdCBmb3IgdGhlCiAgICA8Y29kZT5odHRwOi8vZXhhbXBsZS5jb20vbWlycm9yL2Zvby9iYXI8L2NvZGU+IHRvIGJlIGludGVybmFsbHkgY29udmVydGVkCiAgICBpbnRvIGEgcHJveHkgcmVxdWVzdCB0byA8Y29kZT5odHRwOi8vYmFja2VuZC5leGFtcGxlLmNvbS9iYXI8L2NvZGU+CiAgICAodGhlIGZ1bmN0aW9uYWxpdHkgPGNvZGU+UHJveHlQYXNzPC9jb2RlPiBwcm92aWRlcyBoZXJlKS4gSXQgYWxzbyB0YWtlcyBjYXJlCiAgICBvZiByZWRpcmVjdHMgdGhlIHNlcnZlciA8Y29kZT5iYWNrZW5kLmV4YW1wbGUuY29tPC9jb2RlPiBzZW5kczogd2hlbgogICAgPGNvZGU+aHR0cDovL2JhY2tlbmQuZXhhbXBsZS5jb20vYmFyPC9jb2RlPiBpcyByZWRpcmVjdGVkIGJ5IGhpbSB0bwogICAgPGNvZGU+aHR0cDovL2JhY2tlbmQuZXhhbXBsZS5jb20vcXV1eDwvY29kZT4gQXBhY2hlIGFkanVzdHMgdGhpcyB0bwogICAgPGNvZGU+aHR0cDovL2V4YW1wbGUuY29tL21pcnJvci9mb28vcXV1eDwvY29kZT4gYmVmb3JlIGZvcndhcmRpbmcgdGhlIEhUVFAKICAgIHJlZGlyZWN0IHJlc3BvbnNlIHRvIHRoZSBjbGllbnQuIE5vdGUgdGhhdCB0aGUgaG9zdG5hbWUgdXNlZCBmb3IKICAgIGNvbnN0cnVjdGluZyB0aGUgVVJMIGlzIGNob3NlbiBpbiByZXNwZWN0IHRvIHRoZSBzZXR0aW5nIG9mIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3VzZWNhbm9uaWNhbG5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9wPgoKICAgIDxwPk5vdGUgdGhhdCB0aGlzIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlByb3h5UGFzc1JldmVyc2U8L2NvZGU+IGRpcmVjdGl2ZSBjYW4KICAgIGFsc28gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBwcm94eSBwYXNzLXRocm91Z2ggZmVhdHVyZQogICAgKDxjb2RlPlJld3JpdGVSdWxlIC4uLiAgW1BdPC9jb2RlPikgZnJvbSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCI+bW9kX3Jld3JpdGU8L2E+PC9jb2RlPgogICAgYmVjYXVzZSBpdCBkb2Vzbid0IGRlcGVuZCBvbiBhIGNvcnJlc3BvbmRpbmcgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cGFzcyI+UHJveHlQYXNzPC9hPjwvY29kZT4gZGlyZWN0aXZlLjwvcD4KCiAgICA8cD5XaGVuIHVzZWQgaW5zaWRlIGEgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNsb2NhdGlvbiI+Jmx0O0xvY2F0aW9uJmd0OzwvYT48L2NvZGU+IHNlY3Rpb24sIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBvbWl0dGVkIGFuZCB0aGUgbG9jYWwKICAgIGRpcmVjdG9yeSBpcyBvYnRhaW5lZCBmcm9tIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI2xvY2F0aW9uIj4mbHQ7TG9jYXRpb24mZ3Q7PC9hPjwvY29kZT4uPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5UGFzc1JldmVyc2VDb29raWVEb21haW4iIGlkPSJQcm94eVBhc3NSZXZlcnNlQ29va2llRG9tYWluIj5Qcm94eVBhc3NSZXZlcnNlQ29va2llRG9tYWluPC9hPiA8YSBuYW1lPSJwcm94eXBhc3NyZXZlcnNlY29va2llZG9tYWluIiBpZD0icHJveHlwYXNzcmV2ZXJzZWNvb2tpZWRvbWFpbiI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QWRqdXN0cyB0aGUgRG9tYWluIHN0cmluZyBpbiBTZXQtQ29va2llIGhlYWRlcnMgZnJvbSBhIHJldmVyc2UtCnByb3hpZWQgc2VydmVyPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5UGFzc1JldmVyc2VDb29raWVEb21haW4gPHZhcj5pbnRlcm5hbC1kb21haW48L3Zhcj4gPHZhcj5wdWJsaWMtZG9tYWluPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CjxwPlVzYWdlIGlzIGJhc2ljYWxseSBzaW1pbGFyIHRvCjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXBhc3NyZXZlcnNlIj5Qcm94eVBhc3NSZXZlcnNlPC9hPjwvY29kZT4sIGJ1dCBpbnN0ZWFkIG9mCnJld3JpdGluZyBoZWFkZXJzIHRoYXQgYXJlIGEgVVJMLCB0aGlzIHJld3JpdGVzIHRoZSA8Y29kZT5kb21haW48L2NvZGU+CnN0cmluZyBpbiA8Y29kZT5TZXQtQ29va2llPC9jb2RlPiBoZWFkZXJzLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVBhc3NSZXZlcnNlQ29va2llUGF0aCIgaWQ9IlByb3h5UGFzc1JldmVyc2VDb29raWVQYXRoIj5Qcm94eVBhc3NSZXZlcnNlQ29va2llUGF0aDwvYT4gPGEgbmFtZT0icHJveHlwYXNzcmV2ZXJzZWNvb2tpZXBhdGgiIGlkPSJwcm94eXBhc3NyZXZlcnNlY29va2llcGF0aCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QWRqdXN0cyB0aGUgUGF0aCBzdHJpbmcgaW4gU2V0LUNvb2tpZSBoZWFkZXJzIGZyb20gYSByZXZlcnNlLQpwcm94aWVkIHNlcnZlcjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eVBhc3NSZXZlcnNlQ29va2llUGF0aCA8dmFyPmludGVybmFsLXBhdGg8L3Zhcj4gPHZhcj5wdWJsaWMtcGF0aDwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgo8cD5Vc2FnZSBpcyBiYXNpY2FsbHkgc2ltaWxhciB0bwo8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlwYXNzcmV2ZXJzZSI+UHJveHlQYXNzUmV2ZXJzZTwvYT48L2NvZGU+LCBidXQgaW5zdGVhZCBvZgpyZXdyaXRpbmcgaGVhZGVycyB0aGF0IGFyZSBhIFVSTCwgdGhpcyByZXdyaXRlcyB0aGUgPGNvZGU+cGF0aDwvY29kZT4Kc3RyaW5nIGluIDxjb2RlPlNldC1Db29raWU8L2NvZGU+IGhlYWRlcnMuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5UHJlc2VydmVIb3N0IiBpZD0iUHJveHlQcmVzZXJ2ZUhvc3QiPlByb3h5UHJlc2VydmVIb3N0PC9hPiA8YSBuYW1lPSJwcm94eXByZXNlcnZlaG9zdCIgaWQ9InByb3h5cHJlc2VydmVob3N0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Vc2UgaW5jb21pbmcgSG9zdCBIVFRQIHJlcXVlc3QgaGVhZGVyIGZvciBwcm94eQpyZXF1ZXN0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5UHJlc2VydmVIb3N0IE9ufE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eVByZXNlcnZlSG9zdCBPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5BdmFpbGFibGUgaW4gQXBhY2hlIDIuMC4zMSBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+V2hlbiBlbmFibGVkLCB0aGlzIG9wdGlvbiB3aWxsIHBhc3MgdGhlIEhvc3Q6IGxpbmUgZnJvbSB0aGUgaW5jb21pbmcKICAgIHJlcXVlc3QgdG8gdGhlIHByb3hpZWQgaG9zdCwgaW5zdGVhZCBvZiB0aGUgaG9zdG5hbWUgc3BlY2lmaWVkIGluIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+UHJveHlQYXNzPC9jb2RlPiBsaW5lLjwvcD4KCiAgICA8cD5UaGlzIG9wdGlvbiBzaG91bGQgbm9ybWFsbHkgYmUgdHVybmVkIDxjb2RlPk9mZjwvY29kZT4uIEl0IGlzIG1vc3RseSAKICAgIHVzZWZ1bCBpbiBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGxpa2UgcHJveGllZCBtYXNzIG5hbWUtYmFzZWQgdmlydHVhbAogICAgaG9zdGluZywgd2hlcmUgdGhlIG9yaWdpbmFsIEhvc3QgaGVhZGVyIG5lZWRzIHRvIGJlIGV2YWx1YXRlZCBieSB0aGUKICAgIGJhY2tlbmQgc2VydmVyLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVJlY2VpdmVCdWZmZXJTaXplIiBpZD0iUHJveHlSZWNlaXZlQnVmZmVyU2l6ZSI+UHJveHlSZWNlaXZlQnVmZmVyU2l6ZTwvYT4gPGEgbmFtZT0icHJveHlyZWNlaXZlYnVmZmVyc2l6ZSIgaWQ9InByb3h5cmVjZWl2ZWJ1ZmZlcnNpemUiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPk5ldHdvcmsgYnVmZmVyIHNpemUgZm9yIHByb3hpZWQgSFRUUCBhbmQgRlRQCmNvbm5lY3Rpb25zPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5UmVjZWl2ZUJ1ZmZlclNpemUgPHZhcj5ieXRlczwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eVJlY2VpdmVCdWZmZXJTaXplIDA8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+UHJveHlSZWNlaXZlQnVmZmVyU2l6ZTwvY29kZT4gZGlyZWN0aXZlIHNwZWNpZmllcyBhbgogICAgZXhwbGljaXQgKFRDUC9JUCkgbmV0d29yayBidWZmZXIgc2l6ZSBmb3IgcHJveGllZCBIVFRQIGFuZCBGVFAgY29ubmVjdGlvbnMsCiAgICBmb3IgaW5jcmVhc2VkIHRocm91Z2hwdXQuIEl0IGhhcyB0byBiZSBncmVhdGVyIHRoYW4gPGNvZGU+NTEyPC9jb2RlPiBvciBzZXQKICAgIHRvIDxjb2RlPjA8L2NvZGU+IHRvIGluZGljYXRlIHRoYXQgdGhlIHN5c3RlbSdzIGRlZmF1bHQgYnVmZmVyIHNpemUgc2hvdWxkCiAgICBiZSB1c2VkLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHA+PGNvZGU+CiAgICAgIFByb3h5UmVjZWl2ZUJ1ZmZlclNpemUgMjA0OAogICAgPC9jb2RlPjwvcD48L2Rpdj4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVJlbW90ZSIgaWQ9IlByb3h5UmVtb3RlIj5Qcm94eVJlbW90ZTwvYT4gPGEgbmFtZT0icHJveHlyZW1vdGUiIGlkPSJwcm94eXJlbW90ZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+UmVtb3RlIHByb3h5IHVzZWQgdG8gaGFuZGxlIGNlcnRhaW4gcmVxdWVzdHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlSZW1vdGUgPHZhcj5tYXRjaDwvdmFyPiA8dmFyPnJlbW90ZS1zZXJ2ZXI8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRlZmluZXMgcmVtb3RlIHByb3hpZXMgdG8gdGhpcyBwcm94eS4gPHZhcj5tYXRjaDwvdmFyPiBpcyBlaXRoZXIgdGhlCiAgICBuYW1lIG9mIGEgVVJMLXNjaGVtZSB0aGF0IHRoZSByZW1vdGUgc2VydmVyIHN1cHBvcnRzLCBvciBhIHBhcnRpYWwgVVJMCiAgICBmb3Igd2hpY2ggdGhlIHJlbW90ZSBzZXJ2ZXIgc2hvdWxkIGJlIHVzZWQsIG9yIDxjb2RlPio8L2NvZGU+IHRvIGluZGljYXRlCiAgICB0aGUgc2VydmVyIHNob3VsZCBiZSBjb250YWN0ZWQgZm9yIGFsbCByZXF1ZXN0cy4gPHZhcj5yZW1vdGUtc2VydmVyPC92YXI+IGlzCiAgICBhIHBhcnRpYWwgVVJMIGZvciB0aGUgcmVtb3RlIHNlcnZlci4gU3ludGF4OjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgPGRmbj5yZW1vdGUtc2VydmVyPC9kZm4+ID0KICAgICAgICAgIDx2YXI+c2NoZW1lPC92YXI+Oi8vPHZhcj5ob3N0bmFtZTwvdmFyPls6PHZhcj5wb3J0PC92YXI+XQogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD48dmFyPnNjaGVtZTwvdmFyPiBpcyBlZmZlY3RpdmVseSB0aGUgcHJvdG9jb2wgdGhhdCBzaG91bGQgYmUgdXNlZCB0bwogICAgY29tbXVuaWNhdGUgd2l0aCB0aGUgcmVtb3RlIHNlcnZlcjsgb25seSA8Y29kZT5odHRwPC9jb2RlPiBpcyBzdXBwb3J0ZWQgYnkKICAgIHRoaXMgbW9kdWxlLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHA+PGNvZGU+CiAgICAgIFByb3h5UmVtb3RlIGh0dHA6Ly9nb29kZ3V5cy5jb20vIGh0dHA6Ly9taXJyb3JndXlzLmNvbTo4MDAwPGJyIC8+CiAgICAgIFByb3h5UmVtb3RlICogaHR0cDovL2NsZXZlcnNpdGUuY29tPGJyIC8+CiAgICAgIFByb3h5UmVtb3RlIGZ0cCBodHRwOi8vZnRwcHJveHkubXlkb21haW4uY29tOjgwODAKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+SW4gdGhlIGxhc3QgZXhhbXBsZSwgdGhlIHByb3h5IHdpbGwgZm9yd2FyZCBGVFAgcmVxdWVzdHMsIGVuY2Fwc3VsYXRlZAogICAgYXMgeWV0IGFub3RoZXIgSFRUUCBwcm94eSByZXF1ZXN0LCB0byBhbm90aGVyIHByb3h5IHdoaWNoIGNhbiBoYW5kbGUKICAgIHRoZW0uPC9wPgoKICAgIDxwPlRoaXMgb3B0aW9uIGFsc28gc3VwcG9ydHMgcmV2ZXJzZSBwcm94eSBjb25maWd1cmF0aW9uIC0gYSBiYWNrZW5kCiAgICB3ZWJzZXJ2ZXIgY2FuIGJlIGVtYmVkZGVkIHdpdGhpbiBhIHZpcnR1YWxob3N0IFVSTCBzcGFjZSBldmVuIGlmIHRoYXQKICAgIHNlcnZlciBpcyBoaWRkZW4gYnkgYW5vdGhlciBmb3J3YXJkIHByb3h5LjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVJlbW90ZU1hdGNoIiBpZD0iUHJveHlSZW1vdGVNYXRjaCI+UHJveHlSZW1vdGVNYXRjaDwvYT4gPGEgbmFtZT0icHJveHlyZW1vdGVtYXRjaCIgaWQ9InByb3h5cmVtb3RlbWF0Y2giPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlJlbW90ZSBwcm94eSB1c2VkIHRvIGhhbmRsZSByZXF1ZXN0cyBtYXRjaGVkIGJ5IHJlZ3VsYXIKZXhwcmVzc2lvbnM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlSZW1vdGVNYXRjaCA8dmFyPnJlZ2V4PC92YXI+IDx2YXI+cmVtb3RlLXNlcnZlcjwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm94eVJlbW90ZU1hdGNoPC9jb2RlPiBpcyBpZGVudGljYWwgdG8gdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlyZW1vdGUiPlByb3h5UmVtb3RlPC9hPjwvY29kZT4gZGlyZWN0aXZlLCBleGNlcHQgdGhlCiAgICBmaXJzdCBhcmd1bWVudCBpcyBhIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwjcmVnZXgiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4KICAgIG1hdGNoIGFnYWluc3QgdGhlIHJlcXVlc3RlZCBVUkwuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5UmVxdWVzdHMiIGlkPSJQcm94eVJlcXVlc3RzIj5Qcm94eVJlcXVlc3RzPC9hPiA8YSBuYW1lPSJwcm94eXJlcXVlc3RzIiBpZD0icHJveHlyZXF1ZXN0cyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RW5hYmxlcyBmb3J3YXJkIChzdGFuZGFyZCkgcHJveHkgcmVxdWVzdHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlSZXF1ZXN0cyBPbnxPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlSZXF1ZXN0cyBPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGFsbG93cyBvciBwcmV2ZW50cyBBcGFjaGUgZnJvbSBmdW5jdGlvbmluZyBhcyBhIGZvcndhcmQgcHJveHkKICAgIHNlcnZlci4gKFNldHRpbmcgUHJveHlSZXF1ZXN0cyB0byA8Y29kZT5PZmY8L2NvZGU+IGRvZXMgbm90IGRpc2FibGUgdXNlIG9mCiAgICB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cGFzcyI+UHJveHlQYXNzPC9hPjwvY29kZT4gZGlyZWN0aXZlLik8L3A+CgogICAgPHA+SW4gYSB0eXBpY2FsIHJldmVyc2UgcHJveHkgY29uZmlndXJhdGlvbiwgdGhpcyBvcHRpb24gc2hvdWxkIGJlIHNldCB0bwogICAgPGNvZGU+T2ZmPC9jb2RlPi48L3A+CgogICAgPHA+SW4gb3JkZXIgdG8gZ2V0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHByb3h5aW5nIEhUVFAgb3IgRlRQIHNpdGVzLCB5b3UKICAgIG5lZWQgYWxzbyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2h0dHAuaHRtbCI+bW9kX3Byb3h5X2h0dHA8L2E+PC9jb2RlPiBvciA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2Z0cC5odG1sIj5tb2RfcHJveHlfZnRwPC9hPjwvY29kZT4KICAgIChvciBib3RoKSBwcmVzZW50IGluIHRoZSBzZXJ2ZXIuPC9wPgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPjxoMz5XYXJuaW5nPC9oMz4KICAgICAgPHA+RG8gbm90IGVuYWJsZSBwcm94eWluZyB3aXRoIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXJlcXVlc3RzIj5Qcm94eVJlcXVlc3RzPC9hPjwvY29kZT4gdW50aWwgeW91IGhhdmUgPGEgaHJlZj0iI2FjY2VzcyI+c2VjdXJlZCB5b3VyIHNlcnZlcjwvYT4uICBPcGVuIHByb3h5IHNlcnZlcnMgYXJlIGRhbmdlcm91cwogICAgICBib3RoIHRvIHlvdXIgbmV0d29yayBhbmQgdG8gdGhlIEludGVybmV0IGF0IGxhcmdlLjwvcD4KICAgIDwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5VGltZW91dCIgaWQ9IlByb3h5VGltZW91dCI+UHJveHlUaW1lb3V0PC9hPiA8YSBuYW1lPSJwcm94eXRpbWVvdXQiIGlkPSJwcm94eXRpbWVvdXQiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPk5ldHdvcmsgdGltZW91dCBmb3IgcHJveGllZCByZXF1ZXN0czwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eVRpbWVvdXQgPHZhcj5zZWNvbmRzPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5VGltZW91dCAzMDA8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5BdmFpbGFibGUgaW4gQXBhY2hlIDIuMC4zMSBhbmQgbGF0ZXI8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBhbGxvd3MgYSB1c2VyIHRvIHNwZWNpZml5IGEgdGltZW91dCBvbiBwcm94eSByZXF1ZXN0cy4KICAgIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGhhdmUgYSBzbG93L2J1Z2d5IGFwcHNlcnZlciB3aGljaCBoYW5ncywgYW5kIHlvdQogICAgd291bGQgcmF0aGVyIGp1c3QgcmV0dXJuIGEgdGltZW91dCBhbmQgZmFpbCBncmFjZWZ1bGx5IGluc3RlYWQgb2Ygd2FpdGluZwogICAgaG93ZXZlciBsb25nIGl0IHRha2VzIHRoZSBzZXJ2ZXIgdG8gcmV0dXJuLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVZpYSIgaWQ9IlByb3h5VmlhIj5Qcm94eVZpYTwvYT4gPGEgbmFtZT0icHJveHl2aWEiIGlkPSJwcm94eXZpYSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+SW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gdGhlIDxjb2RlPlZpYTwvY29kZT4gSFRUUCByZXNwb25zZQpoZWFkZXIgZm9yIHByb3hpZWQgcmVxdWVzdHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlWaWEgT258T2ZmfEZ1bGx8QmxvY2s8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlWaWEgT2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgY29udHJvbHMgdGhlIHVzZSBvZiB0aGUgPGNvZGU+VmlhOjwvY29kZT4gSFRUUAogICAgaGVhZGVyIGJ5IHRoZSBwcm94eS4gSXRzIGludGVuZGVkIHVzZSBpcyB0byBjb250cm9sIHRoZSBmbG93IG9mCiAgICBwcm94eSByZXF1ZXN0cyBhbG9uZyBhIGNoYWluIG9mIHByb3h5IHNlcnZlcnMuICBTZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjYxNi50eHQiPlJGQyAyNjE2PC9hPiAoSFRUUC8xLjEpLCBzZWN0aW9uCiAgICAxNC40NSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgPGNvZGU+VmlhOjwvY29kZT4gaGVhZGVyIGxpbmVzLjwvcD4KCiAgICA8dWw+CiAgICA8bGk+SWYgc2V0IHRvIDxjb2RlPk9mZjwvY29kZT4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCBubyBzcGVjaWFsIHByb2Nlc3NpbmcKICAgIGlzIHBlcmZvcm1lZC4gSWYgYSByZXF1ZXN0IG9yIHJlcGx5IGNvbnRhaW5zIGEgPGNvZGU+VmlhOjwvY29kZT4gaGVhZGVyLAogICAgaXQgaXMgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLjwvbGk+CgogICAgPGxpPklmIHNldCB0byA8Y29kZT5PbjwvY29kZT4sIGVhY2ggcmVxdWVzdCBhbmQgcmVwbHkgd2lsbCBnZXQgYQogICAgPGNvZGU+VmlhOjwvY29kZT4gaGVhZGVyIGxpbmUgYWRkZWQgZm9yIHRoZSBjdXJyZW50IGhvc3QuPC9saT4KCiAgICA8bGk+SWYgc2V0IHRvIDxjb2RlPkZ1bGw8L2NvZGU+LCBlYWNoIGdlbmVyYXRlZCA8Y29kZT5WaWE6PC9jb2RlPiBoZWFkZXIKICAgIGxpbmUgd2lsbCBhZGRpdGlvbmFsbHkgaGF2ZSB0aGUgQXBhY2hlIHNlcnZlciB2ZXJzaW9uIHNob3duIGFzIGEKICAgIDxjb2RlPlZpYTo8L2NvZGU+IGNvbW1lbnQgZmllbGQuPC9saT4KCiAgICA8bGk+SWYgc2V0IHRvIDxjb2RlPkJsb2NrPC9jb2RlPiwgZXZlcnkgcHJveHkgcmVxdWVzdCB3aWxsIGhhdmUgYWxsIGl0cwogICAgPGNvZGU+VmlhOjwvY29kZT4gaGVhZGVyIGxpbmVzIHJlbW92ZWQuIE5vIG5ldyA8Y29kZT5WaWE6PC9jb2RlPiBoZWFkZXIgd2lsbAogICAgYmUgZ2VuZXJhdGVkLjwvbGk+CiAgICA8L3VsPgoKPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfcHJveHkuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2phL21vZC9tb2RfcHJveHkuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAxOTk1LTIwMDUgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG9yIGl0cyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUuPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iLi4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+CjwvYm9keT48L2h0bWw+