# Name: ied_plugin_composer v0.71 # 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 b24iO3M6NDoiMC43MSI7czo2OiJhdXRob3IiO3M6NDM6Ill1cmEgTGlubnlrIC8gU3RlZiBE YXdzb24gLyBTdGV2ZSBEaWNraW5zb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjM6Imh0dHA6 Ly9pbnNwaXJlZC5raWV2LnVhIjtzOjExOiJkZXNjcmlwdGlvbiI7czozMjoiV3JpdGUgYW5k IHB1Ymxpc2ggcGx1Z2lucyBlYXNpbHkiO3M6NDoidHlwZSI7czoxOiIxIjtzOjQ6ImhlbHAi O3M6MTE5Nzc6Igk8cD48ZGl2IGlkPSJpZWRfaGVscCI+PC9wPgoKCTxoMSBpZD0idG9wIj5J bnNwaXJlZCBwbHVnaW4gY29tcG9zZXI8L2gxPgoKCTxwPlRoaXMgcGx1Z2luIGNyZWF0ZXMg YSBuZXcgcGFnZSB1bmRlciB0aGUgJiM4MjE2O0V4dGVuc2lvbnMmIzgyMTc7IHRhYiB3aGVy ZSB5b3UgY2FuIGVkaXQgcGx1Z2lucyB0aGF0IGFyZSBhbHJlYWR5IGluc3RhbGxlZCBpbiBU ZXh0UGF0dGVybiBhbmQgcmVnaXN0ZXIgbmV3IHBsdWdpbnMuPC9wPgoKCTxoMiBpZD0iZmVh dHVyZXMiPkZlYXR1cmVzPC9oMj4KCgk8dWw+CgkJPGxpPkNyZWF0ZSwgZWRpdCBvciB1cGxv YWQgcGx1Z2luIGNvZGUgYW5kIGhlbHAsIHRoZW4gcHVibGlzaCB0aGUgcmVzdWx0IGluIHRo ZSBzdGFuZGFyZCA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBwbHVnaW4gZm9ybWF0 PC9saT4KCQk8bGk+RnVsbCBzdXBwb3J0IGZvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZk YXdzb24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5fdGVtcGxhdGUudHh0Ij56ZW1fdHBs LnBocCBwbHVnaW4gdGVtcGxhdGU8L2E+LiBUaGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdz b24uY29tL2Rvd25sb2Fkcy9lbXB0eV9wbHVnaW5fdGVtcGxhdGVfY29kZV9maXJzdC50eHQi PmxhdGVzdCByZXZpc2lvbjwvYT4gYnkgPGEgaHJlZj0iaHR0cDovL3R4cC1wbHVnaW5zLm5l dGNhcnZpbmcuY29tL3BsdWdpbnMvbW9kaWZpZWQtcGx1Z2luLWNvbXBpbGVyIj5uZXQtY2Fy dmVyPC9hPiBhbHNvIGluY29ycG9yYXRlcyBhICYjODIxNjtzdHlsZSYjODIxNzsgc2VjdGlv biBmb3IgZWFzeSBzdHlsaW5nIG9mIHlvdXIgaGVscCB0ZXh0LiBUaGUgUGx1Z2luIENvbXBv c2VyIGxvb2tzIGZvciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBzZWN0aW9ucyBp biB0aGUgdGVtcGxhdGUgYW5kIHdpbGwgdXNlIHRoZW0gYWNjb3JkaW5nbHk8L2xpPgoJCTxs aT5FeHBvcnQgYSBwbHVnaW4gYXMgZWl0aGVyIGEgc3RhbmRhcmQgQkFTRTY0LWVuY29kZWQg cGx1Z2luIChub3cgaW4gc3RhbmRhcmQgNzItY2hhciBjaHVuayBtb2RlKSBvciBhcyBhIGd6 aXBwZWQgdmVyc2lvbiBvZiB0aGUgYWJvdmUgKHVzZWZ1bCBmb3IgbGFyZ2UgcGx1Z2lucykg b3IgYXMgYSBwaHAgZmlsZSBpbiB0aGUgc3RhbmRhcmQgdGVtcGxhdGUgZm9ybWF0LiBUaGlz IG1lYW5zIHlvdSBjYW4gc3dpdGNoIGJldHdlZW4gZWRpdGluZyBpbiB0aGUgcGx1Z2luIGNv bXBvc2VyIG9yIHlvdXIgZmF2b3VyaXRlIGVkaXRpbmcgcHJvZ3JhbSwgdGVzdCB0aGUgZmls ZSBpbiB0aGUgcGx1Z2luX2NhY2hlX2RpciwgdGhlbiBpbXBvcnQgaXQgYmFjayBpbnRvIDxz cGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHdpdGggdGhlIGhlbHAgb2YgdGhlIENvbXBv c2VyIGFuZCBwdWJsaXNoIHlvdXIgcGx1Z2luIGZvciBldmVyeW9uZS4gTG9vayBhdCB0aGUg Ym90dG9tIG9mIHRoZSBQbHVnaW4gQ29tcG9zZXImIzgyMTc7cyA8YSBocmVmPSIjZWRpdHBh Z2UiPkVkaXQgcGFnZTwvYT4gZm9yIHRoZSBvcHRpb25zOyBqdXN0IHJlbWVtYmVyIHRvIHNh dmUgeW91ciBjaGFuZ2VzIGJlZm9yZSBleHBvcnRpbmcgb3IgY29weWluZy9wYXN0aW5nIHRo ZSBjb2RlITwvbGk+CgkJPGxpPldoZW4gZXhwb3J0aW5nLCBmaWxlcyBjYW4gYmUgc2F2ZWQg d2l0aCBlaXRoZXIgdGhlIGNvZGUgYmxvY2sgZmlyc3Qgb3IgdGhlIGhlbHAgYmxvY2sgZmly c3QuIFVzZSB0aGUgPGEgaHJlZj0iI3NldHVwcGFnZSI+U2V0dXAgYnV0dG9uPC9hPiB0byBj b25maWd1cmU8L2xpPgoJCTxsaT5TdXBwb3J0IGZvciBDbGllbnQsIEFkbWluLCBhbmQgTGli cmFyeSB0eXBlIHBsdWdpbnM8L2xpPgoJCTxsaT5IZWxwIHRleHQgY2FuIGJlIHdyaXR0ZW4g aW4gVGV4dGlsZSBvciAoWClIVE1MLiBTdHlsZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBoZWxw IHNlY3Rpb248L2xpPgoJCTxsaT5UYWtlIGFkdmFudGFnZSBvZiB0aGUgPGEgaHJlZj0iaHR0 cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTEzMDg5Ij5UaW55 TUNFIDxzcGFuIGNsYXNzPSJjYXBzIj5XWVNJV1lHPC9zcGFuPiBlZGl0b3I8L2E+IGZvciB0 aGUgaGVscCBzZWN0aW9uIG9yIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJv amVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTE2NDAwOCI+RWRpdCBBcmVhPC9hPiBmb3Ig Y29kZSBtYXJrdXAgKHRoYW5rcyB2YXJpYWFzKS4gU2VlIHRoZSA8YSBocmVmPSIjc2V0dXBw YWdlIj5zZXR1cDwvYT4gYW5kIDxhIGhyZWY9IiNub3RlcyI+bm90ZXM8L2E+IHNlY3Rpb25z IGZvciBtb3JlIG9uIHRoZXNlIGVkaXRvcnM8L2xpPgoJCTxsaT5CdWlsdC1pbiBUZXh0aWxl IGhlbHAgdmlld2VyICh0aGFua3MgdG8gbmV0LWNhcnZlciYjODIxNztzIDxhIGhyZWY9Imh0 dHA6Ly90eHAtcGx1Z2lucy5uZXRjYXJ2aW5nLmNvbS9wbHVnaW5zL3BsdWdpbi1oZWxwLXZp ZXdlciI+UGx1Z2luIEhlbHAgVmlld2VyPC9hPikgdG8gYWxsb3cgeW91IHRvIHByZXZpZXcg eW91ciBIZWxwIHRleHQgZHVyaW5nIGRldmVsb3BtZW50ICh0aGUgdHdvIHZpZXdlcnMgd2ls bCBoYXBwaWx5IGNvLWV4aXN0IGlmIHlvdSB3aXNoKTwvbGk+CgkJPGxpPlJlc2l6YWJsZSB0 ZXh0YXJlYTwvbGk+Cgk8L3VsPgoKCTxoMiBpZD0iYXV0aG9ycyI+QXV0aG9yczwvaDI+CgoJ PHA+T3JpZ2luYWwgcGx1Z2luOiA8YSBocmVmPSJodHRwOi8vaW5zcGlyZWQua2lldi51YS9m ZWVkYmFjay8iPll1cmEgTGlubnlrPC9hPjxiciAvPgpNb2RpZmljYXRpb25zICh2MC41Kyk6 IDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9jb21tZW50Rm9ybSI+U3RlZiBEYXdz b248L2E+PGJyIC8+CkEgdG91Y2ggb2YgY2xhc3M6IDxhIGhyZWY9Imh0dHA6Ly90eHAtcGx1 Z2lucy5uZXRjYXJ2aW5nLmNvbS9jb250YWN0Ij5TdGV2ZSBEaWNraW5zb248L2E+PC9wPgoK CTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoK CTxwPkRvd25sb2FkIHRoZSBwbHVnaW4gKHYwLjUgYW5kIGFib3ZlKSBmcm9tIDxhIGhyZWY9 Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c3RlZmRhd3Nvbi5jb208L2E+IChwcmV2aW91 cyB2ZXJzaW9ucyBhcmUgc3RpbGwgYXZhaWxhYmxlIG9uIHRoZSA8YSBocmVmPSJodHRwOi8v aW5zcGlyZWQua2lldi51YS90eHAvaWVkX3BsdWdpbl9jb21wb3NlciI+SW5zcGlyZWQgaG9t ZXBhZ2U8L2E+KSwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xhc3M9ImNhcHMi PlRYUDwvc3Bhbj4gQWRtaW4gLSYjNjI7IFBsdWdpbnMgcGFnZSwgaW5zdGFsbCBhbmQgZW5h YmxlIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlZpc2l0IHRoZSBFeHRlbnNpb25zIC0mIzYyOyBQ bHVnaW4gQ29tcG9zZXIgdGFiIGFuZCBjbGljayB0aGUgU2V0dXAgYnV0dG9uIGluIHRoZSB0 b3AtcmlnaHQgb2YgdGhlIHNjcmVlbi4gRnJvbSBoZXJlIHlvdSBjYW4gSW5zdGFsbCwgRGVs ZXRlIGFuZCBTYXZlIHRoZSBwbHVnaW4gcHJlZmVyZW5jZXMuIFNlZSB0aGUgPGEgaHJlZj0i I3NldHVwcGFnZSI+c2V0dXAgc2VjdGlvbjwvYT4gZm9yIGRldGFpbHMuPC9wPgoKCTxwPlRv IHJlbW92ZSB0aGUgUGx1Z2luIENvbXBvc2VyIChub29vbyEpIHZpc2l0IHRoZSBTZXR1cCBw YWdlIGFnYWluIGZyb20gdGhlIFBsdWdpbiBDb21wb3NlciB0YWIsIGhpdCBEZWxldGUgdG8g cmVtb3ZlIHRoZSBwcmVmZXJlbmNlcywgdGhlbiBzaW1wbHkgZGVsZXRlIHRoZSBwbHVnaW4g YXMgbm9ybWFsIGZyb20gdGhlIEFkbWluIC0mIzYyOyBQbHVnaW5zIHBhZ2UuPC9wPgoKCTxo MiBpZD0idXNhZ2UiPlVzYWdlPC9oMj4KCgk8aDMgaWQ9Imxpc3RwYWdlIj5MaXN0IHBhZ2U8 L2gzPgoKCTxwPkFsbCBpbnN0YWxsZWQgcGx1Z2lucyBhcmUgbGlzdGVkIG9uIHRoZSBQbHVn aW4gQ29tcG9zZXIgcGFnZS4gVGhleSBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCwgZGVsZXRl ZCwgcHVibGlzaGVkIG9yIGVkaXRlZCBmcm9tIGhlcmUuIFRoZSBoZWxwIGNhbiBhbHNvIGJl IHZpZXdlZCBmcm9tIHRoaXMgcGFnZSwgb3Igd2hpbGUgZWRpdGluZyBhIHBsdWdpbiBieSB1 c2luZyB0aGUgbGluayBuZXh0IHRvIHRoZSB0b3Btb3N0IFNhdmUgYnV0dG9uIG9uIHRoZSA8 YSBocmVmPSIjZWRpdHBhZ2UiPmVkaXQgcGFnZTwvYT4uPC9wPgoKCTxwPklmIHlvdSBhcmUg dXNpbmcgdGhlIHBsdWdpbl9jYWNoZV9kaXIgKEFkbWluIC0mIzYyOyBBZHZhbmNlZCBQcmVm cyksIGFueSBwbHVnaW5zIGluIHRoZSA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20v ZG93bmxvYWRzL2V4YW1wbGVfcGx1Z2luX3RlbXBsYXRlLnR4dCI+c3RhbmRhcmQgdGVtcGxh dGUgZm9ybWF0PC9hPiB1cGxvYWRlZCB0byB0aGlzIGRpcmVjdG9yeSB3aWxsIGJlIGF2YWls YWJsZSBpbW1lZGlhdGVseSBmb3IgZWRpdGluZyBhbmQgdGVzdGluZy4gSW4gYWRkaXRpb24s IHRoZXNlIHBsdWdpbnMgYmVuZWZpdCBmcm9tIGJlaW5nICYjODIyMDthbHdheXMgb24mIzgy MjE7OyBubyBuZWVkIHRvIGluc3RhbGwgdGhlbS48L3A+CgoJPHA+VGhlcmUgYXJlIHR3byB3 YXlzIG9mIGNyZWF0aW5nIHBsdWdpbnMgZnJvbSB0aGUgUGx1Z2luIENvbXBvc2VyIGxpc3Qg cGFnZS4gVGhlIGZpcnN0IGlzIHRvIGNyZWF0ZSBhIGJsYW5rLCBlbXB0eSBwbHVnaW4uIFVz ZSB0aGUgdGV4dCBib3ggYXQgdGhlIHRvcCBmb3IgdGhpcy4gVGhlIHNlY29uZCBpcyB0byB1 cGxvYWQgb25lIHVzaW5nIHRoZSBCcm93c2UvdXBsb2FkIGJveCBhdCB0aGUgYm90dG9tLiBZ b3UgY2FuIHVwbG9hZCBjb2RlIGluIGVpdGhlciBzdGFuZGFyZCBwbHVnaW4gdGVtcGxhdGUg Zm9ybWF0IChlaXRoZXIgY29kZS1maXJzdCBvciBoZWxwLWZpcnN0LCBjb21wbGV0ZSB3aXRo IDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGFyZWFzKSBvciBzaW1wbHkgdXBsb2Fk IGEgPHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gZmlsZSBjb250YWluaW5nIGNvZGUg b25seS48L3A+CgoJPGgzIGlkPSJlZGl0cGFnZSI+RWRpdCBwYWdlPC9oMz4KCgk8cD5PbiB0 aGUgRWRpdCBwYWdlLCBjb2RlIGdvZXMgaW4gdGhlICYjODIxNjtQbHVnaW4mIzgyMTc7IGJv eCwgaGVscCBnb2VzIGluIHRoZSAmIzgyMTY7UGx1Z2luIGhlbHAmIzgyMTc7IGJveCwgc3R5 bGluZyBnb2VzIGluIHRoZSAmIzgyMTY7U3R5bGUmIzgyMTc7IGJveCEgU3R5bGVzIGFyZSA8 ZW0+bm90PC9lbT4gcGFzc2VkIHRocm91Z2ggdGhlIFRleHRpbGUgbWFuZ2xlIGFuZCBpZiB5 b3UgZm9yZ2V0IChvciBkb24mIzgyMTc7dCBhZGQpIHRoZSA8Y29kZT4mIzYwO3N0eWxlJiM2 Mjs8L2NvZGU+IHRhZ3MsIHRoZSBDb21wb3NlciB3aWxsIGFkZCB0aGVtIGZvciB5b3UuIFRo ZSBwbHVnaW4gY29kZSBib3ggaXMgdmVydGljYWxseSByZXNpemFibGU7IGdyYWIgdGhlIG1h cmtlciBiZW5lYXRoIHRoZSBib3ggYW5kIGRyYWcgdG8gc2V0LiBUaGUgY3VycmVudCBwb3Np dGlvbiBpcyByZXRhaW5lZCBhcyBhIGNvb2tpZSBzbyB0aGUgYm94IHdpbGwgYWx3YXlzIHJl c2l6ZSB3aGVuIHRoZSBlZGl0IHBhZ2UgaXMgZGlzcGxheWVkLjwvcD4KCgk8cD5GaWxsIGlu IHRoZSBvdGhlciBmaWVsZHMgd2l0aCByZWxldmFudCBkZXRhaWxzIGFib3V0IHlvdXJzZWxm IGFuZCB5b3VyIHBsdWdpbiBhbmQgeW91JiM4MjE3O3JlIGdvb2QgdG8gZ28uIENob29zZSBm cm9tIGVpdGhlciBDbGllbnQtc2lkZSBvbmx5LCBBZG1pbi1zaWRlICh3aGljaCBpbmNsdWRl cyBjbGllbnQgc2lkZSBieSBkZWZhdWx0KSBvciBMaWJyYXJ5IHBsdWdpbiB0eXBlcy4gQSB3 YXJuaW5nIGlzIGlzc3VlZCBpZiB5b3Ugc2F2ZSBhIENsaWVudCBwbHVnaW4gdGhhdCB1c2Vz IEFkbWluLXNpZGUgY29kZSAodGhhbmtzIG5ldC1jYXJ2ZXIpLjwvcD4KCgk8cD5IaXQgU2F2 ZSB0byBzdG9yZSB5b3VyIHBsdWdpbi4gT25jZSB5b3UmIzgyMTc7cmUgaGFwcHkgd2l0aCBp dCwgc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGVkaXQgcGFnZSBhbmQgY2hvb3NlIGhv dyB0byBleHBvcnQgaXQuIFRoZSBmaXJzdCBsaW5rIGlzIGZvciBzdGFuZGFyZCBwbHVnaW5z IHdoaWNoIGFyZSBkaXN0cmlidXRlZCB0byBhbGwgdXNlcnM7IHRoZSBzZWNvbmQgaXMgZm9y IGNvbXByZXNzZWQgcGx1Z2lucyAmIzgyMTI7IHVzZSB0aGlzIGlmIHlvdXIgcGx1Z2lucyBh cmUgbGFyZ2UsIG9yIHNpbXBseSBhcyBhbiBhbHRlcm5hdGl2ZSBmb3JtYXQuIEJvdGggdGhl c2Ugb3B0aW9ucyBjb252ZXJ0IHRoZSBoZWxwIHRvIDxzcGFuIGNsYXNzPSJjYXBzIj5IVE1M PC9zcGFuPi4gVGhlIHRoaXJkIGxpbmssIGhvd2V2ZXIsIGRvZXMgbm90IGFuZCBpcyB1c2Vk IHRvIGV4cG9ydCB0aGUgcGx1Z2luIGJhY2sgb3V0IGluIHRoZSBzdGFuZGFyZCB0ZW1wbGF0 ZSBmb3JtYXQgdG8gcGVyaGFwcyBnaXZlIHRvIGFub3RoZXIgZGV2ZWxvcGVyIGRpcmVjdGx5 LCBvciB0byByZXRhaW4gdGhlIFRleHRpbGUgbWFya3VwIGZvciBmdXR1cmUgdXBkYXRlcy48 L3A+CgoJPHA+WyBOb3RlIHRoYXQgd2hlbiBleHBvcnRpbmcgYXMgYSBzdGFuZGFyZCBwbHVn aW4sIHRoZSBUZXh0aWxlIHByb2Nlc3NvciBhdHRlbXB0cyB0byBkZWNpZGUgaWYgeW91IGhh dmUgdXNlZCBUZXh0aWxlIG9yIG5vdCAoaXQgc2ltcGx5IGxvb2tzIGZvciBhIHRleHRpbGVk ICYjODIxNjtoMSYjODIxNzspLiBSdW5uaW5nIHB1cmUgPHNwYW4gY2xhc3M9ImNhcHMiPkhU TUw8L3NwYW4+IHRocm91Z2ggdGV4dGlsZSBtYXkgb2NjYXNpb25hbGx5IGNhdXNlIGVuY29k aW5nIGlzc3VlcyBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIGNoYXJhY3RlciBzZXQgdXNl ZCAmIzgyMTI7IGhhdmVuJiM4MjE3O3QgdHJhY2tlZCBkb3duIHRoZSBjaXJjdW1zdGFuY2Vz IHVuZGVyIHdoaWNoIGl0IGhhcHBlbnMgeWV0IF08L3A+CgoJPHA+WW91IGNhbiBhbHNvIGV4 cG9ydCBwbHVnaW5zIGZyb20gdGhlIG1haW4gUGx1Z2luIENvbXBvc2VyIGxpc3QgcGFnZS4g VGhlIFB1Ymxpc2ggY29sdW1uIGhhcyB0d28gZW50cmllcyBpbiBpdDogJiM4MjE2O3B1Ymxp c2gmIzgyMTc7IHRvIHByb2R1Y2UgYSBzdGFuZGFyZCBwbHVnaW47IG9yICYjODIxNjt6aXAm IzgyMTc7IHRvIGdlbmVyYXRlIGEgY29tcHJlc3NlZCB2ZXJzaW9uLjwvcD4KCgk8aDMgaWQ9 InNldHVwcGFnZSI+U2V0dXAgcGFnZTwvaDM+CgoJPHA+Q2xpY2tpbmcgU2V0dXAgZnJvbSB0 aGUgbWFpbiBsaXN0IHNjcmVlbiBhbGxvd3MgYWNjZXNzIHRvIHRoZSBwbHVnaW4gcHJlZmVy ZW5jZXMuPC9wPgoKCTxwPllvdSBjYW4gSW5zdGFsbCB0aGVtICYjODIxMjsgd2hpY2ggcmV0 YWlucyBhbnkgcHJldmlvdXMgc2V0dGluZ3MgYW5kIGFkZHMgbmV3IG9uZXMgd2hlbiB1cGRh dGluZyB0aGUgcGx1Z2luICYjODIxMjsgb3IgRGVsZXRlIHRoZW0uIFRoZSBwbHVnaW4gY2hl Y2tzIGlmIGFsbCByZXF1aXJlZCBwcmVmZXJlbmNlcyBhcmUgYXZhaWxhYmxlIGFuZCBvZmZl cnMgeW91IHRoZSBjaG9pY2Ugb2YgZGVsZXRpbmcvcmVpbnN0YWxsaW5nIGluIGNhc2UgdGhl IHByZWZzIGJlY29tZSBjb3JydXB0ZWQgb3IgbmVlZCB1cGRhdGluZy48L3A+CgoJPHA+T25j ZSB0aGUgcHJlZnMgYXJlIGluc3RhbGxlZCB5b3Ugd2lsbCBzZWUgdGhlIGF2YWlsYWJsZSBv cHRpb25zLiBUaGUgd2lkdGggb2YgdGhlIHRleHRhcmVhcyBvbiB0aGUgPGEgaHJlZj0iI2Vk aXRwYWdlIj5lZGl0IHBhZ2U8L2E+IGFyZSBjdXN0b21pc2FibGUgdG8gYWNjb21tb2RhdGUg eW91ciBzY3JlZW4gcmVzb2x1dGlvbi4gRW50ZXIgYSBudW1iZXIgdG8gc2V0IHRoZSB3aWR0 aCBpbiBjaGFyYWN0ZXJzIG9mIHRoZSBlZGl0IGJveGVzLjwvcD4KCgk8cD5Zb3UgbWF5IGNo b29zZSB0byBlZGl0IHRoZSBjb2RlIHVzaW5nIGEgM3JkIHBhcnR5IGNvZGUgc3ludGF4IGhp Z2hsaWdodGVyLiBDdXJyZW50IHN1cHBvcnQgaXMgZm9yIEVkaXQgQXJlYSBhbmQgKHNvcnQg b2YpIENvZGVQcmVzcyAmIzgyMTI7IHNlZSB0aGUgPGEgaHJlZj0iI25vdGVzIj5ub3Rlczwv YT4uPC9wPgoKCTxwPklmIHlvdSB3aXNoIHRvIHRha2UgYWR2YW50YWdlIG9mIEVkaXQgQXJl YSwgZ3JhYiBpdCBmcm9tIHNvdXJjZWZvcmdlLCBpbnN0YWxsIGl0LCBzZWxlY3QgJiM4MjE2 O0VkaXQgQXJlYSYjODIxNzsgZnJvbSB0aGUgZHJvcGRvd24gb24gdGhlIFBsdWdpbiBDb21w b3NlciYjODIxNztzIFNldHVwIHBhZ2UgYW5kIGdpdmUgdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5VUkw8L3NwYW4+IHBhdGggdG8gdGhlIGluc3RhbGxhdGlvbiBvbiB5b3VyIHNlcnZlcjsg dGhpcyBpcyBub3JtYWxseSBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgL2VkaXRf YXJlYS4gTm8gdHJhaWxpbmcgc2xhc2ggaXMgcmVxdWlyZWQuIFNpbWlsYXJseSBmb3IgQ29k ZVByZXNzLjwvcD4KCgk8cD5Gb3IgdGhlIGhlbHAgc3lzdGVtIHlvdSBjYW4gdXNlIFRleHRp bGUgdGFncyAocmVjb21tZW5kZWQpIG9yIGNob29zZSBUaW55TUNFLiA8ZW0+Tm90ZSB0aGF0 IFRpbnlNQ0UgaXMgbm90IGZ1bGx5IGludGVncmF0ZWQgeWV0IHNvIDxzcGFuIGNsYXNzPSJj YXBzIj5ZTU1WPC9zcGFuPjwvZW0+LjwvcD4KCgk8aDMgaWQ9Im5vdGVzIj5Ob3RlczwvaDM+ CgoJPHA+TW9yZSBlZGl0b3JzIGNhbiBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIENvbXBvc2Vy IGZhaXJseSBlYXNpbHkuIElmIHlvdSBmaW5kIGEgZ29vZCBvbmUsIGdldCBpbiBjb250YWN0 LjwvcD4KCgk8cD5UZW50YXRpdmUgc3VwcG9ydCBmb3IgQ29kZVByZXNzIGlzIGFscmVhZHkg aW4gdGhlcmUgYnV0IEkgZm91bmQgaXQgaW5leHBsaWNhYmx5IGJsYW5rZWQgb3V0IHRoZSBw bHVnaW4gY29kZSB3aGVuIGl0IHdhcyBzYXZlZCBzbyBJJiM4MjE3O3ZlIGNvbW1lbnRlZCBv dXQgc3VwcG9ydCBmb3Igbm93LiBJZiBhbnlvbmUgY2FuIHNoZWQgYW55IGxpZ2h0IG9uIHdo eSBpdCBkb2VzIHRoaXMsIHBsZWFzZSBzcGVhayB1cCEgVW5jb21tZW50IHRoZSBjb2RlIG9u IGxpbmUgODQxIGFuZCBjb21tZW50IG91dCBsaW5lIDg0MiB0byBlbmFibGUgc3VwcG9ydCwg dGhlbiB2aXNpdCB0aGUgU2V0dXAgcGFnZSBhbmQgc2VsZWN0IENvZGVQcmVzcyBmcm9tIHRo ZSBsaXN0LiBEb24mIzgyMTc7dCBleHBlcmltZW50IHdpdGggdGhpcyBzZXR0aW5nIG9uIGFu IGltcG9ydGFudCBwbHVnaW4gOi0pPC9wPgoKCTxoMyBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vs b2c8L2gzPgoKCTx1bD4KCQk8bGk+MjUgRmViIDA2IHwgMC4xIHwgSW5pdGlhbCByZWxlYXNl PC9saT4KCQk8bGk+MjUgRmViIDA2IHwgMC4yIHwgQWRkZWQgJiM4MjE2O3NhdmUgYXMmIzgy MTc7IG9wdGlvbjwvbGk+CgkJPGxpPjE3IE1hciAwNiB8IDAuMyB8IEFkZGVkICYjODIxNjtz YXZlIGFzIHBocCYjODIxNzs8L2xpPgoJCTxsaT4xMCBBcHIgMDYgfCAwLjQgfCBBZGRlZCBz dXBwb3J0IGZvciBwbHVnaW5fY2FjaGVfZGlyPC9saT4KCQk8bGk+MDQgSmFuIDA4IHwgMC41 IHwgRnVsbCBzdXBwb3J0IGZvciBzdGQgdGVtcGxhdGU7IGNvbXByZXNzZWQgcGx1Z2luczsg TGlicmFyeSBwbHVnaW5zOyBUZXh0aWxlIGhlbHAgYW5kIHN0eWxpbmc7IGludGVncmF0aW9u IHdpdGggbmV0LWNhcnZlciYjODIxNztzIFBsdWdpbiBIZWxwIFZpZXdlcjwvbGk+CgkJPGxp PjA3IEphbiAwOCB8IDAuNiB8IEJ1aWx0LWluIGhlbHAgdmlld2VyICh0aGFua3MgbmV0LWNh cnZlcik7IHN1cHBvcnQgZm9yIEVkaXQgQXJlYSAmIzM4OyBDb2RlUHJlc3MoaXNoKSAodGhh bmtzIHZhcmlhYXMpOyBIZWxwIGJsb2NrL0NvZGUgYmxvY2sgcG9zaXRpb24gc3dpdGNoYWJs ZSBvbiBleHBvcnQ7IGFkZGVkIFNldHVwIHByZWZzIHBhZ2U7IGxpbmUgYnJlYWsvc3R5bGUg YnVnZml4ZXM8L2xpPgoJCTxsaT4wOCBKYW4gMDggfCAwLjcgfCBSZS1pbXBvcnRpbmcgcGx1 Z2lucyBub3cgcmV0YWlucyBzdHlsZSBibG9jazsgYWRkZWQgJiM4MjE2O2FkbWluIHNpZGUg cGx1Z2luIHdpdGggY2xpZW50LXNpZGUgdHlwZSYjODIxNzsgd2FybmluZzsgY2hhbmdlZCBi dXR0b24gc3R5bGluZyBhbmQgcG9zaXRpb25zIChhbGwgdGhhbmtzIG5ldC1jYXJ2ZXIpOyBn VHh0KCkgcHJlZiBsYWJlbHMgYW5kICYjODIxNjtpbnRlbGxpZ2VudCYjODIxNzsgcHJlZnMg KGdvIGpRdWVyeSBnbyEpOyBjYWNoZWQgcGx1Z2lucyBub3cgYWxzbyBoYXZlIGRpcmVjdCBl eHBvcnQgZnJvbSBFZGl0IHBhZ2U7ICYjODIxNjtkb24mIzgyMTc7dCB0ZXh0aWxlIDxzcGFu IGNsYXNzPSJjYXBzIj5IVE1MPC9zcGFuPiYjODIxNzsgY2hlY2s7IG1pbm9yIGJ1Z2ZpeGVz PC9saT4KCQk8bGk+MDkgSmFuIDA4IHwgMC43MSB8IFRleHRhcmVhIHdpZHRoIGNhbiBub3cg YmUgY29udHJvbGxlZCBmcm9tIHByZWZzLCBhbmQgaGVpZ2h0IGZyb20gYSBkcmFnIGJhcjsg ZGVmYXVsdCB3aWR0aCBpbmNyZWFzZWQgdG8gMTEwIGNoYXJzOyBwdWJsaXNoIHBsdWdpbnMg ZnJvbSB0aGUgbGlzdCBwYWdlOyBJbnN0YWxsIGJ1dHRvbiByZW1vdmVkIHdoZW4gcHJlZnMg YWxsIGNvcnJlY3RseSBpbnN0YWxsZWQgKGFsbCB0aGFua3MgdmFyaWFhcyAvIGlibGFzdG9m Zik8L2xpPgoJPC91bD4KCgk8aDIgaWQ9IndyaXRpbmciPldyaXRpbmcgYSBwbHVnaW48L2gy PgoKCTxwPllvdSBzaG91bGQgYmUgYXdhcmUgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1 bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD05ODgxIj5QbHVnaW4gQXV0aG9y IFJlc291cmNlczwvYT4gdG9waWMgb24gdGhlIFRleHRwYXR0ZXJuIFN1cHBvcnQgRm9ydW0s IGFuZCB5b3UgbWlnaHQgYWxzbyB3YW50IHRvIGhhdmUgYSBsb29rIGF0IHRoZSA8YSBocmVm PSJodHRwOi8vaW5zcGlyZWQua2lldi51YS90eHAtcGx1Z2luLWNoZWF0c2hlZXQiPlRleHRQ YXR0ZXJuIHBsdWdpbiBjaGVhdCBzaGVldDwvYT4uPC9wPgoKCTxwPkhhcHB5IHBsdWdpbiBh dXRob3JpbmcgOi0pPC9wPgoKCTxwPjwvZGl2PjwvcD4KPCEtLSAtLS0gQkVHSU4gUExVR0lO IENTUyAtLS0gLS0+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiNpZWRfaGVscCB7IGxpbmUt aGVpZ2h0OjEuNSA7fQojaWVkX2hlbHAgY29kZSB7IGZvbnQtd2VpZ2h0OmJvbGQ7IGZvbnQ6 IDEwNSUvMTMwJSAiQ291cmllciBOZXciLCBjb3VyaWVyLCBtb25vc3BhY2U7IGJhY2tncm91 bmQtY29sb3I6ICNGRkZGQ0M7fQojaWVkX2hlbHAgY29kZS5zZWRfY29kZV90YWcgeyBmb250 LXdlaWdodDpub3JtYWw7IGJvcmRlcjoxcHggZG90dGVkICM5OTk7IGJhY2tncm91bmQtY29s b3I6ICNmMGU2OGM7IGRpc3BsYXk6YmxvY2s7IG1hcmdpbjoxMHB4IDEwcHggMjBweDsgcGFk ZGluZzoxMHB4OyB9CiNpZWRfaGVscCBhOmxpbmssICNpZWRfaGVscCBhOnZpc2l0ZWQgeyBj b2xvcjogYmx1ZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAxcHgg c29saWQgYmx1ZTsgcGFkZGluZy1ib3R0b206MXB4O30KI2llZF9oZWxwIGE6aG92ZXIsICNp ZWRfaGVscCBhOmFjdGl2ZSB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7 IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQoj aWVkX2hlbHAgaDEgeyBjb2xvcjogIzM2OTsgZm9udDogMjBweCBHZW9yZ2lhLCBzYW5zLXNl cmlmOyBtYXJnaW46IDA7IHRleHQtYWxpZ246IGNlbnRlcjsgfQojaWVkX2hlbHAgaDIgeyBi b3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6MTBweCAwIDA7IGNvbG9y OiAjMzY5OyBmb250OiAxN3B4IEdlb3JnaWEsIHNhbnMtc2VyaWY7IH0KI2llZF9oZWxwIGgz IHsgY29sb3I6ICMxMDgwMzA7IGZvbnQ6IGJvbGQgMTJweCBBcmlhbCwgc2Fucy1zZXJpZjsg bGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAxNXB4IDAgMDt0ZXh0LXRyYW5zZm9ybTog dXBwZXJjYXNlO30KPC9zdHlsZT4KPCEtLSAtLS0gRU5EIFBMVUdJTiBDU1MgLS0tIC0tPgoi O3M6MzoiY3NzIjtzOjkyNToiPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI2llZF9oZWxwIHsg bGluZS1oZWlnaHQ6MS41IDt9CiNpZWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsg Zm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFj a2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNpZWRfaGVscCBjb2RlLnNlZF9jb2RlX3RhZyB7 IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3Vu ZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4 OyBwYWRkaW5nOjEwcHg7IH0KI2llZF9oZWxwIGE6bGluaywgI2llZF9oZWxwIGE6dmlzaXRl ZCB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206 IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojaWVkX2hlbHAgYTpob3Zl ciwgI2llZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjog bm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFw eDt9CiNpZWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNh bnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNpZWRfaGVscCBo MiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsg Y29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojaWVkX2hl bHAgaDMgeyBjb2xvcjogIzEwODAzMDsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNl cmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDE1cHggMCAwO3RleHQtdHJhbnNm b3JtOiB1cHBlcmNhc2U7fQo8L3N0eWxlPiI7czo0OiJjb2RlIjtzOjM3MzkyOiJpZihAdHhw aW50ZXJmYWNlID09ICdhZG1pbicpIHsKCWFkZF9wcml2cygnaWVkX3BsdWdpbl9jb21wb3Nl cicsJzEsMicpOwoJcmVnaXN0ZXJfdGFiKCdleHRlbnNpb25zJywgJ2llZF9wbHVnaW5fY29t cG9zZXInLCAiUGx1Z2luIENvbXBvc2VyIik7CglyZWdpc3Rlcl9jYWxsYmFjaygnaWVkX3Bs dWdpbl9jb21wb3NlcicsICdpZWRfcGx1Z2luX2NvbXBvc2VyJyk7CglnbG9iYWwgJGllZF9w bHVnaW5fY29tcG9zZXIsICRpZWRfcGx1Z2luX3ByZWZzLCAkaWVkX3BsdWdpbl9nbG9iYWxz OwoJJGllZF9wbHVnaW5fZ2xvYmFscyA9IGFycmF5KAoJCSdjc3Nfc3RhcnQnID0+ICc8IS0t JywKCQknY3NzX2VuZCcgPT4gJy0tPicsCgkJJ2RsbV9zdGFydCcgPT4gJyMnLAoJCSdkbG1f ZW5kJyA9PiAnJywKCQknc3RhcnQnID0+ICcgLS0tIEJFR0lOIFBMVUdJTiBTRUNUSU9OIC0t LScsCgkJJ2VuZCcgPT4gJyAtLS0gRU5EIFBMVUdJTiBTRUNUSU9OIC0tLScsCgkpOwoJLy8g RG91YmxlIGFycmF5OiAxc3QgaXMgYSBsaXN0IG9mIGN1cnJlbnQgcHJlZnMgYW5kIHRoZWly IGRlZmF1bHRzLAoJLy8gMm5kIGlzIGEgbGlzdCBvZiBsZWdhY3kgcHJlZnMgdGhhdCBtYXkg bmVlZCByZW1vdmluZyBpbiBmdXR1cmUgKGRlZmF1bHRzIGFsbCBzZXQgZW1wdHkpCgkkaWVk X3BsdWdpbl9wcmVmcyA9IGFycmF5KAoJCWFycmF5KAoJCQknaWVkX3BsdWdpbl9lZGl0b3In ID0+ICdub25lJywKCQkJJ2llZF9wbHVnaW5fZWRpdG9yX3BhdGgnID0+IGh1LidqcycuRFMs CgkJCSdpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCcgPT4gJzExMCcsCgkJCSdpZWRfcGx1Z2lu X2hlbHBfZWRpdG9yJyA9PiAndGV4dGlsZScsCgkJCSdpZWRfcGx1Z2luX2hlbHBfZWRpdG9y X3BhdGgnID0+IGh1LidqcycuRFMsCgkJCSdpZWRfcGx1Z2luX291dHB1dF9vcmRlcicgPT4g JzAnLAoJCSksCgkJYXJyYXkoCgkJCSdpZWRfcGx1Z2luX25vdF91c2VkX2FueV9tb3JlX3Rl c3RlcicgPT4gJycsCgkJKQoJKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2lu X2NvbXBvc2VyICgkZXZlbnQsICRzdGVwKSB7CglpZighJHN0ZXAgb3IgIWluX2FycmF5KCRz dGVwLCBhcnJheSgnaWVkX3BsdWdpbl9kZWxldGUnLAoJCQknaWVkX3BsdWdpbl9lZGl0JywK CQkJJ2llZF9wbHVnaW5faGVscCcsCgkJCSdpZWRfcGx1Z2luX2xpc3QnLAoJCQknaWVkX3Bs dWdpbl9pbnN0YWxsJywKCQkJJ2llZF9wbHVnaW5fc2F2ZScsCgkJCSdpZWRfcGx1Z2luX3Nh dmVfZmlsZScsCgkJCSdpZWRfcGx1Z2luX3ZlcmlmeScsCgkJCSdpZWRfc3dpdGNoX3N0YXR1 cycsCgkJCSdpZWRfcGx1Z2luX3NldHVwJywKCQkJJ2llZF9wbHVnaW5fcHJlZnNfaW5zdGFs bCcsCgkJCSdpZWRfcGx1Z2luX3ByZWZzX3JlbW92ZScsCgkJCSdpZWRfcGx1Z2luX3ByZWZz X3VwZGF0ZScsCgkJCSdpZWRfcGx1Z2luX2NyZWF0ZV9uZXcnLAoJCQknaWVkX3BsdWdpbl9z YXZlX2FzX2ZpbGUnLAoJCQknaWVkX3BsdWdpbl9zYXZlX2FzX3BocF9maWxlJywKCQkJJ2ll ZF9wbHVnaW5fdXBsb2FkJywKCQkJJ2llZF9wbHVnaW5faGVscF92aWV3ZXInLAoJCSkpKSB7 CgkJaWVkX3BsdWdpbl9saXN0KCk7Cgl9IGVsc2UgJHN0ZXAoKTsKfQoKLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBpZWRfcGx1Z2luX2xpc3QoJG1lc3NhZ2U9JycpIHsKCXBhZ2V0b3AoZ1R4dCgn ZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJZWNobyBzdGFydFRhYmxlKCdsaXN0JykuCnRy KHRkYSgKZm9ybSgKZklucHV0KCd0ZXh0JywnbmFtZScsJycsJycsJycsJycsJzMwJywnMCcp Ci4gZklucHV0KCdzdWJtaXQnLCdzdWJtaXQnLCdjcmVhdGUgbmV3IHBsdWdpbicsJ3NtYWxs ZXJib3gnKQouIHNJbnB1dCgnaWVkX3BsdWdpbl9jcmVhdGVfbmV3JykKLiBlSW5wdXQoJ2ll ZF9wbHVnaW5fY29tcG9zZXInKQopCiwnIGNvbHNwYW49IjYiIHN0eWxlPSJib3JkZXI6MDto ZWlnaHQ6NTBweCInKQoudGRhKGZvcm0oZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgJ1Nl dHVwJywgJ3B1Ymxpc2gnKS5zSW5wdXQoJ2llZF9wbHVnaW5fc2V0dXAnKS5lSW5wdXQoJ2ll ZF9wbHVnaW5fY29tcG9zZXInKSksJyBjb2xzcGFuPSI2IiBzdHlsZT0iYm9yZGVyOjA7aGVp Z2h0OjUwcHgiJykpLgphc3NIZWFkKCdwbHVnaW4nLCdhdXRob3InLCd2ZXJzaW9uJywnZGVz Y3JpcHRpb24nLCdtYW5hZ2UnLCdwdWJsaXNoJywgJ2FjdGl2ZScsJycpOwoKCSRycyA9IHNh ZmVfcm93c19zdGFydCgiKiIsInR4cF9wbHVnaW4iLCAiMT0xIG9yZGVyIGJ5IG5hbWUiKTsK Cgl3aGlsZSAoJGEgPSBuZXh0Um93KCRycykpIHsKCQlleHRyYWN0KCRhKTsKCQkkZWxpbmsg PSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3Bs dWdpbl9lZGl0JiMzODtuYW1lPScuJG5hbWUuJyI+Jy5nVHh0KCdlZGl0JykuJzwvYT4nOwoJ CSRobGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3Rl cD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtuYW1lPScuJG5hbWUuJyI+Jy5nVHh0KCdo ZWxwJykuJzwvYT4nOwoJCSRwdWJ0YWcgPSB0YWcoZ1R4dCgncHVibGlzaCcpLCdhJywnIGhy ZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2 ZV9hc19maWxlJiMzODtuYW1lPScuJG5hbWUuJyIgdGl0bGU9ImV4cG9ydCBhcyAnIC4gJG5h bWUuJ192Jy4kdmVyc2lvbi4gJy50eHQiJyk7CgkJJHB1Ynp0YWcgPSB0YWcoaWVkX3BsdWdp bl9nVHh0KCdpZWRfcGx1Z2luX2NvbXByZXNzJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9w bHVnaW5fY29tcG9zZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O25h bWU9Jy4kbmFtZS4nJiMzODt6aXA9dHJ1ZSIgdGl0bGU9ImV4cG9ydCBhcyAnIC4gJG5hbWUu J192Jy4kdmVyc2lvbi4gJ196aXAudHh0IicpOwoKCQllY2hvIHRyKHRkKCRuYW1lKQoudGQo JzxhIGhyZWY9IicuJGF1dGhvcl91cmkuJyI+Jy4kYXV0aG9yLic8L2E+JywxNjApCi50ZCgk dmVyc2lvbiwxMCkKLnRkKCRkZXNjcmlwdGlvbiwyNjApCi50ZCgkZWxpbmsgLicgfCAnLiAk aGxpbmspCi50ZCgkcHVidGFnIC4nIHwgJy4gJHB1Ynp0YWcpCi50ZChpZWRfc3RhdHVzX2xp bmsoJHN0YXR1cywkbmFtZSx5ZXNfbm8oJHN0YXR1cykpLDMwKQoudGQoZExpbmsoJ2llZF9w bHVnaW5fY29tcG9zZXInLCdpZWRfcGx1Z2luX2RlbGV0ZScsJ25hbWUnLCRuYW1lKSwzMCkK KTsKCQl1bnNldCgkbmFtZSwkcGFnZSwkZGVsZXRlbGluayk7Cgl9CgoJaWYgKCFlbXB0eSgk R0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddKSkgewoJCSRmaWxlbmFtZXMg PSBhcnJheSgpOwoJCSRkaXIgPSBkaXIoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNo ZV9kaXInXSk7CgkJd2hpbGUgKCRmaWxlID0gJGRpci0+cmVhZCgpKSB7CgkJCWlmKCRmaWxl ICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iKSB7CgkJCQkkZmlsZWFkZHIgPSAkR0xPQkFMU1sn cHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLiRmaWxlOwoJCQkJaWYgKCFpc19kaXIo JGZpbGVhZGRyKSkgewoJCQkJCSRmaWxlbmFtZXNbXT0kZmlsZTsKCQkJCX0KCQkJfQoJCX0K CQkkZGlyLT5jbG9zZSgpOwoJCSgkZmlsZW5hbWVzKT9uYXRjYXNlc29ydCgkZmlsZW5hbWVz KTonJzsKCQllY2hvIHRyKAoJCXRkYSgKCQl0YWcoJ1BsdWdpbnMgdGhhdCBydW4gZnJvbSAn LnRhZygncGx1Z2luX2NhY2hlX2RpcicsJ2Fjcm9ueW0nLCcgdGl0bGU9IicuJEdMT0JBTFNb J3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS4nIiBzdHlsZT0iYm9yZGVyLWJvdHRvbTox cHggZGFzaGVkIGJsYWNrIicpLic6JywnaDEnKQoJCSwnIGNvbHNwYW49IjgiIHN0eWxlPSJi b3JkZXI6MDtoZWlnaHQ6NTBweDt0ZXh0LWFsaWduOmxlZnQiJykKCgkJKTsKCgkJZWNobyBh c3NIZWFkKCdwbHVnaW4nLCdhdXRob3InLCd2ZXJzaW9uJywnZGVzY3JpcHRpb24nLCdtYW5h Z2UnLCdwdWJsaXNoJywnJywnJyk7CgkJZm9yZWFjaCgkZmlsZW5hbWVzIGFzICRmaWxlbmFt ZSkgewoJCQkkZWxpbmsgPSAnPGEgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9zZXIm IzM4O3N0ZXA9aWVkX3BsdWdpbl9lZGl0JiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nIj4n LmdUeHQoJ2VkaXQnKS4nPC9hPic7CgkJCSRobGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVk X3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODtm aWxlbmFtZT0nLiRmaWxlbmFtZS4nIj4nLmdUeHQoJ2hlbHAnKS4nPC9hPic7CgoJCQkkZmls ZWV4dD0gYXJyYXlfcG9wKGV4cGxvZGUgKCcuJywkZmlsZW5hbWUpKTsKCQkJaWYgKCRmaWxl ZXh0PT0ncGhwJykgewoJCQkJJGJhc2VuYW1lPWJhc2VuYW1lKCRmaWxlbmFtZSk7CgkJCQkk cGx1Z2luID0gaWVkX3BsdWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdp bl9jYWNoZV9kaXInXS5EUy4kZmlsZW5hbWUpOwoKCQkJCWVjaG8gdHIoCgkJCQl0ZCgKCQkJ CXRhZygkZmlsZW5hbWUsJ2RpdicsJyBzdHlsZT0iY29sb3I6Z3JheTtib3JkZXI6MHB4IHNv bGlkIGdyYXk7cGFkZGluZzoxcHggMnB4IDJweCAxcHg7IicpCgkJCQkuKGlzc2V0KCRwbHVn aW5bJ25hbWUnXSk/JHBsdWdpblsnbmFtZSddLic8YnIgLz4nOicnKS4nICcKCQkJCSkKCQkJ CS50ZCgKCQkJCSggaXNzZXQoJHBsdWdpblsnYXV0aG9yX3VyaSddKT8nPGEgaHJlZj0iJy4k cGx1Z2luWydhdXRob3JfdXJpJ10uJyI+JzonJyApIC4KCQkJCSggaXNzZXQoJHBsdWdpblsn YXV0aG9yJ10pPyRwbHVnaW5bJ2F1dGhvciddOicmbmJzcDsnICkuCgkJCQkoIGlzc2V0KCRw bHVnaW5bJ2F1dGhvcl91cmknXSk/JzwvYT4nOicnICksIDE2MAoJCQkJKQoJCQkJLnRkKChp c3NldCgkcGx1Z2luWyd2ZXJzaW9uJ10pPyRwbHVnaW5bJ3ZlcnNpb24nXTonJm5ic3A7Jyks MTApCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ2Rlc2NyaXB0aW9uJ10pPyRwbHVnaW5bJ2Rl c2NyaXB0aW9uJ106JyZuYnNwOycpLDI2MCkKCQkJCS50ZCgkZWxpbmsgLicgfCAnLiAkaGxp bmspCgkJCQkudGQoKGlzc2V0KCRwbHVnaW5bJ25hbWUnXSk/CgkJCQl0YWcoZ1R4dCgncHVi bGlzaCcpLCdhJywnIGhyZWY9Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVw PWllZF9wbHVnaW5fc2F2ZV9hc19maWxlJiMzODtmaWxlbmFtZT0nLiRmaWxlbmFtZS4nIiB0 aXRsZT0iZXhwb3J0IGFzICcgLiAkcGx1Z2luWyduYW1lJ10uJ192Jy4kcGx1Z2luWyd2ZXJz aW9uJ10uICcudHh0IicpCgkJCQkJCS4nIHwgJy50YWcoaWVkX3BsdWdpbl9nVHh0KCdpZWRf cGx1Z2luX2NvbXByZXNzJyksJ2EnLCcgaHJlZj0iP2V2ZW50PWllZF9wbHVnaW5fY29tcG9z ZXImIzM4O3N0ZXA9aWVkX3BsdWdpbl9zYXZlX2FzX2ZpbGUmIzM4O2ZpbGVuYW1lPScuJGZp bGVuYW1lLicmIzM4O3ppcD10cnVlIiB0aXRsZT0iZXhwb3J0IGFzICcgLiAkcGx1Z2luWydu YW1lJ10uJ192Jy4kcGx1Z2luWyd2ZXJzaW9uJ10uICdfemlwLnR4dCInKToKCQkJCXRhZygn Jm5ic3A7Jywnc3BhbicsJyBzdHlsZT0iY29sb3I6Z3JheSInKQoJCQkJKSkKCQkJCS50ZCgn JykKCQkJCS50ZCgnJykKCQkJCSk7CgkJCX0KCQl9Cgl9CgoJZWNobyB0cigKdGRhKAonPGZv cm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSJpbmRleC5waHAiIG1l dGhvZD0icG9zdCI+Jy4Kc3RhcnRUYWJsZSgnZWRpdCcsJ2xlZnQnKS4KdHIodGRhKCBoSW5w dXQoJ01BWF9GSUxFX1NJWkUnLDEwMDAwMDApLgpncmFmKCdVcGxvYWQgcGx1Z2luIGZyb20g cGhwIGZpbGUnLic6ICcuCmZJbnB1dCgnZmlsZScsJ3RoZWZpbGUnLCcnLCdlZGl0JykuCmZJ bnB1dCgnc3VibWl0Jywnc3VibWl0JyxnVHh0KCd1cGxvYWQnKSwnc21hbGxlcmJveCcpKS4K ZUlucHV0KCdpZWRfcGx1Z2luX2NvbXBvc2VyJykuCnNJbnB1dCgnaWVkX3BsdWdpbl91cGxv YWQnKSAsICcgc3R5bGU9ImJvcmRlcjowcHggc29saWQgZ3JheSInICkuCnRkYSggdGFnKCdu YW1lJywnYWNyb255bScsJyB0aXRsZT0ibmVlZGVkIG9ubHkgaWYgdGhlIHBocCBmaWxlIHlv dSBhcmUgdXBsb2FkaW5nIGRvZXMgbm90IGNvbnRhaW4gbWV0YWRhdGEiIHN0eWxlPSJib3Jk ZXItYm90dG9tOjFweCBkYXNoZWQgYmxhY2siJykuJzogJy4gZklucHV0KCd0ZXh0JywnbmFt ZScsJ3h4eF94eHh4eHgnLCcnLCcnLCcnLCczMCcsJzAnKSAsICcgc3R5bGU9ImJvcmRlcjow cHggc29saWQgZ3JheTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7IicgKSkuCmVuZFRhYmxlKCku Cic8L2Zvcm0+JwosJyBjb2xzcGFuPSI4IiBzdHlsZT0iYm9yZGVyOjA7aGVpZ2h0OjUwcHg7 dGV4dC1hbGlnbjpsZWZ0IicpCik7CgllY2hvIGVuZFRhYmxlKCk7Cn0KCi8vIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K ZnVuY3Rpb24gaWVkX3N0YXR1c19saW5rKCRzdGF0dXMsJG5hbWUsJGxpbmt0ZXh0KSB7Cgkk b3V0ID0gJzxhIGhyZWY9ImluZGV4LnBocD8nOwoJJG91dCAuPSAnZXZlbnQ9aWVkX3BsdWdp bl9jb21wb3NlciYjMzg7c3RlcD1pZWRfc3dpdGNoX3N0YXR1cyYjMzg7c3RhdHVzPScuCgkk c3RhdHVzLicmIzM4O25hbWU9Jy51cmxlbmNvZGUoJG5hbWUpLiciJzsKCSRvdXQgLj0gJz4n LiRsaW5rdGV4dC4nPC9hPic7CglyZXR1cm4gJG91dDsKfQoKLy8gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlv biBpZWRfc3dpdGNoX3N0YXR1cygpIHsKCWV4dHJhY3QoZ3BzYShhcnJheSgnbmFtZScsJ3N0 YXR1cycpKSk7CgkkY2hhbmdlID0gKCRzdGF0dXMpID8gMCA6IDE7CglzYWZlX3VwZGF0ZSgi dHhwX3BsdWdpbiIsICJzdGF0dXM9JGNoYW5nZSIsICJuYW1lPSckbmFtZSciKTsKCWllZF9w bHVnaW5fbGlzdChtZXNzZW5nZXIoJ3BsdWdpbicsJG5hbWUsJ3VwZGF0ZWQnKSk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9kZWxldGUoKSB7CgkkbmFtZSA9IGRvU2xh c2gocHMoJ25hbWUnKSk7CglzYWZlX2RlbGV0ZSgidHhwX3BsdWdpbiIsIm5hbWU9JyRuYW1l JyIpOwoJaWVkX3BsdWdpbl9saXN0KG1lc3NlbmdlcigncGx1Z2luJywkbmFtZSwnZGVsZXRl ZCcpKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX2VkaXQoJG1lc3NhZ2U9 JycpIHsKCSRzaXRlX2RpciA9IGh1OwoJJG5hbWUgPSBncHMoJ25ld25hbWUnKT9ncHMoJ25l d25hbWUnKTpncHMoJ25hbWUnKTsKCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1l c3NhZ2UpOwoJZWNobyBpZWRfaW5zZXJ0X2VkaXRvcnMoKTsKCWVjaG8gaWVkX3BsdWdpbl9l ZGl0X2Zvcm0oKGdwcygnZmlsZW5hbWUnKSk/Z3BzKCdmaWxlbmFtZScpOiRuYW1lLCBncHMo J2ZpbGVuYW1lJyk/IDE6IDApOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5f ZWRpdF9mb3JtKCRuYW1lPScnLCRlZGl0ZmlsZT0wKSB7CglnbG9iYWwgJHByZWZzLCAkaWVk X3BsdWdpbl9wcmVmczsKCWlmICghJGVkaXRmaWxlKSB7CgkJJGF1dGhvciA9ICgkbmFtZSkg PyBmZXRjaCgnYXV0aG9yJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRh dXRob3JfdXJpID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3JfdXJpJywndHhwX3BsdWdpbics J25hbWUnLCRuYW1lKSA6ICcnOwoJCSR2ZXJzaW9uID0gKCRuYW1lKSA/IGZldGNoKCd2ZXJz aW9uJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRkZXNjcmlwdGlvbiA9 ICgkbmFtZSkgPyBmZXRjaCgnZGVzY3JpcHRpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5h bWUpIDogJyc7CgkJJGNvZGUgPSAoJG5hbWUpID8gZmV0Y2goJ2NvZGUnLCd0eHBfcGx1Z2lu JywnbmFtZScsJG5hbWUpIDogJyc7CgkJJGhlbHAgPSAoJG5hbWUpID8gZmV0Y2goJ2hlbHAn LCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHN0YXR1cyA9ICgkbmFtZSkg PyBmZXRjaCgnc3RhdHVzJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSR0 eXBlID0gKCRuYW1lKSA/IGZldGNoKCd0eXBlJywndHhwX3BsdWdpbicsJ25hbWUnLCRuYW1l KSA6ICcnOwoJCWxpc3QoJGNzcywkaGVscCkgPSAoJGhlbHApID8gaWVkX3BsdWdpbl9leHRy YWN0X2h1bmsoJGhlbHAsICJDU1MiLCAiPCEtLXwtLT4iLCB0cnVlKSA6IGFycmF5KCcnLCRo ZWxwKTsKCX0gZWxzZSB7CgkJJHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9maWxlKCRHTE9C QUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVfZGlyJ10uRFMuJG5hbWUpOwoJCSRmaWxlbmFt ZT0kbmFtZTsKCQkkZmlsZWV4dD0gYXJyYXlfcG9wKCRuYW1lPWV4cGxvZGUgKCcuJywkbmFt ZSkpOwoJCSRuYW1lPWltcGxvZGUoJG5hbWUpOwoJCWV4dHJhY3QgKCRwbHVnaW4pOyAvLyBj b2RlLCBoZWxwLCBjc3MsIG5hbWUsIHZlcnNpb24sIHR5cGUsIGRlc2NyaXB0aW9uLCBhdXRo b3IsIGF1dGhvcl91cmkKCQkkc3RhdHVzPSAoJGZpbGVleHQ9PSdwaHAnKT8gMTogMDsKCX0K CSRlZHdpZHRoID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXSkg JiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fZWRpdG9yX3dpZHRoJ10pKSA/ICRw cmVmc1snaWVkX3BsdWdpbl9lZGl0b3Jfd2lkdGgnXSA6ICRpZWRfcGx1Z2luX3ByZWZzWzBd WydpZWRfcGx1Z2luX2VkaXRvcl93aWR0aCddOwoJJHBsdWdpblsnbmFtZSddID0gJG5hbWU7 CgkkcGx1Z2luWydhdXRob3InXSA9ICRhdXRob3I7CgkkcGx1Z2luWydhdXRob3JfdXJpJ10g PSAkYXV0aG9yX3VyaTsKCSRwbHVnaW5bJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOwoJJHBsdWdp blsnZGVzY3JpcHRpb24nXSA9ICRkZXNjcmlwdGlvbjsKCSRwbHVnaW5bJ2hlbHAnXSA9ICRo ZWxwOwoJJHBsdWdpblsnY29kZSddID0gJGNvZGU7CgkkcGx1Z2luWyd0eXBlJ10gPSAkdHlw ZTsKCSRwbHVnaW5bJ21kNSddID0gbWQ1KCAkcGx1Z2luWydjb2RlJ10gKTsKCgkkZGlzdHJp YnV0aW9uPSc8dGV4dGFyZWEgbmFtZT0iZGlzdHJpYnV0aW9uIiByb3dzPSIxIiBjb2xzPSIn LiRlZHdpZHRoLiciIG9uY2xpY2s9InRoaXMuc2VsZWN0KCkiPicuYmFzZTY0X2VuY29kZShz ZXJpYWxpemUoJHBsdWdpbikpLic8L3RleHRhcmVhPic7CgoJJG5hbWVkTGluayA9IChpc3Nl dCgkZmlsZW5hbWUpKSA/ICdmaWxlbmFtZT0nLiRmaWxlbmFtZSA6ICduYW1lPScuJG5hbWU7 CgkkbmFtZWRGaWxlID0gKGlzc2V0KCRmaWxlbmFtZSkpID8gJGZpbGVuYW1lIDogJG5hbWUu J192Jy4kdmVyc2lvbi4nLnBocCc7CgkkbmFtZWRGaWxlTm9FeHQgPSBwcmVnX3JlcGxhY2Uo Jy8oLispXC4uKiQvJywgJyQxJywgJG5hbWVkRmlsZSk7CgoJJHNsaW5rID0gJzxhIGhyZWY9 Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5fc2F2ZV9h c19maWxlJiMzODsnLiRuYW1lZExpbmsuJyI+ZXhwb3J0IGFzICcgLiRuYW1lZEZpbGVOb0V4 dC4gJy50eHQ8L2E+JzsKCSRzemlwbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdp bl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSYjMzg7Jy4kbmFt ZWRMaW5rLicmIzM4O3ppcD10cnVlIj5leHBvcnQgYXMgJyAuJG5hbWVkRmlsZU5vRXh0LiAn LnR4dCAoY29tcHJlc3NlZCk8L2E+JzsKCSRzcGhwbGluayA9ICc8YSBocmVmPSI/ZXZlbnQ9 aWVkX3BsdWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3NhdmVfYXNfcGhwX2Zp bGUmIzM4OycuJG5hbWVkTGluay4nIj5zYXZlIGFzICcgLiAkbmFtZWRGaWxlLiAnPC9hPic7 CgkkdmhlbHBsaW5rZnVsbCA9ICc8YSBocmVmPSI/ZXZlbnQ9aWVkX3BsdWdpbl9jb21wb3Nl ciYjMzg7c3RlcD1pZWRfcGx1Z2luX2hlbHBfdmlld2VyJiMzODsnLiRuYW1lZExpbmsuJyI+ WyAnLnN0cm9uZyhnVHh0KCd2aWV3JykuJyAnLmdUeHQoJ2hlbHAnKSkuJyBdPC9hPic7CgoJ JG5ld25hbWUgPWZJbnB1dCgndGV4dCcsJ25ld25hbWUnLCRuYW1lLCdlZGl0JywnNzgnLCcn LCRlZHdpZHRoLCcyJyk7CgkkYXV0aG9yID1mSW5wdXQoJ3RleHQnLCdhdXRob3InLCRhdXRo b3IsJ2VkaXQnLCc3OCcsJycsJGVkd2lkdGgsJzInKTsKCSRhdXRob3JfdXJpID1mSW5wdXQo J3RleHQnLCdhdXRob3JfdXJpJywkYXV0aG9yX3VyaSwnZWRpdCcsJzc4JywnJywkZWR3aWR0 aCwnMicpOwoJJHZlcnNpb24gPWZJbnB1dCgndGV4dCcsJ3ZlcnNpb24nLCR2ZXJzaW9uLCdl ZGl0JywnNzgnLCcnLCRlZHdpZHRoLCcyJyk7CgkkZGVzY3JpcHRpb24gPWZJbnB1dCgndGV4 dCcsJ2Rlc2NyaXB0aW9uJywkZGVzY3JpcHRpb24sJ2VkaXQnLCc3OCcsJycsJGVkd2lkdGgs JzInKTsKCSRjb2RlID0gJzx0ZXh0YXJlYSBuYW1lPSJjb2RlIiBpZD0icGx1Z2luX2VkaXRv ciIgcm93cz0iMzAiIGNvbHM9IicuJGVkd2lkdGguJyIgY2xhc3M9ImNvZGVwcmVzcyBwaHAi PicuaHRtbGVudGl0aWVzKHV0ZjhfZGVjb2RlKCRjb2RlKSkuJzwvdGV4dGFyZWE+JzsKCSRo ZWxwID0gJzx0ZXh0YXJlYSBuYW1lPSJoZWxwIiByb3dzPSIzMCIgY29scz0iJy4kZWR3aWR0 aC4nIiBjbGFzcz0ibWNlRWRpdG9yIj4nLmh0bWxlbnRpdGllcyh1dGY4X2RlY29kZSgkaGVs cCkpLic8L3RleHRhcmVhPic7CgkkY3NzID0gJzx0ZXh0YXJlYSBuYW1lPSJjc3MiIHJvd3M9 IjE1IiBjb2xzPSInLiRlZHdpZHRoLiciPicudXRmOF9kZWNvZGUoJGNzcykuJzwvdGV4dGFy ZWE+JzsKCSRwcmVmcyA9ICgoISRlZGl0ZmlsZSk/Y2hlY2tib3goJ3N0YXR1cycsMSwkc3Rh dHVzKS4gJyA8bGFiZWwgZm9yPSJzdGF0dXMiPmVuYWJsZSBwbHVnaW48L2xhYmVsPic6Jycp IC4gJyA8bGFiZWwgZm9yPSJ0eXBlIj4mIzE2MDsmIzE2MDsmIzE2MDtQbHVnaW4gdHlwZTo8 L2xhYmVsPicuIHJhZGlvKCd0eXBlJywwLCgoJHR5cGU9PTApPzE6MCkpLiJDbGllbnQgIiAu IHJhZGlvKCd0eXBlJywxLCgoJHR5cGU9PTEpPzE6MCkpLiJBZG1pbiAiIC4gcmFkaW8oJ3R5 cGUnLDIsKCgkdHlwZT09Mik/MTowKSkuIkxpYnJhcnkiOwoKCSRzdWIgPSBmSW5wdXQoJ3N1 Ym1pdCcsJycsZ1R4dCgnc2F2ZScpLCdwdWJsaXNoJyk7CglyZXR1cm4gZm9ybShzdGFydFRh YmxlKCdlZGl0JykKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJHN1YiAuICR2 aGVscGxpbmtmdWxsKSkKCS4gKCAoaXNzZXQoJGZpbGVuYW1lKSk/IHRyKCBmTGFiZWxDZWxs KCcmbmJzcDsnKSAuIHRkKCRmaWxlbmFtZS5oSW5wdXQoJ2ZpbGVuYW1lJywkZmlsZW5hbWUp KSkgOiAnJyApCgkuIHRyKCBmTGFiZWxDZWxsKCAncGx1Z2luJyApIC4gdGQoJG5ld25hbWUp KQoJLiB0ciggZkxhYmVsQ2VsbCggJ3BsdWdpbicgKSAuIHRkKCRjb2RlKSkKCS4gdHIoIGZM YWJlbENlbGwoICdwcmVmcycgKSAuIHRkKCRwcmVmcykpCgoJLiB0ciggZkxhYmVsQ2VsbCgg J3ZlcnNpb24nICkgLiB0ZCgkdmVyc2lvbikpCgkuIHRyKCBmTGFiZWxDZWxsKCAnYXV0aG9y JyApIC4gdGQoJGF1dGhvcikpCgkuIHRyKCBmTGFiZWxDZWxsKCAnd2Vic2l0ZScgKSAuIHRk KCRhdXRob3JfdXJpKSkKCS4gdHIoIGZMYWJlbENlbGwoICdkZXNjcmlwdGlvbicgKSAuIHRk KCRkZXNjcmlwdGlvbikpCgkuIHRyKCB0ZGEoZ1R4dCgncGx1Z2luX2hlbHAnKSwgJyBjbGFz cz0ibm9saW5lIiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBt aWRkbGU7IicpIC4gdGQoJGhlbHApKQoJLiB0ciggZkxhYmVsQ2VsbCggJ2NzcycgKSAuIHRk KCRjc3MpKQoJLiB0ciggZkxhYmVsQ2VsbCgnJm5ic3A7JykgLiB0ZCgkc3ViKSkKCgkuIHRy KCB0ZGNzKCc8aHI+JywyKSkKCS4gdHIoIGZMYWJlbENlbGwoJyZuYnNwOycpIC4gdGQoJ1V0 aWxpdGllcyAoPHN0cm9uZz51c2Ugb25seSBhZnRlciBzYXZpbmcgdGhlIGRhdGEgYWJvdmU8 L3N0cm9uZz4pOicpKQoKCS4gdHIoIGZMYWJlbENlbGwoICdwbHVnaW4gY29kZTxicj5mb3Ig ZGlzdHJpYnV0aW9uJyApIC4gdGQoJGRpc3RyaWJ1dGlvbikpCgkuIHRyKCBmTGFiZWxDZWxs KCcmbmJzcDsnKSAuIHRkKCRzbGluaykpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAu IHRkKCRzemlwbGluaykpCgkuIHRyKCBmTGFiZWxDZWxsKCcmbmJzcDsnKSAuIHRkKCRzcGhw bGluaykpCgkuIGVuZFRhYmxlKCkKCS4gc0lucHV0KCdpZWRfcGx1Z2luX3NhdmUnKQoJLiBl SW5wdXQoJ2llZF9wbHVnaW5fY29tcG9zZXInKQoJLiBoSW5wdXQoJ25hbWUnLCRuYW1lKSkJ LiA8PDxFT0YKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpqUXVlcnkuZm4ucmVz aXplaGFuZGxlID0gZnVuY3Rpb24oY3VyaCkgewoJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlv bigpIHsKCQl2YXIgbWUgPSBqUXVlcnkodGhpcyk7CgkJbWUuYW5pbWF0ZSh7aGVpZ2h0OiBj dXJofSk7CgkJbWUuYWZ0ZXIoCgkJCWpRdWVyeSgnPGRpdiBjbGFzcz0icmVzaXplaGFuZGxl Ij4tLS0gKyAtLS08L2Rpdj4nKS5iaW5kKCJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CgkJ CQl2YXIgaCA9IG1lLmhlaWdodCgpOwoJCQkJdmFyIHkgPSBlLmNsaWVudFk7CgkJCQl2YXIg bW92ZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CgkJCQkJbWUuaGVpZ2h0KE1hdGgubWF4KDIw LCBlLmNsaWVudFkgKyBoIC0geSkpOwoJCQkJfTsKCQkJCXZhciB1cEhhbmRsZXIgPSBmdW5j dGlvbihlKSB7CgkJCQkJalF1ZXJ5KCJodG1sIikudW5iaW5kKCJtb3VzZW1vdmUiLG1vdmVI YW5kbGVyKS51bmJpbmQoIm1vdXNldXAiLHVwSGFuZGxlcik7CgkJCQkJbmV3aCA9IG1lLmhl aWdodCgpOwoJCQkJCXNldENvb2tpZSgnaWVkX3BsdWdpbl9lZGhlaWdodCcsIG5ld2gsIDcp OwoJCQkJfTsKCQkJCWpRdWVyeSgiaHRtbCIpLmJpbmQoIm1vdXNlbW92ZSIsIG1vdmVIYW5k bGVyKS5iaW5kKCJtb3VzZXVwIiwgdXBIYW5kbGVyKTsKCQkJfSkKCQkpOwoJfSk7Cn0KZnVu Y3Rpb24gc2V0Q29va2llKG5hbWUsdmFsdWUsZGF5cykgewoJaWYgKGRheXMpIHsKCQl2YXIg ZGF0ZSA9IG5ldyBEYXRlKCk7CgkJZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpKyhkYXlz KjI0KjYwKjYwKjEwMDApKTsKCQl2YXIgZXhwaXJlcyA9ICI7IGV4cGlyZXM9IitkYXRlLnRv R01UU3RyaW5nKCk7Cgl9IGVsc2UgdmFyIGV4cGlyZXMgPSAiIjsKCWRvY3VtZW50LmNvb2tp ZSA9IG5hbWUrIj0iK3ZhbHVlK2V4cGlyZXMrIjsgcGF0aD0vIjsKfQpmdW5jdGlvbiBnZXRD b29raWUobmFtZSkgewoJdmFyIG5hbWVFUSA9IG5hbWUgKyAiPSI7Cgl2YXIgY2EgPSBkb2N1 bWVudC5jb29raWUuc3BsaXQoJzsnKTsKCWZvcih2YXIgaT0wO2kgPCBjYS5sZW5ndGg7aSsr KSB7CgkJdmFyIGMgPSBjYVtpXTsKCQl3aGlsZSAoYy5jaGFyQXQoMCk9PScgJykgYyA9IGMu c3Vic3RyaW5nKDEsYy5sZW5ndGgpOwoJCWlmIChjLmluZGV4T2YobmFtZUVRKSA9PSAwKSBy ZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCxjLmxlbmd0aCk7Cgl9CglyZXR1cm4g bnVsbDsKfQpcJChmdW5jdGlvbigpIHsKCWN1cmggPSBnZXRDb29raWUoJ2llZF9wbHVnaW5f ZWRoZWlnaHQnKTsKCWN1cmggPSAoY3VyaCA9PSBudWxsKSA/ICc0ODAnIDogY3VyaDsKCVwk KCIjcGx1Z2luX2VkaXRvciIpLnJlc2l6ZWhhbmRsZShwYXJzZUludChjdXJoKSk7Cn0pOwo8 L3NjcmlwdD4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLnJlc2l6ZWhhbmRsZSB7CgljdXJz b3I6cy1yZXNpemU7Cgl0ZXh0LWFsaWduOmNlbnRlcjsKCWZvbnQtc2l6ZToxZW07Cgl3aWR0 aDoxMDAlOwoJcGFkZGluZzoycHggMCA2cHg7Cn0KPC9zdHlsZT4KRU9GOwp9CgovLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fc2F2ZSgpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9n bG9iYWxzOwoJZXh0cmFjdChkb1NsYXNoKGdwc2EoYXJyYXkoJ25hbWUnLCduZXduYW1lJywn ZmlsZW5hbWUnLCdjb2RlJywnYXV0aG9yJywnYXV0aG9yX3VyaScsJ3ZlcnNpb24nLCdkZXNj cmlwdGlvbicsJ2hlbHAnLCdjc3MnLCdzdGF0dXMnLCd0eXBlJykpKSk7CglsaXN0ICgkc3Rh cnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGll ZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nz c19lbmQnXSk7CgoJaWYgKGVtcHR5KCRmaWxlbmFtZSkpIHsKCQlzYWZlX3VwZGF0ZSgidHhw X3BsdWdpbiIsIm5hbWU9JyRuZXduYW1lJyIsICJuYW1lPSckbmFtZSciKTsKCQlzYWZlX3Vw ZGF0ZSgidHhwX3BsdWdpbiIsImNvZGU9JyRjb2RlJyIsICJuYW1lPSckbmV3bmFtZSciKTsK CQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImF1dGhvcj0nJGF1dGhvciciLCAibmFtZT0n JG5ld25hbWUnIik7CgkJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJhdXRob3JfdXJpPSck YXV0aG9yX3VyaSciLCAibmFtZT0nJG5ld25hbWUnIik7CgkJc2FmZV91cGRhdGUoInR4cF9w bHVnaW4iLCJ2ZXJzaW9uPSckdmVyc2lvbiciLCAibmFtZT0nJG5ld25hbWUnIik7CgkJc2Fm ZV91cGRhdGUoInR4cF9wbHVnaW4iLCJkZXNjcmlwdGlvbj0nJGRlc2NyaXB0aW9uJyIsICJu YW1lPSckbmV3bmFtZSciKTsKCQlzYWZlX3VwZGF0ZSgidHhwX3BsdWdpbiIsImhlbHA9JyIu JGhlbHAuKCgkY3NzKSA/IG4uJHN0YXJ0X2Nzcy5uLiRjc3Mubi4kZW5kX2NzczonJykuIici LCAibmFtZT0nJG5ld25hbWUnIik7CgkJc2FmZV91cGRhdGUoInR4cF9wbHVnaW4iLCJzdGF0 dXM9JyRzdGF0dXMnIiwgIm5hbWU9JyRuZXduYW1lJyIpOwoJCXNhZmVfdXBkYXRlKCJ0eHBf cGx1Z2luIiwidHlwZT0nJHR5cGUnIiwgIm5hbWU9JyRuZXduYW1lJyIpOwoJfSBlbHNlIHsK CQkkZmlsZWNvbnRlbnQgPSBmaWxlKCRHTE9CQUxTWydwcmVmcyddWydwbHVnaW5fY2FjaGVf ZGlyJ10uRFMuJGZpbGVuYW1lKTsKCQkkZmlsZWNvbnRlbnQgPSBpZWRfcGx1Z2luX21ha2Vf YXJyYXkoJGZpbGVjb250ZW50KTsKCQkkbWV0YXZhcnMgPSBhcnJheSgibmFtZSIgPT4gIiRu ZXduYW1lIiwKCQkJCQkJCQkidmVyc2lvbiIgPT4gIiR2ZXJzaW9uIiwKCQkJCQkJCQkiYXV0 aG9yIiA9PiAiJGF1dGhvciIsCgkJCQkJCQkJImF1dGhvcl91cmkiID0+ICIkYXV0aG9yX3Vy aSIsCgkJCQkJCQkJImRlc2NyaXB0aW9uIiA9PiAiJGRlc2NyaXB0aW9uIiwKCQkJCQkJCQki dHlwZSIgPT4gIiR0eXBlIgoJCQkJCQkpOwoJCSRodW5rdmFycyA9IGFycmF5KCJDU1MiID0+ IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywkY3NzKSksCgkJCQkJCQkJIkhFTFAi ID0+IGRvU3RyaXAoc3RyX3JlcGxhY2UoJ1xyXG4nLCcKJywkaGVscCkpLAoJCQkJCQkJCSJD T0RFIiA9PiBkb1N0cmlwKHN0cl9yZXBsYWNlKCdcclxuJywnCicsJGNvZGUpKSwgLy8gd29y a2Fyb3VuZAoJCQkJCQkpOwoJCWZvcmVhY2ggKCRtZXRhdmFycyBhcyAkdmFybmFtZSA9PiAk dmFsdWUpIHsKCQkJZm9yKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJGZpbGVjb250ZW50KTsg JGlkeCsrKSB7CgkJCQlpZiAoc3RycG9zKCRmaWxlY29udGVudFskaWR4XSwgJyRwbHVnaW5b XCcnLiR2YXJuYW1lLidcJ10nKSA9PT0gMCkgewoJCQkJCSRmaWxlY29udGVudFskaWR4XSA9 ICckcGx1Z2luW1wnJy4kdmFybmFtZS4nXCddID0gJy5kb1F1b3RlKCR2YWx1ZSkuJzsnOwoJ CQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJCWZvcmVhY2ggKCRodW5rdmFycyBhcyAkdmFy bmFtZSA9PiAkaHVuaykgewoJCQlsaXN0ICgkc3RhcnRfZGVsaW0sICRlbmRfZGVsaW0pID0g aWVkX3BsdWdpbl9tYWtlX21hcmtlcnMoJHZhcm5hbWUsICRpZWRfcGx1Z2luX2dsb2JhbHNb J2RsbV9zdGFydCddLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydkbG1fZW5kJ10pOwoJCQkkc3Rh cnQgPSBhcnJheV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkZmlsZWNvbnRlbnQpICsgMTsKCQkJ JGVuZCA9IGFycmF5X3NlYXJjaCgkZW5kX2RlbGltLCAkZmlsZWNvbnRlbnQpOwoJCQlhcnJh eV9zcGxpY2UoJGZpbGVjb250ZW50LCAkc3RhcnQsICRlbmQtJHN0YXJ0LCAkaHVuayk7CgkJ fQoJCSRmaWxlY29udGVudCA9IGltcGxvZGUoIlxuIiwgJGZpbGVjb250ZW50KTsKCQkkZmgg PSBmb3BlbigkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hlX2RpciddLkRTLiRmaWxl bmFtZSwgJ3crJyk7CgkJZndyaXRlKCRmaCwgJGZpbGVjb250ZW50KTsKCQlmY2xvc2UoJGZo KTsKCX0KCS8vIENoZWNrIHRoZSBwbHVnaW4gdHlwZSBtYXRjaGVzIHRoZSBjb2RlIHVzZWQK CSRleHRyYU1zZyA9IChpZWRfcGx1Z2luX2FkbWluX2NoZWNrKCRjb2RlLCAkdHlwZSkpID8g JycgOiBzdHJvbmcoaWVkX3BsdWdpbl9nVHh0KCdpZWRfcGx1Z2luX2NoZWNrX3R5cGUnKSk7 CgkkbWVzc2FnZSA9IG1lc3NlbmdlcigncGx1Z2luJywkbmV3bmFtZSwnc2F2ZWQnKS5ici4k ZXh0cmFNc2c7CglpZWRfcGx1Z2luX2VkaXQoJG1lc3NhZ2UpOwp9CgovLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1 bmN0aW9uIGllZF9wbHVnaW5fY3JlYXRlX25ldygpIHsKCWV4dHJhY3QoZG9TbGFzaChncHNh KGFycmF5KCduYW1lJykpKSk7CglpZiAoJG5hbWU9PScnKSB7CgkJaWVkX3BsdWdpbl9saXN0 KCdZb3UgYXJlIHN1cHBvc2VkIHRvIG5hbWUgdGhlIG5ldyBwbHVnaW4gOyknKTsKCQlyZXR1 cm47Cgl9CgkkZXhpc3RzID0gZmV0Y2goJ25hbWUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5h bWUpOwoJaWYgKCEkZXhpc3RzKSB7CgkJc2FmZV9pbnNlcnQoInR4cF9wbHVnaW4iLCAiCgkJ CW5hbWU9JyRuYW1lJywKCQkJc3RhdHVzPScwJywKCQkJdHlwZT0nMCcsCgkJCXZlcnNpb249 JzAuMScKCQkiKTsKCQlwYWdldG9wKGdUeHQoJ2VkaXRfcGx1Z2lucycpLCAnZWRpdCB5b3Vy IG5ldyBwbHVnaW4nKTsKCQllY2hvIGllZF9wbHVnaW5fZWRpdF9mb3JtKCRuYW1lKTsKCX0g ZWxzZSB7CgkJaWVkX3BsdWdpbl9saXN0KGdUeHQoJ3BsdWdpbicpLicgPHN0cm9uZz4nLiRu YW1lLic8L3N0cm9uZz4gJy5nVHh0KCdhbHJlYWR5X2V4aXN0cycpKTsKCX0KfQoKLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3NhdmVfYXNfZmlsZSgpIHsKCWdsb2JhbCAkaWVk X3BsdWdpbl9nbG9iYWxzOwoJaWYgKGdwcygnbmFtZScpKSB7CgkJJG5hbWUgPSBncHMoJ25h bWUnKTsKCQkkZGVzY3JpcHRpb24gPSAoJG5hbWUpID8gZmV0Y2goJ2Rlc2NyaXB0aW9uJywn dHhwX3BsdWdpbicsJ25hbWUnLCRuYW1lKSA6ICcnOwoJCSRhdXRob3IgPSAoJG5hbWUpID8g ZmV0Y2goJ2F1dGhvcicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkYXV0 aG9yX3VyaSA9ICgkbmFtZSkgPyBmZXRjaCgnYXV0aG9yX3VyaScsJ3R4cF9wbHVnaW4nLCdu YW1lJywkbmFtZSkgOiAnJzsKCQkkdmVyc2lvbiA9ICgkbmFtZSkgPyBmZXRjaCgndmVyc2lv bicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkY29kZSA9ICgkbmFtZSkg PyBmZXRjaCgnY29kZScsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkkaGVs cCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVscCcsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkg OiAnJzsKCQkkdHlwZSA9ICgkbmFtZSkgPyBmZXRjaCgndHlwZScsJ3R4cF9wbHVnaW4nLCdu YW1lJywkbmFtZSkgOiAnJzsKCQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9w bHVnaW5fZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBh cnJheSgnJywkaGVscCk7Cgl9IGVsc2VpZiAoZ3BzKCdmaWxlbmFtZScpKSB7CgkJJHBsdWdp bj1pZWRfcGx1Z2luX3JlYWRfZmlsZSgkR0xPQkFMU1sncHJlZnMnXVsncGx1Z2luX2NhY2hl X2RpciddLkRTLmdwcygnZmlsZW5hbWUnKSk7CgkJZXh0cmFjdCgkcGx1Z2luKTsKCX0KCSR6 aXAgPSBncHMoJ3ppcCcpOwoJaWYgKGdwcygndHJpbScpPT0xKSB7CgkJJGNvZGU9ZXhwbG9k ZSgiXHJcbiIsJGNvZGUpOwoJCSRjb2RlPWFycmF5X21hcCgndHJpbScsJGNvZGUpOwoJCSRj b2RlPWltcGxvZGUoIlxyXG4iLCRjb2RlKTsKCX0KCglsaXN0ICgkc3RhcnRfY3NzLCAkZW5k X2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xv YmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgoJ aGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW4iKTsKCWhlYWRlcignQ29udGVudC1E aXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicgLiAkbmFtZS4nX3YnLiR2ZXJz aW9uLiAoKCR6aXApPydfemlwJzonJykgLiAnLnR4dCcpOwoKCSR0eXBlcyA9IGFycmF5KCAn Q2xpZW50IHNpZGUnICwgJ0FkbWluL0NsaWVudCBzaWRlJyAsICdMaWJyYXJ5JyApOwoJJHBs dWdpblsnbmFtZSddID0gJG5hbWU7CgkkcGx1Z2luWydhdXRob3InXSA9ICRhdXRob3I7Cgkk cGx1Z2luWydhdXRob3JfdXJpJ10gPSAkYXV0aG9yX3VyaTsKCSRwbHVnaW5bJ3ZlcnNpb24n XSA9ICR2ZXJzaW9uOwoJJHBsdWdpblsnZGVzY3JpcHRpb24nXSA9ICRkZXNjcmlwdGlvbjsK CSRwbHVnaW5bJ2NvZGUnXSA9ICRjb2RlOwoJJHBsdWdpblsndHlwZSddID0gJHR5cGU7Ci8v CSRwbHVnaW5bJ2FsbG93X2h0bWxfaGVscCddID0gdHJ1ZTsKLy8JJHBsdWdpblsnaGVscF9y YXcnXSA9ICRoZWxwLiRzdGFydF9jc3MuJGNzcy4kZW5kX2NzczsKCSRwbHVnaW5bJ2hlbHAn XSA9IGllZF9wbHVnaW5fdGV4dGlsZSgkaGVscCwgJGNzcywgJHN0YXJ0X2NzcywgJGVuZF9j c3MpOwoJJHBsdWdpblsnbWQ1J10gPSBtZDUoICRwbHVnaW5bJ2NvZGUnXSApOwoKCWVjaG8g JyMgTmFtZTogJy4kbmFtZS4nIHYnLiR2ZXJzaW9uLicgJy4oKCR6aXApID8gIihjb21wcmVz c2VkKSIgOiAiIikuJwojIFR5cGU6ICcuJHR5cGVzWyR0eXBlXS4nIHBsdWdpbgojICcuJGRl c2NyaXB0aW9uLicKIyBBdXRob3I6ICcuJGF1dGhvci4nCiMgVVJMOiAnLiRhdXRob3JfdXJp LicKCiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uCiMgVGhpcyBpcyBhIHBsdWdpbiBmb3IgVGV4dHBhdHRl cm4gLSBodHRwOi8vdGV4dHBhdHRlcm4uY29tLwojIFRvIGluc3RhbGw6IHRleHRwYXR0ZXJu ID4gYWRtaW4gPiBwbHVnaW5zCiMgUGFzdGUgdGhlIGZvbGxvd2luZyB0ZXh0IGludG8gdGhl IFwnSW5zdGFsbCBwbHVnaW5cJyBib3g6CiMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgonLigoJHppcCkg PyBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKGd6ZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2lu KSkpLCA3MikgOiBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkcGx1Z2lu KSksIDcyKSk7CgoJZGllKCk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9z YXZlX2FzX3BocF9maWxlKCkgewoJZ2xvYmFsICRwcmVmczsKCWlmIChncHMoJ25hbWUnKSkg ewoJCSRuYW1lID0gZ3BzKCduYW1lJyk7CgkJJGRlc2NyaXB0aW9uID0gKCRuYW1lKSA/IGZl dGNoKCdkZXNjcmlwdGlvbicsJ3R4cF9wbHVnaW4nLCduYW1lJywkbmFtZSkgOiAnJzsKCQkk YXV0aG9yID0gKCRuYW1lKSA/IGZldGNoKCdhdXRob3InLCd0eHBfcGx1Z2luJywnbmFtZScs JG5hbWUpIDogJyc7CgkJJGF1dGhvcl91cmkgPSAoJG5hbWUpID8gZmV0Y2goJ2F1dGhvcl91 cmknLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHZlcnNpb24gPSAoJG5h bWUpID8gZmV0Y2goJ3ZlcnNpb24nLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7 CgkJJGNvZGUgPSAoJG5hbWUpID8gZmV0Y2goJ2NvZGUnLCd0eHBfcGx1Z2luJywnbmFtZScs JG5hbWUpIDogJyc7CgkJJGhlbHAgPSAoJG5hbWUpID8gZmV0Y2goJ2hlbHAnLCd0eHBfcGx1 Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJJHR5cGUgPSAoJG5hbWUpID8gZmV0Y2goJ3R5 cGUnLCd0eHBfcGx1Z2luJywnbmFtZScsJG5hbWUpIDogJyc7CgkJbGlzdCgkY3NzLCRoZWxw KSA9ICgkaGVscCkgPyBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkaGVscCwgIkNTUyIsICI8 IS0tfC0tPiIsIHRydWUpIDogYXJyYXkoJycsJGhlbHApOwoJfSBlbHNlaWYgKGdwcygnZmls ZW5hbWUnKSkgewoJCSRwbHVnaW49aWVkX3BsdWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3By ZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXInXS5EUy5ncHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJh Y3QoJHBsdWdpbik7Cgl9CgoJJG9yZGVyID0gKGlzc2V0KCRwcmVmc1snaWVkX3BsdWdpbl9v dXRwdXRfb3JkZXInXSkgJiYgaXNfbnVtZXJpYygkcHJlZnNbJ2llZF9wbHVnaW5fb3V0cHV0 X29yZGVyJ10pKSA/ICRwcmVmc1snaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXInXSA6IDA7CgoJ aGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGhwIik7CgloZWFkZXIoJ0NvbnRlbnQtRGlz cG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJG5hbWUuJ192Jy4kdmVyc2lv bi4gJy5waHAnKTsKCgkkaGVscGNodW5rID0gJ2lmICgwKSB7Jy5uCi4nPz4nLm4KLic8IS0t Jy5uCi4nIyAtLS0gQkVHSU4gUExVR0lOIENTUyAtLS0nLm4KLiRjc3MubgouJyMgLS0tIEVO RCBQTFVHSU4gQ1NTIC0tLScubgouJy0tPicubgouJzwhLS0nLm4KLicjIC0tLSBCRUdJTiBQ TFVHSU4gSEVMUCAtLS0nLm4KLiRoZWxwLm4KLicjIC0tLSBFTkQgUExVR0lOIEhFTFAgLS0t Jy5uCi4nLS0+Jy5uCi4nPD9waHAnLm4KLid9Jy5uOwoKCSRjb2RlY2h1bmsgPSAnIyAtLS0g QkVHSU4gUExVR0lOIENPREUgLS0tJy5uCi4kY29kZS5uCi4nIyAtLS0gRU5EIFBMVUdJTiBD T0RFIC0tLScubjsKCgllY2hvICc8P3BocCcubgouJy8vIFRoaXMgaXMgYSBQTFVHSU4gVEVN UExBVEUuJy5uCi4nLy8gQ29weSB0aGlzIGZpbGUgdG8gYSBuZXcgbmFtZSBsaWtlIGFiY19t eXBsdWdpbi5waHAuICBFZGl0IHRoZSBjb2RlLCB0aGVuJy5uCi4nLy8gcnVuIHRoaXMgZmls ZSBhdCB0aGUgY29tbWFuZCBsaW5lIHRvIHByb2R1Y2UgYSBwbHVnaW4gZm9yIGRpc3RyaWJ1 dGlvbjonLm4KLicvLyAkIHBocCBhYmNfbXlwbHVnaW4ucGhwID4gYWJjX215cGx1Z2luLTAu MS50eHQnLm4KLm4KLicvLyBQbHVnaW4gbmFtZSBpcyBvcHRpb25hbC4gIElmIHVuc2V0LCBp dCB3aWxsIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBjdXJyZW50Jy5uCi4nLy8gZmlsZSBuYW1l LiBVbmNvbW1lbnQgYW5kIGVkaXQgdGhpcyBsaW5lIHRvIG92ZXJyaWRlOicubgouJyRwbHVn aW5bXCduYW1lXCddID0gJy5kb1F1b3RlKCRuYW1lKS4nOycubgouJyRwbHVnaW5bXCd2ZXJz aW9uXCddID0gJy5kb1F1b3RlKCR2ZXJzaW9uKS4nOycubgouJyRwbHVnaW5bXCdhdXRob3Jc J10gPSAnLmRvUXVvdGUoJGF1dGhvcikuJzsnLm4KLickcGx1Z2luW1wnYXV0aG9yX3VyaVwn XSA9ICcuZG9RdW90ZSgkYXV0aG9yX3VyaSkuJzsnLm4KLickcGx1Z2luW1wnZGVzY3JpcHRp b25cJ10gPSAnLmRvUXVvdGUoJGRlc2NyaXB0aW9uKS4nOycubgoubgouJy8vIFBsdWdpbiB0 eXBlczonLm4KLicvLyAwID0gcmVndWxhciBwbHVnaW47IGxvYWRlZCBvbiB0aGUgcHVibGlj IHdlYiBzaWRlIG9ubHknLm4KLicvLyAxID0gYWRtaW4gcGx1Z2luOyBsb2FkZWQgb24gYm90 aCB0aGUgcHVibGljIGFuZCBhZG1pbiBzaWRlJy5uCi4nLy8gMiA9IGxpYnJhcnk7IGxvYWRl ZCBvbmx5IHdoZW4gaW5jbHVkZV9wbHVnaW4oKSBvciByZXF1aXJlX3BsdWdpbigpIGlzIGNh bGxlZCcubgouJyRwbHVnaW5bXCd0eXBlXCddID0gJy5kb1F1b3RlKCR0eXBlKS4nOycubgou bgouJ0BpbmNsdWRlX29uY2UoXCd6ZW1fdHBsLnBocFwnKTsnLm4KLm4KLigoJG9yZGVyID09 IDApID8gJGNvZGVjaHVuayA6ICRoZWxwY2h1bmspCi4oKCRvcmRlciA9PSAxKSA/ICRjb2Rl Y2h1bmsgOiAkaGVscGNodW5rKQouJz8+JzsKCWRpZSgpOwp9CgovLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0 aW9uIGllZF9wbHVnaW5fdXBsb2FkKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX2dsb2JhbHM7 CglsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFya2Vy cygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1Z2lu X2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgoJaWYgKCEkX0ZJTEVTWyd0aGVmaWxlJ11bJ3RtcF9u YW1lJ10pIHsKCQlpZWRfcGx1Z2luX2xpc3QoJ1lvdSBhcmUgc3VwcG9zZWQgdG8gY2hvb3Nl IHRoZSBmaWxlIDspJyk7cmV0dXJuOwoJfQoJJHBsdWdpbiA9IGllZF9wbHVnaW5fcmVhZF9m aWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSk7CgkkbmV3bmFtZSA9IChlbXB0 eSgkcGx1Z2luWyduYW1lJ10pKSA/IGJhc2VuYW1lKCRfRklMRVNbJ3RoZWZpbGUnXVsnbmFt ZSddLCAnLnBocCcpIDogJHBsdWdpblsnbmFtZSddOwoJaWYgKGdwcygnbmFtZScpIGFuZCBn cHMoJ25hbWUnKSE9J3h4eF94eHh4eHgnKSB7CgkJJG5ld25hbWU9Z3BzKCduYW1lJyk7Cgl9 CglpZiAoZW1wdHkoJHBsdWdpblsnY29kZSddKSkgewoJCSRwbHVnaW5bJ2NvZGUnXSA9IGlt cGxvZGUgKCIiLCBmaWxlKCRfRklMRVNbJ3RoZWZpbGUnXVsndG1wX25hbWUnXSkpOwoJfQoK CWlmIChNQUdJQ19RVU9URVNfR1BDKSB7CgkJZm9yZWFjaCAoJHBsdWdpbiBhcyAkaXRlbSA9 PiAkdmFsdWUpIHsKCQkJJHBsdWdpblskaXRlbV0gPSBhZGRzbGFzaGVzKCR2YWx1ZSk7CgkJ fQoJfQoJZXh0cmFjdCgkcGx1Z2luKTsKCSRtZDU9bWQ1KCRjb2RlKTsKCSR2ZXJzaW9uID0g KGVtcHR5KCR2ZXJzaW9uKSkgPyAiMC4xIiA6ICR2ZXJzaW9uOwoJJGhlbHAgPSAkaGVscC4o KCRjc3MpID8gbi4kc3RhcnRfY3NzLm4uJGNzcy5uLiRlbmRfY3NzIDogJycpOwoJJGV4aXN0 cyA9IGZldGNoKCduYW1lJywndHhwX3BsdWdpbicsJ25hbWUnLCRuZXduYW1lKTsKCWlmICgk ZXhpc3RzKSB7CgkJJHN0YXR1cyA9IGZldGNoKCdzdGF0dXMnLCd0eHBfcGx1Z2luJywnbmFt ZScsJG5ld25hbWUpOwoJCSRycyA9IHNhZmVfdXBkYXRlKAoJCQkidHhwX3BsdWdpbiIsCgkJ CSJzdGF0dXMgICAgICA9ICckc3RhdHVzJywKCQkJdHlwZSAgICAgICAgID0gJyR0eXBlJywK CQkJYXV0aG9yICAgICAgID0gJyRhdXRob3InLAoJCQlhdXRob3JfdXJpICAgPSAnJGF1dGhv cl91cmknLAoJCQl2ZXJzaW9uICAgICAgPSAnJHZlcnNpb24nLAoJCQlkZXNjcmlwdGlvbiAg PSAnJGRlc2NyaXB0aW9uJywKCQkJaGVscCAgICAgICAgID0gJyRoZWxwJywKCQkJY29kZSAg ICAgICAgID0gJyRjb2RlJywKCQkJY29kZV9yZXN0b3JlID0gJyRjb2RlJywKCQkJY29kZV9t ZDUgICAgID0gJyRtZDUnIiwKCQkJIm5hbWUgICAgICAgID0gJyRuZXduYW1lJyIKCQkpOwoJ fSBlbHNlIHsKCQkkcnMgPSBzYWZlX2luc2VydCgKCQkJInR4cF9wbHVnaW4iLAoJCQkibmFt ZSAgICAgICAgID0gJyRuZXduYW1lJywKCQkJc3RhdHVzICAgICAgID0gMCwKCQkJdHlwZSAg ICAgICAgID0gJyR0eXBlJywKCQkJYXV0aG9yICAgICAgID0gJyRhdXRob3InLAoJCQlhdXRo b3JfdXJpICAgPSAnJGF1dGhvcl91cmknLAoJCQl2ZXJzaW9uICAgICAgPSAnJHZlcnNpb24n LAoJCQlkZXNjcmlwdGlvbiAgPSAnJGRlc2NyaXB0aW9uJywKCQkJaGVscCAgICAgICAgID0g JyRoZWxwJywKCQkJY29kZSAgICAgICAgID0gJyRjb2RlJywKCQkJY29kZV9yZXN0b3JlID0g JyRjb2RlJywKCQkJY29kZV9tZDUgICAgID0gJyRtZDUnIgoJCSk7Cgl9CgoJcGFnZXRvcChn VHh0KCdlZGl0X3BsdWdpbnMnKSwgbWVzc2VuZ2VyKCdwbHVnaW4nLCRuZXduYW1lLCgkZXhp c3RzKT8ndXBkYXRlZCc6J3VwbG9hZGVkJykpOwoJZWNobyBpZWRfcGx1Z2luX2VkaXRfZm9y bSgkbmV3bmFtZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9yZWFkX2Zp bGUoJGZpbGVwYXRoKSB7CgkkY29udGVudCA9IGZpbGUoJGZpbGVwYXRoKTsKCSRzb3VyY2Vf bGluZXMgPSBjb3VudCgkY29udGVudCk7CgkkbWV0YWRhdGEgPSBhcnJheSgKCQkJCQkJJ25h bWUnID0+ICcnLAoJCQkJCQkndmVyc2lvbicgPT4gJycsCgkJCQkJCSdhdXRob3InID0+ICcn LAoJCQkJCQknYXV0aG9yX3VyaScgPT4gJycsCgkJCQkJCSdkZXNjcmlwdGlvbicgPT4gJycs CgkJCQkJCSd0eXBlJyA9PiAnJywKCQkJCQkpOwoJZm9yICgkaWR4PTA7ICRpZHggPCAkc291 cmNlX2xpbmVzOyAkaWR4KyspIHsKCQkkY29udGVudFskaWR4XSA9IHJ0cmltKCRjb250ZW50 WyRpZHhdKTsKCQlpZiAoc3RycG9zKCRjb250ZW50WyRpZHhdLCAnJHBsdWdpblsnKSA9PT0g MCkgewoJCQkvLyBGb3VuZCBhIHBsdWdpbiB2YXJpYWJsZSBzbyBleHRyYWN0IGl0CgkJCSRw YXJ0cyA9IGV4cGxvZGUoIiA9ICIsICRjb250ZW50WyRpZHhdKTsKCQkJJHBhcnRzWzBdID0g c3RyX3JlcGxhY2UoIiciLCAiIiwgJHBhcnRzWzBdKTsKCQkJcHJlZ19tYXRjaCgiL3BsdWdp blxbKC4qKVxdLyIsICRwYXJ0c1swXSwgJHZhcik7CgkJCSR2YWwgPSB0cmltKCRwYXJ0c1sx XSwgIic7Iik7CgkJCSRtZXRhZGF0YVskdmFyWzFdXSA9ICR2YWw7CgkJfQoJfQoJJG1ldGFk YXRhWydoZWxwJ10gPSBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkY29udGVudCwgJ0hFTFAn KTsKCSRtZXRhZGF0YVsnY3NzJ10gID0gaWVkX3BsdWdpbl9leHRyYWN0X2h1bmsoJGNvbnRl bnQsICdDU1MnICk7CgkkbWV0YWRhdGFbJ2NvZGUnXSA9IGllZF9wbHVnaW5fZXh0cmFjdF9o dW5rKCRjb250ZW50LCAnQ09ERScpOwoKCXJldHVybiAkbWV0YWRhdGE7Cn0KCi8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLy8gcmlwcGVkIGFuZCBtb2RkZWQgZnJvbSBuZXQtY2FydmVyJ3MgemVtX3RwbCB0ZW1w bGF0ZQpmdW5jdGlvbiBpZWRfcGx1Z2luX2V4dHJhY3RfaHVuaygkY29udGVudCwgJGh1bmss ICRjbW50PSIjIiwgJGRlbGV0ZT1mYWxzZSkgewoJJGRsbSA9IGV4cGxvZGUoInwiLCAkY21u dCk7CgkkZGxtU3RhcnQgPSAkZGxtWzBdOwoJJGRsbUVuZCA9IChjb3VudCgkZGxtKSA+IDEp ID8gJGRsbVsxXSA6ICcnOwoJJGxpbmVzID0gaWVkX3BsdWdpbl9tYWtlX2FycmF5KCRjb250 ZW50KTsKCglsaXN0ICgkc3RhcnRfZGVsaW0sICRlbmRfZGVsaW0pID0gaWVkX3BsdWdpbl9t YWtlX21hcmtlcnMoJGh1bmssICRkbG1TdGFydCwgJGRsbUVuZCk7Cgkkc3RhcnQgPSBhcnJh eV9zZWFyY2goJHN0YXJ0X2RlbGltLCAkbGluZXMpICsgMTsKCSRlbmQgPSBhcnJheV9zZWFy Y2goJGVuZF9kZWxpbSwgJGxpbmVzKTsKCSRleHRyYWN0ZWQgPSBhcnJheSgpOwoJaWYgKGlz X251bWVyaWMoJHN0YXJ0KSAmJiBpc19udW1lcmljKCRlbmQpICYmICRlbmQgPiAkc3RhcnQp IHsKCQkkZXh0cmFjdGVkID0gYXJyYXlfc2xpY2UoJGxpbmVzLCAkc3RhcnQsICRlbmQtJHN0 YXJ0KTsKCQkkbGluZU51bSA9IGNvdW50KCRleHRyYWN0ZWQpLTE7CgkJd2hpbGUgKHRyaW0o JGV4dHJhY3RlZFskbGluZU51bS0tXSkgPT0gIiIpIHsKCQkJYXJyYXlfcG9wKCRleHRyYWN0 ZWQpOwogICAgICB9CgkJd2hpbGUgKHRyaW0oJGV4dHJhY3RlZFswXSkgPT0gIiIpIHsKCQkJ YXJyYXlfc2hpZnQoJGV4dHJhY3RlZCk7CiAgICAgIH0KCQlpZiAoJGRlbGV0ZSkgewoJCQkk Y2hvcHBlZCA9IGFycmF5X3NwbGljZSgkbGluZXMsICRzdGFydC0xLCAkZW5kLSRzdGFydCsy LCAiIik7CgkJfQoJfQoJJHJlbWFpbnMgPSAkbGluZXM7CgkvLyBDaGVjayBpZiB0aGUgQ1NT IHNlY3Rpb24gaGFzIDxzdHlsZT4gdGFncyBhcm91bmQgaXQ7IGFkZCB0aGVtIGlmIG5vdAoJ aWYgKCRodW5rID09ICJDU1MiKSB7CgkJJG51bXJvd3MgPSBjb3VudCgkZXh0cmFjdGVkKTsK CQlpZiAoJG51bXJvd3MgPiAxKSB7CgkJCWlmIChzdHJwb3MoJGV4dHJhY3RlZFskbnVtcm93 cy0xXSwgJzwvc3R5bGU+JykgPT09IGZhbHNlKSB7CgkJCQkkZXh0cmFjdGVkW10gPSAnPC9z dHlsZT4nOwoJCQl9CgkJCWlmIChzdHJwb3MoJGV4dHJhY3RlZFswXSwgJzxzdHlsZSAnKSA9 PT0gZmFsc2UpIHsKCQkJCWFycmF5X3Vuc2hpZnQoJGV4dHJhY3RlZCwgJzxzdHlsZSB0eXBl PSJ0ZXh0L2NzcyI+Jyk7CgkJCX0KCQl9Cgl9CglpZiAoJGRlbGV0ZSkgewoJCXJldHVybiBh cnJheSh0cmltKGpvaW4oIlxuIiwgJGV4dHJhY3RlZCkpLCB0cmltKGpvaW4oIlxuIiwgJHJl bWFpbnMpKSk7Cgl9IGVsc2UgewoJCXJldHVybiB0cmltKGpvaW4oIlxuIiwgJGV4dHJhY3Rl ZCkpOwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGllZF9wbHVnaW5fbWFrZV9hcnJheSgk YXJyKSB7CglpZiAoIWlzX2FycmF5KCRhcnIpKSB7CgkJJGFyciA9IGV4cGxvZGUoIlxuIiwg JGFycik7Cgl9Cgkkc291cmNlX2xpbmVzID0gY291bnQoJGFycik7Cglmb3IgKCRpZHg9MDsg JGlkeCA8ICRzb3VyY2VfbGluZXM7ICRpZHgrKykgewoJCSRhcnJbJGlkeF0gPSBydHJpbSgk YXJyWyRpZHhdKTsKCX0KCXJldHVybiAkYXJyOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZ1bmN0aW9uIGll ZF9wbHVnaW5fbWFrZV9tYXJrZXJzKCRodW5rLCAkc3RhcnQsICRlbmQpIHsKCWdsb2JhbCAk aWVkX3BsdWdpbl9nbG9iYWxzOwoJJHNtYXJrZXIgPSAkc3RhcnQgLiBzdHJfcmVwbGFjZSgi U0VDVElPTiIsICRodW5rLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydzdGFydCddKSAuICgoJGVu ZCk/JyAnLiRlbmQ6JycpOwoJJGVtYXJrZXIgPSAkc3RhcnQgLiBzdHJfcmVwbGFjZSgiU0VD VElPTiIsICRodW5rLCAkaWVkX3BsdWdpbl9nbG9iYWxzWydlbmQnXSkgLiAoKCRlbmQpPycg Jy4kZW5kOicnKTsKCXJldHVybiAoYXJyYXkoJHNtYXJrZXIsICRlbWFya2VyKSk7Cn0KCi8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLy8gcmlwcGVkIGFuZCBtb2RkZWQgZnJvbSBuZXQtY2FydmVyJ3MgemVtX3Rw bCB0ZW1wbGF0ZQpmdW5jdGlvbiBpZWRfcGx1Z2luX2FkbWluX2NoZWNrKCRjb2RlYmxvY2ss ICR0eXBlKSB7CgkkcmUgPSAnL0B0eHBpbnRlcmZhY2UuKj09LiphZG1pbi8nOwoJJHJldCA9 IHRydWU7CglpZiAocHJlZ19tYXRjaCgkcmUsICRjb2RlYmxvY2spICYmICR0eXBlID09IDAp IHsKCQkkcmV0ID0gZmFsc2U7Cgl9CglyZXR1cm4gJHJldDsKfQoKLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5j dGlvbiBpZWRfcGx1Z2luX3RleHRpbGUoJGhlbHAsICRjc3MsICRzdGFydF9kbG0sICRlbmRf ZGxtKSB7CglAaW5jbHVkZV9vbmNlIHR4cGF0aC4nL2xpYi9jbGFzc1RleHRpbGUucGhwJzsK CSRvdXQgPSAkaGVscDsKCWlmIChjbGFzc19leGlzdHMoJ1RleHRpbGUnKSkgewoJCS8vIFRy eSBhbmQgYmUgYSBsaXR0bGUgbW9yZSBpbnRlbGxpZ2VudCBhYm91dCBhcHBseWluZyB0ZXh0 aWxlIG9yIG5vdAoJCSRyZSA9ICcvaDEoXCguKlwpKT9cLi8nOwoJCWlmIChwcmVnX21hdGNo KCRyZSwgJGhlbHApKSB7CgkJCSR0ZXh0aWxlID0gbmV3IFRleHRpbGUoKTsKCQkJJG91dCA9 ICR0ZXh0aWxlLT5UZXh0aWxlVGhpcygkaGVscCk7CgkJfQoJfQoJJG91dCAuPSAiXG4kc3Rh cnRfZGxtXG4kY3NzXG4kZW5kX2RsbVxuIjsKCXJldHVybiAkb3V0Owp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIGllZF9pbnNlcnRfZWRpdG9ycygpIHsKCWdsb2JhbCAkcHJlZnMsICRpZWRf cGx1Z2luX3ByZWZzOwoJJG91dCA9IGFycmF5KCk7CgoJJHByZWZrZXlzID0gZG9RdW90ZShp bXBsb2RlKCInLCciLGFycmF5X2tleXMoJGllZF9wbHVnaW5fcHJlZnNbMF0pKSk7CgkkcnMg PSBzYWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBfcHJlZnMnLCduYW1lIGluICgnLiRw cmVma2V5cy4nKScpOwoJaWYgKGNvdW50KCRycykgPT0gY291bnQoJGllZF9wbHVnaW5fcHJl ZnNbMF0pKSB7CgkJJGVkID0gYXJyYXkoKTsKCQkkZWRbJHByZWZzWydpZWRfcGx1Z2luX2Vk aXRvciddXSA9ICRwcmVmc1snaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCddOwoJCSRlZFskcHJl ZnNbJ2llZF9wbHVnaW5faGVscF9lZGl0b3InXV0gPSAkcHJlZnNbJ2llZF9wbHVnaW5faGVs cF9lZGl0b3JfcGF0aCddOwoKCQlmb3JlYWNoICgkZWQgYXMgJGVkaXRvciA9PiAkZWRpdG9y X2RpcikgewoJCQlzd2l0Y2ggKCRlZGl0b3IpIHsKCQkJCWNhc2UgInRpbnlfbWNlIjoKCQkJ CQkkb3V0W10gPSA8PDxFT0YKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i Jy4kZWRpdG9yX2Rpci4nL3RpbnlfbWNlLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0 ZXh0L2phdmFzY3JpcHQiPgoJdGlueU1DRS5pbml0KHsKCQltb2RlIDogInNwZWNpZmljX3Rl eHRhcmVhcyIsCgkJZWRpdG9yX3NlbGVjdG9yIDogIm1jZUVkaXRvciIsCgkJdGhlbWVfYWR2 YW5jZWRfdG9vbGJhcl9sb2NhdGlvbiA6ICJ0b3AiLAoJCXRoZW1lX2FkdmFuY2VkX2J1dHRv bnMxIDogImJvbGQsaXRhbGljLHVuZGVybGluZSxzdHJpa2V0aHJvdWdoLGZvcmVjb2xvcixi YWNrY29sb3IscmVtb3ZlZm9ybWF0LG51bWxpc3QsYnVsbGlzdCxvdXRkZW50LGluZGVudCxq dXN0aWZ5bGVmdCxqdXN0aWZ5Y2VudGVyLGp1c3RpZnlyaWdodCxqdXN0aWZ5ZnVsbCIsCgkJ dGhlbWVfYWR2YW5jZWRfYnV0dG9uczIgOiAibGluayx1bmxpbmssc2VwYXJhdG9yLGlicm93 c2VyLHNlcGFyYXRvcixzZWFyY2gscmVwbGFjZSxzZXBhcmF0b3IsY3V0LGNvcHkscGFzdGUs c2VwYXJhdG9yLGNvZGUsc2VwYXJhdG9yLGZvcm1hdHNlbGVjdCIsCgkJdGhlbWVfYWR2YW5j ZWRfYnV0dG9uczMgOiAiIgoJfSk7Cjwvc2NyaXB0PjsKRU9GOwoJCQkJCWJyZWFrOwoJCQkJ Y2FzZSAiZWRpdF9hcmVhIjoKCQkJCQkkb3V0W10gPSA8PDxFT0YKPHNjcmlwdCB0eXBlPSJ0 ZXh0L2phdmFzY3JpcHQiIHNyYz0iJGVkaXRvcl9kaXIvZWRpdF9hcmVhX2Z1bGwuanMiPjwv c2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkvLyBpbml0aWFsaXNh dGlvbgoJZWRpdEFyZWFMb2FkZXIuaW5pdCh7CgkJaWQ6ICJwbHVnaW5fZWRpdG9yIgkvLyBp ZCBvZiB0aGUgdGV4dGFyZWEgdG8gdHJhbnNmb3JtCgkJLHN0YXJ0X2hpZ2hsaWdodDogdHJ1 ZQkvLyBpZiBzdGFydCB3aXRoIGhpZ2hsaWdodAoJCSxhbGxvd19yZXNpemU6ICJib3RoIgoJ CSxhbGxvd190b2dnbGU6IHRydWUKCQksbGFuZ3VhZ2U6ICJlbiIKCQksc3ludGF4OiAicGhw IgoJfSk7Cjwvc2NyaXB0PgpFT0Y7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJjb2RlcHJlc3Mi OgoJCQkJCSRvdXRbXSA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIn LiRlZGl0b3JfZGlyLicvY29kZXByZXNzLmpzIj48L3NjcmlwdD4nOwoJCQkJCWJyZWFrOwoJ CQl9CgkJfQoJfQoKCXJldHVybiBpbXBsb2RlKCJcbiIsICRvdXQpOwp9CgovLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CmZ1bmN0aW9uIGllZF9wbHVnaW5faGVscF92aWV3ZXIoJG1lc3NhZ2U9JycpIHsKCWdsb2Jh bCAkaWVkX3BsdWdpbl9nbG9iYWxzOwoJcGFnZXRvcChnVHh0KCdlZGl0X3BsdWdpbnMnKSwk bWVzc2FnZSk7CgoJaWYgKGdwcygnbmFtZScpKSB7CgkJJG5hbWUgPSBncHMoJ25hbWUnKTsK CQkkaGVscCA9ICgkbmFtZSkgPyBmZXRjaCgnaGVscCcsJ3R4cF9wbHVnaW4nLCduYW1lJywk bmFtZSkgOiAnJzsKCQlsaXN0KCRjc3MsJGhlbHApID0gKCRoZWxwKSA/IGllZF9wbHVnaW5f ZXh0cmFjdF9odW5rKCRoZWxwLCAiQ1NTIiwgIjwhLS18LS0+IiwgdHJ1ZSkgOiBhcnJheSgn JywkaGVscCk7Cgl9IGVsc2UgaWYgKGdwcygnZmlsZW5hbWUnKSkgewoJCSRwbHVnaW49aWVk X3BsdWdpbl9yZWFkX2ZpbGUoJEdMT0JBTFNbJ3ByZWZzJ11bJ3BsdWdpbl9jYWNoZV9kaXIn XS5EUy5ncHMoJ2ZpbGVuYW1lJykpOwoJCWV4dHJhY3QoJHBsdWdpbik7Cgl9CgllY2hvIHN0 YXJ0VGFibGUoJ2VkaXQnKTsKCWlmIChlbXB0eSgkaGVscCkpIHsKCQllY2hvIHRyKHRkYSgn PHA+SGVscCBub3QgYWNjZXNzaWJsZSBmcm9tIHRoaXMgZmlsZS48L3A+JykpOwoJfSBlbHNl IHsKCQlsaXN0ICgkc3RhcnRfY3NzLCAkZW5kX2NzcykgPSBpZWRfcGx1Z2luX21ha2VfbWFy a2VycygiQ1NTIiwgJGllZF9wbHVnaW5fZ2xvYmFsc1snY3NzX3N0YXJ0J10sICRpZWRfcGx1 Z2luX2dsb2JhbHNbJ2Nzc19lbmQnXSk7CgkJJHBsdWdpblsnaGVscCddID0gaWVkX3BsdWdp bl90ZXh0aWxlKCRoZWxwLCAkY3NzLCAkc3RhcnRfY3NzLCAkZW5kX2Nzcyk7CgkJZWNobyB0 cih0ZGEoICc8cD5FeHRyYWN0ZWQgJy4oIWVtcHR5KCRwbHVnaW5bJ2hlbHAnXSkgPyAnYW5k IFRleHRpbGUgcHJvY2Vzc2VkJyA6ICcnKS4nIGhlbHAgc2VjdGlvbiBmb2xsb3dzJiM4MjMw OzwvcD48aHI+JywgJyB3aWR0aD0iNjAwIicpKTsKCQllY2hvIHRyKHRkYSgkcGx1Z2luWydo ZWxwJ10sICcgd2lkdGg9IjYwMCInKSk7Cgl9CgllY2hvIGVuZFRhYmxlKCk7Cn0KCi8vIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9zZXR1cCgkbWVzc2FnZT0nJykgewoJZ2xvYmFs ICRpZWRfcGx1Z2luX3ByZWZzOwoJJG51bVJlcVByZWZzID0gY291bnQoJGllZF9wbHVnaW5f cHJlZnNbMF0pOwoKCXBhZ2V0b3AoZ1R4dCgnZWRpdF9wbHVnaW5zJyksJG1lc3NhZ2UpOwoJ JHByZWZrZXlzID0gZG9RdW90ZShpbXBsb2RlKCInLCciLGFycmF5X2tleXMoJGllZF9wbHVn aW5fcHJlZnNbMF0pKSk7CgkkcnMgPSBzYWZlX3Jvd3MoJ25hbWUsdmFsLGh0bWwnLCd0eHBf cHJlZnMnLCduYW1lIGluICgnLiRwcmVma2V5cy4nKScpOwoJJG51bVJvd3MgPSBjb3VudCgk cnMpOwoKCSRidG5TYXZlID0gZklucHV0KCdzdWJtaXQnLCAnc3VibWl0JywgZ1R4dCgnc2F2 ZScpLCAncHVibGlzaCcpOwoJJGJ0bkluc3RhbGwgPSAnPGZvcm0gbWV0aG9kPSJwb3N0IiBh Y3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2VyJiMzODtzdGVwPWllZF9wbHVnaW5f cHJlZnNfaW5zdGFsbCIgc3R5bGU9ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0 JywgJ3N1Ym1pdCcsIGdUeHQoJ2luc3RhbGwnKSwgJ3B1Ymxpc2gnKS4nPC9mb3JtPic7Cgkk YnRuUmVtb3ZlID0gJzxmb3JtIG1ldGhvZD0icG9zdCIgYWN0aW9uPSI/ZXZlbnQ9aWVkX3Bs dWdpbl9jb21wb3NlciYjMzg7c3RlcD1pZWRfcGx1Z2luX3ByZWZzX3JlbW92ZSIgc3R5bGU9 ImRpc3BsYXk6aW5saW5lIj4nLmZJbnB1dCgnc3VibWl0JywgJ3N1Ym1pdCcsIGdUeHQoJ2Rl bGV0ZScpLCAncHVibGlzaCcpLic8L2Zvcm0+JzsKCSRidG5TdHlsZSA9ICcgc3R5bGU9ImJv cmRlcjowO2hlaWdodDoyNXB4Iic7CgoJZWNobyBzdGFydFRhYmxlKCdsaXN0Jyk7CglpZiAo JG51bVJvd3MgPT0gJG51bVJlcVByZWZzKSB7CgkJLy8gUHJlZnMgYWxsIGluc3RhbGxlZAoJ CWVjaG8gdHIodGRhKHN0cm9uZygnUGx1Z2luIENvbXBvc2VyIHByZWZlcmVuY2VzJyksICcg Y29sc3Bhbj0iMiInKSAuIHRkYSgkYnRuUmVtb3ZlLCAkYnRuU3R5bGUpICk7CgkJZWNobyAn PGZvcm0gbWV0aG9kPSJwb3N0IiBhY3Rpb249Ij9ldmVudD1pZWRfcGx1Z2luX2NvbXBvc2Vy JiMzODtzdGVwPWllZF9wbHVnaW5fcHJlZnNfdXBkYXRlIj4nOwoJCWZvciAoJGlkeCA9IDA7 ICRpZHggPCAkbnVtUm93czsgJGlkeCsrKSB7CgkJCSRhID0gJHJzWyRpZHhdOwoJCQkkbGFi ZWwgPSAnPGxhYmVsIGZvcj0iJy4kYVsnbmFtZSddLiciPicuaWVkX3BsdWdpbl9nVHh0KCRh WyduYW1lJ10pLic6PC9sYWJlbD4nOwoJCQkkb3V0ID0gdGRhKCRsYWJlbCwgJyBzdHlsZT0i dGV4dC1hbGlnbjogcmlnaHQ7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IicpOwoJCQlzd2l0 Y2goJGFbJ25hbWUnXSkgewoJCQkJY2FzZSAiaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCI6CgkJ CQljYXNlICJpZWRfcGx1Z2luX2hlbHBfZWRpdG9yX3BhdGgiOgoJCQkJCSRvdXQgLj0gdGQo ZklucHV0KCd0ZXh0JywgJGFbJ25hbWUnXSwgJGFbJ3ZhbCddLCAnZWRpdCcsICcnLCAnJywg NTAsICcnLCAkYVsnbmFtZSddKSk7CgkJCQkJYnJlYWs7CgkJCQljYXNlICJpZWRfcGx1Z2lu X2VkaXRvciI6Ci8vCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFy cmF5KCdub25lJyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnLCAnY29k ZXByZXNzJyA9PiAnQ29kZVByZXNzJyksICRhWyd2YWwnXSwgJycsICcgb25jaGFuZ2U9Imll ZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52YWx1ZSk7IicsICRhWyduYW1lJ10p KTsKCQkJCQkkb3V0IC49IHRkKHNlbGVjdElucHV0KCRhWyduYW1lJ10sIGFycmF5KCdub25l JyA9PiAnTm9uZScsICdlZGl0X2FyZWEnID0+ICdFZGl0IEFyZWEnKSwgJGFbJ3ZhbCddLCAn JywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dhcCh0aGlzLmlkLCB0aGlzLnZhbHVl KTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSAiaWVkX3BsdWdpbl9o ZWxwX2VkaXRvciI6CgkJCQkJJG91dCAuPSB0ZChzZWxlY3RJbnB1dCgkYVsnbmFtZSddLCBh cnJheSgndGV4dGlsZScgPT4gJ05vbmUgKFRleHRpbGUpJywgJ3RpbnlfbWNlJyA9PiAnVGlu eSBNQ0UnKSwgJGFbJ3ZhbCddLCAnJywgJyBvbmNoYW5nZT0iaWVkX3BsdWdpbl9wcmVmc3dh cCh0aGlzLmlkLCB0aGlzLnZhbHVlKTsiJywgJGFbJ25hbWUnXSkpOwoJCQkJCWJyZWFrOwoJ CQkJY2FzZSAiaWVkX3BsdWdpbl9vdXRwdXRfb3JkZXIiOgoJCQkJCSRvdXQgLj0gdGQocmFk aW8oJGFbJ25hbWUnXSwwLCgoJGFbJ3ZhbCddPT0wKT8xOjApKS4iQ29kZSBmaXJzdCAiIC4g cmFkaW8oJGFbJ25hbWUnXSwxLCgoJGFbJ3ZhbCddPT0xKT8xOjApKS4iSGVscCBmaXJzdCAi KTsKCQkJCQlicmVhazsKCQkJCWNhc2UgImllZF9wbHVnaW5fZWRpdG9yX3dpZHRoIjoKCQkJ CQkkb3V0IC49IHRkKGZJbnB1dCgndGV4dCcsICRhWyduYW1lJ10sICRhWyd2YWwnXSwgJ2Vk aXQnLCAnJywgJycsIDUsICcnLCAkYVsnbmFtZSddKSk7CgkJCQkJYnJlYWs7CgkJCX0KCQkJ ZWNobyB0cigkb3V0KTsKCQl9CgkJZWNobyB0cih0ZGEoJGJ0blNhdmUsICRidG5TdHlsZSkp OwoJCWVjaG8gJzwvZm9ybT4nOwoJfSBlbHNlIGlmICgkbnVtUm93cyA+IDAgJiYgJG51bVJv d3MgPCAkbnVtUmVxUHJlZnMpIHsKCQllY2hvIHRyKHRkYShzdHJvbmcoJ1NvbWUgcHJlZnMg YWxyZWFkeSBpbnN0YWxsZWQuJykuYnIuYnIKCQkJCQkJLidJdCBpcyBlaXRoZXIgYmVjYXVz ZSB0aGlzIGlzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlJy5icgoJCQkJCQkuJ3BsdWdp biB0byBvbmUgeW91IGhhZCBiZWZvcmUgb3IgdGhlIHByZWZlcmVuY2VzJy5icgoJCQkJCQku J2hhdmUgYmVjb21lIGNvcnJ1cHQgc29tZWhvdy4nLmJyLmJyCgkJCQkJCS4nQ2hvb3NlICcu Z1R4dCgnZGVsZXRlJykuJyB0byByZW1vdmUgdGhlbSBhbGwgb3IgJy5nVHh0KCdpbnN0YWxs JykuJyB0byBhZGQnCgkJCQkJCS5ici4nYW55IG5ldyBvbmVzLCBsZWF2aW5nIGFsbCBleGlz dGluZyBwcmVmcyB1bnRvdWNoZWQuJywgJyBjb2xzcGFuPSIyIicpKTsKCQllY2hvIHRyKHRk YSgkYnRuUmVtb3ZlLCRidG5TdHlsZSkgLiB0ZGEoJGJ0bkluc3RhbGwsICRidG5TdHlsZSkp OwoJfSBlbHNlIHsKCQllY2hvIHRyKHRkYSgnUHJlZnMgbm90IGluc3RhbGxlZC4nLCAnIGNv bHNwYW49IjIiJykpOwoJCWVjaG8gdHIodGRhKCRidG5JbnN0YWxsLCAkYnRuU3R5bGUpKTsK CX0KCWVjaG8gZW5kVGFibGUoKTsKCgllY2hvIDw8PEVPRgo8c2NyaXB0IHR5cGU9InRleHQv amF2YXNjcmlwdCI+CnZhciBpZWRfcGx1Z2luX3BhdGhfcmUgPSBuZXcgUmVnRXhwKCJeLipb L1xcXSIsICJnIikKZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVmc3dhcChzZWxJRCwgc2VsVmFs dWUpIHsKCXZhciBpZCA9IHNlbElEKydfcGF0aCc7Cgl2YXIgbnV2YWwgPSAoKGJhc2VuYW1l KCQoIiMiK2lkKS52YWwoKSkgPT0gc2VsVmFsdWUpID8gJCgiIyIraWQpLnZhbCgpIDogZGly bmFtZSgkKCIjIitpZCkudmFsKCkpK3NlbFZhbHVlKTsKCWlmICgkKCIjIitzZWxJRClbMF0u c2VsZWN0ZWRJbmRleCA9PSAwKSB7CgkJJCgiIyIraWQpLmF0dHIoImRpc2FibGVkIiwgdHJ1 ZSk7IDsKCX0gZWxzZSB7CgkJJCgiIyIraWQpLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOyA7 CgkJJCgiIyIraWQpLnZhbChudXZhbCk7Cgl9Cn0KZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwg c3VmZml4KSB7CglyZXR1cm4gcGF0aC5yZXBsYWNlKGllZF9wbHVnaW5fcGF0aF9yZSwgJycp Owp9CmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewogICAgcmV0dXJuIHBhdGgubWF0Y2goaWVk X3BsdWdpbl9wYXRoX3JlKTsKfQokKGZ1bmN0aW9uKCkgewoJJCgic2VsZWN0Lmxpc3QiKS5l YWNoKGZ1bmN0aW9uKCkgewoJCWllZF9wbHVnaW5fcHJlZnN3YXAodGhpcy5pZCwgdGhpcy52 YWx1ZSk7Cgl9KTsKfSk7Cjwvc2NyaXB0PgpFT0Y7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24g aWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsKCkgewoJZ2xvYmFsICRpZWRfcGx1Z2luX3ByZWZz OwoJJG1lc3NhZ2UgPSAnJzsKCWZvcmVhY2ggKCRpZWRfcGx1Z2luX3ByZWZzWzBdIGFzICRw cmVmID0+ICRkZmx0KSB7CgkJaWYgKCFmZXRjaCgnbmFtZScsJ3R4cF9wcmVmcycsJ25hbWUn LCRwcmVmKSkgewoJCQkkaWQgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywncHJlZnNfaWQ9 MSwgbmFtZT0nLmRvUXVvdGUoJHByZWYpLicsIHZhbD0nLmRvUXVvdGUoZG9TbGFzaCgkZGZs dCkpLicsZXZlbnQ9ImllZF9wbHVnaW4iJyk7CgkJfQoJfQoJJG1lc3NhZ2UgPSBpZWRfcGx1 Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfaW5zdGFsbGVkJyk7CglpZWRfcGx1Z2luX3Nl dHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1Z2luX3ByZWZz X3JlbW92ZSgpIHsKCWdsb2JhbCAkaWVkX3BsdWdpbl9wcmVmczsKCSRtZXNzYWdlID0gJyc7 Cglmb3JlYWNoIChhcnJheV9tZXJnZSgkaWVkX3BsdWdpbl9wcmVmc1swXSwkaWVkX3BsdWdp bl9wcmVmc1sxXSkgYXMgJHByZWYgPT4gJGRmbHQpIHsKCQlpZiAoZmV0Y2goJ25hbWUnLCd0 eHBfcHJlZnMnLCduYW1lJywkcHJlZikpIHsKCQkJJGlkID0gc2FmZV9kZWxldGUoJ3R4cF9w cmVmcycsJ25hbWU9Jy5kb1F1b3RlKCRwcmVmKSk7CgkJfQoJfQoJJG1lc3NhZ2UgPSBpZWRf cGx1Z2luX2dUeHQoJ2llZF9wbHVnaW5fcHJlZnNfZGVsZXRlZCcpOwoJaWVkX3BsdWdpbl9z ZXR1cCgkbWVzc2FnZSk7Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gaWVkX3BsdWdpbl9wcmVm c191cGRhdGUoKSB7CglnbG9iYWwgJGllZF9wbHVnaW5fcHJlZnM7CgkkbWVzc2FnZSA9ICcn OwoJJHBvc3QgPSBkb1NsYXNoKHN0cmlwUG9zdCgpKTsKCWZvcmVhY2ggKCRpZWRfcGx1Z2lu X3ByZWZzWzBdIGFzICRwcmVmID0+ICRkZmx0KSB7CgkJaWYgKGlzc2V0KCRwb3N0WyRwcmVm XSkpIHsKCQkJc2FmZV91cGRhdGUoInR4cF9wcmVmcyIsICJ2YWwgPSAnIi4kcG9zdFskcHJl Zl0uIiciLCAibmFtZSA9ICciLmRvU2xhc2goJHByZWYpLiInIGFuZCBwcmVmc19pZCA9IDEi KTsKCQl9Cgl9CgkkbWVzc2FnZSA9IGdUeHQoJ3ByZWZlcmVuY2VzX3NhdmVkJyk7CglpZWRf cGx1Z2luX3NldHVwKCRtZXNzYWdlKTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBpZWRfcGx1 Z2luX2dUeHQoJHdoYXQsICRhdHRzID0gYXJyYXkoKSkgewoJJGxhbmcgPSBhcnJheSgKCQkn aWVkX3BsdWdpbl9wcmVmc19pbnN0YWxsZWQnID0+ICdQcmVmZXJlbmNlcyBpbnN0YWxsZWQn LAoJCSdpZWRfcGx1Z2luX3ByZWZzX2RlbGV0ZWQnID0+ICdQcmVmZXJlbmNlcyBkZWxldGVk JywKCQknaWVkX3BsdWdpbl9jaGVja190eXBlJyA9PiAnQ2hlY2sgeW91ciBwbHVnaW4gdHlw ZSEnLAoJCSdpZWRfcGx1Z2luX2NvbXByZXNzJyA9PiAnWmlwJywKCQknaWVkX3BsdWdpbl9l ZGl0b3InID0+ICdQbHVnaW4gZWRpdG9yJywKCQknaWVkX3BsdWdpbl9lZGl0b3JfcGF0aCcg PT4gJ1BsdWdpbiBlZGl0b3IgcGF0aCBVUkwnLAoJCSdpZWRfcGx1Z2luX2VkaXRvcl93aWR0 aCcgPT4gJ1BsdWdpbiBlZGl0b3Igd2lkdGggKGNoYXJzKScsCgkJJ2llZF9wbHVnaW5faGVs cF9lZGl0b3InID0+ICdIZWxwIGVkaXRvcicsCgkJJ2llZF9wbHVnaW5faGVscF9lZGl0b3Jf cGF0aCcgPT4gJ0hlbHAgZWRpdG9yIHBhdGggVVJMJywKCQknaWVkX3BsdWdpbl9vdXRwdXRf b3JkZXInID0+ICdQSFAgZXhwb3J0IG9yZGVyJywKCSk7CglyZXR1cm4gc3RydHIoJGxhbmdb JHdoYXRdLCAkYXR0cyk7Cn0iO3M6MzoibWQ1IjtzOjMyOiI3NGZhYWM3ODFlYzU2OGRhOTg0 OTQwMzY2OWVjMWJmOSI7fQ==