<?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>CustomContent</name>
  <version>1.4.0</version>
  <help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBVc2VySUQgbW9kdWxlIGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgcGFnZSB0aGF0IHdpbGwgbG9vayBkaWZmZXJlbnQgZGVwZW5kaW5nIHVwb24gdGhlIHBlcnNvbiB0aGF0IGxvb2tzIGF0IGl0LiAgWW91IGNhbiBzcGVjaWZ5IGRpZmZlcmVudCBjb250ZW50IGZvciBjZXJ0YWluIHVzZXJzLCBvciBtZW1iZXJzIG9mIGEgY2VydGFpbiBncm91cC48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UbyB1c2UgaXQgeW91IHBsYWNlIHRoZSB0YWcge2Ntc19tb2R1bGUgbW9kdWxlPUN1c3RvbUNvbnRlbnR9IGludG8geW91ciBwYWdlIG9yIHRlbXBsYXRlLCBhbmQgdGhlbiBiZWxvdyB0aGF0IHlvdSBwbGFjZSB0aGUgY29udGVudCB5b3Ugd2FudCBpc29sYXRlZCB0byBzcGVjaWZpYyB1c2VycyBpbiBncm91cHMgaW4gb25lIG9mIHR3byB3YXlzLCBlaXRoZXIgdXNpbmcgc3BlY2lhbGx5IGZvcm1hdHRlZCBjb21tZW50IHRhZ3MsIG9yIHVzaW5nIHNtYXJ0eSBzeW50YXguPC9wPgo8aDQ+TWV0aG9kIDE6IGNvbW1lbnQgdGFnczwvaDQ+CjxwcmU+CntjbXNfbW9kdWxlIG1vZHVsZT1DdXN0b21Db250ZW50fQombHQ7IS0tY3VzdG9tQ29udGVudDogc3RhcnRpZiBncm91cD10ZXN0ZXJzLGFkbWlucyAtLSZndDsKJmx0O0gxJmd0O1RoaXMgY29udGVudCBpcyBvbmx5IGF2YWlsYWJsZSB0byBsb2dnZWQgaW4gdGVzdGVycyBhbmQgYW5kIGFkbWlucyZsdDsvSDEmZ3Q7CiZsdDshLS1jdXN0b21Db250ZW50OiBlbHNlIC0tJmd0OwombHQ7SDEmZ3Q7VGhpcyBjb250ZW50IGlzIGF2YWlsYWJsZSB0byBldmVyeWJvZHkgZWxzZSZsdDsvSDEmZ3Q7CiZsdDshLS1jdXN0b21Db250ZW50OiBlbmRpZiAtLSZndDsKJmx0OyEtLWN1c3RvbUNvbnRlbnQ6IHN0YXJ0aWYgZ3JvdXA9dXNlcnMgLS0mZ3Q7CiZsdDtIMSZndDtUaGlzIGNvbnRlbnQgaXMgb25seSBhdmFpbGFibGUgdG8gbG9nZ2VkIGluIHVzZXJzICZsdDsvSDEmZ3Q7CiZsdDshLS1jdXN0b21Db250ZW50OiBlbmRpZiAtLSZndDsKPC9wcmU+CjxwPjxiPkF2YWlsYWJsZSBwYXJhbWV0ZXJzPC9iPjwvcD4gCjx1bD4KPGxpPjxwPjxlbT5pcDwvZW0+IC0gdGVzdCBpZiByZW1vdGUgaXAgbWF0Y2hlcyBhIG5ldHdvcmsgb3Igc3VwcGxpZWQgaXAgYWRkcmVzcy4gIFZhbGlkIGZvcm1hdHMgYXJlIHh4eC54eHgueHh4Lnh4eCAoZXhhY3QpLCB4eHgueHh4Lnh4eC5beXl5LXp6el0gKHJhbmdlKSBhbmQgeHh4Lnh4eC54eHgvbm4gKG5uID0gIyBiaXRzLCBpLmUuICAxOTIuMTY4LjEuMC8yNCk8L3A+PC9saT4KPGxpPjxwPjxlbT5ncm91cDwvZW0+IC0gdGVzdCBpZiB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyIGlzIGEgbWVtYmVyIG9mIGFueSBvZiB0aGUgc3VwcGxpZWQgZ3JvdXBzPC9wPjwvbGk+CjxsaT48cD48ZW0+dXNlcjxlbT4gLSB0ZXN0IGlmIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJuYW1lIG1hdGNoZXMgYW55IG9mIHRoZSBzdXBwbGllZCBvbmVzPC9wPjwvbGk+CjxsaT48cD48ZW0+bG9nZ2VkaW48ZW0+IC0gdGVzdCBpZiB0aGUgY3VycmVudCB1c2VyIGlzIGxvZ2dlZCBpbiBvciBub3QuL3A+PC9saT4KPC91bD4KPHA+VGVzdHMgYXJlIGV2YWx1YXRlZCBpbiBhIGxvZ2ljYWwgT1IgZmFzaGlvbiBpbiBvcmRlciBhcyBmb2xsb3dzIGlwIGFkZHJlc3MsIGdyb3VwLCBhbmQgdXNlci4gIFRoZSBmaXJzdCBzdWNjZXNzZnVsbCB0ZXN0IHdpbGwgcmVzdWx0IGluIHRoZSBleHByZXNzaW9uIGV2YWx1YXRpb25nIHRvIHRydWU8L3A+CjxoND5NZXRob2QgMjogc21hcnR5IHN5bnRheDwvaDQ+CjxwcmU+CntjbXNfbW9kdWxlIG1vZHVsZT1DdXN0b21Db250ZW50fQp7aWYgY3VzdG9tY29udGVudF9sb2dnZWRpbn0KICBXZWxjb21lICZsdDtiJmd0O3tjdXN0b21jb250ZW50X2xvZ2lubmFtZX0mbHQ7L2ImZ3Q7Jmx0O2JyLyZndDsKey9pZn0KPC9wcmU+CjxwPkFueSBzbWFydHkgY29tcGF0aWJsZSBleHByZXNzaW9ucyBvciBsb2dpYyBjYW4gYmUgdXNlZCB3aXRoIHRoZSBhdmFpbGFibGUgdmFyaWFibGVzLiAgVXNpbmcgdGhpcyBzeW50YXgsIGV4cHJlc3Npb25zIG1heSBiZSBuZXN0ZWQsIG9yIGNvbXBsZXggbG9naWMgdXNlZC48L3A+CjxwPjxiPkF2YWlsYWJsZSB2YXJpYWJsZXM6PC9iPjwvcD4KPHVsPgo8bGk+PHA+PGVtPmN1c3RvbWNvbnRlbnRfaXA8L2VtPiAtIFRoZSByZW1vdGUgSVAgYWRkcmVzczwvcD48L2xpPgo8bGk+PHA+PGVtPmN1c3RvbWNvbnRlbnRfbG9nZ2VkaW48L2VtPiAtIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdldGhlciB0aGUgdXNlciBpcyBsb2dnZWQgaW4gb3Igbm90PC9wPjwvbGk+CjxsaT48cD48ZW0+Y3VzdG9tY29udGVudF9sb2dpbm5hbWU8L2VtPiAtIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXI8L3A+PC9saT4KPGxpPjxwPjxlbT5jdXN0b21jb250ZW50X2dyb3VwY291bnQ8L2VtPiAtIEEgY291bnQgb2YgdGhlIG51bWJlciBvZiBncm91cHMgdGhpcyB1c2VyIGlzIGEgbWVtYmVyIG9mPC9wPjwvbGk+CjxsaT48cD48ZW0+Y3VzdG9tY29udGVudF9ncm91cHM8L2VtPiAtIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGdyb3VwIG5hbWVzIG9mIGFsbCBtZW1iZXIgZ3JvdXBzPC9wPjwvbGk+CjxsaT48cD48ZW0+Y3VzdG9tY29udGVudF9tZW1iZXJvZl8qPC9lbT4gLSBBIHNlcmllcyBvZiBib29sZWFuIHZhcmlhYmxlcyBpbmRpY2F0aW5nIGdyb3VwIG1lbWJlcnNoaXAuICBpLmUuOiBjdXN0b21jb250ZW50X21lbWJlcm9mX3N0YWZmLCBjdXN0b21jb250ZW50X21lbWJlcm9mX3VzZXJzLCBldGMuICBObyB2YXJpYWJsZXMgYXJlIGRlZmluZWQgZm9yIGdyb3VwcyB0aGF0IHRoaXMgdXNlciBpcyBub3QgYSBtZW1iZXIgb2YuPC9wPjwvbGk+CjwvdWw+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDUsIFJvYmVydCBDYW1wYmVsbCA8YSBocmVmPSJtYWlsdG86cm9iQHRlY2hjb20uZHluZG5zLm9yZyI+Jmx0O3JvYkB0ZWNoY29tLmR5bmRucy5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgo8aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPkZyb250RW5kVXNlcnMgPSZndDsgMC4wLjE8L2xpPjwvdWw+PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=</help>
  <about>PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtyb2JAdGVjaGNvbS5keW5kbnMub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuNC4wPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPjxsaT5WZXJzaW9uIDEuMC4gMTQgU2VwdGVtYmVyIDIwMDUuIEluaXRpYWwgUmVsZWFzZS48L2xpPjwvdWw+Cjx1bD4KPGxpPlZlcnNpb24gMS4xLiAgLSBTZXB0ZW1iZXIgMjAwNS4gQWRkZWQgc3RhcnRpZi9lbHNlL2VuZGlmLCBhbmQgc2VhcmNoIHRocm91Z2ggbXVsdGlwbGUgZ3JvdXBzIGFuZCB1c2Vycy48L2xpPgo8bGk+VmVyc2lvbiAxLjIuICAtIFNlcHRlbWJlciAyMDA1LiBBZGRlZCBsb2dnZWRpbiBvcHRpb25hbCBwYXJhbWV0ZXI8L2xpPgo8bGk+VmVyc2lvbiAxLjMgICAtIE9jdG9iZXIgICAyMDA1LiBDaGFuZ2VkIHRvIHVzZSBGcm9udEVuZFVzZXJzIGluc3RlYWQgb2YgVXNlcklEPC9saT4KPGxpPlZlcnNpb24gMS4zLjEgLSBOb3ZlbWJlciAyMDA1LiBWZXJ5IG1pbm9yIGJ1Z2ZpeCB0byB0aGUgcGFyYW1ldGVyIHBhcnNpbmc8L2xpPgo8bGk+CjxwPlZlcnNpb24gMS40LjAgLSBKYW51YXJ5LCAyMDA2LjwvcD4KPHA+QWRkZWQgc21hcnR5IGNvbXBhdGlibGUgdmFyaWFibGVzPC9wPgo8L2xpPgo8L3VsPjxiciAvPg==</about>
  <requires>
    <requiredname>FrontEndUsers</requiredname>
    <requiredversion>0.0.1</requiredversion>
  </requires>
  <file>
    <filename>/</filename>
    <isdir>1</isdir>
  </file>
  <file>
    <filename>/CustomContent.module.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKLyoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEN1c3RvbUNvbnRlbnQKIyBWZXJzaW9uOiAxLjQuMCwgY2FsZ3V5MTAwMAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovKiBZb3VyIGluaXRpYWwgQ2xhc3MgZGVjbGFyYXRpb24uIFRoaXMgZmlsZSdzIG5hbWUgbXVzdAogICBiZSAiW2NsYXNzJ3MgbmFtZV0ubW9kdWxlLnBocCIsIG9yLCBpbiB0aGlzIGNhc2UsCiAgIFNrZWxldG9uLm1vZHVsZS5waHAKKi8gCmNsYXNzIEN1c3RvbUNvbnRlbnQgZXh0ZW5kcyBDTVNNb2R1bGUKewogIHZhciAkc3RhcnRfbWFya2VyPSI8IS0tY3VzdG9tQ29udGVudDoiOwogIHZhciAkZW5kX21hcmtlcj0iLS0+IjsKICB2YXIgJHN1YnN0aXR1dGVfY29udGVudCA9IGZhbHNlOwoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXROYW1lKCkKICAgbXVzdCByZXR1cm4gdGhlIGV4YWN0IGNsYXNzIG5hbWUgb2YgdGhlIG1vZHVsZS4KICAgSWYgdGhlc2UgZG8gbm90IG1hdGNoLCBiYWQgdGhpbmdzIGhhcHBlbi4KICAgCiAgIFRoaXMgaXMgdGhlIG5hbWUgdGhhdCdzIHNob3duIGluIHRoZSBtYWluIE1vZHVsZXMKICAgcGFnZSBpbiB0aGUgQWRtaW4uCiAgIAogICBJZiB5b3Ugd2FudCB0byBiZSBzYWZlLCB5b3UgY2FuIGp1c3QgcmVwbGFjZSB0aGUgYm9keQogICBvZiB0aGlzIGZ1bmN0aW9uIHdpdGg6CiAgIHJldHVybiBnZXRfY2xhc3MoJHRoaXMpOyAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXROYW1lKCkKICB7CiAgICByZXR1cm4gJ0N1c3RvbUNvbnRlbnQnOwogIH0KICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRGcmllbmRseU5hbWUoKQogICBUaGlzIGNhbiByZXR1cm4gYW55IHN0cmluZywgcHJlZmVyYWJseSBhIGxvY2FsaXplZCBuYW1lCiAgIG9mIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIG5hbWUgdGhhdCdzIHNob3duIGluIHRoZQogICBBZG1pbiBNZW51cyBhbmQgc2VjdGlvbiBwYWdlcyAoaWYgdGhlIG1vZHVsZSBoYXMgYW4gYWRtaW4KICAgY29tcG9uZW50KS4KCSAgIAogICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICB9CiAgCiAgCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0VmVyc2lvbigpCiAgIFRoaXMgY2FuIHJldHVybiBhbnkgc3RyaW5nLCBwcmVmZXJhYmx5IGEgbnVtYmVyIG9yCiAgIHNvbWV0aGluZyB0aGF0IG1ha2VzIHNlbnNlIGZvciBkZXNpZ25hdGluZyBhIHZlcnNpb24uCiAgIFRoZSBDTVMgd2lsbCB1c2UgdGhpcyB0byBpZGVudGlmeSB3aGV0aGVyIG9yIG5vdAogICB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIG1vZHVsZSBpcyBjdXJyZW50LCBhbmQKICAgdGhlIG1vZHVsZSB3aWxsIHVzZSBpdCB0byBmaWd1cmUgb3V0IGhvdyB0byB1cGdyYWRlCiAgIGl0c2VsZiBpZiByZXF1ZXN0ZWQuCSAgIAogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogIHsKICAgIHJldHVybiAnMS40LjAnOwogIH0KICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNaW5pbXVtQ01TVmVyc2lvbigpCiAgIFJldHVybiB0aGUgbWluaW11bSB2ZXJzaW9uIG9mIENNUyB0aGF0IHRoaXMgbW9kdWxlIHJlcXVpcmVzLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzAuMTEuMic7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRIZWxwKCkKICAgVGhpcyByZXR1cm5zIEhUTUwgaW5mb3JtYXRpb24gb24gdGhlIG1vZHVsZS4KICAgVHlwaWNhbGx5LCB5b3UnbGwgd2FudCB0byBpbmNsdWRlIGluZm9ybWF0aW9uIG9uIGhvdyB0bwogICB1c2UgdGhlIG1vZHVsZS4KICAgCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0SGVscCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQogIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBdXRob3IoKQogICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIE1vZHVsZQogICBBZG1pbiBpZiB5b3UgY2xpY2sgb24gdGhlICJBYm91dCIgbGluay4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBdXRob3IoKQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMCc7CiAgfQogIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBdXRob3JFbWFpbCgpCiAgIFRoaXMgcmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHByZXNlbnRlZCBpbiB0aGUgTW9kdWxlCiAgIEFkbWluIGlmIHlvdSBjbGljayBvbiB0aGUgIkFib3V0IiBsaW5rLiBJdCBoZWxwcyB1c2VycwogICBvZiB5b3VyIG1vZHVsZSBnZXQgaW4gdG91Y2ggd2l0aCB5b3UgdG8gc2VuZCBidWcgcmVwb3J0cywKICAgcXVlc3Rpb25zLCBjYXNlcyBvZiBiZWVyLCBhbmQvb3IgbGFyZ2Ugc3VtcyBvZiBtb25leS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCiAgewogICAgcmV0dXJuICdyb2JAdGVjaGNvbS5keW5kbnMub3JnJzsKICB9CiAgCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldENoYW5nZUxvZygpCiAgIFRoaXMgcmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHByZXNlbnRlZCBpbiB0aGUgbW9kdWxlCiAgIEFkbWluIGlmIHlvdSBjbGljayBvbiB0aGUgQWJvdXQgbGluay4gSXQgaGVscHMgdXNlcnMKICAgZmlndXJlIG91dCB3aGF0J3MgY2hhbmdlZCBiZXR3ZWVuIHJlbGVhc2VzLgogICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJc1BsdWdpbk1vZHVsZSgpCiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIG9yIGZhbHNlLCBkZXBlbmRpbmcgdXBvbgogICB3aGV0aGVyIHVzZXJzIGNhbiBpbmNsdWRlIHRoZSBtb2R1bGUgaW4gYSBwYWdlIG9yCiAgIHRlbXBsYXRlIHVzaW5nIGEgc21hcnR5IHRhZyBvZiB0aGUgZm9ybQogICB7Y21zX21vZHVsZSBtb2R1bGU9J0N1c3RvbUNvbnRlbnQnIHBhcmFtMT12YWwgcGFyYW0yPXZhbC4uLn0KCSAgIAogICBJZiB5b3VyIG1vZHVsZSBkb2VzIG5vdCBnZXQgaW5jbHVkZWQgaW4gcGFnZXMgb3IKICAgdGVtcGxhdGVzLCByZXR1cm4gImZhbHNlIiBoZXJlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBIYXNBZG1pbigpCiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUsIGRlcGVuZGluZyBvbgogICB3aGV0aGVyIHlvdXIgbW9kdWxlIGFkZHMgYW55dGhpbmcgdG8gdGhlIEFkbWluIGFyZWEgb2YKICAgdGhlIHNpdGUuIEZvciB0aGUgcmVzdCBvZiB0aGVzZSBjb21tZW50cywgSSdsbCBiZSBjYWxsaW5nCiAgIHRoZSBhZG1pbiBwYXJ0IG9mIHlvdXIgbW9kdWxlIHRoZSAiQWRtaW4gUGFuZWwiIGZvcgogICB3YW50IG9mIGEgYmV0dGVyIHRlcm0uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSGFzQWRtaW4oKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluRGVzY3JpcHRpb24oKQogICBJZiB5b3VyIG1vZHVsZSBkb2VzIGhhdmUgYW4gQWRtaW4gUGFuZWwsIHlvdQogICBjYW4gaGF2ZSBpdCByZXR1cm4gYSBkZXNjcmlwdGlvbiBzdHJpbmcgdGhhdCBnZXRzIHNob3duCiAgIGluIHRoZSBBZG1pbiBTZWN0aW9uIHBhZ2UgdGhhdCBjb250YWlucyB0aGUgbW9kdWxlLgogICAKICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ21vZGRlc2NyaXB0aW9uJyk7CiAgfQogIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXREZXBlbmRlbmNpZXMoKQogICBZb3VyIG1vZHVsZSBtYXkgbmVlZCBhbm90aGVyIG1vZHVsZSB0byBhbHJlYWR5IGJlIGluc3RhbGxlZAogICBiZWZvcmUgeW91IGNhbiBpbnN0YWxsIGl0LgogICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kCiAgIG1pbmltdW0gdmVyc2lvbiBudW1iZXJzIHRoYXQgdGhpcyBtb2R1bGUgcmVxdWlyZXMuCiAgIAogICBJdCBzaG91bGQgcmV0dXJuIGFuIGhhc2gsIGVnLgogICByZXR1cm4gYXJyYXkoJ3NvbWVtb2R1bGUnPT4nMS4wJywgJ290aGVybW9kdWxlJz0+JzEuMScpOwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpCiAgewogICAgcmV0dXJuIGFycmF5KCdGcm9udEVuZFVzZXJzJz0+JzAuMC4xJyk7CiAgfQogIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJbnN0YWxsKCkKICAgV2hlbiB5b3VyIG1vZHVsZSBpcyBpbnN0YWxsZWQsIHlvdSBtYXkgbmVlZCB0byBkbyBzb21lCiAgIHNldHVwLiBUeXBpY2FsIHRoaW5ncyB0aGF0IGhhcHBlbiBoZXJlIGFyZSB0aGUgY3JlYXRpb24KICAgYW5kIHByZXBvcHVsYXRpb24gb2YgZGF0YWJhc2UgdGFibGVzLCBkYXRhYmFzZSBzZXF1ZW5jZXMsCiAgIHBlcm1pc3Npb25zLCBwcmVmZXJlbmNlcywgZXRjLgogICAKICAgVGhpcyBleGFtcGxlIGNyZWF0ZXMgYSBTa2VsZXRvbiBkYXRhYmFzZSB0YWJsZSBhbmQKICAgc2VxdWVuY2UsIGl0IGNyZWF0ZXMgdGhlICJVc2UgU2tlbGV0b24iIHBlcm1pc3Npb24sCiAgIGFuZCBzZXRzIHRoZSAiU2luZyBMb3VkbHkiIHByZWZlcmVuY2UuCiAgIAogICBUaGUgZGF0YWJhc2UgaXMgbm90IGFjdHVhbGx5IHVzZWQgaW4gdGhpcyBleGFtcGxlOwogICBjaGVjayBhbnkgb25lIG9mIHRoZSBvdGhlciBtb2R1bGVzIGlmIHlvdSB3YW50IHRvIHNlZQogICBtZXRob2QgY29kZSB0aGF0IHVzZXMgdGhlIGRhdGFiYXNlLgogICAKICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBjcmVhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsCiAgIGNoZWNrIG91dCB0aGUgQURPREIgRGF0YSBEaWN0aW9uYXJ5IHBhZ2UgYXQKICAgaHR0cDovL3BocGxlbnMuY29tL2xlbnMvYWRvZGIvZG9jcy1kYXRhZGljdC5odG0KICAgCiAgIFRoaXMgZnVuY3Rpb24gY2FuIHJldHVybiBhICJmYWxzZSIgaW4gY2FzZSBvZiBhbnkgZXJyb3IsCiAgIGFuZCBDTVMgd2lsbCBub3QgY29uc2lkZXIgdGhlIG1vZHVsZSBpbnN0YWxsZWQuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSW5zdGFsbCgpCiAgewogICAgLy8gbm90aGluZyB0byBkbyBoZXJlCiAgfQoKICAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogICBBZnRlciBpbnN0YWxsYXRpb24sIHRoZXJlIG1heSBiZSB0aGluZ3MgeW91IHdhbnQgdG8KICAgY29tbXVuaWNhdGUgdG8geW91ciBhZG1pbi4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKICAgc3RyaW5nIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkLgogICAKICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICB9CgogIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgQWZ0ZXIgcmVtb3ZpbmcgYSBtb2R1bGUsIHRoZXJlIG1heSBiZSB0aGluZ3MgeW91IHdhbnQgdG8KICAgY29tbXVuaWNhdGUgdG8geW91ciBhZG1pbi4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKICAgc3RyaW5nIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkLgogICAKICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7CiAgfQogIAoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBVcGdyYWRlKCkKICAgSWYgeW91ciBtb2R1bGUgdmVyc2lvbiBudW1iZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24KICAgbnVtYmVyIG9mIHRoZSBpbnN0YWxsZWQgbW9kdWxlLCB0aGUgQ01TIEFkbWluIHdpbGwgZ2l2ZQogICB5b3UgYSBjaGFuY2UgdG8gdXBncmFkZSB0aGUgbW9kdWxlLiBUaGlzIGlzIHRoZSBmdW5jdGlvbgogICB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHVwZ3JhZGUuCiAgIElkZWFsbHksIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhhbmRsZSB1cGdyYWRlcyBpbmNyZW1lbnRhbGx5LAogICBzbyB5b3UgY291bGQgdXBncmFkZSBmcm9tIHZlcnNpb24gMC4wLjEgdG8gMTAuNS43IHdpdGgKICAgYSBzaW5nbGUgY2FsbC4gRm9yIGEgZ3JlYXQgZXhhbXBsZSBvZiB0aGlzLCBzZWUgdGhlIE5ld3MKICAgbW9kdWxlIGluIHRoZSBzdGFuZGFyZCBDTVMgaW5zdGFsbC4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBVcGdyYWRlKCRvbGR2ZXJzaW9uLCAkbmV3dmVyc2lvbikKICB7CiAgICAvLyBub3RoaW5nIHRvIGRvIGhlcmUKICB9CiAgCgkKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBVbmluc3RhbGwoKQogICBTb21ldGltZXMsIGFuIGV4Y2VwdGlvbmFsbHkgdW5lbmxpZ2h0ZW5lZCBvciBpZ25vcmFudAogICBhZG1pbiB3aWxsIHdpc2ggdG8gdW5pbnN0YWxsIHlvdXIgbW9kdWxlLiBXaGlsZSBpdAogICB3b3VsZCBiZSBiZXN0IHRvIGxheSBpbnRvIHRoZXNlIGlkaW90cyB3aXRoIGEgY2x1ZXN0aWNrLAogICB3ZSB3aWxsIGRvIHRoZSBtYWduYW5pbW91cyB0aGluZyBhbmQgcmVtb3ZlIHRoZSBtb2R1bGUKICAgYW5kIGNsZWFuIHVwIHRoZSBkYXRhYmFzZSwgcGVybWlzc2lvbnMsIGFuZCBwcmVmZXJlbmNlcwogICB0aGF0IGFyZSBzcGVjaWZpYyB0byBpdC4KICAgVGhpcyBpcyB0aGUgbWV0aG9kIHdoZXJlIHdlIGRvIHRoaXMuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVW5pbnN0YWxsKCkKICB7CiAgICAvLyBub3RoaW5nIHRvIGRvIGhlcmUKICB9CgoKICAgICAgIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF90ZXN0aXAoJHJhbmdlLCRpcCkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIFRoaXMgaXMgYSBmdW5jdGlvbiB0byBtYXRjaCBhbiBJUCBhZGRyZXNzIGFnYWluc3QgYW4gCiAgIGFkZHJlc3MgcmFuZ2Ugc3BlY2lmaWNhdGlvbi4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfdGVzdGlwKCRyYW5nZSwkaXApIAogIHsKICAgICRyZXN1bHQgPSAxOwoKICAgICMgSVAgUGF0dGVybiBNYXRjaGVyCiAgICAjIEouQWRhbXMgPGpuYUByZXRpbmEubmV0PgogICAgIwogICAgIyBNYXRjaGVzOgogICAgIwogICAgIyB4eHgueHh4Lnh4eC54eHggICAgICAgIChleGFjdCkKICAgICMgeHh4Lnh4eC54eHguW3l5eS16enpdICAocmFuZ2UpCiAgICAjIHh4eC54eHgueHh4Lnh4eC9ubiAgICAobm4gPSAjIGJpdHMsIGNpc2NvIHN0eWxlIC0tIGkuZS4gLzI0ID0gY2xhc3MgQykKICAgICMKICAgICMgRG9lcyBub3QgbWF0Y2g6CiAgICAjIHh4eC54eHgueHh4Lnh4W3l5eS16enpdICAocmFuZ2UsIHBhcnRpYWwgb2N0ZXRzIG5vdCBzdXBwb3J0ZWQpCgogICAgaWYgKGVyZWcoIihbMC05XSspXC4oWzAtOV0rKVwuKFswLTldKylcLihbMC05XSspLyhbMC05XSspIiwkcmFuZ2UsJHJlZ3MpKSB7CgogICAgICAjIHBlcmZvcm0gYSBtYXNrIG1hdGNoCiAgICAgICRpcGwgPSBpcDJsb25nKCRpcCk7CiAgICAgICRyYW5nZWwgPSBpcDJsb25nKCRyZWdzWzFdIC4gIi4iIC4gJHJlZ3NbMl0gLiAiLiIgLiAkcmVnc1szXSAuICIuIiAuICRyZWdzWzRdKTsKICAgICAgCiAgICAgICRtYXNrbCA9IDA7CiAgICAgIAogICAgICBmb3IgKCRpID0gMDsgJGk8IDMxOyAkaSsrKSB7CglpZiAoJGkgPCAkcmVnc1s1XS0xKSB7CgkgICRtYXNrbCA9ICRtYXNrbCArIHBvdygyLCgzMC0kaSkpOwoJfQogICAgICB9CiAgICAgIAogICAgICBpZiAoKCRtYXNrbCAmICRyYW5nZWwpID09ICgkbWFza2wgJiAkaXBsKSkgewoJcmV0dXJuIDE7CiAgICAgIH0gZWxzZSB7CglyZXR1cm4gMDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgCiAgICAgICMgcmFuZ2UgYmFzZWQKICAgICAgJG1hc2tvY3RzID0gc3BsaXQoIlwuIiwkcmFuZ2UpOwogICAgICAkaXBvY3RzID0gc3BsaXQoIlwuIiwkaXApOwogICAgICAKICAgICAgIyBwZXJmb3JtIGEgcmFuZ2UgbWF0Y2gKICAgICAgZm9yICgkaT0wOyAkaTw0OyAkaSsrKSB7CglpZiAoZXJlZygiXFsoWzAtOV0rKVwtKFswLTldKylcXSIsJG1hc2tvY3RzWyRpXSwkcmVncykpIHsKCSAgaWYgKCAoJGlwb2N0c1skaV0gPiAkcmVnc1syXSkgfHwgKCRpcG9jdHNbJGldIDwgJHJlZ3NbMV0pKSB7CgkgICAgJHJlc3VsdCA9IDA7CgkgIH0KCX0KCWVsc2UKCSAgewoJICAgIGlmICgkbWFza29jdHNbJGldIDw+ICRpcG9jdHNbJGldKSB7CgkgICAgICAkcmVzdWx0ID0gMDsKCSAgICB9CgkgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgQSBmdW5jdGlvbiB0byBhZGQgYW4gYXNzb2NpYXRpb24gdG8gYW4gYXJyYXkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfYWRkQXJyYXkoJiRhcnJheSwgJGtleSwgJHZhbCkKICB7CiAgICAkdG1wID0gYXJyYXkoJGtleSA9PiAkdmFsKTsKICAgICRhcnJheSA9IGFycmF5X21lcmdlKCRhcnJheSwkdG1wKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBBIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIHBhcmFtZXRlcnMgYWdhaW5zdCBjdXJyZW50IHVzZXIgc2V0dGluZ3MKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfZXZhbHVhdGUoJiRwYXJtcykKICB7CiAgICAkbW9kdWxlID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CiAgICBpZiggISRtb2R1bGUgKSByZXR1cm4gRkFMU0U7CgogICAgLy8gaGVyZSB3ZSBjaGVjayB0aGUgcGVybWlzc2lvbnMsIGV0Yy4KICAgICR2YWxpZCA9IDA7CiAgICAkdWlkID0gJG1vZHVsZS0+TG9nZ2VkSW5JZCgpOwogICAgaWYoIGlzc2V0KCAkcGFybXNbJ2lwJ10gKSApCiAgICAgIHsKCWZvcmVhY2goICRwYXJtc1snaXAnXSBhcyAkaXAgKQoJewoJICBpZiggJHRoaXMtPl90ZXN0aXAoICRpcCwgZ2V0ZW52KCJSRU1PVEVfQUREUiIgKSApICkKCSAgICB7CgkgICAgICAvLyB2YWxpZCBpcAoJICAgICAgJHZhbGlkID0gMTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCX0KICAgICAgfQogICAgaWYoICRtb2R1bGUtPkxvZ2dlZEluKCkgKQogICAgICB7CglpZiggJHZhbGlkID09IDAgJiYgaXNzZXQoICRwYXJtc1snZ3JvdXAnXSApICkKCSAgewoJICAgIGZvcmVhY2goICRwYXJtc1snZ3JvdXAnXSBhcyAkZyApIAoJICAgIHsKCSAgICAgICRnaWQgPSAkbW9kdWxlLT5HZXRHcm91cElEKCRnKTsKCSAgICAgIGlmKCAkbW9kdWxlLT5NZW1iZXJPZkdyb3VwKCR1aWQsICRnaWQpICkKCQl7CgkJICAvLyB5ZXAuLi4gaGUncyB2YWxpZAoJCSAgJHZhbGlkID0gMTsKCQkgIGJyZWFrOwoJCX0KCSAgICB9CgkgIH0KCWlmKCAkdmFsaWQgPT0gMCAmJiBpc3NldCggJHBhcm1zWyd1c2VyJ10gKSApCgkgIHsKCSAgICBmb3JlYWNoKCAkcGFybXNbJ3VzZXInXSBhcyAkdSApCgkgICAgewoJICAgICAgaWYoIHN0cmNhc2VjbXAoJHUsJG1vZHVsZS0+TG9nZ2VkSW5OYW1lKCkpID09IDAgKQoJCXsKCQkgIC8vIHllcC4uLiBoZSdzIHZhbGlkCgkJICAkdmFsaWQgPSAxOwoJCSAgYnJlYWs7CgkJfQoJICAgIH0KCSAgfQoJaWYoICR2YWxpZCA9PSAwICYmIGlzc2V0KCAkcGFybXNbJ2xvZ2dlZGluJ10gKSApCgkgIHsKCSAgICAkdmFsaWQgPSAxOwoJICB9CiAgICAgIH0KCiAgICBpZiggJHZhbGlkID09IDAgKSByZXR1cm4gRkFMU0U7CiAgICByZXR1cm4gVFJVRTsKICB9CgogIAogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEVkaXQgdGhlIGNvbnRlbnQgYmVmb3JlIHJlbmRlcmluZwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIENvbnRlbnRQcmVSZW5kZXIoJiRjb250ZW50KQogIHsKICAgICRtb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY3VzdG9tY29udGVudF9pcCcsIGdldGVudignUkVNT1RFX0FERFInKSApOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjdXN0b21jb250ZW50X2xvZ2dlZGluJywoJG1vZHVsZS0+TG9nZ2VkSW5JZCgpID4gMCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjdXN0b21jb250ZW50X2xvZ2lubmFtZScsJG1vZHVsZS0+TG9nZ2VkSW5OYW1lKCkpOwogICAgJGdyb3VwcyA9ICRtb2R1bGUtPkdldE1lbWJlckdyb3Vwc0FycmF5KCAkbW9kdWxlLT5Mb2dnZWRJbklkKCkgKTsKICAgICR0eHQgPSAnJzsKICAgIGZvcmVhY2goICRncm91cHMgYXMgJGdycCApCiAgICAgIHsKIAkkZ24gPSAkbW9kdWxlLT5HZXRHcm91cE5hbWUoJGdycFsnZ3JvdXBpZCddKTsKICAJJHR4dCAuPSAkZ24uIiwiOwogCSR0aGlzLT5zbWFydHktPmFzc2lnbignY3VzdG9tY29udGVudF9tZW1iZXJvZl8nLiRnbiwxKTsKICAgICAgfQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjdXN0b21jb250ZW50X2dyb3VwcycsJHR4dCk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2N1c3RvbWNvbnRlbnRfZ3JvdXBjb3VudCcsY291bnQoJGdyb3VwcykpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEVkaXQgdGhlIGNvbnRlbnQgYWZ0ZXIgcmVuZGVyaW5nCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gQ29udGVudFBvc3RSZW5kZXIoJiRjb250ZW50KQogIHsKICAgICRtb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJG1vZHVsZSApCiAgICAgIHsKCS8vIGNvdWxkbid0IGdldCBhIHVzZXJpZCBpbnN0YW5jZSwgZG8gbm90aGluZwoJcmV0dXJuOwogICAgICB9CgogICAgaWYoICR0aGlzLT5zdWJzdGl0dXRlX2NvbnRlbnQgIT0gdHJ1ZSApCiAgICAgIHsKCS8vIHdlIGNhbiBsZWF2ZSB0aGUgcGFnZSBhcyBpcyBmb3Igbm93IEkgZ3Vlc3MKLy8gCSRjb250ZW50PXByZWdfcmVwbGFjZSgkdGhpcy0+c3RhcnRfbWFya2VyX3JlZ2V4cCwiIiwkY29udGVudCk7Ci8vIAkkY29udGVudD1wcmVnX3JlcGxhY2UoJHRoaXMtPmVuZF9tYXJrZXIsIiIsJGNvbnRlbnQpOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gc3RhcnQgcHJvY2Vzc2luZyB0YWdzCiAgICAkYmVmb3JldGFnID0gLTE7CiAgICAkYWZ0ZXJ0YWcgID0gLTE7CiAgICAkZXhwZWN0ID0gMDsKICAgICRsb29wID0gMDsKICAgICRpbmNsdWRlX3N0YXJ0ID0gLTE7CiAgICAkaW5jbHVkZV9lbmQgPSAtMTsKICAgICRwb3MgPSAwOwogICAgd2hpbGUoICRsb29wIDwgMTUwICkgCiAgICAgIHsKCS8vIGluY3JlbWVudCBhIGxvb3AgY291bnRlciAoYXZvaWQgZW5kbGVzcyBsb29wcykKCSRsb29wKys7CgoJLy8gZmluZCB0aGUgc3RhcnQgb2YgdGhlIHRhZwoJJHRhZ19zdGFydHBvcyA9IHN0cnBvcygkY29udGVudCwgJHRoaXMtPnN0YXJ0X21hcmtlciwkcG9zKTsKCWlmKCAkdGFnX3N0YXJ0cG9zID09IGZhbHNlICkgcmV0dXJuOwoKCS8vIG5vdyBoYXZlIHRvIGZpbmQgdGhlIGVuZCBvZiB0aGUgbWFya2VyCgkkdGFnX2VuZHBvcyA9IHN0cnBvcygkY29udGVudCwkdGhpcy0+ZW5kX21hcmtlciwkdGFnX3N0YXJ0cG9zKTsKCSR0YWdfZW5kcG9zICs9IHN0cmxlbigkdGhpcy0+ZW5kX21hcmtlcik7CgoJLy8gYW5kIGdldCB0aGUgZW50aXJlIHRhZwoJJHRhZyA9IHRyaW0oc3Vic3RyKCRjb250ZW50LCR0YWdfc3RhcnRwb3MsJHRhZ19lbmRwb3MtJHRhZ19zdGFydHBvcykpOwoKCS8vIHJlbW92ZSB0aGUgc3RhcnQgdGFnIGFuZCBlbmQgdGFnCgkkc3RyID0gc3Vic3RyKCR0YWcsc3RybGVuKCR0aGlzLT5zdGFydF9tYXJrZXIpKTsKCSRzdHIgPSB0cmltKHN1YnN0cigkc3RyLDAsc3RybGVuKCRzdHIpLXN0cmxlbigkdGhpcy0+ZW5kX21hcmtlcikpKTsKCSRkYXRhID0gcHJlZ19zcGxpdCgnL1xccysvJywkc3RyKTsKCWlmKCBjb3VudCgkZGF0YSkgPT0gMCApCgkgIHsKCSAgICAvLyBhbiBlcnJvciBvY2N1cnJlZCBoZXJlCgkgICAgcmV0dXJuOwoJICB9CgoJLy8gcGFyc2UgdGhlIGNvbW1hbmQgaW50byBjb21tbmQgYW5kIHBhcmFtZXRlcnMKCSRjbWQgPSBhcnJheV9zaGlmdCgkZGF0YSk7CgkkcGFybXMgPSBhcnJheSgpOwoJZm9yZWFjaCggJGRhdGEgYXMgJGQgKQoJICB7CgkgICAgJG9wdHMgPSBzcGxpdCgiOyIsJGQpOwoJICAgIGZvcmVhY2goICRvcHRzIGFzICRvcHQgKSB7CgkgICAgICAkcCA9IHN0cnBvcygkb3B0LCc9Jyk7CgkgICAgICBpZiggJHAgIT0gMCApCgkJewoJCSAgJGsgPSBzdWJzdHIoJG9wdCwwLCRwKTsKCQkgICR2ID0gc3Vic3RyKCRvcHQsJHArMSk7CgkJICAkdmFscyA9IHNwbGl0KCIsIiwkdik7CgkJICAkcGFybXNbJGtdID0gJHZhbHM7CgkJfQoJICAgICAgZWxzZQoJCSRwYXJtc1skb3B0XSA9IDE7CgkgICAgfQoJICB9CgkKCS8vIGFuZCBub3cgaGFuZGxlIHRoZSBjb21tYW5kCglzd2l0Y2goICRjbWQgKQoJICB7CgkgIGNhc2UgJ3N0YXJ0aWYnOgoJICBjYXNlICdzdGFydCc6CgkgICAgewoJICAgICAgaWYoICRleHBlY3QgIT0gMCApCgkJewoJCSAgLy8gZXJyb3IgaGVyZSwgd2UncmUgZXhwZWN0aW5nIHNvbWV0aW5nCgkJICByZXR1cm47CgkJfQoJICAgICAgLy8gZXZhbHVhdGUgdGhlIHBhcmFtZXRlcnMsIHRvIHNlZSBpZiB3ZSBtYXRjaGVtCgkgICAgICBpZiggJHRoaXMtPl9ldmFsdWF0ZSggJHBhcm1zICkgKSAKCQl7CgkJICAvLyBjb25kaXRpb25zIHBhc3NlZCwgbm93IHdlIGhhdmUgdG8gaW5jbHVkZSBldmVyeXRoaW5nIHRpbGwgdGhlIG5leHQKCQkgIC8vIHRhZyB3aGljaCBpcyBlaXRoZXIgYW4gZW5kaWYgb3IgYW4gZWxzZQoJCSAgJGluY2x1ZGVfc3RhcnQgPSAkdGFnX2VuZHBvczsKCQl9CgkgICAgICAvLyBnZXQgcmVhZHkgdG8gY29udGludWUKCSAgICAgICRiZWZvcmV0YWcgPSAkdGFnX3N0YXJ0cG9zOwoJICAgICAgJGV4cGVjdCA9IDI7CgkgICAgICBicmVhazsKCSAgICB9CgkgIGNhc2UgJ2Vsc2UnOgoJICAgIHsKCSAgICAgIGlmKCAkZXhwZWN0ICE9IDEgJiYgJGV4cGVjdCAhPSAyICkKCQl7CgkJICAvLyBlcnJvciBoZXJlLCB3ZSdyZSBleHBlY3RpbmcgYSBjZXJ0YWluIHNvbWV0aGluZwoJCSAgcmV0dXJuOwoJCX0KCSAgICAgIGlmKCAkaW5jbHVkZV9zdGFydCA9PSAtMSApIAoJCXsKCQkgIC8vIHdlIGZhaWxlZCB0aGUgbGFzdCBjb25kaXRpb24gCgkJICAkaW5jbHVkZV9zdGFydCA9ICR0YWdfZW5kcG9zOwoJCX0KCSAgICAgIGVsc2UgCgkJewoJCSAgLy8gd2UgcGFzc2VkIHRoZSBsYXN0IGNvbmRpdGlvbiBzbyByZWNvcmQgYW5kIGVuZCBwb3NpdGlvbgoJCSAgJGluY2x1ZGVfZW5kID0gJHRhZ19zdGFydHBvczsKCQl9CgoJICAgICAgLy8gZ2V0IHJlYWR5IHRvIGNvbnRpbnVlCgkgICAgICAkZXhwZWN0ID0gMjsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgY2FzZSAnZW5kJzoKCSAgY2FzZSAnZW5kaWYnOgoJICAgIHsKCSAgICAgIGlmKCAkZXhwZWN0ICE9IDEgJiYgJGV4cGVjdCAhPSAyICkKCQl7CgkJICAvLyBlcnJvciBoZXJlLCB3ZSdyZSBleHBlY3RpbmcgYSBjZXJ0YWluIHNvbWV0aGluZwoJCSAgcmV0dXJuOwoJCX0KCgkgICAgICBpZiggJGluY2x1ZGVfZW5kID09IC0xICYmICRpbmNsdWRlX3N0YXJ0ICE9IC0xICkKCQl7CgkJICAvLyBub3cgY2F0Y2ggdGhlIGVuZCBwb3NpdGlvbiBvZiB3aGF0IHdlIGhhdmUgdG8gaW5jbHVkZQoJCSAgJGluY2x1ZGVfZW5kID0gJHRhZ19zdGFydHBvczsKCQl9CgkgICAgICAkYWZ0ZXJ0YWcgPSAkdGFnX2VuZHBvczsKCgkgICAgICAvLyBnZXQgcmVhZHkgdG8gY29udGludWUKCSAgICAgICRleHBlY3QgPSAwOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBkZWZhdWx0OgoJICAgIHsKCSAgICAgIC8vIHVua25vd24gY29tbWFuZAoJICAgICAgcmV0dXJuOwoJICAgIH0KCSAgfQoKCWlmKCAkYmVmb3JldGFnICE9IC0xICYmICRhZnRlcnRhZyAhPSAtMSApCgkgIHsKCSAgICAvLyB3ZSBoYXZlIGEgd2hvbGUgc2VjdGlvbiAoaG9wZWZ1bGx5KQoJICAgICRuZXdzdGFydCA9IHN1YnN0cigkY29udGVudCwwLCRiZWZvcmV0YWcpOwoJICAgICRpbmNsdWRlICA9IHN1YnN0cigkY29udGVudCwkaW5jbHVkZV9zdGFydCwkaW5jbHVkZV9lbmQtJGluY2x1ZGVfc3RhcnQpOwoJICAgICRuZXdlbmQgICA9IHN1YnN0cigkY29udGVudCwkYWZ0ZXJ0YWcpOwoJICAgICRjb250ZW50ID0gJG5ld3N0YXJ0LiRpbmNsdWRlLiRuZXdlbmQ7CgkgICAgJGluY2x1ZGVfc3RhcnQgPSAtMTsKCSAgICAkaW5jbHVkZV9lbmQgPSAtMTsKCSAgICAkYmVmb3JldGFnID0gLTE7CgkgICAgJGFmdGVydGFnID0gLTE7CgkgICAgJHBvcyA9IDA7CgkgIH0KCWVsc2UKCSAgewoJICAgICRwb3MgPSAkdGFnX2VuZHBvczsKCSAgfQogICAgICB9CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRG9BY3Rpb24oJGFjdGlvbiwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkKQogICBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgaWYgeW91ciBtb2R1bGUKICAgaXMgYSBwbHVnLWluIHR5cGUgbW9kdWxlLgoJICAgCiAgIEluIGdlbmVyYWwsIHlvdSdsbCB3YW50IHRvIGNhbGwgdmFyaW91cyBkaWZmZXJlbnQKICAgbWV0aG9kcywgZGVwZW5kaW5nIHVwb24gdGhlIHJlcXVlc3RlZCAiYWN0aW9uLiIKCSAgIAogICBUaGVyZSBhcmUgdHdvIGJ1aWx0LWluIGFjdGlvbnM6ICJkZWZhdWx0IiB3aGljaCBnZXRzCiAgIGNhbGxlZCBpZiB0aGUgbW9kdWxlIGlzIGFjY2Vzc2VkIGZyb20gYSBwYWdlIG9yIHRlbXBsYXRlLAogICBhbmQgImRlZmF1bHRhZG1pbiIgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSB0aGUgQWRtaW4KICAgcGFuZWwuCgkgICAKICAgVGhlIEFjdGlvbiBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIGEgZGlmZmVyZW50CiAgIGFjdGlvbiBlaXRoZXIgaW4geW91ciB0YWcsIGUuZy4sCiAgIHtjbXNfbW9kdWxlIG1vZHVsZT0nU2tlbGV0b24nIGFjdGlvbj0nc29tZXRoaW5nJ30KICAgb3IgYnkgcGFzc2luZyBpdCBpbiBhIGxpbmsgY3JlYXRlIGJ5IHRoZSBDcmVhdGVMaW5rCiAgIG1ldGhvZC4gTW9yZSBvbiB0aGF0IGNhbiBiZSBzZWVuIGJlbG93IGluIHRoZQogICBEaXNwbGF5QWRtaW5OYXYgbWV0aG9kLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybl9pZD0tMSkKICB7CiAgICBzd2l0Y2ggKCRhY3Rpb24pCiAgICAgIHsKICAgICAgY2FzZSAnZGVmYXVsdCc6Cgl7CgkgIC8vIHRoaXMgaXMgdGhlIHBsdWctaW4gc2lkZSwgaS5lLiwgbm9uLUFkbWluCgkgICR0aGlzLT5zdWJzdGl0dXRlX2NvbnRlbnQgPSB0cnVlOwoJICBicmVhazsKCX0KICAgICAgfQogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgICAKICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBkaXNwbGF5CiAgIGVycm9yIGluZm9ybWF0aW9uIG9uIHRoZSBhZG1pbiBzaWRlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICAgIGlmICgkbWVzc2FnZSAhPSAnJykKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZignbWVzc2FnZScsICRtZXNzYWdlKTsKICAgICAgfQogICAgICAKICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICB9Cn0KCj8+Cg==]]></data>
  </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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0N1c3RvbSBDb250ZW50IE1vZHVsZSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJyc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIFVuaW5zdGFsbGVkLic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1RoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgZGlmZmVyZW50IGNvbnRlbnQgYnkgZ3JvdXAgb3IgdXNlciBuYW1lJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD48bGk+VmVyc2lvbiAxLjAuIDE0IFNlcHRlbWJlciAyMDA1LiBJbml0aWFsIFJlbGVhc2UuPC9saT48L3VsPgo8dWw+CjxsaT5WZXJzaW9uIDEuMS4gIC0gU2VwdGVtYmVyIDIwMDUuIEFkZGVkIHN0YXJ0aWYvZWxzZS9lbmRpZiwgYW5kIHNlYXJjaCB0aHJvdWdoIG11bHRpcGxlIGdyb3VwcyBhbmQgdXNlcnMuPC9saT4KPGxpPlZlcnNpb24gMS4yLiAgLSBTZXB0ZW1iZXIgMjAwNS4gQWRkZWQgbG9nZ2VkaW4gb3B0aW9uYWwgcGFyYW1ldGVyPC9saT4KPGxpPlZlcnNpb24gMS4zICAgLSBPY3RvYmVyICAgMjAwNS4gQ2hhbmdlZCB0byB1c2UgRnJvbnRFbmRVc2VycyBpbnN0ZWFkIG9mIFVzZXJJRDwvbGk+CjxsaT5WZXJzaW9uIDEuMy4xIC0gTm92ZW1iZXIgMjAwNS4gVmVyeSBtaW5vciBidWdmaXggdG8gdGhlIHBhcmFtZXRlciBwYXJzaW5nPC9saT4KPGxpPgo8cD5WZXJzaW9uIDEuNC4wIC0gSmFudWFyeSwgMjAwNi48L3A+CjxwPkFkZGVkIHNtYXJ0eSBjb21wYXRpYmxlIHZhcmlhYmxlczwvcD4KPC9saT4KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5UaGlzIG1vZHVsZSwgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgVXNlcklEIG1vZHVsZSBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIHBhZ2UgdGhhdCB3aWxsIGxvb2sgZGlmZmVyZW50IGRlcGVuZGluZyB1cG9uIHRoZSBwZXJzb24gdGhhdCBsb29rcyBhdCBpdC4gIFlvdSBjYW4gc3BlY2lmeSBkaWZmZXJlbnQgY29udGVudCBmb3IgY2VydGFpbiB1c2Vycywgb3IgbWVtYmVycyBvZiBhIGNlcnRhaW4gZ3JvdXAuPC9wPgo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4KPHA+VG8gdXNlIGl0IHlvdSBwbGFjZSB0aGUgdGFnIHtjbXNfbW9kdWxlIG1vZHVsZT1DdXN0b21Db250ZW50fSBpbnRvIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZSwgYW5kIHRoZW4gYmVsb3cgdGhhdCB5b3UgcGxhY2UgdGhlIGNvbnRlbnQgeW91IHdhbnQgaXNvbGF0ZWQgdG8gc3BlY2lmaWMgdXNlcnMgaW4gZ3JvdXBzIGluIG9uZSBvZiB0d28gd2F5cywgZWl0aGVyIHVzaW5nIHNwZWNpYWxseSBmb3JtYXR0ZWQgY29tbWVudCB0YWdzLCBvciB1c2luZyBzbWFydHkgc3ludGF4LjwvcD4KPGg0Pk1ldGhvZCAxOiBjb21tZW50IHRhZ3M8L2g0Pgo8cHJlPgp7Y21zX21vZHVsZSBtb2R1bGU9Q3VzdG9tQ29udGVudH0KJmx0OyEtLWN1c3RvbUNvbnRlbnQ6IHN0YXJ0aWYgZ3JvdXA9dGVzdGVycyxhZG1pbnMgLS0mZ3Q7CiZsdDtIMSZndDtUaGlzIGNvbnRlbnQgaXMgb25seSBhdmFpbGFibGUgdG8gbG9nZ2VkIGluIHRlc3RlcnMgYW5kIGFuZCBhZG1pbnMmbHQ7L0gxJmd0OwombHQ7IS0tY3VzdG9tQ29udGVudDogZWxzZSAtLSZndDsKJmx0O0gxJmd0O1RoaXMgY29udGVudCBpcyBhdmFpbGFibGUgdG8gZXZlcnlib2R5IGVsc2UmbHQ7L0gxJmd0OwombHQ7IS0tY3VzdG9tQ29udGVudDogZW5kaWYgLS0mZ3Q7CiZsdDshLS1jdXN0b21Db250ZW50OiBzdGFydGlmIGdyb3VwPXVzZXJzIC0tJmd0OwombHQ7SDEmZ3Q7VGhpcyBjb250ZW50IGlzIG9ubHkgYXZhaWxhYmxlIHRvIGxvZ2dlZCBpbiB1c2VycyAmbHQ7L0gxJmd0OwombHQ7IS0tY3VzdG9tQ29udGVudDogZW5kaWYgLS0mZ3Q7CjwvcHJlPgo8cD48Yj5BdmFpbGFibGUgcGFyYW1ldGVyczwvYj48L3A+IAo8dWw+CjxsaT48cD48ZW0+aXA8L2VtPiAtIHRlc3QgaWYgcmVtb3RlIGlwIG1hdGNoZXMgYSBuZXR3b3JrIG9yIHN1cHBsaWVkIGlwIGFkZHJlc3MuICBWYWxpZCBmb3JtYXRzIGFyZSB4eHgueHh4Lnh4eC54eHggKGV4YWN0KSwgeHh4Lnh4eC54eHguW3l5eS16enpdIChyYW5nZSkgYW5kIHh4eC54eHgueHh4L25uIChubiA9ICMgYml0cywgaS5lLiAgMTkyLjE2OC4xLjAvMjQpPC9wPjwvbGk+CjxsaT48cD48ZW0+Z3JvdXA8L2VtPiAtIHRlc3QgaWYgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlciBpcyBhIG1lbWJlciBvZiBhbnkgb2YgdGhlIHN1cHBsaWVkIGdyb3VwczwvcD48L2xpPgo8bGk+PHA+PGVtPnVzZXI8ZW0+IC0gdGVzdCBpZiB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VybmFtZSBtYXRjaGVzIGFueSBvZiB0aGUgc3VwcGxpZWQgb25lczwvcD48L2xpPgo8bGk+PHA+PGVtPmxvZ2dlZGluPGVtPiAtIHRlc3QgaWYgdGhlIGN1cnJlbnQgdXNlciBpcyBsb2dnZWQgaW4gb3Igbm90Li9wPjwvbGk+CjwvdWw+CjxwPlRlc3RzIGFyZSBldmFsdWF0ZWQgaW4gYSBsb2dpY2FsIE9SIGZhc2hpb24gaW4gb3JkZXIgYXMgZm9sbG93cyBpcCBhZGRyZXNzLCBncm91cCwgYW5kIHVzZXIuICBUaGUgZmlyc3Qgc3VjY2Vzc2Z1bGwgdGVzdCB3aWxsIHJlc3VsdCBpbiB0aGUgZXhwcmVzc2lvbiBldmFsdWF0aW9uZyB0byB0cnVlPC9wPgo8aDQ+TWV0aG9kIDI6IHNtYXJ0eSBzeW50YXg8L2g0Pgo8cHJlPgp7Y21zX21vZHVsZSBtb2R1bGU9Q3VzdG9tQ29udGVudH0Ke2lmIGN1c3RvbWNvbnRlbnRfbG9nZ2VkaW59CiAgV2VsY29tZSAmbHQ7YiZndDt7Y3VzdG9tY29udGVudF9sb2dpbm5hbWV9Jmx0Oy9iJmd0OyZsdDtici8mZ3Q7CnsvaWZ9CjwvcHJlPgo8cD5Bbnkgc21hcnR5IGNvbXBhdGlibGUgZXhwcmVzc2lvbnMgb3IgbG9naWMgY2FuIGJlIHVzZWQgd2l0aCB0aGUgYXZhaWxhYmxlIHZhcmlhYmxlcy4gIFVzaW5nIHRoaXMgc3ludGF4LCBleHByZXNzaW9ucyBtYXkgYmUgbmVzdGVkLCBvciBjb21wbGV4IGxvZ2ljIHVzZWQuPC9wPgo8cD48Yj5BdmFpbGFibGUgdmFyaWFibGVzOjwvYj48L3A+Cjx1bD4KPGxpPjxwPjxlbT5jdXN0b21jb250ZW50X2lwPC9lbT4gLSBUaGUgcmVtb3RlIElQIGFkZHJlc3M8L3A+PC9saT4KPGxpPjxwPjxlbT5jdXN0b21jb250ZW50X2xvZ2dlZGluPC9lbT4gLSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3ZXRoZXIgdGhlIHVzZXIgaXMgbG9nZ2VkIGluIG9yIG5vdDwvcD48L2xpPgo8bGk+PHA+PGVtPmN1c3RvbWNvbnRlbnRfbG9naW5uYW1lPC9lbT4gLSBUaGUgbmFtZSBvZiB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyPC9wPjwvbGk+CjxsaT48cD48ZW0+Y3VzdG9tY29udGVudF9ncm91cGNvdW50PC9lbT4gLSBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZ3JvdXBzIHRoaXMgdXNlciBpcyBhIG1lbWJlciBvZjwvcD48L2xpPgo8bGk+PHA+PGVtPmN1c3RvbWNvbnRlbnRfZ3JvdXBzPC9lbT4gLSBBIHN0cmluZyBjb250YWluaW5nIHRoZSBncm91cCBuYW1lcyBvZiBhbGwgbWVtYmVyIGdyb3VwczwvcD48L2xpPgo8bGk+PHA+PGVtPmN1c3RvbWNvbnRlbnRfbWVtYmVyb2ZfKjwvZW0+IC0gQSBzZXJpZXMgb2YgYm9vbGVhbiB2YXJpYWJsZXMgaW5kaWNhdGluZyBncm91cCBtZW1iZXJzaGlwLiAgaS5lLjogY3VzdG9tY29udGVudF9tZW1iZXJvZl9zdGFmZiwgY3VzdG9tY29udGVudF9tZW1iZXJvZl91c2VycywgZXRjLiAgTm8gdmFyaWFibGVzIGFyZSBkZWZpbmVkIGZvciBncm91cHMgdGhhdCB0aGlzIHVzZXIgaXMgbm90IGEgbWVtYmVyIG9mLjwvcD48L2xpPgo8L3VsPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbGwgPGEgaHJlZj0ibWFpbHRvOnJvYkB0ZWNoY29tLmR5bmRucy5vcmciPiZsdDtyb2JAdGVjaGNvbS5keW5kbnMub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KJzsKPz4K]]></data>
  </file>
</module>
