PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KICA8aGVhZD4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+CiAgICA8dGl0bGU+T1Byb2ZpbGUgSklUIGFnZW50IGRldmVsb3BlciBndWlkZTwvdGl0bGU+CiAgICA8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkRvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIFYxLjc1LjIiIC8+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBjbGFzcz0iYm9vayIgdGl0bGU9Ik9Qcm9maWxlIEpJVCBhZ2VudCBkZXZlbG9wZXIgZ3VpZGUiPgogICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8aDEgY2xhc3M9InRpdGxlIj48YSBpZD0ib3Byb2ZpbGUtZGV2ZWwtZ3VpZGUiPjwvYT5PUHJvZmlsZSBKSVQgYWdlbnQgZGV2ZWxvcGVyIGd1aWRlPC9oMT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXV0aG9yZ3JvdXAiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF1dGhvciI+CiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImF1dGhvciI+PHNwYW4gY2xhc3M9ImZpcnN0bmFtZSI+TWF5bmFyZDwvc3Bhbj4gPHNwYW4gY2xhc3M9InN1cm5hbWUiPkpvaG5zb248L3NwYW4+PC9oMz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFmZmlsaWF0aW9uIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWRkcmVzcyI+CiAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0iZW1haWwiPiZsdDs8YSBjbGFzcz0iZW1haWwiIGhyZWY9Im1haWx0bzptYXluYXJkakB1cy5pYm0uY29tIj5tYXluYXJkakB1cy5pYm0uY29tPC9hPiZndDs8L2NvZGU+CiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPHAgY2xhc3M9ImNvcHlyaWdodCI+Q29weXJpZ2h0IKkgMjAwNyBJQk0gQ29ycG9yYXRpb248L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aHIgLz4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InRvYyI+CiAgICAgICAgPHA+CiAgICAgICAgICA8Yj5UYWJsZSBvZiBDb250ZW50czwvYj4KICAgICAgICA8L3A+CiAgICAgICAgPGRsPgogICAgICAgICAgPGR0PgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2hhcHRlciI+CiAgICAgICAgICAgICAgPGEgaHJlZj0iI2RldmVsb3BpbmciPjEuIERldmVsb3BpbmcgYSBuZXcgSklUIGFnZW50PC9hPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L2R0PgogICAgICAgICAgPGRkPgogICAgICAgICAgICA8ZGw+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ppdC1kZXZlbC1vdmVydmlldyI+MS4gT3ZlcnZpZXc8L2E+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPSIjaml0LWludGVyZmFjZSI+Mi4gSW1wbGVtZW50aW5nIEpJVCBzdXBwb3J0IGZvciBhIG5ldyB2aXJ0dWFsIG1hY2hpbmU8L2E+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvZGQ+CiAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGFwdGVyIj4KICAgICAgICAgICAgICA8YSBocmVmPSIjaml0LWFwaSI+Mi4gVGhlIEpJVCBzdXBwb3J0IEFQSTwvYT4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC9kdD4KICAgICAgICAgIDxkZD4KICAgICAgICAgICAgPGRsPgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcF9vcGVuX2FnZW50Ij4xLiBvcF9vcGVuX2FnZW50PC9hPgogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgICAgPGR0PgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wX2Nsb3NlX2FnZW50Ij4yLiBvcF9jbG9zZV9hZ2VudDwvYT4KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICA8L2R0PgogICAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzZWN0MSI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcF93cml0ZV9uYXRpdmVfY29kZSI+My4gb3Bfd3JpdGVfbmF0aXZlX2NvZGU8L2E+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3Bfd3JpdGVfZGVidWdfbGluZV9pbmZvIj40LiBvcF93cml0ZV9kZWJ1Z19saW5lX2luZm88L2E+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPSIjb3BfdW5sb2FkX25hdGl2ZV9jb2RlIj41LiBvcF91bmxvYWRfbmF0aXZlX2NvZGU8L2E+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgPC9kdD4KICAgICAgICAgICAgPC9kbD4KICAgICAgICAgIDwvZGQ+CiAgICAgICAgPC9kbD4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNoYXB0ZXIiIHRpdGxlPSJDaGFwdGVyoDEuoERldmVsb3BpbmcgYSBuZXcgSklUIGFnZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIj48YSBpZD0iZGV2ZWxvcGluZyI+PC9hPkNoYXB0ZXKgMS6gRGV2ZWxvcGluZyBhIG5ldyBKSVQgYWdlbnQ8L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRvYyI+CiAgICAgICAgICA8cD4KICAgICAgICAgICAgPGI+VGFibGUgb2YgQ29udGVudHM8L2I+CiAgICAgICAgICA8L3A+CiAgICAgICAgICA8ZGw+CiAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iI2ppdC1kZXZlbC1vdmVydmlldyI+MS4gT3ZlcnZpZXc8L2E+CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L2R0PgogICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNqaXQtaW50ZXJmYWNlIj4yLiBJbXBsZW1lbnRpbmcgSklUIHN1cHBvcnQgZm9yIGEgbmV3IHZpcnR1YWwgbWFjaGluZTwvYT4KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICA8L2RsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxwPgoJT1Byb2ZpbGUgaW5jbHVkZXMgYSBoZWFkZXIgZmlsZSBhbmQgbGlicmFyeSB0aGF0IGFyZSBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5CglkZXZlbG9wZXJzIHdobyB3aXNoIHRvIGV4dGVuZCBPUHJvZmlsZSdzIEpJVCBzdXBwb3J0IHRvIG90aGVyIG5vbi1zdXBwb3J0ZWQKCXZpcnR1YWwgbWFjaGluZXMuICBUaGlzIGRldmVsb3BlciBndWlkZSBkZXNjcmliZXMgdGhlc2UgZGV2ZWxvcG1lbnQgZmlsZXMgYW5kIGhvdwoJdG8gdXNlIHRoZW0uCgk8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIxLqBPdmVydmlldyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJqaXQtZGV2ZWwtb3ZlcnZpZXciPjwvYT4xLqBPdmVydmlldzwvaDI+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8cD4KCU9Qcm9maWxlIGFscmVhZHkgaW5jbHVkZXMgc29tZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgdGhlIEpJVCBzdXBwb3J0LAoJZS5nLiwgdGhlIEphdmEgVmlydHVhbCBNYWNoaW5lIFRvb2xraXQgSW50ZXJmYWNlIChKVk1USSkgbGlicmFyeSwKCWxpYmp2bXRpX29wcm9maWxlLnNvLiAgSW4gZGV2ZWxvcGluZyBhIG5ldyBpbXBsZW1lbnRhdGlvbiwgeW91IHdpbGwKCWxpa2VseSBmb2xsb3cgYSBzaW1pbGFyIChpZiBub3QgaWRlbnRpY2FsKSBwcm9jZWR1cmUgYXMgd2FzIHVzZWQgaW4KCWRldmVsb3BpbmcgdGhlIEpWTVRJIGxpYnJhcnkuICBGb2xsb3dpbmcgYXJlIHRoZSBoaWdoIGxldmVsIHN0ZXBzIHRvIGZvbGxvdzoKCTwvcD4KICAgICAgICAgIDxkaXYgY2xhc3M9Im9yZGVyZWRsaXN0Ij4KICAgICAgICAgICAgPG9sIGNsYXNzPSJvcmRlcmVkbGlzdCIgdHlwZT0iMSI+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+RW5zdXJlIHlvdXIgdmlydHVhbCBtYWNoaW5lIHByb3ZpZGVzIGFuIEFQSSB0aGF0LCBhdCBtaW5pbXVtLAoJY2FuIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhYm91dCBkeW5hbWljYWxseSBjb21waWxlZCBjb2RlOgoJCTxkaXYgY2xhc3M9Iml0ZW1pemVkbGlzdCI+PHVsIGNsYXNzPSJpdGVtaXplZGxpc3QiIHR5cGU9ImRpc2MiPjxsaSBjbGFzcz0ibGlzdGl0ZW0iPk5vdGlmaWNhdGlvbiB3aGVuIGNvbXBpbGF0aW9uIG9jY3VyczwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+TmFtZSBvZiB0aGUgc3ltYm9sIChpLmUuLCBmdW5jdGlvbiBvciBjbGFzcy9tZXRob2QsIGV0Yy4pPC9saT48bGkgY2xhc3M9Imxpc3RpdGVtIj5BZGRyZXNzIGluIGFub255bW91cyBtZW1vcnkgd2hlcmUgdGhlIGNvbXBpbGVkIGNvZGUgd2FzIGxvYWRlZDwvbGk+PGxpIGNsYXNzPSJsaXN0aXRlbSI+TGVuZ3RoIG9mIHRoZSBjb21waWxlZCBjb2RlIHNlZ21lbnQ8L2xpPjwvdWw+PC9kaXY+PC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj5Xcml0ZSBhbiBhZ2VudCBsaWJyYXJ5IHRoYXQgY29tbXVuaWNhdGVzIHdpdGggeW91ciBWTSB0byBvYnRhaW4KCWNvbXBpbGVkIGNvZGUgbm90aWZpY2F0aW9ucy4gIEludm9rZSB0aGUgcmVxdWlyZWQgZnVuY3Rpb25zIGZyb20gb3BhZ2VudC5oCgkoPGEgY2xhc3M9InhyZWYiIGhyZWY9IiNqaXQtaW50ZXJmYWNlIiB0aXRsZT0iMi6gSW1wbGVtZW50aW5nIEpJVCBzdXBwb3J0IGZvciBhIG5ldyB2aXJ0dWFsIG1hY2hpbmUiPlNlY3Rpb26gMiwgJiM4MjIwO0ltcGxlbWVudGluZyBKSVQgc3VwcG9ydCBmb3IgYSBuZXcgdmlydHVhbCBtYWNoaW5lJiM4MjIxOzwvYT4pIGFuZCBsaW5rIHlvdXIgbGlicmFyeSB3aXRoIGxpYm9wYWdlbnQuc28KCShpbnN0YWxsZWQgYXQgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4mbHQ7b3Byb2ZpbGVfaW5zdGFsbF9kaXImZ3Q7L2xpYi9vcHJvZmlsZTwvY29kZT4pLgoJPC9saT4KICAgICAgICAgICAgPC9vbD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHA+CgoJPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMi6gSW1wbGVtZW50aW5nIEpJVCBzdXBwb3J0IGZvciBhIG5ldyB2aXJ0dWFsIG1hY2hpbmUiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0iaml0LWludGVyZmFjZSI+PC9hPjIuoEltcGxlbWVudGluZyBKSVQgc3VwcG9ydCBmb3IgYSBuZXcgdmlydHVhbCBtYWNoaW5lPC9oMj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwPgoJVGhlIEpJVCBzdXBwb3J0IEFQSSBmb3IgT1Byb2ZpbGUgaXMgZGVmaW5lZCAKCWluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+Jmx0O29wcm9maWxlLWluc3RhbGwtZGlyJmd0Oy9pbmNsdWRlL29wYWdlbnQuaDwvY29kZT4uCglTb21lIHBhcnRzIG9mIHRoZSBBUEkgYXJlIG1hbmRhdG9yeSBmb3IgYW4gYWdlbnQgbGlicmFyeSB0byB1c2U7IG90aGVyCglwYXJ0cyBhcmUgb3B0aW9uYWwuICBUaGUgbWFuZGF0b3J5IGZ1bmN0aW9ucyBhcmUgc2hvd24gYmVsb3cuCgk8L3A+CiAgICAgICAgICA8dGFibGUgeG1sbnM9IiIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDogI0UwRTBFMDsiIHdpZHRoPSI5MCUiPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgPHByZSBjbGFzcz0ic2NyZWVuIj4Kb3BfYWdlbnRfdCBvcF9vcGVuX2FnZW50KHZvaWQpOwoKdm9pZCBvcF9jbG9zZV9hZ2VudChvcF9hZ2VudF90IGhkbCk7CgppbnQgb3Bfd3JpdGVfbmF0aXZlX2NvZGUob3BfYWdlbnRfdCBoZGwsIGNoYXIgY29uc3QgKiBzeW1ib2xfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZtYSwgY29uc3Qgdm9pZCAqIGNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29kZV9zaXplKTsKPC9wcmU+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICA8cD4KCVRvIGltcGxlbWVudCB0aGlzIHBhcnQgb2YgeW91ciBsaWJyYXJ5LCB5b3UgbXVzdCBwZXJmb3JtIHRoZQoJZm9sbG93aW5nIHN0ZXBzOgoJPC9wPgogICAgICAgICAgPGRpdiBjbGFzcz0ib3JkZXJlZGxpc3QiPgogICAgICAgICAgICA8b2wgY2xhc3M9Im9yZGVyZWRsaXN0IiB0eXBlPSIxIj4KICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj5JbXBsZW1lbnQgYSBmdW5jdGlvbiB0byBzZXQgdXAgaW5pdGlhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIFZNLgoJT25jZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBWTSBpcyBlc3RhYmxpc2hlZCwgeW91ciBhZ2VudCBsaWJyYXJ5IHNob3VsZCBjYWxsCgk8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wX29wX2FnZW50KCk8L2NvZGU+IGFuZCBjYWNoZSB0aGUgcmV0dXJuZWQgPGNvZGUgY2xhc3M9ImNvZGUiPm9wX2FnZW50X3Q8L2NvZGU+IGhhbmRsZSBmb3IgdXNlIGluCglmdXR1cmUgY2FsbHMuPC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj5QZXJmb3JtIGFueSBuZWNlc3Nhcnkgc3RlcHMgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgVk0gdG8gYmUgbm90aWZpZWQgb2YKCWNvbXBpbGVkIGNvZGUgbG9hZCBldmVudHMuICBSZWdpc3RyYXRpb24gbXVzdCBpbmNsdWRlIGEgY2FsbGJhY2sgZnVuY3Rpb24geW91Cgl3aWxsIGltcGxlbWVudCBpbiB0aGUgbGlicmFyeSB0byBoYW5kbGUgdGhlIGNvbXBpbGVkIGNvZGUgbG9hZCBldmVudHMuPC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3RpdGVtIj5UaGUgY2FsbGJhY2sgZnVuY3Rpb24gbWVudGlvbmVkIGFib3ZlIG11c3Qgb2J0YWluIGFsbCByZXF1aXJlZAoJaW5mb3JtYXRpb24gZnJvbSB0aGUgVk0gdG8gcGFzcyB0byBsaWJvcGFnZW50IHZpYSA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wX3dyaXRlX25hdGl2ZV9jb2RlKCk8L2NvZGU+LjwvbGk+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0aXRlbSI+V2hlbiBkaXNjb25uZWN0aW5nIGZyb20gdGhlIFZNLCB5b3VyIGxpYnJhcnkgc2hvdWxkIGNhbGwKCTxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3BfYWdlbnRfY2xvc2UoKTwvY29kZT4uPC9saT4KICAgICAgICAgICAgPC9vbD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHA+Cgk8L3A+CiAgICAgICAgICA8cD5Vc2Ugb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgb3B0aW9uYWwsIGRlcGVuZGluZyBvbiB0aGUga2luZHMgb2YgaW5mb3JtYXRpb24geW91ciBWTQoJY2FuIHByb3ZpZGUgdG8geW91ciBhZ2VudCBsaWJyYXJ5LiAgU2VlIHRoZSBKVk1USSBhZ2VudCBsaWJyYXJ5IGZvciBhbiBleGFtcGxlIG9mIGhvdyB0byB1c2UKCXRoZXNlIGZ1bmN0aW9ucy4KPC9wPgogICAgICAgICAgPHRhYmxlIHhtbG5zPSIiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6ICNFMEUwRTA7IiB3aWR0aD0iOTAlIj4KICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgIDxwcmUgY2xhc3M9InNjcmVlbiI+CmludCBvcF91bmxvYWRfbmF0aXZlX2NvZGUob3BfYWdlbnRfdCBoZGwsIHVpbnQ2NF90IHZtYSk7CgppbnQgb3Bfd3JpdGVfZGVidWdfbGluZV9pbmZvKG9wX2FnZW50X3QgaGRsLCB2b2lkIGNvbnN0ICogY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnJfZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRlYnVnX2xpbmVfaW5mbyBjb25zdCAqIGNvbXBpbGVfbWFwKTsKPC9wcmU+CiAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgPC90cj4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICA8cD4KCTwvcD4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJOb3RlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+Tm90ZTwvaDM+V2hpbGUgdGhlIGxpYm9wYWdlbnQgZnVuY3Rpb25zIGFyZSB0aHJlYWQtc2FmZSwgeW91IHNob3VsZCBub3QgdXNlIHRoZW0gaW4KCXNpZ25hbCBoYW5kbGVycy4KCTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2hhcHRlciIgdGl0bGU9IkNoYXB0ZXKgMi6gVGhlIEpJVCBzdXBwb3J0IEFQSSI+CiAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSI+PGEgaWQ9ImppdC1hcGkiPjwvYT5DaGFwdGVyoDIuoFRoZSBKSVQgc3VwcG9ydCBBUEk8L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InRvYyI+CiAgICAgICAgICA8cD4KICAgICAgICAgICAgPGI+VGFibGUgb2YgQ29udGVudHM8L2I+CiAgICAgICAgICA8L3A+CiAgICAgICAgICA8ZGw+CiAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wX29wZW5fYWdlbnQiPjEuIG9wX29wZW5fYWdlbnQ8L2E+CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L2R0PgogICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcF9jbG9zZV9hZ2VudCI+Mi4gb3BfY2xvc2VfYWdlbnQ8L2E+CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L2R0PgogICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcF93cml0ZV9uYXRpdmVfY29kZSI+My4gb3Bfd3JpdGVfbmF0aXZlX2NvZGU8L2E+CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8L2R0PgogICAgICAgICAgICA8ZHQ+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNlY3QxIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiNvcF93cml0ZV9kZWJ1Z19saW5lX2luZm8iPjQuIG9wX3dyaXRlX2RlYnVnX2xpbmVfaW5mbzwvYT4KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvZHQ+CiAgICAgICAgICAgIDxkdD4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2VjdDEiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iI29wX3VubG9hZF9uYXRpdmVfY29kZSI+NS4gb3BfdW5sb2FkX25hdGl2ZV9jb2RlPC9hPgogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgPC9kdD4KICAgICAgICAgIDwvZGw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPHA+CglUaGlzIGNoYXB0ZXIgZGVzY3JpYmVzIHRoZSBKSVQgc3VwcG9ydCBBUEkuICBTZWUgb3BhZ2VudC5oIGZvciBtb3JlIGRldGFpbHMuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMS6gb3Bfb3Blbl9hZ2VudCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvcF9vcGVuX2FnZW50Ij48L2E+MS6gb3Bfb3Blbl9hZ2VudDwvaDI+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmdW5jc3lub3BzaXMiPkluaXRpYWxpemVzIHRoZSBhZ2VudCBsaWJyYXJ5Lgo8cHJlIGNsYXNzPSJmdW5jc3lub3BzaXNpbmZvIj4jaW5jbHVkZSAmbHQ7b3BhZ2VudC5oJmd0OzwvcHJlPjx0YWJsZSBib3JkZXI9IjAiIHN1bW1hcnk9IkZ1bmN0aW9uIHN5bm9wc2lzIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJmdW5jcHJvdG90eXBlLXRhYmxlIj48dHI+PHRkPjxjb2RlIGNsYXNzPSJmdW5jZGVmIj5vcF9hZ2VudF90IDxiIGNsYXNzPSJmc2Z1bmMiPm9wX29wZW5fYWdlbnQ8L2I+KDwvY29kZT48L3RkPjx0ZD48Y29kZT4pPC9jb2RlPjs8L3RkPjx0ZD6gPC90ZD48L3RyPjwvdGFibGU+PGRpdiBjbGFzcz0icGFyYW1kZWYtbGlzdCI+PGNvZGU+dm9pZDwvY29kZT47PC9kaXY+PGRpdiBjbGFzcz0iZnVuY3Byb3RvdHlwZS1zcGFjZXIiPqA8L2Rpdj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJEZXNjcmlwdGlvbiIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPkRlc2NyaXB0aW9uPC9oMz4KVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSBhZ2VudHMgYmVmb3JlIGFueSBvdGhlciBmdW5jdGlvbi4KQ3JlYXRlcyBhbmQgb3BlbnMgYSBKSVQgZHVtcCBmaWxlIGluIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Zhci9saWIvb3Byb2ZpbGUvaml0ZHVtcDwvY29kZT4KdXNpbmcgdGhlIG5hbWluZyBjb252ZW50aW9uIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+Jmx0O3Byb2Nlc3NfaWQmZ3Q7LmR1bXA8L2NvZGU+Lgo8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJQYXJhbWV0ZXJzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+UGFyYW1ldGVyczwvaDM+Ck5vbmUKPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iUmV0dXJuIHZhbHVlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+CiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPlJldHVybiB2YWx1ZTwvaDM+CiAgICAgICAgICAgIDxwPlJldHVybnMgYSB2YWxpZCA8Y29kZSBjbGFzcz0iY29kZSI+b3BfYWdlbnRfdDwvY29kZT4gaGFuZGxlIG9yIE5VTEwuCklmIE5VTEwgaXMgcmV0dXJuZWQsIDxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gaXMgc2V0IHRvIGluZGljYXRlIHRoZSBuYXR1cmUgb2YgdGhlIGVycm9yLiBGb3IgYSBsaXN0Cm9mIHBvc3NpYmxlIDxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gdmFsdWVzLCBzZWUgdGhlIG1hbiBwYWdlcyBmb3I6PC9wPgogICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29kZSI+CnN0YXQsIGNyZWF0LCBnZXR0aW1lb2ZkYXksIGZkb3BlbiwgZndyaXRlCjwvY29kZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iMi6gb3BfY2xvc2VfYWdlbnQiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGVwYWdlIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj48YSBpZD0ib3BfY2xvc2VfYWdlbnQiPjwvYT4yLqBvcF9jbG9zZV9hZ2VudDwvaDI+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmdW5jc3lub3BzaXMiPlVuaW5pdGlhbGl6ZSB0aGUgYWdlbnQgbGlicmFyeS4KPHByZSBjbGFzcz0iZnVuY3N5bm9wc2lzaW5mbyI+I2luY2x1ZGUgJmx0O29wYWdlbnQuaCZndDs8L3ByZT48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJGdW5jdGlvbiBzeW5vcHNpcyIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0iZnVuY3Byb3RvdHlwZS10YWJsZSI+PHRyPjx0ZD48Y29kZSBjbGFzcz0iZnVuY2RlZiI+aW50IDxiIGNsYXNzPSJmc2Z1bmMiPm9wX2Nsb3NlX2FnZW50PC9iPig8L2NvZGU+PC90ZD48dGQ+PHZhciBjbGFzcz0icGRwYXJhbSI+aGRsPC92YXI+PGNvZGU+KTwvY29kZT47PC90ZD48dGQ+oDwvdGQ+PC90cj48L3RhYmxlPjxkaXYgY2xhc3M9InBhcmFtZGVmLWxpc3QiPjxjb2RlPm9wX2FnZW50X3QgPHZhciBjbGFzcz0icGRwYXJhbSI+aGRsPC92YXI+PC9jb2RlPjs8L2Rpdj48ZGl2IGNsYXNzPSJmdW5jcHJvdG90eXBlLXNwYWNlciI+oDwvZGl2PjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9IkRlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+RGVzY3JpcHRpb248L2gzPgpGcmVlcyBhbGwgcmVzb3VyY2VzIGFuZCBjbG9zZXMgb3BlbiBmaWxlIGhhbmRsZXMuCjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9IlBhcmFtZXRlcnMiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5QYXJhbWV0ZXJzPC9oMz48ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGRsIDogPC9jb2RlPjwvZW0+SGFuZGxlIHJldHVybmVkIGZyb20gYW4gZWFybGllciBjYWxsIHRvCjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Bfb3Blbl9hZ2VudCgpPC9jb2RlPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9IlJldHVybiB2YWx1ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5SZXR1cm4gdmFsdWU8L2gzPgogICAgICAgICAgICA8cD5SZXR1cm5zIDAgb24gc3VjY2VzczsgLTEgb3RoZXJ3aXNlLiBJZiAtMSBpcyByZXR1cm5lZCwgPGNvZGUgY2xhc3M9ImNvZGUiPmVycm5vPC9jb2RlPiBpcyBzZXQKdG8gaW5kaWNhdGUgdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IuIAo8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IGlzIHNldCB0byBFSU5WQUwgaWYgYW4gaW52YWxpZCA8Y29kZSBjbGFzcz0iY29kZSI+b3BfYWdlbnRfdDwvY29kZT4KaGFuZGxlIGlzIHBhc3NlZC4gRm9yIGEgbGlzdCBvZiBvdGhlciBwb3NzaWJsZSA8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IHZhbHVlcywgc2VlIHRoZSBtYW4gcGFnZXMgZm9yOjwvcD4KICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvZGUiPmdldHRpbWVvZmRheSwgZndyaXRlPC9jb2RlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdDEiIHRpdGxlPSIzLqBvcF93cml0ZV9uYXRpdmVfY29kZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvcF93cml0ZV9uYXRpdmVfY29kZSI+PC9hPjMuoG9wX3dyaXRlX25hdGl2ZV9jb2RlPC9oMj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZ1bmNzeW5vcHNpcyI+V3JpdGUgaW5mb3JtYXRpb24gYWJvdXQgY29tcGlsZWQgY29kZSB0byBhIEpJVCBkdW1wIGZpbGUuCjxwcmUgY2xhc3M9ImZ1bmNzeW5vcHNpc2luZm8iPiNpbmNsdWRlICZsdDtvcGFnZW50LmgmZ3Q7PC9wcmU+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iRnVuY3Rpb24gc3lub3BzaXMiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9ImZ1bmNwcm90b3R5cGUtdGFibGUiPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImZ1bmNkZWYiPmludCA8YiBjbGFzcz0iZnNmdW5jIj5vcF93cml0ZV9uYXRpdmVfY29kZTwvYj4oPC9jb2RlPjwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPmhkbDwvdmFyPiwgPC90ZD48dGQ+oDwvdGQ+PC90cj48dHI+PHRkPqA8L3RkPjx0ZD48dmFyIGNsYXNzPSJwZHBhcmFtIj5zeW1ib2xfbmFtZTwvdmFyPiwgPC90ZD48dGQ+oDwvdGQ+PC90cj48dHI+PHRkPqA8L3RkPjx0ZD48dmFyIGNsYXNzPSJwZHBhcmFtIj52bWE8L3Zhcj4sIDwvdGQ+PHRkPqA8L3RkPjwvdHI+PHRyPjx0ZD6gPC90ZD48dGQ+PHZhciBjbGFzcz0icGRwYXJhbSI+Y29kZTwvdmFyPiwgPC90ZD48dGQ+oDwvdGQ+PC90cj48dHI+PHRkPqA8L3RkPjx0ZD48dmFyIGNsYXNzPSJwZHBhcmFtIj5jb2RlX3NpemU8L3Zhcj48Y29kZT4pPC9jb2RlPjs8L3RkPjx0ZD6gPC90ZD48L3RyPjwvdGFibGU+PGRpdiBjbGFzcz0icGFyYW1kZWYtbGlzdCI+PGNvZGU+b3BfYWdlbnRfdDx2YXIgY2xhc3M9InBkcGFyYW0iPmhkbDwvdmFyPjwvY29kZT47PGJyIC8+PGNvZGU+Y2hhciBjb25zdCAqPHZhciBjbGFzcz0icGRwYXJhbSI+c3ltYm9sX25hbWU8L3Zhcj48L2NvZGU+OzxiciAvPjxjb2RlPnVpbnQ2NF90PHZhciBjbGFzcz0icGRwYXJhbSI+dm1hPC92YXI+PC9jb2RlPjs8YnIgLz48Y29kZT52b2lkIGNvbnN0ICo8dmFyIGNsYXNzPSJwZHBhcmFtIj5jb2RlPC92YXI+PC9jb2RlPjs8YnIgLz48Y29kZT5jb25zdCB1bnNpZ25lZCBpbnQ8dmFyIGNsYXNzPSJwZHBhcmFtIj5jb2RlX3NpemU8L3Zhcj48L2NvZGU+OzwvZGl2PjxkaXYgY2xhc3M9ImZ1bmNwcm90b3R5cGUtc3BhY2VyIj6gPC9kaXY+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iRGVzY3JpcHRpb24iIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij48aDMgY2xhc3M9InRpdGxlIj5EZXNjcmlwdGlvbjwvaDM+ClNpZ25hbCB0aGUgZHluYW1pYyBnZW5lcmF0aW9uIG9mIG5hdGl2ZSBjb2RlIGZyb20gYSB2aXJ0dWFsIG1hY2hpbmUuCldyaXRlcyBhIEpJVCBkdW1wIHJlY29yZCB0byB0aGUgb3BlbiBKSVQgZHVtcCBmaWxlIHVzaW5nIHRoZSBwYXNzZWQgaW5mb3JtYXRpb24uCjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9IlBhcmFtZXRlcnMiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UGFyYW1ldGVyczwvaDM+CiAgICAgICAgICAgIDxwPgo8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGRsIDogPC9jb2RlPjwvZW0+SGFuZGxlIHJldHVybmVkIGZyb20gYW4gZWFybGllciBjYWxsIHRvCjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Bfb3Blbl9hZ2VudCgpPC9jb2RlPgo8L3A+CiAgICAgICAgICAgIDxwPgo8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+c3ltYm9sX25hbWUgOiA8L2NvZGU+PC9lbT5UaGUgbmFtZSBvZiB0aGUgc3ltYm9sIGJlaW5nIGR5bmFtaWNhbGx5IGNvbXBpbGVkLgogVGhpcyBuYW1lIGNhbiAoYW5kIHNob3VsZCkgY29udGFpbiBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRpc2FtYmlndWF0ZSBpdCBmcm9tCiBzeW1ib2xzIG9mIHRoZSBzYW1lIG5hbWU7IGUuZy4sIGNsYXNzLCBtZXRob2Qgc2lnbmF0dXJlLgo8L3A+CiAgICAgICAgICAgIDxwPgo8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dm1hIDogPC9jb2RlPjwvZW0+VmlydHVhbCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgZXhlY3V0YWJsZSBjb2RlCjwvcD4KICAgICAgICAgICAgPHA+CjxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5jb2RlIDogPC9jb2RlPjwvZW0+UG9pbnRlciB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbXBpbGVkIGNvZGUuCglUaGVvcmV0aWNhbGx5LCB0aGlzIG1heSBiZSBhIGRpZmZlcmVudCBsb2NhdGlvbiBmcm9tCgl0aGF0IGdpdmVuIGJ5IHRoZSB2bWEgYXJndW1lbnQuICBGb3Igc29tZSBKSVQgY29tcGlsZXJzLAoJb2J0YWluaW5nIHRoZSBjb2RlIG1heSBiZSBpbXByYWN0aWNhbC4gIEZvciB0aGlzIChvciBhbnkgb3RoZXIpCglyZWFzb24sIHRoZSBhZ2VudCBjYW4gY2hvb3NlIHRvIHBhc3MgTlVMTCBmb3IgdGhpcyBwYXJhZW10ZXIuCglJZiBOVUxMIGlzIHBhc3NlZCwgbm8gY29kZSB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSBKSVQgZHVtcAoJZmlsZS4KPC9wPgogICAgICAgICAgICA8cD4KPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvZGVfc2l6ZSA6IDwvY29kZT48L2VtPlNpemUgb2YgdGhlIGNvbXBpbGVkIGNvZGUKPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iUmV0dXJuIHZhbHVlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+CiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPlJldHVybiB2YWx1ZTwvaDM+CiAgICAgICAgICAgIDxwPlJldHVybnMgMCBvbiBzdWNjZXNzOyAtMSBvdGhlcndpc2UuIElmIC0xIGlzIHJldHVybmVkLCA8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IGlzIHNldAp0byBpbmRpY2F0ZSB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvci4gCjxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gaXMgc2V0IHRvIEVJTlZBTCBpZiBhbiBpbnZhbGlkIDxjb2RlIGNsYXNzPSJjb2RlIj5vcF9hZ2VudF90PC9jb2RlPgpoYW5kbGUgaXMgcGFzc2VkLiBGb3IgYSBsaXN0IG9mIG90aGVyIHBvc3NpYmxlIDxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gdmFsdWVzLCBzZWUgdGhlIG1hbiBwYWdlcyBmb3I6PC9wPgogICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29kZSI+Z2V0dGltZW9mZGF5LCBmd3JpdGU8L2NvZGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0MSIgdGl0bGU9IjQuoG9wX3dyaXRlX2RlYnVnX2xpbmVfaW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InRpdGxlIiBzdHlsZT0iY2xlYXI6IGJvdGgiPjxhIGlkPSJvcF93cml0ZV9kZWJ1Z19saW5lX2luZm8iPjwvYT40LqBvcF93cml0ZV9kZWJ1Z19saW5lX2luZm88L2gyPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZnVuY3N5bm9wc2lzIj5Xcml0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBhYm91dCBjb21waWxlZCBjb2RlIHRvIGEgSklUIGR1bXAgZmlsZS4KPHByZSBjbGFzcz0iZnVuY3N5bm9wc2lzaW5mbyI+I2luY2x1ZGUgJmx0O29wYWdlbnQuaCZndDs8L3ByZT48dGFibGUgYm9yZGVyPSIwIiBzdW1tYXJ5PSJGdW5jdGlvbiBzeW5vcHNpcyIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0iZnVuY3Byb3RvdHlwZS10YWJsZSI+PHRyPjx0ZD48Y29kZSBjbGFzcz0iZnVuY2RlZiI+aW50IDxiIGNsYXNzPSJmc2Z1bmMiPm9wX3dyaXRlX2RlYnVnX2xpbmVfaW5mbzwvYj4oPC9jb2RlPjwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPmhkbDwvdmFyPiwgPC90ZD48dGQ+oDwvdGQ+PC90cj48dHI+PHRkPqA8L3RkPjx0ZD48dmFyIGNsYXNzPSJwZHBhcmFtIj5jb2RlPC92YXI+LCA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+oDwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPm5yX2VudHJ5PC92YXI+LCA8L3RkPjx0ZD6gPC90ZD48L3RyPjx0cj48dGQ+oDwvdGQ+PHRkPjx2YXIgY2xhc3M9InBkcGFyYW0iPmNvbXBpbGVfbWFwPC92YXI+PGNvZGU+KTwvY29kZT47PC90ZD48dGQ+oDwvdGQ+PC90cj48L3RhYmxlPjxkaXYgY2xhc3M9InBhcmFtZGVmLWxpc3QiPjxjb2RlPm9wX2FnZW50X3Q8dmFyIGNsYXNzPSJwZHBhcmFtIj5oZGw8L3Zhcj48L2NvZGU+OzxiciAvPjxjb2RlPnZvaWQgY29uc3QgKjx2YXIgY2xhc3M9InBkcGFyYW0iPmNvZGU8L3Zhcj48L2NvZGU+OzxiciAvPjxjb2RlPnNpemVfdDx2YXIgY2xhc3M9InBkcGFyYW0iPm5yX2VudHJ5PC92YXI+PC9jb2RlPjs8YnIgLz48Y29kZT5zdHJ1Y3QgZGVidWdfbGluZV9pbmZvIGNvbnN0ICo8dmFyIGNsYXNzPSJwZHBhcmFtIj5jb21waWxlX21hcDwvdmFyPjwvY29kZT47PC9kaXY+PGRpdiBjbGFzcz0iZnVuY3Byb3RvdHlwZS1zcGFjZXIiPqA8L2Rpdj48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJEZXNjcmlwdGlvbiIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPjxoMyBjbGFzcz0idGl0bGUiPkRlc2NyaXB0aW9uPC9oMz4KQWRkIGRlYnVnIGxpbmUgaW5mb3JtYXRpb24gdG8gYSBwaWVjZSBvZiBjb2RlLiBBbiA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wX3dyaXRlX25hdGl2ZV9jb2RlKCk8L2NvZGU+CndpdGggdGhlIHNhbWUgY29kZSBwb2ludGVyIHNob3VsZCBoYXZlIG9jY3VycmVkIGJlZm9yZSB0aGlzIGNhbGwuIEl0J3Mgbm90Cm5lY2Vzc2FyeSB0byBwcm92aWRlIG9uZSBsaW5lbm8gaW5mb3JtYXRpb24gZW50cnkgcGVyIG1hY2hpbmUgaW5zdHJ1Y3Rpb247CnRoZSBhcnJheSBjYW4gY29udGFpbiBob2xlLgo8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiIHRpdGxlPSJQYXJhbWV0ZXJzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+CiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPlBhcmFtZXRlcnM8L2gzPgogICAgICAgICAgICA8cD4KPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmhkbCA6IDwvY29kZT48L2VtPkhhbmRsZSByZXR1cm5lZCBmcm9tIGFuIGVhcmxpZXIgY2FsbCB0bwo8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPm9wX29wZW5fYWdlbnQoKTwvY29kZT4KPC9wPgogICAgICAgICAgICA8cD4KPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvZGUgOiA8L2NvZGU+PC9lbT5Qb2ludGVyIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29kZSB3aXRoIGRlYnVnIGluZm8KPC9wPgogICAgICAgICAgICA8cD4KPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm5yX2VudHJ5IDogPC9jb2RlPjwvZW0+TnVtYmVyIG9mIGVudHJpZXMgaW4gY29tcGlsZV9tYXAKPC9wPgogICAgICAgICAgICA8cD4KPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbXBpbGVfbWFwIDogPC9jb2RlPjwvZW0+QXJyYXkgb2Ygc3RydWN0IGRlYnVnX2xpbmVfaW5mby4gIFNlZSB0aGUgSlZNVEkgYWdlbnQKbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBmb3IgYW4gZXhhbXBsZSBvZiB3aGF0IGluZm9ybWF0aW9uIHNob3VsZCBiZSByZXRyaWV2ZWQKZnJvbSBhIFZNIHRvIGZpbGwgb3V0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUuCjwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9IlJldHVybiB2YWx1ZSIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwLjVpbjsgbWFyZ2luLXJpZ2h0OiAwLjVpbjsiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5SZXR1cm4gdmFsdWU8L2gzPgogICAgICAgICAgICA8cD5SZXR1cm5zIDAgb24gc3VjY2VzczsgLTEgb3RoZXJ3aXNlLiBJZiAtMSBpcyByZXR1cm5lZCwgPGNvZGUgY2xhc3M9ImNvZGUiPmVycm5vPC9jb2RlPiBpcyBzZXQKdG8gaW5kaWNhdGUgdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IuIAo8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IGlzIHNldCB0byBFSU5WQUwgaWYgYW4gaW52YWxpZCA8Y29kZSBjbGFzcz0iY29kZSI+b3BfYWdlbnRfdDwvY29kZT4KaGFuZGxlIGlzIHBhc3NlZC4gRm9yIGEgbGlzdCBvZiBvdGhlciBwb3NzaWJsZSA8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IHZhbHVlcywgc2VlIHRoZSBtYW4gcGFnZXMgZm9yOjwvcD4KICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImNvZGUiPmdldHRpbWVvZmRheSwgZnRlbGwsIGZ3cml0ZTwvY29kZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3QxIiB0aXRsZT0iNS6gb3BfdW5sb2FkX25hdGl2ZV9jb2RlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlcGFnZSI+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0idGl0bGUiIHN0eWxlPSJjbGVhcjogYm90aCI+PGEgaWQ9Im9wX3VubG9hZF9uYXRpdmVfY29kZSI+PC9hPjUuoG9wX3VubG9hZF9uYXRpdmVfY29kZTwvaDI+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmdW5jc3lub3BzaXMiPldyaXRlIGluZm9ybWF0aW9uIHRvIHRoZSBKSVQgZHVtcCBmaWxlIGFib3V0IGludmFsaWRhdGVkIGNvbXBpbGVkIGNvZGUuCjxwcmUgY2xhc3M9ImZ1bmNzeW5vcHNpc2luZm8iPiNpbmNsdWRlICZsdDtvcGFnZW50LmgmZ3Q7PC9wcmU+PHRhYmxlIGJvcmRlcj0iMCIgc3VtbWFyeT0iRnVuY3Rpb24gc3lub3BzaXMiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9ImZ1bmNwcm90b3R5cGUtdGFibGUiPjx0cj48dGQ+PGNvZGUgY2xhc3M9ImZ1bmNkZWYiPmludCA8YiBjbGFzcz0iZnNmdW5jIj5vcF91bmxvYWRfbmF0aXZlX2NvZGU8L2I+KDwvY29kZT48L3RkPjx0ZD48dmFyIGNsYXNzPSJwZHBhcmFtIj5oZGw8L3Zhcj4sIDwvdGQ+PHRkPqA8L3RkPjwvdHI+PHRyPjx0ZD6gPC90ZD48dGQ+PHZhciBjbGFzcz0icGRwYXJhbSI+dm1hPC92YXI+PGNvZGU+KTwvY29kZT47PC90ZD48dGQ+oDwvdGQ+PC90cj48L3RhYmxlPjxkaXYgY2xhc3M9InBhcmFtZGVmLWxpc3QiPjxjb2RlPm9wX2FnZW50X3Q8dmFyIGNsYXNzPSJwZHBhcmFtIj5oZGw8L3Zhcj48L2NvZGU+OzxiciAvPjxjb2RlPnVpbnQ2NF90PHZhciBjbGFzcz0icGRwYXJhbSI+dm1hPC92YXI+PC9jb2RlPjs8L2Rpdj48ZGl2IGNsYXNzPSJmdW5jcHJvdG90eXBlLXNwYWNlciI+oDwvZGl2PjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9IkRlc2NyaXB0aW9uIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+PGgzIGNsYXNzPSJ0aXRsZSI+RGVzY3JpcHRpb248L2gzPgpTaWduYWwgdGhlIGludmFsaWRhdGlvbiBvZiBuYXRpdmUgY29kZSBmcm9tIGEgdmlydHVhbCBtYWNoaW5lLjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibm90ZSIgdGl0bGU9IlBhcmFtZXRlcnMiIHN0eWxlPSJtYXJnaW4tbGVmdDogMC41aW47IG1hcmdpbi1yaWdodDogMC41aW47Ij4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UGFyYW1ldGVyczwvaDM+CiAgICAgICAgICAgIDxwPgo8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+aGRsIDogPC9jb2RlPjwvZW0+SGFuZGxlIHJldHVybmVkIGZyb20gYW4gZWFybGllciBjYWxsIHRvCjxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Bfb3Blbl9hZ2VudCgpPC9jb2RlPiAKPC9wPgogICAgICAgICAgICA8cD4KPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnZtYSA6IDwvY29kZT48L2VtPlZpcnR1YWwgbWVtb3J5IGFkZHJlc3Mgb2YgdGhlIGNvbXBpbGVkIGNvZGUgYmVpbmcgdW5sb2FkZWQuCkFuIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+b3Bfd3JpdGVfbmF0aXZlX2NvZGUoKTwvY29kZT4gd2l0aCB0aGUgc2FtZSB2bWEgc2hvdWxkIGhhdmUgb2NjdXJyZWQgYmVmb3JlIHRoaXMgY2FsbC4KPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIiB0aXRsZT0iUmV0dXJuIHZhbHVlIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDAuNWluOyBtYXJnaW4tcmlnaHQ6IDAuNWluOyI+CiAgICAgICAgICAgIDxoMyBjbGFzcz0idGl0bGUiPlJldHVybiB2YWx1ZTwvaDM+CiAgICAgICAgICAgIDxwPlJldHVybnMgMCBvbiBzdWNjZXNzOyAtMSBvdGhlcndpc2UuIElmIC0xIGlzIHJldHVybmVkLCA8Y29kZSBjbGFzcz0iY29kZSI+ZXJybm88L2NvZGU+IGlzIHNldAp0byBpbmRpY2F0ZSB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvci4gCjxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gaXMgc2V0IHRvIEVJTlZBTCBpZiBhbiBpbnZhbGlkIDxjb2RlIGNsYXNzPSJjb2RlIj5vcF9hZ2VudF90PC9jb2RlPgpoYW5kbGUgaXMgcGFzc2VkLiBGb3IgYSBsaXN0IG9mIG90aGVyIHBvc3NpYmxlIDxjb2RlIGNsYXNzPSJjb2RlIj5lcnJubzwvY29kZT4gdmFsdWVzLCBzZWUgdGhlIG1hbiBwYWdlcyBmb3I6PC9wPgogICAgICAgICAgICA8Y29kZSBjbGFzcz0iY29kZSI+Z2V0dGltZW9mZGF5LCBmd3JpdGU8L2NvZGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2JvZHk+CjwvaHRtbD4K