PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPm1vZF9uZWdvdGlhdGlvbiAtIEFwYWNoZSBIVFRQIFNlcnZlcjwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+CjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSIuLi9mYXEvIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi4zPC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLmdpZiIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy1wcm9qZWN0LyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLi8iPlZlcnNpb24gMi4zPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5Nb2R1bGVzPC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPgo8ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPkFwYWNoZSBNb2R1bGUgbW9kX25lZ290aWF0aW9uPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+PC9wPgo8L2Rpdj4KPHRhYmxlIGNsYXNzPSJtb2R1bGUiPjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlByb3ZpZGVzIGZvciA8YSBocmVmPSIuLi9jb250ZW50LW5lZ290aWF0aW9uLmh0bWwiPmNvbnRlbnQgbmVnb3RpYXRpb248L2E+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5Nb2R1bGWgSWRlbnRpZmllcjo8L2E+PC90aD48dGQ+bmVnb3RpYXRpb25fbW9kdWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU291cmNlRmlsZSI+U291cmNloEZpbGU6PC9hPjwvdGg+PHRkPm1vZF9uZWdvdGlhdGlvbi5jPC90ZD48L3RyPjwvdGFibGU+CjxoMz5TdW1tYXJ5PC9oMz4KCiAgICA8cD5Db250ZW50IG5lZ290aWF0aW9uLCBvciBtb3JlIGFjY3VyYXRlbHkgY29udGVudCBzZWxlY3Rpb24sIGlzCiAgICB0aGUgc2VsZWN0aW9uIG9mIHRoZSBkb2N1bWVudCB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgY2xpZW50cwogICAgY2FwYWJpbGl0aWVzLCBmcm9tIG9uZSBvZiBzZXZlcmFsIGF2YWlsYWJsZSBkb2N1bWVudHMuIFRoZXJlCiAgICBhcmUgdHdvIGltcGxlbWVudGF0aW9ucyBvZiB0aGlzLjwvcD4KCiAgICA8dWw+CiAgICAgIDxsaT5BIHR5cGUgbWFwIChhIGZpbGUgd2l0aCB0aGUgaGFuZGxlcgogICAgICA8Y29kZT50eXBlLW1hcDwvY29kZT4pIHdoaWNoIGV4cGxpY2l0bHkgbGlzdHMgdGhlIGZpbGVzCiAgICAgIGNvbnRhaW5pbmcgdGhlIHZhcmlhbnRzLjwvbGk+CgogICAgICA8bGk+QSBNdWx0aVZpZXdzIHNlYXJjaCAoZW5hYmxlZCBieSB0aGUgPGNvZGU+TXVsdGlWaWV3czwvY29kZT4KICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNvcHRpb25zIj5PcHRpb25zPC9hPjwvY29kZT4pLCB3aGVyZSB0aGUgc2VydmVyIGRvZXMKICAgICAgYW4gaW1wbGljaXQgZmlsZW5hbWUgcGF0dGVybiBtYXRjaCwgYW5kIGNob29zZSBmcm9tIGFtb25nc3QgdGhlCiAgICAgIHJlc3VsdHMuPC9saT4KICAgIDwvdWw+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxoMyBjbGFzcz0iZGlyZWN0aXZlcyI+RGlyZWN0aXZlczwvaDM+Cjx1bCBpZD0idG9jIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY2FjaGVuZWdvdGlhdGVkZG9jcyI+Q2FjaGVOZWdvdGlhdGVkRG9jczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNmb3JjZWxhbmd1YWdlcHJpb3JpdHkiPkZvcmNlTGFuZ3VhZ2VQcmlvcml0eTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsYW5ndWFnZXByaW9yaXR5Ij5MYW5ndWFnZVByaW9yaXR5PC9hPjwvbGk+CjwvdWw+CjxoMz5Ub3BpY3M8L2gzPgo8dWwgaWQ9InRvcGljcyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3R5cGVtYXBzIj5UeXBlIG1hcHM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbXVsdGl2aWV3cyI+TXVsdGlWaWV3czwvYT48L2xpPgo8L3VsPjxoMz5TZWUgYWxzbzwvaDM+Cjx1bCBjbGFzcz0ic2VlYWxzbyI+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI29wdGlvbnMiPk9wdGlvbnM8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX21pbWUuaHRtbCI+bW9kX21pbWU8L2E+PC9jb2RlPjwvbGk+CjxsaT48YSBocmVmPSIuLi9jb250ZW50LW5lZ290aWF0aW9uLmh0bWwiPkNvbnRlbnQKTmVnb3RpYXRpb248L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL2Vudi5odG1sIj5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KPC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0idHlwZW1hcHMiIGlkPSJ0eXBlbWFwcyI+VHlwZSBtYXBzPC9hPjwvaDI+CiAgICA8cD5BIHR5cGUgbWFwIGhhcyBhIGZvcm1hdCBzaW1pbGFyIHRvIFJGQzgyMiBtYWlsIGhlYWRlcnMuIEl0CiAgICBjb250YWlucyBkb2N1bWVudCBkZXNjcmlwdGlvbnMgc2VwYXJhdGVkIGJ5IGJsYW5rIGxpbmVzLCB3aXRoCiAgICBsaW5lcyBiZWdpbm5pbmcgd2l0aCBhIGhhc2ggY2hhcmFjdGVyICgnIycpIHRyZWF0ZWQgYXMKICAgIGNvbW1lbnRzLiBBIGRvY3VtZW50IGRlc2NyaXB0aW9uIGNvbnNpc3RzIG9mIHNldmVyYWwgaGVhZGVyCiAgICByZWNvcmRzOyByZWNvcmRzIG1heSBiZSBjb250aW51ZWQgb24gbXVsdGlwbGUgbGluZXMgaWYgdGhlCiAgICBjb250aW51YXRpb24gbGluZXMgc3RhcnQgd2l0aCBzcGFjZXMuIFRoZSBsZWFkaW5nIHNwYWNlIHdpbGwgYmUKICAgIGRlbGV0ZWQgYW5kIHRoZSBsaW5lcyBjb25jYXRlbmF0ZWQuIEEgaGVhZGVyIHJlY29yZCBjb25zaXN0cyBvZgogICAgYSBrZXl3b3JkIG5hbWUsIHdoaWNoIGFsd2F5cyBlbmRzIGluIGEgY29sb24sIGZvbGxvd2VkIGJ5IGEKICAgIHZhbHVlLiBXaGl0ZXNwYWNlIGlzIGFsbG93ZWQgYmV0d2VlbiB0aGUgaGVhZGVyIG5hbWUgYW5kIHZhbHVlLAogICAgYW5kIGJldHdlZW4gdGhlIHRva2VucyBvZiB2YWx1ZS4gVGhlIGhlYWRlcnMgYWxsb3dlZCBhcmU6IDwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT5Db250ZW50LUVuY29kaW5nOjwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIGVuY29kaW5nIG9mIHRoZSBmaWxlLiBBcGFjaGUgb25seSByZWNvZ25pemVzCiAgICAgIGVuY29kaW5ncyB0aGF0IGFyZSBkZWZpbmVkIGJ5IGFuIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbWltZS5odG1sI2FkZGVuY29kaW5nIj5BZGRFbmNvZGluZzwvYT48L2NvZGU+IGRpcmVjdGl2ZS4KICAgICAgVGhpcyBub3JtYWxseSBpbmNsdWRlcyB0aGUgZW5jb2RpbmdzIDxjb2RlPngtY29tcHJlc3M8L2NvZGU+CiAgICAgIGZvciBjb21wcmVzcydkIGZpbGVzLCBhbmQgPGNvZGU+eC1nemlwPC9jb2RlPiBmb3IgZ3ppcCdkCiAgICAgIGZpbGVzLiBUaGUgPGNvZGU+eC08L2NvZGU+IHByZWZpeCBpcyBpZ25vcmVkIGZvciBlbmNvZGluZwogICAgICBjb21wYXJpc29ucy48L2RkPgoKICAgICAgPGR0Pjxjb2RlPkNvbnRlbnQtTGFuZ3VhZ2U6PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgbGFuZ3VhZ2Uocykgb2YgdGhlIHZhcmlhbnQsIGFzIGFuIEludGVybmV0IHN0YW5kYXJkCiAgICAgIGxhbmd1YWdlIHRhZyAoPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTc2Ni50eHQiPlJGQyAxNzY2PC9hPikuIEFuIGV4YW1wbGUgaXMgPGNvZGU+ZW48L2NvZGU+LAogICAgICBtZWFuaW5nIEVuZ2xpc2guIElmIHRoZSB2YXJpYW50IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUKICAgICAgbGFuZ3VhZ2UsIHRoZXkgYXJlIHNlcGFyYXRlZCBieSBhIGNvbW1hLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+Q29udGVudC1MZW5ndGg6PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgbGVuZ3RoIG9mIHRoZSBmaWxlLCBpbiBieXRlcy4gSWYgdGhpcyBoZWFkZXIgaXMgbm90CiAgICAgIHByZXNlbnQsIHRoZW4gdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIGZpbGUgaXMgdXNlZC48L2RkPgoKICAgICAgPGR0Pjxjb2RlPkNvbnRlbnQtVHlwZTo8L2NvZGU+PC9kdD4KCiAgICAgIDxkZD4KICAgICAgICBUaGUgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCNtaW1lLXR5cGUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPk1JTUUgbWVkaWEgdHlwZTwvYT4gb2YKICAgICAgICB0aGUgZG9jdW1lbnQsIHdpdGggb3B0aW9uYWwgcGFyYW1ldGVycy4gUGFyYW1ldGVycyBhcmUKICAgICAgICBzZXBhcmF0ZWQgZnJvbSB0aGUgbWVkaWEgdHlwZSBhbmQgZnJvbSBvbmUgYW5vdGhlciBieSBhCiAgICAgICAgc2VtaS1jb2xvbiwgd2l0aCBhIHN5bnRheCBvZiA8Y29kZT5uYW1lPXZhbHVlPC9jb2RlPi4gQ29tbW9uCiAgICAgICAgcGFyYW1ldGVycyBpbmNsdWRlOgoKICAgICAgICA8ZGw+CiAgICAgICAgICA8ZHQ+PGNvZGU+bGV2ZWw8L2NvZGU+PC9kdD4KICAgICAgICAgIDxkZD5hbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIHZlcnNpb24gb2YgdGhlIG1lZGlhIHR5cGUuCiAgICAgICAgICBGb3IgPGNvZGU+dGV4dC9odG1sPC9jb2RlPiB0aGlzIGRlZmF1bHRzIHRvIDIsIG90aGVyd2lzZQogICAgICAgICAgMC48L2RkPgoKICAgICAgICAgIDxkdD48Y29kZT5xczwvY29kZT48L2R0PgogICAgICAgICAgPGRkPmEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHdpdGggYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgMC4wCiAgICAgICAgICB0byAxLjAsIGluZGljYXRpbmcgdGhlIHJlbGF0aXZlICdxdWFsaXR5JyBvZiB0aGlzIHZhcmlhbnQKICAgICAgICAgIGNvbXBhcmVkIHRvIHRoZSBvdGhlciBhdmFpbGFibGUgdmFyaWFudHMsIGluZGVwZW5kZW50IG9mCiAgICAgICAgICB0aGUgY2xpZW50J3MgY2FwYWJpbGl0aWVzLiBGb3IgZXhhbXBsZSwgYSBqcGVnIGZpbGUgaXMKICAgICAgICAgIHVzdWFsbHkgb2YgaGlnaGVyIHNvdXJjZSBxdWFsaXR5IHRoYW4gYW4gYXNjaWkgZmlsZSBpZiBpdAogICAgICAgICAgaXMgYXR0ZW1wdGluZyB0byByZXByZXNlbnQgYSBwaG90b2dyYXBoLiBIb3dldmVyLCBpZiB0aGUKICAgICAgICAgIHJlc291cmNlIGJlaW5nIHJlcHJlc2VudGVkIGlzIGFzY2lpIGFydCwgdGhlbiBhbiBhc2NpaQogICAgICAgICAgZmlsZSB3b3VsZCBoYXZlIGEgaGlnaGVyIHNvdXJjZSBxdWFsaXR5IHRoYW4gYSBqcGVnIGZpbGUuCiAgICAgICAgICBBbGwgPGNvZGU+cXM8L2NvZGU+IHZhbHVlcyBhcmUgdGhlcmVmb3JlIHNwZWNpZmljIHRvIGEgZ2l2ZW4KICAgICAgICAgIHJlc291cmNlLjwvZGQ+CiAgICAgICAgPC9kbD4KCiAgICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4YW1wbGU8L2gzPjxwPjxjb2RlPgogICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnOyBxcz0wLjgKICAgICAgICA8L2NvZGU+PC9wPjwvZGl2PgogICAgICA8L2RkPgoKICAgICAgPGR0Pjxjb2RlPlVSSTo8L2NvZGU+PC9kdD4KICAgICAgPGRkPnVyaSBvZiB0aGUgZmlsZSBjb250YWluaW5nIHRoZSB2YXJpYW50IChvZiB0aGUgZ2l2ZW4KICAgICAgbWVkaWEgdHlwZSwgZW5jb2RlZCB3aXRoIHRoZSBnaXZlbiBjb250ZW50IGVuY29kaW5nKS4gVGhlc2UKICAgICAgYXJlIGludGVycHJldGVkIGFzIFVSTHMgcmVsYXRpdmUgdG8gdGhlIG1hcCBmaWxlOyB0aGV5IG11c3QKICAgICAgYmUgb24gdGhlIHNhbWUgc2VydmVyICghKSwgYW5kIHRoZXkgbXVzdCByZWZlciB0byBmaWxlcyB0bwogICAgICB3aGljaCB0aGUgY2xpZW50IHdvdWxkIGJlIGdyYW50ZWQgYWNjZXNzIGlmIHRoZXkgd2VyZSB0byBiZQogICAgICByZXF1ZXN0ZWQgZGlyZWN0bHkuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5Cb2R5OjwvY29kZT48L2R0PgogICAgICA8ZGQ+TmV3IGluIEFwYWNoZSAyLjAsIHRoZSBhY3R1YWwgY29udGVudCBvZiB0aGUgcmVzb3VyY2UgbWF5CiAgICAgIGJlIGluY2x1ZGVkIGluIHRoZSB0eXBlLW1hcCBmaWxlIHVzaW5nIHRoZSBCb2R5IGhlYWRlci4gIFRoaXMKICAgICAgaGVhZGVyIG11c3QgY29udGFpbiBhIHN0cmluZyB0aGF0IGRlc2lnbmF0ZXMgYSBkZWxpbWl0ZXIgZm9yCiAgICAgIHRoZSBib2R5IGNvbnRlbnQuIFRoZW4gYWxsIGZvbGxvd2luZyBsaW5lcyBpbiB0aGUgdHlwZSBtYXAKICAgICAgZmlsZSB3aWxsIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcmVzb3VyY2UgYm9keSB1bnRpbCB0aGUKICAgICAgZGVsaW1pdGVyIHN0cmluZyBpcyBmb3VuZC4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlOjwvaDM+PHA+PGNvZGU+CiAgICAgICAgQm9keTotLS0teHl6LS0tLTxiciAvPgogICAgICAgICZsdDtodG1sJmd0OzxiciAvPgogICAgICAgICZsdDtib2R5Jmd0OzxiciAvPgogICAgICAgICZsdDtwJmd0O0NvbnRlbnQgb2YgdGhlIHBhZ2UuJmx0Oy9wJmd0OzxiciAvPgogICAgICAgICZsdDsvYm9keSZndDs8YnIgLz4KICAgICAgICAmbHQ7L2h0bWwmZ3Q7PGJyIC8+CiAgICAgICAgLS0tLXh5ei0tLS0KICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgICAgPC9kZD4KICAgIDwvZGw+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im11bHRpdmlld3MiIGlkPSJtdWx0aXZpZXdzIj5NdWx0aVZpZXdzPC9hPjwvaDI+CiAgICA8cD5BIE11bHRpVmlld3Mgc2VhcmNoIGlzIGVuYWJsZWQgYnkgdGhlIDxjb2RlPk11bHRpVmlld3M8L2NvZGU+CiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI29wdGlvbnMiPk9wdGlvbnM8L2E+PC9jb2RlPi4gSWYgdGhlIHNlcnZlciByZWNlaXZlcyBhCiAgICByZXF1ZXN0IGZvciA8Y29kZT4vc29tZS9kaXIvZm9vPC9jb2RlPiBhbmQKICAgIDxjb2RlPi9zb21lL2Rpci9mb288L2NvZGU+IGRvZXMgPGVtPm5vdDwvZW0+IGV4aXN0LCB0aGVuIHRoZQogICAgc2VydmVyIHJlYWRzIHRoZSBkaXJlY3RvcnkgbG9va2luZyBmb3IgYWxsIGZpbGVzIG5hbWVkCiAgICA8Y29kZT5mb28uKjwvY29kZT4sIGFuZCBlZmZlY3RpdmVseSBmYWtlcyB1cCBhIHR5cGUgbWFwIHdoaWNoCiAgICBuYW1lcyBhbGwgdGhvc2UgZmlsZXMsIGFzc2lnbmluZyB0aGVtIHRoZSBzYW1lIG1lZGlhIHR5cGVzIGFuZAogICAgY29udGVudC1lbmNvZGluZ3MgaXQgd291bGQgaGF2ZSBpZiB0aGUgY2xpZW50IGhhZCBhc2tlZCBmb3Igb25lCiAgICBvZiB0aGVtIGJ5IG5hbWUuIEl0IHRoZW4gY2hvb3NlcyB0aGUgYmVzdCBtYXRjaCB0byB0aGUgY2xpZW50J3MKICAgIHJlcXVpcmVtZW50cywgYW5kIHJldHVybnMgdGhhdCBkb2N1bWVudC48L3A+CgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbWltZS5odG1sI211bHRpdmlld3NtYXRjaCI+TXVsdGlWaWV3c01hdGNoPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSBjb25maWd1cmVzIHdoZXRoZXIgQXBhY2hlIHdpbGwgY29uc2lkZXIgZmlsZXMKICAgIHRoYXQgZG8gbm90IGhhdmUgY29udGVudCBuZWdvdGlhdGlvbiBtZXRhLWluZm9ybWF0aW9uIGFzc2lnbmVkCiAgICB0byB0aGVtIHdoZW4gY2hvb3NpbmcgZmlsZXMuPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQ2FjaGVOZWdvdGlhdGVkRG9jcyIgaWQ9IkNhY2hlTmVnb3RpYXRlZERvY3MiPkNhY2hlTmVnb3RpYXRlZERvY3M8L2E+IDxhIG5hbWU9ImNhY2hlbmVnb3RpYXRlZGRvY3MiIGlkPSJjYWNoZW5lZ290aWF0ZWRkb2NzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5BbGxvd3MgY29udGVudC1uZWdvdGlhdGVkIGRvY3VtZW50cyB0byBiZSAKY2FjaGVkIGJ5IHByb3h5IHNlcnZlcnM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Q2FjaGVOZWdvdGlhdGVkRG9jcyBPbnxPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+Q2FjaGVOZWdvdGlhdGVkRG9jcyBPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX25lZ290aWF0aW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+VGhlIHN5bnRheCBjaGFuZ2VkIGluIHZlcnNpb24gMi4wLjwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPklmIHNldCwgdGhpcyBkaXJlY3RpdmUgYWxsb3dzIGNvbnRlbnQtbmVnb3RpYXRlZCBkb2N1bWVudHMKICAgIHRvIGJlIGNhY2hlZCBieSBwcm94eSBzZXJ2ZXJzLiBUaGlzIGNvdWxkIG1lYW4gdGhhdCBjbGllbnRzCiAgICBiZWhpbmQgdGhvc2UgcHJveHlzIGNvdWxkIHJldHJpZXZlIHZlcnNpb25zIG9mIHRoZSBkb2N1bWVudHMKICAgIHRoYXQgYXJlIG5vdCB0aGUgYmVzdCBtYXRjaCBmb3IgdGhlaXIgYWJpbGl0aWVzLCBidXQgaXQgd2lsbAogICAgbWFrZSBjYWNoaW5nIG1vcmUgZWZmaWNpZW50LjwvcD4KCiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBvbmx5IGFwcGxpZXMgdG8gcmVxdWVzdHMgd2hpY2ggY29tZSBmcm9tCiAgICBIVFRQLzEuMCBicm93c2Vycy4gSFRUUC8xLjEgcHJvdmlkZXMgbXVjaCBiZXR0ZXIgY29udHJvbCBvdmVyCiAgICB0aGUgY2FjaGluZyBvZiBuZWdvdGlhdGVkIGRvY3VtZW50cywgYW5kIHRoaXMgZGlyZWN0aXZlIGhhcyBubwogICAgZWZmZWN0IGluIHJlc3BvbnNlcyB0byBIVFRQLzEuMSByZXF1ZXN0cy48L3A+CgogICAgPHA+UHJpb3IgdG8gdmVyc2lvbiAyLjAsCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DYWNoZU5lZ290aWF0ZWREb2NzPC9jb2RlPiBkaWQgbm90IHRha2UgYW4KICAgIGFyZ3VtZW50OyBpdCB3YXMgdHVybmVkIG9uIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUgZGlyZWN0aXZlIGJ5CiAgICBpdHNlbGYuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkZvcmNlTGFuZ3VhZ2VQcmlvcml0eSIgaWQ9IkZvcmNlTGFuZ3VhZ2VQcmlvcml0eSI+Rm9yY2VMYW5ndWFnZVByaW9yaXR5PC9hPiA8YSBuYW1lPSJmb3JjZWxhbmd1YWdlcHJpb3JpdHkiIGlkPSJmb3JjZWxhbmd1YWdlcHJpb3JpdHkiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkFjdGlvbiB0byB0YWtlIGlmIGEgc2luZ2xlIGFjY2VwdGFibGUgZG9jdW1lbnQgaXMgbm90IApmb3VuZDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Gb3JjZUxhbmd1YWdlUHJpb3JpdHkgTm9uZXxQcmVmZXJ8RmFsbGJhY2sgW1ByZWZlcnxGYWxsYmFja108L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+Rm9yY2VMYW5ndWFnZVByaW9yaXR5IFByZWZlcjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5GaWxlSW5mbzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9uZWdvdGlhdGlvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiB2ZXJzaW9uIDIuMC4zMCBhbmQgbGF0ZXI8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Rm9yY2VMYW5ndWFnZVByaW9yaXR5PC9jb2RlPiBkaXJlY3RpdmUgdXNlcwogICAgdGhlIGdpdmVuIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsYW5ndWFnZXByaW9yaXR5Ij5MYW5ndWFnZVByaW9yaXR5PC9hPjwvY29kZT4gdG8gc2F0aXNmeQogICAgbmVnb3RhdGlvbiB3aGVyZSB0aGUgc2VydmVyIGNvdWxkIG90aGVyd2lzZSBub3QgcmV0dXJuIGEgc2luZ2xlCiAgICBtYXRjaGluZyBkb2N1bWVudC48L3A+CgogICAgPHA+PGNvZGU+Rm9yY2VMYW5ndWFnZVByaW9yaXR5IFByZWZlcjwvY29kZT4gdXNlcwogICAgPGNvZGU+TGFuZ3VhZ2VQcmlvcml0eTwvY29kZT4gdG8gc2VydmUgYSBvbmUgdmFsaWQgcmVzdWx0LCByYXRoZXIKICAgIHRoYW4gcmV0dXJuaW5nIGFuIEhUVFAgcmVzdWx0IDMwMCAoTVVMVElQTEUgQ0hPSUNFUykgd2hlbiB0aGVyZQogICAgYXJlIHNldmVyYWwgZXF1YWxseSB2YWxpZCBjaG9pY2VzLiAgSWYgdGhlIGRpcmVjdGl2ZXMgYmVsb3cgd2VyZQogICAgZ2l2ZW4sIGFuZCB0aGUgdXNlcidzIDxjb2RlPkFjY2VwdC1MYW5ndWFnZTwvY29kZT4gaGVhZGVyIGFzc2lnbmVkCiAgICA8Y29kZT5lbjwvY29kZT4gYW5kIDxjb2RlPmRlPC9jb2RlPiBlYWNoIGFzIHF1YWxpdHkgPGNvZGU+LjUwMDwvY29kZT4KICAgIChlcXVhbGx5IGFjY2VwdGFibGUpIHRoZW4gdGhlIGZpcnN0IG1hdGNoaW5nIHZhcmlhbnQsIDxjb2RlPmVuPC9jb2RlPiwKICAgIHdpbGwgYmUgc2VydmVkLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgTGFuZ3VhZ2VQcmlvcml0eSBlbiBmciBkZTxiciAvPgogICAgICBGb3JjZUxhbmd1YWdlUHJpb3JpdHkgUHJlZmVyCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPjxjb2RlPkZvcmNlTGFuZ3VhZ2VQcmlvcml0eSBGYWxsYmFjazwvY29kZT4gdXNlcwogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xhbmd1YWdlcHJpb3JpdHkiPkxhbmd1YWdlUHJpb3JpdHk8L2E+PC9jb2RlPiB0bwogICAgc2VydmUgYSB2YWxpZCByZXN1bHQsIHJhdGhlciB0aGFuIHJldHVybmluZyBhbiBIVFRQIHJlc3VsdCA0MDYKICAgIChOT1QgQUNDRVBUQUJMRSkuIElmIHRoZSBkaXJlY3RpdmVzIGJlbG93IHdlcmUgZ2l2ZW4sIGFuZCB0aGUgdXNlcidzCiAgICA8Y29kZT5BY2NlcHQtTGFuZ3VhZ2U8L2NvZGU+IG9ubHkgcGVybWl0dGVkIGFuIDxjb2RlPmVzPC9jb2RlPgogICAgbGFuZ3VhZ2UgcmVzcG9uc2UsIGJ1dCBzdWNoIGEgdmFyaWFudCBpc24ndCBmb3VuZCwgdGhlbiB0aGUgZmlyc3QKICAgIHZhcmlhbnQgZnJvbSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xhbmd1YWdlcHJpb3JpdHkiPkxhbmd1YWdlUHJpb3JpdHk8L2E+PC9jb2RlPiBsaXN0IGJlbG93IHdpbGwgYmUgc2VydmVkLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgTGFuZ3VhZ2VQcmlvcml0eSBlbiBmciBkZTxiciAvPgogICAgICBGb3JjZUxhbmd1YWdlUHJpb3JpdHkgRmFsbGJhY2sKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+Qm90aCBvcHRpb25zLCA8Y29kZT5QcmVmZXI8L2NvZGU+IGFuZCA8Y29kZT5GYWxsYmFjazwvY29kZT4sIG1heSBiZQogICAgc3BlY2lmaWVkLCBzbyBlaXRoZXIgdGhlIGZpcnN0IG1hdGNoaW5nIHZhcmlhbnQgZnJvbSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbGFuZ3VhZ2Vwcmlvcml0eSI+TGFuZ3VhZ2VQcmlvcml0eTwvYT48L2NvZGU+IHdpbGwgYmUgc2VydmVkIGlmCiAgICBtb3JlIHRoYW4gb25lIHZhcmlhbnQgaXMgYWNjZXB0YWJsZSwgb3IgZmlyc3QgYXZhaWxhYmxlIGRvY3VtZW50IHdpbGwKICAgIGJlIHNlcnZlZCBpZiBub25lIG9mIHRoZSB2YXJpYW50cyBtYXRjaGVkIHRoZSBjbGllbnQncyBhY2NlcHRhYmxlIGxpc3QKICAgIG9mIGxhbmd1YWdlcy48L3A+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX21pbWUuaHRtbCNhZGRsYW5ndWFnZSI+QWRkTGFuZ3VhZ2U8L2E+PC9jb2RlPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMYW5ndWFnZVByaW9yaXR5IiBpZD0iTGFuZ3VhZ2VQcmlvcml0eSI+TGFuZ3VhZ2VQcmlvcml0eTwvYT4gPGEgbmFtZT0ibGFuZ3VhZ2Vwcmlvcml0eSIgaWQ9Imxhbmd1YWdlcHJpb3JpdHkiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlRoZSBwcmVjZW5kZW5jZSBvZiBsYW5ndWFnZSB2YXJpYW50cyBmb3IgY2FzZXMgd2hlcmUKdGhlIGNsaWVudCBkb2VzIG5vdCBleHByZXNzIGEgcHJlZmVyZW5jZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MYW5ndWFnZVByaW9yaXR5IDx2YXI+TUlNRS1sYW5nPC92YXI+IFs8dmFyPk1JTUUtbGFuZzwvdmFyPl0KLi4uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkZpbGVJbmZvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX25lZ290aWF0aW9uPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkxhbmd1YWdlUHJpb3JpdHk8L2NvZGU+IHNldHMgdGhlIHByZWNlZGVuY2UKICAgIG9mIGxhbmd1YWdlIHZhcmlhbnRzIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgY2xpZW50IGRvZXMgbm90CiAgICBleHByZXNzIGEgcHJlZmVyZW5jZSwgd2hlbiBoYW5kbGluZyBhIE11bHRpVmlld3MgcmVxdWVzdC4gVGhlIGxpc3QKICAgIG9mIDx2YXI+TUlNRS1sYW5nPC92YXI+IGFyZSBpbiBvcmRlciBvZiBkZWNyZWFzaW5nIHByZWZlcmVuY2UuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlOjwvaDM+PHA+PGNvZGU+CiAgICAgIExhbmd1YWdlUHJpb3JpdHkgZW4gZnIgZGUKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+Rm9yIGEgcmVxdWVzdCBmb3IgPGNvZGU+Zm9vLmh0bWw8L2NvZGU+LCB3aGVyZQogICAgPGNvZGU+Zm9vLmh0bWwuZnI8L2NvZGU+IGFuZCA8Y29kZT5mb28uaHRtbC5kZTwvY29kZT4gYm90aAogICAgZXhpc3RlZCwgYnV0IHRoZSBicm93c2VyIGRpZCBub3QgZXhwcmVzcyBhIGxhbmd1YWdlIHByZWZlcmVuY2UsCiAgICB0aGVuIDxjb2RlPmZvby5odG1sLmZyPC9jb2RlPiB3b3VsZCBiZSByZXR1cm5lZC48L3A+CgogICAgPHA+Tm90ZSB0aGF0IHRoaXMgZGlyZWN0aXZlIG9ubHkgaGFzIGFuIGVmZmVjdCBpZiBhICdiZXN0JwogICAgbGFuZ3VhZ2UgY2Fubm90IGJlIGRldGVybWluZWQgYnkgYW55IG90aGVyIG1lYW5zIG9yIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZm9yY2VsYW5ndWFnZXByaW9yaXR5Ij5Gb3JjZUxhbmd1YWdlUHJpb3JpdHk8L2E+PC9jb2RlPiBkaXJlY3RpdmUKICAgIGlzIG5vdCA8Y29kZT5Ob25lPC9jb2RlPi4gSW4gZ2VuZXJhbCwgdGhlIGNsaWVudCBkZXRlcm1pbmVzIHRoZQogICAgbGFuZ3VhZ2UgcHJlZmVyZW5jZSwgbm90IHRoZSBzZXJ2ZXIuPC9wPgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9taW1lLmh0bWwjYWRkbGFuZ3VhZ2UiPkFkZExhbmd1YWdlPC9hPjwvY29kZT48L2xpPgo8L3VsPgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9uZWdvdGlhdGlvbi5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvbW9kL21vZF9uZWdvdGlhdGlvbi5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDE5OTUtMjAwNSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gb3IgaXRzIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZS48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSIuLi9mYXEvIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj4KPC9ib2R5PjwvaHRtbD4=