# Name: ied_plugin_composer v0.91 # Type: Admin only plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjY6ImF1dGhv ciI7czo0MzoiWXVyYSBMaW5ueWsgLyBTdGVmIERhd3NvbiAvIFN0ZXZlIERpY2tpbnNvbiI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjQ6IjAuOTEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMyOiJXcml0ZSBhbmQg cHVibGlzaCBwbHVnaW5zIGVhc2lseSI7czo0OiJoZWxwIjtzOjI5OTA4OiIJPHA+PGRpdiBp ZD0iaWVkX2hlbHAiPjwvcD4KCgk8aDE+SW5zcGlyZWQgcGx1Z2luIGNvbXBvc2VyPC9oMT4K Cgk8cD5UaGlzIHBsdWdpbiBjcmVhdGVzIGEgbmV3IHBhZ2UgdW5kZXIgdGhlICYjODIxNjtF eHRlbnNpb25zJiM4MjE3OyB0YWIgd2hlcmUgeW91IGNhbiBlZGl0IHBsdWdpbnMgdGhhdCBh cmUgYWxyZWFkeSBpbnN0YWxsZWQgaW4gVGV4dHBhdHRlcm4gYW5kIHJlZ2lzdGVyIG5ldyBw bHVnaW5zLjwvcD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJ CTxsaT5DcmVhdGUsIGVkaXQgb3IgdXBsb2FkIHBsdWdpbiBjb2RlIGFuZCBkb2N1bWVudGF0 aW9uLCB0aGVuIHB1Ymxpc2ggeW91ciB3YXJlcyBpbiB0aGUgc3RhbmRhcmQgPHNwYW4gY2xh c3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+PC9zcGFuPiBwbHVnaW4g Zm9ybWF0IChzZWUgYW4gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fk cy9leGFtcGxlX3BsdWdpbl90ZW1wbGF0ZS50eHQiPmV4YW1wbGU8L2E+KTwvbGk+CgkJPGxp PkZ1bGwgc3VwcG9ydCBmb3IgdGhlIG9mZmljaWFsIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3 c29uLmNvbS9kb3dubG9hZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRlLnR4dCI+emVtX3RwbC5w aHAgcGx1Z2luIHRlbXBsYXRlPC9hPi4gVGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29u LmNvbS9kb3dubG9hZHMvZW1wdHlfcGx1Z2luX3RlbXBsYXRlX2NvZGVfZmlyc3QudHh0Ij5t b2RpZmllZCB2ZXJzaW9uPC9hPiBieSA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMubmV0 Y2FydmluZy5jb20vcGx1Z2lucy9tb2RpZmllZC1wbHVnaW4tY29tcGlsZXIiPm5ldC1jYXJ2 ZXI8L2E+IGFsc28gaW5jb3Jwb3JhdGVzIGEgJiM4MjE2O3N0eWxlJiM4MjE3OyBzZWN0aW9u IGZvciBlYXN5IHN0eWxpbmcgb2YgeW91ciBoZWxwIHRleHQuIFRoZSBQbHVnaW4gQ29tcG9z ZXIgbG9va3MgZm9yIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+Q1NT PC9zcGFuPjwvc3Bhbj4gc2VjdGlvbnMgaW4gdGhlIHRlbXBsYXRlIGFuZCB3aWxsIHVzZSB0 aGVtIGFjY29yZGluZ2x5LiBJdCB3aWxsIGFsc28gcmVhZCA8c3BhbiBjbGFzcz0iY2FwcyI+ PHNwYW4gY2xhc3M9ImNhcHMiPlNWTjwvc3Bhbj48L3NwYW4+ICRMYXN0Q2hhbmdlZFJldmlz aW9uIGVudHJpZXMgKHRoYW5rcyBuZXQtY2FydmVyKTwvbGk+CgkJPGxpPkV4cG9ydCBwbHVn aW5zIGluIGEgdmFyaWV0eSBvZiBmb3JtYXRzLCBhbGxvd2luZyB5b3UgdG8gc3dpdGNoIGJl dHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2luIGNvbXBvc2VyIG9yIHlvdXIgZmF2b3VyaXRl IGVkaXRpbmcgcHJvZ3JhbSwgdGVzdCB0aGUgZmlsZSBpbiB0aGUgcGx1Z2luX2NhY2hlX2Rp ciwgdGhlbiBpbXBvcnQgaXQgYmFjayBpbnRvIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBj bGFzcz0iY2FwcyI+VFhQPC9zcGFuPjwvc3Bhbj4gd2l0aCB0aGUgaGVscCBvZiB0aGUgQ29t cG9zZXIgYW5kIHB1Ymxpc2ggeW91ciBwbHVnaW4gZm9yIGV2ZXJ5b25lLiBMb29rIGF0IHRo ZSBib3R0b20gb2YgdGhlIFBsdWdpbiBDb21wb3NlciYjODIxNztzIDxhIGhyZWY9IiNlZGl0 cGFnZSI+RWRpdCBwYWdlPC9hPiBmb3IgdGhlIG9wdGlvbnM7IGp1c3QgcmVtZW1iZXIgdG8g c2F2ZSB5b3VyIGNoYW5nZXMgYmVmb3JlIGV4cG9ydGluZyBvciBjb3B5aW5nL3Bhc3Rpbmcg dGhlIGNvZGUhIFlvdSBjYW4gZXhwb3J0IGFzOgoJPHVsPgoJCTxsaT5hIHN0YW5kYXJkIEJB U0U2NC1lbmNvZGVkIHRleHQgZmlsZTwvbGk+CgkJPGxpPmEgZ3ppcHBlZCB2ZXJzaW9uICh1 c2VmdWwgZm9yIGxhcmdlIHBsdWdpbnMpPC9saT4KCQk8bGk+YSBwaHAgZmlsZSBpbiB0aGUg c3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+V2hlbiBl eHBvcnRpbmcsIGZpbGVzIGNhbiBiZSBzYXZlZCB3aXRoIGVpdGhlciB0aGUgY29kZSBibG9j ayBmaXJzdCBvciB0aGUgaGVscCBibG9jayBmaXJzdCwgYW5kIHlvdSBjYW4gY2hhbmdlIHRo ZSBvdXRwdXQgZmlsZW5hbWUgZm9ybWF0IHRvIHRhc3RlLiBVc2UgdGhlIDxhIGhyZWY9IiNz ZXR1cHBhZ2UiPlNldHVwIGJ1dHRvbjwvYT4gdG8gY29uZmlndXJlPC9saT4KCQk8bGk+U3Vw cG9ydCBmb3IgYWxsIHBsdWdpbiB0eXBlczoKCTx1bD4KCQk8bGk+Q2xpZW50ICsgQWRtaW48 L2xpPgoJCTxsaT5DbGllbnQtc2lkZSBvbmx5PC9saT4KCQk8bGk+QWRtaW4tc2lkZSBvbmx5 PC9saT4KCQk8bGk+TGlicmFyeSBwbHVnaW5zPC9saT4KCTwvdWw+PC9saT4KCQk8bGk+U3Vw cG9ydCBmb3Igc3BlY2lmeWluZyBhIHJlY29tbWVuZGVkIHBsdWdpbiBsb2FkIG9yZGVyIGlm IHlvdXIgcGx1Z2luIG5lZWRzIHNwZWNpYWwgcG93ZXJzLiAmIzgyMTY7NSYjODIxNzsgaXMg dGhlIGRlZmF1bHQuIE5vdGUgdGhhdCBpZiB1c2luZyB0aGUgcGx1Z2luIGNhY2hlIGRpcmVj dG9yeSB0aGlzIGZlYXR1cmUgaXMgPGVtPm9ubHkgYXZhaWxhYmxlIGlmIHRoZSA8Y29kZT4k cGx1Z2luWyZhbXA7IzM5O29yZGVyJmFtcDsjMzk7XTwvY29kZT4gc3RyaW5nIGlzIGluIHRo ZSB0ZW1wbGF0ZSB0byBiZWdpbiB3aXRoLjwvZW0+IFNvIGlmIHlvdXIgbG9hZCBvcmRlciBr ZWVwcyByZXR1cm5pbmcgdG8gJiM4MjE2OzUmIzgyMTc7LCBlZGl0IHlvdXIgdGVtcGxhdGUg ZGlyZWN0bHkgdG8gYWRkIHRoYXQgc3RyaW5nIG9yIHBhc3RlIHlvdXIgcGx1Z2luIGludG8g dGhlIHJlbGV2YW50IHBhcnRzIG9mIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5j b20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0ZS50eHQiPmVtcHR5IHBsdWdpbiB0 ZW1wbGF0ZTwvYT4gYW5kIHVwbG9hZCBpdDwvbGk+CgkJPGxpPkhlbHAgdGV4dCBjYW4gYmUg d3JpdHRlbiBpbiBUZXh0aWxlIG9yIChYKUhUTUwuIFN0eWxlcyBjYW4gYmUgYWRkZWQgdG8g dGhlIGhlbHAgc2VjdGlvbjwvbGk+CgkJPGxpPlRha2UgYWR2YW50YWdlIG9mIHRoZSA8YSBo cmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MTMw ODkiPlRpbnlNQ0UgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5XWVNJ V1lHPC9zcGFuPjwvc3Bhbj4gZWRpdG9yPC9hPiBmb3IgdGhlIGhlbHAgc2VjdGlvbiBvciA8 YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9n cm91cF9pZD0xNjQwMDgiPkVkaXQgQXJlYTwvYT4gZm9yIGNvZGUgbWFya3VwICh0aGFua3Mg dmFyaWFhcykuIFNlZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+c2V0dXA8L2E+IGFuZCA8 YSBocmVmPSIjbm90ZXMiPm5vdGVzPC9hPiBzZWN0aW9ucyBmb3IgbW9yZSBvbiB0aGVzZSBl ZGl0b3JzPC9saT4KCQk8bGk+QnVpbHQtaW4gVGV4dGlsZSBoZWxwIHZpZXdlciAodGhhbmtz IHRvIG5ldC1jYXJ2ZXImIzgyMTc7cyA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMubmV0 Y2FydmluZy5jb20vcGx1Z2lucy9wbHVnaW4taGVscC12aWV3ZXIiPlBsdWdpbiBIZWxwIFZp ZXdlcjwvYT4pIHRvIGFsbG93IHlvdSB0byBwcmV2aWV3IHlvdXIgSGVscCB0ZXh0IGR1cmlu ZyBkZXZlbG9wbWVudCAodGhlIHR3byB2aWV3ZXJzIHdpbGwgaGFwcGlseSBjby1leGlzdCBp ZiB5b3Ugd2lzaCk8L2xpPgoJCTxsaT5SZXNpemFibGUgdGV4dGFyZWEsIHBsdXMgY2hhcmFj dGVyIGxpbWl0L2NvdW50ZXJzIHNvIHRoZXJlJiM4MjE3O3MgbGVzcyBjaGFuY2Ugb2YgeW91 IG1ha2luZyB0aGUgcGx1Z2luIG9yIGRvY3MgdG9vIGJpZyB0byBmaXQgaW4gdGhlIGRhdGFi YXNlPC9saT4KCQk8bGk+U3VwcG9ydCBmb3Igc2V0dGluZyBhIGNvZGUgJiM4MjIwO3Jlc3Rv cmUgcG9pbnQmIzgyMjE7IGFuZCByb2xsaW5nIGJhY2sgdG8gdGhhdCBwb2ludCBpZiB0aGlu Z3MgZ28gc2lkZXdheXMuIEFsc28gdXNlZnVsIGZvciByZXR1cm5pbmcgcGx1Z2luIHNvdXJj ZSBjb2RlIHRvIGl0cyBhcy1pbnN0YWxsZWQgc3RhdGU8L2xpPgoJPC91bD4KCgk8aDIgaWQ9 ImF1dGhvcnMiPkF1dGhvcnM8L2gyPgoKCTxwPk9yaWdpbmFsIHBsdWdpbjogPGEgaHJlZj0i aHR0cDovL2luc3BpcmVkLmtpZXYudWEvZmVlZGJhY2svIj5ZdXJhIExpbm55azwvYT48YnIg Lz4KCk1vZGlmaWNhdGlvbnMgKHYwLjUrKTogPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24u Y29tL2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT48YnIgLz4KCkEgdG91Y2ggb2YgY2xh c3M6IDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1Z2lucy5uZXRjYXJ2aW5nLmNvbS9jb250YWN0 Ij5TdGV2ZSBEaWNraW5zb248L2E+PGJyIC8+CgpQbHVzIGhlbHAgZnJvbSBhIGhvc3Qgb2Yg Zm9ydW0gY29udHJpYnV0b3JzIHRvbyBudW1lcm91cyB0byBtZW50aW9uLiBZb3Uga25vdyB3 aG8geW91IGFyZSA7LSk8L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gLyBV bmluc3RhbGxhdGlvbjwvaDI+CgoJPHAgY2xhc3M9InJlcXVpcmVkIj5SZXF1aXJlcyA8c3Bh biBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj48L3NwYW4+IDQu Mi4wKzwvcD4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luICh2MC41IGFuZCBhYm92ZSkgZnJv bSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnN0ZWZkYXdzb24uY29tPC9h PiAocHJldmlvdXMgdmVyc2lvbnMgYXJlIHN0aWxsIGF2YWlsYWJsZSBvbiB0aGUgPGEgaHJl Zj0iaHR0cDovL2luc3BpcmVkLmtpZXYudWEvdHhwL2llZF9wbHVnaW5fY29tcG9zZXIiPklu c3BpcmVkIGhvbWVwYWdlPC9hPiksIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPjwvc3Bhbj4gQWRtaW4g LSZndDsgUGx1Z2lucyBwYWdlLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi48L3A+ CgoJPHA+VGhlIGRlZmF1bHQgcHJlZmVyZW5jZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFs bGVkLiBWaXNpdCB0aGUgRXh0ZW5zaW9ucyAtJmd0OyBQbHVnaW4gQ29tcG9zZXIgdGFiIGFu ZCBjbGljayB0aGUgU2V0dXAgYnV0dG9uIGluIHRoZSB0b3AtcmlnaHQgb2YgdGhlIHNjcmVl biB0byByZWluc3RhbGwsIGRlbGV0ZSBhbmQgc2F2ZSB0aGUgcGx1Z2luIHByZWZlcmVuY2Vz LiBTZWUgdGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNldHVwIHNlY3Rpb248L2E+IGZvciBk ZXRhaWxzLjwvcD4KCgk8cD5UbyByZW1vdmUgdGhlIFBsdWdpbiBDb21wb3NlciAobm9vb28h KSBzaW1wbHkgZGVsZXRlIHRoZSBwbHVnaW4gYXMgbm9ybWFsIGZyb20gdGhlIEFkbWluIC0m Z3Q7IFBsdWdpbnMgcGFnZS4gQWxsIHRoZSBwcmVmZXJlbmNlcyB3aWxsIGF1dG9tYXRpY2Fs bHkgYmUgcmVtb3ZlZCBhcyB3ZWxsLiA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9 ImNhcHMiPk5PVEU8L3NwYW4+PC9zcGFuPjogZGVsZXRpbmcgdGhlIHBsdWdpbiBmcm9tIHRo ZSBwbHVnaW4gY29tcG9zZXIgd2luZG93IGl0c2VsZiA8ZW0+d2lsbCBub3Q8L2VtPiBkZWxl dGUgdGhlIHByZWZlcmVuY2VzLjwvcD4KCgk8aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJ PGgzIGlkPSJsaXN0cGFnZSI+TGlzdCBwYWdlPC9oMz4KCgk8cD5UaGVyZSBpcyBhIDxhIGhy ZWY9IiNzZXR1cHBhZ2UiPnNldHVwPC9hPiBidXR0b24gdG8gYWxsb3cgeW91IHRvIGNvbmZp Z3VyZSB2YXJpb3VzIG9wdGlvbnMgaW4gdGhlIENvbXBvc2VyLCB0aGUgcmVzdCBvZiB0aGUg cGFnZSBsaXN0cyBhbGwgaW5zdGFsbGVkIHBsdWdpbnMuIFRoZSBjb2x1bW5zIGFyZTo8L3A+ CgoJPHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbjwvc3Ryb25nPiA6IGNsaWNrIHRoZSBwbHVn aW4gbmFtZSB0byA8YSBocmVmPSIjZWRpdHBhZ2UiPmVkaXQ8L2E+IGl0LiBJZiB0aGUgcGx1 Z2luIGhhcyBwcmVmZXJlbmNlcyBhc3NvY2lhdGVkIHdpdGggaXQsIHlvdSB3aWxsIGFsc28g c2VlIGFuIDxlbT5bT3B0aW9uc108L2VtPiBsaW5rPC9saT4KCQk8bGk+PHN0cm9uZz5BdXRo b3I8L3N0cm9uZz4gOiBpZiBhdmFpbGFibGUsIGNsaWNrIHRoZSBhdXRob3IgdG8gZ28gdG8g dGhlaXIgc2l0ZTwvbGk+CgkJPGxpPjxzdHJvbmc+VmVyc2lvbiAoTW9kaWZpZWQpPC9zdHJv bmc+IDogc2hvd3MgdGhlIGN1cnJlbnQgdmVyc2lvbiBudW1iZXIgYW5kIHdoZXRoZXIgdGhl IHBsdWdpbiBoYXMgYmVlbiBtb2RpZmllZCBmcm9tIHdoZW4gaXQgd2FzIGVpdGhlciBjcmVh dGVkIG9yIGluc3RhbGxlZC4gSWYgaXQgaGFzLCB5b3UgY2FuIGNsaWNrIHRoZSB2ZXJzaW9u IG51bWJlciB0byByZXN0b3JlIHRoZSBwbHVnaW4gY29kZSB0byBpdHMgaW5zdGFsbGVkIHN0 YXRlIG9yIGxhc3QgPGEgaHJlZj0iI3Jlc3RvcmUiPnJlc3RvcmUgcG9pbnQ8L2E+PC9saT4K CQk8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbjwvc3Ryb25nPiA6IGJyaWVmbHksIHdoYXQgdGhl IHBsdWdpbiBkb2VzPC9saT4KCQk8bGk+PHN0cm9uZz5QdWJsaXNoPC9zdHJvbmc+IDogdGhy ZWUgbGlua3MKCTx1bD4KCQk8bGk+PGVtPlB1Ymxpc2g8L2VtPiA6IGV4cG9ydHMgdGhlIHBs dWdpbiBhcyBhIC50eHQgZmlsZSBmb3IgZGlzdHJpYnV0aW9uIHRvIG90aGVyIFRleHRwYXR0 ZXJuIHVzZXJzPC9saT4KCQk8bGk+PGVtPlppcDwvZW0+IDogZXhwb3J0cyB0aGUgcGx1Z2lu IGFzIGEgY29tcHJlc3NlZCAoZ3ppcHBlZCkgLnR4dCBmaWxlIGZvciBkaXN0cmlidXRpb248 L2xpPgoJCTxsaT48ZW0+SGVscDwvZW0+IDogZGlzcGxheXMgdGhlICh0ZXh0aWxlIHByb2Nl c3NlZCkgcGx1Z2luIGRvY3VtZW50YXRpb24sIGlmIHRoZXJlIGlzIGFueS4gQ2FuIGFsc28g YmUgdmlld2VkIGZyb20gdGhlIEVkaXQgcGFnZTwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxz dHJvbmc+T3JkZXI8L3N0cm9uZz4gOiB0aGUgcmVjb21tZW5kZWQgcGx1Z2luIGxvYWQgb3Jk ZXIgZnJvbSAxIChsb2FkZWQgZmlyc3QpIHRvIDkgKGxvYWRlZCBsYXN0KS4gNSBpcyBkZWZh dWx0PC9saT4KCQk8bGk+PHN0cm9uZz5BY3RpdmU8L3N0cm9uZz4gOiBlbmFibGUgb3IgZGlz YWJsZSBhIHBsdWdpbiBieSBjbGlja2luZyBlbnRyaWVzIGluIHRoaXMgY29sdW1uICYjODIx MjsgdGhpcyB3aWxsIDxlbT5ub3Q8L2VtPiB0cmlnZ2VyIGFueSBlbmFibGVkL2Rpc2FibGVk IG5vdGlmaWNhdGlvbiBldmVudCBpbiB5b3VyIHBsdWdpbi4gVXNlIHRoZSBBZG1pbiAtJmd0 OyBQbHVnaW5zIHRhYiBmb3IgdGVzdGluZyB0aGlzPC9saT4KCQk8bGk+PHN0cm9uZz54PC9z dHJvbmc+IDogZGVsZXRlIHRoZSBwbHVnaW4gJiM4MjEyOyB0aGlzIHdpbGwgPGVtPm5vdDwv ZW0+IHRyaWdnZXIgdGhlICYjODIxNjtkZWxldGVkJiM4MjE3OyBub3RpZmljYXRpb24gZXZl bnQuIFVzZSB0aGUgQWRtaW4gLSZndDsgUGx1Z2lucyB0YWIgZm9yIHRlc3RpbmcgdGhpczwv bGk+Cgk8L3VsPgoKCTxwPklmIHlvdSBhcmUgdXNpbmcgdGhlIHBsdWdpbl9jYWNoZV9kaXIg KEFkbWluIC0mZ3Q7IEFkdmFuY2VkIFByZWZzKSwgYW55IHBsdWdpbnMgaW4gdGhlIHN0YW5k YXJkIHRlbXBsYXRlIGZvcm1hdCB1cGxvYWRlZCB0byB0aGlzIGRpcmVjdG9yeSB3aWxsIGJl IGF2YWlsYWJsZSBpbW1lZGlhdGVseSBmb3IgZWRpdGluZyBhbmQgdGVzdGluZy4gWW91IGNh biBlZGl0IGFuZCBwdWJsaXNoIHRoZSBwbHVnaW5zIGluIHRoZSBzYW1lIG1hbm5lciBhcyB0 aGUgcmVndWxhciwgaW5zdGFsbGVkIHBsdWdpbnMgYWJvdmUsIHdpdGggdGhlIGZvbGxvd2lu ZyBleGNlcHRpb25zOjwvcD4KCgk8b2w+CgkJPGxpPlRoZXJlIGlzIG5vIGNvbmNlcHQgb2Yg JiM4MjE2O21vZGlmaWVkJiM4MjE3OyBvciBvZiByZXN0b3JlIHBvaW50cyBhcyB0aGUgZmls ZXMgYWx3YXlzIHJlcHJlc2VudCB0aGUgbW9zdCB1cC10by1kYXRlIHZlcnNpb248L2xpPgoJ CTxsaT5DYWNoZWQgcGx1Z2lucyBhcmUgJiM4MjIwO2Fsd2F5cyBvbiYjODIyMTsgYW5kIGRv IG5vdCBuZWVkIHRvIGJlIGluc3RhbGxlZC4gVG8gZGVhY3RpdmF0ZSB0aGUgcGx1Z2luIHRo ZSBmaWxlIG11c3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5 PC9saT4KCQk8bGk+SXQgZm9sbG93cyB0aGF0IHRoZSAmIzgyMTY7aW5zdGFsbGVkJiM4MjE3 OyBub3RpZmljYXRpb24gZXZlbnQgaXMgbm90IHRyaWdnZXJlZCBmcm9tIHBsdWdpbnMgaW4g dGhlIGNhY2hlIGRpcmVjdG9yeTwvbGk+CgkJPGxpPlRoZSByZWNvbW1lbmRlZCBsb2FkIG9y ZGVyIGNhbm5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlIGxpc3QgcGFnZTsgaXQgY2FuIG9ubHkg YmUgYWx0ZXJlZCB2aWEgdGhlIDxhIGhyZWY9IiNlZGl0cGFnZSI+RWRpdDwvYT4gcGFnZS4g VGhlIGxvYWQgb3JkZXIgaXMgb25seSB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiB0aGUgcGx1 Z2luIGlzIGV4cG9ydGVkPC9saT4KCTwvb2w+CgoJPGgzPkNyZWF0aW5nIGFuZCBuYW1pbmcg cGx1Z2luczwvaDM+CgoJPHA+VGhlcmUgYXJlIHR3byB3YXlzIG9mIGNyZWF0aW5nIHBsdWdp bnMgZnJvbSB0aGUgUGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZS4gVGhlIGZpcnN0IGlzIHRv IGNyZWF0ZSBhIGJsYW5rLCBlbXB0eSBwbHVnaW47IHVzZSB0aGUgdGV4dCBib3ggYXQgdGhl IHRvcCBmb3IgdGhpcy4gUG9pbnRzIHRvIG5vdGU6PC9wPgoKCTx1bD4KCQk8bGk+SWYgeW91 IHVzZSBhIHN0YW5kYXJkIHBsdWdpbiBuYW1lIChlLmcuIDxjb2RlPmFiY19teV9wbHVnaW48 L2NvZGU+KSBpdCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhlIGRhdGFiYXNlPC9saT4KCQk8bGk+ SWYgeW91IGFkZCA8Y29kZT4ucGhwPC9jb2RlPiB0byB0aGUgcGx1Z2luIG5hbWUsIGl0IHdp bGwgYmUgY3JlYXRlZCBpbiB0aGUgcGx1Z2luIGNhY2hlIGRpcmVjdG9yeSBpbiBhIHN0YW5k YXJkIHRlbXBsYXRlIGZvcm1hdDwvbGk+CgkJPGxpPkF2b2lkIHNwZWNpZnlpbmcgdGhlIHZl cnNpb24gb2YgdGhlIHBsdWdpbiBpbiB0aGUgbmFtZSAmIzgyMTI7IHlvdSBzaG91bGQgdXNl IHRoZSA8ZW0+UmVuYW1lIGZpbGU8L2VtPiBvciA8ZW0+RXhwb3J0PC9lbT4gb3B0aW9ucyBp biB0aGUgRWRpdCBwYWdlIHRvIGFsdGVyIHRoZSBmaWxlbmFtZSBpbnRvIHlvdXIgcHJlZmVy cmVkIGZpbGVuYW1lIGZvcm1hdCAoc2VlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNldHVwPC9h Pik8L2xpPgoJPC91bD4KCgk8cD5UaGUgc2Vjb25kIG1ldGhvZCBvZiBjcmVhdGluZyBhIHBs dWdpbiBpcyB0byB1cGxvYWQgb25lIHVzaW5nIHRoZSBCcm93c2UvdXBsb2FkIGJveCBhdCB0 aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBQbGVhc2Ugbm90ZTo8L3A+CgoJPHVsPgoJCTxsaT5Z b3UgY2FuIHVwbG9hZCBjb2RlIGluIGVpdGhlciBzdGFuZGFyZCBwbHVnaW4gdGVtcGxhdGUg Zm9ybWF0IChlaXRoZXIgY29kZS1maXJzdCBvciBoZWxwLWZpcnN0LCBjb21wbGV0ZSB3aXRo IDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvc3Bh bj4gYXJlYXMpIG9yIHNpbXBseSB1cGxvYWQgYSA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4g Y2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj48L3NwYW4+IGZpbGUgY29udGFpbmluZyBjb2RlIG9u bHk8L2xpPgoJCTxsaT5UaGUgcGx1Z2luIHdpbGwgYWx3YXlzIGJlIGluc3RhbGxlZCBpbiB0 aGUgZGF0YWJhc2Ugd2hlbiB1c2luZyB0aGlzIG1ldGhvZCAodXBsb2FkIHRoZSB0ZW1wbGF0 ZSBtYW51YWxseSB2aWEgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5G VFA8L3NwYW4+PC9zcGFuPiBvciBjcmVhdGUgYSBuZXcgb25lIHdpdGggYSAucGhwIGV4dGVu c2lvbiBhbmQgcGFzdGUgdGhlIGNvZGUgaW50byBpdCBpZiB5b3Ugd2FudCBpdCBpbiB0aGUg cGx1Z2luIGNhY2hlKTwvbGk+CgkJPGxpPklmIHRoZSBwbHVnaW4gZXhpc3RzIGl0IHdpbGwg YmUgdXBkYXRlZCB3aXRoIHlvdXIgbmV3IGluZm88L2xpPgoJCTxsaT5UaGlzIGlzIHRoZSBv bmx5IHBsYWNlIHlvdSBjYW4gdXBsb2FkIHJhdyA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4g Y2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj48L3NwYW4+IHdpdGggdGhlIDxjb2RlPiZhbXA7bHQ7 P3BocCA/JmFtcDtndDs8L2NvZGU+IG1hcmtlcnMuIEV2ZXJ5d2hlcmUgZWxzZSB5b3Ugc2hv dWxkIHVzZSBhIGZ1bGwgdGVtcGxhdGU8L2xpPgoJPC91bD4KCgk8cD5FdmVyeSBwbHVnaW4g c2hvdWxkIGJlIGNyZWF0ZWQgd2l0aCBhIHRocmVlLWxldHRlciBwcmVmaXgsIGFuIHVuZGVy c2NvcmUsIHRoZW4gdGhlIG5hbWUgb2YgdGhlIHBsdWdpbi4gWW91IGFyZSBmcmVlIHRvIGNo b29zZSB5b3VyIG93biB0aHJlZS1sZXR0ZXIgcHJlZml4ICh1c3VhbGx5IHlvdXIgaW5pdGlh bHMpIHN1YmplY3QgdG8gPGEgaHJlZj0iaHR0cDovL3d3dy50ZXh0cGF0dGVybi5uZXQvd2lr aS9pbmRleC5waHA/dGl0bGU9UmVzZXJ2ZWRfUGx1Z2luX1ByZWZpeGVzIj5hdm9pZGluZyBv bmVzIGFscmVhZHkgdGFrZW4gYnkgb3RoZXIgcGx1Z2luIGF1dGhvcnM8L2E+IHNvIHBlb3Bs ZSBjYW4gZ2V0IHRvIGtub3cgeW91ciB3b3JrLiBQbHVzLCBpdCBncm91cHMgeW91ciBwbHVn aW5zIHRvZ2V0aGVyIGluIHRoZSBwbHVnaW4gYXJjaGl2ZS48L3A+CgoJPHA+QWxsIGZ1bmN0 aW9ucywgdmFyaWFibGVzIChpbmNsdWRpbmcgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNs YXNzPSJjYXBzIj5ET008L3NwYW4+PC9zcGFuPiBub2RlcyksIDxzcGFuIGNsYXNzPSJjYXBz Ij48c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvc3Bhbj4gY2xhc3NlcywgYW5kIGFu eXRoaW5nIGVsc2UgeW91IGluamVjdCBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgc2hvdWxkIGJl IHByZWZpeGVkIGJ5IDxzdHJvbmc+YXQgbGVhc3Q8L3N0cm9uZz4geW91ciB0aHJlZSBsZXR0 ZXIgY29kZTsgcHJlZmVyYWJseSB0aGUgd2hvbGUgcGx1Z2luIG5hbWUgKG9yIGFicmlkZ2Vk IHZlcnNpb24gdGhlcmVvZikgdG8gYXZvaWQgbmFtZXNwYWNlIGNsYXNoZXMgd2l0aCB5b3Vy IG93biBhbmQgb3RoZXIgcGx1Z2lucy48L3A+CgoJPGgzIGlkPSJlZGl0cGFnZSI+RWRpdCBw YWdlPC9oMz4KCgk8cD5UaGUgRWRpdCBwYWdlIGlzIHdoZXJlIHlvdSBjcmFmdCB5b3VyIG1h c3RlcnBpZWNlLiBJdCBpcyBkaXZpZGVkIGludG8gdmFyaW91cyBzZWN0aW9ucyBhbmQgYm94 ZXMsIGFzIGRldGFpbGVkIGhlcmU6PC9wPgoKCTxwPgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1 Z2luPC9zdHJvbmc+IDogdGhlIG5hbWUgb2YgeW91ciBwbHVnaW4sIHdoaWNoIHlvdSBjYW4g Y2hhbmdlIGF0IGFueSB0aW1lLiBOb3RlIHRoYXQgaWYgeW91IGFyZSBlZGl0aW5nIGEgZmls ZSBmcm9tIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5IGFuZCB0aGUgPGNvZGU+JHBsdWdp blsmYW1wOyMzOTtuYW1lJmFtcDsjMzk7XTwvY29kZT4gcm93IGlzIGNvbW1lbnRlZCBvdXQg aW4gdGhlIGZpbGUsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgcGx1Z2lu IG5hbWU7IGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLjxiciAvPgoK VG8gdGhlIHJpZ2h0IG9mIHRoaXMgYm94IHdpbGwgYmUgb25lIG9mIHR3byBpdGVtczoKCTx1 bD4KCQk8bGk+PHN0cm9uZz5FbmFibGU8L3N0cm9uZz4gOiBpZiB0aGUgcGx1Z2luIGlzIGEg cmVndWxhciAoaW5zdGFsbGVkKSBwbHVnaW4sIHRoaXMgY2hlY2tib3ggYWxsb3dzIHlvdSB0 byBzd2l0Y2ggdGhlIHBsdWdpbiBvbiBhbmQgb2ZmPC9saT4KCQk8bGk+PHN0cm9uZz4oZmls ZSBuYW1lKTwvc3Ryb25nPiA6IGlmIHlvdSBhcmUgZWRpdGluZyBhIHBsdWdpbiBpbiB0aGUg Y2FjaGUgZGlyZWN0b3J5LCB0aGUgY3VycmVudCBmaWxlbmFtZSB5b3UgYXJlIHdyaXRpbmcg dG8gd2lsbCBiZSBkaXNwbGF5ZWQgaW5zdGVhZDwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxz dHJvbmc+U291cmNlIGNvZGU8L3N0cm9uZz4gOiB5b3VyIHBsdWdpbiBjb2RlIGdvZXMgaGVy ZS4gVGhlIGJveCBpcyByZXNpemFibGUgYnkgZ3JhYmJpbmcgdGhlIDxjb2RlPi0tLSArIC0t LTwvY29kZT4gYmVsb3cgdGhlIGJveCBhbmQgZHJhZ2dpbmcuIFRoZSBib3ggc2l6ZSB3aWxs IGJlIHJlbWVtYmVyZWQgdmlhIGEgY29va2llIGZvciAzMCBkYXlzIGZyb20geW91ciBsYXN0 IGFkanVzdG1lbnQuPGJyIC8+CgpQbHVnaW5zIGFyZSBsaW1pdGVkIHRvIDE2TWIgb2YgY29k ZSBzbyB0aGVyZSBpcyBhbHNvIGEgY2hhcmFjdGVyIGNvdW50ZG93biBqdXN0IGJlbG93IHRo ZSBlZGl0IGJveC4gSWYgeW91IHN0YXJ0IGFwcHJvYWNoaW5nIHRoZSBsaW1pdCghKSwgaXQg bWlnaHQgYmUgd29ydGggY29uc2lkZXJpbmcgc3BsaXR0aW5nIHlvdXIgcGx1Z2luIGludG8g YSBmZXcgcGFydHMgb3Igd29ya2luZyBmb3IgTWljcm8kb2Z0LCB3aGVyZSBjb2RlIGJsb2F0 IGlzIGFjY2VwdGFibGU8YnIgLz4KCkluIEZpcmVmb3ggYW5kIElFNysgeW91IGNhbiB1c2Ug dGhlIDxlbT5KdW1wIHRvIGxpbmU6PC9lbT4gdGV4dGJveC4gRW50ZXIgYSBsaW5lIG51bWJl ciBhbmQgcHJlc3MgRW50ZXIgdG8ganVtcCB0byB0aGF0IGxpbmUgaW4gdGhlIGNvZGUuIElu IG90aGVyIGJyb3dzZXJzLCB5bW12PC9saT4KCQk8bGk+PHN0cm9uZz5QbHVnaW4gdHlwZTwv c3Ryb25nPiA6IGNob29zZSBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgYmVzdCBmaXRzIHRoZSBp bnRlbmRlZCB1c2Ugb2YgeW91ciBwbHVnaW4uIElmIHlvdSBjaG9vc2UgJiM4MjE2O0NsaWVu dCYjODIxNzsgYW5kIHRyeSB0byBhY2Nlc3MgdGhlIGFkbWluIHNpZGUgaW4geW91ciBjb2Rl LCBhIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgd2hlbiB0aGUgcGx1Z2luIGlzIHNhdmVkIHNv IHlvdSBjYW4gY2hvb3NlIGEgbW9yZSBhcHByb3ByaWF0ZSB0eXBlPC9saT4KCQk8bGk+PHN0 cm9uZz5GbGFnczwvc3Ryb25nPiA6IGNob29zZSB3aGljaCBwbHVnaW4gZmxhZ3MgYXJlIHRv IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGx1Z2luOgoJPHVsPgoJCTxsaT48c3Ryb25nPkhh cyBwcmVmczwvc3Ryb25nPiA6IGNoZWNrIHRoaXMgdG8gaW5kaWNhdGUgeW91ciBwbHVnaW4g cmVzcG9uZHMgdG8gdGhlIDxlbT5wbHVnaW5fcHJlZnMueW91cl9wbHVnaW5fbmFtZTwvZW0+ IGV2ZW50PC9saT4KCQk8bGk+PHN0cm9uZz5ldmVudCBub3RpZnk8L3N0cm9uZz4gOiBjaGVj ayB0aGlzIHRvIGluZGljYXRlIHlvdXIgcGx1Z2luIHJlc3BvbmRzIHRvIHRoZSA8ZW0+cGx1 Z2luX2xpZmVjeWNsZS55b3VyX3BsdWdpbl9uYW1lPC9lbT4gZXZlbnQvc3RlcHM8L2xpPgoJ PC91bD48L2xpPgoJPC91bD48YnIgLz4KPHN0cm9uZz5Mb2FkIG9yZGVyPC9zdHJvbmc+IDog Y2hvb3NlIHRoZSByZWNvbW1lbmRlZCBvcmRlciBpbiB3aGljaCB5b3UgdGhpbmsgeW91ciBw bHVnaW4gc2hvdWxkIGJlIGxvYWRlZCBieSB1c2Vycy4gTW9zdCBvZiB0aGUgdGltZSwgdGhl IGRlZmF1bHQgb2YgJiM4MjE2OzUmIzgyMTc7IGlzIGZpbmUgYnV0IGZvciBzcGVjaWFsIGNh c2VzIHdoZXJlIHlvdXIgcGx1Z2luIGhhcyB0byBzZXQgdXAgYW4gZW52aXJvbm1lbnQgb3Ig aGFzIHRvIHdhaXQgZm9yIG90aGVyIHBsdWdpbnMgdG8gbG9hZCBmaXJzdCwgeW91IG1pZ2h0 IHJlcXVpcmUgb25lIG9mIHRoZSBudW1iZXJzIGVpdGhlciBzaWRlLiBCZSBhd2FyZSB0aGF0 IHRoaXMgaXMgYSA8ZW0+cmVjb21tZW5kYXRpb248L2VtPiBhbmQgaXMgb3ZlcnJpZGFibGUg YnkgdGhlIHNpdGUgYWRtaW4uIElmIHRoZSBwbHVnaW4gaXMgYWxyZWFkeSBkZXBsb3llZCBv biBhIHNpdGUsIHRoZSBsb2FkIG9yZGVyIGFscmVhZHkgc2V0IHdpbGwgYmUgdXNlZCByZWdh cmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoaXMgdmFsdWUuIE9ubHkgbmV3IGluc3RhbGxh dGlvbnMgd2lsbCBiZSBzZXQgdG8gdGhpcyB2YWx1ZSBieSBkZWZhdWx0PC9wPgoKCTx1bD4K CQk8bGk+PHN0cm9uZz5WZXJzaW9uPC9zdHJvbmc+IDogdGhlIGN1cnJlbnQgdmVyc2lvbiBv ZiB5b3VyIHBsdWdpbi4gVG8gdGhlIHJpZ2h0IG9mIHRoaXMgYm94IHdpbGwgYmUgb25lIG9m IHR3byBpdGVtczoKCTx1bD4KCQk8bGk+PHN0cm9uZz5SZXN0b3JlIHBvaW50PC9zdHJvbmc+ IDogc2VsZWN0aW5nIHRoaXMgY2hlY2tib3ggd2lsbCAodXBvbiBzYXZlKSBzdG9yZSB0aGUg Y3VycmVudCBjb2RlIGFzIGEgYmFzZWxpbmUgdG8gd2hpY2ggeW91IG1heSAmIzgyMjA7cm9s bCBiYWNrJiM4MjIxOyB0byBhdCBhIGxhdGVyIGRhdGUuIFNlZSA8YSBocmVmPSIjcmVzdG9y ZSI+cmVzdG9yZSBwb2ludHM8L2E+IGZvciBtb3JlPC9saT4KCQk8bGk+PHN0cm9uZz5SZW5h bWUgZmlsZTwvc3Ryb25nPiA6IGJ5IGRlZmF1bHQsIHdoZW4geW91IHNhdmUgYSBmaWxlIHRo YXQgaXMgYmVpbmcgZWRpdGVkIGluIHRoZSBwbHVnaW4gY2FjaGUgZGlyZWN0b3J5LCBpdCBp cyBvdmVyd3JpdHRlbiB3aXRoIHlvdXIgY2hhbmdlcy4gT25jZSBhIHBsdWdpbiBpcyByZWxl YXNlZCB5b3Ugd291bGQgbm9ybWFsbHkgZG93bmxvYWQgYSBjb3B5IHZpYSA8c3BhbiBjbGFz cz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkZUUDwvc3Bhbj48L3NwYW4+IGZyb20gdGhl IHBsdWdpbl9jYWNoZV9kaXIgZm9yIHNhZmVrZWVwaW5nLiBJZiB5b3UgdGhlbiBzdWJzZXF1 ZW50bHkgbW9kaWZ5IHRoZSBwbHVnaW4gYW5kIGluY3JlYXNlIHRoZSB2ZXJzaW9uIG51bWJl ciwgeW91IG1heSB3aXNoIHRvIGFsdGVyIHRoZSBmaWxlbmFtZSBhcyB3ZWxsLiBDaGVja2lu ZyB0aGlzIGJveCB3aWxsICh1cG9uIHNhdmUpIHJlbmFtZSB0aGUgZmlsZSBpbiB0aGUgcGx1 Z2luIGNhY2hlIGRpcmVjdG9yeSB0byByZWZsZWN0IHRoZSBjdXJyZW50IHZlcnNpb24gbnVt YmVyLiBTZWUgdGhlIDxhIGhyZWY9IiNzZXR1cHBhZ2UiPnNldHVwIHBhZ2U8L2E+IGZvciBk ZXRhaWxzIG9uIGN1c3RvbWlzaW5nIHRoZSBmaWxlbmFtZSBmb3JtYXQ8L2xpPgoJPC91bD48 L2xpPgoJCTxsaT48c3Ryb25nPkF1dGhvcjwvc3Ryb25nPiA6IHlvdSE8L2xpPgoJCTxsaT48 c3Ryb25nPldlYnNpdGU8L3N0cm9uZz4gOiB5b3VyIGhvbWUgcGFnZSBvciBwbHVnaW4gcGFn ZS4gV2lsbCBiZSBoeXBlcmxpbmtlZCB0byB5b3VyIEF1dGhvciBuYW1lIGluIHRoZSBsaXN0 IHBhZ2U8L2xpPgoJCTxsaT48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+IDogdmVyeSBi cmllZiBvbmUtbGluZXIgZGVzY3JpYmluZyB5b3VyIHBsdWdpbiYjODIxNztzIGNvcmUgZnVu Y3Rpb24gLyByZWFzb24gZm9yIGV4aXN0ZW5jZTwvbGk+CgkJPGxpPjxzdHJvbmc+UGx1Z2lu IEhlbHA8L3N0cm9uZz4gOiBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxpbmcgdGhlIHBsdWdp biB1c2FnZS4gQ2FuIChwcm9iYWJseSBzaG91bGQhKSBiZSB3cml0dGVuIHVzaW5nIDxhIGhy ZWY9Imh0dHA6Ly90ZXh0cGF0dGVybi5jb20vdGV4dGlsZS1zYW5kYm94Ij5UZXh0aWxlPC9h Pi4gVGhlcmUgd2VyZSBzb21lIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5j b20vdmlld3RvcGljLnBocD9pZD0yNTMyNyI+bG9vc2UgZG9jdW1lbnRhdGlvbiBndWlkZWxp bmVzPC9hPiBwcm9wb3NlZCB0aGF0IHNlcnZlIGFzIGEgZ29vZCBzdGFydGluZyBwb2ludC4g Tm90ZSB0aGF0IHRoZSBjaGFyYWN0ZXIgY291bnRkb3duIGhlcmUgaXMgb25seSBhcHByb3hp bWF0ZSBiZWNhdXNlIHdoZW4geW91ciBwbHVnaW4gaXMgc2F2ZWQgYW5kIHRoZSBoZWxwIGlz IGNvbnZlcnRlZCB0byA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+PC9zcGFuPiwgaXQgdXN1YWxseSB0YWtlcyB1cCBtb3JlIHNwYWNlIHRoYW4g VGV4dGlsZTsgcGxlYXNlIGNoZWNrIHRoYXQgeW91ciBoZWxwIGZpbGUgcmVuZGVycyBjb3Jy ZWN0bHkgd2hlbiB5b3VyIHBsdWdpbiBpcyBleHBvcnRlZDwvbGk+CgkJPGxpPjxzdHJvbmc+ U3R5bGU8L3N0cm9uZz4gOiBBbnkgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJj YXBzIj5DU1M8L3NwYW4+PC9zcGFuPiBzdHlsZSBydWxlcyB5b3Ugd2lzaCB0byBhcHBseSB0 byB5b3VyIGRvY3VtZW50YXRpb24gdG8gbWFrZSBpdCBtb3JlIHByZXR0eS4gSXQmIzgyMTc7 cyBiZXN0IHRvIHRhcmdldCB5b3VyIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IGJ5IHN1 cnJvdW5kaW5nIHRoZSBlbnRpcmUgUGx1Z2luIEhlbHAgc2VjdGlvbiB3aXRoIHNvbWV0aGlu ZyBsaWtlOiA8Y29kZT4mYW1wO2x0O2RpdiBpZD0mYW1wO3F1b3Q7YWJjX2hlbHAmYW1wO3F1 b3Q7JmFtcDtndDtoMS4gRG9jcyBnbyBoZXJlLi4uJmFtcDtsdDsvZGl2JmFtcDtndDs8L2Nv ZGU+LjxiciAvPgoKTm90ZSB0aGF0IGJvdGggdGhlIFBsdWdpbiBIZWxwIGFuZCBTdHlsZSBh cmUgZ292ZXJuZWQgYnkgYSBzaXplIGxpbWl0LiBTaW5jZSB0aGV5IGFyZSBib3RoIHN0b3Jl ZCBpbiB0aGUgc2FtZSA2NGtCIGZpZWxkLCB0aGUgc2l6ZSBpcyBzaGFyZWQgYmV0d2VlbiB0 aGVtLiBTdHlsZXMgYXJlIDxlbT5ub3Q8L2VtPiBwYXNzZWQgdGhyb3VnaCB0aGUgVGV4dGls ZSBwcm9jZXNzb3IgYW5kIHlvdSBkb24mIzgyMTc7dCBuZWVkIHRvIGFkZCB0aGUgPGNvZGU+ JmFtcDtsdDtzdHlsZSZhbXA7Z3Q7PC9jb2RlPiB0YWdzOyB0aGUgQ29tcG9zZXIgd2lsbCBk byB0aGF0IGZvciB5b3UgKGJ1dCBzZWUgPGEgaHJlZj0iI25vdGVzIj5Ob3RlczwvYT4pPC9s aT4KCQk8bGk+PHN0cm9uZz5TYXZlPC9zdHJvbmc+IDogY29tbWl0cyB0aGUgY2hhbmdlczwv bGk+CgkJPGxpPjxzdHJvbmc+WyBWaWV3IEhlbHAgXTwvc3Ryb25nPiA6IHNob3dzIHRoZSBk b2N1bWVudGF0aW9uIGFzIHVzZXJzIHdpbGwgc2VlIGl0IChpLmUuIFRleHRpbGUgcHJvY2Vz c2VkIGludG8gPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5IVE1MPC9z cGFuPjwvc3Bhbj4pLiBBbnkgaGVscCB0ZXh0IG92ZXIgNjRrQiBpbiBsZW5ndGggaXMgdHJ1 bmNhdGVkIHNvIHlvdSBjYW4gdmVyaWZ5IHRoYXQgYWxsIHlvdXIgZG9jdW1lbnRhdGlvbiBm aXRzPC9saT4KCTwvdWw+CgoJPHA+T25jZSB5b3UgaGF2ZSBzYXZlZCB5b3VyIHBsdWdpbiwg dGhlcmUgaXMgYSBzZWN0aW9uIHJpZ2h0IGF0IHRoZSBib3R0b20gdGhhdCBhbGxvd3MgeW91 IHRvIGV4cG9ydCB5b3VyIHBsdWdpbiBpbiBhIHZhcmlldHkgb2YgZm9ybWF0czo8L3A+CgoJ PHVsPgoJCTxsaT48c3Ryb25nPlBsdWdpbiBjb2RlIGZvciBkaXN0cmlidXRpb248L3N0cm9u Zz4gOiBpcyBhIGRpcmVjdCBjb3B5ICYjODIxNjtuJiM4MjE3OyBwYXN0ZSBhcmVhIHRoYXQg Y29udGFpbnMgeW91ciBlbnRpcmUgcGx1Z2luICsgZG9jcy4gWW91IGNhbiB0YWtlIHRoaXMg ZW50aXJlIGFyZWEgYW5kIHBhc3RlIGl0IGludG8gdGhlICYjODIxNjtJbnN0YWxsIHBsdWdp biYjODIxNzsgYm94IG9uIHRoZSBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2U8L2xpPgoJCTxs aT48c3Ryb25nPkV4cG9ydCBhcyBhYmNfbXlwbHVnaW4udHh0PC9zdHJvbmc+IDogY29udmVy dHMgdGhlIHBsdWdpbiBoZWxwIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0i Y2FwcyI+SFRNTDwvc3Bhbj48L3NwYW4+IGFuZCBzYXZlcyB0aGUgcGx1Z2luIHRvIHlvdXIg Y29tcHV0ZXIgYXMgYSByZWRpc3RyaWJ1dGFibGUgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0 cGF0dGVybiB1c2VycyB0byBpbnN0YWxsPC9saT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQgYXMg YWJjX215cGx1Z2luLnR4dCAoY29tcHJlc3NlZCk8L3N0cm9uZz4gOiBjb252ZXJ0cyB0aGUg cGx1Z2luIGhlbHAgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5I VE1MPC9zcGFuPjwvc3Bhbj4gYW5kIHNhdmVzIHRoZSBwbHVnaW4gYXMgYSByZWRpc3RyaWJ1 dGFibGUsIGd6aXBwZWQgdGV4dCBmaWxlIGZvciBvdGhlciBUZXh0cGF0dGVybiB1c2VycyB0 byBpbnN0YWxsLiBVc2VmdWwgZm9yIGxhcmdlIHBsdWdpbnMgb3IgdG8gb2ZmZXIgYW4gYWx0 ZXJuYXRpdmUgZm9yIHBlb3BsZSB3aG8gaGF2ZSBzdHJpbmdlbnQgc2l6ZSBsaW1pdHMgaW1w b3NlZCBieSB0aGVpciBob3N0PC9saT4KCQk8bGk+PHN0cm9uZz5FeHBvcnQgYXMgYWJjX215 cGx1Z2luLnBocDwvc3Ryb25nPiA6IHNhdmVzIHRoZSBwbHVnaW4gaW4gYSBUZXh0cGF0dGVy biBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQuIFVzZWZ1bCBmb3Iga2VlcGluZyB0aGUgcGx1 Z2luIGZvciB5b3Vyc2VsZiAmIzgyMTI7IGNvbXBsZXRlIHdpdGggVGV4dGlsZSBtYXJrdXAg JiM4MjEyOyBzbyBpdCBjYW4gYmUgbGF0ZXIgZWRpdGVkIGFuZCByZS1pc3N1ZWQgLyB1cGRh dGVkIG9yIHNoYXJlZCB3aXRoIG90aGVyIGRldmVsb3BlcnMgd2hvIGhhdmUgdGhlIFBsdWdp biBDb21wb3NlciBvciB6ZW1fdHBsLnBocCBjb21waWxlcjwvbGk+Cgk8L3VsPgoKCTxwPk5v dGUgdGhhdCB3aGVuIGV4cG9ydGluZyBhcyBhIHN0YW5kYXJkIHBsdWdpbiwgdGhlIFRleHRp bGUgcHJvY2Vzc29yIGF0dGVtcHRzIHRvIGRlY2lkZSBpZiB5b3UgaGF2ZSB1c2VkIFRleHRp bGUgb3Igbm90OyBpdCBzaW1wbHkgbG9va3MgZm9yIGEgdGV4dGlsZWQgaGVhZGVyICg8Y29k ZT5oMS48L2NvZGU+IHRocm91Z2ggPGNvZGU+aDYuPC9jb2RlPikuIFJ1bm5pbmcgcHVyZSA8 c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3NwYW4+PC9zcGFu PiB0aHJvdWdoIFRleHRpbGUgbWF5IG9jY2FzaW9uYWxseSBjYXVzZSBlbmNvZGluZyBpc3N1 ZXMgZGVwZW5kaW5nIG9uIHRoZSBvcmlnaW5hbCBjaGFyYWN0ZXIgc2V0IHVzZWQgc28gaXQg aXMgYWx3YXlzIGJlc3QgdG8gdHJ5IGFuZCBzdGljayB0byBUZXh0aWxlIGFzIHRoZSBkb2N1 bWVudGF0aW9uIHN5c3RlbS48L3A+CgoJPGgzIGlkPSJyZXN0b3JlIj5SZXN0b3JlIHBvaW50 czwvaDM+CgoJPHA+V2hlbiBhIHBsdWdpbiBpcyBpbnN0YWxsZWQsIGEgY29weSBpcyBrZXB0 IGluIHRoZSBkYXRhYmFzZS4gSWYgdGhlIHBsdWdpbiBjb2RlIChub3QgaGVscCB0ZXh0KSBp cyBzdWJzZXF1ZW50bHkgZWRpdGVkLCB0aGUgcGx1Z2luIGlzIGNvbnNpZGVyZWQgJiM4MjIw O21vZGlmaWVkJiM4MjIxOzsgaW5kaWNhdGVkIGluIHRoZSBQbHVnaW4gQ29tcG9zZXIgbGlz dCBwYWdlIGFuZCBBZG1pbiAtJmd0OyBQbHVnaW5zIHBhZ2UuIFNvbWV0aW1lcyB5b3UgbWF5 IHdpc2ggdG8gcmV2ZXJ0IGFueSBjaGFuZ2VzIGJhY2sgdG8gdGhlIGFzLWluc3RhbGxlZCBz dGF0ZSBhbmQgdGhlIENvbXBvc2VyIGFsbG93cyB0aGlzLjwvcD4KCgk8cD5BbnkgdGltZSBh IHBsdWdpbiBpcyBtYXJrZWQgYXMgJiM4MjE2O21vZGlmaWVkJiM4MjE3OywgdGhlIHZlcnNp b24gbnVtYmVyIGJlY29tZXMgY2xpY2thYmxlIGluIHRoZSA8YSBocmVmPSIjbGlzdHBhZ2Ui Pmxpc3Q8L2E+IHBhZ2UuIENsaWNraW5nIGl0IChhbmQgY29uZmlybWluZyB5b3UgYXJlIHN1 cmUpIHdpbGwgd2lwZSBvdXQgYW55IGNoYW5nZXMgeW91IG1hZGUgYW5kIHJldHVybiB0aGUg cGx1Z2luIHRvIGl0cyBpbnN0YWxsZWQgc3RhdGUuPC9wPgoKCTxwPkR1cmluZyB0aGUgZWRp dGluZyBwcm9jZXNzIG9mIHlvdXIgb3duIHBsdWdpbnMsIGl0IG1heSBiZSB0aGF0IGF0IGNl cnRhaW4gdGltZXMgeW91IHdpc2ggdG8gcHV0IGEgc3Rha2UgaW4gdGhlIGdyb3VuZCBhbmQg c2F5ICYjODIyMDt0aGlzIGlzIG15IGN1cnJlbnQgYmFzZWxpbmUgdGhhdCBJIG1pZ2h0IHdh bnQgdG8gcmV0dXJuIHRvIGxhdGVyJiM4MjIxOy4gUGVyaGFwcyB5b3UgYXJlIGFib3V0IHRv IG1ha2Ugc29tZSBtb25zdGVyIGVkaXRzIG9yIHRyeSBzb21ldGhpbmcgZXhwZXJpbWVudGFs IGFuZCB3YW50IGFuIGVhc3kgZmFsbGJhY2sgbWVjaGFuaXNtLiBUaGF0JiM4MjE3O3Mgd2hl cmUgdGhlICYjODIyMDtSZXN0b3JlIHBvaW50JiM4MjIxOyBjaGVja2JveCBjb21lcyBpbi48 L3A+CgoJPHA+QnkgY2hlY2tpbmcgdGhlIGJveCB3aGVuIHlvdSBzYXZlIHlvdXIgcGx1Z2lu LCB0aGUgY3VycmVudCBjb2RlIHdpbGwgYmVjb21lIHlvdXIgbmV3IHJvbGxiYWNrIHBvaW50 IGFuZCB0aGUgcGx1Z2luIHdpbGwgbm8gbG9uZ2VyIGJlIG1hcmtlZCAmIzgyMjA7bW9kaWZp ZWQmIzgyMjE7LiBBbnkgY2hhbmdlcyBtYWRlIGJlZm9yZWhhbmQgd2lsbCBub3QgYmUgcmVj b3ZlcmFibGUgc28geW91IHdpbGwgaGF2ZSB0byByZWx5IG9uIHlvdXIgb3duIGJhY2t1cHMg aWYgeW91IHdpc2ggdG8gZ28gYmFjayBmdXJ0aGVyLiBBbnkgZWRpdHMgeW91IG1ha2UgYWZ0 ZXIgY3JlYXRpbmcgYSByZXN0b3JlIHBvaW50IGNhbiBiZSB1bmRvbmUgYnkgdmlzaXRpbmcg dGhlIGxpc3QgcGFnZSBhbmQgY2xpY2tpbmcgdGhlIHZlcnNpb24gbnVtYmVyIG5leHQgdG8g eW91ciBwbHVnaW4uIEN1cnJlbnRseSwgb25seSBvbmUgcm9sbGJhY2sgcG9pbnQgY2FuIGJl IHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuPC9wPgoKCTxoMyBpZD0ic2V0dXBwYWdlIj5TZXR1 cCBwYWdlPC9oMz4KCgk8cD5DbGlja2luZyBTZXR1cCBmcm9tIHRoZSBtYWluIDxhIGhyZWY9 IiNsaXN0cGFnZSI+bGlzdDwvYT4gcGFnZSBhbGxvd3MgYWNjZXNzIHRvIHRoZSBwbHVnaW4g cHJlZmVyZW5jZXMuPC9wPgoKCTxwPllvdSBjYW4gSW5zdGFsbCB0aGVtICYjODIxMjsgd2hp Y2ggcmV0YWlucyBhbnkgcHJldmlvdXMgc2V0dGluZ3MgYW5kIGFkZHMgbmV3IG9uZXMgd2hl biB1cGRhdGluZyB0aGUgcGx1Z2luICYjODIxMjsgb3IgRGVsZXRlIHRoZW0uIFRoZSBwbHVn aW4gY2hlY2tzIGlmIGFsbCByZXF1aXJlZCBwcmVmZXJlbmNlcyBhcmUgYXZhaWxhYmxlIGFu ZCBvZmZlcnMgeW91IHRoZSBjaG9pY2Ugb2YgZGVsZXRpbmcvcmVpbnN0YWxsaW5nIGluIGNh c2UgdGhlIHByZWZzIGJlY29tZSBjb3JydXB0ZWQgb3IgbmVlZCB1cGRhdGluZy48L3A+CgoJ PHA+T25jZSB0aGUgcHJlZnMgYXJlIGluc3RhbGxlZCB5b3Ugd2lsbCBzZWUgdGhlIGF2YWls YWJsZSBvcHRpb25zOjwvcD4KCgk8dWw+CgkJPGxpPjxzdHJvbmc+UGx1Z2luIGVkaXRvcjwv c3Ryb25nPiA6IHlvdSBtYXkgY2hvb3NlIHRvIGVkaXQgdGhlIGNvZGUgdXNpbmcgYSAzcmQg cGFydHkgc3ludGF4IGhpZ2hsaWdodGVyLiBDdXJyZW50IHN1cHBvcnQgaXMgZm9yIEVkaXQg QXJlYSBhbmQgKHNvcnQgb2YpIENvZGVQcmVzcyAoc2VlIHRoZSA8YSBocmVmPSIjbm90ZXMi Pm5vdGVzPC9hPikuIENob29zZSB0aGUgc3lzdGVtIGhlcmUsIHdoZXJlYnkgdGhlIGJveCBi ZW5lYXRoIGJlY29tZXMgYXZhaWxhYmxlIHNvIHlvdSBjYW4gc3BlY2lmeSB0aGUgPHNwYW4g Y2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+PC9zcGFuPiBwYXRo IG9mIHRoZSBFZGl0QXJlYSBpbnN0YWxsYXRpb24gb24geW91ciBzZXJ2ZXI7IHRoaXMgaXMg bm9ybWFsbHkgZXZlcnl0aGluZyB1cCB0byBhbmQgaW5jbHVkaW5nIC9lZGl0X2FyZWEuIE5v IHRyYWlsaW5nIHNsYXNoIGlzIHJlcXVpcmVkPC9saT4KCQk8bGk+PHN0cm9uZz5QbHVnaW4g ZWRpdG9yIHdpZHRoPC9zdHJvbmc+IDogdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdpZGUg dG8gbWFrZSB0aGUgYm94ZXMgb24gdGhlIDxhIGhyZWY9IiNlZGl0cGFnZSI+RWRpdDwvYT4g cGFnZSB0byBzdWl0IHlvdXIgc2NyZWVuIHJlc29sdXRpb248L2xpPgoJCTxsaT48c3Ryb25n PkhlbHAgZWRpdG9yPC9zdHJvbmc+IDogeW91IG1heSBjaG9vc2UgdG8gZWRpdCB0aGUgaGVs cCBtYW51YWxseSB2aWEgVGV4dGlsZSBvciB1c2UgVGlueU1DRSBmb3IgYSBtb3JlIDxzcGFu IGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+V1lTSVdZRzwvc3Bhbj48L3NwYW4+ IGV4cGVyaWVuY2UuIFRoaXMgaXMgZXhwZXJpbWVudGFsIGFuZCBwcm9iYWJseSB3b24mIzgy MTc7dCB3b3JrIHJpZ2h0IG5vdzwvbGk+CgkJPGxpPjxzdHJvbmc+PHNwYW4gY2xhc3M9ImNh cHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5QSFA8L3NwYW4+PC9zcGFuPiBleHBvcnQgb3JkZXI8 L3N0cm9uZz4gOiB3aGVuIHNhdmluZyB5b3VyIHBsdWdpbiBpbiB0aGUgc3RhbmRhcmQgdGVt cGxhdGUgZm9ybWF0LCB0aGlzIGdvdmVybnMgd2hldGhlciB5b3UgcHJlZmVyIHRoZSBjb2Rl IGJsb2NrIHRvIGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUgYW5kIHRoZSBoZWxwIGJsb2Nr IGJlbG93LCBvciB2aWNlIHZlcnNhPC9saT4KCTwvdWw+CgoJPHA+VGhlIG5leHQgdGhyZWUg dGV4dGJveGVzIGFyZSBhbGwgdmVyeSBzaW1pbGFyOyB0aGV5IGRlZmluZSB0aGUgZm9ybWF0 IG9mIHRoZSBmaWxlbmFtZXMgd2hlbiB5b3UgZXhwb3J0IHBsdWdpbnMuIFRoZSBmaXJzdCBp cyBmb3Igd2hlbiB5b3UgZXhwb3J0IHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJjYXBzIj48c3Bh biBjbGFzcz0iY2FwcyI+QkFTRTwvc3Bhbj48L3NwYW4+LTY0IHBsdWdpbnM7IHRoZSBzZWNv bmQgaXMgZm9yIGNvbXByZXNzZWQgcGx1Z2luczsgdGhlIHRoaXJkIGlzIGZvciBleHBvcnRp bmcgYSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlBI UDwvc3Bhbj48L3NwYW4+IHRlbXBsYXRlLjwvcD4KCgk8cD5XaGVyZXZlciB5b3UgdHlwZSA8 Y29kZT57bmFtZX08L2NvZGU+LCB0aGUgcGx1Z2luIG5hbWUgd2lsbCBhcHBlYXIuIFNpbWls YXJseSwgPGNvZGU+e3ZlcnNpb259PC9jb2RlPiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhl IGN1cnJlbnQgcGx1Z2luIHZlcnNpb24gbnVtYmVyLiBZb3UgY2FuIHR5cGUgYW55dGhpbmcg eW91IGxpa2UgaW4gdGhlc2UgYm94ZXMsIGJ1dCBpdCYjODIxNztzIG1vcmUgdXNlZnVsIHRv IGluY2x1ZGUgYm90aCBvZiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5ncyBzb21ld2hlcmUgaW4g ZWFjaCBib3ggc28geW91IGRvbiYjODIxNzt0IGdldCBuYW1lIC8gdmVyc2lvbiBjbGFzaGVz LjwvcD4KCgk8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IGRvbiYjODIxNzt0IGxpa2UgdGhlIGZh Y3QgdGhhdCB6aXBwZWQgcGx1Z2lucyBhcmUgZXhwb3J0ZWQgYXMgPGNvZGU+cGZ4X215X3Bs dWdpbl92MC4xX3ppcC50eHQ8L2NvZGU+LCB5b3UgY2FuIGNoYW5nZSBpdC4gUGVyaGFwcyB5 b3UgbWF5IHByZWZlciA8Y29kZT5wZnhfbXlfcGx1Z2luLWNvbXByZXNzZWQtMC4xLnR4dDwv Y29kZT4uIEluIHdoaWNoIGNhc2UsIHNldCB0aGUgMm5kIGJveCB0byA8Y29kZT57bmFtZX0t Y29tcHJlc3NlZC17dmVyc2lvbn0udHh0PC9jb2RlPi48L3A+CgoJPHA+VGhlIGV4dGVuc2lv biBzaG91bGQgdXN1YWxseSBiZSBzcGVjaWZpZWQgc28geW91ciBzeXN0ZW0vYnJvd3NlciBr bm93cyB0aGUgZmlsZSYjODIxNztzIHR5cGUgd2hlbiBpdCBpcyBleHBvcnRlZCwgYnV0IGl0 JiM4MjE3O3Mgbm90IG1hbmRhdG9yeSBhcyB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPjxzcGFu IGNsYXNzPSJjYXBzIj5NSU1FPC9zcGFuPjwvc3Bhbj4gdHlwZSBpcyBnaXZlbiBzbyAoZ29v ZCkgYnJvd3NlcnMgc2hvdWxkIHJlYWQgdGhhdC48L3A+CgoJPHA+RmluYWxseSwgaWYgeW91 IHdpc2ggdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgaGVscCBjYWNoZWluZywgcHV0IHRoZSBwYXRo IHRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiB0aGUgPHN0cm9uZz5DYWNoZSBkaXI8L3N0 cm9uZz4gYm94LiBFbXB0eSB0aGUgYm94IGlmIHlvdSBwcmVmZXIgc2F2ZXMgYW5kIGV4cG9y dHMgdG8gYmUgc2xvd2VyISBEZWZhdWx0cyB0byA8c3BhbiBjbGFzcz0iY2FwcyI+PHNwYW4g Y2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj48L3NwYW4+JiM4MjE3O3MgdGVtcG9yYXJ5IGRpcmVj dG9yeS48L3A+CgoJPGgzIGlkPSJub3RlcyI+Tm90ZXMgLyBrbm93biBpc3N1ZXM8L2gzPgoK CTxvbD4KCQk8bGk+TW9yZSBlZGl0b3JzIGNhbiBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIENv bXBvc2VyIGZhaXJseSBlYXNpbHkuIElmIHlvdSBmaW5kIGEgZ29vZCBvbmUsIGdldCBpbiBj b250YWN0LiBCZSB3YXJuZWQgdGhhdCB0aGUgZWRpdG9ycyBkbyB0ZW5kIHRvIHNsb3cgdGhl IHBsdWdpbiBkb3duLCBlc3BlY2lhbGx5IGFzIGNvZGUgc2l6ZSBpbmNyZWFzZXMuPC9saT4K CQk8bGk+VGVudGF0aXZlIHN1cHBvcnQgZm9yIENvZGVQcmVzcyBpcyBhdmFpbGFibGUgYnV0 IGl0IGluZXhwbGljYWJseSBibGFua3Mgb3V0IHRoZSBwbHVnaW4gY29kZSB3aGVuIHNhdmVk LCBzbyBzdXBwb3J0IGlzIGRpc2FibGVkIGZvciBub3cuIElmIGFueW9uZSBjYW4gc2hlZCBh bnkgbGlnaHQgb24gd2h5IGl0IGRvZXMgdGhpcywgcGxlYXNlIHNwZWFrIHVwISBMb29rIGlu IHRoZSBpZWRfcGx1Z2luX3NldHVwKCkgZnVuY3Rpb24gdG93YXJkcyB0aGUgYm90dG9tIG9m IHRoZSBmaWxlLCB1bmNvbW1lbnQgdGhlIGNvbW1lbnRlZCBvdXQgbGluZSBhbmQgY29tbWVu dCBvdXQgdGhlIG9uZSBiZW5lYXRoIGl0IHRvIGVuYWJsZSBzdXBwb3J0LCB0aGVuIHZpc2l0 IHRoZSBTZXR1cCBwYWdlIGFuZCBzZWxlY3QgQ29kZVByZXNzIGZyb20gdGhlIGxpc3QuIERv biYjODIxNzt0IGV4cGVyaW1lbnQgd2l0aCB0aGlzIHNldHRpbmcgb24gYW4gaW1wb3J0YW50 IHBsdWdpbiA6LSk8L2xpPgoJCTxsaT5XaGVuIGEgcGx1Z2luIGlzIHNhdmVkIHRvIHRoZSBw bHVnaW5fY2FjaGVfZGlyLCBpZiB5b3UgaGF2ZSBub3QgcHV0IDxjb2RlPiZhbXA7bHQ7c3R5 bGUmYW1wO2d0OzwvY29kZT4gbWFya2VycyBpbiB5b3VyIDxzcGFuIGNsYXNzPSJjYXBzIj48 c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjwvc3Bhbj4gYmxvY2sgdGhleSB3aWxsIGJl IGFkZGVkIGZvciB5b3UgaW4gdGhlIHRleHQgYXJlYSBidXQgPGVtPm5vdDwvZW0+IHNhdmVk IGluIHRoZSBhY3R1YWwgdGVtcGxhdGUgdW50aWwgeW91IHNhdmUgaXQgYWdhaW4gKGV4cG9y dGluZyBhcyBhIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+UEhQPC9z cGFuPjwvc3Bhbj4gZmlsZSBpcyB1bmFmZmVjdGVkKS4gU28gaWYgeW91IGFyZSBpbiB0aGUg aGFiaXQgb2YgbWFudWFsbHkgZG93bmxvYWRpbmcgdGhlIGZpbGUgZnJvbSB5b3VyIDxzcGFu IGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+RlRQPC9zcGFuPjwvc3Bhbj4gY2xp ZW50IGltbWVkaWF0ZWx5IGFmdGVyIGEgc2F2ZSwganVzdCBzYXZlIHRoZSBwbHVnaW4gYWdh aW4gdG8gYmUgc3VyZTwvbGk+Cgk8L29sPgoKCTxoMyBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vs b2c8L2gzPgoKCTx1bD4KCQk8bGk+MjUgRmViIDA2IHwgMC4xIHwgSW5pdGlhbCByZWxlYXNl PC9saT4KCQk8bGk+MjUgRmViIDA2IHwgMC4yIHwgQWRkZWQgJiM4MjE2O3NhdmUgYXMmIzgy MTc7IG9wdGlvbjwvbGk+CgkJPGxpPjE3IE1hciAwNiB8IDAuMyB8IEFkZGVkICYjODIxNjtz YXZlIGFzIHBocCYjODIxNzs8L2xpPgoJCTxsaT4xMCBBcHIgMDYgfCAwLjQgfCBBZGRlZCBz dXBwb3J0IGZvciBwbHVnaW5fY2FjaGVfZGlyPC9saT4KCQk8bGk+MDQgSmFuIDA4IHwgMC41 IHwgRnVsbCBzdXBwb3J0IGZvciBzdGQgdGVtcGxhdGU7IGNvbXByZXNzZWQgcGx1Z2luczsg TGlicmFyeSBwbHVnaW5zOyBUZXh0aWxlIGhlbHAgYW5kIHN0eWxpbmc7IGludGVncmF0aW9u IHdpdGggbmV0LWNhcnZlciYjODIxNztzIFBsdWdpbiBIZWxwIFZpZXdlcjwvbGk+CgkJPGxp PjA3IEphbiAwOCB8IDAuNiB8IEJ1aWx0LWluIGhlbHAgdmlld2VyICh0aGFua3MgbmV0LWNh cnZlcik7IHN1cHBvcnQgZm9yIEVkaXQgQXJlYSAmYW1wOyBDb2RlUHJlc3MoaXNoKSAodGhh bmtzIHZhcmlhYXMpOyBIZWxwIGJsb2NrL0NvZGUgYmxvY2sgcG9zaXRpb24gc3dpdGNoYWJs ZSBvbiBleHBvcnQ7IGFkZGVkIFNldHVwIHByZWZzIHBhZ2U7IGxpbmUgYnJlYWsvc3R5bGUg YnVnZml4ZXM8L2xpPgoJCTxsaT4wOCBKYW4gMDggfCAwLjcgfCBSZS1pbXBvcnRpbmcgcGx1 Z2lucyBub3cgcmV0YWlucyBzdHlsZSBibG9jazsgYWRkZWQgJiM4MjE2O2FkbWluIHNpZGUg cGx1Z2luIHdpdGggY2xpZW50LXNpZGUgdHlwZSYjODIxNzsgd2FybmluZzsgY2hhbmdlZCBi dXR0b24gc3R5bGluZyBhbmQgcG9zaXRpb25zIChhbGwgdGhhbmtzIG5ldC1jYXJ2ZXIpOyBn VHh0KCkgcHJlZiBsYWJlbHMgYW5kICYjODIxNjtpbnRlbGxpZ2VudCYjODIxNzsgcHJlZnMg KGdvIGpRdWVyeSBnbyEpOyBjYWNoZWQgcGx1Z2lucyBub3cgYWxzbyBoYXZlIGRpcmVjdCBl eHBvcnQgZnJvbSBFZGl0IHBhZ2U7ICYjODIxNjtkb24mIzgyMTc7dCB0ZXh0aWxlIDxzcGFu IGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwvc3Bhbj48L3NwYW4+JiM4 MjE3OyBjaGVjazsgbWlub3IgYnVnZml4ZXM8L2xpPgoJCTxsaT4wOSBKYW4gMDggfCAwLjcx IHwgVGV4dGFyZWEgd2lkdGggY2FuIG5vdyBiZSBjb250cm9sbGVkIGZyb20gcHJlZnMsIGFu ZCBoZWlnaHQgZnJvbSBhIGRyYWcgYmFyOyBkZWZhdWx0IHdpZHRoIGluY3JlYXNlZCB0byAx MTAgY2hhcnM7IHB1Ymxpc2ggcGx1Z2lucyBmcm9tIHRoZSBsaXN0IHBhZ2U7IEluc3RhbGwg YnV0dG9uIHJlbW92ZWQgd2hlbiBwcmVmcyBhbGwgY29ycmVjdGx5IGluc3RhbGxlZCAoYWxs IHRoYW5rcyB2YXJpYWFzIC8gaWJsYXN0b2ZmKTwvbGk+CgkJPGxpPjEwIEphbiAwOCB8IDAu NzIgfCBGaXhlZCBidWcgaWYgcGx1Z2luIGhhcyBubyBoZWxwOyBzdHlsZSBzZWN0aW9uIG5v IGxvbmdlciBzdG9yZWQvZXhwb3J0ZWQgaWYgaXQmIzgyMTc7cyBub3QgaW4gdXNlICh0aGFu a3MgdGhlX2dob3N0IC8gaWJsYXN0b2ZmKTwvbGk+CgkJPGxpPjExIEphbiAwOCB8IDAuNzMg fCBBZGRlZCBzdXBwb3J0IGZvciA8ZW0+cmVhZGluZzwvZW0+IGFuIG9wdGlvbmFsIHJldmlz aW9uIGZyb20gdGhlIHRlbXBsYXRlIHBhcnNlciBhbmQgYXBwZW5kaW5nIGl0IHRvIHRoZSB2 ZXJzaW9uICh0aGFua3MgbmV0LWNhcnZlcik7IG1vcmUgZ1R4dCgpIHN0cmluZ3MgY29udmVy dGVkPC9saT4KCQk8bGk+MjggTWFyIDA4IHwgMC43NCB8IEZpeGVkIGVtcHR5IHBsdWdpbiBj b2RlIGlmIFN0eWxlIGJsb2NrIGxlZnQgYmxhbmsgOyBmaXhlZCBzdHJpcC9zbGFzaC9lbmNv ZGluZyBlcnJvcnMgKHRoYW5rcyB0aGVfZ2hvc3QvcnV1ZCkgOyBmaXhlZCBjcmxmIG5ld2xp bmVzIGluIGNvZGUgYmxvY2sgKHRoYW5rcyBoYWtqb29uL3J1dWQpPC9saT4KCQk8bGk+Mjgg TWF5IDA4IHwgMC43NSB8IEFkZGVkICYjODIxNjttb2RpZmllZCYjODIxNzsgdG8gdGhlIFZl cnNpb24gY29sdW1uICh0aGFua3MgdWxpKSA7IGFkZGVkIGFiaWxpdHkgdG8gcmVuYW1lIGZp bGVzIGluIHRoZSBwbHVnaW4gY2FjaGUgZGlyIHdoZW4gdGhlIHZlcnNpb24gY2hhbmdlczwv bGk+CgkJPGxpPjAzIE5vdiAwOCB8IDAuOCB8IEFkZGVkIHN1cHBvcnQgZm9yIHJlY29tbWVu ZGVkIHBsdWdpbiBsb2FkIG9yZGVyIDsgYWRkZWQgQWRtaW4tb25seSBwbHVnaW4gdHlwZTsg YWRkZWQgYWJpbGl0eSB0byBvdmVycmlkZSBmaWxlbmFtZSBmb3JtYXQgb24gZXhwb3J0IDsg YWRkZWQgcmVzdG9yZSBwb2ludC9yb2xsYmFjayAodGhhbmtzIG1hdmVyaWNrKSA7IGFkZGVk IGNoYXJhY3RlciBjb3VudCAodGhhbmtzIHBlcGViZSkgOyByYXRpb25hbGlzZWQgdGhlIGxp c3QgYW5kIGVkaXQgcGFnZXMgOyBzcGVkIHVwIGV4cG9ydC9zYXZlIHJvdXRpbmVzIDsgZml4 ZWQgYSBmZXcgY29ybmVyIGNhc2UgYnVncyAoZS5nLiBlbXB0eSBwbHVnaW4gbmFtZSwgbWlz c2luZyBxdW90ZXMgaW4gdGVtcGxhdGUgb3B0aW9ucyk8L2xpPgoJCTxsaT4wMyBKYW4gMDkg fCAwLjgxIHwgQWRkZWQgdGV4dGlsZSBjYWNoZWluZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNl IHdpdGggbGFyZ2UgaGVscCBmaWxlcyA7IHByb2ZpbGVkIGNvZGUgYW5kIGltcHJvdmVkIHNw ZWVkIGluIHZhcmlvdXMgZnVuY3Rpb25zPC9saT4KCQk8bGk+MjMgRmViIDA5IHwgMC44MiB8 IENhbiBub3cgY3JlYXRlIG5ldyB0ZW1wbGF0ZSBmaWxlcyBvbiB0aGUgZmx5ICh0aGFua3Mg YXp3KSA7IGZpeGVkIFRleHRpbGUgbGltaXQgb24gbGFyZ2UgaGVscCBmaWxlcyA7IGZpeGVk IGRhdGFiYXNlIGNhbGxzIGZvciBNeVNRTCBzdHJpY3QgbW9kZSAodGhhbmtzIEdvY29tIC8g YXp3KTwvbGk+CgkJPGxpPjExIEFwciAwOSB8IDAuODMgfCBGaXhlZCBoZWxwIGZpbGUgPHNw YW4gY2xhc3M9ImNhcHMiPjxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+PC9zcGFuPiBv dXRwdXQgc28gaXQgdmFsaWRhdGVzIDsgdXNlIDxjb2RlPiRwcmVmczwvY29kZT4gaW5zdGVh ZCBvZiA8Y29kZT4kR0xPQkFMUzwvY29kZT4gaW50ZXJuYWxseSA7IGNoZWNrIGlmIHBsdWdp bl9jYWNoZV9kaXIgZXhpc3RzIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0IG9uIHRoZSBsaXN0 IHBhZ2U8L2xpPgoJCTxsaT4yOSBBdWcgMDkgfCAwLjkgfCBSZXF1aXJlcyA8c3BhbiBjbGFz cz0iY2FwcyI+PHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj48L3NwYW4+IDQuMi4wKyA7 IGFkZGVkIHN1cHBvcnQgZm9yIHBsdWdpbiBwcmVmcy9saWZlY3ljbGUgYW5kIGxhcmdlciBw bHVnaW4gY29kZSA7IGZpeGVkIDxzcGFuIGNsYXNzPSJjYXBzIj48c3BhbiBjbGFzcz0iY2Fw cyI+Q1NTPC9zcGFuPjwvc3Bhbj4gZGVsaW1pdGVyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJp bGl0eSA7IG5ldyBwbHVnaW4gdGVtcGxhdGUgZGV0YWlscyB1c2VkPC9saT4KCQk8bGk+MTEg RmViIDEwIHwgMC45MSB8IEFkZGVkIEp1bXAgVG8gTGluZSBjYXBhYmlsaXR5ICYjODIxMjsg aW4gbW9zdCBicm93c2VycyAodGhhbmtzIHRoZWJvbWJzaXRlKTwvbGk+Cgk8L3VsPgoKCTxo MiBpZD0id3JpdGluZyI+V3JpdGluZyBhIHBsdWdpbjwvaDI+CgoJPHA+WW91IHNob3VsZCBi ZSBhd2FyZSBvZiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92 aWV3dG9waWMucGhwP2lkPTk4ODEiPlBsdWdpbiBBdXRob3IgUmVzb3VyY2VzPC9hPiB0b3Bp YyBvbiB0aGUgVGV4dHBhdHRlcm4gU3VwcG9ydCBGb3J1bSwgYW5kIHlvdSBtaWdodCBhbHNv IHdhbnQgdG8gaGF2ZSBhIGxvb2sgYXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9pbnNwaXJlZC5r aWV2LnVhL3R4cC1wbHVnaW4tY2hlYXRzaGVldCI+VGV4dFBhdHRlcm4gcGx1Z2luIGNoZWF0 IHNoZWV0PC9hPiBhbmQgdGhlIHR1dG9yaWFscyBhbmQgZ3VpZGVzIGZvciA8YSBocmVmPSJo dHRwOi8vdGV4dHBhdHRlcm4ubmV0L3dpa2kvaW5kZXgucGhwP3RpdGxlPUV4dGVuZGluZ19U ZXh0cGF0dGVybiI+RXh0ZW5kaW5nIFRleHRwYXR0ZXJuPC9hPiBvbiBUZXh0Qm9vay48L3A+ CgoJPHA+SGFwcHkgcGx1Z2luIGF1dGhvcmluZyA6LSk8L3A+CgoJPHA+PC9kaXY+PGJyIC8+ CjwhLS0gKioqIEJFR0lOIFBMVUdJTiBDU1MgKioqIC0tPjxiciAvPgo8c3R5bGUgdHlwZT0i dGV4dC9jc3MiPgojaWVkX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI2llZF9oZWxwIC5y ZXF1aXJlZCB7Y29sb3I6cmVkO30KI2llZF9oZWxwIGNvZGUgeyBmb250OiAxMDUlLzEzMCUg JiM4MjIwO0NvdXJpZXIgTmV3JiM4MjIxOywgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3Jv dW5kLWNvbG9yOiAjRkZGRkNDO30KI2llZF9oZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6 IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50 ZXI7IH0KI2llZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBw YWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5z LXNlcmlmOyB9CiNpZWRfaGVscCBoMyB7IGNvbG9yOiAjMjc1Njg1OyBmb250OiBib2xkIDEy cHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTVw eCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9PGJyIC8+Cjwvc3R5bGU+PGJyIC8+ CjwhLS0gKioqIEVORCBQTFVHSU4gQ1NTICoqKiAtLT48L3A+IjtzOjQ6ImNvZGUiO3M6NTcz Nzc6ImlmKEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykgew0KCWFkZF9wcml2cygnaWVkX3Bs dWdpbl9jb21wb3NlcicsJzEsMicpOw0KCWFkZF9wcml2cygncGx1Z2luX3ByZWZzLmllZF9w bHVnaW5fY29tcG9zZXInLCcxLDInKTsNCglyZWdpc3Rlcl90YWIoJ2V4dGVuc2lvbnMnLCAn aWVkX3BsdWdpbl9jb21wb3NlcicsIGllZF9wbHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9jb21w b3NlcicpKTsNCglyZWdpc3Rlcl9jYWxsYmFjaygnaWVkX3BsdWdpbl9jb21wb3NlcicsICdp ZWRfcGx1Z2luX2NvbXBvc2VyJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soJ2llZF9wbHVnaW5f c2V0dXAnLCAncGx1Z2luX3ByZWZzLmllZF9wbHVnaW5fY29tcG9zZXInKTsNCglyZWdpc3Rl cl9jYWxsYmFjaygnaWVkX3BsdWdpbl93ZWxjb21lJywgJ3BsdWdpbl9saWZlY3ljbGUuaWVk X3BsdWdpbl9jb21wb3NlcicpOw0KDQoJZ2xvYmFsICRpZWRfcGx1Z2luX2NvbXBvc2VyLCAk aWVkX3BsdWdpbl9wcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFscywgJHByZWZzOw0KCSRpZWRf cGx1Z2luX2dsb2JhbHMgPSBhcnJheSgNCgkJJ2Nzc19zdGFydCcgPT4gJzwhLS0nLA0KCQkn Y3NzX2VuZCcgPT4gJy0tPicsDQoJCSdkbG1fc3RhcnQnID0+ICcjJywNCgkJJ2RsbV9lbmQn ID0+ICcnLA0KCQknc3RhcnQnID0+ICcgLS0tIEJFR0lOIFBMVUdJTiBTRUNUSU9OIC0tLScs DQoJCSdlbmQnID0+ICcgLS0tIEVORCBQTFVHSU4gU0VDVElPTiAtLS0nLA0KCQknc2l6ZV9o ZWxwJyA9PiAnNjM1MzUnLA0KCQknc2l6ZV9jc3MnID0+ICcyMDAwJywNCgkJJ3NpemVfY29k ZScgPT4gJzE2Nzc3MjE1JywNCgkpOw0KCS8vIERvdWJsZSBhcnJheTogMXN0IGlzIGEgbGlz dCBvZiBjdXJyZW50IHByZWZzIGFuZCB0aGVpciBkZWZhdWx0cywNCgkvLyAybmQgaXMgYSBs aXN0IG9mIGxlZ2FjeSBwcmVmcyB0aGF0IG1heSBuZWVkIHJlbW92aW5nIGluIGZ1dHVyZSAo ZGVmYXVsdHMgYWxsIHNldCBlbXB0eSkNCgkkaWVkX3BsdWdpbl9wcmVmcyA9IGFycmF5KA0K CQlhcnJheSgNCgkJCSdpZWRfcGx1Z2luX2VkaXRvcicgPT4gJ25vbmUnLA0KCQkJJ2llZF9w bHVnaW5fZWRpdG9yX3BhdGgnID0+IGh1LidqcycuRFMsDQoJCQknaWVkX3BsdWdpbl9lZGl0 b3Jfd2lkdGgnID0+ICcxMTAnLA0KCQkJJ2llZF9wbHVnaW5faGVscF9lZGl0b3InID0+ICd0 ZXh0aWxlJywNCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgnID0+IGh1Lidqcycu RFMsDQoJCQknaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInID0+ICcwJywNCgkJCSdpZWRfcGx1 Z2luX291dHB1dF9zZmlsZScgPT4gJ3tuYW1lfV92e3ZlcnNpb259LnR4dCcsDQoJCQknaWVk X3BsdWdpbl9vdXRwdXRfc2ZpbGVjJyA9PiAne25hbWV9X3Z7dmVyc2lvbn1femlwLnR4dCcs DQoJCQknaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVwJyA9PiAne25hbWV9X3Z7dmVyc2lvbn0u cGhwJywNCgkJCSdpZWRfcGx1Z2luX291dHB1dF90bXBjYWNoZScgPT4gJHByZWZzWyd0ZW1w ZGlyJ10sDQoJCSksDQoJCWFycmF5KA0KCQkJJ2llZF9wbHVnaW5fbm90X3VzZWRfYW55X21v cmVfcGxhY2Vob2xkZXInID0+ICcnLA0KCQkpDQoJKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gaWVkX3BsdWdpbl9jb21wb3NlcigkZXZlbnQsICRzdGVwKSB7DQoJaWYoISRzdGVw IG9yICFpbl9hcnJheSgkc3RlcCwgYXJyYXkoDQoJCQknaWVkX3BsdWdpbl9kZWxldGUnLA0K CQkJJ2llZF9wbHVnaW5fZWRpdCcsDQoJCQknaWVkX3BsdWdpbl9oZWxwJywNCgkJCSdpZWRf cGx1Z2luX2xpc3QnLA0KCQkJJ2llZF9wbHVnaW5faW5zdGFsbCcsDQoJCQknaWVkX3BsdWdp bl9zYXZlJywNCgkJCSdpZWRfcGx1Z2luX3Jlc3RvcmUnLA0KCQkJJ2llZF9zd2l0Y2hfc3Rh dHVzJywNCgkJCSdpZWRfc2V0X29yZGVyJywNCgkJCSdpZWRfcGx1Z2luX3NldHVwJywNCgkJ CSdpZWRfcGx1Z2luX3ByZWZzX2luc3RhbGwnLA0KCQkJJ2llZF9wbHVnaW5fcHJlZnNfcmVt b3ZlJywNCgkJCSdpZWRfcGx1Z2luX3ByZWZzX3VwZGF0ZScsDQoJCQknaWVkX3BsdWdpbl9j cmVhdGVfbmV3JywNCgkJCSdpZWRfcGx1Z2luX3NhdmVfYXNfZmlsZScsDQoJCQknaWVkX3Bs dWdpbl9zYXZlX2FzX3BocF9maWxlJywNCgkJCSdpZWRfcGx1Z2luX3VwbG9hZCcsDQoJCQkn aWVkX3BsdWdpbl9oZWxwX3ZpZXdlcicsDQoJCSkpKSB7DQoJCWllZF9wbHVnaW5fbGlzdCgp Ow0KCX0gZWxzZSAkc3RlcCgpOw0KfQ0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdp bl93ZWxjb21lKCRldmVudCwgJHN0ZXApIHsNCgkkbXNnID0gJyc7DQoJc3dpdGNoICgkc3Rl cCkgew0KCQljYXNlICdpbnN0YWxsZWQnOg0KCQkJaWVkX3BsdWdpbl9wcmVmc19pbnN0YWxs KDApOw0KCQkJJG1zZyA9ICdUaGFua3MgZm9yIGluc3RhbGxpbmcgdGhlIHBsdWdpbiBjb21w b3Nlci4gUGxlYXNlIHJlYWQgdGhlIGRvY3MgOi0pJzsNCgkJCWJyZWFrOw0KCQljYXNlICdk ZWxldGVkJzoNCgkJCWllZF9wbHVnaW5fcHJlZnNfcmVtb3ZlKDApOw0KCQkJYnJlYWs7DQoJ fQ0KCXJldHVybiAkbXNnOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyBSZXVybnMgYW4gYXJyYXkg b2YgZmlsZW5hbWVzOyAxc3QgaXMgdGhlIHN0YW5kYXJkIHBsdWdpbiwgMm5kIGlzIHRoZSBj b21wcmVzc2VkIHBsdWdpbiwgM3JkIGlzIHRoZSBQSFAgdGVtcGxhdGUNCmZ1bmN0aW9uIGll ZF9wbHVnaW5fZ2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKSB7DQoJZ2xvYmFsICRpZWRfcGx1 Z2luX3ByZWZzLCAkcHJlZnM7DQoNCgkkb3V0ID0gYXJyYXkoDQoJCSgoaXNzZXQoJHByZWZz WydpZWRfcGx1Z2luX291dHB1dF9zZmlsZSddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1 Z2luX291dHB1dF9zZmlsZSddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxl J10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGUnXSks DQoJCSgoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMnXSkgJiYgIWVt cHR5KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfc2ZpbGVjJ10pKSA/ICRwcmVmc1snaWVk X3BsdWdpbl9vdXRwdXRfc2ZpbGVjJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVkX3Bs dWdpbl9vdXRwdXRfc2ZpbGVjJ10pLA0KCQkoKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9v dXRwdXRfc2ZpbGVwJ10pICYmICFlbXB0eSgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3Nm aWxlcCddKSkgPyAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCddIDogJGllZF9w bHVnaW5fcHJlZnNbMF1bJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlcCddKSwNCgkpOw0KDQoJ JHJlcCA9IGFycmF5KA0KCQkie25hbWV9IiA9PiAkbmFtZSwNCgkJInt2ZXJzaW9ufSIgPT4g JHZlcnNpb24sDQoJKTsNCg0KCWZvcmVhY2ggKCRvdXQgYXMgJGZpZHggPT4gJGZuYW1lKSB7 DQoJCSRmbmFtZSA9IHN0cnRyKCRmbmFtZSwgJHJlcCk7DQoJCSRvdXRbJGZpZHhdID0gc2Fu aXRpemVGb3JGaWxlKCRmbmFtZSk7DQoJfQ0KDQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fbGlzdCgkbWVzc2FnZT0nJykgew0KCWdsb2Jh bCAkcHJlZnM7DQoNCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsN CgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKS4NCnRyKHRkYSgNCmZvcm0oDQpmSW5wdXQoJ3Rl eHQnLCduYW1lJywnJywnJywnJywnJywnMzAnLCcwJykNCi4gZklucHV0KCdzdWJtaXQnLCdz dWJtaXQnLGllZF9wbHVnaW5fZ1R4dCgnY3JlYXRlX25ldycpLCdzbWFsbGVyYm94JykNCi4g c0lucHV0KCdpZWRfcGx1Z2luX2NyZWF0ZV9uZXcnKQ0KLiBlSW5wdXQoJ2llZF9wbHVnaW5f Y29tcG9zZXInKQ0KKQ0KLCcgY29sc3Bhbj0iNiIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1 MHB4IicpDQoudGRhKGZvcm0oZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgaWVkX3BsdWdp bl9nVHh0KCdzZXR1cCcpLCAncHVibGlzaCcpLnNJbnB1dCgnaWVkX3BsdWdpbl9zZXR1cCcp LmVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpKSwnIGNvbHNwYW49IjYiIHN0eWxlPSJi b3JkZXI6MDtoZWlnaHQ6NTBweCInKSkuDQphc3NIZWFkKCdwbHVnaW4nLCdhdXRob3InLGdU eHQoJ3ZlcnNpb24nKS4nICgnLmdUeHQoJ3BsdWdpbl9tb2RpZmllZCcpLicpJywnZGVzY3Jp cHRpb24nLCdwdWJsaXNoJywnb3JkZXInLCdhY3RpdmUnLCcnKTsNCg0KCSRycyA9IHNhZmVf cm93c19zdGFydCgiKiIsInR4cF9wbHVnaW4iLCAiMT0xIG9yZGVyIGJ5IG5hbWUiKTsNCg0K CXdoaWxlICgkYSA9IG5leHRSb3coJHJzKSkgew0KCQlleHRyYWN0KCRhKTsNCgkJJGVuYW1l ID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9w bHVnaW5fZWRpdCYjMzg7bmFtZT0nLiRuYW1lLiciPicuJG5hbWUuJzwvYT4nOw0KCQkkaGxp bmsgPSAoJGhlbHApID8gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMz ODtzdGVwPWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4O25hbWU9Jy4kbmFtZS4nIj4nLmdU eHQoJ2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7DQoJCSRvTGluayA9IGllZF9wbHVnaW5fb3Jk ZXJfZm9ybSgkbmFtZSwgJGxvYWRfb3JkZXIpOw0KCQkkZm5hbWVzID0gaWVkX3BsdWdpbl9n ZXRfbmFtZSgkbmFtZSwgJHZlcnNpb24pOw0KCQkkcHVidGFnID0gdGFnKGdUeHQoJ3B1Ymxp c2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLiciIHRpdGxlPSInIC4g aWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAnLiRmbmFtZXNbMF0uICciJyk7DQoJCSRw dWJ6dGFnID0gdGFnKGllZF9wbHVnaW5fZ1R4dCgnY29tcHJlc3MnKSwnYScsJyBocmVmPSI/ ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNf ZmlsZSYjMzg7bmFtZT0nLiRuYW1lLicmIzM4O3ppcD10cnVlIiB0aXRsZT0iJyAuIGllZF9w bHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4kZm5hbWVzWzFdLiAnIicpOw0KCQkkbW9kaWZp ZWQgPSAoc3RydG9sb3dlcigkY29kZSkgIT0gKHN0cnRvbG93ZXIoJGNvZGVfcmVzdG9yZSkp KTsNCgkJJHBsdWdwcmVmID0gKCgkZmxhZ3MgJiBQTFVHSU5fSEFTX1BSRUZTKSAmJiAkc3Rh dHVzKSA/ICcgJy50YWcoICdbJy5nVHh0KCdwbHVnaW5fcHJlZnMnKS4nXScgLCAnYScsICcg aHJlZj0iP2V2ZW50PXBsdWdpbl9wcmVmcy4nLnVybGVuY29kZSgkbmFtZSkuJyInKSA6ICcn Ow0KDQoJCWVjaG8gdHIodGQoJGVuYW1lLiRwbHVncHJlZikNCi50ZCgoICgkYXV0aG9yX3Vy aSkgPyAnPGEgaHJlZj0iJy4kYXV0aG9yX3VyaS4nIj4nLiRhdXRob3IuJzwvYT4nIDogJGF1 dGhvciksMTYwKQ0KLnRkKCgoJG1vZGlmaWVkKSA/ICc8YSBocmVmPSJpbmRleC5waHA/ZXZl bnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3Jlc3RvcmUmIzM4 O25hbWU9Jy4kbmFtZS4nIiB0aXRsZT0iJy5pZWRfcGx1Z2luX2dUeHQoJ3Jlc3RvcmVfaGVs cCcpLiciIG9uY2xpY2s9InJldHVybiB2ZXJpZnkoXCcnLmllZF9wbHVnaW5fZ1R4dCgncmVz dG9yZV92ZXJpZnknLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpLidcJyk7Ij4nLiR2ZXJz aW9uLic8L2E+JyA6ICR2ZXJzaW9uKSAuICgoJG1vZGlmaWVkKSA/ICcmbmJzcDsoJy5nVHh0 KCd5ZXMnKS4nKScgOiAnJyksMTApDQoudGQoJGRlc2NyaXB0aW9uLDI2MCkNCi50ZCgkcHVi dGFnIC4nIHwgJy4gJHB1Ynp0YWcgLicgfCAnLiAkaGxpbmspDQoudGQoJG9MaW5rLCA0MCkN Ci50ZChpZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSx5ZXNfbm8oJHN0YXR1cykpLDMw KQ0KDQoudGQoZExpbmsoJ2llZF9wbHVnaW5fY29tcG9zZXInLCdpZWRfcGx1Z2luX2RlbGV0 ZScsJ25hbWUnLCRuYW1lKSwzMCkNCik7DQoJCXVuc2V0KCRuYW1lLCRwYWdlLCRkZWxldGVs aW5rKTsNCgl9DQoNCglpZiAoIWVtcHR5KCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddKSAm JiBmaWxlX2V4aXN0cygkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXSkpIHsNCgkJJGZpbGVu YW1lcyA9IGFycmF5KCk7DQoJCSRkaXIgPSBkaXIoJHByZWZzWydwbHVnaW5fY2FjaGVfZGly J10pOw0KCQl3aGlsZSAoJGZpbGUgPSAkZGlyLT5yZWFkKCkpIHsNCgkJCWlmKCRmaWxlICE9 ICIuIiAmJiAkZmlsZSAhPSAiLi4iKSB7DQoJCQkJJGZpbGVhZGRyID0gJHByZWZzWydwbHVn aW5fY2FjaGVfZGlyJ10uRFMuJGZpbGU7DQoJCQkJaWYgKCFpc19kaXIoJGZpbGVhZGRyKSkg ew0KCQkJCQkkZmlsZW5hbWVzW109JGZpbGU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCSRkaXIt PmNsb3NlKCk7DQoJCSgkZmlsZW5hbWVzKT9uYXRjYXNlc29ydCgkZmlsZW5hbWVzKTonJzsN CgkJZWNobyB0cigNCgkJdGRhKA0KCQl0YWcoaWVkX3BsdWdpbl9nVHh0KCdydW5fZnJvbScp LicgJy50YWcoJ3BsdWdpbl9jYWNoZV9kaXInLCdhY3JvbnltJywnIHRpdGxlPSInLiRwcmVm c1sncGx1Z2luX2NhY2hlX2RpciddLiciIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNo ZWQgYmxhY2siJykuJzonLCdoMScpDQoJCSwnIGNvbHNwYW49IjgiIHN0eWxlPSJib3JkZXI6 MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykNCg0KCQkpOw0KDQoJCWVjaG8gYXNz SGVhZCgncGx1Z2luJywnYXV0aG9yJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywncHVibGlz aCcsJycsJycpOw0KCQlmb3JlYWNoKCRmaWxlbmFtZXMgYXMgJGZpbGVuYW1lKSB7DQoJCQkk ZmlsZWV4dD0gYXJyYXlfcG9wKGV4cGxvZGUgKCcuJywkZmlsZW5hbWUpKTsNCgkJCWlmICgk ZmlsZWV4dD09J3BocCcpIHsNCgkJCQkkYmFzZW5hbWU9YmFzZW5hbWUoJGZpbGVuYW1lKTsN CgkJCQkkcGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJHByZWZzWydwbHVnaW5fY2Fj aGVfZGlyJ10uRFMuJGZpbGVuYW1lKTsNCgkJCQkkaGxpbmsgPSAoJHBsdWdpblsnaGVscCdd KSA/ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRf cGx1Z2luX2hlbHBfdmlld2VyJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nIj4nLmdUeHQo J2hlbHAnKS4nPC9hPicgOiAnTm9uZSc7DQoJCQkJJGVmaWxlID0gJzxhIGhyZWY9Ij9ldmVu dD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7Zmls ZW5hbWU9Jy4kZmlsZW5hbWUuJyI+Jy4kcGx1Z2luWyduYW1lJ10uJzwvYT4nOw0KCQkJCSRm bmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRwbHVnaW5bJ25hbWUnXSwgJHBsdWdpblsn dmVyc2lvbiddKTsNCgkJCQkkcGx1Z3ByZWYgPSAoKCRwbHVnaW5bJ2ZsYWdzJ10gJiBQTFVH SU5fSEFTX1BSRUZTKSkgPyAnICcudGFnKCAnWycuZ1R4dCgncGx1Z2luX3ByZWZzJykuJ10n ICwgJ2EnLCAnIGhyZWY9Ij9ldmVudD1wbHVnaW5fcHJlZnMuJy51cmxlbmNvZGUoJHBsdWdp blsnbmFtZSddKS4nIicpIDogJyc7DQoNCgkJCQllY2hvIHRyKA0KCQkJCXRkKA0KCQkJCXRh ZygkZmlsZW5hbWUsJ2RpdicsJyBzdHlsZT0iY29sb3I6Z3JheTtib3JkZXI6MDtwYWRkaW5n OjFweCAycHggMnB4IDFweDsiJykNCgkJCQkuKGlzc2V0KCRwbHVnaW5bJ25hbWUnXSk/JGVm aWxlLiRwbHVncHJlZi4nPGJyIC8+JzonJykuJyAnDQoJCQkJKQ0KCQkJCS50ZCgNCgkJCQko IGlzc2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/JzxhIGhyZWY9IicuJHBsdWdpblsnYXV0 aG9yX3VyaSddLiciPic6JycgKSAuDQoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3InXSk/ JHBsdWdpblsnYXV0aG9yJ106JyZuYnNwOycgKS4NCgkJCQkoIGlzc2V0KCRwbHVnaW5bJ2F1 dGhvcl91cmknXSk/JzwvYT4nOicnICksIDE2MA0KCQkJCSkNCgkJCQkudGQoKGlzc2V0KCRw bHVnaW5bJ3ZlcnNpb24nXSk/JHBsdWdpblsndmVyc2lvbiddOicmbmJzcDsnKSwxMCkNCgkJ CQkudGQoKGlzc2V0KCRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10pPyRwbHVnaW5bJ2Rlc2NyaXB0 aW9uJ106JyZuYnNwOycpLDI2MCkNCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ25hbWUnXSk/ DQoJCQkJdGFnKGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdp bl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5h bWU9Jy4kZmlsZW5hbWUuJyIgdGl0bGU9IicgLiBpZWRfcGx1Z2luX2dUeHQoJ2V4cG9ydCcp IC4nICcuJGZuYW1lc1swXS4gJyInKQ0KCQkJCQkJLicgfCAnLnRhZyhpZWRfcGx1Z2luX2dU eHQoJ2NvbXByZXNzJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXIm IzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O2ZpbGVuYW1lPScuJGZpbGVu YW1lLicmIzM4O3ppcD10cnVlIiB0aXRsZT0iJyAuIGllZF9wbHVnaW5fZ1R4dCgnZXhwb3J0 JykgLicgJy4kZm5hbWVzWzFdLiAnIicpOg0KCQkJCXRhZygnJm5ic3A7Jywnc3BhbicsJyBz dHlsZT0iY29sb3I6Z3JheSInKQ0KCQkJCSkuJyB8ICcuJGhsaW5rKQ0KCQkJCS50ZCgnJykN CgkJCQkudGQoJycpDQoJCQkJKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCWVjaG8gdHIoDQp0ZGEo DQonPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSJpbmRleC5w aHAiIG1ldGhvZD0icG9zdCI+Jy4NCnN0YXJ0VGFibGUoJ2VkaXQnLCdsZWZ0JykuDQp0cih0 ZGEoIGhJbnB1dCgnTUFYX0ZJTEVfU0laRScsMTAwMDAwMCkuDQpncmFmKGllZF9wbHVnaW5f Z1R4dCgndXBsb2FkX3BocCcpLic6ICcuDQpmSW5wdXQoJ2ZpbGUnLCd0aGVmaWxlJywnJywn ZWRpdCcpLg0KZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLGdUeHQoJ3VwbG9hZCcpLCdzbWFs bGVyYm94JykpLg0KZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykuDQpzSW5wdXQoJ2ll ZF9wbHVnaW5fdXBsb2FkJykgLCAnIHN0eWxlPSJib3JkZXI6MHB4IHNvbGlkIGdyYXkiJyAp Lg0KdGRhKCB0YWcoaWVkX3BsdWdpbl9nVHh0KCduYW1lJyksICdhY3JvbnltJywnIHRpdGxl PSInLmllZF9wbHVnaW5fZ1R4dCgnbmFtZV90b29sdGlwJykuJyIgc3R5bGU9ImJvcmRlci1i b3R0b206MXB4IGRhc2hlZCBibGFjayInKS4nOiAnLiBmSW5wdXQoJ3RleHQnLCduYW1lJywn eHh4X3h4eHh4eCcsJycsJycsJycsJzMwJywnMCcpICwgJyBzdHlsZT0iYm9yZGVyOjBweCBz b2xpZCBncmF5O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiJyApKS4NCmVuZFRhYmxlKCkuDQon PC9mb3JtPicNCiwnIGNvbHNwYW49IjgiIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6NTBweDt0 ZXh0LWFsaWduOmxlZnQiJykNCik7DQoJZWNobyBlbmRUYWJsZSgpOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBpZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSwkbGlua3RleHQp IHsNCgkkb3V0ID0gJzxhIGhyZWY9ImluZGV4LnBocD8nOw0KCSRvdXQgLj0gJ2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3N3aXRjaF9zdGF0dXMmIzM4O3N0YXR1 cz0nLg0KCSRzdGF0dXMuJyYjMzg7bmFtZT0nLnVybGVuY29kZSgkbmFtZSkuJyInOw0KCSRv dXQgLj0gJz4nLiRsaW5rdGV4dC4nPC9hPic7DQoJcmV0dXJuICRvdXQ7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIGllZF9zd2l0Y2hfc3RhdHVzKCkgew0KCWV4dHJhY3QoZG9TbGFz aChncHNhKGFycmF5KCduYW1lJywnc3RhdHVzJykpKSk7DQoJJGNoYW5nZSA9ICgkc3RhdHVz KSA/IDAgOiAxOw0KCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwgInN0YXR1cz0kY2hhbmdl IiwgIm5hbWU9JyRuYW1lJyIpOw0KCWllZF9wbHVnaW5fbGlzdChnVHh0KCdwbHVnaW5fc2F2 ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVu Y3Rpb24gaWVkX3NldF9vcmRlcigpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgn bmFtZScsICdsb2FkX29yZGVyJykpKSk7DQoJJG9yZGVyID0gbWluKG1heCggaW50dmFsKCRs b2FkX29yZGVyKSwgMSksIDkpOw0KCXNhZmVfdXBkYXRlKCd0eHBfcGx1Z2luJywgImxvYWRf b3JkZXIgPSAkbG9hZF9vcmRlciIsICJuYW1lID0gJyRuYW1lJyIpOw0KCWllZF9wbHVnaW5f bGlzdChnVHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmFtZSkpKTsN Cn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9vcmRlcl9mb3JtKCRuYW1l LCAkbG9hZF9vcmRlcikgew0KCWZvciAoJGkgPSAxOyAkaSA8PSA5OyAkaSsrKSAkb3JkZXJz WyRpXSA9ICRpOw0KCXJldHVybiBmb3JtKA0KCQllSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9z ZXInKS5uLg0KCQlzSW5wdXQoJ2llZF9zZXRfb3JkZXInKS5uLg0KCQloSW5wdXQoJ25hbWUn LCAkbmFtZSkubi4NCgkJc2VsZWN0SW5wdXQoJ2xvYWRfb3JkZXInLCAkb3JkZXJzLCAkbG9h ZF9vcmRlciwgMCwgMSkNCgkJLCdkaXNwbGF5OmlubGluZScNCgkpOw0KfQ0KDQovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2RlbGV0ZSgpIHsNCgkkbmFtZSA9IGRvU2xhc2go cHMoJ25hbWUnKSk7DQoJc2FmZV9kZWxldGUoInR4cF9wbHVnaW4iLCJuYW1lPSckbmFtZSci KTsNCglpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luX2RlbGV0ZWQnLCBhcnJheSgne25h bWV9JyA9PiAkbmFtZSkpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdp bl9yZXN0b3JlKCkgew0KCSRuYW1lID0gZG9TbGFzaChncHMoJ25hbWUnKSk7DQoJc2FmZV91 cGRhdGUoInR4cF9wbHVnaW4iLCJjb2RlID0gY29kZV9yZXN0b3JlIiwibmFtZT0nJG5hbWUn Iik7DQoJaWVkX3BsdWdpbl9saXN0KGllZF9wbHVnaW5fZ1R4dCgncmVzdG9yZWQnLCBhcnJh eSgne25hbWV9JyA9PiAkbmFtZSkpKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVk X3BsdWdpbl9lZGl0KCRtZXNzYWdlPScnLCRuZXdmaWxlPScnKSB7DQoJJHNpdGVfZGlyID0g aHU7DQoJJG5ld25hbWUgPSB0cmltKGdwcygnbmV3bmFtZScpKTsNCgkkbmFtZSA9IGVtcHR5 KCRuZXduYW1lKSA/IGdwcygnbmFtZScpIDogJG5ld25hbWU7DQoJcGFnZXRvcChnVHh0KCdl ZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7DQoJZWNobyBpZWRfaW5zZXJ0X2VkaXRvcnMoKTsN CgkkdGhlRmlsZSA9ICgkbmV3ZmlsZSkgPyAkbmV3ZmlsZSA6ICgoZ3BzKCdmaWxlbmFtZScp KSA/IGdwcygnZmlsZW5hbWUnKSA6ICRuYW1lKTsNCgllY2hvIGllZF9wbHVnaW5fZWRpdF9m b3JtKCR0aGVGaWxlLCBncHMoJ2ZpbGVuYW1lJyk/IDE6IDApOw0KfQ0KDQovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpmdW5jdGlvbiBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZT0nJywkZWRpdGZpbGU9MCkg ew0KCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1Z2luX3ByZWZzLCAkaWVkX3BsdWdpbl9nbG9i YWxzOw0KCWlmICghJGVkaXRmaWxlKSB7DQoJCSRycyA9IHNhZmVfcm93KCJhdXRob3IsIGF1 dGhvcl91cmksIHZlcnNpb24sIGRlc2NyaXB0aW9uLCBjb2RlLCBoZWxwLCBzdGF0dXMsIHR5 cGUsIGxvYWRfb3JkZXIsIGZsYWdzIiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7 DQoJCWV4dHJhY3QoJHJzKTsNCgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRf cGx1Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8IS0tfC0tPiIsIHRydWUpIDog YXJyYXkoJycsJGhlbHApOw0KCX0gZWxzZSB7DQoJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3Jl YWRfZmlsZSgkcHJlZnNbJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kbmFtZSk7DQoJCSRmaWxl bmFtZSA9ICRuYW1lOw0KCQkkZmlsZWV4dCA9IGFycmF5X3BvcCgkbmFtZT1leHBsb2RlICgn LicsJG5hbWUpKTsNCgkJJG5hbWUgPSBpbXBsb2RlKCRuYW1lKTsNCgkJZXh0cmFjdCgkcGx1 Z2luKTsNCgkJJHN0YXR1cyA9ICgkZmlsZWV4dD09J3BocCcpPyAxOiAwOw0KCX0NCgkkZWR3 aWR0aCA9IChpc3NldCgkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10pICYmIGlz X251bWVyaWMoJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddKSkgPyAkcHJlZnNb J2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10gOiAkaWVkX3BsdWdpbl9wcmVmc1swXVsnaWVk X3BsdWdpbl9lZGl0b3Jfd2lkdGgnXTsNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2Nzcykg PSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1sn Y3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJJHBsdWdp blsnbmFtZSddID0gJG5hbWU7DQoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOw0KCSRw bHVnaW5bJ2F1dGhvcl91cmknXSA9ICRhdXRob3JfdXJpOw0KCSRwbHVnaW5bJ3ZlcnNpb24n XSA9ICR2ZXJzaW9uOw0KCSRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247 DQoJJHBsdWdpblsnaGVscCddID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRuYW1lLCAkaGVscCwg JGNzcywgJHN0YXJ0X2NzcywgJGVuZF9jc3MpOw0KCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2Rl Ow0KCSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBlOw0KCSRwbHVnaW5bJ29yZGVyJ10gPSAkbG9h ZF9vcmRlcjsNCgkkcGx1Z2luWydmbGFncyddID0gJGZsYWdzOw0KCSRwbHVnaW5bJ21kNSdd ID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10gKTsNCglmb3IgKCRpID0gMTsgJGkgPD0gOTsgJGkr KykgJG9yZGVyc1skaV0gPSAkaTsNCg0KCSRkaXN0cmlidXRpb249Jzx0ZXh0YXJlYSBuYW1l PSJkaXN0cmlidXRpb24iIHJvd3M9IjEiIGNvbHM9IicuJGVkd2lkdGguJyIgb25jbGljaz0i dGhpcy5zZWxlY3QoKSI+Jy5iYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2luKSkuJzwv dGV4dGFyZWE+JzsNCg0KCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRwbHVnaW5b J25hbWUnXSwgJHBsdWdpblsndmVyc2lvbiddKTsNCgkkbmFtZWRMaW5rID0gKGlzc2V0KCRm aWxlbmFtZSkpID8gJ2ZpbGVuYW1lPScuJGZpbGVuYW1lIDogJ25hbWU9Jy4kbmFtZTsNCg0K CSRzbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3Rl cD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7Jy4kbmFtZWRMaW5rLiciPicgLmllZF9w bHVnaW5fZ1R4dCgnZXhwb3J0JykgLicgJy4gJGZuYW1lc1swXS4gJzwvYT4nOw0KCSRzemlw bGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7Jy4kbmFtZWRMaW5rLicmIzM4O3ppcD10cnVl Ij4nIC4gaWVkX3BsdWdpbl9nVHh0KCdleHBvcnQnKSAuJyAnLiAkZm5hbWVzWzFdLiAnIChj b21wcmVzc2VkKTwvYT4nOw0KCSRzcGhwbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3Bs dWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUmIzM4 OycuJG5hbWVkTGluay4nIj4nIC4gaWVkX3BsdWdpbl9nVHh0KCdzYXZlX2FzJykgLicgJy4g JGZuYW1lc1syXS4gJzwvYT4nOw0KCSR2aGVscGxpbmtmdWxsID0gKCRoZWxwKSA/ICc8YSBo cmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hl bHBfdmlld2VyJiMzODsnLiRuYW1lZExpbmsuJyI+WyAnLnN0cm9uZyhnVHh0KCd2aWV3Jyku JyAnLmdUeHQoJ2hlbHAnKSkuJyBdPC9hPicgOiAnJzsNCg0KCSRuZXduYW1lID0gZklucHV0 KCd0ZXh0JywnbmV3bmFtZScsJG5hbWUsJ2VkaXQnLCcnLCcnLCRlZHdpZHRoIC0gKGludCko JGVkd2lkdGgqMC4zKSwnMicpOw0KCSRhdXRob3IgPSBmSW5wdXQoJ3RleHQnLCdhdXRob3In LCRhdXRob3IsJ2VkaXQnLCcnLCcnLCRlZHdpZHRoLCcyJyk7DQoJJGF1dGhvcl91cmkgPSBm SW5wdXQoJ3RleHQnLCdhdXRob3JfdXJpJywkYXV0aG9yX3VyaSwnZWRpdCcsJycsJycsJGVk d2lkdGgsJzInKTsNCgkkdmVyc2lvbiA9IGZJbnB1dCgndGV4dCcsJ3ZlcnNpb24nLCR2ZXJz aW9uLCdlZGl0JywnJywnJywkZWR3aWR0aCAtIChpbnQpKCRlZHdpZHRoKjAuMyksJzInKSAu ICcmIzE2MDsmIzE2MDsnLiAoKCRlZGl0ZmlsZSkgPyBjaGVja2JveCgncmVuYW1lX2ZpbGUn LCAnMScsIDAsICcnLCdyZW5hbWVfZmlsZScpIC4gJyA8bGFiZWwgZm9yPSJyZW5hbWVfZmls ZSI+Jy5pZWRfcGx1Z2luX2dUeHQoJ3JlbmFtZV9maWxlJykuJzwvbGFiZWw+JyA6IGNoZWNr Ym94KCdyZXN0b3JlX3BvaW50JywgJzEnLCAwLCAnJywncmVzdG9yZV9wb2ludCcpIC4gJyA8 bGFiZWwgZm9yPSJyZXN0b3JlX3BvaW50Ij4nLmllZF9wbHVnaW5fZ1R4dCgncmVzdG9yZV9w b2ludCcpLic8L2xhYmVsPicpOw0KCSRkZXNjcmlwdGlvbiA9ZklucHV0KCd0ZXh0JywnZGVz Y3JpcHRpb24nLCRkZXNjcmlwdGlvbiwnZWRpdCcsJycsJycsJGVkd2lkdGgsJzInKTsNCgkk Y29kZSA9ICc8dGV4dGFyZWEgbmFtZT0iY29kZSIgaWQ9InBsdWdpbl9lZGl0b3IiIHJvd3M9 IjMwIiBjb2xzPSInLiRlZHdpZHRoLiciIGNsYXNzPSJjb2RlIGNvZGVwcmVzcyBwaHAiIG1h eGxlbmd0aD0iJy4kaWVkX3BsdWdpbl9nbG9iYWxzWydzaXplX2NvZGUnXS4nIj4nLmh0bWxz cGVjaWFsY2hhcnMoJGNvZGUpLic8L3RleHRhcmVhPjxkaXYgY2xhc3M9Imp1bXBUb0xpbmUi PicuaWVkX3BsdWdpbl9nVHh0KCdqdW1wX3RvX2xpbmUnKS4nIDxpbnB1dCB0eXBlPSJ0ZXh0 IiBpZD0iaWVkX2p1bXBUb0xpbmUiIHNpemU9IjUiIG1heGxlbmd0aD0iNiIgLz48L2Rpdj48 ZGl2IGNsYXNzPSJjaGFyc1JlbWFpbiI+PC9kaXY+JzsNCgkkaGVscCA9ICc8dGV4dGFyZWEg bmFtZT0iaGVscCIgcm93cz0iMzAiIGNvbHM9IicuJGVkd2lkdGguJyIgY2xhc3M9Im1jZUVk aXRvciIgbWF4bGVuZ3RoPSInLiRpZWRfcGx1Z2luX2dsb2JhbHNbJ3NpemVfaGVscCddLici PicuaHRtbHNwZWNpYWxjaGFycygkaGVscCkuJzwvdGV4dGFyZWE+PGRpdiBjbGFzcz0iY2hh cnNSZW1haW4iPjwvZGl2Pic7DQoJJGNzcyA9ICc8dGV4dGFyZWEgbmFtZT0iY3NzIiByb3dz PSIxNSIgY29scz0iJy4kZWR3aWR0aC4nIiBjbGFzcz0iY29kZSIgbWF4bGVuZ3RoPSInLiRp ZWRfcGx1Z2luX2dsb2JhbHNbJ3NpemVfY3NzJ10uJyI+Jy5odG1sc3BlY2lhbGNoYXJzKCRj c3MpLic8L3RleHRhcmVhPjxkaXYgY2xhc3M9ImNoYXJzUmVtYWluIj48L2Rpdj4nOw0KCSRw bHVnc3RhdHVzID0gKCEkZWRpdGZpbGUpID8gJyYjMTYwOyYjMTYwOycuY2hlY2tib3goJ3N0 YXR1cycsMSwkc3RhdHVzLCAnJywnc3RhdHVzJykuICcgPGxhYmVsIGZvcj0ic3RhdHVzIj4n LmllZF9wbHVnaW5fZ1R4dCgnZW5hYmxlJykuJzwvbGFiZWw+JyA6ICcnOw0KCSRwbHVndHlw ZSA9IHJhZGlvKCd0eXBlJywwLCgoJHR5cGU9PTApPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgn dHlwZV8wJykuIiAiDQoJCS4gcmFkaW8oJ3R5cGUnLDEsKCgkdHlwZT09MSk/MTowKSkuaWVk X3BsdWdpbl9nVHh0KCd0eXBlXzEnKS4iICINCgkJLiByYWRpbygndHlwZScsMiwoKCR0eXBl PT0yKT8xOjApKS5pZWRfcGx1Z2luX2dUeHQoJ3R5cGVfMicpLiIgIg0KCQkuIHJhZGlvKCd0 eXBlJywzLCgoJHR5cGU9PTMpPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgndHlwZV8zJyk7DQoJ JHBsdWdvcmRlciA9IHNlbGVjdElucHV0KCdsb2FkX29yZGVyJywgJG9yZGVycywgJGxvYWRf b3JkZXIsIDAsIDApOw0KCSRmbGFnbGlzdCA9IGNoZWNrYm94KCdmbGFnc1tdJyxQTFVHSU5f SEFTX1BSRUZTLCgoJGZsYWdzICYgUExVR0lOX0hBU19QUkVGUyk/MTowKSkgLiAnPGxhYmVs PicuaWVkX3BsdWdpbl9nVHh0KCdmbGFnX2hhc19wcmVmcycpLic8L2xhYmVsPiZuYnNwOyZu YnNwOycNCgkJLmNoZWNrYm94KCdmbGFnc1tdJyxQTFVHSU5fTElGRUNZQ0xFX05PVElGWSwo KCRmbGFncyAmIFBMVUdJTl9MSUZFQ1lDTEVfTk9USUZZKT8xOjApKSAuICc8bGFiZWw+Jy5p ZWRfcGx1Z2luX2dUeHQoJ2ZsYWdfbGlmZWN5Y2xlX25vdGlmeScpLic8L2xhYmVsPiZuYnNw OyZuYnNwOyc7DQovLwkJLmNoZWNrYm94KCdmbGFnc1tdJywweDAwMDQsKCgkZmxhZ3MgJiAw eDAwMDQpPzE6MCkpIC4gJzxsYWJlbD5TdW1tYXQgZWxzZTwvbGFiZWw+Jm5ic3A7Jm5ic3A7 JzsNCg0KCSRzdWIgPSBmSW5wdXQoJ3N1Ym1pdCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNo JywnJywnJywnJywnJywgJ2llZF9lZGl0U2F2ZScpOw0KCXJldHVybiBmb3JtKHN0YXJ0VGFi bGUoJ2VkaXQnKQ0KCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHN1YiAuICR2 aGVscGxpbmtmdWxsKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCAncGx1Z2luJyApIC4gdGQoJG5l d25hbWUgLiAkcGx1Z3N0YXR1cyAuICggKGlzc2V0KCRmaWxlbmFtZSkpID8gdGFnKCcmIzE2 MDsmIzE2MDsoJy4kZmlsZW5hbWUuJyknLCdzcGFuJywnIHN0eWxlPSJjb2xvcjpncmF5OyIn KS5oSW5wdXQoJ2ZpbGVuYW1lJywkZmlsZW5hbWUpIDogJycgKSApKQ0KCS4gdHIoIGZMYWJl bENlbGwoIGllZF9wbHVnaW5fZ1R4dCgncGx1Z2luX2NvZGUnKSApIC4gdGQoJGNvZGUpKQ0K CS4gdHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5fZ1R4dCgndHlwZScpICkgLiB0ZCgkcGx1 Z3R5cGUpKQ0KCS4gdHIoIGZMYWJlbENlbGwoIGllZF9wbHVnaW5fZ1R4dCgnZmxhZ3MnKSAp IC4gdGQoJGZsYWdsaXN0KSkNCgkuIHRyKCBmTGFiZWxDZWxsKCBpZWRfcGx1Z2luX2dUeHQo J2xvYWRfb3JkZXInKSApIC4gdGQoJHBsdWdvcmRlci4nJiMxNjA7JiMxNjA7Jy5pZWRfcGx1 Z2luX2dUeHQoJ2xvYWRfb3JkZXJfaGVscCcpKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCAndmVy c2lvbicgKSAuIHRkKCR2ZXJzaW9uKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCAnYXV0aG9yJyAp IC4gdGQoJGF1dGhvcikpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ3dlYnNpdGUnICkgLiB0ZCgk YXV0aG9yX3VyaSkpDQoJLiB0ciggZkxhYmVsQ2VsbCggJ2Rlc2NyaXB0aW9uJyApIC4gdGQo JGRlc2NyaXB0aW9uKSkNCgkuIHRyKCB0ZGEoZ1R4dCgncGx1Z2luX2hlbHAnKSwgJyBjbGFz cz0ibm9saW5lIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBt aWRkbGU7IicpIC4gdGQoJGhlbHApKQ0KCS4gdHIoIGZMYWJlbENlbGwoICdjc3MnICkgLiB0 ZCgkY3NzKSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzdWIpKQ0KDQoJ LiB0ciggdGRjcygnPGhyPicsMikpDQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0 ZChpZWRfcGx1Z2luX2dUeHQoJ3V0aWxpdGllcycpLic6JykpDQoNCgkuIHRyKCBmTGFiZWxD ZWxsKCBpZWRfcGx1Z2luX2dUeHQoJ2NvZGVfZGlzdCcpICkgLiB0ZCgkZGlzdHJpYnV0aW9u KSkNCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzbGluaykpDQoJLiB0cigg ZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ppcGxpbmspKQ0KCS4gdHIoIGZMYWJlbENl bGwoJyZuYnNwOycpIC4gdGQoJHNwaHBsaW5rKSkNCgkuIGVuZFRhYmxlKCkNCgkuIHNJbnB1 dCgnaWVkX3BsdWdpbl9zYXZlJykNCgkuIGVJbnB1dCgnaWVkX3BsdWdpbl9jb21wb3Nlcicp DQoJLiBoSW5wdXQoJ25hbWUnLCRuYW1lKSwgJycsICcnLCAncG9zdCcsICdpZWRfZWRpdEZv cm0nKQkuIDw8PEVPRg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KalF1ZXJ5 LmZuLnJlc2l6ZWhhbmRsZSA9IGZ1bmN0aW9uKGN1cmgpIHsNCglyZXR1cm4gdGhpcy5lYWNo KGZ1bmN0aW9uKCkgew0KCQl2YXIgbWUgPSBqUXVlcnkodGhpcyk7DQoJCW1lLmFuaW1hdGUo e2hlaWdodDogY3VyaH0pOw0KCQltZS5hZnRlcigNCgkJCWpRdWVyeSgnPGRpdiBjbGFzcz0i cmVzaXplaGFuZGxlIj4tLS0gKyAtLS08L2Rpdj4nKS5iaW5kKCJtb3VzZWRvd24iLCBmdW5j dGlvbihlKSB7DQoJCQkJdmFyIGggPSBtZS5oZWlnaHQoKTsNCgkJCQl2YXIgeSA9IGUuY2xp ZW50WTsNCgkJCQl2YXIgbW92ZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7DQoJCQkJCW1lLmhl aWdodChNYXRoLm1heCgyMCwgZS5jbGllbnRZICsgaCAtIHkpKTsNCgkJCQl9Ow0KCQkJCXZh ciB1cEhhbmRsZXIgPSBmdW5jdGlvbihlKSB7DQoJCQkJCWpRdWVyeSgiaHRtbCIpLnVuYmlu ZCgibW91c2Vtb3ZlIixtb3ZlSGFuZGxlcikudW5iaW5kKCJtb3VzZXVwIix1cEhhbmRsZXIp Ow0KCQkJCQluZXdoID0gbWUuaGVpZ2h0KCk7DQoJCQkJCXNldENvb2tpZSgnaWVkX3BsdWdp bl9lZGhlaWdodCcsIG5ld2gsIDMwKTsNCgkJCQl9Ow0KCQkJCWpRdWVyeSgiaHRtbCIpLmJp bmQoIm1vdXNlbW92ZSIsIG1vdmVIYW5kbGVyKS5iaW5kKCJtb3VzZXVwIiwgdXBIYW5kbGVy KTsNCgkJCX0pDQoJCSk7DQoJfSk7DQp9DQpqUXVlcnkuZm4uc2VsZWN0UmFuZ2UgPSBmdW5j dGlvbihzdGFydCwgZW5kKSB7DQoJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsNCgkJ aWYodGhpcy5zZXRTZWxlY3Rpb25SYW5nZSkgew0KCQkJdGhpcy5mb2N1cygpOw0KCQkJdGhp cy5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsNCgkJfSBlbHNlIGlmKHRoaXMuY3Jl YXRlVGV4dFJhbmdlKSB7DQoJCQl2YXIgcmFuZ2UgPSB0aGlzLmNyZWF0ZVRleHRSYW5nZSgp Ow0KCQkJcmFuZ2UuY29sbGFwc2UodHJ1ZSk7DQoJCQlyYW5nZS5tb3ZlRW5kKCdjaGFyYWN0 ZXInLCBlbmQpOw0KCQkJcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7DQoJ CQlyYW5nZS5zZWxlY3QoKTsNCgkJfQ0KCX0pOw0KfTsNCmZ1bmN0aW9uIGllZF9nb1RvTGlu ZSgpIHsNCgl2YXIgbGluZSA9IHBhcnNlSW50KGpRdWVyeSgnI2llZF9qdW1wVG9MaW5lJyku dmFsKCkpOw0KCXZhciBpZWRfZWQgPSBqUXVlcnkoJyNwbHVnaW5fZWRpdG9yJyk7DQoJdmFy IGllZF9lZGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGx1Z2luX2VkaXRvcicpOyAv LyBEdW5ubyBob3cgdG8gY29udmVydCBhIGpRdWVyeSBvYmogYmFjayB0byBET00NCgl2YXIg bGluZXMgPSBpZWRfZWQudmFsKCkuc3BsaXQoJ1xcbicpOw0KCXZhciBudW1jaGFycyA9IDA7 DQoJdmFyIGNvdW50ID0gMDsNCgl2YXIgZmluZHN0ciA9ICcnOw0KCWpRdWVyeS5lYWNoKGxp bmVzLCBmdW5jdGlvbigpIHsNCgkJY291bnQrKzsNCgkJaWYgKGNvdW50ID49IGxpbmUpIHsN CgkJCWZpbmRzdHIgPSB0aGlzOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCW51bWNoYXJz ICs9ICh0aGlzLmxlbmd0aCkrMjsgLy8gRG9uJ3QgYXNrLiArMiBpcyBzb21ldGhpbmcgdG8g ZG8gd2l0aCBsaW5lIGVuZGluZ3MgSSB0aGluaw0KCX0pOw0KDQoJLy8gRmluZCB0aGUgbGlu ZSBjb250YWluaW5nIHRoZSBzdHJpbmcgd2UgZm91bmQuIFN0YXJ0IGNvdW50aW5nIGZyb20g dGhlIGxpbmUgYmVmb3JlLg0KCS8vIFRob3NlIHBlc2t5IGxpbmUgZW5kaW5ncyBjb21lIGlu dG8gcGxheSBhZ2FpbiBzbyB3ZSBuZWVkIHRvIHN1YnRyYWN0IHRoZSBudW1iZXINCgkvLyBv ZiBsaW5lcyBmb3VuZCBmcm9tIHRoZSBzdGFydCBjaGFyYWN0ZXIgcG9zaXRpb24gKnNocnVn Kg0KCXN0YXJ0ID0gaWVkX2VkLnZhbCgpLmluZGV4T2YoZmluZHN0ciwgbnVtY2hhcnMtY291 bnQpOw0KCXN0YXJ0ID0gKGZpbmRzdHIgPT0gJycpID8gc3RhcnQrMSA6IHN0YXJ0Ow0KCWVu ZCA9IHN0YXJ0K2ZpbmRzdHIubGVuZ3RoOw0KCWllZF9lZC5zZWxlY3RSYW5nZShlbmQtMSwg ZW5kKTsNCg0KCWlmKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7DQoJCXZhciBpZWRfdGhlQ29k ZSA9IGllZF9lZC52YWwoKS5jaGFyQ29kZUF0KGVuZC0xKTsNCgkJaWYoIHdpbmRvdy5LZXlF dmVudCApIHsNCgkJCXZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdLZXlFdmVudHMn KTsNCgkJCWV2LmluaXRLZXlFdmVudCgna2V5cHJlc3MnLCBmYWxzZSwgdHJ1ZSwgd2luZG93 LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCwgaWVkX3RoZUNvZGUpOw0KCQl9IGVs c2Ugew0KCQkJdmFyIGV2ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ1VJRXZlbnRzJyk7DQoJ CQlldi5pbml0VUlFdmVudCgna2V5cHJlc3MnLCBmYWxzZSwgdHJ1ZSwgd2luZG93LCAwKTsN CgkJCWV2LmtleUNvZGUgPSBpZWRfdGhlQ29kZTsNCgkJfQ0KCQlpZWRfZWRkLmRpc3BhdGNo RXZlbnQoZXYpOyAvLyBjYXVzZSBzY3JvbGwgdG8gY3Vyc29yIGJ5IHJlcGxhY2luZyBsYXN0 IGNoYXIgd2l0aCBpdHNlbGYNCgl9DQoJaWVkX2VkLnNlbGVjdFJhbmdlKHN0YXJ0LCBlbmQp Ow0KCXJldHVybiBmYWxzZTsNCn0NCg0KalF1ZXJ5KGZ1bmN0aW9uKCkgew0KCWN1cmggPSBn ZXRDb29raWUoJ2llZF9wbHVnaW5fZWRoZWlnaHQnKTsNCgljdXJoID0gKGN1cmggPT0gbnVs bCkgPyAnNDgwJyA6IGN1cmg7DQoJalF1ZXJ5KCIjcGx1Z2luX2VkaXRvciIpLnJlc2l6ZWhh bmRsZShwYXJzZUludChjdXJoKSk7DQoJalF1ZXJ5KCd0ZXh0YXJlYVttYXhsZW5ndGhdJyku a2V5dXAoZnVuY3Rpb24oKXsNCgkJdmFyIG1heCA9IHBhcnNlSW50KGpRdWVyeSh0aGlzKS5h dHRyKCdtYXhsZW5ndGgnKSk7DQoJCWlmKGpRdWVyeSh0aGlzKS52YWwoKS5sZW5ndGggPiBt YXgpew0KCQkJalF1ZXJ5KHRoaXMpLnZhbChqUXVlcnkodGhpcykudmFsKCkuc3Vic3RyKDAs IGpRdWVyeSh0aGlzKS5hdHRyKCdtYXhsZW5ndGgnKSkpOw0KCQl9DQoJCWpRdWVyeSh0aGlz KS5wYXJlbnQoKS5maW5kKCcuY2hhcnNSZW1haW4nKS5odG1sKCdDaGFycyByZW1haW5pbmc6 ICcrIChtYXggLSBqUXVlcnkodGhpcykudmFsKCkubGVuZ3RoKSk7DQoJfSk7DQoJalF1ZXJ5 KCd0ZXh0YXJlYVttYXhsZW5ndGhdJykua2V5dXAoKTsNCglqUXVlcnkoJyNpZWRfanVtcFRv TGluZScpLmtleWRvd24oZnVuY3Rpb24oZSkgew0KCQl2YXIgY29kZSA9IChlLmtleUNvZGUg PyBlLmtleUNvZGUgOiBlLndoaWNoKTsNCgkJaWYoY29kZSA9PSAxMykgew0KCQkJZS5wcmV2 ZW50RGVmYXVsdCgpOw0KCQkJZS5zdG9wUHJvcGFnYXRpb24oKTsNCgkJCWllZF9nb1RvTGlu ZSgpOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJfSk7DQp9KTsNCjwvc2NyaXB0Pg0KPHN0 eWxlIHR5cGU9InRleHQvY3NzIj4NCi5yZXNpemVoYW5kbGUgew0KCWN1cnNvcjpzLXJlc2l6 ZTsNCglmbG9hdDpsZWZ0Ow0KCXRleHQtYWxpZ246Y2VudGVyOw0KCWZvbnQtc2l6ZToxZW07 DQoJd2lkdGg6ODIlOw0KCXBhZGRpbmc6MnB4IDAgNnB4Ow0KfQ0KLmNoYXJzUmVtYWluIHsN Cgl0ZXh0LWFsaWduOnJpZ2h0Ow0KCWNvbG9yOmdyYXk7DQp9DQo8L3N0eWxlPg0KRU9GOw0K fQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmUoKSB7DQoJZ2xvYmFs ICRpZWRfcGx1Z2luX2dsb2JhbHMsICRwcmVmczsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShh cnJheSgnbmFtZScsJ25ld25hbWUnLCdmaWxlbmFtZScsJ2NvZGUnLCdhdXRob3InLCdhdXRo b3JfdXJpJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywnaGVscCcsJ2NzcycsJ3N0YXR1cycs J3R5cGUnLCdsb2FkX29yZGVyJywncmVuYW1lX2ZpbGUnLCdyZXN0b3JlX3BvaW50JykpKSk7 DQoJJGZsYWdzID0gZ3BzKCdmbGFncycpOw0KDQoJbGlzdCAoJHN0YXJ0X2NzcywgJGVuZF9j c3MpID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoIkNTUyIsICRpZWRfcGx1Z2luX2dsb2Jh bHNbJ2Nzc19zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3NfZW5kJ10pOw0KCSRl eHRyYU1zZyA9ICRuZXdmaWxlbmFtZSA9ICRtc2cxID0gJG1zZzIgPSAnJzsNCgkkbmV3bmFt ZSA9IHRyaW0oJG5ld25hbWUpOw0KCWlmICgkZmxhZ3MpIHsNCgkJJGZsYWdvdXQgPSAwOw0K CQlmb3JlYWNoICgkZmxhZ3MgYXMgJGZsYWcpIHsNCgkJCSRmbGFnb3V0IHw9ICRmbGFnOw0K CQl9DQoJCSRmbGFncyA9ICRmbGFnb3V0Ow0KCX0NCg0KCWlmIChlbXB0eSgkbmV3bmFtZSkp IHsNCgkJJG1zZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ25hbWVfZmlyc3QnKTsNCgl9IGVsc2Ug ew0KCQlpZiAoZW1wdHkoJGZpbGVuYW1lKSkgew0KCQkJJGhvdXQgPSBhcnJheSgpOw0KCQkJ JGhvdXRbMF0gPSAkaGVscDsNCgkJCWlmICgkY3NzKSB7ICRob3V0WzFdID0gbi4kc3RhcnRf Y3NzLm4uJGNzcy5uLiRlbmRfY3NzOyB9DQoJCQlzYWZlX3VwZGF0ZSgNCgkJCQkndHhwX3Bs dWdpbicsDQoJCQkJIm5hbWU9JyIuJG5ld25hbWUuIicsDQoJCQkJc3RhdHVzID0gIi5pbnR2 YWwoJHN0YXR1cykuIiwNCgkJCQl0eXBlID0gIi5pbnR2YWwoJHR5cGUpLiIsDQoJCQkJYXV0 aG9yID0gJyIuJGF1dGhvci4iJywNCgkJCQlhdXRob3JfdXJpID0gJyIuJGF1dGhvcl91cmku IicsDQoJCQkJdmVyc2lvbiA9ICciLiR2ZXJzaW9uLiInLA0KCQkJCWRlc2NyaXB0aW9uID0g JyIuJGRlc2NyaXB0aW9uLiInLA0KCQkJCWhlbHAgPSAnIi5qb2luKCcnLCRob3V0KS4iJywN CgkJCQljb2RlID0gJyIuJGNvZGUuIicsDQoJCQkJZmxhZ3MgPSAiLmludHZhbCgkZmxhZ3Mp LiIsDQoJCQkJIi4oKCRyZXN0b3JlX3BvaW50ID09IDEpPyAiY29kZV9yZXN0b3JlID0gJyIu JGNvZGUuIicsIiA6ICcnKS4iDQoJCQkJbG9hZF9vcmRlciA9ICIuJGxvYWRfb3JkZXIsDQoJ CQkJIm5hbWUgPSAnIi4kbmFtZS4iJyIpOw0KCQkJJG1zZzEgPSBnVHh0KCdwbHVnaW5fc2F2 ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpOw0KCQl9IGVsc2Ugew0KCQkJJGRp ciA9ICRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTOw0KCQkJaWYgKGZpbGVfZXhpc3Rz KCRkaXIuJGZpbGVuYW1lKSkgew0KCQkJCSRmaWxlY29udGVudCA9IGZpbGUoJGRpci4kZmls ZW5hbWUpOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiAoZW1wdHkoJHByZWZzWydwbHVnaW5fY2Fj aGVfZGlyJ10pKSB7DQoJCQkJCSRmaWxlY29udGVudCA9ICcnOw0KCQkJCQkkbXNnMiA9IGll ZF9wbHVnaW5fZ1R4dCgnY2FjaGVfbm90X3NldCcpOw0KCQkJCX0gZWxzZSB7DQoJCQkJCSRv cG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSkgJiYg aXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29yZGVyJ10pKSA/ICRwcmVm c1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7DQoJCQkJCSRoZWxwY2h1bmsgPSBp ZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdoZWxwJywgYXJyYXkoJGhlbHAsICcgJykpOyAv LyBVc2UgYSBzcGFjZSB0byBmb3JjZSBhIENTUyBodW5rIGluIHRoZSBmaWxlDQoJCQkJCSRj b2RlY2h1bmsgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCdjb2RlJywgJGNvZGUpOw0K CQkJCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJwcmVhbWJs ZSIpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgibmFtZSIsICRuZXduYW1l KQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImh0bWxfaGVscCIpDQoJCQkJ CQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidmVyc2lvbiIsICR2ZXJzaW9uKQ0KCQkJ CQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImF1dGhvciIsICRhdXRob3IpDQoJCQkJ CQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiYXV0aG9yX3VyaSIsICRhdXRob3JfdXJp KQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImRlc2NyaXB0aW9uIiwgJGRl c2NyaXB0aW9uKQ0KCQkJCQkJLmllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImxvYWRfb3Jk ZXIiLCAkbG9hZF9vcmRlcikNCgkJCQkJCS5pZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJ0 eXBlIiwgJHR5cGUpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiZmxhZ3Mi LCAkZmxhZ3MpDQoJCQkJCQkuaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiaW5jbHVkZSIp DQoJCQkJCQkuKCgkb3BvcmRlciA9PSAwKSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQ0K CQkJCQkJLigoJG9wb3JkZXIgPT0gMSkgPyAkY29kZWNodW5rIDogJGhlbHBjaHVuaykNCgkJ CQkJCS5pZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJwb3N0YW1ibGUiKTsNCgkJCQkJJG1z ZzEgPSBpZWRfcGx1Z2luX2dUeHQoJ2VkaXRfbmV3Jyk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkk ZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX21ha2VfYXJyYXkoJGZpbGVjb250ZW50KTsNCgkJ CSRtZXRhdmFycyA9IGFycmF5KCJuYW1lIiA9PiAiJG5ld25hbWUiLA0KCQkJCQkJCQkJInZl cnNpb24iID0+ICIkdmVyc2lvbiIsDQoJCQkJCQkJCQkiYXV0aG9yIiA9PiAiJGF1dGhvciIs DQoJCQkJCQkJCQkiYXV0aG9yX3VyaSIgPT4gIiRhdXRob3JfdXJpIiwNCgkJCQkJCQkJCSJk ZXNjcmlwdGlvbiIgPT4gIiRkZXNjcmlwdGlvbiIsDQoJCQkJCQkJCQkidHlwZSIgPT4gIiR0 eXBlIiwNCgkJCQkJCQkJCSJmbGFncyIgPT4gIiRmbGFncyIsDQoJCQkJCQkJCQkib3JkZXIi ID0+ICIkbG9hZF9vcmRlciIsDQoJCQkJCQkJKTsNCgkJCSRodW5rdmFycyA9IGFycmF5KCJD T0RFIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnDQonLCRjb2RlKSksIC8vIG5l d2xpbmUgd29ya2Fyb3VuZA0KCQkJCQkJIkhFTFAiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2Uo J1xyXG4nLCcNCicsJGhlbHApKSwNCgkJCQkJCSJDU1MiID0+IGRvU3RyaXAoc3RyX3JlcGxh Y2UoJ1xyXG4nLCcNCicsJGNzcykpLA0KCQkJCQkJCSk7DQoJCQlmb3JlYWNoICgkbWV0YXZh cnMgYXMgJHZhcm5hbWUgPT4gJHZhbHVlKSB7DQoJCQkJZm9yKCRpZHggPSAwOyAkaWR4IDwg Y291bnQoJGZpbGVjb250ZW50KTsgJGlkeCsrKSB7DQoJCQkJCWlmIChzdHJwb3MoJGZpbGVj b250ZW50WyRpZHhdLCAnJHBsdWdpbltcJycuJHZhcm5hbWUuJ1wnXScpID09PSAwKSB7DQoJ CQkJCQkkZmlsZWNvbnRlbnRbJGlkeF0gPSAnJHBsdWdpbltcJycuJHZhcm5hbWUuJ1wnXSA9 ICcuZG9RdW90ZSgkdmFsdWUpLic7JzsNCgkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJfQ0K CQkJfQ0KCQkJZm9yZWFjaCAoJGh1bmt2YXJzIGFzICR2YXJuYW1lID0+ICRodW5rKSB7DQoJ CQkJbGlzdCAoJHN0YXJ0X2RlbGltLCAkZW5kX2RlbGltKSA9IGllZF9wbHVnaW5fbWFrZV9t YXJrZXJzKCR2YXJuYW1lLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydkbG1fc3RhcnQnXSwgJGll ZF9wbHVnaW5fZ2xvYmFsc1snZGxtX2VuZCddKTsNCgkJCQkkc3RhcnQgPSBhcnJheV9zZWFy Y2goJHN0YXJ0X2RlbGltLCAkZmlsZWNvbnRlbnQpICsgMTsNCgkJCQkkZW5kID0gYXJyYXlf c2VhcmNoKCRlbmRfZGVsaW0sICRmaWxlY29udGVudCk7DQoJCQkJaWYgKGlzX251bWVyaWMo JHN0YXJ0KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQgPj0gJHN0YXJ0KSB7DQoJCQkJ CWFycmF5X3NwbGljZSgkZmlsZWNvbnRlbnQsICRzdGFydCwgJGVuZC0kc3RhcnQsICRodW5r KTsNCgkJCQl9DQoJCQl9DQoJCQkkZmlsZWNvbnRlbnQgPSBpbXBsb2RlKCJcbiIsICRmaWxl Y29udGVudCk7DQoNCgkJCWlmICgkZmlsZWNvbnRlbnQpIHsNCgkJCQkkZmggPSBmb3Blbigk ZGlyLiRmaWxlbmFtZSwgJ3crJyk7DQoJCQkJZndyaXRlKCRmaCwgJGZpbGVjb250ZW50KTsN CgkJCQlmY2xvc2UoJGZoKTsNCgkJCX0NCgkJCSRtc2cxID0gKGVtcHR5KCRtc2cxKSkgPyBn VHh0KCdwbHVnaW5fc2F2ZWQnLCBhcnJheSgne25hbWV9JyA9PiAkbmV3bmFtZSkpIDogJG1z ZzE7DQoNCgkJCS8vIE1ha2UgbmV3IGZpbGUgaWYgcmVxdWlyZWQNCgkJCWlmICgkcmVuYW1l X2ZpbGUgPT0gMSkgew0KCQkJCSRmbmFtZXMgPSBpZWRfcGx1Z2luX2dldF9uYW1lKCRuZXdu YW1lLCAkdmVyc2lvbik7DQoJCQkJJG5ld2ZpbGVuYW1lID0gJGZuYW1lc1syXTsNCgkJCQkk cmVzID0gcmVuYW1lKCRkaXIuJGZpbGVuYW1lLCAkZGlyLiRuZXdmaWxlbmFtZSk7DQoJCQkJ JGV4dHJhTXNnID0gKCRyZXMpID8gaWVkX3BsdWdpbl9nVHh0KCdyZW5hbWVkJykgOiBpZWRf cGx1Z2luX2dUeHQoJ3JlbmFtZV9mYWlsZWQnKTsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJG1z ZzIpIHsNCgkJaWVkX3BsdWdpbl9saXN0KCRtc2cyKTsNCgl9IGVsc2Ugew0KCQkvLyBDaGVj ayB0aGUgcGx1Z2luIHR5cGUgbWF0Y2hlcyB0aGUgY29kZSB1c2VkDQoJCSRleHRyYU1zZyAu PSAoaWVkX3BsdWdpbl9hZG1pbl9jaGVjaygkY29kZSwgJHR5cGUpKSA/ICcnIDogc3Ryb25n KGllZF9wbHVnaW5fZ1R4dCgnY2hlY2tfdHlwZScpKTsNCgkJJG1lc3NhZ2UgPSAkbXNnMS5i ci4kZXh0cmFNc2c7DQoJCWllZF9wbHVnaW5fZWRpdCgkbWVzc2FnZSwgJG5ld2ZpbGVuYW1l KTsNCgl9DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fY3JlYXRlX25l dygpIHsNCglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScpKSkpOw0KCSRmbmFt ZSA9ICcnOw0KCWlmICgkbmFtZT09JycpIHsNCgkJaWVkX3BsdWdpbl9saXN0KGllZF9wbHVn aW5fZ1R4dCgnbmFtZV9maXJzdCcpKTsNCgkJcmV0dXJuOw0KCX0NCglpZiAoc3RycG9zKCRu YW1lLCAiLnBocCIpICE9PSBmYWxzZSkgew0KCQkkZm5hbWUgPSAkbmFtZTsNCgkJJG5hbWUg PSBiYXNlbmFtZSgkbmFtZSwgIi5waHAiKTsNCgl9DQoJJGV4aXN0cyA9IGZldGNoKCduYW1l JywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKTsNCglpZiAoISRleGlzdHMpIHsNCgkJaWYg KCRmbmFtZSkgew0KCQkJLy8gUHV0IHBsdWdpbiBpbiBjYWNoZSBkaXIgYnkgZmFraW5nIGEg UE9TVCBzdWJtaXNzaW9uIGFuZCBzYXZpbmcNCgkJCSRfUE9TVFsnZmlsZW5hbWUnXSA9ICRm bmFtZTsNCgkJCSRfUE9TVFsnbmV3bmFtZSddID0gJG5hbWU7DQoJCQkkX1BPU1RbJ3N0YXR1 cyddID0gMDsNCgkJCSRfUE9TVFsndHlwZSddID0gMDsNCgkJCSRfUE9TVFsndmVyc2lvbidd ID0gJzAuMSc7DQoJCQkkX1BPU1RbJ2xvYWRfb3JkZXInXSA9IDU7DQoJCQkkX1BPU1RbJ2Zs YWdzJ10gPSAwOw0KCQkJaWVkX3BsdWdpbl9zYXZlKCk7DQoJCX0gZWxzZSB7DQoJCQlzYWZl X2luc2VydCgidHhwX3BsdWdpbiIsICINCgkJCQluYW1lPSckbmFtZScsDQoJCQkJc3RhdHVz PTAsDQoJCQkJdHlwZT0wLA0KCQkJCXZlcnNpb249JzAuMScsDQoJCQkJbG9hZF9vcmRlcj01 LA0KCQkJCWZsYWdzPTAsDQoJCQkJZGVzY3JpcHRpb249JycsDQoJCQkJaGVscD0nJywNCgkJ CQljb2RlPScnLA0KCQkJCWNvZGVfcmVzdG9yZT0nJw0KCQkJIik7DQoJCQlwYWdldG9wKGdU eHQoJ2VkaXRfcGx1Z2lucycpLCBpZWRfcGx1Z2luX2dUeHQoJ2VkaXRfbmV3JykpOw0KCQkJ ZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmFtZSk7DQoJCX0NCgl9IGVsc2Ugew0KCQlp ZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luJykuJyA8c3Ryb25nPicuJG5hbWUuJzwvc3Ry b25nPiAnLmdUeHQoJ2FscmVhZHlfZXhpc3RzJykpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUoKSB7DQoJZ2xvYmFsICRwcmVmcywg JGllZF9wbHVnaW5fZ2xvYmFsczsNCglpZiAoZ3BzKCduYW1lJykpIHsNCgkJJG5hbWUgPSBn cHMoJ25hbWUnKTsNCgkJJHJzID0gc2FmZV9yb3coImRlc2NyaXB0aW9uLCBhdXRob3IsIGF1 dGhvcl91cmksIHZlcnNpb24sIGNvZGUsIGhlbHAsIHR5cGUsIGxvYWRfb3JkZXIsIGZsYWdz IiwgInR4cF9wbHVnaW4iLCAibmFtZT0nJG5hbWUnIik7DQoJCWV4dHJhY3QoJHJzKTsNCg0K CQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5r KCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7DQoJ fSBlbHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgew0KCQkkcGx1Z2luPWllZF9wbHVnaW5fcmVh ZF9maWxlKCRwcmVmc1sncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygnZmlsZW5hbWUnKSk7 DQoJCWV4dHJhY3QoJHBsdWdpbik7DQoJfQ0KDQoJJHppcCA9IGdwcygnemlwJyk7DQoJaWYg KGdwcygndHJpbScpPT0xKSB7DQoJCSRjb2RlPWV4cGxvZGUoIlxyXG4iLCRjb2RlKTsNCgkJ JGNvZGU9YXJyYXlfbWFwKCd0cmltJywkY29kZSk7DQoJCSRjb2RlPWltcGxvZGUoIlxyXG4i LCRjb2RlKTsNCgl9DQoNCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1 Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0 J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJJGZuYW1lcyA9IGllZF9w bHVnaW5fZ2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsNCg0KCWhlYWRlcigiQ29udGVudC10 eXBlOiB0ZXh0L3BsYWluIik7DQoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRh Y2htZW50OyBmaWxlbmFtZT0nIC4gKCgkemlwKSA/ICRmbmFtZXNbMV0gOiAkZm5hbWVzWzBd KSk7DQoNCgkkdHlwZXMgPSBhcnJheSggJ0NsaWVudCBzaWRlJyAsICdBZG1pbi9DbGllbnQg c2lkZScgLCAnTGlicmFyeScgLCAnQWRtaW4gc2lkZScpOw0KCSRwbHVnaW5bJ25hbWUnXSA9 ICRuYW1lOw0KCSRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsNCgkkcGx1Z2luWydhdXRo b3JfdXJpJ10gPSAkYXV0aG9yX3VyaTsNCgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVyc2lv bjsNCgkkcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9uOw0KCSRwbHVnaW5b J2NvZGUnXSA9ICRjb2RlOw0KCSRwbHVnaW5bJ3R5cGUnXSA9ICR0eXBlOw0KCSRwbHVnaW5b J29yZGVyJ10gPSAkbG9hZF9vcmRlcjsNCgkkcGx1Z2luWydmbGFncyddID0gJGZsYWdzOw0K Ly8JJHBsdWdpblsnYWxsb3dfaHRtbF9oZWxwJ10gPSB0cnVlOw0KLy8JJHBsdWdpblsnaGVs cF9yYXcnXSA9ICRoZWxwLiRzdGFydF9jc3MuJGNzcy4kZW5kX2NzczsNCgkkcGx1Z2luWydo ZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJG5hbWUsICRoZWxwLCAkY3NzLCAkc3RhcnRf Y3NzLCAkZW5kX2Nzcyk7DQoJJHBsdWdpblsnbWQ1J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUn XSApOw0KDQoJZWNobyAnIyBOYW1lOiAnLiRuYW1lLicgdicuJHZlcnNpb24uJyAnLigoJHpp cCkgPyAiKGNvbXByZXNzZWQpIiA6ICIiKS4nDQojIFR5cGU6ICcuJHR5cGVzWyR0eXBlXS4n IHBsdWdpbg0KIyAnLiRkZXNjcmlwdGlvbi4nDQojIEF1dGhvcjogJy4kYXV0aG9yLicNCiMg VVJMOiAnLiRhdXRob3JfdXJpLicNCiMgUmVjb21tZW5kZWQgbG9hZCBvcmRlcjogJy4kbG9h ZF9vcmRlci4nDQoNCiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQojIFRoaXMgaXMgYSBwbHVnaW4gZm9y IFRleHRwYXR0ZXJuIC0gaHR0cDovL3RleHRwYXR0ZXJuLmNvbS8NCiMgVG8gaW5zdGFsbDog dGV4dHBhdHRlcm4gPiBhZG1pbiA+IHBsdWdpbnMNCiMgUGFzdGUgdGhlIGZvbGxvd2luZyB0 ZXh0IGludG8gdGhlIFwnSW5zdGFsbCBwbHVnaW5cJyBib3g6DQojIC4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Lg0KDQonLigoJHppcCkgPyBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGd6ZW5jb2RlKHNl cmlhbGl6ZSgkcGx1Z2luKSkpLCA3MikgOiBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKHNl cmlhbGl6ZSgkcGx1Z2luKSksIDcyKSk7DQoNCglkaWUoKTsNCn0NCg0KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K ZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlKCkgew0KCWdsb2JhbCAkcHJl ZnM7DQoJaWYgKGdwcygnbmFtZScpKSB7DQoJCSRuYW1lID0gZ3BzKCduYW1lJyk7DQoJCSRy cyA9IHNhZmVfcm93KCJkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRob3JfdXJpLCB2ZXJzaW9u LCBjb2RlLCBoZWxwLCB0eXBlLCBsb2FkX29yZGVyLCBmbGFncyIsICJ0eHBfcGx1Z2luIiwg Im5hbWU9JyRuYW1lJyIpOw0KCQlleHRyYWN0KCRycyk7DQoNCgkJbGlzdCgkY3NzLCRoZWxw KSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8 IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOw0KCX0gZWxzZWlmIChncHMoJ2Zp bGVuYW1lJykpIHsNCgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkcHJlZnNbJ3Bs dWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOw0KCQlleHRyYWN0KCRwbHVn aW4pOw0KCX0NCg0KCSRvcG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9vdXRw dXRfb3JkZXInXSkgJiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X29y ZGVyJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7DQoJJGZu YW1lcyA9IGllZF9wbHVnaW5fZ2V0X25hbWUoJG5hbWUsICR2ZXJzaW9uKTsNCg0KCWhlYWRl cigiQ29udGVudC10eXBlOiB0ZXh0L3BocCIpOw0KCWhlYWRlcignQ29udGVudC1EaXNwb3Np dGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JyAuJGZuYW1lc1syXSk7DQoNCgkkaGVscGNo dW5rID0gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgnaGVscCcsIGFycmF5KCRoZWxwLCAk Y3NzKSk7DQoJJGNvZGVjaHVuayA9IGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoJ2NvZGUn LCBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkY29kZSkpOw0KDQoJZWNobyBpZWRfcGx1Z2lu X2J1aWxkX3RlbXBsYXRlKCJwcmVhbWJsZSIpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90 ZW1wbGF0ZSgibmFtZSIsICRuYW1lKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxh dGUoImh0bWxfaGVscCIpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgidmVy c2lvbiIsICR2ZXJzaW9uKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxhdGUoImF1 dGhvciIsICRhdXRob3IpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWlsZF90ZW1wbGF0ZSgiYXV0 aG9yX3VyaSIsICRhdXRob3JfdXJpKTsNCgllY2hvIGllZF9wbHVnaW5fYnVpbGRfdGVtcGxh dGUoImRlc2NyaXB0aW9uIiwgJGRlc2NyaXB0aW9uKTsNCgllY2hvIGllZF9wbHVnaW5fYnVp bGRfdGVtcGxhdGUoImxvYWRfb3JkZXIiLCAkbG9hZF9vcmRlcik7DQoJZWNobyBpZWRfcGx1 Z2luX2J1aWxkX3RlbXBsYXRlKCJ0eXBlIiwgJHR5cGUpOw0KCWVjaG8gaWVkX3BsdWdpbl9i dWlsZF90ZW1wbGF0ZSgiZmxhZ3MiLCAkZmxhZ3MpOw0KCWVjaG8gaWVkX3BsdWdpbl9idWls ZF90ZW1wbGF0ZSgiaW5jbHVkZSIpOw0KCWVjaG8gKCgkb3BvcmRlciA9PSAwKSA/ICRjb2Rl Y2h1bmsgOiAkaGVscGNodW5rKTsNCgllY2hvICgoJG9wb3JkZXIgPT0gMSkgPyAkY29kZWNo dW5rIDogJGhlbHBjaHVuayk7DQoJZWNobyBpZWRfcGx1Z2luX2J1aWxkX3RlbXBsYXRlKCJw b3N0YW1ibGUiKTsNCg0KCWRpZSgpOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRf cGx1Z2luX2J1aWxkX3RlbXBsYXRlKCRwcnQsICR2YWw9JycpIHsNCgkkY3NzID0gJGhlbHAg PSAnJzsNCglpZiAoaXNfYXJyYXkoJHZhbCkpIHsNCgkJJGhlbHAgPSAkdmFsWzBdOw0KCQkk Y3NzID0gaXNzZXQoJHZhbFsxXSkgPyAkdmFsWzFdIDogJyc7DQoJCSR2YWwgPSAnJzsNCgl9 DQoJJHRlbXBsYXRlID0gYXJyYXkoDQoJCSJwcmVhbWJsZSIgPT4gJzw/cGhwJy5uLm4NCgkJ CQkJCS4nLy8gVGhpcyBpcyBhIFBMVUdJTiBURU1QTEFURS4nLm4ubg0KCQkJCQkJLicvLyBD b3B5IHRoaXMgZmlsZSB0byBhIG5ldyBuYW1lIGxpa2UgYWJjX215cGx1Z2luLnBocC4gIEVk aXQgdGhlIGNvZGUsIHRoZW4nLm4NCgkJCQkJCS4nLy8gcnVuIHRoaXMgZmlsZSBhdCB0aGUg Y29tbWFuZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9yIGRpc3RyaWJ1dGlvbjonLm4N CgkJCQkJCS4nLy8gJCBwaHAgYWJjX215cGx1Z2luLnBocCA+IGFiY19teXBsdWdpbi0wLjEu dHh0Jy5uLm4sDQoJCSJuYW1lIiA9PiAnLy8gUGx1Z2luIG5hbWUgaXMgb3B0aW9uYWwuICBJ ZiB1bnNldCwgaXQgd2lsbCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgY3VycmVudCcubg0KCQkJ CQkJLicvLyBmaWxlIG5hbWUuIFBsdWdpbiBuYW1lcyBzaG91bGQgc3RhcnQgd2l0aCBhIHRo cmVlIGxldHRlciBwcmVmaXggd2hpY2ggaXMnLm4NCgkJCQkJCS4nLy8gdW5pcXVlIGFuZCBy ZXNlcnZlZCBmb3IgZWFjaCBwbHVnaW4gYXV0aG9yICgiYWJjIiBpcyBqdXN0IGFuIGV4YW1w bGUpLicubg0KCQkJCQkJLicvLyBVbmNvbW1lbnQgYW5kIGVkaXQgdGhpcyBsaW5lIHRvIG92 ZXJyaWRlOicubg0KCQkJCQkJLickcGx1Z2luW1wnbmFtZVwnXSA9ICcuZG9RdW90ZSgkdmFs KS4nOycubi5uLA0KCQkiaHRtbF9oZWxwIiA9PiAnLy8gQWxsb3cgcmF3IEhUTUwgaGVscCwg YXMgb3Bwb3NlZCB0byBUZXh0aWxlLicubg0KCQkJCQkJLicvLyAwID0gUGx1Z2luIGhlbHAg aXMgaW4gVGV4dGlsZSBmb3JtYXQsIG5vIHJhdyBIVE1MIGFsbG93ZWQgKGRlZmF1bHQpLicu bg0KCQkJCQkJLicvLyAxID0gUGx1Z2luIGhlbHAgaXMgaW4gcmF3IEhUTUwuICBOb3QgcmVj b21tZW5kZWQuJy5uDQoJCQkJCQkuJyMgJHBsdWdpbltcJ2FsbG93X2h0bWxfaGVscFwnXSA9 IDE7Jy5uLm4sDQoJCSJ2ZXJzaW9uIiA9PiAnJHBsdWdpbltcJ3ZlcnNpb25cJ10gPSAnLmRv UXVvdGUoJHZhbCkuJzsnLm4sDQoJCSJmbGFncyIgPT4gJy8vIFBsdWdpbiAiZmxhZ3MiIHNp Z25hbCB0aGUgcHJlc2VuY2Ugb2Ygb3B0aW9uYWwgY2FwYWJpbGl0aWVzIHRvIHRoZSBjb3Jl IHBsdWdpbiBsb2FkZXIuJy5uDQoJCQkJCQkuJy8vIFVzZSBhbiBhcHByb3ByaWF0ZWx5IE9S LWVkIGNvbWJpbmF0aW9uIG9mIHRoZXNlIGZsYWdzLicubg0KCQkJCQkJLicvLyBUaGUgZm91 ciBoaWdoLW9yZGVyIGJpdHMgMHhmMDAwIGFyZSBhdmFpbGFibGUgZm9yIHRoaXMgcGx1Z2lu XCdzIHByaXZhdGUgdXNlJy5uDQoJCQkJCQkuJ2lmICghZGVmaW5lZChcJ1BMVUdJTl9IQVNf UFJFRlNcJykpIGRlZmluZShcJ1BMVUdJTl9IQVNfUFJFRlNcJywgMHgwMDAxKTsgLy8gVGhp cyBwbHVnaW4gd2FudHMgdG8gcmVjZWl2ZSAicGx1Z2luX3ByZWZzLnskcGx1Z2luW1wnbmFt ZVwnXX0iIGV2ZW50cycubg0KCQkJCQkJLidpZiAoIWRlZmluZWQoXCdQTFVHSU5fTElGRUNZ Q0xFX05PVElGWVwnKSkgZGVmaW5lKFwnUExVR0lOX0xJRkVDWUNMRV9OT1RJRllcJywgMHgw MDAyKTsgLy8gVGhpcyBwbHVnaW4gd2FudHMgdG8gcmVjZWl2ZSAicGx1Z2luX2xpZmVjeWNs ZS57JHBsdWdpbltcJ25hbWVcJ119IiBldmVudHMnLm4ubg0KCQkJCQkJLickcGx1Z2luW1wn ZmxhZ3NcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4ubiwNCgkJImF1dGhvciIgPT4gJyRw bHVnaW5bXCdhdXRob3JcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4sDQoJCSJhdXRob3Jf dXJpIiA9PiAnJHBsdWdpbltcJ2F1dGhvcl91cmlcJ10gPSAnLmRvUXVvdGUoJHZhbCkuJzsn Lm4sDQoJCSJkZXNjcmlwdGlvbiIgPT4gJyRwbHVnaW5bXCdkZXNjcmlwdGlvblwnXSA9ICcu ZG9RdW90ZSgkdmFsKS4nOycubi5uLA0KCQkibG9hZF9vcmRlciIgPT4gJy8vIFBsdWdpbiBs b2FkIG9yZGVyOicubg0KCQkJCQkJLicvLyBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA1IHdvdWxk IGZpdCBtb3N0IHBsdWdpbnMsIHdoaWxlIGZvciBpbnN0YW5jZSBjb21tZW50Jy5uDQoJCQkJ CQkuJy8vIHNwYW0gZXZhbHVhdG9ycyBvciBVUkwgcmVkaXJlY3RvcnMgd291bGQgcHJvYmFi bHkgd2FudCB0byBydW4gZWFybGllcicubg0KCQkJCQkJLicvLyAoMS4uLjQpIHRvIHByZXBh cmUgdGhlIGVudmlyb25tZW50IGZvciBldmVyeXRoaW5nIGVsc2UgdGhhdCBmb2xsb3dzLicu bg0KCQkJCQkJLicvLyBWYWx1ZXMgNi4uLjkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHBs dWdpbnMgd2hpY2ggd291bGQgd29yayBsYXRlLicubg0KCQkJCQkJLicvLyBUaGlzIG9yZGVy IGlzIHVzZXItb3ZlcnJpZGVhYmxlLicubg0KCQkJCQkJLickcGx1Z2luW1wnb3JkZXJcJ10g PSAnLmRvUXVvdGUoJHZhbCkuJzsnLm4ubiwNCgkJInR5cGUiID0+ICcvLyBQbHVnaW4gXCd0 eXBlXCcgZGVmaW5lcyB3aGVyZSB0aGUgcGx1Z2luIGlzIGxvYWRlZCcubg0KCQkJCQkJLicv LyAwID0gcHVibGljICAgICAgIDogb25seSBvbiB0aGUgcHVibGljIHNpZGUgb2YgdGhlIHdl YnNpdGUgKGRlZmF1bHQpJy5uDQoJCQkJCQkuJy8vIDEgPSBwdWJsaWMrYWRtaW4gOiBvbiBi b3RoIHRoZSBwdWJsaWMgYW5kIGFkbWluIHNpZGUnLm4NCgkJCQkJCS4nLy8gMiA9IGxpYnJh cnkgICAgICA6IG9ubHkgd2hlbiBpbmNsdWRlX3BsdWdpbigpIG9yIHJlcXVpcmVfcGx1Z2lu KCkgaXMgY2FsbGVkJy5uDQoJCQkJCQkuJy8vIDMgPSBhZG1pbiAgICAgICAgOiBvbmx5IG9u IHRoZSBhZG1pbiBzaWRlJy5uDQoJCQkJCQkuJyRwbHVnaW5bXCd0eXBlXCddID0gJy5kb1F1 b3RlKCR2YWwpLic7Jy5uLm4sDQoJCSJpbmNsdWRlIiA9PiAnaWYgKCFkZWZpbmVkKFwndHhw aW50ZXJmYWNlXCcpKScubg0KCQkJCQkJLicgICAgICAgIEBpbmNsdWRlX29uY2UoXCd6ZW1f dHBsLnBocFwnKTsnLm4ubiwNCgkJImhlbHAiID0+ICdpZiAoMCkgeycubg0KCQkJCQkJLic/ Picubg0KCQkJCQkJLiAoKCRjc3MpID8gJzwhLS0nLm4NCgkJCQkJCS4nIyAtLS0gQkVHSU4g UExVR0lOIENTUyAtLS0nLm4NCgkJCQkJCS4kY3NzLm4NCgkJCQkJCS4nIyAtLS0gRU5EIFBM VUdJTiBDU1MgLS0tJy5uDQoJCQkJCQkuJy0tPicubiA6ICcnKQ0KCQkJCQkJLic8IS0tJy5u DQoJCQkJCQkuJyMgLS0tIEJFR0lOIFBMVUdJTiBIRUxQIC0tLScubg0KCQkJCQkJLiRoZWxw Lm4NCgkJCQkJCS4nIyAtLS0gRU5EIFBMVUdJTiBIRUxQIC0tLScubg0KCQkJCQkJLictLT4n Lm4NCgkJCQkJCS4nPD9waHAnLm4NCgkJCQkJCS4nfScubiwNCgkJImNvZGUiID0+ICcjIC0t LSBCRUdJTiBQTFVHSU4gQ09ERSAtLS0nLm4NCgkJCQkJCS4kdmFsLm4NCgkJCQkJCS4nIyAt LS0gRU5EIFBMVUdJTiBDT0RFIC0tLScubiwNCgkJInBvc3RhbWJsZSIgPT4gJz8+JywNCgkp Ow0KDQoJcmV0dXJuIChhcnJheV9rZXlfZXhpc3RzKCRwcnQsICR0ZW1wbGF0ZSkgPyAkdGVt cGxhdGVbJHBydF0gOiAnJyk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVn aW5fdXBsb2FkKCkgew0KCWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCWxpc3QgKCRz dGFydF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAk aWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1sn Y3NzX2VuZCddKTsNCg0KCWlmICghJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSB7 DQoJCWllZF9wbHVnaW5fbGlzdChpZWRfcGx1Z2luX2dUeHQoJ2Nob29zZV9maWxlJykpO3Jl dHVybjsNCgl9DQoJJHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRfRklMRVNbJ3Ro ZWZpbGUnXVsndG1wX25hbWUnXSk7DQovLwkkbmV3bmFtZSA9IChlbXB0eSgkcGx1Z2luWydu YW1lJ10pKSA/IGJhc2VuYW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddLCAnLnBocCcp IDogJHBsdWdpblsnbmFtZSddOw0KCSRuZXduYW1lID0gJHBsdWdpblsnbmFtZSddOw0KCWlm IChncHMoJ25hbWUnKSBhbmQgZ3BzKCduYW1lJykhPSd4eHhfeHh4eHh4Jykgew0KCQkkbmV3 bmFtZT1ncHMoJ25hbWUnKTsNCgl9DQoJaWYgKGVtcHR5KCRwbHVnaW5bJ2NvZGUnXSkpIHsN CgkJJHBsdWdpblsnY29kZSddID0gaW1wbG9kZSAoIiIsIGZpbGUoJF9GSUxFU1sndGhlZmls ZSddWyd0bXBfbmFtZSddKSk7DQoJfQ0KDQoJaWYgKE1BR0lDX1FVT1RFU19HUEMpIHsNCgkJ JHBsdWdpbiA9IGRvU3RyaXAoJHBsdWdpbik7DQoJfQ0KCWV4dHJhY3QoZG9TbGFzaCgkcGx1 Z2luKSk7DQoJJG1kNT1tZDUoJGNvZGUpOw0KCSR2ZXJzaW9uID0gKGVtcHR5KCR2ZXJzaW9u KSkgPyAiMC4xIiA6ICR2ZXJzaW9uOw0KCSRoZWxwID0gJGhlbHAuKCgkY3NzKSA/IG4uJHN0 YXJ0X2Nzcy5uLiRjc3Mubi4kZW5kX2NzcyA6ICcnKTsNCgkkZXhpc3RzID0gZmV0Y2goJ25h bWUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5ld25hbWUpOw0KCWlmICgkZXhpc3RzKSB7DQoJ CSRzdGF0dXMgPSBmZXRjaCgnc3RhdHVzJywndHhwX3BsdWdpbicsJ25hbWUnLCRuZXduYW1l KTsNCgkJJHJzID0gc2FmZV91cGRhdGUoDQoJCQkidHhwX3BsdWdpbiIsDQoJCQkic3RhdHVz ID0gIi5pbnR2YWwoJHN0YXR1cykuIiwNCgkJCXR5cGUgPSAiLmludHZhbCgkdHlwZSkuIiwN CgkJCWF1dGhvciA9ICckYXV0aG9yJywNCgkJCWF1dGhvcl91cmkgPSAnJGF1dGhvcl91cmkn LA0KCQkJdmVyc2lvbiA9ICckdmVyc2lvbicsDQoJCQlkZXNjcmlwdGlvbiA9ICckZGVzY3Jp cHRpb24nLA0KCQkJaGVscCA9ICckaGVscCcsDQoJCQljb2RlID0gJyRjb2RlJywNCgkJCWNv ZGVfcmVzdG9yZSA9ICckY29kZScsDQoJCQljb2RlX21kNSA9ICckbWQ1JywNCgkJCWZsYWdz ID0gIi5pbnR2YWwoJGZsYWdzKS4iLA0KCQkJbG9hZF9vcmRlciA9ICIuaW50dmFsKCRsb2Fk X29yZGVyKSwNCgkJCSJuYW1lID0gJyRuZXduYW1lJyINCgkJKTsNCgl9IGVsc2Ugew0KCQkk cnMgPSBzYWZlX2luc2VydCgNCgkJCSJ0eHBfcGx1Z2luIiwNCgkJCSJuYW1lID0gJyRuZXdu YW1lJywNCgkJCXN0YXR1cyA9IDAsDQoJCQl0eXBlID0gIi5pbnR2YWwoJHR5cGUpLiIsDQoJ CQlhdXRob3IgPSAnJGF1dGhvcicsDQoJCQlhdXRob3JfdXJpID0gJyRhdXRob3JfdXJpJywN CgkJCXZlcnNpb24gPSAnJHZlcnNpb24nLA0KCQkJZGVzY3JpcHRpb24gPSAnJGRlc2NyaXB0 aW9uJywNCgkJCWhlbHAgPSAnJGhlbHAnLA0KCQkJY29kZSA9ICckY29kZScsDQoJCQljb2Rl X3Jlc3RvcmUgPSAnJGNvZGUnLA0KCQkJY29kZV9tZDUgPSAnJG1kNScsDQoJCQlmbGFncyA9 ICIuaW50dmFsKCRmbGFncykuIiwNCgkJCWxvYWRfb3JkZXIgPSAiLmludHZhbCgkbG9hZF9v cmRlcikNCgkJKTsNCgl9DQoNCglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCBtZXNz ZW5nZXIoJ3BsdWdpbicsJG5ld25hbWUsKCRleGlzdHMpPyd1cGRhdGVkJzondXBsb2FkZWQn KSk7DQoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmV3bmFtZSk7DQp9DQoNCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fcmVhZF9maWxlKCRmaWxlcGF0aCkgew0KCSRj b250ZW50ID0gZmlsZSgkZmlsZXBhdGgpOw0KCSRqdXN0ZmlsZSA9IGJhc2VuYW1lKCRmaWxl cGF0aCk7DQoJJGV4dCA9IGFycmF5X3BvcChleHBsb2RlICgnLicsJGp1c3RmaWxlKSk7DQoJ JGV4dCA9ICgkZXh0PT0kanVzdGZpbGUpID8gJycgOiAnLicuJGV4dDsgLy8gT25seSBhc3Np Z24gYW4gZXh0ZW5zaW9uIGlmIG9uZSBleGlzdHMNCgkkc291cmNlX2xpbmVzID0gY291bnQo JGNvbnRlbnQpOw0KCSRtZXRhZGF0YSA9IGFycmF5KA0KCQkJCQkJJ25hbWUnID0+ICcnLA0K CQkJCQkJJ3ZlcnNpb24nID0+ICcnLA0KCQkJCQkJJ3JldmlzaW9uJyA9PiAnJywNCgkJCQkJ CSdhdXRob3InID0+ICcnLA0KCQkJCQkJJ2F1dGhvcl91cmknID0+ICcnLA0KCQkJCQkJJ2Rl c2NyaXB0aW9uJyA9PiAnJywNCgkJCQkJCSdvcmRlcicgPT4gJzUnLA0KCQkJCQkJJ3R5cGUn ID0+ICcnLA0KCQkJCQkJJ2ZsYWdzJyA9PiAnJywNCgkJCQkJKTsNCglmb3IgKCRpZHg9MDsg JGlkeCA8ICRzb3VyY2VfbGluZXM7ICRpZHgrKykgew0KCQkkY29udGVudFskaWR4XSA9IHJ0 cmltKCRjb250ZW50WyRpZHhdKTsNCgkJLy8gQm9tYiBvdXQgaWYgd2UgcmVhY2ggdGhlIGVu ZCBvZiB0aGUgZGVmaW5pdGlvbiBhcmVhDQoJCWlmIChzdHJwb3MoICRjb250ZW50WyRpZHhd LCAnaWYgKCFkZWZpbmVkJyApID09PSAwKSB7DQoJCQlicmVhazsNCgkJfQ0KCQlpZiAoc3Ry cG9zKCRjb250ZW50WyRpZHhdLCAnJHBsdWdpblsnKSA9PT0gMCkgew0KCQkJLy8gRm91bmQg YSBwbHVnaW4gdmFyaWFibGUgc28gZXh0cmFjdCBpdA0KCQkJJHBhcnRzID0gZXhwbG9kZSgi ID0gIiwgJGNvbnRlbnRbJGlkeF0pOw0KCQkJJHBhcnRzWzBdID0gc3RyX3JlcGxhY2UoIici LCAiIiwgJHBhcnRzWzBdKTsgLy8gTWFrZSB0aGUgbWF0Y2ggZWFzaWVyIQ0KCQkJJHBhcnRz WzFdID0gc3RyX3JlcGxhY2UoIjsiLCAiIiwgJHBhcnRzWzFdKTsgLy8gRGl0dG8NCgkJCXBy ZWdfbWF0Y2goIi9wbHVnaW5cWyguKilcXS8iLCAkcGFydHNbMF0sICR2YXIpOyAvLyBFeHRy YWN0IGp1c3QgdGhlIHZhcmlhYmxlIG5hbWUNCgkJCWlmIChpc19udW1lcmljKCRwYXJ0c1sx XSkpIHsNCgkJCQkkcGFydHNbMV0gPSAiJyIuJHBhcnRzWzFdLiInIjsNCgkJCX0NCgkJCXBy ZWdfbWF0Y2goIi8uKicoLiopJy4qLyIsICRwYXJ0c1sxXSwgJHZhbCk7IC8vIFJlbW92ZSBh bnl0aGluZyBvdXRzaWRlIHRoZSBxdW90ZXMgKGUuZy4gJHJldmlzaW9uKQ0KCQkJaWYgKCR2 YXJbMV0gPT0gJ3JldmlzaW9uJyAmJiAhZW1wdHkoJHZhbFsxXSkpIHsNCgkJCQkkcmV2cGFy dHMgPSBleHBsb2RlKCcgJywgdHJpbSgkdmFsWzFdLCAnJCAnKSk7DQoJCQkJJHZhbFsxXSA9 ICRyZXZwYXJ0c1tjb3VudCgkcmV2cGFydHMpLTFdOw0KCQkJCSR2YWxbMV0gPSAoZW1wdHko JHZhbFsxXSkpID8gJycgOiAnLicgLiR2YWxbMV07DQoJCQl9DQoJCQkkbWV0YWRhdGFbJHZh clsxXV0gPSAkdmFsWzFdOw0KCQl9DQoJfQ0KDQoJJG1ldGFkYXRhWyduYW1lJ10gPSAoZW1w dHkoJG1ldGFkYXRhWyduYW1lJ10pKSA/IGJhc2VuYW1lKCRqdXN0ZmlsZSwgJGV4dCkgOiAk bWV0YWRhdGFbJ25hbWUnXTsNCgkkbWV0YWRhdGFbJ2xvYWRfb3JkZXInXSA9ICRtZXRhZGF0 YVsnb3JkZXInXTsNCgkkbWV0YWRhdGFbJ3ZlcnNpb24nXSAuPSAkbWV0YWRhdGFbJ3Jldmlz aW9uJ107DQoJJG1ldGFkYXRhWydoZWxwJ10gPSBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygk Y29udGVudCwgJ0hFTFAnKTsNCgkkbWV0YWRhdGFbJ2NzcyddICA9IGllZF9wbHVnaW5fZXh0 cmFjdF9odW5rKCRjb250ZW50LCAnQ1NTJyApOw0KCSRtZXRhZGF0YVsnY29kZSddID0gaWVk X3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQsICdDT0RFJyk7DQoNCglyZXR1cm4gJG1l dGFkYXRhOw0KfQ0KDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLyByaXBwZWQgYW5kIG1vZGRlZCBmcm9tIG5l dC1jYXJ2ZXIncyB6ZW1fdHBsIHRlbXBsYXRlDQpmdW5jdGlvbiBpZWRfcGx1Z2luX2V4dHJh Y3RfaHVuaygkY29udGVudCwgJGh1bmssICRjbW50PSIjIiwgJGRlbGV0ZT1mYWxzZSkgew0K CSRkbG0gPSBleHBsb2RlKCJ8IiwgJGNtbnQpOw0KCSRkbG1TdGFydCA9ICRkbG1bMF07DQoJ JGRsbUVuZCA9IChjb3VudCgkZGxtKSA+IDEpID8gJGRsbVsxXSA6ICcnOw0KCSRsaW5lcyA9 IGllZF9wbHVnaW5fbWFrZV9hcnJheSgkY29udGVudCk7DQoNCglsaXN0ICgkc3RhcnRfZGVs aW0sICRlbmRfZGVsaW0pID0gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoJGh1bmssICRkbG1T dGFydCwgJGRsbUVuZCk7DQoJJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxpbSwg JGxpbmVzKSArIDE7DQoJJGVuZCA9IGFycmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkbGluZXMp Ow0KDQoJLy8gS2x1ZGdlIHRvIGdldCByb3VuZCB0aGUgZGVsaW1pdGVyIGNoYW5nZSBpbiB2 MC44Mw0KCWlmICgkaHVuayA9PSAnQ1NTJyAmJiAkZW5kID09PSBmYWxzZSkgew0KCQkkc3Rh cnRfZGVsaW0gPSBzdHJfcmVwbGFjZSgnLS0tJywgJyoqKicsICRzdGFydF9kZWxpbSk7DQoJ CSRlbmRfZGVsaW0gPSBzdHJfcmVwbGFjZSgnLS0tJywgJyoqKicsICRlbmRfZGVsaW0pOw0K CQkkc3RhcnQgPSBhcnJheV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkbGluZXMpICsgMTsNCgkJ JGVuZCA9IGFycmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkbGluZXMpOw0KCX0NCg0KCSRleHRy YWN0ZWQgPSBhcnJheSgpOw0KCWlmIChjb3VudCgkbGluZXMpID4gMCAmJiBpc19udW1lcmlj KCRzdGFydCkgJiYgaXNfbnVtZXJpYygkZW5kKSAmJiAkZW5kID4gJHN0YXJ0KSB7DQoJCSRl eHRyYWN0ZWQgPSBhcnJheV9zbGljZSgkbGluZXMsICRzdGFydCwgJGVuZC0kc3RhcnQpOw0K CQkkbGluZU51bSA9IGNvdW50KCRleHRyYWN0ZWQpLTE7DQoJCXdoaWxlICgkbGluZU51bSA+ IDAgJiYgdHJpbSgkZXh0cmFjdGVkWyRsaW5lTnVtLS1dKSA9PSAiIikgew0KCQkJYXJyYXlf cG9wKCRleHRyYWN0ZWQpOw0KCQl9DQoJCXdoaWxlIChjb3VudCgkZXh0cmFjdGVkKSA+IDAg JiYgdHJpbSgkZXh0cmFjdGVkWzBdKSA9PSAiIikgew0KCQkJYXJyYXlfc2hpZnQoJGV4dHJh Y3RlZCk7DQoJCX0NCgkJaWYgKCRkZWxldGUpIHsNCgkJCSRjaG9wcGVkID0gYXJyYXlfc3Bs aWNlKCRsaW5lcywgJHN0YXJ0LTEsICRlbmQtJHN0YXJ0KzIsICIiKTsNCgkJfQ0KCX0NCgkk cmVtYWlucyA9ICRsaW5lczsNCgkvLyBDaGVjayBpZiB0aGUgQ1NTIHNlY3Rpb24gaGFzIDxz dHlsZT4gdGFncyBhcm91bmQgaXQ7IGFkZCB0aGVtIGlmIG5vdA0KCWlmICgkaHVuayA9PSAi Q1NTIikgew0KCQkkbnVtcm93cyA9IGNvdW50KCRleHRyYWN0ZWQpOw0KCQlpZiAoJG51bXJv d3MgPiAxKSB7DQoJCQlpZiAoc3RycG9zKCRleHRyYWN0ZWRbJG51bXJvd3MtMV0sICc8L3N0 eWxlPicpID09PSBmYWxzZSkgew0KCQkJCSRleHRyYWN0ZWRbXSA9ICc8L3N0eWxlPic7DQoJ CQl9DQoJCQlpZiAoc3RycG9zKCRleHRyYWN0ZWRbMF0sICc8c3R5bGUgJykgPT09IGZhbHNl KSB7DQoJCQkJYXJyYXlfdW5zaGlmdCgkZXh0cmFjdGVkLCAnPHN0eWxlIHR5cGU9InRleHQv Y3NzIj4nKTsNCgkJCX0NCgkJfQ0KCX0NCglpZiAoJGRlbGV0ZSkgew0KCQlyZXR1cm4gYXJy YXkodHJpbShqb2luKCJcbiIsICRleHRyYWN0ZWQpKSwgdHJpbShqb2luKCJcbiIsICRyZW1h aW5zKSkpOw0KCX0gZWxzZSB7DQoJCXJldHVybiB0cmltKGpvaW4oIlxuIiwgJGV4dHJhY3Rl ZCkpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9tYWtlX2Fy cmF5KCRhcnIpIHsNCglpZiAoIWlzX2FycmF5KCRhcnIpKSB7DQoJCSRhcnIgPSBleHBsb2Rl KCJcbiIsICRhcnIpOw0KCX0NCgkkc291cmNlX2xpbmVzID0gY291bnQoJGFycik7DQoJZm9y ICgkaWR4PTA7ICRpZHggPCAkc291cmNlX2xpbmVzOyAkaWR4KyspIHsNCgkJJGFyclskaWR4 XSA9IHJ0cmltKCRhcnJbJGlkeF0pOw0KCX0NCglyZXR1cm4gJGFycjsNCn0NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoJGh1bmssICRzdGFydCwg JGVuZCkgew0KCWdsb2JhbCAkaWVkX3BsdWdpbl9nbG9iYWxzOw0KCSRzbWFya2VyID0gJHN0 YXJ0IC4gc3RyX3JlcGxhY2UoIlNFQ1RJT04iLCAkaHVuaywgJGllZF9wbHVnaW5fZ2xvYmFs c1snc3RhcnQnXSkgLiAoKCRlbmQpPycgJy4kZW5kOicnKTsNCgkkZW1hcmtlciA9ICRzdGFy dCAuIHN0cl9yZXBsYWNlKCJTRUNUSU9OIiwgJGh1bmssICRpZWRfcGx1Z2luX2dsb2JhbHNb J2VuZCddKSAuICgoJGVuZCk/JyAnLiRlbmQ6JycpOw0KCXJldHVybiAoYXJyYXkoJHNtYXJr ZXIsICRlbWFya2VyKSk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8vIHJpcHBlZCBhbmQgbW9kZGVk IGZyb20gbmV0LWNhcnZlcidzIHplbV90cGwgdGVtcGxhdGUNCmZ1bmN0aW9uIGllZF9wbHVn aW5fYWRtaW5fY2hlY2soJGNvZGVibG9jaywgJHR5cGUpIHsNCgkvLyBTaG9ydCBjaXJjdWl0 IHNpbmNlIHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBjbGllbnQgcGx1Z2lucw0KCWlmICgk dHlwZSAhPSAnMCcgfHwgc3RycG9zKCRjb2RlYmxvY2ssICd0eHBpbnRlcmZhY2UnKT09PWZh bHNlKSB7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8vIEJlbGlldmUgaXQgb3Igbm90IHRo aXMgaXMgc2V2ZXJhbCBvcmRlcnMgb2YgbWFnbml0dWRlIHF1aWNrZXIgdGhhbiBhIHNpbmds ZSBwcmVnX21hdGNoDQoJJGNiID0gc3RyX3JlcGxhY2UoYXJyYXkoJ1x0JywgJyAnKSwgJycs ICRjb2RlYmxvY2spOw0KCSRjYiA9IHN0cl9yZXBsYWNlKCc9PT0nLCAnPT0nLCAkY2IpOw0K CWlmIChzdHJwb3MoJGNiLCAndHhwaW50ZXJmYWNlPT1cImFkbWluJykpIHJldHVybiBmYWxz ZTsNCglpZiAoc3RycG9zKCRjYiwgInR4cGludGVyZmFjZT09XCdhZG1pbiIpKSByZXR1cm4g ZmFsc2U7DQoJaWYgKHN0cnBvcygkY2IsICdhZG1pblwiPT10eHBpbnRlcmZhY2UnKSkgcmV0 dXJuIGZhbHNlOw0KCWlmIChzdHJwb3MoJGNiLCAiYWRtaW5cJz09dHhwaW50ZXJmYWNlIikp IHJldHVybiBmYWxzZTsNCglpZiAoc3RycG9zKCRjYiwgJ2FkbWluXCI9PUB0eHBpbnRlcmZh Y2UnKSkgcmV0dXJuIGZhbHNlOw0KCWlmIChzdHJwb3MoJGNiLCAiYWRtaW5cJz09QHR4cGlu dGVyZmFjZSIpKSByZXR1cm4gZmFsc2U7DQoJcmV0dXJuIHRydWU7DQp9DQoNCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCmZ1bmN0aW9uIGllZF9wbHVnaW5fdGV4dGlsZSgkbmFtZSwgJGhlbHAsICRjc3MsICRz dGFydF9kbG0sICRlbmRfZGxtKSB7DQoJZ2xvYmFsICRwcmVmcywgJGllZF9wbHVnaW5fZ2xv YmFsczsNCg0KCSR0bXBkaXIgPSAkaGxwZmlsZSA9ICcnOw0KCSRjaGFuZ2VkID0gdHJ1ZTsN Cgkkb3V0ID0gYXJyYXkoKTsNCglpZiAoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX291dHB1 dF90bXBjYWNoZSddKSAmJiAhZW1wdHkoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF90bXBj YWNoZSddKSAmJiBpc193cml0YWJsZSgkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNh Y2hlJ10pKSB7DQoJCSR0bXBkaXIgPSAkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0X3RtcGNh Y2hlJ107DQoJCSRjYWNoZSA9IGJ1aWxkX2ZpbGVfcGF0aCgkdG1wZGlyLCAnaWVkX3BsdWdp bl9jb21wb3Nlci5jYWNoZScpOw0KCQlpZiAoIWZpbGVfZXhpc3RzKCRjYWNoZSkpIHsNCgkJ CXRvdWNoKCRjYWNoZSk7IC8vIENyZWF0ZSBmaWxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QNCgkJ fQ0KCQkkcGx1Z3MgPSBwYXJzZV9pbmlfZmlsZSgkY2FjaGUpOw0KDQoJCSRvbGRfbWQ1ID0g KGFycmF5X2tleV9leGlzdHMoJG5hbWUsICRwbHVncykpID8gJHBsdWdzWyRuYW1lXSA6ICcn Ow0KCQkkY3Vycl9tZDUgPSBtZDUoJGhlbHApOw0KCQkkaGxwZmlsZSA9IGJ1aWxkX2ZpbGVf cGF0aCgkdG1wZGlyLCAkbmFtZS4nX2hlbHAudHh0bCcpOw0KCQlpZiAoJG9sZF9tZDUgPT0g JGN1cnJfbWQ1KSB7DQoJCQkkb3V0WzBdID0gZmlsZV9nZXRfY29udGVudHMoJGhscGZpbGUp Ow0KCQkJJGNoYW5nZWQgPSBmYWxzZTsNCgkJfSBlbHNlIHsNCgkJCSRwbHVnc1skbmFtZV0g PSAkY3Vycl9tZDU7DQoJCQkkZmQgPSBmb3BlbigkY2FjaGUsICJ3Iik7DQoJCQlmb3JlYWNo ICgkcGx1Z3MgYXMgJGlkeCA9PiAkdmFsKSB7DQoJCQkJZndyaXRlKCRmZCwgJGlkeC4nID0g Jy4kdmFsLm4pOw0KCQkJfQ0KCQkJZmNsb3NlKCRmZCk7DQoJCX0NCiAgIH0NCg0KCWlmICgh JG91dCkgew0KCQlAaW5jbHVkZV9vbmNlIHR4cGF0aC4nL2xpYi9jbGFzc1RleHRpbGUucGhw JzsNCgkJJG91dFswXSA9ICRoZWxwOw0KCQlpZiAoY2xhc3NfZXhpc3RzKCdUZXh0aWxlJykp IHsNCgkJCS8vIFRyeSBhbmQgYmUgYSBsaXR0bGUgbW9yZSBpbnRlbGxpZ2VudCBhYm91dCBh cHBseWluZyB0ZXh0aWxlIG9yIG5vdA0KCQkJJHJlID0gJy9oWzAtNl0oXCguKlwpKT9cLi8n Ow0KCQkJaWYgKHByZWdfbWF0Y2goJHJlLCAkaGVscCkpIHsNCgkJCQkkdGV4dGlsZSA9IG5l dyBUZXh0aWxlKCk7DQoJCQkJJG91dFswXSA9ICR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkaGVs cCk7DQoJCQl9DQoJCX0NCgl9DQoNCglpZiAoJHRtcGRpciAmJiAkY2hhbmdlZCkgew0KCQlp ZiAoIWZpbGVfZXhpc3RzKCRobHBmaWxlKSkgew0KCQkJdG91Y2goJGhscGZpbGUpOw0KCQl9 DQoJCSRmZCA9IGZvcGVuKCRobHBmaWxlLCAidyIpOw0KCQlmd3JpdGUoJGZkLCAkb3V0WzBd KTsNCgkJZmNsb3NlKCRmZCk7DQoJfQ0KDQoJLy8gUmVwbGFjZSB0aGUgdHJpcGxlICctLS0n IGluIHRoZSBkZWxpbWl0ZXJzIHNvIHRoZSBoZWxwIGZpbGUgY2FuIHZhbGlkYXRlDQoJJHN0 YXJ0X2RsbSA9IHN0cl9yZXBsYWNlKCctLS0nLCAnKioqJywgJHN0YXJ0X2RsbSk7DQoJJGVu ZF9kbG0gPSBzdHJfcmVwbGFjZSgnLS0tJywgJyoqKicsICRlbmRfZGxtKTsNCg0KCSRvdXRb MV0gPSAoJGNzcykgPyAiXG4kc3RhcnRfZGxtXG4kY3NzXG4kZW5kX2RsbVxuIiA6ICcnOw0K CXJldHVybiBzdWJzdHIoam9pbignJywgJG91dCksIDAsICRpZWRfcGx1Z2luX2dsb2JhbHNb J3NpemVfaGVscCddKyRpZWRfcGx1Z2luX2dsb2JhbHNbJ3NpemVfY3NzJ10pOw0KfQ0KDQov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQpmdW5jdGlvbiBpZWRfaW5zZXJ0X2VkaXRvcnMoKSB7DQoJZ2xvYmFsICRw cmVmcywgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG91dCA9IGFycmF5KCk7DQoNCgkkcHJlZmtl eXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIsYXJyYXlfa2V5cygkaWVkX3BsdWdpbl9wcmVm c1swXSkpKTsNCgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMn LCduYW1lIGluICgnLiRwcmVma2V5cy4nKScpOw0KCWlmIChjb3VudCgkcnMpID09IGNvdW50 KCRpZWRfcGx1Z2luX3ByZWZzWzBdKSkgew0KCQkkZWQgPSBhcnJheSgpOw0KCQkkZWRbJHBy ZWZzWydpZWRfcGx1Z2luX2VkaXRvciddXSA9ICRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3Jf cGF0aCddOw0KCQkkZWRbJHByZWZzWydpZWRfcGx1Z2luX2hlbHBfZWRpdG9yJ11dID0gJHBy ZWZzWydpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgnXTsNCg0KCQlmb3JlYWNoICgkZWQg YXMgJGVkaXRvciA9PiAkZWRpdG9yX2Rpcikgew0KCQkJc3dpdGNoICgkZWRpdG9yKSB7DQoJ CQkJY2FzZSAidGlueV9tY2UiOg0KCQkJCQkkb3V0W10gPSA8PDxFT0YNCjxzY3JpcHQgdHlw ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJGVkaXRvcl9kaXIuJy90aW55X21jZS5qcyI+ PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJdGlueU1DRS5p bml0KHsNCgkJbW9kZSA6ICJzcGVjaWZpY190ZXh0YXJlYXMiLA0KCQllZGl0b3Jfc2VsZWN0 b3IgOiAibWNlRWRpdG9yIiwNCgkJdGhlbWVfYWR2YW5jZWRfdG9vbGJhcl9sb2NhdGlvbiA6 ICJ0b3AiLA0KCQl0aGVtZV9hZHZhbmNlZF9idXR0b25zMSA6ICJib2xkLGl0YWxpYyx1bmRl cmxpbmUsc3RyaWtldGhyb3VnaCxmb3JlY29sb3IsYmFja2NvbG9yLHJlbW92ZWZvcm1hdCxu dW1saXN0LGJ1bGxpc3Qsb3V0ZGVudCxpbmRlbnQsanVzdGlmeWxlZnQsanVzdGlmeWNlbnRl cixqdXN0aWZ5cmlnaHQsanVzdGlmeWZ1bGwiLA0KCQl0aGVtZV9hZHZhbmNlZF9idXR0b25z MiA6ICJsaW5rLHVubGluayxzZXBhcmF0b3IsaWJyb3dzZXIsc2VwYXJhdG9yLHNlYXJjaCxy ZXBsYWNlLHNlcGFyYXRvcixjdXQsY29weSxwYXN0ZSxzZXBhcmF0b3IsY29kZSxzZXBhcmF0 b3IsZm9ybWF0c2VsZWN0IiwNCgkJdGhlbWVfYWR2YW5jZWRfYnV0dG9uczMgOiAiIg0KCX0p Ow0KPC9zY3JpcHQ+Ow0KRU9GOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICJlZGl0X2FyZWEi Og0KCQkJCQkkb3V0W10gPSA8PDxFT0YNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0 IiBzcmM9IiRlZGl0b3JfZGlyL2VkaXRfYXJlYV9mdWxsLmpzIj48L3NjcmlwdD4NCjxzY3Jp cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCgkvLyBpbml0aWFsaXNhdGlvbg0KCWVkaXRB cmVhTG9hZGVyLmluaXQoew0KCQlpZDogInBsdWdpbl9lZGl0b3IiCS8vIGlkIG9mIHRoZSB0 ZXh0YXJlYSB0byB0cmFuc2Zvcm0NCgkJLHN0YXJ0X2hpZ2hsaWdodDogdHJ1ZQkvLyBpZiBz dGFydCB3aXRoIGhpZ2hsaWdodA0KCQksYWxsb3dfcmVzaXplOiAiYm90aCINCgkJLGFsbG93 X3RvZ2dsZTogdHJ1ZQ0KCQksbGFuZ3VhZ2U6ICJlbiINCgkJLHN5bnRheDogInBocCINCgl9 KTsNCjwvc2NyaXB0Pg0KRU9GOw0KCQkJCQlicmVhazsNCgkJCQljYXNlICJjb2RlcHJlc3Mi Og0KCQkJCQkkb3V0W10gPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i Jy4kZWRpdG9yX2Rpci4nL2NvZGVwcmVzcy5qcyI+PC9zY3JpcHQ+JzsNCgkJCQkJYnJlYWs7 DQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4gaW1wbG9kZSgiXG4iLCAkb3V0KTsNCn0NCg0K Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9oZWxwX3ZpZXdlcigkbWVzc2FnZT0n Jykgew0KCWdsb2JhbCAkcHJlZnMsICRpZWRfcGx1Z2luX2dsb2JhbHM7DQoJcGFnZXRvcChn VHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7DQoNCglpZiAoZ3BzKCduYW1lJykpIHsN CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsNCgkJJGhlbHAgPSAoJG5hbWUpID8gZmV0Y2goJ2hl bHAnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7DQoJCWxpc3QoJGNzcywkaGVs cCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAi PCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsNCgl9IGVsc2UgaWYgKGdwcygn ZmlsZW5hbWUnKSkgew0KCQkkcGx1Z2luPWllZF9wbHVnaW5fcmVhZF9maWxlKCRwcmVmc1sn cGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygnZmlsZW5hbWUnKSk7DQoJCWV4dHJhY3QoJHBs dWdpbik7DQoJfQ0KCWVjaG8gc3RhcnRUYWJsZSgnZWRpdCcpOw0KCWlmIChlbXB0eSgkaGVs cCkpIHsNCgkJZWNobyB0cih0ZGEoJzxwPkhlbHAgbm90IGFjY2Vzc2libGUgZnJvbSB0aGlz IGZpbGUuPC9wPicpKTsNCgl9IGVsc2Ugew0KCQlsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2Nz cykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFs c1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7DQoJCSRw bHVnaW5bJ2hlbHAnXSA9IGllZF9wbHVnaW5fdGV4dGlsZSgkbmFtZSwgJGhlbHAsICRjc3Ms ICRzdGFydF9jc3MsICRlbmRfY3NzKTsNCgkJZWNobyB0cih0ZGEoICc8cD5FeHRyYWN0ZWQg Jy4oIWVtcHR5KCRwbHVnaW5bJ2hlbHAnXSkgPyAnYW5kIFRleHRpbGUgcHJvY2Vzc2VkJyA6 ICcnKS4nIGhlbHAgc2VjdGlvbiBmb2xsb3dzJiM4MjMwOzwvcD48aHI+JywgJyB3aWR0aD0i NjAwIicpKTsNCgkJZWNobyB0cih0ZGEoJHBsdWdpblsnaGVscCddLCAnIHdpZHRoPSI2MDAi JykpOw0KCX0NCgllY2hvIGVuZFRhYmxlKCk7DQp9DQoNCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmZ1bmN0aW9u IGllZF9wbHVnaW5fc2V0dXAoJGV2ZW50PScnLCAkc3RlcD0nJywgJG1lc3NhZ2U9JycpIHsN CglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG51bVJlcVByZWZzID0gY291bnQoJGll ZF9wbHVnaW5fcHJlZnNbMF0pOw0KDQoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwk bWVzc2FnZSk7DQoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tl eXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7DQoJJHJzID0gc2FmZV9yb3dzKCduYW1lLHZh bCxodG1sJywndHhwX3ByZWZzJywnbmFtZSBpbiAoJy4kcHJlZmtleXMuJyknKTsNCgkkbnVt Um93cyA9IGNvdW50KCRycyk7DQoNCgkkYnRuU2F2ZSA9IGZJbnB1dCgnc3VibWl0JywgJ3N1 Ym1pdCcsIGdUeHQoJ3NhdmUnKSwgJ3B1Ymxpc2gnKTsNCgkkYnRuSW5zdGFsbCA9ICc8Zm9y bSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4 O3N0ZXA9aWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUi PicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAncHVibGlz aCcpLic8L2Zvcm0+JzsNCgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0 aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3By ZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0Jywg J3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsNCgkkYnRu U3R5bGUgPSAnIHN0eWxlPSJib3JkZXI6MDtoZWlnaHQ6MjVweCInOw0KDQoJZWNobyBzdGFy dFRhYmxlKCdsaXN0Jyk7DQoJaWYgKCRudW1Sb3dzID09ICRudW1SZXFQcmVmcykgew0KCQkv LyBQcmVmcyBhbGwgaW5zdGFsbGVkDQoJCWVjaG8gdHIodGRhKHN0cm9uZyhpZWRfcGx1Z2lu X2dUeHQoJ3ByZWZzX3RpdGxlJykpLCAnIGNvbHNwYW49IjIiJykgLiB0ZGEoJGJ0blJlbW92 ZSwgJGJ0blN0eWxlKSApOw0KCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0i P2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9wcmVmc191 cGRhdGUiPic7DQoJCWZvciAoJGlkeCA9IDA7ICRpZHggPCAkbnVtUm93czsgJGlkeCsrKSB7 DQoJCQkkYSA9ICRyc1skaWR4XTsNCgkJCSRsYWJlbCA9ICc8bGFiZWwgZm9yPSInLiRhWydu YW1lJ10uJyI+Jy5pZWRfcGx1Z2luX2dUeHQoJGFbJ25hbWUnXSkuJzo8L2xhYmVsPic7DQoJ CQkkb3V0ID0gdGRhKCRsYWJlbCwgJyBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRp Y2FsLWFsaWduOiBtaWRkbGU7IicpOw0KCQkJc3dpdGNoKCRhWyduYW1lJ10pIHsNCgkJCQlj YXNlICJpZWRfcGx1Z2luX2VkaXRvcl9wYXRoIjoNCgkJCQljYXNlICJpZWRfcGx1Z2luX2hl bHBfZWRpdG9yX3BhdGgiOg0KCQkJCWNhc2UgImllZF9wbHVnaW5fb3V0cHV0X3NmaWxlIjoN CgkJCQljYXNlICJpZWRfcGx1Z2luX291dHB1dF9zZmlsZWMiOg0KCQkJCWNhc2UgImllZF9w bHVnaW5fb3V0cHV0X3NmaWxlcCI6DQoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfdG1w Y2FjaGUiOg0KCQkJCQkkb3V0IC49IHRkKGZJbnB1dCgndGV4dCcsICRhWyduYW1lJ10sICRh Wyd2YWwnXSwgJ2VkaXQnLCAnJywgJycsIDUwLCAnJywgJGFbJ25hbWUnXSkpOw0KCQkJCQli cmVhazsNCgkJCQljYXNlICJpZWRfcGx1Z2luX2VkaXRvciI6DQovLwkJCQkJJG91dCAuPSB0 ZChzZWxlY3RJbnB1dCgkYVsnbmFtZSddLCBhcnJheSgnbm9uZScgPT4gJ05vbmUnLCAnZWRp dF9hcmVhJyA9PiAnRWRpdCBBcmVhJywgJ2NvZGVwcmVzcycgPT4gJ0NvZGVQcmVzcycpLCAk YVsndmFsJ10sICcnLCAnIG9uY2hhbmdlPSJpZWRfcGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQs IHRoaXMudmFsdWUpOyInLCAkYVsnbmFtZSddKSk7DQoJCQkJCSRvdXQgLj0gdGQoc2VsZWN0 SW5wdXQoJGFbJ25hbWUnXSwgYXJyYXkoJ25vbmUnID0+ICdOb25lJywgJ2VkaXRfYXJlYScg PT4gJ0VkaXQgQXJlYScpLCAkYVsndmFsJ10sICcnLCAnIG9uY2hhbmdlPSJpZWRfcGx1Z2lu X3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMudmFsdWUpOyInLCAkYVsnbmFtZSddKSk7DQoJCQkJ CWJyZWFrOw0KCQkJCWNhc2UgImllZF9wbHVnaW5faGVscF9lZGl0b3IiOg0KCQkJCQkkb3V0 IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCd0ZXh0aWxlJyA9PiAnTm9u ZSAoVGV4dGlsZSknLCAndGlueV9tY2UnID0+ICdUaW55IE1DRScpLCAkYVsndmFsJ10sICcn LCAnIG9uY2hhbmdlPSJpZWRfcGx1Z2luX3ByZWZzd2FwKHRoaXMuaWQsIHRoaXMudmFsdWUp OyInLCAkYVsnbmFtZSddKSk7DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgImllZF9wbHVnaW5f b3V0cHV0X29yZGVyIjoNCgkJCQkJJG91dCAuPSB0ZChyYWRpbygkYVsnbmFtZSddLDAsKCgk YVsndmFsJ109PTApPzE6MCkpLmllZF9wbHVnaW5fZ1R4dCgnb3V0cHV0X2NvZGVfZmlyc3Qn KS4iICIgLiByYWRpbygkYVsnbmFtZSddLDEsKCgkYVsndmFsJ109PTEpPzE6MCkpLmllZF9w bHVnaW5fZ1R4dCgnb3V0cHV0X2hlbHBfZmlyc3QnKS4iICIpOw0KCQkJCQlicmVhazsNCgkJ CQljYXNlICJpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCI6DQoJCQkJCSRvdXQgLj0gdGQoZklu cHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRpdCcsICcnLCAnJywgNSwg JycsICRhWyduYW1lJ10pKTsNCgkJCQkJYnJlYWs7DQoJCQl9DQoJCQllY2hvIHRyKCRvdXQp Ow0KCQl9DQoJCWVjaG8gdHIodGRhKCRidG5TYXZlLCAkYnRuU3R5bGUpKTsNCgkJZWNobyAn PC9mb3JtPic7DQoJfSBlbHNlIGlmICgkbnVtUm93cyA+IDAgJiYgJG51bVJvd3MgPCAkbnVt UmVxUHJlZnMpIHsNCgkJZWNobyB0cih0ZGEoc3Ryb25nKGllZF9wbHVnaW5fZ1R4dCgncHJl ZnNfdGl0bGUnKSksICcgY29sc3Bhbj0iMiInKSk7DQoJCWVjaG8gdHIodGRhKHN0cm9uZyhp ZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX3NvbWUnKSkuYnIuYnINCgkJCQkJCS5pZWRfcGx1Z2lu X2dUeHQoJ3ByZWZzX3NvbWVfZXhwbGFpbicpLmJyLmJyDQoJCQkJCQkuaWVkX3BsdWdpbl9n VHh0KCdwcmVmc19zb21lX29wdGlvbnMnKSwgJyBjb2xzcGFuPSIyIicpKTsNCgkJZWNobyB0 cih0ZGEoJGJ0blJlbW92ZSwkYnRuU3R5bGUpIC4gdGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5 bGUpKTsNCgl9IGVsc2Ugew0KCQllY2hvIHRyKHRkYShzdHJvbmcoaWVkX3BsdWdpbl9nVHh0 KCdwcmVmc190aXRsZScpKSwgJyBjb2xzcGFuPSIyIicpKTsNCgkJZWNobyB0cih0ZGEoaWVk X3BsdWdpbl9nVHh0KCdwcmVmc19ub3RfaW5zdGFsbGVkJyksICcgY29sc3Bhbj0iMiInKSk7 DQoJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsNCgl9DQoJZWNobyBl bmRUYWJsZSgpOw0KDQoJZWNobyA8PDxFT0YNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny aXB0Ij4NCnZhciBpZWRfcGx1Z2luX3BhdGhfcmUgPSBuZXcgUmVnRXhwKCJeLipbL1xcXSIs ICJnIikNCmZ1bmN0aW9uIGllZF9wbHVnaW5fcHJlZnN3YXAoc2VsSUQsIHNlbFZhbHVlKSB7 DQoJdmFyIGlkID0gc2VsSUQrJ19wYXRoJzsNCgl2YXIgbnV2YWwgPSAoKGJhc2VuYW1lKCQo IiMiK2lkKS52YWwoKSkgPT0gc2VsVmFsdWUpID8gJCgiIyIraWQpLnZhbCgpIDogZGlybmFt ZSgkKCIjIitpZCkudmFsKCkpK3NlbFZhbHVlKTsNCglpZiAoJCgiIyIrc2VsSUQpWzBdLnNl bGVjdGVkSW5kZXggPT0gMCkgew0KCQkkKCIjIitpZCkuYXR0cigiZGlzYWJsZWQiLCB0cnVl KTsgOw0KCX0gZWxzZSB7DQoJCSQoIiMiK2lkKS5hdHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsg Ow0KCQkkKCIjIitpZCkudmFsKG51dmFsKTsNCgl9DQp9DQpmdW5jdGlvbiBiYXNlbmFtZShw YXRoLCBzdWZmaXgpIHsNCglyZXR1cm4gcGF0aC5yZXBsYWNlKGllZF9wbHVnaW5fcGF0aF9y ZSwgJycpOw0KfQ0KZnVuY3Rpb24gZGlybmFtZShwYXRoKSB7DQoJcmV0dXJuIHBhdGgubWF0 Y2goaWVkX3BsdWdpbl9wYXRoX3JlKTsNCn0NCiQoZnVuY3Rpb24oKSB7DQoJJCgic2VsZWN0 Lmxpc3QiKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQlpZWRfcGx1Z2luX3ByZWZzd2FwKHRoaXMu aWQsIHRoaXMudmFsdWUpOw0KCX0pOw0KfSk7DQo8L3NjcmlwdD4NCkVPRjsNCn0NCg0KLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsKCRzaG93cGFuZT0n MScpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7DQoJJG1lc3NhZ2UgPSAnJzsNCglm b3JlYWNoICgkaWVkX3BsdWdpbl9wcmVmc1swXSBhcyAkcHJlZiA9PiAkZGZsdCkgew0KCQlp ZiAoIWZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScsJHByZWYpKSB7DQoJCQkkaWQg PSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9MSwgbmFtZT0nLmRvUXVvdGUo ZG9TbGFzaCgkcHJlZikpLicsIHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZsdCkpLicsZXZl bnQ9ImllZF9wbHVnaW4iJyk7DQoJCX0NCgl9DQoJaWYgKCRzaG93cGFuZSkgew0KCQkkbWVz c2FnZSA9IGllZF9wbHVnaW5fZ1R4dCgncHJlZnNfaW5zdGFsbGVkJyk7DQoJCWllZF9wbHVn aW5fc2V0dXAoJycsJycsJG1lc3NhZ2UpOw0KCX0NCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rp b24gaWVkX3BsdWdpbl9wcmVmc19yZW1vdmUoJHNob3dwYW5lPScxJykgew0KCWdsb2JhbCAk aWVkX3BsdWdpbl9wcmVmczsNCgkkbWVzc2FnZSA9ICcnOw0KCWZvcmVhY2ggKGFycmF5X21l cmdlKCRpZWRfcGx1Z2luX3ByZWZzWzBdLCRpZWRfcGx1Z2luX3ByZWZzWzFdKSBhcyAkcHJl ZiA9PiAkZGZsdCkgew0KCQlpZiAoZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywk cHJlZikpIHsNCgkJCSRpZCA9IHNhZmVfZGVsZXRlKCd0eHBfcHJlZnMnLCduYW1lPScuZG9R dW90ZShkb1NsYXNoKCRwcmVmKSkpOw0KCQl9DQoJfQ0KCWlmICgkc2hvd3BhbmUpIHsNCgkJ JG1lc3NhZ2UgPSBpZWRfcGx1Z2luX2dUeHQoJ3ByZWZzX2RlbGV0ZWQnKTsNCgkJaWVkX3Bs dWdpbl9zZXR1cCgnJywnJywkbWVzc2FnZSk7DQoJfQ0KfQ0KDQovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5j dGlvbiBpZWRfcGx1Z2luX3ByZWZzX3VwZGF0ZSgpIHsNCglnbG9iYWwgJGllZF9wbHVnaW5f cHJlZnM7DQoJJG1lc3NhZ2UgPSAnJzsNCgkkcG9zdCA9IGRvU2xhc2goc3RyaXBQb3N0KCkp Ow0KCWZvcmVhY2ggKCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7 DQoJCWlmIChpc3NldCgkcG9zdFskcHJlZl0pKSB7DQoJCQlzYWZlX3VwZGF0ZSgidHhwX3By ZWZzIiwgInZhbCA9ICciLiRwb3N0WyRwcmVmXS4iJyIsICJuYW1lID0gJyIuZG9TbGFzaCgk cHJlZikuIicgYW5kIHByZWZzX2lkID0gMSIpOw0KCQl9DQoJfQ0KCSRtZXNzYWdlID0gZ1R4 dCgncHJlZmVyZW5jZXNfc2F2ZWQnKTsNCglpZWRfcGx1Z2luX3NldHVwKCcnLCcnLCRtZXNz YWdlKTsNCn0NCg0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KZnVuY3Rpb24gaWVkX3BsdWdpbl9nVHh0KCR3aGF0 LCAkYXR0cyA9IGFycmF5KCkpIHsNCgkkbGFuZyA9IGFycmF5KA0KCQknY2FjaGVfbm90X3Nl dCcgPT4gJ0FkdmFuY2VkIHByZWYgInBsdWdpbiBjYWNoZSBkaXJlY3RvcnkiIG5vdCBkZWZp bmVkJywNCgkJJ2NoZWNrX3R5cGUnID0+ICdDaGVjayB5b3VyIHBsdWdpbiB0eXBlIScsDQoJ CSdjaG9vc2VfZmlsZScgPT4gJ1lvdSBhcmUgc3VwcG9zZWQgdG8gY2hvb3NlIHRoZSBmaWxl IDspJywNCgkJJ2NvZGVfZGlzdCcgPT4gJ1BsdWdpbiBjb2RlPGJyPmZvciBkaXN0cmlidXRp b24nLA0KCQknaWVkX3BsdWdpbl9jb21wb3NlcicgPT4gJ1BsdWdpbiBDb21wb3NlcicsDQoJ CSdjb21wcmVzcycgPT4gJ1ppcCcsDQoJCSdjcmVhdGVfbmV3JyA9PiAnQ3JlYXRlIG5ldyBw bHVnaW4nLA0KCQknZWRpdF9uZXcnID0+ICdFZGl0IHlvdXIgbmV3IHBsdWdpbicsDQoJCSdl bmFibGUnID0+ICdFbmFibGVkJywNCgkJJ2V4cG9ydCcgPT4gJ0V4cG9ydCBhcycsDQoJCSdm bGFnX2hhc19wcmVmcycgPT4gJ0hhcyBwcmVmcycsDQoJCSdmbGFnX2xpZmVjeWNsZV9ub3Rp ZnknID0+ICdFdmVudCBub3RpZnknLA0KCQknZmxhZ3MnID0+ICdGbGFncycsDQoJCSdpZWRf cGx1Z2luX2VkaXRvcicgPT4gJ1BsdWdpbiBlZGl0b3InLA0KCQknaWVkX3BsdWdpbl9lZGl0 b3JfcGF0aCcgPT4gJ1BsdWdpbiBlZGl0b3IgcGF0aCBVUkwnLA0KCQknaWVkX3BsdWdpbl9l ZGl0b3Jfd2lkdGgnID0+ICdQbHVnaW4gZWRpdG9yIHdpZHRoIChjaGFycyknLA0KCQknaWVk X3BsdWdpbl9oZWxwX2VkaXRvcicgPT4gJ0hlbHAgZWRpdG9yJywNCgkJJ2llZF9wbHVnaW5f aGVscF9lZGl0b3JfcGF0aCcgPT4gJ0hlbHAgZWRpdG9yIHBhdGggVVJMJywNCgkJJ2llZF9w bHVnaW5fb3V0cHV0X29yZGVyJyA9PiAnUEhQIGV4cG9ydCBvcmRlcicsDQoJCSdpZWRfcGx1 Z2luX291dHB1dF9zZmlsZScgPT4gJ0V4cG9ydCBwbHVnaW4gZmlsZW5hbWUgZm9ybWF0JywN CgkJJ2llZF9wbHVnaW5fb3V0cHV0X3NmaWxlYycgPT4gJ0V4cG9ydCBjb21wcmVzc2VkIGZp bGVuYW1lIGZvcm1hdCcsDQoJCSdpZWRfcGx1Z2luX291dHB1dF9zZmlsZXAnID0+ICdQbHVn aW4gdGVtcGxhdGUgZmlsZW5hbWUgZm9ybWF0JywNCgkJJ2llZF9wbHVnaW5fb3V0cHV0X3Rt cGNhY2hlJyA9PiAnQ2FjaGUgdGV4dGlsZWQgaGVscCBoZXJlJywNCgkJJ2p1bXBfdG9fbGlu ZScgPT4gJ0p1bXAgdG8gbGluZTonLA0KCQknbmFtZScgPT4gJ1BsdWdpbiBuYW1lJywNCgkJ J25hbWVfZmlyc3QnID0+ICdZb3UgYXJlIHN1cHBvc2VkIHRvIG5hbWUgdGhlIHBsdWdpbiA7 KScsDQoJCSduYW1lX3Rvb2x0aXAnID0+ICdPbmx5IG5lZWRlZCBpZiB0aGUgUEhQIGZpbGUg eW91IGFyZSB1cGxvYWRpbmcgaXMgTk9UIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3Jt YXQnLA0KCQknbG9hZF9vcmRlcicgPT4gJ0xvYWQgb3JkZXInLA0KCQknbG9hZF9vcmRlcl9o ZWxwJyA9PiAnKDE9Zmlyc3QsIDU9bm9ybWFsLCA5PWxhc3QpJywNCgkJJ291dHB1dF9jb2Rl X2ZpcnN0JyA9PiAnQ29kZSBmaXJzdCcsDQoJCSdvdXRwdXRfaGVscF9maXJzdCcgPT4gJ0hl bHAgZmlyc3QnLA0KCQkncGx1Z2luX2NvZGUnID0+ICdTb3VyY2UgY29kZScsDQoJCSdwcmVm c19kZWxldGVkJyA9PiAnUHJlZmVyZW5jZXMgZGVsZXRlZCcsDQoJCSdwcmVmc19pbnN0YWxs ZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0YWxsZWQnLA0KCQkncHJlZnNfbm90X2luc3RhbGxl ZCcgPT4gJ1ByZWZlcmVuY2VzIG5vdCBpbnN0YWxsZWQuJywNCgkJJ3ByZWZzX3NvbWUnID0+ ICdOb3QgYWxsIHByZWZlcmVuY2VzIGF2YWlsYWJsZS4nLA0KCQkncHJlZnNfc29tZV9leHBs YWluJyA9PiAnSXQgaXMgZWl0aGVyIGJlY2F1c2UgdGhpcyBpcyBhIGRpZmZlcmVudCB2ZXJz aW9uIG9mIHRoZScuYnIuJ3BsdWdpbiB0byBvbmUgeW91IGhhZCBiZWZvcmUgb3IgdGhlIHBy ZWZlcmVuY2VzJy5ici4naGF2ZSBiZWNvbWUgY29ycnVwdCBzb21laG93LicsDQoJCSdwcmVm c19zb21lX29wdGlvbnMnID0+ICdDaG9vc2UgJy5nVHh0KCdkZWxldGUnKS4nIHRvIHJlbW92 ZSB0aGVtIGFsbCBvciAnLmdUeHQoJ2luc3RhbGwnKS4nIHRvIGFkZCcuYnIuJ2FueSBuZXcg b25lcywgbGVhdmluZyBhbGwgZXhpc3RpbmcgcHJlZmVyZW5jZXMgdW50b3VjaGVkLicsDQoJ CSdwcmVmc190aXRsZScgPT4gJ1BsdWdpbiBDb21wb3NlciBwcmVmZXJlbmNlcycsDQoJCSdy ZW5hbWVfZmFpbGVkJyA9PiAnIChyZW5hbWUgZmFpbGVkKSAnLA0KCQkncmVuYW1lX2ZpbGUn ID0+ICdSZW5hbWUgZmlsZScsDQoJCSdyZW5hbWVkJyA9PiAnIChyZW5hbWVkKSAnLA0KCQkn cmVzdG9yZV9oZWxwJyA9PiAnUm9sbCBiYWNrIHRoZSBwbHVnaW4gY29kZSB0byB0aGUgbW9z dCByZWNlbnQgcmVzdG9yZSBwb2ludCcsDQoJCSdyZXN0b3JlX3BvaW50JyA9PiAnUmVzdG9y ZSBwb2ludCcsDQoJCSdyZXN0b3JlX3ZlcmlmeScgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2Fu dCB0byByb2xsYmFjayB0aGUge25hbWV9IHNvdXJjZSBjb2RlIHRvIGl0cyBsYXN0IHJlc3Rv cmUgcG9pbnQ/JywNCgkJJ3Jlc3RvcmVkJyA9PiAnUGx1Z2luIHtuYW1lfSByZXN0b3JlZC4n LA0KCQkncnVuX2Zyb20nID0+ICdQbHVnaW5zIHRoYXQgcnVuIGZyb20nLA0KCQknc2F2ZV9h cycgPT4gJ1NhdmUgYXMnLA0KCQknc2V0dXAnID0+ICdTZXR1cCcsDQoJCSd0eXBlJyA9PiAn UGx1Z2luIHR5cGUnLA0KCQkndHlwZV8wJyA9PiAnQ2xpZW50JywNCgkJJ3R5cGVfMScgPT4g J0FkbWluICsgQ2xpZW50JywNCgkJJ3R5cGVfMicgPT4gJ0xpYnJhcnknLA0KCQkndHlwZV8z JyA9PiAnQWRtaW4nLA0KCQkndXBsb2FkX3BocCcgPT4gJ1VwbG9hZCBwbHVnaW4gZnJvbSBQ SFAgZmlsZScsDQoJCSd1dGlsaXRpZXMnID0+ICdVdGlsaXRpZXMgKDxzdHJvbmc+dXNlIG9u bHkgYWZ0ZXIgc2F2aW5nIHRoZSBkYXRhIGFib3ZlPC9zdHJvbmc+KScsDQoJKTsNCglyZXR1 cm4gc3RydHIoJGxhbmdbJHdoYXRdLCAkYXR0cyk7DQp9IjtzOjQ6InR5cGUiO3M6MToiMyI7 czo1OiJmbGFncyI7czoxOiIzIjtzOjU6Im9yZGVyIjtzOjE6IjUiO3M6MzoibWQ1IjtzOjMy OiJiNjgzZjcyNWQ3ZjYxODhlOWVjNDY4Y2MxYTk4MmQwZCI7fQ==