# smd_random_banner 0.17 # 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: # ...................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTc6InNtZF9yYW5kb21fYmFubmVyIjtzOjY6ImF1dGhvciI7czoxMToiU3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjY6Imh0dHA6Ly93d3cuc3RlZmRhd3Nvbi5jb20vIjtzOjc6InZlcnNpb24iO3M6NDoiMC4xNyI7czoxMToiZGVzY3JpcHRpb24iO3M6NjE6IlJhbmRvbSBpbWFnZSBieSBjYXRlZ29yeSB3aXRoIGEgZmV3IGV4dHJhIGFkdmVydGlzaW5nIG9wdGlvbnMiO3M6NDoiaGVscCI7czo5OTI2OiI8Yj5CYXNpYyBpZGVhPC9iPg0KDQo8cD5CYXNlZCBzaGFtZWxlc3NseSBvbiBkcnVfcmFuZG9tX2ltYWdlICh0aGFua3MhKSB0aGlzIHBsdWdpbiBleHRlbmRzIHRoZSBpZGVhIGEgbGl0dGxlLiBUaGUgY29uY2VwdCBpczogd2hhdCBpZiB5b3Ugd2FudCB0byBhZHZlcnRpc2Ugb3RoZXIgcGFydHMgb2YgeW91ciBzaXRlIChlLmcuIG90aGVyIHByb2R1Y3RzL3NlcnZpY2VzKSB1c2luZyBhIGJhbm5lciBhZD8gWW91IHdhbnQgYW4gaW1hZ2UvYW5pbWF0ZWQgZ2lmL3doYXRldmVyIHRvIGFkdmVydGlzZSB0aGUgcHJvZHVjdCBvciBzZXJ2aWNlIGFuZCB3aGVuIHBlb3BsZSBjbGljayBvbiBpdCwgYmUgdGFrZW4gdG8gdGhlIGNvcnJlY3QgcGFydCBvZiB0aGUgc2l0ZS4gVGhpcyBjb3VsZCBvZiBjb3Vyc2UgYmUgdXNlZCBmb3IgbGlua3MgdG8gZXh0ZXJuYWwgc2l0ZXMgaWYgeW91IHdpc2guDQoNCjxwPkluIGl0cyBiYXNlIGZvcm0sIHRoaXMgcGx1Z2luIGZ1bmN0aW9ucyBleGFjdGx5IGFzIGRydV9yYW5kb21faW1hZ2UuIFNvOjwvcD4NCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgLyZndDs8L2NvZGU+DQoNCjxwPmNob29zZXMgYSByYW5kb20gaW1hZ2UgZnJvbSBhbGwgaW1hZ2VzIHVwbG9hZGVkIHZpYSB0ZXh0cGF0dGVybidzIGltYWdlIGludGVyZmFjZS48L3A+DQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiAvJmd0OzwvY29kZT4NCg0KPHA+Y2hvb3NlcyBhIHJhbmRvbSBpbWFnZSBmcm9tIGFsbCBpbWFnZXMgaW4gdGhlICdiYW5uZXJzJyBjYXRlZ29yeS4gSWYgYXQgYW55IHBvaW50LCB0aGUgcGFydGljdWxhciBvcHRpb25zIHJlc3VsdCBpbiBtYXRjaGluZyBubyBpbWFnZXMsIHRoZSBwbHVnaW4gd2lsbCByZXR1cm4gbm90aGluZy4gVGhpcyBpcyBzbyB5b3UgY2FuIHVzZSBwbHVnaW5zIHN1Y2ggYXMgQ29rZSBIYXJyaW5ndG9uJ3MgZXhjZWxsZW50IGNoaF9pZl9kYXRhIHRvIGRldGVjdCB0aGlzIGFuZCBicmFuY2ggdG8gYSAiZGVmYXVsdCIgaW1hZ2Ugb3Igc29tZXRoaW5nLjwvcD4NCg0KPHA+QWx0ZXJuYXRpdmVseSwgaWYgeW91IGFsd2F5cyB3YW50IGEgcGljdHVyZSB0byBiZSBkaXNwbGF5ZWQgbm8gbWF0dGVyIHdoYXQsIHNwZWNpZnkgdGhlIDxjb2RlPmFsd2F5c19kaXNwbGF5PSIxIjwvY29kZT4gcGFyYW1ldGVyLiBJbiB0aGUgZXZlbnQgb2Ygbm8gbWF0Y2hlcyBiZWluZyBmb3VuZCwgdGhlIHBsdWdpbiB3aWxsIHRyeSBhZ2FpbiBqdXN0IGZyb20gdGhlIGdpdmVuIGNhdGVnb3J5IChpZiBzdXBwbGllZCkgb3IgZnJvbSB0aGUgd2hvbGUgcG9vbCBvZiBpbWFnZXMgb3RoZXJ3aXNlLjwvcD4NCg0KPHA+SWYgZm9yIHNvbWUgcmVhc29uIHlvdSB3YW50IHRoZSBpbWFnZSB0aHVtYm5haWwgdG8gYmUgZGlzcGxheWVkIGluc3RlYWQgb2YgdGhlIGZ1bGwgaW1hZ2UsIGFkZCB0aGUgPGNvZGU+dGh1bWI9IjEiPC9jb2RlPiBvcHRpb24uPC9wPg0KDQo8Yj5BZGp1c3RpbmcgcmFuZG9tbmVzczwvYj4NCg0KPHA+Tm93IGNvbWVzIHRoZSBmdW4gcGFydC4gV2hhdCBpZiB5b3Ugb25seSB3YW50IGltYWdlcyB0byBhcHBlYXIgdGhhdCBoYXZlIHBhcnRpY3VsYXIgd29yZHMgaW4gdGhlaXIgZmlsZW5hbWU/IChvciBBbHQgVGV4dCAtIHNlZSBvcHRpb24gPGNvZGU+dXNlX2FsdDwvY29kZT4gYmVsb3cpIEZvciBleGFtcGxlLCBpZiB5b3UgaGFkIGEgem9vIHdlYnNpdGUgYW5kIG9ubHkgd2FudGVkIHBpY3R1cmVzIG9mIGxpb25zIHRvIGFwcGVhciBvbiB0aGUgTGlvbnMgcGFnZS48L3A+DQoNCjxwPk9yLCBjb252ZXJzZWx5LCB3aGF0IGlmIHlvdSA8aT5kb24ndDwvaT4gd2FudCBhIGJhbm5lciB0byBhcHBlYXIgdGhhdCBhZHZlcnRpc2VzIHRoZSBwcm9kdWN0IHlvdXIgY3VzdG9tZXIgaXMgYWxyZWFkeSBsb29raW5nIGF0PyBJdCBsb29rcyBhIGJpdCBzdHJhbmdlIHRvIGhhdmUgYW4gYWR2ZXJ0IGZvciAicHJvZHVjdEEiIG9uIGEgcGFnZSBhYm91dCAicHJvZHVjdEEiISBUaGF0J3Mgd2hlcmUgdGhlIG5leHQgdGhyZWUgb3B0aW9ucyBjb21lIGluOiA8Y29kZT5tYXRjaF90ZXh0PC9jb2RlPiwgPGNvZGU+YXZvaWRfdGV4dDwvY29kZT4gYW5kIDxjb2RlPmxvb2tfaW48L2NvZGU+LjwvcD4NCg0KPHA+V2hhdCB0aGVzZSBkbyBpcyBjb21wYXJlIHRoZSBmaWxlbmFtZSBvZiB5b3VyIGJhbm5lciBpbWFnZSB0byBzb21lIHRleHQgYW5kIGlmIGl0IG1hdGNoZXMsIHRoYXQgcGFydGljdWxhciBpbWFnZSB3aWxsIGVpdGhlciBiZSBkaXNwbGF5ZWQgKG1hdGNoX3RleHQpIG9yIDxpPm5vdDwvaT4gZGlzcGxheWVkIChhdm9pZF90ZXh0KS4gU29tZSBleGFtcGxlczo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIG1hdGNoX3RleHQ9InBlbmd1aW4iIC8mZ3Q7PC9jb2RlPg0KDQo8cD5UaGF0IHdpbGwgY2hvb3NlIGEgcmFuZG9tIGltYWdlIGZyb20gYWxsIGltYWdlcyBpbiB0aGUgJ2Jhbm5lcnMnIGNhdGVnb3J5IHRoYXQgaGF2ZSB0aGUgd29yZCAicGVuZ3VpbiIgaW4gdGhlaXIgdGl0bGUuPC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBhdm9pZF90ZXh0PSJwcm9kdWN0MSIgLyZndDs8L2NvZGU+DQoNCjxwPlRoYXQgd2lsbCBjaG9vc2UgYSByYW5kb20gaW1hZ2UgZnJvbSBhbGwgaW1hZ2VzIGluIHRoZSAnYmFubmVycycgY2F0ZWdvcnkgYnV0IGlnbm9yZXMgYW55IGltYWdlIGZpbGVuYW1lcyB0aGF0IGNvbnRhaW4gdGhlIHRleHQgJ3Byb2R1Y3QxJy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhZCBtb3JlIHRoYW4gb25lIGJhbm5lciBwZXIgcHJvZHVjdCBsaWtlOjwvcD4NCjx1bD4NCjxsaT5iYW5uZXJfcHJvZHVjdDFfQS5qcGc8L2xpPg0KPGxpPmJhbm5lcl9wcm9kdWN0MV9CLmpwZzwvbGk+DQo8bGk+YmFubmVyX3Byb2R1Y3QyX0EuanBnPC9saT4NCjxsaT4uLi48L2xpPg0KPC91bD4NCg0KPHA+YXMgaXQgd291bGQgZXhjbHVkZSBhbGwgb2YgcHJvZHVjdDEncyBpbWFnZXMuIEJvdGggb3B0aW9ucyBjYW4gYWxzbyB0YWtlIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygd29yZHMgdG8gaWdub3JlLCBlLmcuIDxjb2RlPm1hdGNoX3RleHQ9ImxsYW1hLHBlbmd1aW4iPC9jb2RlPiBvciA8Y29kZT5hdm9pZF90ZXh0PSJwcm9kdWN0MSxwcm9kdWN0Mixwcm9kdWN0OCI8L2NvZGU+IE5vdGU6IG5vIHNwYWNlcyBhcm91bmQgdGhlIGNvbW1hcyE8L3A+DQoNCjxwPlRoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgaW4gdGFuZGVtIHRvIGNyZWF0ZSBzb21lIGNyYXp5IGJyYWluLWJlbmRpbmcgY29tYmluYXRpb25zLjwvcD4NCg0KPGI+V2hhdCBhYm91dCBhbHQgdGV4dD88L2I+DQoNCjxwPklmIHlvdSd2ZSBhbHJlYWR5IGxvYWRlZCBhbGwgeW91ciBpbWFnZXMgYW5kIHRoZSBwcm9zcGVjdCBvZiBnb2luZyB0aHJvdWdoIHRoZW0gdG8gY3JlYXRlIGEgbmFtaW5nIGNvbnZlbnRpb24gaXMgZGF1bnRpbmcsIHRyeSBhZGRpbmcgdGhlIDxjb2RlPnVzZV9hbHQ9IjEiPC9jb2RlPiBvcHRpb24gKCcxJyBpcyBhIGNvbnZlbmllbmNlLCBpdCBjb3VsZCBiZSBhbnl0aGluZyByZWFsbHkpLiBUaGVuLCBpbnN0ZWFkIG9mIGxvb2tpbmcgaW4gdGhlIGltYWdlIGZpbGVuYW1lLCBpdCB3aWxsIGxvb2sgaW4gdGhlIGltYWdlJ3MgJ0FsdCBUZXh0JyBmb3Igd29yZHMgdG8gbWF0Y2gvZXhjbHVkZS48L3A+DQoNCjxiPkdldHRpbmcgd2lsZDwvYj4NCg0KPHA+Tm93IHRoaW5ncyBnZXQgZXZlbiBtb3JlIHdhcnBlZC4gU2luY2UgeW91IG9mdGVuIGRvbid0IGtub3cgd2hpY2ggcHJvZHVjdCBwYWdlIHlvdXIgY3VzdG9tZXJzIHdpbGwgbG9vayBhdCwgeW91IGNhbiB1c2UgdGhlIHNwZWNpYWwgd2lsZGNhcmQgIj8iIGFzIGFuIG9wdGlvbiBpbiB5b3VyIGxpc3Qgb2Ygd29yZHMgdG8gbWF0Y2ggb3IgYXZvaWQuIFdoYXQgdGhpcyBkb2VzIGlzIGxvb2sgYXQgdGhlIGN1cnJlbnQgc2VjdGlvbiBuYW1lIG9mIHRoZSBwYWdlIGJlaW5nIGRpc3BsYXllZCBhbmQgdXNlIHRoYXQgYXMgb25lIG9mIHlvdXIgaWdub3JlIHdvcmRzLiBTbyBpZiBhIHBlcnNvbiB3YXMgb24gcGFnZSA8Y29kZT53d3cubWVnYXpvby5jb20vbGlvbnMvdGhlLWh1bWJsZS1saW9uPC9jb2RlPiBhbmQgdGhlIHBsdWdpbiB3YXMgY2FsbGVkIHRodXM6PC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/IiAvJmd0OzwvY29kZT4NCg0KPHA+YW55IGltYWdlIG5hbWUgaW4gdGhlICJiYW5uZXJzIiBjYXRlZ29yeSB0aGF0IGhhZCB0aGUgdGV4dCAibGlvbnMiIGluIGl0IHdvdWxkIGJlIGZhaXIgZ2FtZSBmb3IgYXBwZWFyaW5nIG9uIHRoZSBwYWdlLiBBZ2FpbiwgeW91IGNhbiBkbyB0aGUgcmV2ZXJzZSBieSB1c2luZyBhdm9pZF90ZXh0OjwvcD4NCg0KPGNvZGU+Jmx0O3R4cDpzbWRfcmFuZG9tX2Jhbm5lciBjYXRlZ29yeT0iYmFubmVycyIgYXZvaWRfdGV4dD0iPyIgLyZndDs8L2NvZGU+DQoNCjxwPlRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgYXJyYW5nZSB5b3VyIHNpdGUgc3VjaCB0aGF0IGVhY2ggcHJvZHVjdCBoYXMgYSBzZXBhcmF0ZSBzZWN0aW9uLCB5b3UgY2FuIHRoZW4gbmFtZSB5b3VyIGJhbm5lciBpbWFnZXMgKG9yIGFsdCB0ZXh0KSBpbiBzdWNoIGEgd2F5IHRoYXQgY2VydGFpbiBpbWFnZXMgd29uJ3QgYmUgZGlzcGxheWVkIHdoZW4gYSB1c2VyIHZpc2l0cyBhIHBhcnRpY3VsYXIgc2VjdGlvbi48L3A+DQoNCjxwPllvdSBjYW4gdXNlIHRoZSAiPyIgaW4gYWRkaXRpb24gdG8gYSBsaXN0IG9mIHdvcmRzIGlmIHlvdSBsaWtlLCBhbmQgbWl4IGJvdGggPGNvZGU+bWF0Y2hfdGV4dDwvY29kZT4gYW5kIDxjb2RlPmF2b2lkX3RleHQ8L2NvZGU+IHVudGlsIHlvdXIgYnJhaW4gZXhwbG9kZXMuPC9wPg0KDQo8Yj5Mb29raW5nIGFyb3VuZDwvYj4NCg0KPHA+QnkgZGVmYXVsdCwgdGhlICI/IiBtZWFucyB0aGUgcGx1Z2luIHdpbGwgbG9vayBhdCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBzZWN0aW9uIGZvciBhIG1hdGNoL2V4Y2x1c2lvbi4gSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoYXQsIHlvdSBoYXZlIHRoZSBjaG9pY2Ugb2YgZ2l2aW5nIHRoZSA8Y29kZT5sb29rX2luPC9jb2RlPiBvcHRpb24uIFRoaXMgZm9yY2VzIHRoZSBwbHVnaW4gdG8gbG9vayBmb3IgYSBtYXRjaCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgVVJMLjwvcD4NCg0KPHA+VGhlIGN1cnJlbnQgb3B0aW9ucyBhdmFpbGFibGUgYXJlICJjYXRlZ29yeSIsICJzZWN0aW9uIiBvciAidGl0bGUiOyB0aGUgJ3RpdGxlJyBpbiB0aGlzIGNhc2UgaXMgdGhlIG5hbWUgb2YgdGhlIGFydGljbGUgaXRzZWxmLiBGb3IgZXhhbXBsZTo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIG1hdGNoX3RleHQ9Ij8iIGxvb2tfaW49InRpdGxlIiAvJmd0OzwvY29kZT4NCg0KPHA+d291bGQgbG9vayBhdCBqdXN0IHRoZSBhcnRpY2xlJ3MgdGl0bGUgYW5kIGNvbXBhcmUgaXQgdG8gdGhlIGltYWdlIG5hbWVzLiBJbiBvdXIgZXhhbXBsZSBVUkwgYWJvdmUsIGlmIHRoZXJlIHdhcyBhbiBpbWFnZSBpbiB0aGUgImJhbm5lcnMiIGNhdGVnb3J5IHdoaWNoIGhhZCA8Y29kZT50aGUtaHVtYmxlLWxpb248L2NvZGU+IGluIGl0cyBuYW1lLCBpdCB3b3VsZCBhcHBlYXIgb24gYW55IHBhZ2UgdGhhdCBoYWQgYSBVUkwgd2l0aCBhIHRpdGxlIGNvbnRhaW5pbmcgPGNvZGU+dGhlLWh1bWJsZS1saW9uPC9jb2RlPi4gSWYgeW91IGluc3RlYWQgdXNlZDo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIG1hdGNoX3RleHQ9Ij8iIGxvb2tfaW49InRpdGxlLHNlY3Rpb24iIC8mZ3Q7PC9jb2RlPg0KDQo8cD5pdCB3b3VsZCBpbmNsdWRlIGFueSBpbWFnZSBuYW1lcyB0aGF0IGhhZCBlaXRoZXIgImxpb25zIiBvciAidGhlLWh1bWJsZS1saW9uIiBpbiB0aGVtLiBOb3RlIHRoYXQgaWYgeW91IHNwZWNpZnkgYSA8Y29kZT5sb29rX2luPC9jb2RlPiBwYXJhbWV0ZXIgeW91IG11c3Qgc3BlY2lmeSBldmVyeSBwbGFjZSB0byBsb29rIGluOyBpdCBvbmx5IGFzc3VtZXMgInNlY3Rpb24iIGlmIHlvdSBtaXNzIG91dCB0aGUgPGNvZGU+bG9va19pbjwvY29kZT4gcGFyYW1ldGVyIGVudGlyZWx5LjwvcD4NCg0KPHA+QWxzbyBiZSBhd2FyZSB0aGF0IGlmIHlvdSBzcGVjaWZ5ICJ0aXRsZSIgYXMgYSBwbGFjZSB0byA8Y29kZT5sb29rX2luPC9jb2RlPiBhbmQgdGhlIHBlcnNvbiBpcyBzdXJmaW5nIGEgcGFnZSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBhcnRpY2xlcyBvbmx5LCB0aGUgdGl0bGUgcGFyYW1ldGVyIHdpbGwgYmUgaWdub3JlZC48L3A+DQoNCjxiPkxpbmtpbmcgdGhlIGltYWdlPC9iPg0KDQo8cD5UaGUgZmluYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBpcyB0byBkaXJlY3QgcGVvcGxlIHRvIGEgd2ViIGxpbmsgd2hlbiB0aGV5IGNsaWNrIG9uIHRoZSBpbWFnZS4gU2luY2UgdGhlIGltYWdlIGlzIGdvaW5nIHRvIGJlIGEgYmFubmVyIGFuZCB5b3UncmUgdW5saWtlbHkgdG8gd2FudCB0byBwdXQgYSBjYXB0aW9uIG9uIGl0LCBJIGZpZ3VyZWQgdGhlIGNhcHRpb24gd2FzIGEgZ29vZCBwbGFjZSB0byBzdG9yZSBhIHdlYiBsaW5rLiBXaGVuIHlvdSB1cGxvYWQgeW91ciBpbWFnZSwgcHV0IHRoZSBkZXNpcmVkIGRlc3RpbmF0aW9uIFVSTCBpbiB0aGUgJ2NhcHRpb24nIGZpZWxkIGFuZCB1c2UgdGhlIDxjb2RlPmxpbmtjYXB0aW9uPSIxIjwvY29kZT4gb3B0aW9uIHRvIHB1bGwgaXQgZnJvbSB0aGVyZSBhbmQgbWFrZSB5b3VyIGJhbm5lciBjbGlja2FibGUuPC9wPg0KDQo8Y29kZT4mbHQ7dHhwOnNtZF9yYW5kb21fYmFubmVyIGNhdGVnb3J5PSJiYW5uZXJzIiBtYXRjaF90ZXh0PSI/IiBhdm9pZF90ZXh0PSJ0ZXN0IiBsb29rX2luPSJzZWN0aW9uLHRpdGxlIiBsaW5rY2FwdGlvbj0iMSIgLyZndDs8L2NvZGU+DQoNCjxwPklmIHRoZSBVUkwgYmVnaW5zIHdpdGggPGNvZGU+aHR0cDovLzwvY29kZT4sIGl0IHdpbGwgYmUgdXNlZCB2ZXJiYXRpbS4gSWYgbm90LCBpdCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgYSAnbG9jYWwnIGxpbmsgYW5kIHdpbGwgaGF2ZSA8Y29kZT4mbHQ7dHhwOnNpdGVfdXJsIC8mZ3Q7PC9jb2RlPiBwcmVwZW5kZWQgdG8gaXQuPC9wPg0KDQo8cD5JZiB5b3UgYWxyZWFkeSBoYXZlIGEgdG9ubmUgb2YgY2FwdGlvbnMgc3RvcmVkIGFuZCBkb24ndCB3YW50IHRvIG92ZXJ3cml0ZSB0aGVtLCB5b3UgY2FuIHVzZSA8Y29kZT5saW5rYWx0PSIxIjwvY29kZT4gb3B0aW9uIHRvIGFsbG93IHRoZSBsaW5rIGJlIG1hZGUgZnJvbSB0aGUgYWx0IHRleHQgaW5zdGVhZC48L3A+DQoNCjxwPkZ1cnRoZXIsIGlmIHlvdSBhbHdheXMgd2FudCB5b3VyIGxpbmsgdG8gcG9pbnQgdG8gYSBwYXJ0aWN1bGFyIHNlY3Rpb24gb2YgeW91ciBzaXRlIG9yIGEgc3BlY2lmaWMgZXh0ZXJuYWwgc2l0ZSwgeW91IGNhbiBzYXZlIHlvdXJzZWxmIHNvbWUgdHlwaW5nLiBJbnN0ZWFkIG9mIGhhcmQtY29kaW5nIHRoZSBzZWN0aW9uIG9yIHNpdGUgbmFtZSBpbiB0aGUgYWx0L2NhcHRpb24gZmllbGQsIHlvdSBjYW4gc3BlY2lmeSB0aGUgPGNvZGU+bGlua3ByZWZpeDwvY29kZT4gb3B0aW9uLiBXaGF0ZXZlciB0ZXh0IHlvdSBwdXQgaW4gdGhhdCBvcHRpb24gd2lsbCBiZSBwcmVmaXhlZCB0byB0aGUgYWx0L2NhcHRpb24gdGV4dC4gTm90ZSB0aGF0IGlmIHlvdSBoYXZlIHVzZWQgYSAnZnVsbCcgVVJMIGluIHRoZSBhbHQvY2FwdGlvbiBmaWVsZCAoaS5lLiBvbmUgYmVnaW5uaW5nIHdpdGggPGNvZGU+aHR0cDovLzwvY29kZT4pIDxjb2RlPmxpbmtwcmVmaXg8L2NvZGU+IHdpbGwgYmUgaWdub3JlZCBmb3IgdGhhdCBpbWFnZS4gQWxzbyBub3RlIHRoYXQgaWYgeW91IHNwZWNpZnkgYm90aCA8Y29kZT5saW5rYWx0PC9jb2RlPiBhbmQgPGNvZGU+bGlua2NhcHRpb248L2NvZGU+IG9wdGlvbnMsIHRoZSA8Y29kZT5saW5rY2FwdGlvbjwvY29kZT4gd2lsbCB0YWtlIHByZWNlZGVuY2UuPC9wPg0KDQo8Yj5UcmFjayBpdDwvYj4NCg0KPHA+SWYgeW91IHVzZSA8Y29kZT5saW5rY2FwdGlvbj0iMSI8L2NvZGU+IG9yIDxjb2RlPmxpbmthbHQ9IjEiPC9jb2RlPiwgdGhlIHBsdWdpbiB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGEgcGFyYW1ldGVyIHRvIHRoZSBsaW5rIHNvIHlvdSBjYW4gdHJhY2sgd2hpY2ggYmFubmVycyB3ZXJlIGNsaWNrZWQgaW4geW91ciB0ZXh0cGF0dGVybiBsb2dzLiBTaW5jZSB0aGlzIGlzIGEgYml0IGxpa2UgcmVmZXJyZXIgdHJhY2tpbmcsIHRoZSBvcHRpb24gdG8gY29udHJvbCBpdCBpcyBuYW1lZCA8Y29kZT5yZWZlcmVyPC9jb2RlPiAmIzgyMTE7IGFuZCBpcyBtaXMtc3BlbGxlZCBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyB0aGUgSFRUUCBzcGVjIHdhcyBhbGwgdGhvc2UgeWVhcnMgYWdvIDotKTwvcD4NCg0KPHA+PGNvZGU+cmVmZXJlcjwvY29kZT4gdGFrZXMgYSB0ZXh0IGFyZ3VtZW50IHRvIHVzZSBhcyBhIHByZWZpeC4gQW4gZXhhbXBsZTo8L3A+DQoNCjxjb2RlPiZsdDt0eHA6c21kX3JhbmRvbV9iYW5uZXIgY2F0ZWdvcnk9ImJhbm5lcnMiIG1hdGNoX3RleHQ9Ij8sZ29sZGZpc2giIHJlZmVyZXI9InRyYWNraWQiIC8mZ3Q7PC9jb2RlPg0KDQo8cD5UaGlzIHdpbGwgZ2VuZXJhdGUgYSB1cmwgd2l0aCA8Y29kZT4/dHJhY2tpZD08aT5pbWFnZV9udW1iZXI8L2k+PC9jb2RlPiBhZGRlZCB0byBpdCwgd2hlcmUgPGNvZGU+PGk+aW1hZ2VfbnVtYmVyPC9pPjwvY29kZT4gaXMgdGhlIGltYWdlIGlkIG9mIHRoZSBwaWN0dXJlIGluIHF1ZXN0aW9uLjwvcD4NCg0KPHA+SWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIDxjb2RlPnJlZmVyZXI8L2NvZGU+LCBhbGwgbGlua2FibGUgaW1hZ2VzIHdpbGwgaGF2ZSB0aGUgY29kZSA8Y29kZT4/YmlkPTxpPmltYWdlX251bWJlcjwvaT48L2NvZGU+IGFkZGVkIChmb3IgJ0Jhbm5lciBJRCcpLiBJZiB5b3Ugd2lzaCB0byBkaXNhYmxlIHRoZSBvcHRpb24sIGFkZCA8Y29kZT5yZWZlcmVyPSIiPC9jb2RlPi48L3A+DQoNCjxiPkFuZCB0aGVyZSdzIG1vcmU8L2I+DQoNCjxwPldhbnQgbW9yZSB0aGFuIG9uZSBpbWFnZSBzZW50IG91dCBhdCBvbmNlPyBBZGQgdGhlIDxjb2RlPmxpbWl0PC9jb2RlPiBwYXJhbWV0ZXIuIERlZmF1bHRzIHRvIDEgaW1hZ2UuPC9wPg0KDQo8Yj5Ucm91Ymxlc2hvb3Rpbmc8L2I+DQoNCjxwPlRoZXJlIGlzIGEgY2hhbmNlIHRoYXQsIHVuZGVyIHR4cCB2NC4wLjQsIHlvdSB3aWxsIGdldCB0aGUgc2FtZSBpbWFnZSBiYWNrIGVhY2ggdGltZS4gVGhpcyBjb3VsZCBiZSBiZWNhdXNlIG9mIHlvdXIgb3B0aW9ucyAoY2hlY2sgPGNvZGU+bWF0Y2hfdGV4dDwvY29kZT4gYW5kIDxjb2RlPmNhdGVnb3J5PC9jb2RlPiBjYXJlZnVsbHkpIGJ1dCBtYXkgYWxzbyBiZSBiZWNhdXNlIHRoZSBpbWFnZSBpcyBiZWluZyBjYWNoZWQuIElmIHRoZSBzZXJ2ZXIgdGhpbmtzIHRoZSBjdXJyZW50IHBhZ2UgcmVxdWVzdCBpcyBpZGVudGljYWwgdG8gdGhlIGxhc3QsIGl0IGluc3RydWN0cyB0aGUgYnJvd3NlciB0byBzaG93IHRoZSBzYW1lIHBhZ2UgYXMgbGFzdCB0aW1lLjwvcD4NCg0KPHA+SWYgdGhpcyBpcyBjYXVzaW5nIGEgcHJvYmxlbSwgdHJ5IHNldHRpbmcgdGhlIHZhbHVlIG9mICJTZW5kIExhc3QtTW9kaWZpZWQgaGVhZGVyIiB0byAibm8iIHVuZGVyIGFkbWluLT5wcmVmZXJlbmNlcy0+YWR2YW5jZWQuIEl0IG1heSBpbmNyZWFzZSBzZXJ2ZXIgbG9hZCBiZWNhdXNlIGV2ZXJ5IHBhZ2UgYW5kIGltYWdlIHdpbGwgYWx3YXlzIGJlIHNlbnQgZnJvbSB0aGUgc2VydmVyLCBidXQgYXQgbGVhc3QgeW91J2xsIGdldCBhIHJhbmRvbSBpbWFnZSBlYWNoIHRpbWUgOi0pPC9wPiI7czo0OiJjb2RlIjtzOjUzMTA6Ii8vIHYwLjEgIEluaXRpYWwgcHVibGljIHJlbGVhc2UNCi8vIHYwLjExIEFkZGVkIFBGWCB0byBxdWVyeSAodGhhbmtzIG1lcmN1cnkpDQovLyB2MC4xMiBGaXhlZCBoZWxwIHRvIGluY2x1ZGUgdHJhaWxpbmcgc2xhc2hlcyAodGhhbmtzIHZpdHRvcmlvKQ0KLy8gdjAuMTMgVW5yZWxlYXNlZC4gQWRkZWQgbG9va19pbj1jYXRlZ29yeSBhbmQgcmVmZXJlcg0KLy8gdjAuMTQgQWRkZWQgbWF0Y2hfdGV4dCBhbmQgdXNlX2FsdCAodGhhbmtzIGx1a2VwZXJtc24pDQovLyB2MC4xNSBBZGRlZCBhbHdheXNfZGlzcGxheSBhbmQgbGltaXQgKHRoYW5rcyBsdWtlcGVybXNuKQ0KLy8gdjAuMTVhIEJ1Z2ZpeCBmb3IgbGlua2NhcHRpb24gKHRoYW5rcyBtZXJjdXJ5KQ0KLy8gdjAuMTYgVGlnaHRlbmVkIGltYWdlKCkgcGFyYW1zIGZvciB0eHAgdjQuMC40IGNvbXBsaWFuY2UNCi8vIHYwLjE3IEFkZGVkIHRodW1iLCBsaW5rcHJlZml4IGFuZCBsaW5rYWx0IG9wdGlvbnMNCi8vIHYwLjIgIFRPRE86IEFkZCBzdWJjYXRlZ29yeSBzdXBwb3J0IC0gSU4gREVWRUxPUE1FTlQNCmZ1bmN0aW9uIHNtZF9yYW5kb21fYmFubmVyKCRhdHRzKSB7DQoJZ2xvYmFsICRwcmV0ZXh0Ow0KDQoJJGNhdGVnb3J5ID0gJyUnOw0KCSRsb29rX2luID0gJyc7DQoJJG1hdGNoX3RleHQgPSAnJzsNCgkkYXZvaWRfdGV4dCA9ICcnOw0KCSRyZWZlcmVyID0gJ2JpZCc7DQoJJHVzZV9hbHQgPSAnJzsNCgkkdGh1bWIgPSAnJzsNCgkkYWx3YXlzX2Rpc3BsYXkgPSAnJzsNCgkkbGltaXQgPSAnMSc7DQoJJHdoZXJlTmFtZSA9ICcnOw0KCSRsaW5rcHJlZml4ID0gJyc7DQoJJGxpbmthbHQgPSAoaXNzZXQoJGxpbmthbHQpKSA/IHRydWUgOiBmYWxzZTsNCgkkbGlua2NhcHRpb24gPSAoaXNzZXQoJGxpbmtjYXB0aW9uKSkgPyB0cnVlIDogZmFsc2U7DQoJJG1hdGNoQXJyYXkgPSBhcnJheSgpOw0KCSRhdm9pZEFycmF5ID0gYXJyYXkoKTsNCg0KCWlmIChpc19hcnJheSgkYXR0cykpIGV4dHJhY3QoJGF0dHMpOw0KDQoJLy8gdXNlX2FsdCBzd2l0Y2hlcyB0aGUgV0hFUkUgc3RhdGVtZW50IHRvIGxvb2sgaW4gdGhlIGltYWdlICdhbHQnIGluc3RlYWQgb2YgJ25hbWUnDQoJaWYoJHVzZV9hbHQgPT0gIiIpIHsNCgkJJHdoZXJlUG9zID0gIm5hbWUiOw0KCX0gZWxzZSB7DQoJCSR3aGVyZVBvcyA9ICJhbHQiOw0KCX0NCg0KCS8vKiogTUFUQ0hJTkcgVEVYVCANCgkvLyBJZiBtYXRjaF90ZXh0IGlzIHNwZWNpZmllZCwgbG9va19pbiBtdXN0IGFsc28gYmUgZ2l2ZW47DQoJLy8gaWYgaXQgaXNuJ3QsIHNldCBpdCB0byBhIGRlZmF1bHQgZmlyc3QNCglpZiAoJG1hdGNoX3RleHQgIT0gIiIgKSB7DQoJCWlmICgkbG9va19pbiA9PSAiIikgew0KCQkJJGxvb2tfaW4gPSAic2VjdGlvbiI7DQoJCX0NCg0KCQkkdXJsX3BhcnRzID0gZXhwbG9kZSgiLCIsICRsb29rX2luKTsNCgkJJG1hdGNoZXMgPSBleHBsb2RlKCIsIiwgJG1hdGNoX3RleHQpOw0KDQoJCWZvcmVhY2ggKCR1cmxfcGFydHMgYXMgJHBhcnQpIHsNCgkJCWZvcmVhY2ggKCRtYXRjaGVzIGFzICRtYXRjaCkgew0KCQkJCWlmICgkbWF0Y2ggPT09ICI/Iikgew0KCQkJCQlzd2l0Y2ggKCRwYXJ0KSB7DQoJCQkJCQljYXNlICJzZWN0aW9uIjoNCgkJCQkJCQkkbWF0Y2ggPSAkcHJldGV4dFtzXTsNCgkJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgImNhdGVnb3J5IjoNCgkJCQkJCQkkbWF0Y2ggPSAkcHJldGV4dFtjXTsNCgkJCQkJCQlicmVhazsNCgkJCQkJCWNhc2UgInRpdGxlIjoNCgkJCQkJCQkvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGFydGljbGUgYnkgdGVzdGluZyBuZXh0X2lkDQoJCQkJCQkJaWYgKGFycmF5X2tleV9leGlzdHMoJ25leHRfaWQnLCRwcmV0ZXh0KSkgeyANCgkJCQkJCQkJLy8gR2V0IHJpZCBvZiBhbnkgPyBwYXJhbXMgYWZ0ZXIgdGhlIFVSTCB0aXRsZQ0KCQkJCQkJCQkkdXJsID0gc3BsaXQoIlw/IiwkcHJldGV4dFtyZXFdKTsNCgkJCQkJCQkJJG1hdGNoID0gc3Vic3RyKHN0cnJjaHIoJHVybFswXSwgIi8iKSwgMSk7DQoJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJJG1hdGNoID0gIiI7DQoJCQkJCQkJfQ0KCQkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICgkbWF0Y2ggIT0gIiIpIHsNCgkJCQkJaWYgKCFpbl9hcnJheSgkbWF0Y2gsJG1hdGNoQXJyYXkpKSB7DQoJCQkJCQkkbWF0Y2hBcnJheVtdID0gJG1hdGNoOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJJG51bU1hdGNoZXMgPSBjb3VudCgkbWF0Y2hBcnJheSk7DQoJCSRjdHIgPSAxOw0KCQlmb3JlYWNoICgkbWF0Y2hBcnJheSBhcyAkbWF0Y2hTdHIpIHsNCgkJCWlmICgkY3RyID09IDEpIHsNCgkJCQkkd2hlcmVOYW1lIC49ICIgQU5EICggIjsNCgkJCX0gZWxzZSB7DQoJCQkJJHdoZXJlTmFtZSAuPSAiIE9SICI7DQoJCQl9DQoJCQkkd2hlcmVOYW1lIC49ICR3aGVyZVBvcyAuICIgTElLRSAnJSIuJG1hdGNoU3RyLiIlJyI7DQoJCQlpZiAoJGN0ciA9PSAkbnVtTWF0Y2hlcykgew0KCQkJCSR3aGVyZU5hbWUgLj0gIiApICI7DQoJCQl9DQoJCQkkY3RyKys7DQoJCX0NCgl9DQoNCgkvLyoqIEFWT0lESU5HIFRFWFQNCgkvLyBJZiBhdm9pZF90ZXh0IGlzIHNwZWNpZmllZCwgbG9va19pbiBtdXN0IGFsc28gYmUgZ2l2ZW47DQoJLy8gaWYgaXQgaXNuJ3QsIHNldCBpdCB0byBhIGRlZmF1bHQgZmlyc3QNCglpZiAoJGF2b2lkX3RleHQgIT0gIiIgKSB7DQoJCWlmICgkbG9va19pbiA9PSAiIikgew0KCQkJJGxvb2tfaW4gPSAic2VjdGlvbiI7DQoJCX0NCg0KCQkkdXJsX3BhcnRzID0gZXhwbG9kZSgiLCIsJGxvb2tfaW4pOw0KCQkkbWF0Y2hlcyA9IGV4cGxvZGUoIiwiLCRhdm9pZF90ZXh0KTsNCgkJZm9yZWFjaCAoJHVybF9wYXJ0cyBhcyAkcGFydCkgew0KCQkJZm9yZWFjaCAoJG1hdGNoZXMgYXMgJG1hdGNoKSB7DQoJCQkJaWYgKCRtYXRjaCA9PT0gIj8iKSB7DQoJCQkJCXN3aXRjaCAoJHBhcnQpIHsNCgkJCQkJCWNhc2UgInNlY3Rpb24iOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W3NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAiY2F0ZWdvcnkiOg0KCQkJCQkJCSRtYXRjaCA9ICRwcmV0ZXh0W2NdOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJY2FzZSAidGl0bGUiOg0KCQkJCQkJCS8vIENoZWNrIGlmIHRoaXMgaXMgYW4gYXJ0aWNsZSBieSB0ZXN0aW5nIG5leHRfaWQNCgkJCQkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygnbmV4dF9pZCcsJHByZXRleHQpKSB7IA0KCQkJCQkJCQkvLyBHZXQgcmlkIG9mIGFueSA/IHBhcmFtcyBhZnRlciB0aGUgVVJMIHRpdGxlDQoJCQkJCQkJCSR1cmwgPSBzcGxpdCgiXD8iLCRwcmV0ZXh0W3JlcV0pOw0KCQkJCQkJCQkkbWF0Y2ggPSBzdWJzdHIoc3RycmNocigkdXJsWzBdLCAiLyIpLCAxKTsNCgkJCQkJCQl9IGVsc2Ugew0KCQkJCQkJCQkkbWF0Y2ggPSAiIjsNCgkJCQkJCQl9DQoJCQkJCQkJYnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKCRtYXRjaCAhPSAiIikgew0KCQkJCQlpZiAoIWluX2FycmF5KCRtYXRjaCwkYXZvaWRBcnJheSkpIHsNCgkJCQkJCSRhdm9pZEFycmF5W10gPSAkbWF0Y2g7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlmb3JlYWNoICgkYXZvaWRBcnJheSBhcyAkYXZvaWRTdHIpIHsNCgkJCSR3aGVyZU5hbWUgLj0gIiBBTkQgIiAuICR3aGVyZVBvcyAuICIgTk9UIExJS0UgJyUiLiRhdm9pZFN0ci4iJSciOw0KCQl9DQoJfQ0KDQoJJHF1ZXJ5ID0gInNlbGVjdCBpZCxjYXB0aW9uLGFsdCBmcm9tICIuUEZYLiJ0eHBfaW1hZ2Ugd2hlcmUgY2F0ZWdvcnkgbGlrZSAnJGNhdGVnb3J5JyAkd2hlcmVOYW1lIG9yZGVyIGJ5IHJhbmQoKSBsaW1pdCAkbGltaXQiOw0KCSRycyA9IGdldFJvd3MoJHF1ZXJ5KTsNCgkkb3V0U3RyID0gJyc7DQoNCglpZigkcnMpIHsNCgkJJG91dFN0ciA9IHNtZF9yc19vdXQoJHJzLCAkbGlua2NhcHRpb24sICRsaW5rYWx0LCAkbGlua3ByZWZpeCwgJHJlZmVyZXIsICR0aHVtYiwgJGF0dHMpOw0KCX0gZWxzZSB7DQoJCS8vIE5vIG1hdGNoaW5nIGltYWdlcyBmb3VuZC4gSWYgYWx3YXlzX2Rpc3BsYXkgaXMgb24sIHBpY2sgYW55IGltYWdlKHMpDQoJCWlmICgkYWx3YXlzX2Rpc3BsYXkpIHsNCgkJCSRxdWVyeSA9ICJzZWxlY3QgaWQsY2FwdGlvbixhbHQgZnJvbSAiLlBGWC4idHhwX2ltYWdlIHdoZXJlIGNhdGVnb3J5IGxpa2UgJyRjYXRlZ29yeScgb3JkZXIgYnkgcmFuZCgpIGxpbWl0ICRsaW1pdCI7DQoJCQkkcnMgPSBnZXRSb3dzKCRxdWVyeSk7DQoJCQlpZigkcnMpIHsNCgkJCQkkb3V0U3RyID0gc21kX3JzX291dCgkcnMsICRsaW5rY2FwdGlvbiwgJGxpbmthbHQsICRsaW5rcHJlZml4LCAkcmVmZXJlciwgJHRodW1iLCAkYXR0cyk7DQoJCQl9DQoJCX0gZWxzZSB7DQoJCQlyZXR1cm47DQoJCX0NCgl9DQoNCglyZXR1cm4gJG91dFN0cjsNCn0NCg0KZnVuY3Rpb24gc21kX3JzX291dCgkcnMsJGxpbmtjYXB0aW9uLCRsaW5rYWx0LCRsaW5rcHJlZml4LCRyZWZlcmVyLCR0aHVtYiwkYXR0cykgew0KCSRvdXQgPSAnJzsNCglmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCSRsaW5rTmFtZT10cmltKCgoJGxpbmtjYXB0aW9uKSA/ICRyb3dbJ2NhcHRpb24nXSA6ICRyb3dbJ2FsdCddKSk7DQoJCSRzdGF0aWNwcmVmaXggPSAiaHR0cDovLyI7DQoJCWlmIChzdWJzdHIoJGxpbmtOYW1lLCAwLCBzdHJsZW4oJHN0YXRpY3ByZWZpeCkpID09PSAkc3RhdGljcHJlZml4KSB7DQoJCQkkbGlua3VybCA9ICRsaW5rTmFtZTsNCgkJfSBlbHNlIHsNCgkJCWlmICgkbGlua3ByZWZpeCA9PSAnJykgew0KCQkJCSRsaW5rdXJsID0gc2l0ZV91cmwoJGF0dHMpIC4gJGxpbmtOYW1lOw0KCQkJfSBlbHNlIHsNCgkJCQkkbGlua3VybCA9ICRsaW5rcHJlZml4LicvJy4kbGlua05hbWU7DQoJCQl9DQoJCX0NCgkJaWYgKCgkbGlua2NhcHRpb24gfHwgJGxpbmthbHQpICYmICRsaW5rdXJsKSB7DQoJCQlpZiAoJHJlZmVyZXIgIT0gIiIpIHsNCgkJCQkkcmVmZXJ0eHQgPSAiPyIuICRyZWZlcmVyIC4gIj0iIC4kcm93WydpZCddOw0KCQkJfQ0KCQkJJG91dCAuPSAnPGEgaHJlZj0iJyAuJGxpbmt1cmwuJHJlZmVydHh0LiAnIj4nIC4gKCgkdGh1bWI9PTApID8gaW1hZ2UoYXJyYXkoImlkIiA9PiAkcm93WydpZCddKSkgOiB0aHVtYm5haWwoYXJyYXkoImlkIiA9PiAkcm93WydpZCddKSkpLiAnPC9hPic7DQoJCX0gZWxzZSB7DQoJCQkkb3V0IC49ICgoJHRodW1iPT0wKSA/IGltYWdlKGFycmF5KCJpZCIgPT4gJHJvd1snaWQnXSkpIDogdGh1bWJuYWlsKGFycmF5KCJpZCIgPT4gJHJvd1snaWQnXSkpKTsNCgkJfQ0KCX0NCglyZXR1cm4gJG91dDsNCn0NCiI7czo0OiJ0eXBlIjtzOjE6IjAiO3M6MzoibWQ1IjtzOjMyOiIxY2Y0NDM3ZjdlMmUwYmVhYWFjNmQyMzdlOWVhYWFlMiI7fQ==