PGh0bWw+Cgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4tdXMiPgo8bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1pY3Jvc29mdCBGcm9udFBhZ2UgNS4wIj4KPG1ldGEgbmFtZT0iUHJvZ0lkIiBjb250ZW50PSJGcm9udFBhZ2UuRWRpdG9yLkRvY3VtZW50Ij4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4KPHRpdGxlPlBvcnRhYmlsaXR5IEd1aWRlPC90aXRsZT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vLi4vLi4vZG9jL3NyYy9taW5pbWFsLmNzcyI+CjwvaGVhZD4KCjxib2R5IGJnY29sb3I9IiNGRkZGRkYiPgoKPGgxPgo8aW1nIGJvcmRlcj0iMCIgc3JjPSIuLi8uLi8uLi8uLi9ib29zdC5wbmciIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIzMDAiIGhlaWdodD0iODYiPlBhdGggCk5hbWUgUG9ydGFiaWxpdHkgCkd1aWRlPC9oMT4KCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9ImJvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIGJvcmRlcmNvbG9yPSIjMTExMTExIiBiZ2NvbG9yPSIjRDdFRUZGIiB3aWR0aD0iMTAwJSI+CiAgPHRyPgogICAgPHRkPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL2luZGV4Lmh0bSI+Qm9vc3QgSG9tZTwvYT4gJm5ic3A7Jm5ic3A7CiAgICA8YSBocmVmPSJpbmRleC5odG0iPkxpYnJhcnkgSG9tZTwvYT4gJm5ic3A7Jm5ic3A7CiAgICA8YSBocmVmPSJyZWZlcmVuY2UuaHRtbCI+UmVmZXJlbmNlPC9hPiAmbmJzcDsmbmJzcDsKICAgIDxhIGhyZWY9InR1dG9yaWFsLmh0bWwiPlR1dG9yaWFsPC9hPiAmbmJzcDsmbmJzcDsKICAgIDxhIGhyZWY9ImZhcS5odG0iPkZBUTwvYT4gJm5ic3A7Jm5ic3A7CiAgICA8YSBocmVmPSJwb3J0YWJpbGl0eV9ndWlkZS5odG0iPlBvcnRhYmlsaXR5PC9hPiAmbmJzcDsmbmJzcDsKICAgIDxhIGhyZWY9InYzLmh0bWwiPlYzIEludHJvPC9hPiAmbmJzcDsmbmJzcDsKICAgIDxhIGhyZWY9InYzX2Rlc2lnbi5odG1sIj5WMyBEZXNpZ248L2E+ICZuYnNwOyZuYnNwOwogICAgPGEgaHJlZj0iZGVwcmVjYXRlZC5odG1sIj5EZXByZWNhdGVkPC9hPiAmbmJzcDsmbmJzcDsKICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KCjxwPgo8YSBocmVmPSIjSW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PGJyPgo8YSBocmVmPSIjbmFtZV9jaGVja61fZnVuY3Rpb25zIj5uYW1lX2NoZWNrIGZ1bmN0aW9uczwvYT48YnI+CjxhIGhyZWY9IiNyZWNvbW1lbmRhdGlvbnMiPkZpbGUgYW5kIGRpcmVjdG9yeSBuYW1lIHJlY29tbWVuZGF0aW9uczwvYT48L3A+CjxoMj48YSBuYW1lPSJJbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L2gyPgo8cD5MaWtlIGFueSBvdGhlciBDKysgcHJvZ3JhbSB3aGljaCBwZXJmb3JtcyBJL08gb3BlcmF0aW9ucywgdGhlcmUgaXMgbm8gCmd1YXJhbnRlZSB0aGF0IGEgcHJvZ3JhbSB1c2luZyBCb29zdC5GaWxlc3lzdGVtIHdpbGwgYmUgcG9ydGFibGUgYmV0d2VlbiAKb3BlcmF0aW5nIHN5c3RlbXMuIENyaXRpY2FsIGFzcGVjdHMgb2YgSS9PIHN1Y2ggYXMgaG93IHRoZSBvcGVyYXRpbmcgc3lzdGVtIAppbnRlcnByZXRzIHBhdGhzIGFyZSB1bnNwZWNpZmllZCBieSB0aGUgQyBhbmQgQysrIFN0YW5kYXJkcy48L3A+CjxwPkl0IGlzIG5vdCBwb3NzaWJsZSB0byBrbm93ICBpZiBhIGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUgd2lsbCBiZSAKdmFsaWQgKGFuZCB0aHVzIHBvcnRhYmxlKSBmb3IgYW4gdW5rbm93biBvcGVyYXRpbmcgc3lzdGVtLiBUaGVyZSBpcyBhbHdheXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQgYW4gb3BlcmF0aW5nIHN5c3RlbSBjb3VsZCB1c2UgCm5hbWVzIHdoaWNoIGFyZSB1bnVzdWFsIChudW1iZXJzIGxlc3MgdGhhbiA0MDk2LCBmb3IgZXhhbXBsZSkgb3IgdmVyeSAKbGltaXRlZCBpbiBzaXplIChtYXhpbXVtIG9mIHNpeCBjaGFyYWN0ZXIgbmFtZXMsIGZvciBleGFtcGxlKS4gSW4gb3RoZXIgd29yZHMsIApwb3J0YWJpbGl0eSBpcyBuZXZlciBhYnNvbHV0ZTsgaXQgaXMgYWx3YXlzIHJlbGF0aXZlIHRvIHNwZWNpZmljIG9wZXJhdGluZyAKc3lzdGVtcyBvciAKZmlsZSBzeXN0ZW1zLjwvcD4KPHA+SXQgaXMgcG9zc2libGUsIGhvd2V2ZXIsIHRvIGtub3cgaW4gYWR2YW5jZSBpZiBhIGRpcmVjdG9yeSBvciBmaWxlIG5hbWUgaXMgbGlrZWx5IHRvIGJlIHZhbGlkIGZvciBhIHBhcnRpY3VsYXIgCm9wZXJhdGluZyBzeXN0ZW0uJm5ic3A7SXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgbmFtZXMgd2hpY2ggYXJlIApsaWtlbHkgdG8gYmUgcG9ydGFibGUgdG8gYSBsYXJnZSBudW1iZXIgb2YgbW9kZXJuIGFuZCBsZWdhY3kgb3BlcmF0aW5nIHN5c3RlbXMuPC9wPgoKPHA+QWxtb3N0IGFsbCBtb2Rlcm4gb3BlcmF0aW5nIHN5c3RlbXMgc3VwcG9ydCBtdWx0aXBsZSBmaWxlIHN5c3RlbXMuIEF0IHRoZSAKbWluaW11bSwgdGhleSBzdXBwb3J0IGEgbmF0aXZlIGZpbGUgc3lzdGVtIHBsdXMgYSBDRC1ST00gZmlsZSBzeXN0ZW0gKEdlbmVyYWxseSAKSVNPLTk2NjksIG9mdGVuIHdpdGggSnVsaWV0IGV4dGVuc2lvbnMpLjwvcD4KCjxwPkVhY2ggZmlsZSBzeXN0ZW0gCm1heSBoYXZlIGl0cyBvd24gbmFtaW5nIHJ1bGVzLiBGb3IgZXhhbXBsZSwgbW9kZXJuIHZlcnNpb25zIG9mIFdpbmRvd3Mgc3VwcG9ydCBOVEZTLCBGQVQsIEZBVDMyLCBhbmQgSVNPLTk2NjAgZmlsZSBzeXN0ZW1zLCBhbW9uZyBvdGhlcnMsIGFuZCB0aGUgbmFtaW5nIHJ1bGVzIApmb3IgdGhvc2UgZmlsZSBzeXN0ZW1zIGRpZmZlci4gRWFjaCBmaWxlIHN5c3RlbSBtYXkgYWxzbyBoYXZlIApkaWZmZXJpbmcgcnVsZXMgZm9yIG92ZXJhbGwgcGF0aCB2YWxpZGl0eSwgc3VjaCBhcyBhIG1heGltdW0gbGVuZ3RoIG9yIG51bWJlciBvZiAKc3ViLWRpcmVjdG9yaWVzLiBTb21lIGxlZ2FjeSBzeXN0ZW1zIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBkaXJlY3RvcnkgbmFtZXMgCnZlcnN1cyByZWd1bGFyIGZpbGUgbmFtZXMuPC9wPgoKPHA+QXMgYSByZXN1bHQsIEJvb3N0LkZpbGVzeXN0ZW0ncyA8aT5uYW1lX2NoZWNrPC9pPiBmdW5jdGlvbnMgCmNhbm5vdCBndWFyYW50ZWUgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWUgcG9ydGFiaWxpdHkuIFJhdGhlciwgdGhleSBhcmUgaW50ZW5kZWQgdG8gCmdpdmUgdGhlIHByb2dyYW1tZXIgYSAmcXVvdDtmaWdodGluZyBjaGFuY2UmcXVvdDsgdG8gYWNoaWV2ZSBwb3J0YWJpbGl0eSBieSBlYXJseSAKZGV0ZWN0aW9uIG9mIGNvbW1vbiBuYW1pbmcgcHJvYmxlbXMuPC9wPgoKPGgyPjxhIG5hbWU9Im5hbWVfY2hlY2utX2Z1bmN0aW9ucyI+bmFtZV9jaGVjayBmdW5jdGlvbnM8L2E+PC9oMj4KCjxwPkEgPGk+bmFtZV9jaGVjazwvaT4gZnVuY3Rpb24gCnJldHVybnMgdHJ1ZSBpZiBpdHMgYXJndW1lbnQgaXMgdmFsaWQgYXMgYSBkaXJlY3RvcnkgYW5kIHJlZ3VsYXIgZmlsZSBuYW1lIGZvciBhIApwYXJ0aWN1bGFyIG9wZXJhdGluZyBvciBmaWxlIHN5c3RlbS4gQSBudW1iZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZC48L3A+Cgo8cD5UaGUgPGEgaHJlZj0iI3BvcnRhYmxlX25hbWUiPnBvcnRhYmxlX25hbWU8L2E+IGZ1bmN0aW9uIGlzIG9mIHBhcnRpY3VsYXIgCmludGVyZXN0IGJlY2F1c2UgaXQgaGFzIGJlZW4gY2FyZWZ1bGx5IGRlc2lnbmVkIHRvIHByb3ZpZGUgd2lkZSAKcG9ydGFiaWxpdHkgeWV0IG5vdCBvdmVybHkgcmVzdHJpY3QgZXhwcmVzc2l2ZW5lc3MuPC9wPgoKPHRhYmxlIGJvcmRlcj0iMSIgY2VsbHBhZGRpbmc9IjUiIGNlbGxzcGFjaW5nPSIwIj4KICA8dHI+CiAgICA8dGQgYWxpZ249ImNlbnRlciIgY29sc3Bhbj0iMiI+PGI+TGlicmFyeSBTdXBwbGllZCBuYW1lX2NoZWNrIEZ1bmN0aW9uczwvYj48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPjxiPkZ1bmN0aW9uPC9iPjwvdGQ+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjxjb2RlPjxhIG5hbWU9InBvcnRhYmxlX3Bvc2l4X25hbWUiPnBvcnRhYmxlX3Bvc2l4X25hbWU8L2E+KGNvbnN0IAogICAgc3RkOjpzdHJpbmcmYW1wOzxpPiBuYW1lPC9pPik8L2NvZGU+PC90ZD4KICAgIDx0ZD48Yj5SZXR1cm5zOjwvYj4gPGk+dHJ1ZTwvaT4gaWYgPGNvZGU+IW5hbWUuZW1wdHkoKSAmYW1wOyZhbXA7IG5hbWU8L2NvZGU+IGNvbnRhaW5zIG9ubHkgdGhlIGNoYXJhY3RlcnMgCiAgICBzcGVjaWZpZWQgaW48aT4gUG9ydGFibGUgRmlsZW5hbWUgQ2hhcmFjdGVyIFNldDwvaT4gcnVsZXMgYXMgZGVmaW5lZCBpbiBieSAKICAgIFBPU0lYICg8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDc5MDQ5NzUvYmFzZWRlZnMveGJkX2NoYXAwMy5odG1sIj53d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwNzkwNDk3NS9iYXNlZGVmcy94YmRfY2hhcDAzLmh0bWw8L2E+KS48YnI+CiAgICBUaGUgYWxsb3dlZCBjaGFyYWN0ZXJzIGFyZSA8Y29kZT4wLTk8L2NvZGU+LCA8Y29kZT5hLXo8L2NvZGU+LCA8Y29kZT5BLVo8L2NvZGU+LCAKICAgIDxjb2RlPicuJzwvY29kZT4sIDxjb2RlPidfJzwvY29kZT4sIGFuZCA8Y29kZT4nLSc8L2NvZGU+LjxwPjxiPlVzZTo8L2I+IAogICAgYXBwbGljYXRpb25zIHdoaWNoIG11c3QgYmUgcG9ydGFibGUgdG8gYW55IFBPU0lYIHN5c3RlbS48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PGNvZGU+PGEgbmFtZT0id2luZG93c19uYW1lIj53aW5kb3dzX25hbWU8L2E+KGNvbnN0IAogICAgc3RkOjpzdHJpbmcmYW1wOzxpPiBuYW1lPC9pPik8L2NvZGU+PC90ZD4KICAgIDx0ZD48Yj5SZXR1cm5zOjwvYj4mbmJzcDsgPGk+dHJ1ZTwvaT4gaWYgPGNvZGU+IW5hbWUuZW1wdHkoKSAmYW1wOyZhbXA7IG5hbWU8L2NvZGU+IGNvbnRhaW5zIAogICAgb25seSB0aGUgY2hhcmFjdGVycyBzcGVjaWZpZWQgYnkgdGhlIFdpbmRvd3MgcGxhdGZvcm0gU0RLIGFzIHZhbGlkIAogICAgcmVnYXJkbGVzcyBvZiB0aGUgZmlsZSBzeXN0ZW0gPGNvZGU+JmFtcDsmYW1wOyAobmFtZTwvY29kZT4gaXMgPGNvZGU+JnF1b3Q7LiZxdW90OzwvY29kZT4gb3IKICAgIDxjb2RlPiZxdW90Oy4uJnF1b3Q7PC9jb2RlPiZuYnNwOyBvciBkb2VzIG5vdCBlbmQgd2l0aCBhIHRyYWlsaW5nIHNwYWNlIG9yIHBlcmlvZDxjb2RlPik8L2NvZGU+LiZuYnNwOyAKICAgIFRoZSBhbGxvd2VkIGNoYXJhY3RlcnMgYXJlIGFueXRoaW5nIGV4Y2VwdCA8Y29kZT4weDAtMHgxRjwvY29kZT4sIDxjb2RlPicmbHQ7JzwvY29kZT4sCiAgICA8Y29kZT4nJmd0Oyc8L2NvZGU+LCA8Y29kZT4nOic8L2NvZGU+LCA8Y29kZT4nJnF1b3Q7JzwvY29kZT4sIDxjb2RlPicvJzwvY29kZT4sCiAgICA8Y29kZT4nXCc8L2NvZGU+LCBhbmQgPGNvZGU+J3wnPC9jb2RlPi48cD4KICAgIDxiPlVzZTo8L2I+IGFwcGxpY2F0aW9ucyB3aGljaCBtdXN0IGJlIHBvcnRhYmxlIHRvIFdpbmRvd3MuPC9wPgogICAgPHA+PGI+Tm90ZTo8L2I+IFJlc2VydmVkIGRldmljZSBuYW1lcyBhcmUgbm90IHZhbGlkIGFzIGZpbGUgbmFtZXMsIGJ1dCBhcmUgCiAgICBub3QgYmVpbmcgZGV0ZWN0ZWQgYmVjYXVzZSB0aGV5IGFyZSBzdGlsbCB2YWxpZCBhcyBhIHBhdGguIFNwZWNpZmljYWxseSwgCiAgICBDT04sIFBSTiwgQVVYLCBDTE9DSyQsIE5VTCwgQ09NWzEtOV0sIExQVFsxLTldLCBhbmQgdGhlc2UgbmFtZXMgZm9sbG93ZWQgYnkgCiAgICBhbiBleHRlbnNpb24gKGZvciBleGFtcGxlLCBOVUwudHg3KS48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PGNvZGU+PGEgbmFtZT0icG9ydGFibGVfbmFtZSI+cG9ydGFibGVfbmFtZTwvYT4oY29uc3QgCiAgICBzdGQ6OnN0cmluZyZhbXA7PGk+IG5hbWU8L2k+KTwvY29kZT48L3RkPgogICAgPHRkPjxiPlJldHVybnM6PC9iPiA8Y29kZT4mbmJzcDt3aW5kb3dzX25hbWUobmFtZSkgJmFtcDsmYW1wOyBwb3J0YWJsZV9wb3NpeF9uYW1lKG5hbWUpIAogICAgJmFtcDsmYW1wOyAobmFtZTwvY29kZT4gaXMgPGNvZGU+JnF1b3Q7LiZxdW90OzwvY29kZT4gb3IgPGNvZGU+JnF1b3Q7Li4mcXVvdDs8L2NvZGU+LCBhbmQgdGhlIGZpcnN0IGNoYXJhY3RlciBub3QgYSBwZXJpb2Qgb3IgaHlwaGVuPGNvZGU+KTwvY29kZT4uPHA+PGI+VXNlOjwvYj4gYXBwbGljYXRpb25zIHdoaWNoIG11c3QgYmUgcG9ydGFibGUgdG8gYSB3aWRlIHZhcmlldHkgb2YgCiAgICBtb2Rlcm4gb3BlcmF0aW5nIHN5c3RlbXMsIGxhcmdlIGFuZCBzbWFsbCwgYW5kIHRvIHNvbWUgbGVnYWN5IE8vUydzLiBUaGUgCiAgICBmaXJzdCBjaGFyYWN0ZXIgbm90IGEgcGVyaW9kIG9yIGh5cGhlbiByZXN0cmljdGlvbiBpcyBhIHJlcXVpcmVtZW50IG9mIAogICAgc2V2ZXJhbCBvbGRlciBvcGVyYXRpbmcgc3lzdGVtcy48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PGNvZGU+PGEgbmFtZT0icG9ydGFibGVfZGlyZWN0b3J5X25hbWUiPgogICAgcG9ydGFibGVfZGlyZWN0b3J5X25hbWU8L2E+KGNvbnN0IHN0ZDo6c3RyaW5nJmFtcDs8aT4gbmFtZTwvaT4pPC9jb2RlPjwvdGQ+CiAgICA8dGQ+PGI+UmV0dXJuczo8L2I+IDxjb2RlPnBvcnRhYmxlX25hbWUobmFtZSkgJmFtcDsmYW1wOyAobmFtZTwvY29kZT4gaXMgPGNvZGU+JnF1b3Q7LiZxdW90OzwvY29kZT4gCiAgICBvciA8Y29kZT4mcXVvdDsuLiZxdW90OzwvY29kZT4mbmJzcDsgb3IgY29udGFpbnMgbm8gcGVyaW9kczxjb2RlPik8L2NvZGU+LjxwPjxiPlVzZTo8L2I+IGFwcGxpY2F0aW9ucyAKICAgIHdoaWNoIG11c3QgYmUgcG9ydGFibGUgdG8gYSB3aWRlIHZhcmlldHkgb2YgcGxhdGZvcm1zLCBpbmNsdWRpbmcgT3BlblZNUy48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PGNvZGU+PGEgbmFtZT0icG9ydGFibGVfZmlsZV9uYW1lIj4KICAgIHBvcnRhYmxlX2ZpbGVfbmFtZTwvYT4oY29uc3Qgc3RkOjpzdHJpbmcmYW1wOzxpPiBuYW1lPC9pPik8L2NvZGU+PC90ZD4KICAgIDx0ZD48Yj5SZXR1cm5zOjwvYj4gPGNvZGU+cG9ydGFibGVfbmFtZShuYW1lKSAmYW1wOyZhbXA7IDwvY29kZT5hbnkgcGVyaW9kIGlzIGZvbGxvd2VkIGJ5IG9uZSB0byB0aHJlZSBhZGRpdGlvbmFsIAogICAgbm9uLXBlcmlvZCBjaGFyYWN0ZXJzLjxwPjxiPlVzZTo8L2I+IAogICAgYXBwbGljYXRpb25zIHdoaWNoIG11c3QgYmUgcG9ydGFibGUgdG8gYSB3aWRlIHZhcmlldHkgb2YgcGxhdGZvcm1zLCAKICAgIGluY2x1ZGluZyBPcGVuVk1TIGFuZCBvdGhlciBzeXN0ZW1zIHdoaWNoIGhhdmUgYSBjb25jZXB0IG9mICZxdW90O2ZpbGUgZXh0ZW5zaW9uJnF1b3Q7IAogICAgYnV0IGxpbWl0IGl0cyBsZW5ndGguPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjxjb2RlPjxhIG5hbWU9Im5hdGl2ZSI+bmF0aXZlPC9hPihjb25zdCAKICAgIHN0ZDo6c3RyaW5nJmFtcDs8aT4gbmFtZTwvaT4pPC9jb2RlPjwvdGQ+CiAgICA8dGQ+PGI+UmV0dXJuczo8L2I+IEltcGxlbWVudGF0aW9uIGRlZmluZWQuIFJldHVybnMgPGk+CiAgICB0cnVlPC9pPiBmb3IgbmFtZXMgY29uc2lkZXJlZCB2YWxpZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIG5hdGl2ZSBmaWxlIAogICAgc3lzdGVtcy48cD48Yj5Ob3RlOjwvYj4gTWF5IHJldHVybiA8aT50cnVlPC9pPiBmb3Igc29tZSBuYW1lcyBub3QgY29uc2lkZXJlZCB2YWxpZCAKICAgIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHVuZGVyIGFsbCBjb25kaXRpb25zIChwYXJ0aWN1bGFybHkgb24gb3BlcmF0aW5nIHN5c3RlbXMgd2hpY2ggc3VwcG9ydCAKICAgIG11bHRpcGxlIGZpbGUgc3lzdGVtcy4pPC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKPGgyPkZpbGUgYW5kIGRpcmVjdG9yeSBuYW1lIDxhIG5hbWU9InJlY29tbWVuZGF0aW9ucyI+cmVjb21tZW5kYXRpb25zPC9hPjwvaDI+Cgo8dGFibGUgYm9yZGVyPSIxIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjAiPgoKICA8dHI+CiAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPjxzdHJvbmc+UmVjb21tZW5kYXRpb248L3N0cm9uZz48L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj48c3Ryb25nPlJhdGlvbmFsZTwvc3Ryb25nPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgdmFsaWduPSJ0b3AiPkxpbWl0IGZpbGUgYW5kIGRpcmVjdG9yeSBuYW1lcyB0byB0aGUgY2hhcmFjdGVycyBBLVosIGEteiwgMC05LCBwZXJpb2QsIGh5cGhlbiwgYW5kCiAgICB1bmRlcnNjb3JlLjxwPlVzZSBhbnkgb2YgdGhlICZxdW90O3BvcnRhYmxlXyZxdW90OyA8YSBocmVmPSIjbmFtZV9jaGVja61fZnVuY3Rpb25zIj4KICAgIG5hbWUgY2hlY2sgZnVuY3Rpb25zPC9hPiB0byBlbmZvcmNlIHRoaXMgcmVjb21tZW5kYXRpb24uPC90ZD4KICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlc2UgYXJlIHRoZSBjaGFyYWN0ZXJzIHNwZWNpZmllZCBieSB0aGUgUE9TSVggc3RhbmRhcmQgZm9yIHBvcnRhYmxlIGRpcmVjdG9yeSBhbmQKICAgIGZpbGUgbmFtZXMsIGFuZCBhcmUgYWxzbyB2YWxpZCBmb3IgV2luZG93cywgTWFjLCBhbmQgbWFueSBvdGhlciBtb2Rlcm4gZmlsZSBzeXN0ZW1zLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgdmFsaWduPSJ0b3AiPkRvIG5vdCB1c2UgYSBwZXJpb2Qgb3IgaHlwaGVuIGFzIHRoZSBmaXJzdCAKICAgIGNoYXJhY3RlciBvZiBhIG5hbWUuIERvIG5vdCB1c2UgcGVyaW9kIGFzIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBhIG5hbWUuPHA+CiAgICBVc2UgPGEgaHJlZj0iI3BvcnRhYmxlX25hbWUiPnBvcnRhYmxlX25hbWU8L2E+LAogICAgPGEgaHJlZj0iI3BvcnRhYmxlX2RpcmVjdG9yeV9uYW1lIj5wb3J0YWJsZV9kaXJlY3RvcnlfbmFtZTwvYT4sIG9yCiAgICA8YSBocmVmPSIjcG9ydGFibGVfZmlsZV9uYW1lIj5wb3J0YWJsZV9maWxlX25hbWU8L2E+IHRvIGVuZm9yY2UgdGhpcyAKICAgIHJlY29tbWVuZGF0aW9uLjwvdGQ+CiAgICA8dGQgdmFsaWduPSJ0b3AiPlNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgdHJlYXQgaGF2ZSBzcGVjaWFsIHJ1bGVzIGZvciB0aGUgCiAgICBmaXJzdCBjaGFyYWN0ZXIgb2YgbmFtZXMuIFBPU0lYLCBmb3IgZXhhbXBsZS4gV2luZG93cyBkb2VzIG5vdCBwZXJtaXQgcGVyaW9kIAogICAgYXMgdGhlIGxhc3QgY2hhcmFjdGVyLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgdmFsaWduPSJ0b3AiPkRvIG5vdCB1c2UgcGVyaW9kcyBpbiBkaXJlY3RvcnkgbmFtZXMuPHA+VXNlCiAgICA8YSBocmVmPSIjcG9ydGFibGVfZGlyZWN0b3J5X25hbWUiPnBvcnRhYmxlX2RpcmVjdG9yeV9uYW1lPC9hPiB0byBlbmZvcmNlIAogICAgdGhpcyByZWNvbW1lbmRhdGlvbi48L3RkPgogICAgPHRkIHZhbGlnbj0idG9wIj5SZXF1aXJlbWVudCBmb3IgSVNPLTk2NjAgd2l0aG91dCBKdWxpZXQgZXh0ZW5zaW9ucywgT3BlblZNUyBmaWxlc3lzdGVtLCBhbmQgb3RoZXIgbGVnYWN5IHN5c3RlbXMuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB2YWxpZ249InRvcCI+RG8gbm90IHVzZSBtb3JlIHRoYXQgb25lIHBlcmlvZCBpbiBhIGZpbGUgbmFtZSwgYW5kIGxpbWl0IAogICAgdGhlIHBvcnRpb24gYWZ0ZXIgdGhlIHBlcmlvZCB0byB0aHJlZSBjaGFyYWN0ZXJzLjxwPlVzZQogICAgPGEgaHJlZj0iI3BvcnRhYmxlX2ZpbGVfbmFtZSI+cG9ydGFibGVfZmlsZV9uYW1lPC9hPiB0byBlbmZvcmNlIHRoaXMgCiAgICByZWNvbW1lbmRhdGlvbi48L3RkPgogICAgPHRkIHZhbGlnbj0idG9wIj5SZXF1aXJlbWVudCBmb3IgSVNPLTk2NjAgbGV2ZWwgMSwgT3BlblZNUyBmaWxlc3lzdGVtLCBhbmQgCiAgICBvdGhlciBsZWdhY3kgc3lzdGVtcy4gPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB2YWxpZ249InRvcCI+RG8gbm90IGFzc3VtZSBuYW1lcyBhcmUgY2FzZSBzZW5zaXRpdmUuIEZvciBleGFtcGxlLCBkbyBub3QgZXhwZWN0ZWQgYSBkaXJlY3RvcnkgdG8gYmUKICAgIGFibGUgdG8gaG9sZCBzZXBhcmF0ZSBlbGVtZW50cyBuYW1lZCAmcXVvdDtGb28mcXVvdDsgYW5kICZxdW90O2ZvbyZxdW90Oy4gPC90ZD4KICAgIDx0ZCB2YWxpZ249InRvcCI+U29tZSBmaWxlIHN5c3RlbXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUuJm5ic3A7IEZvciBleGFtcGxlLCBXaW5kb3dzIAogICAgTlRGUyBpcyBjYXNlIHByZXNlcnZpbmcgaW4gdGhlIHdheSBpdCBzdG9yZXMgbmFtZXMsIGJ1dCBjYXNlIGluc2Vuc2l0aXZlIGluIAogICAgc2VhcmNoaW5nIGZvciBuYW1lcyAodW5sZXNzIHJ1bm5pbmcgdW5kZXIgdGhlIFBPU0lYIHN1Yi1zeXN0ZW0sIGl0IHdoaWNoIAogICAgY2FzZSBpdCBkb2VzIGNhc2Ugc2Vuc2l0aXZlIHNlYXJjaGVzKS4gPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB2YWxpZ249InRvcCI+RG8gbm90IGFzc3VtZSBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZS4mbmJzcDsgRm9yIGV4YW1wbGUsIGRvIG5vdCBleHBlY3QgYSBmaWxlCiAgICBjcmVhdGVkIHdpdGggdGhlIG5hbWUgb2YgJnF1b3Q7Rm9vJnF1b3Q7IHRvIGJlIG9wZW5lZCBzdWNjZXNzZnVsbHkgd2l0aCB0aGUgbmFtZSBvZiAmcXVvdDtmb28mcXVvdDsuPC90ZD4KICAgIDx0ZCB2YWxpZ249InRvcCI+U29tZSBmaWxlIHN5c3RlbXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLiZuYnNwOyBGb3IgZXhhbXBsZSwgUE9TSVguPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCB2YWxpZ249InRvcCI+RG9uJ3QgdXNlIGh5cGhlbnMgaW4gbmFtZXMuPC90ZD4KICAgIDx0ZCB2YWxpZ249InRvcCI+SVNPLTk2NjAgbGV2ZWwgMSwgYW5kIHBvc3NpYmx5IHNvbWUgbGVnYWN5IHN5c3RlbXMsIGRvIG5vdCBwZXJtaXQgCiAgICBoeXBoZW5zLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgdmFsaWduPSJ0b3AiPkxpbWl0IHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyByZXR1cm5lZCBieSBwYXRoOjpzdHJpbmcoKSB0byAKICAgIDI1NSBjaGFyYWN0ZXJzLiZuYnNwOyAKICAgIE5vdGUgdGhhdCBJU08gOTY2MCBoYXMgYW4gZXhwbGljaXQgZGlyZWN0b3J5IHRyZWUgZGVwdGggbGltaXQgb2YgOCwgYWx0aG91Z2ggCiAgICB0aGlzIGRlcHRoIGxpbWl0IGlzIHJlbW92ZWQgYnkgdGhlIEp1bGlldCBleHRlbnNpb25zLjwvdGQ+CiAgICA8dGQgdmFsaWduPSJ0b3AiPlNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgcGxhY2UgbGltaXRzIG9uIHRoZSB0b3RhbCBwYXRoIGxlbmd0aC4mbmJzcDsgRm9yIGV4YW1wbGUsCiAgICBXaW5kb3dzIDIwMDAgbGltaXRzIHBhdGhzIHRvIDI2MCBjaGFyYWN0ZXJzIHRvdGFsIGxlbmd0aC48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIHZhbGlnbj0idG9wIj5MaW1pdCB0aGUgbGVuZ3RoIG9mIGFueSBvbmUgbmFtZSBpbiBhIHBhdGguJm5ic3A7IFBpY2sgdGhlIHNwZWNpZmljIGxpbWl0IGFjY29yZGluZyB0bwogICAgdGhlIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBvciBmaWxlIHN5c3RlbXMgeW91IHdpc2ggcG9ydGFiaWxpdHkgdG86PGJyPgogICAgJm5ic3A7Jm5ic3A7IE5vdCBhIGNvbmNlcm46OiZuYnNwOyBQT1NJWCwgV2luZG93cywgTUFDIE9TIFguPGJyPgogICAgJm5ic3A7Jm5ic3A7IDMxIGNoYXJhY3RlcnM6IENsYXNzaWMgTWFjIE9TPGJyPgombmJzcDsmbmJzcDsgOCBjaGFyYWN0ZXJzICsgcGVyaW9kICsgMyBjaGFyYWN0ZXJzOiBJU08gOTY2MCBsZXZlbCAxPGJyPgombmJzcDsmbmJzcDsgMzIgY2hhcmFjdGVyczogSVNPIDk2NjAgbGV2ZWwgMiBhbmQgMzxicj4KJm5ic3A7Jm5ic3A7IDEyOCBjaGFyYWN0ZXJzICg2NCBpZiBVbmljb2RlKTogSVNPIDk2NjAgd2l0aCBKdWxpZXQgZXh0ZW5zaW9uczwvdGQ+CiAgICA8dGQgdmFsaWduPSJ0b3AiPkxpbWl0aW5nIG5hbWUgbGVuZ3RoIGNhbiBtYXJrZWRseSByZWR1Y2UgdGhlIGV4cHJlc3NpdmVuZXNzIG9mIGZpbGUgbmFtZXMsIHlldCBwbGFjaW5nCiAgICBvbmx5IHZlcnkgaGlnaCBsaW1pdHMgb24gbGVuZ3RocyBpbmhpYml0cyB3aWRlc3QgcG9ydGFiaWxpdHkuPC90ZD4KICA8L3RyPgo8L3RhYmxlPgoKPGhyPgo8cD5SZXZpc2VkCjwhLS13ZWJib3QgYm90PSJUaW1lc3RhbXAiIFMtVHlwZT0iRURJVEVEIiBTLUZvcm1hdD0iJWQgJUIsICVZIiBzdGFydHNwYW4gLS0+MTcgRmVicnVhcnksIDIwMTA8IS0td2ViYm90IGJvdD0iVGltZXN0YW1wIiBlbmRzcGFuIGktY2hlY2tzdW09IjQwNTM2IiAtLT48L3A+Cgo8cD6pIENvcHlyaWdodCBCZW1hbiBEYXdlcywgMjAwMiwgMjAwMzwvcD4KPHA+IFVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZSBCb29zdCBTb2Z0d2FyZSAKTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vLi4vLi4vTElDRU5TRV8xXzAudHh0Ij4KTElDRU5TRV8xXzAudHh0PC9hPiBvciBjb3B5IGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+Cnd3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L3A+Cgo8L2JvZHk+Cgo8L2h0bWw+