<?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 mincmsversion (#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.3</dtdversion>
	<name>Cataloger</name>
	<version>1.0.1</version>
    <mincmsversion>2.1</mincmsversion>
	<help><![CDATA[PGRpdiBpZD0icGFnZV90YWJzIj4NCiAgPGRpdiBpZD0iZ2VuZXJhbCI+DQogICAgV2hhdCBJcyBJdA0KICA8L2Rpdj4gICAgDQogIDxkaXYgaWQ9ImhvdyI+DQogICAgSG93IFRvIFVzZSBJdA0KICA8L2Rpdj4gICAgDQogIDxkaXYgaWQ9ImZlYXR1cmVsaXN0cyI+DQogICAgRmVhdHVyZSBMaXN0cw0KICA8L2Rpdj4gICAgDQogIDxkaXYgaWQ9ImltYWdlc3lzIj4NCiAgICBDYXRhbG9nZXIgSW1hZ2UgU3lzdGVtDQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJhZHZhbmNlZCI+DQogICAgQ3VzdG9taXphdGlvbiBhbmQgQWR2YW5jZWQgVG9waWNzDQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJ3aGF0c25ldyI+DQogICAgV2hhdCdzIG5ldw0KICA8L2Rpdj4NCiAgPGRpdiBpZD0iYWJvdXQiPg0KICAgIEFib3V0DQogIDwvZGl2Pg0KPC9kaXY+ICAgICAgIA0KDQoNCjxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+DQoNCg0KPGRpdiBpZD0icGFnZV9jb250ZW50Ij4NCg0KDQogIDxkaXYgaWQ9ImdlbmVyYWxfYyI+DQogICAgPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQogICAgPHA+VGhpcyBtb2R1bGUgbGV0cyB5b3UgY3JlYXRlIG9ubGluZSBjYXRhbG9ncyBvciBwb3J0Zm9saW9zLiBDYXRhbG9ncyBjb25zaXN0IG9mIDxzdHJvbmc+PC9zdHJvbmc+IkNhdGFsb2cgSXRlbXMiPC9zdHJvbmc+IHdoaWNoIGNvdWxkIGJlIHByb2R1Y3RzLCB3b3JrcyBvZiBhcnQsIG9yIHRoZSBsaWtlLCBhbmQgPHN0cm9uZz4iQ2F0YWxvZyBDYXRlZ29yaWVzIjwvc3Ryb25nPiB3aGljaCBjb3VsZCBiZSBpdGVtIGNhdGVnb3JpZXMgb3Igb3RoZXIgbmF0dXJhbCBkaXZpc2lvbnMgb2YgdGhlIGNhdGFsb2cuPC9wPg0KICAgIDxwPkNhdGVnb3JpZXMgbWF5IGJlIGRlZmluZWQgaGllcmFyY2hpY2FsbHkgKHVzaW5nIHRoZSBzdGFuZGFyZCBDTVMgTWFkZSBTaW1wbGUgY29udGVudCBsaXN0KS4gQ2F0ZWdvcnkgcGFnZXMgY2FuIGRpc3BsYXkgaXRlbXMgaW4gdGhlIGNhdGVnb3J5IGFuZC9vciBzdWJjYXRlZ29yaWVzLCBvcHRpb25hbGx5IHJlY3Vyc2luZyB0aHJvdWdoIHN1Yi1jYXRlZ29yaWVzLiBUaGlzIGJlaGF2aW9yIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLWNhdGVnb3J5IGJhc2lzLjwvUD4NCiAgICA8cD5UaGVyZSBpcyBhbHNvIGEgPHN0cm9uZz4iUHJpbnRhYmxlIENhdGFsb2ciPC9zdHJvbmc+LCB3aGljaCByZXByZXNlbnRzIHRoZSB3aG9sZSBjb2xsZWN0aW9uIG9mIENhdGFsb2cgSXRlbXMgb24gYSBzaW5nbGUgcGFnZS48L3A+DQogICAgPHA+VGhlIG1vZHVsZSBoYXMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgPHN0cm9uZz4iQ29udGVudCBBbGlhc2VzIjwvc3Ryb25nPiAoYSBtb2R1bGUgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY29udGVudGFsaWFzZXMiPnRoZSBEZXZlbG9wZXIgRm9yZ2U8L2E+KSwgd2hpY2ggYWxsb3dzIHlvdSB0byBwbGFjZSBhbnkgQ2F0YWxvZyBJdGVtIGludG8gbXVsdGlwbGUgQ2F0YWxvZyBDYXRlZ29yaWVzLjwvcD4NCiAgICA8cD48ZGl2IGNsYXNzPSd3YXJuaW5nJz5BcyBvZiB2ZXJzaW9uIDEuMCBDYXRhbG9nZXIgb25seSB3b3JrcyBvbiBDTVNNUyAyLnguPC9kaXY+PC9wPg0KICA8L2Rpdj4NCiAgDQogIA0KICA8ZGl2IGlkPSJob3dfYyI+DQogICAgPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQogICAgPHA+V2hlbiB5b3UgaW5zdGFsbCB0aGlzIG1vZHVsZSwgaXQgY3JlYXRlcyB0aHJlZSBuZXcgQ29udGVudCBUeXBlczogPHN0cm9uZz5DYXRhbG9nIEl0ZW08L3N0cm9uZz4sIDxzdHJvbmc+Q2F0YWxvZyBDYXRlZ29yeTwvc3Ryb25nPiwgYW5kIDxzdHJvbmc+UHJpbnRhYmxlIENhdGFsb2c8L3N0cm9uZz4uIFdoZW4geW91J3JlIGluIHlvdXIgc2l0ZSBhZG1pbmlzdHJhdGlvbiBjYXRlZ29yeSwgeW91IGFkZCA8c3Ryb25nPkNhdGFsb2cgSXRlbXM8L3N0cm9uZz4gYW5kIDxzdHJvbmc+Q2F0YWxvZyBDYXRlZ29yaWVzPC9zdHJvbmc+IGp1c3QgYXMgeW91IHdvdWxkIGFueSBvdGhlciBraW5kIG9mIHBhZ2UuIFNlbGVjdCBDb250ZW50ICZndDsgUGFnZXMgJmd0OyBBZGQgQ29udGVudCwgYW5kIHRoZW4gc2VsZWN0IDxzdHJvbmc+IkNhdGFsb2cgSXRlbSI8L3N0cm9uZz4gb3IgPHN0cm9uZz4iQ2F0YWxvZyBDYXRlZ29yeSI8L3N0cm9uZz4gZnJvbSB0aGUgPHN0cm9uZz5Db250ZW50IFR5cGUgcHVsbGRvd248L3N0cm9uZz4uPC9wPg0KICAgIDxoND5DYXRhbG9nIEl0ZW1zPC9oND4NCiAgICA8cD5BZGRpbmcgYSA8c3Ryb25nPkNhdGFsb2cgSXRlbTwvc3Ryb25nPiBpcyBzaW1pbGFyIHRvIGFkZGluZyBhbiBvcmRpbmFyeSBwYWdlIHRvIHlvdXIgc2l0ZS4gVGhlIGRhdGEgZmllbGRzIGZvciB0aGUgSXRlbSBhcmUgbm90IGV4YWN0bHkgdGhlIHNhbWUsIGhvd2V2ZXIuIEFsc28gbm90ZSB0aGF0IGluIHRoZSAiSW1hZ2VzIiB0YWIsIHlvdSBjYW4gc2VsZWN0IG11bHRpcGxlIGltYWdlcyB0byB1cGxvYWQgZm9yIHRoZSBpdGVtLiBXaGVuIHlvdSB1cGxvYWQgaW1hZ2VzLCB0aGUgc3lzdGVtIHdpbGwgc2l6ZSB0aGVtIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBjYXRhbG9nLCBjcmVhdGUgdGh1bWJuYWlscyBmb3IgdXNlIGluIHRoZSBJdGVtJ3MgcGFnZSwgY3JlYXRlIHRodW1ibmFpbHMgZm9yIGFueSBDYXRlZ29yeSBwYWdlcywgYW5kIHNvIG9uLjwvcD4NCiAgICA8cD48ZGl2IGNsYXNzPSd3YXJuaW5nJz5TZWUgaW1hZ2UgdXNlIGJlbG93LjwvZGl2PjwvcD4NCg0KICAgIDxoND5DYXRhbG9nIENhdGVnb3JpZXM8L2g0Pg0KICAgIDxwPkEgPHN0cm9uZz5DYXRhbG9nIENhdGVnb3J5PC9zdHJvbmc+IGlzIHVzZWQgZm9yIG9yZ2FuaXppbmcgeW91ciBjYXRhbG9nIGl0ZW1zLiBJdCBwcm92aWRlcyBhIHBhZ2UgdGhhdCBsaXN0cyBDYXRhbG9nZXIgY29udGVudCB0aGF0IGlzIGNvbnRhaW5lZCBieSBpdC4gQSBDYXRhbG9nIEl0ZW0gaXMgY29uc2lkZXJlZCB0byBiZSBwYXJ0IG9mIGEgQ2F0YWxvZyBDYXRlZ29yeSBpZiBpdCBpcyBiZWxvdyB0aGF0IENhdGVnb3J5IGluIHRoZSBTaXRlIEhpZXJhcmNoeS4gQ2F0ZWdvcmllcyBjYW4gc2ltaWxhcmx5IGluY2x1ZGUgb3RoZXIgQ2F0ZWdvcmllcy48L3A+DQogICAgPHA+Q2F0YWxvZyBDYXRlZ29yaWVzIGhhdmUgYSBudW1iZXIgb2Ygc2V0dGluZ3MgdG8gZGV0ZXJtaW5lIGhvdyB0aGV5IHNob3VsZCBkaXNwbGF5IHRoZSBJdGVtcyBhbmQgQ2F0ZWdvcmllcyB0aGV5IGNvbnRhaW46IGlmIHlvdSBsb29rIGF0IHRoZSA8c3Ryb25nPiJPcHRpb25zIjwvc3Ryb25nPiB0YWIsIHlvdSBjYW4gY2hvb3NlIGhvdyBtYW55IGl0ZW1zIGFuZC9vciBjYXRlZ29yaWVzIHRvIHNob3csIHdoYXQgb3JkZXIgdG8gc2hvdyB0aGVtIGluLCB3aGV0aGVyIHRvIGRpc3BsYXkgb25seSBpdGVtcyBvciBvbmx5IGNhdGVnb3JpZXMgb3IgYm90aCwgYW5kIGhvdyBtYW55IGxldmVscyBvZiB0aGUgaGllcmFyY2h5IHRvIGRpc3BsYXkgYmVsb3cgdGhlIGNhdGVnb3J5IHBhZ2UuPC9wPg0KICAgIDxicj4NCiAgICA8cD5Gb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6PC9wPg0KICAgIDxvbD4NCiAgICAgIDxsaT48Yj5IYXRzPC9iPg0KICAgICAgICA8b2w+DQogICAgICAgICAgPGxpPjxiPkZhc2hpb248L2I+DQogICAgICAgICAgICAgPG9sPg0KICAgICAgICAgICAgICAgPGxpPkZlYXRoZXJlZCBIYXQ8L2xpPjxsaT5GZWRvcmEgPC9saT48bGk+QmFzZWJhbGwgSGF0PC9saT4NCiAgICAgICAgICAgICA8L29sPg0KICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICA8bGk+PGI+V29yayBIYXRzPC9iPg0KICAgICAgICAgICAgICA8b2w+DQogICAgICAgICAgICAgICAgPGxpPkhhcmQgSGF0PC9saT48bGk+RGl2aW5nIEhlbG1ldDwvbGk+DQogICAgICAgICAgICAgIDwvb2w+DQogICAgICAgICAgICA8L2xpPg0KICAgICAgICA8L29sPg0KICAgICAgPC9saT4NCiAgICA8L29sPg0KICAgIDxwPkluIHRoaXMgZGlhZ3JhbSwgaXRlbXMgaW4gYm9sZCBhcmUgQ2F0YWxvZyBDYXRlZ29yaWVzLCBhbGwgb3RoZXIgaXRlbXMgYXJlIENhdGFsb2cgSXRlbXMuIERlcGVuZGluZyB1cG9uIGhvdyB5b3Ugc2V0IHlvdXIgb3B0aW9ucywgdGhlIDxzdHJvbmc+SGF0czwvc3Ryb25nPiBDYXRlZ29yeSBQYWdlIGNhbiBzaG93IG9ubHkgZW50cmllcyBmb3IgdGhlIDxzdHJvbmc+RmFzaGlvbjwvc3Ryb25nPiBhbmQgPHN0cm9uZz5Xb3JrIEhhdHM8L3N0cm9uZz4gQ2F0ZWdvcnkgUGFnZXMsIG9yIGl0IGNhbiBzaG93IGVudHJpZXMgZm9yIDxzdHJvbmc+RmFzaGlvbjwvc3Ryb25nPiwgPHN0cm9uZz5Xb3JrIEhhdHM8L3N0cm9uZz4sIGFuZCBhbGwgdGhlIGhhdHMgbGlzdGVkIGJlbG93IHRoZW0uPC9wPg0KICAgIDxwPllvdSBjYW4gb3B0IHRvIHNob3cgdGhlIGl0ZW1zIGluICJuYXR1cmFsIiBvcmRlciAoaS5lLiwgdGhlIG9yZGVyIHRoZSBJdGVtcyBzaG93IHVwIGluIHRoZSBDTVMgQ29udGVudCBIaWVyYXJjaHkpLCBvciBpbiBhbHBoYWJldGljYWwgb3JkZXIuPC9QPg0KICAgIDxwPklmIHlvdSBoYXZlIGxhcmdlIG51bWJlcnMgb2YgaXRlbXMgaW4gYSBDYXRlZ29yeSwgeW91IGNhbiBzZXQgdGhlIG1heGltdW0gbnVtYmVyIHRvIGJlIGRpc3BsYXllZCBpbiBhIENhdGVnb3J5IFBhZ2UsIGFuZCB0aGUgcGFnZSB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGxpbmtzIHRvIG5hdmlnYXRlIHRocm91Z2ggdGhlIGxpc3QuPC9wPg0KICAgIDxwPkVhY2ggQ2F0ZWdvcnkgcGFnZSBjYW4gaGF2ZSBkaWZmZXJlbnQgc2V0dGluZ3MgZm9yIHNvcnQgb3JkZXIsIGxldmVscyB0byBkaXNwbGF5LCBhbmQgbnVtYmVyIG9mIGl0ZW1zLiBZb3UgY2FuIHNldCB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgdmFsdWVzIGluIDxzdHJvbmc+PGVtPkV4dGVuc2lvbnMgJmd0OyBDYXRhbG9nZXIgJmd0OyBNYW5hZ2UgUHJlZmVyZW5jZXM8L2VtPjwvc3Ryb25nPi4gSWYsIGF0IGEgbGF0ZXIgZGF0ZSwgeW91IHdpc2ggdG8gY2hhbmdlIHNvbWUgc2V0dGluZyBvbiBhbGwgb2YgeW91ciBDYXRlZ29yeSBwYWdlcywgeW91IGNhbiBnbyBpbnRvIDxzdHJvbmc+PGVtPkV4dGVuc2lvbnMgJmd0OyBDYXRhbG9nZXIgJmd0OyBHbG9iYWwgQ2F0YWxvZyBPcHRpb25zPC9lbT48L3N0cm9uZz4sIGFuZCBtYWtlIHRob3NlIGNoYW5nZXMuPC9wPg0KICAgIDxoND5JbWFnZXM8L2g0Pg0KICAgIDxwPkNhdGFsb2dlciBhbGxvd3MgeW91IHRvIHNlbGVjdCBkaWZmZXJlbnQgc2l6ZSBpbWFnZXMgZm9yIEl0ZW0gcGFnZXMsIENhdGVnb3J5IHBhZ2VzLCBhbmQgdGhlIFByaW50YWJsZSBDYXRhbG9nLiBZb3UgY2FuIHNldCB0aGVzZSBkZWZhdWx0cyBpbiA8c3Ryb25nPjxlbT5FeHRlbnNpb25zICZndDsgQ2F0YWxvZ2VyICZndDsgTWFuYWdlIFByZWZlcmVuY2VzPC9lbT48L3N0cm9uZz4uPC9wPg0KICAgIDxwPldoZW4geW91IHVwbG9hZCBpbWFnZXMsIHRoZSBvcmlnaW5hbCBpcyBzdG9yZWQuIFdoZW4gc29tZW9uZSB2aXNpdHMgYSBwYWdlLCB0aGUgcmVkdWNlZCBzaXplIGltYWdlcyBhcmUgcmVxdWVzdGVkIHVzaW5nIGEgc3BlY2lhbCBVUkwsIHdoaWNoIHdpbGwgbG9hZCB0aGUgc2NhbGVkIGltYWdlIGlmIGl0IGV4aXN0cywgY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24ndC4gVGhpcyBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiBpbWFnZXMsIHdpdGhvdXQgaGF2aW5nIHRvIHJlLXVwbG9hZCBhbGwgdGhlIGltYWdlcywgb3IgcmVzY2FsaW5nIHRoZW0gYWxsIGF0IG9uY2UuPC9wPg0KICAgIDxwPjxkaXYgY2xhc3M9J3dhcm5pbmcnPlRoZSBpbWFnZSByZXNjYWxpbmcgY29kZSByZXF1aXJlcyB0aGF0IHlvdSBoYXZlIGVpdGhlciBJbWFnZU1hZ2ljayBvciBHRCBsaWIgaW5zdGFsbGVkLjwvZGl2PjwvcD4NCiAgICA8cD48ZGl2IGNsYXNzPSdpbmZvcm1hdGlvbic+Q3VycmVudGx5LCBvbmx5IGpwZWcgZm9ybWF0IGltYWdlcyBhcmUgc3VwcG9ydGVkLjwvZGl2PjwvcD4NCiAgICA8aDQ+RmlsZXM8L2g0Pg0KICAgIDxwPkNhdGFsb2dlciBhbGxvd3MgeW91IHRvIGFzc29jaWF0ZSBhcmJpdHJhcnkgZmlsZXMgd2l0aCBhbnkgSXRlbSBwYWdlLiBUaGVzZSBhcmUgdXBsb2FkZWQgdmlhIHRoZSBhZG1pbiwganVzdCBsaWtlIGltYWdlcy4NCiAgICA8cD48ZGl2IGNsYXNzPSd3YXJuaW5nJz5UaGVyZSBoYXZlIGJlZW4gcnVkaW1lbnRhcnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgKGUuZy4sIGZpbGUtZXh0ZW5zaW9uLWJhc2VkIHJlc3RyaWN0aW9ucyksIGhvd2V2ZXIsIGFzIHdpdGggYW55IGZpbGUgdXBsb2FkIGNhcGFiaWxpdHkgdGhhdCBwdXRzIGZpbGVzIGluc2lkZSB0aGUgd2ViIHJvb3QsIGlmIHlvdSBkbyBub3QgdHJ1c3QgeW91ciB1cGxvYWRlcnMsIHlvdSBhcmUgYXQgc29tZSBkZWdyZWUgb2Ygcmlzay4gWW91IGhhdmUgYmVlbiB3YXJuZWQuPC9kaXY+PC9wPg0KICA8L2Rpdj4NCiAgDQogIA0KICA8ZGl2IGlkPSJmZWF0dXJlbGlzdHNfYyI+DQogICAgPGgzPkZlYXR1cmUgTGlzdHM8L2gzPg0KICAgIDxwPllvdSBjYW4sIGFzIG9mIDxzdHJvbmc+dmVyc2lvbiAwLjQ8L3N0cm9uZz4sIGhhdmUgPHN0cm9uZz4iZmVhdHVyZSBsaXN0cyI8L3N0cm9uZz4gd2hpY2ggYXJlIHRoZSA8c3Ryb25nPjxlbT5uPC9lbT48L3N0cm9uZz4gbW9zdC1yZWNlbnRseSBhZGRlZCBjYXRhbG9nIGl0ZW1zLCBvciBhIGNvbGxlY3Rpb24gb2YgPHN0cm9uZz48ZW0+azwvZW0+PC9zdHJvbmc+IHJhbmRvbSBpdGVtcyBmcm9tIHRoZSBjYXRhbG9nLjwvcD4NCiAgICA8aDQ+IkFsbCIgRmVhdHVyZSBMaXN0PC9oND4NCiAgICA8cD5UbyBnZXQgYSBsaXN0IG9mIGFsbCBjYXRhbG9nIGl0ZW1zIChvcHRpb25hbGx5IHVuZGVyIGEgc3BlY2lmaWVkIHBhcnQgb2YgeW91ciBoaWVyYXJjaHkpIGZvciBwcm9jZXNzaW5nIHZpYSBhIHRlbXBsYXRlLCB5b3UgY2FuIHVzZQ0KICAgIHRoZSA8c3Ryb25nPiJhbGwiPC9zdHJvbmc+IGZlYXR1cmUgbGlzdC48L3A+DQogICAgPHA+VGhlIHN5bnRheCBmb3IgYW4gPHN0cm9uZz4iYWxsIjwvc3Ryb25nPiBsaXN0IGlzIGxpa2U6PC9wPg0KICAgIDxwcmU+PHN0cm9uZz4mIzEyMztDYXRhbG9nZXIgYWN0aW9uPSdhbGwnIHN1Yl90ZW1wbGF0ZT0nbXlfc3ViX3RlbXBsYXRlJ308L3N0cm9uZz48L3ByZT4NCiAgICA8cD53aGVyZSBzdWJfdGVtcGxhdGUgaXMgdGhlIHRlbXBsYXRlIHRvIHVzZSB0byByZW5kZXIgdGhlIGxpc3QuPC9wPg0KICAgIDxwPlRoZXJlIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciwgPHN0cm9uZz5hbGlhcz0ncGFnZV9hbGlhcyc8L3N0cm9uZz4sIHdoZXJlIHBhZ2VfYWxpYXMgaW5kaWNhdGVzIHRoZSB0b3Agb2YgdGhlIHRyZWUgKGUuZy4sIGEgcGxhY2UgaW4geW91ciBtZW51DQogICAgaGllcmFyY2h5LCB0eXBpY2FsbHkgYSBjYXRlZ29yeSBwYWdlKSBpbiB3aGljaCB0byBsb29rIGZvciBuZXcgaXRlbXMuIEEgc3BlY2lhbCB2YWx1ZSBmb3IgPHN0cm9uZz4icGFnZV9hbGlhcyI8L3N0cm9uZz4gaXMgPHN0cm9uZz4iLyI8L3N0cm9uZz4sIHdoaWNoIG1lYW5zIHRvIHN0YXJ0IGF0IHRoZSByb290LjwvcD4NCiAgICA8cD5UaGlzIGlzIHVzZWZ1bCBmb3IgY2F0YWxvZy13aWRlIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCB0byBnZXQgYSBsaXN0IG9mIGFsbCBjYXRlZ29yaWVzIChhbmQgZG8gc29tZXRoaW5nIHdpdGggdGhlbSksDQogICAgeW91IGNvdWxkIHVzZSB0aGUgdGFnOjwvcD4gDQogICAgPHByZT48c3Ryb25nPiYjMTIzO0NhdGFsb2dlciBhY3Rpb249J2FsbCcgc3ViX3RlbXBsYXRlPSdteV9zdWJfdGVtcGxhdGUnIGFsaWFzPScvJyByZWN1cnNlPSdjYXRlZ29yaWVzX2FsbCd9PC9zdHJvbmc+PC9wcmU+ICAgDQogICAgPHA+WW91ciB0ZW1wbGF0ZSBjb3VsZCB0aGVuIHRocm93IHRob3NlIGNhdGVnb3JpZXMgaW50byBhIHB1bGxkb3duIG1lbnUgdGhhdCByZWRpcmVjdGVkIHlvdSB0byB0aGF0IGNhdGVnb3J5J3MgcGFnZSwgZm9yIGV4YW1wbGU6PC9wPg0KICAgIDxwcmU+DQogICAgJmx0O3NlbGVjdCBuYW1lPSJmb28iIG9uY2hhbmdlPSJkb2N1bWVudC5sb2NhdGlvbj10aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZTsiPg0KICAgICZsdDtvcHRpb24gdmFsdWU9IiI+U2VsZWN0IEEgdGFyZ2V0Jmx0Oy9vcHRpb24+DQogICAgJiMxMjM7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPXRoaXNvbmV9DQogICAgICAgJmx0O29wdGlvbiB2YWx1ZT0iJiMxMjM7JHRoaXNvbmUubGlua30iPiYjMTIzOyR0aGlzb25lLnRpdGxlfSZsdDsvb3B0aW9uPg0KICAgICYjMTIzOy9mb3JlYWNofQ0KICAgICZsdDsvc2VsZWN0PjwvcHJlPg0KICAgIDxwPklmIHlvdSB3YW50ZWQgdGhhdCB0byBvbmx5IHNob3cgY2F0ZWdvcmllcyB0aGF0IHdlcmUgaW4gdGhlIHZlcnkgdG9wIGxldmVsIG9mIHlvdXIgaGllcmFyY2h5LCB5b3UnZCByZXBsYWNlIHRoZSA8c3Ryb25nPnJlY3Vyc2U9J2NhdGVnb3JpZXNfYWxsJzwvc3Ryb25nPiB3aXRoIDxzdHJvbmc+cmVjdXJzZT0nY2F0ZWdvcmllc19vbmUnPC9zdHJvbmc+LiBPciBpZiB5b3Ugd2FudGVkIGl0IHRvIGJlIGFsbCBjYXRhbG9nIEl0ZW1zIGluc3RlYWQgb2YgY2F0ZWdvcmllcywgeW91IGNvdWxkIHVzZSBhIHRhZyBsaWtlOjwvcD4NCiAgICA8cHJlPjxzdHJvbmc+JiMxMjM7Q2F0YWxvZ2VyIGFjdGlvbj0nYWxsJyBzdWJfdGVtcGxhdGU9J215X3N1Yl90ZW1wbGF0ZScgYWxpYXM9Jy8nIHJlY3Vyc2U9J2l0ZW1zX2FsbCd9PC9zdHJvbmc+PC9wcmU+DQogICAgPHA+U2ltaWxhcmx5LCB5b3UgY291bGQgaGF2ZSBpdCBsaXN0IG9ubHkgY2F0ZWdvcmllcyB1bmRlciB0aGUgY3VycmVudCBwYWdlIChieSBvbWl0dGluZyB0aGUgPHN0cm9uZz4iYWxpYXM9Jy8nIjwvc3Ryb25nPikuIFRoZSBjb21iaW5hdGlvbnMgYXJlIGJhc2ljYWxseSBsaW1pdGxlc3MhPC9wPg0KICAgIDxwPkFsbCBzdXBwb3J0ZWQgdmFsdWVzIG9mIHJlY3Vyc2UgaW5jbHVkZToNCiAgICA8dWw+DQogICAgICA8bGk+PHN0cm9uZz5pdGVtc19vbmU8L3N0cm9uZz4gLSBDYXRhbG9nIGl0ZW1zLCBubyBtb3JlIHRoYW4gb25lIGxldmVsIGJlbG93IHRoZSBjdXJyZW50IHBhZ2UgKG9yIGFsaWFzIHBvaW50KTwvbGk+DQogICAgICA8bGk+PHN0cm9uZz5pdGVtc19hbGw8L3N0cm9uZz4gLSBDYXRhbG9nIGl0ZW1zLCBhdCBhbnkgbGV2ZWwgYmVsb3cgdGhlIGN1cnJlbnQgcGFnZSAob3IgYWxpYXMgcG9pbnQpPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPmNhdGVnb3JpZXNfb25lPC9zdHJvbmc+IC0gQ2F0ZWdvcmllcywgbm8gbW9yZSB0aGFuIG9uZSBsZXZlbCBiZWxvdyB0aGUgY3VycmVudCBwYWdlIChvciBhbGlhcyBwb2ludCk8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+Y2F0ZWdvcmllc19hbGw8L3N0cm9uZz4gLSBDYXRlZ29yaWVzLCBhdCBhbnkgbGV2ZWwgYmVsb3cgdGhlIGN1cnJlbnQgcGFnZSAob3IgYWxpYXMgcG9pbnQpPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPm1peGVkX29uZTwvc3Ryb25nPiAtIENhdGFsb2cgaXRlbXMgYW5kIENhdGVnb3JpZXMsIG5vIG1vcmUgdGhhbiBvbmUgbGV2ZWwgYmVsb3cgdGhlIGN1cnJlbnQgcGFnZSAob3IgYWxpYXMgcG9pbnQpPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPm1peGVkX2FsbDwvc3Ryb25nPiAtIENhdGFsb2cgaXRlbXMgYW5kIENhdGVnb3JpZXMsIGF0IGFueSBsZXZlbCBiZWxvdyB0aGUgY3VycmVudCBwYWdlIChvciBhbGlhcyBwb2ludCk8L2xpPg0KICAgIDwvdWw+DQogICAgPC9wPg0KICAgIDxwPkl0ZW1zIGluIHRoZXNlIGxpc3RzIGNvbWUgYmFjayBpbiBoaWVyYXJjaHkgb3JkZXIuIFlvdSBjYW4gY2hhbmdlIHRoaXMgdXNpbmcgdGhlIDxzdHJvbmc+J2dsb2JhbF9zb3J0Jzwvc3Ryb25nPiBwYXJhbWV0ZXIuIFlvdXIgY2hvaWNlcyBhcmU6PC9wPg0KICAgIDx1bD4NCiAgICAgIDxsaT48c3Ryb25nPmFscGhhPC9zdHJvbmc+IC0gYWxwaGFiZXRpY2FsbHkgYnkgdGl0bGU8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+ZGF0ZTwvc3Ryb25nPiAtIGluIG9yZGVyIG9mIGl0ZW0gY3JlYXRpb24gZGF0ZTwvbGk+DQogICAgICA8bGk+PHN0cm9uZz5tZGF0ZTwvc3Ryb25nPiAtIGluIG9yZGVyIG9mIGl0ZW0gbW9kaWZpY2F0aW9uIGRhdGU8L2xpPg0KICAgIDwvdWw+DQogICAgPHA+WW91IG1heSBvcmRlciB0aGVzZSBzb3J0cyB1c2luZyB0aGUgPHN0cm9uZz4nZ2xvYmFsX3NvcnRfZGlyJzwvc3Ryb25nPiBwYXJhbWV0ZXIsIHdoaWNoIHdpbGwgYWxsb3cgPHN0cm9uZz4nYXNjJzwvc3Ryb25nPiBvciA8c3Ryb25nPidkZXNjJzwvc3Ryb25nPi48L3A+DQogICAgPHA+U28sIGZvciBhIHRob3JvdWdoIGV4YW1wbGU6PC9wPg0KICAgIDxwcmU+PHN0cm9uZz4mIzEyMztDYXRhbG9nZXIgYWN0aW9uPSdhbGwnIHN1Yl90ZW1wbGF0ZT0nbXlfc3ViX3RlbXBsYXRlJyBhbGlhcz0nLycgcmVjdXJzZT0nY2F0ZWdvcmllc19hbGwnIGdsb2JhbF9zb3J0PSdhbHBoYScgZ2xvYmFsX3NvcnRfZGlyPSdhc2MnfTwvc3Ryb25nPjwvcHJlPiANCiAgICA8aDQ+UmVjZW50bHkgQWRkZWQgRmVhdHVyZSBMaXN0PC9oND4NCiAgICA8cD5UbyB1c2UgYSAibW9zdC1yZWNlbnRseSBhZGRlZCIgbGlzdCB3aWxsIGFsbG93IHlvdSB0byBkaXNwbGF5IHRoZSBtb3N0IHJlY2VudGx5LWFkZGVkIGNhdGFsb2cgaXRlbXMgdW5kZXIgYSBzcGVjaWZpZWQgcGFydCBvZiB5b3VyIGhpZXJhcmNoeS48L3A+DQogICAgPHA+VGhlIHN5bnRheCBmb3IgYSAibW9zdCByZWNlbnRseSBhZGRlZCIgbGlzdCBpcyBsaWtlOjwvcD4NCiAgICA8cHJlPjxzdHJvbmc+JiMxMjM7Q2F0YWxvZ2VyIGFjdGlvbj0ncmVjZW50JyBzdWJfdGVtcGxhdGU9J215X3N1Yl90ZW1wbGF0ZSd9PC9zdHJvbmc+PC9wcmU+IA0KICAgIDxwPndoZXJlIHN1Yl90ZW1wbGF0ZSBpcyB0aGUgdGVtcGxhdGUgdG8gdXNlIHRvIHJlbmRlciB0aGUgbGlzdC4gVGhlcmUgYXJlIGZvdXIgb3B0aW9uYWwgcGFyYW1ldGVycywgPHN0cm9uZz5jb3VudD0nMyc8L3N0cm9uZz4sIDxzdHJvbmc+YWxpYXM9J3BhZ2VfYWxpYXMnPC9zdHJvbmc+LCA8c3Ryb25nPmdsb2JhbF9zb3J0PSdkYXRlJzwvc3Ryb25nPiwgPHN0cm9uZz5nbG9iYWxfc29ydF9kaXI9J2Rlc2MnPC9zdHJvbmc+IHdoZXJlIDxzdHJvbmc+Y291bnQ8L3N0cm9uZz4gaXMgdGhlIG51bWJlciBvZiBpdGVtcyB0byBpbmNsdWRlLCA8c3Ryb25nPnBhZ2VfYWxpYXM8L3N0cm9uZz4gaW5kaWNhdGVzIHRoZSB0b3Agb2YgdGhlIHRyZWUgKGUuZy4sIGEgcGxhY2UgaW4geW91ciBtZW51IGhpZXJhcmNoeSwgdHlwaWNhbGx5IGEgY2F0ZWdvcnkgcGFnZSkgaW4gd2hpY2ggdG8gbG9vayBmb3IgbmV3IGl0ZW1zLiBBIHNwZWNpYWwgdmFsdWUgZm9yIDxzdHJvbmc+InBhZ2VfYWxpYXMiPC9zdHJvbmc+IGlzIDxzdHJvbmc+Ii8iPC9zdHJvbmc+LCB3aGljaCBtZWFucyB0byB1c2UgPGk+YWxsPC9pPiBwYWdlcyBpbiB0aGUgc2l0ZS4gPHN0cm9uZz5nbG9iYWxfc29ydDwvc3Ryb25nPiBtYXkgYmUgPHN0cm9uZz4nZGF0ZSc8L3N0cm9uZz4gKGZvciBpdGVtIGNyZWF0aW9uIGRhdGUpIG9yIDwvc3Ryb25nPidtZGF0ZSc8L3N0cm9uZz4gZm9yIG1vZGlmaWNhdGlvbiBkYXRlLCBhbmQgPHN0cm9uZz5nbG9iYWxfc29ydF9kaXI8L3N0cm9uZz4gbWF5IGJlIDxzdHJvbmc+J2FzYyc8L3N0cm9uZz4gb3IgPHN0cm9uZz4nZGVzYyc8L3N0cm9uZz4uPC9wPg0KICAgIDxoND5SYW5kb20gSXRlbXMgRmVhdHVyZSBMaXN0PC9oND4NCiAgICA8cD5UaGUgc3ludGF4IGZvciBhICJyYW5kb20iIGxpc3QgaXMgbGlrZTo8L3A+DQogICAgPHByZT48c3Ryb25nPiYjMTIzO0NhdGFsb2dlciBhY3Rpb249J3JhbmRvbScgc3ViX3RlbXBsYXRlPSdteV9zdWJfdGVtcGxhdGUnfTwvc3Ryb25nPjwvcHJlPiANCiAgICA8cD53aGVyZSBzdWJfdGVtcGxhdGUgaXMgdGhlIHRlbXBsYXRlIHRvIHVzZSB0byByZW5kZXIgdGhlIGxpc3QuIFRoZXJlIGFyZSB0d28gb3B0aW9uYWwgcGFyYW1ldGVycywgPHN0cm9uZz5jb3VudD0nMyc8L3N0cm9uZz4gYW5kIDxzdHJvbmc+YWxpYXM9J3BhZ2VfYWxpYXMnPC9zdHJvbmc+LCB3aGVyZSA8c3Ryb25nPmNvdW50PC9zdHJvbmc+IGlzIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gaW5jbHVkZSwgYW5kIDxzdHJvbmc+cGFnZV9hbGlhczwvc3Ryb25nPiBpbmRpY2F0ZXMgdGhlIHRvcCBvZiB0aGUgdHJlZSAoZS5nLiwgYSBwbGFjZSBpbiB5b3VyIG1lbnUgaGllcmFyY2h5LCB0eXBpY2FsbHkgYSBjYXRlZ29yeSBwYWdlKSBpbiB3aGljaCB0byBsb29rIGZvciBuZXcgaXRlbXMuIEEgc3BlY2lhbCB2YWx1ZSBmb3IgPHN0cm9uZz4icGFnZV9hbGlhcyI8L3N0cm9uZz4gaXMgPHN0cm9uZz4iLyI8L3N0cm9uZz4sIHdoaWNoIG1lYW5zIHRvIHVzZSA8aT5hbGw8L2k+IHBhZ2VzIGluIHRoZSBzaXRlLjwvcD4NCiAgPC9kaXY+DQogIA0KICANCiAgPGRpdiBpZD0iaW1hZ2VzeXNfYyI+DQogICAgPGgzPkNhdGFsb2dlciBJbWFnZSBTeXN0ZW08L2gzPg0KICAgIDxwPkNhdGFsb2dlciBoYXMgYW4gaW1hZ2Ugc3lzdGVtIHRoYXQgd2lsbCBhbGxvdyB5b3UgdG8gZHluYW1pY2FsbHkgY2hhbmdlIHRoZSBpbWFnZSBkaXNwbGF5IHNpemUuIElmIHlvdSBkbyBub3QgbGlrZSBpdCwgeW91IGNhbiBhbHRlcg0KICAgIHRoZSB0ZW1wbGF0ZXMgYW5kIHVzZSBhbnkgaW1hZ2Ugc3lzdGVtIHlvdSB3YW50LjwvcD4NCiAgICA8cD5XaGVuIHlvdSB1cGxvYWQgYW4gaW1hZ2UgdXNpbmcgQ2F0YWxvZ2VyLCBpdCBnZXRzIHB1dCBpbiBhIHNwZWNpYWwgc2V0IG9mIGRpcmVjdG9yaWVzIHRvIG1ha2UgdGhlIGltYWdpbmcgZWFzaWVyLiBZb3Ugd2lsbCBzZWUgbW9yZQ0KICAgIGFib3V0IHRoaXMgbGF0ZXIuPC9wPg0KICAgIDxwPkl0IHdvcmtzIGJ5IGNhbGxpbmcgYSBQSFAgcHJvZ3JhbSBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHRoZSBpbWFnZS4gVGhlIHByb2dyYW0gdXNlcyB0aGUgZmlsZW5hbWUgdG8gc2VlIGlmIHRoZQ0KICAgIGltYWdlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBjb3JyZWN0IHNpemUuIElmIHNvLCBpdCB1c2VzIHRoYXQgaW1hZ2UuIE90aGVyd2lzZSwgaXQgdXNlcyB5b3VyIDxzdHJvbmc+R0RMSUI8L3N0cm9uZz4gb3IgPHN0cm9uZz5JbWFnZU1hZ2ljazwvc3Ryb25nPiB0byBjcmVhdGUgdGhlIGltYWdlIGluIHRoZSBjb3JyZWN0IHNpemUsIGFuZCB0aGVuIHJlZGlyZWN0cyB0byBpdC48L3A+DQogICAgPGg0PkNhdGFsb2dlciBJbWFnZSBGaWxlc3BlYyBFeHBsYW5hdGlvbjwvaDQ+DQogICAgPHA+QSBjYXRhbG9nZXIgaW1hZ2UgaGFzIGEgZmlsZXNwZWMgbGlrZTo8L3A+DQogICAgPHByZT4mbHNhcXVvO3Jvb3QmcnNhcXVvOy9jYXRhbG9nZXJfaW1hZ2UoLnBhZ2VfZXh0ZW50aW9uKT9pPWl0ZW1uYW1lX2ZfMV80MDBfMS5qcGcmYW1wO2FjPTgyODg4PC9wcmU+DQogICAgPHA+PGRpdiBjbGFzcz0naW5mb3JtYXRpb24nPlRoZXJlIGFyZSBkaWZmZXJlbmNlcyBpbiBpbWFnZSBoYW5kbGluZyBpbiA8c3Ryb25nPkNhdGFsb2dlcjwvc3Ryb25nPiBzaW5jZSA8c3Ryb25nPnZlcnNpb24gMS4wPC9zdHJvbmc+Ljxicj5UaGUgb2xkIHNwZWMgaGFzIGJlZW4gcmVtb3ZlZCwgYW5kIGlzIG5vIGxvbmdlciB1c2VkLDxicj4gaS5lLjogPHN0cm9uZz4mbHNhcXVvO3Jvb3RfcGF0aCZyc2FxdW87L21vZHVsZXMvQ2F0YWxvZ2VyL0NhdGFsb2dlci5JbWFnZS5waHA/aT1pdGVtbmFtZV9mXzFfNDAwXzEuanBnJmFjPTgyODg4PC9zdHJvbmc+IHNwZWMgYXMgZXhwbGFpbmVkIGFuZCB1c2VkIG9uIHByZXZpb3VzIHZlcnNpb25zIDxzdHJvbmc+bm8gbG9uZ2VyIHdvcmtzPC9zdHJvbmc+Ljxicj5UbyBiZSBtb3JlIHByZWNpc2UsIDxzdHJvbmc+Q2F0YWxvZ2VyLkltYWdlLnBocDwvc3Ryb25nPiBpcyBubyBsb25nZXIgdmFsaWQgYXMgaXQgdXNlZCBhbiB1bnN1cHBvcnRlZCBtZXRob2Qgb2YgY2FsbGluZyBDTVNNUyBjb3JlIGZ1bmN0aW9ucy4gSG93ZXZlciB0aGUgZmlsZW5hbWUgc3BlY3Mgc3RpbGwgYXBwbHksIHN1Y2ggYXMgPHN0cm9uZz5pdGVtbmFtZV9mXzFfNDAwXzEuanBnJmFjPTgyODg4PC9zdHJvbmc+IGFsb25nIHdpdGggdGhlIDxzdHJvbmc+YWM8L3N0cm9uZz4gcGFyYW1ldGVyIGFzIGV4cGxhaW5lZCBiZWxvdy48L2Rpdj48L3A+DQogICAgPHA+PGRpdiBjbGFzcz0nd2FybmluZyc+PHN0cm9uZz5DYXRhbG9nZXIuSW1hZ2UucGhwPC9zdHJvbmc+IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgbW9kdWxlIGFjdGlvbiBhbmQgPHN0cm9uZz5DYXRhbG9nZXI8L3N0cm9uZz4gd2lsbCB1c2UgdGhlIG5ldyBtZXRob2QgYXV0b21hdGljYWxseS4gTm8gY2hhbmdlcyBpbiB0aGUgc3ViLXRlbXBsYXRlcyBzaG91bGQgYmUgbmVlZGVkIHVubGVzcyB0aGUgZGV2ZWxvcGVyL2Rlc2lnbmVyIGhhcywgZm9yIHNvbWUgcmVhc29uLCBoYXJkLWNvZGVkIHBhcnQgb2YgdGhlIHVybCBvbiB0aGUgdGVtcGxhdGVzIGluc3RlYWQgb2YgdXNpbmcgdGhlIGdlbmVyYXRlZCBsaW5rcy48L2Rpdj48L3A+DQogICAgPHA+VGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIDxzdHJvbmc+Iml0ZW1uYW1lX2ZfMV80MDBfMS5qcGciPC9zdHJvbmc+IC0gdGhlIHN0dWZmIGJlZm9yZSBpcyBqdXN0IGEgY2FsbCB0byB0aGUgcHJvZ3JhbSwgYW5kIHRoZSA8c3Ryb25nPiZhbXA7YWM9ODI4ODg8L3N0cm9uZz4gaXMgYSByYW5kb20gdGhpbmcgdGhhdCBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IGJyb3dzZXIgY2FjaGluZy4gU28gZXhhbWluaW5nIHRoZSBuYW1lIHBpZWNlIGJ5IHBpZWNlIChzZXBhcmF0aW5nIGF0IHRoZSB1bmRlcnNjb3JlcyksIHdlIGhhdmU6PC9wPg0KICAgIDx1bD4NCiAgICAgIDxsaT48c3Ryb25nPml0ZW0gbmFtZTwvc3Ryb25nPiAtIHRoaXMgaXMgdGhlIGFsaWFzIG9mIHRoZSBpdGVtL2NhdGVnb3J5IHBhZ2UgY29udGFpbmluZyB0aGUgaW1hZ2UuPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPmltYWdlIHR5cGU8L3N0cm9uZz4gLSB0aGlzIGlzIGEgZGVzaWduYXRpb24gZm9yIGltYWdlIHR5cGU6DQogICAgICAgIDx1bD4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5mPC9zdHJvbmc+IC0gaXRlbSBmdWxsLXNpemUgaW1hZ2U8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPnQ8L3N0cm9uZz4gLSBpdGVtIHRodW1ibmFpbDwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+Y2Y8L3N0cm9uZz4gLSBjYXRlZ29yeSBmdWxsLXNpemVkIGltYWdlPC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5jdDwvc3Ryb25nPiAtIGNhdGVnb3J5IHRodW1ibmFpbDwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+Y3RmPC9zdHJvbmc+IC0gcHJpbnRhYmxlIGNhdGFsb2cgZnVsbC1zaXplZCBpbWFnZTwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICA8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+aW1hZ2UgbnVtYmVyPC9zdHJvbmc+IC0gc28gYSBnaXZlbiBpdGVtL2NhdGFsb2cvZXRjIGNhbiBoYXZlIG11bHRpcGxlIGltYWdlczwvbGk+DQogICAgICA8bGk+PHN0cm9uZz5sb25nIGRpbWVuc2lvbjwvc3Ryb25nPiAtIGxvbmcgZGltZW5zaW9uIG9mIHRoZSBpbWFnZSwgaW4gcGl4ZWxzPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPm1pc3NpbmcgZmxhZzwvc3Ryb25nPiAtIDEgaWYgeW91IHdhbnQgdG8gc2hvdyBhbiAiaW1hZ2UgbWlzc2luZyIgaW1hZ2UgaWYgdGhpcyBpbWFnZSBkb2Vzbid0IGV4aXN0LCAwIG90aGVyd2lzZTwvbGk+DQogICAgPC91bD4NCiAgICA8cD4NCiAgICBUaGlzIHdpbGwgdGFrZSBhbiBpbWFnZSBpbiA8c3Ryb25nPnJvb3RfcGF0aC91cGxvYWRzL2ltYWdlcy9jYXRhbG9nX3NyYy9pdGVtbmFtZV9zcmNfMTwvc3Ryb25nPg0KICAgIDxwPkFzIG9mIDxzdHJvbmc+dmVyc2lvbiAxLjAgQ2F0YWxvZ2VyPC9zdHJvbmc+IGhhcyBjaGFuZ2VkIHRoZSB3YXkgaXQgaGFuZGxlcyBpbWFnZXMuIFRoZSA8c3Ryb25nPkNhdGFsb2dlci5JbWFnZS5waHA8L3N0cm9uZz4gZmlsZSBhcyBiZWVuIHJlbW92ZWQgYW5kIGFsbCBpbWFnZSBoYW5kbGluZyBpcyBkb25lIHRocm91Z2ggYSBtb2R1bGUgYWN0aW9uIHVzZWQgc3BlY2lmaWNhbGx5IGZvciB0aGF0IHB1cnBvc2UuICBUaGlzIGFsbG93ZWQgYmV0dGVyIHN1cHBvcnQgdG8gcHJldHR5IFVSTHMsIGFuZCBmaWxlIG9iZnVzY2F0aW9uIGFzIHRoZSBhY3Rpb24gZG9lc24ndCByZWRpcmVjdCB0byB0aGUgZ2VuZXJhdGVkIGltYWdlIGJ1dCBnZW5lcmF0ZXMgYSBjb3B5IG9mIHRoZSBpbWFnZSB3aXRob3V0IHJldmVhbGluZyB0aGUgb3JpZ2luYWwgaW1hZ2UgbG9jYXRpb24uPC9wPg0KICAgIDxoND5BY2Nlc3NpbmcgeW91ciBPcmlnaW5hbCBJbWFnZTwvaDQ+DQogICAgPHA+V2hlbiBDYXRhbG9nZXIgdXBsb2FkcyBpbWFnZXMsIGl0IHB1dHMgdGhlbSBpbnRvIGEgZGlyZWN0b3J5IGNhbGxlZCA8c3Ryb25nPiJjYXRhbG9nZXJfc3JjIjwvc3Ryb25nPiBpbiB5b3VyIDxzdHJvbmc+dXBsb2Fkcy9pbWFnZXMvPC9zdHJvbmc+IGRpcmVjdG9yeS4gVGhlIGltYWdlcyBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBhbGlhcyBvZiB0aGUgcGFnZTogPHN0cm9uZz5hbGlhc19zcmNfIy5qcGc8L3N0cm9uZz4gd2hlcmUgIyBpcyB0aGUgaW1hZ2UgbnVtYmVyIGZvciB0aGF0IHBhZ2UuPC9wPg0KICAgIDxwPlNvLCB0byBhY2Nlc3MgdGhlIG9yaWdpbmFsbHkgdXBsb2FkZWQgaW1hZ2VzIG9uIGEgQ2F0ZWdvcnkgcGFnZSwgeW91J2QgZ2VuZXJhdGUgdGhlIFVSTCBtYW51YWxseS48L3A+DQogICAgPHA+U28gb24gYSBjYXRlZ29yeSBwYWdlLCBmb3IgZXhhbXBsZSwgaW5zdGVhZCBvZiB1c2luZyA8c3Ryb25nPnskaXRlbXNbbnVtbG9vcF0uaW1hZ2V9PC9zdHJvbmc+IHlvdSdkIHVzZSA8c3Ryb25nPiIvdXBsb2Fkcy9pbWFnZXMvY2F0YWxvZ2VyX3NyYy97JGl0ZW1zW251bWxvb3BdLmFsaWFzfV9zcmNfMS5qcGciPC9zdHJvbmc+LjwvcD4NCiAgPC9kaXY+DQogIA0KICANCiAgPGRpdiBpZD0iYWR2YW5jZWRfYyI+DQogICAgPGgzPkN1c3RvbWl6YXRpb24gYW5kIEFkdmFuY2VkIFRvcGljczwvaDM+DQogICAgPGg0PkNhdGFsb2cgSXRlbSBBdHRyaWJ1dGVzPC9oND4NCiAgICA8cD5UaGUgZGVmYXVsdCBpdGVtIGF0dHJpYnV0ZXMgYXJlIHR5cGljYWwgZm9yIGEgY2F0YWxvZyBvZiBwcm9kdWN0cyBvciBhcnR3b3JrcywgYnV0IGJ5IGdvaW5nIGludG8gPHN0cm9uZz48ZW0+RXh0ZW5zaW9ucyAmZ3Q7IENhdGFsb2dlciAmZ3Q7IE1hbmFnZSBVc2VyLURlZmluZWQgQXR0cmlidXRlczwvZW0+PC9zdHJvbmc+LCB5b3UgY2FuIGNoYW5nZSB0aGUgYXR0cmlidXRlcy4gSXQncyBiZXN0IHRvIGRlZmluZSB0aGUgYXR0cmlidXRlcyBiZWZvcmUgeW91IHN0YXJ0IGVudGVyaW5nIENhdGFsb2cgSXRlbXMuPC9wPg0KICAgIDxwPjxkaXYgY2xhc3M9J2luZm9ybWF0aW9uJz5Ob3RlIHRoYXQgdGhlIGF0dHJpYnV0ZXMgeW91IGRlZmluZSBtYXkgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgdGVtcGxhdGUgdGhhdCB5b3UncmUgdXNpbmcgdG8gZGlzcGxheSBDYXRhbG9nIEl0ZW1zOiAgc2VlIEN1c3RvbSBUZW1wbGF0ZXMgYmVsb3cuPC9kaXY+PC9wPg0KICAgIDxoND5DYXRhbG9nIENhdGVnb3J5IEF0dHJpYnV0ZXM8L2g0Pg0KICAgIDxwPlNpbWlsYXJseSwgeW91IGNhbiBzZXQgYXR0cmlidXRlcyBmb3IgQ2F0ZWdvcmllcy4gQXMgd2l0aCBJdGVtcywgdGhlIGF0dHJpYnV0ZXMgeW91IGRlZmluZSBtYXkgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgdGVtcGxhdGUgdGhhdCB5b3UncmUgdXNpbmcgdG8gZGlzcGxheSBDYXRhbG9nIENhdGVnb3JpZXMuPC9wPg0KICAgIDxoND5QcmludGFibGUgQ2F0YWxvZyBBdHRyaWJ1dGVzPC9oND4NCiAgICA8cD5MaWtld2lzZSwgeW91IGNhbiBzZXQgYXR0cmlidXRlcyBmb3IgUHJpbnRhYmxlIENhdGFsb2dzLiBBcyB3aXRoIEl0ZW1zIGFuZCBDYXRlZ29yaWVzLCB0aGUgYXR0cmlidXRlcyB5b3UgZGVmaW5lIG1heSBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSB0ZW1wbGF0ZSB0aGF0IHlvdSdyZSB1c2luZyB0byBkaXNwbGF5IHlvdXIgUHJpbnRhYmxlIENhdGFsb2cuPC9wPg0KICAgIDxoND5WYXJpYWJsZSBBY3Rpb248L2g0Pg0KICAgIDxwPllvdSBjYW4gZ3JhYiB2YXJpYWJsZXMgKGF0dHJpYnV0ZXMpIG91dHNpZGUgb2YgeW91ciBDYXRhbG9nZXIgdGVtcGxhdGVzLCB1c2luZyB0aGUgPHN0cm9uZz52YXJpYWJsZTwvc3Ryb25nPiBhY3Rpb24gcGFyYW1ldGVyLiBUaGUgc3ludGF4IGxvb2tzIGxpa2U6PC9wPg0KICAgIDxwcmU+PHN0cm9uZz4mIzEyMztDYXRhbG9nZXIgYWN0aW9uPSd2YXJpYWJsZScgbmFtZT0naXRlbW5vdGVzJyBkZWZhdWx0PSdubyBub3Rlcyd9PC9zdHJvbmc+PC9wcmU+IA0KICAgIDxwPndoZXJlIG5hbWUgaXMgdGhlIGF0dHJpYnV0ZSB0byBkaXNwbGF5ICh1c2luZyB0aGUgc2FtZSBhbGwgbG93ZXItY2FzZSwgcHVuY3R1YXRpb24tZnJlZSByZXByZXNlbnRhdGlvbiBsaWtlIHRoZSBzbWFydHkgdGVtcGxhdGUgdmFyaWFibGVzKSwgYW5kIGRlZmF1bHQgaXMgdGhlIHZhbHVlIHRvIHVzZSBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkLjwvcD4NCiAgICA8aDQ+SXRlbSBDb21wYXJpc29uczwvaDQ+DQogICAgPHA+QXMgb2YgPHN0cm9uZz52ZXJzaW9uIDAuNy43PC9zdHJvbmc+LCB0aGVyZSBpcyBhIDxzdHJvbmc+cHJvZHVjdCBjb21wYXJpc29uPC9zdHJvbmc+IGFjdGlvbjo8L3A+DQogICAgPHByZT48c3Ryb25nPiYjMTIzO0NhdGFsb2dlciBhY3Rpb249J2NvbXBhcmUnIHN1Yl90ZW1wbGF0ZT0nbXlfc3ViX3RlbXBsYXRlJyBpdGVtcz0naXRlbTEsaXRlbTIsaXRlbTMnfTwvc3Ryb25nPjwvcHJlPg0KICAgIDxwPndoZXJlIHN1Yl90ZW1wbGF0ZSBpcyB0aGUgdGVtcGxhdGUgdG8gdXNlIHRvIHJlbmRlciB0aGUgbGlzdCwgYW5kIGl0ZW1zIGlzIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgaXRlbSBwYWdlIGFsaWFzZXMgdG8gY29tcGFyZS4gQm9sZGVyIHVzZXJzIG1heSBhbHNvIGNob29zZSB0byBwYXNzIGluIHRoZSBpdGVtcyB0byBjb21wYXJlIGFzIHJlcXVlc3QgdmFyaWFibGVzLCB0aGVyZWJ5IGVuYWJsaW5nIGR5bmFtaWMgY29tcGFyaXNvbnMgYmFzZWQgb24gdXNlciBzZWxlY3Rpb25zLiBEbyB0aGlzIGJ5IHNldHRpbmcgdGhlIDxzdHJvbmc+Iml0ZW1zIjwvc3Ryb25nPiB2YXJpYWJsZSBvbiB0aGUgcmVxdWVzdCBwYXNzZWQgdG8gdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgQ2F0YWxvZ2VyIHRhZyB3aXRoIGEgY29tcGFyZSBhY3Rpb24uPC9wPg0KICAgIDxwPlRoZSBkZWZhdWx0IGl0ZW0gY29tcGFyaXNvbiB0ZW1wbGF0ZSBjb3VsZCB1c2Ugc29tZSBzdHlsaW5nLCBlLmcuLDo8L3A+DQogICAgPHByZT4NCiAgICAuaXRlbV9jb21wYXJpc29uIHRoIHtmb250LXdlaWdodDogYm9sZDsgcGFkZGluZzogNXB4OyB0ZXh0LWFsaWduOmNlbnRlcjt9DQogICAgLml0ZW1fY29tcGFyaXNvbiB0ZCB7Ym9yZGVyOiAxcHggc29saWQgZ3JheTsgcGFkZGluZzogM3B4IDVweDt0ZXh0LWFsaWduOnJpZ2h0O308L3ByZT4NCiAgDQogICAgPGg0PkN1c3RvbSBUZW1wbGF0ZXM8L2g0Pg0KICAgIDxwPklmIHlvdSdyZSB3aWxsaW5nIHRvIG1lc3MgYXJvdW5kIHdpdGggPHN0cm9uZz5TbWFydHkgVGVtcGxhdGVzPC9zdHJvbmc+LCB5b3UgY2FuIGNoYW5nZSB0aGUgbGF5b3V0IG9mIGFueSBvZiB0aGUgcGFnZXMgZ2VuZXJhdGVkIGJ5IENhdGFsb2dlci4gVGhlcmUgYXJlIGZvdXIga2luZHMgb2YgdGVtcGxhdGVzOiBvbmUga2luZCBmb3IgPHN0cm9uZz5DYXRhbG9nIEl0ZW1zPC9zdHJvbmc+LCBvbmUga2luZCBmb3IgPHN0cm9uZz5DYXRhbG9nIENhdGVnb3JpZXM8L3N0cm9uZz4sIGFuZCBvbmUga2luZCBmb3IgPHN0cm9uZz5QcmludGFibGUgQ2F0YWxvZ3M8L3N0cm9uZz4sIGFuZCBvbmUga2luZCBmb3IgPHN0cm9uZz4iRmVhdHVyZSI8L3N0cm9uZz4gbGlzdHMsIHN1Y2ggYXMgcmVjZW50bHkgYWRkZWQgaXRlbXMgb3IgcmFuZG9tIHNlbGVjdGlvbnMuPC9wPg0KICAgIDxwPldoZW4gZWRpdGluZyBhIFRlbXBsYXRlLCB0aGUgYWRtaW4gc2NyZWVuIHdpbGwgZGlzcGxheSBhIGxpc3Qgb2YgU21hcnR5IHRhZ3MgYXZhaWxhYmxlIHRvIHlvdSBmb3IgdGhhdCBraW5kIG9mIHRlbXBsYXRlLiBUaGlzDQogICAgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHRoZSBtb2R1bGUga25vd3Mgd2hhdCBraW5kIG9mIHRlbXBsYXRlIHlvdSdyZSBlZGl0aW5nLCBzbyB3aGVuIHlvdSBmaXJzdCBjcmVhdGUgdGhlIHRlbXBsYXRlLCBpdCBkaXNwbGF5cyBhbGwNCiAgICB0aGUgU21hcnR5IHRhZ3MgaXQga25vd3MgYWJvdXQsIG9ubHkgc29tZSBvZiB3aGljaCBiZWluZyBhcHBsaWNhYmxlLjwvcD4NCiAgICA8aDQ+RGlzcGxheWluZyBBdHRyaWJ1dGVzIG9uIEl0ZW0gUGFnZXM8L2g0Pg0KICAgIDxwPkF0dHJpYnV0ZXMgYXJlIGF2YWlsYWJsZSB0byBTbWFydHkgYXMgdG9wLWxldmVsIHZhcmlhYmxlcy4gVGhleSBhcmUgc3RvcmVkIGFzIHNhbml0aXplZCB2ZXJzaW9ucyBvZiB0aGUgYXR0cmlidXRlIG5hbWVzLCB3aGljaCBtZWFucw0KICAgIGl0IGlzIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlIGFuZCBhbGwgcHVuY3R1YXRpb24gYW5kIG5vbi1VUy1BU0NJSSBjaGFyYWN0ZXJzIGdldCByZW1vdmVkLiBUaGlzIGlzIGJlY2F1c2UgU21hcnR5IGlzIGZpbmlja3ksIGFuZCB3aWxsIG5vdCBoYW5kbGUgdGhlc2UgY2hhcmFjdGVycy48L3A+DQogICAgPHA+U28sIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhbiBhdHRyaWJ1dGUgY2FsbGVkIDxzdHJvbmc+Ikdsw7xja2xpY2hrZWl0Ijwvc3Ryb25nPiwgdGhlcmUgd2lsbCBiZSBhIFNtYXJ0eSB2YXJpYWJsZSA8c3Ryb25nPjxiciAvPgo8Zm9udCBzaXplPScxJz48dGFibGUgY2xhc3M9J3hkZWJ1Zy1lcnJvciB4ZS1ub3RpY2UnIGRpcj0nbHRyJyBib3JkZXI9JzEnIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMSc+Cjx0cj48dGggYWxpZ249J2xlZnQnIGJnY29sb3I9JyNmNTc5MDAnIGNvbHNwYW49IjUiPjxzcGFuIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiAjY2MwMDAwOyBjb2xvcjogI2ZjZTk0ZjsgZm9udC1zaXplOiB4LWxhcmdlOyc+KCAhICk8L3NwYW4+IE5vdGljZTogVW5kZWZpbmVkIGluZGV4OiBnbGNrbGljaGtlaXQgaW4gRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVx0bXBcdGVtcGxhdGVzX2NcQ2F0YWxvZ2VyXmZhNDY2MTYyZDA3YWY1NDQ1NDZiZTAwN2ZjZTVjNTEwNzUwMzM0MWEubW9kdWxlX2ZpbGVfdHBsLkNhdGFsb2dlcjtoZWxwLnRwbC5waHAgb24gbGluZSA8aT4yMzc8L2k+PC90aD48L3RyPgo8dHI+PHRoIGFsaWduPSdsZWZ0JyBiZ2NvbG9yPScjZTliOTZlJyBjb2xzcGFuPSc1Jz5DYWxsIFN0YWNrPC90aD48L3RyPgo8dHI+PHRoIGFsaWduPSdjZW50ZXInIGJnY29sb3I9JyNlZWVlZWMnPiM8L3RoPjx0aCBhbGlnbj0nbGVmdCcgYmdjb2xvcj0nI2VlZWVlYyc+VGltZTwvdGg+PHRoIGFsaWduPSdsZWZ0JyBiZ2NvbG9yPScjZWVlZWVjJz5NZW1vcnk8L3RoPjx0aCBhbGlnbj0nbGVmdCcgYmdjb2xvcj0nI2VlZWVlYyc+RnVuY3Rpb248L3RoPjx0aCBhbGlnbj0nbGVmdCcgYmdjb2xvcj0nI2VlZWVlYyc+TG9jYXRpb248L3RoPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MTwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjAuMDA3NzwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdyaWdodCc+MzkyMjU2PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYyc+e21haW59KCAgKTwvdGQ+PHRkIHRpdGxlPSdEOlx3YW1wNjRcd3d3XGNtc21zLjIuMS41XGFkbWluXG1vZHVsZWludGVyZmFjZS5waHAnIGJnY29sb3I9JyNlZWVlZWMnPi4uLlxtb2R1bGVpbnRlcmZhY2UucGhwPGI+OjwvYj4wPC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjI8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjE2Nzk8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY1ODk1MzY8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5DTVNNb2R1bGUtPkRvQWN0aW9uQmFzZSggICk8L3RkPjx0ZCB0aXRsZT0nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxhZG1pblxtb2R1bGVpbnRlcmZhY2UucGhwJyBiZ2NvbG9yPScjZWVlZWVjJz4uLi5cbW9kdWxlaW50ZXJmYWNlLnBocDxiPjo8L2I+NzY8L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MzwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjAuMTY4MDwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdyaWdodCc+NjU5MDYyNDwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnPkNNU01vZHVsZS0+RG9BY3Rpb24oICApPC90ZD48dGQgdGl0bGU9J0Q6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcbGliXGNsYXNzZXNcY2xhc3MuQ01TTW9kdWxlLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXGNsYXNzLkNNU01vZHVsZS5waHA8Yj46PC9iPjE0Nzc8L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+NDwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjAuMjIyMDwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdyaWdodCc+NjYwNzExMjwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnPmluY2x1ZGUoIDxmb250IGNvbG9yPScjMDBiYjAwJz4nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxtb2R1bGVzXEpNRGV2VG9vbHNcYWN0aW9uLmRvcmVsZWFzZS5waHAnPC9mb250PiApPC90ZD48dGQgdGl0bGU9J0Q6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcbGliXGNsYXNzZXNcY2xhc3MuQ01TTW9kdWxlLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXGNsYXNzLkNNU01vZHVsZS5waHA8Yj46PC9iPjE0MTA8L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+NTwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjAuMjM2NzwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdyaWdodCc+Njg5NTczNjwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnPk1vZHVsZU9wZXJhdGlvbnMtPkNyZWF0ZVhNTFBhY2thZ2UoICApPC90ZD48dGQgdGl0bGU9J0Q6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcbW9kdWxlc1xKTURldlRvb2xzXGFjdGlvbi5kb3JlbGVhc2UucGhwJyBiZ2NvbG9yPScjZWVlZWVjJz4uLi5cYWN0aW9uLmRvcmVsZWFzZS5waHA8Yj46PC9iPjQ5PC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjY8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjMwNzg8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY5MTc0OTY8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5DTVNNb2R1bGUtPkdldEhlbHBQYWdlKCAgKTwvdGQ+PHRkIHRpdGxlPSdEOlx3YW1wNjRcd3d3XGNtc21zLjIuMS41XGxpYlxjbGFzc2VzXGNsYXNzLm1vZHVsZW9wZXJhdGlvbnMuaW5jLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXGNsYXNzLm1vZHVsZW9wZXJhdGlvbnMuaW5jLnBocDxiPjo8L2I+MjMyPC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjc8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjMyNzQ8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY5MzM3NDQ8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5jbXNfbW9kdWxlX0dldEhlbHBQYWdlKCAgKTwvdGQ+PHRkIHRpdGxlPSdEOlx3YW1wNjRcd3d3XGNtc21zLjIuMS41XGxpYlxjbGFzc2VzXGNsYXNzLkNNU01vZHVsZS5waHAnIGJnY29sb3I9JyNlZWVlZWMnPi4uLlxjbGFzcy5DTVNNb2R1bGUucGhwPGI+OjwvYj40MDU8L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+ODwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjAuMzI3NDwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdyaWdodCc+Njk1MDI0MDwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnPkNhdGFsb2dlci0+R2V0SGVscCggICk8L3RkPjx0ZCB0aXRsZT0nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxsaWJcY2xhc3Nlc1xpbnRlcm5hbFxtb2R1bGVfc3VwcG9ydFxtb2RtaXNjLmluYy5waHAnIGJnY29sb3I9JyNlZWVlZWMnPi4uLlxtb2RtaXNjLmluYy5waHA8Yj46PC9iPjU2PC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjk8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjMyNzU8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY5NTA5MjA8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5DTVNNb2R1bGUtPlByb2Nlc3NUZW1wbGF0ZSggICk8L3RkPjx0ZCB0aXRsZT0nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxtb2R1bGVzXENhdGFsb2dlclxDYXRhbG9nZXIubW9kdWxlLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXENhdGFsb2dlci5tb2R1bGUucGhwPGI+OjwvYj40MTQ8L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MTA8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjMyNzk8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY5NTEwMDg8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5jbXNfbW9kdWxlX1Byb2Nlc3NUZW1wbGF0ZSggICk8L3RkPjx0ZCB0aXRsZT0nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxsaWJcY2xhc3Nlc1xjbGFzcy5DTVNNb2R1bGUucGhwJyBiZ2NvbG9yPScjZWVlZWVjJz4uLi5cY2xhc3MuQ01TTW9kdWxlLnBocDxiPjo8L2I+MjYwNjwvdGQ+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4xMTwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjAuMzI3OTwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdyaWdodCc+Njk1MTExMjwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnPlNtYXJ0eV9DTVMtPmZldGNoKCAgKTwvdGQ+PHRkIHRpdGxlPSdEOlx3YW1wNjRcd3d3XGNtc21zLjIuMS41XGxpYlxjbGFzc2VzXGludGVybmFsXG1vZHVsZV9zdXBwb3J0XG1vZHRlbXBsYXRlcy5pbmMucGhwJyBiZ2NvbG9yPScjZWVlZWVjJz4uLi5cbW9kdGVtcGxhdGVzLmluYy5waHA8Yj46PC9iPjE0MjwvdGQ+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4xMjwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjAuMzI4MDwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdyaWdodCc+Njk1NDg5NjwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnPlNtYXJ0eV9JbnRlcm5hbF9UZW1wbGF0ZUJhc2UtPmZldGNoKCAgKTwvdGQ+PHRkIHRpdGxlPSdEOlx3YW1wNjRcd3d3XGNtc21zLjIuMS41XGxpYlxjbGFzc2VzXGludGVybmFsXGNsYXNzLlNtYXJ0eV9DTVMucGhwJyBiZ2NvbG9yPScjZWVlZWVjJz4uLi5cY2xhc3MuU21hcnR5X0NNUy5waHA8Yj46PC9iPjM2NTwvdGQ+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4xMzwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjAuMzMyOTwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdyaWdodCc+NzA1MjQ2NDwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnPmNvbnRlbnRfNTgwMzllYWQ1MjRiMzFfMzM2NzIwODgoICApPC90ZD48dGQgdGl0bGU9J0Q6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcbGliXHNtYXJ0eVxzeXNwbHVnaW5zXHNtYXJ0eV9pbnRlcm5hbF90ZW1wbGF0ZWJhc2UucGhwJyBiZ2NvbG9yPScjZWVlZWVjJz4uLi5cc21hcnR5X2ludGVybmFsX3RlbXBsYXRlYmFzZS5waHA8Yj46PC9iPjE4MjwvdGQ+PC90cj4KPC90YWJsZT48L2ZvbnQ+CjxiciAvPgo8Zm9udCBzaXplPScxJz48dGFibGUgY2xhc3M9J3hkZWJ1Zy1lcnJvciB4ZS1ub3RpY2UnIGRpcj0nbHRyJyBib3JkZXI9JzEnIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMSc+Cjx0cj48dGggYWxpZ249J2xlZnQnIGJnY29sb3I9JyNmNTc5MDAnIGNvbHNwYW49IjUiPjxzcGFuIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiAjY2MwMDAwOyBjb2xvcjogI2ZjZTk0ZjsgZm9udC1zaXplOiB4LWxhcmdlOyc+KCAhICk8L3NwYW4+IE5vdGljZTogVHJ5aW5nIHRvIGdldCBwcm9wZXJ0eSBvZiBub24tb2JqZWN0IGluIEQ6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcdG1wXHRlbXBsYXRlc19jXENhdGFsb2dlcl5mYTQ2NjE2MmQwN2FmNTQ0NTQ2YmUwMDdmY2U1YzUxMDc1MDMzNDFhLm1vZHVsZV9maWxlX3RwbC5DYXRhbG9nZXI7aGVscC50cGwucGhwIG9uIGxpbmUgPGk+MjM3PC9pPjwvdGg+PC90cj4KPHRyPjx0aCBhbGlnbj0nbGVmdCcgYmdjb2xvcj0nI2U5Yjk2ZScgY29sc3Bhbj0nNSc+Q2FsbCBTdGFjazwvdGg+PC90cj4KPHRyPjx0aCBhbGlnbj0nY2VudGVyJyBiZ2NvbG9yPScjZWVlZWVjJz4jPC90aD48dGggYWxpZ249J2xlZnQnIGJnY29sb3I9JyNlZWVlZWMnPlRpbWU8L3RoPjx0aCBhbGlnbj0nbGVmdCcgYmdjb2xvcj0nI2VlZWVlYyc+TWVtb3J5PC90aD48dGggYWxpZ249J2xlZnQnIGJnY29sb3I9JyNlZWVlZWMnPkZ1bmN0aW9uPC90aD48dGggYWxpZ249J2xlZnQnIGJnY29sb3I9JyNlZWVlZWMnPkxvY2F0aW9uPC90aD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjE8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjAwNzc8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjM5MjI1NjwvdGQ+PHRkIGJnY29sb3I9JyNlZWVlZWMnPnttYWlufSggICk8L3RkPjx0ZCB0aXRsZT0nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxhZG1pblxtb2R1bGVpbnRlcmZhY2UucGhwJyBiZ2NvbG9yPScjZWVlZWVjJz4uLi5cbW9kdWxlaW50ZXJmYWNlLnBocDxiPjo8L2I+MDwvdGQ+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4yPC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MC4xNjc5PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J3JpZ2h0Jz42NTg5NTM2PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYyc+Q01TTW9kdWxlLT5Eb0FjdGlvbkJhc2UoICApPC90ZD48dGQgdGl0bGU9J0Q6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcYWRtaW5cbW9kdWxlaW50ZXJmYWNlLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXG1vZHVsZWludGVyZmFjZS5waHA8Yj46PC9iPjc2PC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjM8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjE2ODA8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY1OTA2MjQ8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5DTVNNb2R1bGUtPkRvQWN0aW9uKCAgKTwvdGQ+PHRkIHRpdGxlPSdEOlx3YW1wNjRcd3d3XGNtc21zLjIuMS41XGxpYlxjbGFzc2VzXGNsYXNzLkNNU01vZHVsZS5waHAnIGJnY29sb3I9JyNlZWVlZWMnPi4uLlxjbGFzcy5DTVNNb2R1bGUucGhwPGI+OjwvYj4xNDc3PC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjQ8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjIyMjA8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY2MDcxMTI8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5pbmNsdWRlKCA8Zm9udCBjb2xvcj0nIzAwYmIwMCc+J0Q6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcbW9kdWxlc1xKTURldlRvb2xzXGFjdGlvbi5kb3JlbGVhc2UucGhwJzwvZm9udD4gKTwvdGQ+PHRkIHRpdGxlPSdEOlx3YW1wNjRcd3d3XGNtc21zLjIuMS41XGxpYlxjbGFzc2VzXGNsYXNzLkNNU01vZHVsZS5waHAnIGJnY29sb3I9JyNlZWVlZWMnPi4uLlxjbGFzcy5DTVNNb2R1bGUucGhwPGI+OjwvYj4xNDEwPC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjU8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjIzNjc8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY4OTU3MzY8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5Nb2R1bGVPcGVyYXRpb25zLT5DcmVhdGVYTUxQYWNrYWdlKCAgKTwvdGQ+PHRkIHRpdGxlPSdEOlx3YW1wNjRcd3d3XGNtc21zLjIuMS41XG1vZHVsZXNcSk1EZXZUb29sc1xhY3Rpb24uZG9yZWxlYXNlLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXGFjdGlvbi5kb3JlbGVhc2UucGhwPGI+OjwvYj40OTwvdGQ+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz42PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MC4zMDc4PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J3JpZ2h0Jz42OTE3NDk2PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYyc+Q01TTW9kdWxlLT5HZXRIZWxwUGFnZSggICk8L3RkPjx0ZCB0aXRsZT0nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxsaWJcY2xhc3Nlc1xjbGFzcy5tb2R1bGVvcGVyYXRpb25zLmluYy5waHAnIGJnY29sb3I9JyNlZWVlZWMnPi4uLlxjbGFzcy5tb2R1bGVvcGVyYXRpb25zLmluYy5waHA8Yj46PC9iPjIzMjwvdGQ+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz43PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MC4zMjc0PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J3JpZ2h0Jz42OTMzNzQ0PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYyc+Y21zX21vZHVsZV9HZXRIZWxwUGFnZSggICk8L3RkPjx0ZCB0aXRsZT0nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxsaWJcY2xhc3Nlc1xjbGFzcy5DTVNNb2R1bGUucGhwJyBiZ2NvbG9yPScjZWVlZWVjJz4uLi5cY2xhc3MuQ01TTW9kdWxlLnBocDxiPjo8L2I+NDA1PC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjg8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjMyNzQ8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY5NTAyNDA8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5DYXRhbG9nZXItPkdldEhlbHAoICApPC90ZD48dGQgdGl0bGU9J0Q6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcbGliXGNsYXNzZXNcaW50ZXJuYWxcbW9kdWxlX3N1cHBvcnRcbW9kbWlzYy5pbmMucGhwJyBiZ2NvbG9yPScjZWVlZWVjJz4uLi5cbW9kbWlzYy5pbmMucGhwPGI+OjwvYj41NjwvdGQ+PC90cj4KPHRyPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz45PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MC4zMjc1PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J3JpZ2h0Jz42OTUwOTIwPC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYyc+Q01TTW9kdWxlLT5Qcm9jZXNzVGVtcGxhdGUoICApPC90ZD48dGQgdGl0bGU9J0Q6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcbW9kdWxlc1xDYXRhbG9nZXJcQ2F0YWxvZ2VyLm1vZHVsZS5waHAnIGJnY29sb3I9JyNlZWVlZWMnPi4uLlxDYXRhbG9nZXIubW9kdWxlLnBocDxiPjo8L2I+NDE0PC90ZD48L3RyPgo8dHI+PHRkIGJnY29sb3I9JyNlZWVlZWMnIGFsaWduPSdjZW50ZXInPjEwPC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MC4zMjc5PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J3JpZ2h0Jz42OTUxMDA4PC90ZD48dGQgYmdjb2xvcj0nI2VlZWVlYyc+Y21zX21vZHVsZV9Qcm9jZXNzVGVtcGxhdGUoICApPC90ZD48dGQgdGl0bGU9J0Q6XHdhbXA2NFx3d3dcY21zbXMuMi4xLjVcbGliXGNsYXNzZXNcY2xhc3MuQ01TTW9kdWxlLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXGNsYXNzLkNNU01vZHVsZS5waHA8Yj46PC9iPjI2MDY8L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MTE8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjMyNzk8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY5NTExMTI8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5TbWFydHlfQ01TLT5mZXRjaCggICk8L3RkPjx0ZCB0aXRsZT0nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxsaWJcY2xhc3Nlc1xpbnRlcm5hbFxtb2R1bGVfc3VwcG9ydFxtb2R0ZW1wbGF0ZXMuaW5jLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXG1vZHRlbXBsYXRlcy5pbmMucGhwPGI+OjwvYj4xNDI8L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MTI8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjMyODA8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjY5NTQ4OTY8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5TbWFydHlfSW50ZXJuYWxfVGVtcGxhdGVCYXNlLT5mZXRjaCggICk8L3RkPjx0ZCB0aXRsZT0nRDpcd2FtcDY0XHd3d1xjbXNtcy4yLjEuNVxsaWJcY2xhc3Nlc1xpbnRlcm5hbFxjbGFzcy5TbWFydHlfQ01TLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXGNsYXNzLlNtYXJ0eV9DTVMucGhwPGI+OjwvYj4zNjU8L3RkPjwvdHI+Cjx0cj48dGQgYmdjb2xvcj0nI2VlZWVlYycgYWxpZ249J2NlbnRlcic+MTM8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0nY2VudGVyJz4wLjMzMjk8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJyBhbGlnbj0ncmlnaHQnPjcwNTI0NjQ8L3RkPjx0ZCBiZ2NvbG9yPScjZWVlZWVjJz5jb250ZW50XzU4MDM5ZWFkNTI0YjMxXzMzNjcyMDg4KCAgKTwvdGQ+PHRkIHRpdGxlPSdEOlx3YW1wNjRcd3d3XGNtc21zLjIuMS41XGxpYlxzbWFydHlcc3lzcGx1Z2luc1xzbWFydHlfaW50ZXJuYWxfdGVtcGxhdGViYXNlLnBocCcgYmdjb2xvcj0nI2VlZWVlYyc+Li4uXHNtYXJ0eV9pbnRlcm5hbF90ZW1wbGF0ZWJhc2UucGhwPGI+OjwvYj4xODI8L3RkPjwvdHI+CjwvdGFibGU+PC9mb250Pgo8L3N0cm9uZz4uIE5vdGUgdGhhdCB0aGUgIsO8IiBpcyBvbWl0dGVkLjwvcD4NCiAgICA8cD5Gb3J0dW5hdGVseSwgdGhpcyBpcyBzaW1wbGlmaWVkIGJ5IHRoZSAkYXR0cmxpc3QgbGlzdCBhdmFpbGFibGUuIFRoaXMgaXMgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgYnkgZm9ybWFsIG5hbWUgKCJHbMO8Y2tsaWNoa2VpdCIpIGFuZCB0aGVpciBrZXkgKCJnbGNrbGljaGtlaXQiKS4gRm9yIGV4YW1wbGU6DQogICAgPHByZT4NCiAgICAgIHtzZWN0aW9uIG5hbWU9YXQgbG9vcD0kYXR0cmxpc3R9DQogICAgICAmbHQ7ZGl2IGNsYXNzPSJpdGVtX2F0dHJpYnV0ZV9uYW1lIj57JGF0dHJsaXN0W2F0XS5uYW1lfTombHQ7L2Rpdj4mbHQ7ZGl2IGNsYXNzPSJpdGVtX2F0dHJpYnV0ZV92YWwiPntldmFsIHZhcj0kYXR0cmxpc3RbYXRdLmtleX0mbHQ7L2Rpdj4NCiAgICAgIHsvc2VjdGlvbn08L3ByZT4NCiAgICA8cD5BcyBvZiA8c3Ryb25nPnZlcnNpb24gMC44PC9zdHJvbmc+LCB5b3UgY2FuIGFzc2lnbiBhbiBhbGlhcyB0byBlYWNoIGF0dHJpYnV0ZS4gVGhlc2UgYWxpYXNlcyBuZWVkIHRvIGJlIFVTLUFTQ0lJIGFuZCBjb250YWluIG5vIHB1bmN0dWF0aW9uLiBUaGV5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHNhbml0aXplZCBhdHRyaWJ1dGUgbmFtZSAoZS5nLiwgeW91IGNvdWxkIHVzZSB0aGUgYWxpYXMgImdsdWVja2xpY2hrZWl0IikuPC9wPg0KICAgIDxoND5EaXNwbGF5aW5nIEF0dHJpYnV0ZXMgb24gUGFnZXMgd2l0aCBMaXN0cyBvZiBJdGVtczwvaDQ+DQogICAgPHA+QXR0cmlidXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIDxzdHJvbmc+JGl0ZW1saXN0c1sjXTwvc3Ryb25nPiBpbiB0d28gZGlmZmVyZW50IHdheXM6IHRvcC1sZXZlbCBhdHRyaWJ1dGVzIG9mIHRoZSBpdGVtLCBhbmQgYXMgcGFydCBvZiB0aGUgaXRlbSdzIDxzdHJvbmc+ImF0dHIiPC9zdHJvbmc+IGFycmF5LiBUaGV5IGFyZSBzdG9yZWQgYXMgc2FuaXRpemVkIHZlcnNpb25zIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlIGFuZCBhbGwgcHVuY3R1YXRpb24gYW5kIG5vbi1VUy1BU0NJSSBjaGFyYWN0ZXJzIGdldCByZW1vdmVkLiBUaGlzIGlzIGJlY2F1c2UgU21hcnR5IGlzIGZpbmlja3ksIGFuZCB3aWxsIG5vdCBoYW5kbGUgdGhlc2UgY2hhcmFjdGVycy48L3A+DQogICAgPHA+U28sIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhbiBhdHRyaWJ1dGUgY2FsbGVkIDxzdHJvbmc+Ikdsw7xja2xpY2hrZWl0Ijwvc3Ryb25nPiwgdGhlIGl0ZW0gd2lsbCBoYXZlIDxzdHJvbmc+JGl0ZW0uZ2xja2xpY2hrZWl0PC9zdHJvbmc+IGFuZCA8c3Ryb25nPiRpdGVtLmF0dHJzWydnbGNrbGljaGtlaXQnXTwvc3Ryb25nPi4gTm90ZSB0aGF0IHRoZSA8c3Ryb25nPiLDvCI8L3N0cm9uZz4gaXMgb21pdHRlZC4gWW91IGNhbiByZWZlciB0byB0aGlzIGF0dHJpYnV0ZSBpbiB5b3VyIHRlbXBsYXRlDQogICAgd2l0aCBTbWFydHkgY29kZSBsaWtlOiA8c3Ryb25nPnskaXRlbWxpc3RbaW5kZXhdLmdsY2tsaWNra2VpdH08L3N0cm9uZz4gb3IgPHN0cm9uZz57JGl0ZW1saXN0W2luZGV4XS5hdHRycy5nbGNrbGljaGtlaXR9PC9zdHJvbmc+LjwvcD4NCiAgICA8cD5Gb3J0dW5hdGVseSwgdGhpcyBpcyBzaW1wbGlmaWVkIGJ5IHRoZSA8c3Ryb25nPiRhdHRybGlzdDwvc3Ryb25nPiBsaXN0IGF2YWlsYWJsZS4gVGhpcyBpcyBhIGxpc3Qgb2YgYXR0cmlidXRlcyBieSBmb3JtYWwgbmFtZSAoIkdsw7xja2xpY2hrZWl0IikgYW5kIHRoZWlyIGtleSAoImdsY2tsaWNoa2VpdCIpLiBGb3IgZXhhbXBsZToNCiAgICA8cHJlPg0KICAgICAgICB7Zm9yZWFjaCBmcm9tPSRhdHRybGlzdCBpdGVtPWF0dHIga2V5PWt9DQogICAgICAgIHskYXR0cn06IHskaXRlbXNbbnVtbG9vcF1bJGtdfQ0KICAgICAgICB7L2ZvcmVhY2h9PC9wcmU+DQogICAgPHA+QXMgb2YgPHN0cm9uZz52ZXJzaW9uIDAuODwvc3Ryb25nPiwgeW91IGNhbiBhc3NpZ24gYW4gYWxpYXMgdG8gZWFjaCBhdHRyaWJ1dGUuIFRoZXNlIGFsaWFzZXMgbmVlZCB0byBiZSA8c3Ryb25nPlVTLUFTQ0lJPC9zdHJvbmc+IGFuZCBjb250YWluIG5vIHB1bmN0dWF0aW9uLiBUaGV5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHNhbml0aXplZCBhdHRyaWJ1dGUgbmFtZSAoZS5nLiwgeW91IGNvdWxkIHVzZSB0aGUgYWxpYXMgImdsdWVja2xpY2hrZWl0IikuPC9wPg0KICAgIDxoND5TbWFydHkgdGFncyBpbiBBdHRyaWJ1dGVzPC9oND4NCiAgICA8cD5Tb21ldGltZXMsIHlvdSdsbCB3YW50IHRoZSBkZXNjcmlwdGlvbnMgb2YgeW91ciBpdGVtcyB0byBpbmNsdWRlIHNtYXJ0eSB0YWdzIChlLmcuLCBjbXNfc2VsZmxpbmspLiBUbyBtYWtlIHRoYXQgd29yaywgeW91J2xsIG5lZWQgdG8NCiAgICB1cGRhdGUgeW91ciB0ZW1wbGF0ZS4gRm9yIHRoZSBhdHRyaWJ1dGVzIHdoZXJlIHlvdSB3YW50IHNtYXJ0eSB0YWdzIHRvIGJlIGFjdGl2ZSwgeW91J2xsIG5lZWQgdG8gbmVzdCB0aGUgc21hcnR5IGV2YWx1YXRpb25zIGluIHlvdXIgdGVtcGxhdGUuIEZvciBleGFtcGxlOjwvcD4NCiAgICA8cHJlPiYjMTIzO2V2YWwgdmFyPSRhdHRybGlzdFthdF0ua2V5fTwvcHJlPg0KICAgIDxwPmJlY29tZXM6PC9wPg0KICAgIDxwcmU+JiMxMjM7ZXZhbCB2YXI9JGVudHJ5LT5pbnB1dCBhc3NpZ249dGhpc0F0dHJ9JiMxMjM7ZXZhbCB2YXI9JHRoaXNBdHRyfTwvcHJlPg0KICA8L2Rpdj4NCiAgDQogIA0KICA8ZGl2IGlkPSJ3aGF0c25ld19jIj4NCiAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgPGgzPldoYXQncyBuZXc8L2gzPg0KICAgICAgPHA+VGhpcyBpcyBhIHN1bW1hcnkgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZXMgdGhlIG1vZHVsZSBhcyBnb25lIHRocm91Z2guIEZvciBkZXRhaWxzLCBwbGVhc2UgY29uc3VsdCB0aGUgY2hhbmdlbG9nLjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPg0KICAgICAgICAgIENhdGFsb2dlciBpcyBub3cgZXhjbHVzaXZlbHkgY29tcGF0aWJsZSB3aXRoIENNU01TIDIueDsNCiAgICAgICAgPC9saT4gDQogICAgICAgIDxsaT4NCiAgICAgICAgICBDYXRhbG9nZXIgaXMgbm93IGNvbXBhdGlibGUgUEhQIDcueDsNCiAgICAgICAgPC9saT4gIA0KICAgICAgICA8bGk+DQogICAgICAgICAgQ2F0YWxvZ2VyIGFkbWluIG1lbnUgaGFzIG1vdmVkIHRvIGNvbnRlbnQgc2VjdGlvbjsNCiAgICAgICAgPC9saT4gDQogICAgICAgIDxsaT4NCiAgICAgICAgICBjb250ZW50IHR5cGVzIG5vdyBiZWhhdmUsIGZvciB0aGUgbW9zdCBwYXJ0LCBsaWtlIENNU01TIGNvcmUgY29udGVudCB0eXBlczoNCiAgICAgICAgICA8dWw+DQogICAgICAgICAgICA8bGk+YWxsIGF0dHJpYnV0ZSBvZiB0aGUgdHlwaWNhbCBjb250ZW50IHR5cGUgY2FuIGJlIGZvdW5kIGFuZCB1c2VkOzwvbGk+DQogICAgICAgICAgICA8bGk+YWRkaXRpb25hbCBjb250ZW50IGJsb2NrcyBjYW4gbm93IGJlIHVzZWQgb24gcGFnZSB0ZW1wbGF0ZXMgLSBDYXRhbG9nZXIgd2lsbCBhbGxvdyBpdCdzIHVzZTs8L2xpPg0KICAgICAgICAgICAgPGxpPmNhdGFsb2dlciBwYWdlcyBjYW4gbm93IGJlIHByZXZpZXdlZCBieSBDb250ZW50IE1hbmFnZXIgLSBQcmV2aWV3IHRhYjs8L2xpPg0KICAgICAgICAgIDwvdWw+DQogICAgICAgIDwvbGk+DQogICAgICAgIDxsaT4NCiAgICAgICAgICBzdWIgdGVtcGxhdGVzIGhhdmUgYSBuZXcgdmFyaWFibGUgd2l0aCB0aGUgbWFpbiBjb250ZW50IGJsb2NrIGdpdmluZyB1c2VycyBzb21lIGZyZWVkb20gcmVnYXJkaW5nIGl0cyBwbGFjZW1lbnQ7DQogICAgICAgIDwvbGk+IA0KICAgICAgICA8bGk+DQogICAgICAgICAgaW1hZ2UgdGFicyB3aWxsIG9ubHkgYmUgdmlzaWJsZSBpZiB0aGVyZSBhcmUgaW1hZ2VzIHNldCB0byBiZSB1c2VkIGluIHRoZSBtb2R1bGUgc2V0dGluZ3M7DQogICAgICAgIDwvbGk+ICANCiAgICAgICAgPGxpPg0KICAgICAgICAgIGZpbGUgdGFicyB3aWxsIG9ubHkgYmUgdmlzaWJsZSBpZiB0aGVyZSBhcmUgZmlsZXMgc2V0IHRvIGJlIHVzZWQgaW4gdGhlIG1vZHVsZSBzZXR0aW5nczsNCiAgICAgICAgPC9saT4gICANCiAgICAgICAgPGxpPg0KICAgICAgICAgIHRoZXJlIGhhdmUgYmVlbiBzb21lIGNoYW5nZXMgdG8gc3ViLXRlbXBsYXRlcyBhbHRob3VnaCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3YXMga2VwdCBhcyBtdWNoIGFzIHBvc3NpYmxlOw0KICAgICAgICA8L2xpPiAgICANCiAgICAgICAgPGxpPg0KICAgICAgICAgIHRoZSBsb2NhdGlvbiBkaXIgb2YgdGhlIGltYWdlcyBpcyBub3cgY29uY2VhbGVkIGlmIENhdGFsb2dlciBuYXRpdmUgaW1hZ2UgaGFuZGxpbmcgaXMgdXNlZDsNCiAgICAgICAgPC9saT4gICAgDQogICAgICAgIDxsaT4NCiAgICAgICAgICBhIGh1Z2UgbnVtYmVyIG9mIDxlbT51bmRlciB0aGUgaG9vZDwvZW0+IG1vZGlmaWNhdGlvbnMgYW5kIG9wdGltaXphdGlvbnMgd2FzIG1hZGUgdG8gdGhlIGNvZGU7DQogICAgICAgIDwvbGk+ICAgIA0KICAgICAgPC91bD4NCiAgICAgIDxwPkFsdGhvdWdoIGFsbCBlZmZvcnRzIGhhdmUgYmVlbiBtYWRlIHRvIHRlc3QgYW5kIG1ha2Ugc3VyZSB0aGUgbW9kdWxlIHdvcmtzIHdpdGhvdXQgaXNzdWVzLCBnaXZlbiB0aGUgbnVtYmVyIG9mIG1vZGlmaWNhdGlvbnMsIG1pbm9yIGJ1Z3MgYXJlIGV4cGVjdGVkIHRvIGV4aXN0LCBzbyBwbGVhc2UgZmlsZSBhIEJ1ZyBSZXBvcnQgaWYgeW91IGZpbmQgb25lLjwvcD4NCiAgICAgIDxwPjxkaXYgY2xhc3M9J3dhcm5pbmcnPkl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIGEgZnVsbCBiYWNrdXAgb2YgZmlsZXMgYW5kIGRhdGFiYXNlIGJlZm9yZSBhbiB1cGdyYWRlLiBTb21lLCBtb3JlIGNvbXBsZXgsIGluc3RhbGxhdGlvbnMgbWF5IGhhdmUgaXNzdWVzOiBtb3N0LCBpZiBub3QgYWxsLCBvZiB0aGVtIHNob3VsZCBiZSBzb2x2ZWQgYnkgY2xlYXJpbmcgQ01TTVMgY2FjaGUgYW5kL29yIHR3ZWFraW5nIHN1Yi10ZW1wbGF0ZXMuPC9kaXY+PC9wPg0KICAgIDwvZGl2PiANCiAgPC9kaXY+DQogIA0KICANCiAgPGRpdiBpZD0iYWJvdXRfYyI+DQogICAgDQogICAgPGgzPlN1cHBvcnQ8L2gzPg0KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICA8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQogICAgICA8dWw+DQogICAgICAgIDxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCwgcGxlYXNlIHZpc2l0IHRoZSBDTVMgTWFkZSBTaW1wbGUgIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmciPkRldmVsb3BlciBGb3JnZTwvYT4uPC9saT4NCiAgICAgICAgPGxpPlRvIG9idGFpbiBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSBzZW5kIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IgYXQgPGEgaHJlZj0ibWFpbHRvOmpvbW9yZ0BzbS1hcnQtbGFiLmNvbSI+Jmx0O2pvbW9yZ0BzbS1hcnQtbGFiLmNvbSZndDs8L2E+LjwvbGk+DQogICAgICAgIDxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4NCiAgICAgICAgPGxpPlRoZSBhdXRob3IgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4NCiAgICAgICAgPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5IGFuZCBncm92ZWxsaW5nIGZvciBmcmVlIHN1cHBvcnQuPC9saT4NCiAgICAgIDwvdWw+DQogICAgIDwvZGl2Pg0KICAgICAgIA0KICAgIDxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+ICAgIA0KICAgICAgPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4NCg0KICAgICAgPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEyIC0gMjAxNiwgRmVybmFuZG8gTW9yZ2FkbyAoSm9Nb3JnKSA8YSBocmVmPSJtYWlsdG86am9tb3JnQHNtLWFydC1sYWIuY29tIj4mbHQ7am9tb3JnQHNtLWFydC1sYWIuY29tJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCiAgICAgIDxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgU2FtdWVsIEdvbGRzdGVpbi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+ICANCiAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6ODUlO2ZvbnQtd2VpZ2h0OiBib2xkOyI+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7PGJyIC8+IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjs8YnIgLz4gZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+DQogICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjg1JTtmb250LXdlaWdodDogYm9sZDsiPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7PGJyIC8+IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuPC9wPg0KICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZTo4NSU7Zm9udC13ZWlnaHQ6IGJvbGQ7Ij5TZWUgdGhlR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy48L3A+DQogICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjg1JTtmb250LXdlaWdodDogYm9sZDsiPllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOzxiciAvPiBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9yIHJlYWQgaXQgb25saW5lPC9hPi48L3A+DQogICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjg1JTtmb250LXdlaWdodDogYm9sZDsiPllvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+DQogICAgPC9kaXY+DQogICAgDQogICAgPGgzPkNyZWRpdHM8L2gzPg0KICAgIDxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIG9yaWdpbmFseSBjcmVhdGVkLCBkZXZlbG9wZWQgYW5kIG1haW50YWluZWQgZm9yIGEgbnVtYmVyIG9mIHllYXJzIGJ5IFNhbXVlbCBHb2xkc3RlaW4uIEZlcm5hbmRvIE1vcmdhZG8gdG9vayBvdmVyIGFuZCBoYXMgYmVlbiBtYWludGFpbmluZyBpdCAoZm9yIGJldHRlciBvciBmb3Igd29yc3QpIHNpbmNlIDIwMTIuPC9wPg0KICAgIDxwPjwvcD4NCiAgICA8dWw+DQogICAgICA8bGk+PHN0cm9uZz5TYW11ZWwgR29sZHN0ZWluIChzamcpPC9zdHJvbmc+IC0gQ3JlYXRpb24gYW5kIGRldmVsb3BtZW50OzwvbGk+DQogICAgICA8bGk+PHN0cm9uZz5OdW5vPC9zdHJvbmc+IC0gY29kZSBjb250cmlidXRpb25zOzwvbGk+DQogICAgICA8bGk+PHN0cm9uZz5Nb3J0ZW4gUG91bHNlbiAoc2lsbWFyaWxsaW9uKTwvc3Ryb25nPiAtIGNvZGUgY29udHJpYnV0aW9uczs8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+RmVybmFuZG8gTW9yZ2FkbyAoSm9Nb3JnKTwvc3Ryb25nPiAtIGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZTs8L2xpPg0KICAgIDwvdWw+DQogICAgDQogICAgPGgzPkNvbnRyaWJ1dG9yczwvaDM+DQogICAgPHVsPg0KICAgICAgPGxpPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LmlkLWEuY28udWsiIHJlbD0iZXh0ZXJuYWwiPlBhdWwgQ29vcGVyPC9hPiAtIHNwb25zb3JlZCB0aGUgZGV2ZWxvcG1lbnQgb2YgdGV4dGFyZWEgYXR0cmlidXRlczs8L2xpPg0KICAgICAgPGxpPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3Lm1hdHRob3Juc2J5LmNhIiByZWw9ImV4dGVybmFsIj5NYXR0IEhvbXNieSAoRElHSTMpPC9hPiAtIHNwb25zb3JzaGlwOzwvbGk+DQogICAgPC91bD4NCiAgICA8cD5UaGFua3MgdG8gbnVtZXJvdXMgcGF0aWVudCB1c2VycyBhbmQgYnVnIHRlc3RlcnMgKG1hbnkgb2Ygd2hvbSBoYWQgbm8gaWRlYSB3aGF0IHRoZXkgd2VyZSBnZXR0aW5nIGludG8pLjwvcD4gDQogIDwvZGl2Pg0KPC9kaXY+DQoNCg0K]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKb01vcmcgJmx0O2pvbW9yZy5tb3JnQGdtYWlsLmNvbSZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjAuMTxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KPGxpPlZlcnNpb24gMC4xMS4zIC0gRGVjZW1iZXIgMjAxMi4KICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz5CdWcgZml4OiBbIzQ3ODFdIC0gIDwvc3Ryb25nPiBjbXNfc2VsZmxpbmsgZG9lc250IHdvcmsgPC9zdHJvbmc+LjwvbGk+CiAgICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAwLjExLjIgLSBOb3ZlbWJlciAyMDEyLgogICAgPHVsPgogICAgICAgIDxsaT48c3Ryb25nPkJ1ZyBmaXg6IC0ge0NhdGFsb2dlciBhY3Rpb249J2FsbCcgc3ViX3RlbXBsYXRlPSdteV9zdWJfdGVtcGxhdGUnIGFsaWFzPScvJ308L3N0cm9uZz4gYnJlYWtzIHdpdGggYSBQSFAgZXJyb3IuPC9saT4KICAgIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDAuMTEuMSAtIE9jdG9iZXIgMjAxMi4KICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz5CdWcgZml4OiBbIzg0MF0gLTwvc3Ryb25nPiBSZXBlYXRlZCBjb250ZW50IG91dHB1dCBpZiBtdWx0aXBsZSBjb250ZW50IHRhZ3MgaW4gdGVtcGxhdGUuPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5CdWcgZml4OiBbIzgzODFdIC0ge3Byb2Nlc3MgcGFnZWRhdGF9PC9zdHJvbmc+IGJyZWFrcyBjYXRhbG9nZXIgdGVtcGxhdGUuPC9saT4KICAgIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDAuMTEuMCAtIEF1Z3VzdCAyMDEyLgogIDx1bD4KICAgIDxsaT5OdW1lcm91cyBmaXhlcyBmb3IgQ01TTVMgMS4xMSBjb21wYXRpYmlsaXR5OzwvbGk+CiAgICA8bGk+Rm9yZ2UgUnVsZXMgY29tcGxpYW50OzwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMC45LjEgLSBKYW4gMjAxMS4gQnVnIGZpeCBmb3IgY2hlY2tib3ggaXRlbSBhdHRyaWJ1dGUgdHlwZXMuPC9saT4KPGxpPlZlcnNpb24gMC45IC0gTm92IDIwMTAuCiAgPHVsPgogICAgPGxpPk51bWVyb3VzIGZpeGVzIGZvciBDTVNNUyAxLjkgY29tcGF0aWJpbGl0eTwvbGk+CiAgICA8bGk+VGVkJ3MgZXhjZWxsZW50IGRyb3Bkb3duIGF0dHJpYnV0ZSB0eXBlPC9saT4KCTxsaT5PcHRpbWl6ZWQgInJhbmRvbSIgYWN0aW9uIGZvciBzaXRlcyB3aXRoIGh1Z2UgbnVtYmVycyBvZiBpdGVtIHBhZ2VzPC9saT4KICAgIDxsaT5DaGVja2JveCBhdHRyaWJ1dGUgdHlwZTwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMC44LjEgKHVucmVsZWFzZWQsIHNlZSAwLjkpPC9saT4KPGxpPlZlcnNpb24gMC44LjAgLSBTZXAgMjAxMC4KICA8dWw+CiAgICA8bGk+UmVvcmRlcmluZyBvZiBhdHRyaWJ1dGVzPC9saT4KICAgIDxsaT5BdHRyJ3Mgbm93IGNhbiBoYXZlIGxlbmd0aHMgYW5kIGRlZmF1bHQgdmFsdWVzPC9saT4KICAgIDxsaT5BcHBseSBidXR0b24gZm9yIHRlbXBsYXRlczwvbGk+CiAgICA8bGk+Rml4ZWQgdG8gcHJpbnRhYmxlIGNhdGFsb2ctc3R1ZmY8L2xpPgogICAgPGxpPkJ1aWx0LWluIHNvcnRpbmcgZnVuY3Rpb25hbGl0eTwvbGk+CiAgICA8bGk+QXNzb3J0ZWQgYnVnZml4ZXMsIGNsZWFudXBzIGV0YzwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMC43LjcgLSBGZWIgMjAxMC4gQWRkZWQgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIEl0ZW1zLiBBZGRlZCBpdGVtIGNvbXBhcmlzb24gYWN0aW9uLjwvbGk+CjxsaT5WZXJzaW9uIDAuNy42IC0gMTAgU2VwdCAyMDA5LiBGaXggZm9yIHRoYXQgbGFzdCBmaXguIERvaCE8L2xpPgo8bGk+VmVyc2lvbiAwLjcuNSAtIDEwIFNlcHQgMjAwOS4gRml4ZWQgUHJpbnRhYmxlIENhdGFsb2cuLi4gZGlkIHRoYXQgZXZlciB3b3JrPz88L2xpPgo8bGk+VmVyc2lvbiAwLjcuNCAtIDIyIEp1bmUgMjAwOS4gSW5jb3Jwb3JhdGVkIENhbGd1eVwncyBmaXhlcyBmb3IgMS42LjwvbGk+CjxsaT5WZXJzaW9uIDAuNy4zIC0gMTYgSnVuZSAyMDA5LiBCdWcgZml4ZXMgYnkgTnVuby4gTWFkZSBtYXggQ01TIHZlcnNpb24gMS41LjQgaW4gcHJlcCBmb3IgQ01TIDEuNiByZWxlYXNlLjwvbGk+CjxsaT5WZXJzaW9uIDAuNy4yIC0gMTQgTWFyY2ggMjAwOS4gQnVnIGZpeGVzIGJ5IE51bm8gQ29zdGEuPC9saT4KPGxpPlZlcnNpb24gMC43LjEgLSAyOSBTZXB0IDIwMDguIEFkZGVkIFZhcmlhYmxlIG1ldGhvZCBmb3IgSmF2aWVyIFNhbiBKdWFuIENvc3RpbGFzLjwvbGk+CjxsaT5WZXJzaW9uIDAuNyAtIDE3IE1hcmNoIDIwMDguIDxlbT5GaW5hbGx5PC9lbT4gYWRkZWQgcGVyLXBhZ2UgbWV0YS1kYXRhLiBBbmQgdGhlcmUgd2FzIGdyZWF0IGNlbGVicmF0aW9uIGluIHRoZSBzdHJlZXRzLCBhbmQgZGFuY2luZyBpbiB0aGUgdG93biBzcXVhcmUuIEFsc28gYWRkZWQgaW4gbWFueSBIVE1MIGFuZCBsb2NhbGl6YXRpb24gZml4ZXMgY29udHJpYnV0ZWQgYnkgTnVubyBDb3N0YS48L2xpPgo8bGk+VmVyc2lvbiAwLjYuMiAtIDcgSmFudWFyeSAyMDA3LiBGaXhlZCBuYXN0eSBidWcgd2hlcmUgdXBncmFkaW5nIG1ha2VzIGl0IGxvb2sgbGlrZSBhbGwgeW91ciBub3RlIGZpZWxkcyBhcmUgbG9zdC48L2xpPgo8bGk+VmVyc2lvbiAwLjYuMSAtIDIgSmFudWFyeSAyMDA3LiBGaXhlZCBuYXN0eSBidWcgd2hlcmUgY2hhbmdpbmcgY29udGVudCB0eXBlIGZyb20gImNvbnRlbnQiIHRvIGNhdGFsb2cgY29udGVudCB0eXBlcyByZW5hbWVkIGFsbCBjYXRhbG9nIGltYWdlcy48L2xpPgo8bGk+VmVyc2lvbiAwLjYgLSAyOSBEZWNlbWJlciAyMDA3LiA8dWw+CjxsaT5CdWcgZml4OiBJbWFnZXMgZG9uXCd0IGdldCAibG9zdCIgd2hlbiBwYWdlIGFsaWFzIGNoYW5nZXMuPC9saT4KPGxpPkJ1ZyBmaXg6IEF0dHJpYnV0ZSBjb250ZW50IGRvZXNuXCd0IGdldCAibG9zdCIgd2hlbiBhdHRyaWJ1dGVzIGFyZSByZW5hbWVkLjwvbGk+CjxsaT5CdWcgZml4OiBGaXhlZCBQcmludGFibGUgQ2F0YWxvZy4gV29ya3MgZm9yIGZpcnN0IHRpbWUgc2luY2Ugdi4wLjQgb3IgdGhlcmVhYm91dHMuPC9saT4KPGxpPkJ1ZyBmaXg6IE5vdyBob25vcnMgc3lzdGVtIHByZWZlcmVuY2UgZm9yIFdZU0lXWUcgZWRpdGluZyBvZiB0ZXh0IGFyZWFzLjwvbGk+CjxsaT5GZWF0dXJlOiBBdHRyaWJ1dGVzIG1heSBub3cgYmUgdGV4dCBhcmVhcy48L2xpPgo8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAwLjUuNiAtIDEwIERlY2VtYmVyIDIwMDcuIFRhcmR5IHJvbGxvdXQgb2YgZml4ZXM6IDx1bD4KPGxpPkFkZGVkIGNvZGUgdG8gcHJldmVudCBzaG93aW5nIG9mIG5vbi11cGxvYWRlZCBpbWFnZXMsIGNhdGVnb3J5IHBhZ2UgYnVmZmVyIGZsdXNoaW5nIGZvciBleHRyZW1lIGNhc2VzLCBtaW5vciBidWcgZml4ZXM8L2xpPgo8bGk+Rml4IGZvciAncmVjZW50JyBhY3Rpb24gd2hlbiBhbGlhcyBpcyAvPC9saT4KPGxpPkZpeCBmb3IgdGhlIHByb2JsZW0gd2hlcmUgY2F0YWxvZ3Mgd2l0aCBtb3JlIHRoYW4gdGVuIGNhdGVnb3JpZXMgaGF2ZSBpdGVtcyBkaXNwbGF5ZWQgaW4gaW5jb3JyZWN0IGNhdGVnb3JpZXM8L2xpPjwvdWw+PC9saT4KPGxpPlZlcnNpb24gMC41LjUgLSAyMCBKdW5lIDIwMDcuIEZpeCBmb3IgQ29udGVudCBBbGlhcyBzdXBwb3J0IC0gcmVxdWlyZXMgQ29udGVudCBBbGlhcyB2LiAwLjYuMS48L2xpPgo8bGk+VmVyc2lvbiAwLjUuNCAtIDE5IEp1bmUgMjAwNy4gQWRkZWQgImFsbCIgZmVhdHVyZSBsaXN0LjwvbGk+CjxsaT5WZXJzaW9uIDAuNS4zIC0gMjEgU2VwdGVtYmVyIDIwMDYuIEFkZGVkIGxpbmtzIHRvIHNvdXJjZSAobm9uLXJlc2NhbGVkKSBpbWFnZXMsIGFuZCBhZGRlZCBpbWFnZSBkZWxldGUgZnVuY3Rpb25hbGl0eS48L2xpPgo8bGk+VmVyc2lvbiAwLjUuMiAtIDE3IFNlcHRlbWJlciAyMDA2LiBSZW1vdmVkIGRlYnVnIG91dHB1dCwgcmV2aXNlZCBpbWFnZSBzeXN0ZW0gKGZpeGVkIGJ1Z3MpLiBDYWNoaW5nIGJ1ZyBzZWVtcyB0byByZW1haW4uPC9saT4KPGxpPlZlcnNpb24gMC41LjEgLSAyNCBBdWd1c3QgMjAwNi4gKGNhbGd1eTEwMDApLCBVcHBlZCBNaW5pbXVtQ01TVmVyc2lvbiB0byAxLjAtc3ZuLCBhbmQgbW9yZSAxLjAgY2hhbmdlcyB3ZXJlIGFkZGVkIChyZW1vdmVkIHN0YXRpYyBtZXRob2RzKTwvbGk+CjxsaT5WZXJzaW9uIDAuNSAtIDE2IEF1Z3VzdCAyMDA2LiBBc3NvcnRlZCBjb250cmlidXRlZCBidWcgZml4ZXMgZm9yIENNUyBNUyAxLjAsICBuZXcgb3B0aW9ucyBmb3IgaW1hZ2VzLjwvbGk+CjxsaT5WZXJzaW9uIDAuNC4yIC0gMjggTWF5IDIwMDYuIEJ1ZyBmaXggZm9yIGF0dHJpYnV0ZXMgaW4gY2F0ZWdvcnkgcGFnZXMuIEFkZGVkICIvIiBwYWdlX2FsaWFzIGZvciBmZWF0dXJlIGxpc3RzLjwvbGk+CjxsaT5WZXJzaW9uIDAuNC4xIC0gMjMgTWF5IDIwMDYuIEJ1ZyBmaXggdG8gbWFrZSB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgQ01TIE1TLjwvbGk+CjxsaT5WZXJzaW9uIDAuNCAtIDIyIE1heSAyMDA2LiBCdWcgZml4ZXMsIEZlYXR1cmUgTGlzdHMuPC9saT4KPGxpPlZlcnNpb24gMC4zIC0gKHVucmVsZWFzZWQsIHB1Ymxpc2hlZCBmcm9tIHN2bik8L2xpPgo8bGk+VmVyc2lvbiAwLjIgLSAyMyBNYXJjaCAyMDA2LiBOdW1lcm91cyBidWcgZml4ZXMuIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy4gTWVtb3J5IGZvb3RwcmludCBvcHRpbWl6YXRpb25zLiBOb3cgdXNlcyB0aGUgQ01TIDAuMTIgTW9kdWxlIEFQSS48L2xpPgo8bGk+VmVyc2lvbiAwLjEuNSAtIDE3IE5vdmVtYmVyIDIwMDUuIEluaXRpYWwgUmVsZWFzZS4gSmVzdXMsIHRoYXQgdG9vayBhIGxvbmcgdGltZS48L2xpPgo8bGk+VmVyc2lvbiAwLjEgLSAxOSBNYXJjaCAyMDA1LiBQcm9qZWN0IEluaXRpYXRpb24uPC9saT4KPC91bD48YnIgLz4=]]></about>
	<description><![CDATA[Manage Catalog settings]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.adminattrs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCFkZWZpbmVkKCdDTVNfVkVSU0lPTicpKSBleGl0Ow0KaWYoISR0aGlzLT5DaGVja0FjY2VzcygpKSBleGl0Ow0KDQokdGhpcy0+aW5pdEFkbWluTmF2KCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzdWJtaXRhdHRycycsICRyZXR1cm5pZCkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAnU3VibWl0JykpOw0KJGF0dHJpYnV0ZXMgICAgID0gYXJyYXkoKTsNCiRxdWVyeSAgICAgICAgICA9ICJTRUxFQ1QgaWQsIGF0dHJpYnV0ZSwgYWxpYXMsIGRlZmF1bHR2YWwsIHR5cGVfaWQsIGxlbmd0aCwgb3JkZXJfYnksIGZpZWxkX3R5cGUsIHNlbGVjdF92YWx1ZXMgRlJPTSAiIC4gY21zX2RiX3ByZWZpeCgpIC4gIm1vZHVsZV9jYXRhbG9nX2F0dHIgT1JERVIgQlkgb3JkZXJfYnkgQVNDIjsNCiRkYnJlc3VsdCAgICAgICA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KDQokY291bnRieXR5cGUgICAgPSBhcnJheSgpOw0KJGNvdW50Ynl0eXBlWzFdID0gMDsNCiRjb3VudGJ5dHlwZVsyXSA9IDA7DQokY291bnRieXR5cGVbM10gPSAwOw0KDQp3aGlsZSgkZGJyZXN1bHQgIT09IGZhbHNlICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpDQp7DQogICRvbmVyb3cgICAgICAgICAgICAgICAgPSBuZXcgc3RkQ2xhc3MoKTsNCiAgJG9uZXJvdy0+aW5wdXQgICAgICAgICA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnYXR0cl8nIC4gJHJvd1sndHlwZV9pZCddIC4gJ18nIC4gJGNvdW50Ynl0eXBlWyRyb3dbJ3R5cGVfaWQnXV0sICRyb3dbJ2F0dHJpYnV0ZSddLCAxNSwgMTAwKTsNCiAgJG9uZXJvdy0+ZGVmYXVsdGlucHV0ICA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnZGVmYXVsdF8nIC4gJHJvd1sndHlwZV9pZCddIC4gJ18nIC4gJGNvdW50Ynl0eXBlWyRyb3dbJ3R5cGVfaWQnXV0sICRyb3dbJ2RlZmF1bHR2YWwnXSwgMTUsIDEwMjQpOw0KICAkb25lcm93LT5sZW5pbnB1dCAgICAgID0gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdsZW5fJyAuICRyb3dbJ3R5cGVfaWQnXSAuICdfJyAuICRjb3VudGJ5dHlwZVskcm93Wyd0eXBlX2lkJ11dLCAoIWVtcHR5KCRyb3dbJ2xlbmd0aCddKSA/ICRyb3dbJ2xlbmd0aCddIDogMjUpLCAyLCA0KTsNCiAgJG9uZXJvdy0+YWxpYXNpbnB1dCAgICA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnYWxpYXNfJyAuICRyb3dbJ3R5cGVfaWQnXSAuICdfJyAuICRjb3VudGJ5dHlwZVskcm93Wyd0eXBlX2lkJ11dLCAkcm93WydhbGlhcyddLCAxNSwgMjU1KTsNCiAgJG9uZXJvdy0+aGlkZGVuICAgICAgICA9ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdvbGRfJyAuICRyb3dbJ3R5cGVfaWQnXSAuICdfJyAuICRjb3VudGJ5dHlwZVskcm93Wyd0eXBlX2lkJ11dLCAkcm93WydpZCddKTsNCiAgJG9uZXJvdy0+dHlwZSAgICAgICAgICA9ICRyb3dbJ3R5cGVfaWQnXTsNCiAgJG9uZXJvdy0+ZmllbGRfdHlwZSAgICA9ICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2ZpZWxkX3R5cGVfJyAuICRyb3dbJ3R5cGVfaWQnXSAuICdfJyAuICRjb3VudGJ5dHlwZVskcm93Wyd0eXBlX2lkJ11dLCBhcnJheV9mbGlwKCR0aGlzLT5nZXRGaWVsZFR5cGVzKCkpLCAtIDEsICRyb3dbJ2ZpZWxkX3R5cGUnXSk7DQogICRvbmVyb3ctPnNlbGVjdF92YWx1ZXMgPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3NlbGVjdF92YWx1ZXNfJyAuICRyb3dbJ3R5cGVfaWQnXSAuICdfJyAuICRjb3VudGJ5dHlwZVskcm93Wyd0eXBlX2lkJ11dLCAkcm93WydzZWxlY3RfdmFsdWVzJ10sIDE1LCAyNTUpOw0KICAkb25lcm93LT5vcmRlcl9ieSAgICAgID0gJHJvd1snb3JkZXJfYnknXTsNCiAgJG9uZXJvdy0+Y2J0ICAgICAgICAgICA9ICRjb3VudGJ5dHlwZVskcm93Wyd0eXBlX2lkJ11dOw0KICAkb25lcm93LT5kZWxldGUgICAgICAgID0gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnZGVsZXRlXycgLiAkcm93Wyd0eXBlX2lkJ10gLiAnXycgLiAkY291bnRieXR5cGVbJHJvd1sndHlwZV9pZCddXSwgMSwgMCk7DQogICRjb3VudGJ5dHlwZVskcm93Wyd0eXBlX2lkJ11dKys7DQogIGFycmF5X3B1c2goJGF0dHJpYnV0ZXMsICRvbmVyb3cpOw0KfQ0KDQpmb3IoJGkgPSAwOyAkaSA8IDM7ICRpKyspDQp7DQogIGZvcigkaiA9IDE7ICRqIDwgNDsgJGorKykNCiAgew0KICAgICRvbmVyb3cgICAgICAgICAgICAgICAgPSBuZXcgc3RkQ2xhc3MoKTsNCiAgICAkb25lcm93LT5pbnB1dCAgICAgICAgID0gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdhdHRyXycgLiAkaiAuICdfJyAuICRjb3VudGJ5dHlwZVskal0sICcnLCAxNSwgMjU1KTsNCiAgICAkb25lcm93LT5hbGlhc2lucHV0ICAgID0gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdhbGlhc18nIC4gJGogLiAnXycgLiAkY291bnRieXR5cGVbJGpdLCAnJywgMTUsIDI1NSk7DQogICAgJG9uZXJvdy0+ZGVmYXVsdGlucHV0ICA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnZGVmYXVsdF8nIC4gJGogLiAnXycgLiAkY291bnRieXR5cGVbJGpdLCAnJywgMTUsIDEwMjQpOw0KICAgICRvbmVyb3ctPmxlbmlucHV0ICAgICAgPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2xlbl8nIC4gJGogLiAnXycgLiAkY291bnRieXR5cGVbJGpdLCAyNSwgMiwgNCk7DQogICAgJG9uZXJvdy0+ZmllbGRfdHlwZSAgICA9ICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2ZpZWxkX3R5cGVfJyAuICRqIC4gJ18nIC4gJGNvdW50Ynl0eXBlWyRqXSwgYXJyYXlfZmxpcCgkdGhpcy0+Z2V0RmllbGRUeXBlcygpKSwgLSAxLCAkcm93WydmaWVsZF90eXBlJ10pOw0KICAgICRvbmVyb3ctPnNlbGVjdF92YWx1ZXMgPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3NlbGVjdF92YWx1ZXNfJyAuICRqIC4gJ18nIC4gJGNvdW50Ynl0eXBlWyRqXSwgJycsIDE1LCAyNTUpOw0KICAgICRvbmVyb3ctPmRlbGV0ZSAgICAgICAgPSAnJzsNCiAgICAkb25lcm93LT5oaWRkZW4gICAgICAgID0gJyc7DQogICAgJG9uZXJvdy0+dHlwZSAgICAgICAgICA9ICRqOw0KICAgICRvbmVyb3ctPm9yZGVyX2J5ICAgICAgPSAkY291bnRieXR5cGVbJGpdICsgMTsNCiAgICAkb25lcm93LT5jYnQgICAgICAgICAgID0gJGNvdW50Ynl0eXBlWyRqXSsrOw0KICAgIGFycmF5X3B1c2goJGF0dHJpYnV0ZXMsICRvbmVyb3cpOw0KICB9DQp9DQoNCmZvcigkaSA9IDE7ICRpIDwgNDsgJGkrKykNCnsNCiAgJHNjID0gYXJyYXkoKTsNCiAgZm9yKCRqID0gMDsgJGogPD0gJGNvdW50Ynl0eXBlWyRpXTsgJGorKykNCiAgew0KICAgICRzY1skal0gPSAkajsNCiAgfQ0KICANCiAgZm9yKCRrID0gMDsgJGsgPCBjb3VudCgkYXR0cmlidXRlcyk7ICRrKyspDQogIHsNCiAgICBpZigkYXR0cmlidXRlc1ska10tPnR5cGUgPT0gJGkpDQogICAgew0KICAgICAgJGF0dHJpYnV0ZXNbJGtdLT5vcmRlcl9zZWwgPSAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdvcmRlcmJ5XycgLiAkaSAuICdfJyAuICRhdHRyaWJ1dGVzWyRrXS0+Y2J0LCAkc2MsIC0gMSwgJGF0dHJpYnV0ZXNbJGtdLT5vcmRlcl9ieSk7DQogICAgfQ0KICAgICRhdHRyaWJ1dGVzWyRrXS0+aXN0ZXh0ID0gRkFMU0U7DQogIH0NCn0NCg0KLy9kZWJ1Z19kaXNwbGF5KCRhdHRyaWJ1dGVzKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGFiX2hlYWRlcnMnLCAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCkgLiAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpdGVtJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2l0ZW1fdGFiJykpIC4gJHRoaXMtPlNldFRhYkhlYWRlcignY2F0ZWdvcnknLCAkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlfdGFiJykpIC4gJHRoaXMtPlNldFRhYkhlYWRlcignY2F0YWxvZycsICR0aGlzLT5MYW5nKCd0aXRsZV9wcmludGFibGVfdGFiJykpIC4gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKSAuICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZF90YWInLCAkdGhpcy0+RW5kVGFiKCkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJfZm9vdGVycycsICR0aGlzLT5FbmRUYWJDb250ZW50KCkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9pdGVtX3RhYicsICR0aGlzLT5TdGFydFRhYignaXRlbScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfY2F0ZWdvcnlfdGFiJywgJHRoaXMtPlN0YXJ0VGFiKCdjYXRlZ29yeScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfY2F0YWxvZ190YWInLCAkdGhpcy0+U3RhcnRUYWIoJ2NhdGFsb2cnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCBpc3NldCgkcGFyYW1zWydtZXNzYWdlJ10pID8gJHBhcmFtc1snbWVzc2FnZSddIDogJycpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdHRyaWJ1dGVfaW5wdXRzJywgJGF0dHJpYnV0ZXMpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pdGVtX2F0dHJpYnV0ZXMnLCAkdGhpcy0+TGFuZygndGl0bGVfaXRlbV90YWInKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2F0dHJfYWxpYXMnLCAkdGhpcy0+TGFuZygndGl0bGVfYXR0cl9hbGlhcycpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfYXR0cl9sZW5ndGgnLCAkdGhpcy0+TGFuZygndGl0bGVfYXR0cl9sZW5ndGgnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2F0dHJfbGVuZ3RoX2hlbHAnLCAkdGhpcy0+TGFuZygndGl0bGVfYXR0cl9sZW5ndGhfaGVscCcpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfYXR0cl9kZWZhdWx0JywgJHRoaXMtPkxhbmcoJ3RpdGxlX2F0dHJfZGVmYXVsdCcpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfYXR0cl9vcmRlcl9ieScsICR0aGlzLT5MYW5nKCd0aXRsZV9hdHRyX29yZGVyX2J5JykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jYXRhbG9nX2F0dHJpYnV0ZXMnLCAkdGhpcy0+TGFuZygndGl0bGVfcHJpbnRhYmxlX3RhYicpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfY2F0ZWdvcnlfYXR0cmlidXRlcycsICR0aGlzLT5MYW5nKCd0aXRsZV9jYXRlZ29yeV90YWInKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2l0ZW1fYXR0cmlidXRlc19oZWxwJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2l0ZW1fYXR0cmlidXRlc19oZWxwJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jYXRhbG9nX2F0dHJpYnV0ZXNfaGVscCcsICR0aGlzLT5MYW5nKCd0aXRsZV9jYXRhbG9nX2F0dHJpYnV0ZXNfaGVscCcpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfY2F0ZWdvcnlfYXR0cmlidXRlc19oZWxwJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X2F0dHJpYnV0ZXNfaGVscCcpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfc2VsZWN0X3ZhbHVlcycsICR0aGlzLT5MYW5nKCd0aXRsZV9zZWxlY3RfdmFsdWVzJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9maWVsZF90eXBlJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2ZpZWxkX3R5cGUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2RlbGV0ZScsICR0aGlzLT5MYW5nKCd0aXRsZV9kZWxldGUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhdGVnb3J5JywgJHRoaXMtPkxhbmcoJ21hbmFnZWF0dHJzJykpOw0KLy8gRGlzcGxheSB0ZW1wbGF0ZQ0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbmF0dHJzLnRwbCcpOw0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.adminprefs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7DQppZiAoISAkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkgZXhpdDsNCg0KCQkkdGhpcy0+aW5pdEFkbWluTmF2KCRpZCwgJHBhcmFtcywgJHJldHVybmlkKTsNCg0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnc3VibWl0cHJlZnMnLCAkcmV0dXJuaWQpKTsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsICdTdWJtaXQnKSk7DQoNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJfaGVhZGVycycsJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpLg0KICAgICAgICAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpdGVtaW1hZ2UnLCR0aGlzLT5MYW5nKCd0aXRsZV9pdGVtX2ltYWdlX3RhYicpKS4NCiAgICAgICAgJHRoaXMtPlNldFRhYkhlYWRlcignZmlsZScsJHRoaXMtPkxhbmcoJ3RpdGxlX2ZpbGVfdGFiJykpLg0KICAgICAgICAkdGhpcy0+U2V0VGFiSGVhZGVyKCdjYXRlZ29yeWltYWdlJywkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlfaW1hZ2VfdGFiJykpLg0KICAgICAgICAkdGhpcy0+U2V0VGFiSGVhZGVyKCdwcmludGFibGUnLCR0aGlzLT5MYW5nKCd0aXRsZV9wcmludGFibGVfdGFiJykpLg0KICAgICAgICAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpbWFnZScsJHRoaXMtPkxhbmcoJ3RpdGxlX2ltYWdlX3RhYicpKS4NCiAgICAgICAgJHRoaXMtPlNldFRhYkhlYWRlcigncGF0aCcsJHRoaXMtPkxhbmcoJ3RpdGxlX3BhdGhfdGFiJykpLg0KICAgICAgICAkdGhpcy0+RW5kVGFiSGVhZGVycygpLiR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kX3RhYicsJHRoaXMtPkVuZFRhYigpKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJfZm9vdGVycycsJHRoaXMtPkVuZFRhYkNvbnRlbnQoKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfaXRlbV9pbWFnZV90YWInLCR0aGlzLT5TdGFydFRhYignaXRlbWltYWdlJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2NhdGVnb3J5X2ltYWdlX3RhYicsJHRoaXMtPlN0YXJ0VGFiKCdjYXRlZ29yeWltYWdlJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X3ByaW50YWJsZV90YWInLCR0aGlzLT5TdGFydFRhYigncHJpbnRhYmxlJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2ZpbGVfdGFiJywkdGhpcy0+U3RhcnRUYWIoJ2ZpbGUnKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfcGF0aF90YWInLCR0aGlzLT5TdGFydFRhYigncGF0aCcpKTsNCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2ltYWdlX3RhYicsJHRoaXMtPlN0YXJ0VGFiKCdpbWFnZScpKTsNCg0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2l0ZW1faW1hZ2VfY291bnQnLCAkdGhpcy0+TGFuZygndGl0bGVfaXRlbV9pbWFnZV9jb3VudCcpKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pdGVtX2ZpbGVfY291bnQnLCAkdGhpcy0+TGFuZygndGl0bGVfaXRlbV9maWxlX2NvdW50JykpOw0KICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfaXRlbV9maWxlX3R5cGVzJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2l0ZW1fZmlsZV90eXBlcycpKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9mbHVzaF9jYXRzJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2ZsdXNoX2NhdHMnKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfc2hvd19vbmx5X2V4aXN0aW5nX2ltYWdlcycsDQogICAgICAgIAkkdGhpcy0+TGFuZygndGl0bGVfc2hvd19vbmx5X2V4aXN0aW5nX2ltYWdlcycpKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9zaG93X21pc3NpbmdfaW1hZ2VzJywNCiAgICAgICAgCSR0aGlzLT5MYW5nKCd0aXRsZV9zaG93X21pc3NpbmdfaW1hZ2VzJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NhdGVnb3J5X2ltYWdlX2NvdW50JywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X2ltYWdlX2NvdW50JykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2l0ZW1faW1hZ2Vfc2l6ZV9oZXJvJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2l0ZW1faW1hZ2Vfc2l6ZV9oZXJvJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2l0ZW1faW1hZ2Vfc2l6ZV90aHVtYm5haWwnLCAkdGhpcy0+TGFuZygndGl0bGVfaXRlbV9pbWFnZV9zaXplX3RodW1ibmFpbCcpKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jYXRlZ29yeV9pbWFnZV9zaXplX2hlcm8nLCAkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlfaW1hZ2Vfc2l6ZV9oZXJvJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2NhdGVnb3J5X2ltYWdlX3NpemVfdGh1bWJuYWlsJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X2ltYWdlX3NpemVfdGh1bWJuYWlsJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2l0ZW1faW1hZ2Vfc2l6ZV9jYXRlZ29yeScsICR0aGlzLT5MYW5nKCd0aXRsZV9pdGVtX2ltYWdlX3NpemVfY2F0ZWdvcnknKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfaXRlbV9pbWFnZV9zaXplX2NhdGFsb2cnLCAkdGhpcy0+TGFuZygndGl0bGVfaXRlbV9pbWFnZV9zaXplX2NhdGFsb2cnKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZScsJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X3JlY3Vyc2UnKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfcHJpbnRhYmxlX3NvcnRfb3JkZXInLCR0aGlzLT5MYW5nKCd0aXRsZV9wcmludGFibGVfc29ydF9vcmRlcicpKTsNCg0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2ltYWdlX3VwbG9hZF9wYXRoJywkdGhpcy0+TGFuZygndGl0bGVfaW1hZ2VfdXBsb2FkX3BhdGgnKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZmlsZV91cGxvYWRfcGF0aCcsJHRoaXMtPkxhbmcoJ3RpdGxlX2ZpbGVfdXBsb2FkX3BhdGgnKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfaW1hZ2VfcHJvY19wYXRoJywkdGhpcy0+TGFuZygndGl0bGVfaW1hZ2VfcHJvY19wYXRoJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhdGhfaGVscCcsJHRoaXMtPkxhbmcoJ3BhdGhfaGVscCcpKTsNCg0KICAgICAgICAkbnVtYmVyID0gYXJyYXkoKTsNCiAgICAgICAgZm9yICgkaT0wOyRpPDE2OyRpKyspDQogICAgICAgIAl7DQogICAgICAgIAkkbnVtYmVyWyRpXT0kaTsNCiAgICAgICAgCX0NCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pdGVtX2ltYWdlX2NvdW50JywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnaXRlbV9pbWFnZV9jb3VudCcsICRudW1iZXIsIC0xLCAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2VfY291bnQnLCAnMicpKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfY2F0ZWdvcnlfaW1hZ2VfY291bnQnLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdjYXRlZ29yeV9pbWFnZV9jb3VudCcsICRudW1iZXIsIC0xLCAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NhdGVnb3J5X2ltYWdlX2NvdW50JywgJzEnKSkpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2l0ZW1fZmlsZV9jb3VudCcsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ2l0ZW1fZmlsZV9jb3VudCcsICRudW1iZXIsIC0xLCAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1fZmlsZV9jb3VudCcsICcwJykpKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pdGVtX2ZpbGVfdHlwZXMnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2l0ZW1fZmlsZV90eXBlcycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1fZmlsZV90eXBlcycsICdwZGYsc3dmLGZsdixkb2Msb2R0LG9kcyx4bHMnKSkpOw0KDQoJCQ0KICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfaW1hZ2VfdXBsb2FkX3BhdGgnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2ltYWdlX3VwbG9hZF9wYXRoJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaW1hZ2VfdXBsb2FkX3BhdGgnLCAkdGhpcy0+Z2V0QXNzZXRQYXRoKCdzJyx0cnVlKSkpKTsNCiAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2ltYWdlX3Byb2NfcGF0aCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaW1hZ2VfcHJvY19wYXRoJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaW1hZ2VfcHJvY19wYXRoJywgJHRoaXMtPmdldEFzc2V0UGF0aCgnaScsdHJ1ZSkpKSk7DQogICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9maWxlX3VwbG9hZF9wYXRoJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdmaWxlX3VwbG9hZF9wYXRoJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZmlsZV91cGxvYWRfcGF0aCcsICR0aGlzLT5nZXRBc3NldFBhdGgoJ2YnLHRydWUpKSkpOw0KDQoNCgkJJHJlY3Vyc2UgPSAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NhdGVnb3J5X3JlY3Vyc2UnLCAnbWl4ZWRfb25lJyk7IA0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2NhdGVnb3J5X3JlY3Vyc2UnLA0KCQkJJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iJy4kaWQuJ2NhdGVnb3J5X3JlY3Vyc2UiIHZhbHVlPSJpdGVtc19hbGwiJyAuDQoJCQkJKCRyZWN1cnNlID09ICdpdGVtc19hbGwnPycgY2hlY2tlZD0iY2hlY2tlZCInOicnKS4nIC8+Jy4NCgkJCQkkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9pdGVtc19hbGwnKS4nPGJyIC8+Jy4NCgkJCSc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IicuJGlkLidjYXRlZ29yeV9yZWN1cnNlIiB2YWx1ZT0iaXRlbXNfb25lIicgLg0KCQkJCSgkcmVjdXJzZSA9PSAnaXRlbXNfb25lJz8nIGNoZWNrZWQ9ImNoZWNrZWQiJzonJykuJyAvPicuDQoJCQkJJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X3JlY3Vyc2VfaXRlbXNfb25lJykuJzxiciAvPicuDQoJCQknPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSInLiRpZC4nY2F0ZWdvcnlfcmVjdXJzZSIgdmFsdWU9ImNhdGVnb3JpZXNfYWxsIicgLg0KCQkJCSgkcmVjdXJzZSA9PSAnY2F0ZWdvcmllc19hbGwnPycgY2hlY2tlZD0iY2hlY2tlZCInOicnKS4nIC8+Jy4NCgkJCQkkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9jYXRlZ29yaWVzX2FsbCcpLic8YnIgLz4nLg0KCQkJJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iJy4kaWQuJ2NhdGVnb3J5X3JlY3Vyc2UiIHZhbHVlPSJjYXRlZ29yaWVzX29uZSInIC4NCgkJCQkoJHJlY3Vyc2UgPT0gJ2NhdGVnb3JpZXNfb25lJz8nIGNoZWNrZWQ9ImNoZWNrZWQiJzonJykuJyAvPicuDQoJCQkJJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X3JlY3Vyc2VfY2F0ZWdvcmllc19vbmUnKS4nPGJyIC8+Jy4NCgkJCSc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IicuJGlkLidjYXRlZ29yeV9yZWN1cnNlIiB2YWx1ZT0ibWl4ZWRfYWxsIicgLg0KCQkJCSgkcmVjdXJzZSA9PSAnbWl4ZWRfYWxsJz8nIGNoZWNrZWQ9ImNoZWNrZWQiJzonJykuJyAvPicuDQoJCQkJJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X3JlY3Vyc2VfbWl4ZWRfYWxsJykuJzxiciAvPicuDQoJCQknPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSInLiRpZC4nY2F0ZWdvcnlfcmVjdXJzZSIgdmFsdWU9Im1peGVkX29uZSInIC4NCgkJCQkoJHJlY3Vyc2UgPT0gJ21peGVkX29uZSc/JyBjaGVja2VkPSJjaGVja2VkIic6JycpLicgLz4nLg0KCQkJCSR0aGlzLT5MYW5nKCd0aXRsZV9jYXRlZ29yeV9yZWN1cnNlX21peGVkX29uZScpKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pdGVtX2ltYWdlX3NpemVfaGVybycsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaXRlbV9pbWFnZV9zaXplX2hlcm8nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaXRlbV9pbWFnZV9zaXplX2hlcm8nLCAnNDAwJyksIDEwLCAxMCkpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2l0ZW1faW1hZ2Vfc2l6ZV90aHVtYm5haWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2l0ZW1faW1hZ2Vfc2l6ZV90aHVtYm5haWwnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaXRlbV9pbWFnZV9zaXplX3RodW1ibmFpbCcsICc3MCcpLCAxMCwgMTApKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jYXRlZ29yeV9pbWFnZV9zaXplX2hlcm8nLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2NhdGVnb3J5X2ltYWdlX3NpemVfaGVybycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjYXRlZ29yeV9pbWFnZV9zaXplX2hlcm8nLCAnNDAwJyksIDEwLCAxMCkpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2NhdGVnb3J5X2ltYWdlX3NpemVfdGh1bWJuYWlsJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdjYXRlZ29yeV9pbWFnZV9zaXplX3RodW1ibmFpbCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjYXRlZ29yeV9pbWFnZV9zaXplX3RodW1ibmFpbCcsICc5MCcpLCAxMCwgMTApKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pdGVtX2ltYWdlX3NpemVfY2F0ZWdvcnknLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRlZ29yeScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX3NpemVfY2F0ZWdvcnknLCAnNzAnKSwgMTAsIDEwKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfaXRlbV9pbWFnZV9zaXplX2NhdGFsb2cnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRhbG9nJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRhbG9nJywgJzEwMCcpLCAxMCwgMTApKTsNCg0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zaG93X21pc3NpbmdfaW1hZ2VzJywkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdzaG93X21pc3NpbmcnLCcwJykuJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnc2hvd19taXNzaW5nJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3Nob3dfbWlzc2luZycsJzEnKSkuICR0aGlzLT5MYW5nKCd0aXRsZV9zaG93X21pc3NpbmdfaW1hZ2VzX2xvbmcnKSk7CQkNCg0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zaG93X29ubHlfZXhpc3RpbmdfaW1hZ2VzJywkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdzaG93X2V4dGFudCcsJzAnKS4kdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdzaG93X2V4dGFudCcsIDEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzaG93X2V4dGFudCcsJzEnKSkuICR0aGlzLT5MYW5nKCd0aXRsZV9zaG93X29ubHlfZXhpc3RpbmdfaW1hZ2VzX2hlbHAnKSk7CQkNCg0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9mbHVzaF9jYXRzJywkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdmbHVzaF9jYXRzJywnMCcpLiR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2ZsdXNoX2NhdHMnLCAxLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZmx1c2hfY2F0cycsJzAnKSkuICR0aGlzLT5MYW5nKCd0aXRsZV9mbHVzaF9jYXRzX2hlbHAnKSk7CQkNCg0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2l0ZW1zX3Blcl9wYWdlJywkdGhpcy0+TGFuZygndGl0bGVfaXRlbXNfcGVyX3BhZ2UnKSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfaXRlbXNfcGVyX3BhZ2UnLCR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwNCiAgICAgICAgIAkJJ2l0ZW1zX3Blcl9wYWdlJywNCiAgICAgICAgICAgICAgICBhcnJheSgnMSc9PicxJywnMic9PicyJywnMyc9PiczJywnNCc9Pic0JywnNSc9Pic1JywnNic9Pic2JywNCiAgICAgICAgICAgICAgICAJJzcnPT4nNycsJzgnPT4nOCcsJzknPT4nOScsJzEwJz0+JzEwJywnMTEnPT4nMTEnLCcxMic9PicxMicsDQogICAgICAgICAgICAgICAgCScxMyc9PicxMycsJzE0Jz0+JzE0JywnMTUnPT4nMTUnLCcxNic9PicxNicsJzE3Jz0+JzE3JywnMTgnPT4nMTgnLA0KICAgICAgICAgICAgICAgIAknMTknPT4nMTknLCcyMCc9PicyMCcsJzI0Jz0+JzI0JywnMjUnPT4nMjUnLCczMCc9PiczMCcsJzQwJz0+JzQwJywNCiAgICAgICAgICAgICAgICAJJzUwJz0+JzUwJywgJzEwMDAnPT4nMTAwMCcpLCAtMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NhdGVnb3J5X2l0ZW1zX3Blcl9wYWdlJywnMTAnKSkpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2l0ZW1fc29ydF9vcmRlcicsJHRoaXMtPkxhbmcoJ3RpdGxlX2l0ZW1fc29ydF9vcmRlcicpKTsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9pdGVtX3NvcnRfb3JkZXInLCR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwNCgkJIAknaXRlbV9zb3J0X29yZGVyJyxhcnJheSgkdGhpcy0+TGFuZygnbmF0dXJhbF9vcmRlcicpPT4nbmF0dXJhbCcsDQoJCSAJJHRoaXMtPkxhbmcoJ2FscGhhX29yZGVyJyk9PidhbHBoYScpLCAtMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NhdGVnb3J5X3NvcnRfb3JkZXInLCduYXR1cmFsJykpKTsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9wcmludGFibGVfc29ydF9vcmRlcicsJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLA0KCQkgCSdwcmludGFibGVfc29ydF9vcmRlcicsYXJyYXkoJHRoaXMtPkxhbmcoJ25hdHVyYWxfb3JkZXInKT0+J25hdHVyYWwnLA0KCQkgCSR0aGlzLT5MYW5nKCdhbHBoYV9vcmRlcicpPT4nYWxwaGEnKSwgLTEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwcmludGFibGVfc29ydF9vcmRlcicsJ25hdHVyYWwnKSkpOw0KDQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsaXNzZXQoJHBhcmFtc1snbWVzc2FnZSddKT8kcGFyYW1zWydtZXNzYWdlJ106JycpOw0KDQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY2F0ZWdvcnknLCAkdGhpcy0+TGFuZygnbWFuYWdlcHJlZnMnKSk7DQoNCiAgICAgICAgI0Rpc3BsYXkgdGVtcGxhdGUNCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbnByZWZzLnRwbCcpOw0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.all.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQlpZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwoJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleT0+JHZhbCkKCQkJewoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJGtleSwgJHBhcmFtc1ska2V5XSk7CgkJCX0KIAkJaWYgKCEgaXNzZXQoJHBhcmFtc1sncmVjdXJzZSddKSkKIAkJCXsKIAkJCSRwYXJhbXNbJ3JlY3Vyc2UnXSA9ICdpdGVtc19hbGwnOwogCQkgCX0KCiAJCWxpc3QoJGN1clBhZ2UsJGNhdGVnb3J5SXRlbXMpID0gJHRoaXMtPmdldENhdGFsb2dJdGVtc0xpc3QoJHBhcmFtcyk7CgogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydnbG9iYWxfc29ydCddKSkKIAkJCXsKCQkJaWYgKCRwYXJhbXNbJ2dsb2JhbF9zb3J0J10gPT0gJ2FscGhhJykKICAgICAgICAgICAgCXsKICAgICAgICAgICAgCXVzb3J0KCRjYXRlZ29yeUl0ZW1zLGFycmF5KCJDYXRhbG9nZXIiLCAiY29udGVudGFscGhhIikpOwogICAgICAgICAgICAJfQoJCQllbHNlIGlmICgkcGFyYW1zWydnbG9iYWxfc29ydCddID09ICdkYXRlJykKCQkJCXsKCSAgICAgICAgICAgIHVzb3J0KCRjYXRlZ29yeUl0ZW1zLGFycmF5KCJDYXRhbG9nZXIiLCAiY3JlYXRlZCIpKTsKCQkJCX0KCQkJZWxzZSBpZiAoJHBhcmFtc1snZ2xvYmFsX3NvcnQnXSA9PSAnbWRhdGUnKQoJCQkJewoJICAgICAgICAgICAgdXNvcnQoJGNhdGVnb3J5SXRlbXMsYXJyYXkoIkNhdGFsb2dlciIsICJjaHJvbm8iKSk7CgkJCQl9CgkJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snZ2xvYmFsX3NvcnRfZGlyJ10pICYmICRwYXJhbXNbJ2dsb2JhbF9zb3J0X2RpciddPT0nYXNjJykKCQkJewoJCQkkY2F0ZWdvcnlJdGVtcyA9IGFycmF5X3JldmVyc2UoJGNhdGVnb3J5SXRlbXMpOwoJCQl9CgogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCRjYXRlZ29yeUl0ZW1zKTsKCQkkdGhpcy0+c21hcnR5QmFzaWNzKCk7CgoJCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgkdGhpcy0+Z2V0VGVtcGxhdGVGcm9tQWxpYXMoJHBhcmFtc1snc3ViX3RlbXBsYXRlJ10pKTsKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.compare.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQlpZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwoJCSRpdGVtbGlzdCA9IGFycmF5KCk7CgkJaWYgKGlzc2V0KCRfUkVRVUVTVFsnaXRlbXMnXSkpCgkJCXsKCQkJJHBhcmFtc1snaXRlbXMnXSA9ICRfUkVRVUVTVFsnaXRlbXMnXTsKCQkJfQoJCWlmICghIGlzX2FycmF5KCRwYXJhbXNbJ2l0ZW1zJ10pKQoJCQl7CgkJCSRwYXJhbXNbJ2l0ZW1zJ10gPSBleHBsb2RlKCcsJywkcGFyYW1zWydpdGVtcyddKTsJCgkJCX0KCQlmb3JlYWNoICgkcGFyYW1zWydpdGVtcyddIGFzICR0aGlzSXRlbSkKCQkJewoJCQkkcGFnZSA9ICR0aGlzLT5nZXRDYXRhbG9nSXRlbSgkdGhpc0l0ZW0pOwoJCQlhcnJheV9wdXNoKCRpdGVtbGlzdCwkcGFnZSk7CQoJCQl9CgkJaWYgKGNvdW50KCRpdGVtbGlzdCk+MCkKCQkJewoJCQkkdmFycyA9ICYkZ0Ntcy0+dmFyaWFibGVzOwoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2F0dHJsaXN0JywkdmFyc1snY2F0YWxvZ19hdHRycyddKTsKCQkJfQoJCWVsc2UKCQkJewoJCQkvLyBibGFuayBhcnJheQoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2F0dHJsaXN0JywkaXRlbWxpc3QpOwoJCQl9CgogCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywkaXRlbWxpc3QpOwoJCSR0aGlzLT5zbWFydHlCYXNpY3MoKTsKCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHRoaXMtPmdldFRlbXBsYXRlRnJvbUFsaWFzKCRwYXJhbXNbJ3N1Yl90ZW1wbGF0ZSddKSk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCgkJaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsNCgkJZm9yZWFjaCAoJHBhcmFtcyBhcyAka2V5PT4kdmFsKQ0KCQkJew0KCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCRrZXksICRwYXJhbXNbJGtleV0pOw0KCQkJfQ0KCQkkc2hvd01pc3NpbmcgPSAnXycuICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzaG93X21pc3NpbmcnLCcxJyk7DQoJCSRpbWFnZUFycmF5ID0gYXJyYXkoKTsNCgkJJGZpbGVBcnJheSA9IGFycmF5KCk7DQoJCSRmaWxlVXJsQXJyYXkgPSBhcnJheSgpOw0KCQkkZmlsZVR5cGVBcnJheSA9IGFycmF5KCk7DQoJCSRzcmNJbWdBcnJheSA9IGFycmF5KCk7DQoJCSR0aHVtYkFycmF5ID0gYXJyYXkoKTsNCiAgICAgICAgJGltZ2NvdW50ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2VfY291bnQnLCAyKTsNCiAgICAgICAgJGZpbGVjb3VudCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ZpbGVfY291bnQnLCAwKTsNCiAgICAgICAgJGZ1bGxTaXplID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV9oZXJvJywgJzQwMCcpOw0KICAgICAgICAkdGh1bWJTaXplID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV90aHVtYm5haWwnLCAnNzAnKTsNCiAgICAgICAgJHBydW5lbGlzdCA9ICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2hvd19leHRhbnQnLCcxJykgPT0gJzEnKTsNCgkJJGFjdHVhbGZpbGVjb3VudCA9IDA7DQoJCWlmICgkaW1nY291bnQgPiAwKQ0KCQkJew0KCSAgICAgICAgZm9yICgkaT0xOyRpPD0kaW1nY291bnQ7JGkrKykNCgkgICAgICAgICAgICB7DQoJICAgICAgICAgICAgaWYgKCEgJHBydW5lbGlzdCB8fCAkdGhpcy0+c3JjRXhpc3RzKCRwYXJhbXNbJ2FsaWFzJ10sICRpKSkNCgkgICAgICAgICAgICAJew0KCQkJCQlhcnJheV9wdXNoKCRpbWFnZUFycmF5LCANCgkJCQkJCSR0aGlzLT5pbWFnZVNwZWMoJHBhcmFtc1snYWxpYXMnXSwgJ2YnLCAkaSwgJGZ1bGxTaXplKSk7ICAgICAgICAgICAgDQoJCQkJCWFycmF5X3B1c2goJHRodW1iQXJyYXksDQoJCQkJCQkkdGhpcy0+aW1hZ2VTcGVjKCRwYXJhbXNbJ2FsaWFzJ10sICd0JywgJGksICR0aHVtYlNpemUpKTsNCgkJCQkJYXJyYXlfcHVzaCgkc3JjSW1nQXJyYXksDQoJCQkJCQkkdGhpcy0+c3JjSW1hZ2VTcGVjKCRwYXJhbXNbJ2FsaWFzJ10sICRpKSk7DQoJCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW1hZ2VfJy4kaS4nX3VybCcsDQoJCQkJCQkkdGhpcy0+aW1hZ2VTcGVjKCRwYXJhbXNbJ2FsaWFzJ10sICdmJywgJGksICRmdWxsU2l6ZSkpOyAgICAgICAgICAgIA0KCQkJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltYWdlX3RodW1iXycuJGkuJ191cmwnLA0KCQkJCQkJJHRoaXMtPmltYWdlU3BlYygkcGFyYW1zWydhbGlhcyddLCAndCcsICRpLCAkdGh1bWJTaXplKSk7DQoJCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3JjX2ltYWdlXycuJGkuJ191cmwnLA0KCQkJCQkJJHRoaXMtPnNyY0ltYWdlU3BlYygkcGFyYW1zWydhbGlhcyddLCAkaSkpOw0KCQkJCQl9DQoJICAgICAgICAgICAgfQ0KCQkJfQ0KCQlpZiAoJGZpbGVjb3VudCA+IDApDQoJCQl7DQoJCQlsaXN0KCRmaWxlQXJyYXksJGZpbGVUeXBlQXJyYXkpID0gJHRoaXMtPmdldEZpbGVzKCRwYXJhbXNbJ2FsaWFzJ10pOw0KDQoJCQlmb3JlYWNoICgkZmlsZUFycmF5IGFzICRpPT4kdikNCgkJCSAgICB7DQoJCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZmlsZV8nLigkaSsxKS4nX3VybCcsDQoJCQkJCQkkZ0Ntcy0+Y29uZmlnWyd1cGxvYWRzX3VybCddLiR0aGlzLT5nZXRBc3NldFBhdGgoJ2YnKS4nLycuJHBhcmFtc1snYWxpYXMnXS4nLycuJGZpbGVBcnJheVskaV0pOw0KCQkJCQlhcnJheV9wdXNoKCRmaWxlVXJsQXJyYXksJGdDbXMtPmNvbmZpZ1sndXBsb2Fkc191cmwnXS4kdGhpcy0+Z2V0QXNzZXRQYXRoKCdmJykuJy8nLiRwYXJhbXNbJ2FsaWFzJ10uJy8nLiRmaWxlQXJyYXlbJGldKTsNCgkJCQkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmaWxlXycuKCRpKzEpLidfbmFtZScsDQoJCQkJCQkkZmlsZUFycmF5WyRpXSk7DQoJCQkJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZmlsZV8nLigkaSsxKS4nX2V4dCcsDQoJCQkJCQkkZmlsZVR5cGVBcnJheVskaV0pOw0KCQkJCQkkYWN0dWFsZmlsZWNvdW50ICs9IDE7DQoJCQkJfQ0KDQoJCQl9DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignYXR0cmxpc3QnLCRwYXJhbXNbJ2F0dHJsaXN0J10pOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltYWdlX3VybF9hcnJheScsJGltYWdlQXJyYXkpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZpbGVfdXJsX2FycmF5JywkZmlsZVVybEFycmF5KTsNCgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmaWxlX25hbWVfYXJyYXknLCRmaWxlQXJyYXkpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZpbGVfZXh0X2FycmF5JywkZmlsZVR5cGVBcnJheSk7DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignZmlsZV9jb3VudCcsJGFjdHVhbGZpbGVjb3VudCk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW1hZ2VfdGh1bWJfdXJsX2FycmF5JywkdGh1bWJBcnJheSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3JjX2ltYWdlX3VybF9hcnJheScsJHNyY0ltZ0FycmF5KTsNCgkJJHRoaXMtPnNtYXJ0eUJhc2ljcygpOw0KCQkNCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ2NhdGFsb2dfJyAuICRwYXJhbXNbJ3N1Yl90ZW1wbGF0ZSddKTsNCiAgICAjIyB0aGUgbmV4dCBsaW5lcyB3ZXJlIGEgbWlzdGFrZS4uLiB0byBiZSByZW1vdmVkDQovLyAgICAkdG1wX1QgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdjYXRhbG9nXycgLiAkcGFyYW1zWydzdWJfdGVtcGxhdGUnXSk7DQovLyAgICBlY2hvICAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJHRtcF9UKTsNCiAgICAjZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdjYXRhbG9nXycuJHBhcmFtc1snc3ViX3RlbXBsYXRlJ10pOwkNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7DQppZiAoISAkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkgZXhpdDsNCiR0aGVtZSA9IGNtc191dGlsczo6Z2V0X3RoZW1lX29iamVjdCgpOw0KDQoJCSR0aGlzLT5pbml0QWRtaW5OYXYoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOw0KDQogICAgICAgIC8vTG9hZCB0aGUgc2hvd3MNCiAgICAgICAgJGVudHJ5YXJyYXkgPSBhcnJheSgpOw0KDQogICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgdC5pZCwgdC50aXRsZSwgdHQubmFtZSBhcyB0eXBlIEZST00gIi4NCiAgICAgICAgCWNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgdCwgIi4NCiAgICAgICAgCWNtc19kYl9wcmVmaXgoKS4NCiAgICAgICAgCSJtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZV90eXBlIHR0IFdIRVJFIHQudHlwZV9pZCA9IHR0LnR5cGVfaWQgT1JERVIgYnkgdC50eXBlX2lkLCB0aXRsZSI7DQogICAgICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KDQogICAgICAgICRyb3djbGFzcyA9ICdyb3cxJzsNCg0KICAgICAgICB3aGlsZSAoJGRicmVzdWx0ICE9PSBmYWxzZSAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQ0KICAgICAgICB7DQoJICAgICAgICRvbmVyb3cgPSBuZXcgc3RkQ2xhc3MoKTsNCg0KCSAgICAgICAkb25lcm93LT5pZCA9ICRyb3dbJ2lkJ107DQoJICAgICAgICRvbmVyb3ctPnR5cGUgPSAkcm93Wyd0eXBlJ107DQoJICAgICAgICRvbmVyb3ctPnRpdGxlID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHRlbXBsJywgJHJldHVybmlkLA0KCSAgICAgICAJCSRyb3dbJ3RpdGxlJ10sIGFycmF5KCd0ZW1wbGF0ZV9pZCc9PiRyb3dbJ2lkJ10pKTsNCgkgICAgICAgJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7DQoNCgkgICAgICAgJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0dGVtcGwnLCAkcmV0dXJuaWQsDQoJICAgICAgIAkJJHRoZW1lLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsDQoJICAgICAgIAkJCSR0aGlzLT5MYW5nKCdlZGl0JyksJycsJycsJ3N5c3RlbWljb24nKSwNCgkgICAgICAgCQkgCWFycmF5KCd0ZW1wbGF0ZV9pZCc9PiRyb3dbJ2lkJ10pKTsNCgkgICAgICAgJG9uZXJvdy0+ZGVsZXRlbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZXRlbXBsJywgJHJldHVybmlkLA0KCSAgICAgICAJCSR0aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsDQoJICAgICAgIAkJCSR0aGlzLT5MYW5nKCdkZWxldGUnKSwnJywnJywnc3lzdGVtaWNvbicpLA0KCSAgICAgICAJCQlhcnJheSgndGVtcGxhdGVfaWQnPT4kcm93WydpZCddKSwgJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnLCdUZW1wbGF0ZScpKTsNCg0KCSAgICAgICBhcnJheV9wdXNoKCRlbnRyeWFycmF5LCAkb25lcm93KTsNCg0KCSAgICAgICAoJHJvd2NsYXNzPT0icm93MSI/JHJvd2NsYXNzPSJyb3cyIjokcm93Y2xhc3M9InJvdzEiKTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCAkZW50cnlhcnJheSk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJGVudHJ5YXJyYXkpKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYXRlZ29yeScsJHRoaXMtPkxhbmcoJ3RlbXBsYXRlbGlzdCcpKTsNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV90ZW1wbGF0ZScsJHRoaXMtPkxhbmcoJ3RpdGxlX3RlbXBsYXRlJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX3RlbXBsYXRlX3R5cGUnLCR0aGlzLT5MYW5nKCd0aXRsZV90ZW1wbGF0ZV90eXBlJykpOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25vdGVtcGxhdGVzJywkdGhpcy0+TGFuZygnbm90ZW1wbGF0ZXMnKSk7DQoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsaXNzZXQoJHBhcmFtc1snbWVzc2FnZSddKT8kcGFyYW1zWydtZXNzYWdlJ106JycpOw0KCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NlY3Rpb24nLCR0aGlzLT5MYW5nKCdzdWJ0ZW1wbGF0ZXMnKSk7DQoNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywNCiAgICAgICAgICAgICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbCcsICRyZXR1cm5pZCwNCiAgICAgICAgICAgICAgICAkdGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLA0KICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdhZGR0ZW1wbGF0ZScpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICcnKSAuJyAnLg0KICAgICAgICAgICAgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHRlbXBsJywgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdhZGR0ZW1wbGF0ZScpLCBhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9InBhZ2VvcHRpb25zIicpLg0KICAgICAgICAgICAgICAgICcmbmJzcDsmbmJzcDsnLg0KICAgICAgICAgICAgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAncmVpbXBvcnQnLCAkcmV0dXJuaWQsDQogICAgICAgICAgICAgICAgJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL0NhdGFsb2dlci9pbWFnZXMvcmVsb2FkLmdpZiIgY2xhc3M9InN5c3RlbWljb24iIGFsdD0iJy4kdGhpcy0+TGFuZygncmVpbXBvcnR0ZW1wbGF0ZXMnKS4nIiAgdGl0bGU9IicuJHRoaXMtPkxhbmcoJ3JlaW1wb3J0dGVtcGxhdGVzJykuJyIgLz4nLCBhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLCAnJykgLicgJy4NCiAgICAgICAgICAgICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3JlaW1wb3J0JywgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdyZWltcG9ydHRlbXBsYXRlcycpLCBhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9InBhZ2VvcHRpb25zIicpICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICk7DQoNCiAgICAgICAgI0Rpc3BsYXkgdGVtcGxhdGUNCiAgICAgICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCd0ZW1wbGF0ZWxpc3QudHBsJyk7DQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/action.deletetempl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsKaWYgKCEgJHRoaXMtPkNoZWNrQWNjZXNzKCkpIGV4aXQ7CgoJCWlmICghIGVtcHR5KCRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10pKQoJCQl7CgkJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLiBjbXNfZGJfcHJlZml4KCkuCgkJCQknbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgV0hFUkUgaWQ9Pyc7CgkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHBhcmFtc1sndGVtcGxhdGVfaWQnXSkpOwoJCQl9CgkJJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdnbG9zc2FyeV8nLiRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10pOwoKCQkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygndGVtcGxhdGVkZWxldGVkJyk7CgkJJHRoaXMtPkRvQWN0aW9uKCdkZWZhdWx0YWRtaW4nLCAkaWQsICRwYXJhbXMpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.edittempl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7DQppZiAoISAkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkgZXhpdDsNCg0KJHRoaXMtPmluaXRBZG1pbk5hdigkaWQsICRwYXJhbXMsICRyZXR1cm5pZCk7DQoNCiRwYXJhbXNbJ21lc3NhZ2UnXT0nJzsNCmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgfHwgaXNzZXQoJHBhcmFtc1snYXBwbHknXSkpDQp7DQoJaWYgKCEgZW1wdHkoJHBhcmFtc1sndGVtcGxhdGVfaWQnXSkpDQoJew0KCQkvLyB1cGRhdGluZyBhIHRlbXBsYXRlDQoJCSRxdWVyeSA9ICdVUERBVEUgJw0KICAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgICAgICAuICdtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZSBzZXQgdGl0bGU9PywgdGVtcGxhdGU9PywgdHlwZV9pZD0/IFdIRVJFIGlkPT8nOw0KICAgICAgICAgICAgICANCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHF1ZXJ5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ3RpdGxlJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ3RlbXBsJ10sDQoJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ3R5cGVfaWQnXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KCQkkdGVtcGxhdGVfaWQgPSAkcGFyYW1zWyd0ZW1wbGF0ZV9pZCddOw0KCX0NCgllbHNlDQoJew0KCQkvLyBjcmVhdGluZyBhIHRlbXBsYXRlDQoJCSRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnDQogICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAgICAgIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlIChpZCwgdGl0bGUsIHR5cGVfaWQsIHRlbXBsYXRlKSBWQUxVRVMgKD8sPyw/LD8pJzsNCiAgICAgICAgICAgICAgDQoJCSR0ZW1wbGF0ZV9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlX3NlcScpOw0KICAgIA0KCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcXVlcnksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBsYXRlX2lkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWyd0aXRsZSddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWyd0eXBlX2lkJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ3RlbXBsJ10NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KCX0NCg0KCS8vIGZvcmNlIGEgY2FjaGUgY2xlYXI/DQoJJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdjYXRhbG9nXycuJHRlbXBsYXRlX2lkKTsNCgkvLyBhbmQgcmVjcmVhdGUNCgkkdGhpcy0+U2V0VGVtcGxhdGUoJ2NhdGFsb2dfJy4kdGVtcGxhdGVfaWQsJHBhcmFtc1sndGVtcGwnXSk7DQoNCgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygndGVtcGxhdGV1cGRhdGVkJyk7DQoJDQoJaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSkNCgl7DQoJCSR0aGlzLT5Eb0FjdGlvbignZGVmYXVsdGFkbWluJywgJGlkLCAkcGFyYW1zKTsNCgkJcmV0dXJuOw0KCX0NCn0NCg0KDQokdHlwZWlkcyA9IGFycmF5KCk7DQokcXVlcnkgPSAnU0VMRUNUIHR5cGVfaWQsIG5hbWUgRlJPTSAnIA0KICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlX3R5cGUnOw0KICAgICAgICAgDQokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCg0Kd2hpbGUgKCRkYnJlc3VsdCAhPT0gZmFsc2UgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkNCnsNCiAgJHR5cGVpZHNbJHJvd1snbmFtZSddXSA9ICRyb3dbJ3R5cGVfaWQnXTsNCn0NCg0KaWYgKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10pKQ0Kew0KCS8vIGVkaXRpbmcgYSB0ZW1wbGF0ZQ0KCSRxdWVyeSA9ICdTRUxFQ1QgdGl0bGUsIHRlbXBsYXRlLCB0eXBlX2lkIEZST00gJw0KICAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlIFdIRVJFIGlkPT8nOw0KICAgICAgICAgICAgDQoJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnksIGFycmF5KCAkcGFyYW1zWyd0ZW1wbGF0ZV9pZCddKSApOw0KICANCgkkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOw0KCSR0ZW1wbGF0ZWlkID0gJHBhcmFtc1sndGVtcGxhdGVfaWQnXTsNCgkkdGl0bGU9JHJvd1sndGl0bGUnXTsNCgkkdGVtcGxhdGU9JHJvd1sndGVtcGxhdGUnXTsNCgkkdHlwZV9pZD0kcm93Wyd0eXBlX2lkJ107DQoJJHNtYXJ0eS0+YXNzaWduKCdvcCcsICR0aGlzLT5MYW5nKCdlZGl0dGVtcGxhdGUnKSk7DQp9DQplbHNlDQp7DQoJLy8gYWRkaW5nIGEgdGVtcGxhdGUNCgkkdGVtcGxhdGVpZCA9ICcnOw0KCSR0aXRsZSA9ICcnOw0KCSR0ZW1wbGF0ZSA9ICcnOw0KCSRzbWFydHktPmFzc2lnbiggJ29wJywgJHRoaXMtPkxhbmcoJ2FkZHRlbXBsYXRlJykgKTsNCn0NCg0KJHF1ZXJ5ID0gIlNFTEVDVCBhdHRyaWJ1dGUsIGFsaWFzLCB0eXBlX2lkIEZST00gIiAuIGNtc19kYl9wcmVmaXgoKSAuICJtb2R1bGVfY2F0YWxvZ19hdHRyIjsNCiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgICAgICANCiRhdHRyc190aXRsZSA9ICc8aDM+JyAuICR0aGlzLT5MYW5nKCd0aXRsZV9pdGVtX3RlbXBsYXRlX3ZhcnMnKSAuICc8L2gzPic7DQokYXR0cnNfYXJyYXkgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgICAneyR0aXRsZX0nLA0KICAgICAgICAgICAgICAgICAgICAgICd7JG1haW5fY29udGVudH0nDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIA0KJGNhdHRyc190aXRsZSA9ICc8aDM+JyAuICR0aGlzLT5MYW5nKCd0aXRsZV9jYXRfdGVtcGxhdGVfdmFycycpIC4gJzwvaDM+JzsNCiRjYXR0cnNfYXJyYXkgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgICAgICd7JHRpdGxlfScsDQogICAgICAgICAgICAgICAgICAgICAgICAneyRtYWluX2NvbnRlbnR9JywNCiAgICAgICAgICAgICAgICAgICAgICAgICd7JHByZXZ9JywNCiAgICAgICAgICAgICAgICAgICAgICAgICd7JHByZXZ1cmx9JywNCiAgICAgICAgICAgICAgICAgICAgICAgICd7JG5hdnN0cn0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3skbmV4dH0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3skbmV4dHVybH0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3skaXRlbXN9Jw0KICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIA0KDQokcGNhdHRyc190aXRsZSA9ICc8aDM+JyAuICR0aGlzLT5MYW5nKCd0aXRsZV9jYXRhbG9nX3RlbXBsYXRlX3ZhcnMnKSAuICc8L2gzPic7DQokcGNhdHRyc19hcnJheSA9IGFycmF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3skaXRlbXN9JywNCiAgICAgICAgICAgICAgICAgICAgICAgICd7JG1haW5fY29udGVudH0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3skYXR0cmxpc3R9JywNCiAgICAgICAgICAgICAgICAgICAgICAgICd7JHJvb3RfdXJsfScsDQogICAgICAgICAgICAgICAgICAgICAgICAneyRpbWFnZV9yb290fScNCiAgICAgICAgICAgICAgICAgICAgICApOyAgICAgICAgDQoNCiRjb21wYXR0cnNfdGl0bGUgPSAnPGgzPicgLiAkdGhpcy0+TGFuZygndGl0bGVfY29tcGFyZV90ZW1wbGF0ZV92YXJzJykgLiAnPC9oMz4nOw0KJGNvbXBhdHRyc19hcnJheSA9IGFycmF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAneyRpdGVtc30nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAneyRtYWluX2NvbnRlbnR9JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3skYXR0cmxpc3R9JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3skcm9vdF91cmx9JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3skaW1hZ2Vfcm9vdH0nDQogICAgICAgICAgICAgICAgICAgICAgICApOyANCg0KJGZlYXR0cnNfdGl0bGUgPSAnPGgzPicgLiAkdGhpcy0+TGFuZygndGl0bGVfZmVhdHVyZV90ZW1wbGF0ZV92YXJzJykgLiAnPC9oMz4nOw0KJGZlYXR0cnNfYXJyYXkgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgICAgICd7JGl0ZW1zfScsDQogICAgICAgICAgICAgICAgICAgICAgICAneyRtYWluX2NvbnRlbnR9JywNCiAgICAgICAgICAgICAgICAgICAgICAgICd7JGF0dHJsaXN0fScsDQogICAgICAgICAgICAgICAgICAgICAgICAneyRyb290X3VybH0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3skaW1hZ2Vfcm9vdH0nDQogICAgICAgICAgICAgICAgICAgICAgKTsNCg0Kd2hpbGUgKCRkYnJlc3VsdCAhPT0gZmFsc2UgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkNCnsNCiAgJHNhZmVhdHRyID0gc3RydG9sb3dlcihwcmVnX3JlcGxhY2UoJy9cVy8nLCcnLCRyb3dbJ2F0dHJpYnV0ZSddKSk7DQogIA0KICBpZiAoJHJvd1sndHlwZV9pZCddID09IENURU1QTEFURV9JVEVNKQ0KICB7DQogICAgJGF0dHJzX2FycmF5W10gPSAneyQnIC4gJHNhZmVhdHRyIC4gJ30nOw0KDQoJCWlmICgkcm93WydhbGlhcyddICE9ICcnKQ0KCQl7DQoJCQkkYXR0cnNfYXJyYXlbXSA9ICd7JCcgLiAkcm93WydhbGlhcyddIC4gJ30nOw0KCQl9DQogIH0NCiAgZWxzZSBpZiAoJHJvd1sndHlwZV9pZCddID09IENURU1QTEFURV9DQVRFR09SWSkNCiAgew0KCQkkY2F0dHJzX2FycmF5W10gPSAneyQnIC4gJHNhZmVhdHRyIC4gJ30nOw0KCQkNCiAgICBpZiAoJHJvd1snYWxpYXMnXSAhPSAnJykNCgkJew0KCQkJJGNhdHRyc19hcnJheVtdID0gJ3skJyAuICRyb3dbJ2FsaWFzJ10gLiAnfSc7DQoJCX0NCgl9DQogIGVsc2UgaWYgKCRyb3dbJ3R5cGVfaWQnXSA9PSBDVEVNUExBVEVfQ0FUQUxPRykNCiAgew0KCQkkcGNhdHRyc19hcnJheVtdID0gJ3skJyAuICRzYWZlYXR0ciAuICd9JzsNCgkJaWYgKCRyb3dbJ2FsaWFzJ10gIT0gJycpDQoJCXsNCgkJCSRwY2F0dHJzX2FycmF5W10gPSAneyQnIC4gJHJvd1snYWxpYXMnXSAuICd9JzsNCgkJfQ0KCX0NCn0NCiAgICAgICAgICANCiRpbWFnZV9jb3VudCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX2NvdW50JywgJzEnKTsNCg0KZm9yICgkaT0xOyRpPD0kaW1hZ2VfY291bnQ7JGkrKykNCnsNCiAgJGF0dHJzX2FycmF5W10gPSAneyRpbWFnZV8nIC4gJGkgLiAnX3VybH0nOw0KICAkYXR0cnNfYXJyYXlbXSA9ICd7JGltYWdlX3RodW1iXycgLiAkaSAuICdfdXJsfSc7DQp9DQoNCiRhdHRyc19hcnJheVtdID0gJ3skaW1hZ2VfdXJsX2FycmF5fSc7DQokYXR0cnNfYXJyYXlbXSA9ICd7JHNyY19pbWFnZV91cmxfYXJyYXl9JzsNCiRhdHRyc19hcnJheVtdID0gJ3skaW1hZ2VfdGh1bWJfdXJsX2FycmF5fSc7DQoNCiRmaWxlX2NvdW50ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1fZmlsZV9jb3VudCcsIDApOw0KDQpmb3IgKCRpPTE7ICRpIDw9ICRmaWxlX2NvdW50OyAkaSsrKQ0Kew0KICAkYXR0cnNfYXJyYXlbXSA9ICd7JGZpbGVfY291bnR9LCB7JGZpbGVfJy4kaS4nX25hbWV9LCB7JGZpbGVfJy4kaS4nX3VybH0sIHskZmlsZV8nLiRpOw0KICAkYXR0cnNfYXJyYXlbXSA9ICdfZXh0fSwgJzsNCn0NCiAgICANCiRhdHRyc19hcnJheVtdID0gJ3skZmlsZV91cmxfYXJyYXl9JzsNCiRhdHRyc19hcnJheVtdID0gJ3skZmlsZV9uYW1lX2FycmF5fSc7DQokYXR0cnNfYXJyYXlbXSA9ICd7JGZpbGVfZXh0X2FycmF5fSc7DQokYXR0cnNfYXJyYXlbXSA9ICd7JHJvb3RfdXJsfSc7DQokYXR0cnNfYXJyYXlbXSA9ICd7JGltYWdlX3Jvb3R9JzsNCg0KJGF0dHJzID0gJGF0dHJzX3RpdGxlIC4gJzxwPjxzdHJvbmc+JyAuIGltcGxvZGUoJywgJywgJGF0dHJzX2FycmF5KS4gJzwvc3Ryb25nPjwvcD4nOw0KDQokaW1hZ2VfY291bnQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2F0ZWdvcnlfaW1hZ2VfY291bnQnLCAnMScpOw0KDQpmb3IgKCRpPTE7JGk8PSRpbWFnZV9jb3VudDskaSsrKQ0Kew0KICAkY2F0dHJzX2FycmF5W10gPSAneyRpbWFnZV8nIC4gJGkgLiAnX3VybH0nOw0KICAkY2F0dHJzX2FycmF5W10gPSAneyRpbWFnZV90aHVtYl8nIC4gJGkgLiAnX3VybH0nOw0KICAkY2F0dHJzX2FycmF5W10gPSAneyRzcmNfaW1hZ2VfJyAuICRpIC4gJ191cmx9JzsNCn0NCg0KJGNhdHRyc19hcnJheVtdID0gJ3skaW1hZ2VfdXJsX2FycmF5fSwgJzsNCiRjYXR0cnNfYXJyYXlbXSA9ICd7JHNyY19pbWFnZV91cmxfYXJyYXl9LCAnOw0KJGNhdHRyc19hcnJheVtdID0gJ3skaW1hZ2VfdGh1bWJfdXJsX2FycmF5fSc7DQokY2F0dHJzX2FycmF5W10gPSAneyRyb290X3VybH0nOw0KJGNhdHRyc19hcnJheVtdID0gJ3skaW1hZ2Vfcm9vdH0nOw0KDQokY2F0dHJzID0gJGNhdHRyc190aXRsZSAuICc8cD48c3Ryb25nPicgLiBpbXBsb2RlKCcsICcsICRjYXR0cnNfYXJyYXkpLiAnPC9zdHJvbmc+PC9wPic7DQoNCiRjYXR0cnNfaXRfdGl0bGUgPSAnPGgzPiRpdGVtcyBhcnJheSBjb250ZW50czo8L2gzPic7DQokY2F0dHJzX2l0X2FycmF5ID0gYXJyYXkoDQogICAgICAgICAgICAgICAgICAgICAgICAgICckaXRlbXNbXS50aXRsZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICckaXRlbXNbXS5saW5rJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyRpdGVtc1tdLmltYWdlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJyRpdGVtc1tdLmNhdCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICckaXRlbXNbXS48aT5hdHRyaWJ1dGVfbmFtZTwvaT4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAnJGl0ZW1zW10uPGk+YXR0cmlidXRlX2FsaWFzPC9pPicNCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICANCiRjYXR0cnMgLj0gJGNhdHRyc19pdF90aXRsZSAuICc8cD48c3Ryb25nPicgLiBpbXBsb2RlKCcsICcsICRjYXR0cnNfaXRfYXJyYXkpIC4gJzwvc3Ryb25nPjwvcD4nOw0KDQokcGNhdHRycyA9ICRwY2F0dHJzX3RpdGxlIC4gJzxwPjxzdHJvbmc+JyAuIGltcGxvZGUoJywgJywgJHBjYXR0cnNfYXJyYXkpLiAnPC9zdHJvbmc+PC9wPic7DQoNCiRwY2F0dHJzIC49ICc8aDM+JGl0ZW1zIGFycmF5IGNvbnRlbnRzOjwvaDM+JzsNCiRwY2F0dHJzIC49ICckaXRlbXNbXS50aXRsZSwgJGl0ZW1zW10ubGluaywgJGl0ZW1zW10uaW1hZ2UsICRpdGVtc1tdLmNhdCwgJGl0ZW1zW10uPGk+YXR0cmlidXRlX25hbWU8L2k+LCAkaXRlbXNbXS48aT5hdHRyaWJ1dGVfYWxpYXM8L2k+JzsNCiRwY2F0dHJzIC49ICc8aDM+JGF0dHJsaXN0IGFycmF5IGNvbnRlbnRzOjwvaDM+JzsNCiRwY2F0dHJzIC49ICckYXR0cmxpc3RbXS0+YXR0ciwgJGF0dHJsaXN0W10tPnNhZmUnOw0KDQokY29tcGF0dHJzID0gJGNvbXBhdHRyc190aXRsZSAuICc8cD48c3Ryb25nPicgLiBpbXBsb2RlKCcsICcsICRjb21wYXR0cnNfYXJyYXkpLiAnPC9zdHJvbmc+PC9wPic7DQokY29tcGF0dHJzIC49ICc8aDM+JGl0ZW1zIGFycmF5IGNvbnRlbnRzOjwvaDM+JzsNCiRjb21wYXR0cnMgLj0gJyRpdGVtc1tdLnRpdGxlLCAkaXRlbXNbXS5saW5rLCAkaXRlbXNbXS5pbWFnZSwgJGl0ZW1zW10uPGk+YXR0cmlidXRlX25hbWU8L2k+LCAkaXRlbXNbXS48aT5hdHRyaWJ1dGVfYWxpYXM8L2k+JzsNCiRjb21wYXR0cnMgLj0gJzxoMz4kYXR0cmxpc3QgYXJyYXkgY29udGVudHM6PC9oMz4nOw0KJGNvbXBhdHRycyAuPSAnJGF0dHJsaXN0W10tPmF0dHIsICRhdHRybGlzdFtdLT5zYWZlJzsNCg0KJGZlYXR0cnMgPSAkZmVhdHRyc190aXRsZSAuICc8cD48c3Ryb25nPicgLiBpbXBsb2RlKCcsICcsICRmZWF0dHJzX2FycmF5KS4gJzwvc3Ryb25nPjwvcD4nOw0KJGZlYXR0cnMgLj0gJzxoMz4kaXRlbXMgYXJyYXkgY29udGVudHM6PC9oMz4nOw0KJGZlYXR0cnMgLj0gJyRpdGVtc1tdLnRpdGxlLCAkaXRlbXNbXS5saW5rLCAkaXRlbXNbXS5pbWFnZSwgJGl0ZW1zW10uY2F0LCAkaXRlbXNbXS48aT5hdHRyaWJ1dGVfbmFtZTwvaT4sICRpdGVtc1tdLjxpPmF0dHJpYnV0ZV9hbGlhczwvaT4nOw0KDQogICAgDQokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZWRpdHRlbXBsJywgJHJldHVybmlkKSk7DQokc21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsNCiRzbWFydHktPmFzc2lnbignaGlkZGVuJywkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAndGVtcGxhdGVfaWQnLCAkdGVtcGxhdGVpZCkpOw0KJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV90aXRsZScsJHRoaXMtPkxhbmcoJ3RpdGxlX3RpdGxlJykpOw0KJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV90ZW1wbGF0ZScsJHRoaXMtPkxhbmcoJ3RpdGxlX3RlbXBsYXRlJykpOw0KJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV90ZW1wbGF0ZV90eXBlJywkdGhpcy0+TGFuZygndGl0bGVfdGVtcGxhdGVfdHlwZScpKTsNCiRzbWFydHktPmFzc2lnbigndGl0bGVfYXZhaWxfYXR0cnMnLCR0aGlzLT5MYW5nKCd0aXRsZV9hdmFpbF9hdHRycycpKTsNCg0KaWYgKGlzc2V0KCR0eXBlX2lkKSkNCnsNCiAgaWYgKCR0eXBlX2lkID09IENURU1QTEFURV9JVEVNKQ0KCXsNCgkgICRzbWFydHktPmFzc2lnbignYXZhaWxfYXR0cnMnLCRhdHRycyk7DQoJfQ0KICBlbHNlIGlmICgkdHlwZV9pZCA9PSBDVEVNUExBVEVfQ0FURUdPUlkpDQoJew0KCSAgJHNtYXJ0eS0+YXNzaWduKCdhdmFpbF9hdHRycycsJGNhdHRycyk7CQkNCgl9DQogIGVsc2UgaWYgKCR0eXBlX2lkID09IENURU1QTEFURV9DQVRBTE9HKQ0KCXsNCgkgICRzbWFydHktPmFzc2lnbignYXZhaWxfYXR0cnMnLCRwY2F0dHJzKTsJCQ0KCX0NCiAgZWxzZSBpZiAoJHR5cGVfaWQgPT0gQ1RFTVBMQVRFX0NPTVBBUklTT04pDQoJew0KCSAgJHNtYXJ0eS0+YXNzaWduKCdhdmFpbF9hdHRycycsJGNvbXBhdHRycyk7CQkNCgl9DQogIGVsc2UgaWYgKCR0eXBlX2lkID09IENURU1QTEFURV9GRUFUVVJFKQ0KCXsNCgkgICRzbWFydHktPmFzc2lnbignYXZhaWxfYXR0cnMnLCRmZWF0dHJzKTsJCQ0KCX0NCn0NCmVsc2UNCnsNCiAgJHNtYXJ0eS0+YXNzaWduKCdhdmFpbF9hdHRycycsICRhdHRycyAuICcsICcgLiAkY2F0dHJzLicsICcgLiAkZmVhdHRycyk7DQp9DQoNCi8vJHNtYXJ0eS0+YXNzaWduKCd0aXRsZV9hdmFpbF9pbWF0dHJzJywkdGhpcy0+TGFuZygndGl0bGVfYXZhaWxfaW1hdHRycycpKTsJCQ0KLy8kc21hcnR5LT5hc3NpZ24oJ2F2YWlsX2ltYXR0cnMnLCRpbWF0dHJzKTsNCiRzbWFydHktPmFzc2lnbignaW5wdXRfdGVtcGxhdGVfdHlwZScsJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAndHlwZV9pZCcsICR0eXBlaWRzLCAtMSwgaXNzZXQoJHR5cGVfaWQpPyR0eXBlX2lkOicnKSk7DQoNCiRzbWFydHktPmFzc2lnbignbWVzc2FnZScsJHBhcmFtc1snbWVzc2FnZSddKTsNCiRzbWFydHktPmFzc2lnbignaW5wdXRfdGl0bGUnLCR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAndGl0bGUnLCAkdGl0bGUsIDIwLCAyNTUpKTsNCiRzbWFydHktPmFzc2lnbignaW5wdXRfdGVtcGxhdGUnLCR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgJGlkLCAkdGVtcGxhdGUsICd0ZW1wbCcpKTsNCg0KJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgbGFuZygnc3VibWl0JykpKTsNCiRzbWFydHktPmFzc2lnbignYXBwbHknLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnYXBwbHknLCBsYW5nKCdhcHBseScpKSk7DQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXR0ZW1wbGF0ZS50cGwnKTsNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.globalops.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsKaWYgKCEgJHRoaXMtPkNoZWNrQWNjZXNzKCkpIGV4aXQ7CgoJCSR0aGlzLT5pbml0QWRtaW5OYXYoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwoKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZ2xvYmFsc3VibWl0JywgJHJldHVybmlkKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJ1VwZGF0ZSBFbnRpcmUgQ2F0YWxvZycpKTsKCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9jYXRlZ29yeV9yZWN1cnNlJywkdGhpcy0+TGFuZygndGl0bGVfZ2xvYmFsX2NhdGVnb3J5X3JlY3Vyc2UnKSk7CgoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfY2F0ZWdvcnlfcmVjdXJzZScsCgkJCSc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IicuJGlkLidjYXRlZ29yeV9yZWN1cnNlIiB2YWx1ZT0ibm9jaGFuZ2UiIGNoZWNrZWQ9ImNoZWNrZWQiIC8+Jy4kdGhpcy0+TGFuZygnbm9nbG9iYWxjaGFuZ2UnKS4nPGJyIC8+JyAuCgkJCSc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IicuJGlkLidjYXRlZ29yeV9yZWN1cnNlIiB2YWx1ZT0iaXRlbXNfYWxsIiAvPicuCgkJCQkkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9pdGVtc19hbGwnKS4nPGJyIC8+Jy4KCQkJJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iJy4kaWQuJ2NhdGVnb3J5X3JlY3Vyc2UiIHZhbHVlPSJpdGVtc19vbmUiIC8+Jy4KCQkJCSR0aGlzLT5MYW5nKCd0aXRsZV9jYXRlZ29yeV9yZWN1cnNlX2l0ZW1zX29uZScpLic8YnIgLz4nLgoJCQknPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSInLiRpZC4nY2F0ZWdvcnlfcmVjdXJzZSIgdmFsdWU9ImNhdGVnb3JpZXNfYWxsIiAvPicuCgkJCQkkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9jYXRlZ29yaWVzX2FsbCcpLic8YnIgLz4nLgoJCQknPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSInLiRpZC4nY2F0ZWdvcnlfcmVjdXJzZSIgdmFsdWU9ImNhdGVnb3JpZXNfb25lIiAvPicuCgkJCQkkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9jYXRlZ29yaWVzX29uZScpLic8YnIgLz4nLgoJCQknPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSInLiRpZC4nY2F0ZWdvcnlfcmVjdXJzZSIgdmFsdWU9Im1peGVkX2FsbCIgLz4nLgoJCQkJJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X3JlY3Vyc2VfbWl4ZWRfYWxsJykuJzxiciAvPicuCgkJCSc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IicuJGlkLidjYXRlZ29yeV9yZWN1cnNlIiB2YWx1ZT0ibWl4ZWRfb25lIiAvPicuCgkJCQkkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9taXhlZF9vbmUnKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pdGVtc19wZXJfcGFnZScsJHRoaXMtPkxhbmcoJ3RpdGxlX2dsb2JhbF9pdGVtc19wZXJfcGFnZScpKTsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2l0ZW1zX3Blcl9wYWdlJywkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsCiAgICAgICAgIAkJJ2l0ZW1zX3Blcl9wYWdlJywKICAgICAgICAgICAgICAgIGFycmF5KCR0aGlzLT5MYW5nKCdub2dsb2JhbGNoYW5nZScpPT4nLTEnLAogICAgICAgICAgICAgICAgCScxJz0+JzEnLCcyJz0+JzInLCczJz0+JzMnLCc0Jz0+JzQnLCc1Jz0+JzUnLCc2Jz0+JzYnLAogICAgICAgICAgICAgICAgCSc3Jz0+JzcnLCc4Jz0+JzgnLCc5Jz0+JzknLCcxMCc9PicxMCcsJzExJz0+JzExJywKICAgICAgICAgICAgICAgIAknMTInPT4nMTInLCAnMTMnPT4nMTMnLCcxNCc9PicxNCcsJzE1Jz0+JzE1JywnMTYnPT4nMTYnLAogICAgICAgICAgICAgICAgCScxNyc9PicxNycsJzE4Jz0+JzE4JywnMTknPT4nMTknLCcyMCc9PicyMCcsJzI0Jz0+JzI0JywKICAgICAgICAgICAgICAgIAknMjUnPT4nMjUnLCczMCc9PiczMCcsJzQwJz0+JzQwJywKICAgICAgICAgICAgICAgIAknNTAnPT4nNTAnLCAnMTAwMCc9PicxMDAwJyksIC0xLCAnLTEnKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pdGVtX3NvcnRfb3JkZXInLCR0aGlzLT5MYW5nKCd0aXRsZV9nbG9iYWxfaXRlbV9zb3J0X29yZGVyJykpOwoJCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfaXRlbV9zb3J0X29yZGVyJywkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsCgkJIAknaXRlbV9zb3J0X29yZGVyJyxhcnJheSgkdGhpcy0+TGFuZygnbm9nbG9iYWxjaGFuZ2UnKT0+J25vY2hhbmdlJywKCQkgCSR0aGlzLT5MYW5nKCduYXR1cmFsX29yZGVyJyk9PiduYXR1cmFsJywKCQkgCSR0aGlzLT5MYW5nKCdhbHBoYV9vcmRlcicpPT4nYWxwaGEnKSwgLTEsICdub2NoYW5nZScpKTsKCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgaXNzZXQoJHBhcmFtc1snbWVzc2FnZSddKT8kcGFyYW1zWydtZXNzYWdlJ106JycpOwoKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhdGVnb3J5JywgJHRoaXMtPkxhbmcoJ2dsb2JhbG9wcycpKTsKCiAgICAgICAgI0Rpc3BsYXkgdGVtcGxhdGUKICAgICAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluZ2xvYmFsb3BzLnRwbCcpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.globalsubmit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsKaWYgKCEgJHRoaXMtPkNoZWNrQWNjZXNzKCkpIGV4aXQ7CgogICAgICAgIC8qKgogICAgICAgICogVGhpcyBJUyBvbmUgb2YgdGhlIGFjdGlvbnMgdG8gY2hhbmdlIChKTSkKICAgICAgICAqLwogICAgICAgIAogICAgICAgICRjb250ZW50b3BzID0gY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsKCQlpZiAoaXNzZXQoJHBhcmFtc1snaXRlbV9zb3J0X29yZGVyJ10pICYmCgkJCSRwYXJhbXNbJ2l0ZW1fc29ydF9vcmRlciddICE9ICdub2NoYW5nZScpCgkJCXsKCQkJLy8gdXBkYXRlIGFsbCBpdGVtIHNvcnQgb3JkZXIKCiAgICAgICAgICAgIC8vIG5ldyBsZWdhbCBjb2RlLiAoSk0pCiAgICAgICAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBjLmNvbnRlbnRfaWQgZnJvbSAiIC4gCiAgICAgICAgICAgICAgICAgICAgICAgIGNtc19kYl9wcmVmaXgoKSAuICJjb250ZW50IGMsICIgLgogICAgICAgICAgICAgICAgICAgICAgICBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudF9wcm9wcyBwICIgLgogICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUgYy50eXBlPSdjYXRhbG9nY2F0ZWdvcnknIGFuZCBjcC5wcm9wX25hbWU9J3NvcnRfb3JkZXInIGFuZCBjLmNvbnRlbnRfaWQ9cC5jb250ZW50X2lkIjsKCiAgICAgICAgICAgICAgICAkdG1wID0gJGRiLT5HZXRDb2woJHF1ZXJ5KTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGZvcmVhY2goICR0bXAgYXMgJG9uZSApIAogICAgICAgICAgICAgICAgeyAgCiAgICAgICAgICAgICAgICAgICAgJG9iaiA9ICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21JZCgkb25lLFRSVUUpOwogICAgICAgICAgICAgICAgICAgICRvYmotPlNldFByb3BlcnR5VmFsdWUoJ3NvcnRfb3JkZXInLCRwYXJhbXNbJ2l0ZW1fc29ydF9vcmRlciddKTsKICAgICAgICAgICAgICAgICAgICAkb2JqLT5zYXZlKCk7IAogICAgICAgICAgICAgICAgfQoJCQl9CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ2NhdGVnb3J5X3JlY3Vyc2UnXSkgJiYKCQkJJHBhcmFtc1snY2F0ZWdvcnlfcmVjdXJzZSddICE9ICdub2NoYW5nZScpCgkJCXsKCQkJLy8gdXBkYXRlIGRpc3BsYXkgcnVsZXMKICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBuZXcgbGVnYWwgY29kZS4gKEpNKQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCBjLmNvbnRlbnRfaWQgZnJvbSAiIC4gCiAgICAgICAgICAgICAgICAgICAgICAgIGNtc19kYl9wcmVmaXgoKSAuICJjb250ZW50IGMsICIgLgogICAgICAgICAgICAgICAgICAgICAgICBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudF9wcm9wcyBwICIgLgogICAgICAgICAgICAgICAgICAgICAgICAid2hlcmUgYy50eXBlPSdjYXRhbG9nY2F0ZWdvcnknIGFuZCBwLnByb3BfbmFtZT0ncmVjdXJzZScgYW5kIGMuY29udGVudF9pZD1wLmNvbnRlbnRfaWQiOwoKICAgICAgICAgICAgICAgICR0bXAgPSAkZGItPkdldENvbCgkcXVlcnkpOwogICAgICAgICAgICAgICAgZm9yZWFjaCggJHRtcCBhcyAkb25lICkgCiAgICAgICAgICAgICAgICB7ICAKICAgICAgICAgICAgICAgICAgICAkb2JqID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUlkKCRvbmUsVFJVRSk7CiAgICAgICAgICAgICAgICAgICAgJG9iai0+U2V0UHJvcGVydHlWYWx1ZSgnc29ydF9vcmRlcicsJHBhcmFtc1snY2F0ZWdvcnlfcmVjdXJzZSddKTsKICAgICAgICAgICAgICAgICAgICAkb2JqLT5zYXZlKCk7IAogICAgICAgICAgICAgICAgfQoJCQl9CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ2l0ZW1zX3Blcl9wYWdlJ10pICYmCgkJCSRwYXJhbXNbJ2l0ZW1zX3Blcl9wYWdlJ10gIT0gLTEpCgkJCXsKCQkJLy8gdXBkYXRlIGRpc3BsYXkgcnVsZXMKICAgICAgICAgICAgCgogICAgICAgICAgICAkcXVlcnkgPSAiU0VMRUNUIGMuY29udGVudF9pZCBmcm9tICIgLiAKICAgICAgICAgICAgICAgICAgICBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudCBjLCAiIC4KICAgICAgICAgICAgICAgICAgICBjbXNfZGJfcHJlZml4KCkgLiAiY29udGVudF9wcm9wcyBwICIgLgogICAgICAgICAgICAgICAgICAgICJ3aGVyZSBjLnR5cGU9J2NhdGFsb2djYXRlZ29yeScgYW5kIGNwLnByb3BfbmFtZT0naXRlbXNfcGVyX3BhZ2UnIGFuZCBjLmNvbnRlbnRfaWQ9cC5jb250ZW50X2lkIjsgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICR0bXAgPSAkZGItPkdldENvbCgkcXVlcnkpOwogICAgICAgICAgICAgICAgZm9yZWFjaCggJHRtcCBhcyAkb25lICkgCiAgICAgICAgICAgICAgICB7ICAKICAgICAgICAgICAgICAgICAgICAkb2JqID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUlkKCRvbmUsVFJVRSk7CiAgICAgICAgICAgICAgICAgICAgJG9iai0+U2V0UHJvcGVydHlWYWx1ZSgnc29ydF9vcmRlcicsJHBhcmFtc1snaXRlbXNfcGVyX3BhZ2UnXSk7CiAgICAgICAgICAgICAgICAgICAgJG9iai0+c2F2ZSgpOyAKICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkJCX0KCgoJCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdnbG9iYWxseXVwZGF0ZWQnKTsKICAgICAgICAkdGhpcy0+RG9BY3Rpb24oJ2dsb2JhbG9wcycsICRpZCwgJHBhcmFtcyk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.image.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsKCiRoYW5kbGVycyA9IG9iX2xpc3RfaGFuZGxlcnMoKTsKZm9yICgkY250ID0gMDsgJGNudCA8IHNpemVvZigkaGFuZGxlcnMpOyAkY250KyspIHsgb2JfZW5kX2NsZWFuKCk7IH0KCiRzcGVjID0gaXNzZXQoJF9HRVRbJ2knXSkgPyAkX0dFVFsnaSddIDogJyc7CiRkZWJ1ZyA9IGlzc2V0KCRfR0VUWydkZWJ1ZyddKTsKJGFudGljYWNoZSA9IGlzc2V0KCRfR0VUWydhYyddKTsKJHNwZWMgPSBwcmVnX3JlcGxhY2UoJy8oXC5cLnxcLykvJywgJycsICRzcGVjKTsKJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoKLy8gbm90IGEganBnPwppZiggIXByZWdfbWF0Y2goJy9cLmpwZyQvaScsICRzcGVjKSApCnsKICAkZm4gPSByZXR1cm5NaXNzaW5nKCRjb25maWdbJ3Jvb3RfcGF0aCddLCB0cnVlLCAkZGVidWcpOwogIAogIGlmKCBmaWxlX2V4aXN0cygkZm4pICkKICB7CiAgICBoZWFkZXIoIkV4cGlyZXM6IE1vbiwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UIik7CiAgICBoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIgLiBnbWRhdGUoIkQsIGQgTSBZIEg6aTpzIikgLiAiIEdNVCIpOwogICAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgY2FjaGVoYWNrPSIudGltZSgpKTsKICAgIGhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSIpOwogICAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBwb3N0LWNoZWNrPS0xLCBwcmUtY2hlY2s9LTEiLCBmYWxzZSk7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogaW1hZ2UvanBlZycpOwogICAgJGZpbGVkYXRhID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiAgICBlY2hvICRmaWxlZGF0YTsKICAgIGRpZSgpOwogIH0KfQoKJGZuID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwgY2F0RmlsZXNPcGVyYXRpb25zOjpnZXRBc3NldFBhdGgoJ2knKSwgJHNwZWMpOyAKICAKaWYoJGRlYnVnKSBlcnJvcl9sb2coIkNoZWNraW5nIG9uICIgLiAkZm4pOwokc2l6ZWQgPSBAc3RhdCgkZm4pOwoKJHNwZWMgPSBzdWJzdHIoJHNwZWMsIDAsIHN0cnJwb3MoJHNwZWMsICcuJykpOwokcGFydHMgPSBleHBsb2RlKCdfJywgJHNwZWMpOwokcGFydHMgPSBhcnJheV9yZXZlcnNlKCRwYXJ0cyk7CiAgCiRzaG93TWlzc2luZyA9ICRwYXJ0c1swXSA9PSAnMSc7CiRzaXplID0gJHBhcnRzWzFdOwokaW1nbm8gPSAkcGFydHNbMl07CiR0eXBlID0gJHBhcnRzWzNdOwokbmFtZSA9ICcnOwoKZm9yKCRqID0gY291bnQoJHBhcnRzKSAtIDE7ICRqID4gMzsgJGotLSkKewogICRuYW1lIC49ICRwYXJ0c1skal0gLiAnXyc7Cn0KCiRzcmNTcGVjID0gY21zX2pvaW5fcGF0aCgKICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRGaWxlc09wZXJhdGlvbnM6OmdldEFzc2V0UGF0aCgncycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lIAogICAgICAgICAgICAgICAgICAgICAgICApOwoKJHNyY1NwZWMgLj0gJ3NyY18nIC4gJGltZ25vIC4gJy5qcGcnOwoKCmlmICgkZGVidWcpCnsKICBlcnJvcl9sb2coIkNhdGFsb2dlckltYWdlOiBzcmMgaW1hZ2UgIiAuICRzcmNTcGVjKTsKfQoKJG9yaWcgPSBAc3RhdCgkc3JjU3BlYyk7CgokbmV3SW1hZ2UgPSBmYWxzZTsKCmlmKCRvcmlnID09PSBmYWxzZSkKewogIGlmICgkZGVidWcpIGVycm9yX2xvZygiQ2FuJ3QgZmluZCAiIC4gJHNyY1NwZWMpOwogICRmbiA9IHJldHVybk1pc3NpbmcoJGNvbmZpZ1sncm9vdF9wYXRoJ10sICRzaG93TWlzc2luZyk7CiAgCiAgaWYoIGZpbGVfZXhpc3RzKCRmbikgKQogIHsKICAgIGhlYWRlcigiRXhwaXJlczogTW9uLCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVQiKTsKICAgIGhlYWRlcigiTGFzdC1Nb2RpZmllZDogIiAuIGdtZGF0ZSgiRCwgZCBNIFkgSDppOnMiKSAuICIgR01UIik7CiAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBjYWNoZWhhY2s9Ii50aW1lKCkpOwogICAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlIik7CiAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IHBvc3QtY2hlY2s9LTEsIHByZS1jaGVjaz0tMSIsIGZhbHNlKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnJyk7CiAgICAkZmlsZWRhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAgIGVjaG8gJGZpbGVkYXRhOwogICAgZGllKCk7CiAgfQogIAp9CgppZighJHNpemVkIHx8ICRzaXplZFsnbXRpbWUnXSA8ICRvcmlnWydtdGltZSddKQp7CiAgaWYoJGRlYnVnKSBlcnJvcl9sb2coIm5ld2VyIHRoYW4gZXhpc3RlbnQsIHRyYW5zZm9ybWluZyIpOwogIAogIC8vIHdlIGRvbid0IGhhdmUgYSBjYWNoZWQgdmVyc2lvbiB3ZSBjYW4gdXNlCiAgJGRlc3RTcGVjID0gJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uJHRoaXMtPmdldEFzc2V0UGF0aCgnaScpLicvJy4kc3BlYy4nLmpwZyc7CiAgLy8gc28gd2UgbWFrZSBvbmUKICBpbWFnZVRyYW5zZm9ybSgkc3JjU3BlYywgJGRlc3RTcGVjLCAkc2l6ZSwgJGNvbmZpZyk7CiAgJG5ld0ltYWdlID0gdHJ1ZTsKfQoKLy8kZGVzdCA9ICJMb2NhdGlvbjogIi4kY29uZmlnWyd1cGxvYWRzX3VybCddLgovLyAgJHRoaXMtPmdldEFzc2V0UGF0aCgnaScpLicvJy4kc3BlYy4nLmpwZyc7CiAgCiRmbiA9ICRjb25maWdbJ3VwbG9hZHNfcGF0aCddIC4KICAkdGhpcy0+Z2V0QXNzZXRQYXRoKCdpJykuJy8nLiRzcGVjLicuanBnJzsKCmlmKCRuZXdJbWFnZSB8fCAkYW50aWNhY2hlKQp7CiAgaWYoIGZpbGVfZXhpc3RzKCRmbikgKQogIHsKICAgIGhlYWRlcigiRXhwaXJlczogTW9uLCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVQiKTsKICAgIGhlYWRlcigiTGFzdC1Nb2RpZmllZDogIiAuIGdtZGF0ZSgiRCwgZCBNIFkgSDppOnMiKSAuICIgR01UIik7CiAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBjYWNoZWhhY2s9Ii50aW1lKCkpOwogICAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1zdG9yZSwgbXVzdC1yZXZhbGlkYXRlIik7CiAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IHBvc3QtY2hlY2s9LTEsIHByZS1jaGVjaz0tMSIsIGZhbHNlKTsKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnJyk7CiAgICAkZmlsZWRhdGEgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAgIGVjaG8gJGZpbGVkYXRhOwogICAgZGllKCk7CiAgfQp9Ci8vCi8vaWYgKCRkZWJ1ZykgZXJyb3JfbG9nKCRkZXN0KTsKLy8KLy9oZWFkZXIoJGRlc3QpOwovL2RpZTsKCmlmKCBmaWxlX2V4aXN0cygkc3JjU3BlYykgKQp7CiAgaGVhZGVyKCJFeHBpcmVzOiBNb24sIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVCIpOwogIGhlYWRlcigiTGFzdC1Nb2RpZmllZDogIiAuIGdtZGF0ZSgiRCwgZCBNIFkgSDppOnMiKSAuICIgR01UIik7CiAgaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgY2FjaGVoYWNrPSIudGltZSgpKTsKICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBtdXN0LXJldmFsaWRhdGUiKTsKICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IHBvc3QtY2hlY2s9LTEsIHByZS1jaGVjaz0tMSIsIGZhbHNlKTsKICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogaW1hZ2UvanBlZycpOwogICRmaWxlZGF0YSA9IEBmaWxlX2dldF9jb250ZW50cygkc3JjU3BlYyk7CiAgZWNobyAkZmlsZWRhdGE7CiAgZGllKCk7Cn0KCmZ1bmN0aW9uIHJldHVybk1pc3NpbmcoJHJvb3RVcmwsICRzaG93TWlzc2luZywgJGRlYnVnPWZhbHNlKQp7CiAgLy8gaWYgc28gZGVzaXJlZCwgZG9uJ3QgNDA0LCBidXQgc2VuZCBhbiBpbWFnZQogIGlmICgkZGVidWcpCiAgICBlcnJvcl9sb2coIkNhdGFsb2dlckltYWdlOiBubyBpbWFnZSBhdCAkcm9vdFVybCIpOwogIAogIGlmICghICRzaG93TWlzc2luZykgCiAgICByZXR1cm4gJHJvb3RVcmwgLiAnL21vZHVsZXMvQ2F0YWxvZ2VyL2ltYWdlcy90cmFucy5naWYnOwogIGVsc2UKICAgIHJldHVybiAkcm9vdFVybCAuICcvbW9kdWxlcy9DYXRhbG9nZXIvaW1hZ2VzL25vLWltYWdlLmdpZic7ICAgICAgCn0KCi8qCiAgdG8gYmUgbW92ZWQKICovCmZ1bmN0aW9uIGltYWdlVHJhbnNmb3JtKCRzcmNTcGVjLCAkZGVzdFNwZWMsICRzaXplLCAmJGNvbmZpZywgJGFzcGVjdF9yYXRpbz0nJykKewogICRtb2QgPSBjbXNtcygpLT5HZXRNb2R1bGVJbnN0YW5jZSgnQ2F0YWxvZ2VyJyk7CiAgJGZuID0gY21zX2pvaW5fcGF0aCgKICAgICAgICAgICAgICAgICAgICAgICAgJG1vZC0+R2V0TW9kdWxlUGF0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAnbGliJywKICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dGVybmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgJ0ltYWdlJywKICAgICAgICAgICAgICAgICAgICAgICAgJ1RyYW5zZm9ybS5waHAnCiAgICAgICAgICAgICAgICAgICAgICApOwogIAogIHJlcXVpcmVfb25jZSgkZm4pOwoKICAkaXQgPSBuZXcgSW1hZ2VfVHJhbnNmb3JtOwogICRpbWcgPSAkaXQtPmZhY3RvcnkoJ0dEJyk7CiAgJGltZy0+bG9hZCgkc3JjU3BlYyk7CiAgCiAgaWYgKCRpbWctPmltZ194IDwgJGltZy0+aW1nX3kpCiAgewogICAgJGxvbmdfYXhpcyA9ICRpbWctPmltZ195OwogIH0KICBlbHNlCiAgewogICAgJGxvbmdfYXhpcyA9ICRpbWctPmltZ194OwogIH0KCiAgaWYgKCRsb25nX2F4aXMgPiAkc2l6ZSkKICB7CiAgICAkaW1nLT5zY2FsZUJ5TGVuZ3RoKCRzaXplKTsKICAgICRpbWctPnNhdmUoJGRlc3RTcGVjLCAnanBlZycpOwogIH0KICBlbHNlCiAgewogICAgJGltZy0+c2F2ZSgkZGVzdFNwZWMsICdqcGVnJyk7CiAgfQogIAogICRpbWctPmZyZWUoKTsKfQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.random.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQlpZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwoJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleT0+JHZhbCkKCQkJewoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJGtleSwgJHBhcmFtc1ska2V5XSk7CgkJCX0KIAkJaWYgKCEgaXNzZXQoJHBhcmFtc1sncmVjdXJzZSddKSkKIAkJCXsKIAkJCSRwYXJhbXNbJ3JlY3Vyc2UnXSA9ICdpdGVtc19hbGwnOwogCQkgCX0KCgkJCSRsaXN0ID0gJHRoaXMtPmdldENhdGFsb2dJdGVtc0lETGlzdCgkcGFyYW1zKTsKCiAgICAgICAgJGNvdW50ID0gbWluKGNvdW50KCRsaXN0KSwkcGFyYW1zWydjb3VudCddKTsKICAgICAgICAkdGhpc1VybCA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOwogICAgICAgICR0aGlzVXJsID0gcHJlZ19yZXBsYWNlKCcvKFw/KSooXCYpKnN0YXJ0PVxkKy8nLCcnLCR0aGlzVXJsKTsKICAgICAgICBpZiAoJGNvdW50ID09IDApCiAgICAgICAgCXsKICAgICAgICAJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtcycsYXJyYXkoKSk7CiAgICAgICAgCX0KICAgICAgICBlbHNlCiAgICAgICAgCXsKICAgICAgICAJJGNhdGVnb3J5SXRlbUtleXMgPSBhcnJheV9yYW5kKCRsaXN0LCAkY291bnQpOwoJCQkJCWlmICghaXNfYXJyYXkoJGNhdGVnb3J5SXRlbUtleXMpKQoJCQkJCQl7CgkJCQkJCSRjYXRlZ29yeUl0ZW1LZXlzID0gYXJyYXkoJGNhdGVnb3J5SXRlbUtleXMpOwoJCQkJCQl9CiAgICAgICAgCSRjYXRUbXAgPSBhcnJheSgpOwogICAgICAgIAlmb3JlYWNoKCRjYXRlZ29yeUl0ZW1LZXlzIGFzICR0aGlzS2V5KQogICAgICAgIAkJewoJCQkJCQkkbm9kZSA9ICR0aGlzLT5nZXRDYXRhbG9nSXRlbUJ5SWQoJGxpc3RbJHRoaXNLZXldKTsKICAgICAgICAJCWFycmF5X3B1c2goJGNhdFRtcCwkbm9kZSk7CiAgICAgICAgCQl9CiAgICAgICAgCSR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCRjYXRUbXApOwogICAgICAgIAl9CiAgICAgICAgCiAJCSR0aGlzLT5zbWFydHlCYXNpY3MoKTsKCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHRoaXMtPmdldFRlbXBsYXRlRnJvbUFsaWFzKCRwYXJhbXNbJ3N1Yl90ZW1wbGF0ZSddKSk7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.recent.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQlpZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwoJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleT0+JHZhbCkKCQkJewoJCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJGtleSwgJHBhcmFtc1ska2V5XSk7CgkJCX0KIAkJaWYgKCEgaXNzZXQoJHBhcmFtc1sncmVjdXJzZSddKSkKIAkJCXsKIAkJCSRwYXJhbXNbJ3JlY3Vyc2UnXSA9ICdpdGVtc19hbGwnOwogCQkgCX0KCQkKIAkJbGlzdCgkY3VyUGFnZSwkY2F0ZWdvcnlJdGVtcykgPSAkdGhpcy0+Z2V0Q2F0YWxvZ0l0ZW1zTGlzdCgkcGFyYW1zKTsKCgkJaWYgKCFpc3NldCgkcGFyYW1zWydnbG9iYWxfc29ydCddKSB8fCAkcGFyYW1zWydnbG9iYWxfc29ydCddPT0nZGF0ZScpCgkJCXsKICAgICAgICAJdXNvcnQoJGNhdGVnb3J5SXRlbXMsYXJyYXkoIkNhdGFsb2dlciIsICJjcmVhdGVkIikpOwogICAgICAgIAl9CgkJZWxzZQoJCQl7CgkJICAgIHVzb3J0KCRjYXRlZ29yeUl0ZW1zLGFycmF5KCJDYXRhbG9nZXIiLCAiY2hyb25vIikpOwoJCQl9CgoJCWlmIChpc3NldCgkcGFyYW1zWydnbG9iYWxfc29ydF9kaXInXSkgJiYgJHBhcmFtc1snZ2xvYmFsX3NvcnRfZGlyJ109PSdhc2MnKQoJCQl7CgkJCSRjYXRlZ29yeUl0ZW1zID0gYXJyYXlfcmV2ZXJzZSgkY2F0ZWdvcnlJdGVtcyk7CgkJCX0KCQkJCiAgICAgICAgJGNvdW50ID0gY291bnQoJGNhdGVnb3J5SXRlbXMpOwogICAgICAgICRzdGFydCA9IDA7CiAgICAgICAgJGVuZCA9IG1pbigkY291bnQsJHBhcmFtc1snY291bnQnXSk7CiAgICAgICAgJHRoaXNVcmwgPSAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICAgICAgICAkdGhpc1VybCA9IHByZWdfcmVwbGFjZSgnLyhcPykqKFwmKSpzdGFydD1cZCsvJywnJywkdGhpc1VybCk7CiAgICAgICAgJGNhdGVnb3J5SXRlbXMgPSBhcnJheV9zcGxpY2UoJGNhdGVnb3J5SXRlbXMsICRzdGFydCwgJGVuZCk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtcycsJGNhdGVnb3J5SXRlbXMpOwogCQkKCQkkdGhpcy0+c21hcnR5QmFzaWNzKCk7CgkJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCR0aGlzLT5nZXRUZW1wbGF0ZUZyb21BbGlhcygkcGFyYW1zWydzdWJfdGVtcGxhdGUnXSkpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.reimport.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsKaWYgKCEgJHRoaXMtPkNoZWNrQWNjZXNzKCkpIGV4aXQ7CgkKCQkkdGhpcy0+aW1wb3J0U2FtcGxlVGVtcGxhdGVzKCk7CgkJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ3JlaW1wb3J0ZWQnKTsKCQkkdGhpcy0+RG9BY3Rpb24oJ2RlZmF1bHRhZG1pbicsICRpZCwgJHBhcmFtcyk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.submitattrs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsKaWYoICEkdGhpcy0+Q2hlY2tBY2Nlc3MoKSApIGV4aXQ7CgokY29udGVudG9wcyA9IGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CgokdHlwZXMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAnJywKICAgICAgICAgICAgICAgICAnY2F0YWxvZ2l0ZW0nLAogICAgICAgICAgICAgICAgICdjYXRhbG9nY2F0ZWdvcnknLAogICAgICAgICAgICAgICAgICdjYXRhbG9ncHJpbnRhYmxlJwogICAgICAgICAgICAgICk7Cgpmb3JlYWNoKCRwYXJhbXMgYXMgJHRoaXNQYXJhbUtleSA9PiAkdGhpc1BhcmFtVmFsdWUpCnsKICBpZiggc3Vic3RyKCR0aGlzUGFyYW1LZXksIDAsIDQpID09ICdhdHRyJykgIyBpcyBhdHRyXypfKl8qICAgKEpNKQogIHsKICAgICMgYXQgdGhpcyBwb2ludCAkdGhpc1BhcmFtS2V5IHNob3VsZCBob2xkIHNvbWV0aGluZyBsaWtlICdhdHRyX2F0dHJUeXBlX2F0dHJOdW0nIHdoYXRldmVyIHRoZXkgbWF5IHJlcHJlc2VudC4uLiAoSk0pCiAgICBsaXN0KCRhdHRyLCAkYXR0clR5cGUsICRhdHRyTnVtKSA9IGV4cGxvZGUoJ18nLCAkdGhpc1BhcmFtS2V5KTsKICAgICR0aGlzYWxpYXMgPSAkcGFyYW1zWydhbGlhc18nIC4gJGF0dHJUeXBlIC4gJ18nIC4gJGF0dHJOdW1dOwoKICAgIGlmKCAKICAgICAgICAoc3RybGVuKCR0aGlzUGFyYW1WYWx1ZSkgPiAwKSAKICAgICAgICAmJiAoIWlzc2V0KCRwYXJhbXNbJ2RlbGV0ZV8nIC4gJGF0dHJUeXBlIC4gJ18nIC4gJGF0dHJOdW1dKQogICAgICAgIHx8ICRwYXJhbXNbJ2RlbGV0ZV8nIC4gJGF0dHJUeXBlIC4gJ18nIC4gJGF0dHJOdW1dID09ICcwJykgKQogICAgewogICAgICAvLyBuZXcgYXR0cmlidXRlIG9yIHVwZGF0aW5nIG9sZD8KICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ29sZF8nIC4gJGF0dHJUeXBlIC4gJ18nIC4gJGF0dHJOdW1dKSApCiAgICAgIHsKICAgICAgICAvLyBpdCdzIGFuIG9sZCByZWNvcmQKCiAgICAgICAgLy8gZ2V0IG9sZCB2YWx1ZSB0byB1cGRhdGUgY29udGVudCB0YWJsZQogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgYXR0cmlidXRlLGFsaWFzIEZST00gJyAuIGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfY2F0YWxvZ19hdHRyIHdoZXJlIGlkPT8nOwogICAgICAgICRyID0gJGRiLT5HZXRBcnJheSggJHF1ZXJ5LCBhcnJheSAoJHBhcmFtc1snb2xkXycgLiAkYXR0clR5cGUgLiAnXycgLiAkYXR0ck51bV0pICk7ICAKICAgICAgICAvLyRyID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LCBhcnJheSAoJHBhcmFtc1snb2xkXycgLiAkYXR0clR5cGUgLiAnXycgLiAkYXR0ck51bV0pKTsgIAovLyAgICAgICAgICAgICAgICAgICAKLy8gICAgICAgIGlmKCRyKQovLyAgICAgICAgewovLyAgICAgICAgICAkb2xkdmFsID0gJHJbJ2F0dHJpYnV0ZSddOwovLyAgICAgICAgICAkb2xkYWxpYXMgPSAkclsnYWxpYXMnXTsKLy8gICAgICAgIH0KICAgICAgICBpZigkcikKICAgICAgICB7CiAgICAgICAgICAkb2xkdmFsID0gaXNzZXQoJHJbJ2F0dHJpYnV0ZSddKSA/ICRyWydhdHRyaWJ1dGUnXSA6ICcnOwogICAgICAgICAgJG9sZHZhbCA9IGlzc2V0KCRyWydhbGlhcyddKSA/ICRyWydhbGlhcyddIDogJyc7CiAgICAgICAgfQogICAgICAgIC8vJG9sZHZhbCA9ICRkYi0+R2V0T25lKCRxdWVyeSwgYXJyYXkgKCRwYXJhbXNbJ29sZF8nIC4gJGF0dHJUeXBlIC4gJ18nIC4gJGF0dHJOdW1dKSk7CgoKICAgICAgICAvLyB3cml0ZSBuZXcgdmFsdWUKICAgICAgICAkcXVlcnkgPSAgJ1VQREFURSAnIAogICAgICAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQogICAgICAgICAgICAgICAgICAuICdtb2R1bGVfY2F0YWxvZ19hdHRyIFNFVCBhdHRyaWJ1dGU9PywgYWxpYXM9Pywgb3JkZXJfYnk9PywgZGVmYXVsdHZhbD0/LCBsZW5ndGg9Pywgc2VsZWN0X3ZhbHVlcz0/LCBmaWVsZF90eXBlPT8gd2hlcmUgaWQ9Pyc7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5CiAgICAgICAgKAogICAgICAgICAgICR0aGlzUGFyYW1WYWx1ZSwKICAgICAgICAgICAkcGFyYW1zWydhbGlhc18nICAgICAgICAgICAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSwKICAgICAgICAgICAkcGFyYW1zWydvcmRlcmJ5XycgICAgICAgICAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSwKICAgICAgICAgICAkcGFyYW1zWydkZWZhdWx0XycgICAgICAgICAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSwKICAgICAgICAgICAkcGFyYW1zWydsZW5fJyAgICAgICAgICAgICAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSwKICAgICAgICAgICAkcGFyYW1zWydzZWxlY3RfdmFsdWVzXycgICAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSwKICAgICAgICAgICAkcGFyYW1zWydmaWVsZF90eXBlXycgICAgICAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSwKICAgICAgICAgICAkcGFyYW1zWydvbGRfJyAgICAgICAgICAgICAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXQogICAgICAgICkpOwoKICAgICAgICBpZiAoICRkYnJlc3VsdCA9PT0gZmFsc2UgKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiAkdGhpcy0+ZGlzcGxheUVycm9yKCAkZGItPkVycm9yTXNnKCkgKTsKICAgICAgICB9CgogICAgICAgIC8vIHVwZGF0ZSBjb250ZW50IHRhYmxlCiAgICAgICAgaWYoJG9sZHZhbCAhPSAkdGhpc1BhcmFtVmFsdWUpCiAgICAgICAgewogICAgICAgICAgJHF1ZXJ5ID0gICdTRUxFQ1QgYy5jb250ZW50X2lkIGZyb20gJyAKICAgICAgICAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKSAKICAgICAgICAgICAgICAgICAgICAuICdjb250ZW50IGMsICcgCiAgICAgICAgICAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkKICAgICAgICAgICAgICAgICAgICAuICdjb250ZW50X3Byb3BzIHAgd2hlcmUgYy50eXBlPT8gYW5kIHAucHJvcF9uYW1lPT8gYW5kIGMuY29udGVudF9pZD1wLmNvbnRlbnRfaWQnOwogICAgICAgICAgCiAgICAgICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxdWVyeSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGVzWyRhdHRyVHlwZV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2xkdmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgJGNsaXN0ID0gYXJyYXkgKCk7CgogICAgICAgICAgd2hpbGUoICRkYnJlc3VsdCAhPT0gZmFsc2UgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApCiAgICAgICAgICB7CiAgICAgICAgICAgICRjbGlzdFtdID0gJHJvd1snY29udGVudF9pZCddOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICggY291bnQoJGNsaXN0KSA+IDAgKSAjIGlmIG91ciBsaXN0IGlzbid0IGVtcHR5CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvcmVhY2goICRjbGlzdCBhcyAkb25lICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICRvYmogPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tSWQoJG9uZSwgVFJVRSk7CiAgICAgICAgICAgICAgJG9iai0+VXBkYXRlUHJvcGVydHlOYW1lKCRvbGRhbGlhcywgJHRoaXNhbGlhcyk7CiAgICAgICAgICAgICAgJG9iai0+c2F2ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgIyBpdCdzIGEgbmV3IGF0dHJpYnV0ZQogICAgICB7CiAgICAgICAgJG5ld19pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9jYXRhbG9nX2F0dHJfc2VxJyk7CiAgICAgICAgCiAgICAgICAgJHF1ZXJ5ID0gICdJTlNFUlQgSU5UTyAnIAogICAgICAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQogICAgICAgICAgICAgICAgICAuICdtb2R1bGVfY2F0YWxvZ19hdHRyIChpZCx0eXBlX2lkLGF0dHJpYnV0ZSxhbGlhcyxkZWZhdWx0dmFsLGxlbmd0aCxvcmRlcl9ieSxzZWxlY3RfdmFsdWVzLGZpZWxkX3R5cGUpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/LD8pJzsKICAgICAgICAKICAgICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheQogICAgICAgICgKICAgICAgICAgICAkbmV3X2lkLAogICAgICAgICAgICRhdHRyVHlwZSwKICAgICAgICAgICAkdGhpc1BhcmFtVmFsdWUsCiAgICAgICAgICAgJHBhcmFtc1snYWxpYXNfJyAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSwKICAgICAgICAgICAkcGFyYW1zWydkZWZhdWx0XycgLiAkYXR0clR5cGUgLiAnXycgLiAkYXR0ck51bV0sCiAgICAgICAgICAgJHBhcmFtc1snbGVuXycgLiAkYXR0clR5cGUgLiAnXycgLiAkYXR0ck51bV0sCiAgICAgICAgICAgJHBhcmFtc1snb3JkZXJieV8nIC4gJGF0dHJUeXBlIC4gJ18nIC4gJGF0dHJOdW1dLAogICAgICAgICAgICRwYXJhbXNbJ3NlbGVjdF92YWx1ZXNfJyAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSwKICAgICAgICAgICAkcGFyYW1zWydmaWVsZF90eXBlXycgLiAkYXR0clR5cGUgLiAnXycgLiAkYXR0ck51bV0KICAgICAgICApKTsKCiAgICAgICAgaWYgKCAkZGJyZXN1bHQgPT09IGZhbHNlICkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gJHRoaXMtPmRpc3BsYXlFcnJvcigkZGItPkVycm9yTXNnKCkpOwogICAgICAgIH0KCiAgICAgICAgLy8gdXBkYXRlIGNvbnRlbnQgdGFibGUgZm9yIGV4aXN0ZW50IHJlY29yZHMhCiAgICAgICAgaWYoICFlbXB0eSgkcGFyYW1zWydkZWZhdWx0XycgLiAkYXR0clR5cGUgLiAnXycgLiAkYXR0ck51bV0pICkKICAgICAgICB7CiAgICAgICAgICAkcXVlcnkgPSAnU0VMRUNUIGNvbnRlbnRfaWQnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ2NvbnRlbnQgd2hlcmUgdHlwZT0/JzsKICAgICAgICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5ICgkdHlwZXNbJGF0dHJUeXBlXSkpOwogICAgICAgICAgJGNsaXN0ID0gYXJyYXkgKCk7CgogICAgICAgICAgd2hpbGUoICRkYnJlc3VsdCAhPT0gZmFsc2UgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApCiAgICAgICAgICB7CiAgICAgICAgICAgICRjbGlzdFtdID0gJHJvd1snY29udGVudF9pZCddOwogICAgICAgICAgfQoKICAgICAgICAgIGlmICggY291bnQoJGNsaXN0KSA+IDAgKQogICAgICAgICAgewogICAgICAgICAgICBmb3JlYWNoKCAkY2xpc3QgYXMgJG9uZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAkb2JqID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUlkKCRvbmUsIFRSVUUpOwogICAgICAgICAgICAgICRvYmotPkFkZFByb3BlcnR5KCR0aGlzYWxpYXMpOwogICAgICAgICAgICAgICRvYmotPnNhdmUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZWxzZWlmKCBpc3NldCgkcGFyYW1zWydkZWxldGVfJyAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSkKICAgICAgICAmJiAkcGFyYW1zWydkZWxldGVfJyAuICRhdHRyVHlwZSAuICdfJyAuICRhdHRyTnVtXSA9PSAnMScgKQogICAgLy8gdGhpcyBpcyBhIGRlbGV0ZSBvcGVyYXRpb24gKEpNKQogICAgewogICAgICAvLyBkZWxldGUgZnJvbSBDb250ZW50IFRhYmxlIGFzIHdlbGwhCiAgICAgICRxdWVyeSA9ICdTRUxFQ1QgYXR0cmlidXRlIEZST00gJyAuIGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfY2F0YWxvZ19hdHRyIHdoZXJlIGlkPT8nOwogICAgICAkZGlkID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LCBhcnJheSAoJHBhcmFtc1snb2xkXycgLiAkYXR0clR5cGUgLiAnXycgLiAkYXR0ck51bV0pKTsKCiAgICAgICRxdWVyeSA9ICdTRUxFQ1QgY29udGVudF9pZCBmcm9tICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnY29udGVudCB3aGVyZSB0eXBlPT8nOwogICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSAoJHR5cGVzWyRhdHRyVHlwZV0pKTsKICAgICAgJGNsaXN0ID0gYXJyYXkgKCk7CgogICAgICB3aGlsZSggJGRicmVzdWx0ICE9PSBmYWxzZSAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewogICAgICAgICRjbGlzdFtdID0gJHJvd1snY29udGVudF9pZCddOwogICAgICB9CgogICAgICBpZiAoIGNvdW50KCRjbGlzdCkgPiAwICkKICAgICAgewogICAgICAgIGZvcmVhY2goICRjbGlzdCBhcyAkb25lICkKICAgICAgICB7CiAgICAgICAgICAkb2JqID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUlkKCRvbmUsIFRSVUUpOwogICAgICAgICAgJG9iai0+RGVsZXRlUHJvcGVydHkoJHRoaXNQYXJhbVZhbHVlKTsKICAgICAgICAgICRvYmotPnNhdmUoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIGhhbmRsZSBkZWxldGVzIGV4cGxpY2l0bHkgbm93LgogICAgICAkcXVlcnkgPSAnREVMRVRFIEZST00gJyAuIGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfY2F0YWxvZ19hdHRyIHdoZXJlIGlkPT8nOwogICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSAoJHBhcmFtc1snb2xkXycgLiAkYXR0clR5cGUgLiAnXycgLiAkYXR0ck51bV0pKTsKICAgIH0KICB9Cn0KCiRnQ21zID0gY21zbXMoKTsKLy8kZ0Ntcy0+Y2xlYXJfY2FjaGVkX2ZpbGVzKCk7ICAgLS0+IGFwcGFyZW50bHkgYW4gaWxsZWdhbCBvcCB0b28uLi4uIChKTSkgVW5sZXNzIGl0IG9ubHkgY2xlYXJzIG93biBjYWNoZWQgZmlsZXMuLi4KJHBhcmFtc1snbW9kdWxlX21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdhdHRyc3VwZGF0ZWQnKTsKJHRoaXMtPkRvQWN0aW9uKCdhZG1pbmF0dHJzJywgJGlkLCAkcGFyYW1zKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.submitprefs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsKaWYgKCEgJHRoaXMtPkNoZWNrQWNjZXNzKCkpIGV4aXQ7CgogICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX2NvdW50JywgaXNzZXQoJHBhcmFtc1snaXRlbV9pbWFnZV9jb3VudCddKT8kcGFyYW1zWydpdGVtX2ltYWdlX2NvdW50J106Mik7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2l0ZW1fZmlsZV9jb3VudCcsIGlzc2V0KCRwYXJhbXNbJ2l0ZW1fZmlsZV9jb3VudCddKT8kcGFyYW1zWydpdGVtX2ZpbGVfY291bnQnXToyKTsKICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaXRlbV9maWxlX3R5cGVzJywgaXNzZXQoJHBhcmFtc1snaXRlbV9maWxlX3R5cGVzJ10pPyRwYXJhbXNbJ2l0ZW1fZmlsZV90eXBlcyddOidwZGYsc3dmLGZsdixkb2Msb2R0LG9kcyx4bHMnKTsKICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY2F0ZWdvcnlfaW1hZ2VfY291bnQnLCBpc3NldCgkcGFyYW1zWydjYXRlZ29yeV9pbWFnZV9jb3VudCddKT8kcGFyYW1zWydjYXRlZ29yeV9pbWFnZV9jb3VudCddOjEpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX3NpemVfaGVybycsIGlzc2V0KCRwYXJhbXNbJ2l0ZW1faW1hZ2Vfc2l6ZV9oZXJvJ10pPyRwYXJhbXNbJ2l0ZW1faW1hZ2Vfc2l6ZV9oZXJvJ106JzQwMCcpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX3NpemVfdGh1bWJuYWlsJywgaXNzZXQoJHBhcmFtc1snaXRlbV9pbWFnZV9zaXplX3RodW1ibmFpbCddKT8kcGFyYW1zWydpdGVtX2ltYWdlX3NpemVfdGh1bWJuYWlsJ106JzcwJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NhdGVnb3J5X2ltYWdlX3NpemVfaGVybycsIGlzc2V0KCRwYXJhbXNbJ2NhdGVnb3J5X2ltYWdlX3NpemVfaGVybyddKT8kcGFyYW1zWydjYXRlZ29yeV9pbWFnZV9zaXplX2hlcm8nXTonNDAwJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NhdGVnb3J5X2ltYWdlX3NpemVfdGh1bWJuYWlsJywgaXNzZXQoJHBhcmFtc1snY2F0ZWdvcnlfaW1hZ2Vfc2l6ZV90aHVtYm5haWwnXSk/JHBhcmFtc1snY2F0ZWdvcnlfaW1hZ2Vfc2l6ZV90aHVtYm5haWwnXTonOTAnKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaXRlbV9pbWFnZV9zaXplX2NhdGVnb3J5JywgaXNzZXQoJHBhcmFtc1snaXRlbV9pbWFnZV9zaXplX2NhdGVnb3J5J10pPyRwYXJhbXNbJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRlZ29yeSddOic3MCcpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX3NpemVfY2F0YWxvZycsIGlzc2V0KCRwYXJhbXNbJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRhbG9nJ10pPyRwYXJhbXNbJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRhbG9nJ106JzEwMCcpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmb3JjZV9hc3BlY3RfcmF0aW8nLCBpc3NldCgkcGFyYW1zWydmb3JjZV9hc3BlY3RfcmF0aW8nXSk/JHBhcmFtc1snZm9yY2VfYXNwZWN0X3JhdGlvJ106MCk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2ltYWdlX2FzcGVjdF9yYXRpbycsIGlzc2V0KCRwYXJhbXNbJ2ltYWdlX2FzcGVjdF9yYXRpbyddKT8kcGFyYW1zWydpbWFnZV9hc3BlY3RfcmF0aW8nXTonNDozJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NhdGVnb3J5X3JlY3Vyc2UnLCBpc3NldCgkcGFyYW1zWydjYXRlZ29yeV9yZWN1cnNlJ10pPyRwYXJhbXNbJ2NhdGVnb3J5X3JlY3Vyc2UnXTonbWl4ZWRfb25lJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NhdGVnb3J5X3NvcnRfb3JkZXInLCBpc3NldCgkcGFyYW1zWydpdGVtX3NvcnRfb3JkZXInXSk/JHBhcmFtc1snaXRlbV9zb3J0X29yZGVyJ106J25hdHVyYWwnKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY2F0ZWdvcnlfaXRlbXNfcGVyX3BhZ2UnLCBpc3NldCgkcGFyYW1zWydpdGVtc19wZXJfcGFnZSddKT8kcGFyYW1zWydpdGVtc19wZXJfcGFnZSddOicxMCcpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzaG93X2V4dGFudCcsIGlzc2V0KCRwYXJhbXNbJ3Nob3dfZXh0YW50J10pPyRwYXJhbXNbJ3Nob3dfZXh0YW50J106JzEnKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZmx1c2hfY2F0cycsIGlzc2V0KCRwYXJhbXNbJ2ZsdXNoX2NhdHMnXSk/JHBhcmFtc1snZmx1c2hfY2F0cyddOicwJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2ltYWdlX3VwbG9hZF9wYXRoJyxpc3NldCgkcGFyYW1zWydpbWFnZV91cGxvYWRfcGF0aCddKT8kcGFyYW1zWydpbWFnZV91cGxvYWRfcGF0aCddOiR0aGlzLT5nZXRBc3NldFBhdGgoJ3MnLHRydWUpKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZmlsZV91cGxvYWRfcGF0aCcsaXNzZXQoJHBhcmFtc1snZmlsZV91cGxvYWRfcGF0aCddKT8kcGFyYW1zWydmaWxlX3VwbG9hZF9wYXRoJ106JHRoaXMtPmdldEFzc2V0UGF0aCgnZicsdHJ1ZSkpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdpbWFnZV9wcm9jX3BhdGgnLGlzc2V0KCRwYXJhbXNbJ2ltYWdlX3Byb2NfcGF0aCddKT8kcGFyYW1zWydpbWFnZV9wcm9jX3BhdGgnXTokdGhpcy0+Z2V0QXNzZXRQYXRoKCdpJyx0cnVlKSk7CgkJCgkKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzaG93X21pc3NpbmcnLAppc3NldCgkcGFyYW1zWydzaG93X21pc3NpbmcnXSk/JHBhcmFtc1snc2hvd19taXNzaW5nJ106MCk7CgoKCQkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygncHJlZnN1cGRhdGVkJyk7CiAgICAgICAgJHRoaXMtPkRvQWN0aW9uKCdhZG1pbnByZWZzJywgJGlkLCAkcGFyYW1zKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.variable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQlpZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwoJCWlmICghaXNzZXQoJHBhcmFtc1snbmFtZSddKSkKCQkJewoJCQllY2hvICc8IS0tIHBsZWFzZSBzcGVjaWZ5IGEgQ2F0YWxvZ2VyIHZhcmlhYmxlIG5hbWUgdG8gcmV0cmlldmUgLS0+JzsKCQkJcmV0dXJuOwoJCQl9CgoJCQkkZm91bmQgPSBmYWxzZTsKCQkJJGdDbXMgPSBjbXNtcygpOwoJCQkkY29udGVudG9wcyA9ICRnQ21zLT5HZXRDb250ZW50T3BlcmF0aW9ucygpOwoJCQkkY29udGVudF9vYmogPSAkY29udGVudG9wcy0+Z2V0Q29udGVudE9iamVjdCgpOwkJCQoJCWlmICgkY29udGVudF9vYmopCgkJCXsKCQkJaWYgKCRjb250ZW50X29iai0+VHlwZSgpICE9ICdjYXRhbG9naXRlbScgJiYgJGNvbnRlbnRfb2JqLT5UeXBlKCkgIT0gJ2NhdGFsb2djYXRlZ29yeScgJiYgJGNvbnRlbnRfb2JqLT5UeXBlKCkgIT0gJ2NhdGFsb2dwcmludGFibGUnKQoJCQkJewoJCQkJcmV0dXJuOwoJCQkJfQoJCQkkYXR0cnMgPSAkY29udGVudF9vYmotPmdldEF0dHJzKCk7CgkJCSR0ZXN0YXR0ciA9IHN0cnRvbG93ZXIoJHBhcmFtc1snbmFtZSddKTsKCQkJCgkJCWZvcmVhY2ggKCRhdHRycyBhcyAkdGhpc0F0dHIpCgkJCQl7CgkJCQkkY29tcGF0dHIgPSBzdHJ0b2xvd2VyKCR0aGlzQXR0ci0+YXR0cik7CgkJCQlpZiAoJGNvbXBhdHRyID09ICR0ZXN0YXR0cikKCQkJCQl7CgkJCQkJJHRtcCA9ICRjb250ZW50X29iai0+R2V0UHJvcGVydHlWYWx1ZSgkdGhpc0F0dHItPmF0dHIpOwoJCQkJCSRmb3VuZCA9IHRydWU7CgkJCQkJfQoJCQkJZWxzZSBpZiAoJHRoaXNBdHRyLT5hbGlhcyA9PSAkdGVzdGF0dHIpCgkJCQkJewoJCQkJCSR0bXAgPSAkY29udGVudF9vYmotPkdldFByb3BlcnR5VmFsdWUoJHRoaXNBdHRyLT5hbGlhcyk7CgkJCQkJJGZvdW5kID0gdHJ1ZTsKCQkJCQl9CgkJCQllbHNlCgkJCQkJewoJCQkJCSRzYWZlYXR0ciA9IHN0cnRvbG93ZXIocHJlZ19yZXBsYWNlKCcvXFcvJywnJywgJHBhcmFtc1snbmFtZSddKSk7CgkJCQkJaWYgKCRjb21wYXR0ciA9PSAgJHNhZmVhdHRyIHx8ICR0aGlzQXR0ci0+YWxpYXMgPT0gJHNhZmVhdHRyKQoJCQkJCQl7CgkJCQkJCSR0bXAgPSAkY29udGVudF9vYmotPkdldFByb3BlcnR5VmFsdWUoJHNhZmVhdHRyKTsKCQkJCQkJJGZvdW5kID0gdHJ1ZTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoKCQlpZiAoISAkZm91bmQpCgkJCXsKCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ2RlZmF1bHQnXSkpCgkJCQl7CgkJCQkkdG1wID0gJHBhcmFtc1snZGVmYXVsdCddOwoJCQkJfQoJCQllbHNlCgkJCQl7CgkJCQkkdG1wID0gJyc7CgkJCQl9CgkJCX0KCQllY2hvICR0bXA7Cj8+]]></data>
	</file>
	<file>
	  <filename>/admin_default_new.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICggIWlzX29iamVjdCggY21zbXMoKSApICkgZXhpdDsNCg0KJHRoaXMtPmluaXRBZG1pbk5hdigkaWQsICRwYXJhbXMsICRyZXR1cm5pZCk7DQoNCiMgbm93IGZvciB0aGUgdGVtcGxhdGVzDQoNCiMgSXRlbXMgDQoNCiRJdGVtUGFnZUFycmF5ID0gYXJyYXkoKTsNCiANCiRxdWVyeSA9ICJTRUxFQ1QgaWQsIHRpdGxlIEZST00gIg0KICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgIC4gIm1vZHVsZV9jYXRhbG9nX3RlbXBsYXRlIFdIRVJFIHR5cGVfaWQgPSAxIE9SREVSIGJ5IHRpdGxlIjsNCiAgICAgIA0KJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQoNCndoaWxlICgkZGJyZXN1bHQgIT09IGZhbHNlICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpDQp7DQogICRvbmVyb3cgPSBuZXcgc3RkQ2xhc3MoKTsNCg0KICAkb25lcm93LT5pZCA9ICRyb3dbJ2lkJ107DQogICRvbmVyb3ctPnR5cGUgPSAkcm93Wyd0eXBlJ107DQogICRvbmVyb3ctPnRpdGxlID0gJHRoaXMtPkNyZWF0ZUxpbmsoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZGl0dGVtcGwnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm93Wyd0aXRsZSddLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3RlbXBsYXRlX2lkJyA9PiAkcm93WydpZCddLCAndHlwZV9pZCcgPT4gMSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogIA0KICAkSWNvbiA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2VkaXQnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtaWNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KDQogICRvbmVyb3ctPmVkaXRsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXR0ZW1wbCcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEljb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgndGVtcGxhdGVfaWQnID0+ICRyb3dbJ2lkJ10sICd0eXBlX2lkJyA9PiAxKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICRJY29uID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdkZWxldGUnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtaWNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgDQogICRvbmVyb3ctPmRlbGV0ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZXRlbXBsJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEljb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd0ZW1wbGF0ZV9pZCcgPT4gJHJvd1snaWQnXSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnYXJleW91c3VyZScsJ1RlbXBsYXRlJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgYXJyYXlfcHVzaCgkSXRlbVBhZ2VBcnJheSwgJG9uZXJvdyk7DQoNCn0NCg0KDQojIENhdGVnb3JpZXMNCg0KJENhdGVnb3J5UGFnZUFycmF5ID0gYXJyYXkoKTsNCiANCiRxdWVyeSA9ICJTRUxFQ1QgaWQsIHRpdGxlIEZST00gIg0KICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgIC4gIm1vZHVsZV9jYXRhbG9nX3RlbXBsYXRlIFdIRVJFIHR5cGVfaWQgPSAyIE9SREVSIGJ5IHRpdGxlIjsNCiAgICAgIA0KJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQoNCndoaWxlICgkZGJyZXN1bHQgIT09IGZhbHNlICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpDQp7DQogICRvbmVyb3cgPSBuZXcgc3RkQ2xhc3MoKTsNCg0KICAkb25lcm93LT5pZCA9ICRyb3dbJ2lkJ107DQogICRvbmVyb3ctPnR5cGUgPSAkcm93Wyd0eXBlJ107DQogICRvbmVyb3ctPnRpdGxlID0gJHRoaXMtPkNyZWF0ZUxpbmsoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZGl0dGVtcGwnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm93Wyd0aXRsZSddLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3RlbXBsYXRlX2lkJyA9PiAkcm93WydpZCddLCAndHlwZV9pZCcgPT4gMikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogIA0KICAkSWNvbiA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2VkaXQnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtaWNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KDQogICRvbmVyb3ctPmVkaXRsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXR0ZW1wbCcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEljb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgndGVtcGxhdGVfaWQnID0+ICRyb3dbJ2lkJ10sICd0eXBlX2lkJyA9PiAyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICRJY29uID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdkZWxldGUnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtaWNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgDQogICRvbmVyb3ctPmRlbGV0ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZXRlbXBsJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEljb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd0ZW1wbGF0ZV9pZCc9PiRyb3dbJ2lkJ10pLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnLCdUZW1wbGF0ZScpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIGFycmF5X3B1c2goJENhdGVnb3J5UGFnZUFycmF5LCAkb25lcm93KTsNCg0KfQ0KDQojIFByaW50YWJsZSBDYXRhbG9nDQoNCiRQcmludGFibGVDYXRhbG9nQXJyYXkgPSBhcnJheSgpOw0KIA0KJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgdGl0bGUgRlJPTSAiDQogICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgLiAibW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgV0hFUkUgdHlwZV9pZCA9IDMgT1JERVIgYnkgdGl0bGUiOw0KICAgICAgDQokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCg0Kd2hpbGUgKCRkYnJlc3VsdCAhPT0gZmFsc2UgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkNCnsNCiAgJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOw0KDQogICRvbmVyb3ctPmlkID0gJHJvd1snaWQnXTsNCiAgJG9uZXJvdy0+dHlwZSA9ICRyb3dbJ3R5cGUnXTsNCiAgJG9uZXJvdy0+dGl0bGUgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXR0ZW1wbCcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3dbJ3RpdGxlJ10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgndGVtcGxhdGVfaWQnID0+ICRyb3dbJ2lkJ10sICd0eXBlX2lkJyA9PiAzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgDQogICRJY29uID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnZWRpdCcpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW1pY29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQoNCiAgJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWRpdHRlbXBsJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSWNvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd0ZW1wbGF0ZV9pZCcgPT4gJHJvd1snaWQnXSwgJ3R5cGVfaWQnID0+IDMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgJEljb24gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW1pY29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICANCiAgJG9uZXJvdy0+ZGVsZXRlbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZXRlbXBsJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEljb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd0ZW1wbGF0ZV9pZCc9PiRyb3dbJ2lkJ10pLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnLCdUZW1wbGF0ZScpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIGFycmF5X3B1c2goJFByaW50YWJsZUNhdGFsb2dBcnJheSwgJG9uZXJvdyk7DQoNCn0NCg0KDQojIEl0ZW0gQ29tcGFyaXNvbg0KDQokSXRlbUNvbXBhcmlzb25BcnJheSA9IGFycmF5KCk7DQogDQokcXVlcnkgPSAiU0VMRUNUIGlkLCB0aXRsZSBGUk9NICINCiAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAuICJtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZSBXSEVSRSB0eXBlX2lkID0gNCBPUkRFUiBieSB0aXRsZSI7DQogICAgICANCiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KDQp3aGlsZSAoJGRicmVzdWx0ICE9PSBmYWxzZSAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQ0Kew0KICAkb25lcm93ID0gbmV3IHN0ZENsYXNzKCk7DQoNCiAgJG9uZXJvdy0+aWQgPSAkcm93WydpZCddOw0KICAkb25lcm93LT50eXBlID0gJHJvd1sndHlwZSddOw0KICAkb25lcm93LT50aXRsZSA9ICR0aGlzLT5DcmVhdGVMaW5rKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXR0ZW1wbCcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3dbJ3RpdGxlJ10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgndGVtcGxhdGVfaWQnID0+ICRyb3dbJ2lkJ10sICd0eXBlX2lkJyA9PiA0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgDQogICRJY29uID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnZWRpdCcpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW1pY29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQoNCiAgJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWRpdHRlbXBsJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSWNvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd0ZW1wbGF0ZV9pZCcgPT4gJHJvd1snaWQnXSwgJ3R5cGVfaWQnID0+IDQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgJEljb24gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW1pY29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICANCiAgJG9uZXJvdy0+ZGVsZXRlbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRldGVtcGwnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSWNvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3RlbXBsYXRlX2lkJz0+JHJvd1snaWQnXSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnYXJleW91c3VyZScsJ1RlbXBsYXRlJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgYXJyYXlfcHVzaCgkSXRlbUNvbXBhcmlzb25BcnJheSwgJG9uZXJvdyk7DQoNCn0NCg0KIyBGZWF0dXJlIExpc3QNCg0KJEZlYXR1cmVMaXN0QXJyYXkgPSBhcnJheSgpOw0KIA0KJHF1ZXJ5ID0gIlNFTEVDVCBpZCwgdGl0bGUgRlJPTSAiDQogICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgLiAibW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgV0hFUkUgdHlwZV9pZCA9IDUgT1JERVIgYnkgdGl0bGUiOw0KICAgICAgDQokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCg0Kd2hpbGUgKCRkYnJlc3VsdCAhPT0gZmFsc2UgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkNCnsNCiAgJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOw0KDQogICRvbmVyb3ctPmlkID0gJHJvd1snaWQnXTsNCiAgJG9uZXJvdy0+dHlwZSA9ICRyb3dbJ3R5cGUnXTsNCiAgJG9uZXJvdy0+dGl0bGUgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXR0ZW1wbCcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3dbJ3RpdGxlJ10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgndGVtcGxhdGVfaWQnID0+ICRyb3dbJ2lkJ10sICd0eXBlX2lkJyA9PiA1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgDQogICRJY29uID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnZWRpdCcpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW1pY29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQoNCiAgJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZGl0dGVtcGwnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJY29uLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3RlbXBsYXRlX2lkJyA9PiAkcm93WydpZCddLCAndHlwZV9pZCcgPT4gNSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAkSWNvbiA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnZGVsZXRlJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbWljb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgIA0KICAkb25lcm93LT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRldGVtcGwnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSWNvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3RlbXBsYXRlX2lkJz0+JHJvd1snaWQnXSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnYXJleW91c3VyZScsJ1RlbXBsYXRlJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgYXJyYXlfcHVzaCgkRmVhdHVyZUxpc3RBcnJheSwgJG9uZXJvdyk7DQoNCn0NCg0KJGN1cnJlbnRfdGFiID0gaXNzZXQoJHBhcmFtc1sndGFiJ10pID8gJHBhcmFtc1sndGFiJ10gOiAnaXRlbV9wYWdlX3RlbXBsYXRlcyc7DQoNCi8qKg0KKiBTbWFydHkgc3R1ZmYNCiovDQoNCiR0YWJfaGVhZGVycyA9ICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKQ0KICAgICAgICAgICAgICAgLiAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpdGVtX3BhZ2VfdGVtcGxhdGVzJywgICAgICAgICAkdGhpcy0+TGFuZygndGl0bGVfaXRlbV9wYWdlX3RlbXBsYXRlc190YWInKSwgJGN1cnJlbnRfdGFiID09ICdpdGVtX3BhZ2VfdGVtcGxhdGVzJykNCiAgICAgICAgICAgICAgIC4gJHRoaXMtPlNldFRhYkhlYWRlcignY2F0ZWdvcnlfcGFnZV90ZW1wbGF0ZXMnLCAgICAgJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X3BhZ2VfdGVtcGxhdGVzX3RhYicpLCAkY3VycmVudF90YWIgPT0gJ2NhdGVnb3J5X3BhZ2VfdGVtcGxhdGVzJykNCiAgICAgICAgICAgICAgIC4gJHRoaXMtPlNldFRhYkhlYWRlcigncHJpbnRhYmxlX2NhdGFsb2dfdGVtcGxhdGVzJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3ByaW50YWJsZV9jYXRhbG9nX3RlbXBsYXRlc190YWInKSwgJGN1cnJlbnRfdGFiID09ICdwcmludGFibGVfY2F0YWxvZ190ZW1wbGF0ZXMnKQ0KICAgICAgICAgICAgICAgLiAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpdGVtX2NvbXBhcmlzb25fdGVtcGxhdGVzJywgICAkdGhpcy0+TGFuZygndGl0bGVfaXRlbV9jb21wYXJpc29uX3RlbXBsYXRlc190YWInKSwgJGN1cnJlbnRfdGFiID09ICdpdGVtX2NvbXBhcmlzb25fdGVtcGxhdGVzJykNCiAgICAgICAgICAgICAgIC4gJHRoaXMtPlNldFRhYkhlYWRlcignZmVhdHVyZV9saXN0X3RlbXBsYXRlcycsICAgICAgJHRoaXMtPkxhbmcoJ3RpdGxlX2ZlYXR1cmVfbGlzdF90ZW1wbGF0ZXNfdGFiJyksICRjdXJyZW50X3RhYiA9PSAnZmVhdHVyZV9saXN0X3RlbXBsYXRlcycpDQogICAgICAgICAgICAgICAuICR0aGlzLT5FbmRUYWJIZWFkZXJzKCkNCiAgICAgICAgICAgICAgIC4gJHRoaXMtPlN0YXJ0VGFiQ29udGVudCgpOw0KDQokc21hcnR5LT5hc3NpZ24oJ3RhYl9oZWFkZXJzJywgJHRhYl9oZWFkZXJzKTsNCiAgICAgICAgICAgICAgICAgICAgICANCiRzbWFydHktPmFzc2lnbignZW5kX3RhYicsICR0aGlzLT5FbmRUYWIoKSk7DQoNCiRzbWFydHktPmFzc2lnbigndGFiX2Zvb3RlcnMnLCAkdGhpcy0+RW5kVGFiQ29udGVudCgpKTsNCg0KJHNtYXJ0eS0+YXNzaWduKCdzdGFydF9pdGVtX3BhZ2VfdGVtcGxhdGVzX3RhYicsICR0aGlzLT5TdGFydFRhYignaXRlbV9wYWdlX3RlbXBsYXRlcycpKTsNCiRzbWFydHktPmFzc2lnbignc3RhcnRfY2F0ZWdvcnlfcGFnZV90ZW1wbGF0ZXNfdGFiJywgJHRoaXMtPlN0YXJ0VGFiKCdjYXRlZ29yeV9wYWdlX3RlbXBsYXRlcycpKTsNCiRzbWFydHktPmFzc2lnbignc3RhcnRfcHJpbnRhYmxlX2NhdGFsb2dfdGVtcGxhdGVzX3RhYicsICR0aGlzLT5TdGFydFRhYigncHJpbnRhYmxlX2NhdGFsb2dfdGVtcGxhdGVzJykpOw0KJHNtYXJ0eS0+YXNzaWduKCdzdGFydF9pdGVtX2NvbXBhcmlzb25fdGVtcGxhdGVzX3RhYicsICR0aGlzLT5TdGFydFRhYignaXRlbV9jb21wYXJpc29uX3RlbXBsYXRlcycpKTsNCiRzbWFydHktPmFzc2lnbignc3RhcnRfZmVhdHVyZV9saXN0X3RlbXBsYXRlc190YWInLCAkdGhpcy0+U3RhcnRUYWIoJ2ZlYXR1cmVfbGlzdF90ZW1wbGF0ZXMnKSk7DQoNCiRzbWFydHktPmFzc2lnbignUGFnZUl0ZW1zJywgJEl0ZW1QYWdlQXJyYXkpOw0KJHNtYXJ0eS0+YXNzaWduKCdQYWdlQ2F0ZWdvcmllcycsICRDYXRlZ29yeVBhZ2VBcnJheSk7DQokc21hcnR5LT5hc3NpZ24oJ1ByaW50YWJsZUNhdGFsb2dzJywgJFByaW50YWJsZUNhdGFsb2dBcnJheSk7DQokc21hcnR5LT5hc3NpZ24oJ0l0ZW1Db21wYXJpc29ucycsICRJdGVtQ29tcGFyaXNvbkFycmF5KTsNCiRzbWFydHktPmFzc2lnbignRmVhdHVyZUxpc3RzJywgJEZlYXR1cmVMaXN0QXJyYXkpOw0KDQovLyBDb250ZW50IGRlZmluZXMgYW5kIEZvcm0gc3R1ZmYgZm9yIHRoZSBhZG1pbg0KJHNtYXJ0eS0+YXNzaWduKCdzdGFydF9mb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlX2FkbWluX3ByZWZzJywgJHJldHVybmlkKSk7DQokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2FsbG93X2FkZCcsJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnYWxsb3dfYWRkJywgMSwNCiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhbGxvd19hZGQnLCcwJykpLiAkdGhpcy0+TGFuZygndGl0bGVfYWxsb3dfYWRkX2hlbHAnKSk7DQokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOw0KDQovLyB0cmFuc2xhdGVkIHN0cmluZ3MNCiRzbWFydHktPmFzc2lnbigndGl0bGVfYWxsb3dfYWRkJywkdGhpcy0+TGFuZygndGl0bGVfYWxsb3dfYWRkJykpOw0KJHNtYXJ0eS0+YXNzaWduKCd3ZWxjb21lX3RleHQnLCR0aGlzLT5MYW5nKCd3ZWxjb21lX3RleHQnKSk7IyMjDQokc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLGlzc2V0KCRwYXJhbXNbJ21lc3NhZ2UnXSk/JHBhcmFtc1snbWVzc2FnZSddOicnKTsNCiRzbWFydHktPmFzc2lnbignc2VjdGlvbicsJHRoaXMtPkxhbmcoJ3N1YnRlbXBsYXRlcycpKTsNCg0KJGljb24gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnYWRkdGVtcGxhdGUnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtaWNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCg0KJGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZGl0dGVtcGwnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpY29uLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICk7DQokbGluayAuPSAnICc7DQoNCiRsaW5rIC49ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbCcsICRyZXR1cm5pZCwNCiAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2FkZHRlbXBsYXRlJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJyk7DQoNCiRsaW5rIC49ICcmbmJzcDsmbmJzcDsnOw0KDQokaWNvbiA9ICc8aW1nIHNyYz0iJw0KICAgICAgICAuICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10NCiAgICAgICAgLiAnL21vZHVsZXMvQ2F0YWxvZ2VyL2ltYWdlcy9yZWxvYWQuZ2lmIiBjbGFzcz0ic3lzdGVtaWNvbiIgYWx0PSInDQogICAgICAgIC4gJHRoaXMtPkxhbmcoJ3JlaW1wb3J0dGVtcGxhdGVzJykNCiAgICAgICAgLiAnIiAgdGl0bGU9IicNCiAgICAgICAgLiAkdGhpcy0+TGFuZygncmVpbXBvcnR0ZW1wbGF0ZXMnKQ0KICAgICAgICAuICciIC8+JzsNCg0KJGxpbmsgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVpbXBvcnQnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGljb24sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KDQokbGluayAuPSAnICc7DQoNCiRsaW5rIC49ICR0aGlzLT5DcmVhdGVMaW5rKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlaW1wb3J0JywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdyZWltcG9ydHRlbXBsYXRlcycpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3M9InBhZ2VvcHRpb25zIicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCiRzbWFydHktPmFzc2lnbignYWRkbGluaycsICRsaW5rKTsNCg0KDQokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3RlbXBsYXRlJywkdGhpcy0+TGFuZygndGl0bGVfdGVtcGxhdGUnKSk7DQokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3RlbXBsYXRlX3R5cGUnLCR0aGlzLT5MYW5nKCd0aXRsZV90ZW1wbGF0ZV90eXBlJykpOw0KJHNtYXJ0eS0+YXNzaWduKCdub3RlbXBsYXRlcycsJHRoaXMtPkxhbmcoJ25vdGVtcGxhdGVzJykpOw0KDQovLyBUT0RPIDAgLW8gSm9Nb3JnIC1jIGJ1Z2ZpeCB0YXNrOiBkaWZmZXJlbnRpYXRlIGFkZGxpbmsgZm9yIGVhY2ggdHlwZSBvZiBzdWItdGVtcGxhdGUNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5wYW5lbC50cGwnKTsNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/admin_default_old.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICggIWlzX29iamVjdCggY21zbXMoKSApICkgZXhpdDsNCg0KLy9Mb2FkIHRoZSBzaG93cw0KJGVudHJ5YXJyYXkgPSBhcnJheSgpOw0KDQokcXVlcnkgPSAiU0VMRUNUIHQuaWQsIHQudGl0bGUsIHR0Lm5hbWUgYXMgdHlwZSBGUk9NICINCiAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAuICJtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZSB0LCAiDQogICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgLiAibW9kdWxlX2NhdGFsb2dfdGVtcGxhdGVfdHlwZSB0dCBXSEVSRSB0LnR5cGVfaWQgPSB0dC50eXBlX2lkIE9SREVSIGJ5IHQudHlwZV9pZCwgdGl0bGUiOw0KICAgICAgDQokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCg0KJHJvd2NsYXNzID0gJ3JvdzEnOw0KDQp3aGlsZSAoJGRicmVzdWx0ICE9PSBmYWxzZSAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQ0Kew0KICAkb25lcm93ID0gbmV3IHN0ZENsYXNzKCk7DQoNCiAgJG9uZXJvdy0+aWQgPSAkcm93WydpZCddOw0KICAkb25lcm93LT50eXBlID0gJHJvd1sndHlwZSddOw0KICAkb25lcm93LT50aXRsZSA9ICR0aGlzLT5DcmVhdGVMaW5rKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWRpdHRlbXBsJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvd1sndGl0bGUnXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd0ZW1wbGF0ZV9pZCc9PiRyb3dbJ2lkJ10pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAkb25lcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsNCiAgDQogICRJY29uID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnZWRpdCcpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW1pY29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQoNCiAgJG9uZXJvdy0+ZWRpdGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWRpdHRlbXBsJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSWNvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd0ZW1wbGF0ZV9pZCc9PiRyb3dbJ2lkJ10pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgJEljb24gPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW1pY29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICANCiAgJG9uZXJvdy0+ZGVsZXRlbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRldGVtcGwnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSWNvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ3RlbXBsYXRlX2lkJz0+JHJvd1snaWQnXSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnYXJleW91c3VyZScsJ1RlbXBsYXRlJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQoNCiAgYXJyYXlfcHVzaCgkZW50cnlhcnJheSwgJG9uZXJvdyk7DQoNCiAgKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3M9InJvdzIiIDogJHJvd2NsYXNzPSJyb3cxIik7ICMgdG9nZ2xlIGNzcyBjbGFzc2VzDQp9DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCAkZW50cnlhcnJheSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRlbnRyeWFycmF5KSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhdGVnb3J5JywgJHRoaXMtPkxhbmcoJ3RlbXBsYXRlbGlzdCcpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGVtcGxhdGUnLCAkdGhpcy0+TGFuZygndGl0bGVfdGVtcGxhdGUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX3RlbXBsYXRlX3R5cGUnLCAkdGhpcy0+TGFuZygndGl0bGVfdGVtcGxhdGVfdHlwZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignbm90ZW1wbGF0ZXMnLCAkdGhpcy0+TGFuZygnbm90ZW1wbGF0ZXMnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCBpc3NldCgkcGFyYW1zWydtZXNzYWdlJ10pPyRwYXJhbXNbJ21lc3NhZ2UnXTonJyk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NlY3Rpb24nLCAkdGhpcy0+TGFuZygnc3VidGVtcGxhdGVzJykpOw0KDQokaWNvbiA9ICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdhZGR0ZW1wbGF0ZScpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW1pY29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KDQokbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXR0ZW1wbCcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGljb24sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiRsaW5rIC49ICcgJzsNCg0KJGxpbmsgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHRlbXBsJywgJHJldHVybmlkLA0KICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnYWRkdGVtcGxhdGUnKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKTsNCg0KJGxpbmsgLj0gJyZuYnNwOyZuYnNwOyc7DQoNCiRpY29uID0gJzxpbWcgc3JjPSInDQogICAgICAgIC4gJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXQ0KICAgICAgICAuICcvbW9kdWxlcy9DYXRhbG9nZXIvaW1hZ2VzL3JlbG9hZC5naWYiIGNsYXNzPSJzeXN0ZW1pY29uIiBhbHQ9IicNCiAgICAgICAgLiAkdGhpcy0+TGFuZygncmVpbXBvcnR0ZW1wbGF0ZXMnKQ0KICAgICAgICAuICciICB0aXRsZT0iJw0KICAgICAgICAuICR0aGlzLT5MYW5nKCdyZWltcG9ydHRlbXBsYXRlcycpDQogICAgICAgIC4gJyIgLz4nOw0KDQokbGluayAuPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWltcG9ydCcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWNvbiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJycNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQoNCiRsaW5rIC49ICcgJzsNCg0KJGxpbmsgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVpbXBvcnQnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ3JlaW1wb3J0dGVtcGxhdGVzJyksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGFzcz0icGFnZW9wdGlvbnMiJw0KICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywgJGxpbmspOw0KDQojRGlzcGxheSB0ZW1wbGF0ZQ0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCd0ZW1wbGF0ZWxpc3QudHBsJyk7DQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/admin_edittempl_new.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICggIWlzX29iamVjdCggY21zbXMoKSApICkgZXhpdDsNCmlmICggISR0aGlzLT5DaGVja0FjY2VzcygpICkgZXhpdDsNCg0KaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSB8fCBpc3NldCgkcGFyYW1zWydhcHBseSddKSkNCnsNCiAgaWYgKCEgZW1wdHkoJHBhcmFtc1sndGVtcGxhdGVfaWQnXSkpDQogIHsNCiAgICAvLyB1cGRhdGluZyBhIHRlbXBsYXRlDQogICAgJHF1ZXJ5ID0gJ1VQREFURSAnDQogICAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgICAuICdtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZSBzZXQgdGl0bGU9PywgdGVtcGxhdGU9PywgdHlwZV9pZD0/IFdIRVJFIGlkPT8nOw0KICAgIA0KICAgICRxQXJyID0gYXJyYXkoJHBhcmFtc1sndGl0bGUnXSwNCiAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ3RlbXBsJ10sDQogICAgICAgICAgICAgICAgICAkcGFyYW1zWyd0eXBlX2lkJ10sIA0KICAgICAgICAgICAgICAgICAgJHBhcmFtc1sndGVtcGxhdGVfaWQnXSk7DQogICAgICAgICAgICAgDQogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgJHFBcnIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAkdGVtcGxhdGVfaWQgPSAkcGFyYW1zWyd0ZW1wbGF0ZV9pZCddOw0KICB9DQogIGVsc2UNCiAgew0KICAgIC8vIGNyZWF0aW5nIGEgdGVtcGxhdGUNCiAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJw0KICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAgICAgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgKGlkLCB0aXRsZSwgdHlwZV9pZCwgdGVtcGxhdGUpIFZBTFVFUyAoPyw/LD8sPyknOw0KICAgICAgICAgICAgIA0KICAgICR0ZW1wbGF0ZV9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZV9zZXEnKTsNCiAgICANCiAgICAkcUFyciA9IGFycmF5KCR0ZW1wbGF0ZV9pZCwNCiAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ3RpdGxlJ10sDQogICAgICAgICAgICAgICAgICAkcGFyYW1zWyd0eXBlX2lkJ10sDQogICAgICAgICAgICAgICAgICAkcGFyYW1zWyd0ZW1wbCddKTsNCiAgICANCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkcUFycik7DQogIH0NCg0KICAjIHRoaXMgRE9FUyBjbGVhciBDYXRhbG9nZXIgY2FjaGVkIGZpbGVzICg/Pz8/PykNCiAgJHRoaXMtPmNsZWFyX2NhY2hlKCk7DQogIA0KICAvLyBmb3JjZSBhIGNhY2hlIGNsZWFyPyAjIG5vdGU6IGZyb20gdGhpcyBwb2ludCBvbiwgdGhpbmdzIHNlZW0gdG8gYmUgZHVwbGljYXRlZCAoSk0pDQogICR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnY2F0YWxvZ18nIC4gJHRlbXBsYXRlX2lkKTsNCiAgLy8gYW5kIHJlY3JlYXRlDQogICR0aGlzLT5TZXRUZW1wbGF0ZSgnY2F0YWxvZ18nIC4gJHRlbXBsYXRlX2lkLCAkcGFyYW1zWyd0ZW1wbCddKTsNCg0KICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygndGVtcGxhdGV1cGRhdGVkJyk7DQoNCiAgaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSkNCiAgew0KICAgICR0aGlzLT5Eb0FjdGlvbignZGVmYXVsdGFkbWluJywgJGlkLCAkcGFyYW1zKTsNCiAgICByZXR1cm47DQogIH0NCn0NCg0KJHR5cGVpZHMgPSBhcnJheSgpOw0KJHR5cGVpZHMgPSBjYXRUZW1wbGF0ZU9wZXJhdGlvbnM6OkdldENhdGFsb2dlclRlbXBsYXRlVHlwZXMoKTsNCiNlY2hvICc8LS0tLS0tPic7DQojcHJpbnRfcigkdHlwZWlkcyk7DQojZGllKCk7DQoNCi8qIG9sZCBtZXRob2QgSk0NCiRxdWVyeSA9ICdTRUxFQ1QgdHlwZV9pZCwgbmFtZSBGUk9NICcgLg0KY21zX2RiX3ByZWZpeCgpLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGVfdHlwZSc7DQokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCndoaWxlICgkZGJyZXN1bHQgIT09IGZhbHNlICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpDQp7DQogICR0eXBlaWRzWyRyb3dbJ25hbWUnXV0gPSAkcm93Wyd0eXBlX2lkJ107DQp9DQoqLw0KaWYgKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10pKQ0Kew0KICAvLyBlZGl0aW5nIGEgdGVtcGxhdGUNCiAgDQogICRxdWVyeSA9ICdTRUxFQ1QgdGl0bGUsIHRlbXBsYXRlLCB0eXBlX2lkIEZST00gJyANCiAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgV0hFUkUgaWQ9Pyc7DQogIA0KICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10pKTsNCiAgDQogICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7DQogICR0ZW1wbGF0ZWlkID0gJHBhcmFtc1sndGVtcGxhdGVfaWQnXTsNCiAgJHRpdGxlPSRyb3dbJ3RpdGxlJ107DQogICR0ZW1wbGF0ZT0kcm93Wyd0ZW1wbGF0ZSddOw0KICAkdHlwZV9pZD0kcm93Wyd0eXBlX2lkJ107DQogICR0aGlzLT5zbWFydHktPmFzc2lnbignb3AnLCAkdGhpcy0+TGFuZygnZWRpdHRlbXBsYXRlJykpOw0KfQ0KZWxzZQ0Kew0KICAvLyBhZGRpbmcgYSB0ZW1wbGF0ZQ0KICAkdGVtcGxhdGVpZCA9ICcnOw0KICAkdGl0bGU9Jyc7DQogICR0ZW1wbGF0ZT0nJzsNCiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdvcCcsICR0aGlzLT5MYW5nKCdhZGR0ZW1wbGF0ZScpKTsNCn0NCiAgICAgICAgDQokcXVlcnkgPSAiU0VMRUNUIGF0dHJpYnV0ZSwgYWxpYXMsIHR5cGVfaWQgRlJPTSAiDQogICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgLiAibW9kdWxlX2NhdGFsb2dfYXR0ciI7DQogICAgICAgICANCiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgICAgICANCiRhdHRycyA9ICc8aDM+Jy4kdGhpcy0+TGFuZygndGl0bGVfaXRlbV90ZW1wbGF0ZV92YXJzJykNCiAgICAgICAgIC4gJzwvaDM+eyR0aXRsZX0sIHskbm90ZXN9LCAnOw0KICAgICAgICAgDQokY2F0dHJzID0gJzxoMz4nDQogICAgICAgICAgLiAkdGhpcy0+TGFuZygndGl0bGVfY2F0X3RlbXBsYXRlX3ZhcnMnKQ0KICAgICAgICAgIC4gJzwvaDM+eyR0aXRsZX0sIHskbm90ZXN9LCB7JHByZXZ9LCB7JHByZXZ1cmx9LCB7JG5hdnN0cn0sIHskbmV4dH0sIHskbmV4dHVybH0sIHskaXRlbXN9LCAnOw0KICAgICAgICAgIA0KJHBjYXR0cnMgPSAnPGgzPicNCiAgICAgICAgICAgLiAkdGhpcy0+TGFuZygndGl0bGVfY2F0YWxvZ190ZW1wbGF0ZV92YXJzJykNCiAgICAgICAgICAgLiAnPC9oMz57JGl0ZW1zfSwgeyRhdHRybGlzdH0sIHskcm9vdF91cmx9LCB7JGltYWdlX3Jvb3R9LCAnOw0KICAgICAgICAgICANCiRjb21wYXR0cnMgPSAnPGgzPicNCiAgICAgICAgICAgICAuICR0aGlzLT5MYW5nKCd0aXRsZV9jb21wYXJlX3RlbXBsYXRlX3ZhcnMnKQ0KICAgICAgICAgICAgIC4gJzwvaDM+eyRpdGVtc30sIHskYXR0cmxpc3R9LCB7JHJvb3RfdXJsfSwgeyRpbWFnZV9yb290fSc7DQogICAgICAgICAgICAgDQokZmVhdHRycyA9ICc8aDM+Jw0KICAgICAgICAgICAuICR0aGlzLT5MYW5nKCd0aXRsZV9mZWF0dXJlX3RlbXBsYXRlX3ZhcnMnKQ0KICAgICAgICAgICAuICc8L2gzPnskaXRlbXN9LCB7JHJvb3RfdXJsfSwgeyRpbWFnZV9yb290fSc7DQoNCndoaWxlICgkZGJyZXN1bHQgIT09IGZhbHNlICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpDQp7DQogICRzYWZlYXR0ciA9IHN0cnRvbG93ZXIocHJlZ19yZXBsYWNlKCcvXFcvJywnJywkcm93WydhdHRyaWJ1dGUnXSkpOw0KICANCiAgaWYgKCRyb3dbJ3R5cGVfaWQnXSA9PSBDVEVNUExBVEVfSVRFTSkNCiAgew0KICAgICRhdHRycyAuPSAneyQnLiRzYWZlYXR0ci4nfSwgJzsNCiAgICBpZiAoJHJvd1snYWxpYXMnXSAhPSAnJykNCiAgICB7DQogICAgICAkYXR0cnMgLj0gJ3skJy4kcm93WydhbGlhcyddLid9LCAnOw0KICAgIH0NCiAgfQ0KICBlbHNlIGlmICgkcm93Wyd0eXBlX2lkJ10gPT0gQ1RFTVBMQVRFX0NBVEVHT1JZKQ0KICB7DQogICAgJGNhdHRycyAuPSAneyQnLiRzYWZlYXR0ci4nfSwgJzsNCiAgICANCiAgICBpZiAoJHJvd1snYWxpYXMnXSAhPSAnJykNCiAgICB7DQogICAgICAkY2F0dHJzIC49ICd7JCcuJHJvd1snYWxpYXMnXS4nfSwgJzsNCiAgICB9DQogIH0NCiAgZWxzZSBpZiAoJHJvd1sndHlwZV9pZCddID09IENURU1QTEFURV9DQVRBTE9HKQ0KICB7DQogICAgJHBjYXR0cnMgLj0gJ3skJy4kc2FmZWF0dHIuJ30sICc7DQogICAgDQogICAgaWYgKCRyb3dbJ2FsaWFzJ10gIT0gJycpDQogICAgew0KICAgICAgJHBjYXR0cnMgLj0gJ3skJy4kcm93WydhbGlhcyddLid9LCAnOw0KICAgIH0NCiAgfQ0KfQ0KDQokaW1hZ2VfY291bnQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaXRlbV9pbWFnZV9jb3VudCcsICcxJyk7DQoNCmZvciAoJGk9MTskaTw9JGltYWdlX2NvdW50OyRpKyspDQp7DQogICRhdHRycyAuPSAneyRpbWFnZV8nLiRpLidfdXJsfSwgeyRpbWFnZV90aHVtYl8nLiRpOw0KICAkYXR0cnMgLj0gJ191cmx9LCB7JHNyY19pbWFnZV8nLiRpLidfdXJsfSwgJzsNCn0NCg0KJGF0dHJzIC49ICd7JGltYWdlX3VybF9hcnJheX0sICc7DQokYXR0cnMgLj0gJ3skc3JjX2ltYWdlX3VybF9hcnJheX0sICc7DQokYXR0cnMgLj0gJ3skaW1hZ2VfdGh1bWJfdXJsX2FycmF5fSc7DQokZmlsZV9jb3VudCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ZpbGVfY291bnQnLCAwKTsNCg0KZm9yICgkaT0xOyRpPD0kZmlsZV9jb3VudDskaSsrKQ0Kew0KICAkYXR0cnMgLj0gJ3skZmlsZV9jb3VudH0sIHskZmlsZV8nLiRpLidfbmFtZX0sIHskZmlsZV8nLiRpLidfdXJsfSwgeyRmaWxlXycuJGk7DQogICRhdHRycyAuPSAnX2V4dH0sICc7DQp9DQoNCiRhdHRycyAuPSAneyRmaWxlX3VybF9hcnJheX0sIHskZmlsZV9uYW1lX2FycmF5fSwgJzsNCiRhdHRycyAuPSAneyRmaWxlX2V4dF9hcnJheX0sIHskcm9vdF91cmx9LCB7JGltYWdlX3Jvb3R9JzsNCiRhdHRycyA9IHJ0cmltKCRhdHRycywnLCAnKTsNCg0KJGltYWdlX2NvdW50ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NhdGVnb3J5X2ltYWdlX2NvdW50JywgJzEnKTsNCg0KZm9yICgkaT0xOyRpPD0kaW1hZ2VfY291bnQ7JGkrKykNCnsNCiAgJGNhdHRycyAuPSAneyRpbWFnZV8nLiRpLidfdXJsfSwgeyRpbWFnZV90aHVtYl8nLiRpOw0KICAkY2F0dHJzIC49ICdfdXJsfSwgeyRzcmNfaW1hZ2VfJy4kaS4nX3VybH0sICc7DQp9DQoNCiRjYXR0cnMgLj0gJ3skaW1hZ2VfdXJsX2FycmF5fSwgJzsNCiRjYXR0cnMgLj0gJ3skc3JjX2ltYWdlX3VybF9hcnJheX0sICc7DQokY2F0dHJzIC49ICd7JGltYWdlX3RodW1iX3VybF9hcnJheX0sIHskcm9vdF91cmx9LCB7JGltYWdlX3Jvb3R9JzsNCiRjYXR0cnMgPSBydHJpbSgkY2F0dHJzLCcsICcpOw0KJGNhdHRycyAuPSAnPGgzPiRpdGVtcyBhcnJheSBjb250ZW50czo8L2gzPic7DQokY2F0dHJzIC49ICckaXRlbXNbXS50aXRsZSwgJGl0ZW1zW10ubGluaywgJGl0ZW1zW10uaW1hZ2UsICRpdGVtc1tdLmNhdCwgJGl0ZW1zW10uPGk+YXR0cmlidXRlX25hbWU8L2k+LCAkaXRlbXNbXS48aT5hdHRyaWJ1dGVfYWxpYXM8L2k+JzsNCiRwY2F0dHJzIC49ICc8aDM+JGl0ZW1zIGFycmF5IGNvbnRlbnRzOjwvaDM+JzsNCiRwY2F0dHJzIC49ICckaXRlbXNbXS50aXRsZSwgJGl0ZW1zW10ubGluaywgJGl0ZW1zW10uaW1hZ2UsICRpdGVtc1tdLmNhdCwgJGl0ZW1zW10uPGk+YXR0cmlidXRlX25hbWU8L2k+LCAkaXRlbXNbXS48aT5hdHRyaWJ1dGVfYWxpYXM8L2k+JzsNCiRwY2F0dHJzIC49ICc8aDM+JGF0dHJsaXN0IGFycmF5IGNvbnRlbnRzOjwvaDM+JzsNCiRwY2F0dHJzIC49ICckYXR0cmxpc3RbXS0+YXR0ciwgJGF0dHJsaXN0W10tPnNhZmUnOw0KJGNvbXBhdHRycyAuPSAnPGgzPiRpdGVtcyBhcnJheSBjb250ZW50czo8L2gzPic7DQokY29tcGF0dHJzIC49ICckaXRlbXNbXS50aXRsZSwgJGl0ZW1zW10ubGluaywgJGl0ZW1zW10uaW1hZ2UsICRpdGVtc1tdLjxpPmF0dHJpYnV0ZV9uYW1lPC9pPiwgJGl0ZW1zW10uPGk+YXR0cmlidXRlX2FsaWFzPC9pPic7DQokY29tcGF0dHJzIC49ICc8aDM+JGF0dHJsaXN0IGFycmF5IGNvbnRlbnRzOjwvaDM+JzsNCiRjb21wYXR0cnMgLj0gJyRhdHRybGlzdFtdLT5hdHRyLCAkYXR0cmxpc3RbXS0+c2FmZSc7DQokZmVhdHRycyAuPSAnPGgzPiRpdGVtcyBhcnJheSBjb250ZW50czo8L2gzPic7DQokZmVhdHRycyAuPSAnJGl0ZW1zW10udGl0bGUsICRpdGVtc1tdLmxpbmssICRpdGVtc1tdLmltYWdlLCAkaXRlbXNbXS5jYXQsICRpdGVtc1tdLjxpPmF0dHJpYnV0ZV9uYW1lPC9pPiwgJGl0ZW1zW10uPGk+YXR0cmlidXRlX2FsaWFzPC9pPic7DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQovKioNCiogU21hcnR5IHN0dWZmDQoqLw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi8vIEdpdmUgdGhlIGZvcm0gaWQgdG8gc21hcnR5DQokc21hcnR5LT5hc3NpZ24oJ2Zvcm1pZCcsICRpZCk7DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzdWJtaXRwcmVmcycsICRyZXR1cm5pZCkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAnU3VibWl0JykpOw0KDQokdGFiX2hlYWRlcnMgPSAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCkNCiAgICAgICAgICAgICAgIC4gJHRoaXMtPlNldFRhYkhlYWRlcignaXRlbV9wYWdlX3RlbXBsYXRlcycsICAgICAgICAgJHRoaXMtPkxhbmcoJ2l0ZW1fcGFnZV90ZW1wbGF0ZXNfdGFiJykpDQogICAgICAgICAgICAgICAuICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2NhdGVnb3J5X3BhZ2VfdGVtcGxhdGVzJywgICAgICR0aGlzLT5MYW5nKCdjYXRlZ29yeV9wYWdlX3RlbXBsYXRlc190YWInKSkNCiAgICAgICAgICAgICAgIC4gJHRoaXMtPlNldFRhYkhlYWRlcignaXRlbV9wYWdlX3RlbXBsYXRlcycsICAgICAgICAgJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5X2ltYWdlX3RhYicpKQ0KICAgICAgICAgICAgICAgLiAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpdGVtX3BhZ2VfdGVtcGxhdGVzJywgICAgICAgICAkdGhpcy0+TGFuZygndGl0bGVfcHJpbnRhYmxlX3RhYicpKQ0KICAgICAgICAgICAgICAgLiAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpdGVtX3BhZ2VfdGVtcGxhdGVzJywgICAgICAgICAkdGhpcy0+TGFuZygndGl0bGVfaW1hZ2VfdGFiJykpDQogICAgICAgICAgICAgICAuICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2l0ZW1fcGFnZV90ZW1wbGF0ZXMnLCAgICAgICAgICR0aGlzLT5MYW5nKCd0aXRsZV9wYXRoX3RhYicpKQ0KICAgICAgICAgICAgICAgLiAkdGhpcy0+RW5kVGFiSGVhZGVycygpDQogICAgICAgICAgICAgICAuICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsNCg0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJfaGVhZGVycycsICR0YWJfaGVhZGVycyk7DQogICAgICAgICAgICAgICAgICAgICAgDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZF90YWInLCAkdGhpcy0+RW5kVGFiKCkpOw0KDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYl9mb290ZXJzJywgJHRoaXMtPkVuZFRhYkNvbnRlbnQoKSk7DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfaXRlbV9pbWFnZV90YWInLCAkdGhpcy0+U3RhcnRUYWIoJ2l0ZW1pbWFnZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfY2F0ZWdvcnlfaW1hZ2VfdGFiJywgJHRoaXMtPlN0YXJ0VGFiKCdjYXRlZ29yeWltYWdlJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9wcmludGFibGVfdGFiJywgJHRoaXMtPlN0YXJ0VGFiKCdwcmludGFibGUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2ZpbGVfdGFiJywgJHRoaXMtPlN0YXJ0VGFiKCdmaWxlJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9wYXRoX3RhYicsICR0aGlzLT5TdGFydFRhYigncGF0aCcpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfaW1hZ2VfdGFiJywgJHRoaXMtPlN0YXJ0VGFiKCdpbWFnZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfaXRlbV9pbWFnZV9jb3VudCcsICR0aGlzLT5MYW5nKCd0aXRsZV9pdGVtX2ltYWdlX2NvdW50JykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pdGVtX2ZpbGVfY291bnQnLCAkdGhpcy0+TGFuZygndGl0bGVfaXRlbV9maWxlX2NvdW50JykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9pdGVtX2ZpbGVfdHlwZXMnLCAkdGhpcy0+TGFuZygndGl0bGVfaXRlbV9maWxlX3R5cGVzJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9mbHVzaF9jYXRzJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2ZsdXNoX2NhdHMnKSk7DQoNCiAgICAgIA0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2VkaXR0ZW1wbCcsICRyZXR1cm5pZCkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ3RlbXBsYXRlX2lkJywgJHRlbXBsYXRlaWQpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGl0bGUnLCR0aGlzLT5MYW5nKCd0aXRsZV90aXRsZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGVtcGxhdGUnLCR0aGlzLT5MYW5nKCd0aXRsZV90ZW1wbGF0ZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGVtcGxhdGVfdHlwZScsJHRoaXMtPkxhbmcoJ3RpdGxlX3RlbXBsYXRlX3R5cGUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2F2YWlsX2F0dHJzJywkdGhpcy0+TGFuZygndGl0bGVfYXZhaWxfYXR0cnMnKSk7DQoNCmlmIChpc3NldCgkdHlwZV9pZCkpDQp7DQogIGlmICgkdHlwZV9pZCA9PSBDVEVNUExBVEVfSVRFTSkNCiAgew0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2F2YWlsX2F0dHJzJywkYXR0cnMpOw0KICB9DQogIGVsc2UgaWYgKCR0eXBlX2lkID09IENURU1QTEFURV9DQVRFR09SWSkNCiAgew0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignYXZhaWxfYXR0cnMnLCRjYXR0cnMpOyAgICANCiAgfQ0KICBlbHNlIGlmICgkdHlwZV9pZCA9PSBDVEVNUExBVEVfQ0FUQUxPRykNCiAgew0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignYXZhaWxfYXR0cnMnLCRwY2F0dHJzKTsgICAgDQogIH0NCiAgZWxzZSBpZiAoJHR5cGVfaWQgPT0gQ1RFTVBMQVRFX0NPTVBBUklTT04pDQogIHsNCiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdmFpbF9hdHRycycsJGNvbXBhdHRycyk7ICAgIA0KICB9DQogIGVsc2UgaWYgKCR0eXBlX2lkID09IENURU1QTEFURV9GRUFUVVJFKQ0KICB7DQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdmFpbF9hdHRycycsJGZlYXR0cnMpOyAgICANCiAgfQ0KfQ0KZWxzZQ0Kew0KICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2F2YWlsX2F0dHJzJywgJGF0dHJzIC4gJywgJyAuICRjYXR0cnMgLiAnLCAnIC4gJGZlYXR0cnMpOw0KfQ0KDQovLyAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2F2YWlsX2ltYXR0cnMnLCR0aGlzLT5MYW5nKCd0aXRsZV9hdmFpbF9pbWF0dHJzJykpOw0KLy8gICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdmFpbF9pbWF0dHJzJywkaW1hdHRycyk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RlbXBsYXRlX3R5cGUnLCR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ3R5cGVfaWQnLCAkdHlwZWlkcywgLTEsIGlzc2V0KCR0eXBlX2lkKT8kdHlwZV9pZDonJykpOw0KDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCRwYXJhbXNbJ21lc3NhZ2UnXSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RpdGxlJywkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3RpdGxlJywgJHRpdGxlLCAyMCwgMjU1KSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RlbXBsYXRlJywkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsICRpZCwgJHRlbXBsYXRlLCAndGVtcGwnKSk7DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FwcGx5JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2FwcGx5JywgbGFuZygnYXBwbHknKSkpOw0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlZGl0dGVtcGxhdGUudHBsJyk7DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/admin_edittempl_old.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICggIWlzX29iamVjdCggY21zbXMoKSApICkgZXhpdDsNCg0KJHR5cGVfaWQgPSAkcGFyYW1zWyd0eXBlX2lkJ107DQoNCmlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgfHwgaXNzZXQoJHBhcmFtc1snYXBwbHknXSkpDQp7DQogIGlmICggIWVtcHR5KCRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10pICkNCiAgew0KICAgIC8vIHVwZGF0aW5nIGEgdGVtcGxhdGUNCiAgICBpZiAoICFjYXRUZW1wbGF0ZU9wZXJhdGlvbnM6OlNhdmVUZW1wbGF0ZUNoYW5nZXMoJHBhcmFtcykgKQ0KICAgIHsNCiAgICAgICRwYXJhbXNbJ2VyciddID0gJ0VSUk9SIFNBVklORyBDSEFOR0VTJzsgLy8gVE9ETyB0YXNrOiBhZGQgYSBsYW5nIGVudHJ5DQogICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAkdGVtcGxhdGVfaWQgPSAkcGFyYW1zWyd0ZW1wbGF0ZV9pZCddOw0KICB9DQogIGVsc2UNCiAgew0KICAgIC8vIGNyZWF0aW5nIGEgdGVtcGxhdGUNCiAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJw0KICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAgICAgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgKGlkLCB0aXRsZSwgdHlwZV9pZCwgdGVtcGxhdGUpIFZBTFVFUyAoPyw/LD8sPyknOw0KICAgICAgICAgICAgIA0KICAgICR0ZW1wbGF0ZV9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZV9zZXEnKTsNCiAgICANCiAgICAkcUFyciA9IGFycmF5KCR0ZW1wbGF0ZV9pZCwNCiAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ3RpdGxlJ10sDQogICAgICAgICAgICAgICAgICAkcGFyYW1zWyd0eXBlX2lkJ10sDQogICAgICAgICAgICAgICAgICAkcGFyYW1zWyd0ZW1wbCddKTsNCiAgICANCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkcUFycik7DQogIH0NCg0KICAvLyBmb3JjZSBhIGNhY2hlIGNsZWFyPw0KICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ2NhdGFsb2dfJyAuICR0ZW1wbGF0ZV9pZCk7DQogIC8vIGFuZCByZWNyZWF0ZQ0KICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2NhdGFsb2dfJyAuICR0ZW1wbGF0ZV9pZCwgJHBhcmFtc1sndGVtcGwnXSk7DQoNCiAgJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ3RlbXBsYXRldXBkYXRlZCcpOw0KDQogIGlmIChpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkpDQogIHsNCiAgICAkdGhpcy0+RG9BY3Rpb24oJ2RlZmF1bHRhZG1pbicsICRpZCwgJHBhcmFtcyk7DQogICAgcmV0dXJuOw0KICB9DQp9DQoNCiR0eXBlaWRzID0gYXJyYXkoKTsNCiR0eXBlaWRzID0gY2F0VGVtcGxhdGVPcGVyYXRpb25zOjpHZXRDYXRhbG9nZXJUZW1wbGF0ZVR5cGVzKCk7DQoNCmlmIChpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZV9pZCddKSkNCnsNCiAgLy8gZWRpdGluZyBhIHRlbXBsYXRlICANCiAgJHJvdyA9IGNhdFRlbXBsYXRlT3BlcmF0aW9uczo6R2V0VGVtcGxhdGVGcm9tSUQoJHBhcmFtc1sndGVtcGxhdGVfaWQnXSk7DQogICR0ZW1wbGF0ZWlkID0gJHBhcmFtc1sndGVtcGxhdGVfaWQnXTsNCiAgJHRpdGxlPSRyb3dbJ3RpdGxlJ107DQogICR0ZW1wbGF0ZT0kcm93Wyd0ZW1wbGF0ZSddOw0KICAkdHlwZV9pZD0kcm93Wyd0eXBlX2lkJ107DQogICR0aGlzLT5zbWFydHktPmFzc2lnbignb3AnLCAkdGhpcy0+TGFuZygnZWRpdHRlbXBsYXRlJykpOw0KfQ0KZWxzZQ0Kew0KICAvLyBhZGRpbmcgYSB0ZW1wbGF0ZQ0KICAkdGVtcGxhdGVpZCA9ICcnOw0KICAkdGl0bGU9Jyc7DQogICR0ZW1wbGF0ZT0nJzsNCiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdvcCcsICR0aGlzLT5MYW5nKCdhZGR0ZW1wbGF0ZScpKTsNCn0NCiAgIA0KDQppZiAoaXNzZXQoJHR5cGVfaWQpKSANCnsNCiAgJGF0dHJzID0gYXJyYXkoKTsNCg0KICAkYXR0cnNbJ2ZpeGVkJ10gPSBjYXRUZW1wbGF0ZU9wZXJhdGlvbnM6OkdldEF0dExpc3RGcm9tVHlwZSggJHBhcmFtc1sndHlwZV9pZCddKTsNCiAgJGF0dHJzWyd1c2VyJ10gPSAgY2F0VGVtcGxhdGVPcGVyYXRpb25zOjpHZXRVc2VyQXR0TGlzdCggJHBhcmFtc1sndHlwZV9pZCddKTsNCg0KICAkaW1hZ2VfY291bnQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaXRlbV9pbWFnZV9jb3VudCcsICcxJyk7DQoNCiAgaWYgKCRpbWFnZV9jb3VudCA+IDApDQogIHsNCiAgICAkYXR0cnNbJ2ltYWdlcyddID0gYXJyYXkoKTsNCg0KICAgIGZvciAoJGk9MTskaTw9JGltYWdlX2NvdW50OyRpKyspDQogICAgew0KICAgICAgJGN1cnJJbWcgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgICAgICdpbWFnZV91cmwnICAgICAgID0+ICd7JGltYWdlXycgLiAkaSAuICdfdXJsfScsDQogICAgICAgICAgICAgICAgICAgICAgICAnaW1hZ2VfdGh1bWJfdXJsJyA9PiAneyRpbWFnZV90aHVtYl8nIC4gJGkgLiAnX3VybH0nLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ2ltYWdlX3NyY191cmwnICAgPT4gJ3skc3JjX2ltYWdlXycgLiAkaSAuICdfdXJsfScNCiAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgDQogICAgICBhcnJheV9wdXNoKCRhdHRyc1snaW1hZ2VzJ10gLCAkY3VyckltZyk7DQogICAgfQ0KDQogICAgYXJyYXlfcHVzaCgkYXR0cnNbJ2ZpeGVkJ10gLCAneyRpbWFnZV91cmxfYXJyYXl9Jyk7DQogICAgYXJyYXlfcHVzaCgkYXR0cnNbJ2ZpeGVkJ10sICd7JHNyY19pbWFnZV91cmxfYXJyYXl9Jyk7DQogICAgYXJyYXlfcHVzaCgkYXR0cnNbJ2ZpeGVkJ10gLCAneyRpbWFnZV90aHVtYl91cmxfYXJyYXl9Jyk7DQoNCiAgfSAgDQoNCiAgJGZpbGVfY291bnQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaXRlbV9maWxlX2NvdW50JywgMCk7DQoNCiAgaWYgKCRmaWxlX2NvdW50ID4gMCkNCiAgew0KICAgICRhdHRyc1snZmlsZXMnXSA9IGFycmF5KCk7DQogICAgDQogICAgZm9yICgkaT0xOyRpPD0kZmlsZV9jb3VudDskaSsrKQ0KICAgIHsNCiAgICAgICRjdXJyRmlsZSA9IGFycmF5KA0KICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnICA9PiAneyRmaWxlXycuJGkuJ19uYW1lfScsDQogICAgICAgICAgICAgICAgICAgICd1cmwnICAgICAgID0+ICd7JGZpbGVfJy4kaS4nX3VybH0nLA0KICAgICAgICAgICAgICAgICAgICAnZXh0JyAgICAgICA9PiAneyRmaWxlXycuJGkuICdfZXh0fScNCiAgICAgICAgICAgICAgICAgICk7DQogICAgICBhcnJheV9wdXNoKCAkYXR0cnNbJ2ZpbGVzJ10gLCAkY3VyckZpbGUpOw0KICAgIH0NCg0KICAgIGFycmF5X3B1c2goJGF0dHJzWydmaXhlZCddICwgJ3skZmlsZV9jb3VudH0nKTsNCiAgICBhcnJheV9wdXNoKCRhdHRyc1snZml4ZWQnXSAsICd7JGZpbGVfbmFtZV9hcnJheScpOw0KICAgIGFycmF5X3B1c2goJGF0dHJzWydmaXhlZCddICwgJ3skZmlsZV91cmxfYXJyYXl9Jyk7DQogICAgYXJyYXlfcHVzaCgkYXR0cnNbJ2ZpeGVkJ10gLCAneyRmaWxlX2V4dF9hcnJheX0nKTsNCiAgICBhcnJheV9wdXNoKCRhdHRyc1snZml4ZWQnXSAsICd7JHJvb3RfdXJsfScpOw0KICAgIGFycmF5X3B1c2goJGF0dHJzWydmaXhlZCddICwgJ3skaW1hZ2Vfcm9vdH0nKTsNCiAgfQ0KICANCiAgaWYgKGlzc2V0KCR0eXBlX2lkKSkNCiAgeyANCiAgICBzd2l0Y2ggKCR0eXBlX2lkKQ0KICAgIHsNCiAgICAgIGNhc2UgQ1RFTVBMQVRFX0lURU06DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGVtcGxhdGVfdmFycycsICR0aGlzLT5MYW5nKCd0aXRsZV9pdGVtX3RlbXBsYXRlX3ZhcnMnKSApOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdhdmFpbF9hdHRycycsICRhdHRycyk7DQogICAgICBicmVhazsgIA0KICAgICAgDQogICAgICBjYXNlIENURU1QTEFURV9DQVRFR09SWTogIA0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX3RlbXBsYXRlX3ZhcnMnLCAkdGhpcy0+TGFuZygndGl0bGVfY2F0X3RlbXBsYXRlX3ZhcnMnKSApOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdhdmFpbF9hdHRycycsICRjYXR0cnMpOyAgDQogICAgICBicmVhazsNCiAgICAgIA0KICAgICAgY2FzZSBDVEVNUExBVEVfQ0FUQUxPRzogDQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGVtcGxhdGVfdmFycycsICR0aGlzLT5MYW5nKCd0aXRsZV9jYXRhbG9nX3RlbXBsYXRlX3ZhcnMnKSApOw0KICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdhdmFpbF9hdHRycycsICRwY2F0dHJzKTsgICAgDQogICAgICBicmVhazsNCiAgICAgIA0KICAgICAgY2FzZSBDVEVNUExBVEVfQ09NUEFSSVNPTjoNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV90ZW1wbGF0ZV92YXJzJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2NvbXBhcmVfdGVtcGxhdGVfdmFycycpICk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2F2YWlsX2F0dHJzJywgJGNvbXBhdHRycyk7ICAgDQogICAgICBicmVhazsNCiAgICAgIA0KICAgICAgY2FzZSBDVEVNUExBVEVfRkVBVFVSRToNCiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV90ZW1wbGF0ZV92YXJzJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2ZlYXR1cmVfdGVtcGxhdGVfdmFycycpICk7DQogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2F2YWlsX2F0dHJzJywgJGZlYXR0cnMpOyAgICANCiAgICAgIGJyZWFrOw0KICAgIH0NCiAgfQ0KICBlbHNlIA0KICB7DQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdmFpbF9hdHRycycsJGF0dHJzLicsICcuJGNhdHRycy4nLCAnLiRmZWF0dHJzKTsgIA0KICB9ICAgICANCg0KLyoNCiRhdHRycyA9ICd7JHRpdGxlfSwgeyRub3Rlc30sICc7DQogICAgICAgICANCiRjYXR0cnMgPSAneyR0aXRsZX0sIHskbm90ZXN9LCB7JHByZXZ9LCB7JHByZXZ1cmx9LCB7JG5hdnN0cn0sIHskbmV4dH0sIHskbmV4dHVybH0sIHskaXRlbXN9LCAnOw0KICAgICAgICAgIA0KJHBjYXR0cnMgPSAneyRpdGVtc30sIHskYXR0cmxpc3R9LCB7JHJvb3RfdXJsfSwgeyRpbWFnZV9yb290fSwgJzsNCiAgICAgICAgICAgDQokY29tcGF0dHJzID0gJ3skaXRlbXN9LCB7JGF0dHJsaXN0fSwgeyRyb290X3VybH0sIHskaW1hZ2Vfcm9vdH0nOw0KICAgICAgICAgICAgIA0KJGZlYXR0cnMgPSAneyRpdGVtc30sIHskcm9vdF91cmx9LCB7JGltYWdlX3Jvb3R9JzsNCiovDQoNCg0KDQoNCi8qDQokaW1hZ2VfY291bnQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY2F0ZWdvcnlfaW1hZ2VfY291bnQnLCAnMScpOw0KDQpmb3IgKCRpPTE7JGk8PSRpbWFnZV9jb3VudDskaSsrKQ0Kew0KICAkY2F0dHJzIC49ICd7JGltYWdlXycuJGkuJ191cmx9LCB7JGltYWdlX3RodW1iXycuJGk7DQogICRjYXR0cnMgLj0gJ191cmx9LCB7JHNyY19pbWFnZV8nLiRpLidfdXJsfSwgJzsNCn0NCg0KJGNhdHRycyAuPSAneyRpbWFnZV91cmxfYXJyYXl9LCAnOw0KJGNhdHRycyAuPSAneyRzcmNfaW1hZ2VfdXJsX2FycmF5fSwgJzsNCiRjYXR0cnMgLj0gJ3skaW1hZ2VfdGh1bWJfdXJsX2FycmF5fSwgeyRyb290X3VybH0sIHskaW1hZ2Vfcm9vdH0nOw0KJGNhdHRycyA9IHJ0cmltKCRjYXR0cnMsJywgJyk7DQokY2F0dHJzIC49ICc8aDM+JGl0ZW1zIGFycmF5IGNvbnRlbnRzOjwvaDM+JzsNCiRjYXR0cnMgLj0gJyRpdGVtc1tdLnRpdGxlLCAkaXRlbXNbXS5saW5rLCAkaXRlbXNbXS5pbWFnZSwgJGl0ZW1zW10uY2F0LCAkaXRlbXNbXS48aT5hdHRyaWJ1dGVfbmFtZTwvaT4sICRpdGVtc1tdLjxpPmF0dHJpYnV0ZV9hbGlhczwvaT4nOw0KJHBjYXR0cnMgLj0gJzxoMz4kaXRlbXMgYXJyYXkgY29udGVudHM6PC9oMz4nOw0KJHBjYXR0cnMgLj0gJyRpdGVtc1tdLnRpdGxlLCAkaXRlbXNbXS5saW5rLCAkaXRlbXNbXS5pbWFnZSwgJGl0ZW1zW10uY2F0LCAkaXRlbXNbXS48aT5hdHRyaWJ1dGVfbmFtZTwvaT4sICRpdGVtc1tdLjxpPmF0dHJpYnV0ZV9hbGlhczwvaT4nOw0KJHBjYXR0cnMgLj0gJzxoMz4kYXR0cmxpc3QgYXJyYXkgY29udGVudHM6PC9oMz4nOw0KJHBjYXR0cnMgLj0gJyRhdHRybGlzdFtdLT5hdHRyLCAkYXR0cmxpc3RbXS0+c2FmZSc7DQokY29tcGF0dHJzIC49ICc8aDM+JGl0ZW1zIGFycmF5IGNvbnRlbnRzOjwvaDM+JzsNCiRjb21wYXR0cnMgLj0gJyRpdGVtc1tdLnRpdGxlLCAkaXRlbXNbXS5saW5rLCAkaXRlbXNbXS5pbWFnZSwgJGl0ZW1zW10uPGk+YXR0cmlidXRlX25hbWU8L2k+LCAkaXRlbXNbXS48aT5hdHRyaWJ1dGVfYWxpYXM8L2k+JzsNCiRjb21wYXR0cnMgLj0gJzxoMz4kYXR0cmxpc3QgYXJyYXkgY29udGVudHM6PC9oMz4nOw0KJGNvbXBhdHRycyAuPSAnJGF0dHJsaXN0W10tPmF0dHIsICRhdHRybGlzdFtdLT5zYWZlJzsNCiRmZWF0dHJzIC49ICc8aDM+JGl0ZW1zIGFycmF5IGNvbnRlbnRzOjwvaDM+JzsNCiRmZWF0dHJzIC49ICckaXRlbXNbXS50aXRsZSwgJGl0ZW1zW10ubGluaywgJGl0ZW1zW10uaW1hZ2UsICRpdGVtc1tdLmNhdCwgJGl0ZW1zW10uPGk+YXR0cmlidXRlX25hbWU8L2k+LCAkaXRlbXNbXS48aT5hdHRyaWJ1dGVfYWxpYXM8L2k+JzsNCiovDQogICAgICAgIA0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2VkaXR0ZW1wbCcsICRyZXR1cm5pZCkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ3RlbXBsYXRlX2lkJywgJHRlbXBsYXRlaWQpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGl0bGUnLCR0aGlzLT5MYW5nKCd0aXRsZV90aXRsZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGVtcGxhdGUnLCR0aGlzLT5MYW5nKCd0aXRsZV90ZW1wbGF0ZScpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfdGVtcGxhdGVfdHlwZScsJHRoaXMtPkxhbmcoJ3RpdGxlX3RlbXBsYXRlX3R5cGUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2F2YWlsX2F0dHJzJywkdGhpcy0+TGFuZygndGl0bGVfYXZhaWxfYXR0cnMnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ltYWdlX2NvdW50JywgJGltYWdlX2NvdW50KTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignZmlsZV9jb3VudCcsICRmaWxlX2NvdW50KTsNCg0KDQoNCi8vICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfYXZhaWxfaW1hdHRycycsJHRoaXMtPkxhbmcoJ3RpdGxlX2F2YWlsX2ltYXR0cnMnKSk7DQovLyAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdhdmFpbF9pbWF0dHJzJywkaW1hdHRycyk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RlbXBsYXRlX3R5cGUnLCR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ3R5cGVfaWQnLCAkdHlwZWlkcywgLTEsIGlzc2V0KCR0eXBlX2lkKT8kdHlwZV9pZDonJykpOw0KDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCRwYXJhbXNbJ21lc3NhZ2UnXSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RpdGxlJywkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ3RpdGxlJywgJHRpdGxlLCAyMCwgMjU1KSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RlbXBsYXRlJywkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsICRpZCwgJHRlbXBsYXRlLCAndGVtcGwnKSk7DQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsIGxhbmcoJ3N1Ym1pdCcpKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FwcGx5JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2FwcGx5JywgbGFuZygnYXBwbHknKSkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywgbGFuZygnY2FuY2VsJykpKTsNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdHRlbXBsYXRlLnRwbCcpOw0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/Cataloger.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENhdGFsb2dlciAtIGJ1aWxkIGEgY2F0YWxvZyBvciBwb3J0Zm9saW8gb2Ygc3R1ZmYKIyBWZXJzaW9uOiAxLjAKIwojIENvcHlyaWdodCAoYykgMjAxMiwgRmVybmFuZG8gTW9yZ2FkbyAoSm9Nb3JnKSBqb21vcmcubW9yZ0BnbWFpbC5jb20KIyBDb3B5cmlnaHQgKGMpIDIwMDYsIFNhbXVlbCBHb2xkc3RlaW4gPHNqZ0BjbXNtb2R1bGVzLmNvbT4KIyBGb3IgSW5mb3JtYXRpb24sIFN1cHBvcnQsIEJ1ZyBSZXBvcnRzLCBldGMsIHBsZWFzZSB2aXNpdCB0aGUKIyBDTVMgTWFkZSBTaW1wbGUgRm9yZ2UgYXQgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA2IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZmluZSgnQ1RFTVBMQVRFX0lURU0nLCAgICAgICAgMSk7CmRlZmluZSgnQ1RFTVBMQVRFX0NBVEVHT1JZJywgICAgMik7CmRlZmluZSgnQ1RFTVBMQVRFX0NBVEFMT0cnLCAgICAgMyk7CmRlZmluZSgnQ1RFTVBMQVRFX0NPTVBBUklTT04nLCAgNCk7CmRlZmluZSgnQ1RFTVBMQVRFX0ZFQVRVUkUnLCAgICAgNSk7CgpjbGFzcyBDYXRhbG9nZXIgZXh0ZW5kcyBDTVNNb2R1bGUKewogICMgZGVwcmVjYXRlZAogIHZhciAkYXR0cnMgPSBhcnJheSgpOwogIAogIHZhciAkZmV0Y2hlZCA9IGZhbHNlOwogIHZhciAkc2hvd01pc3NpbmcgPSAnJzsKCiAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogIHsKICAgICRjbnRfdHlwZXMgPSBhcnJheSgnQ2F0YWxvZyBJdGVtJywgJ0NhdGFsb2cgQ2F0ZWdvcnknLCAnQ2F0YWxvZyBQcmludGFibGUnKTsKICAgIAogICAgJHBhdGggPSBjbXNfam9pbl9wYXRoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkdldE1vZHVsZVBhdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgJGNvbnRlbnRvcHMgPSBjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpOwoKICAgIGZvcmVhY2goJGNudF90eXBlcyBhcyAkZnJpZW5kbHluYW1lKQogICAgewogICAgICAkdHlwZSA9IHN0cl9yZXBsYWNlKCcgJywgJycsICRmcmllbmRseW5hbWUpOwogICAgICAkZmlsZSA9ICdjbGFzcy4nIC4gJHR5cGUgLiAnLnBocCc7CiAgICAgICRmbiA9IGNtc19qb2luX3BhdGgoJHBhdGgsICRmaWxlKTsKICAgICAgJG9iaiA9IG5ldyBDbXNDb250ZW50VHlwZVBsYWNlaG9sZGVyKCk7CiAgICAgICRvYmotPmNsYXNzID0gJHR5cGU7CiAgICAgICRvYmotPnR5cGUgPSBzdHJ0b2xvd2VyKCR0eXBlKTsKICAgICAgJG9iai0+ZmlsZW5hbWUgPSAkZm47CiAgICAgICRvYmotPmxvYWRlZCA9IGZhbHNlOwogICAgICAkb2JqLT5mcmllbmRseW5hbWUgPSAoJGZyaWVuZGx5bmFtZSAhPSAnJyA/ICRmcmllbmRseW5hbWUgOiAkdHlwZSk7CiAgICAgICRyZXN1bHQgPSAkY29udGVudG9wcy0+cmVnaXN0ZXJfY29udGVudF90eXBlKCRvYmopOyAvLyBUT0RPIGVycm9yIGhhbmRsaW5nCiAgICB9CiAgICAKICAgIGNtc19yb3V0ZV9tYW5hZ2VyOjpkZWxfc3RhdGljKCcnLCR0aGlzLT5HZXROYW1lKCkpOwogICAgJHJvdXRlID0gbmV3IENtc1JvdXRlKCAnL2NhdGFsb2dlcl9pbWFnZSQvJywgJHRoaXMtPkdldE5hbWUoKSwgYXJyYXkoJ2FjdGlvbicgPT4gJ2ltYWdlJykgKTsKICAgIGNtc19yb3V0ZV9tYW5hZ2VyOjphZGRfc3RhdGljKCRyb3V0ZSk7ICAgIAogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOyAKICB9CgogIGZ1bmN0aW9uIEdldE5hbWUoKQogIHsKICAgIHJldHVybiAnQ2F0YWxvZ2VyJzsKICB9CgogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsKICB9CgogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIEhhc0FkbWluKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogIHsKICAgIHJldHVybiAnMS4wLjEnOwogIH0KCiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIHsKICAgIHJldHVybiAnMi4xJzsKICB9CgogIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnYWRtaW5kZXNjcmlwdGlvbicpOwogIH0KCiAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7CiAgfQoKICBmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkKICB7CiAgICAkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsKICAgICR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXMoKTsKCiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc3ViX3RlbXBsYXRlJywgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgncmVjZW50JywgICAgICAgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYWxpYXMnLCAgICAgICAgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgncmFuZG9tJywgICAgICAgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYWN0aW9uJywgICAgICAgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgncmVjdXJzZScsICAgICAgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaXRlbXMnLCAgICAgICAgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZ2xvYmFsX3NvcnQnLCAgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZ2xvYmFsX3NvcnRfZGlyJywgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbmFtZScsICAgICAgICAgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGVmYXVsdCcsICAgICAgICAgIENMRUFOX1NUUklORyk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY291bnQnLCAgICAgICAgICAgIENMRUFOX0lOVCk7CiAgfQoKICBmdW5jdGlvbiBnZXRUZW1wbGF0ZUZyb21BbGlhcygkYWxpYXMpCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTRUxFQ1QgaWQgZnJvbSAnIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgd2hlcmUgdGl0bGU9PycsIGFycmF5KCRhbGlhcykgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgCiAgICBpZigkZGJyZXN1bHQgIT09IGZhbHNlICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQogICAgewogICAgICByZXR1cm4gJ2NhdGFsb2dfJyAuICRyb3dbJ2lkJ107CiAgICB9CiAgICByZXR1cm4gJyc7CiAgfQoKICBmdW5jdGlvbiBpbXBvcnRTYW1wbGVUZW1wbGF0ZXMoJG9ubHl0eXBlID0gJ2FsbCcpCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAKICAgICRwYXRoID0gY21zX2pvaW5fcGF0aCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5HZXRNb2R1bGVQYXRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICRkaXIgPSBvcGVuZGlyKCRwYXRoKTsKICAgICR0ZW1wcyA9IGFycmF5KCk7CiAgICAKICAgIHdoaWxlKCRmaWxlc3BlYyA9IHJlYWRkaXIoJGRpcikgKQogICAgewogICAgICBpZighcHJlZ19tYXRjaCgnL1wudHBsJC9pJywgJGZpbGVzcGVjKSApCiAgICAgIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBhcnJheV9wdXNoKCR0ZW1wcywgJGZpbGVzcGVjKTsKICAgIH0KICAgIAogICAgc29ydCgkdGVtcHMpOwogICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcgCiAgICAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkgCiAgICAgICAgICAgICAgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgKGlkLCB0eXBlX2lkLCB0aXRsZSwgdGVtcGxhdGUpIFZBTFVFUyAoPyw/LD8sPyknOwoKICAgIGZvcmVhY2goJHRlbXBzIGFzICRmaWxlc3BlYykKICAgIHsKICAgICAgJGZuID0gY21zX2pvaW5fcGF0aCgkcGF0aCwgJGZpbGVzcGVjKTsKICAgICAgJGZpbGUgPSBmaWxlKCRmbik7CiAgICAgICR0ZW1wbGF0ZSA9IGltcGxvZGUoJycsICRmaWxlKTsKICAgICAgJHRlbXBfbmFtZSA9IHByZWdfcmVwbGFjZSgnL1wudHBsJC9pJywgJycsICRmaWxlc3BlYyk7CiAgICAgIC8vIGNoZWNrIGlmIGl0IGFscmVhZHkgZXhpc3RzCiAgICAgICRleGNoZWNrID0gJ1NFTEVDVCBpZCBmcm9tICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgd2hlcmUgdGl0bGU9Pyc7CiAgICAgICRkYmNvdW50ID0gJGRiLT5FeGVjdXRlKCRleGNoZWNrLCBhcnJheSgkdGVtcF9uYW1lKSApOwogICAgICAKICAgICAgd2hpbGUoJGRiY291bnQgJiYgJGRiY291bnQtPlJlY29yZENvdW50KCkgPiAwKQogICAgICB7CiAgICAgICAgJHRlbXBfbmFtZSAuPSAnX25ldyc7CiAgICAgICAgJGRiY291bnQgPSAkZGItPkV4ZWN1dGUoJGV4Y2hlY2ssIGFycmF5KCR0ZW1wX25hbWUpICk7CiAgICAgIH0KICAgICAgCiAgICAgICR0eXBlX2lkID0gIC0gMTsKICAgICAgJHR5cGUgPSBzdWJzdHIoJHRlbXBfbmFtZSwgMCwgc3RycG9zKCR0ZW1wX25hbWUsICctJykgKTsKICAgICAgCiAgICAgIGlmKCR0eXBlID09ICdJdGVtJyAmJiAoJG9ubHl0eXBlID09ICdhbGwnIHx8ICRvbmx5dHlwZSA9ICdJdGVtJykgKQogICAgICB7CiAgICAgICAgJHR5cGVfaWQgPSBDVEVNUExBVEVfSVRFTTsKICAgICAgfQogICAgICBlbHNlIGlmKCR0eXBlID09ICdDYXRlZ29yeScgJiYgKCRvbmx5dHlwZSA9PSAnYWxsJyB8fCAkb25seXR5cGUgPSAnQ2F0ZWdvcnknKSApCiAgICAgIHsKICAgICAgICAkdHlwZV9pZCA9IENURU1QTEFURV9DQVRFR09SWTsKICAgICAgfQogICAgICBlbHNlIGlmKCR0eXBlID09ICdQcmludGFibGUnICYmICgkb25seXR5cGUgPT0gJ2FsbCcgfHwgJG9ubHl0eXBlID0gJ1ByaW50YWJsZScpICkKICAgICAgewogICAgICAgICR0eXBlX2lkID0gQ1RFTVBMQVRFX0NBVEFMT0c7CiAgICAgIH0KICAgICAgZWxzZSBpZigkdHlwZSA9PSAnQ29tcGFyaXNvbicgJiYgKCRvbmx5dHlwZSA9PSAnYWxsJyB8fCAkb25seXR5cGUgPSAnQ29tcGFyaXNvbicpICkKICAgICAgewogICAgICAgICR0eXBlX2lkID0gQ1RFTVBMQVRFX0NPTVBBUklTT047CiAgICAgIH0KICAgICAgZWxzZSBpZigkdHlwZSA9PSAnRmVhdHVyZScgJiYgKCRvbmx5dHlwZSA9PSAnYWxsJyB8fCAkb25seXR5cGUgPSAnRmVhdHVyZScpICkKICAgICAgewogICAgICAgICR0eXBlX2lkID0gQ1RFTVBMQVRFX0ZFQVRVUkU7CiAgICAgIH0KCiAgICAgICR0ZW1wX2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGVfc2VxJyk7CiAgICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0ZW1wX2lkLCAkdHlwZV9pZCwgJHRlbXBfbmFtZSwgJHRlbXBsYXRlKSApOwogICAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2NhdGFsb2dfJyAuICR0ZW1wX2lkLCAkdGVtcGxhdGUpOwogICAgfQoKICB9CgogICMgZGVwcmVjYXRlZDogbW92ZWQgdG8gY2F0RmlsZXNPcGVyYXRpb25zCiAgZnVuY3Rpb24gY29udGVudGFscGhhKCRhLCAkYikKICB7CiAgICByZXR1cm4gc3RyY2FzZWNtcCgkYVsndGl0bGUnXSwgJGJbJ3RpdGxlJ10pOwogIH0KCiAgIyBkZXByZWNhdGVkOiBtb3ZlZCB0byBjYXRGaWxlc09wZXJhdGlvbnMgCiAgZnVuY3Rpb24gY2hyb25vKCRhLCAkYikKICB7CiAgICBpZigkYVsnbW9kaWZpZWRkYXRlJ10gPiAkYlsnbW9kaWZpZWRkYXRlJ10pCiAgICB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIAogICAgaWYoJGFbJ21vZGlmaWVkZGF0ZSddIDwgJGJbJ21vZGlmaWVkZGF0ZSddKQogICAgewogICAgICByZXR1cm4gMTsKICAgIH0KICAgIAogICAgcmV0dXJuIDA7CiAgfQoKICAjIGRlcHJlY2F0ZWQ6IG1vdmVkIHRvIGNhdEZpbGVzT3BlcmF0aW9ucwogIGZ1bmN0aW9uIGNyZWF0ZWQoJGEsICRiKQogIHsKICAgIGlmKCRhWydjcmVhdGVkYXRlJ10gPiAkYlsnY3JlYXRlZGF0ZSddKQogICAgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICAKICAgIGlmKCRhWydjcmVhdGVkYXRlJ10gPCAkYlsnY3JlYXRlZGF0ZSddKQogICAgewogICAgICByZXR1cm4gMTsKICAgIH0KICAgIAogICAgcmV0dXJuIDA7CiAgfQogIAogIGZ1bmN0aW9uIF9kaXNwbGF5X2ljb24oJGljb24gPSAnJykKICB7CiAgICAkaW1hZ2VfcGF0aCA9IGNtc19qb2luX3BhdGgoJHRoaXMtPkdldE1vZHVsZVBhdGgoKSwgJ2ltYWdlcycsICRpY29uKTsKICAgIHJldHVybiAkaW1hZ2VfcGF0aDsKICB9CgogIGZ1bmN0aW9uIGluaXRBZG1pbk5hdigkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgewogICAgJGNvbmZpZyA9ICR0aGlzLT5HZXRDb25maWcoKTsKICAgICR2YXJzID0gJHRoaXMtPkdldFZhcmlhYmxlcygpOwogICAgJGlubmVybmF2ID0gIjxkaXYgY2xhc3M9J3BhZ2VvdmVyZmxvdyc+XG4iOwogICAgCiAgICAkc2VwID0gJyB8ICc7CiAgICAKICAgICMgZGVmYXVsdCBhZG1pbgogICAgCiAgICAkdGVtcEltYWdlID0gJzxpbWcgY2xhc3M9InN5c3RlbWljb24iIGFsdD0iJwogICAgICAgICAgICAgICAgICAgICAuICR0aGlzLT5MYW5nKCdnbG9iYWxvcHMnKQogICAgICAgICAgICAgICAgICAgICAuICciIHRpdGxlPSInCiAgICAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPkxhbmcoJ2dsb2JhbG9wcycpCiAgICAgICAgICAgICAgICAgICAgIC4gJyIgc3JjPSInCiAgICAgICAgICAgICAgICAgICAgIC4gJGNvbmZpZ1sncm9vdF91cmwnXQogICAgICAgICAgICAgICAgICAgICAuICcvbW9kdWxlcy9DYXRhbG9nZXIvaW1hZ2VzL3RlbXBsYXRlcy5wbmciIC8+JzsKICAgIAogICAgJGlubmVybmF2IC49ICR0aGlzLT5DcmVhdGVMaW5rKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdGFkbWluJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBJbWFnZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAKICAgIAogICAgJGlubmVybmF2IC49ICcgJzsKICAgIAogICAgJGlubmVybmF2IC49ICR0aGlzLT5DcmVhdGVMaW5rKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRhZG1pbicsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnbGlzdHRlbXBsJyksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsgIAoKICAgICMgTWFuYWdlIEF0dHJpYnV0ZXMKICAgCiAgICAkdGVtcEltYWdlID0gJzxpbWcgY2xhc3M9InN5c3RlbWljb24iIGFsdD0iJwogICAgICAgICAgICAgICAgICAgICAuICR0aGlzLT5MYW5nKCdnbG9iYWxvcHMnKQogICAgICAgICAgICAgICAgICAgICAuICciIHRpdGxlPSInCiAgICAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPkxhbmcoJ2dsb2JhbG9wcycpCiAgICAgICAgICAgICAgICAgICAgIC4gJyIgc3JjPSInCiAgICAgICAgICAgICAgICAgICAgIC4gJGNvbmZpZ1sncm9vdF91cmwnXQogICAgICAgICAgICAgICAgICAgICAuICcvbW9kdWxlcy9DYXRhbG9nZXIvaW1hZ2VzL2F0dHJpYnV0ZXMucG5nIiAvPic7CiAgICAKICAgICRpbm5lcm5hdiAuPSAkc2VwOwogICAgCiAgICAkaW5uZXJuYXYgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZG1pbmF0dHJzJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBJbWFnZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAKICAgIAogICAgJGlubmVybmF2IC49ICcgJyAuICR0aGlzLT5DcmVhdGVMaW5rKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRtaW5hdHRycycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdtYW5hZ2VhdHRycycpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIAogICAgJGlubmVybmF2IC49ICRzZXA7CiAgICAKICAgICMgR2xvYmFsIE9wZXJhdGlvbnMKICAgIAogICAgJHRlbXBJbWFnZSA9ICc8aW1nIGNsYXNzPSJzeXN0ZW1pY29uIiBhbHQ9IicKICAgICAgICAgICAgICAgICAgICAgLiAkdGhpcy0+TGFuZygnZ2xvYmFsb3BzJykKICAgICAgICAgICAgICAgICAgICAgLiAnIiB0aXRsZT0iJwogICAgICAgICAgICAgICAgICAgICAuICR0aGlzLT5MYW5nKCdnbG9iYWxvcHMnKQogICAgICAgICAgICAgICAgICAgICAuICciIHNyYz0iJwogICAgICAgICAgICAgICAgICAgICAuICRjb25maWdbJ3Jvb3RfdXJsJ10KICAgICAgICAgICAgICAgICAgICAgLiAnL21vZHVsZXMvQ2F0YWxvZ2VyL2ltYWdlcy9nbG9iYWwucG5nIiAvPic7CiAgICAKICAgICRpbm5lcm5hdiAuPSAkdGhpcy0+Q3JlYXRlTGluaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsb2JhbG9wcycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZW1wSW1hZ2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAKICAgICRpbm5lcm5hdiAuPSAnICcgLiAkdGhpcy0+Q3JlYXRlTGluaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsb2JhbG9wcycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKCdnbG9iYWxvcHMnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgJGlubmVybmF2IC49ICRzZXA7CiAgICAKICAgICMgQWRtaW4gUHJlZnMKICAgCiAgICAkdGVtcEltYWdlID0gJzxpbWcgY2xhc3M9InN5c3RlbWljb24iIGFsdD0iJwogICAgICAgICAgICAgICAgICAgICAuICR0aGlzLT5MYW5nKCdnbG9iYWxvcHMnKQogICAgICAgICAgICAgICAgICAgICAuICciIHRpdGxlPSInCiAgICAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPkxhbmcoJ2dsb2JhbG9wcycpCiAgICAgICAgICAgICAgICAgICAgIC4gJyIgc3JjPSInCiAgICAgICAgICAgICAgICAgICAgIC4gJGNvbmZpZ1sncm9vdF91cmwnXQogICAgICAgICAgICAgICAgICAgICAuICcvbW9kdWxlcy9DYXRhbG9nZXIvaW1hZ2VzL2FkbWluLnBuZyIgLz4nOwogICAgCiAgICAkaW5uZXJuYXYgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZG1pbnByZWZzJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBJbWFnZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAKICAgICRpbm5lcm5hdiAuPSAnICcgLiAkdGhpcy0+Q3JlYXRlTGluaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkbWlucHJlZnMnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnbWFuYWdlcHJlZnMnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICRpbm5lcm5hdiAuPSAiXG48L2Rpdj5cbiI7CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5uZXJuYXYnLCAkaW5uZXJuYXYpOwoKICB9CgogIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpCiAgewogICAgcmV0dXJuICdjb250ZW50JzsKICB9CiAgCiAgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IENhdGFsb2cgU2V0dGluZ3MnKTsKICB9CgogIGZ1bmN0aW9uIEdldEhlbHAoJGxhbmcgPSAnZW5fVVMnKQogIHsKICAgIC8vcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwdGV4dCcpOwogICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwogICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgICAgIAogICAgJHNtYXJ0eS0+YXNzaWduKCdyb290X3VybCcsICRjb25maWdbJ3Jvb3RfdXJsJ10pOwoKICAgICRzbWFydHktPmFzc2lnbignbW9kJywgJHRoaXMpOwogICAgcmV0dXJuICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2hlbHAudHBsJyk7CiAgfQoKICBmdW5jdGlvbiBHZXRBdXRob3IoKQogIHsKICAgIHJldHVybiAnSm9Nb3JnJzsKICB9CgogIGZ1bmN0aW9uIENoZWNrQWNjZXNzKCRwZXJtaXNzaW9uID0gJ01vZGlmeSBDYXRhbG9nIFNldHRpbmdzJykKICB7CiAgICAkYWNjZXNzID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkcGVybWlzc2lvbik7CgogICAgaWYoISRhY2Nlc3MpCiAgICB7CiAgICAgIGVjaG8iPHAgY2xhc3M9XCJlcnJvclwiPiIgLiAkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCAkcGVybWlzc2lvbikgLiAiPC9wPiI7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCiAgewogICAgcmV0dXJuICdqb21vcmcubW9yZ0BnbWFpbC5jb20nOwogIH0KCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgiY2hhbmdlbG9nLnRwbCIpOwogICAgLy8kdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgfQoKCiAgZnVuY3Rpb24gJmdldFN1YkNvbnRlbnQoJHN0YXJ0Tm9kZUlkKQogIHsKICAgICRnQ21zID0gY21zbXMoKTsKICAgICRjb250ZW50ID0gYXJyYXkoKTsKICAgICRobSA9ICRnQ21zLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICAvKiBXb3JrcyB3aXRoIG5ldyBhZGRpdGlvbiB0byBUcmVlLCBidXQgZ2V0RmxhdExpc3QgaXMgZGVmYXVsdAogICAgJHJuID0gJGhtLT5zdXJlR2V0Tm9kZUJ5SWQoJHN0YXJ0Tm9kZUlkKTsKICAgICRjb3VudCA9IDA7CiAgICAkaG0tPmdldEZsYXR0ZW5lZENoaWxkcmVuKCRybiwgJGNvbnRlbnQsICRjb3VudCk7CiAgICAgKi8KICAgICRjb250ZW50ID0gJGhtLT5nZXRGbGF0TGlzdCgpOwogICAgcmV0dXJuICRjb250ZW50OwogIH0KCiAgZnVuY3Rpb24gJmdldEFsbENvbnRlbnQoKQogIHsKICAgICRnQ21zID0gY21zbXMoKTsKICAgICRjb250ZW50ID0gYXJyYXkoKTsKICAgICRobSA9ICRnQ21zLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CgogICAgJHJuID0gJGhtLT5HZXRSb290Tm9kZSgpOwogICAgJGNvdW50ID0gMDsKICAgICRobS0+Z2V0RmxhdHRlbmVkQ2hpbGRyZW4oJHJuLCAkY29udGVudCwgJGNvdW50KTsKICAgIHJldHVybiAkY29udGVudDsKICB9CgogICAvLyBkZXByZWNhdGVkCi8vICBmdW5jdGlvbiBnZXRVc2VyQXR0cmlidXRlcygkZ2xvYmFsX3JlZiA9ICdjYXRhbG9nX2F0dHJzJykKLy8gIHsKLy8gICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKLy8gICAgaWYoIWlzc2V0KCR0aGlzLT5hdHRyc1skZ2xvYmFsX3JlZl0pIHx8ICFpc19hcnJheSgkdGhpcy0+YXR0cnNbJGdsb2JhbF9yZWZdKSApCi8vICAgIHsKLy8gICAgICAkdGhpcy0+YXR0cnNbJGdsb2JhbF9yZWZdID0gYXJyYXkoKTsKLy8gICAgICAkcXVlcnkgPSAiU0VMRUNUIGF0dHJpYnV0ZSwgYWxpYXMsIGRlZmF1bHR2YWwsIGxlbmd0aCwgZmllbGRfdHlwZSwgc2VsZWN0X3ZhbHVlcyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfY2F0YWxvZ19hdHRyIFdIRVJFIHR5cGVfaWQ9PyBPUkRFUiBCWSBvcmRlcl9ieSBBU0MiOwovLyAgICAgICR0eXBlX2lkID0gMTsKLy8gICAgICAKLy8gICAgICBpZigkZ2xvYmFsX3JlZiA9PSAnY2F0YWxvZ19jYXRfYXR0cnMnKQovLyAgICAgIHsKLy8gICAgICAgICR0eXBlX2lkID0gMjsKLy8gICAgICB9Ci8vICAgICAgZWxzZWlmKCRnbG9iYWxfcmVmID09ICdjYXRhbG9nX3ByaW50X2F0dHJzJykKLy8gICAgICB7Ci8vICAgICAgICAkdHlwZV9pZCA9IDM7Ci8vICAgICAgfQovLyAgICAgIAovLyAgICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0eXBlX2lkKSApOwovLyAgICAgIAovLyAgICAgIHdoaWxlKCRkYnJlc3VsdCAhPT0gZmFsc2UgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApCi8vICAgICAgewovLyAgICAgICAgJHRoaXNBdHRyID0gbmV3IHN0ZENsYXNzKCk7Ci8vICAgICAgICAkdGhpc0F0dHItPmF0dHIgPSAkcm93WydhdHRyaWJ1dGUnXTsKLy8gICAgICAgICR0aGlzQXR0ci0+YWxpYXMgPSAkcm93WydhbGlhcyddOwovLyAgICAgICAgJHRoaXNBdHRyLT5sZW5ndGggPSAkcm93WydsZW5ndGgnXTsKLy8gICAgICAgICR0aGlzQXR0ci0+ZGVmYXVsdCA9ICRyb3dbJ2RlZmF1bHR2YWwnXTsKLy8gICAgICAgICR0aGlzQXR0ci0+c2VsZWN0X3ZhbHVlcyA9ICRyb3dbJ3NlbGVjdF92YWx1ZXMnXTsKLy8gICAgICAgICR0aGlzQXR0ci0+ZmllbGRfdHlwZSA9ICRyb3dbJ2ZpZWxkX3R5cGUnXTsKLy8gICAgICAgICR0aGlzQXR0ci0+c2FmZSA9IHN0cnRvbG93ZXIocHJlZ19yZXBsYWNlKCcvXFcvJywgJycsICRyb3dbJ2F0dHJpYnV0ZSddKSApOwovLyAgICAgICAgYXJyYXlfcHVzaCgkdGhpcy0+YXR0cnNbJGdsb2JhbF9yZWZdLCAkdGhpc0F0dHIpOwovLyAgICAgIH0KLy8gICAgfQovLyAgICAKLy8gICAgcmV0dXJuICR0aGlzLT5hdHRyczsKLy8gIH0KCiAgZnVuY3Rpb24gJmdldENhdGFsb2dJdGVtKCRhbGlhcykKICB7CiAgICAkZ0NtcyA9IGNtc21zKCk7CgogICAgJGhtID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgICRwYWdlTm9kZSA9ICRobS0+c3VyZUdldE5vZGVCeUFsaWFzKCRhbGlhcyk7CiAgICAkcGFnZSA9ICRwYWdlTm9kZS0+R2V0Q29udGVudCgpOwogICAgJG5vZGUgPSAkdGhpcy0+aXRlbVRvQXJyYXkoJHBhZ2UsICcnKTsKICAgIHJldHVybiAkbm9kZTsKICB9CgogIGZ1bmN0aW9uICYgZ2V0Q2F0YWxvZ0l0ZW1CeUlkKCRpZCkKICB7CiAgICAkZ0NtcyA9IGNtc21zKCk7CgogICAgJGhtID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgICRwYWdlTm9kZSA9ICRobS0+c3VyZUdldE5vZGVCeUlkKCRpZCk7CiAgICAkcGFnZSA9ICRwYWdlTm9kZS0+R2V0Q29udGVudCgpOwogICAgJG5vZGUgPSAkdGhpcy0+aXRlbVRvQXJyYXkoJHBhZ2UsICcnKTsKICAgIHJldHVybiAkbm9kZTsKICB9CgoKICBmdW5jdGlvbiBzbWFydHlCYXNpY3MoKQogIHsKICAgICRjb25maWcgPSAkdGhpcy0+R2V0Q29uZmlnKCk7CiAgICAkc21hcnR5ID0gJHRoaXMtPkdldEFjdGlvblRlbXBsYXRlT2JqZWN0KCk7CiAgICAKICAgIGlmKCBlbXB0eSgkc21hcnR5KSApICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgIAogICAgIyBkZXByZWNhdGVkCiAgICAvLyRzbWFydHktPmFzc2lnbignaW1hZ2Vfcm9vdCcsICRjb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL0NhdGFsb2dlci9DYXRhbG9nZXIuSW1hZ2UucGhwJyk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2ltYWdlX3Jvb3QnLCAnJyk7CiAgICAKICAgICMgZGVwcmVjYXRlZAogICAgLy8kc21hcnR5LT5hc3NpZ24oJ3Jvb3RfdXJsJywgJGNvbmZpZ1sncm9vdF91cmwnXSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ3Jvb3RfdXJsJywgJycpOwogICAgCiAgICAvLyB0eXBlIGNhbiBiZSAicyIgLSBzb3VyY2UgaW1hZ2UsICJpIiAtIHByb2Nlc3NlZCBpbWFnZSwgb3IgImYiIC0gZmlsZQogICAgJHNtYXJ0eS0+YXNzaWduKCAnb3JpZ2luYWxfaW1hZ2VzX3BhdGgnLCBjYXRGaWxlc09wZXJhdGlvbnM6OmdldEFzc2V0UGF0aCgncycpICk7CiAgICAkc21hcnR5LT5hc3NpZ24oICdwcm9jZXNzZWRfaW1hZ2VzX3BhdGgnLCBjYXRGaWxlc09wZXJhdGlvbnM6OmdldEFzc2V0UGF0aCgnaScpICk7CiAgICAkc21hcnR5LT5hc3NpZ24oICdmaWxlc19wYXRoJywgY2F0RmlsZXNPcGVyYXRpb25zOjpnZXRBc3NldFBhdGgoJ2YnKSApOyAKICB9CgogIC8vIG1vcmUgZml4ZXMgbmVlZGVkIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXz4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+CiAgZnVuY3Rpb24gZ2V0Q2F0YWxvZ0l0ZW1zSURMaXN0KCYkcGFyYW1zKQogIHsKICAgICRnQ21zID0gY21zbXMoKTsKICAgICRkYiA9ICRnQ21zLT5HZXREYigpOwogICAgJHJldCA9IGFycmF5KCk7CiAgICAKICAgIGlmKCFpc3NldCgkcGFyYW1zWydhbGlhcyddKSB8fCAkcGFyYW1zWydhbGlhcyddID09ICcvJykKICAgIHsKICAgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCdTRUxFQ1QgY29udGVudF9pZCBmcm9tICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50IHdoZXJlIHR5cGU9XCdjYXRhbG9naXRlbVwnJyk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICRiYXNlX2hpZXJhcmNoeSA9ICRkYi0+R2V0T25lKCdTRUxFQ1QgaGllcmFyY2h5IGZyb20gJy5jbXNfZGJfcHJlZml4KCkuJ2NvbnRlbnQgd2hlcmUgY29udGVudF9hbGlhcz0/JywgYXJyYXkoJHBhcmFtc1snYWxpYXMnXSkgKTsKICAgICAgCiAgICAgIGlmKCEkYmFzZV9oaWVyYXJjaHkpCiAgICAgIHsKICAgICAgICByZXR1cm4gJHJldDsKICAgICAgfQogICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NFTEVDVCBjb250ZW50X2lkIGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAnY29udGVudCB3aGVyZSB0eXBlPVwnY2F0YWxvZ2l0ZW1cJyBhbmQgaGllcmFyY2h5IExJS0UgXCcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkYmFzZV9oaWVyYXJjaHkuJyVcJycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgIH0KICAgIAogICAgd2hpbGUoJGRicmVzdWx0ICE9PSBmYWxzZSAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgIHsKICAgICAgYXJyYXlfcHVzaCgkcmV0LCAkcm93Wydjb250ZW50X2lkJ10pOwogICAgfQogICAgCiAgICByZXR1cm4gJHJldDsKICB9CgogIGZ1bmN0aW9uIGdldENhdGFsb2dJdGVtc0xpc3QoJiRwYXJhbXMpCiAgewogICAgJGdDbXMgPSBjbXNtcygpOwogICAgJHZhcnMgPSAkdGhpcy0+R2V0VmFyaWFibGVzKCk7CgogICAgJGhtID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgICRsYXN0Y2F0ID0gIiI7CiAgICAkbGFzdGNhdGZ1bGwgPSBudWxsOwoKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2FsaWFzJ10pICYmICRwYXJhbXNbJ2FsaWFzJ10gPT0gJy8nKQogICAgewogICAgICAkY29udGVudCA9ICRobS0+Z2V0RmxhdExpc3QoKTsKICAgICAgJGN1ckhpZXJEZXB0aCA9IGlzc2V0KCRwYXJhbXNbJ3N0YXJ0X2RlcHRoJ10pID8gJHBhcmFtc1snc3RhcnRfZGVwdGgnXTogIC0gMTsKICAgICAgJGN1ckhpZXJhcmNoeSA9ICcnOwogICAgICAkY3VySGllckxlbiA9IDA7CiAgICAgICRjdXJQYWdlID0gbmV3IENNU01vZHVsZUNvbnRlbnRUeXBlKCk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2NvbnRlbnRfaWQnXSkgKQogICAgICB7CiAgICAgICAgJGN1clBhZ2VJRCA9ICR2YXJzWyRwYXJhbXNbJ2NvbnRlbnRfaWQnXV07CiAgICAgICAgJGN1clBhZ2VOb2RlID0gJGhtLT5zdXJlR2V0Tm9kZUJ5SWQoJGN1clBhZ2VJRCk7CiAgICAgICAgJGN1clBhZ2UgPSAkY3VyUGFnZU5vZGUtPkdldENvbnRlbnQoKTsKICAgICAgfQogICAgICBlbHNlaWYoaXNzZXQoJHBhcmFtc1snYWxpYXMnXSkgKQogICAgICB7CiAgICAgICAgJGN1clBhZ2VOb2RlID0gJGhtLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJHBhcmFtc1snYWxpYXMnXSk7CiAgICAgICAgJGN1clBhZ2UgPSAkY3VyUGFnZU5vZGUtPkdldENvbnRlbnQoKTsKICAgICAgICAkY3VyUGFnZUlEID0gJGN1clBhZ2UtPklkKCk7CiAgICAgIH0KICAgICAgZWxzZWlmKGlzc2V0KCRnQ21zLT52YXJpYWJsZXNbJ2NvbnRlbnRfaWQnXSkgKQogICAgICB7CiAgICAgICAgJGN1clBhZ2VJRCA9ICRnQ21zLT52YXJpYWJsZXNbJ2NvbnRlbnRfaWQnXTsKICAgICAgICAkY3VyUGFnZU5vZGUgPSAkaG0tPnN1cmVHZXROb2RlQnlJZCgkY3VyUGFnZUlEKTsKICAgICAgICAkY3VyUGFnZSA9ICRjdXJQYWdlTm9kZS0+R2V0Q29udGVudCgpOwogICAgICB9CgogICAgICAkY3VySGllcmFyY2h5ID0gJGN1clBhZ2UtPkhpZXJhcmNoeSgpOwogICAgICAkY3VySGllckxlbiA9IHN0cmxlbigkY3VySGllcmFyY2h5KTsKICAgICAgJGN1ckhpZXJEZXB0aCA9IHN1YnN0cl9jb3VudCgkY3VySGllcmFyY2h5LCAnLicpOwogICAgICAkY29udGVudCA9ICR0aGlzLT5nZXRTdWJDb250ZW50KCRjdXJQYWdlSUQpOwogICAgfQoKICAgICRjYXRlZ29yeUl0ZW1zID0gYXJyYXkoKTsKCiAgICBmb3JlYWNoKCRjb250ZW50IGFzICR0aGlzUGFnZSkKICAgIHsKICAgICAgJHRoaXNwYWdlY29udGVudCA9ICR0aGlzUGFnZS0+R2V0Q29udGVudCgpOwoKICAgICAgaWYoISR0aGlzcGFnZWNvbnRlbnQpCiAgICAgIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgaWYobWV0aG9kX2V4aXN0cygkdGhpc3BhZ2Vjb250ZW50LCAnQWN0aXZlJykgJiYgISR0aGlzcGFnZWNvbnRlbnQtPkFjdGl2ZSgpICkKICAgICAgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBpZigkdGhpc3BhZ2Vjb250ZW50LT5JZCgpID09ICRjdXJQYWdlLT5JZCgpICkKICAgICAgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICAkdHlwZV9vayA9IGZhbHNlOwogICAgICAkZGVwdGhfb2sgPSBmYWxzZTsKCiAgICAgIGlmKCR0aGlzcGFnZWNvbnRlbnQtPlR5cGUoKSA9PSAnY29udGVudGFsaWFzJykKICAgICAgewogICAgICAgICR0aGlzcGFnZWNvbnRlbnQgPSAkdGhpc3BhZ2Vjb250ZW50LT5HZXRBbGlhc0NvbnRlbnQoKTsKICAgICAgICAkY3VySGllckxlbiA9IHN0cmxlbigkY3VySGllcmFyY2h5KTsKICAgICAgICAkY3VySGllckRlcHRoID0gc3Vic3RyX2NvdW50KCRjdXJIaWVyYXJjaHksICcuJyk7CiAgICAgIH0KCiAgICAgIGlmKCR0aGlzcGFnZWNvbnRlbnQtPlR5cGUoKSA9PSAnY2F0YWxvZ2NhdGVnb3J5JykKICAgICAgewogICAgICAgICRsYXN0Y2F0ID0gJHRoaXNwYWdlY29udGVudC0+TmFtZSgpOwogICAgICAgIC8vZGVidWdfZGlzcGxheSgkdGhpc3BhZ2Vjb250ZW50KTsKICAgICAgfQoKICAgICAgaWYoJHRoaXNwYWdlY29udGVudC0+VHlwZSgpID09ICdjYXRhbG9naXRlbScgJiYgKCRwYXJhbXNbJ3JlY3Vyc2UnXSA9PQogICAgICAgICdpdGVtc19vbmUnIHx8ICRwYXJhbXNbJ3JlY3Vyc2UnXSA9PSAnaXRlbXNfYWxsJyB8fCAkcGFyYW1zWydyZWN1cnNlJ10KICAgICAgICA9PSAnbWl4ZWRfb25lJyB8fCAkcGFyYW1zWydyZWN1cnNlJ10gPT0gJ21peGVkX2FsbCcKICAgICAgKSkKICAgICAgewogICAgICAgICR0eXBlX29rID0gdHJ1ZTsKICAgICAgfQogICAgICBlbHNlIGlmKCR0aGlzcGFnZWNvbnRlbnQtPlR5cGUoKSA9PSAnY2F0YWxvZ2NhdGVnb3J5JyAmJgogICAgICAgICgkcGFyYW1zWydyZWN1cnNlJ10gPT0gJ2NhdGVnb3JpZXNfb25lJyB8fCAkcGFyYW1zWydyZWN1cnNlJ10gPT0KICAgICAgICAnY2F0ZWdvcmllc19hbGwnIHx8ICRwYXJhbXNbJ3JlY3Vyc2UnXSA9PSAnbWl4ZWRfb25lJyB8fAogICAgICAgICRwYXJhbXNbJ3JlY3Vyc2UnXSA9PSAnbWl4ZWRfYWxsJwogICAgICApKQogICAgICB7CiAgICAgICAgJHR5cGVfb2sgPSB0cnVlOwogICAgICB9CgogICAgICBpZighJHR5cGVfb2spCiAgICAgIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgaWYoKCRwYXJhbXNbJ3JlY3Vyc2UnXSA9PSAnaXRlbXNfb25lJyB8fCAkcGFyYW1zWydyZWN1cnNlJ10gPT0KICAgICAgICAnY2F0ZWdvcmllc19vbmUnIHx8ICRwYXJhbXNbJ3JlY3Vyc2UnXSA9PSAnbWl4ZWRfb25lJykgJiYgc3Vic3RyX2NvdW50CiAgICAgICAgKCR0aGlzcGFnZWNvbnRlbnQtPkhpZXJhcmNoeSgpLCAnLicpID09ICgkY3VySGllckRlcHRoICsgMSkgJiYgc3Vic3RyCiAgICAgICAgKCR0aGlzcGFnZWNvbnRlbnQtPkhpZXJhcmNoeSgpLCAwLCAkY3VySGllckxlbiArIDEpID09ICRjdXJIaWVyYXJjaHkuJy4nCiAgICAgICkKICAgICAgewogICAgICAgICRkZXB0aF9vayA9IHRydWU7CiAgICAgIH0KICAgICAgZWxzZWlmKCAoaXNzZXQoJHBhcmFtc1snYWxpYXMnXSkgJiYgJHBhcmFtc1snYWxpYXMnXSA9PSAnLycpIHx8ICgKICAgICAgICAoJHBhcmFtc1sncmVjdXJzZSddID09ICdpdGVtc19hbGwnIHx8ICRwYXJhbXNbJ3JlY3Vyc2UnXSA9PQogICAgICAgICdjYXRlZ29yaWVzX2FsbCcgfHwgJHBhcmFtc1sncmVjdXJzZSddID09ICdtaXhlZF9hbGwnKSAmJiBzdWJzdHIKICAgICAgICAoJHRoaXNwYWdlY29udGVudC0+SGllcmFyY2h5KCksIDAsICRjdXJIaWVyTGVuICsgMSkgPT0gJGN1ckhpZXJhcmNoeS4nLicKICAgICAgKSkKICAgICAgewogICAgICAgICRkZXB0aF9vayA9IHRydWU7CiAgICAgIH0KCgogICAgICBpZighJGRlcHRoX29rKQogICAgICB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIC8vIGluIHRoZSBjYXRlZ29yeSwgYW5kIGFwcHJvdmVkIGZvciBhZGRpdGlvbgogICAgICAkdGhpc0l0ZW0gPSAkdGhpcy0+aXRlbVRvQXJyYXkoJHRoaXNwYWdlY29udGVudCwgJGxhc3RjYXQpOwogICAgICBhcnJheV9wdXNoKCRjYXRlZ29yeUl0ZW1zLCAkdGhpc0l0ZW0pOwogICAgfQoKICAgIHJldHVybiBhcnJheSgkY3VyUGFnZSwgJGNhdGVnb3J5SXRlbXMpOwogIH0KCiAgZnVuY3Rpb24gaXRlbVRvQXJyYXkoJHBhZ2Vjb250ZW50LCAkbGFzdGNhdCkKICB7CiAgICAkdGhpc0l0ZW0gPSBhcnJheSgpOwogICAgJGNhdFRodW1iU2l6ZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjYXRlZ29yeV9pbWFnZV9zaXplX3RodW1ibmFpbCcsIDkwKTsKICAgICRpdGVtVGh1bWJTaXplID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRlZ29yeScsIDcwKTsKICAgICRtaXNzaW5nSW1hZ2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnc2hvd19taXNzaW5nJywgJzEnKTsKICAgIHN3aXRjaCgkcGFnZWNvbnRlbnQtPlR5cGUoKSApCiAgICB7CiAgICAgIGNhc2UgJ2NhdGFsb2dpdGVtJzoKICAgICAgICAkdGhpc0l0ZW1bJ2ltYWdlJ10gPSAkdGhpcy0+aW1hZ2VTcGVjKCRwYWdlY29udGVudC0+QWxpYXMoKSwgJ3MnLCAxLCAkaXRlbVRodW1iU2l6ZSk7CiAgICAgICAgJHRoaXNJdGVtWydpbWFnZV9zcmMnXSA9ICR0aGlzLT5zcmNJbWFnZVNwZWMoJHBhZ2Vjb250ZW50LT5BbGlhcygpLCAxKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnY2F0YWxvZ2NhdGVnb3J5JzoKICAgICAgICAkdGhpc0l0ZW1bJ2ltYWdlJ10gPSAkdGhpcy0+aW1hZ2VTcGVjKCRwYWdlY29udGVudC0+QWxpYXMoKSwgJ2N0JywgMSwgJGNhdFRodW1iU2l6ZSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICAkdGhpc0l0ZW1bJ2xpbmsnXSA9ICRwYWdlY29udGVudC0+R2V0VXJsKCk7CiAgICAkdGhpc0l0ZW1bJ3RpdGxlJ10gPSAkcGFnZWNvbnRlbnQtPk5hbWUoKTsKICAgICR0aGlzSXRlbVsnYWxpYXMnXSA9ICRwYWdlY29udGVudC0+QWxpYXMoKTsKICAgICR0aGlzSXRlbVsnbWVudXRpdGxlJ10gPSAkcGFnZWNvbnRlbnQtPk1lbnVUZXh0KCk7CiAgICAkdGhpc0l0ZW1bJ21vZGlmaWVkZGF0ZSddID0gJHBhZ2Vjb250ZW50LT5HZXRNb2RpZmllZERhdGUoKTsKICAgICR0aGlzSXRlbVsnY2F0ZWdvcnknXSA9ICRsYXN0Y2F0OwogICAgJHRoaXNJdGVtWydjYXQnXSA9ICRsYXN0Y2F0OwogICAgJHRoaXNJdGVtWydjcmVhdGVkYXRlJ10gPSAkcGFnZWNvbnRlbnQtPkdldENyZWF0aW9uRGF0ZSgpOwogICAgJHRoaXNJdGVtWydhdHRycyddID0gYXJyYXkoKTsKICAgICR0aGVzZUF0dHJzID0gJHBhZ2Vjb250ZW50LT5nZXRBdHRycygpOwogICAgZm9yZWFjaCgkdGhlc2VBdHRycyBhcyAkdGhpc0F0dHIpCiAgICB7CiAgICAgIC8vJHNhZmVhdHRyID0gc3RydG9sb3dlcihwcmVnX3JlcGxhY2UoJy9cVy8nLCcnLCR0aGlzQXR0ci0+YXR0cikpOwogICAgICAkdGhpc0l0ZW1bJHRoaXNBdHRyLT5zYWZlXSA9ICRwYWdlY29udGVudC0+R2V0UHJvcGVydHlWYWx1ZSgkdGhpc0F0dHItPmF0dHIpOwogICAgICAkdGhpc0l0ZW1bJ2F0dHJzJ11bJHRoaXNBdHRyLT5zYWZlXSA9ICRwYWdlY29udGVudC0+R2V0UHJvcGVydHlWYWx1ZSgkdGhpc0F0dHItPmF0dHIpOwogICAgICBpZihpc3NldCgkdGhpc0F0dHItPmFsaWFzKSAmJiAkdGhpc0F0dHItPmFsaWFzICE9ICcnKQogICAgICB7CiAgICAgICAgJHRoaXNJdGVtWyR0aGlzQXR0ci0+YWxpYXNdID0gJHBhZ2Vjb250ZW50LT5HZXRQcm9wZXJ0eVZhbHVlKCR0aGlzQXR0ci0+YXR0cik7CiAgICAgICAgJHRoaXNJdGVtWydhdHRycyddWyR0aGlzQXR0ci0+YWxpYXNdID0gJHBhZ2Vjb250ZW50LT5HZXRQcm9wZXJ0eVZhbHVlKCR0aGlzQXR0ci0+YXR0cik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkdGhpc0l0ZW07CgogIH0KCgogIGZ1bmN0aW9uIGltYWdlU3BlYygkYWxpYXMsICR0eXBlLCAkaW1hZ2VfbnVtYmVyLCAkc2l6ZSwgJGFudGljYWNoZSA9IHRydWUsICRmb3JjZXNob3dtaXNzaW5nID0gZmFsc2UpCiAgewogICAgJGNvbmZpZyA9ICR0aGlzLT5HZXRDb25maWcoKTsKICAgIGlmKCR0aGlzLT5zaG93TWlzc2luZyA9PSAnJykKICAgIHsKICAgICAgJHRoaXMtPnNob3dNaXNzaW5nID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3Nob3dfbWlzc2luZycsICcxJyk7CiAgICB9CiAgICAkZXh0ZW5kZXIgPSAnJzsKICAgIGlmKCRhbnRpY2FjaGUpCiAgICB7CiAgICAgICRleHRlbmRlciA9ICcmYW1wO2FjPSc7CiAgICAgIGZvcigkciA9IDA7ICRyIDwgNTsgJHIrKykKICAgICAgewogICAgICAgICRleHRlbmRlciAuPSByYW5kKDAsIDkpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuICRjb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL0NhdGFsb2dlci9DYXRhbG9nZXIuSW1hZ2UucGhwP2k9Jy4kYWxpYXMuJ18nLiR0eXBlLidfJy4kaW1hZ2VfbnVtYmVyLiAnXycuJHNpemUuKCRmb3JjZXNob3dtaXNzaW5nID8gJ18xJyA6ICdfJy4kdGhpcy0+c2hvd01pc3NpbmcpLicuanBnJy4kZXh0ZW5kZXI7CiAgfQoKICBmdW5jdGlvbiBzcmNJbWFnZVNwZWMoJGFsaWFzLCAkaW1hZ2VfbnVtYmVyKQogIHsKICAgICRjb25maWcgPSAkdGhpcy0+R2V0Q29uZmlnKCk7CiAgICBpZigkdGhpcy0+c2hvd01pc3NpbmcgPT0gJycpCiAgICB7CiAgICAgICR0aGlzLT5zaG93TWlzc2luZyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzaG93X21pc3NpbmcnLCAnMScpOwogICAgfQoKICAgIGlmKCEkdGhpcy0+c3JjRXhpc3RzKCRhbGlhcywgJGltYWdlX251bWJlcikgKQogICAgewogICAgICBpZigkdGhpcy0+c2hvd01pc3NpbmcgIT0gJzEnKQogICAgICB7CiAgICAgICAgcmV0dXJuICRjb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL0NhdGFsb2dlci9pbWFnZXMvdHJhbnMuZ2lmJzsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICByZXR1cm4gJGNvbmZpZ1sncm9vdF91cmwnXS4nL21vZHVsZXMvQ2F0YWxvZ2VyL2ltYWdlcy9uby1pbWFnZS5naWYnOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHJldHVybiAkY29uZmlnWyd1cGxvYWRzX3VybCddLiR0aGlzLT5nZXRBc3NldFBhdGgoJ3MnKS4nLycuJGFsaWFzLidfc3JjXycuJGltYWdlX251bWJlci4nLmpwZyc7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzcmNFeGlzdHMoJGFsaWFzLCAkaW1hZ2VfbnVtYmVyKQogIHsKICAgICRjb25maWcgPSAkdGhpcy0+R2V0Q29uZmlnKCk7CiAgICAkc3JjU3BlYyA9ICRjb25maWdbJ3VwbG9hZHNfcGF0aCddLiR0aGlzLT5nZXRBc3NldFBhdGgoJ3MnKS4nLycuJGFsaWFzLidfc3JjXycuJGltYWdlX251bWJlci4nLmpwZyc7CiAgICByZXR1cm4gZmlsZV9leGlzdHMoJHNyY1NwZWMpOwogIH0KCgogIGZ1bmN0aW9uIGdldEZpbGVzKCRhbGlhcykKICB7CiAgICAkY29uZmlnID0gJHRoaXMtPkdldENvbmZpZygpOwoKICAgICRkaXJzcGVjID0gJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10uJHRoaXMtPmdldEFzc2V0UGF0aCgnZicpLicvJy4kYWxpYXM7CiAgICAkZmlsZXMgPSBhcnJheSgpOwogICAgJHR5cGVzID0gYXJyYXkoKTsKICAgIGlmKGlzX2RpcigkZGlyc3BlYykgKQogICAgewogICAgICAkZGggPSBvcGVuZGlyKCRkaXJzcGVjKTsKICAgICAgd2hpbGUoZmFsc2UgIT09ICgkZmlsZW5hbWUgPSByZWFkZGlyKCRkaCkgKSApCiAgICAgIHsKICAgICAgICBpZigkZmlsZW5hbWUgIT0gJy4nICYmICRmaWxlbmFtZSAhPSAnLi4nKQogICAgICAgIHsKICAgICAgICAgICRmaWxlc1tdID0gJGZpbGVuYW1lOwogICAgICAgICAgaWYoc3RycG9zKCRmaWxlbmFtZSwgJy4nKSAhPT0gZmFsc2UpCiAgICAgICAgICB7CiAgICAgICAgICAgICR0eXBlc1tdID0gc3Vic3RyKCRmaWxlbmFtZSwgc3RycnBvcygkZmlsZW5hbWUsICcuJykgKyAxKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgJHR5cGVzW10gPSAnPyc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gYXJyYXkoJGZpbGVzLCAkdHlwZXMpOwogIH0KCiAgZnVuY3Rpb24gcHVyZ2VBbGxJbWFnZSgkYWxpYXMsICRpbWFnZU51bWJlcikKICB7CiAgICAkdGhpcy0+cHVyZ2VTY2FsZWRJbWFnZXMoJGFsaWFzLCAkaW1hZ2VOdW1iZXIpOwogICAgJHRoaXMtPnB1cmdlU291cmNlSW1hZ2UoJGFsaWFzLCAkaW1hZ2VOdW1iZXIpOwogIH0KCiAgZnVuY3Rpb24gcHVyZ2VTY2FsZWRJbWFnZXMoJGFsaWFzLCAkaW1hZ2VOdW1iZXIpCiAgewogICAgJGNvbmZpZyA9ICR0aGlzLT5HZXRDb25maWcoKTsKICAgICRzcmNEaXIgPSAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXS4kdGhpcy0+Z2V0QXNzZXRQYXRoKCdmJykuJy8nOwogICAgJHRvRGVsID0gYXJyYXkoKTsKICAgIGlmKCRkaCA9IG9wZW5kaXIoJHNyY0RpcikgKQogICAgewogICAgICB3aGlsZSggKCRmaWxlID0gcmVhZGRpcigkZGgpICkgIT09IGZhbHNlKQogICAgICB7CiAgICAgICAgJGZpbGVQYXJ0cyA9IGV4cGxvZGUoJ18nLCAkZmlsZSk7CiAgICAgICAgaWYoJGZpbGVQYXJ0c1swXSA9PSAkYWxpYXMgJiYgJGZpbGVQYXJ0c1syXSA9PSAkaW1hZ2VOdW1iZXIpCiAgICAgICAgewogICAgICAgICAgYXJyYXlfcHVzaCgkdG9EZWwsICRzcmNEaXIuJy8nLiRmaWxlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xvc2VkaXIoJGRoKTsKICAgIH0KICAgIGZvcmVhY2goJHRvRGVsIGFzICR0aGlzRGVsKQogICAgewogICAgICB1bmxpbmsoJHRoaXNEZWwpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcHVyZ2VTb3VyY2VJbWFnZSgkYWxpYXMsICRpbWFnZU51bWJlcikKICB7CiAgICAkY29uZmlnID0gJHRoaXMtPkdldENvbmZpZygpOwogICAgJHNyY1NwZWMgPSAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXS4kdGhpcy0+Z2V0QXNzZXRQYXRoKCdzJykuJy8nLiRhbGlhcy4nX3NyY18nLiRpbWFnZU51bWJlci4nLmpwZyc7CiAgICB1bmxpbmsoJHNyY1NwZWMpOwogIH0KCgogIGZ1bmN0aW9uIHJlbmFtZUltYWdlcygkb2xkLCAkbmV3QWxpYXMpCiAgewogICAgJGNvbmZpZyA9ICR0aGlzLT5HZXRDb25maWcoKTsKICAgIGlmKCRoYW5kbGUgPSBvcGVuZGlyKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLiR0aGlzLT5nZXRBc3NldFBhdGgoJ3MnKS4nLycpICkKICAgIHsKICAgICAgd2hpbGUoZmFsc2UgIT09ICgkZmlsZSA9IHJlYWRkaXIoJGhhbmRsZSkgKSApCiAgICAgIHsKICAgICAgICBpZihzdWJzdHIoJGZpbGUsIDAsIHN0cmxlbigkb2xkKSApID09ICRvbGQpCiAgICAgICAgewogICAgICAgICAgJG5ld3NwZWMgPSAkbmV3QWxpYXMuc3Vic3RyKCRmaWxlLCBzdHJsZW4oJG9sZCkgKTsKICAgICAgICAgIHJlbmFtZSgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXS4kdGhpcy0+Z2V0QXNzZXRQYXRoKCdzJykuJy8nLiRmaWxlLCAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXS4kdGhpcy0+Z2V0QXNzZXRQYXRoKCdzJykuJy8nLiRuZXdzcGVjKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xvc2VkaXIoJGhhbmRsZSk7CiAgICB9CiAgfQoKCiAgZnVuY3Rpb24gZGlzcGxheUVycm9yKCRtZXNzYWdlKQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCRtZXNzYWdlKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZXJyb3IudHBsJyk7CiAgfQoKICBmdW5jdGlvbiBnZXRGaWVsZFR5cGVzKCkKICB7CiAgICByZXR1cm4gYXJyYXkoJ3RleHQnID0+ICR0aGlzLT5MYW5nKCd0ZXh0JyksICdzZWxlY3QnID0+ICR0aGlzLT5MYW5nKCdkcm9wZG93bicpLCAndGV4dGFyZWEnID0+ICR0aGlzLT5MYW5nKCd0ZXh0YXJlYScpLCAnY2hlY2tib3gnID0+ICR0aGlzLT5MYW5nKCdjaGVja2JveCcpKTsKICB9CgogIC8vIGRlcHJlY2F0ZWQKICBmdW5jdGlvbiBhdHRyaWJ1dGVJbnB1dCgkb3duZXIsICR0aGlzQXR0ciwgJHd5c2l3eWcgPSB0cnVlLCAkc3R5bGVzaGVldCA9ICcnKQogIHsKICAgICR2ID0gJG93bmVyLT5HZXRQcm9wZXJ0eVZhbHVlKCR0aGlzQXR0ci0+YXR0cik7CgogICAgaWYoZW1wdHkoJHYpICYmICFlbXB0eSgkdGhpc0F0dHItPmRlZmF1bHQpICkKICAgIHsKICAgICAgJHYgPSAkdGhpc0F0dHItPmRlZmF1bHQ7CiAgICB9CgogICAgaWYoJHRoaXNBdHRyLT5maWVsZF90eXBlID09ICdzZWxlY3QnKQogICAgewogICAgICAkc2VsZWN0X3ZhbHVlcyA9IGFycmF5KCk7CiAgICAgIGlmKGlzc2V0KCR0aGlzQXR0ci0+c2VsZWN0X3ZhbHVlcykgJiYgJHRoaXNBdHRyLT5zZWxlY3RfdmFsdWVzICE9ICcnKQogICAgICB7CiAgICAgICAgJHNlbGVjdF92YWx1ZXMgPSBhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCcsJywgaHRtbHNwZWNpYWxjaGFycygkdGhpc0F0dHItPnNlbGVjdF92YWx1ZXMsIEVOVF9RVU9URVMpICkgKTsKICAgICAgfQogICAgICAKICAgICAgJHRvX3JldCA9ICc8c2VsZWN0IHR5cGU9ImRyb3Bkb3duIiBuYW1lPSInLiR0aGlzQXR0ci0+c2FmZS4nIj4nOwogICAgICAKICAgICAgZm9yZWFjaCgkc2VsZWN0X3ZhbHVlcyBhcyAkb25lX3ZhbCkKICAgICAgewogICAgICAgICR0b19yZXQgLj0gJzxvcHRpb24gdmFsdWU9IicuJG9uZV92YWwuJyInOwogICAgICAgIGlmKGh0bWxzcGVjaWFsY2hhcnMoJHYsIEVOVF9RVU9URVMpID09ICRvbmVfdmFsKQogICAgICAgIHsKICAgICAgICAgICR0b19yZXQgLj0gJyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzsKICAgICAgICB9CiAgICAgICAgJHRvX3JldCAuPSAnPicuJG9uZV92YWwuJzwvb3B0aW9uPic7CiAgICAgIH0KICAgICAgCiAgICAgICR0b19yZXQgLj0gJzwvc2VsZWN0Pic7CiAgICAgIAogICAgICByZXR1cm4gYXJyYXkoJHRoaXNBdHRyLT5hdHRyLCAkdG9fcmV0KTsKICAgIH0KICAgIGVsc2UgaWYoJHRoaXNBdHRyLT5maWVsZF90eXBlID09ICd0ZXh0YXJlYScpCiAgICB7CiAgICAgIHJldHVybiBhcnJheSgkdGhpc0F0dHItPmF0dHIsIGNyZWF0ZV90ZXh0YXJlYSgkd3lzaXd5ZywgJHYsICR0aGlzQXR0ci0+c2FmZSwgJycsICR0aGlzQXR0ci0+YXR0ciwgJycsICRzdHlsZXNoZWV0LCA4MCwgMTApICk7CiAgICB9CiAgICBlbHNlIGlmKCR0aGlzQXR0ci0+ZmllbGRfdHlwZSA9PSAnY2hlY2tib3gnKQogICAgewogICAgICBpZihpc3NldCgkdGhpc0F0dHItPnNlbGVjdF92YWx1ZXMpICYmIHN0cnBvcygkdGhpc0F0dHItPnNlbGVjdF92YWx1ZXMsICcsJykgIT09IGZhbHNlKQogICAgICB7CiAgICAgICAgbGlzdCgkaXMsICRpc250KSA9IGV4cGxvZGUoJywnLCAkdGhpc0F0dHItPnNlbGVjdF92YWx1ZXMpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICRpcyA9ICdZZXMnOwogICAgICAgICRpc250ID0gJ05vJzsKICAgICAgfQogICAgICAKICAgICAgJHRvX3JldCA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInLiR0aGlzQXR0ci0+c2FmZS4nIiB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRpc250LCBFTlRfUVVPVEVTKS4nIi8+JzsKICAgICAgJHRvX3JldCAuPSAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iJy4kdGhpc0F0dHItPnNhZmUgLiciIG5hbWU9IicuJHRoaXNBdHRyLT5zYWZlLiciIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJGlzLCBFTlRfUVVPVEVTKS4nIic7CiAgICAgIAogICAgICBpZigkdiA9PSAkaXMpCiAgICAgIHsKICAgICAgICAkdG9fcmV0IC49ICcgY2hlY2tlZD0iY2hlY2tlZCInOwogICAgICB9CiAgICAgICR0b19yZXQgLj0gJz48bGFiZWwgZm9yPSInLiR0aGlzQXR0ci0+c2FmZS4nIj4nLiRpcy4nPC9sYWJlbD4nOwogICAgICByZXR1cm4gYXJyYXkoJHRoaXNBdHRyLT5hdHRyLCAkdG9fcmV0KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJGwgPSAkdGhpc0F0dHItPmxlbmd0aDsKCiAgICAgIGlmKGVtcHR5KCRsKSApCiAgICAgIHsKICAgICAgICAkbCA9IDI1OwogICAgICAgICRtID0gMTAyNDsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkbSA9ICRsOwogICAgICB9CiAgICAgIHJldHVybiBhcnJheSgkdGhpc0F0dHItPmF0dHIsICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJy4kdGhpc0F0dHItPnNhZmUuJyIgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdiwgRU5UX1FVT1RFUykuJyIgc2l6ZT0iJy4kbC4nIiBtYXhsZW5ndGg9IicuJG0uJyIgLz4nKTsKICAgIH0KICB9Cgp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/docs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/docs/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQ0KICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNw0KDQogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPg0KIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcw0KIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUNCg0KICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcg0Kc29mdHdhcmUgYW5kIG90aGVyIGtpbmRzIG9mIHdvcmtzLg0KDQogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZA0KdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSB3b3Jrcy4gIEJ5IGNvbnRyYXN0LA0KdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8NCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQ0Kc29mdHdhcmUgZm9yIGFsbCBpdHMgdXNlcnMuICBXZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdXNlIHRoZQ0KR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vc3Qgb2Ygb3VyIHNvZnR3YXJlOyBpdCBhcHBsaWVzIGFsc28gdG8NCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bw0KeW91ciBwcm9ncmFtcywgdG9vLg0KDQogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QNCnByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UNCmhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3INCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91DQp3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldw0KZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuDQoNCiAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBwcmV2ZW50IG90aGVycyBmcm9tIGRlbnlpbmcgeW91DQp0aGVzZSByaWdodHMgb3IgYXNraW5nIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gIFRoZXJlZm9yZSwgeW91IGhhdmUNCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZg0KeW91IG1vZGlmeSBpdDogcmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IHRoZSBmcmVlZG9tIG9mIG90aGVycy4NCg0KICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyDQpncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lDQpmcmVlZG9tcyB0aGF0IHlvdSByZWNlaXZlZC4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZQ0Kb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkNCmtub3cgdGhlaXIgcmlnaHRzLg0KDQogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoNCigxKSBhc3NlcnQgY29weXJpZ2h0IG9uIHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBMaWNlbnNlDQpnaXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0Lg0KDQogIEZvciB0aGUgZGV2ZWxvcGVycycgYW5kIGF1dGhvcnMnIHByb3RlY3Rpb24sIHRoZSBHUEwgY2xlYXJseSBleHBsYWlucw0KdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiAgRm9yIGJvdGggdXNlcnMnIGFuZA0KYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcw0KY2hhbmdlZCwgc28gdGhhdCB0aGVpciBwcm9ibGVtcyB3aWxsIG5vdCBiZSBhdHRyaWJ1dGVkIGVycm9uZW91c2x5IHRvDQphdXRob3JzIG9mIHByZXZpb3VzIHZlcnNpb25zLg0KDQogIFNvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4NCm1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZSBpbnNpZGUgdGhlbSwgYWx0aG91Z2ggdGhlIG1hbnVmYWN0dXJlcg0KY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YNCnByb3RlY3RpbmcgdXNlcnMnIGZyZWVkb20gdG8gY2hhbmdlIHRoZSBzb2Z0d2FyZS4gIFRoZSBzeXN0ZW1hdGljDQpwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvciBpbmRpdmlkdWFscyB0bw0KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlDQpoYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lvbiBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZSBwcmFjdGljZSBmb3IgdGhvc2UNCnByb2R1Y3RzLiAgSWYgc3VjaCBwcm9ibGVtcyBhcmlzZSBzdWJzdGFudGlhbGx5IGluIG90aGVyIGRvbWFpbnMsIHdlDQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMNCm9mIHRoZSBHUEwsIGFzIG5lZWRlZCB0byBwcm90ZWN0IHRoZSBmcmVlZG9tIG9mIHVzZXJzLg0KDQogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuDQpTdGF0ZXMgc2hvdWxkIG5vdCBhbGxvdyBwYXRlbnRzIHRvIHJlc3RyaWN0IGRldmVsb3BtZW50IGFuZCB1c2Ugb2YNCnNvZnR3YXJlIG9uIGdlbmVyYWwtcHVycG9zZSBjb21wdXRlcnMsIGJ1dCBpbiB0aG9zZSB0aGF0IGRvLCB3ZSB3aXNoIHRvDQphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQNCm1ha2UgaXQgZWZmZWN0aXZlbHkgcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHRoZSBHUEwgYXNzdXJlcyB0aGF0DQpwYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgcHJvZ3JhbSBub24tZnJlZS4NCg0KICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZA0KbW9kaWZpY2F0aW9uIGZvbGxvdy4NCg0KICAgICAgICAgICAgICAgICAgICAgICBURVJNUyBBTkQgQ09ORElUSU9OUw0KDQogIDAuIERlZmluaXRpb25zLg0KDQogICJUaGlzIExpY2Vuc2UiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLg0KDQogICJDb3B5cmlnaHQiIGFsc28gbWVhbnMgY29weXJpZ2h0LWxpa2UgbGF3cyB0aGF0IGFwcGx5IHRvIG90aGVyIGtpbmRzIG9mDQp3b3Jrcywgc3VjaCBhcyBzZW1pY29uZHVjdG9yIG1hc2tzLg0KDQogICJUaGUgUHJvZ3JhbSIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcw0KTGljZW5zZS4gIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgIkxpY2Vuc2VlcyIgYW5kDQoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuDQoNCiAgVG8gIm1vZGlmeSIgYSB3b3JrIG1lYW5zIHRvIGNvcHkgZnJvbSBvciBhZGFwdCBhbGwgb3IgcGFydCBvZiB0aGUgd29yaw0KaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuDQpleGFjdCBjb3B5LiAgVGhlIHJlc3VsdGluZyB3b3JrIGlzIGNhbGxlZCBhICJtb2RpZmllZCB2ZXJzaW9uIiBvZiB0aGUNCmVhcmxpZXIgd29yayBvciBhIHdvcmsgImJhc2VkIG9uIiB0aGUgZWFybGllciB3b3JrLg0KDQogIEEgImNvdmVyZWQgd29yayIgbWVhbnMgZWl0aGVyIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0gb3IgYSB3b3JrIGJhc2VkDQpvbiB0aGUgUHJvZ3JhbS4NCg0KICBUbyAicHJvcGFnYXRlIiBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0DQpwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yDQppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGENCmNvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gIFByb3BhZ2F0aW9uIGluY2x1ZGVzIGNvcHlpbmcsDQpkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZQ0KcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLg0KDQogIFRvICJjb252ZXkiIGEgd29yayBtZWFucyBhbnkga2luZCBvZiBwcm9wYWdhdGlvbiB0aGF0IGVuYWJsZXMgb3RoZXINCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaA0KYSBjb21wdXRlciBuZXR3b3JrLCB3aXRoIG5vIHRyYW5zZmVyIG9mIGEgY29weSwgaXMgbm90IGNvbnZleWluZy4NCg0KICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyINCnRvIHRoZSBleHRlbnQgdGhhdCBpdCBpbmNsdWRlcyBhIGNvbnZlbmllbnQgYW5kIHByb21pbmVudGx5IHZpc2libGUNCmZlYXR1cmUgdGhhdCAoMSkgZGlzcGxheXMgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSwgYW5kICgyKQ0KdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUNCmV4dGVudCB0aGF0IHdhcnJhbnRpZXMgYXJlIHByb3ZpZGVkKSwgdGhhdCBsaWNlbnNlZXMgbWF5IGNvbnZleSB0aGUNCndvcmsgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmDQp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQ0KbWVudSwgYSBwcm9taW5lbnQgaXRlbSBpbiB0aGUgbGlzdCBtZWV0cyB0aGlzIGNyaXRlcmlvbi4NCg0KICAxLiBTb3VyY2UgQ29kZS4NCg0KICBUaGUgInNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yaw0KZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQ0KZm9ybSBvZiBhIHdvcmsuDQoNCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwNCnN0YW5kYXJkIGRlZmluZWQgYnkgYSByZWNvZ25pemVkIHN0YW5kYXJkcyBib2R5LCBvciwgaW4gdGhlIGNhc2Ugb2YNCmludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0DQppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4NCg0KICBUaGUgIlN5c3RlbSBMaWJyYXJpZXMiIG9mIGFuIGV4ZWN1dGFibGUgd29yayBpbmNsdWRlIGFueXRoaW5nLCBvdGhlcg0KdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YNCnBhY2thZ2luZyBhIE1ham9yIENvbXBvbmVudCwgYnV0IHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoYXQgTWFqb3INCkNvbXBvbmVudCwgYW5kIChiKSBzZXJ2ZXMgb25seSB0byBlbmFibGUgdXNlIG9mIHRoZSB3b3JrIHdpdGggdGhhdA0KTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuDQppbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtLiAgQQ0KIk1ham9yIENvbXBvbmVudCIsIGluIHRoaXMgY29udGV4dCwgbWVhbnMgYSBtYWpvciBlc3NlbnRpYWwgY29tcG9uZW50DQooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtDQooaWYgYW55KSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSB3b3JrIHJ1bnMsIG9yIGEgY29tcGlsZXIgdXNlZCB0bw0KcHJvZHVjZSB0aGUgd29yaywgb3IgYW4gb2JqZWN0IGNvZGUgaW50ZXJwcmV0ZXIgdXNlZCB0byBydW4gaXQuDQoNCiAgVGhlICJDb3JyZXNwb25kaW5nIFNvdXJjZSIgZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbA0KdGhlIHNvdXJjZSBjb2RlIG5lZWRlZCB0byBnZW5lcmF0ZSwgaW5zdGFsbCwgYW5kIChmb3IgYW4gZXhlY3V0YWJsZQ0Kd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bw0KY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiAgSG93ZXZlciwgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgd29yaydzDQpTeXN0ZW0gTGlicmFyaWVzLCBvciBnZW5lcmFsLXB1cnBvc2UgdG9vbHMgb3IgZ2VuZXJhbGx5IGF2YWlsYWJsZSBmcmVlDQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQNCndoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgd29yay4gIEZvciBleGFtcGxlLCBDb3JyZXNwb25kaW5nIFNvdXJjZQ0KaW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3INCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQ0KbGlua2VkIHN1YnByb2dyYW1zIHRoYXQgdGhlIHdvcmsgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIHJlcXVpcmUsDQpzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZQ0Kc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLg0KDQogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMNCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZw0KU291cmNlLg0KDQogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdA0Kc2FtZSB3b3JrLg0KDQogIDIuIEJhc2ljIFBlcm1pc3Npb25zLg0KDQogIEFsbCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYXJlIGdyYW50ZWQgZm9yIHRoZSB0ZXJtIG9mDQpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZA0KY29uZGl0aW9ucyBhcmUgbWV0LiAgVGhpcyBMaWNlbnNlIGV4cGxpY2l0bHkgYWZmaXJtcyB5b3VyIHVubGltaXRlZA0KcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gIFRoZSBvdXRwdXQgZnJvbSBydW5uaW5nIGENCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cw0KY29udGVudCwgY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuICBUaGlzIExpY2Vuc2UgYWNrbm93bGVkZ2VzIHlvdXINCnJpZ2h0cyBvZiBmYWlyIHVzZSBvciBvdGhlciBlcXVpdmFsZW50LCBhcyBwcm92aWRlZCBieSBjb3B5cmlnaHQgbGF3Lg0KDQogIFlvdSBtYXkgbWFrZSwgcnVuIGFuZCBwcm9wYWdhdGUgY292ZXJlZCB3b3JrcyB0aGF0IHlvdSBkbyBub3QNCmNvbnZleSwgd2l0aG91dCBjb25kaXRpb25zIHNvIGxvbmcgYXMgeW91ciBsaWNlbnNlIG90aGVyd2lzZSByZW1haW5zDQppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlDQpvZiBoYXZpbmcgdGhlbSBtYWtlIG1vZGlmaWNhdGlvbnMgZXhjbHVzaXZlbHkgZm9yIHlvdSwgb3IgcHJvdmlkZSB5b3UNCndpdGggZmFjaWxpdGllcyBmb3IgcnVubmluZyB0aG9zZSB3b3JrcywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGgNCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvDQpub3QgY29udHJvbCBjb3B5cmlnaHQuICBUaG9zZSB0aHVzIG1ha2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzDQpmb3IgeW91IG11c3QgZG8gc28gZXhjbHVzaXZlbHkgb24geW91ciBiZWhhbGYsIHVuZGVyIHlvdXIgZGlyZWN0aW9uDQphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YNCnlvdXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5b3UuDQoNCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXINCnRoZSBjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4gIFN1YmxpY2Vuc2luZyBpcyBub3QgYWxsb3dlZDsgc2VjdGlvbiAxMA0KbWFrZXMgaXQgdW5uZWNlc3NhcnkuDQoNCiAgMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4NCg0KICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwNCm1lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZQ0KMTEgb2YgdGhlIFdJUE8gY29weXJpZ2h0IHRyZWF0eSBhZG9wdGVkIG9uIDIwIERlY2VtYmVyIDE5OTYsIG9yDQpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoDQptZWFzdXJlcy4NCg0KICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkDQpjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24NCmlzIGVmZmVjdGVkIGJ5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8NCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3INCm1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzDQp1c2VycywgeW91ciBvciB0aGlyZCBwYXJ0aWVzJyBsZWdhbCByaWdodHMgdG8gZm9yYmlkIGNpcmN1bXZlbnRpb24gb2YNCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuDQoNCiAgNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy4NCg0KICBZb3UgbWF5IGNvbnZleSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UNCnJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kDQphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7DQprZWVwIGludGFjdCBhbGwgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbnkNCm5vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsNCmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsDQpyZWNpcGllbnRzIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4NCg0KICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksDQphbmQgeW91IG1heSBvZmZlciBzdXBwb3J0IG9yIHdhcnJhbnR5IHByb3RlY3Rpb24gZm9yIGEgZmVlLg0KDQogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuDQoNCiAgWW91IG1heSBjb252ZXkgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBvciB0aGUgbW9kaWZpY2F0aW9ucyB0bw0KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUNCnRlcm1zIG9mIHNlY3Rpb24gNCwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOg0KDQogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkDQogICAgaXQsIGFuZCBnaXZpbmcgYSByZWxldmFudCBkYXRlLg0KDQogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMNCiAgICByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24NCiAgICA3LiAgVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvDQogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4NCg0KICAgIGMpIFlvdSBtdXN0IGxpY2Vuc2UgdGhlIGVudGlyZSB3b3JrLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzDQogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzDQogICAgTGljZW5zZSB3aWxsIHRoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcNCiAgICBhZGRpdGlvbmFsIHRlcm1zLCB0byB0aGUgd2hvbGUgb2YgdGhlIHdvcmssIGFuZCBhbGwgaXRzIHBhcnRzLA0KICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vDQogICAgcGVybWlzc2lvbiB0byBsaWNlbnNlIHRoZSB3b3JrIGluIGFueSBvdGhlciB3YXksIGJ1dCBpdCBkb2VzIG5vdA0KICAgIGludmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuDQoNCiAgICBkKSBJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheQ0KICAgIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXM7IGhvd2V2ZXIsIGlmIHRoZSBQcm9ncmFtIGhhcyBpbnRlcmFjdGl2ZQ0KICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyDQogICAgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uDQoNCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudA0Kd29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywNCmFuZCB3aGljaCBhcmUgbm90IGNvbWJpbmVkIHdpdGggaXQgc3VjaCBhcyB0byBmb3JtIGEgbGFyZ2VyIHByb2dyYW0sDQppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuDQoiYWdncmVnYXRlIiBpZiB0aGUgY29tcGlsYXRpb24gYW5kIGl0cyByZXN1bHRpbmcgY29weXJpZ2h0IGFyZSBub3QNCnVzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMNCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yaw0KaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXINCnBhcnRzIG9mIHRoZSBhZ2dyZWdhdGUuDQoNCiAgNi4gQ29udmV5aW5nIE5vbi1Tb3VyY2UgRm9ybXMuDQoNCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMNCm9mIHNlY3Rpb25zIDQgYW5kIDUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gY29udmV5IHRoZQ0KbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLA0KaW4gb25lIG9mIHRoZXNlIHdheXM6DQoNCiAgICBhKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0DQogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUNCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtDQogICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuDQoNCiAgICBiKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGluLCBvciBlbWJvZGllZCBpbiwgYSBwaHlzaWNhbCBwcm9kdWN0DQogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSBhDQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMNCiAgICBsb25nIGFzIHlvdSBvZmZlciBzcGFyZSBwYXJ0cyBvciBjdXN0b21lciBzdXBwb3J0IGZvciB0aGF0IHByb2R1Y3QNCiAgICBtb2RlbCwgdG8gZ2l2ZSBhbnlvbmUgd2hvIHBvc3Nlc3NlcyB0aGUgb2JqZWN0IGNvZGUgZWl0aGVyICgxKSBhDQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlDQogICAgcHJvZHVjdCB0aGF0IGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBvbiBhIGR1cmFibGUgcGh5c2ljYWwNCiAgICBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UsIGZvciBhIHByaWNlIG5vDQogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzDQogICAgY29udmV5aW5nIG9mIHNvdXJjZSwgb3IgKDIpIGFjY2VzcyB0byBjb3B5IHRoZQ0KICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZyb20gYSBuZXR3b3JrIHNlcnZlciBhdCBubyBjaGFyZ2UuDQoNCiAgICBjKSBDb252ZXkgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhlIG9iamVjdCBjb2RlIHdpdGggYSBjb3B5IG9mIHRoZQ0KICAgIHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGlzDQogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQNCiAgICBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgb2JqZWN0IGNvZGUgd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQNCiAgICB3aXRoIHN1YnNlY3Rpb24gNmIuDQoNCiAgICBkKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIGJ5IG9mZmVyaW5nIGFjY2VzcyBmcm9tIGEgZGVzaWduYXRlZA0KICAgIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZQ0KICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vDQogICAgZnVydGhlciBjaGFyZ2UuICBZb3UgbmVlZCBub3QgcmVxdWlyZSByZWNpcGllbnRzIHRvIGNvcHkgdGhlDQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuICBJZiB0aGUgcGxhY2UgdG8NCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UNCiAgICBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkNCiAgICB0aGF0IHN1cHBvcnRzIGVxdWl2YWxlbnQgY29weWluZyBmYWNpbGl0aWVzLCBwcm92aWRlZCB5b3UgbWFpbnRhaW4NCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQ0KICAgIENvcnJlc3BvbmRpbmcgU291cmNlLiAgUmVnYXJkbGVzcyBvZiB3aGF0IHNlcnZlciBob3N0cyB0aGUNCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMNCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLg0KDQogICAgZSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uLCBwcm92aWRlZA0KICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nDQogICAgU291cmNlIG9mIHRoZSB3b3JrIGFyZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubw0KICAgIGNoYXJnZSB1bmRlciBzdWJzZWN0aW9uIDZkLg0KDQogIEEgc2VwYXJhYmxlIHBvcnRpb24gb2YgdGhlIG9iamVjdCBjb2RlLCB3aG9zZSBzb3VyY2UgY29kZSBpcyBleGNsdWRlZA0KZnJvbSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgYXMgYSBTeXN0ZW0gTGlicmFyeSwgbmVlZCBub3QgYmUNCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4NCg0KICBBICJVc2VyIFByb2R1Y3QiIGlzIGVpdGhlciAoMSkgYSAiY29uc3VtZXIgcHJvZHVjdCIsIHdoaWNoIG1lYW5zIGFueQ0KdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwNCm9yIGhvdXNlaG9sZCBwdXJwb3Nlcywgb3IgKDIpIGFueXRoaW5nIGRlc2lnbmVkIG9yIHNvbGQgZm9yIGluY29ycG9yYXRpb24NCmludG8gYSBkd2VsbGluZy4gIEluIGRldGVybWluaW5nIHdoZXRoZXIgYSBwcm9kdWN0IGlzIGEgY29uc3VtZXIgcHJvZHVjdCwNCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcg0KcHJvZHVjdCByZWNlaXZlZCBieSBhIHBhcnRpY3VsYXIgdXNlciwgIm5vcm1hbGx5IHVzZWQiIHJlZmVycyB0byBhDQp0eXBpY2FsIG9yIGNvbW1vbiB1c2Ugb2YgdGhhdCBjbGFzcyBvZiBwcm9kdWN0LCByZWdhcmRsZXNzIG9mIHRoZSBzdGF0dXMNCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyDQphY3R1YWxseSB1c2VzLCBvciBleHBlY3RzIG9yIGlzIGV4cGVjdGVkIHRvIHVzZSwgdGhlIHByb2R1Y3QuICBBIHByb2R1Y3QNCmlzIGEgY29uc3VtZXIgcHJvZHVjdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHByb2R1Y3QgaGFzIHN1YnN0YW50aWFsDQpjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudA0KdGhlIG9ubHkgc2lnbmlmaWNhbnQgbW9kZSBvZiB1c2Ugb2YgdGhlIHByb2R1Y3QuDQoNCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLA0KcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsDQphbmQgZXhlY3V0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBhIGNvdmVyZWQgd29yayBpbiB0aGF0IFVzZXIgUHJvZHVjdCBmcm9tDQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QNCnN1ZmZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbnRpbnVlZCBmdW5jdGlvbmluZyBvZiB0aGUgbW9kaWZpZWQgb2JqZWN0DQpjb2RlIGlzIGluIG5vIGNhc2UgcHJldmVudGVkIG9yIGludGVyZmVyZWQgd2l0aCBzb2xlbHkgYmVjYXVzZQ0KbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuDQoNCiAgSWYgeW91IGNvbnZleSBhbiBvYmplY3QgY29kZSB3b3JrIHVuZGVyIHRoaXMgc2VjdGlvbiBpbiwgb3Igd2l0aCwgb3INCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzDQpwYXJ0IG9mIGEgdHJhbnNhY3Rpb24gaW4gd2hpY2ggdGhlIHJpZ2h0IG9mIHBvc3Nlc3Npb24gYW5kIHVzZSBvZiB0aGUNClVzZXIgUHJvZHVjdCBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgcmVjaXBpZW50IGluIHBlcnBldHVpdHkgb3IgZm9yIGENCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlDQpDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCB1bmRlciB0aGlzIHNlY3Rpb24gbXVzdCBiZSBhY2NvbXBhbmllZA0KYnkgdGhlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbi4gIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5DQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbA0KbW9kaWZpZWQgb2JqZWN0IGNvZGUgb24gdGhlIFVzZXIgUHJvZHVjdCAoZm9yIGV4YW1wbGUsIHRoZSB3b3JrIGhhcw0KYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4NCg0KICBUaGUgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhDQpyZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMNCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yDQp0aGUgVXNlciBQcm9kdWN0IGluIHdoaWNoIGl0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZC4gIEFjY2VzcyB0byBhDQpuZXR3b3JrIG1heSBiZSBkZW5pZWQgd2hlbiB0aGUgbW9kaWZpY2F0aW9uIGl0c2VsZiBtYXRlcmlhbGx5IGFuZA0KYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kDQpwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLg0KDQogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLA0KaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseQ0KZG9jdW1lbnRlZCAoYW5kIHdpdGggYW4gaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4NCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcg0KdW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuDQoNCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4NCg0KICAiQWRkaXRpb25hbCBwZXJtaXNzaW9ucyIgYXJlIHRlcm1zIHRoYXQgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcw0KTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLg0KQWRkaXRpb25hbCBwZXJtaXNzaW9ucyB0aGF0IGFyZSBhcHBsaWNhYmxlIHRvIHRoZSBlbnRpcmUgUHJvZ3JhbSBzaGFsbA0KYmUgdHJlYXRlZCBhcyB0aG91Z2ggdGhleSB3ZXJlIGluY2x1ZGVkIGluIHRoaXMgTGljZW5zZSwgdG8gdGhlIGV4dGVudA0KdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMNCmFwcGx5IG9ubHkgdG8gcGFydCBvZiB0aGUgUHJvZ3JhbSwgdGhhdCBwYXJ0IG1heSBiZSB1c2VkIHNlcGFyYXRlbHkNCnVuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkNCnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4NCg0KICBXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uDQpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YNCml0LiAgKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24NCnJlbW92YWwgaW4gY2VydGFpbiBjYXNlcyB3aGVuIHlvdSBtb2RpZnkgdGhlIHdvcmsuKSAgWW91IG1heSBwbGFjZQ0KYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLA0KZm9yIHdoaWNoIHlvdSBoYXZlIG9yIGNhbiBnaXZlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBwZXJtaXNzaW9uLg0KDQogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQ0KYWRkIHRvIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IChpZiBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZg0KdGhhdCBtYXRlcmlhbCkgc3VwcGxlbWVudCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGVybXM6DQoNCiAgICBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUNCiAgICB0ZXJtcyBvZiBzZWN0aW9ucyAxNSBhbmQgMTYgb2YgdGhpcyBMaWNlbnNlOyBvcg0KDQogICAgYikgUmVxdWlyaW5nIHByZXNlcnZhdGlvbiBvZiBzcGVjaWZpZWQgcmVhc29uYWJsZSBsZWdhbCBub3RpY2VzIG9yDQogICAgYXV0aG9yIGF0dHJpYnV0aW9ucyBpbiB0aGF0IG1hdGVyaWFsIG9yIGluIHRoZSBBcHByb3ByaWF0ZSBMZWdhbA0KICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yDQoNCiAgICBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yDQogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4NCiAgICByZWFzb25hYmxlIHdheXMgYXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZlcnNpb247IG9yDQoNCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yDQogICAgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yDQoNCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lDQogICAgdHJhZGUgbmFtZXMsIHRyYWRlbWFya3MsIG9yIHNlcnZpY2UgbWFya3M7IG9yDQoNCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0DQogICAgbWF0ZXJpYWwgYnkgYW55b25lIHdobyBjb252ZXlzIHRoZSBtYXRlcmlhbCAob3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YNCiAgICBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yDQogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbg0KICAgIHRob3NlIGxpY2Vuc29ycyBhbmQgYXV0aG9ycy4NCg0KICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcg0KcmVzdHJpY3Rpb25zIiB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gIElmIHRoZSBQcm9ncmFtIGFzIHlvdQ0KcmVjZWl2ZWQgaXQsIG9yIGFueSBwYXJ0IG9mIGl0LCBjb250YWlucyBhIG5vdGljZSBzdGF0aW5nIHRoYXQgaXQgaXMNCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcg0KcmVzdHJpY3Rpb24sIHlvdSBtYXkgcmVtb3ZlIHRoYXQgdGVybS4gIElmIGEgbGljZW5zZSBkb2N1bWVudCBjb250YWlucw0KYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzDQpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMNCm9mIHRoYXQgbGljZW5zZSBkb2N1bWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgZnVydGhlciByZXN0cmljdGlvbiBkb2VzDQpub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4NCg0KICBJZiB5b3UgYWRkIHRlcm1zIHRvIGEgY292ZXJlZCB3b3JrIGluIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiwgeW91DQptdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUNCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZw0Kd2hlcmUgdG8gZmluZCB0aGUgYXBwbGljYWJsZSB0ZXJtcy4NCg0KICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQ0KZm9ybSBvZiBhIHNlcGFyYXRlbHkgd3JpdHRlbiBsaWNlbnNlLCBvciBzdGF0ZWQgYXMgZXhjZXB0aW9uczsNCnRoZSBhYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4NCg0KICA4LiBUZXJtaW5hdGlvbi4NCg0KICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkNCnByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBwcm9wYWdhdGUgb3INCm1vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlcg0KdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZA0KcGFyYWdyYXBoIG9mIHNlY3Rpb24gMTEpLg0KDQogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyDQpsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkNCnByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQNCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQNCmhvbGRlciBmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zDQpwcmlvciB0byA2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uDQoNCiAgTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzDQpyZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUNCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUNCnJlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdA0KY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcg0KeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuDQoNCiAgVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUNCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcg0KdGhpcyBMaWNlbnNlLiAgSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseQ0KcmVpbnN0YXRlZCwgeW91IGRvIG5vdCBxdWFsaWZ5IHRvIHJlY2VpdmUgbmV3IGxpY2Vuc2VzIGZvciB0aGUgc2FtZQ0KbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4NCg0KICA5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4NCg0KICBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHJlY2VpdmUgb3INCnJ1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uICBBbmNpbGxhcnkgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsNCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uDQp0byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFjY2VwdGFuY2UuICBIb3dldmVyLA0Kbm90aGluZyBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIG9yDQptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbw0Kbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhDQpjb3ZlcmVkIHdvcmssIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLg0KDQogIDEwLiBBdXRvbWF0aWMgTGljZW5zaW5nIG9mIERvd25zdHJlYW0gUmVjaXBpZW50cy4NCg0KICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5DQpyZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3JzLCB0byBydW4sIG1vZGlmeSBhbmQNCnByb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgWW91IGFyZSBub3QgcmVzcG9uc2libGUNCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLg0KDQogIEFuICJlbnRpdHkgdHJhbnNhY3Rpb24iIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4NCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4NCm9yZ2FuaXphdGlvbiwgb3IgbWVyZ2luZyBvcmdhbml6YXRpb25zLiAgSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkDQp3b3JrIHJlc3VsdHMgZnJvbSBhbiBlbnRpdHkgdHJhbnNhY3Rpb24sIGVhY2ggcGFydHkgdG8gdGhhdA0KdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyDQpsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQNCmdpdmUgdW5kZXIgdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgcGx1cyBhIHJpZ2h0IHRvIHBvc3Nlc3Npb24gb2YgdGhlDQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYNCnRoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy4NCg0KICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUNCnJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBleGFtcGxlLCB5b3UgbWF5DQpub3QgaW1wb3NlIGEgbGljZW5zZSBmZWUsIHJveWFsdHksIG9yIG90aGVyIGNoYXJnZSBmb3IgZXhlcmNpc2Ugb2YNCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24NCihpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0DQphbnkgcGF0ZW50IGNsYWltIGlzIGluZnJpbmdlZCBieSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3INCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4NCg0KICAxMS4gUGF0ZW50cy4NCg0KICBBICJjb250cmlidXRvciIgaXMgYSBjb3B5cmlnaHQgaG9sZGVyIHdobyBhdXRob3JpemVzIHVzZSB1bmRlciB0aGlzDQpMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gIFRoZQ0Kd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuDQoNCiAgQSBjb250cmlidXRvcidzICJlc3NlbnRpYWwgcGF0ZW50IGNsYWltcyIgYXJlIGFsbCBwYXRlbnQgY2xhaW1zDQpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yDQpoZXJlYWZ0ZXIgYWNxdWlyZWQsIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IHNvbWUgbWFubmVyLCBwZXJtaXR0ZWQNCmJ5IHRoaXMgTGljZW5zZSwgb2YgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBpdHMgY29udHJpYnV0b3IgdmVyc2lvbiwNCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhDQpjb25zZXF1ZW5jZSBvZiBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udHJpYnV0b3IgdmVyc2lvbi4gIEZvcg0KcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIGdyYW50DQpwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YNCnRoaXMgTGljZW5zZS4NCg0KICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQ0KcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIGNvbnRyaWJ1dG9yJ3MgZXNzZW50aWFsIHBhdGVudCBjbGFpbXMsIHRvDQptYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQgYW5kIG90aGVyd2lzZSBydW4sIG1vZGlmeSBhbmQNCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uDQoNCiAgSW4gdGhlIGZvbGxvd2luZyB0aHJlZSBwYXJhZ3JhcGhzLCBhICJwYXRlbnQgbGljZW5zZSIgaXMgYW55IGV4cHJlc3MNCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudA0KKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0bw0Kc3VlIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50KS4gIFRvICJncmFudCIgc3VjaCBhIHBhdGVudCBsaWNlbnNlIHRvIGENCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhDQpwYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuDQoNCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwNCmFuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lDQp0byBjb3B5LCBmcmVlIG9mIGNoYXJnZSBhbmQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhyb3VnaCBhDQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLA0KdGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbw0KYXZhaWxhYmxlLCBvciAoMikgYXJyYW5nZSB0byBkZXByaXZlIHlvdXJzZWxmIG9mIHRoZSBiZW5lZml0IG9mIHRoZQ0KcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXINCmNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5kIHRoZSBwYXRlbnQNCmxpY2Vuc2UgdG8gZG93bnN0cmVhbSByZWNpcGllbnRzLiAgIktub3dpbmdseSByZWx5aW5nIiBtZWFucyB5b3UgaGF2ZQ0KYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlDQpjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCBvciB5b3VyIHJlY2lwaWVudCdzIHVzZSBvZiB0aGUgY292ZXJlZCB3b3JrDQppbiBhIGNvdW50cnksIHdvdWxkIGluZnJpbmdlIG9uZSBvciBtb3JlIGlkZW50aWZpYWJsZSBwYXRlbnRzIGluIHRoYXQNCmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuDQoNCiAgSWYsIHB1cnN1YW50IHRvIG9yIGluIGNvbm5lY3Rpb24gd2l0aCBhIHNpbmdsZSB0cmFuc2FjdGlvbiBvcg0KYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQ0KY292ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9mIHRoZSBwYXJ0aWVzDQpyZWNlaXZpbmcgdGhlIGNvdmVyZWQgd29yayBhdXRob3JpemluZyB0aGVtIHRvIHVzZSwgcHJvcGFnYXRlLCBtb2RpZnkNCm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UNCnlvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkDQp3b3JrIGFuZCB3b3JrcyBiYXNlZCBvbiBpdC4NCg0KICBBIHBhdGVudCBsaWNlbnNlIGlzICJkaXNjcmltaW5hdG9yeSIgaWYgaXQgZG9lcyBub3QgaW5jbHVkZSB3aXRoaW4NCnRoZSBzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzDQpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUNCnNwZWNpZmljYWxseSBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQNCndvcmsgaWYgeW91IGFyZSBhIHBhcnR5IHRvIGFuIGFycmFuZ2VtZW50IHdpdGggYSB0aGlyZCBwYXJ0eSB0aGF0IGlzDQppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50DQp0byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZw0KdGhlIHdvcmssIGFuZCB1bmRlciB3aGljaCB0aGUgdGhpcmQgcGFydHkgZ3JhbnRzLCB0byBhbnkgb2YgdGhlDQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkNCnBhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsNCmNvbnZleWVkIGJ5IHlvdSAob3IgY29waWVzIG1hZGUgZnJvbSB0aG9zZSBjb3BpZXMpLCBvciAoYikgcHJpbWFyaWx5DQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdA0KY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVudGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LA0Kb3IgdGhhdCBwYXRlbnQgbGljZW5zZSB3YXMgZ3JhbnRlZCwgcHJpb3IgdG8gMjggTWFyY2ggMjAwNy4NCg0KICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nDQphbnkgaW1wbGllZCBsaWNlbnNlIG9yIG90aGVyIGRlZmVuc2VzIHRvIGluZnJpbmdlbWVudCB0aGF0IG1heQ0Kb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3Lg0KDQogIDEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLg0KDQogIElmIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3INCm90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QNCmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhDQpjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMNCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5DQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UNCnRvIGNvbGxlY3QgYSByb3lhbHR5IGZvciBmdXJ0aGVyIGNvbnZleWluZyBmcm9tIHRob3NlIHRvIHdob20geW91IGNvbnZleQ0KdGhlIFByb2dyYW0sIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIHRob3NlIHRlcm1zIGFuZCB0aGlzDQpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uDQoNCiAgMTMuIFVzZSB3aXRoIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuDQoNCiAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQ0KcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZA0KdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQ0KY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuICBUaGUgdGVybXMgb2YgdGhpcw0KTGljZW5zZSB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBwYXJ0IHdoaWNoIGlzIHRoZSBjb3ZlcmVkIHdvcmssDQpidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsDQpzZWN0aW9uIDEzLCBjb25jZXJuaW5nIGludGVyYWN0aW9uIHRocm91Z2ggYSBuZXR3b3JrIHdpbGwgYXBwbHkgdG8gdGhlDQpjb21iaW5hdGlvbiBhcyBzdWNoLg0KDQogIDE0LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4NCg0KICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZg0KdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbA0KYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvDQphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4NCg0KICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZQ0KUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwNClB1YmxpYyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlDQpvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBudW1iZXJlZA0KdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUNCkZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlDQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQNCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQoNCiAgSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZQ0KdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MNCnB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhIHZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UNCnRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBQcm9ncmFtLg0KDQogIExhdGVyIGxpY2Vuc2UgdmVyc2lvbnMgbWF5IGdpdmUgeW91IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50DQpwZXJtaXNzaW9ucy4gIEhvd2V2ZXIsIG5vIGFkZGl0aW9uYWwgb2JsaWdhdGlvbnMgYXJlIGltcG9zZWQgb24gYW55DQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhDQpsYXRlciB2ZXJzaW9uLg0KDQogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5Lg0KDQogIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkNCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQNCkhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkNCk9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLA0KVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUg0KUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0NCklTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRg0KQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLg0KDQogIDE2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4NCg0KICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcNCldJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTU9ESUZJRVMgQU5EL09SIENPTlZFWVMNClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQ0KR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFDQpVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GDQpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRA0KUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksDQpFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQpTVUNIIERBTUFHRVMuDQoNCiAgMTcuIEludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi4NCg0KICBJZiB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlkZWQNCmFib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLA0KcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzDQphbiBhYnNvbHV0ZSB3YWl2ZXIgb2YgYWxsIGNpdmlsIGxpYWJpbGl0eSBpbiBjb25uZWN0aW9uIHdpdGggdGhlDQpQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhDQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuDQoNCiAgICAgICAgICAgICAgICAgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUw0KDQogICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMNCg0KICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0DQpwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0DQpmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4NCg0KICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdA0KdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQ0Kc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdA0KdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuDQoNCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPg0KICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+DQoNCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3INCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KDQogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCg0KICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQoNCkFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLg0KDQogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQNCm5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToNCg0KICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4NCiAgICBUaGlzIHByb2dyYW0gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLg0KICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQNCiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuDQoNClRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQ0KcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzDQptaWdodCBiZSBkaWZmZXJlbnQ7IGZvciBhIEdVSSBpbnRlcmZhY2UsIHlvdSB3b3VsZCB1c2UgYW4gImFib3V0IGJveCIuDQoNCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwNCmlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZiBuZWNlc3NhcnkuDQpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzLCBhbmQgaG93IHRvIGFwcGx5IGFuZCBmb2xsb3cgdGhlIEdOVSBHUEwsIHNlZQ0KPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lg0KDQogIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0NCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQ0KbWF5IGNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoDQp0aGUgbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwNClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZA0KPGh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L3doeS1ub3QtbGdwbC5odG1sPi4NCg==]]></data>
	</file>
	<file>
	  <filename>/docs/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/admin.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAPfCAIKHNftGD6GmUj1HSLzGw/T09PLy8v7+/mRtcGBqbKWnplNbXUpcXWh4eWl6e0pTVObn5jlBQeDh4I+Uk0FKSzpBQXWMinR9fPj4+PX19e7u7m2EgWZuazpKSf3+/TtCQnB5fVtjYWN5eWp+e2lycW10cv7+/fHx8bvFv8HEwt/hxIuOmePk5fb372FlZvz8/IGVkrrCv1NeW1lraOPo55uenqqsr2dscPf4+Pn5+dzd3Jqcntna2cTHxT9IR1ZiXkhSUqi7tvj5+fv7952cp/Dw4+bm5neAfz5KSnqDiKCipk9hYISHh29wdayvrW+KiIaIioWHkpybq2Jqbu/v78XGyLe6ufDw8F1nZ8jLymJvbqSmqLe6vHl/fbCysZSXl+vu7p6opVNZXJCppGdvbl9obHqXk0xaWOHh4WFrbKyurWFrbcbIyX6SlDxERn6TlcnLybm7u0NWVOrr2GyCgDU8PLO7nGdwbj5GRTI5OWRrbXd8fOzs7JicnE1XVzpDQnyYmYOhnzZBQUxeXYyKmlhgZHqVkIGCj/r7+niBh5iXp3uYlHyFiY+loVdjYFpkYbCysuzt7Jeqqa+ysX+Di6+5ti01NLq9vH+Bi0JNTa2wrt/i4fT19Obn587Qz/X27WVucKWrqsLEw0JMS/X29l5hZ3d+ffDx8DtERllhZElZV5aZbHV+hIGZlVdpaf39/f///5udpN3h4Hh7gfT16zhEQ+bp6Pv8+/j5+EZTUWRpbeDi4Wd0dkVNUHB6eUlaWe7v4DxHR////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAMIALAAAAAAgACAAAAj/AIUJFBggwMCDCBMqRFgkgIqFECMSLPhJokWEBQteHHhgE4FKuxRmNLhRWIxFhsJwUggggAAAQzYaoBPI1kJaAAS8BLARjStAYBYCy7lzY5ZfTyTh8EADoQkARHlaLKBFzhIzY4I0SjgHKlQUEguQ6TBI1YxWMGQpbLEKgB0CBAos1HBBBIMzoUTBoRJRAtwOd+QivELCwgZHnUpCyMVAxAUNByX4ejMiBISSAg382GCBxCmBPGQ0cMDBAOaBGUKMaHPEiA4swWqVyHD6IAYODho8QsALSRcMtROWEDSgeJ8XwRNaMZVpgJ8EyQ8ecIIAwYBRQCgoOBD91YQpSShAiErwx0edFMlxfVnDCtUlgQosgUrgpfaJPQ9A4NF0UEEvRmVMcBEpbHCxhR4VfFBBDwlN4kYiaViUQyyHrBBFKgvk4QlEEYDwQESw2DBLDS5QgokYcVj0QQQQIaJGJMLw0YQUNwhx0QKFXLSDIkpEl5AHLBBBSBU+HmQAE7qUAsUtRTbp5JPBBQQAOw==]]></data>
	</file>
	<file>
	  <filename>/images/admin.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAKhJREFUeNq1k0EKgCAQRb1EIHS/oG0QBN0mCLqBq1kJ4YmCIKiEHww2ahEtPg35fc6Mo3LOqYQIinpUBrBDjwADTtOnasQXgPBPIx4kgIV5ZRtDbfhaCeDpS2LzpQXeG6BiJp9Ff6qE+iCzKlWCVyc0rGPrMweQkGYhAArBR37BfAAYbpgzJbSxEmJNbNBtjTjbxM/XSMGwpAaJJMD0YpTHXx6TJANFPQebPshL7MfAkQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/attributes.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH9JREFUeNpjOHHiBAMQCwHxJSD+TyS+BNXDANLMCTXEDIg/EKH5A1QtWC+IOA/EilABUjBIzyUGqKlPyDAApOc/A5LTYBKEvICijiYGEIv/j3qBygY8J8MLz2EGXAViLTIMAOm5CmLwQAUMgPgtEV54C1UL1gszTZSM7AzSwwAAHFLfZLjCjywAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/global.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAPf/ABQoU3WXyVyEyylGdEtVZGGN2muCiOHPykVtsVV9w5bL7GJod1yCxkFbiWOR3l6M2uLi4sfHyIq12GCJ00txssbQ4oS16DxruOzs7DVDZXWs8WuBk0JknKzH2XqUqHZ6hXKLpFyJ1kp5xWuBnGyFoUJqr5i71URXdp2hp4SPlLa3uLbGyktso7TDtDZKcHx7fFZzpmOT40p0u53E2mJ6m0ZMVnOe2sO9viQkK6zW6lN5vm5tbpG3ydvc3lWC0TpZjNjFxVNdaXGEoSdKghw6aVNkbXuRl3qg0UptqpabvIqjrRIaMmlyfkZqpitDbIOaoyxQiWt+nDlgnFZpi9XV1kNmoWx9gztjo4WQqnWl5lyG0XWUvFp/xHKJnYucx36p0Ier2fPz81B0siMzWERxujRYk5OHknSHmTJVill4m4yktaKjpF5qfjRcmIykm4Scrl2Dv4OHjaK8qGaa6jpkqYWTs1t8uWN1fvr6+nuq6S0+Y8rN0nuYsYSjvnWStEhonlFgd4CVqCEqSEBWg32Bi2yJrFt8skphh15yg32hxnGClh1DeGBkb3uNnWV5i3GJkg8TH3Gf4297kjJVkY6svzlemm+IpoufpkNhmExyrnCJjnaChnGk7zNThFhocmKBqzpQexUhP4qCjEBekmWX5kZvt1preFaG16S82Gd9kIqnuWl5izk8UU1bdY+Qk5WRlubn6D5oql9yfliByFiEzn6q12aBoD0+P3qIi26EqIG29u/v8NfX1y5Ofamks2Ftg4icq6C4x2CO4LKtzLe3zVF3t1Z6uWd/mzZeni1VkoGDoHuCmGqX4G2b5GB3k7SvumeR16G4v2mU0NXQyW2a34y0ynuFoHuNo5SswFiH23ux9ZO/5oGou2l+qmON0naf1Hem2GuFs3ym2UtmnlF9x1FjfZGqrVVoeHqo42Bvd2l5gGZ4fnByeF+Q3mRyi2V6hEJoq21zgTdgoTFgqVtumm+Fi2iV2XiDhm2i6Wul/HeZuYCCgM7QzoKLjYqKjf///yH5BAEAAP8ALAAAAAAgACAAAAj/AP8JHEgQww1XhD60agWITRwVsAhKnDgQQhx2kqJgIeYF0x8Ofw6VS9GDIkU8rggoS4IlCgsYhv40mdlE5hRXYUxWDLJgmbVcilalovGpGIuZFMRQaAKDCS+dVGoQCHIn3JYNRTxt0BfAgjcESY2JGQcjXgSKEKRKNYXIESJPskDU4jSnHTkZOuwYY4Gpm6inBPHUkDq1yLlzpmS9S8TplAwyMhLMYsAgQRUkSUTtIuhPUBACRYqYcmaLhCM+2gpwYaAjgZZZAiojqWJn2KuKODIECeIp3R0DGzRpqiWMiwBhr0No0cKAiw4kCAKYoSLwRSgXvNOts2KgnqZH4B4w/ygQw8GDECEmTJg1K4GxYlj2/du1ZAyBBb7VWfGuiZu2EFx4E0MB54XQTgECOEcBElywAYEKkOjGDhP6dfeIERLk045yAtASwgPtOODABAxk0kQmLHCwBjtLSPjBPZsY4MEXFvBggQ0PFHAggQ+I6M0EXIiFBAeM3BJKBq0k1A8u+uTRjg8SKJADOt/YYE8kDiz3wJYhtKcUATgIkgEoQqizSQri6ADHN0dIYEIAR0QSwxxzxBDCKXiG4MNdCAwCiZig0COEFf0kooMJOUwAhzTNkEJKJFlsYwE+uuCTjQ8+iIAAPH6K6cIgSNBwzzUB8LFFADNoEAMzM8zQQTCUmP9ASTUKZEGNPRRc0QAOAOjxKSbj0CCJLc5scMYMnDgggRJqYBONOYF0EQUP1ajyhBh0NGCkHhkMMsool+mg5jd91CKBGo288YY5SoBAghBRCKFIPZmUcMgO9TnxaQOYcFBFExSQU4A4efhhRCAgeOABCQwLMcIIx5BxwS/PQDKGHgOA8sMo/jaBRDET0OJAH0ZYAoIlKJNgCbwbWCICHSjAAkkovmr8AwdIJUDLLPYAc80IKZOQy8ojKOIHGVCUtAPNA/TSycYzIQBHASKrcU0UJNgyQheBPPHECBsYcoE7AvUACQBONP00B1dcJkMpMoCxQiPHHDNCIHLIYc4GhYjgcMUeA32wBBFp9/KDFFLAcwU8MsgggtyXXNJ1C3K40YU3F0hCUBisAEBE02j8MMkVCJQCtwgXQGNCBxC0cEALBnxCxiAREcSLIJ4PAEUZaLRRQiklIBBLCRfMc0EF/ABhuQxonDVRBLgTMcQkUECBDB3ytIFMCbFccQEq0wDxBByVqKATP50vAsUQ6iNzhRQllHDFFXTwccMzW7AAuE7zsRMKEepLRhmkUIk2lGGAyEiDL7xQh9rxTyB7YMT/FkHBIVQPCsmYxBSIUZIHTqQHa2DECUAxAH2dgA0o6KBJAgIAOw==]]></data>
	</file>
	<file>
	  <filename>/images/global.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAK1JREFUeNpjOHHiBAMlGETYA/FtIH4CxF1ArIJHgwpUzROoHnsGKOc/Gt4LxOFAzAbF4VAxdHVPGJA4ZkA8B4g/I4m9gmIY/zNUjRlMDNkAEDsNiCWg9BkkufNAnAnE0lA5BlwGzATi51CaKDl8LiBKbtQFVHLBcyjnJBAnE+GCZKhakPhzWF54jpbaQLYYI4kZAPE0IP6AJPYclhcYCKR3fPmEgVCOuwfFOHMqAK6A4/8vH/ZVAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAPcAAAAAAP///8PDwwQEBKsyM5kWHJAUKX8EJ8O8w8PBwwQEPgQEFwQEDaenqKGhogQMUAQUTwQcXQQmYgQtbAQrYwQQIgQwbgRWuAQ3cwQIDQRIkwRFkQQ7ewQ2bQRBfQMQHARWmgRTlwRUlgRFegRCdgQeMwMQGwRuwwRdoQRZmwRWkgRQigRPiARNhgRNhQRLhARhoQRemwRalQRYkAROggRHdgRFdAQhNUKOwwRrqwRnqARlpQRfmQRclgRdkwRajgRWigRxrgRnogRnoQRlngRYiEGHrgRjlRF8shaFvhd9ryONwyt6ogRwowRrnQhvnxyAryeMvSuTwyuOvi2QvzmWwzx8mgl/sTabwzByjDNthFaClGCOoRReeBtjfjCawzaewzudw2mToz+iw0l1hEBaYgSYw6Wws0Grw0itw0JUWEyxw3iPkzI/QFS9w7C2tsDDw6mqqqeoqKWmpqKjo629vJ2lowoSDy42Mz+VWBEYEyMqJQR/BARzBARqBLy+vBSUBF2hSC2pBDjDBErDBE20BG+vQnzAPqWmpGrFBIvDOpnDVcPDucPDu8PDvcPDvsPDwcPDwrS0s7OzsrKysa6urcPBtsPBucOkOcPBusOUCMPBvMOHBL69u8N+BMO9ssO9tMO/ucN+HsNuBMNjBMO6scO9t6mnpaelo8PBv62rqainpqKhoMC/vr++vbGwr8O9uMNYBMO5sbGtqq+rqMO/vLVMA6ehnbSxr8C9u7evqsNKBLuxq8O6tb22sqqlorWwrbGsqa2opcO+u7y3tLQ+BMK4s8C2saKalsO9usC6t6yopqunpb27ure1tLa0s66sq8C+vcO0rbSppLKrqLKtq724trm0srSvrcC4tcMyBLGrqailpL67ur26ubq3tq6rqsK7ub25uIcEBG4EBGYEBFwEBFIEBEUEBDkEBCsEBBsEBMPAwMC9vaSior+9va2rq8HAwLq5ubSzs7Cvr6alpbGxsa6urq2traurq6ioqKampqWlpaCgoAMDA////yH5BAEAAP8ALAAAAAAwADAAAAj/AP8JHEiwoMGDCBMqFNiq1bt3rlrFiySgosWLGDMKWGhwWDhiIK2J6xaNncaTF+FU5Egwk6mXsJLVSkURpU2LLAc2YsQzUyNHkG4K3ZjzHyRIj5JCqjmgqdOnUKHiLIpyGrJbv4TRCjarmtdqs7bRWnYKkZ06U3MOXYuRwLicO2CkEKGBCdubBci95ZhjBwoQGjbctVnAHDmWSZAEEQIihMWokCFbNHCuHEspS5IEkWvRKlatXL+CFUvWLNqKBtCZW8hGDJctZLQMgTEY5YF05xSWUdMGzx49d4roqH3ygDp0Ck1kgGojB3GNB9alW+ivxI0KDBbw2PE4svemFhcV/0rE0k2aMEtyxOh8NevWrl/Dji171qIiQuQ5rhkjRYmQHhZFYskmjwRlUwIIIHCRIoMQwtJ5UyhBhAzPZXSIIIWwhAYWUSBBxAwVYmQIIIKw5hpssqkQ4kWB8AGIbrz5BlwRFFb03XcW5dEHHwp9sNxTNtQogGfuhRYfafSdJkAefvRBnXXYaafiihVhwokmGoKxBBI+rEBlRZqM4glLYFABxRM/sPClAJqQMgpLWExxZprd3SiZAHBwEgspLH0RhRJOAPECe5+9J5p8pdVXESe7xGLia7EN0cKanmizC4y9/RacC2uOoo02yf3olA2TfilKMbY8eV12PHhQp51SVf+0hhlmIHZFEz6MgAGhRcLnFaJJWlTFCSew1MQRQIzQwQRr4nBBsRz9QAMJHUgQwSNfGqEBCixxYIG1D9SwphUcrMBSRX+8cYYAkAAF650CZCEBCeda9AgjllziCJGg+TrafKZZ5AUEFJzrCL6flCKLMdlcc8033jTzTjQUVxxNO500I4412ZgClABdKJBTI6DIIg0vvOgCDC7OfCOPxBE1JHMr0byTsTfKwKIvUTn1ckzK1NBCCzjQwFMJPfZQMsk8kjQtyTzzTEKJPa+8gss1pjQSSVH/EIMNLcxwg0o99TSgTxz5wIMPPpXc43YllawNTz5pQ4OLL6FsXdQ70JxE4g4r/fTjgAN08GP4HPskrnjicxhu+Cqq4KIMzzlJkk8DjvMzRwMNyKHP56CHLgfnncdRyTO5cK366qy37vrrsMfuekAAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icon.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAABiVJREFUeNrsmctvZEcVxn9Vdfu2u+2x52EnM7Zm8oTsIo8TCQSWkAEhIdZsyAr4B1ghZcEaRQQpUiCTZSKUFZFgM4OIEI6IN4hFxpvwkEg6M+PJjNt2v2737b63qg6Le9vxPGxPt+0LkSi5bEtulc9X53znO3WOEhG+yCt4lA/95f1VAfDeAyr7UhqlFFprUOpEjFteXj70YHWYB9ZW/yTiPIlNARAUSqkMgNZoYzDagDHHZrgDhqdVJyeXli5f/nB8D2hBiaccGhDy29agNWiTbY7XA3uvQjK3HyGEjAaTe0kAURmIIRDUica4MaZ2RA6U8o/5zFZFbvjnxq+srByr0aurq7u/12q1aHFx8QgcWFs7NE21bn/KTqtNqVzGBCWMMWhj0Lmn1H1eEgS84BGc8zgRrAh9EU6fv8BjYfmRiRwcx43NzD/BzPzJhNC7L7won65fjwz88CfWvjsygJXf3IAk/XxHCc8tneXN7z5VSJ5vbXxGTampOfjtwwinDz0hnIBSCCbI84Phn39rFCZUiTc0gJ1xQ2j28dPE/ZhuN4ZenGUla+/10gmS2OoKPSAeG8BsSNwLCcMKDR1B2oL4Xl7//p23jpXEe1ealIiAqVEB/PTV19ajidnnX0w9vW6HTtRkM4X18CJQLozEg44QAd1RAKz84Ef/0Gn8XLN+Bxt36EZtdnZ2GCQWvvMyzDxZGAcGONqjeuCDP7zXVP022IdE3vYWnH22MAB9HE3g1CgAbOPWV4Mg+LdaWHwao6GxDVEdqML8lyDtF0bip1cv87V6jQvn5a8jccBa+wzA9/+8Jt0WNJtwdwdu1Dag3SmMxD1usz0HZ5z6ylhZqBft2Z0dSBPw6X0kvsTM411Qpbw61Y8kMbvLZzW0WFDh/SHk6QH1cdOoS/KdWrz1IA4eqHAVmKnxYybHq0oP/qnrSjQbcKo6JoDUQeohdR6LAufA28JI3GkE1O9CdXJEAC+/9itpBae5lHp6UYeznSZTfVgPLoKYwgDstENad+Hm9Cg68NKPE5302FcH9HRhWeh2twItaNhRdODae23Vb53bVwfmpgvLQrGbhv7+D799dODmbBAEG2phcf6hOtCNCyslXjnzL3hifyU7SAcWAFZ+tya9FjTbUN9q0PmklqWlolb7OtwAZsfMQr0GxB1L3GoSt5tZBjq4UXDMDwKdVXLhmAC8B+c93gsiAsNdAIkdYJLB0QBYYZdkzgk4ybSgABLrrByFVt4cGQXAz16/ItvqFIvD90DcZFPD+pmL0NsohMRqCKADTIymA+5AHVAFNoQ7wOaIafSDa3+8q/rtC/vqwMTZ4gDMzNNauI2alg9HeQ/MB0HwiVpYfPKhOnDjVmFK/IsX3uHaHFDlcjqiDjwFMPfL96XbaZO22rDThFs16CWFKXF9A7gOnB8zCzVv3oSokz1i2h1od6HvC1PiSh/odKEyOWZrsb4FUQRRN9utCHoesMfVmTxwyaAO7TtQngKWxwBQ24ReL9vdfgbg618uxHiAtLsFnc+gfGo8D6y+8r2svZEOiPoJ3cRx6dzpXCcdELCy8q0TI3HUa8P2HSjHR+tOl0tlyqUy50izRp93mVbqEyZxqw1bm1CyRwGQAGlWyFmflRMCIhqPJZya4bHJmcxoY3aHf+qg4Z+AxyNeEO9R4tF4ApJctbJG8iBNoNlApsovjQmgD8kAUgvWkXq/i8ErjSiNCUpoYyA3WmmTT3MOmk0IiAblUUrv8ZQCl+aDMkP97Z8r3t7/lMMBxAnOOpLUYp3DOsHnnRAQUB5JLMpodD65zCInN0g9aPcwjEQkK2yzbxgFodFUKmE+lxPW1tYmlpeX+2MDGDihP7AkqcU5h/OS/fP8ttTw1kXQyucj2Mzq7Id6wPphNZ4BkN3CzWlADGaQEmoNAVSr1Xng47EBmLBC0o1JrMNahxePzw3Iht0OlMpuf2irUofOLmUPEhlGvVZIkA0TTRBgAsXS0tLHB1aswxu4cuVN9dHfPzLOOvXGG7++p+y4evWqxHGcAfBuGAWZkfmND8PlUYeuMqRBfppSCq0UpVLARBhSrUzwjW9+++iT+v/1pfmCr/8D+G+v/wwAJbCXLp3PAhMAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/images/no-image.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhRwAwANUAAP////7+/v39/fz8/Pv7+/r6+vn5+fj4+Pf39/b29vX19fT09PPz8/Ly8vHx8e/v7+7u7u3t7ezs7Ovr6+np6ejo6Ofn5+bm5uXl5eTk5OPj4+Li4uHh4eDg4N/f397e3t3d3dzc3Nvb29ra2tnZ2djY2NfX19bW1tTU1NLS0tHR0c/Pz8zMzP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAC0ALAAAAABHADAAAAb/QJZwSCwaj8ikcmlsOZ/QqHRKrVqvT2GLNQF4v+CweEwum8mSxZbVIng8ibN8Ti8jOh3EuuWNhCgDdYKDZBcoEV57XwYcIwqEkIIKJB0FX4pgEiUXApGeZAQXHxABYJhgBRsgC5+tXgohGwZip2EOJxulrpAYKg5ktWIaKL+7dQ0jGARlwWINHRqzxmYEGiUNZ81iBRggDbrTtikVc9pjDCYegeFeBhshj+VaghYnD+wQHxfLdOZlCiI6HNhVoAOJeHX8mZlwossnCCguQFJoxgCJEAMJIfjwAUEkimckiAAkqMIICeAIgTyD4I1HOQpGgLD0aaWcCCsomBlAIQRK/1c25QzoMIKVGAQgOGQEOm/aAxAY1nnJkKKYsaB0CGwggY0BCQ6dwmGt84CEWQcprzZl96BECRFo2QEYK0crVwBewbKja+ZpVDBUre7iO2Zo0TFIlaplswunzjI8faaduDZSSw8vz8Sc2YqwF5Ek65j8+bGyIIsYIW3sWJoxIYYOPUWISNl1HYACCRpE2M/0mXr3wuXbl9A3GXTq5AJwB6+37TLcvE0O52CcvOdjnkVTLqbatWzGvwwTzD0MMmXMwt/KVf5ML/KXfKda1X4OLFm0TGviVD+rKFKmrMWII/0NMkkl8bnmR2gFDmIIBIlo4QYcDXpyRx57cFGhK2nsgQ/FhyCGCCITJJZo4olCBAEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/reload.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAPeXAAAAAP///4GkxYytzOL2/2eYxm6UuVN+q1aArAYHBwICAvj7//v+//n///r8//Pz842uzeHz+1N9qi80ONXs9y8wMkNGSU5OTpeZm+L0/M3p+1yAqfH6/9vl7dDR02doat7l7luJuVyFsMrm/c/k8d/y+1F8qmVucklUXFOJu+Hy+YaqyREREXd3d3WJmu3x9BUXGDMzNF9gYm5wcq+vr3t9f6mpqoCAgGiJqxQWF/7+/ubu9IyOkvP19vX6/2Jrbuv9/zg6Pef19xAREfj8/1uEsOT4/9/f3+71+l2Dqejz/2KKtKampnCNrIiftur0/9Xs+jpAQo+amhscHAQEBLy/wgYGBr3O00xQVElJSYKXt/P6/8Tk/FiEslRZXX+Kj3egxZyzwvb6/w8PEP3+/4uszEVjhFxeYbzb8khXYOLz+fb8/+X3//v7+9zi5yA0SOTz+gUGBvP29hETE5Cdojs7O0FBQeL1/b3M01xcXfz//yk4SFZjbCYxQFh/qQ4ODkBBQU1UVz5DRYeIiOz2/5CcofX19eL0+xsdHn+Eic/q+zdTcM/p/t7v8b+/vzM2N8bGxqCyvM7Q0leBrV2CqKm1uC4vMCxIEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAJcALAAAAAAQABAAAAj2AC/hGABhgMGDA8pAWNHk0iUBASJGPFLHkcQABhxCjPigxR8AgDwsYKAn48MAOgzdAMASwJAZLxqYhPjAjhWWCmJYAiBDSAiNAdrQGJRnCoAaboIA+NIFaAAyDBxU+cDjyZU5ORZphGSjhwMiYpA0MhIhEIA3GrOwkLTABwc4Kgjc+QGgj8YLADBsIQQkAwECJaIA2OMQDBMFFTooYfNXTaEEE8w4LCDnDAALeCL8pQMjQaQkkxuAwAIAkZcTguJQkQKF0uQAa3YkGtPyUaVDFDY4TMFoBBc0LtKg4BNGAwlFfhw6MXFAgoQDB4ogQDBJxBItlwICADs=]]></data>
	</file>
	<file>
	  <filename>/images/templates.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJxJREFUeNq1U0EKwCAM8+TDPPmwgTDYezx59yGC4Ce2OqoUqdIhO0RmJDGtnYoxasABSIBbiIQarWBxH4QjXDUouDEAJYRBTVHErR3SkhrXIxPu1XEGjuF6ZIkBV1KPLDEY9zOeNQiLhrYUYWXg8dsyBhbP/K8l0CZa5vay+4ynxKAOywXIhMvIsYNUFo2bwdJR3vmZzjGyVNhLegBIuOj9M4S+bQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/trans.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhAQABAIAAAAAAAAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==]]></data>
	</file>
	<file>
	  <filename>/includes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/includes/admin.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dGFibGUubW9kdWxlX2NhdF90YWJsZSB7Zm9udC1zaXplOiAxMHB4OyB3aWR0aDo3MDBweDsgbWFyZ2luOiAwO30KLmNhdF9sZWdfaGVhZHtjb2xvcjpzaWx2ZXI7YmFja2dyb3VuZC1jb2xvcjogIzIzMjMyMzt9Ci5jYXRfc3VibGVnX2hlYWR7Y29sb3I6c2lsdmVyO2JhY2tncm91bmQtY29sb3I6IGdyYXk7fQoubW9kdWxlX2NhdF9hcmVhX3dpZGUge3dpZHRoOiA1NTdweDt9Ci5tb2R1bGVfY2F0X2xlZ2VuZHtmb250LXNpemU6IDlweDsgbWFyZ2luOiA2cHggMDsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IG1heC13aWR0aDo4MCU7bWluLXdpZHRoOjMwJTt9Ci5tb2R1bGVfY2F0X2FyZWFfc2hvcnQge3dpZHRoOiA1MDBweDsgaGVpZ2h0OiAxMDBweDt9Ci5tb2R1bGVfY2F0X2xpbmsge3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO30KLm1vZHVsZV9jYXRfZmllbGRzZXQge21hcmdpbi1ib3R0b206MmVtO30KLm1vZHVsZV9jYXRyX3RhYmxlIHRyLnJvdzE6aG92ZXIsIC5tb2R1bGVfY2F0cl90YWJsZSB0ci5yb3cyOmhvdmVye2JhY2tncm91bmQ6ICNDQ0RCREQ7fQoub2RkIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbm1lbnQ6IHRvcDt9Ci5ldmVuIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbm1lbnQ6IHRvcDt9Ci5pbnB1dGhlbHAgIHsgY29sb3I6ICMzODQ2NTQ7IHBhZGRpbmc6IDA7IG1hcmdpbjogMDsgd2lkdGg6IGF1dG87IHRleHQtYWxpZ246bGVmdDsgfQ==]]></data>
	</file>
	<file>
	  <filename>/includes/Category-CSS-based.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3NlY3Rpb24gbmFtZT1udW1pbWcgbG9vcD0kaW1hZ2VfdXJsX2FycmF5fTxpbWcgc3JjPSJ7JGltYWdlX3VybF9hcnJheVtudW1pbWddfSIgYWx0PSJ7dGl0bGV9IiB0aXRsZT0ie3RpdGxlfSIgLz57L3NlY3Rpb259DXskbm90ZXN9DTxkaXYgY2xhc3M9ImNhdGVnb3J5X2l0ZW1zIj4NICAge2lmICRoYXNuYXYgPT0gMX0NPGRpdiBjbGFzcz0iY2F0bmF2Ij57JHByZXZ9eyRuYXZzdHJ9eyRuZXh0fTwvZGl2Pg0Jey9pZn0NICAgIHtzZWN0aW9uIG5hbWU9bnVtbG9vcCBsb29wPSRpdGVtc30NICAgICAgICA8ZGl2IGNsYXNzPSJjYXRlZ29yeV9pdGVtIj48YSBocmVmPSJ7JGl0ZW1zW251bWxvb3BdLmxpbmt9Ij48aW1nIHNyYz0ieyRpdGVtc1tudW1sb29wXS5pbWFnZX0iIHRpdGxlPSJ7JGl0ZW1zW251bWxvb3BdLnRpdGxlfSIgYWx0PSJ7JGl0ZW1zW251bWxvb3BdLnRpdGxlfSIvPjwvYT48YnIgLz48YSBocmVmPSJ7JGl0ZW1zW251bWxvb3BdLmxpbmt9Ij57JGl0ZW1zW251bWxvb3BdLnRpdGxlfTwvYT48L2Rpdj4NICAgIHsvc2VjdGlvbn0NICAgIHtpZiAkaGFzbmF2ID09IDF9DXsqIA1UaGUgbnVtYmVyIHRoYXQgaXMgd2l0aG91dCBhIGxpbmsgKGEgaHJlZikgaGF2ZSBhIDxzcGFuIGNsYXNzPSJub2xpbmsiICkgaGF2ZSBhIGxvb2sgaW4gc291cmNlIGNvZGUtaHRtbA0qfQ08ZGl2IGNsYXNzPSJjYXRuYXYiPnskcHJldn17JG5hdnN0cn17JG5leHR9PC9kaXY+DQl7L2lmfQ08L2Rpdj4N]]></data>
	</file>
	<file>
	  <filename>/includes/Category-Table-based.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2Fzc2lnbiB2YXI9ImNvbHMiIHZhbHVlPSIzIn0NCntzZWN0aW9uIG5hbWU9bnVtaW1nIGxvb3A9JGltYWdlX3VybF9hcnJheX08aW1nIHNyYz0ieyRpbWFnZV91cmxfYXJyYXlbbnVtaW1nXX0iIHRpdGxlPSJ7dGl0bGV9IiBhbHQ9Int0aXRsZX0iIC8+ey9zZWN0aW9ufQ0KPHRhYmxlIHN0eWxlPSJib3JkZXI6IHNvbGlkIDFweCBibGFjazsiPg0KPHRyPg0KICAgIHtzZWN0aW9uIG5hbWU9bnVtbG9vcCBsb29wPSRpdGVtc30NCiAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogMjAwcHg7Ij48YSBocmVmPSJ7JGl0ZW1zW251bWxvb3BdLmxpbmt9Ij48aW1nIHNyYz0ieyRpdGVtc1tudW1sb29wXS5pbWFnZX0iIHRpdGxlPSJ7JGl0ZW1zW251bWxvb3BdLnRpdGxlfSIgYWx0PSJ7JGl0ZW1zW251bWxvb3BdLnRpdGxlfSIvPjwvYT48YnIgLz48YSBocmVmPSJ7JGl0ZW1zW251bWxvb3BdLmxpbmt9Ij57JGl0ZW1zW251bWxvb3BdLnRpdGxlfTwvYT48L3RkPg0KICAgICAgICB7aWYgbm90ICgkc21hcnR5LnNlY3Rpb24ubnVtbG9vcC5yb3dudW0gbW9kICRjb2xzKX0NCiAgICAgICAgICAgICAgICB7aWYgbm90ICRzbWFydHkuc2VjdGlvbi5udW1sb29wLmxhc3R9DQogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPjx0cj4NCiAgICAgICAgICAgICAgICB7L2lmfQ0KICAgICAgICB7L2lmfQ0KICAgICAgICB7aWYgJHNtYXJ0eS5zZWN0aW9uLm51bWxvb3AubGFzdH0NCiAgICAgICAgICAgICAgICB7bWF0aCBlcXVhdGlvbiA9ICJuIC0gYSAlIG4iIG49JGNvbHMgYT0kaXRlbXN8QGNvdW50IGFzc2lnbj0iY2VsbHMifQ0KICAgICAgICAgICAgICAgIHtpZiAkY2VsbHMgbmUgJGNvbHN9DQogICAgICAgICAgICAgICAge3NlY3Rpb24gbmFtZT1wYWQgbG9vcD0kY2VsbHN9DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAyMDBweDsiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICAgICAgey9zZWN0aW9ufQ0KICAgICAgICAgICAgICAgIHsvaWZ9DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgey9pZn0NCiAgICB7L3NlY3Rpb259DQogICAge2lmICRoYXNuYXYgPT0gMX0NCjx0cj48dGR7aWYgJGNvbHMgZ3QgMX0gY29sc3Bhbj0ieyRjb2xzfSJ7L2lmfSBzdHlsZT0iYm9yZGVyLXRvcDogc29saWQgMXB4IGJsYWNrOyI+eyRwcmV2fXskbmF2c3RyfXskbmV4dH08L3RkPjwvdHI+DQoJey9pZn0NCjwvdGFibGU+DQo=]]></data>
	</file>
	<file>
	  <filename>/includes/Comparison-Table-based.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iaXRlbV9jb21wYXJpc29uIj4NPHRhYmxlPg0JPHRyPg0JCTx0aD48L3RoPg0JCXtzZWN0aW9uIG5hbWU9YXQgbG9vcD0kYXR0cmxpc3R9DQkJCTx0aD57JGF0dHJsaXN0W2F0XS0+YXR0cn08L3RoPg0JCXsvc2VjdGlvbn0NCTwvdHI+DQl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPXRpfQ0JCTx0cj4NCQkJPHRkPg0JCQkJPGEgaHJlZj0ieyR0aS5saW5rfSI+DQkJCQk8aW1nIHNyYz0ieyRpbWFnZV9yb290fT9pPXskdGkuYWxpYXN9X3RfMV81MF8xLmpwZyIgLz48L2E+PGJyIC8+DQkJCQl7JHRpLnRpdGxlfQ0JCQk8L3RkPg0JCQl7c2VjdGlvbiBuYW1lPWF0IGxvb3A9JGF0dHJsaXN0fQ0JCQkJPHRkPg0JCQkJCXthc3NpZ24gdmFyPWF0dHJrZXkgdmFsdWU9YCRhdHRybGlzdFthdF0tPnNhZmVgfXskdGlbJGF0dHJrZXldfQ0JCQkJPC90ZD4NCQkJey9zZWN0aW9ufQ0JCTwvdHI+DQl7L2ZvcmVhY2h9DTwvdGFibGU+DTwvZGl2Pg0=]]></data>
	</file>
	<file>
	  <filename>/includes/Feature-CSS-based.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iZmVhdHVyZV9pdGVtcyI+DSAgICB7c2VjdGlvbiBuYW1lPW51bWxvb3AgbG9vcD0kaXRlbXN9DSAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZV9pdGVtIj48YSBocmVmPSJ7JGl0ZW1zW251bWxvb3BdLmxpbmt9Ij48aW1nIHNyYz0ieyRpdGVtc1tudW1sb29wXS5pbWFnZX0iIHRpdGxlPSJ7JGl0ZW1zW251bWxvb3BdLnRpdGxlfSIgYWx0PSJ7JGl0ZW1zW251bWxvb3BdLnRpdGxlfSIvPjwvYT48YnIgLz48YSBocmVmPSJ7JGl0ZW1zW251bWxvb3BdLmxpbmt9Ij57JGl0ZW1zW251bWxvb3BdLnRpdGxlfTwvYT48L2Rpdj4NICAgIHsvc2VjdGlvbn0NPC9kaXY+DQ==]]></data>
	</file>
	<file>
	  <filename>/includes/Feature-Table-based.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2Fzc2lnbiB2YXI9ImNvbHMiIHZhbHVlPSIxIn0NPHRhYmxlIHN0eWxlPSJib3JkZXI6IHNvbGlkIDFweCBibGFjazsiPg08dHI+DSAgICB7c2VjdGlvbiBuYW1lPW51bWxvb3AgbG9vcD0kaXRlbXN9DSAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogMjAwcHg7Ij48YSBocmVmPSJ7JGl0ZW1zW251bWxvb3BdLmxpbmt9Ij48aW1nIHNyYz0ieyRpdGVtc1tudW1sb29wXS5pbWFnZX0iIHRpdGxlPSJ7JGl0ZW1zW251bWxvb3BdLnRpdGxlfSIgYWx0PSJ7JGl0ZW1zW251bWxvb3BdLnRpdGxlfSIvPjwvYT48YnIgLz48YSBocmVmPSJ7JGl0ZW1zW251bWxvb3BdLmxpbmt9Ij57JGl0ZW1zW251bWxvb3BdLnRpdGxlfTwvYT48L3RkPg0gICAgICAgIHtpZiBub3QgKCRzbWFydHkuc2VjdGlvbi5udW1sb29wLnJvd251bSBtb2QgJGNvbHMpfQ0gICAgICAgICAgICAgICAge2lmIG5vdCAkc21hcnR5LnNlY3Rpb24ubnVtbG9vcC5sYXN0fQ0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPjx0cj4NICAgICAgICAgICAgICAgIHsvaWZ9DSAgICAgICAgey9pZn0NICAgICAgICB7aWYgJHNtYXJ0eS5zZWN0aW9uLm51bWxvb3AubGFzdH0NICAgICAgICAgICAgICAgIHttYXRoIGVxdWF0aW9uID0gIm4gLSBhICUgbiIgbj0kY29scyBhPSRpdGVtc3xAY291bnQgYXNzaWduPSJjZWxscyJ9DSAgICAgICAgICAgICAgICB7aWYgJGNlbGxzIG5lICRjb2xzfQ0gICAgICAgICAgICAgICAge3NlY3Rpb24gbmFtZT1wYWQgbG9vcD0kY2VsbHN9DSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0id2lkdGg6IDIwMHB4OyI+Jm5ic3A7PC90ZD4NICAgICAgICAgICAgICAgIHsvc2VjdGlvbn0NICAgICAgICAgICAgICAgIHsvaWZ9DSAgICAgICAgICAgICAgICA8L3RyPg0gICAgICAgIHsvaWZ9DSAgICB7L3NlY3Rpb259CjwvdGFibGU+DQ==]]></data>
	</file>
	<file>
	  <filename>/includes/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/includes/Item-CSS-based.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iY2F0YWxvZ19pdGVtIj4NPGRpdiBjbGFzcz0iaXRlbV9pbWFnZXMiPjxpbWcgaWQ9Iml0ZW1faW1hZ2UiIG5hbWU9Iml0ZW1faW1hZ2UiICBzcmM9InskaW1hZ2VfMV91cmx9IiBhbHQ9Int0aXRsZX0iIHRpdGxlPSJ7dGl0bGV9IiAvPg08ZGl2IGNsYXNzPSJpdGVtX3RodW1ibmFpbHMiPntzZWN0aW9uIG5hbWU9aW5kIGxvb3A9JGltYWdlX3VybF9hcnJheX0NPGEgaHJlZj0iamF2YXNjcmlwdDpyZXBsKCd7JGltYWdlX3VybF9hcnJheVtpbmRdfScpIj48aW1nIHNyYz0ieyRpbWFnZV90aHVtYl91cmxfYXJyYXlbaW5kXX0iIHRpdGxlPSJ7dGl0bGV9IiBhbHQ9Int0aXRsZX0iIC8+PC9hPg17L3NlY3Rpb259PC9kaXY+PC9kaXY+DXtzZWN0aW9uIG5hbWU9YXQgbG9vcD0kYXR0cmxpc3R9DTxkaXYgY2xhc3M9Iml0ZW1fYXR0cmlidXRlX25hbWUiPnskYXR0cmxpc3RbYXRdLm5hbWV9OjwvZGl2PjxkaXYgY2xhc3M9Iml0ZW1fYXR0cmlidXRlX3ZhbCI+e2V2YWwgdmFyPSRhdHRybGlzdFthdF0ua2V5fTwvZGl2Pg17L3NlY3Rpb259DTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NZnVuY3Rpb24gcmVwbChpbWcpDXsNICBkb2N1bWVudC5pdGVtX2ltYWdlLnNyYz1pbWc7DX0NPC9zY3JpcHQ+DQ17aWYgJGZpbGVfY291bnQgPiAwfQ08dWwgY2xhc3M9ImZpbGVzIj57c2VjdGlvbiBuYW1lPWluZCBsb29wPSRmaWxlX25hbWVfYXJyYXl9DTxsaT48YSBocmVmPSJ7JGZpbGVfdXJsX2FycmF5W2luZF19Ij57JGZpbGVfbmFtZV9hcnJheVtpbmRdfTwvYT48L2xpPg17L3NlY3Rpb259DTwvdWw+DXsvaWZ9DQ08L2Rpdj4N]]></data>
	</file>
	<file>
	  <filename>/includes/Item-Table-based.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iaXRlbSI+DTx0YWJsZT48dHI+PHRkPjxpbWcgaWQ9Iml0ZW1faW1hZ2UiIG5hbWU9Iml0ZW1faW1hZ2UiICBzcmM9InskaW1hZ2VfMV91cmx9IiB0aXRsZT0ie3RpdGxlfSIgYWx0PSJ7dGl0bGV9IiAvPjwvdGQ+DTx0ZD57c2VjdGlvbiBuYW1lPWluZCBsb29wPSRpbWFnZV91cmxfYXJyYXl9DTxhIGhyZWY9ImphdmFzY3JpcHQ6cmVwbCgneyRpbWFnZV91cmxfYXJyYXlbaW5kXX0nKSI+PGltZyBzcmM9InskaW1hZ2VfdGh1bWJfdXJsX2FycmF5W2luZF19IiB0aXRsZT0ie3RpdGxlfSIgYWx0PSJ7dGl0bGV9IiAvPjwvYT4Ney9zZWN0aW9ufTwvdGQ+PC90cj48L3RhYmxlPg17c2VjdGlvbiBuYW1lPWF0IGxvb3A9JGF0dHJsaXN0fQ08cD48c3Ryb25nPnskYXR0cmxpc3RbYXRdLm5hbWV9PC9zdHJvbmc+OiB7ZXZhbCB2YXI9JGF0dHJsaXN0W2F0XS5rZXl9PC9wPg17L3NlY3Rpb259DTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NZnVuY3Rpb24gcmVwbChpbWcpDXsNIGRvY3VtZW50Lml0ZW1faW1hZ2Uuc3JjPWltZzsNfQ08L3NjcmlwdD4NPC9kaXY+DQ==]]></data>
	</file>
	<file>
	  <filename>/includes/misc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/includes/misc/fls_lst.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiRjYXRfZmlsZXNfMl9yZW1vdmUgPSBhcnJheSgNCidjb250ZW50dHlwZS5jYXRhbG9nY2F0ZWdvcnkucGhwJywNCidjb250ZW50dHlwZS5jYXRhbG9naXRlbS5waHAnLA0KJ2NvbnRlbnR0eXBlLmNhdGFsb2dwcmludGFibGUucGhwJw0KKTsgIA0KPz4=]]></data>
	</file>
	<file>
	  <filename>/includes/misc/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/includes/Printable-Catalog-Table-based.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2Fzc2lnbiB2YXI9ImNvbHMiIHZhbHVlPSIzIn0NPHRhYmxlIHN0eWxlPSJib3JkZXI6IHNvbGlkIDFweCBibGFjazsiPg08dHI+DXtzZWN0aW9uIG5hbWU9bnVtbG9vcCBsb29wPSRpdGVtc30NICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAyMDBweDsiPjxhIGhyZWY9InskaXRlbXNbbnVtbG9vcF0ubGlua30iPjxpbWcgc3JjPSJ7JGl0ZW1zW251bWxvb3BdLmltYWdlfSIgdGl0bGU9InskaXRlbXNbbnVtbG9vcF0udGl0bGV9IiBhbHQ9InskaXRlbXNbbnVtbG9vcF0udGl0bGV9Ii8+PC9hPjxiciAvPjxhIGhyZWY9InskaXRlbXNbbnVtbG9vcF0ubGlua30iPnskaXRlbXNbbnVtbG9vcF0udGl0bGV9PC9hPjxiciAvPkNhdGVnb3J5OiB7JGl0ZW1zW251bWxvb3BdLmNhdH08YnIgLz4Ne2ZvcmVhY2ggZnJvbT0kYXR0cmxpc3QgaXRlbT1hdHRyIGtleT1rfQ17JGF0dHJ9OiB7JGl0ZW1zW251bWxvb3BdWyRrXX0NPGJyIC8+DXsvZm9yZWFjaH0NPC90ZD4NICAgICAgICB7aWYgbm90ICgkc21hcnR5LnNlY3Rpb24ubnVtbG9vcC5yb3dudW0gbW9kICRjb2xzKX0NICAgICAgICAgICAgICAgIHtpZiBub3QgJHNtYXJ0eS5zZWN0aW9uLm51bWxvb3AubGFzdH0NICAgICAgICAgICAgICAgICAgICAgICAgPC90cj48dHI+DSAgICAgICAgICAgICAgICB7L2lmfQ0gICAgICAgIHsvaWZ9DSAgICAgICAge2lmICRzbWFydHkuc2VjdGlvbi5udW1sb29wLmxhc3R9DSAgICAgICAgICAgICAgICB7bWF0aCBlcXVhdGlvbiA9ICJuIC0gYSAlIG4iIG49JGNvbHMgYT0kaXRlbXN8QGNvdW50IGFzc2lnbj0iY2VsbHMifQ0gICAgICAgICAgICAgICAge2lmICRjZWxscyBuZSAkY29sc30NICAgICAgICAgICAgICAgIHtzZWN0aW9uIG5hbWU9cGFkIGxvb3A9JGNlbGxzfQ0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9IndpZHRoOiAyMDBweDsiPiZuYnNwOzwvdGQ+DSAgICAgICAgICAgICAgICB7L3NlY3Rpb259DSAgICAgICAgICAgICAgICB7L2lmfQ0gICAgICAgICAgICAgICAgPC90cj4NICAgICAgICB7L2lmfQ0gICB7L3NlY3Rpb259DTwvdGFibGU+DXskY29weXJpZ2h0fQ==]]></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[PD9waHAKJGxhbmdbJ25hbWVpbWFnZXMnXT0nSW1hZ2VzJzsKJGxhbmdbJ25hbWVmaWxlcyddPSdGaWxlcyc7CiRsYW5nWyduYW1lZmlsZSddPSdGaWxlJzsKJGxhbmdbJ2RlbGV0ZWltYWdlJ109J0RlbGV0ZSBJbWFnZSc7CiRsYW5nWydkZWxldGVmaWxlJ109J0RlbGV0ZSBGaWxlJzsKJGxhbmdbJ093bmVyJ109J093bmVyJzsKJGxhbmdbJ0NhdGFsb2dJdGVtJ109J0l0ZW0gQ2F0YWxvZ2VyJzsKJGxhbmdbJ25hbWVwYWdlJ109J1BhZ2UnOwokbGFuZ1snUGVybWlzc2lvbnMnXT0nUGVybWlzc2lvbnMnOwokbGFuZ1snU3ViJ109J1N1YiAtJzsKJGxhbmdbJ3RpdGxlX2dsb2JhbF9pdGVtX3NvcnRfb3JkZXIyJ10gPSAnSXRlbSBTb3J0IE9yZGVyJzsKJGxhbmdbJ3RpdGxlX2dsb2JhbF9pdGVtc19wZXJfcGFnZTInXT0gJ0l0ZW1zIFBlciBQYWdlJzsKJGxhbmdbJ3RpdGxlX2dsb2JhbF9jYXRlZ29yeV9yZWN1cnNlMiddID0gJ0Rpc3BsYXkgQmVoYXZpb3InOwokbGFuZ1snd2hpY2hfYXR0cmlidXRlcyddID0gJ1doaWNoIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHNob3duIGluIGNhdGFsb2cnOwokbGFuZ1snbmF2VGFiJ10gPSAnIHwgJzsgIAoKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ109J1lvdSBuZWVkICVzIHNldCB0byBkbyB0aGF0Lic7CiRsYW5nWydmcmllbmRseW5hbWUnXT0nQ2F0YWxvZ2VyJzsKJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXT0nTWFuYWdlIENhdGFsb2cgc2V0dGluZ3MnOwokbGFuZ1snYXJleW91c3VyZSddPSdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgJXM/JzsKJGxhbmdbJ3VuaXF1ZWNvZGUnXT0nVW5pcXVlIENvZGUnOwokbGFuZ1sndGVtcGxhdGVsaXN0J109J1N1Yi10ZW1wbGF0ZXMnOwokbGFuZ1snbGlzdHRlbXBsJ109J01hbmFnZSBTdWItdGVtcGxhdGVzJzsKJGxhbmdbJ3RpdGxlX3VwbG9hZCddID0gJ1VwbG9hZCc7CiRsYW5nWyd0aXRsZV9maWVsZF90eXBlJ10gPSAnRmllbGQgVHlwZSc7CiRsYW5nWyd0aXRsZV9zZWxlY3RfdmFsdWVzJ10gPSAnVmFsdWUnOwokbGFuZ1sndGl0bGVfaXRlbV90YWInXT0nSXRlbSBBdHRyaWJ1dGVzJzsKJGxhbmdbJ3RpdGxlX2NhdGVnb3J5X3RhYiddPSdDYXRlZ29yeSBBdHRyaWJ1dGVzJzsKJGxhbmdbJ3RpdGxlX3ByaW50YWJsZV90YWInXT0nUHJpbnRhYmxlIENhdGFsb2cgQXR0cmlidXRlcyc7CiRsYW5nWyd0aXRsZV9pdGVtX2ltYWdlX3RhYiddPSdJdGVtIEltYWdlIFNldHRpbmdzJzsKJGxhbmdbJ3RpdGxlX2NhdGVnb3J5X2ltYWdlX3RhYiddPSdDYXRlZ29yeSBQYWdlIFNldHRpbmdzJzsKJGxhbmdbJ3RpdGxlX3ByaW50YWJsZV90YWInXT0nUHJpbnRhYmxlIENhdGFsb2cgU2V0dGluZ3MnOwokbGFuZ1sndGl0bGVfcGF0aF90YWInXT0nUGF0aHMnOwokbGFuZ1sndGl0bGVfZGVsZXRlJ109J0RlbGV0ZT8nOwokbGFuZ1sndGl0bGVfZmlsZV90YWInXT0nSXRlbSBGaWxlIFNldHRpbmdzJzsKJGxhbmdbJ3RpdGxlX2ltYWdlX3RhYiddPSdPdGhlciBJbWFnZSBTZXR0aW5ncyc7CiRsYW5nWyd0aXRsZV9pdGVtX3RlbXBsYXRlX3ZhcnMnXSA9ICdJdGVtIFRlbXBsYXRlIFZhcmlhYmxlcyc7CiRsYW5nWyd0aXRsZV9jYXRfdGVtcGxhdGVfdmFycyddID0gJ0NhdGVnb3J5IFRlbXBsYXRlIFZhcmlhYmxlcyc7CiRsYW5nWyd0aXRsZV9jYXRhbG9nX3RlbXBsYXRlX3ZhcnMnXT0nQ2F0YWxvZyBUZW1wbGF0ZSBWYXJpYWJsZXMnOwokbGFuZ1sndGl0bGVfY29tcGFyZV90ZW1wbGF0ZV92YXJzJ109J0NvbXBhcmlzb24gVGVtcGxhdGUgVmFyaWFibGVzJzsKJGxhbmdbJ3RpdGxlX2ZlYXR1cmVfdGVtcGxhdGVfdmFycyddPSdGZWF0dXJlIGxpc3QgVGVtcGxhdGUgVmFyaWFibGVzJzsKJGxhbmdbJ3RpdGxlX3Nob3dfb25seV9leGlzdGluZ19pbWFnZXMnXT0nRG9uXCd0IGluY2x1ZGUgbWlzc2luZyBpbWFnZXMnOwokbGFuZ1sndGl0bGVfc2hvd19vbmx5X2V4aXN0aW5nX2ltYWdlc19oZWxwJ109J1RoaXMgd2lsbCBvbmx5IHB1dCBpbWFnZSByZWZlcmVuY2VzIGludG8gbGlzdHMgaWYgdGhlIGltYWdlIGV4aXN0cy48YnIgLz4oTm9ybWFsbHksIHRoaXMgaXMgZmluZSwgYnV0IGlmIHlvdSBhcmUgZG9pbmcgc29tZXRoaW5nIGNsZXZlciB3aXRoIGltYWdlPGJyIC8+YXJyYXkgaW5kZXhlcywgdGhpcyBjb3VsZCBjYXVzZSB5b3UgdHJvdWJsZS4pJzsKJGxhbmdbJ3RpdGxlX2ZsdXNoX2NhdHMnXT0nRmx1c2ggY2F0ZWdvcnkgcGFnZSBidWZmZXJzJzsKJGxhbmdbJ3RpdGxlX2ZsdXNoX2NhdHNfaGVscCddPSdJZiB5b3UgaGF2ZSBhIGh1Z2UgbnVtYmVyIG9mIGl0ZW1zIGRpc3BsYXllZDxiciAvPmluIGEgY2F0ZWdvcnksIHNvbWUgUEhQIGluc3RhbGxzIHdpbGwgZmFpbCB0byBkaXNwbGF5IHRoZSBwYWdlPGJyIC8+Y29ycmVjdGx5LiBDaGVjayB0aGlzIGJveCB0byBzb2x2ZSB0aGlzIHByb2JsZW0gKHRlc3QgZm9yIHNpZGUgZWZmZWN0cykuJzsKJGxhbmdbJ3RpdGxlX2l0ZW1fZmlsZV90eXBlcyddPSdQZXJtaXR0ZWQgZmlsZSB0eXBlcyc7CiRsYW5nWyd0aXRsZV9pbWFnZV91cGxvYWRfcGF0aCddPSdMb2NhdGlvbiBmb3IgdXBsb2FkZWQgaW1hZ2UgZmlsZXMnOwokbGFuZ1sndGl0bGVfZmlsZV91cGxvYWRfcGF0aCddPSdMb2NhdGlvbiBmb3Igb3RoZXIgdXBsb2FkZWQgaXRlbSBmaWxlcyc7CiRsYW5nWyd0aXRsZV9pbWFnZV9wcm9jX3BhdGgnXT0nTG9jYXRpb24gZm9yIHByb2Nlc3NlZCBpbWFnZXMgKHRodW1ibmFpbHMsIHNjYWxlZCBpbWFnZXMsIGV0YyknOwokbGFuZ1sncGF0aF9oZWxwJ109J1lvdSBjYW4gc3BlY2lmeSB3aGVyZSBDYXRhbG9nZXIgc3RvcmVzIGZpbGVzLiBUaGVzZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIDxpPnVwbG9hZHNfcGF0aDwvaT4gZGVmaW5lZCBpbiB5b3VyIGNvbmZpZy5waHA8YnIgLz5OT1RFOiBJZiB5b3UgY2hhbmdlIHRoZXNlIHBhdGhzIGFmdGVyIGZpbGVzIG9yIGltYWdlcyBoYXZlIGJlZW4gdXBsb2FkZWQsIENhdGFsb2dlciB3aWxsIGxvc2UgdGhlIGFscmVhZHktdXBsb2FkZWQgYXNzZXRzICh0aGV5IHdpbGwgc3RpbGwgYmUgdGhlcmUsIGJ1dCBDYXRhbG9nZXIgd2lsbCBub3Qga25vdyBhYm91dCB0aGVtLCBzbyB5b3Ugd2lsbCBuZWVkIHRvIHJlLXVwbG9hZCB0aGVtIGZvciBDYXRhbG9nZXIgdG8gZmlndXJlIGl0IG91dCkuJzsKCiRsYW5nWydjYXRhbG9nZXInXT0nQ2F0YWxvZ2VyJzsKCiRsYW5nWyd0aXRsZV9hdHRyX29yZGVyX2J5J109J09yZGVyJzsKJGxhbmdbJ3RpdGxlX2F0dHJfYWxpYXMnXT0nQXR0cmlidXRlIEFsaWFzIChTbWFydHkgRnJpZW5kbHkpJzsKJGxhbmdbJ3RpdGxlX2F0dHJfbGVuZ3RoJ109J0xlbmd0aConOwokbGFuZ1sndGl0bGVfYXR0cl9kZWZhdWx0J109J0RlZmF1bHQgVmFsdWUnOwokbGFuZ1sndGl0bGVfYXR0cl9sZW5ndGhfaGVscCddPScqTGVuZ3RoIG9ubHkgYXBwbGllcyB0byAiVGV4dCI8YnIgLz5WYWx1ZSBpcyBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIG9wdGlvbnMgZm9yIERyb3Bkb3duczxiciAvPlZhbHVlIHNob3VsZCBjb250YWluIHRoZSBjaGVja2VkIHZhbHVlLCBhIGNvbW1hLCBhbmQgdGhlIHVuY2hlY2tlZCB2YWx1ZSBmb3IgY2hlY2tib3gnOwoKJGxhbmdbJ3RleHQnXSA9ICdUZXh0JzsKJGxhbmdbJ2Ryb3Bkb3duJ10gPSAnRHJvcGRvd24nOwokbGFuZ1sndGV4dGFyZWEnXSA9ICdUZXh0IEFyZWEnOwokbGFuZ1snY2hlY2tib3gnXSA9ICdDaGVja2JveCc7CgokbGFuZ1sndGFiX2FkdmFuY2VkX29wdGlvbnMnXSA9ICdDYXRhbG9nZXIgQWR2LiBPcHRzJzsKJGxhbmdbJ3RhYl9maWVsZHNfbGlzdCddID0gJ0NhdGFsb2dlciBGaWVsZHMgTGlzdCc7CiRsYW5nWyd0YWJfaW1hZ2VzJ10gPSAnQ2F0YWxvZ2VyIEltYWdlcyc7CiRsYW5nWyd0YWJfZmlsZXMnXSA9ICdDYXRhbG9nZXIgRmlsZXMnOwoKCiRsYW5nWydpdGVtX3BhZ2UnXSA9ICdJdGVtIFBhZ2UnOwokbGFuZ1snY2F0ZWdvcnlfcGFnZSddID0gJ0NhdGVnb3J5IFBhZ2UnOwokbGFuZ1snY2F0YWxvZ19wcmludGFibGUnXSA9ICdQcmludGFibGUgQ2F0YWxvZyc7CiRsYW5nWydjYXRhbG9nX2RhdGFzaGVldCddID0gJ0NhdGFsb2cgRGF0YXNoZWV0JzsKJGxhbmdbJ2NhdGFsb2dfc2hvcnRfbGlzdCddPSdGZWF0dXJlIExpc3QnOwokbGFuZ1snaXRlbV9jb21wYXJpc29uJ10gPSAnSXRlbSBDb21wYXJpc29uJzsKCiRsYW5nWyd0aXRsZV9nbG9iYWxfaXRlbV9zb3J0X29yZGVyJ10gPSAnU2V0IGl0ZW0gc29ydCBvcmRlciB0byc7CiRsYW5nWyd0aXRsZV9nbG9iYWxfaXRlbXNfcGVyX3BhZ2UnXT0gJ1NldCBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UgdG8nOwokbGFuZ1sndGl0bGVfZ2xvYmFsX2NhdGVnb3J5X3JlY3Vyc2UnXSA9ICdTZXQgQ2F0ZWdvcnkgRGlzcGxheSBCZWhhdmlvciB0byc7CgokbGFuZ1sndGl0bGVfaXRlbV9zb3J0X29yZGVyJ10gPSAnRGVmYXVsdCBpdGVtIHNvcnQgb3JkZXInOwokbGFuZ1sndGl0bGVfcHJpbnRhYmxlX3NvcnRfb3JkZXInXSA9ICdEZWZhdWx0IHByaW50YWJsZSBjYXRhbG9nIHNvcnQgb3JkZXInOwokbGFuZ1sndGl0bGVfaXRlbXNfcGVyX3BhZ2UnXT0gJ0RlZmF1bHQgbnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlJzsKJGxhbmdbJ3RpdGxlX2F2YWlsX2F0dHJzJ10gPSAnSXRlbSBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBmb3IgdGhlIHRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX2F2YWlsX2ltYXR0cnMnXSA9ICdJdGVtIGltYWdlcyBhdmFpbGFibGUgZm9yIHRoZSB0ZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9pdGVtX2ltYWdlX3NpemVfaGVybyddID0gJ0ltYWdlIHNpemUgZm9yIEl0ZW0gUGFnZSAobG9uZyBheGlzIGluIHBpeGVscyknOwokbGFuZ1sndGl0bGVfaXRlbV9pbWFnZV9zaXplX3RodW1ibmFpbCddID0gJ1RodW1iYWlsIGltYWdlIHNpemUgZm9yIEl0ZW0gUGFnZSAobG9uZyBheGlzIGluIHBpeGVscyknOwokbGFuZ1sndGl0bGVfaXRlbV9pbWFnZV9zaXplX2NhdGVnb3J5J10gPSAnVGh1bWJuYWlsIGltYWdlIHNpemUgZm9yIEl0ZW0gb24gQ2F0ZWdvcnkgUGFnZSAobG9uZyBheGlzIGluIHBpeGVscyknOwokbGFuZ1sndGl0bGVfaXRlbV9pbWFnZV9zaXplX2NhdGFsb2cnXSA9ICdUaHVtYm5haWwgaW1hZ2Ugc2l6ZSBmb3IgSXRlbSBvbiBDYXRhbG9nIFBhZ2UgKGxvbmcgYXhpcyBpbiBwaXhlbHMpJzsKJGxhbmdbJ3RpdGxlX2NhdGVnb3J5X2ltYWdlX3NpemVfaGVybyddID0gJ0ltYWdlIHNpemUgZm9yIENhdGVnb3J5IFBhZ2UgKGxvbmcgYXhpcyBpbiBwaXhlbHMpJzsKJGxhbmdbJ3RpdGxlX2NhdGVnb3J5X2ltYWdlX3NpemVfdGh1bWJuYWlsJ10gPSAnVGh1bWJhaWwgaW1hZ2Ugc2l6ZSBmb3IgQ2F0ZWdvcnkgUGFnZSAobG9uZyBheGlzIGluIHBpeGVscyknOwokbGFuZ1sndGl0bGVfdGVtcGxhdGUnXT0nVGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfdGVtcGxhdGVfdHlwZSddPSdUZW1wbGF0ZSBUeXBlJzsKJGxhbmdbJ3RpdGxlX3RpdGxlJ109J1RpdGxlJzsKJGxhbmdbJ3RpdGxlX2l0ZW1faW1hZ2VfY291bnQnXT0nTWF4aW11bSBudW1iZXIgb2Ygdmlld3MgZm9yIGVhY2ggSXRlbSc7CiRsYW5nWyd0aXRsZV9pdGVtX2ZpbGVfY291bnQnXT0nTWF4aW11bSBudW1iZXIgb2Ygb3RoZXIgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggaXRlbSc7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeV9pbWFnZV9jb3VudCddPSdNYXhpbXVtIG51bWJlciBvZiBCYW5uZXIgaW1hZ2VzIGZvciBlYWNoIENhdGVnb3J5IFBhZ2UnOwokbGFuZ1sndGl0bGVfaXRlbV9hdHRyaWJ1dGVzX2hlbHAnXT0nRWFjaCBhdHRyaWJ1dGUgeW91IGVudGVyIGhlcmUgd2lsbCBiZSB0aGUgdGl0bGUgb2YgYSBmaWVsZCB0aGF0IHlvdSBjYW4gdXNlIHRvIGRlc2NyaWJlIGFuIGluZGl2aWR1YWwgaXRlbSwgYW5kIHdpbGwgYmUgZGlzcGxheWVkIHdpdGggdGhhdCBpdGVtLiBZb3UgbWF5IGhhdmUgdG8gdXBkYXRlIHlvdXIgdGVtcGxhdGUgdG8gcmVmbGVjdCB0aGVzZSBhdHRyaWJ1dGVzLic7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeV9hdHRyaWJ1dGVzX2hlbHAnXT0nRWFjaCBhdHRyaWJ1dGUgeW91IGVudGVyIGhlcmUgd2lsbCBiZSB0aGUgdGl0bGUgb2YgYSBmaWVsZCB0aGF0IHlvdSBjYW4gdXNlIHRvIGRlc2NyaWJlIGFuIGl0ZW0gY2F0ZWdvcnksIGFuZCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGF0IGNhdGVnb3J5IHBhZ2UuIFlvdSBtYXkgaGF2ZSB0byB1cGRhdGUgeW91ciB0ZW1wbGF0ZSB0byByZWZsZWN0IHRoZXNlIGF0dHJpYnV0ZXMuJzsKJGxhbmdbJ3RpdGxlX2NhdGFsb2dfYXR0cmlidXRlc19oZWxwJ109J0VhY2ggYXR0cmlidXRlIHlvdSBlbnRlciBoZXJlIHdpbGwgYmUgdGhlIHRpdGxlIG9mIGEgZmllbGQgdGhhdCB5b3UgY2FuIHVzZSB0byBkZXNjcmliZSB0aGUgZW50aXJlIGNhdGFsb2csIGFuZCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgcHJpbnRhYmxlIGNhdGFsb2cgcGFnZS4gWW91IG1heSBoYXZlIHRvIHVwZGF0ZSB5b3VyIHRlbXBsYXRlIHRvIHJlZmxlY3QgdGhlc2UgYXR0cmlidXRlcy4nOwokbGFuZ1sndGl0bGVfY2F0ZWdvcnlfc29ydCddID0gJ0NhdGVnb3J5IFBhZ2UgSXRlbS1saXN0IHNvcnQgb3JkZXInOwokbGFuZ1sndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZSddID0gJ0RlZmF1bHQgQ2F0ZWdvcnkgRGlzcGxheSBCZWhhdmlvcic7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeV9yZWN1cnNlX2l0ZW1zX2FsbCddID0gJ0luY2x1ZGUgYWxsIEl0ZW1zIHdpdGhpbiB0aGlzIGNhdGVnb3J5LCBpbmNsdWRpbmcgaXRlbXMgaW4gc3ViLWNhdGVnb3JpZXMnOwokbGFuZ1sndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9pdGVtc19vbmUnXSA9ICdJbmNsdWRlIGFsbCBJdGVtcyBpbW1lZGlhdGVseSB3aXRoaW4gdGhpcyBjYXRlZ29yeSwgYnV0IG5vdCBpdGVtcyBpbiBzdWItY2F0ZWdvcmllcyc7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeV9yZWN1cnNlX2NhdGVnb3JpZXNfYWxsJ10gPSAnSW5jbHVkZSBhbGwgQ2F0ZWdvcmllcyB3aXRoaW4gdGhpcyBjYXRlZ29yeSwgaW5jbHVkaW5nIGNhdGVnb3JpZXMgaW4gc3ViLWNhdGVnb3JpZXMnOwokbGFuZ1sndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9jYXRlZ29yaWVzX29uZSddID0gJ0luY2x1ZGUgYWxsIENhdGVnb3JpZXMgaW1tZWRpYXRlbHkgd2l0aGluIHRoaXMgY2F0ZWdvcnksIGJ1dCBub3QgY2F0ZWdvcmllcyBpbiBzdWItY2F0ZWdvcmllcyc7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeV9yZWN1cnNlX21peGVkX2FsbCddID0gJ0luY2x1ZGUgYWxsIEl0ZW1zIGFuZCBDYXRlZ29yaWVzIHdpdGhpbiB0aGlzIGNhdGVnb3J5LCBpbmNsdWRpbmcgaXRlbXMgYW5kIGNhdGVnb3JpZXMgaW4gc3ViLWNhdGVnb3JpZXMnOwokbGFuZ1sndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9taXhlZF9vbmUnXSA9ICdJbmNsdWRlIGFsbCBJdGVtcyBhbmQgQ2F0ZWdvcmllcyBpbW1lZGlhdGVseSB3aXRoaW4gdGhpcyBjYXRlZ29yeSwgYnV0IG5vdCBpdGVtcyBvciBjYXRlZ29yaWVzIGluIHN1Yi1jYXRlZ29yaWVzJzsKJGxhbmdbJ3RpdGxlX3Nob3dfbWlzc2luZ19pbWFnZXMnXSA9ICdTaG93ICJObyBJbWFnZSIgaW1hZ2UgZm9yIG1pc3NpbmcgaW1hZ2VzJzsKJGxhbmdbJ3RpdGxlX3Nob3dfbWlzc2luZ19pbWFnZXNfbG9uZyddID0gJ1Nob3cgYSBzcGVjaWFsICJObyBJbWFnZSIgaW1hZ2UgaWYgdGhlcmUgYXJlIG1pc3NpbmcgaW1hZ2VzICh1c2VmdWwgZm9yIGRlYnVnZ2luZy4gT3RoZXJ3aXNlIHdpbGwgdXNlIGEgc2luZ2xlIHBpeGVsIHRyYW5zcGFyZW50IGltYWdlKS4nOwokbGFuZ1snbmF0dXJhbF9vcmRlciddID0gJ05hdmlnYXRpb24gT3JkZXInOwokbGFuZ1snYWxwaGFfb3JkZXInXSA9ICdBbHBoYWJldGljYWwgT3JkZXInOwoKJGxhbmdbJ21hbmFnZXByZWZzJ109J01hbmFnZSBQcmVmZXJlbmNlcyc7CiRsYW5nWydtYW5hZ2VhdHRycyddPSdNYW5hZ2UgVXNlci1EZWZpbmVkIEF0dHJpYnV0ZXMnOwokbGFuZ1snZ2xvYmFsb3BzJ109J0dsb2JhbCBDYXRhbG9nIE9wZXJhdGlvbnMnOwokbGFuZ1snYWRkdGVtcGxhdGUnXT0nQWRkIGEgbmV3IFN1Yi10ZW1wbGF0ZSc7CiRsYW5nWydyZWltcG9ydHRlbXBsYXRlcyddPSdSZS1pbXBvcnQgZXhhbXBsZSBzdWItdGVtcGxhdGVzJzsKJGxhbmdbJ3JlaW1wb3J0ZWQnXSA9ICdTYW1wbGUgc3ViLXRlbXBsYXRlcyBoYXZlIGJlZW4gaW1wb3J0ZWQuJzsKJGxhbmdbJ3RlbXBsYXRldXBkYXRlZCddPSdUZW1wbGF0ZSBhZGRlZC91cGRhdGVkLic7CiRsYW5nWyd0ZW1wbGF0ZWRlbGV0ZWQnXT0nVGVtcGxhdGUgZGVsZXRlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ109J1ByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1snYmFkZmlsZSddID0gJ0ZpbGUgIiVzIiBpcyBub3QgYW4gYWNjZXB0YWJsZSBmb3JtYXQuJzsKJGxhbmdbJ2JhZGltYWdlJ10gPSAnUHJvYmxlbSB1cGxvYWRpbmcgIiVzIiAoY2hlY2sgZmlsZSBzaXplIGFuZC9vciBzZXJ2ZXIgcGVybWlzc2lvbnMpLic7CiRsYW5nWydiYWRpbWFnZWZvcm1hdCddID0gJyIlcyIgaXMgbm90IHZhbGlkLiBPbmx5IGpwZWdzIGFyZSBzdXBwb3J0ZWQgZm9yIHRoZSB0aW1lIGJlaW5nLic7CiRsYW5nWyd1cGxvYWRlZCddID0gJ0ZpbGUgIiVzIiB1cGxvYWRlZCBmb3IgaXRlbSAlcy4nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2F0dHJzdXBkYXRlZCddID0gJ0F0dHJpYnV0ZXMgdXBkYXRlZC4nOwokbGFuZ1snbm9nbG9iYWxjaGFuZ2UnXSA9ICdEbyBub3QgY2hhbmdlJzsKJGxhbmdbJ2dsb2JhbGx5dXBkYXRlZCddID0gJ0NoYW5nZXMgcHJvcGFnYXRlZCBnbG9iYWxseS4nOwokbGFuZ1snYWRkdGVtcGxhdGUnXSA9ICdBZGQgVGVtcGxhdGUnOwokbGFuZ1snZWRpdHRlbXBsYXRlJ10gPSAnRWRpdCBUZW1wbGF0ZSc7CiRsYW5nWydzdWJ0ZW1wbGF0ZXMnXSA9ICdDYXRhbG9nIFN1Yi10ZW1wbGF0ZXMnOwokbGFuZ1snbmV4dCddID0gJzomIzE4NzsnOwokbGFuZ1sncHJldiddID0gJyYjMTcxOzonOwokbGFuZ1snZWRpdCddID0gJ0VkaXQnOwokbGFuZ1snZGVsZXRlJ109J0RlbGV0ZSc7CiRsYW5nWydub3RlbXBsYXRlcyddPSdObyBTdWItdGVtcGxhdGVzIGFyZSBpbnN0YWxsZWQhJzsKCiRsYW5nWydoZWxwdGV4dCddPScKPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGxldHMgeW91IGNyZWF0ZSBvbmxpbmUgY2F0YWxvZ3Mgb3IgcG9ydGZvbGlvcy4gQ2F0YWxvZ3MgY29uc2lzdCBvZiAiQ2F0YWxvZyBJdGVtcyIgd2hpY2ggY291bGQgYmUgcHJvZHVjdHMsIHdvcmtzIG9mIGFydCwgb3IgdGhlIGxpa2UsIGFuZCAiQ2F0YWxvZyBDYXRlZ29yaWVzIiB3aGljaCBjb3VsZCBiZSBpdGVtIGNhdGVnb3JpZXMgb3Igb3RoZXIgbmF0dXJhbCBkaXZpc2lvbnMgb2YgdGhlIGNhdGFsb2cuPC9wPgo8cD5DYXRlZ29yaWVzIG1heSBiZSBkZWZpbmVkIGhpZXJhcmNoaWNhbGx5ICh1c2luZyB0aGUgc3RhbmRhcmQgQ01TIE1hZGUgU2ltcGxlIGNvbnRlbnQgbGlzdCkuIENhdGVnb3J5IHBhZ2VzIGNhbiBkaXNwbGF5IGl0ZW1zIGluIHRoZSBjYXRlZ29yeSBhbmQvb3Igc3ViY2F0ZWdvcmllcywgb3B0aW9uYWxseSByZWN1cnNpbmcgdGhyb3VnaCBzdWItY2F0ZWdvcmllcy4gVGhpcyBiZWhhdmlvciBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1jYXRlZ29yeSBiYXNpcy48L1A+CjxwPlRoZXJlIGlzIGFsc28gYSBQcmludGFibGUgQ2F0YWxvZywgd2hpY2ggcmVwcmVzZW50cyB0aGUgd2hvbGUgY29sbGVjdGlvbiBvZiBDYXRhbG9nIEl0ZW1zIG9uIGEgc2luZ2xlIHBhZ2UgKHRoaXMgaXMgY3VycmVudGx5IGltcGxlbWVudGVkIGJhZGx5LCBhbmQgd2lsbCBsb2FkIHNsb3dseSkuPC9wPgo8cD5UaGUgbW9kdWxlIGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciAiQ29udGVudCBBbGlhc2VzIiAoYSBtb2R1bGUgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvY29udGVudGFsaWFzZXMvIj50aGUgRGV2ZWxvcGVyIEZvcmdlPC9hPiksIHdoaWNoIGFsbG93cyB5b3UgdG8gcGxhY2UgYW55IENhdGFsb2cgSXRlbSBpbnRvIG11bHRpcGxlIENhdGFsb2cgQ2F0ZWdvcmllcy48L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5XaGVuIHlvdSBpbnN0YWxsIHRoaXMgbW9kdWxlLCBpdCBjcmVhdGVzIHRocmVlIG5ldyBDb250ZW50IFR5cGVzOiBDYXRhbG9nIEl0ZW0sIENhdGFsb2cgQ2F0ZWdvcnksIGFuZCBQcmludGFibGUgQ2F0YWxvZy4gV2hlbiB5b3VcJ3JlIGluIHlvdXIgc2l0ZSBhZG1pbmlzdHJhdGlvbiBjYXRlZ29yeSwgeW91IGFkZCBDYXRhbG9nIEl0ZW1zIGFuZCBDYXRhbG9nIENhdGVnb3JpZXMganVzdCBhcyB5b3Ugd291bGQgYW55IG90aGVyIGtpbmQgb2YgcGFnZS4gU2VsZWN0IENvbnRlbnQgJmd0OyBQYWdlcyAmZ3Q7IEFkZCBDb250ZW50LCBhbmQgdGhlbiBzZWxlY3QgIkNhdGFsb2cgSXRlbSIgb3IgIkNhdGFsb2cgQ2F0ZWdvcnkiIGZyb20gdGhlIENvbnRlbnQgVHlwZSBwdWxsZG93bi48L3A+CjxoND5DYXRhbG9nIEl0ZW1zPC9oND4KPHA+QWRkaW5nIGEgQ2F0YWxvZyBJdGVtIGlzIHNpbWlsYXIgdG8gYWRkaW5nIGFuIG9yZGluYXJ5IHBhZ2UgdG8geW91ciBzaXRlLiBUaGUgZGF0YSBmaWVsZHMgZm9yIHRoZSBJdGVtIGFyZSBub3QgZXhhY3RseSB0aGUgc2FtZSwgaG93ZXZlci4gQWxzbyBub3RlIHRoYXQgaW4gdGhlICJJbWFnZXMiIHRhYiwgeW91IGNhbiBzZWxlY3QgbXVsdGlwbGUgaW1hZ2VzIHRvIHVwbG9hZCBmb3IgdGhlIGl0ZW0uIFdoZW4geW91IHVwbG9hZCBpbWFnZXMsIHRoZSBzeXN0ZW0gd2lsbCBzaXplIHRoZW0gYXBwcm9wcmlhdGVseSBmb3IgdGhlIGNhdGFsb2csIGNyZWF0ZSB0aHVtYm5haWxzIGZvciB1c2UgaW4gdGhlIEl0ZW1cJ3MgcGFnZSwgY3JlYXRlIHRodW1ibmFpbHMgZm9yIGFueSBDYXRlZ29yeSBwYWdlcywgYW5kIHNvIG9uLiBUaGlzIHJlcXVpcmVzIHRoYXQgeW91IGhhdmUgR0Qgb3IgYSBzaW1pbGFyIGltYWdlIGxpYnJhcnkgaW5zdGFsbGVkLiBDdXJyZW50bHksIG9ubHkganBlZyBmb3JtYXQgaW1hZ2VzIGFyZSBzdXBwb3J0ZWQuPC9wPgo8aDQ+Q2F0YWxvZyBDYXRlZ29yaWVzPC9oND4KPHA+QSBDYXRhbG9nIENhdGVnb3J5IGlzIHVzZWQgZm9yIG9yZ2FuaXppbmcgeW91ciBjYXRhbG9nIGl0ZW1zLiBJdCBwcm92aWRlcyBhIHBhZ2UgdGhhdCBsaXN0cyBDYXRhbG9nZXIgY29udGVudCB0aGF0IGlzIGNvbnRhaW5lZCBieSBpdC4gQSBDYXRhbG9nIEl0ZW0gaXMgY29uc2lkZXJlZCB0byBiZSBwYXJ0IG9mIGEgQ2F0YWxvZyBDYXRlZ29yeSBpZiBpdCBpcyBiZWxvdyB0aGF0IENhdGVnb3J5IGluIHRoZSBTaXRlIEhpZXJhcmNoeS4gQ2F0ZWdvcmllcyBjYW4gc2ltaWxhcmx5IGluY2x1ZGUgb3RoZXIgQ2F0ZWdvcmllcy48L3A+CjxwPkNhdGFsb2cgQ2F0ZWdvcmllcyBoYXZlIGEgbnVtYmVyIG9mIHNldHRpbmdzIHRvIGRldGVybWluZSBob3cgdGhleSBzaG91bGQgZGlzcGxheSB0aGUgSXRlbXMgYW5kIENhdGVnb3JpZXMgdGhleSBjb250YWluOiBpZiB5b3UgbG9vayBhdCB0aGUgIk9wdGlvbnMiIHRhYiwgeW91IGNhbiBjaG9vc2UgaG93IG1hbnkgaXRlbXMgYW5kL29yIGNhdGVnb3JpZXMgdG8gc2hvdywgd2hhdCBvcmRlciB0byBzaG93IHRoZW0gaW4sIHdoZXRoZXIgdG8gZGlzcGxheSBvbmx5IGl0ZW1zIG9yIG9ubHkgY2F0ZWdvcmllcyBvciBib3RoLCBhbmQgaG93IG1hbnkgbGV2ZWxzIG9mIHRoZSBoaWVyYXJjaHkgdG8gZGlzcGxheSBiZWxvdyB0aGUgY2F0ZWdvcnkgcGFnZS48L3A+CjxwPkZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTo8L3A+CjxvbD4KCTxsaT48Yj5IYXRzPC9iPgoJCTxvbD4KCQkJPGxpPjxiPkZhc2hpb248L2I+CgkJCSAJPG9sPgoJCQkgCQk8bGk+RmVhdGhlcmVkIEhhdDwvbGk+PGxpPkZlZG9yYSA8L2xpPjxsaT5CYXNlYmFsbCBIYXQ8L2xpPgoJCQkgCTwvb2w+CgkJCSA8L2xpPgoJCSAJPGxpPjxiPldvcmsgSGF0czwvYj4KCQkgICAgCTxvbD4KCQkgICAgCQk8bGk+SGFyZCBIYXQ8L2xpPjxsaT5EaXZpbmcgSGVsbWV0PC9saT4KCQkgICAgCTwvb2w+CgkJICAgIDwvbGk+CgkJPC9vbD4KCTwvbGk+Cjwvb2w+CjxwPkluIHRoaXMgZGlhZ3JhbSwgYm9sZGVkIGl0ZW1zIGFyZSBDYXRhbG9nIENhdGVnb3JpZXMsIGFuZCBub24tYm9sZGVkIGl0ZW1zIGFyZSBDYXRhbG9nIEl0ZW1zLiBEZXBlbmRpbmcgdXBvbiBob3cgeW91IHNldCB5b3VyIG9wdGlvbnMsIHRoZSBIYXRzIENhdGVnb3J5IFBhZ2UgY2FuIHNob3cgb25seSBlbnRyaWVzIGZvciB0aGUgRmFzaGlvbiBhbmQgV29yayBIYXRzIENhdGVnb3J5IFBhZ2VzLCBvciBpdCBjYW4gc2hvdyBlbnRyaWVzIGZvciBGYXNoaW9uLCBXb3JrIEhhdHMsIGFuZCBhbGwgdGhlIGhhdHMgbGlzdGVkIGJlbG93IHRoZW0uPC9wPgo8cD5Zb3UgY2FuIG9wdCB0byBzaG93IHRoZSBpdGVtcyBpbiAibmF0dXJhbCIgb3JkZXIgKGkuZS4sIHRoZSBvcmRlciB0aGUgSXRlbXMgc2hvdyB1cCBpbiB0aGUgQ01TIENvbnRlbnQgSGllcmFyY2h5KSwgb3IgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLjwvUD4KPHA+SWYgeW91IGhhdmUgbGFyZ2UgbnVtYmVycyBvZiBpdGVtcyBpbiBhIENhdGVnb3J5LCB5b3UgY2FuIHNldCB0aGUgbWF4aW11bSBudW1iZXIgdG8gYmUgZGlzcGxheWVkIGluIGEgQ2F0ZWdvcnkgUGFnZSwgYW5kIHRoZSBwYWdlIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgbGlua3MgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgbGlzdC48L3A+CjxwPkVhY2ggQ2F0ZWdvcnkgcGFnZSBjYW4gaGF2ZSBkaWZmZXJlbnQgc2V0dGluZ3MgZm9yIHNvcnQgb3JkZXIsIGxldmVscyB0byBkaXNwbGF5LCBhbmQgbnVtYmVyIG9mIGl0ZW1zLiBZb3UgY2FuIHNldCB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgdmFsdWVzIGluIEV4dGVuc2lvbnMgJmd0OyBDYXRhbG9nZXIgJmd0OyBNYW5hZ2UgUHJlZmVyZW5jZXMuIElmLCBhdCBhIGxhdGVyIGRhdGUsIHlvdSB3aXNoIHRvIGNoYW5nZSBzb21lIHNldHRpbmcgb24gYWxsIG9mIHlvdXIgQ2F0ZWdvcnkgcGFnZXMsIHlvdSBjYW4gZ28gaW50byBFeHRlbnNpb25zICZndDsgQ2F0YWxvZ2VyICZndDsgR2xvYmFsIENhdGFsb2cgT3B0aW9ucywgYW5kIG1ha2UgdGhvc2UgY2hhbmdlcy48L3A+CjxoND5JbWFnZXM8L2g0Pgo8cD5DYXRhbG9nZXIgYWxsb3dzIHlvdSB0byBzZWxlY3QgZGlmZmVyZW50IHNpemUgaW1hZ2VzIGZvciBJdGVtIHBhZ2VzLCBDYXRlZ29yeSBwYWdlcywgYW5kIHRoZSBQcmludGFibGUgQ2F0YWxvZy4gWW91IGNhbiBzZXQgdGhlc2UgZGVmYXVsdHMgaW4gRXh0ZW5zaW9ucyAmZ3Q7IENhdGFsb2dlciAmZ3Q7IE1hbmFnZSBQcmVmZXJlbmNlcy48L3A+CjxwPldoZW4geW91IHVwbG9hZCBpbWFnZXMsIHRoZSBvcmlnaW5hbCBpcyBzdG9yZWQuIFdoZW4gc29tZW9uZSB2aXNpdHMgYSBwYWdlLCB0aGUgcmVkdWNlZCBzaXplIGltYWdlcyBhcmUgcmVxdWVzdGVkIHVzaW5nIGEgc3BlY2lhbCBVUkwsIHdoaWNoIHdpbGwgcmVkaXJlY3QgdGhlIHVzZXJcJ3MgYnJvd3NlciB0byB0aGUgc2NhbGVkIGltYWdlIGlmIGl0IGV4aXN0cywgYW5kIGNyZWF0aW5nIHRoZSBzY2FsZWQgaW1hZ2UgaWYgaXQgZG9lc25cJ3QuIFRoaXMgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIHNpemUgb2YgaW1hZ2VzLCB3aXRob3V0IGhhdmluZyB0byByZS11cGxvYWQgYWxsIHRoZSBpbWFnZXMsIG9yIHJlc2NhbGluZyB0aGVtIGFsbCBhdCBvbmNlLjwvcD4KPHA+VGhpcyBpbWFnZSByZXNjYWxpbmcgY29kZSByZXF1aXJlcyB0aGF0IHlvdSBoYXZlIGVpdGhlciBJbWFnZU1hZ2ljayBvciBHRCBsaWIgaW5zdGFsbGVkLCBhbmQgY29uZmlndXJlZCBpbiB5b3VyIENNUyBNYWRlIFNpbXBsZSBjb25maWcucGhwLjwvcD4KPGg0PkZpbGVzPC9oND4KPHA+Q2F0YWxvZ2VyIGFsbG93cyB5b3UgdG8gYXNzb2NpYXRlIGFyYml0cmFyeSBmaWxlcyB3aXRoIGFueSBJdGVtIHBhZ2UuIFRoZXNlIGFyZSB1cGxvYWRlZCB2aWEgdGhlIGFkbWluLCBqdXN0IGxpa2UgaW1hZ2VzLiBUaGVyZQpoYXZlIGJlZW4gcnVkaW1lbnRhcnkgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgKGUuZy4sIGZpbGUtZXh0ZW5zaW9uLWJhc2VkIHJlc3RyaWN0aW9ucyksIGhvd2V2ZXIsIGFzIHdpdGggYW55IGZpbGUgdXBsb2FkCmNhcGFiaWxpdHkgdGhhdCBwdXRzIGZpbGVzIGluc2lkZSB0aGUgd2ViIHJvb3QsIGlmIHlvdSBkbyBub3QgdHJ1c3QgeW91ciB1cGxvYWRlcnMsIHlvdSBhcmUgYXQgc29tZSBkZWdyZWUgb2Ygcmlzay4gWW91IGhhdmUgYmVlbiB3YXJuZWQuPC9wPgo8aDM+RmVhdHVyZSBMaXN0czwvaDM+CjxwPllvdSBjYW4sIGFzIG9mIHZlcnNpb24gMC40LCBoYXZlICJmZWF0dXJlIGxpc3RzIiB3aGljaCBhcmUgdGhlIDxpPm48L2k+IG1vc3QtcmVjZW50bHkgYWRkZWQgY2F0YWxvZyBpdGVtcywgb3IgYSBjb2xsZWN0aW9uIG9mIDxpPms8L2k+IHJhbmRvbSBpdGVtcyBmcm9tIHRoZSBjYXRhbG9nLjwvcD4KPGg0PiJBbGwiIEZlYXR1cmUgTGlzdDwvaDQ+CjxwPlRvIGdldCBhIGxpc3Qgb2YgYWxsIGNhdGFsb2cgaXRlbXMgKG9wdGlvbmFsbHkgdW5kZXIgYSBzcGVjaWZpZWQgcGFydCBvZiB5b3VyIGhpZXJhcmNoeSkgZm9yIHByb2Nlc3NpbmcgdmlhIGEgdGVtcGxhdGUsIHlvdSBjYW4gdXNlCnRoZSAiYWxsIiBmZWF0dXJlIGxpc3QuPC9wPgo8cD5UaGUgc3ludGF4IGZvciBhbiAiYWxsIiBsaXN0IGlzIGxpa2U6PC9wPgo8cD4mIzEyMztDYXRhbG9nZXIgYWN0aW9uPVwnYWxsXCcgc3ViX3RlbXBsYXRlPVwnbXlfc3ViX3RlbXBsYXRlXCd9LCB3aGVyZSBzdWJfdGVtcGxhdGUgaXMgdGhlIHRlbXBsYXRlIHRvIHVzZSB0byByZW5kZXIgdGhlIGxpc3QuClRoZXJlIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciwgYWxpYXM9XCdwYWdlX2FsaWFzXCcsIHdoZXJlIHBhZ2VfYWxpYXMgaW5kaWNhdGVzIHRoZSB0b3Agb2YgdGhlIHRyZWUgKGUuZy4sIGEgcGxhY2UgaW4geW91ciBtZW51CmhpZXJhcmNoeSwgdHlwaWNhbGx5IGEgY2F0ZWdvcnkgcGFnZSkgaW4gd2hpY2ggdG8gbG9vayBmb3IgbmV3IGl0ZW1zLiBBIHNwZWNpYWwgdmFsdWUgZm9yICJwYWdlX2FsaWFzIiBpcyAiLyIsIHdoaWNoIG1lYW5zIHRvCnN0YXJ0IGF0IHRoZSByb290LjwvcD4KPHA+VGhpcyBpcyB1c2VmdWwgZm9yIGNhdGFsb2ctd2lkZSBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgY2F0ZWdvcmllcyAoYW5kIGRvIHNvbWV0aGluZyB3aXRoIHRoZW0pLAp5b3UgY291bGQgdXNlIHRoZSB0YWcgJiMxMjM7Q2F0YWxvZ2VyIGFjdGlvbj1cJ2FsbFwnIHN1Yl90ZW1wbGF0ZT1cJ215X3N1Yl90ZW1wbGF0ZVwnIGFsaWFzPVwnL1wnIHJlY3Vyc2U9XCdjYXRlZ29yaWVzX2FsbFwnfS4gWW91ciB0ZW1wbGF0ZSBjb3VsZCB0aGVuIHRocm93CnRob3NlIGNhdGVnb3JpZXMgaW50byBhIHB1bGxkb3duIG1lbnUgdGhhdCByZWRpcmVjdGVkIHlvdSB0byB0aGF0IGNhdGVnb3J5XCdzIHBhZ2UsIGZvciBleGFtcGxlOjwvcD4KPHByZT4KJmx0O3NlbGVjdCBuYW1lPSJmb28iIG9uY2hhbmdlPSJkb2N1bWVudC5sb2NhdGlvbj10aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZTsiPgombHQ7b3B0aW9uIHZhbHVlPSIiPlNlbGVjdCBBIHRhcmdldCZsdDsvb3B0aW9uPgomIzEyMztmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09dGhpc29uZX0KICAgJmx0O29wdGlvbiB2YWx1ZT0iJiMxMjM7JHRoaXNvbmUubGlua30iPiYjMTIzOyR0aGlzb25lLnRpdGxlfSZsdDsvb3B0aW9uPgomIzEyMzsvZm9yZWFjaH0KJmx0Oy9zZWxlY3Q+CjwvcHJlPgo8cD5JZiB5b3Ugd2FudGVkIHRoYXQgdG8gb25seSBzaG93IGNhdGVnb3JpZXMgdGhhdCB3ZXJlIGluIHRoZSB2ZXJ5IHRvcCBsZXZlbCBvZiB5b3VyIGhpZXJhcmNoeSwgeW91XCdkIHJlcGxhY2UgdGhlIHJlY3Vyc2U9XCdjYXRlZ29yaWVzX2FsbFwnIHdpdGgKcmVjdXJzZT1cJ2NhdGVnb3JpZXNfb25lXCcuIE9yIGlmIHlvdSB3YW50ZWQgaXQgdG8gYmUgYWxsIGNhdGFsb2cgSXRlbXMgaW5zdGVhZCBvZiBjYXRlZ29yaWVzLCB5b3UgY291bGQgdXNlIGEgdGFnIGxpa2U6CiYjMTIzO0NhdGFsb2dlciBhY3Rpb249XCdhbGxcJyBzdWJfdGVtcGxhdGU9XCdteV9zdWJfdGVtcGxhdGVcJyBhbGlhcz1cJy9cJyByZWN1cnNlPVwnaXRlbXNfYWxsXCd9CjxwPlNpbWlsYXJseSwgeW91IGNvdWxkIGhhdmUgaXQgbGlzdCBvbmx5IGNhdGVnb3JpZXMgdW5kZXIgdGhlIGN1cnJlbnQgcGFnZSAoYnkgb21pdHRpbmcgdGhlICJhbGlhcz1cJy9cJyIpLiBUaGUgY29tYmluYXRpb25zIGFyZSBiYXNpY2FsbHkgbGltaXRsZXNzITwvcD4KPHA+QWxsIHN1cHBvcnRlZCB2YWx1ZXMgb2YgcmVjdXJzZSBpbmNsdWRlOjx1bD4KPGxpPml0ZW1zX29uZSAtIENhdGFsb2cgaXRlbXMsIG5vIG1vcmUgdGhhbiBvbmUgbGV2ZWwgYmVsb3cgdGhlIGN1cnJlbnQgcGFnZSAob3IgYWxpYXMgcG9pbnQpPC9saT4KPGxpPml0ZW1zX2FsbCAtIENhdGFsb2cgaXRlbXMsIGF0IGFueSBsZXZlbCBiZWxvdyB0aGUgY3VycmVudCBwYWdlIChvciBhbGlhcyBwb2ludCk8L2xpPgo8bGk+Y2F0ZWdvcmllc19vbmUgLSBDYXRlZ29yaWVzLCBubyBtb3JlIHRoYW4gb25lIGxldmVsIGJlbG93IHRoZSBjdXJyZW50IHBhZ2UgKG9yIGFsaWFzIHBvaW50KTwvbGk+CjxsaT5jYXRlZ29yaWVzX2FsbCAtIENhdGVnb3JpZXMsIGF0IGFueSBsZXZlbCBiZWxvdyB0aGUgY3VycmVudCBwYWdlIChvciBhbGlhcyBwb2ludCk8L2xpPgo8bGk+bWl4ZWRfb25lIC0gQ2F0YWxvZyBpdGVtcyBhbmQgQ2F0ZWdvcmllcywgbm8gbW9yZSB0aGFuIG9uZSBsZXZlbCBiZWxvdyB0aGUgY3VycmVudCBwYWdlIChvciBhbGlhcyBwb2ludCk8L2xpPgo8bGk+bWl4ZWRfYWxsIC0gQ2F0YWxvZyBpdGVtcyBhbmQgQ2F0ZWdvcmllcywgYXQgYW55IGxldmVsIGJlbG93IHRoZSBjdXJyZW50IHBhZ2UgKG9yIGFsaWFzIHBvaW50KTwvbGk+CjwvdWw+CjwvcD4KPHA+SXRlbXMgaW4gdGhlc2UgbGlzdHMgY29tZSBiYWNrIGluIGhpZXJhcmNoeSBvcmRlci4gWW91IGNhbiBjaGFuZ2UgdGhpcyB1c2luZyB0aGUgXCdnbG9iYWxfc29ydFwnIHBhcmFtZXRlci4gWW91ciBjaG9pY2VzIGFyZTo8L3A+Cjx1bD4KPGxpPmFscGhhIC0gYWxwaGFiZXRpY2FsbHkgYnkgdGl0bGU8L2xpPgo8bGk+ZGF0ZSAtIGluIG9yZGVyIG9mIGl0ZW0gY3JlYXRpb24gZGF0ZTwvbGk+CjxsaT5tZGF0ZSAtIGluIG9yZGVyIG9mIGl0ZW0gbW9kaWZpY2F0aW9uIGRhdGU8L2xpPgo8L3VsPgo8cD5Zb3UgbWF5IG9yZGVyIHRoZXNlIHNvcnRzIHVzaW5nIHRoZSBcJ2dsb2JhbF9zb3J0X2RpclwnIHBhcmFtZXRlciwgd2hpY2ggd2lsbCBhbGxvdyBcJ2FzY1wnIG9yIFwnZGVzY1wnLjwvcD4KPHA+U28sIGZvciBhIHRob3JvdWdoIGV4YW1wbGU6PC9wPgo8cD4mIzEyMztDYXRhbG9nZXIgYWN0aW9uPVwnYWxsXCcgc3ViX3RlbXBsYXRlPVwnbXlfc3ViX3RlbXBsYXRlXCcgYWxpYXM9XCcvXCcgcmVjdXJzZT1cJ2NhdGVnb3JpZXNfYWxsXCcgZ2xvYmFsX3NvcnQ9XCdhbHBoYVwnIGdsb2JhbF9zb3J0X2Rpcj1cJ2FzY1wnfTwvcD4KPGg0PlJlY2VudGx5IEFkZGVkIEZlYXR1cmUgTGlzdDwvaDQ+CjxwPlRvIHVzZSBhICJtb3N0LXJlY2VudGx5IGFkZGVkIiBsaXN0IHdpbGwgYWxsb3cgeW91IHRvIGRpc3BsYXkgdGhlIG1vc3QgcmVjZW50bHktYWRkZWQgY2F0YWxvZyBpdGVtcyB1bmRlciBhIHNwZWNpZmllZCBwYXJ0IG9mIHlvdXIgaGllcmFyY2h5LjwvcD4KPHA+VGhlIHN5bnRheCBmb3IgYSAibW9zdCByZWNlbnRseSBhZGRlZCIgbGlzdCBpcyBsaWtlOjwvcD4KPHA+JiMxMjM7Q2F0YWxvZ2VyIGFjdGlvbj1cJ3JlY2VudFwnIHN1Yl90ZW1wbGF0ZT1cJ215X3N1Yl90ZW1wbGF0ZVwnfSwgd2hlcmUgc3ViX3RlbXBsYXRlIGlzIHRoZSB0ZW1wbGF0ZSB0byB1c2UgdG8gcmVuZGVyIHRoZSBsaXN0LgpUaGVyZSBhcmUgZm91ciBvcHRpb25hbCBwYXJhbWV0ZXJzLCBjb3VudD1cJzNcJyBhbGlhcz1cJ3BhZ2VfYWxpYXNcJywgZ2xvYmFsX3NvcnQ9XCdkYXRlXCcsIGdsb2JhbF9zb3J0X2Rpcj1cJ2Rlc2NcJyB3aGVyZSBjb3VudAppcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGluY2x1ZGUsIHBhZ2VfYWxpYXMgaW5kaWNhdGVzIHRoZSB0b3Agb2YgdGhlIHRyZWUgKGUuZy4sIGEgcGxhY2UgaW4geW91ciBtZW51IGhpZXJhcmNoeSwKdHlwaWNhbGx5IGEgY2F0ZWdvcnkgcGFnZSkgaW4gd2hpY2ggdG8gbG9vayBmb3IgbmV3IGl0ZW1zLiBBIHNwZWNpYWwgdmFsdWUgZm9yICJwYWdlX2FsaWFzIiBpcyAiLyIsIHdoaWNoIG1lYW5zCnRvIHVzZSA8aT5hbGw8L2k+IHBhZ2VzIGluIHRoZSBzaXRlLiBnbG9iYWxfc29ydCBtYXkgYmUgXCdkYXRlXCcgKGZvciBpdGVtIGNyZWF0aW9uIGRhdGUpIG9yIFwnbWRhdGVcJyBmb3IgbW9kaWZpY2F0aW9uIGRhdGUsIGFuZApnbG9iYWxfc29ydF9kaXIgbWF5IGJlIFwnYXNjXCcgb3IgXCdkZXNjXCcuPC9wPgo8aDQ+UmFuZG9tIEl0ZW1zIEZlYXR1cmUgTGlzdDwvaDQ+CjxwPlRoZSBzeW50YXggZm9yIGEgInJhbmRvbSIgbGlzdCBpcyBsaWtlOjwvcD4KPHA+JiMxMjM7Y0NhdGFsb2dlciBhY3Rpb249XCdyYW5kb21cJyBzdWJfdGVtcGxhdGU9XCdteV9zdWJfdGVtcGxhdGVcJ30sIHdoZXJlIHN1Yl90ZW1wbGF0ZSBpcyB0aGUgdGVtcGxhdGUgdG8gdXNlIHRvIHJlbmRlciB0aGUgbGlzdC4gVGhlcmUgYXJlIHR3byBvcHRpb25hbCBwYXJhbWV0ZXJzLCBjb3VudD1cJzNcJyBhbGlhcz1cJ3BhZ2VfYWxpYXNcJywgd2hlcmUgY291bnQgaXMgdGhlIG51bWJlciBvZiBpdGVtcyB0byBpbmNsdWRlLCBhbmQgcGFnZV9hbGlhcyBpbmRpY2F0ZXMgdGhlIHRvcCBvZiB0aGUgdHJlZSAoZS5nLiwgYSBwbGFjZSBpbiB5b3VyIG1lbnUgaGllcmFyY2h5LCB0eXBpY2FsbHkgYSBjYXRlZ29yeSBwYWdlKSBpbiB3aGljaCB0byBsb29rIGZvciBuZXcgaXRlbXMuIEEgc3BlY2lhbCB2YWx1ZSBmb3IgInBhZ2VfYWxpYXMiIGlzICIvIiwgd2hpY2ggbWVhbnMgdG8gdXNlIDxpPmFsbDwvaT4gcGFnZXMgaW4gdGhlIHNpdGUuPC9wPgo8aDQ+VmFyaWFibGU8L2g0Pgo8cD5Zb3UgY2FuIGdyYWIgdmFyaWFibGVzIChhdHRyaWJ1dGVzKSBvdXRzaWRlIG9mIHlvdXIgQ2F0YWxvZ2VyIHRlbXBsYXRlcywgc2F5IGluIGEgZ2xvYmFsIGNvbnRlbnQgYmxvY2ssIHVzaW5nIHRoZSB2YXJpYWJsZSBtZXRob2QuIFRoZSBzeW50YXggbG9va3MgbGlrZTo8L3A+CjxwPiYjMTIzO0NhdGFsb2dlciBhY3Rpb249XCd2YXJpYWJsZVwnIG5hbWU9XCdpdGVtbm90ZXNcJyBkZWZhdWx0PVwnbm8gbm90ZXNcJ30sIHdoZXJlIG5hbWUgaXMgdGhlIGF0dHJpYnV0ZSB0byBkaXNwbGF5ICh1c2luZyB0aGUgc2FtZSBhbGwgbG93ZXItY2FzZSwgcHVuY3R1YXRpb24tZnJlZSByZXByZXNlbnRhdGlvbiBsaWtlIHRoZSBzbWFydHkgdGVtcGxhdGUgdmFyaWFibGVzKSwgYW5kIGRlZmF1bHQgaXMgdGhlIHZhbHVlIHRvIHVzZSBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBkZWZpbmVkLjwvcD4KPGg0Pkl0ZW0gQ29tcGFyaXNvbnM8L2g0Pgo8cD5BcyBvZiB2ZXJzaW9uIDAuNy43LCB0aGVyZSBpcyBhIHByb2R1Y3QgY29tcGFyaXNvbiBhY3Rpb246PC9wPgo8cD4mIzEyMztjQ2F0YWxvZ2VyIGFjdGlvbj1cJ2NvbXBhcmVcJyBzdWJfdGVtcGxhdGU9XCdteV9zdWJfdGVtcGxhdGVcJyBpdGVtcz1cJ2l0ZW0xLGl0ZW0yLGl0ZW0zXCd9LCB3aGVyZSBzdWJfdGVtcGxhdGUgaXMgdGhlIHRlbXBsYXRlIHRvIHVzZSB0byByZW5kZXIgdGhlIGxpc3QsIGFuZCBpdGVtcyBpcyBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIGl0ZW0gcGFnZSBhbGlhc2VzIHRvIGNvbXBhcmUuIEJvbGRlciB1c2VycyBtYXkgYWxzbyBjaG9vc2UgdG8gcGFzcyBpbiB0aGUgaXRlbXMgdG8gY29tcGFyZSBhcyByZXF1ZXN0IHZhcmlhYmxlcywgdGhlcmVieSBlbmFibGluZyBkeW5hbWljIGNvbXBhcmlzb25zIGJhc2VkIG9uIHVzZXIgc2VsZWN0aW9ucy4gRG8gdGhpcyBieSBzZXR0aW5nIHRoZSAiaXRlbXMiIHZhcmlhYmxlIG9uIHRoZSByZXF1ZXN0IHBhc3NlZCB0byB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBDYXRhbG9nZXIgdGFnIHdpdGggYSBjb21wYXJlIGFjdGlvbi48L3A+CjxwPlRoZSBkZWZhdWx0IGl0ZW0gY29tcGFyaXNvbiB0ZW1wbGF0ZSBjb3VsZCB1c2Ugc29tZSBzdHlsaW5nLCBlLmcuLDo8L3A+CjxwcmU+Ci5pdGVtX2NvbXBhcmlzb24gdGgge2ZvbnQtd2VpZ2h0OiBib2xkOyBwYWRkaW5nOiA1cHg7IHRleHQtYWxpZ246Y2VudGVyO30KLml0ZW1fY29tcGFyaXNvbiB0ZCB7Ym9yZGVyOiAxcHggc29saWQgZ3JheTsgcGFkZGluZzogM3B4IDVweDt0ZXh0LWFsaWduOnJpZ2h0O30KPC9wcmU+CjxoMz5DdXN0b21pemF0aW9uIGFuZCBBZHZhbmNlZCBUb3BpY3M8L2gzPgo8aDQ+Q2F0YWxvZyBJdGVtIEF0dHJpYnV0ZXM8L2g0Pgo8cD5UaGUgZGVmYXVsdCBpdGVtIGF0dHJpYnV0ZXMgYXJlIHR5cGljYWwgZm9yIGEgY2F0YWxvZyBvZiBwcm9kdWN0cyBvciBhcnR3b3JrcywgYnV0IGJ5IGdvaW5nIGludG8gRXh0ZW5zaW9ucyAmZ3Q7IENhdGFsb2dlciAmZ3Q7IE1hbmFnZSBVc2VyLURlZmluZWQgQXR0cmlidXRlcywgeW91IGNhbiBjaGFuZ2UgdGhlIGF0dHJpYnV0ZXMuIEl0XCdzIGJlc3QgdG8gZGVmaW5lIHRoZSBhdHRyaWJ1dGVzIGJlZm9yZSB5b3Ugc3RhcnQgZW50ZXJpbmcgQ2F0YWxvZyBJdGVtcy48L3A+CjxwPk5vdGUgdGhhdCB0aGUgYXR0cmlidXRlcyB5b3UgZGVmaW5lIG1heSBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSB0ZW1wbGF0ZSB0aGF0IHlvdVwncmUgdXNpbmcgdG8gZGlzcGxheSBDYXRhbG9nIEl0ZW1zIC0tIHNlZSBDdXN0b20gVGVtcGxhdGVzIGJlbG93LjwvcD4KPGg0PkNhdGFsb2cgQ2F0ZWdvcnkgQXR0cmlidXRlczwvaDQ+CjxwPlNpbWlsYXJseSwgeW91IGNhbiBzZXQgYXR0cmlidXRlcyBmb3IgQ2F0ZWdvcmllcy4gQWdhaW4sIHRoZSBhdHRyaWJ1dGVzIHlvdSBkZWZpbmUgbWF5IG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIHRlbXBsYXRlIHRoYXQgeW91XCdyZSB1c2luZyB0byBkaXNwbGF5IENhdGFsb2cgQ2F0ZWdvcmllcyAtLSBzZWUgQ3VzdG9tIFRlbXBsYXRlcyBiZWxvdy48L3A+CjxoND5QcmludGFibGUgQ2F0YWxvZyBBdHRyaWJ1dGVzPC9oND4KPHA+TGlrZXdpc2UsIHlvdSBjYW4gc2V0IGF0dHJpYnV0ZXMgZm9yIFByaW50YWJsZSBDYXRhbG9ncy4gQWdhaW4sIHRoZSBhdHRyaWJ1dGVzIHlvdSBkZWZpbmUgbWF5IG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIHRlbXBsYXRlIHRoYXQgeW91XCdyZSB1c2luZyB0byBkaXNwbGF5IHlvdXIgUHJpbnRhYmxlIENhdGFsb2cgLS0gc2VlIEN1c3RvbSBUZW1wbGF0ZXMgYmVsb3cuPC9wPgo8aDQ+Q3VzdG9tIFRlbXBsYXRlczwvaDQ+CjxwPklmIHlvdVwncmUgd2lsbGluZyB0byBtZXNzIGFyb3VuZCB3aXRoIFNtYXJ0eSBUZW1wbGF0ZXMsIHlvdSBjYW4gY2hhbmdlIHRoZSBsYXlvdXQgb2YgYW55IG9mIHRoZSBwYWdlcyBnZW5lcmF0ZWQgYnkgQ2F0YWxvZ2VyLiBUaGlzIHNob3VsZCBtYWtlIGNlcnRhaW4gZGV2ZWxvcGVycyB2ZXJ5IGhhcHB5LCBldmVuIGlmIHRoZSBpbmVmZmljaWVuY3kgb2YgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgd2lsbCBub3QuIFRoZXJlIGFyZSBmb3VyIGtpbmRzIG9mIHRlbXBsYXRlczogb25lIGtpbmQgZm9yIENhdGFsb2cgSXRlbXMsIG9uZSBraW5kIGZvciBDYXRhbG9nIENhdGVnb3JpZXMsIGFuZCBvbmUga2luZCBmb3IgUHJpbnRhYmxlIENhdGFsb2dzLCBhbmQgb25lIGtpbmQgZm9yICJGZWF0dXJlIiBsaXN0cywgc3VjaCBhcyByZWNlbnRseSBhZGRlZCBpdGVtcyBvciByYW5kb20gc2VsZWN0aW9ucy48L3A+CjxwPldoZW4gZWRpdGluZyBhIFRlbXBsYXRlLCB0aGUgYWRtaW4gc2NyZWVuIHdpbGwgZGlzcGxheSBhIGxpc3Qgb2YgU21hcnR5IHRhZ3MgYXZhaWxhYmxlIHRvIHlvdSBmb3IgdGhhdCBraW5kIG9mIHRlbXBsYXRlLiBUaGlzCndpbGwgb25seSBoYXBwZW4gb25jZSB0aGUgbW9kdWxlIGtub3dzIHdoYXQga2luZCBvZiB0ZW1wbGF0ZSB5b3VcJ3JlIGVkaXRpbmcsIHNvIHdoZW4geW91IGZpcnN0IGNyZWF0ZSB0aGUgdGVtcGxhdGUsIGl0IGRpc3BsYXlzIGFsbAp0aGUgU21hcnR5IHRhZ3MgaXQga25vd3MgYWJvdXQsIG9ubHkgc29tZSBvZiB3aGljaCBiZWluZyBhcHBsaWNhYmxlLjwvcD4KPGg0PkRpc3BsYXlpbmcgQXR0cmlidXRlcyBvbiBJdGVtIFBhZ2VzPC9oND4KPHA+QXR0cmlidXRlcyBhcmUgYXZhaWxhYmxlIHRvIFNtYXJ0eSBhcyB0b3AtbGV2ZWwgdmFyaWFibGVzLiBUaGV5IGFyZSBzdG9yZWQgYXMgc2FuaXRpemVkIHZlcnNpb25zIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZXMsIHdoaWNoIG1lYW5zCml0IGlzIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlIGFuZCBhbGwgcHVuY3R1YXRpb24gYW5kIG5vbi1VUy1BU0NJSSBjaGFyYWN0ZXJzIGdldCByZW1vdmVkLiBUaGlzIGlzIGJlY2F1c2UgU21hcnR5IGlzIGZpbmlja3ksIGFuZCB3aWxsIG5vdCBoYW5kbGUgdGhlc2UgY2hhcmFjdGVycy48L3A+CjxwPlNvLCBmb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYW4gYXR0cmlidXRlIGNhbGxlZCAiR2zDvGNrbGljaGtlaXQiLCB0aGVyZSB3aWxsIGJlIGEgU21hcnR5IHZhcmlhYmxlIHskZ2xja2xpY2hrZWl0fS4gTm90ZSB0aGF0IHRoZSAiw7wiIGlzIG9taXR0ZWQuPC9wPgo8cD5Gb3J0dW5hdGVseSwgdGhpcyBpcyBzaW1wbGlmaWVkIGJ5IHRoZSAkYXR0cmxpc3QgbGlzdCBhdmFpbGFibGUuIFRoaXMgaXMgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgYnkgZm9ybWFsIG5hbWUgKCJHbMO8Y2tsaWNoa2VpdCIpIGFuZCB0aGVpciBrZXkgKCJnbGNrbGljaGtlaXQiKS4gRm9yIGV4YW1wbGU6CjxwcmU+Cgl7c2VjdGlvbiBuYW1lPWF0IGxvb3A9JGF0dHJsaXN0fQoJJmx0O2RpdiBjbGFzcz0iaXRlbV9hdHRyaWJ1dGVfbmFtZSI+eyRhdHRybGlzdFthdF0ubmFtZX06Jmx0Oy9kaXY+Jmx0O2RpdiBjbGFzcz0iaXRlbV9hdHRyaWJ1dGVfdmFsIj57ZXZhbCB2YXI9JGF0dHJsaXN0W2F0XS5rZXl9Jmx0Oy9kaXY+Cgl7L3NlY3Rpb259CjwvcHJlPgo8cD5BcyBvZiB2ZXJzaW9uIDAuOCwgeW91IGNhbiBhc3NpZ24gYW4gYWxpYXMgdG8gZWFjaCBhdHRyaWJ1dGUuIFRoZXNlIGFsaWFzZXMgbmVlZCB0byBiZSBVUy1BU0NJSSBhbmQgY29udGFpbiBubyBwdW5jdHVhdGlvbi4gVGhleSBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBzYW5pdGl6ZWQgYXR0cmlidXRlIG5hbWUgKGUuZy4sIHlvdSBjb3VsZCB1c2UgdGhlIGFsaWFzICJnbHVlY2tsaWNoa2VpdCIpLjwvcD4KPGg0PkRpc3BsYXlpbmcgQXR0cmlidXRlcyBvbiBQYWdlcyB3aXRoIExpc3RzIG9mIEl0ZW1zPC9oND4KPHA+QXR0cmlidXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhlICRpdGVtbGlzdHNbI10gaW4gdHdvIGRpZmZlcmVudCB3YXlzOiB0b3AtbGV2ZWwgYXR0cmlidXRlcyBvZiB0aGUgaXRlbSwgYW5kIGFzIHBhcnQgb2YgdGhlIGl0ZW1cJ3MgImF0dHIiIGFycmF5LiBUaGV5IGFyZSBzdG9yZWQgYXMgc2FuaXRpemVkIHZlcnNpb25zIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZXMsIHdoaWNoIG1lYW5zCml0IGlzIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlIGFuZCBhbGwgcHVuY3R1YXRpb24gYW5kIG5vbi1VUy1BU0NJSSBjaGFyYWN0ZXJzIGdldCByZW1vdmVkLiBUaGlzIGlzIGJlY2F1c2UgU21hcnR5IGlzIGZpbmlja3ksIGFuZCB3aWxsIG5vdCBoYW5kbGUgdGhlc2UgY2hhcmFjdGVycy48L3A+CjxwPlNvLCBmb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYW4gYXR0cmlidXRlIGNhbGxlZCAiR2zDvGNrbGljaGtlaXQiLCB0aGUgaXRlbSB3aWxsIGhhdmUgJGl0ZW0uZ2xja2xpY2hrZWl0IGFuZCAkaXRlbS5hdHRyc1tcJ2dsY2tsaWNoa2VpdFwnXS4gTm90ZSB0aGF0IHRoZSAiw7wiIGlzIG9taXR0ZWQuIFlvdSBjYW4gcmVmZXIgdG8gdGhpcyBhdHRyaWJ1dGUgaW4geW91ciB0ZW1wbGF0ZQp3aXRoIFNtYXJ0eSBjb2RlIGxpa2U6IHskaXRlbWxpc3RbaW5kZXhdLmdsY2tsaWNra2VpdH0gb3IgeyRpdGVtbGlzdFtpbmRleF0uYXR0cnMuZ2xja2xpY2hrZWl0fS48L3A+CjxwPkZvcnR1bmF0ZWx5LCB0aGlzIGlzIHNpbXBsaWZpZWQgYnkgdGhlICRhdHRybGlzdCBsaXN0IGF2YWlsYWJsZS4gVGhpcyBpcyBhIGxpc3Qgb2YgYXR0cmlidXRlcyBieSBmb3JtYWwgbmFtZSAoIkdsw7xja2xpY2hrZWl0IikgYW5kIHRoZWlyIGtleSAoImdsY2tsaWNoa2VpdCIpLiBGb3IgZXhhbXBsZToKPHByZT4KICAgIHtmb3JlYWNoIGZyb209JGF0dHJsaXN0IGl0ZW09YXR0ciBrZXk9a30KICAgIHskYXR0cn06IHskaXRlbXNbbnVtbG9vcF1bJGtdfQogICAgey9mb3JlYWNofQo8L3ByZT4KPHA+QXMgb2YgdmVyc2lvbiAwLjgsIHlvdSBjYW4gYXNzaWduIGFuIGFsaWFzIHRvIGVhY2ggYXR0cmlidXRlLiBUaGVzZSBhbGlhc2VzIG5lZWQgdG8gYmUgVVMtQVNDSUkgYW5kIGNvbnRhaW4gbm8gcHVuY3R1YXRpb24uIFRoZXkgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgc2FuaXRpemVkIGF0dHJpYnV0ZSBuYW1lIChlLmcuLCB5b3UgY291bGQgdXNlIHRoZSBhbGlhcyAiZ2x1ZWNrbGljaGtlaXQiKS48L3A+CjxoND5TbWFydHkgdGFncyBpbiBBdHRyaWJ1dGVzPC9oND4KPHA+U29tZXRpbWVzLCB5b3VcJ2xsIHdhbnQgdGhlIGRlc2NyaXB0aW9ucyBvZiB5b3VyIGl0ZW1zIHRvIGluY2x1ZGUgc21hcnR5IHRhZ3MgKGUuZy4sIGNtc19zZWxmbGluaykuIFRvIG1ha2UgdGhhdCB3b3JrLCB5b3VcJ2xsIG5lZWQgdG8KdXBkYXRlIHlvdXIgdGVtcGxhdGUuIEZvciB0aGUgYXR0cmlidXRlcyB3aGVyZSB5b3Ugd2FudCBzbWFydHkgdGFncyB0byBiZSBhY3RpdmUsIHlvdVwnbGwgbmVlZCB0byBuZXN0IHRoZSBzbWFydHkgZXZhbHVhdGlvbnMgaW4geW91ciB0ZW1wbGF0ZS4gRm9yIGV4YW1wbGU6PC9wPgo8cHJlPgomIzEyMztldmFsIHZhcj0kYXR0cmxpc3RbYXRdLmtleX0KPC9wcmU+CjxwPmJlY29tZXM6PC9wPgo8cHJlPgomIzEyMztldmFsIHZhcj0kZW50cnktPmlucHV0IGFzc2lnbj10aGlzQXR0cn0mIzEyMztldmFsIHZhcj0kdGhpc0F0dHJ9CjwvcHJlPgo8cD5VZ2x5PyBZdXAuIEJ1dCBpdCB3b3Jrcy48L3A+CjxoMz5DYXRhbG9nZXIgSW1hZ2UgU3lzdGVtPC9oMz4KPHA+Q2F0YWxvZ2VyIGhhcyBhbiBpbWFnZSBzeXN0ZW0gdGhhdCB3aWxsIGFsbG93IHlvdSB0byBkeW5hbWljYWxseSBjaGFuZ2UgdGhlIGltYWdlIGRpc3BsYXkgc2l6ZS4gSWYgeW91IGRvIG5vdCBsaWtlIGl0LCB5b3UgY2FuIGFsdGVyCnRoZSB0ZW1wbGF0ZXMgYW5kIHVzZSBhbnkgaW1hZ2Ugc3lzdGVtIHlvdSB3YW50LjwvcD4KPHA+V2hlbiB5b3UgdXBsb2FkIGFuIGltYWdlIHVzaW5nIENhdGFsb2dlciwgaXQgZ2V0cyBwdXQgaW4gYSBzcGVjaWFsIHNldCBvZiBkaXJlY3RvcmllcyB0byBtYWtlIHRoZSBpbWFnaW5nIGVhc2llci4gWW91IHdpbGwgc2VlIG1vcmUKYWJvdXQgdGhpcyBsYXRlci48L3A+CjxwPkl0IHdvcmtzIGJ5IGNhbGxpbmcgYSBQSFAgcHJvZ3JhbSBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHRoZSBpbWFnZS4gVGhlIHByb2dyYW0gdXNlcyB0aGUgZmlsZW5hbWUgdG8gc2VlIGlmIHRoZQppbWFnZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY29ycmVjdCBzaXplLiBJZiBzbywgaXQgcmVkaXJlY3RzIHRvIHRoYXQgaW1hZ2UuIE90aGVyd2lzZSwgaXQgdXNlcyB5b3VyIEdETElCIG9yIEltYWdlTWFnaWNrIHRvIGNyZWF0ZQp0aGUgaW1hZ2UgaW4gdGhlIGNvcnJlY3Qgc2l6ZSwgYW5kIHRoZW4gcmVkaXJlY3RzIHRvIGl0Lgo8L3A+CjxoND5DYXRhbG9nZXIgSW1hZ2UgRmlsZXNwZWMgRXhwbGFuYXRpb248L2g0Pgo8cD5BIGNhdGFsb2dlciBpbWFnZSBoYXMgYSBmaWxlc3BlYyBsaWtlOgo8YnIgLz4Kcm9vdF9wYXRoL21vZHVsZXMvQ2F0YWxvZ2VyL0NhdGFsb2dlci5JbWFnZS5waHA/aT1pdGVtbmFtZV9mXzFfNDAwXzEuanBnJmFtcDthYz04Mjg4OAo8L3A+CjxwPlRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyAiaXRlbW5hbWVfZl8xXzQwMF8xLmpwZyIgLSB0aGUgc3R1ZmYgYmVmb3JlIGlzIGp1c3QgYSBjYWxsIHRvIHRoZSBwcm9ncmFtLCBhbmQgdGhlICZhbXA7YWM9ODI4ODggaXMgYSByYW5kb20gdGhpbmcgdGhhdAppcyBkZXNpZ25lZCB0byBwcmV2ZW50IGJyb3dzZXIgY2FjaGluZy4gU28gZXhhbWluaW5nIHRoZSBuYW1lIHBpZWNlIGJ5IHBpZWNlIChzZXBhcmF0aW5nIGF0IHRoZSB1bmRlcnNjb3JlcyksIHdlIGhhdmU6PC9wPgo8dWw+CjxsaT5pdGVtIG5hbWUgLSB0aGlzIGlzIHRoZSBhbGlhcyBvZiB0aGUgaXRlbS9jYXRlZ29yeSBwYWdlIGNvbnRhaW5pbmcgdGhlIGltYWdlLjwvbGk+CjxsaT5pbWFnZSB0eXBlIC0gdGhpcyBpcyBhIGRlc2lnbmF0aW9uIGZvciBpbWFnZSB0eXBlOjx1bD4KPGxpPmYgLSBpdGVtIGZ1bGwtc2l6ZSBpbWFnZTwvbGk+CjxsaT50IC0gaXRlbSB0aHVtYm5haWw8L2xpPgo8bGk+Y2YgLSBjYXRlZ29yeSBmdWxsLXNpemVkIGltYWdlPC9saT4KPGxpPmN0IC0gY2F0ZWdvcnkgdGh1bWJuYWlsPC9saT4KPGxpPmN0ZiAtIHByaW50YWJsZSBjYXRhbG9nIGZ1bGwtc2l6ZWQgaW1hZ2U8L2xpPgo8L3VsPgo8L2xpPgo8bGk+aW1hZ2UgbnVtYmVyIC0gc28gYSBnaXZlbiBpdGVtL2NhdGFsb2cvZXRjIGNhbiBoYXZlIG11bHRpcGxlIGltYWdlczwvbGk+CjxsaT5sb25nIGRpbWVuc2lvbiAtIGxvbmcgZGltZW5zaW9uIG9mIHRoZSBpbWFnZSwgaW4gcGl4ZWxzPC9saT4KPGxpPm1pc3NpbmcgZmxhZyAtIDEgaWYgeW91IHdhbnQgdG8gc2hvdyBhbiAiaW1hZ2UgbWlzc2luZyIgaW1hZ2UgaWYgdGhpcyBpbWFnZSBkb2VzblwndCBleGlzdCwgMCBvdGhlcndpc2U8L2xpPgo8L3VsPgo8cD4KVGhpcyB3aWxsIHRha2UgYW4gaW1hZ2UgaW4gcm9vdF9wYXRoL3VwbG9hZHMvaW1hZ2VzL2NhdGFsb2dfc3JjL2l0ZW1uYW1lX3NyY18xCjxoND5BY2Nlc3NpbmcgeW91ciBPcmlnaW5hbCBJbWFnZTwvaDQ+CjxwPldoZW4gQ2F0YWxvZ2VyIHVwbG9hZHMgaW1hZ2VzLCBpdCBwdXRzIHRoZW0gaW50byBhIGRpcmVjdG9yeSBjYWxsZWQgImNhdGFsb2dlcl9zcmMiIGluIHlvdXIgdXBsb2Fkcy9pbWFnZXMvIGRpcmVjdG9yeS4gVGhleSBpbWFnZXMgYXJlIG5hbWVkIGFjY29yZGluZyB0byB0aGUgYWxpYXMgb2YgdGhlIHBhZ2U6CmFsaWFzX3NyY18jLmpwZyB3aGVyZSAjIGlzIHRoZSBpbWFnZSBudW1iZXIgZm9yIHRoYXQgcGFnZS48L3A+CjxwPlNvLCB0byBhY2Nlc3MgdGhlIG9yaWdpbmFsbHkgdXBsb2FkZWQgaW1hZ2VzIG9uIGEgQ2F0ZWdvcnkgcGFnZSwgeW91XCdkIGdlbmVyYXRlIHRoZSBVUkwgbWFudWFsbHkuPC9wPgo8cD5TbyBvbiBhIGNhdGVnb3J5IHBhZ2UsIGZvciBleGFtcGxlLCBpbnN0ZWFkIG9mIHVzaW5nIHskaXRlbXNbbnVtbG9vcF0uaW1hZ2V9IHlvdVwnZCB1c2UgIi91cGxvYWRzL2ltYWdlcy9jYXRhbG9nZXJfc3JjL3skaXRlbXNbbnVtbG9vcF0uYWxpYXN9X3NyY18xLmpwZyIuPC9wPgo8aDM+Q3JlZGl0czwvaDM+CjxwPlRoYW5rcyB0byA8YSBocmVmPSJodHRwOi8vd3d3LmlkLWEuY28udWsiPlBhdWwgQ29vcGVyPC9hPiBmb3Igc3BvbnNvcmluZyB0aGUgZGV2ZWxvcG1lbnQgb2YgdGV4dGFyZWEgYXR0cmlidXRlcy48L3A+CjxwPlRoYW5rcyB0byBudW1lcm91cyBwYXRpZW50IHVzZXJzIGFuZCBidWcgdGVzdGVycyAobWFueSBvZiB3aG9tIGhhZCBubyBpZGVhIHdoYXQgdGhleSB3ZXJlIGdldHRpbmcgaW50by4pPC9wPiAKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0LCBwbGVhc2UgdmlzaXQgdGhlIENNUyBNYWRlIFNpbXBsZSAgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+RGV2ZWxvcGVyIEZvcmdlPC9hPi48L2xpPgo8bGk+VG8gb2J0YWluIGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHNlbmQgYW4gZW1haWwgdG8gdGhlIGF1dGhvciBhdCA8YSBocmVmPSJtYWlsdG86c2pnQGNtc21vZHVsZXMuY29tIj4mbHQ7c2pnQGNtc21vZHVsZXMuY29tJmd0OzwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+VGhlIGF1dGhvciBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkgYW5kIGdyb3ZlbGxpbmcgZm9yIGZyZWUgc3VwcG9ydC48L2xpPgo8L3VsPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEyLCBGZXJuYW5kbyBNb3JnYWRvIChKb01vcmcpIDxhIGhyZWY9Im1haWx0bzpqb21vcmcubW9yZ0BnbWFpbC5jb20iPiZsdDtqb21vcmcubW9yZ0BnbWFpbC5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFNhbXVlbCBHb2xkc3RlaW4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4nOwoKJGxhbmdbJ3Bvc3RpbnN0YWxsJ109J01ha2Ugc3VyZSB0byBzZXQgdGhlICJNb2RpZnkgQ2F0YWxvZyBTZXR0aW5ncyIgcGVybWlzc2lvbiBvbiB1c2VycyB3aG8gd2lsbCBiZSBhZG1pbmlzdGVyaW5nIHRoZSBjYXRhbG9nLic7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.catAdminOps.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmNsYXNzIGNhdEFkbWluT3BzDQp7DQogICNBZG1pbiBDb25zb2xlIEZpZWxkcw0KICAjc3RhdGljIGZ1bmN0aW9uIA0KfQ0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.CatalogCategory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENhdGFsb2dlciAtIGJ1aWxkIGEgY2F0YWxvZyBvciBwb3J0Zm9saW8gb2Ygc3R1ZmYKIyBWZXJzaW9uOiAwLjEyCiMKIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEZlcm5hbmRvIE1vcmdhZG8gKEpvTW9yZykgam9tb3JnLm1vcmdAZ21haWwuY29tCiMgQ29weXJpZ2h0IChjKSAyMDA2LCBTYW11ZWwgR29sZHN0ZWluIDxzamdAY21zbW9kdWxlcy5jb20+CiMgRm9yIEluZm9ybWF0aW9uLCBTdXBwb3J0LCBCdWcgUmVwb3J0cywgZXRjLCBwbGVhc2UgdmlzaXQgdGhlCiMgQ01TIE1hZGUgU2ltcGxlIEZvcmdlIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBDYXRhbG9nQ2F0ZWdvcnkgZXh0ZW5kcyBDb250ZW50CnsKICBjb25zdCBUQUJfQ0FUX09QVElPTlMgPSAnY2NfY2F0YWxvZ2VyX29wdGlvbnMnOwogIGNvbnN0IFRBQl9DQVRfSU1BR0VTID0gJ2NjX2NhdGFsb2dlcl9pbWFnZXMnOwogIHByaXZhdGUgJF9tb2Q7CiAgcHJpdmF0ZSAkYXR0cnM7CiAgcHJpdmF0ZSAkX2F0dHJfbGlzdCA9IGFycmF5KCk7CgogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICB7CiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CiAgICAkdGhpcy0+bUNhY2hhYmxlID0gZmFsc2U7CiAgfQogIAogIGZ1bmN0aW9uIE1vZHVsZU5hbWUoKQogIHsKICAgIHJldHVybiAnQ2F0YWxvZ2VyJzsKICB9IAoKICBmdW5jdGlvbiBJc0NvcHlhYmxlKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgCiAgZnVuY3Rpb24gSXNEZWZhdWx0UG9zc2libGUoKQogIHsKICAgIHJldHVybiBGQUxTRTsKICB9ICAKICAgIAogIGZ1bmN0aW9uIEZyaWVuZGx5TmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdjYXRlZ29yeV9wYWdlJyk7CiAgfQogIAogIGZ1bmN0aW9uIExhbmcoJGtleSkKICB7CiAgICByZXR1cm4gJHRoaXMtPmdldF9tb2QoKS0+TGFuZygka2V5KTsKICB9CiAgICAgICAgCiAgZnVuY3Rpb24gZ2V0X2xhbmcoJGtleSkKICB7CiAgICByZXR1cm4gJHRoaXMtPmdldF9tb2QoKS0+TGFuZygka2V5KTsKICB9CiAgCiAgZnVuY3Rpb24gZ2V0X21vZCgpCiAgewogICAgaWYoIGlzX251bGwoJHRoaXMtPl9tb2QpICkKICAgIHsKICAgICAgJHRoaXMtPl9tb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NhdGFsb2dlcicpOwogICAgfQogICAgcmV0dXJuICR0aGlzLT5fbW9kOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIEdldFRhYk5hbWVzKCkKICB7CiAgICAkbW9kID0gJHRoaXMtPmdldF9tb2QoKTsKICAgICRoYXNfaW1hZ2VzID0gKGJvb2wpJG1vZC0+R2V0UHJlZmVyZW5jZSgnY2F0ZWdvcnlfaW1hZ2VfY291bnQnLCAwKTsKICAgICRvdXQgPSBwYXJlbnQ6OkdldFRhYk5hbWVzKCk7CiAgICAKICAgIGlmKCBpc3NldCgkb3V0W3NlbGY6OlRBQl9DQVRfT1BUSU9OU10pICkgCiAgICB7CiAgICAgICRvdXRbc2VsZjo6VEFCX0NBVF9PUFRJT05TXSA9ICRtb2QtPmxhbmcoJ3RhYl9hZHZhbmNlZF9vcHRpb25zJyk7CiAgICB9CiAgICAKICAgIGlmKCBpc3NldCgkb3V0W3NlbGY6OlRBQl9DQVRfT1BUSU9OU10pICkgCiAgICB7CiAgICAgICRvdXRbc2VsZjo6VEFCX0NBVF9PUFRJT05TXSA9ICRtb2QtPmxhbmcoJ3RhYl9hZHZhbmNlZF9vcHRpb25zJyk7CiAgICB9CiAgICAKICAgIGlmKCBpc3NldCgkb3V0W3NlbGY6OlRBQl9DQVRfSU1BR0VTXSkgKQogICAgewogICAgICBpZigkaGFzX2ltYWdlcykKICAgICAgewogICAgICAgICRvdXRbc2VsZjo6VEFCX0NBVF9JTUFHRVNdID0gJG1vZC0+bGFuZygndGFiX2ltYWdlcycpOwogICAgICB9CiAgICAgICBlbHNlCiAgICAgIHsKICAgICAgICB1bnNldCgkb3V0W3NlbGY6OlRBQl9DQVRfSU1BR0VTXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkb3V0OwogIH0KICAKICBmdW5jdGlvbiBIYXNBdHRyaWJ1dGVzKCkKICB7CiAgICByZXR1cm4gaXNfYXJyYXkoJHRoaXMtPmF0dHJzKSAmJiAoY291bnQoJHRoaXMtPmF0dHJzKSA+IDApOwogIH0KICAKICBmdW5jdGlvbiBnZXRBdHRycygpCiAgewogICAgJHRoaXMtPmdldFVzZXJBdHRyaWJ1dGVzKCk7CiAgICByZXR1cm4gJHRoaXMtPmF0dHJzOwogIH0KICAKICBmdW5jdGlvbiBnZXRVc2VyQXR0cmlidXRlcygpCiAgewogICAgaWYoIGVtcHR5KCR0aGlzLT5hdHRycykgKSAKICAgIHsKICAgICAgJHRoaXMtPmF0dHJzID0gY2F0VXNlckRlZkF0dHJpYnV0ZXNPcHM6OmdldFVzZXJBdHRyaWJ1dGVzKCdjYXRhbG9nX2NhdF9hdHRycycpOwogICAgICAkdGhpcy0+X2F0dHJfbGlzdCA9IGFycmF5X2tleXMoJHRoaXMtPmF0dHJzKTsgCiAgICB9IAogIH0KICAKICAvLyB0byByZXZpc2l0Li4uIGNvcGllZCBmcm9tIGZldV9wcm90ZWN0ZWRfcGFnZQogIC8vIGl0cyBqdXN0IGEgaGFjayB0byBhdm9pZCBjYWNoaW5nIGlzc3Vlcy4uLiBidXQgbm90IHRoZSBiZXN0CiAgcHVibGljIGZ1bmN0aW9uIEdldE1vZGlmaWVkRGF0ZSgpCiAgewogICAgLy8gb24gZnJvbnRlbmQgcmVxdWVzdHMgdGhpcyB3aWxsIGZvcmNlIHRoZSB0ZW1wbGF0ZSB0byBiZSByZWNvbXBpbGVkCiAgICAvLyBhbmQgdGhlcmVmb3JlIGV2YWx1YXRpb24gdG8gYmUgZG9uZSBmb3IgZWFjaCByZXF1ZXN0LgogICAgaWYoIGNtc21zKCktPmlzX2Zyb250ZW5kX3JlcXVlc3QoKSApIHJldHVybiB0aW1lKCk7CiAgICByZXR1cm4gcGFyZW50OjpHZXRNb2RpZmllZERhdGUoKTsKICB9CgogIGZ1bmN0aW9uIFNldFByb3BlcnRpZXMoKQogIHsKICAgIHBhcmVudDo6U2V0UHJvcGVydGllcygpOwogICAgCiAgICAkdGhpcy0+QWRkUHJvcGVydHkoJ3N1Yl90ZW1wbGF0ZScsICAgIDAsIHNlbGY6OlRBQl9DQVRfT1BUSU9OUyk7CiAgICAkdGhpcy0+QWRkUHJvcGVydHkoJ3NvcnRfb3JkZXInLCAgICAgIDEsIHNlbGY6OlRBQl9DQVRfT1BUSU9OUyk7CiAgICAkdGhpcy0+QWRkUHJvcGVydHkoJ3JlY3Vyc2UnLCAgICAgICAgIDIsIHNlbGY6OlRBQl9DQVRfT1BUSU9OUyk7CiAgICAkdGhpcy0+QWRkUHJvcGVydHkoJ2l0ZW1zX3Blcl9wYWdlJywgIDMsIHNlbGY6OlRBQl9DQVRfT1BUSU9OUyk7CiAgICAkdGhpcy0+QWRkUHJvcGVydHkoJ2ltYWdlcycsICAgICAgICAgIDAsIHNlbGY6OlRBQl9DQVRfSU1BR0VTKTsKICAgIAogICAgJHRoaXMtPmdldFVzZXJBdHRyaWJ1dGVzKCk7CiAgICAKICAgICNsZXRzIGFkZCB0aGUgZmllbGRzCiAgICBpZihpc19hcnJheSgkdGhpcy0+YXR0cnMpKQogICAgewogICAgICBmb3JlYWNoICgkdGhpcy0+YXR0cnMgYXMgJGsgPT4gJHRoaXNBdHRyKQogICAgICB7CiAgICAgICAgJHRoaXMtPkFkZFByb3BlcnR5KCR0aGlzQXR0ci0+YWxpYXMsIDExMCArICR0aGlzQXR0ci0+ZmllbGRfb3JkZXIsIHNlbGY6OlRBQl9NQUlOKTsKICAgICAgfQogICAgfQogICAgCiAgfQogIAogIGZ1bmN0aW9uIEFkZFByb3BlcnR5KCRuYW1lLCAkcHJpb3JpdHksICR0YWIgPSBzZWxmOjpUQUJfTUFJTiwgJHJlcXVpcmVkID0gRkFMU0UpCiAgewogICAgcGFyZW50OjpBZGRQcm9wZXJ0eSgkbmFtZSwgJHByaW9yaXR5LCAkdGFiLCAkcmVxdWlyZWQpOwogIH0KICAKICBwcm90ZWN0ZWQgZnVuY3Rpb24gZGlzcGxheV9zaW5nbGVfZWxlbWVudCgkb25lLCAkYWRkaW5nKQogIHsKICAgICRnQ21zID0gY21zbXMoKTsKICAgICRtb2QgPSAkdGhpcy0+Z2V0X21vZCgpOwogICAgJHNtYXJ0eSA9ICRnQ21zLT5HZXRTbWFydHkoKTsKCiAgICBpZiggaW5fYXJyYXkoJG9uZSwgJHRoaXMtPl9hdHRyX2xpc3QpICkKICAgIHsKICAgICAgcmV0dXJuIGNhdEZpZWxkczo6UmVuZGVySW5wdXQoICR0aGlzLT5hdHRyc1skb25lXSwgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJHRoaXMtPmF0dHJzWyRvbmVdLT5hdHRyKSApOwogICAgfSAKCiAgICBzd2l0Y2goJG9uZSkKICAgIHsKICAgICAgCiAgICAgIGNhc2UgJ3N1Yl90ZW1wbGF0ZSc6CiAgICAgIHsKICAgICAgICAkc3ViVGVtcGxhdGVzID0gY2F0VGVtcGxhdGVPcGVyYXRpb25zOjpHZXRUZW1wbGF0ZUxpc3RGcm9tSUQoMik7CgogICAgICAgICRyZXQgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgZm9yPSJpbl9zdWJfdGVtcGxhdGUiPicgCiAgICAgICAgICAgICAgICAgICAgICAuICRtb2QtPmxhbmcoJ1N1YicpIAogICAgICAgICAgICAgICAgICAgICAgLiAnICcKICAgICAgICAgICAgICAgICAgICAgIC4gbGFuZygndGVtcGxhdGUnKSAKICAgICAgICAgICAgICAgICAgICAgIC4gJzo8L2xhYmVsPicsCiAgICAgICAgICAgICAgICAgICAgICAkbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ViX3RlbXBsYXRlJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1YlRlbXBsYXRlcywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdzdWJfdGVtcGxhdGUnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiAkcmV0OwogICAgICB9CiAgICAgIGJyZWFrOwogICAgICAKICAgICAgY2FzZSAncmVjdXJzZSc6CiAgICAgICAgICAkcmV0ID0gYXJyYXkoJG1vZC0+TGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZScpLCBDYXRhbG9nZXJIZWxwZXI6OlJlbmRlclJlY3Vyc2l2ZUlucHV0KCAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgncmVjdXJzZScpICkgKTsgICAgICAgICAgCiAgICAgICAgICByZXR1cm4gJHJldDsgICAgIAogICAgICBicmVhazsKICAgICAgCiAgICAgIGNhc2UgJ2ltYWdlcyc6CiAgICAgIHsKICAgICAgICAkcmV0ID0gYXJyYXkoJycsIENhdGFsb2dlckhlbHBlcjo6UmVuZGVyUGFnZUltYWdlVXBMb2FkZXIoJHRoaXMtPm1BbGlhcywgJ2NhdGVnb3J5JykpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgICB9CiAgICAgIGJyZWFrOwogICAgICAKICAgICAgY2FzZSAnc29ydF9vcmRlcic6CiAgICAgIHsKICAgICAgICAkcmV0ID0gYXJyYXkoKTsKICAgICAgICAKICAgICAgICAkc28gPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnc29ydF9vcmRlcicpOwoKICAgICAgICBpZiAoJHNvID09ICcnKQogICAgICAgIHsKICAgICAgICAgICAgJHNvID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnY2F0ZWdvcnlfc29ydF9vcmRlcicsICduYXR1cmFsJyk7CiAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAkcmV0ID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAkbW9kLT5MYW5nKCd0aXRsZV9nbG9iYWxfaXRlbV9zb3J0X29yZGVyMicpLCAKICAgICAgICAgICAgICAgICAgICAgICRtb2QtPkNyZWF0ZUlucHV0RHJvcGRvd24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvcnRfb3JkZXInLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtb2QtPkxhbmcoJ25hdHVyYWxfb3JkZXInKT0+J25hdHVyYWwnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kLT5MYW5nKCdhbHBoYV9vcmRlcicpPT4nYWxwaGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICAgICAgCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICAgICAgICAKICAgICAgY2FzZSAnaXRlbXNfcGVyX3BhZ2UnOgogICAgICB7CiAgICAgICAgJGlwcCA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdpdGVtc19wZXJfcGFnZScpOwogICAgICAgIGlmICgkaXBwID09ICIiIHx8ICRpcHAgPT0gLTEpCiAgICAgICAgewogICAgICAgICAgJGlwcCA9IGdldF9zaXRlX3ByZWZlcmVuY2UoJ0NhdGFsb2dlcl9tYXBpX3ByZWZfY2F0ZWdvcnlfaXRlbXNfcGVyX3BhZ2UnLCAnMTAnKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgJGRwQXJyID0gIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICAgICcxJz0+JzEnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAnMic9PicyJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzMnPT4nMycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICc0Jz0+JzQnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAnNSc9Pic1JywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzYnPT4nNicsIAogICAgICAgICAgICAgICAgICAgICAgICAgICc3Jz0+JzcnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAnOCc9Pic4JywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzknPT4nOScsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxMCc9PicxMCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxMSc9PicxMScsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxMic9PicxMicsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxMyc9PicxMycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxNCc9PicxNCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxNSc9PicxNScsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxNic9PicxNicsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxNyc9PicxNycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxOCc9PicxOCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxOSc9PicxOScsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcyMCc9PicyMCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcyNCc9PicyNCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcyNSc9PicyNScsIAogICAgICAgICAgICAgICAgICAgICAgICAgICczMCc9PiczMCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICc0MCc9Pic0MCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICc1MCc9Pic1MCcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAwJz0+JzEwMDAnCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgCiAgICAgICAgJHJldCA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgJG1vZC0+TGFuZygndGl0bGVfZ2xvYmFsX2l0ZW1zX3Blcl9wYWdlMicpLCAKICAgICAgICAgICAgICAgICAgICAgICRtb2QtPkNyZWF0ZUlucHV0RHJvcGRvd24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdGVtc19wZXJfcGFnZScsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkcEFyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlwcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHJldHVybiAkcmV0OwogICAgICB9CiAgICAgIGJyZWFrOwogICAgICAKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gcGFyZW50OjpkaXNwbGF5X3NpbmdsZV9lbGVtZW50KCRvbmUsICRhZGRpbmcpOwogICAgfQogIH0KICAKICAKICBmdW5jdGlvbiBWYWxpZGF0ZURhdGEoKQogIHsKICAgICR2ID0gcGFyZW50OjpWYWxpZGF0ZURhdGEoKTsKCiAgICBpZiAoJHYgIT09IEZBTFNFKQogICAgewogICAgICByZXR1cm4gJHY7CiAgICB9CgogICAgcmV0dXJuICR0aGlzLT52YWxpZGF0aW9uOwogIH0KCiAgZnVuY3Rpb24gdmFsaWRhdGlvbkVycm9yKCRtc2cpCiAgewogICAgaWYgKCFpc19hcnJheSgkdGhpcy0+dmFsaWRhdGlvbikpCiAgICB7CiAgICAgICR0aGlzLT52YWxpZGF0aW9uID0gYXJyYXkoKTsKICAgIH0KCiAgICBhcnJheV9wdXNoKCR0aGlzLT52YWxpZGF0aW9uLCAkbXNnKTsKICB9CgogIGZ1bmN0aW9uIEZpbGxQYXJhbXMoJHBhcmFtcywgJGVkaXRpbmcgPSBmYWxzZSkKICB7ICAgCiAgICBpZiggIWlzc2V0KCRwYXJhbXMpICkgcmV0dXJuOwogICAgCiAgICAkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CiAgICAkbW9kID0gJHRoaXMtPmdldF9tb2QoKTsKICAgICAgICAKICAgICRwYXJhbWV0ZXJzID0gYXJyYXkoJ3N1Yl90ZW1wbGF0ZScsICdzb3J0X29yZGVyJywgJ3JlY3Vyc2UnLCAnaXRlbXNfcGVyX3BhZ2UnKTsKCiAgICBmb3JlYWNoKCRwYXJhbWV0ZXJzIGFzICRvbmVwYXJhbSkKICAgIHsKICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJG9uZXBhcmFtXSkpCiAgICAgIHsKICAgICAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkb25lcGFyYW0sICRwYXJhbXNbJG9uZXBhcmFtXSk7CiAgICAgIH0gICAgICAgCiAgICB9CgogICAgJHRoaXMtPmdldFVzZXJBdHRyaWJ1dGVzKCk7CgogICAgZm9yZWFjaCAoJHRoaXMtPmF0dHJzIGFzICR0aGlzQXR0cikKICAgIHsKICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJHRoaXNBdHRyLT5zYWZlXSkpCiAgICAgIHsKICAgICAgICAgICR0aGlzLT5TZXRQcm9wZXJ0eVZhbHVlKCR0aGlzQXR0ci0+YXR0ciwgJHBhcmFtc1skdGhpc0F0dHItPnNhZmVdKTsKICAgICAgfQogICAgfQogICAgCiAgICAvLyBDb3B5IGFuZCByZXNpemUgdGhlIGltYWdlIGZpbGVzLi4uCiAgICAkaW1nY291bnQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdjYXRlZ29yeV9pbWFnZV9jb3VudCcsICcxJyk7CiAgICAkaGVyb3NpemUgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdjYXRlZ29yeV9pbWFnZV9zaXplX2hlcm8nLCAnNDAwJyk7CiAgICAkdGh1bWJzaXplID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnY2F0ZWdvcnlfaW1hZ2Vfc2l6ZV90aHVtYm5haWwnLCAnOTAnKTsKICAgIAogICAgZm9yICgkaT0xOyAkaTw9ICRpbWdjb3VudDsgJGkrKykKICAgIHsKCiAgICAgIGlmIChpc3NldCgkX0ZJTEVTWydpbWFnZScgLiAkaV1bJ3NpemUnXSkgJiYgJF9GSUxFU1snaW1hZ2UnIC4gJGldWydzaXplJ10gPiAwKQogICAgICB7CgogICAgICAgIGlmICghIHByZWdfbWF0Y2goJy9cLmpwZyR8XC5qcGVnJC9pJywgJF9GSUxFU1snaW1hZ2UnIC4gJGldWyduYW1lJ10pKQogICAgICAgIHsKICAgICAgICAgICR0aGlzLT52YWxpZGF0aW9uRXJyb3IoJG1vZC0+TGFuZygnYmFkaW1hZ2Vmb3JtYXQnLCAkX0ZJTEVTWydpbWFnZScgLiAkaV1bJ25hbWUnXSkpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgJHNvdXJjZSA9ICRfRklMRVNbJ2ltYWdlJyAuICRpXVsndG1wX25hbWUnXTsKICAgICAgICAgICR0YXJnZXQgPSBjbXNfam9pbl9wYXRoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0RmlsZXNPcGVyYXRpb25zOjpnZXRBc3NldFBhdGgoJ3MnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1BbGlhcyAuICdfc3JjXycgLiAkaSAuICcuanBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICRjcmVzID0gY29weSgkc291cmNlLCAkdGFyZ2V0KTsKCiAgICAgICAgICBpZiAoISRjcmVzKQogICAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+dmFsaWRhdGlvbkVycm9yKCAkbW9kLT5MYW5nKCdiYWRpbWFnZScsICRfRklMRVNbJ2ltYWdlJyAuICRpXVsnbmFtZSddKSApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJHRoaXNQYXJhbSA9PiAkdGhpc1BhcmFtVmFsKQogICAgewoKICAgICAgaWYgKHN1YnN0cigkdGhpc1BhcmFtLCAwLCA5KSA9PSAncm1faW1hZ2VfJykKICAgICAgewogICAgICAgICRpbWFnZVNwZWNQYXJ0cyA9IGV4cGxvZGUoJ18nLCAkdGhpc1BhcmFtKTsKICAgICAgICBjYXRGaWxlc09wZXJhdGlvbnM6OnB1cmdlQWxsSW1hZ2UoJGltYWdlU3BlY1BhcnRzWzJdLCAkaW1hZ2VTcGVjUGFydHNbM10pOwogICAgICB9CiAgICB9CiAgICAKCiAgICBwYXJlbnQ6OkZpbGxQYXJhbXMoJHBhcmFtcyk7CiAgfQoKICBmdW5jdGlvbiBQb3B1bGF0ZVBhcmFtcygmJHBhcmFtcykKICB7IAoKICAgICRwYXJhbWV0ZXJzID0gYXJyYXkoJ3N1Yl90ZW1wbGF0ZScsICdzb3J0X29yZGVyJywgJ3JlY3Vyc2UnLCAnaXRlbXNfcGVyX3BhZ2UnKTsKCiAgICAjIHRoaXMgbWF5IGJlIGJldHRlciBpbXBsZW1lbnRlZCBpbiB2YWxpZGF0ZT8gIChKTSkKICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXJzIGFzICRvbmVwYXJhbSkKICAgIHsKICAgICAgJHRtcCA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCRvbmVwYXJhbSk7CgogICAgICBpZiAoaXNzZXQoJHRtcCkgJiYgIWVtcHR5KCR0bXApKQogICAgICB7CiAgICAgICAgJHBhcmFtc1skb25lcGFyYW1dID0gJHRtcDsKICAgICAgfQogICAgfQoKICAgICR0aGlzLT5nZXRVc2VyQXR0cmlidXRlcygpOwoKICAgICRzYWZlYXR0cmxpc3QgPSBhcnJheSgpOwoKICAgIGZvcmVhY2ggKCR0aGlzLT5hdHRycyBhcyAkdGhpc0F0dHIpCiAgICB7CiAgICAgICR0bXAgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkdGhpc0F0dHItPmF0dHIpOwoKICAgICAgaWYgKGlzc2V0KCR0bXApICYmICR0bXAgIT0gJycpCiAgICAgIHsKICAgICAgICAgICRwYXJhbXNbJHRoaXNBdHRyLT5zYWZlXSA9ICR0bXA7CgogICAgICAgICAgaWYgKGlzc2V0KCR0aGlzQXR0ci0+YWxpYXMpICYmICR0aGlzQXR0ci0+YWxpYXMhPScnKQogICAgICAgICAgewogICAgICAgICAgICAkcGFyYW1zWyR0aGlzQXR0ci0+YWxpYXNdID0gJHRtcDsKICAgICAgICAgIH0KCiAgICAgICAgICAkdGhpc1NhZmVBdHRyID0gYXJyYXkoKTsKICAgICAgICAgICR0aGlzU2FmZUF0dHJbJ25hbWUnXSA9IHVjZmlyc3QoJHRoaXNBdHRyLT5hdHRyKTsKICAgICAgICAgICR0aGlzU2FmZUF0dHJbJ2tleSddID0gJ3skJyAuICR0aGlzQXR0ci0+c2FmZSAuICd9JzsKCiAgICAgICAgICBpZiAoJHRoaXNBdHRyLT5hbGlhcyAhPSAnJykKICAgICAgICAgIHsKICAgICAgICAgICAgJHRoaXNTYWZlQXR0clsnYWxpYXNrZXknXSA9ICd7JCcgLiAkdGhpc0F0dHItPmFsaWFzIC4gJ30nOwogICAgICAgICAgfQoKICAgICAgICAgIGFycmF5X3B1c2goJHNhZmVhdHRybGlzdCwgJHRoaXNTYWZlQXR0cik7CiAgICAgIH0KICAgIH0KICAgICAgICAKICAgICRwYXJhbXNbJ3RpdGxlJ10gPSAkdGhpcy0+bU5hbWU7CiAgICAkcGFyYW1zWydtZW51dGV4dCddID0gJHRoaXMtPm1NZW51VGV4dDsKICAgICRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10gPSAkdGhpcy0+bVRlbXBsYXRlSWQ7CiAgICAkcGFyYW1zWydhbGlhcyddID0gJHRoaXMtPm1BbGlhczsKICAgICRwYXJhbXNbJ3BhcmVudF9pZCddID0gJHRoaXMtPm1QYXJlbnRJZDsKICAgICRwYXJhbXNbJ2FjdGl2ZSddID0gJHRoaXMtPm1BY3RpdmU7CiAgICAkcGFyYW1zWydzaG93aW5tZW51J109JHRoaXMtPm1TaG93SW5NZW51OwogICAgJHBhcmFtc1snYXR0cmxpc3QnXSA9ICRzYWZlYXR0cmxpc3Q7CiAgICAkcGFyYW1zWydfaV9jb250ZW50X2lkJ10gPSAkdGhpcy0+bUlkOyAjaWYgbmVlZGVkIGF0IGFsbCAoPz8/Pz8/PykKCiAgfQoKIAogIGZ1bmN0aW9uIFNob3coJHBhcmFtID0gJycpCiAgewogICAgJHBhcmFtID0gdHJpbSgkcGFyYW0pOwogICAgCiAgICBpZiggISRwYXJhbSApICRwYXJhbSA9ICdjb250ZW50X2VuJzsKICAgICRwYXJhbSA9IHN0cl9yZXBsYWNlKCcgJywnXycsJHBhcmFtKTsgCiAgICAKICAgIGlmICgkcGFyYW0gPT0gJ2NvbnRlbnRfZW4nKQogICAgewogICAgICAkdGhpcy0+UG9wdWxhdGVQYXJhbXMoJHBhcmFtcyk7CiAgICAgICRwYXJhbXNbJ2NvbnRlbnRfZW4nXSA9IHBhcmVudDo6U2hvdygkcGFyYW0pOwogICAgICByZXR1cm4gJHRoaXMtPlJlbmRlckNvbnRlbnQoJHBhcmFtcyk7OyAgCiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHJldHVybiBwYXJlbnQ6OlNob3coJHBhcmFtKTsKICAgIH0KICB9CgoKICBwcm90ZWN0ZWQgZnVuY3Rpb24gVXBkYXRlKCkKICB7CiAgICBwYXJlbnQ6OlVwZGF0ZSgpOwogICAgaWYoICgkdGhpcy0+bU9sZEFsaWFzICE9ICR0aGlzLT5BbGlhcygpKSAmJiAkdGhpcy0+bU9sZEFsaWFzICYmICR0aGlzLT5BbGlhcygpICkKICAgIHsKICAgICAgY2F0RmlsZXNPcGVyYXRpb25zOjpyZW5hbWVJbWFnZXMoJHRoaXMtPm1PbGRBbGlhcywgJHRoaXMtPkFsaWFzKCkpOwogICAgfQogIH0KCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIEluc2VydCgpCiAgewogICAgcGFyZW50OjpJbnNlcnQoKTsKICAgIAogICAgaWYoICgkdGhpcy0+bU9sZEFsaWFzICE9ICR0aGlzLT5BbGlhcygpKSAmJiAkdGhpcy0+bU9sZEFsaWFzICYmICR0aGlzLT5BbGlhcygpICkKICAgIHsKICAgICAgY2F0RmlsZXNPcGVyYXRpb25zOjpyZW5hbWVJbWFnZXMoJHRoaXMtPm1PbGRBbGlhcywkdGhpcy0+QWxpYXMoKSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBVcGRhdGVQcm9wZXJ0eU5hbWUoJHByb3BOYW1lLCAkcHJvcE5ld05hbWUpCiAgewogICAgJHRlbXBWYWx1ZSA9ICcnOwogICAgCiAgICBpZiAoJHRoaXMtPmlzX2tub3duX3Byb3BlcnR5KCRwcm9wTmFtZSkpCiAgICB7CiAgICAgICR0ZW1wVmFsdWUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkcHJvcE5hbWUpOwogICAgICAkdGhpcy0+UmVtb3ZlUHJvcGVydHkoJHByb3BOYW1lLCBmYWxzZSk7ICAgCiAgICB9CiAgICAKICAgICR0aGlzLT5BZGRFeHRyYVByb3BlcnR5KCRwcm9wTmFtZSk7CiAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkcHJvcE5ld05hbWUsICR0ZW1wVmFsdWUpOwogIH0gICAKCiAgZnVuY3Rpb24gRGVsZXRlUHJvcGVydHkoJHByb3BOYW1lKQogIHsKICAgICR0aGlzLT5SZW1vdmVQcm9wZXJ0eSgkcHJvcE5hbWUsIGZhbHNlKTsgICAgCiAgfQogIC8qKgogICogIwogICogCiAgKiBAcGFyYW0gbWl4ZWQgJHBhcmFtcwogICovCiAgZnVuY3Rpb24gUmVuZGVyQ29udGVudCgkcGFyYW1zKQogIHsgICAgCiAgICAkbW9kID0gJHRoaXMtPmdldF9tb2QoKTsKICAgIAogICAgJHNtYXJ0eSA9ICRtb2QtPkdldEFjdGlvblRlbXBsYXRlT2JqZWN0KCk7CiAgICAKICAgIGlmKCBlbXB0eSgkc21hcnR5KSApICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgIAogICAgJGNudE9iaiA9IG5ldyBzdGRDbGFzcygpOwogIAogICAgJHNob3dNaXNzaW5nID0gJ18nIC4gJG1vZC0+R2V0UHJlZmVyZW5jZSgnc2hvd19taXNzaW5nJywgJzEnKTsKCiAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRrZXksICRwYXJhbXNbJGtleV0pOwogICAgICAkY250T2JqLT4ka2V5ID0gJHBhcmFtc1ska2V5XTsKICAgIH0KCiAgICBsaXN0KCRjdXJQYWdlLCAkY2F0ZWdvcnlJdGVtcykgPSBjYXRDb250ZW50T3BlcmF0aW9uczo6Z2V0Q2F0YWxvZ0l0ZW1zTGlzdCgkcGFyYW1zKTsKCiAgICBpZiAoaXNzZXQoJHBhcmFtc1snc29ydF9vcmRlciddKSAmJiAkcGFyYW1zWydzb3J0X29yZGVyJ10gPT0gJ2FscGhhJykKICAgIHsKICAgICAgdXNvcnQoICRjYXRlZ29yeUl0ZW1zLCBhcnJheSgnY2F0Q29udGVudE9wZXJhdGlvbnMnLCAnY29udGVudGFscGhhJykgKTsKICAgIH0KICAgIAogICAgJGNudE9iai0+aXRlbXMgPSAkY2F0ZWdvcnlJdGVtczsKICAgICRjbnRPYmotPmRlZmF1bHRfY29udGVudCA9ICRwYXJhbXNbJ2NvbnRlbnRfZW4nXTsKICAgIAogICAgJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRjYXRlZ29yeUl0ZW1zKTsKICAgICRzbWFydHktPmFzc2lnbignbWFpbl9jb250ZW50JywgJHBhcmFtc1snY29udGVudF9lbiddKTsKICAgIAogICAgbGlzdCgkbmF2LCAkY2F0ZWdvcnlJdGVtcykgPSAkdGhpcy0+cGFnaW5hdGlvbigkY2F0ZWdvcnlJdGVtcywgJHBhcmFtcyk7CiAgICAKICAgIGZvcmVhY2ggKCRuYXYgYXMgJGtleT0+JHZhbCkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRrZXksICRuYXZbJGtleV0pOwogICAgfQogICAgCiAgICAkY250T2JqLT5uYXYgPSAkbmF2OwogICAgCiAgICAkaW1nY291bnQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdjYXRlZ29yeV9pbWFnZV9jb3VudCcsICcxJyk7CiAgICAkZnVsbFNpemUgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdjYXRlZ29yeV9pbWFnZV9zaXplX2hlcm8nLCAnNDAwJyk7CiAgICAkdGh1bWJTaXplID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnY2F0ZWdvcnlfaW1hZ2Vfc2l6ZV90aHVtYm5haWwnLCAnOTAnKTsKICAgIAogICAgJGNudE9iai0+aW1nY291bnQgPSAkaW1nY291bnQ7CiAgICAkY250T2JqLT5mdWxsU2l6ZSA9ICRmdWxsU2l6ZTsKICAgICRjbnRPYmotPnRodW1iU2l6ZSA9ICR0aHVtYlNpemU7CiAgICAKICAgICRpbWFnZUFycmF5ID0gYXJyYXkoKTsKICAgICRzcmNJbWdBcnJheSA9IGFycmF5KCk7CiAgICAkdGh1bWJBcnJheSA9IGFycmF5KCk7CgogICAgZm9yKCRpID0gMTsgJGkgPD0gJGltZ2NvdW50OyAkaSsrKQogICAgewogICAgICAkaXMgPSBjYXRGaWxlc09wZXJhdGlvbnM6OmltYWdlU3BlYygkY3VyUGFnZS0+QWxpYXMoKSwgJ2NmJywgJGksICRmdWxsU2l6ZSk7CiAgICAgIGFycmF5X3B1c2goICRpbWFnZUFycmF5LCAkaXMpOwogICAgICAkaXMgPSBjYXRGaWxlc09wZXJhdGlvbnM6OmltYWdlU3BlYygkY3VyUGFnZS0+QWxpYXMoKSwgJ2N0JywgJGksICR0aHVtYlNpemUpOwogICAgICBhcnJheV9wdXNoKCR0aHVtYkFycmF5LCAkaXMpOwogICAgICAkc2lzID0gY2F0RmlsZXNPcGVyYXRpb25zOjpzcmNJbWFnZVNwZWMoJGN1clBhZ2UtPkFsaWFzKCksICRpKTsgIAogICAgICBhcnJheV9wdXNoKCRzcmNJbWdBcnJheSwgJHNpcyk7CgogICAgICAkaXMgPSBjYXRGaWxlc09wZXJhdGlvbnM6OmltYWdlU3BlYygkY3VyUGFnZS0+QWxpYXMoKSwgJ2NmJywgJGksICRmdWxsU2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgJHNtYXJ0eS0+YXNzaWduKCdpbWFnZV8nIC4gJGkgLiAnX3VybCcsICRpcyk7CiAgICAgICRzaXMgPSBjYXRGaWxlc09wZXJhdGlvbnM6OnNyY0ltYWdlU3BlYygkcGFyYW1zWydhbGlhcyddLCAkaSk7ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICRzbWFydHktPmFzc2lnbignc3JjX2ltYWdlXycgLiAkaSAuICdfdXJsJywgJHNpcyk7CiAgICAgICRpcyA9ICBjYXRGaWxlc09wZXJhdGlvbnM6OmltYWdlU3BlYygkY3VyUGFnZS0+QWxpYXMoKSwgJ2N0JywgJGksICR0aHVtYlNpemUpOyAgICAgICAgICAgICAgICAgICAgIAogICAgICAkc21hcnR5LT5hc3NpZ24oJ2ltYWdlX3RodW1iXycgLiAkaSAuICdfdXJsJywgJGlzKTsKICAgIH0KICAgIAogICAgJHNtYXJ0eS0+YXNzaWduKCdjdGxnJywgJGNudE9iaik7IAogICAgJHNtYXJ0eS0+YXNzaWduKCdpbWFnZV91cmxfYXJyYXknLCAkaW1hZ2VBcnJheSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ3NyY19pbWFnZV91cmxfYXJyYXknLCAkc3JjSW1nQXJyYXkpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdpbWFnZV90aHVtYl91cmxfYXJyYXknLCAkdGh1bWJBcnJheSk7CiAgICAkbW9kLT5zbWFydHlCYXNpY3MoKTsKCiAgICAkY2FjaGVfaWQgPSAnX2N0Z18nIC4gbWQ1KCBzZXJpYWxpemUoJHBhcmFtcykgKTsKICAgICRjb21waWxlX2lkID0gJ0NhdGFsb2dlcl8nIC4gJHRoaXMtPm1JZDsKCiAgICByZXR1cm4gJHNtYXJ0eS0+ZmV0Y2goCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kLT5HZXREYXRhYmFzZVJlc291cmNlKCdjYXRhbG9nXycgLiAkcGFyYW1zWydzdWJfdGVtcGxhdGUnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2FjaGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGlsZV9pZAogICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgfQogIAogIGZ1bmN0aW9uIHBhZ2luYXRpb24oJGNhdGVnb3J5SXRlbXMsICRwYXJhbXMpCiAgewogICAgJG1vZCA9IHNlbGY6OmdldF9tb2QoKTsgIAogICAgJGNvdW50ID0gY291bnQoJGNhdGVnb3J5SXRlbXMpOwoKICAgIGlmICggaXNzZXQoJF9SRVFVRVNUWydzdGFydCddKSApCiAgICB7CiAgICAgICRzdGFydCA9ICRfUkVRVUVTVFsnc3RhcnQnXTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJHN0YXJ0ID0gMDsKICAgIH0KCiAgICBpZiAoIGlzc2V0KCRwYXJhbXNbJ2l0ZW1zX3Blcl9wYWdlJ10pICkKICAgIHsKICAgICAgJGVuZCA9IG1heCgkcGFyYW1zWydpdGVtc19wZXJfcGFnZSddLCAxKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJGVuZCA9IG1heCgkY291bnQsIDEpOwogICAgfQoKICAgICR0aGlzVXJsID0gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiAgICAkdGhpc1VybCA9IHByZWdfcmVwbGFjZSgnLyhcPykqKFwmKSpzdGFydD1cZCsvJywgJycsICR0aGlzVXJsKTsKCiAgICBpZiAoc3RycG9zKCR0aGlzVXJsLCAnPycpID09PSBmYWxzZSkKICAgIHsKICAgICAgJGRlbGltID0gJz8nOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkZGVsaW0gPSAnJic7CiAgICB9CgogICAgJG5hdiA9IGFycmF5KCk7CgogICAgaWYgKCRzdGFydCA+IDApCiAgICB7CiAgICAgICRuYXZbJ3ByZXYnXSA9ICc8YSBocmVmPSInIC4gJHRoaXNVcmwgLiAkZGVsaW0gCiAgICAgICAgICAgICAgICAgICAgIC4gJ3N0YXJ0PScgLiBtYXgoMCwgJHN0YXJ0LSRlbmQpIC4gJyI+JyAKICAgICAgICAgICAgICAgICAgICAgLiAkdGhpcy0+TGFuZygncHJldicpIC4gJzwvYT4nOwoKICAgICAgJG5hdlsncHJldnVybCddID0gICR0aGlzVXJsIC4gJGRlbGltIC4gJ3N0YXJ0PScgLiBtYXgoMCwgJHN0YXJ0IC0gJGVuZCk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICRuYXZbJ3ByZXYnXSA9ICcnOwogICAgICAkbmF2WydwcmV2dXJsJ10gPSAnJzsKICAgIH0KCiAgICBpZiAoJHN0YXJ0ICsgJGVuZCA8ICRjb3VudCkKICAgIHsKICAgICAgJG5hdlsnbmV4dCddID0gJzxhIGhyZWY9IicgLiAkdGhpc1VybCAuICRkZWxpbSAuICdzdGFydD0nIAogICAgICAgICAgICAgICAgICAgICAuICgkc3RhcnQgKyAkZW5kKSAuICciPicgLiAkbW9kLT5MYW5nKCduZXh0JykgLiAnPC9hPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAkbmF2WyduZXh0dXJsJ10gPSAkdGhpc1VybCAuICRkZWxpbSAuICdzdGFydD0nIC4gKCRzdGFydCArICRlbmQpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkbmF2WyduZXh0J10gPSAnJzsKICAgICAgJG5hdlsnbmV4dHVybCddID0gJyc7CiAgICB9CgogICAgJG5hdnN0ciA9ICcnOwogICAgJHBhZ2VJbmQgPSAxOwogICAgCiAgICBmb3IgKCAkaSA9IDA7ICRpIDwgJGNvdW50OyAkaSArPSAkZW5kICkKICAgIHsKICAgICAgaWYgKCRpID09ICRzdGFydCkKICAgICAgewogICAgICAgICRuYXZzdHIgLj0gIjxzcGFuIGNsYXNzPVwicC0iIC4gJHBhZ2VJbmQgLiAiICBub2xpbmtcIj4iIC4gJHBhZ2VJbmQgLiAiPC9zcGFuPiI7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgJG5hdnN0ciAuPSAgJzxhIGhyZWY9IicgLiAkdGhpc1VybCAuICRkZWxpbSAuICdzdGFydD0nICAuICRpIC4gJyI+JyAuICRwYWdlSW5kIC4gJzwvYT4nOwogICAgICB9CgogICAgICAkbmF2c3RyIC49ICRtb2QtPkxhbmcoJ25hdlRhYicpOwogICAgICAkcGFnZUluZCsrOwogICAgfQoKICAgICRuYXZzdHIgPSBydHJpbSggJG5hdnN0ciwgJG1vZC0+TGFuZygnbmF2VGFiJykgKTsKICAgICRjYXRlZ29yeUl0ZW1zID0gYXJyYXlfc3BsaWNlKCRjYXRlZ29yeUl0ZW1zLCAkc3RhcnQsICRlbmQpOwoKICAgIGlmIChzdHJsZW4oJG5hdnN0cikgPiAxKQogICAgewogICAgICAkbmF2WyduYXZzdHInXSA9ICAkbmF2c3RyOwogICAgICAkbmF2WydoYXNuYXYnXSA9IHRydWU7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICRuYXZbJ25hdnN0ciddID0gICcnOwogICAgICAkbmF2WydoYXNuYXYnXSA9IGZhbHNlOwogICAgfQogICAgCiAgICAkcmV0ID0gYXJyYXkoJG5hdiwgJGNhdGVnb3J5SXRlbXMpOwogICAKICAgIHJldHVybiAkcmV0OwogICAgICAgIAogIH0KCn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.CatalogerHelper.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogQ2F0YWxvZ2VyIC0gYnVpbGQgYSBjYXRhbG9nIG9yIHBvcnRmb2xpbyBvZiBzdHVmZg0KIyBWZXJzaW9uOiAwLjEyDQojDQojIENvcHlyaWdodCAoYykgMjAxMi0yMDEzLCBGZXJuYW5kbyBNb3JnYWRvIChKb01vcmcpIGpvbW9yZy5tb3JnQGdtYWlsLmNvbQ0KIyBDb3B5cmlnaHQgKGMpIDIwMDYsIFNhbXVlbCBHb2xkc3RlaW4gPHNqZ0BjbXNtb2R1bGVzLmNvbT4NCiMgRm9yIEluZm9ybWF0aW9uLCBTdXBwb3J0LCBCdWcgUmVwb3J0cywgZXRjLCBwbGVhc2UgdmlzaXQgdGhlDQojIENNUyBNYWRlIFNpbXBsZSBGb3JnZSBhdCBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnDQojDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDYgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQ0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiMNCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0ENCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTA0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi8qKg0KKiBBIGhlbHBlciBDbGFzcyBmb3IgdGhlIENhdGFsb2dlciBNb2R1bGUNCiogQHZlcnNpb24gMS4wDQoqIEBhdXRob3IgSm8gTW9yZyAoRmVybmFuZG8gTW9yZ2FkbykNCiovDQpjbGFzcyBDYXRhbG9nZXJIZWxwZXINCnsNCiAgc3RhdGljIHByaXZhdGUgJF9pbml0aWFsaXplZCA9IEZBTFNFOw0KICBzdGF0aWMgcHJpdmF0ZSAkX2NtczsNCiAgc3RhdGljIHByaXZhdGUgJF9zbWFydHk7DQogIHN0YXRpYyBwcml2YXRlICRfY29uZmlnOw0KICBzdGF0aWMgcHJpdmF0ZSAkX21vZDsNCiAgDQogIC8qKg0KICAqIEEgZmV3IGJhc2ljcw0KICAqLw0KICANCiAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2luaXRpYWxpemUoKQ0KICB7DQogICAgaWYoIXNlbGY6OiRfaW5pdGlhbGl6ZWQpDQogICAgew0KICAgICAgc2VsZjo6JF9jbXMgPSBjbXNtcygpOw0KICAgICAgc2VsZjo6JF9jb25maWcgPSBzZWxmOjokX2Ntcy0+R2V0Q29uZmlnKCk7DQogICAgICBzZWxmOjokX3NtYXJ0eSA9IHNlbGY6OiRfY21zLT5HZXRTbWFydHkoKTsNCiAgICAgIHNlbGY6OiRfbW9kID0gc2VsZjo6JF9jbXMtPkdldE1vZHVsZUluc3RhbmNlKCdDYXRhbG9nZXInKTsNCiAgICAgIHNlbGY6OiRfaW5pdGlhbGl6ZWQgPSBUUlVFOyAgDQogICAgfQ0KICB9DQogIA0KICAjZGVwcmVjYXRlZA0KICBzdGF0aWMgZnVuY3Rpb24gZ2V0X21vZCgpDQogIHsNCiAgICBzZWxmOjpfaW5pdGlhbGl6ZSgpOw0KICAgIHJldHVybiBzZWxmOjokX21vZDsNCiAgfQ0KDQogICMjIyMgQWRtaW4gVUkgaGVscGVyIG1ldGhvZHMNCiAgc3RhdGljIHByaXZhdGUgZnVuY3Rpb24gX2FkbUltYWdlVXBsb2FkZXJUYWJsZUhlYWRlcigpDQogIHsNCiAgICBpZiAoIWlzc2V0KCRodG1sKSkNCiAgICB7DQogICAgICAkbW9kID0gc2VsZjo6Z2V0X21vZCgpOw0KICAgICAgJGh0bWwgPSAnJzsNCiAgICAgICRodG1sIC49ICJcblxuPHRhYmxlIGNsYXNzPSdwYWdldGFibGUnPlxuIjsNCiAgICAgICRodG1sIC49ICI8dGhlYWQ+IjsNCiAgICAgICRodG1sIC49ICJcbjx0cj5cbjx0aCBzdHlsZT1cInZlcnRpY2FsLWFsaWduOmNlbnRlcjt0ZXh0LWFsaWduOnJpZ2h0O1wiPiM8L3RoPlxuPHRoPiI7DQogICAgICAkaHRtbCAuPSAkbW9kLT5sYW5nKCduYW1laW1hZ2VzJyk7IA0KICAgICAgJGh0bWwgLj0gIjwvdGg+XG48dGggc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7XCI+XG4iOw0KICAgICAgJGh0bWwgLj0gJG1vZC0+bGFuZygndGl0bGVfdXBsb2FkJyk7DQogICAgICAkaHRtbCAuPSAiPC90aD5cbjx0aCBjbGFzcz1cInBhZ2VpY29uXCI+XG4iOw0KICAgICAgJGh0bWwgLj0gJG1vZC0+bGFuZygnZGVsZXRlaW1hZ2UnKTsNCiAgICAgICRodG1sIC49ICI8L3RoPlxuPC90cj5cbiI7DQogICAgICAkaHRtbCAuPSAnPC90aGVhZD4nOw0KICAgICAgJGh0bWwgLj0gIlxuIjsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRodG1sOw0KICB9DQogIA0KICBzdGF0aWMgcHJpdmF0ZSBmdW5jdGlvbiBfYWRtRmlsZVVwbG9hZGVyVGFibGVIZWFkZXIoKQ0KICB7DQogICAgaWYgKCFpc3NldCgkaHRtbCkpDQogICAgew0KICAgICAgJG1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAgICRodG1sID0gJyc7DQogICAgICAkaHRtbCAuPSAiXG5cbjx0YWJsZSBjbGFzcz0ncGFnZXRhYmxlJz5cbiI7DQogICAgICAkaHRtbCAuPSAiPHRoZWFkPiI7DQogICAgICAkaHRtbCAuPSAiXG48dHI+XG48dGggc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7XCI+IzwvdGg+XG4iOw0KICAgICAgJGh0bWwgLj0gIlxuPHRoIHN0eWxlPVwidmVydGljYWwtYWxpZ246Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyO1wiPkljb248L3RoPlxuIjsNCiAgICAgICRodG1sIC49ICI8dGggc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjpjZW50ZXI7dGV4dC1hbGlnbjpsZWZ0O1wiPlxuIjsgDQogICAgICAkaHRtbCAuPSAkbW9kLT5sYW5nKCduYW1lZmlsZXMnKTsgIA0KICAgICAgJGh0bWwgLj0gIjwvdGg+XG4iOyAgDQogICAgICAkaHRtbCAuPSAiPHRoIHN0eWxlPVwidmVydGljYWwtYWxpZ246Y2VudGVyO3RleHQtYWxpZ246bGVmdDtcIj5cbiI7DQogICAgICAkaHRtbCAuPSAkbW9kLT5sYW5nKCd0aXRsZV91cGxvYWQnKTsNCiAgICAgICRodG1sIC49ICI8L3RoPlxuPHRoIGNsYXNzPVwicGFnZWljb25cIj5cbiI7DQogICAgICAkaHRtbCAuPSAkbW9kLT5sYW5nKCdkZWxldGVmaWxlJyk7IA0KICAgICAgJGh0bWwgLj0gIjwvdGg+XG48L3RyPlxuIjsNCiAgICAgICRodG1sIC49ICc8L3RoZWFkPic7DQogICAgICAkaHRtbCAuPSAiXG4iOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJGh0bWw7DQogIH0NCiAgDQogIHN0YXRpYyBmdW5jdGlvbiAmUmVuZGVyUGFnZUltYWdlVXBMb2FkZXIoJGFsaWFzLCAkdHlwZSA9ICdpdGVtJykNCiAgew0KICAgIGlmICgkdHlwZSA9PSAnY2F0ZWdvcnknKXskdCA9ICdfY3RfJzt9IA0KICAgIGlmICgkdHlwZSA9PSAnaXRlbScpeyR0ID0gJ19pdF8nO30gDQogICAgDQogICAgJG1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAkaW1nY291bnQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdjYXRlZ29yeV9pbWFnZV9jb3VudCcsICcxJyk7DQogICAgJHRodW1ic2l6ZSA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2NhdGVnb3J5X2ltYWdlX3NpemVfdGh1bWJuYWlsJywgJzkwJyk7DQogICAgJFJvb3RVUkwgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdSb290VVJMJywgY21zbXMoKS0+Y29uZmlnWydyb290X3VybCddKTsNCiAgICANCiAgICBpZiAoJGltZ2NvdW50ICE9IDApDQogICAgew0KICAgICAgJGh0bWwgPSBzZWxmOjpfYWRtSW1hZ2VVcGxvYWRlclRhYmxlSGVhZGVyKCk7IA0KICAgICAgJGh0bWwgLj0gIjx0Ym9keT5cbiI7DQogICAgICANCiAgICAgICRpbWdzcmMgPSAnJzsNCiAgICAgICR1cmxleHQgPSAkbW9kLT5jcmVhdGVfdXJsKCAnbTFfJywgJ2ltYWdlJywgbnVsbCwgYXJyYXkoKSApOw0KICAgICAgICAgICAgDQogICAgICBmb3IgKCRpID0gMSA7ICRpIDw9ICRpbWdjb3VudCA7ICRpKyspDQogICAgICB7DQogICAgICAgICRpbWdzcmMgLj0gICc8dHI+PHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjpjZW50ZXI7dGV4dC1hbGlnbjpyaWdodDsiPicNCiAgICAgICAgICAgICAgICAgICAuIHNwcmludGYoIiUwM2QiLCAkaSkNCiAgICAgICAgICAgICAgICAgICAuICc8L3RkPjx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246Y2VudGVyO3RleHQtYWxpZ246Y2VudGVyOyI+JzsNCiAgICAgICAgICAgICAgICAgIA0KICAgICAgICAkdG1wdHh0ID0gJzxpbWcgYWx0PSInDQogICAgICAgICAgICAgICAgICAgLiAkbW9kLT5sYW5nKCduYW1laW1hZ2VzJykNCiAgICAgICAgICAgICAgICAgICAuICciIHRpdGxlPSInDQogICAgICAgICAgICAgICAgICAgLiAkbW9kLT5sYW5nKCduYW1laW1hZ2VzJykNCiAgICAgICAgICAgICAgICAgICAuICciIHNyYz0iJw0KICAgICAgICAgICAgICAgICAgIC8vLiAkUm9vdFVSTA0KICAgICAgICAgICAgICAgICAgIC4gJHVybGV4dCAuICcmaT0nDQogICAgICAgICAgICAgICAgICAgLiAkYWxpYXMNCiAgICAgICAgICAgICAgICAgICAuICR0DQogICAgICAgICAgICAgICAgICAgLiAkaQ0KICAgICAgICAgICAgICAgICAgIC4gJ18nDQogICAgICAgICAgICAgICAgICAgLiAkdGh1bWJzaXplDQogICAgICAgICAgICAgICAgICAgLiAnXzEuanBnJmFjPScNCiAgICAgICAgICAgICAgICAgICAuIHJhbmQoMCw5KQ0KICAgICAgICAgICAgICAgICAgIC4gcmFuZCgwLDkpDQogICAgICAgICAgICAgICAgICAgLiByYW5kKDAsOSkNCiAgICAgICAgICAgICAgICAgICAuICciIC8+JzsNCiAgICAgICAgICAgICAgICAgICANCiAgICAgICAgJGltZ3NyYyAuPSBzdHJfcmVwbGFjZSgnJmFtcDsnLCAnJicsICR0bXB0eHQpOw0KDQogICAgICAgICRpbWdzcmMgLj0gJzwvdGQ+PHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjpjZW50ZXI7Ij48aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iaW1hZ2UnDQogICAgICAgICAgICAgICAgICAgLiAkaQ0KICAgICAgICAgICAgICAgICAgIC4gJyIgLz4nOw0KICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAkaW1nc3JjIC49ICc8L3RkPjx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246Y2VudGVyO3RleHQtYWxpZ246cmlnaHQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InJtX2ltYWdlXycgDQogICAgICAgICAgICAgICAgICAgLiAkYWxpYXMNCiAgICAgICAgICAgICAgICAgICAuICdfJw0KICAgICAgICAgICAgICAgICAgIC4gJGkNCiAgICAgICAgICAgICAgICAgICAuICciIG5hbWU9InJtX2ltYWdlXycNCiAgICAgICAgICAgICAgICAgICAuICRhbGlhcw0KICAgICAgICAgICAgICAgICAgIC4gJ18nDQogICAgICAgICAgICAgICAgICAgLiAkaQ0KICAgICAgICAgICAgICAgICAgIC4gJyIgLz4nOw0KICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAkaW1nc3JjIC49ICc8L3RkPjwvdHI+JzsNCiAgICAgIH0NCiAgICAgICANCiAgICAgICAgJGh0bWwgLj0gJGltZ3NyYzsgDQogICAgICAgIA0KICAgICAgICAkaHRtbCAuPSAiPHRib2R5PlxuPC90YWJsZT5cbiI7DQoNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCg0KICAgICAgICAkaHRtbCAuPSAnPGRpdiBjbGFzcz0icGFnZXRleHQiPic7DQogICAgICAgICRodG1sIC49ICc8aW1nIGFsdD0iJzsNCiAgICAgICAgJGh0bWwgLj0gICRtb2QtPmxhbmcoJ25hbWVpbWFnZXMnKTsNCiAgICAgICAgJGh0bWwgLj0gICciIHRpdGxlPSInOw0KICAgICAgICAkaHRtbCAuPSAgJG1vZC0+bGFuZygnbmFtZWltYWdlcycpOw0KICAgICAgICAkaHRtbCAuPSAgJyIgc3JjPSIgJzsNCiAgICAgICAgJGh0bWwgLj0gICRSb290VVJMOw0KICAgICAgICAkaHRtbCAuPSAgJy9tb2R1bGVzL0NhdGFsb2dlci9pbWFnZXMvbm8taW1hZ2UuZ2lmIiAvPic7DQogICAgICAgICRodG1sIC49ICAnPC9kaXY+JzsNCg0KDQogICAgICB9DQogICAgICANCiAgICAgIHJldHVybiAkaHRtbDsNCiAgfQ0KICANCiAgc3RhdGljIGZ1bmN0aW9uICZSZW5kZXJQYWdlRmlsZVVwTG9hZGVyKCRhbGlhcykNCiAgew0KICAgICRtb2QgPSBzZWxmOjpnZXRfbW9kKCk7DQogICAgJGZpbGVjb3VudCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1fZmlsZV9jb3VudCcsIDApOw0KICAgIA0KICAgIGlmICgkZmlsZWNvdW50ID09IDApIHJldHVybiAnJzsgIyB3ZSBzaG91bGRuJ3QgZXZlbiBnZXQgaGVyZSBidXQgcmV0dXJuIGVtcHR5IG5ldmVydGhlbGVzcy4uLi4NCg0KICAgIGxpc3QoJGZpbGVsaXN0LCAkZmlsZXR5cGUpID0gY2F0RmlsZXNPcGVyYXRpb25zOjpnZXRGaWxlcygkYWxpYXMpOw0KICAgIA0KICAgICRodG1sID0gc2VsZjo6X2FkbUZpbGVVcGxvYWRlclRhYmxlSGVhZGVyKCk7IA0KICAgICRodG1sIC49ICI8dGJvZHk+XG48dHI+XG4iOw0KICAgIA0KICAgICRmaWxlY291bnQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ZpbGVfY291bnQnLCAwKTsNCg0KICAgIGZvciAoJGkgPSAwOyAkaSA8ICRmaWxlY291bnQ7ICRpKyspDQogICAgew0KICAgICAgICRmaWxlc3JjID0gJyc7DQogICAgDQogICAgICAkZmlsZXNyYyAuPSAnPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjpjZW50ZXI7dGV4dC1hbGlnbjpyaWdodDsiPicNCiAgICAgICAgICAgICAgICAgIC4gc3ByaW50ZigiJTAzZCIsICRpKQ0KICAgICAgICAgICAgICAgICAgLiAnPC90ZD4nOyANCg0KICAgICAgaWYgKGlzc2V0KCRmaWxlbGlzdFskaV0pKQ0KICAgICAgew0KICAgICAgICAgDQogICAgICAgICR0eXBlaW1nID0gJzxpbWcgc3JjPSInDQogICAgICAgICAgICAgICAgICAgLiBjbXNtcygpLT5jb25maWdbJ3Jvb3RfdXJsJ10NCiAgICAgICAgICAgICAgICAgICAuICcvbW9kdWxlcy9GaWxlTWFuYWdlci9pY29ucy90aGVtZXMvZGVmYXVsdC9leHRlbnNpb25zLzE2cHgvJw0KICAgICAgICAgICAgICAgICAgIC4gJGZpbGV0eXBlWyRpXQ0KICAgICAgICAgICAgICAgICAgIC4gJy5wbmciIC8+JzsNCiAgICAgICAgDQogICAgICAgICRjdXJyZmlsZSA9ICRmaWxlbGlzdFskaV07DQogICAgICAgIA0KICAgICAgICAkZGVsZXRlSFRNTCA9ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIiBpZD0icm1fZmlsZV8nDQogICAgICAgICAgICAgICAgICAgICAgLiAkYWxpYXMNCiAgICAgICAgICAgICAgICAgICAgICAuICdfJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJGkNCiAgICAgICAgICAgICAgICAgICAgICAuICciIG5hbWU9InJtX2ZpbGVfJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJGZpbGVsaXN0WyRpXQ0KICAgICAgICAgICAgICAgICAgICAgIC4gJyIgdmFsdWU9IicNCiAgICAgICAgICAgICAgICAgICAgICAuICRmaWxlbGlzdFskaV0NCiAgICAgICAgICAgICAgICAgICAgICAuICciLz4nOw0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAkdHlwZWltZyA9ICc8aW1nIHNyYz0iJw0KICAgICAgICAgICAgICAgICAgIC4gY21zbXMoKS0+Y29uZmlnWydyb290X3VybCddDQogICAgICAgICAgICAgICAgICAgLiAnL21vZHVsZXMvRmlsZU1hbmFnZXIvaWNvbnMvdGhlbWVzL2RlZmF1bHQvZXh0ZW5zaW9ucy8xNnB4LzAucG5nIiAvPic7DQogICAgICAgICAgICAgICAgICAgDQogICAgICAgICRjdXJyZmlsZSA9ICRtb2QtPmxhbmcoJ25hbWVmaWxlJykNCiAgICAgICAgICAgICAgICAgICAuICcgIyAnDQogICAgICAgICAgICAgICAgICAgLiAoJGkgKyAxKTsNCiAgICAgICAgICAgICAgICAgICANCiAgICAgICAgJGRlbGV0ZUhUTUwgPSAnJm5ic3AnOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkZmlsZXNyYyAuPSAnPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ij4nDQogICAgICAgICAgICAgICAgICAuICAkdHlwZWltZw0KICAgICAgICAgICAgICAgICAgLiAnPC90ZD4nOw0KICAgICAgICAgICAgICAgICAgDQogICAgICANCiAgICAgICRmaWxlc3JjIC49ICc8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOmNlbnRlcjt0ZXh0LWFsaWduOmxlZnQ7Ij4nDQogICAgICAgICAgICAgICAgICAuICAkY3VycmZpbGUNCiAgICAgICAgICAgICAgICAgIC4gJzwvdGQ+JzsNCiAgICAgIA0KICAgICAgJGZpbGVzcmMgLj0gJzx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246bWlkZGxlOyI+Jm5ic3A7PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUnDQogICAgICAgICAgICAgICAgICAuICRpDQogICAgICAgICAgICAgICAgICAuICciIC8+JzsNCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgJGZpbGVzcmMgLj0gJzx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246bWlkZGxlO3RleHQtYWxpZ246cmlnaHQ7Ij4nDQogICAgICAgICAgICAgICAgICAuICRkZWxldGVIVE1MDQogICAgICAgICAgICAgICAgICAuICc8L3RkPic7DQogICAgICAgICAgICAgICAgICANCg0KICAgICAgJGh0bWwgLj0gJGZpbGVzcmM7DQoNCiAgICAgICRodG1sIC49ICI8L3RkPlxuPC90cj5cbiI7DQogICAgfQ0KDQogICAgJGh0bWwgLj0gIjx0Ym9keT5cbjwvdGFibGU+XG4iOw0KDQogICAgcmV0dXJuICRodG1sOw0KICAgIA0KICB9DQogIA0KICBzdGF0aWMgZnVuY3Rpb24gUmVuZGVyUmVjdXJzaXZlSW5wdXQoJG1vZGUgPSAnaXRlbXNfb25lJykNCiAgew0KICAgICRtb2QgPSBzZWxmOjpnZXRfbW9kKCk7DQogICAgDQogICAgJHJldCA9ICc8ZmllbGRzZXQ+JzsgDQogICAgJHJldCAuPSAnPGxlZ2VuZD4nIC4gJG1vZC0+bGFuZygndGl0bGVfZ2xvYmFsX2NhdGVnb3J5X3JlY3Vyc2UyJykgLiAnPC9sZWdlbmQ+JzsgDQogICAgJHJldCAuPSAiPHRhYmxlPlxuIjsgDQogICAgJHJldCAuPSAiPHRyPlxuIjsgDQogICAgJHJldCAuPSAiPHRkPlxuIjsgDQogICAgJHJldCAuPSAnPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJyZWN1cnNlIiB2YWx1ZT0iaXRlbXNfYWxsIiAnOyANCiAgICAkcmV0IC49ICggKCRtb2RlID09ICdpdGVtc19hbGwnKSA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJyApOyANCiAgICAkcmV0IC49ICcvPiZuYnNwOycgLiAkbW9kLT5sYW5nKCd0aXRsZV9jYXRlZ29yeV9yZWN1cnNlX2l0ZW1zX2FsbCcpOyANCiAgICAkcmV0IC49ICc8L3RkPic7IA0KICAgICRyZXQgLj0gJzwvdHI+JzsgDQogICAgJHJldCAuPSAnPHRyPic7IA0KICAgICRyZXQgLj0gJzx0ZD4nOw0KICAgICRyZXQgLj0gJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icmVjdXJzZSIgdmFsdWU9Iml0ZW1zX29uZSIgJzsNCiAgICAkcmV0IC49ICggKCRtb2RlID09ICdpdGVtc19vbmUnKSA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJyk7DQogICAgJHJldCAuPSAnLz4mbmJzcDsnIC4gJG1vZC0+bGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9pdGVtc19vbmUnKSAuICc8L3RkPjwvdHI+JzsNCiAgICAkcmV0IC49ICc8dHI+PHRkPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icmVjdXJzZSIgdmFsdWU9ImNhdGVnb3JpZXNfYWxsIiAnOw0KICAgICRyZXQgLj0gKCAoICRtb2RlID09ICdjYXRlZ29yaWVzX2FsbCcgKSA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJyApOw0KICAgICRyZXQgLj0gJy8+Jm5ic3A7Jy4kbW9kLT5sYW5nKCd0aXRsZV9jYXRlZ29yeV9yZWN1cnNlX2NhdGVnb3JpZXNfYWxsJykgLiAnPC90ZD48L3RyPic7DQogICAgJHJldCAuPSAnPHRyPjx0ZD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InJlY3Vyc2UiIHZhbHVlPSJjYXRlZ29yaWVzX29uZSIgJzsNCiAgICAkcmV0IC49ICggKCRtb2RlID09ICdjYXRlZ29yaWVzX29uZScpID8gJ2NoZWNrZWQ9ImNoZWNrZWQiJyA6JycgKTsNCiAgICAkcmV0IC49ICcvPiZuYnNwOycuJG1vZC0+bGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9jYXRlZ29yaWVzX29uZScpIC4gJzwvdGQ+PC90cj4nOw0KICAgICRyZXQgLj0gJzx0cj48dGQ+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJyZWN1cnNlIiB2YWx1ZT0ibWl4ZWRfYWxsIiAnOw0KICAgICRyZXQgLj0gKCAoJG1vZGUgPT0gJ21peGVkX2FsbCcpID8gJ2NoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnKTsNCiAgICAkcmV0IC49ICcvPiZuYnNwOycuJG1vZC0+bGFuZygndGl0bGVfY2F0ZWdvcnlfcmVjdXJzZV9taXhlZF9hbGwnKS4nPC90ZD48L3RyPic7DQogICAgJHJldCAuPSAnPHRyPjx0ZD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InJlY3Vyc2UiIHZhbHVlPSJtaXhlZF9vbmUiICc7DQogICAgJHJldCAuPSAoICgkbW9kZSA9PSAnbWl4ZWRfb25lJykgPyAnY2hlY2tlZD0iY2hlY2tlZCInIDogJycgKTsNCiAgICAkcmV0IC49ICcvPiZuYnNwOycgLiAkbW9kLT5sYW5nKCd0aXRsZV9jYXRlZ29yeV9yZWN1cnNlX21peGVkX29uZScpIC4gJzwvdGQ+PC90cj48L3RhYmxlPic7DQogICAgJHJldCAuPSAnPC9maWVsZHNldD4nOw0KICAgIA0KICAgIHJldHVybiAkcmV0Ow0KICB9DQogIA0KICAjIyMgY29udmVuaWVuY2UgbWV0aG9kcyAtIHVwZGF0ZSBtb2R1bGUgIyMjDQogIA0KICAvKioNCiAgKiBBIGZldyBtZXRob2RzIHRvIGNsZWFuIHVwIGEgYml0IHRoZSBDYXRhbG9nZXIgdXBncmFkZSBtZXRob2QuLi4uDQogICogQGF1dGhvciBKbyBNb3JnDQogICogQHNpbmNlIENhdGFsb2dlciAxLjEyDQogICovDQogIA0KICBzdGF0aWMgZnVuY3Rpb24gVXBkYXRlMDU2KCkNCiAgew0KICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7DQogICAgDQogICAgJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zX2RiX3ByZWZpeCgpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICJtb2R1bGVfY2F0YWxvZ19hdHRyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzX3RleHRhcmVhIEkiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgIA0KICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCiAgICANCiAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJw0KICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAgICAgLiAnbW9kdWxlX2NhdGFsb2dfYXR0ciAoaWQsdHlwZV9pZCxpc190ZXh0YXJlYSxhdHRyaWJ1dGUpIFZBTFVFUyAoPyw/LD8sPyknOw0KICAgIA0KICAgICRuZXdfaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOw0KICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJG5ld19pZCwgMSwgMSwgJ25vdGVzJykpOw0KDQogICAgJG5ld19pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOw0KICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJG5ld19pZCwgMiwgMSwgJ25vdGVzJykpOw0KDQogICAgJG5ld19pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOw0KICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJG5ld19pZCwgMywgMSwgJ25vdGVzJykpOyANCiAgfQ0KICANCiAgc3RhdGljIGZ1bmN0aW9uIHJlbmRlcl9hZG1pbl9uYXYoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQ0KICB7DQogICAgJGNvbmZpZyA9IHNlbGY6OiRfY29uZmlnOw0KICAgICR0aGVtZSA9IGNtc191dGlsczo6Z2V0X3RoZW1lX29iamVjdCgpOw0KICAgIA0KICAgICRsaW5rX2FfaWNvbiA9ICR0aGlzLT5DcmVhdGVMaW5rKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdGFkbWluJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXR1cm5pZCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZS0+RGlzcGxheUltYWdlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ljb25zL3RvcGZpbGVzL3RlbXBsYXRlLmdpZicsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkxhbmcoJ2xpc3R0ZW1wbCcpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLCAnJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtaWNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICANCiAgICAkbGlua19hID0gJHRoaXMtPkNyZWF0ZUxpbmsoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdGFkbWluJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnbGlzdHRlbXBsJyksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICRsaW5rX2JfaWNvbiA9ICR0aGlzLT5DcmVhdGVMaW5rKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRtaW5hdHRycycsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV0dXJuaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhlbWUtPkRpc3BsYXlJbWFnZSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpY29ucy90b3BmaWxlcy9pbWFnZXMuZ2lmJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnbWFuYWdlYXR0cnMnKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywgJycsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbWljb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgICRsaW5rX2IgPSAkdGhpcy0+Q3JlYXRlTGluaygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZG1pbmF0dHJzJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJldHVybmlkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+TGFuZygnbWFuYWdlYXR0cnMnKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgJGxpbmtfY19pY29uID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZ2xvYmFsb3BzJywgJHJldHVybmlkLCAnPGltZyBjbGFzcz0ic3lzdGVtaWNvbiIgYWx0PSInLiR0aGlzLT5MYW5nKCdnbG9iYWxvcHMnKS4nIiB0aXRsZT0iJy4kdGhpcy0+TGFuZygnZ2xvYmFsb3BzJykuJyIgc3JjPSInLiRjb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL0NhdGFsb2dlci9pbWFnZXMvZ2xvYmFsLmdpZiIgLz4nKTsNCiAgICAkbGlua19jID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZ2xvYmFsb3BzJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnZ2xvYmFsb3BzJyksIGFycmF5KCkgKS4nIDogJy4kdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZG1pbnByZWZzJywgJHJldHVybmlkLCAkdGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvdG9wZmlsZXMvc2l0ZXByZWZzLmdpZicsICR0aGlzLT5MYW5nKCdtYW5hZ2VwcmVmcycpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCkgKS4kdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZG1pbnByZWZzJywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnbWFuYWdlcHJlZnMnKSwgYXJyYXkoKSApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAkbmF2ID0gJGxpbmtfYV9pY29uIC4gJGxpbmtfYSAuICcgOiAnIC4gJGxpbmtfYl9pY29uIC4gJGxpbmtfYiAuICcgOiAnICAuICRsaW5rX2NfaWNvbiAuICRsaW5rX2M7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIHNlbGY6OiRfc21hcnR5LT5hc3NpZ24oJ2lubmVybmF2JywgJG5hdik7DQogIH0NCg0KICAvKioNCiAgKiBBIGZldyBtZXRob2RzIHRvIGNsZWFuIHVwIGEgYml0IHRoZSBDYXRhbG9nZXIgdXBncmFkZSBtZXRob2QuLi4uDQogICogRU5EDQogICovDQogIA0KfQ0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.CatalogItem.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IENhdGFsb2dlciAtIGJ1aWxkIGEgY2F0YWxvZyBvciBwb3J0Zm9saW8gb2Ygc3R1ZmYKIyBWZXJzaW9uOiAwLjEyCiMKIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEZlcm5hbmRvIE1vcmdhZG8gKEpvTW9yZykgam9tb3JnLm1vcmdAZ21haWwuY29tCiMgQ29weXJpZ2h0IChjKSAyMDA2LCBTYW11ZWwgR29sZHN0ZWluIDxzamdAY21zbW9kdWxlcy5jb20+CiMgRm9yIEluZm9ybWF0aW9uLCBTdXBwb3J0LCBCdWcgUmVwb3J0cywgZXRjLCBwbGVhc2UgdmlzaXQgdGhlCiMgQ01TIE1hZGUgU2ltcGxlIEZvcmdlIGF0IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpjbGFzcyBDYXRhbG9nSXRlbSBleHRlbmRzIENvbnRlbnQKewogIGNvbnN0IFRBQl9JVEVNX09QVElPTlMgID0gJ2NjX2NhdGFsb2dlcl9vcHRpb25zJzsKICBjb25zdCBUQUJfSVRFTV9JTUFHRVMgICA9ICdjY19jYXRhbG9nZXJfaW1hZ2VzJzsKICBjb25zdCBUQUJfSVRFTV9GSUxFUyAgICA9ICdjY19jYXRhbG9nZXJfZmlsZXMnOwogIHByaXZhdGUgJF9tb2Q7CiAgcHJpdmF0ZSAkYXR0cnM7CiAgcHJpdmF0ZSAkX2F0dHJfbGlzdCA9IGFycmF5KCk7CiAgcHJvdGVjdGVkICR2YWxpZGF0aW9uID0gRkFMU0U7CiAgIAogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICB7CiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CiAgICAkdGhpcy0+bUNhY2hhYmxlID0gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBNb2R1bGVOYW1lKCkKICB7CiAgICByZXR1cm4gJ0NhdGFsb2dlcic7CiAgfSAKCiAgZnVuY3Rpb24gSXNDb3B5YWJsZSgpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQogIAogIGZ1bmN0aW9uIElzRGVmYXVsdFBvc3NpYmxlKCkKICB7CiAgICByZXR1cm4gRkFMU0U7CiAgfSAgCgogIGZ1bmN0aW9uIEZyaWVuZGx5TmFtZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdpdGVtX3BhZ2UnKTsKICB9CiAgCiAgZnVuY3Rpb24gTGFuZygka2V5KQogIHsKICAgIHJldHVybiAkdGhpcy0+Z2V0X21vZCgpLT5MYW5nKCRrZXkpOwogIH0KICAgICAgICAKICBmdW5jdGlvbiBnZXRfbGFuZygka2V5KQogIHsKICAgIHJldHVybiAkdGhpcy0+Z2V0X21vZCgpLT5MYW5nKCRrZXkpOwogIH0KICAgIAogIGZ1bmN0aW9uIGdldF9tb2QoKQogIHsKICAgIGlmKCBpc19udWxsKCR0aGlzLT5fbW9kKSApCiAgICB7CiAgICAgICR0aGlzLT5fbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDYXRhbG9nZXInKTsKICAgIH0KICAgIHJldHVybiAkdGhpcy0+X21vZDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIEdldFRhYk5hbWVzKCkKICB7CiAgICAkbW9kID0gJHRoaXMtPmdldF9tb2QoKTsKICAgICRoYXNfaW1hZ2VzID0gKGJvb2wpJG1vZC0+R2V0UHJlZmVyZW5jZSgnaXRlbV9pbWFnZV9jb3VudCcsIDApOwogICAgJGhhc19maWxlcyA9IChib29sKSRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1fZmlsZV9jb3VudCcsIDApOyAKICAgIAogICAgJG91dCA9IHBhcmVudDo6R2V0VGFiTmFtZXMoKTsKICAgIAogICAgaWYoIGlzc2V0KCRvdXRbc2VsZjo6VEFCX0lURU1fT1BUSU9OU10pICkgCiAgICB7CiAgICAgICRvdXRbc2VsZjo6VEFCX0lURU1fT1BUSU9OU10gPSAkbW9kLT5sYW5nKCd0YWJfYWR2YW5jZWRfb3B0aW9ucycpOwogICAgfQogICAgCiAgICBpZiggaXNzZXQoJG91dFtzZWxmOjpUQUJfSVRFTV9JTUFHRVNdKSApCiAgICB7CiAgICAgIGlmKCRoYXNfaW1hZ2VzKQogICAgICB7CiAgICAgICAgJG91dFtzZWxmOjpUQUJfSVRFTV9JTUFHRVNdID0gJG1vZC0+bGFuZygndGFiX2ltYWdlcycpOwogICAgICB9CiAgICAgICBlbHNlCiAgICAgIHsKICAgICAgICB1bnNldCgkb3V0W3NlbGY6OlRBQl9JVEVNX0lNQUdFU10pOwogICAgICB9CiAgICB9CiAgICAKICAgIGlmKCAkb3V0W3NlbGY6OlRBQl9JVEVNX0ZJTEVTXSApCiAgICB7CiAgICAgIGlmKCRoYXNfZmlsZXMpCiAgICAgIHsKICAgICAgICAkb3V0W3NlbGY6OlRBQl9JVEVNX0ZJTEVTXSA9ICRtb2QtPmxhbmcoJ3RhYl9maWxlcycpOwogICAgICB9CiAgICAgICBlbHNlCiAgICAgIHsKICAgICAgICB1bnNldCgkb3V0W3NlbGY6OlRBQl9JVEVNX0ZJTEVTXSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJG91dDsKICB9CiAgCiAgZnVuY3Rpb24gSGFzQXR0cmlidXRlcygpCiAgewogICAgcmV0dXJuIGlzX2FycmF5KCR0aGlzLT5hdHRycykgJiYgKGNvdW50KCR0aGlzLT5hdHRycykgPiAwKTsKICB9CgogIGZ1bmN0aW9uIGdldFVzZXJBdHRyaWJ1dGVzKCkKICB7CiAgICBpZiggZW1wdHkoJHRoaXMtPmF0dHJzKSApIAogICAgewogICAgICAkdGhpcy0+YXR0cnMgPSBjYXRVc2VyRGVmQXR0cmlidXRlc09wczo6Z2V0VXNlckF0dHJpYnV0ZXMoJ2NhdGFsb2dfYXR0cnMnKTsKICAgICAgJHRoaXMtPl9hdHRyX2xpc3QgPSBhcnJheV9rZXlzKCR0aGlzLT5hdHRycyk7IAogICAgfSAKICB9CiAgCiAgZnVuY3Rpb24gZ2V0QXR0cnMoKQogIHsKICAgICR0aGlzLT5nZXRVc2VyQXR0cmlidXRlcygpOwogICAgcmV0dXJuICR0aGlzLT5hdHRyczsKICB9CiAgCiAgLy8gdG8gcmV2aXNpdC4uLiBjb3BpZWQgZnJvbSBmZXVfcHJvdGVjdGVkX3BhZ2UKICAvLyBpdHMganVzdCBhIGhhY2sgdG8gYXZvaWQgY2FjaGluZyBpc3N1ZXMuLi4gYnV0IG5vdCB0aGUgYmVzdAogIHB1YmxpYyBmdW5jdGlvbiBHZXRNb2RpZmllZERhdGUoKQogIHsKICAgIC8vIG9uIGZyb250ZW5kIHJlcXVlc3RzIHRoaXMgd2lsbCBmb3JjZSB0aGUgdGVtcGxhdGUgdG8gYmUgcmVjb21waWxlZAogICAgLy8gYW5kIHRoZXJlZm9yZSBldmFsdWF0aW9uIHRvIGJlIGRvbmUgZm9yIGVhY2ggcmVxdWVzdC4KICAgIGlmKCBjbXNtcygpLT5pc19mcm9udGVuZF9yZXF1ZXN0KCkgKSByZXR1cm4gdGltZSgpOwogICAgcmV0dXJuIHBhcmVudDo6R2V0TW9kaWZpZWREYXRlKCk7CiAgfQoKICBmdW5jdGlvbiBTZXRQcm9wZXJ0aWVzKCkKICB7CiAgICBwYXJlbnQ6OlNldFByb3BlcnRpZXMoKTsKICAgICR0aGlzLT5BZGRQcm9wZXJ0eSgnc3ViX3RlbXBsYXRlJywgICAgMCwgc2VsZjo6VEFCX0lURU1fT1BUSU9OUyk7CiAgICAkdGhpcy0+QWRkUHJvcGVydHkoJ2ltYWdlcycsICAgICAgICAgIDAsIHNlbGY6OlRBQl9JVEVNX0lNQUdFUyk7CiAgICAkdGhpcy0+QWRkUHJvcGVydHkoJ2ZpbGVzJywgICAgICAgICAgIDAsIHNlbGY6OlRBQl9JVEVNX0ZJTEVTKTsKICAgIAogICAgJHRoaXMtPmdldFVzZXJBdHRyaWJ1dGVzKCk7CiAgICAKICAgICNsZXRzIGFkZCB0aGUgZmllbGRzCiAgICBpZihpc19hcnJheSgkdGhpcy0+YXR0cnMpKQogICAgewogICAgICBmb3JlYWNoICgkdGhpcy0+YXR0cnMgYXMgJGsgPT4gJHRoaXNBdHRyKQogICAgICB7CiAgICAgICAgJHRoaXMtPkFkZFByb3BlcnR5KCR0aGlzQXR0ci0+YWxpYXMsIDExMCArICR0aGlzQXR0ci0+ZmllbGRfb3JkZXIsIHNlbGY6OlRBQl9NQUlOKTsKICAgICAgfQogICAgfSAgIAogIH0KICAKICBwcm90ZWN0ZWQgZnVuY3Rpb24gZGlzcGxheV9zaW5nbGVfZWxlbWVudCgkb25lLCAkYWRkaW5nID0gZmFsc2UpCiAgewogICAgJGdDbXMgPSBjbXNtcygpOwogICAgJG1vZCA9ICR0aGlzLT5nZXRfbW9kKCk7CiAgICAkc21hcnR5ID0gJGdDbXMtPkdldFNtYXJ0eSgpOwoKICAgIGlmKCBpbl9hcnJheSgkb25lLCAkdGhpcy0+X2F0dHJfbGlzdCkgKQogICAgeyAgICAgIAogICAgICByZXR1cm4gY2F0RmllbGRzOjpSZW5kZXJJbnB1dCggJHRoaXMtPmF0dHJzWyRvbmVdLCAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkdGhpcy0+YXR0cnNbJG9uZV0tPmF0dHIpICk7CiAgICB9ICAgICAKCiAgICBzd2l0Y2goJG9uZSkKICAgIHsKICAgICAgCiAgICBjYXNlICdzdWJfdGVtcGxhdGUnOgogICAgewogICAgICAkc3ViVGVtcGxhdGVzID0gY2F0VGVtcGxhdGVPcGVyYXRpb25zOjpHZXRUZW1wbGF0ZUxpc3RGcm9tSUQoMSk7CgogICAgICAkcmV0ID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBmb3I9ImluX3N1Yl90ZW1wbGF0ZSI+JyAKICAgICAgICAgICAgICAgICAgICAuICRtb2QtPmxhbmcoJ1N1YicpIAogICAgICAgICAgICAgICAgICAgIC4gJyAnCiAgICAgICAgICAgICAgICAgICAgLiBsYW5nKCd0ZW1wbGF0ZScpIAogICAgICAgICAgICAgICAgICAgIC4gJzo8L2xhYmVsPicsCiAgICAgICAgICAgICAgICAgICAgJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ViX3RlbXBsYXRlJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWJUZW1wbGF0ZXMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdzdWJfdGVtcGxhdGUnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICApOwogICAgICAgCiAgICAgICByZXR1cm4gJHJldDsKICAgIH0KICAgIGJyZWFrOwogICAgCiAgICBjYXNlICdpbWFnZXMnOgogICAgewogICAgICAKICAgICAgaWYgKCR0aGlzLT5tQWxpYXMgPT0gJycpCiAgICAgIHsKICAgICAgICAkcmV0ID0gYXJyYXkoJ25ldyBwYWdlIG1lc3NhZ2UgfCBJbWFnZXMnKTsgIAogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICRyZXQgPSBhcnJheSgnJywgQ2F0YWxvZ2VySGVscGVyOjpSZW5kZXJQYWdlSW1hZ2VVcExvYWRlcigkdGhpcy0+bUFsaWFzKSk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiAkcmV0OwogICAgfQogICAgYnJlYWs7CiAgICAgICAgCiAgICBjYXNlICdmaWxlcyc6CiAgICB7CiAgICAgIAogICAgICBpZiAoJHRoaXMtPm1BbGlhcyA9PSAnJykKICAgICAgewogICAgICAgICRyZXQgPSBhcnJheSgnbmV3IHBhZ2UgbWVzc2FnZSB8IEZpbGVzJyk7ICAKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkcmV0ID0gYXJyYXkoJycsIENhdGFsb2dlckhlbHBlcjo6UmVuZGVyUGFnZUZpbGVVcExvYWRlcigkdGhpcy0+bUFsaWFzKSk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiAkcmV0OwogICAgICAKICAgIH0KICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBwYXJlbnQ6OmRpc3BsYXlfc2luZ2xlX2VsZW1lbnQoJG9uZSwgJGFkZGluZyk7CiAgICB9CiAgfQoKCiAgZnVuY3Rpb24gVmFsaWRhdGVEYXRhKCkKICB7CiAgICAkdiA9IHBhcmVudDo6VmFsaWRhdGVEYXRhKCk7CgogICAgaWYgKCR2ICE9PSBGQUxTRSkKICAgIHsKICAgICAgcmV0dXJuICR2OwogICAgfQoKICAgIHJldHVybiAkdGhpcy0+dmFsaWRhdGlvbjsKICB9CiAKICBmdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoJG1zZykKICB7CiAgICAKICAgIGlmICghaXNfYXJyYXkoJHRoaXMtPnZhbGlkYXRpb24pKQogICAgewogICAgICAkdGhpcy0+dmFsaWRhdGlvbiA9IGFycmF5KCk7CiAgICB9CgogICAgYXJyYXlfcHVzaCgkdGhpcy0+dmFsaWRhdGlvbiwgJG1zZyk7CiAgfQoKICBmdW5jdGlvbiBGaWxsUGFyYW1zKCRwYXJhbXMsICRlZGl0aW5nID0gZmFsc2UpCiAgewogICAgaWYoICFpc3NldCgkcGFyYW1zKSApIHJldHVybjsKICAgIAogICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgJG1vZCA9ICR0aGlzLT5nZXRfbW9kKCk7ICAgIAoKICAgICR0aGlzLT52YWxpZGF0aW9uID0gRkFMU0U7CiAgICAKICAgICRwYXJhbWV0ZXJzID0gYXJyYXkoJ3N1Yl90ZW1wbGF0ZScpOwoKICAgIGZvcmVhY2goJHBhcmFtZXRlcnMgYXMgJG9uZXBhcmFtKQogICAgewogICAgICBpZiAoaXNzZXQoJHBhcmFtc1skb25lcGFyYW1dKSkKICAgICAgewogICAgICAgICR0aGlzLT5TZXRQcm9wZXJ0eVZhbHVlKCRvbmVwYXJhbSwgJHBhcmFtc1skb25lcGFyYW1dKTsKICAgICAgfQogICAgfQogICAgCiAgICAkdGhpcy0+Z2V0VXNlckF0dHJpYnV0ZXMoKTsKICAgIAogICAgZm9yZWFjaCAoJHRoaXMtPmF0dHJzIGFzICR0aGlzQXR0cikKICAgIHsKICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJHRoaXNBdHRyLT5zYWZlXSkpCiAgICAgIHsKICAgICAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkdGhpc0F0dHItPmF0dHIsICRwYXJhbXNbJHRoaXNBdHRyLT5zYWZlXSk7CiAgICAgIH0KICAgIH0gICAgIAogICAgICAKICAgICRtb2QgPSAkdGhpcy0+Z2V0X21vZCgpOwoKICAgIC8vIENvcHkgdGhlIGltYWdlIGZpbGVzLi4uCiAgICAkaW1nY291bnQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX2NvdW50JywgJzInKTsKICAgICRoZXJvc2l6ZSA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV9oZXJvJywgJzQwMCcpOwogICAgJHRodW1ic2l6ZSA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV90aHVtYm5haWwnLCAnNzAnKTsKICAgICRjYXRhbG9nc2l6ZSA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRhbG9nJywgJzEwMCcpOwogICAgJGNhdGVnb3J5c2l6ZSA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRlZ29yeScsICc3MCcpOwoKICAgIGZvciAoJGk9MTsgJGk8PSAkaW1nY291bnQ7ICRpKyspCiAgICB7CgogICAgICBpZiAoaXNzZXQoJF9GSUxFU1snaW1hZ2UnIC4gJGldWydzaXplJ10pICYmICRfRklMRVNbJ2ltYWdlJyAuICRpXVsnc2l6ZSddID4gMCkKICAgICAgewoKICAgICAgICBpZiAoISBwcmVnX21hdGNoKCcvXC5qcGckfFwuanBlZyQvaScsICRfRklMRVNbJ2ltYWdlJyAuICRpXVsnbmFtZSddKSkKICAgICAgICB7CiAgICAgICAgICAkdGhpcy0+dmFsaWRhdGlvbkVycm9yKCRtb2QtPkxhbmcoJ2JhZGltYWdlZm9ybWF0JywgJF9GSUxFU1snaW1hZ2UnIC4gJGldWyduYW1lJ10pKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICRzb3VyY2UgPSAkX0ZJTEVTWydpbWFnZScgLiAkaV1bJ3RtcF9uYW1lJ107CiAgICAgICAgICAKICAgICAgICAgICR0YXJnZXQgPSBjbXNfam9pbl9wYXRoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0RmlsZXNPcGVyYXRpb25zOjpnZXRBc3NldFBhdGgoJ3MnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1BbGlhcyAuICdfc3JjXycgLiAkaSAuICcuanBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgJGNyZXMgPSBjb3B5KCRzb3VyY2UsICR0YXJnZXQpOwoKICAgICAgICAgIGlmICghJGNyZXMpCiAgICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT52YWxpZGF0aW9uRXJyb3IoICRtb2QtPkxhbmcoJ2JhZGltYWdlJywgJF9GSUxFU1snaW1hZ2UnIC4gJGldWyduYW1lJ10pICk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJHRoaXNQYXJhbSA9PiAkdGhpc1BhcmFtVmFsKQogICAgewoKICAgICAgaWYgKHN1YnN0cigkdGhpc1BhcmFtLCAwLCA5KSA9PSAncm1faW1hZ2VfJykKICAgICAgewogICAgICAgICRpbWFnZVNwZWNQYXJ0cyA9IGV4cGxvZGUoJ18nLCAkdGhpc1BhcmFtKTsKICAgICAgICAkbW9kLT5wdXJnZUFsbEltYWdlKCRpbWFnZVNwZWNQYXJ0c1syXSwgJGltYWdlU3BlY1BhcnRzWzNdKTsKICAgICAgfQogICAgfQogICAgCiAgICAvLyBhbmQgdXBsb2FkZWQgZmlsZXMKICAgICRmaWxlY291bnQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ZpbGVfY291bnQnLCAwKTsKICAgICR0eXBlbGlzdCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1fZmlsZV90eXBlcycsICdwZGYsc3dmLGZsdixkb2Msb2R0LG9kcyx4bHMnKTsKICAgICR0eXBlcyA9IGV4cGxvZGUoJywnICwgJHR5cGVsaXN0KTsKCiAgICBpZiAoJGZpbGVjb3VudCA+IDApCiAgICB7CiAgICAgICRkaXJzcGVjID0gY21zX2pvaW5fcGF0aCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRGaWxlc09wZXJhdGlvbnM6OmdldEFzc2V0UGF0aCgnZicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5tQWxpYXMgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICBpZiAoIWlzX2RpcigkZGlyc3BlYykpCiAgICAgIHsKICAgICAgICBta2RpcigkZGlyc3BlYyk7CiAgICAgIH0KCiAgICAgIGZvciAoJGk9MDsgJGk8ICRmaWxlY291bnQ7ICRpKyspCiAgICAgIHsKCiAgICAgICAgaWYgKGlzc2V0KCRfRklMRVNbJ2ZpbGUnIC4gJGldWydzaXplJ10pICYmICRfRklMRVNbJ2ZpbGUnIC4gJGldWydzaXplJ10gPiAwKQogICAgICAgIHsKICAgICAgICAgICR0c3BlYyA9IHByZWdfcmVwbGFjZSgnL1teXHdcZFwuXC1fXSsvJywgJ18nLCAkX0ZJTEVTWydmaWxlJyAuICRpXVsnbmFtZSddKTsKICAgICAgICAgIC8vIGtlZXAgb3JpZ2luYWwgaW1hZ2UKICAgICAgICAgICRleHRlbnNpb24gPSBzdWJzdHIoJHRzcGVjLCBzdHJycG9zKCR0c3BlYywgJy4nKSArIDEpOwoKICAgICAgICAgIGlmICghZW1wdHkoJGV4dGVuc2lvbikgJiYgaW5fYXJyYXkoJGV4dGVuc2lvbiwgJHR5cGVzKSkKICAgICAgICAgIHsKICAgICAgICAgICAgJG1vZC0+QXVkaXQoMCwgJG1vZC0+TGFuZygnZnJpZW5kbHluYW1lJyksICRtb2QtPkxhbmcoJ3VwbG9hZGVkJywgYXJyYXkoJHRzcGVjLCAkdGhpcy0+bUFsaWFzKSkpOwogICAgICAgICAgICAKICAgICAgICAgICAgJHRhcmdldCA9IGNtc19qb2luX3BhdGgoJGRpcnNwZWMsICR0c3BlYyk7CiAgICAgICAgICAgICRjcmVzID0gY29weSgkX0ZJTEVTWydmaWxlJyAuICRpXVsndG1wX25hbWUnXSwgJHRhcmdldCk7CgogICAgICAgICAgICBpZiAoISRjcmVzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgJHRoaXMtPnZhbGlkYXRpb25FcnJvcigkbW9kLT5MYW5nKCdiYWRpbWFnZScsICRfRklMRVNbJ2ltYWdlJyAuICRpXVsnbmFtZSddKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgJG1vZC0+QXVkaXQoMCwgJG1vZC0+TGFuZygnZnJpZW5kbHluYW1lJyksICRtb2QtPkxhbmcoJ2JhZGZpbGUnLCAkdHNwZWMpKTsKICAgICAgICAgICAgJHRoaXMtPnZhbGlkYXRpb25FcnJvcigkbW9kLT5MYW5nKCdiYWRmaWxlJywgJHRzcGVjKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAkdGhpc1BhcmFtID0+ICR0aGlzUGFyYW1WYWwpCiAgICB7CgogICAgICBpZiAoc3Vic3RyKCR0aGlzUGFyYW0sIDAsIDgpID09ICdybV9maWxlXycpCiAgICAgIHsKICAgICAgICAkcFNwZWMgPSBwcmVnX3JlcGxhY2UoJy9cLlwufFwvLycsICcnLCAkdGhpc1BhcmFtVmFsKTsKCiAgICAgICAgJHNwZWMgPSBjbXNfam9pbl9wYXRoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25maWdbJ3VwbG9hZHNfcGF0aCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdEZpbGVzT3BlcmF0aW9uczo6Z2V0QXNzZXRQYXRoKCdmJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm1BbGlhcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcFNwZWMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB1bmxpbmsoJHNwZWMpOwogICAgICB9CiAgICB9CgogICAgcGFyZW50OjpGaWxsUGFyYW1zKCRwYXJhbXMpOwogIH0KCiAgZnVuY3Rpb24gUG9wdWxhdGVQYXJhbXMoJiRwYXJhbXMpCiAgewogICAgJHBhcmFtZXRlcnMgPSBhcnJheSgnc3ViX3RlbXBsYXRlJyk7CgogICAgZm9yZWFjaCAoJHBhcmFtZXRlcnMgYXMgJG9uZXBhcmFtKQogICAgewogICAgICAkdG1wID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJG9uZXBhcmFtKTsKCiAgICAgIGlmIChpc3NldCgkdG1wKSAmJiAhIGVtcHR5KCR0bXApKQogICAgICB7CiAgICAgICAgJHBhcmFtc1skb25lcGFyYW1dID0gJHRtcDsKICAgICAgfQogICAgfQogICAgCiAgICAkdGhpcy0+Z2V0VXNlckF0dHJpYnV0ZXMoKTsKICAgICRzYWZlYXR0cmxpc3QgPSBhcnJheSgpOwoKICAgIGZvcmVhY2ggKCR0aGlzLT5hdHRycyBhcyAkdGhpc0F0dHIpCiAgICB7CiAgICAgICR0bXAgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkdGhpc0F0dHItPmF0dHIpOwoKICAgICAgaWYgKGlzc2V0KCR0bXApICYmICR0bXAhPScnKQogICAgICB7CiAgICAgICAgJHBhcmFtc1skdGhpc0F0dHItPnNhZmVdID0gJHRtcDsKCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzQXR0ci0+YWxpYXMpICYmICR0aGlzQXR0ci0+YWxpYXMhPScnKQogICAgICAgIHsKICAgICAgICAgICRwYXJhbXNbJHRoaXNBdHRyLT5hbGlhc10gPSAkdG1wOwogICAgICAgIH0KCiAgICAgICAgJHRoaXNTYWZlQXR0ciA9IGFycmF5KCk7CiAgICAgICAgJHRoaXNTYWZlQXR0clsnbmFtZSddID0gdWNmaXJzdCgkdGhpc0F0dHItPmF0dHIpOwogICAgICAgICR0aGlzU2FmZUF0dHJbJ2tleSddID0gJ3skJyAuICR0aGlzQXR0ci0+c2FmZSAuICd9JzsKCiAgICAgICAgaWYgKCR0aGlzQXR0ci0+YWxpYXMgIT0gJycpCiAgICAgICAgewogICAgICAgICAgJHRoaXNTYWZlQXR0clsnYWxpYXNrZXknXSA9ICd7JCcgLiAkdGhpc0F0dHItPmFsaWFzIC4gJ30nOwogICAgICAgIH0KCiAgICAgICAgYXJyYXlfcHVzaCgkc2FmZWF0dHJsaXN0LCAkdGhpc1NhZmVBdHRyKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkcGFyYW1zWyR0aGlzQXR0ci0+c2FmZV0gPSAnJzsKICAgICAgICAkcGFyYW1zWyR0aGlzQXR0ci0+YWxpYXNdID0gJyc7CiAgICAgIH0KICAgIH0KICAgICRwYXJhbXNbJ2F0dHJsaXN0J10gPSAkc2FmZWF0dHJsaXN0OwogIH0gCiAgCiAgZnVuY3Rpb24gU2hvdygkcGFyYW0gPSAnJykKICB7CiAgICAkcGFyYW0gPSB0cmltKCRwYXJhbSk7CiAgICAKICAgIGlmKCAhJHBhcmFtICkgJHBhcmFtID0gJ2NvbnRlbnRfZW4nOwogICAgJHBhcmFtID0gc3RyX3JlcGxhY2UoJyAnLCdfJywkcGFyYW0pOyAKICAgIAogICAgaWYgKCRwYXJhbSA9PSAnY29udGVudF9lbicpCiAgICB7CiAgICAgICR0aGlzLT5Qb3B1bGF0ZVBhcmFtcygkcGFyYW1zKTsKICAgICAgJHBhcmFtc1snY29udGVudF9lbiddID0gcGFyZW50OjpTaG93KCRwYXJhbSk7CiAgICAgIHJldHVybiAkdGhpcy0+UmVuZGVyQ29udGVudCgkcGFyYW1zKTsgCiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHJldHVybiBwYXJlbnQ6OlNob3coJHBhcmFtKTsKICAgIH0KICB9CiAKICBwcm90ZWN0ZWQgZnVuY3Rpb24gVXBkYXRlKCkKICB7CiAgICBwYXJlbnQ6OlVwZGF0ZSgpOwogICAgCiAgICBpZiggKCR0aGlzLT5tT2xkQWxpYXMgIT0gJHRoaXMtPkFsaWFzKCkpICYmICR0aGlzLT5tT2xkQWxpYXMgJiYgJHRoaXMtPkFsaWFzKCkgKQogICAgewogICAgICBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NhdGFsb2dlcicpLT5yZW5hbWVJbWFnZXMoJHRoaXMtPm1PbGRBbGlhcywkdGhpcy0+QWxpYXMoKSk7CiAgICB9CiAgICAKICB9CgogIHByb3RlY3RlZCBmdW5jdGlvbiBJbnNlcnQoKQogIHsKICAgIHBhcmVudDo6SW5zZXJ0KCk7CiAgICAKICAgIGlmKCAoJHRoaXMtPm1PbGRBbGlhcyAhPSAkdGhpcy0+QWxpYXMoKSkgJiYgJHRoaXMtPm1PbGRBbGlhcyAmJiAkdGhpcy0+QWxpYXMoKSApCiAgICB7CiAgICAgIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ2F0YWxvZ2VyJyktPnJlbmFtZUltYWdlcygkdGhpcy0+bU9sZEFsaWFzLCR0aGlzLT5BbGlhcygpKTsKICAgIH0KICAgIAogIH0KICAKICBmdW5jdGlvbiBBZGRQcm9wZXJ0eSgkbmFtZSwgJHByaW9yaXR5LCAkdGFiID0gc2VsZjo6VEFCX01BSU4sICRyZXF1aXJlZCA9IEZBTFNFKQogIHsKICAgIHBhcmVudDo6QWRkUHJvcGVydHkoJG5hbWUsICRwcmlvcml0eSwgJHRhYiwgJHJlcXVpcmVkKTsKICB9CiAKICBmdW5jdGlvbiBVcGRhdGVQcm9wZXJ0eU5hbWUoJHByb3BOYW1lLCAkcHJvcE5ld05hbWUpCiAgewogICAgJHRlbXBWYWx1ZSA9ICcnOwogICAgCiAgICBpZiAoJHRoaXMtPmlzX2tub3duX3Byb3BlcnR5KCRwcm9wTmFtZSkpCiAgICB7CiAgICAgICR0ZW1wVmFsdWUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgkcHJvcE5hbWUpOwogICAgICAkdGhpcy0+UmVtb3ZlUHJvcGVydHkoJHByb3BOYW1lLGZhbHNlKTsgICAKICAgIH0KICAgIAogICAgJHRoaXMtPkFkZEV4dHJhUHJvcGVydHkoJHByb3BOYW1lKTsKICAgICR0aGlzLT5TZXRQcm9wZXJ0eVZhbHVlKCRwcm9wTmV3TmFtZSwgJHRlbXBWYWx1ZSk7ICAKICB9ICAgCiAKICBmdW5jdGlvbiBEZWxldGVQcm9wZXJ0eSgkcHJvcE5hbWUpCiAgewogICAgJHRoaXMtPlJlbW92ZVByb3BlcnR5KCRwcm9wTmFtZSxmYWxzZSk7ICAgICAgIAogIH0KCiAgLyoqCiAgKiAjCiAgKiAKICAqIEBwYXJhbSBtaXhlZCAkcGFyYW1zCiAgKi8KICBmdW5jdGlvbiBSZW5kZXJDb250ZW50KCRwYXJhbXMpCiAgewogICAgJG1vZCA9ICR0aGlzLT5nZXRfbW9kKCk7CiAgICAvLyRzbWFydHkgPSAkbW9kLT5HZXRBY3Rpb25UZW1wbGF0ZU9iamVjdCgpOwogICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgCiAgICBpZiggZW1wdHkoJHNtYXJ0eSkgKSAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAkY250T2JqID0gbmV3IHN0ZENsYXNzKCk7CiAgICAKICAgICRzaG93TWlzc2luZyA9ICdfJyAuICRtb2QtPkdldFByZWZlcmVuY2UoJ3Nob3dfbWlzc2luZycsICcxJyk7CgogICAgJGltYWdlQXJyYXkgICAgID0gYXJyYXkoKTsKICAgICRmaWxlQXJyYXkgICAgICA9IGFycmF5KCk7CiAgICAkZmlsZVVybEFycmF5ICAgPSBhcnJheSgpOwogICAgJGZpbGVUeXBlQXJyYXkgID0gYXJyYXkoKTsKICAgICRzcmNJbWdBcnJheSAgICA9IGFycmF5KCk7CiAgICAkdGh1bWJBcnJheSAgICAgPSBhcnJheSgpOwogICAgCiAgICAkaW1nY291bnQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX2NvdW50JywgMik7CiAgICAkZmlsZWNvdW50ID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnaXRlbV9maWxlX2NvdW50JywgMCk7CiAgICAkZnVsbFNpemUgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX3NpemVfaGVybycsICc0MDAnKTsKICAgICR0aHVtYlNpemUgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX3NpemVfdGh1bWJuYWlsJywgJzcwJyk7CiAgICAkcHJ1bmVsaXN0ID0gKCRtb2QtPkdldFByZWZlcmVuY2UoJ3Nob3dfZXh0YW50JywgJzEnKSA9PSAnMScpOwogICAgCiAgICAkYWN0dWFsZmlsZWNvdW50ID0gMDsKCiAgICBmb3JlYWNoICgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRrZXksICRwYXJhbXNbJGtleV0pOwogICAgICAkY250T2JqLT4ka2V5ID0gJHBhcmFtc1ska2V5XTsKICAgIH0KICAgIAogICAgJGNudE9iai0+ZGVmYXVsdF9jb250ZW50ID0gJHBhcmFtc1snY29udGVudF9lbiddOwogICAgJHNtYXJ0eS0+YXNzaWduKCdtYWluX2NvbnRlbnQnLCAkcGFyYW1zWydjb250ZW50X2VuJ10pOwogICAgCiAgICBpZiAoJGltZ2NvdW50ID4gMCkKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCdJbWFnZUNvdW50JywgJGltZ2NvdW50KTsgIyBuZXcgaW4gMS4xMiAoSk0pCiAgICAgICRjbnRPYmotPkltYWdlQ291bnQgPSAkaW1nY291bnQ7ICAgICAgICAgICMgbmV3IGluIDEuMTIgKEpNKQoKICAgICAgZm9yICgkaSA9IDEgOyAkaSA8PSAkaW1nY291bnQgOyAkaSsrKQogICAgICB7CiAgICAgICAgCiAgICAgICAgaWYgKCEgJHBydW5lbGlzdCB8fCBjYXRGaWxlc09wZXJhdGlvbnM6OnNyY0V4aXN0cygkdGhpcy0+bUFsaWFzLCAkaSkpCiAgICAgICAgewogICAgICAgICAgJHByb3B2YWx1ZSA9IGNhdEZpbGVzT3BlcmF0aW9uczo6aW1hZ2VTcGVjKCR0aGlzLT5tQWxpYXMsICdmJywgJGksICRmdWxsU2l6ZSk7CiAgICAgICAgICAkcHJvcE5hbWUgPSAnaW1hZ2VfJyAuICRpIC4gJ191cmwnOwogICAgICAgICAgJGNudE9iai0+JHByb3BOYW1lID0gJHByb3B2YWx1ZTsKICAgICAgICAgICRzbWFydHktPmFzc2lnbigkcHJvcE5hbWUsICRwcm9wdmFsdWUpOwogICAgICAgICAgYXJyYXlfcHVzaCgkaW1hZ2VBcnJheSwgJHByb3B2YWx1ZSk7CgogICAgICAgICAgJHByb3B2YWx1ZSA9IGNhdEZpbGVzT3BlcmF0aW9uczo6aW1hZ2VTcGVjKCR0aGlzLT5tQWxpYXMsICd0JywgJGksICR0aHVtYlNpemUpOwogICAgICAgICAgJHByb3BOYW1lID0gJ2ltYWdlX3RodW1iXycgLiAkaSAuICdfdXJsJzsKICAgICAgICAgICRjbnRPYmotPiRwcm9wTmFtZSA9ICRwcm9wdmFsdWU7CiAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oJHByb3BOYW1lLCAkcHJvcHZhbHVlKTsKICAgICAgICAgIGFycmF5X3B1c2goJHRodW1iQXJyYXksICRwcm9wdmFsdWUpOwogICAgICAgICAgCiAgICAgICAgICAkcHJvcHZhbHVlID0gY2F0RmlsZXNPcGVyYXRpb25zOjpzcmNJbWFnZVNwZWMoJHRoaXMtPm1BbGlhcywgJGkpOwogICAgICAgICAgJHByb3BOYW1lID0gJ3NyY19pbWFnZV8nIC4gJGkgLiAnX3VybCc7CiAgICAgICAgICAkY250T2JqLT4kcHJvcE5hbWUgPSAkcHJvcHZhbHVlOwogICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCRwcm9wTmFtZSwgJHByb3B2YWx1ZSk7CiAgICAgICAgICBhcnJheV9wdXNoKCRzcmNJbWdBcnJheSwgJHByb3B2YWx1ZSk7ICAgICAgICAgIAogICAgICAgIH0KICAgICAgICAgICAgICAgICAgCiAgICAgIH0KICAgICAgICAgIAogICAgfQogICAgCiAgICBpZiAoJGZpbGVjb3VudCA+IDApCiAgICB7CiAgICAgIGxpc3QoJGZpbGVBcnJheSwgJGZpbGVUeXBlQXJyYXkpID0gY2F0RmlsZXNPcGVyYXRpb25zOjpnZXRGaWxlcygkdGhpcy0+bUFsaWFzKTsKCiAgICAgIGZvcmVhY2ggKCRmaWxlQXJyYXkgYXMgJGkgPT4gJHYpCiAgICAgIHsgICAKICAgICAgICAkcHJvcHZhbHVlID0gJGNvbmZpZ1sndXBsb2Fkc191cmwnXQogICAgICAgICAgICAgICAgICAgICAuICcvJyAKICAgICAgICAgICAgICAgICAgICAgLiBjYXRGaWxlc09wZXJhdGlvbnM6OmdldEFzc2V0UGF0aCgnZicpCiAgICAgICAgICAgICAgICAgICAgIC4gJy8nCiAgICAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPm1BbGlhcwogICAgICAgICAgICAgICAgICAgICAuICcvJwogICAgICAgICAgICAgICAgICAgICAuICRmaWxlQXJyYXlbJGldOwoKICAgICAgICAkcHJvcE5hbWUgPSAnZmlsZV8nIC4gKCRpICsgMSkgLiAnX3VybCc7CiAgICAgICAgJGNudE9iai0+JHByb3BOYW1lID0gJHByb3B2YWx1ZTsKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJHByb3BOYW1lLCAkcHJvcHZhbHVlKTsKICAgICAgICBhcnJheV9wdXNoKCRmaWxlVXJsQXJyYXksICRwcm9wdmFsdWUpOwogICAgICAgIAogICAgICAgICRwcm9wdmFsdWUgPSAkZmlsZUFycmF5WyRpXTsKICAgICAgICAkcHJvcE5hbWUgPSAnZmlsZV8nIC4gKCRpICsgMSkgLiAnX25hbWUnOwogICAgICAgICRjbnRPYmotPiRwcm9wTmFtZSA9ICRwcm9wdmFsdWU7ICAgICAgICAgICAKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJHByb3BOYW1lLCAkcHJvcHZhbHVlKTsgCiAgICAgICAgICAgICAgIAogICAgICAgICRwcm9wdmFsdWUgPSAkZmlsZVR5cGVBcnJheVskaV07CiAgICAgICAgJHByb3BOYW1lID0gJ2ZpbGVfJyAuICgkaSArIDEpIC4gJ19leHQnOwogICAgICAgICRjbnRPYmotPiRwcm9wTmFtZSA9ICRwcm9wdmFsdWU7ICAgICAgICAgICAKICAgICAgICAkc21hcnR5LT5hc3NpZ24oJHByb3BOYW1lLCAkcHJvcHZhbHVlKTsKCiAgICAgICAgJGFjdHVhbGZpbGVjb3VudCArPSAxOwogICAgICB9CiAgICB9ICAKICAgIAogICAgJGNudE9iai0+YXR0cmxpc3QgPSAkcGFyYW1zWydhdHRybGlzdCddOwogICAgJGNudE9iai0+aW1hZ2VfdXJsX2FycmF5ID0gJGltYWdlQXJyYXk7CiAgICAkY250T2JqLT5maWxlX3VybF9hcnJheSA9ICRmaWxlVXJsQXJyYXk7CiAgICAkY250T2JqLT5maWxlX25hbWVfYXJyYXkgPSAkZmlsZUFycmF5OwogICAgJGNudE9iai0+ZmlsZV9leHRfYXJyYXkgPSAkZmlsZVR5cGVBcnJheTsKICAgICRjbnRPYmotPmZpbGVfY291bnQgPSAkZmlsZWNvdW50OwogICAgJGNudE9iai0+aW1hZ2VfdGh1bWJfdXJsX2FycmF5ID0gJHRodW1iQXJyYXk7CiAgICAkY250T2JqLT5zcmNfaW1hZ2VfdXJsX2FycmF5ID0gJHNyY0ltZ0FycmF5OwogICAgICAgIAogICAgJHNtYXJ0eS0+YXNzaWduKCdhdHRybGlzdCcsICRwYXJhbXNbJ2F0dHJsaXN0J10pOwogICAgJHNtYXJ0eS0+YXNzaWduKCdpbWFnZV91cmxfYXJyYXknLCAkaW1hZ2VBcnJheSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2ZpbGVfdXJsX2FycmF5JywgJGZpbGVVcmxBcnJheSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2ZpbGVfbmFtZV9hcnJheScsICRmaWxlQXJyYXkpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdmaWxlX2V4dF9hcnJheScsICRmaWxlVHlwZUFycmF5KTsKICAgICRzbWFydHktPmFzc2lnbignZmlsZV9jb3VudCcsICRmaWxlY291bnQpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdpbWFnZV90aHVtYl91cmxfYXJyYXknLCAkdGh1bWJBcnJheSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ3NyY19pbWFnZV91cmxfYXJyYXknLCAkc3JjSW1nQXJyYXkpOwogICAgJG1vZC0+c21hcnR5QmFzaWNzKCk7CiAgICAKCiAgICAkc21hcnR5LT5hc3NpZ24oJ2N0bGcnLCAkY250T2JqKTsKCiAgICAkY2FjaGVfaWQgPSAnX2l0bV8nIC4gbWQ1KCBzZXJpYWxpemUoJHBhcmFtcykgKTsKICAgICRjb21waWxlX2lkID0gJ0NhdGFsb2dlcl8nIC4gJHRoaXMtPm1JZDsKCiAgICByZXR1cm4gJHNtYXJ0eS0+ZmV0Y2goCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kLT5HZXREYXRhYmFzZVJlc291cmNlKCdjYXRhbG9nXycgLiAkcGFyYW1zWydzdWJfdGVtcGxhdGUnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2FjaGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGlsZV9pZAogICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgfQoKfQo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.CatalogPrintable.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogQ2F0YWxvZ2VyIC0gYnVpbGQgYSBjYXRhbG9nIG9yIHBvcnRmb2xpbyBvZiBzdHVmZg0KIyBWZXJzaW9uOiAwLjEyDQojDQojIENvcHlyaWdodCAoYykgMjAxMiwgRmVybmFuZG8gTW9yZ2FkbyAoSm9Nb3JnKSBqb21vcmcubW9yZ0BnbWFpbC5jb20NCiMgQ29weXJpZ2h0IChjKSAyMDA2LCBTYW11ZWwgR29sZHN0ZWluIDxzamdAY21zbW9kdWxlcy5jb20+DQojIEZvciBJbmZvcm1hdGlvbiwgU3VwcG9ydCwgQnVnIFJlcG9ydHMsIGV0YywgcGxlYXNlIHZpc2l0IHRoZQ0KIyBDTVMgTWFkZSBTaW1wbGUgRm9yZ2UgYXQgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZw0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA2IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpjbGFzcyBDYXRhbG9nUHJpbnRhYmxlIGV4dGVuZHMgQ29udGVudA0Kew0KICBjb25zdCBUQUJfUFJJTlRfT1BUSU9OUyAgICAgPSAnY2NfY2F0YWxvZ2VyX29wdGlvbnMnOw0KICBjb25zdCBUQUJfUFJJTlRfRklFTERTTElTVCAgPSAnY2NfY2F0YWxvZ2VyX2ZpZWxkc2xpc3QnOw0KICANCiAgcHJpdmF0ZSAkX21vZDsNCiAgcHJpdmF0ZSAkYXR0cnM7DQogIHByaXZhdGUgJF9hdHRyX2xpc3QgPSBhcnJheSgpOw0KICBwcm90ZWN0ZWQgJHZhbGlkYXRpb24gPSBGQUxTRTsNCiAgICANCiAgDQogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgew0KICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsNCiAgICAkdGhpcy0+bUNhY2hhYmxlID0gZmFsc2U7DQogIH0NCiAgDQogIGZ1bmN0aW9uIE1vZHVsZU5hbWUoKQ0KICB7DQogICAgcmV0dXJuICdDYXRhbG9nZXInOw0KICB9IA0KDQogIGZ1bmN0aW9uIElzQ29weWFibGUoKQ0KICB7DQogICAgcmV0dXJuIHRydWU7DQogIH0NCiAgDQogIGZ1bmN0aW9uIElzRGVmYXVsdFBvc3NpYmxlKCkNCiAgew0KICAgIHJldHVybiBGQUxTRTsNCiAgfSANCiAgDQogIGZ1bmN0aW9uIEZyaWVuZGx5TmFtZSgpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NhdGFsb2dfcHJpbnRhYmxlJyk7DQogIH0NCiAgDQogIGZ1bmN0aW9uIExhbmcoJGtleSkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+Z2V0X21vZCgpLT5MYW5nKCRrZXkpOw0KICB9DQogICAgICAgIA0KICBmdW5jdGlvbiBnZXRfbGFuZygka2V5KQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5nZXRfbW9kKCktPkxhbmcoJGtleSk7DQogIH0NCiAgICANCiAgZnVuY3Rpb24gZ2V0X21vZCgpDQogIHsNCiAgICBpZiggaXNfbnVsbCgkdGhpcy0+X21vZCkgKQ0KICAgIHsNCiAgICAgICR0aGlzLT5fbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDYXRhbG9nZXInKTsNCiAgICB9DQogICAgcmV0dXJuICR0aGlzLT5fbW9kOw0KICB9DQoNCiAgcHVibGljIGZ1bmN0aW9uIEdldFRhYk5hbWVzKCkNCiAgew0KICAgICRtb2QgPSAkdGhpcy0+Z2V0X21vZCgpOw0KICAgICRvdXQgPSBwYXJlbnQ6OkdldFRhYk5hbWVzKCk7DQogICAgDQogICAgaWYoIGlzc2V0KCRvdXRbc2VsZjo6VEFCX1BSSU5UX09QVElPTlNdKSApIA0KICAgIHsNCiAgICAgICRvdXRbc2VsZjo6VEFCX1BSSU5UX09QVElPTlNdID0gJG1vZC0+bGFuZygndGFiX2FkdmFuY2VkX29wdGlvbnMnKTsNCiAgICB9DQogICAgICAgIA0KICAgIGlmKCBpc3NldCgkb3V0W3NlbGY6OlRBQl9QUklOVF9GSUVMRFNMSVNUXSkgKSANCiAgICB7DQogICAgICAkb3V0W3NlbGY6OlRBQl9QUklOVF9GSUVMRFNMSVNUXSA9ICRtb2QtPmxhbmcoJ3RhYl9maWVsZHNfbGlzdCcpOw0KICAgIH0NCg0KICAgIHJldHVybiAkb3V0Ow0KICB9DQogIA0KICAgZnVuY3Rpb24gSGFzQXR0cmlidXRlcygpDQogIHsNCiAgICByZXR1cm4gaXNfYXJyYXkoJHRoaXMtPmF0dHJzKSAmJiAoY291bnQoJHRoaXMtPmF0dHJzKSA+IDApOw0KICB9DQogIA0KICBmdW5jdGlvbiBnZXRBdHRycygpDQogIHsNCiAgICAkdGhpcy0+Z2V0VXNlckF0dHJpYnV0ZXMoKTsNCiAgICByZXR1cm4gJHRoaXMtPmF0dHJzOw0KICB9DQogIA0KICBmdW5jdGlvbiBnZXRVc2VyQXR0cmlidXRlcygpDQogIHsNCiAgICBpZiggZW1wdHkoJHRoaXMtPmF0dHJzKSApIA0KICAgIHsNCiAgICAgICR0aGlzLT5hdHRycyA9IGNhdFVzZXJEZWZBdHRyaWJ1dGVzT3BzOjpnZXRVc2VyQXR0cmlidXRlcygnY2F0YWxvZ19jYXRfYXR0cnMnKTsNCiAgICAgICR0aGlzLT5fYXR0cl9saXN0ID0gYXJyYXlfa2V5cygkdGhpcy0+YXR0cnMpOyANCiAgICB9IA0KICB9DQogIA0KICAvLyB0byByZXZpc2l0Li4uIGNvcGllZCBmcm9tIGZldV9wcm90ZWN0ZWRfcGFnZQ0KICAvLyBpdHMganVzdCBhIGhhY2sgdG8gYXZvaWQgY2FjaGluZyBpc3N1ZXMuLi4gYnV0IG5vdCB0aGUgYmVzdA0KICBwdWJsaWMgZnVuY3Rpb24gR2V0TW9kaWZpZWREYXRlKCkNCiAgew0KICAgIC8vIG9uIGZyb250ZW5kIHJlcXVlc3RzIHRoaXMgd2lsbCBmb3JjZSB0aGUgdGVtcGxhdGUgdG8gYmUgcmVjb21waWxlZA0KICAgIC8vIGFuZCB0aGVyZWZvcmUgZXZhbHVhdGlvbiB0byBiZSBkb25lIGZvciBlYWNoIHJlcXVlc3QuDQogICAgaWYoIGNtc21zKCktPmlzX2Zyb250ZW5kX3JlcXVlc3QoKSApIHJldHVybiB0aW1lKCk7DQogICAgcmV0dXJuIHBhcmVudDo6R2V0TW9kaWZpZWREYXRlKCk7DQogIH0NCiAgDQogIGZ1bmN0aW9uIFNldFByb3BlcnRpZXMoKQ0KICB7DQogICAgcGFyZW50OjpTZXRQcm9wZXJ0aWVzKCk7DQogICAgJHRoaXMtPkFkZFByb3BlcnR5KCdzdWJfdGVtcGxhdGUnLCAgICAwLCBzZWxmOjpUQUJfUFJJTlRfT1BUSU9OUyk7DQogICAgJHRoaXMtPkFkZFByb3BlcnR5KCdzb3J0X29yZGVyJywgICAgICAxLCBzZWxmOjpUQUJfUFJJTlRfT1BUSU9OUyk7DQogICAgJHRoaXMtPkFkZFByb3BlcnR5KCdmaWVsZGxpc3QnLCAgICAgICAwLCBzZWxmOjpUQUJfUFJJTlRfRklFTERTTElTVCk7DQogICAgI1R1cm4gb24gcHJldmlldw0KICAgICR0aGlzLT5tUHJldmlldyA9IHRydWU7DQogICAgI1R1cm4gb2ZmIGNhY2hpbmcNCiAgICAkdGhpcy0+bUNhY2hhYmxlID0gZmFsc2U7DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBkaXNwbGF5X3NpbmdsZV9lbGVtZW50KCRvbmUsICRhZGRpbmcgPSBmYWxzZSkNCiAgew0KICAgICRnQ21zID0gY21zbXMoKTsNCiAgICAkbW9kID0gJHRoaXMtPmdldF9tb2QoKTsNCiAgICAkc21hcnR5ID0gJGdDbXMtPkdldFNtYXJ0eSgpOw0KDQogICAgc3dpdGNoKCRvbmUpDQogICAgew0KICAgICAgDQogICAgY2FzZSAnZmllbGRsaXN0JzoNCiAgICB7DQogICAgICAkaXRlbSA9IG5ldyBDYXRhbG9nSXRlbSgpOw0KICAgICAgJGl0ZW1BdHRycyA9ICRpdGVtLT5nZXRBdHRycygpOw0KICAgICAgJGF0dHJQaWNrID0gJyc7DQogICAgICAkc2VsQXR0cnMgPSBleHBsb2RlKCAnLCcsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdmaWVsZGxpc3QnKSApOw0KICAgICAgDQogICAgICBmb3JlYWNoICgkaXRlbUF0dHJzIGFzICR0aGlzQXR0cikNCiAgICAgIHsNCiAgICAgICAgJGF0dHJQaWNrIC49ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImZpZWxkbGlzdFtdIiB2YWx1ZT0iJyAuICR0aGlzQXR0ci0+YXR0ciAuICciICc7DQogICAgICAgIA0KICAgICAgICBpZiAoIGluX2FycmF5KCR0aGlzQXR0ci0+YXR0ciwgJHNlbEF0dHJzKSApDQogICAgICAgIHsNCiAgICAgICAgICAkYXR0clBpY2sgLj0gJyBjaGVja2VkPSJjaGVja2VkIic7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICRhdHRyUGljayAuPSAnIC8+Jm5ic3A7JyAuICR0aGlzQXR0ci0+YXR0ciAuICc8YnIgLz4nOw0KICAgICAgfQ0KDQogICAgICAkcmV0ID0gYXJyYXkoJHRoaXMtPkxhbmcoJ3doaWNoX2F0dHJpYnV0ZXMnKSwgJGF0dHJQaWNrKTsNCiAgICAgICANCiAgICAgICByZXR1cm4gJHJldDsNCiAgICB9DQogICAgICAgICAgICAgDQogICAgY2FzZSAnc3ViX3RlbXBsYXRlJzoNCiAgICB7DQogICAgICAkc3ViVGVtcGxhdGVzID0gY2F0VGVtcGxhdGVPcGVyYXRpb25zOjpHZXRUZW1wbGF0ZUxpc3RGcm9tSUQoMyk7DQoNCiAgICAgICRyZXQgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBmb3I9ImluX3N1Yl90ZW1wbGF0ZSI+JyANCiAgICAgICAgICAgICAgICAgICAgLiAkbW9kLT5sYW5nKCdTdWInKSANCiAgICAgICAgICAgICAgICAgICAgLiAnICcNCiAgICAgICAgICAgICAgICAgICAgLiBsYW5nKCd0ZW1wbGF0ZScpIA0KICAgICAgICAgICAgICAgICAgICAuICc6PC9sYWJlbD4nLA0KICAgICAgICAgICAgICAgICAgICAkbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Yl90ZW1wbGF0ZScsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1YlRlbXBsYXRlcywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnc3ViX3RlbXBsYXRlJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICApOw0KICAgICAgIA0KICAgICAgIHJldHVybiAkcmV0Ow0KICAgIH0NCiAgICBicmVhazsNCg0KICAgIGNhc2UgJ3NvcnRfb3JkZXInOg0KICAgIHsNCiAgICAgICRyZXQgPSBhcnJheSgpOw0KICAgICAgDQogICAgICAkc28gPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnc29ydF9vcmRlcicpOw0KDQogICAgICBpZiAoJHNvID09ICcnKQ0KICAgICAgew0KICAgICAgICAgICRzbyA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2NhdGVnb3J5X3NvcnRfb3JkZXInLCAnbmF0dXJhbCcpOw0KICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgJHJldCA9IGFycmF5KA0KICAgICAgICAgICAgICAgICAgICAkbW9kLT5MYW5nKCd0aXRsZV9nbG9iYWxfaXRlbV9zb3J0X29yZGVyMicpLCANCiAgICAgICAgICAgICAgICAgICAgJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bigNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvcnRfb3JkZXInLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kLT5MYW5nKCduYXR1cmFsX29yZGVyJyk9PiduYXR1cmFsJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vZC0+TGFuZygnYWxwaGFfb3JkZXInKT0+J2FscGhhJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc28NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICAgKTsNCiAgICAgIHJldHVybiAkcmV0Ow0KICAgICAgDQogICAgfQ0KICAgIGJyZWFrOyAgICANCg0KICAgIGRlZmF1bHQ6DQogICAgICByZXR1cm4gcGFyZW50OjpkaXNwbGF5X3NpbmdsZV9lbGVtZW50KCRvbmUsICRhZGRpbmcpOw0KICAgIH0NCiAgfQ0KICANCg0KICBmdW5jdGlvbiBGaWxsUGFyYW1zKCRwYXJhbXMsICRlZGl0aW5nID0gdHJ1ZSkNCiAgeyANCiAgICBpZiggIWlzc2V0KCRwYXJhbXMpICkgcmV0dXJuOw0KDQogICAgJHRoaXMtPm1DYWNoYWJsZSA9IGZhbHNlOw0KDQogICAgJHBhcmFtZXRlcnMgPSBhcnJheSgnc3ViX3RlbXBsYXRlJywgJ3NvcnRfb3JkZXInKTsNCg0KICAgIGZvcmVhY2ggKCRwYXJhbWV0ZXJzIGFzICRvbmVwYXJhbSkNCiAgICB7DQogICAgICBpZiAoaXNzZXQoJHBhcmFtc1skb25lcGFyYW1dKSkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPlNldFByb3BlcnR5VmFsdWUoJG9uZXBhcmFtLCAkcGFyYW1zWyRvbmVwYXJhbV0pOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2ZpZWxkbGlzdCddKSkNCiAgICB7DQogICAgICBpZiAoISBpc19hcnJheSgkcGFyYW1zWydmaWVsZGxpc3QnXSkpDQogICAgICB7DQogICAgICAgICRwYXJhbXNbJ2ZpZWxkbGlzdCddID0gYXJyYXkoJHBhcmFtc1snZmllbGRsaXN0J10pOw0KICAgICAgfQ0KDQogICAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgnZmllbGRsaXN0JywgaW1wbG9kZSgnLCcsICRwYXJhbXNbJ2ZpZWxkbGlzdCddKSk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgnZmllbGRsaXN0JywgJycpOw0KICAgIH0NCg0KCQlwYXJlbnQ6OkZpbGxQYXJhbXMoJHBhcmFtcyk7DQoJfQ0KDQogIGZ1bmN0aW9uIFBvcHVsYXRlUGFyYW1zKCYkcGFyYW1zKQ0KICB7ICAgDQogICAgJHBhcmFtZXRlcnMgPSBhcnJheSgnc3ViX3RlbXBsYXRlJywgJ3NvcnRfb3JkZXInLCAnZmllbGRsaXN0Jyk7DQoNCiAgICBmb3JlYWNoKCRwYXJhbWV0ZXJzIGFzICRvbmVwYXJhbSkNCiAgICB7DQogICAgICAkdG1wID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJG9uZXBhcmFtKTsNCiAgICAgIA0KICAgICAgaWYgKGlzc2V0KCR0bXApICYmICFlbXB0eSgkdG1wKSkNCiAgICAgIHsNCiAgICAgICAgaWYoJG9uZXBhcmFtICA9PSAnZmllbGRsaXN0JykNCiAgICAgICAgew0KICAgICAgICAgICAkcGFyYW1zWyRvbmVwYXJhbV0gPSAkdG1wOw0KICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJHBhcmFtc1skb25lcGFyYW1dID0gJHRtcDsNCiAgICAgIH0NCiAgICB9DQoJCQ0KICAgICR0aGlzLT5nZXRVc2VyQXR0cmlidXRlcygpOw0KICAgICRzYWZlYXR0cmxpc3QgPSBhcnJheSgpOw0KDQogICAgZm9yZWFjaCAoJHRoaXMtPmF0dHJzIGFzICR0aGlzQXR0cikNCiAgICB7DQogICAgICAkdG1wID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJHRoaXNBdHRyLT5hdHRyKTsNCiAgICAgIA0KICAgICAgaWYgKGlzc2V0KCR0bXApICYmICR0bXAhPScnKQ0KICAgICAgew0KICAgICAgICAkcGFyYW1zWyR0aGlzQXR0ci0+c2FmZV0gPSAkdG1wOw0KICAgICAgICANCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzQXR0ci0+YWxpYXMpICYmICR0aGlzQXR0ci0+YWxpYXMhPScnKQ0KICAgICAgICB7DQogICAgICAgICAgJHBhcmFtc1skdGhpc0F0dHItPmFsaWFzXSA9ICR0bXA7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICR0aGlzU2FmZUF0dHIgPSBhcnJheSgpOw0KICAgICAgICAkdGhpc1NhZmVBdHRyWyduYW1lJ10gPSB1Y2ZpcnN0KCR0aGlzQXR0ci0+YXR0cik7DQogICAgICAgICR0aGlzU2FmZUF0dHJbJ2tleSddID0gJ3skJyAuICR0aGlzQXR0ci0+c2FmZSAuICd9JzsNCiAgICAgICAgDQogICAgICAgIGlmICgkdGhpc0F0dHItPmFsaWFzICE9ICcnKQ0KICAgICAgICB7DQogICAgICAgICAgJHRoaXNTYWZlQXR0clsnYWxpYXNrZXknXSA9ICd7JCcgLiAkdGhpc0F0dHItPmFsaWFzIC4gJ30nOw0KICAgICAgICB9DQogICAgICAgIGFycmF5X3B1c2goJHNhZmVhdHRybGlzdCwgJHRoaXNTYWZlQXR0cik7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICRwYXJhbXNbJHRoaXNBdHRyLT5zYWZlXSA9ICcnOw0KICAgICAgICAkcGFyYW1zWyR0aGlzQXR0ci0+YWxpYXNdID0gJyc7CQkJDQogICAgICB9DQogICAgfQ0KICAgIA0KICAgICRwYXJhbXNbJ3RpdGxlJ10gPSAkdGhpcy0+bU5hbWU7DQogICAgJHBhcmFtc1snbWVudXRleHQnXSA9ICR0aGlzLT5tTWVudVRleHQ7DQogICAgJHBhcmFtc1sndGVtcGxhdGVfaWQnXSA9ICR0aGlzLT5tVGVtcGxhdGVJZDsNCiAgICAkcGFyYW1zWydhbGlhcyddID0gJHRoaXMtPm1BbGlhczsNCiAgICAkcGFyYW1zWydwYXJlbnRfaWQnXSA9ICR0aGlzLT5tUGFyZW50SWQ7DQogICAgJHBhcmFtc1snYWN0aXZlJ10gPSAkdGhpcy0+bUFjdGl2ZTsNCiAgICAkcGFyYW1zWydzaG93aW5tZW51J109JHRoaXMtPm1TaG93SW5NZW51Ow0KICAgICRwYXJhbXNbJ2F0dHJsaXN0J10gPSAkc2FmZWF0dHJsaXN0OyANCiAgfQ0KICANCiAgZnVuY3Rpb24gU2hvdygkcGFyYW0gPSAnJykNCiAgew0KICAgICRwYXJhbSA9IHRyaW0oJHBhcmFtKTsNCiAgICANCiAgICBpZiggISRwYXJhbSApICRwYXJhbSA9ICdjb250ZW50X2VuJzsNCiAgICAkcGFyYW0gPSBzdHJfcmVwbGFjZSgnICcsJ18nLCRwYXJhbSk7IA0KICAgIA0KICAgIGlmICgkcGFyYW0gPT0gJ2NvbnRlbnRfZW4nKQ0KICAgIHsNCiAgICAgICR0aGlzLT5Qb3B1bGF0ZVBhcmFtcygkcGFyYW1zKTsNCiAgICAgICRwYXJhbXNbJ2NvbnRlbnRfZW4nXSA9IHBhcmVudDo6U2hvdygkcGFyYW0pOw0KICAgICAgcmV0dXJuICR0aGlzLT5SZW5kZXJDb250ZW50KCRwYXJhbXMpOzsgIA0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgcmV0dXJuIHBhcmVudDo6U2hvdygkcGFyYW0pOw0KICAgIH0NCiAgfQ0KDQogIHByb3RlY3RlZCBmdW5jdGlvbiBVcGRhdGUoKQ0KICB7DQogICAgcGFyZW50OjpVcGRhdGUoKTsNCiAgICANCiAgICBpZiggKCR0aGlzLT5tT2xkQWxpYXMgIT0gJHRoaXMtPkFsaWFzKCkpICYmICR0aGlzLT5tT2xkQWxpYXMgJiYgJHRoaXMtPkFsaWFzKCkgKQ0KICAgIHsNCiAgICAgIGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ2F0YWxvZ2VyJyktPnJlbmFtZUltYWdlcygkdGhpcy0+bU9sZEFsaWFzLCR0aGlzLT5BbGlhcygpKTsNCiAgICB9DQogIH0NCg0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gSW5zZXJ0KCkNCiAgew0KICAgIHBhcmVudDo6SW5zZXJ0KCk7DQogICAgDQogICAgaWYoICgkdGhpcy0+bU9sZEFsaWFzICE9ICR0aGlzLT5BbGlhcygpKSAmJiAkdGhpcy0+bU9sZEFsaWFzICYmICR0aGlzLT5BbGlhcygpICkNCiAgICB7DQogICAgICBjYXRGaWxlc09wZXJhdGlvbnM6OnJlbmFtZUltYWdlcyggJHRoaXMtPm1PbGRBbGlhcywgJHRoaXMtPkFsaWFzKCkgKTsNCiAgICB9DQogIH0NCiAgIA0KICBmdW5jdGlvbiBVcGRhdGVQcm9wZXJ0eU5hbWUoJHByb3BOYW1lLCAkcHJvcE5ld05hbWUpDQogIHsNCiAgICAgJHRlbXBWYWx1ZSA9ICcnOw0KICAgICBpZiAoJHRoaXMtPmlzX2tub3duX3Byb3BlcnR5KCRwcm9wTmFtZSkpDQogICAgIHsNCiAgICAgICAgICAkdGVtcFZhbHVlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJHByb3BOYW1lKTsNCiAgICAgICAgICAkdGhpcy0+UmVtb3ZlUHJvcGVydHkoJHByb3BOYW1lLGZhbHNlKTsgICANCiAgICAgfQ0KICAgICAkdGhpcy0+QWRkRXh0cmFQcm9wZXJ0eSgkcHJvcE5hbWUpOw0KICAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkcHJvcE5ld05hbWUsICR0ZW1wVmFsdWUpOyAgDQogIH0gICANCg0KICBmdW5jdGlvbiBEZWxldGVQcm9wZXJ0eSgkcHJvcE5hbWUpDQogIHsNCiAgICAkdGhpcy0+UmVtb3ZlUHJvcGVydHkoJHByb3BOYW1lLGZhbHNlKTsgICAgICAgDQogIH0NCg0KICBmdW5jdGlvbiBSZW5kZXJDb250ZW50KCRwYXJhbXMpDQogIHsNCiAgICAkbW9kID0gJHRoaXMtPmdldF9tb2QoKTsNCiAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7DQogICAgJGNudE9iaiA9IG5ldyBzdGRDbGFzcygpOw0KICAgIA0KICAgICRzaG93TWlzc2luZyA9ICdfJyAuICRtb2QtPkdldFByZWZlcmVuY2UoJ3Nob3dfbWlzc2luZycsICcxJyk7DQogICAgJHBhcmFtc1snYWxpYXMnXSA9ICcvJzsgICAgICAgICAgICMgPz8/Pw0KICAgICRwYXJhbXNbJ3JlY3Vyc2UnXSA9ICdpdGVtc19hbGwnOyAjID8/Pz8NCg0KICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleT0+JHZhbCkNCiAgICB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJGtleSwgJHBhcmFtc1ska2V5XSk7DQogICAgICAkY250T2JqLT4ka2V5ID0gJHBhcmFtc1ska2V5XTsNCiAgICB9DQogICAgDQogICAgJGNudE9iai0+ZGVmYXVsdF9jb250ZW50ID0gJHBhcmFtc1snY29udGVudF9lbiddOw0KICAgICRzbWFydHktPmFzc2lnbignbWFpbl9jb250ZW50JywgJHBhcmFtc1snY29udGVudF9lbiddKTsNCg0KICAgIGxpc3QoJGN1clBhZ2UsICRwYWdlSXRlbXMpID0gY2F0Q29udGVudE9wZXJhdGlvbnM6OmdldENhdGFsb2dJdGVtc0xpc3QoJHBhcmFtcyk7DQoNCiAgICBpZiAoaXNzZXQoJHBhcmFtc1snc29ydF9vcmRlciddKSAmJiAkcGFyYW1zWydzb3J0X29yZGVyJ10gPT0gJ2FscGhhJykNCiAgICB7DQogICAgICB1c29ydCggJHBhZ2VJdGVtcywgYXJyYXkoImNhdENvbnRlbnRPcGVyYXRpb25zIiwgImNvbnRlbnRhbHBoYSIpICk7DQogICAgfQ0KDQogICAgJGNvdW50ID0gY291bnQoJHBhZ2VJdGVtcyk7DQogICAgDQogICAgJGZsID0gYXJyYXkoKTsNCiAgICANCiAgICBpZiggaXNzZXQoJHBhcmFtc1snZmllbGRsaXN0J10pICkNCiAgICB7DQogICAgICAkZmwgPSBleHBsb2RlKCcsJywgJHBhcmFtc1snZmllbGRsaXN0J10pOw0KICAgIH0NCiAgICAgDQogICAgJGZsZGxpc3QgPSBhcnJheSgpOw0KDQogICAgZm9yZWFjaCgkZmwgYXMgJHRrID0+ICR0dikNCiAgICB7DQogICAgICAkYXR0ciA9IHN0cnRvbG93ZXIocHJlZ19yZXBsYWNlKCcvXFcvJywgJycsICR0dikpOw0KICAgICAgJGZsZGxpc3RbJGF0dHJdID0gJHR2Ow0KICAgIH0NCiAgICANCiAgICAkY250T2JqLT5GaWVsZExpc3QgPSAkZmxkbGlzdDsNCiAgICAkY250T2JqLT5hdHRybGlzdCA9ICRmbGRsaXN0Ow0KICAgICRjbnRPYmotPkl0ZW1zID0gJHBhZ2VJdGVtczsNCiAgICAvL2RlYnVnX2Rpc3BsYXkoJHBhZ2VJdGVtcyk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRwYWdlSXRlbXMpOw0KICAgICRmdWxsU2l6ZSA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV9jYXRhbG9nJywgJzEwMCcpOw0KICAgIA0KICAgIA0KICAgICRpbWFnZUFycmF5ID0gYXJyYXkoKTsNCiAgICAvLyRmaWxlQXJyYXkgPSBhcnJheSgpOw0KICAgIC8vJGZpbGVVcmxBcnJheSA9IGFycmF5KCk7DQogICAgLy8kZmlsZVR5cGVBcnJheSA9IGFycmF5KCk7DQogICAgJHNyY0ltZ0FycmF5ID0gYXJyYXkoKTsNCiAgICAkdGh1bWJBcnJheSA9IGFycmF5KCk7DQogICAgDQogICAgJGltYWdlQXJyYXkgPSBhcnJheSgpOw0KICAgICRzcmNJbWdBcnJheSA9IGFycmF5KCk7DQogICAgJF9pbWFnZXMgPSBhcnJheSgpOw0KICAgIA0KICAgICRpbWdjb3VudCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2VfY291bnQnLCAyKTsNCiAgICAkZmlsZWNvdW50ID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnaXRlbV9maWxlX2NvdW50JywgMCk7DQogICAgJGZ1bGxTaXplID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnaXRlbV9pbWFnZV9zaXplX2hlcm8nLCAnNDAwJyk7DQogICAgJHRodW1iU2l6ZSA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV90aHVtYm5haWwnLCAnNzAnKTsNCiAgICAkcHJ1bmVsaXN0ID0gKCRtb2QtPkdldFByZWZlcmVuY2UoJ3Nob3dfZXh0YW50JywgJzEnKSA9PSAnMScpOw0KICAgIA0KICAgIGZvciAoJGkgPSAxIDsgJGkgPD0gJGltZ2NvdW50IDsgJGkrKykNCiAgICB7DQogICAgICAkX3VybCA9IGNhdEZpbGVzT3BlcmF0aW9uczo6aW1hZ2VTcGVjKCRjdXJQYWdlLT5BbGlhcygpLCAnY3RmJywgJGksICRmdWxsU2l6ZSk7DQogICAgICAkX3NyY191cmwgPSBjYXRGaWxlc09wZXJhdGlvbnM6OnNyY0ltYWdlU3BlYygkY3VyUGFnZS0+QWxpYXMoKSwgJGkpOw0KICAgICAgYXJyYXlfcHVzaCgkaW1hZ2VBcnJheSwgJF91cmwpOw0KICAgICAgYXJyYXlfcHVzaCgkc3JjSW1nQXJyYXksICRfc3JjX3VybCk7DQogICAgICAkX2ltYWdlc1skaV1bJ3VybCddID0gJF91cmw7DQogICAgICAkX2ltYWdlc1skaV1bJ3NyY191cmwnXSA9ICRfc3JjX3VybDsNCiAgICAgICRzbWFydHktPmFzc2lnbignaW1hZ2VfJyAuICRpIC4gJ191cmwnLCAkX3VybCk7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ3NyY19pbWFnZV8nLiRpLidfdXJsJywgJF9zcmNfdXJsKTsNCiAgICAgICMkc21hcnR5LT5hc3NpZ24oJ3NyY19pbWFnZV8nLiRpLidfdXJsJywgY2F0RmlsZXNPcGVyYXRpb25zOjpzcmNJbWFnZVNwZWMoJHBhcmFtc1snYWxpYXMnXSwgJGkpKTsgd3RmPz8/Pw0KICAgIH0NCg0KICAgICRjbnRPYmotPkltYWdlc0FycmF5ID0gJF9pbWFnZXM7DQogICAgJGNudE9iai0+aW1hZ2VfdXJsX2FycmF5ID0gJGltYWdlQXJyYXk7DQogICAgJGNudE9iai0+aW1hZ2VfdGh1bWJfdXJsX2FycmF5ID0gJHRodW1iQXJyYXk7DQogICAgDQogICAgJHNtYXJ0eS0+YXNzaWduKCdhdHRybGlzdCcsICRmbGRsaXN0KTsNCg0KICAgICRzbWFydHktPmFzc2lnbignaW1hZ2VfdXJsX2FycmF5JywgJGltYWdlQXJyYXkpOw0KICAgICRzbWFydHktPmFzc2lnbignc3JjX2ltYWdlX3VybF9hcnJheScsICRzcmNJbWdBcnJheSk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCdpbWFnZV90aHVtYl91cmxfYXJyYXknLCAkdGh1bWJBcnJheSk7DQogICAgJG1vZC0+c21hcnR5QmFzaWNzKCk7DQogICAgDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQovLyAgICAkY250T2JqLT5kZWZhdWx0X2NvbnRlbnQgPSAkcGFyYW1zWydfZGVmYXVsdF9jbnQnXTsNCi8vICAgICRjbnRPYmotPm1haW5fY29udGVudCA9ICRwYXJhbXNbJ19kZWZhdWx0X2NudCddOw0KLy8gICAgJHNtYXJ0eS0+YXNzaWduKCdtYWluX2NvbnRlbnQnLCAkcGFyYW1zWydfZGVmYXVsdF9jbnQnXSk7DQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KDQogICAgJHNtYXJ0eS0+YXNzaWduKCdjdGxnJywgJGNudE9iaik7ICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgJGNhY2hlX2lkID0gJ19wcnRfJyAuIG1kNSggc2VyaWFsaXplKCRwYXJhbXMpICk7DQogICAgJGNvbXBpbGVfaWQgPSAnQ2F0YWxvZ2VyXycgLiAkdGhpcy0+bUlkOw0KICAgIA0KICAgIHJldHVybiAkc21hcnR5LT5mZXRjaCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9kLT5HZXREYXRhYmFzZVJlc291cmNlKCdjYXRhbG9nXycgLiAkcGFyYW1zWydzdWJfdGVtcGxhdGUnXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhY2hlX2lkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21waWxlX2lkDQogICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogIH0NCn0NCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.CatContentBaseType.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmNsYXNzIENhdENvbnRlbnRCYXNlVHlwZSBleHRlbmRzIENvbnRlbnQNCnsNCiAgIyBpbnRlcm5hbA0KICBwcm90ZWN0ZWQgJF9tb2Q7DQogIHByb3RlY3RlZCAkdmFsaWRhdGlvbiA9IEZBTFNFOw0KICANCiAgIyB3ZSBuZWVkIHRoZXNlIHRvIHNldCBzb21lIGRlZmF1bHRzDQogIHByb3RlY3RlZCAkY2F0RXhwaXJlZDsNCiAgcHJvdGVjdGVkICRjYXRVc2VFeHBpcmF0aW9uRGF0ZTsNCiAgcHJvdGVjdGVkICRjYXRFeHBpcmF0aW9uU3RhcnREYXRlOw0KICBwcm90ZWN0ZWQgJGNhdEV4cGlyYXRpb25FbmREYXRlOw0KICANCiAgIyB1c2VyIGF0dHJpYnV0ZXMgYXJyYXkNCiAgcHJvdGVjdGVkICRhdHRyczsNCg0KICBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogIHsNCiAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQogIH0NCiAgICANCiAgZnVuY3Rpb24gJmdldF9tb2QoKQ0KICB7DQogICAgaWYoIGlzX251bGwoJHRoaXMtPl9tb2QpICkNCiAgICB7DQogICAgICAkdGhpcy0+X21vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ2F0YWxvZ2VyJyk7DQogICAgfQ0KICAgIHJldHVybiAkdGhpcy0+X21vZDsNCiAgfQ0KICAgICAgDQogIGZ1bmN0aW9uIExhbmcoJGtleSkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+Z2V0X21vZCgpLT5MYW5nKCRrZXkpOw0KICB9DQogICAgICAgIA0KICBmdW5jdGlvbiBnZXRfbGFuZygka2V5KQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5nZXRfbW9kKCktPkxhbmcoJGtleSk7DQogIH0NCiAgDQogIGZ1bmN0aW9uIEdldEFkbWluVGhlbWVOYW1lKCkNCiAgew0KICAgIHJldHVybiBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKS0+R2V0RGVmYXVsdFRoZW1lKCk7IA0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gU2V0RGVmYXVsdHMoKQ0KICB7DQogICAgJHRlbXAgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnZXhwaXJlZCcpOw0KICAgIA0KICAgIGlmKCAhaXNzZXQoJHRlbXApICkNCiAgICB7DQogICAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgnZXhwaXJlZCcsICR0aGlzLT5jYXRFeHBpcmVkKTsNCiAgICB9DQogICAgDQogICAgJHRlbXAgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgndXNlX2V4cGlyYXRpb25fZGF0ZScpOw0KICAgIA0KICAgIGlmKCAhaXNzZXQoJHRlbXApICkNCiAgICB7DQogICAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgndXNlX2V4cGlyYXRpb25fZGF0ZScsICR0aGlzLT5jYXRVc2VFeHBpcmF0aW9uRGF0ZSk7DQogICAgfQ0KICAgIA0KICAgICR0ZW1wID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2V4cGlyYXRpb25fc3RhcnRfZGF0ZScpOw0KICAgIA0KICAgIGlmKCAhaXNzZXQoJHRlbXApICkNCiAgICB7DQogICAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgnZXhwaXJhdGlvbl9zdGFydF9kYXRlJywgJHRoaXMtPmNhdEV4cGlyYXRpb25TdGFydERhdGUpOw0KICAgIH0NCiAgICANCiAgICAkdGVtcCA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdleHBpcmF0aW9uX2VuZF9kYXRlJyk7DQogICAgDQogICAgaWYoICFpc3NldCgkdGVtcCkgKQ0KICAgIHsNCiAgICAgICR0aGlzLT5TZXRQcm9wZXJ0eVZhbHVlKCdleHBpcmF0aW9uX2VuZF9kYXRlJywgJHRoaXMtPmNhdEV4cGlyYXRpb25FbmREYXRlKTsNCiAgICB9DQogICAgDQogIH0NCiAgDQogIGZ1bmN0aW9uIE1vZHVsZU5hbWUoKQ0KICB7DQogICAgcmV0dXJuICdDYXRhbG9nZXInOw0KICB9IA0KDQogIGZ1bmN0aW9uIElzQ29weWFibGUoKQ0KICB7DQogICAgcmV0dXJuIHRydWU7DQogIH0NCiAgDQogIGZ1bmN0aW9uIElzRGVmYXVsdFBvc3NpYmxlKCkNCiAgew0KICAgIHJldHVybiBGQUxTRTsNCiAgfQ0KDQogIGZ1bmN0aW9uIEdldENyZWF0aW9uRGF0ZSgpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPm1DcmVhdGlvbkRhdGU7DQogIH0NCg0KICBmdW5jdGlvbiBHZXRNb2RpZmllZERhdGUoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5tTW9kaWZpZWREYXRlOw0KICB9DQoNCiAgZnVuY3Rpb24gSGFzQXR0cmlidXRlcygpDQogIHsNCiAgICByZXR1cm4gaXNfYXJyYXkoJHRoaXMtPmF0dHJzKSAmJiAoY291bnQoJHRoaXMtPmF0dHJzKSA+IDApOw0KICB9DQogIA0KICBmdW5jdGlvbiBTZXRQcm9wZXJ0aWVzKCkNCiAgew0KICAgIHBhcmVudDo6U2V0UHJvcGVydGllcygpOw0KICAgIA0KICAgICR0aGlzLT5nZXRVc2VyQXR0cmlidXRlcygpOw0KICAgIA0KICAgICNsZXRzIGFkZCB0aGUgZmllbGRzDQogICAgaWYgKGlzX2FycmF5KCR0aGlzLT5hdHRycykpDQogICAgew0KICAgICAgZm9yZWFjaCAoJHRoaXMtPmF0dHJzIGFzICR0aGlzQXR0cikNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPkFkZENvbnRlbnRQcm9wZXJ0eSgkdGhpc0F0dHItPmF0dHIsIDEwMCArICR0aGlzQXR0ci0+ZmllbGRfb3JkZXIpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgICMgc2luY2UgMC4xMiAoSm9Nb3JnKQ0KICAgICR0aGlzLT5BZGRDb250ZW50UHJvcGVydHkoJ2V4cGlyZWQnLCAxMDEpOw0KICAgICR0aGlzLT5BZGRDb250ZW50UHJvcGVydHkoJ3VzZV9leHBpcmF0aW9uX2RhdGUnLCAxMDIpOw0KDQogICAgJHRoaXMtPkFkZENvbnRlbnRQcm9wZXJ0eSgnZXhwaXJhdGlvbl9zdGFydF9kYXRlJywgMTAzKTsNCiAgICAkdGhpcy0+QWRkQ29udGVudFByb3BlcnR5KCdleHBpcmF0aW9uX2VuZF9kYXRlJywgMTA0KTsNCiAgICAgICAgIA0KICAgICMgbGV0J3Mgc2V0IGRlZmF1bHRzICAgDQogICAgDQogICAgLy8gdHVybiBvbiBwcmV2aWV3DQogICAgJHRoaXMtPm1QcmV2aWV3ID0gdHJ1ZTsNCg0KICAgIC8vIHR1cm4gb2ZmIGNhY2hpbmcNCiAgICAkdGhpcy0+bUNhY2hhYmxlID0gZmFsc2U7DQogICAgDQogICAgLy8gbm90IGV4cGlyZWQgYnkgZGVmYXVsdA0KICAgICR0aGlzLT5jYXRFeHBpcmVkID0gZmFsc2U7DQogICAgDQogICAgLy8gZG9uJ3QgdXNlIGV4cGlyYXRpb24gZGF0ZQ0KICAgICR0aGlzLT5hY3RVc2VFeHBpcmF0aW9uRGF0ZSA9IGZhbHNlOw0KICAgIA0KICAgICRub3cgPSB0aW1lKCk7DQogICAgDQogICAgLy8gZGVmYXVsdHMgdG8gbm93DQogICAgJHRoaXMtPmFjdEV4cGlyYXRpb25TdGFydERhdGUgPSAkbm93Ow0KDQogICAgJG5kYXlzID0gKGludCkkdGhpcy0+Z2V0X21vZCgpLT5HZXRQcmVmZXJlbmNlKCdleHBpcnlfaW50ZXJ2YWwnLCAxODApOw0KICAgIGlmKCAkbmRheXMgPT0gMCApDQogICAgew0KICAgICAgJG55ZWFycyA9IDE7DQogICAgICAkZW5kX2RhdGUgPSBzdHJ0b3RpbWUoIHNwcmludGYoICIrJWQgeWVhcnMiLCAkbnllYXJzICksIHRpbWUoKSApOyANCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRlbmRfZGF0ZSA9IHN0cnRvdGltZSggc3ByaW50ZiggIislZCBkYXlzIiwgJG5kYXlzICksIHRpbWUoKSApOw0KICAgIH0NCiAgICANCiAgICAkdGhpcy0+YWN0RXhwaXJhdGlvbkVuZERhdGUgPSAkZW5kX2RhdGU7DQoNCiAgfQ0KICANCiAgZnVuY3Rpb24gZ2V0VXNlckF0dHJpYnV0ZXMoKQ0KICB7DQogICAgIyBqdXN0IHNvIHdlIGRvbid0IGdldCBhbiBlcnJvcg0KICB9DQogIA0KICBmdW5jdGlvbiBnZXRBdHRycygpDQogIHsNCiAgICAkdGhpcy0+Z2V0VXNlckF0dHJpYnV0ZXMoKTsNCiAgICByZXR1cm4gJHRoaXMtPmF0dHJzOw0KICB9DQoNCiAgZnVuY3Rpb24gRmlsbFBhcmFtcygkcGFyYW1zLCAkZWRpdGluZyA9IGZhbHNlKQ0KICB7DQogICAgDQogICAgaWYoICFpc3NldCgkcGFyYW1zKSApIHJldHVybjsNCg0KICAgICRwYXJhbWV0ZXJzID0gYXJyYXkoJ3N1Yl90ZW1wbGF0ZScsICd1c2VfZXhwaXJhdGlvbl9kYXRlJyk7DQoNCiAgICBmb3JlYWNoKCRwYXJhbWV0ZXJzIGFzICRvbmVwYXJhbSkNCiAgICB7IA0KICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJG9uZXBhcmFtXSkgKQ0KICAgICAgew0KICAgICAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkb25lcGFyYW0sICRwYXJhbXNbJG9uZXBhcmFtXSk7DQogICAgICB9DQogICAgfQ0KICAgICAgDQogICAgIyBzcGVjaWFsIGNhc2VzDQogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ1N0YXJ0RGF0ZV9Nb250aCddKSApDQogICAgew0KICAgICAgDQogICAgICAkc3RhcnRkYXRlID0gY2F0Q29udGVudE9wZXJhdGlvbnM6Om1ha2VUaW1lU3RhbXAoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ1N0YXJ0VGltZV9Ib3VyJ10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWydTdGFydFRpbWVfTWludXRlJ10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWydTdGFydFRpbWVfU2Vjb25kJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ1N0YXJ0VGltZV9ZZWFyJ10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWydTdGFydERhdGVfTW9udGgnXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ1N0YXJ0RGF0ZV9EYXknXQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgJHRoaXMtPlNldFByb3BlcnR5VmFsdWUoJ2V4cGlyYXRpb25fc3RhcnRfZGF0ZScsICRzdGFydGRhdGUpOw0KICAgIH0gICAgICANCiAgICANCiAgICBpZiggaXNzZXQoJHBhcmFtc1snRW5kRGF0ZV9Nb250aCddKSApDQogICAgew0KICAgICAgDQogICAgICAkZW5kZGF0ZSA9IGNhdENvbnRlbnRPcGVyYXRpb25zOjptYWtlVGltZVN0YW1wKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWydFbmRUaW1lX0hvdXInXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ0VuZFRpbWVfTWludXRlJ10sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWydFbmRUaW1lX1NlY29uZCddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWydFbmREYXRlX1llYXInXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ0VuZERhdGVfTW9udGgnXSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ0VuZERhdGVfRGF5J10NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICR0aGlzLT5TZXRQcm9wZXJ0eVZhbHVlKCdleHBpcmF0aW9uX2VuZF9kYXRlJywgJGVuZGRhdGUpOw0KICAgIH0NCiAgICANCiAgICBpZiggaXNzZXQoJHBhcmFtc1snZXhwaXJlZCddKSApDQogICAgew0KICAgICAgJG1vZCA9ICR0aGlzLT5nZXRfbW9kKCk7DQogICAgICAkRXhwaXJ5QWN0aW9uID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnT25FeHBpcnlBY3Rpb24nLCAzKTsNCiAgICAgIA0KICAgICAgaWYgKCR0aGlzLT5jYXRFeHBpcmVkIDw+ICRwYXJhbXNbJ2V4cGlyZWQnXSkNCiAgICAgIHsNCiAgICAgICAgJHRoaXMtPmNhdEV4cGlyZWQgPSAkcGFyYW1zWydleHBpcmVkJ107DQogICAgICAgIGlmICgkcGFyYW1zWydleHBpcmVkJ10pDQogICAgICAgIHsNCiAgICAgICAgICAkdGhpcy0+X2RvRXhwaXJlKCRFeHBpcnlBY3Rpb24sIHRydWUsIGZhbHNlKTsgDQogICAgICAgIH0NCiAgICAgICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgJHRoaXMtPl9kb1VuRXhwaXJlKHRydWUsIGZhbHNlKTsgDQogICAgICAgIH0NCg0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBwYXJlbnQ6OkZpbGxQYXJhbXMoJHBhcmFtcyk7DQogIH0NCg0KICANCiAgZnVuY3Rpb24gVmFsaWRhdGVEYXRhKCkNCiAgew0KICAgICRlcnJvcnMgPSBwYXJlbnQ6OlZhbGlkYXRlRGF0YSgpOw0KICAgIA0KICAgIGlmKCAkZXJyb3JzID09PSBGQUxTRSApDQogICAgew0KICAgICAgJGVycm9ycyA9IGFycmF5KCk7DQogICAgfQ0KDQogICAgcmV0dXJuICggY291bnQoJGVycm9ycykgPiAwID8gJGVycm9ycyA6IEZBTFNFICk7DQogIH0NCg0KICAvKioNCiAgKiBBZGQgZXh0cmEgdGFicw0KICAqLw0KIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX1RhYkxvZ2ljKCkNCiAgew0KICAgICRoYXNoID0gYXJyYXkoJ21haW4nLCAnb3B0aW9ucycsICdjYXRhbG9nZXJfb3B0aW9ucycpOw0KICAgIA0KICAgIGlmICggJHRoaXMtPkhhc0F0dHJpYnV0ZXMoKSApDQogICAgew0KICAgICAgYXJyYXlfcHVzaCgkaGFzaCwgJ2F0dHJpYnV0ZXMnKTsNCiAgICB9DQoNCiAgICByZXR1cm4gJGhhc2g7DQogIH0NCiANCiAgcHVibGljIGZ1bmN0aW9uIFRhYk5hbWVzKCkNCiAgew0KICAgICRyZXQgPSBwYXJlbnQ6OlRhYk5hbWVzKCk7DQogICAgJG1vZCA9ICR0aGlzLT5nZXRfbW9kKCk7DQogICAgYXJyYXlfcHVzaCggJHJldCwgJG1vZC0+bGFuZygndGl0bGVfY2F0YWxvZ2VyX2V4dHJhcycpICk7DQogICAgDQogICAgaWYgKCAkdGhpcy0+SGFzQXR0cmlidXRlcygpICkNCiAgICB7DQogICAgICBhcnJheV9wdXNoKCAkcmV0LCAkbW9kLT5sYW5nKCd0aXRsZV9jYXRhbG9nZXJfYXR0cnMnKSApOw0KICAgIH0NCg0KICAgIHJldHVybiAkcmV0Ow0KICB9DQogIA0KICBmdW5jdGlvbiBFZGl0QXNBcnJheSgkYWRkaW5nID0gZmFsc2UsICR0YWIgPSAwLCAkc2hvd2FkbWluID0gZmFsc2UpDQogIHsNCiAgICAkbW9kID0gJHRoaXMtPmdldF9tb2QoKTsNCiAgICAkcmV0ID0gcGFyZW50OjpFZGl0QXNBcnJheSgkYWRkaW5nLCAkdGFiLCAkc2hvd2FkbWluKTsNCiAgICANCiAgICAkdGFiSGFzaCA9ICR0aGlzLT5fVGFiTG9naWMoKTsNCiAgICANCiAgICBpZiAoJHRhYkhhc2hbJHRhYl0gPT0gJ2F0dHJpYnV0ZXMnKQ0KICAgIHsgDQogICAgICAkdGhpcy0+Z2V0VXNlckF0dHJpYnV0ZXMoKTsNCg0KICAgICAgZm9yZWFjaCAoJHRoaXMtPmF0dHJzIGFzICR0aGlzQXR0cikNCiAgICAgIHsNCiAgICAgICAgJHJldFtdID0gY2F0RmllbGRzOjpSZW5kZXJJbnB1dCgkdGhpc0F0dHIsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCR0aGlzQXR0ci0+YXR0cikpOw0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBpZiAoJHRhYkhhc2hbJHRhYl0gPT0gJ2NhdGFsb2dlcl9vcHRpb25zJykNCiAgICB7DQogICAgICAjIyBzb21lIFdhcm5pbmdzIGhlcmUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgIGlmICgkdGhpcy0+bUFsaWFzID09ICcnKQ0KICAgICAgew0KICAgICAgICAkd2FybmluZ2ltZyA9ICc8aW1nIGFsdD0iJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJG1vZC0+TGFuZygnbm9fYWxpYXNfd2FybmluZycpDQogICAgICAgICAgICAgICAgICAgICAgLiAnIiBzcmM9IicNCiAgICAgICAgICAgICAgICAgICAgICAuICR0aGlzLT5HZXRXYXJuaW5nSW1hZ2UoKQ0KICAgICAgICAgICAgICAgICAgICAgIC4gJyIgLz4nOw0KICAgICAgICAkd2FybmluZyA9ICRtb2QtPkxhbmcoJ25vX2FsaWFzX3dhcm5pbmcnKTsNCiAgICAgICAgDQogICAgICAgICRyZXRbXSA9IGFycmF5ICgkd2FybmluZ2ltZywgJHdhcm5pbmcpOw0KICAgICAgICAkcmV0W109IGFycmF5KCc8aHIgLz4nKTsNCiAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgaWYgKCEkdGhpcy0+SGFzQXR0cmlidXRlcygpKQ0KICAgICAgew0KICAgICAgICAkd2FybmluZ2ltZyA9ICc8aW1nIGFsdD0iJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJG1vZC0+TGFuZygnbm9fYXR0cnNfd2FybmluZycpDQogICAgICAgICAgICAgICAgICAgICAgLiAnIiBzcmM9IicNCiAgICAgICAgICAgICAgICAgICAgICAuICR0aGlzLT5HZXRXYXJuaW5nSW1hZ2UoKQ0KICAgICAgICAgICAgICAgICAgICAgIC4gJyIgLz4nOw0KICAgICAgICAkd2FybmluZyA9ICRtb2QtPkxhbmcoJ25vX2F0dHJzX3dhcm5pbmcnKTsNCiAgICAgICAgDQogICAgICAgICRyZXRbXSA9IGFycmF5ICgkd2FybmluZ2ltZywgJHdhcm5pbmcpOw0KICAgICAgICAkcmV0W109IGFycmF5KCc8aHIgLz4nKTsNCiAgICAgIH0NCiAgICAgICMjICAgICAgICAgICAgICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQogICAgICAkcmV0W109ICR0aGlzLT5kaXNwbGF5X3NpbmdsZV9lbGVtZW50X2V4dCgndXNlX2V4cGlyYXRpb25fZGF0ZScpOw0KICAgICAgJHJldFtdPSAkdGhpcy0+ZGlzcGxheV9zaW5nbGVfZWxlbWVudF9leHQoJ2V4cGlyZWQnKTsNCi8vICAgICAgJHJldFtdPSBhcnJheSgnPGhyIC8+Jyk7DQovLyAgICAgICRyZXRbXT0gJHRoaXMtPmRpc3BsYXlfc2luZ2xlX2VsZW1lbnRfZXh0KCdleHBpcmF0aW9uX3N0YXJ0X2RhdGUnKTsNCi8vICAgICAgJHJldFtdPSAkdGhpcy0+ZGlzcGxheV9zaW5nbGVfZWxlbWVudF9leHQoJ2V4cGlyYXRpb25fc3RhcnRfdGltZScpOyAjc3BlY2lhbCBjYXNlDQogICAgICAkcmV0W109IGFycmF5KCc8aHIgLz4nKTsNCiAgICAgICRyZXRbXT0gJHRoaXMtPmRpc3BsYXlfc2luZ2xlX2VsZW1lbnRfZXh0KCdleHBpcmF0aW9uX2VuZF9kYXRlJyk7DQogICAgICAkcmV0W109ICR0aGlzLT5kaXNwbGF5X3NpbmdsZV9lbGVtZW50X2V4dCgnZXhwaXJhdGlvbl9lbmRfdGltZScpOyAgICNzcGVjaWFsIGNhc2UNCiAgICB9DQoNCiAgICByZXR1cm4gJHJldDsNCiAgfQ0KICAgDQogIC8qKg0KICAqIFdlIG92ZXJyaWRlIHRoaXMgdG8gbWFrZSBzaHVyZSBhbGwgcHJvcGVydGllcw0KICAqIGFyZSBrbm93biB0byBDTVNNUywgYW5kIGNhbGwgcGFyZW50IG1ldGhvZA0KICAqIHRvIGVuZm9yY2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLg0KICAqIEJ1dCB3ZSBkZWFsIHdpdGggdGhlIGFjdHVhbCBkaXNwbGF5aW5nDQogICogb2YgdGhlIGVsZW1lbnRzIG9uIG91ciBvd24gZXh0ZW5kZWQgdmVyc2lvbg0KICAqIG9mIHRoaXMgbWV0aG9kLiAoIGRpc3BsYXlfc2luZ2xlX2VsZW1lbnRfZXh0KCkgKQ0KICAqICANCiAgKiANCiAgKiBAcGFyYW0gbWl4ZWQgJG9uZQ0KICAqIEBwYXJhbSBtaXhlZCAkYWRkaW5nDQogICogQHJldHVybiB2b2lkDQogICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBkaXNwbGF5X3NpbmdsZV9lbGVtZW50KCRvbmUsICRhZGRpbmcpDQogIHsNCiAgICAjIHdlIGp1c3Qgd2FudCB0byBtYWtlIHN1cmUgdGhlIG5ldyBvbmVzIGFyZSBrbm93biB0byBDTVNNUw0KICAgICR0aGlzLT5nZXRVc2VyQXR0cmlidXRlcygpOw0KICAgICRlbGVtZW50cyA9IGFycmF5KCk7DQogICAgDQogICAgZm9yZWFjaCAoJHRoaXMtPmF0dHJzIGFzICRlbGVtZW50KQ0KICAgIHsNCiAgICAgIGFycmF5X3B1c2goJGVsZW1lbnRzLCAkZWxlbWVudC0+YXR0cik7DQogICAgfQ0KICAgIA0KICAgIGlmIChpbl9hcnJheSgkb25lLCAkZWxlbWVudHMpKQ0KICAgIHsNCiAgICAgICRyID0gYXJyYXkoKTsNCiAgICAgIHJldHVybiAkcjsNCiAgICB9DQogICAgDQogICAgJGVsZW1lbnRzID0gYXJyYXkoDQogICAgICAgICAgICAgICAgICAgICAgICAndXNlX2V4cGlyYXRpb25fZGF0ZScsIA0KICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGlyZWQnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGlyYXRpb25fc3RhcnRfZGF0ZScsICANCiAgICAgICAgICAgICAgICAgICAgICAgICdleHBpcmF0aW9uX2VuZF9kYXRlJw0KICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgDQogICAgaWYgKGluX2FycmF5KCRvbmUsICRlbGVtZW50cykpDQogICAgew0KICAgICAgJHIgPSBhcnJheSgpOw0KICAgICAgcmV0dXJuICRyOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gcGFyZW50OjpkaXNwbGF5X3NpbmdsZV9lbGVtZW50KCRvbmUsICRhZGRpbmcpOw0KDQogIH0NCiAgDQogIC8qKg0KICAqIE91ciBvd24gdmVyc2lvbiBvZiBkaXNwbGF5X3NpbmdsZV9lbGVtZW50KCkNCiAgKiBwcmV2ZW50cyBkaXNwbGF5aW5nIHByb3BlcnRpZXMgb3V0IG9mIHRoZSBwZXJ0aW5lbnQgdGFicw0KICAqIGFuZCBhbGxvd3MgZm9yIHNvbWUgZXhwZWNpYWwgdHJlYXRtZW50IG9mIGRhdGUgYW5kIHRpbWUgZmllbGRzICANCiAgKiANCiAgKiBAcGFyYW0gbWl4ZWQgJG9uZQ0KICAqIEBwYXJhbSBtaXhlZCAkYWRkaW5nDQogICovDQogIHByb3RlY3RlZCBmdW5jdGlvbiBkaXNwbGF5X3NpbmdsZV9lbGVtZW50X2V4dCgkb25lLCAkYWRkaW5nID0gZmFsc2UpDQogIHsNCiAgICAkZ0NtcyA9IGNtc21zKCk7DQogICAgJG1vZCA9ICR0aGlzLT5nZXRfbW9kKCk7DQogICAgJHNtYXJ0eSA9ICRnQ21zLT5HZXRTbWFydHkoKTsNCiAgICAkdGhpcy0+U2V0RGVmYXVsdHMoKTsNCg0KICAgIHN3aXRjaCgkb25lKQ0KICAgIHsNCiAgICAgIA0KICAgICAgY2FzZSAndXNlX2V4cGlyYXRpb25fZGF0ZSc6DQogICAgICB7DQogICAgICAgICR3YXJuaW5naW1nID0gJzxpbWcgYWx0PSInDQogICAgICAgICAgICAgICAgICAgICAgLiAkbW9kLT5MYW5nKCdub19hdHRyc193YXJuaW5nJykNCiAgICAgICAgICAgICAgICAgICAgICAuICciIHNyYz0iJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPkdldFdhcm5pbmdJbWFnZSgpDQogICAgICAgICAgICAgICAgICAgICAgLiAnIiAvPic7DQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICR3YXJuaW5nID0gJHdhcm5pbmdpbWcgLiAnICcgLiAkbW9kLT5MYW5nKCd3YXJuaW5nX3Byb21wdF91c2VfZXhwaXJhdGlvbicpOw0KICAgICAgICANCiAgICAgICAgJGdsb2JhbCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ1VzZUV4cERhdGUnLCBGQUxTRSk7DQogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCd1c2VfZXhwaXJhdGlvbl9kYXRlJyk7DQogICAgICAgICRyID0gYXJyYXkgKA0KICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgZm9yPSJpbl91c2VfZXhwaXJhdGlvbl9kYXRlIj4nDQogICAgICAgICAgICAgICAgICAgICAgLiAkbW9kLT5MYW5nKCdwcm9tcHRfdXNlX2V4cGlyYXRpb24nKQ0KICAgICAgICAgICAgICAgICAgICAgIC4gJzo8L2xhYmVsPicsDQogICAgICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InVzZV9leHBpcmF0aW9uX2RhdGUiIHZhbHVlPSIwIi8+DQogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJpbl91c2VfZXhwaXJhdGlvbl9kYXRlIiBjbGFzcz0icGFnZWNoZWNrYm94IiB0eXBlPSJjaGVja2JveCIgdmFsdWU9IjEiIG5hbWU9InVzZV9leHBpcmF0aW9uX2RhdGUiJw0KICAgICAgICAgICAgICAgICAgICAgIC4gKCR2YWx1ZSA/ICcgY2hlY2tlZCA9ICJjaGVja2VkIicgOicnICkNCiAgICAgICAgICAgICAgICAgICAgICAuICcgLz4nLA0KICAgICAgICAgICAgICAgICAgICAgICRtb2QtPkxhbmcoJ2hlbHBfcHJvbXB0X3VzZV9leHBpcmF0aW9uJykNCiAgICAgICAgICAgICAgICAgICAgICAuICgkZ2xvYmFsID8gJycgOiggJzxiciAvPjxlbT4nIC4gJHdhcm5pbmcgLiAnPC9lbT4nICApICkNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgcmV0dXJuICRyOw0KICAgICAgfQ0KICAgICAgYnJlYWs7DQogICAgICANCi8vICAgICAgY2FzZSAnZXhwaXJhdGlvbl9zdGFydF9kYXRlJzogICAjc3RpbGwgbmVlZHMgbW9yZSB3b3JrDQovLyAgICAgIHsNCi8vICAgICAgICAkdmFsdWUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnZXhwaXJhdGlvbl9zdGFydF9kYXRlJyk7DQovLyAgICAgICAgJGZpZWxkID0gJ3todG1sX3NlbGVjdF9kYXRlICBwcmVmaXg9XCdTdGFydERhdGVfXCcgZmllbGRfb3JkZXI9XCdETVlcJyBzdGFydF95ZWFyPVwnLTFcJyBlbmRfeWVhcj1cJysxMDBcJyB0aW1lPScgLiAkdmFsdWUgLid9JzsNCi8vICAgICAgICAkciA9IGFycmF5ICgkbW9kLT5MYW5nKCdwcm9tcHRfZXhwaXJhdGlvbl9zdGFydF9kYXRlJykgLiAnOicsICRzbWFydHktPmZldGNoKCdldmFsOicuJGZpZWxkKSk7DQovLyAgICAgICAgcmV0dXJuICRyOyAgICAgICAgDQovLyAgICAgIH0NCi8vICAgICAgYnJlYWs7DQovLyAgICAgIA0KLy8gICAgICBjYXNlICdleHBpcmF0aW9uX3N0YXJ0X3RpbWUnOg0KLy8gICAgICB7DQovLyAgICAgICAgJHZhbHVlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2V4cGlyYXRpb25fc3RhcnRfZGF0ZScpOw0KLy8gICAgICAgICRmaWVsZCA9ICd7aHRtbF9zZWxlY3RfdGltZSAgcHJlZml4PVwnU3RhcnRUaW1lX1wnIHRpbWU9JyAuICR2YWx1ZSAuJ30nOw0KLy8gICAgICAgICRyID0gYXJyYXkgKCRtb2QtPkxhbmcoJ3Byb21wdF9leHBpcmF0aW9uX3N0YXJ0X3RpbWUnKSAuICc6JywgJHNtYXJ0eS0+ZmV0Y2goJ2V2YWw6Jy4kZmllbGQpKTsNCi8vICAgICAgICByZXR1cm4gJHI7ICAgICAgICANCi8vICAgICAgfQ0KLy8gICAgICBicmVhazsNCiAgICAgICAgICANCiAgICAgIGNhc2UgJ2V4cGlyYXRpb25fZW5kX2RhdGUnOg0KICAgICAgew0KICAgICAgICAkdmFsdWUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnZXhwaXJhdGlvbl9lbmRfZGF0ZScpOw0KICAgICAgICAkZmllbGQgPSAne2h0bWxfc2VsZWN0X2RhdGUgIHByZWZpeD1cJ0VuZERhdGVfXCcgZmllbGRfb3JkZXI9XCdETVlcJyBzdGFydF95ZWFyPVwnLTFcJyBlbmRfeWVhcj1cJysxMDBcJyB0aW1lPScgLiAkdmFsdWUgLid9JzsNCiAgICAgICAgJHIgPSBhcnJheSAoJG1vZC0+TGFuZygncHJvbXB0X2V4cGlyYXRpb25fZW5kX2RhdGUnKSAuICc6JywgJHNtYXJ0eS0+ZmV0Y2goJ2V2YWw6Jy4kZmllbGQpKTsNCiAgICAgICAgcmV0dXJuICRyOyAgICANCiAgICAgIH0NCiAgICAgIGJyZWFrOw0KICAgIA0KICAgICAgY2FzZSAnZXhwaXJhdGlvbl9lbmRfdGltZSc6DQogICAgICB7DQogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdleHBpcmF0aW9uX2VuZF9kYXRlJyk7DQogICAgICAgICRmaWVsZCA9ICd7aHRtbF9zZWxlY3RfdGltZSAgcHJlZml4PVwnRW5kVGltZV9cJyB0aW1lPScgLiAkdmFsdWUgLid9JzsNCiAgICAgICAgJHIgPSBhcnJheSAoJG1vZC0+TGFuZygncHJvbXB0X2V4cGlyYXRpb25fZW5kX3RpbWUnKSAuICc6JywgJHNtYXJ0eS0+ZmV0Y2goJ2V2YWw6Jy4kZmllbGQpKTsNCiAgICAgICAgcmV0dXJuICRyOyAgICAgDQogICAgICB9DQogICAgICBicmVhazsNCiAgICAgICANCiAgICAgIGNhc2UgJ2V4cGlyZWQnOg0KICAgICAgew0KICAgICAgICAkd2FybmluZ2ltZyA9ICc8aW1nIGFsdD0iJw0KICAgICAgICAgICAgICAgICAgICAgIC4gJG1vZC0+TGFuZygnbm9fYXR0cnNfd2FybmluZycpDQogICAgICAgICAgICAgICAgICAgICAgLiAnIiBzcmM9IicNCiAgICAgICAgICAgICAgICAgICAgICAuICR0aGlzLT5HZXRXYXJuaW5nSW1hZ2UoKQ0KICAgICAgICAgICAgICAgICAgICAgIC4gJyIgLz4nOw0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAkd2FybmluZyA9ICR3YXJuaW5naW1nIC4gJyAnIC4gJG1vZC0+TGFuZygnd2FybmluZ19wcm9tcHRfZXhwaXJlZCcpOw0KICAgICAgICANCiAgICAgICAgJGdsb2JhbCA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ1VzZUV4cERhdGUnLCBGQUxTRSk7DQogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdleHBpcmVkJyk7DQogICAgICAgICRyID0gYXJyYXkgKA0KICAgICAgICAgICAgICAgICAgICAgICc8bGFiZWwgZm9yPSJpbl9leHBpcmVkIj4nDQogICAgICAgICAgICAgICAgICAgICAgLiAkbW9kLT5MYW5nKCdwcm9tcHRfZXhwaXJlZCcpDQogICAgICAgICAgICAgICAgICAgICAgLiAnOjwvbGFiZWw+JywNCiAgICAgICAgICAgICAgICAgICAgICAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZXhwaXJlZCIgdmFsdWU9IjAiLz4NCiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImluX2V4cGlyZWQiIGNsYXNzPSJwYWdlY2hlY2tib3giIHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iMSIgbmFtZT0iZXhwaXJlZCInDQogICAgICAgICAgICAgICAgICAgICAgLiAoJHZhbHVlID8gJyBjaGVja2VkID0gImNoZWNrZWQiJyA6JycgKQ0KICAgICAgICAgICAgICAgICAgICAgIC4gJyAvPicsDQogICAgICAgICAgICAgICAgICAgICAgJG1vZC0+TGFuZygnaGVscF9wcm9tcHRfZXhwaXJlZCcpDQogICAgICAgICAgICAgICAgICAgICAgLiAoJGdsb2JhbCA/ICcnIDooICc8YnIgLz48ZW0+JyAuICR3YXJuaW5nIC4gJzwvZW0+JyApICkNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgcmV0dXJuICRyOw0KICAgICAgfQ0KICAgIA0KICAgIH0NCiAgICANCiAgfQ0KDQogIGZ1bmN0aW9uIFNob3coJHBhcmFtPScnKQ0KICB7DQogICAgJHR4dCA9ICcnOw0KICAgICRjbnRzID0gcGFyZW50OjpTaG93KCRwYXJhbSk7DQoNCiAgICBpZiggJHBhcmFtICE9ICdjb250ZW50X2VuJyAmJiAkcGFyYW0gIT0gJ2NvbnRlbnQnICkgDQogICAgew0KICAgICAgLy8gbXVzdCBiZSBkaXNwbGF5aW5nIHNvbWUgb3RoZXIgYmxvY2suDQogICAgICByZXR1cm4gJGNudHM7DQogICAgfQ0KICAgIA0KICAgICRtb2QgPSAkdGhpcy0+Z2V0X21vZCgpOw0KICAgICRnbG9iYWwgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdVc2VFeHBEYXRlJywgRkFMU0UpOw0KICAgICRsb2NhbCA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCd1c2VfZXhwaXJhdGlvbl9kYXRlJyk7DQogICAgDQogICAgaWYgKCAoJGdsb2JhbCAmJiAkbG9jYWwpICkgIyBzbyB3ZSBoYXZlIHRvIHByb2Nlc3MgZXhwaXJhdGlvbiBkYXRlcw0KICAgIHsNCiAgICAgICR0eHQgPSAkdGhpcy0+UHJvY2Vzc0V4cGlyYXRpb24oKTsNCiAgICB9DQogICAgZWxzZSAjIHdlIGRvbid0IGhhdmUgdG8gcHJvY2VzcyBleHBpcmF0aW9uIGRhdGVzDQogICAgew0KICAgICAgJHR4dCAuPSAkdGhpcy0+X2RvU2hvdygpOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHR4dDsNCiAgfQ0KICANCiAgZnVuY3Rpb24gX2RvU2hvdygpDQogIHsNCiAgICAkcGFyYW1zID0gYXJyYXkoKTsNCiAgICAkdGhpcy0+UG9wdWxhdGVQYXJhbXMoJHBhcmFtcyk7DQogICAgJHBhcmFtc1snX2RlZmF1bHRfY250J10gPSAkY250czsNCiAgICByZXR1cm4gJHRoaXMtPlJlbmRlckNvbnRlbnQoJHBhcmFtcyk7DQogIH0NCg0KICAvKioNCiAgKiAjDQogICogDQogICogQHBhcmFtIG1peGVkICRwYXJhbXMNCiAgKi8NCiAgZnVuY3Rpb24gUmVuZGVyQ29udGVudCgkcGFyYW1zKQ0KICB7DQogICAgcmV0dXJuICcnOw0KICB9DQogIA0KICBmdW5jdGlvbiBQcm9kdWNlRXhwaXJlZENvbnRlbnQoJEV4cGlyeUFjdGlvbikNCiAgew0KICAgICRtb2QgPSAkdGhpcy0+Z2V0X21vZCgpOyAgIA0KICAgIA0KICAgIHN3aXRjaCAoJEV4cGlyeUFjdGlvbikgDQogICAgew0KICAgICAgIGNhc2UgMDoNCiAgICAgICB7DQogICAgICAgICAjIElmIHdlIGdldCBoZXJlIHNvbWV0aGluZyBnb25lIHdyb25nLi4uIHdlIGp1c3Qgc2VuZCB0byBfZG9FeHBpcmUgYWdhaW4uLi4NCiAgICAgICAgICR0aGlzLT5fZG9FeHBpcmUoJEV4cGlyeUFjdGlvbiwgZmFsc2UsIHRydWUpOw0KICAgICAgICAgIyBhbmQgaG9wZSBpdCBpcyBmb3IgZ29vZCB0aGlzIHRpbWUuLi4gDQogICAgICAgfQ0KICAgICAgIGJyZWFrOw0KDQogICAgICAgY2FzZSAxOg0KICAgICAgIHsNCiAgICAgICAgICMgaGVyZSB3ZSBhc3N1bWUgYWxpYXMgZXhpc3RzIGFuZCBpcyB2YWxpZA0KICAgICAgICAgJHJlZGlyZWN0ID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnZXhwaXJlX3JlZGlyZWN0X2FsaWFzJyk7DQogICAgICAgICAkdXJsID0gY2F0Q29udGVudE9wZXJhdGlvbnM6OlVSTGZyb21BbGlhcygkcmVkaXJlY3QpOw0KICAgICAgICAgY2F0Q29udGVudE9wZXJhdGlvbnM6OkVycm9ySGFuZGxlcjMwMSgkdXJsKTsNCiAgICAgICB9DQogICAgICAgYnJlYWs7DQogICAgICAgDQogICAgICAgY2FzZSAyOg0KICAgICAgIHsNCiAgICAgICAgICMgaGVyZSB3ZSBhc3N1bWUgYWxpYXMgZXhpc3RzIGFuZCBpcyB2YWxpZA0KICAgICAgICAgJHJlZGlyZWN0ID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnZXhwaXJlX3JlZGlyZWN0X2FsaWFzJyk7DQogICAgICAgICAkbW9kLT5yZWRpcmVjdENvbnRlbnQoJHJlZGlyZWN0KTsNCiAgICAgICB9DQogICAgICAgYnJlYWs7DQoNCiAgICAgICBjYXNlIDM6DQogICAgICAgew0KICAgICAgICAgJHRleHQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdFeHBpcmF0aW9uVGV4dCcsICR0aGlzLT5MYW5nKCdkZWZhdWx0X2V4cF90ZXh0JykgKTsgICANCiAgICAgICB9DQogICAgICAgYnJlYWs7DQogICAgfQ0KDQogICAgICAjIHdlIG9ubHkgYXJyaXZlIGhlcmUgaWYgbm8gcmVkaXJlY3Rpb24gb3IgMzAxIHN0YXR1cyBvY2N1cg0KICAgICAgcmV0dXJuICR0ZXh0OyANCiAgfQ0KICANCiAgZnVuY3Rpb24gUHJvY2Vzc0V4cGlyYXRpb24oKQ0KICB7DQogICAgJG1vZCA9ICR0aGlzLT5nZXRfbW9kKCk7DQogICAgJEV4cGlyeUFjdGlvbiA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ09uRXhwaXJ5QWN0aW9uJywgMyk7DQogICAgJGV4cGlyZWQgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnZXhwaXJlZCcpOw0KICAgICRFeHBpcmF0aW9uU3RhcnREYXRlID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2V4cGlyYXRpb25fc3RhcnRfZGF0ZScpOw0KICAgICRFeHBpcmF0aW9uRW5kRGF0ZSA9ICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdleHBpcmF0aW9uX2VuZF9kYXRlJyk7DQogICAgIyR1bl9leHBpcmUgPSAgY2F0Q29udGVudE9wZXJhdGlvbnM6OnRvX1VuRXhwaXJlKCRFeHBpcmF0aW9uU3RhcnREYXRlKTsNCiAgICAkZXhwaXJlID0gY2F0Q29udGVudE9wZXJhdGlvbnM6OnRvX0V4cGlyZSgkRXhwaXJhdGlvbkVuZERhdGUpOw0KICAgIA0KLy8gICAgZWNobyAnPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT48YnI+JzsNCi8vICAgIGVjaG8gJ0VYUF9BQ1QgPSAnIC4gJEV4cGlyeUFjdGlvbiAuICc8YnI+JzsNCi8vICAgIGVjaG8gJ0V4cCA9ICcgLiAoJGV4cGlyZWQgPyAndHJ1ZScgOiAnZmFsc2UnICkgLiAnPGJyPic7DQovLyAgICBlY2hvICdFeHAgc3QgZGF0ZSA9ICcgLiAkRXhwaXJhdGlvblN0YXJ0RGF0ZSAuICc8YnI+JzsNCi8vICAgIGVjaG8gJ0V4cCBlbmQgZGF0ZSA9ICcgLiAkRXhwaXJhdGlvbkVuZERhdGUgLiAnPGJyPic7DQovLyAgICBlY2hvICdFeHAgZGlmZiBkYXRlID0gJyAuICgkRXhwaXJhdGlvbkVuZERhdGUgLSAkRXhwaXJhdGlvblN0YXJ0RGF0ZSkgLiAnPGJyPic7DQovLyAgICBlY2hvICdub3cgPSAnIC4gdGltZSgpIC4gJzxicj4nOw0KLy8gICAgZWNobyAnRW5kIGRpZmYgPSAnIC4gKCAkRXhwaXJhdGlvbkVuZERhdGUgLSB0aW1lKCkgKSAuICc8YnI+JzsNCi8vICAgIGVjaG8gJ1N0YXJ0IGRpZmYgPSAnIC4gKCAkRXhwaXJhdGlvblN0YXJ0RGF0ZSAtIHRpbWUoKSApIC4gJzxicj4nOw0KLy8gICAgZWNobyAnVW5FeHAgPSAnIC4gKCR1bl9leHBpcmUgPyAndHJ1ZScgOiAnZmFsc2UnICkgLiAnPGJyPic7DQovLyAgICBlY2hvICdUbyBFeHAgPSAnIC4gKCRleHBpcmUgPyAndHJ1ZScgOiAnZmFsc2UnICkgLiAnPGJyPic7DQovLyAgICBlY2hvICc8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPjxicj4nOw0KICAgIA0KICAgIA0KLy8gICAgICANCi8vICAgIGlmICgkRXhwaXJhdGlvblN0YXJ0RGF0ZSA+PSAkRXhwaXJhdGlvbkVuZERhdGUpDQovLyAgICB7DQovLyAgICAgICMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuDQovLyAgICAgIGVjaG8gJ0V4cGlyYXRpb24gRGF0ZSBSYW5nZSBFUlJPUiEnOw0KLy8gICAgICBleGl0Ow0KLy8gICAgfQ0KDQogICAgDQogICAgaWYgKCRleHBpcmVkKSAjIGFscmVhZHkgZXhwaXJlZDogZWl0aGVyIGlzIG1hcmtlZCBmb3IgdW5fZXhwaXJlZCBvciBqdXN0IGtlZXAgZXhwaXJlZCANCiAgICB7DQogICAgICAvKiAgVE9ETw0KICAgICAgaWYgKCR1bl9leHBpcmUpDQogICAgICB7DQogICAgICAgICR0aGlzLT5fZG9VbkV4cGlyZShmYWxzZSwgdHJ1ZSk7ICANCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgICovDQogICAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+UHJvZHVjZUV4cGlyZWRDb250ZW50KCRFeHBpcnlBY3Rpb24pOw0KICAgICAgfQ0KDQogICAgfQ0KICAgIGVsc2UgIyBub3QgZXhwaXJlZD8gb2ssIHNvIHRlc3QgZm9yIGV4cGlyYXRpb24gb3Iga2VlcCBpdCBvbg0KICAgIHsNCiAgICAgIA0KICAgICAgaWYgKCRleHBpcmUpDQogICAgICB7DQogICAgICAgICR0aGlzLT5fZG9FeHBpcmUoJEV4cGlyeUFjdGlvbiwgZmFsc2UsIHRydWUpOyAgDQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgICR0eHQgLj0gJHRoaXMtPl9kb1Nob3coKTsNCiAgICAgIH0gDQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdHh0Ow0KICB9ICANCiAgDQogIA0KICAjIE1pc2MNCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfZG9FeHBpcmUoJG1vZGUsICRlZGl0aW5nID0gZmFsc2UsICR0cmlnZ2VyID0gZmFsc2UpDQogIHsNCg0KICAgICRtb2QgPSAkdGhpcy0+Z2V0X21vZCgpOw0KICAgIC8qKg0KICAgICogQWN0aW9ucyA6DQogICAgKiAgMCAtIERlYWN0aXZhdGUgYW5kIHRocm93cyBhIDQwNCkuDQogICAgKiAgICAgKE5vdGU6IHRoaXMgaXMgcGVybWFuZW50IGRlYWQgYXMgZmFyIGFzIGF1dG9tYXRpb24gZ29lcy4uLi4gDQogICAgKiAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHdvbid0IGdldCBzaG93KCkgY2FsbGVkIGlmIG5vdCBhY3RpdmUpDQogICAgKiAgMSAtIHJlZGlyZWN0IDMwMSB0byBhbGlhcw0KICAgICogIDIgLSBSZWRpcmVjdCB0byBhbGlhcw0KICAgICogIDMgLSBSZXBsYWNlIHRoZSBjb250ZW50IGJ5IGEgdGV4dA0KICAgICovIA0KDQogICAgDQogICAgIyBuZWVkcyBvcHRpbWl6aW5nLi4uLg0KICAgIHN3aXRjaCAoJG1vZGUpIA0KICAgIHsNCiAgICAgICBjYXNlIDA6DQogICAgICAgew0KICAgICAgICAgJHRoaXMtPm1BY3RpdmUgPSBmYWxzZTsNCiAgICAgICAgICR0aGlzLT5tU2hvd0luTWVudSA9IGZhbHNlOw0KICAgICAgICAgJHRoaXMtPmNhdEV4cGlyZWQgPSB0cnVlOw0KICAgICAgICAgJHRoaXMtPlVwZGF0ZSgpOw0KICAgICAgICAgJG1vZC0+Y2xlYXJfY2FjaGUoJHRoaXMtPm1JZCk7DQogICAgICAgICBpZiAoJHRyaWdnZXIpeyR0aGlzLT5fZG9UcmlnZ2VyKCk7fQ0KICAgICAgICAgJG1vZC0+QXVkaXQoJHRoaXMtPm1JZCwgJHRoaXMtPm1UeXBlLCAnRXhwaXJlZCcpOw0KICAgICAgICAgI2J5IHJlZGlyZWN0aW5nIHRvIGl0c2VsZiB3ZSBsZWF2ZSB0aGUgaGFuZGxpbmcgb2YgdGhlIDQwMSB0byB0aGUgQ01TTVMgQ29yZSBzZXR0aW5ncw0KICAgICAgICAgaWYgKCEkZWRpdGluZyl7JG1vZC0+cmVkaXJlY3RDb250ZW50KCR0aGlzLT5tQWxpYXMpO30NCiAgICAgICB9DQogICAgICAgYnJlYWs7DQogICAgICAgDQogICAgICAgY2FzZSAxOg0KICAgICAgIHsNCiAgICAgICAgICR0aGlzLT5tU2hvd0luTWVudSA9IGZhbHNlOw0KICAgICAgICAgJHRoaXMtPmNhdEV4cGlyZWQgPSB0cnVlOw0KICAgICAgICAgJHRoaXMtPlVwZGF0ZSgpOw0KICAgICAgICAgJG1vZC0+Y2xlYXJfY2FjaGUoJHRoaXMtPm1JZCk7DQogICAgICAgICBpZiAoJHRyaWdnZXIpeyR0aGlzLT5fZG9UcmlnZ2VyKCk7fQ0KICAgICAgICAgJG1vZC0+QXVkaXQoJHRoaXMtPm1JZCwgJHRoaXMtPm1UeXBlLCAnRXhwaXJlZCcpOw0KICAgICAgICAgI3JlZGlyZWN0Pw0KICAgICAgICAgaWYgKCEkZWRpdGluZyl7JG1vZC0+cmVkaXJlY3RDb250ZW50KCR0aGlzLT5tQWxpYXMpO30NCiAgICAgICB9DQogICAgICAgYnJlYWs7DQogICAgICAgDQogICAgICAgY2FzZSAyOg0KICAgICAgIHsNCiAgICAgICAgICR0aGlzLT5tU2hvd0luTWVudSA9IGZhbHNlOw0KICAgICAgICAgJHRoaXMtPmNhdEV4cGlyZWQgPSB0cnVlOw0KICAgICAgICAgJHRoaXMtPlVwZGF0ZSgpOw0KICAgICAgICAgJG1vZC0+Y2xlYXJfY2FjaGUoJHRoaXMtPm1JZCk7DQogICAgICAgICBpZiAoJHRyaWdnZXIpeyR0aGlzLT5fZG9UcmlnZ2VyKCk7fQ0KICAgICAgICAgJG1vZC0+QXVkaXQoJHRoaXMtPm1JZCwgJHRoaXMtPm1UeXBlLCAnRXhwaXJlZCcpOw0KICAgICAgICAgI3JlZGlyZWN0Pw0KICAgICAgICAgaWYgKCEkZWRpdGluZyl7JG1vZC0+cmVkaXJlY3RDb250ZW50KCR0aGlzLT5tQWxpYXMpO30NCiAgICAgICB9DQogICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIA0KICAgICAgIGNhc2UgMzoNCiAgICAgICB7DQogICAgICAgICAkdGhpcy0+bVNob3dJbk1lbnUgPSB0cnVlOw0KICAgICAgICAgJHRoaXMtPmNhdEV4cGlyZWQgPSB0cnVlOw0KICAgICAgICAgJHRoaXMtPlVwZGF0ZSgpOw0KICAgICAgICAgJG1vZC0+Y2xlYXJfY2FjaGUoJHRoaXMtPm1JZCk7DQogICAgICAgICBpZiAoJHRyaWdnZXIpeyR0aGlzLT5fZG9UcmlnZ2VyKCk7fQ0KICAgICAgICAgJG1vZC0+QXVkaXQoJHRoaXMtPm1JZCwgJHRoaXMtPm1UeXBlLCAnRXhwaXJlZCcpOw0KICAgICAgICAgI3JlZGlyZWN0Pw0KICAgICAgICAgaWYgKCEkZWRpdGluZyl7JG1vZC0+cmVkaXJlY3RDb250ZW50KCR0aGlzLT5tQWxpYXMpO30NCiAgICAgICB9DQogICAgICAgYnJlYWs7DQogICAgfQ0KICB9DQogIA0KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvVHJpZ2dlcigpDQogIHsNCiAgICAkbW9kID0gJHRoaXMtPmdldF9tb2QoKTsNCiAgICAkbm93ID0gdGltZSgpOw0KICAgIA0KICAgICRldmVudF9wYXJhbXMgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCcgICAgID0+ICR0aGlzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aW1lc3RhbXAnICAgPT4gJG5vdw0KICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAkbW9kLT5TZW5kRXZlbnQoJ09uQ29udGVudEVuZERhdGUnLCAkZXZlbnRfcGFyYW1zKTsgDQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBfZG9VbkV4cGlyZSgkZWRpdGluZyA9IGZhbHNlLCAkdHJpZ2dlciA9IGZhbHNlKQ0KICB7DQogICANCiAgICRtb2QgPSAkdGhpcy0+Z2V0X21vZCgpOw0KICAgJHRoaXMtPm1TaG93SW5NZW51ID0gdHJ1ZTsNCiAgICR0aGlzLT5jYXRFeHBpcmVkID0gZmFsc2U7DQogICAkdGhpcy0+VXBkYXRlKCk7DQogICAkbW9kLT5jbGVhcl9jYWNoZSgkdGhpcy0+bUlkKTsNCiAgICANCiAgICBpZiAoJHRyaWdnZXIpDQogICAgeyAjIHdlIHRyaWdnZXIgYW4gZXZlbnQNCiAgICANCiAgICAgICRldmVudF9wYXJhbXMgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50JyAgICAgPT4gJHRoaXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGltZXN0YW1wJyAgID0+ICRub3cNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgJG1vZC0+U2VuZEV2ZW50KCdPbkNvbnRlbnRTdGFydERhdGUnLCAkZXZlbnRfcGFyYW1zKTsNCiAgICB9DQogICAgDQogICAgJG1vZC0+QXVkaXQoJHRoaXMtPm1JZCwgJHRoaXMtPm1UeXBlLCAnVW4tRXhwaXJlZCcpOw0KICAgIGRpZSgnZHVoJyk7DQogICAgI2lmICghJGVkaXRpbmcpeyRtb2QtPnJlZGlyZWN0Q29udGVudCgkdGhpcy0+bUFsaWFzKTt9DQogIH0NCiAgDQogIHByb3RlY3RlZCBmdW5jdGlvbiBHZXRXYXJuaW5nSW1hZ2UoKQ0KICB7DQogICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOw0KICAgIHJldHVybiAkY29uZmlnWydyb290X3VybCddDQogICAgICAgICAgIC4gJy9hZG1pbi90aGVtZXMvJw0KICAgICAgICAgICAuICR0aGlzLT5HZXRBZG1pblRoZW1lTmFtZSgpDQogICAgICAgICAgIC4gJy9pbWFnZXMvaWNvbnMvc3lzdGVtL3dhcm5pbmcuZ2lmJzsNCiAgfQ0KICANCiAgZnVuY3Rpb24gU2F2ZSgpDQogIHsNCiAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgnZXhwaXJlZCcsICR0aGlzLT5jYXRFeHBpcmVkKTsNCiAgICBwYXJlbnQ6OlNhdmUoKTsNCiAgfQ0KICANCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIFVwZGF0ZSgpDQogIHsNCiAgICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgnZXhwaXJlZCcsICR0aGlzLT5jYXRFeHBpcmVkKTsNCiAgICBwYXJlbnQ6OlVwZGF0ZSgpOw0KICB9DQoNCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIEluc2VydCgpDQogIHsNCiAgICBwYXJlbnQ6Okluc2VydCgpOw0KICB9DQogIA0KICANCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.catContentOperations.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmNsYXNzIGNhdENvbnRlbnRPcGVyYXRpb25zDQp7DQogIHByaXZhdGUgc3RhdGljICRfY21zOw0KICBwcml2YXRlIHN0YXRpYyAkX21vZDsNCiAgcHJpdmF0ZSBzdGF0aWMgJF9kYjsNCiAgcHJpdmF0ZSBzdGF0aWMgJF9pbml0aWFsaXplZCA9IEZBTFNFOw0KICANCiAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2luaXRpYWxpemUoKQ0KICB7DQogICAgaWYoIXNlbGY6OiRfaW5pdGlhbGl6ZWQpDQogICAgew0KICAgICAgc2VsZjo6JF9jbXMgPSBjbXNtcygpOw0KICAgICAgc2VsZjo6JF9tb2QgPSBzZWxmOjokX2Ntcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NhdGFsb2dlcicpOw0KICAgICAgc2VsZjo6JF9kYiA9IHNlbGY6OiRfY21zLT5HZXREYigpOw0KICAgICAgc2VsZjo6JF9pbml0aWFsaXplZCA9IFRSVUU7IA0KICAgIH0gDQogIH0NCiAgDQogICMgZGVwcmVjYXRlZA0KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfZ2V0TW9kKCkNCiAgew0KICAgIHNlbGY6Ol9pbml0aWFsaXplKCk7DQogICAgcmV0dXJuIHNlbGY6OiRfbW9kOyANCiAgfSAgDQogIA0KICAjZGVwcmVjYXRlZA0KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfZ2V0REIoKQ0KICB7DQogICAgc2VsZjo6X2luaXRpYWxpemUoKTsNCiAgICByZXR1cm4gc2VsZjo6JF9kYjsgICAgDQogIH0NCiAgIA0KICBzdGF0aWMgZnVuY3Rpb24gJkdldENvbnRlbnRGcm9tUGFyYW1zKCYkcGFyYW1zKQ0KICB7DQogICAgJGdDbXM9IGNtc21zKCk7DQogICAgJG1vZCA9IHNlbGY6Ol9nZXRNb2QoKTsNCiAgICAkdmFycyA9ICRtb2QtPkdldFZhcmlhYmxlcygpOyAjIG5lZWQgYSBuZXcgd2F5IHRvIGdldCB0aGlzLi4uLg0KICAgICRobSA9ICRnQ21zLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7DQogICAgDQogICAgaWYgKCBpc3NldCgkcGFyYW1zWydhbGlhcyddKSAmJiAkcGFyYW1zWydhbGlhcyddID09ICcvJyApDQogICAgeyAjIGFsaWFzIGlzIHJvb3QgKC8pDQogICAgICAkY29udGVudCA9ICRobS0+Z2V0RmxhdExpc3QoKTsNCiAgICAgICRjdXJIaWVyRGVwdGggPSBpc3NldCgkcGFyYW1zWydzdGFydF9kZXB0aCddKSA/ICRwYXJhbXNbJ3N0YXJ0X2RlcHRoJ10gOiAtMTsNCiAgICAgICRjdXJIaWVyYXJjaHkgPSAnJzsNCiAgICAgICRjdXJIaWVyTGVuID0gMDsNCiAgICAgICRjdXJQYWdlID0gbmV3IENvbnRlbnQoKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsgIyBlaXRoZXIgYWxpYXMgaXMgTk9UIHNldCBvciBub3Qgcm9vdCBvciBuZWl0aGVyDQogICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbnRlbnRfaWQnXSkpDQogICAgICAgeyAjIHdlIGhhdmUgYSBjb250ZW50X2lkDQogICAgICAgICAgJGN1clBhZ2VJRCA9ICR2YXJzWyRwYXJhbXNbJ2NvbnRlbnRfaWQnXV07DQogICAgICAgICAgJGN1clBhZ2VOb2RlID0gJGhtLT5zdXJlR2V0Tm9kZUJ5SWQoJGN1clBhZ2VJRCk7DQogICAgICAgICAgJGN1clBhZ2UgPSAkY3VyUGFnZU5vZGUtPkdldENvbnRlbnQoKTsNCiAgICAgICB9DQogICAgICAgZWxzZWlmIChpc3NldCgkcGFyYW1zWydhbGlhcyddKSkNCiAgICAgICB7ICMgd2UgaGF2ZSBhbiBhbGlhcw0KICAgICAgICAgICRjdXJQYWdlTm9kZSA9ICRobS0+c3VyZUdldE5vZGVCeUFsaWFzKCRwYXJhbXNbJ2FsaWFzJ10pOw0KICAgICAgICAgICRjdXJQYWdlID0gJGN1clBhZ2VOb2RlLT5HZXRDb250ZW50KCk7DQogICAgICAgICAgJGN1clBhZ2VJRCA9ICRjdXJQYWdlLT5JZCgpOw0KICAgICAgIH0NCiAgICAgICBlbHNlDQogICAgICAgeyANCiAgICAgICAgICAkY2kgPSAkZ0Ntcy0+Z2V0X2NvbnRlbnRfaWQoKTsgDQogICAgICAgICBpZiggaXNzZXQoJGNpKSApDQogICAgICAgICB7ICMgbm8gaWQsIG5vIGFsaWFzOiBnZXQgY29udGVudF9pZCBmcm9tIENNU01TIGFwcGxpY2F0aW9uIHZhcmlhYmxlcyA6IGRlcHJlY2F0ZWQgaW4gY29yZS4uLi4uDQogICAgICAgICAgICAkY3VyUGFnZUlEID0gJGNpOw0KICAgICAgICAgICAgJGN1clBhZ2VOb2RlID0gJGhtLT5zdXJlR2V0Tm9kZUJ5SWQoJGN1clBhZ2VJRCk7DQogICAgICAgICAgICAkY3VyUGFnZSA9ICRjdXJQYWdlTm9kZS0+R2V0Q29udGVudCgpOw0KICAgICAgICAgfQ0KICAgICAgIH0gIA0KICAgICAgDQogICAgICAgJGN1ckhpZXJhcmNoeSA9ICRjdXJQYWdlLT5IaWVyYXJjaHkoKTsNCiAgICAgICAkY3VySGllckxlbiA9IHN0cmxlbigkY3VySGllcmFyY2h5KTsNCiAgICAgICAkY3VySGllckRlcHRoID0gc3Vic3RyX2NvdW50KCRjdXJIaWVyYXJjaHksICcuJyk7ICAgICANCiAgICAgICAkY29udGVudCA9IHNlbGY6OmdldFN1YkNvbnRlbnQoJGN1clBhZ2VJRCk7DQogICAgfSAgDQoNCiAgICAkcmV0ID0gYXJyYXkoJGNvbnRlbnQsICRjdXJQYWdlLCAkY3VySGllcmFyY2h5LCAkY3VySGllckxlbiwgJGN1ckhpZXJEZXB0aCk7DQogICAgcmV0dXJuICRyZXQ7DQogIH0gDQogIA0KICBzdGF0aWMgZnVuY3Rpb24gJmdldFN1YkNvbnRlbnQoJHN0YXJ0Tm9kZUlkKQ0KICB7DQogICAgJGdDbXMgPSBjbXNtcygpOw0KICAgICRjb250ZW50ID0gYXJyYXkoKTsNCiAgICAkaG0gPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOw0KICAgIC8qIFdvcmtzIHdpdGggbmV3IGFkZGl0aW9uIHRvIFRyZWUsIGJ1dCBnZXRGbGF0TGlzdCBpcyBkZWZhdWx0DQogICAgICRybiA9ICRobS0+c3VyZUdldE5vZGVCeUlkKCRzdGFydE5vZGVJZCk7IA0KICAgICAkY291bnQgPSAwOw0KICAgICAkaG0tPmdldEZsYXR0ZW5lZENoaWxkcmVuKCRybiwgJGNvbnRlbnQsICRjb3VudCk7DQogICAgKi8NCiAgICAkY29udGVudCA9ICRobS0+Z2V0RmxhdExpc3QoKTsNCiAgICByZXR1cm4gJGNvbnRlbnQ7DQogIH0NCg0KICBzdGF0aWMgZnVuY3Rpb24gJmdldEFsbENvbnRlbnQoKQ0KICB7DQogICAgJGdDbXMgPSBjbXNtcygpOw0KICAgICRjb250ZW50ID0gYXJyYXkoKTsNCiAgICAkaG0gPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOw0KICAgICRybiA9ICRobS0+R2V0Um9vdE5vZGUoKTsgDQogICAgJGNvdW50ID0gMDsNCiAgICAkaG0tPmdldEZsYXR0ZW5lZENoaWxkcmVuKCRybiwgJGNvbnRlbnQsICRjb3VudCk7DQogICAgcmV0dXJuICRjb250ZW50Ow0KICB9DQoNCiAgc3RhdGljIGZ1bmN0aW9uIGdldENhdGFsb2dJdGVtc0xpc3QoJiRwYXJhbXMpDQogIHsNCiAgICAkbGFzdGNhdCA9ICIiOw0KICAgICRsYXN0Y2F0ZnVsbCA9IG51bGw7DQogICAgDQogICAgbGlzdCgkY29udGVudCwgJGN1clBhZ2UsICRjdXJIaWVyYXJjaHksICRjdXJIaWVyTGVuLCAkY3VySGllckRlcHRoKSA9IHNlbGY6OkdldENvbnRlbnRGcm9tUGFyYW1zKCRwYXJhbXMpOw0KICAgIA0KICAgICRjYXRlZ29yeUl0ZW1zID0gYXJyYXkoKTsNCg0KICAgIGZvcmVhY2ggKCRjb250ZW50IGFzICR0aGlzUGFnZSkNCiAgICB7DQogICAgICAkdGhpc3BhZ2Vjb250ZW50ID0gJHRoaXNQYWdlLT5HZXRDb250ZW50KCk7DQoNCiAgICAgIGlmKCBlbXB0eSgkdGhpc3BhZ2Vjb250ZW50KSApIGNvbnRpbnVlOyANCiAgICAgIGlmKCAhc2VsZjo6X0lzVmFsaWQoJHRoaXNwYWdlY29udGVudCkgKSBjb250aW51ZTsgDQogICAgICBpZiggISR0aGlzcGFnZWNvbnRlbnQtPklkKCkgPT0gJGN1clBhZ2UtPklkKCkgKSBjb250aW51ZTsNCiAgICAgICAgICAgIA0KICAgICAgaWYgKCR0aGlzcGFnZWNvbnRlbnQtPlR5cGUoKSA9PSAnY29udGVudGFsaWFzJykNCiAgICAgIHsNCiAgICAgICAgICR0aGlzcGFnZWNvbnRlbnQgPSAkdGhpc3BhZ2Vjb250ZW50LT5HZXRBbGlhc0NvbnRlbnQoKTsNCiAgICAgICAgICRjdXJIaWVyTGVuID0gc3RybGVuKCRjdXJIaWVyYXJjaHkpOw0KICAgICAgICAgJGN1ckhpZXJEZXB0aCA9IHN1YnN0cl9jb3VudCgkY3VySGllcmFyY2h5LCAnLicpOw0KICAgICAgfQ0KICAgICAgDQogICAgICBpZiAoJHRoaXNwYWdlY29udGVudC0+VHlwZSgpID09ICdjYXRhbG9nY2F0ZWdvcnknKQ0KICAgICAgew0KICAgICAgICAkbGFzdGNhdCA9ICR0aGlzcGFnZWNvbnRlbnQtPk5hbWUoKTsNCiAgICAgIH0NCiAgICANCiAgICAgIGlmICggIXNlbGY6Ol9Jc1ZhbGlkVHlwZSgkdGhpc3BhZ2Vjb250ZW50LCAkcGFyYW1zKSApDQogICAgICB7DQogICAgICAgIGNvbnRpbnVlOw0KICAgICAgfQ0KDQogICAgICBpZiAoICEgc2VsZjo6X0lzVmFsaWREZXB0aCgkdGhpc3BhZ2Vjb250ZW50LCAkcGFyYW1zLCAkY3VySGllckRlcHRoLCAkY3VySGllckxlbiwgJGN1ckhpZXJhcmNoeSkgKQ0KICAgICAgew0KICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgfQ0KICAgICANCiAgICAgIC8vIGluIHRoZSBjYXRlZ29yeSwgYW5kIGFwcHJvdmVkIGZvciBhZGRpdGlvbg0KICAgICAgJHRoaXNJdGVtID0gc2VsZjo6aXRlbVRvQXJyYXkoJHRoaXNwYWdlY29udGVudCwgJGxhc3RjYXQpOw0KICAgICAgYXJyYXlfcHVzaCgkY2F0ZWdvcnlJdGVtcywgJHRoaXNJdGVtKTsNCiAgICB9DQoNCiAgICByZXR1cm4gYXJyYXkoJGN1clBhZ2UsICRjYXRlZ29yeUl0ZW1zKTsNCiAgfQ0KDQogIHN0YXRpYyBmdW5jdGlvbiBnZXRDYXRhbG9nSXRlbXNJRExpc3QoJiRwYXJhbXMpDQogIHsNCiAgICAkZ0NtcyA9IGNtc21zKCk7DQogICAgJGRiID0gJGdDbXMtPkdldERiKCk7DQogICAgJHJldCA9IGFycmF5KCk7DQogICAgDQogICAgaWYgKCFpc3NldCgkcGFyYW1zWydhbGlhcyddKSB8fCAkcGFyYW1zWydhbGlhcyddPT0nLycpDQogICAgew0KICAgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCdTRUxFQ1QgY29udGVudF9pZCBmcm9tICcgLiBjbXNfZGJfcHJlZml4KCkgLiANCiAgICAgICAgICAgJ2NvbnRlbnQgd2hlcmUgdHlwZT1cJ2NhdGFsb2dpdGVtXCcnKTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICRiYXNlX2hpZXJhcmNoeSA9ICRkYi0+R2V0T25lKCdTRUxFQ1QgaGllcmFyY2h5IGZyb20gJyAuIGNtc19kYl9wcmVmaXgoKSAuIA0KICAgICAgICAgICAnY29udGVudCB3aGVyZSBjb250ZW50X2FsaWFzPT8nLGFycmF5KCRwYXJhbXNbJ2FsaWFzJ10pKTsNCiAgICAgIGlmICghICRiYXNlX2hpZXJhcmNoeSkNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuICRyZXQ7DQogICAgICB9DQogICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJ1NFTEVDVCBjb250ZW50X2lkIGZyb20gJy5jbXNfZGJfcHJlZml4KCkuDQogICAgICAgICAgICdjb250ZW50IHdoZXJlIHR5cGU9XCdjYXRhbG9naXRlbVwnIGFuZCBoaWVyYXJjaHkgTElLRSBcJycgLiAkYmFzZV9oaWVyYXJjaHkgLiAnJVwnJyk7DQogICAgfQ0KICAgIA0KICAgIHdoaWxlICgkZGJyZXN1bHQgIT09IGZhbHNlICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpDQogICAgew0KICAgICAgYXJyYXlfcHVzaCgkcmV0LCRyb3dbJ2NvbnRlbnRfaWQnXSk7DQogICAgfQ0KICAgICAgICANCiAgICByZXR1cm4gJHJldDsNCiAgfQ0KICANCiAgc3RhdGljIGZ1bmN0aW9uICZnZXRDYXRhbG9nSXRlbSgkYWxpYXMpDQogIHsNCiAgICAkZ0NtcyA9IGNtc21zKCk7DQogICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ2F0YWxvZ2VyJyk7DQogICAgJGhtID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsNCiAgICAkcGFnZU5vZGUgPSAkaG0tPnN1cmVHZXROb2RlQnlBbGlhcygkYWxpYXMpOw0KICAgICRwYWdlID0gJHBhZ2VOb2RlLT5HZXRDb250ZW50KCk7DQogICAgJG5vZGUgPSBzZWxmOjppdGVtVG9BcnJheSgkcGFnZSwgJycpOw0KICAgIHJldHVybiAkbm9kZTsNCiAgfQ0KDQogIHN0YXRpYyBmdW5jdGlvbiAmZ2V0Q2F0YWxvZ0l0ZW1CeUlkKCRpZCkNCiAgew0KICAgICRnQ21zID0gY21zbXMoKTsNCiAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDYXRhbG9nZXInKTsNCiAgICAkaG0gPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOw0KICAgICRwYWdlTm9kZSA9ICRobS0+c3VyZUdldE5vZGVCeUlkKCRpZCk7DQogICAgJHBhZ2UgPSAkcGFnZU5vZGUtPkdldENvbnRlbnQoKTsNCiAgICAkbm9kZSA9IHNlbGY6Oml0ZW1Ub0FycmF5KCRwYWdlLCAnJyk7DQogICAgcmV0dXJuICRub2RlOw0KICB9DQoNCg0KICBzdGF0aWMgZnVuY3Rpb24gaXRlbVRvQXJyYXkoJHBhZ2Vjb250ZW50LCAkbGFzdGNhdCkNCiAgew0KICAgICRtb2QgPSBzZWxmOjpfZ2V0TW9kKCk7DQogICAgJHRoaXNJdGVtID0gYXJyYXkoKTsNCiAgICAkY2F0VGh1bWJTaXplID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnY2F0ZWdvcnlfaW1hZ2Vfc2l6ZV90aHVtYm5haWwnLCA5MCk7DQogICAgJGl0ZW1UaHVtYlNpemUgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX3NpemVfY2F0ZWdvcnknLCA3MCk7DQogICAgJG1pc3NpbmdJbWFnZSA9ICRtb2QtPkdldFByZWZlcmVuY2UoJ3Nob3dfbWlzc2luZycsICcxJyk7DQogICAgDQogICAgc3dpdGNoICgkcGFnZWNvbnRlbnQtPlR5cGUoKSkNCiAgICB7DQogICAgICANCiAgICAgIGNhc2UgJ2NhdGFsb2dpdGVtJzoNCiAgICAgIHsNCiAgICAgICAgJHRoaXNJdGVtWydpbWFnZSddID0gY2F0RmlsZXNPcGVyYXRpb25zOjppbWFnZVNwZWMoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFnZWNvbnRlbnQtPkFsaWFzKCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncycsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbVRodW1iU2l6ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICR0aGlzSXRlbVsnaW1hZ2Vfc3JjJ10gPSBjYXRGaWxlc09wZXJhdGlvbnM6OnNyY0ltYWdlU3BlYygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2Vjb250ZW50LT5BbGlhcygpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgfQ0KICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgY2FzZSAnY2F0YWxvZ2NhdGVnb3J5JzoNCiAgICAgIHsNCiAgICAgICAgJHRoaXNJdGVtWydpbWFnZSddID0gY2F0RmlsZXNPcGVyYXRpb25zOjppbWFnZVNwZWMoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYWdlY29udGVudC0+QWxpYXMoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N0JywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2F0VGh1bWJTaXplDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICB9DQogICAgICBicmVhazsNCiAgICB9DQogICAgICANCiAgICAkdGhpc0l0ZW1bJ2xpbmsnXSA9ICRwYWdlY29udGVudC0+R2V0VXJsKCk7DQogICAgJHRoaXNJdGVtWyd0aXRsZSddID0gJHBhZ2Vjb250ZW50LT5OYW1lKCk7DQogICAgJHRoaXNJdGVtWydhbGlhcyddID0gJHBhZ2Vjb250ZW50LT5BbGlhcygpOw0KICAgICR0aGlzSXRlbVsnbWVudXRpdGxlJ10gPSAkcGFnZWNvbnRlbnQtPk1lbnVUZXh0KCk7DQogICAgJHRoaXNJdGVtWydtb2RpZmllZGRhdGUnXSA9ICRwYWdlY29udGVudC0+R2V0TW9kaWZpZWREYXRlKCk7DQogICAgJHRoaXNJdGVtWydjYXRlZ29yeSddID0gJGxhc3RjYXQ7DQogICAgJHRoaXNJdGVtWydjYXQnXSA9ICRsYXN0Y2F0Ow0KICAgICR0aGlzSXRlbVsnY3JlYXRlZGF0ZSddID0gJHBhZ2Vjb250ZW50LT5HZXRDcmVhdGlvbkRhdGUoKTsNCiAgICAkdGhpc0l0ZW1bJ2F0dHJzJ10gPSBhcnJheSgpOw0KICAgICR0aGVzZUF0dHJzID0gJHBhZ2Vjb250ZW50LT5nZXRBdHRycygpOw0KDQogICAgZm9yZWFjaCAoJHRoZXNlQXR0cnMgYXMgJHRoaXNBdHRyKQ0KICAgIHsNCiAgICAgICRzYWZlYXR0ciA9IHN0cnRvbG93ZXIocHJlZ19yZXBsYWNlKCcvXFcvJywgJycsICR0aGlzQXR0ci0+YXR0cikpOw0KICAgICAgJHRoaXNJdGVtWyR0aGlzQXR0ci0+c2FmZV0gPSAkcGFnZWNvbnRlbnQtPkdldFByb3BlcnR5VmFsdWUoJHRoaXNBdHRyLT5hdHRyKTsNCiAgICAgICR0aGlzSXRlbVsnYXR0cnMnXVskdGhpc0F0dHItPnNhZmVdID0gJHBhZ2Vjb250ZW50LT5HZXRQcm9wZXJ0eVZhbHVlKCR0aGlzQXR0ci0+YXR0cik7DQogICAgICANCiAgICAgIGlmKCAhaXNzZXQoJHRoaXNBdHRyLT5hbGlhcykgfHwgZW1wdHkoJHRoaXNBdHRyLT5hbGlhcykgKQ0KICAgICAgew0KICAgICAgICAkdGhpc0F0dHItPmFsaWFzID0gc3RydG9sb3dlciggcHJlZ19yZXBsYWNlKCcvXFcvJywgJycsICR0aGlzQXR0ci0+YXR0cikgKTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgIyBwcm9sbHkgcmVkdW5kYW50ICdpZicgYW5kIHRvIGJlIHJldm92ZWQgaWYgc28uLi4gKEpNKQ0KICAgICAgaWYoIGlzc2V0KCR0aGlzQXR0ci0+YWxpYXMpICYmICFlbXB0eSgkdGhpc0F0dHItPmFsaWFzKSApDQogICAgICB7DQogICAgICAgICR0aGlzSXRlbVskdGhpc0F0dHItPmFsaWFzXSA9ICRwYWdlY29udGVudC0+R2V0UHJvcGVydHlWYWx1ZSgkdGhpc0F0dHItPmF0dHIpOw0KICAgICAgICAkdGhpc0l0ZW1bJ2F0dHJzJ11bJHRoaXNBdHRyLT5hbGlhc10gPSAkcGFnZWNvbnRlbnQtPkdldFByb3BlcnR5VmFsdWUoJHRoaXNBdHRyLT5hdHRyKTsgIA0KICAgICAgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gJHRoaXNJdGVtOw0KICB9DQogIA0KICBzdGF0aWMgcHJvdGVjdGVkIGZ1bmN0aW9uIF9Jc0FjdGl2ZSgmJGNvbnRlbnQpDQogIHsNCiAgICByZXR1cm4gKCBtZXRob2RfZXhpc3RzKCRjb250ZW50LCAnQWN0aXZlJykgJiYgJGNvbnRlbnQtPkFjdGl2ZSgpICk7DQogIH0gIA0KICAgIA0KICBzdGF0aWMgcHJvdGVjdGVkIGZ1bmN0aW9uIF9Jc1ZhbGlkKCYkY29udGVudCkNCiAgew0KICAgIHJldHVybiAoIGlzX29iamVjdCgkY29udGVudCkgfHwgKCAhc2VsZjo6X0lzQWN0aXZlKCRjb250ZW50KSApICk7DQogIH0NCiAgDQogIHN0YXRpYyBwcm90ZWN0ZWQgZnVuY3Rpb24gX0lzVmFsaWRUeXBlKCYkY29udGVudCwgJiRwYXJhbXMpDQogIHsNCiAgICAkdHlwZV9vayA9IEZBTFNFOw0KICAgICRjdCA9ICRjb250ZW50LT5UeXBlKCk7DQogICAgDQogICAgc3dpdGNoICgkY3QpDQogICAgew0KICAgICAgY2FzZSAnY2F0YWxvZ2l0ZW0nOg0KICAgICAgew0KICAgICAgICAkUmVjdXJzaXZlTW9kZXMgPSBhcnJheSgnaXRlbXNfb25lJywgJ2l0ZW1zX2FsbCcsICdtaXhlZF9vbmUnLCAnbWl4ZWRfYWxsJyk7DQoNCiAgICAgICAgaWYgKCBpbl9hcnJheSggJHBhcmFtc1sncmVjdXJzZSddLCAkUmVjdXJzaXZlTW9kZXMpICkNCiAgICAgICAgew0KICAgICAgICAgICR0eXBlX29rID0gVFJVRTsgDQogICAgICAgIH0gDQogICAgICB9DQogICAgICBicmVhazsNCiAgICAgIA0KICAgICAgY2FzZSAnY2F0YWxvZ2NhdGVnb3J5JzoNCiAgICAgIHsNCiAgICAgICAgJFJlY3Vyc2l2ZU1vZGVzID0gYXJyYXkoJ2NhdGVnb3JpZXNfb25lJywgJ2NhdGVnb3JpZXNfYWxsJywgJ21peGVkX29uZScsICdtaXhlZF9hbGwnKTsNCg0KICAgICAgICBpZiAoIGluX2FycmF5KCAkcGFyYW1zWydyZWN1cnNlJ10sICRSZWN1cnNpdmVNb2RlcykgKQ0KICAgICAgICB7DQogICAgICAgICAgJHR5cGVfb2sgPSBUUlVFOyANCiAgICAgICAgfSANCiAgICAgICAgDQogICAgICB9DQogICAgICBicmVhazsNCiAgICB9DQogIA0KICAgIHJldHVybiAkdHlwZV9vazsNCiAgfQ0KICANCiAgDQogIHN0YXRpYyBwcm90ZWN0ZWQgZnVuY3Rpb24gX0lzVmFsaWREZXB0aCgmJGNvbnRlbnQsICYkcGFyYW1zLCAkY3VySGllckRlcHRoLCAkY3VySGllckxlbiwgJGN1ckhpZXJhcmNoeSkNCiAgew0KICAgICRkZXB0aF9vayA9IGZhbHNlOw0KDQogICAgJFJlY3Vyc2l2ZU1vZGVzT25lID0gYXJyYXkoJ2l0ZW1zX29uZScsICdjYXRlZ29yaWVzX29uZScsICdtaXhlZF9vbmUnKTsNCiAgICAkUmVjdXJzaXZlTW9kZXNBbGwgPSBhcnJheSgnaXRlbXNfYWxsJywgJ2NhdGVnb3JpZXNfYWxsJywgJ21peGVkX2FsbCcpOw0KICAgICRkb3QgPSBzdWJzdHIoICRjb250ZW50LT5IaWVyYXJjaHkoKSwgMCwgJGN1ckhpZXJMZW4gKyAxICkgPT0gJGN1ckhpZXJhcmNoeSAuICcuJzsNCiAgICANCiAgICANCiAgICBpZiAoICANCiAgICAgICAgICBpbl9hcnJheSggJHBhcmFtc1sncmVjdXJzZSddLCAkUmVjdXJzaXZlTW9kZXNPbmUpICAmJg0KICAgICAgICAgIHN1YnN0cl9jb3VudCggJGNvbnRlbnQtPkhpZXJhcmNoeSgpLCAnLicgKSA9PSAoICRjdXJIaWVyRGVwdGggKyAxICkgJiYNCiAgICAgICAgICAkZG90IA0KICAgICAgICkNCiAgICB7DQogICAgICAkZGVwdGhfb2sgPSB0cnVlOw0KICAgIH0NCiAgICBlbHNlaWYgKCANCiAgICAgICAgICAgICAgKCBpc3NldCgkcGFyYW1zWydhbGlhcyddKSAmJiAkcGFyYW1zWydhbGlhcyddID09ICcvJykgfHwNCiAgICAgICAgICAgICAgKCBpbl9hcnJheSggJHBhcmFtc1sncmVjdXJzZSddLCAkUmVjdXJzaXZlTW9kZXNBbGwpICAmJiAkZG90ICkNCiAgICAgICAgICAgKQ0KICAgIHsNCiAgICAgICRkZXB0aF9vayA9IHRydWU7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkZGVwdGhfb2s7DQogIH0gDQogIA0KICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgIyBTb3J0aW5nDQogICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICANCiAgc3RhdGljIGZ1bmN0aW9uIGNvbnRlbnRhbHBoYSgkYSwgJGIpDQogIHsNCiAgICByZXR1cm4gc3RyY2FzZWNtcCgkYVsndGl0bGUnXSwgJGJbJ3RpdGxlJ10pOw0KICB9DQogIA0KDQogIHN0YXRpYyBmdW5jdGlvbiBjaHJvbm8oJGEsICRiKQ0KICB7DQogICAgI3JldHVybiBzZWxmOjpDb21wYXJlRGF0ZXMoJGFbJ21vZGlmaWVkZGF0ZSddLCAkYlsnbW9kaWZpZWRkYXRlJ10pOw0KICAgICMgcmV2ZXJzZSB0byBrZWVwIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cw0KICAgIHJldHVybiBzZWxmOjpDb21wYXJlRGF0ZXMoJGJbJ21vZGlmaWVkZGF0ZSddLCAkYVsnbW9kaWZpZWRkYXRlJ10pOw0KICAgIC8qDQogICAgaWYgKCRhWydtb2RpZmllZGRhdGUnXSA+ICRiWydtb2RpZmllZGRhdGUnXSkNCiAgICB7DQogICAgICByZXR1cm4gLTE7DQogICAgfQ0KICAgIGlmICgkYVsnbW9kaWZpZWRkYXRlJ10gPCAkYlsnbW9kaWZpZWRkYXRlJ10pDQogICAgew0KICAgICAgcmV0dXJuIDE7DQogICAgfQ0KICAgIHJldHVybiAwOw0KICAgICovDQogIH0NCg0KICBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlZCgkYSwgJGIpDQogIHsNCiAgICAjcmV0dXJuIHNlbGY6OkNvbXBhcmVEYXRlcygkYVsnY3JlYXRlZGF0ZSddLCAkYlsnY3JlYXRlZGF0ZSddKTsNCiAgICAjIHJldmVyc2UgdG8ga2VlcCBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMNCiAgICByZXR1cm4gc2VsZjo6Q29tcGFyZURhdGVzKCRiWydjcmVhdGVkYXRlJ10sICRhWydjcmVhdGVkYXRlJ10pOw0KICAgIA0KICAgIC8qDQogICAgaWYgKCRhWydjcmVhdGVkYXRlJ10gPiAkYlsnY3JlYXRlZGF0ZSddKQ0KICAgIHsNCiAgICAgIHJldHVybiAtMTsNCiAgICB9DQogICAgaWYgKCRhWydjcmVhdGVkYXRlJ10gPCAkYlsnY3JlYXRlZGF0ZSddKQ0KICAgIHsNCiAgICAgIHJldHVybiAxOw0KICAgIH0NCiAgICByZXR1cm4gMDsNCiAgICAqLw0KICB9IA0KICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgDQogIA0KICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgIyBkYXRldGltZQ0KICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgDQogIHN0YXRpYyBmdW5jdGlvbiBtYWtlVGltZVN0YW1wKCRob3VyID0gJycsICRtaW51dGUgPSAnJywgJHNlY29uZCA9ICcnLCAkeWVhciA9ICcnLCAkbW9udGggPSAnJywgJGRheSA9ICcnKQ0KICB7DQogICAgIGlmKGVtcHR5KCRob3VyKSkgDQogICAgIHsNCiAgICAgICAgICRob3VyID0gc3RyZnRpbWUoJyVIJyk7DQogICAgIH0NCiAgICAgaWYoZW1wdHkoJG1pbnV0ZSkpIA0KICAgICB7DQogICAgICAgICAkbWludXRlID0gc3RyZnRpbWUoJyVNJyk7DQogICAgIH0NCiAgICAgaWYoZW1wdHkoJHNlY29uZCkpIA0KICAgICB7DQogICAgICAgICAkc2Vjb25kID0gc3RyZnRpbWUoJyVTJyk7DQogICAgIH0NCiAgICAgaWYoZW1wdHkoJHllYXIpKSANCiAgICAgew0KICAgICAgICAgJHllYXIgPSBzdHJmdGltZSgnJVknKTsNCiAgICAgfQ0KICAgICBpZihlbXB0eSgkbW9udGgpKSANCiAgICAgew0KICAgICAgICAgJG1vbnRoID0gc3RyZnRpbWUoJyVtJyk7DQogICAgIH0NCiAgICAgaWYoZW1wdHkoJGRheSkpIA0KICAgICB7DQogICAgICAgICAkZGF5ID0gc3RyZnRpbWUoJyVkJyk7DQogICAgIH0NCg0KICAgICByZXR1cm4gbWt0aW1lKCRob3VyLCAkbWludXRlLCAkc2Vjb25kLCAkbW9udGgsICRkYXksICR5ZWFyKTsNCiAgfQ0KDQogIHN0YXRpYyBmdW5jdGlvbiBOb3coKQ0KICB7DQogICAgcmV0dXJuIHNlbGY6Ol9nZXREQigpLT5EYlRpbWVTdGFtcCh0aW1lKCkpOw0KICB9DQogIA0KICAjDQogICMgUmVkaXJlY3QNCiAgIw0KICANCiAgLyoqDQogICogU2hvd3MgYSB2ZXJ5IGNsb3NlIGFwcHJveGltYXRpb24gb2YgYW4gQXBhY2hlIGdlbmVyYXRlZCAzMDEgZXJyb3IuDQogICogSXQgYWxzbyBzZW5kcyB0aGUgYWN0dWFsIGhlYWRlciBhbG9uZyBhcyB3ZWxsLCBzbyB0aGF0IGdlbmVyaWMNCiAgKiBicm93c2VyIGVycm9yIHBhZ2VzIChsaWtlIHdoYXQgSUUgZG9lcykgd2lsbCBiZSBkaXNwbGF5ZWQuDQogICovDQogIHN0YXRpYyBmdW5jdGlvbiBFcnJvckhhbmRsZXIzMDEoJHVybCkNCiAgew0KICAgIC8vIFRPRE8gMCAtbyBKb01vcmcgLWMgIHRhc2s6IENsZWFuICR1cmwNCiAgICAvLyBUT0RPIDAgLW8gSm9Nb3JnIC1jICB0YXNrOiBMb2NhbGl6ZS4uLiBtYXliZT8NCiAgICBAb2JfZW5kX2NsZWFuKCk7DQogICAgI2hlYWRlcigkX1NFUlZFUlsiU0VSVkVSX1BST1RPQ09MIl0gLiAnIDMwMSBNb3ZlZCBQZXJtYW5lbnRseScpOyAjIG1heWJlPz8/Pw0KICAgIGhlYWRlcignSFRUUC8xLjEgMzAxIE1vdmVkIFBlcm1hbmVudGx5Jyk7DQogICAgaGVhZGVyKCJTdGF0dXM6IDMwMSAgTW92ZWQgUGVybWFuZW50bHkiKTsNCiAgICAjIG1ha2Ugc3VyZSBicm93c2VycyBkb24ndCBjYWNoZSANCiAgICBoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsgLy8gSFRUUC8xLjENCiAgICBoZWFkZXIoIkV4cGlyZXM6IFNhdCwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UIik7IC8vIERhdGUgaW4gdGhlIHBhc3QNCiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCApOw0KICAgICRodG1sID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU5cIj5cbiI7IA0KICAgICRodG1sIC49ICI8aHRtbD5cbiI7IA0KICAgICRodG1sIC49ICI8aGVhZD5cbiI7IA0KICAgICRodG1sIC49ICI8dGl0bGU+TW92ZWQ8L3RpdGxlPlxuIjsgDQogICAgJGh0bWwgLj0gIjwvaGVhZD5cbiI7IA0KICAgICRodG1sIC49ICI8Ym9keT5cbiI7IA0KICAgICRodG1sIC49ICI8aDE+TW92ZWQ8L2gxPlxuIjsgDQogICAgJGh0bWwgLj0gIjxwPlRoaXMgcGFnZSBoYXMgbW92ZWQgdG8gPGEgaHJlZj1cIiIgLiAkdXJsIC4gIlwiPiIgLiAkdXJsIC4gIjwvYT4uPC9wPlxuIjsgDQogICAgJGh0bWwgLj0gIjwvYm9keT5cbiI7IA0KICAgICRodG1sIC49ICI8L2h0bWw+XG4iOyANCiAgICBlY2hvICRodG1sOw0KICAgIGV4aXQoKTsNCiAgfQ0KICANCiAgLyoqDQogICAqIEdpdmVuIGEgcGFnZSBJRCBvciBhbiBhbGlhcywgcmVkaXJlY3QgdG8gaXQNCiAgICogUmV0cmlldmVzIHRoZSBVUkwgb2YgdGhlIHNwZWNpZmllZCBwYWdlLCBhbmQgcGVyZm9ybXMgYSByZWRpcmVjdA0KICAgKg0KICAgKiBAcGFyYW0gbWl4ZWQgQW4gaW50ZWdlciBwYWdlIGlkIG9yIGEgc3RyaW5nIHBhZ2UgYWxpYXMuDQogICAqIEByZXR1cm4gdm9pZA0KICAgKi8NCiAgc3RhdGljIGZ1bmN0aW9uIFVSTGZyb21BbGlhcygkYWxpYXMpDQogIHsNCiAgICAkbWFuYWdlciA9IGNtc21zKCktPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsNCiAgICAkbm9kZSA9ICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJGFsaWFzKTsNCiAgICANCiAgICBpZiggISRub2RlICkgDQogICAgew0KICAgICAgYXVkaXQoJycsICdDYXRhbG9nZXInLCAnQXR0ZW1wdCB0byByZWRpcmVjdCB0byBpbnZhbGlkIGFsaWFzOiAnIC4gJGFsaWFzKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQogICAgDQogICAgJGNvbnRlbnQgPSAkbm9kZS0+R2V0Q29udGVudCgpOw0KICAgIA0KICAgIGlmICghaXNfb2JqZWN0KCRjb250ZW50KSkgDQogICAgew0KICAgICAgYXVkaXQoJycsICdDYXRhbG9nZXInLCAnQXR0ZW1wdCB0byByZWRpcmVjdCB0byBpbnZhbGlkIGFsaWFzOiAnIC4gJGFsaWFzKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRjb250ZW50LT5HZXRVUkwoKTsNCiAgfQ0KICANCiAgc3RhdGljIGZ1bmN0aW9uIElzVmFsaWRBbGlhcygkYWxpYXMpDQogIHsNCiAgICAkbWFuYWdlciA9IGNtc21zKCktPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsNCiAgICAkbm9kZSA9ICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJGFsaWFzKTsNCg0KICAgIGlmKCAhJG5vZGUgKSANCiAgICB7DQogICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICAgIA0KICAgICRjb250ZW50ID0gJG5vZGUtPkdldENvbnRlbnQoKTsNCiAgICANCiAgICBpZiAoIWlzX29iamVjdCgkY29udGVudCkpIA0KICAgIHsNCiAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHRydWU7IA0KICB9DQoNCiAgc3RhdGljIGZ1bmN0aW9uICBpc19FeHBpcmVkKCRkYXRlKQ0KICB7DQogICAgcmV0dXJuIChib29sKSggMSA9PT0gc2VsZjo6Q29tcGFyZURhdGVzKCB0aW1lKCksICRkYXRlICkgKTsNCiAgfQ0KICANCiAgc3RhdGljIGZ1bmN0aW9uICB0b19FeHBpcmUoJGRhdGUpDQogIHsNCiAgICByZXR1cm4gKGJvb2wpKCAxID09PSBzZWxmOjpDb21wYXJlRGF0ZXMoIHRpbWUoKSwgJGRhdGUgKSApOw0KICB9DQogIA0KICBzdGF0aWMgZnVuY3Rpb24gdG9fVW5FeHBpcmUoJGRhdGUpDQogIHsNCiAgICByZXR1cm4gKGJvb2wpKCAxID09PSBzZWxmOjpDb21wYXJlRGF0ZXMoICRkYXRlLCB0aW1lKCkgKSApOyANCiAgfQ0KICANCiAgc3RhdGljIGZ1bmN0aW9uIENvbXBhcmVEYXRlcygkYSwgJGIpDQogIHsNCiAgICAjIG1ha2Ugc3VyZSB0aGV5J3JlIGludGVnZXJzLi4uLg0KICAgICRhID0gKGludCkkYTsNCiAgICAkYiA9IChpbnQpJGI7DQogICAgJHIgPSAwOw0KICAgICAgDQogICAgaWYgKCRhID4gJGIpDQogICAgew0KICAgICAgJHIgPSAxOw0KICAgIH0NCiAgICANCiAgICBpZiAoJGEgPCAkYikNCiAgICB7DQogICAgICAkciA9IC0xOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gKGludCkkcjsNCiAgfQ0KICANCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.catFields.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmNsYXNzIGNhdEZpZWxkcw0Kew0KICBzdGF0aWMgcHJpdmF0ZSAkX2ZpZWxkX3R5cGVzOw0KICBzdGF0aWMgcHJpdmF0ZSAkX21vZDsNCiAgDQogIGZ1bmN0aW9uIF9fQ29uc3RydWN0KCkNCiAgew0KICAgIHNlbGY6OiRfbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDYXRhbG9nZXInKTsNCiAgICBzZWxmOjokX2ZpZWxkX3R5cGVzID0gYXJyYXkoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQnICAgICAgPT4gICR0aGlzLT5fbW9kLT5MYW5nKCd0ZXh0JyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdCcgICAgPT4gICR0aGlzLT5fbW9kLT5MYW5nKCdkcm9wZG93bicpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0YXJlYScgID0+ICAkdGhpcy0+X21vZC0+TGFuZygndGV4dGFyZWEnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2hlY2tib3gnICA9PiAgJHRoaXMtPl9tb2QtPkxhbmcoJ2NoZWNrYm94JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgfQ0KICANCiAgc3RhdGljIGZ1bmN0aW9uIGdldEZpZWxkVHlwZXMoKQ0KICB7DQogICAgcmV0dXJuIHNlbGY6OiRfZmllbGRfdHlwZXM7DQogIH0NCiAgDQogIA0KICBzdGF0aWMgZnVuY3Rpb24gUmVuZGVyU2VsZWN0RmllbGQoJGZpZWxkID0gbnVsbCwgJHZhbHVlID0gbnVsbCkNCiAgew0KICAgICRzZWxlY3RfdmFsdWVzID0gYXJyYXkoKTsNCiAgICAkcmV0ID0gJyc7DQogICAgaWYgKGlzc2V0KCRmaWVsZC0+c2VsZWN0X3ZhbHVlcykgJiYgJGZpZWxkLT5zZWxlY3RfdmFsdWVzICE9ICcnKQ0KICAgIHsNCiAgICAgICRzZWxlY3RfdmFsdWVzID0gYXJyYXlfbWFwKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmltJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBsb2RlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxzcGVjaWFsY2hhcnMoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZC0+c2VsZWN0X3ZhbHVlcywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVF9RVU9URVMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICB9DQogICAgICANCiAgICAkcmV0IC49ICc8c2VsZWN0IHR5cGU9ImRyb3Bkb3duIiBuYW1lPSInIC4gJGZpZWxkLT5zYWZlIC4gJyI+JzsNCiAgICAgIA0KICAgIGZvcmVhY2ggKCRzZWxlY3RfdmFsdWVzIGFzICRvbmVfdmFsKQ0KICAgIHsNCiAgICAgICRyZXQgLj0gJzxvcHRpb24gdmFsdWU9IicgLiAkb25lX3ZhbCAuICciJzsNCiAgICAgIA0KICAgICAgaWYgKGh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlLCBFTlRfUVVPVEVTKSA9PSAkb25lX3ZhbCkNCiAgICAgIHsNCiAgICAgICAgJHJldCAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkcmV0IC49ICc+JyAuICRvbmVfdmFsIC4gJzwvb3B0aW9uPic7DQogICAgfQ0KICAgIA0KICAgICRyZXQgLj0gJzwvc2VsZWN0Pic7DQogICAgDQogICAgcmV0dXJuIGFycmF5KCRmaWVsZC0+YXR0ciAuICc6JywgJHJldCk7DQogIH0NCiAgDQogIHN0YXRpYyBmdW5jdGlvbiBSZW5kZXJUZXh0QXJlYSgkZmllbGQgPSBudWxsLCAkdmFsdWUgPSBudWxsLCAkZW5hYmxlV1lTSVdZRyA9IFRSVUUpDQogIHsNCiAgICByZXR1cm4gYXJyYXkoDQogICAgICAgICAgICAgICAgICAkZmllbGQtPmF0dHIgLiAnOicsIA0KICAgICAgICAgICAgICAgICAgY3JlYXRlX3RleHRhcmVhKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVuYWJsZVdZU0lXWUcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZC0+c2FmZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmllbGQtPmF0dHIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODAsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICk7DQogIH0NCiAgIA0KICBzdGF0aWMgZnVuY3Rpb24gUmVuZGVyQ2hlY2tCb3goJGZpZWxkID0gbnVsbCwgJHZhbHVlID0gbnVsbCkNCiAgew0KICAgIGlmIChpc3NldCgkZmllbGQtPnNlbGVjdF92YWx1ZXMpICYmIHN0cnBvcygkZmllbGQtPnNlbGVjdF92YWx1ZXMsICcsJykgIT09IGZhbHNlKQ0KICAgIHsNCiAgICAgIGxpc3QgKCRpcywgJGlzbnQpID0gZXhwbG9kZSgnLCcsICRmaWVsZC0+c2VsZWN0X3ZhbHVlcyk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkaXMgPSAnWWVzJzsNCiAgICAgICRpc250ID0gJ05vJzsNCiAgICB9DQogICAgDQogICAgJHJldCA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInDQogICAgICAgICAgICAgIC4gJGZpZWxkLT5zYWZlDQogICAgICAgICAgICAgIC4gJyIgdmFsdWU9IicNCiAgICAgICAgICAgICAgLiBodG1sc3BlY2lhbGNoYXJzKCRpc250LCBFTlRfUVVPVEVTKQ0KICAgICAgICAgICAgICAuICciLz4nOw0KICAgICAgICAgICAgICANCiAgICAkcmV0IC49ICc8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSInDQogICAgICAgICAgICAgICAuICRmaWVsZC0+c2FmZQ0KICAgICAgICAgICAgICAgLiAnIiBuYW1lPSInDQogICAgICAgICAgICAgICAuICRmaWVsZC0+c2FmZQ0KICAgICAgICAgICAgICAgLiAnIiB2YWx1ZT0iJw0KICAgICAgICAgICAgICAgLiBodG1sc3BlY2lhbGNoYXJzKCRpcywgRU5UX1FVT1RFUykNCiAgICAgICAgICAgICAgIC4gJyInOw0KICAgICAgICAgICAgICAgDQogICAgaWYgKCR2YWx1ZSA9PSAkaXMpDQogICAgew0KICAgICAgJHJldCAuPSAnIGNoZWNrZWQ9ImNoZWNrZWQiJzsNCiAgICB9DQogICAgDQogICAgJHJldCAuPSAnPjxsYWJlbCBmb3I9IicgLiAkZmllbGQtPnNhZmUgLiAnIj4nIC4gJGlzIC4gJzwvbGFiZWw+JzsNCiAgICANCiAgICByZXR1cm4gYXJyYXkoJGZpZWxkLT5hdHRyIC4gJzonLCAkcmV0KTsNCiAgfQ0KICANCiAgc3RhdGljIGZ1bmN0aW9uIFJlbmRlclRleHQoJGZpZWxkID0gbnVsbCwgJHZhbHVlID0gbnVsbCkNCiAgew0KICAgICRsID0gJGZpZWxkLT5sZW5ndGg7DQoNCiAgICBpZiAoZW1wdHkoJGwpKQ0KICAgIHsNCiAgICAgICRsID0gMjU7DQogICAgICAkbSA9IDEwMjQ7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkbSA9ICRsOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gYXJyYXkoDQogICAgICAgICAgICAgICAgICAkZmllbGQtPmF0dHIgLiAnOicsIA0KICAgICAgICAgICAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSInDQogICAgICAgICAgICAgICAgICAuICRmaWVsZC0+c2FmZQ0KICAgICAgICAgICAgICAgICAgLiAnIiB2YWx1ZT0iJw0KICAgICAgICAgICAgICAgICAgLiBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSwgRU5UX1FVT1RFUykNCiAgICAgICAgICAgICAgICAgIC4gJyIgc2l6ZT0iJw0KICAgICAgICAgICAgICAgICAgLiAkbA0KICAgICAgICAgICAgICAgICAgLiAnIiBtYXhsZW5ndGg9IicNCiAgICAgICAgICAgICAgICAgIC4gJG0NCiAgICAgICAgICAgICAgICAgIC4gJyIgLz4nDQogICAgICAgICAgICAgICAgICk7DQogIH0NCiAgDQogIHN0YXRpYyBmdW5jdGlvbiBSZW5kZXJJbnB1dCgkZmllbGQgPSBudWxsLCAkdmFsdWUgPSBudWxsLCAkZW5hYmxlV1lTSVdZRyA9IFRSVUUpDQogIHsNCg0KICAgIGlmIChlbXB0eSgkdmFsdWUpICYmICFlbXB0eSgkZmllbGQtPmRlZmF1bHQpKQ0KICAgIHsNCiAgICAgICR2YWx1ZSA9ICRmaWVsZC0+ZGVmYXVsdDsgIA0KICAgIH0NCiAgICANCiAgICBpZiAoJGZpZWxkLT5maWVsZF90eXBlID09ICdzZWxlY3QnKQ0KICAgIHsNCiAgICAgIHJldHVybiBzZWxmOjpSZW5kZXJTZWxlY3RGaWVsZCgkZmllbGQsICR2YWx1ZSk7DQogICAgfQ0KICAgIGVsc2UgaWYgKCRmaWVsZC0+ZmllbGRfdHlwZSA9PSAndGV4dGFyZWEnKQ0KICAgIHsNCiAgICAgIHJldHVybiBzZWxmOjpSZW5kZXJUZXh0QXJlYSgkZmllbGQsICR2YWx1ZSwgJGVuYWJsZVdZU0lXWUcpOw0KICAgIH0NCiAgICANCiAgICBlbHNlIGlmICgkZmllbGQtPmZpZWxkX3R5cGUgPT0gJ2NoZWNrYm94JykNCiAgICB7DQogICAgICByZXR1cm4gc2VsZjo6UmVuZGVyQ2hlY2tCb3goJGZpZWxkLCAkdmFsdWUpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgcmV0dXJuIHNlbGY6OlJlbmRlclRleHQoJGZpZWxkLCAkdmFsdWUpOw0KICAgIH0NCiAgICANCiAgICAjIHdlIHNob3VsZCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludCBzby4uLg0KICAgIGRpZSgnY2xhc3MuY2F0RmllbGRzLnBocCAtIEVSUk9SOiBSZW5kZXJJbnB1dCgpIGNvdWxkblwndCBmaW5kIGEgbGVnYWwgaW5wdXQgdHlwZSEnKTsNCiAgfQ0KfQ0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.catFilesOperations.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmNsYXNzIGNhdEZpbGVzT3BlcmF0aW9ucw0Kew0KICBwcm90ZWN0ZWQgc3RhdGljICRfaW5pdGlhbGl6ZWQgPSBGQUxTRTsNCiAgcHJvdGVjdGVkIHN0YXRpYyAkX21vZDsNCiAgcHJvdGVjdGVkIHN0YXRpYyAkX2NtczsNCiAgcHJvdGVjdGVkIHN0YXRpYyAkX2NvbmZpZzsNCiAgDQogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9pbml0aWFsaXplKCkNCiAgew0KICAgIGlmKCFzZWxmOjokX2luaXRpYWxpemVkKQ0KICAgIHsNCiAgICAgIHNlbGY6OiRfbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDYXRhbG9nZXInKTsNCiAgICAgIHNlbGY6OiRfY21zID0gY21zbXMoKTsNCiAgICAgIHNlbGY6OiRfY29uZmlnID0gc2VsZjo6JF9jbXMtPkdldENvbmZpZygpOw0KICAgIH0NCiAgfQ0KICANCiAgLy8gdHlwZSBjYW4gYmUgInMiIC0gc291cmNlIGltYWdlLCAiaSIgLSBwcm9jZXNzZWQgaW1hZ2UsIG9yICJmIiAtIGZpbGUNCiAgc3RhdGljIGZ1bmN0aW9uIGdldEFzc2V0UGF0aCggJHR5cGUgPSAiaSIsICRkZWZhdWx0ID0gZmFsc2UgKQ0KICB7DQogICAgc2VsZjo6X2luaXRpYWxpemUoKTsNCiAgICAkbW9kID0gc2VsZjo6JF9tb2Q7DQogICAgJGNvbmZpZyA9IHNlbGY6OiRfY29uZmlnOw0KICAgICRyb290UGF0aCA9ICRjb25maWdbJ3Jvb3RfcGF0aCddOw0KICAgDQogICAgJHVwbG9hZGJhc2UgPSBzdHJfcmVwbGFjZShbJ3VwbG9hZHNfcGF0aCddLCAkcm9vdFBhdGgsICcnKTsNCiAgICANCiAgICBpZigkZGVmYXVsdCkNCiAgICB7DQogICAgICBzd2l0Y2goJHR5cGUpDQogICAgICB7DQogICAgICAgIGNhc2UgJ3MnOiAkcmV0ID0gY21zX2pvaW5fcGF0aCgkdXBsb2FkYmFzZSwgJ2ltYWdlcycsICdjYXRhbG9nX3NyYycpOyBicmVhazsgDQogICAgICAgIGNhc2UgJ2knOiAkcmV0ID0gY21zX2pvaW5fcGF0aCgkdXBsb2FkYmFzZSwgJ2ltYWdlcycsICdjYXRhbG9nJyk7IGJyZWFrOyANCiAgICAgICAgY2FzZSAnZic6ICRyZXQgPSBjbXNfam9pbl9wYXRoKCR1cGxvYWRiYXNlLCAnY2F0YWxvZ2VyZmlsZXMnKTsgYnJlYWs7IA0KICAgICAgfQ0KICAgICAgDQogICAgICAjIGp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgbWlzbWF0Y2hlZCBESVJFQ1RPUlkgU0VQQVJBVE9SIGNoYXJzDQogICAgICAkcmV0ID0gc3RyX3JlcGxhY2UoJy8nLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcmV0KTsNCiAgICAgICRyZXQgPSBzdHJfcmVwbGFjZSgnXFwnLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcmV0KTsNCiAgICAgIA0KICAgICAgcmV0dXJuIHRyaW0oJHJldCwgRElSRUNUT1JZX1NFUEFSQVRPUik7DQogICAgfQ0KICAgICAgDQogICAgc3dpdGNoICgkdHlwZSkNCiAgICB7DQogICAgICBjYXNlICdzJzoNCiAgICAgIHsNCiAgICAgICAgJF9CeURlZmF1bHQgPSBjbXNfam9pbl9wYXRoKCR1cGxvYWRiYXNlLCAnaW1hZ2VzJywgJ2NhdGFsb2dfc3JjJyk7DQogICAgICAgICRyZXQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpbWFnZV91cGxvYWRfcGF0aCcsICRfQnlEZWZhdWx0KTsgDQogICAgICB9DQogICAgICBicmVhazsgDQoNCiAgICAgIA0KICAgICAgY2FzZSAnaSc6DQogICAgICB7DQogICAgICAgICRfQnlEZWZhdWx0ID0gY21zX2pvaW5fcGF0aCgkdXBsb2FkYmFzZSwgJ2ltYWdlcycsICdjYXRhbG9nJyk7DQogICAgICAgICRyZXQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpbWFnZV9wcm9jX3BhdGgnLCAkX0J5RGVmYXVsdCk7ICANCiAgICAgIH0NCiAgICAgIGJyZWFrOyANCiAgICAgIA0KICAgICAgY2FzZSAnZic6DQogICAgICB7DQogICAgICAgICRfQnlEZWZhdWx0ID0gY21zX2pvaW5fcGF0aCgkdXBsb2FkYmFzZSwgJ2NhdGFsb2dlcmZpbGVzJyk7DQogICAgICAgICRyZXQgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdmaWxlX3VwbG9hZF9wYXRoJywgJF9CeURlZmF1bHQpOyAgDQogICAgICB9DQogICAgICBicmVhazsgDQogICAgICANCiAgICB9DQoNCiAgICAjIGp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgbWlzbWF0Y2hlZCBESVJFQ1RPUlkgU0VQQVJBVE9SIGNoYXJzDQogICAgJHJldCA9IHN0cl9yZXBsYWNlKCcvJywgRElSRUNUT1JZX1NFUEFSQVRPUiwgJHJldCk7DQogICAgJHJldCA9IHN0cl9yZXBsYWNlKCdcXCcsIERJUkVDVE9SWV9TRVBBUkFUT1IsICRyZXQpOw0KICAgIA0KICAgIHJldHVybiB0cmltKCRyZXQsIERJUkVDVE9SWV9TRVBBUkFUT1IpOyAgIA0KICB9DQogIA0KICBzdGF0aWMgZnVuY3Rpb24gRXh0ZW5kZXIoKQ0KICB7DQogICAgJHJldCA9ICcmYW1wO2FjPSc7DQogICAgDQogICAgZm9yICgkciA9IDA7ICRyIDwgNTsgJHIrKykNCiAgICB7DQogICAgICAkcmV0IC49IHJhbmQoMCw5KTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRyZXQ7DQogIH0NCg0KDQogIHN0YXRpYyBmdW5jdGlvbiBpbWFnZVNwZWMoJGFsaWFzLCAkdHlwZSwgJGltYWdlX251bWJlciwgJHNpemUsICRhbnRpY2FjaGU9dHJ1ZSwgJGZvcmNlc2hvd21pc3Npbmc9ZmFsc2UpDQogIHsNCiAgICBzZWxmOjpfaW5pdGlhbGl6ZSgpOw0KICAgICRtb2QgPSBzZWxmOjokX21vZDsNCiAgICAkY29uZmlnID0gc2VsZjo6JF9jb25maWc7DQogICAgDQogICAgJGNvbnRlbnRvcHMgPSBzZWxmOjokX2Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsNCiAgICAkcmV0dXJuaWQgPSAkY29udGVudG9wcy0+R2V0RGVmYXVsdENvbnRlbnQoKTsNCiAgICANCiAgICAkcHJldHR5X3VybCA9ICdjYXRhbG9nZXJfaW1hZ2UvJzsNCiAgICAkdXJsID0gJG1vZC0+Y3JlYXRlX3VybCgnY250bnQwMScsICdpbWFnZScsICRyZXR1cm5pZCwgYXJyYXkoKSwgRkFMU0UsIEZBTFNFLCAkcHJldHR5X3VybCk7DQogICAgDQogICAgaWYgKCRtb2QtPnNob3dNaXNzaW5nID09ICcnKQ0KICAgIHsNCiAgICAgICRtb2QtPnNob3dNaXNzaW5nID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnc2hvd19taXNzaW5nJywgJzEnKTsNCiAgICB9DQogICAgDQogICAgJGV4dCA9ICcnOw0KICAgIA0KICAgIGlmICgkYW50aWNhY2hlKQ0KICAgIHsNCiAgICAgICRleHQgPSBzZWxmOjpFeHRlbmRlcigpOw0KICAgIH0NCiAgICANCiAgICAkciA9ICR1cmwNCiAgICAgICAgIC4gKCAoJGNvbmZpZ1sndXJsX3Jld3JpdGluZyddID09ICdtb2RfcmV3cml0ZScpID8gJz9pPScgOiAnJmFtcDtpPScgKSANCiAgICAgICAgIC4gJGFsaWFzDQogICAgICAgICAuICdfJw0KICAgICAgICAgLiAkdHlwZQ0KICAgICAgICAgLiAnXycNCiAgICAgICAgIC4gJGltYWdlX251bWJlcg0KICAgICAgICAgLiAnXycNCiAgICAgICAgIC4gJHNpemUNCiAgICAgICAgIC4gKCRmb3JjZXNob3dtaXNzaW5nID8gJ18xJyA6ICdfJyAuICRtb2QtPnNob3dNaXNzaW5nKQ0KICAgICAgICAgLiAnLmpwZycNCiAgICAgICAgIC4gJGV4dDsNCg0KICAgICAgcmV0dXJuICRyOw0KICB9DQoNCiAgc3RhdGljIGZ1bmN0aW9uIHNyY0ltYWdlU3BlYygkYWxpYXMsICRpbWFnZV9udW1iZXIpDQogIHsNCiAgICBzZWxmOjpfaW5pdGlhbGl6ZSgpOw0KICAgICRtb2QgPSBzZWxmOjokX21vZDsNCiAgICANCiAgICBpZiAoJG1vZC0+c2hvd01pc3NpbmcgPT0gJycpDQogICAgew0KICAgICAgJG1vZC0+c2hvd01pc3NpbmcgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdzaG93X21pc3NpbmcnLCAnMScpOw0KICAgIH0NCg0KICAgIGlmKCAhc2VsZjo6c3JjRXhpc3RzKCRhbGlhcywgJGltYWdlX251bWJlcikgKQ0KICAgIHsNCiAgICAgIGlmICgkbW9kLT5zaG93TWlzc2luZyAhPSAnMScpDQogICAgICB7DQogICAgICAgIHJldHVybiAkbW9kLT5HZXRSb290VVJMKCkNCiAgICAgICAgICAgICAgIC4gJy9tb2R1bGVzL0NhdGFsb2dlci9pbWFnZXMvdHJhbnMuZ2lmJzsNCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgcmV0dXJuICRtb2QtPkdldFJvb3RVUkwoKQ0KICAgICAgICAgICAgICAgLiAnL21vZHVsZXMvQ2F0YWxvZ2VyL2ltYWdlcy9uby1pbWFnZS5naWYnOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICAgcmV0dXJuICRtb2QtPkdldFVwbG9hZHNVUkwoKQ0KICAgICAgICAgICAgIC4gc2VsZjo6Z2V0QXNzZXRQYXRoKCdzJykNCiAgICAgICAgICAgICAuICcvJw0KICAgICAgICAgICAgIC4gJGFsaWFzIA0KICAgICAgICAgICAgIC4gJ19zcmNfJw0KICAgICAgICAgICAgIC4gJGltYWdlX251bWJlcg0KICAgICAgICAgICAgIC4gJy5qcGcnOw0KICAgIH0NCiAgfQ0KDQogIHN0YXRpYyBmdW5jdGlvbiBzcmNFeGlzdHMoJGFsaWFzLCAkaW1hZ2VfbnVtYmVyKQ0KICB7DQogICAgc2VsZjo6X2luaXRpYWxpemUoKTsNCiAgICAkbW9kID0gc2VsZjo6JF9tb2Q7DQogICAgJGNvbmZpZyA9IHNlbGY6OiRfY29uZmlnOw0KICAgIA0KICAgICRzcmNTcGVjID0gY21zX2pvaW5fcGF0aCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25maWdbJ3VwbG9hZHNfcGF0aCddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Z2V0QXNzZXRQYXRoKCdzJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWxpYXMgLiAnX3NyY18nIC4gJGltYWdlX251bWJlciAuICcuanBnJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgDQogICAgcmV0dXJuIGZpbGVfZXhpc3RzKCRzcmNTcGVjKTsNCiAgfQ0KDQoNCiAgc3RhdGljIGZ1bmN0aW9uIGdldEZpbGVzKCRhbGlhcykNCiAgew0KICAgIHNlbGY6Ol9pbml0aWFsaXplKCk7DQogICAgJG1vZCA9IHNlbGY6OiRfbW9kOw0KICAgICRjb25maWcgPSBzZWxmOjokX2NvbmZpZzsNCiAgICANCiAgICAkZGlyc3BlYyA9IGNtc19qb2luX3BhdGgoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OmdldEFzc2V0UGF0aCgnZicpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsaWFzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogIA0KICAgICRmaWxlcyA9IGFycmF5KCk7DQogICAgJHR5cGVzID0gYXJyYXkoKTsNCiAgICANCiAgICBpZiAoaXNfZGlyKCRkaXJzcGVjKSkNCiAgICB7ICANCiAgICAgICRkaCAgPSBvcGVuZGlyKCRkaXJzcGVjKTsNCiAgICAgIA0KICAgICAgd2hpbGUgKCBmYWxzZSAhPT0gKCAkZmlsZW5hbWUgPSByZWFkZGlyKCRkaCkgKSApDQogICAgICB7DQogICAgICAgIA0KICAgICAgICBpZiAoJGZpbGVuYW1lICE9ICcuJyAmJiAkZmlsZW5hbWUgIT0gJy4uJykNCiAgICAgICAgew0KICAgICAgICAgICRmaWxlc1tdID0gJGZpbGVuYW1lOw0KICAgICAgICAgIA0KICAgICAgICAgIGlmIChzdHJwb3MoJGZpbGVuYW1lLCAnLicpICE9PSBmYWxzZSkNCiAgICAgICAgICB7DQogICAgICAgICAgICAkdHlwZXNbXSA9IHN1YnN0cigkZmlsZW5hbWUsIHN0cnJwb3MoJGZpbGVuYW1lLCAnLicpICsgMSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICB7DQogICAgICAgICAgICAkdHlwZXNbXSA9ICc/JzsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgIH0NCiAgICAgICAgDQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBhcnJheSgkZmlsZXMsJHR5cGVzKTsNCiAgfQ0KDQogIHN0YXRpYyBmdW5jdGlvbiBwdXJnZUFsbEltYWdlKCRhbGlhcywgJGltYWdlTnVtYmVyKQ0KICB7ICAgDQogICAgc2VsZjo6cHVyZ2VTY2FsZWRJbWFnZXMoJGFsaWFzLCAkaW1hZ2VOdW1iZXIpOw0KICAgIHNlbGY6OnB1cmdlU291cmNlSW1hZ2UoJGFsaWFzLCAkaW1hZ2VOdW1iZXIpOyAgICAgICAgDQogIH0NCiAgDQogIHN0YXRpYyBmdW5jdGlvbiBwdXJnZVNjYWxlZEltYWdlcygkYWxpYXMsICRpbWFnZU51bWJlcikNCiAgew0KICAgIHNlbGY6Ol9pbml0aWFsaXplKCk7DQogICAgJG1vZCA9IHNlbGY6OiRfbW9kOw0KICAgICRjb25maWcgPSBzZWxmOjokX2NvbmZpZzsNCiAgICAkYXNzZXRzX3BhdGggPSBzZWxmOjpnZXRBc3NldFBhdGgoJ2YnKTsNCiAgICANCiAgICAkc3JjRGlyID0gY21zX2pvaW5fcGF0aCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb25maWdbJ3VwbG9hZHNfcGF0aCddLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzc2V0c19wYXRoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICANCiAgICAkdG9EZWwgPSBhcnJheSgpOw0KICAgIA0KICAgIGlmICgkZGggPSBvcGVuZGlyKCRzcmNEaXIpKQ0KICAgIHsNCiAgICANCiAgICAgIHdoaWxlICgoJGZpbGUgPSByZWFkZGlyKCRkaCkpICE9PSBmYWxzZSkNCiAgICAgIHsNCiAgICAgICAgJGZpbGVQYXJ0cyA9IGV4cGxvZGUoJ18nLCAkZmlsZSk7DQogICAgICAgIA0KICAgICAgICBpZiAoJGZpbGVQYXJ0c1swXSA9PSAkYWxpYXMgJiYgJGZpbGVQYXJ0c1syXSA9PSAkaW1hZ2VOdW1iZXIpDQogICAgICAgIHsNCiAgICAgICAgICBhcnJheV9wdXNoKCR0b0RlbCwgJHNyY0RpciAuICcvJyAuICRmaWxlKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgIH0NCiAgICAgIA0KICAgICAgY2xvc2VkaXIoJGRoKTsNCiAgICB9DQogICAgICAgIA0KICAgIGZvcmVhY2ggKCR0b0RlbCBhcyAkdGhpc0RlbCkNCiAgICB7DQogICAgICB1bmxpbmsoJHRoaXNEZWwpOw0KICAgIH0NCiAgfQ0KDQogIHN0YXRpYyBmdW5jdGlvbiBwdXJnZVNvdXJjZUltYWdlKCRhbGlhcywgJGltYWdlTnVtYmVyKQ0KICB7DQogICAgc2VsZjo6X2luaXRpYWxpemUoKTsNCiAgICAkbW9kID0gc2VsZjo6JF9tb2Q7DQogICAgJGNvbmZpZyA9IHNlbGY6OiRfY29uZmlnOw0KICAgIA0KICAgICRmbiA9ICRhbGlhcyANCiAgICAgICAgIC4gJ19zcmNfJw0KICAgICAgICAgLiAkaW1hZ2VOdW1iZXINCiAgICAgICAgIC4gJy5qcGcnOw0KICAgICAgICANCiAgICAkc3JjU3BlYyA9ICBjbXNfam9pbl9wYXRoKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Z2V0QXNzZXRQYXRoKCdzJyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICB1bmxpbmsoJHNyY1NwZWMpOw0KICAgIA0KICB9DQoNCg0KICBzdGF0aWMgZnVuY3Rpb24gcmVuYW1lSW1hZ2VzKCRvbGQsICRuZXdBbGlhcykNCiAgew0KICAgIHNlbGY6Ol9pbml0aWFsaXplKCk7DQogICAgJG1vZCA9IHNlbGY6OiRfbW9kOw0KICAgICRjb25maWcgPSBzZWxmOjokX2NvbmZpZzsNCiAgICANCiAgICAkcGF0aCA9IGNtc19qb2luX3BhdGgoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Z2V0QXNzZXRQYXRoKCdzJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICANCiAgICANCiAgICBpZiAoJGhhbmRsZSA9IG9wZW5kaXIoJHBhdGgpICkNCiAgICB7DQogICAgICANCiAgICAgIHdoaWxlICggZmFsc2UgIT09ICggJGZpbGUgPSByZWFkZGlyKCRoYW5kbGUgKSkgKQ0KICAgICAgew0KICAgICAgICBpZiAoIHN1YnN0cigkZmlsZSwgMCwgc3RybGVuKCRvbGQpICkgPT0gJG9sZCkNCiAgICAgICAgew0KICAgICAgICAgICRuZXdzcGVjID0gJG5ld0FsaWFzIC4gc3Vic3RyKCAkZmlsZSwgc3RybGVuKCRvbGQpICk7DQogICAgICAgICAgDQogICAgICAgICAgJG9sZF9maWxlID0gY21zX2pvaW5fcGF0aCgkcGF0aCwgJGZpbGUpOw0KICAgICAgICAgICRuZXdfZmlsZSA9IGNtc19qb2luX3BhdGgoJHBhdGgsICRuZXdzcGVjKTsNCiAgICAgICAgICANCiAgICAgICAgICByZW5hbWUoJG9sZF9maWxlLCAkbmV3X2ZpbGUpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICANCiAgICAgIGNsb3NlZGlyKCRoYW5kbGUpOw0KICAgIH0NCiAgfQ0KICANCiAgIyMjIyMjIGdlbmVyaWMuLi4uLg0KICANCiAgLyoqDQogICogRGVsZXRlIGEgZmlsZSBvciByZWN1cnNpdmVseSBkZWxldGUgYSBkaXJlY3RvcnkNCiAgKg0KICAqIEBwYXJhbSBzdHJpbmcgJHN0ciBQYXRoIHRvIGZpbGUgb3IgZGlyZWN0b3J5DQogICovDQogIHN0YXRpYyBmdW5jdGlvbiByZWN1cnNpdmVEZWxldGUoJHN0cikNCiAgew0KICAgICRSZXN1bHQgPSBpc19maWxlKCRzdHIpOw0KICAgIA0KICAgIGlmKCRSZXN1bHQpDQogICAgew0KICAgICAgJFJlc3VsdCA9IEB1bmxpbmsoJHN0cik7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAkUmVzdWx0ID0gaXNfZGlyKCRzdHIpOw0KICAgICAgDQogICAgICBpZigkUmVzdWx0KQ0KICAgICAgew0KICAgICAgICAkc2NhbiA9IGdsb2IoIHJ0cmltKCRzdHIsICcvJykgLiAnLyonICk7DQogICAgICAgIA0KICAgICAgICBmb3JlYWNoKCRzY2FuIGFzICRpbmRleD0+JHBhdGgpDQogICAgICAgIHsNCiAgICAgICAgICAkUmVzdWx0ID0gJFJlc3VsdCAmJiByZWN1cnNpdmVEZWxldGUoJHBhdGgpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkUmVzdWx0ID0gJFJlc3VsdCAmJiBAcm1kaXIoJHN0cik7ICAgICANCiAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuICRSZXN1bHQ7DQogIH0NCiAgDQogIC8qKg0KICAqIEBtZXRob2QgRGVsZXRlRmlsZQ0KICAqIEp1c3QgYSBjb252aW5pZW5jZSBmdW5jdGlvbiB0byBzaWxlbnRseSBkZWxldGUgZmlsZXMNCiAgKiBNYXkgZmFpbCBvbiBzb21lIGVudmlyb21lbnRzDQogICogDQogICogQHBhcmFtIG1peGVkICRmaWxlbmFtZQ0KICAqIEByZXR1cm5zIFRydWUgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIGZhbHNlDQogICovDQogIHN0YXRpYyBmdW5jdGlvbiBEZWxldGVGaWxlKCRmaWxlbmFtZSkNCiAgew0KICAgICRyZXN1bHQgPSBmaWxlX2V4aXN0cygkZmlsZW5hbWUpOw0KICAgIGlmICgkcmVzdWx0KSAkcmVzdWx0ID0gQHVubGluaygkZmlsZW5hbWUpOw0KICAgIHJldHVybiAkcmVzdWx0Ow0KICB9DQogIA0KICBzdGF0aWMgZnVuY3Rpb24gRGVsZXRlRmlsZVdNYXNrKCRtYXNrKQ0KICB7DQogICAgYXJyYXlfd2FsayhnbG9iKCRtYXNrKSwgJ3VubGluaycpOw0KICB9DQoNCn0NCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.catTemplateOperations.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogQ2F0YWxvZ2VyIC0gYnVpbGQgYSBjYXRhbG9nIG9yIHBvcnRmb2xpbyBvZiBzdHVmZg0KIyBWZXJzaW9uOiAwLjEyDQojDQojIENvcHlyaWdodCAoYykgMjAxMiwgRmVybmFuZG8gTW9yZ2FkbyAoSm9Nb3JnKSBqb21vcmcubW9yZ0BnbWFpbC5jb20NCiMgQ29weXJpZ2h0IChjKSAyMDA2LCBTYW11ZWwgR29sZHN0ZWluIDxzamdAY21zbW9kdWxlcy5jb20+DQojIEZvciBJbmZvcm1hdGlvbiwgU3VwcG9ydCwgQnVnIFJlcG9ydHMsIGV0YywgcGxlYXNlIHZpc2l0IHRoZQ0KIyBDTVMgTWFkZSBTaW1wbGUgRm9yZ2UgYXQgaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZw0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA2IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovKioNCiogY2xhc3MgY2F0VGVtcGxhdGVfT3BlcmF0aW9ucw0KKiBAYXV0aG9yIEpvIE1vcmcgKEZlcm5hbmRvIE1vcmdhZG8pDQoqIEBjb3B5cmlnaHQgwqkyMDEzIEpvIE1vcmcNCiovDQpjbGFzcyBjYXRUZW1wbGF0ZU9wZXJhdGlvbnMNCnsNCiAgcHJvdGVjdGVkIHN0YXRpYyAkX2RiOw0KICANCiAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2dldERCKCkNCiAgew0KICAgIA0KICAgIGlmICggIWlzX29iamVjdChzZWxmOjokX2RiKSApDQogICAgew0KICAgICAgc2VsZjo6JF9kYiA9IGNtc21zKCktPkdldERiKCk7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBzZWxmOjokX2RiOw0KICAgIA0KICB9DQogIA0KICAvKioNCiAgKiBSZW1vdmUgYWxsIG5vbi13b3JkIGNoYXJhY3RlcnMNCiAgKiANCiAgKiBAcGFyYW0gbWl4ZWQgJHRleHQNCiAgKi8NCiAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX3NhZmVBdHQoJHRleHQpDQogIHsNCiAgICByZXR1cm4gc3RydG9sb3dlcihwcmVnX3JlcGxhY2UoJy9cVy8nLCAnJywgJHRleHQpKTsgDQogIH0NCiAgDQogIC8qKg0KICAqIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgY3VycmVudCBUZW1wbGF0ZSB0eXBlcw0KICAqIEBhdXRob3IgSm9Nb3JnIChGZXJuYW5kbyBNb3JnYWRvKQ0KICAqIEBzaW5jZSAwLjEyDQogICogQHN0YXRpYw0KICAqIEByZXR1cm5zIGEgcmVmIHRvIGFuIGFycmF5DQogICovDQogIHN0YXRpYyBmdW5jdGlvbiAmR2V0Q2F0YWxvZ2VyVGVtcGxhdGVUeXBlcygpDQogIHsNCiAgICAkZGIgPSBzZWxmOjpfZ2V0REIoKTsNCiAgICAkdHlwZXMgPSBhcnJheSgpOw0KDQogICAgJHF1ZXJ5ID0gJ1NFTEVDVCB0eXBlX2lkLCBuYW1lIEZST00gJyANCiAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgICAgIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlX3R5cGUnOw0KICAgICAgICAgICAgIA0KICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgIA0KICAgIHdoaWxlICgkZGJyZXN1bHQgIT09IGZhbHNlICYmICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpDQogICAgew0KICAgICAgJHR5cGVzWyRyb3dbJ25hbWUnXV0gPSAkcm93Wyd0eXBlX2lkJ107DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkdHlwZXM7DQogIH0NCiAgDQogIC8qKg0KICAqIFNhdmVUZW1wbGF0ZS4uLg0KICAqIA0KICAqIEBwYXJhbSBtaXhlZCAkdHlwZV9pZA0KICAqIEBwYXJhbSBtaXhlZCAkdGVtcF9uYW1lDQogICogQHBhcmFtIG1peGVkICR0ZW1wbGF0ZQ0KICAqLw0KICBzdGF0aWMgZnVuY3Rpb24gU2F2ZVRlbXBsYXRlKCR0eXBlX2lkLCAkdGVtcF9uYW1lLCAkdGVtcGxhdGUpDQogIHsNCiAgICAkZGIgPSBzZWxmOjpfZ2V0REIoKTsNCiAgICANCiAgICAkdGVtcF9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlX3NlcScpOw0KDQogICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcNCiAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgKGlkLCB0eXBlX2lkLCB0aXRsZSwgdGVtcGxhdGUpICcNCiAgICAgICAgICAgLiAnIFZBTFVFUyAoPyw/LD8sPyknOw0KICAgICAgICAgICANCiAgICAkYXJyID0gYXJyYXkoJHRlbXBfaWQsICR0eXBlX2lkLCAkdGVtcF9uYW1lLCAkdGVtcGxhdGUpOw0KICAgIA0KICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICRhcnIpOw0KICAgIA0KICAgIHJldHVybiAkZGJyZXN1bHQ7DQogIH0NCiAgIA0KICAvKioNCiAgKiBTYXZlVGVtcGxhdGVDaGFuZ2VzDQogICogDQogICogQHBhcmFtIG1peGVkICRwYXJhbXMNCiAgKiBAcmV0dXJuIEJvb2xlYW4gPSBUUlVFIGlmIHN1Y2Nlc3MNCiAgKiBAc2luY2UgMC4xMg0KICAqLw0KICBzdGF0aWMgZnVuY3Rpb24gU2F2ZVRlbXBsYXRlQ2hhbmdlcygkcGFyYW1zKQ0KICB7DQogICAgJGVyciA9IEZBTFNFOw0KICAgIA0KICAgIGlmICghaXNfYXJyYXkoJHBhcmFtcykpDQogICAgew0KICAgICAgJGVyckRlc2NycCA9ICdTYXZpbmcgVGVtcGxhdGUgKGVycm9yOiAkcGFyYW1zIG5vdCBhbiBhcnJheSknOw0KICAgICAgYXVkaXQoJHBhcmFtc1sndGVtcGxhdGVfaWQnXSwgX19NRVRIT0RfXywgJGVyckRlc2NycCk7DQogICAgICAkZXJyID0gVFJVRTsNCiAgICAgIHJldHVybiAkZXJyOw0KICAgIH0NCiAgICANCiAgICAkZGIgPSBzZWxmOjpfZ2V0REIoKTsNCiAgICANCiAgICAkcXVlcnkgPSAnVVBEQVRFICcNCiAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgICAgIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlIHNldCB0aXRsZT0/LCB0ZW1wbGF0ZT0/LCB0eXBlX2lkPT8gV0hFUkUgaWQ9Pyc7DQogICAgDQogICAgJHFBcnIgPSBhcnJheSgkcGFyYW1zWyd0aXRsZSddLA0KICAgICAgICAgICAgICAgICAgJHBhcmFtc1sndGVtcGwnXSwNCiAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ3R5cGVfaWQnXSwgDQogICAgICAgICAgICAgICAgICAkcGFyYW1zWyd0ZW1wbGF0ZV9pZCddKTsNCiAgICAgICAgICAgICANCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkcUFycik7DQogICAgDQogICAgaWYgKCEkZGJyZXN1bHQpDQogICAgew0KICAgICAgJGVyckRlc2NycCA9ICdTYXZpbmcgVGVtcGxhdGUgKGVycm9yOiBObyByZXN1bHRzIGZyb20gcXVlcnkpJzsNCiAgICAgIGF1ZGl0KCRwYXJhbXNbJ3RlbXBsYXRlX2lkJ10sIF9fTUVUSE9EX18sICRlcnJEZXNjcnApOw0KICAgICAgJGVyciA9IFRSVUU7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkZXJyOw0KICB9DQogIA0KICBzdGF0aWMgZnVuY3Rpb24gR2V0VGVtcGxhdGVGcm9tSUQoJGlkKQ0KICB7DQogICAgJGRiID0gc2VsZjo6X2dldERCKCk7DQogICAgDQogICAgJHF1ZXJ5ID0gJ1NFTEVDVCB0aXRsZSwgdGVtcGxhdGUsIHR5cGVfaWQsIGlkIEZST00gJyANCiAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgICAgIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlIFdIRVJFIGlkPT8gT1JERVIgYnkgdGl0bGUnOw0KICANCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaWQpKTsNCiAgICByZXR1cm4gJGRicmVzdWx0LT5GZXRjaFJvdygpOw0KICB9DQogIA0KICBzdGF0aWMgZnVuY3Rpb24gJkdldFRlbXBsYXRlTGlzdEZyb21JRCgkaWQpDQogIHsNCiAgICAkZGIgPSBzZWxmOjpfZ2V0REIoKTsNCiAgICANCiAgICAkcXVlcnkgPSAnU0VMRUNUIHRpdGxlLCB0ZW1wbGF0ZSwgdHlwZV9pZCwgaWQgRlJPTSAnIA0KICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAgICAgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUgV0hFUkUgdHlwZV9pZD0/IE9SREVSIGJ5IHRpdGxlJzsNCiAgDQogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGlkKSk7DQogICAgDQogICAgd2hpbGUgKCRkYnJlc3VsdCAhPT0gZmFsc2UgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkNCiAgICB7DQogICAgICAkc3ViVGVtcGxhdGVzWyRyb3dbJ3RpdGxlJ11dID0gJHJvd1snaWQnXTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRzdWJUZW1wbGF0ZXM7DQogIH0NCiAgDQogIHN0YXRpYyBmdW5jdGlvbiAmR2V0QXR0c0Zyb21UeXBlKCRpZCkNCiAgew0KICAgICRkYiA9IHNlbGY6Ol9nZXREQigpOw0KICAgIA0KICAgICRxdWVyeSA9ICJTRUxFQ1QgYXR0cmlidXRlLCBhbGlhcywgdHlwZV9pZCBGUk9NICINCiAgICAgICAgICAgICAuIGNtc19kYl9wcmVmaXgoKQ0KICAgICAgICAgICAgIC4gIm1vZHVsZV9jYXRhbG9nX2F0dHIgV0hFUkUgdHlwZV9pZD0/IjsNCiAgICAgICAgIA0KICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpZCkpOw0KDQogICAgcmV0dXJuICRkYnJlc3VsdDsNCiAgICAgIA0KICB9DQogIA0KICANCiAgc3RhdGljIGZ1bmN0aW9uIGdldFRlbXBsYXRlRnJvbUFsaWFzKCRhbGlhcykNCiAgew0KICAgICRkYiA9IHNlbGY6Ol9nZXREQigpOw0KICAgICRxdWVyeSA9ICdTRUxFQ1QgaWQgZnJvbSAnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlIHdoZXJlIHRpdGxlPT8nOw0KICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRhbGlhcykgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICBpZiAoJGRicmVzdWx0ICE9PSBmYWxzZSAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQ0KICAgIHsNCiAgICAgIHJldHVybiAnY2F0YWxvZ18nIC4gJHJvd1snaWQnXTsNCiAgICB9DQogICAgDQogICAgICByZXR1cm4gJyc7ICANCiAgfQ0KICANCiAgDQogIHN0YXRpYyBmdW5jdGlvbiAmR2V0VXNlckF0dExpc3QoJGlkKQ0KICB7DQogICAgIyBmb3IgdGhlIG1vbWVudCBsZWF2ZSBhdCBhcyBpcyBidXQgbW9yZSBjaGFuZ2VzIGFyZSBuZWVkZWQuLi4uIChKTSkNCiAgICAkZGJyZXN1bHQgPSBzZWxmOjpHZXRBdHRzRnJvbVR5cGUoJGlkKTsNCiAgICANCiAgICAkYXR0cnMgPSBhcnJheSgpOw0KDQogICAgd2hpbGUgKCRkYnJlc3VsdCAhPT0gZmFsc2UgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkNCiAgICB7DQogICAgICAkc2FmZWF0dHIgPSBzZWxmOjpfc2FmZUF0dCgkcm93WydhdHRyaWJ1dGUnXSk7DQogICAgICANCiAgICAgICRhdHRyID0gYXJyYXkoDQogICAgICAgICAgICAgICAgICAgICAgJ25hbWUnICA9PiAneyQnIC4gJHNhZmVhdHRyIC4gJ30nLA0KICAgICAgICAgICAgICAgICAgICAgICdhbGlhcycgPT4gJ3skJyAuICRyb3dbJ2FsaWFzJ10gLiAnfScNCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgIA0KICAgICAgYXJyYXlfcHVzaCgkYXR0cnMsICRhdHRyKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuICRhdHRyczsNCiAgfQ0KICANCiAgDQogIHN0YXRpYyBmdW5jdGlvbiBHZXRBdHRMaXN0RnJvbVR5cGUoJFRlbXBsYXRlVHlwZSkNCiAgew0KICAgICRhID0gYXJyYXkoKTsNCiAgICANCiAgICBzd2l0Y2ggKCRUZW1wbGF0ZVR5cGUpDQogICAgew0KICAgICAgY2FzZSBDVEVNUExBVEVfSVRFTToNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyR0aXRsZX0nKTsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRub3Rlc30nKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICANCiAgICAgIGNhc2UgQ1RFTVBMQVRFX0NBVEVHT1JZOg0KICAgICAgDQogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkYSwgJ3skdGl0bGV9Jyk7DQogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkYSwgJ3skbm90ZXN9Jyk7DQogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkYSwgJ3skcHJldn0nKTsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRwcmV2dXJsfScpOw0KICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJGEsICd7JG5hdnN0cn0nKTsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRuZXh0fScpOw0KICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJGEsICd7JG5leHR1cmx9Jyk7DQogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkYSwgJ3skaXRlbXN9Jyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgDQogICAgICBjYXNlIENURU1QTEFURV9DQVRBTE9HOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRpdGVtc30nKTsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRhdHRybGlzdH0nKTsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRyb290X3VybH0nKTsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRpbWFnZV9yb290fScpOw0KICAgICAgICAgICAgICAgIGJyZWFrOyANCiAgICAgIA0KICAgICAgY2FzZSBDVEVNUExBVEVfQ09NUEFSSVNPTjoNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRpdGVtc30nKTsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRhdHRybGlzdH0nKTsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRyb290X3VybH0nKTsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRhLCAneyRpbWFnZV9yb290fScpOw0KICAgICAgICAgICAgICAgIGJyZWFrOyAgDQogICAgICAgICAgICAgICAgDQogICAgICBjYXNlIENURU1QTEFURV9GRUFUVVJFOg0KDQogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkYSwgJ3skaXRlbXN9Jyk7DQogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkYSwgJ3skcm9vdF91cmx9Jyk7DQogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkYSwgJ3skaW1hZ2Vfcm9vdH0nKTsNCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICANCiAgICB9DQogICAgDQogICAgI3NlbGY6OkdldEF0dExpc3QoJGEsICRUZW1wbGF0ZVR5cGUpOw0KDQogICAgcmV0dXJuICRhOw0KICB9DQogIA0KICBzdGF0aWMgZnVuY3Rpb24gaW1wb3J0U2FtcGxlVGVtcGxhdGVzKCAkb25seXR5cGUgPSAnYWxsJyApDQogIHsNCiAgICAkZGIgPSBzZWxmOjpfZ2V0REIoKTsNCiAgICAkZGlyID0gb3BlbmRpciggZGlybmFtZShfX0ZJTEVfXykgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2luY2x1ZGVzJyk7DQogICAgJHRlbXBzID0gYXJyYXkoKTsNCiAgICANCiAgICB3aGlsZSggJGZpbGVzcGVjID0gcmVhZGRpcigkZGlyKSApDQogICAgew0KICAgICAgaWYoISBwcmVnX21hdGNoKCcvXC50cGwkL2knLCAkZmlsZXNwZWMpKQ0KICAgICAgew0KICAgICAgICBjb250aW51ZTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgICBhcnJheV9wdXNoKCR0ZW1wcywgJGZpbGVzcGVjKTsNCiAgICB9DQogICAgICAgICAgICANCiAgICBzb3J0KCR0ZW1wcyk7DQoNCiAgICBmb3JlYWNoICgkdGVtcHMgYXMgJGZpbGVzcGVjKQ0KICAgIHsNCiAgICAgICRmaWxlID0gZmlsZSgNCiAgICAgICAgICAgICAgICAgICAgZGlybmFtZShfX0ZJTEVfXykNCiAgICAgICAgICAgICAgICAgICAgLiBESVJFQ1RPUllfU0VQQVJBVE9SIA0KICAgICAgICAgICAgICAgICAgICAuICdpbmNsdWRlcycNCiAgICAgICAgICAgICAgICAgICAgLiBESVJFQ1RPUllfU0VQQVJBVE9SDQogICAgICAgICAgICAgICAgICAgIC4gJGZpbGVzcGVjDQogICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICANCiAgICAgICR0ZW1wbGF0ZSA9IGltcGxvZGUoJycsICRmaWxlKTsNCiAgICAgIA0KICAgICAgJHRlbXBfbmFtZSA9IHByZWdfcmVwbGFjZSgnL1wudHBsJC9pJywgJycsICRmaWxlc3BlYyk7DQogICAgICANCiAgICAgICMNCiAgICAgIC8vIGNoZWNrIGlmIGl0IGFscmVhZHkgZXhpc3RzDQogICAgICAkZXhjaGVjayA9ICdTRUxFQ1QgaWQgZnJvbSAnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlIHdoZXJlIHRpdGxlPT8nOw0KICAgICAgJGRiY291bnQgPSAkZGItPkV4ZWN1dGUoJGV4Y2hlY2sgLCBhcnJheSgkdGVtcF9uYW1lKSk7DQogICAgICAjDQogICAgICANCiAgICAgICMgcmVuYW1lPz8/DQogICAgICB3aGlsZSAoJGRiY291bnQgJiYgJGRiY291bnQtPlJlY29yZENvdW50KCkgPiAwKQ0KICAgICAgew0KICAgICAgICAkdGVtcF9uYW1lIC49ICdfbmV3JzsNCiAgICAgICAgJGRiY291bnQgPSAkZGItPkV4ZWN1dGUoICRleGNoZWNrLCBhcnJheSgkdGVtcF9uYW1lKSApOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkdHlwZV9pZCA9IC0xOw0KICAgICAgJHR5cGUgPSBzdWJzdHIoICR0ZW1wX25hbWUsIDAsIHN0cnBvcygkdGVtcF9uYW1lLCAnLScpICk7DQogICAgICANCiAgICAgIGlmICggJHR5cGUgPT0gJ0l0ZW0nICYmICgkb25seXR5cGU9PSdhbGwnIHx8ICRvbmx5dHlwZT0nSXRlbScpICkNCiAgICAgIHsNCiAgICAgICAgJHR5cGVfaWQgPSBDVEVNUExBVEVfSVRFTTsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYgKCAkdHlwZSA9PSAnQ2F0ZWdvcnknICYmICgkb25seXR5cGU9PSdhbGwnIHx8ICRvbmx5dHlwZT0nQ2F0ZWdvcnknKSApDQogICAgICB7DQogICAgICAgICR0eXBlX2lkID0gQ1RFTVBMQVRFX0NBVEVHT1JZOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZiAoICR0eXBlID09ICdQcmludGFibGUnICYmICgkb25seXR5cGU9PSdhbGwnIHx8ICRvbmx5dHlwZT0nUHJpbnRhYmxlJykgKQ0KICAgICAgew0KICAgICAgICAkdHlwZV9pZCA9IENURU1QTEFURV9DQVRBTE9HOw0KICAgICAgfQ0KICAgICAgZWxzZSBpZiAoICR0eXBlID09ICdDb21wYXJpc29uJyAmJiAoJG9ubHl0eXBlPT0nYWxsJyB8fCAkb25seXR5cGU9J0NvbXBhcmlzb24nKSApDQogICAgICB7DQogICAgICAgICR0eXBlX2lkID0gQ1RFTVBMQVRFX0NPTVBBUklTT047DQogICAgICB9DQogICAgICBlbHNlIGlmICggJHR5cGUgPT0gJ0ZlYXR1cmUnICYmICgkb25seXR5cGU9PSdhbGwnIHx8ICRvbmx5dHlwZT0nRmVhdHVyZScpICkNCiAgICAgIHsNCiAgICAgICAgJHR5cGVfaWQgPSBDVEVNUExBVEVfRkVBVFVSRTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgY2F0VGVtcGxhdGVfT3BlcmF0aW9uczo6U2F2ZVRlbXBsYXRlKCR0eXBlX2lkLCAkdGVtcF9uYW1lLCAkdGVtcGxhdGUpOw0KICAgICAgDQogICAgICAjIA0KICAgICAgLyogICANCiAgICAgICR0ZW1wX2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX2NhdGFsb2dfdGVtcGxhdGVfc2VxJyk7DQoNCiAgICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnDQogICAgICAgICAgICAgLiBjbXNfZGJfcHJlZml4KCkNCiAgICAgICAgICAgICAuICdtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZSAoaWQsIHR5cGVfaWQsIHRpdGxlLCB0ZW1wbGF0ZSkgJw0KICAgICAgICAgICAgIC4gJyBWQUxVRVMgKD8sPyw/LD8pJzsNCiAgICAgICAgICAgICANCiAgICAgICRhcnIgPSBhcnJheSgkdGVtcF9pZCwkdHlwZV9pZCwgJHRlbXBfbmFtZSwkdGVtcGxhdGUpOw0KICAgICAgDQogICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkYXJyKTsNCiAgICAgICovDQogICAgICAjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICR0aGlzLT5TZXRUZW1wbGF0ZSggJ2NhdGFsb2dfJyAuICR0ZW1wX2lkLCAkdGVtcGxhdGUpOw0KICAgIH0NCiAgDQogIH0NCiANCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.catUserDefAttributesOps.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmNsYXNzIGNhdFVzZXJEZWZBdHRyaWJ1dGVzT3BzDQp7DQogIHByaXZhdGUgc3RhdGljICRhdHRycyA9IGFycmF5KCk7DQogIHByaXZhdGUgc3RhdGljICRfZGI7DQogIA0KICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfZ2V0REIoKQ0KICB7DQogICAgDQogICAgaWYgKCAhaXNfb2JqZWN0KHNlbGY6OiRfZGIpICkNCiAgICB7DQogICAgICBzZWxmOjokX2RiID0gY21zbXMoKS0+R2V0RGIoKTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIHNlbGY6OiRfZGI7DQogICAgDQogIH0NCiAgDQogIHN0YXRpYyBmdW5jdGlvbiAmZ2V0VXNlckF0dHJpYnV0ZXMoJGdsb2JhbF9yZWYgPSAnY2F0YWxvZ19hdHRycycpDQogIHsNCiAgICAgICRkYiA9IHNlbGY6Ol9nZXREQigpOw0KICAgICAgc2VsZjo6JGF0dHJzWyRnbG9iYWxfcmVmXSA9IGFycmF5KCk7DQogICAgICANCiAgICAgICRxdWVyeSA9ICJTRUxFQ1QgYXR0cmlidXRlLCBhbGlhcywgZGVmYXVsdHZhbCwgbGVuZ3RoLCBmaWVsZF90eXBlLCBzZWxlY3RfdmFsdWVzLCBvcmRlcl9ieSBGUk9NICINCiAgICAgICAgICAgICAgIC4gY21zX2RiX3ByZWZpeCgpDQogICAgICAgICAgICAgICAuICJtb2R1bGVfY2F0YWxvZ19hdHRyIFdIRVJFIHR5cGVfaWQ9PyBPUkRFUiBCWSBvcmRlcl9ieSBBU0MiOw0KICAgICAgICAgICAgICAgDQogICAgICAkdHlwZV9pZCA9IDE7DQogICAgICANCiAgICAgIGlmICgkZ2xvYmFsX3JlZiA9PSAnY2F0YWxvZ19jYXRfYXR0cnMnKQ0KICAgICAgew0KICAgICAgICAkdHlwZV9pZCA9IDI7DQogICAgICB9DQogICAgICBlbHNlaWYgKCRnbG9iYWxfcmVmID09ICdjYXRhbG9nX3ByaW50X2F0dHJzJykNCiAgICAgIHsNCiAgICAgICAgJHR5cGVfaWQgPSAzOw0KICAgICAgfQ0KICAgICAgDQogICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdHlwZV9pZCkpOw0KICAgICAgDQogICAgICB3aGlsZSAoJGRicmVzdWx0ICE9PSBmYWxzZSAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQ0KICAgICAgew0KICAgICAgICAkQXR0ciA9IG5ldyBzdGRDbGFzcygpOw0KICAgICAgICAkQXR0ci0+YXR0ciA9ICRyb3dbJ2F0dHJpYnV0ZSddOw0KICAgICAgICAkQXR0ci0+YWxpYXMgPSAhZW1wdHkoJHJvd1snYWxpYXMnXSkgPyAkcm93WydhbGlhcyddIDogc3RydG9sb3dlciggcHJlZ19yZXBsYWNlKCcvXFcvJywgJycsICRyb3dbJ2F0dHJpYnV0ZSddKSApOw0KICAgICAgICAkQXR0ci0+bGVuZ3RoID0gJHJvd1snbGVuZ3RoJ107DQogICAgICAgICRBdHRyLT5kZWZhdWx0ID0gJHJvd1snZGVmYXVsdHZhbCddOw0KICAgICAgICAkQXR0ci0+c2VsZWN0X3ZhbHVlcyA9ICRyb3dbJ3NlbGVjdF92YWx1ZXMnXTsNCiAgICAgICAgJEF0dHItPmZpZWxkX3R5cGUgPSAkcm93WydmaWVsZF90eXBlJ107DQogICAgICAgICRBdHRyLT5maWVsZF9vcmRlciA9ICRyb3dbJ29yZGVyX2J5J107DQogICAgICAgICRBdHRyLT5zYWZlID0gc3RydG9sb3dlciggcHJlZ19yZXBsYWNlKCcvXFcvJywgJycsICRyb3dbJ2F0dHJpYnV0ZSddKSApOw0KICAgICAgICBzZWxmOjokYXR0cnNbJGdsb2JhbF9yZWZdWyRBdHRyLT5hbGlhc10gPSAkQXR0cjsNCiAgICAgIH0NCg0KICAgIHJldHVybiBzZWxmOjokYXR0cnNbJGdsb2JhbF9yZWZdOw0KICB9ICANCn0NCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/lib/external/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/external/Image/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/external/Image/Files.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEZpbGUgVXRpbGl0aWVzLgogKiBAYXV0aG9yICRBdXRob3I6IFdlaSBaaHVvICQKICogQHZlcnNpb24gJElkOiBGaWxlcy5waHAgODU1MSAyMDEyLTEyLTA4IDE1OjI1OjQxWiBjYWxndXkxMDAwICQKICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyCiAqLwoKZGVmaW5lKCdGSUxFX0VSUk9SX05PX1NPVVJDRScsIDEwMCk7CmRlZmluZSgnRklMRV9FUlJPUl9DT1BZX0ZBSUxFRCcsIDEwMSk7CmRlZmluZSgnRklMRV9FUlJPUl9EU1RfRElSX0ZBSUxFRCcsIDEwMik7CmRlZmluZSgnRklMRV9DT1BZX09LJywgMTAzKTsKCi8qKgogKiBGaWxlIFV0aWxpdGllcwogKiBAYXV0aG9yICRBdXRob3I6IFdlaSBaaHVvICQKICogQHZlcnNpb24gJElkOiBGaWxlcy5waHAgODU1MSAyMDEyLTEyLTA4IDE1OjI1OjQxWiBjYWxndXkxMDAwICQKICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyCiAqIEBzdWJwYWNrYWdlIGZpbGVzCiAqLwpjbGFzcyBGaWxlcyAKewoJCgkvKioKCSAqIENvcHkgYSBmaWxlIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLiBJZiB1bmlxdWUgPT0gdHJ1ZSwgdGhlbiBpZgoJICogdGhlIGRlc3RpbmF0aW9uIGV4aXN0cywgaXQgd2lsbCBiZSByZW5hbWVkIGJ5IGFwcGVuZGluZyBhbiBpbmNyZWFtZW50aW5nIAoJICogY291bnRpbmcgbnVtYmVyLgoJICogQHBhcmFtIHN0cmluZyAkc291cmNlIHdoZXJlIHRoZSBmaWxlIGlzIGZyb20sIGZ1bGwgcGF0aCB0byB0aGUgZmlsZXMgcmVxdWlyZWQKCSAqIEBwYXJhbSBzdHJpbmcgJGRlc3RpbmF0aW9uX2ZpbGUgbmFtZSBvZiB0aGUgbmV3IGZpbGUsIGp1c3QgdGhlIGZpbGVuYW1lCgkgKiBAcGFyYW0gc3RyaW5nICRkZXN0aW5hdGlvbl9kaXIgd2hlcmUgdGhlIGZpbGVzLCBqdXN0IHRoZSBkZXN0aW5hdGlvbiBkaXIsCgkgKiBlLmcuLCAvd3d3L2h0bWwvZ2FsbGVyeS8KCSAqIEBwYXJhbSBib29sZWFuICR1bmlxdWUgY3JlYXRlIHVuaXF1ZSBkZXN0aW5hdGlvbiBmaWxlIGlmIHRydWUuCgkgKiBAcmV0dXJuIHN0cmluZyB0aGUgbmV3IGNvcGllZCBmaWxlbmFtZSwgZWxzZSBlcnJvciBpZiBhbnl0aGluZyBnb2VzIGJhZC4KCSAqLwoJZnVuY3Rpb24gY29weUZpbGUoJHNvdXJjZSwgJGRlc3RpbmF0aW9uX2RpciwgJGRlc3RpbmF0aW9uX2ZpbGUsICR1bmlxdWU9dHJ1ZSkgCgl7CgkJaWYoIShmaWxlX2V4aXN0cygkc291cmNlKSAmJiBpc19maWxlKCRzb3VyY2UpKSkgCgkJCXJldHVybiBGSUxFX0VSUk9SX05PX1NPVVJDRTsKCgkJJGRlc3RpbmF0aW9uX2RpciA9IEZpbGVzOjpmaXhQYXRoKCRkZXN0aW5hdGlvbl9kaXIpOwoKCQlpZighaXNfZGlyKCRkZXN0aW5hdGlvbl9kaXIpKSAKCQkJUmV0dXJuIEZJTEVfRVJST1JfRFNUX0RJUl9GQUlMRUQ7CgoJCSRmaWxlbmFtZSA9IEZpbGVzOjplc2NhcGUoJGRlc3RpbmF0aW9uX2ZpbGUpOwoKCQlpZigkdW5pcXVlKSAKCQl7CgkJCSRkb3RJbmRleCA9IHN0cnJwb3MoJGRlc3RpbmF0aW9uX2ZpbGUsICcuJyk7CgkJCSRleHQgPSAnJzsKCQkJaWYoaXNfaW50KCRkb3RJbmRleCkpIAoJCQl7CgkJCQkkZXh0ID0gc3Vic3RyKCRkZXN0aW5hdGlvbl9maWxlLCAkZG90SW5kZXgpOwoJCQkJJGJhc2UgPSBzdWJzdHIoJGRlc3RpbmF0aW9uX2ZpbGUsIDAsICRkb3RJbmRleCk7CgkJCX0KCQkJJGNvdW50ZXIgPSAwOwoJCQl3aGlsZShpc19maWxlKCRkZXN0aW5hdGlvbl9kaXIuJGZpbGVuYW1lKSkgCgkJCXsKCQkJCSRjb3VudGVyKys7CgkJCQkkZmlsZW5hbWUgPSAkYmFzZS4nXycuJGNvdW50ZXIuJGV4dDsKCQkJfQoJCX0KCgkJaWYgKCFjb3B5KCRzb3VyY2UsICRkZXN0aW5hdGlvbl9kaXIuJGZpbGVuYW1lKSkKCQkJcmV0dXJuIEZJTEVfRVJST1JfQ09QWV9GQUlMRUQ7CgkJCgkJLy92ZXJpZnkgdGhhdCBpdCBjb3BpZWQsIG5ldyBmaWxlIG11c3QgZXhpc3RzCgkJaWYgKGlzX2ZpbGUoJGRlc3RpbmF0aW9uX2Rpci4kZmlsZW5hbWUpKQoJCQlSZXR1cm4gJGZpbGVuYW1lOwoJCWVsc2UKCQkJcmV0dXJuIEZJTEVfRVJST1JfQ09QWV9GQUlMRUQ7Cgl9CgoJLyoqCgkgKiBDcmVhdGUgYSBuZXcgZm9sZGVyLgoJICogQHBhcmFtIHN0cmluZyAkbmV3Rm9sZGVyIHNwZWNpZml5IHRoZSBmdWxsIHBhdGggb2YgdGhlIG5ldyBmb2xkZXIuCgkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiB0aGUgbmV3IGZvbGRlciBpcyBjcmVhdGVkLCBmYWxzZSBvdGhlcndpc2UuCgkgKi8KCWZ1bmN0aW9uIGNyZWF0ZUZvbGRlcigkbmV3Rm9sZGVyKSAKCXsKCQlta2RpciAoJG5ld0ZvbGRlciwgMDc3Nyk7CgkJcmV0dXJuIGNobW9kKCRuZXdGb2xkZXIsIDA3NzcpOwoJfQoKCgkvKioKCSAqIEVzY2FwZSB0aGUgZmlsZW5hbWVzLCBhbnkgbm9uLXdvcmQgY2hhcmFjdGVycyB3aWxsIGJlCgkgKiByZXBsYWNlZCBieSBhbiB1bmRlcnNjb3JlLgoJICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgdGhlIG9yZ2luYWwgZmlsZW5hbWUKCSAqIEByZXR1cm4gc3RyaW5nIHRoZSBlc2NhcGVkIHNhZmUgZmlsZW5hbWUKCSAqLwoJc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBlc2NhcGUoJGZpbGVuYW1lKSAKCXsKCQlSZXR1cm4gcHJlZ19yZXBsYWNlKCcvW15cd1wuX10vJywgJ18nLCAkZmlsZW5hbWUpOwoJfQoKCS8qKgoJICogRGVsZXRlIGEgZmlsZS4KCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgZmlsZSB0byBiZSBkZWxldGVkCgkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2UuCgkgKi8KCXN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZGVsRmlsZSgkZmlsZSkgCgl7CgkJaWYoaXNfZmlsZSgkZmlsZSkpIAoJCQlSZXR1cm4gdW5saW5rKCRmaWxlKTsKCQllbHNlCgkJCVJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIERlbGV0ZSBmb2xkZXIocyksIGNhbiBkZWxldGUgcmVjdXJzaXZlbHkuCgkgKiBAcGFyYW0gc3RyaW5nICRmb2xkZXIgdGhlIGZvbGRlciB0byBiZSBkZWxldGVkLgoJICogQHBhcmFtIGJvb2xlYW4gJHJlY3Vyc2l2ZSBpZiB0cnVlLCBhbGwgZmlsZXMgYW5kIHN1Yi1kaXJlY3RvcmllcwoJICogYXJlIGRlbGV0ZS4gSWYgZmFsc2UsIHRyaWVzIHRvIGRlbGV0ZSB0aGUgZm9sZGVyLCBjYW4gdGhyb3cKCSAqIGVycm9yIGlmIHRoZSBkaXJlY3RvcnkgaXMgbm90IGVtcHR5LgoJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgZGVsZXRlZC4KCSAqLwoJc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBkZWxGb2xkZXIoJGZvbGRlciwgJHJlY3Vyc2l2ZT1mYWxzZSkgCgl7CgkJJGRlbGV0ZWQgPSB0cnVlOwoJCWlmKCRyZWN1cnNpdmUpIAoJCXsKCQkJJGQgPSBkaXIoJGZvbGRlcik7CgkJCXdoaWxlIChmYWxzZSAhPSAoJGVudHJ5ID0gJGQtPnJlYWQoKSkpIAoJCQl7CgkJCQlpZiAoJGVudHJ5ICE9ICcuJyAmJiAkZW50cnkgIT0gJy4uJykKCQkJCXsKCQkJCQkkb2JqID0gRmlsZXM6OmZpeFBhdGgoJGZvbGRlcikuJGVudHJ5OwoJCQkJCS8vdmFyX2R1bXAoJG9iaik7CgkJCQkJaWYgKGlzX2ZpbGUoJG9iaikpCgkJCQkJewoJCQkJCQkkZGVsZXRlZCAmPSBGaWxlczo6ZGVsRmlsZSgkb2JqKTsJCQkJCQoJCQkJCX0KCQkJCQllbHNlIGlmKGlzX2Rpcigkb2JqKSkKCQkJCQl7CgkJCQkJCSRkZWxldGVkICY9IEZpbGVzOjpkZWxGb2xkZXIoJG9iaiwgJHJlY3Vyc2l2ZSk7CgkJCQkJfQoJCQkJCQoJCQkJfQoJCQl9CgkJCSRkLT5jbG9zZSgpOwoKCQl9CgoJCS8vJGZvbGRlcj0gJGZvbGRlci4nL3RodW1icyc7CgkJLy92YXJfZHVtcCgkZm9sZGVyKTsKCQlpZihpc19kaXIoJGZvbGRlcikpIAoJCQkkZGVsZXRlZCAmPSBybWRpcigkZm9sZGVyKTsKCQllbHNlCgkJCSRkZWxldGVkICY9IGZhbHNlOwoKCQlSZXR1cm4gJGRlbGV0ZWQ7Cgl9CgoJLyoqCgkgKiBBcHBlbmQgYSAvIHRvIHRoZSBwYXRoIGlmIHJlcXVpcmVkLgoJICogQHBhcmFtIHN0cmluZyAkcGF0aCB0aGUgcGF0aAoJICogQHJldHVybiBzdHJpbmcgcGF0aCB3aXRoIHRyYWlsaW5nIC8KCSAqLwoJc3RhdGljIGZ1bmN0aW9uIGZpeFBhdGgoJHBhdGgpIAoJewoJCS8vYXBwZW5kIGEgc2xhc2ggdG8gdGhlIHBhdGggaWYgaXQgZG9lc24ndCBleGlzdHMuCgkJaWYoIShzdWJzdHIoJHBhdGgsLTEpID09ICcvJykpCgkJCSRwYXRoIC49ICcvJzsKCQlSZXR1cm4gJHBhdGg7Cgl9CgoJLyoqCgkgKiBDb25jYXQgdHdvIHBhdGhzIHRvZ2V0aGVyLiBCYXNpY2FsbHkgJHBhdGhBKyRwYXRoQgoJICogQHBhcmFtIHN0cmluZyAkcGF0aEEgcGF0aCBvbmUKCSAqIEBwYXJhbSBzdHJpbmcgJHBhdGhCIHBhdGggdHdvCgkgKiBAcmV0dXJuIHN0cmluZyBhIHRyYWlsaW5nIHNsYXNoIGNvbWJpbmRlZCBwYXRoLgoJICovCglzdGF0aWMgZnVuY3Rpb24gbWFrZVBhdGgoJHBhdGhBLCAkcGF0aEIpIAoJewoJCSRwYXRoQSA9IEZpbGVzOjpmaXhQYXRoKCRwYXRoQSk7CgkJaWYoc3Vic3RyKCRwYXRoQiwwLDEpPT0nLycpCgkJCSRwYXRoQiA9IHN1YnN0cigkcGF0aEIsMSk7CgkJUmV0dXJuIEZpbGVzOjpmaXhQYXRoKCRwYXRoQS4kcGF0aEIpOwoJfQoKCS8qKgoJICogU2ltaWxhciB0byBtYWtlUGF0aCwgYnV0IHRoZSBzZWNvbmQgcGFyYW1ldGVyCgkgKiBpcyBub3Qgb25seSBhIHBhdGgsIGl0IG1heSBjb250YWluIHNheSBhIGZpbGUgZW5kaW5nLgoJICogQHBhcmFtIHN0cmluZyAkcGF0aEEgdGhlIGxlYWRpbmcgcGF0aAoJICogQHBhcmFtIHN0cmluZyAkcGF0aEIgdGhlIGVuZGluZyBwYXRoIHdpdGggZmlsZQoJICogQHJldHVybiBzdHJpbmcgY29tYmluZWQgZmlsZSBwYXRoLgoJICovCglzdGF0aWMgcHVibGljIGZ1bmN0aW9uIG1ha2VGaWxlKCRwYXRoQSwgJHBhdGhCKSAKCXsJCQoJCSRwYXRoQSA9IEZpbGVzOjpmaXhQYXRoKCRwYXRoQSk7CgkJaWYoc3Vic3RyKCRwYXRoQiwwLDEpPT0nLycpCgkJCSRwYXRoQiA9IHN1YnN0cigkcGF0aEIsMSk7CgkJCgkJUmV0dXJuICRwYXRoQS4kcGF0aEI7Cgl9CgoJCgkvKioKCSAqIEZvcm1hdCB0aGUgZmlsZSBzaXplLCBsaW1pdHMgdG8gTWIuCgkgKiBAcGFyYW0gaW50ICRzaXplIHRoZSByYXcgZmlsZXNpemUKCSAqIEByZXR1cm4gc3RyaW5nIGZvcm1hdGVkIGZpbGUgc2l6ZS4KCSAqLwoJc3RhdGljIGZ1bmN0aW9uIGZvcm1hdFNpemUoJHNpemUpIAoJewoJCWlmKCRzaXplIDwgMTAyNCkgCgkJCXJldHVybiAkc2l6ZS4nIGJ5dGVzJzsJCgkJZWxzZSBpZigkc2l6ZSA+PSAxMDI0ICYmICRzaXplIDwgMTAyNCoxMDI0KSAKCQkJcmV0dXJuIHNwcmludGYoJyUwMS4yZicsJHNpemUvMTAyNC4wKS4nIEtiJzsJCgkJZWxzZQoJCQlyZXR1cm4gc3ByaW50ZignJTAxLjJmJywkc2l6ZS8oMTAyNC4wKjEwMjQpKS4nIE1iJzsJCgl9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/GD.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqIFRpdGxlLi4uLi4uLi4uOiAgR0QgRHJpdmVyCioqIFZlcnNpb24uLi4uLi4uOiAgMS4wCioqIEF1dGhvci4uLi4uLi4uOiAgWGlhbmcgV2VpIFpIVU8gPHdlaUB6aHVvLm9yZz4KKiogRmlsZW5hbWUuLi4uLi46ICBHRC5waHAKKiogTGFzdCBjaGFuZ2VkLi46ICAzMCBBdWcgMjAwMyAKKiogTm90ZXMuLi4uLi4uLi46ICBPcmdpbmFsIGlzIGZyb20gUEVBUgoqKi8KLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi8vIHwgUEhQIFZlcnNpb24gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLy8gfCBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMiBUaGUgUEhQIEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwovLyB8IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDIuMDIgb2YgdGhlIFBIUCBsaWNlbnNlLCAgICAgIHwKLy8gfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAgICAgICB8Ci8vIHwgYXZhaWxhYmxlIGF0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyB8IGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzJfMDIudHh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gfCBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gICB8Ci8vIHwgb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhIG5vdGUgdG8gICAgICAgICAgfAovLyB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi8vIHwgQXV0aG9yczogUGV0ZXIgQm93eWVyIDxwZXRlckBtYXBsZWRlc2lnbi5jby51az4gICAgICAgICAgICAgICAgICAgICAgfAovLyB8ICAgICAgICAgIEFsYW4gS25vd2xlcyA8YWxhbkBha2JraG9tZS5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi8vCi8vICAgIFVzYWdlIDoKLy8gICAgJGltZyAgICA9IG5ldyBJbWFnZV9UcmFuc2Zvcm1fR0QoKTsKLy8gICAgJGFuZ2xlICA9IC03ODsKLy8gICAgJGltZy0+bG9hZCgnbWFnaWNrLnBuZycpOwovLwovLyAgICBpZigkaW1nLT5yb3RhdGUoJGFuZ2xlLGFycmF5KCdhdXRvcmVzaXplJz0+dHJ1ZSwnY29sb3JfbWFzayc9PmFycmF5KDI1NSwwLDApKSkpewovLyAgICAgICAgJGltZy0+YWRkVGV4dChhcnJheSgndGV4dCc9PiJSb3RhdGlvbiAkYW5nbGUiLCd4Jz0+MCwneSc9PjEwMCwnZm9udCc9PicvdXNyL3NoYXJlL2ZvbnRzL2RlZmF1bHQvVHJ1ZVR5cGUvY29nYl9fX18udHRmJykpOwovLyAgICAgICAgJGltZy0+ZGlzcGxheSgpOwovLyAgICB9IGVsc2UgewovLyAgICAgICAgZWNobyAiRXJyb3IiOwovLyAgICB9Ci8vCi8vCi8vICRJZDogR0QucGhwIDcxODQgMjAxMS0wNy0yMCAxOToxMTo1MFogY2FsZ3V5MTAwMCAkCi8vCi8vIEltYWdlIFRyYW5zZm9ybWF0aW9uIGludGVyZmFjZSB1c2luZyB0aGUgR0QgbGlicmFyeQovLwoKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLiIvVHJhbnNmb3JtLnBocCIpOwoKQ2xhc3MgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9HRCBleHRlbmRzIEltYWdlX1RyYW5zZm9ybQp7CiAgICAvKioKICAgICAqIEhvbGRzIHRoZSBpbWFnZSBmaWxlIGZvciBtYW5pcHVsYXRpb24KICAgICAqLwogICAgdmFyICRpbWFnZUhhbmRsZSA9ICcnOwoKICAgIC8qKgogICAgICogSG9sZHMgdGhlIG9yaWdpbmFsIGltYWdlIGZpbGUKICAgICAqLwogICAgdmFyICRvbGRfaW1hZ2UgPSAnJzsKCiAgICAvKioKICAgICAqIENoZWNrIHNldHRpbmdzCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCB0cnVlIG9yICBvciBhIFBFQVIgZXJyb3Igb2JqZWN0IG9uIGVycm9yCiAgICAgKgogICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkKICAgICAqLwogICAgZnVuY3Rpb24gSW1hZ2VfVHJhbnNmb3JtX0dEKCkKICAgIHsKICAgICAgICByZXR1cm47CiAgICB9IC8vIEVuZCBmdW5jdGlvbiBJbWFnZQoKICAgIC8qKgogICAgICogTG9hZCBpbWFnZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgZmlsZW5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkIG5vbmUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcgogICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkKICAgICAqLwogICAgZnVuY3Rpb24gbG9hZCgkaW1hZ2UpCiAgICB7CiAgICAgICAgJHRoaXMtPnVpZCA9IG1kNSgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSk7CiAgICAgICAgJHRoaXMtPmltYWdlID0gJGltYWdlOwogICAgICAgICR0aGlzLT5fZ2V0X2ltYWdlX2RldGFpbHMoJGltYWdlKTsKICAgICAgICAkZnVuY3Rpb25OYW1lID0gJ0ltYWdlQ3JlYXRlRnJvbScgLiAkdGhpcy0+dHlwZTsKCQlpZihmdW5jdGlvbl9leGlzdHMoJGZ1bmN0aW9uTmFtZSkpCgkJewoJCQkkdGhpcy0+aW1hZ2VIYW5kbGUgPSAkZnVuY3Rpb25OYW1lKCR0aGlzLT5pbWFnZSk7CgkJfQogICAgfSAvLyBFbmQgbG9hZAoKICAgIC8qKgogICAgICogYWRkVGV4dAogICAgICoKICAgICAqIEBwYXJhbSAgIGFycmF5ICAgb3B0aW9ucyAgICAgQXJyYXkgY29udGFpbnMgb3B0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0JyAgVGhlIHN0cmluZyB0byBkcmF3CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneCcgICAgIEhvcml6b250YWwgcG9zaXRpb24KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5JyAgICAgVmVydGljYWwgUG9zaXRpb24KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb2xvcicgRm9udCBjb2xvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQnICBGb250IHRvIGJlIHVzZWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJyAgU2l6ZSBvZiB0aGUgZm9udHMgaW4gcGl4ZWwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNpemVfZmlyc3QnICBUZWxsIGlmIHRoZSBpbWFnZSBoYXMgdG8gYmUgcmVzaXplZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSBkcmF3aW5nIHRoZSB0ZXh0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAqCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqIEBzZWUgUEVBUjo6aXNFcnJvcigpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFRleHQoJHBhcmFtcykKICAgIHsKICAgICAgICAkZGVmYXVsdF9wYXJhbXMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dCcgPT4gJ1RoaXMgaXMgVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gnID0+IDEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5JyA9PiAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InID0+IGFycmF5KDI1NSwwLDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250JyA9PiAnQXJpYWwudHRmJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZScgPT4gJzEyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5nbGUnID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc2l6ZV9maXJzdCcgPT4gZmFsc2UgLy8gQ2Fycnkgb3V0IHRoZSBzY2FsaW5nIG9mIHRoZSBpbWFnZSBiZWZvcmUgYW5ub3RhdGlvbj8gIE5vdCB1c2VkIGZvciBHRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgJHBhcmFtcyA9IGFycmF5X21lcmdlKCRkZWZhdWx0X3BhcmFtcywgJHBhcmFtcyk7CiAgICAgICAgZXh0cmFjdCgkcGFyYW1zKTsKCiAgICAgICAgaWYoICFpc19hcnJheSgkY29sb3IpICl7CiAgICAgICAgICAgIGlmICgkY29sb3JbMF09PScjJyl7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y29sb3JoZXgyY29sb3JhcnJheSggJGNvbG9yICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpbmNsdWRlX29uY2UoJ0ltYWdlL1RyYW5zZm9ybS9Ecml2ZXIvQ29sb3JzRGVmcy5waHAnKTsKICAgICAgICAgICAgICAgICRjb2xvciA9IGlzc2V0KCRjb2xvcm5hbWVzWyRjb2xvcl0pPyRjb2xvcm5hbWVzWyRjb2xvcl06ZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRjID0gaW1hZ2Vjb2xvcnJlc29sdmUgKCR0aGlzLT5pbWFnZUhhbmRsZSwgJGNvbG9yWzBdLCAkY29sb3JbMV0sICRjb2xvclsyXSk7CgogICAgICAgIGlmICgndHRmJyA9PSBzdWJzdHIoJGZvbnQsIC0zKSkgewogICAgICAgICAgICBJbWFnZVRURlRleHQoJHRoaXMtPmltYWdlSGFuZGxlLCAkc2l6ZSwgJGFuZ2xlLCAkeCwgJHksICRjLCAkZm9udCwgJHRleHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIEltYWdlUFNUZXh0KCR0aGlzLT5pbWFnZUhhbmRsZSwgJHNpemUsICRhbmdsZSwgJHgsICR5LCAkYywgJGZvbnQsICR0ZXh0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9IC8vIEVuZCBhZGRUZXh0CgoKICAgIC8qKgogICAgICogUm90YXRlIGltYWdlIGJ5IHRoZSBnaXZlbiBhbmdsZQogICAgICogVXNlcyBhIGZhc3Qgcm90YXRpb24gYWxnb3J5dGhtIGZvciBjdXN0b20gYW5nbGVzCiAgICAgKiBvciBsaW5lcyBjb3B5IGZvciBtdWx0aXBsZSBvZiA5MCBkZWdyZWVzCiAgICAgKgogICAgICogQHBhcmFtIGludCAgICAgICAkYW5nbGUgICAgICBSb3RhdGlvbiBhbmdsZQogICAgICogQHBhcmFtIGFycmF5ICAgICAkb3B0aW9ucyAgICBhcnJheSggICdhdXRvcmVzaXplJz0+dHJ1ZXxmYWxzZSwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3JfbWFzayc9PmFycmF5KHIsZyxiKSwgbmFtZWQgY29sb3Igb3IgI3JyZ2diYgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAqIEBhdXRob3IgUGllcnJlLUFsYWluIEpveWUKICAgICAqIEByZXR1cm4gbWl4ZWQgbm9uZSBvciBhIFBFQVIgZXJyb3Igb2JqZWN0IG9uIGVycm9yCiAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQogICAgICovCiAgICBmdW5jdGlvbiByb3RhdGUoJGFuZ2xlLCAkb3B0aW9ucz1udWxsKQogICAgewogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnaW1hZ2Vyb3RhdGUnKSAmJiBmYWxzZSkgewogICAgICAgICAgICAkd2hpdGUgPSBpbWFnZWNvbG9yYWxsb2NhdGUgKCR0aGlzLT5pbWFnZUhhbmRsZSwgMjU1LCAyNTUsIDI1NSk7CgkJCSR0aGlzLT5pbWFnZUhhbmRsZSA9IGltYWdlcm90YXRlKCR0aGlzLT5pbWFnZUhhbmRsZSwgJGFuZ2xlLCAkd2hpdGUpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIGlmICggJG9wdGlvbnM9PW51bGwgKXsKICAgICAgICAgICAgJGF1dG9yZXNpemUgPSB0cnVlOwogICAgICAgICAgICAkY29sb3JfbWFzayA9IGFycmF5KDI1NSwyNTUsMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZXh0cmFjdCggJG9wdGlvbnMgKTsKICAgICAgICB9CgogICAgICAgIHdoaWxlICgkYW5nbGUgPD0gLTQ1KSB7CiAgICAgICAgICAgICRhbmdsZSAgKz0gMzYwOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoJGFuZ2xlID4gMjcwKSB7CiAgICAgICAgICAgICRhbmdsZSAgLT0gMzYwOwogICAgICAgIH0KCiAgICAgICAgJHQgICAgICA9IGRlZzJyYWQoJGFuZ2xlKTsKCiAgICAgICAgaWYoICFpc19hcnJheSgkY29sb3JfbWFzaykgKXsKICAgICAgICAgICAgaWYgKCRjb2xvclswXT09JyMnKXsKICAgICAgICAgICAgICAgICR0aGlzLT5jb2xvcmhleDJjb2xvcmFycmF5KCAkY29sb3JfbWFzayApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW5jbHVkZV9vbmNlKCdJbWFnZS9UcmFuc2Zvcm0vRHJpdmVyL0NvbG9yRGVmcy5waHAnKTsKICAgICAgICAgICAgICAgICRjb2xvciA9IGlzc2V0KCRjb2xvcm5hbWVzWyRjb2xvcl9tYXNrXSk/JGNvbG9ybmFtZXNbJGNvbG9yX21hc2tdOmZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBEbyBub3Qgcm91bmQgaXQsIHRvbyBtdWNoIGxvc3Qgb2YgcXVhbGl0eQogICAgICAgICRjb3NUICAgPSBjb3MoJHQpOwogICAgICAgICRzaW5UICAgPSBzaW4oJHQpOwoKICAgICAgICAkaW1nICAgID0mICR0aGlzLT5pbWFnZUhhbmRsZTsKCiAgICAgICAgJHdpZHRoICA9ICRtYXhfeCAgPSAkdGhpcy0+aW1nX3g7CiAgICAgICAgJGhlaWdodCA9ICRtYXhfeSAgPSAkdGhpcy0+aW1nX3k7CiAgICAgICAgJG1pbl95ICA9IDA7CiAgICAgICAgJG1pbl94ICA9IDA7CgogICAgICAgICR4MSAgICAgPSByb3VuZCgkbWF4X3gvMiwwKTsKICAgICAgICAkeTEgICAgID0gcm91bmQoJG1heF95LzIsMCk7CgogICAgICAgIGlmICggJGF1dG9yZXNpemUgKXsKICAgICAgICAgICAgJHQgICAgICA9IGFicygkdCk7CiAgICAgICAgICAgICRhICAgICAgPSByb3VuZCgkYW5nbGUsMCk7CiAgICAgICAgICAgIHN3aXRjaCgoaW50KSgkYW5nbGUpKXsKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgJHdpZHRoMiAgICAgPSAkd2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICRoZWlnaHQyICAgID0gJGhlaWdodDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgOTA6CiAgICAgICAgICAgICAgICAgICAgICAgICR3aWR0aDIgICAgID0gJGhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgJGhlaWdodDIgICAgPSAkd2lkdGg7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDE4MDoKICAgICAgICAgICAgICAgICAgICAgICAgJHdpZHRoMiAgICAgPSAkd2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICRoZWlnaHQyICAgID0gJGhlaWdodDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMjcwOgogICAgICAgICAgICAgICAgICAgICAgICAkd2lkdGgyICAgICA9ICRoZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICRoZWlnaHQyICAgID0gJHdpZHRoOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAkd2lkdGgyICAgICA9IChpbnQpKGFicyhzaW4oJHQpICogJGhlaWdodCArIGNvcygkdCkgKiAkd2lkdGgpKTsKICAgICAgICAgICAgICAgICAgICAkaGVpZ2h0MiAgICA9IChpbnQpKGFicyhjb3MoJHQpICogJGhlaWdodCtzaW4oJHQpICogJHdpZHRoKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR3aWR0aDIgICAgIC09ICR3aWR0aDIlMjsKICAgICAgICAgICAgJGhlaWdodDIgICAgLT0gJGhlaWdodDIlMjsKCiAgICAgICAgICAgICRkX3dpZHRoICAgID0gYWJzKCR3aWR0aCAtICR3aWR0aDIpOwogICAgICAgICAgICAkZF9oZWlnaHQgICA9IGFicygkaGVpZ2h0IC0gJGhlaWdodDIpOwogICAgICAgICAgICAkeF9vZmZzZXQgICA9ICRkX3dpZHRoLzI7CiAgICAgICAgICAgICR5X29mZnNldCAgID0gJGRfaGVpZ2h0LzI7CiAgICAgICAgICAgICRtaW5feDIgICAgID0gLWFicygkeF9vZmZzZXQpOwogICAgICAgICAgICAkbWluX3kyICAgICA9IC1hYnMoJHlfb2Zmc2V0KTsKICAgICAgICAgICAgJG1heF94MiAgICAgPSAkd2lkdGgyOwogICAgICAgICAgICAkbWF4X3kyICAgICA9ICRoZWlnaHQyOwogICAgICAgIH0KCiAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdJbWFnZUNyZWF0ZVRydWVDb2xvcicpKXsKICAgICAgICAgICAgJGltZzIgPUltYWdlQ3JlYXRlVHJ1ZUNvbG9yKCR3aWR0aDIsJGhlaWdodDIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRpbWcyID1JbWFnZUNyZWF0ZSgkd2lkdGgyLCRoZWlnaHQyKTsKICAgICAgICB9CgkKCiAgICAgICAgaWYgKCAhaXNfcmVzb3VyY2UoJGltZzIpICl7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsvKlBFQVI6OnJhaXNlRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgYnVmZmVyIGZvciB0aGUgcm90YXRhaW9uLicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgUEVBUl9FUlJPUl9UUklHR0VSLCBFX1VTRVJfTk9USUNFKTsqLwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmltZ194ID0gJHdpZHRoMjsKICAgICAgICAkdGhpcy0+aW1nX3kgPSAkaGVpZ2h0MjsKCgogICAgICAgIGltYWdlcGFsZXR0ZWNvcHkoJGltZzIsJGltZyk7CgogICAgICAgICRtYXNrICAgPSBpbWFnZWNvbG9ycmVzb2x2ZSgkaW1nMiwkY29sb3JfbWFza1swXSwkY29sb3JfbWFza1sxXSwkY29sb3JfbWFza1syXSk7CgogICAgICAgIC8vIHVzZSBzaW1wbGUgbGluZXMgY29weSBmb3IgYXhlcyBhbmdsZXMKICAgICAgICBzd2l0Y2goKGludCkoJGFuZ2xlKSl7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGltYWdlZmlsbCAoJGltZzIsIDAsIDAsJG1hc2spOwogICAgICAgICAgICAgICAgZm9yICgkeT0wOyAkeSA8ICRtYXhfeTsgJHkrKykgewogICAgICAgICAgICAgICAgICAgIGZvciAoJHggPSAkbWluX3g7ICR4IDwgJG1heF94OyAkeCsrKXsKICAgICAgICAgICAgICAgICAgICAgICAgJGMgID0gQGltYWdlY29sb3JhdCAoICRpbWcsICR4LCAkeSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc2V0cGl4ZWwoJGltZzIsJHgrJHhfb2Zmc2V0LCR5KyR5X29mZnNldCwkYyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgOTA6CiAgICAgICAgICAgICAgICBpbWFnZWZpbGwgKCRpbWcyLCAwLCAwLCRtYXNrKTsKICAgICAgICAgICAgICAgIGZvciAoJHggPSAkbWluX3g7ICR4IDwgJG1heF94OyAkeCsrKXsKICAgICAgICAgICAgICAgICAgICBmb3IgKCR5PSRtaW5feTsgJHkgPCAkbWF4X3k7ICR5KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGMgID0gaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgsICR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzZXRwaXhlbCgkaW1nMiwkbWF4X3ktJHktMSwkeCwkYyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTgwOgogICAgICAgICAgICAgICAgaW1hZ2VmaWxsICgkaW1nMiwgMCwgMCwkbWFzayk7CiAgICAgICAgICAgICAgICBmb3IgKCR5PTA7ICR5IDwgJG1heF95OyAkeSsrKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICgkeCA9ICRtaW5feDsgJHggPCAkbWF4X3g7ICR4KyspewogICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSBAaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgsICR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzZXRwaXhlbCgkaW1nMiwgJG1heF94Mi0keC0xLCAkbWF4X3kyLSR5LTEsICRjKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyNzA6CiAgICAgICAgICAgICAgICBpbWFnZWZpbGwgKCRpbWcyLCAwLCAwLCRtYXNrKTsKICAgICAgICAgICAgICAgIGZvciAoJHk9MDsgJHkgPCAkbWF4X3k7ICR5KyspIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKCR4ID0gJG1heF94OyAkeCA+PSAkbWluX3g7ICR4LS0pewogICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSBAaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgsICR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzZXRwaXhlbCgkaW1nMiwkeSwkbWF4X3gtJHgtMSwkYyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIC8vIHNpbXBsZSByZXZlcnNlIHJvdGF0aW9uIGFsZ28KICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICRpPTA7CiAgICAgICAgICAgICAgICBmb3IgKCR5ID0gJG1pbl95MjsgJHkgPCAkbWF4X3kyOyAkeSsrKXsKCiAgICAgICAgICAgICAgICAgICAgLy8gQWxnZWJyYSA6KQogICAgICAgICAgICAgICAgICAgICR4MiA9IHJvdW5kKCgoJG1pbl94Mi0keDEpICogJGNvc1QpICsgKCgkeS0keTEpICogJHNpblQgKyAkeDEpLDApOwogICAgICAgICAgICAgICAgICAgICR5MiA9IHJvdW5kKCgoJHktJHkxKSAqICRjb3NUIC0gKCRtaW5feDItJHgxKSAqICRzaW5UICsgJHkxKSwwKTsKCiAgICAgICAgICAgICAgICAgICAgZm9yICgkeCA9ICRtaW5feDI7ICR4IDwgJG1heF94MjsgJHgrKyl7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgb3V0IG9mIG9yaWdpbmFsIGJvdW5jZXMsIGlmIHdlIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIGRlZmF1bHQgY29sb3IgbWFzawogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR4Mj49MCAmJiAkeDI8JG1heF94ICYmICR5Mj49MCAmJiAkeTI8JG1heF95ICl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSBpbWFnZWNvbG9yYXQgKCAkaW1nLCAkeDIsICR5Mik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSAkbWFzazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNldHBpeGVsKCRpbWcyLCR4KyR4X29mZnNldCwkeSskeV9vZmZzZXQsJGMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcm91bmQgdmVyYm90ZW4hCiAgICAgICAgICAgICAgICAgICAgICAgICR4MiAgKz0gJGNvc1Q7CiAgICAgICAgICAgICAgICAgICAgICAgICR5MiAgLT0gJHNpblQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5vbGRfaW1hZ2UgICAgPSAkdGhpcy0+aW1hZ2VIYW5kbGU7CiAgICAgICAgJHRoaXMtPmltYWdlSGFuZGxlICA9ICAkaW1nMjsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCgogICAvKioKICAgICogUmVzaXplIEFjdGlvbgogICAgKgogICAgKiBGb3IgR0QgMi4wMSsgdGhlIG5ldyBjb3B5cmVzYW1wbGVkIGZ1bmN0aW9uIGlzIHVzZWQKICAgICogSXQgdXNlcyBhIGJpY3ViaWMgaW50ZXJwb2xhdGlvbiBhbGdvcml0aG0gdG8gZ2V0IGZhcgogICAgKiBiZXR0ZXIgcmVzdWx0LgogICAgKgogICAgKiBAcGFyYW0gJG5ld194IGludCAgbmV3IHdpZHRoCiAgICAqIEBwYXJhbSAkbmV3X3kgaW50ICBuZXcgaGVpZ2h0CiAgICAqCiAgICAqIEByZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzIG9yIHBlYXIgZXJyb3IKICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkKICAgICovCiAgICBmdW5jdGlvbiBfcmVzaXplKCRuZXdfeCA9IDAsICRuZXdfeSA9IDApIHsKICAgICAgICBpZiAoJHRoaXMtPnJlc2l6ZWQgPT09IHRydWUpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvKlBFQVI6OnJhaXNlRXJyb3IoJ1lvdSBoYXZlIGFscmVhZHkgcmVzaXplZCB0aGUgaW1hZ2Ugd2l0aG91dCBzYXZpbmcgaXQuICBZb3VyIHByZXZpb3VzIHJlc2l6aW5nIHdpbGwgYmUgb3ZlcndyaXR0ZW4nLCBudWxsLCBQRUFSX0VSUk9SX1RSSUdHRVIsIEVfVVNFUl9OT1RJQ0UpOyovCiAgICAgICAgfQogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnSW1hZ2VDcmVhdGVUcnVlQ29sb3InKSl7CiAgICAgICAgICAgICRuZXdfaW1nID1JbWFnZUNyZWF0ZVRydWVDb2xvcigkbmV3X3gsJG5ld195KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbmV3X2ltZyA9SW1hZ2VDcmVhdGUoJG5ld194LCRuZXdfeSk7CiAgICAgICAgfQogICAgICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnSW1hZ2VDb3B5UmVzYW1wbGVkJykpewogICAgICAgICAgICBJbWFnZUNvcHlSZXNhbXBsZWQoJG5ld19pbWcsICR0aGlzLT5pbWFnZUhhbmRsZSwgMCwgMCwgMCwgMCwgJG5ld194LCAkbmV3X3ksICR0aGlzLT5pbWdfeCwgJHRoaXMtPmltZ195KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBJbWFnZUNvcHlSZXNpemVkKCRuZXdfaW1nLCAkdGhpcy0+aW1hZ2VIYW5kbGUsIDAsIDAsIDAsIDAsICRuZXdfeCwgJG5ld195LCAkdGhpcy0+aW1nX3gsICR0aGlzLT5pbWdfeSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5vbGRfaW1hZ2UgPSAkdGhpcy0+aW1hZ2VIYW5kbGU7CiAgICAgICAgJHRoaXMtPmltYWdlSGFuZGxlID0gJG5ld19pbWc7CiAgICAgICAgJHRoaXMtPnJlc2l6ZWQgPSB0cnVlOwoKICAgICAgICAkdGhpcy0+bmV3X3ggPSAkbmV3X3g7CiAgICAgICAgJHRoaXMtPm5ld195ID0gJG5ld195OwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8qKgogICAgICogQ3JvcCB0aGUgaW1hZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRjcm9wX3ggbGVmdCBjb2x1bW4gb2YgdGhlIGltYWdlCiAgICAgKiBAcGFyYW0gaW50ICRjcm9wX3kgdG9wIHJvdyBvZiB0aGUgaW1hZ2UKICAgICAqIEBwYXJhbSBpbnQgJGNyb3Bfd2lkdGggbmV3IGNyb3BwZWQgaW1hZ2Ugd2lkdGgKICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfaGVpZ2h0IG5ldyBjcm9wcGVkIGltYWdlIGhlaWdodAogICAgICovCiAgICBmdW5jdGlvbiBjcm9wKCRuZXdfeCwgJG5ld195LCAkbmV3X3dpZHRoLCAkbmV3X2hlaWdodCkgCiAgICB7CiAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdJbWFnZUNyZWF0ZVRydWVDb2xvcicpKXsKICAgICAgICAgICAgJG5ld19pbWcgPUltYWdlQ3JlYXRlVHJ1ZUNvbG9yKCRuZXdfd2lkdGgsJG5ld19oZWlnaHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRuZXdfaW1nID1JbWFnZUNyZWF0ZSgkbmV3X3dpZHRoLCRuZXdfaGVpZ2h0KTsKICAgICAgICB9CiAgICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdJbWFnZUNvcHlSZXNhbXBsZWQnKSl7CiAgICAgICAgICAgIEltYWdlQ29weVJlc2FtcGxlZCgkbmV3X2ltZywgJHRoaXMtPmltYWdlSGFuZGxlLCAwLCAwLCAkbmV3X3gsICRuZXdfeSwkbmV3X3dpZHRoLCRuZXdfaGVpZ2h0LCRuZXdfd2lkdGgsJG5ld19oZWlnaHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIEltYWdlQ29weVJlc2l6ZWQoJG5ld19pbWcsICR0aGlzLT5pbWFnZUhhbmRsZSwgMCwgMCwgJG5ld194LCAkbmV3X3ksICRuZXdfd2lkdGgsJG5ld19oZWlnaHQsJG5ld193aWR0aCwkbmV3X2hlaWdodCk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5vbGRfaW1hZ2UgPSAkdGhpcy0+aW1hZ2VIYW5kbGU7CiAgICAgICAgJHRoaXMtPmltYWdlSGFuZGxlID0gJG5ld19pbWc7CiAgICAgICAgJHRoaXMtPnJlc2l6ZWQgPSB0cnVlOwoKICAgICAgICAkdGhpcy0+bmV3X3ggPSAkbmV3X3g7CiAgICAgICAgJHRoaXMtPm5ld195ID0gJG5ld195OwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAKICAgIC8qKgogICAgICogRmxpcCB0aGUgaW1hZ2UgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHkKICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbGVhbiAkaG9yaXpvbnRhbCB0cnVlIGlmIGhvcml6b250YWwgZmxpcCwgdmVydGljYWwgb3RoZXJ3aXNlCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZsaXAoJGhvcml6b250YWwpCiAgICB7CiAgICAgICAgaWYoISRob3Jpem9udGFsKSB7CiAgICAgICAgICAgICR0aGlzLT5yb3RhdGUoMTgwKTsKICAgICAgICB9CgogICAgICAgICR3aWR0aCA9IGltYWdlc3goJHRoaXMtPmltYWdlSGFuZGxlKTsgCiAgICAgICAgJGhlaWdodCA9IGltYWdlc3koJHRoaXMtPmltYWdlSGFuZGxlKTsgCgogICAgICAgIGZvciAoJGogPSAwOyAkaiA8ICRoZWlnaHQ7ICRqKyspIHsgCiAgICAgICAgICAgICAgICAkbGVmdCA9IDA7IAogICAgICAgICAgICAgICAgJHJpZ2h0ID0gJHdpZHRoLTE7IAoKCiAgICAgICAgICAgICAgICB3aGlsZSAoJGxlZnQgPCAkcmlnaHQpIHsgCiAgICAgICAgICAgICAgICAgICAgLy9lY2hvICIgajoiLiRqLiIgbDoiLiRsZWZ0LiIgcjoiLiRyaWdodC4iXG48YnI+IjsKICAgICAgICAgICAgICAgICAgICAkdCA9IGltYWdlY29sb3JhdCgkdGhpcy0+aW1hZ2VIYW5kbGUsICRsZWZ0LCAkaik7IAogICAgICAgICAgICAgICAgICAgIGltYWdlc2V0cGl4ZWwoJHRoaXMtPmltYWdlSGFuZGxlLCAkbGVmdCwgJGosIGltYWdlY29sb3JhdCgkdGhpcy0+aW1hZ2VIYW5kbGUsICRyaWdodCwgJGopKTsgCiAgICAgICAgICAgICAgICAgICAgaW1hZ2VzZXRwaXhlbCgkdGhpcy0+aW1hZ2VIYW5kbGUsICRyaWdodCwgJGosICR0KTsgCiAgICAgICAgICAgICAgICAgICAgJGxlZnQrKzsgJHJpZ2h0LS07IAogICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBBZGp1c3QgdGhlIGltYWdlIGdhbW1hCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRvdXRwdXRnYW1tYQogICAgICoKICAgICAqIEByZXR1cm4gbm9uZQogICAgICovCiAgICBmdW5jdGlvbiBnYW1tYSgkb3V0cHV0Z2FtbWE9MS4wKSB7CiAgICAgICAgSW1hZ2VHYW1tYUNvcnJlY3QoJHRoaXMtPmltYWdlSGFuZGxlLCAxLjAsICRvdXRwdXRnYW1tYSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlIHRoZSBpbWFnZSBmaWxlCiAgICAgKgogICAgICogQHBhcmFtICRmaWxlbmFtZSBzdHJpbmcgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHdyaXRlIHRvCiAgICAgKiBAcGFyYW0gJHF1YWxpdHkgIGludCAgICAgb3V0cHV0IERQSSwgZGVmYXVsdCBpcyA4NQogICAgICogQHBhcmFtICR0eXBlcyAgICBzdHJpbmcgIGRlZmluZSB0aGUgb3V0cHV0IGZvcm1hdCwgZGVmYXVsdAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBjdXJyZW50IHVzZWQgZm9ybWF0CiAgICAgKgogICAgICogQHJldHVybiBub25lCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lLCAkdHlwZSA9ICcnLCAkcXVhbGl0eSA9IDg1KQogICAgewoJCSR0eXBlICAgICAgICAgICA9ICR0eXBlPT0nJz8gJHRoaXMtPnR5cGUgOiAkdHlwZTsKCQkkZnVuY3Rpb25OYW1lICAgPSAnaW1hZ2UnIC4gJHR5cGU7CgoJCWlmKGZ1bmN0aW9uX2V4aXN0cygkZnVuY3Rpb25OYW1lKSkKCQl7CgkJCSR0aGlzLT5vbGRfaW1hZ2UgPSAkdGhpcy0+aW1hZ2VIYW5kbGU7CgkJCWlmKCR0eXBlPT0nanBlZycpCgkJCQkkZnVuY3Rpb25OYW1lKCR0aGlzLT5pbWFnZUhhbmRsZSwgJGZpbGVuYW1lLCAkcXVhbGl0eSk7CgkJCWVsc2UKCQkJCSRmdW5jdGlvbk5hbWUoJHRoaXMtPmltYWdlSGFuZGxlLCAkZmlsZW5hbWUpOwoJCQkkdGhpcy0+aW1hZ2VIYW5kbGUgPSAkdGhpcy0+b2xkX2ltYWdlOwoJCQkkdGhpcy0+cmVzaXplZCA9IGZhbHNlOwoJCX0KICAgIH0gLy8gRW5kIHNhdmUKCgogICAgLyoqCiAgICAgKiBEaXNwbGF5IGltYWdlIHdpdGhvdXQgc2F2aW5nIGFuZCBsb3NlIGNoYW5nZXMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIHR5cGUgKEpQRyxQTkcuLi4pOwogICAgICogQHBhcmFtIGludCBxdWFsaXR5IDc1CiAgICAgKgogICAgICogQHJldHVybiBub25lCiAgICAgKi8KICAgIGZ1bmN0aW9uIGRpc3BsYXkoJHR5cGUgPSAnJywgJHF1YWxpdHkgPSA3NSkKICAgIHsKICAgICAgICBpZiAoJHR5cGUgIT0gJycpIHsKICAgICAgICAgICAgJHRoaXMtPnR5cGUgPSAkdHlwZTsKICAgICAgICB9CiAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICdJbWFnZScgLiAkdGhpcy0+dHlwZTsKCQlpZihmdW5jdGlvbl9leGlzdHMoJGZ1bmN0aW9uTmFtZSkpCgkJewoJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogaW1hZ2UvJyAuIHN0cnRvbG93ZXIoJHRoaXMtPnR5cGUpKTsKCQkJJGZ1bmN0aW9uTmFtZSgkdGhpcy0+aW1hZ2VIYW5kbGUsICcnLCAkcXVhbGl0eSk7CgkJCSR0aGlzLT5pbWFnZUhhbmRsZSA9ICR0aGlzLT5vbGRfaW1hZ2U7CgkJCSR0aGlzLT5yZXNpemVkID0gZmFsc2U7CgkJCUltYWdlRGVzdHJveSgkdGhpcy0+b2xkX2ltYWdlKTsKCQkJJHRoaXMtPmZyZWUoKTsKCQl9CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXN0cm95IGltYWdlIGhhbmRsZQogICAgICoKICAgICAqIEByZXR1cm4gbm9uZQogICAgICovCiAgICBmdW5jdGlvbiBmcmVlKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmltYWdlSGFuZGxlKXsKICAgICAgICAgICAgSW1hZ2VEZXN0cm95KCR0aGlzLT5pbWFnZUhhbmRsZSk7CiAgICAgICAgfQogICAgfQoKfSAvLyBFbmQgY2xhc3MgSW1hZ2VHRAo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/IM.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKiBUaXRsZS4uLi4uLi4uLjogIEltYWdlTWFnaWNrIERyaXZlcgoqKiBWZXJzaW9uLi4uLi4uLjogIDEuMAoqKiBBdXRob3IuLi4uLi4uLjogIFhpYW5nIFdlaSBaSFVPIDx3ZWlAemh1by5vcmc+CioqIEZpbGVuYW1lLi4uLi4uOiAgSU0ucGhwCioqIExhc3QgY2hhbmdlZC4uOiAgMzAgQXVnIDIwMDMgCioqIE5vdGVzLi4uLi4uLi4uOiAgT3JnaW5hbCBpcyBmcm9tIFBFQVIKKiovCgovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLy8gfCBQSFAgVmVyc2lvbiA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwovLyB8IENvcHlyaWdodCAoYykgMTk5Ny0yMDAyIFRoZSBQSFAgR3JvdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi8vIHwgVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24gMi4wMiBvZiB0aGUgUEhQIGxpY2Vuc2UsICAgICAgfAovLyB8IHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLCBhbmQgaXMgICAgICAgIHwKLy8gfCBhdmFpbGFibGUgYXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIHwgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvMl8wMi50eHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyB8IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBQSFAgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0byAgIHwKLy8gfCBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGEgbm90ZSB0byAgICAgICAgICB8Ci8vIHwgbGljZW5zZUBwaHAubmV0IHNvIHdlIGNhbiBtYWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuICAgICAgICAgICAgICAgfAovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLy8gfCBBdXRob3JzOiBQZXRlciBCb3d5ZXIgPHBldGVyQG1hcGxlZGVzaWduLmNvLnVrPiAgICAgICAgICAgICAgICAgICAgICB8Ci8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwovLwovLyAkSWQ6IElNLnBocCA0MTY5IDIwMDctMDktMjEgMDY6Mjg6NDlaIHNpbG1hcmlsbGlvbiAkCi8vCi8vIEltYWdlIFRyYW5zZm9ybWF0aW9uIGludGVyZmFjZSB1c2luZyBjb21tYW5kIGxpbmUgSW1hZ2VNYWdpY2sKLy8KCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4iL1RyYW5zZm9ybS5waHAiKTsKCkNsYXNzIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfSU0gZXh0ZW5kcyBJbWFnZV9UcmFuc2Zvcm0KewogICAgLyoqCiAgICAgKiBhc3NvY2lhdGl2ZSBhcnJheSBjb21tYW5kcyB0byBiZSBleGVjdXRlZAogICAgICogQHZhciBhcnJheQogICAgICovCiAgICB2YXIgJGNvbW1hbmQgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICoKICAgICAqCiAgICAgKi8KICAgIGZ1bmN0aW9uIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfSU0oKQogICAgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfSAvLyBFbmQgSW1hZ2VfSU0KCiAgICAvKioKICAgICAqIExvYWQgaW1hZ2UKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nIGZpbGVuYW1lCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZCBub25lIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3IKICAgICAqIEBzZWUgUEVBUjo6aXNFcnJvcigpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvYWQoJGltYWdlKQogICAgewoKICAgICAgICAkdGhpcy0+dWlkID0gbWQ1KCRfU0VSVkVSWydSRU1PVEVfQUREUiddKTsKICAgICAgICAvKmlmICghZmlsZV9leGlzdHMoJGltYWdlKSkgewogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignVGhlIGltYWdlIGZpbGUgJyAuICRpbWFnZSAuICcgZG9lc1wndCBleGlzdCcsIHRydWUpOwogICAgICAgIH0qLwogICAgICAgICR0aGlzLT5pbWFnZSA9ICRpbWFnZTsKICAgICAgICAkdGhpcy0+X2dldF9pbWFnZV9kZXRhaWxzKCRpbWFnZSk7CiAgICB9IC8vIEVuZCBsb2FkCgogICAgLyoqCiAgICAgKiBSZXNpemUgQWN0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGludCAgIG5ld194ICAgbmV3IHdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICAgbmV3X3kgICBuZXcgaGVpZ2h0CiAgICAgKgogICAgICogQHJldHVybiBub25lCiAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQogICAgICovCiAgICBmdW5jdGlvbiBfcmVzaXplKCRuZXdfeCwgJG5ld195KQogICAgewogICAgICAgIC8qaWYgKGlzc2V0KCR0aGlzLT5jb21tYW5kWydyZXNpemUnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoIllvdSBjYW5ub3Qgc2NhbGUgb3IgcmVzaXplIGFuIGltYWdlIG1vcmUgdGhhbiBvbmNlIHdpdGhvdXQgY2FsbGluZyBzYXZlIG9yIGRpc3BsYXkiLCB0cnVlKTsKICAgICAgICB9Ki8KICAgICAgICAkdGhpcy0+Y29tbWFuZFsncmVzaXplJ10gPSAiLWdlb21ldHJ5ICR7bmV3X3h9eCR7bmV3X3l9ISI7CgogICAgICAgICR0aGlzLT5uZXdfeCA9ICRuZXdfeDsKICAgICAgICAkdGhpcy0+bmV3X3kgPSAkbmV3X3k7CiAgICB9IC8vIEVuZCByZXNpemUKCiAgICAvKioKICAgICAqIENyb3AgdGhlIGltYWdlCiAgICAgKgogICAgICogQHBhcmFtIGludCAkY3JvcF94IGxlZnQgY29sdW1uIG9mIHRoZSBpbWFnZQogICAgICogQHBhcmFtIGludCAkY3JvcF95IHRvcCByb3cgb2YgdGhlIGltYWdlCiAgICAgKiBAcGFyYW0gaW50ICRjcm9wX3dpZHRoIG5ldyBjcm9wcGVkIGltYWdlIHdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRjcm9wX2hlaWdodCBuZXcgY3JvcHBlZCBpbWFnZSBoZWlnaHQKICAgICAqLwogICAgZnVuY3Rpb24gY3JvcCgkY3JvcF94LCAkY3JvcF95LCAkY3JvcF93aWR0aCwgJGNyb3BfaGVpZ2h0KSAKICAgIHsKICAgICAgICAkdGhpcy0+Y29tbWFuZFsnY3JvcCddID0gIi1jcm9wIHskY3JvcF93aWR0aH14eyRjcm9wX2hlaWdodH0reyRjcm9wX3h9K3skY3JvcF95fSI7CiAgICB9CgogICAgLyoqCiAgICAgKiBGbGlwIHRoZSBpbWFnZSBob3Jpem9udGFsbHkgb3IgdmVydGljYWxseQogICAgICoKICAgICAqIEBwYXJhbSBib29sZWFuICRob3Jpem9udGFsIHRydWUgaWYgaG9yaXpvbnRhbCBmbGlwLCB2ZXJ0aWNhbCBvdGhlcndpc2UKICAgICAqLwogICAgZnVuY3Rpb24gZmxpcCgkaG9yaXpvbnRhbCkgCiAgICB7CiAgICAgICAgaWYoJGhvcml6b250YWwpCiAgICAgICAgICAgICR0aGlzLT5jb21tYW5kWydmbG9wJ10gPSAiLWZsb3AiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbJ2ZsaXAnXSA9ICItZmxpcCI7CiAgICB9CiAgICAvKioKICAgICAqIHJvdGF0ZQogICAgICoKICAgICAqIEBwYXJhbSAgIGludCAgICAgYW5nbGUgICByb3RhdGlvbiBhbmdsZQogICAgICogQHBhcmFtICAgYXJyYXkgICBvcHRpb25zIG5vIG9wdGlvbiBhbGxvd2VkCiAgICAgKgogICAgICovCiAgICBmdW5jdGlvbiByb3RhdGUoJGFuZ2xlLCAkb3B0aW9ucz1udWxsKQogICAgewogICAgICAgIGlmICgnLScgPT0gJGFuZ2xlezB9KSB7CiAgICAgICAgICAgICRhbmdsZSA9IDM2MCAtIHN1YnN0cigkYW5nbGUsIDEpOwogICAgICAgIH0KICAgICAgICAgJHRoaXMtPmNvbW1hbmRbJ3JvdGF0ZSddID0gIi1yb3RhdGUgJGFuZ2xlIjsKICAgIH0gLy8gRW5kIHJvdGF0ZQoKICAgIC8qKgogICAgICogYWRkVGV4dAogICAgICoKICAgICAqIEBwYXJhbSAgIGFycmF5ICAgb3B0aW9ucyAgICAgQXJyYXkgY29udGFpbnMgb3B0aW9ucwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0JyAgVGhlIHN0cmluZyB0byBkcmF3CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneCcgICAgIEhvcml6b250YWwgcG9zaXRpb24KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5JyAgICAgVmVydGljYWwgUG9zaXRpb24KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb2xvcicgRm9udCBjb2xvcgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQnICBGb250IHRvIGJlIHVzZWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJyAgU2l6ZSBvZiB0aGUgZm9udHMgaW4gcGl4ZWwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNpemVfZmlyc3QnICBUZWxsIGlmIHRoZSBpbWFnZSBoYXMgdG8gYmUgcmVzaXplZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSBkcmF3aW5nIHRoZSB0ZXh0CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAqCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqIEBzZWUgUEVBUjo6aXNFcnJvcigpCiAgICAgKi8KICAgIGZ1bmN0aW9uIGFkZFRleHQoJHBhcmFtcykKICAgIHsKICAgICAgICAkZGVmYXVsdF9wYXJhbXMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGV4dCcgPT4gJ1RoaXMgaXMgVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gnID0+IDEwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5JyA9PiAyMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3InID0+ICdyZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250JyA9PiAnQXJpYWwudHRmJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzaXplX2ZpcnN0JyA9PiBmYWxzZSAvLyBDYXJyeSBvdXQgdGhlIHNjYWxpbmcgb2YgdGhlIGltYWdlIGJlZm9yZSBhbm5vdGF0aW9uPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZSgkZGVmYXVsdF9wYXJhbXMsICRwYXJhbXMpOwogICAgICAgICBleHRyYWN0KCRwYXJhbXMpOwogICAgICAgICBpZiAodHJ1ZSA9PT0gJHJlc2l6ZV9maXJzdCkgewogICAgICAgICAgICAgLy8gU2V0IHRoZSBrZXkgc28gdGhhdCB0aGlzIHdpbGwgYmUgdGhlIGxhc3QgaXRlbSBpbiB0aGUgYXJyYXkKICAgICAgICAgICAgJGtleSA9ICd6dGV4dCc7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRrZXkgPSAndGV4dCc7CiAgICAgICAgIH0KICAgICAgICAgJHRoaXMtPmNvbW1hbmRbJGtleV0gPSAiLWZvbnQgJGZvbnQgLWZpbGwgJGNvbG9yIC1kcmF3ICd0ZXh0ICR4LCR5IFwiJHRleHRcIiciOwogICAgICAgICAvLyBQcm9kdWNpbmcgZXJyb3I6IGdzOiBub3QgZm91bmQgZ3M6IG5vdCBmb3VuZCBjb252ZXJ0OiBQb3N0c2NyaXB0IGRlbGVnYXRlIGZhaWxlZCBbTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeV0uCiAgICB9IC8vIEVuZCBhZGRUZXh0CgogICAgLyoqCiAgICAgKiBBZGp1c3QgdGhlIGltYWdlIGdhbW1hCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRvdXRwdXRnYW1tYQogICAgICoKICAgICAqIEByZXR1cm4gbm9uZQogICAgICovCiAgICBmdW5jdGlvbiBnYW1tYSgkb3V0cHV0Z2FtbWE9MS4wKSB7CiAgICAgICAgJHRoaXMtPmNvbW1hbmRbJ2dhbW1hJ10gPSAiLWdhbW1hICRvdXRwdXRnYW1tYSI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlIHRoZSBpbWFnZSBmaWxlCiAgICAgKgogICAgICogQHBhcmFtICRmaWxlbmFtZSBzdHJpbmcgIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHdyaXRlIHRvCiAgICAgKiBAcGFyYW0gJHF1YWxpdHkgIHF1YWxpdHkgaW1hZ2UgZHBpLCBkZWZhdWx0PTc1CiAgICAgKiBAcGFyYW0gJHR5cGUgICAgIHN0cmluZyAgKEpQRyxQTkcuLi4pCiAgICAgKgogICAgICogQHJldHVybiBub25lCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lLCAkdHlwZT0nJywgJHF1YWxpdHkgPSA4NSkKICAgIHsKICAgICAgICAkdHlwZSA9PSAnJyA/ICR0aGlzLT50eXBlIDogJHR5cGU7CiAgICAgICAgJGNtZCA9ICcnIC4gSU1BR0VfVFJBTlNGT1JNX0xJQl9QQVRIIC4gJ2NvbnZlcnQgJzsKCQkkY21kIC49IGltcGxvZGUoJyAnLCAkdGhpcy0+Y29tbWFuZCkgLiAiIC1xdWFsaXR5ICRxdWFsaXR5ICI7CgkJJGNtZCAuPSAnIicuKCR0aGlzLT5pbWFnZSkgLiAnIiAiJyAuICgkZmlsZW5hbWUpIC4gJyIgMj4mMSc7CiAgICAgICAgCiAgICAgICAgLy8kY21kID0gc3RyX3JlcGxhY2UoJy8nLCAnXFwnLCAkY21kKTsKCQkvL2VjaG8oJGNtZC4nPGJyPicpOwogICAgICAgIGV4ZWMoJGNtZCwkcmV0dmFsKTsKICAgIH0gLy8gRW5kIHNhdmUKCiAgICAvKioKICAgICAqIERpc3BsYXkgaW1hZ2Ugd2l0aG91dCBzYXZpbmcgYW5kIGxvc2UgY2hhbmdlcwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgdHlwZSAoSlBHLFBORy4uLik7CiAgICAgKiBAcGFyYW0gaW50IHF1YWxpdHkgNzUKICAgICAqCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqLwogICAgZnVuY3Rpb24gZGlzcGxheSgkdHlwZSA9ICcnLCAkcXVhbGl0eSA9IDc1KQogICAgewogICAgICAgIGlmICgkdHlwZSA9PSAnJykgewogICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogaW1hZ2UvJyAuICR0aGlzLT50eXBlKTsKICAgICAgICAgICAgcGFzc3RocnUoSU1BR0VfVFJBTlNGT1JNX0xJQl9QQVRIIC4gJ2NvbnZlcnQgJyAuIGltcGxvZGUoJyAnLCAkdGhpcy0+Y29tbWFuZCkgLiAiIC1xdWFsaXR5ICRxdWFsaXR5ICIgIC4gZXNjYXBlc2hlbGxhcmcoJHRoaXMtPmltYWdlKSAuICcgJyAuIHN0cnRvdXBwZXIoJHRoaXMtPnR5cGUpIC4gIjotIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaGVhZGVyKCdDb250ZW50LXR5cGU6IGltYWdlLycgLiAkdHlwZSk7CiAgICAgICAgICAgIHBhc3N0aHJ1KElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICdjb252ZXJ0ICcgLiBpbXBsb2RlKCcgJywgJHRoaXMtPmNvbW1hbmQpIC4gIiAtcXVhbGl0eSAkcXVhbGl0eSAiICAuIGVzY2FwZXNoZWxsYXJnKCR0aGlzLT5pbWFnZSkgLiAnICcgLiBzdHJ0b3VwcGVyKCR0eXBlKSAuICI6LSIpOwogICAgICAgIH0KICAgIH0KCgogICAgLyoqCiAgICAgKiBEZXN0cm95IGltYWdlIGhhbmRsZQogICAgICoKICAgICAqIEByZXR1cm4gbm9uZQogICAgICovCiAgICBmdW5jdGlvbiBmcmVlKCkKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCn0gLy8gRW5kIGNsYXNzIEltYWdlSU0KPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/ImageEditor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEltYWdlIEVkaXRvci4gRWRpdGluZyB0b29scywgY3JvcCwgcm90YXRlLCBzY2FsZSBhbmQgc2F2ZS4KICogQGF1dGhvciAkQXV0aG9yOiBXZWkgWmh1byAkCiAqIEB2ZXJzaW9uICRJZDogSW1hZ2VFZGl0b3IucGhwIDQxNjkgMjAwNy0wOS0yMSAwNjoyODo0OVogc2lsbWFyaWxsaW9uICQKICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyCiAqLwoKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLiIvVHJhbnNmb3JtLnBocCIpOwoKLyoqCiAqIEhhbmRsZXMgdGhlIGJhc2ljIGltYWdlIGVkaXRpbmcgY2FwYmFiaWxpdGllcy4KICogQGF1dGhvciAkQXV0aG9yOiBXZWkgWmh1byAkCiAqIEB2ZXJzaW9uICRJZDogSW1hZ2VFZGl0b3IucGhwIDQxNjkgMjAwNy0wOS0yMSAwNjoyODo0OVogc2lsbWFyaWxsaW9uICQKICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyCiAqIEBzdWJwYWNrYWdlIEVkaXRvcgogKi8KY2xhc3MgSW1hZ2VFZGl0b3IgCnsKCS8qKgoJICogSW1hZ2VNYW5hZ2VyIGluc3RhbmNlLgoJICovCgl2YXIgJG1hbmFnZXI7CgoJLyoqCgkgKiB1c2VyIGJhc2VkIG9uIElQIGFkZHJlc3MKCSAqLwoJdmFyICRfdWlkOwoKCS8qKgoJICogdG1wIGZpbGUgc3RvcmFnZSB0aW1lLgoJICovCgl2YXIgJGxhcHNlX3RpbWUgPTkwMDsgLy8xNSBtaW5zCgoJdmFyICRmaWxlc2F2ZWQgPSAwOwoKCS8qKgoJICogQ3JlYXRlIGEgbmV3IEltYWdlRWRpdG9yIGluc3RhbmNlLiBFZGl0aW5nIHJlcXVpcmVzIGEgCgkgKiB0bXAgZmlsZSwgd2hpY2ggaXMgc2F2ZWQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoZXJlIHRoZQoJICogaW1hZ2UgaXMgZWRpdGVkLiBUaGUgdG1wIGZpbGUgaXMgYXNzaWduZWQgYnkgbWQ1IGhhc2ggb2YgdGhlCgkgKiB1c2VyIElQIGFkZHJlc3MuIFRoaXMgaGFzaGVkIGlzIHVzZWQgYXMgYW4gSUQgZm9yIGNsZWFuaW5nIHVwCgkgKiB0aGUgdG1wIGZpbGVzLiBJbiBhZGRpdGlvbiwgYW55IHRtcCBmaWxlcyBvbGRlciB0aGFuIHRoZQoJICogdGhlIHNwZWNpZmllZCBwZXJpb2Qgd2lsbCBiZSBkZWxldGVkLgoJICogQHBhcmFtIEltYWdlTWFuYWdlciAkbWFuYWdlciB0aGUgaW1hZ2UgbWFuYWdlciwgd2UgbmVlZCB0aGlzCgkgKiBmb3Igc29tZSBmaWxlIGFuZCBwYXRoIGhhbmRsaW5nIGZ1bmN0aW9ucy4KCSAqLwoJZnVuY3Rpb24gSW1hZ2VFZGl0b3IoJG1hbmFnZXIpIAoJewoJCSR0aGlzLT5tYW5hZ2VyID0gJG1hbmFnZXI7CgkJJHRoaXMtPl91aWQgPSBtZDUoJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pOwoJfQoJCgkvKioKCSAqIERpZCB3ZSBzYXZlIGEgZmlsZT8KCSAqIEByZXR1cm4gaW50IDEgaWYgdGhlIGZpbGUgd2FzIHNhdmVkIHN1Y2Vzc2Z1bGx5LCAKCSAqIDAgbm8gc2F2ZSBvcGVyYXRpb24sIC0xIGZpbGUgc2F2ZSBlcnJvci4KCSAqLwoJZnVuY3Rpb24gaXNGaWxlU2F2ZWQoKSAKCXsKCQlSZXR1cm4gJHRoaXMtPmZpbGVzYXZlZDsKCX0KCgkvKioKCSAqIFByb2Nlc3MgdGhlIGltYWdlLCBpZiBub3QgYWN0aW9uLCBqdXN0IGRpc3BsYXkgdGhlIGltYWdlLgoJICogQHJldHVybiBhcnJheSB3aXRoIGltYWdlIGluZm9ybWF0aW9uLCBlbXB0eSBhcnJheSBpZiBub3QgYW4gaW1hZ2UuCgkgKiA8Y29kZT5hcnJheSgnc3JjJz0+J3VybCBvZiB0aGUgaW1hZ2UnLCAnZGltZW5zaW9ucyc9Pid3aWR0aD0ieHgiIGhlaWdodD0ieXkiJywKCSAqICdmaWxlJz0+J2ltYWdlIGZpbGUsIHJlbGF0aXZlJywgJ2Z1bGxwYXRoJz0+J2Z1bGwgcGF0aCB0byB0aGUgaW1hZ2UnKTs8L2NvZGU+CgkgKi8KCWZ1bmN0aW9uIHByb2Nlc3NJbWFnZSgpIAoJewoJCWlmKGlzc2V0KCRfR0VUWydpbWcnXSkpCgkJCSRyZWxhdGl2ZSA9IHJhd3VybGRlY29kZSgkX0dFVFsnaW1nJ10pOwoJCWVsc2UKCQkJUmV0dXJuIGFycmF5KCk7CgkJCgkJLy8kcmVsYXRpdmUgPSAnL1NlcmllczIwMDROb3RlRnJvbnQuanBnJzsKCgkJJGltZ1VSTCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRGaWxlVVJMKCRyZWxhdGl2ZSk7CgkJJGZ1bGxwYXRoID0gJHRoaXMtPm1hbmFnZXItPmdldEZ1bGxQYXRoKCRyZWxhdGl2ZSk7CgkJCgkJJGltZ0luZm8gPSBAZ2V0SW1hZ2VTaXplKCRmdWxscGF0aCk7CgkJaWYoIWlzX2FycmF5KCRpbWdJbmZvKSkKCQkJUmV0dXJuIGFycmF5KCk7CgoJCSRhY3Rpb24gPSAkdGhpcy0+Z2V0QWN0aW9uKCk7CgoJCWlmKCFpc19udWxsKCRhY3Rpb24pKQoJCXsKCQkJJGltYWdlID0gJHRoaXMtPnByb2Nlc3NBY3Rpb24oJGFjdGlvbiwgJHJlbGF0aXZlLCAkZnVsbHBhdGgpOwoJCX0KCQllbHNlCgkJewoJCQkkaW1hZ2VbJ3NyYyddID0gJGltZ1VSTDsKCQkJJGltYWdlWydkaW1lbnNpb25zJ10gPSAkaW1nSW5mb1szXTsKCQkJJGltYWdlWydmaWxlJ10gPSAkcmVsYXRpdmU7CgkJCSRpbWFnZVsnZnVsbHBhdGgnXSA9ICRmdWxscGF0aDsKCQl9CgoJCVJldHVybiAkaW1hZ2U7Cgl9CgoJLyoqCgkgKiBQcm9jZXNzIHRoZSBhY3Rpb25zLCBjcm9wLCBzY2FsZShyZXNpemUpLCByb3RhdGUsIGZsaXAsIGFuZCBzYXZlLgoJICogV2hlbiBldmVyIGFuIGFjdGlvbiBpcyBwZXJmb3JtZWQsIHRoZSByZXN1bHQgaXMgc2F2ZSBpbnRvIGEKCSAqIHRlbXBvcmFyeSBpbWFnZSBmaWxlLCBzZWUgY3JlYXRlVW5pcXVlIG9uIHRoZSBmaWxlbmFtZSBzcGVjcy4KCSAqIEl0IGRvZXMgbm90IHJldHVybiB0aGUgc2F2ZWQgZmlsZSwgYWx3YXkgcmV0dXJuaW5nIHRoZSB0bXAgZmlsZS4KCSAqIEBwYXJhbSBzdHJpbmcgJGFjdGlvbiwgc2hvdWxkIGJlICdjcm9wJywgJ3NjYWxlJywgJ3JvdGF0ZScsJ2ZsaXAnLCBvciAnc2F2ZScKCSAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlIHRoZSByZWxhdGl2ZSBpbWFnZSBmaWxlbmFtZQoJICogQHBhcmFtIHN0cmluZyAkZnVsbHBhdGggdGhlIGZ1bGxwYXRoIHRvIHRoZSBpbWFnZSBmaWxlCgkgKiBAcmV0dXJuIGFycmF5IHdpdGggaW1hZ2UgaW5mb3JtYXRpb24KCSAqIDxjb2RlPmFycmF5KCdzcmMnPT4ndXJsIG9mIHRoZSBpbWFnZScsICdkaW1lbnNpb25zJz0+J3dpZHRoPSJ4eCIgaGVpZ2h0PSJ5eSInLAoJICogJ2ZpbGUnPT4naW1hZ2UgZmlsZSwgcmVsYXRpdmUnLCAnZnVsbHBhdGgnPT4nZnVsbCBwYXRoIHRvIHRoZSBpbWFnZScpOzwvY29kZT4KCSAqLwoJZnVuY3Rpb24gcHJvY2Vzc0FjdGlvbigkYWN0aW9uLCAkcmVsYXRpdmUsICRmdWxscGF0aCkgCgl7CgkJJHBhcmFtcyA9ICcnOwoJCQoJCWlmKGlzc2V0KCRfR0VUWydwYXJhbXMnXSkpCgkJCSRwYXJhbXMgPSAkX0dFVFsncGFyYW1zJ107CgoJCSR2YWx1ZXMgPSAgZXhwbG9kZSgnLCcsJHBhcmFtcyw0KTsKCQkkc2F2ZUZpbGUgPSAkdGhpcy0+Z2V0U2F2ZUZpbGVOYW1lKCR2YWx1ZXNbMF0pOwoKCQkkaW1nID0gSW1hZ2VfVHJhbnNmb3JtOjpmYWN0b3J5KElNQUdFX0NMQVNTKTsKCQkkaW1nLT5sb2FkKCRmdWxscGF0aCk7CgoJCXN3aXRjaCAoJGFjdGlvbikgCgkJewoJCQljYXNlICdjcm9wJzoKCQkJCSRpbWctPmNyb3AoaW50dmFsKCR2YWx1ZXNbMF0pLGludHZhbCgkdmFsdWVzWzFdKSwKCQkJCQkJCWludHZhbCgkdmFsdWVzWzJdKSxpbnR2YWwoJHZhbHVlc1szXSkpOwoJCQlicmVhazsKCQkJY2FzZSAnc2NhbGUnOgoJCQkJJGltZy0+cmVzaXplKGludHZhbCgkdmFsdWVzWzBdKSxpbnR2YWwoJHZhbHVlc1sxXSkpOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ3JvdGF0ZSc6CgkJCQkkaW1nLT5yb3RhdGUoZmxvYXR2YWwoJHZhbHVlc1swXSkpOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2ZsaXAnOgoJCQkJaWYgKCR2YWx1ZXNbMF0gPT0gJ2hveicpCgkJCQkJJGltZy0+ZmxpcCh0cnVlKTsKCQkJCWVsc2UgaWYoJHZhbHVlc1swXSA9PSAndmVyJykgCgkJCQkJJGltZy0+ZmxpcChmYWxzZSk7CgkJCQlicmVhazsKCQkJY2FzZSAnc2F2ZSc6CgkJCQlpZighaXNfbnVsbCgkc2F2ZUZpbGUpKQoJCQkJewoJCQkJCSRxdWFsaXR5ID0gaW50dmFsKCR2YWx1ZXNbMV0pOwoJCSAgICAgICAgICAgIGlmKCRxdWFsaXR5IDwwKSAkcXVhbGl0eSA9IDg1OwoJCQkJCSRuZXdTYXZlRmlsZSA9ICR0aGlzLT5tYWtlUmVsYXRpdmUoJHJlbGF0aXZlLCAkc2F2ZUZpbGUpOwoJCQkJCSRuZXdTYXZlRmlsZSA9ICR0aGlzLT5nZXRVbmlxdWVGaWxlbmFtZSgkbmV3U2F2ZUZpbGUpOwoJCQkJCQoJCQkJCS8vZ2V0IHVuaXF1ZSBmaWxlbmFtZSBqdXN0IHJldHVybnMgdGhlIGZpbGVuYW1lLCBzbwoJCQkJCS8vd2UgbmVlZCB0byBtYWtlIHRoZSByZWxhdGl2ZSBwYXRoIG9uY2UgbW9yZS4KCQkJCQkkbmV3U2F2ZUZpbGUgPSAkdGhpcy0+bWFrZVJlbGF0aXZlKCRyZWxhdGl2ZSwgJG5ld1NhdmVGaWxlKTsKCQkJCQkkbmV3U2F2ZUZ1bGxwYXRoID0gJHRoaXMtPm1hbmFnZXItPmdldEZ1bGxQYXRoKCRuZXdTYXZlRmlsZSk7CgkJCQkJJGltZy0+c2F2ZSgkbmV3U2F2ZUZ1bGxwYXRoLCAkdmFsdWVzWzBdLCAkcXVhbGl0eSk7CgkJCQkJaWYoaXNfZmlsZSgkbmV3U2F2ZUZ1bGxwYXRoKSkKCQkJCQkJJHRoaXMtPmZpbGVzYXZlZCA9IDE7CgkJCQkJZWxzZQoJCQkJCQkkdGhpcy0+ZmlsZXNhdmVkID0gLTE7CgkJCQl9CgkJCQlicmVhazsKCQl9CgkJCgkJLy9jcmVhdGUgdGhlIHRtcCBpbWFnZSBmaWxlCgkJJGZpbGVuYW1lID0gJHRoaXMtPmNyZWF0ZVVuaXF1ZSgkZnVsbHBhdGgpOwoJCSRuZXdSZWxhdGl2ZSA9ICR0aGlzLT5tYWtlUmVsYXRpdmUoJHJlbGF0aXZlLCAkZmlsZW5hbWUpOwoJCSRuZXdGdWxscGF0aCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRGdWxsUGF0aCgkbmV3UmVsYXRpdmUpOwoJCSRuZXdVUkwgPSAkdGhpcy0+bWFuYWdlci0+Z2V0RmlsZVVSTCgkbmV3UmVsYXRpdmUpOwoJCQoJCS8vc2F2ZSB0aGUgZmlsZS4KCQkkaW1nLT5zYXZlKCRuZXdGdWxscGF0aCk7CgkJJGltZy0+ZnJlZSgpOwoKCQkvL2dldCB0aGUgaW1hZ2UgaW5mb3JtYXRpb24KCQkkaW1nSW5mbyA9IEBnZXRpbWFnZXNpemUoJG5ld0Z1bGxwYXRoKTsKCgkJJGltYWdlWydzcmMnXSA9ICRuZXdVUkw7CgkJJGltYWdlWydkaW1lbnNpb25zJ10gPSAkaW1nSW5mb1szXTsKCQkkaW1hZ2VbJ2ZpbGUnXSA9ICRuZXdSZWxhdGl2ZTsKCQkkaW1hZ2VbJ2Z1bGxwYXRoJ10gPSAkbmV3RnVsbHBhdGg7CgoJCVJldHVybiAkaW1hZ2U7CgkKCX0KCgkvKioKCSAqIEdldCB0aGUgZmlsZSBuYW1lIGJhc2Ugb24gdGhlIHNhdmUgbmFtZQoJICogYW5kIHRoZSBzYXZlIHR5cGUuCgkgKiBAcGFyYW0gc3RyaW5nICR0eXBlIGltYWdlIHR5cGUsICdqcGVnJywgJ3BuZycsIG9yICdnaWYnCgkgKiBAcmV0dXJuIHN0cmluZyB0aGUgZmlsZW5hbWUgYWNjb3JkaW5nIHRvIHNhdmUgdHlwZQoJICovCglmdW5jdGlvbiBnZXRTYXZlRmlsZU5hbWUoJHR5cGUpIAoJewoJCWlmKCFpc3NldCgkX0dFVFsnZmlsZSddKSkKCQkJUmV0dXJuIG51bGw7CgoJCSRmaWxlbmFtZSA9IEZpbGVzOjplc2NhcGUocmF3dXJsZGVjb2RlKCRfR0VUWydmaWxlJ10pKTsKCQkkaW5kZXggPSBzdHJycG9zKCRmaWxlbmFtZSwnLicpOwoJCSRiYXNlID0gc3Vic3RyKCRmaWxlbmFtZSwwLCRpbmRleCk7CgkJJGV4dCA9IHN0cnRvbG93ZXIoc3Vic3RyKCRmaWxlbmFtZSwkaW5kZXgrMSxzdHJsZW4oJGZpbGVuYW1lKSkpOwoKCQlpZigkdHlwZSA9PSAnanBlZycgJiYgISgkZXh0PT0nanBlZycgfHwgJGV4dD09J2pwZycpKQoJCXsKCQkJUmV0dXJuICRiYXNlLicuanBlZyc7CgkJfQoJCWlmKCR0eXBlPT0ncG5nJyAmJiAkZXh0ICE9ICdwbmcnKQoJCQlSZXR1cm4gJGJhc2UuJy5wbmcnOwoJCWlmKCR0eXBlPT0nZ2lmJyAmJiAkZXh0ICE9ICdnaWYnKQoJCQlSZXR1cm4gJGJhc2UuJy5naWYnOwoKCQlSZXR1cm4gJGZpbGVuYW1lOwoJfQoKCS8qKgoJICogR2V0IHRoZSBkZWZhdWx0IHNhdmUgZmlsZSBuYW1lLCB1c2VkIGJ5IGVkaXRvci5waHAuCgkgKiBAcmV0dXJuIHN0cmluZyBhIHN1Z2dlc3RpdmUgZmlsZW5hbWUsIHRoaXMgc2hvdWxkIGJlIHVuaXF1ZQoJICovCglmdW5jdGlvbiBnZXREZWZhdWx0U2F2ZUZpbGUoKSAKCXsKCQlpZihpc3NldCgkX0dFVFsnaW1nJ10pKQoJCQkkcmVsYXRpdmUgPSByYXd1cmxkZWNvZGUoJF9HRVRbJ2ltZyddKTsKCQllbHNlCgkJCVJldHVybiBudWxsOwoKCQlSZXR1cm4gJHRoaXMtPmdldFVuaXF1ZUZpbGVuYW1lKCRyZWxhdGl2ZSk7Cgl9CgoJLyoqCgkgKiBHZXQgYSB1bmlxdWUgZmlsZW5hbWUuIElmIHRoZSBmaWxlIGV4aXN0cywgdGhlIGZpbGVuYW1lCgkgKiBiYXNlIGlzIGFwcGVuZGVkIHdpdGggYW4gaW5jcmVhc2luZyBpbnRlZ2VyLgoJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIGZpbGVuYW1lIHRvIHRoZSBiYXNlX2RpcgoJICogQHJldHVybiBzdHJpbmcgYSB1bmlxdWUgZmlsZW5hbWUgaW4gdGhlIGN1cnJlbnQgcGF0aAoJICovCglmdW5jdGlvbiBnZXRVbmlxdWVGaWxlbmFtZSgkcmVsYXRpdmUpIAoJewoJCSRmdWxscGF0aCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRGdWxsUGF0aCgkcmVsYXRpdmUpOwoJCQoJCSRwYXRoaW5mbyA9IHBhdGhpbmZvKCRmdWxscGF0aCk7CgoJCSRwYXRoID0gRmlsZXM6OmZpeFBhdGgoJHBhdGhpbmZvWydkaXJuYW1lJ10pOwoJCSRmaWxlID0gRmlsZXM6OmVzY2FwZSgkcGF0aGluZm9bJ2Jhc2VuYW1lJ10pOwoJCQoJCSRmaWxlbmFtZSA9ICRmaWxlOwoKCQkkZG90SW5kZXggPSBzdHJycG9zKCRmaWxlLCAnLicpOwoJCSRleHQgPSAnJzsKCgkJaWYoaXNfaW50KCRkb3RJbmRleCkpIAoJCXsKCQkJJGV4dCA9IHN1YnN0cigkZmlsZSwgJGRvdEluZGV4KTsKCQkJJGJhc2UgPSBzdWJzdHIoJGZpbGUsIDAsICRkb3RJbmRleCk7CgkJfQoKCQkkY291bnRlciA9IDA7CgkJd2hpbGUoaXNfZmlsZSgkcGF0aC4kZmlsZW5hbWUpKSAKCQl7CgkJCSRjb3VudGVyKys7CgkJCSRmaWxlbmFtZSA9ICRiYXNlLidfJy4kY291bnRlci4kZXh0OwoJCX0KCQkKCQlSZXR1cm4gJGZpbGVuYW1lOwoJCQoJfQoKCS8qKgoJICogU3BlY2lmaXkgdGhlIG9yaWdpbmFsIHJlbGF0aXZlIHBhdGgsIGEgbmV3IGZpbGVuYW1lCgkgKiBhbmQgcmV0dXJuIHRoZSBuZXcgZmlsZW5hbWUgd2l0aCByZWxhdGl2ZSBwYXRoLgoJICogaS5lLiAkcGF0aEEgKC1maWxlbmFtZSkgKyAkZmlsZQoJICogQHBhcmFtIHN0cmluZyAkcGF0aEEgdGhlIHJlbGF0aXZlIGZpbGUKCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgdGhlIG5ldyBmaWxlbmFtZQoJICogQHJldHVybiBzdHJpbmcgcmVsYXRpdmUgcGF0aCB3aXRoIHRoZSBuZXcgZmlsZW5hbWUKCSAqLwoJZnVuY3Rpb24gbWFrZVJlbGF0aXZlKCRwYXRoQSwgJGZpbGUpIAoJewoJCSRpbmRleCA9IHN0cnJwb3MoJHBhdGhBLCcvJyk7CgkJaWYoIWlzX2ludCgkaW5kZXgpKQoJCQlSZXR1cm4gJGZpbGU7CgoJCSRwYXRoID0gc3Vic3RyKCRwYXRoQSwgMCwgJGluZGV4KTsKCQlSZXR1cm4gRmlsZXM6OmZpeFBhdGgoJHBhdGgpLiRmaWxlOwoJfQoKCS8qKgoJICogR2V0IHRoZSBhY3Rpb24gR0VUIHBhcmFtZXRlcgoJICogQHJldHVybiBzdHJpbmcgYWN0aW9uIHBhcmFtZXRlcgoJICovCglmdW5jdGlvbiBnZXRBY3Rpb24oKSAKCXsKCQkkYWN0aW9uID0gbnVsbDsKCQlpZihpc3NldCgkX0dFVFsnYWN0aW9uJ10pKQoJCQkkYWN0aW9uID0gJF9HRVRbJ2FjdGlvbiddOwoJCVJldHVybiAkYWN0aW9uOwoJfQoKCS8qKgoJICogR2VuZXJhdGUgYSB1bmlxdWUgc3RyaW5nIGJhc2VkIG9uIG1kNShtaWNyb3RpbWUoKSkuCgkgKiBXZWxsIG5vdCBzbyB1bmlxZSwgYXMgaXQgaXMgbGltaXRlZCB0byA2IGNoYXJhY3RlcnMKCSAqIEByZXR1cm4gc3RyaW5nIHVuaXF1ZSBzdHJpbmcuCgkgKi8KICAgIGZ1bmN0aW9uIHVuaXF1ZVN0cigpCiAgICB7CiAgICAgIHJldHVybiBzdWJzdHIobWQ1KG1pY3JvdGltZSgpKSwwLDYpOwogICAgfQoKCS8qKgoJICogQ3JlYXRlIHVuaXF1ZSB0bXAgaW1hZ2UgZmlsZSBuYW1lLgoJICogVGhlIGZpbGVuYW1lIGlzIGJhc2VkIG9uIHRoZSB0bXAgZmlsZSBwcmVmaXgKCSAqIHNwZWNpZmllZCBpbiBjb25maWcuaW5jLnBocCBwbHVzIAoJICogdGhlIFVJRCAoYmFzaWNhbGx5IGEgbWQ1IG9mIHRoZSByZW1vdGUgSVApCgkgKiBhbmQgc29tZSByYW5kb20gNiBjaGFyYWN0ZXIgc3RyaW5nLgoJICogVGhpcyBmdW5jdGlvbiBhbHNvIGNhbGxzIHRvIGNsZWFuIHVwIHRoZSB0bXAgZmlsZXMuCgkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIHRoZSBmdWxscGF0aCB0byBhIGZpbGUKCSAqIEByZXR1cm4gc3RyaW5nIGEgdW5pcXVlIGZpbGVuYW1lIGZvciB0aGF0IHBhdGgKCSAqIE5PVEU6IGl0IG9ubHkgcmV0dXJucyB0aGUgZmlsZW5hbWUsIHBhdGggbm8gaW5jbHVkZWQuCgkgKi8KCWZ1bmN0aW9uIGNyZWF0ZVVuaXF1ZSgkZmlsZSkgCgl7CgkJJHBhdGhpbmZvID0gcGF0aGluZm8oJGZpbGUpOwoJCSRwYXRoID0gRmlsZXM6OmZpeFBhdGgoJHBhdGhpbmZvWydkaXJuYW1lJ10pOwoJCSRpbWdUeXBlID0gJHRoaXMtPmdldEltYWdlVHlwZSgkZmlsZSk7CgoJCSR1bmlxdWVfc3RyID0gJHRoaXMtPm1hbmFnZXItPmdldFRtcFByZWZpeCgpLiR0aGlzLT5fdWlkLidfJy4kdGhpcy0+dW5pcXVlU3RyKCkuIi4iLiRpbWdUeXBlOwoKCSAgIC8vbWFrZSBzdXJlIHRoZSB0aGUgdW5pcXVlIHRlbXAgZmlsZSBkb2VzIG5vdCBleGlzdHMKICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJHBhdGguJHVuaXF1ZV9zdHIpKQogICAgICAgIHsKICAgICAgICAgICAgJHVuaXF1ZV9zdHIgPSAkdGhpcy0+bWFuYWdlci0+Z2V0VG1wUHJlZml4KCkuJHRoaXMtPl91aWQuJ18nLiR0aGlzLT51bmlxdWVTdHIoKS4iLiIuJGltZ1R5cGU7CiAgICAgICAgfQoKCQkkdGhpcy0+Y2xlYW5VcCgkcGF0aCwkcGF0aGluZm9bJ2Jhc2VuYW1lJ10pOwoKCQlSZXR1cm4gJHVuaXF1ZV9zdHI7Cgl9CgoJLyoqCgkgKiBEZWxldGUgYW55IHRtcCBpbWFnZSBmaWxlcy4KCSAqIEBwYXJhbSBzdHJpbmcgJHBhdGggdGhlIGZ1bGwgcGF0aCAKCSAqIHdoZXJlIHRoZSBjbGVhbiBzaG91bGQgdGFrZSBwbGFjZS4KCSAqLwoJZnVuY3Rpb24gY2xlYW5VcCgkcGF0aCwkZmlsZSkgCgl7CgkJJHBhdGggPSBGaWxlczo6Zml4UGF0aCgkcGF0aCk7CgoJCWlmKCFpc19kaXIoJHBhdGgpKQoJCQlSZXR1cm4gZmFsc2U7CgoJCSRkID0gQGRpcigkcGF0aCk7CgkJCgkJJHRtcCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRUbXBQcmVmaXgoKTsKCQkkdG1wTGVuID0gc3RybGVuKCR0bXApOwoKCQkkcHJlZml4ID0gJHRtcC4kdGhpcy0+X3VpZDsKCQkkbGVuID0gc3RybGVuKCRwcmVmaXgpOwoKCQl3aGlsZSAoZmFsc2UgIT0gKCRlbnRyeSA9ICRkLT5yZWFkKCkpKSAKCQl7CgkJCS8vZWNobyAkZW50cnkuIjxicj4iOwoJCQlpZihpc19maWxlKCRwYXRoLiRlbnRyeSkgJiYgJHRoaXMtPm1hbmFnZXItPmlzVG1wRmlsZSgkZW50cnkpKQoJCQl7CgkJCQlpZihzdWJzdHIoJGVudHJ5LDAsJGxlbik9PSRwcmVmaXggJiYgJGVudHJ5ICE9ICRmaWxlKQoJCQkJCUZpbGVzOjpkZWxGaWxlKCRwYXRoLiRlbnRyeSk7CgkJCQllbHNlIGlmKHN1YnN0cigkZW50cnksMCwkdG1wTGVuKT09JHRtcCAmJiAkZW50cnkgIT0gJGZpbGUpCgkJCQl7CgkJCQkJaWYoZmlsZW10aW1lKCRwYXRoLiRlbnRyeSkrJHRoaXMtPmxhcHNlX3RpbWUgPCB0aW1lKCkpCgkJCQkJCUZpbGVzOjpkZWxGaWxlKCRwYXRoLiRlbnRyeSk7CgkJCQl9CgkJCX0KCQl9CgkJJGQtPmNsb3NlKCk7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGltYWdlIHR5cGUgYmFzZSBvbiBhbiBpbWFnZSBmaWxlLgoJICogQHBhcmFtIHN0cmluZyAkZmlsZSB0aGUgZnVsbCBwYXRoIHRvIHRoZSBpbWFnZSBmaWxlLgoJICogQHJldHVybiBzdHJpbmcgb2YgZWl0aGVyICdnaWYnLCAnanBlZycsICdwbmcnIG9yICdibXAnCgkgKiBvdGhlcndpc2UgaXQgd2lsbCByZXR1cm4gbnVsbC4KCSAqLwoJZnVuY3Rpb24gZ2V0SW1hZ2VUeXBlKCRmaWxlKSAKCXsKCQkkaW1hZ2VJbmZvID0gQGdldEltYWdlU2l6ZSgkZmlsZSk7CgoJCWlmKCFpc19hcnJheSgkaW1hZ2VJbmZvKSkKCQkJUmV0dXJuIG51bGw7CgoJCXN3aXRjaCgkaW1hZ2VJbmZvWzJdKSAKCQl7CgkJCWNhc2UgMToKCQkJCVJldHVybiAnZ2lmJzsKCQkJY2FzZSAyOgoJCQkJUmV0dXJuICdqcGVnJzsKCQkJY2FzZSAzOgoJCQkJUmV0dXJuICdwbmcnOwoJCQljYXNlIDY6CgkJCQlSZXR1cm4gJ2JtcCc7CgkJfQoKCQlSZXR1cm4gbnVsbDsKCX0KCgkvKioKCSAqIENoZWNrIGlmIHRoZSBzcGVjaWZpZWQgaW1hZ2UgY2FuIGJlIGVkaXQgYnkgR0QKCSAqIG1haW5seSB0byBjaGVjayB0aGF0IEdEIGNhbiByZWFkIGFuZCBzYXZlIEdJRnMKCSAqIEByZXR1cm4gaW50IDAgaWYgaXQgaXMgbm90IGEgR0lGIGZpbGUsIDEgaXMgR0lGIGlzIGVkaXRhYmxlLCAtMSBpZiBub3QgZWRpdGFibGUuCgkgKi8KCWZ1bmN0aW9uIGlzR0RFZGl0YWJsZSgpIAoJewoJCWlmKGlzc2V0KCRfR0VUWydpbWcnXSkpCgkJCSRyZWxhdGl2ZSA9IHJhd3VybGRlY29kZSgkX0dFVFsnaW1nJ10pOwoJCWVsc2UKCQkJUmV0dXJuIDA7CgkJaWYoSU1BR0VfQ0xBU1MgIT0gJ0dEJykKCQkJUmV0dXJuIDA7CgoJCSRmdWxscGF0aCA9ICR0aGlzLT5tYW5hZ2VyLT5nZXRGdWxsUGF0aCgkcmVsYXRpdmUpOwoKCQkkdHlwZSA9ICR0aGlzLT5nZXRJbWFnZVR5cGUoJGZ1bGxwYXRoKTsKCQlpZigkdHlwZSAhPSAnZ2lmJykKCQkJUmV0dXJuIDA7CgoJCWlmKGZ1bmN0aW9uX2V4aXN0cyhzdHJ0b2xvd2VyKCdJbWFnZUNyZWF0ZUZyb20nLiR0eXBlKSkKCQkJJiYgZnVuY3Rpb25fZXhpc3RzKHN0cnRvbG93ZXIoJ2ltYWdlJy4kdHlwZSkpKQoJCQlSZXR1cm4gMTsKCQllbHNlCgkJCVJldHVybiAtMTsKCX0KCgkvKioKCSAqIENoZWNrIGlmIEdJRiBjYW4gYmUgZWRpdCBieSBHRC4KCSAqIEByZXR1cm4gaW50IDAgaWYgaXQgaXMgbm90IHVzaW5nIHRoZSBHRCBsaWJyYXJ5LCAxIGlzIEdJRiBpcyBlZGl0YWJsZSwgLTEgaWYgbm90IGVkaXRhYmxlLgoJICovCglmdW5jdGlvbiBpc0dER0lGQWJsZSgpIAoJewoJCWlmKElNQUdFX0NMQVNTICE9ICdHRCcpCgkJCVJldHVybiAwOwoKCQlpZihmdW5jdGlvbl9leGlzdHMoJ0ltYWdlQ3JlYXRlRnJvbUdpZicpCgkJCSYmIGZ1bmN0aW9uX2V4aXN0cygnaW1hZ2VnaWYnKSkKCQkJUmV0dXJuIDE7CgkJZWxzZQoJCQlSZXR1cm4gLTE7Cgl9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/ImageManager.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEltYWdlTWFuYWdlciwgbGlzdCBpbWFnZXMsIGRpcmVjdG9yaWVzLCBhbmQgdGh1bWJuYWlscy4KICogQGF1dGhvciAkQXV0aG9yOiBXZWkgWmh1byAkCiAqIEB2ZXJzaW9uICRJZDogSW1hZ2VNYW5hZ2VyLnBocCA4NTUzIDIwMTItMTItMDggMTc6MDM6MTBaIGNhbGd1eTEwMDAgJAogKiBAcGFja2FnZSBJbWFnZU1hbmFnZXIKICovCgpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9GaWxlcy5waHAnKTsKCi8qKgogKiBJbWFnZU1hbmFnZXIgQ2xhc3MuCiAqIEBhdXRob3IgJEF1dGhvcjogV2VpIFpodW8gJAogKiBAdmVyc2lvbiAkSWQ6IEltYWdlTWFuYWdlci5waHAgODU1MyAyMDEyLTEyLTA4IDE3OjAzOjEwWiBjYWxndXkxMDAwICQKICovCmNsYXNzIEltYWdlTWFuYWdlciAKewoJLyoqCgkgKiBDb25maWd1cmF0aW9uIGFycmF5LgoJICovCgl2YXIgJGNvbmZpZzsKCgkvKioKCSAqIEFycmF5IG9mIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KCSAqLwoJdmFyICRkaXJzOwoKCS8qKgoJICogQ29uc3RydWN0b3IuIENyZWF0ZSBhIG5ldyBJbWFnZSBNYW5hZ2VyIGluc3RhbmNlLgoJICogQHBhcmFtIGFycmF5ICRjb25maWcgY29uZmlndXJhdGlvbiBhcnJheSwgc2VlIGNvbmZpZy5pbmMucGhwCgkgKi8KCWZ1bmN0aW9uIEltYWdlTWFuYWdlcigkY29uZmlnKSAKCXsKCQkkdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKCX0KCgkvKioKCSAqIEdldCB0aGUgYmFzZSBkaXJlY3RvcnkuCgkgKiBAcmV0dXJuIHN0cmluZyBiYXNlIGRpciwgc2VlIGNvbmZpZy5pbmMucGhwCgkgKi8KCWZ1bmN0aW9uIGdldEJhc2VEaXIoKSAKCXsKCQlSZXR1cm4gJHRoaXMtPmNvbmZpZ1snYmFzZV9kaXInXTsKCX0KCgkvKioKCSAqIEdldCB0aGUgYmFzZSBVUkwuCgkgKiBAcmV0dXJuIHN0cmluZyBiYXNlIHVybCwgc2VlIGNvbmZpZy5pbmMucGhwCgkgKi8KCWZ1bmN0aW9uIGdldEJhc2VVUkwoKSAKCXsKCQlSZXR1cm4gJHRoaXMtPmNvbmZpZ1snYmFzZV91cmwnXTsKCX0KCglmdW5jdGlvbiBpc1ZhbGlkQmFzZSgpCgl7CgkJcmV0dXJuIGlzX2RpcigkdGhpcy0+Z2V0QmFzZURpcigpKTsKCX0KCgkvKioKCSAqIEdldCB0aGUgdG1wIGZpbGUgcHJlZml4LgogICAgICogQHJldHVybiBzdHJpbmcgdG1wIGZpbGUgcHJlZml4LgoJICovCglmdW5jdGlvbiBnZXRUbXBQcmVmaXgoKSAKCXsKCQlSZXR1cm4gJHRoaXMtPmNvbmZpZ1sndG1wX3ByZWZpeCddOwoJfQoKCS8qKgoJICogR2V0IHRoZSBzdWIgZGlyZWN0b3JpZXMgaW4gdGhlIGJhc2UgZGlyLgoJICogRWFjaCBhcnJheSBlbGVtZW50IGNvbnRhaW4KCSAqIHRoZSByZWxhdGl2ZSBwYXRoIChyZWxhdGl2ZSB0byB0aGUgYmFzZSBkaXIpIGFzIGtleSBhbmQgdGhlIAoJICogZnVsbCBwYXRoIGFzIHZhbHVlLgoJICogQHJldHVybiBhcnJheSBvZiBzdWIgZGlyZWN0cmllcwoJICogPGNvZGU+YXJyYXkoJ3BhdGggbmFtZScgPT4gJ2Z1bGwgZGlyZWN0b3J5IHBhdGgnLCAuLi4pPC9jb2RlPgoJICovCglmdW5jdGlvbiBnZXREaXJzKCkgCgl7CgkJaWYoaXNfbnVsbCgkdGhpcy0+ZGlycykpCgkJewoJCQkkZGlycyA9ICR0aGlzLT5fZGlycygkdGhpcy0+Z2V0QmFzZURpcigpLCcvJyk7CgkJCWtzb3J0KCRkaXJzKTsKCQkJJHRoaXMtPmRpcnMgPSAkZGlyczsKCQl9CgkJcmV0dXJuICR0aGlzLT5kaXJzOwoJfQoKCS8qKgoJICogUmVjdXJzaXZlbHkgdHJhdmVzZSB0aGUgZGlyZWN0b3JpZXMgdG8gZ2V0IGEgbGlzdAoJICogb2YgYWNjZXNzYWJsZSBkaXJlY3Rvcmllcy4KCSAqIEBwYXJhbSBzdHJpbmcgJGJhc2UgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkKCSAqIEBwYXJhbSBzdHJpbmcgJHBhdGggdGhlIHJlbGF0aXZlIHBhdGggbmFtZQoJICogQHJldHVybiBhcnJheSBvZiBhY2Nlc3NpYWJsZSBzdWItZGlyZWN0b3JpZXMKCSAqIDxjb2RlPmFycmF5KCdwYXRoIG5hbWUnID0+ICdmdWxsIGRpcmVjdG9yeSBwYXRoJywgLi4uKTwvY29kZT4KCSAqLwoJZnVuY3Rpb24gX2RpcnMoJGJhc2UsICRwYXRoKSAKCXsKCQkkYmFzZSA9IEZpbGVzOjpmaXhQYXRoKCRiYXNlKTsKCQkkZGlycyA9IGFycmF5KCk7CgoJCWlmKCR0aGlzLT5pc1ZhbGlkQmFzZSgpID09IGZhbHNlKQoJCQlyZXR1cm4gJGRpcnM7CgoJCSRkID0gQGRpcigkYmFzZSk7CgkJaWYoICEkZCApIHJldHVybiAkZGlyczsKCQoJCXdoaWxlIChmYWxzZSAhPT0gKCRlbnRyeSA9ICRkLT5yZWFkKCkpKSAKCQl7CgkJCS8vSWYgaXQgaXMgYSBkaXJlY3RvcnksIGFuZCBpdCBkb2Vzbid0IHN0YXJ0IHdpdGgKCQkJLy8gYSBkb3QsIGFuZCBpZiBpcyBpdCBub3QgdGhlIHRodW1ibmFpbCBkaXJlY3RvcnkKCQkJaWYoaXNfZGlyKCRiYXNlLiRlbnRyeSkgCgkJCQkmJiBzdWJzdHIoJGVudHJ5LDAsMSkgIT0gJy4nCgkJCQkmJiAkdGhpcy0+aXNUaHVtYkRpcigkZW50cnkpID09IGZhbHNlKSAKCQkJewoJCQkJJHJlbGF0aXZlID0gRmlsZXM6OmZpeFBhdGgoJHBhdGguJGVudHJ5KTsKCQkJCSRmdWxscGF0aCA9IEZpbGVzOjpmaXhQYXRoKCRiYXNlLiRlbnRyeSk7CgkJCQkkZGlyc1skcmVsYXRpdmVdID0gJGZ1bGxwYXRoOwoJCQkJJGRpcnMgPSBhcnJheV9tZXJnZSgkZGlycywgJHRoaXMtPl9kaXJzKCRmdWxscGF0aCwgJHJlbGF0aXZlKSk7CgkJCX0KCQl9CgkJJGQtPmNsb3NlKCk7CgoJCVJldHVybiAkZGlyczsKCX0KCgkvKioKCSAqIEdldCBhbGwgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBvZiBhIHJlbGF0aXZlIHBhdGguCgkgKiBAcGFyYW0gc3RyaW5nICRwYXRoIHJlbGF0aXZlIHBhdGggdG8gYmUgYmFzZSBwYXRoLgoJICogQHJldHVybiBhcnJheSBvZiBmaWxlIGFuZCBwYXRoIGluZm9ybWF0aW9uLgoJICogPGNvZGU+YXJyYXkoMD0+YXJyYXkoJ3JlbGF0aXZlJz0+J2Z1bGxwYXRoJywuLi4pLCAxPT5hcnJheSgnZmlsZW5hbWUnPT5maWxlaW5mbyBhcnJheSgpLC4uLik8L2NvZGU+CgkgKiBmaWxlaW5mbyBhcnJheTogPGNvZGU+YXJyYXkoJ3VybCc9PidmdWxsIHVybCcsIAoJICogICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZSc9PidyZWxhdGl2ZSB0byBiYXNlJywgCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICdmdWxscGF0aCc9PidmdWxsIGZpbGUgcGF0aCcsIAoJICogICAgICAgICAgICAgICAgICAgICAgICAnaW1hZ2UnPT5pbWFnZUluZm8gYXJyYXkoKSBmYWxzZSBpZiBub3QgaW1hZ2UsCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0JyA9PiBmaWxlc3RhdCk8L2NvZGU+CgkgKi8KCWZ1bmN0aW9uIGdldEZpbGVzKCRwYXRoKSAKCXsKCQkkZmlsZXMgPSBhcnJheSgpOwoJCSRkaXJzID0gYXJyYXkoKTsKCgkJaWYoJHRoaXMtPmlzVmFsaWRCYXNlKCkgPT0gZmFsc2UpCgkJCXJldHVybiBhcnJheSgkZmlsZXMsJGRpcnMpOwoKCQkkcGF0aCA9IEZpbGVzOjpmaXhQYXRoKCRwYXRoKTsKCQkkYmFzZSA9IEZpbGVzOjpmaXhQYXRoKCR0aGlzLT5nZXRCYXNlRGlyKCkpOwoJCSRmdWxscGF0aCA9IEZpbGVzOjptYWtlUGF0aCgkYmFzZSwkcGF0aCk7CgoJCSRkID0gQGRpcigkZnVsbHBhdGgpOwoJCWlmKCAkZCApIHsKCQkgIHdoaWxlIChmYWxzZSAhPT0gKCRlbnRyeSA9ICRkLT5yZWFkKCkpKSB7CgkJICAgIC8vbm90IGEgZG90IGZpbGUgb3IgZGlyZWN0b3J5CgkJICAgIGlmKHN1YnN0cigkZW50cnksMCwxKSAhPSAnLicpIHsKCQkgICAgICBpZihpc19kaXIoJGZ1bGxwYXRoLiRlbnRyeSkKCQkJICYmICR0aGlzLT5pc1RodW1iRGlyKCRlbnRyeSkgPT0gZmFsc2UpIHsKCQkJJHJlbGF0aXZlID0gRmlsZXM6OmZpeFBhdGgoJHBhdGguJGVudHJ5KTsKCQkJJGZ1bGwgPSBGaWxlczo6Zml4UGF0aCgkZnVsbHBhdGguJGVudHJ5KTsKCQkJJGNvdW50ID0gJHRoaXMtPmNvdW50RmlsZXMoJGZ1bGwpOwoJCQkkZGlyc1skcmVsYXRpdmVdID0gYXJyYXkoJ2Z1bGxwYXRoJz0+JGZ1bGwsJ2VudHJ5Jz0+JGVudHJ5LCdjb3VudCc9PiRjb3VudCk7CgkJICAgICAgfQoJCSAgICAgIGVsc2UgaWYoaXNfZmlsZSgkZnVsbHBhdGguJGVudHJ5KSAmJiAKCQkJICAgICAgJHRoaXMtPmlzVGh1bWIoJGVudHJ5KT09ZmFsc2UgJiYgJHRoaXMtPmlzVG1wRmlsZSgkZW50cnkpID09IGZhbHNlKSB7CgkJCSRpbWcgPSAkdGhpcy0+Z2V0SW1hZ2VJbmZvKCRmdWxscGF0aC4kZW50cnkpOwoKCQkJaWYoISghaXNfYXJyYXkoJGltZykmJiR0aGlzLT5jb25maWdbJ3ZhbGlkYXRlX2ltYWdlcyddKSkgewoJCQkgICRmaWxlWyd1cmwnXSA9IEZpbGVzOjptYWtlUGF0aCgkdGhpcy0+Y29uZmlnWydiYXNlX3VybCddLCRwYXRoKS4kZW50cnk7CgkJCSAgJGZpbGVbJ3JlbGF0aXZlJ10gPSAkcGF0aC4kZW50cnk7CgkJCSAgJGZpbGVbJ2Z1bGxwYXRoJ10gPSAkZnVsbHBhdGguJGVudHJ5OwoJCQkgICRmaWxlWydpbWFnZSddID0gJGltZzsKCQkJICAkZmlsZVsnc3RhdCddID0gc3RhdCgkZnVsbHBhdGguJGVudHJ5KTsKCQkJICAkZmlsZXNbJGVudHJ5XSA9ICRmaWxlOwoJCQl9CgkJICAgICAgfQoJCSAgICB9CgkJICB9CgkJICAkZC0+Y2xvc2UoKTsKCQl9CgoJCQkvL0FkZCBhIGJhY2sgZGlyZWN0b3J5CgkJCQoJCQkkYmFja3BhdGggPSAkZnVsbHBhdGguJy8uLic7CgkJCSRiYWNrcGF0aCA9IHJlYWxwYXRoKCRiYWNrcGF0aCk7CgkJCWlmIChzdWJzdHIoJGJhY2twYXRoLDAsc3RybGVuKCR0aGlzLT5nZXRCYXNlRGlyKCkpKSA9PSAkdGhpcy0+Z2V0QmFzZURpcigpKQoJCQkJewoJCQkJJGJhY2twYXRoID0gc3Vic3RyKCRiYWNrcGF0aCxzdHJsZW4oJHRoaXMtPmdldEJhc2VEaXIoKSkpOwoJCQkJfQovLwkJICAgIGVjaG8gJzxwIGNsYXNzPSJwYWdlaGVhZGVyIj4nLiRwYXRoLic8L3A+JzsKCQkJaWYoJHBhdGggIT0gJy8nKSB7CgkJCQkJJHJlbGF0aXZlID0gRmlsZXM6OmZpeFBhdGgoJGJhY2twYXRoKTsKCQkJCQkkZnVsbCA9IEZpbGVzOjpmaXhQYXRoKCRiYWNrcGF0aCk7CgkJCQkJJGNvdW50ID0gJHRoaXMtPmNvdW50RmlsZXMoJGZ1bGwpOwoJCQkJCSRlbnRyeSA9ICcuLic7CgkJCQkJJGRpcnNbJHJlbGF0aXZlXSA9IGFycmF5KCdmdWxscGF0aCc9PiRmdWxsLCdlbnRyeSc9PiRlbnRyeSwnY291bnQnPT4kY291bnQpOwkJCSAgCgkJCX0KCgkJa3NvcnQoJGRpcnMpOwoJCWtzb3J0KCRmaWxlcyk7CgkJCgkJUmV0dXJuIGFycmF5KCRkaXJzLCAkZmlsZXMpOwoJfQkKCgkvKioKCSAqIENvdW50IHRoZSBudW1iZXIgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluIGEgZ2l2ZW4gZm9sZGVyCgkgKiBtaW51cyB0aGUgdGh1bWJuYWlsIGZvbGRlcnMgYW5kIHRodW1ibmFpbHMuCgkgKi8KCWZ1bmN0aW9uIGNvdW50RmlsZXMoJHBhdGgpIAoJewoJCSR0b3RhbCA9IDA7CgkJZ2xvYmFsICRjb25maWc7CgkJaWYoKCRwYXRoICE9ICIvIikgJiYgKGlzX2RpcigkY29uZmlnWydpbWFnZV91cGxvYWRzX3BhdGgnXS4iLyIuJHBhdGgpKSkKCQl7CgkJCSRkID0gQGRpcigkY29uZmlnWydpbWFnZV91cGxvYWRzX3BhdGgnXS4iLyIuJHBhdGgpOwoKCQkJd2hpbGUgKGZhbHNlICE9PSAoJGVudHJ5ID0gJGQtPnJlYWQoKSkpIAoJCQl7CgkJCQkvL2VjaG8gJGVudHJ5LiI8YnI+IjsKCQkJCWlmKHN1YnN0cigkZW50cnksMCwxKSAhPSAnLicKCQkJCQkmJiAkdGhpcy0+aXNUaHVtYkRpcigkZW50cnkpID09IGZhbHNlCgkJCQkJJiYgJHRoaXMtPmlzVG1wRmlsZSgkZW50cnkpID09IGZhbHNlCgkJCQkJJiYgJHRoaXMtPmlzVGh1bWIoJGVudHJ5KSA9PSBmYWxzZSkgCgkJCQl7CgkJCQkJJHRvdGFsKys7CgkJCQl9CgkJCX0KCQkJJGQtPmNsb3NlKCk7CgkJfQoJCXJldHVybiAkdG90YWw7Cgl9CgoJLyoqCgkgKiBHZXQgaW1hZ2Ugc2l6ZSBpbmZvcm1hdGlvbi4KCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgdGhlIGltYWdlIGZpbGUKCSAqIEByZXR1cm4gYXJyYXkgb2YgZ2V0SW1hZ2VTaXplIGluZm9ybWF0aW9uLCAKCSAqICBmYWxzZSBpZiB0aGUgZmlsZSBpcyBub3QgYW4gaW1hZ2UuCgkgKi8KCWZ1bmN0aW9uIGdldEltYWdlSW5mbygkZmlsZSkgCgl7CgkJUmV0dXJuIEBnZXRJbWFnZVNpemUoJGZpbGUpOwoJfQoKCS8qKgoJICogQ2hlY2sgaWYgdGhlIGZpbGUgY29udGFpbnMgdGhlIHRodW1ibmFpbCBwcmVmaXguCgkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIGZpbGVuYW1lIHRvIGJlIGNoZWNrZWQKCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsZSBjb250YWlucyB0aGUgdGh1bWJuYWlsIHByZWZpeCwgZmFsc2Ugb3RoZXJ3aXNlLgoJICovCglmdW5jdGlvbiBpc1RodW1iKCRmaWxlKSAKCXsKCQkkbGVuID0gc3RybGVuKCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9wcmVmaXgnXSk7CgkJaWYoc3Vic3RyKCRmaWxlLDAsJGxlbik9PSR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9wcmVmaXgnXSkKCQkJUmV0dXJuIHRydWU7CgkJZWxzZQoJCQlSZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGlzIGEgdGh1bWJuYWlsIGRpcmVjdG9yeS4KCSAqIEBwYXJhbSBzdHJpbmcgJGVudHJ5IGRpcmVjdG9yeSBuYW1lCgkgKiBAcmV0dXJuIHRydWUgaWYgaXQgaXMgYSB0aHVtYm5haWwgZGlyZWN0b3J5LCBmYWxzZSBvdGhlcndpc2UKCSAqLwoJZnVuY3Rpb24gaXNUaHVtYkRpcigkZW50cnkpIAoJewoJCWlmKCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSA9PSBmYWxzZQoJCQl8fCBzdHJsZW4odHJpbSgkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZGlyJ10pKSA9PSAwKQoJCQlSZXR1cm4gZmFsc2U7CQkKCQllbHNlCgkJCVJldHVybiAoJGVudHJ5ID09ICR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSk7Cgl9CgoJLyoqCgkgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZmlsZSBpcyBhIHRtcCBmaWxlLgoJICogQHBhcmFtIHN0cmluZyAkZmlsZSBmaWxlIG5hbWUKCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGl0IGlzIGEgdG1wIGZpbGUsIGZhbHNlIG90aGVyd2lzZQoJICovCglmdW5jdGlvbiBpc1RtcEZpbGUoJGZpbGUpIAoJewoJCSRsZW4gPSBzdHJsZW4oJHRoaXMtPmNvbmZpZ1sndG1wX3ByZWZpeCddKTsKCQlpZihzdWJzdHIoJGZpbGUsMCwkbGVuKT09JHRoaXMtPmNvbmZpZ1sndG1wX3ByZWZpeCddKQoJCQlSZXR1cm4gdHJ1ZTsKCQllbHNlCgkJCVJldHVybiBmYWxzZTsJIAkKCX0KCgkvKioKCSAqIEZvciBhIGdpdmVuIGltYWdlIGZpbGUsIGdldCB0aGUgcmVzcGVjdGl2ZSB0aHVtYm5haWwgZmlsZW5hbWUKCSAqIG5vIGZpbGUgZXhpc3RlbmNlIGNoZWNrIGlzIGRvbmUuCgkgKiBAcGFyYW0gc3RyaW5nICRmdWxscGF0aGZpbGUgdGhlIGZ1bGwgcGF0aCB0byB0aGUgaW1hZ2UgZmlsZQoJICogQHJldHVybiBzdHJpbmcgb2YgdGhlIHRodW1ibmFpbCBmaWxlCgkgKi8KCWZ1bmN0aW9uIGdldFRodW1iTmFtZSgkZnVsbHBhdGhmaWxlKSAKCXsKCQkkcGF0aF9wYXJ0cyA9IHBhdGhpbmZvKCRmdWxscGF0aGZpbGUpOwoJCQoJCSR0aHVtYm5haWwgPSAkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfcHJlZml4J10uJHBhdGhfcGFydHNbJ2Jhc2VuYW1lJ107CgoJCWlmKCR0aGlzLT5jb25maWdbJ3NhZmVfbW9kZSddID09IHRydWUKCQkJfHwgc3RybGVuKHRyaW0oJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX2RpciddKSkgPT0gMCkKCQl7CgkKCQkJUmV0dXJuIEZpbGVzOjptYWtlRmlsZSgkcGF0aF9wYXJ0c1snZGlybmFtZSddLCR0aHVtYm5haWwpOwoJCX0KCQllbHNlCgkJewoJCQlpZihzdHJsZW4odHJpbSgkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZGlyJ10pKSA+IDApCgkJCXsKCQkJCSRwYXRoID0gRmlsZXM6Om1ha2VQYXRoKCRwYXRoX3BhcnRzWydkaXJuYW1lJ10sJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX2RpciddKTsKCQkJCWlmKCFpc19kaXIoJHBhdGgpKQoJCQkJCUZpbGVzOjpjcmVhdGVGb2xkZXIoJHBhdGgpOwoJCQkJUmV0dXJuIEZpbGVzOjptYWtlRmlsZSgkcGF0aCwkdGh1bWJuYWlsKTsKCQkJfQoJCQllbHNlIC8vc2hvdWxkIHRoaXMgZXZlciBoYXBwZW4/CgkJCXsKCQkJCS8vZXJyb3JfbG9nKCdJbWFnZU1hbmFnZXI6IEVycm9yIGluIGNyZWF0aW5nIHRodW1ibmFpbCBuYW1lJyk7CgkJCX0KCQl9Cgl9CgkKCS8qKgoJICogU2ltaWxhciB0byBnZXRUaHVtYk5hbWUsIGJ1dCByZXR1cm5zIHRoZSBVUkwsIGJhc2Ugb24gdGhlCgkgKiBnaXZlbiBiYXNlX3VybCBpbiBjb25maWcuaW5jLnBocAoJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIGltYWdlIGZpbGUgbmFtZSwgCgkgKiByZWxhdGl2ZSB0byB0aGUgYmFzZV9kaXIgcGF0aAoJICogQHJldHVybiBzdHJpbmcgdGhlIHVybCBvZiB0aGUgdGh1bWJuYWlsCgkgKi8KCWZ1bmN0aW9uIGdldFRodW1iVVJMKCRyZWxhdGl2ZSkgCgl7CgkJJHBhdGhfcGFydHMgPSBwYXRoaW5mbygkcmVsYXRpdmUpOwoJCSR0aHVtYm5haWwgPSAkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfcHJlZml4J10uJHBhdGhfcGFydHNbJ2Jhc2VuYW1lJ107CgkJaWYoJHBhdGhfcGFydHNbJ2Rpcm5hbWUnXT09J1xcJykgJHBhdGhfcGFydHNbJ2Rpcm5hbWUnXT0nLyc7CgoJCWlmKCR0aGlzLT5jb25maWdbJ3NhZmVfbW9kZSddID09IHRydWUKCQkJfHwgc3RybGVuKHRyaW0oJHRoaXMtPmNvbmZpZ1sndGh1bWJuYWlsX2RpciddKSkgPT0gMCkKCQl7CgoJCQkkcGF0aCA9IEZpbGVzOjptYWtlUGF0aCgkcGF0aF9wYXJ0c1snZGlybmFtZSddLCcnKTsKCQkJJHVybF9wYXRoID0gRmlsZXM6Om1ha2VQYXRoKCR0aGlzLT5nZXRCYXNlVVJMKCksICRwYXRoKTsKCQkJUmV0dXJuIEZpbGVzOjptYWtlRmlsZSgkdXJsX3BhdGgsJHRodW1ibmFpbCk7Ci8vCQkJUmV0dXJuIEZpbGVzOjptYWtlRmlsZSgkdGhpcy0+Z2V0QmFzZVVSTCgpLCR0aHVtYm5haWwpOwoJCX0KCQllbHNlCgkJewoJCQlpZihzdHJsZW4odHJpbSgkdGhpcy0+Y29uZmlnWyd0aHVtYm5haWxfZGlyJ10pKSA+IDApCgkJCXsKCgkJCQkkcGF0aCA9IEZpbGVzOjptYWtlUGF0aCgkcGF0aF9wYXJ0c1snZGlybmFtZSddLCR0aGlzLT5jb25maWdbJ3RodW1ibmFpbF9kaXInXSk7CgkJCQkkdXJsX3BhdGggPSBGaWxlczo6bWFrZVBhdGgoJHRoaXMtPmdldEJhc2VVUkwoKSwgJHBhdGgpOwoJCQkJUmV0dXJuIEZpbGVzOjptYWtlRmlsZSgkdXJsX3BhdGgsJHRodW1ibmFpbCk7CgkJCX0KCQkJZWxzZSAvL3Nob3VsZCB0aGlzIGV2ZXIgaGFwcGVuPwoJCQl7CgkJCQkvL2Vycm9yX2xvZygnSW1hZ2VNYW5hZ2VyOiBFcnJvciBpbiBjcmVhdGluZyB0aHVtYm5haWwgdXJsJyk7CgkJCX0KCgkJfQoJfQoKCS8qKgoJICogQ2hlY2sgaWYgdGhlIGdpdmVuIHBhdGggaXMgcGFydCBvZiB0aGUgc3ViZGlyZWN0b3JpZXMKCSAqIHVuZGVyIHRoZSBiYXNlX2Rpci4KCSAqIEBwYXJhbSBzdHJpbmcgJHBhdGggdGhlIHJlbGF0aXZlIHBhdGggdG8gYmUgY2hlY2tlZAoJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhlIHBhdGggZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UKCSAqLwoJZnVuY3Rpb24gdmFsaWRSZWxhdGl2ZVBhdGgoJHBhdGgpIAoJewoJCSRkaXJzID0gJHRoaXMtPmdldERpcnMoKTsKCQlpZigkcGF0aCA9PSAnLycgfHwgJHBhdGggPT0gJ1wvJykgcmV0dXJuIHRydWU7IC8vIHN0dXBpZCB3aW5kb3plLgoJCS8vY2hlY2sgdGhlIHBhdGggZ2l2ZW4gaW4gdGhlIHVybCBhZ2FpbnN0IHRoZSAKCQkvL2xpc3Qgb2YgcGF0aHMgaW4gdGhlIHN5c3RlbS4KCQlmb3IoJGkgPSAwOyAkaSA8IGNvdW50KCRkaXJzKTsgJGkrKykKCQl7CgkJCSRrZXkgPSBrZXkoJGRpcnMpOwoJCQkvL3dlIGZvdW5kIHRoZSBwYXRoCgkJCWlmKCRrZXkgPT0gJHBhdGgpIHsKCQkJICByZXR1cm4gdHJ1ZTsKCQkJfQoJCQoJCQluZXh0KCRkaXJzKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogUHJvY2VzcyB1cGxvYWRlZCBmaWxlcywgYXNzdW1lcyB0aGUgZmlsZSBpcyBpbiAKCSAqICRfRklMRVNbJ3VwbG9hZCddIGFuZCAkX1BPU1RbJ2RpciddIGlzIHNldC4KCSAqIFRoZSBkaXIgbXVzdCBiZSByZWxhdGl2ZSB0byB0aGUgYmFzZV9kaXIgYW5kIGV4aXN0cy4KCSAqIElmICd2YWxpZGF0ZV9pbWFnZXMnIGlzIHNldCB0byB0cnVlLCBvbmx5IGZpbGUgd2l0aAoJICogaW1hZ2UgZGltZW5zaW9ucyB3aWxsIGJlIGFjY2VwdGVkLgoJICogQHJldHVybiBudWxsCgkgKi8KCWZ1bmN0aW9uIHByb2Nlc3NVcGxvYWRzKCkgCgl7CgkJaWYoJHRoaXMtPmlzVmFsaWRCYXNlKCkgPT0gZmFsc2UpCgkJCXJldHVybjsKCgkJJHJlbGF0aXZlID0gbnVsbDsKCgkJaWYoaXNzZXQoJF9QT1NUWydkaXInXSkpIAoJCQkkcmVsYXRpdmUgPSByYXd1cmxkZWNvZGUoJF9QT1NUWydkaXInXSk7CgkJZWxzZQoJCQlyZXR1cm47CgoJCS8vY2hlY2sgZm9yIHRoZSBmaWxlLCBhbmQgbXVzdCBoYXZlIHZhbGlkIHJlbGF0aXZlIHBhdGgKCQlpZihpc3NldCgkX0ZJTEVTWyd1cGxvYWQnXSkgJiYgJHRoaXMtPnZhbGlkUmVsYXRpdmVQYXRoKCRyZWxhdGl2ZSkpCgkJewoJCQkkdGhpcy0+X3Byb2Nlc3NGaWxlcygkcmVsYXRpdmUsICRfRklMRVNbJ3VwbG9hZCddKTsKCQl9Cgl9CgoJLyoqCgkgKiBQcm9jZXNzIHVwbG9hZCBmaWxlcy4gVGhlIGZpbGUgbXVzdCBiZSBhbiAKCSAqIHVwbG9hZGVkIGZpbGUuIElmICd2YWxpZGF0ZV9pbWFnZXMnIGlzIHNldCB0bwoJICogdHJ1ZSwgb25seSBpbWFnZXMgd2lsbCBiZSBwcm9jZXNzZWQuIEFueSBkdXBsaWNhdGUKCSAqIGZpbGUgd2lsbCBiZSByZW5hbWVkLiBTZWUgRmlsZXM6OmNvcHlGaWxlIGZvciBkZXRhaWxzCgkgKiBvbiByZW5hbWluZy4KCSAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlIHRoZSByZWxhdGl2ZSBwYXRoIHdoZXJlIHRoZSBmaWxlCgkgKiBzaG91bGQgYmUgY29waWVkIHRvLgoJICogQHBhcmFtIGFycmF5ICRmaWxlIHRoZSB1cGxvYWRlZCBmaWxlIGZyb20gJF9GSUxFUwoJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhlIGZpbGUgd2FzIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHksIAoJICogZmFsc2Ugb3RoZXJ3aXNlCgkgKi8KCWZ1bmN0aW9uIF9wcm9jZXNzRmlsZXMoJHJlbGF0aXZlLCAkZmlsZSkKCXsKCSAgaWYoICEkdGhpcy0+dmFsaWRSZWxhdGl2ZVBhdGgoJHJlbGF0aXZlKSApIHJldHVybiBmYWxzZTsKCQkKCQlpZigkZmlsZVsnZXJyb3InXSE9MCkKCQl7CgkJCVJldHVybiBmYWxzZTsKCQl9CgoJCWlmKCFpc19maWxlKCRmaWxlWyd0bXBfbmFtZSddKSkKCQl7CgkJCVJldHVybiBmYWxzZTsKCQl9CgoJCWlmKCFpc191cGxvYWRlZF9maWxlKCRmaWxlWyd0bXBfbmFtZSddKSkKCQl7CgkJCUZpbGVzOjpkZWxGaWxlKCRmaWxlWyd0bXBfbmFtZSddKTsKCQkJUmV0dXJuIGZhbHNlOwoJCX0KCQkKCgkJaWYoJHRoaXMtPmNvbmZpZ1sndmFsaWRhdGVfaW1hZ2VzJ10gPT0gdHJ1ZSkKCQl7CgkJCSRpbWdJbmZvID0gQGdldEltYWdlU2l6ZSgkZmlsZVsndG1wX25hbWUnXSk7CgkJCWlmKCFpc19hcnJheSgkaW1nSW5mbykpCgkJCXsKCQkJCUZpbGVzOjpkZWxGaWxlKCRmaWxlWyd0bXBfbmFtZSddKTsKCQkJCVJldHVybiBmYWxzZTsKCQkJfQoJCX0KCgkJLy9ub3cgY29weSB0aGUgZmlsZQoJCSRwYXRoID0gRmlsZXM6Om1ha2VQYXRoKCR0aGlzLT5nZXRCYXNlRGlyKCksJHJlbGF0aXZlKTsKCgkJJGZpbGVzcGVjID0gcHJlZ19yZXBsYWNlKCcvXC5waHAvJywnJywkZmlsZVsnbmFtZSddKTsKCQkkcmVzdWx0ID0gRmlsZXM6OmNvcHlGaWxlKCRmaWxlWyd0bXBfbmFtZSddLCAkcGF0aCwgJGZpbGVzcGVjKTsKCgkJLy9ubyBjb3B5IGVycm9yCgkJaWYoIWlzX2ludCgkcmVzdWx0KSkKCQl7CgkJCUZpbGVzOjpkZWxGaWxlKCRmaWxlWyd0bXBfbmFtZSddKTsKCQkJUmV0dXJuIHRydWU7CgkJfQoKCQkvL2RlbGV0ZSB0bXAgZmlsZXMuCgkJRmlsZXM6OmRlbEZpbGUoJGZpbGVbJ3RtcF9uYW1lJ10pOwoJCVJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIEdldCB0aGUgVVJMIG9mIHRoZSByZWxhdGl2ZSBmaWxlLgoJICogYmFzaWNhbGx5IGFwcGVuZHMgdGhlIHJlbGF0aXZlIGZpbGUgdG8gdGhlIAoJICogYmFzZV91cmwgZ2l2ZW4gaW4gY29uZmlnLmluYy5waHAKCSAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlIGEgZmlsZSB0aGUgcmVsYXRpdmUgdG8gdGhlIGJhc2VfZGlyCgkgKiBAcmV0dXJuIHN0cmluZyB0aGUgVVJMIG9mIHRoZSByZWxhdGl2ZSBmaWxlLgoJICovCglmdW5jdGlvbiBnZXRGaWxlVVJMKCRyZWxhdGl2ZSkgCgl7CgkJUmV0dXJuIEZpbGVzOjptYWtlRmlsZSgkdGhpcy0+Z2V0QmFzZVVSTCgpLCRyZWxhdGl2ZSk7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGZ1bGxwYXRoIHRvIGEgcmVsYXRpdmUgZmlsZS4KCSAqIEBwYXJhbSBzdHJpbmcgJHJlbGF0aXZlIHRoZSByZWxhdGl2ZSBmaWxlLgoJICogQHJldHVybiBzdHJpbmcgdGhlIGZ1bGwgcGF0aCwgLmllLiB0aGUgYmFzZV9kaXIgKyByZWxhdGl2ZS4KCSAqLwoJZnVuY3Rpb24gZ2V0RnVsbFBhdGgoJHJlbGF0aXZlKSAKCXsKCQlSZXR1cm4gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRCYXNlRGlyKCksJHJlbGF0aXZlKTs7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGRlZmF1bHQgdGh1bWJuYWlsLgoJICogQHJldHVybiBzdHJpbmcgZGVmYXVsdCB0aHVtYm5haWwsIGVtcHR5IHN0cmluZyBpZiAKCSAqIHRoZSB0aHVtYm5haWwgZG9lc24ndCBleGlzdC4KCSAqLwoJZnVuY3Rpb24gZ2V0RGVmYXVsdFRodW1iKCkgCgl7CgkJaWYoaXNfZmlsZSgkdGhpcy0+Y29uZmlnWydkZWZhdWx0X3RodW1ibmFpbCddKSkKCQkJUmV0dXJuICR0aGlzLT5jb25maWdbJ2RlZmF1bHRfdGh1bWJuYWlsJ107CgkJZWxzZSAKCQkJUmV0dXJuICcnOwoJfQoKCgkvKioKCSAqIEdldCB0aGUgdGh1bWJuYWlsIHVybCB0byBiZSBkaXNwbGF5ZWQuIAoJICogSWYgdGhlIHRodW1ibmFpbCBleGlzdHMsIGFuZCBpdCBpcyB1cC10by1kYXRlCgkgKiB0aGUgdGh1bWJuYWlsIHVybCB3aWxsIGJlIHJldHVybnMuIElmIHRoZSAKCSAqIGZpbGUgaXMgbm90IGFuIGltYWdlLCBhIGRlZmF1bHQgaW1hZ2Ugd2lsbCBiZSByZXR1cm5lZC4KCSAqIElmIGl0IGlzIGFuIGltYWdlIGZpbGUsIGFuZCBubyB0aHVtYm5haWwgZXhpc3RzIG9yIAoJICogdGhlIHRodW1ibmFpbCBpcyBvdXQtb2YtZGF0ZSAoaS5lLiB0aGUgdGh1bWJuYWlsIAoJICogbW9kaWZpZWQgdGltZSBpcyBsZXNzIHRoYW4gdGhlIG9yaWdpbmFsIGZpbGUpCgkgKiB0aGVuIGEgdGh1bWJzLnBocD9pbWc9ZmlsZW5hbWUuanBnIGlzIHJldHVybmVkLgoJICogVGhlIHRodW1icy5waHAgdXJsIHdpbGwgZ2VuZXJhdGUgYSBuZXcgdGh1bWJuYWlsCgkgKiBvbiB0aGUgZmx5LiBJZiB0aGUgaW1hZ2UgaXMgbGVzcyB0aGFuIHRoZSBkaW1lbnNpb25zCgkgKiBvZiB0aGUgdGh1bWJuYWlscywgdGhlIGltYWdlIHdpbGwgYmUgZGlzcGxheSBpbnN0ZWFkLgoJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIGltYWdlIGZpbGUuCgkgKiBAcmV0dXJuIHN0cmluZyB0aGUgdXJsIG9mIHRoZSB0aHVtYm5haWwsIGJlIGl0CgkgKiBhY3R1YWxseSB0aHVtYm5haWwgb3IgYSBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlCgkgKiB0aHVtYm5haWwgb24gdGhlIGZseS4KCSAqLwoJZnVuY3Rpb24gZ2V0VGh1bWJuYWlsKCRyZWxhdGl2ZSkgCgl7CgkJJGZ1bGxwYXRoID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRCYXNlRGlyKCksJHJlbGF0aXZlKTsKCQkvL25vdCBhIGZpbGU/Pz8KCQlpZighaXNfZmlsZSgkZnVsbHBhdGgpKQoJCQlSZXR1cm4gJHRoaXMtPmdldERlZmF1bHRUaHVtYigpOwoKCQkkaW1nSW5mbyA9IEBnZXRJbWFnZVNpemUoJGZ1bGxwYXRoKTsKCQkKCQkvL25vdCBhbiBpbWFnZQoJCWlmKCFpc19hcnJheSgkaW1nSW5mbykpCgkJCVJldHVybiAkdGhpcy0+Z2V0RGVmYXVsdFRodW1iKCk7CgoJCSR0aHVtYm5haWwgPSAkdGhpcy0+Z2V0VGh1bWJOYW1lKCRmdWxscGF0aCk7CgkJCgkJLy9jaGVjayBmb3IgdGh1bWJuYWlscywgaWYgZXhpc3RzIGFuZAoJCS8vIGl0IGlzIHVwLXRvLWRhdGUsIHJldHVybiB0aGUgdGh1bWJuYWlsIHVybAoJCWlmKGlzX2ZpbGUoJHRodW1ibmFpbCkpCgkJewoJCQlpZihmaWxlbXRpbWUoJHRodW1ibmFpbCkgPj0gZmlsZW10aW1lKCRmdWxscGF0aCkpCgkJCQlSZXR1cm4gJHRoaXMtPmdldFRodW1iVVJMKCRyZWxhdGl2ZSk7CgkJfQoKCQkvL3dlbGwsIG5vIHRodW1ibmFpbCB3YXMgZm91bmQsIHNvIGFzayB0aGUgdGh1bWJzLnBocAoJCS8vdG8gZ2VuZXJhdGUgdGhlIHRodW1ibmFpbCBvbiB0aGUgZmx5LgoJCVJldHVybiAndGh1bWJzLnBocD9pbWc9Jy5yYXd1cmxlbmNvZGUoJHJlbGF0aXZlKTsKCX0KCgkvKioKCSAqIERlbGV0ZSBhbmQgc3BlY2lmaWVkIGZpbGVzLgoJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgZGVsZXRlLCBmYWxzZSBvdGhlcndpc2UKCSAqLwoJZnVuY3Rpb24gZGVsZXRlRmlsZXMoKSAKCXsKCSAgaWYoaXNzZXQoJF9HRVRbJ2RlbGYnXSkpCgkgICAgJHRoaXMtPl9kZWxGaWxlKHJhd3VybGRlY29kZSgkX0dFVFsnZGVsZiddKSk7Cgl9CgoJLyoqCgkgKiBEZWxldGUgYW5kIHNwZWNpZmllZCBkaXJlY3Rvcmllcy4KCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZSwgZmFsc2Ugb3RoZXJ3aXNlCgkgKi8KCWZ1bmN0aW9uIGRlbGV0ZURpcnMoKSAKCXsKCSAgaWYoaXNzZXQoJF9HRVRbJ2RlbGQnXSkgKSB7CgkgICAgcmV0dXJuICR0aGlzLT5fZGVsRGlyKHJhd3VybGRlY29kZSgkX0dFVFsnZGVsZCddKSk7CgkgIH0KCSAgcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogRGVsZXRlIHRoZSByZWxhdGl2ZSBmaWxlLCBhbmQgYW55IHRodW1ibmFpbHMuCgkgKiBAcGFyYW0gc3RyaW5nICRyZWxhdGl2ZSB0aGUgcmVsYXRpdmUgZmlsZS4KCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZWQsIGZhbHNlIG90aGVyd2lzZS4KCSAqLwoJZnVuY3Rpb24gX2RlbEZpbGUoJHJlbGF0aXZlKSAKCXsgCiAgICAgICAgICAkcjIgPSBGaWxlczo6Zml4UGF0aChkaXJuYW1lKCRyZWxhdGl2ZSkpOwoJICBpZiggISR0aGlzLT52YWxpZFJlbGF0aXZlUGF0aCgkcjIpICkgcmV0dXJuIGZhbHNlOwoJICAKCSAgJGZ1bGxwYXRoID0gRmlsZXM6Om1ha2VGaWxlKCR0aGlzLT5nZXRCYXNlRGlyKCksJHJlbGF0aXZlKTsKCQkKCQkvL2NoZWNrIHRoYXQgdGhlIGZpbGUgaXMgYW4gaW1hZ2UKCQlpZigkdGhpcy0+Y29uZmlnWyd2YWxpZGF0ZV9pbWFnZXMnXSA9PSB0cnVlKQoJCXsKCQkJaWYoIWlzX2FycmF5KCR0aGlzLT5nZXRJbWFnZUluZm8oJGZ1bGxwYXRoKSkpCgkJCQlyZXR1cm4gZmFsc2U7IC8vaG1tbSBub3QgYW4gSW1hZ2UhIT8/PwoJCX0KCgkJJHRodW1ibmFpbCA9ICR0aGlzLT5nZXRUaHVtYk5hbWUoJGZ1bGxwYXRoKTsKCgkJaWYoRmlsZXM6OmRlbEZpbGUoJGZ1bGxwYXRoKSkKCQkJUmV0dXJuIEZpbGVzOjpkZWxGaWxlKCR0aHVtYm5haWwpOwoJCWVsc2UKCQkJUmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogRGVsZXRlIGRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5LgoJICogQHBhcmFtIHN0cmluZyAkcmVsYXRpdmUgdGhlIHJlbGF0aXZlIHBhdGggdG8gYmUgZGVsZXRlZC4KCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIGRlbGV0ZWQsIGZhbHNlIG90aGVyd2lzZS4KCSAqLwoJZnVuY3Rpb24gX2RlbERpcigkcmVsYXRpdmUpIAoJewoJICBpZiggISR0aGlzLT52YWxpZFJlbGF0aXZlUGF0aCgkcmVsYXRpdmUpICkgcmV0dXJuIGZhbHNlOwoJCSRmdWxscGF0aCA9IEZpbGVzOjptYWtlUGF0aCgkdGhpcy0+Z2V0QmFzZURpcigpLCRyZWxhdGl2ZSk7CgkJaWYoJHRoaXMtPmNvdW50RmlsZXMoJGZ1bGxwYXRoKSA8PSAwKQoJCQlyZXR1cm4gRmlsZXM6OmRlbEZvbGRlcigkZnVsbHBhdGgsdHJ1ZSk7IC8vZGVsZXRlIHJlY3Vyc2l2ZWx5LgoJCWVsc2UKCQkJUmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogQ3JlYXRlIG5ldyBkaXJlY3Rvcmllcy4KCSAqIElmIGluIHNhZmVfbW9kZSwgbm90aGluZyBoYXBwZW5zLgoJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgY3JlYXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLgoJICovCglmdW5jdGlvbiBwcm9jZXNzTmV3RGlyKCkgCgl7CgkJaWYoJHRoaXMtPmNvbmZpZ1snc2FmZV9tb2RlJ10gPT0gdHJ1ZSkKCQkJUmV0dXJuIGZhbHNlOwoKCQlpZihpc3NldCgkX0dFVFsnbmV3RGlyJ10pICYmIGlzc2V0KCRfR0VUWydkaXInXSkpCgkJewoJCQkkbmV3RGlyID0gcmF3dXJsZGVjb2RlKCRfR0VUWyduZXdEaXInXSk7CgkJCSRkaXIgPSByYXd1cmxkZWNvZGUoJF9HRVRbJ2RpciddKTsKCQkJJHBhdGggPSBGaWxlczo6bWFrZVBhdGgoJHRoaXMtPmdldEJhc2VEaXIoKSwkZGlyKTsKCQkJJGZ1bGxwYXRoID0gRmlsZXM6Om1ha2VQYXRoKCRwYXRoLCBGaWxlczo6ZXNjYXBlKCRuZXdEaXIpKTsKCQkJaWYoaXNfZGlyKCRmdWxscGF0aCkpCgkJCQlSZXR1cm4gZmFsc2U7CgoJCQlSZXR1cm4gRmlsZXM6OmNyZWF0ZUZvbGRlcigkZnVsbHBhdGgpOwoJCX0KCX0KCgkvKioKCSAqIERvIHNvbWUgZ3JhcGhpYyBsaWJyYXJ5IG1ldGhvZCBjaGVja2luZ3MKCSAqIEBwYXJhbSBzdHJpbmcgJGxpYnJhcnkgdGhlIGdyYXBoaWNzIGxpYnJhcnksIEdELCBOZXRQQk0sIG9yIElNLgoJICogQHBhcmFtIHN0cmluZyAkbWV0aG9kIHRoZSBtZXRob2QgdG8gY2hlY2suCgkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpZiBhYmxlLCBmYWxzZSBvdGhlcndpc2UuCgkgKi8KCWZ1bmN0aW9uIHZhbGlkR3JhcGhpY01ldGhvZHMoJGxpYnJhcnksJG1ldGhvZCkKCXsKCQlzd2l0Y2ggKCRsaWJyYXJ5KQoJCXsKCQkJY2FzZSAnR0QnOgoJCQkJcmV0dXJuICR0aGlzLT5fY2hlY2tHRExpYnJhcnkoJG1ldGhvZCk7CgkJCQlicmVhazsKCQkJY2FzZSAnTmV0UEJNJzoKCQkJCXJldHVybiAkdGhpcy0+X2NoZWNrTmV0UEJNTGlicmFyeSgkbWV0aG9kKTsKCQkJCWJyZWFrOwoJCQljYXNlICdJTSc6CgkJCQlyZXR1cm4gJHRoaXMtPl9jaGVja0lNTGlicmFyeSgkbWV0aG9kKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCWZ1bmN0aW9uIF9jaGVja0lNTGlicmFyeSgkbWV0aG9kKQoJewoJCS8vSW1hZ2VNYWdpY2sgZ29lcyB0aHJvdWdodCAxIHNpbmdsZSBleGVjdXRhYmxlCgkJaWYoaXNfZmlsZShGaWxlczo6Zml4UGF0aChJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEgpLidjb252ZXJ0JykpCgkJCXJldHVybiB0cnVlOwoJCWVsc2UKCQkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogQ2hlY2sgdGhlIEdEIGxpYnJhcnkgZnVuY3Rpb25hbGl0eS4KCSAqIEBwYXJhbSBzdHJpbmcgJGxpYnJhcnkgdGhlIGdyYXBoaWNzIGxpYnJhcnksIEdELCBOZXRQQk0sIG9yIElNLgoJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgYWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLgoJICovCglmdW5jdGlvbiBfY2hlY2tHRExpYnJhcnkoJG1ldGhvZCkKCXsKCQkkZXJyb3JzID0gYXJyYXkoKTsKCQlzd2l0Y2goJG1ldGhvZCkKCQl7CgkJCWNhc2UgJ2NyZWF0ZSc6CgkJCQkkZXJyb3JzWydjcmVhdGVqcGVnJ10gPSBmdW5jdGlvbl9leGlzdHMoJ2ltYWdlY3JlYXRlZnJvbWpwZWcnKTsKCQkJCSRlcnJvcnNbJ2NyZWF0ZWdpZiddID0gZnVuY3Rpb25fZXhpc3RzKCdpbWFnZWNyZWF0ZWZyb21naWYnKTsKCQkJCSRlcnJvcnNbJ2NyZWF0ZXBuZyddID0gZnVuY3Rpb25fZXhpc3RzKCdpbWFnZWNyZWF0ZWZyb21wbmcnKTsKCQkJCWJyZWFrOwoJCQljYXNlICdtb2RpZnknOgoJCQkJJGVycm9yc1snY3JlYXRlJ10gPSBmdW5jdGlvbl9leGlzdHMoJ0ltYWdlQ3JlYXRlVHJ1ZUNvbG9yJykgfHwgZnVuY3Rpb25fZXhpc3RzKCdJbWFnZUNyZWF0ZScpOwoJCQkJJGVycm9yc1snY29weSddID0gZnVuY3Rpb25fZXhpc3RzKCdJbWFnZUNvcHlSZXNhbXBsZWQnKSB8fCBmdW5jdGlvbl9leGlzdHMoJ0ltYWdlQ29weVJlc2l6ZWQnKTsKCQkJCWJyZWFrOwoJCQljYXNlICdzYXZlJzoKCQkJCSRlcnJvcnNbJ3NhdmVqcGVnJ10gPSBmdW5jdGlvbl9leGlzdHMoJ2ltYWdlanBlZycpOwoJCQkJJGVycm9yc1snc2F2ZWdpZiddID0gZnVuY3Rpb25fZXhpc3RzKCdpbWFnZWdpZicpOwoJCQkJJGVycm9yc1snc2F2ZXBuZyddID0gZnVuY3Rpb25fZXhpc3RzKCdpbWFnZXBuZycpOwoJCQkJYnJlYWs7CgkJfQoKCQlyZXR1cm4gJGVycm9yczsKCX0KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/NetPBM.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqIFRpdGxlLi4uLi4uLi4uOiAgTmV0UEJNIERyaXZlcgoqKiBWZXJzaW9uLi4uLi4uLjogIDEuMAoqKiBBdXRob3IuLi4uLi4uLjogIFhpYW5nIFdlaSBaSFVPIDx3ZWlAemh1by5vcmc+CioqIEZpbGVuYW1lLi4uLi4uOiAgTmV0UEJNLnBocAoqKiBMYXN0IGNoYW5nZWQuLjogIDMwIEF1ZyAyMDAzIAoqKiBOb3Rlcy4uLi4uLi4uLjogIE9yZ2luYWwgaXMgZnJvbSBQRUFSCioqLwoKLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi8vIHwgUEhQIFZlcnNpb24gNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLy8gfCBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMiBUaGUgUEhQIEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwovLyB8IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDIuMDIgb2YgdGhlIFBIUCBsaWNlbnNlLCAgICAgIHwKLy8gfCB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRSwgYW5kIGlzICAgICAgICB8Ci8vIHwgYXZhaWxhYmxlIGF0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyB8IGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzJfMDIudHh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gfCBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgUEhQIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gICB8Ci8vIHwgb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhIG5vdGUgdG8gICAgICAgICAgfAovLyB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwKLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi8vIHwgQXV0aG9yczogUGV0ZXIgQm93eWVyIDxwZXRlckBtYXBsZWRlc2lnbi5jby51az4gICAgICAgICAgICAgICAgICAgICAgfAovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLy8KLy8gJElkOiBOZXRQQk0ucGhwIDY4NzkgMjAxMS0wMS0yOSAxODoyNzowOFogY2FsZ3V5MTAwMCAkCi8vCi8vIEltYWdlIFRyYW5zZm9ybWF0aW9uIGludGVyZmFjZSB1c2luZyBjb21tYW5kIGxpbmUgTmV0UEJNCgpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuIi9UcmFuc2Zvcm0ucGhwIik7CgpDbGFzcyBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX05ldFBCTSBleHRlbmRzIEltYWdlX1RyYW5zZm9ybQp7CgogICAgLyoqCiAgICAgKiBhc3NvY2lhdGl2ZSBhcnJheSBjb21tYW5kcyB0byBiZSBleGVjdXRlZAogICAgICogQHZhciBhcnJheQogICAgICovCiAgICB2YXIgJGNvbW1hbmQgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogQ2xhc3MgQ29uc3RydWN0b3IKICAgICAqLwogICAgZnVuY3Rpb24gSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9OZXRQQk0oKQogICAgewogICAgICAgICR0aGlzLT51aWQgPSBtZDUoJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10pOwogICAgICAgICAgICAKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gLy8gRW5kIGZ1bmN0aW9uIEltYWdlX05ldFBCTQoKICAgIC8qKgogICAgICogTG9hZCBpbWFnZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgZmlsZW5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkIG5vbmUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcgogICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkKICAgICAqLwogICAgZnVuY3Rpb24gbG9hZCgkaW1hZ2UpCiAgICB7CiAgICAgICAgLy9lY2hvICRpbWFnZTsKICAgICAgICAkdGhpcy0+aW1hZ2UgPSAkaW1hZ2U7CiAgICAgICAgJHRoaXMtPl9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOwogICAgfSAvLyBFbmQgbG9hZAoKICAgIC8qKgogICAgICogUmVzaXplcyB0aGUgaW1hZ2UKICAgICAqCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqIEBzZWUgUEVBUjo6aXNFcnJvcigpCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9yZXNpemUoJG5ld194LCAkbmV3X3kpCiAgICB7CiAgICAgICAgLy8gdGhlcmUncyBubyB0ZWNobmljYWwgcmVhc29uIHdoeSByZXNpemUgY2FuJ3QgYmUgY2FsbGVkIG11bHRpcGxlCiAgICAgICAgLy8gdGltZXMuLi5pdCdzIGp1c3Qgc2lsbHkgdG8gZG8gc28KCiAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbm1zY2FsZSAtd2lkdGggJG5ld194IC1oZWlnaHQgJG5ld195IjsKCiAgICAgICAgJHRoaXMtPl9zZXRfbmV3X3goJG5ld194KTsKICAgICAgICAkdGhpcy0+X3NldF9uZXdfeSgkbmV3X3kpOwogICAgfSAvLyBFbmQgcmVzaXplCgogICAgLyoqCiAgICAgKiBDcm9wIHRoZSBpbWFnZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfeCBsZWZ0IGNvbHVtbiBvZiB0aGUgaW1hZ2UKICAgICAqIEBwYXJhbSBpbnQgJGNyb3BfeSB0b3Agcm93IG9mIHRoZSBpbWFnZQogICAgICogQHBhcmFtIGludCAkY3JvcF93aWR0aCBuZXcgY3JvcHBlZCBpbWFnZSB3aWR0aAogICAgICogQHBhcmFtIGludCAkY3JvcF9oZWlnaHQgbmV3IGNyb3BwZWQgaW1hZ2UgaGVpZ2h0CiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyb3AoJGNyb3BfeCwgJGNyb3BfeSwgJGNyb3Bfd2lkdGgsICRjcm9wX2hlaWdodCkgCiAgICB7CiAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG5tY3V0IC1sZWZ0ICRjcm9wX3ggLXRvcCAkY3JvcF95IC13aWR0aCAkY3JvcF93aWR0aCAtaGVpZ2h0ICRjcm9wX2hlaWdodCI7CiAgICB9CgogICAgLyoqCiAgICAgKiBSb3RhdGVzIHRoZSBpbWFnZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGFuZ2xlIFRoZSBhbmdsZSB0byByb3RhdGUgdGhlIGltYWdlIHRocm91Z2gKICAgICAqLwogICAgZnVuY3Rpb24gcm90YXRlKCRhbmdsZSkKICAgIHsKICAgICAgICAkYW5nbGUgPSAtMSpmbG9hdHZhbCgkYW5nbGUpOwoKICAgICAgICBpZigkYW5nbGUgPiA5MCkKICAgICAgICB7ICAgCiAgICAgICAgICAgICR0aGlzLT5jb21tYW5kW10gPSBJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLiAicG5tcm90YXRlIC1ub2FudGlhbGlhcyA5MCI7CiAgICAgICAgICAgICR0aGlzLT5yb3RhdGUoLTEqKCRhbmdsZS05MCkpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgkYW5nbGUgPCAtOTApCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gSU1BR0VfVFJBTlNGT1JNX0xJQl9QQVRIIC4gInBubXJvdGF0ZSAtbm9hbnRpYWxpYXMgLTkwIjsKICAgICAgICAgICAgJHRoaXMtPnJvdGF0ZSgtMSooJGFuZ2xlKzkwKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICJwbm1yb3RhdGUgLW5vYW50aWFsaWFzICRhbmdsZSI7CiAgICB9IC8vIEVuZCByb3RhdGUKCiAgICAvKioKICAgICAqIEZsaXAgdGhlIGltYWdlIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5CiAgICAgKgogICAgICogQHBhcmFtIGJvb2xlYW4gJGhvcml6b250YWwgdHJ1ZSBpZiBob3Jpem9udGFsIGZsaXAsIHZlcnRpY2FsIG90aGVyd2lzZQogICAgICovCiAgICBmdW5jdGlvbiBmbGlwKCRob3Jpem9udGFsKSAKICAgIHsKICAgICAgICBpZigkaG9yaXpvbnRhbCkgCiAgICAgICAgICAgICR0aGlzLT5jb21tYW5kW10gPSBJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLiAicG5tZmxpcCAtbHIiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICJwbm1mbGlwIC10YiI7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGp1c3QgdGhlIGltYWdlIGdhbW1hCiAgICAgKgogICAgICogQHBhcmFtIGZsb2F0ICRvdXRwdXRnYW1tYQogICAgICoKICAgICAqIEByZXR1cm4gbm9uZQogICAgICovCiAgICBmdW5jdGlvbiBnYW1tYSgkb3V0cHV0Z2FtbWEgPSAxLjApIHsKICAgICAgICAkdGhpcy0+Y29tbWFuZFsxM10gPSBJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLiAicG5tZ2FtbWEgJG91dHB1dGdhbW1hIjsKICAgIH0KCiAgICAvKioKICAgICAqIGFkZHMgdGV4dCB0byBhbiBpbWFnZQogICAgICoKICAgICAqIEBwYXJhbSAgIGFycmF5ICAgb3B0aW9ucyAgICAgQXJyYXkgY29udGFpbnMgb3B0aW9ucwogICAgICogICAgICAgICAgICAgYXJyYXkoCiAgICAgKiAgICAgICAgICAgICAgICAgICd0ZXh0JyAgICAgICAgICAvLyBUaGUgc3RyaW5nIHRvIGRyYXcKICAgICAqICAgICAgICAgICAgICAgICAgJ3gnICAgICAgICAgICAgIC8vIEhvcml6b250YWwgcG9zaXRpb24KICAgICAqICAgICAgICAgICAgICAgICAgJ3knICAgICAgICAgICAgIC8vIFZlcnRpY2FsIFBvc2l0aW9uCiAgICAgKiAgICAgICAgICAgICAgICAgICdDb2xvcicgICAgICAgICAvLyBGb250IGNvbG9yCiAgICAgKiAgICAgICAgICAgICAgICAgICdmb250JyAgICAgICAgICAvLyBGb250IHRvIGJlIHVzZWQKICAgICAqICAgICAgICAgICAgICAgICAgJ3NpemUnICAgICAgICAgIC8vIFNpemUgb2YgdGhlIGZvbnRzIGluIHBpeGVsCiAgICAgKiAgICAgICAgICAgICAgICAgICdyZXNpemVfZmlyc3QnICAvLyBUZWxsIGlmIHRoZSBpbWFnZSBoYXMgdG8gYmUgcmVzaXplZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIGRyYXdpbmcgdGhlIHRleHQKICAgICAqICAgICAgICAgICAgICAgICAgICkKICAgICAqCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqLwogICAgZnVuY3Rpb24gYWRkVGV4dCgkcGFyYW1zKQogICAgewogICAgICAgICRkZWZhdWx0X3BhcmFtcyA9IGFycmF5KCd0ZXh0JyA9PiAnVGhpcyBpcyBUZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneCcgPT4gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3knID0+IDIwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcicgPT4gJ3JlZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQnID0+ICdBcmlhbC50dGYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiAnMTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZScgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzaXplX2ZpcnN0JyA9PiBmYWxzZSk7CiAgICAgICAgLy8gd2UgaWdub3JlICdyZXNpemVfZmlyc3QnIHNpbmNlIHRoZSBtb3JlIGxvZ2ljYWwgYXBwcm9hY2ggd291bGQgYmUKICAgICAgICAvLyBmb3IgdGhlIHVzZXIgdG8ganVzdCBjYWxsICR0aGlzLT5fcmVzaXplKCkgX2ZpcnN0XyA7KQogICAgICAgIGV4dHJhY3QoYXJyYXlfbWVyZ2UoJGRlZmF1bHRfcGFyYW1zLCAkcGFyYW1zKSk7CiAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9ICJwcG1sYWJlbCAtYW5nbGUgJGFuZ2xlIC1jb2xvdXIgJGNvbG9yIC1zaXplICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgLiIkc2l6ZSAteCAkeCAteSAiLiR5KyRzaXplLiIgLXRleHQgXCIkdGV4dFwiIjsKICAgIH0gLy8gRW5kIGFkZFRleHQKCiAgICBmdW5jdGlvbiBfcG9zdFByb2Nlc3MoJHR5cGUsICRxdWFsaXR5LCAkc2F2ZV90eXBlKQogICAgewogICAgICAgICR0eXBlID0gaXNfbnVsbCgkdHlwZSkgfHwgJHR5cGU9PScnPyAkdGhpcy0+dHlwZSA6ICR0eXBlOwogICAgICAgICRzYXZlX3R5cGUgPSBpc19udWxsKCRzYXZlX3R5cGUpIHx8ICRzYXZlX3R5cGU9PScnPyAkdGhpcy0+dHlwZSA6ICRzYXZlX3R5cGU7CiAgICAgICAgLy9lY2hvICJUWVBFOiIuICR0aGlzLT50eXBlOwogICAgICAgIGFycmF5X3Vuc2hpZnQoJHRoaXMtPmNvbW1hbmQsIElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSAogICAgICAgICAgICAgICAgICAgICAgLiAkdHlwZS4ndG9wbm0gJy4gJHRoaXMtPmltYWdlKTsKICAgICAgICAkYXJnID0gJyc7CiAgICAgICAgc3dpdGNoKHN0cnRvbG93ZXIoJHNhdmVfdHlwZSkpewogICAgICAgICAgICBjYXNlICdnaWYnOgogICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICJwcG1xdWFudCAyNTYiOwogICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICJwcG10byRzYXZlX3R5cGUiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2pwZyc6CiAgICAgICAgICAgIGNhc2UgJ2pwZWcnOgogICAgICAgICAgICAgICAgJGFyZyA9ICItLXF1YWxpdHk9JHF1YWxpdHkiOwogICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9IElNQUdFX1RSQU5TRk9STV9MSUJfUEFUSCAuICJwcG10byRzYXZlX3R5cGUgJGFyZyI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICR0aGlzLT5jb21tYW5kW10gPSBJTUFHRV9UUkFOU0ZPUk1fTElCX1BBVEggLiAicG5tdG8kc2F2ZV90eXBlICRhcmciOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSAvLyBzd2l0Y2gKICAgICAgICByZXR1cm4gaW1wbG9kZSgnfCcsICR0aGlzLT5jb21tYW5kKTsKICAgIH0gCgogICAgLyoqCiAgICAgKiBTYXZlIHRoZSBpbWFnZSBmaWxlCiAgICAgKgogICAgICogQHBhcmFtICRmaWxlbmFtZSBzdHJpbmcgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd3JpdGUgdG8KICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgKGpwZWcscG5nLi4uKTsKICAgICAqIEBwYXJhbSBpbnQgJHF1YWxpdHkgNzUKICAgICAqIEByZXR1cm4gbm9uZQogICAgICovCiAgICBmdW5jdGlvbiBzYXZlKCRmaWxlbmFtZSwgJHR5cGU9bnVsbCwgJHF1YWxpdHkgPSA4NSkKICAgIHsKICAgICAgICAkY21kID0gJHRoaXMtPl9wb3N0UHJvY2VzcygnJywgJHF1YWxpdHksICR0eXBlKSAuICI+JGZpbGVuYW1lIjsKICAgICAgICAgICAgCgkJLy9pZiB3ZSBoYXZlIHdpbmRvd3Mgc2VydmVyCiAgICAgICAgaWYoaXNzZXQoJF9FTlZbJ09TJ10pICYmIGVyZWdpKCdAd2luZG93QCcsJF9FTlZbJ09TJ10pKQoJCQkkY21kID0gc3RyX3JlcGxhY2UoJy8nLCdcXCcsJGNtZCk7CiAgICAgICAgLy9lY2hvICRjbWQuIiMjIjsKICAgICAgICAkb3V0cHV0ID0gc3lzdGVtKCRjbWQpOwoJCWVycm9yX2xvZygnTkVUUEJNOiAnLiRjbWQpOwoJCS8vZXJyb3JfbG9nKCRvdXRwdXQpOwogICAgICAgICR0aGlzLT5jb21tYW5kID0gYXJyYXkoKTsKICAgIH0gLy8gRW5kIHNhdmUKCgogICAgLyoqCiAgICAgKiBEaXNwbGF5IGltYWdlIHdpdGhvdXQgc2F2aW5nIGFuZCBsb3NlIGNoYW5nZXMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlIChqcGVnLHBuZy4uLik7CiAgICAgKiBAcGFyYW0gaW50ICRxdWFsaXR5IDc1CiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqLwogICAgZnVuY3Rpb24gZGlzcGxheSgkdHlwZSA9IG51bGwsICRxdWFsaXR5ID0gNzUpCiAgICB7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LXR5cGU6IGltYWdlLycgLiAkdHlwZSk7CiAgICAgICAgJGNtZCA9ICR0aGlzLT5fcG9zdFByb2Nlc3MoJHR5cGUsICRxdWFsaXR5KTsKICAgICAgICAKICAgICAgICBwYXNzdGhydSgkY21kKTsKICAgICAgICAkdGhpcy0+Y29tbWFuZCA9IGFycmF5KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXN0cm95IGltYWdlIGhhbmRsZQogICAgICoKICAgICAqIEByZXR1cm4gbm9uZQogICAgICovCiAgICBmdW5jdGlvbiBmcmVlKCkKICAgIHsKICAgICAgICAvLyB0aGVyZSBpcyBubyBpbWFnZSBoYW5kbGUgaGVyZQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKCn0gLy8gRW5kIGNsYXNzIE5ldFBCTQo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/package.xml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KPCFET0NUWVBFIHBhY2thZ2UgU1lTVEVNICJodHRwOi8vcGVhci5waHAubmV0L2R0ZC9wYWNrYWdlLTEuMCI+CjxwYWNrYWdlIHZlcnNpb249IjEuMCI+CiAgPG5hbWU+SW1hZ2VfVHJhbnNmb3JtPC9uYW1lPgogIDxzdW1tYXJ5PlByb3ZpZGVzIGEgc3RhbmRhcmQgaW50ZXJmYWNlIHRvIG1hbmlwdWxhdGUgaW1hZ2VzIHVzaW5nIGRpZmZlcmVudCBsaWJyYXJpZXM8L3N1bW1hcnk+CiAgPGRlc2NyaXB0aW9uPlRoaXMgcGFja2FnZSB3YXMgd3JpdHRlbiB0byBwcm92aWRlIGEgc2ltcGxlciBhbmQgY3Jvc3MtbGlicmFyeSBpbnRlcmZhY2UgdG8gZG9pbmcgaW1hZ2UgdHJhbnNmb3JtYXRpb25zIGFuZCBtYW5pcHVsYXRpb25zLgpJdCBwcm92aWRlcyA6CgoqIHN1cHBvcnQgZm9yIEdELCBJbWFnZU1hZ2ljaywgSW1hZ2ljayBhbmQgTmV0UEJNCiogZmlsZXMgcmVsYXRlZCBmdW5jdGlvbnMKKiBhZGRUZXh0CiogU2NhbGUgKGJ5IGxlbmd0aCwgcGVyY2VudGFnZSwgbWF4aW11bSBYL1kpCiogUmVzaXplCiogUm90YXRlIChjdXN0b20gYW5nbGUpCiogQWRkIGJvcmRlciAoc29vbikKKiBBZGQgc2hhZG93IChzb29uKTwvZGVzY3JpcHRpb24+CiAgPG1haW50YWluZXJzPgogICAgPG1haW50YWluZXI+CiAgICAgIDx1c2VyPnJleXdvYjwvdXNlcj4KICAgICAgPG5hbWU+UGV0ZXIgQm93eWVyPC9uYW1lPgogICAgICA8ZW1haWw+cGV0ZXJAbWFwbGVkZXNpZ24uY28udWs8L2VtYWlsPgogICAgICA8cm9sZT5sZWFkPC9yb2xlPgogICAgPC9tYWludGFpbmVyPgogICAgPG1haW50YWluZXI+CiAgICAgIDx1c2VyPnBham95ZTwvdXNlcj4KICAgICAgPG5hbWU+UGllcnJlLUFsYWluIEpveWU8L25hbWU+CiAgICAgIDxlbWFpbD5wYWpAcGVhcmZyLm9yZzwvZW1haWw+CiAgICAgIDxyb2xlPmxlYWQ8L3JvbGU+CiAgICA8L21haW50YWluZXI+CiAgPC9tYWludGFpbmVycz4KICA8cmVsZWFzZT4KICAgIDx2ZXJzaW9uPjAuODwvdmVyc2lvbj4KICAgIDxkYXRlPjIwMDMtMTItMjk8L2RhdGU+CiAgICA8bGljZW5zZT5QSFAgTGljZW5zZTwvbGljZW5zZT4KICAgIDxzdGF0ZT5hbHBoYTwvc3RhdGU+CiAgICA8bm90ZXM+U2Vjb25kIHB1YmxpYyByZWxlYXNlLCBob3BlZnVsbHkgbXVjaCBtb3JlIHN0YWJsZS4gIEFQSSBuZWFybHkgZml4ZWQuICBOT1QgTkVDRVNTQVJJTFkgQ09NUEFUSUJMRSBXSVRIIDAuMSAtIGJlIHdhcm5lZCE8L25vdGVzPgogICAgPGZpbGVsaXN0PgogICAgICA8ZmlsZSByb2xlPSJwaHAiIGJhc2VpbnN0YWxsZGlyPSJJbWFnZSIgbmFtZT0iVHJhbnNmb3JtLnBocCIvPgogICAgICA8ZmlsZSByb2xlPSJwaHAiIGJhc2VpbnN0YWxsZGlyPSJJbWFnZS9UcmFuc2Zvcm0iIG5hbWU9IkRyaXZlclxHRC5waHAiLz4KICAgICAgPGZpbGUgcm9sZT0icGhwIiBiYXNlaW5zdGFsbGRpcj0iSW1hZ2UvVHJhbnNmb3JtIiBuYW1lPSJEcml2ZXJcR0QxLnBocCIvPgogICAgICA8ZmlsZSByb2xlPSJwaHAiIGJhc2VpbnN0YWxsZGlyPSJJbWFnZS9UcmFuc2Zvcm0iIG5hbWU9IkRyaXZlclxJTS5waHAiLz4KICAgICAgPGZpbGUgcm9sZT0icGhwIiBiYXNlaW5zdGFsbGRpcj0iSW1hZ2UvVHJhbnNmb3JtIiBuYW1lPSJEcml2ZXJcTmV0UEJNLnBocCIvPgogICAgICA8ZmlsZSByb2xlPSJwaHAiIGJhc2VpbnN0YWxsZGlyPSJJbWFnZS9UcmFuc2Zvcm0iIG5hbWU9IkRyaXZlclxJbWFnaWNrLnBocCIvPgogICAgICA8ZmlsZSByb2xlPSJwaHAiIGJhc2VpbnN0YWxsZGlyPSJJbWFnZS9UcmFuc2Zvcm0iIG5hbWU9IkRyaXZlclxJbWFnaWNrMi5waHAiLz4KICAgICAgPGZpbGUgcm9sZT0icGhwIiBiYXNlaW5zdGFsbGRpcj0iSW1hZ2UvVHJhbnNmb3JtIiBuYW1lPSJEcml2ZXJcSW1saWIucGhwIi8+CiAgICAgIDxmaWxlIHJvbGU9InBocCIgYmFzZWluc3RhbGxkaXI9IkltYWdlL1RyYW5zZm9ybSIgbmFtZT0iRHJpdmVyXENvbG9yc0RlZnMucGhwIi8+CiAgICA8L2ZpbGVsaXN0PgogIDwvcmVsZWFzZT4KPC9wYWNrYWdlPgo=]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/Thumbnail.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENyZWF0ZSB0aHVtYm5haWxzLgogKiBAYXV0aG9yICRBdXRob3I6IFdlaSBaaHVvICQKICogQHZlcnNpb24gJElkOiBUaHVtYm5haWwucGhwIDQxNjkgMjAwNy0wOS0yMSAwNjoyODo0OVogc2lsbWFyaWxsaW9uICQKICogQHBhY2thZ2UgSW1hZ2VNYW5hZ2VyCiAqLwoKCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL1RyYW5zZm9ybS5waHAnKTsKCi8qKgogKiBUaHVtYm5haWwgY3JlYXRpb24KICogQGF1dGhvciAkQXV0aG9yOiBXZWkgWmh1byAkCiAqIEB2ZXJzaW9uICRJZDogVGh1bWJuYWlsLnBocCA0MTY5IDIwMDctMDktMjEgMDY6Mjg6NDlaIHNpbG1hcmlsbGlvbiAkCiAqIEBwYWNrYWdlIEltYWdlTWFuYWdlcgogKiBAc3VicGFja2FnZSBJbWFnZXMKICovCmNsYXNzIFRodW1ibmFpbCAKewoJLyoqCgkgKiBHcmFwaGljcyBkcml2ZXIsIEdELCBOZXRQQk0gb3IgSW1hZ2VNYWdpY2suCgkgKi8KCXZhciAkZHJpdmVyOwoKCS8qKgoJICogVGh1bWJuYWlsIGRlZmF1bHQgd2lkdGguCgkgKi8KCXZhciAkd2lkdGggPSA5NjsKCgkvKioKCSAqIFRodW1ibmFpbCBkZWZhdWx0IGhlaWdodC4KCSAqLwoJdmFyICRoZWlnaHQgPSA5NjsKCgkvKioKCSAqIFRodW1ibmFpbCBkZWZhdWx0IEpQRUcgcXVhbGl0eS4KCSAqLwoJdmFyICRxdWFsaXR5ID0gODU7CgoJLyoqCgkgKiBUaHVtYm5haWwgaXMgcHJvcG9ydGlvbmFsCgkgKi8KCXZhciAkcHJvcG9ydGlvbmFsID0gdHJ1ZTsKCgkvKioKCSAqIERlZmF1bHQgaW1hZ2UgdHlwZSBpcyBKUEVHLgoJICovCgl2YXIgJHR5cGUgPSAnanBlZyc7CgoJLyoqCgkgKiBDcmVhdGUgYSBuZXcgVGh1bWJuYWlsIGluc3RhbmNlLgoJICogQHBhcmFtIGludCAkd2lkdGggdGh1bWJuYWlsIHdpZHRoCgkgKiBAcGFyYW0gaW50ICRoZWlnaHQgdGh1bWJuYWlsIGhlaWdodAoJICovCglmdW5jdGlvbiBUaHVtYm5haWwoJHdpZHRoPTk2LCAkaGVpZ2h0PTk2KSAKCXsKCQkkdGhpcy0+ZHJpdmVyID0gSW1hZ2VfVHJhbnNmb3JtOjpmYWN0b3J5KElNQUdFX0NMQVNTKTsKCQkkdGhpcy0+d2lkdGggPSAkd2lkdGg7CgkJJHRoaXMtPmhlaWdodCA9ICRoZWlnaHQ7Cgl9CgoJLyoqCgkgKiBDcmVhdGUgYSB0aHVtYm5haWwuCgkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIHRoZSBpbWFnZSBmb3IgdGhlIHRodW1ibmFpbAoJICogQHBhcmFtIHN0cmluZyAkdGh1bWJuYWlsIGlmIG5vdCBudWxsLCB0aGUgdGh1bWJuYWlsIHdpbGwgYmUgc2F2ZWQKCSAqIGFzIHRoaXMgcGFyYW1ldGVyIHZhbHVlLgoJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGh1bWJuYWlsIGlzIGNyZWF0ZWQsIGZhbHNlIG90aGVyd2lzZQoJICovCglmdW5jdGlvbiBjcmVhdGVUaHVtYm5haWwoJGZpbGUsICR0aHVtYm5haWw9bnVsbCkgCgl7CgkJaWYoIWlzX2ZpbGUoJGZpbGUpKSAKCQkJUmV0dXJuIGZhbHNlOwoKCQkvL2Vycm9yX2xvZygnQ3JlYXRpbmcgVGh1bWJzOiAnLiRmaWxlKTsKCgkJJHRoaXMtPmRyaXZlci0+bG9hZCgkZmlsZSk7CgoJCWlmKCR0aGlzLT5wcm9wb3J0aW9uYWwpIAoJCXsKCQkJJHdpZHRoID0gJHRoaXMtPmRyaXZlci0+aW1nX3g7CgkJCSRoZWlnaHQgPSAkdGhpcy0+ZHJpdmVyLT5pbWdfeTsKCgkJCWlmICgkd2lkdGggPiAkaGVpZ2h0KQoJCQkJJHRoaXMtPmhlaWdodCA9IGludHZhbCgkdGhpcy0+d2lkdGgvJHdpZHRoKiRoZWlnaHQpOwoJCQllbHNlIGlmICgkaGVpZ2h0ID4gJHdpZHRoKQoJCQkJJHRoaXMtPndpZHRoID0gaW50dmFsKCR0aGlzLT5oZWlnaHQvJGhlaWdodCokd2lkdGgpOwoJCX0KCgkJJHRoaXMtPmRyaXZlci0+cmVzaXplKCR0aGlzLT53aWR0aCwgJHRoaXMtPmhlaWdodCk7CgoJCWlmKGlzX251bGwoJHRodW1ibmFpbCkpIAoJCQkkdGhpcy0+c2F2ZSgkZmlsZSk7CgkJZWxzZQoJCQkkdGhpcy0+c2F2ZSgkdGh1bWJuYWlsKTsKCgoJCSR0aGlzLT5mcmVlKCk7CgoJCWlmKGlzX2ZpbGUoJHRodW1ibmFpbCkpIAoJCQlSZXR1cm4gdHJ1ZTsKCQllbHNlCgkJCVJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIFNhdmUgdGhlIHRodW1ibmFpbCBmaWxlLgoJICogQHBhcmFtIHN0cmluZyAkZmlsZSBmaWxlIG5hbWUgdG8gYmUgc2F2ZWQgYXMuCgkgKi8KCWZ1bmN0aW9uIHNhdmUoJGZpbGUpIAoJewoJCSR0aGlzLT5kcml2ZXItPnNhdmUoJGZpbGUpOwoJfQoKCS8qKgoJICogRnJlZSB1cCB0aGUgZ3JhcGhpYyBkcml2ZXIgcmVzb3VyY2VzLgoJICovCglmdW5jdGlvbiBmcmVlKCkgCgl7CgkJJHRoaXMtPmRyaXZlci0+ZnJlZSgpOwoJfQp9CgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/Transform.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqIFRpdGxlLi4uLi4uLi4uOiAgSW1hZ2UgVHJhbnNmb3JtYXRpb24gSW50ZXJmYWNlCioqIFZlcnNpb24uLi4uLi4uOiAgMS4wCioqIEF1dGhvci4uLi4uLi4uOiAgWGlhbmcgV2VpIFpIVU8gPHdlaUB6aHVvLm9yZz4KKiogRmlsZW5hbWUuLi4uLi46ICBUcmFuc2Zvcm0ucGhwCioqIExhc3QgY2hhbmdlZC4uOiAgMzAgQXVnIDIwMDMgCioqIE5vdGVzLi4uLi4uLi4uOiAgT3JnaW5hbCBpcyBmcm9tIFBFQVIKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBBZGRlZCBhIGZldyBleHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgLSBjcmVhdGUgdW5pcXVlIGZpbGVuYW1lIGluIGEgcGFydGljdWxhciBkaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgdGVtcCBpbWFnZSBmaWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgLSBhZGRlZCBjcm9wcGluZyB0byBHRCwgTmV0UEJNLCBJbWFnZU1hZ2ljawoqKi8KCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwovLyB8IFBIUCBWZXJzaW9uIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi8vIHwgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIgVGhlIFBIUCBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLy8gfCBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdmVyc2lvbiAyLjAyIG9mIHRoZSBQSFAgbGljZW5zZSwgICAgICB8Ci8vIHwgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UsIGFuZCBpcyAgICAgICAgfAovLyB8IGF2YWlsYWJsZSBhdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gfCBodHRwOi8vd3d3LnBocC5uZXQvbGljZW5zZS8yXzAyLnR4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIHwgSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIFBIUCBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvICAgfAovLyB8IG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYSBub3RlIHRvICAgICAgICAgIHwKLy8gfCBsaWNlbnNlQHBocC5uZXQgc28gd2UgY2FuIG1haWwgeW91IGEgY29weSBpbW1lZGlhdGVseS4gICAgICAgICAgICAgICB8Ci8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwovLyB8IEF1dGhvcnM6IFBldGVyIEJvd3llciA8cGV0ZXJAbWFwbGVkZXNpZ24uY28udWs+ICAgICAgICAgICAgICAgICAgICAgIHwKLy8gfCAgICAgICAgICBBbGFuIEtub3dsZXMgPGFsYW5AYWtia2hvbWUuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIHwgICAgICAgICAgVmluY2VudCBPb3N0aW5kaWUgPHZpbmNlbnRAc3VubGlnaHQudG1md2ViLm5sPiAgICAgICAgICAgICAgfAovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLy8KLy8gJElkOiBUcmFuc2Zvcm0ucGhwIDc5OTcgMjAxMi0wNS0yOCAxNToxNDozOFogY2FsZ3V5MTAwMCAkCi8vCi8vIEltYWdlIFRyYW5zZm9ybWF0aW9uIGludGVyZmFjZQovLwoKCi8qKgogKiBUaGUgbWFpbiAiSW1hZ2VfUmVzaXplIiBjbGFzcyBpcyBhIGNvbnRhaW5lciBhbmQgYmFzZSBjbGFzcyB3aGljaAogKiBwcm92aWRlcyB0aGUgc3RhdGljIG1ldGhvZHMgZm9yIGNyZWF0aW5nIEltYWdlIG9iamVjdHMgYXMgd2VsbCBhcwogKiBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIChtYXRocykgY29tbW9uIHRvIGFsbCBwYXJ0cyBvZiBJbWFnZSBSZXNpemUuCiAqCiAqIFRoZSBvYmplY3QgbW9kZWwgb2YgREIgaXMgYXMgZm9sbG93cyAoaW5kZW50YXRpb24gbWVhbnMgaW5oZXJpdGFuY2UpOgogKgogKiBJbWFnZV9SZXNpemUgVGhlIGJhc2UgZm9yIGVhY2ggSW1hZ2UgaW1wbGVtZW50YXRpb24uICBQcm92aWRlcyBkZWZhdWx0CiAqIHwgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgKGluIE9PIGxpbmdvIHZpcnR1YWwgbWV0aG9kcykgZm9yCiAqIHwgICAgICAgICAgICB0aGUgYWN0dWFsIEltYWdlIGltcGxlbWVudGF0aW9ucyBhcyB3ZWxsIGFzIGEgYnVuY2ggb2YKICogfCAgICAgICAgICAgIG1hdGhzIG1ldGhvZHMuCiAqIHwKICogKy1JbWFnZV9HRCAgIFRoZSBJbWFnZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFBIUCBHRCBleHRlbnNpb24gLiAgSW5oZXJpdHMKICogICAgICAgICAgICAgIEltYWdlX1Jlc2l6ZQogKiAgICAgICAgICAgICAgV2hlbiBjYWxsaW5nIERCOjpzZXR1cCBmb3IgR0QgaW1hZ2VzIHRoZSBvYmplY3QgcmV0dXJuZWQgaXMgYW4KICogICAgICAgICAgICAgIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCiAqCiAqIEBwYWNrYWdlICBJbWFnZSBSZXNpemUKICogQHZlcnNpb24gIDEuMDAKICogQGF1dGhvciAgIFBldGVyIEJvd3llciA8cGV0ZXJAbWFwbGVkZXNpZ24uY28udWs+CiAqIEBzaW5jZSAgICBQSFAgNC4wCiAqLwpDbGFzcyBJbWFnZV9UcmFuc2Zvcm0KewogICAgLyoqCiAgICAgKiBOYW1lIG9mIHRoZSBpbWFnZSBmaWxlCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICB2YXIgJGltYWdlID0gJyc7CiAgICAvKioKICAgICAqIFR5cGUgb2YgdGhlIGltYWdlIGZpbGUgKGVnLiBqcGcsIGdpZiBwbmcgLi4uKQogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgdmFyICR0eXBlID0gJyc7CiAgICAvKioKICAgICAqIE9yaWdpbmFsIGltYWdlIHdpZHRoIGluIHggZGlyZWN0aW9uCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICB2YXIgJGltZ194ID0gJyc7CiAgICAvKioKICAgICAqIE9yaWdpbmFsIGltYWdlIHdpZHRoIGluIHkgZGlyZWN0aW9uCiAgICAgKiBAdmFyIGludAogICAgICovCiAgICB2YXIgJGltZ195ID0gJyc7CiAgICAvKioKICAgICAqIE5ldyBpbWFnZSB3aWR0aCBpbiB4IGRpcmVjdGlvbgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgdmFyICRuZXdfeCA9ICcnOwogICAgLyoqCiAgICAgKiBOZXcgaW1hZ2Ugd2lkdGggaW4geSBkaXJlY3Rpb24KICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHZhciAkbmV3X3kgPSAnJzsKICAgIC8qKgogICAgICogUGF0aCB0aGUgdGhlIGxpYnJhcnkgdXNlZAogICAgICogZS5nLiAvdXNyL2xvY2FsL0ltYWdlTWFnaWNrL2Jpbi8gb3IKICAgICAqIC91c3IvbG9jYWwvbmV0cGJtLwogICAgICovCiAgICB2YXIgJGxpYl9wYXRoID0gJyc7CiAgICAvKioKICAgICAqIEZsYWcgdG8gd2FybiBpZiBpbWFnZSBoYXMgYmVlbiByZXNpemVkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSBkaXNwbGF5aW5nCiAgICAgKiBvciBzYXZpbmcuCiAgICAgKi8KICAgICB2YXIgJHJlc2l6ZWQgPSBmYWxzZTsKCgogICAgIHZhciAkdWlkID0gJyc7CgogICAgIHZhciAkbGFwc2VfdGltZSA9OTAwOyAvLzE1IG1pbnMKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBJbWFnZV9yZXNpemUgb2JqZWN0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZHJpdmVyIG5hbWUgb2YgZHJpdmVyIGNsYXNzIHRvIGluaXRpYWxpemUKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkIGEgbmV3bHkgY3JlYXRlZCBJbWFnZV9UcmFuc2Zvcm0gb2JqZWN0LCBvciBhIFBFQVIKICAgICAqIGVycm9yIG9iamVjdCBvbiBlcnJvcgogICAgICoKICAgICAqIEBzZWUgUEVBUjo6aXNFcnJvcigpCiAgICAgKiBAc2VlIEltYWdlX1RyYW5zZm9ybTo6c2V0T3B0aW9uKCkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiAmZmFjdG9yeSgkZHJpdmVyKQogICAgewogICAgICAgIGlmICgnJyA9PSAkZHJpdmVyKSB7CiAgICAgICAgICAgIGRpZSgiTm8gaW1hZ2UgbGlicmFyeSBzcGVjaWZpZWQuLi4gYWJvcnRpbmcuICBZb3UgbXVzdCBjYWxsIDo6ZmFjdG9yeSgpIHdpdGggb25lIHBhcmFtZXRlciwgdGhlIGxpYnJhcnkgdG8gbG9hZC4iKTsKCiAgICAgICAgfQoKICAgICAgICBpbmNsdWRlX29uY2UgKGRpcm5hbWUoX19GSUxFX18pLiIvJGRyaXZlci5waHAiKTsKCiAgICAgICAgJGNsYXNzbmFtZSA9ICJJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX3skZHJpdmVyfSI7CiAgICAgICAgJG9iaiA9IG5ldyAkY2xhc3NuYW1lOwogICAgICAgICRvYmotPnVpZCA9IG1kNSgkX1NFUlZFUlsnUkVNT1RFX0FERFInXSk7CiAgICAgICAgcmV0dXJuICRvYmo7CiAgICB9CgoKICAgIC8qKgogICAgICogUmVzaXplIHRoZSBJbWFnZSBpbiB0aGUgWCBhbmQvb3IgWSBkaXJlY3Rpb24KICAgICAqIElmIGVpdGhlciBpcyAwIGl0IHdpbGwgYmUgc2NhbGVkIHByb3BvcnRpb25hbGx5CiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG5ld194ICgwLCBudW1iZXIsIHBlcmNlbnRhZ2UgMTAlIG9yIDAuMSkKICAgICAqIEBwYXJhbSBtaXhlZCAkbmV3X3kgKDAsIG51bWJlciwgcGVyY2VudGFnZSAxMCUgb3IgMC4xKQogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQgbm9uZSBvciBQRUFSX2Vycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHJlc2l6ZSgkbmV3X3ggPSAwLCAkbmV3X3kgPSAwKQogICAgewogICAgICAgIC8vIDAgbWVhbnMga2VlcCBvcmlnaW5hbCBzaXplCiAgICAgICAgJG5ld194ID0gKDAgPT0gJG5ld194KSA/ICR0aGlzLT5pbWdfeCA6ICR0aGlzLT5fcGFyc2Vfc2l6ZSgkbmV3X3gsICR0aGlzLT5pbWdfeCk7CiAgICAgICAgJG5ld195ID0gKDAgPT0gJG5ld195KSA/ICR0aGlzLT5pbWdfeSA6ICR0aGlzLT5fcGFyc2Vfc2l6ZSgkbmV3X3ksICR0aGlzLT5pbWdfeSk7CiAgICAgICAgLy8gTm93IGRvIHRoZSBsaWJyYXJ5IHNwZWNpZmljIHJlc2l6aW5nLgogICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc2l6ZSgkbmV3X3gsICRuZXdfeSk7CiAgICB9IC8vIEVuZCByZXNpemUKCgogICAgLyoqCiAgICAgKiBTY2FsZSB0aGUgaW1hZ2UgdG8gaGF2ZSB0aGUgbWF4IHggZGltZW5zaW9uIHNwZWNpZmllZC4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRuZXdfeCBTaXplIHRvIHNjYWxlIFgtZGltZW5zaW9uIHRvCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqLwogICAgZnVuY3Rpb24gc2NhbGVNYXhYKCRuZXdfeCkKICAgIHsKICAgICAgICAkbmV3X3kgPSByb3VuZCgoJG5ld194IC8gJHRoaXMtPmltZ194KSAqICR0aGlzLT5pbWdfeSwgMCk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzaXplKCRuZXdfeCwgJG5ld195KTsKICAgIH0gLy8gRW5kIHJlc2l6ZVgKCiAgICAvKioKICAgICAqIFNjYWxlIHRoZSBpbWFnZSB0byBoYXZlIHRoZSBtYXggeSBkaW1lbnNpb24gc3BlY2lmaWVkLgogICAgICoKICAgICAqIEBhY2Nlc3MgcHVibGljCiAgICAgKiBAcGFyYW0gaW50ICRuZXdfeSBTaXplIHRvIHNjYWxlIFktZGltZW5zaW9uIHRvCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqLwogICAgZnVuY3Rpb24gc2NhbGVNYXhZKCRuZXdfeSkKICAgIHsKICAgICAgICAkbmV3X3ggPSByb3VuZCgoJG5ld195IC8gJHRoaXMtPmltZ195KSAqICR0aGlzLT5pbWdfeCwgMCk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzaXplKCRuZXdfeCwgJG5ld195KTsKICAgIH0gLy8gRW5kIHJlc2l6ZVkKCiAgICAvKioKICAgICAqIFNjYWxlIEltYWdlIHRvIGEgbWF4aW11bSBvciBwZXJjZW50YWdlCiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqIEBwYXJhbSBtaXhlZCAobnVtYmVyLCBwZXJjZW50YWdlIDEwJSBvciAwLjEpCiAgICAgKiBAcmV0dXJuIG1peGVkIG5vbmUgb3IgUEVBUl9lcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBzY2FsZSgkc2l6ZSkKICAgIHsKICAgICAgICBpZiAoKHN0cmxlbigkc2l6ZSkgPiAxKSAmJiAoc3Vic3RyKCRzaXplLC0xKSA9PSAnJScpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2NhbGVCeVBlcmNlbnRhZ2Uoc3Vic3RyKCRzaXplLCAwLCAtMSkpOwogICAgICAgIH0gZWxzZWlmICgkc2l6ZSA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zY2FsZUJ5RmFjdG9yKCRzaXplKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNjYWxlQnlMZW5ndGgoJHNpemUpOwogICAgICAgIH0KICAgIH0gLy8gRW5kIHNjYWxlCgogICAgLyoqCiAgICAgKiBTY2FsZXMgYW4gaW1hZ2UgdG8gYSBwZXJjZW50YWdlIG9mIGl0cyBvcmlnaW5hbCBzaXplLiAgRm9yIGV4YW1wbGUsIGlmCiAgICAgKiBteSBpbWFnZSB3YXMgNjQweDQ4MCBhbmQgSSBjYWxsZWQgc2NhbGVCeVBlcmNlbnRhZ2UoMTApIHRoZW4gdGhlIGltYWdlCiAgICAgKiB3b3VsZCBiZSByZXNpemVkIHRvIDY0eDQ4CiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqIEBwYXJhbSBpbnQgJHNpemUgUGVyY2VudGFnZSBvZiBvcmlnaW5hbCBzaXplIHRvIHNjYWxlIHRvCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqLwogICAgZnVuY3Rpb24gc2NhbGVCeVBlcmNlbnRhZ2UoJHNpemUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zY2FsZUJ5RmFjdG9yKCRzaXplIC8gMTAwKTsKICAgIH0gLy8gRW5kIHNjYWxlQnlQZXJjZW50YWdlCgogICAgLyoqCiAgICAgKiBTY2FsZXMgYW4gaW1hZ2UgdG8gYSBmYWN0b3Igb2YgaXRzIG9yaWdpbmFsIHNpemUuICBGb3IgZXhhbXBsZSwgaWYKICAgICAqIG15IGltYWdlIHdhcyA2NDB4NDgwIGFuZCBJIGNhbGxlZCBzY2FsZUJ5RmFjdG9yKDAuNSkgdGhlbiB0aGUgaW1hZ2UKICAgICAqIHdvdWxkIGJlIHJlc2l6ZWQgdG8gMzIweDI0MC4KICAgICAqCiAgICAgKiBAYWNjZXNzIHB1YmxpYwogICAgICogQHBhcmFtIGZsb2F0ICRzaXplIEZhY3RvciBvZiBvcmlnaW5hbCBzaXplIHRvIHNjYWxlIHRvCiAgICAgKiBAcmV0dXJuIG5vbmUKICAgICAqLwogICAgZnVuY3Rpb24gc2NhbGVCeUZhY3Rvcigkc2l6ZSkKICAgIHsKICAgICAgICAkbmV3X3ggPSByb3VuZCgkc2l6ZSAqICR0aGlzLT5pbWdfeCwgMCk7CiAgICAgICAgJG5ld195ID0gcm91bmQoJHNpemUgKiAkdGhpcy0+aW1nX3ksIDApOwogICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc2l6ZSgkbmV3X3gsICRuZXdfeSk7CiAgICB9IC8vIEVuZCBzY2FsZUJ5RmFjdG9yCgogICAgLyoqCiAgICAgKiBTY2FsZXMgYW4gaW1hZ2Ugc28gdGhhdCB0aGUgbG9uZ2VzdCBzaWRlIGhhcyB0aGlzIGRpbWVuc2lvbi4KICAgICAqCiAgICAgKiBAYWNjZXNzIHB1YmxpYwogICAgICogQHBhcmFtIGludCAkc2l6ZSBNYXggZGltZW5zaW9uIGluIHBpeGVscwogICAgICogQHJldHVybiBub25lCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNjYWxlQnlMZW5ndGgoJHNpemUpCiAgICB7CiAgICAgICAgIGlmICgkdGhpcy0+aW1nX3ggPj0gJHRoaXMtPmltZ195KSB7CiAgICAgICAgICAgICRuZXdfeCA9ICRzaXplOwogICAgICAgICAgICAkbmV3X3kgPSByb3VuZCgoJG5ld194IC8gJHRoaXMtPmltZ194KSAqICR0aGlzLT5pbWdfeSwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5ld195ID0gJHNpemU7CiAgICAgICAgICAgICRuZXdfeCA9IHJvdW5kKCgkbmV3X3kgLyAkdGhpcy0+aW1nX3kpICogJHRoaXMtPmltZ194LCAwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzaXplKCRuZXdfeCwgJG5ld195KTsKICAgIH0gLy8gRW5kIHNjYWxlQnlMZW5ndGgKCgogICAgLyoqCiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBmdW5jdGlvbiBfZ2V0X2ltYWdlX2RldGFpbHMoJGltYWdlKQogICAgewogICAgICAgIC8vZWNobyAkaW1hZ2U7CiAgICAgICAgJGRhdGEgPSBAR2V0SW1hZ2VTaXplKCRpbWFnZSk7CiAgICAgICAgIzEgPSBHSUYsIDIgPSBKUEcsIDMgPSBQTkcsIDQgPSBTV0YsIDUgPSBQU0QsIDYgPSBCTVAsIDcgPSBUSUZGKGludGVsIGJ5dGUgb3JkZXIpLCA4ID0gVElGRihtb3Rvcm9sYSBieXRlIG9yZGVyLAogICAgICAgICMgOSA9IEpQQywgMTAgPSBKUDIsIDExID0gSlBYLCAxMiA9IEpCMiwgMTMgPSBTV0MKICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpKXsKICAgICAgICAgICAgc3dpdGNoKCRkYXRhWzJdKXsKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICdnaWYnOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ2pwZWcnOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ3BuZyc7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAnc3dmJzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICdwc2QnOwogICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJ2JtcCc7CiAgICAgICAgICAgICAgICBjYXNlIDc6CiAgICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAndGlmZic7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGVjaG8oIldlIGRvIG5vdCByZWNvZ25pemUgdGhpcyBpbWFnZSBmb3JtYXQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+aW1nX3ggPSAkZGF0YVswXTsKICAgICAgICAgICAgJHRoaXMtPmltZ195ID0gJGRhdGFbMV07CiAgICAgICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlY2hvKCJDYW5ub3QgZmV0Y2ggaW1hZ2Ugb3IgaW1hZ2VzIGRldGFpbHMuIik7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAvKgogICAgICAgICRvdXRwdXQgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJyA9PiAkZGF0YVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgJ2hlaWdodCcgPT4gJGRhdGFbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJyA9PiAkdHlwZQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHJldHVybiAkb3V0cHV0OwogICAgICAgICovCiAgICB9CgoKICAgIC8qKgogICAgICogUGFyc2UgaW5wdXQgYW5kIGNvbnZlcnQKICAgICAqIElmIGVpdGhlciBpcyAwIGl0IHdpbGwgYmUgc2NhbGVkIHByb3BvcnRpb25hbGx5CiAgICAgKgogICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRuZXdfc2l6ZSAoMCwgbnVtYmVyLCBwZXJjZW50YWdlIDEwJSBvciAwLjEpCiAgICAgKiBAcGFyYW0gaW50ICRvbGRfc2l6ZQogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQgbm9uZSBvciBQRUFSX2Vycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9wYXJzZV9zaXplKCRuZXdfc2l6ZSwgJG9sZF9zaXplKQogICAgewogICAgICAgIGlmICgnJScgPT0gJG5ld19zaXplKSB7CiAgICAgICAgICAgICRuZXdfc2l6ZSA9IHN0cl9yZXBsYWNlKCclJywnJywkbmV3X3NpemUpOwogICAgICAgICAgICAkbmV3X3NpemUgPSAkbmV3X3NpemUgLyAxMDA7CiAgICAgICAgfQogICAgICAgIGlmICgkbmV3X3NpemUgPiAxKSB7CiAgICAgICAgICAgIHJldHVybiAoaW50KSAkbmV3X3NpemU7CiAgICAgICAgfSBlbHNlaWYgKCRuZXdfc2l6ZSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAoaW50KSAkb2xkX3NpemU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIChpbnQpIHJvdW5kKCRuZXdfc2l6ZSAqICRvbGRfc2l6ZSwgMCk7CiAgICAgICAgfQogICAgfQoKCiAgICBmdW5jdGlvbiB1bmlxdWVTdHIoKQogICAgewogICAgICByZXR1cm4gc3Vic3RyKG1kNShtaWNyb3RpbWUoKSksMCw2KTsKICAgIH0KCiAgICAvL2RlbGV0ZSBvbGQgdG1wIGZpbGVzLCBhbmQgYWxsb3cgb25seSAxIGZpbGUgcGVyIHJlbW90ZSBob3N0LgogICAgZnVuY3Rpb24gY2xlYW5VcCgkaWQsICRkaXIpCiAgICB7CiAgICAgICAgJGQgPSBkaXIoJGRpcik7CiAgICAgICAgJGlkX2xlbmd0aCA9IHN0cmxlbigkaWQpOwoKICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZW50cnkgPSAkZC0+cmVhZCgpKSkgewogICAgICAgICAgICBpZiAoaXNfZmlsZSgkZGlyLicvJy4kZW50cnkpICYmIHN1YnN0cigkZW50cnksMCwxKSA9PSAnLicgJiYgIXByZWdfbWF0Y2goJ0AnLiRlbnRyeS4nQCcsICR0aGlzLT5pbWFnZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vZWNobyBmaWxlbXRpbWUoJHRoaXMtPmRpcmVjdG9yeS4nLycuJGVudHJ5KS4iPGJyPiI7IAogICAgICAgICAgICAgICAgLy9lY2hvIHRpbWUoKTsKCiAgICAgICAgICAgICAgICBpZiAoZmlsZW10aW1lKCRkaXIuJy8nLiRlbnRyeSkgKyAkdGhpcy0+bGFwc2VfdGltZSA8IHRpbWUoKSkKICAgICAgICAgICAgICAgICAgICB1bmxpbmsoJGRpci4nLycuJGVudHJ5KTsKCiAgICAgICAgICAgICAgICBpZiAoc3Vic3RyKCRlbnRyeSwgMSwgJGlkX2xlbmd0aCkgPT0gJGlkKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChpc19maWxlKCRkaXIuJy8nLiRlbnRyeSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHVubGluaygkZGlyLicvJy4kZW50cnkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRkLT5jbG9zZSgpOwogICAgfQoKCiAgICBmdW5jdGlvbiBjcmVhdGVVbmlxdWUoJGRpcikKICAgIHsKICAgICAgICR1bmlxdWVfc3RyID0gJy4nLiR0aGlzLT51aWQuJ18nLiR0aGlzLT51bmlxdWVTdHIoKS4iLiIuJHRoaXMtPnR5cGU7CiAgICAgICAgCiAgICAgICAvL21ha2Ugc3VyZSB0aGUgdGhlIHVuaXF1ZSB0ZW1wIGZpbGUgZG9lcyBub3QgZXhpc3RzCiAgICAgICAgd2hpbGUgKGZpbGVfZXhpc3RzKCRkaXIuJHVuaXF1ZV9zdHIpKQogICAgICAgIHsKICAgICAgICAgICAgJHVuaXF1ZV9zdHIgPSAnLicuJHRoaXMtPnVpZC4nXycuJHRoaXMtPnVuaXF1ZVN0cigpLiIuIi4kdGhpcy0+dHlwZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICR0aGlzLT5jbGVhblVwKCR0aGlzLT51aWQsICRkaXIpOwoKICAgICAgIHJldHVybiAkdW5pcXVlX3N0cjsKICAgIH0KCgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGltYWdlIHdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRzaXplIGRpbWVuc2lvbiB0byBzZXQKICAgICAqIEBzaW5jZSAyOS8wNS8wMiAxMzozNjozMQogICAgICogQHJldHVybgogICAgICovCiAgICBmdW5jdGlvbiBfc2V0X2ltZ194KCRzaXplKQogICAgewogICAgICAgICR0aGlzLT5pbWdfeCA9ICRzaXplOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBpbWFnZSBoZWlnaHQKICAgICAqIEBwYXJhbSBpbnQgJHNpemUgZGltZW5zaW9uIHRvIHNldAogICAgICogQHNpbmNlIDI5LzA1LzAyIDEzOjM2OjMxCiAgICAgKiBAcmV0dXJuCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9zZXRfaW1nX3koJHNpemUpCiAgICB7CiAgICAgICAgJHRoaXMtPmltZ195ID0gJHNpemU7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGltYWdlIHdpZHRoCiAgICAgKiBAcGFyYW0gaW50ICRzaXplIGRpbWVuc2lvbiB0byBzZXQKICAgICAqIEBzaW5jZSAyOS8wNS8wMiAxMzozNjozMQogICAgICogQHJldHVybgogICAgICovCiAgICBmdW5jdGlvbiBfc2V0X25ld194KCRzaXplKQogICAgewogICAgICAgICR0aGlzLT5uZXdfeCA9ICRzaXplOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBpbWFnZSBoZWlnaHQKICAgICAqIEBwYXJhbSBpbnQgJHNpemUgZGltZW5zaW9uIHRvIHNldAogICAgICogQHNpbmNlIDI5LzA1LzAyIDEzOjM2OjMxCiAgICAgKiBAcmV0dXJuCiAgICAgKi8KICAgIGZ1bmN0aW9uIF9zZXRfbmV3X3koJHNpemUpCiAgICB7CiAgICAgICAgJHRoaXMtPm5ld195ID0gJHNpemU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHR5cGUgb2YgdGhlIGltYWdlIGJlaW5nIG1hbmlwdWxhdGVkCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgJHRoaXMtPnR5cGUgdGhlIGltYWdlIHR5cGUKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0SW1hZ2VUeXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnR5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqIEByZXR1cm4gc3RyaW5nIHdlYi1zYWZlIGltYWdlIHR5cGUKICAgICAqLwogICAgZnVuY3Rpb24gZ2V0V2ViU2FmZUZvcm1hdCgpCiAgICB7CiAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKXsKICAgICAgICAgICAgY2FzZSAnZ2lmJzoKCSAgICAJcmV0dXJuICdnaWYnOwoJCWJyZWFrOwogICAgICAgICAgICBjYXNlICdwbmcnOgogICAgICAgICAgICAgICAgcmV0dXJuICdwbmcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gJ2pwZWcnOwogICAgICAgIH0gLy8gc3dpdGNoCiAgICB9CgogICAgLyoqCiAgICAgKiBQbGFjZSBob2xkZXIgZm9yIHRoZSByZWFsIHJlc2l6ZSBtZXRob2QKICAgICAqIHVzZWQgYnkgZXh0ZW5kZWQgbWV0aG9kcyB0byBkbyB0aGUgcmVzaXppbmcKICAgICAqCiAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAqIEByZXR1cm4gUEVBUl9lcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBfcmVzaXplKCkgewogICAgICAgIHJldHVybiBudWxsOyAvL1BFQVI6OnJhaXNlRXJyb3IoIk5vIFJlc2l6ZSBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQbGFjZSBob2xkZXIgZm9yIHRoZSByZWFsIGxvYWQgbWV0aG9kCiAgICAgKiB1c2VkIGJ5IGV4dGVuZGVkIG1ldGhvZHMgdG8gZG8gdGhlIHJlc2l6aW5nCiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqIEByZXR1cm4gUEVBUl9lcnJvcgogICAgICovCiAgICBmdW5jdGlvbiBsb2FkKCRmaWxlbmFtZSkgewogICAgICAgIHJldHVybiBudWxsOyAvL1BFQVI6OnJhaXNlRXJyb3IoIk5vIExvYWQgbWV0aG9kIGV4aXN0cyIsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogUGxhY2UgaG9sZGVyIGZvciB0aGUgcmVhbCBkaXNwbGF5IG1ldGhvZAogICAgICogdXNlZCBieSBleHRlbmRlZCBtZXRob2RzIHRvIGRvIHRoZSByZXNpemluZwogICAgICoKICAgICAqIEBhY2Nlc3MgcHVibGljCiAgICAgKiBAcGFyYW0gc3RyaW5nIGZpbGVuYW1lCiAgICAgKiBAcmV0dXJuIFBFQVJfZXJyb3IKICAgICAqLwogICAgZnVuY3Rpb24gZGlzcGxheSgkdHlwZSwgJHF1YWxpdHkpIHsKICAgICAgICByZXR1cm4gbnVsbDsgLy9QRUFSOjpyYWlzZUVycm9yKCJObyBEaXNwbGF5IG1ldGhvZCBleGlzdHMiLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBsYWNlIGhvbGRlciBmb3IgdGhlIHJlYWwgc2F2ZSBtZXRob2QKICAgICAqIHVzZWQgYnkgZXh0ZW5kZWQgbWV0aG9kcyB0byBkbyB0aGUgcmVzaXppbmcKICAgICAqCiAgICAgKiBAYWNjZXNzIHB1YmxpYwogICAgICogQHBhcmFtIHN0cmluZyBmaWxlbmFtZQogICAgICogQHJldHVybiBQRUFSX2Vycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lLCAkdHlwZT0nJywgJHF1YWxpdHk9ODUpIHsKICAgICAgICByZXR1cm4gbnVsbDsgLy9QRUFSOjpyYWlzZUVycm9yKCJObyBTYXZlIG1ldGhvZCBleGlzdHMiLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBsYWNlIGhvbGRlciBmb3IgdGhlIHJlYWwgZnJlZSBtZXRob2QKICAgICAqIHVzZWQgYnkgZXh0ZW5kZWQgbWV0aG9kcyB0byBkbyB0aGUgcmVzaXppbmcKICAgICAqCiAgICAgKiBAYWNjZXNzIHB1YmxpYwogICAgICogQHJldHVybiBQRUFSX2Vycm9yCiAgICAgKi8KICAgIGZ1bmN0aW9uIGZyZWUoKSB7CiAgICAgICAgcmV0dXJuIG51bGw7IC8vUEVBUjo6cmFpc2VFcnJvcigiTm8gRnJlZSBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXZlcnNlIG9mIHJnYjJjb2xvcm5hbWUuCiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqIEByZXR1cm4gUEVBUl9lcnJvcgogICAgICoKICAgICAqIEBzZWUgcmdiMmNvbG9ybmFtZQogICAgICovCiAgICBmdW5jdGlvbiBjb2xvcmhleDJjb2xvcmFycmF5KCRjb2xvcmhleCkgewogICAgICAgICRyID0gaGV4ZGVjKHN1YnN0cigkY29sb3JoZXgsIDEsIDIpKTsKICAgICAgICAkZyA9IGhleGRlYyhzdWJzdHIoJGNvbG9yaGV4LCAzLCAyKSk7CiAgICAgICAgJGIgPSBoZXhkZWMoc3Vic3RyKCRjb2xvcmhleCwgNCwgMikpOwogICAgICAgIHJldHVybiBhcnJheSgkciwkZywkYik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXZlcnNlIG9mIHJnYjJjb2xvcm5hbWUuCiAgICAgKgogICAgICogQGFjY2VzcyBwdWJsaWMKICAgICAqIEByZXR1cm4gUEVBUl9lcnJvcgogICAgICoKICAgICAqIEBzZWUgcmdiMmNvbG9ybmFtZQogICAgICovCiAgICBmdW5jdGlvbiBjb2xvcmFycmF5MmNvbG9yaGV4KCRjb2xvcikgewogICAgICAgICRjb2xvciA9ICcjJy5kZWNoZXgoJGNvbG9yWzBdKS5kZWNoZXgoJGNvbG9yWzFdKS5kZWNoZXgoJGNvbG9yWzJdKTsKICAgICAgICByZXR1cm4gc3RybGVuKCRjb2xvcik+Nj9mYWxzZTokY29sb3I7CiAgICB9CgoKICAgIC8qIE1ldGhvZHMgdG8gYWRkIHRvIHRoZSBkcml2ZXIgY2xhc3NlcyBpbiB0aGUgZnV0dXJlICovCiAgICBmdW5jdGlvbiBhZGRUZXh0KCRwYXJhbXMpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7IC8vUEVBUjo6cmFpc2VFcnJvcigiTm8gYWRkVGV4dCBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkRHJvcFNoYWRvdygpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7IC8vUEVBUjo6cmFpc2VFcnJvcigiTm8gQWRkRHJvcFNoYWRvdyBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkQm9yZGVyKCkKICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsgLy9QRUFSOjpyYWlzZUVycm9yKCJObyBhZGRCb3JkZXIgbWV0aG9kIGV4aXN0cyIsIHRydWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNyb3AoJG5ld194LCAkbmV3X3ksICRuZXdfd2lkdGgsICRuZXdfaGVpZ2h0KQogICAgewogICAgICAgIHJldHVybiBudWxsOyAvL1BFQVI6OnJhaXNlRXJyb3IoIk5vIGNyb3AgbWV0aG9kIGV4aXN0cyIsIHRydWUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGZsaXAoJGhvcml6b250YWwpIAogICAgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIGdhbW1hKCkKICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsgLy9QRUFSOjpyYWlzZUVycm9yKCJObyBnYW1tYSBtZXRob2QgZXhpc3RzIiwgdHJ1ZSk7CiAgICB9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyogdmltOiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9NCBzaGlmdHdpZHRoPTQ6ICovDQoNCi8qKg0KICogU2ltcGxlIGFuZCBjcm9zcy1saWJyYXJ5IHBhY2thZ2UgdG8gZG9pbmcgaW1hZ2UgdHJhbnNmb3JtYXRpb25zIGFuZA0KICogbWFuaXB1bGF0aW9ucy4NCiAqDQogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQ0KICoNCiAqIExJQ0VOU0U6IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDMuMCBvZiB0aGUgUEhQIGxpY2Vuc2UNCiAqIHRoYXQgaXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoZSBmb2xsb3dpbmcgVVJJOg0KICogaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvM18wLnR4dC4gIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mDQogKiB0aGUgUEhQIExpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gb2J0YWluIGl0IHRocm91Z2ggdGhlIHdlYiwgcGxlYXNlDQogKiBzZW5kIGEgbm90ZSB0byBsaWNlbnNlQHBocC5uZXQgc28gd2UgY2FuIG1haWwgeW91IGEgY29weSBpbW1lZGlhdGVseS4NCiAqDQogKiBAY2F0ZWdvcnkgIEltYWdlDQogKiBAcGFja2FnZSAgIEltYWdlX1RyYW5zZm9ybQ0KICogQGF1dGhvciAgICBWaW5jZW50IE9vc3RpbmRpZSA8dmluY2VudEBzdW5saWdodC50bWZ3ZWIubmw+DQogKiBAYXV0aG9yICAgIEFsYW4gS25vd2xlcyA8YWxhbkBha2JraG9tZS5jb20+DQogKiBAYXV0aG9yICAgIFBldGVyIEJvd3llciA8cGV0ZXJAbWFwbGVkZXNpZ24uY28udWs+DQogKiBAYXV0aG9yICAgIFBoaWxpcHBlIEphdXNpb25zIDxQaGlsaXBwZS5KYXVzaW9uc0AxMWFiYWN1cy5jb20+DQogKiBAY29weXJpZ2h0IDIwMDItMjAwNyBUaGUgUEhQIEdyb3VwDQogKiBAbGljZW5zZSAgIGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQgIFBIUCBMaWNlbnNlIDMuMA0KICogQHZlcnNpb24gICBDVlM6ICRJZDogVHJhbnNmb3JtLnBocCAzMjI2NTkgMjAxMi0wMS0yNCAxMTo1NjoyMlogY2xvY2t3ZXJ4ICQNCiAqIEBsaW5rICAgICAgaHR0cDovL3BlYXIucGhwLm5ldC9wYWNrYWdlL0ltYWdlX1RyYW5zZm9ybQ0KICovDQoNCi8qKg0KICogSW5jbHVkZSBmb3IgZXJyb3IgaGFuZGxpbmcNCiAqLw0KLy9yZXF1aXJlX29uY2UgJ1BFQVIucGhwJzsNCg0KLyoqDQogKiBFcnJvciBjb2RlIGZvciB1bnN1cHBvcnRlZCBsaWJyYXJ5LCBpbWFnZSBmb3JtYXQgb3IgbWV0aG9kcw0KICovDQpkZWZpbmUoJ0lNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCcsIDEpOw0KDQovKioNCiAqIEVycm9yIGNvZGUgZm9yIGZhaWxlZCB0cmFuc2Zvcm1hdGlvbiBvcGVyYXRpb25zDQogKi8NCmRlZmluZSgnSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0ZBSUxFRCcsIDIpOw0KDQovKioNCiAqIEVycm9yIGNvZGUgZm9yIGZhaWxlZCBpL28gKElucHV0L091dHB1dCkgb3BlcmF0aW9ucw0KICovDQpkZWZpbmUoJ0lNQUdFX1RSQU5TRk9STV9FUlJPUl9JTycsIDMpOw0KDQovKioNCiAqIEVycm9yIGNvZGUgZm9yIGludmFsaWQgYXJndW1lbnRzDQogKi8NCmRlZmluZSgnSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0FSR1VNRU5UJywgNCk7DQoNCi8qKg0KICogRXJyb3IgY29kZSBmb3Igb3V0LW9mLWJvdW5kIHJlbGF0ZWQgZXJyb3JzDQogKi8NCmRlZmluZSgnSU1BR0VfVFJBTlNGT1JNX0VSUk9SX09VVE9GQk9VTkQnLCA1KTsNCg0KLyoqDQogKiBFcnJvciBjb2RlIGZvciBpbmV4c2l0YW50IGRyaXZlciBlcnJvcnMNCiAqLw0KZGVmaW5lKCdJTUFHRV9UUkFOU0ZPUk1fRFJJVkVSX0ZJTEVfTUlTU0lORycsIDYpOw0KDQovKioNCiAqIEJhc2UgY2xhc3Mgd2l0aCBmYWN0b3J5IG1ldGhvZCBmb3IgYmFja2VuZCBkcml2ZXINCiAqDQogKiBUaGUgbWFpbiAiSW1hZ2VfVHJhbnNmb3JtIiBjbGFzcyBpcyBhIGNvbnRhaW5lciBhbmQgYmFzZSBjbGFzcyB3aGljaA0KICogcHJvdmlkZXMgYSBzdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBhbiBJbWFnZSBvYmplY3QgYXMgd2VsbCBhcw0KICogc29tZSB1dGlsaXR5IGZ1bmN0aW9ucyAobWF0aHMpIGNvbW1vbiB0byBhbGwgcGFydHMgb2YgSW1hZ2VfVHJhbnNmb3JtLg0KICoNCiAqIEBjYXRlZ29yeSAgSW1hZ2UNCiAqIEBwYWNrYWdlICAgSW1hZ2VfVHJhbnNmb3JtDQogKiBAYXV0aG9yICAgIEFsYW4gS25vd2xlcyA8YWxhbkBha2JraG9tZS5jb20+DQogKiBAYXV0aG9yICAgIFBldGVyIEJvd3llciA8cGV0ZXJAbWFwbGVkZXNpZ24uY28udWs+DQogKiBAYXV0aG9yICAgIFBoaWxpcHBlIEphdXNpb25zIDxQaGlsaXBwZS5KYXVzaW9uc0AxMWFiYWN1cy5jb20+DQogKiBAY29weXJpZ2h0IDIwMDItMjAwNyBUaGUgUEhQIEdyb3VwDQogKiBAbGljZW5zZSAgIGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQgIFBIUCBMaWNlbnNlIDMuMA0KICogQHZlcnNpb24gICBSZWxlYXNlOiBAcGFja2FnZV92ZXJzaW9uQA0KICogQGxpbmsgICAgICBodHRwOi8vcGVhci5waHAubmV0L3BhY2thZ2UvSW1hZ2VfVHJhbnNmb3JtDQogKiBAc2luY2UgICAgIFBIUCA0LjANCiAqLw0KY2xhc3MgSW1hZ2VfVHJhbnNmb3JtDQp7DQogICAgLyoqDQogICAgICogTmFtZSBvZiB0aGUgaW1hZ2UgZmlsZQ0KICAgICAqIEB2YXIgc3RyaW5nDQogICAgICovDQogICAgdmFyICRpbWFnZSA9ICcnOw0KDQogICAgLyoqDQogICAgICogVHlwZSBvZiB0aGUgaW1hZ2UgZmlsZSAoZWcuIGpwZywgZ2lmIHBuZyAuLi4pDQogICAgICogQHZhciBzdHJpbmcNCiAgICAgKi8NCiAgICB2YXIgJHR5cGUgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIE9yaWdpbmFsIGltYWdlIHdpZHRoIGluIHggZGlyZWN0aW9uDQogICAgICogQHZhciBpbnQNCiAgICAgKi8NCiAgICB2YXIgJGltZ194ID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBPcmlnaW5hbCBpbWFnZSB3aWR0aCBpbiB5IGRpcmVjdGlvbg0KICAgICAqIEB2YXIgaW50DQogICAgICovDQogICAgdmFyICRpbWdfeSA9ICcnOw0KDQogICAgLyoqDQogICAgICogTmV3IGltYWdlIHdpZHRoIGluIHggZGlyZWN0aW9uDQogICAgICogQHZhciBpbnQNCiAgICAgKi8NCiAgICB2YXIgJG5ld194ID0gJyc7DQoNCiAgICAvKioNCiAgICAgKiBOZXcgaW1hZ2Ugd2lkdGggaW4geSBkaXJlY3Rpb24NCiAgICAgKiBAdmFyIGludA0KICAgICAqLw0KICAgIHZhciAkbmV3X3kgPSAnJzsNCg0KICAgIC8qKg0KICAgICAqIFBhdGggdG8gdGhlIGxpYnJhcnkgdXNlZA0KICAgICAqIGUuZy4gL3Vzci9sb2NhbC9JbWFnZU1hZ2ljay9iaW4vIG9yDQogICAgICogL3Vzci9sb2NhbC9uZXRwYm0vDQogICAgICovDQogICAgdmFyICRsaWJfcGF0aCA9ICcnOw0KDQogICAgLyoqDQogICAgICogRmxhZyB0byB3YXJuIGlmIGltYWdlIGhhcyBiZWVuIHJlc2l6ZWQgbW9yZSB0aGFuIG9uY2UgYmVmb3JlIGRpc3BsYXlpbmcNCiAgICAgKiBvciBzYXZpbmcuDQogICAgICovDQogICAgdmFyICRyZXNpemVkID0gZmFsc2U7DQoNCiAgICAvKioNCiAgICAgKiBAdmFyIGFycmF5IEdlbmVyYWwgb3B0aW9ucw0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgdmFyICRfb3B0aW9ucyA9IGFycmF5KA0KICAgICAgICAncXVhbGl0eScgICAgID0+IDc1LA0KICAgICAgICAnc2NhbGVNZXRob2QnID0+ICdzbW9vdGgnLA0KICAgICAgICAnY2FudmFzQ29sb3InID0+IGFycmF5KDI1NSwgMjU1LCAyNTUpLA0KICAgICAgICAncGVuY2lsQ29sb3InID0+IGFycmF5KDAsIDAsIDApLA0KICAgICAgICAndGV4dENvbG9yJyAgID0+IGFycmF5KDAsIDAsIDApDQogICAgICAgICk7DQoNCiAgICAvKioNCiAgICAgKiBGbGFnIGZvciB3aGV0aGVyIHNldHRpbmdzIHNob3VsZCBiZSBkaXNjYXJkZWQgb24gc2F2aW5nL2Rpc3BsYXkgb2YgaW1hZ2UNCiAgICAgKiBAdmFyIGJvb2wNCiAgICAgKiBAc2VlIEltYWdlX1RyYW5zZm9ybTo6a2VlcFNldHRpbmdzT25TYXZlDQogICAgICovDQogICAgdmFyICRrZWVwX3NldHRpbmdzX29uX3NhdmUgPSBmYWxzZTsNCg0KICAgIC8qKg0KICAgICAqIFN1cHBvcnRlZCBpbWFnZSB0eXBlcw0KICAgICAqIEB2YXIgYXJyYXkNCiAgICAgKiBAYWNjZXNzIHByb3RlY3RlZA0KICAgICAqLw0KICAgIHZhciAkX3N1cHBvcnRlZF9pbWFnZV90eXBlcyA9IGFycmF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBJbml0aWFsaXphdGlvbiBlcnJvciB0cmFja2luZw0KICAgICAqIEB2YXIgb2JqZWN0DQogICAgICogQGFjY2VzcyBwcml2YXRlDQogICAgICoqLw0KICAgIHZhciAkX2Vycm9yID0gbnVsbDsNCg0KICAgIC8qKg0KICAgICAqIGFzc29jaWF0aXZlIGFycmF5IHRoYXQgdHJhY2tzIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcw0KICAgICAqIChmb3IgZHJpdmVycyB1c2luZyBzaGVsbCBpbnRlcmZhY2UgYW5kIGEgdGlueSBwZXJmb3JtYW5jZQ0KICAgICAqIGltcHJvdmVtZW50IGlmIHRoZSBjbGVhcnN0YXRjYWNoZSgpIGlzIHVzZWQpDQogICAgICogQHZhciBhcnJheQ0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgdmFyICRfcHJvZ3JhbXMgPSBhcnJheSgpOw0KDQogICAgIC8qKg0KICAgICAgKiBEZWZhdWx0IHBhcmFtZXRlcnMgdXNlZCBpbiB0aGUgYWRkVGV4dCBtZXRob2RzLg0KICAgICAgKi8NCiAgICB2YXIgJGRlZmF1bHRfdGV4dF9wYXJhbXMgPSBhcnJheSgNCiAgICAgICAgJ3RleHQnID0+ICdEZWZhdWx0IHRleHQnLA0KICAgICAgICAneCcgICAgID0+IDEwLA0KICAgICAgICAneScgICAgID0+IDIwLA0KICAgICAgICAnY29sb3InID0+ICdyZWQnLA0KICAgICAgICAnZm9udCcgID0+ICdBcmlhbC50dGYnLA0KICAgICAgICAnc2l6ZScgID0+IDEyLA0KICAgICAgICAnYW5nbGUnID0+IDAsDQogICAgICAgICdyZXNpemVfZmlyc3QnID0+IGZhbHNlDQogICAgKTsNCg0KICAgIC8qKg0KICAgICAqIENyZWF0ZXMgYSBuZXcgSW1hZ2VfVHJhbnNmb3JtIG9iamVjdA0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkZHJpdmVyIG5hbWUgb2YgZHJpdmVyIGNsYXNzIHRvIGluaXRpYWxpemUuIElmIG5vIGRyaXZlcg0KICAgICAqICAgICAgICAgICAgICAgaXMgc3BlY2lmaWVkIHRoZSBmYWN0b3J5IHdpbGwgYXR0ZW1wdCB0byB1c2UgJ0ltYWdpY2snIGZpcnN0DQogICAgICogICAgICAgICAgICAgICB0aGVuICdHRCcgc2Vjb25kLCB0aGVuICdJbWxpYicgbGFzdA0KICAgICAqDQogICAgICogQHJldHVybiBvYmplY3QgYW4gSW1hZ2VfVHJhbnNmb3JtIG9iamVjdCwgb3IgUEVBUl9FcnJvciBvbiBlcnJvcg0KICAgICAqDQogICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkNCiAgICAgKiBAc2VlIEltYWdlX1RyYW5zZm9ybTo6c2V0T3B0aW9uKCkNCiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uICZmYWN0b3J5KCRkcml2ZXIpDQogICAgew0KICAgICAgICBpZiAoJycgPT0gJGRyaXZlcikgew0KICAgICAgICAgICAgZGllKCJObyBpbWFnZSBsaWJyYXJ5IHNwZWNpZmllZC4uLiBhYm9ydGluZy4gIFlvdSBtdXN0IGNhbGwgOjpmYWN0b3J5KCkgd2l0aCBvbmUgcGFyYW1ldGVyLCB0aGUgbGlicmFyeSB0byBsb2FkLiIpOw0KDQogICAgICAgIH0NCg0KICAgICAgICBpbmNsdWRlX29uY2UgKGRpcm5hbWUoX19GSUxFX18pLiIvVHJhbnNmb3JtLyRkcml2ZXIucGhwIik7DQoNCiAgICAgICAgJGNsYXNzbmFtZSA9ICJJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX3skZHJpdmVyfSI7DQogICAgICAgICRvYmogPSBuZXcgJGNsYXNzbmFtZTsNCiAgICAgICAgJG9iai0+dWlkID0gbWQ1KCRfU0VSVkVSWydSRU1PVEVfQUREUiddKTsNCiAgICAgICAgcmV0dXJuICRvYmo7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucy9zZXRzIGFuIGVycm9yIHdoZW4gdGhlIGluc3RhbmNlIGNvdWxkbid0IGluaXRpYWxpemUgcHJvcGVybHkNCiAgICAgKg0KICAgICAqIEBwYXJhbSBvYmplY3QgJGVycm9yIFBFQVJfRXJyb3Igb2JqZWN0IHdoZW4gc2V0dGluZyBhbiBlcnJvcg0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCBGQUxTRSBvciBQRUFSX0Vycm9yIG9iamVjdA0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgZnVuY3Rpb24gJmlzRXJyb3IoJGVycm9yID0gbnVsbCkNCiAgICB7DQogICAgICAgIGlmICghaXNfbnVsbCgkZXJyb3IpKSB7DQogICAgICAgICAgICAkdGhpcy0+X2Vycm9yID0mICRlcnJvcjsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJHRoaXMtPl9lcnJvcjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXNpemVzIHRoZSBpbWFnZSBpbiB0aGUgWCBhbmQvb3IgWSBkaXJlY3Rpb24ocykNCiAgICAgKg0KICAgICAqIElmIGVpdGhlciBpcyAwIGl0IHdpbGwga2VlcCB0aGUgb3JpZ2luYWwgc2l6ZSBmb3IgdGhhdCBkaW1lbnNpb24NCiAgICAgKg0KICAgICAqIEBwYXJhbSBtaXhlZCAkbmV3X3ggICAoMCwgbnVtYmVyLCBwZXJjZW50YWdlIDEwJSBvciAwLjEpDQogICAgICogQHBhcmFtIG1peGVkICRuZXdfeSAgICgwLCBudW1iZXIsIHBlcmNlbnRhZ2UgMTAlIG9yIDAuMSkNCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgT3B0aW9ucw0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCBUUlVFIG9yIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiByZXNpemUoJG5ld194ID0gMCwgJG5ld195ID0gMCwgJG9wdGlvbnMgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgLy8gMCBtZWFucyBrZWVwIG9yaWdpbmFsIHNpemUNCiAgICAgICAgJG5ld194ID0gKDAgPT0gJG5ld194KQ0KICAgICAgICAgICAgICAgICA/ICR0aGlzLT5pbWdfeA0KICAgICAgICAgICAgICAgICA6ICR0aGlzLT5fcGFyc2Vfc2l6ZSgkbmV3X3gsICR0aGlzLT5pbWdfeCk7DQogICAgICAgICRuZXdfeSA9ICgwID09ICRuZXdfeSkNCiAgICAgICAgICAgICAgICAgPyAkdGhpcy0+aW1nX3kNCiAgICAgICAgICAgICAgICAgOiAkdGhpcy0+X3BhcnNlX3NpemUoJG5ld195LCAkdGhpcy0+aW1nX3kpOw0KDQogICAgICAgIC8vIE5vdyBkbyB0aGUgbGlicmFyeSBzcGVjaWZpYyByZXNpemluZy4NCiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzaXplKCRuZXdfeCwgJG5ld195LCAkb3B0aW9ucyk7DQogICAgfSAvLyBFbmQgcmVzaXplDQoNCiAgICAvKioNCiAgICAgKiBTY2FsZXMgdGhlIGltYWdlIHRvIHRoZSBzcGVjaWZpZWQgd2lkdGgNCiAgICAgKg0KICAgICAqIFRoaXMgbWV0aG9kIHByZXNlcnZlcyB0aGUgYXNwZWN0IHJhdGlvDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICRuZXdfeCBTaXplIHRvIHNjYWxlIFgtZGltZW5zaW9uIHRvDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHNjYWxlQnlYKCRuZXdfeCkNCiAgICB7DQogICAgICAgIGlmICgkbmV3X3ggPD0gMCkgew0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ05ldyBzaXplIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9PVVRPRkJPVU5EKTsNCiAgICAgICAgfQ0KICAgICAgICAkbmV3X3kgPSByb3VuZCgoJG5ld194IC8gJHRoaXMtPmltZ194KSAqICR0aGlzLT5pbWdfeSwgMCk7DQogICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc2l6ZShtYXgoMSwgJG5ld194KSwgbWF4KDEsICRuZXdfeSkpOw0KICAgIH0gLy8gRW5kIHNjYWxlQnlYDQoNCiAgICAvKioNCiAgICAgKiBBbGlhcyBmb3IgcmVzaXplKCkNCiAgICAgKg0KICAgICAqIEBzZWUgcmVzaXplKCkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBzY2FsZUJ5WFkoJG5ld194ID0gMCwgJG5ld195ID0gMCwgJG9wdGlvbnMgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXNpemUoJG5ld194LCAkbmV3X3ksICRvcHRpb25zKTsNCiAgICB9IC8vIEVuZCBzY2FsZUJ5WFkNCg0KICAgIC8qKg0KICAgICAqIFNjYWxlcyB0aGUgaW1hZ2UgdG8gdGhlIHNwZWNpZmllZCBoZWlnaHQuDQogICAgICoNCiAgICAgKiBUaGlzIG1ldGhvZCBwcmVzZXJ2ZXMgdGhlIGFzcGVjdCByYXRpbw0KICAgICAqDQogICAgICogQHBhcmFtIGludCAkbmV3X3kgU2l6ZSB0byBzY2FsZSBZLWRpbWVuc2lvbiB0bw0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCBUUlVFIG9yIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBzY2FsZUJ5WSgkbmV3X3kpDQogICAgew0KICAgICAgICBpZiAoJG5ld195IDw9IDApIHsNCiAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdOZXcgc2l6ZSBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfT1VUT0ZCT1VORCk7DQogICAgICAgIH0NCiAgICAgICAgJG5ld194ID0gcm91bmQoKCRuZXdfeSAvICR0aGlzLT5pbWdfeSkgKiAkdGhpcy0+aW1nX3gsIDApOw0KICAgICAgICByZXR1cm4gJHRoaXMtPl9yZXNpemUobWF4KDEsICRuZXdfeCksIG1heCgxLCAkbmV3X3kpKTsNCiAgICB9IC8vIEVuZCBzY2FsZUJ5WQ0KDQogICAgLyoqDQogICAgICogU2NhbGVzIGFuIGltYWdlIGJ5IGEgcGVyY2VudGFnZSwgZmFjdG9yIG9yIGEgZ2l2ZW4gbGVuZ3RoDQogICAgICoNCiAgICAgKiBUaGlzIG1ldGhvZCBwcmVzZXJ2ZXMgdGhlIGFzcGVjdCByYXRpbw0KICAgICAqDQogICAgICogQHBhcmFtIG1peGVkICRzaXplIChudW1iZXIsIHBlcmNlbnRhZ2UgMTAlIG9yIDAuMSkNCiAgICAgKg0KICAgICAqIEByZXR1cm4gbWl4ZWQgVFJVRSBvciBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICogQHNlZSBzY2FsZUJ5UGVyY2VudGFnZSwgc2NhbGVCeUZhY3Rvciwgc2NhbGVCeUxlbmd0aA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHNjYWxlKCRzaXplKQ0KICAgIHsNCiAgICAgICAgaWYgKChzdHJsZW4oJHNpemUpID4gMSkgJiYgKHN1YnN0cigkc2l6ZSwgLTEpID09ICclJykpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2NhbGVCeVBlcmNlbnRhZ2Uoc3Vic3RyKCRzaXplLCAwLCAtMSkpOw0KICAgICAgICB9IGVsc2VpZiAoJHNpemUgPCAxKSB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNjYWxlQnlGYWN0b3IoJHNpemUpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zY2FsZUJ5TGVuZ3RoKCRzaXplKTsNCiAgICAgICAgfQ0KICAgIH0gLy8gRW5kIHNjYWxlDQoNCiAgICAvKioNCiAgICAgKiBTY2FsZXMgYW4gaW1hZ2UgdG8gYSBwZXJjZW50YWdlIG9mIGl0cyBvcmlnaW5hbCBzaXplLiAgRm9yIGV4YW1wbGUsIGlmDQogICAgICogbXkgaW1hZ2Ugd2FzIDY0MHg0ODAgYW5kIEkgY2FsbGVkIHNjYWxlQnlQZXJjZW50YWdlKDEwKSB0aGVuIHRoZSBpbWFnZQ0KICAgICAqIHdvdWxkIGJlIHJlc2l6ZWQgdG8gNjR4NDgNCiAgICAgKg0KICAgICAqIEBwYXJhbSBpbnQgJHNpemUgUGVyY2VudGFnZSBvZiBvcmlnaW5hbCBzaXplIHRvIHNjYWxlIHRvDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHNjYWxlQnlQZXJjZW50YWdlKCRzaXplKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5zY2FsZUJ5RmFjdG9yKCRzaXplIC8gMTAwKTsNCiAgICB9IC8vIEVuZCBzY2FsZUJ5UGVyY2VudGFnZQ0KDQogICAgLyoqDQogICAgICogU2NhbGVzIGFuIGltYWdlIHRvIGEgZmFjdG9yIG9mIGl0cyBvcmlnaW5hbCBzaXplLiAgRm9yIGV4YW1wbGUsIGlmDQogICAgICogbXkgaW1hZ2Ugd2FzIDY0MHg0ODAgYW5kIEkgY2FsbGVkIHNjYWxlQnlGYWN0b3IoMC41KSB0aGVuIHRoZSBpbWFnZQ0KICAgICAqIHdvdWxkIGJlIHJlc2l6ZWQgdG8gMzIweDI0MC4NCiAgICAgKg0KICAgICAqIEBwYXJhbSBmbG9hdCAkc2l6ZSBGYWN0b3Igb2Ygb3JpZ2luYWwgc2l6ZSB0byBzY2FsZSB0bw0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCBUUlVFIG9yIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBzY2FsZUJ5RmFjdG9yKCRzaXplKQ0KICAgIHsNCiAgICAgICAgaWYgKCRzaXplIDw9IDApIHsNCiAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdOZXcgc2l6ZSBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfT1VUT0ZCT1VORCk7DQogICAgICAgIH0NCiAgICAgICAgJG5ld194ID0gcm91bmQoJHNpemUgKiAkdGhpcy0+aW1nX3gsIDApOw0KICAgICAgICAkbmV3X3kgPSByb3VuZCgkc2l6ZSAqICR0aGlzLT5pbWdfeSwgMCk7DQogICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc2l6ZShtYXgoMSwgJG5ld194KSwgbWF4KDEsICRuZXdfeSkpOw0KICAgIH0gLy8gRW5kIHNjYWxlQnlGYWN0b3INCg0KICAgIC8qKg0KICAgICAqIFNjYWxlcyBhbiBpbWFnZSBzbyB0aGF0IHRoZSBsb25nZXN0IHNpZGUgaGFzIHRoZSBzcGVjaWZpZWQgZGltZW5zaW9uLg0KICAgICAqDQogICAgICogVGhpcyBtZXRob2QgcHJlc2VydmVzIHRoZSBhc3BlY3QgcmF0aW8NCiAgICAgKg0KICAgICAqIEBwYXJhbSBpbnQgJHNpemUgTWF4IGRpbWVuc2lvbiBpbiBwaXhlbHMNCiAgICAgKg0KICAgICAqIEByZXR1cm4gbWl4ZWQgVFJVRSBvciBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gc2NhbGVNYXhMZW5ndGgoJHNpemUpDQogICAgew0KICAgICAgICBpZiAoJHNpemUgPD0gMCkgew0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ05ldyBzaXplIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9PVVRPRkJPVU5EKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJHRoaXMtPmltZ194ID49ICR0aGlzLT5pbWdfeSkgew0KICAgICAgICAgICAgJG5ld194ID0gJHNpemU7DQogICAgICAgICAgICAkbmV3X3kgPSByb3VuZCgoJG5ld194IC8gJHRoaXMtPmltZ194KSAqICR0aGlzLT5pbWdfeSwgMCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkbmV3X3kgPSAkc2l6ZTsNCiAgICAgICAgICAgICRuZXdfeCA9IHJvdW5kKCgkbmV3X3kgLyAkdGhpcy0+aW1nX3kpICogJHRoaXMtPmltZ194LCAwKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJHRoaXMtPl9yZXNpemUobWF4KDEsICRuZXdfeCksIG1heCgxLCAkbmV3X3kpKTsNCiAgICB9IC8vIEVuZCBzY2FsZU1heExlbmd0aA0KDQogICAgLyoqDQogICAgICogQWxpYXMgZm9yIHNjYWxlTWF4TGVuZ3RoDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICRzaXplIE1heCBkaW1lbnNpb24gaW4gcGl4ZWxzDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqIEBzZWUgc2NhbGVNYXhMZW5ndGgoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHNjYWxlQnlMZW5ndGgoJHNpemUpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPnNjYWxlTWF4TGVuZ3RoKCRzaXplKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBGaXRzIHRoZSBpbWFnZSBpbiB0aGUgc3BlY2lmaWVkIGJveCBzaXplDQogICAgICoNCiAgICAgKiBJZiB0aGUgaW1hZ2UgaXMgYmlnZ2VyIHRoYW4gdGhlIGJveCBzcGVjaWZpZWQgYnkgJHdpZHRoIGFuZCAkaGVpZ2h0LA0KICAgICAqIGl0IHdpbGwgYmUgc2NhbGVkIGRvd24gdG8gZml0IGluc2lkZSBvZiBpdC4NCiAgICAgKiBJZiB0aGUgaW1hZ2UgaXMgc21hbGxlciwgbm90aGluZyBpcyBkb25lLg0KICAgICAqDQogICAgICogQHBhcmFtIGludGVnZXIgJHdpZHRoICBXaWR0aCBvZiB0aGUgYm94IGluIHBpeGVscw0KICAgICAqIEBwYXJhbSBpbnRlZ2VyICRoZWlnaHQgSGVpZ2h0IG9mIHRoZSBib3ggaW4gcGl4ZWxzDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9yIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBmaXQoJHdpZHRoLCAkaGVpZ2h0KQ0KICAgIHsNCiAgICAgICAgaWYgKCR3aWR0aCA8PSAwIHx8ICRoZWlnaHQgPD0gMCkgew0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoIkludmFsaWQgYXJndW1lbnRzLiIsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0FSR1VNRU5UKTsNCiAgICAgICAgfQ0KICAgICAgICAkeCA9ICR0aGlzLT5pbWdfeCAvICR3aWR0aDsNCiAgICAgICAgJHkgPSAkdGhpcy0+aW1nX3kgLyAkaGVpZ2h0Ow0KICAgICAgICBpZiAoJHggPD0gMSAmJiAkeSA8PSAxKSB7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfSBlbHNlaWYgKCR4ID4gJHkpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2NhbGVCeVgoJHdpZHRoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2NhbGVCeVkoJGhlaWdodCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBUaGlzIHdvcmtzIGFzIHBlciBmaXQsIGJ1dCBjcmVhdGVzIHRoZSBjYW52YXMgb2Ygc2l6ZSAkd2lkdGggeCAkaGVpZ2h0DQogICAgICogYW5kIHBvc2l0aW9ucyB0aGUgcmVzaXplZCBpbWFnZSBvbiBpdCwgYnkgZGVmYXVsdCBpbiB0aGUgY2VudHJlLg0KICAgICAqDQogICAgICogQHBhcmFtIHVua25vd25fdHlwZSAkd2lkdGgNCiAgICAgKiBAcGFyYW0gdW5rbm93bl90eXBlICRoZWlnaHQNCiAgICAgKiBAcGFyYW0gdW5rbm93bl90eXBlICRwb3NuDQogICAgICoNCiAgICAgKiBAcmV0dXJuIHVua25vd24NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBmaXRPbkNhbnZhcygkd2lkdGgsICRoZWlnaHQsICRwb3NuPSdjZW50ZXInKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ2ZpdE9uQ2FudmFzKCkgbWV0aG9kIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmVyJywNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRml0cyB0aGUgaW1hZ2UgaW4gdGhlIHNwZWNpZmllZCB3aWR0aA0KICAgICAqDQogICAgICogSWYgdGhlIGltYWdlIGlzIHdpZGVyIHRoYW4gdGhlIHdpZHRoIHNwZWNpZmllZCBieSAkd2lkdGgsDQogICAgICogaXQgd2lsbCBiZSBzY2FsZWQgZG93biB0byBmaXQgaW5zaWRlIG9mIGl0Lg0KICAgICAqIElmIHRoZSBpbWFnZSBpcyBzbWFsbGVyLCBub3RoaW5nIGlzIGRvbmUuDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkd2lkdGggTWF4aW11bSB3aWR0aCBpbiBwaXhlbHMNCiAgICAgKg0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGZpdFgoJHdpZHRoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICgkdGhpcy0+aW1nX3ggPD0gJHdpZHRoKSA/IHRydWUgOiAkdGhpcy0+c2NhbGVCeVgoJHdpZHRoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBGaXRzIHRoZSBpbWFnZSBpbiB0aGUgc3BlY2lmaWVkIGhlaWdodA0KICAgICAqDQogICAgICogSWYgdGhlIGltYWdlIGlzIHRhbGxlciB0aGFuIHRoZSBoZWlnaHQgc3BlY2lmaWVkIGJ5ICRoZWlnaHQsDQogICAgICogaXQgd2lsbCBiZSBzY2FsZWQgZG93biB0byBmaXQgaW5zaWRlIG9mIGl0Lg0KICAgICAqIElmIHRoZSBpbWFnZSBpcyBzbWFsbGVyLCBub3RoaW5nIGlzIGRvbmUuDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkaGVpZ2h0IE1heGltdW0gaGVpZ2h0IGluIHBpeGVscw0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZml0WSgkaGVpZ2h0KQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICgkdGhpcy0+aW1nX3kgPD0gJGhlaWdodCkgPyB0cnVlIDogJHRoaXMtPnNjYWxlQnlZKCRoZWlnaHQpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldHMgb25lIG9wdGlvbnMNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgIE5hbWUgb2Ygb3B0aW9uDQogICAgICogQHBhcmFtIG1peGVkICAkdmFsdWUgVmFsdWUgb2Ygb3B0aW9uDQogICAgICoNCiAgICAgKiBAcmV0dXJuIHZvaWQNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqIEBzZWUgc2V0T3B0aW9ucygpDQogICAgICovDQogICAgZnVuY3Rpb24gc2V0T3B0aW9uKCRuYW1lLCAkdmFsdWUpDQogICAgew0KICAgICAgICAkdGhpcy0+X29wdGlvbnNbJG5hbWVdID0gJHZhbHVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldHMgbXVsdGlwbGUgb3B0aW9ucyBhdCBvbmNlDQogICAgICoNCiAgICAgKiBBc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zOg0KICAgICAqICAtIHF1YWxpdHkgICAgIChJbnRlZ2VyOiAwOiBwb29yIC0gMTAwOiBiZXN0KQ0KICAgICAqICAtIHNjYWxlTWV0aG9kICgnc21vb3RoJywgJ3BpeGVsJykNCiAgICAgKg0KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBcnJheSBvZiBvcHRpb25zDQogICAgICoNCiAgICAgKiBAcmV0dXJuIHZvaWQNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHNldE9wdGlvbnMoJG9wdGlvbnMpDQogICAgew0KICAgICAgICAkdGhpcy0+X29wdGlvbnMgPSBhcnJheV9tZXJnZSgkdGhpcy0+X29wdGlvbnMsICRvcHRpb25zKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXRzIHRoZSBpbWFnZSB0eXBlIChpbiBsb3dlcmNhc2UgbGV0dGVycyksIHRoZSBpbWFnZSBoZWlnaHQgYW5kIHdpZHRoLg0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkaW1hZ2UgSW1hZ2UgZmlsZW5hbWUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gbWl4ZWQgVFJVRSBvciBQRUFSX2Vycm9yDQogICAgICogQGFjY2VzcyBwcm90ZWN0ZWQNCiAgICAgKiBAc2VlIFBIUF9Db21wYXQ6OmltYWdlX3R5cGVfdG9fbWltZV90eXBlKCkNCiAgICAgKiBAbGluayBodHRwOi8vcGhwLm5ldC9nZXRpbWFnZXNpemUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfZ2V0X2ltYWdlX2RldGFpbHMoJGltYWdlKQ0KICAgIHsNCiAgICAgICAgJGRhdGEgPSBAZ2V0aW1hZ2VzaXplKCRpbWFnZSk7DQogICAgICAgIC8vICAxID0gR0lGLCAgIDIgPSBKUEcsICAzID0gUE5HLCAgNCA9IFNXRiwgIDUgPSBQU0QsICA2ID0gQk1QLA0KICAgICAgICAvLyAgNyA9IFRJRkYgKGludGVsIGJ5dGUgb3JkZXIpLCAgIDggPSBUSUZGIChtb3Rvcm9sYSBieXRlIG9yZGVyKSwNCiAgICAgICAgLy8gIDkgPSBKUEMsICAxMCA9IEpQMiwgMTEgPSBKUFgsIDEyID0gSkIyLCAxMyA9IFNXQywgMTQgPSBJRkYsDQogICAgICAgIC8vIDE1ID0gV0JNUCwgMTYgPSBYQk0NCiAgICAgICAgaWYgKCFpc19hcnJheSgkZGF0YSkpIHsNCiAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCJDYW5ub3QgZmV0Y2ggaW1hZ2Ugb3IgaW1hZ2VzIGRldGFpbHMuIiwgdHJ1ZSk7DQogICAgICAgIH0NCg0KICAgICAgICBzd2l0Y2ggKCRkYXRhWzJdKSB7DQogICAgICAgICAgICBjYXNlIElNQUdFVFlQRV9HSUY6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAnZ2lmJzsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX0pQRUc6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAnanBlZyc7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlIElNQUdFVFlQRV9QTkc6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAncG5nJzsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX1NXRjoNCiAgICAgICAgICAgICAgICAkdHlwZSA9ICdzd2YnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBJTUFHRVRZUEVfUFNEOg0KICAgICAgICAgICAgICAgICR0eXBlID0gJ3BzZCc7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlIElNQUdFVFlQRV9CTVA6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAnYm1wJzsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX1RJRkZfSUk6DQogICAgICAgICAgICBjYXNlIElNQUdFVFlQRV9USUZGX01NOg0KICAgICAgICAgICAgICAgICR0eXBlID0gJ3RpZmYnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBJTUFHRVRZUEVfSlBDOg0KICAgICAgICAgICAgICAgICR0eXBlID0gJ2pwYyc7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlIElNQUdFVFlQRV9KUDI6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAnanAyJzsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX0pQWDoNCiAgICAgICAgICAgICAgICAkdHlwZSA9ICdqcHgnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBJTUFHRVRZUEVfSkIyOg0KICAgICAgICAgICAgICAgICR0eXBlID0gJ2piMic7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlIElNQUdFVFlQRV9TV0M6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAnc3djJzsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX0lGRjoNCiAgICAgICAgICAgICAgICAkdHlwZSA9ICdpZmYnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSBJTUFHRVRZUEVfV0JNUDoNCiAgICAgICAgICAgICAgICAkdHlwZSA9ICd3Ym1wJzsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX1hCTToNCiAgICAgICAgICAgICAgICAkdHlwZSA9ICd4Ym0nOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcigiQ2Fubm90IHJlY29nbml6ZSBpbWFnZSBmb3JtYXQiLA0KICAgICAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5pbWdfeCA9ICR0aGlzLT5uZXdfeCA9ICRkYXRhWzBdOw0KICAgICAgICAkdGhpcy0+aW1nX3kgPSAkdGhpcy0+bmV3X3kgPSAkZGF0YVsxXTsNCiAgICAgICAgJHRoaXMtPnR5cGUgID0gJHR5cGU7DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgbWF0Y2hpbmcgSU1BR0VUWVBFXyogY29uc3RhbnQgZm9yIGEgZ2l2ZW4gaW1hZ2UgdHlwZQ0KICAgICAqDQogICAgICogQHBhcmFtIG1peGVkICR0eXBlIFN0cmluZyAoR0lGLCBKUEcsLi4uKQ0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCBzdHJpbmcgb3IgaW50ZWdlciBvciBpbnB1dCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICogQHNlZSBQSFBfQ29tcGF0OjppbWFnZV90eXBlX3RvX21pbWVfdHlwZSgpDQogICAgICoqLw0KICAgIGZ1bmN0aW9uIF9jb252ZXJ0X2ltYWdlX3R5cGUoJHR5cGUpDQogICAgew0KICAgICAgICBzd2l0Y2ggKHN0cnRvbG93ZXIoJHR5cGUpKSB7DQogICAgICAgICAgICBjYXNlICdnaWYnOg0KICAgICAgICAgICAgICAgIHJldHVybiBJTUFHRVRZUEVfR0lGOw0KICAgICAgICAgICAgY2FzZSAnanBlZyc6DQogICAgICAgICAgICBjYXNlICdqcGcnOg0KICAgICAgICAgICAgICAgIHJldHVybiBJTUFHRVRZUEVfSlBFRzsNCiAgICAgICAgICAgIGNhc2UgJ3BuZyc6DQogICAgICAgICAgICAgICAgcmV0dXJuIElNQUdFVFlQRV9QTkc7DQogICAgICAgICAgICBjYXNlICdzd2YnOg0KICAgICAgICAgICAgICAgIHJldHVybiBJTUFHRVRZUEVfU1dGOw0KICAgICAgICAgICAgY2FzZSAncHNkJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gSU1BR0VUWVBFX1BTRDsNCiAgICAgICAgICAgIGNhc2UgJ2JtcCc6DQogICAgICAgICAgICAgICAgcmV0dXJuIElNQUdFVFlQRV9CTVA7DQogICAgICAgICAgICBjYXNlICd0aWZmJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gSU1BR0VUWVBFX1RJRkZfSUk7DQogICAgICAgICAgICAgICAgLy9JTUFHRVRZUEVfVElGRl9NTTsNCiAgICAgICAgICAgIGNhc2UgJ2pwYyc6DQogICAgICAgICAgICAgICAgcmV0dXJuIElNQUdFVFlQRV9KUEM7DQogICAgICAgICAgICBjYXNlICdqcDInOg0KICAgICAgICAgICAgICAgIHJldHVybiBJTUFHRVRZUEVfSlAyOw0KICAgICAgICAgICAgY2FzZSAnanB4JzoNCiAgICAgICAgICAgICAgICByZXR1cm4gSU1BR0VUWVBFX0pQWDsNCiAgICAgICAgICAgIGNhc2UgJ2piMic6DQogICAgICAgICAgICAgICAgcmV0dXJuIElNQUdFVFlQRV9KQjI7DQogICAgICAgICAgICBjYXNlICdzd2MnOg0KICAgICAgICAgICAgICAgIHJldHVybiBJTUFHRVRZUEVfU1dDOw0KICAgICAgICAgICAgY2FzZSAnaWZmJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gSU1BR0VUWVBFX0lGRjsNCiAgICAgICAgICAgIGNhc2UgJ3dibXAnOg0KICAgICAgICAgICAgICAgIHJldHVybiBJTUFHRVRZUEVfV0JNUDsNCiAgICAgICAgICAgIGNhc2UgJ3hibSc6DQogICAgICAgICAgICAgICAgcmV0dXJuIElNQUdFVFlQRV9YQk07DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIHJldHVybiAkdHlwZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAoaXNzZXQoJHR5cGVzWyR0ID0gc3RydG9sb3dlcigkdHlwZSldKSkgPyAkdHlwZXNbJHRdIDogJHR5cGU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUGFyc2VzIGlucHV0IGZvciBudW1iZXIgZm9ybWF0IGFuZCBjb252ZXJ0DQogICAgICoNCiAgICAgKiBJZiBlaXRoZXIgcGFyYW1ldGVyIGlzIDAgaXQgd2lsbCBiZSBzY2FsZWQgcHJvcG9ydGlvbmFsbHkNCiAgICAgKg0KICAgICAqIEBwYXJhbSBtaXhlZCAkbmV3X3NpemUgKDAsIG51bWJlciwgcGVyY2VudGFnZSAxMCUgb3IgMC4xKQ0KICAgICAqIEBwYXJhbSBpbnQgICAkb2xkX3NpemUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gbWl4ZWQgSW50ZWdlciBvciBQRUFSX2Vycm9yDQogICAgICogQGFjY2VzcyBwcm90ZWN0ZWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfcGFyc2Vfc2l6ZSgkbmV3X3NpemUsICRvbGRfc2l6ZSkNCiAgICB7DQogICAgICAgIGlmIChzdWJzdHIoJG5ld19zaXplLCAtMSkgPT0gJyUnKSB7DQogICAgICAgICAgICAkbmV3X3NpemUgPSBzdWJzdHIoJG5ld19zaXplLCAwLCAtMSk7DQogICAgICAgICAgICAkbmV3X3NpemUgPSAkbmV3X3NpemUgLyAxMDA7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRuZXdfc2l6ZSA+IDEpIHsNCiAgICAgICAgICAgIHJldHVybiAoaW50KSAkbmV3X3NpemU7DQogICAgICAgIH0gZWxzZWlmICgkbmV3X3NpemUgPT0gMCkgew0KICAgICAgICAgICAgcmV0dXJuIChpbnQpICRvbGRfc2l6ZTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAoaW50KSByb3VuZCgkbmV3X3NpemUgKiAkb2xkX3NpemUsIDApOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyBhbiBhbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MCBmcm9tIGFueSBhbmdsZSB2YWx1ZQ0KICAgICAqDQogICAgICogQHBhcmFtIGZsb2F0ICRhbmdsZSBUaGUgYW5nbGUgdG8gbm9ybWFsaXplDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGZsb2F0IHRoZSBhbmdsZQ0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgZnVuY3Rpb24gX3JvdGF0aW9uX2FuZ2xlKCRhbmdsZSkNCiAgICB7DQogICAgICAgICRhbmdsZSAlPSAzNjA7DQogICAgICAgIHJldHVybiAoJGFuZ2xlIDwgMCkgPyAkYW5nbGUgKyAzNjAgOiAkYW5nbGU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiAkdGhpcy0+ZGVmYXVsdF90ZXh0X3BhcmFtcy4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gYXJyYXkgJHRoaXMtPmRlZmF1bHRfdGV4dF9wYXJhbXMgVGhlIGN1cnJlbnQgdGV4dCBwYXJhbWV0ZXJzDQogICAgICogQGFjY2VzcyBwcm90ZWN0ZWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfZ2V0X2RlZmF1bHRfdGV4dF9wYXJhbXMoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5kZWZhdWx0X3RleHRfcGFyYW1zOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldHMgdGhlIGltYWdlIHdpZHRoDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICRzaXplIGRpbWVuc2lvbiB0byBzZXQNCiAgICAgKg0KICAgICAqIEByZXR1cm4gdm9pZA0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICogQHNpbmNlIDI5LzA1LzAyIDEzOjM2OjMxDQogICAgICovDQogICAgZnVuY3Rpb24gX3NldF9pbWdfeCgkc2l6ZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5pbWdfeCA9ICRzaXplOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNldHMgdGhlIGltYWdlIGhlaWdodA0KICAgICAqDQogICAgICogQHBhcmFtIGludCAkc2l6ZSBkaW1lbnNpb24gdG8gc2V0DQogICAgICoNCiAgICAgKiBAcmV0dXJuIHZvaWQNCiAgICAgKiBAYWNjZXNzIHByb3RlY3RlZA0KICAgICAqIEBzaW5jZSAyOS8wNS8wMiAxMzozNjozMQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9zZXRfaW1nX3koJHNpemUpDQogICAgew0KICAgICAgICAkdGhpcy0+aW1nX3kgPSAkc2l6ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTZXRzIHRoZSBuZXcgaW1hZ2Ugd2lkdGgNCiAgICAgKg0KICAgICAqIEBwYXJhbSBpbnQgJHNpemUgZGltZW5zaW9uIHRvIHNldA0KICAgICAqDQogICAgICogQHJldHVybiB2b2lkDQogICAgICogQGFjY2VzcyBwcm90ZWN0ZWQNCiAgICAgKiBAc2luY2UgMjkvMDUvMDIgMTM6MzY6MzENCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfc2V0X25ld194KCRzaXplKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPm5ld194ID0gJHNpemU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0cyB0aGUgbmV3IGltYWdlIGhlaWdodA0KICAgICAqDQogICAgICogQHBhcmFtIGludCAkc2l6ZSBkaW1lbnNpb24gdG8gc2V0DQogICAgICoNCiAgICAgKiBAcmV0dXJuIHZvaWQNCiAgICAgKiBAc2luY2UgMjkvMDUvMDIgMTM6MzY6MzENCiAgICAgKiBAYWNjZXNzIHByb3RlY3RlZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9zZXRfbmV3X3koJHNpemUpDQogICAgew0KICAgICAgICAkdGhpcy0+bmV3X3kgPSAkc2l6ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIHRoZSBpbWFnZSBoYW5kbGUgc28gdGhhdCBvbmUgY2FuIGZ1cnRoZXIgdHJ5DQogICAgICogdG8gbWFuaXB1bGF0ZSB0aGUgaW1hZ2UNCiAgICAgKg0KICAgICAqIEByZXR1cm4gcmVzb3VyY2UNCiAgICAgKg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZ2V0SGFuZGxlKCkNCiAgICB7DQogICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdnZXRIYW5kbGUoKSBtZXRob2Qgbm90IHN1cHBvcnRlZCBieSBkcml2ZXInLA0KICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICB9Ly9mdW5jdGlvbiBnZXRIYW5kbGUoKQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgaW1hZ2UgYmVpbmcgbWFuaXB1bGF0ZWQNCiAgICAgKg0KICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBpbWFnZSB0eXBlDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBnZXRJbWFnZVR5cGUoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT50eXBlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIE1JTUUgdHlwZSBvZiB0aGUgaW1hZ2UgYmVpbmcgbWFuaXB1bGF0ZWQNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgSW1hZ2UgdHlwZSB0byBnZXQgTUlNRSB0eXBlIGZvcg0KICAgICAqDQogICAgICogQHJldHVybiBzdHJpbmcgVGhlIE1JTUUgdHlwZSBpZiBhdmFpbGFibGUsIG9yIGFuIGVtcHR5IHN0cmluZw0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICogQHNlZSBQSFBfQ29tcGF0OjppbWFnZV90eXBlX3RvX21pbWVfdHlwZSgpDQogICAgICogQGxpbmsgaHR0cDovL3BocC5uZXQvaW1hZ2VfdHlwZV90b19taW1lX3R5cGUNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBnZXRNaW1lVHlwZSgkdHlwZSA9IG51bGwpDQogICAgew0KICAgICAgICByZXR1cm4gaW1hZ2VfdHlwZV90b19taW1lX3R5cGUoJHRoaXMtPl9jb252ZXJ0X2ltYWdlX3R5cGUoKCR0eXBlKSA/ICR0eXBlIDogJHRoaXMtPnR5cGUpKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIHRoZSBuZXcgaW1hZ2Ugd2lkdGgNCiAgICAgKg0KICAgICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgd2lkdGgNCiAgICAgKiBvZiB0aGUgbmV3IGltYWdlLg0KICAgICAqDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKiBAcmV0dXJuIGludCAgVGhlIHdpZHRoIG9mIHRoZSBuZXcgaW1hZ2UuDQogICAgICovDQogICAgZnVuY3Rpb24gZ2V0TmV3SW1hZ2VXaWR0aCgpDQogICAgew0KICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPm5ld194KSkgew0KICAgICAgICAgICAgcmV0dXJuIChpbnQpJHRoaXMtPm5ld194Ow0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybiBuZXcgaW1hZ2UgWQ0KICAgICAqDQogICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHJpZXZlIHRoZQ0KICAgICAqIG5ldyBpbWFnZSAnWScgYW5kIHJldHVybiBpdCdzIHZhbHVlDQogICAgICogaWYgaXQncyBzZXQuDQogICAgICoNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqIEByZXR1cm4gaW50ICBUaGUgbmV3IGhlaWdodCBvZiB0aGUgaW1hZ2UuDQogICAgICovDQogICAgZnVuY3Rpb24gZ2V0TmV3SW1hZ2VIZWlnaHQoKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5uZXdfeSkpIHsNCiAgICAgICAgICAgIHJldHVybiAoaW50KSR0aGlzLT5uZXdfeTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIHRoZSBpbWFnZSB3aWR0aA0KICAgICAqDQogICAgICogQHJldHVybiBpbnQgdGhlIHdpZHRoIG9mIHRoZSBpbWFnZQ0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZ2V0SW1hZ2VXaWR0aCgpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPmltZ194Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAgKiBSZXR1cm5zIHRoZSBpbWFnZSBoZWlnaHQNCiAgICAgICoNCiAgICAgICogQHJldHVybiBpbnQgdGhlIHdpZHRoIG9mIHRoZSBpbWFnZQ0KICAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAgKi8NCiAgICBmdW5jdGlvbiBnZXRJbWFnZUhlaWdodCgpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPmltZ195Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIGltYWdlIHNpemUgYW5kIGV4dHJhIGZvcm1hdCBpbmZvcm1hdGlvbg0KICAgICAqDQogICAgICogQHJldHVybiBhcnJheSBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgaW1hZ2UNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqIEBzZWUgUEhQOjpnZXRpbWFnZXNpemUoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGdldEltYWdlU2l6ZSgpDQogICAgew0KICAgICAgICByZXR1cm4gYXJyYXkoDQogICAgICAgICAgICAkdGhpcy0+aW1nX3gsDQogICAgICAgICAgICAkdGhpcy0+aW1nX3ksDQogICAgICAgICAgICAkdGhpcy0+X2NvbnZlcnRfaW1hZ2VfdHlwZSgkdGhpcy0+dHlwZSksDQogICAgICAgICAgICAnaGVpZ2h0PSInIC4gJHRoaXMtPmltZ195IC4gJyIgd2lkdGg9IicgLiAkdGhpcy0+aW1nX3ggLiAnIicsDQogICAgICAgICAgICAnbWltZScgPT4gJHRoaXMtPmdldE1pbWVUeXBlKCkpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFRoaXMgbG9va3MgYXQgdGhlIGN1cnJlbnQgaW1hZ2UgdHlwZSBhbmQgYXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHdoaWNoDQogICAgICogd2ViLXNhZmUgZm9ybWF0IHdpbGwgYmUgbW9zdCBzdWl0ZWQuICBJdCBkb2VzIG5vdCB3b3JrIGJyaWxsaWFudGx5IHdpdGgNCiAgICAgKiAqLnBuZyBpbWFnZXMsIGJlY2F1c2UgaXQgaXMgdmVyeSBkaWZmaWN1bHQgdG8ga25vdyB3aGV0aGVyIHRoZXkgYXJlDQogICAgICogOC1iaXQgb3IgZ3JlYXRlci4gIEd1ZXNzIEkgbmVlZCB0byBoYXZlIGZhdHRlciBjb2RlIGhlcmUgOi0pDQogICAgICoNCiAgICAgKiBAcmV0dXJuIHN0cmluZyB3ZWItc2FmZSBpbWFnZSB0eXBlDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBnZXRXZWJTYWZlRm9ybWF0KCkNCiAgICB7DQogICAgICAgIHN3aXRjaCAoJHRoaXMtPnR5cGUpew0KICAgICAgICAgICAgY2FzZSAnZ2lmJzoNCiAgICAgICAgICAgIGNhc2UgJ3BuZyc6DQogICAgICAgICAgICAgICAgcmV0dXJuICdwbmcnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICByZXR1cm4gJ2pwZWcnOw0KICAgICAgICB9IC8vIHN3aXRjaA0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEhhbmRsZXMgc3BhY2UgaW4gcGF0aCBhbmQgV2luZG93cy9VTklYIGRpZmZlcmVuY2UNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGggICAgQmFzZSBkaXINCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb21tYW5kIENvbW1hbmQgdG8gZXhlY3V0ZQ0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGFyZ3MgICAgQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNvbW1hbmQNCiAgICAgKg0KICAgICAqIEByZXR1cm4gc3RyaW5nIEEgcHJlcGFyZWQgc3RyaW5nIHN1aXRhYmxlIGZvciBleGVjKCkNCiAgICAgKiBAYWNjZXNzIHByb3RlY3RlZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9wcmVwYXJlX2NtZCgkcGF0aCwgJGNvbW1hbmQsICRhcmdzID0gJycpDQogICAgew0KICAgICAgICBpZiAoIU9TX1dJTkRPV1MNCiAgICAgICAgICAgIHx8ICFwcmVnX21hdGNoKCcvXHMvJywgJHBhdGgpKSB7DQogICAgICAgICAgICByZXR1cm4gJHBhdGggLiAkY29tbWFuZCAuICcgJyAuICRhcmdzOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAnc3RhcnQgL0QgIicgLiAkcGF0aCAuICciIC9CICcgLiAkY29tbWFuZCAuICcgJyAuICRhcmdzOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFBsYWNlIGhvbGRlciBmb3IgdGhlIHJlYWwgcmVzaXplIG1ldGhvZA0KICAgICAqIHVzZWQgYnkgZXh0ZW5kZWQgbWV0aG9kcyB0byBkbyB0aGUgcmVzaXppbmcNCiAgICAgKg0KICAgICAqIEByZXR1cm4gUEVBUl9lcnJvcg0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgZnVuY3Rpb24gX3Jlc2l6ZSgpDQogICAgew0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignUmVzaXplIG1ldGhvZCBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlcicsDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIE5vcm1hbGl6ZXMgdGhlIGNvbG9ycywgZ2FtbWEgYW5kIG90aGVyIHByb3BlcnRpZXMgb2YgYW4gaW1hZ2UNCiAgICAgKiAodGhpcyBzaG91bGQgZ2l2ZSBhIHJlc3VsdCBlcXVpdmFsZW50IHRvIGEgUGhvdG9zaG9wIGF1dG9sZXZlbHMpDQogICAgICoNCiAgICAgKiBAcmV0dXJuIFBFQVJfZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZSgpDQogICAgew0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignTm9ybWFsaXplIG1ldGhvZCBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlcicsDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIExvYWRzIGFuIGltYWdlIGZpbGUgdG8gd29yayB3aXRoDQogICAgICoNCiAgICAgKiBQbGFjZSBob2xkZXIgZm9yIHRoZSByZWFsIGxvYWQgbWV0aG9kDQogICAgICogdXNlZCBieSBleHRlbmRlZCBtZXRob2RzIHRvIGRvIHRoZSByZXNpemluZw0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgRnVsbCBuYW1lIG9mIGZpbGUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gUEVBUl9lcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gbG9hZCgkZmlsZW5hbWUpDQogICAgew0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignbG9hZCgpIG1ldGhvZCBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlcicsDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIE91dHB1dHMgdGhlIGltYWdlIHRvIHN0YW5kYXJkIG91dHB1dA0KICAgICAqDQogICAgICogUGxhY2UgaG9sZGVyIGZvciB0aGUgcmVhbCBkaXNwbGF5IG1ldGhvZA0KICAgICAqIHVzZWQgYnkgZXh0ZW5kZWQgbWV0aG9kcyB0byBkbyB0aGUgcmVzaXppbmcNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgICAgRm9ybWF0IG9mIGltYWdlIHRvIHNhdmUgYXMNCiAgICAgKiBAcGFyYW0gbWl4ZWQgICRxdWFsaXR5IEZvcm1hdC1kZXBlbmRlbnQNCiAgICAgKg0KICAgICAqIEByZXR1cm4gUEVBUl9lcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZGlzcGxheSgkdHlwZSwgJHF1YWxpdHkgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ2Rpc3BsYXkoKSBtZXRob2Qgbm90IHN1cHBvcnRlZCBieSBkcml2ZXInLA0KICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIGlmIHRoZSBkcml2ZXIgc3VwcG9ydHMgYSBnaXZlbiBpbWFnZSB0eXBlDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlIEltYWdlIHR5cGUgKEdJRiwgUE5HLCBKUEVHLi4uKQ0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG1vZGUgJ3InIGZvciByZWFkLCAndycgZm9yIHdyaXRlLCAncncnIGZvciBib3RoDQogICAgICoNCiAgICAgKiBAcmV0dXJuIFRSVUUgaWYgdHlwZSAoYW5kIG1vZGUpIGlzIHN1cHBvcnRlZCBGQUxTRSBvdGhlcndpc2UNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHN1cHBvcnRzVHlwZSgkdHlwZSwgJG1vZGUgPSAncncnKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChzdHJwb3MoQCR0aGlzLT5fc3VwcG9ydGVkX2ltYWdlX3R5cGVzW3N0cnRvbG93ZXIoJHR5cGUpXSwgJG1vZGUpID09PSBmYWxzZSkgPyBmYWxzZSA6IHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2F2ZXMgaW1hZ2UgdG8gZmlsZQ0KICAgICAqDQogICAgICogUGxhY2UgaG9sZGVyIGZvciB0aGUgcmVhbCBzYXZlIG1ldGhvZA0KICAgICAqIHVzZWQgYnkgZXh0ZW5kZWQgbWV0aG9kcyB0byBkbyB0aGUgcmVzaXppbmcNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIEZpbGVuYW1lIHRvIHNhdmUgaW1hZ2UgdG8NCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlICAgICBGb3JtYXQgb2YgaW1hZ2UgdG8gc2F2ZSBhcw0KICAgICAqIEBwYXJhbSBtaXhlZCAgJHF1YWxpdHkgIEZvcm1hdC1kZXBlbmRlbnQNCiAgICAgKg0KICAgICAqIEByZXR1cm4gUEVBUl9lcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gc2F2ZSgkZmlsZW5hbWUsICR0eXBlLCAkcXVhbGl0eSA9IG51bGwpDQogICAgew0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignc2F2ZSgpIG1ldGhvZCBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlcicsDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJlbGVhc2VzIHJlc291cmNlDQogICAgICoNCiAgICAgKiBQbGFjZSBob2xkZXIgZm9yIHRoZSByZWFsIGZyZWUgbWV0aG9kDQogICAgICogdXNlZCBieSBleHRlbmRlZCBtZXRob2RzIHRvIGRvIHRoZSByZXNpemluZw0KICAgICAqDQogICAgICogQHJldHVybiBQRUFSX2Vycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBmcmVlKCkNCiAgICB7DQogICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdmcmVlKCkgbWV0aG9kIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmVyJywNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ29udmVydHMgYSBjb2xvciBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBSR0IgdmFsdWVzDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjb2xvcmhleCBBIGNvbG9yIGZvbGxvd2luZyB0aGUgI0ZGRkZGRiBmb3JtYXQNCiAgICAgKg0KICAgICAqIEByZXR1cm4gYXJyYXkgMy1lbGVtZW50IGFycmF5IHdpdGggMC0yNTUgdmFsdWVzDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKg0KICAgICAqIEBzZWUgcmdiMmNvbG9ybmFtZQ0KICAgICAqIEBzZWUgY29sb3JhcnJheTJjb2xvcmhleA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGNvbG9yaGV4MmNvbG9yYXJyYXkoJGNvbG9yaGV4KQ0KICAgIHsNCiAgICAgICAgJHIgPSBoZXhkZWMoc3Vic3RyKCRjb2xvcmhleCwgMSwgMikpOw0KICAgICAgICAkZyA9IGhleGRlYyhzdWJzdHIoJGNvbG9yaGV4LCAzLCAyKSk7DQogICAgICAgICRiID0gaGV4ZGVjKHN1YnN0cigkY29sb3JoZXgsIDUsIDIpKTsNCiAgICAgICAgcmV0dXJuIGFycmF5KCRyLCAkZywgJGIsICd0eXBlJyA9PiAnUkdCJyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gX3NlbmRfZGlzcGxheV9oZWFkZXJzKCR0eXBlKQ0KICAgIHsNCiAgICAgICAgLy8gRmluZCB0aGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIGltYWdlOg0KICAgICAgICAkZmlsZW5hbWUgPSBleHBsb2RlKCcuJywgYmFzZW5hbWUoJHRoaXMtPmltYWdlKSk7DQogICAgICAgICRmaWxlbmFtZSA9ICRmaWxlbmFtZVswXTsNCiAgICAgICAgaGVhZGVyKCdDb250ZW50LXR5cGU6ICcgLiAkdGhpcy0+Z2V0TWltZVR5cGUoJHR5cGUpKTsNCiAgICAgICAgaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPScgLiAkZmlsZW5hbWUgLiAnLicgLiAkdHlwZSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ29udmVydHMgYW4gYXJyYXkgb2YgUkdCIHZhbHVlIGludG8gYSAjRkZGRkZGIGZvcm1hdCBjb2xvci4NCiAgICAgKg0KICAgICAqIEBwYXJhbSBhcnJheSAkY29sb3IgMy1lbGVtZW50IGFycmF5IHdpdGggMC0yNTUgdmFsdWVzDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIEEgY29sb3IgZm9sbG93aW5nIHRoZSAjRkZGRkZGIGZvcm1hdCBvciBGQUxTRQ0KICAgICAqICAgICAgICAgICAgICAgaWYgdGhlIGFycmF5IGNvdWxkbid0IGJlIGNvbnZlcnRlZA0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICoNCiAgICAgKiBAc2VlIHJnYjJjb2xvcm5hbWUNCiAgICAgKiBAc2VlIGNvbG9yaGV4MmNvbG9yYXJyYXkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBjb2xvcmFycmF5MmNvbG9yaGV4KCRjb2xvcikNCiAgICB7DQogICAgICAgIGlmICghaXNfYXJyYXkoJGNvbG9yKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgICRjb2xvciA9IHNwcmludGYoJyMlMDJYJTAyWCUwMlgnLCBAJGNvbG9yWzBdLCBAJGNvbG9yWzFdLCBAJGNvbG9yWzJdKTsNCiAgICAgICAgcmV0dXJuIChzdHJsZW4oJGNvbG9yKSAhPSA3KSA/IGZhbHNlIDogJGNvbG9yOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIHRlbXAgZGlyZWN0b3J5IGFjY29yZGluZyB0byBlaXRoZXIgdGhlIFRNUCwgVE1QRElSLCBvciBURU1QIGVudg0KICAgICAqIHZhcmlhYmxlcy4gSWYgdGhlc2UgYXJlIG5vdCBzZXQgaXQgd2lsbCBhbHNvIGNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mDQogICAgICogL3RtcCwgJVdJTkRJUiVcdGVtcA0KICAgICAqDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgc3lzdGVtIHRtcCBkaXJlY3RvcnkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBnZXRUZW1wRGlyKCkNCiAgICB7DQogICAgICAgIGluY2x1ZGVfb25jZSAnU3lzdGVtLnBocCc7DQogICAgICAgIHJldHVybiBTeXN0ZW06OnRtcGRpcigpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgYSB0ZW1wb3JhcnkgZmlsZW5hbWUgdXNpbmcgdGVtcG5hbSgpIGFuZCB0aGUgYWJvdmUgZ2V0VG1wRGlyKCkgZnVuY3Rpb24uDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkaXJuYW1lIE9wdGlvbmFsIGRpcmVjdG9yeSBuYW1lIGZvciB0aGUgdG1wIGZpbGUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gc3RyaW5nIEZpbGVuYW1lIGFuZCBwYXRoIG9mIHRoZSB0bXAgZmlsZQ0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZ2V0VGVtcEZpbGUoJGRpcm5hbWUgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzX251bGwoJGRpcm5hbWUpKSB7DQogICAgICAgICAgICBpbmNsdWRlX29uY2UgJ1N5c3RlbS5waHAnOw0KICAgICAgICAgICAgJGRpcm5hbWUgPSBTeXN0ZW06OnRtcGRpcigpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRlbXBuYW0oJGRpcm5hbWUsICd0ZW1wLicpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGtlZXBTZXR0aW5nc09uU2F2ZSgkYm9vbCkNCiAgICB7DQogICAgICAgICR0aGlzLT5rZWVwX3NldHRpbmdzX29uX3NhdmUgPSAkYm9vbDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBNZXRob2RzIHRvIGFkZCB0byB0aGUgZHJpdmVyIGNsYXNzZXMgaW4gdGhlIGZ1dHVyZQ0KICAgICAqDQogICAgICogQHJldHVybiB2b2lkDQogICAgICovDQogICAgZnVuY3Rpb24gYWRkVGV4dCgpDQogICAgew0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignYWRkVGV4dCgpIG1ldGhvZCBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlcicsDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGFkZERyb3BTaGFkb3coKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ2FkZERyb3BTaGFkb3coKSBtZXRob2Qgbm90IHN1cHBvcnRlZCBieSBkcml2ZXInLA0KICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBhZGRCb3JkZXIoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ2FkZEJvcmRlcigpIG1ldGhvZCBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlcicsDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENyb3BzIGFuIGltYWdlDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICR3aWR0aCAgQ3JvcHBlZCBpbWFnZSB3aWR0aA0KICAgICAqIEBwYXJhbSBpbnQgJGhlaWdodCBDcm9wcGVkIGltYWdlIGhlaWdodA0KICAgICAqIEBwYXJhbSBpbnQgJHggICAgICBYLWNvb3JkaW5hdGUgdG8gY3JvcCBhdA0KICAgICAqIEBwYXJhbSBpbnQgJHkgICAgICBZLWNvb3JkaW5hdGUgdG8gY3JvcCBhdA0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCBUUlVFIG9yIGEgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqKi8NCiAgICBmdW5jdGlvbiBjcm9wKCR3aWR0aCwgJGhlaWdodCwgJHggPSAwLCAkeSA9IDApDQogICAgew0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignY3JvcCgpIG1ldGhvZCBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlcicsDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNhbnZhc1Jlc2l6ZSgpDQogICAgew0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignY2FudmFzUmVzaXplKCkgbWV0aG9kIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmVyJywNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ29ycmVjdHMgdGhlIGdhbW1hIG9mIGFuIGltYWdlDQogICAgICoNCiAgICAgKiBAcGFyYW0gZmxvYXQgJG91dHB1dGdhbW1hIEdhbW1hIGNvcnJlY3Rpb24gZmFjdG9yDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgYSBQRUFSX2Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICoqLw0KICAgIGZ1bmN0aW9uIGdhbW1hKCRvdXRwdXRnYW1tYSA9IDEuMCkNCiAgICB7DQogICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdnYW1tYSgpIG1ldGhvZCBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlcicsDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJvdGF0ZXMgdGhlIGltYWdlIGNsb2Nrd2lzZQ0KICAgICAqDQogICAgICogQHBhcmFtIGZsb2F0ICRhbmdsZSAgIEFuZ2xlIG9mIHJvdGF0aW9uIGluIGRlZ3Jlcw0KICAgICAqIEBwYXJhbSBtaXhlZCAkb3B0aW9ucyBSb3RhdGlvbiBvcHRpb25zDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9uIHN1Y2Nlc3MsIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiByb3RhdGUoJGFuZ2xlLCAkb3B0aW9ucyA9IG51bGwpDQogICAgew0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcigncm90YXRlKCkgbWV0aG9kIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmVyJywNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogSG9yaXpvbnRhbCBtaXJyb3JpbmcNCiAgICAgKg0KICAgICAqIEByZXR1cm4gbWl4ZWQgVFJVRSBvciBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICogQHNlZSBmbGlwKCkNCiAgICAgKiovDQogICAgZnVuY3Rpb24gbWlycm9yKCkNCiAgICB7DQogICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdtaXJyb3IoKSBtZXRob2Qgbm90IHN1cHBvcnRlZCBieSBkcml2ZXInLA0KICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBWZXJ0aWNhbCBtaXJyb3JpbmcNCiAgICAgKg0KICAgICAqIEByZXR1cm4gVFJVRSBvciBQRUFSIEVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICogQHNlZSBtaXJyb3IoKQ0KICAgICAqKi8NCiAgICBmdW5jdGlvbiBmbGlwKCkNCiAgICB7DQogICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdmbGlwKCkgbWV0aG9kIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmVyJywNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ29udmVydHMgYW4gaW1hZ2UgaW50byBncmV5c2NhbGUgY29sb3JzDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICoqLw0KICAgIGZ1bmN0aW9uIGdyZXlzY2FsZSgpDQogICAgew0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignZ3JleXNjYWxlKCkgbWV0aG9kIG5vdCBzdXBwb3J0ZWQgYnkgZHJpdmVyJywNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ29udmVydHMgYW4gaW1hZ2UgaW50byBncmV5c2NhbGUgY29sb3JzDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBzZWUgZ3JleXNjYWxlKCkNCiAgICAgKiovDQogICAgZnVuY3Rpb24gZ3JheXNjYWxlKCkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+Z3JleXNjYWxlKCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyBhIGNvbG9yIG9wdGlvbg0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkY29sb3JPZiBvbmUgb2YgJ2NhbnZhc0NvbG9yJywgJ3BlbmNpbENvbG9yJywgJ2ZvbnRDb2xvcicNCiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zIGNvbmZpZ3VyYXRpb24gb3B0aW9ucw0KICAgICAqIEBwYXJhbSBhcnJheSAgJGRlZmF1bHQgZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4gaWYgY29sb3Igbm90IGZvdW5kDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGFycmF5IGFuIFJHQiBjb2xvciBhcnJheQ0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgZnVuY3Rpb24gX2dldENvbG9yKCRjb2xvck9mLCAkb3B0aW9ucyA9IGFycmF5KCksICRkZWZhdWx0ID0gYXJyYXkoMCwgMCwgMCkpDQogICAgew0KICAgICAgICAkb3B0ID0gYXJyYXlfbWVyZ2UoJHRoaXMtPl9vcHRpb25zLCAoYXJyYXkpICRvcHRpb25zKTsNCiAgICAgICAgaWYgKGlzc2V0KCRvcHRbJGNvbG9yT2ZdKSkgew0KICAgICAgICAgICAgJGNvbG9yID0gJG9wdFskY29sb3JPZl07DQogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGNvbG9yKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiAkY29sb3I7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJGNvbG9yezB9ID09ICcjJykgew0KICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y29sb3JoZXgyY29sb3JhcnJheSgkY29sb3IpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc3RhdGljICRjb2xvcm5hbWVzID0gYXJyYXkoKTsNCiAgICAgICAgICAgIGluY2x1ZGVfb25jZSAnSW1hZ2UvVHJhbnNmb3JtL0RyaXZlci9Db2xvcnNEZWZzLnBocCc7DQogICAgICAgICAgICByZXR1cm4gKGlzc2V0KCRjb2xvcm5hbWVzWyRjb2xvcl0pKSA/ICRjb2xvcm5hbWVzWyRjb2xvcl0gOiAkZGVmYXVsdDsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJGRlZmF1bHQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmV0dXJucyBhbiBvcHRpb24NCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgICAgbmFtZSBvZiBvcHRpb24NCiAgICAgKiBAcGFyYW0gYXJyYXkgICRvcHRpb25zIGxvY2FsIG92ZXJyaWRlIG9wdGlvbiBhcnJheQ0KICAgICAqIEBwYXJhbSBtaXhlZCAgJGRlZmF1bHQgZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4gaWYgb3B0aW9uIGlzIG5vdCBmb3VuZA0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCB0aGUgb3B0aW9uDQogICAgICogQGFjY2VzcyBwcm90ZWN0ZWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfZ2V0T3B0aW9uKCRuYW1lLCAkb3B0aW9ucyA9IGFycmF5KCksICRkZWZhdWx0ID0gbnVsbCkNCiAgICB7DQogICAgICAgICRvcHQgPSBhcnJheV9tZXJnZSgkdGhpcy0+X29wdGlvbnMsIChhcnJheSkgJG9wdGlvbnMpOw0KICAgICAgICByZXR1cm4gKGlzc2V0KCRvcHRbJG5hbWVdKSkgPyAkb3B0WyRuYW1lXSA6ICRkZWZhdWx0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENoZWNrcyBpZiB0aGUgcmVjdGFuZ2xlIHBhc3NlZCBpbnRlcnNlY3RzIHdpdGggdGhlIGN1cnJlbnQgaW1hZ2UNCiAgICAgKg0KICAgICAqIEBwYXJhbSBpbnQgJHdpZHRoICBXaWR0aCBvZiByZWN0YW5nbGUNCiAgICAgKiBAcGFyYW0gaW50ICRoZWlnaHQgSGVpZ2h0IG9mIHJlY3RhbmdsZQ0KICAgICAqIEBwYXJhbSBpbnQgJHggICAgICBYLWNvb3JkaW5hdGUNCiAgICAgKiBAcGFyYW0gaW50ICR5ICAgICAgWS1jb29yZGluYXRlDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIGlmIGludGVyc2VjdHMsIEZBTFNFIGlmIG5vdCwNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgUEVBUl9FcnJvciBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gaW50ZXJzZWN0cygkd2lkdGgsICRoZWlnaHQsICR4LCAkeSkNCiAgICB7DQogICAgICAgICRsZWZ0ICA9ICR4Ow0KICAgICAgICAkcmlnaHQgPSAkeCArICR3aWR0aDsNCiAgICAgICAgaWYgKCRyaWdodCA8ICRsZWZ0KSB7DQogICAgICAgICAgICAkbGVmdCAgPSAkcmlnaHQ7DQogICAgICAgICAgICAkcmlnaHQgPSAkeDsNCiAgICAgICAgfQ0KICAgICAgICAkdG9wICAgID0gJHk7DQogICAgICAgICRib3R0b20gPSAkeSArICRoZWlnaHQ7DQogICAgICAgIGlmICgkYm90dG9tIDwgJHRvcCkgew0KICAgICAgICAgICAgJHRvcCAgICA9ICRib3R0b207DQogICAgICAgICAgICAkYm90dG9tID0gJHk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIChib29sKSAoJGxlZnQgPCAkdGhpcy0+bmV3X3gNCiAgICAgICAgICAgICAgICAgICAgICAgJiYgJHJpZ2h0ID49IDANCiAgICAgICAgICAgICAgICAgICAgICAgJiYgJHRvcCA8ICR0aGlzLT5uZXdfeQ0KICAgICAgICAgICAgICAgICAgICAgICAmJiAkYm90dG9tID49IDApOw0KICAgIH0NCn0NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/Cairowrapper.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qIHZpbTogc2V0IGV4cGFuZHRhYiB0YWJzdG9wPTQgc2hpZnR3aWR0aD00OiAqLw0KDQovKioNCiAqIENhaXJvIGltcGxlbWVudGF0aW9uIGZvciBJbWFnZV9UcmFuc2Zvcm0gcGFja2FnZQ0KICoNCiAqIFBIUCB2ZXJzaW9ucyA0IGFuZCA1DQogKg0KICogQGNhdGVnb3J5ICAgSW1hZ2UNCiAqIEBwYWNrYWdlICAgIEltYWdlX1RyYW5zZm9ybQ0KICogQHN1YnBhY2thZ2UgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9DYWlyb3dyYXBwZXINCiAqIEBhdXRob3IgICAgIENocmlzdGlhbiBXZWlza2UgPGN3ZWlza2VAcGhwLm5ldD4NCiAqIEBjb3B5cmlnaHQgIDIwMDggVGhlIFBIUCBHcm91cA0KICogQGxpY2Vuc2UgICAgaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sIExHUEwNCiAqIEB2ZXJzaW9uICAgIENWUzogJElkOiBDYWlyb3dyYXBwZXIucGhwIDI4ODExMiAyMDA5LTA5LTA2IDIxOjAyOjM3WiBjd2Vpc2tlICQNCiAqIEBsaW5rICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9JbWFnZV9UcmFuc2Zvcm0NCiAqLw0KcmVxdWlyZV9vbmNlICdJbWFnZS9UcmFuc2Zvcm0ucGhwJzsNCg0KLyoqDQogKiBDYWlybyBpbXBsZW1lbnRhdGlvbiBmb3IgSW1hZ2VfVHJhbnNmb3JtIHBhY2thZ2UgdXNpbmcgcGVjbCdzIGNhaXJvX3dyYXBwZXINCiAqIGV4dGVuc2lvbi4NCiAqDQogKiBTdXBwb3J0cyBwbmcgZmlsZXMgb25seS4NCiAqDQogKiBAY2F0ZWdvcnkgICBJbWFnZQ0KICogQHBhY2thZ2UgICAgSW1hZ2VfVHJhbnNmb3JtDQogKiBAc3VicGFja2FnZSBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0NhaXJvd3JhcHBlcg0KICogQGF1dGhvciAgICAgQ2hyaXN0aWFuIFdlaXNrZSA8Y3dlaXNrZUBwaHAubmV0Pg0KICogQGNvcHlyaWdodCAgMjAwOCBUaGUgUEhQIEdyb3VwDQogKiBAbGljZW5zZSAgICBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWwgTEdQTA0KICogQHZlcnNpb24gICAgUmVsZWFzZTogQHBhY2thZ2VfdmVyc2lvbkANCiAqIEBsaW5rICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9JbWFnZV9UcmFuc2Zvcm0NCiAqLw0KY2xhc3MgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9DYWlyb3dyYXBwZXIgZXh0ZW5kcyBJbWFnZV9UcmFuc2Zvcm0NCnsNCiAgICB2YXIgJHN1cmZhY2UgPSBudWxsOw0KDQogICAgLyoqDQogICAgICogU3VwcG9ydGVkIGltYWdlIHR5cGVzDQogICAgICoNCiAgICAgKiBAdmFyICAgIGFycmF5DQogICAgICogQGFjY2VzcyBwcm90ZWN0ZWQNCiAgICAgKi8NCiAgICB2YXIgJF9zdXBwb3J0ZWRfaW1hZ2VfdHlwZXMgPSBhcnJheSgNCiAgICAgICAgJ3BuZycgPT4gJ3J3Jw0KICAgICk7DQoNCiAgICAvKioNCiAgICAgKiBDaGVjayBzZXR0aW5ncw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfQ2Fpcm93cmFwcGVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5fX2NvbnN0cnVjdCgpOw0KICAgIH0NCg0KDQoNCiAgICAvKioNCiAgICAgKiBDcmVhdGUgb2JqZWN0IGFuZCBjaGVjayBpZiBjYWlyb193cmFwcGVyIGlzIGxvYWRlZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgICB7DQogICAgICAgIGlmICghUEVBUjo6bG9hZEV4dGVuc2lvbignY2Fpcm9fd3JhcHBlcicpKSB7DQogICAgICAgICAgICAkdGhpcy0+aXNFcnJvcigNCiAgICAgICAgICAgICAgICBQRUFSOjpyYWlzZUVycm9yKA0KICAgICAgICAgICAgICAgICAgICAnY2Fpcm9fd3JhcHBlciBleHRlbnNpb24gaXMgbm90IGF2YWlsYWJsZS4nLA0KICAgICAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICApOw0KICAgICAgICB9DQogICAgfQ0KDQoNCg0KICAgIC8qKg0KICAgICAqIExvYWRzIGFuIGltYWdlIGZyb20gZmlsZQ0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkaW1hZ2UgZmlsZW5hbWUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBsb2FkKCRpbWFnZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5mcmVlKCk7DQoNCiAgICAgICAgJHRoaXMtPmltYWdlID0gJGltYWdlOw0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPl9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOw0KICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcmVzdWx0KSkgew0KICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCEkdGhpcy0+c3VwcG9ydHNUeXBlKCR0aGlzLT50eXBlLCAncicpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignSW1hZ2UgdHlwZSBub3Qgc3VwcG9ydGVkIGZvciBpbnB1dCcsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aGlzLT5zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZnJvbV9wbmcoJHRoaXMtPmltYWdlKTsNCiAgICAgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKCR0aGlzLT5zdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgew0KICAgICAgICAgICAgJHRoaXMtPnN1cmZhY2UgPSBudWxsOw0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ0Vycm9yIHdoaWxlIGxvYWRpbmcgaW1hZ2UgZmlsZS4nLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9JTyk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9Ly9mdW5jdGlvbiBsb2FkKC4uKQ0KDQoNCg0KICAgIC8qKg0KICAgICAqIFJlc2l6ZSB0aGUgaW1hZ2UNCiAgICAgKg0KICAgICAqIEBwYXJhbSBpbnQgICAkbmV3X3ggICBOZXcgd2lkdGgNCiAgICAgKiBAcGFyYW0gaW50ICAgJG5ld195ICAgTmV3IGhlaWdodA0KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBPcHRpb25hbCBwYXJhbWV0ZXJzDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9uIHN1Y2Nlc3Mgb3IgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKg0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgZnVuY3Rpb24gX3Jlc2l6ZSgkbmV3X3gsICRuZXdfeSwgJG9wdGlvbnMgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKCR0aGlzLT5yZXNpemVkID09PSB0cnVlKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcigNCiAgICAgICAgICAgICAgICAnWW91IGhhdmUgYWxyZWFkeSByZXNpemVkIHRoZSBpbWFnZSB3aXRob3V0IHNhdmluZyBpdC4nDQogICAgICAgICAgICAgICAgLiAnIFlvdXIgcHJldmlvdXMgcmVzaXppbmcgd2lsbCBiZSBvdmVyd3JpdHRlbicsDQogICAgICAgICAgICAgICAgbnVsbCwgUEVBUl9FUlJPUl9UUklHR0VSLCBFX1VTRVJfTk9USUNFDQogICAgICAgICAgICApOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCR0aGlzLT5uZXdfeCA9PSAkbmV3X3ggJiYgJHRoaXMtPm5ld195ID09ICRuZXdfeSkgew0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCg0KICAgICAgICAkeEZhY3RvciA9ICRuZXdfeCAvICR0aGlzLT5pbWdfeDsNCiAgICAgICAgJHlGYWN0b3IgPSAkbmV3X3kgLyAkdGhpcy0+aW1nX3k7DQoNCiAgICAgICAgJG91dHB1dFN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZSgNCiAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsICRuZXdfeCwgJG5ld195DQogICAgICAgICk7DQogICAgICAgICRvdXRwdXRDb250ZXh0ID0gY2Fpcm9fY3JlYXRlKCRvdXRwdXRTdXJmYWNlKTsNCg0KICAgICAgICBjYWlyb19zY2FsZSgkb3V0cHV0Q29udGV4dCwgJHhGYWN0b3IsICR5RmFjdG9yKTsNCg0KICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoJG91dHB1dENvbnRleHQsICR0aGlzLT5zdXJmYWNlLCAwLCAwKTsNCiAgICAgICAgY2Fpcm9fcGFpbnQoJG91dHB1dENvbnRleHQpOw0KDQogICAgICAgIGNhaXJvX2Rlc3Ryb3koJG91dHB1dENvbnRleHQpOw0KDQogICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSgkdGhpcy0+c3VyZmFjZSk7DQoNCiAgICAgICAgJHRoaXMtPnN1cmZhY2UgPSAkb3V0cHV0U3VyZmFjZTsNCg0KICAgICAgICAkdGhpcy0+bmV3X3ggPSAkbmV3X3g7DQogICAgICAgICR0aGlzLT5uZXdfeSA9ICRuZXdfeTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfS8vZnVuY3Rpb24gX3Jlc2l6ZSguLikNCg0KDQoNCiAgICAvKioNCiAgICAgKiBTYXZlcyB0aGUgc2NhbGVkIGltYWdlIGludG8gYSBmaWxlLg0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIGZpbGVuYW1lIHRvIHNhdmUgdG8NCiAgICAgKiBAcGFyYW0gbWl4ZWQgICR0eXBlICAgICBpZ25vcmVkDQogICAgICogQHBhcmFtIG1peGVkICAkcXVhbGl0eSAgaWdub3JlZA0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvbiBzdWNjZXNzIG9yIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICoNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lLCAkdHlwZSA9IG51bGwsICRxdWFsaXR5ID0gbnVsbCkNCiAgICB7DQogICAgICAgIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nKCR0aGlzLT5zdXJmYWNlLCAkZmlsZW5hbWUpOw0KICAgICAgICAkdGhpcy0+ZnJlZSgpOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9Ly9mdW5jdGlvbiBzYXZlKC4uKQ0KDQoNCg0KICAgIC8qKg0KICAgICAqIFJldHVybnMgdGhlIHN1cmZhY2Ugb2YgdGhlIGltYWdlIHNvIGl0IGNhbiBiZSBtb2RpZmllZCBmdXJ0aGVyDQogICAgICoNCiAgICAgKiBAcmV0dXJuIHJlc291cmNlDQogICAgICoNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGdldEhhbmRsZSgpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPnN1cmZhY2U7DQogICAgfS8vZnVuY3Rpb24gZ2V0SGFuZGxlKCkNCg0KDQoNCiAgICAvKioNCiAgICAgKiBGcmVlcyBjYWlybyBoYW5kbGVzDQogICAgICoNCiAgICAgKiBAcmV0dXJuIHZvaWQNCiAgICAgKg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZnJlZSgpDQogICAgew0KICAgICAgICAkdGhpcy0+cmVzaXplZCA9IGZhbHNlOw0KICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJHRoaXMtPnN1cmZhY2UpKSB7DQogICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koJHRoaXMtPnN1cmZhY2UpOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5zdXJmYWNlID0gbnVsbDsNCiAgICB9Ly9mdW5jdGlvbiBmcmVlKCkNCg0KDQoNCiAgICAvKioNCiAgICAgKiBNaXJyb3JzIHRoZSBpbWFnZSB2ZXJ0aWNhbGx5DQogICAgICogVXNlcyBhbiBhZmZpbmUgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRvIGZsaXAgdGhlIGltYWdlLg0KICAgICAqDQogICAgICogQHJldHVybiB2b2lkDQogICAgICovDQogICAgZnVuY3Rpb24gZmxpcCgpDQogICAgew0KICAgICAgICAkb3V0cHV0U3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKA0KICAgICAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgJHRoaXMtPmltZ194LCAkdGhpcy0+aW1nX3kNCiAgICAgICAgKTsNCiAgICAgICAgJG91dHB1dENvbnRleHQgPSBjYWlyb19jcmVhdGUoJG91dHB1dFN1cmZhY2UpOw0KICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eCwgeXgsIHh5LCB5eSwgeDAsIHkwDQogICAgICAgICRtYXRyaXggPSBjYWlyb19tYXRyaXhfY3JlYXRlKDEsICAwLCAgMCwgIC0xLCAgMCwgJHRoaXMtPmltZ195KTsNCg0KICAgICAgICBjYWlyb19zZXRfbWF0cml4KCRvdXRwdXRDb250ZXh0LCAkbWF0cml4KTsNCiAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKCRvdXRwdXRDb250ZXh0LCAkdGhpcy0+c3VyZmFjZSwgMCwgMCk7DQogICAgICAgIGNhaXJvX3BhaW50KCRvdXRwdXRDb250ZXh0KTsNCg0KICAgICAgICBjYWlyb19kZXN0cm95KCRvdXRwdXRDb250ZXh0KTsNCiAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KCR0aGlzLT5zdXJmYWNlKTsNCg0KICAgICAgICAkdGhpcy0+c3VyZmFjZSA9ICRvdXRwdXRTdXJmYWNlOw0KICAgIH0vL2Z1bmN0aW9uIGZsaXAoKQ0KDQoNCg0KICAgIC8qKg0KICAgICAqIE1pcnJvcnMgdGhlIGltYWdlIGhvcml6b250YWxseS4NCiAgICAgKiBVc2VzIGFuIGFmZmluZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gbWlycm9yIHRoZSBpbWFnZS4NCiAgICAgKg0KICAgICAqIDEyMyAtPiAzMjENCiAgICAgKg0KICAgICAqIEByZXR1cm4gdm9pZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIG1pcnJvcigpDQogICAgew0KICAgICAgICAkb3V0cHV0U3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKA0KICAgICAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgJHRoaXMtPmltZ194LCAkdGhpcy0+aW1nX3kNCiAgICAgICAgKTsNCiAgICAgICAgJG91dHB1dENvbnRleHQgPSBjYWlyb19jcmVhdGUoJG91dHB1dFN1cmZhY2UpOw0KICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eCwgeXgsIHh5LCB5eSwgeDAsIHkwDQogICAgICAgICRtYXRyaXggPSBjYWlyb19tYXRyaXhfY3JlYXRlKC0xLCAwLCAgMCwgIDEsICR0aGlzLT5pbWdfeCwgMCk7DQoNCiAgICAgICAgY2Fpcm9fc2V0X21hdHJpeCgkb3V0cHV0Q29udGV4dCwgJG1hdHJpeCk7DQogICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZSgkb3V0cHV0Q29udGV4dCwgJHRoaXMtPnN1cmZhY2UsIDAsIDApOw0KICAgICAgICBjYWlyb19wYWludCgkb3V0cHV0Q29udGV4dCk7DQoNCiAgICAgICAgY2Fpcm9fZGVzdHJveSgkb3V0cHV0Q29udGV4dCk7DQogICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSgkdGhpcy0+c3VyZmFjZSk7DQoNCiAgICAgICAgJHRoaXMtPnN1cmZhY2UgPSAkb3V0cHV0U3VyZmFjZTsNCiAgICB9Ly9mdW5jdGlvbiBtaXJyb3IoKQ0KDQp9Ly9jbGFzcyBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0NhaXJvd3JhcHBlciBleHRlbmRzIEltYWdlX1RyYW5zZm9ybQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/ColorsDefs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiAgICAvKioNCiAgICAqIE1hcHBpbmcgZnJvbSBuYW1lZCBjb2xvcnMgdG8gUkdCIHZhbHVlcy4NCiAgICAqDQogICAgKiBAdmFyICBhcnJheQ0KICAgICovDQogICAgJGNvbG9ybmFtZXMgPSBhcnJheSgNCiAgICAgICAgJ2FsaWNlYmx1ZScgICAgID0+IGFycmF5KDI0MCwgMjQ4LCAyNTUpLA0KICAgICAgICAnYW50aXF1ZXdoaXRlJyAgPT4gYXJyYXkoMjUwLCAyMzUsIDIxNSksDQogICAgICAgICdhcXVhJyAgICAgICAgICA9PiBhcnJheSgwLCAyNTUsIDI1NSksDQogICAgICAgICdhcXVhbWFyaW5lJyAgICA9PiBhcnJheSgxMjcsIDI1NSwgMjEyKSwNCiAgICAgICAgJ2F6dXJlJyAgICAgICAgID0+IGFycmF5KDI0MCwgMjU1LCAgMjU1KSwNCiAgICAgICAgJ2JlaWdlJyAgICAgICAgID0+IGFycmF5KDI0NSwgMjQ1LCAyMjApLA0KICAgICAgICAnYmlzcXVlJyAgICAgICAgPT4gYXJyYXkoMjU1LCAyMjgsIDE5NiksDQogICAgICAgICdibGFjaycgICAgICAgICA9PiBhcnJheSgwLCAwLCAwKSwNCiAgICAgICAgJ2JsYW5jaGVkYWxtb25kJz0+IGFycmF5KDI1NSwgMjM1LCAyMDUpLA0KICAgICAgICAnYmx1ZScgICAgICAgICAgPT4gYXJyYXkoMCwgMCwgMjU1KSwNCiAgICAgICAgJ2JsdWV2aW9sZXQnICAgID0+IGFycmF5KDEzOCwgNDMsIDIyNiksDQogICAgICAgICdicm93bicgICAgICAgICA9PiBhcnJheSgxNjUsIDQyLCA0MiksDQogICAgICAgICdidXJseXdvb2QnICAgICA9PiBhcnJheSgyMjIsIDE4NCwgMTM1KSwNCiAgICAgICAgJ2NhZGV0Ymx1ZScgICAgID0+IGFycmF5KDk1LCAxNTgsIDE2MCksDQogICAgICAgICdjaGFydHJldXNlJyAgICA9PiBhcnJheSgxMjcsIDI1NSwgMCksDQogICAgICAgICdjaG9jb2xhdGUnICAgICA9PiBhcnJheSgyMTAsIDEwNSwgMzApLA0KICAgICAgICAnY29yYWwnICAgICAgICAgPT4gYXJyYXkoMjU1LCAxMjcsIDgwKSwNCiAgICAgICAgJ2Nvcm5mbG93ZXJibHVlJz0+IGFycmF5KDEwMCwgMTQ5LCAgMjM3KSwNCiAgICAgICAgJ2Nvcm5zaWxrJyAgICAgID0+IGFycmF5KDI1NSwgMjQ4LCAyMjApLA0KICAgICAgICAnY3JpbXNvbicgICAgICAgPT4gYXJyYXkoMjIwLCAyMCwgNjApLA0KICAgICAgICAnY3lhbicgICAgICAgICAgPT4gYXJyYXkoMCwgMjU1LCAyNTUpLA0KICAgICAgICAnZGFya2JsdWUnICAgICAgPT4gYXJyYXkoMCwgMCwgMTMpLA0KICAgICAgICAnZGFya2N5YW4nICAgICAgPT4gYXJyYXkoMCwgMTM5LCAxMzkpLA0KICAgICAgICAnZGFya2dvbGRlbnJvZCcgPT4gYXJyYXkoMTg0LCAxMzQsIDExKSwNCiAgICAgICAgJ2RhcmtncmF5JyAgICAgID0+IGFycmF5KDE2OSwgMTY5LCAxNjkpLA0KICAgICAgICAnZGFya2dyZWVuJyAgICAgPT4gYXJyYXkoMCwgMTAwLCAwKSwNCiAgICAgICAgJ2RhcmtraGFraScgICAgID0+IGFycmF5KDE4OSwgMTgzLCAxMDcpLA0KICAgICAgICAnZGFya21hZ2VudGEnICAgPT4gYXJyYXkoMTM5LCAwLCAxMzkpLA0KICAgICAgICAnZGFya29saXZlZ3JlZW4nPT4gYXJyYXkoODUsIDEwNywgNDcpLA0KICAgICAgICAnZGFya29yYW5nZScgICAgPT4gYXJyYXkoMjU1LCAxNDAsIDApLA0KICAgICAgICAnZGFya29yY2hpZCcgICAgPT4gYXJyYXkoMTUzLCA1MCwgMjA0KSwNCiAgICAgICAgJ2RhcmtyZWQnICAgICAgID0+IGFycmF5KDEzOSwgMCwgMCksDQogICAgICAgICdkYXJrc2FsbW9uJyAgICA9PiBhcnJheSgyMzMsIDE1MCwgMTIyKSwNCiAgICAgICAgJ2RhcmtzZWFncmVlbicgID0+IGFycmF5KDE0MywgMTg4LCAxNDMpLA0KICAgICAgICAnZGFya3NsYXRlYmx1ZScgPT4gYXJyYXkoNzIsIDYxLCAxMzkpLA0KICAgICAgICAnZGFya3NsYXRlZ3JheScgPT4gYXJyYXkoNDcsIDc5LCA3OSksDQogICAgICAgICdkYXJrdHVycXVvaXNlJyA9PiBhcnJheSgwLCAyMDYsIDIwOSksDQogICAgICAgICdkYXJrdmlvbGV0JyAgICA9PiBhcnJheSgxNDgsIDAsIDIxMSksDQogICAgICAgICdkZWVwcGluaycgICAgICA9PiBhcnJheSgyNTUsIDIwLCAxNDcpLA0KICAgICAgICAnZGVlcHNreWJsdWUnICAgPT4gYXJyYXkoMCwgMTkxLCAyNTUpLA0KICAgICAgICAnZGltZ3JheScgICAgICAgPT4gYXJyYXkoMTA1LCAxMDUsIDEwNSksDQogICAgICAgICdkb2RnZXJibHVlJyAgICA9PiBhcnJheSgzMCwgMTQ0LCAyNTUpLA0KICAgICAgICAnZmlyZWJyaWNrJyAgICAgPT4gYXJyYXkoMTc4LCAzNCwgMzQpLA0KICAgICAgICAnZmxvcmFsd2hpdGUnICAgPT4gYXJyYXkoMjU1LCAyNTAsIDI0MCksDQogICAgICAgICdmb3Jlc3RncmVlbicgICA9PiBhcnJheSgzNCwgMTM5LCAzNCksDQogICAgICAgICdmdWNoc2lhJyAgICAgICA9PiBhcnJheSgyNTUsIDAsIDI1NSksDQogICAgICAgICdnYWluc2Jvcm8nICAgICA9PiBhcnJheSgyMjAsIDIyMCwgMjIwKSwNCiAgICAgICAgJ2dob3N0d2hpdGUnICAgID0+IGFycmF5KDI0OCwgMjQ4LCAyNTUpLA0KICAgICAgICAnZ29sZCcgICAgICAgICAgPT4gYXJyYXkoMjU1LCAyMTUsIDApLA0KICAgICAgICAnZ29sZGVucm9kJyAgICAgPT4gYXJyYXkoMjE4LCAxNjUsIDMyKSwNCiAgICAgICAgJ2dyYXknICAgICAgICAgID0+IGFycmF5KDEyOCwgMTI4LCAxMjgpLA0KICAgICAgICAnZ3JlZW4nICAgICAgICAgPT4gYXJyYXkoMCwgMTI4LCAwKSwNCiAgICAgICAgJ2dyZWVueWVsbG93JyAgID0+IGFycmF5KDE3MywgMjU1LCA0NyksDQogICAgICAgICdob25leWRldycgICAgICA9PiBhcnJheSgyNDAsIDI1NSwgMjQwKSwNCiAgICAgICAgJ2hvdHBpbmsnICAgICAgID0+IGFycmF5KDI1NSwgMTA1LCAxODApLA0KICAgICAgICAnaW5kaWFucmVkJyAgICAgPT4gYXJyYXkoMjA1LCA5MiwgOTIpLA0KICAgICAgICAnaW5kaWdvJyAgICAgICAgPT4gYXJyYXkoNzUsIDAsIDEzMCksDQogICAgICAgICdpdm9yeScgICAgICAgICA9PiBhcnJheSgyNTUsIDI1NSwgMjQwKSwNCiAgICAgICAgJ2toYWtpJyAgICAgICAgID0+IGFycmF5KDI0MCwgMjMwLCAxNDApLA0KICAgICAgICAnbGF2ZW5kZXInICAgICAgPT4gYXJyYXkoMjMwLCAyMzAsIDI1MCksDQogICAgICAgICdsYXZlbmRlcmJsdXNoJyA9PiBhcnJheSgyNTUsIDI0MCwgMjQ1KSwNCiAgICAgICAgJ2xhd25ncmVlbicgICAgID0+IGFycmF5KDEyNCwgMjUyLCAgMCksDQogICAgICAgICdsZW1vbmNoaWZmb24nICA9PiBhcnJheSgyNTUsIDI1MCwgMjA1KSwNCiAgICAgICAgJ2xpZ2h0Ymx1ZScgICAgID0+IGFycmF5KDE3MywgMjE2LCAyMzApLA0KICAgICAgICAnbGlnaHRjb3JhbCcgICAgPT4gYXJyYXkoMjQwLCAxMjgsIDEyOCksDQogICAgICAgICdsaWdodGN5YW4nICAgICA9PiBhcnJheSgyMjQsIDI1NSwgMjU1KSwNCiAgICAgICAgJ2xpZ2h0Z29sZGVucm9keWVsbG93JyA9PiBhcnJheSgyNTAsIDI1MCwgMjEwKSwNCiAgICAgICAgJ2xpZ2h0Z3JlZW4nICAgID0+IGFycmF5KDE0NCwgMjM4LCAxNDQpLA0KICAgICAgICAnbGlnaHRncmV5JyAgICAgPT4gYXJyYXkoMjExLCAyMTEsIDIxMSksDQogICAgICAgICdsaWdodHBpbmsnICAgICA9PiBhcnJheSgyNTUsIDE4MiwgMTkzKSwNCiAgICAgICAgJ2xpZ2h0c2FsbW9uJyAgID0+IGFycmF5KDI1NSwgMTYwLCAxMjIpLA0KICAgICAgICAnbGlnaHRzZWFncmVlbicgPT4gYXJyYXkoMzIsIDE3OCwgMTcwKSwNCiAgICAgICAgJ2xpZ2h0c2t5Ymx1ZScgID0+IGFycmF5KDEzNSwgMjA2LCAyNTApLA0KICAgICAgICAnbGlnaHRzbGF0ZWdyYXknPT4gYXJyYXkoMTE5LCAxMzYsIDE1MyksDQogICAgICAgICdsaWdodHN0ZWVsYmx1ZSc9PiBhcnJheSgxNzYsIDE5NiwgMjIyKSwNCiAgICAgICAgJ2xpZ2h0eWVsbG93JyAgID0+IGFycmF5KDI1NSwgMjU1LCAyMjQpLA0KICAgICAgICAnbGltZScgICAgICAgICAgPT4gYXJyYXkoMCwgMjU1LCAwKSwNCiAgICAgICAgJ2xpbWVncmVlbicgICAgID0+IGFycmF5KDUwLCAyMDUsIDUwKSwNCiAgICAgICAgJ2xpbmVuJyAgICAgICAgID0+IGFycmF5KDI1MCwgMjQwLCAyMzApLA0KICAgICAgICAnbWFnZW50YScgICAgICAgPT4gYXJyYXkoMjU1LCAwLCAyNTUpLA0KICAgICAgICAnbWFyb29uJyAgICAgICAgPT4gYXJyYXkoMTI4LCAwLCAwKSwNCiAgICAgICAgJ21lZGl1bWFxdWFtYXJpbmUnID0+IGFycmF5KDEwMiwgMjA1LCAxNzApLA0KICAgICAgICAnbWVkaXVtYmx1ZScgICAgPT4gYXJyYXkoMCwgMCwgMjA1KSwNCiAgICAgICAgJ21lZGl1bW9yY2hpZCcgID0+IGFycmF5KDE4NiwgODUsIDIxMSksDQogICAgICAgICdtZWRpdW1wdXJwbGUnICA9PiBhcnJheSgxNDcsIDExMiwgMjE5KSwNCiAgICAgICAgJ21lZGl1bXNlYWdyZWVuJz0+IGFycmF5KDYwLCAxNzksIDExMyksDQogICAgICAgICdtZWRpdW1zbGF0ZWJsdWUnICAgPT4gYXJyYXkoMTIzLCAxMDQsIDIzOCksDQogICAgICAgICdtZWRpdW1zcHJpbmdncmVlbicgPT4gYXJyYXkoMCwgMjUwLCAxNTQpLA0KICAgICAgICAnbWVkaXVtdHVycXVvaXNlJyAgID0+IGFycmF5KDcyLCAyMDksIDIwNCksDQogICAgICAgICdtZWRpdW12aW9sZXRyZWQnICAgPT4gYXJyYXkoMTk5LCAyMSwgMTMzKSwNCiAgICAgICAgJ21pZG5pZ2h0Ymx1ZScgID0+IGFycmF5KDI1LCAyNSwgMTEyKSwNCiAgICAgICAgJ21pbnRjcmVhbScgICAgID0+IGFycmF5KDI0NSwgMjU1LCAyNTApLA0KICAgICAgICAnbWlzdHlyb3NlJyAgICAgPT4gYXJyYXkoMjU1LCAyMjgsIDIyNSksDQogICAgICAgICdtb2NjYXNpbicgICAgICA9PiBhcnJheSgyNTUsIDIyOCwgMTgxKSwNCiAgICAgICAgJ25hdmFqb3doaXRlJyAgID0+IGFycmF5KDI1NSwgMjIyLCAxNzMpLA0KICAgICAgICAnbmF2eScgICAgICAgICAgPT4gYXJyYXkoMCwgMCwgMTI4KSwNCiAgICAgICAgJ29sZGxhY2UnICAgICAgID0+IGFycmF5KDI1MywgMjQ1LCAyMzApLA0KICAgICAgICAnb2xpdmUnICAgICAgICAgPT4gYXJyYXkoMTI4LCAxMjgsIDApLA0KICAgICAgICAnb2xpdmVkcmFiJyAgICAgPT4gYXJyYXkoMTA3LCAxNDIsIDM1KSwNCiAgICAgICAgJ29yYW5nZScgICAgICAgID0+IGFycmF5KDI1NSwgMTY1LCAwKSwNCiAgICAgICAgJ29yYW5nZXJlZCcgICAgID0+IGFycmF5KDI1NSw2OSwwKSwNCiAgICAgICAgJ29yY2hpZCcgICAgICAgID0+IGFycmF5KDIxOCwxMTIsMjE0KSwNCiAgICAgICAgJ3BhbGVnb2xkZW5yb2QnID0+IGFycmF5KDIzOCwyMzIsMTcwKSwNCiAgICAgICAgJ3BhbGVncmVlbicgICAgID0+IGFycmF5KDE1MiwyNTEsMTUyKSwNCiAgICAgICAgJ3BhbGV0dXJxdW9pc2UnID0+IGFycmF5KDE3NSwyMzgsMjM4KSwNCiAgICAgICAgJ3BhbGV2aW9sZXRyZWQnID0+IGFycmF5KDIxOSwxMTIsMTQ3KSwNCiAgICAgICAgJ3BhcGF5YXdoaXAnICAgID0+IGFycmF5KDI1NSwyMzksMjEzKSwNCiAgICAgICAgJ3BlYWNocHVmZicgICAgID0+IGFycmF5KDI1NSwyMTgsMTg1KSwNCiAgICAgICAgJ3BlcnUnID0+IGFycmF5KDIwNSwxMzMsNjMpLA0KICAgICAgICAncGluaycgPT4gYXJyYXkoMjU1LDE5MiwyMDMpLA0KICAgICAgICAncGx1bScgPT4gYXJyYXkoMjIxLDE2MCwyMjEpLA0KICAgICAgICAncG93ZGVyYmx1ZScgPT4gYXJyYXkoMTc2LDIyNCwyMzApLA0KICAgICAgICAncHVycGxlJyA9PiBhcnJheSgxMjgsMCwxMjgpLA0KICAgICAgICAncmVkJyA9PiBhcnJheSgyNTUsMCwwKSwNCiAgICAgICAgJ3Jvc3licm93bicgPT4gYXJyYXkoMTg4LDE0MywxNDMpLA0KICAgICAgICAncm95YWxibHVlJyA9PiBhcnJheSg2NSwxMDUsMjI1KSwNCiAgICAgICAgJ3NhZGRsZWJyb3duJyA9PiBhcnJheSgxMzksNjksMTkpLA0KICAgICAgICAnc2FsbW9uJyA9PiBhcnJheSgyNTAsMTI4LDExNCksDQogICAgICAgICdzYW5keWJyb3duJyA9PiBhcnJheSgyNDQsMTY0LDk2KSwNCiAgICAgICAgJ3NlYWdyZWVuJyA9PiBhcnJheSg0NiwxMzksODcpLA0KICAgICAgICAnc2Vhc2hlbGwnID0+IGFycmF5KDI1NSwyNDUsMjM4KSwNCiAgICAgICAgJ3NpZW5uYScgPT4gYXJyYXkoMTYwLDgyLDQ1KSwNCiAgICAgICAgJ3NpbHZlcicgPT4gYXJyYXkoMTkyLDE5MiwxOTIpLA0KICAgICAgICAnc2t5Ymx1ZScgPT4gYXJyYXkoMTM1LDIwNiwyMzUpLA0KICAgICAgICAnc2xhdGVibHVlJyA9PiBhcnJheSgxMDYsOTAsMjA1KSwNCiAgICAgICAgJ3NsYXRlZ3JheScgPT4gYXJyYXkoMTEyLDEyOCwxNDQpLA0KICAgICAgICAnc25vdycgPT4gYXJyYXkoMjU1LDI1MCwyNTApLA0KICAgICAgICAnc3ByaW5nZ3JlZW4nID0+IGFycmF5KDAsMjU1LDEyNyksDQogICAgICAgICdzdGVlbGJsdWUnID0+IGFycmF5KDcwLDEzMCwxODApLA0KICAgICAgICAndGFuJyA9PiBhcnJheSgyMTAsMTgwLDE0MCksDQogICAgICAgICd0ZWFsJyA9PiBhcnJheSgwLDEyOCwxMjgpLA0KICAgICAgICAndGhpc3RsZScgPT4gYXJyYXkoMjE2LDE5MSwyMTYpLA0KICAgICAgICAndG9tYXRvJyA9PiBhcnJheSgyNTUsOTksNzEpLA0KICAgICAgICAndHVycXVvaXNlJyA9PiBhcnJheSg2NCwyMjQsMjA4KSwNCiAgICAgICAgJ3Zpb2xldCcgPT4gYXJyYXkoMjM4LDEzMCwyMzgpLA0KICAgICAgICAnd2hlYXQnID0+IGFycmF5KDI0NSwyMjIsMTc5KSwNCiAgICAgICAgJ3doaXRlJyA9PiBhcnJheSgyNTUsMjU1LDI1NSksDQogICAgICAgICd3aGl0ZXNtb2tlJyA9PiBhcnJheSgyNDUsMjQ1LDI0NSksDQogICAgICAgICd5ZWxsb3cnID0+IGFycmF5KDI1NSwyNTUsMCksDQogICAgICAgICd5ZWxsb3dncmVlbicgPT4gYXJyYXkoMTU0LDIwNSw1MCkNCiAgICApOw0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/GD.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyogdmltOiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9NCBzaGlmdHdpZHRoPTQ6ICovDQoNCi8qKg0KICogR0QgaW1wbGVtZW50YXRpb24gZm9yIEltYWdlX1RyYW5zZm9ybSBwYWNrYWdlDQogKg0KICogUEhQIHZlcnNpb25zIDQgYW5kIDUNCiAqDQogKiBMSUNFTlNFOiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdmVyc2lvbiAzLjAgb2YgdGhlIFBIUCBsaWNlbnNlDQogKiB0aGF0IGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGUgZm9sbG93aW5nIFVSSToNCiAqIGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQuICBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZg0KICogdGhlIFBIUCBMaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3ZWIsIHBsZWFzZQ0KICogc2VuZCBhIG5vdGUgdG8gbGljZW5zZUBwaHAubmV0IHNvIHdlIGNhbiBtYWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuDQogKg0KICogQGNhdGVnb3J5ICAgSW1hZ2UNCiAqIEBwYWNrYWdlICAgIEltYWdlX1RyYW5zZm9ybQ0KICogQHN1YnBhY2thZ2UgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9HRA0KICogQGF1dGhvciAgICAgQWxhbiBLbm93bGVzIDxhbGFuQGFrYmtob21lLmNvbT4NCiAqIEBhdXRob3IgICAgIFBldGVyIEJvd3llciA8cGV0ZXJAbWFwbGVkZXNpZ24uY28udWs+DQogKiBAYXV0aG9yICAgICBQaGlsaXBwZSBKYXVzaW9ucyA8UGhpbGlwcGUuSmF1c2lvbnNAMTFhYmFjdXMuY29tPg0KICogQGNvcHlyaWdodCAgMjAwMi0yMDA1IFRoZSBQSFAgR3JvdXANCiAqIEBsaWNlbnNlICAgIGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQgIFBIUCBMaWNlbnNlIDMuMA0KICogQHZlcnNpb24gICAgQ1ZTOiAkSWQ6IEdELnBocCAzMjI2NjEgMjAxMi0wMS0yNCAxMjowMjo1OVogY2xvY2t3ZXJ4ICQNCiAqIEBsaW5rICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9JbWFnZV9UcmFuc2Zvcm0NCiAqLw0KDQpyZXF1aXJlX29uY2UgJ0ltYWdlL1RyYW5zZm9ybS5waHAnOw0KDQovKioNCiAqIEdEIGltcGxlbWVudGF0aW9uIGZvciBJbWFnZV9UcmFuc2Zvcm0gcGFja2FnZQ0KICoNCiAqIFVzYWdlIDoNCiAqICAgICRpbWcgICAgPSYgSW1hZ2VfVHJhbnNmb3JtOjpmYWN0b3J5KCdHRCcpOw0KICogICAgJGFuZ2xlICA9IC03ODsNCiAqICAgICRpbWctPmxvYWQoJ21hZ2ljay5wbmcnKTsNCiAqDQogKiAgICBpZiAoJGltZy0+cm90YXRlKCRhbmdsZSwgYXJyYXkoDQogKiAgICAgICAgICAgICAgICdhdXRvcmVzaXplJyA9PiB0cnVlLA0KICogICAgICAgICAgICAgICAnY29sb3JfbWFzaycgPT4gYXJyYXkoMjU1LCAwLCAwKSkpKSB7DQogKiAgICAgICAgJGltZy0+YWRkVGV4dChhcnJheSgNCiAqICAgICAgICAgICAgICAgJ3RleHQnID0+ICdSb3RhdGlvbiAnIC4gJGFuZ2xlLA0KICogICAgICAgICAgICAgICAneCcgPT4gMCwNCiAqICAgICAgICAgICAgICAgJ3knID0+IDEwMCwNCiAqICAgICAgICAgICAgICAgJ2ZvbnQnID0+ICcvdXNyL3NoYXJlL2ZvbnRzL2RlZmF1bHQvVHJ1ZVR5cGUvY29nYl9fX18udHRmJykpOw0KICogICAgICAgICRpbWctPmRpc3BsYXkoKTsNCiAqICAgIH0gZWxzZSB7DQogKiAgICAgICAgZWNobyAiRXJyb3IiOw0KICogICAgfQ0KICogICAgJGltZy0+ZnJlZSgpOw0KICoNCiAqIEBjYXRlZ29yeSAgIEltYWdlDQogKiBAcGFja2FnZSAgICBJbWFnZV9UcmFuc2Zvcm0NCiAqIEBzdWJwYWNrYWdlIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfR0QNCiAqIEBhdXRob3IgICAgIEFsYW4gS25vd2xlcyA8YWxhbkBha2JraG9tZS5jb20+DQogKiBAYXV0aG9yICAgICBQZXRlciBCb3d5ZXIgPHBldGVyQG1hcGxlZGVzaWduLmNvLnVrPg0KICogQGF1dGhvciAgICAgUGhpbGlwcGUgSmF1c2lvbnMgPFBoaWxpcHBlLkphdXNpb25zQDExYWJhY3VzLmNvbT4NCiAqIEBjb3B5cmlnaHQgIDIwMDItMjAwNSBUaGUgUEhQIEdyb3VwDQogKiBAbGljZW5zZSAgICBodHRwOi8vd3d3LnBocC5uZXQvbGljZW5zZS8zXzAudHh0ICBQSFAgTGljZW5zZSAzLjANCiAqIEB2ZXJzaW9uICAgIFJlbGVhc2U6IEBwYWNrYWdlX3ZlcnNpb25ADQogKiBAbGluayAgICAgICBodHRwOi8vcGVhci5waHAubmV0L3BhY2thZ2UvSW1hZ2VfVHJhbnNmb3JtDQogKiBAc2luY2UgICAgICBQSFAgNC4wDQogKi8NCmNsYXNzIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfR0QgZXh0ZW5kcyBJbWFnZV9UcmFuc2Zvcm0NCnsNCiAgICAvKioNCiAgICAgKiBIb2xkcyB0aGUgaW1hZ2UgcmVzb3VyY2UgZm9yIG1hbmlwdWxhdGlvbg0KICAgICAqDQogICAgICogQHZhciByZXNvdXJjZSAkaW1hZ2VIYW5kbGUNCiAgICAgKiBAYWNjZXNzIHByb3RlY3RlZA0KICAgICAqLw0KICAgIHZhciAkaW1hZ2VIYW5kbGUgPSBudWxsOw0KDQogICAgLyoqDQogICAgICogSG9sZHMgdGhlIG9yaWdpbmFsIGltYWdlIGZpbGUNCiAgICAgKg0KICAgICAqIEB2YXIgcmVzb3VyY2UgJGltYWdlSGFuZGxlDQogICAgICogQGFjY2VzcyBwcm90ZWN0ZWQNCiAgICAgKi8NCiAgICB2YXIgJG9sZEltYWdlID0gbnVsbDsNCg0KICAgIC8qKg0KICAgICAqIENoZWNrIHNldHRpbmdzDQogICAgICovDQogICAgZnVuY3Rpb24gSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9HRCgpDQogICAgew0KICAgICAgICAkdGhpcy0+X19jb25zdHJ1Y3QoKTsNCiAgICB9IC8vIEVuZCBmdW5jdGlvbiBJbWFnZQ0KDQogICAgLyoqDQogICAgICogQ2hlY2sgc2V0dGluZ3MNCiAgICAgKg0KICAgICAqIEBzaW5jZSBQSFAgNQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgICB7DQogICAgICAgIGlmICghUEVBUjo6bG9hZEV4dGVuc2lvbignZ2QnKSkgew0KICAgICAgICAgICAgJHRoaXMtPmlzRXJyb3IoUEVBUjo6cmFpc2VFcnJvcigiR0QgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLiIsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdHlwZXMgPSBJbWFnZVR5cGVzKCk7DQogICAgICAgICAgICBpZiAoJHR5cGVzICYgSU1HX1BORykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5fc3VwcG9ydGVkX2ltYWdlX3R5cGVzWydwbmcnXSA9ICdydyc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoKCR0eXBlcyAmIElNR19HSUYpDQogICAgICAgICAgICAgICAgfHwgZnVuY3Rpb25fZXhpc3RzKCdpbWFnZWdpZicpKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9zdXBwb3J0ZWRfaW1hZ2VfdHlwZXNbJ2dpZiddID0gJ3J3JzsNCiAgICAgICAgICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ2ltYWdlY3JlYXRlZnJvbWdpZicpKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9zdXBwb3J0ZWRfaW1hZ2VfdHlwZXNbJ2dpZiddID0gJ3J3JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICgkdHlwZXMgJiBJTUdfSlBHKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9zdXBwb3J0ZWRfaW1hZ2VfdHlwZXNbJ2pwZWcnXSA9ICdydyc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJHR5cGVzICYgSU1HX1dCTVApIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X3N1cHBvcnRlZF9pbWFnZV90eXBlc1snd2JtcCddID0gJ3J3JzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghJHRoaXMtPl9zdXBwb3J0ZWRfaW1hZ2VfdHlwZXMpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+aXNFcnJvcihQRUFSOjpyYWlzZUVycm9yKCJObyBzdXBwb3J0ZWQgaW1hZ2UgdHlwZXMgYXZhaWxhYmxlIiwgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgIH0gLy8gRW5kIGZ1bmN0aW9uIEltYWdlDQoNCiAgICAvKioNCiAgICAgKiBMb2FkcyBhbiBpbWFnZSBmcm9tIGZpbGUNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGltYWdlIGZpbGVuYW1lDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBsb2FkKCRpbWFnZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5mcmVlKCk7DQoNCiAgICAgICAgJHRoaXMtPmltYWdlID0gJGltYWdlOw0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPl9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOw0KICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcmVzdWx0KSkgew0KICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCEkdGhpcy0+c3VwcG9ydHNUeXBlKCR0aGlzLT50eXBlLCAncicpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignSW1hZ2UgdHlwZSBub3Qgc3VwcG9ydGVkIGZvciBpbnB1dCcsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICAgICAgfQ0KDQogICAgICAgICRmdW5jdGlvbk5hbWUgPSAnSW1hZ2VDcmVhdGVGcm9tJyAuICR0aGlzLT50eXBlOw0KICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgPSAkZnVuY3Rpb25OYW1lKCR0aGlzLT5pbWFnZSk7DQogICAgICAgIGlmICghJHRoaXMtPmltYWdlSGFuZGxlKSB7DQogICAgICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgPSBudWxsOw0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ0Vycm9yIHdoaWxlIGxvYWRpbmcgaW1hZ2UgZmlsZS4nLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9JTyk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRydWU7DQoNCiAgICB9IC8vIEVuZCBsb2FkDQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIHRoZSBHRCBpbWFnZSBoYW5kbGUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gcmVzb3VyY2UNCiAgICAgKg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZ2V0SGFuZGxlKCkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+aW1hZ2VIYW5kbGU7DQogICAgfS8vZnVuY3Rpb24gZ2V0SGFuZGxlKCkNCg0KICAgIC8qKg0KICAgICAqIEFkZHMgYSBib3JkZXIgb2YgY29uc3RhbnQgd2lkdGggYXJvdW5kIGFuIGltYWdlDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICRib3JkZXJfd2lkdGggV2lkdGggb2YgYm9yZGVyIHRvIGFkZA0KICAgICAqIEBhdXRob3IgUGV0ZXIgQm93eWVyDQogICAgICogQHJldHVybiBib29sIFRSVUUNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGFkZEJvcmRlcigkYm9yZGVyX3dpZHRoLCAkY29sb3IgPSAnJykNCiAgICB7DQogICAgICAgICR0aGlzLT5uZXdfeCA9ICR0aGlzLT5pbWdfeCArIDIgKiAkYm9yZGVyX3dpZHRoOw0KICAgICAgICAkdGhpcy0+bmV3X3kgPSAkdGhpcy0+aW1nX3kgKyAyICogJGJvcmRlcl93aWR0aDsNCg0KICAgICAgICAkbmV3X2ltZyA9ICR0aGlzLT5fY3JlYXRlSW1hZ2UoJG5ld194LCAkbmV3X3ksICR0aGlzLT50cnVlX2NvbG9yKTsNCg0KICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCdwZW5jaWxDb2xvcicsICRjb2xvcik7DQogICAgICAgICRjb2xvciA9ICR0aGlzLT5fZ2V0Q29sb3IoJ3BlbmNpbENvbG9yJywgJG9wdGlvbnMsIGFycmF5KDAsIDAsIDApKTsNCiAgICAgICAgaWYgKCRjb2xvcikgew0KICAgICAgICAgICAgaWYgKCR0aGlzLT50cnVlX2NvbG9yKSB7DQogICAgICAgICAgICAgICAgJGMgPSBpbWFnZWNvbG9ycmVzb2x2ZSgkdGhpcy0+aW1hZ2VIYW5kbGUsICRjb2xvclswXSwgJGNvbG9yWzFdLCAkY29sb3JbMl0pOw0KICAgICAgICAgICAgICAgIGltYWdlZmlsbCgkbmV3X2ltZywgMCwgMCwgJGMpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBpbWFnZWNvbG9yc2V0KCRuZXdfaW1nLCBpbWFnZWNvbG9yYXQoJG5ld19pbWcsIDAsIDApLCAkY29sb3JbMF0sICRjb2xvclsxXSwgJGNvbG9yWzJdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBJbWFnZUNvcHkoJG5ld19pbWcsICR0aGlzLT5pbWFnZUhhbmRsZSwgJGJvcmRlcl93aWR0aCwgJGJvcmRlcl93aWR0aCwgMCwgMCwgJHRoaXMtPmltZ194LCAkdGhpcy0+aW1nX3kpOw0KICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgPSAkbmV3X2ltZzsNCiAgICAgICAgJHRoaXMtPnJlc2l6ZWQgPSB0cnVlOw0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIGFkZFRleHQNCiAgICAgKg0KICAgICAqIEBwYXJhbSAgIGFycmF5ICAgJHBhcmFtcyAgICAgQXJyYXkgY29udGFpbnMgb3B0aW9ucw0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQnICBUaGUgc3RyaW5nIHRvIGRyYXcNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneCcgICAgIEhvcml6b250YWwgcG9zaXRpb24NCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneScgICAgIFZlcnRpY2FsIFBvc2l0aW9uDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJyBGb250IGNvbG9yDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQnICBGb250IHRvIGJlIHVzZWQNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZScgIFNpemUgb2YgdGhlIGZvbnRzIGluIHBpeGVsDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc2l6ZV9maXJzdCcgIFRlbGwgaWYgdGhlIGltYWdlIGhhcyB0byBiZSByZXNpemVkDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSBkcmF3aW5nIHRoZSB0ZXh0DQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9yIGEgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKi8NCiAgICBmdW5jdGlvbiBhZGRUZXh0KCRwYXJhbXMpDQogICAgew0KICAgICAgICAkdGhpcy0+b2xkSW1hZ2UgPSAkdGhpcy0+aW1hZ2VIYW5kbGU7DQogICAgICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZSgkdGhpcy0+X2dldF9kZWZhdWx0X3RleHRfcGFyYW1zKCksICRwYXJhbXMpOw0KICAgICAgICBleHRyYWN0KCRwYXJhbXMpOw0KDQogICAgICAgICRvcHRpb25zID0gYXJyYXkoJ2ZvbnRDb2xvcicgPT4gJGNvbG9yKTsNCiAgICAgICAgJGNvbG9yID0gJHRoaXMtPl9nZXRDb2xvcignZm9udENvbG9yJywgJG9wdGlvbnMsIGFycmF5KDAsIDAsIDApKTsNCg0KICAgICAgICAkYyA9IGltYWdlY29sb3JyZXNvbHZlICgkdGhpcy0+aW1hZ2VIYW5kbGUsICRjb2xvclswXSwgJGNvbG9yWzFdLCAkY29sb3JbMl0pOw0KDQogICAgICAgIGlmICgndHRmJyA9PSBzdWJzdHIoJGZvbnQsIC0zKSkgew0KICAgICAgICAgICAgSW1hZ2VUVEZUZXh0KCR0aGlzLT5pbWFnZUhhbmRsZSwgJHNpemUsICRhbmdsZSwgJHgsICR5LCAkYywgJGZvbnQsICR0ZXh0KTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIEltYWdlUFNUZXh0KCR0aGlzLT5pbWFnZUhhbmRsZSwgJHNpemUsICRhbmdsZSwgJHgsICR5LCAkYywgJGZvbnQsICR0ZXh0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0gLy8gRW5kIGFkZFRleHQNCg0KICAgIC8qKg0KICAgICAqIFJvdGF0ZXMgaW1hZ2UgYnkgdGhlIGdpdmVuIGFuZ2xlDQogICAgICoNCiAgICAgKiBVc2VzIGEgZmFzdCByb3RhdGlvbiBhbGdvcnl0aG0gZm9yIGN1c3RvbSBhbmdsZXMNCiAgICAgKiBvciBsaW5lcyBjb3B5IGZvciBtdWx0aXBsZSBvZiA5MCBkZWdyZWVzDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICAgJGFuZ2xlICAgUm90YXRpb24gYW5nbGUNCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgYXJyYXkoDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYW52YXNDb2xvcicgPT4gYXJyYXkociAsZywgYiksIG5hbWVkIGNvbG9yIG9yICNycmdnYmINCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICogQGF1dGhvciBQaWVycmUtQWxhaW4gSm95ZQ0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gcm90YXRlKCRhbmdsZSwgJG9wdGlvbnMgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKCgkYW5nbGUgJSAzNjApID09IDApIHsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQoNCiAgICAgICAgJGNvbG9yX21hc2sgPSAkdGhpcy0+X2dldENvbG9yKCdjYW52YXNDb2xvcicsICRvcHRpb25zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KDI1NSwgMjU1LCAyNTUpKTsNCg0KICAgICAgICAkbWFzayA9IGltYWdlY29sb3JyZXNvbHZlKCR0aGlzLT5pbWFnZUhhbmRsZSwgJGNvbG9yX21hc2tbMF0sICRjb2xvcl9tYXNrWzFdLCAkY29sb3JfbWFza1syXSk7DQoNCiAgICAgICAgJHRoaXMtPm9sZEltYWdlID0gJHRoaXMtPmltYWdlSGFuZGxlOw0KDQogICAgICAgIC8vIE11bHRpcGx5IGJ5IC0xIHRvIGNoYW5nZSB0aGUgc2lnbiwgc28gdGhlIGltYWdlIGlzIHJvdGF0ZWQgY2xvY2t3aXNlDQogICAgICAgICR0aGlzLT5pbWFnZUhhbmRsZSA9IEltYWdlUm90YXRlKCR0aGlzLT5pbWFnZUhhbmRsZSwgJGFuZ2xlICogLTEsICRtYXNrKTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogSG9yaXpvbnRhbCBtaXJyb3JpbmcNCiAgICAgKg0KICAgICAqIEByZXR1cm4gbWl4ZWQgVFJVRSBvciBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICogQHNlZSBmbGlwKCkNCiAgICAgKiovDQogICAgZnVuY3Rpb24gbWlycm9yKCkNCiAgICB7DQogICAgICAgICRuZXdfaW1nID0gJHRoaXMtPl9jcmVhdGVJbWFnZSgpOw0KICAgICAgICBmb3IgKCR4ID0gMDsgJHggPCAkdGhpcy0+bmV3X3g7ICsrJHgpIHsNCiAgICAgICAgICAgIGltYWdlY29weSgkbmV3X2ltZywgJHRoaXMtPmltYWdlSGFuZGxlLCAkeCwgMCwNCiAgICAgICAgICAgICAgICAkdGhpcy0+bmV3X3ggLSAkeCAtIDEsIDAsIDEsICR0aGlzLT5uZXdfeSk7DQogICAgICAgIH0NCiAgICAgICAgaW1hZ2VkZXN0cm95KCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgICR0aGlzLT5pbWFnZUhhbmRsZSA9ICRuZXdfaW1nOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBWZXJ0aWNhbCBtaXJyb3JpbmcNCiAgICAgKg0KICAgICAqIEByZXR1cm4gVFJVRSBvciBQRUFSIEVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICogQHNlZSBtaXJyb3IoKQ0KICAgICAqKi8NCiAgICBmdW5jdGlvbiBmbGlwKCkNCiAgICB7DQogICAgICAgICRuZXdfaW1nID0gJHRoaXMtPl9jcmVhdGVJbWFnZSgpOw0KICAgICAgICBmb3IgKCR5ID0gMDsgJHkgPCAkdGhpcy0+bmV3X3k7ICsrJHkpIHsNCiAgICAgICAgICAgIGltYWdlY29weSgkbmV3X2ltZywgJHRoaXMtPmltYWdlSGFuZGxlLCAwLCAkeSwNCiAgICAgICAgICAgICAgICAwLCAkdGhpcy0+bmV3X3kgLSAkeSAtIDEsICR0aGlzLT5uZXdfeCwgMSk7DQogICAgICAgIH0NCiAgICAgICAgaW1hZ2VkZXN0cm95KCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgICR0aGlzLT5pbWFnZUhhbmRsZSA9ICRuZXdfaW1nOw0KDQogICAgICAgIC8qIGZvciB2ZXJ5IGxhcmdlIGltYWdlcyB3ZSBtYXkgd2FudCB0byB1c2UgdGhlIGZvbGxvd2luZw0KICAgICAgICAgICBOZWVkcyB0byBmaW5kIG91dCB3aGF0IGlzIHRoZSB0aHJlc2hob2xkDQogICAgICAgIGZvciAoJHggPSAwOyAkeCA8ICR0aGlzLT5uZXdfeDsgKyskeCkgew0KICAgICAgICAgICAgZm9yICgkeTEgPSAwOyAkeTEgPCAkdGhpcy0+bmV3X3kgLyAyOyArKyR5MSkgew0KICAgICAgICAgICAgICAgICR5MiA9ICR0aGlzLT5uZXdfeSAtIDEgLSAkeTE7DQogICAgICAgICAgICAgICAgJGNvbG9yMSA9IGltYWdlY29sb3JhdCgkdGhpcy0+aW1hZ2VIYW5kbGUsICR4LCAkeTEpOw0KICAgICAgICAgICAgICAgICRjb2xvcjIgPSBpbWFnZWNvbG9yYXQoJHRoaXMtPmltYWdlSGFuZGxlLCAkeCwgJHkyKTsNCiAgICAgICAgICAgICAgICBpbWFnZXNldHBpeGVsKCR0aGlzLT5pbWFnZUhhbmRsZSwgJHgsICR5MSwgJGNvbG9yMik7DQogICAgICAgICAgICAgICAgaW1hZ2VzZXRwaXhlbCgkdGhpcy0+aW1hZ2VIYW5kbGUsICR4LCAkeTIsICRjb2xvcjEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9ICovDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENyb3BzIGltYWdlIGJ5IHNpemUgYW5kIHN0YXJ0IGNvb3JkaW5hdGVzDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50IHdpZHRoIENyb3BwZWQgaW1hZ2Ugd2lkdGgNCiAgICAgKiBAcGFyYW0gaW50IGhlaWdodCBDcm9wcGVkIGltYWdlIGhlaWdodA0KICAgICAqIEBwYXJhbSBpbnQgeCBYLWNvb3JkaW5hdGUgdG8gY3JvcCBhdA0KICAgICAqIEBwYXJhbSBpbnQgeSBZLWNvb3JkaW5hdGUgdG8gY3JvcCBhdA0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gY3JvcCgkd2lkdGgsICRoZWlnaHQsICR4ID0gMCwgJHkgPSAwKQ0KICAgIHsNCiAgICAgICAgLy8gU2FuaXR5IGNoZWNrDQogICAgICAgIGlmICghJHRoaXMtPmludGVyc2VjdHMoJHdpZHRoLCAkaGVpZ2h0LCAkeCwgJHkpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignTm90aGluZyB0byBjcm9wJywgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX09VVE9GQk9VTkQpOw0KICAgICAgICB9DQogICAgICAgICR4ID0gbWluKCR0aGlzLT5uZXdfeCwgbWF4KDAsICR4KSk7DQogICAgICAgICR5ID0gbWluKCR0aGlzLT5uZXdfeSwgbWF4KDAsICR5KSk7DQogICAgICAgICR3aWR0aCAgID0gbWluKCR3aWR0aCwgICR0aGlzLT5uZXdfeCAtICR4KTsNCiAgICAgICAgJGhlaWdodCAgPSBtaW4oJGhlaWdodCwgJHRoaXMtPm5ld195IC0gJHkpOw0KICAgICAgICAkbmV3X2ltZyA9ICR0aGlzLT5fY3JlYXRlSW1hZ2UoJHdpZHRoLCAkaGVpZ2h0KTsNCg0KICAgICAgICBpZiAoIWltYWdlY29weSgkbmV3X2ltZywgJHRoaXMtPmltYWdlSGFuZGxlLCAwLCAwLCAkeCwgJHksICR3aWR0aCwgJGhlaWdodCkpIHsNCiAgICAgICAgICAgIGltYWdlZGVzdHJveSgkbmV3X2ltZyk7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignRmFpbGVkIHRyYW5zZm9ybWF0aW9uOiBjcm9wKCknLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9GQUlMRUQpOw0KICAgICAgICB9DQoNCiAgICAgICAgJHRoaXMtPm9sZEltYWdlID0gJHRoaXMtPmltYWdlSGFuZGxlOw0KICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgPSAkbmV3X2ltZzsNCiAgICAgICAgJHRoaXMtPnJlc2l6ZWQgPSB0cnVlOw0KDQogICAgICAgICR0aGlzLT5uZXdfeCA9ICR3aWR0aDsNCiAgICAgICAgJHRoaXMtPm5ld195ID0gJGhlaWdodDsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ29udmVydHMgdGhlIGltYWdlIHRvIGdyZXlzY2FsZQ0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBncmV5c2NhbGUoKSB7DQogICAgICAgIGltYWdlY29weW1lcmdlZ3JheSgkdGhpcy0+aW1hZ2VIYW5kbGUsICR0aGlzLT5pbWFnZUhhbmRsZSwgMCwgMCwgMCwgMCwgJHRoaXMtPm5ld194LCAkdGhpcy0+bmV3X3ksIDApOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXNpemUgQWN0aW9uDQogICAgICoNCiAgICAgKiBGb3IgR0QgMi4wMSsgdGhlIG5ldyBjb3B5cmVzYW1wbGVkIGZ1bmN0aW9uIGlzIHVzZWQNCiAgICAgKiBJdCB1c2VzIGEgYmljdWJpYyBpbnRlcnBvbGF0aW9uIGFsZ29yaXRobSB0byBnZXQgZmFyDQogICAgICogYmV0dGVyIHJlc3VsdC4NCiAgICAgKg0KICAgICAqIEBwYXJhbSBpbnQgICAkbmV3X3ggICBOZXcgd2lkdGgNCiAgICAgKiBAcGFyYW0gaW50ICAgJG5ld195ICAgTmV3IGhlaWdodA0KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBPcHRpb25hbCBwYXJhbWV0ZXJzDQogICAgICogPHVsPg0KICAgICAqICA8bGk+J3NjYWxlTWV0aG9kJzogInBpeGVsIiBvciAic21vb3RoIjwvbGk+DQogICAgICogPC91bD4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb24gc3VjY2VzcyBvciBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgZnVuY3Rpb24gX3Jlc2l6ZSgkbmV3X3gsICRuZXdfeSwgJG9wdGlvbnMgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKCR0aGlzLT5yZXNpemVkID09PSB0cnVlKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignWW91IGhhdmUgYWxyZWFkeSByZXNpemVkIHRoZSBpbWFnZSB3aXRob3V0IHNhdmluZyBpdC4gIFlvdXIgcHJldmlvdXMgcmVzaXppbmcgd2lsbCBiZSBvdmVyd3JpdHRlbicsIG51bGwsIFBFQVJfRVJST1JfVFJJR0dFUiwgRV9VU0VSX05PVElDRSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoJHRoaXMtPm5ld194ID09ICRuZXdfeCAmJiAkdGhpcy0+bmV3X3kgPT0gJG5ld195KSB7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgICAgICRzY2FsZU1ldGhvZCA9ICR0aGlzLT5fZ2V0T3B0aW9uKCdzY2FsZU1ldGhvZCcsICRvcHRpb25zLCAnc21vb3RoJyk7DQoNCiAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGdldCBhIHRydWUgY29sb3IgaW1hZ2UgaWYgZG9pbmcgcmVzYW1wbGVkIHJlc2l6aW5nDQogICAgICAgIC8vIG90aGVyd2lzZSBnZXQgdGhlIHNhbWUgdHlwZSBvZiBpbWFnZQ0KICAgICAgICAkdHJ1ZUNvbG9yID0gKCRzY2FsZU1ldGhvZCA9PSAncGl4ZWwnKSA/IG51bGwgOiB0cnVlOw0KICAgICAgICAkbmV3X2ltZyA9ICR0aGlzLT5fY3JlYXRlSW1hZ2UoJG5ld194LCAkbmV3X3ksICR0cnVlQ29sb3IpOw0KDQogICAgICAgICRpY3JfcmVzID0gbnVsbDsNCiAgICAgICAgaWYgKCRzY2FsZU1ldGhvZCAhPSAncGl4ZWwnICYmIGZ1bmN0aW9uX2V4aXN0cygnSW1hZ2VDb3B5UmVzYW1wbGVkJykpIHsNCiAgICAgICAgICAgICRpY3JfcmVzID0gSW1hZ2VDb3B5UmVzYW1wbGVkKCRuZXdfaW1nLCAkdGhpcy0+aW1hZ2VIYW5kbGUsIDAsIDAsIDAsIDAsICRuZXdfeCwgJG5ld195LCAkdGhpcy0+aW1nX3gsICR0aGlzLT5pbWdfeSk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCEkaWNyX3Jlcykgew0KICAgICAgICAgICAgSW1hZ2VDb3B5UmVzaXplZCgkbmV3X2ltZywgJHRoaXMtPmltYWdlSGFuZGxlLCAwLCAwLCAwLCAwLCAkbmV3X3gsICRuZXdfeSwgJHRoaXMtPmltZ194LCAkdGhpcy0+aW1nX3kpOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5vbGRJbWFnZSA9ICR0aGlzLT5pbWFnZUhhbmRsZTsNCiAgICAgICAgJHRoaXMtPmltYWdlSGFuZGxlID0gJG5ld19pbWc7DQogICAgICAgICR0aGlzLT5yZXNpemVkID0gdHJ1ZTsNCg0KICAgICAgICAkdGhpcy0+bmV3X3ggPSAkbmV3X3g7DQogICAgICAgICR0aGlzLT5uZXdfeSA9ICRuZXdfeTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQWRqdXN0cyB0aGUgaW1hZ2UgZ2FtbWENCiAgICAgKg0KICAgICAqIEBwYXJhbSBmbG9hdCAkb3V0cHV0Z2FtbWENCiAgICAgKg0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZ2FtbWEoJG91dHB1dGdhbW1hID0gMS4wKQ0KICAgIHsNCiAgICAgICAgaWYgKCRvdXRwdXRnYW1tYSAhPSAxLjApIHsNCiAgICAgICAgICAgIEltYWdlR2FtbWFDb3JyZWN0KCR0aGlzLT5pbWFnZUhhbmRsZSwgMS4wLCAkb3V0cHV0Z2FtbWEpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEhlbHBlciBtZXRob2QgdG8gc2F2ZSB0byBhIGZpbGUgb3Igb3V0cHV0IHRoZSBpbWFnZQ0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd3JpdGUgdG8gKGJsYW5rIHRvIG91dHB1dCkNCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlcyAgICBkZWZpbmUgdGhlIG91dHB1dCBmb3JtYXQsIGRlZmF1bHQNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIGN1cnJlbnQgdXNlZCBmb3JtYXQNCiAgICAgKiBAcGFyYW0gaW50ICAgICRxdWFsaXR5ICBvdXRwdXQgRFBJLCBkZWZhdWx0IGlzIDc1DQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9uIHN1Y2Nlc3Mgb3IgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHByb3RlY3RlZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9nZW5lcmF0ZSgkZmlsZW5hbWUsICR0eXBlID0gJycsICRxdWFsaXR5ID0gbnVsbCkNCiAgICB7DQogICAgICAgICR0eXBlID0gc3RydG9sb3dlcigoJHR5cGUgPT0gJycpID8gJHRoaXMtPnR5cGUgOiAkdHlwZSk7DQogICAgICAgICRvcHRpb25zID0gKGlzX2FycmF5KCRxdWFsaXR5KSkgPyAkcXVhbGl0eSA6IGFycmF5KCk7DQogICAgICAgIHN3aXRjaCAoJHR5cGUpIHsNCiAgICAgICAgICAgIGNhc2UgJ2pwZyc6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAnanBlZyc7DQogICAgICAgICAgICBjYXNlICdqcGVnJzoNCiAgICAgICAgICAgICAgICBpZiAoaXNfbnVtZXJpYygkcXVhbGl0eSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnNbJ3F1YWxpdHknXSA9ICRxdWFsaXR5Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkcXVhbGl0eSA9ICR0aGlzLT5fZ2V0T3B0aW9uKCdxdWFsaXR5JywgJG9wdGlvbnMsIDc1KTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoISR0aGlzLT5zdXBwb3J0c1R5cGUoJHR5cGUsICd3JykpIHsNCiAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdJbWFnZSB0eXBlIG5vdCBzdXBwb3J0ZWQgZm9yIG91dHB1dCcsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICgkZmlsZW5hbWUgPT0gJycpIHsNCiAgICAgICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiAnIC4gJHRoaXMtPmdldE1pbWVUeXBlKCR0eXBlKSk7DQogICAgICAgICAgICAkYWN0aW9uID0gJ291dHB1dCBpbWFnZSc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkYWN0aW9uID0gJ3NhdmUgaW1hZ2UgdG8gZmlsZSc7DQogICAgICAgIH0NCg0KICAgICAgICAkZnVuY3Rpb25OYW1lID0gJ2ltYWdlJyAuICR0eXBlOw0KICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7DQogICAgICAgICAgICBjYXNlICdqcGVnJzoNCiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJGZ1bmN0aW9uTmFtZSgkdGhpcy0+aW1hZ2VIYW5kbGUsICRmaWxlbmFtZSwgJHF1YWxpdHkpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkZnVuY3Rpb25OYW1lKCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRmdW5jdGlvbk5hbWUoJHRoaXMtPmltYWdlSGFuZGxlLCAkZmlsZW5hbWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBpZiAoISRyZXN1bHQpIHsNCiAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdDb3VsZG5cJ3QgJyAuICRhY3Rpb24sDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0lPKTsNCiAgICAgICAgfQ0KICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgPSAkdGhpcy0+b2xkSW1hZ2U7DQogICAgICAgIGlmICghJHRoaXMtPmtlZXBfc2V0dGluZ3Nfb25fc2F2ZSkgew0KICAgICAgICAgICAgJHRoaXMtPmZyZWUoKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCg0KICAgIH0gLy8gRW5kIHNhdmUNCg0KICAgIC8qKg0KICAgICAqIERpc3BsYXlzIGltYWdlIHdpdGhvdXQgc2F2aW5nIGFuZCBsb3NlIGNoYW5nZXMuDQogICAgICoNCiAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIHRoZSBDb250ZW50LXR5cGUgSFRUUCBoZWFkZXINCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgKEpQRUcsIFBORy4uLik7DQogICAgICogQHBhcmFtIGludCAgICAkcXVhbGl0eSA3NQ0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZGlzcGxheSgkdHlwZSA9ICcnLCAkcXVhbGl0eSA9IG51bGwpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9nZW5lcmF0ZSgnJywgJHR5cGUsICRxdWFsaXR5KTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTYXZlcyB0aGUgaW1hZ2UgdG8gYSBmaWxlDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byB3cml0ZSB0bw0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgICAgIHRoZSBvdXRwdXQgZm9ybWF0LCBkZWZhdWx0DQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRoZSBjdXJyZW50IHVzZWQgZm9ybWF0DQogICAgICogQHBhcmFtIGludCAgICAkcXVhbGl0eSAgZGVmYXVsdCBpcyA3NQ0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvbiBzdWNjZXNzIG9yIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBzYXZlKCRmaWxlbmFtZSwgJHR5cGUgPSAnJywgJHF1YWxpdHkgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKCF0cmltKCRmaWxlbmFtZSkpIHsNCiAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdGaWxlbmFtZSBtaXNzaW5nJywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfQVJHVU1FTlQpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkdGhpcy0+X2dlbmVyYXRlKCRmaWxlbmFtZSwgJHR5cGUsICRxdWFsaXR5KTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXN0cm95cyBpbWFnZSBoYW5kbGUNCiAgICAgKg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZnJlZSgpDQogICAgew0KICAgICAgICAkdGhpcy0+cmVzaXplZCA9IGZhbHNlOw0KICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJHRoaXMtPmltYWdlSGFuZGxlKSkgew0KICAgICAgICAgICAgSW1hZ2VEZXN0cm95KCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgIH0NCiAgICAgICAgJHRoaXMtPmltYWdlSGFuZGxlID0gbnVsbDsNCiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCR0aGlzLT5vbGRJbWFnZSkpew0KICAgICAgICAgICAgSW1hZ2VEZXN0cm95KCR0aGlzLT5vbGRJbWFnZSk7DQogICAgICAgIH0NCiAgICAgICAgJHRoaXMtPm9sZEltYWdlID0gbnVsbDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXR1cm5zIGEgbmV3IGltYWdlIGZvciB0ZW1wb3JhcnkgcHJvY2Vzc2luZw0KICAgICAqDQogICAgICogQHBhcmFtIGludCAkd2lkdGggd2lkdGggb2YgdGhlIG5ldyBpbWFnZQ0KICAgICAqIEBwYXJhbSBpbnQgJGhlaWdodCBoZWlnaHQgb2YgdGhlIG5ldyBpbWFnZQ0KICAgICAqIEBwYXJhbSBib29sICR0cnVlQ29sb3IgZm9yY2Ugd2hpY2ggdHlwZSBvZiBpbWFnZSB0byBjcmVhdGUNCiAgICAgKiBAcmV0dXJuIHJlc291cmNlIGEgR0QgaW1hZ2UgcmVzb3VyY2UNCiAgICAgKiBAYWNjZXNzIHByb3RlY3RlZA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9jcmVhdGVJbWFnZSgkd2lkdGggPSAtMSwgJGhlaWdodCA9IC0xLCAkdHJ1ZUNvbG9yID0gbnVsbCkNCiAgICB7DQogICAgICAgIGlmICgkd2lkdGggPT0gLTEpIHsNCiAgICAgICAgICAgICR3aWR0aCA9ICR0aGlzLT5uZXdfeDsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGhlaWdodCA9PSAtMSkgew0KICAgICAgICAgICAgJGhlaWdodCA9ICR0aGlzLT5uZXdfeTsNCiAgICAgICAgfQ0KDQogICAgICAgICRuZXdfaW1nID0gbnVsbDsNCiAgICAgICAgaWYgKGlzX251bGwoJHRydWVDb2xvcikpIHsNCiAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ltYWdlaXN0cnVlY29sb3InKSkgew0KICAgICAgICAgICAgICAgICRjcmVhdGV0cnVlY29sb3IgPSBpbWFnZWlzdHJ1ZWNvbG9yKCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRjcmVhdGV0cnVlY29sb3IgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJGNyZWF0ZXRydWVjb2xvciA9ICR0cnVlQ29sb3I7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRjcmVhdGV0cnVlY29sb3INCiAgICAgICAgICAgICYmIGZ1bmN0aW9uX2V4aXN0cygnSW1hZ2VDcmVhdGVUcnVlQ29sb3InKSkgew0KICAgICAgICAgICAgJG5ld19pbWcgPSBASW1hZ2VDcmVhdGVUcnVlQ29sb3IoJHdpZHRoLCAkaGVpZ2h0KTsNCiAgICAgICAgICAgIC8vR0lGIFRyYW5zcGFyZW50IFBhdGNoDQogICAgICAgICAgICBpZiAoJHRoaXMtPnR5cGUhPSdnaWYnKSB7DQogICAgICAgICAgICAgICAgaW1hZ2VhbHBoYWJsZW5kaW5nKCRuZXdfaW1nLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgaW1hZ2VzYXZlYWxwaGEoJG5ld19pbWcsIHRydWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy9FbmQgR0lGIFRyYW5zcGFyZW50IFBhdGNoDQogICAgICAgIH0NCiAgICAgICAgaWYgKCEkbmV3X2ltZykgew0KICAgICAgICAgICAgJG5ld19pbWcgPSBJbWFnZUNyZWF0ZSgkd2lkdGgsICRoZWlnaHQpOw0KICAgICAgICAgICAgaW1hZ2VwYWxldHRlY29weSgkbmV3X2ltZywgJHRoaXMtPmltYWdlSGFuZGxlKTsNCiAgICAgICAgICAgICRjb2xvciA9IGltYWdlY29sb3J0cmFuc3BhcmVudCgkdGhpcy0+aW1hZ2VIYW5kbGUpOw0KICAgICAgICAgICAgaWYgKCRjb2xvciAhPSAtMSkgew0KICAgICAgICAgICAgICAgIGltYWdlY29sb3J0cmFuc3BhcmVudCgkbmV3X2ltZywgJGNvbG9yKTsNCiAgICAgICAgICAgICAgICBpbWFnZWZpbGwoJG5ld19pbWcsIDAsIDAsICRjb2xvcik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC8vR0lGIFRyYW5zcGFyZW50IFBhdGNoDQogICAgICAgIGlmICgkdGhpcy0+dHlwZT09J2dpZicpIHsNCiAgICAgICAgICAgICR0cmFuc3BhcmVuY3lJbmRleCA9IGltYWdlY29sb3J0cmFuc3BhcmVudCgkdGhpcy0+aW1hZ2VIYW5kbGUpOw0KICAgICAgICAgICAgJHRyYW5zcGFyZW5jeUNvbG9yID0gYXJyYXkoJ3JlZCcgPT4gMjU1LCAnZ3JlZW4nID0+IDI1NSwgJ2JsdWUnID0+IDI1NSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmICgkdHJhbnNwYXJlbmN5SW5kZXggPj0gMCkgew0KICAgICAgICAgICAgICAgICR0cmFuc3BhcmVuY3lDb2xvciA9IGltYWdlY29sb3JzZm9yaW5kZXgoJHRoaXMtPmltYWdlSGFuZGxlLCAkdHJhbnNwYXJlbmN5SW5kZXgpOyAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICANCiAgICAgICAgICAgICR0cmFuc3BhcmVuY3lJbmRleCA9IGltYWdlY29sb3JhbGxvY2F0ZSgkbmV3X2ltZywgJHRyYW5zcGFyZW5jeUNvbG9yWydyZWQnXSwgJHRyYW5zcGFyZW5jeUNvbG9yWydncmVlbiddLCAkdHJhbnNwYXJlbmN5Q29sb3JbJ2JsdWUnXSk7DQogICAgICAgICAgICBpbWFnZWZpbGwoJG5ld19pbWcsIDAsIDAsICR0cmFuc3BhcmVuY3lJbmRleCk7DQogICAgICAgICAgICBpbWFnZWNvbG9ydHJhbnNwYXJlbnQoJG5ld19pbWcsICR0cmFuc3BhcmVuY3lJbmRleCk7DQogICAgICAgIH0NCiAgICAgICAgLy9FbmQgR0lGIFRyYW5zcGFyZW50IFBhdGNoDQogICAgICAgIA0KICAgICAgICANCiAgICAgICAgcmV0dXJuICRuZXdfaW1nOw0KICAgIH0NCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/GD1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLy8gfCBQSFAgVmVyc2lvbiA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi8vIHwgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDMgVGhlIFBIUCBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQovLyB8IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDIuMDIgb2YgdGhlIFBIUCBsaWNlbnNlLCAgICAgIHwNCi8vIHwgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UsIGFuZCBpcyAgICAgICAgfA0KLy8gfCBhdmFpbGFibGUgYXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQovLyB8IGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzJfMDIudHh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCi8vIHwgSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIFBIUCBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvICAgfA0KLy8gfCBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGEgbm90ZSB0byAgICAgICAgICB8DQovLyB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwNCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLy8gfCBBdXRob3JzOiBQZXRlciBCb3d5ZXIgPHBldGVyQG1hcGxlZGVzaWduLmNvLnVrPiAgICAgICAgICAgICAgICAgICAgICB8DQovLyB8ICAgICAgICAgIEFsYW4gS25vd2xlcyA8YWxhbkBha2JraG9tZS5jb20+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KDQpyZXF1aXJlX29uY2UgJ0ltYWdlL1RyYW5zZm9ybS9Ecml2ZXIvR0QucGhwJzsNCg0KLyoqDQogKiBUaGlzIGRyaXZlciBpcyBmb3IgR0QxIG9yIHRoZSBub24tYnVuZGxlZCB2ZXJzaW9uIG9mIEdEMg0KICoNCiAqIEBwYWNrYWdlDQogKiBAYXV0aG9yIE5BV0FMIEFTV0FODQogKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAwMw0KICogQHZlcnNpb24gJElkOiBHRDEucGhwIDIzNDEyMyAyMDA3LTA0LTE5IDE2OjM2OjA5WiBkdWZ1eiAkDQogKiBAYWNjZXNzIHB1YmxpYw0KICoqLw0KQ2xhc3MgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9HRDEgZXh0ZW5kcyBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0dEDQp7DQogICAgLyoqDQogICAgICogQ2hlY2sgc2V0dGluZ3MNCiAgICAgKg0KICAgICAqIEByZXR1cm4gbWl4ZWQgdHJ1ZSBvciAgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqDQogICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0dEMSgpDQogICAgew0KICAgICAgICAkdGhpcy0+X19jb25zdHJ1Y3QoKTsNCiAgICB9IC8vIEVuZCBmdW5jdGlvbiBJbWFnZQ0KDQogICAgLyoqDQogICAgICogQ2hlY2sgc2V0dGluZ3MNCiAgICAgKg0KICAgICAqIEByZXR1cm4gbWl4ZWQgdHJ1ZSBvciAgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqDQogICAgICogQHNlZSBQRUFSOjppc0Vycm9yKCkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogICAgew0KICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCk7DQogICAgfSAvLyBFbmQgZnVuY3Rpb24gSW1hZ2UNCg0KICAgLyoqDQogICAgKiBSZXNpemUgQWN0aW9uDQogICAgKg0KICAgICogRm9yIEdEIDIuMDErIHRoZSBuZXcgY29weXJlc2FtcGxlZCBmdW5jdGlvbiBpcyB1c2VkDQogICAgKiBJdCB1c2VzIGEgYmljdWJpYyBpbnRlcnBvbGF0aW9uIGFsZ29yaXRobSB0byBnZXQgZmFyDQogICAgKiBiZXR0ZXIgcmVzdWx0Lg0KICAgICoNCiAgICAqIEBwYXJhbSAkbmV3X3ggaW50ICBuZXcgd2lkdGgNCiAgICAqIEBwYXJhbSAkbmV3X3kgaW50ICBuZXcgaGVpZ2h0DQogICAgKiBAcGFyYW0gbWl4ZWQgJG9wdGlvbnMgT3B0aW9uYWwgcGFyYW1ldGVycw0KICAgICoNCiAgICAqIEByZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzIG9yIFBFQVIgRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KICAgICovDQogICAgZnVuY3Rpb24gX3Jlc2l6ZSgkbmV3X3gsICRuZXdfeSwgJG9wdGlvbnMgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKCR0aGlzLT5yZXNpemVkID09PSB0cnVlKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignWW91IGhhdmUgYWxyZWFkeSByZXNpemVkIHRoZSBpbWFnZSB3aXRob3V0IHNhdmluZyBpdC4gIFlvdXIgcHJldmlvdXMgcmVzaXppbmcgd2lsbCBiZSBvdmVyd3JpdHRlbicsIG51bGwsIFBFQVJfRVJST1JfVFJJR0dFUiwgRV9VU0VSX05PVElDRSk7DQogICAgICAgIH0NCiAgICAgICAgJG5ld19pbWcgPUltYWdlQ3JlYXRlKCRuZXdfeCwkbmV3X3kpOw0KICAgICAgICBJbWFnZUNvcHlSZXNpemVkKCRuZXdfaW1nLCAkdGhpcy0+aW1hZ2VIYW5kbGUsIDAsIDAsIDAsIDAsICRuZXdfeCwgJG5ld195LCAkdGhpcy0+aW1nX3gsICR0aGlzLT5pbWdfeSk7DQogICAgICAgICR0aGlzLT5vbGRfaW1hZ2UgPSAkdGhpcy0+aW1hZ2VIYW5kbGU7DQogICAgICAgICR0aGlzLT5pbWFnZUhhbmRsZSA9ICRuZXdfaW1nOw0KICAgICAgICAkdGhpcy0+cmVzaXplZCA9IHRydWU7DQoNCiAgICAgICAgJHRoaXMtPm5ld194ID0gJG5ld194Ow0KICAgICAgICAkdGhpcy0+bmV3X3kgPSAkbmV3X3k7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KDQogICAgZnVuY3Rpb24gcm90YXRlKCRhbmdsZSwgJG9wdGlvbnMgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKCRvcHRpb25zID09IG51bGwpew0KICAgICAgICAgICAgJGF1dG9yZXNpemUgPSB0cnVlOw0KICAgICAgICAgICAgJGNvbG9yX21hc2sgPSBhcnJheSgyNTUsMjU1LDApOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZXh0cmFjdCgkb3B0aW9ucyk7DQogICAgICAgIH0NCg0KICAgICAgICB3aGlsZSAoJGFuZ2xlIDw9IC00NSkgew0KICAgICAgICAgICAgJGFuZ2xlICArPSAzNjA7DQogICAgICAgIH0NCiAgICAgICAgd2hpbGUgKCRhbmdsZSA+IDI3MCkgew0KICAgICAgICAgICAgJGFuZ2xlICAtPSAzNjA7DQogICAgICAgIH0NCg0KICAgICAgICAkdCA9IGRlZzJyYWQoJGFuZ2xlKTsNCg0KICAgICAgICBpZiAoIWlzX2FycmF5KCRjb2xvcl9tYXNrKSkgew0KICAgICAgICAgICAgLy8gTm90IGFscmVhZHkgaW4gbnVtYmVyaWNhbCBmb3JtYXQsIHNvIHdlIGNvbnZlcnQgaXQuDQogICAgICAgICAgICBpZiAoJGNvbG9yX21hc2t7MH0gPT0gJyMnKXsNCiAgICAgICAgICAgICAgICAkY29sb3JfbWFzayA9ICR0aGlzLT5jb2xvcmhleDJjb2xvcmFycmF5KCRjb2xvcl9tYXNrKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgaW5jbHVkZV9vbmNlICdJbWFnZS9UcmFuc2Zvcm0vRHJpdmVyL0NvbG9yc0RlZnMucGhwJzsNCiAgICAgICAgICAgICAgICAkY29sb3JfbWFzayA9IGlzc2V0KCRjb2xvcm5hbWVzWyRjb2xvcl9tYXNrXSk/JGNvbG9ybmFtZXNbJGNvbG9yX21hc2tdOmZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRG8gbm90IHJvdW5kIGl0LCB0b28gbXVjaCBsb3N0IG9mIHF1YWxpdHkNCiAgICAgICAgJGNvc1QgICA9IGNvcygkdCk7DQogICAgICAgICRzaW5UICAgPSBzaW4oJHQpOw0KDQogICAgICAgICRpbWcgICAgPSYgJHRoaXMtPmltYWdlSGFuZGxlOw0KDQogICAgICAgICR3aWR0aCAgPSAkbWF4X3ggID0gJHRoaXMtPmltZ194Ow0KICAgICAgICAkaGVpZ2h0ID0gJG1heF95ICA9ICR0aGlzLT5pbWdfeTsNCiAgICAgICAgJG1pbl95ICA9IDA7DQogICAgICAgICRtaW5feCAgPSAwOw0KDQogICAgICAgICR4MSAgICAgPSByb3VuZCgkbWF4X3gvMiwwKTsNCiAgICAgICAgJHkxICAgICA9IHJvdW5kKCRtYXhfeS8yLDApOw0KDQogICAgICAgIGlmICggJGF1dG9yZXNpemUgKXsNCiAgICAgICAgICAgICR0ICAgICAgPSBhYnMoJHQpOw0KICAgICAgICAgICAgJGEgICAgICA9IHJvdW5kKCRhbmdsZSwwKTsNCiAgICAgICAgICAgIHN3aXRjaCgoaW50KSgkYW5nbGUpKXsNCiAgICAgICAgICAgICAgICBjYXNlIDA6DQogICAgICAgICAgICAgICAgICAgICAgICAkd2lkdGgyICAgICA9ICR3aWR0aDsNCiAgICAgICAgICAgICAgICAgICAgICAgICRoZWlnaHQyICAgID0gJGhlaWdodDsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA5MDoNCiAgICAgICAgICAgICAgICAgICAgICAgICR3aWR0aDIgICAgID0gJGhlaWdodDsNCiAgICAgICAgICAgICAgICAgICAgICAgICRoZWlnaHQyICAgID0gJHdpZHRoOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDE4MDoNCiAgICAgICAgICAgICAgICAgICAgICAgICR3aWR0aDIgICAgID0gJHdpZHRoOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGhlaWdodDIgICAgPSAkaGVpZ2h0Ow0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDI3MDoNCiAgICAgICAgICAgICAgICAgICAgICAgICR3aWR0aDIgICAgID0gJGhlaWdodDsNCiAgICAgICAgICAgICAgICAgICAgICAgICRoZWlnaHQyICAgID0gJHdpZHRoOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAkd2lkdGgyICAgICA9IChpbnQpKGFicyhzaW4oJHQpICogJGhlaWdodCArIGNvcygkdCkgKiAkd2lkdGgpKTsNCiAgICAgICAgICAgICAgICAgICAgJGhlaWdodDIgICAgPSAoaW50KShhYnMoY29zKCR0KSAqICRoZWlnaHQrc2luKCR0KSAqICR3aWR0aCkpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkd2lkdGgyICAgICAtPSAkd2lkdGgyJTI7DQogICAgICAgICAgICAkaGVpZ2h0MiAgICAtPSAkaGVpZ2h0MiUyOw0KDQogICAgICAgICAgICAkZF93aWR0aCAgICA9IGFicygkd2lkdGggLSAkd2lkdGgyKTsNCiAgICAgICAgICAgICRkX2hlaWdodCAgID0gYWJzKCRoZWlnaHQgLSAkaGVpZ2h0Mik7DQogICAgICAgICAgICAkeF9vZmZzZXQgICA9ICRkX3dpZHRoLzI7DQogICAgICAgICAgICAkeV9vZmZzZXQgICA9ICRkX2hlaWdodC8yOw0KICAgICAgICAgICAgJG1pbl94MiAgICAgPSAtYWJzKCR4X29mZnNldCk7DQogICAgICAgICAgICAkbWluX3kyICAgICA9IC1hYnMoJHlfb2Zmc2V0KTsNCiAgICAgICAgICAgICRtYXhfeDIgICAgID0gJHdpZHRoMjsNCiAgICAgICAgICAgICRtYXhfeTIgICAgID0gJGhlaWdodDI7DQogICAgICAgIH0NCg0KICAgICAgICAkaW1nMiAgID0gQGltYWdlY3JlYXRlVHJ1ZUNvbG9yKCR3aWR0aDIsJGhlaWdodDIpOw0KDQogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJGltZzIpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignQ2Fubm90IGNyZWF0ZSBidWZmZXIgZm9yIHRoZSByb3RhdGFpb24uJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgUEVBUl9FUlJPUl9UUklHR0VSLCBFX1VTRVJfTk9USUNFKTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aGlzLT5pbWdfeCA9ICR3aWR0aDI7DQogICAgICAgICR0aGlzLT5pbWdfeSA9ICRoZWlnaHQyOw0KDQoNCiAgICAgICAgaW1hZ2VwYWxldHRlY29weSgkaW1nMiwkaW1nKTsNCg0KICAgICAgICAkbWFzayAgID0gaW1hZ2Vjb2xvcnJlc29sdmUoJGltZzIsJGNvbG9yX21hc2tbMF0sJGNvbG9yX21hc2tbMV0sJGNvbG9yX21hc2tbMl0pOw0KDQogICAgICAgIC8vIHVzZSBzaW1wbGUgbGluZXMgY29weSBmb3IgYXhlcyBhbmdsZXMNCiAgICAgICAgc3dpdGNoICgoaW50KSgkYW5nbGUpKSB7DQogICAgICAgICAgICBjYXNlIDA6DQogICAgICAgICAgICAgICAgaW1hZ2VmaWxsKCRpbWcyLCAwLCAwLCRtYXNrKTsNCiAgICAgICAgICAgICAgICBmb3IgKCR5ID0gMDsgJHkgPCAkbWF4X3k7ICR5KyspIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yICgkeCA9ICRtaW5feDsgJHggPCAkbWF4X3g7ICR4Kyspew0KICAgICAgICAgICAgICAgICAgICAgICAgJGMgID0gQGltYWdlY29sb3JhdCAoICRpbWcsICR4LCAkeSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXNldHBpeGVsKCRpbWcyLCR4KyR4X29mZnNldCwkeSskeV9vZmZzZXQsJGMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSA5MDoNCiAgICAgICAgICAgICAgICBpbWFnZWZpbGwgKCRpbWcyLCAwLCAwLCRtYXNrKTsNCiAgICAgICAgICAgICAgICBmb3IgKCR4ID0gJG1pbl94OyAkeCA8ICRtYXhfeDsgJHgrKyl7DQogICAgICAgICAgICAgICAgICAgIGZvciAoJHk9JG1pbl95OyAkeSA8ICRtYXhfeTsgJHkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGMgID0gaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgsICR5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc2V0cGl4ZWwoJGltZzIsJG1heF95LSR5LTEsJHgsJGMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAxODA6DQogICAgICAgICAgICAgICAgaW1hZ2VmaWxsICgkaW1nMiwgMCwgMCwkbWFzayk7DQogICAgICAgICAgICAgICAgZm9yICgkeT0wOyAkeSA8ICRtYXhfeTsgJHkrKykgew0KICAgICAgICAgICAgICAgICAgICBmb3IgKCR4ID0gJG1pbl94OyAkeCA8ICRtYXhfeDsgJHgrKyl7DQogICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSBAaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgsICR5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc2V0cGl4ZWwoJGltZzIsICRtYXhfeDItJHgtMSwgJG1heF95Mi0keS0xLCAkYyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlIDI3MDoNCiAgICAgICAgICAgICAgICBpbWFnZWZpbGwgKCRpbWcyLCAwLCAwLCRtYXNrKTsNCiAgICAgICAgICAgICAgICBmb3IgKCR5PTA7ICR5IDwgJG1heF95OyAkeSsrKSB7DQogICAgICAgICAgICAgICAgICAgIGZvciAoJHggPSAkbWF4X3g7ICR4ID49ICRtaW5feDsgJHgtLSl7DQogICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSBAaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgsICR5KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc2V0cGl4ZWwoJGltZzIsJHksJG1heF94LSR4LTEsJGMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgLy8gc2ltcGxlIHJldmVyc2Ugcm90YXRpb24gYWxnbw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAkaT0wOw0KICAgICAgICAgICAgICAgIGZvciAoJHkgPSAkbWluX3kyOyAkeSA8ICRtYXhfeTI7ICR5Kyspew0KDQogICAgICAgICAgICAgICAgICAgIC8vIEFsZ2VicmEgOikNCiAgICAgICAgICAgICAgICAgICAgJHgyID0gcm91bmQoKCgkbWluX3gyLSR4MSkgKiAkY29zVCkgKyAoKCR5LSR5MSkgKiAkc2luVCArICR4MSksMCk7DQogICAgICAgICAgICAgICAgICAgICR5MiA9IHJvdW5kKCgoJHktJHkxKSAqICRjb3NUIC0gKCRtaW5feDItJHgxKSAqICRzaW5UICsgJHkxKSwwKTsNCg0KICAgICAgICAgICAgICAgICAgICBmb3IgKCR4ID0gJG1pbl94MjsgJHggPCAkbWF4X3gyOyAkeCsrKXsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIG91dCBvZiBvcmlnaW5hbCBib3VuY2VzLCBpZiB3ZSBhcmUNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZGVmYXVsdCBjb2xvciBtYXNrDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICR4Mj49MCAmJiAkeDI8JG1heF94ICYmICR5Mj49MCAmJiAkeTI8JG1heF95ICl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgID0gaW1hZ2Vjb2xvcmF0ICggJGltZywgJHgyLCAkeTIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYyAgPSAkbWFzazsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc2V0cGl4ZWwoJGltZzIsJHgrJHhfb2Zmc2V0LCR5KyR5X29mZnNldCwkYyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJvdW5kIHZlcmJvdGVuIQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHgyICArPSAkY29zVDsNCiAgICAgICAgICAgICAgICAgICAgICAgICR5MiAgLT0gJHNpblQ7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCg0KICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgID0gICRpbWcyOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQp9IC8vIEVuZCBjbGFzcyBJbWFnZUdE]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/IM.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyogdmltOiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9NCBzaGlmdHdpZHRoPTQ6ICovDQoNCi8qKg0KICogSW1hZ2VNYWdpY2sgYmluYXJpZXMgaW1wbGVtZW50YXRpb24gZm9yIEltYWdlX1RyYW5zZm9ybSBwYWNrYWdlDQogKg0KICogUEhQIHZlcnNpb25zIDQgYW5kIDUNCiAqDQogKiBMSUNFTlNFOiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdmVyc2lvbiAzLjAgb2YgdGhlIFBIUCBsaWNlbnNlDQogKiB0aGF0IGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGUgZm9sbG93aW5nIFVSSToNCiAqIGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQuICBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZg0KICogdGhlIFBIUCBMaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3ZWIsIHBsZWFzZQ0KICogc2VuZCBhIG5vdGUgdG8gbGljZW5zZUBwaHAubmV0IHNvIHdlIGNhbiBtYWlsIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuDQogKg0KICogQGNhdGVnb3J5ICAgSW1hZ2UNCiAqIEBwYWNrYWdlICAgIEltYWdlX1RyYW5zZm9ybQ0KICogQGF1dGhvciAgICAgUGV0ZXIgQm93eWVyIDxwZXRlckBtYXBsZWRlc2lnbi5jby51az4NCiAqIEBhdXRob3IgICAgIFBoaWxpcHBlIEphdXNpb25zIDxQaGlsaXBwZS5KYXVzaW9uc0AxMWFiYWN1cy5jb20+DQogKiBAY29weXJpZ2h0ICAyMDAyLTIwMDUgVGhlIFBIUCBHcm91cA0KICogQGxpY2Vuc2UgICAgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvM18wLnR4dCAgUEhQIExpY2Vuc2UgMy4wDQogKiBAdmVyc2lvbiAgICBDVlM6ICRJZDogSU0ucGhwIDI2Njg1OSAyMDA4LTA5LTMwIDIyOjI4OjQ3WiBkdWZ1eiAkDQogKiBAbGluayAgICAgICBodHRwOi8vcGVhci5waHAubmV0L3BhY2thZ2UvSW1hZ2VfVHJhbnNmb3JtDQogKi8NCg0KcmVxdWlyZV9vbmNlICdJbWFnZS9UcmFuc2Zvcm0ucGhwJzsNCnJlcXVpcmVfb25jZSAnU3lzdGVtLnBocCc7DQoNCi8qKg0KICogSW1hZ2VNYWdpY2sgYmluYXJpZXMgaW1wbGVtZW50YXRpb24gZm9yIEltYWdlX1RyYW5zZm9ybSBwYWNrYWdlDQogKg0KICogQGNhdGVnb3J5ICAgSW1hZ2UNCiAqIEBwYWNrYWdlICAgIEltYWdlX1RyYW5zZm9ybQ0KICogQHN1YnBhY2thZ2UgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9JTQ0KICogQGF1dGhvciAgICAgUGV0ZXIgQm93eWVyIDxwZXRlckBtYXBsZWRlc2lnbi5jby51az4NCiAqIEBhdXRob3IgICAgIFBoaWxpcHBlIEphdXNpb25zIDxQaGlsaXBwZS5KYXVzaW9uc0AxMWFiYWN1cy5jb20+DQogKiBAY29weXJpZ2h0ICAyMDAyLTIwMDUgVGhlIFBIUCBHcm91cA0KICogQGxpY2Vuc2UgICAgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvM18wLnR4dCAgUEhQIExpY2Vuc2UgMy4wDQogKiBAdmVyc2lvbiAgICBSZWxlYXNlOiBAcGFja2FnZV92ZXJzaW9uQA0KICogQGxpbmsgICAgICAgaHR0cDovL3BlYXIucGhwLm5ldC9wYWNrYWdlL0ltYWdlX1RyYW5zZm9ybQ0KICogQGxpbmsgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmcvDQogKiovDQpjbGFzcyBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0lNIGV4dGVuZHMgSW1hZ2VfVHJhbnNmb3JtDQp7DQogICAgLyoqDQogICAgICogYXNzb2NpYXRpdmUgYXJyYXkgY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQNCiAgICAgKiBAdmFyIGFycmF5DQogICAgICogQGFjY2VzcyBwcml2YXRlDQogICAgICovDQogICAgdmFyICRjb21tYW5kOw0KDQogICAgLyoqDQogICAgICogQ2xhc3MgY29uc3RydWN0b3INCiAgICAgKi8NCiAgICBmdW5jdGlvbiBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0lNKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5fX2NvbnN0cnVjdCgpOw0KICAgIH0gLy8gRW5kIEltYWdlX0lNDQoNCiAgICAvKioNCiAgICAgKiBDbGFzcyBjb25zdHJ1Y3Rvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgICB7DQogICAgICAgICR0aGlzLT5faW5pdCgpOw0KICAgICAgICBpZiAoIWRlZmluZWQoJ0lNQUdFX1RSQU5TRk9STV9JTV9QQVRIJykpIHsNCiAgICAgICAgICAgICRwYXRoID0gZGlybmFtZShTeXN0ZW06OndoaWNoKCdjb252ZXJ0JykpDQogICAgICAgICAgICAgICAgICAgIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgICAgICAgICAgIGRlZmluZSgnSU1BR0VfVFJBTlNGT1JNX0lNX1BBVEgnLCAkcGF0aCk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKFN5c3RlbTo6d2hpY2goSU1BR0VfVFJBTlNGT1JNX0lNX1BBVEggLiAnY29udmVydCcgLiAoKE9TX1dJTkRPV1MpID8gJy5leGUnIDogJycpKSkgew0KICAgICAgICAgICAgaW5jbHVkZSAnSW1hZ2UvVHJhbnNmb3JtL0RyaXZlci9JbWFnaWNrL0ltYWdlVHlwZXMucGhwJzsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0aGlzLT5pc0Vycm9yKFBFQVI6OnJhaXNlRXJyb3IoJ0NvdWxkblwndCBmaW5kICJjb252ZXJ0IiBiaW5hcnknLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCkpOw0KICAgICAgICB9DQogICAgfSAvLyBFbmQgSW1hZ2VfSU0NCg0KICAgIC8qKg0KICAgICAqIEluaXRpYWxpemUgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QNCiAgICAgKiovDQogICAgZnVuY3Rpb24gX2luaXQoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmNvbW1hbmQgPSBhcnJheSgpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIExvYWQgYW4gaW1hZ2UuDQogICAgICoNCiAgICAgKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHN1cHBvcnQgcmVtb3RlIGZpbGVzLg0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyBmaWxlbmFtZQ0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCBUUlVFIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGxvYWQoJGltYWdlKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9pbml0KCk7DQogICAgICAgIGlmICghZmlsZV9leGlzdHMoJGltYWdlKSkgew0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ1RoZSBpbWFnZSBmaWxlICcgLiAkaW1hZ2UNCiAgICAgICAgICAgICAgICAuICcgZG9lc25cJ3QgZXhpc3QnLCBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfSU8pOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5pbWFnZSA9ICRpbWFnZTsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5fZ2V0X2ltYWdlX2RldGFpbHMoJGltYWdlKTsNCiAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJHJlc3VsdCkpIHsNCiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgfSAvLyBFbmQgbG9hZA0KDQogICAgLyoqDQogICAgICogSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9JTTo6X2dldF9pbWFnZV9kZXRhaWxzKCkNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGltYWdlIHRoZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBpbWFnZSBmaWxlDQogICAgICogQHJldHVybiBub25lDQogICAgICovDQogICAgZnVuY3Rpb24gX2dldF9pbWFnZV9kZXRhaWxzKCRpbWFnZSkNCiAgICB7DQogICAgICAgICRyZXR2YWwgPSBJbWFnZV9UcmFuc2Zvcm06Ol9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOw0KICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcmV0dmFsKSkgew0KICAgICAgICAgICAgdW5zZXQoJHJldHZhbCk7DQoNCiAgICAgICAgICAgIGlmICghU3lzdGVtOjp3aGljaChJTUFHRV9UUkFOU0ZPUk1fSU1fUEFUSCAuICdpZGVudGlmeScgLiAoKE9TX1dJTkRPV1MpID8gJy5leGUnIDogJycpKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5pc0Vycm9yKFBFQVI6OnJhaXNlRXJyb3IoJ0NvdWxkblwndCBmaW5kICJpZGVudGlmeSIgYmluYXJ5JywgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkY21kID0gJHRoaXMtPl9wcmVwYXJlX2NtZChJTUFHRV9UUkFOU0ZPUk1fSU1fUEFUSCwNCiAgICAgICAgICAgICAgICAnaWRlbnRpZnknLA0KICAgICAgICAgICAgICAgICctZm9ybWF0ICV3OiVoOiVtICcgLiBlc2NhcGVzaGVsbGFyZygkaW1hZ2UpKTsNCiAgICAgICAgICAgIGV4ZWMoJGNtZCwgJHJlcywgJGV4aXQpOw0KDQogICAgICAgICAgICBpZiAoJGV4aXQgIT0gMCkgew0KICAgICAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCJDYW5ub3QgZmV0Y2ggaW1hZ2Ugb3IgaW1hZ2VzIGRldGFpbHMuIiwgdHJ1ZSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRkYXRhICA9IGV4cGxvZGUoJzonLCAkcmVzWzBdKTsNCiAgICAgICAgICAgICR0aGlzLT5pbWdfeCA9ICRkYXRhWzBdOw0KICAgICAgICAgICAgJHRoaXMtPmltZ195ID0gJGRhdGFbMV07DQogICAgICAgICAgICAkdGhpcy0+dHlwZSAgPSBzdHJ0b2xvd2VyKCRkYXRhWzJdKTsNCiAgICAgICAgICAgICRyZXR2YWwgPSB0cnVlOw0KDQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJHJldHZhbDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSZXNpemUgdGhlIGltYWdlLg0KICAgICAqDQogICAgICogQGFjY2VzcyBwcml2YXRlDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICAgJG5ld194ICAgTmV3IHdpZHRoDQogICAgICogQHBhcmFtIGludCAgICRuZXdfeSAgIE5ldyBoZWlnaHQNCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9wdGlvbnMgT3B0aW9uYWwgcGFyYW1ldGVycw0KICAgICAqDQogICAgICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3Mgb3IgUEVBUiBFcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9yZXNpemUoJG5ld194LCAkbmV3X3ksICRvcHRpb25zID0gbnVsbCkNCiAgICB7DQogICAgICAgIGlmIChpc3NldCgkdGhpcy0+Y29tbWFuZFsncmVzaXplJ10pKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignWW91IGNhbm5vdCBzY2FsZSBvciByZXNpemUgYW4gaW1hZ2UgbW9yZSB0aGFuIG9uY2Ugd2l0aG91dCBjYWxsaW5nIHNhdmUoKSBvciBkaXNwbGF5KCknLCB0cnVlKTsNCiAgICAgICAgfQ0KICAgICAgICAkdGhpcy0+Y29tbWFuZFsncmVzaXplJ10gPSAnLWdlb21ldHJ5ICcNCiAgICAgICAgICAgIC4gKChpbnQpICRuZXdfeCkgLiAneCcgLiAoKGludCkgJG5ld195KSAuICchJzsNCg0KICAgICAgICAkdGhpcy0+bmV3X3ggPSAkbmV3X3g7DQogICAgICAgICR0aGlzLT5uZXdfeSA9ICRuZXdfeTsNCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9IC8vIEVuZCByZXNpemUNCg0KICAgIC8qKg0KICAgICAqIHJvdGF0ZQ0KICAgICAqDQogICAgICogQHBhcmFtICAgaW50ICAgICBhbmdsZSAgIHJvdGF0aW9uIGFuZ2xlDQogICAgICogQHBhcmFtICAgYXJyYXkgICBvcHRpb25zIG5vIG9wdGlvbiBhbGxvd2VkDQogICAgICogQHJldHVybiBtaXhlZCBUUlVFIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKi8NCiAgICBmdW5jdGlvbiByb3RhdGUoJGFuZ2xlLCAkb3B0aW9ucyA9IG51bGwpDQogICAgew0KICAgICAgICAkYW5nbGUgPSAkdGhpcy0+X3JvdGF0aW9uX2FuZ2xlKCRhbmdsZSk7DQogICAgICAgIGlmICgkYW5nbGUgJSAzNjApIHsNCiAgICAgICAgICAgICR0aGlzLT5jb21tYW5kWydyb3RhdGUnXSA9ICctcm90YXRlICcgLiAoZmxvYXQpICRhbmdsZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCg0KICAgIH0gLy8gRW5kIHJvdGF0ZQ0KDQogICAgLyoqDQogICAgICogQ3JvcCBpbWFnZQ0KICAgICAqDQogICAgICogQGF1dGhvciBJYW4gRXVyZSA8aWV1cmVAd2Vic3Byb2NrZXRzLmNvbT4NCiAgICAgKiBAc2luY2UgMC44DQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50IHdpZHRoIENyb3BwZWQgaW1hZ2Ugd2lkdGgNCiAgICAgKiBAcGFyYW0gaW50IGhlaWdodCBDcm9wcGVkIGltYWdlIGhlaWdodA0KICAgICAqIEBwYXJhbSBpbnQgeCBYLWNvb3JkaW5hdGUgdG8gY3JvcCBhdA0KICAgICAqIEBwYXJhbSBpbnQgeSBZLWNvb3JkaW5hdGUgdG8gY3JvcCBhdA0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCBUUlVFIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKi8NCiAgICBmdW5jdGlvbiBjcm9wKCR3aWR0aCwgJGhlaWdodCwgJHggPSAwLCAkeSA9IDApIHsNCiAgICAgICAgLy8gRG8gd2Ugd2FudCBhIHNhZmV0eSBjaGVjayAtIGkuZS4gaWYgJHdpZHRoKyR4ID4gJHRoaXMtPmltZ194IHRoZW4gd2UNCiAgICAgICAgLy8gcmFpc2UgYSB3YXJuaW5nPyBbYW5kIG9idmlvdXNseSBzYW1lIGZvciAkaGVpZ2h0KyR5XQ0KICAgICAgICAkdGhpcy0+Y29tbWFuZFsnY3JvcCddID0gJy1jcm9wICcNCiAgICAgICAgICAgIC4gKChpbnQpICR3aWR0aCkgIC4gJ3gnIC4gKChpbnQpICRoZWlnaHQpDQogICAgICAgICAgICAuICcrJyAuICgoaW50KSAkeCkgLiAnKycgLiAoKGludCkgJHkpIC4gJyEnOw0KDQogICAgICAgIC8vIEkgdGhpbmsgdGhhdCBzZXR0aW5nIGltZ194L3kgaXMgd3JvbmcsIGJ1dCBzY2FsZUJ5TGVuZ3RoKCkgJiBmcmllbmRzDQogICAgICAgIC8vIG1lc3MgdXAgdGhlIGFzcGVjdCBhZnRlciBhIGNyb3Agb3RoZXJ3aXNlLg0KICAgICAgICAkdGhpcy0+bmV3X3ggPSAkdGhpcy0+aW1nX3ggPSAkd2lkdGggLSAkeDsNCiAgICAgICAgJHRoaXMtPm5ld195ID0gJHRoaXMtPmltZ195ID0gJGhlaWdodCAtICR5Ow0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIGFkZFRleHQNCiAgICAgKg0KICAgICAqIEBwYXJhbSAgIGFycmF5ICAgb3B0aW9ucyAgICAgQXJyYXkgY29udGFpbnMgb3B0aW9ucw0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQnICBUaGUgc3RyaW5nIHRvIGRyYXcNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneCcgICAgIEhvcml6b250YWwgcG9zaXRpb24NCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneScgICAgIFZlcnRpY2FsIFBvc2l0aW9uDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbG9yJyBGb250IGNvbG9yDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQnICBGb250IHRvIGJlIHVzZWQNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZScgIFNpemUgb2YgdGhlIGZvbnRzIGluIHBpeGVsDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc2l6ZV9maXJzdCcgIFRlbGwgaWYgdGhlIGltYWdlIGhhcyB0byBiZSByZXNpemVkDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSBkcmF3aW5nIHRoZSB0ZXh0DQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBzZWUgUEVBUjo6aXNFcnJvcigpDQogICAgICovDQogICAgZnVuY3Rpb24gYWRkVGV4dCgkcGFyYW1zKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPm9sZF9pbWFnZSA9ICR0aGlzLT5pbWFnZUhhbmRsZTsNCiAgICAgICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZSgkdGhpcy0+X2dldF9kZWZhdWx0X3RleHRfcGFyYW1zKCksICRwYXJhbXMpOw0KICAgICAgICAgZXh0cmFjdCgkcGFyYW1zKTsNCg0KICAgICAgICAgaWYgKHRydWUgPT09ICRyZXNpemVfZmlyc3QpIHsNCiAgICAgICAgICAgICAvLyBTZXQgdGhlIGtleSBzbyB0aGF0IHRoaXMgd2lsbCBiZSB0aGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheQ0KICAgICAgICAgICAgJGtleSA9ICd6dGV4dCc7DQogICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJGtleSA9ICd0ZXh0JzsNCiAgICAgICAgIH0NCiAgICAgICAgICR0aGlzLT5jb21tYW5kWyRrZXldID0gJy1mb250ICcgLiBlc2NhcGVzaGVsbGFyZygkZm9udCkNCiAgICAgICAgICAgIC4gJyAtZmlsbCAnIC4gZXNjYXBlc2hlbGxhcmcoJGNvbG9yKQ0KICAgICAgICAgICAgLiAnIC1kcmF3IFwndGV4dCAnIC4gZXNjYXBlc2hlbGxhcmcoJHggLiAnLCcgLiAkeSkNCiAgICAgICAgICAgIC4gJyAiJyAuIGVzY2FwZXNoZWxsYXJnKCR0ZXh0KSAuICciXCcnOw0KICAgICAgICAgLy8gUHJvZHVjaW5nIGVycm9yOiBnczogbm90IGZvdW5kIGdzOiBub3QgZm91bmQgY29udmVydDogUG9zdHNjcmlwdCBkZWxlZ2F0ZSBmYWlsZWQgW05vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnldLg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCg0KICAgIH0gLy8gRW5kIGFkZFRleHQNCg0KICAgIC8qKg0KICAgICAqIEFkanVzdCB0aGUgaW1hZ2UgZ2FtbWENCiAgICAgKg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICogQHBhcmFtIGZsb2F0ICRvdXRwdXRnYW1tYQ0KICAgICAqIEByZXR1cm4gbWl4ZWQgVFJVRSBvciBhIFBFQVIgZXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICovDQogICAgZnVuY3Rpb24gZ2FtbWEoJG91dHB1dGdhbW1hID0gMS4wKSB7DQogICAgICAgIGlmICgkb3V0cHV0Z2FtbWUgIT0gMS4wKSB7DQogICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFsnZ2FtbWEnXSA9ICctZ2FtbWEgJyAuIChmbG9hdCkgJG91dHB1dGdhbW1hOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENvbnZlcnQgdGhlIGltYWdlIHRvIGdyZXlzY2FsZQ0KICAgICAqDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGdyZXlzY2FsZSgpIHsNCiAgICAgICAgJHRoaXMtPmNvbW1hbmRbJ3R5cGUnXSA9ICctdHlwZSBHcmF5c2NhbGUnOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBIb3Jpem9udGFsIG1pcnJvcmluZw0KICAgICAqDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKiBAcmV0dXJuIFRSVUUgb3IgUEVBUiBFcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKi8NCiAgICBmdW5jdGlvbiBtaXJyb3IoKSB7DQogICAgICAgIC8vIFdlIGNhbiBvbmx5IGFwcGx5ICJmbG9wIiBvbmNlDQogICAgICAgIGlmIChpc3NldCgkdGhpcy0+Y29tbWFuZFsnZmxvcCddKSkgew0KICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmNvbW1hbmRbJ2Zsb3AnXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFsnZmxvcCddID0gJy1mbG9wJzsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBWZXJ0aWNhbCBtaXJyb3JpbmcNCiAgICAgKg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICogQHJldHVybiBUUlVFIG9yIFBFQVIgRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICovDQogICAgZnVuY3Rpb24gZmxpcCgpIHsNCiAgICAgICAgLy8gV2UgY2FuIG9ubHkgYXBwbHkgImZsaXAiIG9uY2UNCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5jb21tYW5kWydmbGlwJ10pKSB7DQogICAgICAgICAgICB1bnNldCgkdGhpcy0+Y29tbWFuZFsnZmxpcCddKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR0aGlzLT5jb21tYW5kWydmbGlwJ10gPSAnLWZsaXAnOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNhdmUgdGhlIGltYWdlIGZpbGUNCiAgICAgKg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICoNCiAgICAgKiBAcGFyYW0gJGZpbGVuYW1lIHN0cmluZyAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd3JpdGUgdG8NCiAgICAgKiBAcGFyYW0gJHF1YWxpdHkgIHF1YWxpdHkgaW1hZ2UgZHBpLCBkZWZhdWx0PTc1DQogICAgICogQHBhcmFtICR0eXBlICAgICBzdHJpbmcgIChKUEVHLCBQTkcuLi4pDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lLCAkdHlwZSA9ICcnLCAkcXVhbGl0eSA9IG51bGwpDQogICAgew0KICAgICAgICAkdHlwZSA9IHN0cnRvdXBwZXIoKCR0eXBlID09ICcnKSA/ICR0aGlzLT50eXBlIDogJHR5cGUpOw0KICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7DQogICAgICAgICAgICBjYXNlICdKUEVHJzoNCiAgICAgICAgICAgICAgICAkdHlwZSA9ICdKUEcnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgICRvcHRpb25zID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKCFpc19udWxsKCRxdWFsaXR5KSkgew0KICAgICAgICAgICAgJG9wdGlvbnNbJ3F1YWxpdHknXSA9ICRxdWFsaXR5Ow0KICAgICAgICB9DQogICAgICAgICRxdWFsaXR5ID0gJHRoaXMtPl9nZXRPcHRpb24oJ3F1YWxpdHknLCAkb3B0aW9ucywgNzUpOw0KDQogICAgICAgICRjbWQgPSAkdGhpcy0+X3ByZXBhcmVfY21kKA0KICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0lNX1BBVEgsDQogICAgICAgICAgICAnY29udmVydCcsDQogICAgICAgICAgICBpbXBsb2RlKCcgJywgJHRoaXMtPmNvbW1hbmQpDQogICAgICAgICAgICAgICAuICcgLXF1YWxpdHkgJyAuICgoaW50KSAkcXVhbGl0eSkgLiAnICcNCiAgICAgICAgICAgICAgIC4gZXNjYXBlc2hlbGxhcmcoJHRoaXMtPmltYWdlKSAuICcgJyAuICR0eXBlIC4gJzonDQogICAgICAgICAgICAgICAuIGVzY2FwZXNoZWxsYXJnKCRmaWxlbmFtZSkgLiAnIDI+JjEnKTsNCiAgICAgICAgZXhlYygkY21kLCAkcmVzLCAkZXhpdCk7DQoNCiAgICAgICAgaWYgKCEkdGhpcy0+a2VlcF9zZXR0aW5nc19vbl9zYXZlKSB7DQogICAgICAgICAgICAkdGhpcy0+ZnJlZSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICgkZXhpdCA9PSAwKSA/IHRydWUgOiBQRUFSOjpyYWlzZUVycm9yKGltcGxvZGUoJy4gJywgJHJlcyksDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfSU8pOw0KICAgIH0gLy8gRW5kIHNhdmUNCg0KICAgIC8qKg0KICAgICAqIERpc3BsYXkgaW1hZ2Ugd2l0aG91dCBzYXZpbmcgYW5kIGxvc2UgY2hhbmdlcw0KICAgICAqDQogICAgICogVGhpcyBtZXRob2QgYWRkcyB0aGUgQ29udGVudC10eXBlIEhUVFAgaGVhZGVyDQogICAgICoNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyB0eXBlIChKUEVHLFBORy4uLik7DQogICAgICogQHBhcmFtIGludCBxdWFsaXR5IDc1DQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGRpc3BsYXkoJHR5cGUgPSAnJywgJHF1YWxpdHkgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgJHR5cGUgICAgPSBzdHJ0b3VwcGVyKCgkdHlwZSA9PSAnJykgPyAkdGhpcy0+dHlwZSA6ICR0eXBlKTsNCiAgICAgICAgc3dpdGNoICgkdHlwZSkgew0KICAgICAgICAgICAgY2FzZSAnSlBFRyc6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAnSlBHJzsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCk7DQogICAgICAgIGlmICghaXNfbnVsbCgkcXVhbGl0eSkpIHsNCiAgICAgICAgICAgICRvcHRpb25zWydxdWFsaXR5J10gPSAkcXVhbGl0eTsNCiAgICAgICAgfQ0KICAgICAgICAkcXVhbGl0eSA9ICR0aGlzLT5fZ2V0T3B0aW9uKCdxdWFsaXR5JywgJG9wdGlvbnMsIDc1KTsNCg0KICAgICAgICAkdGhpcy0+X3NlbmRfZGlzcGxheV9oZWFkZXJzKCR0eXBlKTsNCg0KICAgICAgICAkY21kID0gJHRoaXMtPl9wcmVwYXJlX2NtZCgNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9JTV9QQVRILA0KICAgICAgICAgICAgJ2NvbnZlcnQnLA0KICAgICAgICAgICAgaW1wbG9kZSgnICcsICR0aGlzLT5jb21tYW5kKSAuICIgLXF1YWxpdHkgJHF1YWxpdHkgIiAgLg0KICAgICAgICAgICAgICAgICAgICR0aGlzLT5pbWFnZSAuICcgJyAuICR0eXBlIC4gIjotIik7DQogICAgICAgIHBhc3N0aHJ1KCRjbWQpOw0KDQogICAgICAgIGlmICghJHRoaXMtPmtlZXBfc2V0dGluZ3Nfb25fc2F2ZSkgew0KICAgICAgICAgICAgJHRoaXMtPmZyZWUoKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXN0cm95IGltYWdlIGhhbmRsZQ0KICAgICAqDQogICAgICogQHJldHVybiB2b2lkDQogICAgICovDQogICAgZnVuY3Rpb24gZnJlZSgpDQogICAgew0KICAgICAgICAkdGhpcy0+Y29tbWFuZCA9IGFycmF5KCk7DQogICAgICAgICR0aGlzLT5pbWFnZSA9ICcnOw0KICAgICAgICAkdGhpcy0+dHlwZSA9ICcnOw0KICAgIH0NCg0KfSAvLyBFbmQgY2xhc3MgSW1hZ2VJTQ0K]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/Imagick/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/Imagick/ImageTypes.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogVG8gYmUgaW5jbHVkZWQgYnkgRHJpdmVyIF9fY29uc3RydWN0KCkgbWV0aG9kDQogKg0KICogQGF1dGhvciBQaGlsaXBwZS5KYXVzaW9ucyBAYXRAIDExYWJhY3VzLmNvbQ0KICoqLw0KJHRoaXMtPl9zdXBwb3J0ZWRfaW1hZ2VfdHlwZXMgPSBhcnJheSgNCiAgICAnYXJ0JyAgID0+ICdyJywNCiAgICAnYXZpJyAgID0+ICdyJywNCiAgICAnYXZzJyAgID0+ICdydycsDQogICAgJ2JtcCcgICA9PiAncncnLA0KLy8gICdjZ20nICAgPT4gJ3InLA0KICAgICdjaW4nICAgPT4gJ3J3JywNCiAgICAnY215aycgID0+ICdydycsDQogICAgJ2N1cicgICA9PiAncicsDQogICAgJ2N1dCcgICA9PiAncicsDQogICAgJ2RjbScgICA9PiAncicsDQogICAgJ2RjeCcgICA9PiAncncnLA0KICAgICdkaWInICAgPT4gJ3J3JywNCiAgICAnZHB4JyAgID0+ICdydycsDQogICAgJ2VwZGYnICA9PiAncncnLA0KLy8gICdlcGknICAgPT4gJ3J3JywgICAgLy8gUmVxdWlyZXMgR2hvc3RzY3JpcHQNCi8vICAnZXBzJyAgID0+ICdydycsICAgIC8vIFJlcXVpcmVzIEdob3N0c2NyaXB0DQovLyAgJ2VwczInICA9PiAndycsICAgICAvLyBSZXF1aXJlcyBHaG9zdHNjcmlwdA0KLy8gICdlcHMzJyAgPT4gJ3cnLCAgICAgLy8gUmVxdWlyZXMgR2hvc3RzY3JpcHQNCi8vICAnZXBzZicgID0+ICdydycsICAgIC8vIFJlcXVpcmVzIEdob3N0c2NyaXB0DQovLyAgJ2Vwc2knICA9PiAncncnLCAgICAvLyBSZXF1aXJlcyBHaG9zdHNjcmlwdA0KLy8gICdlcHQnICAgPT4gJ3J3JywgICAgLy8gUmVxdWlyZXMgR2hvc3RzY3JpcHQNCi8vICAnZmlnJyAgID0+ICdyJywNCiAgICAnZml0cycgID0+ICdydycsDQovLyAgJ2ZweCcgICA9PiAncncnLA0KICAgICdnaWYnICAgPT4gJ3J3JywNCi8vICAnZ3BsdCcgID0+ICdyJywNCiAgICAnZ3JheScgID0+ICdydycsDQovLyAgJ2hwZ2wnICA9PiAncicsDQovLyAgJ2h0bWwnICA9PiAncncnLA0KICAgICdpY28nICAgPT4gJ3InLA0KLy8gICdqYmlnJyAgPT4gJ3J3JywNCiAgICAnam5nJyAgID0+ICdydycsDQovLyAgJ2pwMicgICA9PiAncncnLA0KLy8gICdqcGMnICAgPT4gJ3J3JywNCi8vICAnanBlZycgID0+ICdydycsDQovLyAgJ21hbicgICA9PiAncicsDQogICAgJ21hdCcgICA9PiAncicsDQogICAgJ21pZmYnICA9PiAncncnLA0KICAgICdtb25vJyAgPT4gJ3J3JywNCiAgICAnbW5nJyAgID0+ICdydycsDQovLyAgJ21wZWcnICA9PiAncncnLA0KLy8gICdtMnYnICAgPT4gJ3J3JywNCiAgICAnbXBjJyAgID0+ICdydycsDQogICAgJ21zbCcgICA9PiAncncnLA0KICAgICdtdHYnICAgPT4gJ3J3JywNCiAgICAnbXZnJyAgID0+ICdydycsDQogICAgJ290YicgICA9PiAncncnLA0KICAgICdwNycgICAgPT4gJ3J3JywNCiAgICAncGFsbScgID0+ICdydycsDQogICAgJ3BibScgICA9PiAncncnLA0KICAgICdwY2QnICAgPT4gJ3J3JywNCiAgICAncGNkcycgID0+ICdydycsDQogICAgJ3BjbCcgICA9PiAndycsDQogICAgJ3BjeCcgICA9PiAncncnLA0KICAgICdwZGInICAgPT4gJ3J3JywNCiAgICAncGRmJyAgID0+ICd3JywgICAgICAvLyBSZXF1aXJlcyBHaG9zdHNjcmlwdCB0byByZWFkDQogICAgJ3BmYScgICA9PiAncicsDQogICAgJ3BmYicgICA9PiAncicsDQogICAgJ3BnbScgICA9PiAncncnLA0KICAgICdwaWNvbicgPT4gJ3J3JywNCiAgICAncGljdCcgID0+ICdydycsDQogICAgJ3BpeCcgICA9PiAncicsDQogICAgJ3BuZycgICA9PiAncncnLA0KICAgICdwbm0nICAgPT4gJ3J3JywNCiAgICAncHBtJyAgID0+ICdydycsDQovLyAgJ3BzJyAgICA9PiAncncnLCAgICAgLy8gUmVxdWlyZXMgR2hvc3RzY3JpcHQNCi8vICAncHMyJyAgID0+ICdydycsICAgICAvLyBSZXF1aXJlcyBHaG9zdHNjcmlwdA0KLy8gICdwczMnICAgPT4gJ3J3JywgICAgIC8vIFJlcXVpcmVzIEdob3N0c2NyaXB0DQogICAgJ3BzZCcgICA9PiAncncnLA0KICAgICdwdGlmJyAgPT4gJ3J3JywNCiAgICAncHdwJyAgID0+ICdyJywNCi8vICAncmFkJyAgID0+ICdyJywNCiAgICAncmdiJyAgID0+ICdydycsDQogICAgJ3JnYmEnICA9PiAncncnLA0KICAgICdybGEnICAgPT4gJ3InLA0KICAgICdybGUnICAgPT4gJ3InLA0KICAgICdzY3QnICAgPT4gJ3InLA0KICAgICdzZncnICAgPT4gJ3InLA0KICAgICdzZ2knICAgPT4gJ3J3JywNCi8vICAnc2h0bWwnID0+ICd3JywNCiAgICAnc3VuJyAgID0+ICdydycsDQovLyAgJ3N2ZycgICA9PiAncncnLA0KICAgICd0Z2EnICAgPT4gJ3J3JywNCi8vICAndGlmZicgID0+ICdydycsDQogICAgJ3RpbScgICA9PiAncicsDQovLyAgJ3R0ZicgICA9PiAncicsDQogICAgJ3R4dCcgICA9PiAncncnLA0KICAgICd1aWwnICAgPT4gJ3cnLA0KICAgICd1eXZ5JyAgPT4gJ3J3JywNCiAgICAndmljYXInID0+ICdydycsDQogICAgJ3ZpZmYnICA9PiAncncnLA0KICAgICd3Ym1wJyAgPT4gJ3J3JywNCiAgICAnd3BnJyAgID0+ICdyJywNCiAgICAneGJtJyAgID0+ICdydycsDQogICAgJ3hjZicgICA9PiAncicsDQogICAgJ3hwbScgICA9PiAncncnLA0KICAgICd4d2QnICAgPT4gJ3J3JywNCiAgICAneXV2JyAgID0+ICdydycNCik7DQoNCmlmIChPU19XSU5ET1dTKSB7DQogICAgJHRoaXMtPl9zdXBwb3J0ZWRfaW1hZ2VfdHlwZXNbJ2VtZiddID0gJ3InOw0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/Imagick/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/Imagick2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyogdmltOiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9NCBzaGlmdHdpZHRoPTQ6ICovDQoNCi8qKg0KICogaW1hZ2ljayBQRUNMIGV4dGVuc2lvbiBpbXBsZW1lbnRhdGlvbiBmb3IgSW1hZ2VfVHJhbnNmb3JtIHBhY2thZ2UNCiAqDQogKiBQSFAgdmVyc2lvbnMgNCBhbmQgNQ0KICoNCiAqIExJQ0VOU0U6IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDMuMCBvZiB0aGUgUEhQIGxpY2Vuc2UNCiAqIHRoYXQgaXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoZSBmb2xsb3dpbmcgVVJJOg0KICogaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvM18wLnR4dC4gIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mDQogKiB0aGUgUEhQIExpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG8gb2J0YWluIGl0IHRocm91Z2ggdGhlIHdlYiwgcGxlYXNlDQogKiBzZW5kIGEgbm90ZSB0byBsaWNlbnNlQHBocC5uZXQgc28gd2UgY2FuIG1haWwgeW91IGEgY29weSBpbW1lZGlhdGVseS4NCiAqDQogKiBAY2F0ZWdvcnkgICBJbWFnZQ0KICogQHBhY2thZ2UgICAgSW1hZ2VfVHJhbnNmb3JtDQogKiBAc3VicGFja2FnZSBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0ltYWdpY2syDQogKiBAYXV0aG9yICAgICBBbGFuIEtub3dsZXMgPGFsYW5AYWtia2hvbWUuY29tPg0KICogQGF1dGhvciAgICAgUGV0ZXIgQm93eWVyIDxwZXRlckBtYXBsZWRlc2lnbi5jby51az4NCiAqIEBhdXRob3IgICAgIFBoaWxpcHBlIEphdXNpb25zIDxQaGlsaXBwZS5KYXVzaW9uc0AxMWFiYWN1cy5jb20+DQogKiBAY29weXJpZ2h0ICAyMDAyLTIwMDUgVGhlIFBIUCBHcm91cA0KICogQGxpY2Vuc2UgICAgaHR0cDovL3d3dy5waHAubmV0L2xpY2Vuc2UvM18wLnR4dCAgUEhQIExpY2Vuc2UgMy4wDQogKiBAdmVyc2lvbiAgICBDVlM6ICRJZDogSW1hZ2ljazIucGhwIDI2NjkwNyAyMDA4LTEwLTAxIDIxOjEwOjUwWiBkdWZ1eiAkDQogKiBAbGluayAgICAgICBodHRwOi8vcGVhci5waHAubmV0L3BhY2thZ2UvSW1hZ2VfVHJhbnNmb3JtDQogKi8NCg0KcmVxdWlyZV9vbmNlICdJbWFnZS9UcmFuc2Zvcm0ucGhwJzsNCg0KLyoqDQogKiBpbWFnaWNrIFBFQ0wgZXh0ZW5zaW9uIGltcGxlbWVudGF0aW9uIGZvciBJbWFnZV9UcmFuc2Zvcm0gcGFja2FnZQ0KICoNCiAqIFdBUk5JTkc6IEZvciB2ZXJzaW9uIDwgMi4wIG9mIHRoZSBleHRlbnNpb24uIEZvciB2ZXJzaW9uIDIuMCBhbmQgdXAgdXNlDQogKiBJbWFnaWNrMyBkcml2ZXIgaW5zdGVhZA0KICoNCiAqIEBjYXRlZ29yeSAgIEltYWdlDQogKiBAcGFja2FnZSAgICBJbWFnZV9UcmFuc2Zvcm0NCiAqIEBzdWJwYWNrYWdlIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfSW1hZ2ljazINCiAqIEBhdXRob3IgICAgIEFsYW4gS25vd2xlcyA8YWxhbkBha2JraG9tZS5jb20+DQogKiBAYXV0aG9yICAgICBQZXRlciBCb3d5ZXIgPHBldGVyQG1hcGxlZGVzaWduLmNvLnVrPg0KICogQGF1dGhvciAgICAgUGhpbGlwcGUgSmF1c2lvbnMgPFBoaWxpcHBlLkphdXNpb25zQDExYWJhY3VzLmNvbT4NCiAqIEBjb3B5cmlnaHQgIDIwMDItMjAwNSBUaGUgUEhQIEdyb3VwDQogKiBAbGljZW5zZSAgICBodHRwOi8vd3d3LnBocC5uZXQvbGljZW5zZS8zXzAudHh0ICBQSFAgTGljZW5zZSAzLjANCiAqIEB2ZXJzaW9uICAgIFJlbGVhc2U6IEBwYWNrYWdlX3ZlcnNpb25ADQogKiBAbGluayAgICAgICBodHRwOi8vcGVhci5waHAubmV0L3BhY2thZ2UvSW1hZ2VfVHJhbnNmb3JtDQogKiBAc2luY2UgICAgICBQSFAgNC4wDQogKi8NCmNsYXNzIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfSW1hZ2ljazIgZXh0ZW5kcyBJbWFnZV9UcmFuc2Zvcm0NCnsNCiAgICAvKioNCiAgICAgKiBIYW5kbGVyIG9mIHRoZSBpbWFnaWNrIGltYWdlIHJlc3NvdXJjZQ0KICAgICAqIEB2YXIgYXJyYXkNCiAgICAgKi8NCiAgICB2YXIgJGltYWdlSGFuZGxlID0gbnVsbDsNCg0KICAgIC8qKg0KICAgICAqIEhhbmRsZXIgb2YgdGhlIGltYWdlIHJlc3NvdXJjZSBiZWZvcmUNCiAgICAgKiB0aGUgbGFzdCB0cmFuc2Zvcm1hdGlvbg0KICAgICAqIEB2YXIgYXJyYXkNCiAgICAgKi8NCiAgICB2YXIgJG9sZEltYWdlOw0KDQogICAgLyoqDQogICAgICogQHNlZSBfX2NvbnN0cnVjdCgpDQogICAgICovDQogICAgZnVuY3Rpb24gSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9JbWFnaWNrMigpDQogICAgew0KICAgICAgICAkdGhpcy0+X19jb25zdHJ1Y3QoKTsNCiAgICB9IC8vIEVuZCBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0ltYWdpY2syDQoNCiAgICAvKioNCiAgICAgKiBAc2VlIGh0dHA6Ly93d3cuaW1hZ2VtYWdpY2sub3JnL3d3dy9mb3JtYXRzLmh0bWwNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogICAgew0KICAgICAgICBpZiAoUEVBUjo6bG9hZEV4dGVuc2lvbignaW1hZ2ljaycpKSB7DQogICAgICAgICAgICBpbmNsdWRlICdJbWFnZS9UcmFuc2Zvcm0vRHJpdmVyL0ltYWdpY2svSW1hZ2VUeXBlcy5waHAnOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHRoaXMtPmlzRXJyb3IoUEVBUjo6cmFpc2VFcnJvcignQ291bGRuXCd0IGZpbmQgdGhlIGltYWdpY2sgZXh0ZW5zaW9uLicsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBMb2FkcyBhbiBpbWFnZQ0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkaW1hZ2UgZmlsZW5hbWUNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9yIGEgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGxvYWQoJGltYWdlKQ0KICAgIHsNCiAgICAgICAgaWYgKCEoJHRoaXMtPmltYWdlSGFuZGxlID0gaW1hZ2lja19yZWFkaW1hZ2UoJGltYWdlKSkpIHsNCiAgICAgICAgICAgICR0aGlzLT5mcmVlKCk7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJhaXNlRXJyb3IoJ0NvdWxkblwndCBsb2FkIGltYWdlLicsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0lPKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoaW1hZ2lja19pc2Vycm9yKCR0aGlzLT5pbWFnZUhhbmRsZSkpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmFpc2VFcnJvcignQ291bGRuXCd0IGxvYWQgaW1hZ2UuJywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfSU8pOw0KICAgICAgICB9DQoNCiAgICAgICAgJHRoaXMtPmltYWdlID0gJGltYWdlOw0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPl9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOw0KICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcmVzdWx0KSkgew0KICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9IC8vIEVuZCBsb2FkDQoNCiAgICAvKioNCiAgICAgKiBSZXNpemUgQWN0aW9uDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICAgJG5ld194ICAgTmV3IHdpZHRoDQogICAgICogQHBhcmFtIGludCAgICRuZXdfeSAgIE5ldyBoZWlnaHQNCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9wdGlvbnMgT3B0aW9uYWwgcGFyYW1ldGVycw0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgZnVuY3Rpb24gX3Jlc2l6ZSgkbmV3X3gsICRuZXdfeSwgJG9wdGlvbnMgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKCFpbWFnaWNrX3Jlc2l6ZSgkdGhpcy0+aW1hZ2VIYW5kbGUsICRuZXdfeCwgJG5ld195LCBJTUFHSUNLX0ZJTFRFUl9VTktOT1dOICwgMSwgJyEnKSkgew0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yYWlzZUVycm9yKCdDb3VsZG5cJ3QgcmVzaXplIGltYWdlLicsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0ZBSUxFRCk7DQogICAgICAgIH0NCg0KICAgICAgICAkdGhpcy0+bmV3X3ggPSAkbmV3X3g7DQogICAgICAgICR0aGlzLT5uZXdfeSA9ICRuZXdfeTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQoNCiAgICB9IC8vIEVuZCByZXNpemUNCg0KICAgIC8qKg0KICAgICAqIFJvdGF0ZXMgdGhlIGN1cnJlbnQgaW1hZ2UNCiAgICAgKiBOb3RlOiBjb2xvciBtYXNrIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZA0KICAgICAqDQogICAgICogQHBhcmFtICAgaW50ICAgICBSb3RhdGlvbiBhbmdsZSBpbiBkZWdyZWUNCiAgICAgKiBAcGFyYW0gICBhcnJheSAgIE5vIG9wdGlvbnMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQNCiAgICAgKg0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gcm90YXRlKCRhbmdsZSwgJG9wdGlvbnMgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgaWYgKCgkYW5nbGUgJSAzNjApID09IDApIHsNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIGlmICghaW1hZ2lja19yb3RhdGUoJHRoaXMtPmltYWdlSGFuZGxlLCAkYW5nbGUpKSB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJhaXNlRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgYSBuZXcgaW1hZ2ljayBpbWFnZSBmb3IgdGhlIHJvdGF0aW9uLicsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0ZBSUxFRCk7DQogICAgICAgIH0NCg0KICAgICAgICAkdGhpcy0+bmV3X3ggPSBpbWFnaWNrX2dldHdpZHRoKCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgICR0aGlzLT5uZXdfeSA9IGltYWdpY2tfZ2V0aGVpZ2h0KCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgfSAvLyBFbmQgcm90YXRlDQoNCiAgICAvKioNCiAgICAgKiBhZGRUZXh0DQogICAgICoNCiAgICAgKiBAcGFyYW0gICBhcnJheSAgIG9wdGlvbnMgICAgIEFycmF5IGNvbnRhaW5zIG9wdGlvbnMNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KA0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0JyAgVGhlIHN0cmluZyB0byBkcmF3DQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gnICAgICBIb3Jpem9udGFsIHBvc2l0aW9uDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3knICAgICBWZXJ0aWNhbCBQb3NpdGlvbg0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb2xvcicgRm9udCBjb2xvcg0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250JyAgRm9udCB0byBiZSB1c2VkDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemUnICBTaXplIG9mIHRoZSBmb250cyBpbiBwaXhlbA0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNpemVfZmlyc3QnICBUZWxsIGlmIHRoZSBpbWFnZSBoYXMgdG8gYmUgcmVzaXplZA0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgZHJhd2luZyB0aGUgdGV4dA0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBhZGRUZXh0KCRwYXJhbXMpDQogICAgew0KICAgICAgICAkdGhpcy0+b2xkSW1hZ2U9ICR0aGlzLT5pbWFnZUhhbmRsZTsNCiAgICAgICAgJHBhcmFtcyA9IGFycmF5X21lcmdlKCR0aGlzLT5fZ2V0X2RlZmF1bHRfdGV4dF9wYXJhbXMoKSwgJHBhcmFtcyk7DQoNCiAgICAgICAgaWYgKGlzX2FycmF5KCRwYXJhbXNbJ2NvbG9yJ10pKSB7DQogICAgICAgICAgICAkcGFyYW1zWydjb2xvciddID0gJHRoaXMtPmNvbG9yYXJyYXkyY29sb3JoZXgoJHBhcmFtc1snY29sb3InXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkcGFyYW1zWydjb2xvciddID0gc3RydG9sb3dlcigkcGFyYW1zWydjb2xvciddKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHN0YXRpYyAkY21kcyA9IGFycmF5KA0KICAgICAgICAgICAgJ3NldGZpbGxjb2xvcicgPT4gJ2NvbG9yJywNCiAgICAgICAgICAgICdzZXRmb250c2l6ZScgID0+ICdzaXplJywNCiAgICAgICAgICAgICdzZXRmb250ZmFjZScgID0+ICdmb250Jw0KICAgICAgICApOw0KICAgICAgICBpbWFnaWNrX2JlZ2luZHJhdygkdGhpcy0+aW1hZ2VIYW5kbGUpOw0KDQogICAgICAgIGZvcmVhY2ggKCRjbWRzIGFzICRjbWQgPT4gJHYpIHsNCiAgICAgICAgICAgIGlmICghY2FsbF91c2VyX2Z1bmMoJ2ltYWdpY2tfJyAuICRjbWQsICR0aGlzLT5pbWFnZUhhbmRsZSwgJHBhcmFtc1skdl0pKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yYWlzZUVycm9yKCJQcm9ibGVtIHdpdGggYWRkaW5nIFRleHQ6Onskdn0gPSB7JHBhcmFtc1skdl19IiwNCiAgICAgICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0ZBSUxFRCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFpbWFnaWNrX2RyYXdhbm5vdGF0aW9uKCR0aGlzLT5pbWFnZUhhbmRsZSwgJHBhcmFtc1sneCddLCAkcGFyYW1zWyd5J10sICRwYXJhbXNbJ3RleHQnXSkpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmFpc2VFcnJvcignUHJvYmxlbSB3aXRoIGFkZGluZyBUZXh0JywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfRkFJTEVEKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgfSAvLyBFbmQgYWRkVGV4dA0KDQoNCiAgICAvKioNCiAgICAgKiBTYXZlcyB0aGUgaW1hZ2UgdG8gYSBmaWxlDQogICAgICoNCiAgICAgKiBAcGFyYW0gJGZpbGVuYW1lIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byB3cml0ZSB0bw0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gc2F2ZSgkZmlsZW5hbWUsICR0eXBlID0gJycsICRxdWFsaXR5ID0gbnVsbCkNCiAgICB7DQogICAgICAgICRvcHRpb25zID0gKGlzX2FycmF5KCRxdWFsaXR5KSkgPyAkcXVhbGl0eSA6IGFycmF5KCk7DQogICAgICAgIGlmIChpc19udW1lcmljKCRxdWFsaXR5KSkgew0KICAgICAgICAgICAgJG9wdGlvbnNbJ3F1YWxpdHknXSA9ICRxdWFsaXR5Ow0KICAgICAgICB9DQogICAgICAgICRxdWFsaXR5ID0gJHRoaXMtPl9nZXRPcHRpb24oJ3F1YWxpdHknLCAkb3B0aW9ucywgNzUpOw0KICAgICAgICBpbWFnaWNrX3NldGNvbXByZXNzaW9ucXVhbGl0eSgkdGhpcy0+aW1hZ2VIYW5kbGUsICRxdWFsaXR5KTsNCg0KICAgICAgICBpZiAoJHR5cGUgJiYgc3RyY2FzZWNtcCgkdHlwZSwgJHRoaXMtPnR5cGUpDQogICAgICAgICAgICAmJiAhaW1hZ2lja19jb252ZXJ0KCR0aGlzLT5pbWFnZUhhbmRsZSwgJHR5cGUpKSB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJhaXNlRXJyb3IoJ0NvdWxkblwndCBzYXZlIGltYWdlIHRvIGZpbGUgKGNvbnZlcnNpb24gZmFpbGVkKS4nLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9GQUlMRUQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCFpbWFnaWNrX3dyaXRlKCR0aGlzLT5pbWFnZUhhbmRsZSwgJGZpbGVuYW1lKSkgew0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yYWlzZUVycm9yKCdDb3VsZG5cJ3Qgc2F2ZSBpbWFnZSB0byBmaWxlLicsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0lPKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICghJHRoaXMtPmtlZXBfc2V0dGluZ3Nfb25fc2F2ZSkgew0KICAgICAgICAgICAgJHRoaXMtPmZyZWUoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgfSAvLyBFbmQgc2F2ZQ0KDQogICAgLyoqDQogICAgICogRGlzcGxheXMgaW1hZ2Ugd2l0aG91dCBzYXZpbmcgYW5kIGxvc2UgY2hhbmdlcw0KICAgICAqDQogICAgICogVGhpcyBtZXRob2QgYWRkcyB0aGUgQ29udGVudC10eXBlIEhUVFAgaGVhZGVyDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nIHR5cGUgKEpQRyxQTkcuLi4pOw0KICAgICAqIEBwYXJhbSBpbnQgcXVhbGl0eSA3NQ0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBkaXNwbGF5KCR0eXBlID0gJycsICRxdWFsaXR5ID0gbnVsbCkNCiAgICB7DQogICAgICAgICRvcHRpb25zID0gKGlzX2FycmF5KCRxdWFsaXR5KSkgPyAkcXVhbGl0eSA6IGFycmF5KCk7DQogICAgICAgIGlmIChpc19udW1lcmljKCRxdWFsaXR5KSkgew0KICAgICAgICAgICAgJG9wdGlvbnNbJ3F1YWxpdHknXSA9ICRxdWFsaXR5Ow0KICAgICAgICB9DQogICAgICAgICRxdWFsaXR5ID0gJHRoaXMtPl9nZXRPcHRpb24oJ3F1YWxpdHknLCAkb3B0aW9ucywgNzUpOw0KICAgICAgICBpbWFnaWNrX3NldGNvbXByZXNzaW9ucXVhbGl0eSgkdGhpcy0+aW1hZ2VIYW5kbGUsICRxdWFsaXR5KTsNCg0KICAgICAgICBpZiAoJHR5cGUgJiYgc3RyY2FzZWNtcCgkdHlwZSwgJHRoaXMtPnR5cGUpDQogICAgICAgICAgICAmJiAhaW1hZ2lja19jb252ZXJ0KCR0aGlzLT5pbWFnZUhhbmRsZSwgJHR5cGUpKSB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJhaXNlRXJyb3IoJ0NvdWxkblwndCBzYXZlIGltYWdlIHRvIGZpbGUgKGNvbnZlcnNpb24gZmFpbGVkKS4nLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9GQUlMRUQpOw0KICAgICAgICB9DQogICAgICAgIGlmICghKCRpbWFnZSA9IGltYWdpY2tfaW1hZ2UyYmxvYigkdGhpcy0+aW1hZ2VIYW5kbGUpKSkgew0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yYWlzZUVycm9yKCdDb3VsZG5cJ3QgZGlzcGxheSBpbWFnZS4nLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9JTyk7DQogICAgICAgIH0NCiAgICAgICAgaGVhZGVyKCdDb250ZW50LXR5cGU6ICcgLiBpbWFnaWNrX2dldG1pbWV0eXBlKCR0aGlzLT5pbWFnZUhhbmRsZSkpOw0KICAgICAgICBlY2hvICRpbWFnZTsNCiAgICAgICAgJHRoaXMtPmZyZWUoKTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQWRqdXN0cyB0aGUgaW1hZ2UgZ2FtbWENCiAgICAgKg0KICAgICAqIEBwYXJhbSBmbG9hdCAkb3V0cHV0Z2FtbWENCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9yIGEgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGdhbW1hKCRvdXRwdXRnYW1tYSA9IDEuMCkgew0KICAgICAgICBpZiAoJG91dHB1dGdhbW1hICE9IDEuMCkgew0KICAgICAgICAgICAgaW1hZ2lja19nYW1tYSgkdGhpcy0+aW1hZ2VIYW5kbGUsICRvdXRwdXRnYW1tYSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQ3JvcHMgdGhlIGltYWdlDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50IHdpZHRoIENyb3BwZWQgaW1hZ2Ugd2lkdGgNCiAgICAgKiBAcGFyYW0gaW50IGhlaWdodCBDcm9wcGVkIGltYWdlIGhlaWdodA0KICAgICAqIEBwYXJhbSBpbnQgeCBYLWNvb3JkaW5hdGUgdG8gY3JvcCBhdA0KICAgICAqIEBwYXJhbSBpbnQgeSBZLWNvb3JkaW5hdGUgdG8gY3JvcCBhdA0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBjcm9wKCR3aWR0aCwgJGhlaWdodCwgJHggPSAwLCAkeSA9IDApDQogICAgew0KICAgICAgICAvLyBTYW5pdHkgY2hlY2sNCiAgICAgICAgaWYgKCEkdGhpcy0+aW50ZXJzZWN0cygkd2lkdGgsICRoZWlnaHQsICR4LCAkeSkpIHsNCiAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdOb3RoaW5nIHRvIGNyb3AnLCBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfT1VUT0ZCT1VORCk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFpbWFnaWNrX2Nyb3AoJHRoaXMtPmltYWdlSGFuZGxlLCAkeCwgJHksICR3aWR0aCwgJGhlaWdodCkpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmFpc2VFcnJvcignQ291bGRuXCd0IGNyb3AgaW1hZ2UuJywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfRkFJTEVEKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEkgdGhpbmsgdGhhdCBzZXR0aW5nIGltZ194L3kgaXMgd3JvbmcsIGJ1dCBzY2FsZUJ5TGVuZ3RoKCkgJiBmcmllbmRzDQogICAgICAgIC8vIG1lc3MgdXAgdGhlIGFzcGVjdCBhZnRlciBhIGNyb3Agb3RoZXJ3aXNlLg0KICAgICAgICAkdGhpcy0+bmV3X3ggPSAkd2lkdGg7DQogICAgICAgICR0aGlzLT5uZXdfeSA9ICRoZWlnaHQ7DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogSG9yaXpvbnRhbCBtaXJyb3JpbmcNCiAgICAgKg0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gbWlycm9yKCkNCiAgICB7DQogICAgICAgIGlmICghaW1hZ2lja19mbG9wKCR0aGlzLT5pbWFnZUhhbmRsZSkpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmFpc2VFcnJvcignQ291bGRuXCd0IG1pcnJvciB0aGUgaW1hZ2UuJywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfRkFJTEVEKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBWZXJ0aWNhbCBtaXJyb3JpbmcNCiAgICAgKg0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZmxpcCgpDQogICAgew0KICAgICAgICBpZiAoIWltYWdpY2tfZmxpcCgkdGhpcy0+aW1hZ2VIYW5kbGUpKSB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJhaXNlRXJyb3IoJ0NvdWxkblwndCBmbGlwIHRoZSBpbWFnZS4nLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9GQUlMRUQpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERlc3Ryb3kgaW1hZ2UgaGFuZGxlDQogICAgICoNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGZyZWUoKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCR0aGlzLT5pbWFnZUhhbmRsZSkpIHsNCiAgICAgICAgICAgIGltYWdpY2tfZGVzdHJveWhhbmRsZSgkdGhpcy0+aW1hZ2VIYW5kbGUpOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5pbWFnZUhhbmRsZSA9IG51bGw7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmFpc2VFcnJvciBNZXRob2QgLSBzaG93cyBpbWFnaWNrIFJhdyBlcnJvcnMuDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtZXNzYWdlIG1lc3NhZ2UgPSBwcmVmaXhlZCBtZXNzYWdlLi4NCiAgICAgKiBAcGFyYW0gaW50ICAgICRjb2RlIGVycm9yIGNvZGUNCiAgICAgKiBAcmV0dXJuIFBFQVIgZXJyb3Igb2JqZWN0DQogICAgICogQGFjY2VzcyBwcm90ZWN0ZWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiByYWlzZUVycm9yKCRtZXNzYWdlLCAkY29kZSA9IDApDQogICAgew0KICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJHRoaXMtPmltYWdlSGFuZGxlKSkgew0KICAgICAgICAgICAgJG1lc3NhZ2UgLj0gIlxuUmVhc29uOiAiDQogICAgICAgICAgICAgICAgICAgICAgICAuICBpbWFnaWNrX2ZhaWxlZHJlYXNvbigkdGhpcy0+aW1hZ2VIYW5kbGUpDQogICAgICAgICAgICAgICAgICAgICAgICAuICJcbkRlc2NyaXB0aW9uOiAiDQogICAgICAgICAgICAgICAgICAgICAgICAuIGltYWdpY2tfZmFpbGVkZGVzY3JpcHRpb24oJHRoaXMtPmltYWdlSGFuZGxlKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcigkbWVzc2FnZSwgJGNvZGUpOw0KICAgIH0NCg0KfSAvLyBFbmQgY2xhc3MgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9JbWFnaWNrMg==]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/Imagick3.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyogdmltOiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9NCBzaGlmdHdpZHRoPTQ6ICovDQoNCi8qKg0KICogaW1hZ2ljayBQRUNMIGV4dGVuc2lvbiBpbXBsZW1lbnRhdGlvbiBmb3IgSW1hZ2VfVHJhbnNmb3JtIHBhY2thZ2UNCiAqDQogKiBQSFAgdmVyc2lvbiA1DQogKg0KICogTElDRU5TRTogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQSFAgbGljZW5zZQ0KICogdGhhdCBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhlIGZvbGxvd2luZyBVUkk6DQogKiBodHRwOi8vd3d3LnBocC5uZXQvbGljZW5zZS8zXzAudHh0LiAgSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YNCiAqIHRoZSBQSFAgTGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0byBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd2ViLCBwbGVhc2UNCiAqIHNlbmQgYSBub3RlIHRvIGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5Lg0KICoNCiAqIEBjYXRlZ29yeSAgIEltYWdlDQogKiBAcGFja2FnZSAgICBJbWFnZV9UcmFuc2Zvcm0NCiAqIEBzdWJwYWNrYWdlIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfSW1hZ2ljazMNCiAqIEBhdXRob3IgICAgIFBoaWxpcHBlIEphdXNpb25zIDxQaGlsaXBwZS5KYXVzaW9uc0AxMWFiYWN1cy5jb20+DQogKiBAY29weXJpZ2h0ICAyMDA3IFRoZSBQSFAgR3JvdXANCiAqIEBsaWNlbnNlICAgIGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQgIFBIUCBMaWNlbnNlIDMuMA0KICogQHZlcnNpb24gICAgQ1ZTOiAkSWQ6IEltYWdpY2szLnBocCAyNjY5MDggMjAwOC0xMC0wMSAyMToxMTowN1ogZHVmdXogJA0KICogQGxpbmsgICAgICAgaHR0cDovL3BlYXIucGhwLm5ldC9wYWNrYWdlL0ltYWdlX1RyYW5zZm9ybQ0KICovDQoNCnJlcXVpcmVfb25jZSAnSW1hZ2UvVHJhbnNmb3JtLnBocCc7DQoNCi8qKg0KICogaW1hZ2ljayBQRUNMIGV4dGVuc2lvbiBpbXBsZW1lbnRhdGlvbiBmb3IgSW1hZ2VfVHJhbnNmb3JtIHBhY2thZ2UNCiAqDQogKiBGb3IgdXNlIG9mIHZlcnNpb24gMisgb2YgdGhlIGV4dGVuc2lvbi4gRm9yIHZlcnNpb24gMC45LiogdXNlIEltYWdpY2syIGRyaXZlcg0KICogaW5zdGVhZA0KICoNCiAqIEBjYXRlZ29yeSAgIEltYWdlDQogKiBAcGFja2FnZSAgICBJbWFnZV9UcmFuc2Zvcm0NCiAqIEBzdWJwYWNrYWdlIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfSW1hZ2ljazMNCiAqIEBhdXRob3IgICAgIFBoaWxpcHBlIEphdXNpb25zIDxQaGlsaXBwZS5KYXVzaW9uc0AxMWFiYWN1cy5jb20+DQogKiBAY29weXJpZ2h0ICAyMDA3IFRoZSBQSFAgR3JvdXANCiAqIEBsaWNlbnNlICAgIGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQgIFBIUCBMaWNlbnNlIDMuMA0KICogQHZlcnNpb24gICAgUmVsZWFzZTogQHBhY2thZ2VfdmVyc2lvbkANCiAqIEBsaW5rICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9JbWFnZV9UcmFuc2Zvcm0NCiAqIEBzaW5jZSAgICAgIDAuOS4yDQogKiBAc2luY2UgICAgICBQSFAgNS4xLjMNCiAqIEBzaW5jZSAgICAgIFBFQ0wgSW1hZ2ljayAyLjAuMGExDQogKi8NCmNsYXNzIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfSW1hZ2ljazMgZXh0ZW5kcyBJbWFnZV9UcmFuc2Zvcm0NCnsNCiAgICAvKioNCiAgICAgKiBJbnN0YW5jZSBvZiBpbWFnaWNrDQogICAgICogQHZhciBJbWFnaWNrDQogICAgICovDQogICAgdmFyICRpbWFnaWNrID0gbnVsbDsNCg0KICAgIC8qKg0KICAgICAqIEhhbmRsZXIgb2YgdGhlIGltYWdlIHJlc291cmNlIGJlZm9yZQ0KICAgICAqIHRoZSBsYXN0IHRyYW5zZm9ybWF0aW9uDQogICAgICogQHZhciBhcnJheQ0KICAgICAqLw0KICAgIHZhciAkb2xkSW1hZ2U7DQoNCiAgICAvKioNCiAgICAgKiBAc2VlIF9fY29uc3RydWN0KCkNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX0ltYWdpY2szKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5fX2NvbnN0cnVjdCgpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEBzZWUgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmcvd3d3L2Zvcm1hdHMuaHRtbA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgICB7DQogICAgICAgIGlmIChQRUFSOjpsb2FkRXh0ZW5zaW9uKCdpbWFnaWNrJykpIHsNCiAgICAgICAgICAgIGluY2x1ZGUgJ0ltYWdlL1RyYW5zZm9ybS9Ecml2ZXIvSW1hZ2ljay9JbWFnZVR5cGVzLnBocCc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdGhpcy0+aXNFcnJvcihQRUFSOjpyYWlzZUVycm9yKCdDb3VsZCBub3QgZmluZCB0aGUgaW1hZ2ljayBleHRlbnNpb24uJywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIExvYWRzIGFuIGltYWdlDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpbWFnZSBmaWxlbmFtZQ0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBsb2FkKCRpbWFnZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5mcmVlKCk7DQogICAgICAgICR0aGlzLT5pbWFnaWNrID0gbmV3IEltYWdpY2soKTsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICR0aGlzLT5pbWFnaWNrLT5yZWFkSW1hZ2UoJGltYWdlKTsNCg0KICAgICAgICB9IGNhdGNoIChJbWFnaWNrRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICAkdGhpcy0+ZnJlZSgpOw0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yYWlzZUVycm9yKCdDb3VsZCBub3QgbG9hZCBpbWFnZTonLiRlLT5nZXRNZXNzYWdlKCksDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0lPKTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aGlzLT5pbWFnZSA9ICRpbWFnZTsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5fZ2V0X2ltYWdlX2RldGFpbHMoJGltYWdlKTsNCiAgICAgICAgaWYgKFBFQVI6OmlzRXJyb3IoJHJlc3VsdCkpIHsNCiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmVzaXplcyB0aGUgaW1hZ2UNCiAgICAgKg0KICAgICAqIEBwYXJhbSBpbnRlZ2VyICRuZXdfeCAgIE5ldyB3aWR0aA0KICAgICAqIEBwYXJhbSBpbnRlZ2VyICRuZXdfeSAgIE5ldyBoZWlnaHQNCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9wdGlvbnMgT3B0aW9uYWwgcGFyYW1ldGVycw0KICAgICAqIDx1bD4NCiAgICAgKiAgPGxpPidzY2FsZU1ldGhvZCc6ICJwaXhlbCIgb3IgInNtb290aCI8L2xpPg0KICAgICAqIDwvdWw+DQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9yIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwcm90ZWN0ZWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfcmVzaXplKCRuZXdfeCwgJG5ld195LCAkb3B0aW9ucyA9IG51bGwpDQogICAgew0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJHNjYWxlTWV0aG9kID0gJHRoaXMtPl9nZXRPcHRpb24oJ3NjYWxlTWV0aG9kJywgJG9wdGlvbnMsICdzbW9vdGgnKTsNCiAgICAgICAgICAgICRibHVyID0gKCRzY2FsZU1ldGhvZCA9PSAncGl4ZWwnKSA/IDAgOiAxOw0KICAgICAgICAgICAgJHRoaXMtPmltYWdpY2stPnJlc2l6ZUltYWdlKCRuZXdfeCwgJG5ld195LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdpY2s6OkZJTFRFUl9VTkRFRklORUQsICRibHVyKTsNCg0KICAgICAgICB9IGNhdGNoIChJbWFnaWNrRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJhaXNlRXJyb3IoJ0NvdWxkIG5vdCByZXNpemUgaW1hZ2UuJywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfRkFJTEVEKTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aGlzLT5uZXdfeCA9ICRuZXdfeDsNCiAgICAgICAgJHRoaXMtPm5ld195ID0gJG5ld195Ow0KICAgICAgICByZXR1cm4gdHJ1ZTsNCg0KICAgIH0gLy8gRW5kIHJlc2l6ZQ0KDQogICAgLyoqDQogICAgICogUm90YXRlcyB0aGUgY3VycmVudCBpbWFnZQ0KICAgICAqDQogICAgICogQHBhcmFtIGZsb2F0ICRhbmdsZSBSb3RhdGlvbiBhbmdsZSBpbiBkZWdyZWUNCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgU3VwcG9ydGVkIG9wdGlvbnM6DQogICAgICogPHVsPg0KICAgICAqICA8bGk+J2NhbnZhc0NvbG9yJyA6IGFycmF5KHIgLGcsIGIpLCBuYW1lZCBjb2xvciBvciAjcnJnZ2JiPC9saT4NCiAgICAgKiA8L3VsPg0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiByb3RhdGUoJGFuZ2xlLCAkb3B0aW9ucyA9IG51bGwpDQogICAgew0KICAgICAgICBpZiAoKCRhbmdsZSAlIDM2MCkgPT0gMCkgew0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgJGNvbG9yID0gJHRoaXMtPl9nZXRDb2xvcignY2FudmFzQ29sb3InLCAkb3B0aW9ucywgYXJyYXkoMjU1LCAyNTUsIDI1NSkpOw0KICAgICAgICBpZiAoaXNfYXJyYXkoJGNvbG9yKSkgew0KICAgICAgICAgICAgJGNvbG9yID0gJHRoaXMtPmNvbG9yYXJyYXkyY29sb3JoZXgoJGNvbG9yKTsNCiAgICAgICAgfQ0KICAgICAgICAkcGl4ZWwgPSBuZXcgSW1hZ2lja1BpeGVsKCRjb2xvcik7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICAkdGhpcy0+aW1hZ2ljay0+cm90YXRlSW1hZ2UoJHBpeGVsLCAkYW5nbGUpOw0KDQogICAgICAgIH0gY2F0Y2ggKEltYWdpY2tFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmFpc2VFcnJvcignQ2Fubm90IGNyZWF0ZSBhIG5ldyBpbWFnaWNrIGltYWdlIGZvciB0aGUgcm90YXRpb246ICcuJGUtPmdldE1lc3NhZ2UoKSwNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfRkFJTEVEKTsNCiAgICAgICAgfQ0KICAgICAgICAkaW5mbyA9ICR0aGlzLT5pbWFnaWNrLT5nZXRJbWFnZUdlb21ldHJ5KCk7DQogICAgICAgICR0aGlzLT5uZXdfeCA9ICRpbmZvWyd3aWR0aCddOw0KICAgICAgICAkdGhpcy0+bmV3X3kgPSAkaW5mb1snaGVpZ2h0J107DQogICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgfSAvLyBFbmQgcm90YXRlDQoNCiAgICAvKioNCiAgICAgKiBBZGRzIHRleHQgdG8gdGhlIGltYWdlDQogICAgICoNCiAgICAgKiBAcGFyYW0gICBhcnJheSAgICRwYXJhbXMgQXJyYXkgY29udGFpbnMgb3B0aW9uczoNCiAgICAgKiA8dWw+DQogICAgICogIDxsaT4ndGV4dCcgKHN0cmluZykgVGhlIHN0cmluZyB0byBkcmF3PC9saT4NCiAgICAgKiAgPGxpPid4JyAgICAoaW50ZWdlcikgSG9yaXpvbnRhbCBwb3NpdGlvbjwvbGk+DQogICAgICogIDxsaT4neScgICAgKGludGVnZXIpIFZlcnRpY2FsIFBvc2l0aW9uPC9saT4NCiAgICAgKiAgPGxpPidDb2xvcicgKG1peGVkKSBGb250IGNvbG9yPC9saT4NCiAgICAgKiAgPGxpPidmb250JyAoc3RyaW5nKSBGb250IHRvIGJlIHVzZWQ8L2xpPg0KICAgICAqICA8bGk+J3NpemUnIChpbnRlZ2VyKSBTaXplIG9mIHRoZSBmb250cyBpbiBwaXhlbDwvbGk+DQogICAgICogPC91bD4NCiAgICAgKg0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gYWRkVGV4dCgkcGFyYW1zKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPm9sZEltYWdlID0gY2xvbmUgJHRoaXMtPmltYWdpY2s7DQogICAgICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZSgkdGhpcy0+X2dldF9kZWZhdWx0X3RleHRfcGFyYW1zKCksICRwYXJhbXMpOw0KDQogICAgICAgIGlmIChpc19hcnJheSgkcGFyYW1zWydjb2xvciddKSkgew0KICAgICAgICAgICAgJHBhcmFtc1snY29sb3InXSA9ICR0aGlzLT5jb2xvcmFycmF5MmNvbG9yaGV4KCRwYXJhbXNbJ2NvbG9yJ10pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHBhcmFtc1snY29sb3InXSA9IHN0cnRvbG93ZXIoJHBhcmFtc1snY29sb3InXSk7DQogICAgICAgIH0NCg0KICAgICAgICBzdGF0aWMgJGNtZHMgPSBhcnJheSgNCiAgICAgICAgICAgICdzZXRGaWxsQ29sb3InID0+ICdjb2xvcicsDQogICAgICAgICAgICAnc2V0Rm9udFNpemUnICA9PiAnc2l6ZScsDQogICAgICAgICAgICAnc2V0Rm9udEZhY2UnICA9PiAnZm9udCcNCiAgICAgICAgKTsNCiAgICAgICAgJHRoaXMtPmltYWdpY2stPmJlZ2luRHJhdygpOw0KDQogICAgICAgIGZvcmVhY2ggKCRjbWRzIGFzICRjbWQgPT4gJHYpIHsNCiAgICAgICAgICAgIGlmICghJHRoaXMtPmltYWdpY2stPiRjbWQoJHBhcmFtc1skdl0pKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yYWlzZUVycm9yKCJQcm9ibGVtIHdpdGggYWRkaW5nIFRleHQ6Onskdn0gPSB7JHBhcmFtc1skdl19IiwNCiAgICAgICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0ZBSUxFRCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCEkdGhpcy0+aW1hZ2ljay0+ZHJhd0Fubm90YXRpb24oJHBhcmFtc1sneCddLCAkcGFyYW1zWyd5J10sICRwYXJhbXNbJ3RleHQnXSkpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmFpc2VFcnJvcignUHJvYmxlbSB3aXRoIGFkZGluZyBUZXh0JywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfRkFJTEVEKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgfSAvLyBFbmQgYWRkVGV4dA0KDQoNCiAgICAvKioNCiAgICAgKiBTYXZlcyB0aGUgaW1hZ2UgdG8gYSBmaWxlDQogICAgICoNCiAgICAgKiBAcGFyYW0gJGZpbGVuYW1lIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byB3cml0ZSB0bw0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBzYXZlKCRmaWxlbmFtZSwgJHR5cGUgPSAnJywgJHF1YWxpdHkgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgJG9wdGlvbnMgPSAoaXNfYXJyYXkoJHF1YWxpdHkpKSA/ICRxdWFsaXR5IDogYXJyYXkoKTsNCiAgICAgICAgaWYgKGlzX251bWVyaWMoJHF1YWxpdHkpKSB7DQogICAgICAgICAgICAkb3B0aW9uc1sncXVhbGl0eSddID0gJHF1YWxpdHk7DQogICAgICAgIH0NCiAgICAgICAgJHF1YWxpdHkgPSAkdGhpcy0+X2dldE9wdGlvbigncXVhbGl0eScsICRvcHRpb25zLCA3NSk7DQogICAgICAgICR0aGlzLT5pbWFnaWNrLT5zZXRJbWFnZUNvbXByZXNzaW9uKCRxdWFsaXR5KTsNCg0KICAgICAgICBpZiAoJHR5cGUgJiYgc3RyY2FzZWNtcCgkdHlwZSwgJHRoaXMtPnR5cGUpKSB7DQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5pbWFnaWNrLT5zZXRJbWFnZUZvcm1hdCgkdHlwZSk7DQoNCiAgICAgICAgICAgIH0gY2F0Y2ggKEltYWdpY2tFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJhaXNlRXJyb3IoJ0NvdWxkIG5vdCBzYXZlIGltYWdlIHRvIGZpbGUgKGNvbnZlcnNpb24gZmFpbGVkKS4nLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9GQUlMRUQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICR0aGlzLT5pbWFnaWNrLT53cml0ZUltYWdlKCRmaWxlbmFtZSk7DQoNCiAgICAgICAgfSBjYXRjaCAoSW1hZ2lja0V4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yYWlzZUVycm9yKCdDb3VsZCBub3Qgc2F2ZSBpbWFnZSB0byBmaWxlOiAnLiRlLT5nZXRNZXNzYWdlKCksDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0lPKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICghJHRoaXMtPmtlZXBfc2V0dGluZ3Nfb25fc2F2ZSkgew0KICAgICAgICAgICAgJHRoaXMtPmZyZWUoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgfSAvLyBFbmQgc2F2ZQ0KDQogICAgLyoqDQogICAgICogRGlzcGxheXMgaW1hZ2Ugd2l0aG91dCBzYXZpbmcgYW5kIGxvc2UgY2hhbmdlcw0KICAgICAqDQogICAgICogVGhpcyBtZXRob2QgYWRkcyB0aGUgQ29udGVudC10eXBlIEhUVFAgaGVhZGVyDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nIHR5cGUgKEpQRyxQTkcuLi4pOw0KICAgICAqIEBwYXJhbSBpbnQgcXVhbGl0eSA3NQ0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBkaXNwbGF5KCR0eXBlID0gJycsICRxdWFsaXR5ID0gbnVsbCkNCiAgICB7DQogICAgICAgICRvcHRpb25zID0gKGlzX2FycmF5KCRxdWFsaXR5KSkgPyAkcXVhbGl0eSA6IGFycmF5KCk7DQogICAgICAgIGlmIChpc19udW1lcmljKCRxdWFsaXR5KSkgew0KICAgICAgICAgICAgJG9wdGlvbnNbJ3F1YWxpdHknXSA9ICRxdWFsaXR5Ow0KICAgICAgICB9DQogICAgICAgICRxdWFsaXR5ID0gJHRoaXMtPl9nZXRPcHRpb24oJ3F1YWxpdHknLCAkb3B0aW9ucywgNzUpOw0KICAgICAgICAkdGhpcy0+aW1hZ2ljay0+c2V0SW1hZ2VDb21wcmVzc2lvbigkcXVhbGl0eSk7DQoNCiAgICAgICAgaWYgKCR0eXBlICYmIHN0cmNhc2VjbXAoJHR5cGUsICR0aGlzLT50eXBlKSkgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+aW1hZ2ljay0+c2V0SW1hZ2VGb3JtYXQoJHR5cGUpOw0KDQogICAgICAgICAgICB9IGNhdGNoIChJbWFnaWNrRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yYWlzZUVycm9yKCdDb3VsZCBub3Qgc2F2ZSBpbWFnZSB0byBmaWxlIChjb252ZXJzaW9uIGZhaWxlZCkuJywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfRkFJTEVEKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJGltYWdlID0gJHRoaXMtPmltYWdpY2stPmdldEltYWdlQmxvYigpOw0KDQogICAgICAgIH0gY2F0Y2ggKEltYWdpY2tFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmFpc2VFcnJvcignQ291bGQgbm90IGRpc3BsYXkgaW1hZ2UuJywNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfSU8pOw0KICAgICAgICB9DQogICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiAnIC4gJHRoaXMtPmdldE1pbWVUeXBlKCR0eXBlKSk7DQogICAgICAgIGVjaG8gJGltYWdlOw0KICAgICAgICAkdGhpcy0+ZnJlZSgpOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBBZGp1c3RzIHRoZSBpbWFnZSBnYW1tYQ0KICAgICAqDQogICAgICogQHBhcmFtIGZsb2F0ICRvdXRwdXRnYW1tYQ0KICAgICAqIEByZXR1cm4gYm9vbHxQRUFSX0Vycm9yIFRSVUUgb3IgYSBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICovDQogICAgZnVuY3Rpb24gZ2FtbWEoJG91dHB1dGdhbW1hID0gMS4wKSB7DQogICAgICAgIGlmICgkb3V0cHV0Z2FtbWEgIT0gMS4wKSB7DQogICAgICAgICAgICAkdGhpcy0+aW1hZ2ljay0+c2V0SW1hZ2VHYW1tYSgkb3V0cHV0Z2FtbWEpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENyb3BzIHRoZSBpbWFnZQ0KICAgICAqDQogICAgICogQHBhcmFtIGludGVnZXIgJHdpZHRoIENyb3BwZWQgaW1hZ2Ugd2lkdGgNCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkaGVpZ2h0IENyb3BwZWQgaW1hZ2UgaGVpZ2h0DQogICAgICogQHBhcmFtIGludGVnZXIgJHggWC1jb29yZGluYXRlIHRvIGNyb3AgYXQNCiAgICAgKiBAcGFyYW0gaW50ZWdlciAkeSBZLWNvb3JkaW5hdGUgdG8gY3JvcCBhdA0KICAgICAqDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvciBhIFBFQVJfRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBjcm9wKCR3aWR0aCwgJGhlaWdodCwgJHggPSAwLCAkeSA9IDApDQogICAgew0KICAgICAgICAvLyBTYW5pdHkgY2hlY2sNCiAgICAgICAgaWYgKCEkdGhpcy0+aW50ZXJzZWN0cygkd2lkdGgsICRoZWlnaHQsICR4LCAkeSkpIHsNCiAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdOb3RoaW5nIHRvIGNyb3AnLCBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfT1VUT0ZCT1VORCk7DQogICAgICAgIH0NCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICR0aGlzLT5pbWFnaWNrLT5jcm9wSW1hZ2UoJHdpZHRoLCAkaGVpZ2h0LCAkeCwgJHkpOw0KDQogICAgICAgIH0gY2F0Y2ggKEltYWdpY2tFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmFpc2VFcnJvcignQ291bGQgbm90IGNyb3AgaW1hZ2UnLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9GQUlMRUQpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gSSB0aGluayB0aGF0IHNldHRpbmcgaW1nX3gveSBpcyB3cm9uZywgYnV0IHNjYWxlQnlMZW5ndGgoKSAmIGZyaWVuZHMNCiAgICAgICAgLy8gbWVzcyB1cCB0aGUgYXNwZWN0IGFmdGVyIGEgY3JvcCBvdGhlcndpc2UuDQogICAgICAgICR0aGlzLT5uZXdfeCA9ICR3aWR0aDsNCiAgICAgICAgJHRoaXMtPm5ld195ID0gJGhlaWdodDsNCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBDb252ZXJ0cyB0aGUgaW1hZ2UgdG8gZ3JleXNjYWxlDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9yIGEgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGdyZXlzY2FsZSgpIHsNCiAgICAgICAgJHRoaXMtPmltYWdpY2stPnNldEltYWdlVHlwZShJbWFnaWNrOjpJTUdUWVBFX0dSQVlTQ0FMRSk7DQogICAgICAgIC8qJHRoaXMtPmltYWdpY2stPnNldEltYWdlQ29sb3JTcGFjZShJbWFnaWNrOjpDT0xPUlNQQUNFX0dSQVkpOw0KICAgICAgICAkdGhpcy0+aW1hZ2ljay0+c2V0SW1hZ2VEZXB0aCg4KTsNCiAgICAgICAgJHRoaXMtPmltYWdpY2stPnNlcGFyYXRlSW1hZ2VDaGFubmVsKEltYWdpY2s6OkNIQU5ORUxfR1JBWSk7DQogICAgICAgICR0aGlzLT5pbWFnaWNrLT5zZXRJbWFnZUNoYW5uZWxEZXB0aChJbWFnaWNrOjpDSEFOTkVMX0dSQVksIDgpOyovDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEhvcml6b250YWwgbWlycm9yaW5nDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9yIGEgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIG1pcnJvcigpDQogICAgew0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJHRoaXMtPmltYWdpY2stPmZsb3BJbWFnZSgpOw0KICAgICAgICB9IGNhdGNoIChJbWFnaWNrRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJhaXNlRXJyb3IoJ0NvdWxkIG5vdCBtaXJyb3IgdGhlIGltYWdlLicsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX0ZBSUxFRCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogVmVydGljYWwgbWlycm9yaW5nDQogICAgICoNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9yIGEgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGZsaXAoKQ0KICAgIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICR0aGlzLT5pbWFnaWNrLT5mbGlwSW1hZ2UoKTsNCg0KICAgICAgICB9IGNhdGNoIChJbWFnaWNrRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJhaXNlRXJyb3IoJ0NvdWxkIG5vdCBmbGlwIHRoZSBpbWFnZS4nLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9GQUlMRUQpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERlc3Ryb3kgaW1hZ2UgaGFuZGxlDQogICAgICoNCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGZyZWUoKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5pbWFnaWNrKSkgew0KICAgICAgICAgICAgJHRoaXMtPmltYWdpY2stPmRlc3Ryb3koKTsNCiAgICAgICAgICAgICR0aGlzLT5pbWFnaWNrID0gbnVsbDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFJhaXNlRXJyb3IgTWV0aG9kIC0gc2hvd3MgaW1hZ2ljayBSYXcgZXJyb3JzLg0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBtZXNzYWdlID0gcHJlZml4ZWQgbWVzc2FnZS4uDQogICAgICogQHBhcmFtIGludCAgICAkY29kZSBlcnJvciBjb2RlDQogICAgICogQHJldHVybiBQRUFSIGVycm9yIG9iamVjdA0KICAgICAqIEBhY2Nlc3MgcHJvdGVjdGVkDQogICAgICovDQogICAgZnVuY3Rpb24gcmFpc2VFcnJvcigkbWVzc2FnZSwgJGNvZGUgPSAwKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJG1lc3NhZ2UsICRjb2RlKTsNCiAgICB9DQp9]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/Imlib.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLy8gfCBQSFAgVmVyc2lvbiA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi8vIHwgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDMgVGhlIFBIUCBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQovLyB8IFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB2ZXJzaW9uIDIuMDIgb2YgdGhlIFBIUCBsaWNlbnNlLCAgICAgIHwNCi8vIHwgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UsIGFuZCBpcyAgICAgICAgfA0KLy8gfCBhdmFpbGFibGUgYXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQovLyB8IGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzJfMDIudHh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCi8vIHwgSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIFBIUCBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvICAgfA0KLy8gfCBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGEgbm90ZSB0byAgICAgICAgICB8DQovLyB8IGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LiAgICAgICAgICAgICAgIHwNCi8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KLy8gfCBBdXRob3JzOiBKYXNvbiBSdXN0IDxqcnVzdEBydXN0eXBhcnRzLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICB8DQovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCi8vICRJZDogSW1saWIucGhwIDI1ODgyNSAyMDA4LTA0LTMwIDIzOjAwOjEzWiBjd2Vpc2tlICQNCi8vIHt7eyByZXF1aXJlcw0KDQpyZXF1aXJlX29uY2UgJ0ltYWdlL1RyYW5zZm9ybS5waHAnOw0KDQovLyB9fX0NCi8vIHt7eyBleGFtcGxlIHVzYWdlDQoNCi8vICAgICRpbWcgICAgPSBuZXcgSW1hZ2VfVHJhbnNmb3JtOjpmYWN0b3J5KCdJbWxpYicpOw0KLy8gICAgJGFuZ2xlICA9IC05MDsNCi8vICAgICRpbWctPmxvYWQoJ3Rlc3QucG5nJyk7DQovLyAgICAkaW1nLT5yb3RhdGUoJGFuZ2xlKTsNCi8vICAgICRpbWctPmFkZFRleHQoYXJyYXkoJ3RleHQnPT4iUm90YXRpb24gJGFuZ2xlIiwneCc9PjAsJ3knPT4xMDAsJ2ZvbnQnPT4nYXJpYWwudHRmJywnY29sb3InPT4nI2ZmZmZmZicpKTsNCi8vICAgICRpbWctPmRpc3BsYXkoKTsNCg0KLy8gfX19DQovLyB7e3sgY2xhc3MgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9JbWxpYg0KDQovKioNCiAqIFBlcmZvcm1zIGltYWdlIG1hbmlwdWxhdGlvbiB3aXRoIHRoZSBpbWxpYiBsaWJyYXJ5Lg0KICoNCiAqIEBzZWUgaHR0cDovL21tY2MuY3gvcGhwX2ltbGliL2luZGV4LnBocA0KICogQHZlcnNpb24gUmV2aXNpb246IDEuMA0KICogQGF1dGhvciAgSmFzb24gUnVzdCA8anJ1c3RAcnVzdHlwYXJ0cy5jb20+DQogKiBAcGFja2FnZSBJbWFnZV9UcmFuc2Zvcm0NCiAqLw0KDQovLyB9fX0NCmNsYXNzIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfSW1saWIgZXh0ZW5kcyBJbWFnZV9UcmFuc2Zvcm0gew0KICAgIC8vIHt7eyBwcm9wZXJ0aWVzDQoNCiAgICAvKioNCiAgICAgKiBIb2xkcyB0aGUgaW1hZ2UgZmlsZSBmb3IgbWFuaXB1bGF0aW9uDQogICAgICovDQogICAgdmFyICRpbWFnZUhhbmRsZSA9ICcnOw0KDQogICAgLyoqDQogICAgICogSG9sZHMgdGhlIG9yaWdpbmFsIGltYWdlIGZpbGUNCiAgICAgKi8NCiAgICB2YXIgJG9sZEhhbmRsZSA9ICcnOw0KDQogICAgLy8gfX19DQogICAgLy8ge3t7IGNvbnN0cnVjdG9yDQoNCiAgICAvKioNCiAgICAgKiBDaGVjayBzZXR0aW5ncw0KICAgICAqDQogICAgICogQHNlZSBfX2NvbnN0cnVjdCgpDQogICAgICovDQogICAgZnVuY3Rpb24gSW1hZ2VfVHJhbnNmb3JtX0ltbGliKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5fX2NvbnN0cnVjdCgpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENoZWNrIHNldHRpbmdzDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIHRydWUgb3IgIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKg0KICAgICAqIEBzZWUgUEVBUjo6aXNFcnJvcigpDQogICAgICovDQogICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICAgIHsNCiAgICAgICAgaWYgKCFQRUFSOjpsb2FkRXh0ZW5zaW9uKCdpbWxpYicpKSB7DQogICAgICAgICAgICAkdGhpcy0+aXNFcnJvcigNCiAgICAgICAgICAgICAgICBQRUFSOjpyYWlzZUVycm9yKA0KICAgICAgICAgICAgICAgICAgICAnQ291bGRuXCd0IGZpbmQgdGhlIGltbGliIGV4dGVuc2lvbi4nLA0KICAgICAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQNCiAgICAgICAgICAgICAgICApDQogICAgICAgICAgICApOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gfX19DQogICAgLy8ge3t7IGxvYWQoKQ0KDQogICAgLyoqDQogICAgICogTG9hZCBpbWFnZQ0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyBmaWxlbmFtZQ0KICAgICAqDQogICAgICogQHJldHVybiBtaXhlZCBUUlVFIG9yIGEgUEVBUiBlcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGxvYWQoJGltYWdlKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmltYWdlID0gJGltYWdlOw0KICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgPSBpbWxpYl9sb2FkX2ltYWdlKCR0aGlzLT5pbWFnZSk7DQogICAgICAgICRyZXN1bHQgPSYgJHRoaXMtPl9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOw0KICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcmVzdWx0KSkgew0KICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvLyB9fX0NCiAgICAvLyB7e3sgYWRkVGV4dCgpDQoNCiAgICAvKioNCiAgICAgKiBBZGRzIHRleHQgdG8gdGhlIGltYWdlLiAgTm90ZSB0aGF0IHRoZSBhbmdsZSBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcNCiAgICAgKiBjb25zdGFudHM6ICBJTUxJQl9URVhUX1RPX1JJR0hULCBJTUxJQl9URVhUX1RPX0xFRlQsIElNTElCX1RFWFRfVE9fRE9XTiwNCiAgICAgKiBJTUxJQl9URVhUX1RPX1VQLCBJTUxJQl9URVhUX1RPX0FOR0xFDQogICAgICoNCiAgICAgKiBAcGFyYW0gICBhcnJheSAgIG9wdGlvbnMgICAgIEFycmF5IGNvbnRhaW5zIG9wdGlvbnMNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KA0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0JyAgVGhlIHN0cmluZyB0byBkcmF3DQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gnICAgICBIb3Jpem9udGFsIHBvc2l0aW9uDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3knICAgICBWZXJ0aWNhbCBQb3NpdGlvbg0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcicgRm9udCBjb2xvcg0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250JyAgRm9udCB0byBiZSB1c2VkDQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemUnICBTaXplIG9mIHRoZSBmb250cyBpbiBwaXhlbA0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZScgQSBpbWxpYiBkaXJlY3Rpb24gY29uc3RhbnQNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgKg0KICAgICAqIEByZXR1cm4gVFJVRSBvciBQRUFSIEVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEBzZWUgUEVBUjo6aXNFcnJvcigpDQogICAgICovDQogICAgZnVuY3Rpb24gYWRkVGV4dCgkcGFyYW1zKQ0KICAgIHsNCiAgICAgICAgJGRlZmF1bHRfcGFyYW1zID0gYXJyYXkoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0JyA9PiAnVGhpcyBpcyBUZXh0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3gnID0+IDEwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneScgPT4gMjAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcicgPT4gYXJyYXkoMjU1LDAsMCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250JyA9PiAnQXJpYWwudHRmJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemUnID0+ICcxMicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmdsZScgPT4gSU1MSUJfVEVYVF9UT19SSUdIVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgJHBhcmFtcyA9IGFycmF5X21lcmdlKCRkZWZhdWx0X3BhcmFtcywgJHBhcmFtcyk7DQogICAgICAgIGV4dHJhY3QoJHBhcmFtcyk7DQoNCiAgICAgICAgaWYgKCFpc19hcnJheSgkY29sb3IpKXsNCiAgICAgICAgICAgIGlmICgkY29sb3JbMF0gPT0gJyMnKXsNCiAgICAgICAgICAgICAgICAkY29sb3IgPSAkdGhpcy0+Y29sb3JoZXgyY29sb3JhcnJheSgkY29sb3IpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBpbmNsdWRlX29uY2UgJ0ltYWdlL1RyYW5zZm9ybS9Ecml2ZXIvQ29sb3JzRGVmcy5waHAnOw0KICAgICAgICAgICAgICAgICRjb2xvciA9IGlzc2V0KCRjb2xvcm5hbWVzWyRjb2xvcl0pID8gJGNvbG9ybmFtZXNbJGNvbG9yXSA6IGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgJGZvbnRSZXNvdXJjZSA9IGltbGliX2xvYWRfZm9udCgkZm9udCAuICcvJyAuICRzaXplKTsNCiAgICAgICAgaW1saWJfdGV4dF9kcmF3KCR0aGlzLT5pbWFnZUhhbmRsZSwgJGZvbnRSZXNvdXJjZSwgJHgsICR5LCAkdGV4dCwgJGFuZ2xlLCAkY29sb3JbMF0sICRjb2xvclsxXSwgJGNvbG9yWzJdLCAyNTUpOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvLyB9fX0NCiAgICAvLyB7e3sgcm90YXRlKCkNCg0KICAgIC8qKg0KICAgICAqIFJvdGF0ZSBpbWFnZSBieSB0aGUgZ2l2ZW4gYW5nbGUNCiAgICAgKg0KICAgICAqIEBwYXJhbSBpbnQgICAgICAgJGFuZ2xlICAgICAgUm90YXRpb24gYW5nbGUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gVFJVRSBvciBQRUFSIEVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHJvdGF0ZSgkYW5nbGUpDQogICAgew0KICAgICAgICAkdGhpcy0+b2xkSGFuZGxlID0gJHRoaXMtPmltYWdlSGFuZGxlOw0KICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgPSBpbWxpYl9jcmVhdGVfcm90YXRlZF9pbWFnZSgkdGhpcy0+aW1hZ2VIYW5kbGUsICRhbmdsZSk7DQogICAgICAgICRuZXdfeCA9IGltbGliX2ltYWdlX2dldF93aWR0aCgkdGhpcy0+aW1hZ2VIYW5kbGUpOw0KICAgICAgICAkbmV3X3kgPSBpbWxpYl9pbWFnZV9nZXRfaGVpZ2h0KCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgIC8vIHdoZW4gcm90YXRpbmcgaXQgY3JlYXRlcyBhIGJpZ2dlciBwaWN0dXJlIHRoYW4gYmVmb3JlIHNvIHRoYXQgaXQgY2FuIHJvdGF0ZSBhdCBhbnkgYW5nbGUNCiAgICAgICAgLy8gc28gZm9yIHJpZ2h0IGFuZ2xlcyB3ZSBjcm9wIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNpemUNCiAgICAgICAgaWYgKCRhbmdsZSAlIDkwID09IDApIHsNCiAgICAgICAgICAgIGlmIChhYnMoJGFuZ2xlKSA9PSA5MCB8fCAkYW5nbGUgPT0gMjcwKSB7DQogICAgICAgICAgICAgICAgJHlfcG9zID0gKCRuZXdfeCAtICR0aGlzLT5pbWdfeCkgLyAyOw0KICAgICAgICAgICAgICAgICR4X3BvcyA9ICgkbmV3X3kgLSAkdGhpcy0+aW1nX3kpIC8gMjsNCiAgICAgICAgICAgICAgICAkeV9wb3MrKzsNCiAgICAgICAgICAgICAgICAkeF9wb3MrKzsNCiAgICAgICAgICAgICAgICAkdGhpcy0+Y3JvcCgkdGhpcy0+aW1nX3ksICR0aGlzLT5pbWdfeCwgJHhfcG9zLCAkeV9wb3MpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkeF9wb3MgPSAoJG5ld194IC0gJHRoaXMtPmltZ194KSAvIDI7DQogICAgICAgICAgICAgICAgJHlfcG9zID0gKCRuZXdfeSAtICR0aGlzLT5pbWdfeSkgLyAyOw0KICAgICAgICAgICAgICAgICR0aGlzLT5jcm9wKCR0aGlzLT5pbWdfeCwgJHRoaXMtPmltZ195LCAkeF9wb3MsICR5X3Bvcyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdGhpcy0+aW1nX3ggPSAkbmV3X3g7DQogICAgICAgICAgICAkdGhpcy0+aW1nX3kgPSAkbmV3X3k7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvLyB9fX0NCiAgICAvLyB7e3sgY3JvcCgpDQoNCiAgICAvKioNCiAgICAgKiBDcm9wcyB0aGUgY3VycmVudCBpbWFnZSB0byBhIHNwZWNpZmllZCBoZWlnaHQgYW5kIHdpZHRoDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICRpbl9jcm9wV2lkdGggVGhlIHdpZHRoIG9mIHRoZSBuZXcgaW1hZ2UNCiAgICAgKiBAcGFyYW0gaW50ICRpbl9jcm9wSGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIG5ldyBpbWFnZQ0KICAgICAqIEBwYXJhbSBpbnQgJGluX2Nyb3BYIFRoZSBYIGNvb3JkaW5hdGUgb24gdGhlIGltYWdlIHRvIHN0YXJ0IHRoZSBjcm9wDQogICAgICogQHBhcmFtIGludCAkaW5fY3JvcFkgVGhlIFkgY29vcmRpbmF0ZSBvbiB0aGUgaW1hZ2UgdG8gc3RhcnQgdGhlIGNyb3ANCiAgICAgKg0KICAgICAqIEBhY2Nlc3MgcHVibGljDQogICAgICogQHJldHVybiBUUlVFIG9yIFBFQVIgRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICovDQogICAgZnVuY3Rpb24gY3JvcCgkaW5fY3JvcFdpZHRoLCAkaW5fY3JvcEhlaWdodCwgJGluX2Nyb3BYLCAkaW5fY3JvcFkpDQogICAgew0KICAgICAgICAvLyBTYW5pdHkgY2hlY2sNCiAgICAgICAgaWYgKCEkdGhpcy0+X2ludGVyc2VjdHMoJGluX2Nyb3BXaWR0aCwgJGluX2Nyb3BIZWlnaHQsICRpbl9jcm9wWCwgJGluX2Nyb3BZKSkgew0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ05vdGhpbmcgdG8gY3JvcCcsIElNQUdFX1RSQU5TRk9STV9FUlJPUl9PVVRPRkJPVU5EKTsNCiAgICAgICAgfQ0KICAgICAgICAkdGhpcy0+b2xkSGFuZGxlID0gJHRoaXMtPmltYWdlSGFuZGxlOw0KICAgICAgICAkdGhpcy0+aW1hZ2VIYW5kbGUgPSBpbWxpYl9jcmVhdGVfY3JvcHBlZF9pbWFnZSgkdGhpcy0+aW1hZ2VIYW5kbGUsICRpbl9jcm9wWCwgJGluX2Nyb3BZLCAkaW5fY3JvcFdpZHRoLCAkaW5fY3JvcEhlaWdodCk7DQogICAgICAgICR0aGlzLT5pbWdfeCA9ICRpbl9jcm9wV2lkdGg7DQogICAgICAgICR0aGlzLT5pbWdfeSA9ICRpbl9jcm9wSGVpZ2h0Ow0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvLyB9fX0NCiAgICAvLyB7e3sgc2F2ZSgpDQoNCiAgICAvKioNCiAgICAgKiBTYXZlIHRoZSBpbWFnZSBmaWxlLiAgRGV0ZXJtaW5lcyB3aGF0IHR5cGUgb2YgaW1hZ2UgdG8gc2F2ZSBiYXNlZCBvbiBleHRlbnNpb24uDQogICAgICoNCiAgICAgKiBAcGFyYW0gJGZpbGVuYW1lIHN0cmluZyAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd3JpdGUgdG8NCiAgICAgKiBAcGFyYW0gJHR5cGUgICAgIHN0cmluZyAgKG9wdGlvbmFsKSBkZWZpbmUgdGhlIG91dHB1dCBmb3JtYXQsIGRlZmF1bHQNCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdGhlIGN1cnJlbnQgdXNlZCBmb3JtYXQNCiAgICAgKiBAcGFyYW0gJHF1YWxpdHkgIGludCAgICAgKG9wdGlvbmFsKSBvdXRwdXQgRFBJLCBkZWZhdWx0IGlzIDc1DQogICAgICoNCiAgICAgKiBAcmV0dXJuIFRSVUUgb24gc3VjY2VzcyBvciBQRUFSIEVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lLCAkdHlwZSA9ICcnLCAkcXVhbGl0eSA9IDc1KQ0KICAgIHsNCiAgICAgICAgaWYgKCFpc19yZXNvdXJjZSgkdGhpcy0+aW1hZ2VIYW5kbGUpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignSW52YWxpZCBpbWFnZScsIHRydWUpOw0KICAgICAgICB9DQoNCiAgICAgICAgJGVyciA9IDA7DQogICAgICAgICR0eXBlICAgID0gKCR0eXBlID09ICcnKSA/ICR0aGlzLT50eXBlIDogJHR5cGU7DQogICAgICAgICRxdWFsaXR5ID0gKGlzX251bGwoJHF1YWxpdHkpKSA/ICR0aGlzLT5fb3B0aW9uc1sncXVhbGl0eSddIDogJHF1YWxpdHk7DQogICAgICAgIGltbGliX2ltYWdlX3NldF9mb3JtYXQoJHRoaXMtPmltYWdlSGFuZGxlLCAkdHlwZSk7DQogICAgICAgICRyZXR1cm4gPSBpbWxpYl9zYXZlX2ltYWdlKCR0aGlzLT5pbWFnZUhhbmRsZSwgJGZpbGVuYW1lLCAkZXJyLCAkcXVhbGl0eSk7DQogICAgICAgICR0aGlzLT5pbWFnZUhhbmRsZSA9ICR0aGlzLT5vbGRIYW5kbGU7DQogICAgICAgICR0aGlzLT5yZXNpemVkID0gZmFsc2U7DQogICAgICAgIGlmICghJHJldHVybikgew0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ0NvdWxkblwndCBzYXZlIGltYWdlLiBSZWFzb246ICcgLiAkZXJyLCB0cnVlKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvLyB9fX0NCiAgICAvLyB7e3sgZGlzcGxheSgpDQoNCiAgICAvKioNCiAgICAgKiBEaXNwbGF5IGltYWdlIHdpdGhvdXQgc2F2aW5nIGFuZCBsb3NlIGNoYW5nZXMNCiAgICAgKg0KICAgICAqIFRoaXMgbWV0aG9kIGFkZHMgdGhlIENvbnRlbnQtdHlwZSBIVFRQIGhlYWRlcg0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkdHlwZSAob3B0aW9uYWwpIChKUEcsUE5HLi4uKTsNCiAgICAgKiBAcGFyYW0gaW50ICRxdWFsaXR5IChvcHRpb25hbCkgNzUNCiAgICAgKg0KICAgICAqIEByZXR1cm4gVFJVRSBvbiBzdWNjZXNzIG9yIFBFQVIgRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICovDQogICAgZnVuY3Rpb24gZGlzcGxheSgkdHlwZSA9ICcnLCAkcXVhbGl0eSA9IG51bGwpDQogICAgew0KICAgICAgICBpZiAoIWlzX3Jlc291cmNlKCR0aGlzLT5pbWFnZUhhbmRsZSkpIHsNCiAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdJbnZhbGlkIGltYWdlJywgdHJ1ZSk7DQogICAgICAgIH0NCg0KICAgICAgICAkdHlwZSAgICA9ICgkdHlwZSA9PSAnJykgPyAkdGhpcy0+dHlwZSA6ICR0eXBlOw0KICAgICAgICAkcXVhbGl0eSA9IChpc19udWxsKCRxdWFsaXR5KSkgPyAkdGhpcy0+X29wdGlvbnNbJ3F1YWxpdHknXSA6ICRxdWFsaXR5Ow0KICAgICAgICBpbWxpYl9pbWFnZV9zZXRfZm9ybWF0KCR0aGlzLT5pbWFnZUhhbmRsZSwgJHR5cGUpOw0KICAgICAgICAkZXJyID0gMDsNCiAgICAgICAgaGVhZGVyKCdDb250ZW50LXR5cGU6ICcgLiAkdGhpcy0+Z2V0TWltZVR5cGUoJHR5cGUpKTsNCiAgICAgICAgJHJldHVybiA9IGltbGliX2R1bXBfaW1hZ2UoJHRoaXMtPmltYWdlSGFuZGxlLCAkZXJyLCAkcXVhbGl0eSk7DQogICAgICAgICR0aGlzLT5pbWFnZUhhbmRsZSA9ICR0aGlzLT5vbGRIYW5kbGU7DQogICAgICAgICR0aGlzLT5yZXNpemVkID0gZmFsc2U7DQogICAgICAgIGltbGliX2ZyZWVfaW1hZ2UoJHRoaXMtPm9sZEhhbmRsZSk7DQogICAgICAgIGlmICghJHJldHVybikgew0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ0NvdWxkblwndCBvdXRwdXQgaW1hZ2UuIFJlYXNvbjogJyAuICRlcnIsIHRydWUpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8vIH19fQ0KICAgIC8vIHt7eyBmcmVlKCkNCg0KICAgIC8qKg0KICAgICAqIERlc3Ryb3kgaW1hZ2UgaGFuZGxlDQogICAgICoNCiAgICAgKiBAcmV0dXJuIHZvaWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBmcmVlKCkNCiAgICB7DQogICAgICAgIGlmIChpc19yZXNvdXJjZSgkdGhpcy0+aW1hZ2VIYW5kbGUpKSB7DQogICAgICAgICAgICBpbWxpYl9mcmVlX2ltYWdlKCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyB9fX0NCiAgICAvLyB7e3sgX3Jlc2l6ZSgpDQoNCiAgICAvKioNCiAgICAgKiBSZXNpemUgdGhlIGltYWdlLg0KICAgICAqDQogICAgICogQGFjY2VzcyBwcml2YXRlDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICAgJG5ld194ICAgTmV3IHdpZHRoDQogICAgICogQHBhcmFtIGludCAgICRuZXdfeSAgIE5ldyBoZWlnaHQNCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9wdGlvbnMgT3B0aW9uYWwgcGFyYW1ldGVycw0KICAgICAqDQogICAgICogQHJldHVybiBUUlVFIG9uIHN1Y2Nlc3Mgb3IgUEVBUiBFcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9yZXNpemUoJG5ld194LCAkbmV3X3ksICRvcHRpb25zID0gbnVsbCkNCiAgICB7DQogICAgICAgIGlmICgkdGhpcy0+cmVzaXplZCA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ1lvdSBoYXZlIGFscmVhZHkgcmVzaXplZCB0aGUgaW1hZ2Ugd2l0aG91dCBzYXZpbmcgaXQuICBZb3VyIHByZXZpb3VzIHJlc2l6aW5nIHdpbGwgYmUgb3ZlcndyaXR0ZW4nLCBudWxsLCBQRUFSX0VSUk9SX1RSSUdHRVIsIEVfVVNFUl9OT1RJQ0UpOw0KICAgICAgICB9DQoNCiAgICAgICAgJHRoaXMtPm9sZEhhbmRsZSA9ICR0aGlzLT5pbWFnZUhhbmRsZTsNCiAgICAgICAgJHRoaXMtPmltYWdlSGFuZGxlID0gaW1saWJfY3JlYXRlX3NjYWxlZF9pbWFnZSgkdGhpcy0+aW1hZ2VIYW5kbGUsICRuZXdfeCwgJG5ld195KTsNCiAgICAgICAgJHRoaXMtPmltZ194ID0gJG5ld194Ow0KICAgICAgICAkdGhpcy0+aW1nX3kgPSAkbmV3X3k7DQogICAgICAgICR0aGlzLT5yZXNpemVkID0gdHJ1ZTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLy8gfX19DQogICAgLy8ge3t7IF9nZXRfaW1hZ2VfZGV0YWlscygpDQoNCiAgICAvKioNCiAgICAgKiBHZXRzIHRoZSBpbWFnZSBkZXRhaWxzDQogICAgICoNCiAgICAgKiBAYWNjZXNzIHByaXZhdGUNCiAgICAgKiBAcmV0dXJuIFRSVUUgb24gc3VjY2VzcyBvciBQRUFSIEVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9nZXRfaW1hZ2VfZGV0YWlscygpDQogICAgew0KICAgICAgICAkdGhpcy0+aW1nX3ggPSBpbWxpYl9pbWFnZV9nZXRfd2lkdGgoJHRoaXMtPmltYWdlSGFuZGxlKTsNCiAgICAgICAgJHRoaXMtPmltZ195ID0gaW1saWJfaW1hZ2VfZ2V0X2hlaWdodCgkdGhpcy0+aW1hZ2VIYW5kbGUpOw0KICAgICAgICAkdGhpcy0+dHlwZSA9IGltbGliX2ltYWdlX2Zvcm1hdCgkdGhpcy0+aW1hZ2VIYW5kbGUpOw0KICAgICAgICAkdGhpcy0+dHlwZSA9ICgkdGhpcy0+dHlwZSA9PSAnJykgPyAncG5nJyA6ICR0aGlzLT50eXBlOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvLyB9fX0NCg0KICAgIC8qKg0KICAgICAqIEhvcml6b250YWwgbWlycm9yaW5nDQogICAgICoNCiAgICAgKiBAcmV0dXJuIFRSVUUgb24gc3VjY2VzcywgUEVBUiBFcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKi8NCiAgICBmdW5jdGlvbiBtaXJyb3IoKQ0KICAgIHsNCiAgICAgICAgaW1saWJfaW1hZ2VfZmxpcF9ob3Jpem9udGFsKCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFZlcnRpY2FsIG1pcnJvcmluZw0KICAgICAqDQogICAgICogQHJldHVybiBUUlVFIG9uIHN1Y2Nlc3MsIFBFQVIgRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICovDQogICAgZnVuY3Rpb24gZmxpcCgpDQogICAgew0KICAgICAgICBpbWxpYl9pbWFnZV9mbGlwX3ZlcnRpY2FsKCR0aGlzLT5pbWFnZUhhbmRsZSk7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/Driver/NetPBM.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyogdmltOiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9NCBzaGlmdHdpZHRoPTQ6ICovDQoNCi8qKg0KICogTmV0UEJNIGltcGxlbWVudGF0aW9uIGZvciBJbWFnZV9UcmFuc2Zvcm0gcGFja2FnZQ0KICoNCiAqIFBIUCB2ZXJzaW9ucyA0IGFuZCA1DQogKg0KICogTElDRU5TRTogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHZlcnNpb24gMy4wIG9mIHRoZSBQSFAgbGljZW5zZQ0KICogdGhhdCBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhlIGZvbGxvd2luZyBVUkk6DQogKiBodHRwOi8vd3d3LnBocC5uZXQvbGljZW5zZS8zXzAudHh0LiAgSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YNCiAqIHRoZSBQSFAgTGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0byBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd2ViLCBwbGVhc2UNCiAqIHNlbmQgYSBub3RlIHRvIGxpY2Vuc2VAcGhwLm5ldCBzbyB3ZSBjYW4gbWFpbCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5Lg0KICoNCiAqIEBjYXRlZ29yeSAgIEltYWdlDQogKiBAcGFja2FnZSAgICBJbWFnZV9UcmFuc2Zvcm0NCiAqIEBhdXRob3IgICAgIFBldGVyIEJvd3llciA8cGV0ZXJAbWFwbGVkZXNpZ24uY28udWs+DQogKiBAYXV0aG9yICAgICBQaGlsaXBwZSBKYXVzaW9ucyA8UGhpbGlwcGUuSmF1c2lvbnNAMTFhYmFjdXMuY29tPg0KICogQGNvcHlyaWdodCAgMjAwMi0yMDA1IFRoZSBQSFAgR3JvdXANCiAqIEBsaWNlbnNlICAgIGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQgIFBIUCBMaWNlbnNlIDMuMA0KICogQHZlcnNpb24gICAgQ1ZTOiAkSWQ6IE5ldFBCTS5waHAgMjM2NTI3IDIwMDctMDUtMjggMTY6MzY6MDlaIGR1ZnV6ICQNCiAqIEBsaW5rICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9JbWFnZV9UcmFuc2Zvcm0NCiAqLw0KDQpyZXF1aXJlX29uY2UgJ0ltYWdlL1RyYW5zZm9ybS5waHAnOw0KcmVxdWlyZV9vbmNlICdTeXN0ZW0ucGhwJzsNCg0KLyoqDQogKiBOZXRQQk0gaW1wbGVtZW50YXRpb24gZm9yIEltYWdlX1RyYW5zZm9ybSBwYWNrYWdlDQogKg0KICogQGNhdGVnb3J5ICAgSW1hZ2UNCiAqIEBwYWNrYWdlICAgIEltYWdlX1RyYW5zZm9ybQ0KICogQHN1YnBhY2thZ2UgSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9OZXRQQk0NCiAqIEBhdXRob3IgICAgIFBldGVyIEJvd3llciA8cGV0ZXJAbWFwbGVkZXNpZ24uY28udWs+DQogKiBAYXV0aG9yICAgICBQaGlsaXBwZSBKYXVzaW9ucyA8UGhpbGlwcGUuSmF1c2lvbnNAMTFhYmFjdXMuY29tPg0KICogQGNvcHlyaWdodCAgMjAwMi0yMDA1IFRoZSBQSFAgR3JvdXANCiAqIEBsaWNlbnNlICAgIGh0dHA6Ly93d3cucGhwLm5ldC9saWNlbnNlLzNfMC50eHQgIFBIUCBMaWNlbnNlIDMuMA0KICogQHZlcnNpb24gICAgUmVsZWFzZTogQHBhY2thZ2VfdmVyc2lvbkANCiAqIEBsaW5rICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGFja2FnZS9JbWFnZV9UcmFuc2Zvcm0NCiAqIEBsaW5rICAgICAgIGh0dHA6Ly9uZXRwYm0uc291cmNlZm9yZ2UubmV0Lw0KICovDQpjbGFzcyBJbWFnZV9UcmFuc2Zvcm1fRHJpdmVyX05ldFBCTSBleHRlbmRzIEltYWdlX1RyYW5zZm9ybQ0Kew0KICAgIC8qKg0KICAgICAqIGFzc29jaWF0aXZlIGFycmF5IGNvbW1hbmRzIHRvIGJlIGV4ZWN1dGVkDQogICAgICogQHZhciBhcnJheQ0KICAgICAqLw0KICAgIHZhciAkY29tbWFuZCA9IGFycmF5KCk7DQoNCiAgICAvKioNCiAgICAgKiBDbGFzcyBDb25zdHJ1Y3Rvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIEltYWdlX1RyYW5zZm9ybV9Ecml2ZXJfTmV0UEJNKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5fX2NvbnN0cnVjdCgpOw0KDQogICAgfSAvLyBFbmQgZnVuY3Rpb24gSW1hZ2VfTmV0UEJNDQoNCiAgICAvKioNCiAgICAgKiBDbGFzcyBDb25zdHJ1Y3Rvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgICB7DQogICAgICAgIGlmICghZGVmaW5lZCgnSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRIJykpIHsNCiAgICAgICAgICAgICRwYXRoID0gZGlybmFtZShTeXN0ZW06OndoaWNoKCdwbm1zY2FsZScpKQ0KICAgICAgICAgICAgICAgICAgICAuIERJUkVDVE9SWV9TRVBBUkFUT1I7DQogICAgICAgICAgICBkZWZpbmUoJ0lNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCcsICRwYXRoKTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIVN5c3RlbTo6d2hpY2goSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRIIC4gJ3BubXNjYWxlJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICgoT1NfV0lORE9XUykgPyAnLmV4ZScgOiAnJykpKSB7DQogICAgICAgICAgICAkdGhpcy0+aXNFcnJvcihQRUFSOjpyYWlzZUVycm9yKCdDb3VsZG5cJ3QgZmluZCAicG5tc2NhbGUiIGJpbmFyeScsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKSk7DQogICAgICAgIH0NCiAgICB9IC8vIEVuZCBmdW5jdGlvbiBJbWFnZV9OZXRQQk0NCg0KICAgIC8qKg0KICAgICAqIExvYWQgaW1hZ2UNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgZmlsZW5hbWUNCiAgICAgKiBAcmV0dXJuIGJvb2x8UEVBUl9FcnJvciBUUlVFIG9yIGEgUEVBUl9FcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAYWNjZXNzIHB1YmxpYw0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGxvYWQoJGltYWdlKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmltYWdlID0gJGltYWdlOw0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPl9nZXRfaW1hZ2VfZGV0YWlscygkaW1hZ2UpOw0KICAgICAgICBpZiAoUEVBUjo6aXNFcnJvcigkcmVzdWx0KSkgew0KICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHRydWU7DQoNCiAgICB9IC8vIEVuZCBsb2FkDQoNCiAgICAvKioNCiAgICAgKiBSZXNpemUgdGhlIGltYWdlLg0KICAgICAqDQogICAgICogQGFjY2VzcyBwcml2YXRlDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICAgJG5ld194ICAgTmV3IHdpZHRoDQogICAgICogQHBhcmFtIGludCAgICRuZXdfeSAgIE5ldyBoZWlnaHQNCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9wdGlvbnMgT3B0aW9uYWwgcGFyYW1ldGVycw0KICAgICAqDQogICAgICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3Mgb3IgUEVBUiBFcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiBAc2VlIFBFQVI6OmlzRXJyb3IoKQ0KICAgICAqLw0KICAgIGZ1bmN0aW9uIF9yZXNpemUoJG5ld194LCAkbmV3X3ksICRvcHRpb25zID0gbnVsbCkNCiAgICB7DQogICAgICAgIC8vIHRoZXJlJ3Mgbm8gdGVjaG5pY2FsIHJlYXNvbiB3aHkgcmVzaXplIGNhbid0IGJlIGNhbGxlZCBtdWx0aXBsZQ0KICAgICAgICAvLyB0aW1lcy4uLml0J3MganVzdCBzaWxseSB0byBkbyBzbw0KICAgICAgICAkc2NhbGVNZXRob2QgPSAkdGhpcy0+X2dldE9wdGlvbignc2NhbGVNZXRob2QnLCAkb3B0aW9ucywgJ3Ntb290aCcpOw0KICAgICAgICBzd2l0Y2ggKCRzY2FsZU1ldGhvZCkgew0KICAgICAgICAgICAgY2FzZSAncGl4ZWwnOg0KICAgICAgICAgICAgICAgICRzY2FsZV94ID0gJG5ld194IC8gJHRoaXMtPmltZ194Ow0KICAgICAgICAgICAgICAgIGlmICgkc2NhbGVfeCA9PSAkbmV3X3kgLyAkdGhpcy0+aW1nX3gNCiAgICAgICAgICAgICAgICAgICAgJiYgJHNjYWxlX3ggPiAxDQogICAgICAgICAgICAgICAgICAgICYmIGZsb29yKCRzY2FsZV94KSA9PSAkc2NhbGVfeCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoU3lzdGVtOjp3aGljaChJTUFHRV9UUkFOU0ZPUk1fTkVUUEJNX1BBVEggLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbm1lbmxhcmdlJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gKChPU19XSU5ET1dTKSA/ICcuZXhlJyA6ICcnKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb21tYW5kW10gPSAkdGhpcy0+X3ByZXBhcmVfY21kKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG5tZW5sYXJnZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjYWxlX3gpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ0NvdWxkblwndCBmaW5kICJwbm1lbmxhcmdlIiBiaW5hcnknLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gJHRoaXMtPl9wcmVwYXJlX2NtZCgNCiAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCwNCiAgICAgICAgICAgICAgICAgICAgICAgICdwbm1zY2FsZScsDQogICAgICAgICAgICAgICAgICAgICAgICAnLW5vbWl4IC13aWR0aCAnIC4gKChpbnQpICRuZXdfeCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICcgLWhlaWdodCAnIC4gKChpbnQpICRuZXdfeSkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgY2FzZSAnc21vb3RoJzoNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9ICR0aGlzLT5fcHJlcGFyZV9jbWQoDQogICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCwNCiAgICAgICAgICAgICAgICAgICAgJ3BubXNjYWxlJywNCiAgICAgICAgICAgICAgICAgICAgJy13aWR0aCAnIC4gKChpbnQpICRuZXdfeCkgLiAnIC1oZWlnaHQgJw0KICAgICAgICAgICAgICAgICAgICAgICAgLiAoKGludCkgJG5ld195KSk7DQogICAgICAgICAgICAgICAgLy8gU21vb3RoIHRoaW5ncyBpZiBzY2FsaW5nIGJ5IGEgZmFjdG9yIG1vcmUgdGhhbiAzDQogICAgICAgICAgICAgICAgLy8gKHNlZSBwbm1zY2FsZSBtYW4gcGFnZSkNCiAgICAgICAgICAgICAgICBpZiAoJG5ld194IC8gJHRoaXMtPmltZ194ID4gMw0KICAgICAgICAgICAgICAgICAgICB8fCAkbmV3X3kgLyAkdGhpcy0+aW1nX3kgPiAzKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChTeXN0ZW06OndoaWNoKElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BubXNtb290aCcgLiAoKE9TX1dJTkRPV1MpID8gJy5leGUnIDogJycpKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9ICR0aGlzLT5fcHJlcGFyZV9jbWQoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRILA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbm1zbW9vdGgnKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdDb3VsZG5cJ3QgZmluZCAicG5tc21vb3RoIiBiaW5hcnknLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0gLy8gRW5kIFtTV0lUQ0hdDQoNCiAgICAgICAgJHRoaXMtPl9zZXRfbmV3X3goJG5ld194KTsNCiAgICAgICAgJHRoaXMtPl9zZXRfbmV3X3koJG5ld195KTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQoNCiAgICB9IC8vIEVuZCByZXNpemUNCg0KICAgIC8qKg0KICAgICAqIFJvdGF0ZXMgdGhlIGltYWdlDQogICAgICoNCiAgICAgKiBAcGFyYW0gaW50ICRhbmdsZSBUaGUgYW5nbGUgdG8gcm90YXRlIHRoZSBpbWFnZSB0aHJvdWdoDQogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zDQogICAgICogQHJldHVybiBib29sfFBFQVJfRXJyb3IgVFJVRSBvbiBzdWNjZXNzLCBQRUFSX0Vycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHJvdGF0ZSgkYW5nbGUsICRvcHRpb25zID0gbnVsbCkNCiAgICB7DQogICAgICAgIGlmICghKCRhbmdsZSA9PSAkdGhpcy0+X3JvdGF0aW9uX2FuZ2xlKCRhbmdsZSkpKSB7DQogICAgICAgICAgICAvLyBObyByb3RhdGlvbiBuZWVkZWQNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRm9yIHBubXJvdGF0ZSwgd2Ugd2FudCB0byBsaW1pdCByb3RhdGlvbnMgZnJvbSAtNDUgdG8gKzQ1IGRlZ3JlZXMNCiAgICAgICAgLy8gZXZlbiBpZiBhY2NlcHRhYmxlIHJhbmdlIGlzIC05MCB0byArOTAgKHNlZSBwbm1yb3RhdGUgbWFuIHBhZ2UpDQogICAgICAgIC8vIEJyaW5nIGltYWdlIHRvIHRoYXQgcmFuZ2UgYnkgdXNpbmcgcGFtZmxpcA0KICAgICAgICBpZiAoJGFuZ2xlID4gNDUgJiYgJGFuZ2xlIDwgMzE1KSB7DQogICAgICAgICAgICBpZiAoIVN5c3RlbTo6d2hpY2goSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRIIC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhbWZsaXAnIC4gKChPU19XSU5ET1dTKSA/ICcuZXhlJyA6ICcnKSkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignQ291bGRuXCd0IGZpbmQgInBhbWZsaXAiIGJpbmFyeScsDQogICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRxdWFydGVycyA9IGZsb29yKGNlaWwoJGFuZ2xlIC8gNDUpIC8gMik7DQogICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gJHRoaXMtPl9wcmVwYXJlX2NtZCgNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fTkVUUEJNX1BBVEgsDQogICAgICAgICAgICAgICAgJ3BhbWZsaXAnLA0KICAgICAgICAgICAgICAgICctcm90YXRlJyAuICgzNjAgLSAkcXVhcnRlcnMgKiA5MCkpOw0KICAgICAgICAgICAgJGFuZ2xlIC09ICRxdWFydGVycyAqIDkwOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCRhbmdsZSAhPSAwKSB7DQogICAgICAgICAgICBpZiAoJGFuZ2xlID4gNDUpIHsNCiAgICAgICAgICAgICAgICAkYW5nbGUgLT0gMzYwOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoIVN5c3RlbTo6d2hpY2goSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRIIC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BubXJvdGF0ZScgLiAoKE9TX1dJTkRPV1MpID8gJy5leGUnIDogJycpKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdDb3VsZG5cJ3QgZmluZCAicG5tcm90YXRlIiBiaW5hcnknLA0KICAgICAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkYmdjb2xvciA9ICR0aGlzLT5fZ2V0Q29sb3IoJ2NhbnZhc0NvbG9yJywgJG9wdGlvbnMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KDI1NSwgMjU1LCAyNTUpKTsNCiAgICAgICAgICAgICRiZ2NvbG9yID0gJHRoaXMtPmNvbG9yYXJyYXkyY29sb3JoZXgoJGJnY29sb3IpOw0KDQogICAgICAgICAgICAkc2NhbGVNZXRob2QgPSAkdGhpcy0+X2dldE9wdGlvbignc2NhbGVNZXRob2QnLCAkb3B0aW9ucywgJ3Ntb290aCcpOw0KICAgICAgICAgICAgaWYgKCRzY2FsZU1ldGhvZCAhPSAncGl4ZWwnKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9ICR0aGlzLT5fcHJlcGFyZV9jbWQoDQogICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCwNCiAgICAgICAgICAgICAgICAgICAgJ3BubXJvdGF0ZScsDQogICAgICAgICAgICAgICAgICAgICctYmFja2dyb3VuZD0nIC4gJGJnY29sb3IgLiAnIC0nIC4gKGZsb2F0KSAkYW5nbGUpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gJHRoaXMtPl9wcmVwYXJlX2NtZCgNCiAgICAgICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRILA0KICAgICAgICAgICAgICAgICAgICAncG5tcm90YXRlJywNCiAgICAgICAgICAgICAgICAgICAgJy1iYWNrZ3JvdW5kPScgLiAkYmdjb2xvciAuICcgLW5vYW50aWFsaWFzIC0nIC4gKGZsb2F0KSAkYW5nbGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0gLy8gRW5kIHJvdGF0ZQ0KDQogICAgLyoqDQogICAgICogQ3JvcCBhbiBpbWFnZQ0KICAgICAqDQogICAgICogQHBhcmFtIGludCAkd2lkdGggQ3JvcHBlZCBpbWFnZSB3aWR0aA0KICAgICAqIEBwYXJhbSBpbnQgJGhlaWdodCBDcm9wcGVkIGltYWdlIGhlaWdodA0KICAgICAqIEBwYXJhbSBpbnQgJHggcG9zaXRpdmUgWC1jb29yZGluYXRlIHRvIGNyb3AgYXQNCiAgICAgKiBAcGFyYW0gaW50ICR5IHBvc2l0aXZlIFktY29vcmRpbmF0ZSB0byBjcm9wIGF0DQogICAgICoNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqIEB0b2RvIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyBjcm9wcGVkIHNpemUNCiAgICAgKiovDQogICAgZnVuY3Rpb24gY3JvcCgkd2lkdGgsICRoZWlnaHQsICR4ID0gMCwgJHkgPSAwKQ0KICAgIHsNCiAgICAgICAgLy8gU2FuaXR5IGNoZWNrDQogICAgICAgIGlmICghJHRoaXMtPmludGVyc2VjdHMoJHdpZHRoLCAkaGVpZ2h0LCAkeCwgJHkpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignTm90aGluZyB0byBjcm9wJywgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX09VVE9GQk9VTkQpOw0KICAgICAgICB9DQogICAgICAgIGlmICgkeCAhPSAwIHx8ICR5ICE9IDANCiAgICAgICAgICAgIHx8ICR3aWR0aCAhPSAkdGhpcy0+aW1nX3gNCiAgICAgICAgICAgIHx8ICRoZWlnaHQgIT0gJHRoaXMtPmltZ195KSB7DQogICAgICAgICAgICBpZiAoIVN5c3RlbTo6d2hpY2goSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRIIC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BubWN1dCcgLiAoKE9TX1dJTkRPV1MpID8gJy5leGUnIDogJycpKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBQRUFSOjpyYWlzZUVycm9yKCdDb3VsZG5cJ3QgZmluZCAicG5tY3V0IiBiaW5hcnknLA0KICAgICAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gJHRoaXMtPl9wcmVwYXJlX2NtZCgNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fTkVUUEJNX1BBVEgsDQogICAgICAgICAgICAgICAgJ3BubWN1dCcsDQogICAgICAgICAgICAgICAgJy1sZWZ0ICcgLiAoKGludCkgJHgpDQogICAgICAgICAgICAgICAgICAgIC4gJyAtdG9wICcgLiAoKGludCkgJHkpDQogICAgICAgICAgICAgICAgICAgIC4gJyAtd2lkdGggJyAuICgoaW50KSAkd2lkdGgpDQogICAgICAgICAgICAgICAgICAgIC4gJyAtaGVpZ2h0ICcgLiAoKGludCkgJGhlaWdodCkpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0gLy8gRW5kIGNyb3ANCg0KICAgIC8qKg0KICAgICAqIEFkanVzdCB0aGUgaW1hZ2UgZ2FtbWENCiAgICAgKg0KICAgICAqIEBwYXJhbSBmbG9hdCAkb3V0cHV0Z2FtbWENCiAgICAgKg0KICAgICAqIEByZXR1cm4gbWl4ZWQgVFJVRSBvciBhIFBFQVIgZXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICovDQogICAgZnVuY3Rpb24gZ2FtbWEoJG91dHB1dGdhbW1hID0gMS4wKSB7DQogICAgICAgIGlmICgkb3V0cHV0Z2FtbWUgIT0gMS4wKSB7DQogICAgICAgICAgICBpZiAoIVN5c3RlbTo6d2hpY2goSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRIIC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BubWdhbW1hJyAuICgoT1NfV0lORE9XUykgPyAnLmV4ZScgOiAnJykpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ0NvdWxkblwndCBmaW5kICJwbm1nYW1tYSIgYmluYXJ5JywNCiAgICAgICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5jb21tYW5kW10gPSAkdGhpcy0+X3ByZXBhcmVfY21kKA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCwNCiAgICAgICAgICAgICAgICAncG5tZ2FtbWEnLA0KICAgICAgICAgICAgICAgIChmbG9hdCkgJG91dHB1dGdhbW1hKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBWZXJ0aWNhbCBtaXJyb3JpbmcNCiAgICAgKg0KICAgICAqIEBzZWUgbWlycm9yKCkNCiAgICAgKiBAcmV0dXJuIFRSVUUgb3IgUEVBUiBFcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiovDQogICAgZnVuY3Rpb24gZmxpcCgpDQogICAgew0KICAgICAgICBpZiAoIVN5c3RlbTo6d2hpY2goSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRIIC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFtZmxpcCcgLiAoKE9TX1dJTkRPV1MpID8gJy5leGUnIDogJycpKSkgew0KICAgICAgICAgICAgcmV0dXJuIFBFQVI6OnJhaXNlRXJyb3IoJ0NvdWxkblwndCBmaW5kICJwYW1mbGlwIiBiaW5hcnknLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgICAgIH0NCiAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9ICR0aGlzLT5fcHJlcGFyZV9jbWQoDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fTkVUUEJNX1BBVEgsDQogICAgICAgICAgICAncGFtZmxpcCcsDQogICAgICAgICAgICAnLXRvcGJvdHRvbScpOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBIb3Jpem9udGFsIG1pcnJvcmluZw0KICAgICAqDQogICAgICogQHNlZSBmbGlwKCkNCiAgICAgKiBAcmV0dXJuIFRSVUUgb3IgUEVBUiBFcnJvciBvYmplY3Qgb24gZXJyb3INCiAgICAgKiovDQogICAgZnVuY3Rpb24gbWlycm9yKCkNCiAgICB7DQogICAgICAgIGlmICghU3lzdGVtOjp3aGljaChJTUFHRV9UUkFOU0ZPUk1fTkVUUEJNX1BBVEggLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYW1mbGlwJyAuICgoT1NfV0lORE9XUykgPyAnLmV4ZScgOiAnJykpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignQ291bGRuXCd0IGZpbmQgInBhbWZsaXAiIGJpbmFyeScsDQogICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICAgICAgfQ0KICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gJHRoaXMtPl9wcmVwYXJlX2NtZCgNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCwNCiAgICAgICAgICAgICdwYW1mbGlwJywNCiAgICAgICAgICAgICctbGVmdHJpZ2h0Jyk7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIENvbnZlcnRzIGFuIGltYWdlIGludG8gZ3JleXNjYWxlIGNvbG9ycw0KICAgICAqDQogICAgICogQGFjY2VzcyBwdWJsaWMNCiAgICAgKiBAcmV0dXJuIG1peGVkIFRSVUUgb3IgYSBQRUFSIGVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqKi8NCiAgICBmdW5jdGlvbiBncmV5c2NhbGUoKQ0KICAgIHsNCiAgICAgICAgaWYgKCFTeXN0ZW06OndoaWNoKElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BwbXRvcGdtJyAuICgoT1NfV0lORE9XUykgPyAnLmV4ZScgOiAnJykpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignQ291bGRuXCd0IGZpbmQgInBwbXRvcGdtIiBiaW5hcnknLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgICAgIH0NCiAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9ICR0aGlzLT5fcHJlcGFyZV9jbWQoDQogICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fTkVUUEJNX1BBVEgsDQogICAgICAgICAgICAncHBtdG9wZ20nKTsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogYWRkcyB0ZXh0IHRvIGFuIGltYWdlDQogICAgICoNCiAgICAgKiBAcGFyYW0gICBhcnJheSAgIG9wdGlvbnMgICAgIEFycmF5IGNvbnRhaW5zIG9wdGlvbnMNCiAgICAgKiAgICAgICAgICAgICBhcnJheSgNCiAgICAgKiAgICAgICAgICAgICAgICAgICd0ZXh0JyAgICAgICAgICAvLyBUaGUgc3RyaW5nIHRvIGRyYXcNCiAgICAgKiAgICAgICAgICAgICAgICAgICd4JyAgICAgICAgICAgICAvLyBIb3Jpem9udGFsIHBvc2l0aW9uDQogICAgICogICAgICAgICAgICAgICAgICAneScgICAgICAgICAgICAgLy8gVmVydGljYWwgUG9zaXRpb24NCiAgICAgKiAgICAgICAgICAgICAgICAgICdjb2xvcicgICAgICAgICAvLyBGb250IGNvbG9yDQogICAgICogICAgICAgICAgICAgICAgICAnZm9udCcgICAgICAgICAgLy8gRm9udCB0byBiZSB1c2VkDQogICAgICogICAgICAgICAgICAgICAgICAnc2l6ZScgICAgICAgICAgLy8gU2l6ZSBvZiB0aGUgZm9udHMgaW4gcGl4ZWwNCiAgICAgKiAgICAgICAgICAgICAgICAgICdyZXNpemVfZmlyc3QnICAvLyBUZWxsIGlmIHRoZSBpbWFnZSBoYXMgdG8gYmUgcmVzaXplZA0KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlZm9yZSBkcmF3aW5nIHRoZSB0ZXh0DQogICAgICogICAgICAgICAgICAgICAgICAgKQ0KICAgICAqDQogICAgICogQHJldHVybiB2b2lkDQogICAgICovDQogICAgZnVuY3Rpb24gYWRkVGV4dCgkcGFyYW1zKQ0KICAgIHsNCiAgICAgICAgaWYgKCFTeXN0ZW06OndoaWNoKElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCAuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BwbWxhYmVsJyAuICgoT1NfV0lORE9XUykgPyAnLmV4ZScgOiAnJykpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignQ291bGRuXCd0IGZpbmQgInBwbWxhYmVsIiBiaW5hcnknLA0KICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9VTlNVUFBPUlRFRCk7DQogICAgICAgIH0NCg0KICAgICAgICAvLyB3ZSBpZ25vcmUgJ3Jlc2l6ZV9maXJzdCcgc2luY2UgdGhlIG1vcmUgbG9naWNhbCBhcHByb2FjaCB3b3VsZCBiZQ0KICAgICAgICAvLyBmb3IgdGhlIHVzZXIgdG8ganVzdCBjYWxsICR0aGlzLT5fcmVzaXplKCkgX2ZpcnN0XyA7KQ0KICAgICAgICBleHRyYWN0KGFycmF5X21lcmdlKCR0aGlzLT5fZ2V0X2RlZmF1bHRfdGV4dF9wYXJhbXMoKSwgJHBhcmFtcykpOw0KDQogICAgICAgICRvcHRpb25zID0gYXJyYXkoJ2NvbG9yRm9udCcgPT4gJGNvbG9yKTsNCiAgICAgICAgJGNvbG9yID0gJHRoaXMtPl9nZXRDb2xvcignY29sb3JGb250JywgJG9wdGlvbnMsIGFycmF5KDAsIDAsIDApKTsNCiAgICAgICAgJGNvbG9yID0gJHRoaXMtPmNvbG9yYXJyYXkyY29sb3JoZXgoJGNvbG9yKTsNCg0KICAgICAgICAkdGhpcy0+Y29tbWFuZFtdID0gJHRoaXMtPl9wcmVwYXJlX2NtZCgNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCwNCiAgICAgICAgICAgICdwcG1sYWJlbCcsDQogICAgICAgICAgICAnLWFuZ2xlICcgLiAoKGludCkgJGFuZ2xlKQ0KICAgICAgICAgICAgICAgIC4gJyAtY29sb3VyICcgLiBlc2NhcGVzaGVsbGFyZygkY29sb3IpDQogICAgICAgICAgICAgICAgLiAnIC1zaXplICcgLiAoKGZsb2F0KSAkc2l6ZSkNCiAgICAgICAgICAgICAgICAuICcgLXggJyAuICgoaW50KSAkeCkNCiAgICAgICAgICAgICAgICAuICcgLXkgJyAuICgoaW50KSAoJHkgKyAkc2l6ZSkpDQogICAgICAgICAgICAgICAgLiAnIC10ZXh0ICcgLiBlc2NhcGVzaGVsbGFyZygkdGV4dCkpOw0KDQogICAgfSAvLyBFbmQgYWRkVGV4dA0KDQogICAgLyoqDQogICAgICogSW1hZ2VfVHJhbnNmb3JtX0RyaXZlcl9OZXRQQk06Ol9wb3N0UHJvY2VzcygpDQogICAgICoNCiAgICAgKiBAcGFyYW0gJHR5cGUNCiAgICAgKiBAcGFyYW0gJHF1YWxpdHkNCiAgICAgKiBAcmV0dXJuIHN0cmluZyBBIGNoYWluIG9mIHNoZWxsIGNvbW1hbmQNCiAgICAgKiBAbGluayBodHRwOi8vbmV0cGJtLnNvdXJjZWZvcmdlLm5ldC9kb2MvZGlyZWN0b3J5Lmh0bWwNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBfcG9zdFByb2Nlc3MoJHR5cGUsICRxdWFsaXR5KQ0KICAgIHsNCiAgICAgICAgYXJyYXlfdW5zaGlmdCgkdGhpcy0+Y29tbWFuZCwgJHRoaXMtPl9wcmVwYXJlX2NtZCgNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCwNCiAgICAgICAgICAgIHN0cnRvbG93ZXIoJHRoaXMtPnR5cGUpIC4gJ3RvcG5tJywNCiAgICAgICAgICAgIGVzY2FwZXNoZWxsYXJnKCR0aGlzLT5pbWFnZSkpKTsNCiAgICAgICAgJGFyZyA9ICcnOw0KICAgICAgICAkdHlwZSA9IHN0cnRvbG93ZXIoJHR5cGUpOw0KICAgICAgICAkcHJvZ3JhbSA9ICcnOw0KICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7DQogICAgICAgICAgICAvLyBwcG10byogY29udmVydGVycw0KICAgICAgICAgICAgY2FzZSAnZ2lmJzoNCiAgICAgICAgICAgICAgICBpZiAoIVN5c3RlbTo6d2hpY2goSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRIIC4gJ3BwbXF1YW50Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAoKE9TX1dJTkRPV1MpID8gJy5leGUnIDogJycpKSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcignQ291bGRuXCd0IGZpbmQgInBwbXF1YW50IiBiaW5hcnknLA0KICAgICAgICAgICAgICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX0VSUk9SX1VOU1VQUE9SVEVEKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHRoaXMtPmNvbW1hbmRbXSA9ICR0aGlzLT5fcHJlcGFyZV9jbWQoDQogICAgICAgICAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9ORVRQQk1fUEFUSCwNCiAgICAgICAgICAgICAgICAgICAgJ3BwbXF1YW50JywNCiAgICAgICAgICAgICAgICAgICAgMjU2KTsNCiAgICAgICAgICAgIGNhc2UgJ2FjYWQnOg0KICAgICAgICAgICAgY2FzZSAnYm1wJzoNCiAgICAgICAgICAgIGNhc2UgJ2V5dXYnOg0KICAgICAgICAgICAgY2FzZSAnaWxibSc6DQogICAgICAgICAgICBjYXNlICdsZWFmJzoNCiAgICAgICAgICAgIGNhc2UgJ2xqJzoNCiAgICAgICAgICAgIGNhc2UgJ21pdHN1JzoNCiAgICAgICAgICAgIGNhc2UgJ21wZWcnOg0KICAgICAgICAgICAgY2FzZSAnbmVvJzoNCiAgICAgICAgICAgIGNhc2UgJ3BjeCc6DQogICAgICAgICAgICBjYXNlICdwaTEnOg0KICAgICAgICAgICAgY2FzZSAncGljdCc6DQogICAgICAgICAgICBjYXNlICdwaic6DQogICAgICAgICAgICBjYXNlICdwanhsJzoNCiAgICAgICAgICAgIGNhc2UgJ3B1enonOg0KICAgICAgICAgICAgY2FzZSAnc2l4ZWwnOg0KICAgICAgICAgICAgY2FzZSAndGdhJzoNCiAgICAgICAgICAgIGNhc2UgJ3VpbCc6DQogICAgICAgICAgICBjYXNlICd4cG0nOg0KICAgICAgICAgICAgY2FzZSAneXV2JzoNCiAgICAgICAgICAgICAgICAkcHJvZ3JhbSA9ICdwcG10bycgLiAkdHlwZTsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgLy8gV2luZG93cyBpY29uDQogICAgICAgICAgICBjYXNlICd3aW5pY29uJzoNCiAgICAgICAgICAgIGNhc2UgJ2ljbyc6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAnd2luaWNvbic7DQogICAgICAgICAgICAgICAgJHByb2dyYW0gPSAncHBtdG8nIC4gJHR5cGU7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIC8vIHBibXRvKiBjb252ZXJ0ZXJzDQogICAgICAgICAgICBjYXNlICdhc2NpaSc6DQogICAgICAgICAgICBjYXNlICd0ZXh0JzoNCiAgICAgICAgICAgIGNhc2UgJ3R4dCc6DQogICAgICAgICAgICAgICAgJHR5cGUgPSAnYXNjaWknOw0KICAgICAgICAgICAgY2FzZSAnYXRrJzoNCiAgICAgICAgICAgIGNhc2UgJ2JidWJnJzoNCiAgICAgICAgICAgIGNhc2UgJ2Vwc2knOg0KICAgICAgICAgICAgY2FzZSAnZXBzb24nOg0KICAgICAgICAgICAgY2FzZSAnZXNjcDInOg0KICAgICAgICAgICAgY2FzZSAnaWNvbic6ICAgIC8vIFN1biBpY29uDQogICAgICAgICAgICBjYXNlICdnZW0nOg0KICAgICAgICAgICAgY2FzZSAnZ28nOg0KICAgICAgICAgICAgY2FzZSAnbGonOg0KICAgICAgICAgICAgY2FzZSAnbG4wMyc6DQogICAgICAgICAgICBjYXNlICdscHMnOg0KICAgICAgICAgICAgY2FzZSAnbWFjcCc6DQogICAgICAgICAgICBjYXNlICdtZGEnOg0KICAgICAgICAgICAgY2FzZSAnbWdyJzoNCiAgICAgICAgICAgIGNhc2UgJ3BpMyc6DQogICAgICAgICAgICBjYXNlICdwayc6DQogICAgICAgICAgICBjYXNlICdwbG90JzoNCiAgICAgICAgICAgIGNhc2UgJ3B0eCc6DQogICAgICAgICAgICBjYXNlICd3YnAnOg0KICAgICAgICAgICAgY2FzZSAneGJtJzoNCiAgICAgICAgICAgIGNhc2UgJ3gxMGJtJzoNCiAgICAgICAgICAgIGNhc2UgJ3libSc6DQogICAgICAgICAgICBjYXNlICd6aW5jJzoNCiAgICAgICAgICAgIGNhc2UgJzEweCc6DQogICAgICAgICAgICAgICAgJHByb2dyYW0gPSAncGJtdG8nIC4gJHR5cGU7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIC8vIHBhbXRvKiBjb252ZXJ0ZXJzDQogICAgICAgICAgICBjYXNlICdqcGMnOg0KICAgICAgICAgICAgICAgICR0eXBlID0gJ2pwZWcyayc7DQogICAgICAgICAgICBjYXNlICdodG1sJzoNCiAgICAgICAgICAgIGNhc2UgJ3BmbSc6DQogICAgICAgICAgICBjYXNlICd0Z2EnOg0KICAgICAgICAgICAgICAgICRwcm9ncmFtID0gJ3BhbXRvJyAuICR0eXBlOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAvLyBwbm10byogY29udmVydGVycw0KICAgICAgICAgICAgY2FzZSAnanBjJzoNCiAgICAgICAgICAgICAgICAkdHlwZSA9ICdqcGVnMmsnOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnd2ZhJzoNCiAgICAgICAgICAgICAgICAkdHlwZSA9ICdmaWFzY28nOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnanBnJzoNCiAgICAgICAgICAgICAgICAkdHlwZSA9ICdqcGVnJzsNCiAgICAgICAgICAgIGNhc2UgJ2pwZWcnOg0KICAgICAgICAgICAgICAgICRhcmcgPSAnLS1xdWFsaXR5PScgLiAkcXVhbGl0eTsNCiAgICAgICAgICAgIGNhc2UgJ2piaWcnOg0KICAgICAgICAgICAgY2FzZSAnZml0cyc6DQogICAgICAgICAgICBjYXNlICdwYWxtJzoNCiAgICAgICAgICAgIGNhc2UgJ3BjbHhsJzoNCiAgICAgICAgICAgIGNhc2UgJ3BuZyc6DQogICAgICAgICAgICBjYXNlICdwcyc6DQogICAgICAgICAgICBjYXNlICdyYXN0JzoNCiAgICAgICAgICAgIGNhc2UgJ3JsZSc6DQogICAgICAgICAgICBjYXNlICdzZ2knOg0KICAgICAgICAgICAgY2FzZSAnc2lyJzoNCiAgICAgICAgICAgIGNhc2UgJ3RpZmYnOg0KICAgICAgICAgICAgY2FzZSAneHdkJzoNCiAgICAgICAgICAgICAgICAkcHJvZ3JhbSA9ICdwbm10bycgLiAkdHlwZTsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICB9IC8vIHN3aXRjaA0KDQogICAgICAgIGlmICgkcHJvZ3JhbSA9PSAnJykgew0KICAgICAgICAgICAgJHByb2dyYW0gPSAncG5tdG8nIC4gJHR5cGU7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIVN5c3RlbTo6d2hpY2goSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRIIC4gJHByb2dyYW0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICgoT1NfV0lORE9XUykgPyAnLmV4ZScgOiAnJykpKSB7DQogICAgICAgICAgICByZXR1cm4gUEVBUjo6cmFpc2VFcnJvcigiQ291bGRuJ3QgZmluZCBcIiRwcm9ncmFtXCIgYmluYXJ5IiwNCiAgICAgICAgICAgICAgICBJTUFHRV9UUkFOU0ZPUk1fRVJST1JfVU5TVVBQT1JURUQpOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5jb21tYW5kW10gPSAkdGhpcy0+X3ByZXBhcmVfY21kKA0KICAgICAgICAgICAgSU1BR0VfVFJBTlNGT1JNX05FVFBCTV9QQVRILA0KICAgICAgICAgICAgJHByb2dyYW0pOw0KICAgICAgICByZXR1cm4gaW1wbG9kZSgnfCcsICR0aGlzLT5jb21tYW5kKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBTYXZlIHRoZSBpbWFnZSBmaWxlDQogICAgICoNCiAgICAgKiBAcGFyYW0gJGZpbGVuYW1lIHN0cmluZyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byB3cml0ZSB0bw0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUgKGpwZWcscG5nLi4uKTsNCiAgICAgKiBAcGFyYW0gaW50ICRxdWFsaXR5IDc1DQogICAgICogQHJldHVybiBUUlVFIG9yIFBFQVIgRXJyb3Igb2JqZWN0IG9uIGVycm9yDQogICAgICovDQogICAgZnVuY3Rpb24gc2F2ZSgkZmlsZW5hbWUsICR0eXBlID0gbnVsbCwgJHF1YWxpdHkgPSA3NSkNCiAgICB7DQogICAgICAgICR0eXBlICAgID0gKGlzX251bGwoJHR5cGUpKSA/ICR0aGlzLT50eXBlIDogJHR5cGU7DQogICAgICAgICRvcHRpb25zID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKCFpc19udWxsKCRxdWFsaXR5KSkgew0KICAgICAgICAgICAgJG9wdGlvbnNbJ3F1YWxpdHknXSA9ICRxdWFsaXR5Ow0KICAgICAgICB9DQogICAgICAgICRxdWFsaXR5ID0gJHRoaXMtPl9nZXRPcHRpb24oJ3F1YWxpdHknLCAkb3B0aW9ucywgJHF1YWxpdHkpOw0KDQogICAgICAgICRudWxsRGV2aWNlID0gKE9TX1dJTkRPV1MpID8gJ251bCcgOiAnL2Rldi9udWxsJzsNCg0KICAgICAgICAkY21kID0gJHRoaXMtPl9wb3N0UHJvY2VzcygkdHlwZSwgJHF1YWxpdHkpIC4gJz4gIicgLiAkZmlsZW5hbWUgLiAnIic7DQogICAgICAgIGV4ZWMoJGNtZCAuICcgMj4gICcgLiAkbnVsbERldmljZSwgJHJlcywgJGV4aXQpOw0KICAgICAgICBpZiAoISR0aGlzLT5rZWVwX3NldHRpbmdzX29uX3NhdmUpIHsNCiAgICAgICAgICAgICR0aGlzLT5mcmVlKCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gKCRleGl0ID09IDApID8gdHJ1ZSA6IFBFQVI6OnJhaXNlRXJyb3IoaW1wbG9kZSgnLiAnLCAkcmVzKSwNCiAgICAgICAgICAgIElNQUdFX1RSQU5TRk9STV9FUlJPUl9JTyk7DQogICAgfSAvLyBFbmQgc2F2ZQ0KDQogICAgLyoqDQogICAgICogRGlzcGxheSBpbWFnZSB3aXRob3V0IHNhdmluZyBhbmQgbG9zZSBjaGFuZ2VzDQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlIChqcGVnLHBuZy4uLik7DQogICAgICogQHBhcmFtIGludCAkcXVhbGl0eSA3NQ0KICAgICAqIEByZXR1cm4gVFJVRSBvciBQRUFSIEVycm9yIG9iamVjdCBvbiBlcnJvcg0KICAgICAqLw0KICAgIGZ1bmN0aW9uIGRpc3BsYXkoJHR5cGUgPSBudWxsLCAkcXVhbGl0eSA9IG51bGwpDQogICAgew0KICAgICAgICAkdHlwZSAgICA9IChpc19udWxsKCR0eXBlKSkgPyAkdGhpcy0+dHlwZSA6ICR0eXBlOw0KICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCk7DQogICAgICAgIGlmICghaXNfbnVsbCgkcXVhbGl0eSkpIHsNCiAgICAgICAgICAgICRvcHRpb25zWydxdWFsaXR5J10gPSAkcXVhbGl0eTsNCiAgICAgICAgfQ0KICAgICAgICAkcXVhbGl0eSA9ICR0aGlzLT5fZ2V0T3B0aW9uKCdxdWFsaXR5JywgJG9wdGlvbnMsIDc1KTsNCg0KICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogJyAuICR0aGlzLT5nZXRNaW1lVHlwZSgkdHlwZSkpOw0KICAgICAgICAkY21kID0gJHRoaXMtPl9wb3N0UHJvY2VzcygkdHlwZSwgJHF1YWxpdHkpOw0KICAgICAgICBwYXNzdGhydSgkY21kIC4gJyAyPiYxJyk7DQogICAgICAgIGlmICghJHRoaXMtPmtlZXBfc2V0dGluZ3Nfb25fc2F2ZSkgew0KICAgICAgICAgICAgJHRoaXMtPmZyZWUoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIERlc3Ryb3kgaW1hZ2UgaGFuZGxlDQogICAgICoNCiAgICAgKiBAcmV0dXJuIHZvaWQNCiAgICAgKi8NCiAgICBmdW5jdGlvbiBmcmVlKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5jb21tYW5kID0gYXJyYXkoKTsNCiAgICB9DQp9IC8vIEVuZCBjbGFzcyBJbWFnZUlN]]></data>
	</file>
	<file>
	  <filename>/lib/external/Image/~backup/Transform/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/external/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsKJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwokZmxkcyA9ICIKCWlkIEkgS0VZLAoJdHlwZV9pZCBJLAoJdGl0bGUgQygyNTUpLAoJdGVtcGxhdGUgWAoiOwoKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NhdGFsb2dfdGVtcGxhdGUiLAoJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZV9zZXEiKTsKCiRmbGRzID0gIgoJdHlwZV9pZCBJIEtFWSwKCW5hbWUgQygyNSkKIjsKCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9jYXRhbG9nX3RlbXBsYXRlX3R5cGUiLAoJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwogICAgCiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuIGNtc19kYl9wcmVmaXgoKS4gJ21vZHVsZV9jYXRhbG9nX3RlbXBsYXRlX3R5cGUgVkFMVUVTICg/LD8pJzsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheShDVEVNUExBVEVfSVRFTSwgJHRoaXMtPkxhbmcoJ2l0ZW1fcGFnZScpKSk7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoQ1RFTVBMQVRFX0NBVEVHT1JZLCAkdGhpcy0+TGFuZygnY2F0ZWdvcnlfcGFnZScpKSk7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoQ1RFTVBMQVRFX0NBVEFMT0csICR0aGlzLT5MYW5nKCdjYXRhbG9nX3ByaW50YWJsZScpKSk7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoQ1RFTVBMQVRFX0NPTVBBUklTT04sICR0aGlzLT5MYW5nKCdpdGVtX2NvbXBhcmlzb24nKSkpOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KENURU1QTEFURV9GRUFUVVJFLCAkdGhpcy0+TGFuZygnY2F0YWxvZ19zaG9ydF9saXN0JykpKTsKCiRmbGRzID0gIgoJaWQgSSBLRVksCgl0eXBlX2lkIEksCglhdHRyaWJ1dGUgQygyNTUpLAoJb3JkZXJfYnkgSSwKCWFsaWFzIEMoNjApLAoJbGVuZ3RoIEksCglkZWZhdWx0dmFsIFgsCglmaWVsZF90eXBlIEMoMjUpIGRlZmF1bHQgJ3RleHQnLAoJc2VsZWN0X3ZhbHVlcyBYIGRlZmF1bHQgJycKIjsKCiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9jYXRhbG9nX2F0dHIiLAoJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRkYi0+Q3JlYXRlU2VxdWVuY2UoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcSIpOwoKJHF1ZXJ5ICAgID0gJ0lOU0VSVCBJTlRPICcuIGNtc19kYl9wcmVmaXgoKS4gJ21vZHVsZV9jYXRhbG9nX2F0dHIgKGlkLHR5cGVfaWQsaXNfdGV4dGFyZWEsYXR0cmlidXRlKSBWQUxVRVMgKD8sPyw/LD8pJzsKJG5ld19pZCAgID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9jYXRhbG9nX2F0dHJfc2VxJyk7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJG5ld19pZCwgMSwgMSwgJ0l0ZW0gTm90ZXMnKSk7CiRuZXdfaWQgICA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRuZXdfaWQsIDIsIDEsICdDYXRlZ29yeSBOb3RlcycpKTsKJG5ld19pZCAgID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9jYXRhbG9nX2F0dHJfc2VxJyk7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJG5ld19pZCwgMywgMSwgJ0NhdGFsb2cgTm90ZXMnKSk7CiRuZXdfaWQgICA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRuZXdfaWQsIDEsIDAsICdXZWlnaHQnKSk7CiRuZXdfaWQgICA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRuZXdfaWQsIDEsIDAsICdNZWRpdW0vTWVkaWEnKSk7CiRuZXdfaWQgICA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRuZXdfaWQsIDEsIDAsICdEaW1lbnNpb25zJykpOwokbmV3X2lkICAgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2NhdGFsb2dfYXR0cl9zZXEnKTsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkbmV3X2lkLCAxLCAwLCAnUHJpY2UnKSk7CiRuZXdfaWQgICA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRuZXdfaWQsIDEsIDAsICdJbiBTdG9jaz8nKSk7CiRuZXdfaWQgICA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRuZXdfaWQsIDMsIDAsICdDb3B5cmlnaHQnKSk7CgokY2F0YWxvZ2RpcnMgPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgIGNtc19qb2luX3BhdGgoJ2ltYWdlcycsICdjYXRhbG9nJyksCiAgICAgICAgICAgICAgICAgICAgICBjbXNfam9pbl9wYXRoKCdpbWFnZXMnLCAnY2F0YWxvZ19zcmMnKSwKICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nZXJmaWxlcycKICAgICAgICAgICAgICAgICAgICApOwoKZm9yZWFjaCAoJGNhdGFsb2dkaXJzIGFzICR0aGlzRGlyKQp7CiAgJGZpbGVEaXIgPSBjbXNfam9pbl9wYXRoKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpc0RpcgogICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgaWYoIWlzX2RpcigkZmlsZURpcikpCiAgewogICAgbWtkaXIoJGZpbGVEaXIpOwogIH0KICB0b3VjaCggY21zX2pvaW5fcGF0aCgkZmlsZURpciwgJ2luZGV4Lmh0bWwnKSApOwp9CgokdGhpcy0+aW1wb3J0U2FtcGxlVGVtcGxhdGVzKCk7ICAgICAgICAgICAKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2l0ZW1faW1hZ2VfY291bnQnLCAyKTsKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01vZGlmeSBDYXRhbG9nIFNldHRpbmdzJywgJ01vZGlmeSBDYXRhbG9nIFNldHRpbmdzJyk7CgokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ2luc3RhbGxlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCQlpZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0OwoJCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCgkJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZSIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NhdGFsb2dfdGVtcGxhdGVfdHlwZSIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NhdGFsb2dfYXR0ciIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJCSRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9jYXRhbG9nX3RlbXBsYXRlX3NlcSIgKTsKCQkkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcSIgKTsKCiAgICAgICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3Nob3dfZXh0YW50Jyk7CiAgICAgICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2NhdGVnb3J5X2ltYWdlX2NvdW50Jyk7CiAgICAgICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2NhdGVnb3J5X2ltYWdlX3NpemVfaGVybycpOwogICAgICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdjYXRlZ29yeV9pbWFnZV9zaXplX3RodW1ibmFpbCcpOwogICAgICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX2NvdW50Jyk7CiAgICAgICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3Nob3dfbWlzc2luZycpOwogICAgICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdpdGVtX2ltYWdlX3NpemVfdGh1bWJuYWlsJyk7CiAgICAgICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2l0ZW1faW1hZ2Vfc2l6ZV9oZXJvJyk7CiAgICAgICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2l0ZW1faW1hZ2VfY291bnQnKTsKICAgICAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnaW1hZ2VfYXNwZWN0X3JhdGlvJyk7CiAgICAgICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2NhdGVnb3J5X3NvcnRfb3JkZXInKTsKICAgICAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgncHJpbnRhYmxlX3NvcnRfb3JkZXInKTsKICAgICAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnZm9yY2VfYXNwZWN0X3JhdGlvJyk7CiAgICAgICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2ZsdXNoX2NhdHMnKTsKICAgICAgICAKCgkJJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ01vZGlmeSBDYXRhbG9nIFNldHRpbmdzJyk7CgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCgkJaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsNCgkJJGRiID0gJGdDbXMtPkdldERiKCk7DQoJCSRjdXJyZW50X3ZlcnNpb24gPSAkb2xkdmVyc2lvbjsNCgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOw0KDQoJCXN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQ0KCQl7DQoJCQljYXNlICIwLjEiOg0KCQkJY2FzZSAiMC4xLjUiOg0KCQkJY2FzZSAiMC4xLjYiOg0KCQkJY2FzZSAiMC4xLjciOg0KCQkJY2FzZSAiMC4yIjoNCgkJCWNhc2UgIjAuMyI6DQogICAgICAgICAgICAgICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2ltYWdlX2NvdW50Jyk7DQogICAgICBjYXNlICIwLjQiOg0KCQkJCSRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLiBjbXNfZGJfcHJlZml4KCkuICdtb2R1bGVfY2F0YWxvZ190ZW1wbGF0ZV90eXBlIFZBTFVFUyAoPyw/KSc7DQogICAgICAgICAgICAJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSg1LCAkdGhpcy0+TGFuZygnY2F0YWxvZ19zaG9ydF9saXN0JykpKTsgDQogCQkJY2FzZSAiMC40LjEiOg0KCQkJY2FzZSAiMC40LjIiOg0KICAgICAgY2FzZSAiMC41IjoNCiAgICAgIGNhc2UgIjAuNS4xIjoNCiAgICAgIGNhc2UgIjAuNS4yIjoNCiAgICAgIGNhc2UgIjAuNS4zIjoNCiAgICAgIGNhc2UgIjAuNS40IjoNCiAgICAgIGNhc2UgIjAuNS41IjoNCiAgICAgIGNhc2UgIjAuNS42IjoNCgkJCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NhdGFsb2dfYXR0ciIsDQogICAJCQkJIAkiaXNfdGV4dGFyZWEgSSIpOw0KCQkJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCgkJCQkkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy4gY21zX2RiX3ByZWZpeCgpLiAnbW9kdWxlX2NhdGFsb2dfYXR0ciAoaWQsdHlwZV9pZCxpc190ZXh0YXJlYSxhdHRyaWJ1dGUpIFZBTFVFUyAoPyw/LD8sPyknOw0KCQkgICAgICAgICRuZXdfaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2NhdGFsb2dfYXR0cl9zZXEnKTsNCgkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRuZXdfaWQsIDEsIDEsICdub3RlcycpKTsNCgkJICAgICAgICAkbmV3X2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9jYXRhbG9nX2F0dHJfc2VxJyk7DQoJCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkbmV3X2lkLCAyLCAxLCAnbm90ZXMnKSk7DQoJCSAgICAgICAgJG5ld19pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOw0KCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJG5ld19pZCwgMywgMSwgJ25vdGVzJykpOw0KCQkJCSR0aGlzLT5BZGRFdmVudEhhbmRsZXIoICdDb3JlJywgJ0NvbnRlbnRFZGl0UG9zdCcsIGZhbHNlICk7DQoJCQljYXNlICIwLjYiOg0KCQkJY2FzZSAiMC42LjEiOg0KCQkJY2FzZSAiMC42LjIiOg0KCQkJCSRyZXMgPSAkZGItPkV4ZWN1dGUoInNlbGVjdCAqIGZyb20gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9jYXRhbG9nX2F0dHIiKTsNCgkJCQlpZiAoJHJlcyAmJiAkY29sdW1ucz0kcmVzLT5HZXRBcnJheSgxKSkNCgkJCQkJew0KCQkJCQkJLy8gaGF2ZW4ndCBjcmVhdGVkIHRoZSBzdHVmZiBhYm92ZSBiZWNhdXNlIEkgc2NyZXdlZCB1cCB2ZXJzaW9uIG51bWJlcnMhDQoJCQkJCQlpZiAoISBhcnJheV9rZXlfZXhpc3RzICgnaXNfdGV4dGFyZWEnLCAkY29sdW1uc1swXSkpDQoJCQkJCQkJew0KCQkJCQkJCS8vIHNvIGZpeCBpdCENCgkJCQkJCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NhdGFsb2dfYXR0ciIsDQoJCQkgICAJCQkJIAkiaXNfdGV4dGFyZWEgSSIpOw0KCQkJCQkJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCgkJCQkJCQkkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy4gY21zX2RiX3ByZWZpeCgpLiAnbW9kdWxlX2NhdGFsb2dfYXR0ciAoaWQsdHlwZV9pZCxpc190ZXh0YXJlYSxhdHRyaWJ1dGUpIFZBTFVFUyAoPyw/LD8sPyknOw0KCQkJCQkgICAgICAgICRuZXdfaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX2NhdGFsb2dfYXR0cl9zZXEnKTsNCgkJCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRuZXdfaWQsIDEsIDEsICdub3RlcycpKTsNCgkJCQkJICAgICAgICAkbmV3X2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9jYXRhbG9nX2F0dHJfc2VxJyk7DQoJCQkJCQkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkbmV3X2lkLCAyLCAxLCAnbm90ZXMnKSk7DQoJCQkJCSAgICAgICAgJG5ld19pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyX3NlcScpOw0KCQkJCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJG5ld19pZCwgMywgMSwgJ25vdGVzJykpOw0KCQkJCQkJCSR0aGlzLT5BZGRFdmVudEhhbmRsZXIoICdDb3JlJywgJ0NvbnRlbnRFZGl0UG9zdCcsIGZhbHNlICk7DQoJCQkJCQkJfQ0KCQkJCQl9DQoJCQljYXNlICIwLjciOg0KCQkJY2FzZSAiMC43LjIiOg0KCQkJY2FzZSAiMC43LjMiOg0KCQkJY2FzZSAiMC43LjQiOg0KCQkJY2FzZSAiMC43LjUiOg0KCQkJY2FzZSAiMC43LjYiOg0KCQkJCSRjYXRhbG9nZGlycyA9IGFycmF5KCcvY2F0YWxvZ2VyZmlsZXMnKTsNCgkJCQlmb3JlYWNoICgkY2F0YWxvZ2RpcnMgYXMgJHRoaXNEaXIpDQoJCQkJCXsNCgkgICAgICAgIAkJJGZpbGVEaXIgPSBkaXJuYW1lKCRnQ21zLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLiR0aGlzRGlyLicvaW5kZXguaHRtbCcpOw0KCSAgICAgICAgCQlpZiAoIWlzX2RpcigkZmlsZURpcikpDQoJICAgICAgICAgICAgCQl7DQoJICAgICAgICAgICAgCQlta2RpcigkZmlsZURpcik7DQoJICAgICAgICAgICAgCQl9DQoJCQkJCXRvdWNoKCRmaWxlRGlyLicvaW5kZXguaHRtbCcpOw0KCSAgICAgICAgICAgIAl9DQoJCQkJJHRoaXMtPmltcG9ydFNhbXBsZVRlbXBsYXRlcygnQ29tcGFyaXNvbicpOw0KCQkJY2FzZSAiMC43LjciOg0KCQkJY2FzZSAiMC44YjEiOg0KCQkJCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfY2F0YWxvZ19hdHRyIiwNCiAgIAkJCQkgCSJvcmRlcl9ieSBJIik7DQoJCQkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KCQkJCSRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfY2F0YWxvZ19hdHRyIiwNCiAgIAkJCQkgCSJhbGlhcyBDKDYwKSIpOw0KCQkJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCgkJCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NhdGFsb2dfYXR0ciIsDQogICAJCQkJIAkibGVuZ3RoIEkiKTsNCgkJCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7DQoJCQkJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9jYXRhbG9nX2F0dHIiLA0KICAgCQkJCSAJImRlZmF1bHR2YWwgWCIpOw0KCQkJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCgkJCWNhc2UgIjAuOC4wIjoNCgkJCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NhdGFsb2dfYXR0ciIsDQoJCQkJIAkiZmllbGRfdHlwZSBDKDI1KSBkZWZhdWx0ICd0ZXh0JyIpOw0KCQkJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsNCgkJCQkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2NhdGFsb2dfYXR0ciIsDQoJCQkJIAkic2VsZWN0X3ZhbHVlcyBYIGRlZmF1bHQgJyciKTsNCgkJCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7DQoJCQljYXNlICIwLjguMSI6DQoJCQkJJHJlcyA9ICRkYi0+RXhlY3V0ZSgidXBkYXRlICIuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyIHNldCBmaWVsZF90eXBlPVwndGV4dGFyZWFcJyB3aGVyZSBpc190ZXh0YXJlYT0xJyk7DQoJCQkJJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfY2F0YWxvZ19hdHRyJywgJ2lzX3RleHRhcmVhJyk7DQoJICAgICAgICAJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOw0KICAgICAgY2FzZSAiMC4xMS4zIjogICAgICAgICAgICAgICANCiAgICB9DQoNCgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOw0KPz4=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9IENhdGFsb2dlcgp2ZXJzaW9uID0gMS4wLjEKZGVzY3JpcHRpb24gPSAKYXV0aG9yID0gSm9Nb3JnCmF1dGhvcmVtYWlsID0gam9tb3JnLm1vcmdAZ21haWwuY29tCm1pbmNtc3ZlcnNpb24gPSAyLjEKbGF6eWxvYWRhZG1pbiA9IDAKbGF6eWxvYWRmcm9udGVuZCA9IDAK]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminattrs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRpbm5lcm5hdn0NCjxiciAvPg0KPGgzPnskY2F0ZWdvcnl9PC9oMz4NCntpZiAkbWVzc2FnZSAhPSAnJ308aDQ+eyRtZXNzYWdlfTwvaDQ+ey9pZn0NCiAgeyRzdGFydGZvcm19DQogIHskdGFiX2hlYWRlcnN9DQogIHskc3RhcnRfaXRlbV90YWJ9DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCTxwPnskdGl0bGVfaXRlbV9hdHRyaWJ1dGVzX2hlbHB9PC9wPg0KCTx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIiBjZWxsc3BhY2luZz0iMCI+DQoJCTx0cj48dGg+eyR0aXRsZV9maWVsZF90eXBlfTwvdGg+PHRoPnskdGl0bGVfaXRlbV9hdHRyaWJ1dGVzfTwvdGg+PHRoPnskdGl0bGVfYXR0cl9hbGlhc308L3RoPjx0aD57JHRpdGxlX2F0dHJfZGVmYXVsdH08L3RoPjx0aD57JHRpdGxlX2F0dHJfbGVuZ3RofTwvdGg+PHRoPnskdGl0bGVfc2VsZWN0X3ZhbHVlc308L3RoPjx0aD57JHRpdGxlX2F0dHJfb3JkZXJfYnl9PC90aD4NCgkJCTx0aD57KiR0aXRsZV9pc190ZXh0ZmllbGQqfTwvdGg+PHRoPnskdGl0bGVfZGVsZXRlfTwvdGg+PC90cj4NCgkgICB7Zm9yZWFjaCBmcm9tPSRhdHRyaWJ1dGVfaW5wdXRzIGl0ZW09ZW50cnl9DQoJCQl7aWYgJGVudHJ5LT50eXBlID09IDF9DQogICAgICAgICAgICA8dHI+DQogICAgICAgICAgICAgIDx0ZD57JGVudHJ5LT5maWVsZF90eXBlfTwvdGQ+PHRkPnskZW50cnktPmlucHV0fTwvdGQ+PHRkPnskZW50cnktPmFsaWFzaW5wdXR9PC90ZD48dGQ+eyRlbnRyeS0+ZGVmYXVsdGlucHV0fTwvdGQ+PHRkPnskZW50cnktPmxlbmlucHV0fTwvdGQ+PHRkPnskZW50cnktPnNlbGVjdF92YWx1ZXN9PC90ZD48dGQ+eyRlbnRyeS0+b3JkZXJfc2VsfTwvdGQ+DQoJCQkgIDx0ZD57JGVudHJ5LT5pc3RleHR8ZGVmYXVsdDowfTwvdGQ+PHRkPnskZW50cnktPmRlbGV0ZX17JGVudHJ5LT5oaWRkZW59PC90ZD48L3RyPg0KICAgICAgICAgICAgey9pZn0NCgkgICB7L2ZvcmVhY2h9DQoJPC90YWJsZT4NCjwvZGl2Pg0KeyRlbmRfdGFifQ0KeyRzdGFydF9jYXRlZ29yeV90YWJ9DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCTxwPnskdGl0bGVfY2F0ZWdvcnlfYXR0cmlidXRlc19oZWxwfTwvcD4NCgk8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSIgY2VsbHNwYWNpbmc9IjAiPg0KCQk8dHI+PHRoPnskdGl0bGVfZmllbGRfdHlwZX08L3RoPjx0aD57JHRpdGxlX2NhdGVnb3J5X2F0dHJpYnV0ZXN9PC90aD48dGg+eyR0aXRsZV9hdHRyX2FsaWFzfTwvdGg+PHRoPnskdGl0bGVfYXR0cl9kZWZhdWx0fTwvdGg+PHRoPnskdGl0bGVfYXR0cl9sZW5ndGh9PC90aD48dGg+eyR0aXRsZV9zZWxlY3RfdmFsdWVzfTwvdGg+PHRoPnskdGl0bGVfYXR0cl9vcmRlcl9ieX08L3RoPg0KCQkJPHRoPnsqJHRpdGxlX2lzX3RleHRmaWVsZCp9PC90aD48dGg+eyR0aXRsZV9kZWxldGV9PC90aD48L3RyPg0KCSAgIHtmb3JlYWNoIGZyb209JGF0dHJpYnV0ZV9pbnB1dHMgaXRlbT1lbnRyeX0NCgkJCXtpZiAkZW50cnktPnR5cGUgPT0gMn0NCgkgICAgICAgIDx0cj48dGQ+eyRlbnRyeS0+ZmllbGRfdHlwZX08L3RkPjx0ZD57JGVudHJ5LT5pbnB1dH08L3RkPjx0ZD57JGVudHJ5LT5hbGlhc2lucHV0fTwvdGQ+PHRkPnskZW50cnktPmRlZmF1bHRpbnB1dH08L3RkPjx0ZD57JGVudHJ5LT5sZW5pbnB1dH08L3RkPjx0ZD57JGVudHJ5LT5zZWxlY3RfdmFsdWVzfTwvdGQ+PHRkPnskZW50cnktPm9yZGVyX3NlbH08L3RkPg0KCQkJCTx0ZD57JGVudHJ5LT5pc3RleHR8ZGVmYXVsdDowfTwvdGQ+PHRkPnskZW50cnktPmRlbGV0ZX17JGVudHJ5LT5oaWRkZW59PC90ZD48L3RyPg0KCSAgICAgICAgey9pZn0NCgkgICB7L2ZvcmVhY2h9DQoJPC90YWJsZT4NCjwvZGl2Pg0KeyRlbmRfdGFifQ0KeyRzdGFydF9jYXRhbG9nX3RhYn0NCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJPHA+eyR0aXRsZV9jYXRhbG9nX2F0dHJpYnV0ZXNfaGVscH08L3A+DQoJPHRhYmxlIGNsYXNzPSJwYWdldGFibGUiIGNlbGxzcGFjaW5nPSIwIj4NCgkJPHRyPjx0aD57JHRpdGxlX2ZpZWxkX3R5cGV9PC90aD48dGg+eyR0aXRsZV9jYXRhbG9nX2F0dHJpYnV0ZXN9PC90aD48dGg+eyR0aXRsZV9hdHRyX2FsaWFzfTwvdGg+PHRoPnskdGl0bGVfYXR0cl9kZWZhdWx0fTwvdGg+PHRoPnskdGl0bGVfYXR0cl9sZW5ndGh9PC90aD48dGg+eyR0aXRsZV9zZWxlY3RfdmFsdWVzfTwvdGg+PHRoPnskdGl0bGVfYXR0cl9vcmRlcl9ieX08L3RoPg0KCQkJPHRoPnsqJHRpdGxlX2lzX3RleHRmaWVsZCp9PC90aD48dGg+eyR0aXRsZV9kZWxldGV9PC90aD48L3RyPg0KCSAgIHtmb3JlYWNoIGZyb209JGF0dHJpYnV0ZV9pbnB1dHMgaXRlbT1lbnRyeX0NCgkJCXtpZiAkZW50cnktPnR5cGUgPT0gM30NCgkgICAgICAgIDx0cj4NCgkgICAgICAgICAgPHRkPnskZW50cnktPmZpZWxkX3R5cGV9PC90ZD48dGQ+eyRlbnRyeS0+aW5wdXR9PC90ZD48dGQ+eyRlbnRyeS0+YWxpYXNpbnB1dH08L3RkPjx0ZD57JGVudHJ5LT5kZWZhdWx0aW5wdXR9PC90ZD48dGQ+eyRlbnRyeS0+bGVuaW5wdXR9PC90ZD48dGQ+eyRlbnRyeS0+c2VsZWN0X3ZhbHVlc308L3RkPjx0ZD57JGVudHJ5LT5vcmRlcl9zZWx9PC90ZD4NCgkgICAgICAgICAgPHRkPnskZW50cnktPmlzdGV4dHxkZWZhdWx0OjB9PC90ZD48dGQ+eyRlbnRyeS0+ZGVsZXRlfXskZW50cnktPmhpZGRlbn08L3RkPjwvdHI+DQoJICAgICAgICB7L2lmfQ0KCSAgIHsvZm9yZWFjaH0NCgk8L3RhYmxlPg0KPC9kaXY+DQp7JGVuZF90YWJ9DQoJPHA+eyR0aXRsZV9hdHRyX2xlbmd0aF9oZWxwfTwvcD4NCnskdGFiX2Zvb3RlcnN9DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fTwvcD4NCgk8L2Rpdj4NCnskZW5kZm9ybX0NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/adminglobalops.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRpbm5lcm5hdn0KPGJyIC8+CjxoMz57JGNhdGVnb3J5fTwvaDM+CntpZiAkbWVzc2FnZSE9Jyd9PGg0PnskbWVzc2FnZX08L2g0PnsvaWZ9Cnskc3RhcnRmb3JtfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY2F0ZWdvcnlfcmVjdXJzZX08L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jYXRlZ29yeV9yZWN1cnNlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaXRlbXNfcGVyX3BhZ2V9PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaXRlbXNfcGVyX3BhZ2V9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9pdGVtX3NvcnRfb3JkZXJ9PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaXRlbV9zb3J0X29yZGVyfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH08L3A+Cgk8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogVG9wIGxpbmtzIG5hdiAqfQ0KeyRpbm5lcm5hdn0NCg0KeyogYWRtaW4gdXNlciBtZXNzYWdlcyAqfQ0KPGgzPnskc2VjdGlvbn08L2gzPg0Ke2lmICRtZXNzYWdlICE9ICcnfQ0KICA8aDQ+eyRtZXNzYWdlfTwvaDQ+DQp7L2lmfQ0KDQp7KiBUQUJTICp9DQp7JHRhYl9oZWFkZXJzfQ0KICB7JHN0YXJ0X2l0ZW1fcGFnZV90ZW1wbGF0ZXNfdGFifQ0KICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KICAgICAgPHRoZWFkPg0KICAgICAgICA8dHI+DQogICAgICAgICAgPHRoPnskdGl0bGVfdGVtcGxhdGV9PC90aD4NCiAgICAgICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KICAgICAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQogICAgICAgIDwvdHI+DQogICAgICA8L3RoZWFkPg0KICAgICAgPHRib2R5Pg0KICAgICAgICB7Zm9yZWFjaCBmcm9tPSRQYWdlSXRlbXMgaXRlbT1lbnRyeX0NCiAgICAgICAgICB7Y3ljbGUgdmFsdWVzPSJyb3cxLHJvdzIiIGFzc2lnbj0ncm93Y2xhc3MnfQ0KDQogICAgICAgICAgPHRyIGNsYXNzPSJ7JHJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfSc7Ij4NCiAgICAgICAgICAgIDx0ZD57JGVudHJ5LT50aXRsZX08L3RkPg0KICAgICAgICAgICAgPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+DQogICAgICAgICAgICA8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIHsvZm9yZWFjaH0NCiAgICAgIDwvdGJvZHk+ICAgIA0KICAgIDwvdGFibGU+DQogICAgPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KICAgICAgPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPg0KICAgIDwvZGl2Pg0KICB7JGVuZF90YWJ9DQogIA0KICB7JHN0YXJ0X2NhdGVnb3J5X3BhZ2VfdGVtcGxhdGVzX3RhYn0NCiAgICA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4NCiAgICAgIDx0aGVhZD4NCiAgICAgICAgPHRyPg0KICAgICAgICAgIDx0aD57JHRpdGxlX3RlbXBsYXRlfTwvdGg+DQogICAgICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCiAgICAgICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KICAgICAgICA8L3RyPg0KICAgICAgPC90aGVhZD4NCiAgICAgIDx0Ym9keT4NCiAgICAgICAge2ZvcmVhY2ggZnJvbT0kUGFnZUNhdGVnb3JpZXMgaXRlbT1lbnRyeX0NCiAgICAgICAgICB7Y3ljbGUgdmFsdWVzPSJyb3cxLHJvdzIiIGFzc2lnbj0ncm93Y2xhc3MnfQ0KDQogICAgICAgICAgPHRyIGNsYXNzPSJ7JHJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JHJvd2NsYXNzfSc7Ij4NCiAgICAgICAgICAgIDx0ZD57JGVudHJ5LT50aXRsZX08L3RkPg0KICAgICAgICAgICAgPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+DQogICAgICAgICAgICA8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIHsvZm9yZWFjaH0NCiAgICAgIDwvdGJvZHk+ICAgIA0KICAgIDwvdGFibGU+DQogICAgPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPg0KICAgICAgPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPg0KICAgIDwvZGl2Pg0KICB7JGVuZF90YWJ9DQogIA0KICB7JHN0YXJ0X3ByaW50YWJsZV9jYXRhbG9nX3RlbXBsYXRlc190YWJ9DQogICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+DQogICAgICA8dGhlYWQ+DQogICAgICAgIDx0cj4NCiAgICAgICAgICA8dGg+eyR0aXRsZV90ZW1wbGF0ZX08L3RoPg0KICAgICAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQogICAgICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgPC90aGVhZD4NCiAgICAgICAgPHRib2R5Pg0KICAgICAgICB7Zm9yZWFjaCBmcm9tPSRQcmludGFibGVDYXRhbG9ncyBpdGVtPWVudHJ5fQ0KICAgICAgICAgIHtjeWNsZSB2YWx1ZXM9InJvdzEscm93MiIgYXNzaWduPSdyb3djbGFzcyd9DQoNCiAgICAgICAgICA8dHIgY2xhc3M9Inskcm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9JzsiPg0KICAgICAgICAgICAgPHRkPnskZW50cnktPnRpdGxlfTwvdGQ+DQogICAgICAgICAgICA8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4NCiAgICAgICAgICAgIDx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgey9mb3JlYWNofQ0KICAgICAgPC90Ym9keT4gICAgDQogICAgPC90YWJsZT4NCiAgICA8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+DQogICAgICA8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkbGlua308L3A+DQogICAgPC9kaXY+DQogIHskZW5kX3RhYn0NCiAgDQogIHskc3RhcnRfaXRlbV9jb21wYXJpc29uX3RlbXBsYXRlc190YWJ9DQogICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+DQogICAgICA8dGhlYWQ+DQogICAgICAgIDx0cj4NCiAgICAgICAgICA8dGg+eyR0aXRsZV90ZW1wbGF0ZX08L3RoPg0KICAgICAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQogICAgICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCiAgICAgICAgPC90cj4NCiAgICAgIDwvdGhlYWQ+DQogICAgICA8dGJvZHk+DQogICAgICAgIHtmb3JlYWNoIGZyb209JEl0ZW1Db21wYXJpc29ucyBpdGVtPWVudHJ5fQ0KICAgICAgICAgIHtjeWNsZSB2YWx1ZXM9InJvdzEscm93MiIgYXNzaWduPSdyb3djbGFzcyd9DQoNCiAgICAgICAgICA8dHIgY2xhc3M9Inskcm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9JzsiPg0KICAgICAgICAgICAgPHRkPnskZW50cnktPnRpdGxlfTwvdGQ+DQogICAgICAgICAgICA8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4NCiAgICAgICAgICAgIDx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgey9mb3JlYWNofQ0KICAgICAgPC90Ym9keT4gICAgDQogICAgPC90YWJsZT4NCiAgICA8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+DQogICAgICA8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkbGlua308L3A+DQogICAgPC9kaXY+DQogIHskZW5kX3RhYn0NCiAgDQogIHskc3RhcnRfZmVhdHVyZV9saXN0X3RlbXBsYXRlc190YWJ9DQogICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+DQogICAgICA8dGhlYWQ+DQogICAgICAgIDx0cj4NCiAgICAgICAgICA8dGg+eyR0aXRsZV90ZW1wbGF0ZX08L3RoPg0KICAgICAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQogICAgICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCiAgICAgICAgPC90cj4NCiAgICAgIDwvdGhlYWQ+DQogICAgICA8dGJvZHk+DQogICAgICAgIHtmb3JlYWNoIGZyb209JEZlYXR1cmVMaXN0cyBpdGVtPWVudHJ5fQ0KICAgICAgICAgIHtjeWNsZSB2YWx1ZXM9InJvdzEscm93MiIgYXNzaWduPSdyb3djbGFzcyd9DQoNCiAgICAgICAgICA8dHIgY2xhc3M9Inskcm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9JzsiPg0KICAgICAgICAgICAgPHRkPnskZW50cnktPnRpdGxlfTwvdGQ+DQogICAgICAgICAgICA8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4NCiAgICAgICAgICAgIDx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgey9mb3JlYWNofQ0KICAgICAgPC90Ym9keT4gICAgDQogICAgPC90YWJsZT4NCiAgICA8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+DQogICAgICA8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkbGlua308L3A+DQogICAgPC9kaXY+DQogIHskZW5kX3RhYn0NCnskdGFiX2Zvb3RlcnN9DQp7KiBUT0RPOiBtYWtlIHN1cmUgd2UgaGF2ZSBvbmUgeyRhZGRsaW5rLXR5cGUtfSBwZXIgdGVtcGxhdGUgdHlwZSAqfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRpbm5lcm5hdn0KPGJyIC8+CjxoMz57JGNhdGVnb3J5fTwvaDM+CntpZiAkbWVzc2FnZSE9Jyd9PHAgY2xhc3M9InBhZ2VtZXNzYWdlIj57JG1lc3NhZ2V9PC9wPnsvaWZ9Cnskc3RhcnRmb3JtfQp7JHRhYl9oZWFkZXJzfQp7JHN0YXJ0X2l0ZW1faW1hZ2VfdGFifQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaXRlbV9pbWFnZV9jb3VudH08L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pdGVtX2ltYWdlX2NvdW50fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfc2hvd19vbmx5X2V4aXN0aW5nX2ltYWdlc308L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9zaG93X29ubHlfZXhpc3RpbmdfaW1hZ2VzfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaXRlbV9pbWFnZV9zaXplX2hlcm99PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaXRlbV9pbWFnZV9zaXplX2hlcm99PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9pdGVtX2ltYWdlX3NpemVfdGh1bWJuYWlsfTwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2l0ZW1faW1hZ2Vfc2l6ZV90aHVtYm5haWx9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9pdGVtX2ltYWdlX3NpemVfY2F0ZWdvcnl9PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaXRlbV9pbWFnZV9zaXplX2NhdGVnb3J5fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaXRlbV9pbWFnZV9zaXplX2NhdGFsb2d9PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaXRlbV9pbWFnZV9zaXplX2NhdGFsb2d9PC9wPgoJPC9kaXY+CnskZW5kX3RhYn0KeyRzdGFydF9maWxlX3RhYn0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2l0ZW1fZmlsZV9jb3VudH08L3A+CgkgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pdGVtX2ZpbGVfY291bnR9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9pdGVtX2ZpbGVfdHlwZXN9PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaXRlbV9maWxlX3R5cGVzfTwvcD4KCTwvZGl2Pgp7JGVuZF90YWJ9Cnskc3RhcnRfY2F0ZWdvcnlfaW1hZ2VfdGFifQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY2F0ZWdvcnlfaW1hZ2VfY291bnR9PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2F0ZWdvcnlfaW1hZ2VfY291bnR9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9jYXRlZ29yeV9pbWFnZV9zaXplX2hlcm99PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2F0ZWdvcnlfaW1hZ2Vfc2l6ZV9oZXJvfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfY2F0ZWdvcnlfaW1hZ2Vfc2l6ZV90aHVtYm5haWx9PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2F0ZWdvcnlfaW1hZ2Vfc2l6ZV90aHVtYm5haWx9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9jYXRlZ29yeV9yZWN1cnNlfTwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2NhdGVnb3J5X3JlY3Vyc2V9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9pdGVtc19wZXJfcGFnZX08L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pdGVtc19wZXJfcGFnZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2l0ZW1fc29ydF9vcmRlcn08L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9pdGVtX3NvcnRfb3JkZXJ9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9mbHVzaF9jYXRzfTwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2ZsdXNoX2NhdHN9PC9wPgoJPC9kaXY+CnskZW5kX3RhYn0KeyRzdGFydF9wcmludGFibGVfdGFifQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfcHJpbnRhYmxlX3NvcnRfb3JkZXJ9PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcHJpbnRhYmxlX3NvcnRfb3JkZXJ9PC9wPgoJPC9kaXY+CnskZW5kX3RhYn0KeyRzdGFydF9pbWFnZV90YWJ9Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9zaG93X21pc3NpbmdfaW1hZ2VzfTwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3Nob3dfbWlzc2luZ19pbWFnZXN9PC9wPgoJPC9kaXY+CnskZW5kX3RhYn0KeyRzdGFydF9wYXRoX3RhYn0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJeyRwYXRoX2hlbHB9Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2ltYWdlX3VwbG9hZF9wYXRofTwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2ltYWdlX3VwbG9hZF9wYXRofTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfaW1hZ2VfcHJvY19wYXRofTwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2ltYWdlX3Byb2NfcGF0aH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2ZpbGVfdXBsb2FkX3BhdGh9PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZmlsZV91cGxvYWRfcGF0aH08L3A+Cgk8L2Rpdj4KCnskZW5kX3RhYn0KeyR0YWJfZm9vdGVyc30KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgo8bGk+VmVyc2lvbiAwLjExLjMgLSBEZWNlbWJlciAyMDEyLgogICAgPHVsPgogICAgICAgIDxsaT48c3Ryb25nPkJ1ZyBmaXg6IFsjNDc4MV0gLSAgPC9zdHJvbmc+IGNtc19zZWxmbGluayBkb2VzbnQgd29yayA8L3N0cm9uZz4uPC9saT4KICAgIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDAuMTEuMiAtIE5vdmVtYmVyIDIwMTIuCiAgICA8dWw+CiAgICAgICAgPGxpPjxzdHJvbmc+QnVnIGZpeDogLSB7bGl0ZXJhbH17Q2F0YWxvZ2VyIGFjdGlvbj0nYWxsJyBzdWJfdGVtcGxhdGU9J215X3N1Yl90ZW1wbGF0ZScgYWxpYXM9Jy8nfXsvbGl0ZXJhbH08L3N0cm9uZz4gYnJlYWtzIHdpdGggYSBQSFAgZXJyb3IuPC9saT4KICAgIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDAuMTEuMSAtIE9jdG9iZXIgMjAxMi4KICAgIDx1bD4KICAgICAgICA8bGk+PHN0cm9uZz5CdWcgZml4OiBbIzg0MF0gLTwvc3Ryb25nPiBSZXBlYXRlZCBjb250ZW50IG91dHB1dCBpZiBtdWx0aXBsZSBjb250ZW50IHRhZ3MgaW4gdGVtcGxhdGUuPC9saT4KICAgICAgICA8bGk+PHN0cm9uZz5CdWcgZml4OiBbIzgzODFdIC0ge2xpdGVyYWx9e3Byb2Nlc3MgcGFnZWRhdGF9ey9saXRlcmFsfTwvc3Ryb25nPiBicmVha3MgY2F0YWxvZ2VyIHRlbXBsYXRlLjwvbGk+CiAgICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAwLjExLjAgLSBBdWd1c3QgMjAxMi4KICA8dWw+CiAgICA8bGk+TnVtZXJvdXMgZml4ZXMgZm9yIENNU01TIDEuMTEgY29tcGF0aWJpbGl0eTs8L2xpPgogICAgPGxpPkZvcmdlIFJ1bGVzIGNvbXBsaWFudDs8L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDAuOS4xIC0gSmFuIDIwMTEuIEJ1ZyBmaXggZm9yIGNoZWNrYm94IGl0ZW0gYXR0cmlidXRlIHR5cGVzLjwvbGk+CjxsaT5WZXJzaW9uIDAuOSAtIE5vdiAyMDEwLgogIDx1bD4KICAgIDxsaT5OdW1lcm91cyBmaXhlcyBmb3IgQ01TTVMgMS45IGNvbXBhdGliaWxpdHk8L2xpPgogICAgPGxpPlRlZCdzIGV4Y2VsbGVudCBkcm9wZG93biBhdHRyaWJ1dGUgdHlwZTwvbGk+Cgk8bGk+T3B0aW1pemVkICJyYW5kb20iIGFjdGlvbiBmb3Igc2l0ZXMgd2l0aCBodWdlIG51bWJlcnMgb2YgaXRlbSBwYWdlczwvbGk+CiAgICA8bGk+Q2hlY2tib3ggYXR0cmlidXRlIHR5cGU8L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDAuOC4xICh1bnJlbGVhc2VkLCBzZWUgMC45KTwvbGk+CjxsaT5WZXJzaW9uIDAuOC4wIC0gU2VwIDIwMTAuCiAgPHVsPgogICAgPGxpPlJlb3JkZXJpbmcgb2YgYXR0cmlidXRlczwvbGk+CiAgICA8bGk+QXR0cidzIG5vdyBjYW4gaGF2ZSBsZW5ndGhzIGFuZCBkZWZhdWx0IHZhbHVlczwvbGk+CiAgICA8bGk+QXBwbHkgYnV0dG9uIGZvciB0ZW1wbGF0ZXM8L2xpPgogICAgPGxpPkZpeGVkIHRvIHByaW50YWJsZSBjYXRhbG9nLXN0dWZmPC9saT4KICAgIDxsaT5CdWlsdC1pbiBzb3J0aW5nIGZ1bmN0aW9uYWxpdHk8L2xpPgogICAgPGxpPkFzc29ydGVkIGJ1Z2ZpeGVzLCBjbGVhbnVwcyBldGM8L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDAuNy43IC0gRmViIDIwMTAuIEFkZGVkIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBJdGVtcy4gQWRkZWQgaXRlbSBjb21wYXJpc29uIGFjdGlvbi48L2xpPgo8bGk+VmVyc2lvbiAwLjcuNiAtIDEwIFNlcHQgMjAwOS4gRml4IGZvciB0aGF0IGxhc3QgZml4LiBEb2ghPC9saT4KPGxpPlZlcnNpb24gMC43LjUgLSAxMCBTZXB0IDIwMDkuIEZpeGVkIFByaW50YWJsZSBDYXRhbG9nLi4uIGRpZCB0aGF0IGV2ZXIgd29yaz8/PC9saT4KPGxpPlZlcnNpb24gMC43LjQgLSAyMiBKdW5lIDIwMDkuIEluY29ycG9yYXRlZCBDYWxndXlcJ3MgZml4ZXMgZm9yIDEuNi48L2xpPgo8bGk+VmVyc2lvbiAwLjcuMyAtIDE2IEp1bmUgMjAwOS4gQnVnIGZpeGVzIGJ5IE51bm8uIE1hZGUgbWF4IENNUyB2ZXJzaW9uIDEuNS40IGluIHByZXAgZm9yIENNUyAxLjYgcmVsZWFzZS48L2xpPgo8bGk+VmVyc2lvbiAwLjcuMiAtIDE0IE1hcmNoIDIwMDkuIEJ1ZyBmaXhlcyBieSBOdW5vIENvc3RhLjwvbGk+CjxsaT5WZXJzaW9uIDAuNy4xIC0gMjkgU2VwdCAyMDA4LiBBZGRlZCBWYXJpYWJsZSBtZXRob2QgZm9yIEphdmllciBTYW4gSnVhbiBDb3N0aWxhcy48L2xpPgo8bGk+VmVyc2lvbiAwLjcgLSAxNyBNYXJjaCAyMDA4LiA8ZW0+RmluYWxseTwvZW0+IGFkZGVkIHBlci1wYWdlIG1ldGEtZGF0YS4gQW5kIHRoZXJlIHdhcyBncmVhdCBjZWxlYnJhdGlvbiBpbiB0aGUgc3RyZWV0cywgYW5kIGRhbmNpbmcgaW4gdGhlIHRvd24gc3F1YXJlLiBBbHNvIGFkZGVkIGluIG1hbnkgSFRNTCBhbmQgbG9jYWxpemF0aW9uIGZpeGVzIGNvbnRyaWJ1dGVkIGJ5IE51bm8gQ29zdGEuPC9saT4KPGxpPlZlcnNpb24gMC42LjIgLSA3IEphbnVhcnkgMjAwNy4gRml4ZWQgbmFzdHkgYnVnIHdoZXJlIHVwZ3JhZGluZyBtYWtlcyBpdCBsb29rIGxpa2UgYWxsIHlvdXIgbm90ZSBmaWVsZHMgYXJlIGxvc3QuPC9saT4KPGxpPlZlcnNpb24gMC42LjEgLSAyIEphbnVhcnkgMjAwNy4gRml4ZWQgbmFzdHkgYnVnIHdoZXJlIGNoYW5naW5nIGNvbnRlbnQgdHlwZSBmcm9tICJjb250ZW50IiB0byBjYXRhbG9nIGNvbnRlbnQgdHlwZXMgcmVuYW1lZCBhbGwgY2F0YWxvZyBpbWFnZXMuPC9saT4KPGxpPlZlcnNpb24gMC42IC0gMjkgRGVjZW1iZXIgMjAwNy4gPHVsPgo8bGk+QnVnIGZpeDogSW1hZ2VzIGRvblwndCBnZXQgImxvc3QiIHdoZW4gcGFnZSBhbGlhcyBjaGFuZ2VzLjwvbGk+CjxsaT5CdWcgZml4OiBBdHRyaWJ1dGUgY29udGVudCBkb2VzblwndCBnZXQgImxvc3QiIHdoZW4gYXR0cmlidXRlcyBhcmUgcmVuYW1lZC48L2xpPgo8bGk+QnVnIGZpeDogRml4ZWQgUHJpbnRhYmxlIENhdGFsb2cuIFdvcmtzIGZvciBmaXJzdCB0aW1lIHNpbmNlIHYuMC40IG9yIHRoZXJlYWJvdXRzLjwvbGk+CjxsaT5CdWcgZml4OiBOb3cgaG9ub3JzIHN5c3RlbSBwcmVmZXJlbmNlIGZvciBXWVNJV1lHIGVkaXRpbmcgb2YgdGV4dCBhcmVhcy48L2xpPgo8bGk+RmVhdHVyZTogQXR0cmlidXRlcyBtYXkgbm93IGJlIHRleHQgYXJlYXMuPC9saT4KPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMC41LjYgLSAxMCBEZWNlbWJlciAyMDA3LiBUYXJkeSByb2xsb3V0IG9mIGZpeGVzOiA8dWw+CjxsaT5BZGRlZCBjb2RlIHRvIHByZXZlbnQgc2hvd2luZyBvZiBub24tdXBsb2FkZWQgaW1hZ2VzLCBjYXRlZ29yeSBwYWdlIGJ1ZmZlciBmbHVzaGluZyBmb3IgZXh0cmVtZSBjYXNlcywgbWlub3IgYnVnIGZpeGVzPC9saT4KPGxpPkZpeCBmb3IgJ3JlY2VudCcgYWN0aW9uIHdoZW4gYWxpYXMgaXMgLzwvbGk+CjxsaT5GaXggZm9yIHRoZSBwcm9ibGVtIHdoZXJlIGNhdGFsb2dzIHdpdGggbW9yZSB0aGFuIHRlbiBjYXRlZ29yaWVzIGhhdmUgaXRlbXMgZGlzcGxheWVkIGluIGluY29ycmVjdCBjYXRlZ29yaWVzPC9saT48L3VsPjwvbGk+CjxsaT5WZXJzaW9uIDAuNS41IC0gMjAgSnVuZSAyMDA3LiBGaXggZm9yIENvbnRlbnQgQWxpYXMgc3VwcG9ydCAtIHJlcXVpcmVzIENvbnRlbnQgQWxpYXMgdi4gMC42LjEuPC9saT4KPGxpPlZlcnNpb24gMC41LjQgLSAxOSBKdW5lIDIwMDcuIEFkZGVkICJhbGwiIGZlYXR1cmUgbGlzdC48L2xpPgo8bGk+VmVyc2lvbiAwLjUuMyAtIDIxIFNlcHRlbWJlciAyMDA2LiBBZGRlZCBsaW5rcyB0byBzb3VyY2UgKG5vbi1yZXNjYWxlZCkgaW1hZ2VzLCBhbmQgYWRkZWQgaW1hZ2UgZGVsZXRlIGZ1bmN0aW9uYWxpdHkuPC9saT4KPGxpPlZlcnNpb24gMC41LjIgLSAxNyBTZXB0ZW1iZXIgMjAwNi4gUmVtb3ZlZCBkZWJ1ZyBvdXRwdXQsIHJldmlzZWQgaW1hZ2Ugc3lzdGVtIChmaXhlZCBidWdzKS4gQ2FjaGluZyBidWcgc2VlbXMgdG8gcmVtYWluLjwvbGk+CjxsaT5WZXJzaW9uIDAuNS4xIC0gMjQgQXVndXN0IDIwMDYuIChjYWxndXkxMDAwKSwgVXBwZWQgTWluaW11bUNNU1ZlcnNpb24gdG8gMS4wLXN2biwgYW5kIG1vcmUgMS4wIGNoYW5nZXMgd2VyZSBhZGRlZCAocmVtb3ZlZCBzdGF0aWMgbWV0aG9kcyk8L2xpPgo8bGk+VmVyc2lvbiAwLjUgLSAxNiBBdWd1c3QgMjAwNi4gQXNzb3J0ZWQgY29udHJpYnV0ZWQgYnVnIGZpeGVzIGZvciBDTVMgTVMgMS4wLCAgbmV3IG9wdGlvbnMgZm9yIGltYWdlcy48L2xpPgo8bGk+VmVyc2lvbiAwLjQuMiAtIDI4IE1heSAyMDA2LiBCdWcgZml4IGZvciBhdHRyaWJ1dGVzIGluIGNhdGVnb3J5IHBhZ2VzLiBBZGRlZCAiLyIgcGFnZV9hbGlhcyBmb3IgZmVhdHVyZSBsaXN0cy48L2xpPgo8bGk+VmVyc2lvbiAwLjQuMSAtIDIzIE1heSAyMDA2LiBCdWcgZml4IHRvIG1ha2Ugd29yayB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIENNUyBNUy48L2xpPgo8bGk+VmVyc2lvbiAwLjQgLSAyMiBNYXkgMjAwNi4gQnVnIGZpeGVzLCBGZWF0dXJlIExpc3RzLjwvbGk+CjxsaT5WZXJzaW9uIDAuMyAtICh1bnJlbGVhc2VkLCBwdWJsaXNoZWQgZnJvbSBzdm4pPC9saT4KPGxpPlZlcnNpb24gMC4yIC0gMjMgTWFyY2ggMjAwNi4gTnVtZXJvdXMgYnVnIGZpeGVzLiBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuIE1lbW9yeSBmb290cHJpbnQgb3B0aW1pemF0aW9ucy4gTm93IHVzZXMgdGhlIENNUyAwLjEyIE1vZHVsZSBBUEkuPC9saT4KPGxpPlZlcnNpb24gMC4xLjUgLSAxNyBOb3ZlbWJlciAyMDA1LiBJbml0aWFsIFJlbGVhc2UuIEplc3VzLCB0aGF0IHRvb2sgYSBsb25nIHRpbWUuPC9saT4KPGxpPlZlcnNpb24gMC4xIC0gMTkgTWFyY2ggMjAwNS4gUHJvamVjdCBJbml0aWF0aW9uLjwvbGk+CjwvdWw+]]></data>
	</file>
	<file>
	  <filename>/templates/edittemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRtZXNzYWdlIT0nJ308cCBjbGFzcz0icGFnZW1lc3NhZ2UiPnskbWVzc2FnZX08L3A+ey9pZn0NCnskaW5uZXJuYXZ9DQo8YnIgLz4NCjxoMz57JG9wfTwvaDM+DQoNCnskc3RhcnRmb3JtfQ0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+KnskdGl0bGVfdGl0bGV9OjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90aXRsZX08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4qeyR0aXRsZV90ZW1wbGF0ZV90eXBlfTo8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdGVtcGxhdGVfdHlwZX08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4qeyR0aXRsZV90ZW1wbGF0ZX06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3RlbXBsYXRlfTwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGlkPSJhdmFpbGFibGUiPnskYXZhaWxfYXR0cnN9PC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fSB7JGFwcGx5fTwvcD4NCgk8L2Rpdj4NCnskZW5kZm9ybX0NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgxPnskZXJyb3J9PC9oMT4KeyRlcnJvcn0=]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogVGFicyBIZWFkZXJzICp9DQo8ZGl2IGlkPSJwYWdlX3RhYnMiPg0KICA8ZGl2IGlkPSJnZW5lcmFsIj4NCiAgICBXaGF0IElzIEl0DQogIDwvZGl2PiAgICANCiAgPGRpdiBpZD0iaG93Ij4NCiAgICBIb3cgVG8gVXNlIEl0DQogIDwvZGl2PiAgICANCiAgPGRpdiBpZD0iZmVhdHVyZWxpc3RzIj4NCiAgICBGZWF0dXJlIExpc3RzDQogIDwvZGl2PiAgICANCiAgPGRpdiBpZD0iaW1hZ2VzeXMiPg0KICAgIENhdGFsb2dlciBJbWFnZSBTeXN0ZW0NCiAgPC9kaXY+DQogIDxkaXYgaWQ9ImFkdmFuY2VkIj4NCiAgICBDdXN0b21pemF0aW9uIGFuZCBBZHZhbmNlZCBUb3BpY3MNCiAgPC9kaXY+DQogIDxkaXYgaWQ9IndoYXRzbmV3Ij4NCiAgICBXaGF0J3MgbmV3DQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJhYm91dCI+DQogICAgQWJvdXQNCiAgPC9kaXY+DQo8L2Rpdj4gICAgICAgDQp7KiBUYWJzIEhlYWRlcnMgKn0NCg0KPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4NCg0KeyogVGFicyBDb250ZW50cyAqfQ0KPGRpdiBpZD0icGFnZV9jb250ZW50Ij4NCnsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KeyogV2hhdCBJcyBJdCAqfQ0KICA8ZGl2IGlkPSJnZW5lcmFsX2MiPg0KICAgIDxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KICAgIDxwPlRoaXMgbW9kdWxlIGxldHMgeW91IGNyZWF0ZSBvbmxpbmUgY2F0YWxvZ3Mgb3IgcG9ydGZvbGlvcy4gQ2F0YWxvZ3MgY29uc2lzdCBvZiA8c3Ryb25nPjwvc3Ryb25nPiJDYXRhbG9nIEl0ZW1zIjwvc3Ryb25nPiB3aGljaCBjb3VsZCBiZSBwcm9kdWN0cywgd29ya3Mgb2YgYXJ0LCBvciB0aGUgbGlrZSwgYW5kIDxzdHJvbmc+IkNhdGFsb2cgQ2F0ZWdvcmllcyI8L3N0cm9uZz4gd2hpY2ggY291bGQgYmUgaXRlbSBjYXRlZ29yaWVzIG9yIG90aGVyIG5hdHVyYWwgZGl2aXNpb25zIG9mIHRoZSBjYXRhbG9nLjwvcD4NCiAgICA8cD5DYXRlZ29yaWVzIG1heSBiZSBkZWZpbmVkIGhpZXJhcmNoaWNhbGx5ICh1c2luZyB0aGUgc3RhbmRhcmQgQ01TIE1hZGUgU2ltcGxlIGNvbnRlbnQgbGlzdCkuIENhdGVnb3J5IHBhZ2VzIGNhbiBkaXNwbGF5IGl0ZW1zIGluIHRoZSBjYXRlZ29yeSBhbmQvb3Igc3ViY2F0ZWdvcmllcywgb3B0aW9uYWxseSByZWN1cnNpbmcgdGhyb3VnaCBzdWItY2F0ZWdvcmllcy4gVGhpcyBiZWhhdmlvciBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1jYXRlZ29yeSBiYXNpcy48L1A+DQogICAgPHA+VGhlcmUgaXMgYWxzbyBhIDxzdHJvbmc+IlByaW50YWJsZSBDYXRhbG9nIjwvc3Ryb25nPiwgd2hpY2ggcmVwcmVzZW50cyB0aGUgd2hvbGUgY29sbGVjdGlvbiBvZiBDYXRhbG9nIEl0ZW1zIG9uIGEgc2luZ2xlIHBhZ2UuPC9wPg0KICAgIDxwPlRoZSBtb2R1bGUgaGFzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIDxzdHJvbmc+IkNvbnRlbnQgQWxpYXNlcyI8L3N0cm9uZz4gKGEgbW9kdWxlIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2NvbnRlbnRhbGlhc2VzIj50aGUgRGV2ZWxvcGVyIEZvcmdlPC9hPiksIHdoaWNoIGFsbG93cyB5b3UgdG8gcGxhY2UgYW55IENhdGFsb2cgSXRlbSBpbnRvIG11bHRpcGxlIENhdGFsb2cgQ2F0ZWdvcmllcy48L3A+DQogICAgPHA+PGRpdiBjbGFzcz0nd2FybmluZyc+QXMgb2YgdmVyc2lvbiAxLjAgQ2F0YWxvZ2VyIG9ubHkgd29ya3Mgb24gQ01TTVMgMi54LjwvZGl2PjwvcD4NCiAgPC9kaXY+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICB7KiBIb3cgVG8gVXNlIEl0ICp9DQogIDxkaXYgaWQ9Imhvd19jIj4NCiAgICA8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4NCiAgICA8cD5XaGVuIHlvdSBpbnN0YWxsIHRoaXMgbW9kdWxlLCBpdCBjcmVhdGVzIHRocmVlIG5ldyBDb250ZW50IFR5cGVzOiA8c3Ryb25nPkNhdGFsb2cgSXRlbTwvc3Ryb25nPiwgPHN0cm9uZz5DYXRhbG9nIENhdGVnb3J5PC9zdHJvbmc+LCBhbmQgPHN0cm9uZz5QcmludGFibGUgQ2F0YWxvZzwvc3Ryb25nPi4gV2hlbiB5b3UncmUgaW4geW91ciBzaXRlIGFkbWluaXN0cmF0aW9uIGNhdGVnb3J5LCB5b3UgYWRkIDxzdHJvbmc+Q2F0YWxvZyBJdGVtczwvc3Ryb25nPiBhbmQgPHN0cm9uZz5DYXRhbG9nIENhdGVnb3JpZXM8L3N0cm9uZz4ganVzdCBhcyB5b3Ugd291bGQgYW55IG90aGVyIGtpbmQgb2YgcGFnZS4gU2VsZWN0IENvbnRlbnQgJmd0OyBQYWdlcyAmZ3Q7IEFkZCBDb250ZW50LCBhbmQgdGhlbiBzZWxlY3QgPHN0cm9uZz4iQ2F0YWxvZyBJdGVtIjwvc3Ryb25nPiBvciA8c3Ryb25nPiJDYXRhbG9nIENhdGVnb3J5Ijwvc3Ryb25nPiBmcm9tIHRoZSA8c3Ryb25nPkNvbnRlbnQgVHlwZSBwdWxsZG93bjwvc3Ryb25nPi48L3A+DQogICAgPGg0PkNhdGFsb2cgSXRlbXM8L2g0Pg0KICAgIDxwPkFkZGluZyBhIDxzdHJvbmc+Q2F0YWxvZyBJdGVtPC9zdHJvbmc+IGlzIHNpbWlsYXIgdG8gYWRkaW5nIGFuIG9yZGluYXJ5IHBhZ2UgdG8geW91ciBzaXRlLiBUaGUgZGF0YSBmaWVsZHMgZm9yIHRoZSBJdGVtIGFyZSBub3QgZXhhY3RseSB0aGUgc2FtZSwgaG93ZXZlci4gQWxzbyBub3RlIHRoYXQgaW4gdGhlICJJbWFnZXMiIHRhYiwgeW91IGNhbiBzZWxlY3QgbXVsdGlwbGUgaW1hZ2VzIHRvIHVwbG9hZCBmb3IgdGhlIGl0ZW0uIFdoZW4geW91IHVwbG9hZCBpbWFnZXMsIHRoZSBzeXN0ZW0gd2lsbCBzaXplIHRoZW0gYXBwcm9wcmlhdGVseSBmb3IgdGhlIGNhdGFsb2csIGNyZWF0ZSB0aHVtYm5haWxzIGZvciB1c2UgaW4gdGhlIEl0ZW0ncyBwYWdlLCBjcmVhdGUgdGh1bWJuYWlscyBmb3IgYW55IENhdGVnb3J5IHBhZ2VzLCBhbmQgc28gb24uPC9wPg0KICAgIDxwPjxkaXYgY2xhc3M9J3dhcm5pbmcnPlNlZSBpbWFnZSB1c2UgYmVsb3cuPC9kaXY+PC9wPg0KDQogICAgPGg0PkNhdGFsb2cgQ2F0ZWdvcmllczwvaDQ+DQogICAgPHA+QSA8c3Ryb25nPkNhdGFsb2cgQ2F0ZWdvcnk8L3N0cm9uZz4gaXMgdXNlZCBmb3Igb3JnYW5pemluZyB5b3VyIGNhdGFsb2cgaXRlbXMuIEl0IHByb3ZpZGVzIGEgcGFnZSB0aGF0IGxpc3RzIENhdGFsb2dlciBjb250ZW50IHRoYXQgaXMgY29udGFpbmVkIGJ5IGl0LiBBIENhdGFsb2cgSXRlbSBpcyBjb25zaWRlcmVkIHRvIGJlIHBhcnQgb2YgYSBDYXRhbG9nIENhdGVnb3J5IGlmIGl0IGlzIGJlbG93IHRoYXQgQ2F0ZWdvcnkgaW4gdGhlIFNpdGUgSGllcmFyY2h5LiBDYXRlZ29yaWVzIGNhbiBzaW1pbGFybHkgaW5jbHVkZSBvdGhlciBDYXRlZ29yaWVzLjwvcD4NCiAgICA8cD5DYXRhbG9nIENhdGVnb3JpZXMgaGF2ZSBhIG51bWJlciBvZiBzZXR0aW5ncyB0byBkZXRlcm1pbmUgaG93IHRoZXkgc2hvdWxkIGRpc3BsYXkgdGhlIEl0ZW1zIGFuZCBDYXRlZ29yaWVzIHRoZXkgY29udGFpbjogaWYgeW91IGxvb2sgYXQgdGhlIDxzdHJvbmc+Ik9wdGlvbnMiPC9zdHJvbmc+IHRhYiwgeW91IGNhbiBjaG9vc2UgaG93IG1hbnkgaXRlbXMgYW5kL29yIGNhdGVnb3JpZXMgdG8gc2hvdywgd2hhdCBvcmRlciB0byBzaG93IHRoZW0gaW4sIHdoZXRoZXIgdG8gZGlzcGxheSBvbmx5IGl0ZW1zIG9yIG9ubHkgY2F0ZWdvcmllcyBvciBib3RoLCBhbmQgaG93IG1hbnkgbGV2ZWxzIG9mIHRoZSBoaWVyYXJjaHkgdG8gZGlzcGxheSBiZWxvdyB0aGUgY2F0ZWdvcnkgcGFnZS48L3A+DQogICAgPGJyPg0KICAgIDxwPkZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTo8L3A+DQogICAgPG9sPg0KICAgICAgPGxpPjxiPkhhdHM8L2I+DQogICAgICAgIDxvbD4NCiAgICAgICAgICA8bGk+PGI+RmFzaGlvbjwvYj4NCiAgICAgICAgICAgICA8b2w+DQogICAgICAgICAgICAgICA8bGk+RmVhdGhlcmVkIEhhdDwvbGk+PGxpPkZlZG9yYSA8L2xpPjxsaT5CYXNlYmFsbCBIYXQ8L2xpPg0KICAgICAgICAgICAgIDwvb2w+DQogICAgICAgICAgIDwvbGk+DQogICAgICAgICAgIDxsaT48Yj5Xb3JrIEhhdHM8L2I+DQogICAgICAgICAgICAgIDxvbD4NCiAgICAgICAgICAgICAgICA8bGk+SGFyZCBIYXQ8L2xpPjxsaT5EaXZpbmcgSGVsbWV0PC9saT4NCiAgICAgICAgICAgICAgPC9vbD4NCiAgICAgICAgICAgIDwvbGk+DQogICAgICAgIDwvb2w+DQogICAgICA8L2xpPg0KICAgIDwvb2w+DQogICAgPHA+SW4gdGhpcyBkaWFncmFtLCBpdGVtcyBpbiBib2xkIGFyZSBDYXRhbG9nIENhdGVnb3JpZXMsIGFsbCBvdGhlciBpdGVtcyBhcmUgQ2F0YWxvZyBJdGVtcy4gRGVwZW5kaW5nIHVwb24gaG93IHlvdSBzZXQgeW91ciBvcHRpb25zLCB0aGUgPHN0cm9uZz5IYXRzPC9zdHJvbmc+IENhdGVnb3J5IFBhZ2UgY2FuIHNob3cgb25seSBlbnRyaWVzIGZvciB0aGUgPHN0cm9uZz5GYXNoaW9uPC9zdHJvbmc+IGFuZCA8c3Ryb25nPldvcmsgSGF0czwvc3Ryb25nPiBDYXRlZ29yeSBQYWdlcywgb3IgaXQgY2FuIHNob3cgZW50cmllcyBmb3IgPHN0cm9uZz5GYXNoaW9uPC9zdHJvbmc+LCA8c3Ryb25nPldvcmsgSGF0czwvc3Ryb25nPiwgYW5kIGFsbCB0aGUgaGF0cyBsaXN0ZWQgYmVsb3cgdGhlbS48L3A+DQogICAgPHA+WW91IGNhbiBvcHQgdG8gc2hvdyB0aGUgaXRlbXMgaW4gIm5hdHVyYWwiIG9yZGVyIChpLmUuLCB0aGUgb3JkZXIgdGhlIEl0ZW1zIHNob3cgdXAgaW4gdGhlIENNUyBDb250ZW50IEhpZXJhcmNoeSksIG9yIGluIGFscGhhYmV0aWNhbCBvcmRlci48L1A+DQogICAgPHA+SWYgeW91IGhhdmUgbGFyZ2UgbnVtYmVycyBvZiBpdGVtcyBpbiBhIENhdGVnb3J5LCB5b3UgY2FuIHNldCB0aGUgbWF4aW11bSBudW1iZXIgdG8gYmUgZGlzcGxheWVkIGluIGEgQ2F0ZWdvcnkgUGFnZSwgYW5kIHRoZSBwYWdlIHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgbGlua3MgdG8gbmF2aWdhdGUgdGhyb3VnaCB0aGUgbGlzdC48L3A+DQogICAgPHA+RWFjaCBDYXRlZ29yeSBwYWdlIGNhbiBoYXZlIGRpZmZlcmVudCBzZXR0aW5ncyBmb3Igc29ydCBvcmRlciwgbGV2ZWxzIHRvIGRpc3BsYXksIGFuZCBudW1iZXIgb2YgaXRlbXMuIFlvdSBjYW4gc2V0IHRoZSBkZWZhdWx0IGZvciB0aGVzZSB2YWx1ZXMgaW4gPHN0cm9uZz48ZW0+RXh0ZW5zaW9ucyAmZ3Q7IENhdGFsb2dlciAmZ3Q7IE1hbmFnZSBQcmVmZXJlbmNlczwvZW0+PC9zdHJvbmc+LiBJZiwgYXQgYSBsYXRlciBkYXRlLCB5b3Ugd2lzaCB0byBjaGFuZ2Ugc29tZSBzZXR0aW5nIG9uIGFsbCBvZiB5b3VyIENhdGVnb3J5IHBhZ2VzLCB5b3UgY2FuIGdvIGludG8gPHN0cm9uZz48ZW0+RXh0ZW5zaW9ucyAmZ3Q7IENhdGFsb2dlciAmZ3Q7IEdsb2JhbCBDYXRhbG9nIE9wdGlvbnM8L2VtPjwvc3Ryb25nPiwgYW5kIG1ha2UgdGhvc2UgY2hhbmdlcy48L3A+DQogICAgPGg0PkltYWdlczwvaDQ+DQogICAgPHA+Q2F0YWxvZ2VyIGFsbG93cyB5b3UgdG8gc2VsZWN0IGRpZmZlcmVudCBzaXplIGltYWdlcyBmb3IgSXRlbSBwYWdlcywgQ2F0ZWdvcnkgcGFnZXMsIGFuZCB0aGUgUHJpbnRhYmxlIENhdGFsb2cuIFlvdSBjYW4gc2V0IHRoZXNlIGRlZmF1bHRzIGluIDxzdHJvbmc+PGVtPkV4dGVuc2lvbnMgJmd0OyBDYXRhbG9nZXIgJmd0OyBNYW5hZ2UgUHJlZmVyZW5jZXM8L2VtPjwvc3Ryb25nPi48L3A+DQogICAgPHA+V2hlbiB5b3UgdXBsb2FkIGltYWdlcywgdGhlIG9yaWdpbmFsIGlzIHN0b3JlZC4gV2hlbiBzb21lb25lIHZpc2l0cyBhIHBhZ2UsIHRoZSByZWR1Y2VkIHNpemUgaW1hZ2VzIGFyZSByZXF1ZXN0ZWQgdXNpbmcgYSBzcGVjaWFsIFVSTCwgd2hpY2ggd2lsbCBsb2FkIHRoZSBzY2FsZWQgaW1hZ2UgaWYgaXQgZXhpc3RzLCBjcmVhdGluZyBpdCBpZiBpdCBkb2Vzbid0LiBUaGlzIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIGltYWdlcywgd2l0aG91dCBoYXZpbmcgdG8gcmUtdXBsb2FkIGFsbCB0aGUgaW1hZ2VzLCBvciByZXNjYWxpbmcgdGhlbSBhbGwgYXQgb25jZS48L3A+DQogICAgPHA+PGRpdiBjbGFzcz0nd2FybmluZyc+VGhlIGltYWdlIHJlc2NhbGluZyBjb2RlIHJlcXVpcmVzIHRoYXQgeW91IGhhdmUgZWl0aGVyIEltYWdlTWFnaWNrIG9yIEdEIGxpYiBpbnN0YWxsZWQuPC9kaXY+PC9wPg0KICAgIDxwPjxkaXYgY2xhc3M9J2luZm9ybWF0aW9uJz5DdXJyZW50bHksIG9ubHkganBlZyBmb3JtYXQgaW1hZ2VzIGFyZSBzdXBwb3J0ZWQuPC9kaXY+PC9wPg0KICAgIDxoND5GaWxlczwvaDQ+DQogICAgPHA+Q2F0YWxvZ2VyIGFsbG93cyB5b3UgdG8gYXNzb2NpYXRlIGFyYml0cmFyeSBmaWxlcyB3aXRoIGFueSBJdGVtIHBhZ2UuIFRoZXNlIGFyZSB1cGxvYWRlZCB2aWEgdGhlIGFkbWluLCBqdXN0IGxpa2UgaW1hZ2VzLg0KICAgIDxwPjxkaXYgY2xhc3M9J3dhcm5pbmcnPlRoZXJlIGhhdmUgYmVlbiBydWRpbWVudGFyeSBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyAoZS5nLiwgZmlsZS1leHRlbnNpb24tYmFzZWQgcmVzdHJpY3Rpb25zKSwgaG93ZXZlciwgYXMgd2l0aCBhbnkgZmlsZSB1cGxvYWQgY2FwYWJpbGl0eSB0aGF0IHB1dHMgZmlsZXMgaW5zaWRlIHRoZSB3ZWIgcm9vdCwgaWYgeW91IGRvIG5vdCB0cnVzdCB5b3VyIHVwbG9hZGVycywgeW91IGFyZSBhdCBzb21lIGRlZ3JlZSBvZiByaXNrLiBZb3UgaGF2ZSBiZWVuIHdhcm5lZC48L2Rpdj48L3A+DQogIDwvZGl2Pg0KICB7KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKn0NCiAgeyogRmVhdHVyZSBMaXN0cyAqfQ0KICA8ZGl2IGlkPSJmZWF0dXJlbGlzdHNfYyI+DQogICAgPGgzPkZlYXR1cmUgTGlzdHM8L2gzPg0KICAgIDxwPllvdSBjYW4sIGFzIG9mIDxzdHJvbmc+dmVyc2lvbiAwLjQ8L3N0cm9uZz4sIGhhdmUgPHN0cm9uZz4iZmVhdHVyZSBsaXN0cyI8L3N0cm9uZz4gd2hpY2ggYXJlIHRoZSA8c3Ryb25nPjxlbT5uPC9lbT48L3N0cm9uZz4gbW9zdC1yZWNlbnRseSBhZGRlZCBjYXRhbG9nIGl0ZW1zLCBvciBhIGNvbGxlY3Rpb24gb2YgPHN0cm9uZz48ZW0+azwvZW0+PC9zdHJvbmc+IHJhbmRvbSBpdGVtcyBmcm9tIHRoZSBjYXRhbG9nLjwvcD4NCiAgICA8aDQ+IkFsbCIgRmVhdHVyZSBMaXN0PC9oND4NCiAgICA8cD5UbyBnZXQgYSBsaXN0IG9mIGFsbCBjYXRhbG9nIGl0ZW1zIChvcHRpb25hbGx5IHVuZGVyIGEgc3BlY2lmaWVkIHBhcnQgb2YgeW91ciBoaWVyYXJjaHkpIGZvciBwcm9jZXNzaW5nIHZpYSBhIHRlbXBsYXRlLCB5b3UgY2FuIHVzZQ0KICAgIHRoZSA8c3Ryb25nPiJhbGwiPC9zdHJvbmc+IGZlYXR1cmUgbGlzdC48L3A+DQogICAgPHA+VGhlIHN5bnRheCBmb3IgYW4gPHN0cm9uZz4iYWxsIjwvc3Ryb25nPiBsaXN0IGlzIGxpa2U6PC9wPg0KICAgIDxwcmU+PHN0cm9uZz4mIzEyMztDYXRhbG9nZXIgYWN0aW9uPSdhbGwnIHN1Yl90ZW1wbGF0ZT0nbXlfc3ViX3RlbXBsYXRlJ308L3N0cm9uZz48L3ByZT4NCiAgICA8cD53aGVyZSBzdWJfdGVtcGxhdGUgaXMgdGhlIHRlbXBsYXRlIHRvIHVzZSB0byByZW5kZXIgdGhlIGxpc3QuPC9wPg0KICAgIDxwPlRoZXJlIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciwgPHN0cm9uZz5hbGlhcz0ncGFnZV9hbGlhcyc8L3N0cm9uZz4sIHdoZXJlIHBhZ2VfYWxpYXMgaW5kaWNhdGVzIHRoZSB0b3Agb2YgdGhlIHRyZWUgKGUuZy4sIGEgcGxhY2UgaW4geW91ciBtZW51DQogICAgaGllcmFyY2h5LCB0eXBpY2FsbHkgYSBjYXRlZ29yeSBwYWdlKSBpbiB3aGljaCB0byBsb29rIGZvciBuZXcgaXRlbXMuIEEgc3BlY2lhbCB2YWx1ZSBmb3IgPHN0cm9uZz4icGFnZV9hbGlhcyI8L3N0cm9uZz4gaXMgPHN0cm9uZz4iLyI8L3N0cm9uZz4sIHdoaWNoIG1lYW5zIHRvIHN0YXJ0IGF0IHRoZSByb290LjwvcD4NCiAgICA8cD5UaGlzIGlzIHVzZWZ1bCBmb3IgY2F0YWxvZy13aWRlIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlLCB0byBnZXQgYSBsaXN0IG9mIGFsbCBjYXRlZ29yaWVzIChhbmQgZG8gc29tZXRoaW5nIHdpdGggdGhlbSksDQogICAgeW91IGNvdWxkIHVzZSB0aGUgdGFnOjwvcD4gDQogICAgPHByZT48c3Ryb25nPiYjMTIzO0NhdGFsb2dlciBhY3Rpb249J2FsbCcgc3ViX3RlbXBsYXRlPSdteV9zdWJfdGVtcGxhdGUnIGFsaWFzPScvJyByZWN1cnNlPSdjYXRlZ29yaWVzX2FsbCd9PC9zdHJvbmc+PC9wcmU+ICAgDQogICAgPHA+WW91ciB0ZW1wbGF0ZSBjb3VsZCB0aGVuIHRocm93IHRob3NlIGNhdGVnb3JpZXMgaW50byBhIHB1bGxkb3duIG1lbnUgdGhhdCByZWRpcmVjdGVkIHlvdSB0byB0aGF0IGNhdGVnb3J5J3MgcGFnZSwgZm9yIGV4YW1wbGU6PC9wPg0KICAgIDxwcmU+DQogICAgJmx0O3NlbGVjdCBuYW1lPSJmb28iIG9uY2hhbmdlPSJkb2N1bWVudC5sb2NhdGlvbj10aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZTsiPg0KICAgICZsdDtvcHRpb24gdmFsdWU9IiI+U2VsZWN0IEEgdGFyZ2V0Jmx0Oy9vcHRpb24+DQogICAgJiMxMjM7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPXRoaXNvbmV9DQogICAgICAgJmx0O29wdGlvbiB2YWx1ZT0iJiMxMjM7JHRoaXNvbmUubGlua30iPiYjMTIzOyR0aGlzb25lLnRpdGxlfSZsdDsvb3B0aW9uPg0KICAgICYjMTIzOy9mb3JlYWNofQ0KICAgICZsdDsvc2VsZWN0PjwvcHJlPg0KICAgIDxwPklmIHlvdSB3YW50ZWQgdGhhdCB0byBvbmx5IHNob3cgY2F0ZWdvcmllcyB0aGF0IHdlcmUgaW4gdGhlIHZlcnkgdG9wIGxldmVsIG9mIHlvdXIgaGllcmFyY2h5LCB5b3UnZCByZXBsYWNlIHRoZSA8c3Ryb25nPnJlY3Vyc2U9J2NhdGVnb3JpZXNfYWxsJzwvc3Ryb25nPiB3aXRoIDxzdHJvbmc+cmVjdXJzZT0nY2F0ZWdvcmllc19vbmUnPC9zdHJvbmc+LiBPciBpZiB5b3Ugd2FudGVkIGl0IHRvIGJlIGFsbCBjYXRhbG9nIEl0ZW1zIGluc3RlYWQgb2YgY2F0ZWdvcmllcywgeW91IGNvdWxkIHVzZSBhIHRhZyBsaWtlOjwvcD4NCiAgICA8cHJlPjxzdHJvbmc+JiMxMjM7Q2F0YWxvZ2VyIGFjdGlvbj0nYWxsJyBzdWJfdGVtcGxhdGU9J215X3N1Yl90ZW1wbGF0ZScgYWxpYXM9Jy8nIHJlY3Vyc2U9J2l0ZW1zX2FsbCd9PC9zdHJvbmc+PC9wcmU+DQogICAgPHA+U2ltaWxhcmx5LCB5b3UgY291bGQgaGF2ZSBpdCBsaXN0IG9ubHkgY2F0ZWdvcmllcyB1bmRlciB0aGUgY3VycmVudCBwYWdlIChieSBvbWl0dGluZyB0aGUgPHN0cm9uZz4iYWxpYXM9Jy8nIjwvc3Ryb25nPikuIFRoZSBjb21iaW5hdGlvbnMgYXJlIGJhc2ljYWxseSBsaW1pdGxlc3MhPC9wPg0KICAgIDxwPkFsbCBzdXBwb3J0ZWQgdmFsdWVzIG9mIHJlY3Vyc2UgaW5jbHVkZToNCiAgICA8dWw+DQogICAgICA8bGk+PHN0cm9uZz5pdGVtc19vbmU8L3N0cm9uZz4gLSBDYXRhbG9nIGl0ZW1zLCBubyBtb3JlIHRoYW4gb25lIGxldmVsIGJlbG93IHRoZSBjdXJyZW50IHBhZ2UgKG9yIGFsaWFzIHBvaW50KTwvbGk+DQogICAgICA8bGk+PHN0cm9uZz5pdGVtc19hbGw8L3N0cm9uZz4gLSBDYXRhbG9nIGl0ZW1zLCBhdCBhbnkgbGV2ZWwgYmVsb3cgdGhlIGN1cnJlbnQgcGFnZSAob3IgYWxpYXMgcG9pbnQpPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPmNhdGVnb3JpZXNfb25lPC9zdHJvbmc+IC0gQ2F0ZWdvcmllcywgbm8gbW9yZSB0aGFuIG9uZSBsZXZlbCBiZWxvdyB0aGUgY3VycmVudCBwYWdlIChvciBhbGlhcyBwb2ludCk8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+Y2F0ZWdvcmllc19hbGw8L3N0cm9uZz4gLSBDYXRlZ29yaWVzLCBhdCBhbnkgbGV2ZWwgYmVsb3cgdGhlIGN1cnJlbnQgcGFnZSAob3IgYWxpYXMgcG9pbnQpPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPm1peGVkX29uZTwvc3Ryb25nPiAtIENhdGFsb2cgaXRlbXMgYW5kIENhdGVnb3JpZXMsIG5vIG1vcmUgdGhhbiBvbmUgbGV2ZWwgYmVsb3cgdGhlIGN1cnJlbnQgcGFnZSAob3IgYWxpYXMgcG9pbnQpPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPm1peGVkX2FsbDwvc3Ryb25nPiAtIENhdGFsb2cgaXRlbXMgYW5kIENhdGVnb3JpZXMsIGF0IGFueSBsZXZlbCBiZWxvdyB0aGUgY3VycmVudCBwYWdlIChvciBhbGlhcyBwb2ludCk8L2xpPg0KICAgIDwvdWw+DQogICAgPC9wPg0KICAgIDxwPkl0ZW1zIGluIHRoZXNlIGxpc3RzIGNvbWUgYmFjayBpbiBoaWVyYXJjaHkgb3JkZXIuIFlvdSBjYW4gY2hhbmdlIHRoaXMgdXNpbmcgdGhlIDxzdHJvbmc+J2dsb2JhbF9zb3J0Jzwvc3Ryb25nPiBwYXJhbWV0ZXIuIFlvdXIgY2hvaWNlcyBhcmU6PC9wPg0KICAgIDx1bD4NCiAgICAgIDxsaT48c3Ryb25nPmFscGhhPC9zdHJvbmc+IC0gYWxwaGFiZXRpY2FsbHkgYnkgdGl0bGU8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+ZGF0ZTwvc3Ryb25nPiAtIGluIG9yZGVyIG9mIGl0ZW0gY3JlYXRpb24gZGF0ZTwvbGk+DQogICAgICA8bGk+PHN0cm9uZz5tZGF0ZTwvc3Ryb25nPiAtIGluIG9yZGVyIG9mIGl0ZW0gbW9kaWZpY2F0aW9uIGRhdGU8L2xpPg0KICAgIDwvdWw+DQogICAgPHA+WW91IG1heSBvcmRlciB0aGVzZSBzb3J0cyB1c2luZyB0aGUgPHN0cm9uZz4nZ2xvYmFsX3NvcnRfZGlyJzwvc3Ryb25nPiBwYXJhbWV0ZXIsIHdoaWNoIHdpbGwgYWxsb3cgPHN0cm9uZz4nYXNjJzwvc3Ryb25nPiBvciA8c3Ryb25nPidkZXNjJzwvc3Ryb25nPi48L3A+DQogICAgPHA+U28sIGZvciBhIHRob3JvdWdoIGV4YW1wbGU6PC9wPg0KICAgIDxwcmU+PHN0cm9uZz4mIzEyMztDYXRhbG9nZXIgYWN0aW9uPSdhbGwnIHN1Yl90ZW1wbGF0ZT0nbXlfc3ViX3RlbXBsYXRlJyBhbGlhcz0nLycgcmVjdXJzZT0nY2F0ZWdvcmllc19hbGwnIGdsb2JhbF9zb3J0PSdhbHBoYScgZ2xvYmFsX3NvcnRfZGlyPSdhc2MnfTwvc3Ryb25nPjwvcHJlPiANCiAgICA8aDQ+UmVjZW50bHkgQWRkZWQgRmVhdHVyZSBMaXN0PC9oND4NCiAgICA8cD5UbyB1c2UgYSAibW9zdC1yZWNlbnRseSBhZGRlZCIgbGlzdCB3aWxsIGFsbG93IHlvdSB0byBkaXNwbGF5IHRoZSBtb3N0IHJlY2VudGx5LWFkZGVkIGNhdGFsb2cgaXRlbXMgdW5kZXIgYSBzcGVjaWZpZWQgcGFydCBvZiB5b3VyIGhpZXJhcmNoeS48L3A+DQogICAgPHA+VGhlIHN5bnRheCBmb3IgYSAibW9zdCByZWNlbnRseSBhZGRlZCIgbGlzdCBpcyBsaWtlOjwvcD4NCiAgICA8cHJlPjxzdHJvbmc+JiMxMjM7Q2F0YWxvZ2VyIGFjdGlvbj0ncmVjZW50JyBzdWJfdGVtcGxhdGU9J215X3N1Yl90ZW1wbGF0ZSd9PC9zdHJvbmc+PC9wcmU+IA0KICAgIDxwPndoZXJlIHN1Yl90ZW1wbGF0ZSBpcyB0aGUgdGVtcGxhdGUgdG8gdXNlIHRvIHJlbmRlciB0aGUgbGlzdC4gVGhlcmUgYXJlIGZvdXIgb3B0aW9uYWwgcGFyYW1ldGVycywgPHN0cm9uZz5jb3VudD0nMyc8L3N0cm9uZz4sIDxzdHJvbmc+YWxpYXM9J3BhZ2VfYWxpYXMnPC9zdHJvbmc+LCA8c3Ryb25nPmdsb2JhbF9zb3J0PSdkYXRlJzwvc3Ryb25nPiwgPHN0cm9uZz5nbG9iYWxfc29ydF9kaXI9J2Rlc2MnPC9zdHJvbmc+IHdoZXJlIDxzdHJvbmc+Y291bnQ8L3N0cm9uZz4gaXMgdGhlIG51bWJlciBvZiBpdGVtcyB0byBpbmNsdWRlLCA8c3Ryb25nPnBhZ2VfYWxpYXM8L3N0cm9uZz4gaW5kaWNhdGVzIHRoZSB0b3Agb2YgdGhlIHRyZWUgKGUuZy4sIGEgcGxhY2UgaW4geW91ciBtZW51IGhpZXJhcmNoeSwgdHlwaWNhbGx5IGEgY2F0ZWdvcnkgcGFnZSkgaW4gd2hpY2ggdG8gbG9vayBmb3IgbmV3IGl0ZW1zLiBBIHNwZWNpYWwgdmFsdWUgZm9yIDxzdHJvbmc+InBhZ2VfYWxpYXMiPC9zdHJvbmc+IGlzIDxzdHJvbmc+Ii8iPC9zdHJvbmc+LCB3aGljaCBtZWFucyB0byB1c2UgPGk+YWxsPC9pPiBwYWdlcyBpbiB0aGUgc2l0ZS4gPHN0cm9uZz5nbG9iYWxfc29ydDwvc3Ryb25nPiBtYXkgYmUgPHN0cm9uZz4nZGF0ZSc8L3N0cm9uZz4gKGZvciBpdGVtIGNyZWF0aW9uIGRhdGUpIG9yIDwvc3Ryb25nPidtZGF0ZSc8L3N0cm9uZz4gZm9yIG1vZGlmaWNhdGlvbiBkYXRlLCBhbmQgPHN0cm9uZz5nbG9iYWxfc29ydF9kaXI8L3N0cm9uZz4gbWF5IGJlIDxzdHJvbmc+J2FzYyc8L3N0cm9uZz4gb3IgPHN0cm9uZz4nZGVzYyc8L3N0cm9uZz4uPC9wPg0KICAgIDxoND5SYW5kb20gSXRlbXMgRmVhdHVyZSBMaXN0PC9oND4NCiAgICA8cD5UaGUgc3ludGF4IGZvciBhICJyYW5kb20iIGxpc3QgaXMgbGlrZTo8L3A+DQogICAgPHByZT48c3Ryb25nPiYjMTIzO0NhdGFsb2dlciBhY3Rpb249J3JhbmRvbScgc3ViX3RlbXBsYXRlPSdteV9zdWJfdGVtcGxhdGUnfTwvc3Ryb25nPjwvcHJlPiANCiAgICA8cD53aGVyZSBzdWJfdGVtcGxhdGUgaXMgdGhlIHRlbXBsYXRlIHRvIHVzZSB0byByZW5kZXIgdGhlIGxpc3QuIFRoZXJlIGFyZSB0d28gb3B0aW9uYWwgcGFyYW1ldGVycywgPHN0cm9uZz5jb3VudD0nMyc8L3N0cm9uZz4gYW5kIDxzdHJvbmc+YWxpYXM9J3BhZ2VfYWxpYXMnPC9zdHJvbmc+LCB3aGVyZSA8c3Ryb25nPmNvdW50PC9zdHJvbmc+IGlzIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gaW5jbHVkZSwgYW5kIDxzdHJvbmc+cGFnZV9hbGlhczwvc3Ryb25nPiBpbmRpY2F0ZXMgdGhlIHRvcCBvZiB0aGUgdHJlZSAoZS5nLiwgYSBwbGFjZSBpbiB5b3VyIG1lbnUgaGllcmFyY2h5LCB0eXBpY2FsbHkgYSBjYXRlZ29yeSBwYWdlKSBpbiB3aGljaCB0byBsb29rIGZvciBuZXcgaXRlbXMuIEEgc3BlY2lhbCB2YWx1ZSBmb3IgPHN0cm9uZz4icGFnZV9hbGlhcyI8L3N0cm9uZz4gaXMgPHN0cm9uZz4iLyI8L3N0cm9uZz4sIHdoaWNoIG1lYW5zIHRvIHVzZSA8aT5hbGw8L2k+IHBhZ2VzIGluIHRoZSBzaXRlLjwvcD4NCiAgPC9kaXY+DQogIHsqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICB7KiBJbWFnZSBTeXN0ZW0gKn0NCiAgPGRpdiBpZD0iaW1hZ2VzeXNfYyI+DQogICAgPGgzPkNhdGFsb2dlciBJbWFnZSBTeXN0ZW08L2gzPg0KICAgIDxwPkNhdGFsb2dlciBoYXMgYW4gaW1hZ2Ugc3lzdGVtIHRoYXQgd2lsbCBhbGxvdyB5b3UgdG8gZHluYW1pY2FsbHkgY2hhbmdlIHRoZSBpbWFnZSBkaXNwbGF5IHNpemUuIElmIHlvdSBkbyBub3QgbGlrZSBpdCwgeW91IGNhbiBhbHRlcg0KICAgIHRoZSB0ZW1wbGF0ZXMgYW5kIHVzZSBhbnkgaW1hZ2Ugc3lzdGVtIHlvdSB3YW50LjwvcD4NCiAgICA8cD5XaGVuIHlvdSB1cGxvYWQgYW4gaW1hZ2UgdXNpbmcgQ2F0YWxvZ2VyLCBpdCBnZXRzIHB1dCBpbiBhIHNwZWNpYWwgc2V0IG9mIGRpcmVjdG9yaWVzIHRvIG1ha2UgdGhlIGltYWdpbmcgZWFzaWVyLiBZb3Ugd2lsbCBzZWUgbW9yZQ0KICAgIGFib3V0IHRoaXMgbGF0ZXIuPC9wPg0KICAgIDxwPkl0IHdvcmtzIGJ5IGNhbGxpbmcgYSBQSFAgcHJvZ3JhbSBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlZmVyZW5jaW5nIHRoZSBpbWFnZS4gVGhlIHByb2dyYW0gdXNlcyB0aGUgZmlsZW5hbWUgdG8gc2VlIGlmIHRoZQ0KICAgIGltYWdlIGFscmVhZHkgZXhpc3RzIGluIHRoZSBjb3JyZWN0IHNpemUuIElmIHNvLCBpdCB1c2VzIHRoYXQgaW1hZ2UuIE90aGVyd2lzZSwgaXQgdXNlcyB5b3VyIDxzdHJvbmc+R0RMSUI8L3N0cm9uZz4gb3IgPHN0cm9uZz5JbWFnZU1hZ2ljazwvc3Ryb25nPiB0byBjcmVhdGUgdGhlIGltYWdlIGluIHRoZSBjb3JyZWN0IHNpemUsIGFuZCB0aGVuIHJlZGlyZWN0cyB0byBpdC48L3A+DQogICAgPGg0PkNhdGFsb2dlciBJbWFnZSBGaWxlc3BlYyBFeHBsYW5hdGlvbjwvaDQ+DQogICAgPHA+QSBjYXRhbG9nZXIgaW1hZ2UgaGFzIGEgZmlsZXNwZWMgbGlrZTo8L3A+DQogICAgPHByZT4mbHNhcXVvO3Jvb3QmcnNhcXVvOy9jYXRhbG9nZXJfaW1hZ2UoLnBhZ2VfZXh0ZW50aW9uKT9pPWl0ZW1uYW1lX2ZfMV80MDBfMS5qcGcmYW1wO2FjPTgyODg4PC9wcmU+DQogICAgPHA+PGRpdiBjbGFzcz0naW5mb3JtYXRpb24nPlRoZXJlIGFyZSBkaWZmZXJlbmNlcyBpbiBpbWFnZSBoYW5kbGluZyBpbiA8c3Ryb25nPkNhdGFsb2dlcjwvc3Ryb25nPiBzaW5jZSA8c3Ryb25nPnZlcnNpb24gMS4wPC9zdHJvbmc+Ljxicj5UaGUgb2xkIHNwZWMgaGFzIGJlZW4gcmVtb3ZlZCwgYW5kIGlzIG5vIGxvbmdlciB1c2VkLDxicj4gaS5lLjogPHN0cm9uZz4mbHNhcXVvO3Jvb3RfcGF0aCZyc2FxdW87L21vZHVsZXMvQ2F0YWxvZ2VyL0NhdGFsb2dlci5JbWFnZS5waHA/aT1pdGVtbmFtZV9mXzFfNDAwXzEuanBnJmFjPTgyODg4PC9zdHJvbmc+IHNwZWMgYXMgZXhwbGFpbmVkIGFuZCB1c2VkIG9uIHByZXZpb3VzIHZlcnNpb25zIDxzdHJvbmc+bm8gbG9uZ2VyIHdvcmtzPC9zdHJvbmc+Ljxicj5UbyBiZSBtb3JlIHByZWNpc2UsIDxzdHJvbmc+Q2F0YWxvZ2VyLkltYWdlLnBocDwvc3Ryb25nPiBpcyBubyBsb25nZXIgdmFsaWQgYXMgaXQgdXNlZCBhbiB1bnN1cHBvcnRlZCBtZXRob2Qgb2YgY2FsbGluZyBDTVNNUyBjb3JlIGZ1bmN0aW9ucy4gSG93ZXZlciB0aGUgZmlsZW5hbWUgc3BlY3Mgc3RpbGwgYXBwbHksIHN1Y2ggYXMgPHN0cm9uZz5pdGVtbmFtZV9mXzFfNDAwXzEuanBnJmFjPTgyODg4PC9zdHJvbmc+IGFsb25nIHdpdGggdGhlIDxzdHJvbmc+YWM8L3N0cm9uZz4gcGFyYW1ldGVyIGFzIGV4cGxhaW5lZCBiZWxvdy48L2Rpdj48L3A+DQogICAgPHA+PGRpdiBjbGFzcz0nd2FybmluZyc+PHN0cm9uZz5DYXRhbG9nZXIuSW1hZ2UucGhwPC9zdHJvbmc+IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgbW9kdWxlIGFjdGlvbiBhbmQgPHN0cm9uZz5DYXRhbG9nZXI8L3N0cm9uZz4gd2lsbCB1c2UgdGhlIG5ldyBtZXRob2QgYXV0b21hdGljYWxseS4gTm8gY2hhbmdlcyBpbiB0aGUgc3ViLXRlbXBsYXRlcyBzaG91bGQgYmUgbmVlZGVkIHVubGVzcyB0aGUgZGV2ZWxvcGVyL2Rlc2lnbmVyIGhhcywgZm9yIHNvbWUgcmVhc29uLCBoYXJkLWNvZGVkIHBhcnQgb2YgdGhlIHVybCBvbiB0aGUgdGVtcGxhdGVzIGluc3RlYWQgb2YgdXNpbmcgdGhlIGdlbmVyYXRlZCBsaW5rcy48L2Rpdj48L3A+DQogICAgPHA+VGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIDxzdHJvbmc+Iml0ZW1uYW1lX2ZfMV80MDBfMS5qcGciPC9zdHJvbmc+IC0gdGhlIHN0dWZmIGJlZm9yZSBpcyBqdXN0IGEgY2FsbCB0byB0aGUgcHJvZ3JhbSwgYW5kIHRoZSA8c3Ryb25nPiZhbXA7YWM9ODI4ODg8L3N0cm9uZz4gaXMgYSByYW5kb20gdGhpbmcgdGhhdCBpcyBkZXNpZ25lZCB0byBwcmV2ZW50IGJyb3dzZXIgY2FjaGluZy4gU28gZXhhbWluaW5nIHRoZSBuYW1lIHBpZWNlIGJ5IHBpZWNlIChzZXBhcmF0aW5nIGF0IHRoZSB1bmRlcnNjb3JlcyksIHdlIGhhdmU6PC9wPg0KICAgIDx1bD4NCiAgICAgIDxsaT48c3Ryb25nPml0ZW0gbmFtZTwvc3Ryb25nPiAtIHRoaXMgaXMgdGhlIGFsaWFzIG9mIHRoZSBpdGVtL2NhdGVnb3J5IHBhZ2UgY29udGFpbmluZyB0aGUgaW1hZ2UuPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPmltYWdlIHR5cGU8L3N0cm9uZz4gLSB0aGlzIGlzIGEgZGVzaWduYXRpb24gZm9yIGltYWdlIHR5cGU6DQogICAgICAgIDx1bD4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5mPC9zdHJvbmc+IC0gaXRlbSBmdWxsLXNpemUgaW1hZ2U8L2xpPg0KICAgICAgICAgIDxsaT48c3Ryb25nPnQ8L3N0cm9uZz4gLSBpdGVtIHRodW1ibmFpbDwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+Y2Y8L3N0cm9uZz4gLSBjYXRlZ29yeSBmdWxsLXNpemVkIGltYWdlPC9saT4NCiAgICAgICAgICA8bGk+PHN0cm9uZz5jdDwvc3Ryb25nPiAtIGNhdGVnb3J5IHRodW1ibmFpbDwvbGk+DQogICAgICAgICAgPGxpPjxzdHJvbmc+Y3RmPC9zdHJvbmc+IC0gcHJpbnRhYmxlIGNhdGFsb2cgZnVsbC1zaXplZCBpbWFnZTwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICA8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+aW1hZ2UgbnVtYmVyPC9zdHJvbmc+IC0gc28gYSBnaXZlbiBpdGVtL2NhdGFsb2cvZXRjIGNhbiBoYXZlIG11bHRpcGxlIGltYWdlczwvbGk+DQogICAgICA8bGk+PHN0cm9uZz5sb25nIGRpbWVuc2lvbjwvc3Ryb25nPiAtIGxvbmcgZGltZW5zaW9uIG9mIHRoZSBpbWFnZSwgaW4gcGl4ZWxzPC9saT4NCiAgICAgIDxsaT48c3Ryb25nPm1pc3NpbmcgZmxhZzwvc3Ryb25nPiAtIDEgaWYgeW91IHdhbnQgdG8gc2hvdyBhbiAiaW1hZ2UgbWlzc2luZyIgaW1hZ2UgaWYgdGhpcyBpbWFnZSBkb2Vzbid0IGV4aXN0LCAwIG90aGVyd2lzZTwvbGk+DQogICAgPC91bD4NCiAgICA8cD4NCiAgICBUaGlzIHdpbGwgdGFrZSBhbiBpbWFnZSBpbiA8c3Ryb25nPnJvb3RfcGF0aC91cGxvYWRzL2ltYWdlcy9jYXRhbG9nX3NyYy9pdGVtbmFtZV9zcmNfMTwvc3Ryb25nPg0KICAgIDxwPkFzIG9mIDxzdHJvbmc+dmVyc2lvbiAxLjAgQ2F0YWxvZ2VyPC9zdHJvbmc+IGhhcyBjaGFuZ2VkIHRoZSB3YXkgaXQgaGFuZGxlcyBpbWFnZXMuIFRoZSA8c3Ryb25nPkNhdGFsb2dlci5JbWFnZS5waHA8L3N0cm9uZz4gZmlsZSBhcyBiZWVuIHJlbW92ZWQgYW5kIGFsbCBpbWFnZSBoYW5kbGluZyBpcyBkb25lIHRocm91Z2ggYSBtb2R1bGUgYWN0aW9uIHVzZWQgc3BlY2lmaWNhbGx5IGZvciB0aGF0IHB1cnBvc2UuICBUaGlzIGFsbG93ZWQgYmV0dGVyIHN1cHBvcnQgdG8gcHJldHR5IFVSTHMsIGFuZCBmaWxlIG9iZnVzY2F0aW9uIGFzIHRoZSBhY3Rpb24gZG9lc24ndCByZWRpcmVjdCB0byB0aGUgZ2VuZXJhdGVkIGltYWdlIGJ1dCBnZW5lcmF0ZXMgYSBjb3B5IG9mIHRoZSBpbWFnZSB3aXRob3V0IHJldmVhbGluZyB0aGUgb3JpZ2luYWwgaW1hZ2UgbG9jYXRpb24uPC9wPg0KICAgIDxoND5BY2Nlc3NpbmcgeW91ciBPcmlnaW5hbCBJbWFnZTwvaDQ+DQogICAgPHA+V2hlbiBDYXRhbG9nZXIgdXBsb2FkcyBpbWFnZXMsIGl0IHB1dHMgdGhlbSBpbnRvIGEgZGlyZWN0b3J5IGNhbGxlZCA8c3Ryb25nPiJjYXRhbG9nZXJfc3JjIjwvc3Ryb25nPiBpbiB5b3VyIDxzdHJvbmc+dXBsb2Fkcy9pbWFnZXMvPC9zdHJvbmc+IGRpcmVjdG9yeS4gVGhlIGltYWdlcyBhcmUgbmFtZWQgYWNjb3JkaW5nIHRvIHRoZSBhbGlhcyBvZiB0aGUgcGFnZTogPHN0cm9uZz5hbGlhc19zcmNfIy5qcGc8L3N0cm9uZz4gd2hlcmUgIyBpcyB0aGUgaW1hZ2UgbnVtYmVyIGZvciB0aGF0IHBhZ2UuPC9wPg0KICAgIDxwPlNvLCB0byBhY2Nlc3MgdGhlIG9yaWdpbmFsbHkgdXBsb2FkZWQgaW1hZ2VzIG9uIGEgQ2F0ZWdvcnkgcGFnZSwgeW91J2QgZ2VuZXJhdGUgdGhlIFVSTCBtYW51YWxseS48L3A+DQogICAgPHA+U28gb24gYSBjYXRlZ29yeSBwYWdlLCBmb3IgZXhhbXBsZSwgaW5zdGVhZCBvZiB1c2luZyB7bGl0ZXJhbH08c3Ryb25nPnskaXRlbXNbbnVtbG9vcF0uaW1hZ2V9PC9zdHJvbmc+ey9saXRlcmFsfSB5b3UnZCB1c2UgPHN0cm9uZz4iL3VwbG9hZHMvaW1hZ2VzL2NhdGFsb2dlcl9zcmMve2xpdGVyYWx9eyRpdGVtc1tudW1sb29wXS5hbGlhc31fc3JjXzEuanBnIjwvc3Ryb25nPnsvbGl0ZXJhbH0uPC9wPg0KICA8L2Rpdj4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIHsqIEN1c3RvbWl6YXRpb24gYW5kIEFkdmFuY2VkIFRvcGljcyAqfQ0KICA8ZGl2IGlkPSJhZHZhbmNlZF9jIj4NCiAgICA8aDM+Q3VzdG9taXphdGlvbiBhbmQgQWR2YW5jZWQgVG9waWNzPC9oMz4NCiAgICA8aDQ+Q2F0YWxvZyBJdGVtIEF0dHJpYnV0ZXM8L2g0Pg0KICAgIDxwPlRoZSBkZWZhdWx0IGl0ZW0gYXR0cmlidXRlcyBhcmUgdHlwaWNhbCBmb3IgYSBjYXRhbG9nIG9mIHByb2R1Y3RzIG9yIGFydHdvcmtzLCBidXQgYnkgZ29pbmcgaW50byA8c3Ryb25nPjxlbT5FeHRlbnNpb25zICZndDsgQ2F0YWxvZ2VyICZndDsgTWFuYWdlIFVzZXItRGVmaW5lZCBBdHRyaWJ1dGVzPC9lbT48L3N0cm9uZz4sIHlvdSBjYW4gY2hhbmdlIHRoZSBhdHRyaWJ1dGVzLiBJdCdzIGJlc3QgdG8gZGVmaW5lIHRoZSBhdHRyaWJ1dGVzIGJlZm9yZSB5b3Ugc3RhcnQgZW50ZXJpbmcgQ2F0YWxvZyBJdGVtcy48L3A+DQogICAgPHA+PGRpdiBjbGFzcz0naW5mb3JtYXRpb24nPk5vdGUgdGhhdCB0aGUgYXR0cmlidXRlcyB5b3UgZGVmaW5lIG1heSBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSB0ZW1wbGF0ZSB0aGF0IHlvdSdyZSB1c2luZyB0byBkaXNwbGF5IENhdGFsb2cgSXRlbXM6ICBzZWUgQ3VzdG9tIFRlbXBsYXRlcyBiZWxvdy48L2Rpdj48L3A+DQogICAgPGg0PkNhdGFsb2cgQ2F0ZWdvcnkgQXR0cmlidXRlczwvaDQ+DQogICAgPHA+U2ltaWxhcmx5LCB5b3UgY2FuIHNldCBhdHRyaWJ1dGVzIGZvciBDYXRlZ29yaWVzLiBBcyB3aXRoIEl0ZW1zLCB0aGUgYXR0cmlidXRlcyB5b3UgZGVmaW5lIG1heSBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSB0ZW1wbGF0ZSB0aGF0IHlvdSdyZSB1c2luZyB0byBkaXNwbGF5IENhdGFsb2cgQ2F0ZWdvcmllcy48L3A+DQogICAgPGg0PlByaW50YWJsZSBDYXRhbG9nIEF0dHJpYnV0ZXM8L2g0Pg0KICAgIDxwPkxpa2V3aXNlLCB5b3UgY2FuIHNldCBhdHRyaWJ1dGVzIGZvciBQcmludGFibGUgQ2F0YWxvZ3MuIEFzIHdpdGggSXRlbXMgYW5kIENhdGVnb3JpZXMsIHRoZSBhdHRyaWJ1dGVzIHlvdSBkZWZpbmUgbWF5IG5lZWQgdG8gYmUgYWRkZWQgdG8gdGhlIHRlbXBsYXRlIHRoYXQgeW91J3JlIHVzaW5nIHRvIGRpc3BsYXkgeW91ciBQcmludGFibGUgQ2F0YWxvZy48L3A+DQogICAgPGg0PlZhcmlhYmxlIEFjdGlvbjwvaDQ+DQogICAgPHA+WW91IGNhbiBncmFiIHZhcmlhYmxlcyAoYXR0cmlidXRlcykgb3V0c2lkZSBvZiB5b3VyIENhdGFsb2dlciB0ZW1wbGF0ZXMsIHVzaW5nIHRoZSA8c3Ryb25nPnZhcmlhYmxlPC9zdHJvbmc+IGFjdGlvbiBwYXJhbWV0ZXIuIFRoZSBzeW50YXggbG9va3MgbGlrZTo8L3A+DQogICAgPHByZT48c3Ryb25nPiYjMTIzO0NhdGFsb2dlciBhY3Rpb249J3ZhcmlhYmxlJyBuYW1lPSdpdGVtbm90ZXMnIGRlZmF1bHQ9J25vIG5vdGVzJ308L3N0cm9uZz48L3ByZT4gDQogICAgPHA+d2hlcmUgbmFtZSBpcyB0aGUgYXR0cmlidXRlIHRvIGRpc3BsYXkgKHVzaW5nIHRoZSBzYW1lIGFsbCBsb3dlci1jYXNlLCBwdW5jdHVhdGlvbi1mcmVlIHJlcHJlc2VudGF0aW9uIGxpa2UgdGhlIHNtYXJ0eSB0ZW1wbGF0ZSB2YXJpYWJsZXMpLCBhbmQgZGVmYXVsdCBpcyB0aGUgdmFsdWUgdG8gdXNlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQuPC9wPg0KICAgIDxoND5JdGVtIENvbXBhcmlzb25zPC9oND4NCiAgICA8cD5BcyBvZiA8c3Ryb25nPnZlcnNpb24gMC43Ljc8L3N0cm9uZz4sIHRoZXJlIGlzIGEgPHN0cm9uZz5wcm9kdWN0IGNvbXBhcmlzb248L3N0cm9uZz4gYWN0aW9uOjwvcD4NCiAgICA8cHJlPjxzdHJvbmc+JiMxMjM7Q2F0YWxvZ2VyIGFjdGlvbj0nY29tcGFyZScgc3ViX3RlbXBsYXRlPSdteV9zdWJfdGVtcGxhdGUnIGl0ZW1zPSdpdGVtMSxpdGVtMixpdGVtMyd9PC9zdHJvbmc+PC9wcmU+DQogICAgPHA+d2hlcmUgc3ViX3RlbXBsYXRlIGlzIHRoZSB0ZW1wbGF0ZSB0byB1c2UgdG8gcmVuZGVyIHRoZSBsaXN0LCBhbmQgaXRlbXMgaXMgYSBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBpdGVtIHBhZ2UgYWxpYXNlcyB0byBjb21wYXJlLiBCb2xkZXIgdXNlcnMgbWF5IGFsc28gY2hvb3NlIHRvIHBhc3MgaW4gdGhlIGl0ZW1zIHRvIGNvbXBhcmUgYXMgcmVxdWVzdCB2YXJpYWJsZXMsIHRoZXJlYnkgZW5hYmxpbmcgZHluYW1pYyBjb21wYXJpc29ucyBiYXNlZCBvbiB1c2VyIHNlbGVjdGlvbnMuIERvIHRoaXMgYnkgc2V0dGluZyB0aGUgPHN0cm9uZz4iaXRlbXMiPC9zdHJvbmc+IHZhcmlhYmxlIG9uIHRoZSByZXF1ZXN0IHBhc3NlZCB0byB0aGUgcGFnZSBjb250YWluaW5nIHRoZSBDYXRhbG9nZXIgdGFnIHdpdGggYSBjb21wYXJlIGFjdGlvbi48L3A+DQogICAgPHA+VGhlIGRlZmF1bHQgaXRlbSBjb21wYXJpc29uIHRlbXBsYXRlIGNvdWxkIHVzZSBzb21lIHN0eWxpbmcsIGUuZy4sOjwvcD4NCiAgICA8cHJlPntsaXRlcmFsfQ0KICAgIC5pdGVtX2NvbXBhcmlzb24gdGgge2ZvbnQtd2VpZ2h0OiBib2xkOyBwYWRkaW5nOiA1cHg7IHRleHQtYWxpZ246Y2VudGVyO30NCiAgICAuaXRlbV9jb21wYXJpc29uIHRkIHtib3JkZXI6IDFweCBzb2xpZCBncmF5OyBwYWRkaW5nOiAzcHggNXB4O3RleHQtYWxpZ246cmlnaHQ7fXsvbGl0ZXJhbH08L3ByZT4NCiAgDQogICAgPGg0PkN1c3RvbSBUZW1wbGF0ZXM8L2g0Pg0KICAgIDxwPklmIHlvdSdyZSB3aWxsaW5nIHRvIG1lc3MgYXJvdW5kIHdpdGggPHN0cm9uZz5TbWFydHkgVGVtcGxhdGVzPC9zdHJvbmc+LCB5b3UgY2FuIGNoYW5nZSB0aGUgbGF5b3V0IG9mIGFueSBvZiB0aGUgcGFnZXMgZ2VuZXJhdGVkIGJ5IENhdGFsb2dlci4gVGhlcmUgYXJlIGZvdXIga2luZHMgb2YgdGVtcGxhdGVzOiBvbmUga2luZCBmb3IgPHN0cm9uZz5DYXRhbG9nIEl0ZW1zPC9zdHJvbmc+LCBvbmUga2luZCBmb3IgPHN0cm9uZz5DYXRhbG9nIENhdGVnb3JpZXM8L3N0cm9uZz4sIGFuZCBvbmUga2luZCBmb3IgPHN0cm9uZz5QcmludGFibGUgQ2F0YWxvZ3M8L3N0cm9uZz4sIGFuZCBvbmUga2luZCBmb3IgPHN0cm9uZz4iRmVhdHVyZSI8L3N0cm9uZz4gbGlzdHMsIHN1Y2ggYXMgcmVjZW50bHkgYWRkZWQgaXRlbXMgb3IgcmFuZG9tIHNlbGVjdGlvbnMuPC9wPg0KICAgIDxwPldoZW4gZWRpdGluZyBhIFRlbXBsYXRlLCB0aGUgYWRtaW4gc2NyZWVuIHdpbGwgZGlzcGxheSBhIGxpc3Qgb2YgU21hcnR5IHRhZ3MgYXZhaWxhYmxlIHRvIHlvdSBmb3IgdGhhdCBraW5kIG9mIHRlbXBsYXRlLiBUaGlzDQogICAgd2lsbCBvbmx5IGhhcHBlbiBvbmNlIHRoZSBtb2R1bGUga25vd3Mgd2hhdCBraW5kIG9mIHRlbXBsYXRlIHlvdSdyZSBlZGl0aW5nLCBzbyB3aGVuIHlvdSBmaXJzdCBjcmVhdGUgdGhlIHRlbXBsYXRlLCBpdCBkaXNwbGF5cyBhbGwNCiAgICB0aGUgU21hcnR5IHRhZ3MgaXQga25vd3MgYWJvdXQsIG9ubHkgc29tZSBvZiB3aGljaCBiZWluZyBhcHBsaWNhYmxlLjwvcD4NCiAgICA8aDQ+RGlzcGxheWluZyBBdHRyaWJ1dGVzIG9uIEl0ZW0gUGFnZXM8L2g0Pg0KICAgIDxwPkF0dHJpYnV0ZXMgYXJlIGF2YWlsYWJsZSB0byBTbWFydHkgYXMgdG9wLWxldmVsIHZhcmlhYmxlcy4gVGhleSBhcmUgc3RvcmVkIGFzIHNhbml0aXplZCB2ZXJzaW9ucyBvZiB0aGUgYXR0cmlidXRlIG5hbWVzLCB3aGljaCBtZWFucw0KICAgIGl0IGlzIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlIGFuZCBhbGwgcHVuY3R1YXRpb24gYW5kIG5vbi1VUy1BU0NJSSBjaGFyYWN0ZXJzIGdldCByZW1vdmVkLiBUaGlzIGlzIGJlY2F1c2UgU21hcnR5IGlzIGZpbmlja3ksIGFuZCB3aWxsIG5vdCBoYW5kbGUgdGhlc2UgY2hhcmFjdGVycy48L3A+DQogICAgPHA+U28sIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhbiBhdHRyaWJ1dGUgY2FsbGVkIDxzdHJvbmc+Ikdsw7xja2xpY2hrZWl0Ijwvc3Ryb25nPiwgdGhlcmUgd2lsbCBiZSBhIFNtYXJ0eSB2YXJpYWJsZSA8c3Ryb25nPnskZ2xja2xpY2hrZWl0fTwvc3Ryb25nPi4gTm90ZSB0aGF0IHRoZSAiw7wiIGlzIG9taXR0ZWQuPC9wPg0KICAgIDxwPkZvcnR1bmF0ZWx5LCB0aGlzIGlzIHNpbXBsaWZpZWQgYnkgdGhlICRhdHRybGlzdCBsaXN0IGF2YWlsYWJsZS4gVGhpcyBpcyBhIGxpc3Qgb2YgYXR0cmlidXRlcyBieSBmb3JtYWwgbmFtZSAoIkdsw7xja2xpY2hrZWl0IikgYW5kIHRoZWlyIGtleSAoImdsY2tsaWNoa2VpdCIpLiBGb3IgZXhhbXBsZToNCiAgICA8cHJlPntsaXRlcmFsfQ0KICAgICAge3NlY3Rpb24gbmFtZT1hdCBsb29wPSRhdHRybGlzdH0NCiAgICAgICZsdDtkaXYgY2xhc3M9Iml0ZW1fYXR0cmlidXRlX25hbWUiPnskYXR0cmxpc3RbYXRdLm5hbWV9OiZsdDsvZGl2PiZsdDtkaXYgY2xhc3M9Iml0ZW1fYXR0cmlidXRlX3ZhbCI+e2V2YWwgdmFyPSRhdHRybGlzdFthdF0ua2V5fSZsdDsvZGl2Pg0KICAgICAgey9zZWN0aW9ufXsvbGl0ZXJhbH08L3ByZT4NCiAgICA8cD5BcyBvZiA8c3Ryb25nPnZlcnNpb24gMC44PC9zdHJvbmc+LCB5b3UgY2FuIGFzc2lnbiBhbiBhbGlhcyB0byBlYWNoIGF0dHJpYnV0ZS4gVGhlc2UgYWxpYXNlcyBuZWVkIHRvIGJlIFVTLUFTQ0lJIGFuZCBjb250YWluIG5vIHB1bmN0dWF0aW9uLiBUaGV5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHNhbml0aXplZCBhdHRyaWJ1dGUgbmFtZSAoZS5nLiwgeW91IGNvdWxkIHVzZSB0aGUgYWxpYXMgImdsdWVja2xpY2hrZWl0IikuPC9wPg0KICAgIDxoND5EaXNwbGF5aW5nIEF0dHJpYnV0ZXMgb24gUGFnZXMgd2l0aCBMaXN0cyBvZiBJdGVtczwvaDQ+DQogICAgPHA+QXR0cmlidXRlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIDxzdHJvbmc+JGl0ZW1saXN0c1sjXTwvc3Ryb25nPiBpbiB0d28gZGlmZmVyZW50IHdheXM6IHRvcC1sZXZlbCBhdHRyaWJ1dGVzIG9mIHRoZSBpdGVtLCBhbmQgYXMgcGFydCBvZiB0aGUgaXRlbSdzIDxzdHJvbmc+ImF0dHIiPC9zdHJvbmc+IGFycmF5LiBUaGV5IGFyZSBzdG9yZWQgYXMgc2FuaXRpemVkIHZlcnNpb25zIG9mIHRoZSBhdHRyaWJ1dGUgbmFtZXMsIHdoaWNoIG1lYW5zIHRoZXkgYXJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlIGFuZCBhbGwgcHVuY3R1YXRpb24gYW5kIG5vbi1VUy1BU0NJSSBjaGFyYWN0ZXJzIGdldCByZW1vdmVkLiBUaGlzIGlzIGJlY2F1c2UgU21hcnR5IGlzIGZpbmlja3ksIGFuZCB3aWxsIG5vdCBoYW5kbGUgdGhlc2UgY2hhcmFjdGVycy48L3A+DQogICAgPHA+U28sIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhbiBhdHRyaWJ1dGUgY2FsbGVkIDxzdHJvbmc+Ikdsw7xja2xpY2hrZWl0Ijwvc3Ryb25nPiwgdGhlIGl0ZW0gd2lsbCBoYXZlIDxzdHJvbmc+JGl0ZW0uZ2xja2xpY2hrZWl0PC9zdHJvbmc+IGFuZCA8c3Ryb25nPiRpdGVtLmF0dHJzWydnbGNrbGljaGtlaXQnXTwvc3Ryb25nPi4gTm90ZSB0aGF0IHRoZSA8c3Ryb25nPiLDvCI8L3N0cm9uZz4gaXMgb21pdHRlZC4gWW91IGNhbiByZWZlciB0byB0aGlzIGF0dHJpYnV0ZSBpbiB5b3VyIHRlbXBsYXRlDQogICAgd2l0aCBTbWFydHkgY29kZSBsaWtlOiB7bGl0ZXJhbH08c3Ryb25nPnskaXRlbWxpc3RbaW5kZXhdLmdsY2tsaWNra2VpdH08L3N0cm9uZz4gb3IgPHN0cm9uZz57JGl0ZW1saXN0W2luZGV4XS5hdHRycy5nbGNrbGljaGtlaXR9PC9zdHJvbmc+ey9saXRlcmFsfS48L3A+DQogICAgPHA+Rm9ydHVuYXRlbHksIHRoaXMgaXMgc2ltcGxpZmllZCBieSB0aGUgPHN0cm9uZz4kYXR0cmxpc3Q8L3N0cm9uZz4gbGlzdCBhdmFpbGFibGUuIFRoaXMgaXMgYSBsaXN0IG9mIGF0dHJpYnV0ZXMgYnkgZm9ybWFsIG5hbWUgKCJHbMO8Y2tsaWNoa2VpdCIpIGFuZCB0aGVpciBrZXkgKCJnbGNrbGljaGtlaXQiKS4gRm9yIGV4YW1wbGU6DQogICAgPHByZT57bGl0ZXJhbH0NCiAgICAgICAge2ZvcmVhY2ggZnJvbT0kYXR0cmxpc3QgaXRlbT1hdHRyIGtleT1rfQ0KICAgICAgICB7JGF0dHJ9OiB7JGl0ZW1zW251bWxvb3BdWyRrXX0NCiAgICAgICAgey9mb3JlYWNofXsvbGl0ZXJhbH08L3ByZT4NCiAgICA8cD5BcyBvZiA8c3Ryb25nPnZlcnNpb24gMC44PC9zdHJvbmc+LCB5b3UgY2FuIGFzc2lnbiBhbiBhbGlhcyB0byBlYWNoIGF0dHJpYnV0ZS4gVGhlc2UgYWxpYXNlcyBuZWVkIHRvIGJlIDxzdHJvbmc+VVMtQVNDSUk8L3N0cm9uZz4gYW5kIGNvbnRhaW4gbm8gcHVuY3R1YXRpb24uIFRoZXkgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgc2FuaXRpemVkIGF0dHJpYnV0ZSBuYW1lIChlLmcuLCB5b3UgY291bGQgdXNlIHRoZSBhbGlhcyAiZ2x1ZWNrbGljaGtlaXQiKS48L3A+DQogICAgPGg0PlNtYXJ0eSB0YWdzIGluIEF0dHJpYnV0ZXM8L2g0Pg0KICAgIDxwPlNvbWV0aW1lcywgeW91J2xsIHdhbnQgdGhlIGRlc2NyaXB0aW9ucyBvZiB5b3VyIGl0ZW1zIHRvIGluY2x1ZGUgc21hcnR5IHRhZ3MgKGUuZy4sIGNtc19zZWxmbGluaykuIFRvIG1ha2UgdGhhdCB3b3JrLCB5b3UnbGwgbmVlZCB0bw0KICAgIHVwZGF0ZSB5b3VyIHRlbXBsYXRlLiBGb3IgdGhlIGF0dHJpYnV0ZXMgd2hlcmUgeW91IHdhbnQgc21hcnR5IHRhZ3MgdG8gYmUgYWN0aXZlLCB5b3UnbGwgbmVlZCB0byBuZXN0IHRoZSBzbWFydHkgZXZhbHVhdGlvbnMgaW4geW91ciB0ZW1wbGF0ZS4gRm9yIGV4YW1wbGU6PC9wPg0KICAgIDxwcmU+e2xpdGVyYWx9JiMxMjM7ZXZhbCB2YXI9JGF0dHJsaXN0W2F0XS5rZXl9PC9wcmU+DQogICAgPHA+YmVjb21lczo8L3A+ey9saXRlcmFsfQ0KICAgIDxwcmU+JiMxMjM7ZXZhbCB2YXI9JGVudHJ5LT5pbnB1dCBhc3NpZ249dGhpc0F0dHJ9JiMxMjM7ZXZhbCB2YXI9JHRoaXNBdHRyfTwvcHJlPg0KICA8L2Rpdj4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIHsqIHdoYXQgaXMgbmV3ICp9DQogIDxkaXYgaWQ9IndoYXRzbmV3X2MiPg0KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICA8aDM+V2hhdCdzIG5ldzwvaDM+DQogICAgICA8cD5UaGlzIGlzIGEgc3VtbWFyeSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgY2hhbmdlcyB0aGUgbW9kdWxlIGFzIGdvbmUgdGhyb3VnaC4gRm9yIGRldGFpbHMsIHBsZWFzZSBjb25zdWx0IHRoZSBjaGFuZ2Vsb2cuPC9wPg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+DQogICAgICAgICAgQ2F0YWxvZ2VyIGlzIG5vdyBleGNsdXNpdmVseSBjb21wYXRpYmxlIHdpdGggQ01TTVMgMi54Ow0KICAgICAgICA8L2xpPiANCiAgICAgICAgPGxpPg0KICAgICAgICAgIENhdGFsb2dlciBpcyBub3cgY29tcGF0aWJsZSBQSFAgNy54Ow0KICAgICAgICA8L2xpPiAgDQogICAgICAgIDxsaT4NCiAgICAgICAgICBDYXRhbG9nZXIgYWRtaW4gbWVudSBoYXMgbW92ZWQgdG8gY29udGVudCBzZWN0aW9uOw0KICAgICAgICA8L2xpPiANCiAgICAgICAgPGxpPg0KICAgICAgICAgIGNvbnRlbnQgdHlwZXMgbm93IGJlaGF2ZSwgZm9yIHRoZSBtb3N0IHBhcnQsIGxpa2UgQ01TTVMgY29yZSBjb250ZW50IHR5cGVzOg0KICAgICAgICAgIDx1bD4NCiAgICAgICAgICAgIDxsaT5hbGwgYXR0cmlidXRlIG9mIHRoZSB0eXBpY2FsIGNvbnRlbnQgdHlwZSBjYW4gYmUgZm91bmQgYW5kIHVzZWQ7PC9saT4NCiAgICAgICAgICAgIDxsaT5hZGRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzIGNhbiBub3cgYmUgdXNlZCBvbiBwYWdlIHRlbXBsYXRlcyAtIENhdGFsb2dlciB3aWxsIGFsbG93IGl0J3MgdXNlOzwvbGk+DQogICAgICAgICAgICA8bGk+Y2F0YWxvZ2VyIHBhZ2VzIGNhbiBub3cgYmUgcHJldmlld2VkIGJ5IENvbnRlbnQgTWFuYWdlciAtIFByZXZpZXcgdGFiOzwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgPC9saT4NCiAgICAgICAgPGxpPg0KICAgICAgICAgIHN1YiB0ZW1wbGF0ZXMgaGF2ZSBhIG5ldyB2YXJpYWJsZSB3aXRoIHRoZSBtYWluIGNvbnRlbnQgYmxvY2sgZ2l2aW5nIHVzZXJzIHNvbWUgZnJlZWRvbSByZWdhcmRpbmcgaXRzIHBsYWNlbWVudDsNCiAgICAgICAgPC9saT4gDQogICAgICAgIDxsaT4NCiAgICAgICAgICBpbWFnZSB0YWJzIHdpbGwgb25seSBiZSB2aXNpYmxlIGlmIHRoZXJlIGFyZSBpbWFnZXMgc2V0IHRvIGJlIHVzZWQgaW4gdGhlIG1vZHVsZSBzZXR0aW5nczsNCiAgICAgICAgPC9saT4gIA0KICAgICAgICA8bGk+DQogICAgICAgICAgZmlsZSB0YWJzIHdpbGwgb25seSBiZSB2aXNpYmxlIGlmIHRoZXJlIGFyZSBmaWxlcyBzZXQgdG8gYmUgdXNlZCBpbiB0aGUgbW9kdWxlIHNldHRpbmdzOw0KICAgICAgICA8L2xpPiAgIA0KICAgICAgICA8bGk+DQogICAgICAgICAgdGhlcmUgaGF2ZSBiZWVuIHNvbWUgY2hhbmdlcyB0byBzdWItdGVtcGxhdGVzIGFsdGhvdWdoIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdhcyBrZXB0IGFzIG11Y2ggYXMgcG9zc2libGU7DQogICAgICAgIDwvbGk+ICAgIA0KICAgICAgICA8bGk+DQogICAgICAgICAgdGhlIGxvY2F0aW9uIGRpciBvZiB0aGUgaW1hZ2VzIGlzIG5vdyBjb25jZWFsZWQgaWYgQ2F0YWxvZ2VyIG5hdGl2ZSBpbWFnZSBoYW5kbGluZyBpcyB1c2VkOw0KICAgICAgICA8L2xpPiAgICANCiAgICAgICAgPGxpPg0KICAgICAgICAgIGEgaHVnZSBudW1iZXIgb2YgPGVtPnVuZGVyIHRoZSBob29kPC9lbT4gbW9kaWZpY2F0aW9ucyBhbmQgb3B0aW1pemF0aW9ucyB3YXMgbWFkZSB0byB0aGUgY29kZTsNCiAgICAgICAgPC9saT4gICAgDQogICAgICA8L3VsPg0KICAgICAgPHA+QWx0aG91Z2ggYWxsIGVmZm9ydHMgaGF2ZSBiZWVuIG1hZGUgdG8gdGVzdCBhbmQgbWFrZSBzdXJlIHRoZSBtb2R1bGUgd29ya3Mgd2l0aG91dCBpc3N1ZXMsIGdpdmVuIHRoZSBudW1iZXIgb2YgbW9kaWZpY2F0aW9ucywgbWlub3IgYnVncyBhcmUgZXhwZWN0ZWQgdG8gZXhpc3QsIHNvIHBsZWFzZSBmaWxlIGEgQnVnIFJlcG9ydCBpZiB5b3UgZmluZCBvbmUuPC9wPg0KICAgICAgPHA+PGRpdiBjbGFzcz0nd2FybmluZyc+SXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgYSBmdWxsIGJhY2t1cCBvZiBmaWxlcyBhbmQgZGF0YWJhc2UgYmVmb3JlIGFuIHVwZ3JhZGUuIFNvbWUsIG1vcmUgY29tcGxleCwgaW5zdGFsbGF0aW9ucyBtYXkgaGF2ZSBpc3N1ZXM6IG1vc3QsIGlmIG5vdCBhbGwsIG9mIHRoZW0gc2hvdWxkIGJlIHNvbHZlZCBieSBjbGVhcmluZyBDTVNNUyBjYWNoZSBhbmQvb3IgdHdlYWtpbmcgc3ViLXRlbXBsYXRlcy48L2Rpdj48L3A+DQogICAgPC9kaXY+IA0KICA8L2Rpdj4NCiAgeyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQogIHsqIEFib3V0IC8gQ3JlZGl0cyAqfQ0KICA8ZGl2IGlkPSJhYm91dF9jIj4NCiAgICANCiAgICA8aDM+U3VwcG9ydDwvaDM+DQogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgIDxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0LCBwbGVhc2UgdmlzaXQgdGhlIENNUyBNYWRlIFNpbXBsZSAgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZyI+RGV2ZWxvcGVyIEZvcmdlPC9hPi48L2xpPg0KICAgICAgICA8bGk+VG8gb2J0YWluIGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHNlbmQgYW4gZW1haWwgdG8gdGhlIGF1dGhvciBhdCA8YSBocmVmPSJtYWlsdG86am9tb3JnQHNtLWFydC1sYWIuY29tIj4mbHQ7am9tb3JnQHNtLWFydC1sYWIuY29tJmd0OzwvYT4uPC9saT4NCiAgICAgICAgPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPg0KICAgICAgICA8bGk+VGhlIGF1dGhvciBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPg0KICAgICAgICA8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkgYW5kIGdyb3ZlbGxpbmcgZm9yIGZyZWUgc3VwcG9ydC48L2xpPg0KICAgICAgPC91bD4NCiAgICAgPC9kaXY+DQogICAgICAgDQogICAgPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+DQogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4gICAgDQogICAgICA8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQogICAgICA8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTIgLSB7JHNtYXJ0eS5ub3d8ZGF0ZV9mb3JtYXQ6JyVZJ30sIEZlcm5hbmRvIE1vcmdhZG8gKEpvTW9yZykgPGEgaHJlZj0ibWFpbHRvOmpvbW9yZ0BzbS1hcnQtbGFiLmNvbSI+Jmx0O2pvbW9yZ0BzbS1hcnQtbGFiLmNvbSZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQogICAgICA8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFNhbXVlbCBHb2xkc3RlaW4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPiAgDQogICAgICA8cCBzdHlsZT0iZm9udC1zaXplOjg1JTtmb250LXdlaWdodDogYm9sZDsiPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOzxiciAvPiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247PGJyIC8+IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPg0KICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZTo4NSU7Zm9udC13ZWlnaHQ6IGJvbGQ7Ij5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOzxiciAvPiB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLjwvcD4NCiAgICAgIDxwIHN0eWxlPSJmb250LXNpemU6ODUlO2ZvbnQtd2VpZ2h0OiBib2xkOyI+U2VlIHRoZUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuPC9wPg0KICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZTo4NSU7Zm9udC13ZWlnaHQ6IGJvbGQ7Ij5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTs8YnIgLz4gaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vciByZWFkIGl0IG9ubGluZTwvYT4uPC9wPg0KICAgICAgPHAgc3R5bGU9ImZvbnQtc2l6ZTo4NSU7Zm9udC13ZWlnaHQ6IGJvbGQ7Ij5Zb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KICAgIDwvZGl2Pg0KICAgIA0KICAgIDxoMz5DcmVkaXRzPC9oMz4NCiAgICA8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiBvcmlnaW5hbHkgY3JlYXRlZCwgZGV2ZWxvcGVkIGFuZCBtYWludGFpbmVkIGZvciBhIG51bWJlciBvZiB5ZWFycyBieSBTYW11ZWwgR29sZHN0ZWluLiBGZXJuYW5kbyBNb3JnYWRvIHRvb2sgb3ZlciBhbmQgaGFzIGJlZW4gbWFpbnRhaW5pbmcgaXQgKGZvciBiZXR0ZXIgb3IgZm9yIHdvcnN0KSBzaW5jZSAyMDEyLjwvcD4NCiAgICA8cD48L3A+DQogICAgPHVsPg0KICAgICAgPGxpPjxzdHJvbmc+U2FtdWVsIEdvbGRzdGVpbiAoc2pnKTwvc3Ryb25nPiAtIENyZWF0aW9uIGFuZCBkZXZlbG9wbWVudDs8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+TnVubzwvc3Ryb25nPiAtIGNvZGUgY29udHJpYnV0aW9uczs8L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+TW9ydGVuIFBvdWxzZW4gKHNpbG1hcmlsbGlvbik8L3N0cm9uZz4gLSBjb2RlIGNvbnRyaWJ1dGlvbnM7PC9saT4NCiAgICAgIDxsaT48c3Ryb25nPkZlcm5hbmRvIE1vcmdhZG8gKEpvTW9yZyk8L3N0cm9uZz4gLSBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2U7PC9saT4NCiAgICA8L3VsPg0KICAgIA0KICAgIDxoMz5Db250cmlidXRvcnM8L2gzPg0KICAgIDx1bD4NCiAgICAgIDxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5pZC1hLmNvLnVrIiByZWw9ImV4dGVybmFsIj5QYXVsIENvb3BlcjwvYT4gLSBzcG9uc29yZWQgdGhlIGRldmVsb3BtZW50IG9mIHRleHRhcmVhIGF0dHJpYnV0ZXM7PC9saT4NCiAgICAgIDxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5tYXR0aG9ybnNieS5jYSIgcmVsPSJleHRlcm5hbCI+TWF0dCBIb21zYnkgKERJR0kzKTwvYT4gLSBzcG9uc29yc2hpcDs8L2xpPg0KICAgIDwvdWw+DQogICAgPHA+VGhhbmtzIHRvIG51bWVyb3VzIHBhdGllbnQgdXNlcnMgYW5kIGJ1ZyB0ZXN0ZXJzIChtYW55IG9mIHdob20gaGFkIG5vIGlkZWEgd2hhdCB0aGV5IHdlcmUgZ2V0dGluZyBpbnRvKS48L3A+IA0KICA8L2Rpdj4NCjwvZGl2Pg0KDQoNCg==]]></data>
	</file>
	<file>
	  <filename>/templates/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/templates/templatelist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRpbm5lcm5hdn0KPGJyIC8+CjxoMz57JHNlY3Rpb259PC9oMz4Ke2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KCTx0aGVhZD4KCQk8dHI+CgkJCTx0aD57JHRpdGxlX3RlbXBsYXRlfTwvdGg+CgkJCTx0aD57JHRpdGxlX3RlbXBsYXRlX3R5cGV9PC90aD4KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0neyRlbnRyeS0+cm93Y2xhc3N9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfSc7Ij4KCQkJPHRkPnskZW50cnktPnRpdGxlfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT50eXBlfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPgoJCTwvdHI+Cgl7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgp7ZWxzZX0KPHA+eyRub3RlbXBsYXRlc308L3A+CnsvaWZ9CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KCTxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD4KPC9kaXY+Cg==]]></data>
	</file>
</module>
