PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPm1vZF9sdWEgLSBBcGFjaGUgSFRUUCBTZXJ2ZXI8L3RpdGxlPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPgo8bGluayBocmVmPSIuLi9pbWFnZXMvZmF2aWNvbi5pY28iIHJlbD0ic2hvcnRjdXQgaWNvbiIgLz48L2hlYWQ+Cjxib2R5Pgo8ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iLi4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuMzwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5naWYiIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjM8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1vZHVsZXM8L2E+PC9kaXY+CjxkaXYgaWQ9InBhZ2UtY29udGVudCI+CjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QXBhY2hlIE1vZHVsZSBtb2RfbHVhPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX2x1YS5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+PC9wPgo8L2Rpdj4KPHRhYmxlIGNsYXNzPSJtb2R1bGUiPjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlByb3ZpZGVzIEx1YSBob29rcyBpbnRvIHZhcmlvdXMgcG9ydGlvbnMgb2YgdGhlIGh0dHBkCnJlcXVlc3QgcHJvY2Vzc2luZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHBlcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5Nb2R1bGWgSWRlbnRpZmllcjo8L2E+PC90aD48dGQ+bHVhX21vZHVsZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI1NvdXJjZUZpbGUiPlNvdXJjZaBGaWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhLmM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD4yLjMgYW5kIGxhdGVyPC90ZD48L3RyPjwvdGFibGU+CjxoMz5TdW1tYXJ5PC9oMz4KCjxwPlNvbWVvbmUgbmVlZHMgdG8gd3JpdGUgdGhpcy4KSW5jbHVkZSBhIGxpbmsgdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5sdWEub3JnLyI+dGhlIEx1YSB3ZWJzaXRlPC9hPi4KPC9wPgoKPGRpdiBjbGFzcz0ibm90ZSI+PGNvZGU+bW9kX2x1YTwvY29kZT4gaXMgc3RpbGwgaW4gZXhwZXJpbWVudGFsIHN0YXRlLgpVbnRpbCBpdCBpcyBkZWNsYXJlZCBzdGFibGUsIHVzYWdlIGFuZCBiZWhhdmlvciBtYXkgY2hhbmdlCmF0IGFueSB0aW1lLjwvZGl2PgoKPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PGgzIGNsYXNzPSJkaXJlY3RpdmVzIj5EaXJlY3RpdmVzPC9oMz4KPHVsIGlkPSJ0b2MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFjb2RlY2FjaGUiPkx1YUNvZGVDYWNoZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFob29rYWNjZXNzY2hlY2tlciI+THVhSG9va0FjY2Vzc0NoZWNrZXI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbHVhaG9va2F1dGhjaGVja2VyIj5MdWFIb29rQXV0aENoZWNrZXI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbHVhaG9va2NoZWNrdXNlcmlkIj5MdWFIb29rQ2hlY2tVc2VySUQ8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbHVhaG9va2ZpeHVwcyI+THVhSG9va0ZpeHVwczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFob29raW5zZXJ0ZmlsdGVyIj5MdWFIb29rSW5zZXJ0RmlsdGVyPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YWhvb2ttYXB0b3N0b3JhZ2UiPkx1YUhvb2tNYXBUb1N0b3JhZ2U8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbHVhaG9va3RyYW5zbGF0ZW5hbWUiPkx1YUhvb2tUcmFuc2xhdGVOYW1lPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YWhvb2t0eXBlY2hlY2tlciI+THVhSG9va1R5cGVDaGVja2VyPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YW1hcGhhbmRsZXIiPkx1YU1hcEhhbmRsZXI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbHVhcGFja2FnZWNwYXRoIj5MdWFQYWNrYWdlQ1BhdGg8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbHVhcGFja2FnZXBhdGgiPkx1YVBhY2thZ2VQYXRoPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YXF1aWNraGFuZGxlciI+THVhUXVpY2tIYW5kbGVyPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YXJvb3QiPkx1YVJvb3Q8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbHVhc2NvcGUiPkx1YVNjb3BlPC9hPjwvbGk+CjwvdWw+CjxoMz5Ub3BpY3M8L2gzPgo8dWwgaWQ9InRvcGljcyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2Jhc2ljY29uZiI+QmFzaWMgQ29uZmlndXJhdGlvbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN3cml0aW5naGFuZGxlcnMiPldyaXRpbmcgSGFuZGxlcnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjd3JpdGluZ2hvb2tzIj5Xcml0aW5nIEhvb2tzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2RhdGFzdHJ1Y3R1cmVzIj5EYXRhIFN0cnVjdHVyZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbG9nZ2luZyI+TG9nZ2luZyBGdW5jdGlvbnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYXBhY2hlMiI+YXBhY2hlMiBQYWNrYWdlPC9hPjwvbGk+CjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImJhc2ljY29uZiIgaWQ9ImJhc2ljY29uZiI+QmFzaWMgQ29uZmlndXJhdGlvbjwvYT48L2gyPgoKPHA+VGhlIGJhc2ljIG1vZHVsZSBsb2FkaW5nIGRpcmVjdGl2ZSBpczwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgTG9hZE1vZHVsZSBsdWFfbW9kdWxlIG1vZHVsZXMvbW9kX2x1YS5zbwo8L2NvZGU+PC9wPjwvZGl2PgoKPHA+Cjxjb2RlPm1vZF9sdWE8L2NvZGU+IHByb3ZpZGVzIGEgaGFuZGxlciBuYW1lZCA8Y29kZT5sdWEtc2NyaXB0PC9jb2RlPiwKd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBhbiA8Y29kZT5BZGRIYW5kbGVyPC9jb2RlPiBkaXJlY3RpdmU6PC9wPgoKPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CkFkZEhhbmRsZXIgbHVhLXNjcmlwdCAubHVhCjwvY29kZT48L3A+PC9kaXY+Cgo8cD4KVGhpcyB3aWxsIGNhdXNlIDxjb2RlPm1vZF9sdWE8L2NvZGU+IHRvIGhhbmRsZSByZXF1ZXN0cyBmb3IgZmlsZXMKZW5kaW5nIGluIDxjb2RlPi5sdWE8L2NvZGU+IGJ5IGludm9raW5nIHRoYXQgZmlsZSdzCjxjb2RlPmhhbmRsZTwvY29kZT4gZnVuY3Rpb24uCjwvcD4KCjxwPkZvciBtb3JlIGZsZXhpYmlsaXR5LCBzZWUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+THVhTWFwSGFuZGxlcjwvY29kZT4uCjwvcD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9IndyaXRpbmdoYW5kbGVycyIgaWQ9IndyaXRpbmdoYW5kbGVycyI+V3JpdGluZyBIYW5kbGVyczwvYT48L2gyPgoKPHA+PGNvZGU+bW9kX2x1YTwvY29kZT4gYWx3YXlzIGxvb2tzIHRvIGludm9rZSBhIGZ1bmN0aW9uIGZvciB0aGUgaGFuZGxlciwgcmF0aGVyIHRoYW4KanVzdCBldmFsdWF0aW5nIGEgc2NyaXB0IGJvZHkgQ0dJIHN0eWxlLiBBIGhhbmRsZXIgZnVuY3Rpb24gbG9va3MKc29tZXRoaW5nIGxpa2UgdGhpczo8L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+ZXhhbXBsZS5sdWE8L2gzPjxwcmU+Ci0tIGV4YW1wbGUgaGFuZGxlcgoKcmVxdWlyZSAic3RyaW5nIgoKZnVuY3Rpb24gaGFuZGxlX3NvbWV0aGluZyhyKQogICAgci5jb250ZW50X3R5cGUgPSAidGV4dC9wbGFpbiIKICAgIHI6cHV0cygiSGVsbG8gTHVhIFdvcmxkIVxuIikKCiAgICBpZiByLm1ldGhvZCA9PSAnR0VUJyB0aGVuCiAgICAgICAgZm9yIGssIHYgaW4gcGFpcnMoIHI6cGFyc2VhcmdzKCkgKSBkbwogICAgICAgICAgICByOnB1dHMoIHN0cmluZy5mb3JtYXQoIiVzOiAlcyIsIGssIHYpICkKICAgICAgICBlbmQKICAgIGVsc2VpZiByLm1ldGhvZCA9PSAnUE9TVCcgdGhlbgogICAgICAgIGZvciBrLCB2IGluIHBhaXJzKCByOnBhcnNlYm9keSgpICkgZG8KICAgICAgICAgICAgcjpwdXRzKCBzdHJpbmcuZm9ybWF0KCIlczogJXMiLCBrLCB2KSApCiAgICAgICAgZW5kCiAgICBlbHNlCiAgICAgICAgcjpwdXRzKCJ1bmtub3duIEhUVFAgbWV0aG9kICIgLi4gci5tZXRob2QpCiAgICBlbmQgCmVuZAo8L3ByZT48L2Rpdj4KCjxwPgpUaGlzIGhhbmRsZXIgZnVuY3Rpb24ganVzdCBwcmludHMgb3V0IHRoZSB1cmkgb3IgZm9ybSBlbmNvZGVkCmFyZ3VtZW50cyB0byBhIHBsYWludGV4dCBwYWdlLgo8L3A+Cgo8cD4KVGhpcyBtZWFucyAoYW5kIGluIGZhY3QgZW5jb3VyYWdlcykgdGhhdCB5b3UgY2FuIGhhdmUgbXVsdGlwbGUKaGFuZGxlcnMgKG9yIGhvb2tzLCBvciBmaWx0ZXJzKSBpbiB0aGUgc2FtZSBzY3JpcHQuCjwvcD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9IndyaXRpbmdob29rcyIgaWQ9IndyaXRpbmdob29rcyI+V3JpdGluZyBIb29rczwvYT48L2gyPgoKPHA+SG9vayBmdW5jdGlvbnMgYXJlIHBhc3NlZCB0aGUgcmVxdWVzdCBvYmplY3QgYXMgdGhlaXIgb25seSBhcmd1bWVudC4KVGhleSBjYW4gcmV0dXJuIGFueSB2YWx1ZSwgZGVwZW5kaW5nIG9uIHRoZSBob29rLCBidXQgbW9zdCBjb21tb25seQp0aGV5J2xsIHJldHVybiBPSywgRE9ORSwgb3IgREVDTElORUQsIHdoaWNoIHlvdSBjYW4gd3JpdGUgaW4gbHVhIGFzCjxjb2RlPmFwYWNoZTIuT0s8L2NvZGU+LCA8Y29kZT5hcGFjaGUyLkRPTkU8L2NvZGU+LCBvcgo8Y29kZT5hcGFjaGUyLkRFQ0xJTkVEPC9jb2RlPiwgb3IgZWxzZSBhbiBIVFRQIHN0YXR1cyBjb2RlLjwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz50cmFuc2xhdGVfbmFtZS5sdWE8L2gzPjxwcmU+Ci0tIGV4YW1wbGUgaG9vawoKcmVxdWlyZSAnYXBhY2hlMicKCmZ1bmN0aW9uIHRyYW5zbGF0ZV9uYW1lKHIpCiAgICBpZiByLnVyaSA9PSAiL3RyYW5zbGF0ZS1uYW1lIiB0aGVuCiAgICAgICAgci51cmkgPSAiL2ZpbmRfbWUudHh0IgogICAgICAgIHJldHVybiBhcGFjaGUyLkRFQ0xJTkVECiAgICBlbmQKICAgIHJldHVybiBhcGFjaGUyLkRFQ0xJTkVECmVuZAo8L3ByZT48L2Rpdj4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZGF0YXN0cnVjdHVyZXMiIGlkPSJkYXRhc3RydWN0dXJlcyI+RGF0YSBTdHJ1Y3R1cmVzPC9hPjwvaDI+Cgo8ZGw+CjxkdD5yZXF1ZXN0X3JlYzwvZHQ+CiAgICAgICAgPGRkPgogICAgICAgIDxwPlRoZSByZXF1ZXN0X3JlYyBpcyBtYXBwZWQgaW4gYXMgYSB1c2VyZGF0YS4gSXQgaGFzIGEgbWV0YXRhYmxlCiAgICAgICAgd2hpY2ggbGV0cyB5b3UgZG8gdXNlZnVsIHRoaW5ncyB3aXRoIGl0LiBGb3IgdGhlIG1vc3QgcGFydCBpdAogICAgICAgIGhhcyB0aGUgc2FtZSBmaWVsZHMgYXMgdGhlIHJlcXVlc3RfcmVjIHN0cnVjdCAoc2VlIGh0dHBkLmggCiAgICAgICAgdW50aWwgd2UgZ2V0IGJldHRlciBkb2NzIGhlcmUpIG1hbnkgb2Ygd2hpY2ggYXJlIHdyaXRlYWJsZSBhcwogICAgICAgIHdlbGwgYXMgcmVhZGFibGUuICAoVGhlIHRhYmxlIGZpZWxkcycgY29udGVudCBjYW4gYmUgY2hhbmdlZCwgYnV0IHRoZQogICAgICAgIGZpZWxkcyB0aGVtc2VsdmVzIGNhbm5vdCBiZSBzZXQgdG8gZGlmZmVyZW50IHRhYmxlcy4pPC9wPgoKICAgICAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj4KCiAgICAgICAgPHRyPgogICAgICAgICAgPHRoPjxzdHJvbmc+TmFtZTwvc3Ryb25nPjwvdGg+CiAgICAgICAgICA8dGg+PHN0cm9uZz5MdWEgdHlwZTwvc3Ryb25nPjwvdGg+CiAgICAgICAgICA8dGg+PHN0cm9uZz5Xcml0YWJsZTwvc3Ryb25nPjwvdGg+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+YXBfYXV0aF90eXBlPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5ubzwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+YXJnczwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm88L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPjxjb2RlPmFzc2JhY2t3YXJkczwvY29kZT48L3RkPgogICAgICAgICAgPHRkPmJvb2xlYW48L3RkPgogICAgICAgICAgPHRkPm5vPC90ZD4KICAgICAgICA8L3RyPgoKICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+Y2Fub25pY2FsX2ZpbGVuYW1lPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5ubzwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+Y29udGVudF9lbmNvZGluZzwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm88L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPjxjb2RlPmNvbnRlbnRfdHlwZTwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+eWVzPC90ZD4KICAgICAgICA8L3RyPgoKICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+ZG9jdW1lbnRfcm9vdDwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm88L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPjxjb2RlPmVycl9oZWFkZXJzX291dDwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnRhYmxlPC90ZD4KICAgICAgICAgIDx0ZD5ubzwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+ZmlsZW5hbWU8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPnllczwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+aGVhZGVyc19pbjwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnRhYmxlPC90ZD4KICAgICAgICAgIDx0ZD55ZXM8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPjxjb2RlPmhlYWRlcnNfb3V0PC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+dGFibGU8L3RkPgogICAgICAgICAgPHRkPnllczwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+aG9zdG5hbWU8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD48Y29kZT5tZXRob2Q8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD48Y29kZT5ub3RlczwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnRhYmxlPC90ZD4KICAgICAgICAgIDx0ZD55ZXM8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPjxjb2RlPnBhdGhfaW5mbzwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm88L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPjxjb2RlPnByb3RvY29sPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5ubzwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+cmFuZ2U8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD48Y29kZT5zdGF0dXM8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5udW1iZXI8L3RkPgogICAgICAgICAgPHRkPnllczwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+dGhlX3JlcXVlc3Q8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD48Y29kZT51bnBhcnNlZF91cmk8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD48Y29kZT51cmk8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPnllczwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+dXNlcjwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+eWVzPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CgogICAgICAgIDxwPlRoZSByZXF1ZXN0X3JlYyBoYXMgKGF0IGxlYXN0KSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6PC9wPgoKICAgICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICByOmFkZG91dHB1dGZpbHRlcihuYW1lfGZ1bmN0aW9uKSAtLSBhZGQgYW4gb3V0cHV0IGZpbHRlcgogICAgICAgIDwvY29kZT48L3A+PC9kaXY+CiAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICByOnBhcnNlYXJncygpIC0tIHJldHVybnMgYSBsdWEgdGFibGUgY29udGFpbmluZyB0aGUgcmVxdWVzdCdzCiAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSBzdHJpbmcgYXJndW1lbnRzCiAgICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgcjpwYXJzZWJvZHkoKSAtLSBwYXJzZSB0aGUgcmVxdWVzdCBib2R5IGFzIGEgUE9TVCBhbmQgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgICAgICBhIGx1YSB0YWJsZQogICAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgIHI6cHV0cygiaGVsbG8iLCAiIHdvcmxkIiwgIiEiKSAtLSBwcmludCB0byByZXNwb25zZSBib2R5CiAgICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgcjp3cml0ZSgiYSBzaW5nbGUgc3RyaW5nIikgLS0gcHJpbnQgdG8gcmVzcG9uc2UgYm9keQogICAgICAgIDwvY29kZT48L3A+PC9kaXY+CiAgICAgICAgPC9kZD4KICAgIDwvZGw+CiAgICAgICAKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ibG9nZ2luZyIgaWQ9ImxvZ2dpbmciPkxvZ2dpbmcgRnVuY3Rpb25zPC9hPjwvaDI+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAtLSBleGFtcGxlcyBvZiBsb2dnaW5nIG1lc3NhZ2VzPGJyIC8+CiAgICAgICAgcjpkZWJ1ZygiVGhpcyBpcyBhIGRlYnVnIGxvZyBtZXNzYWdlIik8YnIgLz4KICAgICAgICByOmluZm8oIlRoaXMgaXMgYW4gaW5mbyBsb2cgbWVzc2FnZSIpPGJyIC8+CiAgICAgICAgcjpub3RpY2UoIlRoaXMgaXMgYW4gbm90aWNlIGxvZyBtZXNzYWdlIik8YnIgLz4KICAgICAgICByOndhcm4oIlRoaXMgaXMgYW4gd2FybiBsb2cgbWVzc2FnZSIpPGJyIC8+CiAgICAgICAgcjplcnIoIlRoaXMgaXMgYW4gZXJyIGxvZyBtZXNzYWdlIik8YnIgLz4KICAgICAgICByOmFsZXJ0KCJUaGlzIGlzIGFuIGFsZXJ0IGxvZyBtZXNzYWdlIik8YnIgLz4KICAgICAgICByOmNyaXQoIlRoaXMgaXMgYW4gY3JpdCBsb2cgbWVzc2FnZSIpPGJyIC8+CiAgICAgICAgcjplbWVyZygiVGhpcyBpcyBhbiBlbWVyZyBsb2cgbWVzc2FnZSIpPGJyIC8+CjwvY29kZT48L3A+PC9kaXY+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJhcGFjaGUyIiBpZD0iYXBhY2hlMiI+YXBhY2hlMiBQYWNrYWdlPC9hPjwvaDI+CjxwPkEgcGFja2FnZSBuYW1lZCA8Y29kZT5hcGFjaGUyPC9jb2RlPiBpcyBhdmFpbGFibGUgd2l0aCAoYXQgbGVhc3QpIHRoZSBmb2xsb3dpbmcgY29udGVudHMuPC9wPgo8ZGw+CiAgPGR0PmFwYWNoZTIuT0s8L2R0PgogIDxkZD5pbnRlcm5hbCBjb25zdGFudCBPSy4gIEhhbmRsZXJzIHNob3VsZCByZXR1cm4gdGhpcyBpZiB0aGV5J3ZlCiAgaGFuZGxlZCB0aGUgcmVxdWVzdC48L2RkPgogIDxkdD5hcGFjaGUyLkRFQ0xJTkVEPC9kdD4KICA8ZGQ+aW50ZXJuYWwgY29uc3RhbnQgREVDTElORUQuICBIYW5kbGVycyBzaG91bGQgcmV0dXJuIHRoaXMgaWYKICB0aGV5IGFyZSBub3QgZ29pbmcgdG8gaGFuZGxlIHRoZSByZXF1ZXN0LjwvZGQ+CiAgPGR0PmFwYWNoZTIuRE9ORTwvZHQ+CiAgPGRkPmludGVybmFsIGNvbnN0YW50IERPTkUuPC9kZD4KICA8ZHQ+YXBhY2hlMi52ZXJzaW9uPC9kdD4KICA8ZGQ+QXBhY2hlIEhUVFAgc2VydmVyIHZlcnNpb24gc3RyaW5nPC9kZD4KICA8ZHQ+YXBhY2hlMi5IVFRQX01PVkVEX1RFTVBPUkFSSUxZPC9kdD4KICA8ZGQ+SFRUUCBzdGF0dXMgY29kZTwvZGQ+CjwvZGw+CjxwPihPdGhlciBIVFRQIHN0YXR1cyBjb2RlcyBhcmUgbm90IHlldCBpbXBsZW1lbnRlZC4pPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTHVhQ29kZUNhY2hlIiBpZD0iTHVhQ29kZUNhY2hlIj5MdWFDb2RlQ2FjaGU8L2E+IDxhIG5hbWU9Imx1YWNvZGVjYWNoZSIgaWQ9Imx1YWNvZGVjYWNoZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q29uZmlndXJlIHRoZSBjb21waWxlZCBjb2RlIGNhY2hlLjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MdWFDb2RlQ2FjaGUgc3RhdHxmb3JldmVyfG5ldmVyPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YUNvZGVDYWNoZSBzdGF0PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHBlcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT48cD4KICAgIFNwZWNpZnkgdGhlIGJlaGF2aW9yIG9mIHRoZSBpbi1tZW1vcnkgY29kZSBjYWNoZS4gVGhlIGRlZmF1bHQKICAgIGlzIHN0YXQsIHdoaWNoIHN0YXRzIHRoZSB0b3AgbGV2ZWwgc2NyaXB0IChub3QgYW55IGluY2x1ZGVkCiAgICBvbmVzKSBlYWNoIHRpbWUgdGhhdCBmaWxlIGlzIG5lZWRlZCwgYW5kIHJlbG9hZHMgaXQgaWYgdGhlCiAgICBtb2RpZmllZCB0aW1lIGluZGljYXRlcyBpdCBpcyBuZXdlciB0aGFuIHRoZSBvbmUgaXQgaGFzCiAgICBhbHJlYWR5IGxvYWRlZC4gVGhlIG90aGVyIHZhbHVlcyBjYXVzZSBpdCB0byBrZWVwIHRoZSBmaWxlCiAgICBjYWNoZWQgZm9yZXZlciAoZG9uJ3Qgc3RhdCBhbmQgcmVwbGFjZSkgb3IgdG8gbmV2ZXIgY2FjaGUgdGhlIAogICAgZmlsZS48L3A+CiAgICAKICAgIDxwPkluIGdlbmVyYWwgc3RhdCBvciBmb3JldmVyIGlzIGdvb2QgZm9yIHByb2R1Y3Rpb24sIGFuZCBzdGF0IG9yIG5ldmVyCiAgICBmb3IgZGV2ZWxvcG1lbnQuPC9wPgogICAgCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZXM6PC9oMz48cD48Y29kZT4KICAgICAgICBMdWFDb2RlQ2FjaGUgc3RhdDxiciAvPgogICAgICAgIEx1YUNvZGVDYWNoZSBmb3JldmVyPGJyIC8+CiAgICAgICAgTHVhQ29kZUNhY2hlIG5ldmVyPGJyIC8+CiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMdWFIb29rQWNjZXNzQ2hlY2tlciIgaWQ9Ikx1YUhvb2tBY2Nlc3NDaGVja2VyIj5MdWFIb29rQWNjZXNzQ2hlY2tlcjwvYT4gPGEgbmFtZT0ibHVhaG9va2FjY2Vzc2NoZWNrZXIiIGlkPSJsdWFob29rYWNjZXNzY2hlY2tlciI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+UHJvdmlkZSBhIGhvb2sgZm9yIHRoZSBhY2Nlc3NfY2hlY2tlciBwaGFzZSBvZiByZXF1ZXN0IHByb2Nlc3Npbmc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+THVhSG9va0FjY2Vzc0NoZWNrZXIgIC9wYXRoL3RvL2x1YS9zY3JpcHQubHVhICBob29rX2Z1bmN0aW9uX25hbWU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4cGVyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhPC90ZD48L3RyPgo8L3RhYmxlPgo8cD5BZGQgeW91ciBob29rIHRvIHRoZSBhY2Nlc3NfY2hlY2tlciBwaGFzZS4gIEFuIGFjY2VzcyBjaGVja2VyCmhvb2sgZnVuY3Rpb24gdXN1YWxseSByZXR1cm5zIE9LLCBERUNMSU5FRCwgb3IgSFRUUF9GT1JCSURERU4uPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ikx1YUhvb2tBdXRoQ2hlY2tlciIgaWQ9Ikx1YUhvb2tBdXRoQ2hlY2tlciI+THVhSG9va0F1dGhDaGVja2VyPC9hPiA8YSBuYW1lPSJsdWFob29rYXV0aGNoZWNrZXIiIGlkPSJsdWFob29rYXV0aGNoZWNrZXIiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlByb3ZpZGUgYSBob29rIGZvciB0aGUgYXV0aF9jaGVja2VyIHBoYXNlIG9mIHJlcXVlc3QgcHJvY2Vzc2luZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rQXV0aENoZWNrZXIgIC9wYXRoL3RvL2x1YS9zY3JpcHQubHVhIGhvb2tfZnVuY3Rpb25fbmFtZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXhwZXJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+CjxwPkludm9rZSBhIGx1YSBmdW5jdGlvbiBpbiB0aGUgYXV0aF9jaGVja2VyIHBoYXNlIG9mIHByb2Nlc3NpbmcKYSByZXF1ZXN0LiAgVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgYXJiaXRyYXJ5IGF1dGhlbnRpY2F0aW9uCmFuZCBhdXRob3JpemF0aW9uIGNoZWNraW5nLiAgQSB2ZXJ5IHNpbXBsZSBleGFtcGxlOgo8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwcmU+CnJlcXVpcmUgJ2FwYWNoZTInCgotLSBmYWtlIGF1dGhjaGVjayBob29rCi0tIElmIHJlcXVlc3QgaGFzIG5vIGF1dGggaW5mbywgc2V0IHRoZSByZXNwb25zZSBoZWFkZXIgYW5kCi0tIHJldHVybiBhIDQwMSB0byBhc2sgdGhlIGJyb3dzZXIgZm9yIGJhc2ljIGF1dGggaW5mby4KLS0gSWYgcmVxdWVzdCBoYXMgYXV0aCBpbmZvLCBkb24ndCBhY3R1YWxseSBsb29rIGF0IGl0LCBqdXN0Ci0tIHByZXRlbmQgd2UgZ290IHVzZXJpZCAnZm9vJyBhbmQgdmFsaWRhdGVkIGl0LgotLSBUaGVuIGNoZWNrIGlmIHRoZSB1c2VyaWQgaXMgJ2ZvbycgYW5kIGFjY2VwdCB0aGUgcmVxdWVzdC4KZnVuY3Rpb24gYXV0aGNoZWNrX2hvb2socikKCiAgIC0tIGxvb2sgZm9yIGF1dGggaW5mbwogICBhdXRoID0gci5oZWFkZXJzX2luWydBdXRob3JpemF0aW9uJ10KICAgaWYgYXV0aCB+PSBuaWwgdGhlbgogICAgIC0tIGZha2UgdGhlIHVzZXIKICAgICByLnVzZXIgPSAnZm9vJwogICBlbmQKCiAgIGlmIHIudXNlciA9PSBuaWwgdGhlbgogICAgICByOmRlYnVnKCJhdXRoY2hlY2s6IHVzZXIgaXMgbmlsLCByZXR1cm5pbmcgNDAxIikKICAgICAgci5lcnJfaGVhZGVyc19vdXRbJ1dXVy1BdXRoZW50aWNhdGUnXSA9ICdCYXNpYyByZWFsbT0iV2FsbHlXb3JsZCInCiAgICAgIHJldHVybiA0MDEKICAgZWxzZWlmIHIudXNlciA9PSAiZm9vIiB0aGVuCiAgICAgIHI6ZGVidWcoJ3VzZXIgZm9vOiBPSycpCiAgIGVsc2UKICAgICAgcjpkZWJ1ZygiYXV0aGNoZWNrOiB1c2VyPSciIC4uIHIudXNlciAuLiAiJyIpCiAgICAgIHIuZXJyX2hlYWRlcnNfb3V0WydXV1ctQXV0aGVudGljYXRlJ10gPSAnQmFzaWMgcmVhbG09IldhbGx5V29ybGQiJwogICAgICByZXR1cm4gNDAxCiAgIGVuZAogICByZXR1cm4gYXBhY2hlMi5PSwplbmQKPC9wcmU+PC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTHVhSG9va0NoZWNrVXNlcklEIiBpZD0iTHVhSG9va0NoZWNrVXNlcklEIj5MdWFIb29rQ2hlY2tVc2VySUQ8L2E+IDxhIG5hbWU9Imx1YWhvb2tjaGVja3VzZXJpZCIgaWQ9Imx1YWhvb2tjaGVja3VzZXJpZCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+UHJvdmlkZSBhIGhvb2sgZm9yIHRoZSBjaGVja191c2VyX2lkIHBoYXNlIG9mIHJlcXVlc3QgcHJvY2Vzc2luZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rQ2hlY2tVc2VySUQgIC9wYXRoL3RvL2x1YS9zY3JpcHQubHVhIGhvb2tfZnVuY3Rpb25fbmFtZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXhwZXJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+PHA+Li4uPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTHVhSG9va0ZpeHVwcyIgaWQ9Ikx1YUhvb2tGaXh1cHMiPkx1YUhvb2tGaXh1cHM8L2E+IDxhIG5hbWU9Imx1YWhvb2tmaXh1cHMiIGlkPSJsdWFob29rZml4dXBzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Qcm92aWRlIGEgaG9vayBmb3IgdGhlIGZpeHVwcyBwaGFzZSBvZiByZXF1ZXN0CnByb2Nlc3Npbmc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+THVhSG9va0ZpeHVwcyAgL3BhdGgvdG8vbHVhL3NjcmlwdC5sdWEgaG9va19mdW5jdGlvbl9uYW1lPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHBlcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT4KPHA+CiAgICBKdXN0IGxpa2UgTHVhSG9va1RyYW5zbGF0ZU5hbWUsIGJ1dCBleGVjdXRlZCBhdCB0aGUgZml4dXBzIHBoYXNlCjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMdWFIb29rSW5zZXJ0RmlsdGVyIiBpZD0iTHVhSG9va0luc2VydEZpbHRlciI+THVhSG9va0luc2VydEZpbHRlcjwvYT4gPGEgbmFtZT0ibHVhaG9va2luc2VydGZpbHRlciIgaWQ9Imx1YWhvb2tpbnNlcnRmaWx0ZXIiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlByb3ZpZGUgYSBob29rIGZvciB0aGUgaW5zZXJ0X2ZpbHRlciBwaGFzZSBvZiByZXF1ZXN0IHByb2Nlc3Npbmc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+THVhSG9va0luc2VydEZpbHRlciAgL3BhdGgvdG8vbHVhL3NjcmlwdC5sdWEgaG9va19mdW5jdGlvbl9uYW1lPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHBlcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT48cD5Ob3QgWWV0IEltcGxlbWVudGVkPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTHVhSG9va01hcFRvU3RvcmFnZSIgaWQ9Ikx1YUhvb2tNYXBUb1N0b3JhZ2UiPkx1YUhvb2tNYXBUb1N0b3JhZ2U8L2E+IDxhIG5hbWU9Imx1YWhvb2ttYXB0b3N0b3JhZ2UiIGlkPSJsdWFob29rbWFwdG9zdG9yYWdlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Qcm92aWRlIGEgaG9vayBmb3IgdGhlIG1hcF90b19zdG9yYWdlIHBoYXNlIG9mIHJlcXVlc3QgcHJvY2Vzc2luZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rTWFwVG9TdG9yYWdlICAvcGF0aC90by9sdWEvc2NyaXB0Lmx1YSBob29rX2Z1bmN0aW9uX25hbWU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4cGVyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhPC90ZD48L3RyPgo8L3RhYmxlPjxwPi4uLjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ikx1YUhvb2tUcmFuc2xhdGVOYW1lIiBpZD0iTHVhSG9va1RyYW5zbGF0ZU5hbWUiPkx1YUhvb2tUcmFuc2xhdGVOYW1lPC9hPiA8YSBuYW1lPSJsdWFob29rdHJhbnNsYXRlbmFtZSIgaWQ9Imx1YWhvb2t0cmFuc2xhdGVuYW1lIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Qcm92aWRlIGEgaG9vayBmb3IgdGhlIHRyYW5zbGF0ZSBuYW1lIHBoYXNlIG9mIHJlcXVlc3QgcHJvY2Vzc2luZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rVHJhbnNsYXRlTmFtZSAgL3BhdGgvdG8vbHVhL3NjcmlwdC5sdWEgIGhvb2tfZnVuY3Rpb25fbmFtZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXhwZXJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+PHA+CiAgICBBZGQgYSBob29rIChhdCBBUFJfSE9PS19NSURETEUpIHRvIHRoZSB0cmFuc2xhdGUgbmFtZSBwaGFzZSBvZgogICAgcmVxdWVzdCBwcm9jZXNzaW5nLiBUaGUgaG9vayBmdW5jdGlvbiByZWNlaXZlcyBhIHNpbmdsZQogICAgYXJndW1lbnQsIHRoZSByZXF1ZXN0X3JlYywgYW5kIHNob3VsZCByZXR1cm4gYSBzdGF0dXMgY29kZSwgCiAgICB3aGljaCBpcyBlaXRoZXIgYW4gSFRUUCBlcnJvciBjb2RlLCBvciB0aGUgY29uc3RhbnRzIGRlZmluZWQKICAgIGluIHRoZSBhcGFjaGUyIG1vZHVsZTogYXBhY2hlMi5PSywgYXBhY2hlMi5ERUNMSU5FRCwgb3IKICAgIGFwYWNoZTIuRE9ORS4gPC9wPgoKICAgIDxwPkZvciB0aG9zZSBuZXcgdG8gaG9va3MsIGJhc2ljYWxseSBlYWNoIGhvb2sgd2lsbCBiZSBpbnZva2VkCiAgICB1bnRpbCBvbmUgb2YgdGhlbSByZXR1cm5zIGFwYWNoZTIuT0suIElmIHlvdXIgaG9vayBkb2Vzbid0CiAgICB3YW50IHRvIGRvIHRoZSB0cmFuc2xhdGlvbiBpdCBzaG91bGQganVzdCByZXR1cm4KICAgIGFwYWNoZTIuREVDTElORUQuIElmIHRoZSByZXF1ZXN0IHNob3VsZCBzdG9wIHByb2Nlc3NpbmcsIHRoZW4KICAgIHJldHVybiBhcGFjaGUyLkRPTkUuPC9wPgoKICAgIDxwPkV4YW1wbGU6PC9wPgoKPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHByZT4KIyBodHRwZC5jb25mCkx1YUhvb2tUcmFuc2xhdGVOYW1lIC9zY3JpcHRzL2NvbmYvaG9va3MubHVhIHNpbGx5X21hcHBlcgoKLS0gL3NjcmlwdHMvY29uZi9ob29rcy5sdWEgLS0KcmVxdWlyZSAiYXBhY2hlMiIKZnVuY3Rpb24gc2lsbHlfbWFwcGVyKHIpCiAgICBpZiByLnVyaSA9PSAiLyIgdGhlbgogICAgICAgIHIuZmlsZSA9ICIvdmFyL3d3dy9ob21lLmx1YSIKICAgICAgICByZXR1cm4gYXBhY2hlMi5PSwogICAgZWxzZQogICAgICAgIHJldHVybiBhcGFjaGUyLkRFQ0xJTkVECiAgICBlbmQKZW5kCjwvcHJlPjwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ikx1YUhvb2tUeXBlQ2hlY2tlciIgaWQ9Ikx1YUhvb2tUeXBlQ2hlY2tlciI+THVhSG9va1R5cGVDaGVja2VyPC9hPiA8YSBuYW1lPSJsdWFob29rdHlwZWNoZWNrZXIiIGlkPSJsdWFob29rdHlwZWNoZWNrZXIiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlByb3ZpZGUgYSBob29rIGZvciB0aGUgdHlwZV9jaGVja2VyIHBoYXNlIG9mIHJlcXVlc3QgcHJvY2Vzc2luZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rVHlwZUNoZWNrZXIgIC9wYXRoL3RvL2x1YS9zY3JpcHQubHVhIGhvb2tfZnVuY3Rpb25fbmFtZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXhwZXJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+PHA+Li4uPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTHVhTWFwSGFuZGxlciIgaWQ9Ikx1YU1hcEhhbmRsZXIiPkx1YU1hcEhhbmRsZXI8L2E+IDxhIG5hbWU9Imx1YW1hcGhhbmRsZXIiIGlkPSJsdWFtYXBoYW5kbGVyIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5NYXAgYSBwYXRoIHRvIGEgbHVhIGhhbmRsZXI8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+THVhTWFwSGFuZGxlciB1cmktcGF0dGVybiAvcGF0aC90by9sdWEvc2NyaXB0Lmx1YSBbZnVuY3Rpb24tbmFtZV08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4cGVyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgbWF0Y2hlcyBhIHVyaSBwYXR0ZXJuIHRvIGludm9rZSBhIHNwZWNpZmljCiAgICBoYW5kbGVyIGZ1bmN0aW9uIGluIGEgc3BlY2lmaWMgZmlsZS4gSXQgdXNlcyBQQ1JFIHJlZ3VsYXIKICAgIGV4cHJlc3Npb25zIHRvIG1hdGNoIHRoZSB1cmksIGFuZCBzdXBwb3J0cyBpbnRlcnBvbGF0aW5nCiAgICBtYXRjaCBncm91cHMgaW50byBib3RoIHRoZSBmaWxlIHBhdGggYW5kIHRoZSBmdW5jdGlvbiBuYW1lCiAgICBiZSBjYXJlZnVsIHdyaXRpbmcgeW91ciByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGF2b2lkIHNlY3VyaXR5CiAgICBpc3N1ZXMuPC9wPgogICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZXM6PC9oMz48cD48Y29kZT4KICAgIEx1YU1hcEhhbmRsZXIgLyhcdyspLygvdyspIC9zY3JpcHRzLyQxLmx1YSBoYW5kbGVfJDIKICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgICAgICA8cD5UaGlzIHdvdWxkIG1hdGNoIHVyaSdzIHN1Y2ggYXMgL3Bob3Rvcy9zaG93P2lkPTkKICAgICAgICB0byB0aGUgZmlsZSAvc2NyaXB0cy9waG90b3MubHVhIGFuZCBpbnZva2UgdGhlCiAgICAgICAgaGFuZGxlciBmdW5jdGlvbiBoYW5kbGVfc2hvdyBvbiB0aGUgbHVhIHZtIGFmdGVyCiAgICAgICAgbG9hZGluZyB0aGF0IGZpbGUuPC9wPgogICAgICAgIAo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgIEx1YU1hcEhhbmRsZXIgL2JpbmdvIC9zY3JpcHRzL3dvbWJhdC5sdWEKPC9jb2RlPjwvcD48L2Rpdj4KICAgICAgICA8cD5UaGlzIHdvdWxkIGludm9rZSB0aGUgImhhbmRsZSIgZnVuY3Rpb24sIHdoaWNoCiAgICAgICAgaXMgdGhlIGRlZmF1bHQgaWYgbm8gc3BlY2lmaWMgZnVuY3Rpb24gbmFtZSBpcwogICAgICAgIHByb3ZpZGVkLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMdWFQYWNrYWdlQ1BhdGgiIGlkPSJMdWFQYWNrYWdlQ1BhdGgiPkx1YVBhY2thZ2VDUGF0aDwvYT4gPGEgbmFtZT0ibHVhcGFja2FnZWNwYXRoIiBpZD0ibHVhcGFja2FnZWNwYXRoIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5BZGQgYSBkaXJlY3RvcnkgdG8gbHVhJ3MgcGFja2FnZS5jcGF0aDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MdWFQYWNrYWdlQ1BhdGggL3BhdGgvdG8vaW5jbHVkZS8/LnNvYTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXhwZXJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5BZGQgYSBwYXRoIHRvIGx1YSdzIHNoYXJlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoLiBGb2xsb3dzIHRoZSBzYW1lCiAgICBjb252ZW50aW9ucyBhcyBsdWEuIFRoaXMganVzdCBtdW5nZXMgdGhlIHBhY2thZ2UuY3BhdGggaW4gdGhlIAogICAgbHVhIHZtcy48L3A+CiAgICAKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMdWFQYWNrYWdlUGF0aCIgaWQ9Ikx1YVBhY2thZ2VQYXRoIj5MdWFQYWNrYWdlUGF0aDwvYT4gPGEgbmFtZT0ibHVhcGFja2FnZXBhdGgiIGlkPSJsdWFwYWNrYWdlcGF0aCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QWRkIGEgZGlyZWN0b3J5IHRvIGx1YSdzIHBhY2thZ2UucGF0aDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MdWFQYWNrYWdlUGF0aCAvcGF0aC90by9pbmNsdWRlLz8ubHVhPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHBlcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT48cD5BZGQgYSBwYXRoIHRvIGx1YSdzIG1vZHVsZSBzZWFyY2ggcGF0aC4gRm9sbG93cyB0aGUgc2FtZQogICAgY29udmVudGlvbnMgYXMgbHVhLiBUaGlzIGp1c3QgbXVuZ2VzIHRoZSBwYWNrYWdlLnBhdGggaW4gdGhlIAogICAgbHVhIHZtcy48L3A+CiAgICAKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlczo8L2gzPjxwPjxjb2RlPgogICAgICAgIEx1YVBhY2thZ2VQYXRoIC9zY3JpcHRzL2xpYi8/Lmx1YTxiciAvPgogICAgICAgIEx1YVBhY2thZ2VQYXRoIC9zY3JpcHRzL2xpYi8/L2luaXQubHVhCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ikx1YVF1aWNrSGFuZGxlciIgaWQ9Ikx1YVF1aWNrSGFuZGxlciI+THVhUXVpY2tIYW5kbGVyPC9hPiA8YSBuYW1lPSJsdWFxdWlja2hhbmRsZXIiIGlkPSJsdWFxdWlja2hhbmRsZXIiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlByb3ZpZGUgYSBob29rIGZvciB0aGUgcXVpY2sgaGFuZGxlciBvZiByZXF1ZXN0IHByb2Nlc3Npbmc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGUgLz48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXhwZXJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+PHA+Li4uPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTHVhUm9vdCIgaWQ9Ikx1YVJvb3QiPkx1YVJvb3Q8L2E+IDxhIG5hbWU9Imx1YXJvb3QiIGlkPSJsdWFyb290Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5TcGVjaWZ5IHRoZSBiYXNlIHBhdGggZm9yIHJlc29sdmluZyByZWxhdGl2ZSBwYXRocyBmb3IgbW9kX2x1YSBkaXJlY3RpdmVzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YVJvb3QgL3BhdGgvdG8vYS9kaXJlY3Rvcnk8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4cGVyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+U3BlY2lmeSB0aGUgYmFzZSBwYXRoIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBldmFsdWF0ZSBhbGwKICAgIHJlbGF0aXZlIHBhdGhzIHdpdGhpbiBtb2RfbHVhLiBJZiBub3Qgc3BlY2lmaWVkIHRoZXkKICAgIHdpbGwgYmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksCiAgICB3aGljaCBtYXkgbm90IGFsd2F5cyB3b3JrIHdlbGwgZm9yIGEgc2VydmVyLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMdWFTY29wZSIgaWQ9Ikx1YVNjb3BlIj5MdWFTY29wZTwvYT4gPGEgbmFtZT0ibHVhc2NvcGUiIGlkPSJsdWFzY29wZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+T25lIG9mIG9uY2UsIHJlcXVlc3QsIGNvbm4sIHNlcnZlciAtLSBkZWZhdWx0IGlzIG9uY2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+THVhU2NvcGUgb25jZXxyZXF1ZXN0fGNvbm58c2VydmVyIFttYXh8bWluIG1heF08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+THVhU2NvcGUgb25jZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXhwZXJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5TcGVjaWZ5IHRoZSBsaWZlY3ljbGUgc2NvcGUgb2YgdGhlIEx1YSBpbnRlcnByZXRlciB3aGljaCB3aWxsCiAgICBiZSB1c2VkIGJ5IGhhbmRsZXJzIGluIHRoaXMgIkRpcmVjdG9yeS4iIFRoZSBkZWZhdWx0IGlzICJvbmNlIjwvcD4KICAgCiAgIDxkbD4KICAgIDxkdD5vbmNlOjwvZHQ+IDxkZD51c2UgdGhlIGludGVycHJldGVyIG9uY2UgYW5kIHRocm93IGl0IGF3YXkuPC9kZD4KICAgIAogICAgPGR0PnJlcXVlc3Q6PC9kdD4gPGRkPnVzZSB0aGUgaW50ZXJwcmV0ZXIgdG8gaGFuZGxlIGFueXRoaW5nIGJhc2VkIG9uIAogICAgICAgICAgICAgdGhlIHNhbWUgZmlsZSB3aXRoaW4gdGhpcyByZXF1ZXN0LCB3aGljaCBpcyBhbHNvIAogICAgICAgICAgICAgcmVxdWVzdCBzY29wZWQuPC9kZD4KICAgICAgICAgICAgIAogICAgPGR0PmNvbm46PC9kdD4gPGRkPlNhbWUgYXMgcmVxdWVzdCBidXQgYXR0YWNoZWQgdG8gdGhlIGNvbm5lY3Rpb25fcmVjPC9kZD4KICAgIAogICAgPGR0PnNlcnZlcjo8L2R0PiAgPGRkPlRoaXMgb25lIGlzIGRpZmZlcmVudCB0aGFuIG90aGVycyBiZWNhdXNlIHRoZQogICAgICAgICAgICBzZXJ2ZXIgc2NvcGUgaXMgcXVpdGUgbG9uZyBsaXZlZCwgYW5kIG11bHRpcGxlIHRocmVhZHMKICAgICAgICAgICAgd2lsbCBoYXZlIHRoZSBzYW1lIHNlcnZlcl9yZWMuIFRvIGFjY29tbW9kYXRlIHRoaXMKICAgICAgICAgICAgc2VydmVyIHNjb3BlZCBpbnRlcnByZXRlciBhcmUgc3RvcmVkIGluIGFuIGFwcgogICAgICAgICAgICByZXNvdXJjZSBsaXN0LiBUaGUgbWluIGFuZCBtYXggYXJndW1lbnRzIGFyZSBpbnRlbmRlZAogICAgICAgICAgICB0byBzcGVjaWZ5IHRoZSBwb29sIHNpemUsIGJ1dCBhcmUgdW51c2VkIGF0IHRoaXMgdGltZS48L2RkPgogICA8L2RsPgoKPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfbHVhLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDExIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSIuLi9mYXEvIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj4KPC9ib2R5PjwvaHRtbD4=