<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (name,version,description*,help*,about*,requires*,file+)>
  <!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>
  <name>ThemeManager</name>
  <version>1.0.3</version>
  <help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyB5b3UgdG8gaW1wb3J0IGFuZCBleHBvcnQgdGVtcGxhdGVzIGFuZCB0aGVpciBhdHRhY2hlZCBzdHlsZXNoZWV0cyBhcyAidGhlbWVzIi4gIFRoaXMgYWxsb3dzIHlvdSB0byBzaGFyZSB5b3VyIGxvb2sgYW5kIGZlZWwgd2l0aCBvdGhlciBjbXMgdXNlcnMuPC9wCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBoYXMgbm8gZnJvbnQgZW5kIGludGVyZmFjZSwgb25seSBhbiBhZG1pbiBpbnRlcmZhY2UuICBJdCBhbGxvd3MgeW91IHRvIHNlbGVjdCBhbiBleGlzdGluZyAoYWN0aXZlKSB0ZW1wbGF0ZSwgYW5kIGNsaWNrICJFeHBvcnQiLiAgQW4gWE1MIGZpbGUgY29udGFpbmluZyB0aGUgdGVtcGxhdGUgYW5kIGl0cyBhdHRhY2hlZCBzdHlsZXNoZWV0cyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHNlbnQgeW91IHlvdSB2aWEgZG93bmxvYWQuPC9wPgo8cD5BcyB3ZWxsLCB0aGUgb3Bwb3NpdGUgZnVuY3Rpb25hbGl0eSBleGlzdHMsIHlvdSBtYXkgdXBsb2FkIGEgdGhlbWUgZmlsZSAoeG1sIGZvcm1hdCkgYW5kIGhhdmUgdGhlIGVuY2xvc2VkIHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMgYXV0b21hdGljYWxseSBpbXBvcnRlZCBpbnRvIHlvdXIgY21zbXMgaW5zdGFsbGF0aW9uLjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCB0aGUgbW9kdWxlIGhvbWVwYWdlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmciPmRldi5jbXNtYWRlc2ltcGxlLm9yZzwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICAKPC91bD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDUsIFJvYmVydCBDYW1wYmVsbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSI+Jmx0O2NhbGd1eTEwMDBAaG90bWFpbC5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgo8aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48L3VsPg==</help>
  <about>PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC4zPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgo8bGk+PHA+VmVyc2lvbiAxLjAuMy4gSmFudWFyeSwgMjAwNjwvcD4KPHA+Tm93IHN1cHBvcnRzIG11bHRpcGxlIHRlbXBsYXRlcyBpbiBvbmUgdGhlbWUsIHJlY3Vyc2l2ZSBkaXJlY3RvcnkgY3JlYXRpb24sIGFuZCBiYXNlNjRfZW5jb2RlcyBvZiBhbGwgc3R5bGVzaGVldHMgYW5kIHRlbXBsYXRlczwvcD4KPC9saT4KPGxpPjxwPlZlcnNpb24gMS4wLjIuIERlY2VtYmVyLCAyMDA1PC9wPgo8cD5Ob3cgaGFuZGxlbHMgaW5jbHVkZWQgaW1hZ2VzIGFuZCBqYXZhc2NyaXB0IGluIGJvdGggdGhlIHN0eWxlc2hlZXRzIGFuZCB0aGUgdGVtcGxhdGVzLiAgV2hlbiByZXN0b3JpbmcgZmlsZXMgYXJlIHJlc3RvcmVkIHRvIGEgZGlyZWN0b3J5IGNyZWF0ZWQgdW5kZXIgdXBsb2Fkcy90aGVtZW5hbWUuPC9wPjwvbGk+CjxsaT5WZXJzaW9uIDEuMC4xLiBEZWNlbWJlciwgMjAwNSAtIEZpeGVkIGRlcGVuZGVuY2llcywgaGVscCwgYW5kIGdlbmVyYWwgY2xlYW51cC48L2xpPgo8bGk+VmVyc2lvbiAxLjAuMC4gMzEgTm92ZW1iZXIsIDIwMDUgLSBJbml0aWFsIFJlbGVhc2UuPC9saT4KPC91bD48YnIgLz4=</about>
  <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.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKJGxhbmdbJ2FjdGl2ZSddID0gJ0FjdGl2ZSc7CiRsYW5nWydkZWZhdWx0J10gPSAnRGVmYXVsdCc7CiRsYW5nWydwcm9tcHRfdGhlbWVuYW1lJ10gPSAnVGhlbWUgTmFtZTonOwokbGFuZ1snZXJyb3Jfbm9maWxlc3VwbG9hZGVkJ10gPSAnTm8gZmlsZXMgd2VyZSB1cGxvYWRlZC4gTWFrZSBzdXJlIHlvdXIgZm9ybSB0YWdcJ3MgZW5jdHlwZSB3YXMgc2V0IHRvIG11bHRpcGFydC9mb3JtLWRhdGEgYW5kIHRoYXQgdGhlIHJpZ2h0IGZpZWxkIGlzIGJlaW5nIGNoZWNrZWQgZm9yIHRoZSB1cGxvYWRlZCBmaWxlLic7CiRsYW5nWydlcnJvcl90ZW1wbGF0ZWV4aXN0cyddID0gJ0EgdGVtcGxhdGUgd2l0aCB0aGUgbmFtZSAiJXMiIGFscmVhZHkgZXhpc3RzJzsKJGxhbmdbJ2Vycm9yX3N0eWxlc2hlZXRleGlzdHMnXSA9ICdBIHN0eWxlc2hlZXQgd2l0aCB0aGUgbmFtZSAiJXMiIGFscmVhZHkgZXhpc3RzJzsKJGxhbmdbJ2Vycm9yX25vc3R5bGVzaGVldHMnXSA9ICdObyBzdHlsZXNoZWV0cyB3ZXJlIGRldGVjdGVkIGluIHRoaXMgdGhlbWUnOwokbGFuZ1snZXJyb3JfY291bGRub3RjcmVhdGV0ZW1wbGF0ZSddID0gJ0NvdWxkIG5vdCBjcmVhdGUgdGhlIHRlbXBsYXRlIGRlZmluaXRpb24nOwokbGFuZ1snZXJyb3JfY291bGRub3Rhc3NvY2NzcyddID0gJ1Byb2JsZW0gYXNzb2NpYXRpbmcgc3R5bGVzaGVldHMgd2l0aCB0aGUgdGVtcGxhdGUnOwokbGFuZ1snaW1wb3J0J10gPSAnSW1wb3J0JzsKJGxhbmdbJ3VwbG9hZCddID0gJ1VwbG9hZCBUaGVtZSc7CiRsYW5nWydpZCddID0gJ0lkJzsKJGxhbmdbJ25hbWUnXSA9ICdOYW1lJzsKJGxhbmdbJ2FjdGl2ZSddID0gJ0FjdGl2ZSc7CiRsYW5nWydkZWZhdWx0J10gPSAnRGVmYXVsdCc7CiRsYW5nWydleHBvcnQnXSA9ICdFeHBvcnQnOwokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1RoZW1lIG1hbmFnZXInOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdCZSBzdXJlIHRvIHNldCAiTWFuYWdlIFRoZW1lcyIgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnIkN1cnNlcyEgRm9pbGVkIEFnYWluISInOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0EgbW9kdWxlIHRvIGFsbG93IGltcG9ydGluZyBhbmQgZXhwb3J0aW5nIG9mIGNvbnRlbnQgdGhlbWVzICh0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzKSc7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+CjxsaT48cD5WZXJzaW9uIDEuMC4zLiBKYW51YXJ5LCAyMDA2PC9wPgo8cD5Ob3cgc3VwcG9ydHMgbXVsdGlwbGUgdGVtcGxhdGVzIGluIG9uZSB0aGVtZSwgcmVjdXJzaXZlIGRpcmVjdG9yeSBjcmVhdGlvbiwgYW5kIGJhc2U2NF9lbmNvZGVzIG9mIGFsbCBzdHlsZXNoZWV0cyBhbmQgdGVtcGxhdGVzPC9wPgo8L2xpPgo8bGk+PHA+VmVyc2lvbiAxLjAuMi4gRGVjZW1iZXIsIDIwMDU8L3A+CjxwPk5vdyBoYW5kbGVscyBpbmNsdWRlZCBpbWFnZXMgYW5kIGphdmFzY3JpcHQgaW4gYm90aCB0aGUgc3R5bGVzaGVldHMgYW5kIHRoZSB0ZW1wbGF0ZXMuICBXaGVuIHJlc3RvcmluZyBmaWxlcyBhcmUgcmVzdG9yZWQgdG8gYSBkaXJlY3RvcnkgY3JlYXRlZCB1bmRlciB1cGxvYWRzL3RoZW1lbmFtZS48L3A+PC9saT4KPGxpPlZlcnNpb24gMS4wLjEuIERlY2VtYmVyLCAyMDA1IC0gRml4ZWQgZGVwZW5kZW5jaWVzLCBoZWxwLCBhbmQgZ2VuZXJhbCBjbGVhbnVwLjwvbGk+CjxsaT5WZXJzaW9uIDEuMC4wLiAzMSBOb3ZlbWJlciwgMjAwNSAtIEluaXRpYWwgUmVsZWFzZS48L2xpPgo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyB5b3UgdG8gaW1wb3J0IGFuZCBleHBvcnQgdGVtcGxhdGVzIGFuZCB0aGVpciBhdHRhY2hlZCBzdHlsZXNoZWV0cyBhcyAidGhlbWVzIi4gIFRoaXMgYWxsb3dzIHlvdSB0byBzaGFyZSB5b3VyIGxvb2sgYW5kIGZlZWwgd2l0aCBvdGhlciBjbXMgdXNlcnMuPC9wCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBoYXMgbm8gZnJvbnQgZW5kIGludGVyZmFjZSwgb25seSBhbiBhZG1pbiBpbnRlcmZhY2UuICBJdCBhbGxvd3MgeW91IHRvIHNlbGVjdCBhbiBleGlzdGluZyAoYWN0aXZlKSB0ZW1wbGF0ZSwgYW5kIGNsaWNrICJFeHBvcnQiLiAgQW4gWE1MIGZpbGUgY29udGFpbmluZyB0aGUgdGVtcGxhdGUgYW5kIGl0cyBhdHRhY2hlZCBzdHlsZXNoZWV0cyB3aWxsIGJlIGNyZWF0ZWQgYW5kIHNlbnQgeW91IHlvdSB2aWEgZG93bmxvYWQuPC9wPgo8cD5BcyB3ZWxsLCB0aGUgb3Bwb3NpdGUgZnVuY3Rpb25hbGl0eSBleGlzdHMsIHlvdSBtYXkgdXBsb2FkIGEgdGhlbWUgZmlsZSAoeG1sIGZvcm1hdCkgYW5kIGhhdmUgdGhlIGVuY2xvc2VkIHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMgYXV0b21hdGljYWxseSBpbXBvcnRlZCBpbnRvIHlvdXIgY21zbXMgaW5zdGFsbGF0aW9uLjwvcD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCB0aGUgbW9kdWxlIGhvbWVwYWdlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmciPmRldi5jbXNtYWRlc2ltcGxlLm9yZzwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICAKPC91bD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDUsIFJvYmVydCBDYW1wYmVsbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSI+Jmx0O2NhbGd1eTEwMDBAaG90bWFpbC5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgonOwo/Pgo=]]></data>
  </file>
  <file>
    <filename>/templates/</filename>
    <isdir>1</isdir>
  </file>
  <file>
    <filename>/templates/error.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
  </file>
  <file>
    <filename>/templates/export.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[eyRzdGFydGZvcm19CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KCTx0aGVhZD4KCQk8dHI+CgkJCTx0aD57JGlkdGV4dH08L3RoPgoJCQk8dGg+eyRuYW1ldGV4dH08L3RoPgoJCQk8dGg+eyRhY3RpdmV0ZXh0fTwvdGg+CgkJCTx0aD57JGRlZmF1bHR0ZXh0fTwvdGg+CgkJCTx0aD57JGV4cG9ydHRleHR9PC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgoJCQk8dGQ+eyRlbnRyeS0+aWR9PC90ZD4KCQkJPHRkPnskZW50cnktPm5hbWV9PC90ZD4KCQkJPHRkPnskZW50cnktPmFjdGl2ZX08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVmYXVsdH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+c2VsZWN0fTwvdGQ+CgkJPC90cj4KCXsvZm9yZWFjaH0KCTwvdGJvZHk+CjwvdGFibGU+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF90aGVtZW5hbWV9PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdGhlbWVuYW1lfTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRoaWRkZW59eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgo8L2Rpdj4Key9pZn0KeyRlbmRmb3JtfQo=]]></data>
  </file>
  <file>
    <filename>/templates/import.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[eyRzdGFydGZvcm19CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9icm93c2V9PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYnJvd3NlfTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRoaWRkZW59eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgo8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
  </file>
  <file>
    <filename>/ThemeManager.module.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFRoZW1lTWFuYWdlciAtIGEgbW9kdWxlIGZvciBpbXBvcnRpbmcgYW5kIGV4cG9ydGluZyB0ZW1wbGF0ZQojICAgYW5kIHN0eWxlc2hlZXQgcGFja2FnZXMuCiMgVmVyc2lvbjogMS4wLjMsIENhbGd1eTEwMDAKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKZnVuY3Rpb24gZ2V0X3VybHMoJHN0cmluZywgJHN0cmljdD10cnVlKSB7CiAgJHR5cGVzID0gYXJyYXkoImhyZWYiLCAic3JjIiwgInVybCIpOwogIHdoaWxlKGxpc3QoLCR0eXBlKSA9IGVhY2goJHR5cGVzKSkgewogICAgJGlubmVyVCA9ICRzdHJpY3Q/J1thLXowLTk6Pz0mQC8uXy1dKz8nOicuKz8nOwogICAgcHJlZ19tYXRjaF9hbGwgKCJ8JHR5cGVcPShbXCInYF0pKCIuJGlubmVyVC4iKVxcMXxpIiwgJHN0cmluZywgJG1hdGNoZXMpOwogICAgJHJldFskdHlwZV0gPSAkbWF0Y2hlc1syXTsKICB9CiAgCiAgcmV0dXJuICRyZXQ7Cn07CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBUaGVtZU1hbmFnZXIgZXh0ZW5kcyBDTVNNb2R1bGUKewogIHZhciAkZHRkID0gJwo8IURPQ1RZUEUgdGhlbWUgWwogIDwhRUxFTUVOVCB0aGVtZSAobmFtZSx0ZW1wbGF0ZSssc3R5bGVzaGVldCsscmVmZXJlbmNlKik+CiAgPCFFTEVNRU5UIG5hbWUgKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCB0ZW1wbGF0ZSAodG5hbWUsdGVuY29kaW5nLHRkYXRhKT4KICA8IUVMRU1FTlQgdG5hbWUgKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCB0ZW5jb2RpbmcgKCNQQ0RBVEEpPgogIDwhRUxFTUVOVCB0ZGF0YSAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIHN0eWxlc2hlZXQgKGNzc25hbWUsY3NzbWVkaWF0eXBlLGNzc2VuY29kaW5nLGNzc2RhdGEpPgogIDwhRUxFTUVOVCBjc3NuYW1lICgjUENEQVRBKT4KICA8IUVMRU1FTlQgY3NzbWVkaWF0eXBlICgjUENEQVRBKT4KICA8IUVMRU1FTlQgY3NzZGF0YSAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIHJlZmVyZW5jZSAocmVmbmFtZSxyZWZlbmNvZGVkLHJlZmxvY2F0aW9uLHJlZmRhdGEpPgogIDwhRUxFTUVOVCByZWZuYW1lICgjUENEQVRBKT4KICA8IUVMRU1FTlQgcmVmZW5jb2RlZCAoI1BDREFUQSk+CiAgPCFFTEVNRU5UIHJlZmxvY2F0aW9uICgjUENEQVRBKT4KICA8IUVMRU1FTlQgcmVmZGF0YSAoI1BDREFUQSk+Cl0+JzsKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0TmFtZSgpCiAgewogICAgcmV0dXJuICdUaGVtZU1hbmFnZXInOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEZyaWVuZGx5TmFtZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogIH0KCgkKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRWZXJzaW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzEuMC4zJzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNaW5pbXVtQ1ZTVmVyc2lvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIHsKICAgIHJldHVybiAiMC4xMSI7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0SGVscCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0SGVscCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBdXRob3IoKQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMCc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yRW1haWwoKQogICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIE1vZHVsZQogICBBZG1pbiBpZiB5b3UgY2xpY2sgb24gdGhlICJBYm91dCIgbGluay4gSXQgaGVscHMgdXNlcnMKICAgb2YgeW91ciBtb2R1bGUgZ2V0IGluIHRvdWNoIHdpdGggeW91IHRvIHNlbmQgYnVnIHJlcG9ydHMsCiAgIHF1ZXN0aW9ucywgY2FzZXMgb2YgYmVlciwgYW5kL29yIGxhcmdlIHN1bXMgb2YgbW9uZXkuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMEBob3RtYWlsLmNvbSc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0Q2hhbmdlTG9nKCkKICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBtb2R1bGUKICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSBBYm91dCBsaW5rLiBJdCBoZWxwcyB1c2VycwogICBmaWd1cmUgb3V0IHdoYXQncyBjaGFuZ2VkIGJldHdlZW4gcmVsZWFzZXMuCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIElzUGx1Z2luTW9kdWxlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEhhc0FkbWluKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QWRtaW5TZWN0aW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQogIHsKICAgIHJldHVybiAnbGF5b3V0JzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgVGhlbWVzJyk7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXREZXBlbmRlbmNpZXMoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpCiAgewogICAgcmV0dXJuIGFycmF5KCk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSW5zdGFsbCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSW5zdGFsbCgpCiAgewogICAgLy8gdGhpcyBtb2R1bGUgZG9lcyBub3QgaGF2ZSBhbnkgdGFibGVzIG9mIGl0cyBvd24KCiAgICAvLyBjcmVhdGUgYSBwZXJtaXNzaW9uCiAgICAkdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTWFuYWdlIFRoZW1lcycsICdNYW5hZ2UgVGhlbWVzJyk7CiAgICAgICAgCiAgICAvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVwZ3JhZGUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFVwZ3JhZGUoJG9sZHZlcnNpb24sICRuZXd2ZXJzaW9uKQogIHsKICAgIC8vIG5vdGhpbmcgdG8gZG8gaGVyZSwgeWV0CgkJCiAgICAvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndXBncmFkZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKICB9CgkKCQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVuaW5zdGFsbCgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVW5pbnN0YWxsKCkKICB7CiAgICAvLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCiAgICAkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTWFuYWdlIFRoZW1lcycpOwoKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBEb0FjdGlvbigkYWN0aW9uLCAkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gRG9BY3Rpb24oJGFjdGlvbiwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkPS0xKQogIHsKICAgIHN3aXRjaCAoJGFjdGlvbikKICAgICAgewogICAgICBjYXNlICdkZWZhdWx0JzoKCXsKCSAgLy8gbW9kdWxlIGhhcyBubyB1c2VyIG91dHB1dAoJICBicmVhazsKCX0KICAgICAgY2FzZSAnZGVmYXVsdGFkbWluJzoKCXsKCSAgLy8gb25seSBsZXQgcGVvcGxlIGFjY2VzcyBtb2R1bGUgcHJlZmVyZW5jZXMgaWYgdGhleSBoYXZlIHBlcm1pc3Npb24KCSAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBUaGVtZXMnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+RGlzcGxheUFkbWluUGFuZWwoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKTsKCSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ2V4cG9ydHRoZW1lJzoKCXsKCSAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBUaGVtZXMnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+RG9FeHBvcnRUaGVtZSgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQpOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KICAgICAgY2FzZSAnaW1wb3J0dGhlbWUnOgoJewoJICBpZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIFRoZW1lcycpKQoJICAgIHsKCSAgICAgICR0aGlzLT5Eb0ltcG9ydFRoZW1lKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICB9CgogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9jbGVhbnVwUmVmZXJlbmNlcwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9jbGVhbnVwUmVmZXJlbmNlcyggJHByZWZpeCwgJHJlZmVyZW5jZXMsICYkaW5wdXQgKQogIHsKICAgICRkYXRhID0gJGlucHV0OwogICAgZm9yZWFjaCggJHJlZmVyZW5jZXMgYXMgJHJlZiApCiAgICAgIHsKCSRkYXRhID0gcHJlZ19yZXBsYWNlKCAnfCcuJHJlZlsnbG9jYXRpb24nXS4nfCcsICRwcmVmaXguIi8iLiRyZWZbJ2xvY2F0aW9uJ10sCgkJCSAgICAgICRkYXRhICk7CglpZiggJGRhdGEgPT0gJycgKQoJICB7CgkgICAgcmV0dXJuIGZhbHNlOwoJICB9CiAgICAgIH0KICAgICRpbnB1dCA9ICRkYXRhOwogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX2V4dHJhY3RIVE1MSW1hZ2VzCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX2V4dHJhY3RUZW1wbGF0ZUltYWdlcygkdGVtcGxhdGUpCiAgewogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAkdXJscyA9IGdldF91cmxzKCR0ZW1wbGF0ZS0+Y29udGVudCk7CiAgICAvLyB3ZSdyZSBvbmx5IGNvbmNlcm5lZCBhYm91dCB0aGUgc3JjIHVybHMKICAgIGZvcmVhY2goICR1cmxzWydzcmMnXSBhcyAkc3JjICkKICAgICAgewoJLy8gaWYgaXQncyBhbiBleHRlcm5hbCBsaW5rIHdlIGlnbm9yZSBpdAoJLy8gaWYgaXQncyBhbiBpbnRlcm5hbCBsaW5rLCB3ZSBhZGQgaXQKCWlmKCAhcHJlZ19tYXRjaCgnL15odHRwXDovJywkc3JjKSApIAoJICB7CgkgICAgJHJlc3VsdFtdID0gJHNyYzsKCSAgfQogICAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX2V4dHJhY3RTdHlsZXNoZWV0SW1hZ2VzCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX2V4dHJhY3RTdHlsZXNoZWV0SW1hZ2VzKCRzdHlsZXNoZWV0KQogIHsKICAgICRyZWdleD0nLy4qdXJsXHMqXChcIiguKilcIlwpL2knOwogICAgcHJlZ19tYXRjaF9hbGwoICRyZWdleCwgJHN0eWxlc2hlZXQtPnZhbHVlLCAkbWF0Y2hlcyApOwogICAgLy8gJG1hdGNoZXNbMV0gaXMgYWxsIGltbXBvcnRhbnQKICAgIC8vIG5vdyBzdHJpcCBvdXQgYW55IHRoYXQgaGF2ZSBeaHR0cCBpbiB0aGVtCiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRtYXRjaGVzWzFdIGFzICRtYXRjaCApCiAgICAgIHsKCWlmKCAhcHJlZ19tYXRjaCggJy9eaHR0cFw6LycsICRtYXRjaCApICkKCSAgewoJICAgICRyZXN1bHRbXSA9ICRtYXRjaDsKCSAgfQogICAgICB9CgogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX3NhdmVFbmNvZGVkRmlsZQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9zYXZlRW5jb2RlZEZpbGUoICRwcmVmaXgsICRuYW1lLCAmJGxvY2F0aW9uLCAkZW5jb2RlZCwgJGRhdGEgKQogIHsKICAgIC8vIGNsZWFuIHVwIHRoZSBsb2NhdGlvbgogICAgaWYoIHN1YnN0cigkbG9jYXRpb24sMCwxKSA9PSAnLycgKQogICAgICB7CgkkbG9jYXRpb24gPSBzdWJzdHIoJGxvY2F0aW9uLDEpOwogICAgICB9CiAgICAKICAgIGlmKCAkZW5jb2RlZCApCiAgICAgIHsKCSRkYXRhID0gYmFzZTY0X2RlY29kZSggJGRhdGEgKTsKICAgICAgfQoKICAgIC8vIHRyYW5zbGF0ZSBzbGFzaGVzIGlmIHdlIGhhdmUgdG8KICAgICRuZXdsb2MgPSBwcmVnX3JlcGxhY2UoICd8XC98JywgRElSRUNUT1JZX1NFUEFSQVRPUiwgJGxvY2F0aW9uICk7CgogICAgJGRpciA9ICRwcmVmaXguRElSRUNUT1JZX1NFUEFSQVRPUi5kaXJuYW1lKCAkbG9jYXRpb24gKTsKICAgIGVjaG8gIkRFQlVHIGRpciA9ICRkaXI8YnIvPiI7CiAgICBlY2hvICJERUJVRyBuZXdsb2MgPSAkbmV3bG9jPGJyLz4iOwogICAgaWYoICFmaWxlX2V4aXN0cyggJGRpciApICkKICAgICAgewoJJHRoaXMtPl9ta2RpcnIoICRkaXIgKTsKCWlmKCAhZmlsZV9leGlzdHMoICRkaXIgKSApCgkgIHsKCSAgICByZXR1cm4gMDsKCSAgfQogICAgICB9CgogICAgLy8gYW5kIHB1dCBpdCBvdXQgdGhlcmUKICAgIGdsb2JhbCAkZ0NtczsKICAgICRmbiA9ICRwcmVmaXguRElSRUNUT1JZX1NFUEFSQVRPUi4kbmV3bG9jOwogICAgJGZwID0gZm9wZW4oICRmbiwgInciICk7CiAgICBpZiggISRmcCApCiAgICAgIHsKCXJldHVybiAwOwogICAgICB9CiAgICBmd3JpdGUoICRmcCwgJGRhdGEgKTsKICAgIGZjbG9zZSggJGZwICk7CiAgICByZXR1cm4gMTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBEaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gRGlzcGxheUVycm9yUGFnZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlPScnKQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CiAgICBpZiAoJG1lc3NhZ2UgIT0gJycpCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRtZXNzYWdlKTsKICAgICAgfQoKICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBEaXNwbGF5QWRtaW5QYW5lbCgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIERpc3BsYXlBZG1pblBhbmVsKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2V4cG9ydCcsICR0aGlzLT5MYW5nKCdleHBvcnQnKSk7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2ltcG9ydCcsICR0aGlzLT5MYW5nKCdpbXBvcnQnKSk7CiAgICBlY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgogICAgZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgogICAgLy8gdGhlIGV4cG9ydCB0YWIKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdleHBvcnQnKTsKICAgICRhbGx0ZW1wbGF0ZXMgPSBUZW1wbGF0ZU9wZXJhdGlvbnM6OkxvYWRUZW1wbGF0ZXMoKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2V4cG9ydHRoZW1lJywkcmV0dXJuaWQpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lkdGV4dCcsICR0aGlzLT5MYW5nKCdpZCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbmFtZXRleHQnLCAkdGhpcy0+TGFuZygnbmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignYWN0aXZldGV4dCcsICR0aGlzLT5MYW5nKCdhY3RpdmUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RlZmF1bHR0ZXh0JywgJHRoaXMtPkxhbmcoJ2RlZmF1bHQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2V4cG9ydHRleHQnLCAkdGhpcy0+TGFuZygnZXhwb3J0JykpOwoKICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIHRlbXBsYXRlcwogICAgZ2xvYmFsICRnQ21zOwogICAgJHJvd2NsYXNzID0gJ3JvdzEnOwogICAgJHJvd2FycmF5ID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRhbGx0ZW1wbGF0ZXMgYXMgJHRlbXBsICkKICAgICAgewoJJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoJJG9uZXJvdy0+aWQgPSAkdGVtcGwtPmlkOwoJJG9uZXJvdy0+bmFtZSA9ICR0ZW1wbC0+bmFtZTsKCWlmKCAkdGVtcGwtPmFjdGl2ZSApCgkgIHsKCSAgICAkb25lcm93LT5hY3RpdmUgPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3RydWUuZ2lmJyk7CgkgIH0KCWlmKCAkdGVtcGwtPmRlZmF1bHQgKQoJICB7CgkgICAgJG9uZXJvdy0+ZGVmYXVsdCA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnKTsKCSAgfQoJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CglpZiggJHRlbXBsLT5hY3RpdmUgKQoJICB7CgkgICAgJG9uZXJvdy0+c2VsZWN0ID0gCgkgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCggJGlkLCAnZXhwb3J0Jy4kb25lcm93LT5pZCwgJG9uZXJvdy0+aWQgKTsKCSAgfQoJYXJyYXlfcHVzaCggJHJvd2FycmF5LCAkb25lcm93ICk7CgkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcyA9ICJyb3cyIiA6ICRyb3djbGFzcyA9ICJyb3cxIik7CiAgICAgIH0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2l0ZW1zJywgJHJvd2FycmF5KTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2l0ZW1jb3VudCcsIGNvdW50KCRyb3dhcnJheSkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3RoZW1lbmFtZScsCgkJCSAgJHRoaXMtPkxhbmcoJ3Byb21wdF90aGVtZW5hbWUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RoZW1lbmFtZScsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X3RoZW1lbmFtZScsJycsMjAsMjApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXQnLCR0aGlzLT5MYW5nKCdleHBvcnQnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywKCQkJICAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZXhwb3J0LnRwbCcpOwogICAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogICAgLy8gdGhlIGltcG9ydCB0YWIKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdpbXBvcnQnKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKCQkJICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnaW1wb3J0dGhlbWUnLCRyZXR1cm5pZCwncG9zdCcsICdtdWx0aXBhcnQvZm9ybS1kYXRhJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfYnJvd3NlJywgJHRoaXMtPkxhbmcoJ3VwbG9hZCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfYnJvd3NlJywKCQkJICAkdGhpcy0+Q3JlYXRlRmlsZVVwbG9hZElucHV0KCRpZCwnaW5wdXRfYnJvd3NlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXQnLAoJCQkJCQkgICAkdGhpcy0+TGFuZygnaW1wb3J0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2ltcG9ydC50cGwnKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwogIH0KCgogIGZ1bmN0aW9uIERvRXhwb3J0VGhlbWUoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKCgovLyAgICAgaWYoICFpc3NldCggJHBhcmFtc1snZXhwb3J0J10gKSApCi8vICAgICAgIHsKLy8gCSR0aGlzLT5SZWRpcmVjdCggJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkICk7Ci8vIAlyZXR1cm47Ci8vICAgICAgIH0KCiAgICAkdGhlbWVuYW1lID0gdHJpbSgkcGFyYW1zWydpbnB1dF90aGVtZW5hbWUnXSApOwogICAgaWYoICR0aGVtZW5hbWUgPT0gJycgKQogICAgICB7CgkkdGhlbWVuYW1lID0gJ3RoZW1lJzsKICAgICAgfQogICAgJHRoZW1lbmFtZSA9IHN0cl9yZXBsYWNlKCcgJywnXycsJHRoZW1lbmFtZSk7CgogICAgLy8gYW5kIGRvIG91ciB0aGluZy4KICAgICRvdXRwdXQgPSAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pic7CiAgICAkb3V0cHV0IC49ICR0aGlzLT5kdGQ7CiAgICAkb3V0cHV0IC49ICI8dGhlbWU+XG4iOwogICAgJG91dHB1dCAuPSAiICA8bmFtZT4iLiR0aGVtZW5hbWUuIjwvbmFtZT5cbiI7CgogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSApCiAgICAgIHsKCWlmKCAhcHJlZ19tYXRjaCggJy9eZXhwb3J0LycsICRrZXkgKSApCgkgIHsKCSAgICBjb250aW51ZTsKCSAgfQoKCSRpZCA9IHN1YnN0ciggJGtleSwgc3RybGVuKCdleHBvcnQnKSApOwoKCS8vIHdlIGFyZSBleHBvcnRpbmcgYSB0ZW1wbGF0ZQoJLy8gZ2V0IHRoZSB0ZW1wbGF0ZQoJJHRlbXBsYXRlID0gVGVtcGxhdGVPcGVyYXRpb25zOjpMb2FkVGVtcGxhdGVCeUlEKCAkaWQgKTsKCWlmKCAhJHRlbXBsYXRlICkKCSAgewoJICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl90ZW1wbGF0ZW5vdGZvdW5kJykpOwoJICAgIHJldHVybjsKCSAgfQoJCgkvLyBwYXJzZSB0aHJvdWdoIHRoZSBodG1sIGFuZCBleHRyYWN0IHRoZSBpbWFnZSB0YWdzCgkvLyBhbmQgaW1hZ2VzLCBldGMuCgkkdXJscyA9ICR0aGlzLT5fZXh0cmFjdFRlbXBsYXRlSW1hZ2VzKCR0ZW1wbGF0ZSk7CgkKCS8vIGdldCBhbGwgb2YgdGhlIHN0eWxlc2hlZXRzIGZvciB0aGF0IHRlbXBsYXRlCgkkc3R5bGVzaGVldHMgPSBTdHlsZXNoZWV0T3BlcmF0aW9uczo6R2V0VGVtcGxhdGVBc3NvY2lhdGVkU3R5bGVzaGVldHMoICRpZCApOwoJZm9yZWFjaCggJHN0eWxlc2hlZXRzIGFzICRjc3NpZCApCgkgIHsKCSAgICAkY3NzID0gU3R5bGVzaGVldE9wZXJhdGlvbnM6OkxvYWRTdHlsZXNoZWV0QnlJRCggJGNzc2lkICk7CgkgICAgJGNzc3VybHMgPSAkdGhpcy0+X2V4dHJhY3RTdHlsZXNoZWV0SW1hZ2VzKCRjc3MpOwoJICAgICR1cmxzID0gYXJyYXlfbWVyZ2UoICR1cmxzLCAkY3NzdXJscyApOwoJICB9CgkKCSRvdXRwdXQgLj0gIiAgPHRlbXBsYXRlPlxuIjsKCSRvdXRwdXQgLj0gIiAgICA8dG5hbWU+Ii4kdGVtcGxhdGUtPm5hbWUuIjwvdG5hbWU+XG4iOwoJJG91dHB1dCAuPSAiICAgIDx0ZW5jb2Rpbmc+Ii4kdGVtcGxhdGUtPmVuY29kaW5nLiI8L3RlbmNvZGluZz5cbiI7Cgkkb3V0cHV0IC49ICIgICAgPHRkYXRhPjwhW0NEQVRBWyIuYmFzZTY0X2VuY29kZSgkdGVtcGxhdGUtPmNvbnRlbnQpLiJdXT48L3RkYXRhPlxuIjsKCSRvdXRwdXQgLj0gIiAgPC90ZW1wbGF0ZT5cbiI7CglpZiggJHRlbXBsYXRlLT5zdHlsZXNoZWV0ICE9ICcnICkgCgkgIHsKCSAgICAkb3V0cHV0IC49ICIgIDxzdHlsZXNoZWV0PlxuIjsKCSAgICAkb3V0cHV0IC49ICIgICAgPGNzc25hbWU+Ii4kdGVtcGxhdGUtPm5hbWUuIiAtQXR0YWNoZWQtPC9jc3NuYW1lPlxuIjsKCSAgICAkb3V0cHV0IC49ICIgICAgPGNzc21lZGlhdHlwZT48L2Nzc21lZGlhdHlwZT4iOwoJICAgICRvdXRwdXQgLj0gIiAgICA8Y3NzZGF0YT48IVtDREFUQVsiLmJhc2U2NF9lbmNvZGUoJHRlbXBsYXRlLT5zdHlsZXNoZWV0KS4iXV0+PC9jc3NkYXRhPlxuIjsKCSAgICAkb3V0cHV0IC49ICIgIDwvc3R5bGVzaGVldD5cbiI7CgkgIH0KCWZvcmVhY2goICRzdHlsZXNoZWV0cyBhcyAkY3NzaWQgKQoJICB7CgkgICAgJGNzcyA9IFN0eWxlc2hlZXRPcGVyYXRpb25zOjpMb2FkU3R5bGVzaGVldEJ5SUQoICRjc3NpZCApOwoJICAgICRvdXRwdXQgLj0gIiAgPHN0eWxlc2hlZXQ+XG4iOwoJICAgICRvdXRwdXQgLj0gIiAgICA8Y3NzbmFtZT4iLiRjc3MtPm5hbWUuIjwvY3NzbmFtZT5cbiI7CgkgICAgJG91dHB1dCAuPSAiICAgIDxjc3NtZWRpYXR5cGU+Ii4kY3NzLT5tZWRpYV90eXBlLiI8L2Nzc21lZGlhdHlwZT4iOwoJICAgICRvdXRwdXQgLj0gIiAgICA8Y3NzZGF0YT48IVtDREFUQVsiLmJhc2U2NF9lbmNvZGUoJGNzcy0+dmFsdWUpLiJdXT48L2Nzc2RhdGE+XG4iOwoJICAgICRvdXRwdXQgLj0gIiAgPC9zdHlsZXNoZWV0PlxuIjsJCgkgIH0KCQoJZm9yZWFjaCggJHVybHMgYXMgJG9uZXVybCApCgkgIHsKCSAgICAkY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cyggJGdDbXMtPmNvbmZpZ1sncm9vdF9wYXRoJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4kb25ldXJsICk7CgkgICAgaWYoICEkY29udGVudHMgKSAKCSAgICAgIHsKCQljb250aW51ZTsKCSAgICAgIH0KCSAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoICRjb250ZW50cyApOwoJICAgICRvdXRwdXQgLj0gIiAgPHJlZmVyZW5jZT5cbiI7CgkgICAgJG91dHB1dCAuPSAiICAgIDxyZWZuYW1lPiIuYmFzZW5hbWUoJG9uZXVybCkuIjwvcmVmbmFtZT5cbiI7CgkgICAgJG91dHB1dCAuPSAiICAgIDxyZWZlbmNvZGVkPjE8L3JlZmVuY29kZWQ+XG4iOwoJICAgICRvdXRwdXQgLj0gIiAgICA8cmVmbG9jYXRpb24+JG9uZXVybDwvcmVmbG9jYXRpb24+XG4iOwoJICAgICRvdXRwdXQgLj0gIiAgICA8cmVmZGF0YT48IVtDREFUQVsiLiRlbmNvZGVkLiJdXT48L3JlZmRhdGE+XG4iOwoJICAgICRvdXRwdXQgLj0gIiAgPC9yZWZlcmVuY2U+XG4iOwoJICB9CiAgICAgIH0KCiAgICAkb3V0cHV0IC49ICI8L3RoZW1lPlxuIjsKICAgIGhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2ZvcmNlLWRvd25sb2FkJyk7CiAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScuJHRoZW1lbmFtZS4nLnhtbCcpOwovLyAgICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3htbCcpOwovLyAgICAgICAgIGhlYWRlcignQ29udGVudC1MZW5ndGg6ICcuc3RybGVuKCRvdXRwdXQpKTsKCiAgICAvLyB0b2RvLCBidXQgZ29vZCBlbm91Z2ggZm9yIG5vdy4KICAgIHdoaWxlKEBvYl9lbmRfY2xlYW4oKSk7CiAgICBlY2hvICRvdXRwdXQ7CiAgICBleGl0KCk7CiAgfQoKCiAgZnVuY3Rpb24gRG9JbXBvcnRUaGVtZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgJGZpZWxkTmFtZT0kaWQuJ2lucHV0X2Jyb3dzZSc7CiAgICBpZiAoIWlzc2V0ICgkX0ZJTEVTWyRmaWVsZE5hbWVdKSB8fCAhaXNzZXQgKCRfRklMRVMpCgl8fCAhaXNfYXJyYXkgKCRfRklMRVNbJGZpZWxkTmFtZV0pIHx8ICEkX0ZJTEVTWyRmaWVsZE5hbWVdWyduYW1lJ10pCiAgICAgIHsKCSR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgJHRoaXMtPkxhbmcoJ2Vycm9yX25vZmlsZXN1cGxvYWRlZCcpKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIG5vcm1hbGl6ZSB0aGUgZmlsZSB2YXJpYWJsZQogICAgJGZpbGUgPSAkX0ZJTEVTWyRmaWVsZE5hbWVdOwogICAgCiAgICAvLyAkZmlsZVsndG1wX25hbWUnXSBpcyB0aGUgZmlsZSB3ZSBoYXZlIHRvIHBhcnNlCiAgICAkeG1sID0gZmlsZV9nZXRfY29udGVudHMoICRmaWxlWyd0bXBfbmFtZSddICk7CgogICAgLy8gbG9hZCBhbGwgdGhlIHN0eWxlc2hlZXRzCiAgICAkYWxsc3R5bGVzaGVldHMgPSBTdHlsZXNoZWV0T3BlcmF0aW9uczo6TG9hZFN0eWxlc2hlZXRzKCk7CgogICAgLy8gYW5kIHRoZSB0ZW1wbGF0ZXMKICAgICRhbGx0ZW1wbGF0ZXMgPSBUZW1wbGF0ZU9wZXJhdGlvbnM6OkxvYWRUZW1wbGF0ZXMoKTsKCiAgICAvLyBwYXJzZSB0aGUgeG1sIHN0dWZmCiAgICAkcGFyc2VyID0geG1sX3BhcnNlcl9jcmVhdGUoKTsKICAgIHhtbF9wYXJzZV9pbnRvX3N0cnVjdCggJHBhcnNlciwgJHhtbCwgJHZhbCwgJGlkeCApOwogICAgeG1sX3BhcnNlcl9mcmVlKCAkcGFyc2VyICk7CgogICAgJHRoZW1lID0gJyc7CiAgICAkY3VyZWxlbWVudCA9IGFycmF5KCk7CiAgICAkdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoKTsKICAgICRzdHlsZXNoZWV0cyA9IGFycmF5KCk7CiAgICAkb25lc2hlZXQgPSAnJzsKICAgICRvbmVyZWZlcmVuY2UgPSBhcnJheSgpOwogICAgJGFsbHJlZmVyZW5jZXMgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJHZhbCBhcyAkZWxlbSApCiAgICAgIHsKCSR2YWx1ZSA9ICcnOwoJaWYoIGlzc2V0KCAkZWxlbVsndmFsdWUnXSApICkgJHZhbHVlID0gJGVsZW1bJ3ZhbHVlJ107CgkkdHlwZSA9ICRlbGVtWyd0eXBlJ107Cglzd2l0Y2goICRlbGVtWyd0YWcnXSApCgkgIHsKCSAgY2FzZSAnTkFNRSc6CgkgICAgewoJICAgICAgaWYoICR0eXBlICE9ICdjb21wbGV0ZScgJiYgJHR5cGUgIT0gJ2Nsb3NlJyApCgkJewoJCSAgY29udGludWU7CgkJfQoJICAgICAgJHRoZW1lID0gJHZhbHVlOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBjYXNlICdUTkFNRSc6CgkgICAgaWYoICR0eXBlICE9ICdjb21wbGV0ZScgJiYgJHR5cGUgIT0gJ2Nsb3NlJyApCgkgICAgICB7CgkJY29udGludWU7CgkgICAgICB9CgkgICAgJHRlbXBsYXRlLT5uYW1lID0gJHRoZW1lLiIgOiAiLiR2YWx1ZTsKCSAgICBmb3JlYWNoKCAkYWxsdGVtcGxhdGVzIGFzICR0bXBsICkKCSAgICAgIHsKCQlpZiggJHRtcGwtPm5hbWUgPT0gJHRlbXBsYXRlLT5uYW1lICkKCQkgIHsKCQkgICAgLy8gdGVtcGxhdGUgbmFtZSBleGlzdHMKCQkgICAgJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl90ZW1wbGF0ZWV4aXN0cycsJHRlbXBsYXRlLT5uYW1lKSk7CgkJICAgIHJldHVybjsKCQkgIH0KCSAgICAgIH0KCSAgICBicmVhazsKCgkgIGNhc2UgJ1RFTkNPRElORyc6CgkgICAgaWYoICR0eXBlICE9ICdjb21wbGV0ZScgJiYgJHR5cGUgIT0gJ2Nsb3NlJyApCgkgICAgICB7CgkJY29udGludWU7CgkgICAgICB9CgkgICAgJHRlbXBsYXRlLT5lbmNvZGluZyA9ICR2YWx1ZTsKCSAgICBicmVhazsKCSAgICAKCSAgY2FzZSAnVERBVEEnOgoJICAgIGlmKCAkdHlwZSAhPSAnY29tcGxldGUnICYmICR0eXBlICE9ICdjbG9zZScgKQoJICAgICAgewoJCWNvbnRpbnVlOwoJICAgICAgfQoJICAgICR0ZW1wbGF0ZS0+Y29udGVudCA9IGJhc2U2NF9kZWNvZGUoJHZhbHVlKTsKCSAgICBicmVhazsKCSAgICAKCSAgY2FzZSAnVEVNUExBVEUnOgoJICAgIGlmKCAkdHlwZSAhPSAnY2xvc2UnICkKCSAgICAgIHsKCQljb250aW51ZTsKCSAgICAgIH0KCSAgICAvLyB3ZSdyZSBjbG9zaW5nIHRoZSB0ZW1wbGF0ZSwgd2UgY2FuIGlnbm9yZSB0aGlzCgkgICAgLy8gbG9va3MgbGlrZSB3ZSBjYW4gaWdub3JlIGl0IGFueXdheXMKCSAgICBicmVhazsKCSAgICAKCSAgY2FzZSAnQ1NTTkFNRSc6CgkgICAgJG9uZXNoZWV0LT5uYW1lID0gJHRoZW1lLiIgOiAiLiR2YWx1ZTsKCSAgICBmb3JlYWNoKCAkYWxsc3R5bGVzaGVldHMgYXMgJGNzc29iaiApCgkgICAgICB7CgkJaWYoICRjc3NvYmotPm5hbWUgPT0gJG9uZXNoZWV0LT5uYW1lICkKCQkgIHsKCQkgICAgLy8gc3R5bGVzaGVldCBuYW1lIGV4aXN0cwoJCSAgICAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJCSAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX3N0eWxlc2hlZXRleGlzdHMnLCRvbmVzaGVldC0+bmFtZSkpOwoJCSAgICByZXR1cm47CgkJICB9CgkgICAgICB9CgkgICAgYnJlYWs7CgoJICBjYXNlICdDU1NNRURJQVRZUEUnOgoJICAgICRvbmVzaGVldC0+bWVkaWFfdHlwZSA9ICR2YWx1ZTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ0NTU0RBVEEnOgoJICAgICRvbmVzaGVldC0+dmFsdWUgPSBiYXNlNjRfZGVjb2RlKCR2YWx1ZSk7CgkgICAgYnJlYWs7CgoJICBjYXNlICdTVFlMRVNIRUVUJzoKCSAgICBpZiggJHR5cGUgPT0gJ29wZW4nICkKCSAgICAgIHsKCQkkb25lc2hlZXQgPSBuZXcgU3R5bGVzaGVldCgpOwoJICAgICAgfQoJICAgIGVsc2UgaWYoICR0eXBlID09ICdjbG9zZScgKQoJICAgICAgewoJCWFycmF5X3B1c2goICRzdHlsZXNoZWV0cywgJG9uZXNoZWV0ICk7CgkgICAgICB9CgoJICBjYXNlICdSRUZOQU1FJzoKCSAgICAkcmVmZXJlbmNlWyduYW1lJ10gPSAkdmFsdWU7CgkgICAgYnJlYWs7CgoJICBjYXNlICdSRUZFTkNPREVEJzoKCSAgICAkcmVmZXJlbmNlWydlbmNvZGVkJ10gPSAkdmFsdWU7CgkgICAgYnJlYWs7CgoJICBjYXNlICdSRUZMT0NBVElPTic6CgkgICAgJHJlZmVyZW5jZVsnbG9jYXRpb24nXSA9ICR2YWx1ZTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ1JFRkRBVEEnOgoJICAgICRyZWZlcmVuY2VbJ2RhdGEnXSA9ICR2YWx1ZTsKCSAgICBicmVhazsKCgkgIGNhc2UgJ1JFRkVSRU5DRSc6CgkgICAgaWYoICR0eXBlICE9ICdjbG9zZScgKQoJICAgICAgewoJCWNvbnRpbnVlOwoJICAgICAgfQoJICAgIGlmKCBjb3VudCggJHJlZmVyZW5jZSApICE9IDQgKQoJICAgICAgewoJCS8vIHN0eWxlc2hlZXQgbmFtZSBleGlzdHMKCQkkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJCSAkdGhpcy0+TGFuZygnZXJyb3JfYmFkZW1iZWQnLCRvbmVzaGVldC0+bmFtZSkpOwoJICAgICAgfQoJICAgIGFycmF5X3B1c2goICRhbGxyZWZlcmVuY2VzLCAkcmVmZXJlbmNlICk7CgkgICAgJHJlZmVyZW5jZSA9IGFycmF5KCk7CgkgICAgYnJlYWs7CgkgIH0KICAgICAgfQoKICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBzdHlsZXNoZWV0CiAgICBpZiggY291bnQoICRzdHlsZXNoZWV0cyApID09IDAgKQogICAgICB7CgkkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICR0aGlzLT5MYW5nKCdlcnJvcl9ub3N0eWxlc2hlZXRzJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gY2xlYW4gdXAgdGhlIHRlbXBsYXRlIGFuZCBzdHlsZXNoZWV0cyBhbmQgYWRqdXN0IGV2ZXJ5dGhpbmcgdG8gdGhlaXIgbmV3IGxvY2F0aW9ucwogICAgJHByZWZpeCA9IGJhc2VuYW1lKCRnQ21zLT5jb25maWdbJ3VwbG9hZHNfdXJsJ10pLiIvIi4kdGhlbWU7CiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkc3R5bGVzaGVldHMpOyAkaSsrICkKICAgICAgewoJJHJlc3VsdCA9ICR0aGlzLT5fY2xlYW51cFJlZmVyZW5jZXMoICRwcmVmaXgsICRhbGxyZWZlcmVuY2VzLCAkc3R5bGVzaGVldHNbJGldLT52YWx1ZSApOwoJaWYoICEkcmVzdWx0ICkKCSAgewoJICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9lZGl0aW5ncHJvYmxlbScpKTsKCSAgICByZXR1cm47CgkgIH0KICAgICAgfQogICAgJHJlc3VsdCA9ICR0aGlzLT5fY2xlYW51cFJlZmVyZW5jZXMoICRwcmVmaXgsICRhbGxyZWZlcmVuY2VzLCAkdGVtcGxhdGUtPmNvbnRlbnQgKTsKICAgIGlmKCAhJHJlc3VsdCApCiAgICAgIHsKCSR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgJHRoaXMtPkxhbmcoJ2Vycm9yX2VkaXRpbmdwcm9ibGVtJykpOwoJcmV0dXJuOwogICAgICB9CgoKICAgIC8vIHNhdmUgb3VyIHJlZmVyZW5jZXMgYXMgZmlsZXMKICAgIC8vIGZpcnN0IHdlIGNyZWF0ZSB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdAogICAgJGRlc3QgPSAkZ0Ntcy0+Y29uZmlnWyd1cGxvYWRzX3BhdGgnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLiR0aGVtZTsKICAgICR0aGlzLT5fbWtkaXJyKCAkZGVzdCApOwoKICAgIGZvcmVhY2goICRhbGxyZWZlcmVuY2VzIGFzICRyZWYgKQogICAgICB7CgkkcmVzID0gJHRoaXMtPl9zYXZlRW5jb2RlZEZpbGUoICRkZXN0LCAkcmVmWyduYW1lJ10sICRyZWZbJ2xvY2F0aW9uJ10sCgkJCQkJJHJlZlsnZW5jb2RlZCddLCAkcmVmWydkYXRhJ10gKTsKCWlmKCAkcmVzICE9IDEgKSAKCSAgewoJICAgIC8vIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtIHdlIGNvdWxkIGhhdmUgYSBidW5jaCBvIGZpbGVzIGx5aW5nIGFyb3VuZAoJICAgICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9wcm9ibGVtc2F2aW5naW5jbHVkZXMnKSk7CgkgICAgcmV0dXJuOwoJICB9CiAgICAgIH0KICAgIAogICAgCiAgICAvLyBub3cgd2UgaGF2ZSBhIHRlbXBsYXRlIGFuZCBvbmUgb3IgbW9yZSBzdHlsZXNoZWV0cywgZG8gb3VyIG1hZ2ljCiAgICAkY3NzaWRzID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRzdHlsZXNoZWV0cyBhcyAkY3NzICkKICAgICAgewoJJG5ld2lkID0gU3R5bGVTaGVldE9wZXJhdGlvbnM6Okluc2VydFN0eWxlc2hlZXQoICRjc3MgKTsKCWlmKCAkbmV3aWQgPT0gLTEgKQoJICB7CgkgICAgLy8gY291bGRuJ3QgaW5zZXJ0IHRoZSBzdHlsZXNoZWV0CgkgICAgY29udGludWU7CgkgIH0KCWFycmF5X3B1c2goICRjc3NpZHMsICRuZXdpZCApOwogICAgICB9CgogICAgJG5ld3RtcGxpZCA9IFRlbXBsYXRlT3BlcmF0aW9uczo6SW5zZXJ0VGVtcGxhdGUoICR0ZW1wbGF0ZSApOwogICAgaWYoICRuZXd0bXBsaWQgPT0gLTEgKQogICAgICB7CgkkdGhpcy0+RGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICR0aGlzLT5MYW5nKCdlcnJvcl9jb3VsZG5vdGNyZWF0ZXRlbXBsYXRlJykpOwoJcmV0dXJuOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCS8vIG5vdyBhc3NvY2lhdGUgdGhlIHN0eWxlc2hlZXRzIHdpdGggdGhpcyB0ZW1wbGF0ZQoJZm9yZWFjaCggJGNzc2lkcyBhcyAkaWQgKQoJICB7CgkgICAgaWYoICFTdHlsZXNoZWV0T3BlcmF0aW9uczo6QXNzb2NpYXRlU3R5bGVzaGVldFRvVGVtcGxhdGUoICRpZCwgJG5ld3RtcGxpZCApICkKCSAgICAgIHsKCQkvLyByZWFsbHkgcmVhbGx5IGJhZCBpZiB0aGlzIGRpZG4ndCB3b3JrLgoJCS8vIGN1eiB0aGVvcmV0aWNhbGx5IHdlIHdvdWxkIGhhdmUgdG8gY2xlYW4gdXAuCgkJJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCQkgJHRoaXMtPkxhbmcoJ2Vycm9yX2NvdWxkbm90YXNzb2Njc3MnKSk7CgkJcmV0dXJuOwoJICAgICAgfQoJICB9CiAgICAgIH0KCiAgICAvLyBpZiB3ZSBnb3QgaGVyZSwgZXZlcnl0aGluZyBzaG91bGQgYmUgYS1va2F5CiAgICByZXR1cm47IC8vIGRlYnVnCiAgICAkdGhpcy0+UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCApOwogIH0gLy8gZnVuY3Rpb24KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBfbWtkaXJyKCAkcGF0aG5hbWUsICRtb2RlICkKICAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICAgTWFrZSBhIGRpcmVjdG9yeSByZWN1cnNpdmVseQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfbWtkaXJyICgkcGF0aG5hbWUsICRtb2RlID0gMDc3NykKICB7CiAgICAvLyBDaGVjayBpZiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMKICAgIGlmIChpc19kaXIgKCRwYXRobmFtZSkgfHwgZW1wdHkgKCRwYXRobmFtZSkpCiAgICB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIEVuc3VyZSBhIGZpbGUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB3aXRoIHRoZSBzYW1lIG5hbWUKICAgIGlmIChpc19maWxlICgkcGF0aG5hbWUpKQogICAgewogICAgICAvLyBSQzogTW9kaWZpY2F0aW9uIHN1Y2ggdGhhdCB0aGlzIGlzbid0IGFuIGVycm9yCiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIENyYXdsIHVwIHRoZSBkaXJlY3RvcnkgdHJlZQogICAgJG5leHRfcGF0aG5hbWUgPQogICAgICBzdWJzdHIgKCRwYXRobmFtZSwgMCwgc3RycnBvcyAoJHBhdGhuYW1lLCBESVJFQ1RPUllfU0VQQVJBVE9SKSk7CiAgICBpZiAoJHRoaXMtPl9ta2RpcnIgKCRuZXh0X3BhdGhuYW1lLCAkbW9kZSkpCiAgICB7CiAgICAgIGlmICghZmlsZV9leGlzdHMgKCRwYXRobmFtZSkpCiAgICAgIHsKCSByZXR1cm4gQG1rZGlyICgkcGF0aG5hbWUsICRtb2RlKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9Cgp9Cgo/Pgo=]]></data>
  </file>
</module>
