<?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>Banners</name>
  <version>2.0.7</version>
  <help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgYmFubmVyIG1hbmFnZXMgbnVtZXJvdXMgY2F0ZWdvcmllcyBvZiBiYW5uZXJzLCB0cmFja3MgaGl0cywgaW1wcmVzc2lvbnMsIGFuZCBleHBpcnkgZGF0ZXMsIGFuZCByYW5kb21seSBzZWxlY3RzIGZyb20gYWxsIGF2YWlsYWJsZSBhbmQgdmFsaWQgYmFubmVycyBmb3Igb25lIHRvIGRpc3BsYXk8L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UbyB1c2UgdGhpcyBtb2R1bGUsIHBsYWNlIHRoZSBtb2R1bGUgY29kZSBpbiBhIHBhZ2Ugb3IgdGVtcGxhdGUgdXNpbmcgdGhlIHNtYXJ0eSB0YWcgJiMxMjM7Y21zX21vZHVsZSBtb2R1bGU9J0Jhbm5lcnMnIGNhdGVnb3J5PSI8Y2F0ZWdvcnk+In08L3A+IAo8cD5Zb3UgbXVzdCBhbHNvIHVwbG9hZCBiYW5uZXJzIHRvIGEgc3VpdGFibGUgZGlyZWN0b3J5IHdpdGhpbiB0aGUgdXBsb2FkcyBkaXJlY3RvcnkgYW5kIG11c3QgdXNlIHRoZSBhZG1pbiBwYW5lbCBpbnRlcmZhY2UgdG8gYWRkIGJhbm5lcnMgdG8gdGhlIGRhdGFiYXNlLjwvcAo8aDM+UGFyYW1ldGVyczwvaDM+Cjx1bD4KPGxpPjxlbT4oUkVRVUlSRUQpPC9lbT4gY2F0ZWdvcnk9ImNhdGVnb3J5IiA9IHJhbmRvbWx5IHNlbGVjdCBmcm9tIGFsbCBhdmFpbGFibGUgaW4gdGhpcyBjYXRlZ29yeTwvbGk+CjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IG5hbWU9Im5hbWUiID0gc2VsZWN0IG9ubHkgdGhlIGJhbm5lciB3aXRoIHRoaXMgbmFtZTwvbGk+CjwvdWw+CjxoND5IaW50PC9oND4KPHA+VGhlIHVwbG9hZHMgbW9kdWxlIGFuZCB0aGUgYmFubmVycyBtb2R1bGUgd29yayB3ZWxsIHRvZ2V0aGVyLiAgWW91IGNhbiBjcmVhdGUgYSAiYmFubmVycyIgY2F0ZWdvcnkgaW4gdGhlIHVwbG9hZHMgbW9kdWxlLCBhbmQgdXBsb2FkIHlvdXIgYmFubmVyIGltYWdlcyB0aGVyZSwgdGhlbiBzcGVjaWZ5ICJiYW5uZXJzLzxmaWxlbmFtZT4iIHdoZW4gYWRkaW5nIGEgYmFubmVyIGluIHRoZSBiYW5uZXJzIG1vZHVsZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=</help>
  <about>PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtyb2JAdGVjaGNvbS5keW5kbnMub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDIuMC43PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgo8bGk+VmVyc2lvbiAxLjAuIDYgQXVndXN0IDIwMDUuIEluaXRpYWwgUmVsZWFzZS48L2xpPgo8bGk+VmVyc2lvbiAyLjAuIFNlcHRlbWJlciAyMDA1LiBJbml0aWFsIFJlbGVhc2UgZm9yIDAuMS4uPC9saT4KPGxpPlZlcnNpb24gMi4wLjEuIFNlcHRlbWJlciAyMDA1LiBEaXNwbGF5IHNhbXBsZSBiYW5uZXIgaW4gdGhlIGVkaXQgYmFubmVyIHBhZ2UsIGFkZGVkIG5hbWU9IHBhcmFtZXRlciwgYW5kIG1hZGUgc3VibmV0IGV4Y2x1c2lvbnMgd29yay4gIEFsc28gY2hhbmdlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZGF0YWJhc2UgdG8gYWxsb3cgZm9yIGFkZGl0aW9uYWwgdGV4dCBpbiB0aGUgbGluayBhbmQgaW1hZ2UgdGFncy48L2xpPgo8bGk+VmVyc2lvbiAyLjAuMi4gU2VwdGVtYmVyIDIwMDUuIEFkZGVkIGludGVncmF0aW9uIHdpdGggdGhlIHVwbG9hZHMgbW9kdWxlICgxLjAuNikgc28gdGhhdCB3ZSBjYW4gZ2V0IGxpdHMgb2YgZmlsZXMgZm9yIGJhbm5lcnMsIGV0Yy4gIFRoZSBiYW5uZXJzIG1vZHVsZSBpcyBzdGlsbCBvcHRpb25hbCB0aG91Z2guPC9saT4KPGxpPlZlcnNpb24gMi4wLjMuIFNlcHRlbWJlciAyMDA1LiBGaXhlZCBhIHZlcnkgbWlub3IgaXNzdWUgd2l0aCBuZXZlciBleHBpcmVzLi48L2xpPgo8bGk+VmVyc2lvbiAyLjAuNC4gU2VwdGVtYmVyIDIwMDUuIEZpeGVkIGEgdmVyeSBtaW5vciBpc3N1ZSB3aXRoIG1vZHVsZSBkZXBlbmRlbmNpZXMsIGFuZCBhIGJpZyBidWcgaW4gdGhlIGRhdGFiYXNlIHNwZWMgaWYgeW91IGRpZCBhIHNjcmF0Y2ggaW5zdGFsbC48L2xpPgo8bGk+VmVyc2lvbiAyLjAuNS4gT2N0b2JlciAyMDA1LiBBZGQgY29tZW50cyBhcm91bmQgdGhlIG91dHB1dDwvbGk+CjxsaT5WZXJzaW9uIDIuMC42LiBEZWNlbWJlciAyMDA1LiBNaW5vciB2YWxpZGF0aW9uIGZpeGVzLCBkZXNjcmlwdGlvbiBpcyBub3cgb3V0cHV0IGJldHdlZW4gdGhlIDxpbWc+YW5kPC9pbWc+IHRhZ3MsIGFuZCBhbiBhbHQgYXR0cmlidXRlIGlzIGluIHRoZSBpbWcgdGFnLjwvbGk+CjxsaT5WZXJzaW9uIDIuMC43LiBKYW51YXJ5IDIwMDYuIE1vcmUgdmFsaWRhdGlvbiBmaXhlcywgTW92ZWQgdGhlIGFkbWluIHRhYnMgYXJvdW5kLCBmaXhlZCBhbiBpc3N1ZSB3aGVyZSB5b3UgY291bGQgYWxtb3N0IGNyZWF0ZSBhIGJhbm5lciB3aXRob3V0IGRlZmluaW5nIGEgY2F0ZWdvcnksIGFuZC4uLiBmaXhlZCB0aGUgZXhwaXJ5IGRhdGUgaXNzdWUgZm9yIGdvb2QgKGhvcGVmdWxseSkuPC9saT4KPC91bD48YnIgLz4=</about>
  <description>A module to manage rotating banners</description>
  <file>
    <filename>/</filename>
    <isdir>1</isdir>
  </file>
  <file>
    <filename>/Banners.module.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEJhbm5lcnMgLSBBIGJhbm5lciBhZG1pbmlzdHJhdGlvbiBtb2R1bGUKIyBWZXJzaW9uOiAyLjAuNywgQ2FsZ3V5MTAwMAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBCYW5uZXJzIGV4dGVuZHMgQ01TTW9kdWxlCnsKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfdGVzdGlwKCRyYW5nZSwkaXApCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIAogICBUaGlzIGlzIGEgZnVuY3Rpb24gdG8gbWF0Y2ggYW4gSVAgYWRkcmVzcyBhZ2FpbnN0IGFuIAogICBhZGRyZXNzIHJhbmdlIHNwZWNpZmljYXRpb24uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX3Rlc3RpcCgkcmFuZ2UsJGlwKSAKICB7CiAgICAkcmVzdWx0ID0gMTsKCiMgSVAgUGF0dGVybiBNYXRjaGVyCiMgSi5BZGFtcyA8am5hQHJldGluYS5uZXQ+CiAgICAjCiMgTWF0Y2hlczoKICAgICMKIyB4eHgueHh4Lnh4eC54eHggICAgICAgIChleGFjdCkKIyB4eHgueHh4Lnh4eC5beXl5LXp6el0gIChyYW5nZSkKIyB4eHgueHh4Lnh4eC54eHgvbm4gICAgKG5uID0gIyBiaXRzLCBjaXNjbyBzdHlsZSAtLSBpLmUuIC8yNCA9IGNsYXNzIEMpCiAgICAjCiMgRG9lcyBub3QgbWF0Y2g6CiMgeHh4Lnh4eC54eHgueHhbeXl5LXp6el0gIChyYW5nZSwgcGFydGlhbCBvY3RldHMgbm90IHN1cHBvcnRlZCkKCiAgICBpZiAoZXJlZygiKFswLTldKylcLihbMC05XSspXC4oWzAtOV0rKVwuKFswLTldKykvKFswLTldKykiLCRyYW5nZSwkcmVncykpIHsKCiMgcGVyZm9ybSBhIG1hc2sgbWF0Y2gKICAgICAgJGlwbCA9IGlwMmxvbmcoJGlwKTsKICAgICAgJHJhbmdlbCA9IGlwMmxvbmcoJHJlZ3NbMV0gLiAiLiIgLiAkcmVnc1syXSAuICIuIiAuICRyZWdzWzNdIC4gIi4iIC4gJHJlZ3NbNF0pOwoKICAgICAgJG1hc2tsID0gMDsKCiAgICAgIGZvciAoJGkgPSAwOyAkaTwgMzE7ICRpKyspIHsKCWlmICgkaSA8ICRyZWdzWzVdLTEpIHsKCSAgJG1hc2tsID0gJG1hc2tsICsgcG93KDIsKDMwLSRpKSk7Cgl9CiAgICAgIH0KCiAgICAgIGlmICgoJG1hc2tsICYgJHJhbmdlbCkgPT0gKCRtYXNrbCAmICRpcGwpKSB7CglyZXR1cm4gMTsKICAgICAgfSBlbHNlIHsKCXJldHVybiAwOwogICAgICB9CiAgICB9IGVsc2UgewoKIyByYW5nZSBiYXNlZAogICAgICAkbWFza29jdHMgPSBzcGxpdCgiXC4iLCRyYW5nZSk7CiAgICAgICRpcG9jdHMgPSBzcGxpdCgiXC4iLCRpcCk7CgojIHBlcmZvcm0gYSByYW5nZSBtYXRjaAogICAgICBmb3IgKCRpPTA7ICRpPDQ7ICRpKyspIHsKCWlmIChlcmVnKCJcWyhbMC05XSspXC0oWzAtOV0rKVxdIiwkbWFza29jdHNbJGldLCRyZWdzKSkgewoJICBpZiAoICgkaXBvY3RzWyRpXSA+ICRyZWdzWzJdKSB8fCAoJGlwb2N0c1skaV0gPCAkcmVnc1sxXSkpIHsKCSAgICAkcmVzdWx0ID0gMDsKCSAgfQoJfQoJZWxzZQoJICB7CgkgICAgaWYgKCRtYXNrb2N0c1skaV0gPD4gJGlwb2N0c1skaV0pIHsKCSAgICAgICRyZXN1bHQgPSAwOwoJICAgIH0KCSAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfQWRtaW5BZGRCYW5uZXIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIFByb3ZpZGUgYSBmb3JtIHRvIGFsbG93IHVzZXJzIHRvIGFkZCBhIGJhbm5lciB0byBhIGNhdGVnb3J5CiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0FkbWluQWRkQmFubmVyKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCAhaXNzZXQoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkgKSAKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CglyZXR1cm47CiAgICAgIH0KICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3RpdGxlJywgJHRoaXMtPkxhbmcgKCdhZGRiYW5uZXInKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdzdGFydGZvcm0nLAoJCQkgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsCgkJCQkJCSAgICdkb19hZGRiYW5uZXInLAoJCQkJCQkgICAkcmV0dXJuaWQpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdzdWJtaXQnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsCgkJCQkJCSAgICAgJ1N1Ym1pdCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2NhbmNlbCcsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnY2FuY2VsJywKCQkJCQkJICAgICAnQ2FuY2VsJykpOwogIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgncHJvbXB0X2Jhbm5lcm5hbWUnLAoJCQkgICAkdGhpcy0+TGFuZyAoJ25hbWUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbnB1dF9iYW5uZXJuYW1lJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfYmFubmVybmFtZScsCgkJCQkJCSAgICIiLCAyMCwgODApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9iYW5uZXJkZXNjJywKCQkJICAgJHRoaXMtPkxhbmcgKCdkZXNjcmlwdGlvbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2Jhbm5lcmRlc2MnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9iYW5uZXJkZXNjJywKCQkJCQkJICAgIiIsIDgwLCAyNTUpKTsKICAKICAgIC8vIHdlJ3JlIGdvbm5hIHF1ZXJ5IHRoZSB1cGxvYWRzIG1vZHVsZSAob3B0aW9uYWxseSkgdG8gcHJvdmlkZSBhIGxpc3Qgb2YKICAgIC8vIGJhbm5lcnMsIHJhdGhlciB0aGFuIGhhdmUgdGhlIHVzZXIgdHlwZSBpbiBhIGZpbGUKICAgICRtb2R1bGUgPSAkdGhpcy0+X2dldFVwbG9hZHNNb2R1bGUoKTsKICAgIGlmKCAkbW9kdWxlICkKICAgICAgewoJLy8gdG9kbwogICAgICB9CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfaW1hZ2UnLAoJCQkgICAkdGhpcy0+TGFuZyAoJ2ltYWdlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5wdXRfaW1hZ2UnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9pbWFnZScsCgkJCQkJCSAgICIiLCA1MCwgMjU1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbmZvX2ltYWdlJywKCQkJICAgJHRoaXMtPkxhbmcgKCdpbmZvX2ltYWdlJykpOwogIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgncHJvbXB0X3VybCcsCgkJCSAgICR0aGlzLT5MYW5nICgndXJsJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5wdXRfdXJsJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfdXJsJywKCQkJCQkJICAgIiIsIDUwLCAyNTUpKTsKICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9ocmVmX3RleHQnLAoJCQkgICAkdGhpcy0+TGFuZyAoJ2hyZWZfdGV4dCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2hyZWZfdGV4dCcsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQgKCRpZCwgJ2lucHV0X2hyZWZfdGV4dCcsCgkJCQkJCSAgICcnLCA4MCwgMjU1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbmZvX2hyZWZfdGV4dCcsCgkJCSAgICR0aGlzLT5MYW5nICgnaW5mb19ocmVmX3RleHQnKSk7CiAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfaW1hZ2VfdGV4dCcsCgkJCSAgICR0aGlzLT5MYW5nICgnaW1hZ2VfdGV4dCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2ltYWdlX3RleHQnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9pbWFnZV90ZXh0JywKCQkJCQkJICAgIiIsIDgwLCAyNTUpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2luZm9faW1hZ2VfdGV4dCcsCgkJCSAgICR0aGlzLT5MYW5nICgnaW5mb19pbWFnZV90ZXh0JykpOwogIAogIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgncHJvbXB0X21heF9pbXByZXNzaW9ucycsCgkJCSAgICR0aGlzLT5MYW5nICgnbWF4X2ltcHJlc3Npb25zJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5wdXRfbWF4X2ltcHJlc3Npb25zJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfbWF4X2ltcHJlc3Npb25zJywKCQkJCQkJICAgIjAiLCAzLCA1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbmZvX21heF9pbXByZXNzaW9ucycsCgkJCSAgICR0aGlzLT5MYW5nICgnaW5mb19tYXhfaW1wcmVzc2lvbnMnKSk7CiAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfZXhwaXJlcycsCgkJCSAgICR0aGlzLT5MYW5nICgnZXhwaXJlcycpKTsKICAgICRleHBpcmVzZGF0ZSA9IHN0cnRvdGltZSgnKzYgbW9udGhzJywgdGltZSgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2V4cGlyZXNkYXRlcHJlZml4JywgJGlkLidleHBpcmVzZGF0ZV8nKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2V4cGlyZXNkYXRlJywgJGV4cGlyZXNkYXRlICk7CiAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25ldmVyZXhwaXJlcycsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCdpbnB1dF9uZXZlcmV4cGlyZXMnLDAsMSkuJHRoaXMtPkxhbmcoJ25ldmVyJykpOwoKICAgICRtb2R1bGUgPSAkdGhpcy0+X2dldFVwbG9hZHNNb2R1bGUoKTsKICAgIGlmKCAkbW9kdWxlICkKICAgICAgewoJLy8gZ2V0IHRoZSBjYXRlZ29yeSBpbmZvLCBhbmQgZmluZCB0aGUgdXBsb2FkIGNhdGVnb3J5IGlkCgkkZGIgPSAkdGhpcy0+Y21zLT5kYjsKCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVyc19jYXRlZ29yaWVzICIuCgkgICJXSEVSRSBjYXRlZ29yeV9pZCA9ID8iOwoJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnksIGFycmF5KCAkcGFyYW1zWydjYXRlZ29yeV9pZCddICkgKTsKCSRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CglpZiggaXNzZXQoJHJvd1sndXBsb2Fkc19jYXRlZ29yeV9pZCddKSApIHsKCSAgLy8gbm93IGdldCBhIGxpc3Qgb2YgYWxsIG9mIHRoZSBmaWxlcyBpbiB0aGF0IGNhdGVnb3J5CgkgICRmaWxlbGlzdCA9ICRtb2R1bGUtPmdldEZpbGVMaXN0KCAkcm93Wyd1cGxvYWRzX2NhdGVnb3J5X2lkJ10gKTsKCSAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdXBsb2FkX2ZpbGUnLAoJCQkJJHRoaXMtPkxhbmcoJ3Byb21wdF91cGxvYWRfZmlsZScpKTsKCSAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF91cGxvYWRfZmlsZScsCgkJCQkkdGhpcy0+Q3JlYXRlSW5wdXREcm9wRG93biAoJGlkLCAiaW5wdXRfdXBsb2FkX2ZpbGUiLCAkZmlsZWxpc3QsIC0xKSk7Cgl9CiAgICAgIH0KCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnaW5wdXRfY2F0ZWdvcnlfaWQnLCRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10pKTsKCiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGJhbm5lci50cGwnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfQWRtaW5BZGRDYXRlZ29yeSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKICAgUHJvdmlkZSBhIGZvcm0gdG8gYWxsb3cgdXNlcnMgdG8gYWRkIGEgY2F0ZWdvcnkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfQWRtaW5BZGRDYXRlZ29yeSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAvLyBwb3B1bGF0ZSB0aGUgdGVtcGxhdGUKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3RpdGxlJywgJHRoaXMtPkxhbmcgKCdhZGRjYXRlZ29yeScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3N0YXJ0Zm9ybScsCgkJCSAgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQgKCRpZCwKCQkJCQkJICAgJ2RvX2FkZGNhdGVnb3J5JywKCQkJCQkJICAgJHJldHVybmlkKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnc3VibWl0JywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLAoJCQkJCQkgICAgICdTdWJtaXQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdjYW5jZWwnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2NhbmNlbCcsCgkJCQkJCSAgICAgJ0NhbmNlbCcpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfY2F0ZWdvcnluYW1lJywKCQkJICAgJHRoaXMtPkxhbmcgKCdwcm9tcHRfY2F0ZWdvcnluYW1lJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5wdXRfY2F0ZWdvcnluYW1lJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfY2F0ZWdvcnluYW1lJywKCQkJCQkJICAgIiIsIDIwLCA4MCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgncHJvbXB0X2NhdGVnb3J5ZGVzYycsCgkJCSAgICR0aGlzLT5MYW5nICgncHJvbXB0X2NhdGVnb3J5ZGVzYycpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2NhdGVnb3J5ZGVzYycsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQgKCRpZCwgJ2lucHV0X2NhdGVnb3J5ZGVzYycsCgkJCQkJCSAgICIiLCA4MCwgMjU1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfaW1hZ2V3aWR0aCcsCgkJCSAgICR0aGlzLT5MYW5nICgncHJvbXB0X2ltYWdld2lkdGgnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbnB1dF9pbWFnZXdpZHRoJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfaW1hZ2V3aWR0aCcsCgkJCQkJCSAgICIiLCAzLCA1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfaW1hZ2VoZWlnaHQnLAoJCQkgICAkdGhpcy0+TGFuZyAoJ3Byb21wdF9pbWFnZWhlaWdodCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2ltYWdlaGVpZ2h0JywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfaW1hZ2VoZWlnaHQnLAoJCQkJCQkgICAiIiwgMywgNSkpOwoKICAgICRtb2R1bGUgPSAkdGhpcy0+X2dldFVwbG9hZHNNb2R1bGUoKTsKICAgIGlmKCAkbW9kdWxlICkKICAgICAgewoJJGNhdGVnb3J5bGlzdCA9ICRtb2R1bGUtPmdldENhdGVnb3J5TGlzdCgpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdXBsb2FkX2NhdGVnb3J5JywKCQkJICAgICAgJHRoaXMtPkxhbmcoJ3Byb21wdF91cGxvYWRfY2F0ZWdvcnknKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3VwbG9hZF9jYXRlZ29yeScsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dERyb3BEb3duICgkaWQsICJpbnB1dF91cGxvYWRfY2F0ZWdvcnkiLCAkY2F0ZWdvcnlsaXN0LCAtMSkpOwogICAgICB9CiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGNhdGVnb3J5LnRwbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9BZG1pbkRvQWRkQmFubmVyKCRpZCwgJHBhcmFtcywgJHJldHVybmlkKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKICAgQWN0dWFsbHkgcGVyZm9ybSB0aGUgd29yayBvZiBhZGRpbmcgYSBiYW5uZXIgdG8gdGhlCiAgIGRhdGFiYXNlIGFuZCB0byB0aGUgZmlsZXN5c3RlbQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9BZG1pbkRvQWRkQmFubmVyICgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgewogICAgLy8gYXJlIHdlIGNhbmNlbGxpbmcKICAgIGlmIChpc3NldCAoJHBhcmFtc1snY2FuY2VsJ10pKQogICAgICB7CgkkdGhpcy0+UmVkaXJlY3QgKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCk7CiAgICAgIH0KCiAgICAkZXJyb3IgPSBmYWxzZTsKCiAgICAkbW9kdWxlID0gJHRoaXMtPl9nZXRVcGxvYWRzTW9kdWxlKCk7CiAgICAkaW1hZ2UgPSAkcGFyYW1zWydpbnB1dF9pbWFnZSddOwogICAgaWYoICRtb2R1bGUgJiYgdHJpbSgkaW1hZ2UpID09ICcnKQogICAgICB7CgkvLyBoYXZlIHRvIGdldCB0aGUgZmlsZSBuYW1lIGZyb20gCgkvLyB0aGUgdXBsb2FkcyBwdWxsZG93biB0aGluZ3kKCWlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfdXBsb2FkX2ZpbGUnXSApICkKCSAgewoJICAgICRpbWFnZSA9ICRtb2R1bGUtPmdldENhdGVnb3J5UGF0aEZyb21GaWxlSUQoJHBhcmFtc1snaW5wdXRfdXBsb2FkX2ZpbGUnXSk7CgkgICAgJGltYWdlIC49IERJUkVDVE9SWV9TRVBBUkFUT1IuJG1vZHVsZS0+Z2V0RmlsZU5hbWUoJHBhcmFtc1snaW5wdXRfdXBsb2FkX2ZpbGUnXSk7CgkgIH0KICAgICAgfQoKICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHNvbWV0aGluZyB0byB3b3JrIHdpdGgKICAgIGlmICghaXNzZXQgKCRwYXJhbXNbJ2lucHV0X2Jhbm5lcm5hbWUnXSkKCXx8ICRwYXJhbXNbJ2lucHV0X2Jhbm5lcm5hbWUnXSA9PSAiIikKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgiZXJyb3JfZW1wdHliYW5uZXJuYW1lIikpOwoJJGVycm9yID0gdHJ1ZTsKICAgICAgfQogICAgaWYgKCFpc3NldCAoJHBhcmFtc1snaW5wdXRfdXJsJ10pICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgiZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zIikpOwoJJGVycm9yID0gdHJ1ZTsKICAgICAgfQogICAgaWYgKCRpbWFnZSA9PSAnJykKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgiZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zIikpOwoJJGVycm9yID0gdHJ1ZTsKICAgICAgfQogICAgZWxzZSBpZiggIWlzc2V0KCRwYXJhbXNbJ2lucHV0X25ldmVyZXhwaXJlcyddKSAmJiAhaXNzZXQoJHBhcmFtc1snZXhwaXJlc2RhdGVfTW9udGgnXSkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcgKCJlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMiKSk7CgkkZXJyb3IgPSB0cnVlOwogICAgICB9CiAgICBlbHNlIGlmKCAhaXNzZXQoJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlfaWQnXSkgKSAKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgiZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zIikpOwoJJGVycm9yID0gdHJ1ZTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkvLyBjaGVjayBpZiB0aGUgYmFubmVycyBkb2Vzbid0IGFscmVhZHkgZXhpc3QKCSRkYiA9ICR0aGlzLT5jbXMtPmRiOwoJJHF1ZXJ5ID0KCSAgIlNFTEVDVCAqIGZyb20gIi5jbXNfZGJfcHJlZml4ICgpLgoJICAibW9kdWxlX2Jhbm5lcnMgV0hFUkUgbmFtZSA9ID8iOwoJJGRicmVzdWx0ID0KCSAgJGRiLT5FeGVjdXRlICgkcXVlcnksIGFycmF5ICgkcGFyYW1zWydpbnB1dF9iYW5uZXJuYW1lJ10pKTsKCglpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+RmV0Y2hSb3cgKCkpCgkgIHsKCSAgICAvLyB5ZXAgaXQgZG9lcwoJICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgIjEiKTsKCSAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywKCQkJCSAgICR0aGlzLT5MYW5nICgiZXJyb3JfYmFubmVyZXhpc3RzIikpOwoJICAgICRlcnJvciA9IHRydWU7CgkgIH0KCWVsc2UKCSAgewoJICAgIC8vIHdlJ3JlIGNsZWFyIHRvIGFkZCAoeWFob28pCgkgICAgJGV4cGlyZXMgPSAwOwoJICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2lucHV0X25ldmVyZXhwaXJlcyddICkpIAoJICAgICAgewoJCSRleHBpcmVzID0gbWt0aW1lKCRwYXJhbXNbJ2V4cGlyZXNkYXRlX0hvdXInXSwgJHBhcmFtc1snZXhwaXJlc2RhdGVfTWludXRlJ10sICRwYXJhbXNbJ2V4cGlyZXNkYXRlX1NlY29uZCddLAoJCQkJICAkcGFyYW1zWydleHBpcmVzZGF0ZV9Nb250aCddLCAkcGFyYW1zWydleHBpcmVzZGF0ZV9EYXknXSwgJHBhcmFtc1snZXhwaXJlc2RhdGVfWWVhciddKTsKCSAgICAgIH0KCSAgICAkYmFubmVyaWQgPQoJICAgICAgJGRiLT5HZW5JRCAoY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX2Jhbm5lcnNfc2VxIik7CgkgICAgJHF1ZXJ5ID0KCSAgICAgICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXggKCkuCgkgICAgICAibW9kdWxlX2Jhbm5lcnMgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPykiOwoJICAgICRkYnJlc3VsdCA9CgkgICAgICAkZGItPkV4ZWN1dGUgKCRxdWVyeSwKCQkJICAgIGFycmF5ICgkYmFubmVyaWQsCgkJCQkgICAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV9pZCddLAoJCQkJICAgJHBhcmFtc1siaW5wdXRfYmFubmVybmFtZSJdLAoJCQkJICAgJHBhcmFtc1siaW5wdXRfYmFubmVyZGVzYyJdLAoJCQkJICAgJGltYWdlLAoJCQkJICAgJHBhcmFtc1siaW5wdXRfdXJsIl0sCgkJCQkgICAkcGFyYW1zWydpbnB1dF9pbWFnZV90ZXh0J10sCgkJCQkgICAkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksCgkJCQkgICAoJGV4cGlyZXMgPT0gMCkgPyBOVUxMIDogJGRiLT5EQlRpbWVTdGFtcCgkZXhwaXJlcyksCgkJCQkgICAkcGFyYW1zWydpbnB1dF9tYXhfaW1wcmVzc2lvbnMnXSwKCQkJCSAgIDAsCgkJCQkgICAkcGFyYW1zWydpbnB1dF9ocmVmX3RleHQnXQoJCQkJICAgKSk7CgkgICAgaWYgKCEkZGJyZXN1bHQpCgkgICAgICB7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLAoJCQkJICAgICAgICR0aGlzLT5MYW5nICgiZXJyb3JfZGJlcnJvciIpKTsKCQkkZXJyb3IgPSB0cnVlOwoJICAgICAgfQoJICB9CiAgICAgIH0KCiAgICBpZiAoJGVycm9yKQogICAgICB7CgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCdhZGRiYW5uZXIudHBsJyk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHRoaXMtPlJlZGlyZWN0ICgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOwogICAgICB9CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0FkbWluRG9BZGRDYXRlZ29yeSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIEFjdHVhbGx5IHBlcmZvcm0gdGhlIHdvcmsgb2YgYWRkaW5nIGEgY2F0ZWdvcnkgdG8gdGhlCiAgIGRhdGFiYXNlIGFuZCB0byB0aGUgZmlsZXN5c3RlbQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9BZG1pbkRvQWRkQ2F0ZWdvcnkgKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCkKICB7CiAgICAvLyBhcmUgd2UgY2FuY2VsbGluZwogICAgaWYgKGlzc2V0ICgkcGFyYW1zWydjYW5jZWwnXSkpCiAgICAgIHsKCSR0aGlzLT5SZWRpcmVjdCAoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkKTsKICAgICAgfQoKICAgICRlcnJvciA9IGZhbHNlOwoKICAgIC8vIG1ha2Ugc3VyZSB3ZSBoYXZlIHNvbWV0aGluZyB0byB3b3JrIHdpdGgKICAgIGlmICghaXNzZXQgKCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5bmFtZSddKQoJfHwgJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnluYW1lJ10gPT0gIiIpCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgIjEiKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLCAkdGhpcy0+TGFuZyAoImVycm9yX2VtcHR5Y2F0ZWdvcnkiKSk7CgkkZXJyb3IgPSB0cnVlOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCS8vIGNoZWNrIGlmIHRoZSBjYXRlZ29yeSBkb2Vzbid0IGFscmVhZHkgZXhpc3QKCSRkYiA9ICR0aGlzLT5jbXMtPmRiOwoJJHF1ZXJ5ID0KCSAgIlNFTEVDVCAqIGZyb20gIi5jbXNfZGJfcHJlZml4ICgpLgoJICAibW9kdWxlX2Jhbm5lcnNfY2F0ZWdvcmllcyBXSEVSRSBuYW1lID0gPyI7CgkkZGJyZXN1bHQgPQoJICAkZGItPkV4ZWN1dGUgKCRxdWVyeSwgYXJyYXkgKCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5bmFtZSddKSk7CgoJLy8geWVwIGl0IGRvZXMKCWlmICgkZGJyZXN1bHQtPkZldGNoUm93ICgpKQoJICB7CgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLAoJCQkJICAgJHRoaXMtPkxhbmcgKCJlcnJvcl9jYXRlZ29yeWV4aXN0cyIpKTsKCSAgICAkZXJyb3IgPSB0cnVlOwoJICB9CgllbHNlCgkgIHsKCSAgICAvLyB3ZSdyZSBjbGVhciB0byBhZGQgKHlhaG9vKQoJICAgICRjYXRpZCA9CgkgICAgICAkZGItPkdlbklEIChjbXNfZGJfcHJlZml4ICgpLiJtb2R1bGVfYmFubmVyc19jYXRlZ29yaWVzX3NlcSIpOwoJICAgICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10gPSAkY2F0aWQ7CgkgICAgJHF1ZXJ5ID0KCSAgICAgICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXggKCkuCgkgICAgICAibW9kdWxlX2Jhbm5lcnNfY2F0ZWdvcmllcyBWQUxVRVMgKD8sPyw/LD8sPyw/KSI7CgkgICAgJGRicmVzdWx0ID0KCSAgICAgICRkYi0+RXhlY3V0ZSAoJHF1ZXJ5LAoJCQkgICAgYXJyYXkgKCRjYXRpZCwKCQkJCSAgICRwYXJhbXNbImlucHV0X2NhdGVnb3J5bmFtZSJdLAoJCQkJICAgJHBhcmFtc1siaW5wdXRfY2F0ZWdvcnlkZXNjIl0sCgkJCQkgICAkcGFyYW1zWyJpbnB1dF9pbWFnZXdpZHRoIl0sCgkJCQkgICAkcGFyYW1zWyJpbnB1dF9pbWFnZWhlaWdodCJdLAoJCQkJICAgJHBhcmFtc1siaW5wdXRfdXBsb2FkX2NhdGVnb3J5Il0pKTsKCSAgICBpZiAoISRkYnJlc3VsdCkKCSAgICAgIHsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsCgkJCQkgICAgICAgJHRoaXMtPkxhbmcgKCJlcnJvcl9kYmVycm9yIikpOwoJCSRlcnJvciA9IHRydWU7CgkgICAgICB9CgkgIH0KICAgICAgfQoKICAgIGlmICgkZXJyb3IpCiAgICAgIHsKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGNhdGVnb3J5LnRwbCcpOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSR0aGlzLT5SZWRpcmVjdCAoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkKTsKICAgICAgfQogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9BZG1pbkRlbGV0ZUNhdGVnb3J5KCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBGdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGEgZm9ybSB0byBhbGxvdyB0aGUgdXNlciB0byBkZWxldGUKICAgYSBjYXRlZ29yeSBmcm9tIHRoZSBkYXRhYmFzZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfQWRtaW5EZWxldGVDYXRlZ29yeSAoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogIHsKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10gKSApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nICgnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gdGVzdCB0byBzZWUgaWYgdGhlcmUgYXJlIHN0aWxsIGl0ZW1zIGxlZnQgaW4gdGhpcyBjYXRlZ29yeSwgaWYgdGhlcmUgYXJlLCB0aGVuIHB1a2UKICAgIC8vIG90aGVyd2lzZSBkZWxldGUgdGhlIGRpcmVjdG9yeSB0b28gKG1heWJlKQogICAgJGRiID0gJHRoaXMtPmNtcy0+ZGI7CiAgICAkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2Jhbm5lcnMgV0hFUkUgY2F0ZWdvcnlfaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5LCBhcnJheSggJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSApICk7CiAgICAkYyA9ICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKTsKICAgIGlmKCAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZyAoJ2Vycm9yX2NhdGVnb3J5bm90ZW1wdHknKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyB3ZSBhcmUgZnJlZSB0byBkZWxldGUgdGhlIGNhdGVnb3J5CiAgICAkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9iYW5uZXJzX2NhdGVnb3JpZXMgV0hFUkUgY2F0ZWdvcnlfaWQgPSA/IjsKCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10gKSApOwogICAgaWYoICEgJGRicmVzdWx0ICkgewogICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCSAgICAgICAkdGhpcy0+TGFuZygnZXJyb3JfZGJlcnJvcicpKTsKICAgIH0KCiAgICAkdGhpcy0+UmVkaXJlY3QgKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0FkbWluRG9EZWxldGVCYW5uZXIoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBBY3R1YWxseSBkZWxldGUgYSBiYW5uZXIuCiAgIEFsc28gZGVsZXRlcyB0aGUgZW50cmllcyBmcm9tIHRoZSBoaXRzIGRhdGFiYXNlCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0FkbWluRG9EZWxldGVCYW5uZXIgKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCkKICB7CiAgICBpZiAoIWlzc2V0ICgkcGFyYW1zWydjYXRlZ29yeV9pZCddKSB8fCAkcGFyYW1zWydjYXRlZ29yeV9pZCddID09ICIiKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZyAoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpKTsKCXJldHVybjsKICAgICAgfQogICAgZWxzZSBpZiAoIWlzc2V0ICgkcGFyYW1zWydiYW5uZXJfaWQnXSkgfHwgJHBhcmFtc1snYmFubmVyX2lkJ10gPT0gIiIpCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nICgnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgJGRiID0gJHRoaXMtPmNtcy0+ZGI7CiAgICAkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9iYW5uZXJzX2hpdHMgV0hFUkUKYmFubmVyX2lkID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICRwYXJhbXNbJ2Jhbm5lcl9pZCddICkgKTsKCiAgICAkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9iYW5uZXJzIFdIRVJFCmNhdGVnb3J5X2lkID0gPyBBTkQgYmFubmVyX2lkID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10sICRwYXJhbXNbJ2Jhbm5lcl9pZCddICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkgewogICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJJHRoaXMtPkxhbmcgKCdlcnJvcl9kYmVycm9yJykpOwogICAgICByZXR1cm47CiAgICB9CgogICAgJHRoaXMtPlJlZGlyZWN0ICgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9BZG1pbkRvRWRpdEJhbm5lcigkaWQsICRwYXJhbXMsICRyZXR1cm5pZCkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIEFjdHVhbGx5IGVkaXQgYSBiYW5uZXIgZ2l2ZW4gdGhlIGluZm9ybWF0aW9uIGdpdmVuCiAgIGluIHRoZSBlZGl0IGJhbm5lciBmb3JtLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9BZG1pbkRvRWRpdEJhbm5lciAoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogIHsKICAgICRkYiA9ICR0aGlzLT5jbXMtPmRiOwoKICAgIC8vIGFyZSB3ZSBjYW5jZWxsaW5nCiAgICBpZiAoaXNzZXQgKCRwYXJhbXNbJ2NhbmNlbCddKSkKICAgICAgewoJJHRoaXMtPlJlZGlyZWN0ICgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOwogICAgICB9CgogICAgJG1vZHVsZSA9ICR0aGlzLT5fZ2V0VXBsb2Fkc01vZHVsZSgpOwogICAgJGltYWdlID0gJHBhcmFtc1snaW5wdXRfaW1hZ2UnXTsKICAgIGlmKCAkbW9kdWxlICYmIHRyaW0oJGltYWdlKSA9PSAnJykKICAgICAgewoJLy8gaGF2ZSB0byBnZXQgdGhlIGZpbGUgbmFtZSBmcm9tIAoJLy8gdGhlIHVwbG9hZHMgcHVsbGRpd24gdGhpbmd5CgkkaW1hZ2UgPSAkbW9kdWxlLT5nZXRDYXRlZ29yeVBhdGhGcm9tRmlsZUlEKCRwYXJhbXNbJ2lucHV0X3VwbG9hZF9maWxlJ10pOwoJJGltYWdlIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7CgkkaW1hZ2UgLj0gJG1vZHVsZS0+Z2V0RmlsZU5hbWUoJHBhcmFtc1snaW5wdXRfdXBsb2FkX2ZpbGUnXSk7CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBzb21ldGhpbmcgdG8gd29yayB3aXRoCiAgICAvLyBtYWtlIHN1cmUgd2UgaGF2ZSBzb21ldGhpbmcgdG8gd29yayB3aXRoCiAgICBpZiAoIWlzc2V0ICgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV9pZCddKSB8fCAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV9pZCddID09ICIiKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcgKCJlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMiKSk7CiAgICAgIH0KICAgIGVsc2UgaWYgKCFpc3NldCAoJHBhcmFtc1snaW5wdXRfYmFubmVyX2lkJ10pIHx8ICRwYXJhbXNbJ2lucHV0X2Jhbm5lcl9pZCddID09ICIiKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcgKCJlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMiKSk7CiAgICAgIH0KICAgIGVsc2UgaWYgKCFpc3NldCAoJHBhcmFtc1snaW5wdXRfYmFubmVybmFtZSddKQoJICAgICB8fCAkcGFyYW1zWydpbnB1dF9iYW5uZXJuYW1lJ10gPT0gIiIpCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgIjEiKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLCAkdGhpcy0+TGFuZyAoImVycm9yX2VtcHR5YmFubmVybmFtZSIpKTsKCSRlcnJvciA9IHRydWU7CiAgICAgIH0KICAgIGVsc2UgaWYgKCRpbWFnZSA9PSAnJykKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgiZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zIikpOwoJJGVycm9yID0gdHJ1ZTsKICAgICAgfQogICAgZWxzZSBpZiAoIWlzc2V0ICgkcGFyYW1zWydpbnB1dF91cmwnXSkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcgKCJlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMiKSk7CgkkZXJyb3IgPSB0cnVlOwogICAgICB9CiAgICBlbHNlIGlmKCAhaXNzZXQoJHBhcmFtc1snaW5wdXRfbmV2ZXJleHBpcmVzJ10pICYmICFpc3NldCgkcGFyYW1zWydleHBpcmVzZGF0ZV9Nb250aCddKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgIjEiKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLCAkdGhpcy0+TGFuZyAoImVycm9yX2luc3VmZmljaWVudHBhcmFtcyIpKTsKCSRlcnJvciA9IHRydWU7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJGV4cGlyZXMgPSAwOwoJaWYoICFpc3NldCggJHBhcmFtc1snaW5wdXRfbmV2ZXJleHBpcmVzJ10gKSApCgkgIHsKCSAgICAkZXhwaXJlcyA9IG1rdGltZSgkcGFyYW1zWydleHBpcmVzZGF0ZV9Ib3VyJ10sICRwYXJhbXNbJ2V4cGlyZXNkYXRlX01pbnV0ZSddLCAkcGFyYW1zWydleHBpcmVzZGF0ZV9TZWNvbmQnXSwKCQkJICAgICAgJHBhcmFtc1snZXhwaXJlc2RhdGVfTW9udGgnXSwgJHBhcmFtc1snZXhwaXJlc2RhdGVfRGF5J10sICRwYXJhbXNbJ2V4cGlyZXNkYXRlX1llYXInXSk7CgkgIH0KCgkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVycwogICAgU0VUIG5hbWUgPSA/LCBkZXNjcmlwdGlvbiA9ID8sIGltYWdlID0gPywgdXJsID0gPywKICAgIHRleHQgPSA/LCBleHBpcmVzID0gPywgbWF4X2ltcHJlc3Npb25zID0gPywKICAgIGhyZWZfdGV4dCA9ID8gCiAgICBXSEVSRSBjYXRlZ29yeV9pZCA9ID8gYW5kIGJhbm5lcl9pZCA9ID8iOwoJJGRicmVzdWx0ID0KCSAgJGRiLT5FeGVjdXRlICgkcXVlcnksCgkJCWFycmF5ICggJHBhcmFtc1siaW5wdXRfYmFubmVybmFtZSJdLAoJCQkJJHBhcmFtc1siaW5wdXRfYmFubmVyZGVzYyJdLAoJCQkJJGltYWdlLAoJCQkJJHBhcmFtc1siaW5wdXRfdXJsIl0sCgkJCQkkcGFyYW1zWydpbnB1dF9pbWFnZV90ZXh0J10sCgkJCQkoJGV4cGlyZXMgPT0gMCkgPyBOVUxMIDogJGRiLT5EQlRpbWVTdGFtcCgkZXhwaXJlcyksCgkJCQkkcGFyYW1zWydpbnB1dF9tYXhfaW1wcmVzc2lvbnMnXSwKCQkJCSRwYXJhbXNbJ2lucHV0X2hyZWZfdGV4dCddLAoJCQkJJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlfaWQnXSwKCQkJCSRwYXJhbXNbJ2lucHV0X2Jhbm5lcl9pZCddCgkJCQkpKTsKCWlmICghJGRicmVzdWx0KQoJICB7CgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLAoJCQkJICAgJHRoaXMtPkxhbmcgKCJlcnJvcl9kYmVycm9yIikpOwoJICAgICRlcnJvciA9IHRydWU7CgkgIH0KICAgICAgfQoKICAgIHJldHVybjsgLy8gZGVidWcKICAgIGlmICgkZXJyb3IpCiAgICAgIHsKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGJhbm5lci50cGwnKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkdGhpcy0+UmVkaXJlY3QgKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCk7CiAgICAgIH0KICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfQWRtaW5Eb0VkaXRDYXRlZ29yeSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIEFjdHVhbGx5IGVkaXQgYSBjYXRlZ29yeSBnaXZlbiB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4KICAgaW4gdGhlIGVkaXQgY2F0ZWdvcnkgZm9ybS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfQWRtaW5Eb0VkaXRDYXRlZ29yeSAoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogIHsKICAgICRkYiA9ICR0aGlzLT5jbXMtPmRiOwoKICAgIC8vIGFyZSB3ZSBjYW5jZWxsaW5nCiAgICBpZiAoaXNzZXQgKCRwYXJhbXNbJ2NhbmNlbCddKSkKICAgICAgewoJJHRoaXMtPlJlZGlyZWN0ICgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOwogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIHdlIGhhdmUgc29tZXRoaW5nIHRvIHdvcmsgd2l0aAogICAgaWYgKCFpc3NldCAoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkgfHwgJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSA9PSAiIikKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgiZXJyb3Jfbm9jYXRlZ29yeWlkIikpOwogICAgICB9CiAgICBlbHNlIGlmICghaXNzZXQgKCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5bmFtZSddKQoJICAgICB8fCAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeW5hbWUnXSA9PSAiIikKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgiZXJyb3JfZW1wdHljYXRlZ29yeSIpKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkvLyBub3cgcHJlcGFyZSB0byB1cGRhdGUgdGhlIHJlY29yZAoJJHF1ZXJ5ID0KCSAgIlVQREFURSAiLmNtc19kYl9wcmVmaXggKCkuCgkgICJtb2R1bGVfYmFubmVyc19jYXRlZ29yaWVzIFNFVCBuYW1lID0gPywiLgoJICAiZGVzY3JpcHRpb24gPSA/LCBpbWFnZV93aWR0aCA9ID8sIGltYWdlX2hlaWdodCA9ID8sIi4KCSAgInVwbG9hZHNfY2F0ZWdvcnlfaWQgPSA/ICIuCgkgICJXSEVSRSBjYXRlZ29yeV9pZCA9ID8iOwoJJGRicmVzdWx0ID0KCSAgJGRiLT5FeGVjdXRlICgkcXVlcnksCgkJCWFycmF5ICgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeW5hbWUnXSwKCQkJICAgICAgICRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5ZGVzYyddLAoJCQkgICAgICAgJHBhcmFtc1snaW5wdXRfaW1hZ2V3aWR0aCddLAoJCQkgICAgICAgJHBhcmFtc1snaW5wdXRfaW1hZ2VoZWlnaHQnXSwKCQkJICAgICAgICRwYXJhbXNbJ2lucHV0X3VwbG9hZF9jYXRlZ29yeSddLAoJCQkgICAgICAgJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkpOwoJaWYgKCEkZGJyZXN1bHQpCgkgIHsKCSAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgiZXJyb3JfZGJlcnJvciIpKTsKCSAgfQoJZWxzZQoJICB7CgkgICAgJHRoaXMtPlJlZGlyZWN0ICgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CgogICAgJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoImFkZGNhdGVnb3J5LnRwbCIpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9BZG1pbkVkaXRCYW5uZXIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIFByb3ZpZGUgYSBmb3JtIHRvIGFsbG93IHVzZXJzIHRvIGVkaXQgYSBiYW5uZXIKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfQWRtaW5FZGl0QmFubmVyKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCAhaXNzZXQoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkgKSAKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CglyZXR1cm47CiAgICAgIH0KICAgIGlmKCAhaXNzZXQoJHBhcmFtc1snYmFubmVyX2lkJ10pICkgCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nICgnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CiAgCiAgICAvLyBnZXQgdGhlIGJhbm5lciBpbmZvCiAgICAkZGIgPSAkdGhpcy0+Y21zLT5kYjsKICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVycwogICAgIFdIRVJFIGNhdGVnb3J5X2lkID0gPyBBTkQgYmFubmVyX2lkID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10sCgkJCQkJICAgICAkcGFyYW1zWydiYW5uZXJfaWQnXSApICk7CiAgICBpZiggISRkYnJlc3VsdCApIAogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZyAoJ2Vycm9yX2RiZXJyb3InKSk7CglyZXR1cm47CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICBpZiggISRyb3cgKSAKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcgKCdlcnJvcl9kYmVycm9yJykpOwoJcmV0dXJuOwogICAgICB9CiAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCd0aXRsZScsICR0aGlzLT5MYW5nICgnYWRkYmFubmVyJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnc3RhcnRmb3JtJywKCQkJICAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLAoJCQkJCQkgICAnZG9fZWRpdGJhbm5lcicsCgkJCQkJCSAgICRyZXR1cm5pZCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3N1Ym1pdCcsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywKCQkJCQkJICAgICAnU3VibWl0JykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnY2FuY2VsJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdjYW5jZWwnLAoJCQkJCQkgICAgICdDYW5jZWwnKSk7CiAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfYmFubmVybmFtZScsCgkJCSAgICR0aGlzLT5MYW5nICgnbmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2Jhbm5lcm5hbWUnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9iYW5uZXJuYW1lJywKCQkJCQkJICAgJHJvd1snbmFtZSddLCAyMCwgODApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9iYW5uZXJkZXNjJywKCQkJICAgJHRoaXMtPkxhbmcgKCdkZXNjcmlwdGlvbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2Jhbm5lcmRlc2MnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9iYW5uZXJkZXNjJywKCQkJCQkJICAgJHJvd1snZGVzY3JpcHRpb24nXSwgODAsIDI1NSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgncHJvbXB0X2ltYWdlJywKCQkJICAgJHRoaXMtPkxhbmcgKCdpbWFnZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2ltYWdlJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfaW1hZ2UnLAoJCQkJCQkgICAkcm93WydpbWFnZSddLCA1MCwgMjU1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbmZvX2ltYWdlJywKCQkJICAgJHRoaXMtPkxhbmcgKCdpbmZvX2ltYWdlJykpOwogIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgncHJvbXB0X3VybCcsCgkJCSAgICR0aGlzLT5MYW5nICgndXJsJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5wdXRfdXJsJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfdXJsJywKCQkJCQkJICAgJHJvd1sndXJsJ10sIDUwLCAyNTUpKTsKICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9ocmVmX3RleHQnLAoJCQkgICAkdGhpcy0+TGFuZyAoJ2hyZWZfdGV4dCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2hyZWZfdGV4dCcsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQgKCRpZCwgJ2lucHV0X2hyZWZfdGV4dCcsCgkJCQkJCSAgICRyb3dbJ2hyZWZfdGV4dCddLCA4MCwgMjU1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbmZvX2hyZWZfdGV4dCcsCgkJCSAgICR0aGlzLT5MYW5nICgnaW5mb19ocmVmX3RleHQnKSk7CiAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfaW1hZ2VfdGV4dCcsCgkJCSAgICR0aGlzLT5MYW5nICgnaW1hZ2VfdGV4dCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2ltYWdlX3RleHQnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9pbWFnZV90ZXh0JywKCQkJCQkJICAgJHJvd1sndGV4dCddLCA4MCwgMjU1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbmZvX2ltYWdlX3RleHQnLAoJCQkgICAkdGhpcy0+TGFuZyAoJ2luZm9faW1hZ2VfdGV4dCcpKTsKICAKICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9pbXByZXNzaW9ucycsCgkJCSAgICR0aGlzLT5MYW5nKCdpbXByZXNzaW9ucycpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3ZhbHVlX2ltcHJlc3Npb25zJywKCQkJICAgJHJvd1snbnVtX2ltcHJlc3Npb25zJ10gKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9tYXhfaW1wcmVzc2lvbnMnLAoJCQkgICAkdGhpcy0+TGFuZyAoJ21heF9pbXByZXNzaW9ucycpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X21heF9pbXByZXNzaW9ucycsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQgKCRpZCwgJ2lucHV0X21heF9pbXByZXNzaW9ucycsCgkJCQkJCSAgICRyb3dbJ21heF9pbXByZXNzaW9ucyddLCAzLCA1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltYWdlJywKCQkJICAiPGltZyBhbHQ9XCIiLiRyb3dbJ25hbWUnXS4iXCIgc3JjPVwiIi4iL3VwbG9hZHMiLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHJvd1snaW1hZ2UnXS4iXCI+Ii4kcm93WydkZXNjcmlwdGlvbiddLiI8L2ltZz4iKTsKICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2luZm9fbWF4X2ltcHJlc3Npb25zJywKCQkJICAgJHRoaXMtPkxhbmcgKCdpbmZvX21heF9pbXByZXNzaW9ucycpKTsKICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9leHBpcmVzJywKCQkJICAgJHRoaXMtPkxhbmcgKCdleHBpcmVzJykpOwogICAgJGV4cGlyZXNkYXRlID0gMDsKICAgIGlmKCAkcm93WydleHBpcmVzJ10gKQogICAgICB7CgkkZXhwaXJlc2RhdGUgPSBzdHJ0b3RpbWUoJHJvd1snZXhwaXJlcyddKTsKICAgICAgfQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXhwaXJlc2RhdGVwcmVmaXgnLCAkaWQuJ2V4cGlyZXNkYXRlXycpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXhwaXJlc2RhdGUnLCAkZXhwaXJlc2RhdGUgKTsKICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbmV2ZXJleHBpcmVzJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsJ2lucHV0X25ldmVyZXhwaXJlcycsMCwkZXhwaXJlc2RhdGUgIT0gMCkuCgkJCSAgJHRoaXMtPkxhbmcoJ25ldmVyJykpOwogIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2lucHV0X2Jhbm5lcl9pZCcsJHBhcmFtc1snYmFubmVyX2lkJ10pLgoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2lucHV0X2NhdGVnb3J5X2lkJywkcGFyYW1zWydjYXRlZ29yeV9pZCddKSk7CiAgCiAgICAvLyBub3cgZG8gdGhlIGhpdHMKICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVyc19oaXRzIFdIRVJFIGJhbm5lcl9pZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnksIGFycmF5KCAkcGFyYW1zWydiYW5uZXJfaWQnXSApICk7CiAgICAkcm93Y2xhc3MgPSAncm93MSc7CiAgICAkcm93YXJyYXkgPSBhcnJheSgpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpcHRleHQnLCR0aGlzLT5MYW5nKCdpcGFkZHJlc3MnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RhdGV0ZXh0JywkdGhpcy0+TGFuZygnZGF0ZScpKTsKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7Cgkkb25lcm93LT5pcCA9ICRyb3dbJ2lwX2FkZHJlc3MnXTsKCSRvbmVyb3ctPmRhdGUgPSAkcm93Wyd0aW1lJ107CglhcnJheV9wdXNoKCAkcm93YXJyYXksICRvbmVyb3cgKTsKCSgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzID0gInJvdzIiIDogJHJvd2NsYXNzID0gInJvdzEiKTsKICAgICAgfQogIAogICAgJG1vZHVsZSA9ICR0aGlzLT5fZ2V0VXBsb2Fkc01vZHVsZSgpOwogICAgaWYoICRtb2R1bGUgKQogICAgICB7CgkvLyBnZXQgdGhlIGNhdGVnb3J5IGluZm8sIGFuZCBmaW5kIHRoZSB1cGxvYWQgY2F0ZWdvcnkgaWQKCSRkYiA9ICR0aGlzLT5jbXMtPmRiOwoJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9iYW5uZXJzX2NhdGVnb3JpZXMgIi4KCSAgIldIRVJFIGNhdGVnb3J5X2lkID0gPyI7CgkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10gKSApOwoJJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKCWlmKCBpc3NldCgkcm93Wyd1cGxvYWRzX2NhdGVnb3J5X2lkJ10pICkgewoJICAvLyBub3cgZ2V0IGEgbGlzdCBvZiBhbGwgb2YgdGhlIGZpbGVzIGluIHRoYXQgY2F0ZWdvcnkKCSAgJGZpbGVsaXN0ID0gJG1vZHVsZS0+Z2V0RmlsZUxpc3QoICRyb3dbJ3VwbG9hZHNfY2F0ZWdvcnlfaWQnXSApOwoJICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF91cGxvYWRfZmlsZScsCgkJCQkkdGhpcy0+TGFuZygncHJvbXB0X3VwbG9hZF9maWxlJykpOwoJICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3VwbG9hZF9maWxlJywKCQkJCSR0aGlzLT5DcmVhdGVJbnB1dERyb3BEb3duICgkaWQsICJpbnB1dF91cGxvYWRfZmlsZSIsICRmaWxlbGlzdCwgLTEpKTsKCX0KICAgICAgfQogIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtcycsJHJvd2FycmF5KTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiAgCiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2VkaXRiYW5uZXIudHBsJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0FkbWluRWRpdENhdGVnb3J5KCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBBIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgdGhlIGZvcm0gZm9yIHRoZSB1c2VyIHRvIGVkaXQKICAgY2F0ZWdvcnkgZGV0YWlscy4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfQWRtaW5FZGl0Q2F0ZWdvcnkgKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCkKICB7CiAgICAkZGIgPSAkdGhpcy0+Y21zLT5kYjsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3RpdGxlJywgJHRoaXMtPkxhbmcgKCdlZGl0Y2F0ZWdvcnknKSk7CgogICAgLy8gY2hlY2sgdGhpbmdzIG91dAogICAgaWYgKCFpc3NldCAoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkpCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLCAkdGhpcy0+TGFuZyAoJ2Vycm9yX25vY2F0ZWdvcnknKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsIDEpOwoJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlICgnYWRkY2F0ZWdvcnkudHBsJyk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBnZXQgdGhlIGNhdGVnb3J5IGluZm8gZnJvbSB0aGUgZGF0YWJhc2UgKGZvciB0aGlzIGNhdGVnb3J5KQogICAgJHF1ZXJ5ID0KICAgICAgIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4ICgpLgogICAgICAibW9kdWxlX2Jhbm5lcnNfY2F0ZWdvcmllcyBXSEVSRSBjYXRlZ29yeV9pZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlICgkcXVlcnksIGFycmF5KCRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10pKTsKICAgIGlmICghJGRicmVzdWx0KQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcgKCdlcnJvcl9kYmVycm9yJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAxKTsKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGNhdGVnb3J5LnRwbCcpOwoJcmV0dXJuOwogICAgICB9CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdyAoKTsKICAgIGlmICghJHJvdykKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgnZXJyb3JfZGJlcnJvcicpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgMSk7CgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCdhZGRjYXRlZ29yeS50cGwnKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIHBvcHVsYXRlIHRoZSB0ZW1wbGF0ZQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgic3RhcnRmb3JtIiwKCQkJICAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnZG9fZWRpdGNhdGVnb3J5JywgJHJldHVybmlkKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdzdWJtaXQnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsICdTdWJtaXQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdjYW5jZWwnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2NhbmNlbCcsICdDYW5jZWwnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9jYXRlZ29yeW5hbWUnLCAkdGhpcy0+TGFuZyAoJ3Byb21wdF9jYXRlZ29yeW5hbWUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbnB1dF9jYXRlZ29yeW5hbWUnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9jYXRlZ29yeW5hbWUnLAoJCQkJCQkJCQkgJHJvd1snbmFtZSddLCAyMCwgODApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9jYXRlZ29yeWRlc2MnLCAkdGhpcy0+TGFuZyAoJ3Byb21wdF9jYXRlZ29yeWRlc2MnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbnB1dF9jYXRlZ29yeWRlc2MnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9jYXRlZ29yeWRlc2MnLAoJCQkJCQkgICAkcm93WydkZXNjcmlwdGlvbiddLCA4MCwgMjU1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfaW1hZ2V3aWR0aCcsJHRoaXMtPkxhbmcgKCdwcm9tcHRfaW1hZ2V3aWR0aCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2ltYWdld2lkdGgnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9pbWFnZXdpZHRoJywkcm93WydpbWFnZV93aWR0aCddLAoJCQkJCQkgICAzLCA1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfaW1hZ2VoZWlnaHQnLCR0aGlzLT5MYW5nICgncHJvbXB0X2ltYWdlaGVpZ2h0JykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5wdXRfaW1hZ2VoZWlnaHQnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9pbWFnZWhlaWdodCcsJHJvd1snaW1hZ2VfaGVpZ2h0J10sCgkJCQkJCSAgIDMsIDUpKTsKICAgICRtb2R1bGUgPSAkdGhpcy0+X2dldFVwbG9hZHNNb2R1bGUoKTsKICAgIGlmKCAkbW9kdWxlICkKICAgICAgewoJJGNhdGVnb3J5bGlzdCA9ICRtb2R1bGUtPmdldENhdGVnb3J5TGlzdCgpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdXBsb2FkX2NhdGVnb3J5JywKCQkJICAgICAgJHRoaXMtPkxhbmcoJ3Byb21wdF91cGxvYWRfY2F0ZWdvcnknKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3VwbG9hZF9jYXRlZ29yeScsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dERyb3BEb3duICgkaWQsICJpbnB1dF91cGxvYWRfY2F0ZWdvcnkiLCAkY2F0ZWdvcnlsaXN0LCAtMSkpOwogICAgICB9CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaGlkZGVuJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuICgkaWQsICdjYXRlZ29yeV9pZCcsCgkJCQkJCSAgICAgJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkpOwoKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGNhdGVnb3J5LnRwbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldE5hbWUoKQogICBtdXN0IHJldHVybiB0aGUgZXhhY3QgY2xhc3MgbmFtZSBvZiB0aGUgbW9kdWxlLgogICBJZiB0aGVzZSBkbyBub3QgbWF0Y2gsIGJhZCB0aGluZ3MgaGFwcGVuLgoKICAgVGhpcyBpcyB0aGUgbmFtZSB0aGF0J3Mgc2hvd24gaW4gdGhlIG1haW4gTW9kdWxlcwogICBwYWdlIGluIHRoZSBBZG1pbi4KCiAgIElmIHlvdSB3YW50IHRvIGJlIHNhZmUsIHlvdSBjYW4ganVzdCByZXBsYWNlIHRoZSBib2R5CiAgIG9mIHRoaXMgZnVuY3Rpb24gd2l0aDoKICAgcmV0dXJuIGdldF9jbGFzcygkdGhpcyk7IAogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldE5hbWUoKQogIHsKICAgIHJldHVybiAnQmFubmVycyc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RnJpZW5kbHlOYW1lKCkKICAgVGhpcyBjYW4gcmV0dXJuIGFueSBzdHJpbmcsIHByZWZlcmFibHkgYSBsb2NhbGl6ZWQgbmFtZQogICBvZiB0aGUgbW9kdWxlLiBUaGlzIGlzIHRoZSBuYW1lIHRoYXQncyBzaG93biBpbiB0aGUKICAgQWRtaW4gTWVudXMgYW5kIHNlY3Rpb24gcGFnZXMgKGlmIHRoZSBtb2R1bGUgaGFzIGFuIGFkbWluCiAgIGNvbXBvbmVudCkuCgogICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRWZXJzaW9uKCkKICAgVGhpcyBjYW4gcmV0dXJuIGFueSBzdHJpbmcsIHByZWZlcmFibHkgYSBudW1iZXIgb3IKICAgc29tZXRoaW5nIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIGRlc2lnbmF0aW5nIGEgdmVyc2lvbi4KICAgVGhlIENNUyB3aWxsIHVzZSB0aGlzIHRvIGlkZW50aWZ5IHdoZXRoZXIgb3Igbm90CiAgIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgbW9kdWxlIGlzIGN1cnJlbnQsIGFuZAogICB0aGUgbW9kdWxlIHdpbGwgdXNlIGl0IHRvIGZpZ3VyZSBvdXQgaG93IHRvIHVwZ3JhZGUKICAgaXRzZWxmIGlmIHJlcXVlc3RlZC4JICAgCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0VmVyc2lvbigpCiAgewogICAgcmV0dXJuICcyLjAuNyc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0SGVscCgpCiAgIFRoaXMgcmV0dXJucyBIVE1MIGluZm9ybWF0aW9uIG9uIHRoZSBtb2R1bGUuCiAgIFR5cGljYWxseSwgeW91J2xsIHdhbnQgdG8gaW5jbHVkZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8KICAgdXNlIHRoZSBtb2R1bGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0SGVscCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QXV0aG9yKCkKICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBNb2R1bGUKICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSAiQWJvdXQiIGxpbmsuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QXV0aG9yKCkKICB7CiAgICByZXR1cm4gJ2NhbGd1eTEwMDAnOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEF1dGhvckVtYWlsKCkKICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBNb2R1bGUKICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSAiQWJvdXQiIGxpbmsuIEl0IGhlbHBzIHVzZXJzCiAgIG9mIHlvdXIgbW9kdWxlIGdldCBpbiB0b3VjaCB3aXRoIHlvdSB0byBzZW5kIGJ1ZyByZXBvcnRzLAogICBxdWVzdGlvbnMsIGNhc2VzIG9mIGJlZXIsIGFuZC9vciBsYXJnZSBzdW1zIG9mIG1vbmV5LgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICB7CiAgICByZXR1cm4gJ3JvYkB0ZWNoY29tLmR5bmRucy5vcmcnOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldENoYW5nZUxvZygpCiAgIFRoaXMgcmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHByZXNlbnRlZCBpbiB0aGUgbW9kdWxlCiAgIEFkbWluIGlmIHlvdSBjbGljayBvbiB0aGUgQWJvdXQgbGluay4gSXQgaGVscHMgdXNlcnMKICAgZmlndXJlIG91dCB3aGF0J3MgY2hhbmdlZCBiZXR3ZWVuIHJlbGVhc2VzLgogICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJc1BsdWdpbk1vZHVsZSgpCiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIG9yIGZhbHNlLCBkZXBlbmRpbmcgdXBvbgogICB3aGV0aGVyIHVzZXJzIGNhbiBpbmNsdWRlIHRoZSBtb2R1bGUgaW4gYSBwYWdlIG9yCiAgIHRlbXBsYXRlIHVzaW5nIGEgc21hcnR5IHRhZyBvZiB0aGUgZm9ybQogICB7Y21zX21vZHVsZSBtb2R1bGU9J0Jhbm5lcnMnIHBhcmFtMT12YWwgcGFyYW0yPXZhbC4uLn0KCiAgIElmIHlvdXIgbW9kdWxlIGRvZXMgbm90IGdldCBpbmNsdWRlZCBpbiBwYWdlcyBvcgogICB0ZW1wbGF0ZXMsIHJldHVybiAiZmFsc2UiIGhlcmUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKQogIHsKICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEhhc0FkbWluKCkKICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSwgZGVwZW5kaW5nIG9uCiAgIHdoZXRoZXIgeW91ciBtb2R1bGUgYWRkcyBhbnl0aGluZyB0byB0aGUgQWRtaW4gYXJlYSBvZgogICB0aGUgc2l0ZS4gRm9yIHRoZSByZXN0IG9mIHRoZXNlIGNvbW1lbnRzLCBJJ2xsIGJlIGNhbGxpbmcKICAgdGhlIGFkbWluIHBhcnQgb2YgeW91ciBtb2R1bGUgdGhlICJBZG1pbiBQYW5lbCIgZm9yCiAgIHdhbnQgb2YgYSBiZXR0ZXIgdGVybS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0QWRtaW5TZWN0aW9uKCkKICAgSWYgeW91ciBtb2R1bGUgaGFzIGFuIEFkbWluIFBhbmVsLCB5b3UgY2FuIHNwZWNpZnkKICAgd2hpY2ggQWRtaW4gU2VjdGlvbiAob3IgdG9wLWxldmVsIEFkbWluIE1lbnUpIGl0IHNob3dzCiAgIHVwIGluLiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIHRvIHNwZWNpZnkgdGhhdAogICBzZWN0aW9uLiBWYWxpZCByZXR1cm4gdmFsdWVzIGFyZToKCiAgIG1haW4gICAgICAgIC0gdGhlIE1haW4gbWVudSB0YWIuCiAgIGNvbnRlbnQgICAgIC0gdGhlIENvbnRlbnQgbWVudQogICBsYXlvdXQgICAgICAtIHRoZSBMYXlvdXQgbWVudQogICB1c2Vyc2dyb3VwcyAtIHRoZSBVc2VycyBhbmQgR3JvdXBzIG1lbnUKICAgZXh0ZW5zaW9ucyAgLSB0aGUgRXh0ZW5zaW9ucyBtZW51ICh0aGlzIGlzIHRoZSBkZWZhdWx0KQogICBzaXRlYWRtaW4gICAtIHRoZSBTaXRlIEFkbWluIG1lbnUKICAgdmlld3NpdGUgICAgLSB0aGUgVmlldyBTaXRlIG1lbnUgdGFiCiAgIGxvZ291dCAgICAgIC0gdGhlIExvZ291dCBtZW51IHRhYgoKICAgTm90ZSB0aGF0IGlmIHlvdSBwbGFjZSB5b3VyIG1vZHVsZSBpbiB0aGUgbWFpbiwKICAgdmlld3NpdGUsIG9yIGxvZ291dCBzZWN0aW9ucywgaXQgd2lsbCBzaG93IHVwIGluIHRoZQogICBtZW51cywgYnV0IHdpbGwgbm90IGJlIHZpc2libGUgaW4gYW55IHRvcC1sZXZlbAogICBzZWN0aW9uIHBhZ2VzLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpCiAgewogICAgcmV0dXJuICdjb250ZW50JzsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBZG1pbkRlc2NyaXB0aW9uKCkKICAgSWYgeW91ciBtb2R1bGUgZG9lcyBoYXZlIGFuIEFkbWluIFBhbmVsLCB5b3UKICAgY2FuIGhhdmUgaXQgcmV0dXJuIGEgZGVzY3JpcHRpb24gc3RyaW5nIHRoYXQgZ2V0cyBzaG93bgogICBpbiB0aGUgQWRtaW4gU2VjdGlvbiBwYWdlIHRoYXQgY29udGFpbnMgdGhlIG1vZHVsZS4KCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFZpc2libGVUb0FkbWluVXNlcigpCiAgIElmIHlvdXIgbW9kdWxlIGRvZXMgaGF2ZSBhbiBBZG1pbiBQYW5lbCwgeW91CiAgIGNhbiBjb250cm9sIHdoZXRoZXIgb3Igbm90IGl0J3MgZGlzcGxheWVkIGJ5IHRoZSBib29sZWFuCiAgIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QuIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQKICAgdG8gaGlkZSBtb2R1bGVzIGZyb20gYWRtaW5zIHdobyBsYWNrIHBlcm1pc3Npb24gdG8gdXNlCiAgIHRoZW0uCiAgIEluIHRoaXMgY2FzZSwgdGhlIG1vZHVsZSB3aWxsIG9ubHkgYmUgdmlzaWJsZSB0byBhZG1pbnMKICAgd2hvIGhhdmUgIk1hbmFnZSBCYW5uZXJzIiBwZXJtaXNzaW9ucy4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogIHsKICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgQmFubmVycycpOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RGVwZW5kZW5jaWVzKCkKICAgWW91ciBtb2R1bGUgbWF5IG5lZWQgYW5vdGhlciBtb2R1bGUgdG8gYWxyZWFkeSBiZSBpbnN0YWxsZWQKICAgYmVmb3JlIHlvdSBjYW4gaW5zdGFsbCBpdC4KICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZAogICBtaW5pbXVtIHZlcnNpb24gbnVtYmVycyB0aGF0IHRoaXMgbW9kdWxlIHJlcXVpcmVzLgogICAKICAgSXQgc2hvdWxkIHJldHVybiBhbiBoYXNoLCBlZy4KICAgcmV0dXJuIGFycmF5KCdzb21lbW9kdWxlJz0+JzEuMCcsICdvdGhlcm1vZHVsZSc9PicxLjEnKTsKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogIHsKICAgIHJldHVybiBhcnJheSgpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEluc3RhbGwoKQogICBXaGVuIHlvdXIgbW9kdWxlIGlzIGluc3RhbGxlZCwgeW91IG1heSBuZWVkIHRvIGRvIHNvbWUKICAgc2V0dXAuIFR5cGljYWwgdGhpbmdzIHRoYXQgaGFwcGVuIGhlcmUgYXJlIHRoZSBjcmVhdGlvbgogICBhbmQgcHJlcG9wdWxhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsIGRhdGFiYXNlIHNlcXVlbmNlcywKICAgcGVybWlzc2lvbnMsIHByZWZlcmVuY2VzLCBldGMuCiAgIAogICBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIEJhbm5lcnMgZGF0YWJhc2UgdGFibGUgYW5kCiAgIHNlcXVlbmNlLCBpdCBjcmVhdGVzIHRoZSAiTWFuYWdlIEJhbm5lcnMiIHBlcm1pc3Npb24sCiAgIGFuZCBzZXRzIHRoZSAiU2luZyBMb3VkbHkiIHByZWZlcmVuY2UuCiAgIAogICBUaGUgZGF0YWJhc2UgaXMgbm90IGFjdHVhbGx5IHVzZWQgaW4gdGhpcyBleGFtcGxlOwogICBjaGVjayBhbnkgb25lIG9mIHRoZSBvdGhlciBtb2R1bGVzIGlmIHlvdSB3YW50IHRvIHNlZQogICBtZXRob2QgY29kZSB0aGF0IHVzZXMgdGhlIGRhdGFiYXNlLgogICAKICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBjcmVhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsCiAgIGNoZWNrIG91dCB0aGUgQURPREIgRGF0YSBEaWN0aW9uYXJ5IHBhZ2UgYXQKICAgaHR0cDovL3BocGxlbnMuY29tL2xlbnMvYWRvZGIvZG9jcy1kYXRhZGljdC5odG0KICAgCiAgIFRoaXMgZnVuY3Rpb24gY2FuIHJldHVybiBhICJmYWxzZSIgaW4gY2FzZSBvZiBhbnkgZXJyb3IsCiAgIGFuZCBDTVMgd2lsbCBub3QgY29uc2lkZXIgdGhlIG1vZHVsZSBpbnN0YWxsZWQuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSW5zdGFsbCgpCiAgewogICAgJGRiID0gJHRoaXMtPmNtcy0+ZGI7CiAgCiAgICAvLyBteXNxbC1zcGVjaWZpYywgYnV0IGlnbm9yZWQgYnkgb3RoZXIgZGF0YWJhc2UKICAgICR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7CiAgCiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgCiAgICAvLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KICAgIC8vIGlmIHVybCBhbmQgaW1hZ2UgYXJlIE5VTEwsIHRleHQgY2Fubm90IGJlLgogICAgJGZsZHMgPSAiCgkgICBiYW5uZXJfaWQgSSBLRVksCgkgICBjYXRlZ29yeV9pZCBJIE5PVE5VTEwsCgkgICBuYW1lIEMoODApIE5PVE5VTEwsCgkgICBkZXNjcmlwdGlvbiBDKDI1NSksCgkgICBpbWFnZSAgQygyNTUpLCAgICAgICAgICAgIAoJICAgdXJsICAgIEMoMjU1KSwKCSAgIHRleHQgICBYLCAKCSAgIGNyZWF0ZWQgVCBOT1ROVUxMLAoJICAgZXhwaXJlcyBULAoJICAgbWF4X2ltcHJlc3Npb25zIEk0LAoJICAgbnVtX2ltcHJlc3Npb25zIEk0IERFRkFVTFQgMCBOT1ROVUxMLAoJICAgaHJlZl90ZXh0IEMoMjU1KSAKCSI7CiAgCiAgICAvLyBjcmVhdGUgaXQuIFRoaXMgc2hvdWxkIGRvIGVycm9yIGNoZWNraW5nLCBidXQgSSdtIGEgbGF6eSBzb2QuCiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVycyIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5KTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAKICAgIC8vIGNyZWF0ZSBhIHNlcXVlbmNlIGZvciB0aGlzIHRhYmxlCiAgICAkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2Jhbm5lcnNfc2VxIik7CgogICAgLy8gY3JlYXRlIGEgdGFibGUgZm9yIHRoZSBjYXRlZ29yaWVzCiAgICAkZmxkcyA9ICIKICAgICBjYXRlZ29yeV9pZCAgSSBLRVksCiAgICAgbmFtZSAgICAgICAgIEMoODApIE5PVE5VTEwsCiAgICAgZGVzY3JpcHRpb24gIEMoMjU1KSwKICAgICBpbWFnZV93aWR0aCAgSSwKICAgICBpbWFnZV9oZWlnaHQgSSwKICAgICB1cGxvYWRzX2NhdGVnb3J5X2lkIEkKICAgICI7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVyc19jYXRlZ29yaWVzIiwKCQkJCSAgICAgICRmbGRzLCAkdGFib3B0YXJyYXkpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKICAgIC8vIGFuZCBhIHNlcXVlbmNlIGZvciB0aGlzIG9uZSB0b28KICAgICRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVyc19jYXRlZ29yaWVzX3NlcSIpOwogIAogICAgLy8gYW5kIGEgdGFibGUgc28gd2UgY2FuIGtlZXAgdHJhY2sgb2YgaGl0cy9jbGlja3RocnVzCiAgICAkZmxkcyA9ICIKCSAgIGJhbm5lcl9pZCAgSSBLRVksCgkgICB0aW1lICAgICAgIFQgS0VZLAoJICAgaXBfYWRkcmVzcyBDKDE2KSBOT1ROVUxMIEtFWQoJICAiOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2Jhbm5lcnNfaGl0cyIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5KTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCiAgICAvLyBjcmVhdGUgYSBwZXJtaXNzaW9uCiAgICAkdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTWFuYWdlIEJhbm5lcnMnLCAnTWFuYWdlIEJhbm5lcnMnKTsKCiAgICAvLyBhbmQgc29tZSBwcmVmZXJlbmNlcwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoInN1Ym5ldF9leGNsdXNpb25zIiwgIiIpOwoKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogICBBZnRlciBpbnN0YWxsYXRpb24sIHRoZXJlIG1heSBiZSB0aGluZ3MgeW91IHdhbnQgdG8KICAgY29tbXVuaWNhdGUgdG8geW91ciBhZG1pbi4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKICAgc3RyaW5nIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkLgogICAKICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgIEFmdGVyIHJlbW92aW5nIGEgbW9kdWxlLCB0aGVyZSBtYXkgYmUgdGhpbmdzIHlvdSB3YW50IHRvCiAgIGNvbW11bmljYXRlIHRvIHlvdXIgYWRtaW4uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCiAgIHN0cmluZyB3aGljaCB3aWxsIGJlIGRpc3BsYXllZC4KICAgCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVwZ3JhZGUoKQogICBJZiB5b3VyIG1vZHVsZSB2ZXJzaW9uIG51bWJlciBkb2VzIG5vdCBtYXRjaCB0aGUgdmVyc2lvbgogICBudW1iZXIgb2YgdGhlIGluc3RhbGxlZCBtb2R1bGUsIHRoZSBDTVMgQWRtaW4gd2lsbCBnaXZlCiAgIHlvdSBhIGNoYW5jZSB0byB1cGdyYWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIGZ1bmN0aW9uCiAgIHRoYXQgYWN0dWFsbHkgaGFuZGxlcyB0aGUgdXBncmFkZS4KICAgSWRlYWxseSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgaGFuZGxlIHVwZ3JhZGVzIGluY3JlbWVudGFsbHksCiAgIHNvIHlvdSBjb3VsZCB1cGdyYWRlIGZyb20gdmVyc2lvbiAwLjAuMSB0byAxMC41Ljcgd2l0aAogICBhIHNpbmdsZSBjYWxsLiBGb3IgYSBncmVhdCBleGFtcGxlIG9mIHRoaXMsIHNlZSB0aGUgTmV3cwogICBtb2R1bGUgaW4gdGhlIHN0YW5kYXJkIENNUyBpbnN0YWxsLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFVwZ3JhZGUoJG9sZHZlcnNpb24sICRuZXd2ZXJzaW9uKQogIHsKICAgICRjdXJyZW50X3ZlcnNpb24gPSAkb2xkdmVyc2lvbjsKICAgIHN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQogICAgICB7CiAgICAgIGNhc2UgIjEuMCI6CgkvLyBkb24ndCBkbyBhbnl0aGluZy4uLiB3ZSBjYW4ndCB1cGdyYWRlIHRoaXMKCWJyZWFrOwogICAgICBjYXNlICIyLjAiOgoJLy8gd2UgbmVlZCB0byBhZGQgYSBjb2x1bW4gdG8gdGhlIGJhbm5lcnMgdGFibGUKCSRkYiA9ICR0aGlzLT5jbXMtPmRiOwoJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9iYW5uZXJzIiwgImhyZWZfdGV4dCBDKDI1NSkiKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCSRjdXJyZW50X3ZlcnNpb24gPSAiMi4wLjEiOwoJYnJlYWs7CiAgICAgIGNhc2UgIjIuMC4xIjoKCS8vIHdlIG5lZWQgdG8gYWRkIGEgY29sdW1uIHRvIHRoZSBjYXRlZ29yaWVzIHRhYmxlCgkkZGIgPSAkdGhpcy0+Y21zLT5kYjsKCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVyc19jYXRlZ29yaWVzIiwgInVwbG9hZHNfY2F0ZWdvcnlfaWQgSSIpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoJYnJlYWs7CiAgICAgIH0KICAKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksIAoJCSAgJHRoaXMtPkxhbmcoJ3VwZ3JhZGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVW5pbnN0YWxsKCkKICAgU29tZXRpbWVzLCBhbiBleGNlcHRpb25hbGx5IHVuZW5saWdodGVuZWQgb3IgaWdub3JhbnQKICAgYWRtaW4gd2lsbCB3aXNoIHRvIHVuaW5zdGFsbCB5b3VyIG1vZHVsZS4gV2hpbGUgaXQKICAgd291bGQgYmUgYmVzdCB0byBsYXkgaW50byB0aGVzZSBpZGlvdHMgd2l0aCBhIGNsdWVzdGljaywKICAgd2Ugd2lsbCBkbyB0aGUgbWFnbmFuaW1vdXMgdGhpbmcgYW5kIHJlbW92ZSB0aGUgbW9kdWxlCiAgIGFuZCBjbGVhbiB1cCB0aGUgZGF0YWJhc2UsIHBlcm1pc3Npb25zLCBhbmQgcHJlZmVyZW5jZXMKICAgdGhhdCBhcmUgc3BlY2lmaWMgdG8gaXQuCiAgIFRoaXMgaXMgdGhlIG1ldGhvZCB3aGVyZSB3ZSBkbyB0aGlzLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFVuaW5zdGFsbCgpCiAgewogICAgJGRiID0gJHRoaXMtPmNtcy0+ZGI7CiAgCiAgICAvLyByZW1vdmUgdGhlIGRhdGFiYXNlIHRhYmxlCiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2Jhbm5lcnMiICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9iYW5uZXJzX2NhdGVnb3JpZXMiICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9iYW5uZXJzX2hpdHMiICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgCiAgICAvLyByZW1vdmUgdGhlIHNlcXVlbmNlCiAgICAkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfY29uc3VsdGFudF9zZXEiICk7CiAgCiAgICAvLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCiAgICAkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTWFuYWdlIEJhbm5lcnMnKTsKCiAgICAvLyBhbmQgdGhlIHByZWZlcmVuY2VzCiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSAoInN1Ym5ldF9leGNsdXNpb25zIik7CiAgCiAgICAvLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgRG9BY3Rpb24oJGFjdGlvbiwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpCiAgIFRoaXMgaXMgdGhlIG1haW4gZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBpZiB5b3VyIG1vZHVsZQogICBpcyBhIHBsdWctaW4gdHlwZSBtb2R1bGUuCiAgIAogICBJbiBnZW5lcmFsLCB5b3UnbGwgd2FudCB0byBjYWxsIHZhcmlvdXMgZGlmZmVyZW50CiAgIG1ldGhvZHMsIGRlcGVuZGluZyB1cG9uIHRoZSByZXF1ZXN0ZWQgImFjdGlvbi4iCiAgIAogICBUaGVyZSBhcmUgdHdvIGJ1aWx0LWluIGFjdGlvbnM6ICJkZWZhdWx0IiB3aGljaCBnZXRzCiAgIGNhbGxlZCBpZiB0aGUgbW9kdWxlIGlzIGFjY2Vzc2VkIGZyb20gYSBwYWdlIG9yIHRlbXBsYXRlLAogICBhbmQgImRlZmF1bHRhZG1pbiIgd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSB0aGUgQWRtaW4KICAgcGFuZWwuCiAgIAogICBUaGUgQWN0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHBhc3NpbmcgYSBkaWZmZXJlbnQKICAgYWN0aW9uIGVpdGhlciBpbiB5b3VyIHRhZywgZS5nLiwKICAge2Ntc19tb2R1bGUgbW9kdWxlPSdCYW5uZXJzJyBhY3Rpb249J3NvbWV0aGluZyd9CiAgIG9yIGJ5IHBhc3NpbmcgaXQgaW4gYSBsaW5rIGNyZWF0ZSBieSB0aGUgQ3JlYXRlTGluawogICBtZXRob2QuIE1vcmUgb24gdGhhdCBjYW4gYmUgc2VlbiBiZWxvdyBpbiB0aGUKICAgRGlzcGxheUFkbWluTmF2IG1ldGhvZC4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBEb0FjdGlvbigkYWN0aW9uLCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZD0tMSkKICB7CiAgICBzd2l0Y2ggKCRhY3Rpb24pCiAgICAgIHsKICAgICAgY2FzZSAnYWRkYmFubmVyJzoKCXsKCSAgaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBCYW5uZXJzJykpCgkgICAgewoJICAgICAgJHRoaXMtPl9BZG1pbkFkZEJhbm5lciggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdhZGRjYXRlZ29yeSc6Cgl7CgkgIGlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgQmFubmVycycpKQoJICAgIHsKCSAgICAgICR0aGlzLT5fQWRtaW5BZGRDYXRlZ29yeSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdkZWZhdWx0JzoKCXsKCSAgLy8gdGhpcyBpcyB0aGUgcGx1Zy1pbiBzaWRlLCBpLmUuLCBub24tQWRtaW4KCSAgJHRoaXMtPl9EaXNwbGF5TW9kdWxlT3V0cHV0KCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ2RlZmF1bHRhZG1pbic6Cgl7CgkgIC8vIG9ubHkgbGV0IHBlb3BsZSBhY2Nlc3MgbW9kdWxlIHByZWZlcmVuY2VzIGlmIHRoZXkgaGF2ZSBwZXJtaXNzaW9uCgkgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgQmFubmVycycpKQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUFkbWluUGFuZWwoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ2RlbGV0ZWNhdGVnb3J5JzoKCXsKCSAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgQmFubmVycycpKQoJICAgIHsKCSAgICAgICR0aGlzLT5fQWRtaW5EZWxldGVDYXRlZ29yeSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ2RvX2FkZGJhbm5lcic6Cgl7CgkgIC8vIGNoZWNrIHBlcm1pc3Npb25zIGFnYWluCgkgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICgnTWFuYWdlIEJhbm5lcnMnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+X0FkbWluRG9BZGRCYW5uZXIgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdkb19hZGRjYXRlZ29yeSc6Cgl7CgkgIC8vIGNoZWNrIHBlcm1pc3Npb25zIGFnYWluCgkgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICgnTWFuYWdlIEJhbm5lcnMnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+X0FkbWluRG9BZGRDYXRlZ29yeSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ2RvX2RlbGV0ZWJhbm5lcic6Cgl7CgkgIC8vIGNoZWNrIHBlcm1pc3Npb25zIGFnYWluCgkgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICgnTWFuYWdlIEJhbm5lcnMnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+X0FkbWluRG9EZWxldGVCYW5uZXIgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdkb19lZGl0YmFubmVyJzoKCXsKCSAgaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgQmFubmVycycpKQoJICAgIHsKCSAgICAgICR0aGlzLT5fQWRtaW5Eb0VkaXRCYW5uZXIgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKCSAgICB9CgkgIGJyZWFrOwoJfQogICAgICBjYXNlICdkb19lZGl0Y2F0ZWdvcnknOgoJewoJICAvLyBjaGVjayBwZXJtaXNzaW9ucyBhZ2FpbgoJICBpZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbiAoJ01hbmFnZSBCYW5uZXJzJykpCgkgICAgewoJICAgICAgJHRoaXMtPl9BZG1pbkRvRWRpdENhdGVnb3J5ICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCk7CgkgICAgfQoJICBicmVhazsKCX0KICAgICAgY2FzZSAnZWRpdGJhbm5lcic6Cgl7CgkgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICgnTWFuYWdlIEJhbm5lcnMnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+X0FkbWluRWRpdEJhbm5lciAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CiAgICAgIGNhc2UgJ2VkaXRjYXRlZ29yeSc6Cgl7CgkgIGlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICgnTWFuYWdlIEJhbm5lcnMnKSkKCSAgICB7CgkgICAgICAkdGhpcy0+X0FkbWluRWRpdENhdGVnb3J5ICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCk7CgkgICAgfQoJICBicmVhazsKCX0KICAgICAgY2FzZSAnbGluayc6Cgl7CgkgICR0aGlzLT5fRG9MaW5rQWN0aW9uKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICBicmVhazsKCX0KICAgICAgY2FzZSAnc2F2ZV9hZG1pbl9wcmVmcyc6Cgl7CgkgICR0aGlzLT5fRG9TYXZlQWRtaW5QcmVmcyggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgYnJlYWs7Cgl9CiAgICAgIH0KICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRGlzcGxheU1vZHVsZU91dHB1dCgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIGRpc3BsYXkKICAgc29tZXRoaW5nIHdoZXJlIGEgcGFnZSBvciB0ZW1wbGF0ZSBoYXMgYSB0YWcgY2FsbGluZwogICB0aGlzIG1vZHVsZS4KICAgCiAgIE5vdGUgdGhhdCBpdCB1c2VzIGEgdGVtcGxhdGUsIGFuZCBpcyB0aHVzIHZlcnkgcG93ZXJmdWwsCiAgIGV2ZW4gaWYgaXQncyBzaW1wbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0Rpc3BsYXlNb2R1bGVPdXRwdXQoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogIHsKICAgICRkYiA9ICR0aGlzLT5jbXMtPmRiOwoKICAgIC8vIHRlc3QgaWYgd2UgYXJlIGV4Y2x1ZGluZyB0aGlzIElQIGZyb20gdGhlIGNvdW50aW5nCiAgICAkZXhjbHVkZSA9IDA7CiAgICAkc3VibmV0cyA9IHNwbGl0KCIsIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgic3VibmV0X2V4Y2x1c2lvbnMiKSk7CiAgICAkdGVzdCA9IDA7CiAgICBmb3JlYWNoKCRzdWJuZXRzIGFzICRzdWJuZXQpCiAgICAgIHsKCSR0ZXN0ID0gJHRoaXMtPl90ZXN0aXAoICRzdWJuZXQsIGdldGVudigiUkVNT1RFX0FERFIiICkgKTsKCWlmKCAkdGVzdCApCgkgIHsKCSAgICAvLyBkb24ndCBhbGxvdyBhbnkgbW9yZSBwcm9jZXNzaW5nCgkgICAgJGV4Y2x1ZGUgPSAxOwoJICB9CiAgICAgIH0KCgogICAgLy8gdGVzdCBpZiB3ZSBhcmUgZXhjbHVkaW5nIHRoZSBSRU1PVEVfQUREUiBmcm9tIHN0YXRpc3RpY3MgZ2F0aGVyaW5nCiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydjYXRlZ29yeSddICkgKSAKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAkY2F0ZWdvcnlfaWQ9LTE7CiAgICAkY2F0ZWdvcnk9IiI7CiAgICB7CiAgICAgIC8vIGxvb2t1cCB0aGUgY2F0ZWdvcnkgbmFtZSBhbmQgZ2V0IHRoZSBpZAogICAgICAkcTIgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2Jhbm5lcnNfY2F0ZWdvcmllcyBXSEVSRSAKICAgbmFtZSA9ID8iOwogICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxMiwgYXJyYXkoICRwYXJhbXNbJ2NhdGVnb3J5J10gKSApOwogICAgICBpZiggISRkYnJlc3VsdCApIAoJewoJICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICR0aGlzLT5MYW5nICgnZXJyb3JfZGJlcnJvcicpKTsKCSAgcmV0dXJuOwoJfQogICAgICAkY2F0ZWdvcnkgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICAgIGlmKCAhJGNhdGVnb3J5ICkgCgl7CgkgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgJHRoaXMtPkxhbmcgKCdlcnJvcl9kYmVycm9yJykpOwoJICByZXR1cm47Cgl9CiAgICAgICRjYXRlZ29yeV9pZCA9ICRjYXRlZ29yeVsnY2F0ZWdvcnlfaWQnXTsKICAgIH0KCiAgICAkZnJvbSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVycyBXSEVSRSAoY2F0ZWdvcnlfaWQgPSBcIiRjYXRlZ29yeV9pZFwiKSBBTkQiOwogICAgJHdoZXJlIC49ICIoZXhwaXJlcyA+IFwiIi4kZGItPkRCVGltZVN0YW1wKHRpbWUoKSkuIlwiIG9yIGlzbnVsbChleHBpcmVzKSkKICAgIEFORCAobWF4X2ltcHJlc3Npb25zID0gMCBPUiBudW1faW1wcmVzc2lvbnMgPCBtYXhfaW1wcmVzc2lvbnMpIjsKICAgICRvcmRlciA9ICJPUkRFUiBCWSBSQU5EKCkgTElNSVQgMCwxIjsKCiAgICAvLyBkbyB3ZSB3YW50IGEgc3BlY2lmaWMgYmFubmVyCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ25hbWUnXSApICkKICAgICAgewoJJHdoZXJlIC49ICJBTkQgTkFNRSA9IFwiIi4kcGFyYW1zWyduYW1lJ10uIlwiIjsKICAgICAgfQoKICAgICRxdWVyeSA9ICRmcm9tIC4gIiAiIC4gJHdoZXJlIC4gIiAiIC4gJG9yZGVyOwoKICAgICRkYnJlc3VsdCA9ICRkYi0+cXVlcnkoICRxdWVyeSApOwogICAgaWYoICEkZGJyZXN1bHQgKSAKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcgKCdlcnJvcl9kYmVycm9yJykpOwoJcmV0dXJuOwogICAgICB9CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgaWYoICEkcm93ICkgCiAgICAgIHsKCS8vIHF1ZXJ5IHdvcmtlZCwgYnV0IG5vIHJlc3VsdHMsIG5vdyB3aGF0IGRvIHdlIGRvCgkvLyBmb3IgZGVidWcgcHVycG9zZXMsIHJldHVybiBhbiBlcnJvcgoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcgKCdlcnJvcl9ub3Jlc3VsdHMnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBpbWFnZSx1cmwgb3IgdGV4dCBtYXkgYmUgc2V0IGhlcmUuCiAgICAvLyBnb3R0YSBmaWd1cmUgb3V0IHdoaWNoCiAgICBlY2hvICc8IS0tIEJlZ2luIEJhbm5lciBPdXRwdXQgLS0+JzsKICAgICR0eHQgPSAiIjsKICAgIGlmKCBpc3NldCggJHJvd1snaW1hZ2UnXSApICYmIGlzc2V0KCAkcm93Wyd1cmwnXSApICkgCiAgICAgIHsKCSRpbWFnZSA9ICc8aW1nIHNyYz0idXBsb2Fkcyc7CglpZiggJHJvd1snaW1hZ2UnXVswXSAhPSAnLycgKQoJICB7CgkgICAgJGltYWdlIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7CgkgIH0gCgkkaW1hZ2UgLj0gJHJvd1snaW1hZ2UnXS4iXCIiOwoJaWYoICRjYXRlZ29yeVsnaW1hZ2Vfd2lkdGgnXSApCgkgIHsKCSAgICAkaW1hZ2UgLj0gIiB3aWR0aD1cIiIuJGNhdGVnb3J5WydpbWFnZV93aWR0aCddLiJcIiAiOwoJICB9CglpZiggJGNhdGVnb3J5WydpbWFnZV9oZWlnaHQnXSApCgkgIHsKCSAgICAkaW1hZ2UgLj0gIiBoZWlnaHQ9XCIiLiRjYXRlZ29yeVsnaW1hZ2VfaGVpZ2h0J10uIlwiICI7CgkgIH0KCWlmKCAkcm93Wyd0ZXh0J10gKQoJICB7CgkgICAgJGltYWdlIC49ICIgYWx0PVwiIi4kcm93Wyd0ZXh0J10uIlwiIjsKCSAgfQoJZWxzZQoJICB7CgkgICAgJGltYWdlIC49ICIgYWx0PVwiQmFubmVyXCIiOwoJICB9CgkkaW1hZ2UgLj0gIiAvPiI7CgllY2hvICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2xpbmsnLCAkcmV0dXJuaWQsICRpbWFnZSwKCQkJICAgICAgIGFycmF5KCdiYW5uZXJfaWQnPT4kcm93WydiYW5uZXJfaWQnXSwKCQkJCSAgICAgJ2NhdGVnb3J5X2lkJz0+JGNhdGVnb3J5X2lkKSwKCQkJICAgICAgICcnLCBmYWxzZSwgZmFsc2UsICRyb3dbJ2hyZWZfdGV4dCddKTsKCWVjaG8gJzwhLS0gRW5kIEJhbm5lciBPdXRwdXQgLS0+JzsKICAgICAgfQogICAgCiAgICAvLyB1cGRhdGUgdGhlIGV4cHJlc3Npb25zCiAgICBpZiggJGV4Y2x1ZGUgPT0gMCApIHsKICAgICAgJGltcHJlc3Npb25zID0gJHJvd1sibnVtX2ltcHJlc3Npb25zIl0gKyAxOwogICAgICAkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVycyBTRVQgbnVtX2ltcHJlc3Npb25zID0gJGltcHJlc3Npb25zIFdIRVJFIGJhbm5lcl9pZD0iLiRyb3dbImJhbm5lcl9pZCJdOyAKICAgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnkgKTsgCiAgICB9CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQoKICAgVGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIG1ldGhvZCB0byBkaXNwbGF5CiAgIGVycm9yIGluZm9ybWF0aW9uIG9uIHRoZSBhZG1pbiBzaWRlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICAgIGlmICgkbWVzc2FnZSAhPSAnJykKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJG1lc3NhZ2UpOwogICAgICB9CiAgICAgIAogICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9EaXNwbGF5QWRtaW5QYW5lbCgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIHByZXNlbnQgYW4gQWRtaW4KICAgcGFuZWwuCgkgICAKICAgSXQgc2V0cyBzbWFydHkgdGFnIHZhbHVlcywgYW5kIHRoZW4gY2FsbHMgdGhlCiAgIGNvZGUgbmVjZXNzYXJ5IHRvIHJlbmRlciB0aGUgdGVtcGxhdGUuICAgCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pblBhbmVsKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIgKCdjYXRlZ29yaWVzJywgJHRoaXMtPkxhbmcgKCdjYXRlZ29yaWVzJykpOwogICAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdiYW5uZXJzJywgJHRoaXMtPkxhbmcoJ2Jhbm5lcnMnKSk7CiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIgKCdwcmVmZXJlbmNlcycsICR0aGlzLT5MYW5nKCdwcmVmZXJlbmNlcycpKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKCiAgICBlY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKICAgICAgCiAgICAvLyB0aGUgY2F0ZWdvcmllcyB0YWIKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdjYXRlZ29yaWVzJyk7CiAgICAkdGhpcy0+X0Rpc3BsYXlDYXRlZ29yaWVzVGFiKCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICAgIC8vIHRoZSBiYW5uZXJzIHRhYgogICAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2Jhbm5lcnMnKTsKICAgICR0aGlzLT5fRGlzcGxheUJhbm5lcnNUYWIoJGlkLCAkcGFyYW1zLCRyZXR1cm5pZCk7CiAgICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKCiAgICAvLyB0aGUgcHJlZmVyZW5jZXMgdGFiCiAgICBlY2hvICR0aGlzLT5TdGFydFRhYigncHJlZmVyZW5jZXMnKTsKICAgICR0aGlzLT5fRGlzcGxheVByZWZzVGFiKCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsKICAgIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICAgIC8vIGRvbmUgdGFicwogICAgZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwogICAgcmV0dXJuOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9EaXNwbGF5QmFubmVyc1RhYigkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0Rpc3BsYXlCYW5uZXJzVGFiKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKCiAgICAvLyBnZXQgdGhlIGN1cnJlbnQgY2F0ZWdvcnkgZm9yIHRoZSBmaWx0ZXIKICAgICRjdXJjYXRlZ29yeSA9IAogICAgICAoaXNzZXQoJHBhcmFtc1snY3VyY2F0ZWdvcnknXSkgPyAkcGFyYW1zWydjdXJjYXRlZ29yeSddIDogJycpOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdGNhdGVnb3J5J10pICkKICAgICAgewoJJGN1cmNhdGVnb3J5ID0KCSAgKGlzc2V0ICgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeSddKSA/ICRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5J10gOgoJICAgJycpOwogICAgICB9CgogICAgLy8gZ2V0IGEgY2F0ZWdvcnkgbGlzdCBmb3IgdGhlIGZpbHRlcgogICAgJGRiID0gJHRoaXMtPmNtcy0+ZGI7CiAgICAkY2F0ZWdvcnlsaXN0ID0gYXJyYXkoKTsKICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVyc19jYXRlZ29yaWVzCiAgICAgICAgICBPUkRFUiBCWSBuYW1lIEFTQyI7CgogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnkgKTsKCiAgICBpZiggISRkYnJlc3VsdCB8fCAkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMCApIAogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywxKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICR0aGlzLT5MYW5nKCdlcnJvcl9ub2NhdGVnb3JpZXMnKSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJd2hpbGUoICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQoJICB7CgkgICAgaWYoICRjdXJjYXRlZ29yeSA9PSAnJyApCgkgICAgICB7CgkJJGN1cmNhdGVnb3J5ID0gJHJvd1snY2F0ZWdvcnlfaWQnXTsKCSAgICAgIH0KCSAgICAkY2F0ZWdvcnlsaXN0WyRyb3dbJ25hbWUnXV0gPSAkcm93WydjYXRlZ29yeV9pZCddOwoJICB9CgoJLy8gc2V0dXAgdGhlIGZvcm0gcGFydCBvZiB0aGUgdGVtcGxhdGUKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3N0YXJ0Zm9ybScsCgkJCSAgICAgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsICdkZWZhdWx0YWRtaW4nKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdjYXRlZ29yeScsICR0aGlzLT5MYW5nICgnY2F0ZWdvcnknKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbnB1dF9jYXRlZ29yeScsCgkJCSAgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wRG93biAoJGlkLCAiaW5wdXRfY2F0ZWdvcnkiLCAkY2F0ZWdvcnlsaXN0LCAtMSwKCQkJCQkJCSAgICRjdXJjYXRlZ29yeSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5wdXRfc2VsZWN0JywKCQkJICAgICAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0Y2F0ZWdvcnknLAoJCQkJCQkJICR0aGlzLT5MYW5nKCdzZWxlY3RjYXRlZ29yeScpKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbnB1dF9oaWRkZW4nLAoJCQkgICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuICgkaWQsICdjdXJjYXRlZ29yeScsCgkJCQkJCQkgJGN1cmNhdGVnb3J5KSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCkpOwoKCWlmKCAkY3VyY2F0ZWdvcnkgIT0gJycgKSAKCSAgewoJICAgIC8vIGZpbGwgaW4gdGhlIGJhbm5lcnMgcGFydCBvZiB0aGUgcmVwb3J0CgkgICAgJGRicmVzdWx0ID0gJyc7CgkgICAgJHJvd2FycmF5ID0gYXJyYXkoKTsKCSAgICAkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2Jhbm5lcnMgV0hFUkUgY2F0ZWdvcnlfaWQgPSA/CiAgICAgICAgICAgICAgICAgICAgT1JERVIgQlkgY3JlYXRlZCI7CgkgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnksIGFycmF5KCRjdXJjYXRlZ29yeSkpOwoKCSAgICAkcm93Y2xhc3MgPSAncm93MSc7CgkgICAgaWYoICEgJGRicmVzdWx0ICkKCSAgICAgIHsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywxKTsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAkdGhpcy0+TGFuZygnZXJyb3JfYmFubmVycycpKTsKCSAgICAgIH0KCSAgICBlbHNlCgkgICAgICB7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpZHRleHQnLCR0aGlzLT5MYW5nKCdpZCcpKTsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25hbWV0ZXh0JywkdGhpcy0+TGFuZygnbmFtZScpKTsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Rlc2N0ZXh0JywkdGhpcy0+TGFuZygnZGVzY3JpcHRpb24nKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjcmVhdGVkdGV4dCcsJHRoaXMtPkxhbmcoJ2NyZWF0ZWQnKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdleHBpcmVzdGV4dCcsJHRoaXMtPkxhbmcoJ2V4cGlyZXMnKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbXByZXNzaW9uc3RleHQnLCR0aGlzLT5MYW5nKCdpbXByZXNzaW9ucycpKTsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpdHN0ZXh0JywkdGhpcy0+TGFuZygnaGl0cycpKTsKCQl3aGlsZSggJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApCgkJICB7CgkJICAgICRvbmVyb3cgPSBuZXcgc3RkQ2xhc3MoKTsKCiAgICAgICAgICAgICAgICAgICAgJHEzID0gIlNFTEVDVCBDT1VOVChiYW5uZXJfaWQpIEFTIGNvdW50IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9iYW5uZXJzX2hpdHMKICAgICAgICAgICAgICAgICAgICAgIFdIRVJFIGJhbm5lcl9pZCA9ID8iOwogICAgICAgICAgICAgICAgICAgICRkYnJlc3VsdDIgPSAkZGItPkV4ZWN1dGUoICRxMywgYXJyYXkoICRyb3dbJ2Jhbm5lcl9pZCddICkgKTsKCQkgICAgaWYoICRkYnJlc3VsdDIgKSB7CgkJICAgICAgJHIyID0gJGRicmVzdWx0Mi0+RmV0Y2hSb3coKTsKCQkgICAgICBpZiggJHIyICkgewoJCSAgICAgICAgJG9uZXJvdy0+aGl0cyA9ICRyMlsnY291bnQnXTsKICAgICAgICAgICAgICAgICAgICAgIH0KCQkgICAgfQoKCQkgICAgJG9uZXJvdy0+aWQgPSAkcm93WydiYW5uZXJfaWQnXTsKCQkgICAgJG9uZXJvdy0+bmFtZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCAkaWQsICdlZGl0YmFubmVyJywgJHJldHVybmlkLAoJCQkJCQkgICAgICAgJHJvd1snbmFtZSddLAoJCQkJCQkgICAgICAgYXJyYXkgKCdiYW5uZXJfaWQnID0+ICRyb3dbJ2Jhbm5lcl9pZCddLAoJCQkJCQkJICAgICAgJ2NhdGVnb3J5X2lkJyA9PiAkY3VyY2F0ZWdvcnkpKTsKCQkJCQkJICAgICAgIAoJCSAgICAkb25lcm93LT5kZXNjcmlwdGlvbiA9ICRyb3dbJ2Rlc2NyaXB0aW9uJ107CgkJICAgICRvbmVyb3ctPmNyZWF0ZWQgPSAkcm93WydjcmVhdGVkJ107CgkJICAgIGlmKCAkcm93WydleHBpcmVzJ10gPT0gZmFsc2UgKQoJCSAgICAgIHsKCQkJJG9uZXJvdy0+ZXhwaXJlcyA9ICR0aGlzLT5MYW5nKCduZXZlcicpOwoJCSAgICAgIH0KCQkgICAgZWxzZQoJCSAgICAgIHsKCQkJJG9uZXJvdy0+ZXhwaXJlcyA9ICRyb3dbJ2V4cGlyZXMnXTsKCQkgICAgICB9CgkJICAgICRvbmVyb3ctPmltcHJlc3Npb25zID0gJHJvd1snbnVtX2ltcHJlc3Npb25zJ107CgkJICAgICRvbmVyb3ctPm1heF9pbXByZXNzaW9ucyA9ICgkcm93WydtYXhfaW1wcmVzc2lvbnMnXSA9PSAnJykgPyAwIDogJHJvd1snbWF4X2ltcHJlc3Npb25zJ107CgkJICAgICRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoJCSAgICAKCQkgICAgJG9uZXJvdy0+ZWRpdGxpbmsgPQoJCSAgICAgICR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdlZGl0YmFubmVyJywgJHJldHVybmlkLAoJCQkJCSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywKCQkJCQkJCQkJCSAgICAgICR0aGlzLT5MYW5nICgnZWRpdCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyksCgkJCQkJIGFycmF5ICgnYmFubmVyX2lkJyA9PiAkcm93WydiYW5uZXJfaWQnXSwKCQkJCQkJJ2NhdGVnb3J5X2lkJyA9PiAkY3VyY2F0ZWdvcnkpKTsKCQkgICAgCgkJICAgICRvbmVyb3ctPmRlbGV0ZWxpbmsgPSAKCQkgICAgICAkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCdkb19kZWxldGViYW5uZXInLCRyZXR1cm5pZCwKCQkJCQkgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywKCQkJCQkJCQkJCSAgICAgICR0aGlzLT5MYW5nICgnZGVsZXRlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJCQkgYXJyYXkgKCdiYW5uZXJfaWQnID0+ICRyb3dbJ2Jhbm5lcl9pZCddLAoJCQkJCQknY2F0ZWdvcnlfaWQnID0+ICRjdXJjYXRlZ29yeSksCgkJCQkJICR0aGlzLT5MYW5nICgnYXJleW91c3VyZScpKTsKCQkgICAgCgkJICAgIGFycmF5X3B1c2ggKCRyb3dhcnJheSwgJG9uZXJvdyk7CgkJICAgICgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzID0gInJvdzIiIDogJHJvd2NsYXNzID0gInJvdzEiKTsKCQkgICAgCgkJICB9IC8vIHdoaWxlCgkgICAgICB9IC8vIGlmCgoJICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCRyb3dhcnJheSk7CgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKCSAgfSAvLyBpZgoKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2FkZGJhbm5lcicsCgkJCSAgICAgICAkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnYWRkYmFubmVyJywKCQkJCQkJICAkcmV0dXJuaWQsCgkJCQkJCSAgJHRoaXMtPkxhbmcgKCdhZGRiYW5uZXInKSwKCQkJCQkJICBhcnJheSAoJ2NhdGVnb3J5X2lkJyA9PiAkY3VyY2F0ZWdvcnkpLCAnJywgZmFsc2UsCgkJCQkJCSAgZmFsc2UsCgkJCQkJCSAgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CiAgICAgIH0gLy8gZWxzZQogICAgCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Jhbm5lcmxpc3QudHBsJyk7CiAgICByZXR1cm47CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0Rpc3BsYXlDYXRlZ29yaWVzVGFiKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRGlzcGxheUNhdGVnb3JpZXNUYWIoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgJGRiID0gJHRoaXMtPmNtcy0+ZGI7CiAgICAkcm93YXJyYXkgPSBhcnJheSgpOwogICAgJGRicmVzdWx0ID0gJyc7CiAgICAKICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVyc19jYXRlZ29yaWVzIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5ICk7CiAgICAkcm93Y2xhc3MgPSAncm93MSc7CgogICAgZ2xvYmFsICRnQ21zOwoKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoJJG9uZXJvdy0+aWQgPSAkcm93WydjYXRlZ29yeV9pZCddOwoJJG9uZXJvdy0+bmFtZSA9ICRyb3dbJ25hbWUnXTsKCSRvbmVyb3ctPmRlc2NyaXB0aW9uID0gJHJvd1snZGVzY3JpcHRpb24nXTsKCSRvbmVyb3ctPndpZHRoID0gJHJvd1snaW1hZ2Vfd2lkdGgnXTsKCSRvbmVyb3ctPmhlaWdodCA9ICRyb3dbJ2ltYWdlX2hlaWdodCddOwoJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgoJJG9uZXJvdy0+ZWRpdGxpbmsgPQoJICAkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnZWRpdGNhdGVnb3J5JywgJHJldHVybmlkLAoJCQkgICAgICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlICgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywKCQkJCQkJCQkJICAgJHRoaXMtPkxhbmcgKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJICAgICBhcnJheSAoJ2NhdGVnb3J5X2lkJyA9PiAkcm93WydjYXRlZ29yeV9pZCddKSk7Cgkkb25lcm93LT5kZWxldGVsaW5rID0KCSAgJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwgJ2RlbGV0ZWNhdGVnb3J5JywgJHJldHVybmlkLAoJCQkgICAgICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlICgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLAoJCQkJCQkJCQkgICAkdGhpcy0+TGFuZyAoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksCgkJCSAgICAgYXJyYXkgKCdjYXRlZ29yeV9pZCcgPT4gJHJvd1snY2F0ZWdvcnlfaWQnXSksCgkJCSAgICAgJHRoaXMtPkxhbmcgKCdhcmV5b3VzdXJlJykpOwoKCWFycmF5X3B1c2ggKCRyb3dhcnJheSwgJG9uZXJvdyk7CgkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcyA9ICJyb3cyIiA6ICRyb3djbGFzcyA9ICJyb3cxIik7CiAgICAgIH0KCgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnY2F0ZWdvcnl0ZXh0JywgJHRoaXMtPkxhbmcgKCdjYXRlZ29yeScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ25hbWV0ZXh0JywgJHRoaXMtPkxhbmcgKCduYW1lJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZGVzY3RleHQnLCAkdGhpcy0+TGFuZyAoJ2Rlc2NyaXB0aW9uJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnd2lkdGh0ZXh0JywgJHRoaXMtPkxhbmcgKCd3aWR0aCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2hlaWdodHRleHQnLCAkdGhpcy0+TGFuZyAoJ2hlaWdodCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2l0ZW1zJywgJHJvd2FycmF5KTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2l0ZW1jb3VudCcsIGNvdW50ICgkcm93YXJyYXkpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdhZGRsaW5rJywKCQkJICAgJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwgJ2FkZGNhdGVnb3J5JywKCQkJCQkgICAgICAkcmV0dXJuaWQsCgkJCQkJICAgICAgJHRoaXMtPgoJCQkJCSAgICAgIExhbmcgKCdhZGRjYXRlZ29yeScpLAoJCQkJCSAgICAgIGFycmF5ICgpLCAnJywgZmFsc2UsCgkJCQkJICAgICAgZmFsc2UsCgkJCQkJICAgICAgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CgogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlICgnY2F0ZWdvcnlsaXN0LnRwbCcpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9EaXNwbGF5UHJlZnNUYWIoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlKQogICBOT1QgUEFSVCBPRiBUSEUgTU9EVUxFIEFQSQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9EaXNwbGF5UHJlZnNUYWIoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnc3RhcnRmb3JtJywKCQkJICAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLAoJCQkJCQkgICAnc2F2ZV9hZG1pbl9wcmVmcycsCgkJCQkJCSAgICRyZXR1cm5pZCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3N1Ym1pdCcsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywKCQkJCQkJICAgICAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsgICAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdjYW5jZWwnLAoJCQkgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2NhbmNlbCcsICR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOyAgICAKICAgICAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9zdWJuZXRfZXhjbHVzaW9ucycsCgkJCSAgICR0aGlzLT5MYW5nKCdwcm9tcHRfc3VibmV0X2V4Y2x1c2lvbnMnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3N1Ym5ldF9leGNsdXNpb25zJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdzdWJuZXRfZXhjbHVzaW9ucycsCgkJCQkJCSAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3N1Ym5ldF9leGNsdXNpb25zJywiIiksNTAsMjU1KSk7CgogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlICgnYWRtaW5wcmVmcy50cGwnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRG9MaW5rQWN0aW9uKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIFRoaXMgZG9lcyB0aGUgYWN0dWFsIHVwZGF0aW5nIGFuZCBmb3J3YXJkaW5nIHRvIHRoZSAKICAgcmVxdWVzdGVkIHBhZ2UuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0RvTGlua0FjdGlvbiggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkZGIgPSAkdGhpcy0+Y21zLT5kYjsKCiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydjYXRlZ29yeV9pZCddICkgKQogICAgICB7CiAgICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICBlbHNlIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2Jhbm5lcl9pZCddICkgKQogICAgICB7CiAgICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgLy8gZ2V0IHRoZSBkZXRhaWxzIGFib3V0IHRoaXMgYmFubmVyCiAgICAkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2Jhbm5lcnMgV0hFUkUgCiAgICAgICAgY2F0ZWdvcnlfaWQgPSA/IEFORCBiYW5uZXJfaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5LCBhcnJheSggJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSwKCQkJCQkgICAgICRwYXJhbXNbJ2Jhbm5lcl9pZCddICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewogICAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nICgnZXJyb3JfZGJlcnJvcicpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICRiYW5uZXIgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICBpZiggISRiYW5uZXIgKSAKICAgICAgewogICAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICR0aGlzLT5MYW5nICgnZXJyb3JfZGJlcnJvcicpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAvLyBhZGQgdGhlIGhpdAogICAgLy8gdGVzdCBpZiB3ZSBhcmUgZXhjbHVkaW5nIHRoaXMgSVAgZnJvbSB0aGUgY291bnRpbmcKICAgICRleGNsdWRlID0gMDsKICAgICRzdWJuZXRzID0gc3BsaXQoIiwiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzdWJuZXRfZXhjbHVzaW9uIikpOwogICAgJHRlc3QgPSAwOwogICAgZm9yZWFjaCgkc3VibmV0cyBhcyAkc3VibmV0KQogICAgICB7CgkkdGVzdCA9ICR0aGlzLT5fdGVzdGlwKCAkc3VibmV0LCBnZXRlbnYoIlJFTU9URV9BRERSIiApICk7CglpZiggJHRlc3QgKQoJICB7CgkgICAgLy8gZG9uJ3QgYWxsb3cgYW55IG1vcmUgcHJvY2Vzc2luZwoJICAgICRleGNsdWRlID0gMTsKCSAgfQogICAgICB9CiAgICAKICAgIGlmKCAkZXhjbHVkZSA9PSAwICkKICAgICAgewoJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfYmFubmVyc19oaXRzIHZhbHVlcyAoPyw/LD8pIjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5LCBhcnJheSggJHBhcmFtc1snYmFubmVyX2lkJ10sCgkJCQkJCSAkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksCgkJCQkJCSBnZXRlbnYoJ1JFTU9URV9BRGRSJykgKSApOwogICAgICB9CgogICAgLy8gcmVkaXJlY3QgdG8gdG8gdGhlIGRlc3RpbmF0aW9uCiAgICByZWRpcmVjdCggJGJhbm5lclsndXJsJ10gKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRG9TYXZlQWRtaW5QcmVmcygkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBTYXZlIHRoZSBhZG1pbidzIHByZWZlcmVuY2VzCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0RvU2F2ZUFkbWluUHJlZnMoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYgKGlzc2V0ICgkcGFyYW1zWydjYW5jZWwnXSkpCiAgICAgIHsKCSR0aGlzLT5SZWRpcmVjdCAoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkKTsKICAgICAgfQoKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlICgnc3VibmV0X2V4Y2x1c2lvbnMnLAoJCQkgIGlzc2V0ICgkcGFyYW1zWydzdWJuZXRfZXhjbHVzaW9ucyddKSA/CgkJCSAgJHBhcmFtc1snc3VibmV0X2V4Y2x1c2lvbnMnXSA6ICcwJyk7CiAgICAvLyR0aGlzLT5SZWRpcmVjdCAoJGlkLCAnZGVmYXVsdGFkbWluJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0dldFVzZXJJRE1vZHVsZSgpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBHZXQgdGhlIHVzZXIgaWQgbW9kdWxlCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX2dldFVwbG9hZHNNb2R1bGUoKQogIHsKICAgICRtb2R1bGUgPSAkdGhpcy0+Z2V0TW9kdWxlSW5zdGFuY2UoIlVwbG9hZHMiKTsKICAgIGlmKCAkbW9kdWxlICkKICAgICAgewoJJHZlciA9ICRtb2R1bGUtPkdldFZlcnNpb24oKTsKCWlmKCB2ZXJzaW9uX2NvbXBhcmUoICIxLjAuNiIsICR2ZXIgKSApCgkgIHsKCSAgICByZXR1cm4gJG1vZHVsZTsKCSAgfQogICAgICB9CiAgICByZXR1cm47CiAgfQoKfSAvLyBlbmQgb2YgY2xhc3MKCj8+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[PD9waHAKJGxhbmdbJ2Vycm9yX2Jhbm5lcmV4aXN0cyddID0gJ0Jhbm5lciB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3MgRGVuaWVkLiBQbGVhc2UgY2hlY2sgeW91ciBwZXJtaXNzaW9ucy4nOwokbGFuZ1snYWRkYmFubmVyJ10gPSAnQWRkIEJhbm5lcic7CiRsYW5nWydhZGRjYXRlZ29yeSddID0gJ0FkZCBDYXRlZ29yeSc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnQXJlIFlvdSBTdXJlPyc7CiRsYW5nWydiYW5uZXJzJ10gPSAnQmFubmVycyc7CiRsYW5nWydjYW5jZWwnXSA9ICdDYW5jZWwnOwokbGFuZ1snY2F0ZWdvcmllcyddID0gJ0NhdGVnb3JpZXMnOwokbGFuZ1snY2F0ZWdvcnknXSA9ICdDYXRlZ29yeSc7CiRsYW5nWydjcmVhdGVkJ10gPSAnQ3JlYXRlZCc7CiRsYW5nWydkYXRlJ10gPSAnRGF0ZSc7CiRsYW5nWydkZWxldGUnXSA9ICdEZWxldGUnOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWydlZGl0J10gPSAnRWRpdCc7CiRsYW5nWydlZGl0Y2F0ZWdvcnknXSA9ICdFZGl0IENhdGVnb3J5JzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3IhJzsKJGxhbmdbJ2Vycm9yX2JhbmVyZXhpc3RzJ10gPSAnQmFubmVyIHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90ZW1wdHknXSA9ICdFcnJvcjogQ2F0ZWdvcnkgTm90IEVtcHR5ISc7CiRsYW5nWydlcnJvcl9kYmVycm9yJ10gPSAnRXJyb3I6IERhdGFiYXNlIEVycm9yISc7CiRsYW5nWydlcnJvcl9lbXB0eWJhbm5lcm5hbWUnXSA9ICdFcnJvcjogRW1wdHkgYmFubmVyIG5hbWUhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5Y2F0ZWdvcnknXSA9ICdFcnJvcjogRW1wdHkgQ2F0ZWdvcnkhJzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ0Vycm9yOiBJbnN1ZmZpY2llbnQgSW5wdXQnOwokbGFuZ1snZXJyb3Jfbm9jYXRlZ29yaWVzJ10gPSAnRXJyb3I6IE5vIGNhdGVnb3JpZXMgZm91bmQnOwokbGFuZ1snZXJyb3Jfbm9yZXN1bHRzJ10gPSAnTm8gYmFubmVycyBtYXRjaGVkIHRoZSBxdWVyeSc7CiRsYW5nWydlcnJvcl90ZXh0b3JpbWFnZSddID0gJ1NwZWNpZnkgVVJMIGFuZCBJTUFHRSBvciBURVhULCBub3QgYm90aCc7CiRsYW5nWydleHBpcmVzJ10gPSAnRXhwaXJlcyc7CiRsYW5nWydleHBpcmVzJ10gPSAnRXhwaXJlcyc7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdNYW5hZ2UgQmFubmVycyc7CiRsYW5nWydoZWlnaHQnXSA9ICdIZWlnaHQnOwokbGFuZ1snaGl0cyddID0gJ0hpdHMnOwokbGFuZ1snaHJlZl90ZXh0J10gPSAnTGluayBUZXh0JzsKJGxhbmdbJ2lkJ10gPSAnSUQnOwokbGFuZ1snaW1hZ2UnXSA9ICdJbWFnZSc7CiRsYW5nWydpbWFnZV90ZXh0J10gPSAnQWx0IEltYWdlIFRleHQnOwokbGFuZ1snaW1wcmVzc2lvbnMnXSA9ICdJbXByZXNzaW9ucyc7CiRsYW5nWydpbmZvX2hyZWZfdGV4dCddID0gJ0FkZGl0aW9uYWwgdGV4dCBmb3IgdGhlIGxpbmsgdGFnLiAgVGhpcyB0ZXh0IGlzIHBsYWNlZCBpbiB0aGUgbGluayB0YWcgdmVyYmF0aW0nOwokbGFuZ1snaW5mb19pbWFnZSddID0gJ1NwZWNpZnkgYSBmaWxlIHJlbGF0aXZlIHRvIHlvdXIgdXBsb2FkcyBkaXJlY3RvcnknOwokbGFuZ1snaW5mb19pbWFnZV90ZXh0J10gPSAnQWRkaXRpb25hbCB0ZXh0IGZvciB0aGUgaW1hZ2UgdGFnJzsKJGxhbmdbJ2luZm9fbWF4X2hpdHMnXSA9ICdVc2UgMCBmb3IgdW5saW1pdGVkIGhpdHMnOwokbGFuZ1snaW5mb19tYXhfaW1wcmVzc2lvbnMnXSA9ICdVc2UgMCBmb3IgdW5saW1pdGVkIGltcHJlc3Npb25zJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1snaXBhZGRyZXNzJ10gPSAnSVAgQWRkcmVzcyc7CiRsYW5nWydtYXhfaGl0cyddID0gJ01heGltdW0gSGl0cyc7CiRsYW5nWydtYXhfaW1wcmVzc2lvbnMnXSA9ICdNYXhpbXVtIEltcHJlc3Npb25zJzsKJGxhbmdbJ25hbWUnXSA9ICdOYW1lJzsKJGxhbmdbJ25ldmVyJ10gPSAnTmV2ZXInOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdQb3N0IEluc3RhbGwgTWVzc2FnZSwgZS5nLiwgQmUgc3VyZSB0byBzZXQgIk1hbmFnZSBCYW5uZXJzIiBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhJzsgIAokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0Jhbm5lcnMgbW9kdWxlIHVuaW5zdGFsbGVkLCBhbmQgYWxsIGRhdGFiYXNlIHRhYmxlcyByZW1vdmVkLiAgU29ycnkgdG8gc2VlIHlvdSBsZWF2ZS4iJzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyZW5jZXMnOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWRlc2MnXSA9ICdDYXRlZ29yeSBEZXNjcmlwdGlvbic7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnluYW1lJ10gPSAnQ2F0ZWdvcnkgTmFtZSc7CiRsYW5nWydwcm9tcHRfaW1hZ2VoZWlnaHQnXSA9ICdJbWFnZSBIZWlnaHQnOwokbGFuZ1sncHJvbXB0X2ltYWdld2lkdGgnXSA9ICdJbWFnZSBXaWR0aCc7CiRsYW5nWydwcm9tcHRfc3VibmV0X2V4Y2x1c2lvbnMnXSA9ICdFeGNsdWRlIHRoZXNlIHN1Ym5ldHMgZnJvbSBhbnkgc3RhdGlzdGljcyBnYXRoZXJpbmcnOwokbGFuZ1sncHJvbXB0X3VwbG9hZF9jYXRlZ29yeSddID0gJ0NhdGVnb3J5IChVcGxvYWRzIE1vZHVsZSknOwokbGFuZ1sncHJvbXB0X3VwbG9hZF9maWxlJ10gPSAnSW1hZ2UgKFVwbG9hZHMgTW9kdWxlKSc7CiRsYW5nWydzZWxlY3RjYXRlZ29yeSddID0gJ1NlbGVjdCBDYXRlZ29yeSc7CiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwokbGFuZ1sndGV4dCddID0gJ1RleHQnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9kdWxlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ01vZHVsZSBQcmVmZXJlbmNlcyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1sndXJsJ10gPSAnVVJMJzsKJGxhbmdbJ3dpZHRoJ10gPSAnV2lkdGgnOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdCYW5uZXJzIE1vZHVsZSc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0EgbW9kdWxlIHRvIG1hbmFnZSByb3RhdGluZyBiYW5uZXJzJzsKJGxhbmdbJ3dlbGNvbWVfdGV4dCddID0gJzxwPldlbGNvbWUgdG8gdGhlIEJhbm5lciBNYW5hZ2VtZW50IE1vZHVsZSBhZG1pbiBzZWN0aW9uLiBTb21ldGhpbmcgZWxzZSB3b3VsZCBwcm9iYWJseSBnbyBoZXJlIGlmIHRoZSBtb2R1bGUgYWN0dWFsbHkgZGlkIHNvbWV0aGluZy48L3A+JzsgCiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+CjxsaT5WZXJzaW9uIDEuMC4gNiBBdWd1c3QgMjAwNS4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjxsaT5WZXJzaW9uIDIuMC4gU2VwdGVtYmVyIDIwMDUuIEluaXRpYWwgUmVsZWFzZSBmb3IgMC4xLi48L2xpPgo8bGk+VmVyc2lvbiAyLjAuMS4gU2VwdGVtYmVyIDIwMDUuIERpc3BsYXkgc2FtcGxlIGJhbm5lciBpbiB0aGUgZWRpdCBiYW5uZXIgcGFnZSwgYWRkZWQgbmFtZT0gcGFyYW1ldGVyLCBhbmQgbWFkZSBzdWJuZXQgZXhjbHVzaW9ucyB3b3JrLiAgQWxzbyBjaGFuZ2VkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBkYXRhYmFzZSB0byBhbGxvdyBmb3IgYWRkaXRpb25hbCB0ZXh0IGluIHRoZSBsaW5rIGFuZCBpbWFnZSB0YWdzLjwvbGk+CjxsaT5WZXJzaW9uIDIuMC4yLiBTZXB0ZW1iZXIgMjAwNS4gQWRkZWQgaW50ZWdyYXRpb24gd2l0aCB0aGUgdXBsb2FkcyBtb2R1bGUgKDEuMC42KSBzbyB0aGF0IHdlIGNhbiBnZXQgbGl0cyBvZiBmaWxlcyBmb3IgYmFubmVycywgZXRjLiAgVGhlIGJhbm5lcnMgbW9kdWxlIGlzIHN0aWxsIG9wdGlvbmFsIHRob3VnaC48L2xpPgo8bGk+VmVyc2lvbiAyLjAuMy4gU2VwdGVtYmVyIDIwMDUuIEZpeGVkIGEgdmVyeSBtaW5vciBpc3N1ZSB3aXRoIG5ldmVyIGV4cGlyZXMuLjwvbGk+CjxsaT5WZXJzaW9uIDIuMC40LiBTZXB0ZW1iZXIgMjAwNS4gRml4ZWQgYSB2ZXJ5IG1pbm9yIGlzc3VlIHdpdGggbW9kdWxlIGRlcGVuZGVuY2llcywgYW5kIGEgYmlnIGJ1ZyBpbiB0aGUgZGF0YWJhc2Ugc3BlYyBpZiB5b3UgZGlkIGEgc2NyYXRjaCBpbnN0YWxsLjwvbGk+CjxsaT5WZXJzaW9uIDIuMC41LiBPY3RvYmVyIDIwMDUuIEFkZCBjb21lbnRzIGFyb3VuZCB0aGUgb3V0cHV0PC9saT4KPGxpPlZlcnNpb24gMi4wLjYuIERlY2VtYmVyIDIwMDUuIE1pbm9yIHZhbGlkYXRpb24gZml4ZXMsIGRlc2NyaXB0aW9uIGlzIG5vdyBvdXRwdXQgYmV0d2VlbiB0aGUgPGltZz5hbmQ8L2ltZz4gdGFncywgYW5kIGFuIGFsdCBhdHRyaWJ1dGUgaXMgaW4gdGhlIGltZyB0YWcuPC9saT4KPGxpPlZlcnNpb24gMi4wLjcuIEphbnVhcnkgMjAwNi4gTW9yZSB2YWxpZGF0aW9uIGZpeGVzLCBNb3ZlZCB0aGUgYWRtaW4gdGFicyBhcm91bmQsIGZpeGVkIGFuIGlzc3VlIHdoZXJlIHlvdSBjb3VsZCBhbG1vc3QgY3JlYXRlIGEgYmFubmVyIHdpdGhvdXQgZGVmaW5pbmcgYSBjYXRlZ29yeSwgYW5kLi4uIGZpeGVkIHRoZSBleHBpcnkgZGF0ZSBpc3N1ZSBmb3IgZ29vZCAoaG9wZWZ1bGx5KS48L2xpPgo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgYmFubmVyIG1hbmFnZXMgbnVtZXJvdXMgY2F0ZWdvcmllcyBvZiBiYW5uZXJzLCB0cmFja3MgaGl0cywgaW1wcmVzc2lvbnMsIGFuZCBleHBpcnkgZGF0ZXMsIGFuZCByYW5kb21seSBzZWxlY3RzIGZyb20gYWxsIGF2YWlsYWJsZSBhbmQgdmFsaWQgYmFubmVycyBmb3Igb25lIHRvIGRpc3BsYXk8L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UbyB1c2UgdGhpcyBtb2R1bGUsIHBsYWNlIHRoZSBtb2R1bGUgY29kZSBpbiBhIHBhZ2Ugb3IgdGVtcGxhdGUgdXNpbmcgdGhlIHNtYXJ0eSB0YWcgJiMxMjM7Y21zX21vZHVsZSBtb2R1bGU9XCdCYW5uZXJzXCcgY2F0ZWdvcnk9IjxjYXRlZ29yeT4ifTwvcD4gCjxwPllvdSBtdXN0IGFsc28gdXBsb2FkIGJhbm5lcnMgdG8gYSBzdWl0YWJsZSBkaXJlY3Rvcnkgd2l0aGluIHRoZSB1cGxvYWRzIGRpcmVjdG9yeSBhbmQgbXVzdCB1c2UgdGhlIGFkbWluIHBhbmVsIGludGVyZmFjZSB0byBhZGQgYmFubmVycyB0byB0aGUgZGF0YWJhc2UuPC9wCjxoMz5QYXJhbWV0ZXJzPC9oMz4KPHVsPgo8bGk+PGVtPihSRVFVSVJFRCk8L2VtPiBjYXRlZ29yeT0iY2F0ZWdvcnkiID0gcmFuZG9tbHkgc2VsZWN0IGZyb20gYWxsIGF2YWlsYWJsZSBpbiB0aGlzIGNhdGVnb3J5PC9saT4KPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbmFtZT0ibmFtZSIgPSBzZWxlY3Qgb25seSB0aGUgYmFubmVyIHdpdGggdGhpcyBuYW1lPC9saT4KPC91bD4KPGg0PkhpbnQ8L2g0Pgo8cD5UaGUgdXBsb2FkcyBtb2R1bGUgYW5kIHRoZSBiYW5uZXJzIG1vZHVsZSB3b3JrIHdlbGwgdG9nZXRoZXIuICBZb3UgY2FuIGNyZWF0ZSBhICJiYW5uZXJzIiBjYXRlZ29yeSBpbiB0aGUgdXBsb2FkcyBtb2R1bGUsIGFuZCB1cGxvYWQgeW91ciBiYW5uZXIgaW1hZ2VzIHRoZXJlLCB0aGVuIHNwZWNpZnkgImJhbm5lcnMvPGZpbGVuYW1lPiIgd2hlbiBhZGRpbmcgYSBiYW5uZXIgaW4gdGhlIGJhbm5lcnMgbW9kdWxlLjwvcD4nOwo/Pgo=]]></data>
  </file>
  <file>
    <filename>/templates/</filename>
    <isdir>1</isdir>
  </file>
  <file>
    <filename>/templates/addbanner.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Ke2Vsc2V9Cnskc3RhcnRmb3JtfQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2Jhbm5lcm5hbWV9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9iYW5uZXJuYW1lfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9iYW5uZXJkZXNjfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYmFubmVyZGVzY308L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfaW1hZ2V9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pbWFnZX08YnIvPjxlbT57JGluZm9faW1hZ2V9PC9lbT48L3A+CiAgPC9kaXY+CntpZiAkaW5wdXRfdXBsb2FkX2ZpbGV9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdXBsb2FkX2ZpbGV9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF91cGxvYWRfZmlsZX08L3A+CiAgPC9kaXY+CnsvaWZ9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdXJsfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdXJsfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9ocmVmX3RleHR9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9ocmVmX3RleHR9PGJyLz48ZW0+eyRpbmZvX2hyZWZfdGV4dH08L2VtPjwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9pbWFnZV90ZXh0fTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaW1hZ2VfdGV4dH08YnIvPjxlbT57JGluZm9faW1hZ2VfdGV4dH08L2VtPjwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9tYXhfaW1wcmVzc2lvbnN9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9tYXhfaW1wcmVzc2lvbnN9PGJyLz48ZW0+eyRpbmZvX21heF9pbXByZXNzaW9uc308L2VtPjwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9leHBpcmVzfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPntodG1sX3NlbGVjdF9kYXRlIHByZWZpeD0kZXhwaXJlc2RhdGVwcmVmaXggdGltZT0kZXhwaXJlc2RhdGUgc3RhcnRfeWVhcj0yMDAwIGVuZF95ZWFyPTIwMTB9IHtodG1sX3NlbGVjdF90aW1lIHByZWZpeD0kZXhwaXJlc2RhdGVwcmVmaXggdGltZT0kZXhwaXJlc2RhdGV9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwPC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRuZXZlcmV4cGlyZXN9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KICA8L2Rpdj4KeyRlbmRmb3JtfQp7L2lmfQo=]]></data>
  </file>
  <file>
    <filename>/templates/addcategory.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Ke2Vsc2V9Cnskc3RhcnRmb3JtfQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2NhdGVnb3J5bmFtZX08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NhdGVnb3J5bmFtZX08L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfY2F0ZWdvcnlkZXNjfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2F0ZWdvcnlkZXNjfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9pbWFnZXdpZHRofTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaW1hZ2V3aWR0aH08L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfaW1hZ2VoZWlnaHR9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pbWFnZWhlaWdodH08L3A+CiAgPC9kaXY+CntpZiAkaW5wdXRfdXBsb2FkX2NhdGVnb3J5fQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3VwbG9hZF9jYXRlZ29yeX08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3VwbG9hZF9jYXRlZ29yeX08L3A+CiAgPC9kaXY+CnsvaWZ9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRoaWRkZW59eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgogIDwvZGl2Pgp7JGVuZGZvcm19CnsvaWZ9Cg==]]></data>
  </file>
  <file>
    <filename>/templates/adminprefs.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[e2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9Cnskc3RhcnRmb3JtfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3N1Ym5ldF9leGNsdXNpb25zfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9zdWJuZXRfZXhjbHVzaW9uc308L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jcmVhdGVwYXRofTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH17JGNhbmNlbH08L3A+Cgk8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
  </file>
  <file>
    <filename>/templates/bannerlist.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[e2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Ke2Vsc2V9CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskaXRlbWNvdW50fSBCYW5uZXJzIEZvdW5kPC9wPjwvZGl2Pgp7JHN0YXJ0Zm9ybX0KIDxwPnskY2F0ZWdvcnl9Jm5ic3A7eyRpbnB1dF9jYXRlZ29yeX17JGlucHV0X3NlbGVjdH17JGlucHV0X2hpZGRlbn08L3A+CnskZW5kZm9ybX0Ke2lmICRpdGVtY291bnQgPiAwfQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgoJPHRoZWFkPgoJCTx0cj4KCQkJPHRoIHdpZHRoPSI1JSI+eyRpZHRleHR9PC90aD4KCQkJPHRoPnskbmFtZXRleHR9PC90aD4KCQkJPHRoPnskZGVzY3RleHR9PC90aD4KCQkJPHRoPnskY3JlYXRlZHRleHR9PC90aD4KCQkJPHRoPnskZXhwaXJlc3RleHR9PC90aD4KCQkJPHRoPnskaW1wcmVzc2lvbnN0ZXh0fTwvdGg+CgkJCTx0aD57JGhpdHN0ZXh0fTwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgoJCQk8dGQ+eyRlbnRyeS0+aWR9PC90ZD4KCQkJPHRkPnskZW50cnktPm5hbWV9PC90ZD4KCQkJPHRkPnskZW50cnktPmRlc2NyaXB0aW9ufTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5jcmVhdGVkfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5leHBpcmVzfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5pbXByZXNzaW9uc30veyRlbnRyeS0+bWF4X2ltcHJlc3Npb25zfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5oaXRzfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJCTwvdHI+CgkgCnsvZm9yZWFjaH0KCTwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkYmFubmVyfTwvcD48L2Rpdj4Key9pZn0K]]></data>
  </file>
  <file>
    <filename>/templates/categorylist.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRpdGVtY291bnR9IENhdGVnb3JpZXMgRm91bmQ8L3A+PC9kaXY+CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KCTx0aGVhZD4KCQk8dHI+CgkJCTx0aCB3aWR0aD0iNSUiPnskY2F0ZWdvcnl0ZXh0fTwvdGg+CgkJCTx0aD57JG5hbWV0ZXh0fTwvdGg+CgkJCTx0aD57JGRlc2N0ZXh0fTwvdGg+CgkJCTx0aCB3aWR0aD0iNSUiPnskd2lkdGh0ZXh0fTwvdGg+CgkJCTx0aCB3aWR0aD0iNSUiPnskaGVpZ2h0dGV4dH08L3RoPgoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgoJPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KCQkJPHRkPnskZW50cnktPmlkfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5kZXNjcmlwdGlvbn08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+d2lkdGh9PC90ZD4KCQkJPHRkPnskZW50cnktPmhlaWdodH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4KCQkJPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4KCQk8L3RyPgp7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPjwvZGl2Pgo=]]></data>
  </file>
  <file>
    <filename>/templates/editbanner.tpl</filename>
    <isdir>0</isdir>
    <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Ke2Vsc2V9Cnskc3RhcnRmb3JtfQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2Jhbm5lcm5hbWV9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9iYW5uZXJuYW1lfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9iYW5uZXJkZXNjfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYmFubmVyZGVzY308L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfaW1hZ2V9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pbWFnZX08YnIvPjxlbT57JGluZm9faW1hZ2V9PC9lbT48L3A+CiAgPC9kaXY+CntpZiAkaW5wdXRfdXBsb2FkX2ZpbGV9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdXBsb2FkX2ZpbGV9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF91cGxvYWRfZmlsZX08L3A+CiAgPC9kaXY+CnsvaWZ9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdXJsfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdXJsfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9ocmVmX3RleHR9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9ocmVmX3RleHR9PGJyLz48ZW0+eyRpbmZvX2hyZWZfdGV4dH08L2VtPjwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9pbWFnZV90ZXh0fTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaW1hZ2VfdGV4dH08YnIvPjxlbT57JGluZm9faW1hZ2VfdGV4dH08L2VtPjwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9pbXByZXNzaW9uc308L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHZhbHVlX2ltcHJlc3Npb25zfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9tYXhfaW1wcmVzc2lvbnN9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9tYXhfaW1wcmVzc2lvbnN9PGJyLz48ZW0+eyRpbmZvX21heF9pbXByZXNzaW9uc308L2VtPjwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9leHBpcmVzfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPntodG1sX3NlbGVjdF9kYXRlIHByZWZpeD0kZXhwaXJlc2RhdGVwcmVmaXggdGltZT0kZXhwaXJlc2RhdGUgc3RhcnRfeWVhcj0yMDAwIGVuZF95ZWFyPTIwMTB9IHtodG1sX3NlbGVjdF90aW1lIHByZWZpeD0kZXhwaXJlc2RhdGVwcmVmaXggdGltZT0kZXhwaXJlc2RhdGV9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwPC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRuZXZlcmV4cGlyZXN9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KICA8L2Rpdj4KeyRlbmRmb3JtfQo8YnIvPnskaW1hZ2V9PGJyLz4Ke2lmICRpdGVtY291bnQgPiAwfQo8YnIvPgo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgoJPHRoZWFkPgoJCTx0cj4KCQkJPHRoPnskaXB0ZXh0fTwvdGg+CgkJCTx0aD57JGRhdGV0ZXh0fTwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgoJCQk8dGQ+eyRlbnRyeS0+aXB9PC90ZD4KCQkJPHRkPnskZW50cnktPmRhdGV9PC90ZD4KCQk8L3RyPgp7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQp7L2lmfQo=]]></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>
