# smd_random_banner 0.17a # Random image by category with a few extra advertising options # Stef Dawson # http://www.stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTc6InNtZF9yYW5kb21fYmFubmVyIjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjY6Imh0dHA6Ly93d3cuc3RlZmRhd3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NToiMC4xN2EiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjYxOiJSYW5kb20gaW1hZ2UgYnkgY2F0ZWdvcnkgd2l0aCBhIGZldyBleHRyYSBhZHZlcnRpc2luZyBvcHRpb25zIjtzOjQ6ImhlbHAiO3M6OTkyNjoiPGI+QmFzaWMgaWRlYTwvYj4NCg0KPHA+QmFzZWQgc2hhbWVsZXNzbHkgb24gZHJ1X3JhbmRvbV9pbWFnZSAodGhhbmtzISkgdGhpcyBwbHVnaW4gZXh0ZW5kcyB0aGUgaWRlYSBhIGxpdHRsZS4gVGhlIGNvbmNlcHQgaXM6IHdoYXQgaWYgeW91IHdhbnQgdG8gYWR2ZXJ0aXNlIG90aGVyIHBhcnRzIG9mIHlvdXIgc2l0ZSAoZS5nLiBvdGhlciBwcm9kdWN0cy9zZXJ2aWNlcykgdXNpbmcgYSBiYW5uZXIgYWQ/IFlvdSB3YW50IGFuIGltYWdlL2FuaW1hdGVkIGdpZi93aGF0ZXZlciB0byBhZHZlcnRpc2UgdGhlIHByb2R1Y3Qgb3Igc2VydmljZSBhbmQgd2hlbiBwZW9wbGUgY2xpY2sgb24gaXQsIGJlIHRha2VuIHRvIHRoZSBjb3JyZWN0IHBhcnQgb2YgdGhlIHNpdGUuIFRoaXMgY291bGQgb2YgY291cnNlIGJlIHVzZWQgZm9yIGxpbmtzIHRvIGV4dGVybmFsIHNpdGVzIGlmIHlvdSB3aXNoLg0KDQo8cD5JbiBpdHMgYmFzZSBmb3JtLCB0aGlzIHBsdWdpbiBmdW5jdGlvbnMgZXhhY3RseSBhcyBkcnVfcmFuZG9tX2ltYWdlLiBTbzo8L3A+DQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIC8mZ3Q7PC9jb2RlPg0KDQo8cD5jaG9vc2VzIGEgcmFuZG9tIGltYWdlIGZyb20gYWxsIGltYWdlcyB1cGxvYWRlZCB2aWEgdGV4dHBhdHRlcm4ncyBpbWFnZSBpbnRlcmZhY2UuPC9wPg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgLyZndDs8L2NvZGU+DQoNCjxwPmNob29zZXMgYSByYW5kb20gaW1hZ2UgZnJvbSBhbGwgaW1hZ2VzIGluIHRoZSAnYmFubmVycycgY2F0ZWdvcnkuIElmIGF0IGFueSBwb2ludCwgdGhlIHBhcnRpY3VsYXIgb3B0aW9ucyByZXN1bHQgaW4gbWF0Y2hpbmcgbm8gaW1hZ2VzLCB0aGUgcGx1Z2luIHdpbGwgcmV0dXJuIG5vdGhpbmcuIFRoaXMgaXMgc28geW91IGNhbiB1c2UgcGx1Z2lucyBzdWNoIGFzIENva2UgSGFycmluZ3RvbidzIGV4Y2VsbGVudCBjaGhfaWZfZGF0YSB0byBkZXRlY3QgdGhpcyBhbmQgYnJhbmNoIHRvIGEgImRlZmF1bHQiIGltYWdlIG9yIHNvbWV0aGluZy48L3A+DQoNCjxwPkFsdGVybmF0aXZlbHksIGlmIHlvdSBhbHdheXMgd2FudCBhIHBpY3R1cmUgdG8gYmUgZGlzcGxheWVkIG5vIG1hdHRlciB3aGF0LCBzcGVjaWZ5IHRoZSA8Y29kZT5hbHdheXNfZGlzcGxheT0iMSI8L2NvZGU+IHBhcmFtZXRlci4gSW4gdGhlIGV2ZW50IG9mIG5vIG1hdGNoZXMgYmVpbmcgZm91bmQsIHRoZSBwbHVnaW4gd2lsbCB0cnkgYWdhaW4ganVzdCBmcm9tIHRoZSBnaXZlbiBjYXRlZ29yeSAoaWYgc3VwcGxpZWQpIG9yIGZyb20gdGhlIHdob2xlIHBvb2wgb2YgaW1hZ2VzIG90aGVyd2lzZS48L3A+DQoNCjxwPklmIGZvciBzb21lIHJlYXNvbiB5b3Ugd2FudCB0aGUgaW1hZ2UgdGh1bWJuYWlsIHRvIGJlIGRpc3BsYXllZCBpbnN0ZWFkIG9mIHRoZSBmdWxsIGltYWdlLCBhZGQgdGhlIDxjb2RlPnRodW1iPSIxIjwvY29kZT4gb3B0aW9uLjwvcD4NCg0KPGI+QWRqdXN0aW5nIHJhbmRvbW5lc3M8L2I+DQoNCjxwPk5vdyBjb21lcyB0aGUgZnVuIHBhcnQuIFdoYXQgaWYgeW91IG9ubHkgd2FudCBpbWFnZXMgdG8gYXBwZWFyIHRoYXQgaGF2ZSBwYXJ0aWN1bGFyIHdvcmRzIGluIHRoZWlyIGZpbGVuYW1lPyAob3IgQWx0IFRleHQgLSBzZWUgb3B0aW9uIDxjb2RlPnVzZV9hbHQ8L2NvZGU+IGJlbG93KSBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhIHpvbyB3ZWJzaXRlIGFuZCBvbmx5IHdhbnRlZCBwaWN0dXJlcyBvZiBsaW9ucyB0byBhcHBlYXIgb24gdGhlIExpb25zIHBhZ2UuPC9wPg0KDQo8cD5PciwgY29udmVyc2VseSwgd2hhdCBpZiB5b3UgPGk+ZG9uJ3Q8L2k+IHdhbnQgYSBiYW5uZXIgdG8gYXBwZWFyIHRoYXQgYWR2ZXJ0aXNlcyB0aGUgcHJvZHVjdCB5b3VyIGN1c3RvbWVyIGlzIGFscmVhZHkgbG9va2luZyBhdD8gSXQgbG9va3MgYSBiaXQgc3RyYW5nZSB0byBoYXZlIGFuIGFkdmVydCBmb3IgInByb2R1Y3RBIiBvbiBhIHBhZ2UgYWJvdXQgInByb2R1Y3RBIiEgVGhhdCdzIHdoZXJlIHRoZSBuZXh0IHRocmVlIG9wdGlvbnMgY29tZSBpbjogPGNvZGU+bWF0Y2hfdGV4dDwvY29kZT4sIDxjb2RlPmF2b2lkX3RleHQ8L2NvZGU+IGFuZCA8Y29kZT5sb29rX2luPC9jb2RlPi48L3A+DQoNCjxwPldoYXQgdGhlc2UgZG8gaXMgY29tcGFyZSB0aGUgZmlsZW5hbWUgb2YgeW91ciBiYW5uZXIgaW1hZ2UgdG8gc29tZSB0ZXh0IGFuZCBpZiBpdCBtYXRjaGVzLCB0aGF0IHBhcnRpY3VsYXIgaW1hZ2Ugd2lsbCBlaXRoZXIgYmUgZGlzcGxheWVkIChtYXRjaF90ZXh0KSBvciA8aT5ub3Q8L2k+IGRpc3BsYXllZCAoYXZvaWRfdGV4dCkuIFNvbWUgZXhhbXBsZXM6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSJwZW5ndWluIiAvJmd0OzwvY29kZT4NCg0KPHA+VGhhdCB3aWxsIGNob29zZSBhIHJhbmRvbSBpbWFnZSBmcm9tIGFsbCBpbWFnZXMgaW4gdGhlICdiYW5uZXJzJyBjYXRlZ29yeSB0aGF0IGhhdmUgdGhlIHdvcmQgInBlbmd1aW4iIGluIHRoZWlyIHRpdGxlLjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgYXZvaWRfdGV4dD0icHJvZHVjdDEiIC8mZ3Q7PC9jb2RlPg0KDQo8cD5UaGF0IHdpbGwgY2hvb3NlIGEgcmFuZG9tIGltYWdlIGZyb20gYWxsIGltYWdlcyBpbiB0aGUgJ2Jhbm5lcnMnIGNhdGVnb3J5IGJ1dCBpZ25vcmVzIGFueSBpbWFnZSBmaWxlbmFtZXMgdGhhdCBjb250YWluIHRoZSB0ZXh0ICdwcm9kdWN0MScuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYWQgbW9yZSB0aGFuIG9uZSBiYW5uZXIgcGVyIHByb2R1Y3QgbGlrZTo8L3A+DQo8dWw+DQo8bGk+YmFubmVyX3Byb2R1Y3QxX0EuanBnPC9saT4NCjxsaT5iYW5uZXJfcHJvZHVjdDFfQi5qcGc8L2xpPg0KPGxpPmJhbm5lcl9wcm9kdWN0Ml9BLmpwZzwvbGk+DQo8bGk+Li4uPC9saT4NCjwvdWw+DQoNCjxwPmFzIGl0IHdvdWxkIGV4Y2x1ZGUgYWxsIG9mIHByb2R1Y3QxJ3MgaW1hZ2VzLiBCb3RoIG9wdGlvbnMgY2FuIGFsc28gdGFrZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHdvcmRzIHRvIGlnbm9yZSwgZS5nLiA8Y29kZT5tYXRjaF90ZXh0PSJsbGFtYSxwZW5ndWluIjwvY29kZT4gb3IgPGNvZGU+YXZvaWRfdGV4dD0icHJvZHVjdDEscHJvZHVjdDIscHJvZHVjdDgiPC9jb2RlPiBOb3RlOiBubyBzcGFjZXMgYXJvdW5kIHRoZSBjb21tYXMhPC9wPg0KDQo8cD5UaGVzZSBvcHRpb25zIGNhbiBiZSB1c2VkIGluIHRhbmRlbSB0byBjcmVhdGUgc29tZSBjcmF6eSBicmFpbi1iZW5kaW5nIGNvbWJpbmF0aW9ucy48L3A+DQoNCjxiPldoYXQgYWJvdXQgYWx0IHRleHQ/PC9iPg0KDQo8cD5JZiB5b3UndmUgYWxyZWFkeSBsb2FkZWQgYWxsIHlvdXIgaW1hZ2VzIGFuZCB0aGUgcHJvc3BlY3Qgb2YgZ29pbmcgdGhyb3VnaCB0aGVtIHRvIGNyZWF0ZSBhIG5hbWluZyBjb252ZW50aW9uIGlzIGRhdW50aW5nLCB0cnkgYWRkaW5nIHRoZSA8Y29kZT51c2VfYWx0PSIxIjwvY29kZT4gb3B0aW9uICgnMScgaXMgYSBjb252ZW5pZW5jZSwgaXQgY291bGQgYmUgYW55dGhpbmcgcmVhbGx5KS4gVGhlbiwgaW5zdGVhZCBvZiBsb29raW5nIGluIHRoZSBpbWFnZSBmaWxlbmFtZSwgaXQgd2lsbCBsb29rIGluIHRoZSBpbWFnZSdzICdBbHQgVGV4dCcgZm9yIHdvcmRzIHRvIG1hdGNoL2V4Y2x1ZGUuPC9wPg0KDQo8Yj5HZXR0aW5nIHdpbGQ8L2I+DQoNCjxwPk5vdyB0aGluZ3MgZ2V0IGV2ZW4gbW9yZSB3YXJwZWQuIFNpbmNlIHlvdSBvZnRlbiBkb24ndCBrbm93IHdoaWNoIHByb2R1Y3QgcGFnZSB5b3VyIGN1c3RvbWVycyB3aWxsIGxvb2sgYXQsIHlvdSBjYW4gdXNlIHRoZSBzcGVjaWFsIHdpbGRjYXJkICI/IiBhcyBhbiBvcHRpb24gaW4geW91ciBsaXN0IG9mIHdvcmRzIHRvIG1hdGNoIG9yIGF2b2lkLiBXaGF0IHRoaXMgZG9lcyBpcyBsb29rIGF0IHRoZSBjdXJyZW50IHNlY3Rpb24gbmFtZSBvZiB0aGUgcGFnZSBiZWluZyBkaXNwbGF5ZWQgYW5kIHVzZSB0aGF0IGFzIG9uZSBvZiB5b3VyIGlnbm9yZSB3b3Jkcy4gU28gaWYgYSBwZXJzb24gd2FzIG9uIHBhZ2UgPGNvZGU+d3d3Lm1lZ2F6b28uY29tL2xpb25zL3RoZS1odW1ibGUtbGlvbjwvY29kZT4gYW5kIHRoZSBwbHVnaW4gd2FzIGNhbGxlZCB0aHVzOjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgbWF0Y2hfdGV4dD0iPyIgLyZndDs8L2NvZGU+DQoNCjxwPmFueSBpbWFnZSBuYW1lIGluIHRoZSAiYmFubmVycyIgY2F0ZWdvcnkgdGhhdCBoYWQgdGhlIHRleHQgImxpb25zIiBpbiBpdCB3b3VsZCBiZSBmYWlyIGdhbWUgZm9yIGFwcGVhcmluZyBvbiB0aGUgcGFnZS4gQWdhaW4sIHlvdSBjYW4gZG8gdGhlIHJldmVyc2UgYnkgdXNpbmcgYXZvaWRfdGV4dDo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIGF2b2lkX3RleHQ9Ij8iIC8mZ3Q7PC9jb2RlPg0KDQo8cD5UaGlzIG1lYW5zIHRoYXQgaWYgeW91IGFycmFuZ2UgeW91ciBzaXRlIHN1Y2ggdGhhdCBlYWNoIHByb2R1Y3QgaGFzIGEgc2VwYXJhdGUgc2VjdGlvbiwgeW91IGNhbiB0aGVuIG5hbWUgeW91ciBiYW5uZXIgaW1hZ2VzIChvciBhbHQgdGV4dCkgaW4gc3VjaCBhIHdheSB0aGF0IGNlcnRhaW4gaW1hZ2VzIHdvbid0IGJlIGRpc3BsYXllZCB3aGVuIGEgdXNlciB2aXNpdHMgYSBwYXJ0aWN1bGFyIHNlY3Rpb24uPC9wPg0KDQo8cD5Zb3UgY2FuIHVzZSB0aGUgIj8iIGluIGFkZGl0aW9uIHRvIGEgbGlzdCBvZiB3b3JkcyBpZiB5b3UgbGlrZSwgYW5kIG1peCBib3RoIDxjb2RlPm1hdGNoX3RleHQ8L2NvZGU+IGFuZCA8Y29kZT5hdm9pZF90ZXh0PC9jb2RlPiB1bnRpbCB5b3VyIGJyYWluIGV4cGxvZGVzLjwvcD4NCg0KPGI+TG9va2luZyBhcm91bmQ8L2I+DQoNCjxwPkJ5IGRlZmF1bHQsIHRoZSAiPyIgbWVhbnMgdGhlIHBsdWdpbiB3aWxsIGxvb2sgYXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgc2VjdGlvbiBmb3IgYSBtYXRjaC9leGNsdXNpb24uIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGF0LCB5b3UgaGF2ZSB0aGUgY2hvaWNlIG9mIGdpdmluZyB0aGUgPGNvZGU+bG9va19pbjwvY29kZT4gb3B0aW9uLiBUaGlzIGZvcmNlcyB0aGUgcGx1Z2luIHRvIGxvb2sgZm9yIGEgbWF0Y2ggc29tZXdoZXJlIGVsc2UgaW4gdGhlIFVSTC48L3A+DQoNCjxwPlRoZSBjdXJyZW50IG9wdGlvbnMgYXZhaWxhYmxlIGFyZSAiY2F0ZWdvcnkiLCAic2VjdGlvbiIgb3IgInRpdGxlIjsgdGhlICd0aXRsZScgaW4gdGhpcyBjYXNlIGlzIHRoZSBuYW1lIG9mIHRoZSBhcnRpY2xlIGl0c2VsZi4gRm9yIGV4YW1wbGU6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/IiBsb29rX2luPSJ0aXRsZSIgLyZndDs8L2NvZGU+DQoNCjxwPndvdWxkIGxvb2sgYXQganVzdCB0aGUgYXJ0aWNsZSdzIHRpdGxlIGFuZCBjb21wYXJlIGl0IHRvIHRoZSBpbWFnZSBuYW1lcy4gSW4gb3VyIGV4YW1wbGUgVVJMIGFib3ZlLCBpZiB0aGVyZSB3YXMgYW4gaW1hZ2UgaW4gdGhlICJiYW5uZXJzIiBjYXRlZ29yeSB3aGljaCBoYWQgPGNvZGU+dGhlLWh1bWJsZS1saW9uPC9jb2RlPiBpbiBpdHMgbmFtZSwgaXQgd291bGQgYXBwZWFyIG9uIGFueSBwYWdlIHRoYXQgaGFkIGEgVVJMIHdpdGggYSB0aXRsZSBjb250YWluaW5nIDxjb2RlPnRoZS1odW1ibGUtbGlvbjwvY29kZT4uIElmIHlvdSBpbnN0ZWFkIHVzZWQ6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/IiBsb29rX2luPSJ0aXRsZSxzZWN0aW9uIiAvJmd0OzwvY29kZT4NCg0KPHA+aXQgd291bGQgaW5jbHVkZSBhbnkgaW1hZ2UgbmFtZXMgdGhhdCBoYWQgZWl0aGVyICJsaW9ucyIgb3IgInRoZS1odW1ibGUtbGlvbiIgaW4gdGhlbS4gTm90ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGEgPGNvZGU+bG9va19pbjwvY29kZT4gcGFyYW1ldGVyIHlvdSBtdXN0IHNwZWNpZnkgZXZlcnkgcGxhY2UgdG8gbG9vayBpbjsgaXQgb25seSBhc3N1bWVzICJzZWN0aW9uIiBpZiB5b3UgbWlzcyBvdXQgdGhlIDxjb2RlPmxvb2tfaW48L2NvZGU+IHBhcmFtZXRlciBlbnRpcmVseS48L3A+DQoNCjxwPkFsc28gYmUgYXdhcmUgdGhhdCBpZiB5b3Ugc3BlY2lmeSAidGl0bGUiIGFzIGEgcGxhY2UgdG8gPGNvZGU+bG9va19pbjwvY29kZT4gYW5kIHRoZSBwZXJzb24gaXMgc3VyZmluZyBhIHBhZ2UgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgYXJ0aWNsZXMgb25seSwgdGhlIHRpdGxlIHBhcmFtZXRlciB3aWxsIGJlIGlnbm9yZWQuPC9wPg0KDQo8Yj5MaW5raW5nIHRoZSBpbWFnZTwvYj4NCg0KPHA+VGhlIGZpbmFsIHBpZWNlIG9mIHRoZSBwdXp6bGUgaXMgdG8gZGlyZWN0IHBlb3BsZSB0byBhIHdlYiBsaW5rIHdoZW4gdGhleSBjbGljayBvbiB0aGUgaW1hZ2UuIFNpbmNlIHRoZSBpbWFnZSBpcyBnb2luZyB0byBiZSBhIGJhbm5lciBhbmQgeW91J3JlIHVubGlrZWx5IHRvIHdhbnQgdG8gcHV0IGEgY2FwdGlvbiBvbiBpdCwgSSBmaWd1cmVkIHRoZSBjYXB0aW9uIHdhcyBhIGdvb2QgcGxhY2UgdG8gc3RvcmUgYSB3ZWIgbGluay4gV2hlbiB5b3UgdXBsb2FkIHlvdXIgaW1hZ2UsIHB1dCB0aGUgZGVzaXJlZCBkZXN0aW5hdGlvbiBVUkwgaW4gdGhlICdjYXB0aW9uJyBmaWVsZCBhbmQgdXNlIHRoZSA8Y29kZT5saW5rY2FwdGlvbj0iMSI8L2NvZGU+IG9wdGlvbiB0byBwdWxsIGl0IGZyb20gdGhlcmUgYW5kIG1ha2UgeW91ciBiYW5uZXIgY2xpY2thYmxlLjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgbWF0Y2hfdGV4dD0iPyIgYXZvaWRfdGV4dD0idGVzdCIgbG9va19pbj0ic2VjdGlvbix0aXRsZSIgbGlua2NhcHRpb249IjEiIC8mZ3Q7PC9jb2RlPg0KDQo8cD5JZiB0aGUgVVJMIGJlZ2lucyB3aXRoIDxjb2RlPmh0dHA6Ly88L2NvZGU+LCBpdCB3aWxsIGJlIHVzZWQgdmVyYmF0aW0uIElmIG5vdCwgaXQgd2lsbCBiZSBhc3N1bWVkIHRvIGJlIGEgJ2xvY2FsJyBsaW5rIGFuZCB3aWxsIGhhdmUgPGNvZGU+Jmx0O3R4cDpzaXRlX3VybCAvJmd0OzwvY29kZT4gcHJlcGVuZGVkIHRvIGl0LjwvcD4NCg0KPHA+SWYgeW91IGFscmVhZHkgaGF2ZSBhIHRvbm5lIG9mIGNhcHRpb25zIHN0b3JlZCBhbmQgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlbSwgeW91IGNhbiB1c2UgPGNvZGU+bGlua2FsdD0iMSI8L2NvZGU+IG9wdGlvbiB0byBhbGxvdyB0aGUgbGluayBiZSBtYWRlIGZyb20gdGhlIGFsdCB0ZXh0IGluc3RlYWQuPC9wPg0KDQo8cD5GdXJ0aGVyLCBpZiB5b3UgYWx3YXlzIHdhbnQgeW91ciBsaW5rIHRvIHBvaW50IHRvIGEgcGFydGljdWxhciBzZWN0aW9uIG9mIHlvdXIgc2l0ZSBvciBhIHNwZWNpZmljIGV4dGVybmFsIHNpdGUsIHlvdSBjYW4gc2F2ZSB5b3Vyc2VsZiBzb21lIHR5cGluZy4gSW5zdGVhZCBvZiBoYXJkLWNvZGluZyB0aGUgc2VjdGlvbiBvciBzaXRlIG5hbWUgaW4gdGhlIGFsdC9jYXB0aW9uIGZpZWxkLCB5b3UgY2FuIHNwZWNpZnkgdGhlIDxjb2RlPmxpbmtwcmVmaXg8L2NvZGU+IG9wdGlvbi4gV2hhdGV2ZXIgdGV4dCB5b3UgcHV0IGluIHRoYXQgb3B0aW9uIHdpbGwgYmUgcHJlZml4ZWQgdG8gdGhlIGFsdC9jYXB0aW9uIHRleHQuIE5vdGUgdGhhdCBpZiB5b3UgaGF2ZSB1c2VkIGEgJ2Z1bGwnIFVSTCBpbiB0aGUgYWx0L2NhcHRpb24gZmllbGQgKGkuZS4gb25lIGJlZ2lubmluZyB3aXRoIDxjb2RlPmh0dHA6Ly88L2NvZGU+KSA8Y29kZT5saW5rcHJlZml4PC9jb2RlPiB3aWxsIGJlIGlnbm9yZWQgZm9yIHRoYXQgaW1hZ2UuIEFsc28gbm90ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGJvdGggPGNvZGU+bGlua2FsdDwvY29kZT4gYW5kIDxjb2RlPmxpbmtjYXB0aW9uPC9jb2RlPiBvcHRpb25zLCB0aGUgPGNvZGU+bGlua2NhcHRpb248L2NvZGU+IHdpbGwgdGFrZSBwcmVjZWRlbmNlLjwvcD4NCg0KPGI+VHJhY2sgaXQ8L2I+DQoNCjxwPklmIHlvdSB1c2UgPGNvZGU+bGlua2NhcHRpb249IjEiPC9jb2RlPiBvciA8Y29kZT5saW5rYWx0PSIxIjwvY29kZT4sIHRoZSBwbHVnaW4gd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCBhIHBhcmFtZXRlciB0byB0aGUgbGluayBzbyB5b3UgY2FuIHRyYWNrIHdoaWNoIGJhbm5lcnMgd2VyZSBjbGlja2VkIGluIHlvdXIgdGV4dHBhdHRlcm4gbG9ncy4gU2luY2UgdGhpcyBpcyBhIGJpdCBsaWtlIHJlZmVycmVyIHRyYWNraW5nLCB0aGUgb3B0aW9uIHRvIGNvbnRyb2wgaXQgaXMgbmFtZWQgPGNvZGU+cmVmZXJlcjwvY29kZT4gJiM4MjExOyBhbmQgaXMgbWlzLXNwZWxsZWQgZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgdGhlIEhUVFAgc3BlYyB3YXMgYWxsIHRob3NlIHllYXJzIGFnbyA6LSk8L3A+DQoNCjxwPjxjb2RlPnJlZmVyZXI8L2NvZGU+IHRha2VzIGEgdGV4dCBhcmd1bWVudCB0byB1c2UgYXMgYSBwcmVmaXguIEFuIGV4YW1wbGU6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/LGdvbGRmaXNoIiByZWZlcmVyPSJ0cmFja2lkIiAvJmd0OzwvY29kZT4NCg0KPHA+VGhpcyB3aWxsIGdlbmVyYXRlIGEgdXJsIHdpdGggPGNvZGU+P3RyYWNraWQ9PGk+aW1hZ2VfbnVtYmVyPC9pPjwvY29kZT4gYWRkZWQgdG8gaXQsIHdoZXJlIDxjb2RlPjxpPmltYWdlX251bWJlcjwvaT48L2NvZGU+IGlzIHRoZSBpbWFnZSBpZCBvZiB0aGUgcGljdHVyZSBpbiBxdWVzdGlvbi48L3A+DQoNCjxwPklmIHlvdSBkb24ndCBzcGVjaWZ5IHRoZSA8Y29kZT5yZWZlcmVyPC9jb2RlPiwgYWxsIGxpbmthYmxlIGltYWdlcyB3aWxsIGhhdmUgdGhlIGNvZGUgPGNvZGU+P2JpZD08aT5pbWFnZV9udW1iZXI8L2k+PC9jb2RlPiBhZGRlZCAoZm9yICdCYW5uZXIgSUQnKS4gSWYgeW91IHdpc2ggdG8gZGlzYWJsZSB0aGUgb3B0aW9uLCBhZGQgPGNvZGU+cmVmZXJlcj0iIjwvY29kZT4uPC9wPg0KDQo8Yj5BbmQgdGhlcmUncyBtb3JlPC9iPg0KDQo8cD5XYW50IG1vcmUgdGhhbiBvbmUgaW1hZ2Ugc2VudCBvdXQgYXQgb25jZT8gQWRkIHRoZSA8Y29kZT5saW1pdDwvY29kZT4gcGFyYW1ldGVyLiBEZWZhdWx0cyB0byAxIGltYWdlLjwvcD4NCg0KPGI+VHJvdWJsZXNob290aW5nPC9iPg0KDQo8cD5UaGVyZSBpcyBhIGNoYW5jZSB0aGF0LCB1bmRlciB0eHAgdjQuMC40LCB5b3Ugd2lsbCBnZXQgdGhlIHNhbWUgaW1hZ2UgYmFjayBlYWNoIHRpbWUuIFRoaXMgY291bGQgYmUgYmVjYXVzZSBvZiB5b3VyIG9wdGlvbnMgKGNoZWNrIDxjb2RlPm1hdGNoX3RleHQ8L2NvZGU+IGFuZCA8Y29kZT5jYXRlZ29yeTwvY29kZT4gY2FyZWZ1bGx5KSBidXQgbWF5IGFsc28gYmUgYmVjYXVzZSB0aGUgaW1hZ2UgaXMgYmVpbmcgY2FjaGVkLiBJZiB0aGUgc2VydmVyIHRoaW5rcyB0aGUgY3VycmVudCBwYWdlIHJlcXVlc3QgaXMgaWRlbnRpY2FsIHRvIHRoZSBsYXN0LCBpdCBpbnN0cnVjdHMgdGhlIGJyb3dzZXIgdG8gc2hvdyB0aGUgc2FtZSBwYWdlIGFzIGxhc3QgdGltZS48L3A+DQoNCjxwPklmIHRoaXMgaXMgY2F1c2luZyBhIHByb2JsZW0sIHRyeSBzZXR0aW5nIHRoZSB2YWx1ZSBvZiAiU2VuZCBMYXN0LU1vZGlmaWVkIGhlYWRlciIgdG8gIm5vIiB1bmRlciBhZG1pbi0+cHJlZmVyZW5jZXMtPmFkdmFuY2VkLiBJdCBtYXkgaW5jcmVhc2Ugc2VydmVyIGxvYWQgYmVjYXVzZSBldmVyeSBwYWdlIGFuZCBpbWFnZSB3aWxsIGFsd2F5cyBiZSBzZW50IGZyb20gdGhlIHNlcnZlciwgYnV0IGF0IGxlYXN0IHlvdSdsbCBnZXQgYSByYW5kb20gaW1hZ2UgZWFjaCB0aW1lIDotKTwvcD4iO3M6NDoiY29kZSI7czo1ODIyOiIvLyB2MC4xICBJbml0aWFsIHB1YmxpYyByZWxlYXNlDQovLyB2MC4xMSBBZGRlZCBQRlggdG8gcXVlcnkgKHRoYW5rcyBtZXJjdXJ5KQ0KLy8gdjAuMTIgRml4ZWQgaGVscCB0byBpbmNsdWRlIHRyYWlsaW5nIHNsYXNoZXMgKHRoYW5rcyB2aXR0b3JpbykNCi8vIHYwLjEzIFVucmVsZWFzZWQuIEFkZGVkIGxvb2tfaW49Y2F0ZWdvcnkgYW5kIHJlZmVyZXINCi8vIHYwLjE0IEFkZGVkIG1hdGNoX3RleHQgYW5kIHVzZV9hbHQgKHRoYW5rcyBsdWtlcGVybXNuKQ0KLy8gdjAuMTUgQWRkZWQgYWx3YXlzX2Rpc3BsYXkgYW5kIGxpbWl0ICh0aGFua3MgbHVrZXBlcm1zbikNCi8vIHYwLjE1YSBCdWdmaXggZm9yIGxpbmtjYXB0aW9uICh0aGFua3MgbWVyY3VyeSkNCi8vIHYwLjE2IFRpZ2h0ZW5lZCBpbWFnZSgpIHBhcmFtcyBmb3IgdHhwIHY0LjAuNCBjb21wbGlhbmNlDQovLyB2MC4xNyBBZGRlZCB0aHVtYiwgbGlua3ByZWZpeCBhbmQgbGlua2FsdCBvcHRpb25zDQovLyB2MC4xN2EgYmlkIG9wdGlvbiBub3cgd29ya3Mgd2l0aCBleGlzdGluZyB1cmwgcGFyYW1zICh0aGFua3MgUGFwdWFzcykNCg0KLy8gdjAuMiAgVE9ETzogQWRkIHN1YmNhdGVnb3J5IHN1cHBvcnQgLSBJTiBERVZFTE9QTUVOVA0KZnVuY3Rpb24gc21kX3JhbmRvbV9iYW5uZXIoJGF0dHMpIHsNCglnbG9iYWwgJHByZXRleHQ7DQoNCgkkY2F0ZWdvcnkgPSAnJSc7DQoJJGxvb2tfaW4gPSAnJzsNCgkkbWF0Y2hfdGV4dCA9ICcnOw0KCSRhdm9pZF90ZXh0ID0gJyc7DQoJJHJlZmVyZXIgPSAnYmlkJzsNCgkkdXNlX2FsdCA9ICcnOw0KCSR0aHVtYiA9ICcnOw0KCSRhbHdheXNfZGlzcGxheSA9ICcnOw0KCSRsaW1pdCA9ICcxJzsNCgkkd2hlcmVOYW1lID0gJyc7DQoJJGxpbmtwcmVmaXggPSAnJzsNCgkkbGlua2FsdCA9IChpc3NldCgkbGlua2FsdCkpID8gdHJ1ZSA6IGZhbHNlOw0KCSRsaW5rY2FwdGlvbiA9IChpc3NldCgkbGlua2NhcHRpb24pKSA/IHRydWUgOiBmYWxzZTsNCgkkbWF0Y2hBcnJheSA9IGFycmF5KCk7DQoJJGF2b2lkQXJyYXkgPSBhcnJheSgpOw0KDQoJaWYgKGlzX2FycmF5KCRhdHRzKSkgZXh0cmFjdCgkYXR0cyk7DQoNCgkvLyB1c2VfYWx0IHN3aXRjaGVzIHRoZSBXSEVSRSBzdGF0ZW1lbnQgdG8gbG9vayBpbiB0aGUgaW1hZ2UgJ2FsdCcgaW5zdGVhZCBvZiAnbmFtZScNCglpZigkdXNlX2FsdCA9PSAiIikgew0KCQkkd2hlcmVQb3MgPSAibmFtZSI7DQoJfSBlbHNlIHsNCgkJJHdoZXJlUG9zID0gImFsdCI7DQoJfQ0KDQoJLy8qKiBNQVRDSElORyBURVhUIA0KCS8vIElmIG1hdGNoX3RleHQgaXMgc3BlY2lmaWVkLCBsb29rX2luIG11c3QgYWxzbyBiZSBnaXZlbjsNCgkvLyBpZiBpdCBpc24ndCwgc2V0IGl0IHRvIGEgZGVmYXVsdCBmaXJzdA0KCWlmICgkbWF0Y2hfdGV4dCAhPSAiIiApIHsNCgkJaWYgKCRsb29rX2luID09ICIiKSB7DQoJCQkkbG9va19pbiA9ICJzZWN0aW9uIjsNCgkJfQ0KDQoJCSR1cmxfcGFydHMgPSBleHBsb2RlKCIsIiwgJGxvb2tfaW4pOw0KCQkkbWF0Y2hlcyA9IGV4cGxvZGUoIiwiLCAkbWF0Y2hfdGV4dCk7DQoNCgkJZm9yZWFjaCAoJHVybF9wYXJ0cyBhcyAkcGFydCkgew0KCQkJZm9yZWFjaCAoJG1hdGNoZXMgYXMgJG1hdGNoKSB7DQoJCQkJaWYgKCRtYXRjaCA9PT0gIj8iKSB7DQoJCQkJCXN3aXRjaCAoJHBhcnQpIHsNCgkJCQkJCWNhc2UgInNlY3Rpb24iOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W3NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W2NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAidGl0bGUiOg0KCQkJCQkJCS8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYXJ0aWNsZSBieSB0ZXN0aW5nIG5leHRfaWQNCgkJCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygnbmV4dF9pZCcsJHByZXRleHQpKSB7IA0KCQkJCQkJCQkvLyBHZXQgcmlkIG9mIGFueSA/IHBhcmFtcyBhZnRlciB0aGUgVVJMIHRpdGxlDQoJCQkJCQkJCSR1cmwgPSBzcGxpdCgiXD8iLCRwcmV0ZXh0W3JlcV0pOw0KCQkJCQkJCQkkbWF0Y2ggPSBzdWJzdHIoc3RycmNocigkdXJsWzBdLCAiLyIpLCAxKTsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkkbWF0Y2ggPSAiIjsNCgkJCQkJCQl9DQoJCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKCRtYXRjaCAhPSAiIikgew0KCQkJCQlpZiAoIWluX2FycmF5KCRtYXRjaCwkbWF0Y2hBcnJheSkpIHsNCgkJCQkJCSRtYXRjaEFycmF5W10gPSAkbWF0Y2g7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQkkbnVtTWF0Y2hlcyA9IGNvdW50KCRtYXRjaEFycmF5KTsNCgkJJGN0ciA9IDE7DQoJCWZvcmVhY2ggKCRtYXRjaEFycmF5IGFzICRtYXRjaFN0cikgew0KCQkJaWYgKCRjdHIgPT0gMSkgew0KCQkJCSR3aGVyZU5hbWUgLj0gIiBBTkQgKCAiOw0KCQkJfSBlbHNlIHsNCgkJCQkkd2hlcmVOYW1lIC49ICIgT1IgIjsNCgkJCX0NCgkJCSR3aGVyZU5hbWUgLj0gJHdoZXJlUG9zIC4gIiBMSUtFICclIi4kbWF0Y2hTdHIuIiUnIjsNCgkJCWlmICgkY3RyID09ICRudW1NYXRjaGVzKSB7DQoJCQkJJHdoZXJlTmFtZSAuPSAiICkgIjsNCgkJCX0NCgkJCSRjdHIrKzsNCgkJfQ0KCX0NCg0KCS8vKiogQVZPSURJTkcgVEVYVA0KCS8vIElmIGF2b2lkX3RleHQgaXMgc3BlY2lmaWVkLCBsb29rX2luIG11c3QgYWxzbyBiZSBnaXZlbjsNCgkvLyBpZiBpdCBpc24ndCwgc2V0IGl0IHRvIGEgZGVmYXVsdCBmaXJzdA0KCWlmICgkYXZvaWRfdGV4dCAhPSAiIiApIHsNCgkJaWYgKCRsb29rX2luID09ICIiKSB7DQoJCQkkbG9va19pbiA9ICJzZWN0aW9uIjsNCgkJfQ0KDQoJCSR1cmxfcGFydHMgPSBleHBsb2RlKCIsIiwkbG9va19pbik7DQoJCSRtYXRjaGVzID0gZXhwbG9kZSgiLCIsJGF2b2lkX3RleHQpOw0KCQlmb3JlYWNoICgkdXJsX3BhcnRzIGFzICRwYXJ0KSB7DQoJCQlmb3JlYWNoICgkbWF0Y2hlcyBhcyAkbWF0Y2gpIHsNCgkJCQlpZiAoJG1hdGNoID09PSAiPyIpIHsNCgkJCQkJc3dpdGNoICgkcGFydCkgew0KCQkJCQkJY2FzZSAic2VjdGlvbiI6DQoJCQkJCQkJJG1hdGNoID0gJHByZXRleHRbc107DQoJCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICJjYXRlZ29yeSI6DQoJCQkJCQkJJG1hdGNoID0gJHByZXRleHRbY107DQoJCQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICJ0aXRsZSI6DQoJCQkJCQkJLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBhcnRpY2xlIGJ5IHRlc3RpbmcgbmV4dF9pZA0KCQkJCQkJCWlmIChhcnJheV9rZXlfZXhpc3RzKCduZXh0X2lkJywkcHJldGV4dCkpIHsgDQoJCQkJCQkJCS8vIEdldCByaWQgb2YgYW55ID8gcGFyYW1zIGFmdGVyIHRoZSBVUkwgdGl0bGUNCgkJCQkJCQkJJHVybCA9IHNwbGl0KCJcPyIsJHByZXRleHRbcmVxXSk7DQoJCQkJCQkJCSRtYXRjaCA9IHN1YnN0cihzdHJyY2hyKCR1cmxbMF0sICIvIiksIDEpOw0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCSRtYXRjaCA9ICIiOw0KCQkJCQkJCX0NCgkJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlpZiAoJG1hdGNoICE9ICIiKSB7DQoJCQkJCWlmICghaW5fYXJyYXkoJG1hdGNoLCRhdm9pZEFycmF5KSkgew0KCQkJCQkJJGF2b2lkQXJyYXlbXSA9ICRtYXRjaDsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCWZvcmVhY2ggKCRhdm9pZEFycmF5IGFzICRhdm9pZFN0cikgew0KCQkJJHdoZXJlTmFtZSAuPSAiIEFORCAiIC4gJHdoZXJlUG9zIC4gIiBOT1QgTElLRSAnJSIuJGF2b2lkU3RyLiIlJyI7DQoJCX0NCgl9DQoNCgkkcXVlcnkgPSAic2VsZWN0IGlkLGNhcHRpb24sYWx0IGZyb20gIi5QRlguInR4cF9pbWFnZSB3aGVyZSBjYXRlZ29yeSBsaWtlICckY2F0ZWdvcnknICR3aGVyZU5hbWUgb3JkZXIgYnkgcmFuZCgpIGxpbWl0ICRsaW1pdCI7DQoJJHJzID0gZ2V0Um93cygkcXVlcnkpOw0KCSRvdXRTdHIgPSAnJzsNCg0KCWlmKCRycykgew0KCQkkb3V0U3RyID0gc21kX3JzX291dCgkcnMsICRsaW5rY2FwdGlvbiwgJGxpbmthbHQsICRsaW5rcHJlZml4LCAkcmVmZXJlciwgJHRodW1iLCAkYXR0cyk7DQoJfSBlbHNlIHsNCgkJLy8gTm8gbWF0Y2hpbmcgaW1hZ2VzIGZvdW5kLiBJZiBhbHdheXNfZGlzcGxheSBpcyBvbiwgcGljayBhbnkgaW1hZ2UocykNCgkJaWYgKCRhbHdheXNfZGlzcGxheSkgew0KCQkJJHF1ZXJ5ID0gInNlbGVjdCBpZCxjYXB0aW9uLGFsdCBmcm9tICIuUEZYLiJ0eHBfaW1hZ2Ugd2hlcmUgY2F0ZWdvcnkgbGlrZSAnJGNhdGVnb3J5JyBvcmRlciBieSByYW5kKCkgbGltaXQgJGxpbWl0IjsNCgkJCSRycyA9IGdldFJvd3MoJHF1ZXJ5KTsNCgkJCWlmKCRycykgew0KCQkJCSRvdXRTdHIgPSBzbWRfcnNfb3V0KCRycywgJGxpbmtjYXB0aW9uLCAkbGlua2FsdCwgJGxpbmtwcmVmaXgsICRyZWZlcmVyLCAkdGh1bWIsICRhdHRzKTsNCgkJCX0NCgkJfSBlbHNlIHsNCgkJCXJldHVybjsNCgkJfQ0KCX0NCg0KCXJldHVybiAkb3V0U3RyOw0KfQ0KDQpmdW5jdGlvbiBzbWRfcnNfb3V0KCRycywkbGlua2NhcHRpb24sJGxpbmthbHQsJGxpbmtwcmVmaXgsJHJlZmVyZXIsJHRodW1iLCRhdHRzKSB7DQoJJG91dCA9ICcnOw0KCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJJGxpbmtOYW1lPXRyaW0oKCgkbGlua2NhcHRpb24pID8gJHJvd1snY2FwdGlvbiddIDogJHJvd1snYWx0J10pKTsNCgkJJHN0YXRpY3ByZWZpeCA9ICJodHRwOi8vIjsNCgkJaWYgKHN1YnN0cigkbGlua05hbWUsIDAsIHN0cmxlbigkc3RhdGljcHJlZml4KSkgPT09ICRzdGF0aWNwcmVmaXgpIHsNCgkJCSRsaW5rdXJsID0gJGxpbmtOYW1lOw0KCQl9IGVsc2Ugew0KCQkJaWYgKCRsaW5rcHJlZml4ID09ICcnKSB7DQoJCQkJJGxpbmt1cmwgPSBzaXRlX3VybCgkYXR0cykgLiAkbGlua05hbWU7DQoJCQl9IGVsc2Ugew0KCQkJCSRsaW5rdXJsID0gJGxpbmtwcmVmaXguJy8nLiRsaW5rTmFtZTsNCgkJCX0NCgkJfQ0KCQlpZiAoKCRsaW5rY2FwdGlvbiB8fCAkbGlua2FsdCkgJiYgJGxpbmt1cmwpIHsNCgkJCWlmICgkcmVmZXJlciAhPSAiIikgew0KCQkJCSRyZWZlcnR4dCA9IGFkZFFTVmFyKCRsaW5rdXJsLCAkcmVmZXJlciwgJHJvd1snaWQnXSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRyZWZlcnR4dCA9ICRsaW5rdXJsOw0KCQkJfQ0KCQkJJG91dCAuPSAnPGEgaHJlZj0iJyAuJHJlZmVydHh0LiAnIj4nIC4gKCgkdGh1bWI9PTApID8gaW1hZ2UoYXJyYXkoImlkIiA9PiAkcm93WydpZCddKSkgOiB0aHVtYm5haWwoYXJyYXkoImlkIiA9PiAkcm93WydpZCddKSkpLiAnPC9hPic7DQoJCX0gZWxzZSB7DQoJCQkkb3V0IC49ICgoJHRodW1iPT0wKSA/IGltYWdlKGFycmF5KCJpZCIgPT4gJHJvd1snaWQnXSkpIDogdGh1bWJuYWlsKGFycmF5KCJpZCIgPT4gJHJvd1snaWQnXSkpKTsNCgkJfQ0KCX0NCglyZXR1cm4gJG91dDsNCn0NCg0KZnVuY3Rpb24gYWRkUVNWYXIoJHVybCwgJGtleSwgJHZhbHVlKSB7DQoJJHVybCA9IHJlbW92ZVFTVmFyKCR1cmwsICRrZXkpOw0KCWlmIChzdHJwb3MoJHVybCwgJz8nKSA9PT0gZmFsc2UpIHsNCgkJcmV0dXJuICgkdXJsIC4gJz8nIC4gJGtleSAuICc9JyAuICR2YWx1ZSk7DQoJfSBlbHNlIHsNCgkJcmV0dXJuICgkdXJsIC4gJyYnIC4gJGtleSAuICc9JyAuICR2YWx1ZSk7DQoJfQ0KfQ0KZnVuY3Rpb24gcmVtb3ZlUVNWYXIoJHVybCwgJGtleSkgew0KCSR1cmwgPSBwcmVnX3JlcGxhY2UoJy8oLiopKFw/fCYpJyAuICRrZXkgLiAnPVteJl0rPygmKSguKikvaScsICckMSQyJDQnLCAkdXJsIC4gJyYnKTsNCgkkdXJsID0gc3Vic3RyKCR1cmwsIDAsIC0xKTsNCglyZXR1cm4gKCR1cmwpOw0KfSI7czo0OiJ0eXBlIjtzOjE6IjAiO3M6MzoibWQ1IjtzOjMyOiJiZmM3ZmY1Yzc0NGFhYWIwMDA0Y2RhY2I1N2JjYTk2OCI7fQ==