# Name: ied_plugin_composer v0.6 # Type: Admin + Client 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 b24iO3M6MzoiMC42IjtzOjY6ImF1dGhvciI7czo0MzoiWXVyYSBMaW5ueWsgLyBTdGVmIERh d3NvbiAvIFN0ZXZlIERpY2tpbnNvbiI7czoxMDoiYXV0aG9yX3VyaSI7czoyMzoiaHR0cDov L2luc3BpcmVkLmtpZXYudWEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMyOiJXcml0ZSBhbmQg cHVibGlzaCBwbHVnaW5zIGVhc2lseSI7czo0OiJ0eXBlIjtzOjE6IjEiO3M6NDoiaGVscCI7 czo5MDQ4OiI8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgojaWVkX2hlbHAgeyBsaW5lLWhlaWdo dDoxLjMgO30KI2llZF9oZWxwIGNvZGUgeyBmb250LXdlaWdodDpib2xkOyBmb250OiAxMDUl LzEzMCUgIkNvdXJpZXIgTmV3IiwgY291cmllciwgbW9ub3NwYWNlOyBiYWNrZ3JvdW5kLWNv bG9yOiAjRkZGRkNDO30KI2llZF9oZWxwIGNvZGUuc2VkX2NvZGVfdGFnIHsgZm9udC13ZWln aHQ6bm9ybWFsOyBib3JkZXI6MXB4IGRvdHRlZCAjOTk5OyBiYWNrZ3JvdW5kLWNvbG9yOiAj ZjBlNjhjOyBkaXNwbGF5OmJsb2NrOyBtYXJnaW46MTBweCAxMHB4IDIwcHg7IHBhZGRpbmc6 MTBweDsgfQojaWVkX2hlbHAgYTpsaW5rLCAjaWVkX2hlbHAgYTp2aXNpdGVkIHsgY29sb3I6 IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlk IGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNpZWRfaGVscCBhOmhvdmVyLCAjaWVkX2hl bHAgYTphY3RpdmUgeyBjb2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3Jk ZXItYm90dG9tOiAycHggc29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI2llZF9o ZWxwIGgxIHsgY29sb3I6ICMzNjk7IGZvbnQ6IDIwcHggR2VvcmdpYSwgc2Fucy1zZXJpZjsg bWFyZ2luOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI2llZF9oZWxwIGgyIHsgYm9yZGVy LWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBjb2xvcjogIzM2 OTsgZm9udDogMTdweCBHZW9yZ2lhLCBzYW5zLXNlcmlmOyB9CiNpZWRfaGVscCBoMyB7IGNv bG9yOiAjNjkzOyBmb250OiBib2xkIDEycHggQXJpYWwsIHNhbnMtc2VyaWY7IGxldHRlci1z cGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7dGV4dC10cmFuc2Zvcm06IHVwcGVyY2Fz ZTt9Cjwvc3R5bGU+Cgk8cD48ZGl2IGlkPSJpZWRfaGVscCI+PC9wPgoKCTxoMT5JbnNwaXJl ZCBwbHVnaW4gY29tcG9zZXI8L2gxPgoKCTxwPlRoaXMgcGx1Z2luIGNyZWF0ZXMgYSBuZXcg dGFiIHVuZGVyIHRoZSAmIzgyMTY7ZXh0ZW5zaW9ucyYjODIxNzsgdGFiIHdoZXJlIHlvdSBj YW4gZWRpdCBwbHVnaW5zIHRoYXQgYXJlIGFscmVhZHkgaW5zdGFsbGVkIGluIFRleHRQYXR0 ZXJuIGFuZCByZWdpc3RlciBuZXcgcGx1Z2lucy48L3A+CgoJPGgyPkZlYXR1cmVzPC9oMj4K Cgk8dWw+CgkJPGxpPkNyZWF0ZSwgZWRpdCBvciB1cGxvYWQgcGx1Z2luIGNvZGUgYW5kIGhl bHAsIHRoZW4gcHVibGlzaCB0aGUgcmVzdWx0IGluIHRoZSBzdGFuZGFyZCA8c3BhbiBjbGFz cz0iY2FwcyI+VFhQPC9zcGFuPiBwbHVnaW4gZm9ybWF0PC9saT4KCQk8bGk+RnVsbCBzdXBw b3J0IGZvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9l bXB0eV9wbHVnaW5fdGVtcGxhdGUudHh0Ij56ZW1fdHBsLnBocCBwbHVnaW4gdGVtcGxhdGU8 L2E+LiBUaGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0 eV9wbHVnaW5fdGVtcGxhdGVfY29kZV9maXJzdC50eHQiPmxhdGVzdCByZXZpc2lvbjwvYT4g YnkgPGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMv bW9kaWZpZWQtcGx1Z2luLWNvbXBpbGVyIj5uZXQtY2FydmVyPC9hPiBhbHNvIGluY29ycG9y YXRlcyBhICYjODIxNjtzdHlsZSYjODIxNzsgc2VjdGlvbiBmb3IgZWFzeSBzdHlsaW5nIG9m IHlvdXIgaGVscCB0ZXh0LiBUaGUgUGx1Z2luIENvbXBvc2VyIGxvb2tzIGZvciA8c3BhbiBj bGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBzZWN0aW9ucyBpbiB0aGUgdGVtcGxhdGUgYW5kIHdp bGwgdXNlIHRoZW0gYWNjb3JkaW5nbHk8L2xpPgoJCTxsaT5FeHBvcnQgYSBwbHVnaW4gYXMg ZWl0aGVyIGEgc3RhbmRhcmQgQkFTRTY0LWVuY29kZWQgcGx1Z2luIChub3cgaW4gc3RhbmRh cmQgNzItY2hhciBjaHVuayBtb2RlKSBvciBhcyBhIGd6aXBwZWQgdmVyc2lvbiBvZiB0aGUg YWJvdmUgKHVzZWZ1bCBmb3IgbGFyZ2UgcGx1Z2lucykgb3IgYXMgYSBwaHAgZmlsZSBpbiB0 aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0LiBUaGlzIG1lYW5zIHlvdSBjYW4gc3dpdGNo IGJldHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2luIGNvbXBvc2VyIG9yIHlvdXIgZmF2b3Vy aXRlIGVkaXRpbmcgcHJvZ3JhbSwgdGVzdCB0aGUgZmlsZSBpbiB0aGUgcGx1Z2luX2NhY2hl X2RpciwgdGhlbiBpbXBvcnQgaXQgYmFjayBpbnRvIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8 L3NwYW4+IHdpdGggdGhlIGhlbHAgb2YgdGhlIGNvbXBvc2VyIGFuZCBwdWJsaXNoIHlvdXIg cGx1Z2luIGZvciBldmVyeW9uZS4gTG9vayBhdCB0aGUgYm90dG9tIG9mIHRoZSBQbHVnaW4g Q29tcG9zZXImIzgyMTc7cyBFZGl0IHBhZ2UgZm9yIHRoZSBvcHRpb25zOyBqdXN0IHJlbWVt YmVyIHRvIHNhdmUgeW91ciBjaGFuZ2VzIGJlZm9yZSBleHBvcnRpbmcgb3IgY29weWluZy9w YXN0aW5nIHRoZSBjb2RlITwvbGk+CgkJPGxpPldoZW4gZXhwb3J0aW5nLCBmaWxlcyBjYW4g YmUgc2F2ZWQgd2l0aCBlaXRoZXIgdGhlIGNvZGUgYmxvY2sgZmlyc3Qgb3IgdGhlIGhlbHAg YmxvY2sgZmlyc3Q8L2xpPgoJCTxsaT5IZWxwIHRleHQgY2FuIGJlIHdyaXR0ZW4gaW4gVGV4 dGlsZSBvciAoWClIVE1MPC9saT4KCQk8bGk+U3R5bGVzIGNhbiBiZSBhZGRlZCB0byB0aGUg aGVscCBzZWN0aW9uIGZvciBtb3JlIHByZWNpc2UgY29udHJvbCBvdmVyIGZvcm1hdHRpbmcg YW5kIHRoZXkgd29uJiM4MjE3O3QgYmUgcGFzc2VkIHRocm91Z2ggdGhlIFRleHRpbGUgbWFu Z2xlLiBJZiB5b3UgZm9yZ2V0IHRvIHB1dCB0aGUgPGNvZGU+JiM2MDtzdHlsZTwvY29kZT4m IzYyOyB0YWdzIGluLCB0aGUgQ29tcG9zZXIgd2lsbCBkbyBpdCBmb3IgeW91PC9saT4KCQk8 bGk+U3VwcG9ydCBmb3IgQ2xpZW50LCBBZG1pbiwgYW5kIExpYnJhcnkgdHlwZSBwbHVnaW5z PC9saT4KCQk8bGk+VGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1 bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0xMzA4OSI+VGlueU1DRSA8c3Bh biBjbGFzcz0iY2FwcyI+V1lTSVdZRzwvc3Bhbj4gZWRpdG9yPC9hPiAmIzgyMTI7IHdoZW4g eW91IGdldCBpdCwgdGhlIFBsdWdpbiBDb21wb3NlciB3aWxsIGF1dG9tYXRpY2FsbHkgdXNl IGl0IGZvciB0aGUgaGVscCBmaWVsZCAoPHN0cm9uZz48c3BhbiBjbGFzcz0iY2FwcyI+Tk9U RTwvc3Bhbj46PC9zdHJvbmc+IDxlbT5jdXJyZW50bHkgYXdhaXRpbmcgYW4gdXBkYXRlLCBw bGVhc2Ugc3RpY2sgdG8gVGV4dGlsZSBmb3Igbm93PC9lbT4pPC9saT4KCQk8bGk+U3VwcG9y dCBmb3IgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxl cy5waHA/Z3JvdXBfaWQ9MTY0MDA4Ij5FZGl0IEFyZWE8L2E+IHJvbGxlZCBpbiAodGhhbmtz IHZhcmlhYXMpLiBNb3JlIGVkaXRvcnMgY2FuIGJlIGludGVncmF0ZWQgbGF0ZXIgZmFpcmx5 IGVhc2lseS4gVGVudGF0aXZlIHN1cHBvcnQgZm9yIENvZGVQcmVzcyBpcyBpbiB0aGVyZSBi dXQgSSBmb3VuZCBpdCBpbmV4cGxpY2FibHkgYmxhbmtlZCBvdXQgdGhlIHBsdWdpbiBjb2Rl IHdoZW4gaXQgd2FzIHNhdmVkIHNvIEkmIzgyMTc7dmUgY29tbWVudGVkIG91dCBzdXBwb3J0 IGZvciBub3cuIElmIGFueW9uZSBjYW4gc2hlZCBhbnkgbGlnaHQgb24gd2h5IGl0IGRvZXMg dGhpcyAob3IgaWYgaXQmIzgyMTc7cyBqdXN0IG1lKSwgcGxlYXNlIHNwZWFrIHVwISBVbmNv bW1lbnQgdGhlIGNvZGUgb24gbGluZSA3MjMgYW5kIGNvbW1lbnQgb3V0IGxpbmUgNzI0IHRv IGVuYWJsZSBzdXBwb3J0LCB0aGVuIHZpc2l0IHRoZSBzZXR1cCBwYWdlIGFuZCBzZWxlY3Qg Q29kZVByZXNzIGZyb20gdGhlIGxpc3Q8L2xpPgoJCTxsaT5XaXRoIHRoZSBncmFjaW91cyBi bGVzc2luZyBvZiBuZXQtY2FydmVyLCB0aGUgUGx1Z2luIENvbXBvc2VyIG5vdyBoYXMgYSBi dWlsdC1pbiBUZXh0aWxlIGhlbHAgcHJvY2Vzc29yIHRvIGFsbG93IHlvdSB0byBwcmV2aWV3 IHlvdXIgSGVscCB0ZXh0IHJpZ2h0IHRoZXJlIGluIHRoZSBicm93c2VyLiBJdCYjODIxNztz IGEgZGlyZWN0IHJpcCBvZiBjb2RlIGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1 Z2lucy5uZXRjYXJ2aW5nLmNvbS9wbHVnaW5zL3BsdWdpbi1oZWxwLXZpZXdlciI+UGx1Z2lu IEhlbHAgVmlld2VyPC9hPiBidXQgd2l0aCBhZGRlZCBzdXBwb3J0IGZvciBpbnRlcm5hbCBw bHVnaW5zIGFzIHdlbGwgYXMgb25lcyBpbiB0aGUgcGx1Z2luX2NhY2hlX2Rpci4gVGhlIHR3 byB2aWV3ZXJzIHdpbGwgaGFwcGlseSBjby1leGlzdCBpZiB5b3Ugd2lzaDwvbGk+Cgk8L3Vs PgoKCTxoMj5BdXRob3JzPC9oMj4KCgk8cD5PcmlnaW5hbCBwbHVnaW46IDxhIGhyZWY9Imh0 dHA6Ly9pbnNwaXJlZC5raWV2LnVhL2ZlZWRiYWNrLyI+WXVyYSBMaW5ueWs8L2E+PGJyIC8+ Ck1vZGlmaWNhdGlvbnMgKHYwLjUrKTogPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29t L2NvbW1lbnRGb3JtIj5TdGVmIERhd3NvbjwvYT48YnIgLz4KQSB0b3VjaCBvZiBjbGFzczog PGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL2NvbnRhY3QiPlN0 ZXZlIERpY2tpbnNvbjwvYT48L3A+CgoJPGgyPkluc3RhbGxhdGlvbiAvIFVuaW5zdGFsbGF0 aW9uPC9oMj4KCgk8cD5Eb3dubG9hZCB0aGUgcGx1Z2luICh2MC41IGFuZCBhYm92ZSkgZnJv bSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vc3ciPnN0ZWZkYXdzb24uY29tPC9h PiAocHJldmlvdXMgdmVyc2lvbnMgYXJlIHN0aWxsIGF2YWlsYWJsZSBvbiB0aGUgPGEgaHJl Zj0iaHR0cDovL2luc3BpcmVkLmtpZXYudWEvdHhwL2llZF9wbHVnaW5fY29tcG9zZXIiPklu c3BpcmVkIGhvbWVwYWdlPC9hPiksIHBhc3RlIHRoZSBjb2RlIGludG8gdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mIzYyOyBQbHVnaW5zIHBhZ2UsIGluc3Rh bGwgYW5kIGVuYWJsZSB0aGUgcGx1Z2luLjwvcD4KCgk8cD5WaXNpdCB0aGUgRXh0ZW5zaW9u cyAtJiM2MjsgUGx1Z2luIENvbXBvc2VyIHRhYiBhbmQgY2xpY2sgdGhlIFNldHVwIGJ1dHRv biBpbiB0aGUgdG9wLXJpZ2h0IG9mIHRoZSBzY3JlZW4uIEZyb20gaGVyZSB5b3UgY2FuIGlu c3RhbGwsIGRlbGV0ZSBhbmQgdXBkYXRlIHRoZSBmZXcgcGx1Z2luIHByZWZlcmVuY2VzLiBO b3RlIHRoYXQgSSBjYW4mIzgyMTc7dCBmaW5kIGEgbmVhdCB3YXkgb2YgYXV0b2ZpbGxpbmcg aW4gdGhlIHBsdWdpbl9wYXRoIG9wdGlvbnMgZGVwZW5kZWRudCBvbiB0aGUgZHJvcGRvd25z IHNvIHRoZXkgaGF2ZSB0byBiZSBlZGl0ZWQgbWFudWFsbHkgZm9yIG5vdyB0byBtYXRjaC4g SSYjODIxNztkIGFsc28gbGlrZSB0byBiZSBhYmxlIHRvIGRpc2FibGUgdGhlICYjODIxNjto ZWxwIGVkaXRvciYjODIxNzsgcGF0aCB3aGVuICYjODIxNjtUZXh0aWxlJiM4MjE3OyBpcyBz ZWxlY3RlZC4gSXQmIzgyMTc7cyBvbiB0aGUgVG9EbyBsaXN0LiBOb3RlIHRoYXQgVGlueU1D RSBpcyBleHBlcmltZW50YWwgdW50aWwgbW9yZSBlZmZvcnQgY2FuIGJlIHB1dCBpbnRvIHVw ZGF0aW5nIHRoZSBpbnRlZ3JhdGlvbiB3aXRoIGhha190aW55bWNlLiA8c3BhbiBjbGFzcz0i Y2FwcyI+WU1NVjwvc3Bhbj4uPC9wPgoKCTxwPklmIHlvdSB3aXNoIHRvIHRha2UgYWR2YW50 YWdlIG9mIEVkaXQgQXJlYSwgZ3JhYiBpdCBmcm9tIHNvdXJjZWZvcmdlLCBpbnN0YWxsIGl0 LCB2aXNpdCB0aGUgUGx1Z2luIGNvbXBvc2VyJiM4MjE3O3MgU2V0dXAgcGFnZSwgc2VsZWN0 IEVkaXRBcmVhIGZyb20gdGhlIGRyb3Bkb3duIGFuZCBnaXZlIHRoZSBwYXRoIHRvIHRoZSBp bnN0YWxsYXRpb24gb24geW91ciBzZXJ2ZXI7IHRoaXMgaXMgbm9ybWFsbHkgZXZlcnl0aGlu ZyB1cCB0byBhbmQgaW5jbHVkaW5nIC9lZGl0X2FyZWEuIE5vIHRyYWlsaW5nIHNsYXNoIGlz IHJlcXVpcmVkLjwvcD4KCgk8cD5UbyByZW1vdmUgdGhlIGNvbXBvc2VyIChub29vbyEpIHZp c2l0IHRoZSBTZXR1cCBwYWdlIGZyb20gdGhlIFBsdWdpbiBDb21wb3NlciB0YWIsIGhpdCBE ZWxldGUgdG8gcmVtb3ZlIHRoZSBwcmVmZXJlbmNlcywgdGhlbiBzaW1wbHkgZGVsZXRlIHRo ZSBwbHVnaW4gYXMgbm9ybWFsIGZyb20gdGhlIEFkbWluIC0mIzYyOyBQbHVnaW5zIHBhZ2Uu PC9wPgoKCTxoMj5Vc2FnZTwvaDI+CgoJPHA+QWxsIGluc3RhbGxlZCBwbHVnaW5zIGFyZSBs aXN0ZWQgb24gdGhlIFBsdWdpbiBDb21wb3NlciBwYWdlLiBUaGV5IGNhbiBiZSBlbmFibGVk L2Rpc2FibGVkLCBkZWxldGVkIG9yIGVkaXRlZCBmcm9tIGhlcmUuIFRoZSBoZWxwIGNhbiBh bHNvIGJlIHZpZXdlZCBhcyB5b3UgYXJlIGVkaXRpbmcgaXQuIFRoZXJlIGFyZSBsaW5rcyBu ZXh0IHRvIGVhY2ggcGx1Z2luIG9uIHRoZSBwbHVnaW4gbGlzdCBwYWdlIGFuZCBhbHNvIGEg bGluayB0byB0aGUgbGVmdCBvZiB0aGUgUGx1Z2luIEhlbHAgYm94IG9uIHRoZSBlZGl0IHBh Z2UgKGlmIGFueW9uZSB3YW50cyB0aGlzIG1vdmVkIHRvIGEgYmV0dGVyIGxvY2F0aW9uLCBv ciBhIDJuZCBidXR0b24gcHV0dGluZyBpbiBzb21ld2hlcmUsIGp1c3Qgc2hvdXQpLjwvcD4K Cgk8cD5JZiB5b3UgYXJlIHVzaW5nIHRoZSBwbHVnaW5fY2FjaGVfZGlyIChBZG1pbiAtJiM2 MjsgQWR2YW5jZWQgUHJlZnMpIHRoZW4gYW55IHBsdWdpbnMgaW4gdGhlIDxhIGhyZWY9Imh0 dHA6Ly9zdGVmZGF3c29uLmNvbS9kb3dubG9hZHMvZXhhbXBsZV9wbHVnaW5fdGVtcGxhdGUu dHh0Ij5zdGFuZGFyZCB0ZW1wbGF0ZSBmb3JtYXQ8L2E+IHVwbG9hZGVkIHRvIHRoaXMgZGly ZWN0b3J5IHdpbGwgYmUgYXZhaWxhYmxlIGltbWVkaWF0ZWx5IGZvciBlZGl0aW5nIGFuZCB0 ZXN0aW5nLiBJbiBhZGRpdGlvbiwgdGhlc2UgcGx1Z2lucyBiZW5lZml0IGZyb20gYmVpbmcg JiM4MjIwO2Fsd2F5cyBvbiYjODIyMTsuPC9wPgoKCTxwPk9uIHRoZSBFZGl0IHBhZ2UsIGNv ZGUgZ29lcyBpbiB0aGUgJiM4MjE2O1BsdWdpbiYjODIxNzsgYm94LCBoZWxwIGdvZXMgaW4g dGhlICYjODIxNjtQbHVnaW4gaGVscCYjODIxNzsgYm94LCBzdHlsaW5nIGdvZXMgaW4gdGhl ICYjODIxNjtTdHlsZSYjODIxNzsgYm94ISBGaWxsIGluIHRoZSBvdGhlciBmaWVsZHMgd2l0 aCByZWxldmFudCBkZXRhaWxzIGFib3V0IHlvdXJzZWxmIGFuZCB5b3VyIHBsdWdpbiBhbmQg eW91JiM4MjE3O3JlIGdvb2QgdG8gZ28uIENob29zZSBmcm9tIGVpdGhlciBDbGllbnQtc2lk ZSBvbmx5LCBBZG1pbi1zaWRlICh3aGljaCBpbmNsdWRlcyBjbGllbnQgc2lkZSBieSBkZWZh dWx0KSBvciBMaWJyYXJ5IHBsdWdpbiB0eXBlcy4gTm8gY2hlY2tpbmcgaXMgY3VycmVudGx5 IGRvbmUgcmVnYXJkaW5nIHRoZSB0eXBlLCBzbyBtYWtlIHN1cmUgeW91IGNob29zZSB0aGUg Y29ycmVjdCBvbmUuPC9wPgoKCTxwPkhpdCBTYXZlIHRvIHN0b3JlIHlvdXIgcGx1Z2luLiBG b3IgYSBzdGFuZGFyZCAobm9uIHBsdWdpbl9jYWNoZV9kaXIpIHBsdWdpbiwgb25jZSB5b3Um IzgyMTc7cmUgaGFwcHkgd2l0aCBpdCwgc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGVk aXQgcGFnZSBhbmQgY2hvb3NlIGhvdyB0byBleHBvcnQgaXQuIFRoZSBmaXJzdCBsaW5rIGlz IGZvciBzdGFuZGFyZCBwbHVnaW5zIHdoaWNoIGFyZSBkaXN0cmlidXRlZCB0byBhbGwgdXNl cnM7IHRoZSBzZWNvbmQgaXMgZm9yIGNvbXByZXNzZWQgcGx1Z2lucyAmIzgyMTI7IHVzZSB0 aGlzIGlmIHlvdXIgcGx1Z2lucyBhcmUgbGFyZ2UsIG9yIHNpbXBseSBhcyBhbiBhbHRlcm5h dGl2ZSBmb3JtYXQuIFRoZSB0aGlyZCBsaW5rIGlzIHRvIGV4cG9ydCBpdCBiYWNrIG91dCBp biB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0IHRvIHBlcmhhcHMgZ2l2ZSB0byBhbm90 aGVyIGRldmVsb3BlciBkaXJlY3RseS48L3A+CgoJPHA+UGx1Z2lucyBpbiB0aGUgcGx1Z2lu X2NhY2hlX2RpciBhcmUgZXhwb3J0ZWQgZnJvbSB0aGUgbWFpbiBQbHVnaW4gQ29tcG9zZXIg bGlzdCBwYWdlLiBTY3JvbGwgdG8gdGhlIGJvdHRvbSBhbmQgeW91IHdpbGwgc2VlIGEgUHVi bGlzaCBsaW5rICh0byBwcm9kdWNlIGEgc3RhbmRhcmQgcGx1Z2luKSBvciBhICYjODIxNjt6 aXAmIzgyMTc7IG9wdGlvbiB0byBnZW5lcmF0ZSBhIGNvbXByZXNzZWQgdmVyc2lvbi48L3A+ CgoJPHA+VGhlcmUgYXJlIHR3byBvdGhlciB3YXlzIG9mIGNyZWF0aW5nIHBsdWdpbnMgZnJv bSB0aGUgUGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZS4gVGhlIGZpcnN0IGlzIHRvIGNyZWF0 ZSBhIGJsYW5rLCBlbXB0eSBwbHVnaW4uIFVzZSB0aGUgdGV4dCBib3ggYXQgdGhlIHRvcCBm b3IgdGhpcy4gVGhlIHNlY29uZCBpcyB0byB1cGxvYWQgb25lIHVzaW5nIHRoZSBCcm93c2Uv dXBsb2FkIGJveCBhdCB0aGUgYm90dG9tLiBZb3UgY2FuIHVwbG9hZCBjb2RlIGluIGVpdGhl ciBzdGFuZGFyZCBwbHVnaW4gdGVtcGxhdGUgZm9ybWF0IChlaXRoZXIgY29kZS1maXJzdCBv ciBoZWxwLWZpcnN0LCBjb21wbGV0ZSB3aXRoIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3Nw YW4+IGFyZWFzKSBvciBzaW1wbHkgdXBsb2FkIGEgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwv c3Bhbj4gZmlsZSBjb250YWluaW5nIGNvZGUgb25seS48L3A+CgoJPGgyPldyaXRpbmcgYSBw bHVnaW48L2gyPgoKCTxwPllvdSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIDxhIGhyZWY9Imh0 dHA6Ly9mb3J1bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD05ODgxIj5QbHVn aW4gQXV0aG9yIFJlc291cmNlczwvYT4gdG9waWMgb24gdGhlIFRleHRwYXR0ZXJuIFN1cHBv cnQgRm9ydW0sIGFuZCB5b3UgbWlnaHQgYWxzbyB3YW50IHRvIGhhdmUgYSBsb29rIGF0IHRo ZSA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51YS90eHAtcGx1Z2luLWNoZWF0c2hl ZXQiPlRleHRQYXR0ZXJuIHBsdWdpbiBjaGVhdCBzaGVldDwvYT4uPC9wPgoKCTxwPkhhcHB5 IHBsdWdpbiBhdXRob3JpbmcgOi0pPGJyIC8+CjwvZGl2PjwvcD4iO3M6MzoiY3NzIjtzOjky MjoiPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI2llZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS4z IDt9CiNpZWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAl ICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dyb3VuZC1jb2xvcjog I0ZGRkZDQzt9CiNpZWRfaGVscCBjb2RlLnNlZF9jb2RlX3RhZyB7IGZvbnQtd2VpZ2h0Om5v cm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4 YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEwcHg7 IH0KI2llZF9oZWxwIGE6bGluaywgI2llZF9oZWxwIGE6dmlzaXRlZCB7IGNvbG9yOiBibHVl OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibHVl OyBwYWRkaW5nLWJvdHRvbToxcHg7fQojaWVkX2hlbHAgYTpob3ZlciwgI2llZF9oZWxwIGE6 YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJv dHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9CiNpZWRfaGVscCBo MSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IG1hcmdp bjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNpZWRfaGVscCBoMiB7IGJvcmRlci1ib3R0 b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29sb3I6ICMzNjk7IGZv bnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojaWVkX2hlbHAgaDMgeyBjb2xvcjog IzY5MzsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2lu ZzogMXB4OyBtYXJnaW46IDEwcHggMCAwO3RleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7fQo8 L3N0eWxlPiI7czo0OiJjb2RlIjtzOjMwNzEyOiJpZihAdHhwaW50ZXJmYWNlID09ICdhZG1p bicpIHsKCWFkZF9wcml2cygnaWVkX3BsdWdpbl9jb21wb3NlcicsJzEsMicpOwoJcmVnaXN0 ZXJfdGFiKCdleHRlbnNpb25zJywgJ2llZF9wbHVnaW5fY29tcG9zZXInLCAiUGx1Z2luIENv bXBvc2VyIik7CglyZWdpc3Rlcl9jYWxsYmFjaygnaWVkX3BsdWdpbl9jb21wb3NlcicsICdp ZWRfcGx1Z2luX2NvbXBvc2VyJyk7CglnbG9iYWwgJGllZF9wbHVnaW5fY29tcG9zZXIsICRp ZWRfcGx1Z2luX3ByZWZzOwoJLy8gRG91YmxlIGFycmF5OiAxc3QgaXMgYSBsaXN0IG9mIGN1 cnJlbnQgcHJlZnMgYW5kIHRoZWlyIGRlZmF1bHRzLAoJLy8gMm5kIGlzIGEgbGlzdCBvZiBs ZWdhY3kgcHJlZnMgdGhhdCBtYXkgbmVlZCByZW1vdmluZyBpbiBmdXR1cmUgKGRlZmF1bHRz IGFsbCBzZXQgZW1wdHkpCgkkaWVkX3BsdWdpbl9wcmVmcyA9IGFycmF5KAoJCQlhcnJheSgK CQkJCSdpZWRfcGx1Z2luX2VkaXRvcicgPT4gJ25vbmUnLAoJCQkJJ2llZF9wbHVnaW5fZWRp dG9yX3BhdGgnID0+IGh1LidqcycuRFMuJ2VkaXRfYXJlYScsCgkJCQknaWVkX3BsdWdpbl9o ZWxwX2VkaXRvcicgPT4gJ3RleHRpbGUnLAoJCQkJJ2llZF9wbHVnaW5faGVscF9lZGl0b3Jf cGF0aCcgPT4gaHUuJ2pzJy5EUy4ndGlueV9tY2UnLAoJCQkJJ2llZF9wbHVnaW5fb3V0cHV0 X29yZGVyJyA9PiAnMCcsCgkJCSksCgkJCWFycmF5KAoJCQkJJ2llZF9wbHVnaW5fbm90X3Vz ZWRfYW55X21vcmVfdGVzdGVyJyA9PiAnJywKCQkJKQoJCSk7Cn0KCmZ1bmN0aW9uIGllZF9w bHVnaW5fY29tcG9zZXIgKCRldmVudCwgJHN0ZXApIHsKCWlmKCEkc3RlcCBvciAhaW5fYXJy YXkoJHN0ZXAsIGFycmF5KCdpZWRfcGx1Z2luX2RlbGV0ZScsCgkJCSdpZWRfcGx1Z2luX2Vk aXQnLAoJCQknaWVkX3BsdWdpbl9oZWxwJywKCQkJJ2llZF9wbHVnaW5fbGlzdCcsCgkJCSdp ZWRfcGx1Z2luX2luc3RhbGwnLAoJCQknaWVkX3BsdWdpbl9zYXZlJywKCQkJJ2llZF9wbHVn aW5fc2F2ZV9maWxlJywKCQkJJ2llZF9wbHVnaW5fdmVyaWZ5JywKCQkJJ2llZF9zd2l0Y2hf c3RhdHVzJywKCQkJJ2llZF9wbHVnaW5fc2V0dXAnLAoJCQknaWVkX3BsdWdpbl9wcmVmc19p bnN0YWxsJywKCQkJJ2llZF9wbHVnaW5fcHJlZnNfcmVtb3ZlJywKCQkJJ2llZF9wbHVnaW5f cHJlZnNfdXBkYXRlJywKCQkJJ2llZF9wbHVnaW5fY3JlYXRlX25ldycsCgkJCSdpZWRfcGx1 Z2luX3NhdmVfYXNfZmlsZScsCgkJCSdpZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2ZpbGUnLAoJ CQknaWVkX3BsdWdpbl91cGxvYWQnLAoJCQknaWVkX3BsdWdpbl9oZWxwX3ZpZXdlcicsCgkJ KSkpIHsKCQlpZWRfcGx1Z2luX2xpc3QoKTsKCX0gZWxzZSAkc3RlcCgpOwp9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fbGlzdCgkbWVzc2FnZT0nJykgewoJcGFnZXRvcChn VHh0KCdlZGl0X3BsdWdpbnMnKSwkbWVzc2FnZSk7CgllY2hvIHN0YXJ0VGFibGUoJ2xpc3Qn KS4KdHIodGRhKApmb3JtKApmSW5wdXQoJ3RleHQnLCduYW1lJywnJywnJywnJywnJywnMzAn LCcwJykKLiBmSW5wdXQoJ3N1Ym1pdCcsJ3N1Ym1pdCcsJ2NyZWF0ZSBuZXcgcGx1Z2luJywn c21hbGxlcmJveCcpCi4gc0lucHV0KCdpZWRfcGx1Z2luX2NyZWF0ZV9uZXcnKQouIGVJbnB1 dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpCikKLCcgY29sc3Bhbj0iNSIgc3R5bGU9ImJvcmRl cjowO2hlaWdodDo1MHB4IicpCi50ZGEoZm9ybShmSW5wdXQoJ3N1Ym1pdCcsICdzdWJtaXQn LCAnc2V0dXAnLCAnc21hbGxlcmJveCcpLnNJbnB1dCgnaWVkX3BsdWdpbl9zZXR1cCcpLmVJ bnB1dCgnaWVkX3BsdWdpbl9jb21wb3NlcicpKSwnIGNvbHNwYW49IjUiIHN0eWxlPSJib3Jk ZXI6MDtoZWlnaHQ6NTBweCInKSkuCmFzc0hlYWQoJ3BsdWdpbicsJ2F1dGhvcicsJ3ZlcnNp b24nLCdkZXNjcmlwdGlvbicsJ21hbmFnZScsJ2FjdGl2ZScsJycpOwoKCSRycyA9IHNhZmVf cm93c19zdGFydCgiKiIsInR4cF9wbHVnaW4iLCAiMT0xIG9yZGVyIGJ5IG5hbWUiKTsKCgl3 aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQlleHRyYWN0KCRhKTsKCQkkZWxpbmsgPSAn PGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdp bl9lZGl0JiMzODtuYW1lPScuJG5hbWUuJyI+Jy5nVHh0KCdlZGl0JykuJzwvYT4nOwoJCSRo bGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtuYW1lPScuJG5hbWUuJyI+Jy5nVHh0KCdoZWxw JykuJzwvYT4nOwoJCWVjaG8gdHIodGQoJG5hbWUpCi50ZCgnPGEgaHJlZj0iJy4kYXV0aG9y X3VyaS4nIj4nLiRhdXRob3IuJzwvYT4nKQoudGQoJHZlcnNpb24sMTApCi50ZCgkZGVzY3Jp cHRpb24sMjYwKQoudGQoc3Ryb25nKCRlbGluaykgLicgLyAnLiBzdHJvbmcoJGhsaW5rKSkK LnRkKGllZF9zdGF0dXNfbGluaygkc3RhdHVzLCRuYW1lLHllc19ubygkc3RhdHVzKSksMzAp Ci50ZChkTGluaygnaWVkX3BsdWdpbl9jb21wb3NlcicsJ2llZF9wbHVnaW5fZGVsZXRlJywn bmFtZScsJG5hbWUpLDMwKQopOwoJCXVuc2V0KCRuYW1lLCRwYWdlLCRkZWxldGVsaW5rKTsK CX0KCglpZiAoIWVtcHR5KCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10p KSB7CgkJJGZpbGVuYW1lcyA9IGFycmF5KCk7CgkJJGRpciA9IGRpcigkR0xPQkFMU1sncHJl ZnMnXVsncGx1Z2luX2NhY2hlX2RpciddKTsKCQl3aGlsZSAoJGZpbGUgPSAkZGlyLT5yZWFk KCkpIHsKCQkJaWYoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIpIHsKCQkJCSRmaWxl YWRkciA9ICRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGU7 CgkJCQlpZiAoIWlzX2RpcigkZmlsZWFkZHIpKSB7CgkJCQkJJGZpbGVuYW1lc1tdPSRmaWxl OwoJCQkJfQoJCQl9CgkJfQoJCSRkaXItPmNsb3NlKCk7CgkJKCRmaWxlbmFtZXMpP25hdGNh c2Vzb3J0KCRmaWxlbmFtZXMpOicnOwoJCWVjaG8gdHIoCgkJdGRhKAoJCXRhZygnUGx1Z2lu cyB0aGF0IHJ1biBmcm9tICcudGFnKCdwbHVnaW5fY2FjaGVfZGlyJywnYWNyb255bScsJyB0 aXRsZT0iJy4kR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLiciIHN0eWxl PSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQgYmxhY2siJykuJzonLCdoMScpCgkJLCcgY29s c3Bhbj0iNyIgc3R5bGU9ImJvcmRlcjowO2hlaWdodDo1MHB4O3RleHQtYWxpZ246bGVmdCIn KQoKCQkpOwoKCQllY2hvIGFzc0hlYWQoJ3BsdWdpbicsJ2F1dGhvcicsJ3ZlcnNpb24nLCdk ZXNjcmlwdGlvbicsJ21hbmFnZScsJ3B1Ymxpc2gnLCcnKTsKCQlmb3JlYWNoKCRmaWxlbmFt ZXMgYXMgJGZpbGVuYW1lKSB7CgkJCSRlbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3Bs dWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2VkaXQmIzM4O2ZpbGVuYW1lPScu JGZpbGVuYW1lLiciPicuZ1R4dCgnZWRpdCcpLic8L2E+JzsKCQkJJGhsaW5rID0gJzxhIGhy ZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5faGVs cF92aWV3ZXImIzM4O2ZpbGVuYW1lPScuJGZpbGVuYW1lLiciPicuZ1R4dCgnaGVscCcpLic8 L2E+JzsKCgkJCSRmaWxlZXh0PSBhcnJheV9wb3AoZXhwbG9kZSAoJy4nLCRmaWxlbmFtZSkp OwoJCQlpZiAoJGZpbGVleHQ9PSdwaHAnKSB7CgkJCQkkYmFzZW5hbWU9YmFzZW5hbWUoJGZp bGVuYW1lKTsKCQkJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sn cHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLiRmaWxlbmFtZSk7CgoJCQkJZWNobyB0 cigKCQkJCXRkKAoJCQkJdGFnKCRmaWxlbmFtZSwnZGl2JywnIHN0eWxlPSJjb2xvcjpncmF5 O2JvcmRlcjowcHggc29saWQgZ3JheTtwYWRkaW5nOjFweCAycHggMnB4IDFweDsiJykKCQkJ CS4oaXNzZXQoJHBsdWdpblsnbmFtZSddKT8kcGx1Z2luWyduYW1lJ10uJzxiciAvPic6Jycp LicgJwoJCQkJKQoJCQkJLnRkKAoJCQkJKCBpc3NldCgkcGx1Z2luWydhdXRob3JfdXJpJ10p Pyc8YSBocmVmPSInLiRwbHVnaW5bJ2F1dGhvcl91cmknXS4nIj4nOicnICkgLgoJCQkJKCBp c3NldCgkcGx1Z2luWydhdXRob3InXSk/JHBsdWdpblsnYXV0aG9yJ106JyZuYnNwOycgKS4K CQkJCSggaXNzZXQoJHBsdWdpblsnYXV0aG9yX3VyaSddKT8nPC9hPic6JycgKQoJCQkJKQoJ CQkJLnRkKChpc3NldCgkcGx1Z2luWyd2ZXJzaW9uJ10pPyRwbHVnaW5bJ3ZlcnNpb24nXTon Jm5ic3A7JyksMTApCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10pPyRw bHVnaW5bJ2Rlc2NyaXB0aW9uJ106JyZuYnNwOycpLDI2MCkKCQkJCS50ZChzdHJvbmcoJGVs aW5rKSAuJyAvICcuIHN0cm9uZygkaGxpbmspKQoJCQkJLnRkKChpc3NldCgkcGx1Z2luWydu YW1lJ10pPwoJCQkJdGFnKGdUeHQoJ3B1Ymxpc2gnKSwnYScsJyBocmVmPSI/ZXZlbnQ9aWVk X3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7 ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyIgdGl0bGU9InNhdmUgYXMgJyAuICRwbHVnaW5bJ25h bWUnXS4nX3YnLiRwbHVnaW5bJ3ZlcnNpb24nXS4gJy50eHQiJykKCQkJCQkJLnRhZygnIFt6 aXBdJywnYScsJyBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1p ZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7ZmlsZW5hbWU9Jy4kZmlsZW5hbWUuJyYjMzg7 emlwPXRydWUiIHRpdGxlPSJzYXZlIGFzICcgLiAkcGx1Z2luWyduYW1lJ10uJ192Jy4kcGx1 Z2luWyd2ZXJzaW9uJ10uICdfemlwLnR4dCInKToKCQkJCXRhZygnJm5ic3A7Jywnc3Bhbics JyBzdHlsZT0iY29sb3I6Z3JheSInKQoJCQkJKSkKCQkJCS50ZCgnJykKCQkJCSk7CgkJCX0K CQl9Cgl9CgoJZWNobyB0cigKdGRhKAonPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0t ZGF0YSIgYWN0aW9uPSJpbmRleC5waHAiIG1ldGhvZD0icG9zdCI+Jy4Kc3RhcnRUYWJsZSgn ZWRpdCcsJ2xlZnQnKS4KdHIodGRhKCBoSW5wdXQoJ01BWF9GSUxFX1NJWkUnLDEwMDAwMDAp LgpncmFmKCdVcGxvYWQgcGx1Z2luIGZyb20gcGhwIGZpbGUnLic6ICcuCmZJbnB1dCgnZmls ZScsJ3RoZWZpbGUnLCcnLCdlZGl0JykuCmZJbnB1dCgnc3VibWl0Jywnc3VibWl0JyxnVHh0 KCd1cGxvYWQnKSwnc21hbGxlcmJveCcpKS4KZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2Vy JykuCnNJbnB1dCgnaWVkX3BsdWdpbl91cGxvYWQnKSAsICcgc3R5bGU9ImJvcmRlcjowcHgg c29saWQgZ3JheSInICkuCnRkYSggdGFnKCduYW1lJywnYWNyb255bScsJyB0aXRsZT0ibmVl ZGVkIG9ubHkgaWYgdGhlIHBocCBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGRvZXMgbm90IGNv bnRhaW4gbWV0YWRhdGEiIHN0eWxlPSJib3JkZXItYm90dG9tOjFweCBkYXNoZWQgYmxhY2si JykuJzogJy4gZklucHV0KCd0ZXh0JywnbmFtZScsJ3h4eF94eHh4eHgnLCcnLCcnLCcnLCcz MCcsJzAnKSAsICcgc3R5bGU9ImJvcmRlcjowcHggc29saWQgZ3JheTt2ZXJ0aWNhbC1hbGln bjptaWRkbGU7IicgKSkuCmVuZFRhYmxlKCkuCic8L2Zvcm0+JwosJyBjb2xzcGFuPSI2IiBz dHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7dGV4dC1hbGlnbjpsZWZ0IicpCik7CgllY2hv IGVuZFRhYmxlKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3N0YXR1c19saW5rKCRz dGF0dXMsJG5hbWUsJGxpbmt0ZXh0KSB7Cgkkb3V0ID0gJzxhIGhyZWY9ImluZGV4LnBocD8n OwoJJG91dCAuPSAnZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfc3dp dGNoX3N0YXR1cyYjMzg7c3RhdHVzPScuCgkkc3RhdHVzLicmIzM4O25hbWU9Jy51cmxlbmNv ZGUoJG5hbWUpLiciJzsKCSRvdXQgLj0gJz4nLiRsaW5rdGV4dC4nPC9hPic7CglyZXR1cm4g JG91dDsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfc3dpdGNoX3N0YXR1cygpIHsKCWV4 dHJhY3QoZ3BzYShhcnJheSgnbmFtZScsJ3N0YXR1cycpKSk7CgkkY2hhbmdlID0gKCRzdGF0 dXMpID8gMCA6IDE7CglzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsICJzdGF0dXM9JGNoYW5n ZSIsICJuYW1lPSckbmFtZSciKTsKCWllZF9wbHVnaW5fbGlzdChtZXNzZW5nZXIoJ3BsdWdp bicsJG5hbWUsJ3VwZGF0ZWQnKSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdp bl9kZWxldGUoKSB7CgkkbmFtZSA9IGRvU2xhc2gocHMoJ25hbWUnKSk7CglzYWZlX2RlbGV0 ZSgidHhwX3BsdWdpbiIsIm5hbWU9JyRuYW1lJyIpOwoJaWVkX3BsdWdpbl9saXN0KG1lc3Nl bmdlcigncGx1Z2luJywkbmFtZSwnZGVsZXRlZCcpKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlv biBpZWRfcGx1Z2luX2VkaXQoJG1lc3NhZ2U9JycpIHsKCSRzaXRlX2RpciA9IGh1OwoJJG5h bWUgPSBncHMoJ25ld25hbWUnKT9ncHMoJ25ld25hbWUnKTpncHMoJ25hbWUnKTsKCXBhZ2V0 b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJZWNobyBpZWRfcGx1Z2luX2Vk aXRfZm9ybSgoZ3BzKCdmaWxlbmFtZScpKT9ncHMoJ2ZpbGVuYW1lJyk6JG5hbWUsIGdwcygn ZmlsZW5hbWUnKT8gMTogMCk7CgllY2hvIGllZF9pbnNlcnRfZWRpdG9ycygpOwp9CgovLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fZWRpdF9mb3JtKCRuYW1lPScnLCRlZGl0Zmls ZT0wKSB7CglpZiAoISRlZGl0ZmlsZSkgewoJCSRhdXRob3IgPSAoJG5hbWUpID8gZmV0Y2go J2F1dGhvcicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkYXV0aG9yX3Vy aSA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0aG9yX3VyaScsJ3R4cF9wbHVnaW4nLCduYW1lJywk bmFtZSkgOiAnJzsKCQkkdmVyc2lvbiA9ICgkbmFtZSkgPyBmZXRjaCgndmVyc2lvbicsJ3R4 cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkZGVzY3JpcHRpb24gPSAoJG5hbWUp ID8gZmV0Y2goJ2Rlc2NyaXB0aW9uJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcn OwoJCSRjb2RlID0gKCRuYW1lKSA/IGZldGNoKCdjb2RlJywndHhwX3BsdWdpbicsJ25hbWUn LCRuYW1lKSA6ICcnOwoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3Bs dWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRzdGF0dXMgPSAoJG5hbWUpID8gZmV0Y2go J3N0YXR1cycsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkdHlwZSA9ICgk bmFtZSkgPyBmZXRjaCgndHlwZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsK CQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0cmFjdF9odW5r KCRoZWxwLCAiQ1NTIiwgIi8vIiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7Cgl9IGVsc2Ug ewoJCSRwbHVnaW4gPSBpZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsn cGx1Z2luX2NhY2hlX2RpciddLkRTLiRuYW1lKTsKCQkkZmlsZW5hbWU9JG5hbWU7CgkJJGZp bGVleHQ9IGFycmF5X3BvcCgkbmFtZT1leHBsb2RlICgnLicsJG5hbWUpKTsKCQkkbmFtZT1p bXBsb2RlKCRuYW1lKTsKCQlleHRyYWN0ICgkcGx1Z2luKTsgLy8gY29kZSwgaGVscCwgY3Nz LCBuYW1lLCB2ZXJzaW9uLCB0eXBlLCBkZXNjcmlwdGlvbiwgYXV0aG9yLCBhdXRob3JfdXJp CgkJJHN0YXR1cz0gKCRmaWxlZXh0PT0ncGhwJyk/IDE6IDA7Cgl9CgkkcGx1Z2luWyduYW1l J10gPSAkbmFtZTsKCSRwbHVnaW5bJ2F1dGhvciddID0gJGF1dGhvcjsKCSRwbHVnaW5bJ2F1 dGhvcl91cmknXSA9ICRhdXRob3JfdXJpOwoJJHBsdWdpblsndmVyc2lvbiddID0gJHZlcnNp b247CgkkcGx1Z2luWydkZXNjcmlwdGlvbiddID0gJGRlc2NyaXB0aW9uOwoJJHBsdWdpblsn aGVscCddID0gJGhlbHA7CgkkcGx1Z2luWydjb2RlJ10gPSAkY29kZTsKCSRwbHVnaW5bJ3R5 cGUnXSA9ICR0eXBlOwoJJHBsdWdpblsnbWQ1J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUnXSAp OwoKCSRkaXN0cmlidXRpb249Jzx0ZXh0YXJlYSBuYW1lPSJkaXN0cmlidXRpb24iIHJvd3M9 IjEiIGNvbHM9IjkwIiBvbmNsaWNrPSJ0aGlzLnNlbGVjdCgpIj4nLmJhc2U2NF9lbmNvZGUo c2VyaWFsaXplKCRwbHVnaW4pKS4nPC90ZXh0YXJlYT4nOwoKCSRzbGluayA9ICc8YSBocmVm PSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVf YXNfZmlsZSYjMzg7bmFtZT0nLiRuYW1lLiciPnNhdmUgYXMgJyAuICRuYW1lLidfdicuJHZl cnNpb24uICcudHh0PC9hPic7Cgkkc3ppcGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9w bHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O25h bWU9Jy4kbmFtZS4nJiMzODt6aXA9dHJ1ZSI+c2F2ZSBhcyAnIC4gJG5hbWUuJ192Jy4kdmVy c2lvbi4gJy50eHQgKGNvbXByZXNzZWQpPC9hPic7Cgkkc3BocGxpbmsgPSAnPGEgaHJlZj0i P2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2Fz X3BocF9maWxlJiMzODtuYW1lPScuJG5hbWUuJyI+c2F2ZSBhcyAnIC4gJG5hbWUuJ192Jy4k dmVyc2lvbi4gJy5waHA8L2E+JzsKCSR2aGVscGxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWll ZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9oZWxwX3ZpZXdlciYjMzg7 Jy4oaXNzZXQoJGZpbGVuYW1lKSA/ICdmaWxlbmFtZT0nLiRmaWxlbmFtZSA6ICduYW1lPScu JG5hbWUgKS4nIj5bICcuc3Ryb25nKGdUeHQoJ3ZpZXcnKSkuJyBdPC9hPic7CgoJJG5ld25h bWUgPWZJbnB1dCgndGV4dCcsJ25ld25hbWUnLCRuYW1lLCdlZGl0JywnNzgnLCcnLCc5MCcs JzInKTsKCSRhdXRob3IgPWZJbnB1dCgndGV4dCcsJ2F1dGhvcicsJGF1dGhvciwnZWRpdCcs Jzc4JywnJywnOTAnLCcyJyk7CgkkYXV0aG9yX3VyaSA9ZklucHV0KCd0ZXh0JywnYXV0aG9y X3VyaScsJGF1dGhvcl91cmksJ2VkaXQnLCc3OCcsJycsJzkwJywnMicpOwoJJHZlcnNpb24g PWZJbnB1dCgndGV4dCcsJ3ZlcnNpb24nLCR2ZXJzaW9uLCdlZGl0JywnNzgnLCcnLCc5MCcs JzInKTsKCSRkZXNjcmlwdGlvbiA9ZklucHV0KCd0ZXh0JywnZGVzY3JpcHRpb24nLCRkZXNj cmlwdGlvbiwnZWRpdCcsJzc4JywnJywnOTAnLCcyJyk7CgkkY29kZSA9ICc8dGV4dGFyZWEg bmFtZT0iY29kZSIgaWQ9InBsdWdpbl9lZGl0b3IiIHJvd3M9IjMwIiBjb2xzPSI5MCIgY2xh c3M9ImNvZGVwcmVzcyBwaHAiPicuaHRtbGVudGl0aWVzKHV0ZjhfZGVjb2RlKCRjb2RlKSku JzwvdGV4dGFyZWE+JzsKCSRoZWxwID0gJzx0ZXh0YXJlYSBuYW1lPSJoZWxwIiByb3dzPSIz MCIgY29scz0iOTAiIGNsYXNzPSJtY2VFZGl0b3IiPicuaHRtbGVudGl0aWVzKHV0ZjhfZGVj b2RlKCRoZWxwKSkuJzwvdGV4dGFyZWE+JzsKCSRjc3MgPSAnPHRleHRhcmVhIG5hbWU9ImNz cyIgcm93cz0iMTUiIGNvbHM9IjkwIj4nLmh0bWxlbnRpdGllcyh1dGY4X2RlY29kZSgkY3Nz KSkuJzwvdGV4dGFyZWE+JzsKCSRwcmVmcyA9ICgoISRlZGl0ZmlsZSk/Y2hlY2tib3goJ3N0 YXR1cycsMSwkc3RhdHVzKS4gJyA8bGFiZWwgZm9yPSJzdGF0dXMiPmVuYWJsZSBwbHVnaW48 L2xhYmVsPic6JycpIC4gJyA8bGFiZWwgZm9yPSJ0eXBlIj4mIzE2MDsmIzE2MDsmIzE2MDtQ bHVnaW4gdHlwZTo8L2xhYmVsPicuIHJhZGlvKCd0eXBlJywwLCgoJHR5cGU9PTApPzE6MCkp LiJDbGllbnQgIiAuIHJhZGlvKCd0eXBlJywxLCgoJHR5cGU9PTEpPzE6MCkpLiJBZG1pbiAi IC4gcmFkaW8oJ3R5cGUnLDIsKCgkdHlwZT09Mik/MTowKSkuIkxpYnJhcnkiOwoKCSRzdWIg PSBmSW5wdXQoJ3N1Ym1pdCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJyk7CglyZXR1cm4g Zm9ybShzdGFydFRhYmxlKCdlZGl0JykKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4g dGQoJHN1YikpCgkuICggKGlzc2V0KCRmaWxlbmFtZSkpPyB0ciggZkxhYmVsQ2VsbCgnJm5i c3A7JykgLiB0ZCgkZmlsZW5hbWUuaElucHV0KCdmaWxlbmFtZScsJGZpbGVuYW1lKSkpIDog JycgKQoJLiB0ciggZkxhYmVsQ2VsbCggJ3BsdWdpbicgKSAuIHRkKCRuZXduYW1lKSkKCS4g dHIoIGZMYWJlbENlbGwoICdwbHVnaW4nICkgLiB0ZCgkY29kZSkpCgkuIHRyKCBmTGFiZWxD ZWxsKCAncHJlZnMnICkgLiB0ZCgkcHJlZnMpKQoKCS4gdHIoIGZMYWJlbENlbGwoICd2ZXJz aW9uJyApIC4gdGQoJHZlcnNpb24pKQoJLiB0ciggZkxhYmVsQ2VsbCggJ2F1dGhvcicgKSAu IHRkKCRhdXRob3IpKQoJLiB0ciggZkxhYmVsQ2VsbCggJ3dlYnNpdGUnICkgLiB0ZCgkYXV0 aG9yX3VyaSkpCgkuIHRyKCBmTGFiZWxDZWxsKCAnZGVzY3JpcHRpb24nICkgLiB0ZCgkZGVz Y3JpcHRpb24pKQoJLiB0ciggdGRhKGdUeHQoJ3BsdWdpbl9oZWxwJykuYnIuYnIuJHZoZWxw bGluaywgJyBjbGFzcz0ibm9saW5lIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRp Y2FsLWFsaWduOiBtaWRkbGU7IicpIC4gdGQoJGhlbHApKQoJLiB0ciggZkxhYmVsQ2VsbCgg J2NzcycgKSAuIHRkKCRjc3MpKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgk c3ViKSkKCgkuICggKCEkZWRpdGZpbGUpPyB0ciggdGRjcygnPGhyPicsMikpCgkuIHRyKCBm TGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCdVdGlsaXRpZXMgKDxzdHJvbmc+dXNlIG9ubHkg YWZ0ZXIgc2F2aW5nIHRoZSBkYXRhIGFib3ZlPC9zdHJvbmc+KTonKSkKCgkuIHRyKCBmTGFi ZWxDZWxsKCAncGx1Z2luIGNvZGU8YnI+Zm9yIGRpc3RyaWJ1dGlvbicgKSAuIHRkKCRkaXN0 cmlidXRpb24pKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc2xpbmspKQoJ LiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ppcGxpbmspKQoJLiB0ciggZkxh YmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3BocGxpbmspKSA6ICcnKQoJLiBlbmRUYWJsZSgp CgkuIHNJbnB1dCgnaWVkX3BsdWdpbl9zYXZlJykKCS4gZUlucHV0KCdpZWRfcGx1Z2luX2Nv bXBvc2VyJykKCS4gaElucHV0KCduYW1lJywkbmFtZSkpOwp9CgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0 aW9uIGllZF9wbHVnaW5fc2F2ZSgpIHsKCWV4dHJhY3QoZG9TbGFzaChncHNhKGFycmF5KCdu YW1lJywnbmV3bmFtZScsJ2ZpbGVuYW1lJywnY29kZScsJ2F1dGhvcicsJ2F1dGhvcl91cmkn LCd2ZXJzaW9uJywnZGVzY3JpcHRpb24nLCdoZWxwJywnY3NzJywnc3RhdHVzJywndHlwZScp KSkpOwoJJHN0YXJ0X2NzcyA9ICIvLyAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0iOwoJJGVu ZF9jc3MgPSAiLy8gLS0tIEVORCBQTFVHSU4gQ1NTIC0tLSI7CgoJaWYgKGVtcHR5KCRmaWxl bmFtZSkpIHsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsIm5hbWU9JyRuZXduYW1lJyIs ICJuYW1lPSckbmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImNvZGU9JyRj b2RlJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIs ImF1dGhvcj0nJGF1dGhvciciLCAibmFtZT0nJG5ld25hbWUnIik7CgkJc2FmZV91cGRhdGUo InR4cF9wbHVnaW4iLCJhdXRob3JfdXJpPSckYXV0aG9yX3VyaSciLCAibmFtZT0nJG5ld25h bWUnIik7CgkJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJ2ZXJzaW9uPSckdmVyc2lvbici LCAibmFtZT0nJG5ld25hbWUnIik7CgkJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJkZXNj cmlwdGlvbj0nJGRlc2NyaXB0aW9uJyIsICJuYW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3Vw ZGF0ZSgidHhwX3BsdWdpbiIsImhlbHA9JyIuJGhlbHAuKCgkY3NzKSA/IG4uJHN0YXJ0X2Nz cy5uLiRjc3Mubi4kZW5kX2NzczonJykuIiciLCAibmFtZT0nJG5ld25hbWUnIik7CgkJc2Fm ZV91cGRhdGUoInR4cF9wbHVnaW4iLCJzdGF0dXM9JyRzdGF0dXMnIiwgIm5hbWU9JyRuZXdu YW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBfcGx1Z2luIiwidHlwZT0nJHR5cGUnIiwgIm5h bWU9JyRuZXduYW1lJyIpOwoJfSBlbHNlIHsKCQkkZmlsZWNvbnRlbnQgPSBmaWxlKCRHTE9C QUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJGZpbGVuYW1lKTsKCQkkZmls ZWNvbnRlbnQgPSBpZWRfcGx1Z2luX21ha2VfYXJyYXkoJGZpbGVjb250ZW50KTsKCQkkbWV0 YXZhcnMgPSBhcnJheSgibmFtZSIgPT4gIiRuZXduYW1lIiwKCQkJCQkJCQkidmVyc2lvbiIg PT4gIiR2ZXJzaW9uIiwKCQkJCQkJCQkiYXV0aG9yIiA9PiAiJGF1dGhvciIsCgkJCQkJCQkJ ImF1dGhvcl91cmkiID0+ICIkYXV0aG9yX3VyaSIsCgkJCQkJCQkJImRlc2NyaXB0aW9uIiA9 PiAiJGRlc2NyaXB0aW9uIiwKCQkJCQkJCQkidHlwZSIgPT4gIiR0eXBlIgoJCQkJCQkpOwoJ CSRodW5rdmFycyA9IGFycmF5KCJDU1MiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4n LCcKJywkY3NzKSksCgkJCQkJCQkJIkhFTFAiID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xy XG4nLCcKJywkaGVscCkpLAoJCQkJCQkJCSJDT0RFIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNl KCdcclxuJywnCicsJGNvZGUpKSwgLy8gd29ya2Fyb3VuZAoJCQkJCQkpOwoJCWZvcmVhY2gg KCRtZXRhdmFycyBhcyAkdmFybmFtZSA9PiAkdmFsdWUpIHsKCQkJZm9yKCRpZHggPSAwOyAk aWR4IDwgY291bnQoJGZpbGVjb250ZW50KTsgJGlkeCsrKSB7CgkJCQlpZiAoc3RycG9zKCRm aWxlY29udGVudFskaWR4XSwgJyRwbHVnaW5bXCcnLiR2YXJuYW1lLidcJ10nKSA9PT0gMCkg ewoJCQkJCSRmaWxlY29udGVudFskaWR4XSA9ICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCdd ID0gJy5kb1F1b3RlKCR2YWx1ZSkuJzsnOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJ CWZvcmVhY2ggKCRodW5rdmFycyBhcyAkdmFybmFtZSA9PiAkaHVuaykgewoJCQkkc3RhcnRf ZGVsaW0gPSAiIyAtLS0gQkVHSU4gUExVR0lOICR2YXJuYW1lIC0tLSI7CgkJCSRlbmRfZGVs aW0gPSAiIyAtLS0gRU5EIFBMVUdJTiAkdmFybmFtZSAtLS0iOwoJCQkkc3RhcnQgPSBhcnJh eV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkZmlsZWNvbnRlbnQpICsgMTsKCQkJJGVuZCA9IGFy cmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkZmlsZWNvbnRlbnQpOwoJCQlhcnJheV9zcGxpY2Uo JGZpbGVjb250ZW50LCAkc3RhcnQsICRlbmQtJHN0YXJ0LCAkaHVuayk7CgkJfQoJCSRmaWxl Y29udGVudCA9IGltcGxvZGUoIlxuIiwgJGZpbGVjb250ZW50KTsKCQkkZmggPSBmb3Blbigk R0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLiRmaWxlbmFtZSwgJ3cr Jyk7CgkJZndyaXRlKCRmaCwgJGZpbGVjb250ZW50KTsKCQlmY2xvc2UoJGZoKTsKCX0KCWll ZF9wbHVnaW5fZWRpdChtZXNzZW5nZXIoJ3BsdWdpbicsJG5ld25hbWUsJ3NhdmVkJykpOwp9 CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fY3JlYXRlX25ldygpIHsKCWV4dHJh Y3QoZG9TbGFzaChncHNhKGFycmF5KCduYW1lJykpKSk7CglpZiAoJG5hbWU9PScnKSB7CgkJ aWVkX3BsdWdpbl9saXN0KCdZb3UgYXJlIHN1cHBvc2VkIHRvIG5hbWUgdGhlIG5ldyBwbHVn aW4gOyknKTsKCQlyZXR1cm47Cgl9CgkkZXhpc3RzID0gZmV0Y2goJ25hbWUnLCd0eHBfcGx1 Z2luJywnbmFtZScsJG5hbWUpOwoJaWYgKCEkZXhpc3RzKSB7CgkJc2FmZV9pbnNlcnQoInR4 cF9wbHVnaW4iLCAiCgkJCW5hbWU9JyRuYW1lJywKCQkJc3RhdHVzPScwJywKCQkJdHlwZT0n MCcsCgkJCXZlcnNpb249JzAuMScKCQkiKTsKCQlwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lu cycpLCAnZWRpdCB5b3VyIG5ldyBwbHVnaW4nKTsKCQllY2hvIGllZF9wbHVnaW5fZWRpdF9m b3JtKCRuYW1lKTsKCX0gZWxzZSB7CgkJaWVkX3BsdWdpbl9saXN0KGdUeHQoJ3BsdWdpbicp LicgPHN0cm9uZz4nLiRuYW1lLic8L3N0cm9uZz4gJy5nVHh0KCdhbHJlYWR5X2V4aXN0cycp KTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSgp IHsKCWlmIChncHMoJ25hbWUnKSkgewoJCSRuYW1lID0gZ3BzKCduYW1lJyk7CgkJJGRlc2Ny aXB0aW9uID0gKCRuYW1lKSA/IGZldGNoKCdkZXNjcmlwdGlvbicsJ3R4cF9wbHVnaW4nLCdu YW1lJywkbmFtZSkgOiAnJzsKCQkkYXV0aG9yID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3In LCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGF1dGhvcl91cmkgPSAoJG5h bWUpID8gZmV0Y2goJ2F1dGhvcl91cmknLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDog Jyc7CgkJJHZlcnNpb24gPSAoJG5hbWUpID8gZmV0Y2goJ3ZlcnNpb24nLCd0eHBfcGx1Z2lu JywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGNvZGUgPSAoJG5hbWUpID8gZmV0Y2goJ2NvZGUn LCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGhlbHAgPSAoJG5hbWUpID8g ZmV0Y2goJ2hlbHAnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHR5cGUg PSAoJG5hbWUpID8gZmV0Y2goJ3R5cGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDog Jyc7CgkJbGlzdCgkY3NzLCRoZWxwKSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3Rf aHVuaygkaGVscCwgIkNTUyIsICIvLyIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOwoJfSBl bHNlaWYgKGdwcygnZmlsZW5hbWUnKSkgewoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFkX2Zp bGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVu YW1lJykpOwoJCWV4dHJhY3QoJHBsdWdpbik7Cgl9CgkkemlwID0gZ3BzKCd6aXAnKTsKCWlm IChncHMoJ3RyaW0nKT09MSkgewoJCSRjb2RlPWV4cGxvZGUoIlxyXG4iLCRjb2RlKTsKCQkk Y29kZT1hcnJheV9tYXAoJ3RyaW0nLCRjb2RlKTsKCQkkY29kZT1pbXBsb2RlKCJcclxuIiwk Y29kZSk7Cgl9CgoJaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW4iKTsKCWhlYWRl cignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicgLiAkbmFt ZS4nX3YnLiR2ZXJzaW9uLiAoKCR6aXApPydfemlwJzonJykgLiAnLnR4dCcpOwoKCSR0eXBl cyA9IGFycmF5KCAnQ2xpZW50IHNpZGUnICwgJ0FkbWluICsgQ2xpZW50JyAsICdMaWJyYXJ5 JyApOwoJJHBsdWdpblsnbmFtZSddID0gJG5hbWU7CgkkcGx1Z2luWydhdXRob3InXSA9ICRh dXRob3I7CgkkcGx1Z2luWydhdXRob3JfdXJpJ10gPSAkYXV0aG9yX3VyaTsKCSRwbHVnaW5b J3ZlcnNpb24nXSA9ICR2ZXJzaW9uOwoJJHBsdWdpblsnZGVzY3JpcHRpb24nXSA9ICRkZXNj cmlwdGlvbjsKCSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwoJJHBsdWdpblsndHlwZSddID0g JHR5cGU7CgkkcGx1Z2luWydoZWxwJ10gPSBpZWRfcGx1Z2luX3RleHRpbGUoJGhlbHAsICRj c3MpOwoJJHBsdWdpblsnbWQ1J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUnXSApOwoKCWVjaG8g JyMgTmFtZTogJy4kbmFtZS4nIHYnLiR2ZXJzaW9uLicgJy4oKCR6aXApID8gIihjb21wcmVz c2VkKSIgOiAiIikuJwojIFR5cGU6ICcuJHR5cGVzWyR0eXBlXS4nIHBsdWdpbgojICcuJGRl c2NyaXB0aW9uLicKIyBBdXRob3I6ICcuJGF1dGhvci4nCiMgVVJMOiAnLiRhdXRob3JfdXJp LicKCiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uCiMgVGhpcyBpcyBhIHBsdWdpbiBmb3IgVGV4dHBhdHRl cm4gLSBodHRwOi8vdGV4dHBhdHRlcm4uY29tLwojIFRvIGluc3RhbGw6IHRleHRwYXR0ZXJu ID4gYWRtaW4gPiBwbHVnaW5zCiMgUGFzdGUgdGhlIGZvbGxvd2luZyB0ZXh0IGludG8gdGhl IFwnSW5zdGFsbCBwbHVnaW5cJyBib3g6CiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgonLigoJHppcCkg PyBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGd6ZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2lu KSkpLCA3MikgOiBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2lu KSksIDcyKSk7CgoJZGllKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9z YXZlX2FzX3BocF9maWxlKCkgewoJZ2xvYmFsICRwcmVmczsKCgkkbmFtZSA9IGdwcygnbmFt ZScpOwoJJGRlc2NyaXB0aW9uID0gKCRuYW1lKSA/IGZldGNoKCdkZXNjcmlwdGlvbicsJ3R4 cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCSRhdXRob3IgPSAoJG5hbWUpID8gZmV0 Y2goJ2F1dGhvcicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCSRhdXRob3Jf dXJpID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3JfdXJpJywndHhwX3BsdWdpbicsJ25hbWUn LCRuYW1lKSA6ICcnOwoJJHZlcnNpb24gPSAoJG5hbWUpID8gZmV0Y2goJ3ZlcnNpb24nLCd0 eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkkY29kZSA9ICgkbmFtZSkgPyBmZXRj aCgnY29kZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCSRoZWxwID0gKCRu YW1lKSA/IGZldGNoKCdoZWxwJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJ JHR5cGUgPSAoJG5hbWUpID8gZmV0Y2goJ3R5cGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5h bWUpIDogJyc7CglsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5fZXh0 cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIi8vIiwgdHJ1ZSkgOiBhcnJheSgnJywkaGVscCk7 Cgkkb3JkZXIgPSAoaXNzZXQoJHByZWZzWydpZWRfcGx1Z2luX291dHB1dF9vcmRlciddKSAm JiBpc19udW1lcmljKCRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSkpID8gJHBy ZWZzWydpZWRfcGx1Z2luX291dHB1dF9vcmRlciddIDogMDsKCgloZWFkZXIoIkNvbnRlbnQt dHlwZTogdGV4dC9waHAiKTsKCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNo bWVudDsgZmlsZW5hbWU9IicgLiAkbmFtZS4nX3YnLiR2ZXJzaW9uLiAnLnBocCcpOwoKCSRo ZWxwY2h1bmsgPSAnaWYgKDApIHsnLm4KLic/PicubgouJzwhLS0gQ1NTIFNFQ1RJT04nLm4K LicjIC0tLSBCRUdJTiBQTFVHSU4gQ1NTIC0tLScubgouJGNzcy5uCi4nIyAtLS0gRU5EIFBM VUdJTiBDU1MgLS0tJy5uCi4nLS0+Jy5uCi4nPCEtLSBIRUxQIFNFQ1RJT04nLm4KLicjIC0t LSBCRUdJTiBQTFVHSU4gSEVMUCAtLS0nLm4KLiRoZWxwLm4KLicjIC0tLSBFTkQgUExVR0lO IEhFTFAgLS0tJy5uCi4nLS0+Jy5uCi4nPD9waHAnLm4KLid9Jy5uOwoKCSRjb2RlY2h1bmsg PSAnIyAtLS0gQkVHSU4gUExVR0lOIENPREUgLS0tJy5uCi4kY29kZS5uCi4nIyAtLS0gRU5E IFBMVUdJTiBDT0RFIC0tLScubjsKCgllY2hvICc8P3BocCcubgouJy8vIFRoaXMgaXMgYSBQ TFVHSU4gVEVNUExBVEUuJy5uCi4nLy8gQ29weSB0aGlzIGZpbGUgdG8gYSBuZXcgbmFtZSBs aWtlIGFiY19teXBsdWdpbi5waHAuICBFZGl0IHRoZSBjb2RlLCB0aGVuJy5uCi4nLy8gcnVu IHRoaXMgZmlsZSBhdCB0aGUgY29tbWFuZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9y IGRpc3RyaWJ1dGlvbjonLm4KLicvLyAkIHBocCBhYmNfbXlwbHVnaW4ucGhwID4gYWJjX215 cGx1Z2luLTAuMS50eHQnLm4KLm4KLicvLyBQbHVnaW4gbmFtZSBpcyBvcHRpb25hbC4gIElm IHVuc2V0LCBpdCB3aWxsIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBjdXJyZW50Jy5uCi4nLy8g ZmlsZSBuYW1lLiBVbmNvbW1lbnQgYW5kIGVkaXQgdGhpcyBsaW5lIHRvIG92ZXJyaWRlOicu bgouJyRwbHVnaW5bXCduYW1lXCddID0gJy5kb1F1b3RlKCRuYW1lKS4nOycubgouJyRwbHVn aW5bXCd2ZXJzaW9uXCddID0gJy5kb1F1b3RlKCR2ZXJzaW9uKS4nOycubgouJyRwbHVnaW5b XCdhdXRob3JcJ10gPSAnLmRvUXVvdGUoJGF1dGhvcikuJzsnLm4KLickcGx1Z2luW1wnYXV0 aG9yX3VyaVwnXSA9ICcuZG9RdW90ZSgkYXV0aG9yX3VyaSkuJzsnLm4KLickcGx1Z2luW1wn ZGVzY3JpcHRpb25cJ10gPSAnLmRvUXVvdGUoJGRlc2NyaXB0aW9uKS4nOycubgoubgouJy8v IFBsdWdpbiB0eXBlczonLm4KLicvLyAwID0gcmVndWxhciBwbHVnaW47IGxvYWRlZCBvbiB0 aGUgcHVibGljIHdlYiBzaWRlIG9ubHknLm4KLicvLyAxID0gYWRtaW4gcGx1Z2luOyBsb2Fk ZWQgb24gYm90aCB0aGUgcHVibGljIGFuZCBhZG1pbiBzaWRlJy5uCi4nLy8gMiA9IGxpYnJh cnk7IGxvYWRlZCBvbmx5IHdoZW4gaW5jbHVkZV9wbHVnaW4oKSBvciByZXF1aXJlX3BsdWdp bigpIGlzIGNhbGxlZCcubgouJyRwbHVnaW5bXCd0eXBlXCddID0gJy5kb1F1b3RlKCR0eXBl KS4nOycubgoubgouJ0BpbmNsdWRlX29uY2UoXCd6ZW1fdHBsLnBocFwnKTsnLm4KLm4KLigo JG9yZGVyID09IDApID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspCi4oKCRvcmRlciA9PSAx KSA/ICRjb2RlY2h1bmsgOiAkaGVscGNodW5rKQouJz8+JzsKCWRpZSgpOwp9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fdXBsb2FkKCkgewoJJHN0YXJ0X2NzcyA9ICIvLyAt LS0gQkVHSU4gUExVR0lOIENTUyAtLS0iOwoJJGVuZF9jc3MgPSAiLy8gLS0tIEVORCBQTFVH SU4gQ1NTIC0tLSI7CgoJaWYgKCEkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9uYW1lJ10pIHsK CQlpZWRfcGx1Z2luX2xpc3QoJ1lvdSBhcmUgc3VwcG9zZWQgdG8gY2hvb3NlIHRoZSBmaWxl IDspJyk7cmV0dXJuOwoJfQoJJHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRfRklM RVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSk7CgkkbmV3bmFtZSA9IChlbXB0eSgkcGx1Z2lu WyduYW1lJ10pKSA/IGJhc2VuYW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsnbmFtZSddLCAnLnBo cCcpIDogJHBsdWdpblsnbmFtZSddOwoJaWYgKGdwcygnbmFtZScpIGFuZCBncHMoJ25hbWUn KSE9J3h4eF94eHh4eHgnKSB7CgkJJG5ld25hbWU9Z3BzKCduYW1lJyk7Cgl9CglpZiAoZW1w dHkoJHBsdWdpblsnY29kZSddKSkgewoJCSRwbHVnaW5bJ2NvZGUnXSA9IGltcGxvZGUgKCIi LCBmaWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkpOwoJfQoKCWlmIChNQUdJ Q19RVU9URVNfR1BDKSB7CgkJZm9yZWFjaCAoJHBsdWdpbiBhcyAkaXRlbSA9PiAkdmFsdWUp IHsKCQkJJHBsdWdpblskaXRlbV0gPSBhZGRzbGFzaGVzKCR2YWx1ZSk7CgkJfQoJfQoJZXh0 cmFjdCgkcGx1Z2luKTsKCSRtZDU9bWQ1KCRjb2RlKTsKCSR2ZXJzaW9uID0gKGVtcHR5KCR2 ZXJzaW9uKSkgPyAiMC4xIiA6ICR2ZXJzaW9uOwoJJGhlbHAgPSAkaGVscC4oKCRjc3MpID8g bi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzIDogJycpOwoJJGV4aXN0cyA9IGZldGNo KCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuZXduYW1lKTsKCWlmICgkZXhpc3RzKSB7 CgkJJHN0YXR1cyA9IGZldGNoKCdzdGF0dXMnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5ld25h bWUpOwoJCSRycyA9IHNhZmVfdXBkYXRlKAoJCQkidHhwX3BsdWdpbiIsCgkJCSJzdGF0dXMg ICAgICA9ICckc3RhdHVzJywKCQkJdHlwZSAgICAgICAgID0gJyR0eXBlJywKCQkJYXV0aG9y ICAgICAgID0gJyRhdXRob3InLAoJCQlhdXRob3JfdXJpICAgPSAnJGF1dGhvcl91cmknLAoJ CQl2ZXJzaW9uICAgICAgPSAnJHZlcnNpb24nLAoJCQlkZXNjcmlwdGlvbiAgPSAnJGRlc2Ny aXB0aW9uJywKCQkJaGVscCAgICAgICAgID0gJyRoZWxwJywKCQkJY29kZSAgICAgICAgID0g JyRjb2RlJywKCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywKCQkJY29kZV9tZDUgICAgID0g JyRtZDUnIiwKCQkJIm5hbWUgICAgICAgID0gJyRuZXduYW1lJyIKCQkpOwoJfSBlbHNlIHsK CQkkcnMgPSBzYWZlX2luc2VydCgKCQkJInR4cF9wbHVnaW4iLAoJCQkibmFtZSAgICAgICAg ID0gJyRuZXduYW1lJywKCQkJc3RhdHVzICAgICAgID0gMCwKCQkJdHlwZSAgICAgICAgID0g JyR0eXBlJywKCQkJYXV0aG9yICAgICAgID0gJyRhdXRob3InLAoJCQlhdXRob3JfdXJpICAg PSAnJGF1dGhvcl91cmknLAoJCQl2ZXJzaW9uICAgICAgPSAnJHZlcnNpb24nLAoJCQlkZXNj cmlwdGlvbiAgPSAnJGRlc2NyaXB0aW9uJywKCQkJaGVscCAgICAgICAgID0gJyRoZWxwJywK CQkJY29kZSAgICAgICAgID0gJyRjb2RlJywKCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywK CQkJY29kZV9tZDUgICAgID0gJyRtZDUnIgoJCSk7Cgl9CgoJcGFnZXRvcChnVHh0KCdlZGl0 X3BsdWdpbnMnKSwgbWVzc2VuZ2VyKCdwbHVnaW4nLCRuZXduYW1lLCgkZXhpc3RzKT8ndXBk YXRlZCc6J3VwbG9hZGVkJykpOwoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9ybSgkbmV3bmFt ZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJGZpbGVw YXRoKSB7CgkkY29udGVudCA9IGZpbGUoJGZpbGVwYXRoKTsKCSRzb3VyY2VfbGluZXMgPSBj b3VudCgkY29udGVudCk7CgkkbWV0YWRhdGEgPSBhcnJheSgKCQkJCQkJJ25hbWUnID0+ICcn LAoJCQkJCQkndmVyc2lvbicgPT4gJycsCgkJCQkJCSdhdXRob3InID0+ICcnLAoJCQkJCQkn YXV0aG9yX3VyaScgPT4gJycsCgkJCQkJCSdkZXNjcmlwdGlvbicgPT4gJycsCgkJCQkJCSd0 eXBlJyA9PiAnJywKCQkJCQkpOwoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291cmNlX2xpbmVz OyAkaWR4KyspIHsKCQkkY29udGVudFskaWR4XSA9IHJ0cmltKCRjb250ZW50WyRpZHhdKTsK CQlpZiAoc3RycG9zKCRjb250ZW50WyRpZHhdLCAnJHBsdWdpblsnKSA9PT0gMCkgewoJCQkv LyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJsZSBzbyBleHRyYWN0IGl0CgkJCSRwYXJ0cyA9IGV4 cGxvZGUoIiA9ICIsICRjb250ZW50WyRpZHhdKTsKCQkJJHBhcnRzWzBdID0gc3RyX3JlcGxh Y2UoIiciLCAiIiwgJHBhcnRzWzBdKTsKCQkJcHJlZ19tYXRjaCgiL3BsdWdpblxbKC4qKVxd LyIsICRwYXJ0c1swXSwgJHZhcik7CgkJCSR2YWwgPSB0cmltKCRwYXJ0c1sxXSwgIic7Iik7 CgkJCSRtZXRhZGF0YVskdmFyWzFdXSA9ICR2YWw7CgkJfQoJfQoJJG1ldGFkYXRhWydoZWxw J10gPSBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkY29udGVudCwgJ0hFTFAnKTsKCSRtZXRh ZGF0YVsnY3NzJ10gID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRlbnQsICdDU1Mn ICk7CgkkbWV0YWRhdGFbJ2NvZGUnXSA9IGllZF9wbHVnaW5fZXh0cmFjdF9odW5rKCRjb250 ZW50LCAnQ09ERScpOwoKCXJldHVybiAkbWV0YWRhdGE7Cn0KCi8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gcmlw cGVkIGFuZCBtb2RkZWQgZnJvbSBuZXQtY2FydmVyJ3MgdmVyc2lvbiBvZiB0aGUgdGhlIHpl bV90cGwgdGVtcGxhdGUKZnVuY3Rpb24gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRl bnQsICRodW5rLCAkY21udD0iIyIsICRkZWxldGU9ZmFsc2UpIHsKCSRsaW5lcyA9IGllZF9w bHVnaW5fbWFrZV9hcnJheSgkY29udGVudCk7Cgkkc3RhcnRfZGVsaW0gPSAiJGNtbnQgLS0t IEJFR0lOIFBMVUdJTiAkaHVuayAtLS0iOwoJJGVuZF9kZWxpbSA9ICIkY21udCAtLS0gRU5E IFBMVUdJTiAkaHVuayAtLS0iOwoJJHN0YXJ0ID0gYXJyYXlfc2VhcmNoKCRzdGFydF9kZWxp bSwgJGxpbmVzKSArIDE7CgkkZW5kID0gYXJyYXlfc2VhcmNoKCRlbmRfZGVsaW0sICRsaW5l cyk7CgkkZXh0cmFjdGVkID0gYXJyYXkoKTsKCWlmIChpc19udW1lcmljKCRzdGFydCkgJiYg aXNfbnVtZXJpYygkZW5kKSAmJiAkZW5kID4gJHN0YXJ0KSB7CgkJJGV4dHJhY3RlZCA9IGFy cmF5X3NsaWNlKCRsaW5lcywgJHN0YXJ0LCAkZW5kLSRzdGFydCk7CgkJJGxpbmVOdW0gPSBj b3VudCgkZXh0cmFjdGVkKS0xOwoJCXdoaWxlICh0cmltKCRleHRyYWN0ZWRbJGxpbmVOdW0t LV0pID09ICIiKSB7CgkJCWFycmF5X3BvcCgkZXh0cmFjdGVkKTsKICAgICAgfQoJCXdoaWxl ICh0cmltKCRleHRyYWN0ZWRbMF0pID09ICIiKSB7CgkJCWFycmF5X3NoaWZ0KCRleHRyYWN0 ZWQpOwogICAgICB9CgkJaWYgKCRkZWxldGUpIHsKCQkJJGNob3BwZWQgPSBhcnJheV9zcGxp Y2UoJGxpbmVzLCAkc3RhcnQtMSwgJGVuZC0kc3RhcnQrMiwgIiIpOwoJCX0KCX0KCSRyZW1h aW5zID0gJGxpbmVzOwoJLy8gQ2hlY2sgaWYgdGhlIENTUyBzZWN0aW9uIGhhcyA8c3R5bGU+ IHRhZ3MgYXJvdW5kIGl0OyBhZGQgdGhlbSBpZiBub3QKCWlmICgkaHVuayA9PSAiQ1NTIikg ewoJCSRudW1yb3dzID0gY291bnQoJGV4dHJhY3RlZCk7CgkJaWYgKCRudW1yb3dzID4gMSkg ewoJCQlpZiAoc3RycG9zKCRleHRyYWN0ZWRbJG51bXJvd3MtMV0sICc8L3N0eWxlPicpID09 PSBmYWxzZSkgewoJCQkJJGV4dHJhY3RlZFtdID0gJzwvc3R5bGU+JzsKCQkJfQoJCQlpZiAo c3RycG9zKCRleHRyYWN0ZWRbMF0sICc8c3R5bGUgJykgPT09IGZhbHNlKSB7CgkJCQlhcnJh eV91bnNoaWZ0KCRleHRyYWN0ZWQsICc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPicpOwoJCQl9 CgkJfQogICB9CglpZiAoJGRlbGV0ZSkgewoJCXJldHVybiBhcnJheSh0cmltKGpvaW4oIlxu IiwgJGV4dHJhY3RlZCkpLCB0cmltKGpvaW4oIlxuIiwgJHJlbWFpbnMpKSk7Cgl9IGVsc2Ug ewoJCXJldHVybiB0cmltKGpvaW4oIlxuIiwgJGV4dHJhY3RlZCkpOwoJfQp9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fbWFrZV9hcnJheSgkYXJyKSB7CglpZiAoIWlzX2Fy cmF5KCRhcnIpKSB7CgkJJGFyciA9IGV4cGxvZGUoIlxuIiwgJGFycik7Cgl9Cgkkc291cmNl X2xpbmVzID0gY291bnQoJGFycik7Cglmb3IgKCRpZHg9MDsgJGlkeCA8ICRzb3VyY2VfbGlu ZXM7ICRpZHgrKykgewoJCSRhcnJbJGlkeF0gPSBydHJpbSgkYXJyWyRpZHhdKTsKCX0KCXJl dHVybiAkYXJyOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fdGV4dGlsZSgk aGVscCwgJGNzcykgewoJQGluY2x1ZGVfb25jZSB0eHBhdGguJy9saWIvY2xhc3NUZXh0aWxl LnBocCc7Cgkkb3V0ID0gJyc7CglpZiAoY2xhc3NfZXhpc3RzKCdUZXh0aWxlJykpIHsKCQkk dGV4dGlsZSA9IG5ldyBUZXh0aWxlKCk7CgkJJG91dCA9ICIkY3NzXG4iLiR0ZXh0aWxlLT5U ZXh0aWxlVGhpcygkaGVscCk7Cgl9CglyZXR1cm4gJG91dDsKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5j dGlvbiBpZWRfaW5zZXJ0X2VkaXRvcnMoKSB7CglnbG9iYWwgJHByZWZzLCAkaWVkX3BsdWdp bl9wcmVmczsKCSRvdXQgPSBhcnJheSgpOwoKCSRwcmVma2V5cyA9IGRvUXVvdGUoaW1wbG9k ZSgiJywnIixhcnJheV9rZXlzKCRpZWRfcGx1Z2luX3ByZWZzWzBdKSkpOwoJJHJzID0gc2Fm ZV9yb3dzKCduYW1lLHZhbCxodG1sJywndHhwX3ByZWZzJywnbmFtZSBpbiAoJy4kcHJlZmtl eXMuJyknKTsKCWlmIChjb3VudCgkcnMpID09IGNvdW50KCRpZWRfcGx1Z2luX3ByZWZzWzBd KSkgewoJCSRlZCA9IGFycmF5KCk7CgkJJGVkWyRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3In XV0gPSAkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnXTsKCQkkZWRbJHByZWZzWydp ZWRfcGx1Z2luX2hlbHBfZWRpdG9yJ11dID0gJHByZWZzWydpZWRfcGx1Z2luX2hlbHBfZWRp dG9yX3BhdGgnXTsKCgkJZm9yZWFjaCAoJGVkIGFzICRlZGl0b3IgPT4gJGVkaXRvcl9kaXIp IHsKCQkJc3dpdGNoICgkZWRpdG9yKSB7CgkJCQljYXNlICJ0aW55X21jZSI6CgkJCQkJJG91 dFtdID0gPDw8RU9GCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJGVk aXRvcl9kaXIuJy90aW55X21jZS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0Ij4KCXRpbnlNQ0UuaW5pdCh7CgkJbW9kZSA6ICJzcGVjaWZpY190ZXh0YXJl YXMiLAoJCWVkaXRvcl9zZWxlY3RvciA6ICJtY2VFZGl0b3IiLAoJCXRoZW1lX2FkdmFuY2Vk X3Rvb2xiYXJfbG9jYXRpb24gOiAidG9wIiwKCQl0aGVtZV9hZHZhbmNlZF9idXR0b25zMSA6 ICJib2xkLGl0YWxpYyx1bmRlcmxpbmUsc3RyaWtldGhyb3VnaCxmb3JlY29sb3IsYmFja2Nv bG9yLHJlbW92ZWZvcm1hdCxudW1saXN0LGJ1bGxpc3Qsb3V0ZGVudCxpbmRlbnQsanVzdGlm eWxlZnQsanVzdGlmeWNlbnRlcixqdXN0aWZ5cmlnaHQsanVzdGlmeWZ1bGwiLAoJCXRoZW1l X2FkdmFuY2VkX2J1dHRvbnMyIDogImxpbmssdW5saW5rLHNlcGFyYXRvcixpYnJvd3Nlcixz ZXBhcmF0b3Isc2VhcmNoLHJlcGxhY2Usc2VwYXJhdG9yLGN1dCxjb3B5LHBhc3RlLHNlcGFy YXRvcixjb2RlLHNlcGFyYXRvcixmb3JtYXRzZWxlY3QiLAoJCXRoZW1lX2FkdmFuY2VkX2J1 dHRvbnMzIDogIiIKCX0pOwo8L3NjcmlwdD47CkVPRjsKCQkJCQlicmVhazsKCQkJCWNhc2Ug ImVkaXRfYXJlYSI6CgkJCQkJJG91dFtdID0gPDw8RU9GCjxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0IiBzcmM9IiRlZGl0b3JfZGlyL2VkaXRfYXJlYV9mdWxsLmpzIj48L3Njcmlw dD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJLy8gaW5pdGlhbGlzYXRpb24K CWVkaXRBcmVhTG9hZGVyLmluaXQoewoJCWlkOiAicGx1Z2luX2VkaXRvciIJLy8gaWQgb2Yg dGhlIHRleHRhcmVhIHRvIHRyYW5zZm9ybQoJCSxzdGFydF9oaWdobGlnaHQ6IHRydWUJLy8g aWYgc3RhcnQgd2l0aCBoaWdobGlnaHQKCQksYWxsb3dfcmVzaXplOiAiYm90aCIKCQksYWxs b3dfdG9nZ2xlOiB0cnVlCgkJLGxhbmd1YWdlOiAiZW4iCgkJLHN5bnRheDogInBocCIKCX0p Owo8L3NjcmlwdD4KRU9GOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiY29kZXByZXNzIjoKCQkJ CQkkb3V0W10gPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kZWRp dG9yX2Rpci4nL2NvZGVwcmVzcy5qcyI+PC9zY3JpcHQ+JzsKCQkJCQlicmVhazsKCQkJfQoJ CX0KCX0KCglyZXR1cm4gaW1wbG9kZSgiXG4iLCAkb3V0KTsKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5j dGlvbiBpZWRfcGx1Z2luX2hlbHBfdmlld2VyKCRtZXNzYWdlPScnKSB7CglwYWdldG9wKGdU eHQoJ2VkaXRfcGx1Z2lucycpLCRtZXNzYWdlKTsKCglpZiAoZ3BzKCduYW1lJykpIHsKCQkk bmFtZSA9IGdwcygnbmFtZScpOwoJCSRoZWxwID0gKCRuYW1lKSA/IGZldGNoKCdoZWxwJywn dHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCWxpc3QoJGNzcywkaGVscCkgPSAo JGhlbHApID8gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiLy8iLCB0 cnVlKSA6IGFycmF5KCcnLCRoZWxwKTsKCX0gZWxzZSBpZiAoZ3BzKCdmaWxlbmFtZScpKSB7 CgkJJHBsdWdpbj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1 Z2luX2NhY2hlX2RpciddLkRTLmdwcygnZmlsZW5hbWUnKSk7CgkJZXh0cmFjdCgkcGx1Z2lu KTsKCX0KCWVjaG8gc3RhcnRUYWJsZSgnZWRpdCcpOwoJaWYgKGVtcHR5KCRoZWxwKSkgewoJ CWVjaG8gdHIodGRhKCc8cD5IZWxwIG5vdCBhY2Nlc3NpYmxlIGZyb20gdGhpcyBmaWxlLjwv cD4nKSk7Cgl9IGVsc2UgewoJCSRwbHVnaW5bJ2hlbHAnXSA9IGllZF9wbHVnaW5fdGV4dGls ZSgkaGVscCwgJGNzcyk7CgkJZWNobyB0cih0ZGEoICc8cD5FeHRyYWN0ZWQgJy4oIWVtcHR5 KCRwbHVnaW5bJ2hlbHAnXSkgPyAnYW5kIFRleHRpbGUgcHJvY2Vzc2VkJyA6ICcnKS4nIGhl bHAgc2VjdGlvbiBmb2xsb3dzJiM4MjMwOzwvcD48aHI+JywgJyB3aWR0aD0iNjAwIicpKTsK CQllY2hvIHRyKHRkYSgkcGx1Z2luWydoZWxwJ10sICcgd2lkdGg9IjYwMCInKSk7Cgl9Cgll Y2hvIGVuZFRhYmxlKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zZXR1 cCgkbWVzc2FnZT0nJykgewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZzOwoJJG51bVJlcVBy ZWZzID0gY291bnQoJGllZF9wbHVnaW5fcHJlZnNbMF0pOwoKCXBhZ2V0b3AoZ1R4dCgnZWRp dF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJJHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCIn LCciLGFycmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7CgkkcnMgPSBzYWZlX3Jv d3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4n KScpOwoJJG51bVJvd3MgPSBjb3VudCgkcnMpOwoKCSRidG5TYXZlID0gZklucHV0KCdzdWJt aXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2ZScpLCAncHVibGlzaCcpOwoJJGJ0bkluc3RhbGwg PSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBv c2VyJiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6 aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2luc3RhbGwnKSwg J3NtYWxsZXJib3gnKS4nPC9mb3JtPic7CgkkYnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0i cG9zdCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRf cGx1Z2luX3ByZWZzX3JlbW92ZSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgn c3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2RlbGV0ZScpLCAnc21hbGxlcmJveCcpLic8L2Zv cm0+JzsKCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJvcmRlcjowO2hlaWdodDoyNXB4Iic7CgoJ ZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CglpZiAoJG51bVJvd3MgPT0gJG51bVJlcVByZWZz KSB7CgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZAoJCWVjaG8gdHIodGRhKCdQbHVnaW4gQ29t cG9zZXIgcHJlZmVyZW5jZXMuJywgJyBjb2xzcGFuPSIyIicpIC4gdGRhKCRidG5SZW1vdmUg LiAkYnRuSW5zdGFsbCwgJGJ0blN0eWxlKSApOwoJCWVjaG8gJzxmb3JtIG1ldGhvZD0icG9z dCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1 Z2luX3ByZWZzX3VwZGF0ZSI+JzsKCQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgJG51bVJvd3M7 ICRpZHgrKykgewoJCQkkYSA9ICRyc1skaWR4XTsKCQkJJGxhYmVsID0gJzxsYWJlbCBmb3I9 IicuJGFbJ25hbWUnXS4nIj4nLmdUeHQoJGFbJ25hbWUnXSkuJzwvbGFiZWw+JzsKCQkJJG91 dCA9IHRkYSgkbGFiZWwsICcgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyB2ZXJ0aWNhbC1h bGlnbjogbWlkZGxlOyInKTsKCQkJc3dpdGNoKCRhWyduYW1lJ10pIHsKCQkJCWNhc2UgImll ZF9wbHVnaW5fZWRpdG9yX3BhdGgiOgoJCQkJY2FzZSAiaWVkX3BsdWdpbl9oZWxwX2VkaXRv cl9wYXRoIjoKCQkJCQkkb3V0IC49IHRkKGZJbnB1dCgndGV4dCcsICRhWyduYW1lJ10sICRh Wyd2YWwnXSwgJ2VkaXQnLCAnJywgJycsIDUwLCAnJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJy ZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0b3IiOgovLwkJCQkJJG91dCAuPSB0ZChz ZWxlY3RJbnB1dCgkYVsnbmFtZSddLCBhcnJheSgnbm9uZScgPT4gJ05vbmUnLCAnZWRpdF9h cmVhJyA9PiAnRWRpdCBBcmVhJywgJ2NvZGVwcmVzcycgPT4gJ0NvZGVQcmVzcycpLCAkYVsn dmFsJ10pKTsKCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5 KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnKSwgJGFbJ3Zh bCddKSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1Z2luX2hlbHBfZWRpdG9yIjoK CQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCd0ZXh0aWxl JyA9PiAnVGV4dGlsZScsICd0aW55X21jZScgPT4gJ1RpbnkgTUNFJyksICRhWyd2YWwnXSkp OwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIiOgoJCQkJ CSRvdXQgLj0gdGQocmFkaW8oJGFbJ25hbWUnXSwwLCgoJGFbJ3ZhbCddPT0wKT8xOjApKS4i Q29kZSBmaXJzdCAiIC4gcmFkaW8oJGFbJ25hbWUnXSwxLCgoJGFbJ3ZhbCddPT0xKT8xOjAp KS4iSGVscCBmaXJzdCAiKTsKCQkJCQlicmVhazsKCQkJfQoJCQllY2hvIHRyKCRvdXQpOwoJ CX0KCQllY2hvIHRyKHRkYSgkYnRuU2F2ZSwgJGJ0blN0eWxlKSk7CgkJZWNobyAnPC9mb3Jt Pic7Cgl9IGVsc2UgaWYgKCRudW1Sb3dzID4gMCAmJiAkbnVtUm93cyA8ICRudW1SZXFQcmVm cykgewoJCWVjaG8gdHIodGRhKCdTb21lIHByZWZzIGFscmVhZHkgaW5zdGFsbGVkLicuYnIu J0Nob29zZSAnLmdUeHQoJ2RlbGV0ZScpLicgdG8gcmVtb3ZlIHRoZW0gYWxsIG9yICcuZ1R4 dCgnaW5zdGFsbCcpLicgdG8gYWRkJy5ici4ndGhlIG5ldyBvbmVzIGxlYXZpbmcgYWxsIGV4 aXN0aW5nIHByZWZzIHVudG91Y2hlZC4nLCAnIGNvbHNwYW49IjIiJykpOwoJCWVjaG8gdHIo dGRhKCRidG5SZW1vdmUsJGJ0blN0eWxlKSAuIHRkYSgkYnRuSW5zdGFsbCwgJGJ0blN0eWxl KSk7Cgl9IGVsc2UgewoJCWVjaG8gdHIodGRhKCdQcmVmcyBub3QgaW5zdGFsbGVkLicsICcg Y29sc3Bhbj0iMiInKSk7CgkJZWNobyB0cih0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkp OwoJfQoJZWNobyBlbmRUYWJsZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVn aW5fcHJlZnNfaW5zdGFsbCgpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRtZXNz YWdlID0gJyc7Cglmb3JlYWNoICgkaWVkX3BsdWdpbl9wcmVmc1swXSBhcyAkcHJlZiA9PiAk ZGZsdCkgewoJCWlmICghZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMnLCduYW1lJywkcHJlZikp IHsKCQkJJGlkID0gc2FmZV9pbnNlcnQoJ3R4cF9wcmVmcycsJ3ByZWZzX2lkPTEsIG5hbWU9 Jy5kb1F1b3RlKCRwcmVmKS4nLCB2YWw9Jy5kb1F1b3RlKGRvU2xhc2goJGRmbHQpKS4nLGV2 ZW50PSJpZWRfcGx1Z2luIicpOwoJCX0KCX0KCS8vVE9ETzogZ1R4dCgpIHRoaXMKCSRtZXNz YWdlID0gJ1ByZWZlcmVuY2VzIGluc3RhbGxlZCc7CglpZWRfcGx1Z2luX3NldHVwKCRtZXNz YWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZSgp IHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRtZXNzYWdlID0gJyc7Cglmb3JlYWNo IChhcnJheV9tZXJnZSgkaWVkX3BsdWdpbl9wcmVmc1swXSwkaWVkX3BsdWdpbl9wcmVmc1sx XSkgYXMgJHByZWYgPT4gJGRmbHQpIHsKCQlpZiAoZmV0Y2goJ25hbWUnLCd0eHBfcHJlZnMn LCduYW1lJywkcHJlZikpIHsKCQkJJGlkID0gc2FmZV9kZWxldGUoJ3R4cF9wcmVmcycsJ25h bWU9Jy5kb1F1b3RlKCRwcmVmKSk7CgkJfQoJfQoJLy9UT0RPOiBnVHh0KCkgdGhpcwoJJG1l c3NhZ2UgPSAnUHJlZmVyZW5jZXMgZGVsZXRlZCc7CglpZWRfcGx1Z2luX3NldHVwKCRtZXNz YWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZzX3VwZGF0ZSgp IHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRtZXNzYWdlID0gJyc7CgkkcG9zdCA9 IGRvU2xhc2goc3RyaXBQb3N0KCkpOwoJZm9yZWFjaCAoJGllZF9wbHVnaW5fcHJlZnNbMF0g YXMgJHByZWYgPT4gJGRmbHQpIHsKCQlpZiAoaXNzZXQoJHBvc3RbJHByZWZdKSkgewoJCQlz YWZlX3VwZGF0ZSgidHhwX3ByZWZzIiwgInZhbCA9ICciLiRwb3N0WyRwcmVmXS4iJyIsICJu YW1lID0gJyIuZG9TbGFzaCgkcHJlZikuIicgYW5kIHByZWZzX2lkID0gMSIpOwoJCX0KCX0K CSRtZXNzYWdlID0gZ1R4dCgncHJlZmVyZW5jZXNfc2F2ZWQnKTsKCWllZF9wbHVnaW5fc2V0 dXAoJG1lc3NhZ2UpOwp9IjtzOjM6Im1kNSI7czozMjoiYzFhMGNiYTRkMjZlNWE0MmRhZGM1 MGJlMTkxNWI2MWMiO30=