<?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>Promotions</name>
	<version>1.2.1</version>
  <mincmsversion>1.12.1</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2R1Y3RzIGFuZCBPcmRlcnMgbW9kdWxlIHRvIGFsbG93IGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aW1lIGxpbWl0ZWQgcHJvbW90aW9ucyBmb3IgdGhlIHByb2R1Y3RzIG9uIHlvdXIgZS1jb21tZXJjZSB3ZWJzaXRlLjwvcD4KPGgzPkZlYXR1cmVzOjwvaDM+Cjx1bD4KPGxpPjx1PkFsbCBwcm9tb3Rpb25zIGFyZSB0aW1lIGxpbWl0ZWQuPC91Pjxici8+PGJyLz48L2xpPgo8bGk+PHU+QSBwcm9tb3Rpb24gY2FuIGhhdmUgb25lIG9yIG1vcmUgY29uZGl0aW9ucyB0byBpbmRpY2F0ZSBlbGlnaWJpbGl0eS48L3U+CiAgPHA+SWYgYSBwcm9tb3Rpb24gaXMgZGVmaW5lZCB3aXRoIHR3byBvciBtb3JlIGNvbmRpdGlvbnMsIGFsbCBvZiB0aG9zZSBjb25kaXRpb25zIG11c3QgYmUgbWV0IGluIG9yZGVyIGZvciB0aGUgY3VzdG9tZXIgdG8gYmUgZWxpZ2libGUgZm9yIHRoZSBwcm9tb3Rpb24uPC9wPgogIDxwPkEgbnVtYmVyIG9mIGNvbmRpdGlvbiB0eXBlcyBleGlzdC4uLiBIb3dldmVyIHNvbWUgb2YgdGhlbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlcnMuICBpLmU6ICBZb3UgY2Fubm90IGhhdmUgdHdvIGRpZmZlcmVudCB0eXBlIG9mIHByb2R1Y3QgY29uZGl0aW9ucy48L3A+CiAgPHVsPgo8bGk+PHU+UmVxdWlyZSBtZW1iZXJzaGlwIGluIGFuIEZFVSBHcm91cDo8L3U+CiAgPHA+WW91IGNhbiBlbnRlciBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIEZFVSBncm91cCBuYW1lcy4gIFRoZSBsb2dnZWQgaW4gd2Vic2l0ZSB2aXNpdG9yIG11c3QgYmUgYSBtZW1iZXIgb2Ygb25lIG9mIHRoZXNlIGdyb3VwcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhlIHByb21vdGlvbi48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIG1pbmltdW0gcHVyY2hhc2UgYW1vdW50OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGUgcHJlLXRheC9wcmUtc2hpcHBpbmcgdG90YWwgZm9yIHRoZWlyIG9yZGVyIG11c3QgbWVldCB0aGUgc3BlY2lmaWVkIG1pbmltdW0gdmFsdWUuPC9wPjwvbGk+CiAgPGxpPjx1PlJlcXVpcmUgdGhlIHB1cmNoYXNlIG9mIGEgc3BlY2lmaWMgcHJvZHVjdDo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgaGlzIGNhcnQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwcm9kdWN0IG1hdGNoaW5nIHRoZSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwcm9kdWN0IGlkcyBlbnRlcmVkLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHB1cmNoYXNlIG9mIGF0bGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBjYXRlZ29yeTo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgaGlzIGNhcnQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwcm9kdWN0IHRoYXQgaXMgd2l0aGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnkgbmFtZXMgKGZyb20gdGhlIHByb2R1Y3RzIG1vZHVsZSkgc3BlY2lmaWVkLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHB1cmNoYXNlIG9mIGF0bGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBoaWVyYXJjaHk6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhpcyBjYXJ0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvZHVjdCB0aGF0IGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHByb2R1Y3RzIG1vZHVsZSBoaWVyYXJjaHkuPC9wPgogIDxwPkhpZXJhcmNoeSBuYW1lcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtIG9mICZxdW90O1BhcmVudC5QYXJlbnQuQ2hpbGQmcXVvdDsgaS5lOiAmcXVvdDtDbG90aGluZy5UZW50cyZxdW90Oy4gIEhpZXJhcmNoeSBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLiAgV2lsZGNhcmRzIGNhbiBiZSBzcGVjZmlmaWVkIGJ5IHVzaW5nIHRoZSAqIGNoYXJhY3Rlci4gIGkuZTogJnF1b3Q7Q2xvdGhpbmcqJnF1b3Q7LjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIGEgQ291cG9uIENvZGU6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhlIG11c3QgaGF2ZSBzdXBwbGllZCB0aGUgY291cG9uIGNvZGUgdGhhdCBtYXRjaGVzIHRoaXMgY29uZGl0aW9uLjwvcD4KICA8cD5JbiBvcmRlciB0byBhbGxvdyBjdXN0b21lcnMgdG8gZW50ZXIgY291cG9uIGNvZGVzLCB5b3UgbmVlZCB0byBhZGQgYSB0YWcgaW50byB5b3VyIHBhZ2UgdGVtcGxhdGUgb3IgcGFnZSBjb250ZW50IGxpa2Uge1Byb21vdGlvbnN9LiAgVGhpcyB3aWxsIGRpc3BsYXkgYSBmb3JtIHRoYXQgYWxsb3dzIHlvdXIgdXNlcnMgdG8gZW50ZXIgY291cG9uIGNvZGVzLiAgQ291cG9uIGNvZGVzIGFyZSByZW1lbWJlcmVkIHVudGlsIHRoZSB1c2VyIGNsb3NlcyB0aGUgYnJvd3Nlci48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIG1pbmltdW0gb3JkZXIgd2VpZ2h0OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGUgc3VtIHRvdGFsIG9mIGFsbCBvZiB0aGUgd2VpZ2h0IHZhbHVlcyBmb3IgdGhlIGl0ZW1zIGluIGhpcyBjYXJ0IG11c3QgbWVldCBvciBleGNlZWQgdGhlIHZhbHVlIHNwZWNpZmllZC48L3A+PC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPjx1PkVhY2ggcHJvbW90aW9uIGNhbiBoYXZlIGEgZGlmZmVyZW50ICZxdW90O29mZmVyJnF1b3Q7PC91Pgo8cD5BIG51bWJlciBvZiBkaWZmZXJlbnQgb2ZmZXJzIHR5cGVzIGFyZSBhdmFpbGFibGU6PC9wPgogIDx1bD4KPGxpPjx1PlBlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsOjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGJldHdlZW4gMCBhbmQgMSB0byBpbmRpY2F0ZSBhIHBlcmNlbnRhZ2Ugb2ZmLiAgaS5lOiAwLjEgaW5kaWNhdGVzIDEwJSBvZmYuICAgRHVyaW5nIHRoZSBjaGVja291dCBwcm9jZXNzLCBhbnkgbm9uIHRheCwgb3Igbm9uIHNoaXBwaW5nIGl0ZW0gaW4gdGhlIG9yZGVyIHdpbGwgYmUgcmVkdWNlZCBpbiBwcmljZSBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC48L3A+PC9saT4KPGxpPjx1PlJlZHVjZSBvcmRlciB0b3RhbCBieSBhIHNwZWNpZmllZCBhbW91bnQ6PC91Pgo8cD5UaGlzIG9mZmVyIHR5cGUgYWxsb3dzIHlvdSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiB0aGUgb3JkZXIgYnkgYSBjZXJ0YWluIGRvbGxhciBmaWd1cmUuICBUaGlzIGRvbGxhciBmaWd1cmUgd2lsbCBiZSBhZGRlZCBhcyBhIGRpc2NvdW50IGl0ZW0gaW50byB0aGUgb3JkZXIgbGluZSBpdGVtcyBhbmQgd2lsbCBhcHBlYXIgb24gdGhlIGludm9pY2UuPC9wPjwvbGk+CjxsaT48dT5SZWNlaXZlIGEgRnJlZSBQcm9kdWN0OjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIHByb2R1Y3QgaWQgdG8gYXV0b21hdGljYWxseSBpbmNsdWRlIGluIHRoZSBvcmRlciBhdCBubyBjb3N0LiAgVGhpcyBwcm9kdWN0IHdpbGwgYmUgYWRkZWQgYXMgYSBwcm9kdWN0IGl0ZW0gaW50byB0aGUgb3JkZXIgbGluZSBpdGVtcywgYnV0IHdpbGwgYXBwZWFyIGF0IG5vIGNvc3QuPC9wPjwvbGk+CjxsaT48dT5EaXNjb3VudCB0aGUgYXBwbGljYWJsZSBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2U6PC91Pgo8cD5UaGlzIG9mZmVyIHR5cGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgcHJvZHVjdCBjb25kaXRpb24gaXMgc3BlY2lmaWVkLiAgSWYgYSBwcm9kdWN0IGNvbmRpdGlvbiBpcyBzcGVjaXJpZWQsIGFuZCBtYXRjaGVzLCB0aGlzIG9mZmVyIHR5cGUgd2lsbCBkaXNjb3VudCB0aGUgbWF0Y2hpbmcgcHJvZHVjdHMgZnJvbSB0aGUgY3VzdG9tZXIgb3JkZXIgYnkgdGhlIHNwZWNpZmllZCB2YWx1ZS48L3A+LgogIDwvdWw+CjwvbGk+CjxsaT48dT5BbGxvd3Mgd2Vic2l0ZSB2aXNpdG9ycyB0byBlbnRlciBvbmUgb3IgbW9yZSBjb3Vwb24gY29kZXM8L3U+PGJyLz48YnIvPjwvbGk+CjxsaT48dT5EaXNjb3VudHMgYXJlIGNhbGN1bGF0ZWQgYW5kIGFwcGxpZWQgdG8gdGhlIG9yZGVyIGR1cmluZyB0aGUgY2hlY2tvdXQgcHJvY2Vzcy48L3U+PGJyLz48YnIvPjwvbGk+CjxsaT48dT5JZiBhIHdlYiBjdXN0b21lciBpcyBlbGlnaWJsZSBmb3IgbXVsdGlwbGUgcHJvbW90aW9ucywgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCB2YWx1ZSBpcyBhcHBsaWVkLjwvdT48L2xpPgo8L3VsPgo8YnIvPgo8aDM+SG93IERvIEkgVXNlIEl0OjwvaDM+CjxvbD4KICA8bGk+MS4gSW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBtb2R1bGU8L2xpPgogIDxsaT4yLiBDcmVhdGUgYXQgbGVhc3Qgb25lIHByb21vdGlvbjwvbGk+CiAgPGxpPjMuIFNwZWNpZnkgdGhpcyBtb2R1bGUgYXMgdGhlICZxdW90O1Byb21vdGlvbnMmcXVvdDsgbW9kdWxlIHdpdGhpbiB0aGUgT3JkZXJzIFByZWZlcmVuY2VzLjwvbGk+CiAgPGxpPjQuIDxlbT4ob3B0aW9uYWwpPC9lbT4gQWRkIHtQcm9tb3Rpb25zfSB0byBhIHBhZ2UgdGVtcGxhdGUgb3IgcGFnZSBjb250ZW50LjwvZW0+PC9saT4KPC9vbD4KPGgzPkV4YW1wbGU6PC9oMz4KPHA+SW4gdGhpcyBleGFtcGxlIHdlIHdpbGwgY3JlYXRlIGEgcHJvbW90aW9uIGxpa2UgJnF1b3Q7MTAlIG9mZiBhbGwgb3JkZXJzIG92ZXIgJDEwMCwgd2l0aCBjb3Vwb24gY29kZSZxdW90Ozo8L3A+Cjx1bD4KICA8bGk+MS4gPHU+Q3JlYXRlIGEgbmV3IHByb21vdGlvbjwvdT4KICA8cD5OYXZpZ2F0ZSB0byB0aGUgcHJvbW90aW9ucyBtb2R1bGUgYWRtaW4gcGFuZWwsIGFuZCBjbGljayBvbiAmcXVvdDtBZGQgYSBOZXcgUHJvbW90aW9uJnF1b3Q7LiAgWW91IHdpbGwgYmUgcHJlc2VudGVkIHdpdGggdGhlIHByb21vdGlvbnMgZm9ybS48L3A+PC9saT4KICA8bGk+Mi4gPHU+U3BlY2lmeSBhIHByb21vdGlvbiBuYW1lPC91PgogIDxwPkZvciB0aGlzIGV4YW1wbGUgd2Ugd2lsbCB1c2UgdGhlIG5hbWUgJnF1b3Q7U2ltcGxlIFNhbGUmcXVvdDs8L3A+PC9saT4KICA8bGk+My4gPHU+QWRkIGEgY291cG9uIGNvbmRpdGlvbjwvdT4KICA8cD5Gcm9tIHRoZSAmcXVvdDtUeXBlIG9mIENvbmRpdGlvbiZxdW90OyBkcm9wZG93biBzZWxlY3QgJnF1b3Q7UmVxdWlyZSBhIENvdXBvbiBDb2RlJnF1b3Q7LiAgRW50ZXIgJnF1b3Q7c2ltcGxlc2FsZSZxdW90OyBpbnRvIHRoZSBpbnB1dCBmaWVsZCBiZWxvdyBhbmQgY2xpY2sgQWRkLjwvcD48L2xpPgogIDxsaT40LiA8dT5BZGQgYW4gb3JkZXIgcHJpY2UgY29uZGl0aW9uPC91PgogIDxwPkZyb20gdGhlICZxdW90O1R5cGUgb2YgQ29uZGl0aW9uJnF1b3Q7IGRyb3Bkb3duIHNlbGVjdCAmcXVvdDtSZXF1aXJlIGEgTWluaW11bSBQdXJjaGFzZSBBbW91bnQmcXVvdDsgZnJvbSB0aGUgZHJvcGRvd24sIGFuZCBlbnRlciAxMDAgaW50byB0aGUgaW5wdXQgZmllbGQgYmVsb3cuICBDbGljayBBZGQuPC9wPjwvbGk+CiAgPGxpPjUuIDx1PlNwZWNpZnkgdGhlIG9mZmVyIHR5cGUsIGFuZCBhbW91bnQ8L3U+CiAgPHA+U2VsZWN0IHRoZSBvZmZlciB0eXBlICZxdW90O1BlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsJnF1b3Q7IGFuZCBlbnRlciAwLjEgaW50byB0aGUgdGV4dCBmaWVsZCBiZWxvdyB0byBpbmRpY2F0ZSAxMCUmcXVvdDs8L3A+PC9saT4KICA8bGk+Ni4gPHU+Q2xpY2sgc3VibWl0PC91PjwvbGk+CjwvdWw+CjxoMz5TbWFydHkgUGx1Z2luczwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBzbWFydHkgcGx1Z2luIHRvIGFpZCBpbiByZXRyaWV2aW5nIGFuZCBkaXNwbGF5aW5nIGRpc2NvdW50cyBmb3IgYSBzaW5nbGUgcHJvZHVjdC48L3A+Cjx1bD4KICA8bGk+PHN0cm9uZz57cHJvbW9fZ2V0X3Byb2RfZGlzY291bnQgW2ZldV91aWQ9dmFsXSBwcm9kdWN0X2lkPXZhbCBbYXNzaWduPXZhcl19PC9zdHJvbmc+CiAgPHA+SWYgc3VjY2Vzc2Z1bCwgdGhpcyBwbHVnaW4gcmV0dXJucyBhIGhhc2ggY29udGFpbmluZyBkaXNjb3VudCBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9kdWN0LiAgVGhlIGdyZWF0ZXN0IHBvc3NpYmxlIGRpc2NvdW50IGlzIGNhbGN1bGF0ZWQsIGNvbnNpZGVyaW5nIGFsbCBhY3RpdmUgcHJvbW90aW9ucywgdXNlciBpZCwgZW50ZXJlZCBjb3Vwb24gY29kZXMsIGFuZCBvdGhlciBtYXRjaGluZyBjb25kaXRpb25zLjwvcD4KICA8cD5QYXJhbWV0ZXJzOjwvcD4KICA8dWw+CiAgPGxpPmZldV91aWQgKG9wdGlvbmFsKSAtIFRoZSBGcm9udEVuZFVzZXJzIHVzZXJpZCB0byB0ZXN0IHdpdGguICBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIgaWQgd2lsbCBiZSB1c2VkLjwvbGk+CiAgPGxpPnByb2R1Y3RfaWQgKHJlcXVpcmVkKSAtIFRoZSBJRCBvZiB0aGUgcHJvZHVjdCB0byB0ZXN0IHdpdGguPC9saT4KICA8bGk+YXNzaWduIChvcHRpb25hbCkgLSBPcHRpb25hbGx5IGFzc2lnbiB0aGUgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgPC91bD4KICA8L2xpPgo8L3VsPgo8aDM+Q2F1dGlvbnM6PC9oMz4KPHA+UHJvbW90aW9ucyBhcmUgY2FsY3VsYXRlZCBvbiB0aGUgb3JkZXIgaW4gc2VxdWVuY2UuICBNdWx0aXBsZSBwcm9tb3Rpb25zIG1heSBtYXRjaCB0aGUgaXRlbXMgb2YgYSBzaW5nbGUgb3JkZXIsIHRoaXMgbWF5IHJlc3VsdCBpbiBhIHNpbmdsZSBvcmRlciBoYXZpbmcgYSB6ZXJvIDxlbSBzdHlsZT0iY29sb3I6IHJlZDsiPm5lZ2F0aXZlIHZhbHVlPC9lbT4uICBUaGUgb3JkZXJzIG1vZHVsZSBtYXkgZG8gc29tZSBiYXNpYyBjaGVja3MgdG8gaGVscCB3aXRoIG9yZGVyIGludGVncml0eSwgYnV0IGRvIG5vdCBjb3VudCBvbiBpdC4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBURVNUIHlvdXIgcHJvbW90aW9ucyBhbmQgdG8gYWx3YXlzIG1vbml0b3IgdGhlbSBiZWZvcmUgcm9sbGluZyB0aGVtIGxpdmUuPC9wPgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGUgbW9kdWxlIGF1dGhvciBpcyBpbiBubyB3YXkgb2JsaWdhdGVkIHRvIHByaXZpZGUgc3VwcG9ydCBmb3IgdGhpcyBjb2RlIGluIGFueSBmYXNoaW9uLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvcHJvbW90aW9ucyI+aGVyZTwvYT4uICBQbGVhc2UgYmUgdmVyYm9zZSBhbmQgZGVzY3JpcHRpdmUgd2hlbiBzdWJtaXR0aW5nIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzLCBhbmQgZm9yIGJ1ZyByZXBvcnRzIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHByb3ZpZGVkIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSBpc3N1ZS48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LiAgV2hlbiBkZXNjcmliaW5nIGFuIGlzc3VlIHBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byBwcml2aWRlIGFsbCByZWxhdmFudCBpbmZvcm1hdGlvbiwgYSB0aG9yb3VnaCBkZXNjcmlwdGlvbiBvZiB5b3VyIGlzc3VlLCBhbmQgc3RlcHMgdG8gcmVwcm9kdWNlIGl0IG9yIHlvdXIgZGlzY3Vzc2lvbiBtYXkgYmUgaWdub3JlZC48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LiAgSG93ZXZlciwgcGxlYXNlIHVzZSB0aGlzIGFzIGEgbGFzdCByZXNvcnQsIGFuZCBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBmb2xsb3dlZCBhbGwgYXBwbGljYWJsZSBpbnN0cnVjdGlvbnMgb24gdGhlIGZvcmdlLCBpbiB0aGUgZm9ydW1zLCBldGMuPC9saT4KPC91bD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4KPGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DR0V4dGVuc2lvbnMgPSZndDsgMS41MzwvbGk+PGxpPk9yZGVycyA9Jmd0OyAxLjE4LjI8L2xpPjxsaT5KUXVlcnlUb29scyA9Jmd0OyAxLjMuOTwvbGk+PGxpPlByb2R1Y3RzID0mZ3Q7IDIuMjU8L2xpPjwvdWw+PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gaW5saW5lPSJkZWZhdWx0IiAtIFNwZWNpZnkgdGhhdCB0aGUgY291cG9uIGNvZGUgZm9ybSBpcyBpbmxpbmUsIGFuZCB0aGUgcmVzdWx0cyBzaG91bGQgcmVwbGFjZSB0aGUgb3JpZ2luYWwgdGFnIGFuZCBub3QgdGhlIHBhZ2UgY29udGVudHM8L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHRlbXBsYXRlPSIiIC0gU3BlY2lmeSB0aGUgbmFtZSBvZiBhIG5vbiBkZWZhdWx0IGNvdXBvbiBjb2RlIHRlbXBsYXRlIHRvIGRpc3BsYXkgZm9yIHRoZSBkZWZhdWx0IGFjdGlvbjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMi4xPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5Jbml0aWFsIFJlbGVhc2U8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuMSAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KCiAgPGxpPlZlcnNpb24gMS4wLjQgLSBPY3RvYmVyLzIwMDkKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlczwvbGk+CiAgICA8L3VsPgogIDwvbGk+CgogIDxsaT5WZXJzaW9uIDEuMC41IC0gT2N0b2Jlci8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXM8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuNiAtIEZlYnJ1YXJ5LzIwMDkKICAgIDx1bD4KICAgICAgPGxpPkFkZHMgdGhlIGFiaWxpdHkgdG8gZ2V0IGRpc2NvdW50IGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBwcm9kdWN0LjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPlZlcnNpb24gMS4wLjYgLSBKdW5lLzIwMTAKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5WZXJzaW9uIDEuMC44IC0gSnVseS8yMDEwCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+VmVyc2lvbiAxLjAuMTAgLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgICAgPGxpPkFkZHMgZnJvbnRlbmQgYWJpbGl0eSB0byByZXNldCBjb3Vwb24gY29kZXMgdGhhdCBoYXZlIGJlZW4gZW50ZXJlZC48L2xpPgogICAgPC91bD4KICA8L2xpPgogPGxpPlZlcnNpb24gMS4wLjExLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xMi0gTWFyY2gvMjAxMQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiA8bGk+VmVyc2lvbiAxLjAuMTQgLSBBcHJpbC8yMDExCiAgIDx1bD4KICAgICA8bGk+TWlub3IgYnVnIGZpeC48L2xpPgogICA8L3VsPgogPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xNSAtIERlY2VtYmVyLzIwMTEKICAgPHVsPgogICAgIDxsaT5NaW5vciBidWcgZml4LjwvbGk+CiAgIDwvdWw+CiA8L2xpPgogPGxpPlZlcnNpb24gMS4xLnggLSBEZWNlbWJlci8yMDEyCiAgIDxwPjxzdHJvbmc+Tk9URTogQ09NUEFUSUJJTElUWSBNQVkgQkUgQlJPS0VOLiAgQ0hFQ0sgQUxMIE9GIFlPVVIgUFJPTU9USU9OUy48L3N0cm9uZz48L3A+CiAgIDxwPjxzdHJvbmc+Tk9URTogUEhQIDUuMy54IElTIFJFUVVJUkVELjwvc3Ryb25nPjwvcD4KICAgPHVsPgogICAgICA8bGk+TWFqb3IgcmV2aXNpb24gLSBhZGRzIGluc3RhbnQsIGFuZCBjaGVja291dCB0eXBlIHByb21vdGlvbnMuPC9saT4KICAgICAgPGxpPkFkZHMgbmV3IHByb21vdGlvbiB0ZXN0ZXIgY2xhc3NlcywgYW5kIGRlcHJlY2F0ZXMgdGhlIG9sZCBvbmVzLjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPk5vdGU6IFRoaXMgbWF5IG5vdCBiZSBhIHNpbXBsZSB1cGdyYWRlLjwvc3Ryb25nPjwvbGk+CiAgIDwvdWw+CiA8L2xpPgo8L3VsPgo8YnIgLz4=]]></about>
	<description><![CDATA[Create, manage, and interact with sales and promotions for your e-commerce site]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.53</requiredversion>
	</requires>
	<requires>
	  <requiredname>Orders</requiredname>
	  <requiredversion>1.18.2</requiredversion>
	</requires>
	<requires>
	  <requiredname>JQueryTools</requiredname>
	  <requiredversion>1.3.9</requiredversion>
	</requires>
	<requires>
	  <requiredname>Products</requiredname>
	  <requiredversion>2.25</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_addpromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCi8vCi8vIGluaXRpYWxpemF0aW9uCi8vCiRmZXVfbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwoKLy8KLy8gc2V0dXAKLy8KJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CmlmKCBpc3NldCgkcGFyYW1zWyd0eXBlJ10pICkgJHR5cGUgPSB0cmltKCRwYXJhbXNbJ3R5cGUnXSk7CgokcHJvbW8gPSBudWxsOwppZiggaXNzZXQoJHBhcmFtc1sncHJvbW9pZCddKSApIHsKICAvLyB1cGRhdGluZwogICRwcm9tbyA9IHByb21vX29wczo6bG9hZF9wcm9tb19ieV9pZCgoaW50KSRwYXJhbXNbJ3Byb21vaWQnXSk7CiAgJHR5cGUgPSAkcHJvbW8tPmdldF90eXBlKCk7IC8vIHVzZSB0aGUgcHJvbW90aW9uIHR5cGUuCn0KZWxzZSB7CiAgLy8gbmV3IHByb21vCiAgJHByb21vID0gbmV3IHByb21vdGlvbigpOwogICRwcm9tby0+c2V0X2NyZWF0ZWQodGltZSgpKTsKICAkcHJvbW8tPnNldF9lbmRfZGF0ZShzdHJ0b3RpbWUoc3ByaW50ZignKyVkIG1vbnRocycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcpKSkpOwogICRwcm9tby0+c2V0X29mZmVyX3R5cGUoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfdHlwZScpKTsKICAkcHJvbW8tPnNldF9vZmZlcl9kYXRhKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZmx0X29mZmVyX2RhdGEnKSk7Cn0KCi8vIHRoaXMgc3R1ZmYgaGFzIHRvIGJlIGFmdGVyIGRhdGEgbG9hZHMgc28gdGhhdCB0aGUgdHlwZSBpcyBzcGVjaWZpZWQgY29ycmVjdGx5Lgpzd2l0Y2goICR0eXBlICkgewogY2FzZSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDoKICAgJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2luc3RhbnRfcHJvbW90aW9ucycpOwogICBicmVhazsKIGNhc2UgcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOgogICAkdGhpcy0+U2V0Q3VycmVudFRhYignY2hlY2tvdXRfcHJvbW90aW9ucycpOwogICBicmVhazsKfQoKaWYoIGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSApICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CgovLwovLyBnYXRoZXIgZGF0YQovLwppZiggaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICkgewogIC8vIHZhbGlkYXRlCiAgJGVycm9yID0gJyc7CgogICRfZ2V0X2RhdGEgPSBmdW5jdGlvbigkcGFyYW1zLCRpZHgpIHsKICAgICRvdXQgPSBhcnJheSgpOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3NhdmVkX2NvbmRkYXRhMCddWyRpZHhdKSAmJiAkcGFyYW1zWydzYXZlZF9jb25kZGF0YTAnXVskaWR4XSApICRvdXRbXSA9IHRyaW0oJHBhcmFtc1snc2F2ZWRfY29uZGRhdGEwJ11bJGlkeF0pOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3NhdmVkX2NvbmRkYXRhMSddWyRpZHhdKSAmJiAkcGFyYW1zWydzYXZlZF9jb25kZGF0YTEnXVskaWR4XSApICRvdXRbXSA9IHRyaW0oJHBhcmFtc1snc2F2ZWRfY29uZGRhdGExJ11bJGlkeF0pOwogICAgcmV0dXJuICRvdXQ7CiAgfTsKCiAgLy8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG5hbWUgaXMgdmFsaWQuCiAgaWYoICFwcm9tb19vcHM6OmNoZWNrX3VudXNlZF9uYW1lKHRyaW0oJHBhcmFtc1snbmFtZSddKSwkcHJvbW8tPmdldF9pZCgpKSApICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9uYW1lX2V4aXN0cycpOwoKICAvLyBidWlsZCB0aGUgcHJvbW90aW9uIG9iamVjdAogICRwcm9tby0+c2V0X25hbWUodHJpbSgkcGFyYW1zWyduYW1lJ10pKTsKICBpZiggaXNzZXQoJHBhcmFtc1sndHlwZSddKSApICRwcm9tby0+c2V0X3R5cGUoJHBhcmFtc1sndHlwZSddKTsKICBpZiggaXNzZXQoJHBhcmFtc1snZGVzY3JpcHRpb24nXSkgKSAkcHJvbW8tPnNldF9kZXNjcmlwdGlvbih0cmltKCRwYXJhbXNbJ2Rlc2NyaXB0aW9uJ10pKTsKICBpZiggaXNzZXQoJHBhcmFtc1snaW1hZ2UnXSkgKSAkcHJvbW8tPnNldF9pbWFnZSh0cmltKCRwYXJhbXNbJ2ltYWdlJ10pKTsKICAkc2QgPSBta3RpbWUoMCwwLDAsKGludCkkcGFyYW1zWydzdGFydF9kYXRlX01vbnRoJ10sKGludCkkcGFyYW1zWydzdGFydF9kYXRlX0RheSddLChpbnQpJHBhcmFtc1snc3RhcnRfZGF0ZV9ZZWFyJ10pOwogICRwcm9tby0+c2V0X3N0YXJ0X2RhdGUoJHNkKTsKICAkZWQgPSBta3RpbWUoMCwwLDAsKGludCkkcGFyYW1zWydlbmRfZGF0ZV9Nb250aCddLChpbnQpJHBhcmFtc1snZW5kX2RhdGVfRGF5J10sKGludCkkcGFyYW1zWydlbmRfZGF0ZV9ZZWFyJ10pOwogICRwcm9tby0+c2V0X2VuZF9kYXRlKCRlZCk7CiAgJHByb21vLT5zZXRfb2ZmZXJfdHlwZSgkcGFyYW1zWydvZmZlcl90eXBlJ10pOwogICRwcm9tby0+c2V0X29mZmVyX2RhdGEodHJpbSgkcGFyYW1zWydvZmZlcl9kYXRhJ10pKTsKICAkcHJvbW8tPmRlbF9jb25kaXRpb25zKCk7CiAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHBhcmFtc1snc2F2ZWRfY29uZHR5cGUnXSk7ICRpKysgKSB7CiAgICAkY29uZCA9IG5ldyBwcm9tb3Rpb25fY29uZGl0aW9uOwogICAgJGNvbmQtPnNldF9jb25kX3R5cGUoJHBhcmFtc1snc2F2ZWRfY29uZHR5cGUnXVskaV0pOwogICAgJGNvbmQtPnNldF9kYXRhKCRfZ2V0X2RhdGEoJHBhcmFtcywkaSkpOwogICAgJHByb21vLT5hZGRfY29uZGl0aW9uKCRjb25kKTsKICB9CgogICRwcm9tby0+Y2xlYXJfZXh0cmEoKTsKICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlICkgewogICAgaWYoICFzdGFydHN3aXRoKCRrZXksJ2V4dHJhXycpICkgY29udGludWU7CiAgICAkbmtleSA9IHN1YnN0cigka2V5LDYpOwogICAgJHByb21vLT5zZXRfZXh0cmEoJG5rZXksJHZhbHVlKTsKICB9CgogIC8vIHZhbGlkYXRlIHRoZSBjb25kaXRpb25zLgogIGlmKCBlbXB0eSgkZXJyb3IpICYmIGlzc2V0KCRwYXJhbXNbJ3NhdmVkX2NvbmR0eXBlJ10pICkgewogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHBhcmFtc1snc2F2ZWRfY29uZHR5cGUnXSk7ICRpKysgKSB7CiAgICAgIGlmKCAhZW1wdHkoJGVycm9yKSApIGJyZWFrOwoKICAgICAgJGRhdGEgPSAkX2dldF9kYXRhKCRwYXJhbXMsJGkpOwogICAgICBzd2l0Y2goJHBhcmFtc1snc2F2ZWRfY29uZHR5cGUnXVskaV0pIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgoJaWYoICEkZmV1X21vZHVsZSApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX21vZHVsZV9ub3RfZm91bmQnLCdGcm9udEVuZFVzZXJzJyk7Cgl9CgllbHNlIGlmKCBjb3VudCgkZGF0YSkgIT0gMSApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfZmV1X2dyb3VwJyk7Cgl9CgllbHNlIHsKCSAgJGxpc3QgPSBleHBsb2RlKCcsJywkZGF0YSk7CgkgIGZvcmVhY2goICRsaXN0IGFzICR0bXAgKSB7CgkgICAgaWYoICEkZmV1X21vZHVsZS0+R3JvdXBFeGlzdHNCeU5hbWUodHJpbSgkdG1wKSkgKSB7CgkgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9mZXVfZ3JvdXAnKTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9TVUJUT1RBTDoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfV0VJR0hUOgoJaWYoIGNvdW50KCRkYXRhKSAhPSAxIHx8IChmbG9hdCkkZGF0YVswXSA8IDAuMDAwMDEgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX29yZGVyX2Ftb3VudCcpOwoJfQoJZWxzZSBpZiggJHR5cGUgPT0gcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX2NvbmRpdGlvbl90eXBlJyk7Cgl9CgllbHNlIHsKCSAgJHRtcCA9IGZsb2F0dmFsKCRkYXRhKTsKCSAgaWYoICR0bXAgPD0gMC4wMSB8fCAkdG1wID4gMTAwMDAwICkgewoJICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX29yZGVyX2Ftb3VudCcpOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RTS1U6CgkvLyB0b2RvCglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKCWlmKCBjb3VudCgkdG1wKSAhPSAxICkgewoJICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9wcm9kdWN0Jyk7Cgl9CgllbHNlIHsKCSAgJGxpc3QgPSBleHBsb2RlKCcsJywkZGF0YSk7CgkgIGZvcmVhY2goICRsaXN0IGFzICR0bXAgKSB7CgkgICAgaWYoICFwcm9kdWN0X29wczo6aXNfdmFsaWRfcHJvZHVjdF9pZCh0cmltKCR0bXApKSApIHsKCSAgICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3Byb2R1Y3QnKTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EQ0FUOgoJaWYoIGNvdW50KCRkYXRhKSAhPSAxICkgewoJICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9wcm9kdWN0X2NhdGVnb3J5Jyk7Cgl9CgllbHNlIHsKCSAgJGxpc3QgPSBleHBsb2RlKCcsJywkZGF0YSk7CgkgIGZvcmVhY2goICRsaXN0IGFzICR0bXAgKSB7CgkgICAgaWYoICFwcm9kdWN0X29wczo6aXNfdmFsaWRfY2F0ZWdvcnkodHJpbSgkdG1wKSkgKSB7CgkgICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9wcm9kdWN0X2NhdGVnb3J5Jyk7CgkgICAgICBicmVhazsKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkvLyB0b2RvCglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0NPVVBPTjoKCWlmKCBjb3VudCgkZGF0YSkgIT0gMSApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2NvdXBvbl9leGlzdHMnKTsKCX0KCWVsc2UgaWYoICFwcm9tb19vcHM6OmNoZWNrX3VudXNlZF9jb3Vwb24oJGRhdGEsJHByb21vLT5nZXRfaWQoKSkgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9jb3Vwb25fZXhpc3RzJyk7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRToKCWlmKCBjb3VudCgkZGF0YSkgIT0gMiB8fCAkZGF0YVswXSA9PSAnJyB8fCAoaW50KSRkYXRhWzFdIDwgMSApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfYnVsa3B1cmNoYXNlJyk7Cgl9CgkvLyB0b2RvOiB2ZXJpZnkgc2t1IChtYXkgaGF2ZSB0byBhc2sgZm9yIHNvdXJjZSkKCWJyZWFrOwoKICAgICAgfSAvLyBzd2l0Y2gKICAgIH0gLy8gZm9yIGVhY2ggY29uZGl0aW9uCgogICAgLy8gdmFsaWRhdGUgdGhlIG9mZmVyCiAgICBpZiggZW1wdHkoJGVycm9yKSApIHsKICAgICAgc3dpdGNoKCRwYXJhbXNbJ29mZmVyX3R5cGUnXSkgewogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKCWlmKCAkdHlwZSA9PSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVCApIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfb2ZmZXJfdHlwZScpOwoJfQoJZWxzZSB7CgkgICR0bXAgPSBmbG9hdHZhbCgkcGFyYW1zWydvZmZlcl9kYXRhJ10pOwoJICBpZiggJHRtcCA8IDAuMDAwMSB8fCAkdG1wID4gMTAwLjAgKSB7CgkgICAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfdmFsdWUnKTsKCSAgfQoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgoJJHRtcCA9IGZsb2F0dmFsKCRwYXJhbXNbJ29mZmVyX2RhdGEnXSk7CglpZiggJHRtcCA8IDAuMDAwMSB8fCAkdG1wID4gMTAwLjAgKSB7CgkgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3ZhbHVlJyk7Cgl9CglicmVhazsKCSAgICAKICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgoJaWYoICR0eXBlID09IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UICkgewoJICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZF9vZmZlcl90eXBlJyk7Cgl9CgllbHNlIHsKCSAgJHRtcCA9IGZsb2F0dmFsKCRwYXJhbXNbJ29mZmVyX2RhdGEnXSk7CgkgIGlmKCAkdG1wIDwgMC4wMDAxIHx8ICR0bXAgPiAxMDAwMC4wICkgewoJICAgICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3ZhbHVlJyk7CgkgIH0KCX0KCWJyZWFrOwoJICAgIAogICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCSR0bXAgPSB0cmltKCRwYXJhbXNbJ29mZmVyX2RhdGEnXSk7CglpZighcHJvZHVjdF9vcHM6OmlzX3ZhbGlkX3Byb2R1Y3RfaWQoJHRtcCkpIHsKCSAgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfcHJvZHVjdCcpOwoJfQoJYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyBwdXQgdGhlIHBhcmFtcyBpbiB0aGUgcHJvbW8gb2JqZWN0CiAgICBpZiggZW1wdHkoJGVycm9yKSApIHsKCiAgICAgIC8vIGNvbW1pdAogICAgICAkcmVzID0gJHByb21vLT5zYXZlKCk7CiAgICAgIGlmKCAkcmVzICkgewoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKICAgICAgfQogICAgICAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3Jfc2F2ZV9wcm9tb3Rpb24nKTsKICAgIH0KCiAgICBpZiggJGVycm9yICkgewogICAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlcnJvcik7CiAgICB9CiAgfQp9CgogICAgCi8vCi8vIGdpdmUgZXZlcnl0aGluZyB0byBzbWFydHkKLy8KJHRtcCA9IHByb21vdGlvbjo6Z2V0X3R5cGVzX2FycmF5KCk7CiRwcm9tb3R5cGVzID0gYXJyYXkoKTsKZm9yZWFjaCggJHRtcCBhcyAkb25lICkgewogICRwcm9tb3R5cGVzWyRvbmVdID0gJHRoaXMtPkxhbmcoJG9uZSk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3R5cGVzJywkcHJvbW90eXBlcyk7CgokdG1wID0gcHJvbW90aW9uOjpnZXRfb2ZmZXJfYXJyYXkoJHR5cGUpOwokb2ZmZXJ0eXBlcyA9IGFycmF5KCk7CmZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKICAkb2ZmZXJ0eXBlc1skb25lXSA9ICR0aGlzLT5MYW5nKCRvbmUpOwp9CiRzbWFydHktPmFzc2lnbignb2ZmZXJ0eXBlcycsJG9mZmVydHlwZXMpOwoKJHRtcCA9IHByb21vdGlvbl9jb25kaXRpb246OmdldF90eXBlc19hcnJheSgkdHlwZSk7CiRjb25kdHlwZXMgPSBhcnJheSgpOwpmb3JlYWNoKCAkdG1wIGFzICRjb25kICkgewogIGlmKCAhJGZldV9tb2R1bGUgJiYgJGNvbmQgPT0gUFJPTU9USU9OU19DT05EX0ZFVSApICBjb250aW51ZTsKCiAgJHJlYyA9IGFycmF5KCduYW1lJz0+JGNvbmQsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJGNvbmQpKTsKICAkcmVjWydmaWVsZHMnXSA9IGFycmF5KCR0aGlzLT5MYW5nKCdwcm9tcHRkYXRhXycuJGNvbmQpKTsKICBpZiggJGNvbmQgPT0gUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSApIHsKICAgICRyZWNbJ2ZpZWxkcyddW10gPSAkdGhpcy0+TGFuZygncHJvbXB0ZGF0YV8nLiRjb25kLicyJyk7CiAgfQogICRjb25kdHlwZXNbJGNvbmRdID0gJHJlYzsKfQoKJHNtYXJ0eS0+YXNzaWduKCdjb25kaXRpb250eXBlcycsJGNvbmR0eXBlcyk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q0dDcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLCRwYXJhbXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tbycsJHByb21vKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3R5cGUnLCR0eXBlKTsKaWYoICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpICkgJHNtYXJ0eS0+YXNzaWduKCdjb25kaXRpb25zJywkcHJvbW8tPmdldF9jb25kaXRpb25zKCkpOwokZXh0cyA9IGNnZV91dGlsczo6Z2V0X2ltYWdlX2V4dGVuc2lvbnMoKTsKJGRpciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdpbWFnZWRpcicsJGNvbmZpZ1snaW1hZ2VfdXBsb2Fkc19wYXRoJ10pOwokZmlsZXMgPSBjZ2VfZGlyOjpnZXRfZmlsZV9saXN0KCRkaXIsJGV4dHMpOwokZmlsZXMgPSBjZ2VfYXJyYXk6Omhhc2hfcHJlcGVuZCgkZmlsZXMsJy0xJywkdGhpcy0+TGFuZygnbm9uZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdmaWxlX2xpc3QnLCRmaWxlcyk7CgovLwovLyBQcm9jZXNzIHRlbXBsYXRlCi8vCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fYWRkcHJvbW8udHBsJyk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_delpromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCi8vCi8vIGluaXRpYWxpemF0aW9uCi8vCiR0aGlzLT5TZXRDdXJyZW50VGFiKCdjaGVja291dF9wcm9tb3Rpb25zJyk7CgppZiggIWlzc2V0KCRwYXJhbXNbJ3Byb21vaWQnXSkgKSB7CiAgJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5nX3BhcmFtJykpOwogICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7Cn0KCnRyeSB7CiAgJHByb21vID0gcHJvbW90aW9uOjpsb2FkX2J5X2lkKChpbnQpJHBhcmFtc1sncHJvbW9pZCddKTsKCiAgc3dpdGNoKCAkcHJvbW8tPmdldF90eXBlKCkgKSB7CiAgY2FzZSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDoKICAgICR0aGlzLT5TZXRDdXJyZW50VGFiKCdpbnN0YW50X3Byb21vdGlvbnMnKTsKICAgIGJyZWFrOwogIH0KCiAgJHByb21vLT5kZWxldGUoKTsKCiAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19wcm9tb2RlbGV0ZWQnKSk7Cn0KY2F0Y2goIENtc0V4Y2VwdGlvbiAkZSApIHsKICAkdGhpcy0+U2V0RXJyb3IoJGUtPkdldE1lc3NhZ2UoKSk7Cn0KJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_movepromo.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCiR0aGlzLT5TZXRDdXJyZW50VGFiKCdwcm9tb3Rpb25zJyk7CmlmKCAhaXNzZXQoJHBhcmFtc1sncHJvbW8nXSkgfHwgIWlzc2V0KCRwYXJhbXNbJ2RpciddKSApIHsKICAkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3NpbmdfcGFyYW0nKSk7CiAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKfQoKdHJ5IHsKICAkcHJvbW8gPSBwcm9tb3Rpb246OmxvYWRfYnlfaWQoKGludCkkcGFyYW1zWydwcm9tbyddKTsKICBzd2l0Y2goICRwcm9tby0+Z2V0X3R5cGUoKSApIHsKICBjYXNlIHByb21vdGlvbjo6VFlQRV9JTlNUQU5UOgogICAgJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2luc3RhbnRfcHJvbW90aW9ucycpOwogICAgYnJlYWs7CiAgY2FzZSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ6CiAgICAkdGhpcy0+U2V0Q3VycmVudFRhYignY2hlY2tvdXRfcHJvbW90aW9ucycpOwogICAgYnJlYWs7CiAgfQoKCiAgc3dpdGNoKCBzdHJ0b2xvd2VyKCRwYXJhbXNbJ2RpciddKSApIHsKICBjYXNlICd1cCc6CiAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nIFNFVCBpdGVtX29yZGVyID0gaXRlbV9vcmRlciArIDEgCiAgICAgICAgICAgICAgV0hFUkUgaXRlbV9vcmRlciA9ID8gQU5EIHR5cGUgPSA/JzsKICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRwcm9tby0+Z2V0X2l0ZW1fb3JkZXIoKS0xLCRwcm9tby0+Z2V0X3R5cGUoKSkpOwogICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignRXJyb3IgcmUtb3JkZXJpbmcgcHJvbW90aW9uJyk7CgogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLlBST01PVElPTlNfVEFCTEUuJyBTRVQgaXRlbV9vcmRlciA9IGl0ZW1fb3JkZXIgLSAxCiAgICAgICAgICAgICAgV0hFUkUgaWQgPSA/JzsKICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRwcm9tby0+Z2V0X2lkKCkpKTsKICAgIGlmKCAhJGRiciApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0Vycm9yIHJlLW9yZGVyaW5nIHByb21vdGlvbicpOwogICAgYnJlYWs7CgogIGNhc2UgJ2Rvd24nOgogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLlBST01PVElPTlNfVEFCTEUuJyBTRVQgaXRlbV9vcmRlciA9IGl0ZW1fb3JkZXIgLSAxIAogICAgICAgICAgICAgIFdIRVJFIGl0ZW1fb3JkZXIgPSA/IEFORCB0eXBlID0gPyc7CiAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkcHJvbW8tPmdldF9pdGVtX29yZGVyKCkrMSwkcHJvbW8tPmdldF90eXBlKCkpKTsKICAgIGlmKCAhJGRiciApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ0Vycm9yIHJlLW9yZGVyaW5nIHByb21vdGlvbicpOwogICAgCiAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nIFNFVCBpdGVtX29yZGVyID0gaXRlbV9vcmRlciArIDEKICAgICAgICAgICAgICBXSEVSRSBpZCA9ID8nOwogICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHByb21vLT5nZXRfaWQoKSkpOwogICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignRXJyb3IgcmUtb3JkZXJpbmcgcHJvbW90aW9uJyk7CiAgICBicmVhazsKICB9Cn0KY2F0Y2goIENtc0V4Y2VwdGlvbiAkZSApIHsKICAkdGhpcy0+U2V0RXJyb3IoJGUtPkdldE1lc3NhZ2UoKSk7Cn0KJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.admin_savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIGV4aXQ7CgokdGhpcy0+U2V0Q3VycmVudFRhYignc2V0dGluZ3MnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcsKGludCkkcGFyYW1zWydwcm9tb3Rpb25fcGVyaW9kJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl90eXBlJyx0cmltKCRwYXJhbXNbJ29mZmVyX3R5cGUnXSkpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnaW1hZ2VfZGlyJyx0cmltKCRwYXJhbXNbJ2ltYWdlX2RpciddKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlcnJvcl9pbnZhbGlkX2NvZGUnLHRyaW0oJHBhcmFtc1snZXJyb3JfaW52YWxpZCddKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdlcnJvcl9lbXB0eV9jb2RlJyx0cmltKCRwYXJhbXNbJ2Vycm9yX2VtcHR5J10pKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ21zZ192YWxpZF9jb2RlJyx0cmltKCRwYXJhbXNbJ21zZ192YWxpZCddKSk7Cgpzd2l0Y2goJHBhcmFtc1snb2ZmZXJfdHlwZSddKQogIHsKICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKICAgIGlmKCBlbXB0eSgkcGFyYW1zWydvZmZlcl9wZXJjZW50J10pIHx8IAoJKCRwYXJhbXNbJ29mZmVyX3BlcmNlbnQnXSA8IDAuMDAxKSB8fCAKCSgkcGFyYW1zWydvZmZlcl9wZXJjZW50J10gPiAxMDAuMCkgKQogICAgICB7CgkkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfdmFsdWUnKSk7CgkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwogICAgICB9CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl9kYXRhJywkcGFyYW1zWydvZmZlcl9wZXJjZW50J10pOwogICAgYnJlYWs7CiAgY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgogIGlmKCBlbXB0eSgkcGFyYW1zWydvZmZlcl9wcmljZSddKSB8fCAoJHBhcmFtc1snb2ZmZXJfcHJpY2UnXSA8IDAuMDAxKSkKICAgICAgewoJJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkX3ZhbHVlJykpOwoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKICAgICAgfQogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfZGF0YScsJHBhcmFtc1snb2ZmZXJfcHJpY2UnXSk7CiAgICBicmVhazsKICBkZWZhdWx0OgogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfZGF0YScsJycpOwogICAgYnJlYWs7CiAgfQokdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnbXNnX3ByZWZzdXBkYXRlZCcpKTsKJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.admin_setdflttemplates.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CiR0aGlzLT5TZXRDdXJyZW50VGFiKCdkZmx0X3RlbXBsYXRlcycpOwoKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVGVtcGxhdGVzJykgKQogIHsKICAgIGV4aXQoKTsKICB9CgppZiggaXNzZXQoICRwYXJhbXNbJ3N1Ym1pdF9jb3Vwb29uZm9ybXRlbXBsYXRlJ10gKSApCiAgewogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoUHJvbW90aW9uczo6TkVXQ09VUE9ORk9STV9URU1QTEFURSwKICAgICAgICAgICAgICAgICAgICAgICAgIHRyaW0oJHBhcmFtc1snaW5wdXRfY291cG9uZm9ybXRlbXBsYXRlJ10pKTsKICB9CmVsc2UgaWYoIGlzc2V0KCAkcGFyYW1zWydyZXNldF9jb3Vwb25mb3JtdGVtcGxhdGUnXSApICkKICB7CiAgICAkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS4nL3RlbXBsYXRlcy9vcmlnX2NvdXBvbmZvcm1fdGVtcGxhdGUudHBsJzsKICAgIGlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQogICAgICB7CiAgICAgICAgJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoUHJvbW90aW9uczo6TkVXQ09VUE9ORk9STV9URU1QTEFURSwkdGVtcGxhdGUpOwogICAgICB9CiAgfQoKCiR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgovLwovLyBpbml0aWFsaXphdGlvbgovLwokdGhldGVtcGxhdGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZShQcm9tb3Rpb25zOjpERkxUQ09VUE9ORk9STV9URU1QTEFURSk7CiRpbmxpbmUgPSAwOwokY29kZSA9ICcnOwokZXJyb3IgPSAnJzsKJG1lc3NhZ2UgPSAnJzsKJHNlc3MgPSBuZXcgY2dlX3Nlc3Npb24oJHRoaXMtPkdldE5hbWUoKSk7CgovLwovLyBoYW5kbGUgcGFyYW1zCi8vCmlmKCBpc3NldCgkcGFyYW1zWydpbmxpbmUnXSkgKSAkaW5saW5lID0gKGludCkkcGFyYW1zWydpbmxpbmUnXTsKaWYoIGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pICkgJHRoZXRlbXBsYXRlID0gdHJpbSgkcGFyYW1zWyd0ZW1wbGF0ZSddKTsKCi8vCi8vIGhhbmRlIGZvcm0gZGF0YQovLwppZiggaXNzZXQoJHBhcmFtc1sncHJvbW9fc3VibWl0J10pICkgewogIGlmKCBpc3NldCgkcGFyYW1zWydwcm9tb19jb2RlJ10pICkgJGNvZGUgPSB0cmltKCRwYXJhbXNbJ3Byb21vX2NvZGUnXSk7CgogICRlcnJvciA9ICcnOwogICRtc2cgPSAnJzsKICBpZiggJGNvZGUgPT0gJycgKSB7CiAgICAkZXJyb3IgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZXJyb3JfZW1wdHlfY29kZScpOwogIH0KICBlbHNlIHsKICAgIC8vIGNoZWNrIGZvciBjb2RlIHZhbGlkaXR5CiAgICBpZiggIXByb21vX29wczo6aXNfdmFsaWRfY291cG9uKCRjb2RlKSApIHsKICAgICAgJGVycm9yID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vycm9yX2ludmFsaWRfY29kZScpOwogICAgfQogICAgZWxzZSB7CiAgICAgIFByb21vdGlvbnM6OmFkZF9jb3Vwb24oJGNvZGUpOwogICAgICAkbXNnID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ21zZ192YWxpZF9jb2RlJyk7CiAgICAgICRjb2RlID0gJyc7CiAgICB9CiAgfQoKICBpZiggJGVycm9yICkgJHNlc3MtPnB1dCgnZXJyb3InLCRlcnJvcik7CiAgaWYoICRtc2cgKSAkc2Vzcy0+cHV0KCdtc2cnLCRtc2cpOwoKICBpZiggaXNzZXQoJHBhcmFtc1sncHJvbW9fb3JpZ191cmwnXSkgKSB7CiAgICAkdXJsID0gdHJpbSgkcGFyYW1zWydwcm9tb19vcmlnX3VybCddKTsKICAgICR1cmwgPSBzdHJfcmVwbGFjZSgnYW1wOycsJycsJHVybCk7CiAgICBpZiggJHVybCApIHJlZGlyZWN0KCR1cmwpOwogIH0KfQplbHNlIGlmKCBpc3NldCgkcGFyYW1zWydwcm9tb19jbGVhciddKSApIHsKICBQcm9tb3Rpb25zOjpjbGVhcl9jb3Vwb25zKCk7CiAgJG1zZyA9ICR0aGlzLT5MYW5nKCdjb3Vwb25zX2NsZWFyZWQnKTsKCiAgJHNlc3MtPnB1dCgnbXNnJywkbXNnKTsKfQoKLy8KLy8gZ2l2ZSBldmVyeXRoaW5nIHRvIHNtYXJ0eQovLwppZiggJHNlc3MtPmV4aXN0cygnbXNnJykgKSB7CiAgJG1zZyA9ICRzZXNzLT5nZXQoJ21zZycpOwogICRzZXNzLT5jbGVhcignbXNnJyk7Cn0KaWYoICRzZXNzLT5leGlzdHMoJ2Vycm9yJykgKSB7CiAgJGVycm9yID0gJHNlc3MtPmdldCgnZXJyb3InKTsKICAkc2Vzcy0+Y2xlYXIoJ2Vycm9yJyk7Cn0KaWYoICRzZXNzLT5leGlzdHMoJ2NvdXBvbnMnKSApIHsKICAkY291cG9ucyA9ICRzZXNzLT5nZXQoJ2NvdXBvbnMnKTsKICBpZiggaXNfYXJyYXkoJGNvdXBvbnMpICYmIGNvdW50KCRjb3Vwb25zKSApIHsKICAgICRzbWFydHktPmFzc2lnbignY291cG9ucycsJGNvdXBvbnMpOwogIH0KfQoKaWYoIGlzc2V0KCRtc2cpICYmICRtc2cgIT0gJycgKSB7CiAgJHNtYXJ0eS0+YXNzaWduKCdtc2cnLCRtc2cpOwp9CmlmKCBpc3NldCgkZXJyb3IpICYmICRlcnJvciAhPSAnJyApIHsKICAkc21hcnR5LT5hc3NpZ24oJ2Vycm9yJywkZXJyb3IpOwp9CmlmKCAhaXNzZXQoJHBhcmFtc1sncHJvbW9fb3JpZ191cmwnXSkgKSB7CiAgJHBhcmFtc1sncHJvbW9fb3JpZ191cmwnXSA9IGNnZV91cmw6OmN1cnJlbnRfdXJsKCk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdjb2RlJywkY29kZSk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywKCQkkdGhpcy0+Q0dDcmVhdGVGb3JtU3RhcnQoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJHBhcmFtcywkaW5saW5lKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgovLwovLyBvdXRwdXQKLy8KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdjb3Vwb25mb3JtXycuJHRoZXRlbXBsYXRlKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgppZiggJGlkID09ICcnICkgewogIGRlYnVnX2Rpc3BsYXkoJ2VtcHR5IGlkJyk7CiAgc3RhY2tfdHJhY2UoKTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgKSB7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdjaGVja291dF9wcm9tb3Rpb25zJywkdGhpcy0+TGFuZygnbGJsX2NoZWNrb3V0X3Byb21vdGlvbnMnKSk7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdpbnN0YW50X3Byb21vdGlvbnMnLCR0aGlzLT5MYW5nKCdsYmxfaW5zdGFudF9wcm9tb3Rpb25zJykpOwp9CmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVGVtcGxhdGVzJykgKSB7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdjb3Vwb25mb3JtJywkdGhpcy0+TGFuZygnbGJsX2NvdXBvbmZvcm1fdGVtcGxhdGVzJykpOwogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignZGZsdF90ZW1wbGF0ZXMnLCR0aGlzLT5MYW5nKCdsYmxfZGVmYXVsdF90ZW1wbGF0ZXMnKSk7Cn0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKSB7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdzZXR0aW5ncycsJHRoaXMtPkxhbmcoJ2xibF9zZXR0aW5ncycpKTsKfQplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oUHJvbW90aW9uczo6TUFJTl9QRVJNKSApIHsKICBlY2hvICR0aGlzLT5TdGFydFRhYignY2hlY2tvdXRfcHJvbW90aW9ucycsJHBhcmFtcyk7CiAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX2NoZWNrb3V0X3Byb21vdGlvbnN0YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdpbnN0YW50X3Byb21vdGlvbnMnLCRwYXJhbXMpOwogIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9pbnN0YW50X3Byb21vdGlvbnN0YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApIHsKICBlY2hvICR0aGlzLT5TdGFydFRhYignY291cG9uZm9ybScsJHBhcmFtcyk7CiAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX2NvdXBvbmZvcm10YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7CgogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdkZmx0X3RlbXBsYXRlcycsJHBhcmFtcyk7CiAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4nL2Z1bmN0aW9uLmFkbWluX2RmbHRfdGVtcGxhdGVzX3RhYi5waHAnKTsKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKfQppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIHsKICBlY2hvICR0aGlzLT5TdGFydFRhYignc2V0dGluZ3MnLCRwYXJhbXMpOwogIGluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuJy9mdW5jdGlvbi5hZG1pbl9zZXR0aW5nc3RhYi5waHAnKTsKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKfQplY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT5WZXJzaW9uIDEuMCAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5Jbml0aWFsIFJlbGVhc2U8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuMSAtIEF1Z3VzdC8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KCiAgPGxpPlZlcnNpb24gMS4wLjQgLSBPY3RvYmVyLzIwMDkKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlczwvbGk+CiAgICA8L3VsPgogIDwvbGk+CgogIDxsaT5WZXJzaW9uIDEuMC41IC0gT2N0b2Jlci8yMDA5CiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXM8L2xpPgogICAgPC91bD4KICA8L2xpPgoKICA8bGk+VmVyc2lvbiAxLjAuNiAtIEZlYnJ1YXJ5LzIwMDkKICAgIDx1bD4KICAgICAgPGxpPkFkZHMgdGhlIGFiaWxpdHkgdG8gZ2V0IGRpc2NvdW50IGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBwcm9kdWN0LjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPlZlcnNpb24gMS4wLjYgLSBKdW5lLzIwMTAKICAgIDx1bD4KICAgICAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5WZXJzaW9uIDEuMC44IC0gSnVseS8yMDEwCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+VmVyc2lvbiAxLjAuMTAgLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgICAgPGxpPkFkZHMgZnJvbnRlbmQgYWJpbGl0eSB0byByZXNldCBjb3Vwb24gY29kZXMgdGhhdCBoYXZlIGJlZW4gZW50ZXJlZC48L2xpPgogICAgPC91bD4KICA8L2xpPgogPGxpPlZlcnNpb24gMS4wLjExLSBGZWJydWFyeS8yMDExCiAgICA8dWw+CiAgICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDwvdWw+CiAgPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xMi0gTWFyY2gvMjAxMQogICAgPHVsPgogICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiA8bGk+VmVyc2lvbiAxLjAuMTQgLSBBcHJpbC8yMDExCiAgIDx1bD4KICAgICA8bGk+TWlub3IgYnVnIGZpeC48L2xpPgogICA8L3VsPgogPC9saT4KIDxsaT5WZXJzaW9uIDEuMC4xNSAtIERlY2VtYmVyLzIwMTEKICAgPHVsPgogICAgIDxsaT5NaW5vciBidWcgZml4LjwvbGk+CiAgIDwvdWw+CiA8L2xpPgogPGxpPlZlcnNpb24gMS4xLnggLSBEZWNlbWJlci8yMDEyCiAgIDxwPjxzdHJvbmc+Tk9URTogQ09NUEFUSUJJTElUWSBNQVkgQkUgQlJPS0VOLiAgQ0hFQ0sgQUxMIE9GIFlPVVIgUFJPTU9USU9OUy48L3N0cm9uZz48L3A+CiAgIDxwPjxzdHJvbmc+Tk9URTogUEhQIDUuMy54IElTIFJFUVVJUkVELjwvc3Ryb25nPjwvcD4KICAgPHVsPgogICAgICA8bGk+TWFqb3IgcmV2aXNpb24gLSBhZGRzIGluc3RhbnQsIGFuZCBjaGVja291dCB0eXBlIHByb21vdGlvbnMuPC9saT4KICAgICAgPGxpPkFkZHMgbmV3IHByb21vdGlvbiB0ZXN0ZXIgY2xhc3NlcywgYW5kIGRlcHJlY2F0ZXMgdGhlIG9sZCBvbmVzLjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPk5vdGU6IFRoaXMgbWF5IG5vdCBiZSBhIHNpbXBsZSB1cGdyYWRlLjwvc3Ryb25nPjwvbGk+CiAgIDwvdWw+CiA8L2xpPgo8L3VsPgo=]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/function.admin_checkout_promotionstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCi8vCi8vIGluaXRpYWxpemUKLy8KCi8vIAovLyBnZXQgdGhlIGRhdGEKLy8KJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgdHlwZSA9ID8gT1JERVIgQlkgaXRlbV9vcmRlciBBU0MnOwokZGF0YSA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5LGFycmF5KHByb21vdGlvbjo6VFlQRV9DSEVDS09VVCkpOwppZiggaXNfYXJyYXkoJGRhdGEpICkgewogIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRkYXRhKTsgJGkrKyApIHsKICAgICRyZWMgPSYgJGRhdGFbJGldOwogICAgJHJlY1snZWRpdF91cmwnXSA9ICR0aGlzLT5DcmVhdGVVUkwoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLGFycmF5KCdwcm9tb2lkJz0+JHJlY1snaWQnXSkpOwogICAgJHJlY1snZWRpdF9saW5rJ10gPSAkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnYWRtaW5fYWRkcHJvbW8nLCRyZXR1cm5pZCwKCQkJCQkgICAgICAgJHRoaXMtPkxhbmcoJ2VkaXQnKSwnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywKCQkJCQkgICAgICAgYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSk7CiAgICAkcmVjWydkZWxldGVfdXJsJ10gPSAkdGhpcy0+Q3JlYXRlVVJMKCRpZCwnYWRtaW5fZGVscHJvbW8nLCRyZXR1cm5pZCxhcnJheSgncHJvbW9pZCc9PiRyZWNbJ2lkJ10pKTsKICAgICRyZWNbJ2RlbGV0ZV9saW5rJ10gPSAkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnYWRtaW5fZGVscHJvbW8nLCRyZXR1cm5pZCwKCQkJCQkJICR0aGlzLT5MYW5nKCdkZWxldGUnKSwnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLAoJCQkJCQkgYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSwnJywKCQkJCQkJICR0aGlzLT5MYW5nKCdyZWFsbHlfZGVsZXRlX3Byb21vdGlvbicpKTsKICAgICRyZWNbJ3N0YXJ0X2RhdGVfdXQnXSA9IGNnZV91dGlsczo6dW5peF90aW1lKCRyZWNbJ3N0YXJ0X2RhdGUnXSk7CiAgICAkcmVjWydlbmRfZGF0ZV91dCddID0gY2dlX3V0aWxzOjp1bml4X3RpbWUoJHJlY1snZW5kX2RhdGUnXSk7CiAgfQp9CgovLwovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Ci8vCiRzbWFydHktPmFzc2lnbignYWRkbGluaycsCgkJJHRoaXMtPkNyZWF0ZUltYWdlTGluaygkaWQsJ2FkbWluX2FkZHByb21vJywkcmV0dXJuaWQsCgkJCQkgICAgICAgJHRoaXMtPkxhbmcoJ3Byb21wdF9hZGRwcm9tbycpLAoJCQkJICAgICAgICdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsCgkJCQkgICAgICAgYXJyYXkoJ3R5cGUnPT5wcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQpLCcnLCcnLGZhbHNlKSk7CmlmKCBpc19hcnJheSgkZGF0YSkgKSB7CiAgJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3Rpb25zJywkZGF0YSk7Cn0KCi8vCi8vIGRpc3BsYXkgdGhlIHRlbXBhbHRlCi8vCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fY2hlY2tvdXRfcHJvbW90aW9uc3RhYi50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_couponformtab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgplY2hvICR0aGlzLT5TaG93VGVtcGxhdGVMaXN0KCRpZCwkcmV0dXJuaWQsJ2NvdXBvbmZvcm1fJywKCQkJICAgICBQcm9tb3Rpb25zOjpORVdDT1VQT05GT1JNX1RFTVBMQVRFLAoJCQkgICAgICdjb3Vwb25mb3JtJywKCQkJICAgICBQcm9tb3Rpb25zOjpERkxUQ09VUE9ORk9STV9URU1QTEFURSwKCQkJICAgICAkdGhpcy0+TGFuZygnY291cG9uZm9ybXRlbXBsYXRlX2FkZGVkaXQnKSk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_dflt_templates_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgokaW5wdXRfY291cG9uZm9ybXRlbXBsYXRlID0KICAkdGhpcy0+R2V0UHJlZmVyZW5jZShQcm9tb3Rpb25zOjpORVdDT1VQT05GT1JNX1RFTVBMQVRFKTsKCiRzbWFydHktPmFzc2lnbignaW5mb19kZmx0X3RlbXBsYXRlJywKCQkkdGhpcy0+TGFuZygnZGVmYXVsdF90ZW1wbGF0ZV9ub3RpY2UnKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsCgkJJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX3NldGRmbHR0ZW1wbGF0ZXMnLAoJCQkJICAgICAgICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLAoJCSR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKJHNtYXJ0eS0+YXNzaWduKCdsZWdlbmRfY291cG9uZm9ybXRlbXBsYXRlJywKCQkkdGhpcy0+TGFuZygndGl0bGVfY291cG9uZm9ybV9kZmx0dGVtcGxhdGUnKSk7CiRzbWFydHktPmFzc2lnbigncHJvbXB0X2NvdXBvbmZvcm10ZW1wbGF0ZScsCgkJJHRoaXMtPkxhbmcoJ3Byb21wdF90ZW1wbGF0ZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb3Vwb25mb3JtdGVtcGxhdGUnLAoJCSR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGlucHV0X2NvdXBvbmZvcm10ZW1wbGF0ZSwKCQkJCSAgICAgICdpbnB1dF9jb3Vwb25mb3JtdGVtcGxhdGUnKSk7CiRzbWFydHktPmFzc2lnbignc3VibWl0X2NvdXBvbmZvcm10ZW1wbGF0ZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0X2NvdXBvbmZvcm10ZW1wbGF0ZScsCgkJCQkJICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ3Jlc2V0X2NvdXBvbmZvcm10ZW1wbGF0ZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwncmVzZXRfY291cG9uZm9ybXRlbXBsYXRlJywKCQkJCQkgJHRoaXMtPkxhbmcoJ3Jlc2V0dG9mYWN0b3J5JykpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fZGZsdF90ZW1wbGF0ZXNfdGFiLnRwbCcpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/function.admin_instant_promotionstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihQcm9tb3Rpb25zOjpNQUlOX1BFUk0pICkgZXhpdDsKCi8vCi8vIGluaXRpYWxpemUKLy8KCi8vIAovLyBnZXQgdGhlIGRhdGEKLy8KJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgVFlQRSA9ID8gT1JERVIgQlkgaXRlbV9vcmRlciBBU0MnOwokZGF0YSA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5LGFycmF5KHByb21vdGlvbjo6VFlQRV9JTlNUQU5UKSk7CmlmKCBpc19hcnJheSgkZGF0YSkgKSB7CiAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGRhdGEpOyAkaSsrICkgewogICAgJHJlYyA9JiAkZGF0YVskaV07CiAgICAkcmVjWydlZGl0X3VybCddID0gJHRoaXMtPkNyZWF0ZVVSTCgkaWQsJ2FkbWluX2FkZHByb21vJywkcmV0dXJuaWQsYXJyYXkoJ3Byb21vaWQnPT4kcmVjWydpZCddKSk7CiAgICAkcmVjWydlZGl0X2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl9hZGRwcm9tbycsJHJldHVybmlkLAoJCQkJCSAgICAgICAkdGhpcy0+TGFuZygnZWRpdCcpLCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLAoJCQkJCSAgICAgICBhcnJheSgncHJvbW9pZCc9PiRyZWNbJ2lkJ10pKTsKICAgICRyZWNbJ2RlbGV0ZV91cmwnXSA9ICR0aGlzLT5DcmVhdGVVUkwoJGlkLCdhZG1pbl9kZWxwcm9tbycsJHJldHVybmlkLGFycmF5KCdwcm9tb2lkJz0+JHJlY1snaWQnXSkpOwogICAgJHJlY1snZGVsZXRlX2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl9kZWxwcm9tbycsJHJldHVybmlkLAoJCQkJCQkgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsCgkJCQkJCSBhcnJheSgncHJvbW9pZCc9PiRyZWNbJ2lkJ10pLCcnLAoJCQkJCQkgJHRoaXMtPkxhbmcoJ3JlYWxseV9kZWxldGVfcHJvbW90aW9uJykpOwogICAgJHJlY1snc3RhcnRfZGF0ZV91dCddID0gY2dlX3V0aWxzOjp1bml4X3RpbWUoJHJlY1snc3RhcnRfZGF0ZSddKTsKICAgICRyZWNbJ2VuZF9kYXRlX3V0J10gPSBjZ2VfdXRpbHM6OnVuaXhfdGltZSgkcmVjWydlbmRfZGF0ZSddKTsKICB9Cn0KCi8vCi8vIGdpdmUgZXZlcnl0aGluZyB0byBzbWFydHkKLy8KJHNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywKCQkkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnYWRtaW5fYWRkcHJvbW8nLCRyZXR1cm5pZCwKCQkJCSAgICAgICAkdGhpcy0+TGFuZygncHJvbXB0X2FkZHByb21vJyksCgkJCQkgICAgICAgJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywKCQkJCSAgICAgICBhcnJheSgndHlwZSc9PnByb21vdGlvbjo6VFlQRV9JTlNUQU5UKSwnJywnJyxmYWxzZSkpOwppZiggaXNfYXJyYXkoJGRhdGEpICkgewogICRzbWFydHktPmFzc2lnbigncHJvbW90aW9ucycsJGRhdGEpOwp9CgovLwovLyBkaXNwbGF5IHRoZSB0ZW1wYWx0ZQovLwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2luc3RhbnRfcHJvbW90aW9uc3RhYi50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_settingstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIGV4aXQ7CgovLwovLyBpbml0aWFsaXplCi8vCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2xpYi9jbGFzcy5wcm9tb3Rpb24ucGhwJyk7CgovLwovLyBzZXR1cAovLwokcHJvZHVjdHNfbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUHJvZHVjdHMnKTsKCi8vCi8vIGdhdGhlciBkYXRhCi8vCgovLwovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Ci8vCiRzbWFydHktPmFzc2lnbignY3VycmVuY3lfc3ltYm9sJywkcHJvZHVjdHNfbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdwcm9kdWN0X2N1cnJlbmN5c3ltYm9sJywnJCcpKTsKJHBlcmlvZHMgPSBhcnJheSgpOwpmb3IoICRpID0gMDsgJGkgPCAzNjsgJGkrKyApCiAgewogICAgJHBlcmlvZHNbJGkrMV0gPSAkaSsxOwogIH0KJHNtYXJ0eS0+YXNzaWduKCdwcm9tb3Rpb25fcGVyaW9kcycsJHBlcmlvZHMpOwokcHJvbW90eXBlcyA9IGFycmF5KCk7CiRwcm9tb3R5cGVzW1BST01PVElPTlNfT0ZGRVJfUEVSQ0VOVF0gPSAkdGhpcy0+TGFuZyhQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQpOwokcHJvbW90eXBlc1tQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UXSA9ICR0aGlzLT5MYW5nKFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQpOwokcHJvbW90eXBlc1tQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RdID0gJHRoaXMtPkxhbmcoUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUKTsKJHNtYXJ0eS0+YXNzaWduKCdvZmZlcl90eXBlcycsJHByb21vdHlwZXMpOwokc21hcnR5LT5hc3NpZ24oJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfcHJvbW90aW9uX3BlcmlvZCcsMSkpOwokc21hcnR5LT5hc3NpZ24oJ2RmbHRfb2ZmZXJfdHlwZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfdHlwZScsUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UKSk7CiRzbWFydHktPmFzc2lnbignZGZsdF9vZmZlcl9kYXRhJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGZsdF9vZmZlcl9kYXRhJywnLjEnKSk7CiRzbWFydHktPmFzc2lnbignaW1hZ2VfZGlyJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaW1hZ2VfZGlyJywnJykpOwokc21hcnR5LT5hc3NpZ24oJ2Vycm9yX2ludmFsaWRfY29kZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Vycm9yX2ludmFsaWRfY29kZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdlcnJvcl9lbXB0eV9jb2RlJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZXJyb3JfZW1wdHlfY29kZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdtc2dfdmFsaWRfY29kZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ21zZ192YWxpZF9jb2RlJykpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNHQ3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRtaW5fc2F2ZXNldHRpbmdzJykpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKLy8KLy8gcHJvY2VzcyB0ZW1wbGF0ZQovLwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3NldHRpbmdzdGFiLnRwbCcpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2R1Y3RzIGFuZCBPcmRlcnMgbW9kdWxlIHRvIGFsbG93IGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB0aW1lIGxpbWl0ZWQgcHJvbW90aW9ucyBmb3IgdGhlIHByb2R1Y3RzIG9uIHlvdXIgZS1jb21tZXJjZSB3ZWJzaXRlLjwvcD4KPGgzPkZlYXR1cmVzOjwvaDM+Cjx1bD4KPGxpPjx1PkFsbCBwcm9tb3Rpb25zIGFyZSB0aW1lIGxpbWl0ZWQuPC91Pjxici8+PGJyLz48L2xpPgo8bGk+PHU+QSBwcm9tb3Rpb24gY2FuIGhhdmUgb25lIG9yIG1vcmUgY29uZGl0aW9ucyB0byBpbmRpY2F0ZSBlbGlnaWJpbGl0eS48L3U+CiAgPHA+SWYgYSBwcm9tb3Rpb24gaXMgZGVmaW5lZCB3aXRoIHR3byBvciBtb3JlIGNvbmRpdGlvbnMsIGFsbCBvZiB0aG9zZSBjb25kaXRpb25zIG11c3QgYmUgbWV0IGluIG9yZGVyIGZvciB0aGUgY3VzdG9tZXIgdG8gYmUgZWxpZ2libGUgZm9yIHRoZSBwcm9tb3Rpb24uPC9wPgogIDxwPkEgbnVtYmVyIG9mIGNvbmRpdGlvbiB0eXBlcyBleGlzdC4uLiBIb3dldmVyIHNvbWUgb2YgdGhlbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlcnMuICBpLmU6ICBZb3UgY2Fubm90IGhhdmUgdHdvIGRpZmZlcmVudCB0eXBlIG9mIHByb2R1Y3QgY29uZGl0aW9ucy48L3A+CiAgPHVsPgo8bGk+PHU+UmVxdWlyZSBtZW1iZXJzaGlwIGluIGFuIEZFVSBHcm91cDo8L3U+CiAgPHA+WW91IGNhbiBlbnRlciBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIEZFVSBncm91cCBuYW1lcy4gIFRoZSBsb2dnZWQgaW4gd2Vic2l0ZSB2aXNpdG9yIG11c3QgYmUgYSBtZW1iZXIgb2Ygb25lIG9mIHRoZXNlIGdyb3VwcyB0byBiZSBlbGlnaWJsZSBmb3IgdGhlIHByb21vdGlvbi48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIG1pbmltdW0gcHVyY2hhc2UgYW1vdW50OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGUgcHJlLXRheC9wcmUtc2hpcHBpbmcgdG90YWwgZm9yIHRoZWlyIG9yZGVyIG11c3QgbWVldCB0aGUgc3BlY2lmaWVkIG1pbmltdW0gdmFsdWUuPC9wPjwvbGk+CiAgPGxpPjx1PlJlcXVpcmUgdGhlIHB1cmNoYXNlIG9mIGEgc3BlY2lmaWMgcHJvZHVjdDo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgaGlzIGNhcnQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwcm9kdWN0IG1hdGNoaW5nIHRoZSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwcm9kdWN0IGlkcyBlbnRlcmVkLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHB1cmNoYXNlIG9mIGF0bGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBjYXRlZ29yeTo8L3U+CiAgPHA+SW4gb3JkZXIgZm9yIGEgY3VzdG9tZXIgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiwgaGlzIGNhcnQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwcm9kdWN0IHRoYXQgaXMgd2l0aGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY2F0ZWdvcnkgbmFtZXMgKGZyb20gdGhlIHByb2R1Y3RzIG1vZHVsZSkgc3BlY2lmaWVkLjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIHB1cmNoYXNlIG9mIGF0bGVhc3Qgb25lIHByb2R1Y3QgaW4gYSBoaWVyYXJjaHk6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhpcyBjYXJ0IG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcHJvZHVjdCB0aGF0IGlzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHByb2R1Y3RzIG1vZHVsZSBoaWVyYXJjaHkuPC9wPgogIDxwPkhpZXJhcmNoeSBuYW1lcyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb3JtIG9mICZxdW90O1BhcmVudC5QYXJlbnQuQ2hpbGQmcXVvdDsgaS5lOiAmcXVvdDtDbG90aGluZy5UZW50cyZxdW90Oy4gIEhpZXJhcmNoeSBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLiAgV2lsZGNhcmRzIGNhbiBiZSBzcGVjZmlmaWVkIGJ5IHVzaW5nIHRoZSAqIGNoYXJhY3Rlci4gIGkuZTogJnF1b3Q7Q2xvdGhpbmcqJnF1b3Q7LjwvcD48L2xpPgogIDxsaT48dT5SZXF1aXJlIGEgQ291cG9uIENvZGU6PC91PgogIDxwPkluIG9yZGVyIGZvciBhIGN1c3RvbWVyIHRvIG1lZXQgdGhpcyBjb25kaXRpb24sIGhlIG11c3QgaGF2ZSBzdXBwbGllZCB0aGUgY291cG9uIGNvZGUgdGhhdCBtYXRjaGVzIHRoaXMgY29uZGl0aW9uLjwvcD4KICA8cD5JbiBvcmRlciB0byBhbGxvdyBjdXN0b21lcnMgdG8gZW50ZXIgY291cG9uIGNvZGVzLCB5b3UgbmVlZCB0byBhZGQgYSB0YWcgaW50byB5b3VyIHBhZ2UgdGVtcGxhdGUgb3IgcGFnZSBjb250ZW50IGxpa2Uge1Byb21vdGlvbnN9LiAgVGhpcyB3aWxsIGRpc3BsYXkgYSBmb3JtIHRoYXQgYWxsb3dzIHlvdXIgdXNlcnMgdG8gZW50ZXIgY291cG9uIGNvZGVzLiAgQ291cG9uIGNvZGVzIGFyZSByZW1lbWJlcmVkIHVudGlsIHRoZSB1c2VyIGNsb3NlcyB0aGUgYnJvd3Nlci48L3A+PC9saT4KICA8bGk+PHU+UmVxdWlyZSBhIG1pbmltdW0gb3JkZXIgd2VpZ2h0OjwvdT4KICA8cD5JbiBvcmRlciBmb3IgYSBjdXN0b21lciB0byBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGUgc3VtIHRvdGFsIG9mIGFsbCBvZiB0aGUgd2VpZ2h0IHZhbHVlcyBmb3IgdGhlIGl0ZW1zIGluIGhpcyBjYXJ0IG11c3QgbWVldCBvciBleGNlZWQgdGhlIHZhbHVlIHNwZWNpZmllZC48L3A+PC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPjx1PkVhY2ggcHJvbW90aW9uIGNhbiBoYXZlIGEgZGlmZmVyZW50ICZxdW90O29mZmVyJnF1b3Q7PC91Pgo8cD5BIG51bWJlciBvZiBkaWZmZXJlbnQgb2ZmZXJzIHR5cGVzIGFyZSBhdmFpbGFibGU6PC9wPgogIDx1bD4KPGxpPjx1PlBlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsOjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGJldHdlZW4gMCBhbmQgMSB0byBpbmRpY2F0ZSBhIHBlcmNlbnRhZ2Ugb2ZmLiAgaS5lOiAwLjEgaW5kaWNhdGVzIDEwJSBvZmYuICAgRHVyaW5nIHRoZSBjaGVja291dCBwcm9jZXNzLCBhbnkgbm9uIHRheCwgb3Igbm9uIHNoaXBwaW5nIGl0ZW0gaW4gdGhlIG9yZGVyIHdpbGwgYmUgcmVkdWNlZCBpbiBwcmljZSBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC48L3A+PC9saT4KPGxpPjx1PlJlZHVjZSBvcmRlciB0b3RhbCBieSBhIHNwZWNpZmllZCBhbW91bnQ6PC91Pgo8cD5UaGlzIG9mZmVyIHR5cGUgYWxsb3dzIHlvdSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiB0aGUgb3JkZXIgYnkgYSBjZXJ0YWluIGRvbGxhciBmaWd1cmUuICBUaGlzIGRvbGxhciBmaWd1cmUgd2lsbCBiZSBhZGRlZCBhcyBhIGRpc2NvdW50IGl0ZW0gaW50byB0aGUgb3JkZXIgbGluZSBpdGVtcyBhbmQgd2lsbCBhcHBlYXIgb24gdGhlIGludm9pY2UuPC9wPjwvbGk+CjxsaT48dT5SZWNlaXZlIGEgRnJlZSBQcm9kdWN0OjwvdT4KPHA+VGhpcyBvZmZlciB0eXBlIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIHByb2R1Y3QgaWQgdG8gYXV0b21hdGljYWxseSBpbmNsdWRlIGluIHRoZSBvcmRlciBhdCBubyBjb3N0LiAgVGhpcyBwcm9kdWN0IHdpbGwgYmUgYWRkZWQgYXMgYSBwcm9kdWN0IGl0ZW0gaW50byB0aGUgb3JkZXIgbGluZSBpdGVtcywgYnV0IHdpbGwgYXBwZWFyIGF0IG5vIGNvc3QuPC9wPjwvbGk+CjxsaT48dT5EaXNjb3VudCB0aGUgYXBwbGljYWJsZSBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2U6PC91Pgo8cD5UaGlzIG9mZmVyIHR5cGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgcHJvZHVjdCBjb25kaXRpb24gaXMgc3BlY2lmaWVkLiAgSWYgYSBwcm9kdWN0IGNvbmRpdGlvbiBpcyBzcGVjaXJpZWQsIGFuZCBtYXRjaGVzLCB0aGlzIG9mZmVyIHR5cGUgd2lsbCBkaXNjb3VudCB0aGUgbWF0Y2hpbmcgcHJvZHVjdHMgZnJvbSB0aGUgY3VzdG9tZXIgb3JkZXIgYnkgdGhlIHNwZWNpZmllZCB2YWx1ZS48L3A+LgogIDwvdWw+CjwvbGk+CjxsaT48dT5BbGxvd3Mgd2Vic2l0ZSB2aXNpdG9ycyB0byBlbnRlciBvbmUgb3IgbW9yZSBjb3Vwb24gY29kZXM8L3U+PGJyLz48YnIvPjwvbGk+CjxsaT48dT5EaXNjb3VudHMgYXJlIGNhbGN1bGF0ZWQgYW5kIGFwcGxpZWQgdG8gdGhlIG9yZGVyIGR1cmluZyB0aGUgY2hlY2tvdXQgcHJvY2Vzcy48L3U+PGJyLz48YnIvPjwvbGk+CjxsaT48dT5JZiBhIHdlYiBjdXN0b21lciBpcyBlbGlnaWJsZSBmb3IgbXVsdGlwbGUgcHJvbW90aW9ucywgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCB2YWx1ZSBpcyBhcHBsaWVkLjwvdT48L2xpPgo8L3VsPgo8YnIvPgo8aDM+SG93IERvIEkgVXNlIEl0OjwvaDM+CjxvbD4KICA8bGk+MS4gSW5zdGFsbCBhbmQgY29uZmlndXJlIHRoZSBtb2R1bGU8L2xpPgogIDxsaT4yLiBDcmVhdGUgYXQgbGVhc3Qgb25lIHByb21vdGlvbjwvbGk+CiAgPGxpPjMuIFNwZWNpZnkgdGhpcyBtb2R1bGUgYXMgdGhlICZxdW90O1Byb21vdGlvbnMmcXVvdDsgbW9kdWxlIHdpdGhpbiB0aGUgT3JkZXJzIFByZWZlcmVuY2VzLjwvbGk+CiAgPGxpPjQuIDxlbT4ob3B0aW9uYWwpPC9lbT4gQWRkIHtQcm9tb3Rpb25zfSB0byBhIHBhZ2UgdGVtcGxhdGUgb3IgcGFnZSBjb250ZW50LjwvZW0+PC9saT4KPC9vbD4KPGgzPkV4YW1wbGU6PC9oMz4KPHA+SW4gdGhpcyBleGFtcGxlIHdlIHdpbGwgY3JlYXRlIGEgcHJvbW90aW9uIGxpa2UgJnF1b3Q7MTAlIG9mZiBhbGwgb3JkZXJzIG92ZXIgJDEwMCwgd2l0aCBjb3Vwb24gY29kZSZxdW90Ozo8L3A+Cjx1bD4KICA8bGk+MS4gPHU+Q3JlYXRlIGEgbmV3IHByb21vdGlvbjwvdT4KICA8cD5OYXZpZ2F0ZSB0byB0aGUgcHJvbW90aW9ucyBtb2R1bGUgYWRtaW4gcGFuZWwsIGFuZCBjbGljayBvbiAmcXVvdDtBZGQgYSBOZXcgUHJvbW90aW9uJnF1b3Q7LiAgWW91IHdpbGwgYmUgcHJlc2VudGVkIHdpdGggdGhlIHByb21vdGlvbnMgZm9ybS48L3A+PC9saT4KICA8bGk+Mi4gPHU+U3BlY2lmeSBhIHByb21vdGlvbiBuYW1lPC91PgogIDxwPkZvciB0aGlzIGV4YW1wbGUgd2Ugd2lsbCB1c2UgdGhlIG5hbWUgJnF1b3Q7U2ltcGxlIFNhbGUmcXVvdDs8L3A+PC9saT4KICA8bGk+My4gPHU+QWRkIGEgY291cG9uIGNvbmRpdGlvbjwvdT4KICA8cD5Gcm9tIHRoZSAmcXVvdDtUeXBlIG9mIENvbmRpdGlvbiZxdW90OyBkcm9wZG93biBzZWxlY3QgJnF1b3Q7UmVxdWlyZSBhIENvdXBvbiBDb2RlJnF1b3Q7LiAgRW50ZXIgJnF1b3Q7c2ltcGxlc2FsZSZxdW90OyBpbnRvIHRoZSBpbnB1dCBmaWVsZCBiZWxvdyBhbmQgY2xpY2sgQWRkLjwvcD48L2xpPgogIDxsaT40LiA8dT5BZGQgYW4gb3JkZXIgcHJpY2UgY29uZGl0aW9uPC91PgogIDxwPkZyb20gdGhlICZxdW90O1R5cGUgb2YgQ29uZGl0aW9uJnF1b3Q7IGRyb3Bkb3duIHNlbGVjdCAmcXVvdDtSZXF1aXJlIGEgTWluaW11bSBQdXJjaGFzZSBBbW91bnQmcXVvdDsgZnJvbSB0aGUgZHJvcGRvd24sIGFuZCBlbnRlciAxMDAgaW50byB0aGUgaW5wdXQgZmllbGQgYmVsb3cuICBDbGljayBBZGQuPC9wPjwvbGk+CiAgPGxpPjUuIDx1PlNwZWNpZnkgdGhlIG9mZmVyIHR5cGUsIGFuZCBhbW91bnQ8L3U+CiAgPHA+U2VsZWN0IHRoZSBvZmZlciB0eXBlICZxdW90O1BlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsJnF1b3Q7IGFuZCBlbnRlciAwLjEgaW50byB0aGUgdGV4dCBmaWVsZCBiZWxvdyB0byBpbmRpY2F0ZSAxMCUmcXVvdDs8L3A+PC9saT4KICA8bGk+Ni4gPHU+Q2xpY2sgc3VibWl0PC91PjwvbGk+CjwvdWw+CjxoMz5TbWFydHkgUGx1Z2luczwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBzbWFydHkgcGx1Z2luIHRvIGFpZCBpbiByZXRyaWV2aW5nIGFuZCBkaXNwbGF5aW5nIGRpc2NvdW50cyBmb3IgYSBzaW5nbGUgcHJvZHVjdC48L3A+Cjx1bD4KICA8bGk+PHN0cm9uZz57cHJvbW9fZ2V0X3Byb2RfZGlzY291bnQgW2ZldV91aWQ9dmFsXSBwcm9kdWN0X2lkPXZhbCBbYXNzaWduPXZhcl19PC9zdHJvbmc+CiAgPHA+SWYgc3VjY2Vzc2Z1bCwgdGhpcyBwbHVnaW4gcmV0dXJucyBhIGhhc2ggY29udGFpbmluZyBkaXNjb3VudCBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9kdWN0LiAgVGhlIGdyZWF0ZXN0IHBvc3NpYmxlIGRpc2NvdW50IGlzIGNhbGN1bGF0ZWQsIGNvbnNpZGVyaW5nIGFsbCBhY3RpdmUgcHJvbW90aW9ucywgdXNlciBpZCwgZW50ZXJlZCBjb3Vwb24gY29kZXMsIGFuZCBvdGhlciBtYXRjaGluZyBjb25kaXRpb25zLjwvcD4KICA8cD5QYXJhbWV0ZXJzOjwvcD4KICA8dWw+CiAgPGxpPmZldV91aWQgKG9wdGlvbmFsKSAtIFRoZSBGcm9udEVuZFVzZXJzIHVzZXJpZCB0byB0ZXN0IHdpdGguICBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIgaWQgd2lsbCBiZSB1c2VkLjwvbGk+CiAgPGxpPnByb2R1Y3RfaWQgKHJlcXVpcmVkKSAtIFRoZSBJRCBvZiB0aGUgcHJvZHVjdCB0byB0ZXN0IHdpdGguPC9saT4KICA8bGk+YXNzaWduIChvcHRpb25hbCkgLSBPcHRpb25hbGx5IGFzc2lnbiB0aGUgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgc21hcnR5IHZhcmlhYmxlLjwvbGk+CiAgPC91bD4KICA8L2xpPgo8L3VsPgo8aDM+Q2F1dGlvbnM6PC9oMz4KPHA+UHJvbW90aW9ucyBhcmUgY2FsY3VsYXRlZCBvbiB0aGUgb3JkZXIgaW4gc2VxdWVuY2UuICBNdWx0aXBsZSBwcm9tb3Rpb25zIG1heSBtYXRjaCB0aGUgaXRlbXMgb2YgYSBzaW5nbGUgb3JkZXIsIHRoaXMgbWF5IHJlc3VsdCBpbiBhIHNpbmdsZSBvcmRlciBoYXZpbmcgYSB6ZXJvIDxlbSBzdHlsZT0iY29sb3I6IHJlZDsiPm5lZ2F0aXZlIHZhbHVlPC9lbT4uICBUaGUgb3JkZXJzIG1vZHVsZSBtYXkgZG8gc29tZSBiYXNpYyBjaGVja3MgdG8gaGVscCB3aXRoIG9yZGVyIGludGVncml0eSwgYnV0IGRvIG5vdCBjb3VudCBvbiBpdC4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBURVNUIHlvdXIgcHJvbW90aW9ucyBhbmQgdG8gYWx3YXlzIG1vbml0b3IgdGhlbSBiZWZvcmUgcm9sbGluZyB0aGVtIGxpdmUuPC9wPgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5UaGUgbW9kdWxlIGF1dGhvciBpcyBpbiBubyB3YXkgb2JsaWdhdGVkIHRvIHByaXZpZGUgc3VwcG9ydCBmb3IgdGhpcyBjb2RlIGluIGFueSBmYXNoaW9uLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvcHJvbW90aW9ucyI+aGVyZTwvYT4uICBQbGVhc2UgYmUgdmVyYm9zZSBhbmQgZGVzY3JpcHRpdmUgd2hlbiBzdWJtaXR0aW5nIGJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3RzLCBhbmQgZm9yIGJ1ZyByZXBvcnRzIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHByb3ZpZGVkIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gdG8gcmVsaWFibHkgcmVwcm9kdWNlIHRoZSBpc3N1ZS48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LiAgV2hlbiBkZXNjcmliaW5nIGFuIGlzc3VlIHBsZWFzZSBtYWtlIGFuIGVmZm9ydCB0byBwcml2aWRlIGFsbCByZWxhdmFudCBpbmZvcm1hdGlvbiwgYSB0aG9yb3VnaCBkZXNjcmlwdGlvbiBvZiB5b3VyIGlzc3VlLCBhbmQgc3RlcHMgdG8gcmVwcm9kdWNlIGl0IG9yIHlvdXIgZGlzY3Vzc2lvbiBtYXkgYmUgaWdub3JlZC48L2xpPgo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMiPkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LiAgSG93ZXZlciwgcGxlYXNlIHVzZSB0aGlzIGFzIGEgbGFzdCByZXNvcnQsIGFuZCBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBmb2xsb3dlZCBhbGwgYXBwbGljYWJsZSBpbnN0cnVjdGlvbnMgb24gdGhlIGZvcmdlLCBpbiB0aGUgZm9ydW1zLCBldGMuPC9saT4KPC91bD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnIj4mbHQ7Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uPC9wPgo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCmluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCnNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQpHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQphbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4K]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiNBCiRsYW5nWydhZGQnXSA9ICdBZGQnOwoKCiNCCgoKI0MKJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbCc7CiRsYW5nWydjbGVhcl9jb3Vwb25zJ10gPSAnQ2xlYXIgQ291cG9ucyc7CiRsYW5nWydjb3Vwb25zX2NsZWFyZWQnXSA9ICdXZSBoYXZlIHJlc2V0IGFsbCBvZiB5b3VyIGNvdXBvbnMnOwokbGFuZ1snY291cG9uZm9ybXRlbXBsYXRlX2FkZGVkaXQnXSA9ICdBZGQgb3IgRWRpdCBhIENvdXBvbiBGb3JtIFRlbXBsYXRlJzsKCgojRAokbGFuZ1snZGVsZXRlJ10gPSAnRGVsZXRlJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGVfbm90aWNlJ10gPSA8PDxFT1QKPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGUgY29udGVudHMgb2YgdGhlc2UgdGV4dCBhcmVhcyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgY29udGVudCBvZiB0ZW1wbGF0ZXMgd2hlbiB5b3UgY2xpY2sgJnF1b3Q7QWRkIFRlbXBsYXRlJnF1b3Q7IGluIHRoZSBhcHByb3ByaWF0ZSB0ZW1wbGF0ZSB0YWIuICBFZGl0aW5nIG9uZSBvZiB0aGVzZSB0ZXh0IGFyZWFzIHdpbGwgaGF2ZSBubyBpbW1lZGlhdGUgZWZmZWN0IG9uIHlvdXIgd2Vic2l0ZS4KRU9UOwoKCiNFCiRsYW5nWydlZGl0J10gPSAnRWRpdCc7CiRsYW5nWydlbnRlcmVkX2NvdXBvbnMnXSA9ICdDb3Vwb25zIHlvdSBoYXZlIGVudGVyZWQ6JzsKJGxhbmdbJ2Vycm9yX2FscmVhZHlfcHJvZCddID0gJ0EgcHJvZHVjdCBjb25kaXRpb24gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGNvbmRpdGlvbiBsaXN0JzsKJGxhbmdbJ2Vycm9yX2NvdXBvbl9leGlzdHMnXSA9ICdBIHByb21vdGlvbiB1c2luZyB0aGF0IGNvdXBvbiBzdHJpbmcgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlX2NvbmRpdGlvbiddID0gJ0EgZHVwbGljYXRlIGNvbmRpdGlvbiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY29uZGl0aW9uIGxpc3QnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlX3R5cGUnXSA9ICdBIGR1cGxpY2F0ZSBwcm9kdWN0IGNvbmRpdGlvbiBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9lbXB0eV9jb2RlJ10gPSAnUGxlYXNlIGVudGVyIGEgdmFsaWQgdmFsdWUnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9idWxrcHVyY2hhc2UnXSA9ICdUaGUgYnVsayBwdXJjaGFzZSBkYXRhIHNwZWNpZmllZCBpcyBpbnZhbGlkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfY29kZSddID0gJ1Byb21vdGlvbiBDb2RlIG5vdCByZWNvZ25pc2VkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfY29uZGl0aW9uX3R5cGUnXSA9ICdBIGNvbmRpdGlvbiBzcGVjaWZpZWQgaXMgaW52YWxpZCBmb3IgdGhpcyBwcm9tb3Rpb24gdHlwZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2ZldV9ncm91cCddID0gJ0ludmFsaWQgRkVVIEdyb3VwIE5hbWUgU3BlY2lmaWVkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfb3JkZXJfYW1vdW50J10gPSAnVGhlIG9yZGVyIGFtb3VudCBzcGVjaWZpZWQgaXMgaW52YWxpZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX29mZmVyX3R5cGUnXSA9ICdUaGUgb2ZmZXIgc3BlY2lmaWVkIGlzIGludmFsaWQgZm9yIHRoaXMgdHlwZSBvZiBvcmRlcic7CiRsYW5nWydlcnJvcl9pbnZhbGlkX3Byb2R1Y3RfY2F0ZWdvcnknXSA9ICdBdCBsZWFzdCBvbmUgaW52YWxpZCBwcm9kdWN0IGNhdGVnb3J5JzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfcHJvZHVjdCddID0gJ0ludmFsaWQgcHJvZHVjdCBpZCBzcGVjaWZpZWQnOwokbGFuZ1snZXJyb3JfaW52YWxpZF92YWx1ZSddID0gJ0ludmFsaWQgVmFsdWUgU3BlY2lmaWVkJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfcGFyYW0nXSA9ICdBIHJlcXVpcmVkIGlucHV0IHBhcmFtZXRlciBpcyBtaXNzaW5nJzsKJGxhbmdbJ2Vycm9yX21vZHVsZV9ub3RfZm91bmQnXSA9ICdBIFJlcXVpcmVkIE1vZHVsZSAoJXMpIENvdWxkIG5vdCBiZSBmb3VuZCc7CiRsYW5nWydlcnJvcl9uYW1lX2V4aXN0cyddID0gJ0EgcHJvbW90aW9uIGJ5IHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9ub29mZmVyX2RhdGEnXSA9ICdUaGVyZSBpcyBubyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGh0IGhlIG9mZmVyIHR5cGUnOwokbGFuZ1snZXJyb3JfcHJvbW90aW9uX25hbWUnXSA9ICdFYWNoIHByb21vdGlvbiBtdXN0IGhhdmUgYSBuYW1lJzsKJGxhbmdbJ2Vycm9yX3NhdmVfcHJvbW90aW9uJ10gPSAnQW4gZXJyb3Igb2NjdXJyZWQgdHJ5aW5nIHRvIHNhdmUgdGhpcyBwcm9tb3Rpb24nOwokbGFuZ1snZXJyb3Jfc3BlY2lmeV92YWx1ZSddID0gJ1BsZWFzZSBzcGVjaWZ5IGEgdmFsdWUnOwoKI0YKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1Byb21vdGlvbiBNYW5hZ2VyJzsKCiNHCgoKI0gKCiNJCiRsYW5nWydpbmZvX2NoZWNrb3V0X3Byb21vdGlvbnMnXSA9ICdDaGVja291dCBwcm9tb3Rpb25zIGFyZSBjYWxjdWxhdGVkIHdoZW4gdGhlIG9yZGVyIGlzIGNoZWNrZWQgb3V0LiAgT25seSB0aGUgZmlyc3QgbWF0Y2hpbmcgcHJvbW90aW9uIHdpbGwgYmUgdXNlZC4gIE5vIGFscmVhZHkgZGlzY291bnRlZCBjYXJ0IGl0ZW1zIHdpbGwgYmUgbWF0Y2hlZC4nOwokbGFuZ1snaW5mb19jb25kaXRpb25zJ10gPSAnU3BlY2lmeSBvbmUgb3IgbW9yZSBzYWxlcyBjb25kaXRpb25zIGZvciB0aGlzIHByb21vdGlvbic7CiRsYW5nWydpbmZvX2NvbmRpdGlvbl9kYXRhJ10gPSAnUHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZGF0YSBmb3IgdGhpcyBjb25kaXRpb24nOwokbGFuZ1snaW5mb19leHRyYXMnXSA9ICdUaGlzIGFyZWEgY29udGFpbnMgb3B0aW9uYWwgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGZvciBlYWNoIHByb21vdGlvbiBmb3IgdXNlIHdoZW4gZGlzcGxheWluZyBwcm9tb3Rpb24gYmFubmVycyBvciBwcm9tb3Rpb24gaW5mb3JtYXRpb24uJzsKJGxhbmdbJ2luZm9faW5zdGFudF9wcm9tb3Rpb25zJ10gPSAnSW5zdGFudCBwcm9tb3Rpb25zIGFyZSBjYWxjdWxhdGVkIHdoZW4gdGhlIGl0ZW0gaXMgYWRkZWQgdG8gdGhlIGNhcnQuICBBdHRlbXB0cyBhcmUgbWFkZSB0byBkaXNwbGF5IHBvdGVudGlhbCBkaXNjb3VudHMgYmVmb3JlIGNoZWNrb3V0LiAgVGhlIGZpcnN0IHByb21vdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdGVkIGNhcnQgaXRlbSB3aWxsIGJlIHVzZWQgaW4gY2FsY3VsYXRpbmcgZGlzY291bnRzLic7CiRsYW5nWydpbmZvX2ltYWdlX2RpciddID0gJ1NwZWNpZnkgYSBkaXJlY3RvcnkgbmFtZSByZWxhdGl2ZSB0byB0aGUgdXBsb2FkcyBkaXJlY3RvcnkgaW4gd2hpY2ggdG8gc2VhcmNoIGZvciBpbWFnZXMgdG8gYXR0YWNoIHRvIG9mZmVycyc7CiRsYW5nWydpbmZvX3Byb21vX25hbWUnXSA9ICdUaGlzIG5hbWUgaXMgdXNlZCBmb3IgaW52b2ljZXMgYW5kIHNhbGVzIG9yZGVycyB0byBkZXNjcmliZSB0aGUgZGlzY291bnQgYmVpbmcgYXBwbGllZCc7CiRsYW5nWydpbmZvX3Byb21vX3R5cGUnXSA9ICdTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHR5cGUgZm9yIHRoaXMgcHJvbW90aW9uLiAgTm90ZSB0aGF0IG9mZmVycyB0aGF0IGVmZmVjdCB0aGUgb3JkZXIgdG90YWwgd2lsbCBoYXZlIG5vIGVmZmVjdCBpbiAmcXVvdDtpbnN0YW50JnF1b3Q7IHR5cGUgcHJvbW90aW9ucy4nOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX0ZFVSddID0gJ0EgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgRkVVIGdyb3VwIG5hbWVzIGlzIHBlcm1pdHRlZCc7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwnXSA9ICdFbnRlciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIHVzaW5nIGEgLiBmb3IgYSBkZWNpbWFsIHNlcGFyYXRvci4gIGkuZTogIDEwMC4wMCc7CiRsYW5nWydpbmZvZGF0YV9QUk9NT1RJT05TX0NPTkRfV0VJR0hUJ10gPSAnRW50ZXIgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSB1c2luZyBhIC4gZm9yIGEgZGVjaW1hbCBzZXBhcmF0b3IuICBpLmU6ICAxMDAuMDAnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX0NPVVBPTiddID0gJ0VudGVyIGEgdGV4dCBzdHJpbmcgb2Ygbm8gbW9yZSB0aGFuIDEwIGNoYXJhY3RlcnMnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX1BST0RJRCddID0gJ0VudGVyIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcHJvZHVjdCBpZHMnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX1BST0RTS1UnXSA9ICdFbnRlciBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHByb2R1Y3QgU0tVXCdzJzsKJGxhbmdbJ2luZm9kYXRhX1BST01PVElPTlNfQ09ORF9QUk9EQ0FUJ10gPSAnRW50ZXIgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwcm9kdWN0IGNhdGVnb3J5IG5hbWVzJzsKJGxhbmdbJ2luZm9kYXRhX1BST01PVElPTlNfQ09ORF9QUk9ESElFUiddID0gJ0VudGVyIGEgc2luZ2xlIHByb2R1Y3QgaGllcmFyY2h5IG5hbWUgaW4gdGhlIGZvcm1hdCAmcXVvdDtncmFuZHBhcmVudC5wYXJlbnQuY2hpbGQmcXVvdDsnOwokbGFuZ1snaW5mb2RhdGFfUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSddID0gJ0VudGVyIGEgbWludW11bSBxdWFudGl0eSBhbmQgYSBza3UnOwoKI0oKCgojSwoKCiNMCiRsYW5nWydsYmxfYWRkX3Byb21vJ10gPSAnQWRkIFByb21vdGlvbic7CiRsYW5nWydsYmxfZWRpdF9wcm9tbyddID0gJ0VkaXQgUHJvbW90aW9uJzsKJGxhbmdbJ2xibF9jaGVja291dF9wcm9tb3Rpb25zJ10gPSAnQ2hlY2tvdXQgUHJvbW90aW9ucyc7CiRsYW5nWydsYmxfaW5zdGFudF9wcm9tb3Rpb25zJ10gPSAnSW5zdGFudCBQcm9tb3Rpb25zJzsKJGxhbmdbJ2xibF9wcm9tb3Rpb25zJ10gPSAnUHJvbW90aW9ucyc7CiRsYW5nWydsYmxfc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWydsYmxfY291cG9uZm9ybV90ZW1wbGF0ZXMnXSA9ICdDb3Vwb24gRm9ybSBUZW1wbGF0ZXMnOwokbGFuZ1snbGJsX2RlZmF1bHRfdGVtcGxhdGVzJ10gPSAnRGVmYXVsdCBUZW1wbGF0ZXMnOwokbGFuZ1snbGJsX29ubHlvbmUnXSA9ICdBbGxvdyBvbmx5IG9uZSAmcXVvdDtmcmVlJnF1b3Q7IGl0ZW0nOwokbGFuZ1snbGJsX3Byb21vX21lc3NhZ2VzJ10gPSAnUHJvbW90aW9uIE1lc3NhZ2VzJzsKCiNNCiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0NyZWF0ZSwgbWFuYWdlLCBhbmQgaW50ZXJhY3Qgd2l0aCBzYWxlcyBhbmQgcHJvbW90aW9ucyBmb3IgeW91ciBlLWNvbW1lcmNlIHNpdGUnOwokbGFuZ1snbXNnX3ByZWZzdXBkYXRlZCddID0gJ1ByZWZlcmVuY2VzIFVwZGF0ZWQnOwokbGFuZ1snbXNnX3Byb21vZGVsZXRlZCddID0gJ1Byb21vdGlvbiBEZWxldGVkJzsKJGxhbmdbJ21zZ192YWxpZF9jb2RlJ10gPSAnWW91ciB2YWxpZCBwcm9tb3Rpb24gY29kZSB3YXMgcmVjb2duaXNlZCEnOwoKI04KJGxhbmdbJ25vbmUnXSA9ICdOb25lJzsKCiNPCgoKI1AKJGxhbmdbJ3BhcmFtX2lubGluZSddID0gJ1NwZWNpZnkgdGhhdCB0aGUgY291cG9uIGNvZGUgZm9ybSBpcyBpbmxpbmUsIGFuZCB0aGUgcmVzdWx0cyBzaG91bGQgcmVwbGFjZSB0aGUgb3JpZ2luYWwgdGFnIGFuZCBub3QgdGhlIHBhZ2UgY29udGVudHMnOwokbGFuZ1sncGFyYW1fdGVtcGxhdGUnXSA9ICdTcGVjaWZ5IHRoZSBuYW1lIG9mIGEgbm9uIGRlZmF1bHQgY291cG9uIGNvZGUgdGVtcGxhdGUgdG8gZGlzcGxheSBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVGhlIFByb21vdGlvbnMgbW9kdWxlIGhhcyBiZWVuIGluc3RhbGxlZCwgcGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBhdXRob3JpemVkIHVzZXJzIGhhdmUgdGhlICZxdW90O01hbmFnZSBQcm9tb3Rpb25zJnF1b3Q7IHBlcm1pc3Npb24sIGFuZCB0aGVuIGNvbmZpZ3VyZSB5b3VyIHByb21vdGlvbnMgYW5kIHRlbXBsYXRlcyBhcHByb3ByaWF0ZWx5JzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdUaGUgUHJvbW90aW9ucyBtb2R1bGUgYW5kIGFsbCBhcHBsaWNhYmxlIGRhdGEgaGFzIGJlZW4gdW5pbnN0YWxsZWQgZnJvbSB0aGUgc3lzdGVtLiAgWW91IG1heSBub3cgcmVtb3ZlIHRoZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtb2R1bGUnOwokbGFuZ1snUFJPTU9USU9OU19DT05EX0NPVVBPTiddID0gJ1JlcXVpcmUgYSBDb3Vwb24gQ29kZSc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfRkVVJ10gPSAnUmVxdWlyZSBtZW1iZXJzaGlwIGluIGFuIEZFVSBncm91cCc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwnXSA9ICdSZXF1aXJlIGEgbWluaW11bSBwdXJjaGFzZSBhbW91bnQnOwokbGFuZ1snUFJPTU9USU9OU19DT05EX1dFSUdIVCddID0gJ1JlcXVpcmUgYSBtaW5pbXVtIG9yZGVyIHdlaWdodCc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfUFJPRElEJ10gPSAnUmVxdWlyZSBwdXJjaGFzZSBvZiBhIHNwZWNpZmljIHByb2R1Y3QnOwokbGFuZ1snUFJPTU9USU9OU19DT05EX1BST0RDQVQnXSA9ICdSZXF1aXJlIHB1cmNoYXNlIG9mIGF0IGxlYXN0IG9uZSBwcm9kdWN0IGluIGEgY2F0ZWdvcnknOwokbGFuZ1snUFJPTU9USU9OU19DT05EX1BST0RISUVSJ10gPSAnUmVxdWlyZSBwdXJjaGFzZSBvZiBhdCBsZWFzdCBvbmUgcHJvZHVjdCBpbiBhIGhpZXJhcmNoeSc7CiRsYW5nWydQUk9NT1RJT05TX0NPTkRfUFJPRFNLVSddID0gJ1JlcXVpcmUgcHVyY2hhc2Ugb2YgYSBzcGVjaWZpYyBwcm9kdWN0IChieSBTS1UpJzsKJGxhbmdbJ1BST01PVElPTlNfQ09ORF9CVUxLUFVSQ0hBU0UnXSA9ICdSZXF1aXJlIGEgcHVyY2hhc2Ugb2YgYSBtaW51bXVtIHF1YW50aXR5IG9mIGEgc3BlY2lmaWMgcHJvZHVjdCAoYnkgU0tVKSc7CiRsYW5nWycwMV9QUk9NT1RJT05TX09GRkVSX1BST0RVQ1QnXSA9ICdSZWNlaXZlIGEgZnJlZSBwcm9kdWN0JzsKJGxhbmdbJzAyX1BST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UJ10gPSAnRGlzY291bnQgdGhlIGFwcGxpY2FibGUgcHJvZHVjdHMgYnkgYSBwZXJjZW50YWdlJzsKJGxhbmdbJzAzX1BST01PVElPTlNfT0ZGRVJfUEVSQ0VOVCddID0gJ1BlcmNlbnRhZ2Ugb2ZmIG9yZGVyIHRvdGFsJzsKJGxhbmdbJzA0X1BST01PVElPTlNfT0ZGRVJfRElTQ09VTlQnXSA9ICdSZWR1Y2Ugb3JkZXIgdG90YWwgYnkgYSBzcGVjaWZpZWQgZG9sbGFyIGZpZ3VyZSc7CiRsYW5nWycwNV9QUk9NT1RJT05TX09GRkVSX1NBTUVQUk9EVUNUJ10gPSAnR2V0IHRoZSBzYW1lIHByb2R1Y3QgZnJlZSc7CiRsYW5nWycwNl9QUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1UnXSA9ICdSZWNlaXZlIGEgZnJlZSBwcm9kdWN0IChieSBTS1UpJzsKJGxhbmdbJzA3X1BST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVCddID0gJ0Rpc2NvdW50IHRoZSBhcHBsaWNhYmxlIHByb2R1Y3RzIGJ5IGEgZml4ZWQgYW1vdW50JzsKJGxhbmdbJ3Byb21vX3R5cGVfaW5zdGFudCddID0gJ1Byb21vdGlvbiBvZmZlciBjYWxjdWxhdGVkIGluIHRoZSBDYXJ0JzsKJGxhbmdbJ3Byb21vX3R5cGVfY2hlY2tvdXQnXSA9ICdQcm9tb3Rpb24gb2ZmZXIgY2FsY3VsYXRlZCBvbiBDaGVja291dCc7CiRsYW5nWydwcm9tcHRfYWRkX2NvbmRpdGlvbiddID0gJ0FkZCBhIENvbmRpdGlvbic7CiRsYW5nWydwcm9tcHRfYWRkcHJvbW8nXSA9ICdBZGQgYSBOZXcgUHJvbW90aW9uJzsKJGxhbmdbJ3Byb21wdF9hbGxvd19jdW11bGF0aXZlJ10gPSAnQXBwbHkgdGhpcyBwcm9tb3Rpb24gdG8gYWxyZWFkeSBkaXNjb3VudGVkIGl0ZW1zPyc7CiRsYW5nWydwcm9tcHRfYWxsb3dfb25jZSddID0gJ1RoaXMgcHJvbW90aW9uIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBwZXIgdHJhbnNhY3Rpb24nOwokbGFuZ1sncHJvbXB0X2NvZGUnXSA9ICdDb3Vwb24gQ29kZSc7CiRsYW5nWydwcm9tcHRfY29uZGl0aW9uX2RhdGEnXSA9ICdDb25kaXRpb24gRGF0YSc7CiRsYW5nWydwcm9tcHRfY29uZGl0aW9uX3R5cGUnXSA9ICdUeXBlIG9mIENvbmRpdGlvbic7CiRsYW5nWydwcm9tcHRfY29uZGl0aW9ucyddID0gJ0NvbmRpdGlvbnMnOwokbGFuZ1sncHJvbXB0X2NvdXBvbl9jb2RlJ10gPSAnRW50ZXIgYSBDb3Vwb24gb3IgUHJvbW90aW9uIENvZGUnOwokbGFuZ1sncHJvbXB0X2RmbHRfb2ZmZXJfdHlwZSddID0gJ0RlZmF1bHQgb2ZmZXIgdHlwZSc7CiRsYW5nWydwcm9tcHRfZGZsdF9wcm9tb3Rpb25fcGVyaW9kJ10gPSAnRGVmYXVsdCBQcm9tb3Rpb24gUGVyaW9kIChtb250aHMpJzsKJGxhbmdbJ3Byb21wdF9lbmRfZGF0ZSddID0gJ0VuZCBEYXRlJzsKJGxhbmdbJ3Byb21wdF9lcnJvcl9lbXB0eSddID0gJ0VtcHR5IENvZGUgTWVzc2FnZSc7CiRsYW5nWydwcm9tcHRfZXJyb3JfaW52YWxpZCddID0gJ0ludmFsaWQgQ29kZSBNZXNzYWdlJzsKJGxhbmdbJ3Byb21wdF9leHRyYXMnXSA9ICdFeHRyYXMnOwokbGFuZ1sncHJvbXB0X2ZyZWVfcHJvZHVjdCddID0gJ1NwZWNpZnkgdGhlIGZyZWUgcHJvZHVjdCc7CiRsYW5nWydwcm9tcHRfaWQnXSA9ICdJRCc7CiRsYW5nWydwcm9tcHRfaW1hZ2UnXSA9ICdJbWFnZSc7CiRsYW5nWydwcm9tcHRfaW1hZ2VfZGlyJ10gPSAnSW1hZ2UgRGlyZWN0b3J5JzsKJGxhbmdbJ3Byb21wdF9kZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXB0aW9uJzsKJGxhbmdbJ3Byb21wdF9tc2dfdmFsaWRfY29kZSddID0gJ1ZhbGlkIENvZGUgTWVzc2FnZSc7CiRsYW5nWydwcm9tcHRfbmFtZSddID0gJ05hbWUnOwokbGFuZ1sncHJvbXB0X29mZmVyJ10gPSAnT2ZmZXInOwokbGFuZ1sncHJvbXB0X29mZmVyX2RhdGEnXSA9ICdPZmZlciBEYXRhJzsKJGxhbmdbJ3Byb21wdF9vZmZlcl90eXBlJ10gPSAnT2ZmZXIgVHlwZSc7CiRsYW5nWydwcm9tcHRfb2ZmZXJzJ10gPSAnT2ZmZXJzJzsKJGxhbmdbJ3Byb21wdF9wZXJjZW50YWdlX2Rpc2NvdW50J10gPSAnUGVyY2VudCBEaXNjb3VudCA8ZW0+KGV4cHJlc3NlZCBhcyBhIGRlY2ltYWwgZnJvbSAwIHRvIDEpPC9lbT4nOwokbGFuZ1sncHJvbXB0X3ByaWNlX2Rpc2NvdW50J10gPSAnU3BlY2lmeSB0aGUgZG9sbGFyIGZpZ3VyZSB0byByZW1vdmUgZnJvbSB0aGUgb3JkZXInOwokbGFuZ1sncHJvbXB0X3N0YXJ0X2RhdGUnXSA9ICdTdGFydCBEYXRlJzsKJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZSddID0gJ1RlbXBsYXRlJzsKJGxhbmdbJ3Byb21wdF90eXBlJ10gPSAnVHlwZSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9DT1VQT04nXSA9ICdDb3Vwb24gQ29kZSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9GRVUnXSA9ICdGRVUgR3JvdXAgTmFtZSc7CiRsYW5nWydwcm9tcHRkYXRhX1BST01PVElPTlNfQ09ORF9TVUJUT1RBTCddID0gJ01pbmltdW0gT3JkZXIgQW1vdW50JzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1dFSUdIVCddID0gJ01pbmltdW0gT3JkZXIgV2VpZ2h0JzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1BST0RJRCddID0gJ1Byb2R1Y3QgSWQnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfUFJPRFNLVSddID0gJ1Byb2R1Y3QgU0tVJzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1BST0RDQVQnXSA9ICdQcm9kdWN0IENhdGVnb3J5JzsKJGxhbmdbJ3Byb21wdGRhdGFfUFJPTU9USU9OU19DT05EX1BST0RISUVSJ10gPSAnUHJvZHVjdCBIaWVyYXJjaHknOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfQlVMS1BVUkNIQVNFJ10gPSAnUHJvZHVjdCBTS1UnOwokbGFuZ1sncHJvbXB0ZGF0YV9QUk9NT1RJT05TX0NPTkRfQlVMS1BVUkNIQVNFMiddID0gJ01pbmltdW0gUXVhbnRpdHknOwokbGFuZ1sncHJvbXB0b2ZmZXJfMDNfUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UJ10gPSAnRGlzY291bnQgUGVyY2VudGFnZSA8ZW0+KGV4cHJlc3NlZCBhcyBhIHZhbHVlIGZyb20gMC4wMCB0byAxLjAwKTwvZW0+JzsKJGxhbmdbJ3Byb21wdG9mZmVyXzA0X1BST01PVElPTlNfT0ZGRVJfRElTQ09VTlQnXSA9ICdDYXNoIERpc2NvdW50JzsKJGxhbmdbJ3Byb21wdG9mZmVyXzAxX1BST01PVElPTlNfT0ZGRVJfUFJPRFVDVCddID0gJ1Byb2R1Y3QgSUQgdG8gZ2l2ZSBmcmVlJzsKJGxhbmdbJ3Byb21wdG9mZmVyXzAyX1BST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UJ10gPSAnRGlzY291bnQgUGVyY2VudGFnZSA8ZW0+KGV4cHJlc3NlZCBhcyBhIHZhbHVlIGZyb20gMC4wMCB0byAxLjAwKTwvZW0+JzsKJGxhbmdbJ3Byb21wdG9mZmVyXzA1X1BST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1QnXSA9ICdPZmZlciB0aGUgc2FtZSBwcm9kdWN0IGZyZWUgPGVtPihhbnkgdmFsdWUgaGVyZSBpcyB2YWxpZCk8L2VtPic7CiRsYW5nWydwcm9tcHRvZmZlcl8wNl9QUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1UnXSA9ICdQcm9kdWN0IFNLVShzKSB0aGF0IGFyZSBmcmVlIHdpdGggdGhlIG9yZGVyIChvbmx5IHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtIGluIHRoZSBjYXJ0IHdpbGwgYmUgZGlzY291bnRlZCknOwokbGFuZ1sncHJvbXB0b2ZmZXJfMDdfUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UJ10gPSAnRGlzY291bnQgYW1vdW50IDxlbT4oZXhwcmVzc2VkIGFzIGEgdmFsdWUsIGNhbm5vdCBleGNlZWQgdGhlIHByb2R1Y3RzIHByaWNlLjwvZW0+JzsKCiNRCgoKI1IKJGxhbmdbJ3JlYWxseV9kZWxldGVfcHJvbW90aW9uJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIHByb21vdGlvbj8nOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhpcyBtb2R1bGU/IFByb2NlZWRpbmcgd2lsbCBwZXJtYW5lbnRseSByZW1vdmUgYWxsIG9mIHlvdXIgcHJvbW90aW9ucyBkYXRhIGFuZCBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCBhIHdvcmtpbmcgZS1jb21tZXJjZSB3ZWJzaXRlLic7CiRsYW5nWydyZXNldHRvZmFjdG9yeSddID0gJ1Jlc2V0IFRvIEZhY3RvcnkgRGVmYXVsdHMnOwoKI1MKJGxhbmdbJ3N1Ym1pdCddID0gJ1N1Ym1pdCc7CgojVAokbGFuZ1sndGl0bGVfY291cG9uZm9ybV9kZmx0dGVtcGxhdGUnXSA9ICdTeXN0ZW0gRGVmYXVsdCBDb3Vwb24gRm9ybSBUZW1wbGF0ZSc7CiRsYW5nWyd0eXBlJ10gPSAnVHlwZSc7CgojVQoKCiNWCgoKI1cKJGxhbmdbJ3dhcm5faW5zdGFudF9wcm9tb3Rpb25zJ10gPSAnSW5zdGFudCBwcm9tb3Rpb25zIHdpbGwgbm90IHdvcmsgd2l0aCB3aGVuIHVzaW5nIHRoZSAmcXVvdDtDYXJ0JnF1b3Q7IG1vZHVsZS4nOwokbGFuZ1snd2FybmluZ19ub19jb25kaXRpb25zJ10gPSAnWW91IGhhdmUgbm90IHNwZWNpZmllZCBhbnkgY29uZGl0aW9ucyBmb3IgdGhpcyBvZmZlciAob3RoZXIgdGhhbiBhIHN0YXJ0IGFuZCBlbmQgZGF0ZSkuICBDbGljayBPSyB0byBjb250aW51ZSwgb3IgQ2FuY2VsIHRvIGNvcnJlY3QgdGhpcyc7CgojWAoKCiNZCgoKI1oKCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.condition_tests.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKZmluYWwgY2xhc3MgY29uZGl0aW9uX3Rlc3RzCnsKICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgLyoqCiAgICogVGVzdCB0aGlzIGNvbmRpdGlvbiB0byBzZWUgaWYgaXQgaXMgYW4gRkVVIGdyb3VwIGNvbmRpdGlvbgogICAqIGFuZCBpZiB0aGUgdXNlciBpZCBzcGVjaWZpZWQgKG9yIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCkKICAgKiBtYXRjaGVzCiAgICoKICAgKiByZXR1cm4gVFJVRSBvbiBtYXRjaCwgRkFMU0Ugb3RoZXJ3aXNlCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0ZXN0X2ZldV91aWQocHJvbW90aW9uX2NvbmRpdGlvbiAkY29uZGl0aW9uLCRmZXVfdWlkID0gLTEpCiAgewogICAgaWYoICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSAhPSBQUk9NT1RJT05TX0NPTkRfRkVVICkgcmV0dXJuIEZBTFNFOwoKICAgICRmZXUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAhJGZldSApIHJldHVybiBGQUxTRTsKICAgIGlmKCAkZmV1X3VpZCA9PSAtMSApICRmZXVfdWlkID0gJGZldS0+TG9nZ2VkSW5JZCgpOyAKICAgIGlmKCAkZmV1X3VpZCA8PSAwICkgcmV0dXJuIEZBTFNFOwoKICAgIC8vIGJ1aWxkIGEgbGlzdCBvZiBtZW1iZXIgZ3JvdXAgbmFtZXMKICAgICRhbGxncm91cHMgPSAkZmV1LT5HZXRHcm91cExpc3QoKTsKICAgICRhbGxncm91cHMgPSBhcnJheV9mbGlwKCRhbGxncm91cHMpOwogICAgJG1lbWJlcl9vZiA9ICRmZXUtPkdldE1lbWJlckdyb3Vwc0FycmF5KCRmZXVfdWlkKTsKICAgIGlmKCAhJG1lbWJlcl9vZiApIHJldHVybiBGQUxTRTsKICAgICRtZW1iZXJfb2YgPSBjZ2VfYXJyYXk6OmV4dHJhY3RfZmllbGQoJG1lbWJlcl9vZiwnZ3JvdXBpZCcpOwogICAgJG1lbWJlcl9ncm91cF9uYW1lcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkbWVtYmVyX29mIGFzICRtZ2lkICkgewogICAgICAkbWVtYmVyX2dyb3VwX25hbWVzW10gPSAkYWxsZ3JvdXBzWyRtZ2lkXTsKICAgIH0KCiAgICAvLyBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIGNvbmRpdGlvbiwgYXMgYW4gYXJyYXkgb2YgdHJpbW1lZCBncm91cCBuYW1lcwogICAgJGRhdGEgPSBleHBsb2RlKCcsJywkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKICAgIGZvciggJGogPSAwOyAkaiA8IGNvdW50KCRkYXRhKTsgJGorKyApIHsKICAgICAgJGRhdGFbJGpdID0gdHJpbSgkZGF0YVskal0pOwogICAgfQoKICAgIC8vIG5vdyBkbyBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiBtZW1iZXIgZ3JvdXBvIG5hbWVzCiAgICAvLyBhbmQgdGhlIGRhdGEgZ3JvdXAgbmFtZXMuCiAgICAkcmVzID0gYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJfZ3JvdXBfbmFtZXMsJGRhdGEpOwogICAgaWYoIGNvdW50KCRyZXMpICkgcmV0dXJuIFRSVUU7CiAgICAKICAgIHJldHVybiBGQUxTRTsKICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdHMgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9jbGFzcy5wcm9tb19vcHMucGhwJyk7CgpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9GRVUnLCdQUk9NT1RJT05TX0NPTkRfRkVVJyk7ICAgICAgIC8vIEZFVSBncm91cCBtZW1iZXJzaGlwCmRlZmluZSgnUFJPTU9USU9OU19DT05EX1NVQlRPVEFMJywnUFJPTU9USU9OU19DT05EX1NVQlRPVEFMJyk7ICAgLy8gT3JkZXIgdG90YWwgKHByZSBzaGlwcGluZyBhbmQgdGF4ZXMpCmRlZmluZSgnUFJPTU9USU9OU19DT05EX1dFSUdIVCcsJ1BST01PVElPTlNfQ09ORF9XRUlHSFQnKTsgLy8gT3JkZXIgd2VpZ2h0CmRlZmluZSgnUFJPTU9USU9OU19DT05EX1BST0RJRCcsJ1BST01PVElPTlNfQ09ORF9QUk9ESUQnKTsgLy8gT3JkZXIgaGFzIGEgY2VydGFpbiBwcm9kdWN0IGlkCmRlZmluZSgnUFJPTU9USU9OU19DT05EX1BST0RDQVQnLCdQUk9NT1RJT05TX0NPTkRfUFJPRENBVCcpOyAvLyBPcmRlciBoYXMgYSBwcm9kdWN0IGZyb20gYSBjZXJ0YWluIGNhdGVnb3J5CmRlZmluZSgnUFJPTU9USU9OU19DT05EX1BST0RISUVSJywnUFJPTU9USU9OU19DT05EX1BST0RISUVSJyk7IC8vIE9yZGVyIGhhcyBhIHByb2R1Y3QgZnJvbSBhIGNlcnRhaW4gaGllcmFyY2h5CmRlZmluZSgnUFJPTU9USU9OU19DT05EX1BST0RTS1UnLCdQUk9NT1RJT05TX0NPTkRfUFJPRFNLVScpOyAvLyBPcmRlciBoYXMgYSBjZXJ0YWluIHByb2R1Y3Qgc2t1CmRlZmluZSgnUFJPTU9USU9OU19DT05EX0NPVVBPTicsJ1BST01PVElPTlNfQ09ORF9DT1VQT04nKTsgLy8gT3JkZXIgaGFzIGEgcHJvZHVjdCBmcm9tIGEgY2VydGFpbiBoaWVyYXJjaHkKZGVmaW5lKCdQUk9NT1RJT05TX0NPTkRfQlVMS1BVUkNIQVNFJywnUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRScpOyAvLyBPcmRlciBoYXMgYSBtaW51bXVtIHB1cmNoYXNlIG9mIE4gcXVhbnRpdHkgb2Ygc3BlY2lmaWMgU0tVCmRlZmluZSgnUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUJywnMDFfUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUJyk7CmRlZmluZSgnUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQnLCcwMl9QUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVCcpOwpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfUEVSQ0VOVCcsJzAzX1BST01PVElPTlNfT0ZGRVJfUEVSQ0VOVCcpOwpkZWZpbmUoJ1BST01PVElPTlNfT0ZGRVJfRElTQ09VTlQnLCcwNF9QUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UJyk7CmRlZmluZSgnUFJPTU9USU9OU19PRkZFUl9TQU1FUFJPRFVDVCcsJzA1X1BST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1QnKTsKZGVmaW5lKCdQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1UnLCcwNl9QUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1UnKTsKZGVmaW5lKCdQUk9NT1RJT05TX09GRkVSX1BST0RBTU9VTlQnLCcwN19QUk9NT1RJT05TX09GRkVSX1BST0RBTU9VTlQnKTsKCmNsYXNzIHByb21vdGlvbl9jb25kaXRpb24KewogICAgcHJpdmF0ZSAkX2lkOwogICAgcHJpdmF0ZSAkX3Byb21vdGlvbl9pZDsKICAgIHByaXZhdGUgJF9jb25kX3R5cGU7CiAgICBwcml2YXRlICRfZGF0YTsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF90eXBlc19hcnJheSgkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVCkKICAgIHsKICAgICAgICBzd2l0Y2goICR0eXBlICkgewogICAgICAgIGNhc2UgcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQ6CiAgICAgICAgICAgIHJldHVybiBhcnJheShQUk9NT1RJT05TX0NPTkRfRkVVLFBST01PVElPTlNfQ09ORF9QUk9ESUQsCiAgICAgICAgICAgICAgICAgICAgICAgICBQUk9NT1RJT05TX0NPTkRfUFJPRENBVCxQUk9NT1RJT05TX0NPTkRfUFJPREhJRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQUk9NT1RJT05TX0NPTkRfQ09VUE9OLFBST01PVElPTlNfQ09ORF9QUk9EU0tVLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSk7CiAgICAgICAgY2FzZSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICAgICAgIHJldHVybiBhcnJheShQUk9NT1RJT05TX0NPTkRfRkVVLFBST01PVElPTlNfQ09ORF9TVUJUT1RBTCxQUk9NT1RJT05TX0NPTkRfUFJPRElELAogICAgICAgICAgICAgICAgICAgICAgICAgUFJPTU9USU9OU19DT05EX1BST0RDQVQsUFJPTU9USU9OU19DT05EX1BST0RISUVSLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJPTU9USU9OU19DT05EX0NPVVBPTixQUk9NT1RJT05TX0NPTkRfV0VJR0hULAogICAgICAgICAgICAgICAgICAgICAgICAgUFJPTU9USU9OU19DT05EX1BST0RTS1UsCiAgICAgICAgICAgICAgICAgICAgICAgICBQUk9NT1RJT05TX0NPTkRfQlVMS1BVUkNIQVNFKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9pZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9pZCgkaWQpCiAgICB7CiAgICAgICAgJHRoaXMtPl9pZCA9ICRpZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3Byb21vdGlvbl9pZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fcHJvbW90aW9uX2lkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfcHJvbW90aW9uX2lkKCRpZCkKICAgIHsKICAgICAgICAkdGhpcy0+X3Byb21vdGlvbl9pZCA9ICRpZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NvbmRfdHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fY29uZF90eXBlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfY29uZF90eXBlKCR0eXBlKQogICAgewogICAgICAgIGlmKCAkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfRkVVIHx8CSR0eXBlID09IFBST01PVElPTlNfQ09ORF9TVUJUT1RBTCB8fCAkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfV0VJR0hUIHx8CiAgICAgICAgICAgICR0eXBlID09IFBST01PVElPTlNfQ09ORF9DT1VQT04gfHwgJHR5cGUgPT0gUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRSB8fCAkdHlwZSA9PSBQUk9NT1RJT05TX0NPTkRfUFJPRElEIHx8CiAgICAgICAgICAgICR0eXBlID09IFBST01PVElPTlNfQ09ORF9QUk9EQ0FUIHx8ICR0eXBlID09IFBST01PVElPTlNfQ09ORF9QUk9EU0tVIHx8CSR0eXBlID09IFBST01PVElPTlNfQ09ORF9QUk9ESElFUiApCiAgICAgICAgICAgICR0aGlzLT5fY29uZF90eXBlID0gJHR5cGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9kYXRhKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9kYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZGF0YSgkZGF0YSkKICAgIHsKICAgICAgICAkdGhpcy0+X2RhdGEgPSAkZGF0YTsKICAgIH0KfSAvLyBjbGFzcwoKCmNsYXNzIHByb21vdGlvbgp7CiAgICBwcml2YXRlICRfaWQ7CiAgICBwcml2YXRlICRfbmFtZTsKICAgIHByaXZhdGUgJF9kZXNjcmlwdGlvbjsKICAgIHByaXZhdGUgJF9pbWFnZTsKICAgIHByaXZhdGUgJF9jcmVhdGVkOwogICAgcHJpdmF0ZSAkX3N0YXJ0X2RhdGU7CiAgICBwcml2YXRlICRfZW5kX2RhdGU7CiAgICBwcml2YXRlICRfb2ZmZXJfdHlwZTsKICAgIHByaXZhdGUgJF9vZmZlcl9kYXRhOwogICAgcHJpdmF0ZSAkX2NvbmRpdGlvbnM7CiAgICBwcml2YXRlICRfaXRlbV9vcmRlcjsKICAgIHByaXZhdGUgJF90eXBlOwogICAgcHJpdmF0ZSAkX2V4dHJhOwogICAgcHJpdmF0ZSBzdGF0aWMgJF90eXBlX2NhY2hlOwoKICAgIGNvbnN0IFRZUEVfSU5TVEFOVCA9ICdwcm9tb190eXBlX2luc3RhbnQnOwogICAgY29uc3QgVFlQRV9DSEVDS09VVCA9ICdwcm9tb190eXBlX2NoZWNrb3V0JzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgICR0aGlzLT5fdHlwZSA9IHNlbGY6OlRZUEVfQ0hFQ0tPVVQ7CiAgICB9CgogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfdHlwZXNfYXJyYXkoKQogICAgewogICAgICAgIHJldHVybiBhcnJheShzZWxmOjpUWVBFX0lOU1RBTlQsc2VsZjo6VFlQRV9DSEVDS09VVCk7CiAgICB9CgogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfb2ZmZXJfYXJyYXkoJHR5cGUgPSBzZWxmOjpUWVBFX0NIRUNLT1VUKQogICAgewogICAgICAgIHN3aXRjaCggJHR5cGUgKSB7CiAgICAgICAgY2FzZSBzZWxmOjpUWVBFX0lOU1RBTlQ6CiAgICAgICAgICAgIHJldHVybiBhcnJheShQUk9NT1RJT05TX09GRkVSX1BST0RVQ1QsUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQsUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UKTsKCiAgICAgICAgY2FzZSBzZWxmOjpUWVBFX0NIRUNLT1VUOgogICAgICAgICAgICByZXR1cm4gYXJyYXkoUFJPTU9USU9OU19PRkZFUl9QRVJDRU5ULFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQsUFJPTU9USU9OU19PRkZFUl9QUk9EVUNULFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVSwKICAgICAgICAgICAgICAgICAgICAgICAgIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5ULFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVCk7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X29mZmVyX2V4dHJhX21hcCgpCiAgICB7CiAgICAgICAgJHJlcyA9IGFycmF5KCk7CiAgICAgICAgJHJlc1tQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RdID0gYXJyYXkoYXJyYXkoJ25hbWUnPT4nb25seV9vbmUnLCd0eXBlJz0+J2NoZWNrYm94JywnbGFiZWwnPT4nbGJsX29ubHlvbmUnKSk7CiAgICAgICAgJHJlc1tQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1VdID0gYXJyYXkoYXJyYXkoJ25hbWUnPT4nb25seV9vbmUnLCd0eXBlJz0+J2NoZWNrYm94JywnbGFiZWwnPT4nbGJsX29ubHlvbmUnKSk7CiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9pZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9pZCgkdmFsKQogICAgewogICAgICAgICR0aGlzLT5faWQgPSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbmFtZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X25hbWUoJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X25hbWUgPSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZGVzY3JpcHRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2Rlc2NyaXB0aW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfZGVzY3JpcHRpb24oJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X2Rlc2NyaXB0aW9uID0gJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2ltYWdlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9pbWFnZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ltYWdlKCR2YWwpCiAgICB7CiAgICAgICAgaWYoIGVtcHR5KCR2YWwpIHx8IChpc19pbnQoJHZhbCkgJiYgKCR2YWwgPCAxKSkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgJHRoaXMtPl9pbWFnZSA9ICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF90eXBlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl90eXBlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfdHlwZSgkdmFsKQogICAgewogICAgICAgIHN3aXRjaCggJHZhbCApIHsKICAgICAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICAgICAgICR0aGlzLT5fdHlwZSA9ICR2YWw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2NyZWF0ZWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2NyZWF0ZWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9jcmVhdGVkKCR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPl9jcmVhdGVkID0gJHZhbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2l0ZW1fb3JkZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2l0ZW1fb3JkZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9zdGFydF9kYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9zdGFydF9kYXRlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfc3RhcnRfZGF0ZSgkdmFsKQogICAgewogICAgICAgICR0aGlzLT5fc3RhcnRfZGF0ZSA9ICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldF9lbmRfZGF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fZW5kX2RhdGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldF9lbmRfZGF0ZSgkdmFsKQogICAgewogICAgICAgICR0aGlzLT5fZW5kX2RhdGUgPSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfb2ZmZXJfdHlwZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fb2ZmZXJfdHlwZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X29mZmVyX3R5cGUoJHZhbCkKICAgIHsKICAgICAgICAkdGhpcy0+X29mZmVyX3R5cGUgPSAkdmFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfb2ZmZXJfZGF0YSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fb2ZmZXJfZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2V4dHJhKCRrZXksJHZhbHVlKQogICAgewogICAgICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9leHRyYSkgKSAkdGhpcy0+X2V4dHJhID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+X2V4dHJhWyRrZXldID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZXh0cmEoJGtleSkKICAgIHsKICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9leHRyYSkgJiYgaXNzZXQoJHRoaXMtPl9leHRyYVska2V5XSkgKSByZXR1cm4gJHRoaXMtPl9leHRyYVska2V5XTs7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHVuc2V0X2V4dHJhKCRrZXkpCiAgICB7CiAgICAgICAgaWYoIGlzX2FycmF5KCR0aGlzLT5fZXh0cmEpICYmIGlzc2V0KCR0aGlzLT5fZXh0cmFbJGtleV0pICkgdW5zZXQoJHRoaXMtPl9leHRyYVska2V5XSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyX2V4dHJhKCkKICAgIHsKICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9leHRyYSkgKSAkdGhpcy0+ZXh0cmEgPSBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfb2ZmZXJfZGF0YSgkZGF0YSkKICAgIHsKICAgICAgICAkdGhpcy0+X29mZmVyX2RhdGEgPSAkZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gJmdldF9jb25kaXRpb25zKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9jb25kaXRpb25zOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRfY29uZGl0aW9uKCYkY29uZGl0aW9uKQogICAgewogICAgICAgIGlmKCAhaXNfYSgkY29uZGl0aW9uLCdwcm9tb3Rpb25fY29uZGl0aW9uJykgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgaWYoICFpc19hcnJheSgkdGhpcy0+X2NvbmRpdGlvbnMpICkJJHRoaXMtPl9jb25kaXRpb25zID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+X2NvbmRpdGlvbnNbXSA9ICRjb25kaXRpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlbF9jb25kaXRpb24oJGlkeCkKICAgIHsKICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jb25kaXRpb25zKSAmJgljb3VudCgkdGhpcy0+X2NvbmRpdGlvbnMpID4gJGlkeCAmJiAkaWR4ID4gMCkgewogICAgICAgICAgICAkdG1wID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHRoaXMtPl9jb25kaXRpb25zKTsgJGkrKyApIHsKICAgICAgICAgICAgICAgIGlmKCAkaSA9PSAkaWR4ICkgY29udGludWU7CiAgICAgICAgICAgICAgICAkdG1wW10gPSAkdGhpcy0+X2NvbmRpdGlvbnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPl9jb25kaXRpb25zID0gJHRtcDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlbF9jb25kaXRpb25zKCkKICAgIHsKICAgICAgICAkdGhpcy0+X2NvbmRpdGlvbnMgPSBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiAmZ2V0X2NvbmRpdGlvbigkaWR4KQogICAgewogICAgICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9jb25kaXRpb25zKSB8fCAoY291bnQoJHRoaXMtPl9jb25kaXRpb25zKSA8ICRpZHgpIHx8ICgkaWR4IDwgMCkgKSB7CiAgICAgICAgICAgICR0bXAgPSBGQUxTRTsKICAgICAgICAgICAgcmV0dXJuICR0bXA7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPl9jb25kaXRpb25zWyRpZHhdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjb3VudF9jb25kaXRpb25zKCkKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPl9jb25kaXRpb25zKTsKICAgIH0KCgogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+X2lkICkgcmV0dXJuICR0aGlzLT5fdXBkYXRlKCk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faW5zZXJ0KCk7CiAgICB9CgoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGUoKQogICAgewogICAgICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAgICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuUFJPTU9USU9OU19DT05EX1RBQkxFLicgV0hFUkUgcHJvbW90aW9uX2lkID0gPyc7CiAgICAgICAgJHJlcyA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHRoaXMtPl9pZCkpOwogICAgICAgIC8vIG5vIGVycm9yIGlmIHRoZXJlIGFyZSBubyBjb25kaXRpb25zLgoKICAgICAgICAkcXVlcnkgPSAnREVMRVRFIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgaWQgPSA/JzsKICAgICAgICAkcmVzID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+X2lkKSk7CiAgICAgICAgaWYoICEkcmVzICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignRXJyb3IgZGVsZXRpbmcgcHJvbW90aW9uJyk7CgogICAgICAgICRxdWVyeSA9ICdVUERBVEUgJy5QUk9NT1RJT05TX1RBQkxFLicgU0VUIGl0ZW1fb3JkZXIgPSBpdGVtX29yZGVyIC0gMSBXSEVSRSBpdGVtX29yZGVyID4gPyBBTkQgdHlwZSA9ID8nOwogICAgICAgICRyZXMgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0aGlzLT5faXRlbV9vcmRlciwkdGhpcy0+X3R5cGUpKTsKICAgICAgICBpZiggISRyZXMgKSB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdFcnJvciBkZWxldGluZyBwcm9tb3Rpb24gKHVwZGF0aW5nIGl0ZW0gb3JkZXIpJyk7CgogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIC8qKgogICAgICogRGVsZXRlIGNvbmRpdGlvbnMgZnJvbSB0aGUgZGF0YWJhc2UgZm9yIHRoaXMgcHJvbW90aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2RlbF9jb25kaXRpb25zKCkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAkcXVlcnkgPSAnREVMRVRFIEZST00gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEUuJyBXSEVSRSBwcm9tb3Rpb25faWQgPSA/JzsKICAgICAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+Z2V0X2lkKCkpKTsKICAgICAgICBpZiggISRkYnIgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbnNlcnQgYSBjb25kaXRpb24gaW50byB0aGUgZGF0YWJhc2UgZm9yIHRoaXMgcHJvbW90aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2luc2VydF9jb25kaXRpb24ocHJvbW90aW9uX2NvbmRpdGlvbiAkY29uZCkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKICAgICAgICAkY29uZC0+c2V0X3Byb21vdGlvbl9pZCgkdGhpcy0+Z2V0X2lkKCkpOwoKICAgICAgICAkX3N0b3JlX2RhdGEgPSBmdW5jdGlvbigkdG1wKSB7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdG1wKSApIHsKICAgICAgICAgICAgICAgIGlmKCBjb3VudCgkdG1wKSA9PSAxICkgcmV0dXJuICR0bXBbMF07CiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKCR0bXApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoIGlzX29iamVjdCgkdG1wKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoJHRtcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICR0bXA7CiAgICAgICAgfTsKCiAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEUuJyAocHJvbW90aW9uX2lkLGNvbmRfdHlwZSxkYXRhKSBWQUxVRVMgKD8sPyw/KSc7CiAgICAgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGNvbmQtPmdldF9wcm9tb3Rpb25faWQoKSwkY29uZC0+Z2V0X2NvbmRfdHlwZSgpLCRfc3RvcmVfZGF0YSgkY29uZC0+Z2V0X2RhdGEoKSkpKTsKICAgICAgICBpZiggISRkYnIgKSB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdTUUwgRXJyb3I6ICcuJGRiLT5zcWwuJyAtLSAnLiRkYi0+RXJyb3JNc2coKSk7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBfdXBkYXRlKCkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT5nZXRfaWQoKSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAkcXVlcnkgPSAnVVBEQVRFICcuUFJPTU9USU9OU19UQUJMRS4nCiAgICAgICAgICAgICAgICAgIFNFVCBuYW1lID0gPywgdHlwZSA9ID8sIGRlc2NyaXB0aW9uID0gPywgaW1hZ2UgPSA/LCBzdGFydF9kYXRlID0gPywgZW5kX2RhdGUgPSA/LCBvZmZlcl90eXBlID0gPywgb2ZmZXJfZGF0YSA9ID8sIGV4dHJhID0gPwogICAgICAgICAgICAgICAgICBXSEVSRSBpZCA9ID8nOwogICAgICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJHRoaXMtPmdldF9uYW1lKCksICR0aGlzLT5nZXRfdHlwZSgpLCAkdGhpcy0+Z2V0X2Rlc2NyaXB0aW9uKCksICR0aGlzLT5nZXRfaW1hZ2UoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNnZV91dGlsczo6ZGJfdGltZSgkdGhpcy0+Z2V0X3N0YXJ0X2RhdGUoKSksIGNnZV91dGlsczo6ZGJfdGltZSgkdGhpcy0+Z2V0X2VuZF9kYXRlKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmdldF9vZmZlcl90eXBlKCksICR0aGlzLT5nZXRfb2ZmZXJfZGF0YSgpLCBzZXJpYWxpemUoJHRoaXMtPl9leHRyYSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0X2lkKCkpICk7CiAgICAgICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignU1FMIEVycm9yOiAnLiRkYi0+c3FsLicgLS0gJy4kZGItPkVycm9yTXNnKCkpOwoKICAgICAgICAvLyBpbnNlcnQgdGhlIGNvbmRpdGlvbnMKICAgICAgICBzZWxmOjpfZGVsX2NvbmRpdGlvbnMoKTsKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCAkdGhpcy0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAgICAgICAkY29uZCA9ICR0aGlzLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgICAgICAgaWYoICEkY29uZCApIGNvbnRpbnVlOwogICAgICAgICAgICBzZWxmOjpfaW5zZXJ0X2NvbmRpdGlvbigkY29uZCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldF9pZCgpOwogICAgfQoKCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9pbnNlcnQoKQogICAgewogICAgICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBNQVgoaXRlbV9vcmRlcikgRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBXSEVSRSB0eXBlID0gPyc7CiAgICAgICAgJGl0ZW1fb3JkZXIgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJHRoaXMtPmdldF90eXBlKCkpKTsKICAgICAgICBpZiggJGl0ZW1fb3JkZXIgPT0gJycgKSAkaXRlbV9vcmRlciA9IDA7CiAgICAgICAgJGl0ZW1fb3JkZXIrKzsKCiAgICAgICAgJG5vdyA9ICRkYi0+RGJUaW1lU3RhbXAodGltZSgpKTsKICAgICAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5QUk9NT1RJT05TX1RBQkxFLiIKICAgICAgICAgICAgICAgICAgKG5hbWUsdHlwZSxkZXNjcmlwdGlvbixpbWFnZSxjcmVhdGVkLHN0YXJ0X2RhdGUsZW5kX2RhdGUsb2ZmZXJfdHlwZSxvZmZlcl9kYXRhLGl0ZW1fb3JkZXIsZXh0cmEpCiAgICAgICAgICAgICAgICAgIFZBTFVFUyAoPyw/LD8sPywkbm93LD8sPyw/LD8sPyw/KSI7CiAgICAgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgkdGhpcy0+Z2V0X25hbWUoKSwgJHRoaXMtPmdldF90eXBlKCksICR0aGlzLT5nZXRfZGVzY3JpcHRpb24oKSwgJHRoaXMtPmdldF9pbWFnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dlX3V0aWxzOjpkYl90aW1lKCR0aGlzLT5nZXRfc3RhcnRfZGF0ZSgpKSwgY2dlX3V0aWxzOjpkYl90aW1lKCR0aGlzLT5nZXRfZW5kX2RhdGUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Z2V0X29mZmVyX3R5cGUoKSwgJHRoaXMtPmdldF9vZmZlcl9kYXRhKCksICRpdGVtX29yZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplKCR0aGlzLT5fZXh0cmEpKSk7CiAgICAgICAgaWYoICEkZGJyICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignU1FMIEVycm9yOiAnLiRkYi0+c3FsLicgLS0gJy4kZGItPkVycm9yTXNnKCkpOwogICAgICAgICR0aGlzLT5faWQgPSAkZGItPkluc2VydF9JRCgpOwoKICAgICAgICAvLyBpbnNlcnQgdGhlIGNvbmRpdGlvbnMKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCAkdGhpcy0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAgICAgICAkY29uZCA9ICR0aGlzLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgICAgICAgaWYoICEkY29uZCApIGNvbnRpbnVlOwogICAgICAgICAgICBzZWxmOjpfaW5zZXJ0X2NvbmRpdGlvbigkY29uZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+X2lkOwogICAgfQoKCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tfdmFsaWQoKQogICAgewogICAgICAgICRzdCA9IGNnZV91dGlsczo6dW5peF90aW1lKCR0aGlzLT5nZXRfc3RhcnRfZGF0ZSgpKTsKICAgICAgICAkZXQgPSBjZ2VfdXRpbHM6OnVuaXhfdGltZSgkdGhpcy0+Z2V0X2VuZF9kYXRlKCkpOwogICAgICAgICRjciA9IGNnZV91dGlsczo6dW5peF90aW1lKCR0aGlzLT5nZXRfY3JlYXRlZCgpKTsKCiAgICAgICAgaWYoICRzdCA8ICRjciApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggJGV0IDw9ICRzdCApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggZW1wdHkoJHRoaXMtPl9uYW1lKSApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggZW1wdHkoJHRoaXMtPl9vZmZlcl9kYXRhKSApIHJldHVybiBGQUxTRTsKCiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gJl9sb2FkX2Zyb21fZGF0YSgkZGF0YSkKICAgIHsKICAgICAgICAkcmVzID0gbnVsbDsKICAgICAgICBpZiggIWlzX2FycmF5KCRkYXRhKSB8fCBjb3VudCgkZGF0YSkgPT0gMCApIHJldHVybiAkcmVzOwogICAgICAgIGlmKCAhaXNzZXQoJGRhdGFbJ3Jhd19jb25kaXRpb25zJ10pICkgcmV0dXJuICRyZXM7CgogICAgICAgICRwcm9tbyA9IG5ldyBwcm9tb3Rpb24oKTsKICAgICAgICBmb3JlYWNoKCAkZGF0YSBhcyAka2V5ID0+ICR2YWx1ZSApIHsKICAgICAgICAgICAgaWYoICRrZXkgPT0gJ3Jhd19jb25kaXRpb25zJyApIGNvbnRpbnVlOwogICAgICAgICAgICAkbSA9ICdfJy4ka2V5OwogICAgICAgICAgICBpZiggJGtleSA9PSAnZXh0cmEnICkgJHZhbHVlID0gdW5zZXJpYWxpemUoJHZhbHVlKTsKICAgICAgICAgICAgJHByb21vLT4kbSA9ICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2goICRkYXRhWydyYXdfY29uZGl0aW9ucyddIGFzICRyb3cgKSB7CiAgICAgICAgICAgICRjb25kX29iID0gbmV3IHByb21vdGlvbl9jb25kaXRpb24oKTsKICAgICAgICAgICAgZm9yZWFjaCggJHJvdyBhcyAka2V5ID0+ICR2YWx1ZSApIHsKICAgICAgICAgICAgICAgICRmdW4gPSAnc2V0XycuJGtleTsKICAgICAgICAgICAgICAgICRjb25kX29iLT4kZnVuKCR2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHByb21vLT5hZGRfY29uZGl0aW9uKCRjb25kX29iKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRwcm9tbzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uICZsb2FkX2J5X2lkKCRpZCkKICAgIHsKICAgICAgICBpZiggKCRpZCA8PSAwKSB8fCAhaXNfbnVtZXJpYygkaWQpICkgdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignQ2Fubm90IGxvYWQgaW52YWxpZCBwcm9tb3Rpb24gaWQgJy4kaWQpOwoKICAgICAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIGlkID0gPyc7CiAgICAgICAgJHJvdyA9ICRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgoaW50KSRpZCkpOwogICAgICAgIGlmKCAhJHJvdyApIHRocm93IG5ldyBDbXNFeGNlcHRpb24oJ1Byb2JsZW0gbG9hZGluZyBwcm9tb3Rpb24gd2l0aCBpZCAnLiRpZCk7CgogICAgICAgIC8vIGxvYWQgY29uZGl0aW9ucy4KICAgICAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nIFdIRVJFIHByb21vdGlvbl9pZCA9ID8nOwogICAgICAgICRkYXRhID0gJGRiLT5HZXRBcnJheSgkcXVlcnksYXJyYXkoKGludCkkaWQpKTsKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkZGF0YSk7ICRpKysgKSB7CiAgICAgICAgICAgICR0bXAgPSBAdW5zZXJpYWxpemUoJGRhdGFbJGldWydkYXRhJ10pOwogICAgICAgICAgICBpZiggJHRtcCApICRkYXRhWyRpXVsnZGF0YSddID0gJHRtcDsKICAgICAgICB9CiAgICAgICAgJHJvd1sncmF3X2NvbmRpdGlvbnMnXSA9ICRkYXRhOwoKICAgICAgICByZXR1cm4gc2VsZjo6X2xvYWRfZnJvbV9kYXRhKCRyb3cpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZF9hbGxfYnlfdHlwZSgkdHlwZSwkb25seXZhbGlkID0gVFJVRSkKICAgIHsKICAgICAgICBzd2l0Y2goICR0eXBlICkgewogICAgICAgIGNhc2UgcHJvbW90aW9uOjpUWVBFX0lOU1RBTlQ6CiAgICAgICAgY2FzZSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICAgICAgIGlmKCBpc3NldChzZWxmOjokX3R5cGVfY2FjaGVbJHR5cGVdKSApIHJldHVybiBzZWxmOjokX3R5cGVfY2FjaGVbJHR5cGVdOwoKICAgICAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5QUk9NT1RJT05TX1RBQkxFLicgV0hFUkUgdHlwZSA9ID8nOwogICAgICAgICAgICBpZiggJG9ubHl2YWxpZCApIHsKICAgICAgICAgICAgICAgICRkYXRlID0gJGRiLT5EYlRpbWVTdGFtcCh0aW1lKCkpOwogICAgICAgICAgICAgICAgJHF1ZXJ5IC49ICIgQU5EIChzdGFydF9kYXRlIDw9ICRkYXRlKSBBTkQgKGVuZF9kYXRlID49ICRkYXRlKSI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHF1ZXJ5IC49ICcgT1JERVIgQlkgaXRlbV9vcmRlciBBU0MnOwogICAgICAgICAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdHlwZSkpOwogICAgICAgICAgICAkaWRzID0gYXJyYXkoKTsKICAgICAgICAgICAgd2hpbGUoICEkZGJyLT5FT0YgKSB7CiAgICAgICAgICAgICAgICAkcm93ID0gJGRici0+ZmllbGRzOwogICAgICAgICAgICAgICAgaWYoICFpbl9hcnJheSgkcm93WydpZCddLCRpZHMpICkgJGlkc1tdID0gKGludCkkcm93WydpZCddOwogICAgICAgICAgICAgICAgJGRici0+TW92ZU5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZGJyLT5Nb3ZlRmlyc3QoKTsKCiAgICAgICAgICAgICRkYnIyID0gbnVsbDsKICAgICAgICAgICAgaWYoIGlzX2FycmF5KCRpZHMpICYmIGNvdW50KCRpZHMpICkgewogICAgICAgICAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEUuJyBXSEVSRSBwcm9tb3Rpb25faWQgSU4gKCcuaW1wbG9kZSgnLCcsJGlkcykuJykgT1JERVIgQlkgcHJvbW90aW9uX2lkIEFTQyc7CiAgICAgICAgICAgICAgICAkZGJyMiA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG91dCA9IGFycmF5KCk7CiAgICAgICAgICAgIHdoaWxlKCAhJGRici0+RU9GICkgewogICAgICAgICAgICAgICAgJHJvdyA9ICRkYnItPmZpZWxkczsKICAgICAgICAgICAgICAgIGZvcmVhY2goICRkYnIyIGFzICRyb3cyICkgewogICAgICAgICAgICAgICAgICAgIGlmKCAkcm93MlsncHJvbW90aW9uX2lkJ10gPCAkcm93WydpZCddICkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgaWYoICRyb3cyWydwcm9tb3Rpb25faWQnXSA+ICRyb3dbJ2lkJ10gKSBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgJHRtcCA9IEB1bnNlcmlhbGl6ZSgkcm93MlsnZGF0YSddKTsKICAgICAgICAgICAgICAgICAgICBpZiggJHRtcCApICRyb3cyWydkYXRhJ10gPSAkdG1wOwoKICAgICAgICAgICAgICAgICAgICBpZiggIWlzc2V0KCRyb3dbJ3Jhd19jb25kaXRpb25zJ10pICkgJHJvd1sncmF3X2NvbmRpdGlvbnMnXSA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAgICAgJHJvd1sncmF3X2NvbmRpdGlvbnMnXVtdID0gJHJvdzI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkb3V0W10gPSBzZWxmOjpfbG9hZF9mcm9tX2RhdGEoJHJvdyk7CiAgICAgICAgICAgICAgICAkZGJyLT5Nb3ZlTmV4dCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiggIWlzX2FycmF5KHNlbGY6OiRfdHlwZV9jYWNoZSkgKSBzZWxmOjokX3R5cGVfY2FjaGUgPSBhcnJheSgpOwogICAgICAgICAgICBzZWxmOjokX3R5cGVfY2FjaGVbJHR5cGVdID0gJG91dDsKICAgICAgICAgICAgcmV0dXJuICRvdXQ7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ0ludmFsaWQgcHJvbW90aW9uIHR5cGUgJy4kdHlwZSk7CiAgICAgICAgfQogICAgfQoKfSAvLyBjbGFzcwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion_discount.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKZGVmaW5lKCdQUk9NT1RJT05TX0RJU0NPVU5UX1BST0RVQ1QnLCdQUk9NT1RJT05TX0RJU0NPVU5UX1BST0RVQ1QnKTsKZGVmaW5lKCdQUk9NT1RJT05TX0RJU0NPVU5UX0FNT1VOVCcsJ1BST01PVElPTlNfRElTQ09VTlRfUFJPRFVDVCcpOwoKY2xhc3MgcHJvbW90aW9uX2Rpc2NvdW50CnsKICBwcml2YXRlICRfdHlwZTsKICBwcml2YXRlICRfYW10OwogIHByaXZhdGUgJF9kZXNjOwogIHByaXZhdGUgJF9wcm9tb19pZDsKCiAgcHVibGljIGZ1bmN0aW9uIGdldF90eXBlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPl90eXBlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF90eXBlKCR0eXBlKQogIHsKICAgIGlmKCAkdHlwZSA9PSBQUk9NT1RJT05TX0RJU0NPVU5UX1BST0RVQ1QgfHwKCSR0eXBlID09IFBST01PVElPTlNfRElTQ09VTlRfQU1PVU5UICkKICAgICAgewoJJHRoaXMtPl90eXBlID0gJHR5cGU7CiAgICAgIH0KICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Ftb3VudCgpCiAgewogICAgcmV0dXJuICR0aGlzLV9hbXQ7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9hbW91bnQoJGFtb3VudCkKICB7CiAgICAkdGhpcy0+X2FtdCA9ICRhbW91bnQ7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGdldF9kZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZGVzYzsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2Rlc2NyaXB0aW9uKCRkZXNjcmlwdGlvbikKICB7CiAgICAkdGhpcy0+X2Rlc2MgPSAkZGVzY3JpcHRpb247CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGdldF9wcm9tb19pZCgpCiAgewogICAgcmV0dXJuICR0aGlzLT5fcHJvbW9faWQ7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9wcm9tb19pZCgkaWQpCiAgewogICAgJHRoaXMtPl9wcm9tb19pZCA9ICRpZDsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gaXNfdmFsaWQoKQogIHsKICAgIGlmKCBpc19udWxsKCR0aGlzLT5fdHlwZSkgfHwKCWlzX251bGwoJHRoaXMtPl9kZXNjKSB8fAoJaXNfbnVsbCgkdGhpcy0+X2FtdCkgfHwgKGZsb2F0dmFsKCR0aGlzLT5fYW10KSA8PSAwLjApIHx8Cglpc19udWxsKCR0aGlzLT5fcHJvbW9faWQpICkKICAgICAgewoJcmV0dXJuIEZBTFNFOwogICAgICB9CiAgICByZXR1cm4gVFJVRTsKICB9Cn0gLy8gY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.promotion_tester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLy8gdGhpcyBjbGFzcyB0ZXN0cyBhbGwgcHJvbW90aW9ucyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZSBhZ2FpbnN0IHRoZSBpdGVtLCBhbmQgdGhlIGNhcnQuCmNsYXNzIHByb21vdGlvbl90ZXN0ZXIgZXh0ZW5kcyBjZ19lY29tbV9wcm9tb3Rpb25fdGVzdGVyCnsKICBwcml2YXRlICRfY291cG9uczsKICBwcml2YXRlICRfZmV1X3VpZDsKCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICB7CiAgICAkc2VzcyA9IG5ldyBjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgJHRoaXMtPl9jb3Vwb25zID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwoKICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmV1X3VpZCgpCiAgewogICAgJHggPSBwYXJlbnQ6OmdldF9mZXVfdWlkKCk7CiAgICBpZiggJHggPiAwICkgcmV0dXJuICR4OwoKICAgICRmZXUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKTsKICAgIGlmKCAkZmV1ICkgewogICAgICAkeCA9ICRmZXUtPkxvZ2dlZEluSWQoKTsKICAgICAgaWYoICR4ID4gMCApICR0aGlzLT5zZXRfZmV1X3VpZCgkeCk7CiAgICB9CiAgICByZXR1cm4gJHg7CiAgfQoKICAvKioKICAgKiB0ZXN0cyBpZiBwcm9kdWN0IG1hdGNoZXMgYW55IHByb21vdGlvbnMgdGhhdCBtYXRjaCBzZXQgY3JpdGVyaWEuCiAgICogKHByb2R1Y3QgbXVzdCBiZSBzZXQpLiAgU3RvcHMgYWZ0ZXIgdGhlIGZpcnN0IG1hdGNoCiAgICoKICAgKiBAcmV0dXJuIGNnX2Vjb21tX3Byb21vdGlvbl9tYXRjaAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX21hdGNoKCkKICB7CiAgICAvLyBjb252ZXJ0cyBhIGNnX2Vjb21tdHlwZSB0byBhIHByb21vdGlvbiB0eXBlCiAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDsKICAgIHN3aXRjaCggJHRoaXMtPmdldF9wcm9tb190eXBlKCkgKSB7CiAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDsKICAgICAgYnJlYWs7CiAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBDc21JbnZhbGlkRGF0YUV4Y2VwdGlvbignVW5rbm93biBwcm9tb3Rpb24gdHlwZSBpbiAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgJG1hdGNoID0gbnVsbDsKICAgICRwcm9tb3MgPSBwcm9tb3Rpb246OmxvYWRfYWxsX2J5X3R5cGUoJHR5cGUpOwogICAgZm9yZWFjaCggJHByb21vcyBhcyAgJHByb21vICkgewogICAgICAkdGVzdGVyID0gbmV3IHByb21vX3Rlc3RlcigkcHJvbW8pOwogICAgICBpZiggJHRoaXMtPmdldF9za3UoKSApICR0ZXN0ZXItPnNldF9za3UoJHRoaXMtPmdldF9za3UoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9pZ25vcmVfZGlzY291bnRlZCgkdGhpcy0+Z2V0X2lnbm9yZV9kaXNjb3VudGVkKCkpOwogICAgICAkdGVzdGVyLT5zZXRfcHJvZHVjdCgkdGhpcy0+Z2V0X3Byb2R1Y3QoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9xdWFudGl0eSgkdGhpcy0+Z2V0X3F1YW50aXR5KCkpOwogICAgICAkdGVzdGVyLT5zZXRfY2FydCgkdGhpcy0+Z2V0X2NhcnQoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9jb3Vwb25zKCR0aGlzLT5fY291cG9ucyk7CiAgICAgIGlmKCAkdGVzdGVyLT5maW5kX21hdGNoKCkgKSB7CgkvLyB0aGlzIHByb21vdGlvbiBtYXRjaGVzLgoJLy8gbmVlZCB0byBwYXJzZSB0aGUgb2ZmZXIuCgkkbWF0Y2ggPSBuZXcgY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoOwoJaWYoICR0eXBlID09IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UICkgewoJICBzd2l0Y2goICRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKSApIHsKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKCSAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUEVSQ0VOVCk7CgkgICAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICAgJGFtdCA9ICR0aGlzLT5nZXRfcHJpY2UoKSAqICRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSAqIC0xOwoJICAgICRtYXRjaC0+c2V0X2Rpc2NvdW50X2FtdCgkYW10KTsKCSAgICBicmVhazsKCgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EQU1PVU5UOgoJICAgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9ESVNDT1VOVCk7CgkgICAgJG1hdGNoLT5zZXRfZGlzY291bnRfYW10KCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICAgYnJlYWs7CgoJICBjYXNlIFBST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1Q6CgkgICAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAgIGJyZWFrOwoKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CgkgICAgLy8gYSBmcmVlIHByb2R1Y3QKCSAgICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUFJPRFVDVElEKTsKCSAgICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgICBicmVhazsKCgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVOgoJICAgIC8vIGEgZnJlZSBwcm9kdWN0CgkgICAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BST0RVQ1RTS1UpOwoJICAgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAgIGJyZWFrOwoKCSAgZGVmYXVsdDoKCSAgICB0aHJvdyBuZXcgQ21zSW52YWxpZERhdGFFeGNlcHRpb24oJ29mZmVyIG9mIHR5cGUgJy4kcHJvbW8tPmdldF9vZmZlcl90eXBlKCkuJyBpcyBpbnZhbGlkIGZvciBwcm9tb3Rpb24gb2YgdHlwZSAnLiR0eXBlKTsKCSAgfQoJfQoJZWxzZSB7CgkgIHN3aXRjaCggJHByb21vdGlvbi0+Z2V0X29mZmVyX3R5cGUoKSApIHsKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNURElTQ09VTlQ6CgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgoJICBjYXNlIFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQ6CgkgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9TQU1FUFJPRFVDVDoKCSAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1U6CgkgICAgZGllKCdpbmNvbXBsZXRlIC0tICcuX19GSUxFX18uJyAtLSAnLl9fTElORV9fKTsKCSAgICBicmVhazsKCgkgIGRlZmF1bHQ6CgkgICAgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCdvZmZlciBvZiB0eXBlICcuJHByb21vdGlvbi0+Z2V0X29mZmVyX3R5cGUoKS4nIGlzIGludmFsaWQgZm9yIHByb21vdGlvbiBvZiB0eXBlICcuJHR5cGUpOwoJICB9Cgl9CgoJcmV0dXJuICRtYXRjaDsKICAgICAgfQogICAgfQogIH0gLy8gZmluZCBtYXRjaAoKICAvKioKICAgKiBGaW5kIHRoZSBmaXJzdCBwcm9tb3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBpdGVtcyBpbiB0aGUgY2FydAogICAqCiAgICogQHJldHVybiBjZ19lY29tbV9wcm9tb3Rpb25fbWF0Y2gKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZmluZF9jYXJ0X21hdGNoKCkKICB7CiAgICAvLyBjb252ZXJ0cyBhIGNnX2Vjb21tdHlwZSB0byBhIHByb21vdGlvbiB0eXBlCiAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDsKICAgIHN3aXRjaCggJHRoaXMtPmdldF9wcm9tb190eXBlKCkgKSB7CiAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDsKICAgICAgYnJlYWs7CiAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBDc21JbnZhbGlkRGF0YUV4Y2VwdGlvbignVW5rbm93biBwcm9tb3Rpb24gdHlwZSBpbiAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgJHByb21vcyA9IHByb21vdGlvbjo6bG9hZF9hbGxfYnlfdHlwZSgkdHlwZSk7CiAgICAkbWF0Y2ggPSBudWxsOwogICAgZm9yZWFjaCggJHByb21vcyBhcyAgJHByb21vICkgewogICAgICAkdGVzdGVyID0gbmV3IHByb21vX3Rlc3RlcigkcHJvbW8pOwogICAgICAkdGVzdGVyLT5zZXRfY2FydCgkdGhpcy0+Z2V0X2NhcnQoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9jb3Vwb25zKCR0aGlzLT5fY291cG9ucyk7CiAgICAgICR0ZXN0ZXItPnNldF9pZ25vcmVfZGlzY291bnRlZCgkdGhpcy0+Z2V0X2lnbm9yZV9kaXNjb3VudGVkKCkpOwoKICAgICAgJG1hdGNoX2lkeCA9IC0xOwogICAgICBpZiggJHRlc3Rlci0+ZmluZF9jYXJ0X21hdGNoKCRtYXRjaF9pZHgpICkgewoJLy8gc28gZmFyLCBzbyBnb29kLi4uIG9mZmVyIG1hdGNoZXMgdGhpcyBpdGVtLi4uIGFuZCBtYXliZSBldmVuIHRoZSBjYXJ0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuCgkkbWF0Y2ggPSBuZXcgY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoOwoJc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKSB7CgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BST0RVQ1RJRCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAkbWF0Y2gtPnNldF9jYXJ0X2lkeCgkbWF0Y2hfaWR4KTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1U6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUEVSQ0VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UOgoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgICRhbXQgPSAkdGhpcy0+Z2V0X3ByaWNlKCkgKiAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMTsKCSAgJG1hdGNoLT5zZXRfZGlzY291bnRfYW10KCRhbXQpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX0RJU0NPVU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X2Rpc2NvdW50X2FtdCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAkbWF0Y2gtPnNldF9jYXJ0X2lkeCgkbWF0Y2hfaWR4KTsKCSAgYnJlYWs7CgkgIAoJZGVmYXVsdDoKCSAgZGllKCdpZ25vcmVkJyk7CgkgIC8vIGFuIGludmFsaWQgb2ZmZXIgdHlwZSBpcyBqdXN0IGlnbm9yZWQuCgkgIGJyZWFrOwoJfQoKCXJldHVybiAkbWF0Y2g7CiAgICAgIH0KICAgIH0KICB9CgogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX2FsbF9jYXJ0X21hdGNoZXMoKQogIHsKICAgIC8vIGNvbnZlcnRzIGEgY2dfZWNvbW10eXBlIHRvIGEgcHJvbW90aW9uIHR5cGUKICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgc3dpdGNoKCAkdGhpcy0+Z2V0X3Byb21vX3R5cGUoKSApIHsKICAgIGNhc2Ugc2VsZjo6VFlQRV9JTlNUQU5UOgogICAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9JTlNUQU5UOwogICAgICBicmVhazsKICAgIGNhc2Ugc2VsZjo6VFlQRV9DSEVDS09VVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQ7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdGhyb3cgbmV3IENzbUludmFsaWREYXRhRXhjZXB0aW9uKCdVbmtub3duIHByb21vdGlvbiB0eXBlIGluICcuX19DTEFTU19fKTsKICAgIH0KCiAgICAkcHJvbW9zID0gcHJvbW90aW9uOjpsb2FkX2FsbF9ieV90eXBlKCR0eXBlKTsKICAgICRtYXRjaCA9IG51bGw7CiAgICAkbWF0Y2hlcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkcHJvbW9zIGFzICAkcHJvbW8gKSB7CiAgICAgICR0ZXN0ZXIgPSBuZXcgcHJvbW9fdGVzdGVyKCRwcm9tbyk7CiAgICAgICR0ZXN0ZXItPnNldF9jYXJ0KCR0aGlzLT5nZXRfY2FydCgpKTsKICAgICAgJHRlc3Rlci0+c2V0X2NvdXBvbnMoJHRoaXMtPl9jb3Vwb25zKTsKICAgICAgJHRlc3Rlci0+c2V0X2lnbm9yZV9kaXNjb3VudGVkKCR0aGlzLT5nZXRfaWdub3JlX2Rpc2NvdW50ZWQoKSk7CgogICAgICAkbWF0Y2hfaWR4ID0gLTE7CiAgICAgIGlmKCAkdGVzdGVyLT5maW5kX2NhcnRfbWF0Y2goJG1hdGNoX2lkeCkgKSB7CgkvLyBzbyBmYXIsIHNvIGdvb2QuLi4gb2ZmZXIgbWF0Y2hlcyB0aGlzIGl0ZW0uLi4gYW5kIG1heWJlIGV2ZW4gdGhlIGNhcnQgbWF0Y2hlcyB0aGUgY29uZGl0aW9ucy4KCSRtYXRjaCA9IG5ldyBjZ19lY29tbV9wcm9tb3Rpb25fbWF0Y2g7Cglzd2l0Y2goICRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKSApIHsKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUOgoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUFJPRFVDVElEKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAvLyBjYW5ub3QgYmUgY3VtdWxhdGl2ZSAoaXRzIGEgbmV3IGxpbmUgaXRlbSkKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1RTS1U6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAvLyBjYW5ub3QgYmUgY3VtdWxhdGl2ZSAoaXRzIGEgbmV3IGxpbmUgaXRlbSkKCSAgYnJlYWs7CgoJY2FzZSBQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQ6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QRVJDRU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2N1bXVsYXRpdmUoJHByb21vLT5nZXRfZXh0cmEoJ2FsbG93X2N1bXVsYXRpdmUnKSk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX0RJU0NPVU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2N1bXVsYXRpdmUoJHByb21vLT5nZXRfZXh0cmEoJ2FsbG93X2N1bXVsYXRpdmUnKSk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9ERElTQ09VTlQ6CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QRVJDRU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAkbWF0Y2gtPnNldF9jdW11bGF0aXZlKCRwcm9tby0+Z2V0X2V4dHJhKCdhbGxvd19jdW11bGF0aXZlJykpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVDoKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX0RJU0NPVU5UKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAkbWF0Y2gtPnNldF9jdW11bGF0aXZlKCRwcm9tby0+Z2V0X2V4dHJhKCdhbGxvd19jdW11bGF0aXZlJykpOwoJICBicmVhazsKCSAgCglkZWZhdWx0OgoJICB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdJbnZhbGlkIG9mZmVyIHR5cGUgYXQgdGhpcyBzdGFnZTogJy4kcHJvbW8tPmdldF9vZmZlcl90eXBlKCkpOwoJICBkaWUoJ2lnbm9yZWQnKTsKCSAgLy8gYW4gaW52YWxpZCBvZmZlciB0eXBlIGlzIGp1c3QgaWdub3JlZC4KCSAgYnJlYWs7Cgl9CgoJJG1hdGNoZXNbXSA9ICRtYXRjaDsKICAgICAgfQogICAgfQogICAgaWYoIGNvdW50KCRtYXRjaGVzKSApIHJldHVybiAkbWF0Y2hlczsKICB9CgogIC8qKgogICAqIHRlc3QgaWYgdGhlIHByb2R1Y3QgKG9yIHNrdSkgbWF0Y2hlcyB0aGUgb2ZmZXIgcGFydAogICAqIG9mIGEgcHJvbW90aW9uLCBhbmQgaWYgdGhlIGNhcnQgY29udGVudHMgbWF0Y2ggdGhlIGNvbmRpdGlvbnMKICAgKiBvZiB0aGUgb2ZmZXIuICBTdG9wcyBhZnRlciB0aGUgZmlyc3QgbWF0Y2guCiAgICoKICAgKiBAcmV0dXJuIGNnX2Vjb21tX3Byb21vdGlvbl9tYXRjaAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX29mZmVyX21hdGNoKCkKICB7CiAgICAvLyBjb252ZXJ0cyBhIGNnX2Vjb21tdHlwZSB0byBhIHByb21vdGlvbiB0eXBlCiAgICAkdHlwZSA9IHByb21vdGlvbjo6VFlQRV9DSEVDS09VVDsKICAgIHN3aXRjaCggJHRoaXMtPmdldF9wcm9tb190eXBlKCkgKSB7CiAgICBjYXNlIHNlbGY6OlRZUEVfSU5TVEFOVDoKICAgICAgJHR5cGUgPSBwcm9tb3Rpb246OlRZUEVfSU5TVEFOVDsKICAgICAgYnJlYWs7CiAgICBjYXNlIHNlbGY6OlRZUEVfQ0hFQ0tPVVQ6CiAgICAgICR0eXBlID0gcHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBDc21JbnZhbGlkRGF0YUV4Y2VwdGlvbignVW5rbm93biBwcm9tb3Rpb24gdHlwZSBpbiAnLl9fQ0xBU1NfXyk7CiAgICB9CgogICAgJHByb21vcyA9IHByb21vdGlvbjo6bG9hZF9hbGxfYnlfdHlwZSgkdHlwZSk7CiAgICAkbWF0Y2ggPSBudWxsOwogICAgZm9yZWFjaCggJHByb21vcyBhcyAgJHByb21vICkgewogICAgICAvLyB0aGUgcHJvbW8gdGVzdGVyIHRlc3RzIGEgc2luZ2xlIHByb21vdGlvbiBhZ2FpbnN0IHRoZSBpdGVtIGJlaW5nIHRlc3RlZC4KICAgICAgJHRlc3RlciA9IG5ldyBwcm9tb190ZXN0ZXIoJHByb21vKTsKICAgICAgaWYoICR0aGlzLT5nZXRfc2t1KCkgKSAkdGVzdGVyLT5zZXRfc2t1KCR0aGlzLT5nZXRfc2t1KCkpOwogICAgICAkdGVzdGVyLT5zZXRfaWdub3JlX2Rpc2NvdW50ZWQoJHRoaXMtPmdldF9pZ25vcmVfZGlzY291bnRlZCgpKTsKICAgICAgJHRlc3Rlci0+c2V0X3Byb2R1Y3QoJHRoaXMtPmdldF9wcm9kdWN0KCkpOwogICAgICAkdGVzdGVyLT5zZXRfY2FydCgkdGhpcy0+Z2V0X2NhcnQoKSk7CiAgICAgICR0ZXN0ZXItPnNldF9jb3Vwb25zKCR0aGlzLT5fY291cG9ucyk7CiAgICAgICRtYXRjaF9pZHggPSAtMTsKICAgICAgaWYoICR0ZXN0ZXItPmZpbmRfb2ZmZXJfbWF0Y2goKSAmJiAoJHRoaXMtPmdldF9za2lwX2NhcnQoKSB8fCAkdGVzdGVyLT5maW5kX2NhcnRfbWF0Y2goJG1hdGNoX2lkeCkpICkgewoJLy8gc28gZmFyLCBzbyBnb29kLi4uIG9mZmVyIG1hdGNoZXMgdGhpcyBpdGVtLi4uIGFuZCBtYXliZSBldmVuIHRoZSBjYXJ0IG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuCgkkbWF0Y2ggPSBuZXcgY2dfZWNvbW1fcHJvbW90aW9uX21hdGNoOwoJc3dpdGNoKCAkcHJvbW8tPmdldF9vZmZlcl90eXBlKCkgKSB7CgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKCSAgLy8gZnJlZSBwcm9kdWN0IGJ5IGlkCgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUSUQpOwoJICAkbWF0Y2gtPnNldF92YWwoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfcHJvbW8oJHByb21vLT5nZXRfaWQoKSk7CgkgICRtYXRjaC0+c2V0X25hbWUoJHByb21vLT5nZXRfbmFtZSgpKTsKCSAgJG1hdGNoLT5zZXRfY2FydF9pZHgoJG1hdGNoX2lkeCk7CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QUk9EVUNUU0tVOgoJICAvLyBmcmVlIHByb2R1Y3QgYnkgc2t1CgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9QUk9EVUNUU0tVKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPREFNT1VOVDoKCSAgLy8gZGlzY291bnQgYXBwbGljYWJsZSBwcm9kdWN0IGJ5IGZpeGVkIGFtb3VudAoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfRElTQ09VTlQpOwoJICAkbWF0Y2gtPnNldF9kaXNjb3VudF9hbXQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgoJICAvLyBkaXNjb3VudCBtYXRjaGluZyBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2UKCSAgJG1hdGNoLT5zZXRfdHlwZSgkbWF0Y2g6Ok9GRkVSX1BFUkNFTlQpOwoJICAkbWF0Y2gtPnNldF9kaXNjb3VudF9hbXQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKCSAgJG1hdGNoLT5zZXRfdmFsKCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSk7CgkgICRtYXRjaC0+c2V0X3Byb21vKCRwcm9tby0+Z2V0X2lkKCkpOwoJICAkbWF0Y2gtPnNldF9uYW1lKCRwcm9tby0+Z2V0X25hbWUoKSk7CgkgICRtYXRjaC0+c2V0X2NhcnRfaWR4KCRtYXRjaF9pZHgpOwoJICAvLyBub3RlLCBubyBjYXJ0IGluZGV4CgkgIGJyZWFrOwoKCWNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgoJICAvLyBwZXJjZW50YWdlIG9mZiBvcmRlciB0b3RhbAoJICAkbWF0Y2gtPnNldF90eXBlKCRtYXRjaDo6T0ZGRVJfUEVSQ0VOVCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAvLyBubyBjYXJ0IGluZGV4LgoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfRElTQ09VTlQ6CgkgIC8vIHN1YnRyYWN0IGFtb3VudCBmcm9tIG9yZGVyIHRvdGFsCgkgICRtYXRjaC0+c2V0X3R5cGUoJG1hdGNoOjpPRkZFUl9ESVNDT1VOVCk7CgkgICRtYXRjaC0+c2V0X3ZhbCgkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkpOwoJICAkbWF0Y2gtPnNldF9wcm9tbygkcHJvbW8tPmdldF9pZCgpKTsKCSAgJG1hdGNoLT5zZXRfbmFtZSgkcHJvbW8tPmdldF9uYW1lKCkpOwoJICAvLyBubyBjYXJ0IGluZGV4LgoJICBicmVhazsKCgljYXNlIFBST01PVElPTlNfT0ZGRVJfU0FNRVBST0RVQ1Q6CgkgIGRpZSgnbm90IGRvbmUnKTsKCSAgYnJlYWs7CgoJZGVmYXVsdDoKCSAgLy8gYW4gaW52YWxpZCBvZmZlciB0eXBlIGlzIGp1c3QgaWdub3JlZC4KCSAgYnJlYWs7Cgl9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJG1hdGNoOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_ops.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgY3JlYXRpbmcsIGludGVyZmFjaW5nIHdpdGgKIyAgYW5kIG1hbmFnaW5nIHByb21vdGlvbnMgb3Igc2FsZXMgaW4gdGhlIEUtY29tZW1yY2Ugc3VpdGUuCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdHMgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4KIyBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgpjbGFzcyBwcm9tb19vcHMKewogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gJl9nZXRfZGIoKQogICAgewogICAgICAgICRnQ21zID0gY21zbXMoKTsKICAgICAgICAkZGIgPSYgJGdDbXMtPkdldERiKCk7CiAgICAgICAgcmV0dXJuICRkYjsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiAmX2dldF9wcm9kdWN0c19tb2QoKQogICAgewogICAgICAgIHJldHVybiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1Byb2R1Y3RzJyk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gJl9nZXRfcHJvZHVjdCgkcHJvZHVjdF9pZCkKICAgIHsKICAgICAgICAkcHJvZCA9IGNnX2Vjb21tOjpnZXRfcHJvZHVjdF9pbmZvKCdQcm9kdWN0cycsJHByb2R1Y3RfaWQpOwogICAgICAgIHJldHVybiAkcHJvZDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uICZsb2FkX3Byb21vX2J5X2lkKCRpZCkKICAgIHsKICAgICAgICByZXR1cm4gcHJvbW90aW9uOjpsb2FkX2J5X2lkKCRpZCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc192YWxpZF9jb3Vwb24oJGNvZGUpCiAgICB7CiAgICAgICAgJGRiID0gc2VsZjo6X2dldF9kYigpOwogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgQS5pZCBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIEEKICAgICAgICAgICAgICAgIExFRlQgSk9JTiAnLlBST01PVElPTlNfQ09ORF9UQUJMRS4nIEIKICAgICAgICAgICAgICAgICAgT04gQS5pZCA9IEIucHJvbW90aW9uX2lkCiAgICAgICAgICAgICAgIFdIRVJFIE5PVygpIEJFVFdFRU4gQS5zdGFydF9kYXRlIEFORCBBLmVuZF9kYXRlCiAgICAgICAgICAgICAgICAgQU5EIEIuY29uZF90eXBlID0gPwogICAgICAgICAgICAgICAgIEFORCBCLmRhdGEgPSA/JzsKICAgICAgICAkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KFBST01PVElPTlNfQ09ORF9DT1VQT04sJGNvZGUpKTsKICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KCgogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBjaGVja191bnVzZWRfY291cG9uKCRuYW1lLCRhbGxvd19wcm9tbyA9ICcnKQogICAgewogICAgICAgICRkYiA9IHNlbGY6Ol9nZXRfZGIoKTsKICAgICAgICAkd2hlcmUgPSBhcnJheSgpOwogICAgICAgICRwYXJtcyA9IGFycmF5KCk7CgogICAgICAgICR3aGVyZVtdID0gJ2NvbmRfdHlwZSA9ID8nOwogICAgICAgICRwYXJtc1tdID0gUFJPTU9USU9OU19DT05EX0NPVVBPTjsKICAgICAgICAkd2hlcmVbXSA9ICdkYXRhID0gPyc7CiAgICAgICAgJHBhcm1zW10gPSAkbmFtZTsKICAgICAgICBpZiggJGFsbG93X3Byb21vICkgewogICAgICAgICAgICAkd2hlcmVbXSA9ICdwcm9tb3Rpb25faWQgIT0gPyc7CiAgICAgICAgICAgICRwYXJtc1tdID0gJGFsbG93X3Byb21vOwogICAgICAgIH0KICAgICAgICAkcXVlcnkgPSAnU0VMRUNUIGlkIEZST00gJy5QUk9NT1RJT05TX0NPTkRfVEFCTEU7CiAgICAgICAgJHF1ZXJ5IC49ICcgV0hFUkUgJy5pbXBsb2RlKCcgQU5EICcsJHdoZXJlKTsKICAgICAgICAkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LCRwYXJtcyk7CiAgICAgICAgaWYoICR0bXAgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgoKICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gY2hlY2tfdW51c2VkX25hbWUoJG5hbWUsJGlkPScnKQogICAgewogICAgICAgICRnQ21zID0gY21zbXMoKTsKICAgICAgICAkZGIgPSAkZ0Ntcy0+R2V0RGIoKTsKCiAgICAgICAgaWYoIGVtcHR5KCRpZCkgKSB7CiAgICAgICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgaWQgRlJPTSAnLlBST01PVElPTlNfVEFCTEUuJyBXSEVSRSBuYW1lID0gPyc7CiAgICAgICAgICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJG5hbWUpKTsKICAgICAgICAgICAgaWYoICR0bXAgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgIH0KCiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIFdIRVJFIG5hbWUgPSA/IEFORCBpZCAhPSA/JzsKICAgICAgICAkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCRuYW1lLCRpZCkpOwogICAgICAgIGlmKCAkdG1wICkgcmV0dXJuIEZBTFNFOwogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGNfdG90YWxfZGlzY291bnQoJGNhcnRfaXRlbXMpCiAgICB7CiAgICAgICAgJGRpc2NvdW50ID0gMDsKICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY2FydF9pdGVtcyk7ICRpKysgKSB7CiAgICAgICAgICAgICRkaXNjb3VudCArPSAkY2FydF9pdGVtc1skaV0tPmdldF9kaXNjb3VudCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGRpc2NvdW50OwogICAgfQoKCiAgICAvKioKICAgICAqIEdpdmVuIGEgcHJvZHVjdCBpZCBhbmQgYW4gYXBwbGljYWJsZSAoYWxyZWFkeSB0ZXN0ZWQpIHByb21vdGlvbgogICAgICogY2FsY3VsYXRlIHRoZSBkaXNjb3VudCAoaWYgYW55KSBmb3IgdGhpcyBwcm9kdWN0CiAgICAgKgogICAgICogQHBhcmFtIHRoZSBwcm9tb3Rpb24gb2JqZWN0CiAgICAgKiBAcGFyYW0gdGhlIHByb2R1Y3QgaWQKICAgICAqIEByZXR1cm5zIEZBTFNFIG9uIGZhaWx1cmUsIG9yIGEgaGFzaCBjb250YWluaW5nIHRoZSBkaWZmZXJlbnQKICAgICAqICBkaXNjb3VudCBhdHRyaWJ1dGVzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhbGN1bGF0ZV9wcm9kdWN0X2Rpc2NvdW50KCYkcHJvbW8sJHByb2R1Y3RfaWQpCiAgICB7CiAgICAgICAgJHByb2R1Y3QgPSBzZWxmOjpfZ2V0X3Byb2R1Y3QoJHByb2R1Y3RfaWQpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJHByb2R1Y3QpICkgcmV0dXJuIEZBTFNFOwoKICAgICAgICAkcGVyY2VudCA9ICcnOwogICAgICAgICRkaXNjb3VudCA9ICcnOwogICAgICAgICRmcmVlX3Byb2R1Y3QgPSAnJzsKICAgICAgICBzd2l0Y2goICRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKSApIHsKICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKICAgICAgICAgICAgLy8gd2UgZ2V0IGEgZnJlZSBwcm9kdWN0LgogICAgICAgICAgICAkZnJlZV9wcm9kdWN0ID0gJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQ6CiAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSBOICUgb2ZmCiAgICAgICAgICAgICRwZXJjZW50ID0gJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogLTEuMDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKICAgICAgICAgICAgLy8gY2FsY3VsYXRlICROIG9mZgogICAgICAgICAgICAkZGlzY291bnQgPSAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMS4wOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RESVNDT1VOVDoKICAgICAgICAgICAgJHBlcmNlbnQgPSAkcHJvbW8tPmdldF9vZmZlcl9kYXRhKCkgKiAtMS4wOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmKCBlbXB0eSgkcGVyY2VudCkgKSB7CiAgICAgICAgICAgICRwZXJjZW50ID0gJGRpc2NvdW50IC8gJHByb2R1Y3QtPmdldF9wcmljZSgpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKCBlbXB0eSgkZGlzY291bnQpICkgewogICAgICAgICAgICAkZGlzY291bnQgPSAkcHJvZHVjdC0+Z2V0X3ByaWNlKCkgKiAkcGVyY2VudDsKICAgICAgICB9CgogICAgICAgICRyZXMgPSBhcnJheSgncHJvZHVjdF9pZCc9PiRmcmVlX3Byb2R1Y3QpOwogICAgICAgICRyZXNbJ3BlcmNlbnRhZ2UnXSA9ICRwZXJjZW50OwogICAgICAgICRyZXNbJ2Rpc2NvdW50J10gPSAkZGlzY291bnQ7CiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FsY3VsYXRlX2Rpc2NvdW50KCYkcHJvbW8sJHN1YnRvdGFsLCRjYXJ0X2l0ZW1zKQogICAgewogICAgICAgICRuZXdfaXRlbXMgPSBhcnJheSgpOwogICAgICAgIHN3aXRjaCggJHByb21vLT5nZXRfb2ZmZXJfdHlwZSgpICkgewogICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UOgogICAgICAgICAgICAvLyBjYWxjdWxhdGUgTiAlIG9mZiBlYWNoIGl0ZW0uLi4gYW4gZmlsbCBpbiB0aGUgZGlzY291bnQgZmllbGQuCiAgICAgICAgICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjYXJ0X2l0ZW1zKTsgJGkrKyApIHsKICAgICAgICAgICAgICAgICRpdGVtID0gJGNhcnRfaXRlbXNbJGldOwogICAgICAgICAgICAgICAgJGl0ZW0tPnNldF9kaXNjb3VudCgkaXRlbS0+Z2V0X3VuaXRfcHJpY2UoKSAqICRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSAqIC0xLjApOwogICAgICAgICAgICAgICAgJG5ld19pdGVtc1tdID0gJGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgUFJPTU9USU9OU19PRkZFUl9ESVNDT1VOVDoKICAgICAgICAgICAgLy8gY2FsY3VsYXRlICROIG9mZgogICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY2FydF9pdGVtcyk7ICRpKysgKSB7CiAgICAgICAgICAgICAgICAkaXRlbSA9IGNsb25lKCRjYXJ0X2l0ZW1zWyRpXSk7CiAgICAgICAgICAgICAgICAkbmV3X2l0ZW1zW10gPSAkaXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaXRlbSA9IG5ldyBsaW5lX2l0ZW0oKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9zb3VyY2UoJ1Byb2R1Y3RzJyk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfZGVzY3JpcHRpb24oJHByb21vLT5nZXRfbmFtZSgpKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9pdGVtX3R5cGUobGluZV9pdGVtOjpJVEVNVFlQRV9ESVNDT1VOVCk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfcXVhbnRpdHkoMSk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfZGlzY291bnQoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpICogLTEuMCk7CiAgICAgICAgICAgICRuZXdfaXRlbXNbXSA9ICRpdGVtOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBQUk9NT1RJT05TX09GRkVSX1BST0RVQ1Q6CiAgICAgICAgICAgIC8vIG9mZmVyIGEgZnJlZSBwcm9kdWN0LgogICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY2FydF9pdGVtcyk7ICRpKysgKSB7CiAgICAgICAgICAgICAgICAkaXRlbSA9IGNsb25lKCRjYXJ0X2l0ZW1zWyRpXSk7CiAgICAgICAgICAgICAgICAkbmV3X2l0ZW1zW10gPSAkaXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaXRlbSA9IG5ldyBsaW5lX2l0ZW0oKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9zb3VyY2UoJ1Byb2R1Y3RzJyk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfZGVzY3JpcHRpb24oJHByb21vLT5nZXRfbmFtZSgpKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9pdGVtX3R5cGUobGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9zdGF0dXMoSVRFTVNUQVRVU19OT1RTSElQUEVEKTsKICAgICAgICAgICAgJGl0ZW0tPnNldF9xdWFudGl0eSgxKTsKICAgICAgICAgICAgJHByb2R1Y3QgPSBzZWxmOjpfZ2V0X3Byb2R1Y3QoJHByb21vLT5nZXRfb2ZmZXJfZGF0YSgpKTsKICAgICAgICAgICAgaWYoICEkcHJvZHVjdCApIHJldHVybiBGQUxTRTsKICAgICAgICAgICAgJGl0ZW0tPnNldF91bml0X3ByaWNlKCRwcm9kdWN0LT5nZXRfcHJpY2UoKSk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfZGlzY291bnQoJHByb2R1Y3QtPmdldF9wcmljZSgpICogLTEuMCk7CiAgICAgICAgICAgICRpdGVtLT5zZXRfd2VpZ2h0KCRwcm9kdWN0LT5nZXRfd2VpZ2h0KCkpOwogICAgICAgICAgICAkaXRlbS0+c2V0X3NrdSgkcHJvZHVjdC0+Z2V0X3NrdSgpKTsKICAgICAgICAgICAgJG5ld19pdGVtc1tdID0gJGl0ZW07CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRERJU0NPVU5UOgogICAgICAgICAgICAvLyBkaXNjb3VudCB0aGUgYXBwbGljYWJsZSBwcm9kdWN0cyBieSBhIHBlcmNlbnRhZ2UKICAgICAgICAgICAgJHByb2R1Y3RzID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICAgICAgICAgICAkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgICAgICAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRElEOgogICAgICAgICAgICAgICAgICAgICRwcm9kdWN0cyA9IGV4cGxvZGUoJywnLCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CiAgICAgICAgICAgICAgICAgICAgJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tSGllcmFyY2h5KCRjb25kaXRpb24tPmdldF9kYXRhKCksJy4nKTsKICAgICAgICAgICAgICAgICAgICAkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CiAgICAgICAgICAgICAgICAgICAgJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tQ2F0ZWdvcmllcygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGZvdW5kIG1hdGNoaW5nIHByb2R1Y3RzPwogICAgICAgICAgICBpZiggISRwcm9kdWN0cyApIGJyZWFrOwoKICAgICAgICAgICAgLy8gd2UgZGlkLi4uIHNvIHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nIHdpdGggZWFjaCBwcm9kdWN0Li4KICAgICAgICAgICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNhcnRfaXRlbXMpOyAkaSsrICkgewogICAgICAgICAgICAgICAgJGl0ZW0gPSBjbG9uZSgkY2FydF9pdGVtc1skaV0pOwogICAgICAgICAgICAgICAgaWYoICRpdGVtLT5nZXRfaXRlbV90eXBlKCkgPT0gbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUICYmCiAgICAgICAgICAgICAgICAgICAgaW5fYXJyYXkoJGl0ZW0tPmdldF9pdGVtX2lkKCksJHByb2R1Y3RzKSApIHsKICAgICAgICAgICAgICAgICAgICAkaXRlbS0+c2V0X2Rpc2NvdW50KCRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKSAqICRpdGVtLT5nZXRfdW5pdF9wcmljZSgpICogLTEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJG5ld19pdGVtc1tdID0gJGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5ld19pdGVtczsKICAgIH0KfSAvLyBjbGFzcwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_tester.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKLyoqCiAqIFRoaXMgY2xhc3MgaXMgYW4gYXNzaXN0YW50IHRvIHRoZSBwcm9tb3Rpb25fdGVzdGVyIGNsYXNzLgogKiBUaGlzIGNsYXNzIG9wZXJhdGVzIG9uIHNpbmdsZSBwcm9tb3Rpb25zLgogKi8KY2xhc3MgcHJvbW9fdGVzdGVyCnsKICBwcml2YXRlICRfcDsKICBwcml2YXRlICRfc2t1OwogIHByaXZhdGUgJF9wcm9kdWN0OwogIHByaXZhdGUgJF9xdWFudGl0eTsKICBwcml2YXRlICRfY2FydDsKICBwcml2YXRlICRfYXV0b19mZXUgPSBUUlVFOwogIHByaXZhdGUgJF9mZXVfdWlkID0gbnVsbDsKICBwcml2YXRlICRfY291cG9ucyA9IG51bGw7CiAgcHJpdmF0ZSAkX2lnbm9yZV9kaXNjb3VudGVkOwoKICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRfc2t1KCkKICB7CiAgICAkc2t1ID0gbnVsbDsKICAgIGlmKCAkdGhpcy0+X3Byb2R1Y3QgKSAkc2t1ID0gJHRoaXMtPl9wcm9kdWN0LT5nZXRfc2t1KCk7CiAgICBpZiggJHRoaXMtPl9za3UgKSAkc2t1ID0gJHRoaXMtPl9za3U7CiAgICByZXR1cm4gJHNrdTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChwcm9tb3Rpb24gJHByb21vKQogIHsKICAgICR0aGlzLT5fcCA9ICRwcm9tbzsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfYXV0b19mZXUoJGZsYWcgPSBUUlVFKQogIHsKICAgICR0aGlzLT5fYXV0b19mZXUgPSAoYm9vbCkkZmxhZzsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfZmV1X3VpZCgkdWlkKQogIHsKICAgIGlmKCAkdWlkID4gMCApICR0aGlzLT5fZmV1X3VpZCA9ICR1aWQ7CiAgfQoKICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRfZmV1X3VpZCgpCiAgewogICAgaWYoICFpc19udWxsKCRfZmV1X3VpZCkgKSByZXR1cm4gJHRoaXMtPl9mZXVfdWlkOwoKICAgIGlmKCAkdGhpcy0+X2F1dG9fZmV1ICkgewogICAgICAkZmV1ID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CiAgICAgIGlmKCBpc19vYmplY3QoJGZldSkgKSB7CgkkdGhpcy0+X2ZldV91aWQgPSAkZmV1LT5Mb2dnZWRJbklkKCk7CglyZXR1cm4gJHRoaXMtPl9mZXVfdWlkOwogICAgICB9CiAgICB9CiAgfQoKICBwcml2YXRlIGZ1bmN0aW9uIF9pdGVtX2Rpc2NvdW50ZWQoJGlkeCkKICB7CiAgICBpZiggJHRoaXMtPl9pZ25vcmVfZGlzY291bnRlZCApIHJldHVybiBGQUxTRTsKCiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkdGhpcy0+X2NhcnQpOyAkaSsrICkgewogICAgICAkaXRlbSA9ICR0aGlzLT5fY2FydFskaV07CiAgICAgIGlmKCAkaXRlbS0+Z2V0X3BhcmVudCgpICE9ICRpZHggKSBjb250aW51ZTsKICAgICAgaWYoICRpdGVtLT5nZXRfcGFyZW50KCkgPiAtMSApIHJldHVybiBUUlVFOwogICAgICBpZiggJGl0ZW0tPmdldF91bml0X2Rpc2NvdW50KCkgIT0gMCApIHJldHVybiBUUlVFOwogICAgfQoKICAgIHJldHVybiBGQUxTRTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfc2t1KCRza3UpCiAgewogICAgJHRoaXMtPl9za3UgPSAkc2t1OwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9wcm9kdWN0KGNnX2Vjb21tX3Byb2R1Y3RpbmZvICRwcm9kdWN0KQogIHsKICAgICR0aGlzLT5fcHJvZHVjdCA9ICRwcm9kdWN0OwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9xdWFudGl0eSgkbm4pCiAgewogICAgJHRoaXMtPl9xdWFudGl0eSA9IChpbnQpJG5uOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF9pZ25vcmVfZGlzY291bnRlZCgkdmFsKQogIHsKICAgICR0aGlzLT5faWdub3JlX2Rpc2NvdW50ZWQgPSBjbXNfdG9fYm9vbCgkdmFsKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfY2FydCgkaXRlbXMpCiAgewogICAgaWYoIGlzX2FycmF5KCRpdGVtcykgJiYgY291bnQoJGl0ZW1zKSApICR0aGlzLT5fY2FydCA9ICRpdGVtczsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfY291cG9ucygkaXRlbXMpCiAgewogICAgaWYoIGlzX2FycmF5KCRpdGVtcykgJiYgY291bnQoJGl0ZW1zKSApICR0aGlzLT5fY291cG9ucyA9ICRpdGVtczsKICB9CgogIC8qKgogICAqIENhbGN1bGF0ZXMgdGhlICdzdWJ0b3RhbCcgb2YgYWxsIGNhcnQgaXRlbXMKICAgKiBpbmNsdWRpbmcgZGlzc2NvdW50cyBhbHJlYWR5IGFwcGxpZWQKICAgKi8KICBwcml2YXRlIGZ1bmN0aW9uIF9jYWxjX29yZGVyX3N1YnRvdGFsKCRpbmNsdWRlX2Rpc2NvdW50ZWQgPSBGQUxTRSkKICB7CiAgICAkdiA9IDA7CiAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jYXJ0KSAmJiBjb3VudCgkdGhpcy0+X2NhcnQpICkgewogICAgICBmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJGl0ZW0gKSB7CglpZiggIWlzX2EoJGl0ZW0sJ2NnX2Vjb21tX2NhcnRpdGVtJykgKSB7CgkgIC8vIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaGVyZQoJICBjb250aW51ZTsKCX0KCQoJaWYoICEkaW5jbHVkZV9kaXNjb3VudGVkICYmICRpdGVtLT5nZXRfdW5pdF9kaXNjb3VudCgpICE9IDAgKSBjb250aW51ZTsKCWlmKCAhJGluY2x1ZGVfZGlzY291bnRlZCAmJiAkaXRlbS0+Z2V0X3BhcmVudCgpID49IDAgKSBjb250aW51ZTsKCSR2ICs9ICRpdGVtLT5nZXRfaXRlbV90b3RhbCgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJHY7CiAgfQoKICBwcml2YXRlIGZ1bmN0aW9uIF9jYWxjX29yZGVyX3dlaWdodCgpCiAgewogICAgJHYgPSAwOwogICAgaWYoIGlzX2FycmF5KCR0aGlzLT5fY2FydCkgJiYgY291bnQoJHRoaXMtPl9jYXJ0KSApIHsKICAgICAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRpdGVtICkgewoJaWYoICFpc19hKCRpdGVtLCdjZ19lY29tbV9jYXJ0aXRlbScpICkgewoJICAvLyBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGhlcmUKCSAgY29udGludWU7Cgl9CgkKCSR2ICs9ICRpdGVtLT5nZXRfdW5pdF93ZWlnaHQoKSAqICRpdGVtLT5nZXRfcXVhbnRpdHkoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuICR2OwogIH0KCiAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0X3NrdV9xdWFudGl0eSgkc2t1KQogIHsKICAgICR2ID0gMDsKICAgIGlmKCAhJHNrdSApIHJldHVybiAkdjsKCiAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9jYXJ0KSAmJiBjb3VudCgkdGhpcy0+X2NhcnQpICkgewogICAgICBmb3JlYWNoKCAkdGhpcy0+X2NhcnQgYXMgJGl0ZW0gKSB7CglpZiggIWlzX2EoJGl0ZW0sJ2NnX2Vjb21tX2NhcnRpdGVtJykgKSB7CgkgIC8vIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaGVyZQoJICBjb250aW51ZTsKCX0KCglpZiggJHNrdSAhPSAkaXRlbS0+Z2V0X3NrdSgpICkgY29udGludWU7CgkkdiArPSAkaXRlbS0+Z2V0X3F1YW50aXR5KCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkdjsKICB9CgogIC8vIHJldHVybnMgYm9vbGVhbgogIHB1YmxpYyBmdW5jdGlvbiBmaW5kX21hdGNoKCkKICB7CiAgICAkbWF0Y2hfY291bnQgPSAwOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgJHRoaXMtPl9wLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICRjb25kaXRpb24gPSAkdGhpcy0+X3AtPmdldF9jb25kaXRpb24oJGkpOwoJICAgIAogICAgICBzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgoJLy8gdGVzdCB1c2VyIGlzIG1lbWJlciBvZiBmZXUgZ3JvdXAuCglpZiggY29uZGl0aW9uX3Rlc3RzOjp0ZXN0X2ZldV91aWQoJGNvbmRpdGlvbikgKSB7CgkgICRtYXRjaF9jb3VudCsrOwoJfQoJYnJlYWs7CgogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9TVUJUT1RBTDoKCWlmKCAhaXNfbnVtZXJpYygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKSApIGJyZWFrOwoJaWYoICR0aGlzLT5fY2FsY19vcmRlcl9zdWJ0b3RhbCgpID49IChmbG9hdCkkY29uZGl0aW9uLT5nZXRfZGF0YSgpICkgewoJICAkbWF0Y2hfY291bnQrKzsKCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfV0VJR0hUOgoJaWYoICFpc19udW1lcmljKCRjb25kaXRpb24tPmdldF9kYXRhKCkpICkgYnJlYWs7CglpZiggJHRoaXMtPl9jYWxjX29yZGVyX3dlaWdodCgpID49IChmbG9hdCkkY29uZGl0aW9uLT5nZXRfZGF0YSgpICkgewoJICAkbWF0Y2hfY291bnQrKzsKCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OOgoJaWYoIGlzX2FycmF5KCR0aGlzLT5fY291cG9ucykgJiYgY291bnQoJHRoaXMtPl9jb3Vwb25zKSApIHsKCSAgZm9yZWFjaCggJHRoaXMtPl9jb3Vwb25zIGFzICRjb2RlICkgewoJICAgIGlmKCBzdHJjYXNlY21wKCRjb2RlLCAkY29uZGl0aW9uLT5nZXRfZGF0YSgpKSA9PSAwICkgewoJICAgICAgJG1hdGNoX2NvdW50Kys7CgkgICAgICBicmVhazsKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRElEOgoJaWYoICR0aGlzLT5fcHJvZHVjdCApIHsKCSAgLy8gdGVzdCBpZiB0aGlzIHByb2R1Y3QgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHByb2R1Y3QgaWQKCSAgJHRtcCA9IGV4cGxvZGUoJywnLCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJICBpZiggaW5fYXJyYXkoJHRoaXMtPl9wcm9kdWN0LT5nZXRfcHJvZHVjdF9pZCgpLCR0bXApICkgewoJICAgICRtYXRjaF9jb3VudCsrOwoJICAgIGJyZWFrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRToKCWlmKCAoJHNrdSA9ICR0aGlzLT5fZ2V0X3NrdSgpKSApIHsKCSAgLy8gdGVzdCBpZiB0aGlzIHNrdSBtYXRjaGVzCgkgICRkYXRhID0gJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKTsKCSAgaWYoIGZubWF0Y2goJHNrdSwkZGF0YVswXSkgKSB7CgkgICAgLy8gbm93IHRlc3QgaWYgdGhlIHF1YW50aXR5IG1hdGNoZXMKCSAgICAkbnVtID0gJHRoaXMtPl9nZXRfc2t1X3F1YW50aXR5KCRza3UpOwoJICAgICRudW0gKz0gKGludCkkdGhpcy0+X3F1YW50aXR5OwoJICAgIGlmKCAkbnVtID4gMCAmJiAkbnVtID49ICRkYXRhWzFdICkgewoJICAgICAgJG1hdGNoX2NvdW50Kys7CgkgICAgICBicmVhazsKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRFNLVToKCWlmKCAoJHNrdSA9ICR0aGlzLT5fZ2V0X3NrdSgpKSApIHsKCSAgLy8gdGVzdCBpZiB0aGlzIHNrdSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHJvZHVjdCBza3UncwoJICAkdG1wID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CgkgIGZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCSAgICBpZiggZm5tYXRjaCgkb25lLCRza3UpICkgIHsKCSAgICAgICRtYXRjaF9jb3VudCsrOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21DYXRlZ29yaWVzKCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJaWYoICRwcm9kdWN0cyApIHsKCSAgLy8gaGF2ZSBwcm9kdWN0IGlkcyBpbiB0aHNlIGNhdGVnb3JpZXMuCgkgIGlmKCAkdGhpcy0+X3Byb2R1Y3QgJiYgaW5fYXJyYXkoJHRoaXMtPl9wcm9kdWN0LT5nZXRfcHJvZHVjdF9pZCgpLCRwcm9kdWN0cykgKSB7CgkgICAgJG1hdGNoX2NvdW50Kys7CgkgICAgYnJlYWs7CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21IaWVyYXJjaHkoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSwnLicpOwoJaWYoICRwcm9kdWN0cyApIHsKCSAgLy8gaGF2ZSBwcm9kdWN0IGlkcyBpbiB0aHNlIGNhdGVnb3JpZXMuCgkgIGlmKCAkdGhpcy0+X3Byb2R1Y3QgJiYgaW5fYXJyYXkoJHRoaXMtPl9wcm9kdWN0LT5nZXRfcHJvZHVjdF9pZCgpLCRwcm9kdWN0cykgKSB7CgkgICAgJG1hdGNoX2NvdW50Kys7CgkgICAgYnJlYWs7CgkgIH0KCX0KCWJyZWFrOwogICAgICB9IC8vIHN3aXRjaAogICAgfSAvLyBmb3IgZWFjaCBjb25kaXRpb24KCiAgICBpZiggJG1hdGNoX2NvdW50ID09ICR0aGlzLT5fcC0+Y291bnRfY29uZGl0aW9ucygpICkgewogICAgICBpZiggJHRoaXMtPl9wLT5nZXRfZXh0cmEoJ2FsbG93X29uY2UnKSApIHsKCWZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkb25lX2l0ZW0gKSB7CgkgIGlmKCAkb25lX2l0ZW0tPmdldF9wcm9tbygpID09ICR0aGlzLT5fcC0+Z2V0X2lkKCkgKSB7CgkgICAgcmV0dXJuIEZBTFNFOwoJICB9Cgl9CiAgICAgIH0KCiAgICAgIC8vIGl0IG1hdGNoZXMuCiAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIHJldHVybiBGQUxTRTsKICB9IC8vIGVuZCBvZiBmdW5jdGlvbgoKCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfb2ZmZXJfbWF0Y2goKQogIHsKICAgIC8vIHRlc3RzIGlmIHRoZSBwcm9kdWN0LCBvciBza3UgbWF0Y2ggdGhlIG9mZmVyCiAgICAvLyBub3RlLCBvbmx5IHdvcmtzIHdpdGggb2ZmZXIgdHlwZXMgdGhhdCBoYXZlIGEgcHJvZHVjdCBpZCwgb3Igc2t1IGluIHRoZW0uCiAgICAvLyByZXR1cm5zIGJvb2xlYW4uCgogICAgc3dpdGNoKCAkdGhpcy0+X3AtPmdldF9vZmZlcl90eXBlKCkgKSB7CiAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVDoKICAgICAgaWYoICR0aGlzLT5fcHJvZHVjdC0+Z2V0X3Byb2R1Y3RfaWQoKSA9PSAkdGhpcy0+X3AtPmdldF9vZmZlcl9kYXRhKCkgKSB7CglyZXR1cm4gVFJVRTsKICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIFBST01PVElPTlNfT0ZGRVJfUFJPRFVDVFNLVToKICAgICAgaWYoICgkc2t1ID0gJHRoaXMtPl9nZXRfc2t1KCkpICkgewoJJHRtcCA9IGV4cGxvZGUoJywnLCR0aGlzLT5fcC0+Z2V0X29mZmVyX2RhdGEoKSk7Cglmb3JlYWNoKCAkdG1wIGFzICRvbmUgKSB7CgkgIGlmKCBmbm1hdGNoKCRvbmUsJHNrdSkgKSByZXR1cm4gVFJVRTsKCX0KICAgICAgfQogICAgICBicmVhazsKICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfSAvLyBlbmQgb2YgZnVuY3Rpb24KCiAgLyoqCiAgICogVGVzdCBpZiB0aGUgY29udGVudHMgb2YgdGhlIGNhcnQgbWF0Y2ggYWxsIG9mIHRoZSBjb25kaXRpb25zIGZvciB0aGlzIHByb21vdGlvbi4KICAgKiBBdCBsZWFzdCBvbmUgb2YgdGhlIGNvbmRpdGlvbnMgaGFzIHRvIGJlIGEgJ3Byb2R1Y3QnIHR5cGUgbWF0Y2guCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZpbmRfY2FydF9tYXRjaCgmJG1hdGNoZWRfY2FydGl0ZW1faWR4KQogIHsKICAgICRtYXRjaF9jb3VudCA9IDA7CiAgICAkbWF0Y2hfY2FydGl0ZW0gPSAtMTsKICAgIGZvciggJGkgPSAwOyAkaSA8ICR0aGlzLT5fcC0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZGl0aW9uID0gJHRoaXMtPl9wLT5nZXRfY29uZGl0aW9uKCRpKTsKCiAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9GRVU6CgkvLyB0ZXN0IHVzZXIgaXMgbWVtYmVyIG9mIGZldSBncm91cC4KCWlmKCBjb25kaXRpb25fdGVzdHM6OnRlc3RfZmV1X3VpZCgkY29uZGl0aW9uKSApIHsKCSAgJG1hdGNoX2NvdW50Kys7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1NVQlRPVEFMOgoJJGRhdGEgPSAkY29uZGl0aW9uLT5nZXRfZGF0YSgpOwoJaWYoICFpc19udW1lcmljKCRkYXRhKSApIGJyZWFrOwoJaWYoICR0aGlzLT5fY2FsY19vcmRlcl9zdWJ0b3RhbCgpID49IChmbG9hdCkkZGF0YSApIHsKCSAgJG1hdGNoX2NvdW50Kys7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1dFSUdIVDoKCWlmKCAhaXNfbnVtZXJpYygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKSApIGJyZWFrOwoJaWYoICR0aGlzLT5fY2FsY19vcmRlcl93ZWlnaHQoKSA+PSAoZmxvYXQpJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSApIHsKCSAgJG1hdGNoX2NvdW50Kys7Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0NPVVBPTjoKCWlmKCBpc19hcnJheSgkdGhpcy0+X2NvdXBvbnMpICYmIGNvdW50KCR0aGlzLT5fY291cG9ucykgKSB7CgkgIGZvcmVhY2goICR0aGlzLT5fY291cG9ucyBhcyAkY29kZSApIHsKCSAgICBpZiggc3RyY2FzZWNtcCgkY29kZSwgJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSkgPT0gMCApIHsKCSAgICAgICRtYXRjaF9jb3VudCsrOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX0JVTEtQVVJDSEFTRToKCWlmKCAkdGhpcy0+X2NhcnQgKSB7CgkgICRpZHggPSAwOwoJICAkZGF0YSA9ICRjb25kaXRpb24tPmdldF9kYXRhKCk7CgkgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKCSAgICBpZiggISR0aGlzLT5faXRlbV9kaXNjb3VudGVkKCRpZHgpICkgewoJICAgICAgaWYoIGZubWF0Y2goJGRhdGFbMF0sJGl0ZW0tPmdldF9za3UoKSkgKSB7CgkJaWYoICRkYXRhWzFdID4gMCAmJiAkaXRlbS0+Z2V0X3F1YW50aXR5KCkgPj0gKGludCkkZGF0YVsxXSApIHsKCQkgICRtYXRjaF9jb3VudCsrOwoJCSAgJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKCQkgIGJyZWFrOwoJCX0KCSAgICAgIH0KCSAgICB9CgkgICAgJGlkeCsrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKCS8vIHRlc3QgaWYgdGhpcyBwcm9kdWN0IGV4aXN0cyBpbiB0aGUgY2FydCAoYnkgcHJvZHVjdCBpZCkKCWlmKCAkdGhpcy0+X2NhcnQgKSB7CgkgIC8vIGlmIG1hdGNoZXMsIHRoZW4gdGhlcmUgaXMgYSBwcm9kdWN0IGluIHRoZSBjYXJ0IHRoYXQgbWF0Y2hlcyB0aGlzIGNvbmRpdGlvbgoJICAkaWR4ID0gMDsKCSAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRpdGVtICkgewoJICAgIGlmKCAhJHRoaXMtPl9pdGVtX2Rpc2NvdW50ZWQoJGlkeCkgKSB7CgkgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CgkgICAgICBpZiggaW5fYXJyYXkoJGl0ZW0tPmdldF9wcm9kdWN0X2lkKCksJHRtcCkgKSB7CgkJJG1hdGNoX2NvdW50Kys7CgkJJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKCQlicmVhazsKCSAgICAgIH0KCSAgICB9CgkgICAgJGlkeCsrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RTS1U6CgkvLyB0ZXN0IGlmIHRoaXMgcHJvZHVjdCBleGlzdHMgaW4gdGhlIGNhcnQgKGJ5IHNrdSkKCWlmKCAkdGhpcy0+X2NhcnQgKSB7CgkgIC8vIGlmIG1hdGNoZXMsIHRoZW4gdGhlcmUgaXMgYSBwcm9kdWN0IGluIHRoZSBjYXJ0IHRoYXQgbWF0Y2hlcyB0aGlzIGNvbmRpdGlvbgoJICAkaWR4ID0gMDsKCSAgZm9yZWFjaCggJHRoaXMtPl9jYXJ0IGFzICRpdGVtICkgewoJICAgIGlmKCAkdGhpcy0+X2l0ZW1fZGlzY291bnRlZCgkaWR4KSApIGNvbnRpbnVlOwoKCSAgICAkdG1wID0gZXhwbG9kZSgnLCcsJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSk7CgkgICAgJGZuZCA9IGZhbHNlOwoJICAgIGZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCSAgICAgIGlmKCBmbm1hdGNoKCRvbmUsJGl0ZW0tPmdldF9za3UoKSkgKSB7CgoJCSRtYXRjaF9jb3VudCsrOwoJCSRtYXRjaF9jYXJ0aXRlbSA9ICRpZHg7CgkJJGZuZCA9IHRydWU7CgkJYnJlYWs7CgkgICAgICB9CgkgICAgfQoJICAgIGlmKCAkZm5kICkgYnJlYWs7CgkgICAgJGlkeCsrOwoJICB9Cgl9CglicmVhazsKCiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21DYXRlZ29yaWVzKCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJaWYoICRwcm9kdWN0cyApIHsKCSAgaWYoICR0aGlzLT5fY2FydCAmJiAhJHRoaXMtPl90ZXN0X3Byb2R1Y3Rvbmx5ICkgewoJICAgICRpZHggPSAwOwoJICAgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKCSAgICAgIGlmKCAkaXRlbS0+Z2V0X3BhcmVudCgpID4gLTEgKSBjb250aW51ZTsKCSAgICAgIGlmKCAkaXRlbS0+Z2V0X3VuaXRfZGlzY291bnQoKSAhPSAwICkgY29udGludWU7CgoJICAgICAgaWYoIGluX2FycmF5KCRpdGVtLT5nZXRfcHJvZHVjdF9pZCgpLCRwcm9kdWN0cykgKSB7CgkJJG1hdGNoX2NvdW50Kys7CgkJJG1hdGNoX2NhcnRpdGVtID0gJGlkeDsKCQlicmVhazsKCSAgICAgIH0KCSAgICAgICRpZHgrKzsKCSAgICB9CgkgIH0KCX0KCWJyZWFrOwoKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21IaWVyYXJjaHkoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSwnLicpOwoJaWYoICRwcm9kdWN0cyApIHsKCSAgaWYoICR0aGlzLT5fY2FydCAmJiAhJHRoaXMtPl90ZXN0X3Byb2R1Y3Rvbmx5ICkgewoJICAgICRpZHggPSAwOwoJICAgIGZvcmVhY2goICR0aGlzLT5fY2FydCBhcyAkaXRlbSApIHsKCSAgICAgIGlmKCBpbl9hcnJheSgkaXRlbS0+Z2V0X3Byb2R1Y3RfaWQoKSwkcHJvZHVjdHMpICkgewoJCSRtYXRjaF9jb3VudCsrOwoJCSRtYXRjaF9jYXJ0aXRlbSA9ICRpZHg7CgkJYnJlYWs7CgkgICAgICB9CgkgICAgICAkaWR4Kys7CgkgICAgfQoJICB9Cgl9CglicmVhazsKICAgICAgfSAvLyBzd2l0Y2gKICAgIH0KCiAgICBpZiggKCRtYXRjaF9jb3VudCA9PSAkdGhpcy0+X3AtPmNvdW50X2NvbmRpdGlvbnMoKSkgKSB7CiAgICAgIC8vIGl0IG1hdGNoZXMuCiAgICAgICRtYXRjaGVkX2NhcnRpdGVtX2lkeCA9ICRtYXRjaF9jYXJ0aXRlbTsKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.promo_tests.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgcHJvbW9fdGVzdHMKewogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gJl9nZXRfZmV1KCkKICB7CiAgICByZXR1cm4gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiB0aGUgcHJvbW90aW9uIGlzIGFwcGxpY2FibGUKICAgKiB0byBjb3Vwb24gY29kZSBzdXBwbGllZC4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgY291cG9uIGNvZGUKICAgKiBAcGFyYW0gcHJvbW90aW9uIFByb21vdGlvbiBvYmplY3QuCiAgICogQHJldHVybiBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIGNvdXBvbiBjb2Rlcywgb3IgaWYgdGhlIGNvdXBvbiBjb2RlIG1hdGNoZXMuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X2NvdXBvbigkY291cG9uLHByb21vdGlvbiAkcHJvbW8pCiAgewogICAgJGNvbmRpdGlvbnMgPSAkcHJvbW8tPmdldF9jb25kaXRpb25zKCk7CiAgICAkZm5kID0gRkFMU0U7CiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkY29uZGl0aW9ucyk7ICRpKysgKSB7CiAgICAgICRjb25kID0gJGNvbmRpdGlvbnNbJGldOwogICAgICBpZiggJGNvbmQtPmdldF9jb25kX3R5cGUoKSAhPSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OICkgY29udGludWU7CgogICAgICAkZm5kID0gVFJVRTsKICAgICAgJGRhdGEgPSAkY29uZC0+Z2V0X2RhdGEoKTsKICAgICAgaWYoIHN0cmNhc2VjbXAoJGNvdXBvbiwkZGF0YSkgPT0gMCApIHJldHVybiBUUlVFOwogICAgfQoKICAgIGlmKCAhJGZuZCApIHJldHVybiBUUlVFOyAvLyB0aGlzIHByb21pdGlvbiBoYXMgbm8gY291cG9uIGRlcGVuZGVuY2llcy4KCiAgICAvLyB0aGlzIHByb21vdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUgc3VwcGxpZWQgY291cG9uLgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgaXQgaXMgc3ViamVjdCB0byBhIHdlaWdodCBjb25kaXRpb24KICAgKiBhbmQgd2V0aGVyIHRoZSB3ZWlnaHQgc3VwcGxpZXMgbWF0Y2hlcyB0aGF0IGNvbmRpdGlvbi4KICAgKgogICAqIEBwYXJhbSBmbG9hdCB3ZWlnaHQgYW1vdW50CiAgICogQHBhcmFtIHByb21vdGlvbiBQcm9tb3Rpb24gb2JqZWN0LgogICAqIEByZXR1cnNuIFRSVUUgaWYgdGhpcyB0ZXN0IGRvZXMgbm90IHJlbHkgb24gb3JkZXIgd2VpZ2h0LCBvciBpZiB0aGUgd2VpZ2h0IHZhbHVlIGlzIG92ZXIgdGhlIGFsbG93ZWQgcmFuZ2UuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X29yZGVyX3dlaWdodCgkd2VpZ2h0LHByb21vdGlvbiAkcHJvbW8pCiAgewogICAgaWYoICR3ZWlnaHQgPD0gMC4wMCApIHJldHVybiBGQUxTRTsKCiAgICAkY29uZGl0aW9ucyA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbnMoKTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjb25kaXRpb25zKTsgJGkrKyApIHsKICAgICAgJGNvbmQgPSAkY29uZGl0aW9uc1skaV07CiAgICAgIGlmKCAkY29uZC0+Z2V0X2NvbmRfdHlwZSgpICE9IFBST01PVElPTlNfQ09ORF9XRUlHSFQgKQoJY29udGludWU7CgogICAgICAkZGF0YSA9ICRjb25kLT5nZXRfZGF0YSgpOwogICAgICBpZiggJHdlaWdodCA+PSAkZGF0YSApCglyZXR1cm4gVFJVRTsKCiAgICAgIGJyZWFrOwogICAgfQoKICAgIC8vIHRoaXMgcHJvbW90aW9uIGlzIG5vdCBkZXBlbmRhbnQgdXBvbiBvcmRlciB3ZWlnaHRzLgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgdGhlIHByb21vdGlvbiBpcyBhcHBsaWNhYmxlCiAgICogdG8gb3JkZXIgc3VidG90YWwgY2FsY3VsYXRpb25zLCBhbmQgaWYgc28gaWYgdGhlIHN1cHBsaWVkCiAgICogc3VidG90YWwgaXMgb3ZlciBvciBlcXVhbCB0byB0aGUgb25lIHNwZWNpZmllZCBpbiB0aGUKICAgKiBjb25kaXRpb25zLgogICAqCiAgICogQHBhcmFtIGZsb2F0IHN1YnRvdGFsIGFtb3VudAogICAqIEBwYXJhbSBwcm9tb3Rpb24gUHJvbW90aW9uIG9iamVjdC4KICAgKiBAcmV0dXJzbiBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIG9yZGVyciBzdWJ0b3RhbCwgb3IgaWYgdGhlIHN1YnRvdGFsIHZhbHVlIGlzIG92ZXIgdGhlIGFsbG93ZWQgcmFuZ2UuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X29yZGVyX3N1YnRvdGFsKCRzdWJ0b3RhbCwmJHByb21vKQogIHsKICAgIGlmKCAkc3VidG90YWwgPD0gMC4wMCApIHJldHVybiBGQUxTRTsKCiAgICAkY29uZGl0aW9ucyA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbnMoKTsKICAgICRmb3VuZCA9IGZhbHNlOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNvbmRpdGlvbnMpOyAkaSsrICkgewogICAgICAkY29uZCA9JiAkY29uZGl0aW9uc1skaV07CiAgICAgIGlmKCAkY29uZC0+Z2V0X2NvbmRfdHlwZSgpICE9IFBST01PVElPTlNfQ09ORF9TVUJUT1RBTCApCgljb250aW51ZTsKCiAgICAgICRkYXRhID0gJGNvbmQtPmdldF9kYXRhKCk7CiAgICAgIGlmKCAkc3VidG90YWwgPj0gJGRhdGEgKSB7CglyZXR1cm4gVFJVRTsKICAgICAgfQoKICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8gdGhpcyBwcm9tb3Rpb24gaXMgbm90IGRlcGVuZGFudCB1cG9uIG9yZGVyIHN1YnRvdGFscy4KICAgIHJldHVybiBGQUxTRTsKICB9CgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgdGhlIHByb21vdGlvbiBpcyAKICAgKiBhcHBsaWNhYmxlIHRvIGNlcnRhaW4gRkVVIGdyb3Vwcy4uLiBhbmQgaWYgc28KICAgKiBpZiB0aGUgc3VwcGxpZWQgZmV1X2dyb3VwIHBhc3NlcyB0aGUgdGVzdC4KICAgKgogICAqIEBwYXJhbSBpbnQgZmV1X3VpZAogICAqIEBwYXJhbSBwcm9tb3Rpb24gUHJvbW90aW9uIG9iamVjdC4KICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIEZFVSBncm91cCBtZW1iZXJzaGlwLCBvciBpZiB0aGUgdXNlciBpcyBtZW1iZXIgb2Ygb25lIG9mIHRoZSBzcGVjaWZpZWQgZ3JvdXAgbmFtZXMuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X2ZldV91aWQoJGZldV91aWQsJiRwcm9tbykKICB7CiAgICBpZiggJGZldV91aWQgPD0gMCApIHJldHVybiBGQUxTRTsKCiAgICAkZmV1ID0gc2VsZjo6X2dldF9mZXUoKTsKICAgIGlmKCAhJGZldSApIHJldHVybiBGQUxTRTsKCiAgICAkY29uZGl0aW9ucyA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbnMoKTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjb25kaXRpb25zKTsgJGkrKyApIHsKICAgICAgJGNvbmQgPSAkY29uZGl0aW9uc1skaV07CiAgICAgIGlmKCAkY29uZC0+Z2V0X2NvbmRfdHlwZSgpID09IFBST01PVElPTlNfQ09ORF9GRVUgKSB7CgkvLyBnZXQgbWVtYmVyIGdyb3VwcyBhcyBhcnJheSBvZiBncm91cCBuYW1lcwoJJG1lbWJlcl9vZiA9ICRmZXUtPkdldE1lbWJlckdyb3Vwc0FycmF5KCRmZXVfdWlkKTsKCWlmKCAhJG1lbWJlcl9vZiApIHJldHVybiBGQUxTRTsKCSRtZW1iZXJfb2YgPSBjZ2VfYXJyYXk6OmV4dHJhY3RfZmllbGQoJG1lbWJlcl9vZiwnZ3JvdXBpZCcpOwoKCSR0bXAgPSAkZmV1LT5HZXRHcm91cExpc3QoKTsKCSRhbGxncm91cHMgPSBhcnJheV9mbGlwKCR0bXApOwoJJG1lbWJlcl9ncm91cF9uYW1lcyA9IGFycmF5KCk7Cglmb3JlYWNoKCAkbWVtYmVyX29mIGFzICRvbmVnaWQgKSB7CgkgICRtZW1iZXJfZ3JvdXBfbmFtZXNbXSA9ICRhbGxncm91cHNbJG9uZWdpZF07Cgl9CgoJLy8gZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBjb25kaXRpb24KCS8vIGFzIGFuIGFycmF5IG9mIHRyaW1tZWQgZ3JvdXAgbmFtZXMuCgkkZGF0YSA9IGV4cGxvZGUoJywnLCRjb25kLT5nZXRfZGF0YSgpKTsKCWZvciggJGogPSAwOyAkaiA8IGNvdW50KCRkYXRhKTsgJGorKyApIHsKCSAgJGRhdGFbJGpdID0gdHJpbSgkZGF0YVskal0pOwoJfQoKCS8vIG5vdyBkbyBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiBtZW1iZXIgZ3JvdXBvIG5hbWVzCgkvLyBhbmQgdGhlIGRhdGEgZ3JvdXAgbmFtZXMuCgkkcmVzID0gYXJyYXlfaW50ZXJzZWN0KCRtZW1iZXJfZ3JvdXBfbmFtZXMsJGRhdGEpOwoJaWYoIGNvdW50KCRyZXMpICkgcmV0dXJuIFRSVUU7CgoJLy8gdGhlcmUgaXMgZ3VhcmFudGVlZCB0byBiZSBubyBtb3JlIGNvbmRpdGlvbnMgb2YgdGhpcyB0eXBlLgoJYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyB0aGlzIHByb21vdGlvbiBpcyBub3QgZGVwZW5kYW50IHVwb24gZmV1IGdyb3VwIG1lbWJlcnNoaXAuCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKCiAgLyoqIAogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgdGhlIHByb2R1Y3QgaWQgc3BlY2lmaWVkCiAgICogaXMgYXBwbGljYWJsZSB0byBwcm9kdWN0IGhpZXJhcmNoeSB0ZXN0cywgYW5kIGlmIHNvLCBpZiB0aGUgcHJvZHVjdCBpZCBzcGVjaWZpZWQKICAgKiBpcyBpbiB0aGUgYXBwcm9wcmlhdGUgcHJvZHVjdCBoaWVyYXJjaHkuCiAgICoKICAgKiBAcGFyYW0gcHJvbW90aW9uIG9iamVjdAogICAqIEBwYXJhbSBwcm9kdWN0IGlkCiAgICogQHJldHVybnMgVFJVRSBpZiB0aGUgcHJvZHVjdCBpcyBhcHBsaWNhYmxlIHRvIHRoaXMgcHJvbW90aW9uLCBGQUxTRSBvdGhlcndpc2UKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHNpbmdsZV9wcm9kdWN0X2Zyb21faGllcmFyY2h5KCYkcHJvbW8sJHByb2R1Y3RfaWQpCiAgewogICAgJHByb2R1Y3RzID0gbnVsbDsKICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKSB7CiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RISUVSOgoJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tSGllcmFyY2h5KCRjb25kaXRpb24tPmdldF9kYXRhKCksJy4nKTsKCSRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CglicmVhazsKCiAgICAgIGRlZmF1bHQ6Cgljb250aW51ZTsKCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIHByb2R1Y3RzIGZvdW5kCiAgICBpZiggISRwcm9kdWN0cyApIHJldHVybiBGQUxTRTsgCgogICAgLy8gbm93IGNoZWNrIHRvIHNlZSBpZiB0aGUgaXRlbXMgaW4gdGhlIGNhcnQgbWF0Y2guCiAgICBpZiggaW5fYXJyYXkoJHByb2R1Y3RfaWQsJHByb2R1Y3RzKSApIHsKICAgICAgcmV0dXJuIFRSVUU7CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KCgogIC8qKgogICAqIFRlc3QgdGhlIHByb21vdGlvbiB0byBzZWUgaWYgaXQgaXMgYXBwbGljYWJsZSB0byBwcm9kdWN0IGhpZXJhcmNoeQogICAqIGNvbmRpdGlvbnMsIGFuZCBpZiBzbywgaWYgdGhlIGl0ZW1zIGluIHRoZSAgdXNlcnMgY2FydCBhcmUgcHJvZHVjdHMsIAogICAqIGFuZCBpZiB0aGV5IG1hdGNoIHRoZSBjb25kaXRpb25zIGluIHRoZSBwcm9tb3Rpb24uCiAgICoKICAgKiBAcGFyYW0gYXJyYXkgb2YgbGluZV9pdGVtIG9iamVjdHMKICAgKiBAcGFyYW0gcHJvbW90aW9uIFByb21vdGlvbiBvYmplY3QuCiAgICogQHJldHVybnMgVFJVRSBpZiB0aGlzIHRlc3QgZG9lcyBub3QgcmVseSBvbiBGRVUgZ3JvdXAgbWVtYmVyc2hpcCwgb3IgaWYgdGhlIHVzZXIgaXMgbWVtYmVyIG9mIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGdyb3VwIG5hbWVzLiAgRkFMU0Ugb3RoZXJ3aXNlLgogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gdGVzdF9wcm9kdWN0X2Zyb21faGllcmFyY2h5KCRpdGVtcywmJHByb21vKQogIHsKICAgICRwcm9kdWN0cyA9ICcnOwogICAgZm9yKCAkaSA9IDA7ICRpIDwgJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7ICRpKysgKSB7CiAgICAgICRjb25kaXRpb24gPSAkcHJvbW8tPmdldF9jb25kaXRpb24oJGkpOwogICAgICBzd2l0Y2goICRjb25kaXRpb24tPmdldF9jb25kX3R5cGUoKSApIHsKICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPREhJRVI6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21IaWVyYXJjaHkoJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKSwnLicpOwoJJGkgPSAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsKCWJyZWFrOwoKICAgICAgZGVmYXVsdDoKCWNvbnRpbnVlOwoJYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgcHJvZHVjdHMgZm91bmQKICAgIGlmKCAhJHByb2R1Y3RzICkgcmV0dXJuIEZBTFNFOyAKCiAgICAvLyBub3cgY2hlY2sgdG8gc2VlIGlmIHRoZSBpdGVtcyBpbiB0aGUgY2FydCBtYXRjaC4KICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRpdGVtcyk7ICRpKysgKSB7CiAgICAgICRpdGVtID0gJGl0ZW1zWyRpXTsKICAgICAgaWYoICRpdGVtLT5nZXRfaXRlbV90eXBlKCkgPT0gbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUICYmIAoJICBpbl9hcnJheSgkaXRlbS0+Z2V0X2l0ZW1faWQoKSwkcHJvZHVjdHMpICkgewoJcmV0dXJuIFRSVUU7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiBpdCBpcyBhcHBsaWNhYmxlIHRvIHByb2R1Y3QgY2F0ZWdvcnkgCiAgICogY29uZGl0aW9ucywgYW5kIGlmIHNvLCBkb2VzIHRoZSBwcm9kdWN0IGlkIHN1cHBsaWVkIG1hdGNoCiAgICoKICAgKiBAcGFyYW0gdGhlIHByb21vdGlvbiBvYmplY3QKICAgKiBAcGFyYW0gdGhlIHByb2R1Y3QgaWQKICAgKiBAcmV0dXJucyBUUlVFIGlmIG1hdGNoIGZvdW5kLCBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBzaW5nbGVfcHJvZHVjdF9mcm9tX2NhdGVnb3J5KCYkcHJvbW8sJHByb2R1Y3RfaWQpCiAgewogICAgJHByb2R1Y3RzID0gJyc7CiAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CiAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9EQ0FUOgoJJHByb2R1Y3RzID0gUHJvZHVjdHM6OkdldFByb2R1Y3RJZHNGcm9tQ2F0ZWdvcmllcygkY29uZGl0aW9uLT5nZXRfZGF0YSgpKTsKCSRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CglicmVhazsKCiAgICAgIGRlZmF1bHQ6Cgljb250aW51ZTsKCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIHByb2R1Y3RzIGZvdW5kCiAgICBpZiggISRwcm9kdWN0cyApIHJldHVybiBGQUxTRTsgCgogICAgLy8gbm93IGNoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZHVjdCBpZCBtYXRjaGVzLgogICAgJGl0ZW0gPSAkaXRlbXNbJGldOwogICAgaWYoIGluX2FycmF5KCRwcm9kdWN0X2lkLCRwcm9kdWN0cykgKSB7CiAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIHJldHVybiBGQUxTRTsKICB9CgoKICAvKioKICAgKiBUZXN0IHRoZSBwcm9tb3Rpb24gdG8gc2VlIGlmIGl0IGlzIGFwcGxpY2FibGUgdG8gcHJvZHVjdCBjYXRlZ29yeQogICAqIGNvbmRpdGlvbnMsIGFuZCBpZiBzbyBkbyB0aGUgcHJvZHVjdCBpdGVtcyBpbiB0aGUgY3VycmVudAogICAqIHVzZXJzIGNhcnQgbWF0Y2ggdGhlIGNvbmRpdGlvbnMgaW4gdGhlIHByb21vdGlvbi4KICAgKgogICAqIEBwYXJhbSBhcnJheSBvZiBsaW5lX2l0ZW0gb2JqZWN0cwogICAqIEBwYXJhbSBwcm9tb3Rpb24gUHJvbW90aW9uIG9iamVjdC4KICAgKiBAcmV0dXJucyBUUlVFIGlmIHRoaXMgdGVzdCBkb2VzIG5vdCByZWx5IG9uIEZFVSBncm91cCBtZW1iZXJzaGlwLCBvciBpZiB0aGUgdXNlciBpcyBtZW1iZXIgb2Ygb25lIG9mIHRoZSBzcGVjaWZpZWQgZ3JvdXAgbmFtZXMuICBGQUxTRSBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiB0ZXN0X3Byb2R1Y3RfZnJvbV9jYXRlZ29yeSgkaXRlbXMsJiRwcm9tbykKICB7CiAgICAkcHJvZHVjdHMgPSAnJzsKICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKSB7CiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CgkkcHJvZHVjdHMgPSBQcm9kdWN0czo6R2V0UHJvZHVjdElkc0Zyb21DYXRlZ29yaWVzKCRjb25kaXRpb24tPmdldF9kYXRhKCkpOwoJJGkgPSAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsKCWJyZWFrOwoKICAgICAgZGVmYXVsdDoKCWNvbnRpbnVlOwoJYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgcHJvZHVjdHMgZm91bmQKICAgIGlmKCAhJHByb2R1Y3RzICkgcmV0dXJuIEZBTFNFOyAKCiAgICAvLyBub3cgY2hlY2sgdG8gc2VlIGlmIHRoZSBpdGVtcyBpbiB0aGUgY2FydCBtYXRjaC4KICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjYXJ0X2l0ZW1zKTsgJGkrKyApIHsKICAgICAgJGl0ZW0gPSAkaXRlbXNbJGldOwogICAgICBpZiggJGl0ZW0tPmdldF9pdGVtX3R5cGUgPT0gbGluZV9pdGVtOjpJVEVNVFlQRV9QUk9EVUNUICYmIAoJICBpbl9hcnJheSgkaXRlbS0+Z2V0X2l0ZW1faWQoKSwkcHJvZHVjdHMpICkgewoJcmV0dXJuIFRSVUU7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiBpdCBpcyBhcHBsaWNhYmxlIHRvIGNvbmRpdGlvbnMgYmFzZWQgb24gYSBzaW5nbGUgcHJvZHVjdAogICAqIGFuZCBpZiBzbywgc2VlIGlmIHRoZSBwcm9kdWN0IGlkIHNwZWNpZmllcyBtYXRjaGVzLgogICAqCiAgICogQHBhcmFtIHRoZSBwcm9tb3Rpb24gb2JqZWN0CiAgICogQHBhcmFtIHRoZSBwcm9kdWN0IGlkIHRvIHRlc3QKICAgKiBAcmV0dXJuIFRSVUUgaWYgbWF0Y2ggZm91bmQsIGZhbHNlIG90aGVyd2lzZQogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gc2luZ2xlX3Byb2R1Y3RfbWF0Y2hlcygmJHByb21vLCRwcm9kdWN0X2lkKQogIHsKICAgICRwcm9kdWN0ID0gbnVsbDsKICAgIGZvciggJGkgPSAwOyAkaSA8ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOyAkaSsrICkgewogICAgICAkY29uZGl0aW9uID0gJHByb21vLT5nZXRfY29uZGl0aW9uKCRpKTsKICAgICAgc3dpdGNoKCAkY29uZGl0aW9uLT5nZXRfY29uZF90eXBlKCkgKSB7CiAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RJRDoKCSRwcm9kdWN0ID0gJGNvbmRpdGlvbi0+Z2V0X2RhdGEoKTsKCSRpID0gJHByb21vLT5jb3VudF9jb25kaXRpb25zKCk7CglicmVhazsKCiAgICAgIGRlZmF1bHQ6Cgljb250aW51ZTsKCWJyZWFrOwogICAgICB9CiAgICB9CgogICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIHByb2R1Y3RzIGZvdW5kCiAgICBpZiggISRwcm9kdWN0ICkgcmV0dXJuIEZBTFNFOyAKCiAgICAkcF9hcnJheSA9IGV4cGxvZGUoJywnLCRwcm9kdWN0KTsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRwX2FycmF5KTsgJGkrKyApIHsKICAgICAgJHBfYXJyYXlbJGldID0gKGludCl0cmltKCRwX2FycmF5WyRpXSk7CiAgICB9CgogICAgLy8gbm93IGNoZWNrIHRvIHNlZSBpZiB0aGUgaXRlbXMgaW4gdGhlIGNhcnQgbWF0Y2guCiAgICBpZiggaW5fYXJyYXkoJHByb2R1Y3RfaWQsJHBfYXJyYXkpICkgewogICAgICByZXR1cm4gVFJVRTsKICAgIH0KCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKCiAgLyoqCiAgICogVGVzdCB0aGUgcHJvbW90aW9uIHRvIHNlZSBpZiBpdCBpcyBhcHBsaWNhYmxlIHRvIGNvbmRpdGlvbnMgYmFzZWQgb24gYSBzaW5nbGUgcHJvZHVjdAogICAqIGFuZCBpZiBzbywgc2VlIGlmIGF0IGxlYXN0IG9uZSBwcm9kdWN0IGluIHRoZSBsaW5lIGl0ZW1zIHN1cHBsaWVkIG1hdGNoIHRoZSBjb25kaXRpb24uCiAgICoKICAgKiBAcGFyYW0gYXJyYXkgb2YgbGluZV9pdGVtIG9iamVjdHMKICAgKiBAcGFyYW0gcHJvbW90aW9uIFByb21vdGlvbiBvYmplY3QuCiAgICogQHJldHVybnMgVFJVRSBpZiB0aGlzIHRlc3QgZG9lcyBub3QgcmVseSBvbiBGRVUgZ3JvdXAgbWVtYmVyc2hpcCwgb3IgaWYgdGhlIHVzZXIgaXMgbWVtYmVyIG9mIG9uZSBvZiB0aGUgc3BlY2lmaWVkIGdyb3VwIG5hbWVzLiAgRkFMU0Ugb3RoZXJ3aXNlLgogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gdGVzdF9zaW5nbGVfcHJvZHVjdCgkaXRlbXMsJiRwcm9tbykKICB7CiAgICAkcHJvZHVjdCA9IG51bGw7CiAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgJGNvbmRpdGlvbiA9ICRwcm9tby0+Z2V0X2NvbmRpdGlvbigkaSk7CiAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CgkkcHJvZHVjdCA9ICRjb25kaXRpb24tPmdldF9kYXRhKCk7CgkkaSA9ICRwcm9tby0+Y291bnRfY29uZGl0aW9ucygpOwoJYnJlYWs7CgogICAgICBkZWZhdWx0OgoJY29udGludWU7CglicmVhazsKICAgICAgfQogICAgfQoKICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBwcm9kdWN0cyBmb3VuZAogICAgaWYoICEkcHJvZHVjdCApIHJldHVybiBGQUxTRTsgCgogICAgJHBfYXJyYXkgPSBleHBsb2RlKCcsJywkcHJvZHVjdCk7CiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkcF9hcnJheSk7ICRpKysgKSB7CiAgICAgICRwX2FycmF5WyRpXSA9IChpbnQpdHJpbSgkcF9hcnJheVskaV0pOwogICAgfQoKICAgIC8vIG5vdyBjaGVjayB0byBzZWUgaWYgdGhlIGl0ZW1zIGluIHRoZSBjYXJ0IG1hdGNoLgogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGl0ZW1zKTsgJGkrKyApIHsKICAgICAgJGl0ZW0gPSAkaXRlbXNbJGldOwogICAgICBpZiggJGl0ZW0tPmdldF9pdGVtX3R5cGUoKSA9PSBsaW5lX2l0ZW06OklURU1UWVBFX1BST0RVQ1QgJiYgCgkgIGluX2FycmF5KCRpdGVtLT5nZXRfaXRlbV9pZCgpLCRwX2FycmF5KSApIHsKCXJldHVybiBUUlVFOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIEZBTFNFOwogIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgovLyBkdW1teSBvYmplY3QKJGR1bW15ID0gbmV3IHByb21vdGlvbigpOwoKJGRiID0mICR0aGlzLT5HZXREYigpOwokY29uZmlnID0mICRnQ21zLT5HZXRDb25maWcoKTsKCiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCi8vIFByb21vdGlvbnMgdGFibGUKJGZsZHMgPSAiCiAgICAgICAgIGlkIEkgS0VZIEFVVE8sCiAgICAgICAgIG5hbWUgQygyNTUpIEtFWSBOT1QgTlVMTCwKICAgICAgICAgZGVzY3JpcHRpb24gWCwKICAgICAgICAgaW1hZ2UgQygyNTUpLAogICAgICAgICBpdGVtX29yZGVyIEkgTk9UIE5VTEwsCiAgICAgICAgIHR5cGUgQygyMCkgTk9UIE5VTEwsCiAgICAgICAgIGNyZWF0ZWQgIiAuIENNU19BRE9EQl9EVCAuICIsCiAgICAgICAgIHN0YXJ0X2RhdGUgIiAuIENNU19BRE9EQl9EVCAuICIsCiAgICAgICAgIGVuZF9kYXRlICIgLiBDTVNfQURPREJfRFQgLiAiLAogICAgICAgICBvZmZlcl90eXBlICBDKDUwKSBOT1QgTlVMTCwKICAgICAgICAgb2ZmZXJfZGF0YSAgQygyNTUpIE5PVCBOVUxMLAogICAgICAgICBleHRyYSBYCiAgICAgICAgIjsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKFBST01PVElPTlNfVEFCTEUsJGZsZHMsJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy8gQ29uZGl0aW9ucyB0YWJsZQokZmxkcyA9ICIKICAgICAgICAgaWQgSSBLRVkgQVVUTywKICAgICAgICAgcHJvbW90aW9uX2lkIEkgS0VZIE5PVCBOVUxMLAogICAgICAgICBjb25kX3R5cGUgQyg1MCkgTk9UIE5VTEwsCiAgICAgICAgIGRhdGEgWCBOT1QgTlVMTAogICAgICAgICI7CiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChQUk9NT1RJT05TX0NPTkRfVEFCTEUsJGZsZHMsJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKLy8gcGVybWlzc2lvbnMKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oUHJvbW90aW9uczo6TUFJTl9QRVJNLFByb21vdGlvbnM6Ok1BSU5fUEVSTSk7CgovLyBwcmVmZXJlbmNlcwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGZsdF9wcm9tb3Rpb25fcGVyaW9kJywxKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfdHlwZScsUFJPTU9USU9OU19PRkZFUl9QRVJDRU5UKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfb2ZmZXJfZGF0YScsJy4xJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdpbWFnZV9kaXInLCdpbWFnZXMnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vycm9yX2ludmFsaWRfY29kZScsJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRfY29kZScpKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Vycm9yX2VtcHR5X2NvZGUnLCR0aGlzLT5MYW5nKCdlcnJvcl9lbXB0eV9jb2RlJykpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnbXNnX3ZhbGlkX2NvZGUnLCR0aGlzLT5MYW5nKCdtc2dfdmFsaWRfY29kZScpKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NrdXJlcXVpcmVkJywxKTsKCi8vIHRlbXBsYXRlcwojIFNldHVwIGRlZmF1bHQgaGllcmFyY2h5IHJlcG9ydCB0ZW1wbGF0ZQokZm4gPSBjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCd0ZW1wbGF0ZXMnLCdvcmlnX2NvdXBvbmZvcm1fdGVtcGxhdGUudHBsJyk7CmlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQogIHsKICAgICR0ZW1wbGF0ZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCAkZm4gKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKFByb21vdGlvbnM6Ok5FV0NPVVBPTkZPUk1fVEVNUExBVEUsJHRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnY291cG9uZm9ybV9TYW1wbGUnLCR0ZW1wbGF0ZSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZShQcm9tb3Rpb25zOjpERkxUQ09VUE9ORk9STV9URU1QTEFURSwnU2FtcGxlJyk7CiAgfQoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgokZGIgPSYgJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoKJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggUFJPTU9USU9OU19UQUJMRSApOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cgokc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBQUk9NT1RJT05TX0NPTkRfVEFCTEUgKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCk7CiR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMTIgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwokZGIgPSBjbXNtcygpLT5HZXREYigpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgppZiggdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCcxLjEnKSA8IDAgKSB7CiAgJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChQUk9NT1RJT05TX1RBQkxFLCAnaXRlbV9vcmRlciBJIE5PVCBOVUxMLCB0eXBlIEMoMjUpIE5PVCBOVUxMLCBleHRyYSBYJyk7CiAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdza3VyZXF1aXJlZCcsMSk7CgogICRxdWVyeSA9ICdTRUxFQ1QgaWQsc3RhcnRfZGF0ZSBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4nIE9SREVSIEJZIHN0YXJ0X2RhdGUgQVNDJzsKICAkdG1wID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwogIGlmKCBpc19hcnJheSgkdG1wKSAmJiBjb3VudCgkdG1wKSApIHsKICAgICRxdWVyeSA9ICdVUERBVEUgJy5QUk9NT1RJT05TX1RBQkxFLicgc2V0IGl0ZW1fb3JkZXIgPSA/LCB0eXBlID0gPyBXSEVSRSBpZCA9ID8nOwogICAgJGlkeCA9IDE7CiAgICBmb3JlYWNoKCAkdG1wIGFzICRyb3cgKSB7CiAgICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHJvd1snaWQnXSxwcm9tb3Rpb246OlRZUEVfQ0hFQ0tPVVQsJGlkeCsrKSk7CiAgICB9CiAgfQp9CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/Promotions.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBjcmVhdGluZywgaW50ZXJmYWNpbmcgd2l0aAojICBhbmQgbWFuYWdpbmcgcHJvbW90aW9ucyBvciBzYWxlcyBpbiB0aGUgRS1jb21lbXJjZSBzdWl0ZS4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0cyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmRlZmluZSgnUFJPTU9USU9OU19UQUJMRScsY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfcHJvbW90aW9ucycpOwpkZWZpbmUoJ1BST01PVElPTlNfQ09ORF9UQUJMRScsY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfcHJvbW90aW9uc19jb25kJyk7CgpjbGFzcyBQcm9tb3Rpb25zIGV4dGVuZHMgQ0dFeHRlbnNpb25zCnsKICAgIGNvbnN0IE5FV0NPVVBPTkZPUk1fVEVNUExBVEUgID0gJ05FV0NPVVBPTkZPUk1fVEVNUExBVEUnOwogICAgY29uc3QgREZMVENPVVBPTkZPUk1fVEVNUExBVEUgPSAnREZMVENPVVBPTkZPUk1fVEVNUExBVEUnOwogICAgY29uc3QgTUFJTl9QRVJNICAgICAgICAgICAgICAgPSAnTWFuYWdlIFByb21vdGlvbnMnOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwoKICAgICAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CglpZiggISRzbWFydHkgKSByZXR1cm47CiAgICAgICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3Byb21vX2dldF9wcm9kX2Rpc2NvdW50JyxhcnJheSgnUHJvbW90aW9ucycsJ3NtYXJ0eV9mdW5jdGlvbl9wcm9tb19nZXRfcHJvZF9kaXNjb3VudCcpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0TmFtZSgpIHsgcmV0dXJuICdQcm9tb3Rpb25zJzsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7IHJldHVybiAnMS4yLjEnOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7IHJldHVybiAnMS4xMi4xJzsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKSB7IHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL2hlbHAuaW5jJyk7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3IoKSB7IHJldHVybiAnY2FsZ3V5MTAwMCc7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsgcmV0dXJuICdjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJzsgfQogICAgcHVibGljIGZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gdHJ1ZTsgfQogICAgcHVibGljIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsgcmV0dXJuICdlY29tbWVyY2UnOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOyB9CiAgICBwdWJsaWMgZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpIHsgcmV0dXJuIFRSVUU7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBMYXp5TG9hZEZyb250ZW5kKCkgeyByZXR1cm4gRkFMU0U7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7IHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL2NoYW5nZWxvZy5pbmMnKTsgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKFByb21vdGlvbnM6Ok1BSU5fUEVSTSkgfHwKICAgICAgICAgICAgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpIHx8CiAgICAgICAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KCdDR0V4dGVuc2lvbnMnPT4nMS41MycsICdPcmRlcnMnPT4nMS4xOC4yJywgJ0pRdWVyeVRvb2xzJz0+JzEuMy45JywgJ1Byb2R1Y3RzJz0+JzIuMjUnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7IH0KICAgIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsgfQogICAgcHVibGljIGZ1bmN0aW9uIEFsbG93QXV0b0luc3RhbGwoKSB7IHJldHVybiBGQUxTRTsgfQogICAgcHVibGljIGZ1bmN0aW9uIEFsbG93QXV0b1VwZ3JhZGUoKSB7IHJldHVybiBGQUxTRTsgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkKICAgIHsKICAgICAgICAkdGhpcy0+QWRkSW1hZ2VEaXIoJ2ljb25zJyk7CiAgICAgICAgJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7CiAgICAgICAgJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwoKICAgICAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdpbmxpbmUnLCdkZWZhdWx0JywkdGhpcy0+TGFuZygncGFyYW1faW5saW5lJykpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpbmxpbmUnLENMRUFOX0lOVCk7CgogICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3RlbXBsYXRlJywnJywkdGhpcy0+TGFuZygncGFyYW1fdGVtcGxhdGUnKSk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3RlbXBsYXRlJyxDTEVBTl9TVFJJTkcpOwoKICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZShDTEVBTl9SRUdFWFAuJy9wcm9tb18uKi8nLENMRUFOX1NUUklORyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKQogICAgewogICAgICAgIHJldHVybjsKICAgICAgICAkdHh0ID0gPDw8RU9UCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CmZpZWxkc2V0LmNnZmllbGRzZXQgewogIG1hcmdpbi1sZWZ0OiAyMCU7Cn0KbGVnZW5kLmNnbGVnZW5kIHsKICBmb250LXNpemU6IDFlbTsKICBmb250LXdlaWdodDogbm9ybWFsOwp9Ci5ub29mZnNldCB7CiAgbWFyZ2luLWxlZnQ6IDA7Cn0KPC9zdHlsZT4KRU9UOwogICAgICAgICRvYmogPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0pRdWVyeVRvb2xzJyk7CiAgICAgICAgaWYoIGlzX29iamVjdCgkb2JqKSApIHsKICAgICAgICAgICAgJHRtcGwgPSA8PDxFT1QKe0pRdWVyeVRvb2xzIGFjdGlvbj0naW5janMnIGV4Y2x1ZGU9J2Zvcm0nfQp7SlF1ZXJ5VG9vbHMgYWN0aW9uPSdyZWFkeSd9CkVPVDsKICAgICAgICAgICAgJHR4dCAuPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJHRtcGwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHR4dDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gSGFzQ2FwYWJpbGl0eSgkY2FwYWJpbGl0eSwgJHBhcmFtcz1hcnJheSgpKQogICAgewogICAgICAgIGlmKCAkY2FwYWJpbGl0eSA9PSAncHJvbW90aW9uc19jYWxjdWxhdGlvbicgKSAgcmV0dXJuIFRSVUU7CiAgICAgICAgcmV0dXJuIHBhcmVudDo6SGFzQ2FwYWJpbGl0eSgkY2FwYWJpbGl0eSwkcGFyYW1zKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbmQgYXBwbGljYWJsZSBwcm9tb3Rpb25zIGdpdmVuIGJhc2tldCBkZXRhaWxzLCBhbmQgb3RoZXIgaW5mb3JtYXRpb24KICAgICAqCiAgICAgKiBAcGFyYW0gaW50IFVzZXJJRCBmcm9tIEZFVSBtb2R1bGUKICAgICAqIEBwYXJhbSBhcnJheSBBcnJheSBvZiBpdGVtcyBpbiB0aGUgYmFza2V0IChhcnJheSBvZiBvYmplY3RzKQogICAgICogQHBhcmFtIGZsb2F0IHN1YnRvdGFsIG9mIG9yZGVyIChiZWZvcmUgdGF4ZXMgb3Igc2hpcHBpbmcpCiAgICAgKiBAcGFyYW0gZmxvYXQgd2VpZ2h0IG9mIG9yZGVyIChwcm9kdWN0cyBoYXMgdGhlIHVuaXRzKQogICAgICogQHBhcmFtIGludCAgIHVuaXggZm9ybWF0IGRhdGUgZm9yIHdoaWNoIG9yZGVyIGlzIGFwcGxpY2FibGUKICAgICAqIEByZXR1cm5zIGhhc2ggb2YgcHJvbW90aW9uIG5hbWUsIGFuZCBhbW91bnQgb2YgcHJvbW90aW9uLiAgcHJvbW90aW9uIHdpdGggaGlnaGVyIGRpc2NvdW50IHdpbnMuCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gRmluZFByb21vdGlvbnMoJGZldV91aWQsJGl0ZW1zLCRzdWJ0b3RhbCwkd2VpZ2h0LCRkYXRlID0gJycpCiAgICB7CiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBjb3VsZCB1c2UgcHJvbW90aW9uIHRlc3Rlci4uLiBidXQKICAgICAgICAvLyBpdCBleHBlY3RzIHRoYXQgdGhlIGl0ZW1zIGFyZSBjYXJ0IGl0ZW1zLgogICAgICAgIGlmKCBlbXB0eSgkZGF0ZSkgKSAkZGF0ZSA9IHRpbWUoKTsKICAgICAgICAkc2VzcyA9IG5ldyBjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgICAgICRkYXRlID0gJGRiLT5EYlRpbWVTdGFtcCgkZGF0ZSk7CgogICAgICAgIC8vIG5vdyB3ZSBoYXZlIGEgbGlzdCBvZiBwcm9tb3Rpb24gaWQncyBsb2FkIGVhY2ggcHJvbW90aW9uCiAgICAgICAgLy8gYW5kIHRlc3QgaXQuCiAgICAgICAgLy8gY2FsY3VsYXRlIHRoZSBkaXNjb3VudHMgYXBwbGllZCBmb3IgYWxsIGxpbmUgaXRlbXMKICAgICAgICAvLyBhbmQgY2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiB0aGVtLgogICAgICAgICRwcm9tb3MgPSBwcm9tb3Rpb246OmxvYWRfYWxsX2J5X3R5cGUocHJvbW90aW9uOjpUWVBFX0NIRUNLT1VUKTsKICAgICAgICAkZGlzY291bnRfYW10ID0gMTAwMDAwMDA7CiAgICAgICAgJGRpc2NvdW50X2l0ZW1zID0gJyc7CiAgICAgICAgZm9yZWFjaCggJHByb21vcyBhcyAkcHJvbW8gKSB7CiAgICAgICAgICAgICRtYXRjaF90eXBlID0gJyc7CgogICAgICAgICAgICAvLyBjaGVjayBhbGwgb2YgdGhlIGNvbmRpdGlvbnMgaW4gdGhlIHByb21vdGlvbgogICAgICAgICAgICAkbWF0Y2ggPSB0cnVlOwogICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgICAgICAgICAgICRjb25kaXRpb24gPSAkcHJvbW8tPmdldF9jb25kaXRpb24oJGkpOwoKICAgICAgICAgICAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgogICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3RfZmV1X3VpZCgkZmV1X3VpZCwkcHJvbW8pICkgewogICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1NVQlRPVEFMOgogICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3Rfb3JkZXJfc3VidG90YWwoJHN1YnRvdGFsLCRwcm9tbykgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OOgogICAgICAgICAgICAgICAgICAgICRjb3Vwb25zID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwogICAgICAgICAgICAgICAgICAgIGlmKCAkY291cG9ucyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVzdCBhbGwgb2Ygb3VyIGNvdXBvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICRjb3Vwb25zIGFzICRjb3Vwb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggcHJvbW9fdGVzdHM6OnRlc3RfY291cG9uKCRjb3Vwb24sJHByb21vKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGVzdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoICEkdGVzdCApICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1dFSUdIVDoKICAgICAgICAgICAgICAgICAgICBpZiggIXByb21vX3Rlc3RzOjp0ZXN0X29yZGVyX3dlaWdodCgkd2VpZ2h0LCRwcm9tbykgKSAkbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CiAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9tb190ZXN0czo6dGVzdF9zaW5nbGVfcHJvZHVjdCgkaXRlbXMsJHByb21vKSApICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgUFJPTU9USU9OU19DT05EX1BST0RDQVQ6CiAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9tb190ZXN0czo6dGVzdF9wcm9kdWN0X2Zyb21fY2F0ZWdvcnkoJGl0ZW1zLCRwcm9tbykgKSAkbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESElFUjoKICAgICAgICAgICAgICAgICAgICBpZiggIXByb21vX3Rlc3RzOjp0ZXN0X3Byb2R1Y3RfZnJvbV9oaWVyYXJjaHkoJGl0ZW1zLCRwcm9tbykgKSAkbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBpZiBvbmUgY29uZGl0aW9uIGRvZXMgbm90IG1hdGNoLCB0aGUgdGVzdCBmYWlscy4KICAgICAgICAgICAgICAgIGlmKCAhJG1hdGNoICkgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGNoZWNrIHRoZSB2YWx1ZSBvZiB0aGUgZGlzY291bnQKICAgICAgICAgICAgaWYoICRtYXRjaCApIHsKICAgICAgICAgICAgICAgICRhZGpfaXRlbXMgPSBwcm9tb19vcHM6OmNhbGN1bGF0ZV9kaXNjb3VudCgkcHJvbW8sJHN1YnRvdGFsLCRpdGVtcyk7CiAgICAgICAgICAgICAgICAkYWRqX2FtdCAgID0gcHJvbW9fb3BzOjpjYWxjX3RvdGFsX2Rpc2NvdW50KCRhZGpfaXRlbXMpOwogICAgICAgICAgICAgICAgaWYoICRkaXNjb3VudF9hbXQgPiAkYWRqX2FtdCApIHsKICAgICAgICAgICAgICAgICAgICAkZGlzY291bnRfYW10ID0gJGFkal9hbXQ7CiAgICAgICAgICAgICAgICAgICAgJGRpc2NvdW50X2l0ZW1zID0gJGFkal9pdGVtczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSAvLyBmb3JlYWNoCgogICAgICAgIHJldHVybiAkZGlzY291bnRfaXRlbXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBDYWxjdWxhdGUgdGhlIGJlc3QgZGlzY291bnQgZm9yIGEgcHJvZHVjdCBnaXZlbiBhbiBGRVUgdXNlciBpZCwgYW5kIGEgcHJvZHVjdCBpZC4KICAgICAqCiAgICAgKiBAcmV0dXJucyBhIGhhc2ggb2YgcmVzdWx0cyBmb3IgdGhlIGJlc3QgZGlzY291bnQgZm91bmQgb3IgRkFMU0UuCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9kaXNjb3VudF9mb3JfcHJvZHVjdCgkZmV1X3VpZCwkcHJvZHVjdF9pZCkKICAgIHsKICAgICAgICAkc2VzcyA9IG5ldyBjZ2Vfc2Vzc2lvbignUHJvbW90aW9ucycpOwogICAgICAgICRnQ21zID0gY21zbXMoKTsKICAgICAgICAkZGIgPSAkZ0Ntcy0+R2V0RGIoKTsKICAgICAgICAkZGF0ZSA9ICRkYi0+RGJUaW1lU3RhbXAodGltZSgpKTsKCiAgICAgICAgLy8gZ2V0IGEgbGlzdCBvZiB0aGUgY3VycmVudGx5IHZhbGlkIHByb21vdGlvbnMuCiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuUFJPTU9USU9OU19UQUJMRS4iCiAgICAgICAgICAgICAgIFdIRVJFIChzdGFydF9kYXRlIDw9ICRkYXRlKSBBTkQgKGVuZF9kYXRlID49ICRkYXRlKQogICAgICAgICAgICAgICBPUkRFUiBCWSBpdGVtX29yZGVyLG9mZmVyX3R5cGUgQVNDIjsKICAgICAgICAkcHJvbW90aW9uX2lkcyA9ICRkYi0+R2V0Q29sKCRxdWVyeSk7CiAgICAgICAgaWYoICEkcHJvbW90aW9uX2lkcyApIHJldHVybiBGQUxTRTsKCiAgICAgICAgLy8gbm93IHdlIGhhdmUgYSBsaXN0IG9mIHByb21vdGlvbnMgYXBwbGljYWJsZSBmb3IgdGhpcyBkYXRlCiAgICAgICAgLy8gbG9hZCBlYWNoIG9uZSBhbmQgdGVzdCBpdC4KICAgICAgICAkYmVzdF9kaXNjb3VudCA9ICcnOwogICAgICAgIGZvcmVhY2goICRwcm9tb3Rpb25faWRzIGFzICRwcm9tb19pZCApIHsKICAgICAgICAgICAgJHByb21vID0gcHJvbW9fb3BzOjpsb2FkX3Byb21vX2J5X2lkKCRwcm9tb19pZCk7CiAgICAgICAgICAgIGlmKCAhJHByb21vICkgY29udGludWU7CgogICAgICAgICAgICAkbWF0Y2ggPSB0cnVlOwogICAgICAgICAgICBmb3IoICRpID0gMDsgJGkgPCAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKTsgJGkrKyApIHsKICAgICAgICAgICAgICAgICRjb25kaXRpb24gPSAkcHJvbW8tPmdldF9jb25kaXRpb24oJGkpOwoKICAgICAgICAgICAgICAgIHN3aXRjaCggJGNvbmRpdGlvbi0+Z2V0X2NvbmRfdHlwZSgpICkgewogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfRkVVOgogICAgICAgICAgICAgICAgICAgIGlmKCAhcHJvbW9fdGVzdHM6OnRlc3RfZmV1X3VpZCgkZmV1X3VpZCwkcHJvbW8pICkgJG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfQ09VUE9OOgogICAgICAgICAgICAgICAgICAgICRjb3Vwb25zID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwogICAgICAgICAgICAgICAgICAgIGlmKCAkY291cG9ucyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVzdCBhbGwgb2Ygb3VyIGNvdXBvbnMuCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goICRjb3Vwb25zIGFzICRjb3Vwb24gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggcHJvbW9fdGVzdHM6OnRlc3RfY291cG9uKCRjb3Vwb24sJHByb21vKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGVzdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoICEkdGVzdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESUQ6CiAgICAgICAgICAgICAgICAgICAgaWYoICFwcm9tb190ZXN0czo6c2luZ2xlX3Byb2R1Y3RfbWF0Y2hlcygkcHJvbW8sJHByb2R1Y3RfaWQpICkgJG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBQUk9NT1RJT05TX0NPTkRfUFJPRENBVDoKICAgICAgICAgICAgICAgICAgICBpZiggIXByb21vX3Rlc3RzOjpzaW5nbGVfcHJvZHVjdF9mcm9tX2NhdGVnb3J5KCRwcm9tbywkcHJvZHVjdF9pZCkgKSAkbWF0Y2ggPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFBST01PVElPTlNfQ09ORF9QUk9ESElFUjoKICAgICAgICAgICAgICAgICAgICBpZiggIXByb21vX3Rlc3RzOjpzaW5nbGVfcHJvZHVjdF9mcm9tX2hpZXJhcmNoeSgkcHJvbW8sJHByb2R1Y3RfaWQpICkgJG1hdGNoID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCAkbWF0Y2ggKSB7CiAgICAgICAgICAgICAgICAvLyB0aGlzIHByb21vdGlvbiBtYXRjaGVzIHRoZSBwcm9kdWN0IGlkCiAgICAgICAgICAgICAgICAkcmVzID0gcHJvbW9fb3BzOjpjYWxjdWxhdGVfcHJvZHVjdF9kaXNjb3VudCgkcHJvbW8sJHByb2R1Y3RfaWQpOwogICAgICAgICAgICAgICAgaWYoIGlzX2FycmF5KCRyZXMpICkgewogICAgICAgICAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoJGJlc3RfZGlzY291bnQpICkgewogICAgICAgICAgICAgICAgICAgICAgICAkYmVzdF9kaXNjb3VudCA9ICRyZXM7CiAgICAgICAgICAgICAgICAgICAgICAgICRiZXN0X2Rpc2NvdW50Wydwcm9tb19pZCddID0gJHByb21vLT5nZXRfaWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiggJHJlc1sncGVyY2VudGFnZSddIDwgJGJlc3RfZGlzY291bnRbJ3BlcmNlbnRhZ2UnXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGJlc3RfZGlzY291bnQgPSAkcmVzOwogICAgICAgICAgICAgICAgICAgICAgICAkYmVzdF9kaXNjb3VudFsncHJvbW9faWQnXSA9ICRwcm9tby0+Z2V0X2lkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiggaXNfYXJyYXkoJGJlc3RfZGlzY291bnQpICkgcmV0dXJuICRiZXN0X2Rpc2NvdW50OwogICAgICAgIHJldHVybiBGQUxTRTsKICAgIH0KCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGNsZWFyX2NvdXBvbnMoKQogICAgewogICAgICAgICRzZXNzID0gbmV3IGNnZV9zZXNzaW9uKCdQcm9tb3Rpb25zJyk7CiAgICAgICAgJHNlc3MtPmNsZWFyKCk7CiAgICB9CgogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBhZGRfY291cG9uKCRjb2RlKQogICAgewogICAgICAgICRzZXNzID0gbmV3IGNnZV9zZXNzaW9uKCdQcm9tb3Rpb25zJyk7CiAgICAgICAgJHRtcCA9ICRzZXNzLT5nZXQoJ2NvdXBvbnMnLCcnKTsKICAgICAgICBpZiggaXNfYXJyYXkoJHRtcCkgKSB7CiAgICAgICAgICAgIGlmKCAhaW5fYXJyYXkoJGNvZGUsJHRtcCkgKSAkdG1wW10gPSAkY29kZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgICAgICAkdG1wW10gPSAkY29kZTsKICAgICAgICB9CiAgICAgICAgJHNlc3MtPnB1dCgnY291cG9ucycsJHRtcCk7CiAgICB9CgogICAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfY291cG9ucygpCiAgICB7CiAgICAgICAgJHNlc3MgPSBuZXcgY2dlX3Nlc3Npb24oJ1Byb21vdGlvbnMnKTsKICAgICAgICAkdG1wID0gJHNlc3MtPmdldCgnY291cG9ucycsJycpOwogICAgICAgIGlmKCBpc19hcnJheSgkdG1wKSApIHJldHVybiAkdG1wOwogICAgfQoKICAgIC8qKgogICAgICogQSBzbWFydHkgcGx1Z2luIGZvciBmaW5kaW5nIHRoZSBkaXNjb3VudCBmb3IgYSBwcm9kdWN0CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc21hcnR5X2Z1bmN0aW9uX3Byb21vX2dldF9wcm9kX2Rpc2NvdW50KCRwYXJhbXMsJiRzbWFydHkpCiAgICB7CiAgICAgICAgJGZldV91aWQgPSAtMTsKICAgICAgICAkcHJvZHVjdF9pZCA9IC0xOwogICAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydmZXVfdWlkJ10pICkgewogICAgICAgICAgICAkZmV1X3VpZCA9IChpbnQpJHBhcmFtc1snZmV1X3VpZCddOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJGZldV9tb2R1bGUgPSBtb2R1bGVfaGVscGVyOjpnZXRfaW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKICAgICAgICAgICAgJGZldV91aWQgPSAkZmV1X21vZHVsZS0+TG9nZ2VkSW5JZCgpOwogICAgICAgIH0KCiAgICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3Byb2R1Y3RfaWQnXSkgKSAkcHJvZHVjdF9pZCA9IChpbnQpJHBhcmFtc1sncHJvZHVjdF9pZCddOwoKICAgICAgICBpZiggJHByb2R1Y3RfaWQgPCAxIHx8ICRmZXVfdWlkIDwgMSApIHJldHVybjsgIC8vIGludmFsaWQvaW5zdWZmaWNpZW50IHBhcmFtcwoKICAgICAgICAkcmVzID0gc2VsZjo6Z2V0X2Rpc2NvdW50X2Zvcl9wcm9kdWN0KCRmZXVfdWlkLCRwcm9kdWN0X2lkKTsKICAgICAgICBpZiggJHJlcyApIHsKICAgICAgICAgICAgJHJlc1snZGVjaW1hbCddID0gJHJlc1sncGVyY2VudGFnZSddOwogICAgICAgICAgICAkcmVzWydwZXJjZW50YWdlJ10gKj0gMTAwLjA7CiAgICAgICAgfQogICAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkgKSB7CiAgICAgICAgICAgICRzbWFydHktPmFzc2lnbigkcGFyYW1zWydhc3NpZ24nXSwkcmVzKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gJmdldF90ZXN0X29iamVjdCgpCiAgICB7CiAgICAgICAgJG9iID0gbmV3IHByb21vdGlvbl90ZXN0ZXIoKTsKICAgICAgICByZXR1cm4gJG9iOwogICAgfQp9IC8vIGNsYXNzCgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/skeleton.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFByb21vdGlvbnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IGNyZWF0aW5nLCBpbnRlcmZhY2luZyB3aXRoCiMgIGFuZCBtYW5hZ2luZyBwcm9tb3Rpb25zIG9yIHNhbGVzIGluIHRoZSBFLWNvbWVtcmNlIHN1aXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQ7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_addpromo.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRwcm9tby0+Z2V0X2lkKCkgPT0gJyd9CiAgPGgzPnskbW9kLT5MYW5nKCdsYmxfYWRkX3Byb21vJyl9PC9oMz4Ke2Vsc2V9CiAgPGgzPnskbW9kLT5MYW5nKCdsYmxfZWRpdF9wcm9tbycpfTwvaDM+CnsvaWZ9CjxoND57JG1vZC0+TGFuZygndHlwZScpfTogeyRtb2QtPkxhbmcoJHByb21vdHlwZSl9ICh7JHByb21vdHlwZX0pPC9oND4KCjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KLy8gPCFbQ0RBVEFbIAp2YXIgY29uZGl0aW9ucyA9IHt9Owp7Zm9yZWFjaCAkY29uZGl0aW9udHlwZXMgYXMgJGtleSA9PiAkcmVjfQpjb25kaXRpb25zLnska2V5fSA9IHsKICBuYW1lOiAneyRyZWMubmFtZX0nLAogIGxhYmVsOiAneyRyZWMubGFiZWx9JywKICBmaWVsZHM6IFsge2ZvciAkaSA9IDEgdG8gY291bnQoJHJlYy5maWVsZHMpfXskdG1wPSRyZWMuZmllbGRzWyRpLTFdfSd7JHRtcH0nLHsvZm9yfSBdCn0Key9mb3JlYWNofQoKdmFyIG9mZmVyX3Byb21wdHMgPSBuZXcgQXJyYXkoKTsKe2ZvcmVhY2ggZnJvbT0kb2ZmZXJ0eXBlcyBrZXk9J25hbWUnIGl0ZW09J3ZhbHVlJ30Ke2NhcHR1cmUgYXNzaWduPSd0bXAnfXByb21wdG9mZmVyX3skbmFtZX17L2NhcHR1cmV9Cm9mZmVyX3Byb21wdHNbInskbmFtZX0iXSA9ICJ7JG1vZC0+TGFuZygkdG1wKX0iOwp7L2ZvcmVhY2h9CnZhciBlcnJvcnMgPSBuZXcgQXJyYXkoKTsKZXJyb3JzWydub192YWx1ZSddID0gInskbW9kLT5MYW5nKCdlcnJvcl9zcGVjaWZ5X3ZhbHVlJyl9IjsKZXJyb3JzWydhbHJlYWR5X3Byb2QnXSA9ICJ7JG1vZC0+TGFuZygnZXJyb3JfYWxyZWFkeV9wcm9kdWN0X2NvbmQnKX0iOwplcnJvcnNbJ2R1cGxpY2F0ZV90eXBlJ10gPSAieyRtb2QtPkxhbmcoJ2Vycm9yX2R1cGxpY2F0ZV9jb25kaXRpb24nKX0iOwplcnJvcnNbJ25vX25hbWUnXSA9ICJ7JG1vZC0+TGFuZygnZXJyb3JfcHJvbW90aW9uX25hbWUnKX0iOwplcnJvcnNbJ25vX29mZmVyX2RhdGEnXSA9ICJ7JG1vZC0+TGFuZygnZXJyb3Jfbm9fb2ZmZXJfZGF0YScpfSI7CmVycm9yc1snbm9fY29uZGl0aW9ucyddID0gInskbW9kLT5MYW5nKCd3YXJuaW5nX25vX2NvbmRpdGlvbnMnKX0iOwoKZnVuY3Rpb24gaXNOdW1lcmljKGZvcm1fdmFsdWUpIHsKICBpZiAoZm9ybV92YWx1ZS5tYXRjaCgvXlxkKyQvKSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7IAp9IAoKZnVuY3Rpb24gaW5fYXJyYXkobmVlZGxlLGhheXN0YWNrKSB7CiAgZm9yKCBpID0gMDsgaSA8IGhheXN0YWNrLmxlbmd0aDsgaSsrICkgewogICAgaWYoIGhheXN0YWNrW2ldID09IG5lZWRsZSApIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIGdldF9jb25kaXRpb25zKCkgewogIHZhciBjb25kcyA9IFtdOwogICQoJyNjb25kZGF0YSBkaXYuY29uZGl0aW9uX2RhdGEnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICB2YXIgdHlwZSA9ICQodGhpcykuZmluZCgnLnNhdmVkX2NvbmR0eXBlJykudmFsKCk7CiAgICB2YXIgZGF0YSA9IFtdOwogICAgZGF0YS5wdXNoKCQodGhpcykuZmluZCgnLnNhdmVkX2NvbmRkYXRhMCcpLnZhbCgpKTsKICAgIHZhciB2ID0gJCh0aGlzKS5maW5kKCcuc2F2ZWRfY29uZGRhdGExJykudmFsKCk7CiAgICBpZiggdHlwZW9mIHYgIT0gJ3VuZGVmaW5lZCcgJiYgdi5sZW5ndGggPiAwICkgZGF0YS5wdXNoKHYpOwogICAgY29uZHNbdHlwZV0gPSBkYXRhOwogIH0pOwogIHJldHVybiBjb25kczsKfQoKZnVuY3Rpb24gY29uZGl0aW9uX2ludmFsaWQodHlwZSkgewogIHZhciBjb25kcyA9IGdldF9jb25kaXRpb25zKCk7CiAgLy8gcGFzcyBvbmUsIGxvb2sgZm9yIGR1cGxpY2F0ZSB0eXBlcwogIGZvciggdmFyIGN0eXBlIGluIGNvbmRzICkgewogICAgaWYoIGN0eXBlID09IHR5cGUgKSByZXR1cm4gJ2R1cGxpY2F0ZV90eXBlJzsKICB9CgogIC8vIHBhc3MgdHdvLCBsb29rIGZvciBkdXBsaWNhdGUgcHJvZHVjdCB0eXBlcwogIGZvciggdmFyIGN0eXBlIGluIGNvbmRzICkgewogICAgaWYoIGN0eXBlLm1hdGNoKC9QUk9ELykgJiYgdHlwZS5tYXRjaCgvUFJPRC8pICkgcmV0dXJuICdhbHJlYWR5X3Byb2QnOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIF9hZGRfY29uZGl0aW9uKHR5cGUsZGF0YSkKewogIHZhciBfZGF0YV9hcmVhID0gJCgnZGl2I2NvbmRpdGlvbl90ZW1wbGF0ZSBkaXYuY29uZGl0aW9uX2RhdGEnKS5jbG9uZSgpOwogIHZhciBfZGlzcF9hcmVhID0gJCgnZGl2I2NvbmRpdGlvbl90ZW1wbGF0ZSB0ci5jb25kaXRpb25fcm93JykuY2xvbmUoKTsKCiAgJCgnaW5wdXQuY29uZHR5cGUnLF9kYXRhX2FyZWEpLnZhbCh0eXBlKTsKICAkKCd0ZC5kaXNwdHlwZScsX2Rpc3BfYXJlYSkuaHRtbChjb25kaXRpb25zW3R5cGVdLmxhYmVsKTsKICBpZiggZGF0YS5sZW5ndGggPiAwICkgewogICAgJCgnaW5wdXQuY29uZGRhdGEwJyxfZGF0YV9hcmVhKS52YWwoZGF0YVswXSk7CiAgICAkKCd0ZC5kaXNwZGF0YTAnLF9kaXNwX2FyZWEpLmh0bWwoZGF0YVswXSk7CiAgfQogIGlmKCBkYXRhLmxlbmd0aCA+IDEgKSB7CiAgICAkKCdpbnB1dC5jb25kZGF0YTEnLF9kYXRhX2FyZWEpLnZhbChkYXRhWzFdKTsKICAgICQoJy5kaXNwZGF0YTEnLF9kaXNwX2FyZWEpLmh0bWwoZGF0YVsxXSk7CiAgfQogICQoJyNjb25kZGF0YScpLmFwcGVuZChfZGF0YV9hcmVhKTsKICAkKCcjY29uZHRhYmxlJykuYXBwZW5kKF9kaXNwX2FyZWEpOwp9CgpmdW5jdGlvbiBfaGFuZGxlX2luaXRpYWxfY29uZGl0aW9ucygpCnsKICAvLyBoYW5kbGUgaW5pdGlhbCBjb25kaXRpb25zCiAgdmFyIHRtcDsKICB7Zm9yICRpID0gMSB0byAkcHJvbW8tPmNvdW50X2NvbmRpdGlvbnMoKX0KICB7JGNvbmQ9JHByb21vLT5nZXRfY29uZGl0aW9uKCRpLTEpfQogIHskZGF0YT0kY29uZC0+Z2V0X2RhdGEoKX0KICB0bXAgPSBbXTsKICB7Zm9yZWFjaCAkZGF0YSBhcyAkb25lfQogIHRtcC5wdXNoKCd7JG9uZX0nKTsKICB7L2ZvcmVhY2h9CiAgX2FkZF9jb25kaXRpb24oJ3skY29uZC0+Z2V0X2NvbmRfdHlwZSgpfScsdG1wKTsKICB7L2Zvcn0KICAkKCcjY29uZGxpc3QgPiAuY29uZGl0aW9uX3JvdycpLnNob3coKTsKfQoKalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogIF9oYW5kbGVfaW5pdGlhbF9jb25kaXRpb25zKCk7CgogIC8vIGhhbmRsZXIgZm9yIGV4dHJhIGFyZWEKICBqUXVlcnkoJyNleHRyYXMnKS5oaWRlKCk7CiAgalF1ZXJ5KCcjbGlua2V4dHJhcycpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICBqUXVlcnkoJyNleHRyYXMnKS50b2dnbGUoKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gc2V0dXAgaW5pdGlhbCBjb25kaXRpb24gbGlzdCBzdHVmZi4KICAkKGRvY3VtZW50KS5vbignY2xpY2snLCdhLmRlbGNvbmQnLGZ1bmN0aW9uKCl7CiAgICB2YXIgcm93ID0gJCh0aGlzKS5jbG9zZXN0KCd0ci5jb25kaXRpb25fcm93Jyk7CiAgICB2YXIgaWR4ID0gJChyb3cpLmluZGV4KCk7CiAgICAkKCdkaXYjY29uZGRhdGEgZGl2LmNvbmRpdGlvbl9kYXRhJykuZXEoaWR4KS5yZW1vdmUoKTsKICAgICQocm93KS5yZW1vdmUoKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gaW5pdGlhbGl6ZSB0aGUgb2ZmZXIgcHJvbXB0CiAgdHlwZSA9IGpRdWVyeSgnI29mZmVydHlwZScpLnZhbCgpOwogICQoJyNvZmZlcmRhdGEnKS5odG1sKG9mZmVyX3Byb21wdHNbdHlwZV0pOwogICQoJyMnK3R5cGUpLnNob3coKTsKICAkKCcjb2ZmZXJ0eXBlJykuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICAvLyBvZmZlciB0eXBlIGNoYW5nZWQKICAgIHZhciB0eXBlID0galF1ZXJ5KCcjb2ZmZXJ0eXBlJykudmFsKCk7CiAgICAkKCcjb2ZmZXJkYXRhJykuaHRtbChvZmZlcl9wcm9tcHRzW3R5cGVdKTsKICAgICQoJy5vZmZlcl9leHRyYScpLmhpZGUoKTsKICAgICQoJyMnK3R5cGUpLnNob3coKTsKICB9KTsKIAogIC8vIGhhbmRsZSBjb25kaXRpb24gdHlwZSBjaGFuZ2VkCiAgJCgnI2NvbmR0eXBlJykuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICAvLyBjb25kaXRpb24gdHlwZSBjaGFuZ2VkCiAgICB2YXIgdHlwZSA9ICQoJyNjb25kdHlwZScpLnZhbCgpOwogICAgdmFyIG4gPSBjb25kaXRpb25zW3R5cGVdLmZpZWxkcy5sZW5ndGg7CiAgICB0eXBlID0gY29uZGl0aW9uc1t0eXBlXTsKICAgICQoJ2Rpdi5jb25kZGF0YScpLmhpZGUoKTsKICAgICQoJ2Rpdi5jb25kZGF0YSBpbnB1dCcpLmF0dHIoJ2Rpc2FibGVkJywnZGlzYWJsZWQnKTsKICAgIGZvciggdmFyIGkgPSAwOyBpIDwgbjsgaSsrICkgewogICAgICAkKCdwI2RhdGFwcm9tcHQnK2kpLmh0bWwodHlwZS5maWVsZHNbaV0rJzonKTsKICAgICAgJCgnZGl2I2Rpdl9jb25kZGF0YScraSsnIGlucHV0JykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTsKICAgICAgJCgnZGl2I2Rpdl9jb25kZGF0YScraSkuc2hvdygpOwogICAgfSAgICAKICB9KTsKICAkKCcjY29uZHR5cGUnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKCiAgLy8gaGFuZGxlIGFkZCBjb25kaXRpb24gY2xpY2tlZC4KICAkKGRvY3VtZW50KS5vbignY2xpY2snLCcjYWRkYnRuJyxmdW5jdGlvbigpewogICAgdmFyIHR5cGUgPSAkKCcjY29uZHR5cGUnKS52YWwoKTsKICAgIHZhciBuID0gY29uZGl0aW9uc1t0eXBlXS5maWVsZHMubGVuZ3RoOwoKICAgIHZhciBjb25kdHlwZSA9ICQoJyNjb25kdHlwZScpLnZhbCgpOwogICAgdmFyIGRhdGEgPSBbXTsKICAgIHZhciB0ID0gJCgnI2NvbmRkYXRhMCcpLnZhbCgpOwogICAgaWYoIHR5cGVvZiB0ICE9ICd1bmRlZmluZWQnICYmIHQubGVuZ3RoID4gMCApIGRhdGEucHVzaCh0KTsKICAgIHQgPSAkKCcjY29uZGRhdGExJykudmFsKCk7CiAgICBpZiggdHlwZW9mIHQgIT0gJ3VuZGVmaW5lZCcgJiYgdC5sZW5ndGggPiAwICkgZGF0YS5wdXNoKHQpOwoKICAgIGlmKCBkYXRhLmxlbmd0aCAhPSBuICkgewogICAgICBhbGVydChlcnJvcnNbJ25vX3ZhbHVlJ10pOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYoIGNvbmR0eXBlID09ICdQUk9NT1RJT05TX0NPTkRfUFJPRElEJyApIHsKICAgICAgaWYoIHBhcnNlSW50KGNvbmRkYXRhKSA8PSAwICkgewogICAgICAgIGFsZXJ0KGVycm9yc1snaW52YWxpZF92YWx1ZSddKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYoIGNvbmR0eXBlID09ICdQUk9NT1RJT05TX0NPTkRfU1VCVE9UQUwnICkgewogICAgICAvLyB0b2RvLCBlcnJvciBjaGVjayBoZXJlCiAgICB9CiAgICBlcnJvciA9IGNvbmRpdGlvbl9pbnZhbGlkKGNvbmR0eXBlKTsKICAgIGlmKCBlcnJvciApIHsKICAgICAgYWxlcnQoZXJyb3JzW2Vycm9yXSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBfYWRkX2NvbmRpdGlvbihjb25kdHlwZSxkYXRhKTsKICAgIHJldHVybiBmYWxzZTsKICB9KTsKCiAgLy8gaGFuZGxlZm9ybSBzdWJtaXQKICBqUXVlcnkoJyNzdWJtaXQnKS5saXZlKCdjbGljaycsZnVuY3Rpb24oKXsKICAgIHZhciBuYW1lID0galF1ZXJ5KCcjbmFtZScpLnZhbCgpOwogICAgdmFyIG9mZmVyZGF0YSA9IGpRdWVyeSgnI29mZmVyX2RhdGEnKS52YWwoKTsKICAgIGlmKCBuYW1lID09ICcnICkgewogICAgICBhbGVydChlcnJvcnNbJ25vX25hbWUnXSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmKCBvZmZlcmRhdGEgPT0gJycgKSB7CiAgICAgIGFsZXJ0KGVycm9yc1snbm9fb2ZmZXJfZGF0YSddKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgLy8gd2FybiBhYm91dCBubyBjb25kaXRpb25zLgogICAgaWYoIGpRdWVyeSgnZGl2I2NvbmRkYXRhJykuY2hpbGRyZW4oKS5zaXplKCkgPT0gMCApIHsKICAgICAgcmV0dXJuIGNvbmZpcm0oZXJyb3JzWydub19jb25kaXRpb25zJ10pOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgICAvLyBzdWNjZXNzCiAgfSk7Cgp9KTsKLy8gXV0+Cjwvc2NyaXB0PgoKPGRpdiBpZD0iY29uZGl0aW9uX3RlbXBsYXRlIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogIDxkaXYgY2xhc3M9ImNvbmRpdGlvbl9kYXRhIj4KICAgIDxpbnB1dCBjbGFzcz0iY29uZHR5cGUiICB0eXBlPSJoaWRkZW4iIHJlYWRvbmx5PSJyZWFkb25seSIgbmFtZT0ieyRhY3Rpb25pZH1zYXZlZF9jb25kdHlwZVtdIiAgc2l6ZT0iNTAiLz4KICAgIDxpbnB1dCBjbGFzcz0iY29uZGRhdGEwIiB0eXBlPSJoaWRkZW4iIHJlYWRvbmx5PSJyZWFkb25seSIgbmFtZT0ieyRhY3Rpb25pZH1zYXZlZF9jb25kZGF0YTBbXSIgc2l6ZT0iNTAiLz4KICAgIDxpbnB1dCBjbGFzcz0iY29uZGRhdGExIiB0eXBlPSJoaWRkZW4iIHJlYWRvbmx5PSJyZWFkb25seSIgbmFtZT0ieyRhY3Rpb25pZH1zYXZlZF9jb25kZGF0YTFbXSIgc2l6ZT0iNTAiLz4KICA8L2Rpdj4KCiAgPHRhYmxlPgogICAgPHRyIGNsYXNzPSJjb25kaXRpb25fcm93Ij4KICAgICAgPHRkIGNsYXNzPSJkaXNwdHlwZSI+PC90ZD4KICAgICAgPHRkIGNsYXNzPSJkaXNwZGF0YTAiPjwvdGQ+CiAgICAgIDx0ZCBjbGFzcz0iZGlzcGRhdGExIj48L3RkPgogICAgICA8dGQ+PGEgY2xhc3M9ImRlbGNvbmQiIGhyZWY9IiMiPntjZ2ltYWdlIGltYWdlPSdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicgYWx0PSRtb2QtPkxhbmcoJ2RlbGV0ZScpfTwvYT48L3RkPgogICAgPC90cj4KICA8L3RhYmxlPgo8L2Rpdj4KCnskZm9ybXN0YXJ0fQoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSdzdWJtaXQnIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIgLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9Y2FuY2VsIiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ2NhbmNlbCcpfSIgLz4KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfbmFtZScpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9J25hbWUnIG5hbWU9InskYWN0aW9uaWR9bmFtZSIgdmFsdWU9InskcHJvbW8tPmdldF9uYW1lKCl9IiBzaXplPSI4MCIgbWF4bGVuZ3RoPSIyNTUiIC8+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3N0YXJ0X2RhdGUnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAge2NhcHR1cmUgYXNzaWduPSd0bXAnfXskYWN0aW9uaWR9c3RhcnRfZGF0ZV97L2NhcHR1cmV9CiAgICB7aHRtbF9zZWxlY3RfZGF0ZSBwcmVmaXg9JHRtcCB0aW1lPSRwcm9tby0+Z2V0X3N0YXJ0X2RhdGUoKSBlbmRfeWVhcj0iKzUifQogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9lbmRfZGF0ZScpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7Y2FwdHVyZSBhc3NpZ249J3RtcCd9eyRhY3Rpb25pZH1lbmRfZGF0ZV97L2NhcHR1cmV9CiAgICB7aHRtbF9zZWxlY3RfZGF0ZSBwcmVmaXg9JHRtcCB0aW1lPSRwcm9tby0+Z2V0X2VuZF9kYXRlKCkgZW5kX3llYXI9Iis1In0KICA8L3A+CjwvZGl2PgoKPGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3Byb21wdF9vZmZlcicpfTo8L2xlZ2VuZD4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3cgbm9vZmZzZXQiPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0IG5vb2Zmc2V0Ij4KICAgICAgeyRtb2QtPkxhbmcoJ3Byb21wdF9vZmZlcl90eXBlJyl9OgogICAgPC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCBub29mZnNldCI+CiAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1vZmZlcl90eXBlIiBpZD0ib2ZmZXJ0eXBlIj4KICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRvZmZlcnR5cGVzIHNlbGVjdGVkPSRwcm9tby0+Z2V0X29mZmVyX3R5cGUoKX0KICAgICAgPC9zZWxlY3Q+CiAgICA8L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQgbm9vZmZzZXQiIGlkPSJvZmZlcmRhdGEiPgogICAgICB7JG1vZC0+TGFuZygncHJvbXB0X29mZmVyX2RhdGEnKX06CiAgICA8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0IG5vb2Zmc2ZmZXQiPgogICAgICA8aW5wdXQgaWQ9Im9mZmVyX2RhdGEiIHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9b2ZmZXJfZGF0YSIgc2l6ZT0iMTAiIG1heGxlbmd0aD0iMjU1IiB2YWx1ZT0ieyRwcm9tby0+Z2V0X29mZmVyX2RhdGEoKX0iLz4KICAgIDwvcD4KICA8L2Rpdj4KCiAge2lmICRwcm9tb3R5cGUgPT0gJ3Byb21vX3R5cGVfaW5zdGFudCd9CiAgICA8ZGl2IGNsYXNzPSJwYWdvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9hbGxvd19vbmNlJyl9OjwvcD4KICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAge2NnZV95ZXNub19vcHRpb25zIHByZWZpeD0kYWN0aW9uaWQgbmFtZT0nZXh0cmFfYWxsb3dfb25jZScgc2VsZWN0ZWQ9JHByb21vLT5nZXRfZXh0cmEoJ2FsbG93X29uY2UnKX0KICAgICAgPC9wPgogICAgPC9kaXY+CiAgey9pZn0KCiAge2lmICRwcm9tb3R5cGUgPT0gJ3Byb21vX3R5cGVfY2hlY2tvdXQnfQogICAgPGRpdiBjbGFzcz0icGFnb3ZlcmZsb3ciPgogICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfYWxsb3dfY3VtdWxhdGl2ZScpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9J2V4dHJhX2FsbG93X2N1bXVsYXRpdmUnIHNlbGVjdGVkPSRwcm9tby0+Z2V0X2V4dHJhKCdhbGxvd19jdW11bGF0aXZlJyl9CiAgICAgIDwvcD4KICAgIDwvZGl2PgogIHsvaWZ9CgogIDxkaXYgaWQtImV4dHJhX2luZm9fYXJlYSI+CiAge2Fzc2lnbiB2YXI9J21hcCcgdmFsdWU9JHByb21vLT5nZXRfb2ZmZXJfZXh0cmFfbWFwKCl9CiAge2ZvcmVhY2ggZnJvbT0kbWFwIGtleT0nb2ZmZXJ0eXBlJyBpdGVtPSdmbGRzJ30KICAgIDxkaXYgaWQ9Inskb2ZmZXJ0eXBlfSIgY2xhc3M9Im9mZmVyX2V4dHJhIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICB7Zm9yZWFjaCBmcm9tPSRmbGRzIGl0ZW09J2ZsZCd9CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57YXNzaWduIHZhcj0nYScgdmFsdWU9JGZsZC5sYWJlbH17JG1vZC0+TGFuZygkYSl9OjwvcD4KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgIHtpZiAkZmxkLnR5cGU9PSdjaGVja2JveCd9CiAgICAgICAgICAgIHthc3NpZ24gdmFyPSdiJyB2YWx1ZT0kZmxkLm5hbWV9CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1leHRyYV97JGJ9IiB2YWx1ZT0iMSIge2lmICRwcm9tby0+Z2V0X2V4dHJhKCRiKX1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4KICAgICAgICAgIHsvaWZ9CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgey9mb3JlYWNofQogICAgPC9kaXY+CiAgey9mb3JlYWNofQogIDwvZGl2Pgo8L2ZpZWxkc2V0PgoKPGZpZWxkc2V0IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3Byb21wdF9jb25kaXRpb25zJyl9OiZuYnNwOzwvbGVnZW5kPgogIDxkaXYgaWQ9ImNvbmRkYXRhIj48L2Rpdj4KICA8dGFibGUgaWQ9ImNvbmR0YWJsZSIgc3R5bGU9InBhZGRpbmc6IDFweDsgd2lkdGg6IDEwMCU7Ij48L3RhYmxlPgo8L2ZpZWxkc2V0PgoKPGZpZWxkc2V0IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogPGxlZ2VuZD57JG1vZC0+TGFuZygncHJvbXB0X2FkZF9jb25kaXRpb24nKX06PC9sZWdlbmQ+CiA8cCBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX2NvbmRpdGlvbnMnKX08L3A+CiA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfY29uZGl0aW9uX3R5cGUnKX06PC9wPgogICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9YWRkX2NvbmR0eXBlIiBpZD0iY29uZHR5cGUiPgogICAgIHtmb3JlYWNoICRjb25kaXRpb250eXBlcyBhcyAka2V5ID0+ICRyZWN9CiAgICAgICA8b3B0aW9uIHZhbHVlPSJ7JGtleX0iPnskcmVjLmxhYmVsfTwvb3B0aW9uPgogICAgIHsvZm9yZWFjaH0KICAgICA8L3NlbGVjdD4KICAgPC9wPgogPC9kaXY+CgogPGRpdiBpZD0iZGl2X2NvbmRkYXRhMCIgY2xhc3M9InBhZ2VvdmVyZmxvdyBjb25kZGF0YSI+CiAgIDxwIGNsYXNzPSJwYWdldGV4dCIgaWQ9ImRhdGFwcm9tcHQwIj57JG1vZC0+TGFuZygncHJvbXB0X2NvbmRpdGlvbl9kYXRhJyl9OjwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPGlucHV0IGlkPSJjb25kZGF0YTAiIHR5cGU9InRleHQiIG5hbWU9ImFkZF9jb25kZGF0YTEiIHNpemU9IjMwIi8+CiAgIDwvcD4KIDwvZGl2PgoKIDxkaXYgaWQ9ImRpdl9jb25kZGF0YTEiIGNsYXNzPSJwYWdlb3ZlcmZsb3cgY29uZGRhdGEiPgogICA8cCBjbGFzcz0icGFnZXRleHQiIGlkPSJkYXRhcHJvbXB0MSI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jb25kaXRpb25fZGF0YTInKX06PC9wPgogICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICA8aW5wdXQgaWQ9ImNvbmRkYXRhMSIgdHlwZT0idGV4dCIgbmFtZT0iYWRkX2NvbmRkYXRhMiIgc2l6ZT0iMzAiLz4KICAgPC9wPgogPC9kaXY+CgogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+CiAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSJhZGRidG4iIG5hbWU9ImFkZCIgdmFsdWU9InskbW9kLT5MYW5nKCdhZGQnKX0iLz4KICAgPC9wPgogPC9kaXY+CjwvZmllbGRzZXQ+CgoKeyRmb3JtZW5kfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_checkout_promotionstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogcHJvbW90aW9ucyB0YWIgdGVtcGxhdGUgKn0KPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX2NoZWNrb3V0X3Byb21vdGlvbnMnKX08L2Rpdj4Ke2lmIGlzc2V0KCRwcm9tb3Rpb25zKX0KPHRhYmxlIGNsYXNzPSJwYWdldGFibGUgY21zX3NvcnRhYmxlIHRhYmxlc29ydGVyIiBjZWxsc3BhY2luZz0iMCI+CiAgPHRoZWFkPgogICA8dHI+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfaWQnKX08L3RoPgogICAgIDx0aD57JG1vZC0+TGFuZygncHJvbXB0X25hbWUnKX08L3RoPgogICAgIDx0aD57JG1vZC0+TGFuZygncHJvbXB0X3N0YXJ0X2RhdGUnKX08L3RoPgogICAgIDx0aD57JG1vZC0+TGFuZygncHJvbXB0X2VuZF9kYXRlJyl9PC90aD4KICAgICA8dGggY2xhc3M9InBhZ2VpY29uIHtsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0iPiZuYnNwOzwvdGg+CiAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiB7bGl0ZXJhbH17c29ydGVyOiBmYWxzZX17L2xpdGVyYWx9Ij4mbmJzcDs8L3RoPgogICAgIDx0aCBjbGFzcz0icGFnZWljb24ge2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSI+Jm5ic3A7PC90aD4KICAgICA8dGggY2xhc3M9InBhZ2VpY29uIHtsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0iPiZuYnNwOzwvdGg+CiAgIDwvdHI+CiAgPC90aGVhZD4KICB7Zm9yZWFjaCBmcm9tPSRwcm9tb3Rpb25zIGl0ZW09J2VudHJ5JyBuYW1lPSdwcm9tb3MnfQogICAgPHRyPgogICAgICA8dGQ+eyRlbnRyeS5pZH08L3RkPgogICAgICA8dGQ+PGEgaHJlZj0ieyRlbnRyeS5lZGl0X3VybH0iIHRpdGxlPSJ7JG1vZC0+TGFuZygnZWRpdCcpfSI+eyRlbnRyeS5uYW1lfTwvYT48L3RkPgogICAgICA8dGQ+CiAgICAgICAgeyogc3RhcnQgZGF0ZSAqfQogICAgICAgIHtpZiAkZW50cnkuc3RhcnRfZGF0ZV91dCA+ICRzbWFydHkubm93fQogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiB5ZWxsb3c7Ij57JGVudHJ5LnN0YXJ0X2RhdGV8Y21zX2RhdGVfZm9ybWF0fTwvc3Bhbj4KICAgICAgICB7ZWxzZX0KICAgICAgICAgIHskZW50cnkuc3RhcnRfZGF0ZXxjbXNfZGF0ZV9mb3JtYXR9CiAgICAgICAgey9pZn0KICAgICAgPC90ZD4KICAgICAgPHRkPgogICAgICAgIHsqIGVuZCBkYXRlICp9CiAgICAgICAge2lmICRlbnRyeS5lbmRfZGF0ZV91dCA8ICRzbWFydHkubm93fQogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGVudHJ5LmVuZF9kYXRlfGNtc19kYXRlX2Zvcm1hdH08L3NwYW4+CiAgICAgICAge2Vsc2V9CiAgICAgICAgICB7JGVudHJ5LmVuZF9kYXRlfGNtc19kYXRlX2Zvcm1hdH0KICAgICAgICB7L2lmfQogICAgICA8L3RkPgogICAgICA8dGQ+e2lmICRlbnRyeS5pdGVtX29yZGVyID4gMX17bW9kdWxlX2FjdGlvbl9saW5rIG1vZHVsZT1Qcm9tb3Rpb25zIGFjdGlvbj0nYWRtaW5fbW92ZXByb21vJyBkaXI9J3VwJyBwcm9tbz0kZW50cnkuaWQgaW1hZ2U9J2ljb25zL3N5c3RlbS9hcnJvdy11LmdpZicgaW1hZ2Vvbmx5PTF9ey9pZn08L3RkPgogICAgICA8dGQ+e2lmICEkc21hcnR5LmZvcmVhY2gucHJvbW9zLmxhc3R9e21vZHVsZV9hY3Rpb25fbGluayBtb2R1bGU9UHJvbW90aW9ucyBhY3Rpb249J2FkbWluX21vdmVwcm9tbycgZGlyPSdkb3duJyBwcm9tbz0kZW50cnkuaWQgaW1hZ2U9J2ljb25zL3N5c3RlbS9hcnJvdy1kLmdpZicgaW1hZ2Vvbmx5PTF9ey9pZn08L3RkPgogICAgICA8dGQ+eyRlbnRyeS5lZGl0X2xpbmt9PC90ZD4KICAgICAgPHRkPnskZW50cnkuZGVsZXRlX2xpbmt9PC90ZD4KICAgIDwvdHI+CiAgey9mb3JlYWNofQogIDx0Ym9keT4KICA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQoKPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD48L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/admin_dflt_templates_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgeyRpbmZvX2RmbHRfdGVtcGxhdGV9CjwvZGl2PgoKPGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRsZWdlbmRfY291cG9uZm9ybXRlbXBsYXRlfTwvbGVnZW5kPgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2NvdXBvbmZvcm10ZW1wbGF0ZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jb3Vwb25mb3JtdGVtcGxhdGV9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0X2NvdXBvbmZvcm10ZW1wbGF0ZX0mbmJzcDt7JHJlc2V0X2NvdXBvbmZvcm10ZW1wbGF0ZX08L3A+CiAgPC9kaXY+CjwvZmllbGRzZXQ+Cgp7JGZvcm1lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/admin_instant_promotionstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogcHJvbW90aW9ucyB0YWIgdGVtcGxhdGUgKn0KPGRpdiBjbGFzcz0id2FybmluZyIgc3R5bGU9IndpZHRoOiA5NSU7Ij57JG1vZC0+TGFuZygnd2Fybl9pbnN0YW50X3Byb21vdGlvbnMnKX08L2Rpdj4KPGRpdiBjbGFzcz0iaW5mb3JtYXRpb24iPnskbW9kLT5MYW5nKCdpbmZvX2luc3RhbnRfcHJvbW90aW9ucycpfTwvZGl2Pgp7aWYgaXNzZXQoJHByb21vdGlvbnMpfQo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSBjbXNfc29ydGFibGUgdGFibGVzb3J0ZXIiIGNlbGxzcGFjaW5nPSIwIj4KICA8dGhlYWQ+CiAgIDx0cj4KICAgICA8dGg+eyRtb2QtPkxhbmcoJ3Byb21wdF9pZCcpfTwvdGg+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfbmFtZScpfTwvdGg+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfc3RhcnRfZGF0ZScpfTwvdGg+CiAgICAgPHRoPnskbW9kLT5MYW5nKCdwcm9tcHRfZW5kX2RhdGUnKX08L3RoPgogICAgIDx0aCBjbGFzcz0icGFnZWljb24ge2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSI+Jm5ic3A7PC90aD4KICAgICA8dGggY2xhc3M9InBhZ2VpY29uIHtsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0iPiZuYnNwOzwvdGg+CiAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiB7bGl0ZXJhbH17c29ydGVyOiBmYWxzZX17L2xpdGVyYWx9Ij4mbmJzcDs8L3RoPgogICAgIDx0aCBjbGFzcz0icGFnZWljb24ge2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSI+Jm5ic3A7PC90aD4KICAgPC90cj4KICA8L3RoZWFkPgogIHtmb3JlYWNoIGZyb209JHByb21vdGlvbnMgaXRlbT0nZW50cnknIG5hbWU9J3Byb21vcyd9CiAgICA8dHI+CiAgICAgIDx0ZD57JGVudHJ5LmlkfTwvdGQ+CiAgICAgIDx0ZD48YSBocmVmPSJ7JGVudHJ5LmVkaXRfdXJsfSIgdGl0bGU9InskbW9kLT5MYW5nKCdlZGl0Jyl9Ij57JGVudHJ5Lm5hbWV9PC9hPjwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICB7KiBzdGFydCBkYXRlICp9CiAgICAgICAge2lmICRlbnRyeS5zdGFydF9kYXRlX3V0ID4gJHNtYXJ0eS5ub3d9CiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHllbGxvdzsiPnskZW50cnkuc3RhcnRfZGF0ZXxjbXNfZGF0ZV9mb3JtYXR9PC9zcGFuPgogICAgICAgIHtlbHNlfQogICAgICAgICAgeyRlbnRyeS5zdGFydF9kYXRlfGNtc19kYXRlX2Zvcm1hdH0KICAgICAgICB7L2lmfQogICAgICA8L3RkPgogICAgICA8dGQ+CiAgICAgICAgeyogZW5kIGRhdGUgKn0KICAgICAgICB7aWYgJGVudHJ5LmVuZF9kYXRlX3V0IDwgJHNtYXJ0eS5ub3d9CiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPnskZW50cnkuZW5kX2RhdGV8Y21zX2RhdGVfZm9ybWF0fTwvc3Bhbj4KICAgICAgICB7ZWxzZX0KICAgICAgICAgIHskZW50cnkuZW5kX2RhdGV8Y21zX2RhdGVfZm9ybWF0fQogICAgICAgIHsvaWZ9CiAgICAgIDwvdGQ+CiAgICAgIDx0ZD57aWYgJGVudHJ5Lml0ZW1fb3JkZXIgPiAxfXttb2R1bGVfYWN0aW9uX2xpbmsgbW9kdWxlPVByb21vdGlvbnMgYWN0aW9uPSdhZG1pbl9tb3ZlcHJvbW8nIGRpcj0ndXAnIHByb21vPSRlbnRyeS5pZCBpbWFnZT0naWNvbnMvc3lzdGVtL2Fycm93LXUuZ2lmJyBpbWFnZW9ubHk9MX17L2lmfTwvdGQ+CiAgICAgIDx0ZD57aWYgISRzbWFydHkuZm9yZWFjaC5wcm9tb3MubGFzdH17bW9kdWxlX2FjdGlvbl9saW5rIG1vZHVsZT1Qcm9tb3Rpb25zIGFjdGlvbj0nYWRtaW5fbW92ZXByb21vJyBkaXI9J2Rvd24nIHByb21vPSRlbnRyeS5pZCBpbWFnZT0naWNvbnMvc3lzdGVtL2Fycm93LWQuZ2lmJyBpbWFnZW9ubHk9MX17L2lmfTwvdGQ+CiAgICAgIDx0ZD57JGVudHJ5LmVkaXRfbGlua308L3RkPgogICAgICA8dGQ+eyRlbnRyeS5kZWxldGVfbGlua308L3RkPgogICAgPC90cj4KICB7L2ZvcmVhY2h9CiAgPHRib2R5PgogIDwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+PHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZGxpbmt9PC9wPjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settingstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICBqUXVlcnkoJy5oaWRhYmxlJykuaGlkZSgpOwogIGpRdWVyeSgnIycrJ3svbGl0ZXJhbH17JGRmbHRfb2ZmZXJfdHlwZX17bGl0ZXJhbH0nKS5zaG93KCk7CiAgalF1ZXJ5KCcjb2ZmZXJ0eXBlJykuY2hhbmdlKGZ1bmN0aW9uKCl7CiAgICB2YXIgdmFsID0gJyMnK2pRdWVyeSh0aGlzKS52YWwoKTsKICAgIGpRdWVyeSgnLmhpZGFibGUnKS5oaWRlKCk7CiAgICBqUXVlcnkodmFsKS5zaG93KCk7CiAgfSk7Cn0pOwo8L3NjcmlwdD4Key9saXRlcmFsfQoKeyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2RmbHRfcHJvbW90aW9uX3BlcmlvZCcpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICB7Y2FwdHVyZSBhc3NpZ249J3RtcCd9eyRhY3Rpb25pZH1wcm9tb3Rpb25fcGVyaW9key9jYXB0dXJlfQogICAge2h0bWxfb3B0aW9ucyBuYW1lPSR0bXAgb3B0aW9ucz0kcHJvbW90aW9uX3BlcmlvZHMgc2VsZWN0ZWQ9JGRmbHRfcHJvbW90aW9uX3BlcmlvZH0KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZGZsdF9vZmZlcl90eXBlJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIHtjYXB0dXJlIGFzc2lnbj0ndG1wJ317JGFjdGlvbmlkfW9mZmVyX3R5cGV7L2NhcHR1cmV9CiAgICA8c2VsZWN0IG5hbWU9InskdG1wfSIgaWQ9Im9mZmVydHlwZSI+CiAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JG9mZmVyX3R5cGVzIHNlbGVjdGVkPSRkZmx0X29mZmVyX3R5cGV9CiAgICA8L3NlbGVjdD4KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGhpZGFibGUiIGlkPSJQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQiPgogPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3BlcmNlbnRhZ2VfZGlzY291bnQnKX06PC9wPgogPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfW9mZmVyX3BlcmNlbnQiIHNpemU9IjUiIG1heGxlbmd0aD0iNSIgdmFsdWU9InskZGZsdF9vZmZlcl9kYXRhfSIvPgogPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGhpZGFibGUiIGlkPSJQUk9NT1RJT05TX09GRkVSX0RJU0NPVU5UIj4KIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9wcmljZV9kaXNjb3VudCcpfTo8L3A+CiA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgeyRjdXJyZW5jeV9zeW1ib2x9PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9b2ZmZXJfcHJpY2UiIHNpemU9IjUiIG1heGxlbmd0aD0iNSIgdmFsdWU9InskZGZsdF9vZmZlcl9kYXRhfSIvPgogPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IGhpZGFibGUiIGlkPSJQUk9NT1RJT05TX09GRkVSX1BST0RVQ1QiPgp7KiA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZnJlZV9wcm9kdWN0Jyl9OjwvcD4KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPiZuYnNwOzwvcD4qfQo8L2Rpdj4KCntpZiAkZGZsdF9vZmZlcl90eXBlID09ICdQUk9NT1RJT05TX09GRkVSX1BFUkNFTlQnfQp7ZWxzZWlmICRkZmx0X29mZmVyX3R5cGUgPT0gJ1BST01PVElPTlNfT0ZGRVJfRElTQ09VTlQnfQp7ZWxzZX0Key9pZn0KCgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9pbWFnZV9kaXInKX08L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbWFnZV9kaXIiIHZhbHVlPSJ7JGltYWdlX2Rpcn0iIHNpemU9IjUwIiBtYXhsZW5ndGg9IjI1NSIvPgogICAgPGJyLz4KICAgIHskbW9kLT5MYW5nKCdpbmZvX2ltYWdlX2RpcicpfQogIDwvcD4KPC9kaXY+Cgp7KiBwcm9tb3Rpb25hbCBtZXNzYWdlcyAqfQo8ZmllbGRzZXQ+CjxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2xibF9wcm9tb19tZXNzYWdlcycpfTombmJzcDs8L2xlZ2VuZD4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZXJyb3JfaW52YWxpZCcpfTwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDx0ZXh0YXJlYSByb3dzPSIzIiBjb2xzPSI1MCIgbmFtZT0ieyRhY3Rpb25pZH1lcnJvcl9pbnZhbGlkIj57JGVycm9yX2ludmFsaWRfY29kZX08L3RleHRhcmVhPgogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9lcnJvcl9lbXB0eScpfTwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDx0ZXh0YXJlYSByb3dzPSIzIiBjb2xzPSI1MCIgbmFtZT0ieyRhY3Rpb25pZH1lcnJvcl9lbXB0eSI+eyRlcnJvcl9lbXB0eV9jb2RlfTwvdGV4dGFyZWE+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X21zZ192YWxpZF9jb2RlJyl9PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPHRleHRhcmVhIHJvd3M9IjMiIGNvbHM9IjUwIiBuYW1lPSJ7JGFjdGlvbmlkfW1zZ192YWxpZCI+eyRtc2dfdmFsaWRfY29kZX08L3RleHRhcmVhPgogIDwvcD4KPC9kaXY+Cgo8L2ZpZWxkc2V0PgoKCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICA8L3A+CjwvZGl2Pgp7JGZvcm1lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/inc_condition_row.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogdGVtcGxhdGUgZm9yIGNvbmRpdGlvbiByb3dzICp9Cnthc3NpZ24gdmFyPSJjb25kdHlwZSIgdmFsdWU9Il9fSU5WQUxJRF9fIn0Ke2Fzc2lnbiB2YXI9ImNvbmRkYXRhMCIgdmFsdWU9Il9fSU5WQUxJRF9fIn0Ke2Fzc2lnbiB2YXI9ImNvbmRkYXRhMSIgdmFsdWU9Il9fSU5WQUxJRF9fIn0Ke2lmIGlzc2V0KCRjb25kKX0KICB7YXNzaWduIHZhcj0iY29uZHR5cGUiIHZhbHVlPSRjb25kLT5nZXRfY29uZF90eXBlKCl9CiAgeyR0bXA9JGNvbmQtPmdldF9kYXRhKCl9CiAge2lmIGlzX2FycmF5KCR0bXApfQogICAgeyRjb25kZGF0YTA9JHRtcFswXX0KICAgIHskY29uZGRhdGExPSR0bXBbMV19CiAge2Vsc2V9CiAgICB7JGNvbmRkYXRhMD0kdG1wfQogIHsvaWZ9CnsvaWZ9Cgo8ZGl2IGlkPSJjb25kaXRpb25fcm93X3RtcGwiIGNsYXNzPSdjb25kaXRpb25fcm93JyBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogIDxpbnB1dCBjbGFzcz0ic2F2ZWRfY29uZHR5cGUiIHR5cGU9ImhpZGRlbiIgbmFtZT0ieyRhY3Rpb25pZH1zYXZlZF9jb25kdHlwZVtdIiB2YWx1ZT0ieyRjb25kdHlwZX0iLz4KICA8aW5wdXQgY2xhc3M9InNhdmVkX2NvbmRkYXRhMCIgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXNhdmVkX2NvbmRkYXRhW10iIHZhbHVlPSJ7JGNvbmRkYXRhMH0iLz4KICA8aW5wdXQgY2xhc3M9InNhdmVkX2NvbmRkYXRhMSIgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXNhdmVkX2NvbmRkYXRhW10iIHZhbHVlPSJ7JGNvbmRkYXRhMX0iLz4KICA8dGFibGUgc3R5bGU9InBhZGRpbmc6IDFweDsgd2lkdGg6IDEwMCU7Ij4KICAgIDx0cj4KICAgICAgPHRkPgogICAgICAgIDxzcGFuIGNsYXNzPSdkaXNwX2NvbmR0eXBlJz57JG1vZC0+TGFuZygkY29uZHR5cGUpfTwvc3Bhbj4KICAgICAgPC90ZD4KICAgICAgPHRkPgogICAgICAgIDxzcGFuIGNsYXNzPSdkaXNwX2NvbmRkYXRhMCc+eyRjb25kZGF0YTB9PC9zcGFuPiAtLSA8c3BhbiBjbGFzcz0iZGlzcF9jb25kZGF0YTEiPnskY29uZGRhdGExfTwvc3Bhbj48L3NwYW4+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZD4KICAgICAgICA8YSBjbGFzcz0iZGVsY29uZCIgaHJlZj0iIyIgdGl0bGU9InskbW9kLT5MYW5nKCdkZWxldGUnKX0iPntjZ2ltYWdlIGltYWdlPSdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicgYWx0PSRtb2QtPkxhbmcoJ2RlbGV0ZScpfTwvYT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/orig_couponform_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogY291cG9uIGZvcm0gdGVtcGxhdGUgKn0KeyRmb3Jtc3RhcnR9CjxmaWVsZHNldD4KPGxlZ2VuZD57JFByb21vdGlvbnMtPkxhbmcoJ3Byb21wdF9jb3Vwb25fY29kZScpfTwvbGVnZW5kPgoKPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+CiAge2lmIGlzc2V0KCRlcnJvcil9PHAgc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGVycm9yfTwvcD57L2lmfQogIHtpZiBpc3NldCgkbXNnKX08cCBzdHlsZT0iY29sb3I6IGdyZWVuOyI+eyRtc2d9PC9wPnsvaWZ9CgogIDxwPnskbW9kLT5MYW5nKCdwcm9tcHRfY29kZScpfTombmJzcDs8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1wcm9tb19jb2RlIiBzaXplPSIxMiIgbWF4bGVuZ3RoPSIxMCIgdmFsdWU9InskY29kZX0iLz48L3A+CiAgPHA+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXByb21vX3N1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9cHJvbW9fY2xlYXIiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2xlYXJfY291cG9ucycpfSIvPgogIDwvcD4KCiAge2lmIGlzc2V0KCRjb3Vwb25zKX0KICA8cD57JG1vZC0+TGFuZygnZW50ZXJlZF9jb3Vwb25zJyl9OjwvcD4KICA8dWw+CiAge2ZvcmVhY2ggZnJvbT0kY291cG9ucyBpdGVtPSdpdGVtJyBuYW1lPSdjb3Vwb25zJ30KICAgIDxsaT57JHNtYXJ0eS5mb3JlYWNoLmNvdXBvbnMuaXRlcmF0aW9ufTogeyRpdGVtfTwvbGk+CiAgey9mb3JlYWNofQogIDwvdWw+CiAgey9pZn0gIAo8L2Rpdj4KCjwvZmllbGRzZXQ+CnskZm9ybWVuZH0=]]></data>
	</file>
</module>
