<?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>ECB2</name>
	<version>1.6.1</version>
    <mincmsversion>2.0</mincmsversion>
	<help><![CDATA[CgoKPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2PgoKPGRpdiBpZD0icGFnZV90YWJzIj4KICAgPGRpdiBpZD0iZ2VuZXJhbCI+CiAgICAgIEdlbmVyYWwKICAgPC9kaXY+CiAgIDxkaXYgaWQ9ImZpZWxkcyI+CiAgICAgIEZpZWxkcwogICA8L2Rpdj4KICAgPGRpdiBpZD0iYWJvdXQiPgogICAgICBBYm91dAogICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2PgoKPGRpdiBpZD0icGFnZV9jb250ZW50Ij4KCiAgIDxkaXYgaWQ9ImdlbmVyYWxfYyI+CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgIAogICA8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KICAgPHA+TW9kdWxlIGFkZHMgYWRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzIGZvciBDTVMgTWFkZSBTaW1wbGUgdjIrLiBUaGlzIGlzIGEgZm9yayBvZiB0aGUgb3JpZ2luYWwgRUNCIG1vZHVsZSB0aGF0IHdvcmtlZCB3aXRoIENNU01TIHYxLjwvcD4KICAgPHA+UHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmaWVsZCB0eXBlczo8YnI+CiAgIDxvbD4KICAgICAgPGxpPmZpbGVfc2VsZWN0b3I8L2xpPgogICAgICA8bGk+Y29sb3JfcGlja2VyPC9saT4KICAgICAgPGxpPmRyb3Bkb3duPC9saT4KICAgICAgPGxpPmRyb3Bkb3duX2Zyb21fdWR0PC9saT4KICAgICAgPGxpPmRyb3Bkb3duX2Zyb21fY3VzdG9tZ3M8L2xpPgogICAgICA8bGk+Y2hlY2tib3g8L2xpPgogICAgICA8bGk+bW9kdWxlX2xpbms8L2xpPgogICAgICA8bGk+bGluazwvbGk+CiAgICAgIDxsaT50aW1lcGlja2VyPC9saT4KICAgICAgPGxpPmRhdGVwaWNrZXI8L2xpPgogICAgICA8bGk+aW5wdXQ8L2xpPgogICAgICA8bGk+dGV4dGFyZWE8L2xpPgogICAgICA8bGk+ZWRpdG9yICh0ZXh0YXJlYSB3aXRoIHd5c2l3eWcpPC9saT4KICAgICAgPGxpPnRleHQgPC9saT4KICAgICAgPGxpPnBhZ2VzIDwvbGk+CiAgICAgIDxsaT5ociAoaG9yaXpvbnRhbCBsaW5lKTwvbGk+CiAgICAgIDxsaT5zb3J0YWJsZWxpc3Q8L2xpPgogICAgICA8bGk+cmFkaW88L2xpPgogICAgICA8bGk+aGlkZGVuPC9saT4KICAgICAgPGxpPmZpZWxkc2V0X3N0YXJ0PC9saT4KICAgICAgPGxpPmZpZWxkc2V0X2VuZDwvbGk+CiAgICAgIDxsaT5nYWxsZXJ5X3BpY2tlcjwvbGk+CiAgICAgIDxsaT5pbnB1dF9yZXBlYXRlcjwvbGk+CiAgIDwvb2w+CiAgIDwvcD48YnI+CgogICA8cD5JZiB5b3UgbGlrZSB0aGlzIG1vZHVsZSBwbGVhc2UgPGEgaHJlZj0iaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9hYm91dC1saW5rL2RvbmF0aW9ucy8iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZDsiPmRvbmF0ZSB0byBDTVNNUzwvYT48L3A+PGJyPgogICAKICAgICAgPC9kaXY+CiAgIDwvZGl2PgoKICAgPGRpdiBpZD0iZmllbGRzX2MiPgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAKPGgzPkZpZWxkczwvaDM+Cgo8cD48c3Ryb25nPmZpbGVfc2VsZWN0b3I8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6ICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZmlsZV9zZWxlY3RvciIgYmxvY2s9InRlc3QxMCIgZGlyPSJpbWFnZXMiIGZpbGV0eXBlcz0ianBnLGdpZixwbmciIGV4Y2x1ZGVwcmVmaXg9InRodW1iXyJ9ICAgICAgICA8L3A+CjxwPlBhcmFtZXRlcnM6CmZpbGV0eXBlcyAtIGNvbW1hIHNlcGFyYXRlZDxicj4KZGlyIChvcHRpb25hbCkgLSBkZWZhdWx0IHVwbG9hZHMvPGJyPgpleGNsdWRlcHJlZml4IChvcHRpb25hbCk8YnI+CnJlY3Vyc2UgKG9wdGlvbmFsKSAtIGRlZmF1bHQgZmFsc2UsIHJlY3Vyc2U9MSB3aWxsIHNob3cgYWxsIGZpbGVzIGluIHN1YmZvbGRlcnMKc29ydGZpbGVzIChvcHRpb25hbCk8YnI+CnByZXZpZXcgKG9wdGlvbmFsKSAtIG9ubHkgZm9yIGltYWdlczxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCgo8cD48c3Ryb25nPmNvbG9yX3BpY2tlcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZTogIHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJjb2xvcl9waWNrZXIiIGJsb2NrPSJ0ZXN0MSIgbGFiZWw9IkNvbG9yIiBkZWZhdWx0X3ZhbHVlPSIjMDAwMDAwIn08L3A+CjxwPlBhcmFtZXRlcnM6CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKTxicj4Kc2l6ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCAxMDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCgoKPHA+PHN0cm9uZz5kcm9wZG93bjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duIiBibG9jaz0idGVzdDUiIGxhYmVsPSJGcnVpdCIgIHZhbHVlcz0iQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSIgZmlyc3RfdmFsdWU9InNlbGVjdCBmcnVpdCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgp2YWx1ZXMgKHJlcXVpcmVkKSAtIGNvbW1hIHNlcGFyYXRlZC4gRXhhbXBsZTogQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxHcmVlbj1ncmVlbiA8YnI+CmZpcnN0X3ZhbHVlIChvcHRpb25hbCk8YnI+Cm11bHRpcGxlIChvcHRpb25hbCkgLSBhZGQgbXVsdGlwbGUgb3B0aW9uIHNlbGVjdCBzdXBwb3J0PGJyPgpzaXplIChvcHRpb25hbCkgLSBtdWx0aXBsZSBlbmFibGVkIG9ubHk8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yPGJyPgpjb21wYWN0IChvcHRpb25hbCkgLSBkZWZhdWx0OmZhbHNlIC0gaWYgc2V0LCBhIHN1bW1hcnkgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaXMgZGlzcGxheWVkIGFuZCB0aGUgZnVsbCBzZWxlY3QgaXMgc2hvd24vaGlkZGVuIHdoZW4gJ2VkaXQvaGlkZScgaXMgY2xpY2tlZAo8L3A+PGJyPgoKCgo8cD48c3Ryb25nPmRyb3Bkb3duX2Zyb21fdWR0PC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZHJvcGRvd25fZnJvbV91ZHQiIGJsb2NrPSJ0ZXN0MiIgbGFiZWw9IkdhbGxlcnkiIHVkdD0ibXljdXN0b211ZHQiICBmaXJzdF92YWx1ZT0iPXNlbGVjdD0ifTwvcD4KPHA+T3VwdXQgZnJvbSBVRFQgbXVzdCBiZSBhcnJheSgpIC0gZXhhbXBsZTogcmV0dXJuIGFycmF5KCJsYWJlbCI9PiJ2YWx1ZSIsICJsYWJlbCAyICI9PiJ2YWx1ZSAyIik8L3A+CjxwPlBhcmFtZXRlcnM6CnVkdCAocmVxdWlyZWQpIC0gdWR0IG5hbWU8YnI+CmZpcnN0X3ZhbHVlIChvcHRpb25hbCkgPGJyPgptdWx0aXBsZSAob3B0aW9uYWwpIC0gYWRkIG11bHRpcGxlIG9wdGlvbiBzZWxlY3Qgc3VwcG9ydDxicj4Kc2l6ZSAob3B0aW9uYWwpIC0gbXVsdGlwbGUgZW5hYmxlZCBvbmx5PGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcjxicj4KY29tcGFjdCAob3B0aW9uYWwpIC0gZGVmYXVsdDpmYWxzZSAtIGlmIHNldCwgYSBzdW1tYXJ5IG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGlzIGRpc3BsYXllZCBhbmQgdGhlIGZ1bGwgc2VsZWN0IGlzIHNob3duL2hpZGRlbiB3aGVuICdlZGl0L2hpZGUnIGlzIGNsaWNrZWQKPC9wPgo8cD48c3Ryb25nPkV4YW1wbGVzIFVEVDwvc3Ryb25nPjoKPGJyPgo8YSBocmVmPSJodHRwczovL2dpc3QuZ2l0aHViLmNvbS9rdXptYW55LzY3NzljMTkzYjgxMDRhYTZhYmZlIj5HYWxsZXJ5IGxpc3QgZnJvbSBHYWxsZXJ5IG1vZHVsZTwvYT4gPGJyPgo8YSBocmVmPSJodHRwczovL2dpc3QuZ2l0aHViLmNvbS9rdXptYW55LzQ2NDI3NmUxNmYzYjc0YzA3NTU1Ij5Hcm91cCBsaXN0IGZyb20gRkVVPC9hPiA8YnI+CjxhIGhyZWY9Imh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2t1em1hbnkvNTE1ODNjNjQzOWNiMDQxNjc5YTYiPlVzZXJzIGxpc3QgZnJvbSBGRVU8L2E+CjwvcD48YnI+CgoKPHA+PHN0cm9uZz5kcm9wZG93bl9mcm9tX2N1c3RvbWdzPC9zdHJvbmc+IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5uZXc8L3NwYW4+PC9wPgo8cD5Qcm92aWRlcyBhIHNpbmdsZSBvciBtdWx0aXBsZSBzZWxlY3QgdXNpbmcgdGhlIGNvbnRlbnQgc2V0IGluIGEgQ3VzdG9tR1MgTW9kdWxlIGZpZWxkLjwvcD4KPHA+UmVxdWlyZXMgdGhlIEN1c3RvbUdTIG1vZHVsZSBhbmQgdG8gaGF2ZSBhIGZpZWxkIG9mIHR5cGUgJ3RleHQgYXJlYScuPC9wPgo8cD5FeGFtcGxlOgogICAgICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZHJvcGRvd25fZnJvbV9jdXN0b21ncycgY3VzdG9tZ3NfZmllbGQ9J1NlY3Rpb25fU3R5bGVzJyBibG9jaz1zdHlsZTEgbGFiZWw9J1NlY3Rpb24gMSBMYXlvdXQgU3R5bGUnIGFzc2lnbj1zdHlsZTF9PC9wPgo8cD5QYXJhbWV0ZXJzOjwvcD4KPHVsPgogICA8bGk+Y3VzdG9tZ3NfZmllbGQgKHJlcXVpcmVkKSAtIG5hbWUgb2YgY3VzdG9tZ3NfZmllbGQgdG8gcmV0cmlldmUgKHdpdGggdW5kZXJzY29yZXMgbm90IHNwYWNlcyk8L2xpPgogICA8bGk+ZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWVsZDwvbGk+CiAgIDxsaT5tdWx0aXBsZSAob3B0aW9uYWwpIC0gYW4gb3B0aW9uIGlmIHNldCwgdG8gb3VwdXQgYSBtdWx0aS1zZWxlY3QgYm94IHJhdGhlciB0aGFuIGEgc2luZ2xlIHNlbGVjdCBkcm93bmRvd248L2xpPgogICA8bGk+c2l6ZSAob3B0aW9uYWwpIC0gYW4gb3B0aW9uIHRvIHNldCB0aGUgc2l6ZSBvZiBhIG11bHRpLXNlbGVjdCBib3g8L2xpPgogICA8bGk+Y29tcGFjdCAob3B0aW9uYWwpIC0gZGVmYXVsdDpmYWxzZSAtIGlmIHNldCwgYSBzdW1tYXJ5IG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGlzIGRpc3BsYXllZCBhbmQgdGhlIGZ1bGwgc2VsZWN0IGlzIHNob3duL2hpZGRlbiB3aGVuICdlZGl0L2hpZGUnIGlzIGNsaWNrZWQ8L2xpPgo8L3VsPgo8YnI+CgoKCjxwPjxzdHJvbmc+Y2hlY2tib3g8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJjaGVja2JveCIgYmxvY2s9InRlc3QxMSIgbGFiZWw9IkNoZWNrYm94IiBkZWZhdWx0X3ZhbHVlPSIxIn08L3A+CjxwPlBhcmFtZXRlcnM6CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+bW9kdWxlX2xpbms8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJtb2R1bGVfbGluayIgbGFiZWw9Ik1vZHVsZSBlZGl0IiBibG9jaz0idGVzdDMiIG1vZD0iQ2F0YWxvZ2VyIiB0ZXh0PSJFZGl0IGNhdGFsb2ciIH08L3A+CjxwPlBhcmFtZXRlcnM6Cm1vZCAocmVxdWlyZWQpIDxicj4KdGV4dCAocmVxdWlyZWQpIDxicj4KdGFyZ2V0IChvcHRpb25hbCkgLSBkZWZhdWx0IF9zZWxmPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5saW5rPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0ibGluayIgbGFiZWw9IlNlYXJjaCIgYmxvY2s9InRlc3Q0IiB0YXJnZXQ9Il9ibGFuayIgbGluaz0iaHR0cDovL3d3dy5iaW5nLmNvbSIgdGV4dD0iYmluZyBzZWFyY2gifTwvcD4KPHA+UGFyYW1ldGVyczoKbGluayAocmVxdWlyZWQpIDxicj4KdGV4dCAocmVxdWlyZWQpIDxicj4KdGFyZ2V0IChvcHRpb25hbCkgLSBkZWZhdWx0IF9zZWxmPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz50aW1lcGlja2VyPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGltZXBpY2tlciIgbGFiZWw9IlRpbWUiIGJsb2NrPSJ0ZXN0NDUifTwvcD4KPHA+UGFyYW1ldGVyczoKc2l6ZSAob3B0aW9uYWwpIGRlZmF1bHQgMTAwPGJyPgp0aW1lX2Zvcm1hdCAob3B0aW9uYWwpIGRlZmF1bHQgSEg6OnNzPGJyPgptYXhfbGVuZ3RoIChvcHRpb25hbCkgZGVmYXVsdCAxMDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZGF0ZXBpY2tlcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRhdGVwaWNrZXIiIGxhYmVsPSJEYXRlIiBibG9jaz0idGVzdDQ0In08L3A+CjxwPlBhcmFtZXRlcnM6CnNpemUgKG9wdGlvbmFsKSBkZWZhdWx0IDEwMDxicj4KZGF0ZV9mb3JtYXQgKG9wdGlvbmFsKSBkZWZhdWx0IHl5LW1tLWRkPGJyPgp0aW1lIChvcHRpb25hbCkgLSBhZGQgdGltZSBwaWNrZXIgZGVmYXVsdCAwPGJyPgp0aW1lX2Zvcm1hdCAob3B0aW9uYWwpIGRlZmF1bHQgSEg6OnNzPGJyPgptYXhfbGVuZ3RoIChvcHRpb25hbCkgZGVmYXVsdCAxMCA8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmlucHV0PC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iaW5wdXQiIGxhYmVsPSJUZXh0IiBibG9jaz0idGVzdDUiIHNpemU9NTUgbWF4X2xlbmd0aD01NSBkZWZhdWx0X3ZhbHVlPSJmaWxsIGl0In08L3A+CjxwPlBhcmFtZXRlcnM6CnNpemUgKG9wdGlvbmFsKSBkZWZhdWx0IDMwPGJyPgptYXhfbGVuZ3RoIChvcHRpb25hbCkgZGVmYXVsdCAyNTUgPGJyPgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCkgLSBkZWZhdWx0IHZhbHVlIGZvciBpbnB1dDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+dGV4dGFyZWE8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJ0ZXh0YXJlYSIgbGFiZWw9IlRleHRhcmVhIiBibG9jaz0idGVzdDYiIHJvd3M9MTAgY29scz00MCBkZWZhdWx0X3ZhbHVlPSJmaWxsIGl0In08L3A+CjxwPlBhcmFtZXRlcnM6CnJvd3MgKG9wdGlvbmFsKSBkZWZhdWx0IDIwPGJyPgpjb2xzIChvcHRpb25hbCkgZGVmYXVsdCA4MCA8YnI+CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRleHRhcmVhPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5lZGl0b3IgKHRleHRhcmVhIHdpdGggd3lzaXd5Zyk8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJlZGl0b3IiIGxhYmVsPSJUZXh0YXJlYSIgYmxvY2s9InRlc3Q3IiByb3dzPTEwIGNvbHM9NDAgZGVmYXVsdF92YWx1ZT0iZmlsbCBpdCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpyb3dzIChvcHRpb25hbCkgZGVmYXVsdCAyMDxicj4KY29scyAob3B0aW9uYWwpIGRlZmF1bHQgODAgPGJyPgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCkgLSBkZWZhdWx0IHZhbHVlIGZvciB0ZXh0YXJlYTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+dGV4dCA8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJ0ZXh0IiBsYWJlbD0iVGV4dCIgYmxvY2s9InRlc3Q4IiB0ZXh0PSJIZWxsbyB3b3JkISJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgp0ZXh0IChyZXF1aXJlZCkgdGV4dCBpbiBhZG1pbiAoYWRkIGluZm9ybWF0aW9uIGZvciB1c2Vycyk8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnBhZ2VzIDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InBhZ2VzIiBsYWJlbD0iUGFnZSIgYmxvY2s9InRlc3QxMCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5ociAoaG9yaXpvbnRhbCBsaW5lKTwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImhyIiBsYWJlbD0iT3RoZXIgYmxvY2tzIiBibG9jaz0iYmxvY2tuYW1lIn08cD4KUGFyYW1ldGVyczoKZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+c29ydGFibGVsaXN0PC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0ic29ydGFibGVsaXN0IiBibG9jaz0idGVzdHNvcnRhYmxlbGlzdCIgbGFiZWw9IkNob29zZSBmcnVpdCIgdWR0PSJteWR1dCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgp2YWx1ZXMgKG9wdGlvbmFsKSAtIGNvbW1hIHNlcGFyYXRlZC4gRXhhbXBsZTogXCdBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEdyZWVuPWdyZWVuLHZhbHVlPUxhYmVsXCcgPGJyPgp1ZHQgKG9wdGlvbmFsKSAtIG5hbWUgb2YgdWR0IHRoYXQgcmV0dXJucyBhbiBhcnJheSBpbiB0aGUgZm9ybWF0IFwndmFsdWVcJyA9PiBcJ0xhYmVsXCcsPGJyPgpmaXJzdF92YWx1ZSAob3B0aW9uYWwpPGJyPgpsYWJlbF9sZWZ0IChvcHRpb25hbCk8YnI+CmxhYmVsX3JpZ2h0IChvcHRpb25hbCk8YnI+Cm1heF9udW1iZXIgKG9wdGlvbmFsKSAtIGxpbWl0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQ8YnI+CnJlcXVpcmVkX251bWJlciAob3B0aW9uYWwpIC0gc2V0cyBhIHNwZWNpZmljIG51bWJlciBvZiBpdGVtcyB0aGF0IG11c3QgYmUgc2VsZWN0ZWQgKG9yIG5vbmUpPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5yYWRpbzwvc3Ryb25nPiA8L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJyYWRpbyIgYmxvY2s9InRlc3QxNyIgbGFiZWw9IkZydWl0IiB2YWx1ZXM9IkFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UsS2l3aWZydWl0PWtpd2lmcnVpdCIgZGVmYXVsdF92YWx1ZT0iT3JhbmdlIn08L3A+CjxwPlBhcmFtZXRlcnM6CnZhbHVlcyAocmVxdWlyZWQpIC0gY29tbWEgc2VwYXJhdGVkLiBFeGFtcGxlOiBBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEtpd2lmcnVpdD1raXdpZnJ1aXQ8YnI+CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKSAtIGRlZmF1bHQgaXMgZmlyc3QgY2hvaWNlIC0gc2V0IHRvIGRlZmF1bHQgdmFsdWUgZS5nLiAiT3JhbmdlIgppbmxpbmUgKG9wdGlvbmFsKSAtIGlmIHNldCBkaXNwbGF5cyBhZG1pbiByYWRpbyBidXR0b25zIGlubGluZTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+aGlkZGVuPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBibG9jaz0ndGVzdDE4aGlkZGVuJyBhc3NpZ249J3Rlc3RoaWRkZW4nIGZpZWxkPSdoaWRkZW4nIHZhbHVlPSdtYXJrZXJ2YWx1ZSd9PGJyPgpDYW4gYmUgdXNlZCB0byBzZXQgYSBwYWdlIGF0dHJpYnV0ZSB0aGF0IGNhbiB0aGVuIGJlIGFjY2Vzc2VkIChlLmcuIGZyb20gYSBOYXZpZ2F0b3ItVGVtcGxhdGUpLCB1c2luZyB7cGFnZV9hdHRyIHBhZ2U9JG5vZGUtPmFsaWFzIGtleT0ndGVzdGhpZGRlbid9PC9wPgo8cD5QYXJhbWV0ZXJzOgp2YWx1ZSAocmVxdWlyZWQpIC0gaGlkZGVuIHZhbHVlIHRvIGJlIHNhdmVkPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5maWVsZHNldF9zdGFydDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2ZpZWxkc2V0X3N0YXJ0JyBsYWJlbD0nJiBuYnNwOycgYmxvY2s9J3Rlc3QxOWZpZWxkc2V0JyBhc3NpZ249J3Rlc3QxOWZpZWxkc2V0JyBsZWdlbmQ9J0ZpZWxkc2V0IFRlc3QgTGVnZW5kJyBkZXNjcmlwdGlvbj0nQ2FuIGFkZCBhIGRlc2NyaXB0aW9uIGluIGhlcmUnfTxicj4KQ3JlYXRlcyB0aGUgc3RhcnQgb2YgYSBmaWVsZHNldCBmb3IgZ3JvdXBpbmcgcmVsYXZhbnQgYWRtaW4gZmllbGRzIHRvZ2V0aGVyLiBOb3RlOiBhIG1hdGNoaW5nICdmaWVsZHNldF9lbmQnIGJsb2NrIGlzIHJlcXVpcmVkIGZvciBlYWNoIGZpZWxkc2V0X3N0YXJ0Ljxicj4KVElQOiBzZXQgbGFiZWw9JyYgbmJzcDsnIHRvIG5vdCBzaG93IHRoZSBmaWVsZCBsYWJlbC48L3A+CjxwPlBhcmFtZXRlcnM6CmxlZ2VuZCAob3B0aW9uYWwpIC0gYWRkcyBhbiBvcHRpb25hbCBsZWdlbmQgKGRlZmF1bHQgPSBubyBsZWdlbmQpPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5maWVsZHNldF9lbmQ8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdmaWVsZHNldF9lbmQnIGxhYmVsPScmIG5ic3A7JyBibG9jaz0ndGVzdDE5ZmllbGRzZXRlbmQnIGFzc2lnbj0ndGVzdDE5ZmllbGRzZXRlbmQnIH08YnI+CkNyZWF0ZXMgdGhlIGVuZCBvZiBhIGZpZWxkc2V0IGZvciBncm91cGluZyByZWxhdmFudCBhZG1pbiBmaWVsZHMgdG9nZXRoZXIuIE5vdGU6IGEgbWF0Y2hpbmcgJ2ZpZWxkc2V0X3N0YXJ0JyBibG9jayBpcyByZXF1aXJlZCBmb3IgZWFjaCBmaWVsZHNldF9lbmQuPGJyPgpUSVA6IHNldCBsYWJlbD0nJiBuYnNwOycgdG8gbm90IHNob3cgdGhlIGZpZWxkIGxhYmVsLgo8L3A+PGJyPgoKCjxwPjxzdHJvbmc+Z2FsbGVyeV9waWNrZXI8L3N0cm9uZz4gPHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPm5ldzwvc3Bhbj48L3A+CjxwPlByb3ZpZGVzIGEgZ2FsbGVyeSBwaWNrZXIgZm9yIHRoZSBHYWxsZXJ5IG1vZHVsZS48L3A+CjxwPkV4YW1wbGU6CiAgICAgIHtjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdnYWxsZXJ5X3BpY2tlcicgYmxvY2s9cGFnZVRvcEdhbGxlcnkgbGFiZWw9J1BhZ2UgVG9wIEdhbGxlcnknIGRpcj0ncGFnZS10b3AtZ2FsbGVyaWVzJ308L3A+CjxwPlBhcmFtZXRlcnM6PC9wPgo8dWw+CiAgIDxsaT5kaXIgKG9wdGlvbmFsKSAtIG9ubHkgcmV0dXJucyBnYWxsZXJpZXMgdGhhdCBhcmUgc3ViLWdhbGxlcmllcyBvZiB0aGlzIGdhbGxlcnkgZGlyLCBkZWZhdWx0IGlzIGFsbCBnYWxsZXJpZXMsIGV4Y2x1ZGluZyBkZWZhdWx0IHRvcCBsZXZlbCBnYWxsZXJ5PC9saT4KICAgPGxpPmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWVsZDwvbGk+CjwvdWw+Cjxicj4KCgo8cD48c3Ryb25nPmlucHV0X3JlcGVhdGVyPC9zdHJvbmc+IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5uZXc8L3NwYW4+PC9wPgo8cD5Qcm92aWRlcyBvbmUgb3IgbW9yZSB0ZXh0IGlucHV0cyB0aGF0IGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGJ5IHRoZSBlZGl0b3IuPC9wPgo8cD5UaGUgY29udGVudCBibG9jayBvdXRwdXQgaXMgYSBzdHJpbmcgd2l0aCBlYWNoIGlucHV0IGZpZWxkJ3MgY29udGVudHMgZGVsaW1pdGVyIGJ5ICd8fCcuIFRvIG1ha2UgdGhlIG91dHB1dCBhIG1vcmUgdXNlZnVsIGFycmF5IHVzZSAnZXhwbG9kZScsIGUuZy4geyJ8fCJ8ZXhwbG9kZTokY29udGVudF9ibG9ja19uYW1lfTwvcD4KPHA+RXhhbXBsZToKICAgICAgeyRpbnB1dF9yZXBlYXRlcl90ZXN0PSJ8fCJ8ZXhwbG9kZToie2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2lucHV0X3JlcGVhdGVyJyBsYWJlbD0nVGVzdCAyMjogaW5wdXRfcmVwZWF0ZXInIGJsb2NrPSd0ZXN0MjInIHNpemU9NTAgbWF4X2xlbmd0aD0yNTUgZGVzY3JpcHRpb249J1ByZXNzICgrKSBhbmQgKC0pIHRvIGFkZCBhbmQgcmVtb3ZlIGFkZGl0aW9uYWwgaW5wdXQgZmllbGRzJ30iIHNjb3BlPWdsb2JhbH08L3A+CjxwPlRvIHVzZTogeyRpbnB1dF9yZXBlYXRlcl90ZXN0fHByaW50X3J9PC9wPgo8YnI+CiAgICAgIDwvZGl2PgogICA8L2Rpdj4KCiAgIDxkaXYgaWQ9ImFib3V0X2MiPgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAKICAgPGgzPlVwZ3JhZGUgZnJvbSBFQ0I8L2gzPgogICA8cD5JbnN0YWxsIEVDQjIgbW9kdWxlIGFuZCBjaGFuZ2UgYWxsICJtb2R1bGUiIHBhcmFtZXRlcnMsIGluIGNvbnRlbnRfbW9kdWxlIHRhZ3MgdG8gYmUgbW9kdWxlPSJFQ0IyIiAod2FzICJFQ0IiKS4gVGhlbiBFQ0IgY2FuIGJlIHVuaW5zdGFsbGVkLjwvcD48YnI+CgoKICAgPGgzPlN1cHBvcnQ8L2gzPgogICA8cD5BcyBwZXIgdGhlIEdQTCBsaWNlbmNlLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzIGlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci4KICAgVGhlIG1vZHVsZSBhdXRob3IgaXMgbm90IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZS4gSG93ZXZlciB5b3UgbWlnaHQgZ2V0IHN1cHBvcnQgdGhyb3VnaCB0aGUgZm9sbG93aW5nOjwvcD4KICAgPHVsPgogICAgICA8bGk+Rm9yIHN1cHBvcnQsIGZpcnN0IDxzdHJvbmc+c2VhcmNoPC9zdHJvbmc+IHRoZSA8YSBocmVmPSIvL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW08L2E+LCBmb3IgaXNzdWVzIHdpdGggdGhlIG1vZHVsZSBzaW1pbGFyIHRvIHRob3NlIHlvdSBhcmUgZmluZGluZy48L2xpPgogICAgICA8bGk+VGhlbiwgaWYgbmVjZXNzYXJ5LCBvcGVuIGEgPHN0cm9uZz5uZXcgZm9ydW0gdG9waWM8L3N0cm9uZz4gdG8gcmVxdWVzdCBoZWxwLCB3aXRoIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdC48L2xpPgogICAgICA8bGk+SWYgeW91IGZpbmQgYSBidWcgeW91IGNhbiA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2J1Zy9saXN0LzEzNjYiPnN1Ym1pdCBhIEJ1ZyBSZXBvcnQ8L2E+LjwvbGk+CiAgICAgIDxsaT5Gb3IgYW55IGdvb2QgaWRlYXMgeW91IGNhbiA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2ZlYXR1cmVfcmVxdWVzdC9saXN0LzEzNjYiPnN1Ym1pdCBhIEZlYXR1cmUgUmVxdWVzdDwvYT4uPC9saT4KICAgICAgPGxpPklmIHlvdSBmb3VuZCB0aGUgTW9kdWxlIHVzZWZ1bCAtIHNob3V0IG91dCB0byBtZSBvbiBUd2l0dGVyIDxhIGhyZWY9Ii8vdHdpdHRlci5jb20vS2l3aUNocmlzQlQiPkBLaXdpQ2hyaXNCVDwvYT48L2xpPgogICA8L3VsPjxicj4KCgogICA8aDM+Q29weXJpZ2h0ICZhbXA7IExpY2VuY2U8L2gzPgogICA8cD5Db3B5cmlnaHQgwqkgMjAxOSwgQ2hyaXMgVGF5bG9yIDxjaHJpcyBhdCBiaW5ub3ZhdGl2ZSBkb3QgY28gZG90IHVrPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPjxicj4KICAgPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2My4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuIFlvdSBtYXkgb25seSB1c2UgdGhpcyBzb2Z0d2FyZSB3aGVuIHRoZXJlIGlzIGEgY2xlYXIgYW5kIG9idmlvdXMgaW5kaWNhdGlvbiBpbiB0aGUgYWRtaW4gc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIFNpbXBsZSE8L3A+PGJyPgogICA8YnI+CgogICAgICA8L2Rpdj4KICAgPC9kaXY+Cgo8L2Rpdj4KPGJyPgoKCg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBDaHJpcyBUYXlsb3IgKHR3aXR0ZXIuY29tL0tpd2lDaHJpc0JUKSAmbHQ7Y2hyaXNAYmlubm92YXRpdmUuY28udWsmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS42LjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz4KCjxoMz5WZXJzaW9uIDEuNi4xIC0gMjdKdWwyMDwvaDM+Cjx1bD4KICAgPGxpPm1vdmUgaGVscCAmIGNoYW5nZWxvZyBpbnRvIHRlbXBsYXRlczwvbGk+CiAgIDxsaT5CdWcgZml4OiBmb3IgJ2NoZWNrYm94JyB1c2luZyBkZWZhdWx0IG9mIHRydWUgKGNoZWNrZWQpIC0gd29yayBhcm91bmQgZm9yIGNvcmUgYnVnPC9saT4KPC91bD4KPGJyPgoKCjxoMz5WZXJzaW9uIDEuNiAtIDAzSnVuMjA8L2gzPgo8dWw+CiAgIDxsaT5hbGwgJ2Ryb3Bkb3duJyBjb250ZW50IGJsb2NrcyBub3cgaGF2ZSB0aGUgb3B0aW9uIGZvciBhICdjb21wYWN0JyBkaXNwbGF5IG9uIHRoZSBhZG1pbiBwYWdlLiBTZXQgImNvbXBhY3Q9MSIgaW4gdGhlIHBhcmFtZXRlcnMgYSBzdW1tYXJ5IG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGlzIGRpc3BsYXllZCBhbmQgdGhlIGZ1bGwgc2VsZWN0IGlzIHNob3duL2hpZGRlbiB3aGVuICdlZGl0L2hpZGUnIGlzIGNsaWNrZWQ8L2xpPgogICA8bGk+ZmlsZV9zZWxlY3RvciBjb250ZW50IGJsb2NrIC0gdXBkYXRlZCBub3cgdXNlcyBjb3JlIG1ldGhvZCBpbnN0ZWFkIG9mIENHRXh0ZW5zaW9uczwvbGk+CiAgIDxsaT5yZW1vdmVkIENHRXh0ZW5zaW9ucyBkZXBlbmRhbmN5PC9saT4KICAgPGxpPkJ1ZyBmaXg6IGRlZmF1bHQgdmFsdWUgbm93IHdvcmtzIGZvciBjaGVja2JveCwgaW5wdXQsIHRleHRhcmVhICYgZWRpdG9yIGNvbnRlbnQgYmxvY2tzPC9saT4KPC91bD4KPGJyPgoKCjxoMz5WZXJzaW9uIDEuNS4zIC0gMTdKdW4xOTwvaDM+Cjx1bD4KICAgPGxpPm1pbm9yIGJ1ZyBmaXggaW4gaGVscDwvbGk+CjwvdWw+Cjxicj4KCgo8aDM+VmVyc2lvbiAxLjUuMiAtIDE5RmViMTk8L2gzPgo8dWw+CiAgIDxsaT5idWcgZml4IC0gYWRtaW4ganMgdXBkYXRlZCAtIGZpeGVzIHYxLjUuMSBtdWx0aXBsZSBzZWxlY3QncyAmIGlucHV0X3JlcGVhdGVyIG5vdCB3b3JraW5nIC0gcGxlYXNlIHVwZGF0ZTwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuNS4xIC0gMThGZWIxOTwvaDM+Cjx1bD4KICAgPGxpPmdhbGxlcnlfcGlja2VyIC0gYnVnIGZpeDwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuNSAtIDE2RmViMTk8L2gzPgo8dWw+CiAgIDxsaT5pbnB1dF9yZXBlYXRlciBjb250ZW50IGJsb2NrIC0gYWRkZWQgLSB0aGFua3MgdG8gU2ltb24gUmFkZm9yZDwvbGk+CiAgIDxsaT5nYWxsZXJ5X3BpY2tlciBjb250ZW50IGJsb2NrIC0gYWRkZWQ8L2xpPgogICA8bGk+ZHJvcGRvd25fZnJvbV9jdXN0b21ncyBjb250ZW50IGJsb2NrIC0gYWRkZWQ8L2xpPgogICA8bGk+YWRkZWQgZXJyb3IgbWVzc2FnZSBmb3IgbWlzc2luZyBvciBpbmNvcnJlY3RseSBzcGVsdCBmaWVsZCBwYXJhbWF0ZXIgLSBCUiMxMTU1NyAtIHRoYW5rcyBMdWRnZXI8L2xpPgogICA8bGk+cmVtb3ZlZCBBZG1pbiBwYWdlIHRoYXQgb25seSBzaG93ZWQgaGVscCAtIHJlZHVuZGFudCBhcyBoZWxwIGVhc2lseSB2aXNpYmxlIGZyb20gd2l0aGluIE1vZHVsZSBNYW5hZ2VyPC9saT4KICAgPGxpPnJlbW92ZWQgUGVybWlzc2lvbiAnVXNlIEVDQjInIC0gYWxzbyByZWR1bmRhbnQ8L2xpPgogICA8bGk+Y29kZSB0aWR5IHVwIC0gY29uc29saWRhdGUganMgJiBjc3MgaW50byBzZXBhcmF0ZSBleHRlcm5hbCBmaWxlczwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMy4xIC0gMTJKdWwxNzwvaDM+Cjx1bD4KICAgPGxpPm1pbm9yIGJ1ZyBmaXg8L2xpPgo8L3VsPgo8YnI+Cgo8aDM+VmVyc2lvbiAxLjMgLSAxMUp1bDE3PC9oMz4KPHVsPgogICA8bGk+c29ydGFibGVsaXN0IC0gYWRkZWQgbWF4X251bWJlciBhbmQgcmVxdWlyZWRfbnVtYmVyIG9wdGlvbnM8L2xpPgogICA8bGk+QWRkZWQgJ2ZpZWxkc2V0X3N0YXJ0JyBhbmQgJ2ZpZWxkc2V0X2VuZCcgZmllbGRzPC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS4yLjIgLSAwNUp1bDE3PC9oMz4KPHVsPgogICA8bGk+dGVzdCBmb3IgYW5kIGRpc3BsYXkgd2FybmluZyBpbiBhZG1pbiBpZiBVRFQgZG9lcyBub3QgZXhpc3Q8L2xpPgo8L3VsPgo8YnI+Cgo8aDM+VmVyc2lvbiAxLjIuMSAtIDE5QXByMTc8L2gzPgo8dWw+CiAgIDxsaT5idWcgZml4IGZvciBjb2xvcl9waWNrZXIsIGRlZmF1bHRfdmFsdWUgLSBCUiMxMTM1NCAtIHRoYW5rcyBTdHVhcnQ8L2xpPgogICA8bGk+Y29sb3JfcGlja2VyIC0gdHdlYWtlZCBsYXlvdXQ8L2xpPgogICA8bGk+c29ydGFibGVsaXN0IC0gbm93IHVzZSBqcXVlcnkgc29ydGFibGUgaW5zdGVhZCBvZiBDR0V4dGVuc2lvbnMuIFBhcmFtZXRlcnMgcmVtb3ZlZDogJ3RlbXBsYXRlJy4gUGFyYW1ldGVycyBub3Qgb3BlcmF0aW9uYWw6ICdtYXhfc2VsZWN0ZWQnLCAnYWxsb3dkdXBsaWNhdGVzJyAocGxlYXNlIGFkdmlzZSBpZiB5b3UgcmVxdWlyZSB0aGVzZSkuIFBsdXMgc29tZSBidWcgZml4ZXMuPC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS4yIC0gMDdOb3YxNjwvaDM+Cjx1bD4KICAgPGxpPkFkZGVkICdkZXNjcmlwdGlvbicgcGFyYW1ldGVyIGZvciBhbGwgZmllbGRzIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yPC9saT4KICAgPGxpPkFkZGVkICdoaWRkZW4nIGZpZWxkIC0gQ2FuIGJlIHVzZWQgdG8gc2V0IGEgcGFnZSBhdHRyaWJ1dGUgdGhhdCBjYW4gdGhlbiBiZSBhY2Nlc3NlZCAoZS5nLiBmcm9tIGEgTmF2aWdhdG9yLVRlbXBsYXRlKSwgdXNpbmcgPC9saT4KICAgPGxpPkJ1ZyBmaXggLSBmb3IgcGhwIG5vdGljZTwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMSAtIDE1QXByMTY8L2gzPgo8dWw+CiAgICA8bGk+QnVnIGZpeDwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMCAtIDE1QXByMTY8L2gzPgo8dWw+CiAgICA8bGk+SW5pdGlhbCByZWxlYXNlLiBBIGZvcmsgb2YgRUNCIG1vZHVsZSB2MS42LCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBDTVNNUyB2Mis8L2xpPgogICAgPGxpPkFkZGVkIHJhZGlvIGZpZWxkIC0gdG8gcHJvdmlkZSByYWRpbyBidXR0b25zIG9uIGFuIGFkbWluIHBhZ2U8L2xpPgo8L3VsPgo8YnI+PGJyIC8+]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpCiAgICBleGl0OwoKIyMgbm90aGluZyAtIHNob3VsZCBub3QgZ2V0IGhlcmUKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpCiAgICBleGl0OwoKIyMgbm90aGluZyAtIHNob3VsZCBub3QgZ2V0IGhlcmUKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.refresh.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKaWYgKCFpc3NldCgkcGFyYW1zWydibG9ja19uYW1lJ10pIHx8ICFpc3NldCgkcGFyYW1zWyd2YWx1ZSddKSB8fCAhaXNzZXQoJHBhcmFtc1snYWRkaW5nJ10pKQogICAgcmV0dXJuOwoKJGJsb2NrTmFtZSA9ICRwYXJhbXNbJ2Jsb2NrX25hbWUnXTsKJHZhbHVlID0gJHBhcmFtc1sndmFsdWUnXTsKJGFkZGluZyA9ICRwYXJhbXNbJ2FkZGluZyddOwoKCiRlY2IyID0gbmV3IGVjYjJfdG9vbHMoJGJsb2NrTmFtZSwgJHZhbHVlLCAkcGFyYW1zLCAkYWRkaW5nKTsKZWNobyAkZWNiMi0+Z2V0X2NvbnRlbnRfYmxvY2tfaW5wdXQoKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/ECB2.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mIG1vZHVsZTogRXh0ZW5kZWQgQ29udGVudCBCbG9ja3MgKEVDQikKIyBPcmlnaW5hbCBBdXRob3I6IFpkZW5vIEt1em1hbnkgKHpkZW5vQGt1em1hbnkuYml6KSAvIGt1em1hbnkuYml6ICAvIHR3aXR0ZXIuY29tL2t1em1hbnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgTW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZWNiMgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzCiMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOwojIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiMgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBFQ0IyIGV4dGVuZHMgXENNU01vZHVsZSB7CgogICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CiAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIEdldE5hbWUoKSB7IHJldHVybiAnRUNCMic7ICB9CiAgIHB1YmxpYyBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7IHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7IH0KICAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7IHJldHVybiAnMS42LjEnOyB9CiAgIHB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcyLjAnOyB9CiAgIHB1YmxpYyBmdW5jdGlvbiBMYXp5TG9hZEZyb250ZW5kKCkgeyByZXR1cm4gVFJVRTsgfQogICBwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUFkbWluKCkgeyAkdGhpcy0+QWRkSW1hZ2VEaXIoJ2ljb25zJyk7IH0KICAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKSB7CiAgICAgICRzbWFydHkgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0U21hcnR5KCk7CiAgICAgICRzbWFydHktPmFzc2lnbignbW9kJywgJHRoaXMpOwogICAgICByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnX2hlbHAudHBsJyk7CiAgIH0KICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdDaHJpcyBUYXlsb3IgKHR3aXR0ZXIuY29tL0tpd2lDaHJpc0JUKSc7IH0KICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgeyByZXR1cm4gJ2NocmlzQGJpbm5vdmF0aXZlLmNvLnVrJzsgfQogICBwdWJsaWMgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgeyByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnX2NoYW5nZWxvZy50cGwnKTsgfQogICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiBGQUxTRTt9CiAgIHB1YmxpYyBmdW5jdGlvbiBHZXREZXNjcmlwdGlvbigpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2R1bGVfZGVzY3JpcHRpb24nKTsgfQogICBwdWJsaWMgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7fQogICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpO30KICAgcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpO30KCiAgIHB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKSB7CiAgICAgICR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbigpOwogICAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdibG9ja19uYW1lJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3ZhbHVlJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2FkZGluZycsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzb3J0ZmlsZXMnLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZXhjbHVkZXByZWZpeCcsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdyZWN1cnNlJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2ZpbGV0eXBlcycsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdmaWVsZCcsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkaXInLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgncHJldmlldycsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkYXRlX2Zvcm1hdCcsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkZXNjcmlwdGlvbicsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkZWZhdWx0X3ZhbHVlJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ21heF9udW1iZXInLCBDTEVBTl9JTlQpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbWF4bnVtYmVyJywgQ0xFQU5fSU5UKTsKICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2xlZ2VuZCcsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjb21wYWN0JywgQ0xFQU5fU1RSSU5HKTsKICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3NpemUnLCBDTEVBTl9JTlQpOwogICB9CgoKCiAgIGZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksICRwYXJhbXMgPSBhcnJheSgpKSB7CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8gaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9hcGlkb2MvQ01TL0NNU01vZHVsZS5odG1sI0hhc0NhcGFiaWxpdHkKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICBzd2l0Y2ggKCRjYXBhYmlsaXR5KSB7CiAgICAgICAgIGNhc2UgJ2NvbnRlbnRibG9ja3MnOgogICAgICAgICAgICByZXR1cm4gVFJVRTsKCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgfQogICB9CgoKCiAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDb250ZW50QmxvY2tGaWVsZElucHV0KCRibG9ja05hbWUsICR2YWx1ZSwgJHBhcmFtcywgJGFkZGluZz1mYWxzZSwgQ29udGVudEJhc2UgJGNvbnRlbnRfb2JqKSB7CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8gaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9BUElET0MyXzAvY2xhc3Nlcy9DTVNNb2R1bGUuaHRtbCNtZXRob2RfR2V0Q29udGVudEJsb2NrRmllbGRJbnB1dAogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICRlY2IyID0gbmV3IGVjYjJfdG9vbHMoJGJsb2NrTmFtZSwgJHZhbHVlLCAkcGFyYW1zLCAkYWRkaW5nKTsKCiAgICAgIHJldHVybiAkZWNiMi0+Z2V0X2NvbnRlbnRfYmxvY2tfaW5wdXQoKTsKICAgfQoKCgp9CgoK]]></data>
	</file>
	<file>
	  <filename>/icons/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/icons/ajax-refresh-icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMQAAP///wAAAPj4+Dg4OISEhAYGBiYmJtbW1qioqBYWFnZ2dmZmZuTk5JiYmMbGxkhISFZWVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVQICCOZGmepTAUbCEqhGCqrZgUxpEaNYDwBtmIgFuNBDwCaYVQkRCFAYmFoo6sKSyASVr4oiRi8LpIkpA4hKg1Jh14iTVrIDwTFPJ5HcXvj0IAOw==]]></data>
	</file>
	<file>
	  <filename>/icons/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnRXh0ZW5kZWQgQ29udGVudCBCbG9ja3MgMiB3YXMgc3VjY2Vzc2Z1bCBpbnN0YWxsZWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0V4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIgd2FzIHN1Y2Nlc3NmdWwgdW5pbnN0YWxsZWQnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc2luc3RhbGwgdGhpcyBmaW5lIG1vZHVsZT8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1snbW9kdWxlX2Rlc2NyaXB0aW9uJ10gPSAnVGhpcyBtb2R1bGUgYWRkcyBuZXcgY29udGVudCBibG9ja3MgdG8gQ01TIE1hZGUgU2ltcGxlIHYyKyc7CgokbGFuZ1snc2VsZWN0ZWQnXSA9ICdTZWxlY3RlZCc7CiRsYW5nWydzZWxlY3QnXSA9ICdTZWxlY3QnOwokbGFuZ1sncmVmcmVzaCddID0gJ1JlZnJlc2gnOwoKJGxhbmdbJ2NvbnRlbnRfYmxvY2tfbGFiZWxfc2VsZWN0ZWQnXSA9ICdTZWxlY3RlZCc7CiRsYW5nWydjb250ZW50X2Jsb2NrX2xhYmVsX2F2YWlsYWJsZSddID0gJ0F2YWlsYWJsZSc7CiRsYW5nWydkcm9wX2l0ZW1zJ10gPSAnTm8gaXRlbXMgc2VsZWN0ZWQgLSBkcm9wIHNlbGVjdGVkIGl0ZW1zIGhlcmUnOwokbGFuZ1snZHJvcF9yZXF1aXJlZF9pdGVtcyddID0gJ0Ryb3AgJXMgcmVxdWlyZWQgaXRlbXMgaGVyZSc7CiRsYW5nWydyZW1vdmUnXSA9ICdSZW1vdmUnOwoKJGxhbmdbJ3VkdF9lcnJvciddID0gJ1VEVCBcJyVzXCcgZG9lcyBub3QgZXhpc3QnOwokbGFuZ1snY3VzdG9tZ3NfZmllbGRfZXJyb3InXSA9ICJQbGVhc2UgY3JlYXRlIG9wdGlvbiAnJXMnIGluIEN1c3RvbUdTIjsKJGxhbmdbJ2ZpZWxkX2Vycm9yJ10gPSAnUGxlYXNlIHNwZWNpZnkgYSBjb3JyZWN0IGZpZWxkIHBhcmFtZXRlciBmb3IgdGhlIEVDQjIgY29udGVudCBibG9jay4nOwoKJGxhbmdbJ2dhbGxlcnlfbW9kdWxlX2Vycm9yJ10gPSAnR2FsbGVyeSBtb2R1bGUgaXMgbm90IGluc3RhbGxlZC4nOwoKJGxhbmdbJ2FkZF9saW5lJ10gPSAnQWRkIGxpbmUnOwokbGFuZ1sncmVtb3ZlX2xpbmUnXSA9ICdSZW1vdmUgbGluZSc7CgokbGFuZ1snbm9uZV9zZWxlY3RlZCddID0gJy0tLSBub25lIC0tLSc7CgoKCgoKCgoKIyMjICAgICMjIyAgICMjIyMjIyMjIyAgICMjIyAgICAgICAgIyMjIyMjIyMjCiMjIyAgICAjIyMgICAjIyMjIyMjIyMgICAjIyMgICAgICAgICMjIyMjIyMjIwojIyMgICAgIyMjICAgIyMjICAgICAgICAgIyMjICAgICAgICAjIyMgICAjIyMKIyMjIyMjIyMjIyAgICMjIyMjIyMjIyAgICMjIyAgICAgICAgIyMjIyMjIyMjCiMjIyMjIyMjIyMgICAjIyMjIyMjIyMgICAjIyMgICAgICAgICMjIyMjIyMjIwojIyMgICAgIyMjICAgIyMjICAgICAgICAgIyMjICAgICAgICAjIyMKIyMjICAgICMjIyAgICMjIyMjIyMjIyAgICMjIyMjIyMjIyAgIyMjCiMjIyAgICAjIyMgICAjIyMjIyMjIyMgICAjIyMjIyMjIyMgICMjIwoKCgokbGFuZ1snZ2VuZXJhbCddID0gJ0dlbmVyYWwnOwokbGFuZ1snZ2VuZXJhbF9jJ10gPSAnCiAgIDxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgogICA8cD5Nb2R1bGUgYWRkcyBhZGl0aW9uYWwgY29udGVudCBibG9ja3MgZm9yIENNUyBNYWRlIFNpbXBsZSB2MisuIFRoaXMgaXMgYSBmb3JrIG9mIHRoZSBvcmlnaW5hbCBFQ0IgbW9kdWxlIHRoYXQgd29ya2VkIHdpdGggQ01TTVMgdjEuPC9wPgogICA8cD5Qcm92aWRlcyB0aGUgZm9sbG93aW5nIGZpZWxkIHR5cGVzOjxicj4KICAgPG9sPgogICAgICA8bGk+ZmlsZV9zZWxlY3RvcjwvbGk+CiAgICAgIDxsaT5jb2xvcl9waWNrZXI8L2xpPgogICAgICA8bGk+ZHJvcGRvd248L2xpPgogICAgICA8bGk+ZHJvcGRvd25fZnJvbV91ZHQ8L2xpPgogICAgICA8bGk+ZHJvcGRvd25fZnJvbV9jdXN0b21nczwvbGk+CiAgICAgIDxsaT5jaGVja2JveDwvbGk+CiAgICAgIDxsaT5tb2R1bGVfbGluazwvbGk+CiAgICAgIDxsaT5saW5rPC9saT4KICAgICAgPGxpPnRpbWVwaWNrZXI8L2xpPgogICAgICA8bGk+ZGF0ZXBpY2tlcjwvbGk+CiAgICAgIDxsaT5pbnB1dDwvbGk+CiAgICAgIDxsaT50ZXh0YXJlYTwvbGk+CiAgICAgIDxsaT5lZGl0b3IgKHRleHRhcmVhIHdpdGggd3lzaXd5Zyk8L2xpPgogICAgICA8bGk+dGV4dCA8L2xpPgogICAgICA8bGk+cGFnZXMgPC9saT4KICAgICAgPGxpPmhyIChob3Jpem9udGFsIGxpbmUpPC9saT4KICAgICAgPGxpPnNvcnRhYmxlbGlzdDwvbGk+CiAgICAgIDxsaT5yYWRpbzwvbGk+CiAgICAgIDxsaT5oaWRkZW48L2xpPgogICAgICA8bGk+ZmllbGRzZXRfc3RhcnQ8L2xpPgogICAgICA8bGk+ZmllbGRzZXRfZW5kPC9saT4KICAgICAgPGxpPmdhbGxlcnlfcGlja2VyPC9saT4KICAgICAgPGxpPmlucHV0X3JlcGVhdGVyPC9saT4KICAgPC9vbD4KICAgPC9wPjxicj4KCiAgIDxwPklmIHlvdSBsaWtlIHRoaXMgbW9kdWxlIHBsZWFzZSA8YSBocmVmPSJodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2Fib3V0LWxpbmsvZG9uYXRpb25zLyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJmb250LXdlaWdodDpib2xkOyI+ZG9uYXRlIHRvIENNU01TPC9hPjwvcD48YnI+CiAgICc7CgokbGFuZ1snYWJvdXQnXSA9ICdBYm91dCc7CiRsYW5nWydhYm91dF9jJ10gPSAnCiAgIDxoMz5VcGdyYWRlIGZyb20gRUNCPC9oMz4KICAgPHA+SW5zdGFsbCBFQ0IyIG1vZHVsZSBhbmQgY2hhbmdlIGFsbCAibW9kdWxlIiBwYXJhbWV0ZXJzLCBpbiBjb250ZW50X21vZHVsZSB0YWdzIHRvIGJlIG1vZHVsZT0iRUNCMiIgKHdhcyAiRUNCIikuIFRoZW4gRUNCIGNhbiBiZSB1bmluc3RhbGxlZC48L3A+PGJyPgoKCiAgIDxoMz5TdXBwb3J0PC9oMz4KICAgPHA+QXMgcGVyIHRoZSBHUEwgbGljZW5jZSwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcyBpcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuCiAgIFRoZSBtb2R1bGUgYXV0aG9yIGlzIG5vdCBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGlzIGNvZGUuIEhvd2V2ZXIgeW91IG1pZ2h0IGdldCBzdXBwb3J0IHRocm91Z2ggdGhlIGZvbGxvd2luZzo8L3A+CiAgIDx1bD4KICAgICAgPGxpPkZvciBzdXBwb3J0LCBmaXJzdCA8c3Ryb25nPnNlYXJjaDwvc3Ryb25nPiB0aGUgPGEgaHJlZj0iLy9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtPC9hPiwgZm9yIGlzc3VlcyB3aXRoIHRoZSBtb2R1bGUgc2ltaWxhciB0byB0aG9zZSB5b3UgYXJlIGZpbmRpbmcuPC9saT4KICAgICAgPGxpPlRoZW4sIGlmIG5lY2Vzc2FyeSwgb3BlbiBhIDxzdHJvbmc+bmV3IGZvcnVtIHRvcGljPC9zdHJvbmc+IHRvIHJlcXVlc3QgaGVscCwgd2l0aCBhIHRob3JvdWdoIGRlc2NyaXB0aW9uIG9mIHlvdXIgaXNzdWUsIGFuZCBzdGVwcyB0byByZXByb2R1Y2UgaXQuPC9saT4KICAgICAgPGxpPklmIHlvdSBmaW5kIGEgYnVnIHlvdSBjYW4gPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9idWcvbGlzdC8xMzY2Ij5zdWJtaXQgYSBCdWcgUmVwb3J0PC9hPi48L2xpPgogICAgICA8bGk+Rm9yIGFueSBnb29kIGlkZWFzIHlvdSBjYW4gPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9mZWF0dXJlX3JlcXVlc3QvbGlzdC8xMzY2Ij5zdWJtaXQgYSBGZWF0dXJlIFJlcXVlc3Q8L2E+LjwvbGk+CiAgICAgIDxsaT5JZiB5b3UgZm91bmQgdGhlIE1vZHVsZSB1c2VmdWwgLSBzaG91dCBvdXQgdG8gbWUgb24gVHdpdHRlciA8YSBocmVmPSIvL3R3aXR0ZXIuY29tL0tpd2lDaHJpc0JUIj5AS2l3aUNocmlzQlQ8L2E+PC9saT4KICAgPC91bD48YnI+CgoKICAgPGgzPkNvcHlyaWdodCAmYW1wOyBMaWNlbmNlPC9oMz4KICAgPHA+Q29weXJpZ2h0IMKpIDIwMTksIENocmlzIFRheWxvciA8Y2hyaXMgYXQgYmlubm92YXRpdmUgZG90IGNvIGRvdCB1az4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD48YnI+CiAgIDxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdjMuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiBZb3UgbWF5IG9ubHkgdXNlIHRoaXMgc29mdHdhcmUgd2hlbiB0aGVyZSBpcyBhIGNsZWFyIGFuZCBvYnZpb3VzIGluZGljYXRpb24gaW4gdGhlIGFkbWluIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBTaW1wbGUhPC9wPjxicj4KICAgPGJyPgonOwoKCiRsYW5nWydmaWVsZHMnXSA9ICdGaWVsZHMnOwokbGFuZ1snZmllbGRzX2MnXSA9IDw8PCdFT0QnCgo8aDM+RmllbGRzPC9oMz4KCjxwPjxzdHJvbmc+ZmlsZV9zZWxlY3Rvcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZTogIHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJmaWxlX3NlbGVjdG9yIiBibG9jaz0idGVzdDEwIiBkaXI9ImltYWdlcyIgZmlsZXR5cGVzPSJqcGcsZ2lmLHBuZyIgZXhjbHVkZXByZWZpeD0idGh1bWJfIn0gICAgICAgIDwvcD4KPHA+UGFyYW1ldGVyczoKZmlsZXR5cGVzIC0gY29tbWEgc2VwYXJhdGVkPGJyPgpkaXIgKG9wdGlvbmFsKSAtIGRlZmF1bHQgdXBsb2Fkcy88YnI+CmV4Y2x1ZGVwcmVmaXggKG9wdGlvbmFsKTxicj4KcmVjdXJzZSAob3B0aW9uYWwpIC0gZGVmYXVsdCBmYWxzZSwgcmVjdXJzZT0xIHdpbGwgc2hvdyBhbGwgZmlsZXMgaW4gc3ViZm9sZGVycwpzb3J0ZmlsZXMgKG9wdGlvbmFsKTxicj4KcHJldmlldyAob3B0aW9uYWwpIC0gb25seSBmb3IgaW1hZ2VzPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKCjxwPjxzdHJvbmc+Y29sb3JfcGlja2VyPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiAge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImNvbG9yX3BpY2tlciIgYmxvY2s9InRlc3QxIiBsYWJlbD0iQ29sb3IiIGRlZmF1bHRfdmFsdWU9IiMwMDAwMDAifTwvcD4KPHA+UGFyYW1ldGVyczoKZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpPGJyPgpzaXplIChvcHRpb25hbCkgLSBkZWZhdWx0IDEwPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKCgo8cD48c3Ryb25nPmRyb3Bkb3duPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZHJvcGRvd24iIGJsb2NrPSJ0ZXN0NSIgbGFiZWw9IkZydWl0IiAgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlIiBmaXJzdF92YWx1ZT0ic2VsZWN0IGZydWl0In08L3A+CjxwPlBhcmFtZXRlcnM6CnZhbHVlcyAocmVxdWlyZWQpIC0gY29tbWEgc2VwYXJhdGVkLiBFeGFtcGxlOiBBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEdyZWVuPWdyZWVuIDxicj4KZmlyc3RfdmFsdWUgKG9wdGlvbmFsKTxicj4KbXVsdGlwbGUgKG9wdGlvbmFsKSAtIGFkZCBtdWx0aXBsZSBvcHRpb24gc2VsZWN0IHN1cHBvcnQ8YnI+CnNpemUgKG9wdGlvbmFsKSAtIG11bHRpcGxlIGVuYWJsZWQgb25seTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3I8YnI+CmNvbXBhY3QgKG9wdGlvbmFsKSAtIGRlZmF1bHQ6ZmFsc2UgLSBpZiBzZXQsIGEgc3VtbWFyeSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpcyBkaXNwbGF5ZWQgYW5kIHRoZSBmdWxsIHNlbGVjdCBpcyBzaG93bi9oaWRkZW4gd2hlbiAnZWRpdC9oaWRlJyBpcyBjbGlja2VkCjwvcD48YnI+CgoKCjxwPjxzdHJvbmc+ZHJvcGRvd25fZnJvbV91ZHQ8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkcm9wZG93bl9mcm9tX3VkdCIgYmxvY2s9InRlc3QyIiBsYWJlbD0iR2FsbGVyeSIgdWR0PSJteWN1c3RvbXVkdCIgIGZpcnN0X3ZhbHVlPSI9c2VsZWN0PSJ9PC9wPgo8cD5PdXB1dCBmcm9tIFVEVCBtdXN0IGJlIGFycmF5KCkgLSBleGFtcGxlOiByZXR1cm4gYXJyYXkoImxhYmVsIj0+InZhbHVlIiwgImxhYmVsIDIgIj0+InZhbHVlIDIiKTwvcD4KPHA+UGFyYW1ldGVyczoKdWR0IChyZXF1aXJlZCkgLSB1ZHQgbmFtZTxicj4KZmlyc3RfdmFsdWUgKG9wdGlvbmFsKSA8YnI+Cm11bHRpcGxlIChvcHRpb25hbCkgLSBhZGQgbXVsdGlwbGUgb3B0aW9uIHNlbGVjdCBzdXBwb3J0PGJyPgpzaXplIChvcHRpb25hbCkgLSBtdWx0aXBsZSBlbmFibGVkIG9ubHk8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yPGJyPgpjb21wYWN0IChvcHRpb25hbCkgLSBkZWZhdWx0OmZhbHNlIC0gaWYgc2V0LCBhIHN1bW1hcnkgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaXMgZGlzcGxheWVkIGFuZCB0aGUgZnVsbCBzZWxlY3QgaXMgc2hvd24vaGlkZGVuIHdoZW4gJ2VkaXQvaGlkZScgaXMgY2xpY2tlZAo8L3A+CjxwPjxzdHJvbmc+RXhhbXBsZXMgVURUPC9zdHJvbmc+Ogo8YnI+CjxhIGhyZWY9Imh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2t1em1hbnkvNjc3OWMxOTNiODEwNGFhNmFiZmUiPkdhbGxlcnkgbGlzdCBmcm9tIEdhbGxlcnkgbW9kdWxlPC9hPiA8YnI+CjxhIGhyZWY9Imh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2t1em1hbnkvNDY0Mjc2ZTE2ZjNiNzRjMDc1NTUiPkdyb3VwIGxpc3QgZnJvbSBGRVU8L2E+IDxicj4KPGEgaHJlZj0iaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va3V6bWFueS81MTU4M2M2NDM5Y2IwNDE2NzlhNiI+VXNlcnMgbGlzdCBmcm9tIEZFVTwvYT4KPC9wPjxicj4KCgo8cD48c3Ryb25nPmRyb3Bkb3duX2Zyb21fY3VzdG9tZ3M8L3N0cm9uZz4gPHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPm5ldzwvc3Bhbj48L3A+CjxwPlByb3ZpZGVzIGEgc2luZ2xlIG9yIG11bHRpcGxlIHNlbGVjdCB1c2luZyB0aGUgY29udGVudCBzZXQgaW4gYSBDdXN0b21HUyBNb2R1bGUgZmllbGQuPC9wPgo8cD5SZXF1aXJlcyB0aGUgQ3VzdG9tR1MgbW9kdWxlIGFuZCB0byBoYXZlIGEgZmllbGQgb2YgdHlwZSAndGV4dCBhcmVhJy48L3A+CjxwPkV4YW1wbGU6CiAgICAgIHtjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdkcm9wZG93bl9mcm9tX2N1c3RvbWdzJyBjdXN0b21nc19maWVsZD0nU2VjdGlvbl9TdHlsZXMnIGJsb2NrPXN0eWxlMSBsYWJlbD0nU2VjdGlvbiAxIExheW91dCBTdHlsZScgYXNzaWduPXN0eWxlMX08L3A+CjxwPlBhcmFtZXRlcnM6PC9wPgo8dWw+CiAgIDxsaT5jdXN0b21nc19maWVsZCAocmVxdWlyZWQpIC0gbmFtZSBvZiBjdXN0b21nc19maWVsZCB0byByZXRyaWV2ZSAod2l0aCB1bmRlcnNjb3JlcyBub3Qgc3BhY2VzKTwvbGk+CiAgIDxsaT5kZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIGZpZWxkPC9saT4KICAgPGxpPm11bHRpcGxlIChvcHRpb25hbCkgLSBhbiBvcHRpb24gaWYgc2V0LCB0byBvdXB1dCBhIG11bHRpLXNlbGVjdCBib3ggcmF0aGVyIHRoYW4gYSBzaW5nbGUgc2VsZWN0IGRyb3duZG93bjwvbGk+CiAgIDxsaT5zaXplIChvcHRpb25hbCkgLSBhbiBvcHRpb24gdG8gc2V0IHRoZSBzaXplIG9mIGEgbXVsdGktc2VsZWN0IGJveDwvbGk+CiAgIDxsaT5jb21wYWN0IChvcHRpb25hbCkgLSBkZWZhdWx0OmZhbHNlIC0gaWYgc2V0LCBhIHN1bW1hcnkgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaXMgZGlzcGxheWVkIGFuZCB0aGUgZnVsbCBzZWxlY3QgaXMgc2hvd24vaGlkZGVuIHdoZW4gJ2VkaXQvaGlkZScgaXMgY2xpY2tlZDwvbGk+CjwvdWw+Cjxicj4KCgoKPHA+PHN0cm9uZz5jaGVja2JveDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImNoZWNrYm94IiBibG9jaz0idGVzdDExIiBsYWJlbD0iQ2hlY2tib3giIGRlZmF1bHRfdmFsdWU9IjEifTwvcD4KPHA+UGFyYW1ldGVyczoKZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5tb2R1bGVfbGluazwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9Im1vZHVsZV9saW5rIiBsYWJlbD0iTW9kdWxlIGVkaXQiIGJsb2NrPSJ0ZXN0MyIgbW9kPSJDYXRhbG9nZXIiIHRleHQ9IkVkaXQgY2F0YWxvZyIgfTwvcD4KPHA+UGFyYW1ldGVyczoKbW9kIChyZXF1aXJlZCkgPGJyPgp0ZXh0IChyZXF1aXJlZCkgPGJyPgp0YXJnZXQgKG9wdGlvbmFsKSAtIGRlZmF1bHQgX3NlbGY8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmxpbms8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJsaW5rIiBsYWJlbD0iU2VhcmNoIiBibG9jaz0idGVzdDQiIHRhcmdldD0iX2JsYW5rIiBsaW5rPSJodHRwOi8vd3d3LmJpbmcuY29tIiB0ZXh0PSJiaW5nIHNlYXJjaCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpsaW5rIChyZXF1aXJlZCkgPGJyPgp0ZXh0IChyZXF1aXJlZCkgPGJyPgp0YXJnZXQgKG9wdGlvbmFsKSAtIGRlZmF1bHQgX3NlbGY8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnRpbWVwaWNrZXI8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJ0aW1lcGlja2VyIiBsYWJlbD0iVGltZSIgYmxvY2s9InRlc3Q0NSJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpzaXplIChvcHRpb25hbCkgZGVmYXVsdCAxMDA8YnI+CnRpbWVfZm9ybWF0IChvcHRpb25hbCkgZGVmYXVsdCBISDo6c3M8YnI+Cm1heF9sZW5ndGggKG9wdGlvbmFsKSBkZWZhdWx0IDEwPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5kYXRlcGlja2VyPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZGF0ZXBpY2tlciIgbGFiZWw9IkRhdGUiIGJsb2NrPSJ0ZXN0NDQifTwvcD4KPHA+UGFyYW1ldGVyczoKc2l6ZSAob3B0aW9uYWwpIGRlZmF1bHQgMTAwPGJyPgpkYXRlX2Zvcm1hdCAob3B0aW9uYWwpIGRlZmF1bHQgeXktbW0tZGQ8YnI+CnRpbWUgKG9wdGlvbmFsKSAtIGFkZCB0aW1lIHBpY2tlciBkZWZhdWx0IDA8YnI+CnRpbWVfZm9ybWF0IChvcHRpb25hbCkgZGVmYXVsdCBISDo6c3M8YnI+Cm1heF9sZW5ndGggKG9wdGlvbmFsKSBkZWZhdWx0IDEwIDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+aW5wdXQ8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJpbnB1dCIgbGFiZWw9IlRleHQiIGJsb2NrPSJ0ZXN0NSIgc2l6ZT01NSBtYXhfbGVuZ3RoPTU1IGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQifTwvcD4KPHA+UGFyYW1ldGVyczoKc2l6ZSAob3B0aW9uYWwpIGRlZmF1bHQgMzA8YnI+Cm1heF9sZW5ndGggKG9wdGlvbmFsKSBkZWZhdWx0IDI1NSA8YnI+CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKSAtIGRlZmF1bHQgdmFsdWUgZm9yIGlucHV0PGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz50ZXh0YXJlYTwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRleHRhcmVhIiBsYWJlbD0iVGV4dGFyZWEiIGJsb2NrPSJ0ZXN0NiIgcm93cz0xMCBjb2xzPTQwIGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQifTwvcD4KPHA+UGFyYW1ldGVyczoKcm93cyAob3B0aW9uYWwpIGRlZmF1bHQgMjA8YnI+CmNvbHMgKG9wdGlvbmFsKSBkZWZhdWx0IDgwIDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCB2YWx1ZSBmb3IgdGV4dGFyZWE8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmVkaXRvciAodGV4dGFyZWEgd2l0aCB3eXNpd3lnKTwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImVkaXRvciIgbGFiZWw9IlRleHRhcmVhIiBibG9jaz0idGVzdDciIHJvd3M9MTAgY29scz00MCBkZWZhdWx0X3ZhbHVlPSJmaWxsIGl0In08L3A+CjxwPlBhcmFtZXRlcnM6CnJvd3MgKG9wdGlvbmFsKSBkZWZhdWx0IDIwPGJyPgpjb2xzIChvcHRpb25hbCkgZGVmYXVsdCA4MCA8YnI+CmRlZmF1bHRfdmFsdWUgKG9wdGlvbmFsKSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRleHRhcmVhPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz50ZXh0IDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRleHQiIGxhYmVsPSJUZXh0IiBibG9jaz0idGVzdDgiIHRleHQ9IkhlbGxvIHdvcmQhIn08L3A+CjxwPlBhcmFtZXRlcnM6CnRleHQgKHJlcXVpcmVkKSB0ZXh0IGluIGFkbWluIChhZGQgaW5mb3JtYXRpb24gZm9yIHVzZXJzKTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+cGFnZXMgPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0icGFnZXMiIGxhYmVsPSJQYWdlIiBibG9jaz0idGVzdDEwIn08L3A+CjxwPlBhcmFtZXRlcnM6CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmhyIChob3Jpem9udGFsIGxpbmUpPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iaHIiIGxhYmVsPSJPdGhlciBibG9ja3MiIGJsb2NrPSJibG9ja25hbWUifTxwPgpQYXJhbWV0ZXJzOgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5zb3J0YWJsZWxpc3Q8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJzb3J0YWJsZWxpc3QiIGJsb2NrPSJ0ZXN0c29ydGFibGVsaXN0IiBsYWJlbD0iQ2hvb3NlIGZydWl0IiB1ZHQ9Im15ZHV0In08L3A+CjxwPlBhcmFtZXRlcnM6CnZhbHVlcyAob3B0aW9uYWwpIC0gY29tbWEgc2VwYXJhdGVkLiBFeGFtcGxlOiBcJ0FwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UsR3JlZW49Z3JlZW4sdmFsdWU9TGFiZWxcJyA8YnI+CnVkdCAob3B0aW9uYWwpIC0gbmFtZSBvZiB1ZHQgdGhhdCByZXR1cm5zIGFuIGFycmF5IGluIHRoZSBmb3JtYXQgXCd2YWx1ZVwnID0+IFwnTGFiZWxcJyw8YnI+CmZpcnN0X3ZhbHVlIChvcHRpb25hbCk8YnI+CmxhYmVsX2xlZnQgKG9wdGlvbmFsKTxicj4KbGFiZWxfcmlnaHQgKG9wdGlvbmFsKTxicj4KbWF4X251bWJlciAob3B0aW9uYWwpIC0gbGltaXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZDxicj4KcmVxdWlyZWRfbnVtYmVyIChvcHRpb25hbCkgLSBzZXRzIGEgc3BlY2lmaWMgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgbXVzdCBiZSBzZWxlY3RlZCAob3Igbm9uZSk8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnJhZGlvPC9zdHJvbmc+IDwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InJhZGlvIiBibG9jaz0idGVzdDE3IiBsYWJlbD0iRnJ1aXQiIHZhbHVlcz0iQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxLaXdpZnJ1aXQ9a2l3aWZydWl0IiBkZWZhdWx0X3ZhbHVlPSJPcmFuZ2UifTwvcD4KPHA+UGFyYW1ldGVyczoKdmFsdWVzIChyZXF1aXJlZCkgLSBjb21tYSBzZXBhcmF0ZWQuIEV4YW1wbGU6IEFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UsS2l3aWZydWl0PWtpd2lmcnVpdDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCBpcyBmaXJzdCBjaG9pY2UgLSBzZXQgdG8gZGVmYXVsdCB2YWx1ZSBlLmcuICJPcmFuZ2UiCmlubGluZSAob3B0aW9uYWwpIC0gaWYgc2V0IGRpc3BsYXlzIGFkbWluIHJhZGlvIGJ1dHRvbnMgaW5saW5lPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5oaWRkZW48L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGJsb2NrPSd0ZXN0MThoaWRkZW4nIGFzc2lnbj0ndGVzdGhpZGRlbicgZmllbGQ9J2hpZGRlbicgdmFsdWU9J21hcmtlcnZhbHVlJ308YnI+CkNhbiBiZSB1c2VkIHRvIHNldCBhIHBhZ2UgYXR0cmlidXRlIHRoYXQgY2FuIHRoZW4gYmUgYWNjZXNzZWQgKGUuZy4gZnJvbSBhIE5hdmlnYXRvci1UZW1wbGF0ZSksIHVzaW5nIHtwYWdlX2F0dHIgcGFnZT0kbm9kZS0+YWxpYXMga2V5PSd0ZXN0aGlkZGVuJ308L3A+CjxwPlBhcmFtZXRlcnM6CnZhbHVlIChyZXF1aXJlZCkgLSBoaWRkZW4gdmFsdWUgdG8gYmUgc2F2ZWQ8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmZpZWxkc2V0X3N0YXJ0PC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZmllbGRzZXRfc3RhcnQnIGxhYmVsPScmIG5ic3A7JyBibG9jaz0ndGVzdDE5ZmllbGRzZXQnIGFzc2lnbj0ndGVzdDE5ZmllbGRzZXQnIGxlZ2VuZD0nRmllbGRzZXQgVGVzdCBMZWdlbmQnIGRlc2NyaXB0aW9uPSdDYW4gYWRkIGEgZGVzY3JpcHRpb24gaW4gaGVyZSd9PGJyPgpDcmVhdGVzIHRoZSBzdGFydCBvZiBhIGZpZWxkc2V0IGZvciBncm91cGluZyByZWxhdmFudCBhZG1pbiBmaWVsZHMgdG9nZXRoZXIuIE5vdGU6IGEgbWF0Y2hpbmcgJ2ZpZWxkc2V0X2VuZCcgYmxvY2sgaXMgcmVxdWlyZWQgZm9yIGVhY2ggZmllbGRzZXRfc3RhcnQuPGJyPgpUSVA6IHNldCBsYWJlbD0nJiBuYnNwOycgdG8gbm90IHNob3cgdGhlIGZpZWxkIGxhYmVsLjwvcD4KPHA+UGFyYW1ldGVyczoKbGVnZW5kIChvcHRpb25hbCkgLSBhZGRzIGFuIG9wdGlvbmFsIGxlZ2VuZCAoZGVmYXVsdCA9IG5vIGxlZ2VuZCk8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmZpZWxkc2V0X2VuZDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2ZpZWxkc2V0X2VuZCcgbGFiZWw9JyYgbmJzcDsnIGJsb2NrPSd0ZXN0MTlmaWVsZHNldGVuZCcgYXNzaWduPSd0ZXN0MTlmaWVsZHNldGVuZCcgfTxicj4KQ3JlYXRlcyB0aGUgZW5kIG9mIGEgZmllbGRzZXQgZm9yIGdyb3VwaW5nIHJlbGF2YW50IGFkbWluIGZpZWxkcyB0b2dldGhlci4gTm90ZTogYSBtYXRjaGluZyAnZmllbGRzZXRfc3RhcnQnIGJsb2NrIGlzIHJlcXVpcmVkIGZvciBlYWNoIGZpZWxkc2V0X2VuZC48YnI+ClRJUDogc2V0IGxhYmVsPScmIG5ic3A7JyB0byBub3Qgc2hvdyB0aGUgZmllbGQgbGFiZWwuCjwvcD48YnI+CgoKPHA+PHN0cm9uZz5nYWxsZXJ5X3BpY2tlcjwvc3Ryb25nPiA8c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+bmV3PC9zcGFuPjwvcD4KPHA+UHJvdmlkZXMgYSBnYWxsZXJ5IHBpY2tlciBmb3IgdGhlIEdhbGxlcnkgbW9kdWxlLjwvcD4KPHA+RXhhbXBsZToKICAgICAge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2dhbGxlcnlfcGlja2VyJyBibG9jaz1wYWdlVG9wR2FsbGVyeSBsYWJlbD0nUGFnZSBUb3AgR2FsbGVyeScgZGlyPSdwYWdlLXRvcC1nYWxsZXJpZXMnfTwvcD4KPHA+UGFyYW1ldGVyczo8L3A+Cjx1bD4KICAgPGxpPmRpciAob3B0aW9uYWwpIC0gb25seSByZXR1cm5zIGdhbGxlcmllcyB0aGF0IGFyZSBzdWItZ2FsbGVyaWVzIG9mIHRoaXMgZ2FsbGVyeSBkaXIsIGRlZmF1bHQgaXMgYWxsIGdhbGxlcmllcywgZXhjbHVkaW5nIGRlZmF1bHQgdG9wIGxldmVsIGdhbGxlcnk8L2xpPgogICA8bGk+ZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZpZWxkPC9saT4KPC91bD4KPGJyPgoKCjxwPjxzdHJvbmc+aW5wdXRfcmVwZWF0ZXI8L3N0cm9uZz4gPHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPm5ldzwvc3Bhbj48L3A+CjxwPlByb3ZpZGVzIG9uZSBvciBtb3JlIHRleHQgaW5wdXRzIHRoYXQgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgYnkgdGhlIGVkaXRvci48L3A+CjxwPlRoZSBjb250ZW50IGJsb2NrIG91dHB1dCBpcyBhIHN0cmluZyB3aXRoIGVhY2ggaW5wdXQgZmllbGQncyBjb250ZW50cyBkZWxpbWl0ZXIgYnkgJ3x8Jy4gVG8gbWFrZSB0aGUgb3V0cHV0IGEgbW9yZSB1c2VmdWwgYXJyYXkgdXNlICdleHBsb2RlJywgZS5nLiB7Inx8InxleHBsb2RlOiRjb250ZW50X2Jsb2NrX25hbWV9PC9wPgo8cD5FeGFtcGxlOgogICAgICB7JGlucHV0X3JlcGVhdGVyX3Rlc3Q9Inx8InxleHBsb2RlOiJ7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0naW5wdXRfcmVwZWF0ZXInIGxhYmVsPSdUZXN0IDIyOiBpbnB1dF9yZXBlYXRlcicgYmxvY2s9J3Rlc3QyMicgc2l6ZT01MCBtYXhfbGVuZ3RoPTI1NSBkZXNjcmlwdGlvbj0nUHJlc3MgKCspIGFuZCAoLSkgdG8gYWRkIGFuZCByZW1vdmUgYWRkaXRpb25hbCBpbnB1dCBmaWVsZHMnfSIgc2NvcGU9Z2xvYmFsfTwvcD4KPHA+VG8gdXNlOiB7JGlucHV0X3JlcGVhdGVyX3Rlc3R8cHJpbnRfcn08L3A+Cjxicj4KRU9EOwoKCg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.ecb2_tools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIwojIEVDQjIgLSBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyCiMKIyBtYWludGFpbmVkIGJ5IENocmlzIFRheWxvciwgPGNocmlzQGJpbm5vdmF0aXZlLmNvLnVrPiwgc2luY2UgMjAxNgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBBIGZvcmsgb2YgbW9kdWxlOiBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAoRUNCKQojIE9yaWdpbmFsIEF1dGhvcjogWmRlbm8gS3V6bWFueSAoemRlbm9Aa3V6bWFueS5iaXopIC8ga3V6bWFueS5iaXogIC8gdHdpdHRlci5jb20va3V6bWFueQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDkgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NrZWxldG9uLwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgpjbGFzcyBlY2IyX3Rvb2xzIHsKCiAgIHByaXZhdGUgJGJsb2NrX25hbWUgPSAnJzsKICAgcHJpdmF0ZSAkdmFsdWUgPSAnJzsKICAgcHJpdmF0ZSAkYWRkaW5nID0gZmFsc2U7CiAgIHByaXZhdGUgJG9wdGlvbnMgPSBhcnJheSgpOwogICBwcml2YXRlICRhbGlhcyA9ICcnOwogICBwcml2YXRlICRmaWVsZCA9ICcnOwogICBwcml2YXRlICR0eHQgPSAnJzsKICAgcHJpdmF0ZSAkaXNfY29sb3JfcGlja2VyX2xpYl9sb2FkID0gZmFsc2U7CiAgIHByaXZhdGUgJGlzX2RhdGVwaWNrZXJfbGliX2xvYWQgPSBmYWxzZTsKICAgLyoqCiAgICAqCiAgICAqIEBwYXJhbSBzdHJpYm5nICRibG9ja05hbWUKICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICogQHBhcmFtIGJvb2xlYW4gJGFkZGluZwogICAgKi8KICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRibG9ja05hbWUsICR2YWx1ZSwgJHBhcmFtcywgJGFkZGluZykgewoKICAgICAgJHRoaXMtPmJsb2NrX25hbWUgPSAkYmxvY2tOYW1lOwogICAgICAkdGhpcy0+YWxpYXMgPSBtdW5nZV9zdHJpbmdfdG9fdXJsKCRibG9ja05hbWUsIHRydWUpOwogICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CgogICAgICAkdGhpcy0+YWRkaW5nID0gJGFkZGluZzsKCiAgICAgICR0aGlzLT5nZXRfZXh0cmFfb3B0aW9ucygkcGFyYW1zKTsKICAgICAgaWYgKCBpc3NldCgkdGhpcy0+b3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdKSAmJiBpc1NldCgkcGFyYW1zWyJkZWZhdWx0X3ZhbHVlIl0pICkgewogICAgICAgICAkdGhpcy0+ZGVmYXVsdCA9ICRwYXJhbXNbImRlZmF1bHRfdmFsdWUiXTsKICAgICAgICAgaWYgKCAkYWRkaW5nPT10cnVlICkgJHRoaXMtPnZhbHVlID0gJHRoaXMtPmRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC8vIGlmIGZpcnN0IEVDQjIgY29udGVudCBibG9jayBvbiB0aGUgcGFnZSAtIGxvYWQgRUNCMiBqcyAmIGNzcyAobW92ZSBhbGwganMgJiBjc3MgaW50byB0aGVzZSkKICAgICAgaWYgKCFjbXNfdXRpbHM6OmdldF9hcHBfZGF0YSgnRUNCMl9qc19jc3NfbG9hZGVkJykpIHsKICAgICAgICAgZWNobyAnCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL21vZHVsZXMvRUNCMi9saWIvY3NzL2VjYjJfYWRtaW4uY3NzIj4KICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSIuLi9tb2R1bGVzL0VDQjIvbGliL2pzL2VjYjJfYWRtaW4uanMiPjwvc2NyaXB0Pic7CiAgICAgICAgIGNtc191dGlsczo6c2V0X2FwcF9kYXRhKCdFQ0IyX2pzX2Nzc19sb2FkZWQnLCAxKTsKICAgICAgfQoKICAgfQoKICAgLyoqCiAgICogIGdldCBjb250ZW50IGJsb2NrCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICAgcHVibGljIGZ1bmN0aW9uIGdldF9jb250ZW50X2Jsb2NrX2lucHV0KCkgewoKICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAkZnVuY3Rpb24gPSAnZ2V0XycgLiAkdGhpcy0+ZmllbGQ7CiAgICAgICRmdW5jdGlvbkV4aXN0cyA9IG1ldGhvZF9leGlzdHMoJ2VjYjJfdG9vbHMnLCAkZnVuY3Rpb24pOwogICAgICBpZiAoIGVtcHR5KCR0aGlzLT5maWVsZCkgfHwgISRmdW5jdGlvbkV4aXN0cyApIHsKICAgICAgICAgJGVyciA9ICc8ZGl2IGNsYXNzPSJwYWdld2FybmluZyI+JyAuICRtb2QtPkxhbmcoJ2ZpZWxkX2Vycm9yJykgLiAnPC9kaXY+PGJyPic7CiAgICAgICAgIHJldHVybiAkZXJyOwogICAgICB9CgogICAgICBpZiAoICFlbXB0eSgkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXSkgKSB7CiAgICAgICAgICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddIC49ICc8YnI+JzsKICAgICAgfQogICAgICByZXR1cm4gJHRoaXMtPiRmdW5jdGlvbigpOwogICB9CgoKCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF90ZXh0YXJlYSgpIHsKICAgICAgICAkdG1wID0gJzx0ZXh0YXJlYSBuYW1lPSIlcyIgcm93cz0iJWQiIGNvbHM9IiVkIj4lczwvdGV4dGFyZWE+JzsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUgPyAkdGhpcy0+dmFsdWUgOiAkdGhpcy0+b3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS5zcHJpbnRmKCR0bXAsICR0aGlzLT5ibG9ja19uYW1lLCAkdGhpcy0+b3B0aW9uc1sicm93cyJdLCAkdGhpcy0+b3B0aW9uc1siY29scyJdLCAkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X3BhZ2VzKCkgewogICAgICAgICRjb250ZW50T3BzID0gXENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJGNvbnRlbnRPcHMtPkNyZWF0ZUhpZXJhcmNoeURyb3Bkb3duKCcnLCAkdGhpcy0+dmFsdWUsICR0aGlzLT5ibG9ja19uYW1lLCAxLCAxKTsKICAgIH0KCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9lZGl0b3IoKSB7CiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZSA/ICR0aGlzLT52YWx1ZSA6ICR0aGlzLT5vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl07CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLiRtb2QtPkNyZWF0ZVRleHRBcmVhKHRydWUsICcnLCAkdmFsdWUsICR0aGlzLT5ibG9ja19uYW1lLCAnJywgJycsICcnLCAnJywgJHRoaXMtPm9wdGlvbnNbImNvbHMiXSwgJHRoaXMtPm9wdGlvbnNbInJvd3MiXSk7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfaW5wdXQoKSB7CiAgICAgICAgJHRtcCA9ICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJXMiIHNpemU9IiVkIiBtYXhsZW5ndGg9IiVkIiB2YWx1ZT0iJXMiLz4nOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZSA/ICR0aGlzLT52YWx1ZSA6ICR0aGlzLT5vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl07CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLnNwcmludGYoJHRtcCwgJHRoaXMtPmJsb2NrX25hbWUsICR0aGlzLT5vcHRpb25zWyJzaXplIl0sICR0aGlzLT5vcHRpb25zWyJtYXhfbGVuZ3RoIl0sICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfdGltZXBpY2tlcigpIHsKICAgICAgICAkdG1wID0gJHRoaXMtPmdldF9kYXRlcGlja2VyX2xpYigpOwogICAgICAgICR0bXAgLj0gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0idGltZXBpY2tlciIgIG5hbWU9IiVzIiBzaXplPSIlZCIgbWF4bGVuZ3RoPSIlZCIgdmFsdWU9IiVzIi8+JzsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uc3ByaW50ZigkdG1wLCAkdGhpcy0+YmxvY2tfbmFtZSwgJHRoaXMtPm9wdGlvbnNbInNpemUiXSwgJHRoaXMtPm9wdGlvbnNbIm1heF9sZW5ndGgiXSwgJHRoaXMtPnZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9kYXRlcGlja2VyKCkgewogICAgICAgICR0bXAgPSAkdGhpcy0+Z2V0X2RhdGVwaWNrZXJfbGliKCk7CiAgICAgICAgJHRtcCAuPSAnPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJkYXRlcGlja2VyIiAgbmFtZT0iJXMiIHNpemU9IiVkIiBtYXhsZW5ndGg9IiVkIiB2YWx1ZT0iJXMiLz4nOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS5zcHJpbnRmKCR0bXAsICR0aGlzLT5ibG9ja19uYW1lLCAkdGhpcy0+b3B0aW9uc1sic2l6ZSJdLCAkdGhpcy0+b3B0aW9uc1sibWF4X2xlbmd0aCJdLCAkdGhpcy0+dmFsdWUpOwogICAgfQoKCgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfZGF0ZXBpY2tlcl9saWIoKSB7CiAgICAgICAgaWYgKCR0aGlzLT5pc19kYXRlcGlja2VyX2xpYl9sb2FkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgICAgICAkdG1wID0gIgogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9XCJqYXZhc2NyaXB0XCIgZmllbGQ9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIiIC4gJGNvbmZpZ1sicm9vdF91cmwiXSAuICIvbW9kdWxlcy8iIC4gJG1vZC0+R2V0TmFtZSgpIC4gIi9saWIvanMvanF1ZXJ5LXVpLXRpbWVwaWNrZXItYWRkb24uanNcIj48L3NjcmlwdD4KICAgICAgICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4KICAgICAgICAkKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkKCcuZGF0ZXBpY2tlcicpLiIgLiAoaXNzZXQoJHRoaXMtPm9wdGlvbnNbInRpbWUiXSkgJiYgJHRoaXMtPm9wdGlvbnNbInRpbWUiXSA/ICdkYXRldGltZXBpY2tlcicgOiAnZGF0ZXBpY2tlcicgKSAuICIgKHsKICAgICAgICAgICAgICAgICIgLiAoaXNzZXQoJHRoaXMtPm9wdGlvbnNbImRhdGVfZm9ybWF0Il0pICYmICR0aGlzLT5vcHRpb25zWyJkYXRlX2Zvcm1hdCJdID8gImRhdGVGb3JtYXQ6ICciIC4gJHRoaXMtPm9wdGlvbnNbImRhdGVfZm9ybWF0Il0gLiAiJywiIDogIiIpIC4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLiAoaXNzZXQoJHRoaXMtPm9wdGlvbnNbInRpbWVfZm9ybWF0Il0pICYmICR0aGlzLT5vcHRpb25zWyJ0aW1lX2Zvcm1hdCJdID8gInRpbWVGb3JtYXQ6ICciIC4gJHRoaXMtPm9wdGlvbnNbInRpbWVfZm9ybWF0Il0gLiAiJyIgOiAiIikgLiAiLAogICAgICAgICAgICAgICAgc2hvd090aGVyTW9udGhzOiB0cnVlLAogICAgICAgICAgICAgICAgc2VsZWN0T3RoZXJNb250aHM6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICQoJy50aW1lcGlja2VyJykudGltZXBpY2tlciAoewogICAgICAgICAgICAgICAgdGltZUZvcm1hdDogJyIgLiAkdGhpcy0+b3B0aW9uc1sidGltZV9mb3JtYXQiXSAuICInCiAgICAgICAgICAgIH0pOwoKICAgICAgICB9KTsKPC9zY3JpcHQ+IjsKICAgICAgICAkdGhpcy0+aXNfZGF0ZXBpY2tlcl9saWJfbG9hZCA9IHRydWU7CiAgICAgICAgcmV0dXJuICR0bXA7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfY29sb3JfcGlja2VyKCkgewoKICAgICAgICAkdHh0ID0gJyc7CiAgICAgICAgJGZpcnN0ID0gY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoX19GVU5DVElPTl9fKTsKICAgICAgICAkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgIGlmICggIWlzc2V0KCR0aGlzLT52YWx1ZSkgJiYgaXNzZXQoJHRoaXMtPmRlZmF1bHQpICkKICAgICAgICAgICAgJHRoaXMtPnZhbHVlID0gJHRoaXMtPmRlZmF1bHQ7CgogICAgICAgIGlmICghJGZpcnN0KSB7CiAgICAgICAgICAgICR0eHQuPSAnPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgZmllbGQ9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4gJGNvbmZpZ1sicm9vdF91cmwiXSAuICcvbW9kdWxlcy8nIC4gJG1vZC0+R2V0TmFtZSgpIC4gJy9saWIvanMvbUNvbG9yUGlja2VyLm1pbi5qcyI+PC9zY3JpcHQ+JzsKICAgICAgICAgICAgJHR4dC49ICc8c2NyaXB0PgokLmZuLm1Db2xvclBpY2tlci5kZWZhdWx0cy5pbWFnZUZvbGRlciA9ICIgJyAuICRjb25maWdbInJvb3RfdXJsIl0gLiAnL21vZHVsZXMvJyAuICRtb2QtPkdldE5hbWUoKSAuICcvbGliL2pzL2ltYWdlcy8iOwo8L3NjcmlwdD4nOwogICAgICAgIH0KCiAgICAgICAgJHRtcCA9ICc8aW5wdXQgIHR5cGU9ImNvbG9yIiBkYXRhLWhleD0idHJ1ZSIgbmFtZT0iJXMiIGlkPSIlcyIgc2l6ZT0iJyAuICR0aGlzLT5vcHRpb25zWyJzaXplIl0gLiAnIiB2YWx1ZT0iJXMiLz4nOwogICAgICAgICR0eHQgLj0gc3ByaW50ZigkdG1wLCAkdGhpcy0+YmxvY2tfbmFtZSwgJHRoaXMtPmFsaWFzLCAkdGhpcy0+dmFsdWUpOwoKICAgICAgICBjbXNfdXRpbHM6OnNldF9hcHBfZGF0YShfX0ZVTkNUSU9OX18sIDEpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJHR4dDsKICAgIH0KCgoKICAgLyoqCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9jaGVja2JveCgpIHsKICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAvLyBhIGhhY2sgZm9yIGlmICRhZGRpbmcgbm90IGJlaW5nIHNldCBjb3JyZWN0bHkgYnkgQ29udGVudCBNYW5hZ2VyICgyLjIuMTQpCiAgICAgIGlmICggISR0aGlzLT5hZGRpbmcgJiYgZW1wdHkoJF9SRVFVRVNUWydtMV9jb250ZW50X2lkJ10pICYmIGVtcHR5KCR0aGlzLT52YWx1ZSkgJiYgaXNzZXQoJHRoaXMtPmRlZmF1bHQpICkgewogICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdGhpcy0+ZGVmYXVsdDsKICAgICAgfQogICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJG1vZC0+Q3JlYXRlSW5wdXRIaWRkZW4oJycsICR0aGlzLT5ibG9ja19uYW1lLCAwKSAuICRtb2QtPkNyZWF0ZUlucHV0Q2hlY2tib3goJycsICR0aGlzLT5ibG9ja19uYW1lLCAxLCAkdGhpcy0+dmFsdWUpOwogICB9CgoKCiAgIC8qKgogICAgKgogICAgKiBAcmV0dXJuIHN0cmluZwogICAgKi8KICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfZmlsZV9zZWxlY3RvcigpIHsKICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CgogICAgICAvLyBHZXQgdGhlIGRpcmVjdG9yeSBjb250ZW50cwogICAgICAkYWRkZGlyID0gZ2V0X3NpdGVfcHJlZmVyZW5jZSgnY29udGVudGltYWdlX3BhdGgnKTsKICAgICAgaWYgKCR0aGlzLT5vcHRpb25zWydkaXInXSkKICAgICAgICAgJGFkZGRpciA9ICR0aGlzLT5vcHRpb25zWydkaXInXTsKCiAgICAgICRkaXIgPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLCAkYWRkZGlyKTsKICAgICAgJGZpbGV0eXBlcyA9ICR0aGlzLT5vcHRpb25zWydmaWxldHlwZXMnXTsKICAgICAgaWYgKCRmaWxldHlwZXMgIT0gJycpIHsKICAgICAgICAgJGZpbGV0eXBlcyA9IGV4cGxvZGUoJywnLCAkZmlsZXR5cGVzKTsKICAgICAgfQoKICAgICAgJGV4Y2x1ZGVzID0gJHRoaXMtPm9wdGlvbnNbJ2V4Y2x1ZGVwcmVmaXgnXTsKICAgICAgaWYgKCRleGNsdWRlcyAhPSAnJykgewogICAgICAgICAkZXhjbHVkZXMgPSBleHBsb2RlKCcsJywgJGV4Y2x1ZGVzKTsKICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGV4Y2x1ZGVzKTsgJGkrKykgewogICAgICAgICAgICAkZXhjbHVkZXNbJGldID0gJGV4Y2x1ZGVzWyRpXSAuICcqJzsKICAgICAgICAgfQogICAgICB9CiAgICAgICRtYXhkZXB0aCA9ICFlbXB0eSgkdGhpcy0+b3B0aW9uc1sncmVjdXJzZSddKSA/IC0xIDogMDsgICAvLyBkZWZhdWx0CiAgICAgICRmbCA9IGdldF9yZWN1cnNpdmVfZmlsZV9saXN0KCAkZGlyLCAkZXhjbHVkZXMsICRtYXhkZXB0aCwgJ0ZJTEVTJyApOwoKICAgICAgLy8gUmVtb3ZlIHByZWZpeAogICAgICAkZmlsZWxpc3QgPSBhcnJheSgpOwogICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZmwpOyAkaSsrKSB7CiAgICAgICAgIGlmICggaW5fYXJyYXkoIHBhdGhpbmZvKCRmbFskaV0sIFBBVEhJTkZPX0VYVEVOU0lPTiksICRmaWxldHlwZXMgKSApCiAgICAgICAgICAgICRmaWxlbGlzdFtdID0gc3RyX3JlcGxhY2UoJGRpciwgJycsICRmbFskaV0pOwogICAgICB9CgogICAgICAvLyBTb3J0CiAgICAgIGlmIChpc19hcnJheSgkZmlsZWxpc3QpICYmICR0aGlzLT5vcHRpb25zWydzb3J0ZmlsZXMnXSkgewogICAgICAgICBzb3J0KCRmaWxlbGlzdCk7CiAgICAgIH0KCiAgICAgIC8vIGNyZWF0ZSBzZWxlY3Qgb3B0aW9ucwogICAgICAkb3B0cyA9IGFycmF5KCk7CiAgICAgICR1cmxfcHJlZml4ID0gJGFkZGRpcjsKICAgICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGZpbGVsaXN0KTsgJGkrKykgewogICAgICAgICAkb3B0c1skZmlsZWxpc3RbJGldXSA9ICR1cmxfcHJlZml4IC4gJGZpbGVsaXN0WyRpXTsKICAgICAgfQogICAgICAkb3B0cyA9IGFycmF5KCcnID0+ICcnKSArICRvcHRzOwoKICAgICAgJHByZXZpZXcgPSAnJzsKICAgICAgaWYgKCR0aGlzLT5vcHRpb25zWydwcmV2aWV3J10pIHsKICAgICAgICAgaWYgKCR0aGlzLT52YWx1ZSkgewogICAgICAgICAgICAkcHJldmlldyA9ICc8aW1nIHN0eWxlPSJtYXgtd2lkdGg6MTMwcHg7IiBjbGFzcz0iZmlsZV9zZWxlY3Rvcl9wcmV2aWV3IiBkYXRhLXVwbG9hZHN1cmw9IicgLiAkY29uZmlnWyJ1cGxvYWRzX3VybCJdIC4gJyIgICBzcmM9IicgLiAkY29uZmlnWyJ1cGxvYWRzX3VybCJdIC4gJy8nIC4gJHRoaXMtPnZhbHVlIC4gJyIgYWx0PSIiPic7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwcmV2aWV3ID0gJzxpbWcgc3R5bGU9Im1heC13aWR0aDoxMzBweDsiIGNsYXNzPSJmaWxlX3NlbGVjdG9yX3ByZXZpZXciIGFsdD0iIiBkYXRhLXVwbG9hZHN1cmw9IicgLiAkY29uZmlnWyJ1cGxvYWRzX3VybCJdIC4gJyI+JzsKICAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJzxkaXYgY2xhc3M9ImVjYl9maWxlX3NlbGVjdG9yX3NlbGVjdCI+JyAuICRtb2QtPkNyZWF0ZUlucHV0RHJvcGRvd24oJycsICR0aGlzLT5ibG9ja19uYW1lLCAkb3B0cywgLTEsICR0aGlzLT52YWx1ZSkgLiAnPC9kaXY+JyAuICRwcmV2aWV3OwogICB9CgoKCiAgIC8qKgogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfc29ydGFibGVsaXN0KCkgewogICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICRvcHRpb25zID0gYXJyYXkoKTsKICAgICAgJHRtcCA9IGFycmF5KCk7CgogICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbInVkdCJdKQogICAgICAgICAkb3B0aW9ucyA9IFVzZXJUYWdPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+Q2FsbFVzZXJUYWcoJHRoaXMtPm9wdGlvbnNbInVkdCJdLCAkdG1wKTsKICAgICAgJG9wdGlvbnNhcnJheSA9IGV4cGxvZGUoJywnLCAkdGhpcy0+b3B0aW9uc1sidmFsdWVzIl0pOwogICAgICBpZiAoZW1wdHkoJG9wdGlvbnNhcnJheSkpCiAgICAgICAgIHJldHVybjsKICAgICAgZm9yZWFjaCAoJG9wdGlvbnNhcnJheSBhcyAkb3B0aW9uKSB7CiAgICAgICAgIGlmICgkb3B0aW9uIT0nJykgewogICAgICAgICAgICAka2V5X3ZhbCA9IGV4cGxvZGUoJz0nLCAkb3B0aW9uKTsKICAgICAgICAgICAgJG9wdGlvbnNbJGtleV92YWxbMF1dID0gJGtleV92YWxbMV07CiAgICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10pID09IGZhbHNlKQogICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCR0aGlzLT5vcHRpb25zWydmaXJzdF92YWx1ZSddID0+ICcnKSArICRvcHRpb25zOwogICAgICAkc2VsZWN0ZWRMaXN0ID0gZXhwbG9kZSgnLCcsICR0aGlzLT52YWx1ZSk7CiAgICAgICRhdmFpbGFibGUgPSAkb3B0aW9uczsKICAgICAgJHNlbGVjdGVkID0gYXJyYXkoKTsKICAgICAgZm9yZWFjaCAoJHNlbGVjdGVkTGlzdCBhcyAkaXRlbSkgewogICAgICAgICBpZiAoIGFycmF5X2tleV9leGlzdHMoJGl0ZW0sICRhdmFpbGFibGUpICkgewogICAgICAgICAgICAkc2VsZWN0ZWRbJGl0ZW1dID0gJGF2YWlsYWJsZVskaXRlbV07CiAgICAgICAgICAgIHVuc2V0KCRhdmFpbGFibGVbJGl0ZW1dKTsKICAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgkdGhpcy0+b3B0aW9uc1sibWF4X251bWJlciJdKSAvLyBtYXhfbnVtYmVyIHRha2VzIHByZWNpZGVuY2UgaWYgYm90aCBzZXQKICAgICAgICAgJHRoaXMtPm9wdGlvbnNbInJlcXVpcmVkX251bWJlciJdID0gIiI7CiAgICAgICRzbWFydHkgPSBTbWFydHlfQ01TOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgJHRwbCA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCRtb2QtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ3NvcnRhYmxlbGlzdF90ZW1wbGF0ZS50cGwnKSwgbnVsbCwgbnVsbCwgJHNtYXJ0eSk7CiAgICAgICR0cGwtPmFzc2lnbignc2VsZWN0YXJlYV9wcmVmaXgnLCR0aGlzLT5ibG9ja19uYW1lKTsKICAgICAgJHRwbC0+YXNzaWduKCdzZWxlY3RlZF9zdHInLCR0aGlzLT52YWx1ZSk7CiAgICAgICR0cGwtPmFzc2lnbignc2VsZWN0ZWQnLCRzZWxlY3RlZCk7CiAgICAgICR0cGwtPmFzc2lnbignYXZhaWxhYmxlJywgJGF2YWlsYWJsZSk7CiAgICAgICR0cGwtPmFzc2lnbignZGVzY3JpcHRpb24nLCAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXSk7CiAgICAgICR0cGwtPmFzc2lnbignbGFiZWxMZWZ0JywgJHRoaXMtPm9wdGlvbnNbImxhYmVsX2xlZnQiXSk7CiAgICAgICR0cGwtPmFzc2lnbignbGFiZWxSaWdodCcsICR0aGlzLT5vcHRpb25zWyJsYWJlbF9yaWdodCJdKTsKICAgICAgJHRwbC0+YXNzaWduKCdtb2QnLCRtb2QpOwogICAgICAkdHBsLT5hc3NpZ24oJ21heE51bWJlcicsICR0aGlzLT5vcHRpb25zWyJtYXhfbnVtYmVyIl0pOwogICAgICAkdHBsLT5hc3NpZ24oJ3JlcXVpcmVkTnVtYmVyJywgJHRoaXMtPm9wdGlvbnNbInJlcXVpcmVkX251bWJlciJdKTsKICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLiR0cGwtPmZldGNoKCk7CiAgIH0KCgoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X3RleHQoKSB7CgogICAgICAgIGlmICghJHRoaXMtPm9wdGlvbnNbInRleHQiXSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4kdGhpcy0+b3B0aW9uc1sidGV4dCJdOwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2hyKCkgewogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4nPGhyIHN0eWxlPSJkaXNwbGF5OmJsb2NrOyBib3JkZXI6MCBub25lOyBiYWNrZ3JvdW5kOiNjY2M7IiAvPic7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfbGluaygpIHsKCiAgICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1sibGluayJdIHx8ICEkdGhpcy0+b3B0aW9uc1sidGV4dCJdKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJzxhIHRhcmdldD0iJyAuICR0aGlzLT5vcHRpb25zWyJ0YXJnZXQiXSAuICciIGhyZWY9IicgLiAkdGhpcy0+b3B0aW9uc1sibGluayJdIC4gJyI+JyAuICR0aGlzLT5vcHRpb25zWyJ0ZXh0Il0gLiAnPC9hPic7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfbW9kdWxlX2xpbmsoKSB7CgogICAgICAgICRtb2QgPSAnJzsKICAgICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbIm1vZCJdKQogICAgICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCR0aGlzLT5vcHRpb25zWyJtb2QiXSk7CgogICAgICAgICR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7CiAgICAgICAgJHVzZXJvcHMgPSBjbXNtcygpLT5HZXRVc2VyT3BlcmF0aW9ucygpOwogICAgICAgICRhZG1pbnVzZXIgPSAkdXNlcm9wcy0+VXNlckluR3JvdXAoJHVzZXJpZCwgMSk7CgogICAgICAgICR0bXAgPSAnPGlucHV0IGlkPSJtdF8nIC4gJHRoaXMtPmJsb2NrX25hbWUgLiAnIiAnIC4gKCAkYWRtaW51c2VyID8gJ3R5cGU9InRleHQiJyA6ICd0eXBlPSJoaWRkZW4iJykgLiAnIG5hbWU9IicgLiAkdGhpcy0+YmxvY2tfbmFtZSAuICciIHZhbHVlPSInIC4gKCR0aGlzLT52YWx1ZSA/ICR0aGlzLT52YWx1ZSA6ICR0aGlzLT5vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0pIC4gJyIgIHNpemU9IiVkIiBtYXhsZW5ndGg9IiVkIiAvPic7CiAgICAgICAgJHRtcCA9IHNwcmludGYoJHRtcCwgJHRoaXMtPm9wdGlvbnNbInNpemUiXSwgJHRoaXMtPm9wdGlvbnNbIm1heF9sZW5ndGgiXSk7CiAgICAgICAgLy8gb3JpZ2luYWwgQ1QgZWRpdAogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4oaXNfb2JqZWN0KCRtb2QpID8gJG1vZC0+Q3JlYXRlTGluaygnJywgJ2RlZmF1bHRhZG1pbicsICcnLCAkdGhpcy0+b3B0aW9uc1sidGV4dCJdLCBhcnJheSgpLCAnJywgZmFsc2UsIDAsICd0YXJnZXQ9IicgLiAkdGhpcy0+b3B0aW9uc1sidGFyZ2V0Il0gLiAnIicpIDogJHRoaXMtPm9wdGlvbnNbInRleHQiXSk7IC8vIC4gJzxiciAvPicgLiAkdG1wOyAvLyBDVCBjb21tZW50IG91dAogICAgfQoKCgogICBwcml2YXRlIGZ1bmN0aW9uIF9jcmVhdGVfc2VsZWN0KCAkb3B0aW9ucyApIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyBkcm9wZG93biBDb250ZW50IEJsb2NrIC0gY3JlYXRlcyBhIHNlbGVjdCB1c2luZyB0aGUgc3VwcGxpZWQgcGFyYW1ldGVycyAmICR0aGlzLT5vcHRpb25zCiAgIC8vCiAgIC8vIGNyZWF0ZXMgYSBzZWxlY3QgdXNpbmcgdGhlIHN1cHBsaWVkIG9wdGlvbnMKICAgLy8KICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICRzbWFydHkgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0U21hcnR5KCk7CgogICAgICAkdHBsID0gJHNtYXJ0eS0+Q3JlYXRlVGVtcGxhdGUoICRtb2QtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ3NlbGVjdF90ZW1wbGF0ZS50cGwnKSwgbnVsbCwgbnVsbCwgJHNtYXJ0eSApOwogICAgICAkdHBsLT5hc3NpZ24oICdibG9ja19uYW1lJywgJHRoaXMtPmJsb2NrX25hbWUgKTsKICAgICAgJHRwbC0+YXNzaWduKCAnZGVzY3JpcHRpb24nLCAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXSApOwogICAgICAkdHBsLT5hc3NpZ24oICdtdWx0aXBsZScsICR0aGlzLT5vcHRpb25zWydtdWx0aXBsZSddICk7CiAgICAgICR0cGwtPmFzc2lnbiggJ2NvbXBhY3QnLCAkdGhpcy0+b3B0aW9uc1snY29tcGFjdCddICk7CiAgICAgICR0cGwtPmFzc2lnbiggJ25vbmVfc2VsZWN0ZWQnLCAkbW9kLT5MYW5nKCdub25lX3NlbGVjdGVkJykgKTsKCiAgICAgIGlmICggaXNzZXQoJHRoaXMtPm9wdGlvbnNbJ3NpemUnXSkgJiYgJHRoaXMtPm9wdGlvbnNbJ3NpemUnXT4wICkgewogICAgICAgICAkc2l6ZSA9ICR0aGlzLT5vcHRpb25zWydzaXplJ107CiAgICAgIH0gZWxzZWlmICggIWVtcHR5KCR0aGlzLT5vcHRpb25zWydjb21wYWN0J10pICkgewogICAgICAgICAkc2l6ZSA9IGNvdW50KCRvcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAgJHNpemUgPSA1OyAgLy8gZGVmYXVsdAogICAgICB9CiAgICAgICR0cGwtPmFzc2lnbiggJ3NpemUnLCAkc2l6ZSApOwoKICAgICAgJHRwbC0+YXNzaWduKCAnc2VsZWN0ZWQnLCAkdGhpcy0+dmFsdWUgKTsKICAgICAgaWYgKCAkdGhpcy0+b3B0aW9uc1snbXVsdGlwbGUnXSApIHsKICAgICAgICAgJHNlbGVjdGVkX3ZhbHVlcyA9IGV4cGxvZGUoJywnLCAkdGhpcy0+dmFsdWUpOwogICAgICAgICAkc2VsZWN0ZWRfdGV4dCA9IFtdOwogICAgICAgICBmb3JlYWNoICgkc2VsZWN0ZWRfdmFsdWVzIGFzICR2YWx1ZSkgewogICAgICAgICAgICAkc2VsZWN0ZWRfdGV4dFtdID0gYXJyYXlfc2VhcmNoKCAkdmFsdWUsICRvcHRpb25zICk7CiAgICAgICAgIH0KICAgICAgICAgJHNlbGVjdGVkX3RleHQgPSBpbXBsb2RlKCcsICcsICRzZWxlY3RlZF90ZXh0KTsKICAgICAgICAgJHRwbC0+YXNzaWduKCAnc2VsZWN0ZWRfdmFsdWVzJywgJHNlbGVjdGVkX3ZhbHVlcyApOyAgLy8gYXJyYXkKICAgICAgICAgJHRwbC0+YXNzaWduKCAnc2VsZWN0ZWRfdGV4dCcsICRzZWxlY3RlZF90ZXh0ICk7ICAgICAgLy8gdGV4dAogICAgICB9CiAgICAgIGlmICggZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10pPT1mYWxzZSApCiAgICAgICAgICRvcHRpb25zID0gYXJyYXkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10gPT4gJycpICsgJG9wdGlvbnM7CiAgICAgICR0cGwtPmFzc2lnbignb3B0aW9ucycsICRvcHRpb25zICk7CiAgICAgIHJldHVybiAkdHBsLT5mZXRjaCgpOwoKICAgfQoKCgogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9kcm9wZG93bigpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyBkcm9wZG93biBDb250ZW50IEJsb2NrCiAgIC8vCiAgIC8vIHJldHVybnMgYSBzZWxlY3QKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICBpZiAoISR0aGlzLT5vcHRpb25zWyJ2YWx1ZXMiXSkgcmV0dXJuOwoKICAgICAgJG9wdGlvbnMgPSBhcnJheSgpOwogICAgICAkdG1wT3B0aW9ucyA9IGV4cGxvZGUoJywnLCAkdGhpcy0+b3B0aW9uc1sidmFsdWVzIl0pOwogICAgICBmb3JlYWNoICgkdG1wT3B0aW9ucyBhcyAkb3B0aW9uKSB7CiAgICAgICAgICRrZXlfdmFsID0gZXhwbG9kZSgnPScsICRvcHRpb24pOwogICAgICAgICBpZiAoIGNvdW50KCRrZXlfdmFsKT4xICkgewogICAgICAgICAgICAkb3B0aW9uc1ska2V5X3ZhbFswXV0gPSAka2V5X3ZhbFsxXTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG9wdGlvbnNbJGtleV92YWxbMF1dID0gJGtleV92YWxbMF07CiAgICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuICR0aGlzLT5fY3JlYXRlX3NlbGVjdCggJG9wdGlvbnMgKTsKICAgfQoKCgogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9kcm9wZG93bl9mcm9tX3VkdCgpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyBkcm9wZG93biBDb250ZW50IEJsb2NrIHdpdGggJG9wdGlvbnMgYXJyYXkgY29taW5nIGZyb20gYSBVRFQKICAgLy8KICAgLy8gcmV0dXJucyBhIHNlbGVjdAogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIGlmICghJHRoaXMtPm9wdGlvbnNbInVkdCJdKSByZXR1cm47CgogICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKCiAgICAgIGlmICggVXNlclRhZ09wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5Vc2VyVGFnRXhpc3RzKCR0aGlzLT5vcHRpb25zWyJ1ZHQiXSkgKSB7CiAgICAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAgICAkb3B0aW9ucyA9IFVzZXJUYWdPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+Q2FsbFVzZXJUYWcoJHRoaXMtPm9wdGlvbnNbInVkdCJdLCAkdG1wKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAgJGVyciA9ICRtb2QtPkxhbmcoJ3VkdF9lcnJvcicsICR0aGlzLT5vcHRpb25zWyJ1ZHQiXSApOwogICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCk7CiAgICAgIH0KCiAgICAgIGlmIChlbXB0eSgkdGhpcy0+b3B0aW9uc1snZmlyc3RfdmFsdWUnXSkgPT0gZmFsc2UpCiAgICAgICAgICRvcHRpb25zID0gYXJyYXkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10gPT4gJycpICsgJG9wdGlvbnM7CgogICAgICBpZiAoIWVtcHR5KCRlcnIpKSByZXR1cm4gJzxkaXYgY2xhc3M9InBhZ2V3YXJuaW5nIj4nLiRlcnIuJzwvZGl2Pic7CgogICAgICByZXR1cm4gJHRoaXMtPl9jcmVhdGVfc2VsZWN0KCAkb3B0aW9ucyApOwogICB9CgoKCiAgIC8qKgogICAgKgogICAgKiBAcmV0dXJuIHN0cmluZwogICAgKi8KICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfZHJvcGRvd25fZnJvbV9nYmMoKSB7CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8gZHJvcGRvd24gQ29udGVudCBCbG9jayB3aXRoICRvcHRpb25zIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QgZnJvbSBhIEdDQgogICAvLwogICAvLyByZXR1cm5zIGEgc2VsZWN0CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1siZ2JjIl0pIHJldHVybjsKCiAgICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKCiAgICAgICR0bXAgPSBhcnJheSgpOwogICAgICAkb3B0aW9ucyA9IGFycmF5KCk7CiAgICAgICRvcHRpb25zZ2JjID0gJHNtYXJ0eS0+ZmV0Y2goJ2dsb2JhbGNvbnRlbnQ6JyAuICR0aGlzLT5vcHRpb25zWyJnYmMiXSk7CgogICAgICAkb3B0aW9uc2FycmF5ID0gZXhwbG9kZSgnLCcsICRvcHRpb25zZ2JjKTsKICAgICAgaWYgKGVtcHR5KCRvcHRpb25zYXJyYXkpKSByZXR1cm47CgogICAgICBmb3JlYWNoICgkb3B0aW9uc2FycmF5IGFzICRvcHRpb24pIHsKICAgICAgICAgJGtleV92YWwgPSBleHBsb2RlKCc9JywgJG9wdGlvbik7CiAgICAgICAgICRvcHRpb25zWyRrZXlfdmFsWzBdXSA9ICRrZXlfdmFsWzFdOwogICAgICB9CgogICAgICBpZiAoZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10pID09IGZhbHNlKQogICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCR0aGlzLT5vcHRpb25zWydmaXJzdF92YWx1ZSddID0+ICcnKSArICRvcHRpb25zOwoKICAgICAgcmV0dXJuICR0aGlzLT5fY3JlYXRlX3NlbGVjdCggJG9wdGlvbnMgKTsKICAgfQoKCgogICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Ryb3Bkb3duX2Zyb21fY3VzdG9tZ3MoKSB7CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8gY3JlYXRlcyBhIGRyb3Bkb3duIGZyb20gdGhlIHZhbHVlcyBpbiBhIEN1c3RvbUdTIGZpZWxkCiAgIC8vIG5vdGU6IHRoZSBDdXN0b21HUyBmaWVsZCBzaG91bGQgYmUgYSBwbGFpbiB0ZXh0YXJlYQogICAvLyAgICAgICB1c2UgZWl0aGVyIG5ld2xpbmVzIG9yIGNvbW1hcyB0byBzZXBhcmF0ZSBlYWNoIHRpdGxlLXZhbHVlIHBhaXIKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAkZHJvcGRvd24gPSBhcnJheSgpOwogICAgICAkZXJyID0gJyc7CiAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgJEN1c3RvbUdTID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDdXN0b21HUycpOwoKICAgICAgaWYoIGlzX29iamVjdCgkQ3VzdG9tR1MpICkgewogICAgICAgICAvLyBjcmVhdGUgYXJyYXkgJGRyb3Bkb3duIHdpdGggYQogICAgICAgICAkc2VsZWN0T3B0aW9ucyA9ICRDdXN0b21HUy0+R2V0RmllbGQoICR0aGlzLT5vcHRpb25zWydjdXN0b21nc19maWVsZCddICk7CiAgICAgICAgIGlmICggZW1wdHkoJHNlbGVjdE9wdGlvbnNbJ3ZhbHVlJ10pICkgewogICAgICAgICAgICAkZXJyID0gJzxkaXYgY2xhc3M9InBhZ2V3YXJuaW5nIj4nIC4gJG1vZC0+TGFuZygnY3VzdG9tZ3NfZmllbGRfZXJyb3InLCAkdGhpcy0+b3B0aW9uc1snY3VzdG9tZ3NfZmllbGQnXSApIC4gJzwvZGl2Pjxicj4nOwoKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gdXNlIGVpdGhlciBuZXdsaW5lcyBvciBjb21tYXMgdG8gc2VwYXJhdGUgZWFjaCB0aXRsZS12YWx1ZSBwYWlyCiAgICAgICAgICAgICRzZWxlY3RPcHRpb25zID0gc3RyX3JlcGxhY2UoUEhQX0VPTCwgJywnLCAkc2VsZWN0T3B0aW9uc1sndmFsdWUnXSk7CiAgICAgICAgICAgICRzZWxlY3RMaW5lcyA9IGV4cGxvZGUoJywnLCAkc2VsZWN0T3B0aW9ucyk7CiAgICAgICAgICAgIGZvcmVhY2ggKCRzZWxlY3RMaW5lcyBhcyAkb25lT3B0aW9uKSB7CiAgICAgICAgICAgICAgICRvcHQgPSBleHBsb2RlKCAnPScsIHRyaW0oJG9uZU9wdGlvbikgKTsKICAgICAgICAgICAgICAgJGRyb3Bkb3duWyRvcHRbMF1dID0gaXNTZXQoJG9wdFsxXSkgPyAkb3B0WzFdIDogJG9wdFswXTsKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiAkZXJyLiR0aGlzLT5fY3JlYXRlX3NlbGVjdCggJGRyb3Bkb3duICk7CiAgIH0KCgoKICAgLyoqCiAgICAqIERFUFJFQ0FURUQKICAgICogQHJldHVybiBzdHJpbmcKICAgICovCiAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2Ryb3Bkb3duX2Zyb21fbW9kdWxlKCkgewogICAgICAgIGlmICghJHRoaXMtPm9wdGlvbnNbIm1vZCJdKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICAkZGF0YSA9ICRtb2QtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCd7JyAuICR0aGlzLT5vcHRpb25zWyJtb2QiXSAuICd9Jyk7CgogICAgICAgICRvcHRpb25zID0gYXJyYXkoKTsKICAgICAgICAkb3B0aW9uc2FycmF5ID0gZXhwbG9kZSgnLCcsICRkYXRhKTsKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNhcnJheSkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnNhcnJheSBhcyAkb3B0aW9uKSB7CiAgICAgICAgICAgICRrZXlfdmFsID0gZXhwbG9kZSgnPScsICRvcHRpb24pOwogICAgICAgICAgICAkb3B0aW9uc1ska2V5X3ZhbFswXV0gPSAka2V5X3ZhbFsxXTsKICAgICAgICB9CiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5vcHRpb25zWydkZWZhdWx0X3ZhbHVlJ10pID09IGZhbHNlKQogICAgICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCR0aGlzLT5vcHRpb25zWydkZWZhdWx0X3ZhbHVlJ10gPT4gJycpICsgJG9wdGlvbnM7CgogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4kbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKCcnLCAkdGhpcy0+YmxvY2tfbmFtZSwgJG9wdGlvbnMsIC0xLCAkdGhpcy0+dmFsdWUpOwogICB9CgoKCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9tb2R1bGUoKSB7CgogICAgICAgICRtb2RvcHMgPSBjbXNtcygpLT5HZXRNb2R1bGVPcGVyYXRpb25zKCk7CiAgICAgICAgJG1vZHVsZXMgPSAkbW9kb3BzLT5HZXRJbnN0YWxsZWRNb2R1bGVzKCk7CiAgICAgICAgJG1vZHVsZXNhcnJheSA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJG1vZHVsZXMgYXMgJG1vZHVsZSkgewogICAgICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGUpOwogICAgICAgICAgICBpZiAoaXNfb2JqZWN0KCRtb2QpKQogICAgICAgICAgICAgICAgJG1vZHVsZXNhcnJheVskbW9kLT5HZXROYW1lKCldID0gJG1vZHVsZTsKICAgICAgICB9CgogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bignJywgJHRoaXMtPmJsb2NrX25hbWUsICRtb2R1bGVzYXJyYXksIC0xLCAkdGhpcy0+dmFsdWUpOwogICAgfQoKCgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfcmFkaW8oKSB7CiAgICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1sidmFsdWVzIl0pCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwoKICAgICAgICAkb3B0aW9ucyA9IGFycmF5KCk7CgogICAgICAgICRvcHRpb25zYXJyYXkgPSBleHBsb2RlKCcsJywgJHRoaXMtPm9wdGlvbnNbInZhbHVlcyJdKTsKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNhcnJheSkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnNhcnJheSBhcyAkb3B0aW9uKSB7CiAgICAgICAgICAgICRrZXlfdmFsID0gZXhwbG9kZSgnPScsICRvcHRpb24pOwogICAgICAgICAgICAkb3B0aW9uc1ska2V5X3ZhbFswXV0gPSAka2V5X3ZhbFsxXTsKICAgICAgICB9CgogICAgICAgICRkZWxpbWl0ZXIgPSAoJHRoaXMtPm9wdGlvbnNbImlubGluZSJdKSA/ICcmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnIDogJzxicj4nOwoKICAgICAgICBpZiAoICFlbXB0eSgkdGhpcy0+dmFsdWUpICkgewogICAgICAgICAgICAkc2VsZWN0ZWRWYWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbImRlZmF1bHRfdmFsdWUiXT09Jy0xJykgewogICAgICAgICAgICAgICAgJHNlbGVjdGVkVmFsdWUgPSByZXNldCgkb3B0aW9ucyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkc2VsZWN0ZWRWYWx1ZSA9ICRvcHRpb25zWyR0aGlzLT5vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl1dOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJG1vZC0+Q3JlYXRlSW5wdXRSYWRpb0dyb3VwKCcnLCAkdGhpcy0+YmxvY2tfbmFtZSwgJG9wdGlvbnMsICRzZWxlY3RlZFZhbHVlLCAnJywgJGRlbGltaXRlcik7CiAgICB9CgoKCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2hpZGRlbigpIHsKICAgICAgICAkdG1wID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiVzIiB2YWx1ZT0iJXMiPic7CiAgICAgICAgJGlucHV0ID0gc3ByaW50ZigkdG1wLCAkdGhpcy0+YmxvY2tfbmFtZSwgJHRoaXMtPm9wdGlvbnNbJ3ZhbHVlJ10pOwogICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICB9CgoKCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2ZpZWxkc2V0X3N0YXJ0KCkgewogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAvLwogICAgLy8KICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICR0bXAgPSAnPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZmllbGRzZXQgbmFtZT0iJXMiPgogICAgICAgICAgICA8bGVnZW5kPiVzPC9sZWdlbmQ+CiAgICAgICAgICAgICVzCiAgICAgICAgPGRpdj48cD4nOwogICAgICAgICRpbnB1dCA9IHNwcmludGYoJHRtcCwgJHRoaXMtPmJsb2NrX25hbWUsICR0aGlzLT5vcHRpb25zWydsZWdlbmQnXSwgJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10pOwogICAgICAgIHJldHVybiAkaW5wdXQ7CiAgICB9CgoKCiAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmllbGRzZXRfZW5kKCkgewogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8KICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIHJldHVybiAnPC9wPgogICAgICA8L2Rpdj4KICAgICAgPC9maWVsZHNldD4KICAgICAgPGRpdj48cD4nOwogICB9CgoKCiAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ2FsbGVyeV9waWNrZXIoKSB7CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgLy8gZ2FsbGVyeV9waWNrZXIgQ29udGVudCBCbG9jawogICAvLwogICAvLyByZXR1cm5zIGFuIHNlbGVjdCBpbnB1dCBvZiBnYWxsZXJpZXMgJ2dhbGxlcnkgdGl0bGUnID0+ICdnYWxsZXJ5LWRpcicsIGhvbWUgZ2FsbGVyeSBpcyBleGNsdWRlZAogICAvLyBQYXJhbWV0ZXJzOgogICAvLyAgICBkaXIgLSBvbmx5IHJldHVybiBnYWxsZXJpZXMgdGhhdCBhcmUgc3ViLWdhbGxlcmllcyBvZiB0aGlzIGdhbGxlcnkgZGlyLAogICAvLyAgICAgICAgICBkZWZhdWx0IGlzIGFsbCBnYWxsZXJpZXMsIGV4Y2x1ZGluZyBkZWZhdWx0IHRvcCBsZXZlbCBnYWxsZXJ5CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgJGRpciA9ICR0aGlzLT5vcHRpb25zWydkaXInXS4nLyc7ICAgIC8vIGRlZmF1bHQgZGlyIChuZWVkcyAnLycgYXQgZW5kKQoKICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAkR2FsbGVyeU1vZHVsZSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnR2FsbGVyeScpOwogICAgICBpZiAoIWlzX29iamVjdCgkR2FsbGVyeU1vZHVsZSkpIHsKICAgICAgICAgJGVyciA9ICc8ZGl2IGNsYXNzPSJwYWdld2FybmluZyI+JyAuICRtb2QtPkxhbmcoJ2dhbGxlcnlfbW9kdWxlX2Vycm9yJykgLiAnPC9kaXY+PGJyPic7CiAgICAgICAgIHJldHVybiAkZXJyOwogICAgICB9CgogICAgICAkZ2FsbGVyaWVzID0gR2FsbGVyeV91dGlsczo6R2V0R2FsbGVyaWVzKCk7CiAgICAgICRnYWxsZXJ5QXJyYXkgPSBhcnJheSgnLS0tIG5vbmUgLS0tJyA9PiAnJyk7CgogICAgICBmb3JlYWNoICgkZ2FsbGVyaWVzIGFzICRnYWxsZXJ5KSB7CiAgICAgICAgIGlmICgkZ2FsbGVyeVsnZmlsZW5hbWUnXSE9JycpIHsgICAgLy8gaWdub3JlcyBkZWZhdWx0IGdhbGxlcnkKICAgICAgICAgICAgaWYgKCRkaXIhPScvJykgewogICAgICAgICAgICAgICAvLyBvbmx5IHNlbGVjdCBzdWItZ2FsbGVyaWVzIG9mICRkaXIKICAgICAgICAgICAgICAgJGlzU3ViRGlyID0gc3RyaXBvcygkZ2FsbGVyeVsnZmlsZXBhdGgnXSwgJGRpcik7CgogICAgICAgICAgICAgICBpZiAoJGlzU3ViRGlyIT09RkFMU0UgJiYgJGlzU3ViRGlyPT0wKSB7CiAgICAgICAgICAgICAgICAgICRnYWxsZXJ5X2RpciA9ICRnYWxsZXJ5WydmaWxlcGF0aCddLnJ0cmltKCRnYWxsZXJ5WydmaWxlbmFtZSddLCAnLycpOwogICAgICAgICAgICAgICAgICAkZ2FsbGVyeUFycmF5WyRnYWxsZXJ5Wyd0aXRsZSddXSA9ICRnYWxsZXJ5X2RpcjsKICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgLy8gc2VsZWN0IGFsbCBnYWxsZXJpZXMKICAgICAgICAgICAgICAgJGdhbGxlcnlfZGlyID0gJGdhbGxlcnlbJ2ZpbGVwYXRoJ10ucnRyaW0oJGdhbGxlcnlbJ2ZpbGVuYW1lJ10sICcvJyk7CiAgICAgICAgICAgICAgICRnYWxsZXJ5QXJyYXlbJGdhbGxlcnlbJ3RpdGxlJ11dID0gJGdhbGxlcnlfZGlyOwogICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLiRtb2QtPkNyZWF0ZUlucHV0RHJvcGRvd24oJycsICR0aGlzLT5ibG9ja19uYW1lLCAkZ2FsbGVyeUFycmF5LCAtMSwgJHRoaXMtPnZhbHVlKTsKICAgfQoKCgogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9pbnB1dF9yZXBlYXRlcigpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyAgICBjcmVhdGVzIGEgcmVwZWF0aW5nIHRleHQgZmllbGQgdGhhdAogICAvLwogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICRzbWFydHkgPSBcQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+R2V0U21hcnR5KCk7CiAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKCiAgICAgICRmaWVsZHMgPSBleHBsb2RlKCd8fCcsICR0aGlzLT52YWx1ZSk7CiAgICAgICR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSggJG1vZC0+R2V0VGVtcGxhdGVSZXNvdXJjZSgnaW5wdXRfcmVwZWF0ZXJfdGVtcGxhdGUudHBsJyksIG51bGwsIG51bGwsICRzbWFydHkgKTsKICAgICAgJHRwbC0+YXNzaWduKCdibG9ja19uYW1lJywgJHRoaXMtPmJsb2NrX25hbWUgKTsKICAgICAgJHRwbC0+YXNzaWduKCdzaXplJywgJHRoaXMtPm9wdGlvbnNbInNpemUiXSApOwogICAgICAkdHBsLT5hc3NpZ24oJ21heF9sZW5ndGgnLCAkdGhpcy0+b3B0aW9uc1sibWF4X2xlbmd0aCJdICk7CiAgICAgICR0cGwtPmFzc2lnbigndmFsdWUnLCAkdGhpcy0+dmFsdWUgKTsKICAgICAgJHRwbC0+YXNzaWduKCdmaWVsZHMnLCAkZmllbGRzICk7CiAgICAgICR0cGwtPmFzc2lnbignZGVzY3JpcHRpb24nLCAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXSApOwogICAgICAkdHBsLT5hc3NpZ24oJ3RpdGxlX2FkZF9saW5lJywgJG1vZC0+TGFuZygnYWRkX2xpbmUnKSApOwogICAgICAkdHBsLT5hc3NpZ24oJ3RpdGxlX3JlbW92ZV9saW5lJywgJG1vZC0+TGFuZygncmVtb3ZlX2xpbmUnKSApOwogICAgICByZXR1cm4gJHRwbC0+ZmV0Y2goKTsKICAgfQoKCgogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9leHRyYV9vcHRpb25zKGFycmF5ICRwYXJhbXMpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLwogICAvLwogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIGlmICghaXNTZXQoJHBhcmFtc1siZmllbGQiXSkpCiAgICAgICAgIHJldHVybjsKCiAgICAgICRvcHRpb25zID0gYXJyYXkoKTsKICAgICAgJGRlZmF1bHRfb3B0aW9ucyA9IGFycmF5KCk7CiAgICAgIHN3aXRjaCAoc3RydG9sb3dlcigkcGFyYW1zWyJmaWVsZCJdKSkgewogICAgICAgICAgICBjYXNlICJjb2xvcl9waWNrZXIiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic2l6ZSJdID0gMTA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtb2R1bGVfbGluayI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtb2QiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidGV4dCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0YXJnZXQiXSA9ICdfc2VsZic7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9IDMwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X2xlbmd0aCJdID0gMjU1OwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImxpbmsiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidGV4dCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0YXJnZXQiXSA9ICdfc2VsZic7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJsaW5rIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJtb2R1bGUiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0ZXh0Il0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImxpbmsiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImRyb3Bkb3duX2Zyb21fbW9kdWxlIjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm1vZCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImZpcnN0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJmaWxlX3NlbGVjdG9yIjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImZpbGV0eXBlcyJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJleGNsdWRlcHJlZml4Il0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInJlY3Vyc2UiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic29ydGZpbGVzIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRpciJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJwcmV2aWV3Il0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkcm9wZG93biI6CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtdWx0aXBsZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInZhbHVlcyJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJmaXJzdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siY29tcGFjdCJdID0gJyc7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJkcm9wZG93bl9mcm9tX3VkdCI6CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9IDU7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm11bHRpcGxlIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidmFsdWVzIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImZpcnN0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidWR0Il0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJjb21wYWN0Il0gPSAnJzsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImRyb3Bkb3duX2Zyb21fZ2JjIjoKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic2l6ZSJdID0gNTsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibXVsdGlwbGUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ2YWx1ZXMiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZmlyc3RfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJnYmMiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImNvbXBhY3QiXSA9ICcnOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZHJvcGRvd25fZnJvbV9jdXN0b21ncyc6CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbJ211bHRpcGxlJ10gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1snc2l6ZSddID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbJ2N1c3RvbWdzX2ZpZWxkJ10gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1snZGVzY3JpcHRpb24nXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJjb21wYWN0Il0gPSAnJzsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRleHRhcmVhIjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sicm93cyJdID0gMjA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJjb2xzIl0gPSA4MDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJlZGl0b3IiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJyb3dzIl0gPSAyMDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImNvbHMiXSA9IDgwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImlucHV0IjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic2l6ZSJdID0gMzA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtYXhfbGVuZ3RoIl0gPSAyNTU7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAic29ydGFibGVsaXN0IjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInZhbHVlcyJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJmaXJzdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJhbGxvd2R1cGxpY2F0ZXMiXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X3NlbGVjdGVkIl0gPSAtMTsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImxhYmVsX2xlZnQiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibGFiZWxfcmlnaHQiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidWR0Il0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm1heF9udW1iZXIiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sicmVxdWlyZWRfbnVtYmVyIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInRleHQiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZXhlY3V0ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAicGFnZXMiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiY2hlY2tib3giOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndGltZXBpY2tlcic6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJzaXplIl0gPSAxMDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm1heF9sZW5ndGgiXSA9IDEwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidGltZV9mb3JtYXQiXSA9ICdISDptbSc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZGF0ZXBpY2tlcic6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJzaXplIl0gPSAyMDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm1heF9sZW5ndGgiXSA9IDIwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGF0ZV9mb3JtYXQiXSA9ICd5eS1tbS1kZCc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0aW1lX2Zvcm1hdCJdID0gJ0hIOm1tJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInRpbWUiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3JhZGlvJzoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm11bHRpcGxlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInZhbHVlcyJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAtMTsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImlubGluZSJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaHIiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImltYWdlX3BpY2tlciI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaGlkZGVuJzoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbJ3ZhbHVlJ10gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdmaWVsZHNldF9zdGFydCc6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWydsZWdlbmQnXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2dhbGxlcnlfcGlja2VyJzoKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1snZGlyJ10gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1snZGVzY3JpcHRpb24nXSA9ICcnOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaW5wdXRfcmVwZWF0ZXIiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJzaXplIl0gPSA1MDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm1heF9sZW5ndGgiXSA9IDI1NTsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICAkdGhpcy0+ZmllbGQgPSAkcGFyYW1zWyJmaWVsZCJdOwoKICAgICAgaWYgKGVtcHR5KCRwYXJhbXMpID09IGZhbHNlKSB7CiAgICAgICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGtleSA9PiAkcGFyYW0pIHsKICAgICAgICAgICAgaWYgKGlzU2V0KCRkZWZhdWx0X29wdGlvbnNbJGtleV0pICYmIGVtcHR5KCRwYXJhbSkgPT0gZmFsc2UpCiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbJGtleV0gPSAkcGFyYW07CiAgICAgICAgIH0KICAgICAgfQoKICAgICAgJHRoaXMtPm9wdGlvbnMgPSAkZGVmYXVsdF9vcHRpb25zOwogICB9Cgp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/ecb2_admin.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogZWNiMl9hZG1pbi5jc3MgLSB2MS4xIC0gMTZGZWIxOQ0KDQogICAtIHYxLjEgLSAxNkZlYjE5IC0gZWNiX3JlcGVhdGVyIGFkZGVkICYgYmVnYW4gY29uc29saWRhdGluZyBDU1MgaW50byB0aGlzIGZpbGUNCiAgIC0gdjEuMCAtIDE4QXByMTcgLSBpbml0aWFsIGNzcyBmaWxlDQoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLnNvcnRhYmxlLWVjYjItbGlzdCB0ciB7Y3Vyc29yOm1vdmU7fQ0KI2xvYWRlciB7cGFkZGluZy1sZWZ0OjUwcHg7fQ0KDQouZWNiMi1idXR0b24taW5saW5lIHtwYWRkaW5nLXJpZ2h0OjEwcHg7IHBhZGRpbmctbGVmdDoxMHB4OyBmb250LXNpemU6MjBweDsgZm9udC13ZWlnaHQ6Ym9sZDt9DQoNCi5lY2JfcmVwZWF0ZXIgLnJlcGVhdGVyLXdyYXBwZXIge3dpZHRoOjEwMCU7fQ0KLmVjYl9yZXBlYXRlciAucmVwZWF0ZXItd3JhcHBlcjpmaXJzdC1jaGlsZCAuZWNiMi1yZXBlYXRlci1yZW1vdmUge2Rpc3BsYXk6bm9uZTt9DQouZWNiX3JlcGVhdGVyIC5yZXBlYXRlci1maWVsZCB7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDEwMHB4KTt9DQoNCi5lY2JfY29tcGFjdCAuZWNiX3NlbGVjdF9lZGl0OjpiZWZvcmUge2NvbnRlbnQ6J0hpZGUnO30NCi5lY2JfY29tcGFjdCBzZWxlY3Qge2Rpc3BsYXk6aW5saW5lLWJsb2NrOyBtYXgtaGVpZ2h0Ojgwdmg7fQ0KLmVjYl9jb21wYWN0Om5vdCguc2hvdykgLmVjYl9zZWxlY3RfZWRpdDo6YmVmb3JlIHtjb250ZW50OidFZGl0Jzt9DQouZWNiX2NvbXBhY3Q6bm90KC5zaG93KSBzZWxlY3Qge2Rpc3BsYXk6bm9uZTt9]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/ecb2_admin.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gZWNiMl9hZG1pbi5qcyAtIHYxLjIgLSAxNkZlYjE5DQovLw0KLy8gICAgLSB2MS4yIC0gMTZGZWIxOSAtIGVjYl9yZXBlYXRlciBhZGRlZA0KLy8gICAgICAgICAgICAgICAgICAgICAtIGJlZ2FuIGNvbnNvbGlkYXRpbmcgYWxsIGpzIGludG8gdGhpcyBmaWxlDQovLyAgICAtIHYxLjEgLSAxMUp1bDE3IC0gdXBkYXRlZCBmb3IgbWF4X251bWJlciAmIHJlcXVpcmVkX251bWJlciAmIHVwZGF0ZUVDQjJQbGFjZWhvbGRlcigpDQovLyAgICAtIHYxLjAgLSAxOEFwcjE3IC0gaW5pdGlhbCBqcyBmaWxlDQovLw0KLy8gICAgZW5hYmxlcyBkcmFnLW4tZHJvcCBzZWxlY3Rpb24gb2YgbGlzdCBpdGVtcywgcmVxdWlyZXMganF1ZXJ5IHVpIHNvcnRhYmxlDQovLw0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KJChmdW5jdGlvbigpIHsNCg0KDQogICAvLyBlY2JfZmlsZV9zZWxlY3Rvcg0KICAgJCgnLmVjYl9maWxlX3NlbGVjdG9yX3NlbGVjdCBzZWxlY3QnKS5jaGFuZ2UoIGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGltZ3RhZyA9ICQodGhpcykucGFyZW50KCkubmV4dCgpOw0KICAgICAgaW1ndGFnLmF0dHIoJ3NyYycsIGltZ3RhZy5kYXRhKCd1cGxvYWRzdXJsJykrJy8nKyQodGhpcykudmFsKCkpOw0KICAgfSk7DQoNCg0KDQogICAvLyBlY2JfbXVsdGlwbGVfc2VsZWN0DQogICAkKCcuZWNiX211bHRpcGxlX3NlbGVjdCBzZWxlY3QnKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQogICAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSAkKHRoaXMpLnZhbCgpID8gJCh0aGlzKS52YWwoKS5qb2luKCcsJykgOiAnJzsNCiAgICAgICQodGhpcykuc2libGluZ3MoJy5lY2Jfc2VsZWN0X2lucHV0JykudmFsKCBzZWxlY3RlZFZhbHVlcyApOw0KICAgICAgLy8gdGhlbiB1cGRhdGUgc3VtbWFyeSB0ZXh0IC0gaWYgaXQgZXhpc3RzDQogICAgICB2YXIgJHNlbGVjdFN1bW1hcnkgPSAkKHRoaXMpLnNpYmxpbmdzKCcuZWNiX3NlbGVjdF9zdW1tYXJ5Jyk7DQogICAgICBpZiAoICRzZWxlY3RTdW1tYXJ5Lmxlbmd0aD4wICkgew0KICAgICAgICAgdmFyIHNlbGVjdGVkVGV4dCA9ICQodGhpcykuY2hpbGRyZW4oJ29wdGlvbjpzZWxlY3RlZCcpLm1hcChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgIHJldHVybiAkKHRoaXMpLnRleHQoKTsNCiAgICAgICAgICAgIH0pLmdldCgpLmpvaW4oJywgJyk7DQogICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCcuZWNiX3NlbGVjdF9zdW1tYXJ5JykudmFsKCBzZWxlY3RlZFRleHQgKTsNCiAgICAgICAgIHZhciAkc3VtbWFyeVRleHQgPSAkKHRoaXMpLnNpYmxpbmdzKCcuZWNiX3NlbGVjdF9zdW1tYXJ5JykuY2hpbGRyZW4oJy5lY2Jfc2VsZWN0X3RleHQnKTsNCiAgICAgICAgIGlmICggc2VsZWN0ZWRUZXh0PT0nJyApIHsNCiAgICAgICAgICAgICRzZWxlY3RTdW1tYXJ5LmNoaWxkcmVuKCcuZWNiX3NlbGVjdF90ZXh0JykuaHRtbCggJHN1bW1hcnlUZXh0LmRhdGEoJ2VtcHR5JykgKTsNCiAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkc2VsZWN0U3VtbWFyeS5jaGlsZHJlbignLmVjYl9zZWxlY3RfdGV4dCcpLmh0bWwoIHNlbGVjdGVkVGV4dCApOw0KICAgICAgICAgfQ0KICAgICAgfQ0KICAgfSk7DQoNCiAgIC8vIGVjYl9jb21wYWN0IC0gc2hvdyAmIGhpZGUgdGhlIGZ1bGwgc2VsZWN0ICYgdXBkYXRlIHN1bW1hcnkgdGV4dA0KICAgJCgnLmVjYl9jb21wYWN0IC5lY2Jfc2VsZWN0X2VkaXQnKS5jbGljayggZnVuY3Rpb24oZSkgew0KICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuZWNiX2NvbXBhY3QnKS50b2dnbGVDbGFzcygnc2hvdycpOw0KICAgfSk7DQoNCg0KDQogICAvLyBlY2JfcmVwZWF0ZXINCiAgICQoJy5lY2JfcmVwZWF0ZXInKS5vbignY2hhbmdlJywgJy5yZXBlYXRlci1maWVsZCcsIGZ1bmN0aW9uKGUpIHsNCiAgICAgIHVwZGF0ZV9yZXBlYXRlciggJCgkKHRoaXMpLmRhdGEoJ3JlcGVhdGVyJykpICk7DQogICB9KTsNCg0KICAgJCgnLmVjYl9yZXBlYXRlcicpLm9uKCdjbGljaycsICcuZWNiMi1yZXBlYXRlci1hZGQnLCBmdW5jdGlvbihlKSB7DQogICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICB2YXIgJGZpZWxkV3JhcHBlciA9ICQodGhpcykuY2xvc2VzdCgnLnJlcGVhdGVyLXdyYXBwZXInKTsNCiAgICAgICRmaWVsZFdyYXBwZXIuY2xvbmUoKS5pbnNlcnRBZnRlciggJGZpZWxkV3JhcHBlciApLmZpbmQoJy5yZXBlYXRlci1maWVsZCcpLnZhbCgnJyk7DQogICAgICB1cGRhdGVfcmVwZWF0ZXIoICQoJCh0aGlzKS5kYXRhKCdyZXBlYXRlcicpKSApOw0KICAgfSk7DQogICAkKCcuZWNiX3JlcGVhdGVyJykub24oJ2NsaWNrJywgJy5lY2IyLXJlcGVhdGVyLXJlbW92ZScsIGZ1bmN0aW9uKGUpIHsNCiAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgIHZhciAkZmllbGRXcmFwcGVyID0gJCh0aGlzKS5jbG9zZXN0KCcucmVwZWF0ZXItd3JhcHBlcicpLA0KICAgICAgICAgICRyZXBlYXRlciA9ICQoJCh0aGlzKS5kYXRhKCdyZXBlYXRlcicpKQ0KICAgICAgJGZpZWxkV3JhcHBlci5yZW1vdmUoKTsNCiAgICAgIHVwZGF0ZV9yZXBlYXRlciggJHJlcGVhdGVyICk7DQogICB9KTsNCg0KDQoNCiAgIGZ1bmN0aW9uIHVwZGF0ZV9yZXBlYXRlciggJHJlcGVhdGVyICkgew0KICAgICAgdmFyICRwYXJlbnQgPSAkKCAkcmVwZWF0ZXIuZGF0YSgncGFyZW50JykgKSwNCiAgICAgICAgICAkZmllbGRzID0gW107DQogICAgICAkcmVwZWF0ZXIuZmluZCgnLnJlcGVhdGVyLWZpZWxkJykuZWFjaChmdW5jdGlvbihpKXsNCiAgICAgICAgICRmaWVsZHMucHVzaCggJCh0aGlzKS52YWwoKSApOw0KICAgICAgfSkNCiAgICAgICRwYXJlbnQudmFsKCAkZmllbGRzLmpvaW4oJ3x8JykgKTsNCiAgIH0NCg0KDQoNCiAgIC8vIHNvcnRhYmxlIGxpc3RzDQogICAkKCd1bC5zb3J0YWJsZS1lY2IyLWxpc3QnKS5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgJHBhcmVudCA9ICQodGhpcykuY2xvc2VzdCgnLmVjYjItY2InKTsNCiAgICAgICAgdmFyICRzZWxlY3RlZCA9ICRwYXJlbnQuZmluZCgndWwuc2VsZWN0ZWQtaXRlbXMnKTsNCiAgICAgICAgJCh0aGlzKS5zb3J0YWJsZSh7DQogICAgICAgICAgICBjb25uZWN0V2l0aDogJHNlbGVjdGVkLA0KICAgICAgICAgICAgZGVsYXk6IDE1MCwNCiAgICAgICAgICAgIHJldmVydDogMzAwLA0KICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICd1aS1zdGF0ZS1oaWdobGlnaHQnLA0KICAgICAgICAgICAgaXRlbXM6ICdsaTpub3QoLm5vLXNvcnQpJywNCiAgICAgICAgICAgIGhlbHBlcjogZnVuY3Rpb24oZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgaWYgKCF1aS5oYXNDbGFzcygnc2VsZWN0ZWQnKSkgew0KICAgICAgICAgICAgICAgICAgICB1aS5hZGRDbGFzcygnc2VsZWN0ZWQnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLnNpYmxpbmdzKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gdWkucGFyZW50KCkNCiAgICAgICAgICAgICAgICAgICAgLmNoaWxkcmVuKCcuc2VsZWN0ZWQnKQ0KICAgICAgICAgICAgICAgICAgICAuY2xvbmUoKSwNCiAgICAgICAgICAgICAgICAgICAgaGVscGVyID0gJCgnPGxpLz4nKTsNCiAgICAgICAgICAgICAgICB1aS5kYXRhKCdtdWx0aWRyYWcnLCBlbGVtZW50cykuc2libGluZ3MoJy5zZWxlY3RlZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuYXBwZW5kKGVsZW1lbnRzKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBzdG9wOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSB1aS5pdGVtLmRhdGEoJ211bHRpZHJhZycpOw0KICAgICAgICAgICAgICAgIHZhciAkdWxTZWxlY3RlZCA9ICQodWkuaXRlbSkucGFyZW50KCk7DQogICAgICAgICAgICAgICAgdWkuaXRlbS5hZnRlcihlbGVtZW50cykucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgdXBkYXRlRUNCMkNCSW5wdXQoJHVsU2VsZWN0ZWQpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHJlY2VpdmU6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IHVpLml0ZW0uZGF0YSgnbXVsdGlkcmFnJyk7DQogICAgICAgICAgICAgICAgaWYgKCQodGhpcykuZGF0YSgnbWF4LW51bWJlcicpICYmICQodGhpcykuY2hpbGRyZW4oKS5sZW5ndGggLSAxID4gJCh0aGlzKS5kYXRhKCdtYXgtbnVtYmVyJykpIHsNCiAgICAgICAgICAgICAgICAgICAgJCh1aS5zZW5kZXIpLnNvcnRhYmxlKCdjYW5jZWwnKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB1cGRhdGVFQ0IyUGxhY2Vob2xkZXIoJCh0aGlzKSk7DQogICAgICAgICAgICAgICAgICAgICQoZWxlbWVudHMpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCB1aS1zdGF0ZS1ob3ZlcicpDQogICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnLnNvcnRhYmxlLXJlbW92ZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0pOw0KDQogICAgLy8gcmVtb3ZlIGZyb20gc2VsZWN0ZWQgbGlzdCAtIGJ5IGRyYWdnaW5nIGJhY2sgdG8gYXZhaWxhYmxlDQogICAgJCgndWwuc2VsZWN0ZWQtaXRlbXMnKS5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgJHBhcmVudCA9ICQodGhpcykuY2xvc2VzdCgnLmVjYjItY2InKTsNCiAgICAgICAgdmFyICRhdmFpbGFibGUgPSAkcGFyZW50LmZpbmQoJ3VsLmF2YWlsYWJsZS1pdGVtcycpOw0KICAgICAgICAkKHRoaXMpLnNvcnRhYmxlKHsNCiAgICAgICAgICAgIGNvbm5lY3RXaXRoOiAkYXZhaWxhYmxlLA0KICAgICAgICAgICAgZGVsYXk6IDE1MCwNCiAgICAgICAgICAgIHJldmVydDogMzAwLA0KICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICd1aS1zdGF0ZS1oaWdobGlnaHQnLA0KICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgdmFyICR1bFNlbGVjdGVkID0gJCh1aS5pdGVtKS5jbG9zZXN0KCcuZWNiMi1jYicpLmZpbmQoJy5zZWxlY3RlZC1pdGVtcycpOw0KICAgICAgICAgICAgICAgICQodWkuaXRlbSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJykNCiAgICAgICAgICAgICAgICAkKHVpLml0ZW0pLmNoaWxkcmVuKCcuc29ydGFibGUtcmVtb3ZlJykuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KICAgICAgICAgICAgICAgIHVwZGF0ZUVDQjJDQklucHV0KCR1bFNlbGVjdGVkKTsNCiAgICAgICAgICAgICAgICB1cGRhdGVFQ0IyUGxhY2Vob2xkZXIoJHVsU2VsZWN0ZWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KICAgIC8vIHJlbW92ZSBmcm9tIHNlbGVjdGVkIGxpc3QgLSBieSBjbGlja2luZyByZW1vdmUgaWNvbg0KICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcjc2VsZWN0ZWQtaXRlbXMgLnNvcnRhYmxlLXJlbW92ZScsIGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICB2YXIgJHVsU2VsZWN0ZWQgPSAkKHRoaXMpLmNsb3Nlc3QoJ3VsLnNlbGVjdGVkLWl0ZW1zJyk7DQogICAgICAgIHZhciAkdWxBdmFpbGFibGUgPSAkKHRoaXMpLmNsb3Nlc3QoJy5lY2IyLWNiJykuZmluZCgnLmF2YWlsYWJsZS1pdGVtcycpOw0KICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdoaWRkZW4nKQ0KICAgICAgICAgICAgLnBhcmVudCgnbGknKS5yZW1vdmVDbGFzcygnbm8tc29ydCcpDQogICAgICAgICAgICAuYXBwZW5kVG8oJHVsQXZhaWxhYmxlKTsNCiAgICAgICAgdXBkYXRlRUNCMkNCSW5wdXQoJHVsU2VsZWN0ZWQpOw0KICAgICAgICB1cGRhdGVFQ0IyUGxhY2Vob2xkZXIoJHVsU2VsZWN0ZWQpOw0KICAgIH0pOw0KDQogICAgZnVuY3Rpb24gdXBkYXRlRUNCMkNCSW5wdXQoJHVsU2VsZWN0ZWQpIHsNCiAgICAgICAgdmFyICRhbGxTZWxlY3RlZCA9ICR1bFNlbGVjdGVkLmNoaWxkcmVuKCdsaTpub3QoLnBsYWNlaG9sZGVyKScpOw0KICAgICAgICB2YXIgJHRhcmdldElucHV0ID0gJCgnIycgKyAkdWxTZWxlY3RlZC5kYXRhKCdjbXNtcy1jYi1pbnB1dCcpKTsNCiAgICAgICAgdmFyIHNlbGVjdGVkU3RyID0gJyc7DQogICAgICAgIHZhciByZXF1aXJlZE51bWJlciA9ICR1bFNlbGVjdGVkLmRhdGEoJ3JlcXVpcmVkLW51bWJlcicpOw0KICAgICAgICBpZiAocmVxdWlyZWROdW1iZXIgJiYgJGFsbFNlbGVjdGVkLmxlbmd0aCAhPSByZXF1aXJlZE51bWJlcikgew0KICAgICAgICAgICAgJHRhcmdldElucHV0LnZhbCgnJyk7IC8vIHNldCB0byBlbXB0eQ0KDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkYWxsU2VsZWN0ZWQuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRTdHIgPT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTdHIgPSAkKHRoaXMpLmRhdGEoJ2Ntc21zLWl0ZW0taWQnKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFN0ciA9IHNlbGVjdGVkU3RyICsgJywnICsgJCh0aGlzKS5kYXRhKCdjbXNtcy1pdGVtLWlkJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkdGFyZ2V0SW5wdXQudmFsKHNlbGVjdGVkU3RyKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZUVDQjJQbGFjZWhvbGRlcigkdWxTZWxlY3RlZCkgew0KICAgICAgICB2YXIgcmVxdWlyZWROdW1iZXIgPSAkdWxTZWxlY3RlZC5kYXRhKCdyZXF1aXJlZC1udW1iZXInKTsNCiAgICAgICAgdmFyIG51bWJlclNlbGVjdGVkID0gJHVsU2VsZWN0ZWQuY2hpbGRyZW4oKS5sZW5ndGggLSAxOyAvLyBleGNsdWRlIHBsYWNlaG9sZGVyDQogICAgICAgIGlmICgoIXJlcXVpcmVkTnVtYmVyICYmIG51bWJlclNlbGVjdGVkID4gMCkgfHwgKHJlcXVpcmVkTnVtYmVyID4gMCAmJiBudW1iZXJTZWxlY3RlZCA9PSByZXF1aXJlZE51bWJlcikpIHsNCiAgICAgICAgICAgICR1bFNlbGVjdGVkLmNoaWxkcmVuKCcucGxhY2Vob2xkZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdWxTZWxlY3RlZC5jaGlsZHJlbignLnBsYWNlaG9sZGVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KICAgICAgICB9DQoNCg0KICAgIH0NCg0KfSk7]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/images/color.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMOSURBVDjLVZNNaBxlAIafb+ab2Z3N7Oxv/nYTEyv2LzQJpKBgrQqNUKmY4kUIXqUHT70p9iB48CKIiN5E0It6KFiwiv9FpAVpKUggNc3mZ7vpJpv9n93ZnZ35PNRI+8B7e9/n9gqlFAeIVUfPeN3zh0R0eVpYM1OanhvTCEY0f3tU79+ctnpfHM73fuQhxIHAWHnmkOGXPjgZyS09l5hnNv4YOdMhoQmigzqGt4nhfeub1fpnVsl/e+hMv/q/QKy+Me0EO5dfso/OvzB8grgV4HGXJC7jwAQ2oxxDuC36xZ+Rhe+v6iutZf2iqklReNe0tPSHZ2Nz84ujR7ht3iJKjcexiOIQI8SiixxcR7QtRORFlK7O9t0rlyy4KBEj5+YisVeez85wy9zGIUeGDDYhDhYOITYuoh2BvTJ68y7B0GnCym8XGq+KL2U0MrE8Z2SRVhqdPmlCsvgk8RlCkgAivRbUNKj1YPMeeu4wcnjRql7/+jVpyvxsPjbK3whi5LEAB0WWgBRgqwAaFah04X4V7puwdwddz+FXjJMSbXI8aSTYCgU2oKMwEdgCEoDhug/G5SjsmFDUoV+DXJ7BnpiUVCNBaJqEXfDVfwG6CjoKnF4crZGCVvNBug0IPXzPZOCnAunfk8W6ro7H2gK3A02gGoDeA1MDGx2nkYG6C24bvDaMSzq7ZfxBsiC7O+aNDaWOn0oLfl0HMwDlQRCAHYUkEGvFkLsp2G9Bo0n41AiNG6sMBvY1yZr6/JsV//XZZ3WZaEp2t6DvgWFA1QRHQbwjSDeTUGvCiSPU1ovU/typQPIrTV0yrrl3vE+/+8XlaCIgq8H+BtSLUN2C2ibsl8ArR+HYGE0rwvbvRTr96HsL6od1CUDDf+enK92JwT+982cWEswvRmiug6qAr0E4AV4uoFXosnV1g8bN5kcp7E8eOZOYKtmUqm/ZiDdfPhV3Zp6IM5k0SIUBstwmXKvCX5UdM6y9n2b34wV1IXxEcEBU3J4dprU0zODpjFBTIyoIxgjXxlB/PIl1eUmdLjzc/xceOVXddrB6BQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/grid.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFAAUAJEAAAAAAP///+zp2P///yH5BAEAAAMALAAAAAAUABQAAAIojI+iy+jBonhJLnrsxVBP7n1YyHVaSYKhh7Lq+VotPLo1TaW3HEtlAQA7]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/meta100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAAAAACMIRMSAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAaAAAAGgAHsmYvAAACLklEQVQoz0VSW0hUURRd9zVvBcmhyKEMhCghMCT6KIwoiIgIIwZ6CNXHEEUf1cd81Jc9fiKjQoL6kLDQiqISmZgypCdoQUSIg2YoFNhrpgxm5px7V3uuA204j73X2efss/YCxTytlPbom+cqpdyKAxnarcRc/X/2lOdDisWRTGa0RC0hl+OPM8O/WNYCaWZbDMBsfUKt+Kk9DCBxxSt5UOwzYQeDFqx75GQjTCdgGzhGBc7E4VSyHDR84TYETMCwbAzIhRcQRENPVwwBXM/BhHXybrPsdwiUlLWHPCUnDt+SaS85BAuNeXANUDNNPoeNLWmEcJPFP8uA2BjyS4Gm8WnmpLLWpOC3f2iuk7QhzC4GaheFB7/XAM1bYTm10X5uliOD+LkEpmHhUCEGtOyEbVro4CaBnqK0AkZkQeL954CB9SnYVjTxTN43nVFwA4zY6zyzcNB+Vio877KQAOqmwH3iXiWPy3LigVS4S73otm0s/wvekFi8rzsk3+v/KrxEm4REB/vly3MrERJyrDBW/eZBhFF/5+OZoDlCaL6KwzANAwvfUhfagGvvkhOPuir0aub2xB2jvmOi0tO59OpvKdSNsey30uXs6FSequjqkjiXAmEcmYc8XebudInSc4/um+1C3NHT1L42RAIDds2B3uGXD8+12cDaD9SiIsyriDOpCHyLbOwtijK8KiRCcpnPXu7svHh/0pUUP1aFPFWu6pCuqu6qkK/Asti8On37BwKNc9D2ur7jAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEwLTA4LTE1VDEyOjUwOjE3LTA0OjAwUhXmOgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0wOC0xNVQxMjo1MDoxNy0wNDowMCNIXoYAAAARdEVYdGpwZWc6Y29sb3JzcGFjZQAyLHVVnwAAACB0RVh0anBlZzpzYW1wbGluZy1mYWN0b3IAMngyLDF4MSwxeDFJ+qa0AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/picker.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAMAAAACICAIAAAA+tXNRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAE6NJREFUeNrcXcGywrYOtR0WXXTRL3j9///rTBfE0gNCEtmWZAWiDC5zhwkhF84xx7Isy0rE+z08HjEwD/akcp574KGLzSeb82MTcEP/uBiDJ4GI//5bgIoC0igzUF9W7Y/B+hLVk7KAhiTghr4V0MkEIv7zT59BFFgaDrb2RwNAVF8ux7h+9hEB/ToBN/RUQC4EbmGea4wtXpZKJB/V/pTlWyg8K29JF6NmgUYl4IzekcBDQPcCZgzWl9iQiOuHq9i/ecmdtCP+RQIRvdH7EiAWiKKTjqWTyA3F5CT95haF8bg9KQhoJAKtgBzQOxIoBdT+tW9h+e7jZeLGbc6Gtiikk0G+AOpPY1EOQ+Aq9F4EbiHnDoNEqCSOE8hDcRCN6dG/LwT00wSuRX8+gcUC4Q4nCZpfsGdyzAYoVOWz2IE7E+R3mysruIMR8EfvSSBSAaVVz4njRHkAecsAX6LCosvrZbB+VXUZiAIaksC16M8msAsorbhSSSKtw2xsLCkbINj+XZ0MUCAtTGguoP8iCGhUAheidyAQ3z4Q7r4Zlq7a9jLJM8skuG24h7G6AyzIzy18KPpIFBCPQcAZvd3p+YjAU0D3+3MqmUr9L8+JePlYCpteXMUIVGOq45VOqrTiinVIAkvbX4X+bAJxmcZvJDZEkdjEDT49Q7nGxjraYijIoc7NSeW4FNCQBLa2d0PvSaAW0OM7p5IBEviJmylOckeQl+BY0wkC8OpM1gQ0HgEqIDf0bgRqAaXSDlK9tnPHtH5OapQd+96/UeSZgw+igMYjQNveE70PgaeAHk50xBpvxSBp+Sb7lZHDHE0kpD+9/aFGMB6Ba9GfTeA1jb8XvQDJgRTjZuGzf7EzAYCGRBbgS2fKDjwegYTe6D0JvONAi4CmZuGszTFhAURukVO2ocY5pUQi1/1ia/whCWwC8kfvQKAQ0OatTSUWJRsFyGIMChlIXM6SPg5ncpB7ZxrjORiBTUDO6H0I7AKaVuyhPAgNleoZuK7RkNDXYKSxt4KfOU5lBx6PQMIL0LsReAsoIZ+hdhOSJWMjfnaIDnUsAs3iz6Xmq2anB2v7j0og4TXofQhEWAW0mc5N/2FdVqsQVWkEyuK/Og6DoH/kukCWX+LucQ5JIOHF6E8l8BLQgwTU2IOKneaqSNixPwFAg91sX86igIYkkNAVvTOB9BBQngOAplsl5QnKVWPW04+dOYAUImmP55LQ/O6jqdfxfprAhegdCKS3DwRaHlsk9rRNfzIb0O00CGswUkdgu0MuLJCeiPfTBBJeg96HwC4g1n1fYObyuOoCSTCgsg0Nhjio1OBzc4z7AsCQBLYJjBt6TwKFgKqc7Mp65tJuJvLt1aJwLw6nZ6OwkQfgSDQCGpIAnQE7o3cgUAuIYs8lg8QJHhvTmILxYcluYhUzawIajwAbQvFHfxIBRkBszIHqH8pABLscrIaxQPDfutOADbsqoMEIVALyQe9G4CmgxywMYc9yy4Lfv3xUItgThycw4zAKoVBQ14JZl7l665XOPZVpeoMRmNAbvSeBBGQW1m6gTWQjSW40XwWikjYTqJYJocnb7q7E5Mb8z28BYbOLfCQCiBegdyPwFND90QuAnz6m0oYCIQRkQS9xW2CFFTy9C2QhkF5Zz+Xv/h7CQA6gDEAA0BW9M4G3D4TAxDtTOWtMjYVL3Kai454bGGwoyOMw7hsWhiSQ8Er0ZxN4+0B0e1K7RzI14hey26WQFprX8SwuHH139YFSGJbAhN7oPQmk3FigwDFInDqlba/H9d8NZs0EeGVGsa5wMhgBxCvRn02gEBDbBdLq/ScD/KAFs5RkuO4cAIRYRCmgIQkgXoPeh0AtoFjKPpG5I/R22oeGR+QduaDu3Ge7wCy4EI2AxiOAeAF6NwJ9AS0kJq4jsACCltNnH4ez8DdrQ9iQBHQBnYfeh8BLQDlgrlGnhkQS7NzBTKxgSEvJ5mW9udjWPyQBxMvQOxCY8hKJzh0SkzzR6xUl6pamsQdBVSd6VAKIruidCeA7Er1aoFmAnxseUr0S8wQAeindUObAzVwYurFA4xGgFsgZvQOBXUAb/JkzoBNZjJkMXUCo2hcOpnS3CzDtbBL32ktDEkB0Re9M4CmgfH8OYXnd2k8njhP5qMkci5DXAw5tKmGjENV84P7+5C1sOyQBf/RuBGBekurzO+wwlwwocHrMlq6yRSGkERiFrZtZyMQiSxk0bjIegYjXoPciQIawtL5FY1iZUEGD8xa+XY/Z6vSxqy9cHCgQB3RIApejP48AVgJqlV/Zs0ktz3hkGUb6y9x2/moElgU0JAFP9M4EXgK6FwKaSEeYiFUVSmNYNibZ14KzMI9U1sKgFtB4BC5EfzYBWAKJU65HutQ4b60o27QkdslFrREKvc1t3eRKLOz9eAQiXobeg8B7KSPv+p9fz1OTVASNbc2v3dtSOP3IOl63F4Dgws37LGxgAv7o3QggFdAGfybGNAtjYjsNDGKtLFQTu429YBZX40PT/oMRcEbvSeApoPv9LaDben4S7JYlEKHua0Ch0rUSxgJ1EvlyIbaiXkMSQLgGvQ8BWCzQ49TUYM/C2HtwNQ/l2kZgq9CnrybBu1bpwAQ80TsTeFqgZ5HNvIt/UvdygLAe05tHWpaAu4u/7OZgfO/CG5XAw4l2Ru9LgFigqfwhMleega1fbphHdm9SVVnSLAzCbR/G3QKNSsAfvRsBfAto3klIvQBJjWnshSDMJQahiWG13j+oCWVQCGhIApeg9yHwFFAuBXQTvH+jAZWKox/MRpFG4Gpb1RqHo40/GIEI16B3IgDL3Xqylj+UVV/OUs/YUCYUbblMHK5kvfAnCSS4DL0DgbjsTMV51/9MegHILhwYLGkvhgWGXCZQJzH32gcakoAzelcCy1rYMoRt8FsSmbtLBZtS8FGhXFBL4epxuJcPNIeRCVyC3ofAOxK9CKiF3zWgoO4xiRp26AXSlRlksxa5hXDHIxDhAvR+BCoBSeLXbSiY1oItQVCLDZ01AY1HgArIE70TARpItHtxUkq3ucay5YYfudnNdp4T/UMEPnCiv0B/NoGYbzC/jm5HXH8QUvq5GSLE+h0w3NzMvsUN3xZoVAIRXdGHyLx5HoGHgGZ71BvlCtSwZltXf1OYkQn9gfAZ+ZxkzYEJnI0+IB98PY1AKaBuCVgU4gUzicCr7V8lt2UuVP9FAYqxCTigbwV0MoFb7uYb4cG1tnLozOpwCupiIRiqCBgSpgYg4IY+BGcCt7ue8ajU8WQJLeM5kA4Mu92sbhQBctKCjt1sgQYj4IA+QDFynU+ADGFHN963wHO5oLy0fyqWrti+cDTSiudUDvgtAj7oQ6oXD08m8BKQpfKQNPbempczSfBK4T4VeOeD0w1l8+XB0km/S8AT/ePgHjwJlBaIvgvmMozQiJ8waH3QbqqUEiXrLXUOTMAHPetEn0ngBi0dXf/dMozlXzc+Ji30wIdVSIcncCr6EDwJxMWJxm78oR2HkbOnU/ny/urAUIy9bVrb9nnZVsvteNrpAATc0C9OtBeBuAxhqOz9qLSYyXdJd7ObiiT3xQeVgg9U/1g2TdUFgilIPzABH/SbE+1CYBUQyrs+kEsdyII9pcGs6e3CzYm5Q0oWbuqKhkVmQ9L4YAQ80dNZ2PkE4hJIxG6qGpprMFZ/99dy7ZFgVteGfpRr9+sE3NCHmxZl/JbAywdCMoR9kDXLrvZPe6mtbRJDx9svp49Hbmbx6wSc0dNZ2PkEXkNY3G8Yc2DPEMi5jqvpfLd/6swjFR6SPY3FTxDVDvzrBJzRh8Qspp5GgDjR2JsJGPMTaHmSpv2zOgjnrxYDxibghr71gc4kUM7CDhVBY7eecUUilQ4McsJUt4bt11XcfpGAA3rdAn1LoBGQUgjWUkQmMZ3i0f4fbFhhGRwv3jYegbPRh9RPi/ycwEtA+IoHsdsbdeCJG35zWekvhnvSBl5lJmAu5MbOj4ch4Iz+uZgX3AiUcSBLyiyuhY1aQtXwO7/hS3G41mh29+0a5vBDEvBErwQSTyDQRKJRvo2LMhSnBjvRfxuHm4WVGOyVUbI5QKMS8EHPBhJPI1DOwoKhkPkmdVo8PREXLpKDWORjGe1m7t2KxnZn0MEIuKGnCWXnE+AskOWOiMCVU5+aOxOlVyA3ifd7hF4NpeMpxQMT8EEfknbHzW8JHJnGo1zrkY66c33TvTaMohf/1LPi1OoTwxNwQM/GgU4j8F4Lg6ORLCh1Tv+q26YFJowy9+aRlijEd6G4nyPghp6NA51GIC3TeLDvK6HwWTaxPCDtfygQoey8lL3PIQk4ow+p7wN9TiAtQxh8UEiPRV0xeN2CJoNpIZgdk9t5rKEC16gEfNAHsC7Ff0KACAhtBUBYErGxnnFfJ2RdiFnGbvTf5KSaIQm4oZd8oHMIpBCJBQpr+fzp+GicyT27Sh40DiftSmqnjyjfiK+3JDA2gbPRV4HEkwk0Q5hS/UPpBS3wuFenmROTDDdzIQh2yAU5FhGPlS/5dQI+6IOQT3kOgVJA9lhELu9SyqHeHrMaS9f3lRxMShyegAP6oMbRvyVQ+kAfVKOm3hr9m/cetsXhZnUbyqEy7MfzgX6dgBv60IRBzySwCqglZqkaE5se0fYFfLZ/N6Vb2dpPO0Iw5YWOR8AT/SIgLwLEiZaUnwTPLRLxhwZ44Nt/VqteHSoAaI5Bj0HADX0loJMJND6QtJqXOPFT5cN7F6TS/q3zBrZ0JjhQnWN4AmejpwI6nwA3hCl9geq/5RFIp5j3k0scblbvggfcZAAPZBWPTcAT/RZIdCHAOdFsSlwsn6np3J5pu0xrGAvExexvvDjBDRqYgBt6ZTX+BAJcHGiDTAfhikdFJRP9N+a4msRIqFEIoYd+JhBblWA8Aj7og0H+nxPgfKDqekqi7RcU/sy3h9KB2/LoKNfnCsfy6gcmcCp63QJ9SyAtO1MB5bRKKvvtmH0IEXiIxzK5LSEIJLFc5FeYhiGA6Ip+KfPrReA5jX878NgrLrLdXDvw6wji4k60buQ2FvQ/siNsGAJu6C0C+orAc2tzxt5UMhIzVi34siEI8r+QrAlw9iJ9WG8NCOMScEb/kB0ENwK4+EA5qMMsNaOhDHNK+SzTPgJv7Q/CXsh8ELg5FDcSATf0VEDnE8DFB8r6ijBVe2h4bP84rc9rAOvd/pG5hRBbp+2DOrPIb6saiYAz+u1WBy4EIOAzJzqj2gtaKtIAQn/Y1W1f2n8mlZGMN7Ru0wuklSO1yOkABDzRbwJyIhDJEKaEsYIgfimRLu0ZubQD6weWMJa6o2FgAm7oKwt0MgHiA3VnAtjGi0jiJK6bTaaVwbTqP/Ews1r5Bns7s49PZX6dgA/6kETEJxDApUpr/ozK9jmpZENduPjcO2SpsWUsaXq8xMV4BE5F/yQQ3AhAYYG2wXOSlY/FOm/BmAZNSbY3RH7LdXf9F45VGf8vEHBAHyIP9xwCuGws3KfxUY6GBjIZQC7AHvkzlvZHQ4FrW0biqATc0BsF9DmBlwVCsqQby3L7iTwHsgMglFdWDIDvwG2OSW6SxlG9MbEcRhmYgCf6SkAnEyjjQG3KYigjoKHMHogllbgCT8XObOnORSgjVbC3s4+y/ccj4Iw+BE8CUESiI8eg6gVliKroNbHMQgCx/VHeOmvJZZKnYAMTcEMfgieBZhpPLSOsCmejoRR4Khkk8lEvhxCERAGUOSn3iultDh6VgBv6ENwIrE40NpltZUrSzqNaxMMSfiTD7/oS4vu/u/CVfdi2m7WNSsAT/eIDORIgcSDk9tmmclmPyj6W1rNd+lujEO1uyyA4ZtkQCOllYo1KwAd9CJ4EYLFAs0JISmGCJp9g6x2peEta6AlcWIytbxI+vIn22AROQq8stZ1D4DZvAkJxY8jurUVuXbiyrdBp/2A4kHwGuTrH8AR80IfgTIAEEqNAAhpzGeQkg1i/hdEKP8hUQieKODwBN/SHesBhAu8aiTP16VmGyGWjKIkq5BmjFuSwPEtvce0/JAFP9FRALgTiX7fbPM9i0sD3L7mvRfnkoXe5xJghCTij9yJwu93in4uAgvzl3WPDxSgkvtiPsecu/AcIuKH3IvAU0B9UQKGX9R/NJ4X2DwYdHLr4CNBhCJyN3ovAU0Dxs99FGbFDsXYcUZu3Hvq8Mx5jEziO/nFBDJ4E4v/+/puxQJYwhYVBeLf/oRaJ4YLH2ATM6DcBuRB4WiB8PZ7/tz7osf4AAOXMdiwdSM/0JXsN+1I6rq5vL1O+XYHd/RwWnkKKvaD6xu3kIcDtL6W/lB6sSN55bbje8imuYxoid4Ox3ogXDUPi9vXtPy7P7AXdL12up8fKh7OXWWBXHCu+9IuUNlFaiUUuYYivx2HrhWeOsumQFCzfXf02H8Blf4ZvWuSUJvu4b9gbzfjSCfw5Ajra1hTZZtws0Nm+1f13aj+qyyoDIxFp7dDpP0P359cbWTfA9DwdUC4zOdVnpnD5o/sz0BasLJk09Oht9JmpbwF3h/UTO/oH3oKfmVF+pnT6dxs7t+KmGF0EyT9Yjtt3qSIP+UAWg3FoCGs1R50bxXxWajaO9U7CWj42fWPlKqpGoEaTW0mq67qyxuZjXocUc3QIU1pD8h2V3nKZ41wNl4UF+mZ6ohse3RdR+m41kHXhbW9V+mN/zg98IPu0tGuBDjVvxesDx/EUg9T20uXM/wUYAOBDukFiC65yAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/js/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery-ui-timepicker-addon.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IHRpbWVwaWNrZXIgYWRkb24KICogQnk6IFRyZW50IFJpY2hhcmRzb24gW2h0dHA6Ly90cmVudHJpY2hhcmRzb24uY29tXQogKiBWZXJzaW9uIDEuMS4xCiAqIExhc3QgTW9kaWZpZWQ6IDExLzA3LzIwMTIKICoKICogQ29weXJpZ2h0IDIwMTIgVHJlbnQgUmljaGFyZHNvbgogKiBZb3UgbWF5IHVzZSB0aGlzIHByb2plY3QgdW5kZXIgTUlUIG9yIEdQTCBsaWNlbnNlcy4KICogaHR0cDovL3RyZW50cmljaGFyZHNvbi5jb20vSW1wcm9tcHR1L0dQTC1MSUNFTlNFLnR4dAogKiBodHRwOi8vdHJlbnRyaWNoYXJkc29uLmNvbS9JbXByb21wdHUvTUlULUxJQ0VOU0UudHh0CiAqLwoKLypqc2xpbnQgZXZpbDogdHJ1ZSwgd2hpdGU6IGZhbHNlLCB1bmRlZjogZmFsc2UsIG5vbWVuOiBmYWxzZSAqLwoKKGZ1bmN0aW9uKCQpIHsKCgkvKgoJKiBMZXRzIG5vdCByZWRlZmluZSB0aW1lcGlja2VyLCBQcmV2ZW50ICJVbmNhdWdodCBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZCIKCSovCgkkLnVpLnRpbWVwaWNrZXIgPSAkLnVpLnRpbWVwaWNrZXIgfHwge307CglpZiAoJC51aS50aW1lcGlja2VyLnZlcnNpb24pIHsKCQlyZXR1cm47Cgl9CgoJLyoKCSogRXh0ZW5kIGpRdWVyeVVJLCBnZXQgaXQgc3RhcnRlZCB3aXRoIG91ciB2ZXJzaW9uIG51bWJlcgoJKi8KCSQuZXh0ZW5kKCQudWksIHsKCQl0aW1lcGlja2VyOiB7CgkJCXZlcnNpb246ICIxLjEuMSIKCQl9Cgl9KTsKCgkvKiAKCSogVGltZXBpY2tlciBtYW5hZ2VyLgoJKiBVc2UgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLCAkLnRpbWVwaWNrZXIsIHRvIGludGVyYWN0IHdpdGggdGhlIHRpbWUgcGlja2VyLgoJKiBTZXR0aW5ncyBmb3IgKGdyb3VwcyBvZikgdGltZSBwaWNrZXJzIGFyZSBtYWludGFpbmVkIGluIGFuIGluc3RhbmNlIG9iamVjdCwKCSogYWxsb3dpbmcgbXVsdGlwbGUgZGlmZmVyZW50IHNldHRpbmdzIG9uIHRoZSBzYW1lIHBhZ2UuCgkqLwoJZnVuY3Rpb24gVGltZXBpY2tlcigpIHsKCQl0aGlzLnJlZ2lvbmFsID0gW107IC8vIEF2YWlsYWJsZSByZWdpb25hbCBzZXR0aW5ncywgaW5kZXhlZCBieSBsYW5ndWFnZSBjb2RlCgkJdGhpcy5yZWdpb25hbFsnJ10gPSB7IC8vIERlZmF1bHQgcmVnaW9uYWwgc2V0dGluZ3MKCQkJY3VycmVudFRleHQ6ICdOb3cnLAoJCQljbG9zZVRleHQ6ICdEb25lJywKCQkJYW1OYW1lczogWydBTScsICdBJ10sCgkJCXBtTmFtZXM6IFsnUE0nLCAnUCddLAoJCQl0aW1lRm9ybWF0OiAnSEg6bW0nLAoJCQl0aW1lU3VmZml4OiAnJywKCQkJdGltZU9ubHlUaXRsZTogJ0Nob29zZSBUaW1lJywKCQkJdGltZVRleHQ6ICdUaW1lJywKCQkJaG91clRleHQ6ICdIb3VyJywKCQkJbWludXRlVGV4dDogJ01pbnV0ZScsCgkJCXNlY29uZFRleHQ6ICdTZWNvbmQnLAoJCQltaWxsaXNlY1RleHQ6ICdNaWxsaXNlY29uZCcsCgkJCXRpbWV6b25lVGV4dDogJ1RpbWUgWm9uZScsCgkJCWlzUlRMOiBmYWxzZQoJCX07CgkJdGhpcy5fZGVmYXVsdHMgPSB7IC8vIEdsb2JhbCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBkYXRldGltZSBwaWNrZXIgaW5zdGFuY2VzCgkJCXNob3dCdXR0b25QYW5lbDogdHJ1ZSwKCQkJdGltZU9ubHk6IGZhbHNlLAoJCQlzaG93SG91cjogdHJ1ZSwKCQkJc2hvd01pbnV0ZTogdHJ1ZSwKCQkJc2hvd1NlY29uZDogZmFsc2UsCgkJCXNob3dNaWxsaXNlYzogZmFsc2UsCgkJCXNob3dUaW1lem9uZTogZmFsc2UsCgkJCXNob3dUaW1lOiB0cnVlLAoJCQlzdGVwSG91cjogMSwKCQkJc3RlcE1pbnV0ZTogMSwKCQkJc3RlcFNlY29uZDogMSwKCQkJc3RlcE1pbGxpc2VjOiAxLAoJCQlob3VyOiAwLAoJCQltaW51dGU6IDAsCgkJCXNlY29uZDogMCwKCQkJbWlsbGlzZWM6IDAsCgkJCXRpbWV6b25lOiBudWxsLAoJCQl1c2VMb2NhbFRpbWV6b25lOiBmYWxzZSwKCQkJZGVmYXVsdFRpbWV6b25lOiAiKzAwMDAiLAoJCQlob3VyTWluOiAwLAoJCQltaW51dGVNaW46IDAsCgkJCXNlY29uZE1pbjogMCwKCQkJbWlsbGlzZWNNaW46IDAsCgkJCWhvdXJNYXg6IDIzLAoJCQltaW51dGVNYXg6IDU5LAoJCQlzZWNvbmRNYXg6IDU5LAoJCQltaWxsaXNlY01heDogOTk5LAoJCQltaW5EYXRlVGltZTogbnVsbCwKCQkJbWF4RGF0ZVRpbWU6IG51bGwsCgkJCW9uU2VsZWN0OiBudWxsLAoJCQlob3VyR3JpZDogMCwKCQkJbWludXRlR3JpZDogMCwKCQkJc2Vjb25kR3JpZDogMCwKCQkJbWlsbGlzZWNHcmlkOiAwLAoJCQlhbHdheXNTZXRUaW1lOiB0cnVlLAoJCQlzZXBhcmF0b3I6ICcgJywKCQkJYWx0RmllbGRUaW1lT25seTogdHJ1ZSwKCQkJYWx0VGltZUZvcm1hdDogbnVsbCwKCQkJYWx0U2VwYXJhdG9yOiBudWxsLAoJCQlhbHRUaW1lU3VmZml4OiBudWxsLAoJCQlwaWNrZXJUaW1lRm9ybWF0OiBudWxsLAoJCQlwaWNrZXJUaW1lU3VmZml4OiBudWxsLAoJCQlzaG93VGltZXBpY2tlcjogdHJ1ZSwKCQkJdGltZXpvbmVJc284NjAxOiBmYWxzZSwKCQkJdGltZXpvbmVMaXN0OiBudWxsLAoJCQlhZGRTbGlkZXJBY2Nlc3M6IGZhbHNlLAoJCQlzbGlkZXJBY2Nlc3NBcmdzOiBudWxsLAoJCQljb250cm9sVHlwZTogJ3NsaWRlcicsCgkJCWRlZmF1bHRWYWx1ZTogbnVsbCwKCQkJcGFyc2U6ICdzdHJpY3QnCgkJfTsKCQkkLmV4dGVuZCh0aGlzLl9kZWZhdWx0cywgdGhpcy5yZWdpb25hbFsnJ10pOwoJfQoKCSQuZXh0ZW5kKFRpbWVwaWNrZXIucHJvdG90eXBlLCB7CgkJJGlucHV0OiBudWxsLAoJCSRhbHRJbnB1dDogbnVsbCwKCQkkdGltZU9iajogbnVsbCwKCQlpbnN0OiBudWxsLAoJCWhvdXJfc2xpZGVyOiBudWxsLAoJCW1pbnV0ZV9zbGlkZXI6IG51bGwsCgkJc2Vjb25kX3NsaWRlcjogbnVsbCwKCQltaWxsaXNlY19zbGlkZXI6IG51bGwsCgkJdGltZXpvbmVfc2VsZWN0OiBudWxsLAoJCWhvdXI6IDAsCgkJbWludXRlOiAwLAoJCXNlY29uZDogMCwKCQltaWxsaXNlYzogMCwKCQl0aW1lem9uZTogbnVsbCwKCQlkZWZhdWx0VGltZXpvbmU6ICIrMDAwMCIsCgkJaG91ck1pbk9yaWdpbmFsOiBudWxsLAoJCW1pbnV0ZU1pbk9yaWdpbmFsOiBudWxsLAoJCXNlY29uZE1pbk9yaWdpbmFsOiBudWxsLAoJCW1pbGxpc2VjTWluT3JpZ2luYWw6IG51bGwsCgkJaG91ck1heE9yaWdpbmFsOiBudWxsLAoJCW1pbnV0ZU1heE9yaWdpbmFsOiBudWxsLAoJCXNlY29uZE1heE9yaWdpbmFsOiBudWxsLAoJCW1pbGxpc2VjTWF4T3JpZ2luYWw6IG51bGwsCgkJYW1wbTogJycsCgkJZm9ybWF0dGVkRGF0ZTogJycsCgkJZm9ybWF0dGVkVGltZTogJycsCgkJZm9ybWF0dGVkRGF0ZVRpbWU6ICcnLAoJCXRpbWV6b25lTGlzdDogbnVsbCwKCQl1bml0czogWydob3VyJywnbWludXRlJywnc2Vjb25kJywnbWlsbGlzZWMnXSwKCQljb250cm9sOiBudWxsLAoKCQkvKiAKCQkqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhbGwgaW5zdGFuY2VzIG9mIHRoZSB0aW1lIHBpY2tlci4KCQkqIEBwYXJhbSAgc2V0dGluZ3MgIG9iamVjdCAtIHRoZSBuZXcgc2V0dGluZ3MgdG8gdXNlIGFzIGRlZmF1bHRzIChhbm9ueW1vdXMgb2JqZWN0KQoJCSogQHJldHVybiB0aGUgbWFuYWdlciBvYmplY3QKCQkqLwoJCXNldERlZmF1bHRzOiBmdW5jdGlvbihzZXR0aW5ncykgewoJCQlleHRlbmRSZW1vdmUodGhpcy5fZGVmYXVsdHMsIHNldHRpbmdzIHx8IHt9KTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCgkJLyoKCQkqIENyZWF0ZSBhIG5ldyBUaW1lcGlja2VyIGluc3RhbmNlCgkJKi8KCQlfbmV3SW5zdDogZnVuY3Rpb24oJGlucHV0LCBvKSB7CgkJCXZhciB0cF9pbnN0ID0gbmV3IFRpbWVwaWNrZXIoKSwKCQkJCWlubGluZVNldHRpbmdzID0ge30sCiAgICAgICAgICAgICAgICBmbnMgPSB7fSwKCQkgICAgICAgIG92ZXJyaWRlcywgaTsKCgkJCWZvciAodmFyIGF0dHJOYW1lIGluIHRoaXMuX2RlZmF1bHRzKSB7CgkJCQlpZih0aGlzLl9kZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpewoJCQkJCXZhciBhdHRyVmFsdWUgPSAkaW5wdXQuYXR0cigndGltZTonICsgYXR0ck5hbWUpOwoJCQkJCWlmIChhdHRyVmFsdWUpIHsKCQkJCQkJdHJ5IHsKCQkJCQkJCWlubGluZVNldHRpbmdzW2F0dHJOYW1lXSA9IGV2YWwoYXR0clZhbHVlKTsKCQkJCQkJfSBjYXRjaCAoZXJyKSB7CgkJCQkJCQlpbmxpbmVTZXR0aW5nc1thdHRyTmFtZV0gPSBhdHRyVmFsdWU7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkgICAgb3ZlcnJpZGVzID0gewoJCSAgICAgICAgYmVmb3JlU2hvdzogZnVuY3Rpb24gKGlucHV0LCBkcF9pbnN0KSB7CgkJICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbih0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5iZWZvcmVTaG93KSkgewoJCSAgICAgICAgICAgICAgICByZXR1cm4gdHBfaW5zdC5fZGVmYXVsdHMuZXZudHMuYmVmb3JlU2hvdy5jYWxsKCRpbnB1dFswXSwgaW5wdXQsIGRwX2luc3QsIHRwX2luc3QpOwoJCSAgICAgICAgICAgIH0KCQkgICAgICAgIH0sCgkJICAgICAgICBvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24gKHllYXIsIG1vbnRoLCBkcF9pbnN0KSB7CgkJICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lIGFzIHdlbGwgOiB0aGlzIHByZXZlbnRzIHRoZSB0aW1lIGZyb20gZGlzYXBwZWFyaW5nIGZyb20gdGhlICRpbnB1dCBmaWVsZC4KCQkgICAgICAgICAgICB0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShkcF9pbnN0KTsKCQkgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLm9uQ2hhbmdlTW9udGhZZWFyKSkgewoJCSAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5vbkNoYW5nZU1vbnRoWWVhci5jYWxsKCRpbnB1dFswXSwgeWVhciwgbW9udGgsIGRwX2luc3QsIHRwX2luc3QpOwoJCSAgICAgICAgICAgIH0KCQkgICAgICAgIH0sCgkJICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiAoZGF0ZVRleHQsIGRwX2luc3QpIHsKCQkgICAgICAgICAgICBpZiAodHBfaW5zdC50aW1lRGVmaW5lZCA9PT0gdHJ1ZSAmJiAkaW5wdXQudmFsKCkgIT09ICcnKSB7CgkJICAgICAgICAgICAgICAgIHRwX2luc3QuX3VwZGF0ZURhdGVUaW1lKGRwX2luc3QpOwoJCSAgICAgICAgICAgIH0KCQkgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLm9uQ2xvc2UpKSB7CgkJICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLm9uQ2xvc2UuY2FsbCgkaW5wdXRbMF0sIGRhdGVUZXh0LCBkcF9pbnN0LCB0cF9pbnN0KTsKCQkgICAgICAgICAgICB9CgkJICAgICAgICB9CgkJICAgIH07CgkJICAgIGZvciAoaSBpbiBvdmVycmlkZXMpIHsKCQkgICAgICAgIGlmIChvdmVycmlkZXMuaGFzT3duUHJvcGVydHkoaSkpIHsKCQkgICAgICAgICAgICBmbnNbaV0gPSBvW2ldIHx8IG51bGw7CgkJICAgICAgICB9CgkJICAgIH0KCQkgICAgdHBfaW5zdC5fZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgdGhpcy5fZGVmYXVsdHMsIGlubGluZVNldHRpbmdzLCBvLCBvdmVycmlkZXMsIHsKCQkgICAgICAgIGV2bnRzOmZucywKCQkgICAgICAgIHRpbWVwaWNrZXI6IHRwX2luc3QgLy8gYWRkIHRpbWVwaWNrZXIgYXMgYSBwcm9wZXJ0eSBvZiBkYXRlcGlja2VyOiAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAndGltZXBpY2tlcicpOwoJCSAgICB9KTsKCQkJdHBfaW5zdC5hbU5hbWVzID0gJC5tYXAodHBfaW5zdC5fZGVmYXVsdHMuYW1OYW1lcywgZnVuY3Rpb24odmFsKSB7CgkJCQlyZXR1cm4gdmFsLnRvVXBwZXJDYXNlKCk7CgkJCX0pOwoJCQl0cF9pbnN0LnBtTmFtZXMgPSAkLm1hcCh0cF9pbnN0Ll9kZWZhdWx0cy5wbU5hbWVzLCBmdW5jdGlvbih2YWwpIHsKCQkJCXJldHVybiB2YWwudG9VcHBlckNhc2UoKTsKCQkJfSk7CgoJCQkvLyBjb250cm9sVHlwZSBpcyBzdHJpbmcgLSBrZXkgdG8gb3VyIHRoaXMuX2NvbnRyb2xzCgkJCWlmKHR5cGVvZih0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZSkgPT09ICdzdHJpbmcnKXsKCQkJCWlmKCQuZm5bdHBfaW5zdC5fZGVmYXVsdHMuY29udHJvbFR5cGVdID09PSB1bmRlZmluZWQpewoJCQkJCXRwX2luc3QuX2RlZmF1bHRzLmNvbnRyb2xUeXBlID0gJ3NlbGVjdCc7CgkJCQl9CgkJCQl0cF9pbnN0LmNvbnRyb2wgPSB0cF9pbnN0Ll9jb250cm9sc1t0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZV07CgkJCX0KCQkJLy8gY29udHJvbFR5cGUgaXMgYW4gb2JqZWN0IGFuZCBtdXN0IGltcGxlbWVudCBjcmVhdGUsIG9wdGlvbnMsIHZhbHVlIG1ldGhvZHMKCQkJZWxzZXsgCgkJCQl0cF9pbnN0LmNvbnRyb2wgPSB0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZTsKCQkJfQoKCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lTGlzdCA9PT0gbnVsbCkgewoJCQkJdmFyIHRpbWV6b25lTGlzdCA9IFsnLTEyMDAnLCAnLTExMDAnLCAnLTEwMDAnLCAnLTA5MzAnLCAnLTA5MDAnLCAnLTA4MDAnLCAnLTA3MDAnLCAnLTA2MDAnLCAnLTA1MDAnLCAnLTA0MzAnLCAnLTA0MDAnLCAnLTAzMzAnLCAnLTAzMDAnLCAnLTAyMDAnLCAnLTAxMDAnLCAnKzAwMDAnLCAKCQkJCQkJCQkJJyswMTAwJywgJyswMjAwJywgJyswMzAwJywgJyswMzMwJywgJyswNDAwJywgJyswNDMwJywgJyswNTAwJywgJyswNTMwJywgJyswNTQ1JywgJyswNjAwJywgJyswNjMwJywgJyswNzAwJywgJyswODAwJywgJyswODQ1JywgJyswOTAwJywgJyswOTMwJywgCgkJCQkJCQkJCScrMTAwMCcsICcrMTAzMCcsICcrMTEwMCcsICcrMTEzMCcsICcrMTIwMCcsICcrMTI0NScsICcrMTMwMCcsICcrMTQwMCddOwoKCQkJCWlmICh0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZUlzbzg2MDEpIHsKCQkJCQl0aW1lem9uZUxpc3QgPSAkLm1hcCh0aW1lem9uZUxpc3QsIGZ1bmN0aW9uKHZhbCkgewoJCQkJCQlyZXR1cm4gdmFsID09ICcrMDAwMCcgPyAnWicgOiAodmFsLnN1YnN0cmluZygwLCAzKSArICc6JyArIHZhbC5zdWJzdHJpbmcoMykpOwoJCQkJCX0pOwoJCQkJfQoJCQkJdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmVMaXN0ID0gdGltZXpvbmVMaXN0OwoJCQl9CgoJCQl0cF9pbnN0LnRpbWV6b25lID0gdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmU7CgkJCXRwX2luc3QuaG91ciA9IHRwX2luc3QuX2RlZmF1bHRzLmhvdXI7CgkJCXRwX2luc3QubWludXRlID0gdHBfaW5zdC5fZGVmYXVsdHMubWludXRlOwoJCQl0cF9pbnN0LnNlY29uZCA9IHRwX2luc3QuX2RlZmF1bHRzLnNlY29uZDsKCQkJdHBfaW5zdC5taWxsaXNlYyA9IHRwX2luc3QuX2RlZmF1bHRzLm1pbGxpc2VjOwoJCQl0cF9pbnN0LmFtcG0gPSAnJzsKCQkJdHBfaW5zdC4kaW5wdXQgPSAkaW5wdXQ7CgoJCQlpZiAoby5hbHRGaWVsZCkgewoJCQkJdHBfaW5zdC4kYWx0SW5wdXQgPSAkKG8uYWx0RmllbGQpLmNzcyh7CgkJCQkJY3Vyc29yOiAncG9pbnRlcicKCQkJCX0pLmZvY3VzKGZ1bmN0aW9uKCkgewoJCQkJCSRpbnB1dC50cmlnZ2VyKCJmb2N1cyIpOwoJCQkJfSk7CgkJCX0KCgkJCWlmICh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID09PSAwIHx8IHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lID09PSAwKSB7CgkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID0gbmV3IERhdGUoKTsKCQkJfQoJCQlpZiAodHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSA9PT0gMCB8fCB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSA9PT0gMCkgewoJCQkJdHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSA9IG5ldyBEYXRlKCk7CgkJCX0KCgkJCS8vIGRhdGVwaWNrZXIgbmVlZHMgbWluRGF0ZS9tYXhEYXRlLCB0aW1lcGlja2VyIG5lZWRzIG1pbkRhdGVUaW1lL21heERhdGVUaW1lLi4KCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJiB0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlIGluc3RhbmNlb2YgRGF0ZSkgewoJCQkJdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUgPSBuZXcgRGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlLmdldFRpbWUoKSk7CgkJCX0KCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lICE9PSB1bmRlZmluZWQgJiYgdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUgaW5zdGFuY2VvZiBEYXRlKSB7CgkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID0gbmV3IERhdGUodHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUuZ2V0VGltZSgpKTsKCQkJfQoJCQlpZiAodHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSAhPT0gdW5kZWZpbmVkICYmIHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUgaW5zdGFuY2VvZiBEYXRlKSB7CgkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSA9IG5ldyBEYXRlKHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUuZ2V0VGltZSgpKTsKCQkJfQoJCQlpZiAodHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZVRpbWUgIT09IHVuZGVmaW5lZCAmJiB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSBpbnN0YW5jZW9mIERhdGUpIHsKCQkJCXRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUgPSBuZXcgRGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZS5nZXRUaW1lKCkpOwoJCQl9CgkJCXRwX2luc3QuJGlucHV0LmJpbmQoJ2ZvY3VzJywgZnVuY3Rpb24oKSB7CgkJCQl0cF9pbnN0Ll9vbkZvY3VzKCk7CgkJCX0pOwoKCQkJcmV0dXJuIHRwX2luc3Q7CgkJfSwKCgkJLyoKCQkqIGFkZCBvdXIgc2xpZGVycyB0byB0aGUgY2FsZW5kYXIKCQkqLwoJCV9hZGRUaW1lUGlja2VyOiBmdW5jdGlvbihkcF9pbnN0KSB7CgkJCXZhciBjdXJyRFQgPSAodGhpcy4kYWx0SW5wdXQgJiYgdGhpcy5fZGVmYXVsdHMuYWx0RmllbGRUaW1lT25seSkgPyB0aGlzLiRpbnB1dC52YWwoKSArICcgJyArIHRoaXMuJGFsdElucHV0LnZhbCgpIDogdGhpcy4kaW5wdXQudmFsKCk7CgoJCQl0aGlzLnRpbWVEZWZpbmVkID0gdGhpcy5fcGFyc2VUaW1lKGN1cnJEVCk7CgkJCXRoaXMuX2xpbWl0TWluTWF4RGF0ZVRpbWUoZHBfaW5zdCwgZmFsc2UpOwoJCQl0aGlzLl9pbmplY3RUaW1lUGlja2VyKCk7CgkJfSwKCgkJLyoKCQkqIHBhcnNlIHRoZSB0aW1lIHN0cmluZyBmcm9tIGlucHV0IHZhbHVlIG9yIF9zZXRUaW1lCgkJKi8KCQlfcGFyc2VUaW1lOiBmdW5jdGlvbih0aW1lU3RyaW5nLCB3aXRoRGF0ZSkgewoJCQlpZiAoIXRoaXMuaW5zdCkgewoJCQkJdGhpcy5pbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KHRoaXMuJGlucHV0WzBdKTsKCQkJfQoKCQkJaWYgKHdpdGhEYXRlIHx8ICF0aGlzLl9kZWZhdWx0cy50aW1lT25seSkgewoJCQkJdmFyIGRwX2RhdGVGb3JtYXQgPSAkLmRhdGVwaWNrZXIuX2dldCh0aGlzLmluc3QsICdkYXRlRm9ybWF0Jyk7CgkJCQl0cnkgewoJCQkJCXZhciBwYXJzZVJlcyA9IHBhcnNlRGF0ZVRpbWVJbnRlcm5hbChkcF9kYXRlRm9ybWF0LCB0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCAkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0aGlzLmluc3QpLCB0aGlzLl9kZWZhdWx0cyk7CgkJCQkJaWYgKCFwYXJzZVJlcy50aW1lT2JqKSB7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQkJJC5leHRlbmQodGhpcywgcGFyc2VSZXMudGltZU9iaik7CgkJCQl9IGNhdGNoIChlcnIpIHsKCQkJCQkkLmRhdGVwaWNrZXIubG9nKCJFcnJvciBwYXJzaW5nIHRoZSBkYXRlL3RpbWUgc3RyaW5nOiAiICsgZXJyICsKCQkJCQkJCQkJIlxuZGF0ZS90aW1lIHN0cmluZyA9ICIgKyB0aW1lU3RyaW5nICsKCQkJCQkJCQkJIlxudGltZUZvcm1hdCA9ICIgKyB0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0ICsKCQkJCQkJCQkJIlxuZGF0ZUZvcm1hdCA9ICIgKyBkcF9kYXRlRm9ybWF0KTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCXZhciB0aW1lT2JqID0gJC5kYXRlcGlja2VyLnBhcnNlVGltZSh0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCB0aGlzLl9kZWZhdWx0cyk7CgkJCQlpZiAoIXRpbWVPYmopIHsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCQkkLmV4dGVuZCh0aGlzLCB0aW1lT2JqKTsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfSwKCgkJLyoKCQkqIGdlbmVyYXRlIGFuZCBpbmplY3QgaHRtbCBmb3IgdGltZXBpY2tlciBpbnRvIHVpIGRhdGVwaWNrZXIKCQkqLwoJCV9pbmplY3RUaW1lUGlja2VyOiBmdW5jdGlvbigpIHsKCQkJdmFyICRkcCA9IHRoaXMuaW5zdC5kcERpdiwKCQkJCW8gPSB0aGlzLmluc3Quc2V0dGluZ3MsCgkJCQl0cF9pbnN0ID0gdGhpcywKCQkJCWxpdGVtID0gJycsCgkJCQl1aXRlbSA9ICcnLAoJCQkJbWF4ID0ge30sCgkJCQlncmlkU2l6ZSA9IHt9LAoJCQkJc2l6ZSA9IG51bGw7CgoJCQkvLyBQcmV2ZW50IGRpc3BsYXlpbmcgdHdpY2UKCQkJaWYgKCRkcC5maW5kKCJkaXYudWktdGltZXBpY2tlci1kaXYiKS5sZW5ndGggPT09IDAgJiYgby5zaG93VGltZXBpY2tlcikgewoJCQkJdmFyIG5vRGlzcGxheSA9ICcgc3R5bGU9ImRpc3BsYXk6bm9uZTsiJywKCQkJCQlodG1sID0gJzxkaXYgY2xhc3M9InVpLXRpbWVwaWNrZXItZGl2JysgKG8uaXNSVEw/ICcgdWktdGltZXBpY2tlci1ydGwnIDogJycpICsnIj48ZGw+JyArICc8ZHQgY2xhc3M9InVpX3RwaWNrZXJfdGltZV9sYWJlbCInICsgKChvLnNob3dUaW1lKSA/ICcnIDogbm9EaXNwbGF5KSArICc+JyArIG8udGltZVRleHQgKyAnPC9kdD4nICsgCgkJCQkJCQkJJzxkZCBjbGFzcz0idWlfdHBpY2tlcl90aW1lIicgKyAoKG8uc2hvd1RpbWUpID8gJycgOiBub0Rpc3BsYXkpICsgJz48L2RkPic7CgoJCQkJLy8gQ3JlYXRlIHRoZSBtYXJrdXAKCQkJCWZvcih2YXIgaT0wLGw9dGhpcy51bml0cy5sZW5ndGg7IGk8bDsgaSsrKXsKCQkJCQlsaXRlbSA9IHRoaXMudW5pdHNbaV07CgkJCQkJdWl0ZW0gPSBsaXRlbS5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpICsgbGl0ZW0uc3Vic3RyKDEpOwoJCQkJCS8vIEFkZGVkIGJ5IFBldGVyIE1lZGVpcm9zOgoJCQkJCS8vIC0gRmlndXJlIG91dCB3aGF0IHRoZSBob3VyL21pbnV0ZS9zZWNvbmQgbWF4IHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgc3RlcCB2YWx1ZXMuCgkJCQkJLy8gLSBFeGFtcGxlOiBpZiBzdGVwTWludXRlIGlzIDE1LCB0aGVuIG1pbk1heCBpcyA0NS4KCQkJCQltYXhbbGl0ZW1dID0gcGFyc2VJbnQoKG9bbGl0ZW0rJ01heCddIC0gKChvW2xpdGVtKydNYXgnXSAtIG9bbGl0ZW0rJ01pbiddKSAlIG9bJ3N0ZXAnK3VpdGVtXSkpLCAxMCk7CgkJCQkJZ3JpZFNpemVbbGl0ZW1dID0gMDsKCgkJCQkJaHRtbCArPSAnPGR0IGNsYXNzPSJ1aV90cGlja2VyXycrIGxpdGVtICsnX2xhYmVsIicgKyAoKG9bJ3Nob3cnK3VpdGVtXSkgPyAnJyA6IG5vRGlzcGxheSkgKyAnPicgKyBvW2xpdGVtICsnVGV4dCddICsgJzwvZHQ+JyArIAoJCQkJCQkJCSc8ZGQgY2xhc3M9InVpX3RwaWNrZXJfJysgbGl0ZW0gKyciPjxkaXYgY2xhc3M9InVpX3RwaWNrZXJfJysgbGl0ZW0gKydfc2xpZGVyIicgKyAoKG9bJ3Nob3cnK3VpdGVtXSkgPyAnJyA6IG5vRGlzcGxheSkgKyAnPjwvZGl2Pic7CgoJCQkJCWlmIChvWydzaG93Jyt1aXRlbV0gJiYgb1tsaXRlbSsnR3JpZCddID4gMCkgewoJCQkJCQlodG1sICs9ICc8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDFweCI+PHRhYmxlIGNsYXNzPSJ1aS10cGlja2VyLWdyaWQtbGFiZWwiPjx0cj4nOwoKCQkJCQkJaWYobGl0ZW0gPT0gJ2hvdXInKXsKCQkJCQkJCWZvciAodmFyIGggPSBvW2xpdGVtKydNaW4nXTsgaCA8PSBtYXhbbGl0ZW1dOyBoICs9IHBhcnNlSW50KG9bbGl0ZW0rJ0dyaWQnXSwgMTApKSB7CgkJCQkJCQkJZ3JpZFNpemVbbGl0ZW1dKys7CgkJCQkJCQkJdmFyIHRtcGggPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZSh1c2VBbXBtKG8ucGlja2VyVGltZUZvcm1hdCB8fCBvLnRpbWVGb3JtYXQpPyAnaGh0JzonSEgnLCB7aG91cjpofSwgbyk7CQkJCQkJCQkJCgkJCQkJCQkJaHRtbCArPSAnPHRkIGRhdGEtZm9yPSInK2xpdGVtKyciPicgKyB0bXBoICsgJzwvdGQ+JzsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlewoJCQkJCQkJZm9yICh2YXIgbSA9IG9bbGl0ZW0rJ01pbiddOyBtIDw9IG1heFtsaXRlbV07IG0gKz0gcGFyc2VJbnQob1tsaXRlbSsnR3JpZCddLCAxMCkpIHsKCQkJCQkJCQlncmlkU2l6ZVtsaXRlbV0rKzsKCQkJCQkJCQlodG1sICs9ICc8dGQgZGF0YS1mb3I9IicrbGl0ZW0rJyI+JyArICgobSA8IDEwKSA/ICcwJyA6ICcnKSArIG0gKyAnPC90ZD4nOwoJCQkJCQkJfQoJCQkJCQl9CgoJCQkJCQlodG1sICs9ICc8L3RyPjwvdGFibGU+PC9kaXY+JzsKCQkJCQl9CgkJCQkJaHRtbCArPSAnPC9kZD4nOwoJCQkJfQoJCQkJCgkJCQkvLyBUaW1lem9uZQoJCQkJaHRtbCArPSAnPGR0IGNsYXNzPSJ1aV90cGlja2VyX3RpbWV6b25lX2xhYmVsIicgKyAoKG8uc2hvd1RpbWV6b25lKSA/ICcnIDogbm9EaXNwbGF5KSArICc+JyArIG8udGltZXpvbmVUZXh0ICsgJzwvZHQ+JzsKCQkJCWh0bWwgKz0gJzxkZCBjbGFzcz0idWlfdHBpY2tlcl90aW1lem9uZSIgJyArICgoby5zaG93VGltZXpvbmUpID8gJycgOiBub0Rpc3BsYXkpICsgJz48L2RkPic7CgoJCQkJLy8gQ3JlYXRlIHRoZSBlbGVtZW50cyBmcm9tIHN0cmluZwoJCQkJaHRtbCArPSAnPC9kbD48L2Rpdj4nOwoJCQkJdmFyICR0cCA9ICQoaHRtbCk7CgoJCQkJLy8gaWYgd2Ugb25seSB3YW50IHRpbWUgcGlja2VyLi4uCgkJCQlpZiAoby50aW1lT25seSA9PT0gdHJ1ZSkgewoJCQkJCSR0cC5wcmVwZW5kKCc8ZGl2IGNsYXNzPSJ1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsIj4nICsgJzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItdGl0bGUiPicgKyBvLnRpbWVPbmx5VGl0bGUgKyAnPC9kaXY+JyArICc8L2Rpdj4nKTsKCQkJCQkkZHAuZmluZCgnLnVpLWRhdGVwaWNrZXItaGVhZGVyLCAudWktZGF0ZXBpY2tlci1jYWxlbmRhcicpLmhpZGUoKTsKCQkJCX0KCQkJCQoJCQkJLy8gYWRkIHNsaWRlcnMsIGFkanVzdCBncmlkcywgYWRkIGV2ZW50cwoJCQkJZm9yKHZhciBpPTAsbD10cF9pbnN0LnVuaXRzLmxlbmd0aDsgaTxsOyBpKyspewoJCQkJCWxpdGVtID0gdHBfaW5zdC51bml0c1tpXTsKCQkJCQl1aXRlbSA9IGxpdGVtLnN1YnN0cigwLDEpLnRvVXBwZXJDYXNlKCkgKyBsaXRlbS5zdWJzdHIoMSk7CgkJCQkJCgkJCQkJLy8gYWRkIHRoZSBzbGlkZXIKCQkJCQl0cF9pbnN0W2xpdGVtKydfc2xpZGVyJ10gPSB0cF9pbnN0LmNvbnRyb2wuY3JlYXRlKHRwX2luc3QsICR0cC5maW5kKCcudWlfdHBpY2tlcl8nK2xpdGVtKydfc2xpZGVyJyksIGxpdGVtLCB0cF9pbnN0W2xpdGVtXSwgb1tsaXRlbSsnTWluJ10sIG1heFtsaXRlbV0sIG9bJ3N0ZXAnK3VpdGVtXSk7CgoJCQkJCS8vIGFkanVzdCB0aGUgZ3JpZCBhbmQgYWRkIGNsaWNrIGV2ZW50CgkJCQkJaWYgKG9bJ3Nob3cnK3VpdGVtXSAmJiBvW2xpdGVtKydHcmlkJ10gPiAwKSB7CgkJCQkJCXNpemUgPSAxMDAgKiBncmlkU2l6ZVtsaXRlbV0gKiBvW2xpdGVtKydHcmlkJ10gLyAobWF4W2xpdGVtXSAtIG9bbGl0ZW0rJ01pbiddKTsKCQkJCQkJJHRwLmZpbmQoJy51aV90cGlja2VyXycrbGl0ZW0rJyB0YWJsZScpLmNzcyh7CgkJCQkJCQl3aWR0aDogc2l6ZSArICIlIiwKCQkJCQkJCW1hcmdpbkxlZnQ6IG8uaXNSVEw/ICcwJyA6ICgoc2l6ZSAvICgtMiAqIGdyaWRTaXplW2xpdGVtXSkpICsgIiUiKSwKCQkJCQkJCW1hcmdpblJpZ2h0OiBvLmlzUlRMPyAoKHNpemUgLyAoLTIgKiBncmlkU2l6ZVtsaXRlbV0pKSArICIlIikgOiAnMCcsCgkJCQkJCQlib3JkZXJDb2xsYXBzZTogJ2NvbGxhcHNlJwoJCQkJCQl9KS5maW5kKCJ0ZCIpLmNsaWNrKGZ1bmN0aW9uKGUpewoJCQkJCQkJCXZhciAkdCA9ICQodGhpcyksCgkJCQkJCQkJCWggPSAkdC5odG1sKCksCgkJCQkJCQkJCW4gPSBwYXJzZUludChoLnJlcGxhY2UoL1teMC05XS9nKSwxMCksCgkJCQkJCQkJCWFwID0gaC5yZXBsYWNlKC9bXmFwbV0vaWcpLAoJCQkJCQkJCQlmID0gJHQuZGF0YSgnZm9yJyk7IC8vIGxvc2VzIHNjb3BlLCBzbyB3ZSB1c2UgZGF0YS1mb3IKCgkJCQkJCQkJaWYoZiA9PSAnaG91cicpewoJCQkJCQkJCQlpZihhcC5pbmRleE9mKCdwJykgIT09IC0xICYmIG4gPCAxMil7CgkJCQkJCQkJCQluICs9IDEyOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWVsc2V7CgkJCQkJCQkJCQlpZihhcC5pbmRleE9mKCdhJykgIT09IC0xICYmIG4gPT09IDEyKXsKCQkJCQkJCQkJCQluID0gMDsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCQkKCQkJCQkJCQl0cF9pbnN0LmNvbnRyb2wudmFsdWUodHBfaW5zdCwgdHBfaW5zdFtmKydfc2xpZGVyJ10sIGxpdGVtLCBuKTsKCgkJCQkJCQkJdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7CgkJCQkJCQkJdHBfaW5zdC5fb25TZWxlY3RIYW5kbGVyKCk7CgkJCQkJCQl9KQoJCQkJCQkuY3NzKHsKCQkJCQkJCQljdXJzb3I6ICdwb2ludGVyJywKCQkJCQkJCQl3aWR0aDogKDEwMCAvIGdyaWRTaXplW2xpdGVtXSkgKyAnJScsCgkJCQkJCQkJdGV4dEFsaWduOiAnY2VudGVyJywKCQkJCQkJCQlvdmVyZmxvdzogJ2hpZGRlbicKCQkJCQkJCX0pOwoJCQkJCX0gLy8gZW5kIGlmIGdyaWQgPiAwCgkJCQl9IC8vIGVuZCBmb3IgbG9vcAoKCQkJCS8vIEFkZCB0aW1lem9uZSBvcHRpb25zCgkJCQl0aGlzLnRpbWV6b25lX3NlbGVjdCA9ICR0cC5maW5kKCcudWlfdHBpY2tlcl90aW1lem9uZScpLmFwcGVuZCgnPHNlbGVjdD48L3NlbGVjdD4nKS5maW5kKCJzZWxlY3QiKTsKCQkJCSQuZm4uYXBwZW5kLmFwcGx5KHRoaXMudGltZXpvbmVfc2VsZWN0LAoJCQkJJC5tYXAoby50aW1lem9uZUxpc3QsIGZ1bmN0aW9uKHZhbCwgaWR4KSB7CgkJCQkJcmV0dXJuICQoIjxvcHRpb24gLz4iKS52YWwodHlwZW9mIHZhbCA9PSAib2JqZWN0IiA/IHZhbC52YWx1ZSA6IHZhbCkudGV4dCh0eXBlb2YgdmFsID09ICJvYmplY3QiID8gdmFsLmxhYmVsIDogdmFsKTsKCQkJCX0pKTsKCQkJCWlmICh0eXBlb2YodGhpcy50aW1lem9uZSkgIT0gInVuZGVmaW5lZCIgJiYgdGhpcy50aW1lem9uZSAhPT0gbnVsbCAmJiB0aGlzLnRpbWV6b25lICE9PSAiIikgewoJCQkJCXZhciBsb2NhbF9kYXRlID0gbmV3IERhdGUodGhpcy5pbnN0LnNlbGVjdGVkWWVhciwgdGhpcy5pbnN0LnNlbGVjdGVkTW9udGgsIHRoaXMuaW5zdC5zZWxlY3RlZERheSwgMTIpOwoJCQkJCXZhciBsb2NhbF90aW1lem9uZSA9ICQudGltZXBpY2tlci50aW1lWm9uZU9mZnNldFN0cmluZyhsb2NhbF9kYXRlKTsKCQkJCQlpZiAobG9jYWxfdGltZXpvbmUgPT0gdGhpcy50aW1lem9uZSkgewoJCQkJCQlzZWxlY3RMb2NhbFRpbWVab25lKHRwX2luc3QpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXRoaXMudGltZXpvbmVfc2VsZWN0LnZhbCh0aGlzLnRpbWV6b25lKTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCWlmICh0eXBlb2YodGhpcy5ob3VyKSAhPSAidW5kZWZpbmVkIiAmJiB0aGlzLmhvdXIgIT09IG51bGwgJiYgdGhpcy5ob3VyICE9PSAiIikgewoJCQkJCQl0aGlzLnRpbWV6b25lX3NlbGVjdC52YWwoby5kZWZhdWx0VGltZXpvbmUpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXNlbGVjdExvY2FsVGltZVpvbmUodHBfaW5zdCk7CgkJCQkJfQoJCQkJfQoJCQkJdGhpcy50aW1lem9uZV9zZWxlY3QuY2hhbmdlKGZ1bmN0aW9uKCkgewoJCQkJCXRwX2luc3QuX2RlZmF1bHRzLnVzZUxvY2FsVGltZXpvbmUgPSBmYWxzZTsKCQkJCQl0cF9pbnN0Ll9vblRpbWVDaGFuZ2UoKTsKCQkJCX0pOwoJCQkJLy8gRW5kIHRpbWV6b25lIG9wdGlvbnMKCQkJCQoJCQkJLy8gaW5qZWN0IHRpbWVwaWNrZXIgaW50byBkYXRlcGlja2VyCgkJCQl2YXIgJGJ1dHRvblBhbmVsID0gJGRwLmZpbmQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKTsKCQkJCWlmICgkYnV0dG9uUGFuZWwubGVuZ3RoKSB7CgkJCQkJJGJ1dHRvblBhbmVsLmJlZm9yZSgkdHApOwoJCQkJfSBlbHNlIHsKCQkJCQkkZHAuYXBwZW5kKCR0cCk7CgkJCQl9CgoJCQkJdGhpcy4kdGltZU9iaiA9ICR0cC5maW5kKCcudWlfdHBpY2tlcl90aW1lJyk7CgoJCQkJaWYgKHRoaXMuaW5zdCAhPT0gbnVsbCkgewoJCQkJCXZhciB0aW1lRGVmaW5lZCA9IHRoaXMudGltZURlZmluZWQ7CgkJCQkJdGhpcy5fb25UaW1lQ2hhbmdlKCk7CgkJCQkJdGhpcy50aW1lRGVmaW5lZCA9IHRpbWVEZWZpbmVkOwoJCQkJfQoKCQkJCS8vIHNsaWRlQWNjZXNzIGludGVncmF0aW9uOiBodHRwOi8vdHJlbnRyaWNoYXJkc29uLmNvbS8yMDExLzExLzExL2pxdWVyeS11aS1zbGlkZXJzLWFuZC10b3VjaC1hY2Nlc3NpYmlsaXR5LwoJCQkJaWYgKHRoaXMuX2RlZmF1bHRzLmFkZFNsaWRlckFjY2VzcykgewoJCQkJCXZhciBzbGlkZXJBY2Nlc3NBcmdzID0gdGhpcy5fZGVmYXVsdHMuc2xpZGVyQWNjZXNzQXJncywKCQkJCQkJcnRsID0gdGhpcy5fZGVmYXVsdHMuaXNSVEw7CgkJCQkJc2xpZGVyQWNjZXNzQXJncy5pc1JUTCA9IHJ0bDsKCQkJCQkJCgkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsgLy8gZml4IGZvciBpbmxpbmUgbW9kZQoJCQkJCQlpZiAoJHRwLmZpbmQoJy51aS1zbGlkZXItYWNjZXNzJykubGVuZ3RoID09PSAwKSB7CgkJCQkJCQkkdHAuZmluZCgnLnVpLXNsaWRlcjp2aXNpYmxlJykuc2xpZGVyQWNjZXNzKHNsaWRlckFjY2Vzc0FyZ3MpOwoKCQkJCQkJCS8vIGZpeCBhbnkgZ3JpZHMgc2luY2Ugc2xpZGVycyBhcmUgc2hvcnRlcgoJCQkJCQkJdmFyIHNsaWRlckFjY2Vzc1dpZHRoID0gJHRwLmZpbmQoJy51aS1zbGlkZXItYWNjZXNzOmVxKDApJykub3V0ZXJXaWR0aCh0cnVlKTsKCQkJCQkJCWlmIChzbGlkZXJBY2Nlc3NXaWR0aCkgewoJCQkJCQkJCSR0cC5maW5kKCd0YWJsZTp2aXNpYmxlJykuZWFjaChmdW5jdGlvbigpIHsKCQkJCQkJCQkJdmFyICRnID0gJCh0aGlzKSwKCQkJCQkJCQkJCW9sZFdpZHRoID0gJGcub3V0ZXJXaWR0aCgpLAoJCQkJCQkJCQkJb2xkTWFyZ2luTGVmdCA9ICRnLmNzcyhydGw/ICdtYXJnaW5SaWdodCc6J21hcmdpbkxlZnQnKS50b1N0cmluZygpLnJlcGxhY2UoJyUnLCAnJyksCgkJCQkJCQkJCQluZXdXaWR0aCA9IG9sZFdpZHRoIC0gc2xpZGVyQWNjZXNzV2lkdGgsCgkJCQkJCQkJCQluZXdNYXJnaW5MZWZ0ID0gKChvbGRNYXJnaW5MZWZ0ICogbmV3V2lkdGgpIC8gb2xkV2lkdGgpICsgJyUnLAoJCQkJCQkJCQkJY3NzID0geyB3aWR0aDogbmV3V2lkdGgsIG1hcmdpblJpZ2h0OiAwLCBtYXJnaW5MZWZ0OiAwIH07CgkJCQkJCQkJCWNzc1tydGw/ICdtYXJnaW5SaWdodCc6J21hcmdpbkxlZnQnXSA9IG5ld01hcmdpbkxlZnQ7CgkJCQkJCQkJCSRnLmNzcyhjc3MpOwoJCQkJCQkJCX0pOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSwgMTApOwoJCQkJfQoJCQkJLy8gZW5kIHNsaWRlQWNjZXNzIGludGVncmF0aW9uCgoJCQl9CgkJfSwKCgkJLyoKCQkqIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gbGltaXQgdGhlIGFiaWxpdHkgdG8gZ28gb3V0c2lkZSB0aGUKCQkqIG1pbi9tYXggZGF0ZSByYW5nZQoJCSovCgkJX2xpbWl0TWluTWF4RGF0ZVRpbWU6IGZ1bmN0aW9uKGRwX2luc3QsIGFkanVzdFNsaWRlcnMpIHsKCQkJdmFyIG8gPSB0aGlzLl9kZWZhdWx0cywKCQkJCWRwX2RhdGUgPSBuZXcgRGF0ZShkcF9pbnN0LnNlbGVjdGVkWWVhciwgZHBfaW5zdC5zZWxlY3RlZE1vbnRoLCBkcF9pbnN0LnNlbGVjdGVkRGF5KTsKCgkJCWlmICghdGhpcy5fZGVmYXVsdHMuc2hvd1RpbWVwaWNrZXIpIHsKCQkJCXJldHVybjsKCQkJfSAvLyBObyB0aW1lIHNvIG5vdGhpbmcgdG8gY2hlY2sgaGVyZQoKCQkJaWYgKCQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpICE9PSBudWxsICYmICQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpICE9PSB1bmRlZmluZWQgJiYgZHBfZGF0ZSkgewoJCQkJdmFyIG1pbkRhdGVUaW1lID0gJC5kYXRlcGlja2VyLl9nZXQoZHBfaW5zdCwgJ21pbkRhdGVUaW1lJyksCgkJCQkJbWluRGF0ZVRpbWVEYXRlID0gbmV3IERhdGUobWluRGF0ZVRpbWUuZ2V0RnVsbFllYXIoKSwgbWluRGF0ZVRpbWUuZ2V0TW9udGgoKSwgbWluRGF0ZVRpbWUuZ2V0RGF0ZSgpLCAwLCAwLCAwLCAwKTsKCgkJCQlpZiAodGhpcy5ob3VyTWluT3JpZ2luYWwgPT09IG51bGwgfHwgdGhpcy5taW51dGVNaW5PcmlnaW5hbCA9PT0gbnVsbCB8fCB0aGlzLnNlY29uZE1pbk9yaWdpbmFsID09PSBudWxsIHx8IHRoaXMubWlsbGlzZWNNaW5PcmlnaW5hbCA9PT0gbnVsbCkgewoJCQkJCXRoaXMuaG91ck1pbk9yaWdpbmFsID0gby5ob3VyTWluOwoJCQkJCXRoaXMubWludXRlTWluT3JpZ2luYWwgPSBvLm1pbnV0ZU1pbjsKCQkJCQl0aGlzLnNlY29uZE1pbk9yaWdpbmFsID0gby5zZWNvbmRNaW47CgkJCQkJdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsID0gby5taWxsaXNlY01pbjsKCQkJCX0KCgkJCQlpZiAoZHBfaW5zdC5zZXR0aW5ncy50aW1lT25seSB8fCBtaW5EYXRlVGltZURhdGUuZ2V0VGltZSgpID09IGRwX2RhdGUuZ2V0VGltZSgpKSB7CgkJCQkJdGhpcy5fZGVmYXVsdHMuaG91ck1pbiA9IG1pbkRhdGVUaW1lLmdldEhvdXJzKCk7CgkJCQkJaWYgKHRoaXMuaG91ciA8PSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluKSB7CgkJCQkJCXRoaXMuaG91ciA9IHRoaXMuX2RlZmF1bHRzLmhvdXJNaW47CgkJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbiA9IG1pbkRhdGVUaW1lLmdldE1pbnV0ZXMoKTsKCQkJCQkJaWYgKHRoaXMubWludXRlIDw9IHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbikgewoJCQkJCQkJdGhpcy5taW51dGUgPSB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW47CgkJCQkJCQl0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4gPSBtaW5EYXRlVGltZS5nZXRTZWNvbmRzKCk7CgkJCQkJCQlpZiAodGhpcy5zZWNvbmQgPD0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluKSB7CgkJCQkJCQkJdGhpcy5zZWNvbmQgPSB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW47CgkJCQkJCQkJdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNaW4gPSBtaW5EYXRlVGltZS5nZXRNaWxsaXNlY29uZHMoKTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJaWYgKHRoaXMubWlsbGlzZWMgPCB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01pbikgewoJCQkJCQkJCQl0aGlzLm1pbGxpc2VjID0gdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNaW47CgkJCQkJCQkJfQoJCQkJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOwoJCQkJCQkJfQoJCQkJCQl9IGVsc2UgewoJCQkJCQkJdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluID0gdGhpcy5zZWNvbmRNaW5PcmlnaW5hbDsKCQkJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOwoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJdGhpcy5fZGVmYXVsdHMubWludXRlTWluID0gdGhpcy5taW51dGVNaW5PcmlnaW5hbDsKCQkJCQkJdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluID0gdGhpcy5zZWNvbmRNaW5PcmlnaW5hbDsKCQkJCQkJdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNaW4gPSB0aGlzLm1pbGxpc2VjTWluT3JpZ2luYWw7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQl0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gdGhpcy5ob3VyTWluT3JpZ2luYWw7CgkJCQkJdGhpcy5fZGVmYXVsdHMubWludXRlTWluID0gdGhpcy5taW51dGVNaW5PcmlnaW5hbDsKCQkJCQl0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4gPSB0aGlzLnNlY29uZE1pbk9yaWdpbmFsOwoJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOwoJCQkJfQoJCQl9CgoJCQlpZiAoJC5kYXRlcGlja2VyLl9nZXQoZHBfaW5zdCwgJ21heERhdGVUaW1lJykgIT09IG51bGwgJiYgJC5kYXRlcGlja2VyLl9nZXQoZHBfaW5zdCwgJ21heERhdGVUaW1lJykgIT09IHVuZGVmaW5lZCAmJiBkcF9kYXRlKSB7CgkJCQl2YXIgbWF4RGF0ZVRpbWUgPSAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnbWF4RGF0ZVRpbWUnKSwKCQkJCQltYXhEYXRlVGltZURhdGUgPSBuZXcgRGF0ZShtYXhEYXRlVGltZS5nZXRGdWxsWWVhcigpLCBtYXhEYXRlVGltZS5nZXRNb250aCgpLCBtYXhEYXRlVGltZS5nZXREYXRlKCksIDAsIDAsIDAsIDApOwoKCQkJCWlmICh0aGlzLmhvdXJNYXhPcmlnaW5hbCA9PT0gbnVsbCB8fCB0aGlzLm1pbnV0ZU1heE9yaWdpbmFsID09PSBudWxsIHx8IHRoaXMuc2Vjb25kTWF4T3JpZ2luYWwgPT09IG51bGwpIHsKCQkJCQl0aGlzLmhvdXJNYXhPcmlnaW5hbCA9IG8uaG91ck1heDsKCQkJCQl0aGlzLm1pbnV0ZU1heE9yaWdpbmFsID0gby5taW51dGVNYXg7CgkJCQkJdGhpcy5zZWNvbmRNYXhPcmlnaW5hbCA9IG8uc2Vjb25kTWF4OwoJCQkJCXRoaXMubWlsbGlzZWNNYXhPcmlnaW5hbCA9IG8ubWlsbGlzZWNNYXg7CgkJCQl9CgoJCQkJaWYgKGRwX2luc3Quc2V0dGluZ3MudGltZU9ubHkgfHwgbWF4RGF0ZVRpbWVEYXRlLmdldFRpbWUoKSA9PSBkcF9kYXRlLmdldFRpbWUoKSkgewoJCQkJCXRoaXMuX2RlZmF1bHRzLmhvdXJNYXggPSBtYXhEYXRlVGltZS5nZXRIb3VycygpOwoJCQkJCWlmICh0aGlzLmhvdXIgPj0gdGhpcy5fZGVmYXVsdHMuaG91ck1heCkgewoJCQkJCQl0aGlzLmhvdXIgPSB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4OwoJCQkJCQl0aGlzLl9kZWZhdWx0cy5taW51dGVNYXggPSBtYXhEYXRlVGltZS5nZXRNaW51dGVzKCk7CgkJCQkJCWlmICh0aGlzLm1pbnV0ZSA+PSB0aGlzLl9kZWZhdWx0cy5taW51dGVNYXgpIHsKCQkJCQkJCXRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWF4OwoJCQkJCQkJdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4ID0gbWF4RGF0ZVRpbWUuZ2V0U2Vjb25kcygpOwoJCQkJCQl9IGVsc2UgaWYgKHRoaXMuc2Vjb25kID49IHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCkgewoJCQkJCQkJdGhpcy5zZWNvbmQgPSB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNYXg7CgkJCQkJCQl0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCA9IG1heERhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJaWYgKHRoaXMubWlsbGlzZWMgPiB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCkgewoJCQkJCQkJCXRoaXMubWlsbGlzZWMgPSB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heDsKCQkJCQkJCX0KCQkJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOwoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGhpcy5taW51dGVNYXhPcmlnaW5hbDsKCQkJCQkJdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4ID0gdGhpcy5zZWNvbmRNYXhPcmlnaW5hbDsKCQkJCQkJdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNYXggPSB0aGlzLm1pbGxpc2VjTWF4T3JpZ2luYWw7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQl0aGlzLl9kZWZhdWx0cy5ob3VyTWF4ID0gdGhpcy5ob3VyTWF4T3JpZ2luYWw7CgkJCQkJdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGhpcy5taW51dGVNYXhPcmlnaW5hbDsKCQkJCQl0aGlzLl9kZWZhdWx0cy5zZWNvbmRNYXggPSB0aGlzLnNlY29uZE1heE9yaWdpbmFsOwoJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOwoJCQkJfQoJCQl9CgoJCQlpZiAoYWRqdXN0U2xpZGVycyAhPT0gdW5kZWZpbmVkICYmIGFkanVzdFNsaWRlcnMgPT09IHRydWUpIHsKCQkJCXZhciBob3VyTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLmhvdXJNYXggLSAoKHRoaXMuX2RlZmF1bHRzLmhvdXJNYXggLSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBIb3VyKSksIDEwKSwKCQkJCQltaW5NYXggPSBwYXJzZUludCgodGhpcy5fZGVmYXVsdHMubWludXRlTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5taW51dGVNYXggLSB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4pICUgdGhpcy5fZGVmYXVsdHMuc3RlcE1pbnV0ZSkpLCAxMCksCgkJCQkJc2VjTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCAtICgodGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4IC0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBTZWNvbmQpKSwgMTApLAoJCQkJCW1pbGxpc2VjTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCAtIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBNaWxsaXNlYykpLCAxMCk7CgoJCQkJaWYgKHRoaXMuaG91cl9zbGlkZXIpIHsKCQkJCQl0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLmhvdXJfc2xpZGVyLCAnaG91cicsIHsgbWluOiB0aGlzLl9kZWZhdWx0cy5ob3VyTWluLCBtYXg6IGhvdXJNYXggfSk7CgkJCQkJdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMuaG91cl9zbGlkZXIsICdob3VyJywgdGhpcy5ob3VyKTsKCQkJCX0KCQkJCWlmICh0aGlzLm1pbnV0ZV9zbGlkZXIpIHsKCQkJCQl0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pbnV0ZV9zbGlkZXIsICdtaW51dGUnLCB7IG1pbjogdGhpcy5fZGVmYXVsdHMubWludXRlTWluLCBtYXg6IG1pbk1heCB9KTsKCQkJCQl0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5taW51dGVfc2xpZGVyLCAnbWludXRlJywgdGhpcy5taW51dGUpOwoJCQkJfQoJCQkJaWYgKHRoaXMuc2Vjb25kX3NsaWRlcikgewoJCQkJCXRoaXMuY29udHJvbC5vcHRpb25zKHRoaXMsIHRoaXMuc2Vjb25kX3NsaWRlciwgJ3NlY29uZCcsIHsgbWluOiB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4sIG1heDogc2VjTWF4IH0pOwoJCQkJCXRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLnNlY29uZF9zbGlkZXIsICdzZWNvbmQnLCB0aGlzLnNlY29uZCk7CgkJCQl9CgkJCQlpZiAodGhpcy5taWxsaXNlY19zbGlkZXIpIHsKCQkJCQl0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pbGxpc2VjX3NsaWRlciwgJ21pbGxpc2VjJywgeyBtaW46IHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluLCBtYXg6IG1pbGxpc2VjTWF4IH0pOwoJCQkJCXRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pbGxpc2VjX3NsaWRlciwgJ21pbGxpc2VjJywgdGhpcy5taWxsaXNlYyk7CgkJCQl9CgkJCX0KCgkJfSwKCgkJLyoKCQkqIHdoZW4gYSBzbGlkZXIgbW92ZXMsIHNldCB0aGUgaW50ZXJuYWwgdGltZS4uLgoJCSogb24gdGltZSBjaGFuZ2UgaXMgYWxzbyBjYWxsZWQgd2hlbiB0aGUgdGltZSBpcyB1cGRhdGVkIGluIHRoZSB0ZXh0IGZpZWxkCgkJKi8KCQlfb25UaW1lQ2hhbmdlOiBmdW5jdGlvbigpIHsKCQkJdmFyIGhvdXIgPSAodGhpcy5ob3VyX3NsaWRlcikgPyB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5ob3VyX3NsaWRlciwgJ2hvdXInKSA6IGZhbHNlLAoJCQkJbWludXRlID0gKHRoaXMubWludXRlX3NsaWRlcikgPyB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5taW51dGVfc2xpZGVyLCAnbWludXRlJykgOiBmYWxzZSwKCQkJCXNlY29uZCA9ICh0aGlzLnNlY29uZF9zbGlkZXIpID8gdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMuc2Vjb25kX3NsaWRlciwgJ3NlY29uZCcpIDogZmFsc2UsCgkJCQltaWxsaXNlYyA9ICh0aGlzLm1pbGxpc2VjX3NsaWRlcikgPyB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5taWxsaXNlY19zbGlkZXIsICdtaWxsaXNlYycpIDogZmFsc2UsCgkJCQl0aW1lem9uZSA9ICh0aGlzLnRpbWV6b25lX3NlbGVjdCkgPyB0aGlzLnRpbWV6b25lX3NlbGVjdC52YWwoKSA6IGZhbHNlLAoJCQkJbyA9IHRoaXMuX2RlZmF1bHRzLAoJCQkJcGlja2VyVGltZUZvcm1hdCA9IG8ucGlja2VyVGltZUZvcm1hdCB8fCBvLnRpbWVGb3JtYXQsCgkJCQlwaWNrZXJUaW1lU3VmZml4ID0gby5waWNrZXJUaW1lU3VmZml4IHx8IG8udGltZVN1ZmZpeDsKCgkJCWlmICh0eXBlb2YoaG91cikgPT0gJ29iamVjdCcpIHsKCQkJCWhvdXIgPSBmYWxzZTsKCQkJfQoJCQlpZiAodHlwZW9mKG1pbnV0ZSkgPT0gJ29iamVjdCcpIHsKCQkJCW1pbnV0ZSA9IGZhbHNlOwoJCQl9CgkJCWlmICh0eXBlb2Yoc2Vjb25kKSA9PSAnb2JqZWN0JykgewoJCQkJc2Vjb25kID0gZmFsc2U7CgkJCX0KCQkJaWYgKHR5cGVvZihtaWxsaXNlYykgPT0gJ29iamVjdCcpIHsKCQkJCW1pbGxpc2VjID0gZmFsc2U7CgkJCX0KCQkJaWYgKHR5cGVvZih0aW1lem9uZSkgPT0gJ29iamVjdCcpIHsKCQkJCXRpbWV6b25lID0gZmFsc2U7CgkJCX0KCgkJCWlmIChob3VyICE9PSBmYWxzZSkgewoJCQkJaG91ciA9IHBhcnNlSW50KGhvdXIsIDEwKTsKCQkJfQoJCQlpZiAobWludXRlICE9PSBmYWxzZSkgewoJCQkJbWludXRlID0gcGFyc2VJbnQobWludXRlLCAxMCk7CgkJCX0KCQkJaWYgKHNlY29uZCAhPT0gZmFsc2UpIHsKCQkJCXNlY29uZCA9IHBhcnNlSW50KHNlY29uZCwgMTApOwoJCQl9CgkJCWlmIChtaWxsaXNlYyAhPT0gZmFsc2UpIHsKCQkJCW1pbGxpc2VjID0gcGFyc2VJbnQobWlsbGlzZWMsIDEwKTsKCQkJfQoKCQkJdmFyIGFtcG0gPSBvW2hvdXIgPCAxMiA/ICdhbU5hbWVzJyA6ICdwbU5hbWVzJ11bMF07CgoJCQkvLyBJZiB0aGUgdXBkYXRlIHdhcyBkb25lIGluIHRoZSBpbnB1dCBmaWVsZCwgdGhlIGlucHV0IGZpZWxkIHNob3VsZCBub3QgYmUgdXBkYXRlZC4KCQkJLy8gSWYgdGhlIHVwZGF0ZSB3YXMgZG9uZSB1c2luZyB0aGUgc2xpZGVycywgdXBkYXRlIHRoZSBpbnB1dCBmaWVsZC4KCQkJdmFyIGhhc0NoYW5nZWQgPSAoaG91ciAhPSB0aGlzLmhvdXIgfHwgbWludXRlICE9IHRoaXMubWludXRlIHx8IHNlY29uZCAhPSB0aGlzLnNlY29uZCB8fCBtaWxsaXNlYyAhPSB0aGlzLm1pbGxpc2VjIAoJCQkJCQkJCXx8ICh0aGlzLmFtcG0ubGVuZ3RoID4gMCAmJiAoaG91ciA8IDEyKSAhPSAoJC5pbkFycmF5KHRoaXMuYW1wbS50b1VwcGVyQ2FzZSgpLCB0aGlzLmFtTmFtZXMpICE9PSAtMSkpIAoJCQkJCQkJCXx8ICgodGhpcy50aW1lem9uZSA9PT0gbnVsbCAmJiB0aW1lem9uZSAhPSB0aGlzLmRlZmF1bHRUaW1lem9uZSkgfHwgKHRoaXMudGltZXpvbmUgIT09IG51bGwgJiYgdGltZXpvbmUgIT0gdGhpcy50aW1lem9uZSkpKTsKCgkJCWlmIChoYXNDaGFuZ2VkKSB7CgoJCQkJaWYgKGhvdXIgIT09IGZhbHNlKSB7CgkJCQkJdGhpcy5ob3VyID0gaG91cjsKCQkJCX0KCQkJCWlmIChtaW51dGUgIT09IGZhbHNlKSB7CgkJCQkJdGhpcy5taW51dGUgPSBtaW51dGU7CgkJCQl9CgkJCQlpZiAoc2Vjb25kICE9PSBmYWxzZSkgewoJCQkJCXRoaXMuc2Vjb25kID0gc2Vjb25kOwoJCQkJfQoJCQkJaWYgKG1pbGxpc2VjICE9PSBmYWxzZSkgewoJCQkJCXRoaXMubWlsbGlzZWMgPSBtaWxsaXNlYzsKCQkJCX0KCQkJCWlmICh0aW1lem9uZSAhPT0gZmFsc2UpIHsKCQkJCQl0aGlzLnRpbWV6b25lID0gdGltZXpvbmU7CgkJCQl9CgoJCQkJaWYgKCF0aGlzLmluc3QpIHsKCQkJCQl0aGlzLmluc3QgPSAkLmRhdGVwaWNrZXIuX2dldEluc3QodGhpcy4kaW5wdXRbMF0pOwoJCQkJfQoKCQkJCXRoaXMuX2xpbWl0TWluTWF4RGF0ZVRpbWUodGhpcy5pbnN0LCB0cnVlKTsKCQkJfQoJCQlpZiAodXNlQW1wbShvLnRpbWVGb3JtYXQpKSB7CgkJCQl0aGlzLmFtcG0gPSBhbXBtOwoJCQl9CgoJCQkvLyBVcGRhdGVzIHRoZSB0aW1lIHdpdGhpbiB0aGUgdGltZXBpY2tlcgoJCQl0aGlzLmZvcm1hdHRlZFRpbWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZShvLnRpbWVGb3JtYXQsIHRoaXMsIG8pOwoJCQlpZiAodGhpcy4kdGltZU9iaikgewoJCQkJaWYocGlja2VyVGltZUZvcm1hdCA9PT0gby50aW1lRm9ybWF0KXsKCQkJCQl0aGlzLiR0aW1lT2JqLnRleHQodGhpcy5mb3JtYXR0ZWRUaW1lICsgcGlja2VyVGltZVN1ZmZpeCk7CgkJCQl9CgkJCQllbHNlewoJCQkJCXRoaXMuJHRpbWVPYmoudGV4dCgkLmRhdGVwaWNrZXIuZm9ybWF0VGltZShwaWNrZXJUaW1lRm9ybWF0LCB0aGlzLCBvKSArIHBpY2tlclRpbWVTdWZmaXgpOwoJCQkJfQoJCQl9CgoJCQl0aGlzLnRpbWVEZWZpbmVkID0gdHJ1ZTsKCQkJaWYgKGhhc0NoYW5nZWQpIHsKCQkJCXRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7CgkJCX0KCQl9LAoKCQkvKgoJCSogY2FsbCBjdXN0b20gb25TZWxlY3QuCgkJKiBiaW5kIHRvIHNsaWRlcnMgc2xpZGVzdG9wLCBhbmQgZ3JpZCBjbGljay4KCQkqLwoJCV9vblNlbGVjdEhhbmRsZXI6IGZ1bmN0aW9uKCkgewoJCQl2YXIgb25TZWxlY3QgPSB0aGlzLl9kZWZhdWx0cy5vblNlbGVjdCB8fCB0aGlzLmluc3Quc2V0dGluZ3Mub25TZWxlY3Q7CgkJCXZhciBpbnB1dEVsID0gdGhpcy4kaW5wdXQgPyB0aGlzLiRpbnB1dFswXSA6IG51bGw7CgkJCWlmIChvblNlbGVjdCAmJiBpbnB1dEVsKSB7CgkJCQlvblNlbGVjdC5hcHBseShpbnB1dEVsLCBbdGhpcy5mb3JtYXR0ZWREYXRlVGltZSwgdGhpc10pOwoJCQl9CgkJfSwKCgkJLyoKCQkqIHVwZGF0ZSBvdXIgaW5wdXQgd2l0aCB0aGUgbmV3IGRhdGUgdGltZS4uCgkJKi8KCQlfdXBkYXRlRGF0ZVRpbWU6IGZ1bmN0aW9uKGRwX2luc3QpIHsKCQkJZHBfaW5zdCA9IHRoaXMuaW5zdCB8fCBkcF9pbnN0OwoJCQl2YXIgZHQgPSAkLmRhdGVwaWNrZXIuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGRwX2luc3Quc2VsZWN0ZWRZZWFyLCBkcF9pbnN0LnNlbGVjdGVkTW9udGgsIGRwX2luc3Quc2VsZWN0ZWREYXkpKSwKCQkJCWRhdGVGbXQgPSAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnZGF0ZUZvcm1hdCcpLAoJCQkJZm9ybWF0Q2ZnID0gJC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoZHBfaW5zdCksCgkJCQl0aW1lQXZhaWxhYmxlID0gZHQgIT09IG51bGwgJiYgdGhpcy50aW1lRGVmaW5lZDsKCQkJdGhpcy5mb3JtYXR0ZWREYXRlID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoZGF0ZUZtdCwgKGR0ID09PSBudWxsID8gbmV3IERhdGUoKSA6IGR0KSwgZm9ybWF0Q2ZnKTsKCQkJdmFyIGZvcm1hdHRlZERhdGVUaW1lID0gdGhpcy5mb3JtYXR0ZWREYXRlOwoKCQkJLyoKCQkJKiByZW1vdmUgZm9sbG93aW5nIGxpbmVzIHRvIGZvcmNlIGV2ZXJ5IGNoYW5nZXMgaW4gZGF0ZSBwaWNrZXIgdG8gY2hhbmdlIHRoZSBpbnB1dCB2YWx1ZQoJCQkqIEJ1ZyBkZXNjcmlwdGlvbnM6IHdoZW4gYW4gaW5wdXQgZmllbGQgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYW5kIGNsaWNrIG9uIHRoZSBmaWVsZCB0byBwb3AgdXAgdGhlIGRhdGUgcGlja2VyLiAKCQkJKiBJZiB0aGUgdXNlciBtYW51YWxseSBlbXB0eSB0aGUgdmFsdWUgaW4gdGhlIGlucHV0IGZpZWxkLCB0aGUgZGF0ZSBwaWNrZXIgd2lsbCBuZXZlciBjaGFuZ2Ugc2VsZWN0ZWQgdmFsdWUuCgkJCSovCgkJCS8vaWYgKGRwX2luc3QubGFzdFZhbCAhPT0gdW5kZWZpbmVkICYmIChkcF9pbnN0Lmxhc3RWYWwubGVuZ3RoID4gMCAmJiB0aGlzLiRpbnB1dC52YWwoKS5sZW5ndGggPT09IDApKSB7CgkJCS8vCXJldHVybjsKCQkJLy99CgoJCQlpZiAodGhpcy5fZGVmYXVsdHMudGltZU9ubHkgPT09IHRydWUpIHsKCQkJCWZvcm1hdHRlZERhdGVUaW1lID0gdGhpcy5mb3JtYXR0ZWRUaW1lOwoJCQl9IGVsc2UgaWYgKHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5ICE9PSB0cnVlICYmICh0aGlzLl9kZWZhdWx0cy5hbHdheXNTZXRUaW1lIHx8IHRpbWVBdmFpbGFibGUpKSB7CgkJCQlmb3JtYXR0ZWREYXRlVGltZSArPSB0aGlzLl9kZWZhdWx0cy5zZXBhcmF0b3IgKyB0aGlzLmZvcm1hdHRlZFRpbWUgKyB0aGlzLl9kZWZhdWx0cy50aW1lU3VmZml4OwoJCQl9CgoJCQl0aGlzLmZvcm1hdHRlZERhdGVUaW1lID0gZm9ybWF0dGVkRGF0ZVRpbWU7CgoJCQlpZiAoIXRoaXMuX2RlZmF1bHRzLnNob3dUaW1lcGlja2VyKSB7CgkJCQl0aGlzLiRpbnB1dC52YWwodGhpcy5mb3JtYXR0ZWREYXRlKTsKCQkJfSBlbHNlIGlmICh0aGlzLiRhbHRJbnB1dCAmJiB0aGlzLl9kZWZhdWx0cy5hbHRGaWVsZFRpbWVPbmx5ID09PSB0cnVlKSB7CgkJCQl0aGlzLiRhbHRJbnB1dC52YWwodGhpcy5mb3JtYXR0ZWRUaW1lKTsKCQkJCXRoaXMuJGlucHV0LnZhbCh0aGlzLmZvcm1hdHRlZERhdGUpOwoJCQl9IGVsc2UgaWYgKHRoaXMuJGFsdElucHV0KSB7CgkJCQl0aGlzLiRpbnB1dC52YWwoZm9ybWF0dGVkRGF0ZVRpbWUpOwoJCQkJdmFyIGFsdEZvcm1hdHRlZERhdGVUaW1lID0gJycsCgkJCQkJYWx0U2VwYXJhdG9yID0gdGhpcy5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yID8gdGhpcy5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yIDogdGhpcy5fZGVmYXVsdHMuc2VwYXJhdG9yLAoJCQkJCWFsdFRpbWVTdWZmaXggPSB0aGlzLl9kZWZhdWx0cy5hbHRUaW1lU3VmZml4ID8gdGhpcy5fZGVmYXVsdHMuYWx0VGltZVN1ZmZpeCA6IHRoaXMuX2RlZmF1bHRzLnRpbWVTdWZmaXg7CgoJCQkJaWYgKHRoaXMuX2RlZmF1bHRzLmFsdEZvcm1hdCkgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSh0aGlzLl9kZWZhdWx0cy5hbHRGb3JtYXQsIChkdCA9PT0gbnVsbCA/IG5ldyBEYXRlKCkgOiBkdCksIGZvcm1hdENmZyk7CgkJCQllbHNlIGFsdEZvcm1hdHRlZERhdGVUaW1lID0gdGhpcy5mb3JtYXR0ZWREYXRlOwoJCQkJaWYgKGFsdEZvcm1hdHRlZERhdGVUaW1lKSBhbHRGb3JtYXR0ZWREYXRlVGltZSArPSBhbHRTZXBhcmF0b3I7CgkJCQlpZiAodGhpcy5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCkgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgKz0gJC5kYXRlcGlja2VyLmZvcm1hdFRpbWUodGhpcy5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCwgdGhpcywgdGhpcy5fZGVmYXVsdHMpICsgYWx0VGltZVN1ZmZpeDsKCQkJCWVsc2UgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgKz0gdGhpcy5mb3JtYXR0ZWRUaW1lICsgYWx0VGltZVN1ZmZpeDsKCQkJCXRoaXMuJGFsdElucHV0LnZhbChhbHRGb3JtYXR0ZWREYXRlVGltZSk7CgkJCX0gZWxzZSB7CgkJCQl0aGlzLiRpbnB1dC52YWwoZm9ybWF0dGVkRGF0ZVRpbWUpOwoJCQl9CgoJCQl0aGlzLiRpbnB1dC50cmlnZ2VyKCJjaGFuZ2UiKTsKCQl9LAoKCQlfb25Gb2N1czogZnVuY3Rpb24oKSB7CgkJCWlmICghdGhpcy4kaW5wdXQudmFsKCkgJiYgdGhpcy5fZGVmYXVsdHMuZGVmYXVsdFZhbHVlKSB7CgkJCQl0aGlzLiRpbnB1dC52YWwodGhpcy5fZGVmYXVsdHMuZGVmYXVsdFZhbHVlKTsKCQkJCXZhciBpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KHRoaXMuJGlucHV0LmdldCgwKSksCgkJCQkJdHBfaW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJCQlpZiAodHBfaW5zdCkgewoJCQkJCWlmICh0cF9pbnN0Ll9kZWZhdWx0cy50aW1lT25seSAmJiAoaW5zdC5pbnB1dC52YWwoKSAhPSBpbnN0Lmxhc3RWYWwpKSB7CgkJCQkJCXRyeSB7CgkJCQkJCQkkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgkJCQkJCX0gY2F0Y2ggKGVycikgewoJCQkJCQkJJC5kYXRlcGlja2VyLmxvZyhlcnIpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfSwKCgkJLyoKCQkqIFNtYWxsIGFic3RyYWN0aW9uIHRvIGNvbnRyb2wgdHlwZXMKCQkqIFdlIGNhbiBhZGQgbW9yZSwganVzdCBiZSBzdXJlIHRvIGZvbGxvdyB0aGUgcGF0dGVybjogY3JlYXRlLCBvcHRpb25zLCB2YWx1ZQoJCSovCgkJX2NvbnRyb2xzOiB7CgkJCS8vIHNsaWRlciBtZXRob2RzCgkJCXNsaWRlcjogewoJCQkJY3JlYXRlOiBmdW5jdGlvbih0cF9pbnN0LCBvYmosIHVuaXQsIHZhbCwgbWluLCBtYXgsIHN0ZXApewoJCQkJCXZhciBydGwgPSB0cF9pbnN0Ll9kZWZhdWx0cy5pc1JUTDsgLy8gaWYgcnRsIGdvIC02MC0+MCBpbnN0ZWFkIG9mIDAtPjYwCgkJCQkJcmV0dXJuIG9iai5wcm9wKCdzbGlkZScsIG51bGwpLnNsaWRlcih7CgkJCQkJCW9yaWVudGF0aW9uOiAiaG9yaXpvbnRhbCIsCgkJCQkJCXZhbHVlOiBydGw/IHZhbCotMSA6IHZhbCwKCQkJCQkJbWluOiBydGw/IG1heCotMSA6IG1pbiwKCQkJCQkJbWF4OiBydGw/IG1pbiotMSA6IG1heCwKCQkJCQkJc3RlcDogc3RlcCwKCQkJCQkJc2xpZGU6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoJCQkJCQkJdHBfaW5zdC5jb250cm9sLnZhbHVlKHRwX2luc3QsICQodGhpcyksIHVuaXQsIHJ0bD8gdWkudmFsdWUqLTE6dWkudmFsdWUpOwoJCQkJCQkJdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7CgkJCQkJCX0sCgkJCQkJCXN0b3A6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoJCQkJCQkJdHBfaW5zdC5fb25TZWxlY3RIYW5kbGVyKCk7CgkJCQkJCX0KCQkJCQl9KTsJCgkJCQl9LAoJCQkJb3B0aW9uczogZnVuY3Rpb24odHBfaW5zdCwgb2JqLCB1bml0LCBvcHRzLCB2YWwpewoJCQkJCWlmKHRwX2luc3QuX2RlZmF1bHRzLmlzUlRMKXsKCQkJCQkJaWYodHlwZW9mKG9wdHMpID09ICdzdHJpbmcnKXsKCQkJCQkJCWlmKG9wdHMgPT0gJ21pbicgfHwgb3B0cyA9PSAnbWF4Jyl7CgkJCQkJCQkJaWYodmFsICE9PSB1bmRlZmluZWQpCgkJCQkJCQkJCXJldHVybiBvYmouc2xpZGVyKG9wdHMsIHZhbCotMSk7CgkJCQkJCQkJcmV0dXJuIE1hdGguYWJzKG9iai5zbGlkZXIob3B0cykpOwoJCQkJCQkJfQoJCQkJCQkJcmV0dXJuIG9iai5zbGlkZXIob3B0cyk7CgkJCQkJCX0KCQkJCQkJdmFyIG1pbiA9IG9wdHMubWluLCAKCQkJCQkJCW1heCA9IG9wdHMubWF4OwoJCQkJCQlvcHRzLm1pbiA9IG9wdHMubWF4ID0gbnVsbDsKCQkJCQkJaWYobWluICE9PSB1bmRlZmluZWQpCgkJCQkJCQlvcHRzLm1heCA9IG1pbiAqIC0xOwoJCQkJCQlpZihtYXggIT09IHVuZGVmaW5lZCkKCQkJCQkJCW9wdHMubWluID0gbWF4ICogLTE7CgkJCQkJCXJldHVybiBvYmouc2xpZGVyKG9wdHMpOwoJCQkJCX0KCQkJCQlpZih0eXBlb2Yob3B0cykgPT0gJ3N0cmluZycgJiYgdmFsICE9PSB1bmRlZmluZWQpCgkJCQkJCQlyZXR1cm4gb2JqLnNsaWRlcihvcHRzLCB2YWwpOwoJCQkJCXJldHVybiBvYmouc2xpZGVyKG9wdHMpOwoJCQkJfSwKCQkJCXZhbHVlOiBmdW5jdGlvbih0cF9pbnN0LCBvYmosIHVuaXQsIHZhbCl7CgkJCQkJaWYodHBfaW5zdC5fZGVmYXVsdHMuaXNSVEwpewoJCQkJCQlpZih2YWwgIT09IHVuZGVmaW5lZCkKCQkJCQkJCXJldHVybiBvYmouc2xpZGVyKCd2YWx1ZScsIHZhbCotMSk7CgkJCQkJCXJldHVybiBNYXRoLmFicyhvYmouc2xpZGVyKCd2YWx1ZScpKTsKCQkJCQl9CgkJCQkJaWYodmFsICE9PSB1bmRlZmluZWQpCgkJCQkJCXJldHVybiBvYmouc2xpZGVyKCd2YWx1ZScsIHZhbCk7CgkJCQkJcmV0dXJuIG9iai5zbGlkZXIoJ3ZhbHVlJyk7CgkJCQl9CgkJCX0sCgkJCS8vIHNlbGVjdCBtZXRob2RzCgkJCXNlbGVjdDogewoJCQkJY3JlYXRlOiBmdW5jdGlvbih0cF9pbnN0LCBvYmosIHVuaXQsIHZhbCwgbWluLCBtYXgsIHN0ZXApewoJCQkJCXZhciBzZWwgPSAnPHNlbGVjdCBjbGFzcz0idWktdGltZXBpY2tlci1zZWxlY3QiIGRhdGEtdW5pdD0iJysgdW5pdCArJyIgZGF0YS1taW49IicrIG1pbiArJyIgZGF0YS1tYXg9IicrIG1heCArJyIgZGF0YS1zdGVwPSInKyBzdGVwICsnIj4nLAoJCQkJCQl1bCA9IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQuaW5kZXhPZigndCcpICE9PSAtMT8gJ3RvTG93ZXJDYXNlJzondG9VcHBlckNhc2UnLAoJCQkJCQltID0gMDsKCgkJCQkJZm9yKHZhciBpPW1pbjsgaTw9bWF4OyBpKz1zdGVwKXsJCQkJCQkKCQkJCQkJc2VsICs9ICc8b3B0aW9uIHZhbHVlPSInKyBpICsnIicrIChpPT12YWw/ICcgc2VsZWN0ZWQnOicnKSArJz4nOwoJCQkJCQlpZih1bml0ID09ICdob3VyJyAmJiB1c2VBbXBtKHRwX2luc3QuX2RlZmF1bHRzLnBpY2tlclRpbWVGb3JtYXQgfHwgdHBfaW5zdC5fZGVmYXVsdHMudGltZUZvcm1hdCkpCgkJCQkJCQlzZWwgKz0gJC5kYXRlcGlja2VyLmZvcm1hdFRpbWUoImhoIFRUIiwge2hvdXI6aX0sIHRwX2luc3QuX2RlZmF1bHRzKTsKCQkJCQkJZWxzZSBpZih1bml0ID09ICdtaWxsaXNlYycgfHwgaSA+PSAxMCkgc2VsICs9IGk7CgkJCQkJCWVsc2Ugc2VsICs9ICcwJysgaS50b1N0cmluZygpOwoJCQkJCQlzZWwgKz0gJzwvb3B0aW9uPic7CgkJCQkJfQoJCQkJCXNlbCArPSAnPC9zZWxlY3Q+JzsKCgkJCQkJb2JqLmNoaWxkcmVuKCdzZWxlY3QnKS5yZW1vdmUoKTsKCgkJCQkJJChzZWwpLmFwcGVuZFRvKG9iaikuY2hhbmdlKGZ1bmN0aW9uKGUpewoJCQkJCQl0cF9pbnN0Ll9vblRpbWVDaGFuZ2UoKTsKCQkJCQkJdHBfaW5zdC5fb25TZWxlY3RIYW5kbGVyKCk7CgkJCQkJfSk7CgoJCQkJCXJldHVybiBvYmo7CgkJCQl9LAoJCQkJb3B0aW9uczogZnVuY3Rpb24odHBfaW5zdCwgb2JqLCB1bml0LCBvcHRzLCB2YWwpewoJCQkJCXZhciBvID0ge30sCgkJCQkJCSR0ID0gb2JqLmNoaWxkcmVuKCdzZWxlY3QnKTsKCQkJCQlpZih0eXBlb2Yob3B0cykgPT0gJ3N0cmluZycpewoJCQkJCQlpZih2YWwgPT09IHVuZGVmaW5lZCkKCQkJCQkJCXJldHVybiAkdC5kYXRhKG9wdHMpOwoJCQkJCQlvW29wdHNdID0gdmFsOwkKCQkJCQl9CgkJCQkJZWxzZSBvID0gb3B0czsKCQkJCQlyZXR1cm4gdHBfaW5zdC5jb250cm9sLmNyZWF0ZSh0cF9pbnN0LCBvYmosICR0LmRhdGEoJ3VuaXQnKSwgJHQudmFsKCksIG8ubWluIHx8ICR0LmRhdGEoJ21pbicpLCBvLm1heCB8fCAkdC5kYXRhKCdtYXgnKSwgby5zdGVwIHx8ICR0LmRhdGEoJ3N0ZXAnKSk7CgkJCQl9LAoJCQkJdmFsdWU6IGZ1bmN0aW9uKHRwX2luc3QsIG9iaiwgdW5pdCwgdmFsKXsKCQkJCQl2YXIgJHQgPSBvYmouY2hpbGRyZW4oJ3NlbGVjdCcpOwoJCQkJCWlmKHZhbCAhPT0gdW5kZWZpbmVkKQoJCQkJCQlyZXR1cm4gJHQudmFsKHZhbCk7CgkJCQkJcmV0dXJuICR0LnZhbCgpOwoJCQkJfQoJCQl9CgkJfSAvLyBlbmQgX2NvbnRyb2xzCgoJfSk7CgoJJC5mbi5leHRlbmQoewoJCS8qCgkJKiBzaG9ydGhhbmQganVzdCB0byB1c2UgdGltZXBpY2tlci4uCgkJKi8KCQl0aW1lcGlja2VyOiBmdW5jdGlvbihvKSB7CgkJCW8gPSBvIHx8IHt9OwoJCQl2YXIgdG1wX2FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwoKCQkJaWYgKHR5cGVvZiBvID09ICdvYmplY3QnKSB7CgkJCQl0bXBfYXJnc1swXSA9ICQuZXh0ZW5kKG8sIHsKCQkJCQl0aW1lT25seTogdHJ1ZQoJCQkJfSk7CgkJCX0KCgkJCXJldHVybiAkKHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7CgkJCQkkLmZuLmRhdGV0aW1lcGlja2VyLmFwcGx5KCQodGhpcyksIHRtcF9hcmdzKTsKCQkJfSk7CgkJfSwKCgkJLyoKCQkqIGV4dGVuZCB0aW1lcGlja2VyIHRvIGRhdGVwaWNrZXIKCQkqLwoJCWRhdGV0aW1lcGlja2VyOiBmdW5jdGlvbihvKSB7CgkJCW8gPSBvIHx8IHt9OwoJCQl2YXIgdG1wX2FyZ3MgPSBhcmd1bWVudHM7CgoJCQlpZiAodHlwZW9mKG8pID09ICdzdHJpbmcnKSB7CgkJCQlpZiAobyA9PSAnZ2V0RGF0ZScpIHsKCQkJCQlyZXR1cm4gJC5mbi5kYXRlcGlja2VyLmFwcGx5KCQodGhpc1swXSksIHRtcF9hcmdzKTsKCQkJCX0gZWxzZSB7CgkJCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJCQkJdmFyICR0ID0gJCh0aGlzKTsKCQkJCQkJJHQuZGF0ZXBpY2tlci5hcHBseSgkdCwgdG1wX2FyZ3MpOwoJCQkJCX0pOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJCQl2YXIgJHQgPSAkKHRoaXMpOwoJCQkJCSR0LmRhdGVwaWNrZXIoJC50aW1lcGlja2VyLl9uZXdJbnN0KCR0LCBvKS5fZGVmYXVsdHMpOwoJCQkJfSk7CgkJCX0KCQl9Cgl9KTsKCgkvKgoJKiBQdWJsaWMgVXRpbGl0eSB0byBwYXJzZSBkYXRlIGFuZCB0aW1lCgkqLwoJJC5kYXRlcGlja2VyLnBhcnNlRGF0ZVRpbWUgPSBmdW5jdGlvbihkYXRlRm9ybWF0LCB0aW1lRm9ybWF0LCBkYXRlVGltZVN0cmluZywgZGF0ZVNldHRpbmdzLCB0aW1lU2V0dGluZ3MpIHsKCQl2YXIgcGFyc2VSZXMgPSBwYXJzZURhdGVUaW1lSW50ZXJuYWwoZGF0ZUZvcm1hdCwgdGltZUZvcm1hdCwgZGF0ZVRpbWVTdHJpbmcsIGRhdGVTZXR0aW5ncywgdGltZVNldHRpbmdzKTsKCQlpZiAocGFyc2VSZXMudGltZU9iaikgewoJCQl2YXIgdCA9IHBhcnNlUmVzLnRpbWVPYmo7CgkJCXBhcnNlUmVzLmRhdGUuc2V0SG91cnModC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsIHQubWlsbGlzZWMpOwoJCX0KCgkJcmV0dXJuIHBhcnNlUmVzLmRhdGU7Cgl9OwoKCS8qCgkqIFB1YmxpYyB1dGlsaXR5IHRvIHBhcnNlIHRpbWUKCSovCgkkLmRhdGVwaWNrZXIucGFyc2VUaW1lID0gZnVuY3Rpb24odGltZUZvcm1hdCwgdGltZVN0cmluZywgb3B0aW9ucykgewkJCgkJdmFyIG8gPSBleHRlbmRSZW1vdmUoZXh0ZW5kUmVtb3ZlKHt9LCAkLnRpbWVwaWNrZXIuX2RlZmF1bHRzKSwgb3B0aW9ucyB8fCB7fSk7CgoJCS8vIFN0cmljdCBwYXJzZSByZXF1aXJlcyB0aGUgdGltZVN0cmluZyB0byBtYXRjaCB0aGUgdGltZUZvcm1hdCBleGFjdGx5CgkJdmFyIHN0cmljdFBhcnNlID0gZnVuY3Rpb24oZiwgcywgbyl7CgoJCQkvLyBwYXR0ZXJuIGZvciBzdGFuZGFyZCBhbmQgbG9jYWxpemVkIEFNL1BNIG1hcmtlcnMKCQkJdmFyIGdldFBhdHRlcm5BbXBtID0gZnVuY3Rpb24oYW1OYW1lcywgcG1OYW1lcykgewoJCQkJdmFyIG1hcmtlcnMgPSBbXTsKCQkJCWlmIChhbU5hbWVzKSB7CgkJCQkJJC5tZXJnZShtYXJrZXJzLCBhbU5hbWVzKTsKCQkJCX0KCQkJCWlmIChwbU5hbWVzKSB7CgkJCQkJJC5tZXJnZShtYXJrZXJzLCBwbU5hbWVzKTsKCQkJCX0KCQkJCW1hcmtlcnMgPSAkLm1hcChtYXJrZXJzLCBmdW5jdGlvbih2YWwpIHsKCQkJCQlyZXR1cm4gdmFsLnJlcGxhY2UoL1suKis/fCgpXFtcXXt9XFxdL2csICdcXCQmJyk7CgkJCQl9KTsKCQkJCXJldHVybiAnKCcgKyBtYXJrZXJzLmpvaW4oJ3wnKSArICcpPyc7CgkJCX07CgoJCQkvLyBmaWd1cmUgb3V0IHBvc2l0aW9uIG9mIHRpbWUgZWxlbWVudHMuLiBjYXVzZSBqcyBjYW50IGRvIG5hbWVkIGNhcHR1cmVzCgkJCXZhciBnZXRGb3JtYXRQb3NpdGlvbnMgPSBmdW5jdGlvbih0aW1lRm9ybWF0KSB7CgkJCQl2YXIgZmluZHMgPSB0aW1lRm9ybWF0LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhoezEsMn18bXsxLDJ9fHN7MSwyfXxsezF9fHR7MSwyfXx6fCcuKj8nKS9nKSwKCQkJCQlvcmRlcnMgPSB7CgkJCQkJCWg6IC0xLAoJCQkJCQltOiAtMSwKCQkJCQkJczogLTEsCgkJCQkJCWw6IC0xLAoJCQkJCQl0OiAtMSwKCQkJCQkJejogLTEKCQkJCQl9OwoKCQkJCWlmIChmaW5kcykgewoJCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZmluZHMubGVuZ3RoOyBpKyspIHsKCQkJCQkJaWYgKG9yZGVyc1tmaW5kc1tpXS50b1N0cmluZygpLmNoYXJBdCgwKV0gPT0gLTEpIHsKCQkJCQkJCW9yZGVyc1tmaW5kc1tpXS50b1N0cmluZygpLmNoYXJBdCgwKV0gPSBpICsgMTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBvcmRlcnM7CgkJCX07CgoJCQl2YXIgcmVnc3RyID0gJ14nICsgZi50b1N0cmluZygpCgkJCQkJLnJlcGxhY2UoLyhbaEhdezEsMn18bW0/fHNzP3xbdFRdezEsMn18W2x6XXwnLio/JykvZywgZnVuY3Rpb24gKG1hdGNoKSB7CgkJCQkJCQlzd2l0Y2ggKG1hdGNoLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKSB7CgkJCQkJCQkJY2FzZSAnaCc6IHJldHVybiAnKFxcZD9cXGQpJzsKCQkJCQkJCQljYXNlICdtJzogcmV0dXJuICcoXFxkP1xcZCknOwoJCQkJCQkJCWNhc2UgJ3MnOiByZXR1cm4gJyhcXGQ/XFxkKSc7CgkJCQkJCQkJY2FzZSAnbCc6IHJldHVybiAnKFxcZD9cXGQ/XFxkKSc7CgkJCQkJCQkJY2FzZSAneic6IHJldHVybiAnKHp8Wy0rXVxcZFxcZDo/XFxkXFxkfFxcUyspPyc7CgkJCQkJCQkJY2FzZSAndCc6IHJldHVybiBnZXRQYXR0ZXJuQW1wbShvLmFtTmFtZXMsIG8ucG1OYW1lcyk7CgkJCQkJCQkJZGVmYXVsdDogICAgLy8gbGl0ZXJhbCBlc2NhcGVkIGluIHF1b3RlcwoJCQkJCQkJCQlyZXR1cm4gJygnICsgbWF0Y2gucmVwbGFjZSgvXCcvZywgIiIpLnJlcGxhY2UoLyhcLnxcJHxcXnxcXHxcL3xcKHxcKXxcW3xcXXxcP3xcK3xcKikvZywgZnVuY3Rpb24gKG0pIHsgcmV0dXJuICJcXCIgKyBtOyB9KSArICcpPyc7CgkJCQkJCQl9CgkJCQkJCX0pCgkJCQkJLnJlcGxhY2UoL1xzL2csICdcXHM/JykgKwoJCQkJCW8udGltZVN1ZmZpeCArICckJywKCQkJCW9yZGVyID0gZ2V0Rm9ybWF0UG9zaXRpb25zKGYpLAoJCQkJYW1wbSA9ICcnLAoJCQkJdHJlZzsKCgkJCXRyZWcgPSBzLm1hdGNoKG5ldyBSZWdFeHAocmVnc3RyLCAnaScpKTsKCgkJCXZhciByZXNUaW1lID0gewoJCQkJaG91cjogMCwKCQkJCW1pbnV0ZTogMCwKCQkJCXNlY29uZDogMCwKCQkJCW1pbGxpc2VjOiAwCgkJCX07CgoJCQlpZiAodHJlZykgewoJCQkJaWYgKG9yZGVyLnQgIT09IC0xKSB7CgkJCQkJaWYgKHRyZWdbb3JkZXIudF0gPT09IHVuZGVmaW5lZCB8fCB0cmVnW29yZGVyLnRdLmxlbmd0aCA9PT0gMCkgewoJCQkJCQlhbXBtID0gJyc7CgkJCQkJCXJlc1RpbWUuYW1wbSA9ICcnOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWFtcG0gPSAkLmluQXJyYXkodHJlZ1tvcmRlci50XS50b1VwcGVyQ2FzZSgpLCBvLmFtTmFtZXMpICE9PSAtMSA/ICdBTScgOiAnUE0nOwoJCQkJCQlyZXNUaW1lLmFtcG0gPSBvW2FtcG0gPT0gJ0FNJyA/ICdhbU5hbWVzJyA6ICdwbU5hbWVzJ11bMF07CgkJCQkJfQoJCQkJfQoKCQkJCWlmIChvcmRlci5oICE9PSAtMSkgewoJCQkJCWlmIChhbXBtID09ICdBTScgJiYgdHJlZ1tvcmRlci5oXSA9PSAnMTInKSB7CgkJCQkJCXJlc1RpbWUuaG91ciA9IDA7IC8vIDEyYW0gPSAwIGhvdXIKCQkJCQl9IGVsc2UgewoJCQkJCQlpZiAoYW1wbSA9PSAnUE0nICYmIHRyZWdbb3JkZXIuaF0gIT0gJzEyJykgewoJCQkJCQkJcmVzVGltZS5ob3VyID0gcGFyc2VJbnQodHJlZ1tvcmRlci5oXSwgMTApICsgMTI7IC8vIDEycG0gPSAxMiBob3VyLCBhbnkgb3RoZXIgcG0gPSBob3VyICsgMTIKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCXJlc1RpbWUuaG91ciA9IE51bWJlcih0cmVnW29yZGVyLmhdKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCgkJCQlpZiAob3JkZXIubSAhPT0gLTEpIHsKCQkJCQlyZXNUaW1lLm1pbnV0ZSA9IE51bWJlcih0cmVnW29yZGVyLm1dKTsKCQkJCX0KCQkJCWlmIChvcmRlci5zICE9PSAtMSkgewoJCQkJCXJlc1RpbWUuc2Vjb25kID0gTnVtYmVyKHRyZWdbb3JkZXIuc10pOwoJCQkJfQoJCQkJaWYgKG9yZGVyLmwgIT09IC0xKSB7CgkJCQkJcmVzVGltZS5taWxsaXNlYyA9IE51bWJlcih0cmVnW29yZGVyLmxdKTsKCQkJCX0KCQkJCWlmIChvcmRlci56ICE9PSAtMSAmJiB0cmVnW29yZGVyLnpdICE9PSB1bmRlZmluZWQpIHsKCQkJCQl2YXIgdHogPSB0cmVnW29yZGVyLnpdLnRvVXBwZXJDYXNlKCk7CgkJCQkJc3dpdGNoICh0ei5sZW5ndGgpIHsKCQkJCQljYXNlIDE6CgkJCQkJCS8vIFoKCQkJCQkJdHogPSBvLnRpbWV6b25lSXNvODYwMSA/ICdaJyA6ICcrMDAwMCc7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgNToKCQkJCQkJLy8gK2hobW0KCQkJCQkJaWYgKG8udGltZXpvbmVJc284NjAxKSB7CgkJCQkJCQl0eiA9IHR6LnN1YnN0cmluZygxKSA9PSAnMDAwMCcgPyAnWicgOiB0ei5zdWJzdHJpbmcoMCwgMykgKyAnOicgKyB0ei5zdWJzdHJpbmcoMyk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSA2OgoJCQkJCQkvLyAraGg6bW0KCQkJCQkJaWYgKCFvLnRpbWV6b25lSXNvODYwMSkgewoJCQkJCQkJdHogPSB0eiA9PSAnWicgfHwgdHouc3Vic3RyaW5nKDEpID09ICcwMDowMCcgPyAnKzAwMDAnIDogdHoucmVwbGFjZSgvOi8sICcnKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCWlmICh0ei5zdWJzdHJpbmcoMSkgPT0gJzAwOjAwJykgewoJCQkJCQkJCXR6ID0gJ1onOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlyZXNUaW1lLnRpbWV6b25lID0gdHo7CgkJCQl9CgoKCQkJCXJldHVybiByZXNUaW1lOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9Oy8vIGVuZCBzdHJpY3RQYXJzZQoKCQkvLyBGaXJzdCB0cnkgSlMgRGF0ZSwgaWYgdGhhdCBmYWlscywgdXNlIHN0cmljdFBhcnNlCgkJdmFyIGxvb3NlUGFyc2UgPSBmdW5jdGlvbihmLHMsbyl7CgkJCXRyeXsKCQkJCXZhciBkID0gbmV3IERhdGUoJzIwMTItMDEtMDEgJysgcyk7CgkJCQlyZXR1cm4gewoJCQkJCWhvdXI6IGQuZ2V0SG91cnMoKSwKCQkJCQltaW51dGVzOiBkLmdldE1pbnV0ZXMoKSwKCQkJCQlzZWNvbmRzOiBkLmdldFNlY29uZHMoKSwKCQkJCQltaWxsaXNlYzogZC5nZXRNaWxsaXNlY29uZHMoKSwKCQkJCQl0aW1lem9uZTogJC50aW1lcGlja2VyLnRpbWVab25lT2Zmc2V0U3RyaW5nKGQpCgkJCQl9OwoJCQl9CgkJCWNhdGNoKGVycil7CgkJCQl0cnl7CgkJCQkJcmV0dXJuIHN0cmljdFBhcnNlKGYscyxvKTsKCQkJCX0KCQkJCWNhdGNoKGVycjIpewoJCQkJCSQuZGF0ZXBpY2tlci5sb2coIlVuYWJsZSB0byBwYXJzZSBcbnRpbWVTdHJpbmc6ICIrIHMgKyJcbnRpbWVGb3JtYXQ6ICIrIGYpOwoJCQkJfQkJCQkKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfTsgLy8gZW5kIGxvb3NlUGFyc2UKCQkKCQlpZih0eXBlb2Ygby5wYXJzZSA9PT0gImZ1bmN0aW9uIil7CgkJCXJldHVybiBvLnBhcnNlKHRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIG8pCgkJfQoJCWlmKG8ucGFyc2UgPT09ICdsb29zZScpewoJCQlyZXR1cm4gbG9vc2VQYXJzZSh0aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCBvKTsKCQl9CgkJcmV0dXJuIHN0cmljdFBhcnNlKHRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIG8pOwoJfTsKCgkvKgoJKiBQdWJsaWMgdXRpbGl0eSB0byBmb3JtYXQgdGhlIHRpbWUKCSogZm9ybWF0ID0gc3RyaW5nIGZvcm1hdCBvZiB0aGUgdGltZQoJKiB0aW1lID0gYSB7fSwgbm90IGEgRGF0ZSgpIGZvciB0aW1lem9uZXMKCSogb3B0aW9ucyA9IGVzc2VudGlhbGx5IHRoZSByZWdpb25hbFtdLi4gYW1OYW1lcywgcG1OYW1lcywgYW1wbQoJKi8KCSQuZGF0ZXBpY2tlci5mb3JtYXRUaW1lID0gZnVuY3Rpb24oZm9ybWF0LCB0aW1lLCBvcHRpb25zKSB7CgkJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgkJb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLnRpbWVwaWNrZXIuX2RlZmF1bHRzLCBvcHRpb25zKTsKCQl0aW1lID0gJC5leHRlbmQoewoJCQlob3VyOiAwLAoJCQltaW51dGU6IDAsCgkJCXNlY29uZDogMCwKCQkJbWlsbGlzZWM6IDAsCgkJCXRpbWV6b25lOiAnKzAwMDAnCgkJfSwgdGltZSk7CgoJCXZhciB0bXB0aW1lID0gZm9ybWF0LAoJCQlhbXBtTmFtZSA9IG9wdGlvbnMuYW1OYW1lc1swXSwKCQkJaG91ciA9IHBhcnNlSW50KHRpbWUuaG91ciwgMTApOwoKCQlpZiAoaG91ciA+IDExKSB7CgkJCWFtcG1OYW1lID0gb3B0aW9ucy5wbU5hbWVzWzBdOwoJCX0KCgkJdG1wdGltZSA9IHRtcHRpbWUucmVwbGFjZSgvKD86SEg/fGhoP3xtbT98c3M/fFt0VF17MSwyfXxbbHpdfCgnLio/J3wiLio/IikpL2csIGZ1bmN0aW9uKG1hdGNoKSB7CgkJc3dpdGNoIChtYXRjaCkgewoJCQljYXNlICdISCc6CgkJCQlyZXR1cm4gKCcwJyArIGhvdXIpLnNsaWNlKC0yKTsKCQkJY2FzZSAnSCc6CgkJCQlyZXR1cm4gaG91cjsKCQkJY2FzZSAnaGgnOgoJCQkJcmV0dXJuICgnMCcgKyBjb252ZXJ0MjR0bzEyKGhvdXIpKS5zbGljZSgtMik7CgkJCWNhc2UgJ2gnOgoJCQkJcmV0dXJuIGNvbnZlcnQyNHRvMTIoaG91cik7CgkJCWNhc2UgJ21tJzoKCQkJCXJldHVybiAoJzAnICsgdGltZS5taW51dGUpLnNsaWNlKC0yKTsKCQkJY2FzZSAnbSc6CgkJCQlyZXR1cm4gdGltZS5taW51dGU7CgkJCWNhc2UgJ3NzJzoKCQkJCXJldHVybiAoJzAnICsgdGltZS5zZWNvbmQpLnNsaWNlKC0yKTsKCQkJY2FzZSAncyc6CgkJCQlyZXR1cm4gdGltZS5zZWNvbmQ7CgkJCWNhc2UgJ2wnOgoJCQkJcmV0dXJuICgnMDAnICsgdGltZS5taWxsaXNlYykuc2xpY2UoLTMpOwoJCQljYXNlICd6JzoKCQkJCXJldHVybiB0aW1lLnRpbWV6b25lID09PSBudWxsPyBvcHRpb25zLmRlZmF1bHRUaW1lem9uZSA6IHRpbWUudGltZXpvbmU7CgkJCWNhc2UgJ1QnOiAKCQkJCXJldHVybiBhbXBtTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTsKCQkJY2FzZSAnVFQnOiAKCQkJCXJldHVybiBhbXBtTmFtZS50b1VwcGVyQ2FzZSgpOwoJCQljYXNlICd0JzoKCQkJCXJldHVybiBhbXBtTmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTsKCQkJY2FzZSAndHQnOgoJCQkJcmV0dXJuIGFtcG1OYW1lLnRvTG93ZXJDYXNlKCk7CgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gbWF0Y2gucmVwbGFjZSgvXCcvZywgIiIpIHx8ICInIjsKCQkJfQoJCX0pOwoKCQl0bXB0aW1lID0gJC50cmltKHRtcHRpbWUpOwoJCXJldHVybiB0bXB0aW1lOwoJfTsKCgkvKgoJKiB0aGUgYmFkIGhhY2sgOi8gb3ZlcnJpZGUgZGF0ZXBpY2tlciBzbyBpdCBkb2VzbnQgY2xvc2Ugb24gc2VsZWN0CgkvLyBpbnNwaXJlZDogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMjUyNTEyL2pxdWVyeS1kYXRlcGlja2VyLXByZXZlbnQtY2xvc2luZy1waWNrZXItd2hlbi1jbGlja2luZy1hLWRhdGUvMTc2MjM3OCMxNzYyMzc4CgkqLwoJJC5kYXRlcGlja2VyLl9iYXNlX3NlbGVjdERhdGUgPSAkLmRhdGVwaWNrZXIuX3NlbGVjdERhdGU7CgkkLmRhdGVwaWNrZXIuX3NlbGVjdERhdGUgPSBmdW5jdGlvbihpZCwgZGF0ZVN0cikgewoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCgkKGlkKVswXSksCgkJCXRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsKCgkJaWYgKHRwX2luc3QpIHsKCQkJdHBfaW5zdC5fbGltaXRNaW5NYXhEYXRlVGltZShpbnN0LCB0cnVlKTsKCQkJaW5zdC5pbmxpbmUgPSBpbnN0LnN0YXlfb3BlbiA9IHRydWU7CgkJCS8vVGhpcyB3YXkgdGhlIG9uU2VsZWN0IGhhbmRsZXIgY2FsbGVkIGZyb20gY2FsZW5kYXJwaWNrZXIgZ2V0IHRoZSBmdWxsIGRhdGVUaW1lCgkJCXRoaXMuX2Jhc2Vfc2VsZWN0RGF0ZShpZCwgZGF0ZVN0cik7CgkJCWluc3QuaW5saW5lID0gaW5zdC5zdGF5X29wZW4gPSBmYWxzZTsKCQkJdGhpcy5fbm90aWZ5Q2hhbmdlKGluc3QpOwoJCQl0aGlzLl91cGRhdGVEYXRlcGlja2VyKGluc3QpOwoJCX0gZWxzZSB7CgkJCXRoaXMuX2Jhc2Vfc2VsZWN0RGF0ZShpZCwgZGF0ZVN0cik7CgkJfQoJfTsKCgkvKgoJKiBzZWNvbmQgYmFkIGhhY2sgOi8gb3ZlcnJpZGUgZGF0ZXBpY2tlciBzbyBpdCB0cmlnZ2VycyBhbiBldmVudCB3aGVuIGNoYW5naW5nIHRoZSBpbnB1dCBmaWVsZAoJKiBhbmQgZG9lcyBub3QgcmVkcmF3IHRoZSBkYXRlcGlja2VyIG9uIGV2ZXJ5IHNlbGVjdERhdGUgZXZlbnQKCSovCgkkLmRhdGVwaWNrZXIuX2Jhc2VfdXBkYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcjsKCSQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlciA9IGZ1bmN0aW9uKGluc3QpIHsKCgkJLy8gZG9uJ3QgcG9wdXAgdGhlIGRhdGVwaWNrZXIgaWYgdGhlcmUgaXMgYW5vdGhlciBpbnN0YW5jZSBhbHJlYWR5IG9wZW5lZAoJCXZhciBpbnB1dCA9IGluc3QuaW5wdXRbMF07CgkJaWYgKCQuZGF0ZXBpY2tlci5fY3VySW5zdCAmJiAkLmRhdGVwaWNrZXIuX2N1ckluc3QgIT0gaW5zdCAmJiAkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmICQuZGF0ZXBpY2tlci5fbGFzdElucHV0ICE9IGlucHV0KSB7CgkJCXJldHVybjsKCQl9CgoJCWlmICh0eXBlb2YoaW5zdC5zdGF5X29wZW4pICE9PSAnYm9vbGVhbicgfHwgaW5zdC5zdGF5X29wZW4gPT09IGZhbHNlKSB7CgoJCQl0aGlzLl9iYXNlX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgoJCQkvLyBSZWxvYWQgdGhlIHRpbWUgY29udHJvbCB3aGVuIGNoYW5naW5nIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgdGV4dCBmaWVsZC4KCQkJdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsKCQkJaWYgKHRwX2luc3QpIHsKCQkJCXRwX2luc3QuX2FkZFRpbWVQaWNrZXIoaW5zdCk7CgoJCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLnVzZUxvY2FsVGltZXpvbmUpIHsgLy9jaGVja3MgZGF5bGlnaHQgc2F2aW5nIHdpdGggdGhlIG5ldyBkYXRlLgoJCQkJCXZhciBkYXRlID0gbmV3IERhdGUoaW5zdC5zZWxlY3RlZFllYXIsIGluc3Quc2VsZWN0ZWRNb250aCwgaW5zdC5zZWxlY3RlZERheSwgMTIpOwoJCQkJCXNlbGVjdExvY2FsVGltZVpvbmUodHBfaW5zdCwgZGF0ZSk7CgkJCQkJdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7CgkJCQl9CgkJCX0KCQl9Cgl9OwoKCS8qCgkqIHRoaXJkIGJhZCBoYWNrIDovIG92ZXJyaWRlIGRhdGVwaWNrZXIgc28gaXQgYWxsb3dzIHNwYWNlcyBhbmQgY29sb24gaW4gdGhlIGlucHV0IGZpZWxkCgkqLwoJJC5kYXRlcGlja2VyLl9iYXNlX2RvS2V5UHJlc3MgPSAkLmRhdGVwaWNrZXIuX2RvS2V5UHJlc3M7CgkkLmRhdGVwaWNrZXIuX2RvS2V5UHJlc3MgPSBmdW5jdGlvbihldmVudCkgewoJCXZhciBpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KGV2ZW50LnRhcmdldCksCgkJCXRwX2luc3QgPSAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAndGltZXBpY2tlcicpOwoKCQlpZiAodHBfaW5zdCkgewoJCQlpZiAoJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ2NvbnN0cmFpbklucHV0JykpIHsKCQkJCXZhciBhbXBtID0gdXNlQW1wbSh0cF9pbnN0Ll9kZWZhdWx0cy50aW1lRm9ybWF0KSwKCQkJCQlkYXRlQ2hhcnMgPSAkLmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnMoJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ2RhdGVGb3JtYXQnKSksCgkJCQkJZGF0ZXRpbWVDaGFycyA9IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQudG9TdHJpbmcoKQoJCQkJCQkJCQkJCS5yZXBsYWNlKC9baG1zXS9nLCAnJykKCQkJCQkJCQkJCQkucmVwbGFjZSgvVFQvZywgYW1wbSA/ICdBUE0nIDogJycpCgkJCQkJCQkJCQkJLnJlcGxhY2UoL1R0L2csIGFtcG0gPyAnQWFQcE1tJyA6ICcnKQoJCQkJCQkJCQkJCS5yZXBsYWNlKC90VC9nLCBhbXBtID8gJ0FhUHBNbScgOiAnJykKCQkJCQkJCQkJCQkucmVwbGFjZSgvVC9nLCBhbXBtID8gJ0FQJyA6ICcnKQoJCQkJCQkJCQkJCS5yZXBsYWNlKC90dC9nLCBhbXBtID8gJ2FwbScgOiAnJykKCQkJCQkJCQkJCQkucmVwbGFjZSgvdC9nLCBhbXBtID8gJ2FwJyA6ICcnKSArIAoJCQkJCQkJCQkJCSIgIiArIHRwX2luc3QuX2RlZmF1bHRzLnNlcGFyYXRvciArIAoJCQkJCQkJCQkJCXRwX2luc3QuX2RlZmF1bHRzLnRpbWVTdWZmaXggKyAKCQkJCQkJCQkJCQkodHBfaW5zdC5fZGVmYXVsdHMuc2hvd1RpbWV6b25lID8gdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmVMaXN0LmpvaW4oJycpIDogJycpICsgCgkJCQkJCQkJCQkJKHRwX2luc3QuX2RlZmF1bHRzLmFtTmFtZXMuam9pbignJykpICsgKHRwX2luc3QuX2RlZmF1bHRzLnBtTmFtZXMuam9pbignJykpICsgCgkJCQkJCQkJCQkJZGF0ZUNoYXJzLAoJCQkJCWNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUgPT09IHVuZGVmaW5lZCA/IGV2ZW50LmtleUNvZGUgOiBldmVudC5jaGFyQ29kZSk7CgkJCQlyZXR1cm4gZXZlbnQuY3RybEtleSB8fCAoY2hyIDwgJyAnIHx8ICFkYXRlQ2hhcnMgfHwgZGF0ZXRpbWVDaGFycy5pbmRleE9mKGNocikgPiAtMSk7CgkJCX0KCQl9CgoJCXJldHVybiAkLmRhdGVwaWNrZXIuX2Jhc2VfZG9LZXlQcmVzcyhldmVudCk7Cgl9OwoKCS8qCgkqIEZvdXJ0aCBiYWQgaGFjayA6LyBvdmVycmlkZSBfdXBkYXRlQWx0ZXJuYXRlIGZ1bmN0aW9uIHVzZWQgaW4gaW5saW5lIG1vZGUgdG8gaW5pdCBhbHRGaWVsZAoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV91cGRhdGVBbHRlcm5hdGUgPSAkLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZTsKCS8qIFVwZGF0ZSBhbnkgYWx0ZXJuYXRlIGZpZWxkIHRvIHN5bmNocm9uaXNlIHdpdGggdGhlIG1haW4gZmllbGQuICovCgkkLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZSA9IGZ1bmN0aW9uKGluc3QpIHsKCQl2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOwoJCWlmKHRwX2luc3QpewoJCQl2YXIgYWx0RmllbGQgPSB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGaWVsZDsKCQkJaWYgKGFsdEZpZWxkKSB7IC8vIHVwZGF0ZSBhbHRlcm5hdGUgZmllbGQgdG9vCgkJCQl2YXIgYWx0Rm9ybWF0ID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0Rm9ybWF0IHx8IHRwX2luc3QuX2RlZmF1bHRzLmRhdGVGb3JtYXQsCgkJCQkJZGF0ZSA9IHRoaXMuX2dldERhdGUoaW5zdCksCgkJCQkJZm9ybWF0Q2ZnID0gJC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoaW5zdCksCgkJCQkJYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAnJywgCgkJCQkJYWx0U2VwYXJhdG9yID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yID8gdHBfaW5zdC5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yIDogdHBfaW5zdC5fZGVmYXVsdHMuc2VwYXJhdG9yLCAKCQkJCQlhbHRUaW1lU3VmZml4ID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0VGltZVN1ZmZpeCA/IHRwX2luc3QuX2RlZmF1bHRzLmFsdFRpbWVTdWZmaXggOiB0cF9pbnN0Ll9kZWZhdWx0cy50aW1lU3VmZml4LAoJCQkJCWFsdFRpbWVGb3JtYXQgPSB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRUaW1lRm9ybWF0ICE9PSBudWxsID8gdHBfaW5zdC5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCA6IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQ7CgkJCQkKCQkJCWFsdEZvcm1hdHRlZERhdGVUaW1lICs9ICQuZGF0ZXBpY2tlci5mb3JtYXRUaW1lKGFsdFRpbWVGb3JtYXQsIHRwX2luc3QsIHRwX2luc3QuX2RlZmF1bHRzKSArIGFsdFRpbWVTdWZmaXg7CgkJCQlpZighdHBfaW5zdC5fZGVmYXVsdHMudGltZU9ubHkgJiYgIXRwX2luc3QuX2RlZmF1bHRzLmFsdEZpZWxkVGltZU9ubHkpewoJCQkJCWlmKHRwX2luc3QuX2RlZmF1bHRzLmFsdEZvcm1hdCkKCQkJCQkJYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGb3JtYXQsIChkYXRlID09PSBudWxsID8gbmV3IERhdGUoKSA6IGRhdGUpLCBmb3JtYXRDZmcpICsgYWx0U2VwYXJhdG9yICsgYWx0Rm9ybWF0dGVkRGF0ZVRpbWU7CgkJCQkJZWxzZSBhbHRGb3JtYXR0ZWREYXRlVGltZSA9IHRwX2luc3QuZm9ybWF0dGVkRGF0ZSArIGFsdFNlcGFyYXRvciArIGFsdEZvcm1hdHRlZERhdGVUaW1lOwoJCQkJfQoJCQkJJChhbHRGaWVsZCkudmFsKGFsdEZvcm1hdHRlZERhdGVUaW1lKTsKCQkJfQoJCX0KCQllbHNlewoJCQkkLmRhdGVwaWNrZXIuX2Jhc2VfdXBkYXRlQWx0ZXJuYXRlKGluc3QpOwoJCX0KCX07CgoJLyoKCSogT3ZlcnJpZGUga2V5IHVwIGV2ZW50IHRvIHN5bmMgbWFudWFsIGlucHV0IGNoYW5nZXMuCgkqLwoJJC5kYXRlcGlja2VyLl9iYXNlX2RvS2V5VXAgPSAkLmRhdGVwaWNrZXIuX2RvS2V5VXA7CgkkLmRhdGVwaWNrZXIuX2RvS2V5VXAgPSBmdW5jdGlvbihldmVudCkgewoJCXZhciBpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KGV2ZW50LnRhcmdldCksCgkJCXRwX2luc3QgPSAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAndGltZXBpY2tlcicpOwoKCQlpZiAodHBfaW5zdCkgewoJCQlpZiAodHBfaW5zdC5fZGVmYXVsdHMudGltZU9ubHkgJiYgKGluc3QuaW5wdXQudmFsKCkgIT0gaW5zdC5sYXN0VmFsKSkgewoJCQkJdHJ5IHsKCQkJCQkkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgkJCQl9IGNhdGNoIChlcnIpIHsKCQkJCQkkLmRhdGVwaWNrZXIubG9nKGVycik7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiAkLmRhdGVwaWNrZXIuX2Jhc2VfZG9LZXlVcChldmVudCk7Cgl9OwoKCS8qCgkqIG92ZXJyaWRlICJUb2RheSIgYnV0dG9uIHRvIGFsc28gZ3JhYiB0aGUgdGltZS4KCSovCgkkLmRhdGVwaWNrZXIuX2Jhc2VfZ290b1RvZGF5ID0gJC5kYXRlcGlja2VyLl9nb3RvVG9kYXk7CgkkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheSA9IGZ1bmN0aW9uKGlkKSB7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KCQoaWQpWzBdKSwKCQkJJGRwID0gaW5zdC5kcERpdjsKCQl0aGlzLl9iYXNlX2dvdG9Ub2RheShpZCk7CgkJdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsKCQlzZWxlY3RMb2NhbFRpbWVab25lKHRwX2luc3QpOwoJCXZhciBub3cgPSBuZXcgRGF0ZSgpOwoJCXRoaXMuX3NldFRpbWUoaW5zdCwgbm93KTsKCQkkKCcudWktZGF0ZXBpY2tlci10b2RheScsICRkcCkuY2xpY2soKTsKCX07CgoJLyoKCSogRGlzYWJsZSAmIGVuYWJsZSB0aGUgVGltZSBpbiB0aGUgZGF0ZXRpbWVwaWNrZXIKCSovCgkkLmRhdGVwaWNrZXIuX2Rpc2FibGVUaW1lcGlja2VyRGF0ZXBpY2tlciA9IGZ1bmN0aW9uKHRhcmdldCkgewoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpOwoJCWlmICghaW5zdCkgewoJCQlyZXR1cm47CgkJfQoKCQl2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOwoJCSQodGFyZ2V0KS5kYXRlcGlja2VyKCdnZXREYXRlJyk7IC8vIEluaXQgc2VsZWN0ZWRbWWVhcnxNb250aHxEYXldCgkJaWYgKHRwX2luc3QpIHsKCQkJdHBfaW5zdC5fZGVmYXVsdHMuc2hvd1RpbWVwaWNrZXIgPSBmYWxzZTsKCQkJdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoaW5zdCk7CgkJfQoJfTsKCgkkLmRhdGVwaWNrZXIuX2VuYWJsZVRpbWVwaWNrZXJEYXRlcGlja2VyID0gZnVuY3Rpb24odGFyZ2V0KSB7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCk7CgkJaWYgKCFpbnN0KSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJJCh0YXJnZXQpLmRhdGVwaWNrZXIoJ2dldERhdGUnKTsgLy8gSW5pdCBzZWxlY3RlZFtZZWFyfE1vbnRofERheV0KCQlpZiAodHBfaW5zdCkgewoJCQl0cF9pbnN0Ll9kZWZhdWx0cy5zaG93VGltZXBpY2tlciA9IHRydWU7CgkJCXRwX2luc3QuX2FkZFRpbWVQaWNrZXIoaW5zdCk7IC8vIENvdWxkIGJlIGRpc2FibGVkIG9uIHBhZ2UgbG9hZAoJCQl0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShpbnN0KTsKCQl9Cgl9OwoKCS8qCgkqIENyZWF0ZSBvdXIgb3duIHNldCB0aW1lIGZ1bmN0aW9uCgkqLwoJJC5kYXRlcGlja2VyLl9zZXRUaW1lID0gZnVuY3Rpb24oaW5zdCwgZGF0ZSkgewoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJaWYgKHRwX2luc3QpIHsKCQkJdmFyIGRlZmF1bHRzID0gdHBfaW5zdC5fZGVmYXVsdHM7CgoJCQkvLyBjYWxsaW5nIF9zZXRUaW1lIHdpdGggbm8gZGF0ZSBzZXRzIHRpbWUgdG8gZGVmYXVsdHMKCQkJdHBfaW5zdC5ob3VyID0gZGF0ZSA/IGRhdGUuZ2V0SG91cnMoKSA6IGRlZmF1bHRzLmhvdXI7CgkJCXRwX2luc3QubWludXRlID0gZGF0ZSA/IGRhdGUuZ2V0TWludXRlcygpIDogZGVmYXVsdHMubWludXRlOwoJCQl0cF9pbnN0LnNlY29uZCA9IGRhdGUgPyBkYXRlLmdldFNlY29uZHMoKSA6IGRlZmF1bHRzLnNlY29uZDsKCQkJdHBfaW5zdC5taWxsaXNlYyA9IGRhdGUgPyBkYXRlLmdldE1pbGxpc2Vjb25kcygpIDogZGVmYXVsdHMubWlsbGlzZWM7CgoJCQkvL2NoZWNrIGlmIHdpdGhpbiBtaW4vbWF4IHRpbWVzLi4gCgkJCXRwX2luc3QuX2xpbWl0TWluTWF4RGF0ZVRpbWUoaW5zdCwgdHJ1ZSk7CgoJCQl0cF9pbnN0Ll9vblRpbWVDaGFuZ2UoKTsKCQkJdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoaW5zdCk7CgkJfQoJfTsKCgkvKgoJKiBDcmVhdGUgbmV3IHB1YmxpYyBtZXRob2QgdG8gc2V0IG9ubHkgdGltZSwgY2FsbGFibGUgYXMgJCgpLmRhdGVwaWNrZXIoJ3NldFRpbWUnLCBkYXRlKQoJKi8KCSQuZGF0ZXBpY2tlci5fc2V0VGltZURhdGVwaWNrZXIgPSBmdW5jdGlvbih0YXJnZXQsIGRhdGUsIHdpdGhEYXRlKSB7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCk7CgkJaWYgKCFpbnN0KSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgoJCWlmICh0cF9pbnN0KSB7CgkJCXRoaXMuX3NldERhdGVGcm9tRmllbGQoaW5zdCk7CgkJCXZhciB0cF9kYXRlOwoJCQlpZiAoZGF0ZSkgewoJCQkJaWYgKHR5cGVvZiBkYXRlID09ICJzdHJpbmciKSB7CgkJCQkJdHBfaW5zdC5fcGFyc2VUaW1lKGRhdGUsIHdpdGhEYXRlKTsKCQkJCQl0cF9kYXRlID0gbmV3IERhdGUoKTsKCQkJCQl0cF9kYXRlLnNldEhvdXJzKHRwX2luc3QuaG91ciwgdHBfaW5zdC5taW51dGUsIHRwX2luc3Quc2Vjb25kLCB0cF9pbnN0Lm1pbGxpc2VjKTsKCQkJCX0gZWxzZSB7CgkJCQkJdHBfZGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTsKCQkJCX0KCQkJCWlmICh0cF9kYXRlLnRvU3RyaW5nKCkgPT0gJ0ludmFsaWQgRGF0ZScpIHsKCQkJCQl0cF9kYXRlID0gdW5kZWZpbmVkOwoJCQkJfQoJCQkJdGhpcy5fc2V0VGltZShpbnN0LCB0cF9kYXRlKTsKCQkJfQoJCX0KCgl9OwoKCS8qCgkqIG92ZXJyaWRlIHNldERhdGUoKSB0byBhbGxvdyBzZXR0aW5nIHRpbWUgdG9vIHdpdGhpbiBEYXRlIG9iamVjdAoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9zZXREYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fc2V0RGF0ZURhdGVwaWNrZXI7CgkkLmRhdGVwaWNrZXIuX3NldERhdGVEYXRlcGlja2VyID0gZnVuY3Rpb24odGFyZ2V0LCBkYXRlKSB7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCk7CgkJaWYgKCFpbnN0KSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0cF9kYXRlID0gKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSA/IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKSA6IGRhdGU7CgoJCXRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgkJdGhpcy5fYmFzZV9zZXREYXRlRGF0ZXBpY2tlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJCXRoaXMuX3NldFRpbWVEYXRlcGlja2VyKHRhcmdldCwgdHBfZGF0ZSwgdHJ1ZSk7Cgl9OwoKCS8qCgkqIG92ZXJyaWRlIGdldERhdGUoKSB0byBhbGxvdyBnZXR0aW5nIHRpbWUgdG9vIHdpdGhpbiBEYXRlIG9iamVjdAoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9nZXREYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fZ2V0RGF0ZURhdGVwaWNrZXI7CgkkLmRhdGVwaWNrZXIuX2dldERhdGVEYXRlcGlja2VyID0gZnVuY3Rpb24odGFyZ2V0LCBub0RlZmF1bHQpIHsKCQl2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0KTsKCQlpZiAoIWluc3QpIHsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsKCgkJaWYgKHRwX2luc3QpIHsKCQkJLy8gaWYgaXQgaGFzbid0IHlldCBiZWVuIGRlZmluZWQsIGdyYWIgZnJvbSBmaWVsZAoJCQlpZihpbnN0Lmxhc3RWYWwgPT09IHVuZGVmaW5lZCl7CgkJCQl0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGluc3QsIG5vRGVmYXVsdCk7CgkJCX0KCgkJCXZhciBkYXRlID0gdGhpcy5fZ2V0RGF0ZShpbnN0KTsKCQkJaWYgKGRhdGUgJiYgdHBfaW5zdC5fcGFyc2VUaW1lKCQodGFyZ2V0KS52YWwoKSwgdHBfaW5zdC50aW1lT25seSkpIHsKCQkJCWRhdGUuc2V0SG91cnModHBfaW5zdC5ob3VyLCB0cF9pbnN0Lm1pbnV0ZSwgdHBfaW5zdC5zZWNvbmQsIHRwX2luc3QubWlsbGlzZWMpOwoJCQl9CgkJCXJldHVybiBkYXRlOwoJCX0KCQlyZXR1cm4gdGhpcy5fYmFzZV9nZXREYXRlRGF0ZXBpY2tlcih0YXJnZXQsIG5vRGVmYXVsdCk7Cgl9OwoKCS8qCgkqIG92ZXJyaWRlIHBhcnNlRGF0ZSgpIGJlY2F1c2UgVUkgMS44LjE0IHRocm93cyBhbiBlcnJvciBhYm91dCAiRXh0cmEgY2hhcmFjdGVycyIKCSogQW4gb3B0aW9uIGluIGRhdGFwaWNrZXIgdG8gaWdub3JlIGV4dHJhIGZvcm1hdCBjaGFyYWN0ZXJzIHdvdWxkIGJlIG5pY2VyLgoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9wYXJzZURhdGUgPSAkLmRhdGVwaWNrZXIucGFyc2VEYXRlOwoJJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSA9IGZ1bmN0aW9uKGZvcm1hdCwgdmFsdWUsIHNldHRpbmdzKSB7CgkJdmFyIGRhdGU7CgkJdHJ5IHsKCQkJZGF0ZSA9IHRoaXMuX2Jhc2VfcGFyc2VEYXRlKGZvcm1hdCwgdmFsdWUsIHNldHRpbmdzKTsKCQl9IGNhdGNoIChlcnIpIHsKCQkJLy8gSGFjayEgIFRoZSBlcnJvciBtZXNzYWdlIGVuZHMgd2l0aCBhIGNvbG9uLCBhIHNwYWNlLCBhbmQKCQkJLy8gdGhlICJleHRyYSIgY2hhcmFjdGVycy4gIFdlIHJlbHkgb24gdGhhdCBpbnN0ZWFkIG9mCgkJCS8vIGF0dGVtcHRpbmcgdG8gcGVyZmVjdGx5IHJlcHJvZHVjZSB0aGUgcGFyc2luZyBhbGdvcml0aG0uCgkJCWRhdGUgPSB0aGlzLl9iYXNlX3BhcnNlRGF0ZShmb3JtYXQsIHZhbHVlLnN1YnN0cmluZygwLHZhbHVlLmxlbmd0aC0oZXJyLmxlbmd0aC1lcnIuaW5kZXhPZignOicpLTIpKSwgc2V0dGluZ3MpOwoJCQkkLmRhdGVwaWNrZXIubG9nKCJFcnJvciBwYXJzaW5nIHRoZSBkYXRlIHN0cmluZzogIiArIGVyciArICJcbmRhdGUgc3RyaW5nID0gIiArIHZhbHVlICsgIlxuZGF0ZSBmb3JtYXQgPSAiICsgZm9ybWF0KTsKCQl9CgkJcmV0dXJuIGRhdGU7Cgl9OwoKCS8qCgkqIG92ZXJyaWRlIGZvcm1hdERhdGUgdG8gc2V0IGRhdGUgd2l0aCB0aW1lIHRvIHRoZSBpbnB1dAoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9mb3JtYXREYXRlID0gJC5kYXRlcGlja2VyLl9mb3JtYXREYXRlOwoJJC5kYXRlcGlja2VyLl9mb3JtYXREYXRlID0gZnVuY3Rpb24oaW5zdCwgZGF5LCBtb250aCwgeWVhcikgewoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJaWYgKHRwX2luc3QpIHsKCQkJdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoaW5zdCk7CgkJCXJldHVybiB0cF9pbnN0LiRpbnB1dC52YWwoKTsKCQl9CgkJcmV0dXJuIHRoaXMuX2Jhc2VfZm9ybWF0RGF0ZShpbnN0KTsKCX07CgoJLyoKCSogb3ZlcnJpZGUgb3B0aW9ucyBzZXR0ZXIgdG8gYWRkIHRpbWUgdG8gbWF4RGF0ZShUaW1lKSBhbmQgbWluRGF0ZShUaW1lKS4gTWF4RGF0ZQoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9vcHRpb25EYXRlcGlja2VyID0gJC5kYXRlcGlja2VyLl9vcHRpb25EYXRlcGlja2VyOwoJJC5kYXRlcGlja2VyLl9vcHRpb25EYXRlcGlja2VyID0gZnVuY3Rpb24odGFyZ2V0LCBuYW1lLCB2YWx1ZSkgewoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpLAoJICAgICAgICBuYW1lX2Nsb25lOwoJCWlmICghaW5zdCkgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJaWYgKHRwX2luc3QpIHsKCQkJdmFyIG1pbiA9IG51bGwsCgkJCQltYXggPSBudWxsLAoJCQkJb25zZWxlY3QgPSBudWxsLAoJCQkJb3ZlcnJpZGVzID0gdHBfaW5zdC5fZGVmYXVsdHMuZXZudHMsCgkJCQlmbnMgPSB7fSwKCQkJCXByb3A7CgkJICAgIGlmICh0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJykgeyAvLyBpZiBtaW4vbWF4IHdhcyBzZXQgd2l0aCB0aGUgc3RyaW5nCgkJICAgICAgICBpZiAobmFtZSA9PT0gJ21pbkRhdGUnIHx8IG5hbWUgPT09ICdtaW5EYXRlVGltZScpIHsKCQkgICAgICAgICAgICBtaW4gPSB2YWx1ZTsKCQkgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ21heERhdGUnIHx8IG5hbWUgPT09ICdtYXhEYXRlVGltZScpIHsKCQkgICAgICAgICAgICBtYXggPSB2YWx1ZTsKCQkgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ29uU2VsZWN0JykgewoJCSAgICAgICAgICAgIG9uc2VsZWN0ID0gdmFsdWU7CgkJICAgICAgICB9IGVsc2UgaWYgKG92ZXJyaWRlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewoJCSAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ3VuZGVmaW5lZCcpIHsKCQkgICAgICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1tuYW1lXTsKCQkgICAgICAgICAgICB9CgkJICAgICAgICAgICAgZm5zW25hbWVdID0gdmFsdWU7CgkJICAgICAgICAgICAgbmFtZV9jbG9uZSA9IHt9OyAvL2VtcHR5IHJlc3VsdHMgaW4gZXhpdGluZyBmdW5jdGlvbiBhZnRlciBvdmVycmlkZXMgdXBkYXRlZAoJCSAgICAgICAgfQoJCSAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09ICdvYmplY3QnKSB7IC8vaWYgbWluL21heCB3YXMgc2V0IHdpdGggdGhlIEpTT04KCQkgICAgICAgIGlmIChuYW1lLm1pbkRhdGUpIHsKCQkgICAgICAgICAgICBtaW4gPSBuYW1lLm1pbkRhdGU7CgkJICAgICAgICB9IGVsc2UgaWYgKG5hbWUubWluRGF0ZVRpbWUpIHsKCQkgICAgICAgICAgICBtaW4gPSBuYW1lLm1pbkRhdGVUaW1lOwoJCSAgICAgICAgfSBlbHNlIGlmIChuYW1lLm1heERhdGUpIHsKCQkgICAgICAgICAgICBtYXggPSBuYW1lLm1heERhdGU7CgkJICAgICAgICB9IGVsc2UgaWYgKG5hbWUubWF4RGF0ZVRpbWUpIHsKCQkgICAgICAgICAgICBtYXggPSBuYW1lLm1heERhdGVUaW1lOwoJCSAgICAgICAgfQoJCSAgICAgICAgZm9yIChwcm9wIGluIG92ZXJyaWRlcykgewoJCSAgICAgICAgICAgIGlmIChvdmVycmlkZXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgbmFtZVtwcm9wXSkgewoJCSAgICAgICAgICAgICAgICBmbnNbcHJvcF0gPSBuYW1lW3Byb3BdOwoJCSAgICAgICAgICAgIH0KCQkgICAgICAgIH0KCQkgICAgfQoJCSAgICBmb3IgKHByb3AgaW4gZm5zKSB7CgkJICAgICAgICBpZiAoZm5zLmhhc093blByb3BlcnR5KHByb3ApKSB7CgkJICAgICAgICAgICAgb3ZlcnJpZGVzW3Byb3BdID0gZm5zW3Byb3BdOwoJCSAgICAgICAgICAgIGlmICghbmFtZV9jbG9uZSkgeyBuYW1lX2Nsb25lID0gJC5leHRlbmQoe30sIG5hbWUpO30KCQkgICAgICAgICAgICBkZWxldGUgbmFtZV9jbG9uZVtwcm9wXTsKCQkgICAgICAgIH0KCQkgICAgfQoJCSAgICBpZiAobmFtZV9jbG9uZSAmJiBpc0VtcHR5T2JqZWN0KG5hbWVfY2xvbmUpKSB7IHJldHVybjsgfQoJCSAgICBpZiAobWluKSB7IC8vaWYgbWluIHdhcyBzZXQKCQkgICAgICAgIGlmIChtaW4gPT09IDApIHsKCQkgICAgICAgICAgICBtaW4gPSBuZXcgRGF0ZSgpOwoJCSAgICAgICAgfSBlbHNlIHsKCQkgICAgICAgICAgICBtaW4gPSBuZXcgRGF0ZShtaW4pOwoJCSAgICAgICAgfQoJCSAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZSA9IG1pbjsKCQkgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lID0gbWluOwoJCSAgICB9IGVsc2UgaWYgKG1heCkgeyAvL2lmIG1heCB3YXMgc2V0CgkJICAgICAgICBpZiAobWF4ID09PSAwKSB7CgkJICAgICAgICAgICAgbWF4ID0gbmV3IERhdGUoKTsKCQkgICAgICAgIH0gZWxzZSB7CgkJICAgICAgICAgICAgbWF4ID0gbmV3IERhdGUobWF4KTsKCQkgICAgICAgIH0KCQkgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUgPSBtYXg7CgkJICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSA9IG1heDsKCQkgICAgfSBlbHNlIGlmIChvbnNlbGVjdCkgewoJCSAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMub25TZWxlY3QgPSBvbnNlbGVjdDsKCQkgICAgfQoJCX0KCQlpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewoJCQlyZXR1cm4gdGhpcy5fYmFzZV9vcHRpb25EYXRlcGlja2VyLmNhbGwoJC5kYXRlcGlja2VyLCB0YXJnZXQsIG5hbWUpOwoJCX0KCQlyZXR1cm4gdGhpcy5fYmFzZV9vcHRpb25EYXRlcGlja2VyLmNhbGwoJC5kYXRlcGlja2VyLCB0YXJnZXQsIG5hbWVfY2xvbmUgfHwgbmFtZSwgdmFsdWUpOwoJfTsKCS8qCgkqIGpRdWVyeSBpc0VtcHR5T2JqZWN0IGRvZXMgbm90IGNoZWNrIGhhc093blByb3BlcnR5IC0gaWYgc29tZW9uZSBoYXMgYWRkZWQgdG8gdGhlIG9iamVjdCBwcm90b3R5cGUsCgkqIGl0IHdpbGwgcmV0dXJuIGZhbHNlIGZvciBhbGwgb2JqZWN0cwoJKi8KCXZhciBpc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7CgkJdmFyIHByb3A7CgkJZm9yIChwcm9wIGluIG9iaikgewoJCQlpZiAob2JqLmhhc093blByb3BlcnR5KG9iaikpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX07CgoJLyoKCSogalF1ZXJ5IGV4dGVuZCBub3cgaWdub3JlcyBudWxscyEKCSovCgl2YXIgZXh0ZW5kUmVtb3ZlID0gZnVuY3Rpb24odGFyZ2V0LCBwcm9wcykgewoJCSQuZXh0ZW5kKHRhcmdldCwgcHJvcHMpOwoJCWZvciAodmFyIG5hbWUgaW4gcHJvcHMpIHsKCQkJaWYgKHByb3BzW25hbWVdID09PSBudWxsIHx8IHByb3BzW25hbWVdID09PSB1bmRlZmluZWQpIHsKCQkJCXRhcmdldFtuYW1lXSA9IHByb3BzW25hbWVdOwoJCQl9CgkJfQoJCXJldHVybiB0YXJnZXQ7Cgl9OwoKCS8qCgkqIERldGVybWluZSBieSB0aGUgdGltZSBmb3JtYXQgaWYgc2hvdWxkIHVzZSBhbXBtCgkqIFJldHVybnMgdHJ1ZSBpZiBzaG91bGQgdXNlIGFtcG0sIGZhbHNlIGlmIG5vdAoJKi8KCXZhciB1c2VBbXBtID0gZnVuY3Rpb24odGltZUZvcm1hdCl7CgkJcmV0dXJuICh0aW1lRm9ybWF0LmluZGV4T2YoJ3QnKSAhPT0gLTEgJiYgdGltZUZvcm1hdC5pbmRleE9mKCdoJykgIT09IC0xKTsKCX07CgoJLyoKCSogQ29udmVydHMgMjQgaG91ciBmb3JtYXQgaW50byAxMiBob3VyCgkqIFJldHVybnMgMTIgaG91ciB3aXRob3V0IGxlYWRpbmcgMAoJKi8KCXZhciBjb252ZXJ0MjR0bzEyID0gZnVuY3Rpb24oaG91cikgewoJCWlmIChob3VyID4gMTIpIHsKCQkJaG91ciA9IGhvdXIgLSAxMjsKCQl9CgoJCWlmIChob3VyID09IDApIHsKCQkJaG91ciA9IDEyOwoJCX0KCgkJcmV0dXJuIFN0cmluZyhob3VyKTsKCX07CgoJLyoKCSogU3BsaXRzIGRhdGV0aW1lIHN0cmluZyBpbnRvIGRhdGUgYW5zIHRpbWUgc3Vic3RyaW5ncy4KCSogVGhyb3dzIGV4Y2VwdGlvbiB3aGVuIGRhdGUgY2FuJ3QgYmUgcGFyc2VkCgkqIFJldHVybnMgW2RhdGVTdHJpbmcsIHRpbWVTdHJpbmddCgkqLwoJdmFyIHNwbGl0RGF0ZVRpbWUgPSBmdW5jdGlvbihkYXRlRm9ybWF0LCBkYXRlVGltZVN0cmluZywgZGF0ZVNldHRpbmdzLCB0aW1lU2V0dGluZ3MpIHsKCQl0cnkgewoJCQkvLyBUaGUgaWRlYSBpcyB0byBnZXQgdGhlIG51bWJlciBzZXBhcmF0b3Igb2NjdXJhbmNlcyBpbiBkYXRldGltZSBhbmQgdGhlIHRpbWUgZm9ybWF0IHJlcXVlc3RlZCAoc2luY2UgdGltZSBoYXMgCgkJCS8vIGZld2VyIHVua25vd25zLCBtb3N0bHkgbnVtYmVycyBhbmQgYW0vcG0pLiBXZSB3aWxsIHVzZSB0aGUgdGltZSBwYXR0ZXJuIHRvIHNwbGl0LgoJCQl2YXIgc2VwYXJhdG9yID0gdGltZVNldHRpbmdzICYmIHRpbWVTZXR0aW5ncy5zZXBhcmF0b3IgPyB0aW1lU2V0dGluZ3Muc2VwYXJhdG9yIDogJC50aW1lcGlja2VyLl9kZWZhdWx0cy5zZXBhcmF0b3IsCgkJCQlmb3JtYXQgPSB0aW1lU2V0dGluZ3MgJiYgdGltZVNldHRpbmdzLnRpbWVGb3JtYXQgPyB0aW1lU2V0dGluZ3MudGltZUZvcm1hdCA6ICQudGltZXBpY2tlci5fZGVmYXVsdHMudGltZUZvcm1hdCwKCQkJCXRpbWVQYXJ0cyA9IGZvcm1hdC5zcGxpdChzZXBhcmF0b3IpLCAvLyBob3cgbWFueSBvY2N1cmFuY2VzIG9mIHNlcGFyYXRvciBtYXkgYmUgaW4gb3VyIGZvcm1hdD8KCQkJCXRpbWVQYXJ0c0xlbiA9IHRpbWVQYXJ0cy5sZW5ndGgsCgkJCQlhbGxQYXJ0cyA9IGRhdGVUaW1lU3RyaW5nLnNwbGl0KHNlcGFyYXRvciksCgkJCQlhbGxQYXJ0c0xlbiA9IGFsbFBhcnRzLmxlbmd0aDsKCgkJCWlmIChhbGxQYXJ0c0xlbiA+IDEpIHsKCQkJCXJldHVybiBbCgkJCQkJCWFsbFBhcnRzLnNwbGljZSgwLGFsbFBhcnRzTGVuLXRpbWVQYXJ0c0xlbikuam9pbihzZXBhcmF0b3IpLAoJCQkJCQlhbGxQYXJ0cy5zcGxpY2UoMCx0aW1lUGFydHNMZW4pLmpvaW4oc2VwYXJhdG9yKQoJCQkJCV07CgkJCX0KCgkJfSBjYXRjaCAoZXJyKSB7CgkJCSQuZGF0ZXBpY2tlci5sb2coJ0NvdWxkIG5vdCBzcGxpdCB0aGUgZGF0ZSBmcm9tIHRoZSB0aW1lLiBQbGVhc2UgY2hlY2sgdGhlIGZvbGxvd2luZyBkYXRldGltZXBpY2tlciBvcHRpb25zJyArCgkJCQkJIlxudGhyb3duIGVycm9yOiAiICsgZXJyICsKCQkJCQkiXG5kYXRlVGltZVN0cmluZyIgKyBkYXRlVGltZVN0cmluZyArCgkJCQkJIlxuZGF0ZUZvcm1hdCA9ICIgKyBkYXRlRm9ybWF0ICsKCQkJCQkiXG5zZXBhcmF0b3IgPSAiICsgdGltZVNldHRpbmdzLnNlcGFyYXRvciArCgkJCQkJIlxudGltZUZvcm1hdCA9ICIgKyB0aW1lU2V0dGluZ3MudGltZUZvcm1hdCk7CgoJCQlpZiAoZXJyLmluZGV4T2YoIjoiKSA+PSAwKSB7CgkJCQkvLyBIYWNrISAgVGhlIGVycm9yIG1lc3NhZ2UgZW5kcyB3aXRoIGEgY29sb24sIGEgc3BhY2UsIGFuZAoJCQkJLy8gdGhlICJleHRyYSIgY2hhcmFjdGVycy4gIFdlIHJlbHkgb24gdGhhdCBpbnN0ZWFkIG9mCgkJCQkvLyBhdHRlbXB0aW5nIHRvIHBlcmZlY3RseSByZXByb2R1Y2UgdGhlIHBhcnNpbmcgYWxnb3JpdGhtLgoJCQkJdmFyIGRhdGVTdHJpbmdMZW5ndGggPSBkYXRlVGltZVN0cmluZy5sZW5ndGggLSAoZXJyLmxlbmd0aCAtIGVyci5pbmRleE9mKCc6JykgLSAyKSwKCQkJCQl0aW1lU3RyaW5nID0gZGF0ZVRpbWVTdHJpbmcuc3Vic3RyaW5nKGRhdGVTdHJpbmdMZW5ndGgpOwoKCQkJCXJldHVybiBbJC50cmltKGRhdGVUaW1lU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nTGVuZ3RoKSksICQudHJpbShkYXRlVGltZVN0cmluZy5zdWJzdHJpbmcoZGF0ZVN0cmluZ0xlbmd0aCkpXTsKCgkJCX0gZWxzZSB7CgkJCQl0aHJvdyBlcnI7CgkJCX0KCQl9CgkJcmV0dXJuIFtkYXRlVGltZVN0cmluZywgJyddOwoJfTsKCgkvKgoJKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBwYXJzZSBkYXRldGltZSBpbnRlcnZhbAoJKiBSZXR1cm5zOiB7ZGF0ZTogRGF0ZSwgdGltZU9iajogT2JqZWN0fSwgd2hlcmUKCSogICBkYXRlIC0gcGFyc2VkIGRhdGUgd2l0aG91dCB0aW1lICh0eXBlIERhdGUpCgkqICAgdGltZU9iaiA9IHtob3VyOiAsIG1pbnV0ZTogLCBzZWNvbmQ6ICwgbWlsbGlzZWM6IH0gLSBwYXJzZWQgdGltZS4gT3B0aW9uYWwKCSovCgl2YXIgcGFyc2VEYXRlVGltZUludGVybmFsID0gZnVuY3Rpb24oZGF0ZUZvcm1hdCwgdGltZUZvcm1hdCwgZGF0ZVRpbWVTdHJpbmcsIGRhdGVTZXR0aW5ncywgdGltZVNldHRpbmdzKSB7CgkJdmFyIGRhdGU7CgkJdmFyIHNwbGl0UmVzID0gc3BsaXREYXRlVGltZShkYXRlRm9ybWF0LCBkYXRlVGltZVN0cmluZywgZGF0ZVNldHRpbmdzLCB0aW1lU2V0dGluZ3MpOwoJCWRhdGUgPSAkLmRhdGVwaWNrZXIuX2Jhc2VfcGFyc2VEYXRlKGRhdGVGb3JtYXQsIHNwbGl0UmVzWzBdLCBkYXRlU2V0dGluZ3MpOwoJCWlmIChzcGxpdFJlc1sxXSAhPT0gJycpIHsKCQkJdmFyIHRpbWVTdHJpbmcgPSBzcGxpdFJlc1sxXSwKCQkJCXBhcnNlZFRpbWUgPSAkLmRhdGVwaWNrZXIucGFyc2VUaW1lKHRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIHRpbWVTZXR0aW5ncyk7CgoJCQlpZiAocGFyc2VkVGltZSA9PT0gbnVsbCkgewoJCQkJdGhyb3cgJ1dyb25nIHRpbWUgZm9ybWF0JzsKCQkJfQoJCQlyZXR1cm4gewoJCQkJZGF0ZTogZGF0ZSwKCQkJCXRpbWVPYmo6IHBhcnNlZFRpbWUKCQkJfTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gewoJCQkJZGF0ZTogZGF0ZQoJCQl9OwoJCX0KCX07CgoJLyoKCSogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc2V0IHRpbWV6b25lX3NlbGVjdCB0byB0aGUgbG9jYWwgdGltZXpvbmUKCSovCgl2YXIgc2VsZWN0TG9jYWxUaW1lWm9uZSA9IGZ1bmN0aW9uKHRwX2luc3QsIGRhdGUpIHsKCQlpZiAodHBfaW5zdCAmJiB0cF9pbnN0LnRpbWV6b25lX3NlbGVjdCkgewoJCQl0cF9pbnN0Ll9kZWZhdWx0cy51c2VMb2NhbFRpbWV6b25lID0gdHJ1ZTsKCQkJdmFyIG5vdyA9IHR5cGVvZiBkYXRlICE9PSAndW5kZWZpbmVkJyA/IGRhdGUgOiBuZXcgRGF0ZSgpOwoJCQl2YXIgdHpvZmZzZXQgPSAkLnRpbWVwaWNrZXIudGltZVpvbmVPZmZzZXRTdHJpbmcobm93KTsKCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lSXNvODYwMSkgewoJCQkJdHpvZmZzZXQgPSB0em9mZnNldC5zdWJzdHJpbmcoMCwgMykgKyAnOicgKyB0em9mZnNldC5zdWJzdHJpbmcoMyk7CgkJCX0KCQkJdHBfaW5zdC50aW1lem9uZV9zZWxlY3QudmFsKHR6b2Zmc2V0KTsKCQl9Cgl9OwoKCS8qCgkqIENyZWF0ZSBhIFNpbmdsZXRvbiBJbnNhbmNlCgkqLwoJJC50aW1lcGlja2VyID0gbmV3IFRpbWVwaWNrZXIoKTsKCgkvKioKCSAqIEdldCB0aGUgdGltZXpvbmUgb2Zmc2V0IGFzIHN0cmluZyBmcm9tIGEgZGF0ZSBvYmplY3QgKGVnICcrMDUzMCcgZm9yIFVUQys1LjUpCgkgKiBAcGFyYW0gIGRhdGUKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCSQudGltZXBpY2tlci50aW1lWm9uZU9mZnNldFN0cmluZyA9IGZ1bmN0aW9uKGRhdGUpIHsKCQl2YXIgb2ZmID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogLTEsCgkJCW1pbnV0ZXMgPSBvZmYgJSA2MCwKCQkJaG91cnMgPSAob2ZmIC0gbWludXRlcykgLyA2MDsKCQlyZXR1cm4gKG9mZiA+PSAwID8gJysnIDogJy0nKSArICgnMCcgKyAoaG91cnMgKiAxMDEpLnRvU3RyaW5nKCkpLnN1YnN0cigtMikgKyAoJzAnICsgKG1pbnV0ZXMgKiAxMDEpLnRvU3RyaW5nKCkpLnN1YnN0cigtMik7Cgl9OwoKCS8qKgoJICogQ2FsbHMgYHRpbWVwaWNrZXIoKWAgb24gdGhlIGBzdGFydFRpbWVgIGFuZCBgZW5kVGltZWAgZWxlbWVudHMsIGFuZCBjb25maWd1cmVzIHRoZW0gdG8KCSAqIGVuZm9yY2UgZGF0ZSByYW5nZSBsaW1pdHMuCgkgKiBuLmIuIFRoZSBpbnB1dCB2YWx1ZSBtdXN0IGJlIGNvcnJlY3RseSBmb3JtYXR0ZWQgKHJlZm9ybWF0dGluZyBpcyBub3Qgc3VwcG9ydGVkKQoJICogQHBhcmFtICBFbGVtZW50IHN0YXJ0VGltZQoJICogQHBhcmFtICBFbGVtZW50IGVuZFRpbWUKCSAqIEBwYXJhbSAgb2JqIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHRpbWVwaWNrZXIoKSBjYWxsCgkgKiBAcmV0dXJuIGpRdWVyeQoJICovCgkkLnRpbWVwaWNrZXIudGltZVJhbmdlID0gZnVuY3Rpb24oc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKSB7CgkJcmV0dXJuICQudGltZXBpY2tlci5oYW5kbGVSYW5nZSgndGltZXBpY2tlcicsIHN0YXJ0VGltZSwgZW5kVGltZSwgb3B0aW9ucyk7Cgl9OwoKCS8qKgoJICogQ2FsbHMgYGRhdGV0aW1lcGlja2VyYCBvbiB0aGUgYHN0YXJ0VGltZWAgYW5kIGBlbmRUaW1lYCBlbGVtZW50cywgYW5kIGNvbmZpZ3VyZXMgdGhlbSB0bwoJICogZW5mb3JjZSBkYXRlIHJhbmdlIGxpbWl0cy4KCSAqIEBwYXJhbSAgRWxlbWVudCBzdGFydFRpbWUKCSAqIEBwYXJhbSAgRWxlbWVudCBlbmRUaW1lCgkgKiBAcGFyYW0gIG9iaiBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBgdGltZXBpY2tlcigpYCBjYWxsLiBBbHNvIHN1cHBvcnRzIGByZWZvcm1hdGAsCgkgKiAgIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZm9ybWF0IHRoZSBpbnB1dCB2YWx1ZXMgdG8gdGhlIGBkYXRlRm9ybWF0YC4KCSAqIEBwYXJhbSAgc3RyaW5nIG1ldGhvZCBDYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHBpY2tlciB0byBiZSBhZGRlZAoJICogQHJldHVybiBqUXVlcnkKCSAqLwoJJC50aW1lcGlja2VyLmRhdGVUaW1lUmFuZ2UgPSBmdW5jdGlvbihzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMpIHsKCQkkLnRpbWVwaWNrZXIuZGF0ZVJhbmdlKHN0YXJ0VGltZSwgZW5kVGltZSwgb3B0aW9ucywgJ2RhdGV0aW1lcGlja2VyJyk7Cgl9OwoKCS8qKgoJICogQ2FsbHMgYG1ldGhvZGAgb24gdGhlIGBzdGFydFRpbWVgIGFuZCBgZW5kVGltZWAgZWxlbWVudHMsIGFuZCBjb25maWd1cmVzIHRoZW0gdG8KCSAqIGVuZm9yY2UgZGF0ZSByYW5nZSBsaW1pdHMuCgkgKiBAcGFyYW0gIEVsZW1lbnQgc3RhcnRUaW1lCgkgKiBAcGFyYW0gIEVsZW1lbnQgZW5kVGltZQoJICogQHBhcmFtICBvYmogb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgYHRpbWVwaWNrZXIoKWAgY2FsbC4gQWxzbyBzdXBwb3J0cyBgcmVmb3JtYXRgLAoJICogICBhIGJvb2xlYW4gdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0byByZWZvcm1hdCB0aGUgaW5wdXQgdmFsdWVzIHRvIHRoZSBgZGF0ZUZvcm1hdGAuCgkgKiBAcGFyYW0gIHN0cmluZyBtZXRob2QgQ2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBwaWNrZXIgdG8gYmUgYWRkZWQKCSAqIEByZXR1cm4galF1ZXJ5CgkgKi8KCSQudGltZXBpY2tlci5kYXRlUmFuZ2UgPSBmdW5jdGlvbihzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMsIG1ldGhvZCkgewoJCW1ldGhvZCA9IG1ldGhvZCB8fCAnZGF0ZXBpY2tlcic7CgkJJC50aW1lcGlja2VyLmhhbmRsZVJhbmdlKG1ldGhvZCwgc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKTsKCX07CgoJLyoqCgkgKiBDYWxscyBgbWV0aG9kYCBvbiB0aGUgYHN0YXJ0VGltZWAgYW5kIGBlbmRUaW1lYCBlbGVtZW50cywgYW5kIGNvbmZpZ3VyZXMgdGhlbSB0bwoJICogZW5mb3JjZSBkYXRlIHJhbmdlIGxpbWl0cy4KCSAqIEBwYXJhbSAgc3RyaW5nIG1ldGhvZCBDYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHBpY2tlciB0byBiZSBhZGRlZAoJICogQHBhcmFtICBFbGVtZW50IHN0YXJ0VGltZQoJICogQHBhcmFtICBFbGVtZW50IGVuZFRpbWUKCSAqIEBwYXJhbSAgb2JqIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGB0aW1lcGlja2VyKClgIGNhbGwuIEFsc28gc3VwcG9ydHMgYHJlZm9ybWF0YCwKCSAqICAgYSBib29sZWFuIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVmb3JtYXQgdGhlIGlucHV0IHZhbHVlcyB0byB0aGUgYGRhdGVGb3JtYXRgLgoJICogQHJldHVybiBqUXVlcnkKCSAqLwoJJC50aW1lcGlja2VyLmhhbmRsZVJhbmdlID0gZnVuY3Rpb24obWV0aG9kLCBzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMpIHsKCQkkLmZuW21ldGhvZF0uY2FsbChzdGFydFRpbWUsICQuZXh0ZW5kKHsKCQkJb25DbG9zZTogZnVuY3Rpb24oZGF0ZVRleHQsIGluc3QpIHsKCQkJCWNoZWNrRGF0ZXModGhpcywgZW5kVGltZSwgZGF0ZVRleHQpOwoJCQl9LAoJCQlvblNlbGVjdDogZnVuY3Rpb24oc2VsZWN0ZWREYXRlVGltZSkgewoJCQkJc2VsZWN0ZWQodGhpcywgZW5kVGltZSwgJ21pbkRhdGUnKTsKCQkJfQoJCX0sIG9wdGlvbnMsIG9wdGlvbnMuc3RhcnQpKTsKCQkkLmZuW21ldGhvZF0uY2FsbChlbmRUaW1lLCAkLmV4dGVuZCh7CgkJCW9uQ2xvc2U6IGZ1bmN0aW9uKGRhdGVUZXh0LCBpbnN0KSB7CgkJCQljaGVja0RhdGVzKHRoaXMsIHN0YXJ0VGltZSwgZGF0ZVRleHQpOwoJCQl9LAoJCQlvblNlbGVjdDogZnVuY3Rpb24oc2VsZWN0ZWREYXRlVGltZSkgewoJCQkJc2VsZWN0ZWQodGhpcywgc3RhcnRUaW1lLCAnbWF4RGF0ZScpOwoJCQl9CgkJfSwgb3B0aW9ucywgb3B0aW9ucy5lbmQpKTsKCQkvLyB0aW1lcGlja2VyIGRvZXNuJ3QgcHJvdmlkZSBhY2Nlc3MgdG8gaXRzICd0aW1lRm9ybWF0JyBvcHRpb24sIAoJCS8vIG5vciBjb3VsZCBJIGdldCBkYXRlcGlja2VyLmZvcm1hdFRpbWUoKSB0byBiZWhhdmUgd2l0aCB0aW1lcywgc28gSQoJCS8vIGhhdmUgZGlzYWJsZWQgcmVmb3JtYXR0aW5nIGZvciB0aW1lcGlja2VyCgkJaWYgKG1ldGhvZCAhPSAndGltZXBpY2tlcicgJiYgb3B0aW9ucy5yZWZvcm1hdCkgewoJCQkkKFtzdGFydFRpbWUsIGVuZFRpbWVdKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJdmFyIGZvcm1hdCA9ICQodGhpcylbbWV0aG9kXS5jYWxsKCQodGhpcyksICdvcHRpb24nLCAnZGF0ZUZvcm1hdCcpLAoJCQkJCWRhdGUgPSBuZXcgRGF0ZSgkKHRoaXMpLnZhbCgpKTsKCQkJCWlmICgkKHRoaXMpLnZhbCgpICYmIGRhdGUpIHsKCQkJCQkkKHRoaXMpLnZhbCgkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZShmb3JtYXQsIGRhdGUpKTsKCQkJCX0KCQkJfSk7CgkJfQoJCWNoZWNrRGF0ZXMoc3RhcnRUaW1lLCBlbmRUaW1lLCBzdGFydFRpbWUudmFsKCkpOwoKCQlmdW5jdGlvbiBjaGVja0RhdGVzKGNoYW5nZWQsIG90aGVyLCBkYXRlVGV4dCkgewoJCQlpZiAob3RoZXIudmFsKCkgJiYgKG5ldyBEYXRlKHN0YXJ0VGltZS52YWwoKSkgPiBuZXcgRGF0ZShlbmRUaW1lLnZhbCgpKSkpIHsKCQkJCW90aGVyLnZhbChkYXRlVGV4dCk7CgkJCX0KCQl9CgkJc2VsZWN0ZWQoc3RhcnRUaW1lLCBlbmRUaW1lLCAnbWluRGF0ZScpOwoJCXNlbGVjdGVkKGVuZFRpbWUsIHN0YXJ0VGltZSwgJ21heERhdGUnKTsKCgkJZnVuY3Rpb24gc2VsZWN0ZWQoY2hhbmdlZCwgb3RoZXIsIG9wdGlvbikgewoJCQlpZiAoISQoY2hhbmdlZCkudmFsKCkpIHsKCQkJCXJldHVybjsKCQkJfQoJCQl2YXIgZGF0ZSA9ICQoY2hhbmdlZClbbWV0aG9kXS5jYWxsKCQoY2hhbmdlZCksICdnZXREYXRlJyk7CgkJCS8vIHRpbWVwaWNrZXIgZG9lc24ndCBpbXBsZW1lbnQgJ2dldERhdGUnIGFuZCByZXR1cm5zIGEgalF1ZXJ5CgkJCWlmIChkYXRlLmdldFRpbWUpIHsKCQkJCSQob3RoZXIpW21ldGhvZF0uY2FsbCgkKG90aGVyKSwgJ29wdGlvbicsIG9wdGlvbiwgZGF0ZSk7CgkJCX0KCQl9CgkJcmV0dXJuICQoW3N0YXJ0VGltZS5nZXQoMCksIGVuZFRpbWUuZ2V0KDApXSk7Cgl9OwoKCS8qCgkqIEtlZXAgdXAgd2l0aCB0aGUgdmVyc2lvbgoJKi8KCSQudGltZXBpY2tlci52ZXJzaW9uID0gIjEuMS4xIjsKCn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/js/mColorPicker.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/LyoNCiAgbUNvbG9yUGlja2VyDQogIFZlcnNpb246IDEuMCByMzkNCg0KICBDb3B5cmlnaHQgKGMpIDIwMTAgTWV0YTEwMCBMTEMuDQogIGh0dHA6Ly93d3cubWV0YTEwMC5jb20vDQoNCiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlDQogIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwDQoqLw0KIWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGY9YShkb2N1bWVudCksZz1hKCI8ZGl2PiIpLGg9YSgiPGRpdj4iKSxpPWEoIjxkaXY+Iiksaj1hKCI8aW5wdXQ+Iiksaz0vXnJnYlthXT9cKChcZCspLFxzKihcZCspLFxzKihcZCspKCxccyooXGQrXC5cZCspKik/XCkvLGw9LyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKS8sbT0vI1thLWYwLTldezN9LyxuPS8jW2EtZjAtOV17Nn0vO2EuZm4ubUNvbG9yUGlja2VyPWZ1bmN0aW9uKGQpe3ZhciBlPWEuZm4ubUNvbG9yUGlja2VyLmdldENvb2tpZSgic3dhdGNoZXMiKTtyZXR1cm4gYj1hLmV4dGVuZChhLmZuLm1Db2xvclBpY2tlci5kZWZhdWx0cyxkKSxhLmZuLm1Db2xvclBpY2tlci5kZWZhdWx0cy5zd2F0Y2hlcy5jb25jYXQoYi5zd2F0Y2hlcykuc2xpY2UoLTEwKSxjLmVuaGFuY2VkU3dhdGNoZXMmJmUmJihiLnN3YXRjaGVzPWUuc3BsaXQoInx8IikuY29uY2F0KGIuc3dhdGNoZXMpLnNsaWNlKDAsMTApfHxiLnN3YXRjaGVzKSxhKCJkaXYjbUNvbG9yUGlja2VyIikubGVuZ3RofHxhLmZuLm1Db2xvclBpY2tlci5kcmF3UGlja2VyKCksYSgiI2Nzc19kaXNhYmxlZF9jb2xvcl9waWNrZXIiKS5sZW5ndGh8fGEoImhlYWQiKS5wcmVwZW5kKCc8bWV0YSBkYXRhLXJlbW92ZS1tZT0idHJ1ZSIvPjxzdHlsZSBpZD0iY3NzX2Rpc2FibGVkX2NvbG9yX3BpY2tlciIgdHlwZT0idGV4dC9jc3MiPi5tQ29sb3JQaWNrZXJbZGlzYWJsZWRdICsgc3BhbiwgLm1Db2xvclBpY2tlcltkaXNhYmxlZD0iZGlzYWJsZWQiXSArIHNwYW4sIC5tQ29sb3JQaWNrZXJbZGlzYWJsZWQ9InRydWUiXSArIHNwYW4ge2ZpbHRlcjphbHBoYShvcGFjaXR5PTUwKTstbW96LW9wYWNpdHk6MC41Oy13ZWJraXQtb3BhY2l0eTowLjU7LWtodG1sLW9wYWNpdHk6IDAuNTtvcGFjaXR5OiAwLjU7Y3Vyc29yOmRlZmF1bHQ7fTwvc3R5bGU+JyksYSgibWV0YVtkYXRhLXJlbW92ZS1tZT10cnVlXSIpLnJlbW92ZSgpLHRoaXMuZWFjaChhLmZuLm1Db2xvclBpY2tlci5kcmF3UGlja2VyVHJpZ2dlcnMpLHRoaXN9LGEuZm4ubUNvbG9yUGlja2VyLmluaXQ9e3JlcGxhY2U6Ilt0eXBlPWNvbG9yXSIsaW5kZXg6MCxlbmhhbmNlZFN3YXRjaGVzOiEwLGFsbG93VHJhbnNwYXJlbmN5OiEwLHNsb2dhbjoiTWV0YTEwMCAtIERlc2lnbmluZyBGdW4iLHNob3dMb2dvOiEwfSxhLmZuLm1Db2xvclBpY2tlci5kZWZhdWx0cz17Y3VycmVudElkOiExLGN1cnJlbnRJbnB1dDohMSxjdXJyZW50Q29sb3I6ITEsY2hhbmdlQ29sb3I6ITEsY29sb3I6ITEsaW1hZ2VGb2xkZXI6ImltYWdlcy8iLHN3YXRjaGVzOiIjZmZmZmZmLCNmZmZmMDAsIzAwZmYwMCwjMDBmZmZmLCMwMDAwZmYsI2ZmMDBmZiwjZmYwMDAwLCM0YzJiMTEsIzNiM2IzYiwjMDAwMDAwIi5zcGxpdCgiLCIpfSxhLmZuLm1Db2xvclBpY2tlci5zdGFydD1mdW5jdGlvbigpe2EoJ2lucHV0W2RhdGEtbWNvbG9ycGlja2VyIT0idHJ1ZSJdJykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIlt0eXBlPWNvbG9yXSI9PWMucmVwbGFjZT8iY29sb3IiPT10aGlzLmdldEF0dHJpYnV0ZSgidHlwZSIpOmEodGhpcykuaXMoYy5yZXBsYWNlKX0pLm1Db2xvclBpY2tlcigpfSxhLmZuLm1Db2xvclBpY2tlci5ldmVudHM9ZnVuY3Rpb24oKXthKCIjbUNvbG9yUGlja2VyQmciKS5saXZlKCJjbGljayIsYS5mbi5tQ29sb3JQaWNrZXIuY2xvc2VQaWNrZXIpLGEoIi5tQ29sb3JQaWNrZXIiKS5saXZlKCJrZXl1cCIsZnVuY3Rpb24oKXt0cnl7YSh0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLWNvbG9yIjphKHRoaXMpLnZhbCgpfSkuY3NzKHtjb2xvcjphLmZuLm1Db2xvclBpY2tlci50ZXh0Q29sb3IoYSh0aGlzKS5jc3MoImJhY2tncm91bmQtY29sb3IiKSl9KS50cmlnZ2VyKCJjaGFuZ2UiKX1jYXRjaChhKXt9fSksYSgiLm1Db2xvclBpY2tlclRyaWdnZXIiKS5saXZlKCJjbGljayIsYS5mbi5tQ29sb3JQaWNrZXIuY29sb3JTaG93KSxhKCIubUNvbG9yLCAubVBhc3RDb2xvciIpLmxpdmUoIm1vdXNlbW92ZSIsZnVuY3Rpb24oYyl7aWYoIWIuY2hhbmdlQ29sb3IpcmV0dXJuITE7dmFyIGQ9YSh0aGlzKSxlPWQub2Zmc2V0KCksZj1iLmN1cnJlbnRJbnB1dCxmPWYuYXR0cigiZGF0YS1oZXgiKXx8Zi5hdHRyKCJoZXgiKTtiLmNvbG9yPWQuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIiksZC5oYXNDbGFzcygibVBhc3RDb2xvciIpP2IuY29sb3I9YS5mbi5tQ29sb3JQaWNrZXIuc2V0Q29sb3IoYi5jb2xvcixmKTpkLmhhc0NsYXNzKCJtQ29sb3JUcmFuc3BhcmVudCIpP2IuY29sb3I9InRyYW5zcGFyZW50IjpkLmhhc0NsYXNzKCJtUGFzdENvbG9yIil8fChiLmNvbG9yPWEuZm4ubUNvbG9yUGlja2VyLndoaWNoQ29sb3IoYy5wYWdlWC1lLmxlZnQsYy5wYWdlWS1lLnRvcCxmKSksYi5jdXJyZW50SW5wdXQubVNldElucHV0Q29sb3IoYi5jb2xvcil9KS5saXZlKCJjbGljayIsYS5mbi5tQ29sb3JQaWNrZXIuY29sb3JQaWNrZWQpLGEoIiNtQ29sb3JQaWNrZXJJbnB1dCIpLmxpdmUoImtleXVwIixmdW5jdGlvbihjKXt0cnl7Yi5jb2xvcj1hKHRoaXMpLnZhbCgpLGIuY3VycmVudElucHV0Lm1TZXRJbnB1dENvbG9yKGIuY29sb3IpLDEzPT1jLndoaWNoJiZhLmZuLm1Db2xvclBpY2tlci5jb2xvclBpY2tlZCgpfWNhdGNoKGEpe319KS5saXZlKCJibHVyIixmdW5jdGlvbigpe2IuY3VycmVudElucHV0Lm1TZXRJbnB1dENvbG9yKGIuY29sb3IpfSksYSgiI21Db2xvclBpY2tlcldyYXBwZXIiKS5saXZlKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2lmKCFiLmNoYW5nZUNvbG9yKXJldHVybiExO3ZhciBjPWIuY3VycmVudElucHV0O2IuY3VycmVudElucHV0Lm1TZXRJbnB1dENvbG9yKGEuZm4ubUNvbG9yUGlja2VyLnNldENvbG9yKGIuY3VycmVudENvbG9yLGMuYXR0cigiZGF0YS1oZXgiKXx8Yy5hdHRyKCJoZXgiKSkpfSl9LGEuZm4ubUNvbG9yUGlja2VyLmRyYXdQaWNrZXJUcmlnZ2Vycz1mdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZj1kLmF0dHIoImlkIil8fCJjb2xvcl8iK2MuaW5kZXgrKyxnPSJoaWRkZW4iPT1kLmF0dHIoInRleHQiKXx8ImhpZGRlbiI9PWQuYXR0cigiZGF0YS10ZXh0IiksaD1hLmZuLm1Db2xvclBpY2tlci5zZXRDb2xvcihkLnZhbCgpLGQuYXR0cigiZGF0YS1oZXgiKXx8ZC5hdHRyKCJoZXgiKSksaT1kLndpZHRoKCksaj1kLmhlaWdodCgpLGs9ZC5jc3MoImZsb2F0IiksbD1hKCI8c3Bhbj4iKSxtPWEoIjxzcGFuPiIpLG49IiI7cmV0dXJuIGwuYXR0cih7aWQ6ImNvbG9yX3dvcmtfYXJlYSIsY2xhc3M6Im1Db2xvclBpY2tlcklucHV0In0pLmFwcGVuZFRvKGUpLG0uYXR0cih7aWQ6Im1jcF8iK2YsY2xhc3M6Im1Db2xvclBpY2tlclRyaWdnZXIifSkuY3NzKHtkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGN1cnNvcjoicG9pbnRlciJ9KS5pbnNlcnRBZnRlcihkKSxhKCI8aW1nPiIpLmF0dHIoe3NyYzpiLmltYWdlRm9sZGVyKyJjb2xvci5wbmcifSkuY3NzKHtib3JkZXI6MCxtYXJnaW46IjAgMCAwIDNweCIsInZlcnRpY2FsLWFsaWduIjoidGV4dC1ib3R0b20ifSkuYXBwZW5kVG8obSksbC5hcHBlbmQoZCksbj1sLmh0bWwoKS5yZXBsYWNlKC90eXBlPVteYS16IF0qY29sb3JbXmEteiBcL1wvPl0qL2dpLCd0eXBlPSInKyhnPyJoaWRkZW4iOiJ0ZXh0IikrJyInKSxsLmh0bWwoIiIpLnJlbW92ZSgpLGQ9YShuKS5hdHRyKCJpZCIsZikuYWRkQ2xhc3MoIm1Db2xvclBpY2tlciIpLnZhbChoKS5pbnNlcnRCZWZvcmUobSksZyYmbS5jc3Moe2JvcmRlcjoiMXB4IHNvbGlkIGJsYWNrIixmbG9hdDprLHdpZHRoOmksaGVpZ2h0Omp9KS5hZGRDbGFzcyhkLmF0dHIoImNsYXNzIikpLmh0bWwoIiZuYnNwOyIpLGQubVNldElucHV0Q29sb3IoaCksZH0sYS5mbi5tQ29sb3JQaWNrZXIuZHJhd1BpY2tlcj1mdW5jdGlvbigpe3ZhciBmPWEoIjxkaXY+IiksbD0oYSgiPGE+IiksYSgiPGRpdj4iKSksbT1hKCI8ZGl2PiIpO2ZvcihoLmF0dHIoe2lkOiJtQ29sb3JQaWNrZXJCZyJ9KS5jc3Moe2Rpc3BsYXk6Im5vbmUiLGJhY2tncm91bmQ6ImJsYWNrIixvcGFjaXR5Oi4wMSxwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSkuYXBwZW5kVG8oZSksZy5hdHRyKHtpZDoibUNvbG9yUGlja2VyIiwiZGF0YS1tY29sb3JwaWNrZXIiOiEwfSkuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGJvcmRlcjoiMXB4IHNvbGlkICNjY2MiLGNvbG9yOiIjZmZmIix3aWR0aDoiMTk0cHgiLGhlaWdodDoiMTg0cHgiLCJmb250LXNpemUiOiIxMnB4IiwiZm9udC1mYW1pbHkiOiJ0aW1lcyIsZGlzcGxheToibm9uZSJ9KS5hcHBlbmRUbyhlKSxpLmF0dHIoe2lkOiJtQ29sb3JQaWNrZXJUZXN0In0pLmNzcyh7ZGlzcGxheToibm9uZSJ9KS5hcHBlbmRUbyhlKSxtLmF0dHIoe2lkOiJtQ29sb3JQaWNrZXJXcmFwcGVyIn0pLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIixib3JkZXI6InNvbGlkIDFweCBncmF5In0pLmFwcGVuZFRvKGcpLGEoIjxkaXY+IikuYXR0cih7aWQ6Im1Db2xvclBpY2tlckltZyIsY2xhc3M6Im1Db2xvciJ9KS5jc3Moe2hlaWdodDoiMTM2cHgiLHdpZHRoOiIxOTJweCIsYm9yZGVyOjAsY3Vyc29yOiJjcm9zc2hhaXIiLCJiYWNrZ3JvdW5kLWltYWdlIjoidXJsKCIrYi5pbWFnZUZvbGRlcisicGlja2VyLnBuZykifSkuYXBwZW5kVG8obSksZi5hdHRyKHtpZDoibUNvbG9yUGlja2VyU3dhdGNoZXMifSkuY3NzKHsiYm9yZGVyLXJpZ2h0IjoiMXB4IHNvbGlkICMwMDAifSkuYXBwZW5kVG8obSksYSgiPGRpdj4iKS5hZGRDbGFzcygibUNsZWFyIikuY3NzKHtjbGVhcjoiYm90aCJ9KS5hcHBlbmRUbyhmKSxkPTk7LTE8ZDtkLS0pYSgiPGRpdj4iKS5hdHRyKHtpZDoiY2VsbCIrZCxjbGFzczoibVBhc3RDb2xvciIrKDA8ZD8iIG1Ob0xlZnRCb3JkZXIiOiIiKX0pLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOmIuc3dhdGNoZXNbZF0udG9Mb3dlckNhc2UoKSxoZWlnaHQ6IjE4cHgiLHdpZHRoOiIxOHB4Iixib3JkZXI6IjFweCBzb2xpZCAjMDAwIixmbG9hdDoibGVmdCJ9KS5odG1sKCImbmJzcDsiKS5wcmVwZW5kVG8oZik7bC5hdHRyKHtpZDoibUNvbG9yUGlja2VyRm9vdGVyIn0pLmNzcyh7ImJhY2tncm91bmQtaW1hZ2UiOiJ1cmwoIitiLmltYWdlRm9sZGVyKyJncmlkLmdpZikiLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9KS5hcHBlbmRUbyhtKSxqLmF0dHIoe2lkOiJtQ29sb3JQaWNrZXJJbnB1dCIsdHlwZToidGV4dCJ9KS5jc3Moe2JvcmRlcjoic29saWQgMXB4IGdyYXkiLCJmb250LXNpemUiOiIxMHB0IixtYXJnaW46IjNweCIsd2lkdGg6IjgwcHgifSkuYXBwZW5kVG8obCksYy5hbGxvd1RyYW5zcGFyZW5jeSYmYSgiPHNwYW4+IikuYXR0cih7aWQ6Im1Db2xvclBpY2tlclRyYW5zcGFyZW50IixjbGFzczoibUNvbG9yIG1Db2xvclRyYW5zcGFyZW50In0pLmNzcyh7ImZvbnQtc2l6ZSI6IjE2cHgiLGNvbG9yOiIjMDAwIiwicGFkZGluZy1yaWdodCI6IjEwcHgiLCJwYWRkaW5nLXRvcCI6IjZweCIsY3Vyc29yOiJwb2ludGVyIixvdmVyZmxvdzoiaGlkZGVuIixmbG9hdDoicmlnaHQifSkudGV4dCgidHJhbnNwYXJlbnQiKS5hcHBlbmRUbyhsKSxhKCIubU5vTGVmdEJvcmRlciIpLmNzcyh7ImJvcmRlci1sZWZ0IjowfSl9LGEuZm4ubUNvbG9yUGlja2VyLmNsb3NlUGlja2VyPWZ1bmN0aW9uKCl7aC5oaWRlKCksZy5mYWRlT3V0KCl9LGEuZm4ubUNvbG9yUGlja2VyLmNvbG9yU2hvdz1mdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmF0dHIoImlkIikucmVwbGFjZSgibWNwXyIsIiIpLGU9Yy5vZmZzZXQoKSxpPWEoIiMiK2QpLGs9ZS50b3ArYy5vdXRlckhlaWdodCgpLGw9ZS5sZWZ0O2lmKGkuYXR0cigiZGlzYWJsZWQiKSlyZXR1cm4hMTtiLmN1cnJlbnRDb2xvcj1pLmNzcygiYmFja2dyb3VuZC1jb2xvciIpLGIuY2hhbmdlQ29sb3I9ITAsYi5jdXJyZW50SW5wdXQ9aSxiLmN1cnJlbnRJZD1kLGsrZy5oZWlnaHQoKT5mLmhlaWdodCgpJiYoaz1lLnRvcC1nLmhlaWdodCgpKSxsK2cud2lkdGgoKT5mLndpZHRoKCkmJihsPWUubGVmdC1nLndpZHRoKCkrYy5vdXRlcldpZHRoKCkpLGcuY3NzKHt0b3A6aysicHgiLGxlZnQ6bCsicHgifSkuZmFkZUluKCJmYXN0IiksaC5zaG93KCksYi5jb2xvcj1hKCIjIitkKS5hdHRyKCJkYXRhLXRleHQiKT9jLmNzcygiYmFja2dyb3VuZC1jb2xvciIpOmkuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIiksYi5jb2xvcj1hLmZuLm1Db2xvclBpY2tlci5zZXRDb2xvcihiLmNvbG9yLGkuYXR0cigiZGF0YS1oZXgiKXx8aS5hdHRyKCJoZXgiKSksai52YWwoYi5jb2xvcil9LGEuZm4ubUNvbG9yUGlja2VyLnNldElucHV0Q29sb3I9ZnVuY3Rpb24oYixjKXthKCIjIitiKS5tU2V0SW5wdXRDb2xvcihjKX0sYS5mbi5tU2V0SW5wdXRDb2xvcj1mdW5jdGlvbihjKXt2YXIgZD1hKHRoaXMpLGU9eyJiYWNrZ3JvdW5kLWNvbG9yIjpjLCJiYWNrZ3JvdW5kLWltYWdlIjoidHJhbnNwYXJlbnQiPT1jPyJ1cmwoJyIrYi5pbWFnZUZvbGRlcisiZ3JpZC5naWYnKSI6IiIsY29sb3I6YS5mbi5tQ29sb3JQaWNrZXIudGV4dENvbG9yKGMpfTsoZC5hdHRyKCJkYXRhLXRleHQiKXx8ZC5hdHRyKCJ0ZXh0IikpJiZkLm5leHQoKS5jc3MoZSksZC52YWwoYykuY3NzKGUpLnRyaWdnZXIoImNoYW5nZSIpLGoudmFsKGMpfSxhLmZuLm1Db2xvclBpY2tlci50ZXh0Q29sb3I9ZnVuY3Rpb24oYil7cmV0dXJuIGI9YS5mbi5tQ29sb3JQaWNrZXIuUkdCdG9IZXgoYiksdm9pZCAwPT09Ynx8InRyYW5zcGFyZW50Ij09Yj8iYmxhY2siOjQwMD5wYXJzZUludChiLnN1YnN0cigxLDIpLDE2KStwYXJzZUludChiLnN1YnN0cigzLDIpLDE2KStwYXJzZUludChiLnN1YnN0cig1LDIpLDE2KT8id2hpdGUiOiJibGFjayJ9LGEuZm4ubUNvbG9yUGlja2VyLnNldENvb2tpZT1mdW5jdGlvbihhLGIsYyl7YT1hKyI9Iitlc2NhcGUoYiksYj1uZXcgRGF0ZSxiLnNldERhdGUoYi5nZXREYXRlKCkrYyksYSs9IjsgZXhwaXJlcz0iK2IudG9HTVRTdHJpbmcoKSxkb2N1bWVudC5jb29raWU9YX0sYS5mbi5tQ29sb3JQaWNrZXIuZ2V0Q29va2llPWZ1bmN0aW9uKGEpe3JldHVybihhPWRvY3VtZW50LmNvb2tpZS5tYXRjaCgiKF58OykgPyIrYSsiPShbXjtdKikoO3wkKSIpKT91bmVzY2FwZShhWzJdKTpudWxsfSxhLmZuLm1Db2xvclBpY2tlci5jb2xvclBpY2tlZD1mdW5jdGlvbigpe2IuY2hhbmdlQ29sb3I9ITEsYS5mbi5tQ29sb3JQaWNrZXIuY2xvc2VQaWNrZXIoKSxhLmZuLm1Db2xvclBpY2tlci5hZGRUb1N3YXRjaCgpLGIuY3VycmVudElucHV0LnRyaWdnZXIoImNvbG9ycGlja2VkIil9LGEuZm4ubUNvbG9yUGlja2VyLmFkZFRvU3dhdGNoPWZ1bmN0aW9uKGUpe2lmKCFjLmVuaGFuY2VkU3dhdGNoZXMpcmV0dXJuITE7dmFyIGY9W107ZD0wLCJzdHJpbmciPT10eXBlb2YgZSYmKGIuY29sb3I9ZSksInRyYW5zcGFyZW50IiE9Yi5jb2xvciYmKGZbMF09YS5mbi5tQ29sb3JQaWNrZXIuaGV4VG9SR0IoYi5jb2xvcikpLGEoIi5tUGFzdENvbG9yIikuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyk7Yi5jb2xvcj1hLmZuLm1Db2xvclBpY2tlci5oZXhUb1JHQihjLmNzcygiYmFja2dyb3VuZC1jb2xvciIpKSxiLmNvbG9yIT1mWzBdJiZmLmxlbmd0aDwxMCYmKGZbZi5sZW5ndGhdPWIuY29sb3IpLGMuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIixmW2QrK10pfSksYy5lbmhhbmNlZFN3YXRjaGVzJiZhLmZuLm1Db2xvclBpY2tlci5zZXRDb29raWUoInN3YXRjaGVzIixmLmpvaW4oInx8IiksMzY1KX0sYS5mbi5tQ29sb3JQaWNrZXIud2hpY2hDb2xvcj1mdW5jdGlvbihiLGMsZCl7dmFyIGU9WzI1NSwyNTUsMjU1XTszMj5iPyhlWzFdPTgqYixlWzJdPTApOjY0PmI/KGVbMF09MjU2LTgqKGItMzIpLGVbMl09MCk6OTY+Yj8oZVswXT0wLGVbMl09OCooYi02NCkpOjEyOD5iPyhlWzBdPTAsZVsxXT0yNTYtOCooYi05NikpOjE2MD5iPyhlWzBdPTgqKGItMTI4KSxlWzFdPTApOihlWzFdPTAsZVsyXT0yNTYtOCooYi0xNjApKTtmb3IodmFyIGY9MDszPmY7ZisrKTY0PmM/ZVtmXSs9KDI1Ni1lW2ZdKSooNjQtYykvNjQ6MTI4Pj1jP2VbZl0tPWVbZl0qKGMtNjQpLzY0OjEyODxjJiYoZVtmXT0yNTYtYi8xOTIqMjU2KSxlW2ZdPU1hdGgucm91bmQoTWF0aC5taW4oZVtmXSwyNTUpKSwidHJ1ZSI9PWQmJihlW2ZdPWEuZm4ubUNvbG9yUGlja2VyLmRlY1RvSGV4KGVbZl0pKTtyZXR1cm4idHJ1ZSI9PWQ/IiMiK2Uuam9pbigiIik6InJnYigiK2Uuam9pbigiLCAiKSsiKSJ9LGEuZm4ubUNvbG9yUGlja2VyLnNldENvbG9yPWZ1bmN0aW9uKGIsYyl7cmV0dXJuInRydWUiPT1jP2EuZm4ubUNvbG9yUGlja2VyLlJHQnRvSGV4KGIpOmEuZm4ubUNvbG9yUGlja2VyLmhleFRvUkdCKGIpfSxhLmZuLm1Db2xvclBpY2tlci5jb2xvclRlc3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIixhKSxpLmNzcygiYmFja2dyb3VuZC1jb2xvciIpfSxhLmZuLm1Db2xvclBpY2tlci5kZWNUb0hleD1mdW5jdGlvbihhKXtyZXR1cm4gYT1wYXJzZUludChhKSwiMDEyMzQ1Njc4OUFCQ0RFRiIuY2hhckF0KE1hdGguZmxvb3IoYS8xNikpKyIiKyIwMTIzNDU2Nzg5QUJDREVGIi5jaGFyQXQoYS0xNipNYXRoLmZsb29yKGEvMTYpKX0sYS5mbi5tQ29sb3JQaWNrZXIuUkdCdG9IZXg9ZnVuY3Rpb24oYil7dmFyIGQsYz0iIyIsYj0hIWImJmIudG9Mb3dlckNhc2UoKTtpZighYilyZXR1cm4iIjtpZihuLnRlc3QoYikpcmV0dXJuIGIuc3Vic3RyKDAsNyk7aWYobS50ZXN0KGIpKXJldHVybiBiLnJlcGxhY2UobCwiJDEkMSQyJDIkMyQzIikuc3Vic3RyKDAsNyk7aWYoZD1iLm1hdGNoKGspKXtmb3IoYj0xOzQ+YjtiKyspYys9YS5mbi5tQ29sb3JQaWNrZXIuZGVjVG9IZXgoZFtiXSk7cmV0dXJuIGN9cmV0dXJuIGEuZm4ubUNvbG9yUGlja2VyLmNvbG9yVGVzdChiKX0sYS5mbi5tQ29sb3JQaWNrZXIuaGV4VG9SR0I9ZnVuY3Rpb24oYil7cmV0dXJuIGI9ISFiJiZiLnRvTG93ZXJDYXNlKCksYj9rLnRlc3QoYik/YjptLnRlc3QoYik/KG4udGVzdChiKXx8KGI9Yi5yZXBsYWNlKGwsIiQxJDEkMiQyJDMkMyIpKSwicmdiKCIrcGFyc2VJbnQoYi5zdWJzdHIoMSwyKSwxNikrIiwgIitwYXJzZUludChiLnN1YnN0cigzLDIpLDE2KSsiLCAiK3BhcnNlSW50KGIuc3Vic3RyKDUsMiksMTYpKyIpIik6YS5mbi5tQ29sb3JQaWNrZXIuY29sb3JUZXN0KGIpOiIifSxjPWEuZm4ubUNvbG9yUGlja2VyLmluaXQsZi5yZWFkeShmdW5jdGlvbigpe2U9YSgiYm9keSIpLGEuZm4ubUNvbG9yUGlja2VyLmV2ZW50cygpLGMucmVwbGFjZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhLmZuLm1ET011cGRhdGU/YSgiaW5wdXQiKS5tRE9NdXBkYXRlKGEuZm4ubUNvbG9yUGlja2VyLnN0YXJ0KToiZnVuY3Rpb24iPT10eXBlb2YgYS5mbi5saXZlcXVlcnk/YSgiaW5wdXQiKS5saXZlcXVlcnkoYS5mbi5tQ29sb3JQaWNrZXIuc3RhcnQpOihhLmZuLm1Db2xvclBpY2tlci5zdGFydCgpLGYubGl2ZSgiYWpheFN1Y2Nlc3MubUNvbG9yUGlja2VyIixhLmZuLm1Db2xvclBpY2tlci5zdGFydCkpKX0pfShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgojIyBub3RoaW5nIHRvIGRvCgoK]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLy8gcmVtb3ZlIHRoZSBwZXJtaXNzaW9ucwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwokdGhpcy0+RGVsZXRlVGVtcGxhdGUoKTsKCgo=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyByZW1vdmUgcGVybWlzc2lvbiBVU0VfRUNCMgpkZWZpbmUoJ1VTRV9FQ0IyJywgJ1VzZSBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyJyk7CiRkYiA9ICR0aGlzLT5HZXREYigpOwppZiAoIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzEuNCcpIDwgMCApIHsKICAgJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oVVNFX0VDQjIpOwp9CgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJFQ0IyIg0KdmVyc2lvbiA9ICIxLjYuMSINCmF1dGhvciA9ICJDaHJpcyBUYXlsb3IgKHR3aXR0ZXIuY29tL0tpd2lDaHJpc0JUKSINCmF1dGhvcmVtYWlsID0gImNocmlzQGJpbm5vdmF0aXZlLmNvLnVrIg0KbWluY21zdmVyc2lvbiA9IDIuMA0KbGF6eWxvYWRhZG1pbiA9IDANCmxhenlsb2FkZnJvbnRlbmQgPSAxDQo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/ECB2_Test_Template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogRUNCMl9UZXN0X1RlbXBsYXRlIC0gdjEuNisgLSAyMERlYzE5DQoNCiAgIC0gdjEuNyAtIDMwTWF5MjAgLSBleHRyYSB0ZXN0cyBmb3IgZHJvcGRvd24gJiBkcm9wZG93bl9mcm9tX3VkdA0KICAgLSB2MS42IC0gMjBEZWMxOSAtIGV4dHJhIGZpbGVfc2VsZWN0b3IgdGVzdHMNCiAgIC0gdjEuNSAtIDE2RmViMTkgLSBhZGRlZCBpbnB1dGVyX3JlcGVhdGVyDQogICAtIHYxLjQgLSAwNEZlYjE5IC0gdXBkYXRlZCBmb3IgQlM0IGFuZCBsYXRlc3QgdGVtcGxhdGVzDQogICAtIHYxLjMgLSAxOEFwcjE3DQoNCiAgIFRlbXBsYXRlIHN0b3JlZCBpbiBFQ0IyL3RlbXBsYXRlcy9FQ0IyX1Rlc3RfVGVtcGxhdGUudHBsDQogICAgICAtIGNyZWF0ZSBhIHZlcnkgc2ltcGxlIGNvcmU6cGFnZSB0ZW1wbGF0ZSAnRUNCMl9UZXN0JyB3aXRoIGp1c3QgdGhlIDEgbGluZToNCiAgICAgICAgICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpFQ0IyO0VDQjJfVGVzdF9UZW1wbGF0ZS50cGwnfQ0KICAgICAgLSBjcmVhdGUgJ0VDQjIgVGVzdCcgcGFnZSwgdXNpbmcgdGhlIGFib3ZlIHRlbXBsYXRlLg0KDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQoNCntjZ2pzX3JlcXVpcmUgbGliPSdqcXVlcnknfQ0Ke2NnanNfcmVxdWlyZSBqc2ZpbGU9J2Fzc2V0cy9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyd9DQp7Y2dqc19yZXF1aXJlIGpzZmlsZT0nYXNzZXRzL2pzL3NsaWNrLm1pbi5qcyd9DQp7Y2dqc19yZXF1aXJlIGpzZmlsZT0nYXNzZXRzL2pzL21haW4uanMnfQ0KDQoNCg0KPCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCiAgIHtjbXNfc3R5bGVzaGVldH0NCiAgIDxzdHlsZT57bGl0ZXJhbH0ucHJlIHtmb250LWZhbWlseTptb25vc3BhY2U7IHdoaXRlLXNwYWNlOnByZS13cmFwOyB3b3JkLXdyYXA6YnJlYWstd29yZDsNCiAgICAgIGJhY2tncm91bmQtY29sb3I6I0RERDsgcGFkZGluZzoxZW07fXsvbGl0ZXJhbH08L3N0eWxlPg0KPC9oZWFkPg0KDQo8Ym9keSBjbGFzcz0icGFnZS17JHBhZ2VfYWxpYXN9Ij4NCg0Ke2dsb2JhbF9jb250ZW50IG5hbWU9J2hlYWRlcid9DQoNCjxkaXYgY2xhc3M9Im1haW4iPg0KICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+DQogICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMTIiPg0KDQo8aDE+RUNCMiBUZXN0IFBhZ2UgMTwvaDE+DQp7Y29udGVudCBvbmVsaW5lPTF9DQoNCg0KPGgyPmZpbGVfc2VsZWN0b3IgMTwvaDI+DQo8cD5zZWxlY3RlZCBmaWxlOid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZmlsZV9zZWxlY3RvciIgYmxvY2s9InRlc3QxIiBsYWJlbD0iVGVzdCAxOiBmaWxlX3NlbGVjdG9yIiBkaXI9ImltYWdlcyIgZmlsZXR5cGVzPSJnaWYscG5nLGpwZyIgZXhjbHVkZXByZWZpeD0idGh1bWJfIiBkZXNjcmlwdGlvbj0iZmlsZV9zZWxlY3RvcjogVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn0nPHA+DQoNCjxoMj5maWxlX3NlbGVjdG9yIDFBIC0gcmVjdXJzZTwvaDI+DQo8cD5zZWxlY3RlZCBmaWxlOid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZmlsZV9zZWxlY3RvciIgYmxvY2s9InRlc3QxYSIgbGFiZWw9IlRlc3QgMUE6IGZpbGVfc2VsZWN0b3IgLSByZWN1cnNpdmUiIGRpcj0iaW1hZ2VzIiBmaWxldHlwZXM9ImdpZixwbmcsanBnIiBleGNsdWRlcHJlZml4PSJ0aHVtYl8iIHJlY3Vyc2U9MSBkZXNjcmlwdGlvbj0iZmlsZV9zZWxlY3RvcjogVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn0nPHA+DQoNCjxoMj5maWxlX3NlbGVjdG9yIDFCIC0gaW1hZ2UgcHJldmlldzwvaDI+DQo8cD5zZWxlY3RlZCBmaWxlOid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZmlsZV9zZWxlY3RvciIgYmxvY2s9InRlc3QxYiIgbGFiZWw9IlRlc3QgMUI6IGZpbGVfc2VsZWN0b3IgLSBpbWFnZSBwcmV2aWV3IChubyBkZXNjcmlwdGlvbikiIGRpcj0iaW1hZ2VzIiBmaWxldHlwZXM9ImdpZixwbmcsanBnIiBleGNsdWRlcHJlZml4PSJ0aHVtYl8iIHByZXZpZXc9MX0nPHA+DQoNCg0KDQo8aDI+Y29sb3JfcGlja2VyPC9oMj4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJjb2xvcl9waWNrZXIiIGJsb2NrPSJ0ZXN0MiIgbGFiZWw9IlRlc3QgMjogY29sb3JfcGlja2VyIiBkZWZhdWx0X3ZhbHVlPSIjQ0NDQ0NDIiBhc3NpZ249dGVzdDIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gLSBzaG9ydCJ9DQo8cCBzdHlsZT0iY29sb3I6I0ZGRjsgYmFja2dyb3VuZC1jb2xvcjp7JHRlc3QyfTsiPmNvbG91cjoneyR0ZXN0Mn0nPC9wPg0KDQo8aDI+Y29sb3JfcGlja2VyICMyQTwvaDI+DQp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY29sb3JfcGlja2VyIiBibG9jaz0idGVzdDJfMkEiIGxhYmVsPSJUZXN0IDItMkE6IGNvbG9yX3BpY2tlciIgZGVmYXVsdF92YWx1ZT0iIzVjNTFhNSIgYXNzaWduPXRlc3QyXzJBIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIC0gc2hvcnQgLSA1YzUxYTUifQ0KPHAgc3R5bGU9ImNvbG9yOiNGRkY7IGJhY2tncm91bmQtY29sb3I6eyR0ZXN0Ml8yQX07Ij5jb2xvdXI6J3skdGVzdDJfMkF9JzwvcD4NCg0KPGgyPmNvbG9yX3BpY2tlciAjMmM8L2gyPg0Ke2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImNvbG9yX3BpY2tlciIgYmxvY2s9InRlc3QyXzJjIiBsYWJlbD0iVGVzdCAyLTJjOiBjb2xvcl9waWNrZXIgZGVmYXVsdCBSRUQiIGRlZmF1bHRfdmFsdWU9IiNGRjAwMDAiIGFzc2lnbj10ZXN0Ml8yY30NCjxwIHN0eWxlPSJjb2xvcjojRkZGOyBiYWNrZ3JvdW5kLWNvbG9yOnskdGVzdDJfMmN9OyI+Y29sb3VyOid7JHRlc3QyXzJjfSc8L3A+DQoNCg0KPGgyPmNvbG9yX3BpY2tlciAtIHByb21vX2JnY29sb3I8L2gyPg0KeyRwcm9tb19iZ2NvbG9yPSJ7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nY29sb3JfcGlja2VyJyBibG9jaz0ncHJvbW9fYmdjb2xvcicgbGFiZWw9J0JhY2tncm91bmQgQ29sb3InIGRlZmF1bHRfdmFsdWU9J3RyYW5zcGFyZW50J30iIHNjb3BlPWdsb2JhbH0NCjxwIHN0eWxlPSJjb2xvcjojRkZGOyBiYWNrZ3JvdW5kLWNvbG9yOnskcHJvbW9fYmdjb2xvcn07Ij5jb2xvdXI6J3skcHJvbW9fYmdjb2xvcn0nPC9wPg0KDQoNCg0KPGgyPlRlc3QgMzogZHJvcGRvd248L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duIiBibG9jaz0idGVzdDMiIGxhYmVsPSJUZXN0IDM6IGRyb3Bkb3duIiB2YWx1ZXM9IkFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UiIGZpcnN0X3ZhbHVlPSJzZWxlY3QgZnJ1aXQiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KPGgyPlRlc3QgM0E6IGRyb3Bkb3duIC0gbXVsdGlwbGU8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duIiBibG9jaz0idGVzdDNBIiBsYWJlbD0iVGVzdCAzQTogZHJvcGRvd24gLSBtdWx0aXBsZSIgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEJhbmFuYSxQaW5lYXBwbGUsVGVzdCBudW1iZXIgNSxUZXN0IDYsVGVzdDcsVGVzdDgsdGVzdDksdGVzdDEwLHRlc3QxMSIgbXVsdGlwbGU9MSBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCjxoMj5UZXN0IDNCOiBkcm9wZG93biAtIG11bHRpcGxlICYgY29tcGFjdDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZHJvcGRvd24iIGJsb2NrPSJ0ZXN0M0IiIGxhYmVsPSJUZXN0IDNCOiBjb21wYWN0IGRyb3Bkb3duIC0gbXVsdGlwbGUiIHZhbHVlcz0iQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxCYW5hbmEsUGluZWFwcGxlLFRlc3QgbnVtYmVyIDUsVGVzdCA2LFRlc3Q3LFRlc3Q4LHRlc3Q5LHRlc3QxMCx0ZXN0MTEiIG11bHRpcGxlPTEgY29tcGFjdD0xIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQoNCjxoMj5UZXN0NDogZHJvcGRvd25fZnJvbV91ZHQ8L2gyPg0KPHA+U2VjdGlvbiAxIExheW91dCBTdHlsZTone2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2Ryb3Bkb3duX2Zyb21fdWR0JyBibG9jaz0ndGVzdDQnIGxhYmVsPSdUZXN0IDQ6IGRyb3Bkb3duX2Zyb21fdWR0JyB1ZHQ9J2VjYjJfc29ydGFibGVfdWR0X3Rlc3QnIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifSc8L3A+DQoNCjxwPlNlY3Rpb24gMSBMYXlvdXQgU3R5bGUgKHdpdGggZmlyc3RfdmFsdWUpOid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZHJvcGRvd25fZnJvbV91ZHQnIGJsb2NrPSd0ZXN0NGEnIGxhYmVsPSdUZXN0IDRhOiBkcm9wZG93bl9mcm9tX3VkdCAod2l0aCBmaXJzdF92YWx1ZSknIHVkdD0nZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCcgZmlyc3RfdmFsdWU9Ij1zZWxlY3Q9IiBtdWx0aXBsZT0xIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifSc8L3A+DQoNCjxwPlNlY3Rpb24gMSBMYXlvdXQgU3R5bGUgLSBjb21wYWN0Oid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZHJvcGRvd25fZnJvbV91ZHQnIGJsb2NrPSd0ZXN0NGInIGxhYmVsPSdUZXN0IDRiOiBkcm9wZG93bl9mcm9tX3VkdCAtIGNvbXBhY3QnIHVkdD0nZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCcgbXVsdGlwbGU9MSBjb21wYWN0PTEgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9JzwvcD4NCg0KDQoNCjxoMj5jaGVja2JveDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY2hlY2tib3giIGJsb2NrPSJ0ZXN0NWEiIGxhYmVsPSJUZXN0IDU6IENoZWNrYm94IC0gbm8gZGVmYXVsdCIgZGVmYXVsdF92YWx1ZT0iMCIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImNoZWNrYm94IiBibG9jaz0idGVzdDViIiBsYWJlbD0iVGVzdCA1YjogQ2hlY2tib3ggLSBkZWZhdWx0IE5PVCBDaGVja2VkIiBkZWZhdWx0X3ZhbHVlPSIwIn08L3A+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY2hlY2tib3giIGJsb2NrPSJ0ZXN0NWMiIGxhYmVsPSJUZXN0IDVjOiBDaGVja2JveCAtIGRlZmF1bHQgQ2hlY2tlZCIgZGVmYXVsdF92YWx1ZT0iMSJ9PC9wPg0KDQoNCg0KPGgyPm1vZHVsZV9saW5rPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJtb2R1bGVfbGluayIgbGFiZWw9IlRlc3QgNjogbW9kdWxlX2xpbms6R2FsbGVyeSIgYmxvY2s9InRlc3Q2IiBtb2Q9IkdhbGxlcnkiIHRleHQ9IkVkaXQgR2FsbGVyaWVzIiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPmxpbms8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImxpbmsiIGxhYmVsPSJUZXN0IDc6IGxpbmsiIGJsb2NrPSJ0ZXN0NyIgdGFyZ2V0PSJfYmxhbmsiIGxpbms9Imh0dHA6Ly93d3cuYmluZy5jb20iIHRleHQ9ImJpbmcgc2VhcmNoIiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPnRpbWVwaWNrZXI8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRpbWVwaWNrZXIiIGxhYmVsPSJUZXN0IDg6IHRpbWVwaWNrZXIiIGJsb2NrPSJ0ZXN0OCIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KDQoNCjxoMj5kYXRlcGlja2VyPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkYXRlcGlja2VyIiBsYWJlbD0iVGVzdCA5OiBkYXRlcGlja2VyIiBibG9jaz0idGVzdDkiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQoNCjxoMj5UZXN0IDEwOiBpbnB1dDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iaW5wdXQiIGxhYmVsPSJUZXN0IDEwOiBpbnB1dCIgYmxvY2s9InRlc3QxMCIgc2l6ZT01NSBtYXhfbGVuZ3RoPTU1IGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KPGgyPlRlc3QgMTBBOiBpbnB1dCBubyBkZWZhdWx0IHZhbHVlPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJpbnB1dCIgbGFiZWw9IlRlc3QgMTA6IGlucHV0IiBibG9jaz0idGVzdDEwQSIgc2l6ZT01NSBtYXhfbGVuZ3RoPTU1IGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQoNCjxoMj5UZXN0IDExOiB0ZXh0YXJlYTwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGV4dGFyZWEiIGxhYmVsPSJUZXN0IDExOiB0ZXh0YXJlYSIgYmxvY2s9InRlc3QxMSIgcm93cz0xMCBjb2xzPTQwIGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQo8aDI+ZWRpdG9yPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJlZGl0b3IiIGxhYmVsPSJUZXN0IDEyOiBlZGl0b3IiIGJsb2NrPSJ0ZXN0MTIiIHJvd3M9MTAgY29scz00MCBkZWZhdWx0X3ZhbHVlPSJmaWxsIGl0IiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPlRlc3QgMTM6IHRleHQ8L2gyPg0Ke2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRleHQiIGxhYmVsPSJUZXN0IDEzOiB0ZXh0IiBibG9jaz0idGVzdDEzIiB0ZXh0PSJIZWxsbyB3b3JkISIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9DQoNCg0KPGgyPnBhZ2VzPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJwYWdlcyIgbGFiZWw9IlRlc3QgMTQ6IHBhZ2VzIiBibG9jaz0idGVzdDE0IiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPmhyPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJociIgbGFiZWw9IlRlc3QgMTU6IGhyIiBibG9jaz0idGVzdDE1IiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPnNvcnRhYmxlbGlzdDwvaDI+DQp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nc29ydGFibGVsaXN0JyBibG9jaz0ndGVzdDE2JyB1ZHQ9J2VjYjJfc29ydGFibGVfdWR0X3Rlc3QnIGxhYmVsPSd0ZXN0MTY6c29ydGFibGVsaXN0JyBsYWJlbF9sZWZ0PSdTZWxlY3RlZCBXaWRnZXRzJyBsYWJlbF9yaWdodD0nQXZhaWxhYmxlIFdpZGdldHMnIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUsIHVzaW5nICd1ZHQnIG9wdGlvbiJ9DQoNCjxoMj5zb3J0YWJsZWxpc3QgMjwvaDI+DQp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nc29ydGFibGVsaXN0JyBibG9jaz0ndGVzdDE2YScgdmFsdWVzPSdhcHBsZT1BcHBsZSxvcmFuZ2U9T3JhbmdlLGdyZWVuPUdyZWVuLHZhbHVlPUxhYmVsJyBsYWJlbD0ndGVzdDE2YTpzb3J0YWJsZWxpc3QnIGRlc2NyaXB0aW9uPSJUZXN0IHVzaW5nIGRlZmF1bHQgbGFiZWxzLCAybmQgc29ydGFibGUgLSBzbyBzaG91bGQgYmUgbm8gbGliIG91dHB1dCwgdXNlcyB2YWx1ZXMgKG5vdCB1ZHQpIn0NCg0KPGgyPnJhZGlvPC9oMj4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJyYWRpbyIgYmxvY2s9InRlc3QxN2EiIGxhYmVsPSJUZXN0IDE3IiAgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEtpd2lmcnVpdD1raXdpZnJ1aXQiIGRlZmF1bHRfdmFsdWU9J09yYW5nZScgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9DQoNCjxoMj5pbnB1dDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iaW5wdXQiIGxhYmVsPSJUZXN0IDE3Yjogbm8gZGVzY3JpcHRpb24iIGJsb2NrPSJ0ZXN0MTdiIiBzaXplPTU1IG1heF9sZW5ndGg9NTUgZGVmYXVsdF92YWx1ZT0iY2hlY2sgZm9yIG5vIGRlc2NyaXB0aW9uIG9uIHRoaXMgZmllbGQifTwvcD4NCg0KPGgyPmhpZGRlbjwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0naGlkZGVuJyBibG9jaz0ndGVzdDE4JyBhc3NpZ249J3Rlc3QxOGhpZGRlbicgbGFiZWw9J2hpZGRlbicgZGVzY3JpcHRpb249J0hpZGRlbjogd291bGQgbm90IG5vcm1hbGx5IHVzZSBhIGRlc2NyaXB0aW9uIGZpZWxkIScgdmFsdWU9Im1hcmtlcnZhbHVlIn08L3A+DQoNCjxoMj5UZXN0IDE5OiBnYWxsZXJ5X3BpY2tlcjwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZ2FsbGVyeV9waWNrZXInIGJsb2NrPSd0ZXN0MTknIGRpcj0nb24tcGFnZS1nYWxsZXJpZXMnIGFzc2lnbj0ndGVzdDE5JyBsYWJlbD0nVGVzdCAxOTogZ2FsbGVyeV9waWNrZXInIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCntpZiAhZW1wdHkoJHRlc3QxOSl9DQo8ZGl2IGNsYXNzPSJjb2wtNCI+DQogICBBIGZ1bmN0aW9uaW5nIGdhbGxlcnkgc2hvdWxkIGJlIHNob3duIGJlbG93Ojxicj4NCiAgIHtHYWxsZXJ5IGRpcj0kdGVzdDE5fQ0KPC9kaXY+DQp7L2lmfTxicj4NCg0KPGgyPlRlc3QgMjA6IGdldF9kcm9wZG93bl9mcm9tX2N1c3RvbWdzPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdkcm9wZG93bl9mcm9tX2N1c3RvbWdzJyBjdXN0b21nc19maWVsZD0nU2VjdGlvbiBTdHlsZXMnIGJsb2NrPSd0ZXN0MjAnIGFzc2lnbj0ndGVzdDIwJyBsYWJlbD0nVGVzdCAyMDogZHJvcGRvd25fZnJvbV9jdXN0b21ncycgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KPGRpdj5zZWxlY3RlZDogJ3skdGVzdDIwfSc8L2Rpdj4NCg0KPGgyPlRlc3QgMjBBOiBnZXRfZHJvcGRvd25fZnJvbV9jdXN0b21ncyAtIENvbXBhY3QgZGlzcGxheSBvZiBzZWxlY3Rpb248L2gyPg0KPHA+TXVsdGlwbGUgU2VsZWN0IHdpdGggY29tcGFjdCBkaXNwbGF5IG9mIG9wdGlvbnMgJiBlZGl0PC9wPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2Ryb3Bkb3duX2Zyb21fY3VzdG9tZ3MnIGN1c3RvbWdzX2ZpZWxkPSdTZWN0aW9uIFN0eWxlcycgZGlyPSdvbi1wYWdlLWdhbGxlcmllcycgYmxvY2s9J3Rlc3QyMEEnIGFzc2lnbj0ndGVzdDIwQScgbGFiZWw9J1Rlc3QgMjBBOiBkcm9wZG93bl9mcm9tX2N1c3RvbWdzJyBjb21wYWN0PTEgZGVzY3JpcHRpb249J011bHRpcGxlIFNlbGVjdCB3aXRoIGNvbXBhY3QgZGlzcGxheSBvZiBvcHRpb25zICYgZWRpdCcgbXVsdGlwbGU9MSBzaXplPTB9PC9wPg0KPGRpdj5zZWxlY3RlZDogJ3skdGVzdDIwQX0nPC9kaXY+DQoNCjxoMj5UZXN0IDIxOiBUZXN0IGZvciBlcnJvciAtIGZpZWxkIG5vdCBzcGVjaWZpZWQgb3Igbm90IGNvcnJlY3RseSBuYW1lZDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBibG9jaz0ndGVzdDIxJyBhc3NpZ249J3Rlc3QyMScgbGFiZWw9J1Rlc3QgMjE6IFRlc3QgZm9yIGVycm9yIC0gZmllbGQgbm90IHNwZWNpZmllZCBvciBub3QgY29ycmVjdGx5IG5hbWVkJ308L3A+DQo8ZGl2PnNlbGVjdGVkOiAneyR0ZXN0MjF9JzwvZGl2Pg0KDQo8aDI+VGVzdCAyMjogaW5wdXRfcmVwZWF0ZXI8L2gyPg0KPHA+eyRpbnB1dF9yZXBlYXRlcl90ZXN0PSJ8fCJ8ZXhwbG9kZToie2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2lucHV0X3JlcGVhdGVyJyBsYWJlbD0nVGVzdCAyMjogaW5wdXRfcmVwZWF0ZXInIGJsb2NrPSd0ZXN0MjInIHNpemU9MTAwIG1heF9sZW5ndGg9MjU1IGRlZmF1bHRfdmFsdWU9J2ZpbGwgaXQnIGRlc2NyaXB0aW9uPSdQcmVzcyAoKykgYW5kICgtKSB0byBhZGQgYW5kIHJlbW92ZSBhZGRpdGlvbmFsIGlucHV0IGZpZWxkcyd9IiBzY29wZT1nbG9iYWx9PC9wPg0KPGRpdiBjbGFzcz0icHJlIj4kaW5wdXRfcmVwZWF0ZXJfdGVzdDp7JGlucHV0X3JlcGVhdGVyX3Rlc3R8cHJpbnRfcn08L2Rpdj4NCg0KDQo8YnI+PGJyPjxwPlRoYXQncyBpdC4gQWxsIFRlc3RzIGRvbmUgOik8L3A+DQoNCg0KICAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgIDwvZGl2Pg0KPC9kaXY+PCEtLSBtYWluLS0+DQoNCg0Ke2dsb2JhbF9jb250ZW50IG5hbWU9J2Zvb3Rlcid9DQoNCntjZ2pzX3JlbmRlciBhZGRrZXk9JzE5T2N0MTgnfQ0KDQo8L2JvZHk+DQo8L2h0bWw+]]></data>
	</file>
	<file>
	  <filename>/templates/input_repeater_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogaW5wdXRfcmVwZWF0ZXJfdGVtcGxhdGUudHBsIC0gdjEuMCAtIDE1RmViMTkNCg0KICAgLSB2MS4wIC0gMTVGZWIxOSAtIGluaXRpYWwNCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICAgeyRkZXNjcmlwdGlvbn0NCiAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJ7JGJsb2NrX25hbWV9IiBuYW1lPSJ7JGJsb2NrX25hbWV9IiB2YWx1ZT0ieyR2YWx1ZX0iIHNpemU9IjEwMCIvPg0KDQogICA8ZGl2IGlkPSJ7JGJsb2NrX25hbWV9LXJlcGVhdGVyIiBjbGFzcz0iZWNiX3JlcGVhdGVyIiBkYXRhLXBhcmVudD0iI3skYmxvY2tfbmFtZX0iPg0Ke2ZvcmVhY2ggJGZpZWxkcyBhcyAkZmllbGR9DQogICAgICA8ZGl2IGNsYXNzPSJyZXBlYXRlci13cmFwcGVyIj4NCiAgICAgICAgIDxpbnB1dCBpZD0icmVwZWF0ZXItZmllbGQteyRibG9ja19uYW1lfS17JGZpZWxkQGl0ZXJhdGlvbn0iIGNsYXNzPSJyZXBlYXRlci1maWVsZCIgc2l6ZT0ieyRzaXplfSIgbWF4bGVuZ3RoPSJ7JG1heF9sZW5ndGh9IiB2YWx1ZT0ieyRmaWVsZH0iIGRhdGEtcmVwZWF0ZXI9IiN7JGJsb2NrX25hbWV9LXJlcGVhdGVyIi8+DQogICAgICAgICA8YnV0dG9uIGNsYXNzPSJlY2IyLXJlcGVhdGVyLWFkZCBlY2IyLWJ1dHRvbi1pbmxpbmUgdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IiBkYXRhLXJlcGVhdGVyPSIjeyRibG9ja19uYW1lfS1yZXBlYXRlciIgdGl0bGU9InskdGl0bGVfYWRkX2xpbmV9IiByb2xlPSJidXR0b24iIGFyaWEtZGlzYWJsZWQ9ImZhbHNlIj4rPC9idXR0b24+DQogICAgICAgICA8YnV0dG9uIGNsYXNzPSJlY2IyLXJlcGVhdGVyLXJlbW92ZSBlY2IyLWJ1dHRvbi1pbmxpbmUgdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IiBkYXRhLXJlcGVhdGVyPSIjeyRibG9ja19uYW1lfS1yZXBlYXRlciIgdGl0bGU9InskdGl0bGVfcmVtb3ZlX2xpbmV9IiByb2xlPSJidXR0b24iIGFyaWEtZGlzYWJsZWQ9ImZhbHNlIj4mbWludXM7PC9idXR0b24+DQogICAgICA8L2Rpdj4NCnsvZm9yZWFjaH0NCiAgIDwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/select_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogc2VsZWN0X3RlbXBsYXRlLnRwbCAtIHYxLjAgLSAyMURlYzE5DQoNCiAgIC0gdjEuMCAtIDIxRGVjMTkgLSBpbml0aWFsDQoNCiAgIE5vdGU6ICRzZWxlY3RlZF92YWx1ZXMgaXMgYW4gYXJyYXkgc3VwcGxpZWQgd2hlbiBzZWxlY3QgaXMgbXVsdGlwbGUNCiAgICAgICAgICRvcHRpb25zIGFycmF5IG9mOiAkdGV4dCA9PiAkdmFsdWUNCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0Ke2lmICRkZXNjcmlwdGlvbn17JGRlc2NyaXB0aW9ufXsvaWZ9DQp7aWYgJG11bHRpcGxlfQ0KICAgICAgPGRpdiBjbGFzcz0iZWNiX211bHRpcGxlX3NlbGVjdCBjbXNfZHJvcGRvd24ge2lmICRjb21wYWN0fWVjYl9jb21wYWN0ey9pZn0iPg0KICAgICAge2lmICRjb21wYWN0fQ0KICAgICAgICAgPGRpdiBjbGFzcz0iZWNiX3NlbGVjdF9zdW1tYXJ5Ij4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlY2Jfc2VsZWN0X3RleHQiIGRhdGEtZW1wdHk9Inskbm9uZV9zZWxlY3RlZH0iPnskc2VsZWN0ZWRfdGV4dHxkZWZhdWx0OiRub25lX3NlbGVjdGVkfTwvc3Bhbj4NCiAgICAgICAgICAgICZuYnNwOzxhIGNsYXNzPSJlY2Jfc2VsZWN0X2VkaXQiIGhyZWY9ImVkaXQvaGlkZSI+PC9hPg0KICAgICAgICAgPC9kaXY+DQogICAgICB7L2lmfQ0KICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9InskYmxvY2tfbmFtZX0iIGNsYXNzPSJlY2Jfc2VsZWN0X2lucHV0IiBuYW1lPSJ7JGJsb2NrX25hbWV9IiB2YWx1ZT0ieyRzZWxlY3RlZH0iIC8+DQogICAgICAgICA8c2VsZWN0IGNsYXNzPSJjbXNfZHJvcGRvd24iIG5hbWU9InskYmxvY2tfbmFtZX1fdG1wIiBtdWx0aXBsZSBzaXplPSJ7JHNpemV9Ij4NCiAgICAgICAgIHtmb3JlYWNoICRvcHRpb25zIGFzICR0ZXh0ID0+ICR2YWx1ZX0NCiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InskdmFsdWV9IiB7aWYgJHZhbHVlfGluX2FycmF5OiRzZWxlY3RlZF92YWx1ZXN9c2VsZWN0ZWR7L2lmfT57JHRleHR8ZGVmYXVsdDokdmFsdWV9PC9vcHRpb24+DQogICAgICAgICB7L2ZvcmVhY2h9DQogICAgICAgICA8L3NlbGVjdD4NCiAgICAgIDwvZGl2Pg0Ke2Vsc2V9DQoNCiAgICAgIDxzZWxlY3QgY2xhc3M9ImNtc19kcm9wZG93biIgbmFtZT0ieyRibG9ja19uYW1lfSI+DQogICAgICB7Zm9yZWFjaCAkb3B0aW9ucyBhcyAkdGV4dCA9PiAkdmFsdWV9DQogICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7JHZhbHVlfSIge2lmICRzZWxlY3RlZD09JHZhbHVlfXNlbGVjdGVkey9pZn0+eyR0ZXh0fTwvb3B0aW9uPg0KICAgICAgey9mb3JlYWNofQ0KICAgICAgPC9zZWxlY3Q+DQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/sortablelist_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogc29ydGFibGVsaXN0X3RlbXBsYXRlLnRwbCAtIHYxLjEgLSAxNUZlYjE5DQoNCiAgIC0gdjEuMSAtIDE1RmViMTkgLSByZW1vdmVkIG91dHB1dCBvZiBqcyAmIGNzcyAtIG5vdyBtb2R1bGUgd2lkZSBvbiBmaXJzdCBjYWxsDQogICAtIHYxLjAgLSAxOEFwcjE3IC0gMXN0IHZlcnNpb24NCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KDQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ieyRzZWxlY3RhcmVhX3ByZWZpeH0iIG5hbWU9Inskc2VsZWN0YXJlYV9wcmVmaXh9IiB2YWx1ZT0ieyRzZWxlY3RlZF9zdHJ9IiBzaXplPSIxMDAiLz4NCjxkaXYgY2xhc3M9ImNfZnVsbCBjZiBlY2IyLWNiIHskc2VsZWN0YXJlYV9wcmVmaXh9Ij4NCiAgICA8ZGl2IGNsYXNzPSJncmlkXzYgYWxwaGEiPg0KICAgICAgICA8ZmllbGRzZXQ+DQogICAgICAgICAgICA8bGVnZW5kPntpZiAkbGFiZWxMZWZ0IT0nJ317JGxhYmVsTGVmdH17ZWxzZX17JG1vZC0+TGFuZygnY29udGVudF9ibG9ja19sYWJlbF9zZWxlY3RlZCcpfXsvaWZ9PC9sZWdlbmQ+DQogICAgICAgICAgICA8ZGl2IGlkPSJzZWxlY3RlZC1pdGVtcyI+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzb3J0YWJsZS1lY2IyLWxpc3Qgc29ydGFibGUtbGlzdCBzZWxlY3RlZC1pdGVtcyIgZGF0YS1jbXNtcy1jYi1pbnB1dD0ieyRzZWxlY3RhcmVhX3ByZWZpeH0iDQogICAgICAgICAgICAgICAge2lmICRtYXhOdW1iZXJ9IGRhdGEtbWF4LW51bWJlcj0ieyRtYXhOdW1iZXJ9InsvaWZ9e2lmICRyZXF1aXJlZE51bWJlcn0gZGF0YS1yZXF1aXJlZC1udW1iZXI9InskcmVxdWlyZWROdW1iZXJ9InsvaWZ9Pg0KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InBsYWNlaG9sZGVyIG5vLXNvcnQge2lmICRzZWxlY3RlZHxAY291bnQ+MH0gaGlkZGVuey9pZn0iPntpZiAkcmVxdWlyZWROdW1iZXJ9eyRtb2QtPkxhbmcoJ2Ryb3BfcmVxdWlyZWRfaXRlbXMnLCAkcmVxdWlyZWROdW1iZXIpfXtlbHNlfXskbW9kLT5MYW5nKCdkcm9wX2l0ZW1zJyl9ey9pZn08L2xpPg0KICAgICAgICAgICAgICAgICAgICB7Zm9yZWFjaCAkc2VsZWN0ZWQgYXMgJGFsaWFzID0+ICRuYW1lfQ0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0IGNmIHNvcnRhYmxlLWl0ZW0iIGRhdGEtY21zbXMtaXRlbS1pZD0ieyRhbGlhc30iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHskbmFtZX0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0ieyRtb2QtPkxhbmcoJ3JlbW92ZScpfSIgY2xhc3M9InVpLWljb24gdWktaWNvbi10cmFzaCBzb3J0YWJsZS1yZW1vdmUiPnskbW9kLT5MYW5nKCdyZW1vdmUnKX08L2E+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICB7L2ZvcmVhY2h9DQogICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2ZpZWxkc2V0Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWRfNiBvbWVnYSBkcmFnZ2FibGUtYXJlYSI+DQogICAgICAgIDxmaWVsZHNldD4NCiAgICAgICAgICAgIDxsZWdlbmQ+e2lmICRsYWJlbFJpZ2h0IT0nJ317JGxhYmVsUmlnaHR9e2Vsc2V9eyRtb2QtPkxhbmcoJ2NvbnRlbnRfYmxvY2tfbGFiZWxfYXZhaWxhYmxlJyl9ey9pZn08L2xlZ2VuZD4NCiAgICAgICAgICAgIDxkaXYgaWQ9ImF2YWlsYWJsZS1pdGVtcyI+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzb3J0YWJsZS1lY2IyLWxpc3Qgc29ydGFibGUtbGlzdCBhdmFpbGFibGUtaXRlbXMiPg0KICAgICAgICAgICAgICAgIHtmb3JlYWNoICRhdmFpbGFibGUgYXMgJGFsaWFzID0+ICRuYW1lfQ0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0IiBkYXRhLWNtc21zLWl0ZW0taWQ9InskYWxpYXN9Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JG5hbWV9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9InskbW9kLT5MYW5nKCdyZW1vdmUnKX0iIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tdHJhc2ggc29ydGFibGUtcmVtb3ZlIGhpZGRlbiI+eyRtb2QtPkxhbmcoJ3JlbW92ZScpfTwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgey9mb3JlYWNofQ0KICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9maWVsZHNldD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/_changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogRUNCMiBfY2hhbmdlbG9nLnRwbCAqfQ0KDQo8aDM+VmVyc2lvbiAxLjYuMSAtIDI3SnVsMjA8L2gzPg0KPHVsPg0KICAgPGxpPm1vdmUgaGVscCAmIGNoYW5nZWxvZyBpbnRvIHRlbXBsYXRlczwvbGk+DQogICA8bGk+QnVnIGZpeDogZm9yICdjaGVja2JveCcgdXNpbmcgZGVmYXVsdCBvZiB0cnVlIChjaGVja2VkKSAtIHdvcmsgYXJvdW5kIGZvciBjb3JlIGJ1ZzwvbGk+DQo8L3VsPg0KPGJyPg0KDQoNCjxoMz5WZXJzaW9uIDEuNiAtIDAzSnVuMjA8L2gzPg0KPHVsPg0KICAgPGxpPmFsbCAnZHJvcGRvd24nIGNvbnRlbnQgYmxvY2tzIG5vdyBoYXZlIHRoZSBvcHRpb24gZm9yIGEgJ2NvbXBhY3QnIGRpc3BsYXkgb24gdGhlIGFkbWluIHBhZ2UuIFNldCAiY29tcGFjdD0xIiBpbiB0aGUgcGFyYW1ldGVycyBhIHN1bW1hcnkgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaXMgZGlzcGxheWVkIGFuZCB0aGUgZnVsbCBzZWxlY3QgaXMgc2hvd24vaGlkZGVuIHdoZW4gJ2VkaXQvaGlkZScgaXMgY2xpY2tlZDwvbGk+DQogICA8bGk+ZmlsZV9zZWxlY3RvciBjb250ZW50IGJsb2NrIC0gdXBkYXRlZCBub3cgdXNlcyBjb3JlIG1ldGhvZCBpbnN0ZWFkIG9mIENHRXh0ZW5zaW9uczwvbGk+DQogICA8bGk+cmVtb3ZlZCBDR0V4dGVuc2lvbnMgZGVwZW5kYW5jeTwvbGk+DQogICA8bGk+QnVnIGZpeDogZGVmYXVsdCB2YWx1ZSBub3cgd29ya3MgZm9yIGNoZWNrYm94LCBpbnB1dCwgdGV4dGFyZWEgJiBlZGl0b3IgY29udGVudCBibG9ja3M8L2xpPg0KPC91bD4NCjxicj4NCg0KDQo8aDM+VmVyc2lvbiAxLjUuMyAtIDE3SnVuMTk8L2gzPg0KPHVsPg0KICAgPGxpPm1pbm9yIGJ1ZyBmaXggaW4gaGVscDwvbGk+DQo8L3VsPg0KPGJyPg0KDQoNCjxoMz5WZXJzaW9uIDEuNS4yIC0gMTlGZWIxOTwvaDM+DQo8dWw+DQogICA8bGk+YnVnIGZpeCAtIGFkbWluIGpzIHVwZGF0ZWQgLSBmaXhlcyB2MS41LjEgbXVsdGlwbGUgc2VsZWN0J3MgJiBpbnB1dF9yZXBlYXRlciBub3Qgd29ya2luZyAtIHBsZWFzZSB1cGRhdGU8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS41LjEgLSAxOEZlYjE5PC9oMz4NCjx1bD4NCiAgIDxsaT5nYWxsZXJ5X3BpY2tlciAtIGJ1ZyBmaXg8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS41IC0gMTZGZWIxOTwvaDM+DQo8dWw+DQogICA8bGk+aW5wdXRfcmVwZWF0ZXIgY29udGVudCBibG9jayAtIGFkZGVkIC0gdGhhbmtzIHRvIFNpbW9uIFJhZGZvcmQ8L2xpPg0KICAgPGxpPmdhbGxlcnlfcGlja2VyIGNvbnRlbnQgYmxvY2sgLSBhZGRlZDwvbGk+DQogICA8bGk+ZHJvcGRvd25fZnJvbV9jdXN0b21ncyBjb250ZW50IGJsb2NrIC0gYWRkZWQ8L2xpPg0KICAgPGxpPmFkZGVkIGVycm9yIG1lc3NhZ2UgZm9yIG1pc3Npbmcgb3IgaW5jb3JyZWN0bHkgc3BlbHQgZmllbGQgcGFyYW1hdGVyIC0gQlIjMTE1NTcgLSB0aGFua3MgTHVkZ2VyPC9saT4NCiAgIDxsaT5yZW1vdmVkIEFkbWluIHBhZ2UgdGhhdCBvbmx5IHNob3dlZCBoZWxwIC0gcmVkdW5kYW50IGFzIGhlbHAgZWFzaWx5IHZpc2libGUgZnJvbSB3aXRoaW4gTW9kdWxlIE1hbmFnZXI8L2xpPg0KICAgPGxpPnJlbW92ZWQgUGVybWlzc2lvbiAnVXNlIEVDQjInIC0gYWxzbyByZWR1bmRhbnQ8L2xpPg0KICAgPGxpPmNvZGUgdGlkeSB1cCAtIGNvbnNvbGlkYXRlIGpzICYgY3NzIGludG8gc2VwYXJhdGUgZXh0ZXJuYWwgZmlsZXM8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS4zLjEgLSAxMkp1bDE3PC9oMz4NCjx1bD4NCiAgIDxsaT5taW5vciBidWcgZml4PC9saT4NCjwvdWw+DQo8YnI+DQoNCjxoMz5WZXJzaW9uIDEuMyAtIDExSnVsMTc8L2gzPg0KPHVsPg0KICAgPGxpPnNvcnRhYmxlbGlzdCAtIGFkZGVkIG1heF9udW1iZXIgYW5kIHJlcXVpcmVkX251bWJlciBvcHRpb25zPC9saT4NCiAgIDxsaT5BZGRlZCAnZmllbGRzZXRfc3RhcnQnIGFuZCAnZmllbGRzZXRfZW5kJyBmaWVsZHM8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS4yLjIgLSAwNUp1bDE3PC9oMz4NCjx1bD4NCiAgIDxsaT50ZXN0IGZvciBhbmQgZGlzcGxheSB3YXJuaW5nIGluIGFkbWluIGlmIFVEVCBkb2VzIG5vdCBleGlzdDwvbGk+DQo8L3VsPg0KPGJyPg0KDQo8aDM+VmVyc2lvbiAxLjIuMSAtIDE5QXByMTc8L2gzPg0KPHVsPg0KICAgPGxpPmJ1ZyBmaXggZm9yIGNvbG9yX3BpY2tlciwgZGVmYXVsdF92YWx1ZSAtIEJSIzExMzU0IC0gdGhhbmtzIFN0dWFydDwvbGk+DQogICA8bGk+Y29sb3JfcGlja2VyIC0gdHdlYWtlZCBsYXlvdXQ8L2xpPg0KICAgPGxpPnNvcnRhYmxlbGlzdCAtIG5vdyB1c2UganF1ZXJ5IHNvcnRhYmxlIGluc3RlYWQgb2YgQ0dFeHRlbnNpb25zLiBQYXJhbWV0ZXJzIHJlbW92ZWQ6ICd0ZW1wbGF0ZScuIFBhcmFtZXRlcnMgbm90IG9wZXJhdGlvbmFsOiAnbWF4X3NlbGVjdGVkJywgJ2FsbG93ZHVwbGljYXRlcycgKHBsZWFzZSBhZHZpc2UgaWYgeW91IHJlcXVpcmUgdGhlc2UpLiBQbHVzIHNvbWUgYnVnIGZpeGVzLjwvbGk+DQo8L3VsPg0KPGJyPg0KDQo8aDM+VmVyc2lvbiAxLjIgLSAwN05vdjE2PC9oMz4NCjx1bD4NCiAgIDxsaT5BZGRlZCAnZGVzY3JpcHRpb24nIHBhcmFtZXRlciBmb3IgYWxsIGZpZWxkcyAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcjwvbGk+DQogICA8bGk+QWRkZWQgJ2hpZGRlbicgZmllbGQgLSBDYW4gYmUgdXNlZCB0byBzZXQgYSBwYWdlIGF0dHJpYnV0ZSB0aGF0IGNhbiB0aGVuIGJlIGFjY2Vzc2VkIChlLmcuIGZyb20gYSBOYXZpZ2F0b3ItVGVtcGxhdGUpLCB1c2luZyB7cGFnZV9hdHRyIHBhZ2U9JG5vZGUtPmFsaWFzIGtleT0ndGVzdGhpZGRlbid9PC9saT4NCiAgIDxsaT5CdWcgZml4IC0gZm9yIHBocCBub3RpY2U8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS4xIC0gMTVBcHIxNjwvaDM+DQo8dWw+DQogICAgPGxpPkJ1ZyBmaXg8L2xpPg0KPC91bD4NCjxicj4NCg0KPGgzPlZlcnNpb24gMS4wIC0gMTVBcHIxNjwvaDM+DQo8dWw+DQogICAgPGxpPkluaXRpYWwgcmVsZWFzZS4gQSBmb3JrIG9mIEVDQiBtb2R1bGUgdjEuNiwgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggQ01TTVMgdjIrPC9saT4NCiAgICA8bGk+QWRkZWQgcmFkaW8gZmllbGQgLSB0byBwcm92aWRlIHJhZGlvIGJ1dHRvbnMgb24gYW4gYWRtaW4gcGFnZTwvbGk+DQo8L3VsPg0KPGJyPg==]]></data>
	</file>
	<file>
	  <filename>/templates/_help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogRUNCMiBfaGVscC50cGwgKn0NCg0KDQo8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+DQoNCjxkaXYgaWQ9InBhZ2VfdGFicyI+DQogICA8ZGl2IGlkPSJnZW5lcmFsIj4NCiAgICAgIHskbW9kLT5MYW5nKCdnZW5lcmFsJyl9DQogICA8L2Rpdj4NCiAgIDxkaXYgaWQ9ImZpZWxkcyI+DQogICAgICB7JG1vZC0+TGFuZygnZmllbGRzJyl9DQogICA8L2Rpdj4NCiAgIDxkaXYgaWQ9ImFib3V0Ij4NCiAgICAgIHskbW9kLT5MYW5nKCdhYm91dCcpfQ0KICAgPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4NCg0KPGRpdiBpZD0icGFnZV9jb250ZW50Ij4NCg0KICAgPGRpdiBpZD0iZ2VuZXJhbF9jIj4NCiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICB7JG1vZC0+TGFuZygnZ2VuZXJhbF9jJyl9DQogICAgICA8L2Rpdj4NCiAgIDwvZGl2Pg0KDQogICA8ZGl2IGlkPSJmaWVsZHNfYyI+DQogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgeyRtb2QtPkxhbmcoJ2ZpZWxkc19jJyl9DQogICAgICA8L2Rpdj4NCiAgIDwvZGl2Pg0KDQogICA8ZGl2IGlkPSJhYm91dF9jIj4NCiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICB7JG1vZC0+TGFuZygnYWJvdXRfYycpfQ0KICAgICAgPC9kaXY+DQogICA8L2Rpdj4NCg0KPC9kaXY+DQo8YnI+DQoNCg0K]]></data>
	</file>
	<file>
	  <filename>/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/test/ecb2_sortable_udt_test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCANCi8vDQovLyByZXR1cm5zIGFuIGFycmF5IG9mIG9wdGlvbnMgdG8gZGlzcGxheSBpbiBFQ0IyIGxpc3Rzb3J0YWJsZTogInZhbHVlPWxhYmVsLHZhbHVlPWxhYmVsLC4uLiINCi8vIA0KLy8gICAgVURUIHN0b3JlZCBpbiBFQ0IyL3Rlc3QvZWNiMl9zb3J0YWJsZV91ZHRfdGVzdC5waHANCi8vICAgICAgIC0gY29weSBpbnRvIFVEVCAnZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCcNCg0KJG9wdGlvbnMgPSBhcnJheSgNCiAgICdvcHRpb24xJyA9PiAnVGVzdCBPcHRpb24gMScsDQogICAnb3B0aW9uMicgPT4gJ1Rlc3QgMjIyMjIyMicsDQogICAnb3B0aW9uMycgPT4gJ1Rlc3QgbnVtYmVyIDMnLA0KICAgJ29wdGlvbjQnID0+ICdUZXN0IDQ0NDQ0NDQnLA0KICAgJ29wdGlvbjUnID0+ICdUZXN0IExBU1QgIzUnDQopOw0KDQpyZXR1cm4gJG9wdGlvbnM7]]></data>
	</file>
</module>
