<?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>SmartyExt</name>
	<version>1.0</version>
    <mincmsversion>2.1.4</mincmsversion>
	<help><![CDATA[PHNjcmlwdCBzcmM9Imh0dHA6Ly9sb2NhbGhvc3QvY21zbXMyMjE0bWFtcy9tb2R1bGVzL1NtYXJ0eUV4dC9qcy9qcy5jb29raWUuanMiPjwvc2NyaXB0Pgo8c2NyaXB0PgpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgdmFyIGFjdGl2ZV90YWIgPSBDb29raWVzLmdldCgnX2FjdGl2ZScpOwoKICBpZih0eXBlb2YgYWN0aXZlX3RhYiA9PT0gInVuZGVmaW5lZCIpCiAgewogICAgX3NldF9hY3RpdmVfdGFiKCdnZW5lcmFsJyk7CiAgfQogIGVsc2UKICB7CiAgICBfc2V0X2FjdGl2ZV90YWIoYWN0aXZlX3RhYik7CiAgfQoKICAkKCcjcGFnZV90YWJzID4gZGl2JykKICAgIC5lYWNoKGZ1bmN0aW9uKCkKICAgICAgICAgIHsKICAgICAgICAgICAgJCh0aGlzKS5jbGljayhmdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29va2llcy5zZXQoJ19hY3RpdmUnLCB0aGlzLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwp9KTsKCgpmdW5jdGlvbiBfc2V0X2FjdGl2ZV90YWIodGFiX25hbWUpCnsKICAkKCcjcGFnZV90YWJzID4gZGl2JykKICAgIC5lYWNoKGZ1bmN0aW9uKCkKICAgICAgICAgIHsKICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7CiAgICAgICAgICB9KTsKCiAgJCgnI3BhZ2VfY29udGVudCA+IGRpdicpCiAgICAuZWFjaChmdW5jdGlvbigpCiAgICAgICAgICB7CiAgICAgICAgICAgICQodGhpcykuaGlkZSgpOwogICAgICAgICAgfSk7CgogICQoJyMnICsgdGFiX25hbWUpLmFkZENsYXNzKCdhY3RpdmUnKTsKICAkKCcjJyArIHRhYl9uYW1lICsgJ19jJykuc2hvdygpOwogIENvb2tpZXMuc2V0KCdfYWN0aXZlJywgdGFiX25hbWUpOwoKfQo8L3NjcmlwdD4KPGRpdiBpZD0icGFnZV90YWJzIj4KICA8ZGl2ICBpZD0iZ2VuZXJhbCI+CiAgICAgIEdlbmVyYWwKICA8L2Rpdj4KICA8ZGl2ICBpZD0icGx1Z2lucyI+CiAgICAgIFBsdWdpbnMKICA8L2Rpdj4KICA8ZGl2ICBpZD0iY2xhc3MiPgogICAgICBDbGFzcwogIDwvZGl2PgogIDxkaXYgaWQ9ImFib3V0Ij4KICAgICBBYm91dAogIDwvZGl2Pgo8L2Rpdj4KPGRpdiBpZD0icGFnZV9jb250ZW50Ij4KICA8ZGl2IGlkPSJnZW5lcmFsX2MiPgogICAgPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgc2ltcGxlIHNtYXJ0eSB1dGlsaXRpZXMgZm9yIHVzZSBpbiBhcHBsaWNhdGlvbnMgb3IgZm9yIGN1c3RvbWl6aW5nIHRoZSBiZWhhdmlvdXIgb2YgeW91ciBDTVMgTWFkZSBTaW1wbGUgcGFnZXMuPC9wPgogIDwvZGl2PgogIDxkaXYgaWQ9InBsdWdpbnNfYyI+CiAgICA8aDQ+U21hcnR5IHBsdWdpbnM8L2g0Pgo8dWw+CiAgICA8bGk+PHN0cm9uZz4mIzEyMzttb2RfYWN0aW9uX3VybH08L3N0cm9uZz4KICAgIDxwPkEgc21hcnR5IHBsdWdpbiB0aGF0IGNhbiBjcmVhdGUgYSB1cmwgdG8gYSBtb2R1bGUgYWN0aW9uLjwvcD4KICAgIDxwPkFyZ3VtZW50czoKICAgICAgIDx1bD4KICAgICAgIDxsaT5tb2R1bGUgLSBUaGUgbW9kdWxlIHRvIGNyZWF0ZSBhIGxpbmsgdG8uICBUaGlzIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCB0aGUgc3lzdGVtIHdpbGwgYXR0ZW1wdCB0byBkZXRlY3QgdGhlIGN1cnJlbnQgbW9kdWxlIG5hbWUgKGlmIHdpdGhpbiBhIG1vZHVsZSBhY3Rpb24pPC9saT4KICAgICAgIDxsaT5hY3Rpb24gKGRlZmF1bHQpIC0gVGhlIGFjdGlvbiB0byBjYWxsIHdpdGhpbiB0aGUgbW9kdWxlPC9saT4KICAgICAgIDxsaT5wYWdlIC0gU3BlY2lmeSB0aGUgZGVzdGluYXRpb24gcGFnZTwvbGk+CiAgICAgICA8bGk+anNmcmllbmRseXxmb3JqcyAtIFR1cm5zIG9uIHRoZSB1cmxvbmx5IHBhcmFtZXRlciwgYW5kIGluZGljYXRlcyB0aGF0IGphdmFzY3JpcHQgZnJpZW5kbHkgdXJscyBhcmUgb3V0cHV0LjwvbGk+CiAgICAgICA8bGk+Zm9yYWpheCAtIFR1cm5zIG9uIHRoZSBqc2ZyaWVuZGx5IHBhcmFtZXRlciAoYW5kIHRoZSB1cmxvbmx5IHBhcmFtZXRlciksIGFuZCBhbHNvIGFwcGVuZHMgc2hvd3RlbXBsYXRlPWZhbHNlIHRvIHRoZSBVUkwgb3V0cHV0IGZvciBBSkFYIHJlcXVlc3RzPC9saT4KICAgICAgIDxsaT5hc3NpZ24gLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGUgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgIDwvdWw+CiAgICA8YnIvPjwvcD4KICAgICAgPHA+QW55IG90aGVyIGFyZ3VtZW50cyB0byB0aGUgc21hcnR5IHBsdWdpbiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBVUkwgZ2VuZXJhdGVkLjwvcD4gICA8cD5FeGFtcGxlOgogICAgPHByZT4mIzEyMzttb2RfYWN0aW9uX3VybCBtb2R1bGU9J05ld3MnIGFjdGlvbj0nZmVzdWJtaXQnIGFzc2lnbj0nZm9vJ308L3ByZT48YnIvPjwvcD48L2xpPgoKICAgIDxsaT48c3Ryb25nPiYjMTIzO21vZF9hY3Rpb25fbGlua308L3N0cm9uZz4KICAgIDxwPkEgc21hcnR5IHBsdWdpbiB0aGF0IGNhbiBjcmVhdGUgYSBsaW5rIHRvIGEgbW9kdWxlIGFjdGlvbi48L3A+CiAgICA8cD5Bcmd1bWVudHM6CiAgICAgICA8dWw+CiAgICAgICA8bGk+bW9kdWxlIC0gVGhlIG1vZHVsZSB0byBjcmVhdGUgYSBsaW5rIHRvLiAgVGhpcyBhcmd1bWVudCBpcyBvcHRpb25hbCwgdGhlIHN5c3RlbSB3aWxsIGF0dGVtcHQgdG8gZGV0ZWN0IHRoZSBjdXJyZW50IG1vZHVsZSBuYW1lIChpZiB3aXRoaW4gYSBtb2R1bGUgYWN0aW9uKTwvbGk+CiAgICAgICA8bGk+YWN0aW9uIChkZWZhdWx0KSAtIFRoZSBhY3Rpb24gdG8gY2FsbCB3aXRoaW4gdGhlIG1vZHVsZTwvbGk+CiAgICAgICA8bGk+dGV4dCAtIFRoZSB0ZXh0IHRvIHB1dCBpbiB0aGUgbGluazwvbGk+CiAgICAgICA8bGk+cGFnZSAtIFNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIHBhZ2U8L2xpPgogICAgICAgPGxpPnVybG9ubHkgLSBJbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBsaW5rLCBnZW5lcmF0ZSBqdXN0IHRoZSB1cmw8L2xpPgogICAgICAgPGxpPmpzZnJpZW5kbHl8Zm9yanMgLSBUdXJucyBvbiB0aGUgdXJsb25seSBwYXJhbWV0ZXIsIGFuZCBpbmRpY2F0ZXMgdGhhdCBqYXZhc2NyaXB0IGZyaWVuZGx5IHVybHMgYXJlIG91dHB1dC48L2xpPgogICAgICAgPGxpPmZvcmFqYXggLSBUdXJucyBvbiB0aGUganNmcmllbmRseSBwYXJhbWV0ZXIgKGFuZCB0aGUgdXJsb25seSBwYXJhbWV0ZXIpLCBhbmQgYWxzbyBhcHBlbmRzIHNob3d0ZW1wbGF0ZT1mYWxzZSB0byB0aGUgVVJMIG91dHB1dCBmb3IgQUpBWCByZXF1ZXN0czwvbGk+CiAgICAgICA8bGk+Y29uZm1lc3NhZ2UgLSBBIGNvbmZpcm1hdGlvbiBtZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiB0aGUgbGluayBpcyBjbGlja2VkLjwvbGk+CiAgICAgICA8bGk+aW1hZ2UgLSBBbiBpbWFnZSB0byB1c2Ugb24gdGhlIGxpbms8L2xpPgogICAgICAgPGxpPmltYWdlb25seSAtIElmIGFuIGltYWdlIGlzIHNwZWNpZmllZCwgY3JlYXRlIGEgbGluayBvbmx5IGNvbnNpc3Rpbmcgb2YgdGhlIGltYWdlLiAgVGhlIHRleHQgd2lsbCBiZSB1c2VkIGZvciB0aGUgdGl0bGUgYXR0cmlidXRlPC9saT4KICAgICAgIDxsaT5hc3NpZ24gLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGUgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4KICAgICAgIDwvdWw+CiAgICA8YnIvPjwvcD4KICAgICAgPHA+QW55IG90aGVyIGFyZ3VtZW50cyB0byB0aGUgc21hcnR5IHBsdWdpbiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBVUkwgZ2VuZXJhdGVkLjwvcD4gICA8cD5FeGFtcGxlOgogICAgPHByZT4mIzEyMzttb2RfYWN0aW9uX2xpbmsgbW9kdWxlPSdOZXdzJyBhY3Rpb249J2Zlc3VibWl0JyB0ZXh0PSdTdWJtaXQgYSBOZXcgTmV3cyBBcnRpY2xlJ308L3ByZT48YnIvPjwvcD48L2xpPgoKICAgIDxsaT48c3Ryb25nPiYjMTIzO3h0X2FuY2hvcl9saW5rfTwvc3Ryb25nPgogICAgPHA+QSBzbWFydHkgcGx1Z2luIHRvIGdlbmVyYXRlIGEgbGluayB0byBhbiBhbmNob3IgdGhhdCBpcyBvbiB0aGUgc2FtZSBwYWdlLjwvcD4KICAgIDxwPkFyZ3VtZW50czoKICAgICAgPHVsPgogICAgICA8bGk+bnxuYW1lIC0gPGVtPihzdHJpbmcpPC9lbT4gVGhlIG5hbWUgb2YgdGhlIGFuY2hvciB0byBsaW5rIHRvLjwvbGk+CiAgICAgIDxsaT50ZXh0IC0gPGVtPihzdHJpbmc+PC9lbT4gVGhlIHRleHQgcG9ydGlvbiBvZiB0aGUgbGluay4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBhbmNob3IgbmFtZSB3aWxsIGJlIHVzZWQuPC9saT4KICAgICAgPGxpPnVybG9ubHkgLSA8ZW0+KGJvb2wpPC9lbT4gT3B0aW9uYWxseSBvbmx5IGdlbmVyYXRlIHRoZSBVUkwgcG9ydGlvbiBvZiB0aGUgbGluay4gIHNlZSBzbXg6OmFuY2hvcl91cmwoKTwvbGk+CiAgICAgIDxsaT5hc3NpZ24gLSA8ZW0+KHN0cmluZz48L2VtPiBPcHRpb25hbGx5IGFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoZSBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgICA8L3VsPgogICAgICA8L3A+CiAgICAgIDxwPkFueSBvdGhlciBhcmd1bWVudHMgdG8gdGhlIHNtYXJ0eSBwbHVnaW4gd2lsbCBiZSBhZGRlZCBhcyBhdHRyaWJ1dGVzIHRvIHRoZSBsaW5rIGdlbmVyYXRlZC48L3A+CiAgICA8cD5FeGFtcGxlOiA8cHJlPiYjMTIzO3h0X2FuY2hvcl9saW5rIG5hbWU9Ym90dG9tIGNsYXNzPSJhbmNob3JfY2xhc3MiIGlkPSJhbmNob3JfaWQifTwvcHJlPjwvcD4KICAgIDwvbGk+CgogICAgPGxpPjxzdHJvbmc+JiMxMjM7c2Vzc19wdXR9PC9zdHJvbmc+CiAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gc3RvcmUgZGF0YSBpbiB0aGUgdXNlciBzZXNzaW9uLiBUaGlzIGRhdGEgaXMgdGhlbiBhY2Nlc3NpYmxlIHZpYSB0aGUgJHNtYXJ0eS5zZXNzaW9uIGFycmF5IGluIHN1YnNlcXVlbnQgcGFnZXMuPC9wPgogICAgPHA+QXJndW1lbnRzOgogICAgICAgPHVsPgogICAgICAgPGxpPnZhciAtIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBjcmVhdGUgaW4gdGhlIHNlc3Npb24uPC9saT4KICAgICAgIDxsaT52YWx1ZSAtIFRoZSBkZXNpcmVkIHZhbHVlIG9mIHRoZSB2YXJpYWJsZS48L2xpPgogICAgICAgPC91bD4KICAgIDxici8+PC9wPgogICAgICA8cD5FeGFtcGxlOgogICAgPHByZT4mIzEyMztzZXNzX3B1dCB2YXI9J3Rlc3QnIHZhbHVlPSdibGFoJ308L3ByZT48YnIvPjwvcD48L2xpPgoKICAgIDxsaT48c3Ryb25nPiYjMTIzO3Nlc3NfZXJhc2V9PC9zdHJvbmc+CiAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gZXJhc2UgZGF0YSBmcm9tIHRoZSB1c2VyIHNlc3Npb24uPC9wPgogICAgPHA+QXJndW1lbnRzOgogICAgICAgPHVsPgogICAgICAgPGxpPnZhciAtIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBlcmFzZSBpbiB0aGUgc2Vzc2lvbi48L2xpPgogICAgICAgPC91bD4KICAgIDxici8+PC9wPgogICAgICA8cD5FeGFtcGxlOgogICAgPHByZT4mIzEyMztzZXNzX2VyYXNlIHZhcj0ndGVzdCd9PC9wcmU+PGJyLz48L3A+PC9saT4KCiAgICA8bGk+PHN0cm9uZz4mIzEyMzt4dF9yZXBlYXR9PC9zdHJvbmc+CiAgICA8cD5Bbm90aGVyIHNtYXJ0eSBwbHVnaW4gdGhhdCB3aWxsIGFsbG93IHJlcGVhdGluZyB0ZXh0PC9wPgogICAgPHA+QXJndW1lbnRzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT50ZXh0IC0gVGhlIHRleHQgdG8gYmUgcmVwZWF0ZWQ8L2xpPgogICAgICAgIDxsaT5jb3VudCAtIFRoZSBudW1iZXIgb2YgdGltZXMgaXQgc2hvdWxkIGJlIHJlcGVhdGVkPC9saT4KICAgICAgICA8bGk+YXNzaWduIC0gQXNzaWduIHRoZSBvdXRwdXQgdG8gdGhlIHNwZWNpZmllZCBzbWFydHkgdmFyaWFibGU8L2xpPgogICAgICA8L3VsPgogICAgPGJyLz4KICAgIDxwPkV4YW1wbGU6IDxwcmU+JiMxMjM7eHRfcmVwZWF0IHRleHQ9J3RoaXMnIGNvdW50PSc1J308L3ByZT48YnIvPjwvcD4KICAgIDwvbGk+CiAgPC9kaXY+CiAgPGRpdiBpZD0iY2xhc3NfYyI+CiAgICA8aDQ+U21hcnR5IFVzYWJsZSBDbGFzczwvaDQ+CjxwPldoZW4gdGhpcyBtb2R1bGUgaXMgaW5zdGFsbGVkLCBhIG5ldyBzbWFydHkgY2xhc3MgbmFtZWQgc214IGlzIGF1dG9tYXRpY2FsbHkgYXZhaWxhYmxlIHRvIHlvdXIgcGFnZSB0ZW1wbGF0ZXMgYW5kIHZhcmlvdXMgbW9kdWxlIHRlbXBsYXRlcy4gIFRoaXMgc21hcnR5IGNsYXNzIGhhcyBudW1lcm91cyBmdW5jdGlvbnMgdGhhdCB5b3UgY2FuIGNhbGwgYXQgYW55IHRpbWUuPC9wPgo8aDU+QXZhaWxhYmxlIEZ1bmN0aW9uczo8L2g1Pgo8dWw+Cgo8bGk+PHN0cm9uZz54dF9zZXR2YXI8L3N0cm9uZz4obmFtZT12YWx1ZSBbbmFtZTI9dmFsdWUyWyBuYW1lMz12YWx1ZTNdXSkKICAgPHA+Rm9yIHVzZSB3aGVuIHNtYXJ0eSB2YXJpYWJsZSBzY29wZSBpcyBiZWluZyBwcm9ibGVtYXRpYy4gVGhpcyBwbHVnaW4gd2lsbCBzdG9yZSBkYXRhIG91dHNpZGUgb2Ygc21hcnR5IHRvIGFsbG93IHRoYXQgZGF0YSB0byBiZSByZWNhbGxlZCBpbiBhIHN1YiB0ZW1wbGF0ZSBvciBhdCBhIGxhdGVyIHBsYWNlIGluIHRoZSBzYW1lIHRlbXBsYXRlLjwvcD4KICAgPHA+RXhhbXBsZTogIDxjb2RlPiYjMTIzO3h0X3NldHZhciBmb289J2JhcicgZm9vMj0nYmFyMicgZm9vMz0nYmFyMyd9PC9jb2RlPjwvcD4KICAgPGJyLz4KPC9saT4KCjxsaT48c3Ryb25nPnh0X3Vuc2V0dmFyPC9zdHJvbmc+KG5hbWU9dmFsdWUgW25hbWUyPXZhbHVlMiBbbmFtZTM9dmFsdWUzXV0pCiAgIDxwPkZvciB1c2Ugd2hlbiBzbWFydHkgdmFyaWFibGUgc2NvcGUgaXMgYmVpbmcgcHJvYmxlbWF0aWMsIHRoaXMgcGx1Z2luIGFsbG93cyBlcmFzaW5nIGRhdGEgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIHRoZSAmIzEyMztzZXR2YXJ9IHBsdWdpbi48L3A+CiAgIDxwPkFyZ3VtZW50czoKICAgICAgPHVsPgogICAgICAgIDxsaT51bnNldCAtIHJlcXVpcmVkIDogQSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIG9mIHRoZSBuYW1lcyBvZiBkYXRhIHByZXZpb3VzbHkgY3JlYXRlZCB3aXRoIDxjb2RlPiYjMTIzO3NldHZhcn08L2NvZGU+PC9saT4KICAgICAgPC91bD4KICA8L3A+CiAgPHA+RXhhbXBsZTogIDxjb2RlPiYjMTIzO3h0X3Vuc2V0dmFyIHVuc2V0PSdmb28yLGZvbzMnfTwvY29kZT48L3A+CiAgIDxici8+CjwvbGk+Cgo8bGk+PHN0cm9uZz54dF9nZXR2YXI8L3N0cm9uZz4odmFyPW5hbWUgW2RmbHQ9dmFsdWVdIFthc3NpZ249bmFtZSBbc2NvcGU9Z2xvYmFsfGxvY2FsXV0pCiAgPHA+Rm9yIHVzZSB3aGVuIHNtYXJ0eSB2YXJpYWJsZSBzY29wZSBpcyBiZWluZyBwcm9ibGVtYXRpYy4gIFRoaXMgcGx1Z2luIHdpbGwgcmV0cmlldmUgZGF0YSBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aCB0aGUgJiMxMjM7c2V0dmFyfSBwbHVnaW4uICBZb3UgY2FuIG9wdGlvbmFsbHkgYXNzaWduIHRoZSBkYXRhIHRvIGEgbmV3IGxvY2FsLCBvciBnbG9iYWwgc21hcnR5IHZhcmlhYmxlLjwvcD4KICA8cD5Bcmd1bWVudHM6CiAgICAgPHVsPgogICAgICAgPGxpPnZ8dmFyICAtIHJlcXVpcmVkIDogVGhlIG5hbWUgb2YgdGhlIHN0b3JlZCBkYXRhIHRvIHJldHJpZXZlLjwvbGk+CiAgICAgICA8bGk+ZGZsdCAgIC0gb3B0aW9uYWwgOiBBIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgbmFtZWQgdmFyaWFibGUgc3BlY2lmaWVkIGluIHRoZSB2YXIgYXJndW1lbnQgZG9lcyBub3QgZXhpc3QuPC9saT4KICAgICAgIDxsaT5hc3NpZ24gLSBvcHRpb25hbCA6IEluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBvdXRwdXQgZGF0YSBhc3NpZ24gdGhlIGRhdGEgdG8gdGhlIG5hbWVkIHNwYXJ0eSB2YXJpYWJsZS48L2xpPgogICAgICAgPGxpPnNjb3BlICAtIG9wdGlvbmFsIDogRm9yIHVzZSBvbmx5IHdoZW4gdGhlIGFzc2lnbiBhcmd1bWVudCBpcyB1c2VkLCBhZGRpdGlvbmFsbHkgYXNzaWduIHRoZSBvdXRwdXQgZGF0YSB0byBhIHNtYXJ0eSB2YXJpYWJsZSB0byB0aGUgZ2xvYmFsIHNjb3BlLjwvbGk+CiAgICAgPC91bD4KICA8L3A+CiAgPHA+RXhhbXBsZTEgLSBPdXRwdXQgYSBwcmV2aW91c2x5IHNldCB2YXJpYWJsZSB0byB0aGUgdGVtcGxhdGU6IDxjb2RlPiYjMTIzO3h0X2dldHZhciB2YXI9Zm9vfTwvY29kZT48L3A+CiAgPHA+RXhhbXBsZTIgLSBPdXRwdXQgYSBwcmV2aW91c2x5IHNldCB2YXJpYWJsZSB0byB0aGUgdGVtcGxhdGUuICBJZiBpdCBkb2VzIG5vdCBleGlzdCwgdXNlIGEgZGVmYXVsdCB2YWx1ZS46IDxjb2RlPiYjMTIzO3h0X2dldHZhciB2YXI9Zm9vIGRmbHQ9J3NvbWV0aGluZyd9PC9jb2RlPjwvcD4KICA8cD5FeGFtcGxlMyAtIE91dHB1dCBhIHByZXZpb3VzbHkgc2V0IHZhcmlhYmxlIHRvIGEgbG9jYWwgc21hcnR5IHZhcmlhYmxlOiA8Y29kZT4mIzEyMzt4dF9nZXR2YXIgdmFyPWZvbyBhc3NpZ249J2Zvbyd9JiMxMjM7JGZvb308L2NvZGU+PC9wPgogIDxwPkV4YW1wbGU0IC0gT3V0cHV0IGEgcHJldmlvdXNseSBzZXQgdmFyaWFibGUgdG8gYSBnbG9iYWwgc21hcnR5IHZhcmlhYmxlOiA8Y29kZT4mIzEyMzt4dF9nZXR2YXIgdmFyPWZvbyBhc3NpZ249J2Zvbycgc2NvcGU9J2dsb2JhbCd9JiMxMjM7JGZvb308L2NvZGU+PC9wPgogIDxici8+CjwvbGk+CgoKPGJyLz4KPGxpPjxzdHJvbmc+c214OjpzZWxmX3VybDwvc3Ryb25nPigpCiAgICA8cD5SZXR1cm4gdGhlIGN1cnJlbnQgVVJMPC9wPgo8L2xpPgoKPGJyLz4KPGxpPjxzdHJvbmc+c214OjphbmNob3JfdXJsPC9zdHJvbmc+KCRuYW1lKQogIDxwPkdlbmVyYXRlIHRoZSBhYnNvbHV0ZSBVUkwgdG8gYW4gYW5jaG9yIHRoYXQgaXMgb24gdGhlIHNhbWUgcGFnZS48L3A+CiAgPHA+QXJndW1lbnRzOgogICAgPHVsPgogICAgICA8bGk+JG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgYW5jaG9yIHRvIGxpbmsgdG8uPC9saT4KICAgIDwvdWw+CiAgPGJyLz48L3A+CiAgPHA+RXhhbXBsZTo8YnIvPgogICAgPHByZT4mbHQ7YSBocmVmPSImIzEyMztzbXg6OmFuY2hvcl91cmwoJ2JvdHRvbScpfSImZ3Q7R28gdG8gdGhlIGJvdHRvbSZsdDsvYSZndDsKJmx0O2EgbmFtZT0iYm90dG9tIiZndDtUaGUgYm90dG9tJmx0O2EmZ3Q7PC9wcmU+PGJyLz4KICA8L3A+CjwvbGk+Cgo8YnIvPgo8bGk+PHN0cm9uZz5zbXg6Om1vZHVsZV9pbnN0YWxsZWQ8L3N0cm9uZz4oJG1vZHVsZW5hbWUpCiAgICA8cD5UZXN0IGlmIGEgcGFydGljdWxhciBtb2R1bGUgaXMgaW5zdGFsbGVkLjwvcD4KICAgIDxwPkFyZ3VtZW50czoKICAgICAgIDx1bD4KICAgICAgICAgPGxpPiRtb2R1bGVuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBjaGVjazwvbGk+CiAgICAgIDwvdWw+CiAgICA8YnIvPjwvcD4KICA8cD5FeGFtcGxlOjxici8+CiAgICA8cHJlPiYjMTIzO2lmIHNteDo6bW9kdWxlX2luc3RhbGxlZCgnRnJvbnRFbmRVc2VycycpfUZvdW5kIEZFVSYjMTIzOy9pZn08L3ByZT48YnIvPgogIDwvcD4KPC9saT4KCjxici8+CjxsaT48c3Ryb25nPnNteDo6bW9kdWxlX3ZlcnNpb248L3N0cm9uZz4oJG1vZHVsZW5hbWUpCiAgICA8cD5SZXR1cm4gdGhlIHZlcnNpb24gbnVtYmVyIG9mIGEgc3BlY2lmaWMgaW5zdGFsbGVkIG1vZHVsZTwvcD4KICAgIDxwPkFyZ3VtZW50czoKICAgICAgIDx1bD4KICAgICAgICAgPGxpPiRtb2R1bGVuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBjaGVjazwvbGk+CiAgICAgIDwvdWw+CiAgICA8YnIvPjwvcD4KICA8cD5FeGFtcGxlOjxici8+CiAgICA8cHJlPiYjMTIzOyR2ZXJzaW9uPXNteDo6bW9kdWxlX3ZlcnNpb24oJ0Zyb250RW5kVXNlcnMnKX1XZSBoYXZlIFZlcnNpb24gJiMxMjM7JGZldV92ZXJzaW9ufSBvZiBGcm9udEVuZFVzZXJzPC9wcmU+PGJyLz4KICA8L3A+CjwvbGk+Cgo8YnIvPgo8bGk+PHN0cm9uZz5zbXg6OmdldF9wYXJlbnRfYWxpYXM8L3N0cm9uZz4oWyRhbGlhc10pCiAgICA8cD5SZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2VzIHBhcmVudC4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlcmUgaXMgbm8gcGFyZW50LjwvcD4KICAgIDxwPkFyZ3VtZW50czoKICAgICAgIDx1bD4KICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgcGFyZW50IG9mLiAgSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4KICAgICAgIDwvdWw+CiAgICA8YnIvPjwvcD4KICA8cD5FeGFtcGxlOjxici8+CiAgICA8cHJlPlRoZSBwYXJlbnQgcGFnZSBhbGlhcyBpcyAmIzEyMztzbXg6OmdldF9wYXJlbnRfYWxpYXMoKX08L3ByZT48YnIvPgogIDwvcD4KPC9saT4KCjxici8+CjxsaT48c3Ryb25nPnNteDo6aXNfY2hpbGRfb2Y8L3N0cm9uZz4oJHRlc3RfcGFyZW50LCR0ZXN0X2NoaWxkKQogICAgPHA+VGVzdHMgd2hldGhlciBvciBub3QgdGhlIHNwZWNpZmllZCBjaGlsZCBhbGlhcyBvciBhbmNlc3RvciBpcyBhIGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQgcGFyZW50IGFsaWFzLgogICAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB0ZXN0IHRoZSByb290IGFsaWFzIG9yIGFueSBwYXJlbnQgcGFnZS4gIEl0IGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgb24gc2l0ZXMgd2l0aCBtdWx0aXBsZSBsZXZlbHMgb2Ygb3JnYW5pemF0aW9uLgogICAgPC9wPgogICAgPHA+QXJndW1lbnRzOgogICAgICAgPHVsPgogICAgICAgPGxpPiR0ZXN0X3BhcmVudCAtIHN0cmluZyBUaGUgcGFyZW50IHBhZ2UgYWxpYXMgdG8gdGVzdCBhZ2FpbnN0LjwvbGk+CiAgICAgICA8bGk+JHRlc3RfY2hpbGQgLSBzdHJpbmcgVGhlIGNoaWxkIHBhZ2UgYWxpYXMgdG8gdGVzdCBhZ2FpbnN0LjwvbGk+CiAgICAgICA8L3VsPgogICAgPGJyLz48L3A+CiAgPHA+RXhhbXBsZTo8YnIvPgogICAgPHByZT4mIzEyMztpZiBzbXg6OmlzX2NoaWxkX29mKCdob21lJywkcGFnZV9hbGlhcyl9IFRoaXMgaXMgYSBjaGlsZCBvZiB0aGUgaG9tZSBwYWdlICYjMTIzOy9pZn08L3ByZT48YnIvPgogIDwvcD4KPC9saT4KCjxici8+CjxsaT48c3Ryb25nPnNteDo6Z2V0X3Jvb3RfYWxpYXM8L3N0cm9uZz4oWyRhbGlhc10pCiAgICA8cD5SZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2VzIHJvb3QgcGFyZW50LiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyByb290IHBhcmVudC48L3A+CiAgICA8cD5Bcmd1bWVudHM6CiAgICAgICA8dWw+CiAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHJvb3QgcGFyZW50IG9mLiAgSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4KICAgICAgIDwvdWw+CiAgICA8YnIvPjwvcD4KICA8cD5FeGFtcGxlOjxici8+CiAgICA8cHJlPlRoZSByb290IHBhcmVudCBwYWdlIGFsaWFzIGlzICYjMTIzO3NteDo6Z2V0X3Jvb3RfYWxpYXMoKX08L3ByZT48YnIvPgogIDwvcD4KPC9saT4KCjxici8+CjxsaT48c3Ryb25nPnNteDo6Z2V0X3BhZ2VfdGl0bGU8L3N0cm9uZz4oWyRhbGlhc10pCiAgICA8cD5SZXR1cm5zIHRoZSB0aXRsZSBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UuPC9wPgogICAgPHA+QXJndW1lbnRzOgogICAgICAgPHVsPgogICAgICAgPGxpPlskYWxpYXNdIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSB0aXRsZSBvZi4gIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgICA8L3VsPgogICAgPGJyLz48L3A+CiAgPHA+RXhhbXBsZTo8YnIvPgogICAgPHByZT5UaGUgdGl0bGUgb2YgdGhlIGN1cnJlbnQgcGFnZSBpcyAmIzEyMztzbXg6OmdldF9wYWdlX3RpdGxlKCl9PC9wcmU+PGJyLz4KICA8L3A+CjwvbGk+Cgo8YnIvPgo8bGk+PHN0cm9uZz5zbXg6OmdldF9wYWdlX21lbnV0ZXh0PC9zdHJvbmc+KFskYWxpYXNdKQogICAgPHA+UmV0dXJucyB0aGUgbWVudXRleHQgb2YgdGhlIHNwZWNpZmllZCBwYWdlLjwvcD4KICAgIDxwPkFyZ3VtZW50czoKICAgICAgIDx1bD4KICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgdGl0bGUgb2YuICBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPgogICAgICAgPC91bD4KICAgIDxici8+PC9wPgogIDxwPkV4YW1wbGU6PGJyLz4KICAgIDxwcmU+VGhlIG1lbnV0ZXh0IG9mIHRoZSBjdXJyZW50IHBhZ2UgaXMgJiMxMjM7c214OjpnZXRfcGFnZV9tZW51dGV4dCgpfTwvcHJlPjxici8+CiAgPC9wPgo8L2xpPgoKPGJyLz4KPGxpPjxzdHJvbmc+c214OjpnZXRfcGFnZV90eXBlPC9zdHJvbmc+KFskYWxpYXNdKQogICAgPHA+UmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY29udGVudCB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY29udGVudCBvYmplY3QgKGJ5IGFsaWFzKTwvcD4KICAgIDxwPkFyZ3VtZW50czoKICAgICAgIDx1bD4KICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgdGl0bGUgb2YuICBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPgogICAgICAgPC91bD4KICAgIDxici8+PC9wPgogIDxwPkV4YW1wbGU6PGJyLz4KICAgIDxwcmU+VGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgcGFnZSBpcyAmIzEyMztzbXg6OmdldF9wYWdlX3R5cGUoKX08L3ByZT48YnIvPgogIDwvcD4KPC9saT4KCjxici8+CjxsaT48c3Ryb25nPnNteDo6aGFzX2NoaWxkcmVuPC9zdHJvbmc+KFskYWxpYXNdKQogICAgPHA+VGVzdCBpZiB0aGUgc3BlY2lmaWVkIHBhZ2UgaGFzIGNoaWxkcmVuLjwvcD4KICAgIDxwPkFyZ3VtZW50czoKICAgICAgIDx1bD4KICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gdGVzdC4gIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgICA8L3VsPgogICAgPGJyLz48L3A+CiAgPHA+RXhhbXBsZTo8YnIvPgogICAgPHByZT4mIzEyMzskaGFzX2NoaWxkcmVuPXNteDo6aGFzX2NoaWxkcmVuKCl9JiMxMjM7aWYgJGhhc19jaGlsZHJlbn1UaGUgY3VycmVudCBwYWdlIGhhcyBjaGlsZHJlbiYjMTIzO2Vsc2V9VGhlIGN1cnJlbnQgcGFnZSBoYXMgbm8gY2hpbGRyZW4mIzEyMzsvaWZ9PC9wcmU+PGJyLz4KICA8L3A+CjwvbGk+Cgo8YnIvPgo8bGk+PHN0cm9uZz5zbXg6OmdldF9jaGlsZHJlbjwvc3Ryb25nPihbJGFsaWFzXVssJHNob3dpbmFjdGl2ZV0pCiAgIDxwPlJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGEgcGFnZXMgY2hpbGRyZW4gKGlmIGFueSk8L3A+CiAgICA8cD5Bcmd1bWVudHM6CiAgICAgICA8dWw+CiAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIHRlc3QuICBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPgogICAgICAgPGxpPlskc2hvd2luYWN0aXZlXSAtIChvcHRpb25hbCkgV2V0aGVyIGluYWN0aXZlIHBhZ2VzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0IChkZWZhdWx0cyB0byBmYWxzZSkuPC9saT4KICAgICAgIDwvdWw+CiAgICA8YnIvPjwvcD4KICA8cD5GaWVsZHM6CiAgICAgICA8dWw+CiAgICAgICA8bGk+YWxpYXMgLSB0aGUgcGFnZSBhbGlhcyBvZiB0aGUgY2hpbGQ8L2xpPgogICAgICAgPGxpPmlkIC0gdGhlIHBhZ2UgaWQgb2YgdGhlIGNoaWxkPC9saT4KICAgICAgIDxsaT50aXRsZSAtIHRoZSB0aXRsZSBwYWdlIG9mIHRoZSBjaGlsZCBwYWdlLjwvbGk+CiAgICAgICA8bGk+bWVudXRleHQgLSB0aGUgbWVudSB0ZXh0IG9mIHRoZSBjaGlsZDwvbGk+CiAgICAgICA8bGk+c2hvd19pbl9tZW51IC0gd2V0aGVyIHRoaXMgY2hpbGQgcGFnZSBpcyB2aXNpYmxlIGluIG1lbnVzLjwvbGk+CiAgICAgICA8bGk+dHlwZSAtIFRoZSB0eXBlIG9mIGNoaWxkIGNvbnRlbnQgb2JqZWN0LjwvbGk+CiAgICAgICA8L3VsPgogICAgPGJyLz48L3A+CiAgPHA+RXhhbXBsZTo8YnIvPgogICAgPHByZT4KJiMxMjM7JGNoaWxkcmVuPXNteDo6Z2V0X2NoaWxkcmVuKCl9CiAgICAgICYjMTIzO2lmIGNvdW50KCRjaGlsZHJlbil9CiAgICAgICAgJiMxMjM7Zm9yZWFjaCBmcm9tPSRjaGlsZHJlbiBpdGVtPSdjaGlsZCd9CiAgICAgICAgICAmIzEyMztpZiAkY2hpbGQuc2hvd19pbl9tZW51fQogICAgICAgICAgICBDaGlsZDogIGlkID0gJiMxMjM7JGNoaWxkLmlkfSBhbGlhcyA9ICYjMTIzOyRjaGlsZC5hbGlhc30mbHQ7YnIvJmd0OwogICAgICAgICAgJiMxMjM7L2lmfQogICAgICAgICYjMTIzOy9mb3JlYWNofQogICAgICAmIzEyMzsvaWZ9CiAgICA8L3ByZT48YnIvPgogIDwvcD4KPC9saT4KCjxici8+CjxsaT48c3Ryb25nPnNteDo6Z2V0X3BhZ2VfY29udGVudDwvc3Ryb25nPigkYWxpYXNbLCRibG9ja10pCiAgICA8cD5SZXR1cm5zIHRoZSB0ZXh0IG9mIGEgc3BlY2lmaWMgY29udGVudCBibG9jayBvZiBhbm90aGVyIHBhZ2UuPC9wPgogICAgPHA+QXJndW1lbnRzOgogICAgICAgPHVsPgogICAgICAgPGxpPiRhbGlhcyAtIFRoZSBwYWdlIGFsaWFzIHRvIGV4dHJhY3QgY29udGVudCBmcm9tLjwvbGk+CiAgICAgICA8bGk+WyRibG9ja10gLSAob3B0aW9uYWwpIFRoZSBuYW1lIG9mIHRoZSBjb250ZW50IGJsb2NrIGluIHRoZSBzcGVjaWZpZWQgcGFnZS4gIElmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCB0aGUgdmFsdWUgb2YgdGhlIGRlZmF1bHQgY29udGVudCBibG9jayA8ZW0+KGNvbnRlbnRfZW4pPC9lbT4gaXMgYXNzdW1lZC48L2xpPgogICAgICAgPC91bD4KICAgIDxici8+PC9wPgogIDxwPkV4YW1wbGU6PGJyLz4KICAgIDxwcmU+VGhlICdzZWNvbmQnIGJsb2NrIG9mIHRoZSAnYWJvdXQnIHBhZ2UgaXMgJiMxMjM7JGZvbz1zbXg6OmdldF9wYWdlX2NvbnRlbnQoJ2Fib3V0Jywnc2Vjb25kJyl9JiMxMjM7ZXZhbCB2YXI9JGZvb308L3ByZT48YnIvPgogIDwvcD4KPC9saT4KCjxici8+CjxsaT48c3Ryb25nPnNteDo6Z2V0X3NpYmxpbmc8L3N0cm9uZz4oJGRpcmVjdGlvbiwkYWxpYXMpCiAgICA8cD5SZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgbmV4dCBvciBwcmV2aW91cyBzaWJsaW5nIHRvIHRoZSBzcGVjaWZpZWQKICAgICAgIHBhZ2UuIG9yIGZhbHNlLjwvcD4KICAgIDxwPkFyZ3VtZW50czoKICAgICAgIDx1bD4KICAgICAgIDxsaT4kZGlyZWN0aW9uIC0gdGhlIGRpcmVjdGlvbiB0byBsb29rIGluLiAgcG9zc2libGUgdmFsdWVzIGFyZSBwcmV2LHByZXZpb3VzLC0xLG5leHQsMTwvbGk+CiAgICAgICA8L3VsPgogICAgPGJyLz48L3A+CiAgPHA+RXhhbXBsZTo8YnIvPgogICAgICAgPHByZT5MaW5rIHRvIHByZXZpb3VzIHNpYmxpbmc6ICYjMTIzOyRwcmV2X3NpYmxpbmc9c214OjpnZXRfc2libGluZygmcXVvdDtwcmV2JnF1b3QpfSYjMTIzO2lmICFlbXB0eSgkcHJldl9zaWJsaW5nKX0mIzEyMztjbXNfc2VsZmxpbmsgcGFnZT0mcXVvdDskcHJldl9zaWJsaW5nJnF1b3Q7IHRleHQ9JnF1b3Q7UHJldmlvdXMmcXVvdDt9JiMxMjM7L2lmfTwvcHJlPjxici8+CiAgICA8L2xpPgoKPGJyLz4KPGxpPjxzdHJvbmc+c214OjpnZXRfcGFyYWxsZWxfcGFnZTwvc3Ryb25nPigkbmV3X3Jvb3RbLCRjdXJyZW50X3BhZ2UgPSBudWxsXSkKICAgPHA+R2V0IHRoZSBhbGlhcyBvZiBhIHBhcmFsbGVsIHBhZ2UgaW4gdGhlIHBhZ2Ugc3RyaWN0dXJlIGdpdmVuIGEgZGlmZmVyZW50IHJvb3QgYWxpYXMuPC9wPgogICA8cD5JbiBhIG11bHRpbGFuZ3VhZ2Ugc2l0ZSB3aGVyZSB0aGUgcm9vdCBsZXZlbHMgcmVwcmVzZW50IGRpZmZlcmVudCBsYW5ndWFnZXMsIGl0IG1heSBiZSB1c2VmdWwgdG8gcmV0cmlldmUgdGhlIGFsaWFzIHRvIGFuIGVxdWl2YWxlbnQgcGFnZSBpbiBhIGRpZmZlcmVudCBsYW5ndWFnZS4gIGkuZS46IGlmIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBicm93c2luZyB0aGUgZnJlbmNoIHBhZ2UgYW5kIHdpc2hlcyB0byBzZWUgdGhlIHNhbWUgcGFnZSBpbiBlbmdsaXNoIChpZiBpdCBleGlzdHMpLjwvcD4KICAgPHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UgdW5kZXIgdGhlIG5ldyByb290LiAgSWYgaXQgZXhpc3RzLiAgSWYgbm90aGluZyBpcyBmb3VuZCwgbnVsbCBpcyByZXR1cm5lZC48L3A+CiAgIDxwPkFyZ3VtZW50czoKICAgICAgIDx1bD4KICAgICAgIDxsaT5uZXcgcm9vdCAtIFRoZSBhbGlhcyBvZiB0aGUgbmV3IHJvb3QgcGFyZW50LiAgTm90ZSwgaWYgYSB0b3AgbGV2ZWwgcGFnZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYWxpYXMgcHJvdmlkZWQgaXMgdXNlZCB0byBmaW5kIHRoZSB0b3AgbGV2ZWwgcGFnZSAoc2VlIGdldF9yb290X2FsaWFzKS48L2xpPgogICAgICAgPGxpPmN1cnJlbnRfcGFnZSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgcGVlciBvZi4gIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+CiAgICAgICA8L3VsPgogICAgPGJyLz48L3A+CiAgPHA+RXhhbXBsZTo8YnIvPgogICAgPHByZT5GaW5kIHRoZSBlcXVpdmFsZW50IGZyZW5jaCBwYWdlIGZvciB0aGlzIHBhZ2U6ICYjMTIzOyR0bXA9c214OjpnZXRfcGFyYWxsZWxfcGFnZSgnRlInKX0mIzEyMztpZiAkdG1wICE9ICcnICYmICR0bXAgIT0gJHBhZ2VfYWxpYXN9JiMxMjM7Y21zX3NlbGZsaW5rIHBhZ2U9JHRtcH0mIzEyMzsvaWZ9PC9wcmU+CiAgPC9wPgo8L2xpPgoKPGJyLz4KPGxpPjxzdHJvbmc+c214OjpnZXRfcGFyYWxsZWxfdXJsPC9zdHJvbmc+KCRuZXdfcm9vdFssJGN1cnJlbnRfcGFnZSA9IG51bGxdKQogICA8cD5HZXQgdGhlIFVSTCBvZiBhIHBhcmFsbGVsIHBhZ2UgaW4gdGhlIHBhZ2Ugc3RyaWN0dXJlIGdpdmVuIGEgZGlmZmVyZW50IHJvb3QgYWxpYXMuPC9wPgogICA8cD5JbiBhIG11bHRpbGFuZ3VhZ2Ugc2l0ZSB3aGVyZSB0aGUgcm9vdCBsZXZlbHMgcmVwcmVzZW50IGRpZmZlcmVudCBsYW5ndWFnZXMsIGl0IG1heSBiZSB1c2VmdWwgdG8gcmV0cmlldmUgdGhlIFVSTCB0byBhbiBlcXVpdmFsZW50IHBhZ2UgaW4gYSBkaWZmZXJlbnQgbGFuZ3VhZ2UuICBpLmUuOiBpZiB0aGUgdXNlciBpcyBjdXJyZW50bHkgYnJvd3NpbmcgdGhlIGZyZW5jaCBwYWdlIGFuZCB3aXNoZXMgdG8gc2VlIHRoZSBzYW1lIHBhZ2UgaW4gZW5nbGlzaCAoaWYgaXQgZXhpc3RzKS48L3A+CiAgIDxwPlRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWxpYXMgb2YgdGhlIHNwZWNpZmllZCBwYWdlIHVuZGVyIHRoZSBuZXcgcm9vdC4gIElmIGl0IGV4aXN0cy4gIElmIG5vdGhpbmcgaXMgZm91bmQsIG51bGwgaXMgcmV0dXJuZWQuPC9wPgogICA8cD5Bcmd1bWVudHM6CiAgICAgICA8dWw+CiAgICAgICA8bGk+bmV3IHJvb3QgLSBUaGUgYWxpYXMgb2YgdGhlIG5ldyByb290IHBhcmVudC4gIE5vdGUsIGlmIGEgdG9wIGxldmVsIHBhZ2UgaXMgbm90IHNwZWNpZmllZCwgdGhlIGFsaWFzIHByb3ZpZGVkIGlzIHVzZWQgdG8gZmluZCB0aGUgdG9wIGxldmVsIHBhZ2UgKHNlZSBnZXRfcm9vdF9hbGlhcykuPC9saT4KICAgICAgIDxsaT5jdXJyZW50X3BhZ2UgLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHBlZXIgb2YuICBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPgogICAgICAgPC91bD4KICAgIDxici8+PC9wPgogIDxwPkV4YW1wbGU6PGJyLz4KICAgIDxwcmU+RmluZCB0aGUgZXF1aXZhbGVudCBmcmVuY2ggcGFnZSBmb3IgdGhpcyBwYWdlOiAmIzEyMzskdXJsPXNteDo6Z2V0X3BhcmFsbGVsX3BhZ2UoJ0ZSJyl9JiMxMjM7aWYgJHVybH08YSBocmVmPSImIzEyMzskdXJsfSI+RlI8L2E+JiMxMjM7L2lmfTwvcHJlPgogIDwvcD4KPC9saT4KCjxici8+CjxsaT48c3Ryb25nPnNteDo6Z2V0X2ZpbGVfbGlzdGluZzwvc3Ryb25nPigkZGlyWywkZXhjbHVkZXByZWZpeF0pCiAgICA8cD5SZXRybiBhIGxpc3Qgb2YgZmlsZXMgaW4gYSBkaXJlY3RvcnkuPC9wPgogICAgPHA+QXJndW1lbnRzOgogICAgICA8dWw+CiAgICAgIDxsaT4kZGlyIC0gVGUgZGlyZWN0b3J5IHRvIHNjYW4gKHNob3VsZCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkpPC9saT4KICAgICAgPGxpPlskZXhjbHVkZXByZWZpeF0gLSAob3B0aW9uYWwpIEV4Y2x1ZGUgZmlsZXMgc3RydGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LjwvbGk+CiAgICAgIDwvdWw+CiAgPC9wPgo8L2xpPgo8L3VsPgogIDwvZGl2PgogIDxkaXYgaWQ9ImFib3V0X2MiPgogICAgPGgzPkFib3V0IHRoaXMgbW9kdWxlPC9oMz4KCiAgPHA+VGhpcyBtb2R1bGUgaXMgYSBmb3JrIG9mIDxzdHJvbmc+Q0dTaW1wbGVTbWFydHk8L3N0cm9uZz4gZGV2ZWxvcGVkIGJ5IDxzdHJvbmc+Um9iZXJ0IENhbXBiZWxsICZsdDtjYWxndXkxMDAwJmd0Ozwvc3Ryb25nPi48YnIgLz4KICAgICAgVGhpcyBpcyBhIDFzdCBnZW5lcmF0aW9uIGZvcmsgb2YgdGhlIG1vZHVsZS4gQ29uc2lkZXIgdGhpcyBhcyBhbm90aGVyIGZsYXZvdXIgb2YgdGhlIG9yaWdpbmFsIG1vZHVsZS48YnIgLz4KCiAgSWYgeW91IGZpbmQgYW55IGJ1Z3MgcGxlYXNlIGZlZWwgZnJlZSB0byBzdWJtaXQgYSBidWcgcmVwb3J0IDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvYnVnL2xpc3QvMTQ2MyIgdGFyZ2V0PSJfYmxhbmsiPmhlcmU8L2E+IG9yIGZvciBhbnkgZ29vZCBpZGVhcyBjb25zaWRlciBzdWJtaXRpbmcgYSBmZWF0dXJlIHJlcXVlc3QgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9mZWF0dXJlX3JlcXVlc3QvbGlzdC8xNDYzIiB0YXJnZXQ9Il9ibGFuayI+aGVyZTwvYT4uPC9wPgogIDxwPlBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBkZXZlbG9wZXJzIGRvIGhhdmUgdGhlaXIgZGFpbHkgam9icyB3aGljaCBtZWFucyB0aGF0IGZlYXR1cmUgcmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgYW5kIGRvbmUgYXMgdGltZSBhbGxvd3MuIElmIHlvdSBuZWVkIGEgZmVhdHVyZSByZWFsbHkgYmFkbHkgY29uc2lkZXIgY29udGFjdGluZyBvbmUgb2YgdGhlIGRldmVsb3BlcnMgZm9yIGEgc3BvbnNvcmVkIGRldmVsb3BtZW50LgogIDwvcD4KCjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhlIG1vZHVsZSBhdXRob3IgLyBtYWludGFpbmVycyBvciBwcm9qZWN0IG1hbmFnZXJzIGFyZSBpbiBubyB3YXkgb2JsaWdhdGVkIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhpcyBjb2RlIGluIGFueSBmYXNoaW9uLiAgSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvc21hcnR5ZXh0Ij5oZXJlPC9hPi4gUGxlYXNlIGJlIHZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlIHdoZW4gc3VibWl0dGluZyBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cywgYW5kIGZvciBidWcgcmVwb3J0cyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBwcm92aWRlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIHJlbGlhYmx5IHJlcHJvZHVjZSB0aGUgaXNzdWUuPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi4gIFdoZW4gZGVzY3JpYmluZyBhbiBpc3N1ZSBwbGVhc2UgbWFrZSBhbiBlZmZvcnQgdG8gcHJvdmlkZSBhbGwgcmVsZXZhbnQgaW5mb3JtYXRpb24sIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdCBvciB5b3VyIGRpc2N1c3Npb24gbWF5IGJlIGlnbm9yZWQuPC9saT4KPC91bD4KCgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDIwIC0gMjAyMSwgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24gPGEgaHJlZj0ibWFpbHRvOmluZm9AY21zbWFkZXNpbXBsZS5vcmciPiZsdDtpbmZvQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA4LCBSb2JlcnQgQ2FtcGJlbGwgJmx0O2NhbGd1eTEwMDAmZ3Q7LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+Cjxocj4KPHA+PHN0cm9uZz5TbWFydHlFeHQ8L3N0cm9uZz4gaXMgZnJlZSBzb2Z0d2FyZTs8YnIgLz4geW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIDxzdHJvbmc+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L3N0cm9uZz4gYXMgcHVibGlzaGVkIGJ5IHRoZSA8c3Ryb25nPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjwvc3Ryb25nPjs8YnIgLz4gZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPjxzdHJvbmc+U21hcnR5RXh0PC9zdHJvbmc+IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCA8c3Ryb25nPldJVEhPVVQgQU5ZIFdBUlJBTlRZPC9zdHJvbmc+OzxiciAvPiB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgPHN0cm9uZz5NRVJDSEFOVEFCSUxJVFk8L3N0cm9uZz4gb3IgPHN0cm9uZz5GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRTwvc3Ryb25nPi48L3A+CjxwPlNlZSB0aGVHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KIDxwPllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIDxzdHJvbmc+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L3N0cm9uZz4gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07PGJyIC8+IGlmIG5vdCwgd3JpdGUgdG8gdGhlIDxzdHJvbmc+RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQTwvc3Ryb25nPiBvciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5yZWFkIGl0IG9ubGluZTwvYT4uPC9wPgo8cD48c3Ryb25nPllvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgPHN0cm9uZz5TbWFydHlFeHQ8L3N0cm9uZz4uPC9zdHJvbmc+PC9wPgo8aHI+CjxoND5DdXJyZW50IE1haW50YWluZXJzPC9oND4KPHVsPgogIDxsaSBjbGFzcz0icF9ib3R0b21fMTUiPjxzdHJvbmc+RmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyk8L3N0cm9uZz48L2xpPgo8L3VsPgoKPGg0PlBhc3QgTWFpbnRhaW5lcnM8L2g0Pgo8dWw+CiAgPGxpPjxzdHJvbmc+Um9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwKTwvc3Ryb25nPiA8YnIgLz53d3cuY2FsZ3V5MTAwMC5jb208L2xpPgo8L3VsPgoKPGg0Pktub3duIENvbnRyaWJ1dG9yczwvaDQ+Cjx1bD4KICA8bGk+PHN0cm9uZz5Sb2JlcnQgQ2FtcGJlbGwgKGNhbGd1eTEwMDApPC9zdHJvbmc+PGJyIC8+d3d3LmNhbGd1eTEwMDAuY29tPC9saT4KPC91bD4KCgoJPC9kaXY+CiAgPGRpdiBjbGFzcz0iY2xlYXJiIj48L2Rpdj4KPC9kaXY+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKbyBNb3JnICZsdDtqb21vcmdAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS4wPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PCEtLSBUT0RPIQo8dWw+CjxsaT4xLjAgLSBEZWNlbWJlciwgMjAwNwogIDxwPkluaXRpYWwgcmVsZWFzZTwvcD4KPC9saT4KPC91bD4KLS0+PGJyIC8+]]></about>
	<description><![CDATA[CMSMS Smarty Tools]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.moduledata/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.moduledata/moduledata.xml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxtb2R1bGVkYXRhIHZlcnNpb249JzEuMCc+DQo8TW9kdWxlTmFtZT5TbWFydHlFeHQ8L01vZHVsZU5hbWU+DQo8TW9kdWxlRnJpZW5kbHlOYW1lPjwvTW9kdWxlRnJpZW5kbHlOYW1lPg0KPFZlcnNpb24+MS4wLmIuMzwvVmVyc2lvbj4NCjxBdXRob3I+Sm8gTW9yZzwvQXV0aG9yPg0KPEF1dGhvckVtYWlsPmpvbW9yZ0BjbXNtYWRlc2ltcGxlLm9yZzwvQXV0aG9yRW1haWw+DQo8U3RhcnREYXRlPjwvU3RhcnREYXRlPg0KPFBIUEhlYWRlcj48IVtDREFUQVtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ2lNZ2V5UnRiMlIxYkdWZmJtRnRaWDBnTFNCN0pHMXZaSFZzWlY5bWNtbGxibVJzZVY5dVlXMWxmUTBLSXlCV1pYSnphVzl1SUhza2JXOWtkV3hsWDNabGNuTnBiMjU5RFFvaklIc2tiVzlrZFd4bFgyUmxjMk55YVhCMGFXOXVmUTBLSXlBb1l5a2dleVJ6ZEdGeWRHUmhkR1Y5TFhza1pXNWtaR0YwWlgwZ1lua2dleVJ0YjJSMWJHVmZZWFYwYUc5eWZRMEtJeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBOQ2lNTkNpTWdleVJ0YjJSMWJHVmZibUZ0WlgwZ2FYTWdZU0JEVFZNZ1RXRmtaU0JUYVcxd2JHVWdiVzlrZFd4bElIUm9ZWFFnWlc1aFlteGxjeUIwYUdVZ2QyVmlJR1JsZG1Wc2IzQmxjaUIwYnlCamNtVmhkR1VOQ2lNZ2JYVnNkR2x3YkdVZ2JHbHpkSE1nZEdoeWIzVm5hRzkxZENCaElITnBkR1V1SUVsMElHTmhiaUJpWlNCa2RYQnNhV05oZEdWa0lHRnVaQ0JuYVhabGJpQm1jbWxsYm1Sc2VRMEtJeUJ1WVcxbGN5Qm1iM0lnWldGemFXVnlJR05zYVdWdWRDQnRZV2x1ZEdWdVlXNWpaUzROQ2lNTkNpTXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHREUW9qSUVOTlV5QXRJRU5OVXlCTllXUmxJRk5wYlhCc1pTQnBjeUFvWXlrZ01qQXdOU0JpZVNCVVpXUWdTM1ZzY0NBb2QybHphSGxBWTIxemJXRmtaWE5wYlhCc1pTNXZjbWNwRFFvaklGWnBjMmwwSUhSb1pTQkRUVk5OVXlCb2IyMWxjR0ZuWlNCaGREb2dhSFIwY0RvdkwzZDNkeTVqYlhOdFlXUmxjMmx0Y0d4bExtOXladzBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwTkNpTWdRa1ZIU1U1ZlRFbERSVTVUUlEwS0l5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTME5DaU1nVkdocGN5Qm1hV3hsSUdseklIQmhjblFnYjJZZ2V5UnRiMlIxYkdWZmJtRnRaWDBOQ2lNZ2V5UnRiMlIxYkdWZmJtRnRaWDBnY0hKdlozSmhiU0JwY3lCbWNtVmxJSE52Wm5SM1lYSmxPeUI1YjNVZ1kyRnVJSEpsWkdsemRISnBZblYwWlNCcGRDQmhibVF2YjNJZ2JXOWthV1o1RFFvaklHbDBJSFZ1WkdWeUlIUm9aU0IwWlhKdGN5QnZaaUIwYUdVZ1IwNVZJRWRsYm1WeVlXd2dVSFZpYkdsaklFeHBZMlZ1YzJVZ1lYTWdjSFZpYkdsemFHVmtJR0o1RFFvaklIUm9aU0JHY21WbElGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNDdJR1ZwZEdobGNpQjJaWEp6YVc5dUlESWdiMllnZEdobElFeHBZMlZ1YzJVc0lHOXlEUW9qSUNoaGRDQjViM1Z5SUc5d2RHbHZiaWtnWVc1NUlHeGhkR1Z5SUhabGNuTnBiMjR1RFFvakRRb2pJSHNrYlc5a2RXeGxYMjVoYldWOUlIQnliMmR5WVcwZ2FYTWdaR2x6ZEhKcFluVjBaV1FnYVc0Z2RHaGxJR2h2Y0dVZ2RHaGhkQ0JwZENCM2FXeHNJR0psSUhWelpXWjFiQ3dOQ2lNZ1luVjBJRmRKVkVoUFZWUWdRVTVaSUZkQlVsSkJUbFJaT3lCM2FYUm9iM1YwSUdWMlpXNGdkR2hsSUdsdGNHeHBaV1FnZDJGeWNtRnVkSGtnYjJZTkNpTWdUVVZTUTBoQlRsUkJRa2xNU1ZSWklHOXlJRVpKVkU1RlUxTWdSazlTSUVFZ1VFRlNWRWxEVlV4QlVpQlFWVkpRVDFORkxpQWdVMlZsSUhSb1pRMEtJeUJIVGxVZ1IyVnVaWEpoYkNCUWRXSnNhV01nVEdsalpXNXpaU0JtYjNJZ2JXOXlaU0JrWlhSaGFXeHpMZzBLSXlCWmIzVWdjMmh2ZFd4a0lHaGhkbVVnY21WalpXbDJaV1FnWVNCamIzQjVJRzltSUhSb1pTQkhUbFVnUjJWdVpYSmhiQ0JRZFdKc2FXTWdUR2xqWlc1elpRMEtJeUJoYkc5dVp5QjNhWFJvSUhSb2FYTWdjSEp2WjNKaGJUc2dhV1lnYm05MExDQjNjbWwwWlNCMGJ5QjBhR1VnUm5KbFpTQlRiMlowZDJGeVpRMEtJeUJHYjNWdVpHRjBhVzl1TENCSmJtTXVMQ0ExT1NCVVpXMXdiR1VnVUd4aFkyVXNJRk4xYVhSbElETXpNQ3dnUW05emRHOXVMQ0JOUVNBd01qRXhNUzB4TXpBM0lGVlRRUTBLSXlCUGNpQnlaV0ZrSUdsMElHOXViR2x1WlRvZ2FIUjBjRG92TDNkM2R5NW5iblV1YjNKbkwyeHBZMlZ1YzJWekwyeHBZMlZ1YzJWekxtaDBiV3dqUjFCTURRb2pEUW9qTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFEwS0l5QkZUa1JmVEVsRFJVNVRSUTBLSXkwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwPV1dPjwvUEhQSGVhZGVyPg0KPExpY2VuY2U+R1BMIFYzPC9MaWNlbmNlPg0KPEZpbGxIZWFkZXI+MDwvRmlsbEhlYWRlcj4NCjwvbW9kdWxlZGF0YT4NCg==]]></data>
	</file>
	<file>
	  <filename>/docs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/docs/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/js.cookie.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIEphdmFTY3JpcHQgQ29va2llIHYyLjIuMQogKiBodHRwczovL2dpdGh1Yi5jb20vanMtY29va2llL2pzLWNvb2tpZQogKgogKiBDb3B5cmlnaHQgMjAwNiwgMjAxNSBLbGF1cyBIYXJ0bCAmIEZhZ25lciBCcmFjawogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKICovCjsoZnVuY3Rpb24gKGZhY3RvcnkpIHsKCXZhciByZWdpc3RlcmVkSW5Nb2R1bGVMb2FkZXI7CglpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7CgkJZGVmaW5lKGZhY3RvcnkpOwoJCXJlZ2lzdGVyZWRJbk1vZHVsZUxvYWRlciA9IHRydWU7Cgl9CglpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7CgkJbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7CgkJcmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyID0gdHJ1ZTsKCX0KCWlmICghcmVnaXN0ZXJlZEluTW9kdWxlTG9hZGVyKSB7CgkJdmFyIE9sZENvb2tpZXMgPSB3aW5kb3cuQ29va2llczsKCQl2YXIgYXBpID0gd2luZG93LkNvb2tpZXMgPSBmYWN0b3J5KCk7CgkJYXBpLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7CgkJCXdpbmRvdy5Db29raWVzID0gT2xkQ29va2llczsKCQkJcmV0dXJuIGFwaTsKCQl9OwoJfQp9KGZ1bmN0aW9uICgpIHsKCWZ1bmN0aW9uIGV4dGVuZCAoKSB7CgkJdmFyIGkgPSAwOwoJCXZhciByZXN1bHQgPSB7fTsKCQlmb3IgKDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewoJCQl2YXIgYXR0cmlidXRlcyA9IGFyZ3VtZW50c1sgaSBdOwoJCQlmb3IgKHZhciBrZXkgaW4gYXR0cmlidXRlcykgewoJCQkJcmVzdWx0W2tleV0gPSBhdHRyaWJ1dGVzW2tleV07CgkJCX0KCQl9CgkJcmV0dXJuIHJlc3VsdDsKCX0KCglmdW5jdGlvbiBkZWNvZGUgKHMpIHsKCQlyZXR1cm4gcy5yZXBsYWNlKC8oJVswLTlBLVpdezJ9KSsvZywgZGVjb2RlVVJJQ29tcG9uZW50KTsKCX0KCglmdW5jdGlvbiBpbml0IChjb252ZXJ0ZXIpIHsKCQlmdW5jdGlvbiBhcGkoKSB7fQoKCQlmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHsKCQkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJYXR0cmlidXRlcyA9IGV4dGVuZCh7CgkJCQlwYXRoOiAnLycKCQkJfSwgYXBpLmRlZmF1bHRzLCBhdHRyaWJ1dGVzKTsKCgkJCWlmICh0eXBlb2YgYXR0cmlidXRlcy5leHBpcmVzID09PSAnbnVtYmVyJykgewoJCQkJYXR0cmlidXRlcy5leHBpcmVzID0gbmV3IERhdGUobmV3IERhdGUoKSAqIDEgKyBhdHRyaWJ1dGVzLmV4cGlyZXMgKiA4NjRlKzUpOwoJCQl9CgoJCQkvLyBXZSdyZSB1c2luZyAiZXhwaXJlcyIgYmVjYXVzZSAibWF4LWFnZSIgaXMgbm90IHN1cHBvcnRlZCBieSBJRQoJCQlhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMgPyBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKSA6ICcnOwoKCQkJdHJ5IHsKCQkJCXZhciByZXN1bHQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7CgkJCQlpZiAoL15bXHtcW10vLnRlc3QocmVzdWx0KSkgewoJCQkJCXZhbHVlID0gcmVzdWx0OwoJCQkJfQoJCQl9IGNhdGNoIChlKSB7fQoKCQkJdmFsdWUgPSBjb252ZXJ0ZXIud3JpdGUgPwoJCQkJY29udmVydGVyLndyaXRlKHZhbHVlLCBrZXkpIDoKCQkJCWVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodmFsdWUpKQoJCQkJCS5yZXBsYWNlKC8lKDIzfDI0fDI2fDJCfDNBfDNDfDNFfDNEfDJGfDNGfDQwfDVCfDVEfDVFfDYwfDdCfDdEfDdDKS9nLCBkZWNvZGVVUklDb21wb25lbnQpOwoKCQkJa2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhrZXkpKQoJCQkJLnJlcGxhY2UoLyUoMjN8MjR8MjZ8MkJ8NUV8NjB8N0MpL2csIGRlY29kZVVSSUNvbXBvbmVudCkKCQkJCS5yZXBsYWNlKC9bXChcKV0vZywgZXNjYXBlKTsKCgkJCXZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJzsKCQkJZm9yICh2YXIgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVzKSB7CgkJCQlpZiAoIWF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pIHsKCQkJCQljb250aW51ZTsKCQkJCX0KCQkJCXN0cmluZ2lmaWVkQXR0cmlidXRlcyArPSAnOyAnICsgYXR0cmlidXRlTmFtZTsKCQkJCWlmIChhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID09PSB0cnVlKSB7CgkJCQkJY29udGludWU7CgkJCQl9CgoJCQkJLy8gQ29uc2lkZXJzIFJGQyA2MjY1IHNlY3Rpb24gNS4yOgoJCQkJLy8gLi4uCgkJCQkvLyAzLiAgSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoIjsiKQoJCQkJLy8gICAgIGNoYXJhY3RlcjoKCQkJCS8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sCgkJCQkvLyBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoIjsiKSBjaGFyYWN0ZXIuCgkJCQkvLyAuLi4KCQkJCXN0cmluZ2lmaWVkQXR0cmlidXRlcyArPSAnPScgKyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdLnNwbGl0KCc7JylbMF07CgkJCX0KCgkJCXJldHVybiAoZG9jdW1lbnQuY29va2llID0ga2V5ICsgJz0nICsgdmFsdWUgKyBzdHJpbmdpZmllZEF0dHJpYnV0ZXMpOwoJCX0KCgkJZnVuY3Rpb24gZ2V0IChrZXksIGpzb24pIHsKCQkJaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJdmFyIGphciA9IHt9OwoJCQkvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5CgkJCS8vIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNvb2tpZXMgYXQgYWxsLgoJCQl2YXIgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZSA/IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSA6IFtdOwoJCQl2YXIgaSA9IDA7CgoJCQlmb3IgKDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHsKCQkJCXZhciBwYXJ0cyA9IGNvb2tpZXNbaV0uc3BsaXQoJz0nKTsKCQkJCXZhciBjb29raWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCc9Jyk7CgoJCQkJaWYgKCFqc29uICYmIGNvb2tpZS5jaGFyQXQoMCkgPT09ICciJykgewoJCQkJCWNvb2tpZSA9IGNvb2tpZS5zbGljZSgxLCAtMSk7CgkJCQl9CgoJCQkJdHJ5IHsKCQkJCQl2YXIgbmFtZSA9IGRlY29kZShwYXJ0c1swXSk7CgkJCQkJY29va2llID0gKGNvbnZlcnRlci5yZWFkIHx8IGNvbnZlcnRlcikoY29va2llLCBuYW1lKSB8fAoJCQkJCQlkZWNvZGUoY29va2llKTsKCgkJCQkJaWYgKGpzb24pIHsKCQkJCQkJdHJ5IHsKCQkJCQkJCWNvb2tpZSA9IEpTT04ucGFyc2UoY29va2llKTsKCQkJCQkJfSBjYXRjaCAoZSkge30KCQkJCQl9CgoJCQkJCWphcltuYW1lXSA9IGNvb2tpZTsKCgkJCQkJaWYgKGtleSA9PT0gbmFtZSkgewoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9IGNhdGNoIChlKSB7fQoJCQl9CgoJCQlyZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXI7CgkJfQoKCQlhcGkuc2V0ID0gc2V0OwoJCWFwaS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7CgkJCXJldHVybiBnZXQoa2V5LCBmYWxzZSAvKiByZWFkIGFzIHJhdyAqLyk7CgkJfTsKCQlhcGkuZ2V0SlNPTiA9IGZ1bmN0aW9uIChrZXkpIHsKCQkJcmV0dXJuIGdldChrZXksIHRydWUgLyogcmVhZCBhcyBqc29uICovKTsKCQl9OwoJCWFwaS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5LCBhdHRyaWJ1dGVzKSB7CgkJCXNldChrZXksICcnLCBleHRlbmQoYXR0cmlidXRlcywgewoJCQkJZXhwaXJlczogLTEKCQkJfSkpOwoJCX07CgoJCWFwaS5kZWZhdWx0cyA9IHt9OwoKCQlhcGkud2l0aENvbnZlcnRlciA9IGluaXQ7CgoJCXJldHVybiBhcGk7Cgl9CgoJcmV0dXJuIGluaXQoZnVuY3Rpb24gKCkge30pOwp9KSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgQwoKIyBGCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdTbWFydHkgRXh0ZW5zaW9ucyc7CgojIEgKCiMgTQokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdDTVNNUyBTbWFydHkgVG9vbHMnOwoKIyBQCiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1NtYXJ0eSBFeHRlbnNpb25zIGlzIG5vdyBpbnN0YWxsZWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1NtYXJ0eSBFeHRlbnNpb25zIGhhcyBiZWVuIHJlbW92ZWQnOwoKIyBTCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.smx.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmaW5hbCBjbGFzcyBzbXgKewogIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXsgfQogIAogIC8qKgogICAqIEdldCB0aGUgY3VycmVudCBVUkwKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBzZWxmX3VybCgpCiAgewogICAgJHMgICAgICAgID0gKFxjZ2VfdXRpbHM6OnNzbF9yZXF1ZXN0KCkpID8gInMiIDogIiI7CiAgICAkcCAgICAgICAgPSBzdHJwb3MoJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddLCAnLycpOwogICAgJHByb3RvY29sID0gc3RydG9sb3dlcihzdWJzdHIoJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddLCAwLCAkcCkpIC4gJHM7CiAgICAkcG9ydCAgICAgPSAoJF9TRVJWRVJbIlNFUlZFUl9QT1JUIl0gPT0gIjgwIiB8fCAkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSA9PSA0NDMpID8gJycKICAgICAgOiAoJzonIC4gJF9TRVJWRVJbIlNFUlZFUl9QT1JUIl0pOwogICAgJHMgICAgICAgID0gJHByb3RvY29sIC4gIjovLyIgLiAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSAuICRwb3J0OwogICAgCiAgICByZXR1cm4gJHMgLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsKICB9CiAgCiAgCiAgLyoqCiAgICogVGVzdCBpZiBhIG1vZHVsZSBpcyBpbnN0YWxsZWQsIGFuZCBhY3RpdmUuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRtb2R1bGUgdGhlIG1vZHVsZSBuYW1lCiAgICoKICAgKiBAcmV0dXJuIGJvb2wKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIG1vZHVsZV9pbnN0YWxsZWQoJG1vZHVsZSkKICB7CiAgICBpZigkbW9kdWxlID09ICcnKQogICAgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgICRtb2R1bGUgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGUpOwogICAgCiAgICAkcmVzdWx0ID0gMDsKICAgIGlmKGlzX29iamVjdCgkbW9kdWxlKSkKICAgIHsKICAgICAgJHJlc3VsdCA9IDE7CiAgICB9CiAgICAKICAgIHJldHVybiAkcmVzdWx0OwogIH0KICAKICAKICAvKioKICAgKiBHZXQgdGhlIGFsaWFzIG9mIHRoZSBzcGVjaWZpZWQgYWxpYXMnIHBhcmVudC4gaWYgYW55CiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRhbGlhcyBUaGUgb3B0aW9uYWwgYWxpYXMuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BhcmVudF9hbGlhcygkYWxpYXMgPSAnJykKICB7CiAgICAkZ0NtcyA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpOwogICAgJGhtICAgPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgCiAgICBpZigkYWxpYXMgPT0gJycpCiAgICB7CiAgICAgICRhbGlhcyA9IFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X2FsaWFzKCk7CiAgICB9CiAgICAkbm9kZSA9ICRobS0+ZmluZF9ieV90YWcoJ2FsaWFzJywgJGFsaWFzKTsKICAgIGlmKCEkbm9kZSkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICAkYWxpYXMgPSAkbm9kZS0+Z2V0UGFyZW50KCktPmdldF90YWcoJ2FsaWFzJyk7CiAgICAKICAgIHJldHVybiAkYWxpYXM7CiAgfQogIAogIAogIC8qKgogICAqIFRlc3QgaWYgYSBwYWdlIGFsaWFzIG9yIGlkLi4uIGlzIGEgY2hpbGQgb2YgYW5vdGhlciBwYWdlIGFsaWFzIG9yIGlkLgogICAqCiAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHRlc3RfcGFyZW50IFRoZSBwYXJlbnQgYWxpYXMgb3IgaWQgdG8gdGVzdCBhZ2FpbnN0CiAgICogQHBhcmFtIHN0cmluZ3xpbnQgJHRlc3RfY2hpbGQgIFRoZSBjaGlsZCBhbGlhcyBvciBpZCB0byB0ZXN0IGFnYWluc3QKICAgKgogICAqIEByZXR1cm4gYm9vbAogICAqLwogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNfY2hpbGRfb2YoJHRlc3RfcGFyZW50LCAkdGVzdF9jaGlsZCkKICB7CiAgICAkZ0NtcyA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpOwogICAgJGhtICAgPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgaWYoISR0ZXN0X3BhcmVudCkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYoISR0ZXN0X2NoaWxkKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAkbm9kZV9wYXJlbnQgPSAkbm9kZV9jaGlsZCA9ICRwYXJlbnRfaWQgPSBOVUxMOwogICAgCiAgICAvLyBnZXQgdGhlIGNoaWxkIG5vZGUKICAgIGlmKChpbnQpJHRlc3RfY2hpbGQgPiAwICYmIGlzX251bWVyaWMoJHRlc3RfY2hpbGQpKQogICAgewogICAgICAkbm9kZV9jaGlsZCA9ICRobS0+ZmluZF9ieV90YWcoJ2lkJywgJHRlc3RfY2hpbGQpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkbm9kZV9jaGlsZCA9ICRobS0+ZmluZF9ieV90YWcoJ2FsaWFzJywgJHRlc3RfY2hpbGQpOwogICAgfQogICAgaWYoISRub2RlX2NoaWxkKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIC8vIGdldCB0aGUgcGFyZW50IG5vZGUsIGFuZCBpdCdzIGlkLgogICAgaWYoKGludCkkdGVzdF9wYXJlbnQgPiAwICYmIGlzX251bWVyaWMoJHRlc3RfcGFyZW50KSkKICAgIHsKICAgICAgJG5vZGVfcGFyZW50ID0gJGhtLT5maW5kX2J5X3RhZygnaWQnLCAkdGVzdF9wYXJlbnQpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkbm9kZV9wYXJlbnQgPSAkaG0tPmZpbmRfYnlfdGFnKCdhbGlhcycsICR0ZXN0X3BhcmVudCk7CiAgICB9CiAgICBpZighJG5vZGVfcGFyZW50KQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAkcGFyZW50X2lkID0gKGludCkkbm9kZV9wYXJlbnQtPmdldF90YWcoJ2lkJyk7CiAgICBpZigkcGFyZW50X2lkIDwgMSkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICB3aGlsZSgkbm9kZV9jaGlsZCkKICAgIHsKICAgICAgaWYoJG5vZGVfY2hpbGQtPmdldF90YWcoJ2lkJykgPT0gJHBhcmVudF9pZCkKICAgICAgewogICAgICAgIHJldHVybiBUUlVFOwogICAgICB9CiAgICAgICRub2RlX2NoaWxkID0gJG5vZGVfY2hpbGQtPmdldF9wYXJlbnQoKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogR2V0IHRoZSBhbGlhcyBvZiB0aGUgcm9vdCBwYWdlIG9mIHRoZSBzcGVjaWZpZWQgYWxpYXMuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRhbGlhcyBUaGUgZGVzaXJlZCBwYWdlIGFsaWFzLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBhbGlhcyBpcyB1c2VkLgogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9yb290X2FsaWFzKCRhbGlhcyA9ICcnKQogIHsKICAgICRnQ21zID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCk7CiAgICAkaG0gICA9ICRnQ21zLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICAKICAgIGlmKCRhbGlhcyA9PSAnJykKICAgIHsKICAgICAgJGFsaWFzID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgIAogICAgJHN0YWNrID0gYXJyYXkoKTsKICAgICRub2RlICA9ICRobS0+ZmluZF9ieV90YWcoJ2FsaWFzJywgJGFsaWFzKTsKICAgIHdoaWxlKCRub2RlICYmICRub2RlLT5nZXRfdGFnKCdpZCcpID4gMCkKICAgIHsKICAgICAgJHN0YWNrW10gPSAkbm9kZTsKICAgICAgJG5vZGUgICAgPSAkbm9kZS0+Z2V0UGFyZW50KCk7CiAgICB9CiAgICAKICAgIGlmKGNvdW50KCRzdGFjaykgPT0gMCkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgJGFsaWFzID0gJHN0YWNrW2NvdW50KCRzdGFjaykgLSAxXS0+Z2V0X3RhZygnYWxpYXMnKTsKICAgIAogICAgcmV0dXJuICRhbGlhczsKICB9CiAgCiAgCiAgLyoqCiAgICogR2V0IHRoZSB0aXRsZSBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UgKGJ5IGFsaWFzKSBvciB0aGUgY3VycmVudCBwYWdlLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgT3B0aW9uYWwgYWxpYXMKICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGFnZV90aXRsZSgkYWxpYXMgPSAnJykKICB7CiAgICAkY29udGVudG9wcyA9IFxDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAKICAgIGlmKCRhbGlhcyA9PSAnJykKICAgIHsKICAgICAgJGFsaWFzID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgICRjb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUFsaWFzKCRhbGlhcyk7CiAgICBpZighaXNfb2JqZWN0KCRjb250ZW50KSkKICAgIHsKICAgICAgcmV0dXJuICcnOwogICAgfQogICAgCiAgICByZXR1cm4gJGNvbnRlbnQtPk5hbWUoKTsKICB9CiAgCiAgCiAgLyoqCiAgICogR2V0IHRoZSBtZW51IHRleHQgb2YgdGhlIHNwZWNpZmllZCBwYWdlIChieSBhbGlhcykgb3IgdGhlIGN1cnJlbnQgcGFnZS4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIE9wdGlvbmFsIGFsaWFzCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BhZ2VfbWVudXRleHQoJGFsaWFzID0gJycpCiAgewogICAgJGNvbnRlbnRvcHMgPSBcQ29udGVudE9wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpOwogICAgCiAgICBpZigkYWxpYXMgPT0gJycpCiAgICB7CiAgICAgICRhbGlhcyA9IFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X2FsaWFzKCk7CiAgICB9CiAgICAkY29udGVudCA9ICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21BbGlhcygkYWxpYXMpOwogICAgaWYoIWlzX29iamVjdCgkY29udGVudCkpCiAgICB7CiAgICAgIHJldHVybiAnJzsKICAgIH0KICAgIAogICAgcmV0dXJuICRjb250ZW50LT5NZW51VGV4dCgpOwogIH0KICAKICAKICAvKioKICAgKiBHZXQgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBwYWdlIChieSBhbGlhcykgb3IgdGhlIGN1cnJlbnQgcGFnZS4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIE9wdGlvbmFsIGFsaWFzCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BhZ2VfdHlwZSgkYWxpYXMgPSAnJykKICB7CiAgICAkY29udGVudG9wcyA9IFxDb250ZW50T3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCk7CiAgICAKICAgIGlmKCRhbGlhcyA9PSAnJykKICAgIHsKICAgICAgJGFsaWFzID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgICRjb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUFsaWFzKCRhbGlhcyk7CiAgICBpZighaXNfb2JqZWN0KCRjb250ZW50KSkKICAgIHsKICAgICAgcmV0dXJuICcnOwogICAgfQogICAgCiAgICByZXR1cm4gJGNvbnRlbnQtPlR5cGUoKTsKICB9CiAgCiAgCiAgLyoqCiAgICogVGVzdCBpZiB0aGUgY3VycmVudCBwYWdlIGhhcyBjaGlsZHJlbi4KICAgKiBEb2VzIG5vdCB0ZXN0IGZvciBoaWRkZW4sIG9yIGluYWN0aXZlIGNoaWxkcmVuLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgT3B0aW9uYWwgYWxpYXMKICAgKgogICAqIEByZXR1cm4gYm9vbAogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gaGFzX2NoaWxkcmVuKCRhbGlhcyA9ICcnKQogIHsKICAgICRnQ21zID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCk7CiAgICAkaG0gICA9ICRnQ21zLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICBpZigkYWxpYXMgPT0gJycpCiAgICB7CiAgICAgICRhbGlhcyA9IFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X2FsaWFzKCk7CiAgICB9CiAgICAkbm9kZSA9ICRobS0+ZmluZF9ieV90YWcoJ2FsaWFzJywgJGFsaWFzKTsKICAgIGlmKCEkbm9kZSkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICByZXR1cm4gJG5vZGUtPmhhc19jaGlsZHJlbigpOwogIH0KICAKICAKICAvKioKICAgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcGFnZSBpZHMgb2YgYWxsIG9mIHRoZSBzcGVjaWZpZWQgcGFnZSdzIGNoaWxkcmVuLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkYWxpYXMgICBPcHRpb25hbCBhbGlhcwogICAqIEBwYXJhbSBib29sICAgJHNob3dhbGwgV2V0aGVyIHRvIHNob3cgaW5hY3RpdmUgY2hpbGRyZW4uCiAgICoKICAgKiBAcmV0dXJuIGFycmF5CiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfY2hpbGRyZW4oJGFsaWFzID0gJycsICRzaG93YWxsID0gRkFMU0UpCiAgewogICAgaWYoJGFsaWFzID09ICcnKQogICAgewogICAgICAkYWxpYXMgPSBcY21zX3V0aWxzOjpnZXRfY3VycmVudF9hbGlhcygpOwogICAgfQogICAgaWYoJGFsaWFzID09ICcnKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICRobSAgICAgPSBjbXNtcygpLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICAkcGFyZW50ID0gJGhtLT5maW5kX2J5X3RhZygnYWxpYXMnLCAkYWxpYXMpOwogICAgaWYoISRwYXJlbnQpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgJGNoaWxkX25vZGVzID0gJHBhcmVudC0+Z2V0Q2hpbGRyZW4oRkFMU0UsIFRSVUUpOwogICAgaWYoIWlzX2FycmF5KCRjaGlsZF9ub2RlcykgfHwgY291bnQoJGNoaWxkX25vZGVzKSA9PSAwKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICRyZXN1bHRzID0gYXJyYXkoKTsKICAgIGZvcmVhY2goJGNoaWxkX25vZGVzIGFzICRub2RlKQogICAgewogICAgICAkY29udGVudCA9ICRub2RlLT5nZXRDb250ZW50KCk7CiAgICAgIGlmKCFpc19vYmplY3QoJGNvbnRlbnQpKQogICAgICB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYoISRjb250ZW50LT5BY3RpdmUoKSAmJiAhJHNob3dhbGwpCiAgICAgIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAkcm93ICAgICAgID0gYXJyYXkoCiAgICAgICAgJ2FsaWFzJyAgICA9PiAkY29udGVudC0+QWxpYXMoKSwgJ2lkJyA9PiAkY29udGVudC0+SWQoKSwgJ3RpdGxlJyA9PiAkY29udGVudC0+TmFtZSgpLAogICAgICAgICdtZW51dGV4dCcgPT4gJGNvbnRlbnQtPk1lbnVUZXh0KCksCiAgICAgICAgJ2FjdGl2ZScgICA9PiAkY29udGVudC0+QWN0aXZlKCksICdzaG93X2luX21lbnUnID0+ICRjb250ZW50LT5TaG93SW5NZW51KCksICd0eXBlJyA9PiAkY29udGVudC0+VHlwZSgpCiAgICAgICk7CiAgICAgICRyZXN1bHRzW10gPSAkcm93OwogICAgfQogICAgaWYoY291bnQoJHJlc3VsdHMpKQogICAgewogICAgICByZXR1cm4gJHJlc3VsdHM7CiAgICB9CiAgfQogIAogIC8qKgogICAqIFJldHVybiBhIG1vZHVsZSdzIHZlcnNpb24KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG1vZHVsZSBuYW1lCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gbW9kdWxlX3ZlcnNpb24oJG5hbWUpCiAgewogICAgaWYoIWVtcHR5KCRuYW1lKSkKICAgIHsKICAgICAgJG9iaiA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG5hbWUpOwogICAgICBpZihpc19vYmplY3QoJG9iaikpCiAgICAgIHsKICAgICAgICByZXR1cm4gJG9iai0+R2V0VmVyc2lvbigpOwogICAgICB9CiAgICB9CiAgfQogIAogIAogIC8qKgogICAqIEdldCBwYWdlIGNvbnRlbnQgKG9yIGFueSBwcm9wZXJ0eSB2YWx1ZSkgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYW5vdGhlciBwYWdlIChieSBhbGlhcykKICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGFsaWFzIE9wdGlvbmFsIGFsaWFzCiAgICogQHBhcmFtIHN0cmluZyAkYmxvY2sgVGhlIHByb3BlcnR5IG5hbWUuICBJZiBub3Qgc3BlY2lmaWVkLCAnY29udGVudF9lbicgaXMgYXNzdW1lZC4KICAgKgogICAqIEByZXR1cm4gc3RyaW5nCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGFnZV9jb250ZW50KCRhbGlhcyA9IE5VTEwsICRibG9jayA9IE5VTEwpCiAgewogICAgJGNvbnRlbnQgPSBOVUxMOwogICAgJGJsb2NrICAgPSB0cmltKCRibG9jayk7CiAgICAKICAgIGlmKCEkYmxvY2spCiAgICB7CiAgICAgICRibG9jayA9ICdjb250ZW50X2VuJzsKICAgIH0KICAgIGlmKCEkYWxpYXMpCiAgICB7CiAgICAgICRjb250ZW50ID0gQ21zQXBwOjpnZXRfaW5zdGFuY2UoKS0+Z2V0X2NvbnRlbnRfb2JqZWN0KCk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICRjb250ZW50b3BzID0gXENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgJGNvbnRlbnQgICAgPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tQWxpYXMoJGFsaWFzKTsKICAgIH0KICAgIGlmKGlzX29iamVjdCgkY29udGVudCkpCiAgICB7CiAgICAgIHJldHVybiAkY29udGVudC0+R2V0UHJvcGVydHlWYWx1ZSgkYmxvY2spOwogICAgfQogIH0KICAKICAKICAvKioKICAgKiBHZXQgYSBzaWJsaW5nIHRvIHRoZSBjdXJyZW50IHBhZ2UgKGlmIGFueSkKICAgKgogICAqIEBwYXJhbSBtaXhlZCAkZGlyIFRoZSBkaXJlY3Rpb24gKHBvc3NpYmxlIHZhbHVlcyBhcmUgLTEscHJldiwxLG5leHQpCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgYWxpYXMgb2YgdGhlIHNwZWNpZmllZCBwYWdlLgogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3NpYmxpbmcoJGRpciwgJGFsaWFzKQogIHsKICAgICRjb250ZW50b3BzID0gXENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgIAogICAgaWYoZW1wdHkoJGFsaWFzKSkKICAgIHsKICAgICAgJGFsaWFzID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgIC8vIEB0b2RvOiBjb3VsZCB1c2UgdGhlIHRyZWUgaGVyZSAoZmluZCB0aGUgbm9kZSwgZ2V0IGl0J3MgcGFyZW50LCB0aGUgcGFyZW50J3MgY2hpbGRzIGFyZSB0aGUgc2libGluZykKICAgICRjb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUFsaWFzKCRhbGlhcyk7CiAgICBpZighaXNfb2JqZWN0KCRjb250ZW50KSkKICAgIHsKICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQogICAgCiAgICAvLyBnZXQgdGhlIGxhc3QgaXRlbSBvdXQgb2YgdGhlIGhpZXJhcmNoeQogICAgLy8gYW5kIHJlYnVpbGQKICAgICRxdWVyeSA9ICdTRUxFQ1QgY29udGVudF9hbGlhcyBGUk9NICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnY29udGVudAogICAgICAgICAgICAgIFdIRVJFIHBhcmVudF9pZCA9ID8gQU5EIGl0ZW1fb3JkZXIgJXMgPyBBTkQgYWN0aXZlID0gMSBPUkRFUiBCWSBpdGVtX29yZGVyICVzIExJTUlUIDEnOwogICAgCiAgICBzd2l0Y2goc3RydG9sb3dlcigkZGlyKSkKICAgIHsKICAgICAgY2FzZSAnLTEnOgogICAgICBjYXNlICdwcmV2JzoKICAgICAgICAkdGhlY2hhciA9ICc8JzsKICAgICAgICAkb3JkZXIgICA9ICdERVNDJzsKICAgICAgYnJlYWs7CiAgICAgIAogICAgICBkZWZhdWx0OgogICAgICAgICR0aGVjaGFyID0gJz4nOwogICAgICAgICRvcmRlciAgID0gJ0FTQyc7CiAgICAgIGJyZWFrOwogICAgfQogICAgCiAgICAkZGIgID0gXENtc0FwcDo6Z2V0X2luc3RhbmNlKCktPkdldERiKCk7CiAgICAkcmVzID0gJGRiLT5HZXRPbmUoc3ByaW50ZigkcXVlcnksICR0aGVjaGFyLCAkb3JkZXIpLCBhcnJheSgkY29udGVudC0+UGFyZW50SWQoKSwgJGNvbnRlbnQtPkl0ZW1PcmRlcigpKSk7CiAgICAKICAgIHJldHVybiAkcmVzOwogIH0KICAKICAvKioKICAgKiBHZXQgYSBmaWxlIGxpc3RpbmcgZm9yIGEgc3BlY2lmaWVkIGRpcmVjdG9yeS4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJGRpciAgICAgICAgICAgVGhlIGFic29sdXRlIGRpcmVjdG9yeS4KICAgKiBAcGFyYW0gc3RyaW5nICRleGNsdWRlcHJlZml4IE9wdGlvbmFsbHkgZXhjbHVkZSBmaWxlcyB3aXRoIHRoaXMgcHJlZml4LgogICAqCiAgICogQHJldHVybiBzdHJpbmdbXQogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X2ZpbGVfbGlzdGluZygkZGlyLCAkZXhjbHVkZXByZWZpeCA9ICcnKQogIHsKICAgICRjb25maWcgPSBjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKICAgIAogICAgJGZpbGVwcmVmaXggPSAnJzsKICAgIGlmKCFlbXB0eSgkZXhjbHVkZXByZWZpeCkpCiAgICB7CiAgICAgICRmaWxlcHJlZml4ID0gJGV4Y2x1ZGVwcmVmaXg7CiAgICB9CiAgICBpZihzdGFydHN3aXRoKCRkaXIsICcvJykpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgICRkaXIgID0gY21zX2pvaW5fcGF0aCgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwgJGRpcik7CiAgICAkbGlzdCA9IGdldF9tYXRjaGluZ19maWxlcygkZGlyLCAnJywgVFJVRSwgVFJVRSwgJGZpbGVwcmVmaXgsIDEpOwogICAgCiAgICByZXR1cm4gJGxpc3Q7CiAgfQogIAogIC8qKgogICAqIEdldCBhIHBhcmFsbGVsIGNvbnRlbnQgb2JqZWN0IGdpdmVuIGdpdmVuIGEgZGlmZmVyZW50IHJvb3QgYWxpYXMKICAgKiBpLmU6IGlmIHRoZSBjdXJyZW50IChvciBzcGVjaWZpZWQgcGFnZSBhbGlhcykgaXMgYXQgaGllcmFyY2h5IGxldmVsIDQuMS4xCiAgICogYW5kIHRoZSAnbmV3IHBhcmVudCcgYWxpYXMgaXMgYXQgaGllcmFyY2h5IGxldmVsIDUKICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBwYWdlIGFsaWFzIGZvciBoaWVyYXJjaHkgbGV2ZWwgNS4xLjEgKGlmIGl0IGV4aXN0cykuCiAgICogdXNlZnVsIGZvciBtdWx0aS1sYW5nIHNpdGVzLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkbmV3X3Jvb3QgICAgIFRoZSBhbGlhcyBvZiB0aGUgbmV3IHJvb3QgcGFnZSAoaS5lOiBmcikKICAgKiBAcGFyYW0gc3RyaW5nICRjdXJyZW50X3BhZ2UgQW4gb3B0aW9uYWwgcGFnZSBhbGlhcy4gIElmIG5vdCBzcGVjaWZpZWQgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLgogICAqCiAgICogQHJldHVybiBDb250ZW50QmFzZSB0aGUgcGFyYWxsZWwgY29udGVudCBvYmplY3QuCiAgICovCiAgc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBnZXRfcGFyYWxsZWxfY29udGVudCgkbmV3X3Jvb3QsICRjdXJyZW50X3BhZ2UgPSBOVUxMKQogIHsKICAgIGlmKGVtcHR5KCRuZXdfcm9vdCkpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgICRjb250ZW50b3BzID0gXENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgIGlmKGVtcHR5KCRjdXJyZW50X3BhZ2UpKQogICAgewogICAgICAkY3VycmVudF9wYWdlID0gXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfYWxpYXMoKTsKICAgIH0KICAgIAogICAgJGN1cl9jb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUFsaWFzKCRjdXJyZW50X3BhZ2UpOwogICAgaWYoIWlzX29iamVjdCgkY3VyX2NvbnRlbnQpKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICR0bXAgPSBzZWxmOjpnZXRfcm9vdF9hbGlhcygkbmV3X3Jvb3QpOyAvLyBtYWtlIHN1cmUgd2UgZ28gdG8gdGhlIHJvb3QKICAgIGlmKCR0bXApCiAgICB7CiAgICAgICRuZXdfcm9vdCA9ICR0bXA7CiAgICB9CiAgICAkbmV3X3Jvb3RfY29udGVudCA9ICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21BbGlhcygkbmV3X3Jvb3QpOwogICAgaWYoIWlzX29iamVjdCgkbmV3X3Jvb3RfY29udGVudCkpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgJGhpZXIxID0gJGN1cl9jb250ZW50LT5IaWVyYXJjaHkoKTsKICAgICRoaWVyMiA9ICRuZXdfcm9vdF9jb250ZW50LT5IaWVyYXJjaHkoKTsKICAgIGlmKCEkaGllcjEgfHwgISRoaWVyMikKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICAkYV9oaWVyMSAgICA9IGV4cGxvZGUoJy4nLCAkaGllcjEpOwogICAgJGFfaGllcjIgICAgPSBleHBsb2RlKCcuJywgJGhpZXIyKTsKICAgICRhX2hpZXIxWzBdID0gJGFfaGllcjJbMF07CiAgICAkaGllcjMgICAgICA9IGltcGxvZGUoJy4nLCAkYV9oaWVyMSk7CiAgICAKICAgIC8vIHdlIGhhdmUgdGhlIG5ldyBoaWVyYXJjaHkuLi4ganVzdCBnb3R0YSBmaW5kIHRoZSByaWdodCBwYWdlIGZvciBpdC4KICAgICRuZXdfcGFnZWlkID0gJGNvbnRlbnRvcHMtPkdldFBhZ2VJREZyb21IaWVyYXJjaHkoJGhpZXIzKTsKICAgIGlmKCEkbmV3X3BhZ2VpZCkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgCiAgICAkbmV3Y29udGVudCA9ICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21BbGlhcygkbmV3X3BhZ2VpZCk7CiAgICAKICAgIHJldHVybiAkbmV3Y29udGVudDsKICB9CiAgCiAgLyoqCiAgICogR2VuZXJhdGUgYSBVUkwgdG8gYW4gYW5jaG9yIG9uIHRoZSBzYW1lIHBhZ2UKICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIG5hbWUgb2YgdGhlIGFuY2hvcgogICAqCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGFuY2hvcl91cmwoJG5hbWUpCiAgewogICAgaWYoISRuYW1lKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAkbmFtZSA9IHRyaW0oJG5hbWUpOwogICAgaWYoISRuYW1lKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAkY29udGVudF9vYmogPSBcY21zX3V0aWxzOjpnZXRfY3VycmVudF9jb250ZW50KCk7CiAgICBpZighaXNfb2JqZWN0KCRjb250ZW50X29iaikpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICRjb250ZW50X29iai0+R2V0VVJMKCkgLiAnIycgLiAkbmFtZTsKICB9CiAgCiAgLyoqCiAgICogR2V0IGEgcGFyYWxsZWwgcGFnZSBhbGlhcyBnaXZlbiBhIGRpZmZlcmVudCByb290IGFsaWFzCiAgICogaS5lOiBpZiB0aGUgY3VycmVudCAob3Igc3BlY2lmaWVkIHBhZ2UgYWxpYXMpIGlzIGF0IGhpZXJhcmNoeSBsZXZlbCA0LjEuMQogICAqIGFuZCB0aGUgJ25ldyBwYXJlbnQnIGFsaWFzIGlzIGF0IGhpZXJhcmNoeSBsZXZlbCA1CiAgICogdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcGFnZSBhbGlhcyBmb3IgaGllcmFyY2h5IGxldmVsIDUuMS4xIChpZiBpdCBleGlzdHMpLgogICAqIHVzZWZ1bCBmb3IgbXVsdGktbGFuZyBzaXRlcy4KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJG5ld19yb290ICAgICBUaGUgYWxpYXMgb2YgdGhlIG5ldyByb290IHBhZ2UgKGkuZTogZnIpCiAgICogQHBhcmFtIHN0cmluZyAkY3VycmVudF9wYWdlIEFuIG9wdGlvbmFsIHBhZ2UgYWxpYXMuICBJZiBub3Qgc3BlY2lmaWVkIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC4KICAgKgogICAqIEByZXR1cm4gc3RyaW5nIHRoZSBhbGlhcyBvZiB0aGUgcGFyYWxsZWwgcGFnZS4KICAgKi8KICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGdldF9wYXJhbGxlbF9wYWdlKCRuZXdfcm9vdCwgJGN1cnJlbnRfcGFnZSA9IE5VTEwpCiAgewogICAgJGNvbnRlbnQgPSBzZWxmOjpnZXRfcGFyYWxsZWxfY29udGVudCgkbmV3X3Jvb3QsICRjdXJyZW50X3BhZ2UpOwogICAgaWYoJGNvbnRlbnQpCiAgICB7CiAgICAgIHJldHVybiAkY29udGVudC0+QWxpYXMoKTsKICAgIH0KICB9CiAgCiAgLyoqCiAgICogR2V0IHRoZSBVUkwgb2YgYSBwYXJhbGxlbCBwYWdlIGdpdmVuIGEgZGlmZmVyZW50IHJvb3QgYWxpYXMKICAgKiBpLmU6IGlmIHRoZSBjdXJyZW50IChvciBzcGVjaWZpZWQgcGFnZSBhbGlhcykgaXMgYXQgaGllcmFyY2h5IGxldmVsIDQuMS4xCiAgICogYW5kIHRoZSAnbmV3IHBhcmVudCcgYWxpYXMgaXMgYXQgaGllcmFyY2h5IGxldmVsIDUKICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBwYWdlIGFsaWFzIGZvciBoaWVyYXJjaHkgbGV2ZWwgNS4xLjEgKGlmIGl0IGV4aXN0cykuCiAgICogdXNlZnVsIGZvciBtdWx0aS1sYW5nIHNpdGVzLgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkbmV3X3Jvb3QgICAgIFRoZSBhbGlhcyBvZiB0aGUgbmV3IHJvb3QgcGFnZSAoaS5lOiBmcikKICAgKiBAcGFyYW0gc3RyaW5nICRjdXJyZW50X3BhZ2UgQW4gb3B0aW9uYWwgcGFnZSBhbGlhcy4gIElmIG5vdCBzcGVjaWZpZWQgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLgogICAqCiAgICogQHJldHVybiBzdHJpbmcgdGhlIGFsaWFzIG9mIHRoZSBwYXJhbGxlbCBwYWdlLgogICAqLwogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gZ2V0X3BhcmFsbGVsX3VybCgkbmV3X3Jvb3QsICRjdXJyZW50X3BhZ2UgPSBOVUxMKQogIHsKICAgICRjb250ZW50ID0gc2VsZjo6Z2V0X3BhcmFsbGVsX2NvbnRlbnQoJG5ld19yb290LCAkY3VycmVudF9wYWdlKTsKICAgIGlmKCRjb250ZW50KQogICAgewogICAgICByZXR1cm4gJGNvbnRlbnQtPkdldFVybCgpOwogICAgfQogIH0KICAKfQoKOwoKLy8gRU9GCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYodmVyc2lvbl9jb21wYXJlKHBocHZlcnNpb24oKSwgJzUuNC4xMScpIDwgMCkKewogIHJldHVybiAiTWluaW11bSBQSFAgdmVyc2lvbiBvZiA1LjQuMTEgcmVxdWlyZWQiOwp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKaWYodmVyc2lvbl9jb21wYXJlKHBocHZlcnNpb24oKSwgJzUuNC4xMScpIDwgMCkKewogIHJldHVybiAiTWluaW11bSBQSFAgdmVyc2lvbiBvZiA1LjQuMTEgcmVxdWlyZWQiOwp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJTbWFydHlFeHQiDQp2ZXJzaW9uID0gMS4wDQphdXRob3IgPSAiSm8gTW9yZyINCmF1dGhvcmVtYWlsID0gImpvbW9yZ0BjbXNtYWRlc2ltcGxlLm9yZyINCm1pbmNtc3ZlcnNpb24gPSAiMi4xLjQiDQpsYXp5bG9hZGFkbWluID0gMA0KbGF6eWxvYWRmcm9udGVuZCA9IDANCg==]]></data>
	</file>
	<file>
	  <filename>/SmartyExt.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNtYXJ0eUV4dCAoYykgMjAyMC0yMDIxIGJ5IENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uCiMgIEFuIGFkZC1vbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBwcm92aWRlIHVzZWZ1bCBmdW5jdGlvbnMKIyAgYW5kIGNvbW1vbmx5IHVzZWQgZ3VpIGNhcGFiaWxpdGllcyB0byBvdGhlciBtb2R1bGVzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEEgZm9yayBvZjoKIwojIE1vZHVsZTogQ0dTaW1wbGVTbWFydHkgKGMpIDIwMDgtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNiAtIDIwMjEgYnkgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgU21hcnR5RXh0IGV4dGVuZHMgQ01TTW9kdWxlCnsKICBjb25zdCBDX1VOU0VUID0gJ191bnNldF8nOwogIAogICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAjIEludGVybmFsIGF1dG9sb2FkZXIKICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgCiAgcHJpdmF0ZSBmaW5hbCBmdW5jdGlvbiBfYXV0b2xvYWRlcigkY2xhc3NuYW1lKQogIHsKICAgICRwYXJ0cyA9IGV4cGxvZGUoJ1xcJywgJGNsYXNzbmFtZSk7CiAgICAkY2xhc3NuYW1lID0gZW5kKCRwYXJ0cyk7CiAgICAKICAgICRmbiA9IGNtc19qb2luX3BhdGgoCiAgICAgICR0aGlzLT5HZXRNb2R1bGVQYXRoKCksCiAgICAgICdsaWInLAogICAgICAnY2xhc3MuJyAuICRjbGFzc25hbWUgLiAnLnBocCcKICAgICk7CiAgICAKICAgIGlmKGZpbGVfZXhpc3RzKCRmbikpCiAgICB7CiAgICAgIHJlcXVpcmVfb25jZSgkZm4pOwogICAgfQogIH0KICAKICBwcml2YXRlIGZpbmFsIGZ1bmN0aW9uIF9pbmNsdWRlcygpCiAgewogICAgJHBhdCA9IGNtc19qb2luX3BhdGgoCiAgICAgICR0aGlzLT5HZXRNb2R1bGVQYXRoKCksCiAgICAgICdsaWInLAogICAgICAnZnVuY3Rpb24uKi5waHAnCiAgICApOwogIAogICAgZm9yZWFjaChnbG9iKCRwYXQpIGFzICRmaWxlbmFtZSkKICAgIHsKICAgICAgaW5jbHVkZV9vbmNlICRmaWxlbmFtZTsKICAgIH0KICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICB7CiAgICBnbG9iYWwgJENNU19JTlNUQUxMX1BBR0UsICRDTVNfUEhBUl9JTlNUQUxMOwogICAgCiAgICBpZihpc3NldCgkQ01TX0lOU1RBTExfUEFHRSkgfHwgaXNzZXQoJENNU19QSEFSX0lOU1RBTEwpKXtyZXR1cm47fQogICAgCiAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAKICAgIGlmKCEkc21hcnR5KXtyZXR1cm47fQogICAgCiAgICBzdGF0aWMgJF9zZXR1cDsKICAgIAogICAgaWYoJF9zZXR1cCl7cmV0dXJuO30KICAgIAogICAgJF9zZXR1cCA9IDE7CiAgCiAgICAkdGhpcy0+X2luY2x1ZGVzKCk7CiAgICBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoYXJyYXkoJHRoaXMsICdfYXV0b2xvYWRlcicpKTsKICAgIAogICAgJHNtYXJ0eS0+cmVnaXN0ZXJDbGFzcygnc214JywgJ3NteCcpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ21vZF9hY3Rpb25fbGluaycsIGFycmF5KCR0aGlzLCAnbW9kdWxlX2FjdGlvbl9saW5rJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ21vZF9hY3Rpb25fdXJsJywgYXJyYXkoJHRoaXMsICdtb2R1bGVfYWN0aW9uX3VybCcpKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9yZXBlYXQnLCBhcnJheSgkdGhpcywgJ3NtYXJ0eV9mdW5jdGlvbl9yZXBlYXQnKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignc2Vzc19wdXQnLCBhcnJheSgkdGhpcywgJ3NtYXJ0eV9mdW5jdGlvbl9zZXNzaW9uX3B1dCcpKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdzZXNzX2VyYXNlJywgYXJyYXkoJHRoaXMsICdzbWFydHlfZnVuY3Rpb25fc2Vzc2lvbl9lcmFzZScpKTsKICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCd4dF9hbmNob3JfbGluaycsIGFycmF5KCR0aGlzLCAncGx1Z2luX2FuY2hvcmxpbmsnKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfc2V0dmFyJywgYXJyYXkoJHRoaXMsICdwbHVnaW5fc2V0dmFyJykpOwogICAgJHNtYXJ0eS0+cmVnaXN0ZXJfZnVuY3Rpb24oJ3h0X3Vuc2V0dmFyJywgYXJyYXkoJHRoaXMsICdwbHVnaW5fdW5zZXR2YXInKSk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigneHRfZ2V0dmFyJywgYXJyYXkoJHRoaXMsICdwbHVnaW5fZ2V0dmFyJykpOwogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogIH0KICAKICBmdW5jdGlvbiBHZXROYW1lKCl7IHJldHVybiAnU21hcnR5RXh0JzsgfQogIAogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOyB9CiAgCiAgZnVuY3Rpb24gR2V0VmVyc2lvbigpeyByZXR1cm4gJzEuMCc7IH0KICAKICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpeyByZXR1cm4gJzIuMS40JzsgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwKCkKICB7CiAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ21vZCcsICR0aGlzKTsKICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdoZWxwLnRwbCcpOwogIH0KICAKICBmdW5jdGlvbiBHZXRBdXRob3IoKXsgcmV0dXJuICdKbyBNb3JnJzsgfQogIAogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCl7IHJldHVybiAnam9tb3JnQGNtc21hZGVzaW1wbGUub3JnJzsgfQogIAogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCiAgewogICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7CiAgICByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnY2hhbmdlbG9nLnRwbCcpOwogIH0KICAKICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpeyByZXR1cm4gRkFMU0U7IH0KICAKICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCl7IHJldHVybiAkdGhpcy0+TGFuZygnbW9kZGVzY3JpcHRpb24nKTsgfQogIAogIGZ1bmN0aW9uIEhhc0FkbWluKCl7IHJldHVybiBGQUxTRTsgfQogIAogIGZ1bmN0aW9uIEhhbmRsZXNFdmVudHMoKXsgcmV0dXJuIEZBTFNFOyB9CiAgCiAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCl7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsgfQogIAogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCl7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOyB9CiAgCiAgLyoKICAgKiBDcmVhdGUgYSBsaW5rIHRvIGFuIGFuY2hvciBmdXJ0aGVyIGRvd24gdGhlIHBhZ2UuCiAgICovCiAgZnVuY3Rpb24gcGx1Z2luX2FuY2hvcmxpbmsoJHBhcmFtcywgJiRzbWFydHkpCiAgewogICAgJG5hbWUgICAgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICduJyk7CiAgICAkbmFtZSAgICA9IGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ25hbWUnLCAkbmFtZSk7CiAgICAkYXNzaWduICA9IHRyaW0oZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAnYXNzaWduJykpOwogICAgJHVybG9ubHkgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICd1Jyk7CiAgICAkdXJsb25seSA9IGNtc190b19ib29sKGdldF9wYXJhbWV0ZXJfdmFsdWUoJHBhcmFtcywgJ3VybG9ubHknLCAkdXJsb25seSkpOwogICAgJHRleHQgICAgPSBnZXRfcGFyYW1ldGVyX3ZhbHVlKCRwYXJhbXMsICd0ZXh0JywgJG5hbWUpOwogICAgdW5zZXQoJHBhcmFtc1snbmFtZSddLCAkcGFyYW1zWyduJ10sICRwYXJhbXNbJ2Fzc2lnbiddLCAkcGFyYW1zWyd1J10sICRwYXJhbXNbJ3VybG9ubHknXSwgJHBhcmFtc1sndGV4dCddKTsKICAgIAogICAgLy8gc3RhcnQgdGhlIHdvcmsKICAgICRvdXQgPSAkdXJsID0gTlVMTDsKICAgIGlmKCRuYW1lKQogICAgewogICAgICAkdXJsID0gc214OjphbmNob3JfdXJsKCRuYW1lKTsKICAgIH0KICAgIAogICAgaWYoJHVybG9ubHkpCiAgICB7CiAgICAgICRvdXQgPSAkdXJsOwogICAgfQogICAgZWxzZQogICAgewogICAgICAvLyBidWlsZCBhIGxpbmsgd2l0aCBhbGwgdGhlIGxlZnRvdmVyIHBhcmFtcyAoZG9uJ3QgZmlsdGVyIHRoZW0sIHRoZXJlIGFyZSBsb3RzIG9mIHZhbGlkIHBhcmFtcyBmb3IgYSBsaW5rKS4KICAgICAgJHRwbCA9ICIgJXM9XCIlc1wiIjsKICAgICAgJG91dCA9ICc8YSc7CiAgICAgICRvdXQgLj0gc3ByaW50ZigkdHBsLCAnaHJlZicsICR1cmwpOwogICAgICBmb3JlYWNoKCRwYXJhbXMgYXMgJGtleSA9PiAkdmFsKQogICAgICB7CiAgICAgICAgJG91dCAuPSAiICRrZXk9XCIkdmFsXCIiOwogICAgICB9CiAgICAgICRvdXQgLj0gJz4nIC4gJHRleHQgLiAnPC9hPic7CiAgICB9CiAgICAKICAgIGlmKCRhc3NpZ24pCiAgICB7CiAgICAgICRzbWFydHktPmFzc2lnbigkYXNzaWduLCAkb3V0KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CiAgfQogIAogIGZ1bmN0aW9uIHBsdWdpbl9zZXR2YXIoJHBhcmFtcywgJiRzYW1ydHkpCiAgewogICAgZm9yZWFjaCgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCkKICAgIHsKICAgICAgJGtleSA9IHRyaW0oJGtleSk7CiAgICAgIGlmKCEka2V5KQogICAgICB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYoJHZhbCA9PSBzZWxmOjpDX1VOU0VUKQogICAgICB7CiAgICAgICAgeHRfdG1wZGF0YTo6ZXJhc2UoJGtleSk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgeHRfdG1wZGF0YTo6c2V0KCRrZXksICR2YWwpOwogICAgICB9CiAgICB9CiAgfQogIAogIGZ1bmN0aW9uIHBsdWdpbl91bnNldHZhcigkcGFyYW1zLCAmJHNtYXJ0eSkKICB7CiAgICBmb3JlYWNoKCRwYXJhbXMgYXMgJGtleSA9PiAkdmFsKQogICAgewogICAgICAka2V5ID0gdHJpbSgka2V5KTsKICAgICAgaWYoISRrZXkpCiAgICAgIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZigka2V5ID09ICd1bnNldCcpCiAgICAgIHsKICAgICAgICBpZigkdmFsKQogICAgICAgIHsKICAgICAgICAgICRsaXN0ID0gZXhwbG9kZSgnLCcsICR2YWwpOwogICAgICAgICAgZm9yZWFjaCgkbGlzdCBhcyAkb25lKQogICAgICAgICAgewogICAgICAgICAgICAkb25lID0gdHJpbSgkb25lKTsKICAgICAgICAgICAgaWYoISRvbmUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB4dF90bXBkYXRhOjplcmFzZSgkb25lKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgeHRfdG1wZGF0YTo6ZXJhc2UoJGtleSk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgZnVuY3Rpb24gcGx1Z2luX2dldHZhcigkcGFyYW1zLCAmJHNtYXJ0eSkKICB7CiAgICAka2V5ICA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAndicpOwogICAgJGtleSAgPSBceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ3ZhcicsICRrZXkpOwogICAgJGRmbHQgPSAoaXNzZXQoJHBhcmFtc1snZGZsdCddKSkgPyAkcGFyYW1zWydkZmx0J10gOiBOVUxMOwogICAgCiAgICAkdmFsID0gTlVMTDsKICAgIGlmKCRrZXkpCiAgICB7CiAgICAgICR2YWwgPSB4dF90bXBkYXRhOjpnZXQoJGtleSwgJGRmbHQpOwogICAgfQogICAgJGFzc2lnbiA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCAnYXNzaWduJyk7CiAgICAkc2NvcGUgID0gc3RydG9sb3dlcihceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywgJ3Njb3BlJywgJ2xvY2FsJykpOwogICAgaWYoJGFzc2lnbikKICAgIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCRhc3NpZ24sICR2YWwpOwogICAgICBpZigkc2NvcGUgPT0gJ2dsb2JhbCcpCiAgICAgIHsKICAgICAgICAkc21hcnR5LT5hc3NpZ25HbG9iYWwoJGFzc2lnbiwgJHZhbCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICR2YWw7CiAgfQogIAogIC8vLy8vLy8vLy8KICAvLyBBIHNpbXBsZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHVybCB0byBhIG1vZHVsZSBhY3Rpb24KICAvLy8vLy8vLy8vCiAgZnVuY3Rpb24gbW9kdWxlX2FjdGlvbl91cmwoJHBhcmFtcywgJHRwbCkKICB7CiAgICAkcGFyYW1zWyd1cmxvbmx5J10gPSAxOwogICAgJGFzc2lnbiAgICAgICAgICAgID0gaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pID8gdHJpbSgkcGFyYW1zWydhc3NpZ24nXSkgOicnOwogICAgdW5zZXQoJHBhcmFtc1snaW1hZ2Vvbmx5J10sICRwYXJhbXNbJ3RleHQnXSwgJHBhcmFtc1sndGl0bGUnXSwgJHBhcmFtc1snaW1hZ2UnXSwgJHBhcmFtc1snY2xhc3MnXSwgJHBhcmFtc1snYXNzaWduJ10pOwogICAgJG91dCA9ICR0aGlzLT5tb2R1bGVfYWN0aW9uX2xpbmsoJHBhcmFtcywgJHRwbCk7CiAgICAKICAgIGlmKCRhc3NpZ24pCiAgICB7CiAgICAgICR0cGwtPmFzc2lnbigkYXNzaWduLCAkb3V0KTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICRvdXQ7CiAgfQogIAogIC8vLy8vLy8vLy8KICAvLyBBIHNpbXBsZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIGxpbmsgdG8gYSBtb2R1bGUgYWN0aW9uCiAgLy8vLy8vLy8vLwogIGZ1bmN0aW9uIG1vZHVsZV9hY3Rpb25fbGluaygkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgICRnQ21zICAgPSBjbXNtcygpOwogICAgJGlubGluZSA9IEZBTFNFOwogICAgCiAgICAkbW9kdWxlID0gJHNtYXJ0eS0+Z2V0X3RlbXBsYXRlX3ZhcnMoJ21vZHVsZScpOwogICAgaWYoISRtb2R1bGUpCiAgICB7CiAgICAgICRtb2R1bGUgPSAkc21hcnR5LT5nZXRfdGVtcGxhdGVfdmFycygnYWN0aW9ubW9kdWxlJyk7CiAgICB9CiAgICAkbW9kdWxlID0gZ2V0X3BhcmFtZXRlcl92YWx1ZSgkcGFyYW1zLCAnbW9kdWxlJywgJG1vZHVsZSk7CiAgICBpZighJG1vZHVsZSkKICAgIHsKICAgICAgJG1vZHVsZSA9ICRzbWFydHktPmdldFRlbXBsYXRlVmFycygnbW9kdWxlJyk7CiAgICB9CiAgICBpZighJG1vZHVsZSkKICAgIHsKICAgICAgJG1vZHVsZSA9ICRzbWFydHktPmdldFRlbXBsYXRlVmFycygnYWN0aW9ubW9kdWxlJyk7CiAgICB9CiAgICBpZighJG1vZHVsZSkKICAgIHsKICAgICAgJG1vZHVsZSA9ICRzbWFydHktPmdldFRlbXBsYXRlVmFycygnX21vZHVsZScpOwogICAgfQogICAgJG1pZCA9ICRzbWFydHktPmdldFRlbXBsYXRlVmFycygnYWN0aW9uaWQnKTsKICAgIAogICAgaWYoISRtaWQpCiAgICB7CiAgICAgICRtaWQgPSAnbTFfJzsKICAgICAgaWYoJGdDbXMtPmlzX2Zyb250ZW5kX3JlcXVlc3QoKSkKICAgICAgewogICAgICAgICRtaWQgPSAnY250bnQwMSc7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYoISRtb2R1bGUpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgdW5zZXQoJHBhcmFtc1snbW9kdWxlJ10pOwogICAgCiAgICAkb2JqID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGUpOwogICAgCiAgICBpZighaXNfb2JqZWN0KCRvYmopKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgICR0ZXh0ID0gJG1vZHVsZTsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3RleHQnXSkpCiAgICB7CiAgICAgICR0ZXh0ID0gdHJpbSgkcGFyYW1zWyd0ZXh0J10pOwogICAgICB1bnNldCgkcGFyYW1zWyd0ZXh0J10pOwogICAgfQogICAgCiAgICAkdGl0bGUgPSAnJzsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3RpdGxlJ10pKQogICAgewogICAgICAkdGl0bGUgPSB0cmltKCRwYXJhbXNbJ3RpdGxlJ10pOwogICAgICB1bnNldCgkcGFyYW1zWyd0aXRsZSddKTsKICAgIH0KICAgIAogICAgJGNvbmZtZXNzYWdlID0gJyc7CiAgICBpZihpc3NldCgkcGFyYW1zWydjb25mbWVzc2FnZSddKSkKICAgIHsKICAgICAgJGNvbmZtZXNzYWdlID0gdHJpbSgkcGFyYW1zWydjb25mbWVzc2FnZSddKTsKICAgICAgdW5zZXQoJHBhcmFtc1snY29uZm1lc3NhZ2UnXSk7CiAgICB9CiAgICAKICAgICRpbWFnZSA9ICcnOwogICAgaWYoaXNzZXQoJHBhcmFtc1snaW1hZ2UnXSkpCiAgICB7CiAgICAgICRpbWFnZSA9IHRyaW0oJHBhcmFtc1snaW1hZ2UnXSk7CiAgICAgIHVuc2V0KCRwYXJhbXNbJ2ltYWdlJ10pOwogICAgfQogICAgCiAgICAkY2xhc3MgPSAnc3lzdGVtaWNvbic7CiAgICBpZihpc3NldCgkcGFyYW1zWydjbGFzcyddKSkKICAgIHsKICAgICAgJGNsYXNzID0gdHJpbSgkcGFyYW1zWydjbGFzcyddKTsKICAgICAgdW5zZXQoJHBhcmFtc1snY2xhc3MnXSk7CiAgICB9CiAgICAKICAgICRhY3Rpb24gPSAnZGVmYXVsdCc7CiAgICBpZihpc3NldCgkcGFyYW1zWydhY3Rpb24nXSkpCiAgICB7CiAgICAgICRhY3Rpb24gPSAkcGFyYW1zWydhY3Rpb24nXTsKICAgICAgdW5zZXQoJHBhcmFtc1snYWN0aW9uJ10pOwogICAgfQogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydpZCddKSkKICAgIHsKICAgICAgJG1pZCAgICA9ICRwYXJhbXNbJ2lkJ107CiAgICAgICRpbmxpbmUgPSBUUlVFOwogICAgICB1bnNldCgkcGFyYW1zWydpZCddKTsKICAgIH0KICAgIAogICAgJGltYWdlb25seSA9IEZBTFNFOwogICAgaWYoaXNzZXQoJHBhcmFtc1snaW1hZ2Vvbmx5J10pKQogICAgewogICAgICAkaW1hZ2Vvbmx5ID0gVFJVRTsKICAgICAgdW5zZXQoJHBhcmFtc1snaW1hZ2Vvbmx5J10pOwogICAgfQogICAgCiAgICAkcGFnZWlkID0gY21zX3V0aWxzOjpnZXRfY3VycmVudF9wYWdlaWQoKTsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3BhZ2UnXSkpCiAgICB7CiAgICAgIC8vIGNvbnZlcnQgdGhlIHBhZ2UgYWxpYXMgdG8gYW4gaWQKICAgICAgJG1hbmFnZXIgPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgICAkbm9kZSAgICA9ICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJHBhcmFtc1sncGFnZSddKTsKICAgICAgaWYoaXNzZXQoJG5vZGUpKQogICAgICB7CiAgICAgICAgJGNvbnRlbnQgPSAkbm9kZS0+R2V0Q29udGVudCgpOwogICAgICAgIGlmKGlzc2V0KCRjb250ZW50KSkKICAgICAgICB7CiAgICAgICAgICAkcGFnZWlkID0gJGNvbnRlbnQtPklkKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlJZCgkcGFyYW1zWydwYWdlJ10pOwogICAgICAgIGlmKGlzc2V0KCRub2RlKSkKICAgICAgICB7CiAgICAgICAgICAkcGFnZWlkID0gJHBhcmFtc1sncGFnZSddOwogICAgICAgIH0KICAgICAgfQogICAgICB1bnNldCgkcGFyYW1zWydwYWdlJ10pOwogICAgfQogICAgCiAgICAkdXJsb25seSA9ICFlbXB0eSgkcGFyYW1zWyd1cmxvbmx5J10pOwogICAgaWYoJHVybG9ubHkpCiAgICB7CiAgICAgICR1cmxvbmx5ID0gVFJVRTsKICAgICAgdW5zZXQoJHBhcmFtc1sndXJsb25seSddKTsKICAgIH0KICAgIAogICAgJGpzZnJpZW5kbHkgPSAhZW1wdHkoJHBhcmFtc1snanNmcmllbmRseSddKTsKICAgIGlmKCRqc2ZyaWVuZGx5KQogICAgewogICAgICAkanNmcmllbmRseSA9IFRSVUU7CiAgICAgICR1cmxvbmx5ICAgID0gVFJVRTsKICAgICAgdW5zZXQoJHBhcmFtc1snanNmcmllbmRseSddKTsKICAgIH0KICAgIAogICAgJGZvcmpzID0gIWVtcHR5KCRwYXJhbXNbJ2ZvcmpzJ10pOwogICAgaWYoJGZvcmpzKQogICAgewogICAgICAkanNmcmllbmRseSA9IFRSVUU7CiAgICAgICR1cmxvbmx5ICAgID0gVFJVRTsKICAgICAgdW5zZXQoJHBhcmFtc1snZm9yanMnXSk7CiAgICB9CiAgICAKICAgICRmb3JhamF4ID0gIWVtcHR5KCRwYXJhbXNbJ2ZvcmFqYXgnXSk7CgogICAgaWYoJGZvcmFqYXgpCiAgICB7CiAgICAgICRqc2ZyaWVuZGx5ID0gVFJVRTsKICAgICAgJHVybG9ubHkgICAgPSBUUlVFOwogICAgICAkZm9yYWpheCAgICA9IFRSVUU7CiAgICAgIHVuc2V0KCRwYXJhbXNbJ2ZvcmFqYXgnXSk7CiAgICAgIHVuc2V0KCRwYXJhbXNbJ2Zvcl9hamF4J10pOwogICAgfQogICAgCiAgICAkYXNzaWduID0gJyc7CiAgICBpZihpc3NldCgkcGFyYW1zWydhc3NpZ24nXSkpCiAgICB7CiAgICAgICRhc3NpZ24gPSB0cmltKCRwYXJhbXNbJ2Fzc2lnbiddKTsKICAgICAgdW5zZXQoJHBhcmFtc1snYXNzaWduJ10pOwogICAgfQogICAgCiAgICAkYWRkdGV4dCA9ICcnOwogICAgaWYoJHRpdGxlKQogICAgewogICAgICAkYWRkdGV4dCA9ICd0aXRsZT0iJyAuICR0aXRsZSAuICciJzsKICAgIH0KICAgIAogICAgaWYoIWVtcHR5KCRpbWFnZSkgJiYgbWV0aG9kX2V4aXN0cygkb2JqLCAnQ3JlYXRlSW1hZ2VMaW5rJykgJiYgJHVybG9ubHkgPT0gRkFMU0UpCiAgICB7CiAgICAgICRvdXRwdXQgPSAkb2JqLT5DcmVhdGVJbWFnZUxpbmsoCiAgICAgICAgJG1pZCwgJGFjdGlvbiwgJHBhZ2VpZCwgJHRleHQsICRpbWFnZSwgJHBhcmFtcywgJGNsYXNzLCAkY29uZm1lc3NhZ2UsICRpbWFnZW9ubHksIEZBTFNFLCAkYWRkdGV4dAogICAgICApOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkb3V0cHV0ID0gJG9iai0+Q3JlYXRlTGluaygkbWlkLCAkYWN0aW9uLCAkcGFnZWlkLCAkdGV4dCwgJHBhcmFtcywgJGNvbmZtZXNzYWdlLCAkdXJsb25seSwgJGlubGluZSwgJGFkZHRleHQpOwogICAgICBpZigkdXJsb25seSAmJiAkanNmcmllbmRseSkKICAgICAgewogICAgICAgICRvdXRwdXQgPSBzdHJfcmVwbGFjZSgnYW1wOycsICcnLCAkb3V0cHV0KTsKICAgICAgfQogICAgICBpZigkZm9yYWpheCkKICAgICAgewogICAgICAgIGlmKHN0cnBvcygkb3V0cHV0LCAnPycpID09PSBGQUxTRSkKICAgICAgICB7CiAgICAgICAgICAkb3V0cHV0IC49ICc/c2hvd3RlbXBsYXRlPWZhbHNlJzsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICRvdXRwdXQgLj0gJyZzaG93dGVtcGxhdGU9ZmFsc2UnOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgCiAgICAvLyBhbGwgZG9uZQogICAgaWYoIWVtcHR5KCRhc3NpZ24pKQogICAgewogICAgICAkc21hcnR5LT5hc3NpZ24oJGFzc2lnbiwgJG91dHB1dCk7CiAgICAgIAogICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIHJldHVybiAkb3V0cHV0OwogIH0KICAKICAKICAvLy8vLy8vLy8vCiAgLy8gQSBzaW1wbGUgZnVuY3Rpb24gdG8gcmVwZWF0IGEgc3RyaW5nIE4gdGltZXMKICAvLy8vLy8vLy8vCiAgZnVuY3Rpb24gc21hcnR5X2Z1bmN0aW9uX3JlcGVhdCgkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgICRudW0gPSAxOwogICAgaWYoIWlzc2V0KCRwYXJhbXNbJ3RleHQnXSkpCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICAgICR0ZXh0ID0gJHBhcmFtc1sndGV4dCddOwogICAgaWYoaXNzZXQoJHBhcmFtc1snY291bnQnXSkpCiAgICB7CiAgICAgICRudW0gPSAoaW50KSRwYXJhbXNbJ2NvdW50J107CiAgICB9CiAgICAKICAgICRvdXQgPSAnJzsKICAgIGZvcigkaSA9IDA7ICRpIDwgJG51bTsgJGkrKykKICAgIHsKICAgICAgJG91dCAuPSAkdGV4dDsKICAgIH0KICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pKQogICAgewogICAgICAkZ0NtcyAgID0gY21zbXMoKTsKICAgICAgJHNtYXJ0eSA9ICRnQ21zLT5HZXRTbWFydHkoKTsKICAgICAgJHNtYXJ0eS0+YXNzaWduKHRyaW0oJHBhcmFtc1snYXNzaWduJ10pLCAkb3V0KTsKICAgICAgCiAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgcmV0dXJuICRvdXQ7CiAgfQogIAogIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9zZXNzaW9uX3B1dCgkcGFyYW1zLCAkc21hcnR5KQogIHsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3ZhciddKSAmJiBpc3NldCgkcGFyYW1zWyd2YWx1ZSddKSkKICAgIHsKICAgICAgJHZhciA9IHRyaW0oJHBhcmFtc1sndmFyJ10pOwogICAgICBpZihpc19zdHJpbmcoJHZhcikpCiAgICAgIHsKICAgICAgICAkX1NFU1NJT05bJHZhcl0gPSAkcGFyYW1zWyd2YWx1ZSddOwogICAgICB9CiAgICB9CiAgfQogIAogIGZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9zZXNzaW9uX2VyYXNlKCRwYXJhbXMsICRzbWFydHkpCiAgewogICAgaWYoaXNzZXQoJHBhcmFtc1sndmFyJ10pKQogICAgewogICAgICAkdmFyID0gdHJpbSgkcGFyYW1zWyd2YXInXSk7CiAgICAgIGlmKGlzX3N0cmluZygkdmFyKSAmJiBpc3NldCgkX1NFU1NJT05bJHZhcl0pKQogICAgICB7CiAgICAgICAgdW5zZXQoJF9TRVNTSU9OWyR2YXJdKTsKICAgICAgfQogICAgfQogIH0KICAKfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBUT0RPIQ0KPHVsPg0KPGxpPjEuMCAtIERlY2VtYmVyLCAyMDA3DQogIDxwPkluaXRpYWwgcmVsZWFzZTwvcD4NCjwvbGk+DQo8L3VsPg0KLS0+]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCBzcmM9InskbW9kLT5HZXRNb2R1bGVVUkxQYXRoKCl9L2pzL2pzLmNvb2tpZS5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0Pg0KalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KICB2YXIgYWN0aXZlX3RhYiA9IENvb2tpZXMuZ2V0KCd7JHBhcmVudF9uYW1lfV9hY3RpdmUnKTsNCg0KICBpZih0eXBlb2YgYWN0aXZlX3RhYiA9PT0gInVuZGVmaW5lZCIpDQogIHsNCiAgICBfc2V0X2FjdGl2ZV90YWIoJ2dlbmVyYWwnKTsNCiAgfQ0KICBlbHNlDQogIHsNCiAgICBfc2V0X2FjdGl2ZV90YWIoYWN0aXZlX3RhYik7DQogIH0NCg0KICAkKCcjcGFnZV90YWJzID4gZGl2JykNCiAgICAuZWFjaChmdW5jdGlvbigpDQogICAgICAgICAgew0KICAgICAgICAgICAgJCh0aGlzKS5jbGljayhmdW5jdGlvbigpDQogICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb29raWVzLnNldCgneyRwYXJlbnRfbmFtZX1fYWN0aXZlJywgdGhpcy5pZCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0pOw0KfSk7DQoNCg0KZnVuY3Rpb24gX3NldF9hY3RpdmVfdGFiKHRhYl9uYW1lKQ0Kew0KICAkKCcjcGFnZV90YWJzID4gZGl2JykNCiAgICAuZWFjaChmdW5jdGlvbigpDQogICAgICAgICAgew0KICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7DQogICAgICAgICAgfSk7DQoNCiAgJCgnI3BhZ2VfY29udGVudCA+IGRpdicpDQogICAgLmVhY2goZnVuY3Rpb24oKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgICQodGhpcykuaGlkZSgpOw0KICAgICAgICAgIH0pOw0KDQogICQoJyMnICsgdGFiX25hbWUpLmFkZENsYXNzKCdhY3RpdmUnKTsNCiAgJCgnIycgKyB0YWJfbmFtZSArICdfYycpLnNob3coKTsNCiAgQ29va2llcy5zZXQoJ3skcGFyZW50X25hbWV9X2FjdGl2ZScsIHRhYl9uYW1lKTsNCg0KfQ0KPC9zY3JpcHQ+DQo8ZGl2IGlkPSJwYWdlX3RhYnMiPg0KICA8ZGl2ICBpZD0iZ2VuZXJhbCI+DQogICAgICBHZW5lcmFsDQogIDwvZGl2Pg0KICA8ZGl2ICBpZD0icGx1Z2lucyI+DQogICAgICBQbHVnaW5zDQogIDwvZGl2Pg0KICA8ZGl2ICBpZD0iY2xhc3MiPg0KICAgICAgQ2xhc3MNCiAgPC9kaXY+DQogIDxkaXYgaWQ9ImFib3V0Ij4NCiAgICAgQWJvdXQNCiAgPC9kaXY+DQo8L2Rpdj4NCjxkaXYgaWQ9InBhZ2VfY29udGVudCI+DQogIDxkaXYgaWQ9ImdlbmVyYWxfYyI+DQogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOlNtYXJ0eUV4dDtoZWxwX2dlbmVyYWxfdGFiLnRwbCd9DQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJwbHVnaW5zX2MiPg0KICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpTbWFydHlFeHQ7aGVscF9wbHVnaW5zX3RhYi50cGwnfQ0KICA8L2Rpdj4NCiAgPGRpdiBpZD0iY2xhc3NfYyI+DQogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOlNtYXJ0eUV4dDtoZWxwX2NsYXNzX3RhYi50cGwnfQ0KICA8L2Rpdj4NCiAgPGRpdiBpZD0iYWJvdXRfYyI+DQogICAge2luY2x1ZGUgZmlsZT0nbW9kdWxlX2ZpbGVfdHBsOlNtYXJ0eUV4dDtoZWxwX2Fib3V0X3RhYi50cGwnfQ0KCTwvZGl2Pg0KICA8ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2Pg0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/help_about_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPkFib3V0IHRoaXMgbW9kdWxlPC9oMz4NCg0KICA8cD5UaGlzIG1vZHVsZSBpcyBhIGZvcmsgb2YgPHN0cm9uZz5DR1NpbXBsZVNtYXJ0eTwvc3Ryb25nPiBkZXZlbG9wZWQgYnkgPHN0cm9uZz5Sb2JlcnQgQ2FtcGJlbGwgJmx0O2NhbGd1eTEwMDAmZ3Q7PC9zdHJvbmc+LjxiciAvPg0KICAgICAgVGhpcyBpcyBhIDFzdCBnZW5lcmF0aW9uIGZvcmsgb2YgdGhlIG1vZHVsZS4gQ29uc2lkZXIgdGhpcyBhcyBhbm90aGVyIGZsYXZvdXIgb2YgdGhlIG9yaWdpbmFsIG1vZHVsZS48YnIgLz4NCg0KICBJZiB5b3UgZmluZCBhbnkgYnVncyBwbGVhc2UgZmVlbCBmcmVlIHRvIHN1Ym1pdCBhIGJ1ZyByZXBvcnQgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9idWcvbGlzdC8xNDYzIiB0YXJnZXQ9Il9ibGFuayI+aGVyZTwvYT4gb3IgZm9yIGFueSBnb29kIGlkZWFzIGNvbnNpZGVyIHN1Ym1pdGluZyBhIGZlYXR1cmUgcmVxdWVzdCA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2ZlYXR1cmVfcmVxdWVzdC9saXN0LzE0NjMiIHRhcmdldD0iX2JsYW5rIj5oZXJlPC9hPi48L3A+DQogIDxwPlBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBkZXZlbG9wZXJzIGRvIGhhdmUgdGhlaXIgZGFpbHkgam9icyB3aGljaCBtZWFucyB0aGF0IGZlYXR1cmUgcmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgYW5kIGRvbmUgYXMgdGltZSBhbGxvd3MuIElmIHlvdSBuZWVkIGEgZmVhdHVyZSByZWFsbHkgYmFkbHkgY29uc2lkZXIgY29udGFjdGluZyBvbmUgb2YgdGhlIGRldmVsb3BlcnMgZm9yIGEgc3BvbnNvcmVkIGRldmVsb3BtZW50Lg0KICA8L3A+DQoNCjxoMz5TdXBwb3J0PC9oMz4NCjxwPlRoZSBtb2R1bGUgYXV0aG9yIC8gbWFpbnRhaW5lcnMgb3IgcHJvamVjdCBtYW5hZ2VycyBhcmUgaW4gbm8gd2F5IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZSBpbiBhbnkgZmFzaGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkEgYnVnIHRyYWNraW5nIGFuZCBmZWF0dXJlIHJlcXVlc3Qgc3lzdGVtIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIHRoaXMgbW9kdWxlIDxhIGhyZWY9Imh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvc21hcnR5ZXh0Ij5oZXJlPC9hPi4gUGxlYXNlIGJlIHZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlIHdoZW4gc3VibWl0dGluZyBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cywgYW5kIGZvciBidWcgcmVwb3J0cyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBwcm92aWRlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIHJlbGlhYmx5IHJlcHJvZHVjZSB0aGUgaXNzdWUuPC9saT4NCjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uICBXaGVuIGRlc2NyaWJpbmcgYW4gaXNzdWUgcGxlYXNlIG1ha2UgYW4gZWZmb3J0IHRvIHByb3ZpZGUgYWxsIHJlbGV2YW50IGluZm9ybWF0aW9uLCBhIHRob3JvdWdoIGRlc2NyaXB0aW9uIG9mIHlvdXIgaXNzdWUsIGFuZCBzdGVwcyB0byByZXByb2R1Y2UgaXQgb3IgeW91ciBkaXNjdXNzaW9uIG1heSBiZSBpZ25vcmVkLjwvbGk+DQo8L3VsPg0KDQoNCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0Ke2lmICRzbWFydHkubm93fGRhdGVfZm9ybWF0OiIlWSIgPT0gJzIwMjAnfXskY3IgPSAnMjAyMCd9e2Vsc2V9eyRjciA9ICIyMDIwIC0geyRzbWFydHkubm93fGRhdGVfZm9ybWF0OiclWSd9In17L2lmfQ0KPHA+Q29weXJpZ2h0ICZjb3B5OyB7JGNyfSwgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24gPGEgaHJlZj0ibWFpbHRvOmluZm9AY21zbWFkZXNpbXBsZS5vcmciPiZsdDtpbmZvQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwOCwgUm9iZXJ0IENhbXBiZWxsICZsdDtjYWxndXkxMDAwJmd0Oy4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPGhyPg0KPHA+PHN0cm9uZz5TbWFydHlFeHQ8L3N0cm9uZz4gaXMgZnJlZSBzb2Z0d2FyZTs8YnIgLz4geW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIDxzdHJvbmc+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L3N0cm9uZz4gYXMgcHVibGlzaGVkIGJ5IHRoZSA8c3Ryb25nPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjwvc3Ryb25nPjs8YnIgLz4gZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+DQo8cD48c3Ryb25nPlNtYXJ0eUV4dDwvc3Ryb25nPiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgPHN0cm9uZz5XSVRIT1VUIEFOWSBXQVJSQU5UWTwvc3Ryb25nPjs8YnIgLz4gd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIDxzdHJvbmc+TUVSQ0hBTlRBQklMSVRZPC9zdHJvbmc+IG9yIDxzdHJvbmc+RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0U8L3N0cm9uZz4uPC9wPg0KPHA+U2VlIHRoZUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuPC9wPg0KIDxwPllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIDxzdHJvbmc+R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U8L3N0cm9uZz4gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07PGJyIC8+IGlmIG5vdCwgd3JpdGUgdG8gdGhlIDxzdHJvbmc+RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQTwvc3Ryb25nPiBvciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5yZWFkIGl0IG9ubGluZTwvYT4uPC9wPg0KPHA+PHN0cm9uZz5Zb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIDxzdHJvbmc+U21hcnR5RXh0PC9zdHJvbmc+Ljwvc3Ryb25nPjwvcD4NCjxocj4NCjxoND5DdXJyZW50IE1haW50YWluZXJzPC9oND4NCjx1bD4NCiAgPGxpIGNsYXNzPSJwX2JvdHRvbV8xNSI+PHN0cm9uZz5GZXJuYW5kbyBNb3JnYWRvIChKbyBNb3JnKTwvc3Ryb25nPjwvbGk+DQo8L3VsPg0KDQo8aDQ+UGFzdCBNYWludGFpbmVyczwvaDQ+DQo8dWw+DQogIDxsaT48c3Ryb25nPlJvYmVydCBDYW1wYmVsbCAoY2FsZ3V5MTAwMCk8L3N0cm9uZz4gPGJyIC8+d3d3LmNhbGd1eTEwMDAuY29tPC9saT4NCjwvdWw+DQoNCjxoND5Lbm93biBDb250cmlidXRvcnM8L2g0Pg0KPHVsPg0KICA8bGk+PHN0cm9uZz5Sb2JlcnQgQ2FtcGJlbGwgKGNhbGd1eTEwMDApPC9zdHJvbmc+PGJyIC8+d3d3LmNhbGd1eTEwMDAuY29tPC9saT4NCjwvdWw+DQoNCnsqDQpUT0RPOiBuZWVkIGFuIHVwZGF0ZWQgbGlzdCBvZiBzcG9uc29ycyA6fCAoSk0pDQo8aDQ+S25vd24gU3BvbnNvcnM8L2g0Pg0KPHVsPg0KICA8bGk+PHN0cm9uZz5NYXR0IEhvcm5zYnkgKERJR0kzKTwvc3Ryb25nPjxiciAvPnd3dy5tYXR0aG9ybnNieS5jYTwvbGk+DQogIDxsaT48c3Ryb25nPkdyZWdvcnkgUHJvc3NlciAoZ2VlcGVycyk8L3N0cm9uZz48YnIgLz53d3cuc3RpY2t5d2lja2V0ZGVzaWducy5jb208L2xpPg0KPC91bD4NCip9]]></data>
	</file>
	<file>
	  <filename>/templates/help_class_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGg0PlNtYXJ0eSBVc2FibGUgQ2xhc3M8L2g0Pg0KPHA+V2hlbiB0aGlzIG1vZHVsZSBpcyBpbnN0YWxsZWQsIGEgbmV3IHNtYXJ0eSBjbGFzcyBuYW1lZCBzbXggaXMgYXV0b21hdGljYWxseSBhdmFpbGFibGUgdG8geW91ciBwYWdlIHRlbXBsYXRlcyBhbmQgdmFyaW91cyBtb2R1bGUgdGVtcGxhdGVzLiAgVGhpcyBzbWFydHkgY2xhc3MgaGFzIG51bWVyb3VzIGZ1bmN0aW9ucyB0aGF0IHlvdSBjYW4gY2FsbCBhdCBhbnkgdGltZS48L3A+DQo8aDU+QXZhaWxhYmxlIEZ1bmN0aW9uczo8L2g1Pg0KPHVsPg0KDQo8bGk+PHN0cm9uZz54dF9zZXR2YXI8L3N0cm9uZz4obmFtZT12YWx1ZSBbbmFtZTI9dmFsdWUyWyBuYW1lMz12YWx1ZTNdXSkNCiAgIDxwPkZvciB1c2Ugd2hlbiBzbWFydHkgdmFyaWFibGUgc2NvcGUgaXMgYmVpbmcgcHJvYmxlbWF0aWMuIFRoaXMgcGx1Z2luIHdpbGwgc3RvcmUgZGF0YSBvdXRzaWRlIG9mIHNtYXJ0eSB0byBhbGxvdyB0aGF0IGRhdGEgdG8gYmUgcmVjYWxsZWQgaW4gYSBzdWIgdGVtcGxhdGUgb3IgYXQgYSBsYXRlciBwbGFjZSBpbiB0aGUgc2FtZSB0ZW1wbGF0ZS48L3A+DQogICA8cD5FeGFtcGxlOiAgPGNvZGU+JiMxMjM7eHRfc2V0dmFyIGZvbz0nYmFyJyBmb28yPSdiYXIyJyBmb28zPSdiYXIzJ308L2NvZGU+PC9wPg0KICAgPGJyLz4NCjwvbGk+DQoNCjxsaT48c3Ryb25nPnh0X3Vuc2V0dmFyPC9zdHJvbmc+KG5hbWU9dmFsdWUgW25hbWUyPXZhbHVlMiBbbmFtZTM9dmFsdWUzXV0pDQogICA8cD5Gb3IgdXNlIHdoZW4gc21hcnR5IHZhcmlhYmxlIHNjb3BlIGlzIGJlaW5nIHByb2JsZW1hdGljLCB0aGlzIHBsdWdpbiBhbGxvd3MgZXJhc2luZyBkYXRhIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCB0aGUgJiMxMjM7c2V0dmFyfSBwbHVnaW4uPC9wPg0KICAgPHA+QXJndW1lbnRzOg0KICAgICAgPHVsPg0KICAgICAgICA8bGk+dW5zZXQgLSByZXF1aXJlZCA6IEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiB0aGUgbmFtZXMgb2YgZGF0YSBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aCA8Y29kZT4mIzEyMztzZXR2YXJ9PC9jb2RlPjwvbGk+DQogICAgICA8L3VsPg0KICA8L3A+DQogIDxwPkV4YW1wbGU6ICA8Y29kZT4mIzEyMzt4dF91bnNldHZhciB1bnNldD0nZm9vMixmb28zJ308L2NvZGU+PC9wPg0KICAgPGJyLz4NCjwvbGk+DQoNCjxsaT48c3Ryb25nPnh0X2dldHZhcjwvc3Ryb25nPih2YXI9bmFtZSBbZGZsdD12YWx1ZV0gW2Fzc2lnbj1uYW1lIFtzY29wZT1nbG9iYWx8bG9jYWxdXSkNCiAgPHA+Rm9yIHVzZSB3aGVuIHNtYXJ0eSB2YXJpYWJsZSBzY29wZSBpcyBiZWluZyBwcm9ibGVtYXRpYy4gIFRoaXMgcGx1Z2luIHdpbGwgcmV0cmlldmUgZGF0YSBwcmV2aW91c2x5IGNyZWF0ZWQgd2l0aCB0aGUgJiMxMjM7c2V0dmFyfSBwbHVnaW4uICBZb3UgY2FuIG9wdGlvbmFsbHkgYXNzaWduIHRoZSBkYXRhIHRvIGEgbmV3IGxvY2FsLCBvciBnbG9iYWwgc21hcnR5IHZhcmlhYmxlLjwvcD4NCiAgPHA+QXJndW1lbnRzOg0KICAgICA8dWw+DQogICAgICAgPGxpPnZ8dmFyICAtIHJlcXVpcmVkIDogVGhlIG5hbWUgb2YgdGhlIHN0b3JlZCBkYXRhIHRvIHJldHJpZXZlLjwvbGk+DQogICAgICAgPGxpPmRmbHQgICAtIG9wdGlvbmFsIDogQSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIG5hbWVkIHZhcmlhYmxlIHNwZWNpZmllZCBpbiB0aGUgdmFyIGFyZ3VtZW50IGRvZXMgbm90IGV4aXN0LjwvbGk+DQogICAgICAgPGxpPmFzc2lnbiAtIG9wdGlvbmFsIDogSW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIG91dHB1dCBkYXRhIGFzc2lnbiB0aGUgZGF0YSB0byB0aGUgbmFtZWQgc3BhcnR5IHZhcmlhYmxlLjwvbGk+DQogICAgICAgPGxpPnNjb3BlICAtIG9wdGlvbmFsIDogRm9yIHVzZSBvbmx5IHdoZW4gdGhlIGFzc2lnbiBhcmd1bWVudCBpcyB1c2VkLCBhZGRpdGlvbmFsbHkgYXNzaWduIHRoZSBvdXRwdXQgZGF0YSB0byBhIHNtYXJ0eSB2YXJpYWJsZSB0byB0aGUgZ2xvYmFsIHNjb3BlLjwvbGk+DQogICAgIDwvdWw+DQogIDwvcD4NCiAgPHA+RXhhbXBsZTEgLSBPdXRwdXQgYSBwcmV2aW91c2x5IHNldCB2YXJpYWJsZSB0byB0aGUgdGVtcGxhdGU6IDxjb2RlPiYjMTIzO3h0X2dldHZhciB2YXI9Zm9vfTwvY29kZT48L3A+DQogIDxwPkV4YW1wbGUyIC0gT3V0cHV0IGEgcHJldmlvdXNseSBzZXQgdmFyaWFibGUgdG8gdGhlIHRlbXBsYXRlLiAgSWYgaXQgZG9lcyBub3QgZXhpc3QsIHVzZSBhIGRlZmF1bHQgdmFsdWUuOiA8Y29kZT4mIzEyMzt4dF9nZXR2YXIgdmFyPWZvbyBkZmx0PSdzb21ldGhpbmcnfTwvY29kZT48L3A+DQogIDxwPkV4YW1wbGUzIC0gT3V0cHV0IGEgcHJldmlvdXNseSBzZXQgdmFyaWFibGUgdG8gYSBsb2NhbCBzbWFydHkgdmFyaWFibGU6IDxjb2RlPiYjMTIzO3h0X2dldHZhciB2YXI9Zm9vIGFzc2lnbj0nZm9vJ30mIzEyMzskZm9vfTwvY29kZT48L3A+DQogIDxwPkV4YW1wbGU0IC0gT3V0cHV0IGEgcHJldmlvdXNseSBzZXQgdmFyaWFibGUgdG8gYSBnbG9iYWwgc21hcnR5IHZhcmlhYmxlOiA8Y29kZT4mIzEyMzt4dF9nZXR2YXIgdmFyPWZvbyBhc3NpZ249J2Zvbycgc2NvcGU9J2dsb2JhbCd9JiMxMjM7JGZvb308L2NvZGU+PC9wPg0KICA8YnIvPg0KPC9saT4NCg0KDQo8YnIvPg0KPGxpPjxzdHJvbmc+c214OjpzZWxmX3VybDwvc3Ryb25nPigpDQogICAgPHA+UmV0dXJuIHRoZSBjdXJyZW50IFVSTDwvcD4NCjwvbGk+DQoNCjxici8+DQo8bGk+PHN0cm9uZz5zbXg6OmFuY2hvcl91cmw8L3N0cm9uZz4oJG5hbWUpDQogIDxwPkdlbmVyYXRlIHRoZSBhYnNvbHV0ZSBVUkwgdG8gYW4gYW5jaG9yIHRoYXQgaXMgb24gdGhlIHNhbWUgcGFnZS48L3A+DQogIDxwPkFyZ3VtZW50czoNCiAgICA8dWw+DQogICAgICA8bGk+JG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgYW5jaG9yIHRvIGxpbmsgdG8uPC9saT4NCiAgICA8L3VsPg0KICA8YnIvPjwvcD4NCiAgPHA+RXhhbXBsZTo8YnIvPg0KICAgIDxwcmU+Jmx0O2EgaHJlZj0iJiMxMjM7c214OjphbmNob3JfdXJsKCdib3R0b20nKX0iJmd0O0dvIHRvIHRoZSBib3R0b20mbHQ7L2EmZ3Q7DQombHQ7YSBuYW1lPSJib3R0b20iJmd0O1RoZSBib3R0b20mbHQ7YSZndDs8L3ByZT48YnIvPg0KICA8L3A+DQo8L2xpPg0KDQo8YnIvPg0KPGxpPjxzdHJvbmc+c214Ojptb2R1bGVfaW5zdGFsbGVkPC9zdHJvbmc+KCRtb2R1bGVuYW1lKQ0KICAgIDxwPlRlc3QgaWYgYSBwYXJ0aWN1bGFyIG1vZHVsZSBpcyBpbnN0YWxsZWQuPC9wPg0KICAgIDxwPkFyZ3VtZW50czoNCiAgICAgICA8dWw+DQogICAgICAgICA8bGk+JG1vZHVsZW5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGNoZWNrPC9saT4NCiAgICAgIDwvdWw+DQogICAgPGJyLz48L3A+DQogIDxwPkV4YW1wbGU6PGJyLz4NCiAgICA8cHJlPiYjMTIzO2lmIHNteDo6bW9kdWxlX2luc3RhbGxlZCgnRnJvbnRFbmRVc2VycycpfUZvdW5kIEZFVSYjMTIzOy9pZn08L3ByZT48YnIvPg0KICA8L3A+DQo8L2xpPg0KDQo8YnIvPg0KPGxpPjxzdHJvbmc+c214Ojptb2R1bGVfdmVyc2lvbjwvc3Ryb25nPigkbW9kdWxlbmFtZSkNCiAgICA8cD5SZXR1cm4gdGhlIHZlcnNpb24gbnVtYmVyIG9mIGEgc3BlY2lmaWMgaW5zdGFsbGVkIG1vZHVsZTwvcD4NCiAgICA8cD5Bcmd1bWVudHM6DQogICAgICAgPHVsPg0KICAgICAgICAgPGxpPiRtb2R1bGVuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBjaGVjazwvbGk+DQogICAgICA8L3VsPg0KICAgIDxici8+PC9wPg0KICA8cD5FeGFtcGxlOjxici8+DQogICAgPHByZT4mIzEyMzskdmVyc2lvbj1zbXg6Om1vZHVsZV92ZXJzaW9uKCdGcm9udEVuZFVzZXJzJyl9V2UgaGF2ZSBWZXJzaW9uICYjMTIzOyRmZXVfdmVyc2lvbn0gb2YgRnJvbnRFbmRVc2VyczwvcHJlPjxici8+DQogIDwvcD4NCjwvbGk+DQoNCjxici8+DQo8bGk+PHN0cm9uZz5zbXg6OmdldF9wYXJlbnRfYWxpYXM8L3N0cm9uZz4oWyRhbGlhc10pDQogICAgPHA+UmV0dXJucyB0aGUgYWxpYXMgb2YgdGhlIHNwZWNpZmllZCBwYWdlcyBwYXJlbnQuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlIGlzIG5vIHBhcmVudC48L3A+DQogICAgPHA+QXJndW1lbnRzOg0KICAgICAgIDx1bD4NCiAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHBhcmVudCBvZi4gIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+DQogICAgICAgPC91bD4NCiAgICA8YnIvPjwvcD4NCiAgPHA+RXhhbXBsZTo8YnIvPg0KICAgIDxwcmU+VGhlIHBhcmVudCBwYWdlIGFsaWFzIGlzICYjMTIzO3NteDo6Z2V0X3BhcmVudF9hbGlhcygpfTwvcHJlPjxici8+DQogIDwvcD4NCjwvbGk+DQoNCjxici8+DQo8bGk+PHN0cm9uZz5zbXg6OmlzX2NoaWxkX29mPC9zdHJvbmc+KCR0ZXN0X3BhcmVudCwkdGVzdF9jaGlsZCkNCiAgICA8cD5UZXN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgc3BlY2lmaWVkIGNoaWxkIGFsaWFzIG9yIGFuY2VzdG9yIGlzIGEgY2hpbGQgb2YgdGhlIHNwZWNpZmllZCBwYXJlbnQgYWxpYXMuDQogICAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB0ZXN0IHRoZSByb290IGFsaWFzIG9yIGFueSBwYXJlbnQgcGFnZS4gIEl0IGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgb24gc2l0ZXMgd2l0aCBtdWx0aXBsZSBsZXZlbHMgb2Ygb3JnYW5pemF0aW9uLg0KICAgIDwvcD4NCiAgICA8cD5Bcmd1bWVudHM6DQogICAgICAgPHVsPg0KICAgICAgIDxsaT4kdGVzdF9wYXJlbnQgLSBzdHJpbmcgVGhlIHBhcmVudCBwYWdlIGFsaWFzIHRvIHRlc3QgYWdhaW5zdC48L2xpPg0KICAgICAgIDxsaT4kdGVzdF9jaGlsZCAtIHN0cmluZyBUaGUgY2hpbGQgcGFnZSBhbGlhcyB0byB0ZXN0IGFnYWluc3QuPC9saT4NCiAgICAgICA8L3VsPg0KICAgIDxici8+PC9wPg0KICA8cD5FeGFtcGxlOjxici8+DQogICAgPHByZT4mIzEyMztpZiBzbXg6OmlzX2NoaWxkX29mKCdob21lJywkcGFnZV9hbGlhcyl9IFRoaXMgaXMgYSBjaGlsZCBvZiB0aGUgaG9tZSBwYWdlICYjMTIzOy9pZn08L3ByZT48YnIvPg0KICA8L3A+DQo8L2xpPg0KDQo8YnIvPg0KPGxpPjxzdHJvbmc+c214OjpnZXRfcm9vdF9hbGlhczwvc3Ryb25nPihbJGFsaWFzXSkNCiAgICA8cD5SZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2VzIHJvb3QgcGFyZW50LiBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSBpcyBubyByb290IHBhcmVudC48L3A+DQogICAgPHA+QXJndW1lbnRzOg0KICAgICAgIDx1bD4NCiAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHJvb3QgcGFyZW50IG9mLiAgSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4NCiAgICAgICA8L3VsPg0KICAgIDxici8+PC9wPg0KICA8cD5FeGFtcGxlOjxici8+DQogICAgPHByZT5UaGUgcm9vdCBwYXJlbnQgcGFnZSBhbGlhcyBpcyAmIzEyMztzbXg6OmdldF9yb290X2FsaWFzKCl9PC9wcmU+PGJyLz4NCiAgPC9wPg0KPC9saT4NCg0KPGJyLz4NCjxsaT48c3Ryb25nPnNteDo6Z2V0X3BhZ2VfdGl0bGU8L3N0cm9uZz4oWyRhbGlhc10pDQogICAgPHA+UmV0dXJucyB0aGUgdGl0bGUgb2YgdGhlIHNwZWNpZmllZCBwYWdlLjwvcD4NCiAgICA8cD5Bcmd1bWVudHM6DQogICAgICAgPHVsPg0KICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgdGl0bGUgb2YuICBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPg0KICAgICAgIDwvdWw+DQogICAgPGJyLz48L3A+DQogIDxwPkV4YW1wbGU6PGJyLz4NCiAgICA8cHJlPlRoZSB0aXRsZSBvZiB0aGUgY3VycmVudCBwYWdlIGlzICYjMTIzO3NteDo6Z2V0X3BhZ2VfdGl0bGUoKX08L3ByZT48YnIvPg0KICA8L3A+DQo8L2xpPg0KDQo8YnIvPg0KPGxpPjxzdHJvbmc+c214OjpnZXRfcGFnZV9tZW51dGV4dDwvc3Ryb25nPihbJGFsaWFzXSkNCiAgICA8cD5SZXR1cm5zIHRoZSBtZW51dGV4dCBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UuPC9wPg0KICAgIDxwPkFyZ3VtZW50czoNCiAgICAgICA8dWw+DQogICAgICAgPGxpPlskYWxpYXNdIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSB0aXRsZSBvZi4gIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+DQogICAgICAgPC91bD4NCiAgICA8YnIvPjwvcD4NCiAgPHA+RXhhbXBsZTo8YnIvPg0KICAgIDxwcmU+VGhlIG1lbnV0ZXh0IG9mIHRoZSBjdXJyZW50IHBhZ2UgaXMgJiMxMjM7c214OjpnZXRfcGFnZV9tZW51dGV4dCgpfTwvcHJlPjxici8+DQogIDwvcD4NCjwvbGk+DQoNCjxici8+DQo8bGk+PHN0cm9uZz5zbXg6OmdldF9wYWdlX3R5cGU8L3N0cm9uZz4oWyRhbGlhc10pDQogICAgPHA+UmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY29udGVudCB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgY29udGVudCBvYmplY3QgKGJ5IGFsaWFzKTwvcD4NCiAgICA8cD5Bcmd1bWVudHM6DQogICAgICAgPHVsPg0KICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gZmluZCB0aGUgdGl0bGUgb2YuICBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPg0KICAgICAgIDwvdWw+DQogICAgPGJyLz48L3A+DQogIDxwPkV4YW1wbGU6PGJyLz4NCiAgICA8cHJlPlRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHBhZ2UgaXMgJiMxMjM7c214OjpnZXRfcGFnZV90eXBlKCl9PC9wcmU+PGJyLz4NCiAgPC9wPg0KPC9saT4NCg0KPGJyLz4NCjxsaT48c3Ryb25nPnNteDo6aGFzX2NoaWxkcmVuPC9zdHJvbmc+KFskYWxpYXNdKQ0KICAgIDxwPlRlc3QgaWYgdGhlIHNwZWNpZmllZCBwYWdlIGhhcyBjaGlsZHJlbi48L3A+DQogICAgPHA+QXJndW1lbnRzOg0KICAgICAgIDx1bD4NCiAgICAgICA8bGk+WyRhbGlhc10gLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIHRlc3QuICBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPg0KICAgICAgIDwvdWw+DQogICAgPGJyLz48L3A+DQogIDxwPkV4YW1wbGU6PGJyLz4NCiAgICA8cHJlPiYjMTIzOyRoYXNfY2hpbGRyZW49c214OjpoYXNfY2hpbGRyZW4oKX0mIzEyMztpZiAkaGFzX2NoaWxkcmVufVRoZSBjdXJyZW50IHBhZ2UgaGFzIGNoaWxkcmVuJiMxMjM7ZWxzZX1UaGUgY3VycmVudCBwYWdlIGhhcyBubyBjaGlsZHJlbiYjMTIzOy9pZn08L3ByZT48YnIvPg0KICA8L3A+DQo8L2xpPg0KDQo8YnIvPg0KPGxpPjxzdHJvbmc+c214OjpnZXRfY2hpbGRyZW48L3N0cm9uZz4oWyRhbGlhc11bLCRzaG93aW5hY3RpdmVdKQ0KICAgPHA+UmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBwYWdlcyBjaGlsZHJlbiAoaWYgYW55KTwvcD4NCiAgICA8cD5Bcmd1bWVudHM6DQogICAgICAgPHVsPg0KICAgICAgIDxsaT5bJGFsaWFzXSAtIChvcHRpb25hbCkgVGhlIHBhZ2UgYWxpYXMgdG8gdGVzdC4gIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkLjwvbGk+DQogICAgICAgPGxpPlskc2hvd2luYWN0aXZlXSAtIChvcHRpb25hbCkgV2V0aGVyIGluYWN0aXZlIHBhZ2VzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0IChkZWZhdWx0cyB0byBmYWxzZSkuPC9saT4NCiAgICAgICA8L3VsPg0KICAgIDxici8+PC9wPg0KICA8cD5GaWVsZHM6DQogICAgICAgPHVsPg0KICAgICAgIDxsaT5hbGlhcyAtIHRoZSBwYWdlIGFsaWFzIG9mIHRoZSBjaGlsZDwvbGk+DQogICAgICAgPGxpPmlkIC0gdGhlIHBhZ2UgaWQgb2YgdGhlIGNoaWxkPC9saT4NCiAgICAgICA8bGk+dGl0bGUgLSB0aGUgdGl0bGUgcGFnZSBvZiB0aGUgY2hpbGQgcGFnZS48L2xpPg0KICAgICAgIDxsaT5tZW51dGV4dCAtIHRoZSBtZW51IHRleHQgb2YgdGhlIGNoaWxkPC9saT4NCiAgICAgICA8bGk+c2hvd19pbl9tZW51IC0gd2V0aGVyIHRoaXMgY2hpbGQgcGFnZSBpcyB2aXNpYmxlIGluIG1lbnVzLjwvbGk+DQogICAgICAgPGxpPnR5cGUgLSBUaGUgdHlwZSBvZiBjaGlsZCBjb250ZW50IG9iamVjdC48L2xpPg0KICAgICAgIDwvdWw+DQogICAgPGJyLz48L3A+DQogIDxwPkV4YW1wbGU6PGJyLz4NCiAgICA8cHJlPg0KJiMxMjM7JGNoaWxkcmVuPXNteDo6Z2V0X2NoaWxkcmVuKCl9DQogICAgICAmIzEyMztpZiBjb3VudCgkY2hpbGRyZW4pfQ0KICAgICAgICAmIzEyMztmb3JlYWNoIGZyb209JGNoaWxkcmVuIGl0ZW09J2NoaWxkJ30NCiAgICAgICAgICAmIzEyMztpZiAkY2hpbGQuc2hvd19pbl9tZW51fQ0KICAgICAgICAgICAgQ2hpbGQ6ICBpZCA9ICYjMTIzOyRjaGlsZC5pZH0gYWxpYXMgPSAmIzEyMzskY2hpbGQuYWxpYXN9Jmx0O2JyLyZndDsNCiAgICAgICAgICAmIzEyMzsvaWZ9DQogICAgICAgICYjMTIzOy9mb3JlYWNofQ0KICAgICAgJiMxMjM7L2lmfQ0KICAgIDwvcHJlPjxici8+DQogIDwvcD4NCjwvbGk+DQoNCjxici8+DQo8bGk+PHN0cm9uZz5zbXg6OmdldF9wYWdlX2NvbnRlbnQ8L3N0cm9uZz4oJGFsaWFzWywkYmxvY2tdKQ0KICAgIDxwPlJldHVybnMgdGhlIHRleHQgb2YgYSBzcGVjaWZpYyBjb250ZW50IGJsb2NrIG9mIGFub3RoZXIgcGFnZS48L3A+DQogICAgPHA+QXJndW1lbnRzOg0KICAgICAgIDx1bD4NCiAgICAgICA8bGk+JGFsaWFzIC0gVGhlIHBhZ2UgYWxpYXMgdG8gZXh0cmFjdCBjb250ZW50IGZyb20uPC9saT4NCiAgICAgICA8bGk+WyRibG9ja10gLSAob3B0aW9uYWwpIFRoZSBuYW1lIG9mIHRoZSBjb250ZW50IGJsb2NrIGluIHRoZSBzcGVjaWZpZWQgcGFnZS4gIElmIHRoaXMgdmFyaWFibGUgaXMgbm90IHNwZWNpZmllZCB0aGUgdmFsdWUgb2YgdGhlIGRlZmF1bHQgY29udGVudCBibG9jayA8ZW0+KGNvbnRlbnRfZW4pPC9lbT4gaXMgYXNzdW1lZC48L2xpPg0KICAgICAgIDwvdWw+DQogICAgPGJyLz48L3A+DQogIDxwPkV4YW1wbGU6PGJyLz4NCiAgICA8cHJlPlRoZSAnc2Vjb25kJyBibG9jayBvZiB0aGUgJ2Fib3V0JyBwYWdlIGlzICYjMTIzOyRmb289c214OjpnZXRfcGFnZV9jb250ZW50KCdhYm91dCcsJ3NlY29uZCcpfSYjMTIzO2V2YWwgdmFyPSRmb299PC9wcmU+PGJyLz4NCiAgPC9wPg0KPC9saT4NCg0KPGJyLz4NCjxsaT48c3Ryb25nPnNteDo6Z2V0X3NpYmxpbmc8L3N0cm9uZz4oJGRpcmVjdGlvbiwkYWxpYXMpDQogICAgPHA+UmV0dXJucyB0aGUgYWxpYXMgb2YgdGhlIG5leHQgb3IgcHJldmlvdXMgc2libGluZyB0byB0aGUgc3BlY2lmaWVkDQogICAgICAgcGFnZS4gb3IgZmFsc2UuPC9wPg0KICAgIDxwPkFyZ3VtZW50czoNCiAgICAgICA8dWw+DQogICAgICAgPGxpPiRkaXJlY3Rpb24gLSB0aGUgZGlyZWN0aW9uIHRvIGxvb2sgaW4uICBwb3NzaWJsZSB2YWx1ZXMgYXJlIHByZXYscHJldmlvdXMsLTEsbmV4dCwxPC9saT4NCiAgICAgICA8L3VsPg0KICAgIDxici8+PC9wPg0KICA8cD5FeGFtcGxlOjxici8+DQogICAgICAgPHByZT5MaW5rIHRvIHByZXZpb3VzIHNpYmxpbmc6ICYjMTIzOyRwcmV2X3NpYmxpbmc9c214OjpnZXRfc2libGluZygmcXVvdDtwcmV2JnF1b3QpfSYjMTIzO2lmICFlbXB0eSgkcHJldl9zaWJsaW5nKX0mIzEyMztjbXNfc2VsZmxpbmsgcGFnZT0mcXVvdDskcHJldl9zaWJsaW5nJnF1b3Q7IHRleHQ9JnF1b3Q7UHJldmlvdXMmcXVvdDt9JiMxMjM7L2lmfTwvcHJlPjxici8+DQogICAgPC9saT4NCg0KPGJyLz4NCjxsaT48c3Ryb25nPnNteDo6Z2V0X3BhcmFsbGVsX3BhZ2U8L3N0cm9uZz4oJG5ld19yb290WywkY3VycmVudF9wYWdlID0gbnVsbF0pDQogICA8cD5HZXQgdGhlIGFsaWFzIG9mIGEgcGFyYWxsZWwgcGFnZSBpbiB0aGUgcGFnZSBzdHJpY3R1cmUgZ2l2ZW4gYSBkaWZmZXJlbnQgcm9vdCBhbGlhcy48L3A+DQogICA8cD5JbiBhIG11bHRpbGFuZ3VhZ2Ugc2l0ZSB3aGVyZSB0aGUgcm9vdCBsZXZlbHMgcmVwcmVzZW50IGRpZmZlcmVudCBsYW5ndWFnZXMsIGl0IG1heSBiZSB1c2VmdWwgdG8gcmV0cmlldmUgdGhlIGFsaWFzIHRvIGFuIGVxdWl2YWxlbnQgcGFnZSBpbiBhIGRpZmZlcmVudCBsYW5ndWFnZS4gIGkuZS46IGlmIHRoZSB1c2VyIGlzIGN1cnJlbnRseSBicm93c2luZyB0aGUgZnJlbmNoIHBhZ2UgYW5kIHdpc2hlcyB0byBzZWUgdGhlIHNhbWUgcGFnZSBpbiBlbmdsaXNoIChpZiBpdCBleGlzdHMpLjwvcD4NCiAgIDxwPlRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYWxpYXMgb2YgdGhlIHNwZWNpZmllZCBwYWdlIHVuZGVyIHRoZSBuZXcgcm9vdC4gIElmIGl0IGV4aXN0cy4gIElmIG5vdGhpbmcgaXMgZm91bmQsIG51bGwgaXMgcmV0dXJuZWQuPC9wPg0KICAgPHA+QXJndW1lbnRzOg0KICAgICAgIDx1bD4NCiAgICAgICA8bGk+bmV3IHJvb3QgLSBUaGUgYWxpYXMgb2YgdGhlIG5ldyByb290IHBhcmVudC4gIE5vdGUsIGlmIGEgdG9wIGxldmVsIHBhZ2UgaXMgbm90IHNwZWNpZmllZCwgdGhlIGFsaWFzIHByb3ZpZGVkIGlzIHVzZWQgdG8gZmluZCB0aGUgdG9wIGxldmVsIHBhZ2UgKHNlZSBnZXRfcm9vdF9hbGlhcykuPC9saT4NCiAgICAgICA8bGk+Y3VycmVudF9wYWdlIC0gKG9wdGlvbmFsKSBUaGUgcGFnZSBhbGlhcyB0byBmaW5kIHRoZSBwZWVyIG9mLiAgSWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQuPC9saT4NCiAgICAgICA8L3VsPg0KICAgIDxici8+PC9wPg0KICA8cD5FeGFtcGxlOjxici8+DQogICAgPHByZT5GaW5kIHRoZSBlcXVpdmFsZW50IGZyZW5jaCBwYWdlIGZvciB0aGlzIHBhZ2U6ICYjMTIzOyR0bXA9c214OjpnZXRfcGFyYWxsZWxfcGFnZSgnRlInKX0mIzEyMztpZiAkdG1wICE9ICcnICYmICR0bXAgIT0gJHBhZ2VfYWxpYXN9JiMxMjM7Y21zX3NlbGZsaW5rIHBhZ2U9JHRtcH0mIzEyMzsvaWZ9PC9wcmU+DQogIDwvcD4NCjwvbGk+DQoNCjxici8+DQo8bGk+PHN0cm9uZz5zbXg6OmdldF9wYXJhbGxlbF91cmw8L3N0cm9uZz4oJG5ld19yb290WywkY3VycmVudF9wYWdlID0gbnVsbF0pDQogICA8cD5HZXQgdGhlIFVSTCBvZiBhIHBhcmFsbGVsIHBhZ2UgaW4gdGhlIHBhZ2Ugc3RyaWN0dXJlIGdpdmVuIGEgZGlmZmVyZW50IHJvb3QgYWxpYXMuPC9wPg0KICAgPHA+SW4gYSBtdWx0aWxhbmd1YWdlIHNpdGUgd2hlcmUgdGhlIHJvb3QgbGV2ZWxzIHJlcHJlc2VudCBkaWZmZXJlbnQgbGFuZ3VhZ2VzLCBpdCBtYXkgYmUgdXNlZnVsIHRvIHJldHJpZXZlIHRoZSBVUkwgdG8gYW4gZXF1aXZhbGVudCBwYWdlIGluIGEgZGlmZmVyZW50IGxhbmd1YWdlLiAgaS5lLjogaWYgdGhlIHVzZXIgaXMgY3VycmVudGx5IGJyb3dzaW5nIHRoZSBmcmVuY2ggcGFnZSBhbmQgd2lzaGVzIHRvIHNlZSB0aGUgc2FtZSBwYWdlIGluIGVuZ2xpc2ggKGlmIGl0IGV4aXN0cykuPC9wPg0KICAgPHA+VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbGlhcyBvZiB0aGUgc3BlY2lmaWVkIHBhZ2UgdW5kZXIgdGhlIG5ldyByb290LiAgSWYgaXQgZXhpc3RzLiAgSWYgbm90aGluZyBpcyBmb3VuZCwgbnVsbCBpcyByZXR1cm5lZC48L3A+DQogICA8cD5Bcmd1bWVudHM6DQogICAgICAgPHVsPg0KICAgICAgIDxsaT5uZXcgcm9vdCAtIFRoZSBhbGlhcyBvZiB0aGUgbmV3IHJvb3QgcGFyZW50LiAgTm90ZSwgaWYgYSB0b3AgbGV2ZWwgcGFnZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgYWxpYXMgcHJvdmlkZWQgaXMgdXNlZCB0byBmaW5kIHRoZSB0b3AgbGV2ZWwgcGFnZSAoc2VlIGdldF9yb290X2FsaWFzKS48L2xpPg0KICAgICAgIDxsaT5jdXJyZW50X3BhZ2UgLSAob3B0aW9uYWwpIFRoZSBwYWdlIGFsaWFzIHRvIGZpbmQgdGhlIHBlZXIgb2YuICBJZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHBhZ2UgaXMgdXNlZC48L2xpPg0KICAgICAgIDwvdWw+DQogICAgPGJyLz48L3A+DQogIDxwPkV4YW1wbGU6PGJyLz4NCiAgICA8cHJlPkZpbmQgdGhlIGVxdWl2YWxlbnQgZnJlbmNoIHBhZ2UgZm9yIHRoaXMgcGFnZTogJiMxMjM7JHVybD1zbXg6OmdldF9wYXJhbGxlbF9wYWdlKCdGUicpfSYjMTIzO2lmICR1cmx9PGEgaHJlZj0iJiMxMjM7JHVybH0iPkZSPC9hPiYjMTIzOy9pZn08L3ByZT4NCiAgPC9wPg0KPC9saT4NCg0KPGJyLz4NCjxsaT48c3Ryb25nPnNteDo6Z2V0X2ZpbGVfbGlzdGluZzwvc3Ryb25nPigkZGlyWywkZXhjbHVkZXByZWZpeF0pDQogICAgPHA+UmV0cm4gYSBsaXN0IG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5LjwvcD4NCiAgICA8cD5Bcmd1bWVudHM6DQogICAgICA8dWw+DQogICAgICA8bGk+JGRpciAtIFRlIGRpcmVjdG9yeSB0byBzY2FuIChzaG91bGQgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5KTwvbGk+DQogICAgICA8bGk+WyRleGNsdWRlcHJlZml4XSAtIChvcHRpb25hbCkgRXhjbHVkZSBmaWxlcyBzdHJ0aW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXguPC9saT4NCiAgICAgIDwvdWw+DQogIDwvcD4NCjwvbGk+DQo8L3VsPg==]]></data>
	</file>
	<file>
	  <filename>/templates/help_general_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHNpbXBsZSBzbWFydHkgdXRpbGl0aWVzIGZvciB1c2UgaW4gYXBwbGljYXRpb25zIG9yIGZvciBjdXN0b21pemluZyB0aGUgYmVoYXZpb3VyIG9mIHlvdXIgQ01TIE1hZGUgU2ltcGxlIHBhZ2VzLjwvcD4=]]></data>
	</file>
	<file>
	  <filename>/templates/help_plugins_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGg0PlNtYXJ0eSBwbHVnaW5zPC9oND4NCjx1bD4NCiAgICA8bGk+PHN0cm9uZz4mIzEyMzttb2RfYWN0aW9uX3VybH08L3N0cm9uZz4NCiAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gY3JlYXRlIGEgdXJsIHRvIGEgbW9kdWxlIGFjdGlvbi48L3A+DQogICAgPHA+QXJndW1lbnRzOg0KICAgICAgIDx1bD4NCiAgICAgICA8bGk+bW9kdWxlIC0gVGhlIG1vZHVsZSB0byBjcmVhdGUgYSBsaW5rIHRvLiAgVGhpcyBhcmd1bWVudCBpcyBvcHRpb25hbCwgdGhlIHN5c3RlbSB3aWxsIGF0dGVtcHQgdG8gZGV0ZWN0IHRoZSBjdXJyZW50IG1vZHVsZSBuYW1lIChpZiB3aXRoaW4gYSBtb2R1bGUgYWN0aW9uKTwvbGk+DQogICAgICAgPGxpPmFjdGlvbiAoZGVmYXVsdCkgLSBUaGUgYWN0aW9uIHRvIGNhbGwgd2l0aGluIHRoZSBtb2R1bGU8L2xpPg0KICAgICAgIDxsaT5wYWdlIC0gU3BlY2lmeSB0aGUgZGVzdGluYXRpb24gcGFnZTwvbGk+DQogICAgICAgPGxpPmpzZnJpZW5kbHl8Zm9yanMgLSBUdXJucyBvbiB0aGUgdXJsb25seSBwYXJhbWV0ZXIsIGFuZCBpbmRpY2F0ZXMgdGhhdCBqYXZhc2NyaXB0IGZyaWVuZGx5IHVybHMgYXJlIG91dHB1dC48L2xpPg0KICAgICAgIDxsaT5mb3JhamF4IC0gVHVybnMgb24gdGhlIGpzZnJpZW5kbHkgcGFyYW1ldGVyIChhbmQgdGhlIHVybG9ubHkgcGFyYW1ldGVyKSwgYW5kIGFsc28gYXBwZW5kcyBzaG93dGVtcGxhdGU9ZmFsc2UgdG8gdGhlIFVSTCBvdXRwdXQgZm9yIEFKQVggcmVxdWVzdHM8L2xpPg0KICAgICAgIDxsaT5hc3NpZ24gLSBBc3NpZ24gdGhlIG91dHB1dCBvZiB0aGUgcGx1Z2luIHRvIHRoZSBuYW1lZCBzbWFydHkgdmFyaWFibGUuPC9saT4NCiAgICAgICA8L3VsPg0KICAgIDxici8+PC9wPg0KICAgICAgPHA+QW55IG90aGVyIGFyZ3VtZW50cyB0byB0aGUgc21hcnR5IHBsdWdpbiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBVUkwgZ2VuZXJhdGVkLjwvcD4gICA8cD5FeGFtcGxlOg0KICAgIDxwcmU+JiMxMjM7bW9kX2FjdGlvbl91cmwgbW9kdWxlPSdOZXdzJyBhY3Rpb249J2Zlc3VibWl0JyBhc3NpZ249J2Zvbyd9PC9wcmU+PGJyLz48L3A+PC9saT4NCg0KICAgIDxsaT48c3Ryb25nPiYjMTIzO21vZF9hY3Rpb25fbGlua308L3N0cm9uZz4NCiAgICA8cD5BIHNtYXJ0eSBwbHVnaW4gdGhhdCBjYW4gY3JlYXRlIGEgbGluayB0byBhIG1vZHVsZSBhY3Rpb24uPC9wPg0KICAgIDxwPkFyZ3VtZW50czoNCiAgICAgICA8dWw+DQogICAgICAgPGxpPm1vZHVsZSAtIFRoZSBtb2R1bGUgdG8gY3JlYXRlIGEgbGluayB0by4gIFRoaXMgYXJndW1lbnQgaXMgb3B0aW9uYWwsIHRoZSBzeXN0ZW0gd2lsbCBhdHRlbXB0IHRvIGRldGVjdCB0aGUgY3VycmVudCBtb2R1bGUgbmFtZSAoaWYgd2l0aGluIGEgbW9kdWxlIGFjdGlvbik8L2xpPg0KICAgICAgIDxsaT5hY3Rpb24gKGRlZmF1bHQpIC0gVGhlIGFjdGlvbiB0byBjYWxsIHdpdGhpbiB0aGUgbW9kdWxlPC9saT4NCiAgICAgICA8bGk+dGV4dCAtIFRoZSB0ZXh0IHRvIHB1dCBpbiB0aGUgbGluazwvbGk+DQogICAgICAgPGxpPnBhZ2UgLSBTcGVjaWZ5IHRoZSBkZXN0aW5hdGlvbiBwYWdlPC9saT4NCiAgICAgICA8bGk+dXJsb25seSAtIEluc3RlYWQgb2YgZ2VuZXJhdGluZyBhIGxpbmssIGdlbmVyYXRlIGp1c3QgdGhlIHVybDwvbGk+DQogICAgICAgPGxpPmpzZnJpZW5kbHl8Zm9yanMgLSBUdXJucyBvbiB0aGUgdXJsb25seSBwYXJhbWV0ZXIsIGFuZCBpbmRpY2F0ZXMgdGhhdCBqYXZhc2NyaXB0IGZyaWVuZGx5IHVybHMgYXJlIG91dHB1dC48L2xpPg0KICAgICAgIDxsaT5mb3JhamF4IC0gVHVybnMgb24gdGhlIGpzZnJpZW5kbHkgcGFyYW1ldGVyIChhbmQgdGhlIHVybG9ubHkgcGFyYW1ldGVyKSwgYW5kIGFsc28gYXBwZW5kcyBzaG93dGVtcGxhdGU9ZmFsc2UgdG8gdGhlIFVSTCBvdXRwdXQgZm9yIEFKQVggcmVxdWVzdHM8L2xpPg0KICAgICAgIDxsaT5jb25mbWVzc2FnZSAtIEEgY29uZmlybWF0aW9uIG1lc3NhZ2UgdG8gZGlzcGxheSB3aGVuIHRoZSBsaW5rIGlzIGNsaWNrZWQuPC9saT4NCiAgICAgICA8bGk+aW1hZ2UgLSBBbiBpbWFnZSB0byB1c2Ugb24gdGhlIGxpbms8L2xpPg0KICAgICAgIDxsaT5pbWFnZW9ubHkgLSBJZiBhbiBpbWFnZSBpcyBzcGVjaWZpZWQsIGNyZWF0ZSBhIGxpbmsgb25seSBjb25zaXN0aW5nIG9mIHRoZSBpbWFnZS4gIFRoZSB0ZXh0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIHRpdGxlIGF0dHJpYnV0ZTwvbGk+DQogICAgICAgPGxpPmFzc2lnbiAtIEFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoZSBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgIDwvdWw+DQogICAgPGJyLz48L3A+DQogICAgICA8cD5Bbnkgb3RoZXIgYXJndW1lbnRzIHRvIHRoZSBzbWFydHkgcGx1Z2luIHdpbGwgYmUgYWRkZWQgdG8gdGhlIFVSTCBnZW5lcmF0ZWQuPC9wPiAgIDxwPkV4YW1wbGU6DQogICAgPHByZT4mIzEyMzttb2RfYWN0aW9uX2xpbmsgbW9kdWxlPSdOZXdzJyBhY3Rpb249J2Zlc3VibWl0JyB0ZXh0PSdTdWJtaXQgYSBOZXcgTmV3cyBBcnRpY2xlJ308L3ByZT48YnIvPjwvcD48L2xpPg0KDQogICAgPGxpPjxzdHJvbmc+JiMxMjM7eHRfYW5jaG9yX2xpbmt9PC9zdHJvbmc+DQogICAgPHA+QSBzbWFydHkgcGx1Z2luIHRvIGdlbmVyYXRlIGEgbGluayB0byBhbiBhbmNob3IgdGhhdCBpcyBvbiB0aGUgc2FtZSBwYWdlLjwvcD4NCiAgICA8cD5Bcmd1bWVudHM6DQogICAgICA8dWw+DQogICAgICA8bGk+bnxuYW1lIC0gPGVtPihzdHJpbmcpPC9lbT4gVGhlIG5hbWUgb2YgdGhlIGFuY2hvciB0byBsaW5rIHRvLjwvbGk+DQogICAgICA8bGk+dGV4dCAtIDxlbT4oc3RyaW5nPjwvZW0+IFRoZSB0ZXh0IHBvcnRpb24gb2YgdGhlIGxpbmsuICBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgYW5jaG9yIG5hbWUgd2lsbCBiZSB1c2VkLjwvbGk+DQogICAgICA8bGk+dXJsb25seSAtIDxlbT4oYm9vbCk8L2VtPiBPcHRpb25hbGx5IG9ubHkgZ2VuZXJhdGUgdGhlIFVSTCBwb3J0aW9uIG9mIHRoZSBsaW5rLiAgc2VlIHNteDo6YW5jaG9yX3VybCgpPC9saT4NCiAgICAgIDxsaT5hc3NpZ24gLSA8ZW0+KHN0cmluZz48L2VtPiBPcHRpb25hbGx5IGFzc2lnbiB0aGUgb3V0cHV0IG9mIHRoZSBwbHVnaW4gdG8gdGhlIG5hbWVkIHNtYXJ0eSB2YXJpYWJsZS48L2xpPg0KICAgICAgPC91bD4NCiAgICAgIDwvcD4NCiAgICAgIDxwPkFueSBvdGhlciBhcmd1bWVudHMgdG8gdGhlIHNtYXJ0eSBwbHVnaW4gd2lsbCBiZSBhZGRlZCBhcyBhdHRyaWJ1dGVzIHRvIHRoZSBsaW5rIGdlbmVyYXRlZC48L3A+DQogICAgPHA+RXhhbXBsZTogPHByZT4mIzEyMzt4dF9hbmNob3JfbGluayBuYW1lPWJvdHRvbSBjbGFzcz0iYW5jaG9yX2NsYXNzIiBpZD0iYW5jaG9yX2lkIn08L3ByZT48L3A+DQogICAgPC9saT4NCg0KICAgIDxsaT48c3Ryb25nPiYjMTIzO3Nlc3NfcHV0fTwvc3Ryb25nPg0KICAgIDxwPkEgc21hcnR5IHBsdWdpbiB0aGF0IGNhbiBzdG9yZSBkYXRhIGluIHRoZSB1c2VyIHNlc3Npb24uIFRoaXMgZGF0YSBpcyB0aGVuIGFjY2Vzc2libGUgdmlhIHRoZSAkc21hcnR5LnNlc3Npb24gYXJyYXkgaW4gc3Vic2VxdWVudCBwYWdlcy48L3A+DQogICAgPHA+QXJndW1lbnRzOg0KICAgICAgIDx1bD4NCiAgICAgICA8bGk+dmFyIC0gVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGNyZWF0ZSBpbiB0aGUgc2Vzc2lvbi48L2xpPg0KICAgICAgIDxsaT52YWx1ZSAtIFRoZSBkZXNpcmVkIHZhbHVlIG9mIHRoZSB2YXJpYWJsZS48L2xpPg0KICAgICAgIDwvdWw+DQogICAgPGJyLz48L3A+DQogICAgICA8cD5FeGFtcGxlOg0KICAgIDxwcmU+JiMxMjM7c2Vzc19wdXQgdmFyPSd0ZXN0JyB2YWx1ZT0nYmxhaCd9PC9wcmU+PGJyLz48L3A+PC9saT4NCg0KICAgIDxsaT48c3Ryb25nPiYjMTIzO3Nlc3NfZXJhc2V9PC9zdHJvbmc+DQogICAgPHA+QSBzbWFydHkgcGx1Z2luIHRoYXQgY2FuIGVyYXNlIGRhdGEgZnJvbSB0aGUgdXNlciBzZXNzaW9uLjwvcD4NCiAgICA8cD5Bcmd1bWVudHM6DQogICAgICAgPHVsPg0KICAgICAgIDxsaT52YXIgLSBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gZXJhc2UgaW4gdGhlIHNlc3Npb24uPC9saT4NCiAgICAgICA8L3VsPg0KICAgIDxici8+PC9wPg0KICAgICAgPHA+RXhhbXBsZToNCiAgICA8cHJlPiYjMTIzO3Nlc3NfZXJhc2UgdmFyPSd0ZXN0J308L3ByZT48YnIvPjwvcD48L2xpPg0KDQogICAgPGxpPjxzdHJvbmc+JiMxMjM7eHRfcmVwZWF0fTwvc3Ryb25nPg0KICAgIDxwPkFub3RoZXIgc21hcnR5IHBsdWdpbiB0aGF0IHdpbGwgYWxsb3cgcmVwZWF0aW5nIHRleHQ8L3A+DQogICAgPHA+QXJndW1lbnRzOjwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgPGxpPnRleHQgLSBUaGUgdGV4dCB0byBiZSByZXBlYXRlZDwvbGk+DQogICAgICAgIDxsaT5jb3VudCAtIFRoZSBudW1iZXIgb2YgdGltZXMgaXQgc2hvdWxkIGJlIHJlcGVhdGVkPC9saT4NCiAgICAgICAgPGxpPmFzc2lnbiAtIEFzc2lnbiB0aGUgb3V0cHV0IHRvIHRoZSBzcGVjaWZpZWQgc21hcnR5IHZhcmlhYmxlPC9saT4NCiAgICAgIDwvdWw+DQogICAgPGJyLz4NCiAgICA8cD5FeGFtcGxlOiA8cHJlPiYjMTIzO3h0X3JlcGVhdCB0ZXh0PSd0aGlzJyBjb3VudD0nNSd9PC9wcmU+PGJyLz48L3A+DQogICAgPC9saT4=]]></data>
	</file>
</module>
