<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.2</dtdversion>
	<name>TemplateExternalizer</name>
	<version>1.0.1</version>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPkl0IGFsbG93cyB5b3UgdG8gdXNlIGFueSBleHRlcm5hbCBlZGl0b3IgdG8gZWRpdCB5b3VyIHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMuPC9wPgo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4KPHA+Rmlyc3QgY29uZmlndXJlIHRoZSBwYXRoIHdoZXJlIHlvdSB3b3VsZCBsaWtlIHRoZSB0ZW1wbGF0ZSBmaWxlcyB0byBiZSBzYXZlZC4gClRoZSBkZWZhdWx0IGlzIHRtcC9leHRlcm5hbGl6ZXIvIHdoaWNoIHNob3VsZCB3b3JrIGZvciBtb3N0IHBlb3BsZS4gTmV4dCB0dXJuIG9uCjxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gd2hpY2ggZXhwb3J0cyBlYWNoIHRlbXBsYXRlIGFuZCBzdHlsZXNoZWV0IGZyb20gdGhlIApkYXRhYmFzZSB0byBmaWxlcy4gWW91IG1heSBub3cgZWRpdCB0aGUgZmlsZXMgaG93ZXZlciB5b3UgbGlrZSBhbmQgYW55IGNoYW5nZXMgYXJlIAphdXRvbWF0aWNhbGx5IGRldGVjdGVkLCBpbXBvcnRlZCB0byB0aGUgZGF0YWJhc2UgYW5kIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LjwvcD4KCjxwPklmIHlvdSBlZGl0IG9yIGFkZCBuZXcgdGVtcGxhdGVzIG9yIHN0eWxlc2hlZXRzIHVzaW5nIHRoZSBub3JtYWwgd2ViIGludGVyZmFjZSAKd2hpbGUgPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiBpcyBvbiwgdGhlc2UgY2hhbmdlcyB3aWxsIGJlIGV4cG9ydGVkIHRvIHRoZSBmaWxlcy4gCkFueSBmaWxlcyBpbiB0aGUgdGVtcGxhdGUgcGF0aCB3aG9zZSBuYW1lcyBkbyBub3QgY29ycmVzcG9uZCB0byBleGlzdGluZyB0ZW1wbGF0ZXMKd2lsbCBiZSBpZ25vcmVkLjwvcD4KCjxwPldoZW4geW91IGhhdmUgZmluaXNoZWQgCmVkaXRpbmcgdGhlIGZpbGVzIHlvdSBzaG91bGQgdHVybiA8ZW0+RGV2ZWxvcG1lbnQgTW9kZTwvZW0+IG9mZiBvdGhlcndpc2UgaXQgCndpbGwgYWZmZWN0IHBlcmZvcm1hbmNlLiBIb3dldmVyLCBpZiBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIGFueSBvZiB0aGUgZmlsZXMgZm9yIAo8ZW0+VGltZW91dDwvZW0+IG1pbnV0ZXMsIDxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gd2lsbCB0dXJuIGl0c2VsZiBvZmYgCmF1dG9tYXRpY2FsbHkuIFNldCA8ZW0+VGltZW91dDwvZW0+IHRvIDAgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuPC9wPgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgVGFtbHluIFJob2RlcyAmbHQ7PGEgaHJlZj0iaHR0cDovL3RhbWx5bi5vcmciPnRhbWx5bi5vcmc8L2E+Jmd0Oy4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiAKWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KPGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=</help>
	<about>PGJyIC8+QXV0aG9yOiB0YW1seW4gJmx0O3RhbUB6ZW5vbG9neS5jby51ayZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjAuMTxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KPGxpPlZlcnNpb24gMS4wLjEgOSBKdW5lIDIwMDYuIFNwZWNpYWwgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMgYXJlIGVzY2FwZWQuIEZpeGVkIGFub3RoZXIgYnVnLjwvbGk+CjxsaT5WZXJzaW9uIDEuMCAyOCBNYXkgMjAwNi4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjwvdWw+PGJyIC8+</about>
	<description>Configure the Template Externalizer module.</description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1RlbXBsYXRlIEV4dGVybmFsaXplcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1RoaXMgbW9kdWxlIHdpbGwgbm90IGRvIGFueXRoaW5nIHVudGlsIDxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gaXMgdHVybmVkIG9uLiBTZWUgdGhlIEhlbHAgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0NvbmZpZ3VyZSB0aGUgVGVtcGxhdGUgRXh0ZXJuYWxpemVyIG1vZHVsZS4nOwokbGFuZ1snZGV2X21vZGVfZW5hYmxlZCddID0gJ0RldmVsb3BtZW50IE1vZGUgZW5hYmxlZC4nOwokbGFuZ1snZGV2X21vZGVfZGlzYWJsZWQnXSA9ICdEZXZlbG9wbWVudCBNb2RlIGRpc2FibGVkLic7CiRsYW5nWydkZXZfbW9kZV90aW1lZG91dCddID0gJ0RldmVsb3BtZW50IE1vZGUgdGltZWQgb3V0Lic7CiRsYW5nWyd0aXRsZV9kZXZfbW9kZSddID0gJ0RldmVsb3BtZW50IE1vZGUnOwokbGFuZ1sndGl0bGVfdGltZW91dCddID0gJ0RldiBNb2RlIFRpbWVvdXQnOwokbGFuZ1sndGl0bGVfdGltZW91dF91bml0cyddID0gJ21pbnV0ZXMnOwokbGFuZ1sndGl0bGVfY2FjaGVfcGF0aCddID0gJ0NhY2hlIFBhdGgnOwokbGFuZ1sndGl0bGVfdGVtcGxhdGVfZXh0ZW5zaW9uJ10gPSAnVGVtcGxhdGUgRmlsZSBFeHRlbnNpb24nOwokbGFuZ1sndGl0bGVfc3R5bGVzaGVldF9leHRlbnNpb24nXSA9ICdTdHlsZXNoZWV0IEZpbGUgRXh0ZW5zaW9uJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4KPGxpPlZlcnNpb24gMS4wLjEgOSBKdW5lIDIwMDYuIFNwZWNpYWwgY2hhcmFjdGVycyBpbiBmaWxlbmFtZXMgYXJlIGVzY2FwZWQuIEZpeGVkIGFub3RoZXIgYnVnLjwvbGk+CjxsaT5WZXJzaW9uIDEuMCAyOCBNYXkgMjAwNi4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjwvdWw+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+SXQgYWxsb3dzIHlvdSB0byB1c2UgYW55IGV4dGVybmFsIGVkaXRvciB0byBlZGl0IHlvdXIgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cy48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5GaXJzdCBjb25maWd1cmUgdGhlIHBhdGggd2hlcmUgeW91IHdvdWxkIGxpa2UgdGhlIHRlbXBsYXRlIGZpbGVzIHRvIGJlIHNhdmVkLiAKVGhlIGRlZmF1bHQgaXMgdG1wL2V4dGVybmFsaXplci8gd2hpY2ggc2hvdWxkIHdvcmsgZm9yIG1vc3QgcGVvcGxlLiBOZXh0IHR1cm4gb24KPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiB3aGljaCBleHBvcnRzIGVhY2ggdGVtcGxhdGUgYW5kIHN0eWxlc2hlZXQgZnJvbSB0aGUgCmRhdGFiYXNlIHRvIGZpbGVzLiBZb3UgbWF5IG5vdyBlZGl0IHRoZSBmaWxlcyBob3dldmVyIHlvdSBsaWtlIGFuZCBhbnkgY2hhbmdlcyBhcmUgCmF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQsIGltcG9ydGVkIHRvIHRoZSBkYXRhYmFzZSBhbmQgdGFrZSBlZmZlY3QgaW1tZWRpYXRlbHkuPC9wPgoKPHA+SWYgeW91IGVkaXQgb3IgYWRkIG5ldyB0ZW1wbGF0ZXMgb3Igc3R5bGVzaGVldHMgdXNpbmcgdGhlIG5vcm1hbCB3ZWIgaW50ZXJmYWNlIAp3aGlsZSA8ZW0+RGV2ZWxvcG1lbnQgTW9kZTwvZW0+IGlzIG9uLCB0aGVzZSBjaGFuZ2VzIHdpbGwgYmUgZXhwb3J0ZWQgdG8gdGhlIGZpbGVzLiAKQW55IGZpbGVzIGluIHRoZSB0ZW1wbGF0ZSBwYXRoIHdob3NlIG5hbWVzIGRvIG5vdCBjb3JyZXNwb25kIHRvIGV4aXN0aW5nIHRlbXBsYXRlcwp3aWxsIGJlIGlnbm9yZWQuPC9wPgoKPHA+V2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCAKZWRpdGluZyB0aGUgZmlsZXMgeW91IHNob3VsZCB0dXJuIDxlbT5EZXZlbG9wbWVudCBNb2RlPC9lbT4gb2ZmIG90aGVyd2lzZSBpdCAKd2lsbCBhZmZlY3QgcGVyZm9ybWFuY2UuIEhvd2V2ZXIsIGlmIG5vIGNoYW5nZXMgYXJlIG1hZGUgdG8gYW55IG9mIHRoZSBmaWxlcyBmb3IgCjxlbT5UaW1lb3V0PC9lbT4gbWludXRlcywgPGVtPkRldmVsb3BtZW50IE1vZGU8L2VtPiB3aWxsIHR1cm4gaXRzZWxmIG9mZiAKYXV0b21hdGljYWxseS4gU2V0IDxlbT5UaW1lb3V0PC9lbT4gdG8gMCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS48L3A+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA2LCBUYW1seW4gUmhvZGVzICZsdDs8YSBocmVmPSJodHRwOi8vdGFtbHluLm9yZyI+dGFtbHluLm9yZzwvYT4mZ3Q7LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIApZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgonOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/TemplateExternalizer.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBUZW1wbGF0ZUV4dGVybmFsaXplciAtIGVkaXQgdGVtcGxhdGVzICYgc3R5bGVzaGVldHMgZXh0ZXJuYWxseQojIFZlcnNpb246IDEuMCwgdGFtbHluCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCmNsYXNzIFRlbXBsYXRlRXh0ZXJuYWxpemVyIGV4dGVuZHMgQ01TTW9kdWxlCnsKCiAgLy9tb2R1bGUgY29uc3RydWN0b3IKICBmdW5jdGlvbiBUZW1wbGF0ZUV4dGVybmFsaXplcigpCiAgewogICAgLy9jYWxsIHBhcmVudCBjb25zdHJ1Y3RvcgogICAgJHRoaXMtPkNNU01vZHVsZSgpOwogICAgCiAgICAvL2ltcG9ydCB0aGUgdGVtcGxhdGVzCiAgICBpZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZGV2X21vZGUiKSkKICAgICAgJHRoaXMtPkltcG9ydFRlbXBsYXRlcygpOwogIH0KICAKICBmdW5jdGlvbiBHZXROYW1lKCkKICB7CiAgICByZXR1cm4gJ1RlbXBsYXRlRXh0ZXJuYWxpemVyJzsKICB9CgogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICB9CgogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogIHsKICAgIHJldHVybiAnMS4wLjEnOwogIH0KCiAgZnVuY3Rpb24gR2V0SGVscCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQoKICBmdW5jdGlvbiBHZXRBdXRob3IoKQogIHsKICAgIHJldHVybiAndGFtbHluJzsKICB9CgogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICB7CiAgICByZXR1cm4gJ3RhbUB6ZW5vbG9neS5jby51ayc7CiAgfQoKICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgfQoKICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gSGFzQWRtaW4oKQogIHsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKICB7CiAgICByZXR1cm4gJ2xheW91dCc7CiAgfQoKCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KCgogIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgewogICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1RlbXBsYXRlIEV4dGVybmFsaXplcicpOwogIH0KCiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIHsKICAgIHJldHVybiAiMC4xMSI7CiAgfQoKCiAgZnVuY3Rpb24gSW5zdGFsbCgpCiAgewogICAgJGRiID0gJiR0aGlzLT5jbXMtPmRiOwogICAgCiAgICAvLyBjcmVhdGUgYSBwZXJtaXNzaW9uCiAgICAkdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignVGVtcGxhdGUgRXh0ZXJuYWxpemVyJywgJ1RlbXBsYXRlIEV4dGVybmFsaXplcicpOwogICAgCiAgICAvLyBjcmVhdGUgcHJlZmVyZW5jZXMgd2l0aCBkZWZhdWx0IHZhbHVlcwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoImRldl9tb2RlIiwgZmFsc2UpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRpbWVvdXQiLCAzMCk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiY2FjaGVfcGF0aCIsICRHTE9CQUxTWydnQ21zJ10tPmNvbmZpZ1sncm9vdF9wYXRoJ10uJy90bXAvZXh0ZXJuYWxpemVyJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgic3R5bGVzaGVldF9leHRlbnNpb24iLCAnY3NzJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidGVtcGxhdGVfZXh0ZW5zaW9uIiwgJ2h0bWwnKTsKCiAgICAvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7CiAgfQoKICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICB9CgogIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgVXBncmFkZSgpCiAgICAgSWYgeW91ciBtb2R1bGUgdmVyc2lvbiBudW1iZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24KICAgICBudW1iZXIgb2YgdGhlIGluc3RhbGxlZCBtb2R1bGUsIHRoZSBDTVMgQWRtaW4gd2lsbCBnaXZlCiAgICAgeW91IGEgY2hhbmNlIHRvIHVwZ3JhZGUgdGhlIG1vZHVsZS4gVGhpcyBpcyB0aGUgZnVuY3Rpb24KICAgICB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHVwZ3JhZGUuCiAgICAgSWRlYWxseSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgaGFuZGxlIHVwZ3JhZGVzIGluY3JlbWVudGFsbHksCiAgICAgc28geW91IGNvdWxkIHVwZ3JhZGUgZnJvbSB2ZXJzaW9uIDAuMC4xIHRvIDEwLjUuNyB3aXRoCiAgICAgYSBzaW5nbGUgY2FsbC4gRm9yIGEgZ3JlYXQgZXhhbXBsZSBvZiB0aGlzLCBzZWUgdGhlIE5ld3MKICAgICBtb2R1bGUgaW4gdGhlIHN0YW5kYXJkIENNUyBpbnN0YWxsLgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBVcGdyYWRlKCRvbGR2ZXJzaW9uLCAkbmV3dmVyc2lvbikKICB7CiAgICAkY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CiAgICBzd2l0Y2goJGN1cnJlbnRfdmVyc2lvbikKICAgIHsKICAgICAgY2FzZSAiMS4wIjoKICAgICAgICAgYnJlYWs7CiAgICB9CiAgICAKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwogIH0KCiAgLyoqCiAgICogRXhwb3J0IGFueSBuZXdseSBjcmVhdGVkIHRlbXBsYXRlcyBpZiBkZXZfbW9kZSBpcyBvbgogICAqLyAgCiAgZnVuY3Rpb24gQWRkVGVtcGxhdGVQb3N0KCYkdGVtcGxhdGUpIHsKICAgIGlmKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJkZXZfbW9kZSIpKQogICAgICAkdGhpcy0+RXhwb3J0VGVtcGxhdGVzKCk7CiAgfQogIAogIC8qKgogICAqIEV4cG9ydCB0aGUgY2hhbmdlcyB0byB0ZW1wbGF0ZXMgaWYgZGV2X21vZGUgaXMgb24KICAgKi8gIAogIGZ1bmN0aW9uIEVkaXRUZW1wbGF0ZVBvc3QoJiR0ZW1wbGF0ZSkgewogICAgaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoImRldl9tb2RlIikpCiAgICAgICR0aGlzLT5FeHBvcnRUZW1wbGF0ZXMoKTsKICB9CgogIGZ1bmN0aW9uIFVuaW5zdGFsbCgpCiAgewogICAgJGRiID0gJiR0aGlzLT5jbXMtPmRiOwogICAgCiAgICAvLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCiAgICAkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignVGVtcGxhdGUgRXh0ZXJuYWxpemVyJyk7CiAgICAKICAgIC8vIHJlbW92ZSBwcmVmZXJlbmNlcwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoImRldl9tb2RlIik7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgidGltZW91dCIpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoImNhY2hlX3BhdGgiKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCJzdHlsZXNoZWV0X2V4dGVuc2lvbiIpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoInRlbXBsYXRlX2V4dGVuc2lvbiIpOwogICAgCiAgICAvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7CiAgfQoKICBmdW5jdGlvbiBEb0FjdGlvbigkYWN0aW9uLCAkaWQsICRwYXJhbXMsICRyZXR1cm5faWQ9LTEpCiAgewogICAgc3dpdGNoICgkYWN0aW9uKQogICAgewogICAgICBjYXNlICdkZWZhdWx0JzoKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnZGVmYXVsdGFkbWluJzoKICAgICAgICAvLyBvbmx5IGxldCBwZW9wbGUgYWNjZXNzIG1vZHVsZSBwcmVmZXJlbmNlcyBpZiB0aGV5IGhhdmUgcGVybWlzc2lvbgogICAgICAgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdUZW1wbGF0ZSBFeHRlcm5hbGl6ZXInKSkgewogICAgICAgICAgJHRoaXMtPkRpc3BsYXlBZG1pblByZWZzKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlICdzYXZlX2FkbWluX3ByZWZzJzoKICAgICAgICAvLyBvbmx5IGxldCBwZW9wbGUgc2F2ZSBtb2R1bGUgcHJlZmVyZW5jZXMgaWYgdGhleSBoYXZlIHBlcm1pc3Npb24KICAgICAgICBpZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVGVtcGxhdGUgRXh0ZXJuYWxpemVyJykpCiAgICAgICAgICAkdGhpcy0+U2F2ZUFkbWluUHJlZnMoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKTsKICAgICAgICBicmVhazsKICAgIH0KCiAgfQoKICBmdW5jdGlvbiBEaXNwbGF5QWRtaW5QcmVmcygkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlPScnKQogIHsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCiAgICAgICAgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ3NhdmVfYWRtaW5fcHJlZnMnLCAkcmV0dXJuaWQpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAogICAgICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsICdTdWJtaXQnKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9kZXZfbW9kZScsICR0aGlzLT5MYW5nKCd0aXRsZV9kZXZfbW9kZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGltZW91dCcsICR0aGlzLT5MYW5nKCd0aXRsZV90aW1lb3V0JykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jYWNoZV9wYXRoJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NhY2hlX3BhdGgnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX3RlbXBsYXRlX2V4dGVuc2lvbicsICR0aGlzLT5MYW5nKCd0aXRsZV90ZW1wbGF0ZV9leHRlbnNpb24nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX3N0eWxlc2hlZXRfZXh0ZW5zaW9uJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3N0eWxlc2hlZXRfZXh0ZW5zaW9uJykpOwogICAgCiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ21lc3NhZ2UnLCAkbWVzc2FnZSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kZXZfbW9kZScsICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAoJGlkLCAnZGV2X21vZGUnLCAKICAgICAgICAgICAgYXJyYXkoJ09mZic9PjAsICdPbic9PjEpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGV2X21vZGUnLCAnMScpKQogICAgICAgICk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RpbWVvdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3RpbWVvdXQnLAogICAgICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGltZW91dCcpKS4nICcuJHRoaXMtPkxhbmcoJ3RpdGxlX3RpbWVvdXRfdW5pdHMnKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jYWNoZV9wYXRoJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdjYWNoZV9wYXRoJywKICAgICAgICAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NhY2hlX3BhdGgnKSwgNDApKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RlbXBsYXRlX2V4dGVuc2lvbicsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAndGVtcGxhdGVfZXh0ZW5zaW9uJywKICAgICAgICAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RlbXBsYXRlX2V4dGVuc2lvbicpKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zdHlsZXNoZWV0X2V4dGVuc2lvbicsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnc3R5bGVzaGVldF9leHRlbnNpb24nLAogICAgICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc3R5bGVzaGVldF9leHRlbnNpb24nKSkpOwoKICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbnByZWZzLnRwbCcpOwogIH0KCiAgZnVuY3Rpb24gU2F2ZUFkbWluUHJlZnMoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogIHsKICAgICRvbGRtb2RlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rldl9tb2RlJyk7CiAgICAkbmV3bW9kZSA9ICRwYXJhbXNbJ2Rldl9tb2RlJ107CiAgICAKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZXZfbW9kZScsICRwYXJhbXNbJ2Rldl9tb2RlJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3RpbWVvdXQnLCAkcGFyYW1zWyd0aW1lb3V0J10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NhY2hlX3BhdGgnLCAkcGFyYW1zWydjYWNoZV9wYXRoJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3RlbXBsYXRlX2V4dGVuc2lvbicsICRwYXJhbXNbJ3RlbXBsYXRlX2V4dGVuc2lvbiddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzdHlsZXNoZWV0X2V4dGVuc2lvbicsICRwYXJhbXNbJ3N0eWxlc2hlZXRfZXh0ZW5zaW9uJ10pOwogICAgCiAgICAkbWVzc2FnZSA9ICR0aGlzLT5MYW5nKCdwcmVmc3VwZGF0ZWQnKTsKCiAgICBpZighJG9sZG1vZGUgJiYgJG5ld21vZGUpIHsKICAgICAgJHRoaXMtPkV4cG9ydFRlbXBsYXRlcygpOwogICAgICAkdGhpcy0+QXVkaXQoMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnZGV2X21vZGVfZW5hYmxlZCcpKTsKICAgICAgJG1lc3NhZ2UgLj0gJyAnLiR0aGlzLT5MYW5nKCdkZXZfbW9kZV9lbmFibGVkJyk7CiAgICB9IGVsc2VpZigkb2xkbW9kZSAmJiAhJG5ld21vZGUpIHsKICAgICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlQ2FjaGUoKTsKICAgICAgJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ2Rldl9tb2RlX2Rpc2FibGVkJykpOwogICAgICAkbWVzc2FnZSAuPSAnICcuJHRoaXMtPkxhbmcoJ2Rldl9tb2RlX2Rpc2FibGVkJyk7CiAgICB9CiAgICAKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUFkbWluUHJlZnMoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKTsKICB9CgogIGZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Vycm9yJywgJHRoaXMtPkxhbmcoJ2Vycm9yJykpOwogICAgaWYgKCRtZXNzYWdlICE9ICcnKQogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdtZXNzYWdlJywgJG1lc3NhZ2UpOwoKICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICB9CiAgCiAgZnVuY3Rpb24gZXNjYXBlRmlsZW5hbWUoJGZuYW1lKQogIHsKICAgIHJldHVybiBzdHJ0cigkZm5hbWUsICI6Lz9cXCIsICItLS0tIik7CiAgfQoKICAvKioKICAgKiBFeHBvcnQgdG8gZmlsZXMgYWxsIHRoZSB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIGZvdW5kIGluIHRoZSBkYXRhYmFzZQogICAqLwogIGZ1bmN0aW9uIEV4cG9ydFRlbXBsYXRlcygpCiAgewogICAgJGNhY2hlX3BhdGggPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2FjaGVfcGF0aCcpOwogICAgJHN0eWxlc2hlZXRfZXh0ZW5zaW9uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3N0eWxlc2hlZXRfZXh0ZW5zaW9uJyk7CiAgICAkdGVtcGxhdGVfZXh0ZW5zaW9uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RlbXBsYXRlX2V4dGVuc2lvbicpOwogICAgCiAgICAvL2NoZWNrIHRoYXQgdGhlIHNhdmUgcGF0aCBleGlzdHMgYW5kIGlmIG5vdCwgYXR0ZW1wdCB0byBjcmVhdGUgaXQKICAgIGlmKCFmaWxlX2V4aXN0cygkY2FjaGVfcGF0aCkpCiAgICAgIGlmKG1rZGlyKCRjYWNoZV9wYXRoKSkKICAgICAgICBjaG1vZCgkY2FjaGVfcGF0aCwgMDc3Nyk7CiAgICAgIGVsc2UgewogICAgICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCJVbmFibGUgdG8gZmluZCBvciBjcmVhdGUgY2FjaGUgcGF0aDogIi4kY2FjaGVfcGF0aCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAvL2NoZWNrIHRoYXQgdGhlIHNhdmUgcGF0aCBpcyB3cml0YWJsZQogICAgZWxzZWlmKCFpc193cml0YWJsZSgkY2FjaGVfcGF0aCkpIHsKICAgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoIlVuYWJsZSB0byB3cml0ZSB0byBjYWNoZSBwYXRoOiAiLiRjYWNoZV9wYXRoKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgCiAgICAvL3VwZGF0ZSB0aW1lc3RhbXAgb24gY2FjaGUgZGlyIHRvICdyZXNldCcgdGltZW91dAogICAgdG91Y2goJGNhY2hlX3BhdGgpOwogICAgCiAgICAvL2xvYWQgYWxsIHRoZSB0ZW1wbGF0ZXMgYW5kIHNhdmUgdGhlbSB0byBmaWxlcwogICAgJHRlbXBsYXRlcyA9IFRlbXBsYXRlT3BlcmF0aW9uczo6TG9hZFRlbXBsYXRlcygpOwogICAgZm9yZWFjaCgkdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSkgewogICAgICAkZm5hbWUgPSAkY2FjaGVfcGF0aC4nLycuJHRoaXMtPmVzY2FwZUZpbGVuYW1lKCR0ZW1wbGF0ZS0+bmFtZSkuJy4nLiR0ZW1wbGF0ZV9leHRlbnNpb247CiAgICAgICRmcCA9IGZvcGVuKCRmbmFtZSwgJ3cnKTsKICAgICAgLy93ZSBjb252ZXJ0IENSTEYgdG8gTEYgZm9yIHVuaXggY29tcGF0aWJpbGl0eQogICAgICBmd3JpdGUoJGZwLCBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICR0ZW1wbGF0ZS0+Y29udGVudCkpOwogICAgICBmY2xvc2UoJGZwKTsKICAgICAgLy9tYWtlIHN1cmUgdGVtcGxhdGUgZmlsZXMgYXJlIHdyaXRhYmxlCiAgICAgIGNobW9kKCRmbmFtZSwgMDY2Nik7CiAgICAgIC8vc2V0IHRoZSBtb2RpZmllZCBkYXRlIHRvIHRoZSB0ZW1wbGF0ZSBtb2RpZmllZCBkYXRlCiAgICAgIHRvdWNoKCRmbmFtZSwgJHRlbXBsYXRlLT5tb2RpZmllZF9kYXRlKTsKICAgIH0KICAgIAogICAgLy9sb2FkIGFsbCB0aGUgc3R5bGVzaGVldHMgYW5kIHNhdmUgdGhlbSB0byBmaWxlcwogICAgJHN0eWxlc2hlZXRzID0gU3R5bGVzaGVldE9wZXJhdGlvbnM6OkxvYWRTdHlsZXNoZWV0cygpOwogICAgZm9yZWFjaCgkc3R5bGVzaGVldHMgYXMgJHN0eWxlc2hlZXQpIHsKICAgICAgJGZuYW1lID0gJGNhY2hlX3BhdGguJy8nLiR0aGlzLT5lc2NhcGVGaWxlbmFtZSgkc3R5bGVzaGVldC0+bmFtZSkuJy4nLiRzdHlsZXNoZWV0X2V4dGVuc2lvbjsKICAgICAgJGZwID0gZm9wZW4oJGZuYW1lLCAndycpOwogICAgICAvL3dlIGNvbnZlcnQgQ1JMRiB0byBMRiBmb3IgdW5peCBjb21wYXRpYmlsaXR5CiAgICAgIGZ3cml0ZSgkZnAsIHN0cl9yZXBsYWNlKCJcclxuIiwgIlxuIiwgJHN0eWxlc2hlZXQtPnZhbHVlKSk7CiAgICAgIGZjbG9zZSgkZnApOwogICAgICAvL21ha2Ugc3VyZSBzdHlsZXNoZWV0IGZpbGVzIGFyZSB3cml0YWJsZQogICAgICBjaG1vZCgkZm5hbWUsIDA2NjYpOwogICAgICAvL3NldCB0aGUgZmlsZSBtb2RpZmllZCBkYXRlIHRvIHRoZSBzdHlsZXNoZWV0IG1vZGlmaWVkIGRhdGUKICAgICAgdG91Y2goJGZuYW1lLCAkc3R5bGVzaGVldC0+bW9kaWZpZWRfZGF0ZSk7CiAgICB9CiAgfQogIAogIC8qKgogICAqIEltcG9ydCBmcm9tIGZpbGVzIGFsbCB0aGUgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cyBmb3VuZCBpbiB0aGUgZGF0YWJhc2UKICAgKi8KICBmdW5jdGlvbiBJbXBvcnRUZW1wbGF0ZXMoKQogIHsKICAgICRjYWNoZV9wYXRoID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NhY2hlX3BhdGgnKTsKICAgICR0aW1lb3V0ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RpbWVvdXQnKTsKICAgICRzdHlsZXNoZWV0X2V4dGVuc2lvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzdHlsZXNoZWV0X2V4dGVuc2lvbicpOwogICAgJHRlbXBsYXRlX2V4dGVuc2lvbiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0ZW1wbGF0ZV9leHRlbnNpb24nKTsKICAgICRtb3N0X3JlY2VudF9lZGl0ID0gQGZpbGVtdGltZSgkY2FjaGVfcGF0aCk7CgogICAgLy9kb24ndCByYWlzZSBhbiBlcnJvciBhcyB0aGlzIGNvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZAogICAgaWYoIWZpbGVfZXhpc3RzKCRjYWNoZV9wYXRoKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgCiAgICAvL2xvYWQgYWxsIHRoZSB0ZW1wbGF0ZXMgZnJvbSB0aGUgZGF0YWJhc2UgYW5kIHVwZGF0ZSB0aGVtIGZyb20gdGhlIGZpbGVzCiAgICAkdGVtcGxhdGVzID0gVGVtcGxhdGVPcGVyYXRpb25zOjpMb2FkVGVtcGxhdGVzKCk7CiAgICBmb3JlYWNoKCR0ZW1wbGF0ZXMgYXMgJGtleSA9PiAkdGVtcGxhdGUpIHsKICAgICAgJGZuYW1lID0gJGNhY2hlX3BhdGguJy8nLiR0aGlzLT5lc2NhcGVGaWxlbmFtZSgkdGVtcGxhdGUtPm5hbWUpLicuJy4kdGVtcGxhdGVfZXh0ZW5zaW9uOwogICAgICAkZnRpbWUgPSBAZmlsZW10aW1lKCRmbmFtZSk7CiAgICAgICRtb3N0X3JlY2VudF9lZGl0ID0gbWF4KCRtb3N0X3JlY2VudF9lZGl0LCAkZnRpbWUpOwogICAgICAKICAgICAgLy9vbmx5IGxvYWQgdGhlIGZpbGUgaWYgaXQgaGFzIGJlZW4gbW9kaWZpZWQgKGV4aXN0ZW5jZSBpcyBpbXBsaWNpdCkKICAgICAgLy9hbmQgZmlsZXNpemUhPTAgCiAgICAgIGlmKCRmdGltZSA+ICR0ZW1wbGF0ZS0+bW9kaWZpZWRfZGF0ZSAmJiAoJGZzaXplID0gZmlsZXNpemUoJGZuYW1lKSkgIT0gMCkgewogICAgICAgICRmcCA9IGZvcGVuKCRmbmFtZSwgJ3InKTsKICAgICAgICAkdGVtcGxhdGVzWyRrZXldLT5jb250ZW50ID0gZnJlYWQoJGZwLCAkZnNpemUpOwogICAgICAgICR0ZW1wbGF0ZXNbJGtleV0tPlNhdmUoKTsKICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgfQogICAgfQogICAgCiAgICAvL2xvYWQgYWxsIHRoZSBzdHlsZXNoZWV0cyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgdXBkYXRlIHRoZW0gZnJvbSB0aGUgZmlsZXMKICAgICRzdHlsZXNoZWV0cyA9IFN0eWxlc2hlZXRPcGVyYXRpb25zOjpMb2FkU3R5bGVzaGVldHMoKTsKICAgIGZvcmVhY2goJHN0eWxlc2hlZXRzIGFzICRrZXkgPT4gJHN0eWxlc2hlZXQpIHsKICAgICAgJGZuYW1lID0gJGNhY2hlX3BhdGguJy8nLiR0aGlzLT5lc2NhcGVGaWxlbmFtZSgkc3R5bGVzaGVldC0+bmFtZSkuJy4nLiRzdHlsZXNoZWV0X2V4dGVuc2lvbjsKICAgICAgJGZ0aW1lID0gQGZpbGVtdGltZSgkZm5hbWUpOwogICAgICAkbW9zdF9yZWNlbnRfZWRpdCA9IG1heCgkbW9zdF9yZWNlbnRfZWRpdCwgJGZ0aW1lKTsKICAgICAgCiAgICAgIC8vb25seSBsb2FkIHRoZSBmaWxlIGlmIGl0IGhhcyBiZWVuIG1vZGlmaWVkIChleGlzdGVuY2UgaXMgaW1wbGljaXQpCiAgICAgIGlmKCRmdGltZSA+ICRzdHlsZXNoZWV0LT5tb2RpZmllZF9kYXRlICYmICgkZnNpemUgPSBmaWxlc2l6ZSgkZm5hbWUpKSAhPSAwKSB7CiAgICAgICAgJGZwID0gZm9wZW4oJGZuYW1lLCAncicpOwogICAgICAgICRzdHlsZXNoZWV0c1ska2V5XS0+dmFsdWUgPSBmcmVhZCgkZnAsICRmc2l6ZSk7CiAgICAgICAgJHN0eWxlc2hlZXRzWyRrZXldLT5TYXZlKCk7CiAgICAgICAgZmNsb3NlKCRmcCk7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy90dXJuIG9mZiBkZXZfbW9kZSBpZiB0aW1lb3V0IGlzIHJlYWNoZWQKICAgIGlmKCR0aW1lb3V0ICE9IDAgJiYgdGltZSgpIC0gJG1vc3RfcmVjZW50X2VkaXQgPiAkdGltZW91dCo2MCkgewogICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGV2X21vZGUnLCBmYWxzZSk7CiAgICAgICR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdkZXZfbW9kZV90aW1lZG91dCcpKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogRGVsZXRlIGFsbCBmaWxlcyBpbiB0aGUgY2FjaGVfcGF0aCBkaXJlY3RvcnkKICAgKi8KICBmdW5jdGlvbiBEZWxldGVUZW1wbGF0ZUNhY2hlKCkKICB7CiAgICAkY2FjaGVfcGF0aCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjYWNoZV9wYXRoJyk7CiAgICBpZighJGRwID0gb3BlbmRpcigkY2FjaGVfcGF0aCkpIHJldHVybiBmYWxzZTsKICAgIHdoaWxlKGZhbHNlICE9PSAoJGVudHJ5ID0gcmVhZGRpcigkZHApKSkgewogICAgICBpZigkZW50cnkgPT0gIi4iIHx8ICRlbnRyeSA9PSAiLi4iKSBjb250aW51ZTsKICAgICAgdW5saW5rKCRjYWNoZV9wYXRoLicvJy4kZW50cnkpOwogICAgfQogICAgY2xvc2VkaXIoJGRwKTsKICB9CiAgCn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+Cnskd2VsY29tZV90ZXh0fQ==]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0KeyRzdGFydGZvcm19Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9kZXZfbW9kZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZGV2X21vZGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV90aW1lb3V0fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90aW1lb3V0fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY2FjaGVfcGF0aH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2FjaGVfcGF0aH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3RlbXBsYXRlX2V4dGVuc2lvbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdGVtcGxhdGVfZXh0ZW5zaW9ufTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfc3R5bGVzaGVldF9leHRlbnNpb259OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3N0eWxlc2hlZXRfZXh0ZW5zaW9ufTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH08L3A+Cgk8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/plugin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbG91ZG5lc3N9PC9oMz4=]]></data>
	</file>
</module>
