PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgo8aHRtbD4KPGhlYWQ+CiAgPHRpdGxlPlRoZSBYTUwgQyBsaWJyYXJ5IGZvciBHbm9tZTwvdGl0bGU+CiAgPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJhbWF5YSBWNC4xIj4KICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+CjwvaGVhZD4KCjxib2R5IGJnY29sb3I9IiNmZmZmZmYiPgo8cD48YSBocmVmPSJodHRwOi8vd3d3Lmdub21lLm9yZy8iPjxpbWcgc3JjPSJzbWFsbGZvb3Rvbmx5LmdpZiIKYWx0PSJHbm9tZSBMb2dvIj48L2E+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvU3RhdHVzIj48aW1nIHNyYz0idzNjLnBuZyIKYWx0PSJXM0MgTG9nbyI+PC9hPjxhIGhyZWY9Imh0dHA6Ly93d3cucmVkaGF0LmNvbSI+PGltZyBzcmM9InJlZGhhdC5naWYiCmFsdD0iUmVkIEhhdCBMb2dvIj48L2E+PC9wPgoKPGgxIGFsaWduPSJjZW50ZXIiPlRoZSBYTUwgQyBsaWJyYXJ5IGZvciBHbm9tZTwvaDE+Cgo8aDIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+bGlieG1sLCBhLmsuYS4gZ25vbWUteG1sPC9oMj4KCjxwPjwvcD4KPHVsPgogIDxsaT48YSBocmVmPSIjSW50cm9kdWN0aSI+SW50cm9kdWN0aW9uPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNEb2N1bWVudGF0Ij5Eb2N1bWVudGF0aW9uPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNSZXBvcnRpbmciPlJlcG9ydGluZyBidWdzIGFuZCBnZXR0aW5nIGhlbHA8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI2hlbHAiPmhvdyB0byBoZWxwPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNEb3dubG9hZHMiPkRvd25sb2FkczwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjTmV3cyI+TmV3czwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjWE1MIj5YTUw8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI1hTTFQiPlhTTFQ8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI3RyZWUiPlRoZSB0cmVlIG91dHB1dDwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjaW50ZXJmYWNlIj5UaGUgU0FYIGludGVyZmFjZTwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjbGlicmFyeSI+VGhlIFhNTCBsaWJyYXJ5IGludGVyZmFjZXM8L2E+CiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSIjSW52b2tpbmciPkludm9raW5nIHRoZSBwYXJzZXI6IHRoZSBwdWxsIHdheTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI0ludm9raW5nIj5JbnZva2luZyB0aGUgcGFyc2VyOiB0aGUgcHVzaCB3YXk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNJbnZva2luZzIiPkludm9raW5nIHRoZSBwYXJzZXI6IHRoZSBTQVggaW50ZXJmYWNlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjQnVpbGRpbmciPkJ1aWxkaW5nIGEgdHJlZSBmcm9tIHNjcmF0Y2g8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNUcmF2ZXJzaW5nIj5UcmF2ZXJzaW5nIHRoZSB0cmVlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjTW9kaWZ5aW5nIj5Nb2RpZnlpbmcgdGhlIHRyZWU8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNTYXZpbmciPlNhdmluZyB0aGUgdHJlZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI0NvbXByZXNzaW8iPkNvbXByZXNzaW9uPC9hPjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxhIGhyZWY9IiNFbnRpdGllcyI+RW50aXRpZXMgb3Igbm8gZW50aXRpZXM8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI05hbWVzcGFjZXMiPk5hbWVzcGFjZXM8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI1ZhbGlkYXRpb24iPlZhbGlkYXRpb248L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iI1ByaW5jaXBsZXMiPkRPTSBwcmluY2lwbGVzPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9IiNyZWFsIj5BIHJlYWwgZXhhbXBsZTwvYT48L2xpPgogIDxsaT48YSBocmVmPSIjQ29udHJpYnV0aSI+Q29udHJpYnV0aW9uczwvYT48L2xpPgo8L3VsPgoKPHA+U2VwYXJhdGUgZG9jdW1lbnRzOjwvcD4KPHVsPgogIDxsaT48YSBocmVmPSJ1cGdyYWRlLmh0bWwiPnVwZ3JhZGUgaW5zdHJ1Y3Rpb25zIGZvciBtaWdyYXRpbmcgdG8KICBsaWJ4bWwyPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9ImVuY29kaW5nLmh0bWwiPmxpYnhtbCBJbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0PC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9InhtbGlvLmh0bWwiPmxpYnhtbCBJbnB1dC9PdXRwdXQgaW50ZXJmYWNlczwvYT48L2xpPgogIDxsaT48YSBocmVmPSJ4bWxtZW0uaHRtbCI+bGlieG1sIE1lbW9yeSBpbnRlcmZhY2VzPC9hPjwvbGk+CiAgPGxpPjxhIGhyZWY9InhtbGR0ZC5odG1sIj5hIHNob3J0IGludHJvZHVjdGlvbiBhYm91dCBEVERzIGFuZAogIGxpYnhtbDwvYT48L2xpPgogIDxsaT48YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvWFNMVC8iPnRoZSBsaWJ4c2x0IHBhZ2U8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5jcy51bmliby5pdC9+Y2FzYXJpbmkvZ2RvbWUyLyI+dGhlIGdkb21lMiBwYWdlOiBhCiAgICBzdGFuZGFyZCBET00gaW50ZXJmYWNlIGZvciBsaWJ4bWwyPC9hPjwvbGk+CjwvdWw+Cgo8aDI+PGEgbmFtZT0iSW50cm9kdWN0aSI+SW50cm9kdWN0aW9uPC9hPjwvaDI+Cgo8cD5UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBsaWJ4bWwsIHRoZSA8YQpocmVmPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvIj5YTUw8L2E+IEMgbGlicmFyeSBkZXZlbG9wcGVkIGZvciB0aGUgPGEKaHJlZj0iaHR0cDovL3d3dy5nbm9tZS5vcmcvIj5Hbm9tZTwvYT4gcHJvamVjdC4gPGEKaHJlZj0iaHR0cDovL3d3dy53My5vcmcvWE1MLyI+WE1MIGlzIGEgc3RhbmRhcmQ8L2E+IGZvciBidWlsZGluZyB0YWctYmFzZWQKc3RydWN0dXJlZCBkb2N1bWVudHMvZGF0YS48L3A+Cgo8cD5IZXJlIGFyZSBzb21lIGtleSBwb2ludHMgYWJvdXQgbGlieG1sOjwvcD4KPHVsPgogIDxsaT5MaWJ4bWwgZXhwb3J0cyBQdXNoIGFuZCBQdWxsIHR5cGUgcGFyc2VyIGludGVyZmFjZXMgZm9yIGJvdGggWE1MIGFuZAogICAgSFRNTC48L2xpPgogIDxsaT5MaWJ4bWwgY2FuIGRvIERURCB2YWxpZGF0aW9uIGF0IHBhcnNlIHRpbWUsIHVzaW5nIGEgcGFyc2VkIGRvY3VtZW50CiAgICBpbnN0YW5jZSwgb3Igd2l0aCBhbiBhcmJpdHJhcnkgRFRELjwvbGk+CiAgPGxpPkxpYnhtbCBub3cgaW5jbHVkZXMgbmVhcmx5IGNvbXBsZXRlIDxhCiAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94cGF0aCI+WFBhdGg8L2E+LCA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHB0ciI+WFBvaW50ZXI8L2E+IGFuZCA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveGluY2x1ZGUiPlhJbmNsdWRlPC9hPiBpbXBsZW1lbnRhdGlvbnMuPC9saT4KICA8bGk+SXQgaXMgd3JpdHRlbiBpbiBwbGFpbiBDLCBtYWtpbmcgYXMgZmV3IGFzc3VtcHRpb25zIGFzIHBvc3NpYmxlLCBhbmQKICAgIHN0aWNraW5nIGNsb3NlbHkgdG8gQU5TSSBDL1BPU0lYIGZvciBlYXN5IGVtYmVkZGluZy4gV29ya3Mgb24KICAgIExpbnV4L1VuaXgvV2luZG93cywgcG9ydGVkIHRvIGEgbnVtYmVyIG9mIG90aGVyIHBsYXRmb3Jtcy48L2xpPgogIDxsaT5CYXNpYyBzdXBwb3J0IGZvciBIVFRQIGFuZCBGVFAgY2xpZW50IGFsbG93aW5nIGFwbGljYXRpb25zIHRvIGZldGNoCiAgICByZW1vdGUgcmVzb3VyY2VzPC9saT4KICA8bGk+VGhlIGRlc2lnbiBpcyBtb2R1bGFyLCBtb3N0IG9mIHRoZSBleHRlbnNpb25zIGNhbiBiZSBjb21waWxlZCBvdXQuPC9saT4KICA8bGk+VGhlIGludGVybmFsIGRvY3VtZW50IHJlcGVzZW50YXRpb24gaXMgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIDxhCiAgICBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9ET00vIj5ET008L2E+IGludGVyZmFjZXMuPC9saT4KICA8bGk+TGlieG1sIGFsc28gaGFzIGEgPGEgaHJlZj0iaHR0cDovL3d3dy5tZWdnaW5zb24uY29tL1NBWC9pbmRleC5odG1sIj5TQVgKICAgIGxpa2UgaW50ZXJmYWNlPC9hPjsgdGhlIGludGVyZmFjZSBpcyBkZXNpZ25lZCB0byBiZSBjb21wYXRpYmxlIHdpdGggPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cuamNsYXJrLmNvbS94bWwvZXhwYXQuaHRtbCI+RXhwYXQ8L2E+LjwvbGk+CiAgPGxpPlRoaXMgbGlicmFyeSBpcyByZWxlYXNlZCBib3RoIHVuZGVyIHRoZSA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9jb3B5cmlnaHQtc29mdHdhcmUtMTk5ODA3MjAuaHRtbCI+VzNDCiAgICBJUFI8L2E+IGFuZCB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sIj5HTlUKICAgIExHUEw8L2E+LiBVc2UgZWl0aGVyIGF0IHlvdXIgY29udmVuaWVuY2UsIGJhc2ljYWxseSB0aGlzIHNob3VsZCBtYWtlCiAgICBldmVyeWJvZHkgaGFwcHksIGlmIG5vdCwgZHJvcCBtZSBhIG1haWwuPC9saT4KPC91bD4KCjxwPldhcm5pbmc6IHVubGVzcyB5b3UgYXJlIGZvcmNlZCB0byBiZWNhdXNlIHlvdXIgYXBwbGljYXRpb24gbGlua3Mgd2l0aCBhCkdub21lIGxpYnJhcnkgcmVxdWlyaW5nIGl0LCAgPHN0cm9uZz48c3BhbgpzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGMDAwMCI+RG8gTm90IFVzZSBsaWJ4bWwxPC9zcGFuPjwvc3Ryb25nPiwgdXNlCmxpYnhtbDI8L3A+Cgo8aDI+PGEgbmFtZT0iRG9jdW1lbnRhdCI+RG9jdW1lbnRhdGlvbjwvYT48L2gyPgoKPHA+VGhlcmUgYXJlIHNvbWUgb24tbGluZSByZXNvdXJjZXMgYWJvdXQgdXNpbmcgbGlieG1sOjwvcD4KPG9sPgogIDxsaT5DaGVjayB0aGUgPGEgaHJlZj0iRkFRLmh0bWwiPkZBUTwvYT48L2xpPgogIDxsaT5DaGVjayB0aGUgPGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL2h0bWwvbGlieG1sLWxpYi5odG1sIj5leHRlbnNpdmUKICAgIGRvY3VtZW50YXRpb248L2E+IGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGZyb20gY29kZSBjb21tZW50cyAodXNpbmcgPGEKICAgIGhyZWY9Imh0dHA6Ly9jdnMuZ25vbWUub3JnL2JvbnNhaS9ydmlldy5jZ2k/Y3Zzcm9vdD0vY3ZzL2dub21lJmFtcDtkaXI9Z3RrLWRvYyI+Z3RrCiAgICBkb2M8L2E+KS48L2xpPgogIDxsaT5Mb29rIGF0IHRoZSBkb2N1bWVudGF0aW9uIGFib3V0IDxhIGhyZWY9ImVuY29kaW5nLmh0bWwiPmxpYnhtbAogICAgaW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydDwvYT48L2xpPgogIDxsaT5UaGlzIHBhZ2UgcHJvdmlkZXMgYSBnbG9iYWwgb3ZlcnZpZXcgYW5kIDxhIGhyZWY9IiNyZWFsIj5zb21lCiAgICBleGFtcGxlczwvYT4gb24gaG93IHRvIHVzZSBsaWJ4bWwuPC9saT4KICA8bGk+PGEgaHJlZj0ibWFpbHRvOmphbWVzQGRhYS5jb20uYXUiPkphbWVzIEhlbnN0cmlkZ2U8L2E+IHdyb3RlIDxhCiAgICBocmVmPSJodHRwOi8vd3d3LmRhYS5jb20uYXUvfmphbWVzL2dub21lL3htbC1zYXgveG1sLXNheC5odG1sIj5zb21lIG5pY2UKICAgIGRvY3VtZW50YXRpb248L2E+IGV4cGxhaW5pbmcgaG93IHRvIHVzZSB0aGUgbGlieG1sIFNBWCBpbnRlcmZhY2UuPC9saT4KICA8bGk+R2VvcmdlIExlYmwgd3JvdGUgPGEKICAgIGhyZWY9Imh0dHA6Ly93d3ctNC5pYm0uY29tL3NvZnR3YXJlL2RldmVsb3Blci9saWJyYXJ5L2dub21lMy8iPmFuIGFydGljbGUKICAgIGZvciBJQk0gZGV2ZWxvcGVyV29ya3M8L2E+IGFib3V0IHVzaW5nIGxpYnhtbC48L2xpPgogIDxsaT5DaGVjayA8YSBocmVmPSJodHRwOi8vY3ZzLmdub21lLm9yZy9seHIvc291cmNlL2dub21lLXhtbC9UT0RPIj50aGUgVE9ETwogICAgZmlsZTwvYT48L2xpPgogIDxsaT5SZWFkIHRoZSA8YSBocmVmPSJ1cGdyYWRlLmh0bWwiPjEueCB0byAyLnggdXBncmFkZSBwYXRoPC9hPi4gSWYgeW91IGFyZQogICAgc3RhcnRpbmcgYSBuZXcgcHJvamVjdCB1c2luZyBsaWJ4bWwgeW91IHNob3VsZCByZWFsbHkgdXNlIHRoZSAyLngKICB2ZXJzaW9uLjwvbGk+CiAgPGxpPkFuZCBkb24ndCBmb3JnZXQgdG8gbG9vayBhdCB0aGUgPGEgaHJlZj0iL21lc3NhZ2VzLyI+bWFpbGluZy1saXN0CiAgICBhcmNoaXZlPC9hPi48L2xpPgo8L29sPgoKPGgyPjxhIG5hbWU9IlJlcG9ydGluZyI+UmVwb3J0aW5nIGJ1Z3MgYW5kIGdldHRpbmcgaGVscDwvYT48L2gyPgoKPHA+V2VsbCwgYnVncyBvciBtaXNzaW5nIGZlYXR1cmVzIGFyZSBhbHdheXMgcG9zc2libGUsIGFuZCBJIHdpbGwgbWFrZSBhIHBvaW50Cm9mIGZpeGluZyB0aGVtIGluIGEgdGltZWx5IGZhc2hpb24uIFRoZSBiZXN0IHdheSB0byByZXBvcnQgYSBidWcgaXMgdG8gdXNlIHRoZQo8YSBocmVmPSJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9bGlieG1sIj5Hbm9tZSBidWcKdHJhY2tpbmcgZGF0YWJhc2U8L2E+IChtYWtlIHN1cmUgdG8gdXNlIHRoZSAibGlieG1sIiBtb2R1bGUgbmFtZSkuIEkgbG9vayBhdApyZXBvcnRzIHRoZXJlIHJlZ3VsYXJseSBhbmQgaXQncyBnb29kIHRvIGhhdmUgYSByZW1pbmRlciB3aGVuIGEgYnVnIGlzIHN0aWxsCm9wZW4uIENoZWNrIHRoZSA8YQpocmVmPSJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z3dyaXRpbmdoZWxwLmh0bWwiPmluc3RydWN0aW9ucyBvbiByZXBvcnRpbmcKYnVnczwvYT4gYW5kIGJlIHN1cmUgdG8gc3BlY2lmeSB0aGF0IHRoZSBidWcgaXMgZm9yIHRoZSBwYWNrYWdlIGxpYnhtbC48L3A+Cgo8cD5UaGVyZSBpcyBhbHNvIGEgbWFpbGluZy1saXN0IDxhCmhyZWY9Im1haWx0bzp4bWxAZ25vbWUub3JnIj54bWxAZ25vbWUub3JnPC9hPiBmb3IgbGlieG1sLCB3aXRoIGFuICA8YQpocmVmPSJodHRwOi8vbWFpbC5nbm9tZS5vcmcvYXJjaGl2ZXMveG1sLyI+b24tbGluZSBhcmNoaXZlPC9hPiAoPGEKaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL21lc3NhZ2VzIj5vbGQ8L2E+KS4gVG8gc3Vic2NyaWJlIHRvIHRoaXMgbGlzdCwgcGxlYXNlCnZpc2l0IHRoZSA8YSBocmVmPSJodHRwOi8vbWFpbC5nbm9tZS5vcmcvbWFpbG1hbi9saXN0aW5mby94bWwiPmFzc29jaWF0ZWQKV2ViPC9hPiBwYWdlIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucy4gPHN0cm9uZz5EbyBub3Qgc2VuZCBjb2RlLCBJIHdvbid0CmRlYnVnIGl0PC9zdHJvbmc+IChidXQgcGF0Y2hlcyBhcmUgcmVhbGx5IGFwcHJlY2lhdGVkISkuPC9wPgoKPHA+Q2hlY2sgdGhlIGZvbGxvd2luZyB0b28gYmVmb3JlIHBvc3Rpbmc6PC9wPgo8dWw+CiAgPGxpPm1ha2Ugc3VyZSB5b3UgYXJlIDxhIGhyZWY9ImZ0cDovL3htbHNvZnQub3JnLyI+dXNpbmcgYSByZWNlbnQKICAgIHZlcnNpb248L2E+LCBhbmQgdGhhdCB0aGUgcHJvYmxlbSBzdGlsbCBzaG93cyB1cCBpbiB0aG9zZTwvbGk+CiAgPGxpPmNoZWNrIHRoZSA8YSBocmVmPSJodHRwOi8vbWFpbC5nbm9tZS5vcmcvYXJjaGl2ZXMveG1sLyI+bGlzdAogICAgYXJjaGl2ZXM8L2E+IHRvIHNlZSBpZiB0aGUgcHJvYmxlbSB3YXMgcmVwb3J0ZWQgYWxyZWFkeSwgaW4gdGhpcyBjYXNlCiAgICB0aGVyZSBpcyBwcm9iYWJseSBhIGZpeCBhdmFpbGFibGUsIHNpbWlsYXJ5IGNoZWNrIHRoZSA8YSBocmVmPSJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9bGlieG1sJmFtcDtwcm9kdWN0PWxpYnhzbHQmYW1wO2J1Z19zdGF0dXM9VU5DT05GSVJNRUQmYW1wO2J1Z19zdGF0dXM9TkVXJmFtcDtidWdfc3RhdHVzPUFTU0lHTkVEJmFtcDtidWdfc3RhdHVzPU5FRURJTkZPJmFtcDtidWdfc3RhdHVzPVJFT1BFTkVEJmFtcDtidWdfc3RhdHVzPVJFU09MVkVEJmFtcDtidWdfc3RhdHVzPVZFUklGSUVEJmFtcDtlbWFpbDE9JmFtcDtlbWFpbHR5cGUxPXN1YnN0cmluZyZhbXA7ZW1haWxhc3NpZ25lZF90bzE9MSZhbXA7ZW1haWxyZXBvcnRlcjE9MSZhbXA7ZW1haWxjYzE9MSZhbXA7ZW1haWxsb25nZGVzYzE9MSZhbXA7ZW1haWwyPSZhbXA7ZW1haWx0eXBlMj1zdWJzdHJpbmcmYW1wO2VtYWlsYXNzaWduZWRfdG8yPTEmYW1wO2VtYWlscmVwb3J0ZXIyPTEmYW1wO2VtYWlsY2MyPTEmYW1wO2VtYWlsbG9uZ2Rlc2MyPTEmYW1wO2NoYW5nZWRpbj0mYW1wO2NoZmllbGRmcm9tPSZhbXA7Y2hmaWVsZHRvPU5vdyZhbXA7Y2hmaWVsZHZhbHVlPSZhbXA7c2hvcnRfZGVzYz0mYW1wO3Nob3J0X2Rlc2NfdHlwZT1zdWJzdHJpbmcmYW1wO2xvbmdfZGVzYz0mYW1wO2xvbmdfZGVzY190eXBlPXN1YnN0cmluZyZhbXA7YnVnX2ZpbGVfbG9jPSZhbXA7YnVnX2ZpbGVfbG9jX3R5cGU9c3Vic3RyaW5nJmFtcDtzdGF0dXNfd2hpdGVib2FyZD0mYW1wO3N0YXR1c193aGl0ZWJvYXJkX3R5cGU9c3Vic3RyaW5nJmFtcDtrZXl3b3Jkcz0mYW1wO2tleXdvcmRzX3R5cGU9YW55d29yZHMmYW1wO29wX3N5c19kZXRhaWxzPSZhbXA7b3Bfc3lzX2RldGFpbHNfdHlwZT1zdWJzdHJpbmcmYW1wO3ZlcnNpb25fZGV0YWlscz0mYW1wO3ZlcnNpb25fZGV0YWlsc190eXBlPXN1YnN0cmluZyZhbXA7Y21kdHlwZT1kb2l0JmFtcDtuZXdxdWVyeW5hbWU9JmFtcDtvcmRlcj1SZXVzZStzYW1lK3NvcnQrYXMrbGFzdCt0aW1lJmFtcDtmb3JtX25hbWU9cXVlcnkiPnJlZ2lzdGVyZWQgb3BlbgogICAgYnVnczwvYT48L2xpPgogIDxsaT5tYWtlIHN1cmUgeW91IGNhbiByZXByb2R1Y2UgdGhlIGJ1ZyB3aXRoIHhtbGxpbnQgb3Igb25lIG9mIHRoZSB0ZXN0CiAgICBwcm9ncmFtcyBmb3VuZCBpbiBzb3VyY2UgaW4gdGhlIGRpc3RyaWJ1dGlvbjwvbGk+CiAgPGxpPlBsZWFzZSBzZW5kIHRoZSBjb21tYW5kIHNob3dpbmcgdGhlIGVycm9yIGFzIHdlbGwgYXMgdGhlIGlucHV0IChhcyBhbgogICAgYXR0YWNoZW1lbnQpPC9saT4KPC91bD4KCjxwPkFsdGVybmF0aXZlbHksIHlvdSBjYW4ganVzdCBzZW5kIHRoZSBidWcgdG8gdGhlIDxhCmhyZWY9Im1haWx0bzp4bWxAZ25vbWUub3JnIj54bWxAZ25vbWUub3JnPC9hPiBsaXN0OyBpZiBpdCdzIHJlYWxseSBsaWJ4bWwKcmVsYXRlZCBJIHdpbGwgYXBwcm92ZSBpdC4uIFBsZWFzZSBkbyBub3Qgc2VuZCBtZSBtYWlsIGRpcmVjdGx5IGVzcGVjaWFsbHkgZm9yCnBvcnRhYmlsaXR5IHByb2JsZW0sIGl0IG1ha2VzIHRoaW5ncyByZWFsbHkgaGFyZGVyIHRvIHRyYWNrIGFuZCBpbiBzb21lIGNhc2VzCkknbSBub3QgdGhlIGJlc3QgcGVyc29uIHRvIGFuc3dlciBhIGdpdmVuIHF1ZXN0aW9uLCBhc2sgdGhlIGxpc3QgaW5zdGVhZC48L3A+Cgo8cD5PZiBjb3Vyc2UsIGJ1Z3MgcmVwb3J0ZWQgd2l0aCBhIHN1Z2dlc3RlZCBwYXRjaCBmb3IgZml4aW5nIHRoZW0gd2lsbApwcm9iYWJseSBiZSBwcm9jZXNzZWQgZmFzdGVyLjwvcD4KCjxwPklmIHlvdSdyZSBsb29raW5nIGZvciBoZWxwLCBhIHF1aWNrIGxvb2sgYXQgPGEKaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL21lc3NhZ2VzLyM0MDciPnRoZSBsaXN0IGFyY2hpdmU8L2E+IG1heSBhY3R1YWxseQpwcm92aWRlIHRoZSBhbnN3ZXIsIEkgdXN1YWxseSBzZW5kIHNvdXJjZSBzYW1wbGVzIHdoZW4gYW5zd2VyaW5nIGxpYnhtbCB1c2FnZQpxdWVzdGlvbnMuIFRoZSA8YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvaHRtbC9ib29rMS5odG1sIj5hdXRvLWdlbmVyYXRlZApkb2N1bWVudGFudGlvbjwvYT4gaXMgbm90IGFzIHBvbGlzaGVkIGFzIEkgd291bGQgbGlrZSAoaSBuZWVkIHRvIGxlYXJuIG1vcmUKYWJvdXQgRG9jYm9vayksIGJ1dCBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC48L3A+Cgo8aDI+PGEgbmFtZT0iaGVscCI+SG93IHRvIGhlbHA8L2E+PC9oMj4KCjxwPllvdSBjYW4gaGVscCB0aGUgcHJvamVjdCBpbiB2YXJpb3VzIHdheXMsIHRoZSBiZXN0IHRoaW5nIHRvIGRvIGZpcnN0IGlzIHRvCnN1YnNjcmliZSB0byB0aGUgbWFpbGluZy1saXN0IGFzIGV4cGxhaW5lZCBiZWZvcmUsIGNoZWNrIHRoZSA8YQpocmVmPSJodHRwOi8veG1sc29mdC5vcmcvbWVzc2FnZXMvIj5hcmNoaXZlcyA8L2E+YW5kIHRoZSA8YQpocmVmPSJodHRwOi8vYnVncy5nbm9tZS5vcmcvZGIvcGEvbGdub21lLXhtbC5odG1sIj5Hbm9tZSBidWcKZGF0YWJhc2U6PC9hPjo8L3A+CjxvbD4KICA8bGk+cHJvdmlkZSBwYXRjaGVzIHdoZW4geW91IGZpbmQgcHJvYmxlbXM8L2xpPgogIDxsaT5wcm92aWRlIHRoZSBkaWZmcyB3aGVuIHlvdSBwb3J0IGxpYnhtbCB0byBhIG5ldyBwbGF0Zm9ybS4gVGhleSBtYXkgbm90CiAgICBiZSBpbnRlZ3JhdGVkIGluIGFsbCBjYXNlcyBidXQgaGVscCBwaW5wb2ludGluZyBwb3J0YWJpbGl0eSBwcm9ibGVtcwogIGFuZDwvbGk+CiAgPGxpPnByb3ZpZGUgZG9jdW1lbnRhdGlvbiBmaXhlcyAoZWl0aGVyIGFzIHBhdGNoZXMgdG8gdGhlIGNvZGUgY29tbWVudHMgb3IKICAgIGFzIEhUTUwgZGlmZnMpLjwvbGk+CiAgPGxpPnByb3ZpZGUgbmV3IGRvY3VtZW50YXRpb25zIHBpZWNlcyAodHJhbnNsYXRpb25zLCBleGFtcGxlcywgZXRjIC4uLik8L2xpPgogIDxsaT5DaGVjayB0aGUgVE9ETyBmaWxlIGFuZCB0cnkgdG8gY2xvc2Ugb25lIG9mIHRoZSBpdGVtczwvbGk+CiAgPGxpPnRha2Ugb25lIG9mIHRoZSBwb2ludHMgcmFpc2VkIGluIHRoZSBhcmNoaXZlIG9yIHRoZSBidWcgZGF0YWJhc2UgYW5kCiAgICBwcm92aWRlIGEgZml4LiA8YSBocmVmPSJtYWlsdG86RGFuaWVsLlZlaWxsYXJkQGltYWcuZnIiPkdldCBpbiB0b3VjaCB3aXRoCiAgICBtZSA8L2E+YmVmb3JlIHRvIGF2b2lkIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyBhbmQgY2hlY2sgdGhhdCB0aGUKICAgIHN1Z2dlc3RlZCBmaXggd2lsbCBmaXQgaW4gbmljZWx5IDotKTwvbGk+Cjwvb2w+Cgo8aDI+PGEgbmFtZT0iRG93bmxvYWRzIj5Eb3dubG9hZHM8L2E+PC9oMj4KCjxwPlRoZSBsYXRlc3QgdmVyc2lvbnMgb2YgbGlieG1sIGNhbiBiZSBmb3VuZCBvbiA8YQpocmVmPSJmdHA6Ly94bWxzb2Z0Lm9yZy8iPnhtbHNvZnQub3JnPC9hPiAoPGEKaHJlZj0iZnRwOi8vc3BlYWtlYXN5LnJwbWZpbmQubmV0L3B1Yi9saWJ4bWwvIj5TZWF0dGxlPC9hPiwgPGEKaHJlZj0iZnRwOi8vZnIucnBtZmluZC5uZXQvcHViL2xpYnhtbC8iPkZyYW5jZTwvYT4pIG9yIG9uIHRoZSA8YQpocmVmPSJmdHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9NSVJST1JTLmh0bWwiPkdub21lIEZUUCBzZXJ2ZXI8L2E+IGVpdGhlcgphcyBhIDxhIGhyZWY9ImZ0cDovL2Z0cC5nbm9tZS5vcmcvcHViL0dOT01FL3N0YWJsZS9zb3VyY2VzL2xpYnhtbC8iPnNvdXJjZQphcmNoaXZlPC9hPiBvciA8YQpocmVmPSJmdHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zdGFibGUvcmVkaGF0L2kzODYvbGlieG1sLyI+UlBNCnBhY2thZ2VzPC9hPi4gKE5PVEUgdGhhdCB5b3UgbmVlZCBib3RoIHRoZSA8YQpocmVmPSJodHRwOi8vcnBtZmluZC5uZXQvbGludXgvUlBNL2xpYnhtbDIuaHRtbCI+bGlieG1sKDIpPC9hPiBhbmQgPGEKaHJlZj0iaHR0cDovL3JwbWZpbmQubmV0L2xpbnV4L1JQTS9saWJ4bWwyLWRldmVsLmh0bWwiPmxpYnhtbCgyKS1kZXZlbDwvYT4KcGFja2FnZXMgaW5zdGFsbGVkIHRvIGNvbXBpbGUgYXBwbGljYXRpb25zIHVzaW5nIGxpYnhtbC4pIDxhCmhyZWY9Im1haWx0bzppemxhdGtvdmljQGRhZW5ldC5kZSI+SWdvciAgWmxhdGtvdmljPC9hPiBpcyBub3cgdGhlIG1haW50YWluZXIKb2YgdGhlIFdpbmRvd3MgcG9ydCwgPGEKaHJlZj0iaHR0cDovL3d3dy5maC1mcmFua2Z1cnQuZGUvfmlnb3IvcHJvamVjdHMvbGlieG1sL2luZGV4Lmh0bWwiPmhlIHByb3ZpZGVzCmJpbmFyaWVzPC9hPjwvcD4KCjxwPjxhIG5hbWU9IlNuYXBzaG90Ij5TbmFwc2hvdDo8L2E+PC9wPgo8dWw+CiAgPGxpPkNvZGUgZnJvbSB0aGUgVzNDIGN2cyBiYXNlIGxpYnhtbCA8YQogICAgaHJlZj0iZnRwOi8veG1sc29mdC5vcmcvY3ZzLXNuYXBzaG90LnRhci5neiI+Y3ZzLXNuYXBzaG90LnRhci5nejwvYT48L2xpPgogIDxsaT5Eb2NzLCBjb250ZW50IG9mIHRoZSB3ZWIgc2l0ZSwgdGhlIGxpc3QgYXJjaGl2ZSBpbmNsdWRlZCA8YQogICAgaHJlZj0iZnRwOi8veG1sc29mdC5vcmcvbGlieG1sLWRvY3MudGFyLmd6Ij5saWJ4bWwtZG9jcy50YXIuZ3o8L2E+PC9saT4KPC91bD4KCjxwPjxhIG5hbWU9IkNvbnRyaWJzIj5Db250cmliczo8L2E+PC9wPgoKPHA+SSBkbyBhY2NlcHQgZXh0ZXJuYWwgY29udHJpYnV0aW9ucywgZXNwZWNpYWxseSBpZiBjb21waWxpbmcgb24gYW5vdGhlcgpwbGF0Zm9ybSwgZ2V0IGluIHRvdWNoIHdpdGggbWUgdG8gdXBsb2FkIHRoZSBwYWNrYWdlLiBJIHdpbGwga2VlcCB0aGVtIGluIHRoZQo8YSBocmVmPSJmdHA6Ly94bWxzb2Z0Lm9yZy9jb250cmlicy8iPmNvbnRyaWIgZGlyZWN0b3J5PC9hPjwvcD4KCjxwPkxpYnhtbCBpcyBhbHNvIGF2YWlsYWJsZSBmcm9tIENWUzo8L3A+Cjx1bD4KICA8bGk+PHA+VGhlIDxhCiAgICBocmVmPSJodHRwOi8vY3ZzLmdub21lLm9yZy9ib25zYWkvcnZpZXcuY2dpP2N2c3Jvb3Q9L2N2cy9nbm9tZSZhbXA7ZGlyPWdub21lLXhtbCI+R25vbWUKICAgIENWUyBiYXNlPC9hPi4gQ2hlY2sgdGhlIDxhCiAgICBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy90b29scy9jdnMuaHRtbCI+R25vbWUgQ1ZTIFRvb2xzPC9hPiBwYWdlOwogICAgdGhlIENWUyBtb2R1bGUgaXMgPGI+Z25vbWUteG1sPC9iPi48L3A+CiAgPC9saT4KICA8bGk+VGhlIDxzdHJvbmc+bGlieHNsdDwvc3Ryb25nPiBtb2R1bGUgaXMgYWxzbyBwcmVzZW50IHRoZXJlPC9saT4KPC91bD4KCjxoMj48YSBuYW1lPSJOZXdzIj5OZXdzPC9hPjwvaDI+Cgo8aDM+Q1ZTIG9ubHkgOiBjaGVjayB0aGUgPGEKaHJlZj0iaHR0cDovL2N2cy5nbm9tZS5vcmcvbHhyL3NvdXJjZS9nbm9tZS14bWwvQ2hhbmdlTG9nIj5DaGFuZ2Vsb2c8L2E+IGZpbGUKZm9yIGEgcmVhbGx5IGFjY3VyYXRlIGRlc2NyaXB0aW9uPC9oMz4KCjxwPkl0ZW1zIGZsb2F0aW5nIGFyb3VuZCBidXQgbm90IGFjdGl2ZWx5IHdvcmtlZCBvbiwgZ2V0IGluIHRvdWNoIHdpdGggbWUgaWYKeW91IHdhbnQgdG8gdGVzdCB0aG9zZTwvcD4KPHVsPgogIDxsaT5JbXBsZW1lbnRpbmcgPGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL1hTTFQiPlhTTFQ8L2E+LCB0aGlzIGlzIGRvbmUgYXMKICAgIGEgc2VwYXJhdGUgQyBsaWJyYXJ5IG9uIHRvcCBvZiBsaWJ4bWwgY2FsbGVkIGxpYnhzbHQ8L2xpPgogIDxsaT5GaW5pc2hpbmcgdXAgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHB0ciI+WFBvaW50ZXI8L2E+IGFuZCA8YQogICAgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveGluY2x1ZGUiPlhJbmNsdWRlPC9hPjwvbGk+CiAgPGxpPihzZWVlbXMgd29ya2luZyBidXQgZGVsYXllZCBmcm9tIHJlbGVhc2UpIHBhcnNpbmcvaW1wb3J0IG9mIERvY2Jvb2sgU0dNTAogICAgZG9jczwvbGk+CjwvdWw+Cgo8aDM+Mi40LjA6IEp1bHkgMTAgMjAwMTwvaDM+Cjx1bD4KICA8bGk+Rml4ZWQgYSBmZXcgYnVncyBpbiBYUGF0aCwgdmFsaWRhdGlvbiwgYW5kIHRyZWUgaGFuZGxpbmcuPC9saT4KICA8bGk+Rml4ZWQgWE1MIEJhc2UgaW1wbGVtZW50YXRpb24sIGFkZGVkIGEgY291cGVsIG9mIGV4YW1wbGVzIHRvIHRoZQogICAgcmVncmVzc2lvbiB0ZXN0czwvbGk+CiAgPGxpPkEgYml0IG9mIGNsZWFudXA8L2xpPgo8L3VsPgoKPGgzPjIuMy4xNDogSnVseSA1IDIwMDE8L2gzPgo8dWw+CiAgPGxpPmZpeGVkIHNvbWUgZW50aXRpZXMgcHJvYmxlbXMgYW5kIHJlZHVjZSBtZW0gcmVxdWlyZW1lbnQgd2hlbiBzdWJzdGl0dWluZwogICAgdGhlbTwvbGk+CiAgPGxpPmxvdHMgb2YgaW1wcm92ZW1lbnRzIGluIHRoZSBYUGF0aCBxdWVyaWVzIGludGVycHJldGVyIGNhbiBiZQogICAgc3Vic3RhbmNpYWxseSBmYXN0ZXI8L2xpPgogIDxsaT5NYWtlZmlsZXMgYW5kIGNvbmZpZ3VyZSBjbGVhbnVwczwvbGk+CiAgPGxpPkZpeGVzIHRvIFhQYXRoIHZhcmlhYmxlIGV2YWwsIGFuZCBjb21wYXJlIG9uIGVtcHR5IG5vZGUgc2V0PC9saT4KICA8bGk+SFRNTCB0YWcgY2xvc2luZyBidWcgZml4ZWQ8L2xpPgogIDxsaT5GaXhlZCBhbiBVUkkgcmVmZXJlbmNlIGNvbXB1dGF0aW5nIHByb2JsZW0gd2hlbiB2YWxpZGF0aW5nPC9saT4KPC91bD4KCjxoMz4yLjMuMTM6IEp1bmUgMjggMjAwMTwvaDM+Cjx1bD4KICA8bGk+Mi4zLjEyIGNvbmZpZ3VyZS5pbiB3YXMgYnJva2VuIGFzIHdlbGwgYXMgdGhlIHB1c2ggbW9kZSBYTUwgcGFyc2VyPC9saT4KICA8bGk+YSBmZXcgbW9yZSBmaXhlcyBmb3IgY29tcGlsYXRpb24gb24gV2luZG93cyBNU0MgYnkgWW9uIERlcmVrPC9saT4KPC91bD4KCjxoMz4xLjguMTQ6IEp1bmUgMjggMjAwMTwvaDM+Cjx1bD4KICA8bGk+WmJpZ25pZXcgQ2h5bGEgZ2F2ZSBhIHBhdGNoIHRvIHVzZSB0aGUgb2xkIFhNTCBwYXJzZXIgaW4gcHVzaCBtb2RlPC9saT4KICA8bGk+U21hbGwgTWFrZWZpbGUgZml4PC9saT4KPC91bD4KCjxoMz4yLjMuMTI6IEp1bmUgMjYgMjAwMTwvaDM+Cjx1bD4KICA8bGk+bG90cyBvZiBjbGVhbnVwPC9saT4KICA8bGk+YSBjb3VwbGUgb2YgdmFsaWRhdGlvbiBmaXg8L2xpPgogIDxsaT5maXhlZCBsaW5lIG51bWJlciBjb3VudGluZzwvbGk+CiAgPGxpPmZpeGVkIHNlcmlvdXMgcHJvYmxlbXMgaW4gdGhlIFhJbmNsdWRlIHByb2Nlc3Npbmc8L2xpPgogIDxsaT5hZGRlZCBzdXBwb3J0IGZvciBVVEY4IEJPTSBhdCBiZWdpbm5pbmcgb2YgZW50aXRpZXM8L2xpPgogIDxsaT5maXhlZCBhIHN0cmFuZ2UgZ2NjIG9wdGltaXplciBidWdzIGluIHhwYXRoIGhhbmRsaW5nIG9mIGZsb2F0LCBnY2MtMy4wCiAgICBtaXNjb21waWxlIHVyaS5jIChXaWxsaWFtKSwgVGhvbWFzIExlaXRuZXIgcHJvdmlkZWQgYSBmaXggZm9yIHRoZQogICAgb3B0aW1pemVyIG9uIFRydTY0PC9saT4KICA8bGk+aW5jb3Jwb3JhdGVkIFlvbiBEZXJlayBhbmQgSWdvciBabGF0a292aWMgIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMgZm9yCiAgICBjb21waWxhdGlvbiBvbiBXaW5kb3dzIE1TQzwvbGk+CiAgPGxpPnVwZGF0ZSBvZiBsaWJ4bWwtZG9jLmVsIChGZWxpeCBOYXR0ZXIpPC9saT4KICA8bGk+Zml4ZWQgMiBidWdzIGluIFVSSSBub3JtYWxpemF0aW9uIGNvZGU8L2xpPgo8L3VsPgoKPGgzPjIuMy4xMTogSnVuZSAxNyAyMDAxPC9oMz4KPHVsPgogIDxsaT51cGRhdGVzIHRvIHRyaW8sIE1ha2VmaWxlcyBhbmQgY29uZmlndXJlIHNob3VsZCBmaXggc29tZSBwb3J0YWJpbGl0eQogICAgcHJvYmxlbXMgKGFscGhhKTwvbGk+CiAgPGxpPmZpeGVkIHNvbWUgSFRNTCBzZXJpYWxpemF0aW9uIHByb2JsZW1zIChwcmUsIHNjcmlwdCwgYW5kIGJsb2NrL2lubGluZQogICAgaGFuZGxpbmcpLCBhZGRlZCBlbmNvZGluZyBhd2FyZSBBUElzLCBjbGVhbnVwIG9mIHRoaXMgY29kZTwvbGk+CiAgPGxpPmFkZGVkIHhtbEhhc05zUHJvcCgpPC9saT4KICA8bGk+aW1wbGVtZW50ZWQgYSBzcGVjaWZpYyBQSSBmb3IgZW5jb2Rpbmcgc3VwcG9ydCBpbiB0aGUgRG9jQm9vayBTR01MCiAgICBwYXJzZXI8L2xpPgogIDxsaT5zb21lIFhQYXRoIGZpeGVzICgtSW5maW5pdHksIC8gYXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgYW5kIG5hbWVzcGFjZXMKICAgIG5vZGUgc2VsZWN0aW9uKTwvbGk+CiAgPGxpPmZpeGVkIGEgcGVyZm9ybWFuY2UgcHJvYmxlbSBhbmQgYW4gZXJyb3IgaW4gdGhlIHZhbGlkYXRpb24gY29kZTwvbGk+CiAgPGxpPmZpeGVkIFhJbmNsdWRlIHJvdXRpbmUgdG8gaW1wbGVtZW50IHRoZSByZWN1cnNpdmUgYmVoYXZpb3VyPC9saT4KICA8bGk+Zml4ZWQgeG1sRnJlZU5vZGUgcHJvYmxlbSB3aGVuIGxpYnhtbCBpcyBpbmNsdWRlZCBzdGF0aWNhbGx5IHR3aWNlPC9saT4KICA8bGk+YWRkZWQgLS12ZXJzaW9uIHRvIHhtbGxpbnQgZm9yIGJ1ZyByZXBvcnRzPC9saT4KPC91bD4KCjxoMz4yLjMuMTA6IEp1bmUgMSAyMDAxPC9oMz4KPHVsPgogIDxsaT5maXhlZCB0aGUgU0dNTCBjYXRhbG9nIHN1cHBvcnQ8L2xpPgogIDxsaT5hIG51bWJlciBvZiByZXBvcnRlZCBidWdzIGdvdCBmaXhlZCwgaW4gWFBhdGgsIGljb252IGRldGVjdGlvbiwgWEluY2x1ZGUKICAgIHByb2Nlc3Npbmc8L2xpPgogIDxsaT5YUGF0aCBzdHJpbmcgZnVuY3Rpb24gc2hvdWxkIG5vdyBoYW5kbGUgdW5pY29kZSBjb3JyZWN0bHk8L2xpPgo8L3VsPgoKPGgzPjIuMy45OiBNYXkgMTkgMjAwMTwvaDM+Cgo8cD5Mb3RzIG9mIGJ1Z2ZpeGVzLCBhbmQgYWRkZWQgYSBiYXNpYyBTR01MIGNhdGFsb2cgc3VwcG9ydDo8L3A+Cjx1bD4KICA8bGk+SFRNTCBwdXNoIGJ1Z2ZpeCAjNTQ4OTEgYW5kIGFub3RoZXIgcGF0Y2ggZnJvbSBKb25hcyBCb3Jnc3Ry9m08L2xpPgogIDxsaT5zb21lIHNlcmlvdXMgc3BlZWQgb3B0aW1pc2F0aW9uIGFnYWluPC9saT4KICA8bGk+c29tZSBkb2N1bWVudGF0aW9uIGNsZWFudXBzPC9saT4KICA8bGk+dHJ5aW5nIHRvIGdldCBiZXR0ZXIgbGlua2luZyBvbiBzb2xhcmlzICgtUik8L2xpPgogIDxsaT5YUGF0aCBBUEkgY2xlYW51cCBmcm9tIFRob21hcyBCcm95ZXI8L2xpPgogIDxsaT5WYWxpZGF0aW9uIGJ1ZyBmaXhlZCAjNTQ2MzEsIGFkZGVkIGEgcGF0Y2ggZnJvbSBHYXJ5IFBlbm5pbmd0b24sIGZpeGVkCiAgICB4bWxWYWxpZEdldFZhbGlkRWxlbWVudHMoKTwvbGk+CiAgPGxpPkFkZGVkIGFuIElOU1RBTEwgZmlsZTwvbGk+CiAgPGxpPkF0dHJpYnV0ZSByZW1vdmFsIGFkZGVkIHRvIEFQSTogIzU0NDMzPC9saT4KICA8bGk+YWRkZWQgYSBiYXNpYyBzdXBwb3J0IGZvciBTR01MIGNhdGFsb2dzPC9saT4KICA8bGk+Zml4ZWQgeG1sS2VlcEJsYW5rc0RlZmF1bHQoMCkgQVBJPC9saT4KICA8bGk+YnVnZml4IGluIHhtbE5vZGVHZXRMYW5nKCk8L2xpPgogIDxsaT5maXhlZCBhIHNtYWxsIGNvbmZpZ3VyZSBwb3J0YWJpbGl0eSBwcm9ibGVtPC9saT4KICA8bGk+Zml4ZWQgYW4gaW52ZXJzaW9uIG9mIFNZU1RFTSBhbmQgUFVCTElDIGlkZW50aWZpZXIgaW4gSFRNTCBkb2N1bWVudDwvbGk+CjwvdWw+Cgo8aDM+MS44LjEzOiBNYXkgMTQgMjAwMTwvaDM+Cjx1bD4KICA8bGk+YnVnZml4ZXMgcmVsZWFzZSBvZiB0aGUgb2xkIGxpYnhtbDEgYnJhbmNoIHVzZWQgYnkgR25vbWU8L2xpPgo8L3VsPgoKPGgzPjIuMy44OiBNYXkgMyAyMDAxPC9oMz4KPHVsPgogIDxsaT5JbnRlZ3JhdGVkIGFuIFNHTUwgRG9jQm9vayBwYXJzZXIgZm9yIHRoZSBHbm9tZSBwcm9qZWN0PC9saT4KICA8bGk+Rml4ZWQgYSBmZXcgdGhpbmdzIGluIHRoZSBIVE1MIHBhcnNlcjwvbGk+CiAgPGxpPkZpeGVkIHNvbWUgWFBhdGggYnVncyByYWlzZWQgYnkgWFNMVCB1c2UsIHRyaWVkIHRvIGZpeCB0aGUgZmxvYXRpbmcKICAgIHBvaW50IHBvcnRhYmlsaXR5IGlzc3VlPC9saT4KICA8bGk+U3BlZWQgaW1wcm92ZW1lbnQgKDhNL3MgZm9yIFNBWCwgM00vcyBmb3IgRE9NLCAxLjVNL3MgZm9yIERPTSt2YWxpZGF0aW9uCiAgICB1c2luZyB0aGUgWE1MIFJFQyBhcyBpbnB1dCBhbmQgYSA3MDBNSHogY2VsZXJvbikuPC9saT4KICA8bGk+aW5jb3Jwb3JhdGVkIG1vcmUgV2luZG93cyBjbGVhbnVwPC9saT4KICA8bGk+YWRkZWQgeG1sU2F2ZUZvcm1hdEZpbGUoKTwvbGk+CiAgPGxpPmZpeGVkIHByb2JsZW1zIGluIGNvcHlpbmcgbm9kZXMgd2l0aCBlbnRpdGllcyByZWZlcmVuY2VzIChnZG9tZSk8L2xpPgogIDxsaT5yZW1vdmVkIHNvbWUgdHJvdWJsZXMgc3Vycm91bmRpbmcgdGhlIG5ldyB2YWxpZGF0aW9uIG1vZHVsZTwvbGk+CjwvdWw+Cgo8aDM+Mi4zLjc6IEFwcmlsIDIyIDIwMDE8L2gzPgo8dWw+CiAgPGxpPmxvdHMgb2Ygc21hbGwgYnVnIGZpeGVzLCBjb3JyZWN0ZWQgWFBvaW50ZXI8L2xpPgogIDxsaT5Ob24gZGV0ZXJtaW5pc3QgY29udGVudCBtb2RlbCB2YWxpZGF0aW9uIHN1cHBvcnQ8L2xpPgogIDxsaT5hZGRlZCB4bWxEb2NDb3B5Tm9kZSBmb3IgZ2RvbWUyPC9saT4KICA8bGk+cmV2YW1wZWQgdGhlIHdheSB0aGUgSFRNTCBwYXJzZXIgaGFuZGxlcyBlbmQgb2YgdGFnczwvbGk+CiAgPGxpPlhQYXRoOiBjb3JyY3Rpb25zIG9mIG5hbWVzcGFjZXNzdXBwb3J0IGFuZCBudW1iZXIgZm9ybWF0dGluZzwvbGk+CiAgPGxpPldpbmRvd3M6IElnb3IgWmxhdGtvdmljIHBhdGNoZXMgZm9yIE1TQyBjb21waWxhdGlvbjwvbGk+CiAgPGxpPkhUTUwgb3VwdXQgZml4ZXMgZnJvbSBQIEMgQ2hvdyBhbmQgV2lsbGlhbSBNLiBCcmFjazwvbGk+CiAgPGxpPkltcHJvdmVkIHZhbGlkYXRpb24gc3BlZWQgc2Vuc2libGUgZm9yIERvY0Jvb2s8L2xpPgogIDxsaT5maXhlZCBhIGJpZyBidWcgd2l0aCBJRCBkZWNsYXJlZCBpbiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXM8L2xpPgogIDxsaT5wb3J0YWJpbGl0eSBmaXhlcywgdXBkYXRlIG9mIFRyaW8gZnJvbSBCam9ybiBSZWVzZTwvbGk+CjwvdWw+Cgo8aDM+Mi4zLjY6IEFwcmlsIDggMjAwMTwvaDM+Cjx1bD4KICA8bGk+Q29kZSBjbGVhbnVwIHVzaW5nIGV4dHJlbWUgZ2NjIGNvbXBpbGVyIHdhcm5pbmcgb3B0aW9ucywgZm91bmQgYW5kCiAgICBjbGVhcmVkIGhhbGYgYSBkb3plbiBwb3RlbnRpYWwgcHJvYmxlbTwvbGk+CiAgPGxpPnRoZSBFYXplbCB0ZWFtIGZvdW5kIGFuIFhNTCBwYXJzZXIgYnVnPC9saT4KICA8bGk+Y2xlYW5lZCB1cCB0aGUgdXNlciBvZiBzb21lIG9mIHRoZSBzdHJpbmcgZm9ybWF0dGluZyBmdW5jdGlvbi4gdXNlZCB0aGUKICAgIHRyaW8gbGlicmFyeSBjb2RlIHRvIHByb3ZpZGUgdGhlIG9uZSBuZWVkZWQgd2hlbiB0aGUgcGxhdGZvcm0gaXMgbWlzc2luZwogICAgdGhlbTwvbGk+CiAgPGxpPnhwYXRoOiByZW1vdmVkIGEgbWVtb3J5IGxlYWsgYW5kIGZpeGVkIHRoZSBwcmVkaWNhdGUgZXZhbHVhdGlvbiBwcm9ibGVtLAogICAgZXh0ZW5kZWQgdGhlIHRlc3RzdWl0ZSBhbmQgY2xlYW5lZCB1cCB0aGUgcmVzdWx0LiBYUG9pbnRlciBzZWVtcyBicm9rZW4KICAgIC4uLjwvbGk+CjwvdWw+Cgo8aDM+Mi4zLjU6IE1hciAyMyAyMDAxPC9oMz4KPHVsPgogIDxsaT5CaWdnZXN0IGNoYW5nZSBpcyBzZXBhcmF0ZSBwYXJzaW5nIGFuZCBldmFsdWF0aW9uIG9mIFhQYXRoIGV4cHJlc3Npb25zLAogICAgdGhlcmUgaXMgc29tZSBuZXcgQVBJcyBmb3IgdGhpcyB0b288L2xpPgogIDxsaT5pbmNsdWRlZCBhIG51bWJlciBvZiBidWcgZml4ZXMoWE1MIHB1c2ggcGFyc2VyLCA1MTg3Niwgbm90YXRpb25zLAogIDUyMjk5KTwvbGk+CiAgPGxpPkZpeGVkIHNvbWUgcG9ydGFiaWxpdHkgaXNzdWVzPC9saT4KPC91bD4KCjxoMz4yLjMuNDogTWFyIDEwIDIwMDE8L2gzPgo8dWw+CiAgPGxpPkZpeGVkIGJ1Z3MgIzUxODYwIGFuZCAjNTE4NjE8L2xpPgogIDxsaT5BZGRlZCBhIGdsb2JhbCB2YXJpYWJsZSB4bWxEZWZhdWx0QnVmZmVyU2l6ZSB0byBhbGxvdyBkZWZhdWx0IGJ1ZmZlcgogICAgc2l6ZSB0byBiZSBhcHBsaWNhdGlvbiB0dW5hYmxlLjwvbGk+CiAgPGxpPlNvbWUgY2xlYW51cCBpbiB0aGUgdmFsaWRhdGlvbiBjb2RlLCBzdGlsbCBhIGJ1ZyBsZWZ0IGFuZCB0aGlzIHBhcnQKICAgIHNob3VsZCBwcm9iYWJseSBiZSByZXdyaXR0ZW4gdG8gc3VwcG9ydCBhbWJpZ3VvdXMgY29udGVudCBtb2RlbCA6LVw8L2xpPgogIDxsaT5GaXggYSBjb3VwbGUgb2Ygc2VyaW91cyBidWdzIGludHJvZHVjZWQgb3IgcmFpc2VkIGJ5IGNoYW5nZXMgaW4gMi4zLjMKICAgIHBhcnNlcjwvbGk+CiAgPGxpPkZpeGVkIGFub3RoZXIgYnVnIGluIHhtbE5vZGVHZXRDb250ZW50KCk8L2xpPgogIDxsaT5Cam9ybiBmaXhlZCBYUGF0aCBub2RlIGNvbGxlY3Rpb24gYW5kIE51bWJlciBmb3JtYXR0aW5nPC9saT4KICA8bGk+Rml4ZWQgYSBsb29wIHJlcG9ydGVkIGluIHRoZSBIVE1MIHBhcnNpbmc8L2xpPgogIDxsaT5ibGFuayBzcGFjZSBhcmUgcmVwb3J0ZWQgZXZlbiBpZiB0aGUgRHRkIGNvbnRlbnQgbW9kZWwgcHJvdmVzIHRoYXQgdGhleQogICAgYXJlIGZvcm1hdHRpbmcgc3BhY2VzLCB0aGlzIGlzIGZvciBYbUwgY29uZm9ybWFuY2U8L2xpPgo8L3VsPgoKPGgzPjIuMy4zOiBNYXIgMSAyMDAxPC9oMz4KPHVsPgogIDxsaT5zbWFsbCBjaGFuZ2UgaW4gWFBhdGggZm9yIFhTTFQ8L2xpPgogIDxsaT5kb2N1bWVudGF0aW9uIGNsZWFudXBzPC9saT4KICA8bGk+Zml4IGluIHZhbGlkYXRpb24gYnkgR2FyeSBQZW5uaW5ndG9uPC9saT4KICA8bGk+c2VyaW91cyBwYXJzaW5nIHBlcmZvcm1hbmNlcyBpbXByb3ZlbWVudHM8L2xpPgo8L3VsPgoKPGgzPjIuMy4yOiBGZWIgMjQgMjAwMTwvaDM+Cjx1bD4KICA8bGk+Y2hhc2luZyBYUGF0aCBidWdzLCBmb3VuZCBhIGJ1bmNoLCBjb21wbGV0ZWQgc29tZSBUT0RPPC9saT4KICA8bGk+Zml4ZWQgYSBEdGQgcGFyc2luZyBidWc8L2xpPgogIDxsaT5maXhlZCBhIGJ1ZyBpbiB4bWxOb2RlR2V0Q29udGVudDwvbGk+CiAgPGxpPklEL0lEUkVGIHN1cHBvcnQgcGFydGx5IHJld3JpdHRlbiBieSBHYXJ5IFBlbm5pbmd0b248L2xpPgo8L3VsPgoKPGgzPjIuMy4xOiBGZWIgMTUgMjAwMTwvaDM+Cjx1bD4KICA8bGk+c29tZSBYUGF0aCBhbmQgSFRNTCBidWcgZml4ZXMgZm9yIFhTTFQ8L2xpPgogIDxsaT5zbWFsbCBleHRlbnNpb24gb2YgdGhlIGhhc2ggdGFibGUgaW50ZXJmYWNlcyBmb3IgRE9NIGdkb21lMgogICAgaW1wbGVtZW50YXRpb248L2xpPgogIDxsaT5BIGZldyBidWcgZml4ZXM8L2xpPgo8L3VsPgoKPGgzPjIuMy4wOiBGZWIgOCAyMDAxICgyLjIuMTIgd2FzIG9uIDI1IEphbiBidXQgSSBkaWRuJ3Qga2VwdCB0cmFjayk8L2gzPgo8dWw+CiAgPGxpPkxvdHMgb2YgWFBhdGggYnVnIGZpeGVzPC9saT4KICA8bGk+QWRkIGEgbW9kZSB3aXRoIER0ZCBsb29rdXAgYnV0IHdpdGhvdXQgdmFsaWRhdGlvbiBlcnJvciByZXBvcnRpbmcgZm9yCiAgICBYU0xUPC9saT4KICA8bGk+QWRkIHN1cHBvcnQgZm9yIHRleHQgbm9kZSB3aXRob3V0IGVzY2FwaW5nIChYU0xUKTwvbGk+CiAgPGxpPmJ1ZyBmaXhlcyBmb3IgeG1sQ2hlY2tGaWxlbmFtZTwvbGk+CiAgPGxpPnZhbGlkYXRpb24gY29kZSBidWcgZml4ZXMgZnJvbSBHYXJ5IFBlbm5pbmd0b248L2xpPgogIDxsaT5QYXRjaCBmcm9tIFBhdWwgRC4gU21pdGggY29ycmVjdGluZyBVUkkgcGF0aCBub3JtYWxpemF0aW9uPC9saT4KICA8bGk+UGF0Y2ggdG8gYWxsb3cgc2ltdWx0YW5lb3VzIGluc3RhbGwgb2YgbGlieG1sLWRldmVsIGFuZAogIGxpYnhtbDItZGV2ZWw8L2xpPgogIDxsaT50aGUgZXhhbXBsZSBNYWtlZmlsZSBpcyBub3cgZml4ZWQ8L2xpPgogIDxsaT5hZGRlZCBIVE1MIHRvIHRoZSBSUE0gcGFja2FnZXM8L2xpPgogIDxsaT50cmVlIGNvcHlpbmcgYnVnZml4ZXM8L2xpPgogIDxsaT51cGRhdGVzIHRvIFdpbmRvd3MgbWFrZWZpbGVzPC9saT4KICA8bGk+b3B0aW1pc2F0aW9uIHBhdGNoIGZyb20gQmpvcm4gUmVlc2U8L2xpPgo8L3VsPgoKPGgzPjIuMi4xMTogSmFuIDQgMjAwMTwvaDM+Cjx1bD4KICA8bGk+YnVuY2ggb2YgYnVnIGZpeGVzIChtZW1vcnkgSS9PLCB4cGF0aCwgZnRwL2h0dHAsIC4uLik8L2xpPgogIDxsaT5hZGRlZCBodG1sSGFuZGxlT21pdHRlZEVsZW0oKTwvbGk+CiAgPGxpPkFwcGxpZWQgQmpvcm4gUmVlc2UncyBJUFY2IGZpcnN0IHBhdGNoPC9saT4KICA8bGk+QXBwbGllZCBQYXVsIEQuIFNtaXRoIHBhdGNoZXMgZm9yIHZhbGlkYXRpb24gb2YgWEluY2x1ZGUgcmVzdWx0czwvbGk+CiAgPGxpPmFkZGVkIFhQb2ludGVyIHhtbG5zKCkgbmV3IHNjaGVtZSBzdXBwb3J0PC9saT4KPC91bD4KCjxoMz4yLjIuMTA6IE5vdiAyNSAyMDAwPC9oMz4KPHVsPgogIDxsaT5GaXggdGhlIFdpbmRvd3MgcHJvYmxlbXMgb2YgMi4yLjg8L2xpPgogIDxsaT5pbnRlZ3JhdGUgT3BlblZNUyBwYXRjaGVzPC9saT4KICA8bGk+YmV0dGVyIGhhbmRsaW5nIG9mIHNvbWUgbmFzdHkgSFRNTCBpbnB1dDwvbGk+CiAgPGxpPkltcHJvdmVkIHRoZSBYUG9pbnRlciBpbXBsZW1lbnRhdGlvbjwvbGk+CiAgPGxpPmludGVncmF0ZSBhIG51bWJlciBvZiBwcm92aWRlZCBwYXRjaGVzPC9saT4KPC91bD4KCjxoMz4yLjIuOTogTm92IDI1IDIwMDA8L2gzPgo8dWw+CiAgPGxpPmVycm9uZW91cyByZWxlYXNlIDotKDwvbGk+CjwvdWw+Cgo8aDM+Mi4yLjg6IE5vdiAxMyAyMDAwPC9oMz4KPHVsPgogIDxsaT5GaXJzdCB2ZXJzaW9uIG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hpbmNsdWRlIj5YSW5jbHVkZTwvYT4KICAgIHN1cHBvcnQ8L2xpPgogIDxsaT5QYXRjaCBpbiBjb25kaXRpb25hbCBzZWN0aW9uIGhhbmRsaW5nPC9saT4KICA8bGk+dXBkYXRlZCBNUyBjb21waWxlciBwcm9qZWN0PC9saT4KICA8bGk+Zml4ZWQgc29tZSBYUGF0aCBwcm9ibGVtczwvbGk+CiAgPGxpPmFkZGVkIGFuIFVSSSBlc2NhcGluZyBmdW5jdGlvbjwvbGk+CiAgPGxpPnNvbWUgb3RoZXIgYnVnIGZpeGVzPC9saT4KPC91bD4KCjxoMz4yLjIuNzogT2N0IDMxIDIwMDA8L2gzPgo8dWw+CiAgPGxpPmFkZGVkIG1lc3NhZ2UgcmVkaXJlY3Rpb248L2xpPgogIDxsaT5YUGF0aCBpbXByb3ZlbWVudHMgKHRoYW5rcyBUT00gISk8L2xpPgogIDxsaT54bWxJT1BhcnNlRFREKCkgYWRkZWQ8L2xpPgogIDxsaT52YXJpb3VzIHNtYWxsIGZpeGVzIGluIHRoZSBIVE1MLCBVUkksIEhUVFAgYW5kIFhQb2ludGVyIHN1cHBvcnQ8L2xpPgogIDxsaT5zb21lIGNsZWFudXAgb2YgdGhlIE1ha2VmaWxlLCBhdXRvY29uZiBhbmQgdGhlIGRpc3RyaWJ1dGlvbiBjb250ZW50PC9saT4KPC91bD4KCjxoMz4yLjIuNjogT2N0IDI1IDIwMDA6PC9oMz4KPHVsPgogIDxsaT5BZGRlZCBhbiBoYXNoIHRhYmxlIG1vZHVsZSwgbWlncmF0ZWQgYSBudW1iZXIgb2YgaW50ZXJuYWwgc3RydWN0dXJlIHRvCiAgICB0aG9zZTwvbGk+CiAgPGxpPkZpeGVkIGEgcG9zdGVyaW9yaSB2YWxpZGF0aW9uIHByb2JsZW1zPC9saT4KICA8bGk+SFRUUCBtb2R1bGUgY2xlYW51cHM8L2xpPgogIDxsaT5IVE1MIHBhcnNlciBpbXByb3ZlbWVudHMgKHRhZyBlcnJvcnMsIHNjcmlwdC9zdHlsZSBoYW5kbGluZywgYXR0cmlidXRlCiAgICBub3JtYWxpemF0aW9uKTwvbGk+CiAgPGxpPmNvYWxlc2Npbmcgb2YgYWRqYWNlbnQgdGV4dCBub2RlczwvbGk+CiAgPGxpPmNvdXBsZSBvZiBYUGF0aCBidWcgZml4ZXMsIGV4cG9ydGVkIHRoZSBpbnRlcm5hbCBBUEk8L2xpPgo8L3VsPgoKPGgzPjIuMi41OiBPY3QgMTUgMjAwMDo8L2gzPgo8dWw+CiAgPGxpPlhQb2ludGVyIGltcGxlbWVudGF0aW9uIGFuZCB0ZXN0c3VpdGU8L2xpPgogIDxsaT5Mb3Qgb2YgWFBhdGggZml4ZXMsIGFkZGVkIHZhcmlhYmxlIGFuZCBmdW5jdGlvbnMgcmVnaXN0cmF0aW9uLCBtb3JlCiAgICB0ZXN0czwvbGk+CiAgPGxpPlBvcnRhYmlsaXR5IGZpeGVzLCBsb3RzIG9mIGVuaGFuY2VtZW50cyB0b3dhcmQgYW4gZWFzeSBXaW5kb3dzIGJ1aWxkIGFuZAogICAgcmVsZWFzZTwvbGk+CiAgPGxpPkxhdGUgdmFsaWRhdGlvbiBmaXhlczwvbGk+CiAgPGxpPkludGVncmF0ZWQgYSBsb3Qgb2YgY29udHJpYnV0ZWQgcGF0Y2hlczwvbGk+CiAgPGxpPmFkZGVkIG1lbW9yeSBtYW5hZ2VtZW50IGRvY3M8L2xpPgogIDxsaT5hIHBlcmZvcm1hbmNlIHByb2JsZW0gd2hlbiB1c2luZyBsYXJnZSBidWZmZXIgc2VlbXMgZml4ZWQ8L2xpPgo8L3VsPgoKPGgzPjIuMi40OiBPY3QgMSAyMDAwOjwvaDM+Cjx1bD4KICA8bGk+bWFpbiBYUGF0aCBwcm9ibGVtIGZpeGVkPC9saT4KICA8bGk+SW50ZWdyYXRlZCBwb3J0YWJpbGl0eSBwYXRjaGVzIGZvciBXaW5kb3dzPC9saT4KICA8bGk+U2VyaW91cyBidWcgZml4ZXMgb24gdGhlIFVSSSBhbmQgSFRNTCBjb2RlPC9saT4KPC91bD4KCjxoMz4yLjIuMzogU2VwIDE3IDIwMDA8L2gzPgo8dWw+CiAgPGxpPmJ1ZyBmaXhlczwvbGk+CiAgPGxpPmNsZWFudXAgb2YgZW50aXR5IGhhbmRsaW5nIGNvZGU8L2xpPgogIDxsaT5vdmVyYWxsIHJldmlldyBvZiBhbGwgbG9vcHMgaW4gdGhlIHBhcnNlcnMsIGFsbCBzcHJpbnRmIHVzYWdlIGhhcyBiZWVuCiAgICBjaGVja2VkIHRvbzwvbGk+CiAgPGxpPkZhciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGFyZ2VzIER0ZC4gVmFsaWRhdGluZyBhZ2FpbnN0IERvY2Jvb2sgWE1MIER0ZAogICAgd29ya3Mgc21vb3RobHkgbm93LjwvbGk+CjwvdWw+Cgo8aDM+MS44LjEwOiBTZXAgNiAyMDAwPC9oMz4KPHVsPgogIDxsaT5idWcgZml4IHJlbGVhc2UgZm9yIHNvbWUgR25vbWUgcHJvamVjdHM8L2xpPgo8L3VsPgoKPGgzPjIuMi4yOiBBdWd1c3QgMTIgMjAwMDwvaDM+Cjx1bD4KICA8bGk+bW9zdGx5IGJ1ZyBmaXhlczwvbGk+CiAgPGxpPnN0YXJ0ZWQgYWRkaW5nIHJvdXRpbmVzIHRvIGFjY2VzcyB4bWwgcGFyc2VyIGNvbnRleHQgb3B0aW9uczwvbGk+CjwvdWw+Cgo8aDM+Mi4yLjE6IEp1bHkgMjEgMjAwMDwvaDM+Cjx1bD4KICA8bGk+YSBwdXJlbHkgYnVnIGZpeGVzIHJlbGVhc2U8L2xpPgogIDxsaT5maXhlZCBhbiBlbmNvZGluZyBzdXBwb3J0IHByb2JsZW0gd2hlbiBwYXJzaW5nIGZyb20gYSBtZW1vcnkgYmxvY2s8L2xpPgogIDxsaT5maXhlZCBhIERPQ1RZUEUgcGFyc2luZyBwcm9ibGVtPC9saT4KICA8bGk+cmVtb3ZlZCBhIGJ1ZyBpbiB0aGUgZnVuY3Rpb24gYWxsb3dpbmcgdG8gb3ZlcnJpZGUgdGhlIG1lbW9yeSBhbGxvY2F0aW9uCiAgICByb3V0aW5lczwvbGk+CjwvdWw+Cgo8aDM+Mi4yLjA6IEp1bHkgMTQgMjAwMDwvaDM+Cjx1bD4KICA8bGk+YXBwbGllZCBhIGxvdCBvZiBwb3J0YWJpbGl0eSBmaXhlczwvbGk+CiAgPGxpPmJldHRlciBlbmNvZGluZyBzdXBwb3J0L2NsZWFudXAgYW5kIHNhdmluZyAoY29udGVudCBpcyBub3cgYWx3YXlzCiAgICBlbmNvZGVkIGluIFVURi04KTwvbGk+CiAgPGxpPnRoZSBIVE1MIHBhcnNlciBub3cgY29ycmVjdGx5IGhhbmRsZXMgZW5jb2RpbmdzPC9saT4KICA8bGk+YWRkZWQgeG1sSGFzUHJvcCgpPC9saT4KICA8bGk+Zml4ZWQgYSBzZXJpb3VzIHByb2JsZW0gd2l0aCAmYW1wOyMzODs8L2xpPgogIDxsaT5wcm9wYWdhdGVkIHRoZSBmaXggdG8gRlRQIGNsaWVudDwvbGk+CiAgPGxpPmNsZWFudXAsIGJ1Z2ZpeGVzLCBldGMgLi4uPC9saT4KICA8bGk+QWRkZWQgYSBwYWdlIGFib3V0IDxhIGhyZWY9ImVuY29kaW5nLmh0bWwiPmxpYnhtbCBJbnRlcm5hdGlvbmFsaXphdGlvbgogICAgc3VwcG9ydDwvYT48L2xpPgo8L3VsPgoKPGgzPjEuOC45OiAgSnVseSA5IDIwMDA8L2gzPgo8dWw+CiAgPGxpPmZpeGVkIHRoZSBzcGVjIHRoZSBSUE1zIHNob3VsZCBiZSBiZXR0ZXI8L2xpPgogIDxsaT5maXhlZCBhIHNlcmlvdXMgYnVnIGluIHRoZSBGVFAgaW1wbGVtZW50YXRpb24sIHJlbGVhc2VkIDEuOC45IHRvIHNvbHZlCiAgICBycG1maW5kIHVzZXJzIHByb2JsZW08L2xpPgo8L3VsPgoKPGgzPjIuMS4xOiBKdWx5IDEgMjAwMDwvaDM+Cjx1bD4KICA8bGk+Zml4ZXMgYSBjb3VwbGUgb2YgYnVncyBpbiB0aGUgMi4xLjAgcGFja2FnaW5nPC9saT4KICA8bGk+aW1wcm92ZW1lbnRzIG9uIHRoZSBIVE1MIHBhcnNlcjwvbGk+CjwvdWw+Cgo8aDM+Mi4xLjAgYW5kIDEuOC44OiBKdW5lIDI5IDIwMDA8L2gzPgo8dWw+CiAgPGxpPjEuOC44IGlzIG1vc3RseSBhIGNvbW9kaXR5IHBhY2thZ2UgZm9yIHVwZ3JhZGluZyB0byBsaWJ4bWwyIGFjY29kaW5nIHRvCiAgICA8YSBocmVmPSJ1cGdyYWRlLmh0bWwiPm5ldyBpbnN0cnVjdGlvbnM8L2E+LiBJdCBmaXhlcyBhIG5hc3R5IHByb2JsZW0KICAgIGFib3V0ICZhbXA7IzM4OyBjaGFycmVmIHBhcnNpbmc8L2xpPgogIDxsaT4yLjEuMCBhbHNvIGVhc2UgdGhlIHVwZ3JhZGUgZnJvbSBsaWJ4bWwgdjEgdG8gdGhlIHJlY2VudCB2ZXJzaW9uLiBpdAogICAgYWxzbyBjb250YWlucyBudW1lcm91cyBmaXhlcyBhbmQgZW5oYW5jZW1lbnRzOgogICAgPHVsPgogICAgICA8bGk+YWRkZWQgeG1sU3RvcFBhcnNlcigpIHRvIHN0b3AgcGFyc2luZzwvbGk+CiAgICAgIDxsaT5pbXByb3ZlZCBhIGxvdCBwYXJzaW5nIHNwZWVkIHdoZW4gdGhlcmUgaXMgbGFyZ2UgQ0RBVEEgYmxvY3M8L2xpPgogICAgICA8bGk+aW5jbHVkZXMgWFBhdGggcGF0Y2hlcyBwcm92aWRlZCBieSBQaWNkYXIgVGVjaG5vbG9neTwvbGk+CiAgICAgIDxsaT50cmllZCB0byBmaXggYXMgbXVjaCBhcyBwb3NzaWJsZSBEdEQgdmFsaWRhdGlvbiBhbmQgbmFtZXNwYWNlCiAgICAgICAgcmVsYXRlZCBwcm9ibGVtczwvbGk+CiAgICAgIDxsaT5vdXRwdXQgdG8gYSBnaXZlbiBlbmNvZGluZyBoYXMgYmVlbiBhZGRlZC90ZXN0ZWQ8L2xpPgogICAgICA8bGk+bG90IG9mIHZhcmlvdXMgZml4ZXM8L2xpPgogICAgPC91bD4KICA8L2xpPgo8L3VsPgoKPGgzPjIuMC4wOiBBcHIgMTIgMjAwMDwvaDM+Cjx1bD4KICA8bGk+Rmlyc3QgcHVibGljIHJlbGVhc2Ugb2YgbGlieG1sMi4gSWYgeW91IGFyZSB1c2luZyBsaWJ4bWwsIGl0J3MgYSBnb29kCiAgICBpZGVhIHRvIGNoZWNrIHRoZSAxLnggdG8gMi54IHVwZ3JhZGUgaW5zdHJ1Y3Rpb25zLiBOT1RFOiB3aGlsZSBpbml0YWxseQogICAgc2NoZWR1bGVkIGZvciBBcHIgMyB0aGUgcmVsYXNlIG9jY3VyZWQgb25seSBvbiBBcHIgMTIgZHVlIHRvIG1hc3NpdmUKICAgIHdvcmtsb2FkLjwvbGk+CiAgPGxpPlRoZSBpbmNsdWRlIGFyZSBub3cgbG9jYXRlZCB1bmRlciAkcHJlZml4L2luY2x1ZGUvbGlieG1sIChpbnN0ZWFkIG9mCiAgICAkcHJlZml4L2luY2x1ZGUvZ25vbWUteG1sKSwgdGhleSBhbHNvIGFyZSByZWZlcmVuY2VkIGJ5CiAgICA8cHJlPiNpbmNsdWRlICZsdDtsaWJ4bWwveHh4LmgmZ3Q7PC9wcmU+CiAgICA8cD5pbnN0ZWFkIG9mPC9wPgogICAgPHByZT4jaW5jbHVkZSAieHh4LmgiPC9wcmU+CiAgPC9saT4KICA8bGk+YSBuZXcgVVJJIG1vZHVsZSBmb3IgcGFyc2luZyBVUklzIGFuZCBmb2xsb3dpbmcgc3RyaWN0bHkgUkZDIDIzOTY8L2xpPgogIDxsaT50aGUgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgdXNlZCBieSBsaWJ4bWwgY2FuIG5vdyBiZSBvdmVybG9hZGVkCiAgICBkeW5hbWljYWxseSBieSB1c2luZyB4bWxNZW1TZXR1cCgpPC9saT4KICA8bGk+VGhlIHByZXZpb3VzbHkgQ1ZTIG9ubHkgdG9vbCB0ZXN0ZXIgaGFzIGJlZW4gcmVuYW1lZAogICAgPHN0cm9uZz54bWxsaW50PC9zdHJvbmc+IGFuZCBpcyBub3cgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIGxpYnhtbDIKICAgIHBhY2thZ2U8L2xpPgogIDxsaT5UaGUgSS9PIGludGVyZmFjZSBoYXMgYmVlbiByZXZhbXBlZC4gVGhlcmUgaXMgbm93IHdheXMgdG8gcGx1ZyBpbgogICAgc3BlY2lmaWMgSS9PIG1vZHVsZXMsIGVpdGhlciBhdCB0aGUgVVJJIHNjaGVtZSBkZXRlY3Rpb24gbGV2ZWwgdXNpbmcKICAgIHhtbFJlZ2lzdGVySW5wdXRDYWxsYmFja3MoKSAgb3IgYnkgcGFzc2luZyBJL08gZnVuY3Rpb25zIHdoZW4gY3JlYXRpbmcgYQogICAgcGFyc2VyIGNvbnRleHQgdXNpbmcgeG1sQ3JlYXRlSU9QYXJzZXJDdHh0KCk8L2xpPgogIDxsaT50aGVyZSBpcyBhIEMgcHJlcHJvY2Vzc29yIG1hY3JvIExJQlhNTF9WRVJTSU9OIHByb3ZpZGluZyB0aGUgdmVyc2lvbgogICAgbnVtYmVyIG9mIHRoZSBsaWJ4bWwgbW9kdWxlIGluIHVzZTwvbGk+CiAgPGxpPmEgbnVtYmVyIG9mIG9wdGlvbmFsIGZlYXR1cmVzIG9mIGxpYnhtbCBjYW4gbm93IGJlIGV4Y2x1ZGVkIGF0IGNvbmZpZ3VyZQogICAgdGltZSAoRlRQL0hUVFAvSFRNTC9YUGF0aC9EZWJ1Zyk8L2xpPgo8L3VsPgoKPGgzPjIuMC4wYmV0YTogTWFyIDE0IDIwMDA8L2gzPgo8dWw+CiAgPGxpPlRoaXMgaXMgYSBmaXJzdCBCZXRhIHJlbGVhc2Ugb2YgbGlieG1sIHZlcnNpb24gMjwvbGk+CiAgPGxpPkl0J3MgYXZhaWxhYmxlIG9ubHkgZnJvbTxhIGhyZWY9ImZ0cDovL3htbHNvZnQub3JnLyI+eG1sc29mdC5vcmcKICAgIEZUUDwvYT4sIGl0J3MgcGFja2FnZWQgYXMgbGlieG1sMi0yLjAuMGJldGEgYW5kIGF2YWlsYWJsZSBhcyB0YXIgYW5kCiAgUlBNczwvbGk+CiAgPGxpPlRoaXMgdmVyc2lvbiBpcyBub3cgdGhlIGhlYWQgaW4gdGhlIEdub21lIENWUyBiYXNlLCB0aGUgb2xkIG9uZSBpcwogICAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0YWcgTElCX1hNTF8xX1g8L2xpPgogIDxsaT5UaGlzIGluY2x1ZGVzIGEgdmVyeSBsYXJnZSBzZXQgb2YgY2hhbmdlcy4gRnJvbWEgIHByb2dyYW1tYXRpYyBwb2ludCBvZgogICAgdmlldyBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBoYXZlIHRvIGJlIG1vZGlmaWVkIHRvbyBtdWNoLCBjaGVjayB0aGUgPGEKICAgIGhyZWY9InVwZ3JhZGUuaHRtbCI+dXBncmFkZSBwYWdlPC9hPjwvbGk+CiAgPGxpPlNvbWUgaW50ZXJmYWNlcyBtYXkgY2hhbmdlcyAoZXNwZWNpYWxseSBhIGJpdCBhYm91dCBlbmNvZGluZykuPC9saT4KICA8bGk+dGhlIHVwZGF0ZXMgaW5jbHVkZXM6CiAgICA8dWw+CiAgICAgIDxsaT5maXggSTE4TiBzdXBwb3J0LiBJU08tTGF0aW4teC9VVEYtOC9VVEYtMTYgKG5lYXJseSkgc2VlbXMgY29ycmVjdGx5CiAgICAgICAgaGFuZGxlZCBub3c8L2xpPgogICAgICA8bGk+QmV0dGVyIGhhbmRsaW5nIG9mIGVudGl0aWVzLCBlc3BlY2lhbGx5IHdlbGwgZm9ybWVkbmVzcyBjaGVja2luZyBhbmQKICAgICAgICBwcm9wZXIgUEVyZWYgZXh0ZW5zaW9ucyBpbiBleHRlcm5hbCBzdWJzZXRzPC9saT4KICAgICAgPGxpPkRURCBjb25kaXRpb25hbCBzZWN0aW9uczwvbGk+CiAgICAgIDxsaT5WYWxpZGF0aW9uIG5vdyBjb3JyZWNseSBoYW5kbGUgZW50aXRpZXMgY29udGVudDwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vcnBtZmluZC5uZXQvdG9vbHMvZ2RvbWUvbWVzc2FnZXMvMDAzOS5odG1sIj5jaGFuZ2UKICAgICAgICBzdHJ1Y3R1cmVzIHRvIGFjY29tb2RhdGUgRE9NPC9hPjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPlNlcmlvdXMgcHJvZ3Jlc3Mgd2VyZSBtYWRlIHRvd2FyZCBjb21wbGlhbmNlLCA8YQogICAgaHJlZj0iY29uZi9yZXN1bHQuaHRtbCI+aGVyZSBhcmUgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdDwvYT4gYWdhaW5zdCB0aGUKICAgIE9BU0lTIHRlc3RzdWl0ZSAoZXhjZXB0IHRoZSBqYXBhbmVzZSB0ZXN0cyBzaW5jZSBJIGRvbid0IHN1cHBvcnQgdGhhdAogICAgZW5jb2RpbmcgeWV0KS4gVGhpcyBVUkwgaXMgcmVidWlsdCBldmVyeSBjb3VwbGUgb2YgaG91cnMgdXNpbmcgdGhlIENWUwogICAgaGVhZCB2ZXJzaW9uLjwvbGk+CjwvdWw+Cgo8aDM+MS44Ljc6IE1hciA2IDIwMDA8L2gzPgo8dWw+CiAgPGxpPlRoaXMgaXMgYSBidWcgZml4IHJlbGVhc2U6PC9saT4KICA8bGk+SXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgaWdub3JhYmxlIGJsYW5rcyBoZXVyaXN0aWMgdXNlZCBieQogICAgbGlieG1sLTEueCwgYSBuZXcgZnVuY3Rpb24gIHhtbEtlZXBCbGFua3NEZWZhdWx0KDApIHdpbGwgYWxsb3cgdGhpcy4gTm90ZQogICAgdGhhdCBmb3IgYWRoZXJlbmNlIHRvIFhNTCBzcGVjLCB0aGlzIGJlaGF2aW91ciB3aWxsIGJlIGRpc2FibGVkIGJ5IGRlZmF1bHQKICAgIGluIDIueCAuIFRoZSBzYW1lIGZ1bmN0aW9uIHdpbGwgYWxsb3cgdG8ga2VlcCBjb21wYXRpYmlsaXR5IGZvciBvbGQKICBjb2RlLjwvbGk+CiAgPGxpPkJsYW5rcyBpbiAmbHQ7YSZndDsgICZsdDsvYSZndDsgY29uc3RydWN0cyBhcmUgbm90IGlnbm9yZWQgYW55bW9yZSwKICAgIGF2b2lkaW5nIGhldXJpc3RpYyBpcyByZWFsbHkgdGhlIFJpZ2h0IFdheSA6LVw8L2xpPgogIDxsaT5UaGUgdW5jaGVja2VkIHVzZSBvZiBzbnByaW50ZiB3aGljaCB3YXMgYnJlYWtpbmcgbGlieG1sLTEuOC42CiAgICBjb21waWxhdGlvbiBvbiBzb21lIHBsYXRmb3JtcyBoYXMgYmVlbiBmaXhlZDwvbGk+CiAgPGxpPm5hbm9mdHAuYyBuYW5vaHR0cC5jOiBGaXhlZCAnIycgYW5kICc/JyBzdHJpcHBpbmcgd2hlbiBwcm9jZXNzaW5nCiAgVVJJczwvbGk+CjwvdWw+Cgo8aDM+MS44LjY6IEphbiAzMSAyMDAwPC9oMz4KPHVsPgogIDxsaT5hZGRlZCBhIG5hbm9GVFAgdHJhbnNwb3J0IG1vZHVsZSwgZGVidWdnZWQgdW50aWwgdGhlIG5ldyB2ZXJzaW9uIG9mIDxhCiAgICBocmVmPSJodHRwOi8vcnBtZmluZC5uZXQvbGludXgvcnBtMmh0bWwvcnBtZmluZC5odG1sIj5ycG1maW5kPC9hPiBjYW4gdXNlCiAgICBpdCB3aXRob3V0IHRyb3VibGVzPC9saT4KPC91bD4KCjxoMz4xLjguNTogSmFuIDIxIDIwMDA8L2gzPgo8dWw+CiAgPGxpPmFkZGluZyBBUElzIHRvIHBhcnNlIGEgd2VsbCBiYWxhbmNlZCBjaHVuayBvZiBYTUwgKHByb2R1Y3Rpb24gPGEKICAgIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwjTlQtY29udGVudCI+WzQzXSBjb250ZW50PC9hPiBvZiB0aGUgWE1MCiAgICBzcGVjKTwvbGk+CiAgPGxpPmZpeGVkIGEgaGlkZW91cyBidWcgaW4geG1sR2V0UHJvcCBwb2ludGVkIGJ5IFJ1bmUuRGp1cmh1dXNAZmFzdC5ubzwvbGk+CiAgPGxpPkpvZHkgR29sZGJlcmcgJmx0O2pnb2xkYmVyZ0Bob21lLmNvbSZndDsgcHJvdmlkZWQgYW5vdGhlciBwYXRjaCB0cnlpbmcKICAgIHRvIHNvbHZlIHRoZSB6bGliIGNoZWNrcyBwcm9ibGVtczwvbGk+CiAgPGxpPlRoZSBjdXJyZW50IHN0YXRlIGluIGdub21lIENWUyBiYXNlIGlzIGV4cGVjdGVkIHRvIHNoaXAgYXMgMS44LjUgd2l0aAogICAgZ251bWVyaWMgc29vbjwvbGk+CjwvdWw+Cgo8aDM+MS44LjQ6IEphbiAxMyAyMDAwPC9oMz4KPHVsPgogIDxsaT5idWcgZml4ZXMsIHJlaW50cm9kdWNlZCB4bWxOZXdHbG9iYWxOcygpLCBmaXhlZCB4bWxOZXdOcygpPC9saT4KICA8bGk+YWxsIGV4aXQoKSBjYWxsIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIGxpYnhtbDwvbGk+CiAgPGxpPmZpeGVkIGEgcHJvYmxlbSB3aXRoIElOQ0xVREVfV0lOU09DSyBvbiBXSU4zMiBwbGF0Zm9ybTwvbGk+CiAgPGxpPmFkZGVkIG5ld0RvY0ZyYWdtZW50KCk8L2xpPgo8L3VsPgoKPGgzPjEuOC4zOiBKYW4gNSAyMDAwPC9oMz4KPHVsPgogIDxsaT5hIFB1c2ggaW50ZXJmYWNlIGZvciB0aGUgWE1MIGFuZCBIVE1MIHBhcnNlcnM8L2xpPgogIDxsaT5hIHNoZWxsLWxpa2UgaW50ZXJmYWNlIHRvIHRoZSBkb2N1bWVudCB0cmVlICh0cnkgdGVzdGVyIC0tc2hlbGwgOi0pPC9saT4KICA8bGk+bG90cyBvZiBidWcgZml4ZXMgYW5kIGltcHJvdmVtZW50IGFkZGVkIG92ZXIgWE1hcyBob2xsaWRheXM8L2xpPgogIDxsaT5maXhlZCB0aGUgRFREIHBhcnNpbmcgY29kZSB0byB3b3JrIHdpdGggdGhlIHhodG1sIERURDwvbGk+CiAgPGxpPmFkZGVkIHhtbFJlbW92ZVByb3AoKSwgeG1sUmVtb3ZlSUQoKSBhbmQgeG1sUmVtb3ZlUmVmKCk8L2xpPgogIDxsaT5GaXhlZCBidWdzIGluIHhtbE5ld05zKCk8L2xpPgogIDxsaT5FeHRlcm5hbCBlbnRpdHkgbG9hZGluZyBjb2RlIGhhcyBiZWVuIHJldmFtcGVkLCBub3cgaXQgdXNlcwogICAgeG1sTG9hZEV4dGVybmFsRW50aXR5KCksIHNvbWUgZml4IG9uIGVudGl0aWVzIHByb2Nlc3Npbmcgd2VyZSBhZGRlZDwvbGk+CiAgPGxpPmNsZWFuZWQgdXAgV0lOMzIgaW5jbHVkZXMgb2Ygc29ja2V0IHN0dWZmPC9saT4KPC91bD4KCjxoMz4xLjguMjogRGVjIDIxIDE5OTk8L2gzPgo8dWw+CiAgPGxpPkkgZ290IGFub3RoZXIgcHJvYmxlbSB3aXRoIGluY2x1ZGVzIGFuZCBDKyssIEkgaG9wZSB0aGlzIGlzc3VlIGlzIGZpeGVkCiAgICBmb3IgZ29vZCB0aGlzIHRpbWU8L2xpPgogIDxsaT5BZGRlZCBhIGZldyB0cmVlIG1vZGlmaWNhdGlvbiBmdW5jdGlvbnM6IHhtbFJlcGxhY2VOb2RlLAogICAgeG1sQWRkUHJldlNpYmxpbmcsIHhtbEFkZE5leHRTaWJsaW5nLCB4bWxOb2RlU2V0TmFtZSBhbmQKICAgIHhtbERvY1NldFJvb3RFbGVtZW50PC9saT4KICA8bGk+VHJpZWQgdG8gaW1wcm92ZSB0aGUgSFRNTCBvdXRwdXQgd2l0aCBoZWxwIGZyb20gPGEKICAgIGhyZWY9Im1haWx0bzpjbGFoZXlAdW1pY2guZWR1Ij5DaHJpcyBMYWhleTwvYT48L2xpPgo8L3VsPgoKPGgzPjEuOC4xOiBEZWMgMTggMTk5OTwvaDM+Cjx1bD4KICA8bGk+dmFyaW91cyBwYXRjaGVzIHRvIGF2b2lkIHRyb3VibGVzIHdoZW4gdXNpbmcgbGlieG1sIHdpdGggQysrIGNvbXBpbGVycwogICAgdGhlICJuYW1lc3BhY2UiIGtleXdvcmQgYW5kIEMgZXNjYXBpbmcgaW4gaW5jbHVkZSBmaWxlczwvbGk+CiAgPGxpPmEgcHJvYmxlbSBpbiBvbmUgb2YgdGhlIGNvcmUgbWFjcm9zIElTX0NIQVIgd2FzIGNvcnJlY3RlZDwvbGk+CiAgPGxpPmZpeGVkIGEgYnVnIGludHJvZHVjZWQgaW4gMS44LjAgYnJlYWtpbmcgZGVmYXVsdCBuYW1lc3BhY2UgcHJvY2Vzc2luZywKICAgIGFuZCBtb3JlIHNwZWNpZmljYWxseSB0aGUgRGlhIGFwcGxpY2F0aW9uPC9saT4KICA8bGk+Zml4ZWQgYSBwb3N0ZXJpb3JpIHZhbGlkYXRpb24gKHZhbGlkYXRpb24gYWZ0ZXIgcGFyc2luZywgb3IgYnkgdXNpbmcgYQogICAgRHRkIG5vdCBzcGVjaWZpZWQgaW4gdGhlIG9yaWdpbmFsIGRvY3VtZW50KTwvbGk+CiAgPGxpPmZpeGVkIGEgYnVnIGluPC9saT4KPC91bD4KCjxoMz4xLjguMDogRGVjIDEyIDE5OTk8L2gzPgo8dWw+CiAgPGxpPmNsZWFudXAsIGVzcGVjaWFsbHkgbWVtb3J5IHdpc2U8L2xpPgogIDxsaT50aGUgcGFyc2VyIHNob3VsZCBiZSBtb3JlIHJlbGlhYmxlLCBlc3BlY2lhbGx5IHRoZSBIVE1MIG9uZSwgaXQgc2hvdWxkCiAgICBub3QgY3Jhc2gsIHdoYXRldmVyIHRoZSBpbnB1dCAhPC9saT4KICA8bGk+SW50ZWdyYXRlZCB2YXJpb3VzIHBhdGNoZXMsIGVzcGVjaWFsbHkgYSBzcGVlZHVwIGltcHJvdmVtZW50IGZvciBsYXJnZQogICAgZGF0YXNldCBmcm9tIDxhIGhyZWY9Im1haWx0bzpjbnlnYXJkQGJlbGxhdGxhbnRpYy5uZXQiPkNhcmwgTnlnYXJkPC9hPiwKICAgIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1idWZmZXJzIHRvIGVuYWJsZSB0aGVtLjwvbGk+CiAgPGxpPmF0dHJpYnV0ZSBub3JtYWxpemF0aW9uLCBvb3BzIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgbG9uZyBhZ28gITwvbGk+CiAgPGxpPmF0dHJpYnV0ZXMgZGVmYXVsdGVkIGZyb20gRHRkcyBzaG91bGQgYmUgYXZhaWxhYmxlLCB4bWxTZXRQcm9wKCkgbm93CiAgICBkb2VzIGVudGl0aWVzIGVzY2FwdGluZyBieSBkZWZhdWx0LjwvbGk+CjwvdWw+Cgo8aDM+MS43LjQ6IE9jdCAyNSAxOTk5PC9oMz4KPHVsPgogIDxsaT5Mb3RzIG9mIEhUTUwgaW1wcm92ZW1lbnQ8L2xpPgogIDxsaT5GaXhlZCBzb21lIGVycm9ycyB3aGVuIHNhdmluZyBib3RoIFhNTCBhbmQgSFRNTDwvbGk+CiAgPGxpPk1vcmUgZXhhbXBsZXMsIHRoZSByZWdyZXNzaW9uIHRlc3RzIHNob3VsZCBub3cgbG9vayBjbGVhbjwvbGk+CiAgPGxpPkZpeGVkIGEgYnVnIHdpdGggY29udGlndW91cyBjaGFycmVmPC9saT4KPC91bD4KCjxoMz4xLjcuMzogU2VwIDI5IDE5OTk8L2gzPgo8dWw+CiAgPGxpPnBvcnRhYmlsaXR5IHByb2JsZW1zIGZpeGVkPC9saT4KICA8bGk+c25wcmludGYgd2FzIHVzZWQgdW5jb25kaXRpb25uYWxseSwgbGVhZGluZyB0byBsaW5rIHByb2JsZW1zIG9uIHN5c3RlbQogICAgd2VyZSBpdCdzIG5vdCBhdmFpbGFibGUsIGZpeGVkPC9saT4KPC91bD4KCjxoMz4xLjcuMTogU2VwIDI0IDE5OTk8L2gzPgo8dWw+CiAgPGxpPlRoZSBiYXNpYyB0eXBlIGZvciBzdHJpbmdzIG1hbmlwdWxhdGVkIGJ5IGxpYnhtbCBoYXMgYmVlbiByZW5hbWVkIGluCiAgICAxLjcuMSBmcm9tIDxzdHJvbmc+Q0hBUjwvc3Ryb25nPiB0byA8c3Ryb25nPnhtbENoYXI8L3N0cm9uZz4uIFRoZSByZWFzb24KICAgIGlzIHRoYXQgQ0hBUiB3YXMgY29uZmxpY3Rpbmcgd2l0aCBhIHByZWRlZmluZWQgdHlwZSBvbiBXaW5kb3dzLiBIb3dldmVyIG9uCiAgICBub24gV0lOMzIgZW52aXJvbm1lbnQsIGNvbXBhdGliaWxpdHkgaXMgcHJvdmlkZWQgYnkgdGhlIHdheSBvZiAgYQogICAgPHN0cm9uZz4jZGVmaW5lIDwvc3Ryb25nPi48L2xpPgogIDxsaT5DaGFuZ2VkIGFub3RoZXIgZXJyb3IgOiB0aGUgdXNlIG9mIGEgc3RydWN0dXJlIGZpZWxkIGNhbGxlZCBlcnJubywgYW5kCiAgICBsZWFkaW5nIHRvIHRyb3VibGVzIG9uIHBsYXRmb3JtcyB3aGVyZSBpdCdzIGEgbWFjcm88L2xpPgo8L3VsPgoKPGgzPjEuNy4wOiBzZXAgMjMgMTk5OTwvaDM+Cjx1bD4KICA8bGk+QWRkZWQgdGhlIGFiaWxpdHkgdG8gZmV0Y2ggcmVtb3RlIERURCBvciBwYXJzZWQgZW50aXRpZXMsIHNlZSB0aGUgPGEKICAgIGhyZWY9Imh0bWwvbGlieG1sLW5hbm9odHRwLmh0bWwiPm5hbm9odHRwPC9hPiBtb2R1bGUuPC9saT4KICA8bGk+QWRkZWQgYW4gZXJybm8gdG8gcmVwb3J0IGVycm9ycyBieSBhbm90aGVyIG1lYW4gdGhhbiBhIHNpbXBsZSBwcmludGYKICAgIGxpa2UgY2FsbGJhY2s8L2xpPgogIDxsaT5GaW5pc2hlZCBJRC9JRFJFRiBzdXBwb3J0IGFuZCBjaGVja2luZyB3aGVuIHZhbGlkYXRpb248L2xpPgogIDxsaT5TZXJpb3VzIG1lbW9yeSBsZWFrcyBmaXhlZCAodGhlcmUgaXMgbm93IGEgPGEKICAgIGhyZWY9Imh0bWwvbGlieG1sLXhtbG1lbW9yeS5odG1sIj5tZW1vcnkgd3JhcHBlcjwvYT4gbW9kdWxlKTwvbGk+CiAgPGxpPkltcHJvdmVtZW50IG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3hwYXRoIj5YUGF0aDwvYT4KICAgIGltcGxlbWVudGF0aW9uPC9saT4KICA8bGk+QWRkZWQgYW4gSFRNTCBwYXJzZXIgZnJvbnQtZW5kPC9saT4KPC91bD4KCjxoMj48YSBuYW1lPSJYTUwiPlhNTDwvYT48L2gyPgoKPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCI+WE1MIGlzIGEgc3RhbmRhcmQ8L2E+IGZvcgptYXJrdXAtYmFzZWQgc3RydWN0dXJlZCBkb2N1bWVudHMuIEhlcmUgaXMgPGEgbmFtZT0iZXhhbXBsZSI+YW4gZXhhbXBsZSBYTUwKZG9jdW1lbnQ8L2E+OjwvcD4KPHByZT4mbHQ7P3htbCB2ZXJzaW9uPSIxLjAiPyZndDsKJmx0O0VYQU1QTEUgcHJvcDE9Imdub21lIGlzIGdyZWF0IiBwcm9wMj0iJmFtcDthbXA7IGxpbnV4IHRvbyImZ3Q7CiAgJmx0O2hlYWQmZ3Q7CiAgICZsdDt0aXRsZSZndDtXZWxjb21lIHRvIEdub21lJmx0Oy90aXRsZSZndDsKICAmbHQ7L2hlYWQmZ3Q7CiAgJmx0O2NoYXB0ZXImZ3Q7CiAgICZsdDt0aXRsZSZndDtUaGUgTGludXggYWR2ZW50dXJlJmx0Oy90aXRsZSZndDsKICAgJmx0O3AmZ3Q7YmxhIGJsYSBibGEgLi4uJmx0Oy9wJmd0OwogICAmbHQ7aW1hZ2UgaHJlZj0ibGludXMuZ2lmIi8mZ3Q7CiAgICZsdDtwJmd0Oy4uLiZsdDsvcCZndDsKICAmbHQ7L2NoYXB0ZXImZ3Q7CiZsdDsvRVhBTVBMRSZndDs8L3ByZT4KCjxwPlRoZSBmaXJzdCBsaW5lIHNwZWNpZmllcyB0aGF0IGl0J3MgYW4gWE1MIGRvY3VtZW50IGFuZCBnaXZlcyB1c2VmdWwKaW5mb3JtYXRpb24gYWJvdXQgaXRzIGVuY29kaW5nLiBUaGVuIHRoZSBkb2N1bWVudCBpcyBhIHRleHQgZm9ybWF0IHdob3NlCnN0cnVjdHVyZSBpcyBzcGVjaWZpZWQgYnkgdGFncyBiZXR3ZWVuIGJyYWNrZXRzLiA8c3Ryb25nPkVhY2ggdGFnIG9wZW5lZCBoYXMKdG8gYmUgY2xvc2VkPC9zdHJvbmc+LiBYTUwgaXMgcGVkYW50aWMgYWJvdXQgdGhpcy4gSG93ZXZlciwgaWYgYSB0YWcgaXMgZW1wdHkKKG5vIGNvbnRlbnQpLCBhIHNpbmdsZSB0YWcgY2FuIHNlcnZlIGFzIGJvdGggdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgdGFnIGlmIGl0CmVuZHMgd2l0aCA8Y29kZT4vJmd0OzwvY29kZT4gcmF0aGVyIHRoYW4gd2l0aCA8Y29kZT4mZ3Q7PC9jb2RlPi4gTm90ZSB0aGF0LApmb3IgZXhhbXBsZSwgdGhlIGltYWdlIHRhZyBoYXMgbm8gY29udGVudCAoanVzdCBhbiBhdHRyaWJ1dGUpIGFuZCBpcyBjbG9zZWQgYnkKZW5kaW5nIHRoZSB0YWcgd2l0aCA8Y29kZT4vJmd0OzwvY29kZT4uPC9wPgoKPHA+WE1MIGNhbiBiZSBhcHBsaWVkIHN1Y2Vzc2Z1bGx5IHRvIGEgd2lkZSByYW5nZSBvZiB1c2VzLCBmcm9tIGxvbmcgdGVybQpzdHJ1Y3R1cmVkIGRvY3VtZW50IG1haW50ZW5hbmNlICh3aGVyZSBpdCBmb2xsb3dzIHRoZSBzdGVwcyBvZiBTR01MKSB0byBzaW1wbGUKZGF0YSBlbmNvZGluZyBtZWNoYW5pc21zIGxpa2UgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdHRpbmcgKGdsYWRlKSwKc3ByZWFkc2hlZXRzIChnbnVtZXJpYyksIG9yIGV2ZW4gc2hvcnRlciBsaXZlZCBkb2N1bWVudHMgc3VjaCBhcyBXZWJEQVYgd2hlcmUKaXQgaXMgdXNlZCB0byBlbmNvZGUgcmVtb3RlIGNhbGxzIGJldHdlZW4gYSBjbGllbnQgYW5kIGEgc2VydmVyLjwvcD4KCjxoMj48YSBuYW1lPSJYU0xUIj5YU0xUPC9hPjwvaDI+Cgo8cD5DaGVjayA8YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvWFNMVCI+dGhlIHNlcGFyYXRlIGxpYnhzbHQgcGFnZTwvYT48L3A+Cgo8cD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94c2x0Ij5YU0wgVHJhbnNmb3JtYXRpb25zPC9hPiwgIGlzIGEgbGFuZ3VhZ2UKZm9yIHRyYW5zZm9ybWluZyBYTUwgZG9jdW1lbnRzIGludG8gb3RoZXIgWE1MIGRvY3VtZW50cyAob3IgSFRNTC90ZXh0dWFsCm91dHB1dCkuPC9wPgoKPHA+QSBzZXBhcmF0ZSBsaWJyYXJ5IGNhbGxlZCBsaWJ4c2x0IGlzIGJlaW5nIGJ1aWx0IG9uIHRvcCBvZiBsaWJ4bWwyLiBUaGlzCm1vZHVsZSAibGlieHNsdCIgY2FuIGJlIGZvdW5kIGluIHRoZSBHbm9tZSBDVlMgYmFzZSB0b28uPC9wPgoKPHA+WW91IGNhbiBjaGVjayB0aGUgPGEKaHJlZj0iaHR0cDovL2N2cy5nbm9tZS5vcmcvbHhyL3NvdXJjZS9saWJ4c2x0L0ZFQVRVUkVTIj5mZWF0dXJlczwvYT4gc3VwcG9ydGVkCmFuZCB0aGUgcHJvZ3Jlc3NlcyBvbiB0aGUgPGEKaHJlZj0iaHR0cDovL2N2cy5nbm9tZS5vcmcvbHhyL3NvdXJjZS9saWJ4c2x0L0NoYW5nZUxvZyI+Q2hhbmdlbG9nPC9hPjwvcD4KCjxoMj5BbiBvdmVydmlldyBvZiBsaWJ4bWwgYXJjaGl0ZWN0dXJlPC9oMj4KCjxwPkxpYnhtbCBpcyBtYWRlIG9mIG11bHRpcGxlIGNvbXBvbmVudHM7IHNvbWUgb2YgdGhlbSBhcmUgb3B0aW9uYWwsIGFuZCBtb3N0Cm9mIHRoZSBibG9jayBpbnRlcmZhY2VzIGFyZSBwdWJsaWMuIFRoZSBtYWluIGNvbXBvbmVudHMgYXJlOjwvcD4KPHVsPgogIDxsaT5hbiBJbnB1dC9PdXRwdXQgbGF5ZXI8L2xpPgogIDxsaT5GVFAgYW5kIEhUVFAgY2xpZW50IGxheWVycyAob3B0aW9uYWwpPC9saT4KICA8bGk+YW4gSW50ZXJuYXRpb25hbGl6YXRpb24gbGF5ZXIgbWFuYWdpbmcgdGhlIGVuY29kaW5ncyBzdXBwb3J0PC9saT4KICA8bGk+YSBVUkkgbW9kdWxlPC9saT4KICA8bGk+dGhlIFhNTCBwYXJzZXIgYW5kIGl0cyBiYXNpYyBTQVggaW50ZXJmYWNlPC9saT4KICA8bGk+YW4gSFRNTCBwYXJzZXIgdXNpbmcgdGhlIHNhbWUgU0FYIGludGVyZmFjZSAob3B0aW9uYWwpPC9saT4KICA8bGk+YSBTQVggdHJlZSBtb2R1bGUgdG8gYnVpbGQgYW4gaW4tbWVtb3J5IERPTSByZXByZXNlbnRhdGlvbjwvbGk+CiAgPGxpPmEgdHJlZSBtb2R1bGUgdG8gbWFuaXB1bGF0ZSB0aGUgRE9NIHJlcHJlc2VudGF0aW9uPC9saT4KICA8bGk+YSB2YWxpZGF0aW9uIG1vZHVsZSB1c2luZyB0aGUgRE9NIHJlcHJlc2VudGF0aW9uIChvcHRpb25hbCk8L2xpPgogIDxsaT5hbiBYUGF0aCBtb2R1bGUgZm9yIGdsb2JhbCBsb29rdXAgaW4gYSBET00gcmVwcmVzZW50YXRpb24KICAob3B0aW9uYWwpPC9saT4KICA8bGk+YSBkZWJ1ZyBtb2R1bGUgKG9wdGlvbmFsKTwvbGk+CjwvdWw+Cgo8cD5HcmFwaGljYWxseSB0aGlzIGdpdmVzIHRoZSBmb2xsb3dpbmc6PC9wPgoKPHA+PGltZyBzcmM9ImxpYnhtbC5naWYiIGFsdD0iYSBncmFwaGljYWwgdmlldyBvZiB0aGUgdmFyaW91cyI+PC9wPgoKPHA+PC9wPgoKPGgyPjxhIG5hbWU9InRyZWUiPlRoZSB0cmVlIG91dHB1dDwvYT48L2gyPgoKPHA+VGhlIHBhcnNlciByZXR1cm5zIGEgdHJlZSBidWlsdCBkdXJpbmcgdGhlIGRvY3VtZW50IGFuYWx5c2lzLiBUaGUgdmFsdWUKcmV0dXJuZWQgaXMgYW4gPHN0cm9uZz54bWxEb2NQdHI8L3N0cm9uZz4gKGkuZS4sIGEgcG9pbnRlciB0byBhbgo8c3Ryb25nPnhtbERvYzwvc3Ryb25nPiBzdHJ1Y3R1cmUpLiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiBzdWNoCmFzIHRoZSBmaWxlIG5hbWUsIHRoZSBkb2N1bWVudCB0eXBlLCBhbmQgYSA8c3Ryb25nPmNoaWxkcmVuPC9zdHJvbmc+IHBvaW50ZXIKd2hpY2ggaXMgdGhlIHJvb3Qgb2YgdGhlIGRvY3VtZW50IChvciBtb3JlIGV4YWN0bHkgdGhlIGZpcnN0IGNoaWxkIHVuZGVyIHRoZQpyb290IHdoaWNoIGlzIHRoZSBkb2N1bWVudCkuIFRoZSB0cmVlIGlzIG1hZGUgb2YgPHN0cm9uZz54bWxOb2RlPC9zdHJvbmc+cywKY2hhaW5lZCBpbiBkb3VibGUtbGlua2VkIGxpc3RzIG9mIHNpYmxpbmdzIGFuZCB3aXRoIGEgY2hpbGRyZW4mbHQ7LSZndDtwYXJlbnQKcmVsYXRpb25zaGlwLiBBbiB4bWxOb2RlIGNhbiBhbHNvIGNhcnJ5IHByb3BlcnRpZXMgKGEgY2hhaW4gb2YgeG1sQXR0cgpzdHJ1Y3R1cmVzKS4gQW4gYXR0cmlidXRlIG1heSBoYXZlIGEgdmFsdWUgd2hpY2ggaXMgYSBsaXN0IG9mIFRFWFQgb3IKRU5USVRZX1JFRiBub2Rlcy48L3A+Cgo8cD5IZXJlIGlzIGFuIGV4YW1wbGUgKGVycm9uZW91cyB3aXRoIHJlc3BlY3QgdG8gdGhlIFhNTCBzcGVjIHNpbmNlIHRoZXJlCnNob3VsZCBiZSBvbmx5IG9uZSBFTEVNRU5UIHVuZGVyIHRoZSByb290KTo8L3A+Cgo8cD48aW1nIHNyYz0ic3RydWN0dXJlLmdpZiIgYWx0PSIgc3RydWN0dXJlLmdpZiAiPjwvcD4KCjxwPkluIHRoZSBzb3VyY2UgcGFja2FnZSB0aGVyZSBpcyBhIHNtYWxsIHByb2dyYW0gKG5vdCBpbnN0YWxsZWQgYnkgZGVmYXVsdCkKY2FsbGVkIDxzdHJvbmc+eG1sbGludDwvc3Ryb25nPiB3aGljaCBwYXJzZXMgWE1MIGZpbGVzIGdpdmVuIGFzIGFyZ3VtZW50IGFuZApwcmludHMgdGhlbSBiYWNrIGFzIHBhcnNlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIGRldGVjdGluZyBlcnJvcnMgYm90aCBpbiBYTUwKY29kZSBhbmQgaW4gdGhlIFhNTCBwYXJzZXIgaXRzZWxmLiBJdCBoYXMgYW4gb3B0aW9uIDxzdHJvbmc+LS1kZWJ1Zzwvc3Ryb25nPgp3aGljaCBwcmludHMgdGhlIGFjdHVhbCBpbi1tZW1vcnkgc3RydWN0dXJlIG9mIHRoZSBkb2N1bWVudDsgaGVyZSBpcyB0aGUKcmVzdWx0IHdpdGggdGhlIDxhIGhyZWY9IiNleGFtcGxlIj5leGFtcGxlPC9hPiBnaXZlbiBiZWZvcmU6PC9wPgo8cHJlPkRPQ1VNRU5UCnZlcnNpb249MS4wCnN0YW5kYWxvbmU9dHJ1ZQogIEVMRU1FTlQgRVhBTVBMRQogICAgQVRUUklCVVRFIHByb3AxCiAgICAgIFRFWFQKICAgICAgY29udGVudD1nbm9tZSBpcyBncmVhdAogICAgQVRUUklCVVRFIHByb3AyCiAgICAgIEVOVElUWV9SRUYKICAgICAgVEVYVAogICAgICBjb250ZW50PSBsaW51eCB0b28gCiAgICBFTEVNRU5UIGhlYWQKICAgICAgRUxFTUVOVCB0aXRsZQogICAgICAgIFRFWFQKICAgICAgICBjb250ZW50PVdlbGNvbWUgdG8gR25vbWUKICAgIEVMRU1FTlQgY2hhcHRlcgogICAgICBFTEVNRU5UIHRpdGxlCiAgICAgICAgVEVYVAogICAgICAgIGNvbnRlbnQ9VGhlIExpbnV4IGFkdmVudHVyZQogICAgICBFTEVNRU5UIHAKICAgICAgICBURVhUCiAgICAgICAgY29udGVudD1ibGEgYmxhIGJsYSAuLi4KICAgICAgRUxFTUVOVCBpbWFnZQogICAgICAgIEFUVFJJQlVURSBocmVmCiAgICAgICAgICBURVhUCiAgICAgICAgICBjb250ZW50PWxpbnVzLmdpZgogICAgICBFTEVNRU5UIHAKICAgICAgICBURVhUCiAgICAgICAgY29udGVudD0uLi48L3ByZT4KCjxwPlRoaXMgc2hvdWxkIGJlIHVzZWZ1bCBmb3IgbGVhcm5pbmcgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG1vZGVsLjwvcD4KCjxoMj48YSBuYW1lPSJpbnRlcmZhY2UiPlRoZSBTQVggaW50ZXJmYWNlPC9hPjwvaDI+Cgo8cD5Tb21ldGltZXMgdGhlIERPTSB0cmVlIG91dHB1dCBpcyBqdXN0IHRvbyBsYXJnZSB0byBmaXQgcmVhc29uYWJseSBpbnRvCm1lbW9yeS4gSW4gdGhhdCBjYXNlIChhbmQgaWYgeW91IGRvbid0IGV4cGVjdCB0byBzYXZlIGJhY2sgdGhlIFhNTCBkb2N1bWVudApsb2FkZWQgdXNpbmcgbGlieG1sKSwgaXQncyBiZXR0ZXIgdG8gdXNlIHRoZSBTQVggaW50ZXJmYWNlIG9mIGxpYnhtbC4gU0FYIGlzIGEKPHN0cm9uZz5jYWxsYmFjay1iYXNlZCBpbnRlcmZhY2U8L3N0cm9uZz4gdG8gdGhlIHBhcnNlci4gQmVmb3JlIHBhcnNpbmcsIHRoZQphcHBsaWNhdGlvbiBsYXllciByZWdpc3RlcnMgYSBjdXN0b21pemVkIHNldCBvZiBjYWxsYmFja3Mgd2hpY2ggYXJlIGNhbGxlZCBieQp0aGUgbGlicmFyeSBhcyBpdCBwcm9ncmVzc2VzIHRocm91Z2ggdGhlIFhNTCBpbnB1dC48L3A+Cgo8cD5UbyBnZXQgbW9yZSBkZXRhaWxlZCBzdGVwLWJ5LXN0ZXAgZ3VpZGFuY2Ugb24gdXNpbmcgdGhlIFNBWCBpbnRlcmZhY2Ugb2YKbGlieG1sLCBzZWUgdGhlIDxhCmhyZWY9Imh0dHA6Ly93d3cuZGFhLmNvbS5hdS9+amFtZXMvZ25vbWUveG1sLXNheC94bWwtc2F4Lmh0bWwiPm5pY2UKZG9jdW1lbnRhdGlvbjwvYT4ud3JpdHRlbiBieSA8YSBocmVmPSJtYWlsdG86amFtZXNAZGFhLmNvbS5hdSI+SmFtZXMKSGVuc3RyaWRnZTwvYT4uPC9wPgoKPHA+WW91IGNhbiBkZWJ1ZyB0aGUgU0FYIGJlaGF2aW91ciBieSB1c2luZyB0aGUgPHN0cm9uZz50ZXN0U0FYPC9zdHJvbmc+CnByb2dyYW0gbG9jYXRlZCBpbiB0aGUgZ25vbWUteG1sIG1vZHVsZSAoaXQncyB1c3VhbGx5IG5vdCBzaGlwcGVkIGluIHRoZQpiaW5hcnkgcGFja2FnZXMgb2YgbGlieG1sLCBidXQgeW91IGNhbiBmaW5kIGl0IGluIHRoZSB0YXIgc291cmNlCmRpc3RyaWJ1dGlvbikuIEhlcmUgaXMgdGhlIHNlcXVlbmNlIG9mIGNhbGxiYWNrcyB0aGF0IHdvdWxkIGJlIHJlcG9ydGVkIGJ5CnRlc3RTQVggd2hlbiBwYXJzaW5nIHRoZSBleGFtcGxlIFhNTCBkb2N1bWVudCBzaG93biBlYXJsaWVyOjwvcD4KPHByZT5TQVguc2V0RG9jdW1lbnRMb2NhdG9yKCkKU0FYLnN0YXJ0RG9jdW1lbnQoKQpTQVguZ2V0RW50aXR5KGFtcCkKU0FYLnN0YXJ0RWxlbWVudChFWEFNUExFLCBwcm9wMT0nZ25vbWUgaXMgZ3JlYXQnLCBwcm9wMj0nJmFtcDthbXA7IGxpbnV4IHRvbycpClNBWC5jaGFyYWN0ZXJzKCAgICwgMykKU0FYLnN0YXJ0RWxlbWVudChoZWFkKQpTQVguY2hhcmFjdGVycyggICAgLCA0KQpTQVguc3RhcnRFbGVtZW50KHRpdGxlKQpTQVguY2hhcmFjdGVycyhXZWxjb21lIHRvIEdub21lLCAxNikKU0FYLmVuZEVsZW1lbnQodGl0bGUpClNBWC5jaGFyYWN0ZXJzKCAgICwgMykKU0FYLmVuZEVsZW1lbnQoaGVhZCkKU0FYLmNoYXJhY3RlcnMoICAgLCAzKQpTQVguc3RhcnRFbGVtZW50KGNoYXB0ZXIpClNBWC5jaGFyYWN0ZXJzKCAgICAsIDQpClNBWC5zdGFydEVsZW1lbnQodGl0bGUpClNBWC5jaGFyYWN0ZXJzKFRoZSBMaW51eCBhZHZlbnR1cmUsIDE5KQpTQVguZW5kRWxlbWVudCh0aXRsZSkKU0FYLmNoYXJhY3RlcnMoICAgICwgNCkKU0FYLnN0YXJ0RWxlbWVudChwKQpTQVguY2hhcmFjdGVycyhibGEgYmxhIGJsYSAuLi4sIDE1KQpTQVguZW5kRWxlbWVudChwKQpTQVguY2hhcmFjdGVycyggICAgLCA0KQpTQVguc3RhcnRFbGVtZW50KGltYWdlLCBocmVmPSdsaW51cy5naWYnKQpTQVguZW5kRWxlbWVudChpbWFnZSkKU0FYLmNoYXJhY3RlcnMoICAgICwgNCkKU0FYLnN0YXJ0RWxlbWVudChwKQpTQVguY2hhcmFjdGVycyguLi4sIDMpClNBWC5lbmRFbGVtZW50KHApClNBWC5jaGFyYWN0ZXJzKCAgICwgMykKU0FYLmVuZEVsZW1lbnQoY2hhcHRlcikKU0FYLmNoYXJhY3RlcnMoICwgMSkKU0FYLmVuZEVsZW1lbnQoRVhBTVBMRSkKU0FYLmVuZERvY3VtZW50KCk8L3ByZT4KCjxwPk1vc3Qgb2YgdGhlIG90aGVyIGludGVyZmFjZXMgb2YgbGlieG1sIGFyZSBiYXNlZCBvbiB0aGUgRE9NIHRyZWUtYnVpbGRpbmcKZmFjaWxpdHksIHNvIG5lYXJseSBldmVyeXRoaW5nIHVwIHRvIHRoZSBlbmQgb2YgdGhpcyBkb2N1bWVudCBwcmVzdXBwb3NlcyB0aGUKdXNlIG9mIHRoZSBzdGFuZGFyZCBET00gdHJlZSBidWlsZC4gTm90ZSB0aGF0IHRoZSBET00gdHJlZSBpdHNlbGYgaXMgYnVpbHQgYnkKYSBzZXQgb2YgcmVnaXN0ZXJlZCBkZWZhdWx0IGNhbGxiYWNrcywgd2l0aG91dCBpbnRlcm5hbCBzcGVjaWZpYwppbnRlcmZhY2UuPC9wPgoKPGgyPjxhIG5hbWU9ImxpYnJhcnkiPlRoZSBYTUwgbGlicmFyeSBpbnRlcmZhY2VzPC9hPjwvaDI+Cgo8cD5UaGlzIHNlY3Rpb24gaXMgZGlyZWN0bHkgaW50ZW5kZWQgdG8gaGVscCBwcm9ncmFtbWVycyBnZXR0aW5nIGJvb3RzdHJhcHBlZAp1c2luZyB0aGUgWE1MIGxpYnJhcnkgZnJvbSB0aGUgQyBsYW5ndWFnZS4gSXQgaXMgbm90IGludGVuZGVkIHRvIGJlIGV4dGVuc2l2ZS4KSSBob3BlIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkb2N1bWVudHMgd2lsbCBwcm92aWRlIHRoZSBjb21wbGV0ZW5lc3MKcmVxdWlyZWQsIGJ1dCBhcyBhIHNlcGFyYXRlIHNldCBvZiBkb2N1bWVudHMuIFRoZSBpbnRlcmZhY2VzIG9mIHRoZSBYTUwKbGlicmFyeSBhcmUgYnkgcHJpbmNpcGxlIGxvdyBsZXZlbCwgdGhlcmUgaXMgbmVhcmx5IHplcm8gYWJzdHJhY3Rpb24uIFRob3NlCmludGVyZXN0ZWQgaW4gYSBoaWdoZXIgbGV2ZWwgQVBJIHNob3VsZCA8YSBocmVmPSIjRE9NIj5sb29rIGF0IERPTTwvYT4uPC9wPgoKPHA+VGhlIDxhIGhyZWY9Imh0bWwvbGlieG1sLXBhcnNlci5odG1sIj5wYXJzZXIgaW50ZXJmYWNlcyBmb3IgWE1MPC9hPiBhcmUKc2VwYXJhdGVkIGZyb20gdGhlIDxhIGhyZWY9Imh0bWwvbGlieG1sLWh0bWxwYXJzZXIuaHRtbCI+SFRNTCBwYXJzZXIKaW50ZXJmYWNlczwvYT4uICBMZXQncyBoYXZlIGEgbG9vayBhdCBob3cgdGhlIFhNTCBwYXJzZXIgY2FuIGJlIGNhbGxlZDo8L3A+Cgo8aDM+PGEgbmFtZT0iSW52b2tpbmciPkludm9raW5nIHRoZSBwYXJzZXIgOiB0aGUgcHVsbCBtZXRob2Q8L2E+PC9oMz4KCjxwPlVzdWFsbHksIHRoZSBmaXJzdCB0aGluZyB0byBkbyBpcyB0byByZWFkIGFuIFhNTCBpbnB1dC4gVGhlIHBhcnNlciBhY2NlcHRzCmRvY3VtZW50cyBlaXRoZXIgZnJvbSBpbi1tZW1vcnkgc3RyaW5ncyBvciBmcm9tIGZpbGVzLiAgVGhlIGZ1bmN0aW9ucyBhcmUKZGVmaW5lZCBpbiAicGFyc2VyLmgiOjwvcD4KPGRsPgogIDxkdD48Y29kZT54bWxEb2NQdHIgeG1sUGFyc2VNZW1vcnkoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+UGFyc2UgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50LjwvcD4KICAgIDwvZGQ+CjwvZGw+CjxkbD4KICA8ZHQ+PGNvZGU+eG1sRG9jUHRyIHhtbFBhcnNlRmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+UGFyc2UgYW4gWE1MIGRvY3VtZW50IGNvbnRhaW5lZCBpbiBhIChwb3NzaWJseSBjb21wcmVzc2VkKQogICAgICBmaWxlLjwvcD4KICAgIDwvZGQ+CjwvZGw+Cgo8cD5UaGUgcGFyc2VyIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkb2N1bWVudCBzdHJ1Y3R1cmUgKG9yIE5VTEwgaW4gY2FzZSBvZgpmYWlsdXJlKS48L3A+Cgo8aDMgaWQ9Ikludm9raW5nMSI+SW52b2tpbmcgdGhlIHBhcnNlcjogdGhlIHB1c2ggbWV0aG9kPC9oMz4KCjxwPkluIG9yZGVyIGZvciB0aGUgYXBwbGljYXRpb24gdG8ga2VlcCB0aGUgY29udHJvbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBiZWluZwpmZXRjaGVkICh3aGljaCBpcyBjb21tb24gZm9yIEdVSSBiYXNlZCBwcm9ncmFtcykgbGlieG1sIHByb3ZpZGVzIGEgcHVzaAppbnRlcmZhY2UsIHRvbywgYXMgb2YgdmVyc2lvbiAxLjguMy4gSGVyZSBhcmUgdGhlIGludGVyZmFjZSBmdW5jdGlvbnM6PC9wPgo8cHJlPnhtbFBhcnNlckN0eHRQdHIgeG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoeG1sU0FYSGFuZGxlclB0ciBzYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNodW5rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKaW50ICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rICAgICAgICAgICh4bWxQYXJzZXJDdHh0UHRyIGN0eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY2h1bmssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRlcm1pbmF0ZSk7PC9wcmU+Cgo8cD5hbmQgaGVyZSBpcyBhIHNpbXBsZSBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSB0aGUgaW50ZXJmYWNlOjwvcD4KPHByZT4gICAgICAgICAgICBGSUxFICpmOwoKICAgICAgICAgICAgZiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwogICAgICAgICAgICBpZiAoZiAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICBpbnQgcmVzLCBzaXplID0gMTAyNDsKICAgICAgICAgICAgICAgIGNoYXIgY2hhcnNbMTAyNF07CiAgICAgICAgICAgICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CgogICAgICAgICAgICAgICAgcmVzID0gZnJlYWQoY2hhcnMsIDEsIDQsIGYpOwogICAgICAgICAgICAgICAgaWYgKHJlcyAmZ3Q7IDApIHsKICAgICAgICAgICAgICAgICAgICBjdHh0ID0geG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoTlVMTCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycywgcmVzLCBmaWxlbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChyZXMgPSBmcmVhZChjaGFycywgMSwgc2l6ZSwgZikpICZndDsgMCkgewogICAgICAgICAgICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGN0eHQsIGNoYXJzLCByZXMsIDApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGN0eHQsIGNoYXJzLCAwLCAxKTsKICAgICAgICAgICAgICAgICAgICBkb2MgPSBjdHh0LSZndDtteURvYzsKICAgICAgICAgICAgICAgICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTwvcHJlPgoKPHA+VGhlIEhUTUwgcGFyc2VyIGVtYmVkZGVkIGludG8gbGlieG1sIGFsc28gaGFzIGEgcHVzaCBpbnRlcmZhY2U7IHRoZQpmdW5jdGlvbnMgYXJlIGp1c3QgcHJlZml4ZWQgYnkgImh0bWwiIHJhdGhlciB0aGFuICJ4bWwiLjwvcD4KCjxoMyBpZD0iSW52b2tpbmcyIj5JbnZva2luZyB0aGUgcGFyc2VyOiB0aGUgU0FYIGludGVyZmFjZTwvaDM+Cgo8cD5UaGUgdHJlZS1idWlsZGluZyBpbnRlcmZhY2UgbWFrZXMgdGhlIHBhcnNlciBtZW1vcnktaHVuZ3J5LCBmaXJzdCBsb2FkaW5nCnRoZSBkb2N1bWVudCBpbiBtZW1vcnkgYW5kIHRoZW4gYnVpbGRpbmcgdGhlIHRyZWUgaXRzZWxmLiBSZWFkaW5nIGEgZG9jdW1lbnQKd2l0aG91dCBidWlsZGluZyB0aGUgdHJlZSBpcyBwb3NzaWJsZSB1c2luZyB0aGUgU0FYIGludGVyZmFjZXMgKHNlZSBTQVguaCBhbmQKPGEgaHJlZj0iaHR0cDovL3d3dy5kYWEuY29tLmF1L35qYW1lcy9nbm9tZS94bWwtc2F4L3htbC1zYXguaHRtbCI+SmFtZXMKSGVuc3RyaWRnZSdzIGRvY3VtZW50YXRpb248L2E+KS4gTm90ZSBhbHNvIHRoYXQgdGhlIHB1c2ggaW50ZXJmYWNlIGNhbiBiZQpsaW1pdGVkIHRvIFNBWDoganVzdCB1c2UgdGhlIHR3byBmaXJzdCBhcmd1bWVudHMgb2YKPGNvZGU+eG1sQ3JlYXRlUHVzaFBhcnNlckN0eHQoKTwvY29kZT4uPC9wPgoKPGgzPjxhIG5hbWU9IkJ1aWxkaW5nIj5CdWlsZGluZyBhIHRyZWUgZnJvbSBzY3JhdGNoPC9hPjwvaDM+Cgo8cD5UaGUgb3RoZXIgd2F5IHRvIGdldCBhbiBYTUwgdHJlZSBpbiBtZW1vcnkgaXMgYnkgYnVpbGRpbmcgaXQuIEJhc2ljYWxseQp0aGVyZSBpcyBhIHNldCBvZiBmdW5jdGlvbnMgZGVkaWNhdGVkIHRvIGJ1aWxkaW5nIG5ldyBlbGVtZW50cy4gKFRoZXNlIGFyZQphbHNvIGRlc2NyaWJlZCBpbiAmbHQ7bGlieG1sL3RyZWUuaCZndDsuKSBGb3IgZXhhbXBsZSwgaGVyZSBpcyBhIHBpZWNlIG9mIGNvZGUKdGhhdCBwcm9kdWNlcyB0aGUgWE1MIGRvY3VtZW50IHVzZWQgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGVzOjwvcD4KPHByZT4gICAgI2luY2x1ZGUgJmx0O2xpYnhtbC90cmVlLmgmZ3Q7CiAgICB4bWxEb2NQdHIgZG9jOwogICAgeG1sTm9kZVB0ciB0cmVlLCBzdWJ0cmVlOwoKICAgIGRvYyA9IHhtbE5ld0RvYygiMS4wIik7CiAgICBkb2MtJmd0O2NoaWxkcmVuID0geG1sTmV3RG9jTm9kZShkb2MsIE5VTEwsICJFWEFNUExFIiwgTlVMTCk7CiAgICB4bWxTZXRQcm9wKGRvYy0mZ3Q7Y2hpbGRyZW4sICJwcm9wMSIsICJnbm9tZSBpcyBncmVhdCIpOwogICAgeG1sU2V0UHJvcChkb2MtJmd0O2NoaWxkcmVuLCAicHJvcDIiLCAiJmFtcDsgbGludXggdG9vIik7CiAgICB0cmVlID0geG1sTmV3Q2hpbGQoZG9jLSZndDtjaGlsZHJlbiwgTlVMTCwgImhlYWQiLCBOVUxMKTsKICAgIHN1YnRyZWUgPSB4bWxOZXdDaGlsZCh0cmVlLCBOVUxMLCAidGl0bGUiLCAiV2VsY29tZSB0byBHbm9tZSIpOwogICAgdHJlZSA9IHhtbE5ld0NoaWxkKGRvYy0mZ3Q7Y2hpbGRyZW4sIE5VTEwsICJjaGFwdGVyIiwgTlVMTCk7CiAgICBzdWJ0cmVlID0geG1sTmV3Q2hpbGQodHJlZSwgTlVMTCwgInRpdGxlIiwgIlRoZSBMaW51eCBhZHZlbnR1cmUiKTsKICAgIHN1YnRyZWUgPSB4bWxOZXdDaGlsZCh0cmVlLCBOVUxMLCAicCIsICJibGEgYmxhIGJsYSAuLi4iKTsKICAgIHN1YnRyZWUgPSB4bWxOZXdDaGlsZCh0cmVlLCBOVUxMLCAiaW1hZ2UiLCBOVUxMKTsKICAgIHhtbFNldFByb3Aoc3VidHJlZSwgImhyZWYiLCAibGludXMuZ2lmIik7PC9wcmU+Cgo8cD5Ob3QgcmVhbGx5IHJvY2tldCBzY2llbmNlIC4uLjwvcD4KCjxoMz48YSBuYW1lPSJUcmF2ZXJzaW5nIj5UcmF2ZXJzaW5nIHRoZSB0cmVlPC9hPjwvaDM+Cgo8cD5CYXNpY2FsbHkgYnkgPGEgaHJlZj0iaHRtbC9saWJ4bWwtdHJlZS5odG1sIj5pbmNsdWRpbmcgInRyZWUuaCI8L2E+IHlvdXIKY29kZSBoYXMgYWNjZXNzIHRvIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgdHJlZS4gVGhlCm5hbWVzIHNob3VsZCBiZSBzb21ld2hhdCBzaW1wbGUgbGlrZSA8c3Ryb25nPnBhcmVudDwvc3Ryb25nPiwKPHN0cm9uZz5jaGlsZHJlbjwvc3Ryb25nPiwgPHN0cm9uZz5uZXh0PC9zdHJvbmc+LCA8c3Ryb25nPnByZXY8L3N0cm9uZz4sCjxzdHJvbmc+cHJvcGVydGllczwvc3Ryb25nPiwgZXRjLi4uIEZvciBleGFtcGxlLCBzdGlsbCB3aXRoIHRoZSBwcmV2aW91cwpleGFtcGxlOjwvcD4KPHByZT48Y29kZT5kb2MtJmd0O2NoaWxkcmVuLSZndDtjaGlsZHJlbi0mZ3Q7Y2hpbGRyZW48L2NvZGU+PC9wcmU+Cgo8cD5wb2ludHMgdG8gdGhlIHRpdGxlIGVsZW1lbnQsPC9wPgo8cHJlPmRvYy0mZ3Q7Y2hpbGRyZW4tJmd0O2NoaWxkcmVuLSZndDtuZXh0LSZndDtjaGlsZHJlbi0mZ3Q7Y2hpbGRyZW48L3ByZT4KCjxwPnBvaW50cyB0byB0aGUgdGV4dCBub2RlIGNvbnRhaW5pbmcgdGhlIGNoYXB0ZXIgdGl0bGUgIlRoZSBMaW51eAphZHZlbnR1cmUiLjwvcD4KCjxwPjxzdHJvbmc+Tk9URTwvc3Ryb25nPjogWE1MIGFsbG93cyA8ZW0+UEk8L2VtPnMgYW5kIDxlbT5jb21tZW50czwvZW0+IHRvIGJlCnByZXNlbnQgYmVmb3JlIHRoZSBkb2N1bWVudCByb290LCBzbyA8Y29kZT5kb2MtJmd0O2NoaWxkcmVuPC9jb2RlPiBtYXkgcG9pbnQKdG8gYW4gZWxlbWVudCB3aGljaCBpcyBub3QgdGhlIGRvY3VtZW50IFJvb3QgRWxlbWVudDsgYSBmdW5jdGlvbgo8Y29kZT54bWxEb2NHZXRSb290RWxlbWVudCgpPC9jb2RlPiB3YXMgYWRkZWQgZm9yIHRoaXMgcHVycG9zZS48L3A+Cgo8aDM+PGEgbmFtZT0iTW9kaWZ5aW5nIj5Nb2RpZnlpbmcgdGhlIHRyZWU8L2E+PC9oMz4KCjxwPkZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIGRvY3VtZW50IGNvbnRlbnQuIEhlcmUKaXMgYW4gZXhjZXJwdCBmcm9tIHRoZSA8YSBocmVmPSJodG1sL2xpYnhtbC10cmVlLmh0bWwiPnRyZWUgQVBJPC9hPjo8L3A+CjxkbD4KICA8ZHQ+PGNvZGU+eG1sQXR0clB0ciB4bWxTZXRQcm9wKHhtbE5vZGVQdHIgbm9kZSwgY29uc3QgeG1sQ2hhciAqbmFtZSwgY29uc3QKICB4bWxDaGFyICp2YWx1ZSk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+VGhpcyBzZXRzIChvciBjaGFuZ2VzKSBhbiBhdHRyaWJ1dGUgY2FycmllZCBieSBhbiBFTEVNRU5UIG5vZGUuIFRoZQogICAgICB2YWx1ZSBjYW4gYmUgTlVMTC48L3A+CiAgICA8L2RkPgo8L2RsPgo8ZGw+CiAgPGR0Pjxjb2RlPmNvbnN0IHhtbENoYXIgKnhtbEdldFByb3AoeG1sTm9kZVB0ciBub2RlLCBjb25zdCB4bWxDaGFyCiAgKm5hbWUpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gbmV3IGNvcHkgb2YgdGhlIHByb3BlcnR5CiAgICAgIGNvbnRlbnQuIE5vdGUgdGhhdCB0aGUgdXNlciBtdXN0IGRlYWxsb2NhdGUgdGhlIHJlc3VsdC48L3A+CiAgICA8L2RkPgo8L2RsPgoKPHA+VHdvIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoCmVsZW1lbnRzOjwvcD4KPGRsPgogIDxkdD48Y29kZT54bWxOb2RlUHRyIHhtbFN0cmluZ0dldE5vZGVMaXN0KHhtbERvY1B0ciBkb2MsIGNvbnN0IHhtbENoYXIKICAqdmFsdWUpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlRoaXMgZnVuY3Rpb24gdGFrZXMgYW4gImV4dGVybmFsIiBzdHJpbmcgYW5kIGNvbnZlcnRzIGl0IHRvIG9uZQogICAgICB0ZXh0IG5vZGUgb3IgcG9zc2libHkgdG8gYSBsaXN0IG9mIGVudGl0eSBhbmQgdGV4dCBub2Rlcy4gQWxsCiAgICAgIG5vbi1wcmVkZWZpbmVkIGVudGl0eSByZWZlcmVuY2VzIGxpa2UgJmFtcDtHbm9tZTsgd2lsbCBiZSBzdG9yZWQKICAgICAgaW50ZXJuYWxseSBhcyBlbnRpdHkgbm9kZXMsIGhlbmNlIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIG1heSBub3QgYmUKICAgICAgYSBzaW5nbGUgbm9kZS48L3A+CiAgICA8L2RkPgo8L2RsPgo8ZGw+CiAgPGR0Pjxjb2RlPnhtbENoYXIgKnhtbE5vZGVMaXN0R2V0U3RyaW5nKHhtbERvY1B0ciBkb2MsIHhtbE5vZGVQdHIgbGlzdCwgaW50CiAgaW5MaW5lKTs8L2NvZGU+PC9kdD4KICAgIDxkZD48cD5UaGlzIGZ1bmN0aW9uIGlzIHRoZSBpbnZlcnNlIG9mCiAgICAgIDxjb2RlPnhtbFN0cmluZ0dldE5vZGVMaXN0KCk8L2NvZGU+LiBJdCBnZW5lcmF0ZXMgYSBuZXcgc3RyaW5nCiAgICAgIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnQgb2YgdGhlIHRleHQgYW5kIGVudGl0eSBub2Rlcy4gTm90ZSB0aGUgZXh0cmEKICAgICAgYXJndW1lbnQgaW5MaW5lLiBJZiB0aGlzIGFyZ3VtZW50IGlzIHNldCB0byAxLCB0aGUgZnVuY3Rpb24gd2lsbCBleHBhbmQKICAgICAgZW50aXR5IHJlZmVyZW5jZXMuICBGb3IgZXhhbXBsZSwgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlICZhbXA7R25vbWU7CiAgICAgIFhNTCBlbmNvZGluZyBpbiB0aGUgc3RyaW5nLCBpdCB3aWxsIHN1YnN0aXR1dGUgaXQgd2l0aCBpdHMgdmFsdWUgKHNheSwKICAgICAgIkdOVSBOZXR3b3JrIE9iamVjdCBNb2RlbCBFbnZpcm9ubWVudCIpLjwvcD4KICAgIDwvZGQ+CjwvZGw+Cgo8aDM+PGEgbmFtZT0iU2F2aW5nIj5TYXZpbmcgYSB0cmVlPC9hPjwvaDM+Cgo8cD5CYXNpY2FsbHkgMyBvcHRpb25zIGFyZSBwb3NzaWJsZTo8L3A+CjxkbD4KICA8ZHQ+PGNvZGU+dm9pZCB4bWxEb2NEdW1wTWVtb3J5KHhtbERvY1B0ciBjdXIsIHhtbENoYXIqKm1lbSwgaW50CiAgKnNpemUpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlJldHVybnMgYSBidWZmZXIgaW50byB3aGljaCB0aGUgZG9jdW1lbnQgaGFzIGJlZW4gc2F2ZWQuPC9wPgogICAgPC9kZD4KPC9kbD4KPGRsPgogIDxkdD48Y29kZT5leHRlcm4gdm9pZCB4bWxEb2NEdW1wKEZJTEUgKmYsIHhtbERvY1B0ciBkb2MpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPkR1bXBzIGEgZG9jdW1lbnQgdG8gYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuPC9wPgogICAgPC9kZD4KPC9kbD4KPGRsPgogIDxkdD48Y29kZT5pbnQgeG1sU2F2ZUZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHhtbERvY1B0ciBjdXIpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlNhdmVzIHRoZSBkb2N1bWVudCB0byBhIGZpbGUuIEluIHRoaXMgY2FzZSwgdGhlIGNvbXByZXNzaW9uCiAgICAgIGludGVyZmFjZSBpcyB0cmlnZ2VyZWQgaWYgaXQgaGFzIGJlZW4gdHVybmVkIG9uLjwvcD4KICAgIDwvZGQ+CjwvZGw+Cgo8aDM+PGEgbmFtZT0iQ29tcHJlc3NpbyI+Q29tcHJlc3Npb248L2E+PC9oMz4KCjxwPlRoZSBsaWJyYXJ5IHRyYW5zcGFyZW50bHkgaGFuZGxlcyBjb21wcmVzc2lvbiB3aGVuIGRvaW5nIGZpbGUtYmFzZWQKYWNjZXNzZXMuIFRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbiBvbiBzYXZlcyBjYW4gYmUgdHVybmVkIG9uIGVpdGhlciBnbG9iYWxseQpvciBpbmRpdmlkdWFsbHkgZm9yIG9uZSBmaWxlOjwvcD4KPGRsPgogIDxkdD48Y29kZT5pbnQgIHhtbEdldERvY0NvbXByZXNzTW9kZSAoeG1sRG9jUHRyIGRvYyk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+R2V0cyB0aGUgZG9jdW1lbnQgY29tcHJlc3Npb24gcmF0aW8gKDAtOSkuPC9wPgogICAgPC9kZD4KPC9kbD4KPGRsPgogIDxkdD48Y29kZT52b2lkIHhtbFNldERvY0NvbXByZXNzTW9kZSAoeG1sRG9jUHRyIGRvYywgaW50IG1vZGUpOzwvY29kZT48L2R0PgogICAgPGRkPjxwPlNldHMgdGhlIGRvY3VtZW50IGNvbXByZXNzaW9uIHJhdGlvLjwvcD4KICAgIDwvZGQ+CjwvZGw+CjxkbD4KICA8ZHQ+PGNvZGU+aW50ICB4bWxHZXRDb21wcmVzc01vZGUodm9pZCk7PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+PHA+R2V0cyB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiByYXRpby48L3A+CiAgICA8L2RkPgo8L2RsPgo8ZGw+CiAgPGR0Pjxjb2RlPnZvaWQgeG1sU2V0Q29tcHJlc3NNb2RlKGludCBtb2RlKTs8L2NvZGU+PC9kdD4KICAgIDxkZD48cD5TZXRzIHRoZSBkZWZhdWx0IGNvbXByZXNzaW9uIHJhdGlvLjwvcD4KICAgIDwvZGQ+CjwvZGw+Cgo8aDI+PGEgbmFtZT0iRW50aXRpZXMiPkVudGl0aWVzIG9yIG5vIGVudGl0aWVzPC9hPjwvaDI+Cgo8cD5FbnRpdGllcyBpbiBwcmluY2lwbGUgYXJlIHNpbWlsYXIgdG8gc2ltcGxlIEMgbWFjcm9zLiBBbiBlbnRpdHkgZGVmaW5lcyBhbgphYmJyZXZpYXRpb24gZm9yIGEgZ2l2ZW4gc3RyaW5nIHRoYXQgeW91IGNhbiByZXVzZSBtYW55IHRpbWVzIHRocm91Z2hvdXQgdGhlCmNvbnRlbnQgb2YgeW91ciBkb2N1bWVudC4gRW50aXRpZXMgYXJlIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gYSBnaXZlbiBzdHJpbmcKbWF5IG9jY3VyIGZyZXF1ZW50bHkgd2l0aGluIGEgZG9jdW1lbnQsIG9yIHRvIGNvbmZpbmUgdGhlIGNoYW5nZSBuZWVkZWQgdG8gYQpkb2N1bWVudCB0byBhIHJlc3RyaWN0ZWQgYXJlYSBpbiB0aGUgaW50ZXJuYWwgc3Vic2V0IG9mIHRoZSBkb2N1bWVudCAoYXQgdGhlCmJlZ2lubmluZykuIEV4YW1wbGU6PC9wPgo8cHJlPjEgJmx0Oz94bWwgdmVyc2lvbj0iMS4wIj8mZ3Q7CjIgJmx0OyFET0NUWVBFIEVYQU1QTEUgU1lTVEVNICJleGFtcGxlLmR0ZCIgWwozICZsdDshRU5USVRZIHhtbCAiRXh0ZW5zaWJsZSBNYXJrdXAgTGFuZ3VhZ2UiJmd0Owo0IF0mZ3Q7CjUgJmx0O0VYQU1QTEUmZ3Q7CjYgICAgJmFtcDt4bWw7CjcgJmx0Oy9FWEFNUExFJmd0OzwvcHJlPgoKPHA+TGluZSAzIGRlY2xhcmVzIHRoZSB4bWwgZW50aXR5LiBMaW5lIDYgdXNlcyB0aGUgeG1sIGVudGl0eSwgYnkgcHJlZml4aW5nCml0cyBuYW1lIHdpdGggJyZhbXA7JyBhbmQgZm9sbG93aW5nIGl0IGJ5ICc7JyB3aXRob3V0IGFueSBzcGFjZXMgYWRkZWQuIFRoZXJlCmFyZSA1IHByZWRlZmluZWQgZW50aXRpZXMgaW4gbGlieG1sIGFsbG93aW5nIHlvdSB0byBlc2NhcGUgY2hhcmF0ZXJzIHdpdGgKcHJlZGVmaW5lZCBtZWFuaW5nIGluIHNvbWUgcGFydHMgb2YgdGhlIHhtbCBkb2N1bWVudCBjb250ZW50Ogo8c3Ryb25nPiZhbXA7bHQ7PC9zdHJvbmc+IGZvciB0aGUgY2hhcmFjdGVyICcmbHQ7JywgPHN0cm9uZz4mYW1wO2d0Ozwvc3Ryb25nPgpmb3IgdGhlIGNoYXJhY3RlciAnJmd0OycsICA8c3Ryb25nPiZhbXA7YXBvczs8L3N0cm9uZz4gZm9yIHRoZSBjaGFyYWN0ZXIgJycnLAo8c3Ryb25nPiZhbXA7cXVvdDs8L3N0cm9uZz4gZm9yIHRoZSBjaGFyYWN0ZXIgJyInLCBhbmQKPHN0cm9uZz4mYW1wO2FtcDs8L3N0cm9uZz4gZm9yIHRoZSBjaGFyYWN0ZXIgJyZhbXA7Jy48L3A+Cgo8cD5PbmUgb2YgdGhlIHByb2JsZW1zIHJlbGF0ZWQgdG8gZW50aXRpZXMgaXMgdGhhdCB5b3UgbWF5IHdhbnQgdGhlIHBhcnNlciB0bwpzdWJzdGl0dXRlIGFuIGVudGl0eSdzIGNvbnRlbnQgc28gdGhhdCB5b3UgY2FuIHNlZSB0aGUgcmVwbGFjZW1lbnQgdGV4dCBpbgp5b3VyIGFwcGxpY2F0aW9uLiBPciB5b3UgbWF5IHByZWZlciB0byBrZWVwIGVudGl0eSByZWZlcmVuY2VzIGFzIHN1Y2ggaW4gdGhlCmNvbnRlbnQgdG8gYmUgYWJsZSB0byBzYXZlIHRoZSBkb2N1bWVudCBiYWNrIHdpdGhvdXQgbG9zaW5nIHRoaXMgdXN1YWxseQpwcmVjaW91cyBpbmZvcm1hdGlvbiAoaWYgdGhlIHVzZXIgd2VudCB0aHJvdWdoIHRoZSBwYWluIG9mIGV4cGxpY2l0bHkgZGVmaW5pbmcKZW50aXRpZXMsIGhlIG1heSBoYXZlIGEgYSByYXRoZXIgbmVnYXRpdmUgYXR0aXR1ZGUgaWYgeW91IGJsaW5kbHkgc3VzYnRpdHV0ZQp0aGVtIGFzIHNhdmluZyB0aW1lKS4gVGhlIDxhCmhyZWY9Imh0bWwvbGlieG1sLXBhcnNlci5odG1sI1hNTFNVQlNUSVRVVEVFTlRJVElFU0RFRkFVTFQiPnhtbFN1YnN0aXR1dGVFbnRpdGllc0RlZmF1bHQoKTwvYT4KZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBjaGVjayBhbmQgY2hhbmdlIHRoZSBiZWhhdmlvdXIsIHdoaWNoIGlzIHRvIG5vdApzdWJzdGl0dXRlIGVudGl0aWVzIGJ5IGRlZmF1bHQuPC9wPgoKPHA+SGVyZSBpcyB0aGUgRE9NIHRyZWUgYnVpbHQgYnkgbGlieG1sIGZvciB0aGUgcHJldmlvdXMgZG9jdW1lbnQgaW4gdGhlCmRlZmF1bHQgY2FzZTo8L3A+CjxwcmU+L2dub21lL3NyYy9nbm9tZS14bWwgLSZndDsgLi94bWxsaW50IC0tZGVidWcgdGVzdC9lbnQxCkRPQ1VNRU5UCnZlcnNpb249MS4wCiAgIEVMRU1FTlQgRVhBTVBMRQogICAgIFRFWFQKICAgICBjb250ZW50PQogICAgIEVOVElUWV9SRUYKICAgICAgIElOVEVSTkFMX0dFTkVSQUxfRU5USVRZIHhtbAogICAgICAgY29udGVudD1FeHRlbnNpYmxlIE1hcmt1cCBMYW5ndWFnZQogICAgIFRFWFQKICAgICBjb250ZW50PTwvcHJlPgoKPHA+QW5kIGhlcmUgaXMgdGhlIHJlc3VsdCB3aGVuIHN1YnN0aXR1dGluZyBlbnRpdGllczo8L3A+CjxwcmU+L2dub21lL3NyYy9nbm9tZS14bWwgLSZndDsgLi90ZXN0ZXIgLS1kZWJ1ZyAtLW5vZW50IHRlc3QvZW50MQpET0NVTUVOVAp2ZXJzaW9uPTEuMAogICBFTEVNRU5UIEVYQU1QTEUKICAgICBURVhUCiAgICAgY29udGVudD0gICAgIEV4dGVuc2libGUgTWFya3VwIExhbmd1YWdlPC9wcmU+Cgo8cD5TbywgZW50aXRpZXMgb3Igbm8gZW50aXRpZXM/IEJhc2ljYWxseSwgaXQgZGVwZW5kcyBvbiB5b3VyIHVzZSBjYXNlLiBJCnN1Z2dlc3QgdGhhdCB5b3Uga2VlcCB0aGUgbm9uLXN1YnN0aXR1dGluZyBkZWZhdWx0IGJlaGF2aW91ciBhbmQgYXZvaWQgdXNpbmcKZW50aXRpZXMgaW4geW91ciBYTUwgZG9jdW1lbnQgb3IgZGF0YSBpZiB5b3UgYXJlIG5vdCB3aWxsaW5nIHRvIGhhbmRsZSB0aGUKZW50aXR5IHJlZmVyZW5jZXMgZWxlbWVudHMgaW4gdGhlIERPTSB0cmVlLjwvcD4KCjxwPk5vdGUgdGhhdCBhdCBzYXZlIHRpbWUgbGlieG1sIGVuZm9yY2VzIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBwcmVkZWZpbmVkCmVudGl0aWVzIHdoZXJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50IHdlbGwtZm9ybWVkbmVzcyBwcm9ibGVtcywgYW5kIHdpbGwgYWxzbwp0cmFuc3BhcmVudGx5IHJlcGxhY2UgdGhvc2Ugd2l0aCBjaGFycyAoaS5lLiBpdCB3aWxsIG5vdCBnZW5lcmF0ZSBlbnRpdHkKcmVmZXJlbmNlIGVsZW1lbnRzIGluIHRoZSBET00gdHJlZSBvciBjYWxsIHRoZSByZWZlcmVuY2UoKSBTQVggY2FsbGJhY2sgd2hlbgpmaW5kaW5nIHRoZW0gaW4gdGhlIGlucHV0KS48L3A+Cgo8cD48c3BhbiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZGMDAwMCI+V0FSTklORzwvc3Bhbj46IGhhbmRsaW5nIGVudGl0aWVzCm9uIHRvcCBvZiB0aGUgbGlieG1sIFNBWCBpbnRlcmZhY2UgaXMgZGlmZmljdWx0ISEhIElmIHlvdSBwbGFuIHRvIHVzZQpub24tcHJlZGVmaW5lZCBlbnRpdGllcyBpbiB5b3VyIGRvY3VtZW50cywgdGhlbiB0aGUgbGVhcm5pbmcgY3V2cmUgdG8gaGFuZGxlCnRoZW4gdXNpbmcgdGhlIFNBWCBBUEkgbWF5IGJlIGxvbmcuIElmIHlvdSBwbGFuIHRvIHVzZSBjb21wbGV4IGRvY3VtZW50cywgSQpzdHJvbmdseSBzdWdnZXN0IHlvdSBjb25zaWRlciB1c2luZyB0aGUgRE9NIGludGVyZmFjZSBpbnN0ZWFkIGFuZCBsZXQgbGlieG1sCmRlYWwgd2l0aCB0aGUgY29tcGxleGl0eSByYXRoZXIgdGhhbiB0cnlpbmcgdG8gZG8gaXQgeW91cnNlbGYuPC9wPgoKPGgyPjxhIG5hbWU9Ik5hbWVzcGFjZXMiPk5hbWVzcGFjZXM8L2E+PC9oMj4KCjxwPlRoZSBsaWJ4bWwgbGlicmFyeSBpbXBsZW1lbnRzIDxhCmhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwtbmFtZXMvIj5YTUwgbmFtZXNwYWNlczwvYT4gc3VwcG9ydCBieQpyZWNvZ25pemluZyBuYW1lc3BhY2UgY29udHJ1Y3RzIGluIHRoZSBpbnB1dCwgYW5kIGRvZXMgbmFtZXNwYWNlIGxvb2t1cAphdXRvbWF0aWNhbGx5IHdoZW4gYnVpbGRpbmcgdGhlIERPTSB0cmVlLiBBIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpcwphc3NvY2lhdGVkIHdpdGggYW4gaW4tbWVtb3J5IHN0cnVjdHVyZSBhbmQgYWxsIGVsZW1lbnRzIG9yIGF0dHJpYnV0ZXMgd2l0aGluCnRoYXQgbmFtZXNwYWNlIHBvaW50IHRvIGl0LiBIZW5jZSB0ZXN0aW5nIHRoZSBuYW1lc3BhY2UgaXMgYSBzaW1wbGUgYW5kIGZhc3QKZXF1YWxpdHkgb3BlcmF0aW9uIGF0IHRoZSB1c2VyIGxldmVsLjwvcD4KCjxwPkkgc3VnZ2VzdCB0aGF0IHBlb3BsZSB1c2luZyBsaWJ4bWwgdXNlIGEgbmFtZXNwYWNlLCBhbmQgZGVjbGFyZSBpdCBpbiB0aGUKcm9vdCBlbGVtZW50IG9mIHRoZWlyIGRvY3VtZW50IGFzIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4gVGhlbiB0aGV5IGRvbid0IG5lZWQKdG8gdXNlIHRoZSBwcmVmaXggaW4gdGhlIGNvbnRlbnQgYnV0IHdlIHdpbGwgaGF2ZSBhIGJhc2lzIGZvciBmdXR1cmUgc2VtYW50aWMKcmVmaW5lbWVudCBhbmQgIG1lcmdpbmcgb2YgZGF0YSBmcm9tIGRpZmZlcmVudCBzb3VyY2VzLiBUaGlzIGRvZXNuJ3QgaW5jcmVhc2UKdGhlIHNpemUgb2YgdGhlIFhNTCBvdXRwdXQgc2lnbmlmaWNhbnRseSwgYnV0IHNpZ25pZmljYW50bHkgaW5jcmVhc2VzIGl0cwp2YWx1ZSBpbiB0aGUgbG9uZy10ZXJtLiBFeGFtcGxlOjwvcD4KPHByZT4mbHQ7bXlkb2MgeG1sbnM9Imh0dHA6Ly9teWRvYy5leGFtcGxlLm9yZy9zY2hlbWFzLyImZ3Q7CiAgICZsdDtlbGVtMSZndDsuLi4mbHQ7L2VsZW0xJmd0OwogICAmbHQ7ZWxlbTImZ3Q7Li4uJmx0Oy9lbGVtMiZndDsKJmx0Oy9teWRvYyZndDs8L3ByZT4KCjxwPlRoZSBuYW1lc3BhY2UgdmFsdWUgaGFzIHRvIGJlIGFuIGFic29sdXRlIFVSTCwgYnV0IHRoZSBVUkwgZG9lc24ndCBoYXZlIHRvCnBvaW50IHRvIGFueSBleGlzdGluZyByZXNvdXJjZSBvbiB0aGUgV2ViLiBJdCB3aWxsIGJpbmQgYWxsIHRoZSBlbGVtZW50IGFuZAphdHJpYnV0ZXMgd2l0aCB0aGF0IFVSTC4gSSBzdWdnZXN0IHRvIHVzZSBhbiBVUkwgd2l0aGluIGEgZG9tYWluIHlvdSBjb250cm9sLAphbmQgdGhhdCB0aGUgVVJMIHNob3VsZCBjb250YWluIHNvbWUga2luZCBvZiB2ZXJzaW9uIGluZm9ybWF0aW9uIGlmIHBvc3NpYmxlLgpGb3IgZXhhbXBsZSwgPGNvZGU+Imh0dHA6Ly93d3cuZ25vbWUub3JnL2dudW1lcmljLzEuMC8iPC9jb2RlPiBpcyBhIGdvb2QKbmFtZXNwYWNlIHNjaGVtZS48L3A+Cgo8cD5UaGVuIHdoZW4geW91IGxvYWQgYSBmaWxlLCBtYWtlIHN1cmUgdGhhdCBhIG5hbWVzcGFjZSBjYXJyeWluZyB0aGUKdmVyc2lvbi1pbmRlcGVuZGVudCBwcmVmaXggaXMgaW5zdGFsbGVkIG9uIHRoZSByb290IGVsZW1lbnQgb2YgeW91ciBkb2N1bWVudCwKYW5kIGlmIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGRvbid0IG1hdGNoIHNvbWV0aGluZyB5b3Uga25vdywgd2FybiB0aGUgdXNlcgphbmQgYmUgbGliZXJhbCBpbiB3aGF0IHlvdSBhY2NlcHQgYXMgdGhlIGlucHV0LiBBbHNvIGRvICpub3QqIHRyeSB0byBiYXNlCm5hbWVzcGFjZSBjaGVja2luZyBvbiB0aGUgcHJlZml4IHZhbHVlLiAmbHQ7Zm9vOnRleHQmZ3Q7IG1heSBiZSBleGFjdGx5IHRoZQpzYW1lIGFzICZsdDtiYXI6dGV4dCZndDsgaW4gYW5vdGhlciBkb2N1bWVudC4gV2hhdCByZWFsbHkgbWF0dGVycyBpcyB0aGUgVVJJCmFzc29jaWF0ZWQgd2l0aCB0aGUgZWxlbWVudCBvciB0aGUgYXR0cmlidXRlLCBub3QgdGhlIHByZWZpeCBzdHJpbmcgKHdoaWNoIGlzCmp1c3QgYSBzaG9ydGN1dCBmb3IgdGhlIGZ1bGwgVVJJKS4gSW4gbGlieG1sLCBlbGVtZW50IGFuZCBhdHRyaWJ1dGVzIGhhdmUgYW4KPGNvZGU+bnM8L2NvZGU+IGZpZWxkIHBvaW50aW5nIHRvIGFuIHhtbE5zIHN0cnVjdHVyZSBkZXRhaWxpbmcgdGhlIG5hbWVzcGFjZQpwcmVmaXggYW5kIGl0cyBVUkkuPC9wPgoKPHA+QEBJbnRlcmZhY2VzQEA8L3A+Cgo8cD5AQEV4YW1wbGVzQEA8L3A+Cgo8cD5Vc3VhbGx5IHBlb3BsZSBvYmplY3QgdG8gdXNpbmcgbmFtZXNwYWNlcyB0b2dldGhlciB3aXRoIHZhbGlkaXR5IGNoZWNraW5nLgpJIHdpbGwgdHJ5IHRvIG1ha2Ugc3VyZSB0aGF0IHVzaW5nIG5hbWVzcGFjZXMgd29uJ3QgYnJlYWsgdmFsaWRpdHkgY2hlY2tpbmcsCnNvIGV2ZW4gaWYgeW91IHBsYW4gdG8gdXNlIG9yIGN1cnJlbnRseSBhcmUgdXNpbmcgdmFsaWRhdGlvbiBJIHN0cm9uZ2x5CnN1Z2dlc3QgYWRkaW5nIG5hbWVzcGFjZXMgdG8geW91ciBkb2N1bWVudC4gQSBkZWZhdWx0IG5hbWVzcGFjZSBzY2hlbWUKPGNvZGU+eG1sbnM9Imh0dHA6Ly8uLi4uIjwvY29kZT4gc2hvdWxkIG5vdCBicmVhayB2YWxpZGl0eSBldmVuIG9uIGxlc3MKZmxleGlibGUgcGFyc2Vycy4gVXNpbmcgbmFtZXNwYWNlcyB0byBtaXggYW5kIGRpZmZlcmVudGlhdGUgY29udGVudCBjb21pbmcKZnJvbSBtdWx0aXBsZSBEVERzIHdpbGwgY2VydGFpbmx5IGJyZWFrIGN1cnJlbnQgdmFsaWRhdGlvbiBzY2hlbWVzLiBJIHdpbGwgdHJ5CnRvIHByb3ZpZGUgd2F5cyB0byBkbyB0aGlzLCBidXQgdGhpcyBtYXkgbm90IGJlIHBvcnRhYmxlIG9yIHN0YW5kYXJkaXplZC48L3A+Cgo8aDI+PGEgbmFtZT0iVmFsaWRhdGlvbiI+VmFsaWRhdGlvbiwgb3IgYXJlIHlvdSBhZnJhaWQgb2YgRFREcyA/PC9hPjwvaDI+Cgo8cD5XZWxsIHdoYXQgaXMgdmFsaWRhdGlvbiBhbmQgd2hhdCBpcyBhIERURCA/PC9wPgoKPHA+VmFsaWRhdGlvbiBpcyB0aGUgcHJvY2VzcyBvZiBjaGVja2luZyBhIGRvY3VtZW50IGFnYWluc3QgYSBzZXQgb2YKY29uc3RydWN0aW9uIHJ1bGVzOyBhIDxzdHJvbmc+RFREPC9zdHJvbmc+IChEb2N1bWVudCBUeXBlIERlZmluaXRpb24pIGlzIHN1Y2gKYSBzZXQgb2YgcnVsZXMuPC9wPgoKPHA+VGhlIHZhbGlkYXRpb24gcHJvY2VzcyBhbmQgYnVpbGRpbmcgRFREcyBhcmUgdGhlIHR3byBtb3N0IGRpZmZpY3VsdCBwYXJ0cwpvZiB0aGUgWE1MIGxpZmUgY3ljbGUuIEJyaWVmbHkgYSBEVEQgZGVmaW5lcyBhbGwgdGhlIHBvc3NpYmxlcyBlbGVtZW50IHRvIGJlCmZvdW5kIHdpdGhpbiB5b3VyIGRvY3VtZW50LCB3aGF0IGlzIHRoZSBmb3JtYWwgc2hhcGUgb2YgeW91ciBkb2N1bWVudCB0cmVlIChieQpkZWZpbmluZyB0aGUgYWxsb3dlZCBjb250ZW50IG9mIGFuIGVsZW1lbnQsIGVpdGhlciB0ZXh0LCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgpmb3IgdGhlIGFsbG93ZWQgbGlzdCBvZiBjaGlsZHJlbiwgb3IgbWl4ZWQgY29udGVudCBpLmUuIGJvdGggdGV4dCBhbmQKY2hpbGRyZW4pLiBUaGUgRFREIGFsc28gZGVmaW5lcyB0aGUgYWxsb3dlZCBhdHRyaWJ1dGVzIGZvciBhbGwgZWxlbWVudHMgYW5kCnRoZSB0eXBlcyBvZiB0aGUgYXR0cmlidXRlcy4gRm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24sIEkgc3VnZ2VzdCB0aGF0IHlvdQpyZWFkIHRoZSByZWxhdGVkIHBhcnRzIG9mIHRoZSBYTUwgc3BlY2lmaWNhdGlvbiwgdGhlIGV4YW1wbGVzIGZvdW5kIHVuZGVyCmdub21lLXhtbC90ZXN0L3ZhbGlkL2R0ZCBhbmQgYW55IG9mIHRoZSBsYXJnZSBudW1iZXIgb2YgYm9va3MgYXZhaWxhYmxlIG9uClhNTC4gVGhlIGRpYSBleGFtcGxlIGluIGdub21lLXhtbC90ZXN0L3ZhbGlkIHNob3VsZCBiZSBib3RoIHNpbXBsZSBhbmQKY29tcGxldGUgZW5vdWdoIHRvIGFsbG93IHlvdSB0byBidWlsZCB5b3VyIG93bi48L3A+Cgo8cD5BIHdvcmQgb2Ygd2FybmluZywgYnVpbGRpbmcgYSBnb29kIERURCB3aGljaCB3aWxsIGZpdCB0aGUgbmVlZHMgb2YgeW91cgphcHBsaWNhdGlvbiBpbiB0aGUgbG9uZy10ZXJtIGlzIGZhciBmcm9tIHRyaXZpYWw7IGhvd2V2ZXIsIHRoZSBleHRyYSBsZXZlbCBvZgpxdWFsaXR5IGl0IGNhbiBlbnN1cmUgaXMgd2VsbCB3b3J0aCB0aGUgcHJpY2UgZm9yIHNvbWUgc2V0cyBvZiBhcHBsaWNhdGlvbnMgb3IKaWYgeW91IGFscmVhZHkgaGF2ZSBhbHJlYWR5IGEgRFREIGRlZmluZWQgZm9yIHlvdXIgYXBwbGljYXRpb24gZmllbGQuPC9wPgoKPHA+VGhlIHZhbGlkYXRpb24gaXMgbm90IGNvbXBsZXRlbHkgZmluaXNoZWQgYnV0IGluIGEgKHZlcnkgSU1ITykgdXNhYmxlCnN0YXRlLiBVbnRpbCBhIHJlYWwgdmFsaWRhdGlvbiBpbnRlcmZhY2UgaXMgZGVmaW5lZCB0aGUgd2F5IHRvIGRvIGl0IGlzIHRvCmRlZmluZSBhbmQgc2V0IHRoZSA8c3Ryb25nPnhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZTwvc3Ryb25nPiBleHRlcm5hbAp2YXJpYWJsZSB0byAxLCB0aGlzIHdpbGwgb2YgY291cnNlIGJlIGNoYW5nZWQgYXQgc29tZSBwb2ludDo8L3A+Cgo8cD5leHRlcm4gaW50IHhtbERvVmFsaWRpdHlDaGVja2luZ0RlZmF1bHRWYWx1ZTs8L3A+Cgo8cD4uLi48L3A+Cgo8cD54bWxEb1ZhbGlkaXR5Q2hlY2tpbmdEZWZhdWx0VmFsdWUgPSAxOzwvcD4KCjxwPjwvcD4KCjxwPlRvIGhhbmRsZSBleHRlcm5hbCBlbnRpdGllcywgdXNlIHRoZSBmdW5jdGlvbgo8c3Ryb25nPnhtbFNldEV4dGVybmFsRW50aXR5TG9hZGVyPC9zdHJvbmc+KHhtbEV4dGVybmFsRW50aXR5TG9hZGVyIGYpOyB0bwpsaW5rIGluIHlvdSBIVFRQL0ZUUC9FbnRpdGllcyBkYXRhYmFzZSBsaWJyYXJ5IHRvIHRoZSBzdGFuZGFyZCBsaWJ4bWwKY29yZS48L3A+Cgo8cD5AQGludGVyZmFjZXNAQDwvcD4KCjxoMj48YSBuYW1lPSJET00iPjwvYT48YSBuYW1lPSJQcmluY2lwbGVzIj5ET00gUHJpbmNpcGxlczwvYT48L2gyPgoKPHA+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvRE9NLyI+RE9NPC9hPiBzdGFuZHMgZm9yIHRoZSA8ZW0+RG9jdW1lbnQgT2JqZWN0Ck1vZGVsPC9lbT47IHRoaXMgaXMgYW4gQVBJIGZvciBhY2Nlc3NpbmcgWE1MIG9yIEhUTUwgc3RydWN0dXJlZCBkb2N1bWVudHMuCk5hdGl2ZSBzdXBwb3J0IGZvciBET00gaW4gR25vbWUgaXMgb24gdGhlIHdheSAobW9kdWxlIGdub21lLWRvbSksIGFuZCB3aWxsIGJlCmJhc2VkIG9uIGdub21lLXhtbC4gVGhpcyB3aWxsIGJlIGEgZmFyIGNsZWFuZXIgaW50ZXJmYWNlIHRvIG1hbmlwdWxhdGUgWE1MCmZpbGVzIHdpdGhpbiBHbm9tZSBzaW5jZSBpdCB3b24ndCBleHBvc2UgdGhlIGludGVybmFsIHN0cnVjdHVyZS48L3A+Cgo8cD5UaGUgY3VycmVudCBET00gaW1wbGVtZW50YXRpb24gb24gdG9wIG9mIGxpYnhtbCBpcyB0aGUgPGEKaHJlZj0iaHR0cDovL2N2cy5nbm9tZS5vcmcvbHhyL3NvdXJjZS9nZG9tZTIvIj5nZG9tZTIgR25vbWUgbW9kdWxlPC9hPiwgdGhpcwppcyBhIGZ1bGwgRE9NIGludGVyZmFjZSwgdGhhbmtzIHRvIFBhb2xvIENhc2FyaW5pLCBjaGVjayB0aGUgPGEKaHJlZj0iaHR0cDovL3d3dy5jcy51bmliby5pdC9+Y2FzYXJpbmkvZ2RvbWUyLyI+R2RvbWUyIGhvbWVwYWdlPC9hPiBmb3IgbW9yZQppbmZvcm1hdGlvbnMuPC9wPgoKPGgyPjxhIG5hbWU9IkV4YW1wbGUiPjwvYT48YSBuYW1lPSJyZWFsIj5BIHJlYWwgZXhhbXBsZTwvYT48L2gyPgoKPHA+SGVyZSBpcyBhIHJlYWwgc2l6ZSBleGFtcGxlLCB3aGVyZSB0aGUgYWN0dWFsIGNvbnRlbnQgb2YgdGhlIGFwcGxpY2F0aW9uCmRhdGEgaXMgbm90IGtlcHQgaW4gdGhlIERPTSB0cmVlIGJ1dCB1c2VzIGludGVybmFsIHN0cnVjdHVyZXMuIEl0IGlzIGJhc2VkIG9uCmEgcHJvcG9zYWwgdG8ga2VlcCBhIGRhdGFiYXNlIG9mIGpvYnMgcmVsYXRlZCB0byBHbm9tZSwgd2l0aCBhbiBYTUwgYmFzZWQKc3RvcmFnZSBzdHJ1Y3R1cmUuIEhlcmUgaXMgYW4gPGEgaHJlZj0iZ2pvYnMueG1sIj5YTUwgZW5jb2RlZCBqb2JzCmJhc2U8L2E+OjwvcD4KPHByZT4mbHQ7P3htbCB2ZXJzaW9uPSIxLjAiPyZndDsKJmx0O2dqb2I6SGVscGluZyB4bWxuczpnam9iPSJodHRwOi8vd3d3Lmdub21lLm9yZy9zb21lLWxvY2F0aW9uIiZndDsKICAmbHQ7Z2pvYjpKb2JzJmd0OwoKICAgICZsdDtnam9iOkpvYiZndDsKICAgICAgJmx0O2dqb2I6UHJvamVjdCBJRD0iMyIvJmd0OwogICAgICAmbHQ7Z2pvYjpBcHBsaWNhdGlvbiZndDtHQmFja3VwJmx0Oy9nam9iOkFwcGxpY2F0aW9uJmd0OwogICAgICAmbHQ7Z2pvYjpDYXRlZ29yeSZndDtEZXZlbG9wbWVudCZsdDsvZ2pvYjpDYXRlZ29yeSZndDsKCiAgICAgICZsdDtnam9iOlVwZGF0ZSZndDsKICAgICAgICAmbHQ7Z2pvYjpTdGF0dXMmZ3Q7T3BlbiZsdDsvZ2pvYjpTdGF0dXMmZ3Q7CiAgICAgICAgJmx0O2dqb2I6TW9kaWZpZWQmZ3Q7TW9uLCAwNyBKdW4gMTk5OSAyMDoyNzo0NSAtMDQwMCBNRVQgRFNUJmx0Oy9nam9iOk1vZGlmaWVkJmd0OwogICAgICAgICZsdDtnam9iOlNhbGFyeSZndDtVU0QgMC4wMCZsdDsvZ2pvYjpTYWxhcnkmZ3Q7CiAgICAgICZsdDsvZ2pvYjpVcGRhdGUmZ3Q7CgogICAgICAmbHQ7Z2pvYjpEZXZlbG9wZXJzJmd0OwogICAgICAgICZsdDtnam9iOkRldmVsb3BlciZndDsKICAgICAgICAmbHQ7L2dqb2I6RGV2ZWxvcGVyJmd0OwogICAgICAmbHQ7L2dqb2I6RGV2ZWxvcGVycyZndDsKCiAgICAgICZsdDtnam9iOkNvbnRhY3QmZ3Q7CiAgICAgICAgJmx0O2dqb2I6UGVyc29uJmd0O05hdGhhbiBDbGVtb25zJmx0Oy9nam9iOlBlcnNvbiZndDsKICAgICAgICAmbHQ7Z2pvYjpFbWFpbCZndDtuYXRoYW5Ad2luZHNvZnN0b3JtLm5ldCZsdDsvZ2pvYjpFbWFpbCZndDsKICAgICAgICAmbHQ7Z2pvYjpDb21wYW55Jmd0OwogICAgICAgICZsdDsvZ2pvYjpDb21wYW55Jmd0OwogICAgICAgICZsdDtnam9iOk9yZ2FuaXNhdGlvbiZndDsKICAgICAgICAmbHQ7L2dqb2I6T3JnYW5pc2F0aW9uJmd0OwogICAgICAgICZsdDtnam9iOldlYnBhZ2UmZ3Q7CiAgICAgICAgJmx0Oy9nam9iOldlYnBhZ2UmZ3Q7CiAgICAgICAgJmx0O2dqb2I6U25haWxtYWlsJmd0OwogICAgICAgICZsdDsvZ2pvYjpTbmFpbG1haWwmZ3Q7CiAgICAgICAgJmx0O2dqb2I6UGhvbmUmZ3Q7CiAgICAgICAgJmx0Oy9nam9iOlBob25lJmd0OwogICAgICAmbHQ7L2dqb2I6Q29udGFjdCZndDsKCiAgICAgICZsdDtnam9iOlJlcXVpcmVtZW50cyZndDsKICAgICAgVGhlIHByb2dyYW0gc2hvdWxkIGJlIHJlbGVhc2VkIGFzIGZyZWUgc29mdHdhcmUsIHVuZGVyIHRoZSBHUEwuCiAgICAgICZsdDsvZ2pvYjpSZXF1aXJlbWVudHMmZ3Q7CgogICAgICAmbHQ7Z2pvYjpTa2lsbHMmZ3Q7CiAgICAgICZsdDsvZ2pvYjpTa2lsbHMmZ3Q7CgogICAgICAmbHQ7Z2pvYjpEZXRhaWxzJmd0OwogICAgICBBIEdOT01FIGJhc2VkIHN5c3RlbSB0aGF0IHdpbGwgYWxsb3cgYSBzdXBlcnVzZXIgdG8gY29uZmlndXJlIAogICAgICBjb21wcmVzc2VkIGFuZCB1bmNvbXByZXNzZWQgZmlsZXMgYW5kL29yIGZpbGUgc3lzdGVtcyB0byBiZSBiYWNrZWQgCiAgICAgIHVwIHdpdGggYSBzdXBwb3J0ZWQgbWVkaWEgaW4gdGhlIHN5c3RlbS4gIFRoaXMgc2hvdWxkIGJlIGFibGUgdG8gCiAgICAgIHBlcmZvcm0gdmlhIGZpbmQgY29tbWFuZHMgZ2VuZXJhdGluZyBhIGxpc3Qgb2YgZmlsZXMgdGhhdCBhcmUgcGFzc2VkIAogICAgICB0byB0YXIsIGRkLCBjcGlvLCBjcCwgZ3ppcCwgZXRjLiwgdG8gYmUgZGlyZWN0ZWQgdG8gdGhlIHRhcGUgbWFjaGluZSAKICAgICAgb3IgdmlhIG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIHRoZSBmaWxlc3lzdGVtIGl0c2VsZi4gRW1haWwgCiAgICAgIG5vdGlmaWNhdGlvbiBhbmQgR1VJIHN0YXR1cyBkaXNwbGF5IHZlcnkgaW1wb3J0YW50LgogICAgICAmbHQ7L2dqb2I6RGV0YWlscyZndDsKCiAgICAmbHQ7L2dqb2I6Sm9iJmd0OwoKICAmbHQ7L2dqb2I6Sm9icyZndDsKJmx0Oy9nam9iOkhlbHBpbmcmZ3Q7PC9wcmU+Cgo8cD5XaGlsZSBsb2FkaW5nIHRoZSBYTUwgZmlsZSBpbnRvIGFuIGludGVybmFsIERPTSB0cmVlIGlzIGEgbWF0dGVyIG9mIGNhbGxpbmcKb25seSBhIGNvdXBsZSBvZiBmdW5jdGlvbnMsIGJyb3dzaW5nIHRoZSB0cmVlIHRvIGdhdGhlciB0aGUgYXRhIGFuZCBnZW5lcmF0ZQp0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBpcyBoYXJkZXIsIGFuZCBtb3JlIGVycm9yIHByb25lLjwvcD4KCjxwPlRoZSBzdWdnZXN0ZWQgcHJpbmNpcGxlIGlzIHRvIGJlIHRvbGVyYW50IHdpdGggcmVzcGVjdCB0byB0aGUgaW5wdXQKc3RydWN0dXJlLiBGb3IgZXhhbXBsZSwgdGhlIG9yZGVyaW5nIG9mIHRoZSBhdHRyaWJ1dGVzIGlzIG5vdCBzaWduaWZpY2FudCwgdGhlClhNTCBzcGVjaWZpY2F0aW9uIGlzIGNsZWFyIGFib3V0IGl0LiBJdCdzIGFsc28gdXN1YWxseSBhIGdvb2QgaWRlYSBub3QgdG8KZGVwZW5kIG9uIHRoZSBvcmRlciBvZiB0aGUgY2hpbGRyZW4gb2YgYSBnaXZlbiBub2RlLCB1bmxlc3MgaXQgcmVhbGx5IG1ha2VzCnRoaW5ncyBoYXJkZXIuIEhlcmUgaXMgc29tZSBjb2RlIHRvIHBhcnNlIHRoZSBpbmZvcm1hdGlvbiBmb3IgYSBwZXJzb246PC9wPgo8cHJlPi8qCiAqIEEgcGVyc29uIHJlY29yZAogKi8KdHlwZWRlZiBzdHJ1Y3QgcGVyc29uIHsKICAgIGNoYXIgKm5hbWU7CiAgICBjaGFyICplbWFpbDsKICAgIGNoYXIgKmNvbXBhbnk7CiAgICBjaGFyICpvcmdhbmlzYXRpb247CiAgICBjaGFyICpzbWFpbDsKICAgIGNoYXIgKndlYlBhZ2U7CiAgICBjaGFyICpwaG9uZTsKfSBwZXJzb24sICpwZXJzb25QdHI7CgovKgogKiBBbmQgdGhlIGNvZGUgbmVlZGVkIHRvIHBhcnNlIGl0CiAqLwpwZXJzb25QdHIgcGFyc2VQZXJzb24oeG1sRG9jUHRyIGRvYywgeG1sTnNQdHIgbnMsIHhtbE5vZGVQdHIgY3VyKSB7CiAgICBwZXJzb25QdHIgcmV0ID0gTlVMTDsKCkRFQlVHKCJwYXJzZVBlcnNvblxuIik7CiAgICAvKgogICAgICogYWxsb2NhdGUgdGhlIHN0cnVjdAogICAgICovCiAgICByZXQgPSAocGVyc29uUHRyKSBtYWxsb2Moc2l6ZW9mKHBlcnNvbikpOwogICAgaWYgKHJldCA9PSBOVUxMKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsIm91dCBvZiBtZW1vcnlcbiIpOwogICAgICAgIHJldHVybihOVUxMKTsKICAgIH0KICAgIG1lbXNldChyZXQsIDAsIHNpemVvZihwZXJzb24pKTsKCiAgICAvKiBXZSBkb24ndCBjYXJlIHdoYXQgdGhlIHRvcCBsZXZlbCBlbGVtZW50IG5hbWUgaXMgKi8KICAgIGN1ciA9IGN1ci0mZ3Q7eG1sQ2hpbGRyZW5Ob2RlOwogICAgd2hpbGUgKGN1ciAhPSBOVUxMKSB7CiAgICAgICAgaWYgKCghc3RyY21wKGN1ci0mZ3Q7bmFtZSwgIlBlcnNvbiIpKSAmYW1wOyZhbXA7IChjdXItJmd0O25zID09IG5zKSkKICAgICAgICAgICAgcmV0LSZndDtuYW1lID0geG1sTm9kZUxpc3RHZXRTdHJpbmcoZG9jLCBjdXItJmd0O3htbENoaWxkcmVuTm9kZSwgMSk7CiAgICAgICAgaWYgKCghc3RyY21wKGN1ci0mZ3Q7bmFtZSwgIkVtYWlsIikpICZhbXA7JmFtcDsgKGN1ci0mZ3Q7bnMgPT0gbnMpKQogICAgICAgICAgICByZXQtJmd0O2VtYWlsID0geG1sTm9kZUxpc3RHZXRTdHJpbmcoZG9jLCBjdXItJmd0O3htbENoaWxkcmVuTm9kZSwgMSk7CiAgICAgICAgY3VyID0gY3VyLSZndDtuZXh0OwogICAgfQoKICAgIHJldHVybihyZXQpOwp9PC9wcmU+Cgo8cD5IZXJlIGFyZSBhIGNvdXBsZSBvZiB0aGluZ3MgdG8gbm90aWNlOjwvcD4KPHVsPgogIDxsaT5Vc3VhbGx5IGEgcmVjdXJzaXZlIHBhcnNpbmcgc3R5bGUgaXMgdGhlIG1vcmUgY29udmVuaWVudCBvbmU6IFhNTCBkYXRhCiAgICBpcyBieSBuYXR1cmUgc3ViamVjdCB0byByZXBldGl0aXZlIGNvbnN0cnVjdHMgYW5kIHVzdWFsbHkgZXhpYml0cyBoaWdobHkKICAgIHN0dWN0dXJlZCBwYXR0ZXJucy48L2xpPgogIDxsaT5UaGUgdHdvIGFyZ3VtZW50cyBvZiB0eXBlIDxlbT54bWxEb2NQdHI8L2VtPiBhbmQgPGVtPnhtbE5zUHRyPC9lbT4sIGkuZS4KICAgIHRoZSBwb2ludGVyIHRvIHRoZSBnbG9iYWwgWE1MIGRvY3VtZW50IGFuZCB0aGUgbmFtZXNwYWNlIHJlc2VydmVkIHRvIHRoZQogICAgYXBwbGljYXRpb24uIERvY3VtZW50IHdpZGUgaW5mb3JtYXRpb24gYXJlIG5lZWRlZCBmb3IgZXhhbXBsZSB0byBkZWNvZGUKICAgIGVudGl0aWVzIGFuZCBpdCdzIGEgZ29vZCBjb2RpbmcgcHJhY3RpY2UgdG8gZGVmaW5lIGEgbmFtZXNwYWNlIGZvciB5b3VyCiAgICBhcHBsaWNhdGlvbiBzZXQgb2YgZGF0YSBhbmQgdGVzdCB0aGF0IHRoZSBlbGVtZW50IGFuZCBhdHRyaWJ1dGVzIHlvdSdyZQogICAgYW5hbHl6aW5nIGFjdHVhbGx5IHBlcnRhaW5zIHRvIHlvdXIgYXBwbGljYXRpb24gc3BhY2UuIFRoaXMgaXMgZG9uZSBieSBhCiAgICBzaW1wbGUgZXF1YWxpdHkgdGVzdCAoY3VyLSZndDtucyA9PSBucykuPC9saT4KICA8bGk+VG8gcmV0cmlldmUgdGV4dCBhbmQgYXR0cmlidXRlcyB2YWx1ZSwgeW91IGNhbiB1c2UgdGhlIGZ1bmN0aW9uCiAgICA8ZW0+eG1sTm9kZUxpc3RHZXRTdHJpbmc8L2VtPiB0byBnYXRoZXIgYWxsIHRoZSB0ZXh0IGFuZCBlbnRpdHkgcmVmZXJlbmNlCiAgICBub2RlcyBnZW5lcmF0ZWQgYnkgdGhlIERPTSBvdXRwdXQgYW5kIHByb2R1Y2UgYW4gc2luZ2xlIHRleHQgc3RyaW5nLjwvbGk+CjwvdWw+Cgo8cD5IZXJlIGlzIGFub3RoZXIgcGllY2Ugb2YgY29kZSB1c2VkIHRvIHBhcnNlIGFub3RoZXIgbGV2ZWwgb2YgdGhlCnN0cnVjdHVyZTo8L3A+CjxwcmU+I2luY2x1ZGUgJmx0O2xpYnhtbC90cmVlLmgmZ3Q7Ci8qCiAqIGEgRGVzY3JpcHRpb24gZm9yIGEgSm9iCiAqLwp0eXBlZGVmIHN0cnVjdCBqb2IgewogICAgY2hhciAqcHJvamVjdElEOwogICAgY2hhciAqYXBwbGljYXRpb247CiAgICBjaGFyICpjYXRlZ29yeTsKICAgIHBlcnNvblB0ciBjb250YWN0OwogICAgaW50IG5iRGV2ZWxvcGVyczsKICAgIHBlcnNvblB0ciBkZXZlbG9wZXJzWzEwMF07IC8qIHVzaW5nIGR5bmFtaWMgYWxsb2MgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSAqLwp9IGpvYiwgKmpvYlB0cjsKCi8qCiAqIEFuZCB0aGUgY29kZSBuZWVkZWQgdG8gcGFyc2UgaXQKICovCmpvYlB0ciBwYXJzZUpvYih4bWxEb2NQdHIgZG9jLCB4bWxOc1B0ciBucywgeG1sTm9kZVB0ciBjdXIpIHsKICAgIGpvYlB0ciByZXQgPSBOVUxMOwoKREVCVUcoInBhcnNlSm9iXG4iKTsKICAgIC8qCiAgICAgKiBhbGxvY2F0ZSB0aGUgc3RydWN0CiAgICAgKi8KICAgIHJldCA9IChqb2JQdHIpIG1hbGxvYyhzaXplb2Yoam9iKSk7CiAgICBpZiAocmV0ID09IE5VTEwpIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgcmV0dXJuKE5VTEwpOwogICAgfQogICAgbWVtc2V0KHJldCwgMCwgc2l6ZW9mKGpvYikpOwoKICAgIC8qIFdlIGRvbid0IGNhcmUgd2hhdCB0aGUgdG9wIGxldmVsIGVsZW1lbnQgbmFtZSBpcyAqLwogICAgY3VyID0gY3VyLSZndDt4bWxDaGlsZHJlbk5vZGU7CiAgICB3aGlsZSAoY3VyICE9IE5VTEwpIHsKICAgICAgICAKICAgICAgICBpZiAoKCFzdHJjbXAoY3VyLSZndDtuYW1lLCAiUHJvamVjdCIpKSAmYW1wOyZhbXA7IChjdXItJmd0O25zID09IG5zKSkgewogICAgICAgICAgICByZXQtJmd0O3Byb2plY3RJRCA9IHhtbEdldFByb3AoY3VyLCAiSUQiKTsKICAgICAgICAgICAgaWYgKHJldC0mZ3Q7cHJvamVjdElEID09IE5VTEwpIHsKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHJvamVjdCBoYXMgbm8gSURcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgoIXN0cmNtcChjdXItJmd0O25hbWUsICJBcHBsaWNhdGlvbiIpKSAmYW1wOyZhbXA7IChjdXItJmd0O25zID09IG5zKSkKICAgICAgICAgICAgcmV0LSZndDthcHBsaWNhdGlvbiA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGRvYywgY3VyLSZndDt4bWxDaGlsZHJlbk5vZGUsIDEpOwogICAgICAgIGlmICgoIXN0cmNtcChjdXItJmd0O25hbWUsICJDYXRlZ29yeSIpKSAmYW1wOyZhbXA7IChjdXItJmd0O25zID09IG5zKSkKICAgICAgICAgICAgcmV0LSZndDtjYXRlZ29yeSA9IHhtbE5vZGVMaXN0R2V0U3RyaW5nKGRvYywgY3VyLSZndDt4bWxDaGlsZHJlbk5vZGUsIDEpOwogICAgICAgIGlmICgoIXN0cmNtcChjdXItJmd0O25hbWUsICJDb250YWN0IikpICZhbXA7JmFtcDsgKGN1ci0mZ3Q7bnMgPT0gbnMpKQogICAgICAgICAgICByZXQtJmd0O2NvbnRhY3QgPSBwYXJzZVBlcnNvbihkb2MsIG5zLCBjdXIpOwogICAgICAgIGN1ciA9IGN1ci0mZ3Q7bmV4dDsKICAgIH0KCiAgICByZXR1cm4ocmV0KTsKfTwvcHJlPgoKPHA+T25jZSB5b3UgYXJlIHVzZWQgdG8gaXQsIHdyaXRpbmcgdGhpcyBraW5kIG9mIGNvZGUgaXMgcXVpdGUgc2ltcGxlLCBidXQKYm9yaW5nLiBVbHRpbWF0ZWx5LCBpdCBjb3VsZCBiZSBwb3NzYmxlIHRvIHdyaXRlIHN0dWJiZXJzIHRha2luZyBlaXRoZXIgQyBkYXRhCnN0cnVjdHVyZSBkZWZpbml0aW9ucywgYSBzZXQgb2YgWE1MIGV4YW1wbGVzIG9yIGFuIFhNTCBEVEQgYW5kIHByb2R1Y2UgdGhlCmNvZGUgbmVlZGVkIHRvIGltcG9ydCBhbmQgZXhwb3J0IHRoZSBjb250ZW50IGJldHdlZW4gQyBkYXRhIGFuZCBYTUwgc3RvcmFnZS4KVGhpcyBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIHRvIHRoZSByZWFkZXIgOi0pPC9wPgoKPHA+RmVlbCBmcmVlIHRvIHVzZSA8YSBocmVmPSJleGFtcGxlL2dqb2JyZWFkLmMiPnRoZSBjb2RlIGZvciB0aGUgZnVsbCBDCnBhcnNpbmcgZXhhbXBsZTwvYT4gYXMgYSB0ZW1wbGF0ZSwgaXQgaXMgYWxzbyBhdmFpbGFibGUgd2l0aCBNYWtlZmlsZSBpbiB0aGUKR25vbWUgQ1ZTIGJhc2UgdW5kZXIgZ25vbWUteG1sL2V4YW1wbGU8L3A+Cgo8aDI+PGEgbmFtZT0iQ29udHJpYnV0aSI+Q29udHJpYnV0aW9uczwvYT48L2gyPgo8dWw+CiAgPGxpPjxhIGhyZWY9Im1haWx0bzphcmlAbHVzaXMub3JnIj5BcmkgSm9obnNvbjwvYT4gcHJvdmlkZXMgYSAgQysrIHdyYXBwZXIKICAgIGZvciBsaWJ4bWw6CiAgICA8cD5XZWJzaXRlOiA8YQogICAgaHJlZj0iaHR0cDovL2x1c2lzLm9yZy9+YXJpL3htbCsrLyI+aHR0cDovL2x1c2lzLm9yZy9+YXJpL3htbCsrLzwvYT48L3A+CiAgICA8cD5Eb3dubG9hZDogPGEKICAgIGhyZWY9Imh0dHA6Ly9sdXNpcy5vcmcvfmFyaS94bWwrKy9saWJ4bWwrKy50YXIuZ3oiPmh0dHA6Ly9sdXNpcy5vcmcvfmFyaS94bWwrKy9saWJ4bWwrKy50YXIuZ3o8L2E+PC9wPgogIDwvbGk+CiAgPGxpPjxhIGhyZWY9Im1haWx0bzppemxhdGtvdmljQGRhZW5ldC5kZSI+SWdvciAgWmxhdGtvdmljPC9hPiBpcyBub3cgdGhlCiAgICBtYWludGFpbmVyIG9mIHRoZSBXaW5kb3dzIHBvcnQsIDxhCiAgICBocmVmPSJodHRwOi8vd3d3LmZoLWZyYW5rZnVydC5kZS9+aWdvci9wcm9qZWN0cy9saWJ4bWwvaW5kZXguaHRtbCI+aGUKICAgIHByb3ZpZGVzIGJpbmFyaWVzPC9hPjwvbGk+CiAgPGxpPjxhCiAgICBocmVmPSJodHRwOi8vbWFpbC5nbm9tZS5vcmcvYXJjaGl2ZXMveG1sLzIwMDEtTWFyY2gvbXNnMDAwMTQuaHRtbCI+TWF0dAogICAgU2VyZ2VhbnQ8L2E+IGRldmVsb3BwZWQgPGEKICAgIGhyZWY9Imh0dHA6Ly9heGtpdC5vcmcvZG93bmxvYWQvIj5YTUw6OkxpYlhTTFQ8L2E+LCBhIHBlcmwgd3JhcHBlciBmb3IKICAgIGxpYnhtbDIvbGlieHNsdCBhcyBwYXJ0IG9mIHRoZSA8YSBocmVmPSJodHRwOi8vYXhraXQuY29tLyI+QXhLaXQgWE1MCiAgICBhcHBsaWNhdGlvbiBzZXJ2ZXI8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0ibWFpbHRvOmZuYXR0ZXJAZ214Lm5ldCI+RmVsaXggTmF0dGVyPC9hPiBhbmQgPGEKICAgIGhyZWY9Im1haWx0bzpnZWVydGtAYWkucnVnLm5sIj5HZWVydCBLbG9vc3Rlcm1hbjwvYT4gcHJvdmlkZSA8YQogICAgaHJlZj0ibGlieG1sLWRvYy5lbCI+YW4gZW1hY3MgbW9kdWxlPC9hPiB0byBsb29rdXAgbGlieG1sKDIpIGZ1bmN0aW9ucwogICAgZG9jdW1lbnRhdGlvbjwvbGk+CiAgPGxpPjxhIGhyZWY9Im1haWx0bzpzaGVyd2luQG5sbS5uaWguZ292Ij5aaXlpbmcgU2hlcndpbjwvYT4gcHJvdmlkZWQgPGEKICAgIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy9tZXNzYWdlcy8wNDg4Lmh0bWwiPm1hbiBwYWdlczwvYT48L2xpPgogIDxsaT50aGVyZSBpcyBhIG1vZHVsZSBmb3IgPGEKICAgIGhyZWY9Imh0dHA6Ly9hY3MtbWlzYy5zb3VyY2Vmb3JnZS5uZXQvbnN4bWwuaHRtbCI+bGlieG1sL2xpYnhzbHQgc3VwcG9ydAogICAgaW4gT3Blbk5TRC9BT0xTZXJ2ZXI8L2E+PC9saT4KICA8bGk+PGEgaHJlZj0ibWFpbHRvOmRrdWhsbWFuQGN1dHRlci5yZXh4LmNvbSI+RGF2ZSBLdWhsbWFuPC9hPiBwcm92aWRlcwogICAgbGlieG1sL2xpYnhzbHQgPGEgaHJlZj0iaHR0cDovL3d3dy5yZXh4LmNvbS9+ZGt1aGxtYW4iPndyYXBwZXJzIGZvcgogICAgUHl0aG9uPC9hPjwvbGk+CjwvdWw+Cgo8cD48L3A+Cgo8cD48YSBocmVmPSJtYWlsdG86RGFuaWVsLlZlaWxsYXJkQGltYWcuZnIiPkRhbmllbCBWZWlsbGFyZDwvYT48L3A+Cgo8cD4kSWQ6IHhtbC5odG1sLHYgMS4xMDMgMjAwMS8wNy8yNiAxODozMDoyNiB2ZWlsbGFyZCBFeHAgJDwvcD4KPC9ib2R5Pgo8L2h0bWw+Cg==