# Name: ied_plugin_composer v0.7 # Type: Admin/Client side plugin # Write and publish plugins easily # Author: Yura Linnyk / Stef Dawson / Steve Dickinson # URL: http://inspired.kiev.ua # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE5OiJpZWRfcGx1Z2luX2NvbXBvc2VyIjtzOjc6InZlcnNp b24iO3M6MzoiMC43IjtzOjY6ImF1dGhvciI7czo0MzoiWXVyYSBMaW5ueWsgLyBTdGVmIERh d3NvbiAvIFN0ZXZlIERpY2tpbnNvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMzoiaHR0cDov L2luc3BpcmVkLmtpZXYudWEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMyOiJXcml0ZSBhbmQg cHVibGlzaCBwbHVnaW5zIGVhc2lseSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NDoiaGVscCI7 czoxMTIwMjoiCTxwPjxkaXYgaWQ9ImllZF9oZWxwIj48L3A+CgoJPGgxIGlkPSJ0b3AiPklu c3BpcmVkIHBsdWdpbiBjb21wb3NlcjwvaDE+CgoJPHA+VGhpcyBwbHVnaW4gY3JlYXRlcyBh IG5ldyBwYWdlIHVuZGVyIHRoZSAmIzgyMTY7RXh0ZW5zaW9ucyYjODIxNzsgdGFiIHdoZXJl IHlvdSBjYW4gZWRpdCBwbHVnaW5zIHRoYXQgYXJlIGFscmVhZHkgaW5zdGFsbGVkIGluIFRl eHRQYXR0ZXJuIGFuZCByZWdpc3RlciBuZXcgcGx1Z2lucy48L3A+CgoJPGgyIGlkPSJmZWF0 dXJlcyI+RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+Q3JlYXRlLCBlZGl0IG9yIHVwbG9h ZCBwbHVnaW4gY29kZSBhbmQgaGVscCwgdGhlbiBwdWJsaXNoIHRoZSByZXN1bHQgaW4gdGhl IHN0YW5kYXJkIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHBsdWdpbiBmb3JtYXQ8 L2xpPgoJCTxsaT5GdWxsIHN1cHBvcnQgZm9yIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRh d3Nvbi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0ZS50eHQiPnplbV90cGwu cGhwIHBsdWdpbiB0ZW1wbGF0ZTwvYT4uIFRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nv bi5jb20vZG93bmxvYWRzL2VtcHR5X3BsdWdpbl90ZW1wbGF0ZV9jb2RlX2ZpcnN0LnR4dCI+ bGF0ZXN0IHJldmlzaW9uPC9hPiBieSA8YSBocmVmPSJodHRwOi8vdHhwLXBsdWdpbnMubmV0 Y2FydmluZy5jb20vcGx1Z2lucy9tb2RpZmllZC1wbHVnaW4tY29tcGlsZXIiPm5ldC1jYXJ2 ZXI8L2E+IGFsc28gaW5jb3Jwb3JhdGVzIGEgJiM4MjE2O3N0eWxlJiM4MjE3OyBzZWN0aW9u IGZvciBlYXN5IHN0eWxpbmcgb2YgeW91ciBoZWxwIHRleHQuIFRoZSBQbHVnaW4gQ29tcG9z ZXIgbG9va3MgZm9yIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IHNlY3Rpb25zIGlu IHRoZSB0ZW1wbGF0ZSBhbmQgd2lsbCB1c2UgdGhlbSBhY2NvcmRpbmdseTwvbGk+CgkJPGxp PkV4cG9ydCBhIHBsdWdpbiBhcyBlaXRoZXIgYSBzdGFuZGFyZCBCQVNFNjQtZW5jb2RlZCBw bHVnaW4gKG5vdyBpbiBzdGFuZGFyZCA3Mi1jaGFyIGNodW5rIG1vZGUpIG9yIGFzIGEgZ3pp cHBlZCB2ZXJzaW9uIG9mIHRoZSBhYm92ZSAodXNlZnVsIGZvciBsYXJnZSBwbHVnaW5zKSBv ciBhcyBhIHBocCBmaWxlIGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQuIFRoaXMg bWVhbnMgeW91IGNhbiBzd2l0Y2ggYmV0d2VlbiBlZGl0aW5nIGluIHRoZSBwbHVnaW4gY29t cG9zZXIgb3IgeW91ciBmYXZvdXJpdGUgZWRpdGluZyBwcm9ncmFtLCB0ZXN0IHRoZSBmaWxl IGluIHRoZSBwbHVnaW5fY2FjaGVfZGlyLCB0aGVuIGltcG9ydCBpdCBiYWNrIGludG8gPHNw YW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4gd2l0aCB0aGUgaGVscCBvZiB0aGUgQ29tcG9z ZXIgYW5kIHB1Ymxpc2ggeW91ciBwbHVnaW4gZm9yIGV2ZXJ5b25lLiBMb29rIGF0IHRoZSBi b3R0b20gb2YgdGhlIFBsdWdpbiBDb21wb3NlciYjODIxNztzIDxhIGhyZWY9IiNlZGl0cGFn ZSI+RWRpdCBwYWdlPC9hPiBmb3IgdGhlIG9wdGlvbnM7IGp1c3QgcmVtZW1iZXIgdG8gc2F2 ZSB5b3VyIGNoYW5nZXMgYmVmb3JlIGV4cG9ydGluZyBvciBjb3B5aW5nL3Bhc3RpbmcgdGhl IGNvZGUhPC9saT4KCQk8bGk+V2hlbiBleHBvcnRpbmcsIGZpbGVzIGNhbiBiZSBzYXZlZCB3 aXRoIGVpdGhlciB0aGUgY29kZSBibG9jayBmaXJzdCBvciB0aGUgaGVscCBibG9jayBmaXJz dC4gVXNlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5TZXR1cCBidXR0b248L2E+IHRvIGNv bmZpZ3VyZTwvbGk+CgkJPGxpPlN1cHBvcnQgZm9yIENsaWVudCwgQWRtaW4sIGFuZCBMaWJy YXJ5IHR5cGUgcGx1Z2luczwvbGk+CgkJPGxpPkhlbHAgdGV4dCBjYW4gYmUgd3JpdHRlbiBp biBUZXh0aWxlIG9yIChYKUhUTUwuIFN0eWxlcyBjYW4gYmUgYWRkZWQgdG8gdGhlIGhlbHAg c2VjdGlvbjwvbGk+CgkJPGxpPlRha2UgYWR2YW50YWdlIG9mIHRoZSA8YSBocmVmPSJodHRw Oi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MTMwODkiPlRpbnlN Q0UgPHNwYW4gY2xhc3M9ImNhcHMiPldZU0lXWUc8L3NwYW4+IGVkaXRvcjwvYT4gZm9yIHRo ZSBoZWxwIHNlY3Rpb24gb3IgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9q ZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9MTY0MDA4Ij5FZGl0IEFyZWE8L2E+IGZvciBj b2RlIG1hcmt1cCAodGhhbmtzIHZhcmlhYXMpLiBTZWUgdGhlIDxhIGhyZWY9IiNzZXR1cHBh Z2UiPnNldHVwPC9hPiBhbmQgPGEgaHJlZj0iI25vdGVzIj5ub3RlczwvYT4gc2VjdGlvbnMg Zm9yIG1vcmUgb24gdGhlc2UgZWRpdG9yczwvbGk+CgkJPGxpPkJ1aWx0LWluIFRleHRpbGUg aGVscCB2aWV3ZXIgKHRoYW5rcyB0byBuZXQtY2FydmVyJiM4MjE3O3MgPGEgaHJlZj0iaHR0 cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvcGx1Z2luLWhlbHAtdmll d2VyIj5QbHVnaW4gSGVscCBWaWV3ZXI8L2E+KSB0byBhbGxvdyB5b3UgdG8gcHJldmlldyB5 b3VyIEhlbHAgdGV4dCBkdXJpbmcgZGV2ZWxvcG1lbnQgKHRoZSB0d28gdmlld2VycyB3aWxs IGhhcHBpbHkgY28tZXhpc3QgaWYgeW91IHdpc2gpPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJh dXRob3JzIj5BdXRob3JzPC9oMj4KCgk8cD5PcmlnaW5hbCBwbHVnaW46IDxhIGhyZWY9Imh0 dHA6Ly9pbnNwaXJlZC5raWV2LnVhL2ZlZWRiYWNrLyI+WXVyYSBMaW5ueWs8L2E+PGJyIC8+ Ck1vZGlmaWNhdGlvbnMgKHYwLjUrKTogPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29t L2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT48YnIgLz4KQSB0b3VjaCBvZiBjbGFzczog PGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL2NvbnRhY3QiPlN0 ZXZlIERpY2tpbnNvbjwvYT48L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24g LyBVbmluc3RhbGxhdGlvbjwvaDI+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiAodjAuNSBh bmQgYWJvdmUpIGZyb20gPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zdGVm ZGF3c29uLmNvbTwvYT4gKHByZXZpb3VzIHZlcnNpb25zIGFyZSBzdGlsbCBhdmFpbGFibGUg b24gdGhlIDxhIGhyZWY9Imh0dHA6Ly9pbnNwaXJlZC5raWV2LnVhL3R4cC9pZWRfcGx1Z2lu X2NvbXBvc2VyIj5JbnNwaXJlZCBob21lcGFnZTwvYT4pLCBwYXN0ZSB0aGUgY29kZSBpbnRv IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBBZG1pbiAtJiM2MjsgUGx1Z2lu cyBwYWdlLCBpbnN0YWxsIGFuZCBlbmFibGUgdGhlIHBsdWdpbi48L3A+CgoJPHA+VmlzaXQg dGhlIEV4dGVuc2lvbnMgLSYjNjI7IFBsdWdpbiBDb21wb3NlciB0YWIgYW5kIGNsaWNrIHRo ZSBTZXR1cCBidXR0b24gaW4gdGhlIHRvcC1yaWdodCBvZiB0aGUgc2NyZWVuLiBGcm9tIGhl cmUgeW91IGNhbiBJbnN0YWxsLCBEZWxldGUgYW5kIFNhdmUgdGhlIHBsdWdpbiBwcmVmZXJl bmNlcy4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBwYWdlIj5zZXR1cCBzZWN0aW9uPC9hPiBm b3IgZGV0YWlscy48L3A+CgoJPHA+VG8gcmVtb3ZlIHRoZSBQbHVnaW4gQ29tcG9zZXIgKG5v b29vISkgdmlzaXQgdGhlIFNldHVwIHBhZ2UgYWdhaW4gZnJvbSB0aGUgUGx1Z2luIENvbXBv c2VyIHRhYiwgaGl0IERlbGV0ZSB0byByZW1vdmUgdGhlIHByZWZlcmVuY2VzLCB0aGVuIHNp bXBseSBkZWxldGUgdGhlIHBsdWdpbiBhcyBub3JtYWwgZnJvbSB0aGUgQWRtaW4gLSYjNjI7 IFBsdWdpbnMgcGFnZS48L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxoMyBp ZD0ibGlzdHBhZ2UiPkxpc3QgcGFnZTwvaDM+CgoJPHA+QWxsIGluc3RhbGxlZCBwbHVnaW5z IGFyZSBsaXN0ZWQgb24gdGhlIFBsdWdpbiBDb21wb3NlciBwYWdlLiBUaGV5IGNhbiBiZSBl bmFibGVkL2Rpc2FibGVkLCBkZWxldGVkIG9yIGVkaXRlZCBmcm9tIGhlcmUuIFRoZSBoZWxw IGNhbiBhbHNvIGJlIHZpZXdlZCBmcm9tIHRoaXMgcGFnZSwgb3Igd2hpbGUgZWRpdGluZyBp dCBieSB1c2luZyB0aGUgbGluayBuZXh0IHRvIHRoZSB0b3Btb3N0IFNhdmUgYnV0dG9uIG9u IHRoZSBlZGl0IHBhZ2UuPC9wPgoKCTxwPklmIHlvdSBhcmUgdXNpbmcgdGhlIHBsdWdpbl9j YWNoZV9kaXIgKEFkbWluIC0mIzYyOyBBZHZhbmNlZCBQcmVmcyksIGFueSBwbHVnaW5zIGlu IHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL2V4YW1wbGVf cGx1Z2luX3RlbXBsYXRlLnR4dCI+c3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0PC9hPiB1cGxv YWRlZCB0byB0aGlzIGRpcmVjdG9yeSB3aWxsIGJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBm b3IgZWRpdGluZyBhbmQgdGVzdGluZy4gSW4gYWRkaXRpb24sIHRoZXNlIHBsdWdpbnMgYmVu ZWZpdCBmcm9tIGJlaW5nICYjODIyMDthbHdheXMgb24mIzgyMjE7OyBubyBuZWVkIHRvIGlu c3RhbGwgdGhlbS48L3A+CgoJPHA+VGhlcmUgYXJlIHR3byB3YXlzIG9mIGNyZWF0aW5nIHBs dWdpbnMgZnJvbSB0aGUgUGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZS4gVGhlIGZpcnN0IGlz IHRvIGNyZWF0ZSBhIGJsYW5rLCBlbXB0eSBwbHVnaW4uIFVzZSB0aGUgdGV4dCBib3ggYXQg dGhlIHRvcCBmb3IgdGhpcy4gVGhlIHNlY29uZCBpcyB0byB1cGxvYWQgb25lIHVzaW5nIHRo ZSBCcm93c2UvdXBsb2FkIGJveCBhdCB0aGUgYm90dG9tLiBZb3UgY2FuIHVwbG9hZCBjb2Rl IGluIGVpdGhlciBzdGFuZGFyZCBwbHVnaW4gdGVtcGxhdGUgZm9ybWF0IChlaXRoZXIgY29k ZS1maXJzdCBvciBoZWxwLWZpcnN0LCBjb21wbGV0ZSB3aXRoIDxzcGFuIGNsYXNzPSJjYXBz Ij5DU1M8L3NwYW4+IGFyZWFzKSBvciBzaW1wbHkgdXBsb2FkIGEgPHNwYW4gY2xhc3M9ImNh cHMiPlBIUDwvc3Bhbj4gZmlsZSBjb250YWluaW5nIGNvZGUgb25seS48L3A+CgoJPGgzIGlk PSJlZGl0cGFnZSI+RWRpdCBwYWdlPC9oMz4KCgk8cD5PbiB0aGUgRWRpdCBwYWdlLCBjb2Rl IGdvZXMgaW4gdGhlICYjODIxNjtQbHVnaW4mIzgyMTc7IGJveCwgaGVscCBnb2VzIGluIHRo ZSAmIzgyMTY7UGx1Z2luIGhlbHAmIzgyMTc7IGJveCwgc3R5bGluZyBnb2VzIGluIHRoZSAm IzgyMTY7U3R5bGUmIzgyMTc7IGJveCEgU3R5bGVzIGFyZSA8ZW0+bm90PC9lbT4gcGFzc2Vk IHRocm91Z2ggdGhlIFRleHRpbGUgbWFuZ2xlIGFuZCBpZiB5b3UgZm9yZ2V0IChvciBkb24m IzgyMTc7dCBhZGQpIHRoZSA8Y29kZT4mIzYwO3N0eWxlJiM2Mjs8L2NvZGU+IHRhZ3MsIHRo ZSBDb21wb3NlciB3aWxsIGFkZCB0aGVtIGZvciB5b3UuPC9wPgoKCTxwPkZpbGwgaW4gdGhl IG90aGVyIGZpZWxkcyB3aXRoIHJlbGV2YW50IGRldGFpbHMgYWJvdXQgeW91cnNlbGYgYW5k IHlvdXIgcGx1Z2luIGFuZCB5b3UmIzgyMTc7cmUgZ29vZCB0byBnby4gQ2hvb3NlIGZyb20g ZWl0aGVyIENsaWVudC1zaWRlIG9ubHksIEFkbWluLXNpZGUgKHdoaWNoIGluY2x1ZGVzIGNs aWVudCBzaWRlIGJ5IGRlZmF1bHQpIG9yIExpYnJhcnkgcGx1Z2luIHR5cGVzLiBBIHdhcm5p bmcgaXMgaXNzdWVkIGlmIHlvdSBzYXZlIGEgQ2xpZW50IHBsdWdpbiB0aGF0IHVzZXMgQWRt aW4tc2lkZSBjb2RlICh0aGFua3MgbmV0LWNhcnZlcikuPC9wPgoKCTxwPkhpdCBTYXZlIHRv IHN0b3JlIHlvdXIgcGx1Z2luLiBPbmNlIHlvdSYjODIxNztyZSBoYXBweSB3aXRoIGl0LCBz Y3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZWRpdCBwYWdlIGFuZCBjaG9vc2UgaG93IHRv IGV4cG9ydCBpdC4gVGhlIGZpcnN0IGxpbmsgaXMgZm9yIHN0YW5kYXJkIHBsdWdpbnMgd2hp Y2ggYXJlIGRpc3RyaWJ1dGVkIHRvIGFsbCB1c2VyczsgdGhlIHNlY29uZCBpcyBmb3IgY29t cHJlc3NlZCBwbHVnaW5zICYjODIxMjsgdXNlIHRoaXMgaWYgeW91ciBwbHVnaW5zIGFyZSBs YXJnZSwgb3Igc2ltcGx5IGFzIGFuIGFsdGVybmF0aXZlIGZvcm1hdC4gQm90aCB0aGVzZSBv cHRpb25zIGNvbnZlcnQgdGhlIGhlbHAgdG8gPHNwYW4gY2xhc3M9ImNhcHMiPkhUTUw8L3Nw YW4+LiBUaGUgdGhpcmQgbGluaywgaG93ZXZlciwgZG9lcyBub3QgYW5kIGlzIHVzZWQgdG8g ZXhwb3J0IHRoZSBwbHVnaW4gYmFjayBvdXQgaW4gdGhlIHN0YW5kYXJkIHRlbXBsYXRlIGZv cm1hdCB0byBwZXJoYXBzIGdpdmUgdG8gYW5vdGhlciBkZXZlbG9wZXIgZGlyZWN0bHksIG9y IHRvIHJldGFpbiB0aGUgVGV4dGlsZSBtYXJrdXAgZm9yIGZ1dHVyZSB1cGRhdGVzLjwvcD4K Cgk8cD5bIE5vdGUgdGhhdCB3aGVuIGV4cG9ydGluZyBhcyBhIHN0YW5kYXJkIHBsdWdpbiwg dGhlIFRleHRpbGUgcHJvY2Vzc29yIGF0dGVtcHRzIHRvIGRlY2lkZSBpZiB5b3UgaGF2ZSB1 c2VkIFRleHRpbGUgb3Igbm90IChpdCBzaW1wbHkgbG9va3MgZm9yIGEgdGV4dGlsZWQgJiM4 MjE2O2gxJiM4MjE3OykuIFJ1bm5pbmcgcHVyZSA8c3BhbiBjbGFzcz0iY2FwcyI+SFRNTDwv c3Bhbj4gdGhyb3VnaCB0ZXh0aWxlIG1heSBvY2Nhc2lvbmFsbHkgY2F1c2UgZW5jb2Rpbmcg aXNzdWVzIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luYWwgY2hhcmFjdGVyIHNldCB1c2VkICYj ODIxMjsgaGF2ZW4mIzgyMTc7dCB0cmFja2VkIGRvd24gdGhlIGNpcmN1bXN0YW5jZXMgdW5k ZXIgd2hpY2ggaXQgaGFwcGVucyB5ZXQgXTwvcD4KCgk8cD5Zb3UgY2FuIGFsc28gZXhwb3J0 IHBsdWdpbnMgaW4gdGhlIHBsdWdpbl9jYWNoZV9kaXIgZnJvbSB0aGUgbWFpbiBQbHVnaW4g Q29tcG9zZXIgbGlzdCBwYWdlLiBTY3JvbGwgdG8gdGhlIGJvdHRvbSBhbmQgeW91IHdpbGwg c2VlIGEgUHVibGlzaCBsaW5rICh0byBwcm9kdWNlIGEgc3RhbmRhcmQgcGx1Z2luKSBvciBh ICYjODIxNjt6aXAmIzgyMTc7IG9wdGlvbiB0byBnZW5lcmF0ZSBhIGNvbXByZXNzZWQgdmVy c2lvbi48L3A+CgoJPGgzIGlkPSJzZXR1cHBhZ2UiPlNldHVwIHBhZ2U8L2gzPgoKCTxwPkNs aWNraW5nIFNldHVwIGZyb20gdGhlIG1haW4gbGlzdCBzY3JlZW4gYWxsb3dzIGFjY2VzcyB0 byB0aGUgcGx1Z2luIHByZWZlcmVuY2VzLjwvcD4KCgk8cD5Zb3UgY2FuIEluc3RhbGwgdGhl bSAmIzgyMTI7IHdoaWNoIHJldGFpbnMgYW55IHByZXZpb3VzIHNldHRpbmdzIGFuZCBhZGRz IG5ldyBvbmVzIHdoZW4gdXBkYXRpbmcgdGhlIHBsdWdpbiwgb3IgRGVsZXRlIHRoZW0uIFRo ZSBwbHVnaW4gY2hlY2tzIGlmIGFsbCByZXF1aXJlZCBwcmVmZXJlbmNlcyBhcmUgYXZhaWxh YmxlIGFuZCBvZmZlcnMgeW91IHRoZSBjaG9pY2Ugb2YgZGVsZXRpbmcvcmVpbnN0YWxsaW5n IGluIHRoZSBjYXNlIHRoZSBwcmVmcyBiZWNvbWUgY29ycnVwdGVkLjwvcD4KCgk8cD5PbmNl IHRoZSBwcmVmcyBhcmUgaW5zdGFsbGVkLCB5b3UgbWF5IGNob29zZSB0byBlZGl0IHRoZSBj b2RlIHVzaW5nIGEgM3JkIHBhcnR5IGNvZGUgc3ludGF4IGhpZ2hsaWdodGVyLiBDdXJyZW50 IHN1cHBvcnQgaXMgZm9yIEVkaXQgQXJlYSBhbmQgKHNvcnQgb2YpIENvZGVQcmVzcyAmIzgy MTI7IHNlZSB0aGUgPGEgaHJlZj0iI25vdGVzIj5ub3RlczwvYT4uPC9wPgoKCTxwPklmIHlv dSB3aXNoIHRvIHRha2UgYWR2YW50YWdlIG9mIEVkaXQgQXJlYSwgZ3JhYiBpdCBmcm9tIHNv dXJjZWZvcmdlLCBpbnN0YWxsIGl0LCBzZWxlY3QgJiM4MjE2O0VkaXQgQXJlYSYjODIxNzsg ZnJvbSB0aGUgZHJvcGRvd24gb24gdGhlIFBsdWdpbiBDb21wb3NlciYjODIxNztzIFNldHVw IHBhZ2UgYW5kIGdpdmUgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IHBhdGgg dG8gdGhlIGluc3RhbGxhdGlvbiBvbiB5b3VyIHNlcnZlcjsgdGhpcyBpcyBub3JtYWxseSBl dmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgL2VkaXRfYXJlYS4gTm8gdHJhaWxpbmcg c2xhc2ggaXMgcmVxdWlyZWQuIFNpbWlsYXJseSBmb3IgQ29kZVByZXNzLjwvcD4KCgk8cD5G b3IgdGhlIGhlbHAgc3lzdGVtIHlvdSBjYW4gdXNlIFRleHRpbGUgdGFncyAocmVjb21tZW5k ZWQpIG9yIGNob29zZSBUaW55TUNFLiA8ZW0+Tm90ZSB0aGF0IFRpbnlNQ0UgaXMgbm90IGZ1 bGx5IGludGVncmF0ZWQgeWV0IHNvIDxzcGFuIGNsYXNzPSJjYXBzIj5ZTU1WPC9zcGFuPjwv ZW0+LjwvcD4KCgk8aDMgaWQ9Im5vdGVzIj5Ob3RlczwvaDM+CgoJPHA+TW9yZSBlZGl0b3Jz IGNhbiBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIENvbXBvc2VyIGZhaXJseSBlYXNpbHkuIElm IHlvdSBmaW5kIGEgZ29vZCBvbmUsIGdldCBpbiBjb250YWN0LjwvcD4KCgk8cD5UZW50YXRp dmUgc3VwcG9ydCBmb3IgQ29kZVByZXNzIGlzIGFscmVhZHkgaW4gdGhlcmUgYnV0IEkgZm91 bmQgaXQgaW5leHBsaWNhYmx5IGJsYW5rZWQgb3V0IHRoZSBwbHVnaW4gY29kZSB3aGVuIGl0 IHdhcyBzYXZlZCBzbyBJJiM4MjE3O3ZlIGNvbW1lbnRlZCBvdXQgc3VwcG9ydCBmb3Igbm93 LiBJZiBhbnlvbmUgY2FuIHNoZWQgYW55IGxpZ2h0IG9uIHdoeSBpdCBkb2VzIHRoaXMsIHBs ZWFzZSBzcGVhayB1cCEgVW5jb21tZW50IHRoZSBjb2RlIG9uIGxpbmUgNzc3IGFuZCBjb21t ZW50IG91dCBsaW5lIDc3OCB0byBlbmFibGUgc3VwcG9ydCwgdGhlbiB2aXNpdCB0aGUgU2V0 dXAgcGFnZSBhbmQgc2VsZWN0IENvZGVQcmVzcyBmcm9tIHRoZSBsaXN0LiBEb24mIzgyMTc7 dCBleHBlcmltZW50IHdpdGggdGhpcyBzZXR0aW5nIG9uIGFuIGltcG9ydGFudCBwbHVnaW4g Oi0pPC9wPgoKCTxoMyBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gzPgoKCTx1bD4KCQk8 bGk+MjUgRmViIDA2IHwgMC4xIHwgSW5pdGlhbCByZWxlYXNlPC9saT4KCQk8bGk+MjUgRmVi IDA2IHwgMC4yIHwgQWRkZWQgJiM4MjE2O3NhdmUgYXMmIzgyMTc7IG9wdGlvbjwvbGk+CgkJ PGxpPjE3IE1hciAwNiB8IDAuMyB8IEFkZGVkICYjODIxNjtzYXZlIGFzIHBocCYjODIxNzs8 L2xpPgoJCTxsaT4xMCBBcHIgMDYgfCAwLjQgfCBBZGRlZCBzdXBwb3J0IGZvciBwbHVnaW5f Y2FjaGVfZGlyPC9saT4KCQk8bGk+MDQgSmFuIDA4IHwgMC41IHwgRnVsbCBzdXBwb3J0IGZv ciBzdGQgdGVtcGxhdGU7IGNvbXByZXNzZWQgcGx1Z2luczsgTGlicmFyeSBwbHVnaW5zOyBU ZXh0aWxlIGhlbHAgYW5kIHN0eWxpbmc7IGludGVncmF0aW9uIHdpdGggbmV0LWNhcnZlciYj ODIxNztzIFBsdWdpbiBIZWxwIFZpZXdlcjwvbGk+CgkJPGxpPjA3IEphbiAwOCB8IDAuNiB8 IEJ1aWx0LWluIGhlbHAgdmlld2VyICh0aGFua3MgbmV0LWNhcnZlcik7IHN1cHBvcnQgZm9y IEVkaXQgQXJlYSAmIzM4OyBDb2RlUHJlc3MoaXNoKSAodGhhbmtzIHZhcmlhYXMpOyBIZWxw IGJsb2NrL0NvZGUgYmxvY2sgcG9zaXRpb24gc3dpdGNoYWJsZSBvbiBleHBvcnQ7IGFkZGVk IFNldHVwIHByZWZzIHBhZ2U7IGxpbmUgYnJlYWsvc3R5bGUgYnVnZml4ZXM8L2xpPgoJCTxs aT4wOCBKYW4gMDggfCAwLjcgfCBSZS1pbXBvcnRpbmcgcGx1Z2lucyBub3cgcmV0YWlucyBz dHlsZSBibG9jazsgYWRkZWQgJiM4MjE2O2FkbWluIHNpZGUgcGx1Z2luIHdpdGggY2xpZW50 LXNpZGUgdHlwZSYjODIxNzsgd2FybmluZzsgY2hhbmdlZCBidXR0b24gc3R5bGluZyBhbmQg cG9zaXRpb25zIChhbGwgdGhhbmtzIG5ldC1jYXJ2ZXIpOyBnVHh0KCkgcHJlZiBsYWJlbHMg YW5kICYjODIxNjtpbnRlbGxpZ2VudCYjODIxNzsgcHJlZnMgKGdvIGpRdWVyeSBnbyEpOyBj YWNoZWQgcGx1Z2lucyBub3cgYWxzbyBoYXZlIGRpcmVjdCBleHBvcnQgZnJvbSBFZGl0IHBh Z2U7ICYjODIxNjtkb24mIzgyMTc7dCB0ZXh0aWxlIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPiYjODIxNzsgY2hlY2s7IG1pbm9yIGJ1Z2ZpeGVzPC9saT4KCTwvdWw+CgoJPGgy IGlkPSJ3cml0aW5nIj5Xcml0aW5nIGEgcGx1Z2luPC9oMj4KCgk8cD5Zb3Ugc2hvdWxkIGJl IGF3YXJlIG9mIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3Zp ZXd0b3BpYy5waHA/aWQ9OTg4MSI+UGx1Z2luIEF1dGhvciBSZXNvdXJjZXM8L2E+IHRvcGlj IG9uIHRoZSBUZXh0cGF0dGVybiBTdXBwb3J0IEZvcnVtLCBhbmQgeW91IG1pZ2h0IGFsc28g d2FudCB0byBoYXZlIGEgbG9vayBhdCB0aGUgPGEgaHJlZj0iaHR0cDovL2luc3BpcmVkLmtp ZXYudWEvdHhwLXBsdWdpbi1jaGVhdHNoZWV0Ij5UZXh0UGF0dGVybiBwbHVnaW4gY2hlYXQg c2hlZXQ8L2E+LjwvcD4KCgk8cD5IYXBweSBwbHVnaW4gYXV0aG9yaW5nIDotKTwvcD4KCgk8 cD48L2Rpdj48L3A+CjwhLS0gLS0tIEJFR0lOIFBMVUdJTiBDU1MgLS0tIC0tPgo8c3R5bGUg dHlwZT0idGV4dC9jc3MiPgojaWVkX2hlbHAgeyBsaW5lLWhlaWdodDoxLjUgO30KI2llZF9o ZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUlLzEzMCUgIkNvdXJpZXIg TmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkNDO30K I2llZF9oZWxwIGNvZGUuc2VkX2NvZGVfdGFnIHsgZm9udC13ZWlnaHQ6bm9ybWFsOyBib3Jk ZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBlNjhjOyBkaXNwbGF5 OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6MTBweDsgfQojaWVkX2hl bHAgYTpsaW5rLCAjaWVkX2hlbHAgYTp2aXNpdGVkIHsgY29sb3I6IGJsdWU7IHRleHQtZGVj b3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsdWU7IHBhZGRpbmct Ym90dG9tOjFweDt9CiNpZWRfaGVscCBhOmhvdmVyLCAjaWVkX2hlbHAgYTphY3RpdmUgeyBj b2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAycHgg c29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI2llZF9oZWxwIGgxIHsgY29sb3I6 ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgbWFyZ2luOiAwOyB0ZXh0 LWFsaWduOiBjZW50ZXI7IH0KI2llZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNv bGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2OTsgZm9udDogMTdweCBH ZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNpZWRfaGVscCBoMyB7IGNvbG9yOiAjMTA4MDMwOyBm b250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7 IG1hcmdpbjogMTVweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTt9Cjwvc3R5bGU+ CjwhLS0gLS0tIEVORCBQTFVHSU4gQ1NTIC0tLSAtLT4KIjtzOjM6ImNzcyI7czo5MjU6Ijxz dHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNpZWRfaGVscCB7IGxpbmUtaGVpZ2h0OjEuNSA7fQoj aWVkX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6IDEwNSUvMTMwJSAiQ291 cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91bmQtY29sb3I6ICNGRkZG Q0M7fQojaWVkX2hlbHAgY29kZS5zZWRfY29kZV90YWcgeyBmb250LXdlaWdodDpub3JtYWw7 IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tncm91bmQtY29sb3I6ICNmMGU2OGM7IGRp c3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFkZGluZzoxMHB4OyB9CiNp ZWRfaGVscCBhOmxpbmssICNpZWRfaGVscCBhOnZpc2l0ZWQgeyBjb2xvcjogYmx1ZTsgdGV4 dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmx1ZTsgcGFk ZGluZy1ib3R0b206MXB4O30KI2llZF9oZWxwIGE6aG92ZXIsICNpZWRfaGVscCBhOmFjdGl2 ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206 IDJweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojaWVkX2hlbHAgaDEgeyBj b2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyBtYXJnaW46IDA7 IHRleHQtYWxpZ246IGNlbnRlcjsgfQojaWVkX2hlbHAgaDIgeyBib3JkZXItYm90dG9tOiAx cHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9yOiAjMzY5OyBmb250OiAx N3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI2llZF9oZWxwIGgzIHsgY29sb3I6ICMxMDgw MzA7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6 IDFweDsgbWFyZ2luOiAxNXB4IDAgMDt0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO30KPC9z dHlsZT4iO3M6NDoiY29kZSI7czozNDYxNToiaWYoQHR4cGludGVyZmFjZSA9PSAnYWRtaW4n KSB7CglhZGRfcHJpdnMoJ2llZF9wbHVnaW5fY29tcG9zZXInLCcxLDInKTsKCXJlZ2lzdGVy X3RhYignZXh0ZW5zaW9ucycsICdpZWRfcGx1Z2luX2NvbXBvc2VyJywgIlBsdWdpbiBDb21w b3NlciIpOwoJcmVnaXN0ZXJfY2FsbGJhY2soJ2llZF9wbHVnaW5fY29tcG9zZXInLCAnaWVk X3BsdWdpbl9jb21wb3NlcicpOwoJZ2xvYmFsICRpZWRfcGx1Z2luX2NvbXBvc2VyLCAkaWVk X3BsdWdpbl9wcmVmcywgJGllZF9wbHVnaW5fZ2xvYmFsczsKCSRpZWRfcGx1Z2luX2dsb2Jh bHMgPSBhcnJheSgKCQknY3NzX3N0YXJ0JyA9PiAnPCEtLScsCgkJJ2Nzc19lbmQnID0+ICct LT4nLAoJCSdkbG1fc3RhcnQnID0+ICcjJywKCQknZGxtX2VuZCcgPT4gJycsCgkJJ3N0YXJ0 JyA9PiAnIC0tLSBCRUdJTiBQTFVHSU4gU0VDVElPTiAtLS0nLAoJCSdlbmQnID0+ICcgLS0t IEVORCBQTFVHSU4gU0VDVElPTiAtLS0nLAoJKTsKCS8vIERvdWJsZSBhcnJheTogMXN0IGlz IGEgbGlzdCBvZiBjdXJyZW50IHByZWZzIGFuZCB0aGVpciBkZWZhdWx0cywKCS8vIDJuZCBp cyBhIGxpc3Qgb2YgbGVnYWN5IHByZWZzIHRoYXQgbWF5IG5lZWQgcmVtb3ZpbmcgaW4gZnV0 dXJlIChkZWZhdWx0cyBhbGwgc2V0IGVtcHR5KQoJJGllZF9wbHVnaW5fcHJlZnMgPSBhcnJh eSgKCQlhcnJheSgKCQkJJ2llZF9wbHVnaW5fZWRpdG9yJyA9PiAnbm9uZScsCgkJCSdpZWRf cGx1Z2luX2VkaXRvcl9wYXRoJyA9PiBodS4nanMnLkRTLAoJCQknaWVkX3BsdWdpbl9oZWxw X2VkaXRvcicgPT4gJ3RleHRpbGUnLAoJCQknaWVkX3BsdWdpbl9oZWxwX2VkaXRvcl9wYXRo JyA9PiBodS4nanMnLkRTLAoJCQknaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInID0+ICcwJywK CQkpLAoJCWFycmF5KAoJCQknaWVkX3BsdWdpbl9ub3RfdXNlZF9hbnlfbW9yZV90ZXN0ZXIn ID0+ICcnLAoJCSkKCSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9jb21w b3NlciAoJGV2ZW50LCAkc3RlcCkgewoJaWYoISRzdGVwIG9yICFpbl9hcnJheSgkc3RlcCwg YXJyYXkoJ2llZF9wbHVnaW5fZGVsZXRlJywKCQkJJ2llZF9wbHVnaW5fZWRpdCcsCgkJCSdp ZWRfcGx1Z2luX2hlbHAnLAoJCQknaWVkX3BsdWdpbl9saXN0JywKCQkJJ2llZF9wbHVnaW5f aW5zdGFsbCcsCgkJCSdpZWRfcGx1Z2luX3NhdmUnLAoJCQknaWVkX3BsdWdpbl9zYXZlX2Zp bGUnLAoJCQknaWVkX3BsdWdpbl92ZXJpZnknLAoJCQknaWVkX3N3aXRjaF9zdGF0dXMnLAoJ CQknaWVkX3BsdWdpbl9zZXR1cCcsCgkJCSdpZWRfcGx1Z2luX3ByZWZzX2luc3RhbGwnLAoJ CQknaWVkX3BsdWdpbl9wcmVmc19yZW1vdmUnLAoJCQknaWVkX3BsdWdpbl9wcmVmc191cGRh dGUnLAoJCQknaWVkX3BsdWdpbl9jcmVhdGVfbmV3JywKCQkJJ2llZF9wbHVnaW5fc2F2ZV9h c19maWxlJywKCQkJJ2llZF9wbHVnaW5fc2F2ZV9hc19waHBfZmlsZScsCgkJCSdpZWRfcGx1 Z2luX3VwbG9hZCcsCgkJCSdpZWRfcGx1Z2luX2hlbHBfdmlld2VyJywKCQkpKSkgewoJCWll ZF9wbHVnaW5fbGlzdCgpOwoJfSBlbHNlICRzdGVwKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rp b24gaWVkX3BsdWdpbl9saXN0KCRtZXNzYWdlPScnKSB7CglwYWdldG9wKGdUeHQoJ2VkaXRf cGx1Z2lucycpLCRtZXNzYWdlKTsKCWVjaG8gc3RhcnRUYWJsZSgnbGlzdCcpLgp0cih0ZGEo CmZvcm0oCmZJbnB1dCgndGV4dCcsJ25hbWUnLCcnLCcnLCcnLCcnLCczMCcsJzAnKQouIGZJ bnB1dCgnc3VibWl0Jywnc3VibWl0JywnY3JlYXRlIG5ldyBwbHVnaW4nLCdzbWFsbGVyYm94 JykKLiBzSW5wdXQoJ2llZF9wbHVnaW5fY3JlYXRlX25ldycpCi4gZUlucHV0KCdpZWRfcGx1 Z2luX2NvbXBvc2VyJykKKQosJyBjb2xzcGFuPSI1IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0 OjUwcHgiJykKLnRkYShmb3JtKGZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsICdTZXR1cCcs ICdwdWJsaXNoJykuc0lucHV0KCdpZWRfcGx1Z2luX3NldHVwJykuZUlucHV0KCdpZWRfcGx1 Z2luX2NvbXBvc2VyJykpLCcgY29sc3Bhbj0iNSIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1 MHB4IicpKS4KYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJywndmVyc2lvbicsJ2Rlc2NyaXB0 aW9uJywnbWFuYWdlJywnYWN0aXZlJywnJyk7CgoJJHJzID0gc2FmZV9yb3dzX3N0YXJ0KCIq IiwidHhwX3BsdWdpbiIsICIxPTEgb3JkZXIgYnkgbmFtZSIpOwoKCXdoaWxlICgkYSA9IG5l eHRSb3coJHJzKSkgewoJCWV4dHJhY3QoJGEpOwoJCSRlbGluayA9ICc8YSBocmVmPSI/ZXZl bnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2VkaXQmIzM4O25h bWU9Jy4kbmFtZS4nIj4nLmdUeHQoJ2VkaXQnKS4nPC9hPic7CgkJJGhsaW5rID0gJzxhIGhy ZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5faGVs cF92aWV3ZXImIzM4O25hbWU9Jy4kbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9hPic7CgkJ ZWNobyB0cih0ZCgkbmFtZSkKLnRkKCc8YSBocmVmPSInLiRhdXRob3JfdXJpLiciPicuJGF1 dGhvci4nPC9hPicpCi50ZCgkdmVyc2lvbiwxMCkKLnRkKCRkZXNjcmlwdGlvbiwyNjApCi50 ZChzdHJvbmcoJGVsaW5rKSAuJyAvICcuIHN0cm9uZygkaGxpbmspKQoudGQoaWVkX3N0YXR1 c19saW5rKCRzdGF0dXMsJG5hbWUseWVzX25vKCRzdGF0dXMpKSwzMCkKLnRkKGRMaW5rKCdp ZWRfcGx1Z2luX2NvbXBvc2VyJywnaWVkX3BsdWdpbl9kZWxldGUnLCduYW1lJywkbmFtZSks MzApCik7CgkJdW5zZXQoJG5hbWUsJHBhZ2UsJGRlbGV0ZWxpbmspOwoJfQoKCWlmICghZW1w dHkoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXSkpIHsKCQkkZmlsZW5h bWVzID0gYXJyYXkoKTsKCQkkZGlyID0gZGlyKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5f Y2FjaGVfZGlyJ10pOwoJCXdoaWxlICgkZmlsZSA9ICRkaXItPnJlYWQoKSkgewoJCQlpZigk ZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgewoJCQkJJGZpbGVhZGRyID0gJEdMT0JB TFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy4kZmlsZTsKCQkJCWlmICghaXNf ZGlyKCRmaWxlYWRkcikpIHsKCQkJCQkkZmlsZW5hbWVzW109JGZpbGU7CgkJCQl9CgkJCX0K CQl9CgkJJGRpci0+Y2xvc2UoKTsKCQkoJGZpbGVuYW1lcyk/bmF0Y2FzZXNvcnQoJGZpbGVu YW1lcyk6Jyc7CgkJZWNobyB0cigKCQl0ZGEoCgkJdGFnKCdQbHVnaW5zIHRoYXQgcnVuIGZy b20gJy50YWcoJ3BsdWdpbl9jYWNoZV9kaXInLCdhY3JvbnltJywnIHRpdGxlPSInLiRHTE9C QUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uJyIgc3R5bGU9ImJvcmRlci1ib3R0 b206MXB4IGRhc2hlZCBibGFjayInKS4nOicsJ2gxJykKCQksJyBjb2xzcGFuPSI3IiBzdHls ZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7dGV4dC1hbGlnbjpsZWZ0IicpCgoJCSk7CgoJCWVj aG8gYXNzSGVhZCgncGx1Z2luJywnYXV0aG9yJywndmVyc2lvbicsJ2Rlc2NyaXB0aW9uJywn bWFuYWdlJywncHVibGlzaCcsJycpOwoJCWZvcmVhY2goJGZpbGVuYW1lcyBhcyAkZmlsZW5h bWUpIHsKCQkJJGVsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2Vy JiMzODtzdGVwPWllZF9wbHVnaW5fZWRpdCYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyI+ Jy5nVHh0KCdlZGl0JykuJzwvYT4nOwoJCQkkaGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3ZpZXdlciYjMzg7 ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyI+Jy5nVHh0KCdoZWxwJykuJzwvYT4nOwoKCQkJJGZp bGVleHQ9IGFycmF5X3BvcChleHBsb2RlICgnLicsJGZpbGVuYW1lKSk7CgkJCWlmICgkZmls ZWV4dD09J3BocCcpIHsKCQkJCSRiYXNlbmFtZT1iYXNlbmFtZSgkZmlsZW5hbWUpOwoJCQkJ JHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVn aW5fY2FjaGVfZGlyJ10uRFMuJGZpbGVuYW1lKTsKCgkJCQllY2hvIHRyKAoJCQkJdGQoCgkJ CQl0YWcoJGZpbGVuYW1lLCdkaXYnLCcgc3R5bGU9ImNvbG9yOmdyYXk7Ym9yZGVyOjBweCBz b2xpZCBncmF5O3BhZGRpbmc6MXB4IDJweCAycHggMXB4OyInKQoJCQkJLihpc3NldCgkcGx1 Z2luWyduYW1lJ10pPyRwbHVnaW5bJ25hbWUnXS4nPGJyIC8+JzonJykuJyAnCgkJCQkpCgkJ CQkudGQoCgkJCQkoIGlzc2V0KCRwbHVnaW5bJ2F1dGhvcl91cmknXSk/JzxhIGhyZWY9Iicu JHBsdWdpblsnYXV0aG9yX3VyaSddLiciPic6JycgKSAuCgkJCQkoIGlzc2V0KCRwbHVnaW5b J2F1dGhvciddKT8kcGx1Z2luWydhdXRob3InXTonJm5ic3A7JyApLgoJCQkJKCBpc3NldCgk cGx1Z2luWydhdXRob3JfdXJpJ10pPyc8L2E+JzonJyApCgkJCQkpCgkJCQkudGQoKGlzc2V0 KCRwbHVnaW5bJ3ZlcnNpb24nXSk/JHBsdWdpblsndmVyc2lvbiddOicmbmJzcDsnKSwxMCkK CQkJCS50ZCgoaXNzZXQoJHBsdWdpblsnZGVzY3JpcHRpb24nXSk/JHBsdWdpblsnZGVzY3Jp cHRpb24nXTonJm5ic3A7JyksMjYwKQoJCQkJLnRkKHN0cm9uZygkZWxpbmspIC4nIC8gJy4g c3Ryb25nKCRobGluaykpCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ25hbWUnXSk/CgkJCQl0 YWcoZ1R4dCgncHVibGlzaCcpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRm aWxlbmFtZS4nIiB0aXRsZT0ic2F2ZSBhcyAnIC4gJHBsdWdpblsnbmFtZSddLidfdicuJHBs dWdpblsndmVyc2lvbiddLiAnLnR4dCInKQoJCQkJCQkudGFnKCcgW3ppcF0nLCdhJywnIGhy ZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2 ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nJiMzODt6aXA9dHJ1ZSIgdGl0 bGU9InNhdmUgYXMgJyAuICRwbHVnaW5bJ25hbWUnXS4nX3YnLiRwbHVnaW5bJ3ZlcnNpb24n XS4gJ196aXAudHh0IicpOgoJCQkJdGFnKCcmbmJzcDsnLCdzcGFuJywnIHN0eWxlPSJjb2xv cjpncmF5IicpCgkJCQkpKQoJCQkJLnRkKCcnKQoJCQkJKTsKCQkJfQoJCX0KCX0KCgllY2hv IHRyKAp0ZGEoCic8Zm9ybSBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBhY3Rpb249 ImluZGV4LnBocCIgbWV0aG9kPSJwb3N0Ij4nLgpzdGFydFRhYmxlKCdlZGl0JywnbGVmdCcp Lgp0cih0ZGEoIGhJbnB1dCgnTUFYX0ZJTEVfU0laRScsMTAwMDAwMCkuCmdyYWYoJ1VwbG9h ZCBwbHVnaW4gZnJvbSBwaHAgZmlsZScuJzogJy4KZklucHV0KCdmaWxlJywndGhlZmlsZScs JycsJ2VkaXQnKS4KZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLGdUeHQoJ3VwbG9hZCcpLCdz bWFsbGVyYm94JykpLgplSW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKS4Kc0lucHV0KCdp ZWRfcGx1Z2luX3VwbG9hZCcpICwgJyBzdHlsZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5Iicg KS4KdGRhKCB0YWcoJ25hbWUnLCdhY3JvbnltJywnIHRpdGxlPSJuZWVkZWQgb25seSBpZiB0 aGUgcGhwIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgZG9lcyBub3QgY29udGFpbiBtZXRhZGF0 YSIgc3R5bGU9ImJvcmRlci1ib3R0b206MXB4IGRhc2hlZCBibGFjayInKS4nOiAnLiBmSW5w dXQoJ3RleHQnLCduYW1lJywneHh4X3h4eHh4eCcsJycsJycsJycsJzMwJywnMCcpICwgJyBz dHlsZT0iYm9yZGVyOjBweCBzb2xpZCBncmF5O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsiJyAp KS4KZW5kVGFibGUoKS4KJzwvZm9ybT4nCiwnIGNvbHNwYW49IjYiIHN0eWxlPSJib3JkZXI6 MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykKKTsKCWVjaG8gZW5kVGFibGUoKTsK fQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfc3RhdHVzX2xpbmsoJHN0YXR1cywkbmFtZSwk bGlua3RleHQpIHsKCSRvdXQgPSAnPGEgaHJlZj0iaW5kZXgucGhwPyc7Cgkkb3V0IC49ICdl dmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9zd2l0Y2hfc3RhdHVzJiMz ODtzdGF0dXM9Jy4KCSRzdGF0dXMuJyYjMzg7bmFtZT0nLnVybGVuY29kZSgkbmFtZSkuJyIn OwoJJG91dCAuPSAnPicuJGxpbmt0ZXh0Lic8L2E+JzsKCXJldHVybiAkb3V0Owp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmZ1bmN0aW9uIGllZF9zd2l0Y2hfc3RhdHVzKCkgewoJZXh0cmFjdChncHNhKGFy cmF5KCduYW1lJywnc3RhdHVzJykpKTsKCSRjaGFuZ2UgPSAoJHN0YXR1cykgPyAwIDogMTsK CXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwgInN0YXR1cz0kY2hhbmdlIiwgIm5hbWU9JyRu YW1lJyIpOwoJaWVkX3BsdWdpbl9saXN0KG1lc3NlbmdlcigncGx1Z2luJywkbmFtZSwndXBk YXRlZCcpKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2RlbGV0ZSgpIHsK CSRuYW1lID0gZG9TbGFzaChwcygnbmFtZScpKTsKCXNhZmVfZGVsZXRlKCJ0eHBfcGx1Z2lu IiwibmFtZT0nJG5hbWUnIik7CglpZWRfcGx1Z2luX2xpc3QobWVzc2VuZ2VyKCdwbHVnaW4n LCRuYW1lLCdkZWxldGVkJykpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5f ZWRpdCgkbWVzc2FnZT0nJykgewoJJHNpdGVfZGlyID0gaHU7CgkkbmFtZSA9IGdwcygnbmV3 bmFtZScpP2dwcygnbmV3bmFtZScpOmdwcygnbmFtZScpOwoJcGFnZXRvcChnVHh0KCdlZGl0 X3BsdWdpbnMnKSwkbWVzc2FnZSk7CgllY2hvIGllZF9pbnNlcnRfZWRpdG9ycygpOwoJZWNo byBpZWRfcGx1Z2luX2VkaXRfZm9ybSgoZ3BzKCdmaWxlbmFtZScpKT9ncHMoJ2ZpbGVuYW1l Jyk6JG5hbWUsIGdwcygnZmlsZW5hbWUnKT8gMTogMCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rp b24gaWVkX3BsdWdpbl9lZGl0X2Zvcm0oJG5hbWU9JycsJGVkaXRmaWxlPTApIHsKCWlmICgh JGVkaXRmaWxlKSB7CgkJJGF1dGhvciA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0aG9yJywndHhw X3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRhdXRob3JfdXJpID0gKCRuYW1lKSA/ IGZldGNoKCdhdXRob3JfdXJpJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJ CSR2ZXJzaW9uID0gKCRuYW1lKSA/IGZldGNoKCd2ZXJzaW9uJywndHhwX3BsdWdpbicsJ25h bWUnLCRuYW1lKSA6ICcnOwoJCSRkZXNjcmlwdGlvbiA9ICgkbmFtZSkgPyBmZXRjaCgnZGVz Y3JpcHRpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGNvZGUgPSAo JG5hbWUpID8gZmV0Y2goJ2NvZGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7 CgkJJGhlbHAgPSAoJG5hbWUpID8gZmV0Y2goJ2hlbHAnLCd0eHBfcGx1Z2luJywnbmFtZScs JG5hbWUpIDogJyc7CgkJJHN0YXR1cyA9ICgkbmFtZSkgPyBmZXRjaCgnc3RhdHVzJywndHhw X3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSR0eXBlID0gKCRuYW1lKSA/IGZldGNo KCd0eXBlJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCWxpc3QoJGNzcywk aGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1Mi LCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsKCX0gZWxzZSB7CgkJJHBs dWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5f Y2FjaGVfZGlyJ10uRFMuJG5hbWUpOwoJCSRmaWxlbmFtZT0kbmFtZTsKCQkkZmlsZWV4dD0g YXJyYXlfcG9wKCRuYW1lPWV4cGxvZGUgKCcuJywkbmFtZSkpOwoJCSRuYW1lPWltcGxvZGUo JG5hbWUpOwoJCWV4dHJhY3QgKCRwbHVnaW4pOyAvLyBjb2RlLCBoZWxwLCBjc3MsIG5hbWUs IHZlcnNpb24sIHR5cGUsIGRlc2NyaXB0aW9uLCBhdXRob3IsIGF1dGhvcl91cmkKCQkkc3Rh dHVzPSAoJGZpbGVleHQ9PSdwaHAnKT8gMTogMDsKCX0KCSRwbHVnaW5bJ25hbWUnXSA9ICRu YW1lOwoJJHBsdWdpblsnYXV0aG9yJ10gPSAkYXV0aG9yOwoJJHBsdWdpblsnYXV0aG9yX3Vy aSddID0gJGF1dGhvcl91cmk7CgkkcGx1Z2luWyd2ZXJzaW9uJ10gPSAkdmVyc2lvbjsKCSRw bHVnaW5bJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzY3JpcHRpb247CgkkcGx1Z2luWydoZWxwJ10g PSAkaGVscDsKCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwoJJHBsdWdpblsndHlwZSddID0g JHR5cGU7CgkkcGx1Z2luWydtZDUnXSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7CgoJJGRp c3RyaWJ1dGlvbj0nPHRleHRhcmVhIG5hbWU9ImRpc3RyaWJ1dGlvbiIgcm93cz0iMSIgY29s cz0iOTAiIG9uY2xpY2s9InRoaXMuc2VsZWN0KCkiPicuYmFzZTY0X2VuY29kZShzZXJpYWxp emUoJHBsdWdpbikpLic8L3RleHRhcmVhPic7CgoJJG5hbWVkTGluayA9IChpc3NldCgkZmls ZW5hbWUpKSA/ICdmaWxlbmFtZT0nLiRmaWxlbmFtZSA6ICduYW1lPScuJG5hbWU7CgkkbmFt ZWRGaWxlID0gKGlzc2V0KCRmaWxlbmFtZSkpID8gJGZpbGVuYW1lIDogJG5hbWUuJ192Jy4k dmVyc2lvbi4nLnBocCc7CgkkbmFtZWRGaWxlTm9FeHQgPSBwcmVnX3JlcGxhY2UoJy8oLisp XC4uKiQvJywgJyQxJywgJG5hbWVkRmlsZSk7CgoJJHNsaW5rID0gJzxhIGhyZWY9Ij9ldmVu dD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9hc19maWxl JiMzODsnLiRuYW1lZExpbmsuJyI+c2F2ZSBhcyAnIC4kbmFtZWRGaWxlTm9FeHQuICcudHh0 PC9hPic7Cgkkc3ppcGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9z ZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4OycuJG5hbWVkTGluay4n JiMzODt6aXA9dHJ1ZSI+c2F2ZSBhcyAnIC4kbmFtZWRGaWxlTm9FeHQuICcudHh0IChjb21w cmVzc2VkKTwvYT4nOwoJJHNwaHBsaW5rID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2lu X2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9hc19waHBfZmlsZSYjMzg7Jy4k bmFtZWRMaW5rLiciPnNhdmUgYXMgJyAuICRuYW1lZEZpbGUuICc8L2E+JzsKCSR2aGVscGxp bmtmdWxsID0gJzxhIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVw PWllZF9wbHVnaW5faGVscF92aWV3ZXImIzM4OycuJG5hbWVkTGluay4nIj5bICcuc3Ryb25n KGdUeHQoJ3ZpZXcnKS4nICcuZ1R4dCgnaGVscCcpKS4nIF08L2E+JzsKCgkkbmV3bmFtZSA9 ZklucHV0KCd0ZXh0JywnbmV3bmFtZScsJG5hbWUsJ2VkaXQnLCc3OCcsJycsJzkwJywnMicp OwoJJGF1dGhvciA9ZklucHV0KCd0ZXh0JywnYXV0aG9yJywkYXV0aG9yLCdlZGl0JywnNzgn LCcnLCc5MCcsJzInKTsKCSRhdXRob3JfdXJpID1mSW5wdXQoJ3RleHQnLCdhdXRob3JfdXJp JywkYXV0aG9yX3VyaSwnZWRpdCcsJzc4JywnJywnOTAnLCcyJyk7CgkkdmVyc2lvbiA9Zklu cHV0KCd0ZXh0JywndmVyc2lvbicsJHZlcnNpb24sJ2VkaXQnLCc3OCcsJycsJzkwJywnMicp OwoJJGRlc2NyaXB0aW9uID1mSW5wdXQoJ3RleHQnLCdkZXNjcmlwdGlvbicsJGRlc2NyaXB0 aW9uLCdlZGl0JywnNzgnLCcnLCc5MCcsJzInKTsKCSRjb2RlID0gJzx0ZXh0YXJlYSBuYW1l PSJjb2RlIiBpZD0icGx1Z2luX2VkaXRvciIgcm93cz0iMzAiIGNvbHM9IjkwIiBjbGFzcz0i Y29kZXByZXNzIHBocCI+Jy5odG1sZW50aXRpZXModXRmOF9kZWNvZGUoJGNvZGUpKS4nPC90 ZXh0YXJlYT4nOwoJJGhlbHAgPSAnPHRleHRhcmVhIG5hbWU9ImhlbHAiIHJvd3M9IjMwIiBj b2xzPSI5MCIgY2xhc3M9Im1jZUVkaXRvciI+Jy5odG1sZW50aXRpZXModXRmOF9kZWNvZGUo JGhlbHApKS4nPC90ZXh0YXJlYT4nOwoJJGNzcyA9ICc8dGV4dGFyZWEgbmFtZT0iY3NzIiBy b3dzPSIxNSIgY29scz0iOTAiPicudXRmOF9kZWNvZGUoJGNzcykuJzwvdGV4dGFyZWE+JzsK CSRwcmVmcyA9ICgoISRlZGl0ZmlsZSk/Y2hlY2tib3goJ3N0YXR1cycsMSwkc3RhdHVzKS4g JyA8bGFiZWwgZm9yPSJzdGF0dXMiPmVuYWJsZSBwbHVnaW48L2xhYmVsPic6JycpIC4gJyA8 bGFiZWwgZm9yPSJ0eXBlIj4mIzE2MDsmIzE2MDsmIzE2MDtQbHVnaW4gdHlwZTo8L2xhYmVs PicuIHJhZGlvKCd0eXBlJywwLCgoJHR5cGU9PTApPzE6MCkpLiJDbGllbnQgIiAuIHJhZGlv KCd0eXBlJywxLCgoJHR5cGU9PTEpPzE6MCkpLiJBZG1pbiAiIC4gcmFkaW8oJ3R5cGUnLDIs KCgkdHlwZT09Mik/MTowKSkuIkxpYnJhcnkiOwoKCSRzdWIgPSBmSW5wdXQoJ3N1Ym1pdCcs JycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJyk7CglyZXR1cm4gZm9ybShzdGFydFRhYmxlKCdl ZGl0JykKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHN1YiAuICR2aGVscGxp bmtmdWxsKSkKCS4gKCAoaXNzZXQoJGZpbGVuYW1lKSk/IHRyKCBmTGFiZWxDZWxsKCcmbmJz cDsnKSAuIHRkKCRmaWxlbmFtZS5oSW5wdXQoJ2ZpbGVuYW1lJywkZmlsZW5hbWUpKSkgOiAn JyApCgkuIHRyKCBmTGFiZWxDZWxsKCAncGx1Z2luJyApIC4gdGQoJG5ld25hbWUpKQoJLiB0 ciggZkxhYmVsQ2VsbCggJ3BsdWdpbicgKSAuIHRkKCRjb2RlKSkKCS4gdHIoIGZMYWJlbENl bGwoICdwcmVmcycgKSAuIHRkKCRwcmVmcykpCgoJLiB0ciggZkxhYmVsQ2VsbCggJ3ZlcnNp b24nICkgLiB0ZCgkdmVyc2lvbikpCgkuIHRyKCBmTGFiZWxDZWxsKCAnYXV0aG9yJyApIC4g dGQoJGF1dGhvcikpCgkuIHRyKCBmTGFiZWxDZWxsKCAnd2Vic2l0ZScgKSAuIHRkKCRhdXRo b3JfdXJpKSkKCS4gdHIoIGZMYWJlbENlbGwoICdkZXNjcmlwdGlvbicgKSAuIHRkKCRkZXNj cmlwdGlvbikpCgkuIHRyKCB0ZGEoZ1R4dCgncGx1Z2luX2hlbHAnKSwgJyBjbGFzcz0ibm9s aW5lIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7 IicpIC4gdGQoJGhlbHApKQoJLiB0ciggZkxhYmVsQ2VsbCggJ2NzcycgKSAuIHRkKCRjc3Mp KQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ViKSkKCgkuIHRyKCB0ZGNz KCc8aHI+JywyKSkKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJ1V0aWxpdGll cyAoPHN0cm9uZz51c2Ugb25seSBhZnRlciBzYXZpbmcgdGhlIGRhdGEgYWJvdmU8L3N0cm9u Zz4pOicpKQoKCS4gdHIoIGZMYWJlbENlbGwoICdwbHVnaW4gY29kZTxicj5mb3IgZGlzdHJp YnV0aW9uJyApIC4gdGQoJGRpc3RyaWJ1dGlvbikpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJz cDsnKSAuIHRkKCRzbGluaykpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRz emlwbGluaykpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzcGhwbGluaykp CgkuIGVuZFRhYmxlKCkKCS4gc0lucHV0KCdpZWRfcGx1Z2luX3NhdmUnKQoJLiBlSW5wdXQo J2llZF9wbHVnaW5fY29tcG9zZXInKQoJLiBoSW5wdXQoJ25hbWUnLCRuYW1lKSk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zYXZlKCkgewoJZ2xvYmFsICRpZWRfcGx1 Z2luX2dsb2JhbHM7CglleHRyYWN0KGRvU2xhc2goZ3BzYShhcnJheSgnbmFtZScsJ25ld25h bWUnLCdmaWxlbmFtZScsJ2NvZGUnLCdhdXRob3InLCdhdXRob3JfdXJpJywndmVyc2lvbics J2Rlc2NyaXB0aW9uJywnaGVscCcsJ2NzcycsJ3N0YXR1cycsJ3R5cGUnKSkpKTsKCWxpc3Qg KCRzdGFydF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1Mi LCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFs c1snY3NzX2VuZCddKTsKCglpZiAoZW1wdHkoJGZpbGVuYW1lKSkgewoJCXNhZmVfdXBkYXRl KCJ0eHBfcGx1Z2luIiwibmFtZT0nJG5ld25hbWUnIiwgIm5hbWU9JyRuYW1lJyIpOwoJCXNh ZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiY29kZT0nJGNvZGUnIiwgIm5hbWU9JyRuZXduYW1l JyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiYXV0aG9yPSckYXV0aG9yJyIsICJu YW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImF1dGhvcl91 cmk9JyRhdXRob3JfdXJpJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgi dHhwX3BsdWdpbiIsInZlcnNpb249JyR2ZXJzaW9uJyIsICJuYW1lPSckbmV3bmFtZSciKTsK CQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImRlc2NyaXB0aW9uPSckZGVzY3JpcHRpb24n IiwgIm5hbWU9JyRuZXduYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwiaGVs cD0nIi4kaGVscC4oKCRjc3MpID8gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzOicn KS4iJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIs InN0YXR1cz0nJHN0YXR1cyciLCAibmFtZT0nJG5ld25hbWUnIik7CgkJc2FmZV91cGRhdGUo InR4cF9wbHVnaW4iLCJ0eXBlPSckdHlwZSciLCAibmFtZT0nJG5ld25hbWUnIik7Cgl9IGVs c2UgewoJCSRmaWxlY29udGVudCA9IGZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9j YWNoZV9kaXInXS5EUy4kZmlsZW5hbWUpOwoJCSRmaWxlY29udGVudCA9IGllZF9wbHVnaW5f bWFrZV9hcnJheSgkZmlsZWNvbnRlbnQpOwoJCSRtZXRhdmFycyA9IGFycmF5KCJuYW1lIiA9 PiAiJG5ld25hbWUiLAoJCQkJCQkJCSJ2ZXJzaW9uIiA9PiAiJHZlcnNpb24iLAoJCQkJCQkJ CSJhdXRob3IiID0+ICIkYXV0aG9yIiwKCQkJCQkJCQkiYXV0aG9yX3VyaSIgPT4gIiRhdXRo b3JfdXJpIiwKCQkJCQkJCQkiZGVzY3JpcHRpb24iID0+ICIkZGVzY3JpcHRpb24iLAoJCQkJ CQkJCSJ0eXBlIiA9PiAiJHR5cGUiCgkJCQkJCSk7CgkJJGh1bmt2YXJzID0gYXJyYXkoIkNT UyIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRjc3MpKSwKCQkJCQkJCQki SEVMUCIgPT4gZG9TdHJpcChzdHJfcmVwbGFjZSgnXHJcbicsJwonLCRoZWxwKSksCgkJCQkJ CQkJIkNPREUiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywkY29kZSkpLCAv LyB3b3JrYXJvdW5kCgkJCQkJCSk7CgkJZm9yZWFjaCAoJG1ldGF2YXJzIGFzICR2YXJuYW1l ID0+ICR2YWx1ZSkgewoJCQlmb3IoJGlkeCA9IDA7ICRpZHggPCBjb3VudCgkZmlsZWNvbnRl bnQpOyAkaWR4KyspIHsKCQkJCWlmIChzdHJwb3MoJGZpbGVjb250ZW50WyRpZHhdLCAnJHBs dWdpbltcJycuJHZhcm5hbWUuJ1wnXScpID09PSAwKSB7CgkJCQkJJGZpbGVjb250ZW50WyRp ZHhdID0gJyRwbHVnaW5bXCcnLiR2YXJuYW1lLidcJ10gPSAnLmRvUXVvdGUoJHZhbHVlKS4n Oyc7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgkJZm9yZWFjaCAoJGh1bmt2YXJzIGFz ICR2YXJuYW1lID0+ICRodW5rKSB7CgkJCWxpc3QgKCRzdGFydF9kZWxpbSwgJGVuZF9kZWxp bSkgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygkdmFybmFtZSwgJGllZF9wbHVnaW5fZ2xv YmFsc1snZGxtX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2RsbV9lbmQnXSk7CgkJ CSRzdGFydCA9IGFycmF5X3NlYXJjaCgkc3RhcnRfZGVsaW0sICRmaWxlY29udGVudCkgKyAx OwoJCQkkZW5kID0gYXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRmaWxlY29udGVudCk7CgkJ CWFycmF5X3NwbGljZSgkZmlsZWNvbnRlbnQsICRzdGFydCwgJGVuZC0kc3RhcnQsICRodW5r KTsKCQl9CgkJJGZpbGVjb250ZW50ID0gaW1wbG9kZSgiXG4iLCAkZmlsZWNvbnRlbnQpOwoJ CSRmaCA9IGZvcGVuKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMu JGZpbGVuYW1lLCAndysnKTsKCQlmd3JpdGUoJGZoLCAkZmlsZWNvbnRlbnQpOwoJCWZjbG9z ZSgkZmgpOwoJfQoJLy8gQ2hlY2sgdGhlIHBsdWdpbiB0eXBlIG1hdGNoZXMgdGhlIGNvZGUg dXNlZAoJJGV4dHJhTXNnID0gKGllZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNvZGUsICR0eXBl KSkgPyAnJyA6IHN0cm9uZyhpZWRfcGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fY2hlY2tfdHlw ZScpKTsKCSRtZXNzYWdlID0gbWVzc2VuZ2VyKCdwbHVnaW4nLCRuZXduYW1lLCdzYXZlZCcp LmJyLiRleHRyYU1zZzsKCWllZF9wbHVnaW5fZWRpdCgkbWVzc2FnZSk7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9jcmVhdGVfbmV3KCkgewoJZXh0cmFjdChkb1NsYXNo KGdwc2EoYXJyYXkoJ25hbWUnKSkpKTsKCWlmICgkbmFtZT09JycpIHsKCQlpZWRfcGx1Z2lu X2xpc3QoJ1lvdSBhcmUgc3VwcG9zZWQgdG8gbmFtZSB0aGUgbmV3IHBsdWdpbiA7KScpOwoJ CXJldHVybjsKCX0KCSRleGlzdHMgPSBmZXRjaCgnbmFtZScsJ3R4cF9wbHVnaW4nLCduYW1l JywkbmFtZSk7CglpZiAoISRleGlzdHMpIHsKCQlzYWZlX2luc2VydCgidHhwX3BsdWdpbiIs ICIKCQkJbmFtZT0nJG5hbWUnLAoJCQlzdGF0dXM9JzAnLAoJCQl0eXBlPScwJywKCQkJdmVy c2lvbj0nMC4xJwoJCSIpOwoJCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksICdlZGl0 IHlvdXIgbmV3IHBsdWdpbicpOwoJCWVjaG8gaWVkX3BsdWdpbl9lZGl0X2Zvcm0oJG5hbWUp OwoJfSBlbHNlIHsKCQlpZWRfcGx1Z2luX2xpc3QoZ1R4dCgncGx1Z2luJykuJyA8c3Ryb25n PicuJG5hbWUuJzwvc3Ryb25nPiAnLmdUeHQoJ2FscmVhZHlfZXhpc3RzJykpOwoJfQp9Cgov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZV9hc19maWxlKCkgewoJZ2xvYmFs ICRpZWRfcGx1Z2luX2dsb2JhbHM7CglpZiAoZ3BzKCduYW1lJykpIHsKCQkkbmFtZSA9IGdw cygnbmFtZScpOwoJCSRkZXNjcmlwdGlvbiA9ICgkbmFtZSkgPyBmZXRjaCgnZGVzY3JpcHRp b24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGF1dGhvciA9ICgkbmFt ZSkgPyBmZXRjaCgnYXV0aG9yJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJ CSRhdXRob3JfdXJpID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3JfdXJpJywndHhwX3BsdWdp bicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSR2ZXJzaW9uID0gKCRuYW1lKSA/IGZldGNoKCd2 ZXJzaW9uJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRjb2RlID0gKCRu YW1lKSA/IGZldGNoKCdjb2RlJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJ CSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3BsdWdpbicsJ25hbWUnLCRu YW1lKSA6ICcnOwoJCSR0eXBlID0gKCRuYW1lKSA/IGZldGNoKCd0eXBlJywndHhwX3BsdWdp bicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8g aWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVl KSA6IGFycmF5KCcnLCRoZWxwKTsKCX0gZWxzZWlmIChncHMoJ2ZpbGVuYW1lJykpIHsKCQkk cGx1Z2luPWllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5f Y2FjaGVfZGlyJ10uRFMuZ3BzKCdmaWxlbmFtZScpKTsKCQlleHRyYWN0KCRwbHVnaW4pOwoJ fQoJJHppcCA9IGdwcygnemlwJyk7CglpZiAoZ3BzKCd0cmltJyk9PTEpIHsKCQkkY29kZT1l eHBsb2RlKCJcclxuIiwkY29kZSk7CgkJJGNvZGU9YXJyYXlfbWFwKCd0cmltJywkY29kZSk7 CgkJJGNvZGU9aW1wbG9kZSgiXHJcbiIsJGNvZGUpOwoJfQoKCWxpc3QgKCRzdGFydF9jc3Ms ICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdp bl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCdd KTsKCgloZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbiIpOwoJaGVhZGVyKCdDb250 ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iJyAuICRuYW1lLidfdicu JHZlcnNpb24uICgoJHppcCk/J196aXAnOicnKSAuICcudHh0Jyk7CgoJJHR5cGVzID0gYXJy YXkoICdDbGllbnQgc2lkZScgLCAnQWRtaW4vQ2xpZW50IHNpZGUnICwgJ0xpYnJhcnknICk7 CgkkcGx1Z2luWyduYW1lJ10gPSAkbmFtZTsKCSRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhv cjsKCSRwbHVnaW5bJ2F1dGhvcl91cmknXSA9ICRhdXRob3JfdXJpOwoJJHBsdWdpblsndmVy c2lvbiddID0gJHZlcnNpb247CgkkcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0 aW9uOwoJJHBsdWdpblsnY29kZSddID0gJGNvZGU7CgkkcGx1Z2luWyd0eXBlJ10gPSAkdHlw ZTsKLy8JJHBsdWdpblsnYWxsb3dfaHRtbF9oZWxwJ10gPSB0cnVlOwovLwkkcGx1Z2luWydo ZWxwX3JhdyddID0gJGhlbHAuJHN0YXJ0X2Nzcy4kY3NzLiRlbmRfY3NzOwoJJHBsdWdpblsn aGVscCddID0gaWVkX3BsdWdpbl90ZXh0aWxlKCRoZWxwLCAkY3NzLCAkc3RhcnRfY3NzLCAk ZW5kX2Nzcyk7CgkkcGx1Z2luWydtZDUnXSA9IG1kNSggJHBsdWdpblsnY29kZSddICk7CgoJ ZWNobyAnIyBOYW1lOiAnLiRuYW1lLicgdicuJHZlcnNpb24uJyAnLigoJHppcCkgPyAiKGNv bXByZXNzZWQpIiA6ICIiKS4nCiMgVHlwZTogJy4kdHlwZXNbJHR5cGVdLicgcGx1Z2luCiMg Jy4kZGVzY3JpcHRpb24uJwojIEF1dGhvcjogJy4kYXV0aG9yLicKIyBVUkw6ICcuJGF1dGhv cl91cmkuJwoKIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIyBUaGlzIGlzIGEgcGx1Z2luIGZvciBUZXh0 cGF0dGVybiAtIGh0dHA6Ly90ZXh0cGF0dGVybi5jb20vCiMgVG8gaW5zdGFsbDogdGV4dHBh dHRlcm4gPiBhZG1pbiA+IHBsdWdpbnMKIyBQYXN0ZSB0aGUgZm9sbG93aW5nIHRleHQgaW50 byB0aGUgXCdJbnN0YWxsIHBsdWdpblwnIGJveDoKIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KCicuKCgk emlwKSA/IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoZ3plbmNvZGUoc2VyaWFsaXplKCRw bHVnaW4pKSksIDcyKSA6IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRw bHVnaW4pKSwgNzIpKTsKCglkaWUoKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1 Z2luX3NhdmVfYXNfcGhwX2ZpbGUoKSB7CglnbG9iYWwgJHByZWZzOwoJaWYgKGdwcygnbmFt ZScpKSB7CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsKCQkkZGVzY3JpcHRpb24gPSAoJG5hbWUp ID8gZmV0Y2goJ2Rlc2NyaXB0aW9uJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcn OwoJCSRhdXRob3IgPSAoJG5hbWUpID8gZmV0Y2goJ2F1dGhvcicsJ3R4cF9wbHVnaW4nLCdu YW1lJywkbmFtZSkgOiAnJzsKCQkkYXV0aG9yX3VyaSA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0 aG9yX3VyaScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkdmVyc2lvbiA9 ICgkbmFtZSkgPyBmZXRjaCgndmVyc2lvbicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkg OiAnJzsKCQkkY29kZSA9ICgkbmFtZSkgPyBmZXRjaCgnY29kZScsJ3R4cF9wbHVnaW4nLCdu YW1lJywkbmFtZSkgOiAnJzsKCQkkaGVscCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVscCcsJ3R4 cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkdHlwZSA9ICgkbmFtZSkgPyBmZXRj aCgndHlwZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQlsaXN0KCRjc3Ms JGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NT IiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9IGVsc2VpZiAoZ3Bz KCdmaWxlbmFtZScpKSB7CgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFM U1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLmdwcygnZmlsZW5hbWUnKSk7CgkJ ZXh0cmFjdCgkcGx1Z2luKTsKCX0KCgkkb3JkZXIgPSAoaXNzZXQoJHByZWZzWydpZWRfcGx1 Z2luX291dHB1dF9vcmRlciddKSAmJiBpc19udW1lcmljKCRwcmVmc1snaWVkX3BsdWdpbl9v dXRwdXRfb3JkZXInXSkpID8gJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9vcmRlciddIDog MDsKCgloZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9waHAiKTsKCWhlYWRlcignQ29udGVu dC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicgLiAkbmFtZS4nX3YnLiR2 ZXJzaW9uLiAnLnBocCcpOwoKCSRoZWxwY2h1bmsgPSAnaWYgKDApIHsnLm4KLic/Picubgou JzwhLS0nLm4KLicjIC0tLSBCRUdJTiBQTFVHSU4gQ1NTIC0tLScubgouJGNzcy5uCi4nIyAt LS0gRU5EIFBMVUdJTiBDU1MgLS0tJy5uCi4nLS0+Jy5uCi4nPCEtLScubgouJyMgLS0tIEJF R0lOIFBMVUdJTiBIRUxQIC0tLScubgouJGhlbHAubgouJyMgLS0tIEVORCBQTFVHSU4gSEVM UCAtLS0nLm4KLictLT4nLm4KLic8P3BocCcubgouJ30nLm47CgoJJGNvZGVjaHVuayA9ICcj IC0tLSBCRUdJTiBQTFVHSU4gQ09ERSAtLS0nLm4KLiRjb2RlLm4KLicjIC0tLSBFTkQgUExV R0lOIENPREUgLS0tJy5uOwoKCWVjaG8gJzw/cGhwJy5uCi4nLy8gVGhpcyBpcyBhIFBMVUdJ TiBURU1QTEFURS4nLm4KLicvLyBDb3B5IHRoaXMgZmlsZSB0byBhIG5ldyBuYW1lIGxpa2Ug YWJjX215cGx1Z2luLnBocC4gIEVkaXQgdGhlIGNvZGUsIHRoZW4nLm4KLicvLyBydW4gdGhp cyBmaWxlIGF0IHRoZSBjb21tYW5kIGxpbmUgdG8gcHJvZHVjZSBhIHBsdWdpbiBmb3IgZGlz dHJpYnV0aW9uOicubgouJy8vICQgcGhwIGFiY19teXBsdWdpbi5waHAgPiBhYmNfbXlwbHVn aW4tMC4xLnR4dCcubgoubgouJy8vIFBsdWdpbiBuYW1lIGlzIG9wdGlvbmFsLiAgSWYgdW5z ZXQsIGl0IHdpbGwgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGN1cnJlbnQnLm4KLicvLyBmaWxl IG5hbWUuIFVuY29tbWVudCBhbmQgZWRpdCB0aGlzIGxpbmUgdG8gb3ZlcnJpZGU6Jy5uCi4n JHBsdWdpbltcJ25hbWVcJ10gPSAnLmRvUXVvdGUoJG5hbWUpLic7Jy5uCi4nJHBsdWdpbltc J3ZlcnNpb25cJ10gPSAnLmRvUXVvdGUoJHZlcnNpb24pLic7Jy5uCi4nJHBsdWdpbltcJ2F1 dGhvclwnXSA9ICcuZG9RdW90ZSgkYXV0aG9yKS4nOycubgouJyRwbHVnaW5bXCdhdXRob3Jf dXJpXCddID0gJy5kb1F1b3RlKCRhdXRob3JfdXJpKS4nOycubgouJyRwbHVnaW5bXCdkZXNj cmlwdGlvblwnXSA9ICcuZG9RdW90ZSgkZGVzY3JpcHRpb24pLic7Jy5uCi5uCi4nLy8gUGx1 Z2luIHR5cGVzOicubgouJy8vIDAgPSByZWd1bGFyIHBsdWdpbjsgbG9hZGVkIG9uIHRoZSBw dWJsaWMgd2ViIHNpZGUgb25seScubgouJy8vIDEgPSBhZG1pbiBwbHVnaW47IGxvYWRlZCBv biBib3RoIHRoZSBwdWJsaWMgYW5kIGFkbWluIHNpZGUnLm4KLicvLyAyID0gbGlicmFyeTsg bG9hZGVkIG9ubHkgd2hlbiBpbmNsdWRlX3BsdWdpbigpIG9yIHJlcXVpcmVfcGx1Z2luKCkg aXMgY2FsbGVkJy5uCi4nJHBsdWdpbltcJ3R5cGVcJ10gPSAnLmRvUXVvdGUoJHR5cGUpLic7 Jy5uCi5uCi4nQGluY2x1ZGVfb25jZShcJ3plbV90cGwucGhwXCcpOycubgoubgouKCgkb3Jk ZXIgPT0gMCkgPyAkY29kZWNodW5rIDogJGhlbHBjaHVuaykKLigoJG9yZGVyID09IDEpID8g JGNvZGVjaHVuayA6ICRoZWxwY2h1bmspCi4nPz4nOwoJZGllKCk7Cn0KCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ZnVuY3Rpb24gaWVkX3BsdWdpbl91cGxvYWQoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fZ2xv YmFsczsKCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFrZV9t YXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGllZF9w bHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCglpZiAoISRfRklMRVNbJ3RoZWZpbGUnXVsn dG1wX25hbWUnXSkgewoJCWllZF9wbHVnaW5fbGlzdCgnWW91IGFyZSBzdXBwb3NlZCB0byBj aG9vc2UgdGhlIGZpbGUgOyknKTtyZXR1cm47Cgl9CgkkcGx1Z2luID0gaWVkX3BsdWdpbl9y ZWFkX2ZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKTsKCSRuZXduYW1lID0g KGVtcHR5KCRwbHVnaW5bJ25hbWUnXSkpID8gYmFzZW5hbWUoJF9GSUxFU1sndGhlZmlsZSdd WyduYW1lJ10sICcucGhwJykgOiAkcGx1Z2luWyduYW1lJ107CglpZiAoZ3BzKCduYW1lJykg YW5kIGdwcygnbmFtZScpIT0neHh4X3h4eHh4eCcpIHsKCQkkbmV3bmFtZT1ncHMoJ25hbWUn KTsKCX0KCWlmIChlbXB0eSgkcGx1Z2luWydjb2RlJ10pKSB7CgkJJHBsdWdpblsnY29kZSdd ID0gaW1wbG9kZSAoIiIsIGZpbGUoJF9GSUxFU1sndGhlZmlsZSddWyd0bXBfbmFtZSddKSk7 Cgl9CgoJaWYgKE1BR0lDX1FVT1RFU19HUEMpIHsKCQlmb3JlYWNoICgkcGx1Z2luIGFzICRp dGVtID0+ICR2YWx1ZSkgewoJCQkkcGx1Z2luWyRpdGVtXSA9IGFkZHNsYXNoZXMoJHZhbHVl KTsKCQl9Cgl9CglleHRyYWN0KCRwbHVnaW4pOwoJJG1kNT1tZDUoJGNvZGUpOwoJJHZlcnNp b24gPSAoZW1wdHkoJHZlcnNpb24pKSA/ICIwLjEiIDogJHZlcnNpb247CgkkaGVscCA9ICRo ZWxwLigoJGNzcykgPyBuLiRzdGFydF9jc3Mubi4kY3NzLm4uJGVuZF9jc3MgOiAnJyk7Cgkk ZXhpc3RzID0gZmV0Y2goJ25hbWUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5ld25hbWUpOwoJ aWYgKCRleGlzdHMpIHsKCQkkc3RhdHVzID0gZmV0Y2goJ3N0YXR1cycsJ3R4cF9wbHVnaW4n LCduYW1lJywkbmV3bmFtZSk7CgkJJHJzID0gc2FmZV91cGRhdGUoCgkJCSJ0eHBfcGx1Z2lu IiwKCQkJInN0YXR1cyAgICAgID0gJyRzdGF0dXMnLAoJCQl0eXBlICAgICAgICAgPSAnJHR5 cGUnLAoJCQlhdXRob3IgICAgICAgPSAnJGF1dGhvcicsCgkJCWF1dGhvcl91cmkgICA9ICck YXV0aG9yX3VyaScsCgkJCXZlcnNpb24gICAgICA9ICckdmVyc2lvbicsCgkJCWRlc2NyaXB0 aW9uICA9ICckZGVzY3JpcHRpb24nLAoJCQloZWxwICAgICAgICAgPSAnJGhlbHAnLAoJCQlj b2RlICAgICAgICAgPSAnJGNvZGUnLAoJCQljb2RlX3Jlc3RvcmUgPSAnJGNvZGUnLAoJCQlj b2RlX21kNSAgICAgPSAnJG1kNSciLAoJCQkibmFtZSAgICAgICAgPSAnJG5ld25hbWUnIgoJ CSk7Cgl9IGVsc2UgewoJCSRycyA9IHNhZmVfaW5zZXJ0KAoJCQkidHhwX3BsdWdpbiIsCgkJ CSJuYW1lICAgICAgICAgPSAnJG5ld25hbWUnLAoJCQlzdGF0dXMgICAgICAgPSAwLAoJCQl0 eXBlICAgICAgICAgPSAnJHR5cGUnLAoJCQlhdXRob3IgICAgICAgPSAnJGF1dGhvcicsCgkJ CWF1dGhvcl91cmkgICA9ICckYXV0aG9yX3VyaScsCgkJCXZlcnNpb24gICAgICA9ICckdmVy c2lvbicsCgkJCWRlc2NyaXB0aW9uICA9ICckZGVzY3JpcHRpb24nLAoJCQloZWxwICAgICAg ICAgPSAnJGhlbHAnLAoJCQljb2RlICAgICAgICAgPSAnJGNvZGUnLAoJCQljb2RlX3Jlc3Rv cmUgPSAnJGNvZGUnLAoJCQljb2RlX21kNSAgICAgPSAnJG1kNSciCgkJKTsKCX0KCglwYWdl dG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCBtZXNzZW5nZXIoJ3BsdWdpbicsJG5ld25hbWUs KCRleGlzdHMpPyd1cGRhdGVkJzondXBsb2FkZWQnKSk7CgllY2hvIGllZF9wbHVnaW5fZWRp dF9mb3JtKCRuZXduYW1lKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3Jl YWRfZmlsZSgkZmlsZXBhdGgpIHsKCSRjb250ZW50ID0gZmlsZSgkZmlsZXBhdGgpOwoJJHNv dXJjZV9saW5lcyA9IGNvdW50KCRjb250ZW50KTsKCSRtZXRhZGF0YSA9IGFycmF5KAoJCQkJ CQknbmFtZScgPT4gJycsCgkJCQkJCSd2ZXJzaW9uJyA9PiAnJywKCQkJCQkJJ2F1dGhvcicg PT4gJycsCgkJCQkJCSdhdXRob3JfdXJpJyA9PiAnJywKCQkJCQkJJ2Rlc2NyaXB0aW9uJyA9 PiAnJywKCQkJCQkJJ3R5cGUnID0+ICcnLAoJCQkJCSk7Cglmb3IgKCRpZHg9MDsgJGlkeCA8 ICRzb3VyY2VfbGluZXM7ICRpZHgrKykgewoJCSRjb250ZW50WyRpZHhdID0gcnRyaW0oJGNv bnRlbnRbJGlkeF0pOwoJCWlmIChzdHJwb3MoJGNvbnRlbnRbJGlkeF0sICckcGx1Z2luWycp ID09PSAwKSB7CgkJCS8vIEZvdW5kIGEgcGx1Z2luIHZhcmlhYmxlIHNvIGV4dHJhY3QgaXQK CQkJJHBhcnRzID0gZXhwbG9kZSgiID0gIiwgJGNvbnRlbnRbJGlkeF0pOwoJCQkkcGFydHNb MF0gPSBzdHJfcmVwbGFjZSgiJyIsICIiLCAkcGFydHNbMF0pOwoJCQlwcmVnX21hdGNoKCIv cGx1Z2luXFsoLiopXF0vIiwgJHBhcnRzWzBdLCAkdmFyKTsKCQkJJHZhbCA9IHRyaW0oJHBh cnRzWzFdLCAiJzsiKTsKCQkJJG1ldGFkYXRhWyR2YXJbMV1dID0gJHZhbDsKCQl9Cgl9Cgkk bWV0YWRhdGFbJ2hlbHAnXSA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAn SEVMUCcpOwoJJG1ldGFkYXRhWydjc3MnXSAgPSBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygk Y29udGVudCwgJ0NTUycgKTsKCSRtZXRhZGF0YVsnY29kZSddID0gaWVkX3BsdWdpbl9leHRy YWN0X2h1bmsoJGNvbnRlbnQsICdDT0RFJyk7CgoJcmV0dXJuICRtZXRhZGF0YTsKfQoKLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQovLyByaXBwZWQgYW5kIG1vZGRlZCBmcm9tIG5ldC1jYXJ2ZXIncyB6ZW1fdHBs IHRlbXBsYXRlCmZ1bmN0aW9uIGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250ZW50LCAk aHVuaywgJGNtbnQ9IiMiLCAkZGVsZXRlPWZhbHNlKSB7CgkkZGxtID0gZXhwbG9kZSgifCIs ICRjbW50KTsKCSRkbG1TdGFydCA9ICRkbG1bMF07CgkkZGxtRW5kID0gKGNvdW50KCRkbG0p ID4gMSkgPyAkZGxtWzFdIDogJyc7CgkkbGluZXMgPSBpZWRfcGx1Z2luX21ha2VfYXJyYXko JGNvbnRlbnQpOwoKCWxpc3QgKCRzdGFydF9kZWxpbSwgJGVuZF9kZWxpbSkgPSBpZWRfcGx1 Z2luX21ha2VfbWFya2VycygkaHVuaywgJGRsbVN0YXJ0LCAkZGxtRW5kKTsKCSRzdGFydCA9 IGFycmF5X3NlYXJjaCgkc3RhcnRfZGVsaW0sICRsaW5lcykgKyAxOwoJJGVuZCA9IGFycmF5 X3NlYXJjaCgkZW5kX2RlbGltLCAkbGluZXMpOwoJJGV4dHJhY3RlZCA9IGFycmF5KCk7Cglp ZiAoaXNfbnVtZXJpYygkc3RhcnQpICYmIGlzX251bWVyaWMoJGVuZCkgJiYgJGVuZCA+ICRz dGFydCkgewoJCSRleHRyYWN0ZWQgPSBhcnJheV9zbGljZSgkbGluZXMsICRzdGFydCwgJGVu ZC0kc3RhcnQpOwoJCSRsaW5lTnVtID0gY291bnQoJGV4dHJhY3RlZCktMTsKCQl3aGlsZSAo dHJpbSgkZXh0cmFjdGVkWyRsaW5lTnVtLS1dKSA9PSAiIikgewoJCQlhcnJheV9wb3AoJGV4 dHJhY3RlZCk7CiAgICAgIH0KCQl3aGlsZSAodHJpbSgkZXh0cmFjdGVkWzBdKSA9PSAiIikg ewoJCQlhcnJheV9zaGlmdCgkZXh0cmFjdGVkKTsKICAgICAgfQoJCWlmICgkZGVsZXRlKSB7 CgkJCSRjaG9wcGVkID0gYXJyYXlfc3BsaWNlKCRsaW5lcywgJHN0YXJ0LTEsICRlbmQtJHN0 YXJ0KzIsICIiKTsKCQl9Cgl9CgkkcmVtYWlucyA9ICRsaW5lczsKCS8vIENoZWNrIGlmIHRo ZSBDU1Mgc2VjdGlvbiBoYXMgPHN0eWxlPiB0YWdzIGFyb3VuZCBpdDsgYWRkIHRoZW0gaWYg bm90CglpZiAoJGh1bmsgPT0gIkNTUyIpIHsKCQkkbnVtcm93cyA9IGNvdW50KCRleHRyYWN0 ZWQpOwoJCWlmICgkbnVtcm93cyA+IDEpIHsKCQkJaWYgKHN0cnBvcygkZXh0cmFjdGVkWyRu dW1yb3dzLTFdLCAnPC9zdHlsZT4nKSA9PT0gZmFsc2UpIHsKCQkJCSRleHRyYWN0ZWRbXSA9 ICc8L3N0eWxlPic7CgkJCX0KCQkJaWYgKHN0cnBvcygkZXh0cmFjdGVkWzBdLCAnPHN0eWxl ICcpID09PSBmYWxzZSkgewoJCQkJYXJyYXlfdW5zaGlmdCgkZXh0cmFjdGVkLCAnPHN0eWxl IHR5cGU9InRleHQvY3NzIj4nKTsKCQkJfQoJCX0KCX0KCWlmICgkZGVsZXRlKSB7CgkJcmV0 dXJuIGFycmF5KHRyaW0oam9pbigiXG4iLCAkZXh0cmFjdGVkKSksIHRyaW0oam9pbigiXG4i LCAkcmVtYWlucykpKTsKCX0gZWxzZSB7CgkJcmV0dXJuIHRyaW0oam9pbigiXG4iLCAkZXh0 cmFjdGVkKSk7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9tYWtlX2Fy cmF5KCRhcnIpIHsKCWlmICghaXNfYXJyYXkoJGFycikpIHsKCQkkYXJyID0gZXhwbG9kZSgi XG4iLCAkYXJyKTsKCX0KCSRzb3VyY2VfbGluZXMgPSBjb3VudCgkYXJyKTsKCWZvciAoJGlk eD0wOyAkaWR4IDwgJHNvdXJjZV9saW5lczsgJGlkeCsrKSB7CgkJJGFyclskaWR4XSA9IHJ0 cmltKCRhcnJbJGlkeF0pOwoJfQoJcmV0dXJuICRhcnI7Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rp b24gaWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoJGh1bmssICRzdGFydCwgJGVuZCkgewoJZ2xv YmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7Cgkkc21hcmtlciA9ICRzdGFydCAuIHN0cl9yZXBs YWNlKCJTRUNUSU9OIiwgJGh1bmssICRpZWRfcGx1Z2luX2dsb2JhbHNbJ3N0YXJ0J10pIC4g KCgkZW5kKT8nICcuJGVuZDonJyk7CgkkZW1hcmtlciA9ICRzdGFydCAuIHN0cl9yZXBsYWNl KCJTRUNUSU9OIiwgJGh1bmssICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2VuZCddKSAuICgoJGVu ZCk/JyAnLiRlbmQ6JycpOwoJcmV0dXJuIChhcnJheSgkc21hcmtlciwgJGVtYXJrZXIpKTsK fQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQovLyByaXBwZWQgYW5kIG1vZGRlZCBmcm9tIG5ldC1jYXJ2ZXIncyB6 ZW1fdHBsIHRlbXBsYXRlCmZ1bmN0aW9uIGllZF9wbHVnaW5fYWRtaW5fY2hlY2soJGNvZGVi bG9jaywgJHR5cGUpIHsKCSRyZSA9ICcvQHR4cGludGVyZmFjZS4qPT0uKmFkbWluLyc7Cgkk cmV0ID0gdHJ1ZTsKCWlmIChwcmVnX21hdGNoKCRyZSwgJGNvZGVibG9jaykgJiYgJHR5cGUg PT0gMCkgewoJCSRyZXQgPSBmYWxzZTsKCX0KCXJldHVybiAkcmV0Owp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIGllZF9wbHVnaW5fdGV4dGlsZSgkaGVscCwgJGNzcywgJHN0YXJ0X2RsbSwg JGVuZF9kbG0pIHsKCUBpbmNsdWRlX29uY2UgdHhwYXRoLicvbGliL2NsYXNzVGV4dGlsZS5w aHAnOwoJJG91dCA9ICRoZWxwOwoJaWYgKGNsYXNzX2V4aXN0cygnVGV4dGlsZScpKSB7CgkJ Ly8gVHJ5IGFuZCBiZSBhIGxpdHRsZSBtb3JlIGludGVsbGlnZW50IGFib3V0IGFwcGx5aW5n IHRleHRpbGUgb3Igbm90CgkJJHJlID0gJy9oMShcKC4qXCkpP1wuLyc7CgkJaWYgKHByZWdf bWF0Y2goJHJlLCAkaGVscCkpIHsKCQkJJHRleHRpbGUgPSBuZXcgVGV4dGlsZSgpOwoJCQkk b3V0ID0gJHRleHRpbGUtPlRleHRpbGVUaGlzKCRoZWxwKTsKCQl9Cgl9Cgkkb3V0IC49ICJc biRzdGFydF9kbG1cbiRjc3NcbiRlbmRfZGxtXG4iOwoJcmV0dXJuICRvdXQ7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gaWVkX2luc2VydF9lZGl0b3JzKCkgewoJZ2xvYmFsICRwcmVmcywg JGllZF9wbHVnaW5fcHJlZnM7Cgkkb3V0ID0gYXJyYXkoKTsKCgkkcHJlZmtleXMgPSBkb1F1 b3RlKGltcGxvZGUoIicsJyIsYXJyYXlfa2V5cygkaWVkX3BsdWdpbl9wcmVmc1swXSkpKTsK CSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwsaHRtbCcsJ3R4cF9wcmVmcycsJ25hbWUgaW4g KCcuJHByZWZrZXlzLicpJyk7CglpZiAoY291bnQoJHJzKSA9PSBjb3VudCgkaWVkX3BsdWdp bl9wcmVmc1swXSkpIHsKCQkkZWQgPSBhcnJheSgpOwoJCSRlZFskcHJlZnNbJ2llZF9wbHVn aW5fZWRpdG9yJ11dID0gJHByZWZzWydpZWRfcGx1Z2luX2VkaXRvcl9wYXRoJ107CgkJJGVk WyRwcmVmc1snaWVkX3BsdWdpbl9oZWxwX2VkaXRvciddXSA9ICRwcmVmc1snaWVkX3BsdWdp bl9oZWxwX2VkaXRvcl9wYXRoJ107CgoJCWZvcmVhY2ggKCRlZCBhcyAkZWRpdG9yID0+ICRl ZGl0b3JfZGlyKSB7CgkJCXN3aXRjaCAoJGVkaXRvcikgewoJCQkJY2FzZSAidGlueV9tY2Ui OgoJCQkJCSRvdXRbXSA9IDw8PEVPRgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg c3JjPSInLiRlZGl0b3JfZGlyLicvdGlueV9tY2UuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5 cGU9InRleHQvamF2YXNjcmlwdCI+Cgl0aW55TUNFLmluaXQoewoJCW1vZGUgOiAic3BlY2lm aWNfdGV4dGFyZWFzIiwKCQllZGl0b3Jfc2VsZWN0b3IgOiAibWNlRWRpdG9yIiwKCQl0aGVt ZV9hZHZhbmNlZF90b29sYmFyX2xvY2F0aW9uIDogInRvcCIsCgkJdGhlbWVfYWR2YW5jZWRf YnV0dG9uczEgOiAiYm9sZCxpdGFsaWMsdW5kZXJsaW5lLHN0cmlrZXRocm91Z2gsZm9yZWNv bG9yLGJhY2tjb2xvcixyZW1vdmVmb3JtYXQsbnVtbGlzdCxidWxsaXN0LG91dGRlbnQsaW5k ZW50LGp1c3RpZnlsZWZ0LGp1c3RpZnljZW50ZXIsanVzdGlmeXJpZ2h0LGp1c3RpZnlmdWxs IiwKCQl0aGVtZV9hZHZhbmNlZF9idXR0b25zMiA6ICJsaW5rLHVubGluayxzZXBhcmF0b3Is aWJyb3dzZXIsc2VwYXJhdG9yLHNlYXJjaCxyZXBsYWNlLHNlcGFyYXRvcixjdXQsY29weSxw YXN0ZSxzZXBhcmF0b3IsY29kZSxzZXBhcmF0b3IsZm9ybWF0c2VsZWN0IiwKCQl0aGVtZV9h ZHZhbmNlZF9idXR0b25zMyA6ICIiCgl9KTsKPC9zY3JpcHQ+OwpFT0Y7CgkJCQkJYnJlYWs7 CgkJCQljYXNlICJlZGl0X2FyZWEiOgoJCQkJCSRvdXRbXSA9IDw8PEVPRgo8c2NyaXB0IHR5 cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIkZWRpdG9yX2Rpci9lZGl0X2FyZWFfZnVsbC5q cyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCS8vIGluaXRp YWxpc2F0aW9uCgllZGl0QXJlYUxvYWRlci5pbml0KHsKCQlpZDogInBsdWdpbl9lZGl0b3Ii CS8vIGlkIG9mIHRoZSB0ZXh0YXJlYSB0byB0cmFuc2Zvcm0KCQksc3RhcnRfaGlnaGxpZ2h0 OiB0cnVlCS8vIGlmIHN0YXJ0IHdpdGggaGlnaGxpZ2h0CgkJLGFsbG93X3Jlc2l6ZTogImJv dGgiCgkJLGFsbG93X3RvZ2dsZTogdHJ1ZQoJCSxsYW5ndWFnZTogImVuIgoJCSxzeW50YXg6 ICJwaHAiCgl9KTsKPC9zY3JpcHQ+CkVPRjsKCQkJCQlicmVhazsKCQkJCWNhc2UgImNvZGVw cmVzcyI6CgkJCQkJJG91dFtdID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz cmM9IicuJGVkaXRvcl9kaXIuJy9jb2RlcHJlc3MuanMiPjwvc2NyaXB0Pic7CgkJCQkJYnJl YWs7CgkJCX0KCQl9Cgl9CgoJcmV0dXJuIGltcGxvZGUoIlxuIiwgJG91dCk7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9oZWxwX3ZpZXdlcigkbWVzc2FnZT0nJykgewoJ Z2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7CglwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lu cycpLCRtZXNzYWdlKTsKCglpZiAoZ3BzKCduYW1lJykpIHsKCQkkbmFtZSA9IGdwcygnbmFt ZScpOwoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3BsdWdpbicsJ25h bWUnLCRuYW1lKSA6ICcnOwoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3Bs dWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFy cmF5KCcnLCRoZWxwKTsKCX0gZWxzZSBpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CgkJJHBsdWdp bj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hl X2RpciddLkRTLmdwcygnZmlsZW5hbWUnKSk7CgkJZXh0cmFjdCgkcGx1Z2luKTsKCX0KCWVj aG8gc3RhcnRUYWJsZSgnZWRpdCcpOwoJaWYgKGVtcHR5KCRoZWxwKSkgewoJCWVjaG8gdHIo dGRhKCc8cD5IZWxwIG5vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBmaWxlLjwvcD4nKSk7Cgl9 IGVsc2UgewoJCWxpc3QgKCRzdGFydF9jc3MsICRlbmRfY3NzKSA9IGllZF9wbHVnaW5fbWFr ZV9tYXJrZXJzKCJDU1MiLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydjc3Nfc3RhcnQnXSwgJGll ZF9wbHVnaW5fZ2xvYmFsc1snY3NzX2VuZCddKTsKCQkkcGx1Z2luWydoZWxwJ10gPSBpZWRf cGx1Z2luX3RleHRpbGUoJGhlbHAsICRjc3MsICRzdGFydF9jc3MsICRlbmRfY3NzKTsKCQll Y2hvIHRyKHRkYSggJzxwPkV4dHJhY3RlZCAnLighZW1wdHkoJHBsdWdpblsnaGVscCddKSA/ ICdhbmQgVGV4dGlsZSBwcm9jZXNzZWQnIDogJycpLicgaGVscCBzZWN0aW9uIGZvbGxvd3Mm IzgyMzA7PC9wPjxocj4nLCAnIHdpZHRoPSI2MDAiJykpOwoJCWVjaG8gdHIodGRhKCRwbHVn aW5bJ2hlbHAnXSwgJyB3aWR0aD0iNjAwIicpKTsKCX0KCWVjaG8gZW5kVGFibGUoKTsKfQoK Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NldHVwKCRtZXNzYWdlPScnKSB7Cgln bG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7CgkkbnVtUmVxUHJlZnMgPSBjb3VudCgkaWVkX3Bs dWdpbl9wcmVmc1swXSk7CgoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2Fn ZSk7CgkkcHJlZmtleXMgPSBkb1F1b3RlKGltcGxvZGUoIicsJyIsYXJyYXlfa2V5cygkaWVk X3BsdWdpbl9wcmVmc1swXSkpKTsKCSRycyA9IHNhZmVfcm93cygnbmFtZSx2YWwsaHRtbCcs J3R4cF9wcmVmcycsJ25hbWUgaW4gKCcuJHByZWZrZXlzLicpJyk7CgkkbnVtUm93cyA9IGNv dW50KCRycyk7CgoJJGJ0blNhdmUgPSBmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQnLCBnVHh0 KCdzYXZlJyksICdwdWJsaXNoJyk7CgkkYnRuSW5zdGFsbCA9ICc8Zm9ybSBtZXRob2Q9InBv c3QiIGFjdGlvbj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3Bs dWdpbl9wcmVmc19pbnN0YWxsIiBzdHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdz dWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnaW5zdGFsbCcpLCAncHVibGlzaCcpLic8L2Zvcm0+ JzsKCSRidG5SZW1vdmUgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1p ZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfcmVtb3ZlIiBz dHlsZT0iZGlzcGxheTppbmxpbmUiPicuZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4 dCgnZGVsZXRlJyksICdwdWJsaXNoJykuJzwvZm9ybT4nOwoJJGJ0blN0eWxlID0gJyBzdHls ZT0iYm9yZGVyOjA7aGVpZ2h0OjI1cHgiJzsKCgllY2hvIHN0YXJ0VGFibGUoJ2xpc3QnKTsK CWlmICgkbnVtUm93cyA9PSAkbnVtUmVxUHJlZnMpIHsKCQkvLyBQcmVmcyBhbGwgaW5zdGFs bGVkCgkJZWNobyB0cih0ZGEoJ1BsdWdpbiBDb21wb3NlciBwcmVmZXJlbmNlcy4nLCAnIGNv bHNwYW49IjIiJykgLiB0ZGEoJGJ0blJlbW92ZSAuICRidG5JbnN0YWxsLCAkYnRuU3R5bGUp ICk7CgkJZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1 Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfdXBkYXRlIj4nOwoJCWZv ciAoJGlkeCA9IDA7ICRpZHggPCAkbnVtUm93czsgJGlkeCsrKSB7CgkJCSRhID0gJHJzWyRp ZHhdOwoJCQkkbGFiZWwgPSAnPGxhYmVsIGZvcj0iJy4kYVsnbmFtZSddLiciPicuaWVkX3Bs dWdpbl9nVHh0KCRhWyduYW1lJ10pLic6PC9sYWJlbD4nOwoJCQkkb3V0ID0gdGRhKCRsYWJl bCwgJyBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7 IicpOwoJCQlzd2l0Y2goJGFbJ25hbWUnXSkgewoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0 b3JfcGF0aCI6CgkJCQljYXNlICJpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgiOgoJCQkJ CSRvdXQgLj0gdGQoZklucHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRp dCcsICcnLCAnJywgNTAsICcnLCAkYVsnbmFtZSddKSk7CgkJCQkJYnJlYWs7CgkJCQljYXNl ICJpZWRfcGx1Z2luX2VkaXRvciI6Ci8vCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRh WyduYW1lJ10sIGFycmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0 IEFyZWEnLCAnY29kZXByZXNzJyA9PiAnQ29kZVByZXNzJyksICRhWyd2YWwnXSwgJycsICcg b25jaGFuZ2U9ImllZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7Iics ICRhWyduYW1lJ10pKTsKCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10s IGFycmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnKSwg JGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlk LCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAi aWVkX3BsdWdpbl9oZWxwX2VkaXRvciI6CgkJCQkJJG91dCAuPSB0ZChzZWxlY3RJbnB1dCgk YVsnbmFtZSddLCBhcnJheSgndGV4dGlsZScgPT4gJ05vbmUgKFRleHRpbGUpJywgJ3Rpbnlf bWNlJyA9PiAnVGlueSBNQ0UnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3Bs dWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJ CQkJCWJyZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIiOgoJCQkJCSRv dXQgLj0gdGQocmFkaW8oJGFbJ25hbWUnXSwwLCgoJGFbJ3ZhbCddPT0wKT8xOjApKS4iQ29k ZSBmaXJzdCAiIC4gcmFkaW8oJGFbJ25hbWUnXSwxLCgoJGFbJ3ZhbCddPT0xKT8xOjApKS4i SGVscCBmaXJzdCAiKTsKCQkJCQlicmVhazsKCQkJfQoJCQllY2hvIHRyKCRvdXQpOwoJCX0K CQllY2hvIHRyKHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxlKSk7CgkJZWNobyAnPC9mb3JtPic7 Cgl9IGVsc2UgaWYgKCRudW1Sb3dzID4gMCAmJiAkbnVtUm93cyA8ICRudW1SZXFQcmVmcykg ewoJCWVjaG8gdHIodGRhKCdTb21lIHByZWZzIGFscmVhZHkgaW5zdGFsbGVkLicuYnIuJ0No b29zZSAnLmdUeHQoJ2RlbGV0ZScpLicgdG8gcmVtb3ZlIHRoZW0gYWxsIG9yICcuZ1R4dCgn aW5zdGFsbCcpLicgdG8gYWRkJy5ici4ndGhlIG5ldyBvbmVzIGxlYXZpbmcgYWxsIGV4aXN0 aW5nIHByZWZzIHVudG91Y2hlZC4nLCAnIGNvbHNwYW49IjIiJykpOwoJCWVjaG8gdHIodGRh KCRidG5SZW1vdmUsJGJ0blN0eWxlKSAuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSk7 Cgl9IGVsc2UgewoJCWVjaG8gdHIodGRhKCdQcmVmcyBub3QgaW5zdGFsbGVkLicsICcgY29s c3Bhbj0iMiInKSk7CgkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkpOwoJ fQoJZWNobyBlbmRUYWJsZSgpOwoKCWVjaG8gPDw8RU9GCjxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0Ij4KdmFyIGllZF9wbHVnaW5fcGF0aF9yZSA9IG5ldyBSZWdFeHAoIl4uKlsv XFxdIiwgImciKQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzd2FwKHNlbElELCBzZWxWYWx1 ZSkgewoJdmFyIGlkID0gc2VsSUQrJ19wYXRoJzsKCXZhciBudXZhbCA9ICgoYmFzZW5hbWUo JCgiIyIraWQpLnZhbCgpKSA9PSBzZWxWYWx1ZSkgPyAkKCIjIitpZCkudmFsKCkgOiBkaXJu YW1lKCQoIiMiK2lkKS52YWwoKSkrc2VsVmFsdWUpOwoJaWYgKCQoIiMiK3NlbElEKVswXS5z ZWxlY3RlZEluZGV4ID09IDApIHsKCQkkKCIjIitpZCkuYXR0cigiZGlzYWJsZWQiLCB0cnVl KTsgOwoJfSBlbHNlIHsKCQkkKCIjIitpZCkuYXR0cigiZGlzYWJsZWQiLCBmYWxzZSk7IDsK CQkkKCIjIitpZCkudmFsKG51dmFsKTsKCX0KfQpmdW5jdGlvbiBiYXNlbmFtZShwYXRoLCBz dWZmaXgpIHsKCXJldHVybiBwYXRoLnJlcGxhY2UoaWVkX3BsdWdpbl9wYXRoX3JlLCAnJyk7 Cn0KZnVuY3Rpb24gZGlybmFtZShwYXRoKSB7CiAgICByZXR1cm4gcGF0aC5tYXRjaChpZWRf cGx1Z2luX3BhdGhfcmUpOwp9CiQoZnVuY3Rpb24oKSB7CgkkKCJzZWxlY3QubGlzdCIpLmVh Y2goZnVuY3Rpb24oKSB7CgkJaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZh bHVlKTsKCX0pOwp9KTsKPC9zY3JpcHQ+CkVPRjsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBp ZWRfcGx1Z2luX3ByZWZzX2luc3RhbGwoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7 CgkkbWVzc2FnZSA9ICcnOwoJZm9yZWFjaCAoJGllZF9wbHVnaW5fcHJlZnNbMF0gYXMgJHBy ZWYgPT4gJGRmbHQpIHsKCQlpZiAoIWZldGNoKCduYW1lJywndHhwX3ByZWZzJywnbmFtZScs JHByZWYpKSB7CgkJCSRpZCA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCdwcmVmc19pZD0x LCBuYW1lPScuZG9RdW90ZSgkcHJlZikuJywgdmFsPScuZG9RdW90ZShkb1NsYXNoKCRkZmx0 KSkuJyxldmVudD0iaWVkX3BsdWdpbiInKTsKCQl9Cgl9CgkkbWVzc2FnZSA9IGllZF9wbHVn aW5fZ1R4dCgnaWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsZWQnKTsKCWllZF9wbHVnaW5fc2V0 dXAoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fcHJlZnNf cmVtb3ZlKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOwoJJG1lc3NhZ2UgPSAnJzsK CWZvcmVhY2ggKGFycmF5X21lcmdlKCRpZWRfcGx1Z2luX3ByZWZzWzBdLCRpZWRfcGx1Z2lu X3ByZWZzWzFdKSBhcyAkcHJlZiA9PiAkZGZsdCkgewoJCWlmIChmZXRjaCgnbmFtZScsJ3R4 cF9wcmVmcycsJ25hbWUnLCRwcmVmKSkgewoJCQkkaWQgPSBzYWZlX2RlbGV0ZSgndHhwX3By ZWZzJywnbmFtZT0nLmRvUXVvdGUoJHByZWYpKTsKCQl9Cgl9CgkkbWVzc2FnZSA9IGllZF9w bHVnaW5fZ1R4dCgnaWVkX3BsdWdpbl9wcmVmc19kZWxldGVkJyk7CglpZWRfcGx1Z2luX3Nl dHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZz X3VwZGF0ZSgpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRtZXNzYWdlID0gJyc7 CgkkcG9zdCA9IGRvU2xhc2goc3RyaXBQb3N0KCkpOwoJZm9yZWFjaCAoJGllZF9wbHVnaW5f cHJlZnNbMF0gYXMgJHByZWYgPT4gJGRmbHQpIHsKCQlpZiAoaXNzZXQoJHBvc3RbJHByZWZd KSkgewoJCQlzYWZlX3VwZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9ICciLiRwb3N0WyRwcmVm XS4iJyIsICJuYW1lID0gJyIuZG9TbGFzaCgkcHJlZikuIicgYW5kIHByZWZzX2lkID0gMSIp OwoJCX0KCX0KCSRtZXNzYWdlID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKTsKCWllZF9w bHVnaW5fc2V0dXAoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVn aW5fZ1R4dCgkd2hhdCwgJGF0dHMgPSBhcnJheSgpKSB7CgkkbGFuZyA9IGFycmF5KAoJCSdp ZWRfcGx1Z2luX3ByZWZzX2luc3RhbGxlZCcgPT4gJ1ByZWZlcmVuY2VzIGluc3RhbGxlZCcs CgkJJ2llZF9wbHVnaW5fcHJlZnNfZGVsZXRlZCcgPT4gJ1ByZWZlcmVuY2VzIGRlbGV0ZWQn LAoJCSdpZWRfcGx1Z2luX2NoZWNrX3R5cGUnID0+ICdDaGVjayB5b3VyIHBsdWdpbiB0eXBl IScsCgkJJ2llZF9wbHVnaW5fZWRpdG9yJyA9PiAnUGx1Z2luIEVkaXRvcicsCgkJJ2llZF9w bHVnaW5fZWRpdG9yX3BhdGgnID0+ICdQbHVnaW4gRWRpdG9yIHBhdGggVVJMJywKCQknaWVk X3BsdWdpbl9oZWxwX2VkaXRvcicgPT4gJ0hlbHAgRWRpdG9yJywKCQknaWVkX3BsdWdpbl9o ZWxwX2VkaXRvcl9wYXRoJyA9PiAnSGVscCBFZGl0b3IgcGF0aCBVUkwnLAoJCSdpZWRfcGx1 Z2luX291dHB1dF9vcmRlcicgPT4gJ1BIUCBleHBvcnQgb3JkZXInLAoJKTsKCXJldHVybiBz dHJ0cigkbGFuZ1skd2hhdF0sICRhdHRzKTsKfSI7czozOiJtZDUiO3M6MzI6ImZiNjU2NzMw MmUyZjNkODUyMzI1YWNmYTQ0NTY0YTI1Ijt9