# smd_random_banner 0.34 # Random image or file chosen by category/text/article field. Use for advertising or fun # Stef Dawson # http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTc6InNtZF9yYW5kb21fYmFubmVyIjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS8iO3M6NzoidmVyc2lvbiI7czo0OiIwLjM0IjtzOjExOiJkZXNjcmlwdGlvbiI7czo4NjoiUmFuZG9tIGltYWdlIG9yIGZpbGUgY2hvc2VuIGJ5IGNhdGVnb3J5L3RleHQvYXJ0aWNsZSBmaWVsZC4gVXNlIGZvciBhZHZlcnRpc2luZyBvciBmdW4iO3M6NDoiaGVscCI7czo0MzgwMjoiPHN0eWxlPg0KY29kZSB7Y29sb3I6ICMyMDQ2NmZ9DQpwcmUge3BhZGRpbmc6IDAuNWVtIDFlbTsgYmFja2dyb3VuZDogI2VlZTsgYm9yZGVyOiAxcHggZGFzaGVkICNjY2M7fQ0KaDEsIGgyLCBoMywgaDMgY29kZSB7Zm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0OiBib2xkO30NCmgxLCBoMiwgaDMge21hcmdpbi1sZWZ0OiAtMWVtO30NCmgyLCBoMyB7bWFyZ2luLXRvcDogMmVtO30NCmgxIHtmb250LXNpemU6IDNlbTt9DQpoMiB7Zm9udC1zaXplOiAyZW07fQ0KaDMge2ZvbnQtc2l6ZTogMS41ZW07fQ0KbGkgYSBjb2RlIHtmb250LXdlaWdodDogbm9ybWFsO30NCi5yZXF1aXJlZCwgLndhcm5pbmcge2NvbG9yOnJlZDt9DQojZWd0YWIgdGQsI2VndGFiIHRoIHtwYWRkaW5nOi43ZW07IGJvcmRlcjoxcHggc29saWQgIzg4ODt0ZXh0LWFsaWduOmNlbnRlcjt9DQo8L3N0eWxlPg0KPGgxIGlkPSJ0b3AiPnNtZF9yYW5kb21fYmFubmVyPC9oMT4NCjxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzYWdlLCBidWdzLCBmZWF0dXJlcyBldGMsIHBsZWFzZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MTY0NDgiPnZpc2l0IHRoZSBmb3J1bSB0aHJlYWQ8L2E+LiBGb3Igb3RoZXIgc29mdHdhcmUgYnkgbWUsIG9yIHRvIG1ha2UgYSBkb25hdGlvbiwgc2VlIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnNvZnR3YXJlIHBhZ2U8L2E+LjwvcD4NCjxwIGNsYXNzPSJyZXF1aXJlZCI+UmVxdWlyZXMgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9zbWRfbGliX3YwLjMudHh0Ij5zbWRfbGliIHYwLjM8L2E+IHRvIGJlIGluc3RhbGxlZCBhbmQgYWN0aXZhdGVkLjwvcD48cD4NCg0KPC9wPjxoMiBpZD0iY29udGVudHMiPkNvbnRlbnRzPC9oMj4NCjx1bD4NCjxsaT48YSBocmVmPSIjb3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2ltZ21vZGUiPkltYWdlIG1vZGU8L2E+DQo8dWw+DQo8bGk+PGEgaHJlZj0iI2ltZ2F0dHMiPkF0dHJpYnV0ZXM8L2E+DQo8dWw+DQo8bGk+PGEgaHJlZj0iI21vZGUiPm1vZGU8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjY2F0ZWdvcnkiPmNhdGVnb3J5PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3N1YmNhdHMiPnN1YmNhdHM8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjbWF0Y2h0ZXh0Ij5tYXRjaF90ZXh0PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2F2b2lkdGV4dCI+YXZvaWRfdGV4dDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNpbWdjb21wYXJldG8iPmNvbXBhcmVfdG88L2E+PC9saT4NCjxsaT48YSBocmVmPSIjaWRwcmVmaXgiPmlkX3ByZWZpeDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNsaW1pdCI+bGltaXQ8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjYWx3YXlzZGlzcGxheSI+YWx3YXlzX2Rpc3BsYXk8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjdGh1bWIiPnRodW1iPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2ltZ2xpbmtpbiI+bGlua19pbjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNsaW5rcHJlZml4Ij5saW5rX3ByZWZpeDwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNyZWZlcmVyIj5yZWZlcmVyPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2ltZ2ltZ2NsYXNzIj5pbWdjbGFzczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNyYXd1cmwiPnJhd191cmw8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjdGFyZ2V0Ij50YXJnZXQ8L2E+PC9saT4NCjwvdWw+PC9saT4NCjxsaT48YSBocmVmPSIjaW1nZXhhbXBsZXMiPkltYWdlIG1vZGUgZXhhbXBsZXM8L2E+PC9saT4NCjwvdWw+PC9saT4NCjxsaT48YSBocmVmPSIjZmlsZW1vZGUiPkZpbGUgbW9kZTwvYT4NCjx1bD4NCjxsaT48YSBocmVmPSIjZmlsZXdvcmtzIj5Ib3cgaXQgd29ya3M6IE1JTUUgdHlwZXM8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjc3dmb2JqZWN0Ij5PdmVycmlkaW5nIE1JTUUgdHlwZXMgLyBzd2ZvYmplY3Q8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjZmlsZWF0dHMiPkRpZmZlcmVudCBhdHRyaWJ1dGVzPC9hPg0KPHVsPg0KPGxpPjxhIGhyZWY9IiNmaWxlY29tcGFyZXRvIj5jb21wYXJlX3RvPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2ZpbGVsaW5raW4iPmxpbmtfaW48L2E+PC9saT4NCjxsaT48YSBocmVmPSIjbnZkZWxpbSI+bnZfZGVsaW08L2E+PC9saT4NCjxsaT48YSBocmVmPSIjbm9wbHVndGV4dCI+bm9fcGx1Z190ZXh0PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2dsb2JhbHBhcmFtcyI+Z2xvYmFsX3BhcmFtczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNmaWxlaW1nY2xhc3MiPmltZ2NsYXNzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2NvdW50ZG93bmxvYWRzIj5jb3VudF9kb3dubG9hZHM8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjZmlsZXNkaXIiPmZpbGVzX2RpcjwvYT48L2xpPg0KPC91bD48L2xpPg0KPGxpPjxhIGhyZWY9IiNmaWxlZXhhbXBsZXMiPkZpbGUgbW9kZSBleGFtcGxlczwvYT48L2xpPg0KPC91bD48L2xpPg0KPGxpPjxhIGhyZWY9IiNjcmVkaXRzIj5DcmVkaXRzPC9hPjwvbGk+DQo8L3VsPg0KDQo8aDIgaWQ9Im92ZXJ2aWV3Ij5PdmVydmlldzwvaDI+DQo8cD5SYW5kb21seSBkaXNwbGF5IGJhbm5lcnMgb24gYSBwYWdlIGZvciBjb3NtZXRpYyBvciBhZHZlcnRpc2luZw0KcHVycG9zZXMuIFRoZSBjb25jZXB0IGlzOiB3aGF0IGlmIHlvdSB3YW50IHRvIGFkdmVydGlzZSBvdGhlciBwYXJ0cyBvZg0KeW91ciBzaXRlIChlLmcuIG90aGVyIHByb2R1Y3RzL3NlcnZpY2VzKSB1c2luZyBhIGJhbm5lciBhZD8gWW91IHdhbnQgYW4NCmltYWdlL2FuaW1hdGVkIGdpZi92aWRlby93aGF0ZXZlciB0byBhZHZlcnRpc2UgdGhlIHByb2R1Y3RzIG9yIHNlcnZpY2VzDQphbmQgd2hlbiBwZW9wbGUgY2xpY2sgb24gdGhlIGJhbm5lcnMsIHRoZXkgc2hvdWxkIGJlIHRha2VuIHRvIHRoZQ0KY29ycmVjdCBwYXJ0IG9mIHRoZSBzaXRlLiBUaGUgY3J1Y2lhbCBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgbG9va3MgdmVyeQ0KYW1hdGV1ciB0byBhZHZlcnRpc2UgdGhlIHByb2R1Y3QgdGhlIHBlcnNvbiBpcyBjdXJyZW50bHkgbG9va2luZyBhdCBvbg0KdGhlIHNhbWUgcGFnZSBhcyB0aGUgcHJvZHVjdCBpdHNlbGYuPC9wPg0KPHA+VGhpcyBwbHVnaW4gYWxsb3dzIHlvdSB0byByYW5kb21seSBpbmNsdWRlL2V4Y2x1ZGUgY2xpY2thYmxlIGltYWdlcw0Kb3IgZmlsZXMsIGJhc2VkIG9uIGZpeGVkIHRleHQgc3RyaW5ncyBvciB0aGUgY29udGVudHMgb2YgYXJ0aWNsZQ0KZmllbGRzLiBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHNpbXBseSBzcHJ1Y2UgdXAgYSBwYWdlIGFuZCBzaG93IGENCnJhbmRvbSBpbWFnZSBlYWNoIHRpbWUuPC9wPg0KPHA+RmVhdHVyZXM6PC9wPg0KPHVsPg0KPGxpPlR3byBtb2RlcyBvZiBvcGVyYXRpb246IGNsYXNzc2ljYWwgaW1hZ2VzIGZvciBzdGF0aWMgYmFubmVycywgb3IgZmlsZXMgZm9yIGZsYXNoL3ZpZGVvL21vdmluZyBiYW5uZXJzLiBTdXBwb3J0cyB0aGUgY2xhc3NpYyA8Y29kZT4mbHQ7b2JqZWN0Jmd0OzwvY29kZT4gdGFnIG9yIChtb3N0IG9mKSA8YSBocmVmPSJodHRwOi8vYmxvZy5kZWNvbmNlcHQuY29tL3N3Zm9iamVjdC8iPnN3Zm9iamVjdDwvYT48L2xpPg0KPGxpPkNob29zZSBpbWFnZXMvZmlsZXMgYmFzZWQgb24gZ2l2ZW4gdGV4dCwgb3IgaXRlbXMgcmVhZCBmcm9tIHRoZSBmaWVsZHMgb2YgdGhlIGN1cnJlbnQgYXJ0aWNsZTwvbGk+DQo8bGk+QXJiaXRyYXJ5IGluY2x1c2lvbi9leGNsdXNpb24gb2YgY2F0ZWdvcmllczwvbGk+DQo8bGk+U3ViY2F0ZWdvcmllczogc3BlY2lmeSBhIHBhcmVudCBhbmQgYWxsIGNoaWxkIGNhdGVnb3JpZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQ8L2xpPg0KPGxpPk1vcmUgdGhhbiBvbmUgYmFubmVyIHBlciBwYWdlIG9yIHRhZyBzdXBwb3J0ZWQ8L2xpPg0KPGxpPkJhbm5lcnMgY2FuIGxpbmsgdG8gYW55IG90aGVyIFVSTDwvbGk+DQo8bGk+UnVkaW1lbnRhcnkgcmVmZXJyZXIgdHJhY2tpbmcgdG8gYWxsb3cgY2xpY2stdGhyb3VnaCByYXRlcyB0byBiZQ0KYW5hbHlzZWQgdmlhIFRYUCdzIGxvZyBmaWxlIHRvIHNlZSB3aGljaCBiYW5uZXJzIGFyZSBtb3N0IHBvcHVsYXI8L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yMDY5MiI+TXVsdGktbGluZ3VhbCBQYWNrIChNTFApPC9hPiBhd2FyZSBmb3IgaW1hZ2UgY2FwdGlvbi9hbHQgc3RyaW5nczwvbGk+DQo8L3VsPg0KDQo8aDIgaWQ9ImltZ21vZGUiPkltYWdlIG1vZGU8L2gyPg0KPHA+SW4gaXRzIGJhc2UgZm9ybSwgdGhpcyBtb2RlIGZ1bmN0aW9ucyBleGFjdGx5IGFzIGRydV9yYW5kb21faW1hZ2UsDQppLmUuIHBpY2tzIG9uZSByYW5kb20gaW1hZ2UgZnJvbSB0aGUgZW50aXJlIGRhdGFiYXNlIG9mIGltYWdlcyBhbmQNCmRpc3BsYXlzIGl0LiBCdXQgaXQgY2FuIGRvIGEgd2hvbGUgbG90IG1vcmUuIEVhY2ggb3B0aW9uIHdoaXR0bGVzIHRoZQ0KaW1hZ2VzIGRvd24gZnVydGhlciwgYmFzZWQgb24gdmFyaW91cyBjcml0ZXJpYSwgdW50aWwgeW91IGFyZSBsZWZ0IHdpdGgNCmEgcG90ZW50aWFsIHBvb2wgb2YgaW1hZ2VzLCBmcm9tIHdoaWNoIHRoZSBwbHVnaW4gdGhlbiByYW5kb21seSBjaG9vc2VzLjwvcD4NCg0KPGgyIGlkPSJpbWdhdHRzIj5BdHRyaWJ1dGVzPC9oMj4NCjxoMyBpZD0ibW9kZSI+PGNvZGU+bW9kZTwvY29kZT48L2gzPg0KPHA+U3dpdGNoZXMgdGhlIHBsdWdpbiBiZXR3ZWVuIHRoaXMgZGVmYXVsdCA8YSBocmVmPSIjaW1nbW9kZSI+aW1hZ2UgbW9kZTwvYT4gKHB1bGxpbmcgcGljdHVyZXMgZnJvbSB0aGUgaW1hZ2UgZGF0YWJhc2UpIG9yIDxhIGhyZWY9IiNmaWxlbW9kZSI+ZmlsZSBtb2RlPC9hPiAoZnJvbSB1cGxvYWRlZCBmaWxlcykuPC9wPg0KPGg0Pk9wdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPjxjb2RlPmltYWdlPC9jb2RlPjxicj4NCnRoZSBkZWZhdWx0PC9saT4NCjxsaT48Y29kZT5maWxlPC9jb2RlPjxicj4NCjwvbGk+PC91bD4NCg0KPGgzIGlkPSJjYXRlZ29yeSI+PGNvZGU+Y2F0ZWdvcnk8L2NvZGU+PC9oMz4NCjxwPkEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgaW1hZ2UgY2F0ZWdvcnkgbmFtZXMgdG8gY2hvb3NlIGZyb207IGVpdGhlciBuYW1lZCBleHBsaWNpdGx5IG9yIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczo8L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+P2M8L2NvZGU+PGJyPg0KdXNlIHRoZSBjdXJyZW50IGdsb2JhbCAoYXJ0aWNsZSkgY2F0ZWdvcnkgYXMgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgY2F0ZWdvcnk8L2xpPg0KPGxpPjxjb2RlPiFjPC9jb2RlPjxicj4NCnVzZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGN1cnJlbnQgZ2xvYmFsIGNhdGVnb3J5PC9saT4NCjxsaT48Y29kZT4/czwvY29kZT48YnI+DQp1c2UgdGhlIGN1cnJlbnQgVFhQIHNlY3Rpb24gYXMgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgY2F0ZWdvcnk8L2xpPg0KPGxpPjxjb2RlPiFzPC9jb2RlPjxicj4NCnVzZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIGN1cnJlbnQgc2VjdGlvbjwvbGk+DQo8bGk+PGNvZGU+P3Q8L2NvZGU+PGJyPg0KdXNlIHRoZSBjdXJyZW50IGFydGljbGUncyB1cmwtdGl0bGUgYXMgdGhlIG5hbWUgb2YgYW4gaW1hZ2UgY2F0ZWdvcnk8L2xpPg0KPGxpPjxjb2RlPiF0PC9jb2RlPjxicj4NCnVzZXMgYWxsIHVybC10aXRsZXMgZXhjZXB0IHRoZSBjdXJyZW50IGFydGljbGUgKHByb2JhYmx5IG5vdCBtdWNoIHVzZSEpPC9saT4NCjxsaT48Y29kZT4/aWQ8L2NvZGU+PGJyPg0KdXNlIHRoZSBjdXJyZW50IGFydGljbGUncyBJRCBhcyB0aGUgbmFtZSBvZiBhbiBpbWFnZSBjYXRlZ29yeS4gVGhlIGNhdGVnb3J5IG5hbWUgaXMgbWFkZSB1cCBvZiB0aGUgPGEgaHJlZj0iI2lkcHJlZml4Ij5pZF9wcmVmaXg8L2E+IG9wdGlvbiBhbmQgdGhlIElEIHNvLCBieSBkZWZhdWx0LCBpdCB3aWxsIGJlIGFydGljbGUtPGNvZGU+SUQ8L2NvZGU+LiBUaGlzIGhlbHBzIHdoZW4gY3JlYXRpbmcgcGVyLWFydGljbGUgaW1hZ2UgY2F0ZWdvcmllcyBhbmQgbWVhbnMgeW91IGRvbid0IGhhdmUgdG8gdXNlIGNhdGVnb3J5IG5hbWVzIHRoYXQgYXJlIHNpbXBseSBudW1iZXJzLjwvbGk+DQo8bGk+PGNvZGU+IWlkPC9jb2RlPjxicj4NCnVzZXMgYWxsIGltYWdlIElEcyBleGNlcHQgdGhlIGN1cnJlbnQgYXJ0aWNsZTwvbGk+DQo8bGk+PGNvZGU+P2ZpZWxkbmFtZTwvY29kZT48YnI+DQpsb29rcyBpbiB0aGUgZ2l2ZW4gZmllbGRuYW1lIG9mIHRoZSBjdXJyZW50IGFydGljbGUgYW5kIHRyZWF0cyB0aGUNCmNvbnRlbnRzIGFzIGEgbGlzdCBvZiBjYXRlZ29yaWVzLiBEZXNpZ25lZCBwcmltYXJpbHkgZm9yIHVzZSB3aXRoDQpjdXN0b20gZmllbGRzIChlLmcuIDxjb2RlPj9jdXN0b20xPC9jb2RlPiksIGl0IGNvdWxkIGFsc28gYmUgYW55IG90aGVyIGZpZWxkIChvciBmaWVsZHMpIGZyb20geW91ciBhcnRpY2xlcyAoZS5nLiA8Y29kZT4/ZXhjZXJwdDwvY29kZT4gb3IgPGNvZGU+P2NhdGVnb3J5MTwvY29kZT4gb3IgPGNvZGU+P2tleXdvcmRzPC9jb2RlPiBvciA8Y29kZT4/YXV0aG9yaWQ8L2NvZGU+LCBldGMpLiBCZSB3YXJuZWQ6IGlmIHlvdSB1c2UgPGNvZGU+P2JvZHk8L2NvZGU+IG9yIHNvbWV0aGluZyBlcXVhbGx5IG91dHJhZ2VvdXMsIGNoYW5jZXMgYXJlIHRoZSBwbHVnaW4gd2lsbCBleHBsb2RlPC9saT4NCjwvdWw+DQoNCjxwPlRvIG5lZ2F0ZSBhbnkgY2F0ZWdvcnkgc2VsZWN0aW9uLCB1c2UgPGNvZGU+IWNhdGVnb3J5PC9jb2RlPiBvciA8Y29kZT4hZmllbGRfbmFtZTwvY29kZT4uIElmIHlvdSBsaXN0IHNwZWNpZmljIGltYWdlIGNhdGVnb3JpZXMgKGUuZy4gPGNvZGU+IW1hbW1hbHM8L2NvZGU+KSB0aG9zZSBjYXRlZ29yaWVzIHdpbGwgYmUgZXhjbHVkZWQuIElmIHlvdSBzcGVjaWZ5IGEgZmllbGQgbmFtZSBzdWNoIGFzIDxjb2RlPiFrZXl3b3JkczwvY29kZT4gb3IgPGNvZGU+IWN1c3RvbTE8L2NvZGU+LCB0aGUgY29udGVudHMgb2YgdGhhdCBmaWVsZCB3aWxsIGJlIHJlYWQgYW5kIHRoZSBsaXN0IG9mIGltYWdlIGNhdGVnb3JpZXMgZm91bmQgdGhlcmUgd2lsbCBiZSBleGNsdWRlZC48L3A+DQo8cD5Ob3RlIHRoYXQgaWYgeW91IHNwZWNpZnkgYSBmaWVsZCBuYW1lIGFuZCB0aGF0IGZpZWxkIGluIHRoZSBhcnRpY2xlDQppcyBlbXB0eSwgdGhlIG5hbWUgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdhcyBhbiBhY3R1YWwgaW1hZ2UNCmNhdGVnb3J5LiBTbyBpZiB5b3Ugc3BlY2lmaWVkIDxjb2RlPj9rZXl3b3JkczwvY29kZT4gYW5kIHRoZSBrZXl3b3JkcyBmaWVsZCBpbiB0aGUgY3VycmVudCBhcnRpY2xlIHdhcyBlbXB0eSwgaXQgd291bGQgbG9vayBmb3IgYW4gaW1hZ2UgY2F0ZWdvcnkgbmFtZWQgImtleXdvcmRzIi48L3A+DQo8cD5BbHNvIG5vdGUgdGhhdCwgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgeW91IGxpc3QgdGhlbSwgYWxsICdwb3NpdGl2ZXMnIHdpbGwgYmUgcHJvY2Vzc2VkIGZpcnN0LCB0aGVuIGFueSBleGNsdXNpb25zIGFwcGxpZWQuPC9wPg0KDQo8aDMgaWQ9InN1YmNhdHMiPjxjb2RlPnN1YmNhdHM8L2NvZGU+PC9oMz4NCjxwPkF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgYWxsIHN1Yi1jYXRlZ29yaWVzIG9mIHRoZSBjaG9zZW4gaW1hZ2UgY2F0ZWdvcmllcy48L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+MTwvY29kZT48YnI+DQpzd2l0Y2hlcyB0aGUgb3B0aW9uIG9uLiBJdCBpcyBtaXNzaW5nIChpLmUuIG9mZikgYnkgZGVmYXVsdDwvbGk+DQo8L3VsPg0KDQo8aDMgaWQ9Im1hdGNodGV4dCI+PGNvZGU+bWF0Y2hfdGV4dDwvY29kZT48L2gzPg0KPHA+QSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0ZXh0IHN0cmluZ3MgdG8gbG9vayBmb3IgaW4gdGhlIGltYWdlLiBBcyB3aXRoIHRoZSA8YSBocmVmPSIjY2F0ZWdvcnkiPmNhdGVnb3J5PC9hPiBvcHRpb24sIHlvdSBjYW4gc3BlY2lmeSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgb3B0aW9uczoNCjwvcD48aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+P2M8L2NvZGU+PGJyPg0KdXNlIHRoZSBjdXJyZW50IGdsb2JhbCAoYXJ0aWNsZSkgY2F0ZWdvcnkgYXMgb25lIG9mIHRoZSB3b3JkcyB0byBsb29rIGZvciBpbiB0aGUgaW1hZ2U8L2xpPg0KPGxpPjxjb2RlPj9zPC9jb2RlPjxicj4NCnVzZSB0aGUgY3VycmVudCBUWFAgc2VjdGlvbiBhcyBvbmUgb2YgdGhlIHNlYXJjaCB0ZXJtczwvbGk+DQo8bGk+PGNvZGU+P3Q8L2NvZGU+PGJyPg0KdXNlIHRoZSBjdXJyZW50IGFydGljbGUncyB1cmwtdGl0bGUgYXMgb25lIG9mIHRoZSBwaHJhc2VzIHRvIGxvb2sgZm9yPC9saT4NCjxsaT48Y29kZT4/aWQ8L2NvZGU+PGJyPg0KdXNlIHRoZSBjdXJyZW50IGFydGljbGUncyBJRCAoaW5jbHVkaW5nIDxhIGhyZWY9IiNpZHByZWZpeCI+aWRfcHJlZml4PC9hPikgYXMgb25lIG9mIHRoZSB0aGluZ3MgdG8gbG9vayBmb3I8L2xpPg0KPGxpPjxjb2RlPj9maWVsZG5hbWU8L2NvZGU+PGJyPg0KbG9vayBpbiBhbnkgZ2l2ZW4gYXJ0aWNsZSBmaWVsZCAoZS5nLiBjdXN0b20xLCBjdXN0b20yLCBhcnRpY2xlX2ltYWdlLA0Ka2V5d29yZHMsIGV4Y2VycHQsIGV0YykgYW5kIHJlYWQgd2hhdGV2ZXIgaXMgZm91bmQgdGhlcmUgYXMgYSB3b3JkIChvcg0KbGlzdCBvZiB3b3JkcykgdG8gbG9vayBmb3IgaW4gdGhlIGltYWdlPC9saT4NCjwvdWw+DQoNCjxoMyBpZD0iYXZvaWR0ZXh0Ij48Y29kZT5hdm9pZF90ZXh0PC9jb2RlPjwvaDM+DQo8cD5FeGFjdGx5IHRoZSBzYW1lIGFzIDxhIGhyZWY9IiNtYXRjaHRleHQiPm1hdGNoX3RleHQ8L2E+IGV4Y2VwdCBpdCBkZWZpbmVzIHdvcmRzIHRoYXQgPHN0cm9uZz5tdXN0IG5vdDwvc3Ryb25nPiBiZSBmb3VuZCBpbiB0aGUgaW1hZ2UuIEFueSBpbWFnZXMgdGhhdCBkbyBub3QgY29udGFpbiB0aGUgd29yZChzKSBhcmUgZmFpciBnYW1lLjwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT4/YzwvY29kZT48YnI+DQp1c2UgdGhlIGN1cnJlbnQgZ2xvYmFsIChhcnRpY2xlKSBjYXRlZ29yeSBhcyBvbmUgb2YgdGhlIHdvcmRzIHRvIGF2b2lkIGluIHRoZSBpbWFnZTwvbGk+DQo8bGk+PGNvZGU+P3M8L2NvZGU+PGJyPg0KaWdub3JlIGFueSBpbWFnZXMgdGhhdCBjb250YWluIHRoZSBjdXJyZW50IFRYUCBzZWN0aW9uIG5hbWUgaW4gdGhlbTwvbGk+DQo8bGk+PGNvZGU+P3Q8L2NvZGU+PGJyPg0KdXNlIHRoZSBjdXJyZW50IGFydGljbGUncyB1cmwtdGl0bGUgYXMgb25lIG9mIHRoZSBwaHJhc2VzIHRvIGF2b2lkIChub3RlOiBpbmNsdWRlcyB0aGUgdXJsLXRpdGxlLWh5cGhlbnMgaW4gdGhlIGNvbXBhcmlzb24pPC9saT4NCjxsaT48Y29kZT4/aWQ8L2NvZGU+PGJyPg0KaWdub3JlIGFueSBpbWFnZSB0aGF0IHVzZXMgdGhlIGN1cnJlbnQgYXJ0aWNsZSdzIElEIChwbHVzIGFueSBjb3JyZXNwb25kaW5nIDxhIGhyZWY9IiNpZHByZWZpeCI+aWRfcHJlZml4PC9hPikgYXMgb25lIG9mIHRoZSB0aGluZ3MgdG8gYXZvaWQ8L2xpPg0KPGxpPjxjb2RlPj9maWVsZG5hbWU8L2NvZGU+PGJyPg0KbG9vayBpbiBhbnkgZ2l2ZW4gYXJ0aWNsZSBmaWVsZCAoZS5nLiBjdXN0b20xLCBjdXN0b20yLCBhcnRpY2xlX2ltYWdlLA0Ka2V5d29yZHMsIGV4Y2VycHQsIGV0YykgYW5kIHJlYWQgd2hhdGV2ZXIgaXMgZm91bmQgdGhlcmUgYXMgYSB3b3JkIChvcg0KbGlzdCBvZiB3b3JkcykgdG8gYXZvaWQgaW4gdGhlIGltYWdlPC9saT4NCjwvdWw+DQoNCjxwPk5vdGUgdGhhdCBhbnkgaW1hZ2VzIG1hdGNoaW5nIHN0dWZmIGluIHRoZSAncG9zaXRpdmUnIDxjb2RlPm1hdGNoX3RleHQ8L2NvZGU+IGxpc3Qgd2lsbCBiZSBjaG9zZW4gZmlyc3QsIGJlZm9yZSBzb21lIG9mIHRoZW0gYXJlIHRoZW4gZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBpbiA8Y29kZT5hdm9pZF90ZXh0PC9jb2RlPi48L3A+DQoNCjxoMyBpZD0iaW1nY29tcGFyZXRvIj48Y29kZT5jb21wYXJlX3RvPC9jb2RlPjwvaDM+DQo8cD5BbGwgdGhpcyB0YWxrIG9mIGNvbXBhcmluZyB3b3JkcyB0byBpbWFnZXMgaXMgZmluZSwgYnV0IHdoYXQgZXhhY3RseQ0KaXMgaXQgY29tcGFyaW5nIHRvPyBUaGlzIGlzIHdoZXJlIHlvdSBkZWNsYXJlIHdoZXJlIHRoZSBwbHVnaW4gbG9va3MuDQpCeSBkZWZhdWx0IGl0IHVzZXMganVzdCB0aGUgaW1hZ2UgZmlsZSBuYW1lLCBidXQgaXQgY2FuIGJlIGV4dGVuZGVkIHRvDQplbmNvbXBhc3MgYW55IG9mIHRoZSBmb2xsb3dpbmc6PC9wPg0KPGg0Pk9wdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPjxjb2RlPm5hbWU8L2NvZGU+PGJyPg0KdGhlIGRlZmF1bHQ6IGxvb2sgYXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBpbWFnZSBhbmQgaWYgaXQgY29udGFpbnMgYW55IG9mIHRoZSB3b3JkcyBpbiA8YSBocmVmPSIjbWF0Y2h0ZXh0Ij5tYXRjaF90ZXh0PC9hPiB0aGVuIGFkZCBpdCB0byB0aGUgcG9vbC4gQ29udmVyc2VseSwgaWYgaXQgY29udGFpbnMgYW55IG9mIHRoZSB3b3JkcyBpbiA8YSBocmVmPSIjYXZvaWR0ZXh0Ij5hdm9pZF90ZXh0PC9hPiB0aGVuIGlnbm9yZSB0aGUgaW1hZ2U8L2xpPg0KPGxpPjxjb2RlPmlkPC9jb2RlPjxicj4NCmxvb2sgYXQgdGhlIGlkIG9mIHRoZSBpbWFnZSBhbmQgaW5jbHVkZS9leGNsdWRlIGl0IGJhc2VkIG9uIHRoZSBudW1iZXJzIGluIG1hdGNoX3RleHQvYXZvaWRfdGV4dDwvbGk+DQo8bGk+PGNvZGU+Y2FwdGlvbjwvY29kZT48YnI+DQppZiB0aGUgY2FwdGlvbiBjb250YWlucyAoZm9yIG1hdGNoX3RleHQpIG9yIGRvZXMgbm90IGNvbnRhaW4gKGZvcg0KYXZvaWRfdGV4dCkgYW55IHBhcnRpY3VsYXIgd29yZHMsIGluY2x1ZGUvZXhjbHVkZSB0aGlzIGltYWdlIGZyb20gdGhlDQpwb29sPC9saT4NCjxsaT48Y29kZT5hbHQ8L2NvZGU+PGJyPg0KaWYgdGhlIGFsdCB0ZXh0IGNvbnRhaW5zIChmb3IgbWF0Y2hfdGV4dCkgb3IgZG9lcyBub3QgY29udGFpbiAoZm9yDQphdm9pZF90ZXh0KSBhbnkgcGFydGljdWxhciB3b3JkcywgaW5jbHVkZS9leGNsdWRlIHRoaXMgaW1hZ2UgZnJvbSB0aGUNCnBvb2w8L2xpPg0KPGxpPjxjb2RlPmNhdGVnb3J5PC9jb2RlPjxicj4NCmFsdGhvdWdoIG5vdCByZWFsbHkgb2YgbXVjaCB1c2UgKHRoZSA8YSBocmVmPSIjY2F0ZWdvcnkiPmNhdGVnb3J5PC9hPiBvcHRpb24gY2FuIGJlIHVzZWQgaW5zdGVhZCksIHlvdSBtYXkgc3BlY2lmeSB0aGUgY2F0ZWdvcnkgYXMgYSBwbGFjZSB0byBsb29rIGZvciBwYXJ0aWN1bGFyIHdvcmRzPC9saT4NCjwvdWw+DQoNCjxoMyBpZD0iaWRwcmVmaXgiPjxjb2RlPmlkX3ByZWZpeDwvY29kZT48L2gzPg0KPHA+VGhlIHN0cmluZyB3aGljaCB3aWxsIGJlIHByZWZpeGVkIGJlZm9yZSBldmVyeSBhcnRpY2xlIElELiBEZWZhdWx0cyB0byA8Y29kZT4iYXJ0aWNsZS0iPC9jb2RlPi4gSW4gb3RoZXIgd29yZHMsIGlmIHlvdSBhcmUgY3VycmVudGx5IHZpZXdpbmcgYXJ0aWNsZSA3NSBhbmQgdXNlIDxjb2RlPm1hdGNoX3RleHQ9Ij9pZCI8L2NvZGU+IHRoZSBwbHVnaW4gd2lsbCBsb29rIGZvciBhbnkgaW1hZ2VzIHRoYXQgY29udGFpbiAiYXJ0aWNsZS03NSIgYW5kIGFkZCB0aGVtIHRvIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBmaWxlcyBpbiB0aGUgcG9vbC48L3A+DQo8cD5JZiB5b3UgcHJlZmVyIHNvbWV0aGluZyBlbHNlIGJlZm9yZSB0aGUgSUQsIHNwZWNpZnkgaXQgd2l0aCB0aGlzDQpvcHRpb24uIElmIHlvdSB3aXNoIHRoZSBhcnRpY2xlIElEIHRvIGJlIHVzZWQgd2l0aG91dCBhbnkgcHJlZml4LCB1c2UgPGNvZGU+aWRfcHJlZml4PSIiPC9jb2RlPi48L3A+DQoNCjxoMyBpZD0ibGltaXQiPjxjb2RlPmxpbWl0PC9jb2RlPjwvaDM+DQo8cD5UaGUgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzIHRvIGRpc3BsYXkgZnJvbSB0aGUgcG9vbC4gTm90ZSB0aGF0IGlmDQp0aGUgcG9vbCBjb250YWlucyBmZXdlciBpdGVtcyB0aGFuIHRoZSBudW1iZXIgc3BlY2lmaWVkIGhlcmUsIHRoZQ0KcGx1Z2luIGNhbiBvbmx5IGRpc3BsYXkgdGhlIG1heGltdW0gbnVtYmVyIGl0IGhhcyBmb3VuZCB0aGF0IG1hdGNoIHlvdXINCmNyaXRlcmlhLiBEZWZhdWx0OiAxLjwvcD4NCg0KPGgzIGlkPSJhbHdheXNkaXNwbGF5Ij48Y29kZT5hbHdheXNfZGlzcGxheTwvY29kZT48L2gzPg0KPHA+SWYgbm8gbWF0Y2hpbmcgaW1hZ2VzIGFyZSBmb3VuZCB0aGUgcGx1Z2luIHVzdWFsbHkgcmV0dXJucyBub3RoaW5nLiBTZXR0aW5nIGl0IHRvIDxjb2RlPjE8L2NvZGU+IGZvcmNlcyBpdCB0byB0cnkgYWdhaW4gd2l0aG91dCBhbnkgbWF0Y2hfdGV4dC9hdm9pZF90ZXh0LiBJbiB0aGUgZXZlbnQgdGhhdCBzdGlsbCBwcm9kdWNlcyBub3RoaW5nLCBzZXR0aW5nIGl0IHRvIDxjb2RlPjI8L2NvZGU+IHdpbGwgcHVsbCBpbWFnZXMgZnJvbSB0aGUgZW50aXJlIGRhdGFiYXNlLiBEZWZhdWx0OiAwIChpLmUuIG9mZikuPC9wPg0KPGg0Pk9wdGlvbnM8L2g0Pg0KPHVsPg0KPGxpPjxjb2RlPjA8L2NvZGU+PGJyPg0Kb2ZmICh0aGUgZGVmYXVsdCk6IG9ubHkgZGlzcGxheXMgaW1hZ2VzIHRoYXQgbWF0Y2ggeW91ciBjcml0ZXJpYS4gSWYgbm90aGluZyBtYXRjaGVzLCBkaXNwbGF5IG5vdGhpbmc8L2xpPg0KPGxpPjxjb2RlPjE8L2NvZGU+PGJyPg0KbGV2ZWwgMTogaW4gdGhlIGV2ZW50IHlvdXIgY3JpdGVyaWEgcmV0dXJuIG5vIGltYWdlcyBpbiB0aGUgcG9vbCwgdGhlIHBsdWdpbiB0cmllcyBhZ2FpbiB3aXRoIDxlbT5vbmx5PC9lbT4gdGhlIGNhdGVnb3JpZXMgeW91IGNob3NlLiBBbnkgbWF0Y2hfdGV4dC9hdm9pZF90ZXh0IGlzIGlnbm9yZWQ8L2xpPg0KPGxpPjxjb2RlPjI8L2NvZGU+PGJyPg0KbGV2ZWwgMjogaW4gdGhlIGV2ZW50IHlvdXIgY3JpdGVyaWEgcmV0dXJuIG5vIGltYWdlcyBpbiB0aGUgcG9vbCwgdGhlIHBsdWdpbiBmaXJzdCB0cmllcyBhZ2FpbiB3aXRoIDxlbT5vbmx5PC9lbT4NCnRoZSBjYXRlZ29yaWVzIHlvdSBjaG9zZSBhbmQgaWYgdGhhdCBmYWlscyB0byBwcm9kdWNlIGFueSBpbWFnZXMsIHRyaWVzDQphZ2FpbiB3aXRoIGFsbCBpbWFnZXMgaW4gdGhlIGRhdGFiYXNlLiBUaHVzLCBpdCBpZ25vcmVzDQptYXRjaF90ZXh0L2F2b2lkX3RleHQgYW5kIGNhdGVnb3J5PC9saT4NCjwvdWw+DQoNCjxoMyBpZD0idGh1bWIiPjxjb2RlPnRodW1iPC9jb2RlPjwvaDM+DQo8cD5UbyBkaXNwbGF5IHRodW1ibmFpbHMgaW5zdGVhZCBvZiBmdWxsc2l6ZSBpbWFnZXMuIERlZmF1bHQ6IG9taXR0ZWQgKGkuZS4gb2ZmKS48L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+MTwvY29kZT48YnI+DQpzd2l0Y2hlcyB0aHVtYm5haWxzIG9uLiBCeSBkZWZ1bHQgdGhlIG9wdGlvbiBpcyBtaXNzaW5nIChpLmUuIGRpc3BsYXkgZnVsbC1zaXplIGltYWdlIGJhbm5lcnMpPC9saT4NCjwvdWw+DQoNCjxoMyBpZD0iaW1nbGlua2luIj48Y29kZT5saW5rX2luPC9jb2RlPjwvaDM+DQo8cD5NYWtlcyB0aGUgYmFubmVyIGltYWdlIGNsaWNrYWJsZS4gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YNClRleHRwYXR0ZXJuIHdlIGFyZSBsaW1pdGVkIHRvIHB1dHRpbmcgYSBVUkwgbGluayBlaXRoZXIgaW4gdGhlIGFsdCBvcg0KdGhlIGNhcHRpb24uIEZvciBhY2Nlc3NpYmlsaXR5LCB0aGUgY2FwdGlvbiBpcyBwcm9iYWJseSBhIGJldHRlciBjaG9pY2UNCmJ1dCBpdCdzIHlvdXIgY2FsbC4gU3BlY2lmeSB3aGljaCBwYXJ0IG9mIHRoZSBpbWFnZSB0aGUgVVJMIGlzIHN0b3JlZA0Kd2l0aCB0aGlzIG9wdGlvbi4gSXQgY2FuIGJlIGVpdGhlciA8Y29kZT5hbHQ8L2NvZGU+IG9yIDxjb2RlPmNhcHRpb248L2NvZGU+IGluIHRoaXMgbW9kZSAoPGEgaHJlZj0iI2ZpbGVsaW5raW4iPmZpbGUgbW9kZTwvYT4gaXMgZGlmZmVyZW50KS4gRGVmYXVsdDogb21pdHRlZCAobm8gbGluaykuPC9wPg0KDQo8cD5JZiB0aGUgbGluayBpcyBhIGZ1bGwgVVJMIHN0YXJ0aW5nIHdpdGggaHR0cDovLyBpdCB3aWxsIGJlIHVzZWQNCnZlcmJhdGltIGZvciB0aGUgaW1hZ2UgbGluay4gSWYgaXQgc3RhcnRzIHdpdGggYSAnLycgaXQgd2lsbCBiZSBodW5nDQpvZmYgdGhlIHJvb3Qgc2l0ZV91cmwgZGlyZWN0bHkuIElmIGl0IHN0YXJ0cyB3aXRoIGFueXRoaW5nIGVsc2UgaXQgaXMNCmFzc3VtZWQgYSAncmVsYXRpdmUnIChvciAnbG9jYWwnKSBsaW5rIGFuZCBpbmhlcml0cyB0aGUgY3VycmVudCBzZWN0aW9uLjwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT5jYXB0aW9uPC9jb2RlPjxicj4NCnRlbGwgdGhlIHBsdWdpbiB0byBtYWtlIHRoZSBiYW5uZXIgY2xpY2thYmxlIGFuZCB0aGUgZGVzdGluYXRpb24gVVJMIGlzIHRvIGJlIGZvdW5kIGluIHRoZSBjYXB0aW9uIG9mIHRoZSBpbWFnZTwvbGk+DQo8bGk+PGNvZGU+YWx0PC9jb2RlPjxicj4NCnRlbGwgdGhlIHBsdWdpbiB0byBtYWtlIHRoZSBiYW5uZXIgY2xpY2thYmxlIGFuZCB0aGUgZGVzdGluYXRpb24gVVJMIGlzIHRvIGJlIGZvdW5kIGluIHRoZSBhbHQgdGV4dCBvZiB0aGUgaW1hZ2U8L2xpPg0KPC91bD4NCg0KPGgzIGlkPSJsaW5rcHJlZml4Ij48Y29kZT5saW5rX3ByZWZpeDwvY29kZT48L2gzPg0KPHA+U3RyaW5nIHRvIHByZXBlbmQgdG8gZXZlcnkgVVJMIHdoZW4gdXNpbmcgPGEgaHJlZj0iI2ltZ2xpbmtpbiI+bGlua19pbjwvYT4uDQpVc2VmdWwgaWYgeW91IHJlb3JnYW5pc2UgeW91ciBzaXRlOiB1c2UgdGhpcyBpbnN0ZWFkIG9mIHZpc2l0aW5nIGVhY2gNCmltYWdlIGFuZCBhbHRlcmluZyB0aGUgY2FwdGlvbi9hbHQgdGV4dC4gRGVmYXVsdDogb21pdHRlZCAobm8gdGV4dCkuPC9wPg0KDQo8cD5BZ2FpbiwgYXMgd2l0aCA8YSBocmVmPSIjaW1nbGlua2luIj5saW5rX2luPC9hPiBpZiA8Y29kZT5saW5rX3ByZWZpeDwvY29kZT4NCmJlZ2lucyB3aXRoIGh0dHA6Ly8gaXQgaXMgYXNzdW1lZCBhIGZ1bGwgVVJMIHRvIGFub3RoZXIgc2l0ZTsgaWYgaXQNCmJlZ2lucyB3aXRoICcvJyBpdCBpcyBhIHJvb3QgbGluazsgYW55dGhpbmcgZWxzZSBpcyBhc3N1bWVkIHJlbGF0aXZlIHRvDQp0aGUgY3VycmVudCBzZWN0aW9uLiBOb3RlIHRoYXQgaWYgeW91IHVzZSBhbiBodHRwOi8vIGZ1bGwgVVJMIGluIHRoZQ0KaW1hZ2UgaXRzZWxmLCBhbnkgPGNvZGU+bGlua19wcmVmaXg8L2NvZGU+IHdpbGwgYmUgaWdub3JlZC48L3A+DQoNCjxoMyBpZD0icmVmZXJlciI+PGNvZGU+cmVmZXJlciAoc2ljISk8L2NvZGU+PC9oMz4NCjxwPkVhY2ggaW1hZ2UgaGFzIDxjb2RlPj9iaWQ9aW1hZ2VJRDwvY29kZT4gYWRkZWQgdG8gaXQsIHNvIGNsaWNrcyBjYW4NCmJlIHRyYWNrZWQgaW4gdGhlIGxvZ3MgdG8gc2VlIHdoaWNoIGFyZSB0aGUgbW9zdCBlZmZlY3RpdmUgYWRzLiBDaGFuZ2UNCnRoZSAnYmlkJyB0ZXh0IGhlcmUgdG8gc29tZXRoaW5nIG9mIHlvdXIgY2hvb3NpbmcsIG9yIHVzZSA8Y29kZT5yZWZlcmVyPSIiPC9jb2RlPiB0byBkaXNhYmxlIHRyYWNraW5nLiBEZWZhdWx0OiBiaWQgKHdoZW4gPGEgaHJlZj0iI2ltZ2xpbmtpbiI+bGlua19pbjwvYT4gaXMgdXNlZCkuIE5vdGUgdGhhdCB0aGUgb3B0aW9uIGlzIG1pcy1zcGVsbGVkIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHRoZSBIVFRQIHNwZWMgd2FzIGFsbCB0aG9zZSB5ZWFycyBhZ28gOi0pPC9wPg0KDQo8aDMgaWQ9ImltZ2ltZ2NsYXNzIj48Y29kZT5pbWdjbGFzczwvY29kZT48L2gzPg0KPHA+Q1NTIGNsYXNzIGZvciBlYWNoIGJhbm5lciBpbWFnZSBkaXNwbGF5ZWQuIERlZmF1bHQ6IGVtcHR5IChpLmUuIG5vIGNsYXNzKS48L3A+DQoNCjxoMyBpZD0icmF3dXJsIj48Y29kZT5yYXdfdXJsPC9jb2RlPjwvaDM+DQo8cD5JbnN0ZWFkIG9mIGxpbmtpbmcgYW5kIG1ha2luZyBhIGZ1bGwgaW1hZ2UgdGFnLCB1c2luZyB0aGlzIG9wdGlvbg0KanVzdCBvdXRwdXRzIHRoZSBVUkwgZGlyZWN0bHkgdG8gdGhlIHBhZ2UuIFRoaXMgY2FuIGJlIHVzZWQgaW4gPGNvZGU+Jmx0O3N0eWxlJmd0OzwvY29kZT4gZGVjbGFyYXRpb25zIHRvLCBmb3IgZXhhbXBsZSwgc2V0IGEgcmFuZG9tIENTUyBvYmplY3QgYmFja2dyb3VuZC4gRGVmYXVsdDogb2ZmLjwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT4xPC9jb2RlPjxicj4NCnN3aXRjaGVzIHJhd191cmwgbW9kZSBvbi4gQnkgZGVmYXVsdCB0aGUgb3B0aW9uIGlzIG1pc3NpbmcgKGkuZS4gcmVuZGVycyBhIGZ1bGwgSFRNTCAmbHQ7aW1nJmd0OyB0YWcpPC9saT4NCjwvdWw+DQoNCjxoMyBpZD0idGFyZ2V0Ij48Y29kZT50YXJnZXQ8L2NvZGU+PC9oMz4NCjxwPlNwZWNpZmllcyB0aGUgYW5jaG9yIHRhcmdldCB3aW5kb3cgKGUuZy4gIl9ibGFuayIpIHdoaWNoIHdpbGwgY2F1c2UgYSBwb3B1cCBlZmZlY3Qgd2hlbiBhIGxpbmtlZCBiYW5uZXIgaXMgY2xpY2tlZC4gPGVtPk5COiBpZiB1c2luZyB0aGUgWEhUTUwgMS4xIERPQ1RZUEUgd2l0aCB0aGlzIG9wdGlvbiwgeW91ciBwYWdlIHdpbGwgbm90IHZhbGlkYXRlIHNpbmNlIHRhcmdldCBpcyBkZXByZWNhdGVkIGJ5IHRoZSBXM0M8L2VtPi4gRGVmYXVsdDogbm90IHNldCAobGlua3Mgb3BlbiBpbiBzYW1lIHdpbmRvdykuPC9wPg0KDQo8aDI+PGEgaWQ9ImltZ2V4YW1wbGVzIj48L2E+SW1hZ2UgbW9kZSBleGFtcGxlczwvaDI+DQo8cD5UbyBoaWdobGlnaHQgdGhlIGZlYXR1cmVzLCB3ZSBhcmUgZ29pbmcgdG8gdXNlIGFuIGV4YW1wbGUgb2YgYSB6b28NCndlYiBzaXRlLiBPbiB0aGlzIHNpdGUgeW91IGhhdmUgdGhyZWUgc2VjdGlvbnM6ICJhYm91dCIsICJhbmltYWxzIiBhbmQNCiJ0b3VycyIuIFlvdSBoYXZlIGltYWdlcyBvZiB2YXJpb3VzIGFuaW1hbHMgdW5kZXIgYW4gaW1hZ2UgY2F0ZWdvcnkNCmNhbGxlZCAiYW5pbWFscyIuIEJlbG93IHRoYXQgdGhleSBhcmUgc2VwYXJhdGVkIGludG8gIm1hbW1hbHMiLA0KInJlcHRpbGVzIiwgYW5kICJiaXJkcyIuIFlvdXIgYWx0IHRleHQgaG9sZHMgc3VpdGFibGUgYWx0ZXJuYXRlDQpkZXNjcmlwdGlvbnMgb2YgdGhlIGFuaW1hbHMgYW5kIHRoZSBjYXB0aW9uIHRleHQgaXMgYSB1cmwgdG8gYW4gYXJ0aWNsZQ0KYWJvdXQgZWFjaCBhbmltYWwuIFlvdSBhbHNvIGhhdmUgb3RoZXIgaW1hZ2UgY2F0ZWdvcmllcyBmb3IgdGhlIHJlc3Qgb2YNCnlvdXIgc2l0ZS48L3A+DQoNCjxoMyBpZD0iZWcxIj48Y29kZT5FeGFtcGxlIDE8L2NvZGU+PC9oMz4NCjxwcmU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYW5pbWFscyIgbGltaXQ9IjQiDQogICAgIHN1YmNhdHM9IjEiIC8mZ3Q7PC9wcmU+DQo8cD5UaGF0IHdvdWxkIHB1bGwgb3V0IGZvdXIgcGljdHVyZXMgb2YgYW55IGFuaW1hbCB0byBzaG93IG9uIHlvdXIgZnJvbnQgcGFnZTsgbWF5YmUgYXJyYW5nZWQgaW50byBhIG5lYXQgc3F1YXJlITwvcD4NCg0KPGgzIGlkPSJlZzIiPjxjb2RlPkV4YW1wbGUgMjwvY29kZT48L2gzPg0KPHByZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJtYW1tYWxzLCByZXB0aWxlcyINCiAgICAgbGlua19pbj0iY2FwdGlvbiIgLyZndDs8L3ByZT4NCjxwPldvdWxkIGRpc3BsYXkgYSByYW5kb20gcGljdHVyZSBmcm9tIGVpdGhlciB0aGUgbWFtbWFscyBvciByZXB0aWxlcw0KY2F0ZWdvcmllcy4gVGhlIGltYWdlIHdvdWxkIGJlIGNsaWNrYWJsZSBhbmQgdGhlIGxpbmsgd291bGQgdGFrZSB5b3UgdG8NCnRoZSBVUkwgZ2l2ZW4gaW4gdGhlIGNhcHRpb24gZmllbGQgb2YgdGhhdCBpbWFnZS4gSWYgdGhlIGNhcHRpb24gZmllbGQNCmhhcHBlbmVkIHRvIGJlIGVtcHR5LCB0aGUgbGluayB3b3VsZCBiZSBzdXByZXNzZWQuPC9wPg0KDQo8aDMgaWQ9ImVnMyI+PGNvZGU+RXhhbXBsZSAzPC9jb2RlPjwvaDM+DQo8cHJlPiZsdDtzdHlsZSB0eXBlPSJ0ZXh0L2NzcyImZ3Q7DQojbXlEaXYgew0KICBiYWNrZ3JvdW5kOiB1cmwoJmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYW5pbWFscyINCiAgICAgc3ViY2F0cz0iMSIgcmF3X3VybD0iMSIgLyZndDspIG5vLXJlcGVhdCB0b3A7DQp9DQombHQ7L3N0eWxlJmd0Ow0KPC9wcmU+DQo8cD5UaGlzIGtpbmQgb2Ygc3ludGF4IGNhbiBiZSB1c2VkIGlmIHlvdSBvbmx5IHdhbnRlZCB0aGUgYmFja2dyb3VuZCBvZiBhIHNwZWNpZmljIGRpdiB0YWcgdG8gaG9sZCB5b3VyIHJhbmRvbSBpbWFnZS48L3A+DQoNCjxoMyBpZD0iZWc0Ij48Y29kZT5FeGFtcGxlIDQ8L2NvZGU+PC9oMz4NCjxwPklmIHlvdSBhcnJhbmdlZCB5b3VyIHNpdGUgc28gdGhhdCB5b3UgaGFkIGFydGljbGUgY2F0ZWdvcmllcyBzdWNoIGFzDQoibWFtbWFscyIgYW5kICJyZXB0aWxlcyIgKG1pcnJvcmluZyB5b3VyIGltYWdlIGNhdGVnb3JpZXMpLCB5b3UgY291bGQNCmRvIHRoaXM6PC9wPg0KPHByZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSI/YyIgbGlua19pbj0iY2FwdGlvbiIgLyZndDs8L3ByZT4NCjxwPlRoZSAnPycgdGVsbHMgdGhlIHBsdWdpbiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoZSAoaW1hZ2UpIGNhdGVnb3J5IGlzDQpnb2luZyB0byBiZSB3aGVuIHlvdSBjb2RlIHRoZSBmb3JtLCBidXQgeW91IHdhbnQgaXQgdG8gYmUgcmVhZCBmcm9tIHRoZQ0KY3VycmVudCBhcnRpY2xlIHRoYXQgYSB2aXNpdG9yIGlzIHZpZXdpbmcuIFNpbmNlIG91ciBhcnRpY2xlIGNhdGVnb3JpZXMNCm1pbWljIG91ciBpbWFnZSBjYXRlZ29yaWVzIGluIHRoaXMgY2FzZSwgJz9jJyBtZWFucyAicmVhZCB0aGUgYXJ0aWNsZQ0KY2F0ZWdvcnkgYW5kIHVzZSB0aGF0IGFzIHRoZSBpbWFnZSBjYXRlZ29yeSIuPC9wPg0KPHA+U28gaWYgeW91ciB2aXNpdG9yIHdhcyB2aWV3aW5nIGEgcGFnZSBhYm91dCBhIHJlcHRpbGUsIHRoZSByYW5kb20NCmltYWdlIGRpc3BsYXllZCBvbiB0aGUgcGFnZSB3b3VsZCBiZSBvZiBhbm90aGVyIHJlcHRpbGUgKHBvc3NpYmx5IHRoZQ0Kc2FtZSBvbmUpLiBUaGVyZSBhcmUgPGEgaHJlZj0iI2NhdGVnb3J5Ij5tYW55IG90aGVyIG9wdGlvbnM8L2E+LjwvcD4NCg0KPGgzIGlkPSJlZzUiPjxjb2RlPkV4YW1wbGUgNTwvY29kZT48L2gzPg0KPHByZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJhbmltYWxzLCAhYyIgc3ViY2F0cz0iMSINCiAgICAgbGlua19pbj0iY2FwdGlvbiIgLyZndDs8L3ByZT4NCjxwPlNsaWdodGx5IG1vcmUgdXNlZnVsLCB0aGlzIG9uZS4gSXQgdGVsbHMgdGhlIHBsdWdpbiB0byBzZWxlY3QgYW55IGFuaW1hbCBpbWFnZSBidXQgPGVtPm5vdDwvZW0+IG9uZSBmcm9tIHRoZSBjdXJyZW50IGNhdGVnb3J5IHRoYXQgaXMgYmVpbmcgdmlld2VkLiBTbyBpdCdsbCBlZmZlY3RpdmVseSAnYWR2ZXJ0aXNlJyBvdGhlciBjYXRlZ29yaWVzIGZvciB5b3UuPC9wPg0KDQo8aDMgaWQ9ImVnNiI+PGNvZGU+RXhhbXBsZSA2PC9jb2RlPjwvaDM+DQo8cHJlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9InJlcHRpbGVzLCA/Y3VzdG9tMSINCiAgICAgbGlua19pbj0iY2FwdGlvbiIgc3ViY2F0cz0iMSIgLyZndDs8L3ByZT4NCjxwPlRoaXMgZXhhbXBsZSBnaXZlcyB5b3UgYSByYW5kb20gaW1hZ2UgY2hvc2VuIGZyb20gdGhlICdyZXB0aWxlcycNCmltYWdlIGNhdGVnb3J5IGFuZCBhbHNvIGFueSBjYXRlZ29yaWVzIGxpc3RlZCBpbiBjdXN0b20xIG9mIHRoZQ0KY3VycmVudGx5IHZpZXdlZCBhcnRpY2xlLiBJZiB5b3UgcHV0ICJtYW1tYWxzLCBiaXJkcywgcGVuZ3VpbnMiIGluDQpjdXN0b21fMSB3aGVuIHlvdSB3cm90ZSB0aGUgYXJ0aWNsZSB5b3Ugd291bGQgZ2V0IGFuIGltYWdlIGNob3NlbiBmcm9tDQphbGwgZm91ciBjYXRlZ29yaWVzIChhbmQgdGhlaXIgc3ViLWNhdGVnb3JpZXMgaW4gdGhpcyBjYXNlKS4gVGhpcyBzb3J0DQpvZiBpZGVhIGNvdWxkIGJlIHVzZWQgd2l0aCA8Y29kZT5jYXRlZ29yeT0iP2tleXdvcmRzIjwvY29kZT4gdG8gZ2V0IGEgbGlzdCBvZiAicmVsYXRlZCBpbWFnZSBjYXRlZ29yaWVzIi4uLjwvcD4NCjxwPk5vdGUgeW91IGNhbiBzaW1wbHkgbmVnYXRlIHRoZSBjaG9pY2UgbGlrZSB0aGlzOjwvcD4NCjxwcmU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYW5pbWFscywgIWN1c3RvbTEiDQogICAgIGxpbmtfaW49ImNhcHRpb24iIHN1YmNhdHM9IjEiIC8mZ3Q7PC9wcmU+DQo8cD5TbyB0aGF0IHdvdWxkIGNob29zZSBhbiBpbWFnZSBmcm9tIGFueSBvZiB0aGUgYW5pbWFscyBleGNlcHQgb25lcyB0aGF0IHdlcmUgaW4gYW55IGNhdGVnb3JpZXMgbGlzdGVkIGluIGN1c3RvbTEuPC9wPg0KDQo8aDMgaWQ9ImVnNyI+PGNvZGU+RXhhbXBsZSA3PC9jb2RlPjwvaDM+DQo8cD5DYXRlZ29yaWVzIG9uIHRoZWlyIG93biBvbmx5IHRlbGwgaGFsZiB0aGUgc3RvcnkuIFRoZXJlIGFyZSB0aW1lcw0KeW91IG1pZ2h0IHdhbnQgdG8gaW5jbHVkZSBvciBleGNsdWRlIHNwZWNpZmljIHBpZWNlcyBvZiB0ZXh0IGZvdW5kIGluDQp5b3VyIGltYWdlcy4gVGhlIHRleHQgY291bGQgYmUgaW4gdGhlIGZpbGVuYW1lLCB0aGUgaWQsIHRoZSBjYXB0aW9uLA0KdGhlIGFsdCB0ZXh0LCBvciB0aGUgY2F0ZWdvcnkgbmFtZS48L3A+DQo8cD5JbWFnaW5lIHlvdXIgdmlzaXRvciBjbGlja2VkIGEgcGljdHVyZSBvZiBhIGNyb2NvZGlsZSBhbmQgdGhleSBhcmUNCnZpZXdpbmcgdGhlIGdyaXNseSBkZXRhaWxzIG9uIGFuIGFydGljbGUgcGFnZS4gWW91IG1pZ2h0IHdhbnQgdG8gcHV0DQoiSWYgeW91IGxpa2VkIHRoaXMsIGZpbmQgb3V0IGFib3V0IHRoZXNlIGFuaW1hbHMgdG9vOiIgYW5kIHNob3cgYSBmZXcNCnJhbmRvbSBpbWFnZXMgdGhhdCBhbGxvdyB0aGVtIHRvIHNlZSBzdHVmZiBhYm91dCBvdGhlciBhbmltYWxzLg0KT2J2aW91c2x5LCB3ZSBkb24ndCB3YW50IGEgcGljdHVyZSBvZiBhIGNyb2NvZGlsZSB0byBzaG93IHVwLiBBbmQgbWF5YmUNCndlIGRvbid0IHdhbnQgdG8gc2hvdyBhbGxpZ2F0b3JzIGVpdGhlciBiZWNhdXNlIHRoZXkncmUgcXVpdGUgc2ltaWxhci4NClNvIHdlIGNhbiBkbyB0aGlzOjwvcD4NCjxwcmU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYW5pbWFscyIgc3ViY2F0cz0iMSINCiAgICAgbGlua19pbj0iY2FwdGlvbiIgYXZvaWRfdGV4dD0iY3JvYywgY3JvY29kaWxlLCBhbGxpZ2F0b3IiIC8mZ3Q7PC9wcmU+DQo8cD5UaGF0IHdvdWxkIGNob29zZSBhbnkgcGljdHVyZSBmcm9tIHRoZSBhbmltYWxzIGNhdGVnb3J5IChhbmQgYWxsIGl0cyBzdWItY2F0ZWdvcmllcykgYXMgbG9uZyBhcyB0aGUgbmFtZSBvZiB0aGUgaW1hZ2UgPGk+ZGlkbid0PC9pPiBjb250YWluICdjcm9jJyBvciAnY3JvY29kaWxlJyBvciAnYWxsaWdhdG9yJy48L3A+DQoNCjxoMyBpZD0iZWc4Ij48Y29kZT5FeGFtcGxlIDg8L2NvZGU+PC9oMz4NCjxwPklmIHlvdXIgZmlsZW5hbWVzIHdlcmUgYSBsaXR0bGUgdW5zdHJ1Y3R1cmVkLCBtYXliZSB5b3UnZCB3YW50IHRvIGNoZWNrIHRoZSBhbHQgdGV4dCBhbmQgY2FwdGlvbiB0ZXh0IGZvciBhIG1hdGNoIGFzIHdlbGwuIFVzZSA8YSBocmVmPSIjaW1nY29tcGFyZXRvIj5jb21wYXJlX3RvPC9hPiBmb3IgdGhpczo8L3A+DQo8cHJlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImFuaW1hbHMiIHN1YmNhdHM9IjEiDQogICAgIGxpbmtfaW49ImNhcHRpb24iIGF2b2lkX3RleHQ9ImNyb2MsIGNyb2NvZGlsZSwgYWxsaWdhdG9yIg0KICAgICBjb21wYXJlX3RvPSJuYW1lLCBhbHQsIGNhcHRpb24iIC8mZ3Q7PC9wcmU+DQoNCjxoMyBpZD0iZWc5Ij48Y29kZT5FeGFtcGxlIDk8L2NvZGU+PC9oMz4NCjxwcmU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYW5pbWFscyIgc3ViY2F0cz0iMSINCiAgICAgYXZvaWRfdGV4dD0iP2MiIGNvbXBhcmVfdG89Im5hbWUsIGFsdCwgY2FwdGlvbiwgY2F0ZWdvcnkiIC8mZ3Q7PC9wcmU+DQo8cD5PbiBhbiBhcnRpY2xlIHBhZ2UsIGhhcmQtY29kaW5nIGxpc3RzIG9mIHRoaW5ncyB0byBpbmNsdWRlL2V4Y2x1ZGUNCmlzIGFjY2VwdGFibGUuIEJ1dCBpZiB5b3UncmUgdXNpbmcgYSBmb3JtIHlvdSBkb24ndCB3YW50IHRvIGRvIHRoYXQsIHNvDQpqdXN0IGxpa2UgdGhlIDxhIGhyZWY9IiNjYXRlZ29yeSI+Y2F0ZWdvcnk8L2E+IG9wdGlvbiB5b3UgY2FuIHVzZSAnPycNCnBsYWNlaG9sZGVycyB0aGF0IHdpbGwgcmVhZCBzdHVmZiBmcm9tIHRoZSBjdXJyZW50IGFydGljbGUuIFRoaXMNCmV4YW1wbGUgd2lsbCBwaWNrIGFueSByYW5kb20gYW5pbWFsIGV4Y2VwdCBvbmVzIGZyb20gdGhlIGN1cnJlbnQNCmFydGljbGUgY2F0ZWdvcnkuIE5vdGUgdGhhdCwgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgaXQgY2hlY2tzIGluIGZvdXINCmxvY2F0aW9ucyB0byBoZWxwIGVuc3VyZSBpdCB3b24ndCBmaW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQNCmNhdGVnb3J5LjwvcD4NCg0KPGgyIGlkPSJmaWxlbW9kZSI+RmlsZSBtb2RlPC9oMj4NCjxwPlNpbWlsYXIgaW4gbWFueSByZXNwZWN0cyB0byB0aGUgPGEgaHJlZj0iI2ltZ21vZGUiPmltYWdlIG1vZGU8L2E+DQp0aGUgcGx1Z2luIGNhbiBjaG9vc2UgcmFuZG9tIGZpbGVzIGZyb20gdGhvc2UgdXBsb2FkZWQgdG8gdGhlIEZpbGVzIHRhYg0KaW4gdGhlIFRYUCBpbnRlcmZhY2UuIFRoaXMgZ2l2ZXMgeW91IHRoZSBvcHRpb24gb2YgdXNpbmcgYSByYW5kb20NCmJhbm5lciBhcyBhIHBpZWNlIG9mIEZsYXNoIG9yIGEgdmlkZW8gZmlsZSBpZiB5b3Ugd2FudC4gSW4gdGhlb3J5LCBpZg0KdGhlcmUncyBhIGJyb3dzZXIgcGx1Z2luIGF2YWlsYWJsZSBmb3IgaXQsIHlvdSBjYW4gcGxheSBpdCAoYnV0IG5vdGUNCnRoZSBjYXZlYXRzIGxhdGVyOiBzdXBwb3J0IGZvciBldmVyeXRoaW5nIGlzbid0IGJ1aWx0IGluIG5hdGl2ZWx5KS48L3A+DQo8cD5BcyB3aXRoIHRoZSBpbWFnZSBtb2RlLCBtb3N0IG9mIHRoZSBvcHRpb25zIHdvcmsgdG8gd2hpdHRsZSBkb3duIHRoZQ0KY2hvaWNlcyB0byBhIHBvb2wgb2YgZmlsZXMgdGhhdCBtYXRjaCB5b3VyIHNwZWNpZmljIGNyaXRlcmlhLiBUaGUNCnBsdWdpbiB0aGVuIHJhbmRvbWx5IGNob29zZXMgb25lIChvciBtb3JlIGlmIHlvdSBjaG9vc2UpIGFuZCByZW5kZXJzIGl0DQphcyBiZXN0IGl0IGNhbi48L3A+DQo8cD5UaGVyZSBpcyBvbmUgY3J1Y2lhbCBkaWZmZXJlbmNlIGluIHRoaXMgbW9kZTogc2luY2Ugd2UgYXJlIGxpbWl0ZWQNCnRvIG9uZSBmaWVsZCBvZiBjdXN0b21pc2FibGUgY29udGVudCB3aXRoIGZpbGVzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YNCnBvdGVudGlhbCBpZGlvc3luY3JhY2llcyBpbiBlbWJlZGRpbmcgcGxheWFibGUgY29udGVudCwgb25seSB0aGUgY29yZQ0KZnVuY3Rpb25hbGl0eSBpcyBzcGVjaWZpZWQgYXMgcGx1Z2luIG9wdGlvbnMuIEN1c3RvbWlzYXRpb24gYWJvdmUgYW5kDQpiZXlvbmQgdGhhdCBnb2VzIGluIHRoZSA8Y29kZT5kZXNjcmlwdGlvbjwvY29kZT4gZmllbGQgYXMgYSBjYXRjaC1hbGwgZm9yIG1hbnkgZXh0cmEgb3B0aW9ucy48L3A+DQo8cD5VbmZvcnR1bmF0ZWx5LCB1c2luZyBvbmUgZmllbGQgZm9yIG1hbnkgcHVycG9zZXMgaW1wbGllcyBzdGlja2luZyB0bw0Kc29tZSBjb252ZW50aW9ucy4gVG8gdGhpcyBlbmQsIHdoZW4gc3BlY2lmeWluZyBvcHRpb25zIGluIHRoZQ0KZGVzY3JpcHRpb24gZmllbGQsIHVzZSB0aGUgZm9sbG93aW5nIGZvcm1hdDo8L3A+DQo8cHJlPm9wdGlvbk5hbWUxPW9wdGlvblZhbHVlMTsNCm9wdGlvbk5hbWUyPW9wdGlvblZhbHVlMjsNCi4uLg0KPC9wcmU+DQo8cD5ObyBxdW90ZXMgYXJlIG5lY2Vzc2FyeSBhcm91bmQgdGhlIG9wdGlvbiB2YWx1ZXMgYXMgdGhlIHBsdWdpbiB3aWxsDQpwdXQgdGhlbSBpbiBmb3IgeW91LCB0aG91Z2ggaXQgZG9lcyBubyBoYXJtIHRvIGluY2x1ZGUgdGhlbS4gQW5kDQphbHRob3VnaCBzcGFjZXMgYW5kIG5ld2xpbmVzIGFyZSBhbHNvIG9wdGlvbmFsLCBpdCdsbCBoZWxwIGtlZXAgeW91cg0Kc2FuaXR5IGlmIHlvdSBkbyB0aGluZ3MgdGhpcyB3YXkhIEp1c3Qgbm90ZSB0aGF0IGV2ZXJ5IG9wdGlvbj12YWx1ZQ0KcGFpciBlbmRzIHdpdGggYSBzZW1pY29sb24gJzsnPC9wPg0KPHA+WyBJdCBpcyBwcm9iYWJseSBiZXN0IHRvIHNldCBhc2lkZSBhIHNwZWNpZmljIGNhdGVnb3J5L3N1Yi1jYXRlZ29yeQ0KZmlsZSB0cmVlIGZvciB5b3VyIGJhbm5lcnMgc2luY2Ugd2UgYXJlIGdvaW5nIHRvIGJlIGhpamFja2luZyB0aGUNCmRlc2NyaXB0aW9uIGZpZWxkIGZvciBwdXJwb3NlcyBvdGhlciB0aGFuIGl0IHdhcyBpbnRlbmRlZC4gXTwvcD4NCg0KPGgzIGlkPSJmaWxld29ya3MiPkhvdyBpdCB3b3JrczogTUlNRSB0eXBlczwvaDM+DQo8cD5NSU1FIHR5cGVzIHJ1bGU7IGV4Y2VwdCB0aGUgdG9vbHMgdG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgd2hpY2ggZmlsZQ0KaXMgb2Ygd2hhdCB0eXBlIGFyZSBvZnRlbiBleHRlbnNpb25zIGFuZCBjYW5ub3QgYmUgZ3VhcmFudGVlZCB0byBiZQ0KaW5zdGFsbGVkIG9uIGV2ZXJ5IHNlcnZlci4gU28gd2UgaGF2ZSB0byB1c2UgdGhlIG5leHQgYmVzdCB0aGluZzogdGhlDQpmaWxlIGV4dGVuc2lvbi4gWWVzIGl0IGNhbiBiZSBtaXNsZWFkaW5nLCBidXQgd2UncmUgc3R1Y2sgd2l0aCBpdC48L3A+DQo8cD5GaXJzdCB0aGluZ3MgZmlyc3Q6IG9uY2UgYSBmaWxlIGhhcyBiZWVuIHNlbGVjdGVkIGJhc2VkIG9uIHlvdXINCm9wdGlvbnMsIHRoZSBwbHVnaW4gbG9va3MgYXQgaXRzIGZpbGUgZXh0ZW5zaW9uLiBCYXNlZCBvbiB0aGF0IGl0IHVzZXMNCmEgbG9va3VwIHRhYmxlIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBNSU1FIHR5cGUgYW5kIHRlbXBsYXRlLiBUaGUNCk1JTUUgdHlwZSBpcyBvdmVycmlkYWJsZSBvbiBhIHBlci1maWxlIGJhc2lzIGJ1dCB0aGUgdGVtcGxhdGVzIGFyZSBhbGwNCmhhcmQtY29kZWQgZm9yIG5vdy4gSSdtIGhvcGluZyB0byBvbmUgZGF5IGFsbG93IHRoZW0gdG8gYmUNCmV4dGVuZGVkL21vZGlmaWVkIHZpYSBwbHVnaW4gb3B0aW9ucywgYnV0IGl0J3MgYSB3YXkgb2ZmIHlldC48L3A+DQo8cD5Gb3Igbm93LCB0aGUgbW9zdCBjb21tb24gdGhpbmdzIGxpa2UgRmxhc2ggZmlsZXMsIEFWSS9NT1YvTVBHL1dNVg0KbW92aWVzIGFuZCBldmVuIHNvbWUgYXVkaW8gZm9ybWF0cyBsaWtlIFdBVi9PR0cvT1BUSU1GUk9HL0ZMQUMgYXJlDQpzdXBwb3J0ZWQgKGF1ZGlvIGJhbm5lcnMgYW55b25lPyEpIEFuZCB0aGUgZ29vZCBuZXdzIGlzIGl0IHNob3VsZCBiZQ0KZmFpcmx5IGF1dG9tYXRpYyAoaWYgaXQgaXNuJ3QsIHBsZWFzZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPmdldCBpbiB0b3VjaDwvYT4gYW5kIHN1Z2dlc3QgYmV0dGVyIHRlbXBsYXRlcyBmb3IgdGhlIG5leHQgcmV2aXNpb24pLjwvcD4NCjxwPlRoZSBrZXkgdG8gaXQgaXMgYWxsb3dpbmcgb3ZlcnJpZGFibGUgb3B0aW9ucy4gVGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzNzY2hvb2xzLmNvbS90YWdzL3RhZ19vYmplY3QuYXNwIj5IVE1MIG9iamVjdCB0YWc8L2E+DQpjb250YWlucyBhIGhvc3Qgb2YgYXR0cmlidXRlcywgYWxsIG9mIHdoaWNoIHlvdSBjYW4gb3ZlcnJpZGUgYnkNCnNwZWNpZnlpbmcgdGhlbSBhcyBvcHRpb249dmFsdWUgcGFpcnMgaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkIG9mIHRoYXQNCnBhcnRpY3VsYXIgZmlsZS4gU2VlIDxhIGhyZWY9IiNmZWcxIj5leGFtcGxlIDEgPC9hPiBhbmQgPGEgaHJlZj0iI2ZlZzIiPjI8L2E+IGZvciBtb3JlLjwvcD4NCjxwPkFueSBhdHRyaWJ1dGVzIHRoYXQgbWF0Y2ggdGhlIG5hbWVzIGluIHRoZSBIVE1MIHNwZWMgY2FuIGJlIHVzZWQuDQpUaGVzZSBhcmUgdGhlIGNvcmUgb25lcyB0aGF0IHRoZSBwbHVnaW4gd2lsbCBzZWxlY3QgZm9yIHlvdSBpZiB5b3UgZG8NCm5vdCBzcGVjaWZ5IHlvdXIgb3duIGluIHRoZSA8Y29kZT5kZXNjcmlwdGlvbjwvY29kZT4gZmllbGQgb3IgdGhlIDxhIGhyZWY9IiNnbG9iYWxwYXJhbXMiPmdsb2JhbF9wYXJhbXM8L2E+OjwvcD4NCjx1bD4NCjxsaT48Y29kZT5kYXRhPC9jb2RlPiA9IHRoZSBVUkwgdG8gdGhlIGZpbGUgaXRzZWxmLiBUYWtlcyB0aGUgZmlsZSdzIFVSTCBmcm9tIHRoZSBUWFAgZGF0YWJhc2UgYnkgZGVmYXVsdCwgb3IgaXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgeW91PC9saT4NCjxsaT48Y29kZT50eXBlPC9jb2RlPiA9IHRoZSBNSU1FIHR5cGUgb2YgdGhlIGZpbGUuIEFnYWluLCB1c2VzIHRoZQ0KbG9va3VwIHRhYmxlLiBJZiBpdCBjaG9vc2VzIHdyb25nbHkgb3IgeW91IHdhbnQgYSBmYW5jaWZ1bCB0eXBlIG5vdA0KaW5jbHVkZWQsIG92ZXJyaWRlIGl0PC9saT4NCjxsaT48Y29kZT53aWR0aDwvY29kZT4gPSB0aGUgaG9yaXpvbnRhbCBzY3JlZW4gcmVhbCBlc3RhdGUgdGhhdCB0aGUNCm9iamVjdCB3aWxsIG9jY3VweS4gQnkgZGVmYXVsdCBpdCB0YWtlcyB0aGUgdmFsdWVzIG9uIGEgcGVyLWxhbmd1YWdlDQpiYXNpcyAoaWYgTUxQIGlzIGluc3RhbGxlZCkgYmVjYXVzZSBjb250ZW50IG9mdGVuIHZhcmllcyBmcm9tIGNvdW50cnkNCnRvIGNvdW50cnkuIFdpdGhvdXQgTUxQIGl0J3MgMzAwcHggc28geW91IHByb2JhYmx5IHNob3VsZCBvdmVycmlkZSB0aGlzPC9saT4NCjxsaT48Y29kZT5oZWlnaHQ8L2NvZGU+ID0gdGhlIHZlcnRpY2FsIHNjcmVlbiByZWFsIGVzdGF0ZSB0aGUgb2JqZWN0IHRha2VzIHVwLiBNTFAtYXdhcmUsIGFzIGFib3ZlPC9saT4NCjxsaT48Y29kZT5pZDwvY29kZT4gPSB0aGUgdW5pcXVlIElEIGZvciB0aGUgb2JqZWN0LiBJZiBub3Qgb3ZlcnJpZGVuLCB0aGUgZGVmYXVsdCBpcyAiaWQiIHBsdXMgYSByYW5kb20gbnVtYmVyLjwvbGk+DQo8L3VsPg0KDQo8aDQgaWQ9InN3Zm9iamVjdCI+T3ZlcnJpZGluZyBNSU1FIHR5cGVzIC8gc3dmb2JqZWN0PC9oND4NCjxwPklmIHlvdSB3aXNoIHRvIG92ZXJyaWRlIHRoZSBhdXRvLWRldGVjdGVkIG1pbWUgdHlwZSBmb3IgYW55IHJlYXNvbiwgc3BlY2lmeSA8Y29kZT5taW1lX3R5cGU9VXNlVGhpc0ZpbGVFeHRlbnNpb25JbnN0ZWFkPC9jb2RlPiAoZS5nLiA8Y29kZT5taW1lX3R5cGU9ImF2aSI8L2NvZGU+KS4gVGhhdCB3aWxsIHRoZW4gdXNlIHRoZSB0ZW1wbGF0ZSBmb3IgYW4gYXZpIGZpbGUgcmVnYXJkbGVzcyBvZiB0aGUgZmlsZSdzIHJlYWwgZXh0ZW5zaW9uLjwvcD4NCjxwPlNvbWUgcGVvcGxlIHByZWZlciB0byBlbWJlZCBtb3ZpZXMgdXNpbmcgdGhlIDNyZCBwYXJ0eSBsaWJyYXJ5IHN3Zm9iamVjdC4gUmFuZG9tX2Jhbm5lciBzdXBwb3J0cyB0aGlzIGxpYnJhcnkgYnV0IGl0IDxlbT5kb2VzIG5vdDwvZW0+IGxvYWQgdGhlIGxpYnJhcnkgZm9yIHlvdTogaW5jb3Jwb3JhdGUgaXQgb250byB5b3VyIHBhZ2UgcHJpb3IgdG8gY2FsbGluZyBzbWRfcmFuZG9tX2Jhbm5lci48L3A+DQo8cD5PdmVycmlkaW5nIHRoZSBNSU1FIHR5cGUgaXMgY3VycmVudGx5IGhvdyA8YSBocmVmPSIjc3dmb2JqZWN0Ij5zd2ZvYmplY3Q8L2E+DQptb2RlIHdvcmtzOiBpdCdzIGEgaGFjayBiZWNhdXNlIHRoZSBwbHVnaW4gY2Fubm90IGRpZmZlcmVudGlhdGUgYmV0d2Vlbg0KYSAuc3dmIHlvdSB3YW50IHRvIGVtYmVkIHdpdGggdGhlIG9iamVjdCB0YWcgYW5kIGEgLnN3ZiB5b3Ugd2FudCB0bw0KZW1iZWQgdXNpbmcgc3dmb2JqZWN0LiBJbiB0aGlzIGNhc2UsIHNwZWNpZnkgdGhlIHNwZWNpYWwgb3B0aW9uIDxjb2RlPm1pbWVfdHlwZT0ic3dvIjwvY29kZT4sIGVpdGhlciBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQgb2YgdGhlIHJlbGV2YW50IGZpbGUgb3IgYXMgYSA8YSBocmVmPSIjZ2xvYmFscGFyYW1zIj5nbG9iYWxfcGFyYW08L2E+LjwvcD4NCjxwPldoZW4gdXNpbmcgc3dmb2JqZWN0IHRoZXJlIGFyZSBhIGZldyBtb3JlIG9wdGlvbnMgeW91IGNhbiBzcGVjaWZ5OjwvcD4NCjx1bD4NCjxsaT48Y29kZT5wbGF5ZXJ2ZXJzaW9uPC9jb2RlPiA9IHRoZSBtaW5pbXVtIHZlcnNpb24gb2YgZmxhc2ggcGxheWVyIHlvdSByZXF1aXJlIHVzZXJzIHRvIGhhdmUgYmVmb3JlIHRoZXkgY2FuIHNlZSB0aGUgY29udGVudC4gRGVmYXVsdCBpcyA4PC9saT4NCjxsaT48Y29kZT5iYWNrY29sb3I8L2NvZGU+ID0gYSBoZXggc3RyaW5nIGxpa2UgPGNvZGU+IzAwNzQxMjwvY29kZT4gdG8gc2V0IHRoZSBjb2xvciBvZiB0aGUgYmFja2dyb3VuZCBvZiB0aGUgc3dmb2JqZWN0LiBOb3RlIGl0J3MgY2FsbGVkIDxjb2RlPmJhY2tjb2xvcjwvY29kZT4gdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUgb2JqZWN0IHRhZydzIDxjb2RlPmJnY29sb3I8L2NvZGU+LiBEZWZhdWx0IGlzIHdoaXRlPC9saT4NCjxsaT48Y29kZT5lbGVtZW50aWQ8L2NvZGU+ID0gdGhlIHVuaXF1ZSBpZGVudGlmaWVyIHdoaWNoIHRoZSBtb3ZpZSByZXBsYWNlcy4gVGhpcyBpcyBub3JtYWxseSBhbiBlbXB0eSBkaXYgd2l0aCBhbiBpZCBvZiA8Y29kZT5mbGFzaGNvbnRlbnQ8L2NvZGU+IGJ1dCBzaW5jZSB0aGlzIHBsdWdpbiBjYW4gb3V0cHV0IG1vcmUgdGhhbiBvbmUgYmFubmVyLCB0aGUgZGVmYXVsdCBhZGRzIGEgcmFuZG9tIG51bWJlciBvbiB0aGUgZW5kIG9mIGl0PC9saT4NCjxsaT48Y29kZT51aWQ8L2NvZGU+ID0gdGhlIGphdmFzY3JpcHQgaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgdG8NCmlkZW50aWZ5IHRoZSBTV0ZPYmplY3QgaW5zdGFuY2UuIEluIGFsbCB0aGUgZXhhbXBsZXMgb24gdGhlIHN3Zm9iamVjdA0Kd2ViIHNpdGUgdGhpcyBpcyA8Y29kZT5zbzwvY29kZT4gYnV0IGFnYWluLCBzaW5jZSB0aGUgcGx1Z2luIGNhbiBvdXRwdXQgbW9yZSB0aGFuIG9uZSBiYW5uZXIsIHRoZSBkZWZhdWx0IGFkZHMgYSByYW5kb20gbnVtYmVyIG9uIHRoZSBlbmQgb2YgaXQ8L2xpPg0KPC91bD4NCg0KPHA+SW4gYm90aCBzdGFuZGFyZCBvYmplY3QgYW5kIHN3Zm9iamVjdCBtb2RlcywgdGhlIG90aGVyIG9wdGlvbnMgYXJlDQp0b28gbnVtZXJvdXMgdG8gbGlzdCwgYnV0IFczU2Nob29scywgQWRvYmUgb3IgR29vZ2xlIHdpbGwgaGVscCB5b3UgZmluZA0KdGhlbSBpZiB5b3UgbmVlZCB0aGVtLjwvcD4NCjxwPkFueSA8Y29kZT5vcHRpb249dmFsdWU8L2NvZGU+IHBhaXIgc3BlY2lmaWVkIGluIHRoZSA8Y29kZT5kZXNjcmlwdGlvbjwvY29kZT4gZmllbGQgdGhhdCBpcyA8ZW0+bm90PC9lbT4NCnBhcnQgb2YgdGhlIGNvcmUgc3BlYyBpcyBhc3N1bWVkIHRvIGJlIGEgJmx0O3BhcmFtJmd0OyB0YWcgd2l0aGluIHRoZQ0Kb2JqZWN0IGl0c2VsZi4gVXNlIHRoaXMgZmFjaWxpdHkgdG8gc3BlY2lmeSBhbnkgZXh0cmEgb3B0aW9ucyB5b3VyDQpjaG9zZW4gZmlsZSB0eXBlIHJlcXVpcmVzIHRvIG9wZXJhdGUgY29ycmVjdGx5LiBJZiB5b3UgbmVlZCB0byB1c2UgYQ0KZGVsaW1pdGVyIG90aGVyIHRoYW4gPGNvZGU+PTwvY29kZT4gYmV0d2VlbiBuYW1lLXZhbHVlIHBhaXJzLCB1c2UgdGhlIDxhIGhyZWY9IiNudmRlbGltIj5udl9kZWxpbTwvYT4gb3B0aW9uLjwvcD4NCjxwPldoZW4gdXNpbmcgc3dmb2JqZWN0IG1vZGUsIHN0YW5kYXJkIHBhcmFtZXRlcnMgYW5kIEZsYXNoVmFycyBhcmUgZGlmZmVyZW50aWF0ZWQgYW5kIHBhc3NlZCB0byB5b3VyIGFwcGxpY2F0aW9uIHVzaW5nIDxjb2RlPmFkZFBhcmFtKCk8L2NvZGU+IGFuZCA8Y29kZT5hZGRWYXJpYWJsZSgpPC9jb2RlPiByZXNwZWN0aXZlbHkuIE5vdGUgdGhhdCBleHByZXNzaW5zdGFsbCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gU2VlIDxhIGhyZWY9IiNmZWc1Ij5FeGFtcGxlIDU8L2E+IGZvciBtb3JlIG9uIHN3Zm9iamVjdC48L3A+DQoNCjxoMyBpZD0iZmlsZWF0dHMiPkZpbGUgbW9kZSBhdHRyaWJ1dGVzPC9oMz4NCjxwPlRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyB3b3JrIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHRoZXkgZG8gaW4gPGEgaHJlZj0iI2ltZ21vZGUiPmltYWdlIG1vZGU8L2E+IHdpdGggdGhlIGV4Y2VwdGlvbiB0aGF0IGV2ZXJ5d2hlcmUgaXQgbWVudGlvbnMgJ2ltYWdlJyB5b3UgY2FuIHN1YnN0aXR1dGUgJ2ZpbGUnOjwvcD4NCjx1bD4NCjxsaT48YSBocmVmPSIjbW9kZSI+bW9kZTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNjYXRlZ29yeSI+Y2F0ZWdvcnk8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjc3ViY2F0cyI+c3ViY2F0czwvYT48L2xpPg0KPGxpPjxhIGhyZWY9IiNtYXRjaHRleHQiPm1hdGNoX3RleHQ8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjYXZvaWR0ZXh0Ij5hdm9pZF90ZXh0PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2lkcHJlZml4Ij5pZF9wcmVmaXg8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjbGltaXQiPmxpbWl0PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2Fsd2F5c2Rpc3BsYXkiPmFsd2F5c19kaXNwbGF5PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI2xpbmtwcmVmaXgiPmxpbmtfcHJlZml4PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3JlZmVyZXIiPnJlZmVyZXI8L2E+PC9saT4NCjxsaT48YSBocmVmPSIjcmF3dXJsIj5yYXdfdXJsPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iI3RhcmdldCI+dGFyZ2V0PC9hPjwvbGk+DQo8L3VsPg0KPHA+VGhlIGZvbGxvd2luZyBvcHRpb24gaXMgaWdub3JlZCBpbiB0aGlzIG1vZGU6PC9wPg0KPHVsPg0KPGxpPjxhIGhyZWY9IiN0aHVtYiI+dGh1bWI8L2E+PC9saT4NCjwvdWw+DQo8cD5BbmQgdGhlc2Ugb3B0aW9ucyB3b3JrIGRpZmZlcmVudGx5LCBvciBhcmUgc3BlY2lmaWMgdG8gdGhpcyBtb2RlOjwvcD4NCg0KPGgzIGlkPSJmaWxlY29tcGFyZXRvIj48Y29kZT5jb21wYXJlX3RvIChmaWxlIG1vZGUpPC9jb2RlPjwvaDM+DQo8cD5EZWNsYXJlIHdoaWNoIGZpZWxkcyBvZiB0aGUgZmlsZSB0aGUgcGx1Z2luIGxvb2tzIHdoZW4gbWF0Y2hpbmcgb3INCmF2b2lkaW5nIHRleHQuIEJ5IGRlZmF1bHQgaXQgdXNlcyBqdXN0IHRoZSBmaWxlIG5hbWUsIGJ1dCBpdCBjYW4gYmUNCmV4dGVuZGVkIHRvIGVuY29tcGFzcyBhbnkgb2YgdGhlIGZvbGxvd2luZzo8L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+ZmlsZW5hbWU8L2NvZGU+PGJyPg0KdGhlIGRlZmF1bHQ6IGxvb2sgYXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBmaWxlIGFuZCBpZiBpdCBjb250YWlucyBhbnkgb2YgdGhlIHdvcmRzIGluIDxhIGhyZWY9IiNtYXRjaHRleHQiPm1hdGNoX3RleHQ8L2E+IHRoZW4gYWRkIGl0IHRvIHRoZSBwb29sLiBDb252ZXJzZWx5LCBpZiBpdCBjb250YWlucyBhbnkgb2YgdGhlIHdvcmRzIGluIDxhIGhyZWY9IiNhdm9pZHRleHQiPmF2b2lkX3RleHQ8L2E+IHRoZW4gaWdub3JlIHRoZSBmaWxlPC9saT4NCjxsaT48Y29kZT5kZXNjcmlwdGlvbjwvY29kZT48YnI+DQpsb29rIGF0IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlsZSBhbmQgaW5jbHVkZS9leGNsdWRlIGl0IGJhc2VkIG9uIHRoZSB3b3JkcyBpbiBtYXRjaF90ZXh0L2F2b2lkX3RleHQ8L2xpPg0KPGxpPjxjb2RlPnN0YXR1czwvY29kZT48YnI+DQppZiB0aGUgbnVtZXJpYyBkaXNwbGF5IHN0YXR1cyBvZiB0aGUgZmlsZSBtYXRjaGVzIChmb3IgbWF0Y2hfdGV4dCkgb3INCmRvZXMgbm90IG1hdGNoIChmb3IgYXZvaWRfdGV4dCkgYW55IG51bWJlcnMsIGluY2x1ZGUvZXhjbHVkZSB0aGlzIGZpbGUNCmZyb20gdGhlIHBvb2w8L2xpPg0KPGxpPjxjb2RlPnNpemU8L2NvZGU+PGJyPg0KKG9mIGxpbWl0ZWQgdXNlKSBpZiB0aGUgZmlsZSBpcyBvZiBhIHBhcnRpY3VsYXIgc2l6ZSAoZm9yIG1hdGNoX3RleHQpDQpvciBub3Qgb2YgYSBwYXJ0aWN1bGFyIHNpemUgKGZvciBhdm9pZF90ZXh0KSwgaW5jbHVkZS9leGNsdWRlIHRoaXMgZmlsZQ0KZnJvbSB0aGUgcG9vbDwvbGk+DQo8bGk+PGNvZGU+Y2F0ZWdvcnk8L2NvZGU+PGJyPg0KYXMgd2l0aCBpbWFnZSBtb2RlLCB0aGlzIG1heSBub3QgYmUgb2YgbXVjaCB1c2UgKHRoZSA8YSBocmVmPSIjY2F0ZWdvcnkiPmNhdGVnb3J5PC9hPiBvcHRpb24gY2FuIGJlIHVzZWQgaW5zdGVhZCksIGJ1dCB5b3UgbWF5IHNwZWNpZnkgdGhlIGNhdGVnb3J5IGFzIGEgcGxhY2UgdG8gbG9vayBmb3IgcGFydGljdWxhciB3b3JkczwvbGk+DQo8L3VsPg0KDQo8aDMgaWQ9ImZpbGVsaW5raW4iPjxjb2RlPmxpbmtfaW4gKGZpbGUgbW9kZSk8L2NvZGU+PC9oMz4NCjxwPk1ha2VzIHRoZSBiYW5uZXIgZmlsZSBjbGlja2FibGUgYnkgc3BlY2lmeWluZyB3aGljaCBmaWVsZCBvZiB0aGUgZmlsZSB0aGUgVVJMIGlzIHN0b3JlZC4gQ2FuIGN1cnJlbnRseSBvbmx5IGJlIDxjb2RlPmRlc2NyaXB0aW9uPC9jb2RlPi4gRGVmYXVsdDogb21pdHRlZCAobm8gbGluayk8L3A+DQo8aDQ+T3B0aW9uczwvaDQ+DQo8dWw+DQo8bGk+PGNvZGU+ZGVzY3JpcHRpb248L2NvZGU+PGJyPg0KdGVsbCB0aGUgcGx1Z2luIHRvIG1ha2UgdGhlIGZpbGUgYmFubmVyIGNsaWNrYWJsZS4gVGhlIGRlc3RpbmF0aW9uIFVSTA0KaXMgZm91bmQgaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkIG9mIHRoZSBmaWxlIGFzIGFuIG9wdGlvbj12YWx1ZSBwYWlyDQpsaWtlIHRoaXM6IDxjb2RlPmxpbmtfdXJsPWh0dHA6Ly9teS5kb21haW4uY29tL3BsYWNlL3RvL3Zpc2l0LnBocDs8L2NvZGU+DQo8YnI+QXMgd2l0aCB0aGUgPGEgaHJlZj0iI2ltZ2xpbmtpbiI+aW1hZ2UgbW9kZSBsaW5rX2luPC9hPiBhIGZ1bGwgVVJMDQpiZWdpbm5pbmcgaHR0cDovLyB3aWxsIGJlIHVzZWQgdmVyYmF0aW0sIGFueXRoaW5nIGJlZ2lubmluZyB3aXRoIGEgJy8nDQp3aWxsIGFzc3VtZSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc2l0ZSByb290IGFuZCBldmVyeXRoaW5nIGVsc2Ugd2lsbCBiZQ0KcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc2VjdGlvbi9hcnRpY2xlLiBOb3RlIHRoYXQgZGVwZW5kaW5nIG9uIHRoZQ0KcGx1Z2luIG1vZGUsIHRoZSBsaW5rIG1heSBub3QgYmUgaG9ub3VyZWQgYmVjYXVzZSB0aGUgcGx1Z2luIG1heQ0KY2FwdHVyZSBtb3VzZSBjbGlja3MuIEluIGZsYXNoLCB0aGlzIGNhbiBiZSBjaXJjdW12ZW50ZWQgKGN1cnJlbnRseSBvbg0KcGxhdGZvcm1zIGV4Y2VwdCBMaW51eCkgYnkgc3BlY2lmeWluZyB0aGUgcGFyYW0gPGNvZGU+d21vZGU9dHJhbnNwYXJlbnQ7PC9jb2RlPjwvbGk+DQo8L3VsPg0KDQo8aDMgaWQ9Im52ZGVsaW0iPjxjb2RlPm52X2RlbGltPC9jb2RlPjwvaDM+DQo8cD5XaGVuIHNwZWNpZnlpbmcgbmFtZS12YWx1ZSBwYWlycyBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQsIHlvdSBtYXkgYmUgZmFjZWQgd2l0aCB0aGUgcHJvYmxlbSB0aGF0IHlvdSB3YW50IHRvIHVzZSB0aGUgPGNvZGU+PTwvY29kZT4gc2lnbiBlbHNld2hlcmU7IHRoaXMgaXMgbW9zdCBub3RhYmxlIHdoZW4gdXNpbmcgRmxhc2hWYXJzIGJlY2F1c2UgdGhleSByZXF1aXJlIG5hbWU9dmFsdWUgdG8gYmUgdXNlZC4gVGhlIGxpbmU6PC9wPg0KPHByZT5GbGFzaFZhcnM9Im15VmFyPUppbSI7PC9wcmU+DQo8cD53aWxsIGNhdXNlIHRoZSBwbHVnaW4gcHJvYmxlbXMgYmVjYXVzZSBpdCB3aWxsIHNwbGl0IHRoZSBsaW5lIHVwDQppbnRvIDMgcGFydHMsIGluc3RlYWQgb2YgdGhlIHR3byB5b3UgcmVxdWlyZS4gVG8gYXZvaWQgdGhpcywgeW91IG1heQ0Kc3BlY2lmeSA8Y29kZT5udl9kZWxpbTwvY29kZT4gYW5kIHNldCB0aGUgZmlyc3QgZGVsaW1pdGVyIHRvIGFueXRoaW5nDQplbHNlIHlvdSBsaWtlLiBJdCBjb3VsZCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIsIGEgc2VxdWVuY2Ugb2YNCmNoYXJhY3RlcnMsIGEgd29yZCwgYW55dGhpbmcgYXMgbG9uZyBhcyBpdCdzIHVuaXF1ZS48L3A+DQo8cD5Gb3IgZXhhbXBsZSwgc3BlY2lmeWluZyA8Y29kZT5udl9kZWxpbT0iLVNRVUlEOiI8L2NvZGU+IHdvdWxkIHJlcXVpcmUgeW91IHRvIGRlbGltaXQgPGVtPmFsbDwvZW0+IHlvdXIgbmFtZS12YWx1ZSBwYWlycyBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQgdGh1czo8L3A+DQo8cHJlPmxvb3AtU1FVSUQ6ZmFsc2U7DQp3aWR0aC1TUVVJRDo0NTA7DQpGbGFzaFZhcnMtU1FVSUQ6dmFyTmFtZT1odHRwOi8vbXlncmVhdHpvby5jb20vdGlnZXJzOw0KPC9wcmU+DQo8cD5TZWUgPGEgaHJlZj0iI2ZlZzMiPmV4YW1wbGUgMzwvYT4gZm9yIG1vcmUgZGV0YWlsLjwvcD4NCg0KPGgzIGlkPSJub3BsdWd0ZXh0Ij48Y29kZT5ub19wbHVnX3RleHQ8L2NvZGU+PC9oMz4NCjxwPklmIGEgcGx1Z2luIGlzIG5vdCBhdmFpbGFibGUgd2l0aGluIGEgdXNlcidzIGJyb3dzZXIsIHRoaXMgdGV4dCB3aWxsDQpiZSBkaXNwbGF5ZWQgaW5zdGVhZC4gSXQgY291bGQgZGlyZWN0IHRoZW0gdG8gYSBzaXRlIGZyb20gd2hpY2ggdG8NCmRvd25sb2FkIHRoZSBwbHVnaW4uPC9wPg0KPHA+WW91IGNhbiBlaXRoZXIgcHV0IHBsYWluIHRleHQvaHRtbCBpbiBoZXJlIG9yIHNwZWNpZnkgYSB0ZXh0cGF0dGVybiBmb3JtIGJ5IHVzaW5nIDxjb2RlPm5vX3BsdWdfdGV4dD0idHhwZm9ybTpuYW1lX29mX2Zvcm0iPC9jb2RlPi4gVGhpcyBzYXZlcyB5b3UgaGF2aW5nIHRvIHVzZSB0aGUgYXN5X3dvbmRlcnRhZyBwbHVnaW4gdG8gZW5hYmxlIHRhZ3MtaW4tdGFncyBmdW5jdGlvbmFsaXR5LjwvcD4NCg0KPGgzIGlkPSJnbG9iYWxwYXJhbXMiPjxjb2RlPmdsb2JhbF9wYXJhbXM8L2NvZGU+PC9oMz4NCjxwPlNwZWNpZnkgYW55IGdsb2JhbCBuYW1lLXZhbHVlIHBhaXJzIGluIHRoaXMgb3B0aW9uLiBVc2luZyB0aGlzDQphbGxvd3MgeW91IHRvIHNwZWNpZnkgYXJiaXRyYXJ5IHBhcmFtZXRlcnMgdG8gcGFzcyB0byBhbGwgZmlsZXMuIFZlcnkNCnVzZWZ1bCBmb3IgdGhpbmdzIGxpa2UgPGNvZGU+Y29kZWJhc2U8L2NvZGU+IG9yIHNwZWNpZnlpbmcgYSBnbG9iYWwNCndpZHRoIGFuZCBoZWlnaHQuIFRoZSB2YWx1ZXMgYXJlIG92ZXJyaWRhYmxlIG9uIGEgZmlsZSBieSBmaWxlIGJhc2lzDQp1c2luZyB2YWx1ZXMgaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkIGFzIGRldGFpbGVkIGluIHRoZSA8YSBocmVmPSIjZmlsZXdvcmtzIj5ob3cgaXQgd29ya3M8L2E+LCA8YSBocmVmPSIjZmlsZWxpbmtpbiI+bGlua19pbjwvYT4gYW5kIDxhIGhyZWY9IiNudmRlbGltIj5udl9kZWxpbTwvYT4gc2VjdGlvbnMuIFRoZSBwYXJhbWV0ZXJzIHdvcmsgZm9yIGJvdGggdGhlIHN0YWJkYXJkIG9iamVjdCB0YWcgYW5kIHRoZSA8YSBocmVmPSIjc3dmb2JqZWN0Ij5zd2ZvYmplY3Q8L2E+IGphdmFzY3JpcHQuPC9wPg0KPHA+Tm90ZSB0aGF0IHlvdSBzcGVjaWZ5IHBhcmFtZXRlcnMgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgeW91IGRvDQppbiB0aGUgZGVzY3JpcHRpb24gZmllbGQgLSBlYWNoIHNlcGFyYXRlZCBieSBzZW1pY29sb25zIC0gYW5kIHRoYXQgdGhlIDxhIGhyZWY9IiNudmRlbGltIj5udl9kZWxpbTwvYT4gb3B0aW9uIGdvdmVybnMgd2hpY2ggZGVsaW1pdGVyIHdpbGwgYmUgdXNlZC4gPGVtPklNUE9SVEFOVDwvZW0+OiB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUgbGlzdCBtdXN0IGFsc28gYmUgdGVybWluYXRlZCB3aXRoIGEgc2VtaWNvbG9uLjwvcD4NCg0KPGgzIGlkPSJmaWxlaW1nY2xhc3MiPjxjb2RlPmltZ2NsYXNzIChmaWxlIG1vZGUpPC9jb2RlPjwvaDM+DQo8cD5BbHRob3VnaCBzbGlnaHRseSBtaXNsZWFkaW5nIGFzIGEgbmFtZWQgb3B0aW9uLCB0aGlzIGdpdmVzIGFuDQpvdmVyYWxsIENTUyBjbGFzcyBhcHBsaWVkIHRvIGVhY2ggYmFubmVyIGZpbGUncyAmbHQ7b2JqZWN0Jmd0OyB0YWcuDQpEZWZhdWx0OiBlbXB0eSAoaS5lLiBubyBjbGFzcykuIENhbiBiZSBvdmVycmlkZGVuIG9uIGEgZmlsZS1ieS1maWxlDQpiYXNpcyBieSBzcGVjaWZ5aW5nIHRoZSB2YWx1ZSA8Y29kZT5jbGFzcz1teUNsYXNzTmFtZTs8L2NvZGU+IGluIHRoZSBkZXNjcmlwdGlvbiBmaWVsZCBvZiBhbnkgZmlsZS48L3A+DQoNCjxoMyBpZD0iY291bnRkb3dubG9hZHMiPjxjb2RlPmNvdW50X2Rvd25sb2FkczwvY29kZT48L2gzPg0KPHA+QnkgZGVmYXVsdCBldmVyeSB0aW1lIGEgYmFubmVyIGZpbGUgaXMgc2VydmVkLCB0aGUgYXNzb2NpYXRlZA0KY291bnRlciBmb3IgdGhhdCBmaWxlIGlzIGluY3JlbWVudGVkLiBUaGlzIG1heSBvciBtYXkgbm90IGJlIGRlc2lyYWJsZQ0Kc28gaXQgY2FuIGJlIHR1cm5lZCBvZmYgaGVyZS48L3A+DQo8cD5UaGUgcmVhc29uIGl0IGlzIGFuIG9wdGlvbiBpcyBiZWNhdXNlIGl0IGNhbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMNCmxlYWQgdG8gbWlzbGVhZGluZyByZXN1bHRzLiBGb3IgZXhhbXBsZSwgYSBjZXJ0YWluIGJyb3dzZXIgdGhhdCBzaGFsbA0KcmVtYWluIG5hbWVsZXNzIHJlcXVpcmVzIGFuICZsdDtvYmplY3QmZ3Q7IHRhZyB0byBub3Qgb25seSBoYXZlIGEgPGNvZGU+ZGF0YT08L2NvZGU+IG9wdGlvbiBidXQgYWxzbyBhIDxjb2RlPm1vdmllPTwvY29kZT4NCnBhcmFtZXRlciB3aGVuIHNlcnZpbmcgRmxhc2ggY29udGVudC4gV2l0aCBvbmx5IG9uZSBvZiB0aGVzZSBzcGVjaWZpZWQsDQp0aGUgZmlsZSB3aWxsIG5vdCBwbGF5OyB5ZXQgd2l0aCBib3RoIHRoZSBmaWxlIGlzIGRvd25sb2FkZWQgPGVtPnR3aWNlPC9lbT4NCmFuZCB0aGUgZG93bmxvYWQgY291bnRlciBnb2VzIHVwIGJ5IHR3by4gU28gdGhlIG51bWJlciBvZiB2aXNpdG9ycyB5b3UNCmhhdmUgdXNpbmcgdGhpcyBicm93c2VyIG1heSBza2V3IHlvdXIgZG93bmxvYWQgc3RhdHMuIElmIHlvdXIgYm9zcw0KbGlrZXMgdG8gcmVseSBvbiBzdWNoIHZhbHVlcyBpdCBtaWdodCBiZSBiZXN0IHRvIHR1cm4gdGhlIG9wdGlvbiBvZmYNCmFuZCBrZWVwIHF1aWV0ITwvcD4NCjxoND5PcHRpb25zPC9oND4NCjx1bD4NCjxsaT48Y29kZT4xPC9jb2RlPjxicj4NCk9uICh0aGUgZGVmYXVsdCBpZiBvbWl0dGVkKTogZXZlcnkgdGltZSB0aGUgYmFubmVyIGlzIHNlcnZlZCwgdGhlIGRvd25sb2FkIGNvdW50ZXIgb24gdGhlIEZpbGVzIHRhYiB3aWxsIGluY3JlbWVudDwvbGk+DQo8bGk+PGNvZGU+MDwvY29kZT48YnI+DQpPZmY6IGV2ZXJ5IHRpbWUgdGhlIGJhbm5lciBpcyBzZXJ2ZWQsIHRoZSBkb3dubG9hZCBjb3VudGVyIG9uIHRoZSBGaWxlcyB0YWIgd2lsbCA8ZW0+bm90PC9lbT4gYmUgaW5jcmVtZW50ZWQuIFRoaXMgbWF5IG9yIG1heSBub3QgcmVxdWlyZSB1c2Ugb2YgdGhlIDxhIGhyZWY9IiNmaWxlc2RpciI+ZmlsZXNfZGlyPC9hPiBvcHRpb24gaWYgeW91IGhhdmUgY2hhbmdlZCB5b3VyIGRlZmF1bHQgdGV4dHBhdHRlcm4gZGlyZWN0b3J5IHN0cnVjdHVyZS48L2xpPg0KPC91bD4NCg0KPGgzIGlkPSJmaWxlc2RpciI+PGNvZGU+ZmlsZXNfZGlyPC9jb2RlPjwvaDM+DQo8cD5XaGVuIHRoZSA8YSBocmVmPSIjY291bnRkb3dubG9hZHMiPmNvdW50X2Rvd25sb2FkczwvYT4gYXR0cmlidXRlIGlzIHR1cm5lZCBvZmYsIGZpbGVzIGFyZSBzZXJ2ZWQgYnkgZGlyZWN0bHkgYWNjZXNzaW5nIHRoZSBVUkwgb2YgdGhlIDxjb2RlPmZpbGVzPC9jb2RlPiBkaXJlY3RvcnkuIFRoaXMgaXMgdXN1YWxseSA8ZW0+aHR0cDovL3lvdXJkb21haW4uY29tL2ZpbGVzPC9lbT4uDQpJZiB5b3UgaGF2ZSBjaGFuZ2VkIHlvdXIgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgdGhlIGZpbGVzIGRpcmVjdG9yeSBpcw0Kc29tZXdoZXJlIGVsc2Ugb3IgY2FsbGVkIHNvbWV0aGluZyBlbHNlLCBzcGVjaWZ5IGl0IHdpdGggdGhpcyBvcHRpb24uDQpUaGUgZGVmYXVsdCBpcyA8Y29kZT5maWxlczwvY29kZT4uPC9wPg0KDQo8aDI+PGEgaWQ9ImZpbGVleGFtcGxlcyI+PC9hPkZpbGUgbW9kZSBleGFtcGxlczwvaDI+DQo8cD5UbyBoaWdobGlnaHQgdGhlIGZlYXR1cmVzLCB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBzYW1lIHpvbyB3ZWIgc2l0ZSBhcyBpbiB0aGUgPGEgaHJlZj0iI2ltZ2V4YW1wbGVzIj5JbWFnZSBtb2RlIGV4YW1wbGVzPC9hPi4NClRoaXMgdGltZSB5b3UgaGF2ZSB1cGxvYWRlZCBhIGZldyBTaG9ja3dhdmUgRmxhc2ggZG9jdW1lbnRzIGFib3V0DQp2YXJpb3VzIGFuaW1hbHMgYW5kIGEgY291cGxlIG9mIHNob3J0IG1vdmllcyBhYm91dCBjaGVldGFocyB1bmRlciBhDQpmaWxlIGNhdGVnb3J5IGNhbGxlZCAiYW5pbWFscyIuIFRoZSBtb3ZpZXMgYXJlIHN1Yi1jYXRlZ29yaXNlZCBhcw0KYmVmb3JlLiBUaGUgPGNvZGU+ZGVzY3JpcHRpb248L2NvZGU+IGZpZWxkIG9mIGVhY2ggZmlsZSBob2xkcyBhIHVybCB0byBhbiBhcnRpY2xlIGFib3V0IGVhY2ggYW5pbWFsIHVzaW5nIDxjb2RlPmxpbmtfdXJsPS9hbmltYWxzL2FuaW1hbE5hbWU7PC9jb2RlPjwvcD4NCjxwPllvdSBjYW4gZG8gYWxsIHRoZSBzYW1lIHRoaW5ncyBhcyBpbiBpbWFnZSBtb2RlIHRvIGNob29zZSB3aGljaA0KZmlsZXMgbWF0Y2ggd2hhdCB0ZXh0L2NhdGVnb3JpZXMgc28gd2UnbGwgbm90IGNvdmVyIHRoYXQgaGVyZS4gT25seSB0aGUNCm5ldyBvcHRpb25zIGFyZSBjb3ZlcmVkIG9yIHdoZXJlIGFuIG9wdGlvbiBkaWZmZXJzIHNpZ25pZmljYW50bHkuPC9wPg0KDQo8aDMgaWQ9ImZlZzEiPjxjb2RlPkV4YW1wbGUgMTwvY29kZT48L2gzPg0KPHByZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIG1vZGU9ImZpbGUiIGNhdGVnb3J5PSJhbmltYWxzIg0KICAgICBhdm9pZF90ZXh0PSI/a2V5d29yZHMiIGNvbXBhcmVfdG89ImZpbGVuYW1lLCBkZXNjcmlwdGlvbiINCiAgICAgc3ViY2F0cz0iMSIgLyZndDs8L3ByZT4NCjxwPkZhaXJseSBzdHJhaWdodGZvcndhcmQuIFBpY2tzIGFueSBmaWxlIGluIHRoZSBjYXRlZ29yeSBjYWxsZWQNCidhbmltYWxzJyB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IG9mIHRoZSBjdXJyZW50IGFydGljbGUncyBrZXl3b3Jkcw0KaW4gaXRzIGZpbGVuYW1lIG9yIGRlc2NyaXB0aW9uIGZpZWxkcy48L3A+DQo8cD5Bc3N1bWluZyBpdCBzZWxlY3RzIGEgc2hvY2t3YXZlIGZsYXNoIGZpbGUsIHRoZSB0YWcgaXQgb3V0cHV0cyBtaWdodCBiZTo8L3A+DQo8cHJlPiZsdDtvYmplY3QgZGF0YT0iaHR0cDovL215Z3JlYXR6b28uY29tL2ZpbGVfZG93bmxvYWQvMiINCiAgICAgICB0eXBlPSJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCINCiAgICAgICB3aWR0aD0iMzAwIiBoZWlnaHQ9Ijc1IiBpZD0iaWQ3NDY1ODkzIiZndDsNCiZsdDtwYXJhbSBuYW1lPSJtb3ZpZSINCiAgICAgdmFsdWU9Imh0dHA6Ly9teWdyZWF0em9vLmNvbS9maWxlX2Rvd25sb2FkLzIiIC8mZ3Q7DQombHQ7L29iamVjdCZndDsNCjwvcHJlPg0KDQo8aDMgaWQ9ImZlZzIiPjxjb2RlPkV4YW1wbGUgMjwvY29kZT48L2gzPg0KPHA+VXNpbmcgdGhlIHNhbWUgb3B0aW9ucyBhcyBpbiA8YSBocmVmPSIjZmVnMSI+ZXhhbXBsZSAxPC9hPiwgaWYgeW91IGdvIHRvIHRoZSBGaWxlcyB0YWIsIHNlbGVjdCB0aGUgRmxhc2ggZmlsZSBpdCBjaG9zZSBhbmQgZWRpdCB0aGUgZGVzY3JpcHRpb24gZmllbGQgdG8gcmVhZDo8L3A+DQo8cHJlPmxvb3A9ZmFsc2U7DQp3aWR0aD00NTA7DQpjb2RlYmFzZT1odHRwOi8vbXlncmVhdHpvby5jb20vOw0KaWQ9Inpvb2JqZWN0IjsNCnN0YW5kYnk9ImxvYWRpbmcuLi4iOw0KYmdjb2xvcj0jMDA2ODAwOw0KPC9wcmU+DQo8cD5UaGVuIHlvdSB3b3VsZCBnZXQgYW4gb2JqZWN0IHRhZyB0aGF0IHJlc2VtYmxlZCB0aGlzOjwvcD4NCjxwcmU+Jmx0O29iamVjdCBkYXRhPSJodHRwOi8vbXlncmVhdHpvby5jb20vZmlsZV9kb3dubG9hZC8yIg0KICAgICAgIHR5cGU9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIg0KICAgICAgIHdpZHRoPSI0NTAiIGhlaWdodD0iNzUiIGlkPSJ6b29iamVjdCImZ3Q7DQombHQ7cGFyYW0gbmFtZT0ibW92aWUiDQogICAgIHZhbHVlPSJodHRwOi8vbXlncmVhdHpvby5jb20vZmlsZV9kb3dubG9hZC8yIiAvJmd0Ow0KJmx0O3BhcmFtIG5hbWU9Imxvb3AiIHZhbHVlPSJmYWxzZSIgLyZndDsNCiZsdDtwYXJhbSBuYW1lPSJjb2RlYmFzZSIgdmFsdWU9Imh0dHA6Ly9teWdyZWF0em9vLmNvbS8iIC8mZ3Q7DQombHQ7cGFyYW0gbmFtZT0ic3RhbmRieSIgdmFsdWU9ImxvYWRpbmcuLi4iIC8mZ3Q7DQombHQ7cGFyYW0gbmFtZT0iYmdjb2xvciIgdmFsdWU9IiMwMDY4MDAiIC8mZ3Q7DQombHQ7L29iamVjdCZndDsNCjwvcHJlPg0KPHA+SG9wZWZ1bGx5IHlvdSBjYW4gc2VlIHRoYXQgaXQncyBxdWl0ZSBmbGV4aWJsZSBhbmQgc2hvdWxkIGFsbG93IHlvdSB0byB0d2VhayBhbnkgY29udGVudCB0byBwbGF5IGluIG1vc3QgYnJvd3NlcnMuPC9wPg0KDQo8aDMgaWQ9ImZlZzMiPjxjb2RlPkV4YW1wbGUgMzwvY29kZT48L2gzPg0KPHA+VXNpbmcgdGhlIHNhbWUgb3B0aW9ucyBhcyBpbiA8YSBocmVmPSIjZmVnMSI+ZXhhbXBsZSAxPC9hPiwgYnV0IGFkZGluZyBvbmUgb3B0aW9uIDxjb2RlPm52X2RlbGltPSI6OiI8L2NvZGU+IG1lYW5zIHRoYXQgaW4gdGhlIGRlc2NyaXB0aW9uIGZpZWxkIHlvdSB3b3VsZCBoYXZlIHRvIHNwZWNpZnkgdGhlIG5hbWUtdmFsdWUgcGFpcnMgd2l0aCBhIGRvdWJsZSBjb2xvbiBiZXR3ZWVuIHRoZW0sIGkuZS48L3A+DQo8cHJlPmxvb3A6OmZhbHNlOw0Kd2lkdGg6OiI0NTAiOw0KY29kZWJhc2U6Omh0dHA6Ly9teWdyZWF0em9vLmNvbS87DQppZDo6em9vYmplY3Q7DQpzdGFuZGJ5OjoibG9hZGluZy4uLiI7DQpGbGFzaFZhcnM6OiJteVZhcj1odHRwOi8vbXlncmVhdHpvby5jb20vbGlvbnMiOw0KYmdjb2xvcjo6IzAwNjgwMDsNCjwvcHJlPg0KPHA+Tm90ZSB0aGUgYWRkaXRpb24gb2YgRmxhc2hWYXJzLiBJZiB5b3Ugd2lzaCB0byBzZW5kIEZsYXNoVmFycyB0byB5b3VyIGFwcGxpY2F0aW9uLCB0aGV5IGhhdmUgdG8gYmUgZGVsaW1pdGVkIHdpdGggYW4gPGNvZGU+PTwvY29kZT4gc28geW91IG11c3QgY2hhbmdlIDxjb2RlPm52X2RlbGltPC9jb2RlPg0KdG8gc29tZXRoaW5nIGVsc2UuIEFueSBvdGhlciBjaGFyYWN0ZXIocykgd2lsbCBkbywgYnV0IHVzaW5nIGEgc2luZ2xlDQpjb2xvbiB3b3VsZCBjYXVzZSBncmllZiBiZWNhdXNlIHRoYXQgY2hhcmFjdGVyIGlzIHVzZWQgaW4gVVJMcy48L3A+DQo8cD5JbmNpZGVudGFsbHksIHBhc3NpbmcgYSBGbGFzaFZhciBpbiB0aGlzIG1hbm5lciBtYXkgaGVscCBtYWtlIHlvdXIgYmFubmVyIGNsaWNrYWJsZSB3aXRob3V0IHJlc29ydGluZyB0byB1c2luZyA8Y29kZT53bW9kZT10cmFuc3BhcmVudDs8L2NvZGU+DQpiZWNhdXNlIHlvdSBjYW4gc2ltcGx5IHBsYWNlIGEgYnV0dG9uIGluIHlvdXIgbW92aWUgYW5kIHBhc3MgdGhlIFVSTCBpbg0KZnJvbSB0aGUgZGVzY3JpcHRpb24gZmllbGQgdmlhIGEgRmxhc2hWYXIgaW5zdGVhZCBvZiB1c2luZyA8Y29kZT5saW5rX3VybDwvY29kZT4uPC9wPg0KDQo8aDMgaWQ9ImZlZzQiPjxjb2RlPkV4YW1wbGUgNDwvY29kZT48L2gzPg0KPHByZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIG1vZGU9ImZpbGUiIGNhdGVnb3J5PSJhbmltYWxzIg0KICAgICBtYXRjaF90ZXh0PSJjaGVldGFoIiBzdWJjYXRzPSIxIiBsaW5rX2luPSJkZXNjcmlwdGlvbiINCiAgICAgaW1nY2xhc3M9ImZsb2JqZWN0cyIgLyZndDs8L3ByZT4NCjxwPklmIG9uZSBvZiB0aGUgcm93cyBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQgb2YgdGhlIDxjb2RlPmNoZWV0YWhfY2hhc2luZ19kZWVyLndtdjwvY29kZT4gZmlsZSBpcyA8Y29kZT51cmxfbGluaz0vYW5pbWFscy9jaGVldGFoLWNoYXNpbmctZGVlcjwvY29kZT4NCnRoZW4gY2xpY2tpbmcgb24gdGhlIGVtYmVkZGVkIG1vdmllIHdpbGwgdGFrZSB0aGUgdmlzaXRvciB0byB0aGF0DQphcnRpY2xlLiBJbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYXR0cmlidXRlcywgdGhpcyBhbmQgYWxsIG9iamVjdHMNCmRpc3BsYXllZCBieSB0aGUgcGx1Z2luIHdpbGwgdGFrZSBvbiBhIDxjb2RlPmNsYXNzPSJmbG9iamVjdHMiPC9jb2RlPiBhdHRyaWJ1dGUuIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gb24gYSBmaWxlLWJ5LWZpbGUgYmFzaXMgYnkgYWRkaW5nIDxjb2RlPmNsYXNzPSJhbm90aGVyQ2xhc3NOYW1lIjs8L2NvZGU+IGFzIGFuIGVudHJ5IGluIHRoZSA8Y29kZT5kZXNjcmlwdGlvbjwvY29kZT4gZmllbGQuPC9wPg0KPHA+Tm90ZSB0aGF0IGlmIHlvdXIgY2hvc2VuIG1lZGlhIHBsdWdpbiBjYXB0dXJlcyBjbGljayBldmVudHMgYmVmb3JlDQp0aGV5IGFyZSBwYXNzZWQgdG8gdGhlIERPTSwgdGhlIGxpbmsgd2lsbCBub3QgYmUgaG9ub3VyZWQuIEZvciBGbGFzaCwNCnlvdSBjYW4gYnlwYXNzIHRoaXMgaW4gbW9zdCBicm93c2VycyAoTGludXggaXMgY3VycmVudGx5IGFuIGV4Y2VwdGlvbikNCmJ5IHBhc3NpbmcgPGNvZGU+d21vZGU9dHJhbnNwYXJlbnQ7PC9jb2RlPiBvciB1c2luZyBhIEZsYXNoVmFyIGFzIGluIDxhIGhyZWY9IiNmZWczIj5leGFtcGxlIDM8L2E+LjwvcD4NCg0KPGgzIGlkPSJmZWc1Ij48Y29kZT5FeGFtcGxlIDU8L2NvZGU+PC9oMz4NCjxwcmU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBtb2RlPSJmaWxlIiBjYXRlZ29yeT0iYW5pbWFscyINCiAgICAgYXZvaWRfdGV4dD0iP2tleXdvcmRzIiBjb21wYXJlX3RvPSJmaWxlbmFtZSwgZGVzY3JpcHRpb24iDQogICAgIHN1YmNhdHM9IjEiIG52X2RlbGltPSI6OiINCiAgICAgZ2xvYmFsX3BhcmFtcz0icGxheWVydmVyc2lvbjo6OTt3aWR0aDo6NzU7aGVpZ2h0OjUwMDsiIC8mZ3Q7PC9wcmU+DQo8cD5JbiB0aGUgRmlsZXMgdGFiLCBpZiB5b3Ugc2VsZWN0IHRoZSBGbGFzaCBmaWxlIHRoZSBwbHVnaW4gbWlnaHQgY2hvb3NlIGFuZCBlZGl0IHRoZSBkZXNjcmlwdGlvbiBmaWVsZCB0byByZWFkOjwvcD4NCjxwcmU+bWltZV90eXBlOjpzd287DQp1aWQ6OnNvYjsNCnF1YWxpdHk6OmhpZ2g7DQp3bW9kZTo6dHJhbnNwYXJlbnQ7DQplbGVtZW50aWQ6Om15Rmxhc2hDb250ZW50Ow0KRmxhc2hWYXJzOjpsaW5reT1odHRwOi8vbXlncmVhdHpvby5jb20vdGlnZXJzJmFtcDtwaWM9dGlnZXIuanBnOw0Kd2lkdGg6OjIwMDsNCjwvcHJlPg0KPHA+VGhlbiB5b3UgbWlnaHQgZ2V0IG91dHB1dCB0aGF0IHJlc2VtYmxlZCB0aGlzOjwvcD4NCjxwcmU+Jmx0O3NjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGRlZmVyPSJkZWZlciImZ3Q7DQogdmFyIHNvYiA9IG5ldyBTV0ZPYmplY3QoImh0dHA6Ly9teWdyZWF0em9vLmNvbS9maWxlX2Rvd25sb2FkLzIiLA0KICAgICAgICJpZDIxODk1NzQ2IiwgIjIwMCIsICI1MDAiLCAiOSIsICIjZmZmZmZmIik7DQogc29iLmFkZFBhcmFtKCJxdWFsaXR5IiwgImhpZ2giKTsNCiBzb2IuYWRkUGFyYW0oIndtb2RlIiwgInRyYW5zcGFyZW50Iik7DQogc29iLmFkZFZhcmlhYmxlKCJsaW5reSIsICJodHRwOi8vbXlncmVhdHpvby5jb20vdGlnZXJzIik7DQogc29iLmFkZFZhcmlhYmxlKCJwaWMiLCAidGlnZXIuanBnIik7DQogc29iLndyaXRlKCJteUZsYXNoQ29udGVudCIpOw0KJmx0Oy9zY3JpcHQmZ3Q7DQo8L3ByZT4NCjxwPk5vdGUgdGhlICdkZWZlcicgb3B0aW9uLiBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gcHJldmVudCBJRSBmcm9tDQpjcmFzaGluZyAod2hpY2ggaXQgc29tZXRpbWVzIGRvZXMpIHdpdGggYW4gIm9wZXJhdGlvbiBhYm9ydGVkIiBkaWFsb2cuPC9wPg0KDQo8aDI+PGEgbmFtZT0iY3JlZGl0cyI+PC9hPkNyZWRpdHM8L2gyPg0KPHA+VGhpcyBwbHVnaW4gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gZHJ1X3JhbmRvbV9pbWFnZSBhbmQgcGxhZ2lhcmlzZXMgaWRlYXMgZnJvbSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9NTE3NiI+Um9iIFNhYmxlJ3MgcnNzX3RodW1icG9wPC9hPg0KYW5kIHZhcmlvdXMgVFhQZXJzIGluIHRoZSBjb21tdW5pdHkgd2hvIGhhdmUgc3VnZ2VzdGVkIGZlYXR1cmVzIGFuZA0KaW1wcm92ZW1lbnRzLiBNYW55IHRoYW5rcyB0byBhbGwgd2hvIGhhdmUgaGVscGVkIGNyYWZ0IHRoaXMgcGx1Z2luLjwvcD4iO3M6NDoiY29kZSI7czoxODQ4NToiLy8gdjAuMSAgSW5pdGlhbCBwdWJsaWMgcmVsZWFzZQ0KLy8gdjAuMTEgQWRkZWQgUEZYIHRvIHF1ZXJ5ICh0aGFua3MgbWVyY3VyeSkNCi8vIHYwLjEyIEZpeGVkIGhlbHAgdG8gaW5jbHVkZSB0cmFpbGluZyBzbGFzaGVzICh0aGFua3Mgdml0dG9yaW8pDQovLyB2MC4xMyBVbnJlbGVhc2VkLiBBZGRlZCBsb29rX2luPWNhdGVnb3J5IGFuZCByZWZlcmVyDQovLyB2MC4xNCBBZGRlZCBtYXRjaF90ZXh0IGFuZCB1c2VfYWx0ICh0aGFua3MgbHVrZXBlcm1zbikNCi8vIHYwLjE1IEFkZGVkIGFsd2F5c19kaXNwbGF5IGFuZCBsaW1pdCAodGhhbmtzIGx1a2VwZXJtc24pDQovLyB2MC4xNWEgQnVnZml4IGZvciBsaW5rY2FwdGlvbiAodGhhbmtzIG1lcmN1cnkpDQovLyB2MC4xNiBUaWdodGVuZWQgaW1hZ2UoKSBwYXJhbXMgZm9yIHR4cCB2NC4wLjQgY29tcGxpYW5jZQ0KLy8gdjAuMTcgQWRkZWQgdGh1bWIsIGxpbmtwcmVmaXggYW5kIGxpbmthbHQgb3B0aW9ucw0KLy8gdjAuMTdhIGJpZCBvcHRpb24gbm93IHdvcmtzIHdpdGggZXhpc3RpbmcgdXJsIHBhcmFtcyAodGhhbmtzIFBhcHVhc3MpDQovLyB2MC4xOCBBZGRlZCBpbWdjbGFzcyBvcHRpb24gKHRoYW5rcyBEaWdpdGFsUmVhbG0pDQovLyB2MC4yICBNYWpvciBvdmVyaGF1bC4gQWRkZWQgc3ViY2F0ZWdvcnkgc3VwcG9ydCAodGhhbmtzIGx1a2VwZXJtc24gYW5kIHNhbnRoZW8pLiBVc2VzIHNtZF9saWIuIEVuaGFuY2VkIG1hdGNoX3RleHQvYXZvaWRfdGV4dCBzbyBsb29rX2luIGlzIG5vIGxvbmdlciBuZWVkZWQ7IGRyb3BwZWQgdXNlX2FsdCBhbmQgYWRkZWQgY29tcGFyZV90bzsgcmVwbGFjZWQgbGlua2NhcHRpb24vbGlua2FsdCB3aXRoIGxpbmtfaW47IGFkZGVkIGlkX3ByZWZpeDsgbGlua3ByZWZpeCBpcyBub3cgbGlua19wcmVmaXgNCi8vIHYwLjIxIEFkZGVkIE1MUChNdWx0aS1MaW5ndWFsIFBhY2spIHN1cHBvcnQNCi8vIHYwLjIyIEFkZGVkIHJhd191cmwgb3B0aW9uDQovLyB2MC4yMyBBZ2FpbnN0IGJldHRlciBqdWRnZW1lbnQsIGFkZGVkIHRhcmdldCBvcHRpb24gKHRoYW5rcyBqc3R1YmJzLCBjZHRhdmlqaXQpDQovLyB2MC4zICBBZGRlZCBzdXBwb3J0IGZvciBmaWxlcyBhcyB3ZWxsIGFzIGltYWdlcyAtIGZpbmFsbHksIHZpZGVvL3N3ZiBiYW5uZXJzIGFyZSBhIHJlYWxpdHkhDQovLyB2MC4zYSBGaXhlZDogaWYgY2F0ZWdvcnk9Ij9maWVsZCIgaXMgZW1wdHkvcmV0dXJucyBubyByZXN1bHRzLCBwbHVnaW4gd2lsbCBubyBsb25nZXIgZGlzcGxheSBhIHJhbmRvbSBpbWFnZSBmcm9tIHRoZSBmdWxsIHBvb2wNCi8vIHYwLjMxIEV4dGVuZGVkIGFsd2F5c19kaXNwbGF5LiBBZGRlZCBudl9kZWxpbSB0byBzcGVjaWZ5IG5hbWU9dmFsdWUgZGVsaW1pdGVyIGluIGZpbGUgbW9kZSBwYXJhbXMuIEZpeGVkOiBkZWZpbmUoKSB3YXJuaW5nDQovLyB2MC4zMiBBZGRlZCBub19wbHVnX3RleHQgYW5kIGdsb2JhbF9wYXJhbXMNCi8vIHYwLjMzIFVzZXMgc21kX2xpYiB2MC4zLiBBZGRlZCBzd2ZPYmplY3Qgc3VwcG9ydC4gQ2FuIG5vdyBvdmVycmlkZSBtaW1lIHR5cGUuDQovLyB2MC4zNCBBZGRlZCBzdGF0aWMgaW1hZ2Ugc3VwcG9ydCB0byBmaWxlcyBtb2RlKCEpDQoNCmZ1bmN0aW9uIHNtZF9yYW5kb21fYmFubmVyKCRhdHRzKSB7DQoJcmVxdWlyZV9wbHVnaW4oJ3NtZF9saWInKTsNCg0KCS8vIE1MUCBzdXBwb3J0DQoJZ2xvYmFsICRpbWdfZGlyLCAkZmlsZV9iYXNlX3BhdGgsICRzbWRfcmJhbkxhbmc7DQoJJHNtZF9yYmFuX3N0ciA9IGFycmF5KA0KCQknd2lkdGgnID0+ICczMDAnLA0KCQknaGVpZ2h0JyA9PiAnNzUnLA0KCSk7DQoJJHNtZF9yYmFuTGFuZyA9IG5ldyBzbWRfTUxQKCdzbWRfcmFuZG9tX2Jhbm5lcicsICdzbWRfcmJhbicsICRzbWRfcmJhbl9zdHIpOw0KDQoJaWYgKCFkZWZpbmVkKCdTTURfRExNX1RSJykpIHsNCgkJZGVmaW5lKCdTTURfRExNX1RSJywgJ0BAJyk7DQoJfQ0KCWlmICghZGVmaW5lZCgnU01EX0RMTV9SRUMnKSkgew0KCQlkZWZpbmUoJ1NNRF9ETE1fUkVDJywgJ3wnKTsNCgl9DQoJJGNvdW50X2Rvd25sb2FkcyA9IHRydWU7DQoNCgkvLyAqKiBhbGxvd2FibGUgb3B0aW9ucyAoZGVmYXVsdCBsaXN0ZWQgZmlyc3QpDQoJJGNvbXBhcmVUbyA9IGFycmF5KCJpbWFnZTpuYW1lIiwiaW1hZ2U6aWQiLCJpbWFnZTphbHQiLCJpbWFnZTpjYXB0aW9uIiwiaW1hZ2U6Y2F0ZWdvcnkiLCJmaWxlOmZpbGVuYW1lIiwiZmlsZTpjYXRlZ29yeSIsImZpbGU6ZGVzY3JpcHRpb24iLCJmaWxlOnN0YXR1cyIsImZpbGU6c2l6ZSIpOw0KCSRsaW5rSW4gPSBhcnJheSgiIiwiaW1hZ2U6Y2FwdGlvbiIsImltYWdlOmFsdCIsImZpbGU6ZGVzY3JpcHRpb24iKTsNCgkkbW9kZXMgPSBhcnJheSgiaW1hZ2UiLCJmaWxlIik7DQoNCgkvLyAqKiBsb29rdXAgdGFibGVzDQoJJGh0bWxPYmpGaXhlZCA9IGFycmF5KCJpZCIsImRhdGEiLCJoZWlnaHQiLCJ0eXBlIiwid2lkdGgiLCJwbGF5ZXJ2ZXJzaW9uIiwiYmFja2NvbG9yIiwiZWxlbWVudGlkIiwidWlkIik7DQoJJGh0bWxPYmpQYXJhbSA9IGFycmF5KCJjbGFzcyIsInRpdGxlIiwic3R5bGUiLCJkaXIiLCJsYW5nIiwieG1sOmxhbmciLCJhbGlnbiIsImFyY2hpdmUiLCJib3JkZXIiLCJjbGFzc2lkIiwiY29kZWJhc2UiLCJjb2RldHlwZSIsImRlY2xhcmUiLCJoc3BhY2UiLCJuYW1lIiwic3RhbmRieSIsInVzZW1hcCIsInZzcGFjZSIpOw0KCSRvYmpNaW1lVHlwZSA9IGFycmF5KCJhdmkiID0+IGFycmF5KCJ2aWRlby9hdmkiLCAiVmlkZW8iKSwNCgkJCQkJCQkJImZsYXxmbGFjIiA9PiBhcnJheSgiYXVkaW8vZmxhYyIsICJBdWRpbyIpLA0KCQkJCQkJCQkiZmx2fHN3ZiIgPT4gYXJyYXkoImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiwgIkZsYXNoIiksDQoJCQkJCQkJCSJnaWYiID0+IGFycmF5KCJpbWFnZS9naWYiLCAiSW1hZ2UiKSwNCgkJCQkJCQkJInN3byIgPT4gYXJyYXkoInRleHQvamF2YXNjcmlwdCIsICJTV0ZPYmplY3QiKSwNCgkJCQkJCQkJImphdmEiID0+IGFycmF5KCJhcHBsaWNhdGlvbi94LWphdmEtYXBwbGV0IiwgIkFwcCIpLA0KCQkJCQkJCQkianBnIiA9PiBhcnJheSgiaW1hZ2UvanBlZyIsICJJbWFnZSIpLA0KCQkJCQkJCQkibWlkIiA9PiBhcnJheSgiYXVkaW8veC1taWRpIiwgIkF1ZGlvIiksDQoJCQkJCQkJCSJtb3YiID0+IGFycmF5KCJ2aWRlby9xdWlja3RpbWUiLCAiVmlkZW8iKSwNCgkJCQkJCQkJIm1wZ3xtcGVnfG1wNCIgPT4gYXJyYXkoInZpZGVvL21wZWciLCAiVmlkZW8iKSwNCgkJCQkJCQkJIm1wMnxtcDN8bTRhIiA9PiBhcnJheSgiYXVkaW8vbXBlZyIsICJBdWRpbyIpLA0KCQkJCQkJCQkib2d2fG9nYXxvZ3h8b2dnIiA9PiBhcnJheSgiYXBwbGljYXRpb24vb2dnIiwgIkF1ZGlvIiksDQoJCQkJCQkJCSJvZnIiID0+IGFycmF5KCJhcHBsaWNhdGlvbi94LW9mciIsICJBdWRpbyIpLA0KCQkJCQkJCQkicG5nIiA9PiBhcnJheSgiaW1hZ2UvcG5nIiwgIkltYWdlIiksDQoJCQkJCQkJCSJyYXxybSIgPT4gYXJyYXkoImF1ZGlvL3gtcG4tcmVhbHZpZGVvIiwgIlZpZGVvIiksDQoJCQkJCQkJCSJ0aWZ8dGlmZiIgPT4gYXJyYXkoImltYWdlL3RpZmYiLCAiSW1hZ2UiKSwNCgkJCQkJCQkJIndhdiIgPT4gYXJyYXkoImF1ZGlvL3gtd2F2IiwgIkF1ZGlvIiksDQoJCQkJCQkJCSJ3bXZ8d21hfGFzZiIgPT4gYXJyYXkoInZpZGVvL3gtbXMtd212IiwgIkF1ZGlvIiksDQoJCQkJCQkJCSk7DQoJJG9ialRlbXBsYXRlRml4ZWQgPSAndHlwZT0iQEB0eXBlIiBkYXRhPSJAQGRhdGEiIHdpZHRoPSJAQHdpZHRoIiBoZWlnaHQ9IkBAaGVpZ2h0IiBAQG90aGVycyAnOw0KCSRvYmpUZW1wbGF0ZSA9IGFycmF5KA0KCQkiRmxhc2giID0+IGFycmF5KCc8b2JqZWN0ICcgLiRvYmpUZW1wbGF0ZUZpeGVkLiAnaWQ9IkBAaWQiPjxwYXJhbSBuYW1lPSJtb3ZpZSIgdmFsdWU9IkBAZGF0YSIgLz4nLCAnPC9vYmplY3Q+JyksDQoJCSJTV0ZPYmplY3QiID0+IGFycmF5KCc8c2NyaXB0IHR5cGU9IkBAdHlwZSIgZGVmZXI9ImRlZmVyIj4nLm4uJ3ZhciBAQHVpZCA9IG5ldyBTV0ZPYmplY3QoIkBAZGF0YSIsICJAQGlkIiwgIkBAd2lkdGgiLCAiQEBoZWlnaHQiLCAiQEBwbGF5ZXJ2ZXJzaW9uIiwgIkBAYmFja2NvbG9yIj4nLm4sICdAQHVpZC53cml0ZSgiQEBlbGVtZW50aWQiKTsnLm4uJzwvc2NyaXB0PicubiksDQoJCSJBdWRpbyIgPT4gYXJyYXkoJzxvYmplY3QgJyAuJG9ialRlbXBsYXRlRml4ZWQuICc+PHBhcmFtIG5hbWU9InNyYyIgdmFsdWU9IkBAZGF0YSIgLz4nLCAnPC9vYmplY3Q+JyksDQoJCSJWaWRlbyIgPT4gYXJyYXkoJzxvYmplY3QgJyAuJG9ialRlbXBsYXRlRml4ZWQuICc+JywgJzwvb2JqZWN0PicpLA0KCQkiSW1hZ2UiID0+IGFycmF5KCc8aW1nIHNyYz0iQEBkYXRhIiB3aWR0aD0iQEB3aWR0aCIgaGVpZ2h0PSJAQGhlaWdodCIgQEBvdGhlcnMgLz4nLCAnJyksDQoJCSk7DQoNCgkvLyAqKiBwbHVnaW4gb3B0aW9ucw0KCWlmIChpc19hcnJheSgkYXR0cykpIGV4dHJhY3QoJGF0dHMpOw0KCSRjYXRpZG9wdHMgPSBpc3NldCgkY2F0ZWdvcnkpID8gdHJ1ZSA6IGZhbHNlOw0KCSRjYXRlZ29yeSA9IGlzc2V0KCRjYXRlZ29yeSkgPyBkb1NsYXNoKCRjYXRlZ29yeSkgOiAiIjsNCgkkbWF0Y2hfdGV4dCA9IGlzc2V0KCRtYXRjaF90ZXh0KSA/ICRtYXRjaF90ZXh0IDogIiI7DQoJJGF2b2lkX3RleHQgPSBpc3NldCgkYXZvaWRfdGV4dCkgPyAkYXZvaWRfdGV4dCA6ICIiOw0KCSRtb2RlID0gKGlzc2V0KCRtb2RlKSAmJiBpbl9hcnJheSgkbW9kZSwkbW9kZXMpKSA/ICRtb2RlIDogJG1vZGVzWzBdOw0KCSRyZWZlcmVyID0gaXNzZXQoJHJlZmVyZXIpID8gJHJlZmVyZXIgOiAiYmlkIjsNCgkkbGltaXQgPSBpc3NldCgkbGltaXQpID8gJGxpbWl0OiAiMSI7DQoJJGltZ2NsYXNzID0gaXNzZXQoJGltZ2NsYXNzKSA/ICRpbWdjbGFzcyA6ICIiOw0KCSRpZF9wcmVmaXggPSBpc3NldCgkaWRfcHJlZml4KSA/ICRpZF9wcmVmaXggOiAiYXJ0aWNsZS0iOw0KCSRsaW5rX3ByZWZpeCA9IGlzc2V0KCRsaW5rX3ByZWZpeCkgPyAkbGlua19wcmVmaXggOiAiIjsNCgkkbGlua19pbiA9IChpc3NldCgkbGlua19pbikgJiYgaW5fYXJyYXkoJG1vZGUuIjoiLiRsaW5rX2luLCRsaW5rSW4pKSA/ICRsaW5rX2luIDogJGxpbmtJblswXTsNCgkkbnZfZGVsaW0gPSBpc3NldCgkbnZfZGVsaW0pID8gJG52X2RlbGltIDogIj0iOw0KCSRzdWJjYXRzID0gaXNzZXQoJHN1YmNhdHMpID8gdHJ1ZSA6IGZhbHNlOw0KCSR0aHVtYiA9IGlzc2V0KCR0aHVtYikgPyB0cnVlIDogZmFsc2U7DQoJJHJhd191cmwgPSBpc3NldCgkcmF3X3VybCkgPyB0cnVlIDogZmFsc2U7DQoJJGFsd2F5c19kaXNwbGF5ID0gaXNzZXQoJGFsd2F5c19kaXNwbGF5KSA/ICRhbHdheXNfZGlzcGxheSA6ICIwIjsNCgkkdGFyZ2V0ID0gaXNzZXQoJHRhcmdldCkgPyAnIHRhcmdldD0iJyAuJHRhcmdldC4gJyInIDogIiI7DQoJJGNvdW50X2Rvd25sb2FkcyA9IChpc3NldCgkY291bnRfZG93bmxvYWRzKSAmJiAkY291bnRfZG93bmxvYWRzPT0iMSIpID8gdHJ1ZSA6IGZhbHNlOw0KCSRmaWxlc19kaXIgPSBpc3NldCgkZmlsZXNfZGlyKSA/ICRmaWxlc19kaXIgOiAiZmlsZXMiOw0KCSRub19wbHVnX3RleHQgPSBpc3NldCgkbm9fcGx1Z190ZXh0KSA/ICRub19wbHVnX3RleHQgOiAiIjsNCgkkZ2xvYmFsX3BhcmFtcyA9IGlzc2V0KCRnbG9iYWxfcGFyYW1zKSA/ICRnbG9iYWxfcGFyYW1zIDogIiI7DQoNCgkvLyBFeHBlcmltZW50YWw6IG5lZWRzIHF1b3RlLWFiaWxpdHkgZml4aW5nDQovLwlpZiAoaXNzZXQoJHRlbXBsYXRlcykpIHsNCi8vCQlmb3JlYWNoIChleHBsb2RlKCIsIiwgJHRlbXBsYXRlcykgYXMgJHRTdHJpbmcpIHsNCi8vCQkJJHRJdGVtcyA9IGV4cGxvZGUoIjo6IiwkdFN0cmluZyk7DQovLwkJCSRvYmpUZW1wbGF0ZVt0cmltKCR0SXRlbXNbMF0pXSA9ICRvYmpUZW1wbGF0ZUZpeGVkLnRyaW0oJHRJdGVtc1sxXSk7DQovLwkJfQ0KLy8JfQ0KDQoJLy8gRmluZCBvdXQgaWYgbm9fcGx1Z190ZXh0IGlzIGEgZm9ybSBhbmQgaGFuZGxlIGFjY29yZGluZ2x5DQoJJG5vcGx1ZyA9IHNtZF9zcGxpdCgkbm9fcGx1Z190ZXh0LCBmYWxzZSwgIjoiKTsNCglpZiAoY291bnQoJG5vcGx1ZykgPiAwICYmICRub3BsdWdbMF0gPT0gInR4cGZvcm0iKSB7DQoJCSRub19wbHVnX3RleHQgPSBwYXJzZV9mb3JtKCRub3BsdWdbMV0pOw0KCX0NCg0KCSRjb21wYXJlVG9PcHRzID0gYXJyYXkoKTsNCglpZiAoaXNzZXQoJGNvbXBhcmVfdG8pKSB7DQoJCSRjdExpc3QgPSBwcmVnX3NwbGl0KCcvWyxcc10rLycsJGNvbXBhcmVfdG8sLTEsUFJFR19TUExJVF9OT19FTVBUWSk7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkY3RMaXN0KTsgJGlkeCsrKSB7DQoJCQlpZihpbl9hcnJheSgkbW9kZS4iOiIuJGN0TGlzdFskaWR4XSwkY29tcGFyZVRvKSkgew0KCQkJCSRjb21wYXJlVG9PcHRzW10gPSAkY3RMaXN0WyRpZHhdOw0KCQkJfQ0KCQl9DQoJfQ0KCWlmKGNvdW50KCRjb21wYXJlVG9PcHRzKSA8PSAwKSB7DQoJCS8vIEZpbmQgdGhlIGZpcnN0IGVudHJ5IG1hdGNoaW5nICRtb2RlIGFuZCB1c2UgdGhhdA0KCQlmb3JlYWNoICgkY29tcGFyZVRvIGFzICRjbXApIHsNCgkJCWlmIChzdHJwb3MoJGNtcCwgJG1vZGUuIjoiKSA9PT0gMCkgew0KCQkJCSRjb21wYXJlVG9PcHRzW10gPSBzdWJzdHIoJGNtcCxzdHJsZW4oJG1vZGUpKzEpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLy8gKiogaW5pdCB2YXJpYWJsZXMNCgkkd2hlcmUgPSAiIjsNCgkkZmllbGRzID0gKCRtb2RlPT0iaW1hZ2UiKSA/ICJpZCwgZXh0LCBjYXB0aW9uLCBhbHQiIDogImlkLCBmaWxlbmFtZSwgZGVzY3JpcHRpb24sIHN0YXR1cywgc2l6ZSI7DQoJJGRiVGFibGUgPSAoJG1vZGU9PSJpbWFnZSIpID8gInR4cF9pbWFnZSIgOiAidHhwX2ZpbGUiOw0KCSRtYXRjaEFycmF5ID0gYXJyYXkoKTsNCgkkYXZvaWRBcnJheSA9IGFycmF5KCk7DQoJJG1hdGNoVmFycyA9IGFycmF5KCI/YyIsICI/cyIsICI/dCIsICI/aWQiLCAiP2ZpZWxkIik7DQoJJHdoZXJlQU5EID0gYXJyYXkoKTsNCg0KCS8vICoqIHByb2Nlc3MgbWF0Y2hfdGV4dA0KCWlmICgkbWF0Y2hfdGV4dCAhPSAiIiApIHsNCgkJLy8gQ29udmVydCB0aGUgc3RyaW5nIGludG8gYW4gU1FMLXN0eWxlICdpbicgbGlzdC4NCgkJLy8gUHJvY2VzcyB0aGUgc3BlY2lhbCAoJz9zb21ldGhpbmcnKSBjYXNlcyB0b28uDQoJCSRyZXRBcnJheSA9IHNtZF9nZXRPcHRzKCRtYXRjaF90ZXh0LCAkbWF0Y2hWYXJzLCAkaWRfcHJlZml4LCBmYWxzZSk7DQoJCSRtYXRjaEFycmF5ID0gJHJldEFycmF5WzBdOw0KDQoJCS8vIE1ha2UgdXAgdGhlIFdIRVJFIHN0YXRlbWVudCBmcm9tIHRoZSBjb21iaW5lZCBsaXN0IG9mIG1hdGNoZXMuDQoJCS8vIFRoZSBjYXRlZ29yaWVzL2ltYWdlIElEcyBhcmUgT1JlZCB0b2dldGhlciBpbiBicmFja2V0cyBmaXJzdA0KCQkvLyBiZWZvcmUgdGhlIG5lZ2F0aW9uIG9wdGlvbnMgYXJlIHRhY2tlZCBvbiBhcyBBTkRzIGFmdGVyd2FyZHMNCgkJJHdoZXJlVG1wID0gIiI7DQoJCSR3aGVyZU9SID0gYXJyYXkoKTsNCg0KCQlpZiAoY291bnQoJG1hdGNoQXJyYXkpID4gMCkgew0KCQkJZm9yZWFjaCAoJGNvbXBhcmVUb09wdHMgYXMgJGNvbXApIHsNCgkJCQkkaG9sZCA9IGFycmF5KCk7DQoJCQkJZm9yICgkaWR4ID0gY291bnQoJG1hdGNoQXJyYXkpOyAkaWR4ID49MDsgJGlkeC0tKSB7DQoJCQkJCWlmIChlbXB0eSgkbWF0Y2hBcnJheVskaWR4XSkpIHsNCgkJCQkJCXVuc2V0KCRtYXRjaEFycmF5WyRpZHhdKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRob2xkW10gPSAkY29tcCAuICIgTElLRSAnJSIgLiRtYXRjaEFycmF5WyRpZHhdLiAiJSciOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSR3aGVyZVRtcCA9IGltcGxvZGUoIiBPUiAiLCRob2xkKTsNCg0KCQkJCWlmICh0cmltKCR3aGVyZVRtcCkgIT0gIiIpIHsNCgkJCQkJJHdoZXJlT1JbXSA9ICR3aGVyZVRtcDsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlpZiAoY291bnQoJHdoZXJlT1IpID4gMCkgew0KCQkJJHdoZXJlQU5EW10gPSAnKCcgLmltcGxvZGUoIiBPUiAiLCR3aGVyZU9SKS4gJyknOw0KCQl9DQoJfQ0KDQoJLy8gKiogZG8gdGhlIHNhbWUgZm9yIGF2b2lkX3RleHQNCglpZiAoJGF2b2lkX3RleHQgIT0gIiIgKSB7DQoJCS8vIENvbnZlcnQgdGhlIHN0cmluZyBpbnRvIGFuIFNRTC1zdHlsZSAnaW4nIGxpc3QuDQoJCS8vIFByb2Nlc3MgdGhlIHNwZWNpYWwgKCc/c29tZXRoaW5nJykgY2FzZXMgdG9vLg0KCQkkcmV0QXJyYXkgPSBzbWRfZ2V0T3B0cygkYXZvaWRfdGV4dCwgJG1hdGNoVmFycywgJGlkX3ByZWZpeCwgZmFsc2UpOw0KCQkkYXZvaWRBcnJheSA9ICRyZXRBcnJheVswXTsNCg0KCQkvLyBNYWtlIHVwIHRoZSBXSEVSRSBzdGF0ZW1lbnQgZnJvbSB0aGUgY29tYmluZWQgbGlzdCBvZiBOT1QgbWF0Y2hlcy4NCgkJJHdoZXJlVG1wID0gIiI7DQoJCSR3aGVyZU9SID0gYXJyYXkoKTsNCg0KCQlpZiAoY291bnQoJGF2b2lkQXJyYXkpID4gMCkgew0KCQkJZm9yZWFjaCAoJGNvbXBhcmVUb09wdHMgYXMgJGNvbXApIHsNCgkJCQkkaG9sZCA9IGFycmF5KCk7DQoJCQkJZm9yICgkaWR4ID0gY291bnQoJGF2b2lkQXJyYXkpOyAkaWR4ID49MDsgJGlkeC0tKSB7DQoJCQkJCWlmIChlbXB0eSgkYXZvaWRBcnJheVskaWR4XSkpIHsNCgkJCQkJCXVuc2V0KCRhdm9pZEFycmF5WyRpZHhdKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRob2xkW10gPSAkY29tcCAuICIgTElLRSAnJSIgLiRhdm9pZEFycmF5WyRpZHhdLiAiJSciOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSR3aGVyZVRtcCA9IGltcGxvZGUoIiBPUiAiLCRob2xkKTsNCg0KCQkJCWlmICh0cmltKCR3aGVyZVRtcCkgIT0gIiIpIHsNCgkJCQkJJHdoZXJlT1JbXSA9ICR3aGVyZVRtcDsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlpZiAoY291bnQoJHdoZXJlT1IpID4gMCkgew0KCQkJJHdoZXJlQU5EW10gPSAnTk9UICgnIC5pbXBsb2RlKCIgT1IgIiwkd2hlcmVPUikuICcpJzsNCgkJfQ0KCX0NCg0KCS8vIFdvcmsgb3V0IHRoZSBjYXRlZ29yaWVzIHRvIHNlYXJjaA0KCSRjYXRzaW4gPSBhcnJheSgpOw0KCSRmdWxsQ2F0TGlzdCA9IGFycmF5KCk7DQoJJG5vdENhdExpc3QgPSBhcnJheSgpOw0KCSRjYXRWYXJzID0gYXJyYXkoIj9jIiwiP2lkIiwiP3MiLCI/dCIsIj9maWVsZCIsIiFjIiwiIWlkIiwiIXMiLCIhdCIsIiFmaWVsZCIpOw0KDQoJJHJldEFycmF5ID0gc21kX2dldE9wdHMoJGNhdGVnb3J5LCAkY2F0VmFycywgJGlkX3ByZWZpeCwgZmFsc2UpOw0KCSRmdWxsQ2F0TGlzdCA9ICRyZXRBcnJheVswXTsNCgkkbm90Q2F0TGlzdCA9ICRyZXRBcnJheVsxXTsNCg0KCS8vIGluY2x1ZGVkIGNhdGVnb3JpZXMNCgkkdG1wYSA9IGFycmF5KCk7DQoJZm9yICgkaWR4ID0gMDsgJGlkeCA8IGNvdW50KCRmdWxsQ2F0TGlzdCk7ICRpZHgrKykgew0KCQlpZiAoJHN1YmNhdHMpIHsNCgkJCSRjYXRlZ3MgPSBzbWRfZ2V0U3ViQ2F0cygkZnVsbENhdExpc3RbJGlkeF0sJG1vZGUpOw0KCQkJZm9yICgkamR4ID0gMDsgJGpkeCA8IGNvdW50KCRjYXRlZ3MpOyAkamR4KyspIHsNCgkJCQlpZiAoJGNhdGVnc1skamR4XVsnbmFtZSddICE9ICJyb290Iikgew0KCQkJCQkkdG1wYVtdID0gIiciIC4kY2F0ZWdzWyRqZHhdWyduYW1lJ10uICInIjsNCgkJCQl9DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQkkdG1wYVtdID0gIiciIC4kZnVsbENhdExpc3RbJGlkeF0uICInIjsNCgkJfQ0KCX0NCglpZiAoY291bnQoJHRtcGEpID4gMCkgew0KCQkkY2F0c2luW10gPSAiY2F0ZWdvcnkgSU4gKCIgLmltcGxvZGUoIiwiLCAkdG1wYSkuICIpIjsNCgl9DQoNCgkvLyBleGNsdWRlZCBjYXRlZ29yaWVzDQoJJHRtcGEgPSBhcnJheSgpOw0KCWZvciAoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkbm90Q2F0TGlzdCk7ICRpZHgrKykgew0KCQlpZiAoJHN1YmNhdHMpIHsNCgkJCSRjYXRlZ3MgPSBzbWRfZ2V0U3ViQ2F0cygkbm90Q2F0TGlzdFskaWR4XSwkbW9kZSk7DQoJCQlmb3IgKCRqZHggPSAwOyAkamR4IDwgY291bnQoJGNhdGVncyk7ICRqZHgrKykgew0KCQkJCWlmICgkY2F0ZWdzWyRqZHhdWyduYW1lJ10gIT0gInJvb3QiKSB7DQoJCQkJCSR0bXBhW10gPSAiJyIgLiRjYXRlZ3NbJGpkeF1bJ25hbWUnXS4gIiciOw0KCQkJCX0NCgkJCX0NCgkJfSBlbHNlIHsNCgkJCSR0bXBhW10gPSAiJyIgLiRub3RDYXRMaXN0WyRpZHhdLiAiJyI7DQoJCX0NCgl9DQoJaWYgKGNvdW50KCR0bXBhKSA+IDApIHsNCgkJJGNhdHNpbltdID0gImNhdGVnb3J5IE5PVCBJTiAoIiAuaW1wbG9kZSgiLCIsICR0bXBhKS4gIikiOw0KCX0NCg0KCWlmIChjb3VudCgkY2F0c2luKSA+IDApIHsNCgkJJHdoZXJlQ2F0ID0gaW1wbG9kZSgiIEFORCAiLCAkY2F0c2luKTsNCgl9IGVsc2Ugew0KCQkvLyBJc3N1ZSBhIG5vbi1leGlzdGVudCBjYXRlZ29yeSBpZiBhbGwgdGhlIHN1cHBsaWVkIGNhdGVnb3JpZXMgYXJlIGJvZ3VzLg0KCQkvLyBUaGlzIGVuc3VyZXMgbm8gbWF0Y2g6IHdpdGhvdXQgaXQsIHRoZSB3aG9sZSBpbWFnZSBwb29sIHdvdWxkIGJlIHVzZWQNCgkJJHdoZXJlQ2F0ID0gImNhdGVnb3J5IExJS0UgJyIgLiAoKCRjYXRpZG9wdHMpID8gInNtZCIubXRfcmFuZCgpIDogIiUiKSAuICInIjsNCgl9DQoNCgkvLyAqKiBtYWtlIHVwIHRoZSBmaW5hbCBXSEVSRSBzdGF0ZW1lbnQNCgkkd2hlcmVPQiA9ICIgT1JERVIgQlkgUkFORCgpIExJTUlUICRsaW1pdCI7DQoJJHdoZXJlID0gJHdoZXJlQ2F0IC4gKChjb3VudCgkd2hlcmVBTkQpPjApID8gIiBBTkQgIiAuaW1wbG9kZSgiIEFORCAiLCR3aGVyZUFORCkgOiAiIikgLiAkd2hlcmVPQjsNCg0KCS8vICoqIHB1bGwgb3V0IHRoZSByZXF1ZXN0ZWQgb2JqZWN0cywgaG9ub3VyaW5nIHRoZSBhbHdheXNfZGlzcGxheSBsZXZlbCBpZiBub3RoaW5nJ3MgcmV0dXJuZWQNCgkkcnMgPSBzYWZlX3Jvd3MoJGZpZWxkcywgJGRiVGFibGUsICR3aGVyZSk7DQoJaWYgKCEkcnMpIHsNCgkJaWYgKCRhbHdheXNfZGlzcGxheSA+IDApIHsNCgkJCSRycyA9IHNhZmVfcm93cygkZmllbGRzLCAkZGJUYWJsZSwgJHdoZXJlQ2F0IC4gJHdoZXJlT0IpOw0KCQkJaWYgKCEkcnMpIHsNCgkJCQlpZiAoJGFsd2F5c19kaXNwbGF5ID4gMSkgew0KCQkJCQkkcnMgPSBzYWZlX3Jvd3MoJGZpZWxkcywgJGRiVGFibGUsICIxPTEiLiR3aGVyZU9CKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoJLy8gKiogZGlzcGxheSB0aGVtDQoJJHN0YXRpY3ByZWZpeCA9ICJodHRwOi8vIjsNCgkkb3V0U3RyID0gJyc7DQoJaWYoJHJzKSB7DQoJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCSRvYmpPdXQgPSAnJzsNCgkJCSRsaW5rdXJsID0gJyc7DQoJCQkkbGlua05hbWUgPSAnJzsNCgkJCSRzZXRNaW1lVHlwZSA9ICcnOw0KCQkJJHRyaW1PcHRzID0gIiBceDIyXHRcblxyXDBceDBCIjsNCgkJCSRvYmpQYXJhbXMgPSBhcnJheSgpOw0KCQkJJHRoZVBhcmFtcyA9IGFycmF5KCk7DQoJCQkkZmxhc2hWYXJzID0gYXJyYXkoKTsNCgkJCSR0ZW1wbGF0ZU9wdGlvbnMgPSBhcnJheSgpOw0KCQkJc3dpdGNoICgkbW9kZSkgew0KCQkJCWNhc2UgImltYWdlIjoNCgkJCQkJJGxpbmtOYW1lPXRyaW0oKCRsaW5rX2luPT0iYWx0IikgPyAkcm93WydhbHQnXSA6ICgoJGxpbmtfaW49PSJjYXB0aW9uIikgPyAkcm93WydjYXB0aW9uJ10gOiAiIikpOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICJmaWxlIjoNCgkJCQkJJHRoZURlc2MgPSBzbWRfc3BsaXQoJGdsb2JhbF9wYXJhbXMuJHJvd1snZGVzY3JpcHRpb24nXSwgZmFsc2UsICI7XG4iKTsNCgkJCQkJZm9yZWFjaCAoJHRoZURlc2MgYXMgJHBhcmFtcykgew0KCQkJCQkJJHBhcmFtcyA9IHRyaW0oJHBhcmFtcyk7DQoJCQkJCQlpZiAoJHBhcmFtcyAhPSAiIikgew0KCQkJCQkJCSR0aGVzZVBhcmFtcyA9IGV4cGxvZGUoJG52X2RlbGltLCAkcGFyYW1zKTsNCgkJCQkJCQkkcGFyYW1OYW1lID0gc3RydG9sb3dlcigkdGhlc2VQYXJhbXNbMF0pOw0KCQkJCQkJCWlmICgkcGFyYW1OYW1lID09ICJsaW5rX3VybCIpIHsNCgkJCQkJCQkJaWYgKCRsaW5rX2luID09ICJkZXNjcmlwdGlvbiIpIHsNCgkJCQkJCQkJCSRsaW5rTmFtZSA9IHRyaW0oJHRoZXNlUGFyYW1zWzFdLCAkdHJpbU9wdHMpOw0KCQkJCQkJCQl9DQoJCQkJCQkJfSBlbHNlIGlmICgkcGFyYW1OYW1lID09ICJtaW1lX3R5cGUiKSB7DQoJCQkJCQkJCSRzZXRNaW1lVHlwZSA9IHRyaW0oJHRoZXNlUGFyYW1zWzFdLCAkdHJpbU9wdHMpOw0KCQkJCQkJCX0gZWxzZSBpZiAoJHBhcmFtTmFtZSA9PSAiZmxhc2h2YXJzIikgew0KCQkJCQkJCQkkdmFyc3RyID0gZXhwbG9kZSgiJiIsdHJpbSgkdGhlc2VQYXJhbXNbMV0sICR0cmltT3B0cykpOw0KCQkJCQkJCQlmb3JlYWNoICgkdmFyc3RyIGFzICR2YXIpIHsNCgkJCQkJCQkJCSRudlBhaXIgPSBleHBsb2RlKCI9IiwkdmFyKTsNCgkJCQkJCQkJCSRmbGFzaFZhcnNbJG52UGFpclswXV0gPSAkbnZQYWlyWzFdOw0KCQkJCQkJCQl9DQoJCQkJCQkJfSBlbHNlIGlmIChpbl9hcnJheSgkcGFyYW1OYW1lLCRodG1sT2JqRml4ZWQpKSB7DQoJCQkJCQkJCSRvYmpQYXJhbXNbU01EX0RMTV9UUi4kcGFyYW1OYW1lXSA9IHRyaW0oJHRoZXNlUGFyYW1zWzFdLCR0cmltT3B0cyk7DQoJCQkJCQkJfSBlbHNlIGlmIChpbl9hcnJheSgkcGFyYW1OYW1lLCRodG1sT2JqUGFyYW0pKSB7DQoJCQkJCQkJCSRvYmpQYXJhbXNbU01EX0RMTV9UUi4kcGFyYW1OYW1lXSA9IHRyaW0oJHRoZXNlUGFyYW1zWzFdLCR0cmltT3B0cyk7DQoJCQkJCQkJCSR0ZW1wbGF0ZU9wdGlvbnNbJHBhcmFtTmFtZV0gPSAkcGFyYW1OYW1lLiAnPSInIC5TTURfRExNX1RSLiRwYXJhbU5hbWUuICciJzsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkkdGhlUGFyYW1zWyRwYXJhbU5hbWVdID0gdHJpbSgkdGhlc2VQYXJhbXNbMV0sJHRyaW1PcHRzKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQkvLyAqKiBoYW5kbGUgbGlua3MNCgkJCWlmIChzdHJsZW4oJGxpbmtOYW1lKSA+IDApIHsNCgkJCQlpZiAoc3Vic3RyKCRsaW5rTmFtZSwgMCwgc3RybGVuKCRzdGF0aWNwcmVmaXgpKSA9PT0gJHN0YXRpY3ByZWZpeCkgew0KCQkJCQkkbGlua1R5cGUgPSAiRlVMTCI7DQoJCQkJfSBlbHNlIGlmICgkbGlua05hbWVbMF0gPT0gJy8nKSB7DQoJCQkJCWlmICgkbGlua19wcmVmaXggPT0gJycpIHsNCgkJCQkJCSRsaW5rVHlwZSA9ICJST09UX05PX1BSRUZJWCI7DQoJCQkJCX0gZWxzZSBpZiAoc3Vic3RyKCRsaW5rX3ByZWZpeCwgMCwgc3RybGVuKCRzdGF0aWNwcmVmaXgpKSA9PT0gJHN0YXRpY3ByZWZpeCkgew0KCQkJCQkJJGxpbmtUeXBlID0gIkZVTExfUFJFRklYIjsNCgkJCQkJfSBlbHNlIGlmICgkbGlua19wcmVmaXhbMF0gPT0gJy8nKSB7DQoJCQkJCQkkbGlua1R5cGUgPSAiUk9PVCI7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkbGlua1R5cGUgPSAiUkVMQVRJVkUiOw0KCQkJCQl9DQoJCQkJfSBlbHNlIGlmICgkbGlua19wcmVmaXggPT0gJycpIHsNCgkJCQkJJGxpbmtUeXBlID0gIlJFTEFUSVZFIjsNCgkJCQl9IGVsc2UgaWYgKCRsaW5rX3ByZWZpeFswXSA9PSAnLycpIHsNCgkJCQkJJGxpbmtUeXBlID0gIlJPT1QiOw0KCQkJCX0gZWxzZSBpZiAoc3Vic3RyKCRsaW5rX3ByZWZpeCwgMCwgc3RybGVuKCRzdGF0aWNwcmVmaXgpKSA9PT0gJHN0YXRpY3ByZWZpeCkgew0KCQkJCQkkbGlua1R5cGUgPSAiRlVMTF9QUkVGSVgiOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRsaW5rVHlwZSA9ICJSRUxBVElWRSI7DQoJCQkJfQ0KCQkJCXN3aXRjaCAoJGxpbmtUeXBlKSB7DQoJCQkJCWNhc2UgIkZVTEwiOg0KCQkJCQkJJGxpbmt1cmwgPSAkbGlua05hbWU7DQoJCQkJCQlicmVhazsNCgkJCQkJY2FzZSAiUk9PVF9OT19QUkVGSVgiOg0KCQkJCQkJJGxpbmt1cmwgPSBzaXRlX3VybCgkYXR0cykgLiBzdWJzdHIoJGxpbmtOYW1lLDEpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgIlJPT1QiOg0KCQkJCQkJJGxpbmt1cmwgPSBzaXRlX3VybCgkYXR0cykgLiBzdWJzdHIoJGxpbmtfcHJlZml4LDEpIC4gJGxpbmtOYW1lOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgIlJFTEFUSVZFIjoNCgkJCQkJZGVmYXVsdDoNCgkJCQkJCSRsaW5rdXJsID0gJGxpbmtfcHJlZml4IC4gJGxpbmtOYW1lOw0KCQkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KCQkJLy8gKiogdGhyb3cgb2JqZWN0IG91dCB0byB0aGUgcGFnZQ0KCQkJaWYgKCRyYXdfdXJsKSB7DQoJCQkJc3dpdGNoICgkbW9kZSkgew0KCQkJCQljYXNlICJpbWFnZSI6DQoJCQkJCQkkb3V0U3RyID0gaHUuJGltZ19kaXIgLiAiLyIgLiRyb3dbJ2lkJ10gLiAoKCR0aHVtYikgPyAndCcgOiAnJykgLiAkcm93WydleHQnXTsNCgkJCQkJCWJyZWFrOw0KCQkJCQljYXNlICJmaWxlIjoNCgkJCQkJCSRvdXRTdHIgPSAoJGNvdW50X2Rvd25sb2FkcykgPyBodS5nVHh0KCdmaWxlX2Rvd25sb2FkJykuJy8nLiRyb3dbJ2lkJ10gOiBodS4kZmlsZXNfZGlyLicvJy4kcm93WydmaWxlbmFtZSddOw0KCQkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQlzd2l0Y2goJG1vZGUpIHsNCgkJCQkJY2FzZSAiaW1hZ2UiOg0KCQkJCQkJJGltZ09wdGlvbnMgPSBhcnJheSgiaWQiID0+ICRyb3dbJ2lkJ10pOw0KCQkJCQkJaWYgKCRpbWdjbGFzcyAhPSAnJykgew0KCQkJCQkJCSRpbWdPcHRpb25zWyJjbGFzcyJdID0gJGltZ2NsYXNzOw0KCQkJCQkJfQ0KCQkJCQkJJG9iak91dCA9ICgoJHRodW1iKSA/IHRodW1ibmFpbCgkaW1nT3B0aW9ucykgOiBpbWFnZSgkaW1nT3B0aW9ucykpOw0KCQkJCQkJYnJlYWs7DQoJCQkJCWNhc2UgImZpbGUiOg0KCQkJCQkJJHRlbXBsYXRlU3RhcnQgPSAnJzsNCgkJCQkJCSR0ZW1wbGF0ZUVuZCA9ICcnOw0KCQkJCQkJJGZpbGVQYXRoID0gYnVpbGRfZmlsZV9wYXRoKCRmaWxlX2Jhc2VfcGF0aCwgJHJvd1snZmlsZW5hbWUnXSk7DQoJCQkJCQkkZmlsZURMID0gKCRjb3VudF9kb3dubG9hZHMpID8gaHUuZ1R4dCgnZmlsZV9kb3dubG9hZCcpLicvJy4kcm93WydpZCddIDogaHUuJGZpbGVzX2Rpci4nLycuJHJvd1snZmlsZW5hbWUnXTsNCgkJCQkJCWlmIChmaWxlX2V4aXN0cygkZmlsZVBhdGgpKSB7DQoJCQkJCQkJLy8gR2V0IHRoZSBmaWxlIGV4dGVuc2lvbiBhbmQgbG9vayBpdCB1cCBpbiB0aGUgdGFibGUNCgkJCQkJCQkkcGF0aEJpdCA9IHBhdGhpbmZvKCRmaWxlUGF0aCk7DQoJCQkJCQkJJHBhdGhFeHQgPSAoJHNldE1pbWVUeXBlKSA/ICRzZXRNaW1lVHlwZSA6ICRwYXRoQml0WydleHRlbnNpb24nXTsNCgkJCQkJCQlmb3JlYWNoICgkb2JqTWltZVR5cGUgYXMgJGV4dHMgPT4gJHR5cGVzICkgew0KCQkJCQkJCQkkZXh0TGlzdCA9IGV4cGxvZGUoU01EX0RMTV9SRUMsJGV4dHMpOw0KCQkJCQkJCQkvLyBTZXQgc29tZSBzZW5zaWJsZSBkZWZhdWx0cyBpZiB0aGUgbWFuZGF0b3J5IG9wdGlvbnMgYXJlIG5vdCBzdXBwbGllZA0KCQkJCQkJCQlpZiAoaW5fYXJyYXkoJHBhdGhFeHQsICRleHRMaXN0KSkgew0KCQkJCQkJCQkJaWYgKCFhcnJheV9rZXlfZXhpc3RzKFNNRF9ETE1fVFIuInR5cGUiLCAkb2JqUGFyYW1zKSkgew0KCQkJCQkJCQkJCSRvYmpQYXJhbXNbU01EX0RMTV9UUi4idHlwZSJdID0gJHR5cGVzWzBdOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJaWYgKCFhcnJheV9rZXlfZXhpc3RzKFNNRF9ETE1fVFIuImRhdGEiLCAkb2JqUGFyYW1zKSkgew0KCQkJCQkJCQkJCSRvYmpQYXJhbXNbU01EX0RMTV9UUi4iZGF0YSJdID0gJGZpbGVETDsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCWlmICghYXJyYXlfa2V5X2V4aXN0cyhTTURfRExNX1RSLiJpZCIsICRvYmpQYXJhbXMpKSB7DQoJCQkJCQkJCQkJJG9ialBhcmFtc1tTTURfRExNX1RSLiJpZCJdID0gImlkIi5tdF9yYW5kKCk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlpZiAoIWFycmF5X2tleV9leGlzdHMoU01EX0RMTV9UUi4id2lkdGgiLCAkb2JqUGFyYW1zKSkgew0KCQkJCQkJCQkJCSRvYmpQYXJhbXNbU01EX0RMTV9UUi4id2lkdGgiXSA9ICRzbWRfcmJhbkxhbmctPmdUeHQoJ3dpZHRoJyk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlpZiAoIWFycmF5X2tleV9leGlzdHMoU01EX0RMTV9UUi4iaGVpZ2h0IiwgJG9ialBhcmFtcykpIHsNCgkJCQkJCQkJCQkkb2JqUGFyYW1zW1NNRF9ETE1fVFIuImhlaWdodCJdID0gJHNtZF9yYmFuTGFuZy0+Z1R4dCgnaGVpZ2h0Jyk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlpZiAoIWFycmF5X2tleV9leGlzdHMoU01EX0RMTV9UUi4icGxheWVydmVyc2lvbiIsICRvYmpQYXJhbXMpKSB7DQoJCQkJCQkJCQkJJG9ialBhcmFtc1tTTURfRExNX1RSLiJwbGF5ZXJ2ZXJzaW9uIl0gPSAiOCI7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlpZiAoIWFycmF5X2tleV9leGlzdHMoU01EX0RMTV9UUi4iYmFja2NvbG9yIiwgJG9ialBhcmFtcykpIHsNCgkJCQkJCQkJCQkkb2JqUGFyYW1zW1NNRF9ETE1fVFIuImJhY2tjb2xvciJdID0gJyNmZmZmZmYnOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJaWYgKCFhcnJheV9rZXlfZXhpc3RzKFNNRF9ETE1fVFIuImVsZW1lbnRpZCIsICRvYmpQYXJhbXMpKSB7DQoJCQkJCQkJCQkJJG9ialBhcmFtc1tTTURfRExNX1RSLiJlbGVtZW50aWQiXSA9ICJmbGFzaGNvbnRlbnRfIi5tdF9yYW5kKCk7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQlpZiAoIWFycmF5X2tleV9leGlzdHMoU01EX0RMTV9UUi4idWlkIiwgJG9ialBhcmFtcykpIHsNCgkJCQkJCQkJCQkkb2JqUGFyYW1zW1NNRF9ETE1fVFIuInVpZCJdID0gInNtZF8iLm10X3JhbmQoKTsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJCSR1aWQgPSAkb2JqUGFyYW1zW1NNRF9ETE1fVFIuInVpZCJdOw0KCQkJCQkJCQkJaWYgKCRpbWdjbGFzcyAhPSAnJyAmJiAhYXJyYXlfa2V5X2V4aXN0cyhTTURfRExNX1RSLiJjbGFzcyIsICRvYmpQYXJhbXMpKSB7DQoJCQkJCQkJCQkJJG9ialBhcmFtc1tTTURfRExNX1RSLiJjbGFzcyJdID0gJGltZ2NsYXNzOw0KCQkJCQkJCQkJCSR0ZW1wbGF0ZU9wdGlvbnNbXSA9ICdjbGFzcz0iJyAuU01EX0RMTV9UUi4gJ2NsYXNzIic7DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQkkdGVtcGxhdGVTdGFydCA9ICRvYmpUZW1wbGF0ZVskdHlwZXNbMV1dWzBdOw0KCQkJCQkJCQkJJHRlbXBsYXRlRW5kID0gJG9ialRlbXBsYXRlWyR0eXBlc1sxXV1bMV07DQoJCQkJCQkJCQkkdGVtcGxhdGVTdGFydCA9IHN0cl9yZXBsYWNlKFNNRF9ETE1fVFIuIm90aGVycyIsIGltcGxvZGUoIiAiLCAkdGVtcGxhdGVPcHRpb25zKSwgJHRlbXBsYXRlU3RhcnQpOw0KCQkJCQkJCQkJJHRlbXBsYXRlRW5kID0gc3RyX3JlcGxhY2UoU01EX0RMTV9UUi4ib3RoZXJzIiwgaW1wbG9kZSgiICIsICR0ZW1wbGF0ZU9wdGlvbnMpLCAkdGVtcGxhdGVFbmQpOw0KCQkJCQkJCQl9DQoJCQkJCQkJfQ0KCQkJCQkJCSRvYmpPdXQgLj0gc3RydHIoJHRlbXBsYXRlU3RhcnQsICRvYmpQYXJhbXMpOw0KCQkJCQkJCWlmICgkc2V0TWltZVR5cGUgPT0gInN3byIpIHsNCgkJCQkJCQkJZm9yZWFjaCAoJHRoZVBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkgew0KCQkJCQkJCQkJJG9iak91dCAuPSAkdWlkLicuYWRkUGFyYW0oIicuJGtleS4nIiwgIicuJHZhbHVlLiciKTsnLm47DQoJCQkJCQkJCX0NCgkJCQkJCQkJZm9yZWFjaCAoJGZsYXNoVmFycyBhcyAkbmFtZSA9PiAkdmFsKSB7DQoJCQkJCQkJCQkkb2JqT3V0IC49ICR1aWQuJy5hZGRWYXJpYWJsZSgiJy4kbmFtZS4nIiwgIicuJHZhbC4nIik7Jy5uOw0KCQkJCQkJCQl9DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJZm9yZWFjaCAoJHRoZVBhcmFtcyskZmxhc2hWYXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJCQkJCQkJCQkkb2JqT3V0IC49ICc8cGFyYW0gbmFtZT0iJy4ka2V5LiciIHZhbHVlPSInLiR2YWx1ZS4nIiAvPic7DQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQkJJG9iak91dCAuPSAoKCRzZXRNaW1lVHlwZT09InN3byIpID8gJycgOiAkbm9fcGx1Z190ZXh0KSAuIHN0cnRyKCR0ZW1wbGF0ZUVuZCwgJG9ialBhcmFtcykubjsNCgkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KCQkJCX0NCg0KCQkJCWlmICgoJGxpbmtfaW4gIT0gIiIpICYmIChzdHJsZW4oJGxpbmt1cmwpID4gMCkpIHsNCgkJCQkJaWYgKCRyZWZlcmVyICE9ICIiKSB7DQoJCQkJCQkkcmVmZXJ0eHQgPSBzbWRfYWRkUVNWYXIoJGxpbmt1cmwsICRyZWZlcmVyLCAkcm93WydpZCddKTsNCgkJCQkJfSBlbHNlIHsNCgkJCQkJCSRyZWZlcnR4dCA9ICRsaW5rdXJsOw0KCQkJCQl9DQoJCQkJCSRvdXRTdHIgLj0gJzxhIGhyZWY9IicgLiRyZWZlcnR4dC4gJyInIC4kdGFyZ2V0LiAnPicgLiAkb2JqT3V0LiAnPC9hPic7DQoJCQkJfSBlbHNlIHsNCgkJCQkJJG91dFN0ciAuPSAkb2JqT3V0Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0gZWxzZSB7DQoJCXJldHVybjsNCgl9DQoNCglyZXR1cm4gJG91dFN0cjsNCn0iO3M6NDoidHlwZSI7czoxOiIwIjtzOjM6Im1kNSI7czozMjoiNjk5MTg3ZDI3Y2VlNjViYjIyNTljNjE5NGRhNDhlOTciO30=