<?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>AWSS3</name>
	<version>1.0.0</version>
    <mincmsversion>2.2.1</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgQ01TTVMgcGx1Z2luIGFsbG93cyB5b3UgdG8gdXNlIEFtYXpvbuKAmXMgU2ltcGxlIFN0b3JhZ2UgU2VydmljZSB0byBob3N0IHlvdXIgbWVkaWEgZm9yIHlvdXIgQ01TTVMgc2V0dXAuPC9wPgoKPHA+QW1hem9uIFMzIGlzIGEgY2hlYXAgYW5kIGNvc3QgZWZmZWN0aXZlIHdheSB0byBzY2FsZSB5b3VyIHNpdGUgdG8gZWFzaWx5IGhhbmRsZSBsYXJnZSBzcGlrZXMgaW4gdHJhZmZpYyB3aXRob3V0IGhhdmluZyB0byBnbyB0aHJvdWdoIHRoZSBleHBlbnNlIG9mIHNldHRpbmcgdXAgdGhlIGluZnJhc3RydWN0dXJlIGZvciBhIGNvbnRlbnQgZGVsaXZlcnkgbmV0d29yay48L3A+Cgo8cD5PbmNlIHNldHVwLCB0aGlzIHBsdWdpbiB0cmFuc3BhcmVudGx5IGludGVncmF0ZXMgd2l0aCB5b3VyIENNU01TLiBGaWxlIHVwbG9hZHMgYXJlIGF1dG9tYXRpY2FsbHkgc2F2ZWQgaW50byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgd2l0aG91dCBhbnkgZXh0cmEgc3RlcHMuIE9uY2Ugc2F2ZWQsIHRoZXNlIGZpbGVzIHdpbGwgYmUgZGVsaXZlcmVkIGJ5IEFtYXpvbiBTMywgaW5zdGVhZCBvZiB5b3VyIHdlYiBob3N0LjwvcD4KCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5Db25maWd1cmUgdGhlIHBsdWdpbiBpbiB0aGUg4oCYT3B0aW9uc+KAmSAob3Ig4oCYU2V0dGluZ3PigJkpIHNjcmVlbiBieSBmb2xsb3dpbmcgdGhlIG9uc2NyZWVuIHByb21wdHMuPGJyPk9uY2Ugc2V0dXAgaXMgY29tcGxldGVkLCB5b3UgY2FuIGVtYmVkIHRoZSB7QVdTUzN9IHRhZyBpbiB5b3VyIHBhZ2VzLiBZb3UgY2FuIHVzZSB0aGUgUGFyYW1ldGVycyBiZWxvdyB0byBjdXN0b21pemUgeW91ciBleHBlcmllbmNlLjwvcD4KPGgzPkZlZWRiYWNrL1N1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUgb3IgdG8gZmlsZSBhIEZlYXR1cmUgUmVxdWVzdCBvciBCdWcgUmVwb3J0LCBwbGVhc2UgdmlzaXQgdGhlIE1vZHVsZSBGb3JnZQo8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzIiB0YXJnZXQ9Il9ibGFuayI+QVdTUzMgUGFnZTwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy92aWV3dG9waWMucGhwP2Y9NyZ0PTgzNzg4Ij5BV1NTMyBmb3J1bSB0b3BpYzwvYT4uIFlvdSBhcmUgd2FybWx5IGludml0ZWQgdG8gb3BlbiBhIG5ldyB0b3BpYyBpZiB5b3UgZGlkbid0IGZpbmQgYW4gYW5zd2VyIHRvIHlvdXIgcXVlc3Rpb24uPC9saT4KPGxpPkxhc3RseSwgaWYgeW91IGVuam95IHRoaXMgbW9kdWxlLCB1c2UgaXQgb24gYSBjb21tZXJjaWFsIHdlYnNpdGUgb3Igd291bGQgbGlrZSB0byBlbmNvdXJhZ2UgZnV0dXJlIGRldmVsb3BtZW50LCB5b3UgbWlnaHQgY29uc2lkZXIganVzdCBhIHNtYWxsIGRvbmF0aW9uLiBBbnkga2luZCBvZiBmZWVkYmFjayB3aWxsIGJlIG11Y2ggYXBwcmVjaWF0ZWQuPGJyPgo8YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29tL2RvbmF0ZS8/aG9zdGVkX2J1dHRvbl9pZD1GV0hBQlpVTjNOQzROIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9haGE5OTkvRG9uYXRlQnV0dG9ucy9tYXN0ZXIvcGF5cGFsLWRvbmF0ZS1pY29uLTcucG5nIiB3aWR0aD0iMTIwIiA+PC9hPjxicj4KCTwvbGk+CjwvdWw+CjxoMz5JbnRlcmVzdGVkIGluIGRldmVsb3BtZW50PzwvaDM+CjxwPkNoZWNrIG91dCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hZ2FsaC9BV1NTMyI+R2l0aHViIHJlcG9zaXRvcnk8L2E+LjwvcD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAyMywgTWFnYWwgSGV6aSA8YSBocmVmPSJtYWlsdG86aF9tYWdhbEBob3RtYWlsLmNvbSI+Jmx0O2hfbWFnYWxAaG90bWFpbC5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+CjxoMz5EZXBlbmRlbmNpZXM8L2gzPjx1bD48bGk+QVdTU0RLID0mZ3Q7IDEuMC4wPC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gcHJlZml4PSIiIC0gQSBzdHJpbmcgb2YgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB0aGUgY29tcGxldGUgcGF0aCBpbiBmcm9udCBvZiB0aGUgb2JqZWN0IG5hbWUuIFByb2plY3QvV29yZEZpbGVzLy4uLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gcGFnZWxpbWl0PSIiIC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gZGlzcGxheSAocGVyIHBhZ2UpLiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHN1cHBsaWVkIGFsbCBtYXRjaGluZyBpdGVtcyB3aWxsIGJlIGRpc3BsYXllZC4gIElmIGl0IGlzLCBhbmQgdGhlcmUgYXJlIG1vcmUgaXRlbXMgYXZhaWxhYmxlIHRoYW4gc3BlY2lmaWVkIGluIHRoZSBwYXJhbWV0ZXIsIHRleHQgYW5kIGxpbmtzIHdpbGwgYmUgc3VwcGxpZWQgdG8gYWxsb3cgc2Nyb2xsaW5nIHRocm91Z2ggdGhlIHJlc3VsdHM8L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHN1bW1hcnlwYWdlPSIiIC0gUGFnZSB0byBkaXNwbGF5IGl0ZW0gc3VtbWFyeSBpbi4gTXVzdCBiZSBhIHBhZ2UgYWxpYXMvaWQuIFVzZWQgdG8gYWxsb3cgc3VtbWFyaWVzIHRvIGJlIGRpc3BsYXllZCBpbiBhIGRpZmZlcmVudCBwYWdlIHRoYW4gaW5pdGlhdG9yLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gc3VtbWFyeXRlbXBsYXRlPSIiIC0gVGhlIHN1bW1hcnkgdGVtcGxhdGUgeW91IHdpc2ggdG8gdXNlLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZGV0YWlscGFnZT0iIiAtIFBhZ2UgdG8gZGlzcGxheSBpdGVtIGRldGFpbHMgaW4uIE11c3QgYmUgYSBwYWdlIGFsaWFzL2lkLiBVc2VkIHRvIGFsbG93IGRldGFpbHMgdG8gYmUgZGlzcGxheWVkIGluIGEgZGlmZmVyZW50IHBhZ2UgdGhhbiBzdW1tYXJ5LjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZGV0YWlsdGVtcGxhdGU9IiIgLSBUaGUgZGV0YWlsIHRlbXBsYXRlIHlvdSB3aXNoIHRvIHVzZS48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBNYWdhbCBIZXppICZsdDtoX21hZ2FsQGhvdG1haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC4wPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPg0KICA8bGk+VkVSU0lPTjogMS4wIERBVEVEOiAyMC1KVU5FLTIwMjMNCiAgICA8cD5GaXJzdCB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4uPC9wPg0KICA8L2xpPg0KPC91bD4NCjxiciAvPg==]]></about>
	<description><![CDATA[Store uploads in AWS S3]]></description>
	<requires>
	  <requiredname>AWSSDK</requiredname>
	  <requiredversion>1.0.0</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.admin_fileview.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KDQppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXM6Ok1BTkFHRV9QRVJNKSApIHJldHVybjsNCg0KJGJ1Y2tldF9pZCA9ICR0aGlzLT5HZXRPcHRpb25WYWx1ZSgnYnVja2V0X25hbWUnKTsNCiR0aGlzLT5TZXRDdXJyZW50VGFiKCRidWNrZXRfaWQpOw0KJEZpbGVNYW5hZ2VyID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnRmlsZU1hbmFnZXInKTsNCiRubWludXRlcyA9IChpbnQpJHRoaXMtPkdldFByZWZlcmVuY2UoJ2V4cGlyeV9pbnRlcnZhbCcsIDE4MCk7DQppZiAoJG5taW51dGVzID09ICcnKSAkbm1pbnV0ZXMgPSAwOw0KDQppZiggaXNzZXQoJHBhcmFtc1siYWpheCJdKSkgew0KICAkYnVja2V0X2lkID0gJHBhcmFtc1siYnVja2V0X2lkIl07DQogICRwcmVmaXggPSAkcGFyYW1zWyJwcmVmaXgiXTsNCiAgJHNtYXJ0eS0+YXNzaWduKCdhamF4JywgdHJ1ZSk7DQp9DQoNCmlmIChpc3NldCgkcGFyYW1zWyJmbW1lc3NhZ2UiXSkgJiYgJHBhcmFtc1siZm1tZXNzYWdlIl0hPSIiKSB7DQogIC8vIGdvdHRhIGdldCByaWQgb2YgdGhpcyBzdHVmZi4NCiAgJGNvdW50PSIiOw0KICBpZiAoaXNzZXQoJHBhcmFtc1siZm1tZXNzYWdlY291bnQiXSkgJiYgJHBhcmFtc1siZm1tZXNzYWdlY291bnQiXSE9IiIpICRjb3VudD0kcGFyYW1zWyJmbW1lc3NhZ2Vjb3VudCJdOw0KICBlY2hvICR0aGlzLT5TaG93TWVzc2FnZSgkdGhpcy0+TGFuZygkcGFyYW1zWyJmbW1lc3NhZ2UiXSwkY291bnQpKTsNCn0NCg0KaWYgKGlzc2V0KCRwYXJhbXNbImZtZXJyb3IiXSkgJiYgJHBhcmFtc1siZm1lcnJvciJdIT0iIikgew0KICAvLyBnb3R0YSBnZXQgcmlkIG9mIHRoaXMgc3R1ZmYNCiAgJGNvdW50PSIiOw0KICBpZiAoaXNzZXQoJHBhcmFtc1siZm1lcnJvcmNvdW50Il0pICYmICRwYXJhbXNbImZtZXJyb3Jjb3VudCJdIT0iIikgJGNvdW50PSRwYXJhbXNbImZtZXJyb3Jjb3VudCJdOw0KICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRGaWxlTWFuYWdlci0+TGFuZygkcGFyYW1zWyJmbWVycm9yIl0sJGNvdW50KSk7DQp9DQoNCiRwYWdlbGltaXQgPSAkdGhpcy0+R2V0T3B0aW9uVmFsdWUoJ2l0ZW1zZGlzcGxheWVkJyk/JHRoaXMtPkdldE9wdGlvblZhbHVlKCdpdGVtc2Rpc3BsYXllZCcpOjEwOw0KJHBhZ2Vjb3VudCA9IC0xOw0KJHN0YXJ0ZWxlbWVudCA9IDA7DQokcGFnZW51bWJlciA9IDE7DQoNCmlmKCBpc3NldCggJHBhcmFtc1sncGFnZW51bWJlciddICkgJiYgJHBhcmFtc1sncGFnZW51bWJlciddICE9PSAnJyApIHsNCiAgJHBhZ2VudW1iZXIgPSAoaW50KSRwYXJhbXNbJ3BhZ2VudW1iZXInXTsNCiAgJHN0YXJ0ZWxlbWVudCA9ICgkcGFnZW51bWJlci0xKSAqICRwYWdlbGltaXQ7DQp9DQokZW5kZWxlbWVudCA9ICRzdGFydGVsZW1lbnQgKyAkcGFnZWxpbWl0IC0gMTsNCg0KJHFwYXJtcyA9IGFycmF5KCk7DQokcXBhcm1zWydidWNrZXQnXSA9ICRidWNrZXRfaWQ7DQokcXBhcm1zWydwcmVmaXgnXSA9ICRwYXJhbXNbInByZWZpeCJdOw0KJHFwYXJtc1sncmV0dXJuaWQnXSA9ICRyZXR1cm5pZDsNCiRzbWFydHktPmFzc2lnbigncXBhcm1zJywkcXBhcm1zKTsNCg0KJGpzb25fZmlsZV9QYXRoID0gJHRoaXMtPmdldENhY2hlRmlsZSgkcXBhcm1zKTsNCmlmKCRubWludXRlcyA9PSAwKSB7DQogICRkYXRhID0gYnVja2V0X3F1ZXJ5OjpjYWNoZV9xdWVyeSgkcXBhcm1zLCRqc29uX2ZpbGVfUGF0aCk7DQp9IGVsc2Ugew0KDQogIGlmICghZmlsZV9leGlzdHMoJGpzb25fZmlsZV9QYXRoKSkgew0KICAgICAgJGRhdGEgPSBidWNrZXRfcXVlcnk6OmNhY2hlX3F1ZXJ5KCRxcGFybXMsJGpzb25fZmlsZV9QYXRoKTsNCiAgfSBlbHNlIHsNCg0KICAgICAgJGpzb24gPSBmaWxlX2dldF9jb250ZW50cygkanNvbl9maWxlX1BhdGgpOw0KICAgICAgJHRtcCA9IGVuY3J5cHQ6OmRlY3J5cHQoJGpzb24pOw0KICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkdG1wLCBmYWxzZSk7DQogIA0KICAgICAgJGVuZGRhdGUgID0gc3RydG90aW1lKHNwcmludGYoIislZCBtaW51dGVzIiwgJG5taW51dGVzKSwgJGRhdGEtPmRhdGUpOw0KICAgICAgaWYgKHRpbWUoKSA+PSAkZW5kZGF0ZSkgew0KICAgICAgICAgICRkYXRhID0gYnVja2V0X3F1ZXJ5OjpjYWNoZV9xdWVyeSgkcXBhcm1zLCRqc29uX2ZpbGVfUGF0aCk7DQogICAgICB9DQoNCiAgfQ0KfQ0KDQokcHJlZml4ID0gJHBhcmFtc1sncHJlZml4J10/JHBhcmFtc1sncHJlZml4J106Jyc7DQokdG1wX3BhdGhfcGFydHM9ZXhwbG9kZSgnLycsICRwcmVmaXgpOyANCg0KJHBhdGhfcGFydHMgPSBbXTsNCmZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0bXBfcGF0aF9wYXJ0cyk7ICRpKysgKSB7DQogICAgJG9iaiA9IG5ldyBcU3RkQ2xhc3M7DQogICAgaWYoICEkdG1wX3BhdGhfcGFydHNbJGldICkgY29udGludWU7DQogICAgJG9iai0+bmFtZSA9ICR0bXBfcGF0aF9wYXJ0c1skaV07DQogICAgaWYoICRvYmotPm5hbWUgPT0gJzo6dG9wOjonICkgew0KICAgICAgICAkb2JqLT5uYW1lID0gJ3Jvb3QnOw0KICAgIH0NCiAgICBpZiggJGkgPCBjb3VudCgkdG1wX3BhdGhfcGFydHMpIC0gMSApIHsNCiAgICAgICAgLy8gbm90IHRoZSBsYXN0IGVudHJ5DQogICAgICAgICRmdWxscGF0aCA9IGltcGxvZGUoJy8nLGFycmF5X3NsaWNlKCR0bXBfcGF0aF9wYXJ0cywwLCRpKzEpKTsNCiAgICAgICAgaWYoIHN0YXJ0c3dpdGgoJGZ1bGxwYXRoLCc6OnRvcDo6JykgKSAkZnVsbHBhdGggPSBzdWJzdHIoJGZ1bGxwYXRoLDcpOw0KICAgICAgICAkb2JqLT51cmwgPSAkdGhpcy0+Y3JlYXRlX3VybCggJGlkLCAnZGVmYXVsdGFkbWluJywgJycsWyAncHJlZml4JyA9PiAkZnVsbHBhdGguJy8nLCdfX2FjdGl2ZXRhYic9PiRidWNrZXRfaWRdICk7DQoNCiAgICB9IGVsc2Ugew0KICAgICAgICAvLyB0aGUgbGFzdCBlbnRyeS4uLiBubyBsaW5rDQogICAgfQ0KICAgICRwYXRoX3BhcnRzW10gPSAkb2JqOw0KfQ0KDQokdXBfaG9tZSA9ICR0aGlzLT5DcmVhdGVGcm9udGVuZExpbmsoICRpZCwgJHJldHVybmlkLCdkZWZhdWx0YWRtaW4nLCRidWNrZXRfaWQpOw0KJHNtYXJ0eS0+YXNzaWduKCd1cF9ob21lJywkdXBfaG9tZSk7DQoNCiRwYXJ0c19jb3VudGVyID0gY291bnQoJHBhdGhfcGFydHMpOw0KaWYoICRwYXJ0c19jb3VudGVyID49IDEgKSB7DQogICR1cGRpciA9IGF3c19zM191dGlsczo6Z2V0VXBEaXIoJHBhdGhfcGFydHMpOw0KICAkaWNvbiA9ICRGaWxlTWFuYWdlci0+R2V0TW9kdWxlVVJMUGF0aCgpLicvaWNvbnMvdGhlbWVzL2RlZmF1bHQvYWN0aW9ucy9kaXJfdXAuZ2lmJzsNCiAgJGltZ190YWcgPSAnPGltZyBzcmM9IicuJGljb24uJyIgd2lkdGg9IjMyIiB0aXRsZT0iJy4kdGhpcy0+TGFuZygndGl0bGVfY2hhbmdldXBkaXInKS4nIi8+JzsNCiAgaWYoJHBhcnRzX2NvdW50ZXIgPiAxKXsNCiAgICAkcGFybXNbJ3ByZWZpeCddID0gJHVwZGlyOw0KICB9DQogIHVuc2V0KCRwYXJhbXNbJ3BhZ2VudW1iZXInXSk7DQogIA0KICAkdXBfZGlydXJsID0gJHRoaXMtPmNyZWF0ZV91cmwoICRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCRwYXJtcyk7DQogICR1cF9kaXJpY29ubGluayA9ICR0aGlzLT5DcmVhdGVGcm9udGVuZExpbmsoJGlkLCRyZXR1cm5pZCwnZGVmYXVsdGFkbWluJywkaW1nX3RhZywkcGFybXMsJycsZmFsc2UsdHJ1ZSwiY2xhc3M9J2RpcmxpbmsnIik7DQogICR1cF9kaXJsaW5rID0gIjxhIGNsYXNzPVwiY2FyZC1saW5rXCIgaHJlZj1cInskdXBfZGlydXJsfVwiIHRpdGxlPVwieyR0aGlzLT5MYW5nKCd0aXRsZV9jaGFuZ2V1cGRpcicpfVwiPi4uPC9hPiI7DQoNCiAgJHNtYXJ0eS0+YXNzaWduKCd1cF9kaXJ1cmwnLCR1cF9kaXJ1cmwpOw0KICAkc21hcnR5LT5hc3NpZ24oJ3VwX2Rpcmljb25saW5rJywkdXBfZGlyaWNvbmxpbmspOw0KICAkc21hcnR5LT5hc3NpZ24oJ3VwX2RpcmxpbmsnLCR1cF9kaXJsaW5rKTsNCg0KfQ0KDQokc21hcnR5LT5hc3NpZ24oJ3BhdGgnLCRwYXJhbXNbInByZWZpeCJdKTsNCiRzbWFydHktPmFzc2lnbigncGF0aF9wYXJ0cycsJHBhdGhfcGFydHMpOw0KDQokY291bnRmaWxlcyA9IGlzc2V0KCRkYXRhLT50b3RhbCkgPyAkZGF0YS0+dG90YWwgOiAnMCc7DQokcGFnZWNvdW50ID0gKGludCkoJGNvdW50ZmlsZXMgLyAkcGFnZWxpbWl0KTsNCmlmKCAoJGNvdW50ZmlsZXMgJSAkcGFnZWxpbWl0KSAhPSAwICkgJHBhZ2Vjb3VudCsrOw0KDQovLyBidWlsZCBkaXNwbGF5DQokc21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsICRjb3VudGZpbGVzKTsNCiRzbWFydHktPmFzc2lnbignaGlkZGVucGF0aCcsICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICJwcmVmaXgiLCAkcGFyYW1zWyJwcmVmaXgiXSkpOw0KJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2ZpbGVhY3Rpb24nLCAkcmV0dXJuaWQpKTsNCi8vIHJvdW5kb3duDQokdG90YWxzaXplID0gYXdzX3MzX3V0aWxzOjpzdW1CeXRlcygkZGF0YS0+aXRlbXMpOw0KJGNvdW50cyA9ICR0b3RhbHNpemUgLiAiICIgLiAkRmlsZU1hbmFnZXItPkxhbmcoImluIikgLiAiICIgLiAkY291bnRmaWxlcyAuICIgIjsNCmlmICgkY291bnRmaWxlcyA9PSAxKSAkY291bnRzLj0kRmlsZU1hbmFnZXItPkxhbmcoImZpbGUiKTsgZWxzZSAkY291bnRzLj0kRmlsZU1hbmFnZXItPkxhbmcoImZpbGVzIik7DQokY291bnRzLj0iICIgLiAkRmlsZU1hbmFnZXItPkxhbmcoImFuZCIpIC4gIiAiIC4gJGNvdW50ZGlycyAuICIgIjsNCmlmICgkY291bnRkaXJzID09IDEpICRjb3VudHMuPSRGaWxlTWFuYWdlci0+TGFuZygic3ViZGlyIik7IGVsc2UgJGNvdW50cy49JEZpbGVNYW5hZ2VyLT5MYW5nKCJzdWJkaXJzIik7DQokc21hcnR5LT5hc3NpZ24oJ2NvdW50c3RleHQnLCAkY291bnRzKTsNCg0KJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7DQokc21hcnR5LT5hc3NpZ24oJ2J1Y2tldF9pZCcsICRidWNrZXRfaWQpOw0KJHNtYXJ0eS0+YXNzaWduKCdjYWNoZWZpbGUnLCRqc29uX2ZpbGVfUGF0aCk7DQokc21hcnR5LT5hc3NpZ24oJ2xhc3R1cGRhdGUnLCAkZGF0YS0+ZGF0ZSk7DQokc21hcnR5LT5hc3NpZ24oJ3BhZ2VudW1iZXInLCRwYWdlbnVtYmVyKTsNCiRzbWFydHktPmFzc2lnbignc3RhcnRlbGVtZW50Jywkc3RhcnRlbGVtZW50KTsNCmlmKCRlbmRlbGVtZW50ID49ICRjb3VudGZpbGVzKSRlbmRlbGVtZW50PSRjb3VudGZpbGVzLTE7DQokc21hcnR5LT5hc3NpZ24oJ2VuZGVsZW1lbnQnLCAkZW5kZWxlbWVudCk7DQokc21hcnR5LT5hc3NpZ24oJ3BhZ2Vjb3VudCcsJHBhZ2Vjb3VudCk7DQokc21hcnR5LT5hc3NpZ24oJ29mdGV4dCcsJHRoaXMtPkxhbmcoJ3Byb21wdF9vZicpKTsNCiRzbWFydHktPmFzc2lnbigncGFnZXRleHQnLCR0aGlzLT5MYW5nKCdwcm9tcHRfcGFnZScpKTsNCg0KaWYgKCRzdGFydGVsZW1lbnQgPCAwIHx8ICRzdGFydGVsZW1lbnQgPiAkZW5kZWxlbWVudCkgew0KICBlY2hvICJJbnZhbGlkIGluZGV4ZXMuIjsNCn0gZWxzZSB7DQogIC8vIFNsaWNlIHRoZSBhcnJheSB0byBleHRyYWN0IGVsZW1lbnRzIGJldHdlZW4gdGhlIGluZGV4ZXMNCiAgDQogICRzZWxlY3RlZEl0ZW1zID0gYXJyYXlfc2xpY2UoJGRhdGEtPml0ZW1zLCAkc3RhcnRlbGVtZW50LCAkZW5kZWxlbWVudCAtICRzdGFydGVsZW1lbnQgKyAxKTsNCg0KICBpZigkdXBfZGlydXJsKXsNCiAgICAkb25lcm93ID0gbmV3IFxzdGRDbGFzcygpOw0KICAgICRvbmVyb3ctPnVybCA9ICR1cF9kaXJ1cmw7DQogICAgJG9uZXJvdy0+dXJsX2xpbmsgPSAkdXBfZGlybGluazsNCiAgICAkb25lcm93LT5pY29uX2xpbmsgPSAkdXBfZGlyaWNvbmxpbms7DQogICAgJG9uZXJvdy0+dHlwZSA9IGFycmF5KCdkaXInKTsNCiAgICAkb25lcm93LT5ub0NoZWNrYm94ID0gMTsNCiAgICAkZW50cnlhcnJheVtdPSAkb25lcm93Ow0KICB9DQogIGZvcmVhY2goICRzZWxlY3RlZEl0ZW1zIGFzICRyb3cgKSB7DQogICAgICAkb25lcm93ID0gJHJvdzsNCiAgICAgIGlmKCRvbmVyb3ctPmRpcil7DQogICAgICAgICAgJHNlbmR0b2RldGFpbCA9IGFycmF5KCdwcmVmaXgnPT4kb25lcm93LT5rZXkpOw0KICAgICAgICAgIGlmKCBpc3NldCggJHBhcmFtc1sncGFnZWxpbWl0J10gKSApIHsNCiAgICAgICAgICAgICAgJHNlbmR0b2RldGFpbCA9IGFycmF5X21lcmdlKCRzZW5kdG9kZXRhaWwsYXJyYXkoJ3BhZ2VsaW1pdCc9PiRwYWdlbGltaXQpKTsNCiAgICAgICAgICB9DQogICAgICAgICAgJG9uZXJvdy0+dXJsID0gJHRoaXMtPmNyZWF0ZV91cmwoJ20xXycsJ2RlZmF1bHRhZG1pbicsJycsJHNlbmR0b2RldGFpbCk7DQogICAgICAgICAgJG9uZXJvdy0+dXJsX2xpbmsgPSAiPGEgaHJlZj0nIiAuICRvbmVyb3ctPnVybCAuICInIGNsYXNzPVwiZGlybGlua1wiIHRpdGxlPVwieyRGaWxlTWFuYWdlci0+TGFuZygndGl0bGVfY2hhbmdlZGlyJyl9XCI+IiAuICRvbmVyb3ctPm5hbWUgLiAiPC9hPiI7DQogICAgICAgICAgJG9uZXJvdy0+aWNvbl9saW5rID0gIjxhIGhyZWY9JyIgLiAkb25lcm93LT51cmwgLiAiJyBjbGFzcz1cImRpcmxpbmtcIiB0aXRsZT1cInskRmlsZU1hbmFnZXItPkxhbmcoJ3RpdGxlX2NoYW5nZWRpcicpfVwiPiIuJHJvdy0+aWNvbi4iPC9hPiI7DQogICAgICB9DQogICAgICAkZW50cnlhcnJheVtdPSAkb25lcm93Ow0KICB9DQp9DQoNCiRzbWFydHktPmFzc2lnbignc3RhcnRkYXRlJywgJGRhdGEtPmRhdGUpOw0KJHNtYXJ0eS0+YXNzaWduKCdlbmRkYXRlJywgJGVuZGRhdGUpOw0KJHNtYXJ0eS0+YXNzaWduKCdjYWNoZXRpbWUnLCAkbm1pbnV0ZXMpOw0KJHNtYXJ0eS0+YXNzaWduKCdwYXRoX3BhcnRzJywkcGF0aF9wYXJ0cyk7DQoNCmlmKCBpc3NldCgkcGFyYW1zWydub2Zvcm0nXSkgKSAkc21hcnR5LT5hc3NpZ24oJ25vZm9ybScsMSk7DQokc21hcnR5LT5hc3NpZ24oJ3JlZnJlc2hfdXJsJywkdGhpcy0+Q3JlYXRlX3VybCgkaWQsJ2FkbWluX2ZpbGV2aWV3JywnJyxhcnJheSgnYWpheCc9PjEsJ2J1Y2tldF9pZCc9PiRidWNrZXRfaWQsJ3ByZWZpeCc9PiRwcmVmaXgpKSk7DQokc21hcnR5LT5hc3NpZ24oJ0ZpbGVNYW5hZ2VyJywkRmlsZU1hbmFnZXIpOw0KJHNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRlbnRyeWFycmF5KTsNCg0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdmaWxlbWFuYWdlci50cGwnKTsNCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsNCg0KdXNlIFxBV1NTM1xhd3NfczNfdXRpbHM7DQp1c2UgXEFXU1MzXGJ1Y2tldF9xdWVyeTsNCnVzZSBcQVdTUzNcZW5jcnlwdDsNCg0KICAgICRtb2RfZm0gPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGaWxlTWFuYWdlcicpOw0KDQogICAgJGJ1Y2tldF9pZCA9ICR0aGlzLT5HZXRPcHRpb25WYWx1ZSgnYnVja2V0X25hbWUnKTsNCiAgICAkbm1pbnV0ZXMgICAgID0gKGludCkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZXhwaXJ5X2ludGVydmFsJywgMTgwKTsNCiAgICBpZiAoJG5taW51dGVzID09ICcnKSAkbm1pbnV0ZXMgPSAwOw0KDQogICAgaWYoIWlzc2V0KCRidWNrZXRfaWQpIHx8IGVtcHR5KCRidWNrZXRfaWQpKSB7DQogICAgICAgIC8vdGhyb3cgbmV3IENtc0V4Y2VwdGlvbignbm8gYnVja2V0IHNlbGVjdGVkJyk7DQogICAgICAgICR0aGlzLT5fRGlzcGxheU1lc3NhZ2UoJ25vIGJ1Y2tldCBzZWxlY3RlZCcsNTAwKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICAkdGVtcGxhdGUgPSBudWxsOw0KICAgIGlmIChpc3NldCgkcGFyYW1zWydzdW1tYXJ5dGVtcGxhdGUnXSkpIHsNCiAgICAgICAgJHRlbXBsYXRlID0gdHJpbSgkcGFyYW1zWydzdW1tYXJ5dGVtcGxhdGUnXSk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAkdHBsID0gQ21zTGF5b3V0VGVtcGxhdGU6OmxvYWRfZGZsdF9ieV90eXBlKCdBV1NTMzo6c3VtbWFyeScpOw0KICAgICAgICBpZiggIWlzX29iamVjdCgkdHBsKSApIHsNCiAgICAgICAgICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ05vIGRlZmF1bHQgc3VtbWFyeSB0ZW1wbGF0ZSBmb3VuZCcpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgICR0ZW1wbGF0ZSA9ICR0cGwtPmdldF9uYW1lKCk7DQogICAgfQ0KDQogICAgaWYoaXNzZXQoJHBhcmFtc1snZGV0YWlscGFnZSddKSkgew0KDQogICAgICAgIGlmKGlzX251bWVyaWMoJHBhcmFtc1snZGV0YWlscGFnZSddKSkgew0KICAgICAgICAgICAgJGRldGFpbHBhZ2UgPSAkcGFyYW1zWydkZXRhaWxwYWdlJ107DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7CQkJDQogICAgICAgICAgICAkaG0gPSBjbXNtcygpLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CQkJCQ0KICAgICAgICAgICAgJGRldGFpbHBhZ2UgPSAkaG0tPnN1cmVHZXROb2RlQnlBbGlhcygkcGFyYW1zWydkZXRhaWxwYWdlJ10pLT5HZXRJZCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgICRkZXRhaWxwYWdlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RldGFpbHBhZ2UnLCAkcmV0dXJuaWQpOw0KICAgIH0NCiAgICBpZiggZW1wdHkoJGRldGFpbHBhZ2UpIHx8ICRkZXRhaWxwYWdlID09IC0xICkgeyAkZGV0YWlscGFnZSA9ICRyZXR1cm5pZDsgfQ0KDQogICAgJGRlYnVnID0gaXNzZXQoJHBhcmFtc1snZGVidWcnXSk7DQogICAgLy8kdGVtcGxhdGUgPSAnb3JpZ19zdW1tYXJ5X3RlbXBsYXRlLnRwbCc7DQogICAgJHRwbF9vYiA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCR0aGlzLT5HZXRUZW1wbGF0ZVJlc291cmNlKCR0ZW1wbGF0ZSksbnVsbCxudWxsLCRzbWFydHkpOw0KDQogICAgJHBhZ2VsaW1pdCA9IDEwOw0KICAgIGlmKCBpc3NldCggJHBhcmFtc1sncGFnZWxpbWl0J10gKSApIHsNCiAgICAgICAgJHBhZ2VsaW1pdCA9IChpbnQpICgkcGFyYW1zWydwYWdlbGltaXQnXSk7DQogICAgfQ0KICAgICRwYWdlbGltaXQgPSBtYXgoMSxtaW4oMTAwMCwkcGFnZWxpbWl0KSk7IC8vIG1heGltdW0gb2YgMTAwMCBlbnRyaWVzLg0KICAgICRwYWdlY291bnQgPSAtMTsNCiAgICAkc3RhcnRlbGVtZW50ID0gMDsNCiAgICAkcGFnZW51bWJlciA9IDE7DQogICAgJHByZWZpeCA9ICRwYXJhbXNbJ3ByZWZpeCddPyRwYXJhbXNbJ3ByZWZpeCddOicnOw0KDQogICAgJGV4cGxvZGVkcHJlZml4PWV4cGxvZGUoJy8nLCAkcHJlZml4KTsgDQogICAgJHBhdGhfcGFydHMgPSBbXTsNCiAgICBmb3IoICRpID0gMDsgJGkgPCBjb3VudCgkZXhwbG9kZWRwcmVmaXgpOyAkaSsrICkgew0KICAgICAgICAkb2JqID0gbmV3IFxTdGRDbGFzczsNCiAgICAgICAgaWYoICEkZXhwbG9kZWRwcmVmaXhbJGldICkgY29udGludWU7DQogICAgICAgICRvYmotPm5hbWUgPSAkZXhwbG9kZWRwcmVmaXhbJGldOw0KICAgICAgICAkb2JqLT5wcmVmaXggPSBpbXBsb2RlKCcvJyxhcnJheV9zbGljZSgkZXhwbG9kZWRwcmVmaXgsMCwkaSsxKSkuJy8nOw0KICAgICAgICBpZiggJGkgPCBjb3VudCgkZXhwbG9kZWRwcmVmaXgpIC0gMSApIHsNCiAgICAgICAgICAgICRwYXJhbXNbJ3ByZWZpeCddID0gJG9iai0+cHJlZml4Ow0KICAgICAgICAgICAgJG9iai0+dXJsID0gJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluaygkaWQsJHJldHVybmlkLCdkZWZhdWx0JywnJywkcGFyYW1zLCAnJywgdHJ1ZSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAvLyB0aGUgbGFzdCBlbnRyeS4uLiBubyBsaW5rDQogICAgICAgIH0NCiAgICAgICAgJHBhdGhfcGFydHNbXSA9ICRvYmo7DQogICAgfQ0KDQoNCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ3BhZ2VudW1iZXInXSApICYmICRwYXJhbXNbJ3BhZ2VudW1iZXInXSAhPT0gJycgKSB7DQogICAgICAgICRwYWdlbnVtYmVyID0gKGludCkkcGFyYW1zWydwYWdlbnVtYmVyJ107DQogICAgICAgICRzdGFydGVsZW1lbnQgPSAoJHBhZ2VudW1iZXItMSkgKiAkcGFnZWxpbWl0Ow0KICAgIH0NCiAgICAkZW5kZWxlbWVudCA9ICRzdGFydGVsZW1lbnQgKyAkcGFnZWxpbWl0IC0gMTsNCg0KICAgICRwYXJ0c19jb3VudGVyID0gY291bnQoJHBhdGhfcGFydHMpOw0KDQogICAgaWYoICRwYXJ0c19jb3VudGVyID49IDEgKSB7DQogICAgICAgIA0KICAgICAgICAkdXBkaXIgPSAkcGF0aF9wYXJ0c1skcGFydHNfY291bnRlci0yXS0+cHJlZml4Ow0KICAgICAgICAkaWNvbiA9ICRtb2RfZm0tPkdldE1vZHVsZVVSTFBhdGgoKS4nL2ljb25zL3RoZW1lcy9kZWZhdWx0L2FjdGlvbnMvZGlyX3VwLmdpZic7DQogICAgICAgICRpbWdfdGFnID0gJzxpbWcgc3JjPSInLiRpY29uLiciIHdpZHRoPSIzMiIgdGl0bGU9IicuJHRoaXMtPkxhbmcoJ3RpdGxlX2NoYW5nZXVwZGlyJykuJyIvPic7DQogICAgICAgIGlmKCRwYXJ0c19jb3VudGVyID4gMSl7DQogICAgICAgICAgICAkcGFyYW1zWydwcmVmaXgnXSA9ICR1cGRpcjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHVuc2V0KCRwYXJhbXNbJ3ByZWZpeCddKTsNCiAgICAgICAgfQ0KICAgICAgICB1bnNldCgkcGFyYW1zWydwYWdlbnVtYmVyJ10pOw0KICAgICAgICAkdXBfZGlydXJsID0gJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluaygkaWQsJHJldHVybmlkLCdkZWZhdWx0JywkaW1nX3RhZywkcGFyYW1zLCcnLHRydWUpOw0KICAgICAgICAkdXBfZGlyaWNvbmxpbmsgPSAkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwkcmV0dXJuaWQsJ2RlZmF1bHQnLCRpbWdfdGFnLCRwYXJhbXMsJycsZmFsc2UsdHJ1ZSwiY2xhc3M9J2NhcmQtbGluayciKTsNCiAgICAgICAgJHVwX2RpcmxpbmsgPSAiPGEgY2xhc3M9XCJjYXJkLWxpbmtcIiBocmVmPVwieyR1cF9kaXJ1cmx9XCIgdGl0bGU9XCJ7JHRoaXMtPkxhbmcoJ3RpdGxlX2NoYW5nZXVwZGlyJyl9XCI+Li48L2E+IjsNCg0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ3VwX2RpcnVybCcsJHVwX2RpcnVybCk7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbigndXBfZGlyaWNvbmxpbmsnLCR1cF9kaXJpY29ubGluayk7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbigndXBfZGlybGluaycsJHVwX2RpcmxpbmspOw0KICAgIH0NCg0KICAgICRxcGFybXMgPSBhcnJheSgpOw0KICAgICRxcGFybXNbJ2J1Y2tldCddID0gJGJ1Y2tldF9pZDsNCiAgICAkcXBhcm1zWydwcmVmaXgnXSA9ICRwcmVmaXg7DQogICAgJHFwYXJtc1sncmV0dXJuaWQnXSA9ICRyZXR1cm5pZDsNCiAgICAkcXBhcm1zWydkZXRhaWxwYWdlJ10gPSAkZGV0YWlscGFnZTsNCiAgICAkdHBsX29iLT5hc3NpZ24oJ3FwYXJtcycsJHFwYXJtcyk7DQoNCiAgICAkanNvbl9maWxlX1BhdGggPSAkdGhpcy0+Z2V0Q2FjaGVGaWxlKCRxcGFybXMpOw0KDQogICAgaWYoJG5taW51dGVzID09IDApIHsNCiAgICAgICAgJGRhdGEgPSBidWNrZXRfcXVlcnk6OmNhY2hlX3F1ZXJ5KCRxcGFybXMsJGpzb25fZmlsZV9QYXRoKTsNCiAgICB9IGVsc2Ugew0KDQogICAgICAgIGlmICghZmlsZV9leGlzdHMoJGpzb25fZmlsZV9QYXRoKSkgew0KICAgICAgICAgICAgJGRhdGEgPSBidWNrZXRfcXVlcnk6OmNhY2hlX3F1ZXJ5KCRxcGFybXMsJGpzb25fZmlsZV9QYXRoKTsNCiAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgICAgJGpzb24gPSBmaWxlX2dldF9jb250ZW50cygkanNvbl9maWxlX1BhdGgpOw0KICAgICAgICAgICAgJHRtcCA9IGVuY3J5cHQ6OmRlY3J5cHQoJGpzb24pOw0KICAgICAgICAgICAgJGRhdGEgPSBqc29uX2RlY29kZSgkdG1wLCBmYWxzZSk7DQogICAgICAgIA0KICAgICAgICAgICAgJGVuZGRhdGUgID0gc3RydG90aW1lKHNwcmludGYoIislZCBtaW51dGVzIiwgJG5taW51dGVzKSwgJGRhdGEtPmRhdGUpOw0KICAgICAgICAgICAgaWYgKHRpbWUoKSA+PSAkZW5kZGF0ZSkgew0KICAgICAgICAgICAgICAgICRkYXRhID0gYnVja2V0X3F1ZXJ5OjpjYWNoZV9xdWVyeSgkcXBhcm1zLCRqc29uX2ZpbGVfUGF0aCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgICRjb3VudCA9IGlzc2V0KCRkYXRhLT50b3RhbCkgPyAkZGF0YS0+dG90YWwgOiAnMCc7DQogICAgJHBhZ2Vjb3VudCA9IChpbnQpKCRjb3VudCAvICRwYWdlbGltaXQpOw0KICAgIGlmKCAoJGNvdW50ICUgJHBhZ2VsaW1pdCkgIT0gMCApICRwYWdlY291bnQrKzsNCg0KICAgICRwYXJhbXNbJ3ByZWZpeCddID0gJHByZWZpeDsNCiAgICANCiAgICAvLyBBc3NpZ24gc29tZSBwYWdpbmF0aW9uIHZhcmlhYmxlcyB0byBzbWFydHkNCiAgICBpZiggJHBhZ2VudW1iZXIgPT0gMSApIHsNCiAgICAgICAgJHRwbF9vYi0+YXNzaWduKCdwcmV2cGFnZScsJHRoaXMtPkxhbmcoJ3ByZXZwYWdlJykpOw0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ2ZpcnN0cGFnZScsJHRoaXMtPkxhbmcoJ2ZpcnN0cGFnZScpKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgICRwYXJhbXNbJ3BhZ2VudW1iZXInXT0kcGFnZW51bWJlci0xOw0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ3ByZXZwYWdlJywkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwkcmV0dXJuaWQsJ2RlZmF1bHQnLCR0aGlzLT5MYW5nKCdwcmV2cGFnZScpLCRwYXJhbXMpKTsNCiAgICAgICAgJHRwbF9vYi0+YXNzaWduKCdwcmV2dXJsJywkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwkcmV0dXJuaWQsJ2RlZmF1bHQnLCcnLCRwYXJhbXMsICcnLCB0cnVlKSk7DQogICAgICAgICRwYXJhbXNbJ3BhZ2VudW1iZXInXT0xOw0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ2ZpcnN0cGFnZScsJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluaygkaWQsJHJldHVybmlkLCdkZWZhdWx0JywkdGhpcy0+TGFuZygnZmlyc3RwYWdlJyksJHBhcmFtcykpOw0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ2ZpcnN0dXJsJywkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwkcmV0dXJuaWQsJ2RlZmF1bHQnLCcnLCRwYXJhbXMsICcnLCB0cnVlKSk7DQogICAgfQ0KDQogICAgaWYoICRwYWdlbnVtYmVyID49ICRwYWdlY291bnQgKSB7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbignbmV4dHBhZ2UnLCR0aGlzLT5MYW5nKCduZXh0cGFnZScpKTsNCiAgICAgICAgJHRwbF9vYi0+YXNzaWduKCdsYXN0cGFnZScsJHRoaXMtPkxhbmcoJ2xhc3RwYWdlJykpOw0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgJHBhcmFtc1sncGFnZW51bWJlciddPSRwYWdlbnVtYmVyKzE7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbignbmV4dHBhZ2UnLCR0aGlzLT5DcmVhdGVGcm9udGVuZExpbmsoJGlkLCRyZXR1cm5pZCwnZGVmYXVsdCcsJHRoaXMtPkxhbmcoJ25leHRwYWdlJyksJHBhcmFtcykpOw0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ25leHR1cmwnLCR0aGlzLT5DcmVhdGVGcm9udGVuZExpbmsoJGlkLCRyZXR1cm5pZCwnZGVmYXVsdCcsJycsJHBhcmFtcywgJycsIHRydWUpKTsNCiAgICAgICAgJHBhcmFtc1sncGFnZW51bWJlciddPSRwYWdlY291bnQ7DQogICAgICAgICR0cGxfb2ItPmFzc2lnbignbGFzdHBhZ2UnLCR0aGlzLT5DcmVhdGVGcm9udGVuZExpbmsoJGlkLCRyZXR1cm5pZCwnZGVmYXVsdCcsJHRoaXMtPkxhbmcoJ2xhc3RwYWdlJyksJHBhcmFtcykpOw0KICAgICAgICAkdHBsX29iLT5hc3NpZ24oJ2xhc3R1cmwnLCR0aGlzLT5DcmVhdGVGcm9udGVuZExpbmsoJGlkLCRyZXR1cm5pZCwnZGVmYXVsdCcsJycsJHBhcmFtcywgJycsIHRydWUpKTsNCiAgICB9DQoNCiAgICAkdHBsX29iLT5hc3NpZ24oJ2J1Y2tldCcsJGJ1Y2tldF9pZCk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdjYWNoZWZpbGUnLCRqc29uX2ZpbGVfUGF0aCk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdsYXN0dXBkYXRlJywgJGRhdGEtPmRhdGUpOw0KICAgICR0cGxfb2ItPmFzc2lnbignY291bnQnLCAkY291bnQpOw0KICAgICR0cGxfb2ItPmFzc2lnbigncGFnZW51bWJlcicsJHBhZ2VudW1iZXIpOw0KICAgICR0cGxfb2ItPmFzc2lnbignc3RhcnRlbGVtZW50Jywkc3RhcnRlbGVtZW50KTsNCg0KICAgIGlmKCRlbmRlbGVtZW50ID49ICRjb3VudCkkZW5kZWxlbWVudD0kY291bnQtMTsNCg0KICAgICR0cGxfb2ItPmFzc2lnbignZW5kZWxlbWVudCcsICRlbmRlbGVtZW50KTsNCiAgICAkdHBsX29iLT5hc3NpZ24oJ3BhZ2Vjb3VudCcsJHBhZ2Vjb3VudCk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdvZnRleHQnLCR0aGlzLT5MYW5nKCdwcm9tcHRfb2YnKSk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdwYWdldGV4dCcsJHRoaXMtPkxhbmcoJ3Byb21wdF9wYWdlJykpOw0KDQogICAgaWYgKCRzdGFydGVsZW1lbnQgPCAwIHx8ICRzdGFydGVsZW1lbnQgPiAkZW5kZWxlbWVudCkgew0KICAgICAgICBlY2hvICJJbnZhbGlkIGluZGV4ZXMuIjsNCiAgICB9IGVsc2Ugew0KICAgICAgICAvLyBTbGljZSB0aGUgYXJyYXkgdG8gZXh0cmFjdCBlbGVtZW50cyBiZXR3ZWVuIHRoZSBpbmRleGVzDQogICAgICAgICRzZWxlY3RlZEl0ZW1zID0gYXJyYXlfc2xpY2UoJGRhdGEtPml0ZW1zLCAkc3RhcnRlbGVtZW50LCAkZW5kZWxlbWVudCAtICRzdGFydGVsZW1lbnQgKyAxKTsNCiAgICAgICAgZm9yZWFjaCggJHNlbGVjdGVkSXRlbXMgYXMgJHJvdyApIHsNCiAgICAgICAgICAgICRvbmVyb3cgPSAkcm93Ow0KICAgICAgICAgICAgaWYoJG9uZXJvdy0+ZGlyKXsNCiAgICAgICAgICAgICAgICAkc2VuZHRvZGV0YWlsID0gYXJyYXkoJ3ByZWZpeCc9PiRvbmVyb3ctPmtleSk7DQogICAgICAgICAgICAgICAgaWYoIGlzc2V0KCAkcGFyYW1zWydwYWdlbGltaXQnXSApICkgew0KICAgICAgICAgICAgICAgICAgICAkc2VuZHRvZGV0YWlsID0gYXJyYXlfbWVyZ2UoJHNlbmR0b2RldGFpbCxhcnJheSgncGFnZWxpbWl0Jz0+JHBhZ2VsaW1pdCkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkb25lcm93LT5saW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJycsICRzZW5kdG9kZXRhaWwsJycsIHRydWUsIGZhbHNlLCAnJywgdHJ1ZSwkcHJldHR5dXJsKTsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5pY29uX2xpbmsgPSAiPGEgaHJlZj0nIiAuICRvbmVyb3ctPmxpbmsgLiAiJyBjbGFzcz1cImNhcmQtbGlua1wiPiIuJG9uZXJvdy0+aWNvbi4iPC9hPiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkZW50cnlhcnJheVtdPSAkb25lcm93Ow0KICAgICAgICB9DQogICAgfQ0KDQogICAgJHRwbF9vYi0+YXNzaWduKCdpdGVtcycsICRlbnRyeWFycmF5KTsNCiAgICAkdHBsX29iLT5hc3NpZ24oJ3N0YXJ0ZGF0ZScsICRkYXRhLT5kYXRlKTsNCiAgICAkdHBsX29iLT5hc3NpZ24oJ2VuZGRhdGUnLCAkZW5kZGF0ZSk7DQogICAgJHRwbF9vYi0+YXNzaWduKCdjYWNoZXRpbWUnLCAkbm1pbnV0ZXMpOw0KICAgICR0cGxfb2ItPmFzc2lnbigncGF0aF9wYXJ0cycsJHBhdGhfcGFydHMpOw0KDQogICAgJHRwbF9vYi0+ZGlzcGxheSgpOw0KDQogICAgaWYoJGRlYnVnKSANCgkkdHBsX29iLT5kaXNwbGF5KCdzdHJpbmc6PHByZT57JHFwYXJtc3xAcHJpbnRfcn08L3ByZT4nKTsNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsNCmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbihBV1NTMzo6TUFOQUdFX1BFUk0pICkgcmV0dXJuOw0KDQp1c2UgXEFXU1NES1xhd3Nfc2RrX3V0aWxzOw0KdXNlIFxBV1NTM1xhd3NfczNfdXRpbHM7DQp1c2UgXEFXU1MzXGhlbHBlcnM7DQoNCiRzZGtfdXRpbHMgPSBuZXcgYXdzX3Nka191dGlscygpOw0KJHMzX3V0aWxzID0gbmV3IGF3c19zM191dGlscygpOw0KDQokcmVhZHkgPSAwOw0KJG1vZF9mbSA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0ZpbGVNYW5hZ2VyJyk7DQoNCmlmKCEkc2RrX3V0aWxzLT5pc192YWxpZCgpKXsNCiAgICAkZXJyb3IgPSAxOw0KICAgICRsaW5rID0gJHNka191dGlsczo6Z2V0X21vZCgpLT5jcmVhdGVfdXJsKCdtMV8nLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgpKTsNCiAgICAkbWVzc2FnZSA9ICRzZGtfdXRpbHM6OmdldF9tb2QoKS0+X0Rpc3BsYXlNZXNzYWdlKCR0aGlzLT5MYW5nKCdlcnJvcl9zZXR1cCcsJGxpbmspLCJhbGVydC1kYW5nZXIiLHRydWUpOw0KfSBlbHNlIGlmKCRzM191dGlscy0+dmFsaWRhdGUoKSl7DQoJJHJlYWR5ID0gMTsNCgkkYnVja2V0X2lkID0gJHRoaXMtPkdldE9wdGlvblZhbHVlKCdidWNrZXRfbmFtZScpOw0KfQ0KDQplY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsNCglpZigkcmVhZHkgPT0gMSl7DQoJCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigkYnVja2V0X2lkLCRidWNrZXRfaWQpOw0KCQllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3Blcm1pc3Npb25zJywiUGVybWlzc2lvbnMiKTsNCgl9DQoNCgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NldHRpbmdzJywiU2V0dGluZ3MiKTsNCmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsNCg0KZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7DQoNCglpZigkcmVhZHkgPT0gMSl7DQoNCgkJZWNobyAkdGhpcy0+U3RhcnRUYWIoJGJ1Y2tldF9pZCk7DQoJCWluY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuIi9hY3Rpb24udXBsb2Fkdmlldy5waHAiKTsNCgkJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4iL2FjdGlvbi5hZG1pbl9maWxldmlldy5waHAiKTsNCgkJZWNobyAkdGhpcy0+RW5kVGFiKCk7DQoNCgkJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3Blcm1pc3Npb25zJyk7DQoJCWluY2x1ZGUoX19ESVJfXy4nL2Z1bmN0aW9uLmFkbWluX3Blcm1pc3Npb25zX3RhYi5waHAnKTsNCgkJZWNobyAkdGhpcy0+RW5kVGFiKCk7DQoJfQ0KDQoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3NldHRpbmdzJyk7DQoJCWluY2x1ZGUoX19ESVJfXy4nL2Z1bmN0aW9uLmFkbWluX3NldHRpbmdzX3RhYi5waHAnKTsNCgllY2hvICR0aGlzLT5FbmRUYWIoKTsNCgkNCg0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOw0KDQokdGhpcy0+U2V0Q3VycmVudFRhYigicGl4ZWxzb2x1dGlvbiIpOw0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.delete.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsNCmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkdGhpczo6TUFOQUdFX1BFUk0pICkgcmV0dXJuOw0KDQokYnVja2V0X2lkID0gJHRoaXMtPkdldE9wdGlvblZhbHVlKCdidWNrZXRfbmFtZScpOw0KDQokcmV0dXJuX3BhcmFtcyA9IFsgJ3ByZWZpeCc9PiRwYXJhbXNbJ3ByZWZpeCddLCdfX2FjdGl2ZXRhYic9PiRidWNrZXRfaWRdOw0KaWYgKGlzc2V0KCRwYXJhbXNbImNhbmNlbCJdKSkgJHRoaXMtPlJlZGlyZWN0KCRpZCwiZGVmYXVsdGFkbWluIiwkcmV0dXJuaWQsJHJldHVybl9wYXJhbXMpOw0KJG1vZF9mbSA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0ZpbGVNYW5hZ2VyJyk7DQoNCiRzZWxhbGwgPSAkcGFyYW1zWydzZWxhbGwnXTsNCmlmKCAhaXNfYXJyYXkoJHNlbGFsbCkgKSAkc2VsYWxsID0gdW5zZXJpYWxpemUoJHNlbGFsbCk7DQppZiggIWlzX2FycmF5KCRzZWxhbGwpICkgJHNlbGFsbCA9IHVuc2VyaWFsaXplKCRzZWxhbGwpOw0KDQppZiAoY291bnQoJHNlbGFsbCk9PTApIHsNCiAgJHJldHVybl9wYXJhbXNbImZtZXJyb3IiXT0ibm9maWxlc3NlbGVjdGVkIjsNCiAgJHRoaXMtPlJlZGlyZWN0KCRpZCwiZGVmYXVsdGFkbWluIiwkcmV0dXJuaWQsJHJldHVybl9wYXJhbXMpOw0KfQ0KDQovLyBwcm9jZXNzIGZvcm0NCiRlcnJvcnMgPSBhcnJheSgpOw0KaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSApIHsNCiAgDQogIGZvcmVhY2goICRzZWxhbGwgYXMgJGZpbGUgKSB7DQogICAgLy8gYnVpbGQgY29tcGxldGUgcGF0aA0KICAgICRsYXN0Y2hhciA9ICRmaWxlWy0xXTsNCg0KICAgIGlmICggc3RyY21wKCRsYXN0Y2hhciwgIi8iKSA9PT0gMCApIHsNCiAgICAgIGF3c19zM191dGlsczo6ZGVsZXRlT2JqZWN0RGlyKCRidWNrZXRfaWQsJGZpbGUpOw0KICAgICAgYXVkaXQoJycsIkFXU1MzIiwgIlJlbW92ZWQgZGlyZWN0b3J5OiAiLiRmaWxlKTsNCiAgICAgIFxDTVNNU1xIb29rTWFuYWdlcjo6ZG9faG9vaygnQVdTUzM6Ok9uRGlyZWN0b3J5RGVsZXRlZCcsICRwYXJtcyApOw0KICAgICAgY29udGludWU7DQogICAgfQ0KICAgIA0KICAgIGF3c19zM191dGlsczo6ZGVsZXRlT2JqZWN0KCRidWNrZXRfaWQsJGZpbGUpOw0KICAgICRwYXJtcyA9IGFycmF5KCdmaWxlJz0+JGZpbGUpOw0KICAgIGF1ZGl0KCcnLCJTMyIsICJSZW1vdmVkIGZpbGU6ICIuJGZpbGUpOw0KICAgIFxDTVNNU1xIb29rTWFuYWdlcjo6ZG9faG9vaygnQVdTUzM6Ok9uRmlsZURlbGV0ZWQnLCAkcGFybXMgKTsNCg0KICB9IC8vIGZvcmVhY2gNCg0KICBpZiggY291bnQoJGVycm9ycykgPT0gMCApIHsNCiAgICAkcmV0dXJuX3BhcmFtc1siZm1tZXNzYWdlIl09ICRtb2RfZm0tPkxhbmcoImRlbGV0ZXN1Y2Nlc3MiKTsgLy9zdHJpcHMgdGhlIGZpbGUgZGF0YQ0KICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsImRlZmF1bHRhZG1pbiIsJHJldHVybmlkLCRyZXR1cm5fcGFyYW1zKTsNCiAgfQ0KDQp9IC8vIGlmIHN1Ym1pdA0KDQovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Lg0KaWYoIGNvdW50KCRlcnJvcnMpICkgew0KICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlcnJvcnMpOw0KICAkc21hcnR5LT5hc3NpZ24oJ2Vycm9ycycsJGVycm9ycyk7DQp9DQppZiggaXNfYXJyYXkoJHBhcmFtc1snc2VsYWxsJ10pICkgJHBhcmFtc1snc2VsYWxsJ10gPSBzZXJpYWxpemUoJHBhcmFtc1snc2VsYWxsJ10pOw0KJHNtYXJ0eS0+YXNzaWduKCdzZWxhbGwnLCRzZWxhbGwpOw0KJHNtYXJ0eS0+YXNzaWduKCdtb2RfZm0nLCRtb2RfZm0pOw0KJHNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2ZpbGVhY3Rpb24nLCAkcmV0dXJuaWQsInBvc3QiLCIiLGZhbHNlLCIiLCRwYXJhbXMpKTsNCiRzbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOw0KDQpmb3JlYWNoKCAkc2VsYWxsIGFzICRmaWxlICkgew0KICAkbGFzdGNoYXIgPSAkZmlsZVstMV07DQogIGlmICggc3RyY21wKCRsYXN0Y2hhciwgIi8iKSA9PT0gMCApIHsNCiAgICAkc21hcnR5LT5hc3NpZ24oJ2hhc2RpcicsdHJ1ZSk7DQogIH0NCn0NCg0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdkZWxldGUudHBsJyk7DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/action.detail.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsNCg0KdXNlIFxBV1NTREtcYXdzX3Nka191dGlsczsNCnVzZSBcQVdTUzNcYXdzX3MzX3V0aWxzOw0KDQoJLy8gcGFzcyBkYXRhIHRvIGhlYWQgc2VjdGlvbi4NCgkkdGVtcGxhdGVfaGVhZCA9ICR0aGlzLT5fb3V0cHV0X2Zyb250ZW5kX2NzcygpOw0KCSR0ZW1wbGF0ZXRpdGxlID0gJzwhLS0gQVdTUzMgLS0+DQoJJzsNCglpZiAoIWVtcHR5KCR0ZW1wbGF0ZV9oZWFkKSkNCgkJCSR0aGlzLT5Gcm9udEVuZENTUyAuPSAkdGVtcGxhdGV0aXRsZSAuICR0ZW1wbGF0ZV9oZWFkIC4gJw0KCSc7DQoNCgkkZGVidWcgPSBpc3NldCgkcGFyYW1zWydkZWJ1ZyddKTsNCgkkdGVtcGxhdGUgPSBudWxsOw0KCWlmIChpc3NldCgkcGFyYW1zWydkZXRhaWx0ZW1wbGF0ZSddKSkgew0KCQkkdGVtcGxhdGUgPSB0cmltKCRwYXJhbXNbJ2RldGFpbHRlbXBsYXRlJ10pOw0KCX0NCgllbHNlIHsNCgkJJHRwbCA9IENtc0xheW91dFRlbXBsYXRlOjpsb2FkX2RmbHRfYnlfdHlwZSgnQVdTUzM6OmRldGFpbCcpOw0KCQlpZiggIWlzX29iamVjdCgkdHBsKSApIHsNCgkJCWF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ05vIGRlZmF1bHQgZGV0YWlsIHRlbXBsYXRlIGZvdW5kJyk7DQoJCQlyZXR1cm47DQoJCX0NCgkJJHRlbXBsYXRlID0gJHRwbC0+Z2V0X25hbWUoKTsNCgl9DQoNCgl0cnkgew0KCQlpZiggIWlzc2V0KCRwYXJhbXNbJ3ByZWZpeCddKSApIHsNCgkJCXRocm93IG5ldyBcQVdTU0RLXEV4Y2VwdGlvbignVXBsb2FkIGlkIG5vdCBzcGVjaWZpZWQnLDUwMCk7DQoJCX0NCgl9IGNhdGNoIChcQVdTU0RLXEV4Y2VwdGlvbiAkZSkgew0KCQkkdGhpcy0+X0Rpc3BsYXlNZXNzYWdlKCRlLT5nZXRUZXh0KCksJGUtPmdldFR5cGUoKSk7DQoJfQ0KDQoJJGtleSA9IHVybGRlY29kZSgkcGFyYW1zWydwcmVmaXgnXSk7DQoJJGVudHJ5ID0gYXdzX3MzX3V0aWxzOjpnZXRfZmlsZV9pbmZvKCRrZXkpOw0KDQogICAgJHRwbF9vYiA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCR0aGlzLT5HZXRUZW1wbGF0ZVJlc291cmNlKCR0ZW1wbGF0ZSksbnVsbCxudWxsLCRzbWFydHkpOw0KICAgICR0cGxfb2ItPmFzc2lnbignZW50cnknLCRlbnRyeSk7DQoJJHRwbF9vYi0+YXNzaWduKCdzZXR0aW5ncycsJHRoaXMtPkdldFNldHRpbmdzVmFsdWVzKCkpOw0KICAgICR0cGxfb2ItPmRpc3BsYXkoKTsNCg0KCWlmKCRkZWJ1ZykgDQoJJHRwbF9vYi0+ZGlzcGxheSgnc3RyaW5nOjxwcmU+eyRlbnRyeXxAcHJpbnRfcn08L3ByZT4nKTsNCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.fileaction.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXM6Ok1BTkFHRV9QRVJNKSApIHJldHVybjsNCi8vaWYgKCFpc3NldCgkcGFyYW1zWyJwYXRoIl0pKSAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJyk7DQoNCiRmaWxlYWN0aW9uPSIiOw0KaWYgKGlzc2V0KCRwYXJhbXNbImZpbGVhY3Rpb24iXSkpICRmaWxlYWN0aW9uPSRwYXJhbXNbImZpbGVhY3Rpb24iXTsNCg0KaWYgKGlzc2V0KCRwYXJhbXNbImZpbGVhY3Rpb25uZXdkaXIiXSkgfHwgJGZpbGVhY3Rpb249PSJuZXdkaXIiKSB7DQogIGluY2x1ZGVfb25jZShfX0RJUl9fLiIvYWN0aW9uLm5ld2Rpci5waHAiKTsNCiAgcmV0dXJuOw0KfQ0KDQppZiAoaXNzZXQoJHBhcmFtc1siZmlsZWFjdGlvbnJlbmFtZSJdKSB8fCAkZmlsZWFjdGlvbj09InJlbmFtZSIpIHsNCiAgaW5jbHVkZV9vbmNlKF9fRElSX18uIi9hY3Rpb24ucmVuYW1lLnBocCIpOw0KICByZXR1cm47DQp9DQoNCmlmIChpc3NldCgkcGFyYW1zWyJmaWxlYWN0aW9uZGVsZXRlIl0pIHx8ICRmaWxlYWN0aW9uPT0iZGVsZXRlIikgew0KICBpbmNsdWRlX29uY2UoX19ESVJfXy4iL2FjdGlvbi5kZWxldGUucGhwIik7DQogIHJldHVybjsNCn0NCg0KaWYgKGlzc2V0KCRwYXJhbXNbImZpbGVhY3Rpb25jb3B5Il0pIHx8ICRmaWxlYWN0aW9uPT0iY29weSIpIHsNCiAgaW5jbHVkZV9vbmNlKF9fRElSX18uIi9hY3Rpb24uY29weS5waHAiKTsNCiAgcmV0dXJuOw0KfQ0KDQppZiAoaXNzZXQoJHBhcmFtc1siZmlsZWFjdGlvbm1vdmUiXSkgfHwgJGZpbGVhY3Rpb249PSJtb3ZlIikgew0KICBpbmNsdWRlX29uY2UoX19ESVJfXy4iL2FjdGlvbi5tb3ZlLnBocCIpOw0KICByZXR1cm47DQp9DQoNCmlmIChpc3NldCgkcGFyYW1zWyJmaWxlYWN0aW9udW5wYWNrIl0pIHx8ICRmaWxlYWN0aW9uPT0idW5wYWNrIikgew0KICBpbmNsdWRlX29uY2UoX19ESVJfXy4iL2FjdGlvbi51bnBhY2sucGhwIik7DQogIHJldHVybjsNCn0NCg0KaWYgKGlzc2V0KCRwYXJhbXNbImZpbGVhY3Rpb250aHVtYiJdKSB8fCAkZmlsZWFjdGlvbj09InRodW1iIikgew0KICBpbmNsdWRlX29uY2UoX19ESVJfXy4iL2FjdGlvbi50aHVtYi5waHAiKTsNCiAgcmV0dXJuOw0KfQ0KDQppZiAoaXNzZXQoJHBhcmFtc1snZmlsZWFjdGlvbnJlc2l6ZWNyb3AnXSkgfHwgJGZpbGVhY3Rpb24gPT0gJ3Jlc2l6ZWNyb3AnKSB7DQogIGluY2x1ZGVfb25jZShfX0RJUl9fLicvYWN0aW9uLnJlc2l6ZWNyb3AucGhwJyk7DQogIHJldHVybjsNCn0NCg0KaWYgKGlzc2V0KCRwYXJhbXNbJ2ZpbGVhY3Rpb25yb3RhdGUnXSkgfHwgJGZpbGVhY3Rpb24gPT0gJ3JvdGF0ZScpIHsNCiAgaW5jbHVkZV9vbmNlKF9fRElSX18uJy9hY3Rpb24ucm90YXRlLnBocCcpOw0KICByZXR1cm47DQp9DQoNCmlmIChpc3NldCgkcGFyYW1zWydmaWxlYWN0aW9ucmVmcmVzaCddKSB8fCAkZmlsZWFjdGlvbiA9PSAncmVmcmVzaCcpIHsNCiAgaW5jbHVkZV9vbmNlKF9fRElSX18uJy9hY3Rpb24ucmVmcmVzaC5waHAnKTsNCiAgcmV0dXJuOw0KfQ0KDQokdGhpcy0+UmVkaXJlY3QoJGlkLCJkZWZhdWx0YWRtaW4iLCRyZXR1cm5pZCxhcnJheSgicHJlZml4Ij0+JHBhcmFtc1sicHJlZml4Il0sImZtZXJyb3IiPT4idW5rbm93bmZpbGVhY3Rpb24iKSk7DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/action.refresh.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7DQppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHRoaXM6Ok1BTkFHRV9QRVJNKSApIHJldHVybjsNCg0KJHByZWZpeCA9ICRwYXJhbXNbJ3ByZWZpeCddPyRwYXJhbXNbJ3ByZWZpeCddOicnOw0KJGJ1Y2tldF9pZCA9ICR0aGlzLT5HZXRPcHRpb25WYWx1ZSgnYnVja2V0X25hbWUnKTsNCg0KJHFwYXJtcyA9IGFycmF5KCk7DQokcXBhcm1zWydidWNrZXQnXSA9ICRidWNrZXRfaWQ7DQokcXBhcm1zWydwcmVmaXgnXSA9ICRwcmVmaXg7DQokcXBhcm1zWydyZXR1cm5pZCddID0gJHJldHVybmlkOw0KJHNtYXJ0eS0+YXNzaWduKCdxcGFybXMnLCRxcGFybXMpOw0KDQokanNvbl9maWxlX1BhdGggPSAkdGhpcy0+Z2V0Q2FjaGVGaWxlKCRxcGFybXMpOw0KJGRhdGEgPSBidWNrZXRfcXVlcnk6OmNhY2hlX3F1ZXJ5KCRxcGFybXMsJGpzb25fZmlsZV9QYXRoKTsNCiRyZXR1cm5fcGFyYW1zID0gWydwcmVmaXgnPT4kcHJlZml4LCdfX2FjdGl2ZXRhYic9PiRidWNrZXRfaWQsImZtbWVzc2FnZSI9PiJyZWZyZXNoc3VjY2VzcyJdOw0KJHRoaXMtPlJlZGlyZWN0KCRpZCwiZGVmYXVsdGFkbWluIiwkcmV0dXJuaWQsJHJldHVybl9wYXJhbXMpOw0KDQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/action.signed.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsNCnVzZSBBV1NTM1xhd3NfczNfdXRpbHM7DQoNCiRtb2Rfc2RrID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQVdTU0RLJyk7DQoNCnRyeSB7DQoJaWYoICFpc3NldCgkcGFyYW1zWydrZXknXSkgKSB7DQoJCXRocm93IG5ldyBcQVdTUzNcRXhjZXB0aW9uKCdLZXkgaXMgcmVxdWlyZWQnKTsNCgl9DQoNCgkkYnVja2V0ID0gJHRoaXMtPkdldE9wdGlvblZhbHVlKCJidWNrZXRfbmFtZSIpOw0KCSRrZXkgPSAkbW9kX3Nkay0+ZGVjb2RlZmlsZW5hbWUoJHBhcmFtc1sna2V5J10pOw0KCSRmaWxlID0gYXdzX3MzX3V0aWxzOjpwcmVzaWduZWRVcmwoJGJ1Y2tldCwka2V5KTsNCgkvL2VjaG8gJGZpbGU7DQoJaGVhZGVyKCJMb2NhdGlvbjogIi4kZmlsZSk7DQoJZGllKCk7DQoJDQp9IGNhdGNoIChcQVdTUzNcRXhjZXB0aW9uICRlKSB7DQoJLy8kdGhpcy0+X0Rpc3BsYXlBZG1pbk1lc3NhZ2UoJGUtPkdldE9wdGlvbnMoKSwkZS0+R2V0VHlwZSgpKTsNCgkkbW9kX3Nkay0+X0Rpc3BsYXlNZXNzYWdlKCRlLT5nZXRUZXh0KCkpOw0KfQ0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.upload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzOjpNQU5BR0VfUEVSTSkgKSByZXR1cm47DQoNCnVzZSBcQVdTUzNcYXdzX3MzX3V0aWxzOw0KJF9fc2RrID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQVdTU0RLJyk7DQoNCiR0ZW1wbGF0ZSA9IFx4dF9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCd0ZW1wbGF0ZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfdXBsb2FkZm9ybScpKTsNCiRub2NhcHRjaGEgPSBceHRfcGFyYW06OmdldF9ib29sKCRwYXJhbXMsJ25vY2FwdGNoYScpOw0KJG1lc3NhZ2UgPSBudWxsOw0KJHV0aWxzID0gbmV3IGF3c19zM191dGlscygpOw0KDQovLyR0ZW1wbGF0ZSA9ICdvcmlnX3VwbG9hZGZvcm1fdGVtcGxhdGUudHBsJzsNCiR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSgkdGhpcy0+R2V0VGVtcGxhdGVSZXNvdXJjZSgkdGVtcGxhdGUpLG51bGwsbnVsbCwkc21hcnR5KTsNCg0KDQppZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfc3VibWl0J10pICkgew0KICAgIHRyeSB7DQoNCiAgICAgICAgJHByZWZpeD0gJHBhcmFtc1sncHJlZml4J10/JHBhcmFtc1sncHJlZml4J106Jyc7DQoNCiAgICAgICAgJHVwbG9hZGZpbGUgPSAkX0ZJTEVTWyRpZC4naW5wdXRfYnJvd3NlJ107DQogICAgICAgICRmaWxlX25hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWyRpZC4naW5wdXRfYnJvd3NlJ11bJ25hbWUnXSk7IA0KICAgICAgICAkZmlsZV90eXBlID0gcGF0aGluZm8oJGZpbGVfbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKTsgDQoNCiAgICAgICAgaWYoZW1wdHkoJGZpbGVfbmFtZSkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCAkdGhpcy0+TGFuZygnd2Fybl9maWxlX21pc3NpbmcnKSApOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQWxsb3cgY2VydGFpbiBmaWxlIGZvcm1hdHMgDQogICAgICAgIGlmKCAhJHV0aWxzOjppc19maWxlX2FjY2VwdGFibGUoICRmaWxlX3R5cGUgKSApIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCAkdGhpcy0+TGFuZygnd2Fybl9maWxlX25vdF9hbGxvd2VkJykgKTsNCiAgICAgICAgfSANCg0KICAgICAgICAvL2NoZWNrIGNhcHRjaGENCiAgICAgICAgJGNhcHRjaGEgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NhcHRjaGEnKTsNCiAgICAgICAgaWYoIGlzX29iamVjdCgkY2FwdGNoYSkgJiYgISRub2NhcHRjaGEgJiYgaXNzZXQoJHBhcmFtc1snaW5wdXRfY2FwdGNoYSddKSApIHsNCiAgICAgICAgICAgIGlmKCAhJGNhcHRjaGEtPmNoZWNrQ2FwdGNoYShceHRfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnaW5wdXRfY2FwdGNoYScpKSApIHRocm93IG5ldyBcRXhjZXB0aW9uKCR0aGlzLT5sYW5nKCdlcnJvcl9jYXB0Y2hhbWlzbWF0Y2gnKSk7DQogICAgICAgIH0NCg0KICAgICAgICAkZmlsZV90ZW1wX3NyYyA9ICRfRklMRVNbJGlkLidpbnB1dF9icm93c2UnXVsidG1wX25hbWUiXTsNCiAgICAgICAgaWYoaXNfdXBsb2FkZWRfZmlsZSgkZmlsZV90ZW1wX3NyYykpew0KICAgICAgICAgICAgJGJ1Y2tldF9pZCA9ICR0aGlzLT5HZXRPcHRpb25WYWx1ZSgnYnVja2V0X25hbWUnKTsNCiAgICAgICAgICAgICRyZXQgPSAkdXRpbHMtPnVwbG9hZF9maWxlKCRidWNrZXRfaWQsJHByZWZpeC4kZmlsZV9uYW1lLCRmaWxlX3RlbXBfc3JjKTsNCiAgICAgICAgfQ0KICAgIA0KICAgICAgICBpZiggJHJldFswXSA9PSBmYWxzZSApIHRocm93IG5ldyBcRXhjZXB0aW9uKCRyZXRbMV0pOw0KICAgICAgICAkZ29vZF91cGxvYWQgPSAkcmV0WzJdOw0KICAgICAgICAvLyByZWRpcmVjdCBvdXRhIGhlcmUsIG9yIGRpc3BsYXkgYSBtZXNzYWdlDQogICAgICAgIGlmKCAoJHRtcCA9ICRwYXJhbXNbJ3JlZGlyZWN0J10pICkgew0KICAgICAgICAgICAgJGRlc3RwYWdlID0gJF9fc2RrLT5yZXNvbHZlX2FsaWFzX29yX2lkKCR0bXAsJHJldHVybmlkKTsNCiAgICAgICAgICAgICR0aGlzLT5yZWRpcmVjdGNvbnRlbnQoICRkZXN0cGFnZSApOw0KICAgICAgICB9DQogICAgfQ0KICAgIGNhdGNoKCBcRXhjZXB0aW9uICRlICkgew0KICAgICAgICAkZXJyb3JtZXNzYWdlID0gJGUtPmdldG1lc3NhZ2UoKTsNCiAgICB9DQoNCiAgICBpZihpc3NldCgkZXJyb3JtZXNzYWdlKSl7DQogICAgICAgICR0eXBlID0gImFsZXJ0LWRhbmdlciI7DQogICAgICAgICRtZXNzYWdlID0gJGVycm9ybWVzc2FnZTsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkdHlwZSA9ICJhbGVydC1zdWNjZXNzIjsNCiAgICAgICAgJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZygnc3VjY2Vzc2Z1bF91cGxvYWQnLCRnb29kX3VwbG9hZCk7DQogICAgfQ0KDQogICAgJG1lc3NhZ2UgPSAkX19zZGstPl9EaXNwbGF5TWVzc2FnZSgkbWVzc2FnZSwkdHlwZSwxKTsNCg0KICAgICR0cGwtPmFzc2lnbignbWVzc2FnZScsJG1lc3NhZ2UpOw0KDQp9DQoNCiRwYXJtcyA9IGFycmF5KCdwcmVmaXgnPT4kcGFyYW1zWydwcmVmaXgnXSwnbm9jYXB0Y2hhJz0+JG5vY2FwdGNoYSwncmVkaXJlY3QnPT4kcGFyYW1zWydyZWRpcmVjdCddKTsNCi8vIGVuY3J5cHQgdGhlc2UgcGFyYW1zLg0KJHRwbC0+YXNzaWduKCdzdGFydGZvcm0nLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAndXBsb2FkJywgJHJldHVybmlkLCJwb3N0IiwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsZmFsc2UsJycsJHBhcmFtcykpOw0KJHRwbC0+YXNzaWduKCdlbmRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsNCmlmKCAhJG5vY2FwdGNoYSApIHsNCiAgICAkY2FwdGNoYSA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnQ2FwdGNoYScpOw0KICAgIGlmKCBpc19vYmplY3QoJGNhcHRjaGEpICkgew0KICAgICAgICAkdHBsLT5hc3NpZ24oJ2NhcHRjaGFfdGl0bGUnLCAkdGhpcy0+TGFuZygnY2FwdGNoYV90aXRsZScpKTsNCiAgICAgICAgJHRwbC0+YXNzaWduKCdjYXB0Y2hhJywgJGNhcHRjaGEtPmdldENhcHRjaGEoKSk7DQogICAgfQ0KfQ0KDQokdHBsLT5kaXNwbGF5KCk7DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/action.uploadview.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsNCmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkdGhpczo6TUFOQUdFX1BFUk0pICkgcmV0dXJuOw0KDQokcGF0aD0nJzsNCmlmKCBpc3NldCgkcGFyYW1zWyJwcmVmaXgiXSkpIHsNCiAgJHBhdGggPSAkcGFyYW1zWyJwcmVmaXgiXTsNCiAgJHNtYXJ0eS0+YXNzaWduKCdoaWRkZW5wYXRoJywgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgInByZWZpeCIsICRwYXRoKSk7DQp9DQoNCiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ3VwbG9hZF9hZG1pbicsICRyZXR1cm5pZCwicG9zdCIsIm11bHRpcGFydC9mb3JtLWRhdGEiKSk7DQokc21hcnR5LT5hc3NpZ24oJ2FjdGlvbmlkJywkaWQpOw0KJHNtYXJ0eS0+YXNzaWduKCdtYXhmaWxlc2l6ZScsJGNvbmZpZ1sibWF4X3VwbG9hZF9zaXplIl0pOw0KJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsInN1Ym1pdCIsJHRoaXMtPkxhbmcoInN1Ym1pdCIpLCIiLCIiKSk7DQokc21hcnR5LT5hc3NpZ24oJ2Zvcm1lbmQnLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOw0KDQoNCg0KJHBvc3RfbWF4X3NpemUgPSBmaWxlbWFuYWdlcl91dGlsczo6c3RyX3RvX2J5dGVzKGluaV9nZXQoJ3Bvc3RfbWF4X3NpemUnKSk7DQokdXBsb2FkX21heF9maWxlc2l6ZSA9IGZpbGVtYW5hZ2VyX3V0aWxzOjpzdHJfdG9fYnl0ZXMoaW5pX2dldCgndXBsb2FkX21heF9maWxlc2l6ZScpKTsNCiRzbWFydHktPmFzc2lnbignbWF4X2NodW5rc2l6ZScsbWluKCR1cGxvYWRfbWF4X2ZpbGVzaXplLCRwb3N0X21heF9zaXplLTEwMjQpKTsNCmlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pICYmIChzdHJwb3MoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCAnTVNJRScpICE9PSBmYWxzZSkpIHsNCiAgICAkc21hcnR5LT5hc3NpZ24oJ2lzX2llJywxKTsNCn0NCiRzbWFydHktPmFzc2lnbignYWN0aW9uX3VybF91cGxvYWQnLCR0aGlzLT5jcmVhdGVfdXJsKCdtMV8nLCd1cGxvYWQnLCRyZXR1cm5pZCkpOw0KJHNtYXJ0eS0+YXNzaWduKCdGaWxlTWFuYWdlcicsXGNtc191dGlsczo6Z2V0X21vZHVsZSgnRmlsZU1hbmFnZXInKSk7DQoNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgndXBsb2Fkdmlldy50cGwnKTsNCg==]]></data>
	</file>
	<file>
	  <filename>/action.upload_admin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzOjpNQU5BR0VfUEVSTSkgKSByZXR1cm47DQoNCmhlYWRlcignQ29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyk7DQp1c2UgQVdTUzNcYXdzX3MzX3V0aWxzOw0KJHV0aWxzID0gbmV3IGF3c19zM191dGlscygpOw0KJEZpbGVNYW5hZ2VyID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnRmlsZU1hbmFnZXInKTsNCiRlcnJvciA9IDA7DQoNCiRkYXRhID0gYXJyYXkoKTsNCg0KdHJ5IHsNCg0KICAgIGlmKGVtcHR5KCRfRklMRVMpKSB7DQogICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCAkdGhpcy0+TGFuZygnd2Fybl9maWxlX21pc3NpbmcnKSApOw0KICAgIH0NCg0KICAgICRmaWxlcyA9IGFycmF5X2ZpbHRlcigkX0ZJTEVTWyRpZC4nZmlsZXMnXVsnbmFtZSddKTsNCg0KICAgICR0b3RhbF9jb3VudCA9IGNvdW50KCRfRklMRVNbJGlkLidmaWxlcyddWyduYW1lJ10pOw0KICAgIC8vIExvb3AgdGhyb3VnaCBldmVyeSBmaWxlDQogICAgZm9yKCAkaT0wIDsgJGkgPCAkdG90YWxfY291bnQgOyAkaSsrICkgew0KDQogICAgICAgICRmaWxlX25hbWUgPSBiYXNlbmFtZSgkX0ZJTEVTWyRpZC4nZmlsZXMnXVsnbmFtZSddWyRpXSk7IA0KICAgICAgICAkZmlsZV90eXBlID0gcGF0aGluZm8oJGZpbGVfbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKTsgDQoNCiAgICAgICAgJHJldHVybl9wYXJhbXNbJ25hbWUnXSA9ICRmaWxlX25hbWU7DQogICAgICAgICRyZXR1cm5fcGFyYW1zWydzaXplJ10gPSAkX0ZJTEVTWyRpZC4nZmlsZXMnXVsnc2l6ZSddWyRpXTsNCiAgICAgICAgDQogICAgICAgIC8vIEFsbG93IGNlcnRhaW4gZmlsZSBmb3JtYXRzIA0KICAgICAgICBpZiggISR1dGlsczo6aXNfZmlsZV9hY2NlcHRhYmxlKCAkZmlsZV90eXBlICkgKSB7DQogICAgICAgICAgICAvL3Rocm93IG5ldyBcRXhjZXB0aW9uKCAkdGhpcy0+TGFuZygnd2Fybl9maWxlX25vdF9hbGxvd2VkJykgKTsNCiAgICAgICAgICAgICRyZXR1cm5fcGFyYW1zWydlcnJvciddID0gIkZpbGV0eXBlIG5vdCBhbGxvd2VkIjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8vdXBsb2FkIHRvIFMzDQogICAgICAgICAgICAkZmlsZV90ZW1wX3NyYyA9ICRfRklMRVNbJGlkLidmaWxlcyddWyJ0bXBfbmFtZSJdWyRpXTsNCiAgICAgICAgICAgIGlmKGlzX3VwbG9hZGVkX2ZpbGUoJGZpbGVfdGVtcF9zcmMpKXsNCiAgICAgICAgICAgICAgICAkczMgPSAkdXRpbHMtPnVwbG9hZF9maWxlKCRwYXJhbXNbInByZWZpeCJdLiRmaWxlX25hbWUsJGZpbGVfdGVtcF9zcmMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgJGRhdGFbJ2ZpbGVzJ11bXSA9ICRyZXR1cm5fcGFyYW1zOw0KDQogICAgfQ0KDQp9DQpjYXRjaCggXEV4Y2VwdGlvbiAkZSApIHsNCgkkZXJyb3IgPSAxOwkNCgkkbWVzc2FnZSA9ICRlLT5nZXRNZXNzYWdlKCk7DQogICAgJGRhdGFbJ2Vycm9yJ10gPSAkbWVzc2FnZTsNCg0KfQ0KDQoNCmVjaG8ganNvbl9lbmNvZGUoJGRhdGEpOw0KDQojDQojIEVPRg0KIw0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/AWSS3.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KdXNlIFxBV1NTM1xhd3NfczNfdXRpbHM7DQoNCmNsYXNzIEFXU1MzIGV4dGVuZHMgQ01TTW9kdWxlDQp7DQoJY29uc3QgTUFOQUdFX1BFUk0gPSAnbWFuYWdlX0FXU1MzJzsJDQoJDQoJcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7IHJldHVybiAnMS4wLjAnOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2FkbWluZGVzY3JpcHRpb24nKTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIFRSVUU7IH0NCglwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSB7IHJldHVybiBUUlVFOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKSB7IHJldHVybiAkdGhpcy0+X291dHB1dF9oZWFkZXJfYXNzZXRzKCk7IH0NCglwdWJsaWMgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgeyByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbihzZWxmOjpNQU5BR0VfUEVSTSk7IH0NCglwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkgeyByZXR1cm4gJ01hZ2FsIEhlemknOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgeyByZXR1cm4gJ2hfbWFnYWxAaG90bWFpbC5jb20nOyB9DQoJcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7IHJldHVybiAkdGhpcy0+TGFuZygnYXNrX3VuaW5zdGFsbCcpOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsgcmV0dXJuICdleHRlbnRpb25zJzsgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcyLjIuMSc7IH0NCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkgeyByZXR1cm4gWydBV1NTREsnID0+ICcxLjAuMCddOyB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKXsNCiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOw0KDQogICAgICAgIFxzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoWyR0aGlzLCAnYXV0b2xvYWQnXSk7DQoNCiAgICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsNCiAgICAgICAgaWYoICEkc21hcnR5ICkgcmV0dXJuOw0KDQogICAgICAgICRzZGsgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoICdBV1NTREsnICk7DQogICAgICAgICRmbiA9ICR0aGlzLT5HZXRNb2R1bGVQYXRoKCkuJy9saWIvY2xhc3MuYXdzX3MzX3V0aWxzLnBocCc7IHJlcXVpcmVfb25jZSgkZm4pOw0KICAgICAgICAkZm4gPSAkc2RrLT5HZXRNb2R1bGVQYXRoKCkuJy9saWIvY2xhc3MuYXdzX3Nka191dGlscy5waHAnOyByZXF1aXJlX29uY2UoJGZuKTsNCg0KICAgICAgICAkc21hcnR5LT5yZWdpc3RlckNsYXNzKCdzM191dGlscycsJ1xBV1NTM1xhd3NfczNfdXRpbHMnKTsNCiAgICAgICAgJHNtYXJ0eS0+cmVnaXN0ZXJDbGFzcygnc2RrX3V0aWxzJywnXEFXU1NES1xhd3Nfc2RrX3V0aWxzJyk7DQogICAgICAgIA0KICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ3NkaycsJHNkayk7DQoNCiAgICAgICAgaWYgKCRzZGstPmlzX2RldmVsb3Blcl9tb2RlKCkpew0KICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdpc2RldicsdHJ1ZSk7DQogICAgICAgIH0NCiAgICANCiAgfQ0KDQogIHB1YmxpYyBmdW5jdGlvbiBhdXRvbG9hZCgkY2xhc3NuYW1lKSA6IGJvb2wNCiAgew0KICAgIA0KICAgICRzZGtfbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCAnQVdTU0RLJyApOw0KICAgICAgJHBhdGggPSAkc2RrX21vZC0+R2V0TW9kdWxlUGF0aCgpIC4gJy9saWInOw0KICAgICAgcmVxdWlyZV9vbmNlICRwYXRoLicvU0RLL2F3cy1hdXRvbG9hZGVyLnBocCc7DQogICAgICByZXR1cm4gVFJVRTsNCiAgfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKSB7DQoJCSR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbigpOw0KICAgICAgICAkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7DQogICAgICAgIA0KICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYWN0aW9uJywgQ0xFQU5fU1RSSU5HKTsNCiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3ByZWZpeCcsQ0xFQU5fU1RSSU5HKTsNCiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3BhZ2VudW0nLENMRUFOX0lOVCk7DQogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdwYWdlbGltaXQnLENMRUFOX0lOVCk7DQogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzdW1tYXJ5dGVtcGxhdGUnLENMRUFOX1NUUklORyk7DQogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkZXRhaWxwYWdlJyxDTEVBTl9TVFJJTkcpOw0KICAgICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGV0YWlsdGVtcGxhdGUnLENMRUFOX1NUUklORyk7DQogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdqdW5rJyxDTEVBTl9TVFJJTkcpOw0KDQogICAgICAgICR0aGlzLT5SZWdpc3RlclJvdXRlKCcvW1NzXTNcL1tTc11cLyg/UDxwcmVmaXg+Lio/KSQvJywgYXJyYXkoJ2FjdGlvbic9PidzaWduZWQnKSk7DQogICAgICAgICR0aGlzLT5SZWdpc3RlclJvdXRlKCcvW1NzXTNcL1tGZl1pbGVcLyg/UDxwcmVmaXg+LiopXC8oP1A8cmV0dXJuaWQ+WzAtOV0rKSQvJywgYXJyYXkoJ2FjdGlvbic9PidkZXRhaWwnKSk7DQogICAgICAgICR0aGlzLT5SZWdpc3RlclJvdXRlKCcvW1NzXTNcL1tGZl1pbGVcLyg/UDxwcmVmaXg+LiopXC8oP1A8cmV0dXJuaWQ+WzAtOV0rKVwvKD9QPGp1bms+Lio/KSQvJywgYXJyYXkoJ2FjdGlvbic9PidkZXRhaWwnKSk7DQoNCgl9DQoNCgkgcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVBZG1pbigpIHsNCgkJICR0aGlzLT5TZXRQYXJhbWV0ZXJzKCk7DQogICAgICAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdwcmVmaXgnLG51bGwsJHRoaXMtPkxhbmcoJ2hlbHBfcGFyYW1fcHJlZml4JykpOw0KICAgICAgICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcigncGFnZWxpbWl0JyxudWxsLCR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX3BhZ2VsaW1pdCcpKTsNCiAgICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3N1bW1hcnlwYWdlJyxudWxsLCR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX3N1bW1hcnlwYWdlJykpOw0KICAgICAgICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignc3VtbWFyeXRlbXBsYXRlJyxudWxsLCR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX3N1bW1hcnl0ZW1wbGF0ZScpKTsNCiAgICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2RldGFpbHBhZ2UnLG51bGwsJHRoaXMtPkxhbmcoJ2hlbHBfcGFyYW1fZGV0YWlscGFnZScpKTsNCiAgICAgICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2RldGFpbHRlbXBsYXRlJyxudWxsLCR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX2RldGFpbHRlbXBsYXRlJykpOw0KICAgICAgICAgIyR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2RldGFpbHBhZ2UnLG51bGwsJHRoaXMtPkxhbmcoJ2hlbHBfcGFyYW1fZGV0YWlscGFnZScpKTsNCgkgfQ0KCQ0KCXB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwKCkgeyByZXR1cm4gQGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy9SRUFETUUubWQnKTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7IHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nL2RvYy9jaGFuZ2Vsb2cuaW5jJyk7IH0NCg0KCXByb3RlY3RlZCBmdW5jdGlvbiBfb3V0cHV0X2hlYWRlcl9hc3NldHMoKQ0KICAgIHsNCiAgICAgICAgJG91dCA9ICcnOw0KICAgICAgICAkdXJscGF0aCA9ICR0aGlzLT5HZXRNb2R1bGVVUkxQYXRoKCkuIi9qcyI7DQogICAgICAgICRqc2ZpbGVzID0gYXJyYXkoJ2pxdWVyeS1maWxlLXVwbG9hZC9qcXVlcnkuaWZyYW1lLXRyYW5zcG9ydC5qcycpOw0KICAgICAgICAkanNmaWxlc1tdID0gJ2pxdWVyeS1maWxlLXVwbG9hZC9qcXVlcnkuZmlsZXVwbG9hZC5qcyc7DQogICAgICAgICRqc2ZpbGVzW10gPSAnanF1ZXJ5cm90YXRlL2pRdWVyeVJvdGF0ZS0yLjIubWluLmpzJzsNCiAgICAgICAgJGpzZmlsZXNbXSA9ICdqcmFjL2pxdWVyeS5qcmFjLmpzJzsNCg0KICAgICAgICAkZm10ID0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiVzLyVzIj48L3NjcmlwdD4nOw0KICAgICAgICBmb3JlYWNoKCAkanNmaWxlcyBhcyAkb25lICkgew0KICAgICAgICAgICAgJG91dCAuPSBzcHJpbnRmKCRmbXQsJHVybHBhdGgsJG9uZSkuIlxuIjsNCiAgICAgICAgfQ0KDQogICAgICAgICR1cmxwYXRoID0gJHRoaXMtPkdldE1vZHVsZVVSTFBhdGgoKTsNCiAgICAgICAgJGZtdCA9ICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIlcy8lcyIvPic7DQogICAgICAgICRjc3NmaWxlcyA9IGFycmF5KCdqcy9qcmFjL3N0eWxlLmpyYWMuY3NzJyk7DQogICAgICAgICRjc3NmaWxlc1tdID0gJ2Nzcy9zdHlsZS5jc3MnOw0KICAgICAgICBmb3JlYWNoKCAkY3NzZmlsZXMgYXMgJG9uZSApIHsNCiAgICAgICAgICAgICRvdXQgLj0gc3ByaW50ZigkZm10LCR1cmxwYXRoLCRvbmUpOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICRvdXQ7DQogICAgfQ0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9vdXRwdXRfZnJvbnRlbmRfY3NzKCkNCiAgICB7DQogICAgICAgICRvdXQgPSAnJzsNCiAgICAgICAgJHVybHBhdGggPSAkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpOw0KICAgICAgICAkZm10ID0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IiVzLyVzIi8+JzsNCiAgICAgICAgJGNzc2ZpbGVzID0gYXJyYXkoJ2Nzcy9zdHlsZS5jc3MnKTsNCiAgICAgICAgLy8kY3NzZmlsZXNbXSA9ICdjc3Mvc3R5bGUuY3NzJzsNCiAgICAgICAgZm9yZWFjaCggJGNzc2ZpbGVzIGFzICRvbmUgKSB7DQogICAgICAgICAgICAkb3V0IC49IHNwcmludGYoJGZtdCwkdXJscGF0aCwkb25lKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJG91dDsNCiAgICB9DQoNCiAgICAvKioNCgkgKiBEb0V2ZW50IG1ldGhvZHMNCgkgKi8NCglmdW5jdGlvbiBEb0V2ZW50KCRvcmlnaW5hdG9yLCAkZXZlbnRuYW1lLCAmJHBhcmFtcykgew0KCQlpZiAoJG9yaWdpbmF0b3IgPT0gJ0NvcmUnICYmICRldmVudG5hbWUgPT0gJ0NvbnRlbnRQb3N0UmVuZGVyJykNCgkJew0KCQkJJHBvc190b3AgPSBzdHJpcG9zKCRwYXJhbXNbImNvbnRlbnQiXSwgIjwvaGVhZCIpOw0KCQkJaWYgKCRwb3NfdG9wICE9PSBGQUxTRSAmJiAhZW1wdHkoJHRoaXMtPkZyb250RW5kQ1NTKSkNCgkJCXsNCgkJCQkkcGFyYW1zWyJjb250ZW50Il0gPSBzdWJzdHIoJHBhcmFtc1siY29udGVudCJdLCAwLCAkcG9zX3RvcCkgLiAkdGhpcy0+RnJvbnRFbmRDU1MgLiBzdWJzdHIoJHBhcmFtc1siY29udGVudCJdLCAkcG9zX3RvcCk7DQoJCQl9DQoJCQkkcG9zX2J0bSA9IHN0cnJpcG9zKCRwYXJhbXNbImNvbnRlbnQiXSwgIjwvYm9keSIpOw0KCQkJaWYgKCRwb3NfYnRtICE9PSBGQUxTRSAmJiAhZW1wdHkoJHRoaXMtPkZyb250RW5kSlMpKQ0KCQkJew0KCQkJCSRwYXJhbXNbImNvbnRlbnQiXSA9IHN1YnN0cigkcGFyYW1zWyJjb250ZW50Il0sIDAsICRwb3NfYnRtKSAuICR0aGlzLT5Gcm9udEVuZEpTIC4gc3Vic3RyKCRwYXJhbXNbImNvbnRlbnQiXSwgJHBvc19idG0pOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIEdldEZpbGVJY29uKCRleHRlbnNpb24sJGlzZGlyPWZhbHNlKSB7DQogICAgICAgIGlmIChlbXB0eSgkZXh0ZW5zaW9uKSkgJGV4dGVuc2lvbiA9ICctLS0nOyAvLyBoYXJkY29kZSBleHRlbnNpb24gdG8gc29tZXRoaW5nLg0KICAgICAgICBpZiAoJGV4dGVuc2lvblswXSA9PSAiLiIpICRleHRlbnNpb24gPSBzdWJzdHIoJGV4dGVuc2lvbiwxKTsNCiAgICAgICAgJGNvbmZpZyA9IFxjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsNCiAgICAgICAgJGljb25zaXplPSR0aGlzLT5HZXRQcmVmZXJlbmNlKCJpY29uc2l6ZSIsIjMycHgiKTsNCiAgICAgICAgJGljb25zaXplSGVpZ2h0PXN0cl9yZXBsYWNlKCJweCIsIiIsJGljb25zaXplKTsNCg0KICAgICAgICAkcmVzdWx0PSIiOw0KICAgICAgICBpZiAoJGlzZGlyKSB7DQogICAgICAgICAgICAkcmVzdWx0PSI8aW1nIGhlaWdodD1cIiIuJGljb25zaXplSGVpZ2h0LiJcIiBzdHlsZT1cImJvcmRlcjowO1wiIHNyYz1cIiIuJGNvbmZpZ1sicm9vdF91cmwiXS4iL21vZHVsZXMvRmlsZU1hbmFnZXIvaWNvbnMvdGhlbWVzL2RlZmF1bHQvZXh0ZW5zaW9ucy8iLiRpY29uc2l6ZS4iL2Rpci5wbmdcIiAiLg0KICAgICAgICAgICAgICAgICJhbHQ9XCJkaXJlY3RvcnlcIiAiLg0KICAgICAgICAgICAgICAgICJhbGlnbj1cIm1pZGRsZVwiIC8+IjsNCiAgICAgICAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRjb25maWdbInJvb3RfcGF0aCJdLiIvbW9kdWxlcy9GaWxlTWFuYWdlci9pY29ucy90aGVtZXMvZGVmYXVsdC9leHRlbnNpb25zLyIuJGljb25zaXplLiIvIi5zdHJ0b2xvd2VyKCRleHRlbnNpb24pLiIucG5nIikpIHsNCiAgICAgICAgICAgICRyZXN1bHQ9IjxpbWcgaGVpZ2h0PSciLiRpY29uc2l6ZUhlaWdodC4iJyBzdHlsZT0nYm9yZGVyOjA7JyBzcmM9JyIuJGNvbmZpZ1sicm9vdF91cmwiXS4iL21vZHVsZXMvRmlsZU1hbmFnZXIvaWNvbnMvdGhlbWVzL2RlZmF1bHQvZXh0ZW5zaW9ucy8iLiRpY29uc2l6ZS4iLyIuc3RydG9sb3dlcigkZXh0ZW5zaW9uKS4iLnBuZycgIi4NCiAgICAgICAgICAgICAgICAiYWx0PSciLiRleHRlbnNpb24uIi1maWxlJyAiLg0KICAgICAgICAgICAgICAgICJhbGlnbj0nbWlkZGxlJyAvPiI7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkcmVzdWx0PSI8aW1nIGhlaWdodD0nIi4kaWNvbnNpemVIZWlnaHQuIicgc3R5bGU9J2JvcmRlcjowOycgc3JjPSciLiRjb25maWdbInJvb3RfdXJsIl0uIi9tb2R1bGVzL0ZpbGVNYW5hZ2VyL2ljb25zL3RoZW1lcy9kZWZhdWx0L2V4dGVuc2lvbnMvIi4kaWNvbnNpemUuIi8wLnBuZycgIi4NCiAgICAgICAgICAgICAgICAiYWx0PSIuJGV4dGVuc2lvbi4iLWZpbGUnICIuDQogICAgICAgICAgICAgICAgImFsaWduPSdtaWRkbGUnIC8+IjsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJHJlc3VsdDsNCiAgICB9DQoNCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFnZV90eXBlX2xhbmdfY2FsbGJhY2soJHN0cikNCiAgICB7DQogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FXU1MzJyk7DQogICAgICAgIGlmKCBpc19vYmplY3QoJG1vZCkgKSByZXR1cm4gJG1vZC0+TGFuZygndHlwZV8nLiRzdHIpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGVtcGxhdGVfaGVscF9jYWxsYmFjaygkc3RyKQ0KICAgIHsNCiAgICAgICAgJHN0ciA9IHRyaW0oJHN0cik7DQogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FXU1MzJyk7DQogICAgICAgIGlmKCBpc19vYmplY3QoJG1vZCkgKSB7DQogICAgICAgICAgICAkZmlsZSA9ICRtb2QtPkdldE1vZHVsZVBhdGgoKS4nL2RvYy9oZWxwLmluYyc7DQogICAgICAgICAgICBpZiggaXNfZmlsZSgkZmlsZSkgKSByZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNldF9wYWdlX3R5cGVfZGVmYXVsdHMoQ21zTGF5b3V0VGVtcGxhdGVUeXBlICR0eXBlKQ0KICAgIHsNCiAgICAgICAgaWYoICR0eXBlLT5nZXRfb3JpZ2luYXRvcigpICE9ICdBV1NTMycgKSB0aHJvdyBuZXcgQ21zTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCByZXNldCBjb250ZW50cyBmb3IgdGhpcyB0ZW1wbGF0ZSB0eXBlJyk7DQoNCiAgICAgICAgJGZuID0gbnVsbDsNCiAgICAgICAgc3dpdGNoKCAkdHlwZS0+Z2V0X25hbWUoKSApIHsNCiAgICAgICAgY2FzZSAnc3VtbWFyeSc6DQogICAgICAgICAgICAkZm4gPSAnb3JpZ19zdW1tYXJ5X3RlbXBsYXRlLnRwbCc7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlICdkZXRhaWwnOg0KICAgICAgICAgICAgJGZuID0gJ29yaWdfZGV0YWlsX3RlbXBsYXRlLnRwbCc7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlICdmb3JtJzoNCiAgICAgICAgICAgICRmbiA9ICdvcmlnX2Zvcm1fdGVtcGxhdGUudHBsJzsNCiAgICAgICAgfQ0KDQogICAgICAgICRmbiA9IGNtc19qb2luX3BhdGgoX19ESVJfXywndGVtcGxhdGVzJywkZm4pOw0KICAgICAgICBpZiggZmlsZV9leGlzdHMoJGZuKSApIHJldHVybiBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gQ3JlYXRlU2lnbmVkTGluaygkbmFtZSkNCiAgICB7DQogICAgICAgICRtb2Rfc2RrID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQVdTU0RLJyk7DQogICAgICAgICRiYXNlX3VybCA9IENNU19ST09UX1VSTDsNCiAgICAgICAgJG5hbWUgPSAkbW9kX3Nkay0+ZW5jb2RlZmlsZW5hbWUoJG5hbWUpOw0KICAgICAgICAkb3V0ID0gJGJhc2VfdXJsLiIvUzMvcy8iLiRuYW1lOw0KDQogICAgICAgIHJldHVybiAkb3V0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBDcmVhdGVQcmV0dHlMaW5rKCRwYWdlLCRwcmVmaXgpDQogICAgew0KICAgICAgICAkYmFzZV91cmwgPSBDTVNfUk9PVF9VUkw7DQogICAgICAgICRvdXQgPSAkYmFzZV91cmwuIi9TMy8iLiRwYWdlLiIvIi4kcHJlZml4Ow0KDQogICAgICAgIHJldHVybiAkb3V0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRQcmV0dHlVcmwoJHByZWZpeD1udWxsKQ0KICAgIHsNCiAgICAgICAgJHVzZV9jdXN0b21fdXJsID0gJHRoaXMtPkdldE9wdGlvblZhbHVlKCJ1c2VfY3VzdG9tX3VybCIpOw0KICAgICAgICAkY3VzdG9tX3VybCA9ICR0aGlzLT5HZXRPcHRpb25WYWx1ZSgiY3VzdG9tX3VybCIpOw0KICAgICAgICBpZiggJHVzZV9jdXN0b21fdXJsICYmICRjdXN0b21fdXJsICkgew0KICAgICAgICAgICAgJHVybCA9ICRjdXN0b21fdXJsOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJHVybCA9ICJodHRwczovLyIuJHRoaXMtPkdldE9wdGlvblZhbHVlKCdidWNrZXRfbmFtZScpLiIuczMuIi4kdGhpcy0+R2V0T3B0aW9uVmFsdWUoJ2FjY2Vzc19yZWdpb24nKS4iLmFtYXpvbmF3cy5jb20iOw0KICAgICAgICB9DQogICAgICAgIGlmKGlzc2V0KCRwcmVmaXgpKXsNCiAgICAgICAgICAgIHJldHVybiAkdXJsLicvJy4kcHJlZml4Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICR1cmw7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldENhY2hlRmlsZSgkcXBhcm1zKQ0KICAgIHsNCiAgICAgICAgJGJ1Y2tldF9pZCA9ICRxcGFybXNbJ2J1Y2tldCddOw0KICAgICAgICAkcHJlZml4ID0gJHFwYXJtc1sncHJlZml4J107DQogICAgICAgICRtb2Rfc2RrID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQVdTU0RLJyk7DQogICAgICAgICRjb25maWcgPSBcY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7DQogICAgICAgICRqc29uX2ZpbGVfbmFtZSA9ICdhd3NzM18nLiRtb2Rfc2RrLT5lbmNvZGVmaWxlbmFtZSgkYnVja2V0X2lkLidfJy5zdHJfcmVwbGFjZSgnLycsICdfJywgJHByZWZpeCkpLicuY21zJzsNCiAgICAgICAgJGpzb25fZmlsZV9QYXRoID0gJGNvbmZpZ1sndG1wX2NhY2hlX2xvY2F0aW9uJ10uJy8nLiRqc29uX2ZpbGVfbmFtZTsNCg0KICAgICAgICByZXR1cm4gJGpzb25fZmlsZV9QYXRoOw0KICAgIH0NCg0KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBHZXRPcHRpb25WYWx1ZSgka2V5LCAkZGVmYXVsdCA9ICcnKQ0KICAgIHsNCiAgICAgICAgJHZhbHVlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJGtleSk7DQogICAgICAgIGlmKGlzc2V0KCR2YWx1ZSkgJiYgJHZhbHVlICE9PSAnJykgew0KICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdDsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICB9DQogICAgDQogICAgZmluYWwgcHVibGljIGZ1bmN0aW9uIFNldE9wdGlvblZhbHVlKCRrZXksICR2YWx1ZSkgOiB2b2lkDQogICAgew0KICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJGtleSwkdmFsdWUpOw0KICAgIH0NCg0KICAgIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBHZXRTZXR0aW5nc1ZhbHVlcygpDQogICAgew0KICAgICAgICAkcHJlZml4ID0gJHRoaXMtPkdldE5hbWUoKS4nX21hcGlfcHJlZl8nOw0KICAgICAgICAkbGlzdCA9IGNtc19zaXRlcHJlZnM6Omxpc3RfYnlfcHJlZml4KCRwcmVmaXgpOw0KICAgICAgICBpZiggISRsaXN0IHx8ICFjb3VudCgkbGlzdCkgKSByZXR1cm4gW107DQogICAgICAgICRvdXQgPSBbXTsNCiAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJHByZWZuYW1lICkgew0KICAgICAgICAgICAgJHRtcCA9IGNtc19zaXRlcHJlZnM6OmdldCgkcHJlZm5hbWUpOw0KICAgICAgICAgICAgaWYoICEkdG1wICkgY29udGludWU7DQogICAgICAgICAgICAkb3V0W3N1YnN0cigkcHJlZm5hbWUsIHN0cmxlbigkcHJlZml4KSldID0gJHRtcDsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKCBjb3VudCgkb3V0KSApIHJldHVybiAkb3V0Ow0KDQogICAgfQ0KDQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/css/style.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnVpLWRpYWxvZyB1bCB7DQogICAgbWFyZ2luLXRvcDogMjBweDsNCn0NCg0KLnVpLXdpZGdldC1jb250ZW50IGEgew0KICAgICBjb2xvcjogIzE0N2ZkYiFpbXBvcnRhbnQ7DQogICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIWltcG9ydGFudDsNCn0NCg0KDQpjb2RlLnVzZXJpbnB1dCB7DQogICAgY29sb3I6ICMxZDgxMDI7DQogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1sYXlvdXQtbWFpbi10ZDg1M2EsI2YyZjNmMyk7DQogICAgYm9yZGVyLXJhZGl1czogMnB4Ow0KICAgIHBhZGRpbmc6IDAgM3B4Ow0KICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgZm9udC1zaXplOiAxZW07DQp9DQouYWxlcnQgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW07DQogICAgbWFyZ2luLWJvdHRvbTogMXJlbTsNCiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICBib3JkZXItcmFkaXVzOiAwLjI1cmVtOw0KfQ0KLmFsZXJ0LXByaW1hcnkgew0KICAgIGNvbG9yOiAjMDA0MDg1Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2U1ZmY7DQogICAgYm9yZGVyLWNvbG9yOiAjYjhkYWZmOw0KfQ0KLmFsZXJ0LXNlY29uZGFyeSB7DQogICAgY29sb3I6ICMzODNkNDE7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTNlNTsNCiAgICBib3JkZXItY29sb3I6ICNkNmQ4ZGI7DQp9DQouYWxlcnQtc3VjY2VzcyB7DQogICAgY29sb3I6ICMxNTU3MjQ7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2Q0ZWRkYTsNCiAgICBib3JkZXItY29sb3I6ICNjM2U2Y2I7DQp9DQouYWxlcnQtZGFuZ2VyIHsNCiAgICBjb2xvcjogIzcyMWMyNDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhkN2RhOw0KICAgIGJvcmRlci1jb2xvcjogI2Y1YzZjYjsNCn0NCi5hbGVydC13YXJuaW5nIHsNCiAgICBjb2xvcjogIzg1NjQwNDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmM2NkOw0KICAgIGJvcmRlci1jb2xvcjogI2ZmZWViYTsNCn0NCi5hbGVydC1pbmZvIHsNCiAgICBjb2xvcjogIzBjNTQ2MDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDFlY2YxOw0KICAgIGJvcmRlci1jb2xvcjogI2JlZTVlYjsNCn0NCi5tZXNzYWdlIHAgew0KICAgIG1hcmdpbi10b3A6IDAuNXJlbTsNCiAgICBtYXJnaW4tYm90dG9tOiAwLjVyZW07DQp9DQouYmQtcGxhY2Vob2xkZXItaW1nIHsNCiAgICBmb250LXNpemU6IDEuMTI1cmVtOw0KICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7DQogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOw0KICAgIHVzZXItc2VsZWN0OiBub25lOw0KfQ0KDQoudXBsb2FkLXdyYXBwZXIgeyBtYXJnaW46IDEwcHggMCB9DQouaGNlbnRlcmVkIHsgdGV4dC1hbGlnbjogY2VudGVyIH0NCi52Y2VudGVyZWQgew0KICBkaXNwbGF5OiB0YWJsZS1jZWxsOw0KICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KfQ0KI2Ryb3B6b25lIHsNCiAgIG1hcmdpbjogMTVweCAwOw0KICAgYm9yZGVyLXJhZGl1czogNHB4Ow0KIGJhY2tncm91bmQ6ICNFRUVFRUU7DQogIH0NCiNkcm9wem9uZS5pbiB7DQogIHdpZHRoOiA2MDBweDsNCiAgaGVpZ2h0OiAyMDBweDsNCiAgbGluZS1oZWlnaHQ6IDIwMHB4Ow0KICBiYWNrZ3JvdW5kOiAjMTQ3ZmRiOw0KICBib3JkZXI6IDJweCBkYXNoZWQgI2ZmZjsNCiAgY29sb3I6ICNmZmY7DQogIGZvbnQtc2l6ZTogbGFyZ2VyOw0KICBjdXJzb3I6IG1vdmU7DQp9DQojZHJvcHpvbmUuZmFkZSB7DQogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7DQogIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7DQogIC1tcy10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsNCiAgLW8tdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZS1vdXQ7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0Ow0KICBvcGFjaXR5OiAxOw0KfQ0KI3Byb2dyZXNzYXJlYSB7DQogIG1hcmdpbjogMTVweDsNCiAgaGVpZ2h0OiAyZW07DQogIGxpbmUtaGVpZ2h0OiAyZW07DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsNCiAgYm9yZGVyLXJhZGl1czogNHB4Ow0KICBkaXNwbGF5OiBub25lOw0KfQ0KI25hdkJ1dHRvbnMgew0KICAgIHBhZGRpbmc6MC4zNWVtIDAuNjI1ZW0gMC4zNWVtOw0KfQ==]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPg0KICA8bGk+VkVSU0lPTjogMS4wIERBVEVEOiAyMC1KVU5FLTIwMjMNCiAgICA8cD5GaXJzdCB2ZXJzaW9uIG9mIHRoZSBwbHVnaW4uPC9wPg0KICA8L2xpPg0KPC91bD4NCg==]]></data>
	</file>
	<file>
	  <filename>/doc/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgaXMgdGhpcz88L2gzPg0KPGgzPkhvdyBkbyBJIHVzZSBpdD88L2gzPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPGgzPkludGVyZXN0ZWQgaW4gZGV2ZWxvcG1lbnQ/PC9oMz4NCjxwPjxhIGhyZWY9Imh0dHBzOi8vcGx1Z2lucy50cmFjLndvcmRwcmVzcy5vcmcvYnJvd3Nlci93cC1zMy8iPkJyb3dzZSB0aGUgY29kZTwvYT4sIGNoZWNrIG91dCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9wbHVnaW5zLnN2bi53b3JkcHJlc3Mub3JnL3dwLXMzLyI+U1ZOIHJlcG9zaXRvcnk8L2E+LCBvciBzdWJzY3JpYmUgdG8gdGhlIDxhIGhyZWY9Imh0dHBzOi8vcGx1Z2lucy50cmFjLndvcmRwcmVzcy5vcmcvbG9nL3dwLXMzLyI+ZGV2ZWxvcG1lbnQgbG9nPC9hPiBieSA8YSBocmVmPSJodHRwczovL3BsdWdpbnMudHJhYy53b3JkcHJlc3Mub3JnL2xvZy93cC1zMy8/bGltaXQ9MTAwJmFtcDttb2RlPXN0b3Bfb25fY29weSZhbXA7Zm9ybWF0PXJzcyI+UlNTPC9hPi48L3A+DQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAyMywgTWFnYWwgSGV6aSA8YSBocmVmPSJtYWlsdG86aF9tYWdhbEBob3RtYWlsLmNvbSI+Jmx0O2hfbWFnYWxAaG90bWFpbC5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCml0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+DQo8cD5Ib3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQ0KaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUw0KTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4NCjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQpZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQpPciByZWFkIGl0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+b25saW5lPC9hPjwvcD4NCg==]]></data>
	</file>
	<file>
	  <filename>/files.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyJmaWxlcyI6IFsNCiAgICB7DQogICAgICAibmFtZSI6ICJwaWN0dXJlMS5qcGciLA0KICAgICAgInNpemUiOiA5MDI2MDQsDQogICAgICAidXJsIjogImh0dHA6XC9cL2V4YW1wbGUub3JnXC9maWxlc1wvcGljdHVyZTEuanBnIiwNCiAgICAgICJ0aHVtYm5haWxVcmwiOiAiaHR0cDpcL1wvZXhhbXBsZS5vcmdcL2ZpbGVzXC90aHVtYm5haWxcL3BpY3R1cmUxLmpwZyIsDQogICAgICAiZGVsZXRlVXJsIjogImh0dHA6XC9cL2V4YW1wbGUub3JnXC9maWxlc1wvcGljdHVyZTEuanBnIiwNCiAgICAgICJkZWxldGVUeXBlIjogIkRFTEVURSINCiAgICB9LA0KICAgIHsNCiAgICAgICJuYW1lIjogInBpY3R1cmUyLmpwZyIsDQogICAgICAic2l6ZSI6IDg0MTk0NiwNCiAgICAgICJ1cmwiOiAiaHR0cDpcL1wvZXhhbXBsZS5vcmdcL2ZpbGVzXC9waWN0dXJlMi5qcGciLA0KICAgICAgInRodW1ibmFpbFVybCI6ICJodHRwOlwvXC9leGFtcGxlLm9yZ1wvZmlsZXNcL3RodW1ibmFpbFwvcGljdHVyZTIuanBnIiwNCiAgICAgICJkZWxldGVVcmwiOiAiaHR0cDpcL1wvZXhhbXBsZS5vcmdcL2ZpbGVzXC9waWN0dXJlMi5qcGciLA0KICAgICAgImRlbGV0ZVR5cGUiOiAiREVMRVRFIg0KICAgIH0sDQogICAgew0KICAgICAgICAibmFtZSI6ICJwaWN0dXJlMzMuanBnIiwNCiAgICAgICAgInNpemUiOiA5MDI2MDQsDQogICAgICAgICJlcnJvciI6ICJGaWxldHlwZSBub3QgYWxsb3dlZCINCiAgICAgIH0sDQogICAgICB7DQogICAgICAgICJuYW1lIjogInBpY3R1cmU0My5qcGciLA0KICAgICAgICAic2l6ZSI6IDg0MTk0NiwNCiAgICAgICAgImVycm9yIjogIkZpbGV0eXBlIG5vdCBhbGxvd2VkIg0KICAgICAgfQ0KICBdfQ==]]></data>
	</file>
	<file>
	  <filename>/function.admin_permissions_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzOjpNQU5BR0VfUEVSTSkgKSByZXR1cm47DQoNCiR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSggJHRoaXMtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ2FkbWluX3Blcm1pc3Npb25zX3RhYi50cGwnKSwgbnVsbCwgbnVsbCwgJHNtYXJ0eSApOw0KJGJ1Y2tldF9wb2xpY3kgPSBhd3NfczNfdXRpbHM6OmdldF9pYW1fcG9saWN5KCk7DQokc21hcnR5LT5hc3NpZ24oJ2J1Y2tldF9wb2xpY3knLCRidWNrZXRfcG9saWN5KTsNCg0KJHRwbC0+ZGlzcGxheSgpOw0KDQoNCg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_settings_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KDQppZiggIWRlZmluZWQoJ0NNU19WRVJTSU9OJykgKSBleGl0Ow0KaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCR0aGlzOjpNQU5BR0VfUEVSTSkgKSByZXR1cm47DQoNCiRzZGtfbW9kID0gJHNka191dGlsczo6Z2V0X21vZCgpOw0KJGVycm9yID0gMDsNCiRyZWFkeSA9IDA7DQoNCmlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgKSB7DQoNCiAgICAkc2V0dGluZ3NfaW5wdXQgPSAkcGFyYW1zWydzZXR0aW5nc19pbnB1dCddOw0KICAgIGlmKGNvdW50KCRzZXR0aW5nc19pbnB1dCkgPiAwKQ0KICAgIHsNCiAgICAgICAgZm9yZWFjaCgkc2V0dGluZ3NfaW5wdXQgYXMgJGtleSA9PiAkdmFsdWUpIA0KICAgICAgICB7DQogICAgICAgICAgICAkdGhpcy0+U2V0T3B0aW9uVmFsdWUoJGtleSwgJHZhbHVlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGlmKCRyZWFkeSl7DQogICAgICAgICR0aGlzLT5SZWRpcmVjdFRvQWRtaW5UYWIoJHBhcmFtc1snYnVja2V0X25hbWUnXSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignc2V0dGluZ3MnKTsNCiAgICB9DQp9DQoNCg0KDQokY29udGVudF9vcHMgICAgICAgICA9IGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCk7DQokYXdzcmVnaW9ubmFtZXMgICAgICA9ICRzZGtfbW9kLT5nZXRfcmVnaW9uc19vcHRpb25zKCk7DQoNCiR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSggJHRoaXMtPkdldFRlbXBsYXRlUmVzb3VyY2UoJ2FkbWluX3NldHRpbmdzX3RhYi50cGwnKSwgbnVsbCwgbnVsbCwgJHNtYXJ0eSApOw0KJHRwbC0+YXNzaWduKCdhY2Nlc3NfcmVnaW9uX2xpc3QnLCRhd3NyZWdpb25uYW1lcyk7DQokdHBsLT5hc3NpZ24oJ21lc3NhZ2UnLCRtZXNzYWdlKTsNCiR0cGwtPmFzc2lnbignZXJyb3InLCRlcnJvcik7DQokdHBsLT5hc3NpZ24oJ3Nka19tb2QnLCRzZGtfbW9kKTsNCg0KLy8gTW9kdWxlIGRlZmF1bHRzDQokdHBsLT5hc3NpZ24oJ2lucHV0X2RldGFpbHBhZ2UnLCAkY29udGVudF9vcHMtPkNyZWF0ZUhpZXJhcmNoeURyb3Bkb3duKCcnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGV0YWlscGFnZScpLCAkaWQuJ3NldHRpbmdzX2lucHV0W2RldGFpbHBhZ2VdJykpOw0KJHRwbC0+YXNzaWduKCdpbnB1dF9zdW1tYXJ5cGFnZScsICRjb250ZW50X29wcy0+Q3JlYXRlSGllcmFyY2h5RHJvcGRvd24oJycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzdW1tYXJ5cGFnZScpLCAkaWQuJ3NldHRpbmdzX2lucHV0W3N1bW1hcnlwYWdlXScpKTsNCg0KJHRwbC0+ZGlzcGxheSgpOw0KDQoNCg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/jquery.fileupload.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIGpRdWVyeSBGaWxlIFVwbG9hZCBQbHVnaW4gNS4zMS42DQogKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQNCiAqDQogKiBDb3B5cmlnaHQgMjAxMCwgU2ViYXN0aWFuIFRzY2hhbg0KICogaHR0cHM6Ly9ibHVlaW1wLm5ldA0KICoNCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZToNCiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUDQogKi8NCg0KLypqc2xpbnQgbm9tZW46IHRydWUsIHVucGFyYW06IHRydWUsIHJlZ2V4cDogdHJ1ZSAqLw0KLypnbG9iYWwgZGVmaW5lLCB3aW5kb3csIGRvY3VtZW50LCBsb2NhdGlvbiwgRmlsZSwgQmxvYiwgRm9ybURhdGEgKi8NCg0KKGZ1bmN0aW9uIChmYWN0b3J5KSB7DQogICAgJ3VzZSBzdHJpY3QnOw0KICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHsNCiAgICAgICAgLy8gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIEFNRCBtb2R1bGU6DQogICAgICAgIGRlZmluZShbDQogICAgICAgICAgICAnanF1ZXJ5JywNCiAgICAgICAgICAgICdqcXVlcnkudWkud2lkZ2V0Jw0KICAgICAgICBdLCBmYWN0b3J5KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHM6DQogICAgICAgIGZhY3Rvcnkod2luZG93LmpRdWVyeSk7DQogICAgfQ0KfShmdW5jdGlvbiAoJCkgew0KICAgICd1c2Ugc3RyaWN0JzsNCg0KICAgIC8vIFRoZSBGaWxlUmVhZGVyIEFQSSBpcyBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IHdvcmtzIGFzIGZlYXR1cmUgZGV0ZWN0aW9uLA0KICAgIC8vIGFzIGUuZy4gU2FmYXJpIHN1cHBvcnRzIFhIUiBmaWxlIHVwbG9hZHMgdmlhIHRoZSBGb3JtRGF0YSBBUEksDQogICAgLy8gYnV0IG5vdCBub24tbXVsdGlwYXJ0IFhIUiBmaWxlIHVwbG9hZHM6DQogICAgJC5zdXBwb3J0LnhockZpbGVVcGxvYWQgPSAhISh3aW5kb3cuWE1MSHR0cFJlcXVlc3RVcGxvYWQgJiYgd2luZG93LkZpbGVSZWFkZXIpOw0KICAgICQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQgPSAhIXdpbmRvdy5Gb3JtRGF0YTsNCg0KICAgIC8vIERldGVjdCBzdXBwb3J0IGZvciBCbG9iIHNsaWNpbmcgKHJlcXVpcmVkIGZvciBjaHVua2VkIHVwbG9hZHMpOg0KICAgICQuc3VwcG9ydC5ibG9iU2xpY2UgPSB3aW5kb3cuQmxvYiAmJiAoQmxvYi5wcm90b3R5cGUuc2xpY2UgfHwNCiAgICAgICAgQmxvYi5wcm90b3R5cGUud2Via2l0U2xpY2UgfHwgQmxvYi5wcm90b3R5cGUubW96U2xpY2UpOw0KDQogICAgLy8gVGhlIGZpbGV1cGxvYWQgd2lkZ2V0IGxpc3RlbnMgZm9yIGNoYW5nZSBldmVudHMgb24gZmlsZSBpbnB1dCBmaWVsZHMgZGVmaW5lZA0KICAgIC8vIHZpYSBmaWxlSW5wdXQgc2V0dGluZyBhbmQgcGFzdGUgb3IgZHJvcCBldmVudHMgb2YgdGhlIGdpdmVuIGRyb3Bab25lLg0KICAgIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IGpRdWVyeSBXaWRnZXQgbWV0aG9kcywgdGhlIGZpbGV1cGxvYWQgd2lkZ2V0DQogICAgLy8gZXhwb3NlcyB0aGUgImFkZCIgYW5kICJzZW5kIiBtZXRob2RzLCB0byBhZGQgb3IgZGlyZWN0bHkgc2VuZCBmaWxlcyB1c2luZw0KICAgIC8vIHRoZSBmaWxldXBsb2FkIEFQSS4NCiAgICAvLyBCeSBkZWZhdWx0LCBmaWxlcyBhZGRlZCB2aWEgZmlsZSBpbnB1dCBzZWxlY3Rpb24sIHBhc3RlLCBkcmFnICYgZHJvcCBvcg0KICAgIC8vICJhZGQiIG1ldGhvZCBhcmUgdXBsb2FkZWQgaW1tZWRpYXRlbHksIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byBvdmVycmlkZQ0KICAgIC8vIHRoZSAiYWRkIiBjYWxsYmFjayBvcHRpb24gdG8gcXVldWUgZmlsZSB1cGxvYWRzLg0KICAgICQud2lkZ2V0KCdibHVlaW1wLmZpbGV1cGxvYWQnLCB7DQoNCiAgICAgICAgb3B0aW9uczogew0KICAgICAgICAgICAgLy8gVGhlIGRyb3AgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHRoZSBjb21wbGV0ZSBkb2N1bWVudC4NCiAgICAgICAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgZHJhZyAmIGRyb3Agc3VwcG9ydDoNCiAgICAgICAgICAgIGRyb3Bab25lOiAkKGRvY3VtZW50KSwNCiAgICAgICAgICAgIC8vIFRoZSBwYXN0ZSB0YXJnZXQgZWxlbWVudChzKSwgYnkgdGhlIGRlZmF1bHQgdGhlIGNvbXBsZXRlIGRvY3VtZW50Lg0KICAgICAgICAgICAgLy8gU2V0IHRvIG51bGwgdG8gZGlzYWJsZSBwYXN0ZSBzdXBwb3J0Og0KICAgICAgICAgICAgcGFzdGVab25lOiAkKGRvY3VtZW50KSwNCiAgICAgICAgICAgIC8vIFRoZSBmaWxlIGlucHV0IGZpZWxkKHMpLCB0aGF0IGFyZSBsaXN0ZW5lZCB0byBmb3IgY2hhbmdlIGV2ZW50cy4NCiAgICAgICAgICAgIC8vIElmIHVuZGVmaW5lZCwgaXQgaXMgc2V0IHRvIHRoZSBmaWxlIGlucHV0IGZpZWxkcyBpbnNpZGUNCiAgICAgICAgICAgIC8vIG9mIHRoZSB3aWRnZXQgZWxlbWVudCBvbiBwbHVnaW4gaW5pdGlhbGl6YXRpb24uDQogICAgICAgICAgICAvLyBTZXQgdG8gbnVsbCB0byBkaXNhYmxlIHRoZSBjaGFuZ2UgbGlzdGVuZXIuDQogICAgICAgICAgICBmaWxlSW5wdXQ6IHVuZGVmaW5lZCwNCiAgICAgICAgICAgIC8vIEJ5IGRlZmF1bHQsIHRoZSBmaWxlIGlucHV0IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggYSBjbG9uZSBhZnRlcg0KICAgICAgICAgICAgLy8gZWFjaCBpbnB1dCBmaWVsZCBjaGFuZ2UgZXZlbnQuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGlmcmFtZSB0cmFuc3BvcnQNCiAgICAgICAgICAgIC8vIHF1ZXVlcyBhbmQgYWxsb3dzIGNoYW5nZSBldmVudHMgdG8gYmUgZmlyZWQgZm9yIHRoZSBzYW1lIGZpbGUNCiAgICAgICAgICAgIC8vIHNlbGVjdGlvbiwgYnV0IGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGZhbHNlOg0KICAgICAgICAgICAgcmVwbGFjZUZpbGVJbnB1dDogdHJ1ZSwNCiAgICAgICAgICAgIC8vIFRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGZpbGUgZm9ybSBkYXRhICh0aGUgcmVxdWVzdCBhcmd1bWVudCBuYW1lKS4NCiAgICAgICAgICAgIC8vIElmIHVuZGVmaW5lZCBvciBlbXB0eSwgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQgaXMNCiAgICAgICAgICAgIC8vIHVzZWQsIG9yICJmaWxlc1tdIiBpZiB0aGUgZmlsZSBpbnB1dCBuYW1lIHByb3BlcnR5IGlzIGFsc28gZW1wdHksDQogICAgICAgICAgICAvLyBjYW4gYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nczoNCiAgICAgICAgICAgIHBhcmFtTmFtZTogdW5kZWZpbmVkLA0KICAgICAgICAgICAgLy8gQnkgZGVmYXVsdCwgZWFjaCBmaWxlIG9mIGEgc2VsZWN0aW9uIGlzIHVwbG9hZGVkIHVzaW5nIGFuIGluZGl2aWR1YWwNCiAgICAgICAgICAgIC8vIHJlcXVlc3QgZm9yIFhIUiB0eXBlIHVwbG9hZHMuIFNldCB0byBmYWxzZSB0byB1cGxvYWQgZmlsZQ0KICAgICAgICAgICAgLy8gc2VsZWN0aW9ucyBpbiBvbmUgcmVxdWVzdCBlYWNoOg0KICAgICAgICAgICAgc2luZ2xlRmlsZVVwbG9hZHM6IHRydWUsDQogICAgICAgICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGZpbGVzIHVwbG9hZGVkIHdpdGggb25lIFhIUiByZXF1ZXN0LA0KICAgICAgICAgICAgLy8gc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDA6DQogICAgICAgICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZHM6IHVuZGVmaW5lZCwNCiAgICAgICAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0cnVlIHRvIGlzc3VlIGFsbCBmaWxlIHVwbG9hZCByZXF1ZXN0cw0KICAgICAgICAgICAgLy8gaW4gYSBzZXF1ZW50aWFsIG9yZGVyOg0KICAgICAgICAgICAgc2VxdWVudGlhbFVwbG9hZHM6IGZhbHNlLA0KICAgICAgICAgICAgLy8gVG8gbGltaXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHVwbG9hZHMsDQogICAgICAgICAgICAvLyBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMDoNCiAgICAgICAgICAgIGxpbWl0Q29uY3VycmVudFVwbG9hZHM6IHVuZGVmaW5lZCwNCiAgICAgICAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0cnVlIHRvIGZvcmNlIGlmcmFtZSB0cmFuc3BvcnQgdXBsb2FkczoNCiAgICAgICAgICAgIGZvcmNlSWZyYW1lVHJhbnNwb3J0OiBmYWxzZSwNCiAgICAgICAgICAgIC8vIFNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byB0aGUgbG9jYXRpb24gb2YgYSByZWRpcmVjdCB1cmwgb24gdGhlDQogICAgICAgICAgICAvLyBvcmlnaW4gc2VydmVyLCBmb3IgY3Jvc3MtZG9tYWluIGlmcmFtZSB0cmFuc3BvcnQgdXBsb2FkczoNCiAgICAgICAgICAgIHJlZGlyZWN0OiB1bmRlZmluZWQsDQogICAgICAgICAgICAvLyBUaGUgcGFyYW1ldGVyIG5hbWUgZm9yIHRoZSByZWRpcmVjdCB1cmwsIHNlbnQgYXMgcGFydCBvZiB0aGUgZm9ybQ0KICAgICAgICAgICAgLy8gZGF0YSBhbmQgc2V0IHRvICdyZWRpcmVjdCcgaWYgdGhpcyBvcHRpb24gaXMgZW1wdHk6DQogICAgICAgICAgICByZWRpcmVjdFBhcmFtTmFtZTogdW5kZWZpbmVkLA0KICAgICAgICAgICAgLy8gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIHRoZSBsb2NhdGlvbiBvZiBhIHBvc3RNZXNzYWdlIHdpbmRvdywNCiAgICAgICAgICAgIC8vIHRvIGVuYWJsZSBwb3N0TWVzc2FnZSB0cmFuc3BvcnQgdXBsb2FkczoNCiAgICAgICAgICAgIHBvc3RNZXNzYWdlOiB1bmRlZmluZWQsDQogICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBYSFIgZmlsZSB1cGxvYWRzIGFyZSBzZW50IGFzIG11bHRpcGFydC9mb3JtLWRhdGEuDQogICAgICAgICAgICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBpcyBhbHdheXMgdXNpbmcgbXVsdGlwYXJ0L2Zvcm0tZGF0YS4NCiAgICAgICAgICAgIC8vIFNldCB0byBmYWxzZSB0byBlbmFibGUgbm9uLW11bHRpcGFydCBYSFIgdXBsb2FkczoNCiAgICAgICAgICAgIG11bHRpcGFydDogdHJ1ZSwNCiAgICAgICAgICAgIC8vIFRvIHVwbG9hZCBsYXJnZSBmaWxlcyBpbiBzbWFsbGVyIGNodW5rcywgc2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uDQogICAgICAgICAgICAvLyB0byBhIHByZWZlcnJlZCBtYXhpbXVtIGNodW5rIHNpemUuIElmIHNldCB0byAwLCBudWxsIG9yIHVuZGVmaW5lZCwNCiAgICAgICAgICAgIC8vIG9yIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIEJsb2IgQVBJLCBmaWxlcyB3aWxsDQogICAgICAgICAgICAvLyBiZSB1cGxvYWRlZCBhcyBhIHdob2xlLg0KICAgICAgICAgICAgbWF4Q2h1bmtTaXplOiB1bmRlZmluZWQsDQogICAgICAgICAgICAvLyBXaGVuIGEgbm9uLW11bHRpcGFydCB1cGxvYWQgb3IgYSBjaHVua2VkIG11bHRpcGFydCB1cGxvYWQgaGFzIGJlZW4NCiAgICAgICAgICAgIC8vIGFib3J0ZWQsIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlc3VtZSB0aGUgdXBsb2FkIGJ5IHNldHRpbmcNCiAgICAgICAgICAgIC8vIGl0IHRvIHRoZSBzaXplIG9mIHRoZSBhbHJlYWR5IHVwbG9hZGVkIGJ5dGVzLiBUaGlzIG9wdGlvbiBpcyBtb3N0DQogICAgICAgICAgICAvLyB1c2VmdWwgd2hlbiBtb2RpZnlpbmcgdGhlIG9wdGlvbnMgb2JqZWN0IGluc2lkZSBvZiB0aGUgImFkZCIgb3INCiAgICAgICAgICAgIC8vICJzZW5kIiBjYWxsYmFja3MsIGFzIHRoZSBvcHRpb25zIGFyZSBjbG9uZWQgZm9yIGVhY2ggZmlsZSB1cGxvYWQuDQogICAgICAgICAgICB1cGxvYWRlZEJ5dGVzOiB1bmRlZmluZWQsDQogICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSBmaWxlIHVwbG9hZHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUNCiAgICAgICAgICAgIC8vIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbi4gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGZhbHNlIHRvDQogICAgICAgICAgICAvLyBwcmV2ZW50IHJlY2FsY3VsYXRpbmcgdGhlIGdsb2JhbCBwcm9ncmVzcyBkYXRhOg0KICAgICAgICAgICAgcmVjYWxjdWxhdGVQcm9ncmVzczogdHJ1ZSwNCiAgICAgICAgICAgIC8vIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyB0byBjYWxjdWxhdGUgYW5kIHRyaWdnZXIgcHJvZ3Jlc3MgZXZlbnRzOg0KICAgICAgICAgICAgcHJvZ3Jlc3NJbnRlcnZhbDogMTAwLA0KICAgICAgICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBwcm9ncmVzcyBiaXRyYXRlOg0KICAgICAgICAgICAgYml0cmF0ZUludGVydmFsOiA1MDAsDQogICAgICAgICAgICAvLyBCeSBkZWZhdWx0LCB1cGxvYWRzIGFyZSBzdGFydGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhZGRpbmcgZmlsZXM6DQogICAgICAgICAgICBhdXRvVXBsb2FkOiB0cnVlLA0KDQogICAgICAgICAgICAvLyBFcnJvciBhbmQgaW5mbyBtZXNzYWdlczoNCiAgICAgICAgICAgIG1lc3NhZ2VzOiB7DQogICAgICAgICAgICAgICAgdXBsb2FkZWRCeXRlczogJ1VwbG9hZGVkIGJ5dGVzIGV4Y2VlZCBmaWxlIHNpemUnDQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvbiwgZ2V0cyB0aGUgbWVzc2FnZSBrZXkgdG8gYmUgdHJhbnNsYXRlZA0KICAgICAgICAgICAgLy8gYW5kIGFuIG9iamVjdCB3aXRoIGNvbnRleHQgc3BlY2lmaWMgZGF0YSBhcyBhcmd1bWVudHM6DQogICAgICAgICAgICBpMThuOiBmdW5jdGlvbiAobWVzc2FnZSwgY29udGV4dCkgew0KICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzW21lc3NhZ2VdIHx8IG1lc3NhZ2UudG9TdHJpbmcoKTsNCiAgICAgICAgICAgICAgICBpZiAoY29udGV4dCkgew0KICAgICAgICAgICAgICAgICAgICAkLmVhY2goY29udGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoJ3snICsga2V5ICsgJ30nLCB2YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZTsNCiAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgIC8vIEFkZGl0aW9uYWwgZm9ybSBkYXRhIHRvIGJlIHNlbnQgYWxvbmcgd2l0aCB0aGUgZmlsZSB1cGxvYWRzIGNhbiBiZSBzZXQNCiAgICAgICAgICAgIC8vIHVzaW5nIHRoaXMgb3B0aW9uLCB3aGljaCBhY2NlcHRzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZA0KICAgICAgICAgICAgLy8gdmFsdWUgcHJvcGVydGllcywgYSBmdW5jdGlvbiByZXR1cm5pbmcgc3VjaCBhbiBhcnJheSwgYSBGb3JtRGF0YQ0KICAgICAgICAgICAgLy8gb2JqZWN0IChmb3IgWEhSIGZpbGUgdXBsb2FkcyksIG9yIGEgc2ltcGxlIG9iamVjdC4NCiAgICAgICAgICAgIC8vIFRoZSBmb3JtIG9mIHRoZSBmaXJzdCBmaWxlSW5wdXQgaXMgZ2l2ZW4gYXMgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbjoNCiAgICAgICAgICAgIGZvcm1EYXRhOiBmdW5jdGlvbiAoZm9ybSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmb3JtLnNlcmlhbGl6ZUFycmF5KCk7DQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvLyBUaGUgYWRkIGNhbGxiYWNrIGlzIGludm9rZWQgYXMgc29vbiBhcyBmaWxlcyBhcmUgYWRkZWQgdG8gdGhlIGZpbGV1cGxvYWQNCiAgICAgICAgICAgIC8vIHdpZGdldCAodmlhIGZpbGUgaW5wdXQgc2VsZWN0aW9uLCBkcmFnICYgZHJvcCwgcGFzdGUgb3IgYWRkIEFQSSBjYWxsKS4NCiAgICAgICAgICAgIC8vIElmIHRoZSBzaW5nbGVGaWxlVXBsb2FkcyBvcHRpb24gaXMgZW5hYmxlZCwgdGhpcyBjYWxsYmFjayB3aWxsIGJlDQogICAgICAgICAgICAvLyBjYWxsZWQgb25jZSBmb3IgZWFjaCBmaWxlIGluIHRoZSBzZWxlY3Rpb24gZm9yIFhIUiBmaWxlIHVwbG9hZHMsIGVsc2UNCiAgICAgICAgICAgIC8vIG9uY2UgZm9yIGVhY2ggZmlsZSBzZWxlY3Rpb24uDQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgLy8gVGhlIHVwbG9hZCBzdGFydHMgd2hlbiB0aGUgc3VibWl0IG1ldGhvZCBpcyBpbnZva2VkIG9uIHRoZSBkYXRhIHBhcmFtZXRlci4NCiAgICAgICAgICAgIC8vIFRoZSBkYXRhIG9iamVjdCBjb250YWlucyBhIGZpbGVzIHByb3BlcnR5IGhvbGRpbmcgdGhlIGFkZGVkIGZpbGVzDQogICAgICAgICAgICAvLyBhbmQgYWxsb3dzIHlvdSB0byBvdmVycmlkZSBwbHVnaW4gb3B0aW9ucyBhcyB3ZWxsIGFzIGRlZmluZSBhamF4IHNldHRpbmdzLg0KICAgICAgICAgICAgLy8NCiAgICAgICAgICAgIC8vIExpc3RlbmVycyBmb3IgdGhpcyBjYWxsYmFjayBjYW4gYWxzbyBiZSBib3VuZCB0aGUgZm9sbG93aW5nIHdheToNCiAgICAgICAgICAgIC8vIC5iaW5kKCdmaWxldXBsb2FkYWRkJywgZnVuYyk7DQogICAgICAgICAgICAvLw0KICAgICAgICAgICAgLy8gZGF0YS5zdWJtaXQoKSByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgYW5kIGFsbG93cyB0byBhdHRhY2ggYWRkaXRpb25hbA0KICAgICAgICAgICAgLy8gaGFuZGxlcnMgdXNpbmcgalF1ZXJ5J3MgRGVmZXJyZWQgY2FsbGJhY2tzOg0KICAgICAgICAgICAgLy8gZGF0YS5zdWJtaXQoKS5kb25lKGZ1bmMpLmZhaWwoZnVuYykuYWx3YXlzKGZ1bmMpOw0KICAgICAgICAgICAgYWRkOiBmdW5jdGlvbiAoZSwgZGF0YSkgew0KICAgICAgICAgICAgICAgIGlmIChkYXRhLmF1dG9VcGxvYWQgfHwgKGRhdGEuYXV0b1VwbG9hZCAhPT0gZmFsc2UgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmlsZXVwbG9hZCgnb3B0aW9uJywgJ2F1dG9VcGxvYWQnKSkpIHsNCiAgICAgICAgICAgICAgICAgICAgZGF0YS5wcm9jZXNzKCkuZG9uZShmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN1Ym1pdCgpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAvLyBPdGhlciBjYWxsYmFja3M6DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3VibWl0IGV2ZW50IG9mIGVhY2ggZmlsZSB1cGxvYWQ6DQogICAgICAgICAgICAvLyBzdWJtaXQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRzdWJtaXQnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHRoZSBzdGFydCBvZiBlYWNoIGZpbGUgdXBsb2FkIHJlcXVlc3Q6DQogICAgICAgICAgICAvLyBzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2Fkc2VuZCcsIGZ1bmMpOw0KDQogICAgICAgICAgICAvLyBDYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCB1cGxvYWRzOg0KICAgICAgICAgICAgLy8gZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRvbmUnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIHVwbG9hZHM6DQogICAgICAgICAgICAvLyBmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkZmFpbCcsIGZ1bmMpOw0KDQogICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgcmVxdWVzdHM6DQogICAgICAgICAgICAvLyBhbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRhbHdheXMnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZCBwcm9ncmVzcyBldmVudHM6DQogICAgICAgICAgICAvLyBwcm9ncmVzczogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBnbG9iYWwgdXBsb2FkIHByb2dyZXNzIGV2ZW50czoNCiAgICAgICAgICAgIC8vIHByb2dyZXNzYWxsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkcHJvZ3Jlc3NhbGwnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RhcnQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RhcnQgZXZlbnQ6DQogICAgICAgICAgICAvLyBzdGFydDogZnVuY3Rpb24gKGUpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZHN0YXJ0JywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWRzIHN0b3AsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RvcCBldmVudDoNCiAgICAgICAgICAgIC8vIHN0b3A6IGZ1bmN0aW9uIChlKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRzdG9wJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBjaGFuZ2UgZXZlbnRzIG9mIHRoZSBmaWxlSW5wdXQocyk6DQogICAgICAgICAgICAvLyBjaGFuZ2U6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRjaGFuZ2UnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHBhc3RlIGV2ZW50cyB0byB0aGUgcGFzdGVab25lKHMpOg0KICAgICAgICAgICAgLy8gcGFzdGU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLmJpbmQoJ2ZpbGV1cGxvYWRwYXN0ZScsIGZ1bmMpOw0KDQogICAgICAgICAgICAvLyBDYWxsYmFjayBmb3IgZHJvcCBldmVudHMgb2YgdGhlIGRyb3Bab25lKHMpOg0KICAgICAgICAgICAgLy8gZHJvcDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRyb3AnLCBmdW5jKTsNCg0KICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyYWdvdmVyIGV2ZW50cyBvZiB0aGUgZHJvcFpvbmUocyk6DQogICAgICAgICAgICAvLyBkcmFnb3ZlcjogZnVuY3Rpb24gKGUpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGRyYWdvdmVyJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayB1cGxvYWQgcmVxdWVzdDoNCiAgICAgICAgICAgIC8vIGNodW5rc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGNodW5rc2VuZCcsIGZ1bmMpOw0KDQogICAgICAgICAgICAvLyBDYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBjaHVuayB1cGxvYWRzOg0KICAgICAgICAgICAgLy8gY2h1bmtkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkY2h1bmtkb25lJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWRzOg0KICAgICAgICAgICAgLy8gY2h1bmtmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5iaW5kKCdmaWxldXBsb2FkY2h1bmtmYWlsJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIENhbGxiYWNrIGZvciBjb21wbGV0ZWQgKHN1Y2Nlc3MsIGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWQgcmVxdWVzdHM6DQogICAgICAgICAgICAvLyBjaHVua2Fsd2F5czogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAuYmluZCgnZmlsZXVwbG9hZGNodW5rYWx3YXlzJywgZnVuYyk7DQoNCiAgICAgICAgICAgIC8vIFRoZSBwbHVnaW4gb3B0aW9ucyBhcmUgdXNlZCBhcyBzZXR0aW5ncyBvYmplY3QgZm9yIHRoZSBhamF4IGNhbGxzLg0KICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgalF1ZXJ5IGFqYXggc2V0dGluZ3MgcmVxdWlyZWQgZm9yIHRoZSBmaWxlIHVwbG9hZHM6DQogICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsDQogICAgICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsDQogICAgICAgICAgICBjYWNoZTogZmFsc2UNCiAgICAgICAgfSwNCg0KICAgICAgICAvLyBBIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IHJlcXVpcmUgcmVpbml0aWFsaXppbmcgZXZlbnQgbGlzdGVuZXJzIGFuZC9vcg0KICAgICAgICAvLyBzcGVjaWFsIGluaXRpYWxpemF0aW9uIGNvZGU6DQogICAgICAgIF9zcGVjaWFsT3B0aW9uczogWw0KICAgICAgICAgICAgJ2ZpbGVJbnB1dCcsDQogICAgICAgICAgICAnZHJvcFpvbmUnLA0KICAgICAgICAgICAgJ3Bhc3RlWm9uZScsDQogICAgICAgICAgICAnbXVsdGlwYXJ0JywNCiAgICAgICAgICAgICdmb3JjZUlmcmFtZVRyYW5zcG9ydCcNCiAgICAgICAgXSwNCg0KICAgICAgICBfYmxvYlNsaWNlOiAkLnN1cHBvcnQuYmxvYlNsaWNlICYmIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBzbGljZSA9IHRoaXMuc2xpY2UgfHwgdGhpcy53ZWJraXRTbGljZSB8fCB0aGlzLm1velNsaWNlOw0KICAgICAgICAgICAgcmV0dXJuIHNsaWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX0JpdHJhdGVUaW1lcjogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSAoKERhdGUubm93KSA/IERhdGUubm93KCkgOiAobmV3IERhdGUoKSkuZ2V0VGltZSgpKTsNCiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gMDsNCiAgICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IDA7DQogICAgICAgICAgICB0aGlzLmdldEJpdHJhdGUgPSBmdW5jdGlvbiAobm93LCBsb2FkZWQsIGludGVydmFsKSB7DQogICAgICAgICAgICAgICAgdmFyIHRpbWVEaWZmID0gbm93IC0gdGhpcy50aW1lc3RhbXA7DQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmJpdHJhdGUgfHwgIWludGVydmFsIHx8IHRpbWVEaWZmID4gaW50ZXJ2YWwpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaXRyYXRlID0gKGxvYWRlZCAtIHRoaXMubG9hZGVkKSAqICgxMDAwIC8gdGltZURpZmYpICogODsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7DQogICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gbm93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5iaXRyYXRlOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfaXNYSFJVcGxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgICAgICByZXR1cm4gIW9wdGlvbnMuZm9yY2VJZnJhbWVUcmFuc3BvcnQgJiYNCiAgICAgICAgICAgICAgICAoKCFvcHRpb25zLm11bHRpcGFydCAmJiAkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCkgfHwNCiAgICAgICAgICAgICAgICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgICAgICB2YXIgZm9ybURhdGE7DQogICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZm9ybURhdGEgPT09ICdmdW5jdGlvbicpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5mb3JtRGF0YShvcHRpb25zLmZvcm0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCQuaXNBcnJheShvcHRpb25zLmZvcm1EYXRhKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmZvcm1EYXRhOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ29iamVjdCcpIHsNCiAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IFtdOw0KICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZvcm1EYXRhLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfSk7DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1EYXRhOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIFtdOw0KICAgICAgICB9LA0KDQogICAgICAgIF9nZXRUb3RhbDogZnVuY3Rpb24gKGZpbGVzKSB7DQogICAgICAgICAgICB2YXIgdG90YWwgPSAwOw0KICAgICAgICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHsNCiAgICAgICAgICAgICAgICB0b3RhbCArPSBmaWxlLnNpemUgfHwgMTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgcmV0dXJuIHRvdGFsOw0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0UHJvZ3Jlc3NPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHsNCiAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IHsNCiAgICAgICAgICAgICAgICBsb2FkZWQ6IDAsDQogICAgICAgICAgICAgICAgdG90YWw6IDAsDQogICAgICAgICAgICAgICAgYml0cmF0ZTogMA0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGlmIChvYmouX3Byb2dyZXNzKSB7DQogICAgICAgICAgICAgICAgJC5leHRlbmQob2JqLl9wcm9ncmVzcywgcHJvZ3Jlc3MpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBvYmouX3Byb2dyZXNzID0gcHJvZ3Jlc3M7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgX2luaXRSZXNwb25zZU9iamVjdDogZnVuY3Rpb24gKG9iaikgew0KICAgICAgICAgICAgdmFyIHByb3A7DQogICAgICAgICAgICBpZiAob2JqLl9yZXNwb25zZSkgew0KICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiBvYmouX3Jlc3BvbnNlKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChvYmouX3Jlc3BvbnNlLmhhc093blByb3BlcnR5KHByb3ApKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqLl9yZXNwb25zZVtwcm9wXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgb2JqLl9yZXNwb25zZSA9IHt9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkgew0KICAgICAgICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkgew0KICAgICAgICAgICAgICAgIHZhciBub3cgPSAoKERhdGUubm93KSA/IERhdGUubm93KCkgOiAobmV3IERhdGUoKSkuZ2V0VGltZSgpKSwNCiAgICAgICAgICAgICAgICAgICAgbG9hZGVkOw0KICAgICAgICAgICAgICAgIGlmIChkYXRhLl90aW1lICYmIGRhdGEucHJvZ3Jlc3NJbnRlcnZhbCAmJg0KICAgICAgICAgICAgICAgICAgICAgICAgKG5vdyAtIGRhdGEuX3RpbWUgPCBkYXRhLnByb2dyZXNzSW50ZXJ2YWwpICYmDQogICAgICAgICAgICAgICAgICAgICAgICBlLmxvYWRlZCAhPT0gZS50b3RhbCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGRhdGEuX3RpbWUgPSBub3c7DQogICAgICAgICAgICAgICAgbG9hZGVkID0gTWF0aC5mbG9vcigNCiAgICAgICAgICAgICAgICAgICAgZS5sb2FkZWQgLyBlLnRvdGFsICogKGRhdGEuY2h1bmtTaXplIHx8IGRhdGEuX3Byb2dyZXNzLnRvdGFsKQ0KICAgICAgICAgICAgICAgICkgKyAoZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDApOw0KICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmV2aW91c2x5IGxvYWRlZCBzdGF0ZQ0KICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBnbG9iYWwgbG9hZGVkIGNvdW50ZXI6DQogICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkICs9IChsb2FkZWQgLSBkYXRhLl9wcm9ncmVzcy5sb2FkZWQpOw0KICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmJpdHJhdGUgPSB0aGlzLl9iaXRyYXRlVGltZXIuZ2V0Qml0cmF0ZSgNCiAgICAgICAgICAgICAgICAgICAgbm93LA0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQsDQogICAgICAgICAgICAgICAgICAgIGRhdGEuYml0cmF0ZUludGVydmFsDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGxvYWRlZDsNCiAgICAgICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy5iaXRyYXRlID0gZGF0YS5iaXRyYXRlID0gZGF0YS5fYml0cmF0ZVRpbWVyLmdldEJpdHJhdGUoDQogICAgICAgICAgICAgICAgICAgIG5vdywNCiAgICAgICAgICAgICAgICAgICAgbG9hZGVkLA0KICAgICAgICAgICAgICAgICAgICBkYXRhLmJpdHJhdGVJbnRlcnZhbA0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIGN1c3RvbSBwcm9ncmVzcyBldmVudCB3aXRoIGEgdG90YWwgZGF0YSBwcm9wZXJ0eSBzZXQNCiAgICAgICAgICAgICAgICAvLyB0byB0aGUgZmlsZSBzaXplKHMpIG9mIHRoZSBjdXJyZW50IHVwbG9hZCBhbmQgYSBsb2FkZWQgZGF0YQ0KICAgICAgICAgICAgICAgIC8vIHByb3BlcnR5IGNhbGN1bGF0ZWQgYWNjb3JkaW5nbHk6DQogICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcigncHJvZ3Jlc3MnLCBlLCBkYXRhKTsNCiAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgZ2xvYmFsIHByb2dyZXNzIGV2ZW50IGZvciBhbGwgY3VycmVudCBmaWxlIHVwbG9hZHMsDQogICAgICAgICAgICAgICAgLy8gaW5jbHVkaW5nIGFqYXggY2FsbHMgcXVldWVkIGZvciBzZXF1ZW50aWFsIGZpbGUgdXBsb2FkczoNCiAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKCdwcm9ncmVzc2FsbCcsIGUsIHRoaXMuX3Byb2dyZXNzKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBfaW5pdFByb2dyZXNzTGlzdGVuZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsDQogICAgICAgICAgICAgICAgeGhyID0gb3B0aW9ucy54aHIgPyBvcHRpb25zLnhocigpIDogJC5hamF4U2V0dGluZ3MueGhyKCk7DQogICAgICAgICAgICAvLyBBY2Nlc3NzIHRvIHRoZSBuYXRpdmUgWEhSIG9iamVjdCBpcyByZXF1aXJlZCB0byBhZGQgZXZlbnQgbGlzdGVuZXJzDQogICAgICAgICAgICAvLyBmb3IgdGhlIHVwbG9hZCBwcm9ncmVzcyBldmVudDoNCiAgICAgICAgICAgIGlmICh4aHIudXBsb2FkKSB7DQogICAgICAgICAgICAgICAgJCh4aHIudXBsb2FkKS5iaW5kKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBvZSA9IGUub3JpZ2luYWxFdmVudDsNCiAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9ncmVzcyBldmVudCBwcm9wZXJ0aWVzIGdldCBjb3BpZWQgb3ZlcjoNCiAgICAgICAgICAgICAgICAgICAgZS5sZW5ndGhDb21wdXRhYmxlID0gb2UubGVuZ3RoQ29tcHV0YWJsZTsNCiAgICAgICAgICAgICAgICAgICAgZS5sb2FkZWQgPSBvZS5sb2FkZWQ7DQogICAgICAgICAgICAgICAgICAgIGUudG90YWwgPSBvZS50b3RhbDsNCiAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25Qcm9ncmVzcyhlLCBvcHRpb25zKTsNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBvcHRpb25zLnhociA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhocjsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9pc0luc3RhbmNlT2Y6IGZ1bmN0aW9uICh0eXBlLCBvYmopIHsNCiAgICAgICAgICAgIC8vIENyb3NzLWZyYW1lIGluc3RhbmNlb2YgY2hlY2sNCiAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIHR5cGUgKyAnXSc7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2luaXRYSFJEYXRhOiBmdW5jdGlvbiAob3B0aW9ucykgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGZvcm1EYXRhLA0KICAgICAgICAgICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLA0KICAgICAgICAgICAgICAgIC8vIElnbm9yZSBub24tbXVsdGlwYXJ0IHNldHRpbmcgaWYgbm90IHN1cHBvcnRlZDoNCiAgICAgICAgICAgICAgICBtdWx0aXBhcnQgPSBvcHRpb25zLm11bHRpcGFydCB8fCAhJC5zdXBwb3J0LnhockZpbGVVcGxvYWQsDQogICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gb3B0aW9ucy5wYXJhbU5hbWVbMF07DQogICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307DQogICAgICAgICAgICBpZiAob3B0aW9ucy5jb250ZW50UmFuZ2UpIHsNCiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnNbJ0NvbnRlbnQtUmFuZ2UnXSA9IG9wdGlvbnMuY29udGVudFJhbmdlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCFtdWx0aXBhcnQgfHwgb3B0aW9ucy5ibG9iIHx8ICF0aGlzLl9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1EaXNwb3NpdGlvbiddID0gJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSInICsNCiAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJKGZpbGUubmFtZSkgKyAnIic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoIW11bHRpcGFydCkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGVudFR5cGUgPSBmaWxlLnR5cGU7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gb3B0aW9ucy5ibG9iIHx8IGZpbGU7DQogICAgICAgICAgICB9IGVsc2UgaWYgKCQuc3VwcG9ydC54aHJGb3JtRGF0YUZpbGVVcGxvYWQpIHsNCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5wb3N0TWVzc2FnZSkgew0KICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3cucG9zdE1lc3NhZ2UgZG9lcyBub3QgYWxsb3cgc2VuZGluZyBGb3JtRGF0YQ0KICAgICAgICAgICAgICAgICAgICAvLyBvYmplY3RzLCBzbyB3ZSBqdXN0IGFkZCB0aGUgRmlsZS9CbG9iIG9iamVjdHMgdG8NCiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZvcm1EYXRhIGFycmF5IGFuZCBsZXQgdGhlIHBvc3RNZXNzYWdlIHdpbmRvdw0KICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgdGhlIEZvcm1EYXRhIG9iamVjdCBvdXQgb2YgdGhpcyBhcnJheToNCiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmxvYikgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEucHVzaCh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyYW1OYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLmJsb2INCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKG9wdGlvbnMuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLnB1c2goew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLnBhcmFtTmFtZVtpbmRleF0gfHwgcGFyYW1OYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5faXNJbnN0YW5jZU9mKCdGb3JtRGF0YScsIG9wdGlvbnMuZm9ybURhdGEpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IG9wdGlvbnMuZm9ybURhdGE7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKHRoaXMuX2dldEZvcm1EYXRhKG9wdGlvbnMpLCBmdW5jdGlvbiAoaW5kZXgsIGZpZWxkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZpZWxkLm5hbWUsIGZpZWxkLnZhbHVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJsb2IpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJhbU5hbWUsIG9wdGlvbnMuYmxvYiwgZmlsZS5uYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNoZWNrIGFsbG93cyB0aGUgdGVzdHMgdG8gcnVuIHdpdGgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkdW1teSBvYmplY3RzOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9pc0luc3RhbmNlT2YoJ0ZpbGUnLCBmaWxlKSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5faXNJbnN0YW5jZU9mKCdCbG9iJywgZmlsZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWVbaW5kZXhdIHx8IHBhcmFtTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLm5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGEgPSBmb3JtRGF0YTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vIEJsb2IgcmVmZXJlbmNlIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgZnJlZSBtZW1vcnk6DQogICAgICAgICAgICBvcHRpb25zLmJsb2IgPSBudWxsOw0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0SWZyYW1lU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7DQogICAgICAgICAgICB2YXIgdGFyZ2V0SG9zdCA9ICQoJzxhPjwvYT4nKS5wcm9wKCdocmVmJywgb3B0aW9ucy51cmwpLnByb3AoJ2hvc3QnKTsNCiAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIGlmcmFtZSBlbmFibGVzIHRoZSBpZnJhbWUgdHJhbnNwb3J0Og0KICAgICAgICAgICAgb3B0aW9ucy5kYXRhVHlwZSA9ICdpZnJhbWUgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTsNCiAgICAgICAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgYSBzZXJpYWxpemVkIGFycmF5IGFzIGZvcm0gZGF0YToNCiAgICAgICAgICAgIG9wdGlvbnMuZm9ybURhdGEgPSB0aGlzLl9nZXRGb3JtRGF0YShvcHRpb25zKTsNCiAgICAgICAgICAgIC8vIEFkZCByZWRpcmVjdCB1cmwgdG8gZm9ybSBkYXRhIG9uIGNyb3NzLWRvbWFpbiB1cGxvYWRzOg0KICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVkaXJlY3QgJiYgdGFyZ2V0SG9zdCAmJiB0YXJnZXRIb3N0ICE9PSBsb2NhdGlvbi5ob3N0KSB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5mb3JtRGF0YS5wdXNoKHsNCiAgICAgICAgICAgICAgICAgICAgbmFtZTogb3B0aW9ucy5yZWRpcmVjdFBhcmFtTmFtZSB8fCAncmVkaXJlY3QnLA0KICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5yZWRpcmVjdA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0RGF0YVNldHRpbmdzOiBmdW5jdGlvbiAob3B0aW9ucykgew0KICAgICAgICAgICAgaWYgKHRoaXMuX2lzWEhSVXBsb2FkKG9wdGlvbnMpKSB7DQogICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaHVua2VkVXBsb2FkKG9wdGlvbnMsIHRydWUpKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5kYXRhKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0WEhSRGF0YShvcHRpb25zKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvcHRpb25zKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucG9zdE1lc3NhZ2UpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gU2V0dGluZyB0aGUgZGF0YVR5cGUgdG8gcG9zdG1lc3NhZ2UgZW5hYmxlcyB0aGUNCiAgICAgICAgICAgICAgICAgICAgLy8gcG9zdE1lc3NhZ2UgdHJhbnNwb3J0Og0KICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGFUeXBlID0gJ3Bvc3RtZXNzYWdlICcgKyAob3B0aW9ucy5kYXRhVHlwZSB8fCAnJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9pbml0SWZyYW1lU2V0dGluZ3Mob3B0aW9ucyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgX2dldFBhcmFtTmFtZTogZnVuY3Rpb24gKG9wdGlvbnMpIHsNCiAgICAgICAgICAgIHZhciBmaWxlSW5wdXQgPSAkKG9wdGlvbnMuZmlsZUlucHV0KSwNCiAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBvcHRpb25zLnBhcmFtTmFtZTsNCiAgICAgICAgICAgIGlmICghcGFyYW1OYW1lKSB7DQogICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gW107DQogICAgICAgICAgICAgICAgZmlsZUlucHV0LmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSAkKHRoaXMpLA0KICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXScsDQogICAgICAgICAgICAgICAgICAgICAgICBpID0gKGlucHV0LnByb3AoJ2ZpbGVzJykgfHwgWzFdKS5sZW5ndGg7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUucHVzaChuYW1lKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIGlmICghcGFyYW1OYW1lLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBbZmlsZUlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXSddOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSBpZiAoISQuaXNBcnJheShwYXJhbU5hbWUpKSB7DQogICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gW3BhcmFtTmFtZV07DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gcGFyYW1OYW1lOw0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0Rm9ybVNldHRpbmdzOiBmdW5jdGlvbiAob3B0aW9ucykgew0KICAgICAgICAgICAgLy8gUmV0cmlldmUgbWlzc2luZyBvcHRpb25zIGZyb20gdGhlIGlucHV0IGZpZWxkIGFuZCB0aGUNCiAgICAgICAgICAgIC8vIGFzc29jaWF0ZWQgZm9ybSwgaWYgYXZhaWxhYmxlOg0KICAgICAgICAgICAgaWYgKCFvcHRpb25zLmZvcm0gfHwgIW9wdGlvbnMuZm9ybS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm0gPSAkKG9wdGlvbnMuZmlsZUlucHV0LnByb3AoJ2Zvcm0nKSk7DQogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGdpdmVuIGZpbGUgaW5wdXQgZG9lc24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgZm9ybSwNCiAgICAgICAgICAgICAgICAvLyB1c2UgdGhlIGRlZmF1bHQgd2lkZ2V0IGZpbGUgaW5wdXQncyBmb3JtOg0KICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5mb3JtLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZvcm0gPSAkKHRoaXMub3B0aW9ucy5maWxlSW5wdXQucHJvcCgnZm9ybScpKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvcHRpb25zLnBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKTsNCiAgICAgICAgICAgIGlmICghb3B0aW9ucy51cmwpIHsNCiAgICAgICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMuZm9ybS5wcm9wKCdhY3Rpb24nKSB8fCBsb2NhdGlvbi5ocmVmOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gVGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgbXVzdCBiZSAiUE9TVCIgb3IgIlBVVCI6DQogICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAob3B0aW9ucy50eXBlIHx8IG9wdGlvbnMuZm9ybS5wcm9wKCdtZXRob2QnKSB8fCAnJykNCiAgICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnR5cGUgIT09ICdQT1NUJyAmJiBvcHRpb25zLnR5cGUgIT09ICdQVVQnICYmDQogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BBVENIJykgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghb3B0aW9ucy5mb3JtQWNjZXB0Q2hhcnNldCkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9ybUFjY2VwdENoYXJzZXQgPSBvcHRpb25zLmZvcm0uYXR0cignYWNjZXB0LWNoYXJzZXQnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBfZ2V0QUpBWFNldHRpbmdzOiBmdW5jdGlvbiAoZGF0YSkgew0KICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBkYXRhKTsNCiAgICAgICAgICAgIHRoaXMuX2luaXRGb3JtU2V0dGluZ3Mob3B0aW9ucyk7DQogICAgICAgICAgICB0aGlzLl9pbml0RGF0YVNldHRpbmdzKG9wdGlvbnMpOw0KICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8galF1ZXJ5IDEuNiBkb2Vzbid0IHByb3ZpZGUgLnN0YXRlKCksDQogICAgICAgIC8vIHdoaWxlIGpRdWVyeSAxLjgrIHJlbW92ZWQgLmlzUmVqZWN0ZWQoKSBhbmQgLmlzUmVzb2x2ZWQoKToNCiAgICAgICAgX2dldERlZmVycmVkU3RhdGU6IGZ1bmN0aW9uIChkZWZlcnJlZCkgew0KICAgICAgICAgICAgaWYgKGRlZmVycmVkLnN0YXRlKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLnN0YXRlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZGVmZXJyZWQuaXNSZXNvbHZlZCgpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICdyZXNvbHZlZCc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZGVmZXJyZWQuaXNSZWplY3RlZCgpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICdyZWplY3RlZCc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gJ3BlbmRpbmcnOw0KICAgICAgICB9LA0KDQogICAgICAgIC8vIE1hcHMganFYSFIgY2FsbGJhY2tzIHRvIHRoZSBlcXVpdmFsZW50DQogICAgICAgIC8vIG1ldGhvZHMgb2YgdGhlIGdpdmVuIFByb21pc2Ugb2JqZWN0Og0KICAgICAgICBfZW5oYW5jZVByb21pc2U6IGZ1bmN0aW9uIChwcm9taXNlKSB7DQogICAgICAgICAgICBwcm9taXNlLnN1Y2Nlc3MgPSBwcm9taXNlLmRvbmU7DQogICAgICAgICAgICBwcm9taXNlLmVycm9yID0gcHJvbWlzZS5mYWlsOw0KICAgICAgICAgICAgcHJvbWlzZS5jb21wbGV0ZSA9IHByb21pc2UuYWx3YXlzOw0KICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8gQ3JlYXRlcyBhbmQgcmV0dXJucyBhIFByb21pc2Ugb2JqZWN0IGVuaGFuY2VkIHdpdGgNCiAgICAgICAgLy8gdGhlIGpxWEhSIG1ldGhvZHMgYWJvcnQsIHN1Y2Nlc3MsIGVycm9yIGFuZCBjb21wbGV0ZToNCiAgICAgICAgX2dldFhIUlByb21pc2U6IGZ1bmN0aW9uIChyZXNvbHZlT3JSZWplY3QsIGNvbnRleHQsIGFyZ3MpIHsNCiAgICAgICAgICAgIHZhciBkZmQgPSAkLkRlZmVycmVkKCksDQogICAgICAgICAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCk7DQogICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCB0aGlzLm9wdGlvbnMuY29udGV4dCB8fCBwcm9taXNlOw0KICAgICAgICAgICAgaWYgKHJlc29sdmVPclJlamVjdCA9PT0gdHJ1ZSkgew0KICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlV2l0aChjb250ZXh0LCBhcmdzKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZU9yUmVqZWN0ID09PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIGRmZC5yZWplY3RXaXRoKGNvbnRleHQsIGFyZ3MpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGRmZC5wcm9taXNlOw0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHByb21pc2UpOw0KICAgICAgICB9LA0KDQogICAgICAgIC8vIEFkZHMgY29udmVuaWVuY2UgbWV0aG9kcyB0byB0aGUgZGF0YSBjYWxsYmFjayBhcmd1bWVudDoNCiAgICAgICAgX2FkZENvbnZlbmllbmNlTWV0aG9kczogZnVuY3Rpb24gKGUsIGRhdGEpIHsNCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywNCiAgICAgICAgICAgICAgICBnZXRQcm9taXNlID0gZnVuY3Rpb24gKGRhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlV2l0aCh0aGF0LCBbZGF0YV0pLnByb21pc2UoKTsNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgZGF0YS5wcm9jZXNzID0gZnVuY3Rpb24gKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKSB7DQogICAgICAgICAgICAgICAgaWYgKHJlc29sdmVGdW5jIHx8IHJlamVjdEZ1bmMpIHsNCiAgICAgICAgICAgICAgICAgICAgZGF0YS5fcHJvY2Vzc1F1ZXVlID0gdGhpcy5fcHJvY2Vzc1F1ZXVlID0NCiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLl9wcm9jZXNzUXVldWUgfHwgZ2V0UHJvbWlzZSh0aGlzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShyZXNvbHZlRnVuYywgcmVqZWN0RnVuYyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzUXVldWUgfHwgZ2V0UHJvbWlzZSh0aGlzKTsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBkYXRhLnN1Ym1pdCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSgpICE9PSAncGVuZGluZycpIHsNCiAgICAgICAgICAgICAgICAgICAgZGF0YS5qcVhIUiA9IHRoaXMuanFYSFIgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgKHRoYXQuX3RyaWdnZXIoJ3N1Ym1pdCcsIGUsIHRoaXMpICE9PSBmYWxzZSkgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX29uU2VuZChlLCB0aGlzKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuanFYSFIgfHwgdGhhdC5fZ2V0WEhSUHJvbWlzZSgpOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGRhdGEuYWJvcnQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgaWYgKHRoaXMuanFYSFIpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuanFYSFIuYWJvcnQoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQuX2dldFhIUlByb21pc2UoKTsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBkYXRhLnN0YXRlID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLmpxWEhSKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuanFYSFIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fcHJvY2Vzc1F1ZXVlKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9nZXREZWZlcnJlZFN0YXRlKHRoaXMuX3Byb2Nlc3NRdWV1ZSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGRhdGEucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGRhdGEucmVzcG9uc2UgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgfSwNCg0KICAgICAgICAvLyBQYXJzZXMgdGhlIFJhbmdlIGhlYWRlciBmcm9tIHRoZSBzZXJ2ZXIgcmVzcG9uc2UNCiAgICAgICAgLy8gYW5kIHJldHVybnMgdGhlIHVwbG9hZGVkIGJ5dGVzOg0KICAgICAgICBfZ2V0VXBsb2FkZWRCeXRlczogZnVuY3Rpb24gKGpxWEhSKSB7DQogICAgICAgICAgICB2YXIgcmFuZ2UgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcignUmFuZ2UnKSwNCiAgICAgICAgICAgICAgICBwYXJ0cyA9IHJhbmdlICYmIHJhbmdlLnNwbGl0KCctJyksDQogICAgICAgICAgICAgICAgdXBwZXJCeXRlc1BvcyA9IHBhcnRzICYmIHBhcnRzLmxlbmd0aCA+IDEgJiYNCiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQocGFydHNbMV0sIDEwKTsNCiAgICAgICAgICAgIHJldHVybiB1cHBlckJ5dGVzUG9zICYmIHVwcGVyQnl0ZXNQb3MgKyAxOw0KICAgICAgICB9LA0KDQogICAgICAgIC8vIFVwbG9hZHMgYSBmaWxlIGluIG11bHRpcGxlLCBzZXF1ZW50aWFsIHJlcXVlc3RzDQogICAgICAgIC8vIGJ5IHNwbGl0dGluZyB0aGUgZmlsZSB1cCBpbiBtdWx0aXBsZSBibG9iIGNodW5rcy4NCiAgICAgICAgLy8gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSwgb25seSB0ZXN0cyBpZiB0aGUgZmlsZQ0KICAgICAgICAvLyBzaG91bGQgYmUgdXBsb2FkZWQgaW4gY2h1bmtzLCBidXQgZG9lcyBub3QgaW52b2tlIGFueQ0KICAgICAgICAvLyB1cGxvYWQgcmVxdWVzdHM6DQogICAgICAgIF9jaHVua2VkVXBsb2FkOiBmdW5jdGlvbiAob3B0aW9ucywgdGVzdE9ubHkpIHsNCiAgICAgICAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyB8fCAwOw0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdLA0KICAgICAgICAgICAgICAgIGZzID0gZmlsZS5zaXplLA0KICAgICAgICAgICAgICAgIHViID0gb3B0aW9ucy51cGxvYWRlZEJ5dGVzLA0KICAgICAgICAgICAgICAgIG1jcyA9IG9wdGlvbnMubWF4Q2h1bmtTaXplIHx8IGZzLA0KICAgICAgICAgICAgICAgIHNsaWNlID0gdGhpcy5fYmxvYlNsaWNlLA0KICAgICAgICAgICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSwNCiAgICAgICAgICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKSwNCiAgICAgICAgICAgICAgICBqcVhIUiwNCiAgICAgICAgICAgICAgICB1cGxvYWQ7DQogICAgICAgICAgICBpZiAoISh0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSAmJiBzbGljZSAmJiAodWIgfHwgbWNzIDwgZnMpKSB8fA0KICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmRhdGEpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAodGVzdE9ubHkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh1YiA+PSBmcykgew0KICAgICAgICAgICAgICAgIGZpbGUuZXJyb3IgPSBvcHRpb25zLmkxOG4oJ3VwbG9hZGVkQnl0ZXMnKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0WEhSUHJvbWlzZSgNCiAgICAgICAgICAgICAgICAgICAgZmFsc2UsDQogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29udGV4dCwNCiAgICAgICAgICAgICAgICAgICAgW251bGwsICdlcnJvcicsIGZpbGUuZXJyb3JdDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vIFRoZSBjaHVuayB1cGxvYWQgbWV0aG9kOg0KICAgICAgICAgICAgdXBsb2FkID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIC8vIENsb25lIHRoZSBvcHRpb25zIG9iamVjdCBmb3IgZWFjaCBjaHVuayB1cGxvYWQ6DQogICAgICAgICAgICAgICAgdmFyIG8gPSAkLmV4dGVuZCh7fSwgb3B0aW9ucyksDQogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMb2FkZWQgPSBvLl9wcm9ncmVzcy5sb2FkZWQ7DQogICAgICAgICAgICAgICAgby5ibG9iID0gc2xpY2UuY2FsbCgNCiAgICAgICAgICAgICAgICAgICAgZmlsZSwNCiAgICAgICAgICAgICAgICAgICAgdWIsDQogICAgICAgICAgICAgICAgICAgIHViICsgbWNzLA0KICAgICAgICAgICAgICAgICAgICBmaWxlLnR5cGUNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUsIGFzIHRoZSBibG9iIGl0c2VsZg0KICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgZGVyZWZlcmVuY2VkIGFmdGVyIGRhdGEgcHJvY2Vzc2luZzoNCiAgICAgICAgICAgICAgICBvLmNodW5rU2l6ZSA9IG8uYmxvYi5zaXplOw0KICAgICAgICAgICAgICAgIC8vIEV4cG9zZSB0aGUgY2h1bmsgYnl0ZXMgcG9zaXRpb24gcmFuZ2U6DQogICAgICAgICAgICAgICAgby5jb250ZW50UmFuZ2UgPSAnYnl0ZXMgJyArIHViICsgJy0nICsNCiAgICAgICAgICAgICAgICAgICAgKHViICsgby5jaHVua1NpemUgLSAxKSArICcvJyArIGZzOw0KICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIHVwbG9hZCBkYXRhICh0aGUgYmxvYiBhbmQgcG90ZW50aWFsIGZvcm0gZGF0YSk6DQogICAgICAgICAgICAgICAgdGhhdC5faW5pdFhIUkRhdGEobyk7DQogICAgICAgICAgICAgICAgLy8gQWRkIHByb2dyZXNzIGxpc3RlbmVycyBmb3IgdGhpcyBjaHVuayB1cGxvYWQ6DQogICAgICAgICAgICAgICAgdGhhdC5faW5pdFByb2dyZXNzTGlzdGVuZXIobyk7DQogICAgICAgICAgICAgICAganFYSFIgPSAoKHRoYXQuX3RyaWdnZXIoJ2NodW5rc2VuZCcsIG51bGwsIG8pICE9PSBmYWxzZSAmJiAkLmFqYXgobykpIHx8DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlLCBvLmNvbnRleHQpKQ0KICAgICAgICAgICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikgew0KICAgICAgICAgICAgICAgICAgICAgICAgdWIgPSB0aGF0Ll9nZXRVcGxvYWRlZEJ5dGVzKGpxWEhSKSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1YiArIG8uY2h1bmtTaXplKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50DQogICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGxvYWRlZCBlcXVhbGluZyB0b3RhbCBoYXMgYmVlbiB0cmlnZ2VyZWQNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGlzIGNodW5rOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRMb2FkZWQgKyBvLmNodW5rU2l6ZSAtIG8uX3Byb2dyZXNzLmxvYWRlZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuX29uUHJvZ3Jlc3MoJC5FdmVudCgncHJvZ3Jlc3MnLCB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRydWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdWIgLSBvLnVwbG9hZGVkQnl0ZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiB1YiAtIG8udXBsb2FkZWRCeXRlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBvKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudXBsb2FkZWRCeXRlcyA9IG8udXBsb2FkZWRCeXRlcyA9IHViOw0KICAgICAgICAgICAgICAgICAgICAgICAgby5yZXN1bHQgPSByZXN1bHQ7DQogICAgICAgICAgICAgICAgICAgICAgICBvLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzOw0KICAgICAgICAgICAgICAgICAgICAgICAgby5qcVhIUiA9IGpxWEhSOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmtkb25lJywgbnVsbCwgbyk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2Fsd2F5cycsIG51bGwsIG8pOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHViIDwgZnMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWxlIHVwbG9hZCBub3QgeWV0IGNvbXBsZXRlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgY2h1bms6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlV2l0aCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby5jb250ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUl0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBvLmpxWEhSID0ganFYSFI7DQogICAgICAgICAgICAgICAgICAgICAgICBvLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzOw0KICAgICAgICAgICAgICAgICAgICAgICAgby5lcnJvclRocm93biA9IGVycm9yVGhyb3duOw0KICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmtmYWlsJywgbnVsbCwgbyk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2Fsd2F5cycsIG51bGwsIG8pOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGZkLnJlamVjdFdpdGgoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgby5jb250ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd25dDQogICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTsNCiAgICAgICAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdXBsb2FkKCk7DQogICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfYmVmb3JlU2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHsNCiAgICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDApIHsNCiAgICAgICAgICAgICAgICAvLyB0aGUgc3RhcnQgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gYW4gdXBsb2FkIHN0YXJ0cw0KICAgICAgICAgICAgICAgIC8vIGFuZCBubyBvdGhlciB1cGxvYWRzIGFyZSBjdXJyZW50bHkgcnVubmluZywNCiAgICAgICAgICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0YXJ0IGV2ZW50Og0KICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ3N0YXJ0Jyk7DQogICAgICAgICAgICAgICAgLy8gU2V0IHRpbWVyIGZvciBnbG9iYWwgYml0cmF0ZSBwcm9ncmVzcyBjYWxjdWxhdGlvbjoNCiAgICAgICAgICAgICAgICB0aGlzLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhpcy5fQml0cmF0ZVRpbWVyKCk7DQogICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGdsb2JhbCBwcm9ncmVzcyB2YWx1ZXM6DQogICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkID0gdGhpcy5fcHJvZ3Jlc3MudG90YWwgPSAwOw0KICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmJpdHJhdGUgPSAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250YWluZXIgb2JqZWN0cyBmb3IgdGhlIC5yZXNwb25zZSgpIGFuZA0KICAgICAgICAgICAgLy8gLnByb2dyZXNzKCkgbWV0aG9kcyBvbiB0aGUgZGF0YSBvYmplY3QgYXJlIGF2YWlsYWJsZQ0KICAgICAgICAgICAgLy8gYW5kIHJlc2V0IHRvIHRoZWlyIGluaXRpYWwgc3RhdGU6DQogICAgICAgICAgICB0aGlzLl9pbml0UmVzcG9uc2VPYmplY3QoZGF0YSk7DQogICAgICAgICAgICB0aGlzLl9pbml0UHJvZ3Jlc3NPYmplY3QoZGF0YSk7DQogICAgICAgICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGRhdGEudXBsb2FkZWRCeXRlcyB8fCAwOw0KICAgICAgICAgICAgZGF0YS5fcHJvZ3Jlc3MudG90YWwgPSBkYXRhLnRvdGFsID0gdGhpcy5fZ2V0VG90YWwoZGF0YS5maWxlcykgfHwgMTsNCiAgICAgICAgICAgIGRhdGEuX3Byb2dyZXNzLmJpdHJhdGUgPSBkYXRhLmJpdHJhdGUgPSAwOw0KICAgICAgICAgICAgdGhpcy5fYWN0aXZlICs9IDE7DQogICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBnbG9iYWwgcHJvZ3Jlc3MgdmFsdWVzOg0KICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkICs9IGRhdGEubG9hZGVkOw0KICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgKz0gZGF0YS50b3RhbDsNCiAgICAgICAgfSwNCg0KICAgICAgICBfb25Eb25lOiBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucykgew0KICAgICAgICAgICAgdmFyIHRvdGFsID0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWwsDQogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBvcHRpb25zLl9yZXNwb25zZTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLl9wcm9ncmVzcy5sb2FkZWQgPCB0b3RhbCkgew0KICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50DQogICAgICAgICAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkOg0KICAgICAgICAgICAgICAgIHRoaXMuX29uUHJvZ3Jlc3MoJC5FdmVudCgncHJvZ3Jlc3MnLCB7DQogICAgICAgICAgICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRydWUsDQogICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdG90YWwsDQogICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0b3RhbA0KICAgICAgICAgICAgICAgIH0pLCBvcHRpb25zKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJlc3BvbnNlLnJlc3VsdCA9IG9wdGlvbnMucmVzdWx0ID0gcmVzdWx0Ow0KICAgICAgICAgICAgcmVzcG9uc2UudGV4dFN0YXR1cyA9IG9wdGlvbnMudGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7DQogICAgICAgICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjsNCiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoJ2RvbmUnLCBudWxsLCBvcHRpb25zKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfb25GYWlsOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duLCBvcHRpb25zKSB7DQogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBvcHRpb25zLl9yZXNwb25zZTsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLnJlY2FsY3VsYXRlUHJvZ3Jlc3MpIHsNCiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGZhaWxlZCAoZXJyb3Igb3IgYWJvcnQpIGZpbGUgdXBsb2FkIGZyb20NCiAgICAgICAgICAgICAgICAvLyB0aGUgZ2xvYmFsIHByb2dyZXNzIGNhbGN1bGF0aW9uOg0KICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCAtPSBvcHRpb25zLl9wcm9ncmVzcy5sb2FkZWQ7DQogICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgLT0gb3B0aW9ucy5fcHJvZ3Jlc3MudG90YWw7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXNwb25zZS5qcVhIUiA9IG9wdGlvbnMuanFYSFIgPSBqcVhIUjsNCiAgICAgICAgICAgIHJlc3BvbnNlLnRleHRTdGF0dXMgPSBvcHRpb25zLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzOw0KICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JUaHJvd24gPSBvcHRpb25zLmVycm9yVGhyb3duID0gZXJyb3JUaHJvd247DQogICAgICAgICAgICB0aGlzLl90cmlnZ2VyKCdmYWlsJywgbnVsbCwgb3B0aW9ucyk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX29uQWx3YXlzOiBmdW5jdGlvbiAoanFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cywganFYSFJvckVycm9yLCBvcHRpb25zKSB7DQogICAgICAgICAgICAvLyBqcVhIUm9yUmVzdWx0LCB0ZXh0U3RhdHVzIGFuZCBqcVhIUm9yRXJyb3IgYXJlIGFkZGVkIHRvIHRoZQ0KICAgICAgICAgICAgLy8gb3B0aW9ucyBvYmplY3QgdmlhIGRvbmUgYW5kIGZhaWwgY2FsbGJhY2tzDQogICAgICAgICAgICB0aGlzLl90cmlnZ2VyKCdhbHdheXMnLCBudWxsLCBvcHRpb25zKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfb25TZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkgew0KICAgICAgICAgICAgaWYgKCFkYXRhLnN1Ym1pdCkgew0KICAgICAgICAgICAgICAgIHRoaXMuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBkYXRhKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcywNCiAgICAgICAgICAgICAgICBqcVhIUiwNCiAgICAgICAgICAgICAgICBhYm9ydGVkLA0KICAgICAgICAgICAgICAgIHNsb3QsDQogICAgICAgICAgICAgICAgcGlwZSwNCiAgICAgICAgICAgICAgICBvcHRpb25zID0gdGhhdC5fZ2V0QUpBWFNldHRpbmdzKGRhdGEpLA0KICAgICAgICAgICAgICAgIHNlbmQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuX3NlbmRpbmcgKz0gMTsNCiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRpbWVyIGZvciBiaXRyYXRlIHByb2dyZXNzIGNhbGN1bGF0aW9uOg0KICAgICAgICAgICAgICAgICAgICBvcHRpb25zLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhhdC5fQml0cmF0ZVRpbWVyKCk7DQogICAgICAgICAgICAgICAgICAgIGpxWEhSID0ganFYSFIgfHwgKA0KICAgICAgICAgICAgICAgICAgICAgICAgKChhYm9ydGVkIHx8IHRoYXQuX3RyaWdnZXIoJ3NlbmQnLCBlLCBvcHRpb25zKSA9PT0gZmFsc2UpICYmDQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlLCBvcHRpb25zLmNvbnRleHQsIGFib3J0ZWQpKSB8fA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fY2h1bmtlZFVwbG9hZChvcHRpb25zKSB8fCAkLmFqYXgob3B0aW9ucykNCiAgICAgICAgICAgICAgICAgICAgKS5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkRvbmUocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUiwgb3B0aW9ucyk7DQogICAgICAgICAgICAgICAgICAgIH0pLmZhaWwoZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikgew0KICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fb25GYWlsKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biwgb3B0aW9ucyk7DQogICAgICAgICAgICAgICAgICAgIH0pLmFsd2F5cyhmdW5jdGlvbiAoanFYSFJvclJlc3VsdCwgdGV4dFN0YXR1cywganFYSFJvckVycm9yKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkFsd2F5cygNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUm9yUmVzdWx0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0dXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAganFYSFJvckVycm9yLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMNCiAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9zZW5kaW5nIC09IDE7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9hY3RpdmUgLT0gMTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzID4gdGhhdC5fc2VuZGluZykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBuZXh0IHF1ZXVlZCB1cGxvYWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBoYXMgbm90IGJlZW4gYWJvcnRlZDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFNsb3QgPSB0aGF0Ll9zbG90cy5zaGlmdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0U2xvdCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZShuZXh0U2xvdCkgPT09ICdwZW5kaW5nJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNsb3QucmVzb2x2ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNsb3QgPSB0aGF0Ll9zbG90cy5zaGlmdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9hY3RpdmUgPT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc3RvcCBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgd2hlbiBhbGwgdXBsb2FkcyBoYXZlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVlbiBjb21wbGV0ZWQsIGVxdWl2YWxlbnQgdG8gdGhlIGdsb2JhbCBhamF4U3RvcCBldmVudDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdzdG9wJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4ganFYSFI7DQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHRoaXMuX2JlZm9yZVNlbmQoZSwgb3B0aW9ucyk7DQogICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlcXVlbnRpYWxVcGxvYWRzIHx8DQogICAgICAgICAgICAgICAgICAgICh0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyAmJg0KICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA8PSB0aGlzLl9zZW5kaW5nKSkgew0KICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyA+IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgc2xvdCA9ICQuRGVmZXJyZWQoKTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2xvdHMucHVzaChzbG90KTsNCiAgICAgICAgICAgICAgICAgICAgcGlwZSA9IHNsb3QucGlwZShzZW5kKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX3NlcXVlbmNlLnBpcGUoc2VuZCwgc2VuZCk7DQogICAgICAgICAgICAgICAgICAgIHBpcGUgPSB0aGlzLl9zZXF1ZW5jZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBwaXBlZCBQcm9taXNlIG9iamVjdCwgZW5oYW5jZWQgd2l0aCBhbiBhYm9ydCBtZXRob2QsDQogICAgICAgICAgICAgICAgLy8gd2hpY2ggaXMgZGVsZWdhdGVkIHRvIHRoZSBqcVhIUiBvYmplY3Qgb2YgdGhlIGN1cnJlbnQgdXBsb2FkLA0KICAgICAgICAgICAgICAgIC8vIGFuZCBqcVhIUiBjYWxsYmFja3MgbWFwcGVkIHRvIHRoZSBlcXVpdmFsZW50IFByb21pc2UgbWV0aG9kczoNCiAgICAgICAgICAgICAgICBwaXBlLmFib3J0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICBhYm9ydGVkID0gW3VuZGVmaW5lZCwgJ2Fib3J0JywgJ2Fib3J0J107DQogICAgICAgICAgICAgICAgICAgIGlmICghanFYSFIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC5yZWplY3RXaXRoKG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VuZCgpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBqcVhIUi5hYm9ydCgpOw0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHBpcGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHNlbmQoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfb25BZGQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7DQogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsDQogICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZSwNCiAgICAgICAgICAgICAgICBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSksDQogICAgICAgICAgICAgICAgbGltaXQgPSBvcHRpb25zLmxpbWl0TXVsdGlGaWxlVXBsb2FkcywNCiAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSB0aGlzLl9nZXRQYXJhbU5hbWUob3B0aW9ucyksDQogICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0LA0KICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNsaWNlLA0KICAgICAgICAgICAgICAgIGZpbGVTZXQsDQogICAgICAgICAgICAgICAgaTsNCiAgICAgICAgICAgIGlmICghKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXQpIHx8DQogICAgICAgICAgICAgICAgICAgICF0aGlzLl9pc1hIUlVwbG9hZChvcHRpb25zKSkgew0KICAgICAgICAgICAgICAgIGZpbGVTZXQgPSBbZGF0YS5maWxlc107DQogICAgICAgICAgICAgICAgcGFyYW1OYW1lU2V0ID0gW3BhcmFtTmFtZV07DQogICAgICAgICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzICYmIGxpbWl0KSB7DQogICAgICAgICAgICAgICAgZmlsZVNldCA9IFtdOw0KICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNldCA9IFtdOw0KICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhLmZpbGVzLmxlbmd0aDsgaSArPSBsaW1pdCkgew0KICAgICAgICAgICAgICAgICAgICBmaWxlU2V0LnB1c2goZGF0YS5maWxlcy5zbGljZShpLCBpICsgbGltaXQpKTsNCiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lU2xpY2UgPSBwYXJhbU5hbWUuc2xpY2UoaSwgaSArIGxpbWl0KTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJhbU5hbWVTbGljZS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNsaWNlID0gcGFyYW1OYW1lOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHBhcmFtTmFtZVNldCA9IHBhcmFtTmFtZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGRhdGEub3JpZ2luYWxGaWxlcyA9IGRhdGEuZmlsZXM7DQogICAgICAgICAgICAkLmVhY2goZmlsZVNldCB8fCBkYXRhLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICB2YXIgbmV3RGF0YSA9ICQuZXh0ZW5kKHt9LCBkYXRhKTsNCiAgICAgICAgICAgICAgICBuZXdEYXRhLmZpbGVzID0gZmlsZVNldCA/IGVsZW1lbnQgOiBbZWxlbWVudF07DQogICAgICAgICAgICAgICAgbmV3RGF0YS5wYXJhbU5hbWUgPSBwYXJhbU5hbWVTZXRbaW5kZXhdOw0KICAgICAgICAgICAgICAgIHRoYXQuX2luaXRSZXNwb25zZU9iamVjdChuZXdEYXRhKTsNCiAgICAgICAgICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NPYmplY3QobmV3RGF0YSk7DQogICAgICAgICAgICAgICAgdGhhdC5fYWRkQ29udmVuaWVuY2VNZXRob2RzKGUsIG5ld0RhdGEpOw0KICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoYXQuX3RyaWdnZXIoJ2FkZCcsIGUsIG5ld0RhdGEpOw0KICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgIH0sDQoNCiAgICAgICAgX3JlcGxhY2VGaWxlSW5wdXQ6IGZ1bmN0aW9uIChpbnB1dCkgew0KICAgICAgICAgICAgdmFyIGlucHV0Q2xvbmUgPSBpbnB1dC5jbG9uZSh0cnVlKTsNCiAgICAgICAgICAgICQoJzxmb3JtPjwvZm9ybT4nKS5hcHBlbmQoaW5wdXRDbG9uZSlbMF0ucmVzZXQoKTsNCiAgICAgICAgICAgIC8vIERldGFjaGluZyBhbGxvd3MgdG8gaW5zZXJ0IHRoZSBmaWxlSW5wdXQgb24gYW5vdGhlciBmb3JtDQogICAgICAgICAgICAvLyB3aXRob3V0IGxvb3NpbmcgdGhlIGZpbGUgaW5wdXQgdmFsdWU6DQogICAgICAgICAgICBpbnB1dC5hZnRlcihpbnB1dENsb25lKS5kZXRhY2goKTsNCiAgICAgICAgICAgIC8vIEF2b2lkIG1lbW9yeSBsZWFrcyB3aXRoIHRoZSBkZXRhY2hlZCBmaWxlIGlucHV0Og0KICAgICAgICAgICAgJC5jbGVhbkRhdGEoaW5wdXQudW5iaW5kKCdyZW1vdmUnKSk7DQogICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBvcmlnaW5hbCBmaWxlIGlucHV0IGVsZW1lbnQgaW4gdGhlIGZpbGVJbnB1dA0KICAgICAgICAgICAgLy8gZWxlbWVudHMgc2V0IHdpdGggdGhlIGNsb25lLCB3aGljaCBoYXMgYmVlbiBjb3BpZWQgaW5jbHVkaW5nDQogICAgICAgICAgICAvLyBldmVudCBoYW5kbGVyczoNCiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5maWxlSW5wdXQgPSB0aGlzLm9wdGlvbnMuZmlsZUlucHV0Lm1hcChmdW5jdGlvbiAoaSwgZWwpIHsNCiAgICAgICAgICAgICAgICBpZiAoZWwgPT09IGlucHV0WzBdKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dENsb25lWzBdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gZWw7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIC8vIElmIHRoZSB3aWRnZXQgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgb24gdGhlIGZpbGUgaW5wdXQgaXRzZWxmLA0KICAgICAgICAgICAgLy8gb3ZlcnJpZGUgdGhpcy5lbGVtZW50IHdpdGggdGhlIGZpbGUgaW5wdXQgY2xvbmU6DQogICAgICAgICAgICBpZiAoaW5wdXRbMF0gPT09IHRoaXMuZWxlbWVudFswXSkgew0KICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGlucHV0Q2xvbmU7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgX2hhbmRsZUZpbGVUcmVlRW50cnk6IGZ1bmN0aW9uIChlbnRyeSwgcGF0aCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSwNCiAgICAgICAgICAgICAgICBlcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZSAmJiAhZS5lbnRyeSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZS5lbnRyeSA9IGVudHJ5Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlICQud2hlbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIG9uZQ0KICAgICAgICAgICAgICAgICAgICAvLyBEZWZlcnJlZCBpcyByZWplY3RlZCwgd2UgdXNlIHJlc29sdmUgaW5zdGVhZC4NCiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdmFsaWQgZmlsZXMgYW5kIGludmFsaWQgaXRlbXMNCiAgICAgICAgICAgICAgICAgICAgLy8gdG8gYmUgcmV0dXJuZWQgdG9nZXRoZXIgaW4gb25lIHNldDoNCiAgICAgICAgICAgICAgICAgICAgZGZkLnJlc29sdmUoW2VdKTsNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIGRpclJlYWRlcjsNCiAgICAgICAgICAgIHBhdGggPSBwYXRoIHx8ICcnOw0KICAgICAgICAgICAgaWYgKGVudHJ5LmlzRmlsZSkgew0KICAgICAgICAgICAgICAgIGlmIChlbnRyeS5fZmlsZSkgew0KICAgICAgICAgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzUNCiAgICAgICAgICAgICAgICAgICAgZW50cnkuX2ZpbGUucmVsYXRpdmVQYXRoID0gcGF0aDsNCiAgICAgICAgICAgICAgICAgICAgZGZkLnJlc29sdmUoZW50cnkuX2ZpbGUpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUucmVsYXRpdmVQYXRoID0gcGF0aDsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKGZpbGUpOw0KICAgICAgICAgICAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHsNCiAgICAgICAgICAgICAgICBkaXJSZWFkZXIgPSBlbnRyeS5jcmVhdGVSZWFkZXIoKTsNCiAgICAgICAgICAgICAgICBkaXJSZWFkZXIucmVhZEVudHJpZXMoZnVuY3Rpb24gKGVudHJpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhhdC5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKA0KICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcywNCiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggKyBlbnRyeS5uYW1lICsgJy8nDQogICAgICAgICAgICAgICAgICAgICkuZG9uZShmdW5jdGlvbiAoZmlsZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZXNvbHZlKGZpbGVzKTsNCiAgICAgICAgICAgICAgICAgICAgfSkuZmFpbChlcnJvckhhbmRsZXIpOw0KICAgICAgICAgICAgICAgIH0sIGVycm9ySGFuZGxlcik7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIC8vIFJldHVybiBhbiBlbXB5IGxpc3QgZm9yIGZpbGUgc3lzdGVtIGl0ZW1zDQogICAgICAgICAgICAgICAgLy8gb3RoZXIgdGhhbiBmaWxlcyBvciBkaXJlY3RvcmllczoNCiAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZShbXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZGZkLnByb21pc2UoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfaGFuZGxlRmlsZVRyZWVFbnRyaWVzOiBmdW5jdGlvbiAoZW50cmllcywgcGF0aCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOw0KICAgICAgICAgICAgcmV0dXJuICQud2hlbi5hcHBseSgNCiAgICAgICAgICAgICAgICAkLA0KICAgICAgICAgICAgICAgICQubWFwKGVudHJpZXMsIGZ1bmN0aW9uIChlbnRyeSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC5faGFuZGxlRmlsZVRyZWVFbnRyeShlbnRyeSwgcGF0aCk7DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICkucGlwZShmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoDQogICAgICAgICAgICAgICAgICAgIFtdLA0KICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2dldERyb3BwZWRGaWxlczogZnVuY3Rpb24gKGRhdGFUcmFuc2Zlcikgew0KICAgICAgICAgICAgZGF0YVRyYW5zZmVyID0gZGF0YVRyYW5zZmVyIHx8IHt9Ow0KICAgICAgICAgICAgdmFyIGl0ZW1zID0gZGF0YVRyYW5zZmVyLml0ZW1zOw0KICAgICAgICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCAmJiAoaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeSB8fA0KICAgICAgICAgICAgICAgICAgICBpdGVtc1swXS5nZXRBc0VudHJ5KSkgew0KICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoDQogICAgICAgICAgICAgICAgICAgICQubWFwKGl0ZW1zLCBmdW5jdGlvbiAoaXRlbSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5Ow0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ud2Via2l0R2V0QXNFbnRyeSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIENocm9tZSBidWcgIzE0OTczNToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuX2ZpbGUgPSBpdGVtLmdldEFzRmlsZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRBc0VudHJ5KCk7DQogICAgICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZSgNCiAgICAgICAgICAgICAgICAkLm1ha2VBcnJheShkYXRhVHJhbnNmZXIuZmlsZXMpDQogICAgICAgICAgICApLnByb21pc2UoKTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXM6IGZ1bmN0aW9uIChmaWxlSW5wdXQpIHsNCiAgICAgICAgICAgIGZpbGVJbnB1dCA9ICQoZmlsZUlucHV0KTsNCiAgICAgICAgICAgIHZhciBlbnRyaWVzID0gZmlsZUlucHV0LnByb3AoJ3dlYmtpdEVudHJpZXMnKSB8fA0KICAgICAgICAgICAgICAgICAgICBmaWxlSW5wdXQucHJvcCgnZW50cmllcycpLA0KICAgICAgICAgICAgICAgIGZpbGVzLA0KICAgICAgICAgICAgICAgIHZhbHVlOw0KICAgICAgICAgICAgaWYgKGVudHJpZXMgJiYgZW50cmllcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKGVudHJpZXMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZmlsZXMgPSAkLm1ha2VBcnJheShmaWxlSW5wdXQucHJvcCgnZmlsZXMnKSk7DQogICAgICAgICAgICBpZiAoIWZpbGVzLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgIHZhbHVlID0gZmlsZUlucHV0LnByb3AoJ3ZhbHVlJyk7DQogICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5EZWZlcnJlZCgpLnJlc29sdmUoW10pLnByb21pc2UoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZpbGVzIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBicm93c2VyIGRvZXMgbm90DQogICAgICAgICAgICAgICAgLy8gc3VwcG9ydCB0aGUgRmlsZSBBUEkgYW5kIHdlIGFkZCBhIHBzZXVkbyBGaWxlIG9iamVjdCB3aXRoDQogICAgICAgICAgICAgICAgLy8gdGhlIGlucHV0IHZhbHVlIGFzIG5hbWUgd2l0aCBwYXRoIGluZm9ybWF0aW9uIHJlbW92ZWQ6DQogICAgICAgICAgICAgICAgZmlsZXMgPSBbe25hbWU6IHZhbHVlLnJlcGxhY2UoL14uKlxcLywgJycpfV07DQogICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVzWzBdLm5hbWUgPT09IHVuZGVmaW5lZCAmJiBmaWxlc1swXS5maWxlTmFtZSkgew0KICAgICAgICAgICAgICAgIC8vIEZpbGUgbm9ybWFsaXphdGlvbiBmb3IgU2FmYXJpIDQgYW5kIEZpcmVmb3ggMzoNCiAgICAgICAgICAgICAgICAkLmVhY2goZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkgew0KICAgICAgICAgICAgICAgICAgICBmaWxlLm5hbWUgPSBmaWxlLmZpbGVOYW1lOw0KICAgICAgICAgICAgICAgICAgICBmaWxlLnNpemUgPSBmaWxlLmZpbGVTaXplOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKGZpbGVzKS5wcm9taXNlKCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2dldEZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7DQogICAgICAgICAgICBpZiAoIShmaWxlSW5wdXQgaW5zdGFuY2VvZiAkKSB8fCBmaWxlSW5wdXQubGVuZ3RoID09PSAxKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzKGZpbGVJbnB1dCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gJC53aGVuLmFwcGx5KA0KICAgICAgICAgICAgICAgICQsDQogICAgICAgICAgICAgICAgJC5tYXAoZmlsZUlucHV0LCB0aGlzLl9nZXRTaW5nbGVGaWxlSW5wdXRGaWxlcykNCiAgICAgICAgICAgICkucGlwZShmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoDQogICAgICAgICAgICAgICAgICAgIFtdLA0KICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX29uQ2hhbmdlOiBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGRhdGEgPSB7DQogICAgICAgICAgICAgICAgICAgIGZpbGVJbnB1dDogJChlLnRhcmdldCksDQogICAgICAgICAgICAgICAgICAgIGZvcm06ICQoZS50YXJnZXQuZm9ybSkNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgdGhpcy5fZ2V0RmlsZUlucHV0RmlsZXMoZGF0YS5maWxlSW5wdXQpLmFsd2F5cyhmdW5jdGlvbiAoZmlsZXMpIHsNCiAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7DQogICAgICAgICAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5yZXBsYWNlRmlsZUlucHV0KSB7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuX3JlcGxhY2VGaWxlSW5wdXQoZGF0YS5maWxlSW5wdXQpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAodGhhdC5fdHJpZ2dlcignY2hhbmdlJywgZSwgZGF0YSkgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuX29uQWRkKGUsIGRhdGEpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9LA0KDQogICAgICAgIF9vblBhc3RlOiBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgdmFyIGl0ZW1zID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhICYmDQogICAgICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLml0ZW1zLA0KICAgICAgICAgICAgICAgIGRhdGEgPSB7ZmlsZXM6IFtdfTsNCiAgICAgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAkLmVhY2goaXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlICYmIGl0ZW0uZ2V0QXNGaWxlKCk7DQogICAgICAgICAgICAgICAgICAgIGlmIChmaWxlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzLnB1c2goZmlsZSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcigncGFzdGUnLCBlLCBkYXRhKSA9PT0gZmFsc2UgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uQWRkKGUsIGRhdGEpID09PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9vbkRyb3A6IGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgICBlLmRhdGFUcmFuc2ZlciA9IGUub3JpZ2luYWxFdmVudCAmJiBlLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyOw0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyLA0KICAgICAgICAgICAgICAgIGRhdGEgPSB7fTsNCiAgICAgICAgICAgIGlmIChkYXRhVHJhbnNmZXIgJiYgZGF0YVRyYW5zZmVyLmZpbGVzICYmIGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgdGhpcy5fZ2V0RHJvcHBlZEZpbGVzKGRhdGFUcmFuc2ZlcikuYWx3YXlzKGZ1bmN0aW9uIChmaWxlcykgew0KICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll90cmlnZ2VyKCdkcm9wJywgZSwgZGF0YSkgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9vbkRyYWdPdmVyOiBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIgPSBlLm9yaWdpbmFsRXZlbnQgJiYgZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjsNCiAgICAgICAgICAgIHZhciBkYXRhVHJhbnNmZXIgPSBlLmRhdGFUcmFuc2ZlcjsNCiAgICAgICAgICAgIGlmIChkYXRhVHJhbnNmZXIpIHsNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdHJpZ2dlcignZHJhZ292ZXInLCBlKSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJC5pbkFycmF5KCdGaWxlcycsIGRhdGFUcmFuc2Zlci50eXBlcykgIT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIGRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknOw0KICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9LA0KDQogICAgICAgIF9pbml0RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgaWYgKHRoaXMuX2lzWEhSVXBsb2FkKHRoaXMub3B0aW9ucykpIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9vbih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsIHsNCiAgICAgICAgICAgICAgICAgICAgZHJhZ292ZXI6IHRoaXMuX29uRHJhZ092ZXIsDQogICAgICAgICAgICAgICAgICAgIGRyb3A6IHRoaXMuX29uRHJvcA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIHRoaXMuX29uKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsIHsNCiAgICAgICAgICAgICAgICAgICAgcGFzdGU6IHRoaXMuX29uUGFzdGUNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHRoaXMuX29uKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsIHsNCiAgICAgICAgICAgICAgICBjaGFuZ2U6IHRoaXMuX29uQ2hhbmdlDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSwNCg0KICAgICAgICBfZGVzdHJveUV2ZW50SGFuZGxlcnM6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMuX29mZih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsICdkcmFnb3ZlciBkcm9wJyk7DQogICAgICAgICAgICB0aGlzLl9vZmYodGhpcy5vcHRpb25zLnBhc3RlWm9uZSwgJ3Bhc3RlJyk7DQogICAgICAgICAgICB0aGlzLl9vZmYodGhpcy5vcHRpb25zLmZpbGVJbnB1dCwgJ2NoYW5nZScpOw0KICAgICAgICB9LA0KDQogICAgICAgIF9zZXRPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7DQogICAgICAgICAgICB2YXIgcmVpbml0ID0gJC5pbkFycmF5KGtleSwgdGhpcy5fc3BlY2lhbE9wdGlvbnMpICE9PSAtMTsNCiAgICAgICAgICAgIGlmIChyZWluaXQpIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9kZXN0cm95RXZlbnRIYW5kbGVycygpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdGhpcy5fc3VwZXIoa2V5LCB2YWx1ZSk7DQogICAgICAgICAgICBpZiAocmVpbml0KSB7DQogICAgICAgICAgICAgICAgdGhpcy5faW5pdFNwZWNpYWxPcHRpb25zKCk7DQogICAgICAgICAgICAgICAgdGhpcy5faW5pdEV2ZW50SGFuZGxlcnMoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCg0KICAgICAgICBfaW5pdFNwZWNpYWxPcHRpb25zOiBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uczsNCiAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbGVJbnB1dCA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQgPSB0aGlzLmVsZW1lbnQuaXMoJ2lucHV0W3R5cGU9ImZpbGUiXScpID8NCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudCA6IHRoaXMuZWxlbWVudC5maW5kKCdpbnB1dFt0eXBlPSJmaWxlIl0nKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoIShvcHRpb25zLmZpbGVJbnB1dCBpbnN0YW5jZW9mICQpKSB7DQogICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQgPSAkKG9wdGlvbnMuZmlsZUlucHV0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghKG9wdGlvbnMuZHJvcFpvbmUgaW5zdGFuY2VvZiAkKSkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMuZHJvcFpvbmUgPSAkKG9wdGlvbnMuZHJvcFpvbmUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCEob3B0aW9ucy5wYXN0ZVpvbmUgaW5zdGFuY2VvZiAkKSkgew0KICAgICAgICAgICAgICAgIG9wdGlvbnMucGFzdGVab25lID0gJChvcHRpb25zLnBhc3RlWm9uZSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgX2dldFJlZ0V4cDogZnVuY3Rpb24gKHN0cikgew0KICAgICAgICAgICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCcvJyksDQogICAgICAgICAgICAgICAgbW9kaWZpZXJzID0gcGFydHMucG9wKCk7DQogICAgICAgICAgICBwYXJ0cy5zaGlmdCgpOw0KICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGFydHMuam9pbignLycpLCBtb2RpZmllcnMpOw0KICAgICAgICB9LA0KDQogICAgICAgIF9pc1JlZ0V4cE9wdGlvbjogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsNCiAgICAgICAgICAgIHJldHVybiBrZXkgIT09ICd1cmwnICYmICQudHlwZSh2YWx1ZSkgPT09ICdzdHJpbmcnICYmDQogICAgICAgICAgICAgICAgL15cLy4qXC9baWdtXXswLDN9JC8udGVzdCh2YWx1ZSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2luaXREYXRhQXR0cmlidXRlczogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLA0KICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7DQogICAgICAgICAgICAvLyBJbml0aWFsaXplIG9wdGlvbnMgc2V0IHZpYSBIVE1MNSBkYXRhLWF0dHJpYnV0ZXM6DQogICAgICAgICAgICAkLmVhY2goDQogICAgICAgICAgICAgICAgJCh0aGlzLmVsZW1lbnRbMF0uY2xvbmVOb2RlKGZhbHNlKSkuZGF0YSgpLA0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICh0aGF0Ll9pc1JlZ0V4cE9wdGlvbihrZXksIHZhbHVlKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGF0Ll9nZXRSZWdFeHAodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IHZhbHVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICk7DQogICAgICAgIH0sDQoNCiAgICAgICAgX2NyZWF0ZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5faW5pdERhdGFBdHRyaWJ1dGVzKCk7DQogICAgICAgICAgICB0aGlzLl9pbml0U3BlY2lhbE9wdGlvbnMoKTsNCiAgICAgICAgICAgIHRoaXMuX3Nsb3RzID0gW107DQogICAgICAgICAgICB0aGlzLl9zZXF1ZW5jZSA9IHRoaXMuX2dldFhIUlByb21pc2UodHJ1ZSk7DQogICAgICAgICAgICB0aGlzLl9zZW5kaW5nID0gdGhpcy5fYWN0aXZlID0gMDsNCiAgICAgICAgICAgIHRoaXMuX2luaXRQcm9ncmVzc09iamVjdCh0aGlzKTsNCiAgICAgICAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHRvIHF1ZXJ5DQogICAgICAgIC8vIHRoZSBudW1iZXIgb2YgYWN0aXZlIHVwbG9hZHM6DQogICAgICAgIGFjdGl2ZTogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTsNCiAgICAgICAgfSwNCg0KICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnkNCiAgICAgICAgLy8gdGhlIHdpZGdldCB1cGxvYWQgcHJvZ3Jlc3MuDQogICAgICAgIC8vIEl0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggbG9hZGVkLCB0b3RhbCBhbmQgYml0cmF0ZSBwcm9wZXJ0aWVzDQogICAgICAgIC8vIGZvciB0aGUgcnVubmluZyB1cGxvYWRzOg0KICAgICAgICBwcm9ncmVzczogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzOw0KICAgICAgICB9LA0KDQogICAgICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBhZGRpbmcgZmlsZXMNCiAgICAgICAgLy8gdXNpbmcgdGhlIGZpbGV1cGxvYWQgQVBJLiBUaGUgZGF0YSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBvYmplY3Qgd2hpY2gNCiAgICAgICAgLy8gbXVzdCBoYXZlIGEgZmlsZXMgcHJvcGVydHkgYW5kIGNhbiBjb250YWluIGFkZGl0aW9uYWwgb3B0aW9uczoNCiAgICAgICAgLy8gLmZpbGV1cGxvYWQoJ2FkZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7DQogICAgICAgIGFkZDogZnVuY3Rpb24gKGRhdGEpIHsNCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsNCiAgICAgICAgICAgIGlmICghZGF0YSB8fCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZGF0YS5maWxlSW5wdXQgJiYgIWRhdGEuZmlsZXMpIHsNCiAgICAgICAgICAgICAgICB0aGlzLl9nZXRGaWxlSW5wdXRGaWxlcyhkYXRhLmZpbGVJbnB1dCkuYWx3YXlzKGZ1bmN0aW9uIChmaWxlcykgew0KICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gZmlsZXM7DQogICAgICAgICAgICAgICAgICAgIHRoYXQuX29uQWRkKG51bGwsIGRhdGEpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBkYXRhLmZpbGVzID0gJC5tYWtlQXJyYXkoZGF0YS5maWxlcyk7DQogICAgICAgICAgICAgICAgdGhpcy5fb25BZGQobnVsbCwgZGF0YSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHNlbmRpbmcgZmlsZXMNCiAgICAgICAgLy8gdXNpbmcgdGhlIGZpbGV1cGxvYWQgQVBJLiBUaGUgZGF0YSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBvYmplY3Qgd2hpY2gNCiAgICAgICAgLy8gbXVzdCBoYXZlIGEgZmlsZXMgb3IgZmlsZUlucHV0IHByb3BlcnR5IGFuZCBjYW4gY29udGFpbiBhZGRpdGlvbmFsIG9wdGlvbnM6DQogICAgICAgIC8vIC5maWxldXBsb2FkKCdzZW5kJywge2ZpbGVzOiBmaWxlc0xpc3R9KTsNCiAgICAgICAgLy8gVGhlIG1ldGhvZCByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgZm9yIHRoZSBmaWxlIHVwbG9hZCBjYWxsLg0KICAgICAgICBzZW5kOiBmdW5jdGlvbiAoZGF0YSkgew0KICAgICAgICAgICAgaWYgKGRhdGEgJiYgIXRoaXMub3B0aW9ucy5kaXNhYmxlZCkgew0KICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpbGVJbnB1dCAmJiAhZGF0YS5maWxlcykgew0KICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXMsDQogICAgICAgICAgICAgICAgICAgICAgICBkZmQgPSAkLkRlZmVycmVkKCksDQogICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gZGZkLnByb21pc2UoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGpxWEhSLA0KICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRlZDsNCiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0ZWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpxWEhSKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpxWEhSLmFib3J0KCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBkZmQucmVqZWN0KG51bGwsICdhYm9ydCcsICdhYm9ydCcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7DQogICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldEZpbGVJbnB1dEZpbGVzKGRhdGEuZmlsZUlucHV0KS5hbHdheXMoDQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZmlsZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJvcnRlZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmlsZXMgPSBmaWxlczsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcVhIUiA9IHRoYXQuX29uU2VuZChudWxsLCBkYXRhKS50aGVuKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGZkLnJlc29sdmUocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmZC5yZWplY3QoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpOw0KICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzLmxlbmd0aCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb25TZW5kKG51bGwsIGRhdGEpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBkYXRhICYmIGRhdGEuY29udGV4dCk7DQogICAgICAgIH0NCg0KICAgIH0pOw0KDQp9KSk7DQo=]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/jquery.iframe-transport.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIGpRdWVyeSBJZnJhbWUgVHJhbnNwb3J0IFBsdWdpbiAxLjcNCiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZA0KICoNCiAqIENvcHlyaWdodCAyMDExLCBTZWJhc3RpYW4gVHNjaGFuDQogKiBodHRwczovL2JsdWVpbXAubmV0DQogKg0KICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOg0KICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQNCiAqLw0KDQovKmpzbGludCB1bnBhcmFtOiB0cnVlLCBub21lbjogdHJ1ZSAqLw0KLypnbG9iYWwgZGVmaW5lLCB3aW5kb3csIGRvY3VtZW50ICovDQoNCihmdW5jdGlvbiAoZmFjdG9yeSkgew0KICAgICd1c2Ugc3RyaWN0JzsNCiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7DQogICAgICAgIC8vIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBBTUQgbW9kdWxlOg0KICAgICAgICBkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzOg0KICAgICAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpOw0KICAgIH0NCn0oZnVuY3Rpb24gKCQpIHsNCiAgICAndXNlIHN0cmljdCc7DQoNCiAgICAvLyBIZWxwZXIgdmFyaWFibGUgdG8gY3JlYXRlIHVuaXF1ZSBuYW1lcyBmb3IgdGhlIHRyYW5zcG9ydCBpZnJhbWVzOg0KICAgIHZhciBjb3VudGVyID0gMDsNCg0KICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGFjY2VwdHMgdGhyZWUgYWRkaXRpb25hbCBvcHRpb25zOg0KICAgIC8vIG9wdGlvbnMuZmlsZUlucHV0OiBhIGpRdWVyeSBjb2xsZWN0aW9uIG9mIGZpbGUgaW5wdXQgZmllbGRzDQogICAgLy8gb3B0aW9ucy5wYXJhbU5hbWU6IHRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGZpbGUgZm9ybSBkYXRhLA0KICAgIC8vICBvdmVycmlkZXMgdGhlIG5hbWUgcHJvcGVydHkgb2YgdGhlIGZpbGUgaW5wdXQgZmllbGQocyksDQogICAgLy8gIGNhbiBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLg0KICAgIC8vIG9wdGlvbnMuZm9ybURhdGE6IGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZCB2YWx1ZSBwcm9wZXJ0aWVzLA0KICAgIC8vICBlcXVpdmFsZW50IHRvIHRoZSByZXR1cm4gZGF0YSBvZiAuc2VyaWFsaXplQXJyYXkoKSwgZS5nLjoNCiAgICAvLyAgW3tuYW1lOiAnYScsIHZhbHVlOiAxfSwge25hbWU6ICdiJywgdmFsdWU6IDJ9XQ0KICAgICQuYWpheFRyYW5zcG9ydCgnaWZyYW1lJywgZnVuY3Rpb24gKG9wdGlvbnMpIHsNCiAgICAgICAgaWYgKG9wdGlvbnMuYXN5bmMpIHsNCiAgICAgICAgICAgIHZhciBmb3JtLA0KICAgICAgICAgICAgICAgIGlmcmFtZSwNCiAgICAgICAgICAgICAgICBhZGRQYXJhbUNoYXI7DQogICAgICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uIChfLCBjb21wbGV0ZUNhbGxiYWNrKSB7DQogICAgICAgICAgICAgICAgICAgIGZvcm0gPSAkKCc8Zm9ybSBzdHlsZT0iZGlzcGxheTpub25lOyI+PC9mb3JtPicpOw0KICAgICAgICAgICAgICAgICAgICBmb3JtLmF0dHIoJ2FjY2VwdC1jaGFyc2V0Jywgb3B0aW9ucy5mb3JtQWNjZXB0Q2hhcnNldCk7DQogICAgICAgICAgICAgICAgICAgIGFkZFBhcmFtQ2hhciA9IC9cPy8udGVzdChvcHRpb25zLnVybCkgPyAnJicgOiAnPyc7DQogICAgICAgICAgICAgICAgICAgIC8vIFhEb21haW5SZXF1ZXN0IG9ubHkgc3VwcG9ydHMgR0VUIGFuZCBQT1NUOg0KICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAnREVMRVRFJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPURFTEVURSc7DQogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUFVUJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBVVCc7DQogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUEFUQ0gnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsICsgYWRkUGFyYW1DaGFyICsgJ19tZXRob2Q9UEFUQ0gnOw0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIC8vIGphdmFzY3JpcHQ6ZmFsc2UgYXMgaW5pdGlhbCBpZnJhbWUgc3JjDQogICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnRzIHdhcm5pbmcgcG9wdXBzIG9uIEhUVFBTIGluIElFNi4NCiAgICAgICAgICAgICAgICAgICAgLy8gSUUgdmVyc2lvbnMgYmVsb3cgSUU4IGNhbm5vdCBzZXQgdGhlIG5hbWUgcHJvcGVydHkgb2YNCiAgICAgICAgICAgICAgICAgICAgLy8gZWxlbWVudHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgRE9NLA0KICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzZXQgdGhlIG5hbWUgYWxvbmcgd2l0aCB0aGUgaWZyYW1lIEhUTUwgbWFya3VwOg0KICAgICAgICAgICAgICAgICAgICBjb3VudGVyICs9IDE7DQogICAgICAgICAgICAgICAgICAgIGlmcmFtZSA9ICQoDQogICAgICAgICAgICAgICAgICAgICAgICAnPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6ZmFsc2U7IiBuYW1lPSJpZnJhbWUtdHJhbnNwb3J0LScgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgKyAnIj48L2lmcmFtZT4nDQogICAgICAgICAgICAgICAgICAgICkuYmluZCgnbG9hZCcsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlSW5wdXRDbG9uZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lcyA9ICQuaXNBcnJheShvcHRpb25zLnBhcmFtTmFtZSkgPw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXJhbU5hbWUgOiBbb3B0aW9ucy5wYXJhbU5hbWVdOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVuYmluZCgnbG9hZCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJpbmQoJ2xvYWQnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV3JhcCBpbiBhIHRyeS9jYXRjaCBibG9jayB0byBjYXRjaCBleGNlcHRpb25zIHRocm93bg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBhY2Nlc3MgY3Jvc3MtZG9tYWluIGlmcmFtZSBjb250ZW50czoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gaWZyYW1lLmNvbnRlbnRzKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb29nbGUgQ2hyb21lIGFuZCBGaXJlZm94IGRvIG5vdCB0aHJvdyBhbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uIHdoZW4gY2FsbGluZyBpZnJhbWUuY29udGVudHMoKSBvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzbyB3ZSB1bmlmeSB0aGUgcmVzcG9uc2U6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmxlbmd0aCB8fCAhcmVzcG9uc2VbMF0uZmlyc3RDaGlsZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVuZGVmaW5lZDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY29tcGxldGUgY2FsbGJhY2sgcmV0dXJucyB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWZyYW1lIGNvbnRlbnQgZG9jdW1lbnQgYXMgcmVzcG9uc2Ugb2JqZWN0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZUNhbGxiYWNrKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydpZnJhbWUnOiByZXNwb25zZX0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4IGZvciBJRSBlbmRsZXNzIHByb2dyZXNzIGJhciBhY3Rpdml0eSBidWcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGhhcHBlbnMgb24gZm9ybSBzdWJtaXRzIHRvIGlmcmFtZSB0YXJnZXRzKToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6ZmFsc2U7Ij48L2lmcmFtZT4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKGZvcm0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyB0aGUgZm9ybSBpbiBhIHNldFRpbWVvdXQgY2FsbA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3dzIENocm9tZSdzIGRldmVsb3BlciB0b29scyB0byBkaXNwbGF5DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcmVzcG9uc2UgcmVzdWx0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgndGFyZ2V0JywgaWZyYW1lLnByb3AoJ25hbWUnKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnYWN0aW9uJywgb3B0aW9ucy51cmwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ21ldGhvZCcsIG9wdGlvbnMudHlwZSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtRGF0YSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZvcm1EYXRhLCBmdW5jdGlvbiAoaW5kZXgsIGZpZWxkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iLz4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ25hbWUnLCBmaWVsZC5uYW1lKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbChmaWVsZC52YWx1ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhmb3JtKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZpbGVJbnB1dCAmJiBvcHRpb25zLmZpbGVJbnB1dC5sZW5ndGggJiYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID09PSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlSW5wdXRDbG9uZXMgPSBvcHRpb25zLmZpbGVJbnB1dC5jbG9uZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBhIGNsb25lIGZvciBlYWNoIGZpbGUgaW5wdXQgZmllbGQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuYWZ0ZXIoZnVuY3Rpb24gKGluZGV4KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlSW5wdXRDbG9uZXNbaW5kZXhdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBhcmFtTmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5lYWNoKGZ1bmN0aW9uIChpbmRleCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wcm9wKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWVzW2luZGV4XSB8fCBvcHRpb25zLnBhcmFtTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZGluZyB0aGUgZmlsZSBpbnB1dCBmaWVsZHMgdG8gdGhlIGhpZGRlbiBmb3JtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlcyB0aGVtIGZyb20gdGhlaXIgb3JpZ2luYWwgbG9jYXRpb246DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKG9wdGlvbnMuZmlsZUlucHV0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJvcCgnZW5jdHlwZScsICdtdWx0aXBhcnQvZm9ybS1kYXRhJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5jdHlwZSBtdXN0IGJlIHNldCBhcyBlbmNvZGluZyBmb3IgSUU6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9wKCdlbmNvZGluZycsICdtdWx0aXBhcnQvZm9ybS1kYXRhJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBmaWxlIGlucHV0IGZpZWxkcyBhdCB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgcmVwbGFjaW5nIHRoZSBjbG9uZXMgd2l0aCB0aGUgb3JpZ2luYWxzOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVJbnB1dENsb25lcyAmJiBmaWxlSW5wdXRDbG9uZXMubGVuZ3RoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGlucHV0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9uZSA9ICQoZmlsZUlucHV0Q2xvbmVzW2luZGV4XSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXQpLnByb3AoJ25hbWUnLCBjbG9uZS5wcm9wKCduYW1lJykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZS5yZXBsYWNlV2l0aChpbnB1dCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZChpZnJhbWUpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlmcmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gamF2YXNjcmlwdDpmYWxzZSBhcyBpZnJhbWUgc3JjIGFib3J0cyB0aGUgcmVxdWVzdA0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHByZXZlbnRzIHdhcm5pbmcgcG9wdXBzIG9uIEhUVFBTIGluIElFNi4NCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbmNhdCBpcyB1c2VkIHRvIGF2b2lkIHRoZSAiU2NyaXB0IFVSTCIgSlNMaW50IGVycm9yOg0KICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVuYmluZCgnbG9hZCcpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnByb3AoJ3NyYycsICdqYXZhc2NyaXB0Jy5jb25jYXQoJzpmYWxzZTsnKSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCByZXR1cm5zIHRoZSBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZS4NCiAgICAvLyBUaGUgZm9sbG93aW5nIGFkZHMgY29udmVydGVycyBmcm9tIGlmcmFtZSB0byB0ZXh0LCBqc29uLCBodG1sLCB4bWwNCiAgICAvLyBhbmQgc2NyaXB0Lg0KICAgIC8vIFBsZWFzZSBub3RlIHRoYXQgdGhlIENvbnRlbnQtVHlwZSBmb3IgSlNPTiByZXNwb25zZXMgaGFzIHRvIGJlIHRleHQvcGxhaW4NCiAgICAvLyBvciB0ZXh0L2h0bWwsIGlmIHRoZSBicm93c2VyIGRvZXNuJ3QgaW5jbHVkZSBhcHBsaWNhdGlvbi9qc29uIGluIHRoZQ0KICAgIC8vIEFjY2VwdCBoZWFkZXIsIGVsc2UgSUUgd2lsbCBzaG93IGEgZG93bmxvYWQgZGlhbG9nLg0KICAgIC8vIFRoZSBDb250ZW50LVR5cGUgZm9yIFhNTCByZXNwb25zZXMgb24gdGhlIG90aGVyIGhhbmQgaGFzIHRvIGJlIGFsd2F5cw0KICAgIC8vIGFwcGxpY2F0aW9uL3htbCBvciB0ZXh0L3htbCwgc28gSUUgcHJvcGVybHkgcGFyc2VzIHRoZSBYTUwgcmVzcG9uc2UuDQogICAgLy8gU2VlIGFsc28NCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCNjb250ZW50LXR5cGUtbmVnb3RpYXRpb24NCiAgICAkLmFqYXhTZXR1cCh7DQogICAgICAgIGNvbnZlcnRlcnM6IHsNCiAgICAgICAgICAgICdpZnJhbWUgdGV4dCc6IGZ1bmN0aW9uIChpZnJhbWUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gaWZyYW1lICYmICQoaWZyYW1lWzBdLmJvZHkpLnRleHQoKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAnaWZyYW1lIGpzb24nOiBmdW5jdGlvbiAoaWZyYW1lKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkLnBhcnNlSlNPTigkKGlmcmFtZVswXS5ib2R5KS50ZXh0KCkpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICdpZnJhbWUgaHRtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gaWZyYW1lICYmICQoaWZyYW1lWzBdLmJvZHkpLmh0bWwoKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAnaWZyYW1lIHhtbCc6IGZ1bmN0aW9uIChpZnJhbWUpIHsNCiAgICAgICAgICAgICAgICB2YXIgeG1sRG9jID0gaWZyYW1lICYmIGlmcmFtZVswXTsNCiAgICAgICAgICAgICAgICByZXR1cm4geG1sRG9jICYmICQuaXNYTUxEb2MoeG1sRG9jKSA/IHhtbERvYyA6DQogICAgICAgICAgICAgICAgICAgICAgICAkLnBhcnNlWE1MKCh4bWxEb2MuWE1MRG9jdW1lbnQgJiYgeG1sRG9jLlhNTERvY3VtZW50LnhtbCkgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHhtbERvYy5ib2R5KS5odG1sKCkpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICdpZnJhbWUgc2NyaXB0JzogZnVuY3Rpb24gKGlmcmFtZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBpZnJhbWUgJiYgJC5nbG9iYWxFdmFsKCQoaWZyYW1lWzBdLmJvZHkpLnRleHQoKSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9KTsNCg0KfSkpOw0K]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/package.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ew0KICAgICJuYW1lIjogImJsdWVpbXAtZmlsZS11cGxvYWQiLA0KICAgICJ2ZXJzaW9uIjogIjguMy4yIiwNCiAgICAidGl0bGUiOiAialF1ZXJ5IEZpbGUgVXBsb2FkIiwNCiAgICAiZGVzY3JpcHRpb24iOiAiRmlsZSBVcGxvYWQgd2lkZ2V0IHdpdGggbXVsdGlwbGUgZmlsZSBzZWxlY3Rpb24sIGRyYWcmYW1wO2Ryb3Agc3VwcG9ydCwgcHJvZ3Jlc3MgYmFyLCB2YWxpZGF0aW9uIGFuZCBwcmV2aWV3IGltYWdlcywgYXVkaW8gYW5kIHZpZGVvIGZvciBqUXVlcnkuIFN1cHBvcnRzIGNyb3NzLWRvbWFpbiwgY2h1bmtlZCBhbmQgcmVzdW1hYmxlIGZpbGUgdXBsb2Fkcy4gV29ya3Mgd2l0aCBhbnkgc2VydmVyLXNpZGUgcGxhdGZvcm0gKEdvb2dsZSBBcHAgRW5naW5lLCBQSFAsIFB5dGhvbiwgUnVieSBvbiBSYWlscywgSmF2YSwgZXRjLikgdGhhdCBzdXBwb3J0cyBzdGFuZGFyZCBIVE1MIGZvcm0gZmlsZSB1cGxvYWRzLiIsDQogICAgImtleXdvcmRzIjogWw0KICAgICAgICAianF1ZXJ5IiwNCiAgICAgICAgImZpbGUiLA0KICAgICAgICAidXBsb2FkIiwNCiAgICAgICAgIndpZGdldCIsDQogICAgICAgICJtdWx0aXBsZSIsDQogICAgICAgICJzZWxlY3Rpb24iLA0KICAgICAgICAiZHJhZyIsDQogICAgICAgICJkcm9wIiwNCiAgICAgICAgInByb2dyZXNzIiwNCiAgICAgICAgInByZXZpZXciLA0KICAgICAgICAiY3Jvc3MtZG9tYWluIiwNCiAgICAgICAgImNyb3NzLXNpdGUiLA0KICAgICAgICAiY2h1bmsiLA0KICAgICAgICAicmVzdW1lIiwNCiAgICAgICAgImdhZSIsDQogICAgICAgICJnbyIsDQogICAgICAgICJweXRob24iLA0KICAgICAgICAicGhwIiwNCiAgICAgICAgImJvb3RzdHJhcCINCiAgICBdLA0KICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQiLA0KICAgICJhdXRob3IiOiB7DQogICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBUc2NoYW4iLA0KICAgICAgICAidXJsIjogImh0dHBzOi8vYmx1ZWltcC5uZXQiDQogICAgfSwNCiAgICAibWFpbnRhaW5lcnMiOiBbDQogICAgICAgIHsNCiAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBUc2NoYW4iLA0KICAgICAgICAgICAgInVybCI6ICJodHRwczovL2JsdWVpbXAubmV0Ig0KICAgICAgICB9DQogICAgXSwNCiAgICAicmVwb3NpdG9yeSI6IHsNCiAgICAgICAgInR5cGUiOiAiZ2l0IiwNCiAgICAgICAgInVybCI6ICJnaXQ6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkLmdpdCINCiAgICB9LA0KICAgICJidWdzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9pc3N1ZXMiLA0KICAgICJsaWNlbnNlcyI6IFsNCiAgICAgICAgew0KICAgICAgICAgICAgInR5cGUiOiAiTUlUIiwNCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQiDQogICAgICAgIH0NCiAgICBdLA0KICAgICJkZXBlbmRlbmNpZXMiOiB7DQogICAgICAgICJqcXVlcnkiOiAiPj0xLjYiLA0KICAgICAgICAianF1ZXJ5LnVpLndpZGdldCI6ICI+PTEuOSIsDQogICAgICAgICJibHVlaW1wLXRtcGwiOiAiPj0yLjEuMCIsDQogICAgICAgICJibHVlaW1wLWxvYWQtaW1hZ2UiOiAiPj0xLjcuMCIsDQogICAgICAgICJibHVlaW1wLWNhbnZhcy10by1ibG9iIjogIj49Mi4wLjUiDQogICAgfQ0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/progressbar.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBqUXVlcnkgRmlsZSBVcGxvYWQgUGx1Z2luDQoNCiMjIERlbW8NCltEZW1vIEZpbGUgVXBsb2FkXShodHRwOi8vYmx1ZWltcC5naXRodWIuY29tL2pRdWVyeS1GaWxlLVVwbG9hZC8pDQoNCiMjIFNldHVwIGluc3RydWN0aW9ucw0KKiBbSG93IHRvIHNldHVwIHRoZSBwbHVnaW4gb24geW91ciB3ZWJzaXRlXShodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9TZXR1cCkNCiogW0hvdyB0byB1c2Ugb25seSB0aGUgYmFzaWMgcGx1Z2luIChtaW5pbWFsIHNldHVwIGd1aWRlKS5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC93aWtpL0Jhc2ljLXBsdWdpbikNCg0KIyMgRmVhdHVyZXMNCiogKipNdWx0aXBsZSBmaWxlIHVwbG9hZDoqKiAgDQogIEFsbG93cyB0byBzZWxlY3QgbXVsdGlwbGUgZmlsZXMgYXQgb25jZSBhbmQgdXBsb2FkIHRoZW0gc2ltdWx0YW5lb3VzbHkuDQoqICoqRHJhZyAmIERyb3Agc3VwcG9ydDoqKiAgDQogIEFsbG93cyB0byB1cGxvYWQgZmlsZXMgYnkgZHJhZ2dpbmcgdGhlbSBmcm9tIHlvdXIgZGVza3RvcCBvciBmaWxlbWFuYWdlciBhbmQgZHJvcHBpbmcgdGhlbSBvbiB5b3VyIGJyb3dzZXIgd2luZG93Lg0KKiAqKlVwbG9hZCBwcm9ncmVzcyBiYXI6KiogIA0KICBTaG93cyBhIHByb2dyZXNzIGJhciBpbmRpY2F0aW5nIHRoZSB1cGxvYWQgcHJvZ3Jlc3MgZm9yIGluZGl2aWR1YWwgZmlsZXMgYW5kIGZvciBhbGwgdXBsb2FkcyBjb21iaW5lZC4NCiogKipDYW5jZWxhYmxlIHVwbG9hZHM6KiogIA0KICBJbmRpdmlkdWFsIGZpbGUgdXBsb2FkcyBjYW4gYmUgY2FuY2VsZWQgdG8gc3RvcCB0aGUgdXBsb2FkIHByb2dyZXNzLg0KKiAqKlJlc3VtYWJsZSB1cGxvYWRzOioqICANCiAgQWJvcnRlZCB1cGxvYWRzIGNhbiBiZSByZXN1bWVkIHdpdGggYnJvd3NlcnMgc3VwcG9ydGluZyB0aGUgQmxvYiBBUEkuDQoqICoqQ2h1bmtlZCB1cGxvYWRzOioqICANCiAgTGFyZ2UgZmlsZXMgY2FuIGJlIHVwbG9hZGVkIGluIHNtYWxsZXIgY2h1bmtzIHdpdGggYnJvd3NlcnMgc3VwcG9ydGluZyB0aGUgQmxvYiBBUEkuDQoqICoqUHJldmlldyBpbWFnZXM6KiogIA0KICBBIHByZXZpZXcgb2YgaW1hZ2UgZmlsZXMgY2FuIGJlIGRpc3BsYXllZCBiZWZvcmUgdXBsb2FkaW5nIHdpdGggYnJvd3NlcnMgc3VwcG9ydGluZyB0aGUgcmVxdWlyZWQgSFRNTDUgQVBJcy4NCiogKipObyBicm93c2VyIHBsdWdpbnMgKGUuZy4gQWRvYmUgRmxhc2gpIHJlcXVpcmVkOioqICANCiAgVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIG9wZW4gc3RhbmRhcmRzIGxpa2UgSFRNTDUgYW5kIEphdmFTY3JpcHQgYW5kIHJlcXVpcmVzIG5vIGFkZGl0aW9uYWwgYnJvd3NlciBwbHVnaW5zLg0KKiAqKkdyYWNlZnVsIGZhbGxiYWNrIGZvciBsZWdhY3kgYnJvd3NlcnM6KiogIA0KICBVcGxvYWRzIGZpbGVzIHZpYSBYTUxIdHRwUmVxdWVzdHMgaWYgc3VwcG9ydGVkIGFuZCB1c2VzIGlmcmFtZXMgYXMgZmFsbGJhY2sgZm9yIGxlZ2FjeSBicm93c2Vycy4NCiogKipIVE1MIGZpbGUgdXBsb2FkIGZvcm0gZmFsbGJhY2s6KiogIA0KICBTaG93cyBhIHN0YW5kYXJkIEhUTUwgZmlsZSB1cGxvYWQgZm9ybSBpZiBKYXZhU2NyaXB0IGlzIGRpc2FibGVkLg0KKiAqKkNyb3NzLXNpdGUgZmlsZSB1cGxvYWRzOioqICANCiAgU3VwcG9ydHMgdXBsb2FkaW5nIGZpbGVzIHRvIGEgZGlmZmVyZW50IGRvbWFpbiB3aXRoIENyb3NzLXNpdGUgWE1MSHR0cFJlcXVlc3RzLg0KKiAqKk11bHRpcGxlIHBsdWdpbiBpbnN0YW5jZXM6KiogIA0KICBBbGxvd3MgdG8gdXNlIG11bHRpcGxlIHBsdWdpbiBpbnN0YW5jZXMgb24gdGhlIHNhbWUgd2VicGFnZS4NCiogKipDdXN0b21pemFibGUgYW5kIGV4dGVuc2libGU6KiogIA0KICBQcm92aWRlcyBhbiBBUEkgdG8gc2V0IGluZGl2aWR1YWwgb3B0aW9ucyBhbmQgZGVmaW5lIGNhbGxCYWNrIG1ldGhvZHMgZm9yIHZhcmlvdXMgdXBsb2FkIGV2ZW50cy4NCiogKipNdWx0aXBhcnQgYW5kIGZpbGUgY29udGVudHMgc3RyZWFtIHVwbG9hZHM6KiogIA0KICBGaWxlcyBjYW4gYmUgdXBsb2FkZWQgYXMgc3RhbmRhcmQgIm11bHRpcGFydC9mb3JtLWRhdGEiIG9yIGZpbGUgY29udGVudHMgc3RyZWFtIChIVFRQIFBVVCBmaWxlIHVwbG9hZCkuDQoqICoqQ29tcGF0aWJsZSB3aXRoIGFueSBzZXJ2ZXItc2lkZSBhcHBsaWNhdGlvbiBwbGF0Zm9ybToqKiAgDQogIFdvcmtzIHdpdGggR29vZ2xlIEFwcCBFbmdpbmUgKFB5dGhvbiwgSmF2YSksIFJ1Ynkgb24gUmFpbHMsIFBIUCBhbmQgYW55IG90aGVyIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgSFRUUCBmaWxlIHVwbG9hZHMuDQoNCiMjIFJlcXVpcmVtZW50cw0KKiBbalF1ZXJ5XShodHRwOi8vanF1ZXJ5LmNvbS8pIHYuIDEuNisNCiogW2pRdWVyeSBVSSB3aWRnZXQgZmFjdG9yeV0oaHR0cDovL3dpa2kuanF1ZXJ5dWkuY29tL3cvcGFnZS8xMjEzODEzNS9XaWRnZXQlMjBmYWN0b3J5KSB2LiAxLjguMTYrDQoqIFtqUXVlcnkgSWZyYW1lIFRyYW5zcG9ydCBwbHVnaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9ibG9iL21hc3Rlci9qcXVlcnkuaWZyYW1lLXRyYW5zcG9ydC5qcykgKGluY2x1ZGVkKQ0KKiBbSmF2YVNjcmlwdCBMb2FkIEltYWdlIGZ1bmN0aW9uXShodHRwOi8vYmx1ZWltcC5naXRodWIuY29tL0phdmFTY3JpcHQtTG9hZC1JbWFnZSkgdi4gMS4xLjMrIChvcHRpb25hbCkNCiogW0phdmFTY3JpcHQgVGVtcGxhdGVzIGVuZ2luZV0oaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvSmF2YVNjcmlwdC1UZW1wbGF0ZXMpIHYuIDEuMC4yKyAob3B0aW9uYWwpDQoNClRoZSBqUXVlcnkgVUkgd2lkZ2V0IGZhY3RvcnkgaXMgYSByZXF1aXJlbWVudCBmb3IgdGhlIGJhc2ljIEZpbGUgVXBsb2FkIHBsdWdpbiwgYnV0IHZlcnkgbGlnaHR3ZWlnaHQgd2l0aG91dCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiANClRoZSBVSSB2ZXJzaW9uIG9mIHRoZSBGaWxlIFVwbG9hZCBwbHVnaW4gYWxzbyByZXF1aXJlcyB0aGUgSmF2YVNjcmlwdCBUZW1wbGF0ZXMgZW5naW5lIGFuZCB0aGUgSmF2YVNjcmlwdCBMb2FkIEltYWdlIGZ1bmN0aW9uIChmb3IgdGhlIHVwbG9hZCBpbWFnZSBwcmV2aWV3cykuIFRoZXNlIGRlcGVuZGVuY2llcyBhcmUgbWFya2VkIGFzIG9wdGlvbmFsLCBhcyB0aGUgYmFzaWMgRmlsZSBVcGxvYWQgcGx1Z2luIGNhbiBiZSB1c2VkIHdpdGhvdXQgdGhlbSBhbmQgdGhlIFVJIHZlcnNpb24gb2YgdGhlIHBsdWdpbiBjYW4gYmUgZXh0ZW5kZWQgdG8gb3ZlcnJpZGUgdGhlc2UgZGVwZW5kZW5jaWVzIHdpdGggYWx0ZXJuYXRpdmUgc29sdXRpb25zLg0KDQpUaGUgcmVwb3NpdG9yeSBhbHNvIGluY2x1ZGVzIHRoZSBbalF1ZXJ5IFhEb21haW5SZXF1ZXN0IFRyYW5zcG9ydCBQbHVnaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9ibG9iL21hc3Rlci9jb3JzL2pxdWVyeS54ZHItdHJhbnNwb3J0LmpzKSwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIENyb3NzLWRvbWFpbiBBSkFYIHJlcXVlc3RzIGluIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciA+PSA4LiBJdCBpcyBvbmx5IGluY2x1ZGVkIGZvciB0aGUgW0RlbW9dKGh0dHA6Ly9ibHVlaW1wLmdpdGh1Yi5jb20valF1ZXJ5LUZpbGUtVXBsb2FkLyksIHdoaWNoIG1ha2VzIHVzZSBvZiBDcm9zcy1kb21haW4gREVMRVRFIHJlcXVlc3RzIChHRVQgcmVxdWVzdHMgZm9yIElFKSB0byBkZWxldGUgdXBsb2FkZWQgZmlsZXMgZnJvbSB0aGUgRGVtbyBGaWxlIFVwbG9hZCBzZXJ2aWNlLg0KDQpbQ3Jvc3MtZG9tYWluIEZpbGUgVXBsb2Fkc10oaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkL3dpa2kvQ3Jvc3MtZG9tYWluLXVwbG9hZHMpIHVzaW5nIHRoZSBbSWZyYW1lIFRyYW5zcG9ydCBwbHVnaW5dKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9ibG9iL21hc3Rlci9qcXVlcnkuaWZyYW1lLXRyYW5zcG9ydC5qcykgcmVxdWlyZSBhIHJlZGlyZWN0IGJhY2sgdG8gdGhlIG9yaWdpbiBzZXJ2ZXIgdG8gcmV0cmlldmUgdGhlIHVwbG9hZCByZXN1bHRzLiBUaGUgZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiBtYWtlcyB1c2Ugb2YgW3Jlc3VsdC5odG1sXShodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvYmxvYi9tYXN0ZXIvY29ycy9yZXN1bHQuaHRtbCkgYXMgcmVkaXJlY3QgcGFnZS4gU2VlIGFsc28gdGhlIGV4YW1wbGUgY29kZSBpbiBbYXBwbGljYXRpb24uanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZC9ibG9iL21hc3Rlci9hcHBsaWNhdGlvbi5qcykgYXMgd2VsbCBhcyB0aGUgZXhwbGFuYXRpb24gb2YgYWxsIFtmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkL3dpa2kvUGx1Z2luLWZpbGVzKS4NCg0KIyMgQnJvd3NlciBTdXBwb3J0ICh0ZXN0ZWQgdmVyc2lvbnMpDQoqIEdvb2dsZSBDaHJvbWUgLSA3LjArDQoqIEFwcGxlIFNhZmFyaSAtIDQuMCsNCiogTW96aWxsYSBGaXJlZm94IC0gMy4wKw0KKiBPcGVyYSAtIDEwLjArDQoqIE1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciA2LjArDQoNCkRyYWcgJiBEcm9wIGlzIG9ubHkgc3VwcG9ydGVkIG9uIEdvb2dsZSBDaHJvbWUsIEZpcmVmb3ggNC4wKyBhbmQgU2FmYXJpIDUuMCsuICANCk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciBoYXMgbm8gc3VwcG9ydCBmb3IgbXVsdGlwbGUgZmlsZSBzZWxlY3Rpb24gb3IgdXBsb2FkIHByb2dyZXNzLiAgDQpbRXh0ZW5kZWQgYnJvd3NlciBzdXBwb3J0IGluZm9ybWF0aW9uXShodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvd2lraS9Ccm93c2VyLXN1cHBvcnQpLg0KDQojIyBMaWNlbnNlDQpSZWxlYXNlZCB1bmRlciB0aGUgW01JVCBsaWNlbnNlXShodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCkuDQo=]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/vendor/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/vendor/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jquery-file-upload/vendor/jquery.ui.widget.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAqIGpRdWVyeSBVSSBXaWRnZXQgMS4xMC4zK2FtZA0KICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkDQogKg0KICogQ29weXJpZ2h0IDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycw0KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLg0KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQ0KICoNCiAqIGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL2pRdWVyeS53aWRnZXQvDQogKi8NCg0KKGZ1bmN0aW9uIChmYWN0b3J5KSB7DQogICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgew0KICAgICAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZToNCiAgICAgICAgZGVmaW5lKFsianF1ZXJ5Il0sIGZhY3RvcnkpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsczoNCiAgICAgICAgZmFjdG9yeShqUXVlcnkpOw0KICAgIH0NCn0oZnVuY3Rpb24oICQsIHVuZGVmaW5lZCApIHsNCg0KdmFyIHV1aWQgPSAwLA0KCXNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLA0KCV9jbGVhbkRhdGEgPSAkLmNsZWFuRGF0YTsNCiQuY2xlYW5EYXRhID0gZnVuY3Rpb24oIGVsZW1zICkgew0KCWZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgew0KCQl0cnkgew0KCQkJJCggZWxlbSApLnRyaWdnZXJIYW5kbGVyKCAicmVtb3ZlIiApOw0KCQkvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC84MjM1DQoJCX0gY2F0Y2goIGUgKSB7fQ0KCX0NCglfY2xlYW5EYXRhKCBlbGVtcyApOw0KfTsNCg0KJC53aWRnZXQgPSBmdW5jdGlvbiggbmFtZSwgYmFzZSwgcHJvdG90eXBlICkgew0KCXZhciBmdWxsTmFtZSwgZXhpc3RpbmdDb25zdHJ1Y3RvciwgY29uc3RydWN0b3IsIGJhc2VQcm90b3R5cGUsDQoJCS8vIHByb3hpZWRQcm90b3R5cGUgYWxsb3dzIHRoZSBwcm92aWRlZCBwcm90b3R5cGUgdG8gcmVtYWluIHVubW9kaWZpZWQNCgkJLy8gc28gdGhhdCBpdCBjYW4gYmUgdXNlZCBhcyBhIG1peGluIGZvciBtdWx0aXBsZSB3aWRnZXRzICgjODg3NikNCgkJcHJveGllZFByb3RvdHlwZSA9IHt9LA0KCQluYW1lc3BhY2UgPSBuYW1lLnNwbGl0KCAiLiIgKVsgMCBdOw0KDQoJbmFtZSA9IG5hbWUuc3BsaXQoICIuIiApWyAxIF07DQoJZnVsbE5hbWUgPSBuYW1lc3BhY2UgKyAiLSIgKyBuYW1lOw0KDQoJaWYgKCAhcHJvdG90eXBlICkgew0KCQlwcm90b3R5cGUgPSBiYXNlOw0KCQliYXNlID0gJC5XaWRnZXQ7DQoJfQ0KDQoJLy8gY3JlYXRlIHNlbGVjdG9yIGZvciBwbHVnaW4NCgkkLmV4cHJbICI6IiBdWyBmdWxsTmFtZS50b0xvd2VyQ2FzZSgpIF0gPSBmdW5jdGlvbiggZWxlbSApIHsNCgkJcmV0dXJuICEhJC5kYXRhKCBlbGVtLCBmdWxsTmFtZSApOw0KCX07DQoNCgkkWyBuYW1lc3BhY2UgXSA9ICRbIG5hbWVzcGFjZSBdIHx8IHt9Ow0KCWV4aXN0aW5nQ29uc3RydWN0b3IgPSAkWyBuYW1lc3BhY2UgXVsgbmFtZSBdOw0KCWNvbnN0cnVjdG9yID0gJFsgbmFtZXNwYWNlIF1bIG5hbWUgXSA9IGZ1bmN0aW9uKCBvcHRpb25zLCBlbGVtZW50ICkgew0KCQkvLyBhbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgIm5ldyIga2V5d29yZA0KCQlpZiAoICF0aGlzLl9jcmVhdGVXaWRnZXQgKSB7DQoJCQlyZXR1cm4gbmV3IGNvbnN0cnVjdG9yKCBvcHRpb25zLCBlbGVtZW50ICk7DQoJCX0NCg0KCQkvLyBhbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGZvciBzaW1wbGUgaW5oZXJpdGFuY2UNCgkJLy8gbXVzdCB1c2UgIm5ldyIga2V5d29yZCAodGhlIGNvZGUgYWJvdmUgYWx3YXlzIHBhc3NlcyBhcmdzKQ0KCQlpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7DQoJCQl0aGlzLl9jcmVhdGVXaWRnZXQoIG9wdGlvbnMsIGVsZW1lbnQgKTsNCgkJfQ0KCX07DQoJLy8gZXh0ZW5kIHdpdGggdGhlIGV4aXN0aW5nIGNvbnN0cnVjdG9yIHRvIGNhcnJ5IG92ZXIgYW55IHN0YXRpYyBwcm9wZXJ0aWVzDQoJJC5leHRlbmQoIGNvbnN0cnVjdG9yLCBleGlzdGluZ0NvbnN0cnVjdG9yLCB7DQoJCXZlcnNpb246IHByb3RvdHlwZS52ZXJzaW9uLA0KCQkvLyBjb3B5IHRoZSBvYmplY3QgdXNlZCB0byBjcmVhdGUgdGhlIHByb3RvdHlwZSBpbiBjYXNlIHdlIG5lZWQgdG8NCgkJLy8gcmVkZWZpbmUgdGhlIHdpZGdldCBsYXRlcg0KCQlfcHJvdG86ICQuZXh0ZW5kKCB7fSwgcHJvdG90eXBlICksDQoJCS8vIHRyYWNrIHdpZGdldHMgdGhhdCBpbmhlcml0IGZyb20gdGhpcyB3aWRnZXQgaW4gY2FzZSB0aGlzIHdpZGdldCBpcw0KCQkvLyByZWRlZmluZWQgYWZ0ZXIgYSB3aWRnZXQgaW5oZXJpdHMgZnJvbSBpdA0KCQlfY2hpbGRDb25zdHJ1Y3RvcnM6IFtdDQoJfSk7DQoNCgliYXNlUHJvdG90eXBlID0gbmV3IGJhc2UoKTsNCgkvLyB3ZSBuZWVkIHRvIG1ha2UgdGhlIG9wdGlvbnMgaGFzaCBhIHByb3BlcnR5IGRpcmVjdGx5IG9uIHRoZSBuZXcgaW5zdGFuY2UNCgkvLyBvdGhlcndpc2Ugd2UnbGwgbW9kaWZ5IHRoZSBvcHRpb25zIGhhc2ggb24gdGhlIHByb3RvdHlwZSB0aGF0IHdlJ3JlDQoJLy8gaW5oZXJpdGluZyBmcm9tDQoJYmFzZVByb3RvdHlwZS5vcHRpb25zID0gJC53aWRnZXQuZXh0ZW5kKCB7fSwgYmFzZVByb3RvdHlwZS5vcHRpb25zICk7DQoJJC5lYWNoKCBwcm90b3R5cGUsIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsNCgkJaWYgKCAhJC5pc0Z1bmN0aW9uKCB2YWx1ZSApICkgew0KCQkJcHJveGllZFByb3RvdHlwZVsgcHJvcCBdID0gdmFsdWU7DQoJCQlyZXR1cm47DQoJCX0NCgkJcHJveGllZFByb3RvdHlwZVsgcHJvcCBdID0gKGZ1bmN0aW9uKCkgew0KCQkJdmFyIF9zdXBlciA9IGZ1bmN0aW9uKCkgew0KCQkJCQlyZXR1cm4gYmFzZS5wcm90b3R5cGVbIHByb3AgXS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7DQoJCQkJfSwNCgkJCQlfc3VwZXJBcHBseSA9IGZ1bmN0aW9uKCBhcmdzICkgew0KCQkJCQlyZXR1cm4gYmFzZS5wcm90b3R5cGVbIHByb3AgXS5hcHBseSggdGhpcywgYXJncyApOw0KCQkJCX07DQoJCQlyZXR1cm4gZnVuY3Rpb24oKSB7DQoJCQkJdmFyIF9fc3VwZXIgPSB0aGlzLl9zdXBlciwNCgkJCQkJX19zdXBlckFwcGx5ID0gdGhpcy5fc3VwZXJBcHBseSwNCgkJCQkJcmV0dXJuVmFsdWU7DQoNCgkJCQl0aGlzLl9zdXBlciA9IF9zdXBlcjsNCgkJCQl0aGlzLl9zdXBlckFwcGx5ID0gX3N1cGVyQXBwbHk7DQoNCgkJCQlyZXR1cm5WYWx1ZSA9IHZhbHVlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsNCg0KCQkJCXRoaXMuX3N1cGVyID0gX19zdXBlcjsNCgkJCQl0aGlzLl9zdXBlckFwcGx5ID0gX19zdXBlckFwcGx5Ow0KDQoJCQkJcmV0dXJuIHJldHVyblZhbHVlOw0KCQkJfTsNCgkJfSkoKTsNCgl9KTsNCgljb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSAkLndpZGdldC5leHRlbmQoIGJhc2VQcm90b3R5cGUsIHsNCgkJLy8gVE9ETzogcmVtb3ZlIHN1cHBvcnQgZm9yIHdpZGdldEV2ZW50UHJlZml4DQoJCS8vIGFsd2F5cyB1c2UgdGhlIG5hbWUgKyBhIGNvbG9uIGFzIHRoZSBwcmVmaXgsIGUuZy4sIGRyYWdnYWJsZTpzdGFydA0KCQkvLyBkb24ndCBwcmVmaXggZm9yIHdpZGdldHMgdGhhdCBhcmVuJ3QgRE9NLWJhc2VkDQoJCXdpZGdldEV2ZW50UHJlZml4OiBleGlzdGluZ0NvbnN0cnVjdG9yID8gYmFzZVByb3RvdHlwZS53aWRnZXRFdmVudFByZWZpeCA6IG5hbWUNCgl9LCBwcm94aWVkUHJvdG90eXBlLCB7DQoJCWNvbnN0cnVjdG9yOiBjb25zdHJ1Y3RvciwNCgkJbmFtZXNwYWNlOiBuYW1lc3BhY2UsDQoJCXdpZGdldE5hbWU6IG5hbWUsDQoJCXdpZGdldEZ1bGxOYW1lOiBmdWxsTmFtZQ0KCX0pOw0KDQoJLy8gSWYgdGhpcyB3aWRnZXQgaXMgYmVpbmcgcmVkZWZpbmVkIHRoZW4gd2UgbmVlZCB0byBmaW5kIGFsbCB3aWRnZXRzIHRoYXQNCgkvLyBhcmUgaW5oZXJpdGluZyBmcm9tIGl0IGFuZCByZWRlZmluZSBhbGwgb2YgdGhlbSBzbyB0aGF0IHRoZXkgaW5oZXJpdCBmcm9tDQoJLy8gdGhlIG5ldyB2ZXJzaW9uIG9mIHRoaXMgd2lkZ2V0LiBXZSdyZSBlc3NlbnRpYWxseSB0cnlpbmcgdG8gcmVwbGFjZSBvbmUNCgkvLyBsZXZlbCBpbiB0aGUgcHJvdG90eXBlIGNoYWluLg0KCWlmICggZXhpc3RpbmdDb25zdHJ1Y3RvciApIHsNCgkJJC5lYWNoKCBleGlzdGluZ0NvbnN0cnVjdG9yLl9jaGlsZENvbnN0cnVjdG9ycywgZnVuY3Rpb24oIGksIGNoaWxkICkgew0KCQkJdmFyIGNoaWxkUHJvdG90eXBlID0gY2hpbGQucHJvdG90eXBlOw0KDQoJCQkvLyByZWRlZmluZSB0aGUgY2hpbGQgd2lkZ2V0IHVzaW5nIHRoZSBzYW1lIHByb3RvdHlwZSB0aGF0IHdhcw0KCQkJLy8gb3JpZ2luYWxseSB1c2VkLCBidXQgaW5oZXJpdCBmcm9tIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgYmFzZQ0KCQkJJC53aWRnZXQoIGNoaWxkUHJvdG90eXBlLm5hbWVzcGFjZSArICIuIiArIGNoaWxkUHJvdG90eXBlLndpZGdldE5hbWUsIGNvbnN0cnVjdG9yLCBjaGlsZC5fcHJvdG8gKTsNCgkJfSk7DQoJCS8vIHJlbW92ZSB0aGUgbGlzdCBvZiBleGlzdGluZyBjaGlsZCBjb25zdHJ1Y3RvcnMgZnJvbSB0aGUgb2xkIGNvbnN0cnVjdG9yDQoJCS8vIHNvIHRoZSBvbGQgY2hpbGQgY29uc3RydWN0b3JzIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZA0KCQlkZWxldGUgZXhpc3RpbmdDb25zdHJ1Y3Rvci5fY2hpbGRDb25zdHJ1Y3RvcnM7DQoJfSBlbHNlIHsNCgkJYmFzZS5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaCggY29uc3RydWN0b3IgKTsNCgl9DQoNCgkkLndpZGdldC5icmlkZ2UoIG5hbWUsIGNvbnN0cnVjdG9yICk7DQp9Ow0KDQokLndpZGdldC5leHRlbmQgPSBmdW5jdGlvbiggdGFyZ2V0ICkgew0KCXZhciBpbnB1dCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApLA0KCQlpbnB1dEluZGV4ID0gMCwNCgkJaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGgsDQoJCWtleSwNCgkJdmFsdWU7DQoJZm9yICggOyBpbnB1dEluZGV4IDwgaW5wdXRMZW5ndGg7IGlucHV0SW5kZXgrKyApIHsNCgkJZm9yICgga2V5IGluIGlucHV0WyBpbnB1dEluZGV4IF0gKSB7DQoJCQl2YWx1ZSA9IGlucHV0WyBpbnB1dEluZGV4IF1bIGtleSBdOw0KCQkJaWYgKCBpbnB1dFsgaW5wdXRJbmRleCBdLmhhc093blByb3BlcnR5KCBrZXkgKSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgew0KCQkJCS8vIENsb25lIG9iamVjdHMNCgkJCQlpZiAoICQuaXNQbGFpbk9iamVjdCggdmFsdWUgKSApIHsNCgkJCQkJdGFyZ2V0WyBrZXkgXSA9ICQuaXNQbGFpbk9iamVjdCggdGFyZ2V0WyBrZXkgXSApID8NCgkJCQkJCSQud2lkZ2V0LmV4dGVuZCgge30sIHRhcmdldFsga2V5IF0sIHZhbHVlICkgOg0KCQkJCQkJLy8gRG9uJ3QgZXh0ZW5kIHN0cmluZ3MsIGFycmF5cywgZXRjLiB3aXRoIG9iamVjdHMNCgkJCQkJCSQud2lkZ2V0LmV4dGVuZCgge30sIHZhbHVlICk7DQoJCQkJLy8gQ29weSBldmVyeXRoaW5nIGVsc2UgYnkgcmVmZXJlbmNlDQoJCQkJfSBlbHNlIHsNCgkJCQkJdGFyZ2V0WyBrZXkgXSA9IHZhbHVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gdGFyZ2V0Ow0KfTsNCg0KJC53aWRnZXQuYnJpZGdlID0gZnVuY3Rpb24oIG5hbWUsIG9iamVjdCApIHsNCgl2YXIgZnVsbE5hbWUgPSBvYmplY3QucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lIHx8IG5hbWU7DQoJJC5mblsgbmFtZSBdID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7DQoJCXZhciBpc01ldGhvZENhbGwgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIsDQoJCQlhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICksDQoJCQlyZXR1cm5WYWx1ZSA9IHRoaXM7DQoNCgkJLy8gYWxsb3cgbXVsdGlwbGUgaGFzaGVzIHRvIGJlIHBhc3NlZCBvbiBpbml0DQoJCW9wdGlvbnMgPSAhaXNNZXRob2RDYWxsICYmIGFyZ3MubGVuZ3RoID8NCgkJCSQud2lkZ2V0LmV4dGVuZC5hcHBseSggbnVsbCwgWyBvcHRpb25zIF0uY29uY2F0KGFyZ3MpICkgOg0KCQkJb3B0aW9uczsNCg0KCQlpZiAoIGlzTWV0aG9kQ2FsbCApIHsNCgkJCXRoaXMuZWFjaChmdW5jdGlvbigpIHsNCgkJCQl2YXIgbWV0aG9kVmFsdWUsDQoJCQkJCWluc3RhbmNlID0gJC5kYXRhKCB0aGlzLCBmdWxsTmFtZSApOw0KCQkJCWlmICggIWluc3RhbmNlICkgew0KCQkJCQlyZXR1cm4gJC5lcnJvciggImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gIiArIG5hbWUgKyAiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyAiICsNCgkJCQkJCSJhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJyIgKyBvcHRpb25zICsgIiciICk7DQoJCQkJfQ0KCQkJCWlmICggISQuaXNGdW5jdGlvbiggaW5zdGFuY2Vbb3B0aW9uc10gKSB8fCBvcHRpb25zLmNoYXJBdCggMCApID09PSAiXyIgKSB7DQoJCQkJCXJldHVybiAkLmVycm9yKCAibm8gc3VjaCBtZXRob2QgJyIgKyBvcHRpb25zICsgIicgZm9yICIgKyBuYW1lICsgIiB3aWRnZXQgaW5zdGFuY2UiICk7DQoJCQkJfQ0KCQkJCW1ldGhvZFZhbHVlID0gaW5zdGFuY2VbIG9wdGlvbnMgXS5hcHBseSggaW5zdGFuY2UsIGFyZ3MgKTsNCgkJCQlpZiAoIG1ldGhvZFZhbHVlICE9PSBpbnN0YW5jZSAmJiBtZXRob2RWYWx1ZSAhPT0gdW5kZWZpbmVkICkgew0KCQkJCQlyZXR1cm5WYWx1ZSA9IG1ldGhvZFZhbHVlICYmIG1ldGhvZFZhbHVlLmpxdWVyeSA/DQoJCQkJCQlyZXR1cm5WYWx1ZS5wdXNoU3RhY2soIG1ldGhvZFZhbHVlLmdldCgpICkgOg0KCQkJCQkJbWV0aG9kVmFsdWU7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9KTsNCgkJfSBlbHNlIHsNCgkJCXRoaXMuZWFjaChmdW5jdGlvbigpIHsNCgkJCQl2YXIgaW5zdGFuY2UgPSAkLmRhdGEoIHRoaXMsIGZ1bGxOYW1lICk7DQoJCQkJaWYgKCBpbnN0YW5jZSApIHsNCgkJCQkJaW5zdGFuY2Uub3B0aW9uKCBvcHRpb25zIHx8IHt9ICkuX2luaXQoKTsNCgkJCQl9IGVsc2Ugew0KCQkJCQkkLmRhdGEoIHRoaXMsIGZ1bGxOYW1lLCBuZXcgb2JqZWN0KCBvcHRpb25zLCB0aGlzICkgKTsNCgkJCQl9DQoJCQl9KTsNCgkJfQ0KDQoJCXJldHVybiByZXR1cm5WYWx1ZTsNCgl9Ow0KfTsNCg0KJC5XaWRnZXQgPSBmdW5jdGlvbiggLyogb3B0aW9ucywgZWxlbWVudCAqLyApIHt9Ow0KJC5XaWRnZXQuX2NoaWxkQ29uc3RydWN0b3JzID0gW107DQoNCiQuV2lkZ2V0LnByb3RvdHlwZSA9IHsNCgl3aWRnZXROYW1lOiAid2lkZ2V0IiwNCgl3aWRnZXRFdmVudFByZWZpeDogIiIsDQoJZGVmYXVsdEVsZW1lbnQ6ICI8ZGl2PiIsDQoJb3B0aW9uczogew0KCQlkaXNhYmxlZDogZmFsc2UsDQoNCgkJLy8gY2FsbGJhY2tzDQoJCWNyZWF0ZTogbnVsbA0KCX0sDQoJX2NyZWF0ZVdpZGdldDogZnVuY3Rpb24oIG9wdGlvbnMsIGVsZW1lbnQgKSB7DQoJCWVsZW1lbnQgPSAkKCBlbGVtZW50IHx8IHRoaXMuZGVmYXVsdEVsZW1lbnQgfHwgdGhpcyApWyAwIF07DQoJCXRoaXMuZWxlbWVudCA9ICQoIGVsZW1lbnQgKTsNCgkJdGhpcy51dWlkID0gdXVpZCsrOw0KCQl0aGlzLmV2ZW50TmFtZXNwYWNlID0gIi4iICsgdGhpcy53aWRnZXROYW1lICsgdGhpcy51dWlkOw0KCQl0aGlzLm9wdGlvbnMgPSAkLndpZGdldC5leHRlbmQoIHt9LA0KCQkJdGhpcy5vcHRpb25zLA0KCQkJdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLA0KCQkJb3B0aW9ucyApOw0KDQoJCXRoaXMuYmluZGluZ3MgPSAkKCk7DQoJCXRoaXMuaG92ZXJhYmxlID0gJCgpOw0KCQl0aGlzLmZvY3VzYWJsZSA9ICQoKTsNCg0KCQlpZiAoIGVsZW1lbnQgIT09IHRoaXMgKSB7DQoJCQkkLmRhdGEoIGVsZW1lbnQsIHRoaXMud2lkZ2V0RnVsbE5hbWUsIHRoaXMgKTsNCgkJCXRoaXMuX29uKCB0cnVlLCB0aGlzLmVsZW1lbnQsIHsNCgkJCQlyZW1vdmU6IGZ1bmN0aW9uKCBldmVudCApIHsNCgkJCQkJaWYgKCBldmVudC50YXJnZXQgPT09IGVsZW1lbnQgKSB7DQoJCQkJCQl0aGlzLmRlc3Ryb3koKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0pOw0KCQkJdGhpcy5kb2N1bWVudCA9ICQoIGVsZW1lbnQuc3R5bGUgPw0KCQkJCS8vIGVsZW1lbnQgd2l0aGluIHRoZSBkb2N1bWVudA0KCQkJCWVsZW1lbnQub3duZXJEb2N1bWVudCA6DQoJCQkJLy8gZWxlbWVudCBpcyB3aW5kb3cgb3IgZG9jdW1lbnQNCgkJCQllbGVtZW50LmRvY3VtZW50IHx8IGVsZW1lbnQgKTsNCgkJCXRoaXMud2luZG93ID0gJCggdGhpcy5kb2N1bWVudFswXS5kZWZhdWx0VmlldyB8fCB0aGlzLmRvY3VtZW50WzBdLnBhcmVudFdpbmRvdyApOw0KCQl9DQoNCgkJdGhpcy5fY3JlYXRlKCk7DQoJCXRoaXMuX3RyaWdnZXIoICJjcmVhdGUiLCBudWxsLCB0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSApOw0KCQl0aGlzLl9pbml0KCk7DQoJfSwNCglfZ2V0Q3JlYXRlT3B0aW9uczogJC5ub29wLA0KCV9nZXRDcmVhdGVFdmVudERhdGE6ICQubm9vcCwNCglfY3JlYXRlOiAkLm5vb3AsDQoJX2luaXQ6ICQubm9vcCwNCg0KCWRlc3Ryb3k6IGZ1bmN0aW9uKCkgew0KCQl0aGlzLl9kZXN0cm95KCk7DQoJCS8vIHdlIGNhbiBwcm9iYWJseSByZW1vdmUgdGhlIHVuYmluZCBjYWxscyBpbiAyLjANCgkJLy8gYWxsIGV2ZW50IGJpbmRpbmdzIHNob3VsZCBnbyB0aHJvdWdoIHRoaXMuX29uKCkNCgkJdGhpcy5lbGVtZW50DQoJCQkudW5iaW5kKCB0aGlzLmV2ZW50TmFtZXNwYWNlICkNCgkJCS8vIDEuOSBCQyBmb3IgIzc4MTANCgkJCS8vIFRPRE8gcmVtb3ZlIGR1YWwgc3RvcmFnZQ0KCQkJLnJlbW92ZURhdGEoIHRoaXMud2lkZ2V0TmFtZSApDQoJCQkucmVtb3ZlRGF0YSggdGhpcy53aWRnZXRGdWxsTmFtZSApDQoJCQkvLyBzdXBwb3J0OiBqcXVlcnkgPDEuNi4zDQoJCQkvLyBodHRwOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC85NDEzDQoJCQkucmVtb3ZlRGF0YSggJC5jYW1lbENhc2UoIHRoaXMud2lkZ2V0RnVsbE5hbWUgKSApOw0KCQl0aGlzLndpZGdldCgpDQoJCQkudW5iaW5kKCB0aGlzLmV2ZW50TmFtZXNwYWNlICkNCgkJCS5yZW1vdmVBdHRyKCAiYXJpYS1kaXNhYmxlZCIgKQ0KCQkJLnJlbW92ZUNsYXNzKA0KCQkJCXRoaXMud2lkZ2V0RnVsbE5hbWUgKyAiLWRpc2FibGVkICIgKw0KCQkJCSJ1aS1zdGF0ZS1kaXNhYmxlZCIgKTsNCg0KCQkvLyBjbGVhbiB1cCBldmVudHMgYW5kIHN0YXRlcw0KCQl0aGlzLmJpbmRpbmdzLnVuYmluZCggdGhpcy5ldmVudE5hbWVzcGFjZSApOw0KCQl0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWhvdmVyIiApOw0KCQl0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWZvY3VzIiApOw0KCX0sDQoJX2Rlc3Ryb3k6ICQubm9vcCwNCg0KCXdpZGdldDogZnVuY3Rpb24oKSB7DQoJCXJldHVybiB0aGlzLmVsZW1lbnQ7DQoJfSwNCg0KCW9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7DQoJCXZhciBvcHRpb25zID0ga2V5LA0KCQkJcGFydHMsDQoJCQljdXJPcHRpb24sDQoJCQlpOw0KDQoJCWlmICggYXJndW1lbnRzLmxlbmd0aCA9PT0gMCApIHsNCgkJCS8vIGRvbid0IHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgaGFzaA0KCQkJcmV0dXJuICQud2lkZ2V0LmV4dGVuZCgge30sIHRoaXMub3B0aW9ucyApOw0KCQl9DQoNCgkJaWYgKCB0eXBlb2Yga2V5ID09PSAic3RyaW5nIiApIHsNCgkJCS8vIGhhbmRsZSBuZXN0ZWQga2V5cywgZS5nLiwgImZvby5iYXIiID0+IHsgZm9vOiB7IGJhcjogX19fIH0gfQ0KCQkJb3B0aW9ucyA9IHt9Ow0KCQkJcGFydHMgPSBrZXkuc3BsaXQoICIuIiApOw0KCQkJa2V5ID0gcGFydHMuc2hpZnQoKTsNCgkJCWlmICggcGFydHMubGVuZ3RoICkgew0KCQkJCWN1ck9wdGlvbiA9IG9wdGlvbnNbIGtleSBdID0gJC53aWRnZXQuZXh0ZW5kKCB7fSwgdGhpcy5vcHRpb25zWyBrZXkgXSApOw0KCQkJCWZvciAoIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrICkgew0KCQkJCQljdXJPcHRpb25bIHBhcnRzWyBpIF0gXSA9IGN1ck9wdGlvblsgcGFydHNbIGkgXSBdIHx8IHt9Ow0KCQkJCQljdXJPcHRpb24gPSBjdXJPcHRpb25bIHBhcnRzWyBpIF0gXTsNCgkJCQl9DQoJCQkJa2V5ID0gcGFydHMucG9wKCk7DQoJCQkJaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgew0KCQkJCQlyZXR1cm4gY3VyT3B0aW9uWyBrZXkgXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGN1ck9wdGlvblsga2V5IF07DQoJCQkJfQ0KCQkJCWN1ck9wdGlvblsga2V5IF0gPSB2YWx1ZTsNCgkJCX0gZWxzZSB7DQoJCQkJaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgew0KCQkJCQlyZXR1cm4gdGhpcy5vcHRpb25zWyBrZXkgXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHRoaXMub3B0aW9uc1sga2V5IF07DQoJCQkJfQ0KCQkJCW9wdGlvbnNbIGtleSBdID0gdmFsdWU7DQoJCQl9DQoJCX0NCg0KCQl0aGlzLl9zZXRPcHRpb25zKCBvcHRpb25zICk7DQoNCgkJcmV0dXJuIHRoaXM7DQoJfSwNCglfc2V0T3B0aW9uczogZnVuY3Rpb24oIG9wdGlvbnMgKSB7DQoJCXZhciBrZXk7DQoNCgkJZm9yICgga2V5IGluIG9wdGlvbnMgKSB7DQoJCQl0aGlzLl9zZXRPcHRpb24oIGtleSwgb3B0aW9uc1sga2V5IF0gKTsNCgkJfQ0KDQoJCXJldHVybiB0aGlzOw0KCX0sDQoJX3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7DQoJCXRoaXMub3B0aW9uc1sga2V5IF0gPSB2YWx1ZTsNCg0KCQlpZiAoIGtleSA9PT0gImRpc2FibGVkIiApIHsNCgkJCXRoaXMud2lkZ2V0KCkNCgkJCQkudG9nZ2xlQ2xhc3MoIHRoaXMud2lkZ2V0RnVsbE5hbWUgKyAiLWRpc2FibGVkIHVpLXN0YXRlLWRpc2FibGVkIiwgISF2YWx1ZSApDQoJCQkJLmF0dHIoICJhcmlhLWRpc2FibGVkIiwgdmFsdWUgKTsNCgkJCXRoaXMuaG92ZXJhYmxlLnJlbW92ZUNsYXNzKCAidWktc3RhdGUtaG92ZXIiICk7DQoJCQl0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWZvY3VzIiApOw0KCQl9DQoNCgkJcmV0dXJuIHRoaXM7DQoJfSwNCg0KCWVuYWJsZTogZnVuY3Rpb24oKSB7DQoJCXJldHVybiB0aGlzLl9zZXRPcHRpb24oICJkaXNhYmxlZCIsIGZhbHNlICk7DQoJfSwNCglkaXNhYmxlOiBmdW5jdGlvbigpIHsNCgkJcmV0dXJuIHRoaXMuX3NldE9wdGlvbiggImRpc2FibGVkIiwgdHJ1ZSApOw0KCX0sDQoNCglfb246IGZ1bmN0aW9uKCBzdXBwcmVzc0Rpc2FibGVkQ2hlY2ssIGVsZW1lbnQsIGhhbmRsZXJzICkgew0KCQl2YXIgZGVsZWdhdGVFbGVtZW50LA0KCQkJaW5zdGFuY2UgPSB0aGlzOw0KDQoJCS8vIG5vIHN1cHByZXNzRGlzYWJsZWRDaGVjayBmbGFnLCBzaHVmZmxlIGFyZ3VtZW50cw0KCQlpZiAoIHR5cGVvZiBzdXBwcmVzc0Rpc2FibGVkQ2hlY2sgIT09ICJib29sZWFuIiApIHsNCgkJCWhhbmRsZXJzID0gZWxlbWVudDsNCgkJCWVsZW1lbnQgPSBzdXBwcmVzc0Rpc2FibGVkQ2hlY2s7DQoJCQlzdXBwcmVzc0Rpc2FibGVkQ2hlY2sgPSBmYWxzZTsNCgkJfQ0KDQoJCS8vIG5vIGVsZW1lbnQgYXJndW1lbnQsIHNodWZmbGUgYW5kIHVzZSB0aGlzLmVsZW1lbnQNCgkJaWYgKCAhaGFuZGxlcnMgKSB7DQoJCQloYW5kbGVycyA9IGVsZW1lbnQ7DQoJCQllbGVtZW50ID0gdGhpcy5lbGVtZW50Ow0KCQkJZGVsZWdhdGVFbGVtZW50ID0gdGhpcy53aWRnZXQoKTsNCgkJfSBlbHNlIHsNCgkJCS8vIGFjY2VwdCBzZWxlY3RvcnMsIERPTSBlbGVtZW50cw0KCQkJZWxlbWVudCA9IGRlbGVnYXRlRWxlbWVudCA9ICQoIGVsZW1lbnQgKTsNCgkJCXRoaXMuYmluZGluZ3MgPSB0aGlzLmJpbmRpbmdzLmFkZCggZWxlbWVudCApOw0KCQl9DQoNCgkJJC5lYWNoKCBoYW5kbGVycywgZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVyICkgew0KCQkJZnVuY3Rpb24gaGFuZGxlclByb3h5KCkgew0KCQkJCS8vIGFsbG93IHdpZGdldHMgdG8gY3VzdG9taXplIHRoZSBkaXNhYmxlZCBoYW5kbGluZw0KCQkJCS8vIC0gZGlzYWJsZWQgYXMgYW4gYXJyYXkgaW5zdGVhZCBvZiBib29sZWFuDQoJCQkJLy8gLSBkaXNhYmxlZCBjbGFzcyBhcyBtZXRob2QgZm9yIGRpc2FibGluZyBpbmRpdmlkdWFsIHBhcnRzDQoJCQkJaWYgKCAhc3VwcHJlc3NEaXNhYmxlZENoZWNrICYmDQoJCQkJCQkoIGluc3RhbmNlLm9wdGlvbnMuZGlzYWJsZWQgPT09IHRydWUgfHwNCgkJCQkJCQkkKCB0aGlzICkuaGFzQ2xhc3MoICJ1aS1zdGF0ZS1kaXNhYmxlZCIgKSApICkgew0KCQkJCQlyZXR1cm47DQoJCQkJfQ0KCQkJCXJldHVybiAoIHR5cGVvZiBoYW5kbGVyID09PSAic3RyaW5nIiA/IGluc3RhbmNlWyBoYW5kbGVyIF0gOiBoYW5kbGVyICkNCgkJCQkJLmFwcGx5KCBpbnN0YW5jZSwgYXJndW1lbnRzICk7DQoJCQl9DQoNCgkJCS8vIGNvcHkgdGhlIGd1aWQgc28gZGlyZWN0IHVuYmluZGluZyB3b3Jrcw0KCQkJaWYgKCB0eXBlb2YgaGFuZGxlciAhPT0gInN0cmluZyIgKSB7DQoJCQkJaGFuZGxlclByb3h5Lmd1aWQgPSBoYW5kbGVyLmd1aWQgPQ0KCQkJCQloYW5kbGVyLmd1aWQgfHwgaGFuZGxlclByb3h5Lmd1aWQgfHwgJC5ndWlkKys7DQoJCQl9DQoNCgkJCXZhciBtYXRjaCA9IGV2ZW50Lm1hdGNoKCAvXihcdyspXHMqKC4qKSQvICksDQoJCQkJZXZlbnROYW1lID0gbWF0Y2hbMV0gKyBpbnN0YW5jZS5ldmVudE5hbWVzcGFjZSwNCgkJCQlzZWxlY3RvciA9IG1hdGNoWzJdOw0KCQkJaWYgKCBzZWxlY3RvciApIHsNCgkJCQlkZWxlZ2F0ZUVsZW1lbnQuZGVsZWdhdGUoIHNlbGVjdG9yLCBldmVudE5hbWUsIGhhbmRsZXJQcm94eSApOw0KCQkJfSBlbHNlIHsNCgkJCQllbGVtZW50LmJpbmQoIGV2ZW50TmFtZSwgaGFuZGxlclByb3h5ICk7DQoJCQl9DQoJCX0pOw0KCX0sDQoNCglfb2ZmOiBmdW5jdGlvbiggZWxlbWVudCwgZXZlbnROYW1lICkgew0KCQlldmVudE5hbWUgPSAoZXZlbnROYW1lIHx8ICIiKS5zcGxpdCggIiAiICkuam9pbiggdGhpcy5ldmVudE5hbWVzcGFjZSArICIgIiApICsgdGhpcy5ldmVudE5hbWVzcGFjZTsNCgkJZWxlbWVudC51bmJpbmQoIGV2ZW50TmFtZSApLnVuZGVsZWdhdGUoIGV2ZW50TmFtZSApOw0KCX0sDQoNCglfZGVsYXk6IGZ1bmN0aW9uKCBoYW5kbGVyLCBkZWxheSApIHsNCgkJZnVuY3Rpb24gaGFuZGxlclByb3h5KCkgew0KCQkJcmV0dXJuICggdHlwZW9mIGhhbmRsZXIgPT09ICJzdHJpbmciID8gaW5zdGFuY2VbIGhhbmRsZXIgXSA6IGhhbmRsZXIgKQ0KCQkJCS5hcHBseSggaW5zdGFuY2UsIGFyZ3VtZW50cyApOw0KCQl9DQoJCXZhciBpbnN0YW5jZSA9IHRoaXM7DQoJCXJldHVybiBzZXRUaW1lb3V0KCBoYW5kbGVyUHJveHksIGRlbGF5IHx8IDAgKTsNCgl9LA0KDQoJX2hvdmVyYWJsZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7DQoJCXRoaXMuaG92ZXJhYmxlID0gdGhpcy5ob3ZlcmFibGUuYWRkKCBlbGVtZW50ICk7DQoJCXRoaXMuX29uKCBlbGVtZW50LCB7DQoJCQltb3VzZWVudGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7DQoJCQkJJCggZXZlbnQuY3VycmVudFRhcmdldCApLmFkZENsYXNzKCAidWktc3RhdGUtaG92ZXIiICk7DQoJCQl9LA0KCQkJbW91c2VsZWF2ZTogZnVuY3Rpb24oIGV2ZW50ICkgew0KCQkJCSQoIGV2ZW50LmN1cnJlbnRUYXJnZXQgKS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWhvdmVyIiApOw0KCQkJfQ0KCQl9KTsNCgl9LA0KDQoJX2ZvY3VzYWJsZTogZnVuY3Rpb24oIGVsZW1lbnQgKSB7DQoJCXRoaXMuZm9jdXNhYmxlID0gdGhpcy5mb2N1c2FibGUuYWRkKCBlbGVtZW50ICk7DQoJCXRoaXMuX29uKCBlbGVtZW50LCB7DQoJCQlmb2N1c2luOiBmdW5jdGlvbiggZXZlbnQgKSB7DQoJCQkJJCggZXZlbnQuY3VycmVudFRhcmdldCApLmFkZENsYXNzKCAidWktc3RhdGUtZm9jdXMiICk7DQoJCQl9LA0KCQkJZm9jdXNvdXQ6IGZ1bmN0aW9uKCBldmVudCApIHsNCgkJCQkkKCBldmVudC5jdXJyZW50VGFyZ2V0ICkucmVtb3ZlQ2xhc3MoICJ1aS1zdGF0ZS1mb2N1cyIgKTsNCgkJCX0NCgkJfSk7DQoJfSwNCg0KCV90cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZXZlbnQsIGRhdGEgKSB7DQoJCXZhciBwcm9wLCBvcmlnLA0KCQkJY2FsbGJhY2sgPSB0aGlzLm9wdGlvbnNbIHR5cGUgXTsNCg0KCQlkYXRhID0gZGF0YSB8fCB7fTsNCgkJZXZlbnQgPSAkLkV2ZW50KCBldmVudCApOw0KCQlldmVudC50eXBlID0gKCB0eXBlID09PSB0aGlzLndpZGdldEV2ZW50UHJlZml4ID8NCgkJCXR5cGUgOg0KCQkJdGhpcy53aWRnZXRFdmVudFByZWZpeCArIHR5cGUgKS50b0xvd2VyQ2FzZSgpOw0KCQkvLyB0aGUgb3JpZ2luYWwgZXZlbnQgbWF5IGNvbWUgZnJvbSBhbnkgZWxlbWVudA0KCQkvLyBzbyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSB0YXJnZXQgb24gdGhlIG5ldyBldmVudA0KCQlldmVudC50YXJnZXQgPSB0aGlzLmVsZW1lbnRbIDAgXTsNCg0KCQkvLyBjb3B5IG9yaWdpbmFsIGV2ZW50IHByb3BlcnRpZXMgb3ZlciB0byB0aGUgbmV3IGV2ZW50DQoJCW9yaWcgPSBldmVudC5vcmlnaW5hbEV2ZW50Ow0KCQlpZiAoIG9yaWcgKSB7DQoJCQlmb3IgKCBwcm9wIGluIG9yaWcgKSB7DQoJCQkJaWYgKCAhKCBwcm9wIGluIGV2ZW50ICkgKSB7DQoJCQkJCWV2ZW50WyBwcm9wIF0gPSBvcmlnWyBwcm9wIF07DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJdGhpcy5lbGVtZW50LnRyaWdnZXIoIGV2ZW50LCBkYXRhICk7DQoJCXJldHVybiAhKCAkLmlzRnVuY3Rpb24oIGNhbGxiYWNrICkgJiYNCgkJCWNhbGxiYWNrLmFwcGx5KCB0aGlzLmVsZW1lbnRbMF0sIFsgZXZlbnQgXS5jb25jYXQoIGRhdGEgKSApID09PSBmYWxzZSB8fA0KCQkJZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKTsNCgl9DQp9Ow0KDQokLmVhY2goIHsgc2hvdzogImZhZGVJbiIsIGhpZGU6ICJmYWRlT3V0IiB9LCBmdW5jdGlvbiggbWV0aG9kLCBkZWZhdWx0RWZmZWN0ICkgew0KCSQuV2lkZ2V0LnByb3RvdHlwZVsgIl8iICsgbWV0aG9kIF0gPSBmdW5jdGlvbiggZWxlbWVudCwgb3B0aW9ucywgY2FsbGJhY2sgKSB7DQoJCWlmICggdHlwZW9mIG9wdGlvbnMgPT09ICJzdHJpbmciICkgew0KCQkJb3B0aW9ucyA9IHsgZWZmZWN0OiBvcHRpb25zIH07DQoJCX0NCgkJdmFyIGhhc09wdGlvbnMsDQoJCQllZmZlY3ROYW1lID0gIW9wdGlvbnMgPw0KCQkJCW1ldGhvZCA6DQoJCQkJb3B0aW9ucyA9PT0gdHJ1ZSB8fCB0eXBlb2Ygb3B0aW9ucyA9PT0gIm51bWJlciIgPw0KCQkJCQlkZWZhdWx0RWZmZWN0IDoNCgkJCQkJb3B0aW9ucy5lZmZlY3QgfHwgZGVmYXVsdEVmZmVjdDsNCgkJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307DQoJCWlmICggdHlwZW9mIG9wdGlvbnMgPT09ICJudW1iZXIiICkgew0KCQkJb3B0aW9ucyA9IHsgZHVyYXRpb246IG9wdGlvbnMgfTsNCgkJfQ0KCQloYXNPcHRpb25zID0gISQuaXNFbXB0eU9iamVjdCggb3B0aW9ucyApOw0KCQlvcHRpb25zLmNvbXBsZXRlID0gY2FsbGJhY2s7DQoJCWlmICggb3B0aW9ucy5kZWxheSApIHsNCgkJCWVsZW1lbnQuZGVsYXkoIG9wdGlvbnMuZGVsYXkgKTsNCgkJfQ0KCQlpZiAoIGhhc09wdGlvbnMgJiYgJC5lZmZlY3RzICYmICQuZWZmZWN0cy5lZmZlY3RbIGVmZmVjdE5hbWUgXSApIHsNCgkJCWVsZW1lbnRbIG1ldGhvZCBdKCBvcHRpb25zICk7DQoJCX0gZWxzZSBpZiAoIGVmZmVjdE5hbWUgIT09IG1ldGhvZCAmJiBlbGVtZW50WyBlZmZlY3ROYW1lIF0gKSB7DQoJCQllbGVtZW50WyBlZmZlY3ROYW1lIF0oIG9wdGlvbnMuZHVyYXRpb24sIG9wdGlvbnMuZWFzaW5nLCBjYWxsYmFjayApOw0KCQl9IGVsc2Ugew0KCQkJZWxlbWVudC5xdWV1ZShmdW5jdGlvbiggbmV4dCApIHsNCgkJCQkkKCB0aGlzIClbIG1ldGhvZCBdKCk7DQoJCQkJaWYgKCBjYWxsYmFjayApIHsNCgkJCQkJY2FsbGJhY2suY2FsbCggZWxlbWVudFsgMCBdICk7DQoJCQkJfQ0KCQkJCW5leHQoKTsNCgkJCX0pOw0KCQl9DQoJfTsNCn0pOw0KDQp9KSk7DQo=]]></data>
	</file>
	<file>
	  <filename>/js/jqueryrotate/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jqueryrotate/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jqueryrotate/jQueryRotate-2.2.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVkVSU0lPTjogMi4yIExBU1QgVVBEQVRFOiAxMy4wMy4yMDEyDQovKiANCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHANCiAqIA0KICogTWFkZSBieSBXaWxxMzIsIHdpbHEzMkBnbWFpbC5jb20sIFdyb2NsYXcsIFBvbGFuZCwgMDEuMjAwOQ0KICogV2Vic2l0ZTogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2pxdWVyeXJvdGF0ZS8gDQogKi8NCihmdW5jdGlvbihqKXtmb3IodmFyIGQsaz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLnN0eWxlLGg9WyJ0cmFuc2Zvcm1Qcm9wZXJ0eSIsIldlYmtpdFRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSIsIk1velRyYW5zZm9ybSJdLGc9MDtnPGgubGVuZ3RoO2crKyl2b2lkIDAhPT1rW2hbZ11dJiYoZD1oW2ddKTt2YXIgaT0idiI9PSJcdiI7alF1ZXJ5LmZuLmV4dGVuZCh7cm90YXRlOmZ1bmN0aW9uKGEpe2lmKCEoMD09PXRoaXMubGVuZ3RofHwidW5kZWZpbmVkIj09dHlwZW9mIGEpKXsibnVtYmVyIj09dHlwZW9mIGEmJihhPXthbmdsZTphfSk7Zm9yKHZhciBiPVtdLGM9MCxmPXRoaXMubGVuZ3RoO2M8ZjtjKyspe3ZhciBlPXRoaXMuZ2V0KGMpO2lmKCFlLldpbHEzMnx8IWUuV2lscTMyLlBob3RvRWZmZWN0KXt2YXIgZD1qLmV4dGVuZCghMCx7fSxhKSxlPShuZXcgV2lscTMyLlBob3RvRWZmZWN0KGUsZCkpLl9yb290T2JqOw0KYi5wdXNoKGooZSkpfWVsc2UgZS5XaWxxMzIuUGhvdG9FZmZlY3QuX2hhbmRsZVJvdGF0aW9uKGEpfXJldHVybiBifX0sZ2V0Um90YXRlQW5nbGU6ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10sYj0wLGM9dGhpcy5sZW5ndGg7YjxjO2IrKyl7dmFyIGY9dGhpcy5nZXQoYik7Zi5XaWxxMzImJmYuV2lscTMyLlBob3RvRWZmZWN0JiYoYVtiXT1mLldpbHEzMi5QaG90b0VmZmVjdC5fYW5nbGUpfXJldHVybiBhfSxzdG9wUm90YXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYj10aGlzLmxlbmd0aDthPGI7YSsrKXt2YXIgYz10aGlzLmdldChhKTtjLldpbHEzMiYmYy5XaWxxMzIuUGhvdG9FZmZlY3QmJmNsZWFyVGltZW91dChjLldpbHEzMi5QaG90b0VmZmVjdC5fdGltZXIpfX19KTtXaWxxMzI9d2luZG93LldpbHEzMnx8e307V2lscTMyLlBob3RvRWZmZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGQ/ZnVuY3Rpb24oYSxiKXthLldpbHEzMj17UGhvdG9FZmZlY3Q6dGhpc307dGhpcy5faW1nPXRoaXMuX3Jvb3RPYmo9DQp0aGlzLl9ldmVudE9iaj1hO3RoaXMuX2hhbmRsZVJvdGF0aW9uKGIpfTpmdW5jdGlvbihhLGIpe3RoaXMuX2ltZz1hO3RoaXMuX3Jvb3RPYmo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3RoaXMuX3Jvb3RPYmouc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjt0aGlzLl9yb290T2JqLldpbHEzMj17UGhvdG9FZmZlY3Q6dGhpc307YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9yb290T2JqLGEpO2lmKGEuY29tcGxldGUpdGhpcy5fTG9hZGVyKGIpO2Vsc2V7dmFyIGM9dGhpcztqUXVlcnkodGhpcy5faW1nKS5iaW5kKCJsb2FkIixmdW5jdGlvbigpe2MuX0xvYWRlcihiKX0pfX19KCk7V2lscTMyLlBob3RvRWZmZWN0LnByb3RvdHlwZT17X3NldHVwUGFyYW1ldGVyczpmdW5jdGlvbihhKXt0aGlzLl9wYXJhbWV0ZXJzPXRoaXMuX3BhcmFtZXRlcnN8fHt9OyJudW1iZXIiIT09dHlwZW9mIHRoaXMuX2FuZ2xlJiYodGhpcy5fYW5nbGU9MCk7Im51bWJlciI9PT0NCnR5cGVvZiBhLmFuZ2xlJiYodGhpcy5fYW5nbGU9YS5hbmdsZSk7dGhpcy5fcGFyYW1ldGVycy5hbmltYXRlVG89Im51bWJlciI9PT10eXBlb2YgYS5hbmltYXRlVG8/YS5hbmltYXRlVG86dGhpcy5fYW5nbGU7dGhpcy5fcGFyYW1ldGVycy5zdGVwPWEuc3RlcHx8dGhpcy5fcGFyYW1ldGVycy5zdGVwfHxudWxsO3RoaXMuX3BhcmFtZXRlcnMuZWFzaW5nPWEuZWFzaW5nfHx0aGlzLl9wYXJhbWV0ZXJzLmVhc2luZ3x8ZnVuY3Rpb24oYSxjLGYsZSxkKXtyZXR1cm4tZSooKGM9Yy9kLTEpKmMqYypjLTEpK2Z9O3RoaXMuX3BhcmFtZXRlcnMuZHVyYXRpb249YS5kdXJhdGlvbnx8dGhpcy5fcGFyYW1ldGVycy5kdXJhdGlvbnx8MUUzO3RoaXMuX3BhcmFtZXRlcnMuY2FsbGJhY2s9YS5jYWxsYmFja3x8dGhpcy5fcGFyYW1ldGVycy5jYWxsYmFja3x8ZnVuY3Rpb24oKXt9O2EuYmluZCYmYS5iaW5kIT10aGlzLl9wYXJhbWV0ZXJzLmJpbmQmJnRoaXMuX0JpbmRFdmVudHMoYS5iaW5kKX0sX2hhbmRsZVJvdGF0aW9uOmZ1bmN0aW9uKGEpe3RoaXMuX3NldHVwUGFyYW1ldGVycyhhKTsNCnRoaXMuX2FuZ2xlPT10aGlzLl9wYXJhbWV0ZXJzLmFuaW1hdGVUbz90aGlzLl9yb3RhdGUodGhpcy5fYW5nbGUpOnRoaXMuX2FuaW1hdGVTdGFydCgpfSxfQmluZEV2ZW50czpmdW5jdGlvbihhKXtpZihhJiZ0aGlzLl9ldmVudE9iail7aWYodGhpcy5fcGFyYW1ldGVycy5iaW5kKXt2YXIgYj10aGlzLl9wYXJhbWV0ZXJzLmJpbmQsYztmb3IoYyBpbiBiKWIuaGFzT3duUHJvcGVydHkoYykmJmpRdWVyeSh0aGlzLl9ldmVudE9iaikudW5iaW5kKGMsYltjXSl9dGhpcy5fcGFyYW1ldGVycy5iaW5kPWE7Zm9yKGMgaW4gYSlhLmhhc093blByb3BlcnR5KGMpJiZqUXVlcnkodGhpcy5fZXZlbnRPYmopLmJpbmQoYyxhW2NdKX19LF9Mb2FkZXI6ZnVuY3Rpb24oKXtyZXR1cm4gaT9mdW5jdGlvbihhKXt2YXIgYj10aGlzLl9pbWcud2lkdGgsYz10aGlzLl9pbWcuaGVpZ2h0O3RoaXMuX2ltZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2ltZyk7dGhpcy5fdmltYWdlPXRoaXMuY3JlYXRlVk1MTm9kZSgiaW1hZ2UiKTsNCnRoaXMuX3ZpbWFnZS5zcmM9dGhpcy5faW1nLnNyYzt0aGlzLl92aW1hZ2Uuc3R5bGUuaGVpZ2h0PWMrInB4Ijt0aGlzLl92aW1hZ2Uuc3R5bGUud2lkdGg9YisicHgiO3RoaXMuX3ZpbWFnZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO3RoaXMuX3ZpbWFnZS5zdHlsZS50b3A9IjBweCI7dGhpcy5fdmltYWdlLnN0eWxlLmxlZnQ9IjBweCI7dGhpcy5fY29udGFpbmVyPXRoaXMuY3JlYXRlVk1MTm9kZSgiZ3JvdXAiKTt0aGlzLl9jb250YWluZXIuc3R5bGUud2lkdGg9Yjt0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PWM7dGhpcy5fY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7dGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiY29vcmRzaXplIixiLTErIiwiKyhjLTEpKTt0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fdmltYWdlKTt0aGlzLl9yb290T2JqLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7dGhpcy5fcm9vdE9iai5zdHlsZS5wb3NpdGlvbj0NCiJyZWxhdGl2ZSI7dGhpcy5fcm9vdE9iai5zdHlsZS53aWR0aD1iKyJweCI7dGhpcy5fcm9vdE9iai5zdHlsZS5oZWlnaHQ9YysicHgiO3RoaXMuX3Jvb3RPYmouc2V0QXR0cmlidXRlKCJpZCIsdGhpcy5faW1nLmdldEF0dHJpYnV0ZSgiaWQiKSk7dGhpcy5fcm9vdE9iai5jbGFzc05hbWU9dGhpcy5faW1nLmNsYXNzTmFtZTt0aGlzLl9ldmVudE9iaj10aGlzLl9yb290T2JqO3RoaXMuX2hhbmRsZVJvdGF0aW9uKGEpfTpmdW5jdGlvbihhKXt0aGlzLl9yb290T2JqLnNldEF0dHJpYnV0ZSgiaWQiLHRoaXMuX2ltZy5nZXRBdHRyaWJ1dGUoImlkIikpO3RoaXMuX3Jvb3RPYmouY2xhc3NOYW1lPXRoaXMuX2ltZy5jbGFzc05hbWU7dGhpcy5fd2lkdGg9dGhpcy5faW1nLndpZHRoO3RoaXMuX2hlaWdodD10aGlzLl9pbWcuaGVpZ2h0O3RoaXMuX3dpZHRoSGFsZj10aGlzLl93aWR0aC8yO3RoaXMuX2hlaWdodEhhbGY9dGhpcy5faGVpZ2h0LzI7dmFyIGI9TWF0aC5zcXJ0KHRoaXMuX2hlaWdodCoNCnRoaXMuX2hlaWdodCt0aGlzLl93aWR0aCp0aGlzLl93aWR0aCk7dGhpcy5fd2lkdGhBZGQ9Yi10aGlzLl93aWR0aDt0aGlzLl9oZWlnaHRBZGQ9Yi10aGlzLl9oZWlnaHQ7dGhpcy5fd2lkdGhBZGRIYWxmPXRoaXMuX3dpZHRoQWRkLzI7dGhpcy5faGVpZ2h0QWRkSGFsZj10aGlzLl9oZWlnaHRBZGQvMjt0aGlzLl9pbWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9pbWcpO3RoaXMuX2FzcGVjdFc9KHBhcnNlSW50KHRoaXMuX2ltZy5zdHlsZS53aWR0aCwxMCl8fHRoaXMuX3dpZHRoKS90aGlzLl9pbWcud2lkdGg7dGhpcy5fYXNwZWN0SD0ocGFyc2VJbnQodGhpcy5faW1nLnN0eWxlLmhlaWdodCwxMCl8fHRoaXMuX2hlaWdodCkvdGhpcy5faW1nLmhlaWdodDt0aGlzLl9jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7dGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgid2lkdGgiLHRoaXMuX3dpZHRoKTt0aGlzLl9jYW52YXMuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjsNCnRoaXMuX2NhbnZhcy5zdHlsZS5sZWZ0PS10aGlzLl93aWR0aEFkZEhhbGYrInB4Ijt0aGlzLl9jYW52YXMuc3R5bGUudG9wPS10aGlzLl9oZWlnaHRBZGRIYWxmKyJweCI7dGhpcy5fY2FudmFzLldpbHEzMj10aGlzLl9yb290T2JqLldpbHEzMjt0aGlzLl9yb290T2JqLmFwcGVuZENoaWxkKHRoaXMuX2NhbnZhcyk7dGhpcy5fcm9vdE9iai5zdHlsZS53aWR0aD10aGlzLl93aWR0aCsicHgiO3RoaXMuX3Jvb3RPYmouc3R5bGUuaGVpZ2h0PXRoaXMuX2hlaWdodCsicHgiO3RoaXMuX2V2ZW50T2JqPXRoaXMuX2NhbnZhczt0aGlzLl9jbnY9dGhpcy5fY2FudmFzLmdldENvbnRleHQoIjJkIik7dGhpcy5faGFuZGxlUm90YXRpb24oYSl9fSgpLF9hbmltYXRlU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl90aW1lciYmY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTt0aGlzLl9hbmltYXRlU3RhcnRUaW1lPStuZXcgRGF0ZTt0aGlzLl9hbmltYXRlU3RhcnRBbmdsZT10aGlzLl9hbmdsZTt0aGlzLl9hbmltYXRlKCl9LA0KX2FuaW1hdGU6ZnVuY3Rpb24oKXt2YXIgYT0rbmV3IERhdGUsYj1hLXRoaXMuX2FuaW1hdGVTdGFydFRpbWU+dGhpcy5fcGFyYW1ldGVycy5kdXJhdGlvbjtpZihiJiYhdGhpcy5fcGFyYW1ldGVycy5hbmltYXRlZEdpZiljbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO2Vsc2V7KHRoaXMuX2NhbnZhc3x8dGhpcy5fdmltYWdlfHx0aGlzLl9pbWcpJiZ0aGlzLl9yb3RhdGUofn4oMTAqdGhpcy5fcGFyYW1ldGVycy5lYXNpbmcoMCxhLXRoaXMuX2FuaW1hdGVTdGFydFRpbWUsdGhpcy5fYW5pbWF0ZVN0YXJ0QW5nbGUsdGhpcy5fcGFyYW1ldGVycy5hbmltYXRlVG8tdGhpcy5fYW5pbWF0ZVN0YXJ0QW5nbGUsdGhpcy5fcGFyYW1ldGVycy5kdXJhdGlvbikpLzEwKTt0aGlzLl9wYXJhbWV0ZXJzLnN0ZXAmJnRoaXMuX3BhcmFtZXRlcnMuc3RlcCh0aGlzLl9hbmdsZSk7dmFyIGM9dGhpczt0aGlzLl90aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5fYW5pbWF0ZS5jYWxsKGMpfSwxMCl9dGhpcy5fcGFyYW1ldGVycy5jYWxsYmFjayYmDQpiJiYodGhpcy5fYW5nbGU9dGhpcy5fcGFyYW1ldGVycy5hbmltYXRlVG8sdGhpcy5fcm90YXRlKHRoaXMuX2FuZ2xlKSx0aGlzLl9wYXJhbWV0ZXJzLmNhbGxiYWNrLmNhbGwodGhpcy5fcm9vdE9iaikpfSxfcm90YXRlOmZ1bmN0aW9uKCl7dmFyIGE9TWF0aC5QSS8xODA7cmV0dXJuIGk/ZnVuY3Rpb24oYSl7dGhpcy5fYW5nbGU9YTt0aGlzLl9jb250YWluZXIuc3R5bGUucm90YXRpb249YSUzNjArImRlZyJ9OmQ/ZnVuY3Rpb24oYSl7dGhpcy5fYW5nbGU9YTt0aGlzLl9pbWcuc3R5bGVbZF09InJvdGF0ZSgiK2ElMzYwKyJkZWcpIn06ZnVuY3Rpb24oYil7dGhpcy5fYW5nbGU9YjtiPWIlMzYwKmE7dGhpcy5fY2FudmFzLndpZHRoPXRoaXMuX3dpZHRoK3RoaXMuX3dpZHRoQWRkO3RoaXMuX2NhbnZhcy5oZWlnaHQ9dGhpcy5faGVpZ2h0K3RoaXMuX2hlaWdodEFkZDt0aGlzLl9jbnYudHJhbnNsYXRlKHRoaXMuX3dpZHRoQWRkSGFsZix0aGlzLl9oZWlnaHRBZGRIYWxmKTt0aGlzLl9jbnYudHJhbnNsYXRlKHRoaXMuX3dpZHRoSGFsZiwNCnRoaXMuX2hlaWdodEhhbGYpO3RoaXMuX2Nudi5yb3RhdGUoYik7dGhpcy5fY252LnRyYW5zbGF0ZSgtdGhpcy5fd2lkdGhIYWxmLC10aGlzLl9oZWlnaHRIYWxmKTt0aGlzLl9jbnYuc2NhbGUodGhpcy5fYXNwZWN0Vyx0aGlzLl9hc3BlY3RIKTt0aGlzLl9jbnYuZHJhd0ltYWdlKHRoaXMuX2ltZywwLDApfX0oKX07aSYmKFdpbHEzMi5QaG90b0VmZmVjdC5wcm90b3R5cGUuY3JlYXRlVk1MTm9kZT1mdW5jdGlvbigpe2RvY3VtZW50LmNyZWF0ZVN0eWxlU2hlZXQoKS5hZGRSdWxlKCIucnZtbCIsImJlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpIik7dHJ5e3JldHVybiFkb2N1bWVudC5uYW1lc3BhY2VzLnJ2bWwmJmRvY3VtZW50Lm5hbWVzcGFjZXMuYWRkKCJydm1sIiwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiKSxmdW5jdGlvbihhKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiPHJ2bWw6IithKycgY2xhc3M9InJ2bWwiPicpfX1jYXRjaChhKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIjwiKw0KYSsnIHhtbG5zPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQuY29tOnZtbCIgY2xhc3M9InJ2bWwiPicpfX19KCkpfSkoalF1ZXJ5KTsNCg==]]></data>
	</file>
	<file>
	  <filename>/js/jrac/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jrac/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/js/jrac/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jrac/images/loading.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/js/jrac/images/viewport_background.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAIAAAN/f3////yH5BAAHAP8ALAAAAAAQABAAAAIfhG+hq4jM3IFLJhoswNly/XkcBpIiVaInlLJr9FZWAQA7]]></data>
	</file>
	<file>
	  <filename>/js/jrac/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/js/jrac/jquery.jrac.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogalF1ZXJ5IFJlc2l6ZSBBbmQgQ3JvcCAoanJhYykNCiAqIEEgalF1ZXJ5IDEuNCsgYW5kIGpRdWVyeVVpIDEuOCsgcGx1Z2luIHVuZGVyIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIHZlcnNpb24gMiBsaXNlbnNlLg0KICogQ29weXJpZ2h0IChjKSAyMDExIENlZHJpYyBHYW1wZXJ0IC0gY2dhbXBlcnRAZ21haWwuY29tDQogKi8NCg0KKGZ1bmN0aW9uKCAkICl7DQoNCiAgJC5mbi5qcmFjID0gZnVuY3Rpb24ob3B0aW9ucykgew0KDQogICAgLy8gRGVmYXVsdCBzZXR0aW5ncw0KICAgIHZhciBzZXR0aW5ncyA9IHsNCiAgICAgICdjcm9wX3dpZHRoJzogMjAwLA0KICAgICAgJ2Nyb3BfaGVpZ2h0JzogMTAwLA0KICAgICAgLy8gVGhlIHR3byBmb2xsb3dpbmcgcHJvcGVydGllcyBkZWZpbmUgdGhlIGNyb3AgcG9zaXRpb24gKHJlbGF0aXZlIHRvIHRoZQ0KICAgICAgLy8gaW1hZ2UpLg0KICAgICAgJ2Nyb3BfeCc6IDAsDQogICAgICAnY3JvcF95JzogMCwNCiAgICAgICdjcm9wX3Jlc2l6ZSc6IHRydWUsDQogICAgICAnY3JvcF9hc3BlY3RfcmF0aW8nOiBudWxsLA0KICAgICAgJ2ltYWdlX3dpZHRoJzogbnVsbCwNCiAgICAgICdpbWFnZV9oZWlnaHQnOiBudWxsLA0KICAgICAgJ3pvb21fbWluJzogMTAwLA0KICAgICAgJ3pvb21fbWF4JzogMzAwMCwNCiAgICAgICd2aWV3cG9ydF9pbWFnZV9zdXJyb3VuZGluZyc6IGZhbHNlLCAvLyBTZXQgdGhlIHZpZXdwb3J0IHRvIHN1cnJvdW5kIHRoZSBpbWFnZSBvbiBsb2FkDQogICAgICAndmlld3BvcnRfd2lkdGgnOiBudWxsLA0KICAgICAgJ3ZpZXdwb3J0X2hlaWdodCc6IG51bGwsDQogICAgICAndmlld3BvcnRfcmVzaXplJzogdHJ1ZSwNCiAgICAgIC8vIFRoZSB0d28gZm9sbG93aW5nIHByb3BlcnRpZXMgYWxsb3cgdG8gcG9zaXRpb24gdGhlIGNvbnRlbnQgKG5lZ2F0aXZlDQogICAgICAvLyB2YWx1ZSBhbGxvd2VkKS4gSXQgY2FuIGJlIHVzZSB0byBmb2N1cyB0aGUgdmlld3BvcnQgb24gdGhlIGNyb3BwZWQNCiAgICAgIC8vIHBhcnQgb2YgdGhlIGltYWdlLg0KICAgICAgJ3ZpZXdwb3J0X2NvbnRlbnRfbGVmdCc6IDAsDQogICAgICAndmlld3BvcnRfY29udGVudF90b3AnOiAwLA0KICAgICAgLy8gU3VibWl0IGhlcmUgYSBjYWxsYmFjayBmdW5jdGlvbiAoY29udGV4dCBpcyB0aGUgdmlld3BvcnQpLg0KICAgICAgJ3ZpZXdwb3J0X29ubG9hZCc6IG51bGwNCiAgICB9Ow0KDQogICAgLy8gQXBwbHkgdGhlIHJlc2l6ZSBhbmQgY3JvcCB0b29scyB0byBlYWNoIGltYWdlcw0KICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7DQoNCiAgICAgIGlmICghJCh0aGlzKS5pcygnaW1nJykpIHsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KDQogICAgICAvLyBSZWFkIG9wdGlvbnMNCiAgICAgIHZhciBkZXN0cm95ID0gZmFsc2U7DQogICAgICBpZiAoIHR5cGVvZihvcHRpb25zKSA9PSAnb2JqZWN0JyApIHsNCiAgICAgICAgJC5leHRlbmQoIHNldHRpbmdzLCBvcHRpb25zICk7DQogICAgICB9DQogICAgICBlbHNlIGlmIChvcHRpb25zID09ICdkZXN0cm95Jykgew0KICAgICAgICBkZXN0cm95ID0gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIA0KICAgICAgdmFyICRpbWFnZSA9ICQodGhpcyk7ICAgICAgDQogICAgICANCiAgICAgIC8vIFRlc3QgaWYganJhYyB3YXMgcHJldmlvdXNseSBydW4NCiAgICAgIHZhciBqcmFjX2xvYWRlZCA9IGZhbHNlOyAgICAgIA0KICAgICAgaWYgKCRpbWFnZS5wYXJlbnQoKS5oYXNDbGFzcygnanJhY192aWV3cG9ydCcpKSB7DQogICAgICAgIGpyYWNfbG9hZGVkID0gdHJ1ZTsgICAgICAgIA0KICAgICAgfQ0KICAgICAgDQogICAgICBpZiAoanJhY19sb2FkZWQgJiYgZGVzdHJveSkgew0KICAgICAgICAvLyBVbmxvYWQganJhYyBpZiBhc2tlZA0KICAgICAgICAkaW1hZ2UuZHJhZ2dhYmxlKCJkZXN0cm95Iik7DQogICAgICAgICRpbWFnZS5wYXJlbnQoKS5maW5kKCcuanJhY19jcm9wJykucmVtb3ZlKCk7DQogICAgICAgICRpbWFnZS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcuanJhY196b29tX3NsaWRlcicpLnJlbW92ZSgpOw0KICAgICAgICAkaW1hZ2UucGFyZW50KCkuYXBwZW5kKCRpbWFnZS5kYXRhKCdvcmlnaW5hbCcpKTsgLy8gcmVzdG9yZSBvcmlnaW5hbCBpbWFnZQ0KICAgICAgICAkaW1hZ2UucGFyZW50KCkudW53cmFwKCk7IC8vIHJlbW92ZSBjb250YWluZXINCiAgICAgICAgJGltYWdlLnVud3JhcCgpOyAvLyByZW1vdmUgdmlld3BvcnQNCiAgICAgICAgJGltYWdlLnJlbW92ZSgpOyAvLyByZW1vdmUgaW1hZ2Ugd2hpY2ggd2FzIGFsdGVyZWQgKGluIGl0cyBjc3MgYXR0cmlidXRlcykNCiAgICAgIH0NCiAgICAgIGVsc2Ugew0KICAgICAgICAvLyBSZWNvcmQgaW1hZ2UgYmVmb3JlIHNvbWUgb2YgaXRzIGF0dHJpYnV0ZXMgZ2V0IGFsdGVyZWQgYnkgc29tZSANCiAgICAgICAgLy8ganJhYyBjc3Mgb3Igc29tZSB1c2VyIHNpemUgb3IgcHJvcG9ydGlvbiBjaGFuZ2VzLg0KICAgICAgICAkaW1hZ2UuZGF0YSgnb3JpZ2luYWwnLCAkaW1hZ2UuY2xvbmUoKSk7DQogICAgICB9DQoNCiAgICAgIC8vIERvIG5vdGhpbmcgbW9yZSBpZiBkZXN0cm95IGlzIGFza2VkDQogICAgICBpZiAoZGVzdHJveSkgew0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgICANCiAgICAgIC8vIFByZXBhcmUgaW1hZ2UNCiAgICAgIGlmICghanJhY19sb2FkZWQpIHsNCiAgICAgICAgJGltYWdlLmhpZGUoKS5jc3MoJ3Bvc2l0aW9uJywnYWJzb2x1dGUnKS53cmFwKCc8ZGl2IGNsYXNzPSJqcmFjX2NvbnRhaW5lciI+PGRpdiBjbGFzcz0ianJhY192aWV3cG9ydCI+PC9kaXY+PC9kaXY+Jyk7DQogICAgICB9DQoNCiAgICAgIC8vIEdldCB2aWV3cG9ydCBhbmQgY29udGFpbmVyIHJlZmVyZW5jZXMNCiAgICAgIHZhciAkdmlld3BvcnQgPSAkaW1hZ2UucGFyZW50KCk7DQogICAgICB2YXIgJGNvbnRhaW5lciA9ICR2aWV3cG9ydC5wYXJlbnQoKTsNCg0KICAgICAgLy8gQWRkIGEgd2FpdGluZyBvbiBsb2FkIGlucHV0IGltYWdlDQogICAgICB2YXIgJGxvYWRpbmcgPSAkKCc8ZGl2IGNsYXNzPSJqcmFjX2xvYWRpbmciIC8+Jyk7DQogICAgICAkdmlld3BvcnQuYXBwZW5kKCRsb2FkaW5nKTsNCg0KICAgICAgLy8gVGhlIGZvbGxvd2luZyBwcm9jZWR1cmUgaG9sZCBidXNpbmVzcyBpbnRlbmQgdG8gYmUgcnVuIG9uY2UgdGhlIGltYWdlDQogICAgICAvLyBpcyBsb2FkZWQgKGxvYWQgZXZlbnQpLg0KICAgICAgdmFyIGltYWdlX2xvYWRfaGFuZGxlciA9IGZ1bmN0aW9uKCl7DQoNCiAgICAgICAgLy8gQWRkIHNvbWUgY3VzdG9tIHByb3BlcnRpZXMgdG8gJGltYWdlDQogICAgICAgICQuZXh0ZW5kKCRpbWFnZSwgew0KICAgICAgICAgIHNjYWxlX3Byb3BvcnRpb25fbG9ja2VkOiB0cnVlLA0KICAgICAgICAgIG9yaWdpbmFsV2lkdGg6ICRpbWFnZS53aWR0aCgpLA0KICAgICAgICAgIG9yaWdpbmFsSGVpZ2h0OiAkaW1hZ2UuaGVpZ2h0KCkNCiAgICAgICAgfSk7DQoNCiAgICAgICAgLy8gU2V0IGdpdmVuIG9wdGlvbmFsIGltYWdlIHNpemUNCiAgICAgICAgJGltYWdlLndpZHRoKHNldHRpbmdzLmltYWdlX3dpZHRoKS5oZWlnaHQoc2V0dGluZ3MuaW1hZ2VfaGVpZ2h0KTsNCg0KICAgICAgICAvLyBBcHBseSB0aGUgdmlld3BvcnQgaW1hZ2Ugc3Vycm91bmRpbmcgaXMgYXNrZWQNCiAgICAgICAgaWYgKHNldHRpbmdzLnZpZXdwb3J0X2ltYWdlX3N1cnJvdW5kaW5nKSB7DQogICAgICAgICAgJHZpZXdwb3J0LndpZHRoKCRpbWFnZS53aWR0aCgpKS5oZWlnaHQoJGltYWdlLmhlaWdodCgpKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAkdmlld3BvcnQud2lkdGgoc2V0dGluZ3Mudmlld3BvcnRfd2lkdGgpLmhlaWdodChzZXR0aW5ncy52aWV3cG9ydF9oZWlnaHQpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gU2V0IHRoZSB2aWV3cG9ydCBjb250ZW50IHBvc2l0aW9uIGZvciB0aGUgaW1hZ2UNCiAgICAgICAgJGltYWdlLmNzcyh7J2xlZnQnOiBzZXR0aW5ncy52aWV3cG9ydF9jb250ZW50X2xlZnQsICd0b3AnOiBzZXR0aW5ncy52aWV3cG9ydF9jb250ZW50X3RvcH0pOw0KDQogICAgICAgIC8vIENyZWF0ZSB0aGUgem9vbSB3aWRnZXQgd2hpY2ggcGVybWl0IHRvIHJlc2l6ZSB0aGUgaW1hZ2UNCiAgICAgICAgaWYgKCFqcmFjX2xvYWRlZCkgew0KICAgICAgICAgIHZhciAkem9vbV93aWRnZXQgPSAkKCc8ZGl2IGNsYXNzPSJqcmFjX3pvb21fc2xpZGVyIj48ZGl2IGNsYXNzPSJ1aS1zbGlkZXItaGFuZGxlIj48L2Rpdj48L2Rpdj4nKQ0KICAgICAgICAgIC53aWR0aCgkdmlld3BvcnQud2lkdGgoKSkNCiAgICAgICAgICAuc2xpZGVyKHsNCiAgICAgICAgICAgIHZhbHVlOiAkaW1hZ2Uud2lkdGgoKSwNCiAgICAgICAgICAgIG1pbjogc2V0dGluZ3Muem9vbV9taW4sDQogICAgICAgICAgICBtYXg6IHNldHRpbmdzLnpvb21fbWF4LA0KICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAkLmV4dGVuZCgkem9vbV93aWRnZXQsew0KICAgICAgICAgICAgICAgIG9uX3N0YXJ0X3dpZHRoX3ZhbHVlOiB1aS52YWx1ZSwNCiAgICAgICAgICAgICAgICBvbl9zdGFydF9oZWlnaHRfdmFsdWU6ICRpbWFnZS5oZWlnaHQoKQ0KICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHNsaWRlOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IE1hdGgucm91bmQoJHpvb21fd2lkZ2V0Lm9uX3N0YXJ0X2hlaWdodF92YWx1ZSAqIHVpLnZhbHVlIC8gJHpvb21fd2lkZ2V0Lm9uX3N0YXJ0X3dpZHRoX3ZhbHVlKTsNCiAgICAgICAgICAgICAgJGltYWdlLmhlaWdodChoZWlnaHQpOw0KICAgICAgICAgICAgICAkaW1hZ2Uud2lkdGgodWkudmFsdWUpOw0KICAgICAgICAgICAgICAkdmlld3BvcnQub2JzZXJ2YXRvci5ub3RpZnkoJ2pyYWNfaW1hZ2VfaGVpZ2h0JywgaGVpZ2h0KTsNCiAgICAgICAgICAgICAgJHZpZXdwb3J0Lm9ic2VydmF0b3Iubm90aWZ5KCdqcmFjX2ltYWdlX3dpZHRoJywgdWkudmFsdWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICAgICRjb250YWluZXIuYXBwZW5kKCR6b29tX3dpZGdldCk7DQogICAgICAgIA0KICAgICAgICAgIC8vIE1ha2UgdGhlIHZpZXdwb3J0IHJlc2l6ZWFibGUNCiAgICAgICAgICBpZiAoc2V0dGluZ3Mudmlld3BvcnRfcmVzaXplKSB7DQogICAgICAgICAgICAkdmlld3BvcnQucmVzaXphYmxlKHsNCiAgICAgICAgICAgICAgcmVzaXplOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICAkem9vbV93aWRnZXQud2lkdGgodWkuc2l6ZS53aWR0aCk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIC8vIEVuYWJsZSB0aGUgaW1hZ2UgZHJhZ2dhYmxlIGludGVyYWN0aW9uDQogICAgICAgICAgJGltYWdlLmRyYWdnYWJsZSh7DQogICAgICAgICAgICBkcmFnOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgaWYgKHVpLnBvc2l0aW9uLmxlZnQgIT0gdWkub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KSB7DQogICAgICAgICAgICAgICAgJHZpZXdwb3J0Lm9ic2VydmF0b3Iubm90aWZ5KCdqcmFjX2Nyb3BfeCcsICR2aWV3cG9ydC5vYnNlcnZhdG9yLmNyb3BfcG9zaXRpb25feCgpKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBpZiAodWkucG9zaXRpb24udG9wICE9IHVpLm9yaWdpbmFsUG9zaXRpb24udG9wKSB7DQogICAgICAgICAgICAgICAgJHZpZXdwb3J0Lm9ic2VydmF0b3Iubm90aWZ5KCdqcmFjX2Nyb3BfeScsICR2aWV3cG9ydC5vYnNlcnZhdG9yLmNyb3BfcG9zaXRpb25feSgpKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KDQogICAgICAgICAgLy8gQnVpbGQgdGhlIGNyb3AgZWxlbWVudA0KICAgICAgICAgIHZhciAkY3JvcCA9ICQoJzxkaXYgY2xhc3M9ImpyYWNfY3JvcCI+PGRpdiBjbGFzcz0ianJhY19jcm9wX2RyYWdfaGFuZGxlciI+PC9kaXY+PC9kaXY+JykNCiAgICAgICAgICAuY3NzKHsNCiAgICAgICAgICAgICd3aWR0aCc6IHNldHRpbmdzLmNyb3Bfd2lkdGgsDQogICAgICAgICAgICAnaGVpZ2h0Jzogc2V0dGluZ3MuY3JvcF9oZWlnaHQsDQogICAgICAgICAgICAnbGVmdCc6c2V0dGluZ3MuY3JvcF94K3NldHRpbmdzLnZpZXdwb3J0X2NvbnRlbnRfbGVmdCwNCiAgICAgICAgICAgICd0b3AnOnNldHRpbmdzLmNyb3BfeStzZXR0aW5ncy52aWV3cG9ydF9jb250ZW50X3RvcA0KICAgICAgICAgIH0pLmRyYWdnYWJsZSh7DQogICAgICAgICAgICBjb250YWlubWVudDogJHZpZXdwb3J0LA0KICAgICAgICAgICAgaGFuZGxlOiAnZGl2LmpyYWNfY3JvcF9kcmFnX2hhbmRsZXInLA0KICAgICAgICAgICAgZHJhZzogZnVuY3Rpb24oZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgIGlmICh1aS5wb3NpdGlvbi5sZWZ0ICE9IHVpLm9yaWdpbmFsUG9zaXRpb24ubGVmdCkgew0KICAgICAgICAgICAgICAgICR2aWV3cG9ydC5vYnNlcnZhdG9yLm5vdGlmeSgnanJhY19jcm9wX3gnLCAkdmlld3BvcnQub2JzZXJ2YXRvci5jcm9wX3Bvc2l0aW9uX3goKSk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgaWYgKHVpLnBvc2l0aW9uLnRvcCAhPSB1aS5vcmlnaW5hbFBvc2l0aW9uLnRvcCkgew0KICAgICAgICAgICAgICAgICR2aWV3cG9ydC5vYnNlcnZhdG9yLm5vdGlmeSgnanJhY19jcm9wX3knLCAkdmlld3BvcnQub2JzZXJ2YXRvci5jcm9wX3Bvc2l0aW9uX3koKSk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgICAgICBpZiAoc2V0dGluZ3MuY3JvcF9yZXNpemUpIHsNCiAgICAgICAgICAgICRjcm9wLnJlc2l6YWJsZSh7DQogICAgICAgICAgICAgIGNvbnRhaW5tZW50OiAkdmlld3BvcnQsDQogICAgICAgICAgICAgIGFzcGVjdFJhdGlvOiBzZXR0aW5ncy5jcm9wX2FzcGVjdF9yYXRpbywNCiAgICAgICAgICAgICAgcmVzaXplOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICBpZiAodWkuc2l6ZS53aWR0aCAhPSB1aS5vcmlnaW5hbFNpemUud2lkdGgpIHsNCiAgICAgICAgICAgICAgICAgICR2aWV3cG9ydC5vYnNlcnZhdG9yLm5vdGlmeSgnanJhY19jcm9wX3dpZHRoJywgJGNyb3Aud2lkdGgoKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICh1aS5zaXplLmhlaWdodCAhPSB1aS5vcmlnaW5hbFNpemUuaGVpZ2h0KSB7DQogICAgICAgICAgICAgICAgICAkdmlld3BvcnQub2JzZXJ2YXRvci5ub3RpZnkoJ2pyYWNfY3JvcF9oZWlnaHQnLCAkY3JvcC5oZWlnaHQoKSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KQ0KICAgICAgICAgIH0NCiAgICAgICAgICAkdmlld3BvcnQuYXBwZW5kKCRjcm9wKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEV4dGVuZCB2aWV3cG9ydCB3aXRjaCB1c2VmdWxsIG9iamVjdHMgYXMgaXQgd2lsbCBiZSBleHBvc2VkIHRvIHVzZXINCiAgICAgICAgLy8gZnVuY3Rpb25zIGludGVyZmFjZQ0KICAgICAgICAkLmV4dGVuZCgkdmlld3BvcnQsIHsNCiAgICAgICAgICAkY29udGFpbmVyOiAkY29udGFpbmVyLA0KICAgICAgICAgICRpbWFnZTogJGltYWdlLA0KICAgICAgICAgICRjcm9wOiAkY3JvcCwNCiAgICAgICAgICAkem9vbV93aWRnZXQ6ICR6b29tX3dpZGdldCwNCiAgICAgICAgICAvLyBMZXQgbWUgaW50cm9kdWNlIHRoZSBmb2xsb3dpbmcgVGVybWluYXRvcidzIGZyaWVuZCB3aGljaCBoYW5kbGUgdGhlDQogICAgICAgICAgLy8gY3JlYXRpb24gb2YgdGhlIHZpZXdwb3J0IGV2ZW50cy4NCiAgICAgICAgICBvYnNlcnZhdG9yOiB7DQogICAgICAgICAgICBpdGVtczoge30sDQogICAgICAgICAgICAvLyBSZWdpc3RlciBhbiBldmVudCB3aXRoIGEgZ2l2ZW4gZWxlbWVudA0KICAgICAgICAgICAgcmVnaXN0ZXI6IGZ1bmN0aW9uKGV2ZW50X25hbWUsIGVsZW1lbnQsIG9uZXZlbnRfY2FsbGJhY2spIHsNCiAgICAgICAgICAgICAgaWYgKGV2ZW50X25hbWUgJiYgZWxlbWVudCkgew0KICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNbZXZlbnRfbmFtZV0gPSB7DQogICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LA0KICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IG9uZXZlbnRfY2FsbGJhY2sNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgLy8gVW5yZWdpc3RlciBhbiBldmVudA0KICAgICAgICAgICAgdW5yZWdpc3RlcjogZnVuY3Rpb24oZXZlbnRfbmFtZSkgew0KICAgICAgICAgICAgICBkZWxldGUgdGhpcy5pdGVtc1tldmVudF9uYW1lXTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAvLyBUcmlnZ2VyIGFuIGV2ZW50IGFuZCBvcHRpb25hbGx5IHN1cHBseSBhIHZhbHVlDQogICAgICAgICAgICBub3RpZnk6IGZ1bmN0aW9uKGV2ZW50X25hbWUsIHZhbHVlKSB7DQogICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zW2V2ZW50X25hbWVdKSB7DQogICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLml0ZW1zW2V2ZW50X25hbWVdLmVsZW1lbnQ7DQogICAgICAgICAgICAgICAgdmFyIG9uZXZlbnRfY2FsbGJhY2sgPSB0aGlzLml0ZW1zW2V2ZW50X25hbWVdLmNhbGxiYWNrOw0KICAgICAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlcihldmVudF9uYW1lLFskdmlld3BvcnQsIHZhbHVlXSk7DQogICAgICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbihvbmV2ZW50X2NhbGxiYWNrKSkgew0KICAgICAgICAgICAgICAgICAgb25ldmVudF9jYWxsYmFjay5jYWxsKCR2aWV3cG9ydCwgZXZlbnRfbmFtZSwgZWxlbWVudCwgdmFsdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAkaW1hZ2UudHJpZ2dlcignanJhY19ldmVudHMnLFskdmlld3BvcnRdKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBub3RpZnlfYWxsOiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2pyYWNfY3JvcF94JywgdGhpcy5jcm9wX3Bvc2l0aW9uX3goKSk7DQogICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdqcmFjX2Nyb3BfeScsIHRoaXMuY3JvcF9wb3NpdGlvbl95KCkpOw0KICAgICAgICAgICAgICB0aGlzLm5vdGlmeSgnanJhY19jcm9wX3dpZHRoJywgJGNyb3Aud2lkdGgoKSk7DQogICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdqcmFjX2Nyb3BfaGVpZ2h0JywgJGNyb3AuaGVpZ2h0KCkpOw0KICAgICAgICAgICAgICB0aGlzLm5vdGlmeSgnanJhY19pbWFnZV93aWR0aCcsICRpbWFnZS53aWR0aCgpKTsNCiAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2pyYWNfaW1hZ2VfaGVpZ2h0JywgJGltYWdlLmhlaWdodCgpKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAvLyBSZXR1cm4gY3JvcCB4IHBvc2l0aW9uIHJlbGF0aXZlIHRvICRpbWFnZQ0KICAgICAgICAgICAgY3JvcF9wb3NpdGlvbl94OiBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgcmV0dXJuICRjcm9wLnBvc2l0aW9uKCkubGVmdCAtICRpbWFnZS5wb3NpdGlvbigpLmxlZnQ7DQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgLy8gUmV0dXJuIGNyb3AgeSBwb3NpdGlvbiByZWxhdGl2ZSB0byAkaW1hZ2UNCiAgICAgICAgICAgIGNyb3BfcG9zaXRpb25feTogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgIHJldHVybiAkY3JvcC5wb3NpdGlvbigpLnRvcCAtICRpbWFnZS5wb3NpdGlvbigpLnRvcDsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICAvLyBEb2VzIHRoZSBjcm9wIGlzIGNvbXBsZXRlbHkgaW5zaWRlIHRoZSBpbWFnZT8NCiAgICAgICAgICAgIGNyb3BfY29uc2lzdGVudDogZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyb3BfcG9zaXRpb25feCgpPj0wICYmIHRoaXMuY3JvcF9wb3NpdGlvbl95KCk+PTANCiAgICAgICAgICAgICAgJiYgdGhpcy5jcm9wX3Bvc2l0aW9uX3goKSArICRjcm9wLndpZHRoKCk8PSRpbWFnZS53aWR0aCgpDQogICAgICAgICAgICAgICYmIHRoaXMuY3JvcF9wb3NpdGlvbl95KCkgKyAkY3JvcC5oZWlnaHQoKTw9JGltYWdlLmhlaWdodCgpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIC8vIFNldCBhIHByb3BlcnR5ICh3aGljaCBoaXMgbmFtZSBpcyBvbmUgb2YgdGhlIGV2ZW50KSB3aXRoIGEgZ2l2ZW4NCiAgICAgICAgICAgIC8vIHZhbHVlIHRoZW4gbm90aWZ5IHRoaXMgb3BlcmF0aW9uDQogICAgICAgICAgICBzZXRfcHJvcGVydHk6IGZ1bmN0aW9uKHRoYXQsIHZhbHVlKSB7DQogICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpOw0KICAgICAgICAgICAgICBpZiAoaXNOYU4odmFsdWUpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIHN3aXRjaCAodGhhdCkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ2pyYWNfY3JvcF94JzoNCiAgICAgICAgICAgICAgICAgICRjcm9wLmNzcygnbGVmdCcsdmFsdWUgKyAkaW1hZ2UucG9zaXRpb24oKS5sZWZ0KTsNCiAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ2pyYWNfY3JvcF95JzoNCiAgICAgICAgICAgICAgICAgICRjcm9wLmNzcygndG9wJyx2YWx1ZSArICRpbWFnZS5wb3NpdGlvbigpLnRvcCk7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdqcmFjX2Nyb3Bfd2lkdGgnOg0KICAgICAgICAgICAgICAgICAgJGNyb3Aud2lkdGgodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnanJhY19jcm9wX2hlaWdodCc6DQogICAgICAgICAgICAgICAgICAkY3JvcC5oZWlnaHQodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAnanJhY19pbWFnZV93aWR0aCc6DQogICAgICAgICAgICAgICAgICBpZiAoJGltYWdlLnNjYWxlX3Byb3BvcnRpb25fbG9ja2VkKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZV9oZWlnaHQgPSBNYXRoLnJvdW5kKCRpbWFnZS5oZWlnaHQoKSAqIHZhbHVlIC8gJGltYWdlLndpZHRoKCkpOw0KICAgICAgICAgICAgICAgICAgICAkaW1hZ2UuaGVpZ2h0KGltYWdlX2hlaWdodCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdqcmFjX2ltYWdlX2hlaWdodCcsIGltYWdlX2hlaWdodCk7DQogICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAkaW1hZ2Uud2lkdGgodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgJHpvb21fd2lkZ2V0LnNsaWRlcigndmFsdWUnLCB2YWx1ZSk7DQogICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdqcmFjX2ltYWdlX2hlaWdodCc6DQogICAgICAgICAgICAgICAgICBpZiAoJGltYWdlLnNjYWxlX3Byb3BvcnRpb25fbG9ja2VkKSB7DQogICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZV93aWR0aCA9IE1hdGgucm91bmQoJGltYWdlLndpZHRoKCkgKiB2YWx1ZSAvICRpbWFnZS5oZWlnaHQoKSk7DQogICAgICAgICAgICAgICAgICAgICRpbWFnZS53aWR0aChpbWFnZV93aWR0aCk7DQogICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdqcmFjX2ltYWdlX3dpZHRoJywgaW1hZ2Vfd2lkdGgpOw0KICAgICAgICAgICAgICAgICAgICAkem9vbV93aWRnZXQuc2xpZGVyKCd2YWx1ZScsIGltYWdlX3dpZHRoKTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICRpbWFnZS5oZWlnaHQodmFsdWUpOw0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgdGhpcy5ub3RpZnkodGhhdCwgdmFsdWUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfSk7DQoNCiAgICAgICAgLy8gSGlkZSB0aGUgbG9hZGluZyBub3RpY2UNCiAgICAgICAgJGxvYWRpbmcuaGlkZSgpOw0KICAgICAgICAkbG9hZGluZy5yZW1vdmUoKTsNCg0KICAgICAgICAvLyBGaW5hbGx5IGRpc3BsYXkgdGhlIGltYWdlDQogICAgICAgICRpbWFnZS5zaG93KCk7DQoNCiAgICAgICAgLy8gVHJpZ2dlciB0aGUgdmlld3BvcnRfb25sb2FkIGNhbGxiYWNrDQogICAgICAgIGlmICgkLmlzRnVuY3Rpb24oc2V0dGluZ3Mudmlld3BvcnRfb25sb2FkKSkgew0KICAgICAgICAgIHNldHRpbmdzLnZpZXdwb3J0X29ubG9hZC5jYWxsKCR2aWV3cG9ydCk7DQogICAgICAgICAgJHZpZXdwb3J0Lm9ic2VydmF0b3Iubm90aWZ5X2FsbCgpOw0KICAgICAgICB9DQogICAgICB9Ow0KDQogICAgICAvLyBXaGVuIGFuIGltYWdlIGlzIHVzaW5nIGFuIHNyYyBpbWFnZSAiZGF0YSIgVVJMIHNjaGVtZSB0aGVuIGl0IGFwcGVhciANCiAgICAgIC8vIHRoYXQgdGhlIGltYWdlIGxvYWQgZXZlbnQgbmV2ZXIgZ2V0IGZpcmVkLiBUaGVuIGZpcmUgZGlyZWN0bHkNCiAgICAgIC8vIGltYWdlX2xvYWRfaGFuZGxlcigpIGluIHRoYXQgY2FzZS4NCiAgICAgIHZhciBzcmMgPSAkaW1hZ2UuYXR0cignc3JjJyk7DQogICAgICBpZiAoL15kYXRhOmltYWdlLy50ZXN0KHNyYykpIHsNCiAgICAgICAgIGltYWdlX2xvYWRfaGFuZGxlcigpOw0KICAgICAgfQ0KICAgICAgZWxzZSB7DQogICAgICAgIHNyYyA9IHNyYyArIChzcmMuc2VhcmNoKC9cPy8pPDA/Jz8nOicmJykgKyAnanJhY3JhbmRvbT0nICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsNCiAgICAgICAgJCgnPGltZz4nKS5hdHRyKCdzcmMnLCBzcmMpLmxvYWQoaW1hZ2VfbG9hZF9oYW5kbGVyKTsNCiAgICAgIH0NCiAgICB9KTsNCiAgfTsNCn0pKCBqUXVlcnkgKTsNCg==]]></data>
	</file>
	<file>
	  <filename>/js/jrac/style.jrac.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogalF1ZXJ5IFJlc2l6ZSBBbmQgQ3JvcCAoanJhYykgKi8NCg0KLmpyYWNfY29udGFpbmVyIHt9DQoNCi5qcmFjX3ZpZXdwb3J0IHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBib3JkZXI6MXB4IHNvbGlkICNjY2M7DQogIHdpZHRoOjY0MHB4Ow0KICBoZWlnaHQ6NDgwcHg7DQogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnaW1hZ2VzL3ZpZXdwb3J0X2JhY2tncm91bmQuZ2lmJyk7DQp9DQoNCi5qcmFjX2xvYWRpbmcgew0KICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2ltYWdlcy9sb2FkaW5nLmdpZicpOw0KICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7DQogIGJhY2tncm91bmQtcG9zaXRpb246Y2VudGVyOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowOw0KfQ0KDQouanJhY19jcm9wIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBib3JkZXI6IDFweCBzb2xpZCB5ZWxsb3c7DQp9DQoNCi5qcmFjX2Nyb3BfZHJhZ19oYW5kbGVyIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsNCiAgb3BhY2l0eTogLjE7IC8qIEZYL09wZXJhL1NhZmFyaS9DaHJvbWUgKi8NCiAgLW1zLWZpbHRlcjogImFscGhhKG9wYWNpdHk9MTApIjsgLyogSUU4ICovDQogIGZpbHRlcjogYWxwaGEob3BhY2l0eSA9IDEwKTsgLyogSUU2L0lFNyAqLw0KfQ0KDQouanJhY192aWV3cG9ydCBpbWcsIC5qcmFjX2Nyb3BfZHJhZ19oYW5kbGVyIHsNCiAgY3Vyc29yOiBwb2ludGVyOw0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiNBDQokbGFuZ1snYWRtaW5kZXNjcmlwdGlvbiddID0gJ1N0b3JlIHVwbG9hZHMgaW4gQVdTIFMzJzsNCiRsYW5nWydhc2tfdW5pbnN0YWxsJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGUgQVdTIFMzIFVwbG9hZHMgbW9kdWxlPyc7DQokbGFuZ1snYWRtaW5fc2F2ZSddID0gIlNhdmUiOw0KJGxhbmdbJ2FjY2Vzc19rZXknXSA9ICdBY2Nlc3Mga2V5cyc7DQokbGFuZ1snYWxsb3dlZCddID0gJ0FsbG93ZWQnOw0KJGxhbmdbJ2F1dGhvcl9sYWJlbCddID0gJ1Bvc3RlZCBieTonOw0KJGxhbmdbJ2FjY2Vzc19yZWdpb24nXSA9ICdSZWdpb24nOw0KJGxhbmdbJ2FjY2Vzc19rZXknXSA9ICdBV1MgQWNjZXNzIEtleSBJRCc7DQokbGFuZ1snYWNjZXNzX3NlY3JldF9rZXknXSA9ICdBV1MgU2VjcmV0IEFjY2VzcyBLZXknOw0KI0INCiRsYW5nWydidWNrZXRfbmFtZSddID0gJ0J1Y2tldCBOYW1lJzsNCiNDDQokbGFuZ1snY2F0ZWdvcnlfbGFiZWwnXSA9ICdDYXRlZ29yeTonOw0KJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbCc7DQokbGFuZ1snY2hvb3NlX2ZpbGUnXSA9ICdDaG9vc2UgZmlsZSc7DQokbGFuZ1snY29uZmlnJ10gPSAnQVdTIFMzIE1vZHVsZSBDb25maWd1cmF0aW9uJzsNCiRsYW5nWydjdXN0b21fdXJsJ10gPSAnQ3VzdG9tIFVSTCc7DQokbGFuZ1snY2FwdGNoYV90aXRsZSddID0gJ0VudGVyIHRoZSB0ZXh0IGRpc3BsYXllZCBpbiB0aGlzIGltYWdlJzsNCiNEDQokbGFuZ1snZGF0ZSddID0gJ0RhdGUnOw0KJGxhbmdbJ2RlbGV0ZSddID0gJ0RlbGV0ZSc7DQokbGFuZ1snZGVmYXVsdF9vcHRpb25zJ10gPSAnTW9kdWxlIGRlZmF1bHRzJzsNCiRsYW5nWydkZWxldGVzZWxlY3RlZCddID0gJ0RlbGV0ZSB0aGUgc2VsZWN0ZWQgZmlsZXMvZGlyZWN0b3JpZXMnOw0KJGxhbmdbJ2RlbGV0ZXNlbGVjdGVkY2FuY2VsbGVkJ10gPSAnRGVsZXRpb24gb2Ygc2VsZWN0ZWQgZmlsZXMgY2FuY2VsZWQnOw0KJGxhbmdbJ2RlbGV0ZXN1Y2Nlc3MnXSA9ICdJdGVtcyBzdWNjZXNzZnVsbHkgZGVsZXRlZCc7DQokbGFuZ1snZGVzY19maWxlbWFuYWdlcl9zZXR0aW5ncyddID0gJ0VkaXQgRmlsZSBNYW5hZ2VyIFNldHRpbmdzJzsNCiRsYW5nWydkaXJjaG1vZGZhaWxtdWx0aSddID0gJ0NoYW5naW5nIHBlcm1pc3Npb25zIG9uIHRoZSBkaXJlY3RvcnkgZmFpbGVkLCBzb21lIG9mIGl0XCdzIGNvbnRlbnQgbWF5IGhhdmUgZ290dGVuIG5ldyBwZXJtaXNzaW9ucywgdGhvdWdoLic7DQokbGFuZ1snZGlyY2htb2RmYWlsdXJlJ10gPSAnQ2hhbmdpbmcgcGVybWlzc2lvbnMgb2YgdGhlIGRpcmVjdG9yeSBmYWlsZWQnOw0KJGxhbmdbJ2RpcmNobW9kc3VjY2VzcyddID0gJ1RoZSBkaXJlY3Rvcnkgc3VjY2Vzc2Z1bGx5IGdvdCBuZXcgcGVybWlzc2lvbnMnOw0KJGxhbmdbJ2RpcmNobW9kc3VjY2Vzc211bHRpJ10gPSAnQ2hhbmdpbmcgcGVybWlzc2lvbnMgb24gdGhlIGRpcmVjdG9yeSBhbmQgaXRcJ3MgY29udGVudCB3YXMgc3VjY2Vzc2Z1bCc7DQokbGFuZ1snZGlyZXhpc3RzJ10gPSAnVGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyc7DQokbGFuZ1snZGlybm90ZW1wdHljb25maXJtJ10gPSAnVGhlIGRpcmVjdG9yeSBpc25cJ3QgZW1wdHkhIERvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgaXQsIGluY2x1ZGluZyBhbGwgY29udGVudCBhbmQgc3ViZGlyZWN0b3JpZXM/JzsNCiRsYW5nWydkaXJ0cmVlZGVsZXRlY2FuY2VsbGVkJ10gPSAnRGVsZXRpb24gb2YgZGlyZWN0b3J5IGNhbmNlbGVkJzsNCiRsYW5nWydkaXJ0cmVlZGVsZXRlZmFpbCddID0gJ0FuIGVycm9yIG9jY3VycmVkIHdoZW4gZGVsZXRpbmcgdGhpcyBkaXJlY3RvcnkuIFNvbWUgb2YgdGhlIGNvbnRlbnRzIG1heSBoYXZlIGJlZW4gZGVsZXRlZCwgaG93ZXZlci4nOw0KJGxhbmdbJ2RpcnRyZWVkZWxldGVzdWNjZXNzJ10gPSAnVGhlIGRpcmVjdG9yeSBpbmNsdWRpbmcgY29udGVudCB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuJzsNCiNFDQokbGFuZ1snZXJyb3InXSA9ICdFcnJvcic7DQokbGFuZ1snZXJyb3JfY2FwdGNoYW1pc21hdGNoJ10gPSAnQ2FwdGNoIHRleHQgZW50ZXJlZCBkaWQgbm90IG1hdGNoIHRoZSBpbWFnZSBkaXNwbGF5ZWQnOw0KJGxhbmdbJ2Vycm9yX3NldHVwJ10gPSAnUGxlYXNlIGNvbXBsZXRlIHRoZSBBV1MgU0RLIE1vZHVsZSBTZXR1cCA8YSBocmVmPSIlcyI+aGVyZTwvYT4nOw0KJGxhbmdbJ2V4cGlyeV9pbnRlcnZhbCddID0gJ1JlbW92ZSBjYWNoZSBmaWxlcyB0aGF0IGFyZSBvbGRlciB0aGFuIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbnV0ZXMnOw0KI0YNCiRsYW5nWydmaWxlJ10gPSAnRmlsZSc7DQokbGFuZ1snZmllbGRkZWZfYWxsb3dfaGVscCddID0gJ1NwZWNpZnkgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlIGV4dGVuc2lvbnMgdGhhdCBhcmUgYWxsb3dlZC4gRm9yIGV4YW1wbGU6IHBkZixnaWYsanBlZyxqcGcgKGtlZXAgbG93ZXJjYXNlKSc7DQokbGFuZ1snZmlyc3RwYWdlJ10gPSAnJmx0OyZsdDsnOw0KJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FXU1MzIE1vZHVsZSc7DQojRw0KJGxhbmdbJ2dldHN0YXJ0ZWQnXSA9ICdHZXQgU3RhcnRlZCB3aXRoIEFXUyBTMyBNb2R1bGUnOw0KI0gNCiRsYW5nWydoZWxwX3BhcmFtX2FjdGlvbiddID0gJw0KICAgIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGFjdGlvbi4gUG9zc2libGUgdmFsdWVzIGFyZToNCiAgICA8dWw+DQogICAgICAgIDxsaT4mcXVvdDtkZWZhdWx0JnF1b3Q7IC0gZGlzcGxheXMgdGhlIHN1bW1hcnkgdmlldy48L2xpPg0KICAgICAgICA8bGk+JnF1b3Q7ZGV0YWlsJnF1b3Q7IC0gZGlzcGxheXMgYSBzcGVjaWZpZWQgZW50cnkgaW4gZGV0YWlsIG1vZGUuPC9saT4NCiAgICAgICAgPGxpPiZxdW90O3NlYXJjaCZxdW90OyAtIGRpc3BsYXlzIHRoZSBzZWFyY2ggZm9ybS4gT3B0aW9uYWwgcGFyYW1ldGVycyB0aGF0IGFmZmVjdCB0byB0aGlzIGFjdGlvbiBvbmx5OiA8ZW0+ZmlsdGVyLjwvZW0+PC9saT4NCiAgICAgICAgPGxpPiZxdW90O2NhdGVnb3J5JnF1b3Q7IC0gZGlzcGxheXMgdGhlIGNhdGVnb3JpZXMuIE9wdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCBhZmZlY3QgdG8gdGhpcyBhY3Rpb24gb25seTogPGVtPnNob3dfaXRlbXMsIGNvbGxhcHNlLCBudW1iZXJfb2ZfbGV2ZWxzLjwvZW0+PC9saT4NCiAgICAgICAgPGxpPiZxdW90O2FyY2hpdmUmcXVvdDsgLSBkaXNwbGF5cyB0aGUgYXJjaGl2ZXMuIDwvbGk+DQogICAgPC91bD4nOw0KJGxhbmdbJ2hlbHBfcGFyYW1fcHJlZml4J10gPSAnQSBzdHJpbmcgb2YgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB0aGUgY29tcGxldGUgcGF0aCBpbiBmcm9udCBvZiB0aGUgb2JqZWN0IG5hbWUuIFByb2plY3QvV29yZEZpbGVzLy4uLic7DQokbGFuZ1snaGVscF9wYXJhbV9kZXRhaWx0ZW1wbGF0ZSddID0gJ1RoZSBkZXRhaWwgdGVtcGxhdGUgeW91IHdpc2ggdG8gdXNlLic7DQokbGFuZ1snaGVscF9wYXJhbV9zdW1tYXJ5dGVtcGxhdGUnXSA9ICdUaGUgc3VtbWFyeSB0ZW1wbGF0ZSB5b3Ugd2lzaCB0byB1c2UuJzsNCiRsYW5nWydoZWxwX3BhcmFtX3BhZ2VsaW1pdCddID0gJ01heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkgKHBlciBwYWdlKS4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzdXBwbGllZCBhbGwgbWF0Y2hpbmcgaXRlbXMgd2lsbCBiZSBkaXNwbGF5ZWQuICBJZiBpdCBpcywgYW5kIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIGF2YWlsYWJsZSB0aGFuIHNwZWNpZmllZCBpbiB0aGUgcGFyYW1ldGVyLCB0ZXh0IGFuZCBsaW5rcyB3aWxsIGJlIHN1cHBsaWVkIHRvIGFsbG93IHNjcm9sbGluZyB0aHJvdWdoIHRoZSByZXN1bHRzJzsNCiRsYW5nWydoZWxwX3BhcmFtX2RldGFpbHBhZ2UnXSA9ICdQYWdlIHRvIGRpc3BsYXkgaXRlbSBkZXRhaWxzIGluLiBNdXN0IGJlIGEgcGFnZSBhbGlhcy9pZC4gVXNlZCB0byBhbGxvdyBkZXRhaWxzIHRvIGJlIGRpc3BsYXllZCBpbiBhIGRpZmZlcmVudCBwYWdlIHRoYW4gc3VtbWFyeS4nOw0KJGxhbmdbJ2hlbHBfcGFyYW1fc3VtbWFyeXBhZ2UnXSA9ICdQYWdlIHRvIGRpc3BsYXkgaXRlbSBzdW1tYXJ5IGluLiBNdXN0IGJlIGEgcGFnZSBhbGlhcy9pZC4gVXNlZCB0byBhbGxvdyBzdW1tYXJpZXMgdG8gYmUgZGlzcGxheWVkIGluIGEgZGlmZmVyZW50IHBhZ2UgdGhhbiBpbml0aWF0b3IuJzsNCg0KJGxhbmdbJ2hlbHBfYWNjZXNzX2tleSddID0gPDw8RU9UDQo8aDM+TWFuYWdpbmcgYWNjZXNzIGtleXMgKGNvbnNvbGUpPC9oMz4NCjxwPllvdSBjYW4gdXNlIHRoZSBBV1MgTWFuYWdlbWVudCBDb25zb2xlIHRvIG1hbmFnZSB0aGUgYWNjZXNzIGtleXMgb2YgYW4gSUFNIHVzZXIuPGJyPjwvcD4NCjx1bD4NCjxsaT48YSBocmVmPSJodHRwczovL2NvbnNvbGUuYXdzLmFtYXpvbi5jb20vaWFtIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj48c3Bhbj5JQU0gY29uc29sZTwvc3Bhbj48L2E+PC9zcGFuPg0KPGxpPlVzZSB5b3VyIEFXUyBhY2NvdW50IElEIG9yIGFjY291bnQgYWxpYXMsIHlvdXIgSUFNIHVzZXIgbmFtZSwgYW5kIHlvdXIgcGFzc3dvcmQgdG8gc2lnbiBpbiB0byB0aGUgSUFNIGNvbnNvbGUuPC9saT4NCjxsaT5JbiB0aGUgbmF2aWdhdGlvbiBiYXIgb24gdGhlIHVwcGVyIHJpZ2h0LCBjaG9vc2UgeW91ciB1c2VyIG5hbWUsIGFuZCB0aGVuIGNob29zZSBTZWN1cml0eSBjcmVkZW50aWFscy48L2xpPg0KPC91bD4NCg0KPGgzPlRvIGNyZWF0ZSBhbiBhY2Nlc3Mga2V5PC9oMz4NCjx1bD4NCjxsaT5JbiB0aGUgQWNjZXNzIGtleXMgc2VjdGlvbiwgY2hvb3NlIENyZWF0ZSBhY2Nlc3Mga2V5LiBJZiB5b3UgYWxyZWFkeSBoYXZlIHR3byBhY2Nlc3Mga2V5cywgdGhpcyBidXR0b24gaXMgZGVhY3RpdmF0ZWQgYW5kIHlvdSBtdXN0IGRlbGV0ZSBhbiBhY2Nlc3Mga2V5IGJlZm9yZSB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBvbmUuPC9saT4NCjxsaT5PbiB0aGUgQWNjZXNzIGtleSBiZXN0IHByYWN0aWNlcyAmIGFsdGVybmF0aXZlcyBwYWdlLCBjaG9vc2UgeW91ciB1c2UgY2FzZSB0byBsZWFybiBhYm91dCBhZGRpdGlvbmFsIG9wdGlvbnMgd2hpY2ggY2FuIGhlbHAgeW91IGF2b2lkIGNyZWF0aW5nIGEgbG9uZy10ZXJtIGFjY2VzcyBrZXkuIElmIHlvdSBkZXRlcm1pbmUgdGhhdCB5b3VyIHVzZSBjYXNlIHN0aWxsIHJlcXVpcmVzIGFuIGFjY2VzcyBrZXksIGNob29zZSBPdGhlciBhbmQgdGhlbiBjaG9vc2UgTmV4dC48L2xpPg0KPGxpPihPcHRpb25hbCkgU2V0IGEgZGVzY3JpcHRpb24gdGFnIHZhbHVlIGZvciB0aGUgYWNjZXNzIGtleS4gVGhpcyBhZGRzIGEgdGFnIGtleS12YWx1ZSBwYWlyIHRvIHlvdXIgSUFNIHVzZXIuIFRoaXMgY2FuIGhlbHAgeW91IGlkZW50aWZ5IGFuZCB1cGRhdGUgYWNjZXNzIGtleXMgbGF0ZXIuIFRoZSB0YWcga2V5IGlzIHNldCB0byB0aGUgYWNjZXNzIGtleSBpZC4gVGhlIHRhZyB2YWx1ZSBpcyBzZXQgdG8gdGhlIGFjY2VzcyBrZXkgZGVzY3JpcHRpb24gdGhhdCB5b3Ugc3BlY2lmeS4gV2hlbiB5b3UgYXJlIGZpbmlzaGVkLCBjaG9vc2UgQ3JlYXRlIGFjY2VzcyBrZXkuPC9saT4NCjxsaT5PbiB0aGUgUmV0cmlldmUgYWNjZXNzIGtleXMgcGFnZSwgY2hvb3NlIGVpdGhlciBTaG93IHRvIHJldmVhbCB0aGUgdmFsdWUgb2YgeW91ciB1c2VyJ3Mgc2VjcmV0IGFjY2VzcyBrZXksIG9yIERvd25sb2FkIC5jc3YgZmlsZS4gVGhpcyBpcyB5b3VyIG9ubHkgb3Bwb3J0dW5pdHkgdG8gc2F2ZSB5b3VyIHNlY3JldCBhY2Nlc3Mga2V5LiBBZnRlciB5b3UndmUgc2F2ZWQgeW91ciBzZWNyZXQgYWNjZXNzIGtleSBpbiBhIHNlY3VyZSBsb2NhdGlvbiwgY2hvb3NlIERvbmUuPC9saT4NCjwvdWw+DQpFT1Q7DQoNCiRsYW5nWydoZWxwX29wdF9leHBpcnlfaW50ZXJ2YWwnXSA9ICdTcGVjaWZ5IHRoZSBhbW91bnQgb2YgdGltZSAoaW4gbWludXRlcykgdGhhdCBicm93c2VycyBzaG91bGQgY2FjaGUgcXVlcmllcyBmb3IuIFNldHRpbmcgdGhpcyB2YWx1ZSB0byAwIGRpc2FibGVzIHRoZSBmdW5jdGlvbmFsaXR5LiBJbiBtb3N0IGNpcmN1bXN0YW5jZXMgeW91IHNob3VsZCBzcGVjaWZ5IGEgdmFsdWUgZ3JlYXRlciB0aGFuIDMwJzsNCiRsYW5nWydoZWxwX2J1Y2tldF9uYW1lJ10gPSAnVGhpcyBtb2R1bGUgd2lsbCBub3QgY3JlYXRlIGFueSBTMyBidWNrZXRzLiBZb3UgaGF2ZSB0byBjcmVhdGUgdGhlIGJ1Y2tldCB3aXRoIHB1YmxpYyByZWFkIGFjY2Vzcy4nOw0KJGxhbmdbJ2hlbHBfdXNlX2N1c3RvbV91cmwnXSA9ICdFbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgY3VzdG9tIFVSTCc7DQokbGFuZ1snaGVscF9jdXN0b21fdXJsJ10gPSAnQ3VzdG9tIFVSTCBjYW4gYmUgYSBDbG91ZGZyb250IFVSTCBvciBpZiBhbnkgdXJsIG1hcHBlZCBvbiB5b3VyIGJ1Y2tldC4nOw0KI0wNCiRsYW5nWydsYXN0X3JlZnJlc2hlZCddID0gJ0xhc3QgcmVmcmVzaGVkJzsNCiRsYW5nWydsb2dmaWxlcGF0aCddID0gJ1BsZWFzZSBwcm92aWRlIHlvdXIgZnVsbCBMb2cgRmlsZSBwYXRoLCBpbmNsdWRpbmcgZmlsZW5hbWUnOw0KJGxhbmdbJ2xpbmUnXSA9ICdMaW5lJzsNCiRsYW5nWydsYWJlbF9zaXplJ10gPSAnU2l6ZSc7DQokbGFuZ1snbGFiZWxfdXJsX29yaWdpbmFsJ10gPSAnT3JpZ2luYWwgVXJsJzsNCiRsYW5nWydsYWJlbF91cmwnXSA9ICdVcmwnOw0KJGxhbmdbJ2xhYmVsX3VybF9wcmVzaWduZWQnXSA9ICdQcmVzaWduZWQgVXJsJzsNCiRsYW5nWydsYWJlbF9taW1lJ10gPSAnTWltZSc7DQokbGFuZ1snbGFzdHBhZ2UnXSA9ICcmZ3Q7Jmd0Oyc7DQojTQ0KJGxhbmdbJ21lc3NhZ2UnXSA9ICdNZXNzYWdlJzsNCiRsYW5nWydtc2dfdnJmeV9pbnRlZ3JpdHl2ZXJpZmllZCddID0gJ0Nvbm5lY3Rpb24gRXN0YWJsaXNoZWQnOw0KJGxhbmdbJ21zZ192cmZ5X25vY29ubiddID0gJ0Nvbm5lY3Rpb24gTm90IEVzdGFibGlzaGVkJzsNCiNODQokbGFuZ1snbmV4dHBhZ2UnXSA9ICcmZ3Q7JzsNCiNQDQokbGFuZ1sncGFnZSddID0gJ1BhZ2UnOw0KJGxhbmdbJ3Byb21wdF9lbWFpbCddID0gJ0VtYWlsIEFkZHJlc3MnOw0KJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQVdTIFMzIE1vZHVsZSB3YXMgaW5zdGFsbGVkJzsNCiRsYW5nWydwb3N0cm90YXRlJ10gPSAnQWN0aW9uIGZvciBhZnRlciBpbWFnZSByb3RhdGlvbic7DQokbGFuZ1sncHJlZGVmaW5lZCddID0gJ1ByZWRlZmluZWQgQW5nbGVzJzsNCiRsYW5nWydwcm9tcHRfY29weSddID0gJ0NvcHkgb25lIG9yIG1vcmUgSXRlbXMnOw0KJGxhbmdbJ3Byb21wdF9kcm9wZmlsZXMnXSA9ICdEcm9wIGZpbGVzIGhlcmUgdG8gdXBsb2FkJzsNCiRsYW5nWydwcm9tcHRfbW92ZSddID0gJ01vdmUgSXRlbXMgdG8gQW5vdGhlciBEaXJlY3RvcnknOw0KJGxhbmdbJ3Byb21wdF91c2VfY3VzdG9tX3VybCddID0gJ1VzZSBDdXN0b20gVVJMJzsNCiRsYW5nWydwcm9tcHRfY3VzdG9tX3VybCddID0gJ0N1c3RvbSBVUkwnOw0KJGxhbmdbJ3Byb21wdF9kZXRhaWxwYWdlJ10gPSAnRGV0YWlsIHBhZ2UnOw0KJGxhbmdbJ3Byb21wdF9zdW1tYXJ5cGFnZSddID0gJ1N1bW1hcnkgcGFnZSc7DQokbGFuZ1sncHJvbXB0X2l0ZW1zZGlzcGxheWVkJ10gPSAnTnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIGFkbWluIHBhZ2UnOw0KJGxhbmdbJ3Byb21wdF9nbyddID0gJ0dvJzsNCiRsYW5nWydwcmV2cGFnZSddID0gJyZsdDsnOw0KJGxhbmdbJ3Byb21wdF9vZiddID0gJ29mJzsNCiRsYW5nWydwcm9tcHRfcGFnZSddID0gJ1BhZ2UnOw0KJGxhbmdbJ3Byb21wdF9wYWdlbGltaXQnXSA9ICdQYWdlIExpbWl0JzsNCiNSDQokbGFuZ1sncmV2aWV3cyddID0gJ1Jldmlld3MnOw0KJGxhbmdbJ3JlZ2lvbiddID0gJ1JlZ2lvbic7DQokbGFuZ1sncmV0dXJudG9tb2R1bGUnXSA9ICdSZXR1cm4gdG8gTW9kdWxlJzsNCiRsYW5nWydyZXF1aXJlZCddID0gJ1JlcXVpcmVkJzsNCiRsYW5nWydyZWZyZXNoc3VjY2VzcyddID0gJ0l0ZW1zIHN1Y2Nlc3NmdWxseSByZWZyZXNoZWQnOw0KI1MNCiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOw0KJGxhbmdbJ3NvcnJ5X25vZmlsZXMnXSA9ICdTb3JyeSwgd2UgY291bGQgbm90IGZpbmQgYW55IGZpbGVzJzsNCiRsYW5nWydzdWNjZXNzZnVsX3VwbG9hZCddID0gJ1lvdXIgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkLiAgSW4gdGhlIGVuZCwgdGhlIGZpbGVuYW1lIHdlIHVzZWQgd2FzICVzJzsNCiNUDQokbGFuZ1sndHlwZSddID0gJ1R5cGUnOw0KJGxhbmdbJ3R5cGVfQVdTUzMnXSA9ICdBV1NTMyc7DQokbGFuZ1sndHlwZV9kZXRhaWwnXSA9ICdEZXRhaWwnOw0KJGxhbmdbJ3R5cGVfc3VtbWFyeSddID0gJ1N1bW1hcnknOw0KJGxhbmdbJ3R5cGVfUmV2aWV3cyddID0gJ1Jldmlld3MnOw0KJGxhbmdbJ3RpdGxlX2NoYW5nZWRpciddID0gJ0NoYW5nZSB3b3JraW5nIGRpcmVjdG9yeSB0byB0aGlzIGRpcmVjdG9yeSc7DQokbGFuZ1sndGl0bGVfY2hhbmdldXBkaXInXSA9ICdHbyB0byB0aGUgcGFyZW50IGZvbGRlcic7DQokbGFuZ1sndGl0bGVfZHJvcHpvbmUnXSA9ICdZb3UgY2FuIGRyb3AgZmlsZXMgaGVyZSBmcm9tIHlvdXIgZmlsZSBtYW5hZ2VyIHRvIGF1dG9tYXRpY2FsbHkgYmVnaW4gdXBsb2FkaW5nJzsNCiRsYW5nWyd0aXRsZV9yZWZyZXNoJ10gPSAnUmVmcmVzaCBDYWNoZWQgRGF0YSc7DQojVQ0KJGxhbmdbJ3VwbG9hZCddID0gJ1VwbG9hZCc7DQojVg0KJGxhbmdbJ1ZBTElEQVRJT05fRVJST1InXSA9ICdQbGVhc2UgcHJvdmlkZSB5b3VyIExvZyBGaWxlIHBhdGgnOw0KI1cNCiRsYW5nWyd3YXJuX2RlbGV0ZV9kaXJlY3RvcnknXSA9ICdBIGZvbGRlciBpcyBzZWxlY3RlZCBmb3IgZGVsZXRpb24sIGFsbCBvYmplY3RzIGluIHRoZSBmb2xkZXIgd2lsbCBiZSBkZWxldGVkLCBhbmQgYW55IG5ldyBvYmplY3RzIGFkZGVkIHdoaWxlIHRoZSBkZWxldGUgYWN0aW9uIGlzIGluIHByb2dyZXNzIG1pZ2h0IGFsc28gYmUgZGVsZXRlZC4gSWYgYW4gb2JqZWN0IGlzIHNlbGVjdGVkIGZvciBkZWxldGlvbiwgYW55IG5ldyBvYmplY3RzIHdpdGggdGhlIHNhbWUgbmFtZSB0aGF0IGFyZSB1cGxvYWRlZCBiZWZvcmUgdGhlIGRlbGV0ZSBhY3Rpb24gaXMgY29tcGxldGVkIHdpbGwgYWxzbyBiZSBkZWxldGVkLic7DQokbGFuZ1snd2Fybl9maWxlX25vdF9hbGxvd2VkJ10gPSAnRmlsZXR5cGUgbm90IGFsbG93ZWQnOw0KJGxhbmdbJ3dhcm5fZmlsZV9taXNzaW5nJ10gPSAnU2VsZWN0IGEgZmlsZSB0byB1cGxvYWQnOw0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.aws_s3_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KDQp1c2UgXEF3c1xTM1xTM0NsaWVudDsgIA0KdXNlIFxBd3NcRXhjZXB0aW9uXEF3c0V4Y2VwdGlvbjsNCnVzZSBcQXdzXEV4Y2VwdGlvblxVbnJlc29sdmVkRW5kcG9pbnRFeGNlcHRpb247DQp1c2UgXEFXU1NES1xFeGNlcHRpb247DQp1c2UgXEFXU1MzXGhlbHBlcnM7DQoNCmZpbmFsIGNsYXNzIGF3c19zM191dGlscw0Kew0KDQogICAgcHJpdmF0ZSAkczNDbGllbnQgPSBudWxsOw0KICAgIHByaXZhdGUgc3RhdGljICRfX21vZDsNCiAgICBwcml2YXRlIHN0YXRpYyAkX19zZGs7DQoNCiAgICBwdWJsaWMgc3RhdGljICRwcm9wZXJ0eSA9ICJoZWxsbyB3b3JsZCI7DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QgKCl7DQoNCiAgICAgICAgJHRoaXMtPmF3c3NkayA9IHNlbGY6OmdldF9zZGsoKTsNCiAgICAgICAgJHRoaXMtPm1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAgICAgJHRoaXMtPnMzQ2xpZW50ID0gbnVsbDsNCiAgICAgICAgJHRoaXMtPmJ1Y2tldF9uYW1lID0gJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgnYnVja2V0X25hbWUnKTsNCiAgICAgICAgJHRoaXMtPmFjY2Vzc19yZWdpb24gPSAkdGhpcy0+bW9kLT5HZXRQcmVmZXJlbmNlKCdhY2Nlc3NfcmVnaW9uJyk7DQogICAgICAgICR0aGlzLT51c2VfY3VzdG9tX3VybCA9ICR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJ3VzZV9jdXN0b21fdXJsJyk7DQogICAgICAgICR0aGlzLT5jdXN0b21fdXJsID0gJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgnY3VzdG9tX3VybCcpOw0KICAgICAgICAkdGhpcy0+YWxsb3dlZCA9ICR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJ2FsbG93ZWQnKTsNCiAgICAgICAgJHRoaXMtPmVycm9ycyA9IGFycmF5KCk7DQoNCiAgICB9DQoNCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBsYW5nKCkNCiAgICB7DQogICAgICAgIGlmKCAhc2VsZjo6JF9fbW9kICkgc2VsZjo6JF9fbW9kID0gc2VsZjo6Z2V0X21vZCgpOw0KICAgICAgICAkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsNCiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KHNlbGY6OiRfX21vZCwnTGFuZycpLCRhcmdzKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoKSB7DQoNCiAgICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOw0KICAgICAgICAkc2V0dGluZ3MgPSAkdGhpcy0+bW9kLT5HZXRTZXR0aW5nc1ZhbHVlcygpOw0KICAgICAgICAvL3ByaW50X3IoJHNldHRpbmdzKTsNCiAgICAgICAgaWYoZW1wdHkoJHNldHRpbmdzKSkgcmV0dXJuIGZhbHNlOw0KDQogICAgICAgIHRyeSB7DQogICAgICAgICAgICAkZGF0YSA9IGFycmF5KCdidWNrZXRfbmFtZScsJ2FjY2Vzc19yZWdpb24nKTsNCg0KICAgICAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGtleSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkaXRlbSA9ICR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJGtleSk7DQogICAgICAgICAgICAgICAgaWYoJGl0ZW09PSIiIG9yICRpdGVtPT1udWxsKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmVycm9yc1tdID0gJHRoaXMtPmxhbmcoJGtleSkuICIgIi4kdGhpcy0+bGFuZygicmVxdWlyZWQiKSA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZighZW1wdHkoJHRoaXMtPmVycm9ycykpew0KICAgICAgICAgICAgICAgIC8vcHJpbnRfcigkdGhpcy0+ZXJyb3JzKTsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEFXU1NES1xFeGNlcHRpb24oJHRoaXMtPmVycm9ycywic2xpZGUtZGFuZ2VyIik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICRzMyA9IHNlbGY6OmdldFMzQ2xpZW50KCk7DQogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHMzKSAmJiAhJHMzWydjb25uJ10pew0KICAgICAgICAgICAgICAgICR0aGlzLT5lcnJvcnNbXSA9ICRzM1snbWVzc2FnZSddOw0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBcQVdTU0RLXEV4Y2VwdGlvbigkdGhpcy0+ZXJyb3JzLCJzbGlkZS1kYW5nZXIiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5zM0NsaWVudCA9ICRzMzsNCg0KICAgICAgICAgICAgaWYoISR0aGlzLT5zM0NsaWVudC0+ZG9lc0J1Y2tldEV4aXN0KCR0aGlzLT5tb2QtPkdldFByZWZlcmVuY2UoJ2J1Y2tldF9uYW1lJykpKXsNCiAgICAgICAgICAgICAgICAkdGhpcy0+ZXJyb3JzW10gPSAkdGhpcy0+bW9kLT5HZXRQcmVmZXJlbmNlKCdidWNrZXRfbmFtZScpLiIgZG9lcyBub3QgZXhpc3QiOw0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBcQVdTU0RLXEV4Y2VwdGlvbigkdGhpcy0+ZXJyb3JzLCJzbGlkZS1kYW5nZXIiKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCJidWNrZXRfbmFtZSIsJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgnYnVja2V0X25hbWUnKSk7DQogICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oImJ1Y2tldF91cmwiLCJodHRwczovLyIuJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgnYnVja2V0X25hbWUnKS4iLnMzLiIuJHRoaXMtPm1vZC0+R2V0UHJlZmVyZW5jZSgnYWNjZXNzX3JlZ2lvbicpLiIuYW1hem9uYXdzLmNvbS8iKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy9oZWxwZXJzOjpfRGlzcGxheUFkbWluTWVzc2FnZShudWxsLGFycmF5KHNlbGY6OmxhbmcoJ21zZ192cmZ5X2ludGVncml0eXZlcmlmaWVkJykpKTsNCg0KICAgICAgICB9DQogICAgICAgIGNhdGNoIChcQVdTU0RLXEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgJHRoaXMtPmF3c3Nkay0+X0Rpc3BsYXlNZXNzYWdlKCRlLT5nZXRUZXh0KCksJGUtPmdldFR5cGUoKSk7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICAkbWVzc2FnZSA9ICR0aGlzLT5hd3NzZGstPl9EaXNwbGF5TWVzc2FnZSgkdGhpcy0+bGFuZygnbXNnX3ZyZnlfaW50ZWdyaXR5dmVyaWZpZWQnKSwic3VjY2VzcyIsMSk7DQogICAgICAgICRzbWFydHktPmFzc2lnbigibWVzc2FnZSIsJG1lc3NhZ2UpOw0KICAgICAgICByZXR1cm4gdHJ1ZTsNCgl9DQogICAgDQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFMzQ2xpZW50KCl7DQoNCiAgICAgICAgJHJlc3VsdCA9IGFycmF5KCk7DQogICAgICAgICRyZXN1bHRbJ2Nvbm4nXSA9IHRydWU7DQoNCiAgICAgICAgdHJ5IHsNCg0KICAgICAgICAgICAgJHMzQ2xpZW50ID0gbmV3IFMzQ2xpZW50KFsNCiAgICAgICAgICAgICAgICAnY3JlZGVudGlhbHMnID0+IHNlbGY6OmdldF9jcmVkZW50aWFscygpLA0KICAgICAgICAgICAgICAgICdyZWdpb24nID0+IHNlbGY6OmdldF9tb2QoKS0+R2V0UHJlZmVyZW5jZSgnYWNjZXNzX3JlZ2lvbicpLA0KICAgICAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnbGF0ZXN0Jw0KICAgICAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICAkYnVja2V0cyA9ICRzM0NsaWVudC0+bGlzdEJ1Y2tldHMoKTsNCiAgICAgICAgICAgIA0KICAgICAgICB9IGNhdGNoIChBd3NFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICRyZXN1bHRbJ2Nvbm4nXSA9IGZhbHNlOw0KICAgICAgICAgICAgJHJlc3VsdFsnbWVzc2FnZSddID0gJGUtPmdldEF3c0Vycm9yTWVzc2FnZSgpOw0KICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJHMzQ2xpZW50Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB1cGxvYWRfZmlsZSgkZmlsZV9uYW1lLCRmaWxlX3RlbXBfc3JjKXsNCg0KICAgICAgICAkdGhpcy0+czNDbGllbnQgPSAkdGhpczo6Z2V0UzNDbGllbnQoKTsNCiAgICAgICAgJHJldCA9IGFycmF5KCk7DQogICAgICAgIHRyeSB7IA0KICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5zM0NsaWVudC0+cHV0T2JqZWN0KFsgDQogICAgICAgICAgICAgICAgJ0J1Y2tldCcgPT4gJHRoaXMtPmJ1Y2tldF9uYW1lLCANCiAgICAgICAgICAgICAgICAnS2V5JyAgICA9PiAkZmlsZV9uYW1lLA0KICAgICAgICAgICAgICAgICdTb3VyY2VGaWxlJyA9PiAkZmlsZV90ZW1wX3NyYywNCiAgICAgICAgICAgICAgICAnVGFnZ2luZycgPT4gIk1vZHVsZT1DTVNNUzo6QVdTUzMiDQogICAgICAgICAgICBdKTsgDQogICAgICAgICAgICAvLyRyZXN1bHRfYXJyID0gJHJlc3VsdC0+dG9BcnJheSgpOyANCg0KICAgICAgICAgICAgJHJldFswXSA9IHRydWU7DQogICAgICAgICAgICAkcmV0WzJdID0gJGZpbGVfbmFtZTsgIA0KDQogICAgICAgIH0gY2F0Y2ggKEF3c0V4Y2VwdGlvbiAkZSkgeyANCiAgICAgICAgICAgICRyZXRbMF0gPSBmYWxzZTsNCiAgICAgICAgICAgICRyZXRbMV0gPSAkZS0+Z2V0QXdzRXJyb3JNZXNzYWdlKCk7DQogICAgICAgICAgICAvL2VjaG8gJGUtPmdldENvZGUoKSAuICIgIiAuJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgICAgfSANCg0KICAgICAgICByZXR1cm4gJHJldDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gbGlzdF9teV9idWNrZXRzKCl7DQogICAgICAgICRidWNrZXRzID0gJHRoaXMtPnMzQ2xpZW50LT5saXN0QnVja2V0cygpOw0KICAgICAgICByZXR1cm4gJGJ1Y2tldHNbJ0J1Y2tldHMnXTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gYnVja2V0c0V4aXN0cygkYnVja2V0X2lkKXsNCiAgICAgICBpZigkdGhpcy0+czNDbGllbnQtPmRvZXNCdWNrZXRFeGlzdCgkYnVja2V0X2lkKSl7DQogICAgICAgIGVjaG8gImJ1Y2tldCBleGlzdHMiOw0KICAgICAgIH0gZWxzZSB7DQogICAgICAgIGVjaG8gImJ1Y2tldCBkb2VzIG5vdCBleGlzdCI7DQogICAgICAgfQ0KDQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZVBhdGgoJGxpbmssJHBhdGgpew0KICAgICAgICAkbmV3cGhyYXNlID0gc3RyX3JlcGxhY2UoJHBhdGgsICIiLCAkbGluayk7DQogICAgICAgIHJldHVybiAkbmV3cGhyYXNlOw0KICAgICB9DQoNCiAgICANCiAgICAgcHVibGljIGZ1bmN0aW9uIGxpc3RfbXlfZmlsZXMoKXsNCiAgICAgICAgJGJ1Y2tldHMgPSAkdGhpcy0+czNDbGllbnQtPmxpc3RCdWNrZXRzKCk7DQogICAgICAgIHJldHVybiAkYnVja2V0c1snQnVja2V0cyddOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmlsZSgkcHJlZml4KXsNCg0KICAgICAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQVdTUzMnKTsNCiAgICAgICAgJHRoaXMtPnMzQ2xpZW50ID0gc2VsZjo6Z2V0UzNDbGllbnQoKTsNCg0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJGZpbGUgPSAkdGhpcy0+czNDbGllbnQtPmdldE9iamVjdChbDQogICAgICAgICAgICAgICAgJ0J1Y2tldCcgPT4gJG1vZC0+R2V0T3B0aW9uVmFsdWUoImJ1Y2tldF9uYW1lIiksDQogICAgICAgICAgICAgICAgJ0tleScgPT4gJHByZWZpeCwNCiAgICAgICAgICAgIF0pOw0KICAgICAgICAgICAgJGJvZHkgPSAkZmlsZS0+Z2V0KCdCb2R5Jyk7DQogICAgICAgICAgICAkYm9keS0+cmV3aW5kKCk7DQogICAgICAgICAgICANCiAgICAgICAgfSBjYXRjaCAoQXdzRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICAkZXJyb3JzW10gPSAiRmFpbGVkIHRvIGRvd25sb2FkICRmaWxlX25hbWUgZnJvbSAkYnVja2V0X25hbWUgd2l0aCBlcnJvcjogIiAuICRlLT5nZXRBd3NFcnJvck1lc3NhZ2UoKTsNCiAgICAgICAgICAgICRlcnJvcnNbXSA9ICJQbGVhc2UgZml4IGVycm9yIHdpdGggZmlsZSBkb3dubG9hZGluZyBiZWZvcmUgY29udGludWluZy4iOw0KICAgICAgICANCiAgICAgICAgICAgICRtb2QtPkRpc3BsYXlFcnJvck1lc3NhZ2UoJGVycm9ycyk7DQoNCiAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfZmlsZV9pbmZvKCRwcmVmaXgpew0KDQogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBV1NTMycpOw0KICAgICAgICAkczNDbGllbnQgPSBzZWxmOjpnZXRTM0NsaWVudCgpOw0KDQogICAgICAgICRidWNrZXRfaWQgPSAkbW9kLT5HZXRPcHRpb25WYWx1ZSgiYnVja2V0X25hbWUiKTsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRmaWxlID0gJHMzQ2xpZW50LT5nZXRPYmplY3QoWw0KICAgICAgICAgICAgICAgICdCdWNrZXQnID0+ICRidWNrZXRfaWQsDQogICAgICAgICAgICAgICAgJ0tleScgPT4gJHByZWZpeCwNCiAgICAgICAgICAgIF0pOw0KDQogICAgICAgICAgICAkaGVhZCA9ICRzM0NsaWVudC0+aGVhZE9iamVjdChbDQogICAgICAgICAgICAgICAgJ0J1Y2tldCcgPT4gJGJ1Y2tldF9pZCwNCiAgICAgICAgICAgICAgICAnS2V5JyA9PiAkcHJlZml4DQogICAgICAgICAgICBdKTsNCg0KICAgICAgICAgICAgJG9uZXJvdyA9IG5ldyBcc3RkQ2xhc3MoKTsNCiAgICAgICAgICAgICRvbmVyb3ctPm5hbWUgPSAkcHJlZml4Ow0KICAgICAgICAgICAgJG9uZXJvdy0+YnVja2V0ID0gJGJ1Y2tldF9pZDsNCiAgICAgICAgICAgICRvbmVyb3ctPm1pbWUgPSAkaGVhZFsnQ29udGVudFR5cGUnXTsNCiAgICAgICAgICAgICRvbmVyb3ctPnNpemU9c2VsZjo6Zm9ybWF0Qnl0ZXMoJGZpbGVbJ0NvbnRlbnRMZW5ndGgnXSk7DQogICAgICAgICAgICAkb25lcm93LT5wb3N0ZGF0ZT1zdHJ0b3RpbWUoICRmaWxlWydMYXN0TW9kaWZpZWQnXSApOw0KICAgICAgICAgICAgJG9uZXJvdy0+dXJsX29yaWdpbmFsID0gc2VsZjo6Z2V0VXJsKCRwcmVmaXgpOw0KICAgICAgICAgICAgJG9uZXJvdy0+dXJsID0gJG1vZC0+R2V0UHJldHR5VXJsKCRwcmVmaXgpOw0KICAgICAgICAgICAgJG9uZXJvdy0+dXJsX3ByZXNpZ25lZCA9IHNlbGY6OnByZXNpZ25lZFVybCgkcHJlZml4KTsNCiAgICAgICAgICAgICRvbmVyb3ctPnVybCA9IHN0cl9yZXBsYWNlKCdcXCcsJy8nLCRvbmVyb3ctPnVybCk7IC8vIHdpbmRvemUgYm90aCBzdWNrcywgYW5kIGJsb3dzLg0KICAgICAgICAgICAgaWYoc2VsZjo6aXNfZmlsZV9pbWFnZSgkb25lcm93LT5uYW1lKSkgJG9uZXJvdy0+aXNpbWFnZSA9IHRydWU7DQoNCiAgICAgICAgICAgIHJldHVybiAkb25lcm93Ow0KDQogICAgICAgICAgICANCiAgICAgICAgfSBjYXRjaCAoQXdzRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICAkZXJyb3JzW10gPSAiRmFpbGVkIHRvIGRvd25sb2FkICRmaWxlX25hbWUgZnJvbSAkYnVja2V0X25hbWUgd2l0aCBlcnJvcjogIiAuICRlLT5nZXRBd3NFcnJvck1lc3NhZ2UoKTsNCiAgICAgICAgICAgICRlcnJvcnNbXSA9ICJQbGVhc2UgZml4IGVycm9yIHdpdGggZmlsZSBkb3dubG9hZGluZyBiZWZvcmUgY29udGludWluZy4iOw0KICAgICAgICANCiAgICAgICAgICAgICRtb2QtPkRpc3BsYXlFcnJvck1lc3NhZ2UoJGVycm9ycyk7DQoNCiAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWxldGVPYmplY3QoJGJ1Y2tldCwka2V5bmFtZSl7DQogICAgICAgICRzMyA9IHNlbGY6OmdldFMzQ2xpZW50KCk7DQogICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGVjaG8gJ0F0dGVtcHRpbmcgdG8gZGVsZXRlICcgLiAka2V5bmFtZSAuICcuLi4nIC4gUEhQX0VPTDsNCg0KICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkczMtPmRlbGV0ZU9iamVjdChbDQogICAgICAgICAgICAgICAgICAgICdCdWNrZXQnID0+ICRidWNrZXQsDQogICAgICAgICAgICAgICAgICAgICdLZXknICAgID0+ICRrZXluYW1lDQogICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICAgICBpZiAoJHJlc3VsdFsnRGVsZXRlTWFya2VyJ10pDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBlY2hvICRrZXluYW1lIC4gJyB3YXMgZGVsZXRlZCBvciBkb2VzIG5vdCBleGlzdC4nIC4gUEhQX0VPTDsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBleGl0KCdFcnJvcjogJyAuICRrZXluYW1lIC4gJyB3YXMgbm90IGRlbGV0ZWQuJyAuIFBIUF9FT0wpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGNhdGNoIChBd3NFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgICAgICBleGl0KCdFcnJvcjogJyAuICRlLT5nZXRBd3NFcnJvck1lc3NhZ2UoKSAuIFBIUF9FT0wpOw0KICAgICAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWxldGVPYmplY3REaXIoJGJ1Y2tldF9pZCwkZGlyKXsNCiAgICAgICAgJHMzID0gc2VsZjo6Z2V0UzNDbGllbnQoKTsNCiAgICANCiAgICAgICAgJGtleXMgPSAkczMtPmxpc3RPYmplY3RzKFsNCiAgICAgICAgICAgICdCdWNrZXQnID0+ICRidWNrZXRfaWQsDQogICAgICAgICAgICAnUHJlZml4JyA9PiAkZGlyDQogICAgICAgIF0pOw0KDQogICAgICAgIC8vIDMuIERlbGV0ZSB0aGUgb2JqZWN0cy4NCiAgICAgICAgZm9yZWFjaCAoJGtleXNbJ0NvbnRlbnRzJ10gYXMgJGtleSkNCiAgICAgICAgew0KICAgICAgICAgICAgJHMzLT5kZWxldGVPYmplY3RzKFsNCiAgICAgICAgICAgICAgICAnQnVja2V0JyAgPT4gJGJ1Y2tldF9pZCwNCiAgICAgICAgICAgICAgICAnRGVsZXRlJyA9PiBbDQogICAgICAgICAgICAgICAgICAgICdPYmplY3RzJyA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICBbDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0tleScgPT4gJGtleVsnS2V5J10NCiAgICAgICAgICAgICAgICAgICAgICAgIF0NCiAgICAgICAgICAgICAgICAgICAgXQ0KICAgICAgICAgICAgICAgIF0NCiAgICAgICAgICAgIF0pOw0KICAgICAgICB9DQogICAgDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIA0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9tb2QoKXsNCiAgICAgICAgaWYoICFzZWxmOjokX19tb2QgKSBzZWxmOjokX19tb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBV1NTMycpOw0KICAgICAgICByZXR1cm4gc2VsZjo6JF9fbW9kOw0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3Nkaygpew0KICAgICAgICBpZiggIXNlbGY6OiRfX3NkayApIHNlbGY6OiRfX3NkayA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FXU1NESycpOw0KICAgICAgICByZXR1cm4gc2VsZjo6JF9fc2RrOw0KICAgIH0NCg0KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldF9jcmVkZW50aWFscygpew0KICAgICAgICAkY3JlZGVudGlhbHMgPSBzZWxmOjpnZXRfc2RrKCktPmdldENyZWRlbnRpYWxzKCk7DQogICAgICAgIHJldHVybiAkY3JlZGVudGlhbHM7DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVcmwoJGtleSl7DQogICAgICAgICRtb2QgPSBzZWxmOjpnZXRfbW9kKCk7DQogICAgICAgICRidWNrZXRfaWQgPSAkbW9kLT5HZXRPcHRpb25WYWx1ZSgiYnVja2V0X25hbWUiKTsNCg0KICAgICAgICAkczNDbGllbnQgPSBzZWxmOjpnZXRTM0NsaWVudCgpOw0KICAgICAgICAkdXJsID0gJHMzQ2xpZW50LT5nZXRPYmplY3RVcmwoJGJ1Y2tldF9pZCwgJGtleSk7DQogICAgICAgDQogICAgICAgIHJldHVybiAkdXJsOw0KDQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcmVzaWduZWRVcmwoJGtleSl7DQoNCiAgICAgICAgJG1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAgICAgJGJ1Y2tldF9pZCA9ICRtb2QtPkdldE9wdGlvblZhbHVlKCJidWNrZXRfbmFtZSIpOw0KICAgICAgICAkdXNlX2N1c3RvbV91cmwgPSAkbW9kLT5HZXRPcHRpb25WYWx1ZSgidXNlX2N1c3RvbV91cmwiKTsNCiAgICAgICAgJGN1c3RvbV91cmwgPSAkbW9kLT5HZXRPcHRpb25WYWx1ZSgiY3VzdG9tX3VybCIpOw0KDQogICAgICAgIHRyeSB7DQogICAgICAgICAgICAkczNDbGllbnQgPSBzZWxmOjpnZXRTM0NsaWVudCgpOw0KICAgICAgICAgICAgJGNtZCA9ICRzM0NsaWVudC0+Z2V0Q29tbWFuZCgnR2V0T2JqZWN0JywgWw0KICAgICAgICAgICAgICAgICdCdWNrZXQnID0+ICRidWNrZXRfaWQsDQogICAgICAgICAgICAgICAgJ0tleScgPT4gJGtleQ0KICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICRyZXF1ZXN0ID0gJHMzQ2xpZW50LT5jcmVhdGVQcmVzaWduZWRSZXF1ZXN0KCRjbWQsICcrMSBob3VyJyk7DQogICAgICAgICAgICAkcHJlc2lnbmVkVXJsID0gKHN0cmluZykkcmVxdWVzdC0+Z2V0VXJpKCk7DQoNCiAgICAgICAgICAgIGlmKCAkdXNlX2N1c3RvbV91cmwgJiYgJGN1c3RvbV91cmwgKSB7DQogICAgICAgICAgICAgICAgJHVybFBhcnRzID0gcGFyc2VfdXJsKCRwcmVzaWduZWRVcmwpOw0KICAgICAgICAgICAgICAgIGlmICgkdXJsUGFydHMgPT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIkVycm9yIHBhcnNpbmcgdGhlIFVSTCI7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJHVybFBhcnRzWydzY2hlbWUnXSA9IHBhcnNlX3VybCgkY3VzdG9tX3VybCwgUEhQX1VSTF9TQ0hFTUUpOw0KICAgICAgICAgICAgICAgICAgICAkdXJsUGFydHNbJ2hvc3QnXSA9IHBhcnNlX3VybCgkY3VzdG9tX3VybCwgUEhQX1VSTF9IT1NUKTsNCiAgICAgICAgICAgICAgICAgICAgJG5ld1VybCA9ICR1cmxQYXJ0c1snc2NoZW1lJ10gLiAnOi8vJyAuICR1cmxQYXJ0c1snaG9zdCddOw0KICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHVybFBhcnRzWydwYXRoJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbmV3VXJsIC49ICR1cmxQYXJ0c1sncGF0aCddOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdXJsUGFydHNbJ3F1ZXJ5J10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkbmV3VXJsIC49ICc/Jy4kdXJsUGFydHNbJ3F1ZXJ5J107DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHByZXNpZ25lZFVybCA9ICRuZXdVcmw7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4gJHByZXNpZ25lZFVybDsNCg0KICAgICAgICB9IGNhdGNoIChcQXdzRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICAvLyBIYW5kbGUgdGhlIGVycm9yDQogICAgICAgICAgICAkbWUtPnNldEVycm9yKGFycmF5KA0KICAgICAgICAgICAgICAgICdlcnJvcicgPT4gIkZhaWxlZCB0byBjb25uZWN0IHRvIEFXUyBzZXJ2ZXIiLA0KICAgICAgICAgICAgICAgICdlcnJubycgPT4gJGUtPmdldEF3c0Vycm9yQ29kZSgpLA0KICAgICAgICAgICAgICAgICdlcnJzdHInID0+ICRlLT5nZXRBd3NFcnJvck1lc3NhZ2UoKQ0KICAgICAgICAgICAgKSk7DQoNCiAgICAgICAgfQ0KICAgICAgIA0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZm9ybWF0Qnl0ZXMoJGJ5dGVzKSB7DQogICAgICAgIGlmICgkYnl0ZXMgPiAwKSB7DQogICAgICAgICAgICAkaSA9IGZsb29yKGxvZygkYnl0ZXMpIC8gbG9nKDEwMjQpKTsNCiAgICAgICAgICAgICRzaXplcyA9IGFycmF5KCdCJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJyk7DQogICAgICAgICAgICByZXR1cm4gc3ByaW50ZignJS4wMkYnLCByb3VuZCgkYnl0ZXMgLyBwb3coMTAyNCwgJGkpLDEpKSAqIDEgLiAnICcgLiBAJHNpemVzWyRpXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdW1CeXRlcygkaXRlbXMpIHsNCiAgICAgICAgJHN1bSA9IDA7DQogICAgICAgIGZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgew0KICAgICAgICAgICAgaWYgKGlzc2V0KCRpdGVtLT5zaXplKSkgew0KICAgICAgICAgICAgICAgICRzdW0gKz0gJGl0ZW0tPnNpemU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICANCiAgICAgICAgcmV0dXJuIHNlbGY6OmZvcm1hdEJ5dGVzKCRzdW0pOw0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNfZmlsZV9hY2NlcHRhYmxlKCAkZmlsZV90eXBlICkNCiAgICB7DQogICAgICAgICRtb2QgPSBzZWxmOjpnZXRfbW9kKCk7DQogICAgICAgICRmaWxlX3R5cGUgPSBzdHJ0b2xvd2VyKCRmaWxlX3R5cGUpOw0KICAgICAgICAkYWxsb3dUeXBlcyA9IGV4cGxvZGUoJywnLCRtb2QtPkdldFByZWZlcmVuY2UoJ2FsbG93ZWQnKSk7DQogICAgICAgIGlmKCFpbl9hcnJheSgkZmlsZV90eXBlLCAkYWxsb3dUeXBlcykpIHJldHVybiBGQUxTRTsNCiAgICAgICAgcmV0dXJuIFRSVUU7DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc19maWxlX2ltYWdlKCAkc3JjX2ZpbGVfbmFtZSApDQogICAgew0KICAgICAgICAkc3VwcG9ydGVkX2ltYWdlID0gYXJyYXkoDQogICAgICAgICAgICAnZ2lmJywNCiAgICAgICAgICAgICdqcGcnLA0KICAgICAgICAgICAgJ2pwZWcnLA0KICAgICAgICAgICAgJ3BuZycNCiAgICAgICAgKTsNCiAgICAgICAgDQogICAgICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRzcmNfZmlsZV9uYW1lLCBQQVRISU5GT19FWFRFTlNJT04pKTsNCiAgICAgICAgaWYgKCFpbl9hcnJheSgkZXh0LCAkc3VwcG9ydGVkX2ltYWdlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogIHB1YmxpYyBmdW5jdGlvbiBjaGVja19pYW1fcG9saWN5KCkgew0KICAgICAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7DQogICAgICAgICRlcnJvciA9IG51bGw7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICAkcmVzcCA9ICR0aGlzLT5zM0NsaWVudC0+Z2V0QnVja2V0UG9saWN5KFsNCiAgICAgICAgICAgICAgICAnQnVja2V0JyA9PiAkdGhpcy0+YnVja2V0X25hbWUNCiAgICAgICAgICAgIF0pOw0KICAgICAgICAgICAgJG1lc3NhZ2UgPSAiU3VjY2VlZCBpbiByZWNlaXZpbmcgYnVja2V0IHBvbGljeToiOw0KDQogICAgICAgIH0gY2F0Y2ggKEF3c0V4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgaWYoJGUtPmdldFN0YXR1c0NvZGUoKSA9PSA0MDQpew0KICAgICAgICAgICAgICAgICRlcnJvciA9IDE7DQogICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAkdGhpcy0+YnVja2V0X25hbWUuIiAiLiRlLT5nZXRBd3NFcnJvck1lc3NhZ2UoKTsNCiAgICAgICAgICAgICAgICAvLyR0aGlzLT5wdXRfaWFtX3BvbGljeSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywkbWVzc2FnZSk7DQogICAgICAgICRzbWFydHktPmFzc2lnbignZXJyb3InLCRlcnJvcik7DQogICAgICAgIA0KDQogICAgfQ0KDQogICAgDQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHB1dF9pYW1fcG9saWN5KCkgew0KDQogICAgICAgICRwb2xpY3kgPSAkdGhpcy0+Z2V0X2lhbV9wb2xpY3koKTsNCiAgICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOw0KDQogICAgICAgIHRyeSB7DQogICAgICAgICAgICAkcmVzcCA9ICR0aGlzLT5zM0NsaWVudC0+cHV0QnVja2V0UG9saWN5KFsNCiAgICAgICAgICAgICAgICAnQnVja2V0JyA9PiAkdGhpcy0+YnVja2V0X25hbWUsDQogICAgICAgICAgICAgICAgJ1BvbGljeScgPT4gJHBvbGljeSwNCiAgICAgICAgICAgIF0pOw0KICAgICAgICAgICAgZWNobyAiU3VjY2VlZCBpbiBwdXQgYSBwb2xpY3kgb24gYnVja2V0OiAiIC4gJHRoaXMtPmJ1Y2tldF9uYW1lIC4gIlxuPGJyPiI7DQogICAgICAgIH0gY2F0Y2ggKEF3c0V4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlDQogICAgICAgICAgICAkc21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCR0aGlzLT5idWNrZXRfbmFtZS4iICIuJGUtPmdldEF3c0Vycm9yTWVzc2FnZSgpKTsNCg0KICAgICAgICB9DQoNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9wb2xpY3koKXsNCiAgICAgICAgJG1vZCA9IHNlbGY6OmdldF9tb2QoKTsNCiAgICAgICAgJHMzQ2xpZW50ID0gc2VsZjo6Z2V0UzNDbGllbnQoKTsNCiAgICAgICAgJGJ1Y2tldCA9ICRtb2QtPkdldE9wdGlvblZhbHVlKCJidWNrZXRfbmFtZSIpOw0KDQogICAgICAgIHRyeSB7DQogICAgICAgICAgICAkcmVzcCA9ICRzM0NsaWVudC0+Z2V0QnVja2V0QWNsKFsNCiAgICAgICAgICAgICAgICAnQnVja2V0JyA9PiAkYnVja2V0DQogICAgICAgICAgICBdKTsNCiAgICAgICAgICAgIC8vcHJpbnRfcigkcmVzcCk7DQogICAgICAgIH0gY2F0Y2ggKEF3c0V4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgLy8gb3V0cHV0IGVycm9yIG1lc3NhZ2UgaWYgZmFpbHMNCiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgICAgICAgIGVjaG8gIlxuIjsNCiAgICAgICAgfQ0KDQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSgpDQogICAgew0KICAgICAgICBzdGF0aWMgJGluc3RhbmNlID0gbnVsbDsNCiAgICAgICAgaWYgKCEkaW5zdGFuY2UpIHsNCiAgICAgICAgICAgICRpbnN0YW5jZSA9IG5ldyBzZWxmKCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGluc3RhbmNlOw0KICAgIH0NCiAgICANCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X2lhbV9wb2xpY3koKSA6IHN0cmluZyB7DQogICAgICAgICRtb2QgPSBzZWxmOjpnZXRfbW9kKCk7DQogICAgICAgICRidWNrZXRfaWQgPSAkbW9kLT5HZXRPcHRpb25WYWx1ZSgiYnVja2V0X25hbWUiKTsNCgkJJGJ1Y2tldCA9IHN0cnRvayggJGJ1Y2tldF9pZCwgJy8nICk7DQoNCgkJJHBhdGggPSBudWxsOw0KDQoJCWlmICggc3RycG9zKCAkYnVja2V0X2lkLCAnLycgKSApIHsNCgkJCSRwYXRoID0gc3RyX3JlcGxhY2UoIHN0cnRvayggJGJ1Y2tldF9pZCwgJy8nICkgLiAnLycsICcnLCAkYnVja2V0X2lkICk7DQoJCX0NCg0KCQlyZXR1cm4gJ3sNCiAgICAgICAgICAgICJWZXJzaW9uIjogIjIwMTItMTAtMTciLA0KICAgICAgICAgICAgIlN0YXRlbWVudCI6IFsNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICJTaWQiOiAiQmFzaWNBY2Nlc3MiLA0KICAgICAgICAgICAgICAgICAgICAiUHJpbmNpcGFsIjogIioiLA0KICAgICAgICAgICAgICAgICAgICAiRWZmZWN0IjogIkFsbG93IiwNCiAgICAgICAgICAgICAgICAgICAgIkFjdGlvbiI6IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICJzMzpBYm9ydE11bHRpcGFydFVwbG9hZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAiczM6RGVsZXRlT2JqZWN0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzMzpHZXRPYmplY3QiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInMzOkdldE9iamVjdEFjbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAiczM6UHV0T2JqZWN0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzMzpQdXRPYmplY3RBY2wiDQogICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZSI6IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICJhcm46YXdzOnMzOjo6Jy4kYnVja2V0X2lkLicvKiINCiAgICAgICAgICAgICAgICAgICAgXQ0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAiU2lkIjogIkFsbG93Um9vdEFuZEhvbWVMaXN0aW5nT2ZCdWNrZXQiLA0KICAgICAgICAgICAgICAgICAgICAiUHJpbmNpcGFsIjogIioiLA0KICAgICAgICAgICAgICAgICAgICAiRWZmZWN0IjogIkFsbG93IiwNCiAgICAgICAgICAgICAgICAgICAgIkFjdGlvbiI6IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICJzMzpHZXRCdWNrZXRBY2wiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInMzOkdldEJ1Y2tldExvY2F0aW9uIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJzMzpHZXRCdWNrZXRQb2xpY3kiLA0KICAgICAgICAgICAgICAgICAgICAgICAgInMzOkxpc3RCdWNrZXQiDQogICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgICAgICJSZXNvdXJjZSI6IFsiYXJuOmF3czpzMzo6OicgLiAkYnVja2V0X2lkIC4gJyJdDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgXQ0KICAgICAgICB9JzsNCg0KICAgICAgICANCgl9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNvcnRfYnlfa2V5KCRhcnJheSwgJGtleSkgew0KICAgICAgICB1c29ydCgkYXJyYXksIGZ1bmN0aW9uKCRhLCAkYikgdXNlICgka2V5KSB7DQogICAgICAgICAgICByZXR1cm4gJGFbJGtleV0gLSAkYlska2V5XTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldHVybiAkYXJyYXk7DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzb3J0QnlQcm9wZXJ0eSgkYXJyYXksICRwcm9wZXJ0eSkgew0KICAgICAgICB1c29ydCgkYXJyYXksIGZ1bmN0aW9uKCRhLCAkYikgdXNlICgkcHJvcGVydHkpIHsNCiAgICAgICAgICAgIHJldHVybiBzdHJjbXAoJGEtPiRwcm9wZXJ0eSwgJGItPiRwcm9wZXJ0eSk7DQogICAgICAgIH0pOw0KICAgICAgICByZXR1cm4gJGFycmF5Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbW92ZUl0ZW1zVG9CZWdpbm5pbmdCeUluZGV4KCYkYXJyYXksICRpbmRpY2VzVG9Nb3ZlKSB7DQogICAgICAgICRpdGVtc1RvTW92ZSA9IGFycmF5KCk7DQogICAgDQogICAgICAgIC8vIEV4dHJhY3QgdGhlIGl0ZW1zIHRvIG1vdmUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZGljZXMNCiAgICAgICAgZm9yZWFjaCAoJGluZGljZXNUb01vdmUgYXMgJGluZGV4KSB7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGFycmF5WyRpbmRleF0pKSB7DQogICAgICAgICAgICAgICAgJGl0ZW1zVG9Nb3ZlW10gPSAkYXJyYXlbJGluZGV4XTsNCiAgICAgICAgICAgICAgICB1bnNldCgkYXJyYXlbJGluZGV4XSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICANCiAgICAgICAgLy8gTWVyZ2UgdGhlIGl0ZW1zIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5DQogICAgICAgICRhcnJheSA9IGFycmF5X21lcmdlKCRpdGVtc1RvTW92ZSwgJGFycmF5KTsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFVwRGlyKCRteUFycmF5KXsNCg0KICAgICAgICAkY29tYmluZWRTdHJpbmcgPSAnJzsNCg0KICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkbXlBcnJheSkgLSAxOyAkaSsrKSB7DQogICAgICAgICAgICAkY29tYmluZWRTdHJpbmcgLj0gJG15QXJyYXlbJGldLT5uYW1lOw0KICAgICAgICAgICAgJGNvbWJpbmVkU3RyaW5nIC49ICcvJzsgLy8gQWRkIGEgc2VwYXJhdG9yIChlLmcuLCBjb21tYSBhbmQgc3BhY2UpDQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGNvbWJpbmVkU3RyaW5nOw0KDQogICAgfQ0KICANCg0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjYXRjaFdhcm5pbmcoJGVycm5vLCAkZXJyc3RyLCAkZXJyZmlsZSwgJGVycmxpbmUpDQogICAgew0KICAgICAgICAkdGhpcy0+c2V0RXJyb3IoYXJyYXkoDQogICAgICAgICAgICAnZXJyb3InID0+ICJDb25uZWN0aW5nIHRvIHRoZSBBV1Mgc2VydmVyIHJhaXNlZCBhIFBIUCB3YXJuaW5nOiAiLA0KICAgICAgICAgICAgJ2Vycm5vJyA9PiAkZXJybm8sDQogICAgICAgICAgICAnZXJyc3RyJyA9PiAkZXJyc3RyLA0KICAgICAgICAgICAgJ2VycmZpbGUnID0+ICRlcnJmaWxlLA0KICAgICAgICAgICAgJ2VycmxpbmUnID0+ICRlcnJsaW5lDQogICAgICAgICkpOw0KICAgIH0NCg0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzZXRFcnJvcigkZXJyb3IsJGRlYnVnPTEpDQogICAgew0KICAgICAgICAkdGhpcy0+ZXJyb3JzW10gPSAkZXJyb3I7DQogICAgICAgIGlmICgkZGVidWcgPj0gMSkgew0KICAgICAgICAgICAgZWNobyAnPHByZT4nOw0KICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmVycm9ycyBhcyAkZXJyb3IpIHsNCiAgICAgICAgICAgICAgICBwcmludF9yKCRlcnJvcik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8L3ByZT4nOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgc3RhdGljIGZpbmFsIHB1YmxpYyBmdW5jdGlvbiBsb2FkZXIoJHBhcmFtcywgJHNtYXJ0eSkNCiAgICB7DQogICAgICAgIGlmKGVtcHR5KCRwYXJhbXNbImZvcm1hdCJdKSkgew0KICAgICAgICAgICAgJGZvcm1hdCA9ICIlYiAlZSwgJVkiOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJGZvcm1hdCA9ICRwYXJhbXNbImZvcm1hdCJdOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBzdHJmdGltZSgkZm9ybWF0LHRpbWUoKSk7DQogICAgfQ0KDQoNCn0NCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.bucket_query.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KDQp1c2UgQVdTUzNcYXdzX3MzX3V0aWxzOw0KdXNlIEFXU1MzXGhlbHBlcnM7DQp1c2UgQVdTUzNcZW5jcnlwdDsNCg0KZmluYWwgY2xhc3MgYnVja2V0X3F1ZXJ5DQp7DQogICAgcHJpdmF0ZSAkczNDbGllbnQgPSBudWxsOw0KICAgIHByaXZhdGUgJF9kYXRhID0gWyANCiAgICAgICAgJ3ByZWZpeCc9Pm51bGwsIA0KICAgICAgICAnYnVja2V0Jz0+bnVsbCwgDQogICAgICAgICdkZWxpbWl0ZXInPT5udWxsLCANCiAgICAgICAgJ21heGtleXMnPT4xMDAwLCANCiAgICAgICAgJ3N0YXJ0YWZ0ZXInPT4wLA0KICAgICAgICAncmV0dXJuaWQnID0+IG51bGwsDQogICAgICAgICdkZXRhaWxwYWdlJyA9PiBudWxsDQogICAgXTsNCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGFyYW1zID0gYXJyYXkoKSkNCiAgICB7DQogICAgICAgIC8vcHJpbnRfcigkcGFyYW1zKTsNCiAgICAgICAgJHRoaXMtPnMzQ2xpZW50ID0gYXdzX3MzX3V0aWxzOjpnZXRTM0NsaWVudCgpOw0KDQogICAgICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkgew0KICAgICAgICAgICAgaWYoICFhcnJheV9rZXlfZXhpc3RzKCRrZXksJHRoaXMtPl9kYXRhKSApIGNvbnRpbnVlOw0KICAgICAgICAgICAgLy8gJHRoaXNbJGtleV0gPSAkdmFsOw0KICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQ0KICAgIHsNCiAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fZGF0YVska2V5XSkgKSByZXR1cm4gJHRoaXMtPl9kYXRhWyRrZXldOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgka2V5LCR2YWwpDQogICAgew0KICAgICAgICBzd2l0Y2goICRrZXkgKSB7DQogICAgICAgIGNhc2UgJ1ByZWZpeCc6DQogICAgICAgIGNhc2UgJ0J1Y2tldCc6DQogICAgICAgIGNhc2UgJ0RlbGltaXRlcic6DQogICAgICAgIGNhc2UgJ01hcmtlcic6DQogICAgICAgIGNhc2UgJ0NvbnRpbnVhdGlvblRva2VuJzoNCiAgICAgICAgICAgIGlmKCAhaXNfbnVsbCgkdmFsKSApICR2YWwgPSB0cmltKCR2YWwpOw0KICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdNYXhLZXlzJzoNCiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9IChpbnQpIG1heCgxLG1pbigxMDAwLChpbnQpICR2YWwpKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdTdGFydEFmdGVyJzoNCiAgICAgICAgICAgICR0aGlzLT5fZGF0YVska2V5XSA9IChpbnQpIG1heCgwLG1pbigxMDAwMDAsKGludCkgJHZhbCkpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ3BhZ2Vjb3VudCc6DQogICAgICAgIGNhc2UgJ3BhZ2VudW0nOg0KICAgICAgICBjYXNlICdyZXR1cm5pZCc6DQogICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAoaW50KSAkdmFsOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gJmV4ZWN1dGVfYnlfcGFnZXMoKXsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgJHJlc3VsdFBhZ2luYXRvciA9ICR0aGlzLT5zM0NsaWVudC0+Z2V0UGFnaW5hdG9yKCdMaXN0T2JqZWN0c1YyJywgJHRoaXMtPl9kYXRhKTsNCiAgICAgICAgICAgICRsaXN0aW5nID0gJHRoaXMtPl9kYXRhOw0KICAgICAgICAgICAgJGxpc3RpbmdbJ2RhdGUnXSA9IHRpbWUoKTsNCiAgICAgICAgICAgICRpID0gMTsNCiAgICAgICAgICAgICRpdGVtcyA9IDA7DQogICAgICAgICAgICBmb3JlYWNoICgkcmVzdWx0UGFnaW5hdG9yIGFzICRyZXN1bHQpIHsNCiAgICAgICAgICAgICAgICAvL3ByaW50X3IoJHJlc3VsdCk7DQogICAgICAgICAgICAgICAgJGxpc3RpbmdbJ3BhZ2VzJ11bJGldWydpdGVtY291bnQnXSA9ICRyZXN1bHRbJ0tleUNvdW50J107DQogICAgICAgICAgICAgICAgJGxpc3RpbmdbJ3BhZ2VzJ11bJGldWydpdGVtcyddID0gJHRoaXMtPkZldGNoQWxsKCRyZXN1bHQpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRpKys7DQogICAgICAgICAgICAgICAgJGl0ZW1zKys7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGZvcmVhY2goJGxpc3RpbmdbJ3BhZ2VzJ10gYXMgJHBhZ2Upew0KICAgICAgICAgICAgICAgICRsaXN0aW5nWyd0b3RhbCddICs9ICRwYWdlWydpdGVtY291bnQnXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBjYXRjaCAoQXdzRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICBpZigkZS0+Z2V0U3RhdHVzQ29kZSgpID09IDQwNCl7DQogICAgICAgICAgICAgICAgJGVycm9yX21lc3NhZ2UgPSAkYnVja2V0X2lkLiIgIi4kZS0+Z2V0QXdzRXJyb3JNZXNzYWdlKCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlID0gJGUtPmdldE1lc3NhZ2UoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJGVycm9yX21lc3NhZ2U7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGxpc3Rpbmc7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uICZleGVjdXRlKCkNCiAgICB7DQoNCiAgICAgICAgdHJ5IHsNCg0KICAgICAgICAgICAgJHFwYXJtcyA9IGFycmF5KCk7DQogICAgICAgICAgICAkcXBhcm1zWydCdWNrZXQnXSA9ICR0aGlzLT5idWNrZXQ7DQogICAgICAgICAgICAkcXBhcm1zWydEZWxpbWl0ZXInXSA9ICcvJzsNCiAgICAgICAgICAgICRxcGFybXNbJ1ByZWZpeCddID0gJHRoaXMtPnByZWZpeDsNCg0KICAgICAgICAgICAgJHJlc3VsdFBhZ2luYXRvciA9ICR0aGlzLT5zM0NsaWVudC0+Z2V0UGFnaW5hdG9yKCdMaXN0T2JqZWN0c1YyJywgJHFwYXJtcyk7DQogICAgICAgICAgICAkbGlzdGluZyA9ICR0aGlzLT5fZGF0YTsNCiAgICAgICAgICAgICRsaXN0aW5nWydkYXRlJ10gPSB0aW1lKCk7DQogICAgICAgICAgICAkbGlzdGluZ1snaXRlbXMnXSA9IFtdOw0KICAgICAgICAgICAgJGl0ZW1zID0gMDsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRyZXN1bHRQYWdpbmF0b3IgYXMgJHJlc3VsdCkgew0KICAgICAgICAgICAgICAgICRsaXN0aW5nWydpdGVtcyddID0gYXJyYXlfbWVyZ2UoJGxpc3RpbmdbJ2l0ZW1zJ10sICR0aGlzLT5GZXRjaEFsbCgkcmVzdWx0KSk7DQogICAgICAgICAgICAgICAgJGl0ZW1zKys7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBhd3NfczNfdXRpbHM6OnNvcnRCeVByb3BlcnR5KCRsaXN0aW5nWydpdGVtcyddLCAnbmFtZScpOw0KDQogICAgICAgICAgICAkaW5kaWNlc1RvTW92ZSA9IFtdOw0KICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGxpc3RpbmdbJ2l0ZW1zJ10pOyAkaSsrKSB7DQogICAgICAgICAgICAgICAgaWYoJGxpc3RpbmdbJ2l0ZW1zJ11bJGldLT5kaXIgPT0gdHJ1ZSkkaW5kaWNlc1RvTW92ZVtdID0gJGk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoY291bnQoJGluZGljZXNUb01vdmUpID4gMCkgew0KICAgICAgICAgICAgICAgIGF3c19zM191dGlsczo6bW92ZUl0ZW1zVG9CZWdpbm5pbmdCeUluZGV4KCRsaXN0aW5nWydpdGVtcyddLCAkaW5kaWNlc1RvTW92ZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkbGlzdGluZ1sndG90YWwnXSA9IGNvdW50KCRsaXN0aW5nWydpdGVtcyddKTsgIA0KICAgICAgICAgICAgDQogICAgICAgIH0gY2F0Y2ggKEF3c0V4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgaWYoJGUtPmdldFN0YXR1c0NvZGUoKSA9PSA0MDQpew0KICAgICAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlID0gJGJ1Y2tldF9pZC4iICIuJGUtPmdldEF3c0Vycm9yTWVzc2FnZSgpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkZXJyb3JfbWVzc2FnZSA9ICRlLT5nZXRNZXNzYWdlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICRlcnJvcl9tZXNzYWdlOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuICRsaXN0aW5nOyAgICAgICAgDQogICAgfQ0KDQogICAgLyoqDQogICAgICogRmV0Y2ggYWxsIG9mIHRoZSByZWNvcmRzIGluIHRoaXMgcmVzdWx0c2V0IGFzIGFuIGFycmF5IG9mIG9iamVjdHMuDQogICAgICoNCiAgICAgKiBAcmV0dXJuIG9iamVjdFtdDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIEZldGNoQWxsKCRycykNCiAgICB7DQoNCiAgICAgICAgJF9fbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnQVdTUzMnKTsNCiAgICAgICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOw0KICAgICAgICAkdGhlbWVPYmplY3QgPSBcY21zX3V0aWxzOjpnZXRfdGhlbWVfb2JqZWN0KCk7DQogICAgICAgICRkZXRhaWxzcGFnZSA9ICR0aGlzLT5kZXRhaWxwYWdlOw0KICAgICAgICAkZW50cnlhcnJheSA9IFtdOw0KICAgICAgICAkYnVja2V0X2lkID0gJHRoaXMtPmJ1Y2tldDsNCg0KICAgICAgICAvL0RpcmVjdG9yaWVzDQogICAgICAgIGZvcmVhY2ggKCRyc1snQ29tbW9uUHJlZml4ZXMnXSBhcyAkZGlyKSB7DQoNCiAgICAgICAgICAgICRvbmVyb3cgPSBuZXcgXHN0ZENsYXNzKCk7DQogICAgICAgICAgICAkb25lcm93LT5rZXkgPSAkZGlyWydQcmVmaXgnXTsNCiAgICAgICAgICAgICRvbmVyb3ctPm5hbWUgPSBiYXNlbmFtZSgkb25lcm93LT5rZXkpOw0KICAgICAgICAgICAgJG9uZXJvdy0+ZGlyID0gdHJ1ZTsNCiAgICAgICAgICAgICRvbmVyb3ctPm1pbWUgPSAnZGlyZWN0b3J5JzsNCiAgICAgICAgICAgICRvbmVyb3ctPnR5cGUgPSBhcnJheSgnZGlyJyk7DQogICAgICAgICAgICAkb25lcm93LT5leHQgPSAnJzsNCiAgICAgICAgICAgICRvbmVyb3ctPmljb24gPSAkX19tb2QtPkdldEZpbGVJY29uKCRvbmVyb3ctPmV4dCx0cnVlKTsNCiAgICAgICAgICAgICRlbnRyeWFycmF5W109ICRvbmVyb3c7DQoNCiAgICAgICAgfQ0KDQogICAgICAgIGZvcmVhY2goICRyc1snQ29udGVudHMnXSBhcyAkcm93ICkgew0KDQogICAgICAgICAgICAgICAgJG9uZXJvdyA9IG5ldyBcc3RkQ2xhc3MoKTsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5rZXkgPSAkcm93WydLZXknXTsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5rZXlfZW5jb2RlZCA9IHVybGVuY29kZSgkb25lcm93LT5rZXkpOzsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5uYW1lID0gYmFzZW5hbWUoJG9uZXJvdy0+a2V5KTsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5zaXplID0gJHJvd1snU2l6ZSddOw0KICAgICAgICAgICAgICAgICRvbmVyb3ctPmRhdGUgPSBzdHJ0b3RpbWUoICRyb3dbJ0xhc3RNb2RpZmllZCddICk7DQogICAgICAgIA0KICAgICAgICAgICAgICAgICRleHBsb2RlZGZpbGUgPSBleHBsb2RlKCcuJywgJG9uZXJvdy0+bmFtZSk7IA0KICAgICAgICAgICAgICAgICRvbmVyb3ctPmV4dCA9IGFycmF5X3BvcCgkZXhwbG9kZWRmaWxlKTsNCiAgICAgICAgICAgICAgICAkb25lcm93LT50eXBlID0gYXJyYXkoJ2ZpbGUnKTsNCg0KICAgICAgICAgICAgICAgICRoZWFkID0gJHRoaXMtPnMzQ2xpZW50LT5oZWFkT2JqZWN0KFsNCiAgICAgICAgICAgICAgICAgICAgJ0J1Y2tldCcgPT4gJGJ1Y2tldF9pZCwNCiAgICAgICAgICAgICAgICAgICAgJ0tleScgPT4gJG9uZXJvdy0+a2V5DQogICAgICAgICAgICAgICAgXSk7DQoNCiAgICAgICAgICAgICAgICAkb25lcm93LT5taW1lID0gJGhlYWRbJ0NvbnRlbnRUeXBlJ107DQoNCiAgICAgICAgICAgICAgICBpZiggc3RycG9zKCRvbmVyb3ctPm1pbWUsJ3RleHQnKSAhPT0gRkFMU0UgKSB7DQogICAgICAgICAgICAgICAgICAgICRvbmVyb3ctPnR5cGVbXSA9ICd0ZXh0JzsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZigkX19tb2QtPkdldE9wdGlvblZhbHVlKCJjdXN0b21fdXJsIikgIT09ICcnICYmICRfX21vZC0+R2V0T3B0aW9uVmFsdWUoInVzZV9jdXN0b21fdXJsIikgPT0gdHJ1ZSApew0KICAgICAgICAgICAgICAgICAgICAkYmFzZV91cmwgPSAkX19tb2QtPkdldE9wdGlvblZhbHVlKCJjdXN0b21fdXJsIikuJy8nOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRiYXNlX3VybCA9ICJodHRwczovLyIuJGJ1Y2tldF9pZC4iLnMzLiIuJF9fbW9kLT5HZXRQcmVmZXJlbmNlKCdhY2Nlc3NfcmVnaW9uJykuIi5hbWF6b25hd3MuY29tLyI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICRvbmVyb3ctPnVybCA9ICRiYXNlX3VybC4kb25lcm93LT5rZXk7DQogICAgICAgICAgICAgICAgJG9uZXJvdy0+dXJsX2xpbmsgPSAiPGEgaHJlZj0nIiAuICRvbmVyb3ctPnVybCAuICInIHRhcmdldD0nX2JsYW5rJyBjbGFzcz1cImNhcmQtbGlua1wiPiIgLiAkb25lcm93LT5uYW1lIC4gIjwvYT4iOw0KICAgICAgICAgICAgICAgICRvbmVyb3ctPmljb24gPSAkX19tb2QtPkdldEZpbGVJY29uKCRvbmVyb3ctPmV4dCk7DQogICAgICAgICAgICAgICAgJG9uZXJvdy0+aWNvbl9saW5rID0gIjxhIGhyZWY9JyIgLiAkb25lcm93LT51cmwgLiAiJyB0YXJnZXQ9J19ibGFuaycgY2xhc3M9XCJjYXJkLWxpbmtcIj4iLiRvbmVyb3ctPmljb24uIjwvYT4iOw0KICAgICAgICAgICAgICAgICRvbmVyb3ctPnByZXNpZ25lZF91cmwgPSAkX19tb2QtPkNyZWF0ZVNpZ25lZExpbmsoJG9uZXJvdy0+a2V5KTsNCiAgICAgICAgICAgICAgICAkb25lcm93LT5wcmVzaWduZWRfbGluayA9ICI8YSBocmVmPSciIC4gJG9uZXJvdy0+cHJlc2lnbmVkX3VybCAuICInIGNsYXNzPVwiY2FyZC1saW5rXCI+IiAuICRvbmVyb3ctPm5hbWUgLiAiPC9hPiI7DQogICAgICAgICAgICAgICAgJG9uZXJvdy0+cHJlc2lnbmVkX2ljb25fbGluayA9ICI8YSBocmVmPSciIC4gJG9uZXJvdy0+cHJlc2lnbmVkX3VybCAuICInIGNsYXNzPVwiY2FyZC1saW5rXCI+IiAuICRvbmVyb3ctPmljb24gLiAiPC9hPiI7DQogICAgICAgICAgICAgICAgJG9uZXJvdy0+ZGV0YWlsX2xpbmsgPSAkX19tb2QtPmNyZWF0ZV91cmwoJGlkLCAnZGV0YWlsJywgJGRldGFpbHNwYWdlLCBhcnJheSgncHJlZml4JyA9PiAkb25lcm93LT5rZXlfZW5jb2RlZCkpOw0KDQogICAgICAgICAgICAgICAgaWYoICRjb25maWdbJ3VybF9yZXdyaXRpbmcnXSA9PSAnbW9kX3Jld3JpdGUnKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJHN0cmluZ19hcnJheSAgID0gW107DQogICAgICAgICAgICAgICAgICAgICRzdHJpbmdfYXJyYXlbXSA9ICdTMyc7DQogICAgICAgICAgICAgICAgICAgICRzdHJpbmdfYXJyYXlbXSA9ICdmaWxlJzsNCiAgICAgICAgICAgICAgICAgICAgJHN0cmluZ19hcnJheVtdID0gJG9uZXJvdy0+a2V5X2VuY29kZWQ7DQogICAgICAgICAgICAgICAgICAgICRzdHJpbmdfYXJyYXlbXSA9ICRkZXRhaWxzcGFnZTsNCiAgICAgICAgICAgICAgICAgICAgJHByZXR0eXVybCA9IGltcGxvZGUoJy8nLCAkc3RyaW5nX2FycmF5KTsgICAgDQogICAgICAgICAgICAgICAgICAgICRpdGVtX2RldGFpbHVybCA9ICRfX21vZC0+Y3JlYXRlX3VybCgkaWQsICdkZXRhaWwnLCAkZGV0YWlsc3BhZ2UsIGFycmF5KCdwcmVmaXgnID0+ICRvbmVyb3ctPmtleV9lbmNvZGVkKSwgZmFsc2UsIGZhbHNlLCAkcHJldHR5dXJsKTsNCiAgICAgICAgICAgICAgICAgICAgLy9uZWVkcyBmaXgNCiAgICAgICAgICAgICAgICAgICAgLy8kb25lcm93LT5kZXRhaWxfbGluayA9ICRpdGVtX2RldGFpbHVybDsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgJGVudHJ5YXJyYXlbXSA9ICRvbmVyb3c7DQogICAgICAgIA0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkZW50cnlhcnJheTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gb2JqZWN0Q291bnQoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5zM0NsaWVudC0+bGlzdE9iamVjdHNWMihbDQogICAgICAgICAgICAnQnVja2V0JyA9PiAkdGhpcy0+QnVja2V0LA0KICAgICAgICAgICAgJ1ByZWZpeCcgPT4gJHRoaXMtPlByZWZpeCwNCiAgICAgICAgXSk7DQogICAgICAgIA0KICAgICAgICAkb2JqZWN0Q291bnQgPSBjb3VudCgkcmVzdWx0WydDb250ZW50cyddKTsNCiAgICAgICAgcmV0dXJuICRvYmplY3RDb3VudDsNCg0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FjaGVfcXVlcnkoJHFwYXJtcywkanNvbl9maWxlX1BhdGgpew0KDQogICAgICAgICRxdWVyeSA9IG5ldyBidWNrZXRfcXVlcnkoJHFwYXJtcyk7DQogICAgICAgICRkYXRhID0gJHF1ZXJ5LT5leGVjdXRlKCk7DQogICAgICAgICRqc29uID0ganNvbl9lbmNvZGUoJGRhdGEpOw0KICAgICAgICAkdG1wID0gZW5jcnlwdDo6ZW5jcnlwdCgkanNvbik7DQogICAgICAgIGZpbGVfcHV0X2NvbnRlbnRzKCRqc29uX2ZpbGVfUGF0aCwgJHRtcCk7DQoNCiAgICAgICAgLy8kanNvbiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRqc29uX2ZpbGVfUGF0aCk7DQogICAgICAgIC8vJHRtcCA9IGVuY3J5cHQ6OmRlY3J5cHQoJGpzb24pOw0KICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRqc29uLCBmYWxzZSk7DQoNCiAgICAgICAgLy9wcmludF9yKCRkYXRhKTsNCg0KICAgICAgICByZXR1cm4gJGRhdGE7DQoNCiAgICB9DQoNCiAgICAvKiogaW50ZXJuYWwgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlsbF9mcm9tX2FycmF5KCRyb3cpDQogICAgew0KICAgICAgICBmb3JlYWNoKCAkcm93IGFzICRrZXkgPT4gJHZhbCApIHsNCiAgICAgICAgICAgIGlmKCBhcnJheV9rZXlfZXhpc3RzKCRrZXksJHRoaXMtPl9kYXRhKSApIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQoNCg0KfSAvLyBlbmQgb2YgY2xhc3MNCg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.encrypt.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogQVdTUzMKIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLgojIENvcHlyaWdodDogKEMpIDIwMjMgTWFnYWwgSGV6aSwgaF9tYWdhbEBob3RtYWlsLmNvbQojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4gU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8gIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIE1hZGUgU2ltcGxlKFRNKSBpcyAoYykgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24gMjAwNC0yMDIwIChpbmZvQGNtc21hZGVzaW1wbGUub3JnKQojIFByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIAojIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IAojIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICAKIyBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCm5hbWVzcGFjZSBBV1NTMzsKCmZpbmFsIGNsYXNzIGVuY3J5cHQKewogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpIHt9CgogICAgLyoqCiAgICAgKiBFbmNyeXB0IHNvbWUgZGF0YQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgZW5jcnlwdGlvbiBrZXkuICBUaGUgbG9uZ2VyIGFuZCBtb3JlIHVuaXF1ZSB0aGlzIHN0cmluZyBpcyB0aGUgbW9yZSBzZWN1cmUgdGhlIGVuY3J5cHRlZCBkYXRhIGlzLiAgVGhlIGtleSBzaG91bGQgYWxzbyBiZSBrZXB0IGluIGEgc2VjdXJlIGxvY2F0aW9uLgogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YSBUaGUgZGF0YSB0byBlbmNyeXB0LgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIGVuY3J5cHRlZCBkYXRhLCBvciBGQUxTRQogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGVuY3J5cHQoc3RyaW5nICRkYXRhKQogICAgewogICAgICAgICRrZXkgPSBDTVNfVkVSU0lPTi5fX0ZJTEVfXzsKICAgICAgICByZXR1cm4gc2VsZjo6b3BlbnNzbF9lbmNyeXB0KCAka2V5LCAkZGF0YSApOwogICAgfQoKICAgIC8qKgogICAgICogRW5jcnlwdCBzb21lIGRhdGEgdXNpbmcgb3BlbnNzbCBsaWJyYXJpZXMKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHN0YXRpYyBwcm90ZWN0ZWQgZnVuY3Rpb24gb3BlbnNzbF9lbmNyeXB0KHN0cmluZyAka2V5LHN0cmluZyAkZGF0YSkKICAgIHsKICAgICAgICBpZiggIWZ1bmN0aW9uX2V4aXN0cygnb3BlbnNzbF9lbmNyeXB0JykgKSByZXR1cm4gRkFMU0U7CgogICAgICAgICRjaXBoZXIgPSAnYWVzLTI1Ni1jYmMnOwogICAgICAgICRpdiA9IG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcyhvcGVuc3NsX2NpcGhlcl9pdl9sZW5ndGgoJGNpcGhlcikpOwogICAgICAgICRlbmNyeXB0ZWQgPSBvcGVuc3NsX2VuY3J5cHQoJGRhdGEsICRjaXBoZXIsICRrZXksIDAsICRpdik7CiAgICAgICAgcmV0dXJuICRlbmNyeXB0ZWQuJzo6Jy4kaXY7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWNyeXB0IHByZXZpb3VzbHkgZW5jcnlwdGVkIGRhdGEKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB1c2VkIGZvciBlbmNyeXB0aW5nIHRoZSBkYXRhLgogICAgICogQHBhcmFtIHN0cmluZyAkZW5jZGF0YSBUaGUgZW5jcnlwdGVkIGRhdGEiCiAgICAgKiBAcmV0dXJuIHN0cmluZyB0aGUgZGVjcnlwdGVkIGRhdGEuICBvciBGQUxTRQogICAgICovCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIGRlY3J5cHQoc3RyaW5nICRlbmNkYXRhKQogICAgewogICAgICAgIC8vIHVzZSBvcGVuc3NsIGFuZCBzZWUgaWYgd2UgZ2V0IGFueSBkYXRhCiAgICAgICAgLy8gaWYgb3BlbnNzbCBmYWlscywgdHJ5IG1jcnlwdC4KICAgICAgICAka2V5ID0gQ01TX1ZFUlNJT04uX19GSUxFX187CiAgICAgICAgcmV0dXJuIHNlbGY6Om9wZW5zc2xfZGVjcnlwdCggJGtleSwgJGVuY2RhdGEgKTsKICAgIH0KCiAgICAvKioKICAgICAqIERlY3J5cHQgc29tZSBkYXRhIHVzaW5nIG9wZW5zc2wKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJGVuY2RhdGEKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHN0YXRpYyBwcm90ZWN0ZWQgZnVuY3Rpb24gb3BlbnNzbF9kZWNyeXB0KHN0cmluZyAka2V5LHN0cmluZyAkZW5jZGF0YSkKICAgIHsKICAgICAgICBsaXN0KCAkZW5jLCAkaXYgKSA9IGV4cGxvZGUoJzo6JywgJGVuY2RhdGEgKTsKICAgICAgICByZXR1cm4gb3BlbnNzbF9kZWNyeXB0KCRlbmMsICdhZXMtMjU2LWNiYycsICRrZXksIDAsICRpdik7CiAgICB9Cgp9IC8vIGVuZCBvZiBjbGFzcwo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.helpers.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFXU1MzOw0KDQpmaW5hbCBjbGFzcyBoZWxwZXJzDQp7DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7fQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbnN0YW5jZSgpDQogICAgew0KICAgICAgICBzdGF0aWMgJGluc3RhbmNlID0gbnVsbDsNCiAgICAgICAgaWYgKCEkaW5zdGFuY2UpIHsNCiAgICAgICAgICAgICRpbnN0YW5jZSA9IG5ldyBzZWxmKCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGluc3RhbmNlOw0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmluZF9sYXlvdXRfdGVtcGxhdGUoJHBhcmFtcywgJHBhcmFtbmFtZSwgJHR5cGVuYW1lKQ0KICAgIHsNCiAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoIkFXU1MzIik7DQogICAgICAgICRwYXJhbW5hbWUgPSAoc3RyaW5nKSAkcGFyYW1uYW1lOw0KICAgICAgICAkdHlwZW5hbWUgPSAoc3RyaW5nKSAkdHlwZW5hbWU7DQogICAgICAgIGlmICggIWlzX2FycmF5KCRwYXJhbXMpIHx8ICEoJHRoZXRlbXBsYXRlID0gXHh0X3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJHBhcmFtbmFtZSkpICkgew0KICAgICAgICAgICAgJHRwbCA9IFxDbXNMYXlvdXRUZW1wbGF0ZTo6bG9hZF9kZmx0X2J5X3R5cGUoJHR5cGVuYW1lKTsNCiAgICAgICAgICAgIGlmICggIWlzX29iamVjdCgkdHBsKSApIHsNCiAgICAgICAgICAgICAgICAkbW9kLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICdObyBkZWZhdWx0ICcuJHR5cGVuYW1lLicgdGVtcGxhdGUgZm91bmQnKTsNCiAgICAgICAgICAgICAgICBhdWRpdCgnJywgJ0FXU1MzJywgJ05vIGRlZmF1bHQgJy4kdHlwZW5hbWUuJyB0ZW1wbGF0ZSBmb3VuZCcpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGV0ZW1wbGF0ZSA9ICR0cGwtPmdldF9uYW1lKCk7DQogICAgICAgICAgICB1bnNldCgkdHBsKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJHRoZXRlbXBsYXRlOw0KICAgIH0NCiAgICANCiAgDQp9DQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsNCiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKEFXU1MzOjpNQU5BR0VfUEVSTSwnTWFuYWdlIEFXU1MzJyk7DQoNCiR1aWQgPSBudWxsOw0KaWYoIGNtc21zKCktPnRlc3Rfc3RhdGUoQ21zQXBwOjpTVEFURV9JTlNUQUxMKSApIHsNCiAgJHVpZCA9IDE7IC8vIGhhcmRjb2RlIHRvIGZpcnN0IHVzZXINCn0gZWxzZSB7DQogICR1aWQgPSBnZXRfdXNlcmlkKCk7DQp9DQojIFNldHVwIHN1bW1hcnkgdGVtcGxhdGUNCnRyeSB7DQogICAgJHN1bW1hcnlfdGVtcGxhdGVfdHlwZSA9IG5ldyBDbXNMYXlvdXRUZW1wbGF0ZVR5cGUoKTsNCiAgICAkc3VtbWFyeV90ZW1wbGF0ZV90eXBlLT5zZXRfb3JpZ2luYXRvcigkdGhpcy0+R2V0TmFtZSgpKTsNCiAgICAkc3VtbWFyeV90ZW1wbGF0ZV90eXBlLT5zZXRfbmFtZSgnc3VtbWFyeScpOw0KICAgICRzdW1tYXJ5X3RlbXBsYXRlX3R5cGUtPnNldF9kZmx0X2ZsYWcoVFJVRSk7DQogICAgJHN1bW1hcnlfdGVtcGxhdGVfdHlwZS0+c2V0X2xhbmdfY2FsbGJhY2soJ0FXU1MzOjpwYWdlX3R5cGVfbGFuZ19jYWxsYmFjaycpOw0KICAgICRzdW1tYXJ5X3RlbXBsYXRlX3R5cGUtPnNldF9jb250ZW50X2NhbGxiYWNrKCdBV1NTMzo6cmVzZXRfcGFnZV90eXBlX2RlZmF1bHRzJyk7DQogICAgJHN1bW1hcnlfdGVtcGxhdGVfdHlwZS0+c2V0X2hlbHBfY2FsbGJhY2soJ0FXU1MzOjp0ZW1wbGF0ZV9oZWxwX2NhbGxiYWNrJyk7DQogICAgJHN1bW1hcnlfdGVtcGxhdGVfdHlwZS0+cmVzZXRfY29udGVudF90b19mYWN0b3J5KCk7DQogICAgJHN1bW1hcnlfdGVtcGxhdGVfdHlwZS0+c2F2ZSgpOw0KICB9DQogIGNhdGNoKCBDbXNFeGNlcHRpb24gJGUgKSB7DQogICAgLy8gbG9nIGl0DQogICAgZGVidWdfdG9fbG9nKF9fRklMRV9fLic6Jy5fX0xJTkVfXy4nICcuJGUtPkdldE1lc3NhZ2UoKSk7DQogICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnSW5zdGFsbGF0aW9uIEVycm9yOiAnLiRlLT5HZXRNZXNzYWdlKCkpOw0KICB9DQoNCnRyeSB7DQogICAgJGZuID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGVtcGxhdGVzJy5ESVJFQ1RPUllfU0VQQVJBVE9SLidvcmlnX3N1bW1hcnlfdGVtcGxhdGUudHBsJzsNCiAgICBpZiggZmlsZV9leGlzdHMoICRmbiApICkgew0KICAgICAgJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7DQogICAgICAkdHBsID0gbmV3IENtc0xheW91dFRlbXBsYXRlKCk7DQogICAgICAkdHBsLT5zZXRfbmFtZSgnQVdTUzMgU3VtbWFyeSBTYW1wbGUnKTsNCiAgICAgICR0cGwtPnNldF9vd25lcigkdWlkKTsNCiAgICAgICR0cGwtPnNldF9jb250ZW50KCR0ZW1wbGF0ZSk7DQogICAgICAkdHBsLT5zZXRfdHlwZSgkc3VtbWFyeV90ZW1wbGF0ZV90eXBlKTsNCiAgICAgICR0cGwtPnNldF90eXBlX2RmbHQoVFJVRSk7DQogICAgICAkdHBsLT5zYXZlKCk7DQogICAgfQ0KICB9DQogIGNhdGNoKCBDbXNFeGNlcHRpb24gJGUgKSB7DQogICAgLy8gbG9nIGl0DQogICAgZGVidWdfdG9fbG9nKF9fRklMRV9fLic6Jy5fX0xJTkVfXy4nICcuJGUtPkdldE1lc3NhZ2UoKSk7DQogICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnSW5zdGFsbGF0aW9uIEVycm9yOiAnLiRlLT5HZXRNZXNzYWdlKCkpOw0KICB9DQoNCiAgIyBTZXR1cCBkZXRhaWwgdGVtcGxhdGUNCiAgdHJ5IHsNCiAgICAkZGV0YWlsX3RlbXBsYXRlX3R5cGUgPSBuZXcgQ21zTGF5b3V0VGVtcGxhdGVUeXBlKCk7DQogICAgJGRldGFpbF90ZW1wbGF0ZV90eXBlLT5zZXRfb3JpZ2luYXRvcigkdGhpcy0+R2V0TmFtZSgpKTsNCiAgICAkZGV0YWlsX3RlbXBsYXRlX3R5cGUtPnNldF9uYW1lKCdkZXRhaWwnKTsNCiAgICAkZGV0YWlsX3RlbXBsYXRlX3R5cGUtPnNldF9kZmx0X2ZsYWcoVFJVRSk7DQogICAgJGRldGFpbF90ZW1wbGF0ZV90eXBlLT5zZXRfbGFuZ19jYWxsYmFjaygnQVdTUzM6OnBhZ2VfdHlwZV9sYW5nX2NhbGxiYWNrJyk7DQogICAgJGRldGFpbF90ZW1wbGF0ZV90eXBlLT5zZXRfY29udGVudF9jYWxsYmFjaygnQVdTUzM6OnJlc2V0X3BhZ2VfdHlwZV9kZWZhdWx0cycpOw0KICAgICRkZXRhaWxfdGVtcGxhdGVfdHlwZS0+cmVzZXRfY29udGVudF90b19mYWN0b3J5KCk7DQogICAgJGRldGFpbF90ZW1wbGF0ZV90eXBlLT5zZXRfaGVscF9jYWxsYmFjaygnQVdTUzM6OnRlbXBsYXRlX2hlbHBfY2FsbGJhY2snKTsNCiAgICAkZGV0YWlsX3RlbXBsYXRlX3R5cGUtPnNhdmUoKTsNCiAgfQ0KICBjYXRjaCggQ21zRXhjZXB0aW9uICRlICkgew0KICAgIC8vIGxvZyBpdA0KICAgIGRlYnVnX3RvX2xvZyhfX0ZJTEVfXy4nOicuX19MSU5FX18uJyAnLiRlLT5HZXRNZXNzYWdlKCkpOw0KICAgIGF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ0luc3RhbGxhdGlvbiBFcnJvcjogJy4kZS0+R2V0TWVzc2FnZSgpKTsNCiAgfQ0KICANCiAgdHJ5IHsNCiAgICAkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS5ESVJFQ1RPUllfU0VQQVJBVE9SLid0ZW1wbGF0ZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ29yaWdfZGV0YWlsX3RlbXBsYXRlLnRwbCc7DQogICAgaWYoIGZpbGVfZXhpc3RzKCAkZm4gKSApIHsNCiAgICAgICR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOw0KICAgICAgJHRwbCA9IG5ldyBDbXNMYXlvdXRUZW1wbGF0ZSgpOw0KICAgICAgJHRwbC0+c2V0X25hbWUoJ0FXU1MzIERldGFpbCBTYW1wbGUnKTsNCiAgICAgICR0cGwtPnNldF9vd25lcigkdWlkKTsNCiAgICAgICR0cGwtPnNldF9jb250ZW50KCR0ZW1wbGF0ZSk7DQogICAgICAkdHBsLT5zZXRfdHlwZSgkZGV0YWlsX3RlbXBsYXRlX3R5cGUpOw0KICAgICAgJHRwbC0+c2V0X3R5cGVfZGZsdChUUlVFKTsNCiAgICAgICR0cGwtPnNhdmUoKTsNCiAgICB9DQogIH0NCiAgY2F0Y2goIENtc0V4Y2VwdGlvbiAkZSApIHsNCiAgICAvLyBsb2cgaXQNCiAgICBkZWJ1Z190b19sb2coX19GSUxFX18uJzonLl9fTElORV9fLicgJy4kZS0+R2V0TWVzc2FnZSgpKTsNCiAgICBhdWRpdCgnJywkdGhpcy0+R2V0TmFtZSgpLCdJbnN0YWxsYXRpb24gRXJyb3I6ICcuJGUtPkdldE1lc3NhZ2UoKSk7DQogIH0NCg0KDQogIC8vIGNyZWF0ZSBwcmVmZXJlbmNlcw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FsbG93ZWQnLCAnanBnLGpwZWcsZ2lmLHBuZycpOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2l0ZW1zZGlzcGxheWVkJywgJzI1Jyk7DQokdGhpcy0+QWRkRXZlbnRIYW5kbGVyKCdDb3JlJywgJ0NvbnRlbnRQb3N0UmVuZGVyJywgZmFsc2UpOw0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBV1NTMw0KIyBBdXRob3JzOiBNYWdhbCBIZXppLCB3aXRoIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uLg0KIyBDb3B5cmlnaHQ6IChDKSAyMDIzIE1hZ2FsIEhlemksIGhfbWFnYWxAaG90bWFpbC5jb20NCiMgTGljZW5jZTogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLiBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIENNUyBNYWRlIFNpbXBsZShUTSkgaXMgKGMpIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uIDIwMDQtMjAyMCAoaW5mb0BjbXNtYWRlc2ltcGxlLm9yZykNCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnDQojIE1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VDQojIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIA0KIyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQNCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlDQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMNCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluDQojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IA0KIyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgDQojIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYoICFkZWZpbmVkKCdDTVNfVkVSU0lPTicpICkgZXhpdDsNCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKEFXU1MzOjpNQU5BR0VfUEVSTSk7DQoNCiR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnZGlzcGxheXN1bW1hcnknKTsNCiR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnZGlzcGxheWRldGFpbCcpOw0KJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoKTsNCg0KLy8gcmVtb3ZlIHRlbXBsYXRlcw0KLy8gYW5kIHRlbXBsYXRlIHR5cGVzLg0KdHJ5IHsNCiAgICAkdHlwZXMgPSBDbXNMYXlvdXRUZW1wbGF0ZVR5cGU6OmxvYWRfYWxsX2J5X29yaWdpbmF0b3IoJHRoaXMtPkdldE5hbWUoKSk7DQogICAgaWYoIGlzX2FycmF5KCR0eXBlcykgJiYgY291bnQoJHR5cGVzKSApIHsNCiAgICAgIGZvcmVhY2goICR0eXBlcyBhcyAkdHlwZSApIHsNCiAgICAgICAgJHRlbXBsYXRlcyA9ICR0eXBlLT5nZXRfdGVtcGxhdGVfbGlzdCgpOw0KICAgICAgICBpZiggaXNfYXJyYXkoJHRlbXBsYXRlcykgJiYgY291bnQoJHRlbXBsYXRlcykgKSB7DQogICAgICBmb3JlYWNoKCAkdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSApIHsNCiAgICAgICAgJHRlbXBsYXRlLT5kZWxldGUoKTsNCiAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICAkdHlwZS0+ZGVsZXRlKCk7DQogICAgICB9DQogICAgfQ0KICB9DQogIGNhdGNoKCBFeGNlcHRpb24gJGUgKSB7DQogICAgLy8gbG9nIGl0DQogICAgYXVkaXQoJycsJHRoaXMtPkdldE5hbWUoKSwnVW5pbnN0YWxsIEVycm9yOiAnLiRlLT5HZXRNZXNzYWdlKCkpOw0KICB9DQoNCiAgJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlcignQ29yZScsICdDb250ZW50UG9zdFJlbmRlcicpOw0KICANCj8+]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJBV1NTMyIKdmVyc2lvbiA9ICIxLjAuMCIKYXV0aG9yID0gIk1hZ2FsIEhlemkiCmF1dGhvcmVtYWlsID0gImhfbWFnYWxAaG90bWFpbC5jb20iCm1pbmNtc3ZlcnNpb24gPSAiMi4yLjEiCmxhenlsb2FkYWRtaW4gPSAwCmxhenlsb2FkZnJvbnRlbmQgPSAwCltkZXBlbmRzXQpBV1NTREsgPSAiMS4wLjAiCg==]]></data>
	</file>
	<file>
	  <filename>/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgQ01TTVMgcGx1Z2luIGFsbG93cyB5b3UgdG8gdXNlIEFtYXpvbuKAmXMgU2ltcGxlIFN0b3JhZ2UgU2VydmljZSB0byBob3N0IHlvdXIgbWVkaWEgZm9yIHlvdXIgQ01TTVMgc2V0dXAuPC9wPgoKPHA+QW1hem9uIFMzIGlzIGEgY2hlYXAgYW5kIGNvc3QgZWZmZWN0aXZlIHdheSB0byBzY2FsZSB5b3VyIHNpdGUgdG8gZWFzaWx5IGhhbmRsZSBsYXJnZSBzcGlrZXMgaW4gdHJhZmZpYyB3aXRob3V0IGhhdmluZyB0byBnbyB0aHJvdWdoIHRoZSBleHBlbnNlIG9mIHNldHRpbmcgdXAgdGhlIGluZnJhc3RydWN0dXJlIGZvciBhIGNvbnRlbnQgZGVsaXZlcnkgbmV0d29yay48L3A+Cgo8cD5PbmNlIHNldHVwLCB0aGlzIHBsdWdpbiB0cmFuc3BhcmVudGx5IGludGVncmF0ZXMgd2l0aCB5b3VyIENNU01TLiBGaWxlIHVwbG9hZHMgYXJlIGF1dG9tYXRpY2FsbHkgc2F2ZWQgaW50byB5b3VyIEFtYXpvbiBTMyBidWNrZXQgd2l0aG91dCBhbnkgZXh0cmEgc3RlcHMuIE9uY2Ugc2F2ZWQsIHRoZXNlIGZpbGVzIHdpbGwgYmUgZGVsaXZlcmVkIGJ5IEFtYXpvbiBTMywgaW5zdGVhZCBvZiB5b3VyIHdlYiBob3N0LjwvcD4KCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5Db25maWd1cmUgdGhlIHBsdWdpbiBpbiB0aGUg4oCYT3B0aW9uc+KAmSAob3Ig4oCYU2V0dGluZ3PigJkpIHNjcmVlbiBieSBmb2xsb3dpbmcgdGhlIG9uc2NyZWVuIHByb21wdHMuPGJyPk9uY2Ugc2V0dXAgaXMgY29tcGxldGVkLCB5b3UgY2FuIGVtYmVkIHRoZSB7QVdTUzN9IHRhZyBpbiB5b3VyIHBhZ2VzLiBZb3UgY2FuIHVzZSB0aGUgUGFyYW1ldGVycyBiZWxvdyB0byBjdXN0b21pemUgeW91ciBleHBlcmllbmNlLjwvcD4KPGgzPkZlZWRiYWNrL1N1cHBvcnQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+Cjx1bD4KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUgb3IgdG8gZmlsZSBhIEZlYXR1cmUgUmVxdWVzdCBvciBCdWcgUmVwb3J0LCBwbGVhc2UgdmlzaXQgdGhlIE1vZHVsZSBGb3JnZQo8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL0FXU1MzIiB0YXJnZXQ9Il9ibGFuayI+QVdTUzMgUGFnZTwvYT4uPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZy92aWV3dG9waWMucGhwP2Y9NyZ0PTgzNzg4Ij5BV1NTMyBmb3J1bSB0b3BpYzwvYT4uIFlvdSBhcmUgd2FybWx5IGludml0ZWQgdG8gb3BlbiBhIG5ldyB0b3BpYyBpZiB5b3UgZGlkbid0IGZpbmQgYW4gYW5zd2VyIHRvIHlvdXIgcXVlc3Rpb24uPC9saT4KPGxpPkxhc3RseSwgaWYgeW91IGVuam95IHRoaXMgbW9kdWxlLCB1c2UgaXQgb24gYSBjb21tZXJjaWFsIHdlYnNpdGUgb3Igd291bGQgbGlrZSB0byBlbmNvdXJhZ2UgZnV0dXJlIGRldmVsb3BtZW50LCB5b3UgbWlnaHQgY29uc2lkZXIganVzdCBhIHNtYWxsIGRvbmF0aW9uLiBBbnkga2luZCBvZiBmZWVkYmFjayB3aWxsIGJlIG11Y2ggYXBwcmVjaWF0ZWQuPGJyPgo8YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29tL2RvbmF0ZS8/aG9zdGVkX2J1dHRvbl9pZD1GV0hBQlpVTjNOQzROIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9haGE5OTkvRG9uYXRlQnV0dG9ucy9tYXN0ZXIvcGF5cGFsLWRvbmF0ZS1pY29uLTcucG5nIiB3aWR0aD0iMTIwIiA+PC9hPjxicj4KCTwvbGk+CjwvdWw+CjxoMz5JbnRlcmVzdGVkIGluIGRldmVsb3BtZW50PzwvaDM+CjxwPkNoZWNrIG91dCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hZ2FsaC9BV1NTMyI+R2l0aHViIHJlcG9zaXRvcnk8L2E+LjwvcD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAyMywgTWFnYWwgSGV6aSA8YSBocmVmPSJtYWlsdG86aF9tYWdhbEBob3RtYWlsLmNvbSI+Jmx0O2hfbWFnYWxAaG90bWFpbC5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin_permissions_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBpZD0iYWJvdXRfYyI+DQogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICA8aDM+UGVybWlzc2lvbnMgb3ZlcnZpZXc8L2gzPg0KICAgIDxwPlRoZSBwbHVnaW4gd2lsbCBub3Qgd29yayB1bnRpbCBhbGwgdGhlIGNvbmZpZ3MgYXJlIGNvbXBsZXRlZDwvcD48YnI+DQogICAgDQogICAgPGgzPkNvbmZpZ3VyaW5nIGJsb2NrIHB1YmxpYyBhY2Nlc3Mgc2V0dGluZ3MgZm9yIHlvdXIgUzMgYnVja2V0czwvaDM+DQogICAgPHA+Rm9sbG93IHRoZXNlIHN0ZXBzIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgcHVibGljIGFjY2VzcyBzZXR0aW5ncyBmb3IgYSBzaW5nbGUgUzMgYnVja2V0LjwvcD4NCiAgICA8ZGl2IGNsYXNzPSJwcm9jZWR1cmUiPg0KICA8b2w+PGxpPjxwPlNpZ24gaW4gdG8gdGhlIEFXUyBNYW5hZ2VtZW50IENvbnNvbGUgYW5kIG9wZW4gdGhlIEFtYXpvbiBTMyBjb25zb2xlIGF0DQogICAgICAgICA8YSBocmVmPSJodHRwczovL2NvbnNvbGUuYXdzLmFtYXpvbi5jb20vczMvIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj48c3Bhbj5odHRwczovL2NvbnNvbGUuYXdzLmFtYXpvbi5jb20vczMvPC9zcGFuPjwvYT4uPC9wPjwvbGk+PGxpPg0KICAgICAgICA8cD5JbiB0aGUgPGI+QnVja2V0IG5hbWU8L2I+IGxpc3QsIGNob29zZSB0aGUgbmFtZSBvZiB0aGUgYnVja2V0IHRoYXQgeW91DQogICAgICAgICAgd2FudC48L3A+DQogICAgICA8L2xpPjxsaT4NCiAgICAgICAgPHA+Q2hvb3NlIDxiPlBlcm1pc3Npb25zPC9iPi48L3A+DQogICAgICA8L2xpPjxsaT4NCiAgICAgICAgPHA+Q2hvb3NlIDxiPkVkaXQ8L2I+IHRvIGNoYW5nZSB0aGUgcHVibGljIGFjY2VzcyBzZXR0aW5ncyBmb3IgdGhlIGJ1Y2tldC4NCiAgICAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm91ciBBbWF6b24gUzMgQmxvY2sgUHVibGljIEFjY2VzcyBTZXR0aW5ncywgc2VlIDxhIGhyZWY9Imh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2FjY2Vzcy1jb250cm9sLWJsb2NrLXB1YmxpYy1hY2Nlc3MuaHRtbCNhY2Nlc3MtY29udHJvbC1ibG9jay1wdWJsaWMtYWNjZXNzLW9wdGlvbnMiPkJsb2NrIHB1YmxpYyBhY2Nlc3MNCgkJCQlzZXR0aW5nczwvYT4uPC9wPg0KICAgICAgPC9saT48bGk+DQogICAgICAgIDxwPkNob29zZSB0aGUgc2V0dGluZyB0aGF0IHlvdSB3YW50IHRvIGNoYW5nZSwgYW5kIHRoZW4gY2hvb3NlDQogICAgICAgICAgPGI+U2F2ZTwvYj4uPC9wPg0KICAgICAgPC9saT48bGk+DQogICAgICAgIDxwPldoZW4geW91J3JlIGFza2VkIGZvciBjb25maXJtYXRpb24sIGVudGVyIDxjb2RlIGNsYXNzPSJ1c2VyaW5wdXQiPmNvbmZpcm08L2NvZGU+LiBUaGVuIGNob29zZQ0KICAgICAgICAgICAgPGI+Q29uZmlybTwvYj4gdG8gc2F2ZSB5b3VyIGNoYW5nZXMuPC9wPg0KICAgICAgPC9saT48L29sPjwvZGl2Pg0KICAgIDxicj4NCiAgICANCiAgICA8aDM+QnVja2V0IHBvbGljeTwvaDM+DQogICAgPHA+VGhlIGJ1Y2tldCBwb2xpY3ksIHdyaXR0ZW4gaW4gSlNPTiwgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBvYmplY3RzIHN0b3JlZCBpbiB0aGUgYnVja2V0LiBCdWNrZXQgcG9saWNpZXMgZG9uJ3QgYXBwbHkgdG8gb2JqZWN0cyBvd25lZCBieSBvdGhlciBhY2NvdW50czwvcD4NCiAgICA8cD5QbGVhc2UgYXR0YWNoIHRoZSBwcm92aWRlZCBwb2xpY3kgdG8geW91ciBCdWNrZXQgcG9saWN5IG9yIGlmIHlvdSBhbHJlYWR5IGhhdmUgYSBwb2xpY3kgZm9yIHRoaXMgYnVja2V0LCB1c2UgdGhlIHBvbGljeSBwcm92aWRlZCBhcyBhbiBleGFtcGxlIHRvIGJlIG1lcmdlZCB3aXRoIHlvdXIgZXhpc3Rpbmcgc2V0dXAuPC9wPg0KICAgIDxicj4NCiAgICANCiAgICA8cHJlPnskYnVja2V0X3BvbGljeX08L3ByZT4NCiAgICA8L2Rpdj4NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_settings_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdnZXRzdGFydGVkJyl9OjwvaDM+DQoNCntpZiBpc3NldCgkbWVzc2FnZSl9eyRtZXNzYWdlfXsvaWZ9DQoNCntmb3JtX3N0YXJ0fQ0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdidWNrZXRfbmFtZScpfTombmJzcDt7Y21zX2hlbHAga2V5Mj0naGVscF9idWNrZXRfbmFtZScgdGl0bGU9JG1vZC0+TGFuZygnYnVja2V0X25hbWUnKX08L3A+DQogPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9c2V0dGluZ3NfaW5wdXRbYnVja2V0X25hbWVdIiB2YWx1ZT0ieyRtb2QtPkdldE9wdGlvblZhbHVlKCJidWNrZXRfbmFtZSIpfSIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iNTAiLz4NCiA8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQo8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdyZWdpb24nKX06PC9wPg0KICA8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1zZXR0aW5nc19pbnB1dFthY2Nlc3NfcmVnaW9uXSI+DQogICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGFjY2Vzc19yZWdpb25fbGlzdCBzZWxlY3RlZD0kbW9kLT5HZXRPcHRpb25WYWx1ZSgiYWNjZXNzX3JlZ2lvbiIpfQ0KICAgIDwvc2VsZWN0Pg0KICA8L2Rpdj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdhbGxvd2VkJyl9OiZuYnNwO3tjbXNfaGVscCBrZXkyPSdmaWVsZGRlZl9hbGxvd19oZWxwJyB0aXRsZT0kbW9kLT5MYW5nKCdhbGxvd2VkJyl9PC9wPg0KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KCSAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9c2V0dGluZ3NfaW5wdXRbYWxsb3dlZF0iIHZhbHVlPSJ7JG1vZC0+R2V0T3B0aW9uVmFsdWUoJ2FsbG93ZWQnLCAncGRmLGRvYyxkb2N4LHhscyx4bHN4LGpwZyxwbmcsanBlZyxnaWYnKX0iIHNpemU9IjUwIiBtYXhsZW5ndGg9IjIwMCIvPg0KICA8L3A+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+PGxhYmVsIGZvcj0iZmxkNSI+eyRtb2QtPkxhbmcoJ2V4cGlyeV9pbnRlcnZhbCcpfTo8L2xhYmVsPiB7Y21zX2hlbHAga2V5PSdoZWxwX29wdF9leHBpcnlfaW50ZXJ2YWwnIHRpdGxlPSRtb2QtPkxhbmcoJ2V4cGlyeV9pbnRlcnZhbCcpfTwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXNldHRpbmdzX2lucHV0W2V4cGlyeV9pbnRlcnZhbF0iIHZhbHVlPSJ7JG1vZC0+R2V0T3B0aW9uVmFsdWUoImV4cGlyeV9pbnRlcnZhbCIpfGRlZmF1bHQ6NjB9IiBzaXplPSI0IiBtYXhsZW5ndGg9IjQiLz4NCiAgICAgIDwvcD4NCgk8L2Rpdj4NCjxmaWVsZHNldD4NCiAgPGxlZ2VuZD57JG1vZC0+TGFuZygncHJvbXB0X2N1c3RvbV91cmwnKX08L2xlZ2VuZD4NCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1zZXR0aW5nc19pbnB1dFt1c2VfY3VzdG9tX3VybF0iPg0KICAgICAgICAgICAge2Ntc195ZXNubyBzZWxlY3RlZD0kbW9kLT5HZXRPcHRpb25WYWx1ZSgidXNlX2N1c3RvbV91cmwiKX0NCiAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDxici8+DQogICAgICAgIHskbW9kLT5MYW5nKCdoZWxwX3VzZV9jdXN0b21fdXJsJyl9DQogICAgPC9wPg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2N1c3RvbV91cmwnKX06Jm5ic3A7e2Ntc19oZWxwIGtleTI9J2hlbHBfY3VzdG9tX3VybCcgdGl0bGU9JG1vZC0+TGFuZygnY3VzdG9tX3VybCcpfTwvcD4NCiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1zZXR0aW5nc19pbnB1dFtjdXN0b21fdXJsXSIgdmFsdWU9InskbW9kLT5HZXRPcHRpb25WYWx1ZSgiY3VzdG9tX3VybCIpfSIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iMjAwIi8+DQogIDwvcD4NCiAgPC9kaXY+DQo8L2ZpZWxkc2V0Pg0KDQo8ZmllbGRzZXQ+DQoJPGxlZ2VuZD57JG1vZC0+TGFuZygnZGVmYXVsdF9vcHRpb25zJyl9PC9sZWdlbmQ+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2RldGFpbHBhZ2UnKX06PC9wPg0KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2RldGFpbHBhZ2V9PC9wPg0KICAgIDwvZGl2PiANCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfc3VtbWFyeXBhZ2UnKX06PC9wPg0KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3N1bW1hcnlwYWdlfTwvcD4NCiAgICA8L2Rpdj4gCQ0KICAJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2l0ZW1zZGlzcGxheWVkJyl9OjwvcD4NCg0KICAgICAgICB7JG9wdHM9WzEwPT4xMCwyNT0+MjUsNTA9PjUwLDEwMD0+MTAwLDEwMDA9PjEwMDBdfQ0KICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfXNldHRpbmdzX2lucHV0W2l0ZW1zZGlzcGxheWVkXSI+DQogICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kb3B0cyBzZWxlY3RlZD0kbW9kLT5HZXRPcHRpb25WYWx1ZSgiaXRlbXNkaXNwbGF5ZWQiKX0NCiAgICAgIDwvc2VsZWN0Pg0KICAgIDwvZGl2PiAJDQo8L2ZpZWxkc2V0Pg0KDQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnYWRtaW5fc2F2ZScpfSIvPg0KIDwvcD4NCjwvZGl2Pg0Ke2Zvcm1fZW5kfQ0Ke2lmICRzZGtfbW9kLT5pc19kZXZlbG9wZXJfbW9kZSgpfQ0KICB7KmdldF90ZW1wbGF0ZV92YXJzKn0NCnsvaWZ9DQo=]]></data>
	</file>
	<file>
	  <filename>/templates/default.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iaG9saWRheVdyYXBwZXIiPg0KIHtmb3JlYWNoICRpdGVtcyBhcyAkaXRlbX0NCiA8ZGl2IGNsYXNzPSJob2xpZGF5Ij4NCiA8ZGl2IGNsYXNzPSJyb3ciPg0KIDxkaXYgY2xhc3M9ImNvbC1zbS02Ij4NCiA8YSBocmVmPSJ7Y21zX2FjdGlvbl91cmwgYWN0aW9uPSdkZXRhaWwnIGhpZD0kaXRlbS0+aWR9Ij57JGl0ZW0tPm5hbWV9PC9hPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJjb2wtc20tNiB0ZXh0LXJpZ2h0Ij57JGl0ZW0tPnRoZV9kYXRlfGRhdGVfZm9ybWF0OicleCd9PC9kaXY+DQogPC9kaXY+DQogPC9kaXY+DQoge2ZvcmVhY2hlbHNlfQ0KIDxkaXYgY2xhc3M94oCdYWxlcnQgYWxlcnQtZGFuZ2Vy4oCdPnskbW9kLT5MYW5nKCdzb3JyeV9ub2ZpbGVzJyl9PC9kaXY+DQogey9mb3JlYWNofQ0KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/delete.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kX2ZtLT5MYW5nKCdhY3Rpb25kZWxldGUnKX06PC9oMz4NCnthc3NpZ24gdmFyPSdjYW5jZWxsYWJlbCcgdmFsdWU9JG1vZF9mbS0+TGFuZygnY2FuY2VsJyl9DQp7aWYgaXNzZXQoJGVycm9ycyl9DQp7YXNzaWduIHZhcj0nY2FuY2VsbGFiZWwnIHZhbHVlPSRtb2RfZm0tPkxhbmcoJ3JldHVybicpfQ0Key9pZn0NCg0KDQp7KmNtc19oZWxwIGtleTI9J3NldHRpbmdzX25vc2VmdXJsJyB0aXRsZT1sYW5nKCd3YXJuX25vc2VmdXJsJykqfQ0KDQp7aWYgJGhhc2Rpcn0NCiAgPGRpdiBjbGFzcz0id2FybmluZyIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyI+eyRtb2QtPmxhbmcoJ3dhcm5fZGVsZXRlX2RpcmVjdG9yeScpfTwvZGl2Pg0Key9pZn0NCg0KeyRzdGFydGZvcm19DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kX2ZtLT5MYW5nKCdkZWxldGVzZWxlY3RlZCcpfTo8L3A+DQogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgIHsnPGJyLz4nfGltcGxvZGU6JHNlbGFsbH0NCiAgPC9wPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICA8cCBjbGFzcz0icGFnZXRleHQiPjwvcD4NCiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAge2lmICFpc3NldCgkZXJyb3JzKX0NCiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kX2ZtLT5MYW5nKCdkZWxldGUnKX0iLz4NCiAgICB7L2lmfQ0KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9Y2FuY2VsIiB2YWx1ZT0ieyRjYW5jZWxsYWJlbH0iLz4NCiAgPC9wPg0KPC9kaXY+DQp7JGVuZGZvcm19DQoNCntpZiAkbW9kLT5pc19kZXZlbG9wZXJfbW9kZSgpfQ0KICB7Z2V0X3RlbXBsYXRlX3ZhcnN9DQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/filemanager.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICFpc3NldCgkYWpheCl9DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KYS5maWxlbGluazp2aXNpdGVkIHsNCiAgIGNvbG9yOiAjMDAwOw0KfQ0KPC9zdHlsZT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCnZhciByZWZyZXNoX3VybCA9ICd7JHJlZnJlc2hfdXJsfScrJyZzaG93dGVtcGxhdGU9ZmFsc2UnOw0KcmVmcmVzaF91cmwgPSByZWZyZXNoX3VybC5yZXBsYWNlKC9hbXA7L2csJycpOw0KDQovLyA8IVtDREFUQVsNCmZ1bmN0aW9uIGVuYWJsZV9idXR0b24oaWRsaXN0KSB7DQogICQoaWRsaXN0KS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpLnJlbW92ZUNsYXNzKCd1aS1zdGF0ZS1kaXNhYmxlZCB1aS1idXR0b24tZGlzYWJsZWQnKTsNCn0NCmZ1bmN0aW9uIGRpc2FibGVfYnV0dG9uKGlkbGlzdCkgew0KICAkKGlkbGlzdCkuYXR0cignZGlzYWJsZWQnLCdkaXNhYmxlZCcpLmFkZENsYXNzKCd1aS1zdGF0ZS1kaXNhYmxlZCB1aS1idXR0b24tZGlzYWJsZWQnKTsNCn0NCg0KZnVuY3Rpb24gZW5hYmxlX2FjdGlvbl9idXR0b25zKCkgew0KDQogICAgdmFyIGZpbGVzID0gJCgiI2ZpbGVzYXJlYSBpbnB1dFt0eXBlPSdjaGVja2JveCddLmZpbGVzZWxlY3QiKS5maWx0ZXIoJzpjaGVja2VkJykubGVuZ3RoLA0KICAgICAgICBkaXJzID0gJCgiI2ZpbGVzYXJlYSBpbnB1dFt0eXBlPSdjaGVja2JveCddLmRpciIpLmZpbHRlcignOmNoZWNrZWQnKS5sZW5ndGgsDQogICAgICAgIGFyY2ggPSAkKCIjZmlsZXNhcmVhIGlucHV0W3R5cGU9J2NoZWNrYm94J10uYXJjaGl2ZSIpLmZpbHRlcignOmNoZWNrZWQnKS5sZW5ndGgsDQogICAgICAgIHRleHQgPSAkKCIjZmlsZXNhcmVhIGlucHV0W3R5cGU9J2NoZWNrYm94J10udGV4dCIpLmZpbHRlcignOmNoZWNrZWQnKS5sZW5ndGgsDQogICAgICAgIGltZ3MgPSAkKCIjZmlsZXNhcmVhIGlucHV0W3R5cGU9J2NoZWNrYm94J10uaW1hZ2UiKS5maWx0ZXIoJzpjaGVja2VkJykubGVuZ3RoOw0KDQogICAgZGlzYWJsZV9idXR0b24oJ2J1dHRvbi5maWxlYnRuJyk7DQogICAgJCgnYnV0dG9uLmZpbGVidG4nKS5hdHRyKCdkaXNhYmxlZCcsJ2Rpc2FibGVkJyk7DQogICAgaWYgKGZpbGVzID09IDAgJiYgZGlycyA9PSAwKSB7DQogICAgICAgIC8vIG5vdGhpbmcgc2VsZWN0ZWQsIGVuYWJsZSBhbnl0aGluZyB3aXRoIHNlbGVjdF9ub25lDQogICAgICAgIGVuYWJsZV9idXR0b24oJyNidG5fcmVmcmVzaCcpOw0KICAgIH0gZWxzZSBpZiAoZmlsZXMgPT0gMSkgew0KICAgICAgICAvLyAxIHNlbGVjdGVkLCBlbmFibGUgYW55dGhpbmcgd2l0aCBzZWxlY3Rfb25lDQogICAgICAgIGVuYWJsZV9idXR0b24oJyNidG5fZGVsZXRlJyk7DQoNCiAgICAgICAgaWYgKGRpcnMgPT0gMCkgZW5hYmxlX2J1dHRvbignI2J0bl9jb3B5Jyk7DQogICAgICAgIGlmIChhcmNoID09IDEpIGVuYWJsZV9idXR0b24oJyNidG5fdW5wYWNrJyk7DQogICAgICAgIGlmIChpbWdzID09IDEpIGVuYWJsZV9idXR0b24oJyNidG5fdmlldywjYnRuX3RodW1iLCNidG5fcmVzaXplY3JvcCwjYnRuX3JvdGF0ZScpOw0KICAgICAgICBpZiAodGV4dCA9PSAxKSBlbmFibGVfYnV0dG9uKCcjYnRuX3ZpZXcnKTsNCiAgICB9IGVsc2UgaWYgKGZpbGVzID4gMSAmJiBkaXJzID09IDApIHsNCiAgICAgICAgLy8gbXVsdGlwbGUgZmlsZXMgc2VsZWN0ZWQNCiAgICAgICAgZW5hYmxlX2J1dHRvbignI2J0bl9kZWxldGUsI2J0bl9jb3B5LCNidG5fbW92ZScpOw0KICAgIH0gZWxzZSBpZiAoZmlsZXMgPiAxICYmIGRpcnMgPiAwKSB7DQogICAgICAgIC8vIG11bHRpcGxlIHNlbGVjdGVkLCBhdCBsZWFzdCBvbmUgZGlyLg0KICAgICAgICBlbmFibGVfYnV0dG9uKCcjYnRuX2RlbGV0ZSwjYnRuX21vdmUnKTsNCiAgICB9DQp9DQoNCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICBlbmFibGVfYWN0aW9uX2J1dHRvbnMoKTsNCg0KICAgICQoJyNyZWZyZXNoJykudW5iaW5kKCdjbGljaycpOw0KICAgICQoJyNyZWZyZXNoJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7DQogICAgICAgIC8vIGFqYXh5IHJlbG9hZCBmb3IgdGhlIGZpbGVzIGFyZWEuDQogICAgICAgICQoJyNmaWxlc2FyZWEnKS5sb2FkKHJlZnJlc2hfdXJsKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0pOw0KDQogICAgJChkb2N1bWVudCkub24oJ2Ryb3B6b25lX2NoZGlyJywgJCh0aGlzKSwgZnVuY3Rpb24gKGUsIGRhdGEpIHsNCiAgICAgICAgLy8gaWYgY2hhbmdlIGRpciB2aWEgdGhlIGRyb3B6b25lLCBtYWtlIHN1cmUgZmlsZW1hbmFnZXIgcmVmcmVzaGVzLg0KICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsNCiAgICB9KTsNCiAgICAkKGRvY3VtZW50KS5vbignZHJvcHpvbmVfc3RvcCcsICQodGhpcyksIGZ1bmN0aW9uIChlLCBkYXRhKSB7DQogICAgICAgIC8vIGlmIGNoYW5nZSBkaXIgdmlhIHRoZSBkcm9wem9uZSwgbWFrZSBzdXJlIGZpbGVtYW5hZ2VyIHJlZnJlc2hlcy4NCiAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7DQogICAgfSk7DQoNCiAgICAkKGRvY3VtZW50KS5vbignY2hhbmdlJywgJyNmaWxlc2FyZWEgaW5wdXRbdHlwZT0iY2hlY2tib3giXS5maWxlc2VsZWN0JywgZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgLy8gZmluZCB0aGUgcGFyZW50IHJvdw0KICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KICAgICAgICB2YXIgdCA9ICQodGhpcykuYXR0cignY2hlY2tlZCcpOw0KICAgICAgICBpZiAodCkgew0KICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLmFkZENsYXNzKCdzZWxlY3RlZCcpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCd0cicpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOw0KICAgICAgICB9DQogICAgICAgIGVuYWJsZV9hY3Rpb25fYnV0dG9ucygpOw0KICAgIH0pOw0KDQogICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcjdGFnYWxsJywgZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgICAgIGlmICgkKHRoaXMpLmlzKCc6Y2hlY2tlZCcpKSB7DQogICAgICAgICAgICAkKCcjZmlsZXNhcmVhIGlucHV0OmNoZWNrYm94LmZpbGVzZWxlY3QnKS5hdHRyKCdjaGVja2VkJywgdHJ1ZSkudHJpZ2dlcignY2hhbmdlJyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkKCcjZmlsZXNhcmVhIGlucHV0OmNoZWNrYm94LmZpbGVzZWxlY3QnKS5hdHRyKCdjaGVja2VkJywgZmFsc2UpLnRyaWdnZXIoJ2NoYW5nZScpOw0KICAgICAgICB9DQogICAgfSk7DQoNCiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnI2J0bl92aWV3JywgZnVuY3Rpb24gKCkgew0KICAgICAgICAvLyBmaW5kIHRoZSBzZWxlY3RlZCBpdGVtLg0KICAgICAgICB2YXIgdG1wID0gJCgiI2ZpbGVzYXJlYSBpbnB1dFt0eXBlPSdjaGVja2JveCddIikuZmlsdGVyKCc6Y2hlY2tlZCcpLnZhbCgpOw0KICAgICAgICB2YXIgdXJsID0gJ3skdmlld2ZpbGVfdXJsfSZzaG93dGVtcGxhdGU9ZmFsc2UmeyRhY3Rpb25pZH12aWV3ZmlsZT0nICsgdG1wOw0KICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgvYW1wOy9nLCAnJyk7DQogICAgICAgICQoJyNwb3B1cF9jb250ZW50cycpLmxvYWQodXJsKTsNCiAgICAgICAgJCgnI3BvcHVwJykuZGlhbG9nKHsNCiAgICAgICAJICBtaW5XaWR0aDogMzgwLA0KICAgICAgICAgIG1heEhlaWdodDogNjAwDQogICAgICAgIH0pOw0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfSk7DQoNCiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAndGQuY2xpY2thYmxlJywgZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgdCA9ICQodGhpcykucGFyZW50KCkuZmluZCgnOmNoZWNrYm94JykuYXR0cignY2hlY2tlZCcpOw0KICAgICAgICBpZiAodCAhPSAnY2hlY2tlZCcpIHsNCiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkuZmluZCgnOmNoZWNrYm94JykuYXR0cignY2hlY2tlZCcsIHRydWUpLnRyaWdnZXIoJ2NoYW5nZScpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5maW5kKCc6Y2hlY2tib3gnKS5hdHRyKCdjaGVja2VkJywgZmFsc2UpLnRyaWdnZXIoJ2NoYW5nZScpOw0KICAgICAgICB9DQogICAgfSk7DQp9KTsNCi8vIF1dPg0KPC9zY3JpcHQ+DQoNCjxoMz57JEZpbGVNYW5hZ2VyLT5MYW5nKCdjdXJyZW50cGF0aCcpfQ0KICAgPHNwYW4gY2xhc3M9InBhdGhzZWxlY3RvciI+eyR1cF9ob21lfSAvIA0KICAge2ZvcmVhY2ggJHBhdGhfcGFydHMgYXMgJHBhcnR9DQogICAgIHtpZiAhZW1wdHkoJHBhcnQtPnVybCl9DQogICAgICAgPGEgaHJlZj0ieyRwYXJ0LT51cmx9Ij57JHBhcnQtPm5hbWV9PC9hPg0KICAgICB7ZWxzZX0NCiAgICAgICB7JHBhcnQtPm5hbWV9DQogICAgIHsvaWZ9DQogICAgIHtpZiAhJHBhcnRAbGFzdH08c3BhbiBjbGFzcz0iZHMiPi88L3NwYW4+ey9pZn0NCiAgIHsvZm9yZWFjaH0NCiAgIDwvc3Bhbj4NCjwvaDM+DQoNCntmdW5jdGlvbiBmaWxlYnRuIGljb249J3VpLWljb24tY2lyY2xlLWNoZWNrJ30NCnskYWRkY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnknfQ0Ke2lmIGlzc2V0KCR0ZXh0KSAmJiAkdGV4dCAhPSAnJ30NCiAgeyRhZGRjbGFzcz0ndWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5J30NCiAge2lmICFpc3NldCgkdGl0bGUpIHx8ICR0aXRsZSA9PSAnJ317JHRpdGxlPSR0ZXh0fXsvaWZ9DQp7L2lmfQ0KPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InskaW5hbWV9IiBpZD0ieyRpZH0iIHRpdGxlPSJ7JHRpdGxlfGRlZmF1bHQ6Jyd9IiBjbGFzcz0iZmlsZWJ0biB1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCB7JGFkZGNsYXNzfSI+DQogIDxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWJ1dHRvbi1pY29uLXByaW1hcnkgeyRpY29ufSI+PC9zcGFuPg0KICB7aWYgaXNzZXQoJHRleHQpICYmICR0ZXh0ICE9ICcnfTxzcGFuIGNsYXNzPSJ1aS1idXR0b24tdGV4dCI+eyR0ZXh0fTwvc3Bhbj57L2lmfQ0KPC9idXR0b24+DQp7L2Z1bmN0aW9ufQ0KDQo8ZGl2Pg0KICB7JGZvcm1zdGFydH0NCjxkaXY+DQoJPGZpZWxkc2V0IGlkPSJuYXZCdXR0b25zIj4NCiAgICAgICAgeypmaWxlYnRuIGlkPSdidG5fbmV3ZGlyJyBpbmFtZT0ieyRhY3Rpb25pZH1maWxlYWN0aW9ubmV3ZGlyIiBpY29uPSd1aS1pY29uLWNpcmNsZS1wbHVzJyB0ZXh0PSRGaWxlTWFuYWdlci0+TGFuZygnbmV3ZGlyJykgdGl0bGU9JEZpbGVNYW5hZ2VyLT5MYW5nKCd0aXRsZV9uZXdkaXInKSp9DQogICAge2ZpbGVidG4gaWQ9J2J0bl92aWV3JyBpbmFtZT0ieyRhY3Rpb25pZH1maWxlYWN0aW9udmlldyIgaWNvbj0ndWktaWNvbi1jaXJjbGUtem9vbWluJyB0ZXh0PSRGaWxlTWFuYWdlci0+TGFuZygndmlldycpIHRpdGxlPSRGaWxlTWFuYWdlci0+TGFuZygndGl0bGVfdmlldycpfQ0KCQl7ZmlsZWJ0biBpZD0nYnRuX2RlbGV0ZScgaW5hbWU9InskYWN0aW9uaWR9ZmlsZWFjdGlvbmRlbGV0ZSIgaWNvbj0ndWktaWNvbi10cmFzaCcgdGV4dD0kRmlsZU1hbmFnZXItPkxhbmcoJ2RlbGV0ZScpIHRpdGxlPSRGaWxlTWFuYWdlci0+TGFuZygndGl0bGVfZGVsZXRlJyl9DQogICAge2ZpbGVidG4gaWQ9J2J0bl9yZWZyZXNoJyBpbmFtZT0ieyRhY3Rpb25pZH1maWxlYWN0aW9ucmVmcmVzaCIgaWNvbj0ndWktaWNvbi1yZWZyZXNoJyB0ZXh0PSRGaWxlTWFuYWdlci0+TGFuZygncmVmcmVzaCcpIHRpdGxlPSRGaWxlTWFuYWdlci0+TGFuZygndGl0bGVfcmVmcmVzaCcpfQ0KICAgICZuYnNwO3skbW9kLT5MYW5nKCdsYXN0X3JlZnJlc2hlZCcpfSZuYnNwO3skbGFzdHVwZGF0ZXxsb2NhbGVkYXRlX2Zvcm1hdDonaiAlaCBZIEg6aTpzJ30NCgk8L2ZpZWxkc2V0Pg0KPC9kaXY+DQp7JGhpZGRlbnBhdGh9DQp7L2lmfQ0KDQo8ZGl2IGlkPSJmaWxlc2FyZWEiPg0KCTx0YWJsZSB3aWR0aD0iMTAwJSIgY2xhc3M9InBhZ2V0YWJsZSBzY3JvbGxhYmxlIj4NCgkJPHRoZWFkPg0KCQkJPHRyPg0KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQoJCQkJPHRoPnskRmlsZU1hbmFnZXItPkxhbmcoImZpbGVuYW1lIil9PC90aD4NCgkJCQk8dGg+eyRGaWxlTWFuYWdlci0+TGFuZygnbWltZXR5cGUnKX08L3RoPg0KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iIHRpdGxlPSJ7JEZpbGVNYW5hZ2VyLT5MYW5nKCd0aXRsZV9jb2xfZmlsZXNpemUnKX0iIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+eyRGaWxlTWFuYWdlci0+TGFuZygiZmlsZXNpemUiKX08L3RoPg0KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iIHRpdGxlPSJ7JEZpbGVNYW5hZ2VyLT5MYW5nKCd0aXRsZV9jb2xfZmlsZWRhdGUnKX0iPnskRmlsZU1hbmFnZXItPkxhbmcoImZpbGVkYXRlIil9PC90aD4NCiAgICAgICAgICAgICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj48L3RoPg0KCQkJCTx0aCBjbGFzcz0icGFnZWljb24iPg0KCQkJCQk8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InRhZ2FsbCIgdmFsdWU9InRhZ2FsbCIgaWQ9InRhZ2FsbCIgdGl0bGU9InskRmlsZU1hbmFnZXItPkxhbmcoJ3RpdGxlX3RhZ2FsbCcpfSIvPg0KCQkJCTwvdGg+DQoJCQk8L3RyPg0KCQk8L3RoZWFkPg0KCQk8dGJvZHk+DQoJCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZmlsZX0NCgkJCXtjeWNsZSB2YWx1ZXM9InJvdzEscm93MiIgYXNzaWduPXJvd2NsYXNzfQ0KCQkJPHRyIGNsYXNzPSJ7JHJvd2NsYXNzfSI+DQoJCQkJPHRkIHZhbGlnbj0ibWlkZGxlIj57JGZpbGUtPmljb25fbGlua308L3RkPg0KCQkJCTx0ZCBjbGFzcz0iY2xpY2thYmxlIiB2YWxpZ249Im1pZGRsZSI+eyRmaWxlLT51cmxfbGlua308L3RkPg0KCQkJCTx0ZCBjbGFzcz0iY2xpY2thYmxlIiB2YWxpZ249Im1pZGRsZSI+eyRmaWxlLT5taW1lfTwvdGQ+DQoJCQkJPHRkIGNsYXNzPSJjbGlja2FibGUiIHN0eWxlPSJwYWRkaW5nLXJpZ2h0OjhweDt3aGl0ZS1zcGFjZTpwcmU7dGV4dC1hbGlnbjpyaWdodDsiIHZhbGlnbj0ibWlkZGxlIj57czNfdXRpbHM6OmZvcm1hdEJ5dGVzKCRmaWxlLT5zaXplKX08L3RkPg0KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2xpY2thYmxlIiBzdHlsZT0icGFkZGluZy1yaWdodDo4cHg7d2hpdGUtc3BhY2U6cHJlOyIgdmFsaWduPSJtaWRkbGUiPnskZmlsZS0+ZGF0ZXxjbXNfZGF0ZV9mb3JtYXR9PC90ZD4NCgkJCQk8dGQ+eyRmaWxlLT5vcGVubGlua30geyphZG1pbl9pY29uIGljb249J3ZpZXcuZ2lmJyBhbHQ9Ik9wZW4iKn08L3RkPg0KCQkJCTx0ZD4NCgkJCQl7aWYgIWlzc2V0KCRmaWxlLT5ub0NoZWNrYm94KX0NCgkJCQkJPGxhYmVsIGZvcj0ieF97JGZpbGUtPnVybG5hbWV9IiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPnskRmlsZU1hbmFnZXItPkxhbmcoJ3RvZ2dsZScpfTwvbGFiZWw+DQoJCQkJCTxpbnB1dCB0eXBlPSJjaGVja2JveCIgdGl0bGU9InskRmlsZU1hbmFnZXItPkxhbmcoJ3RvZ2dsZScpfSIgaWQ9InhfeyRmaWxlLT5uYW1lfSIgbmFtZT0ieyRhY3Rpb25pZH1zZWxhbGxbXSIgdmFsdWU9InskZmlsZS0+a2V5fSIgY2xhc3M9ImZpbGVzZWxlY3Qge2ltcGxvZGUoJyAnLCRmaWxlLT50eXBlKX0iIHtpZiBpc3NldCgkZmlsZS0+Y2hlY2tlZCl9Y2hlY2tlZD0iY2hlY2tlZCJ7L2lmfS8+DQoJCQkJey9pZn0NCgkJCQk8L3RkPg0KCQkJPC90cj4NCgkJey9mb3JlYWNofQ0KCQk8L3Rib2R5Pg0KCQk8dGZvb3Q+DQoJCQk8dHI+DQoJCQkJPHRkIGNvbHNwYW49IjYiPiZuYnNwO3skY291bnRzdGV4dH08L3RkPg0KCQkJPC90cj4NCgkJPC90Zm9vdD4NCgk8L3RhYmxlPg0KPC9kaXY+DQp7aWYgIWlzc2V0KCRhamF4KX0NCgl7KnskYWN0aW9uZHJvcGRvd259eyR0YXJnZXRkaXJ9eyRva2lucHV0fSp9DQoJeyRmb3JtZW5kfQ0KPC9kaXY+DQp7L2lmfQ0KDQo8ZGl2IGNsYXNzPSJyb3cgY19mdWxsIj4NCiAge2lmICRpdGVtY291bnQgPiAwICYmICRwYWdlY291bnQgPiAxfQ0KICAgIDxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIGdyaWRfMTIiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPg0KICAgICAge2Zvcm1fc3RhcnR9DQogICAgICB7JG1vZC0+TGFuZygncHJvbXB0X3BhZ2UnKX0mbmJzcDsNCiAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1wYWdlbnVtYmVyIj4NCiAgICAgICAge2Ntc19wYWdlb3B0aW9ucyBudW1wYWdlcz0kcGFnZWNvdW50IGN1cnBhZ2U9JHBhZ2VudW1iZXJ9DQogICAgICA8L3NlbGVjdD4mbmJzcDsNCiAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9cGFnaW5hdGUiIHZhbHVlPSJ7JG1vZC0+TGFuZygncHJvbXB0X2dvJyl9Ii8+DQogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ7JGFjdGlvbmlkfXByZWZpeCIgdmFsdWU9InskcGF0aH0iLz4NCiAgICAgIHtmb3JtX2VuZH0NCiAgICA8L2Rpdj4NCiAgey9pZn0NCjwvZGl2PnsqIC5yb3cgKn0NCg0KeypnZXRfdGVtcGxhdGVfdmFycyp9]]></data>
	</file>
	<file>
	  <filename>/templates/orig_detail_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icm93IG1iLTIiPgo8ZGl2IGNsYXNzPSJjb2wtbWQtNiI+CiAgPGRpdiBjbGFzcz0icm93IGctMCBib3JkZXIgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW4gZmxleC1tZC1yb3cgbWItNCBzaGFkb3ctc20gaC1tZC0yNTAgcG9zaXRpb24tcmVsYXRpdmUiPgogICAgPGRpdiBjbGFzcz0iY29sIHAtNCBkLWZsZXggZmxleC1jb2x1bW4gcG9zaXRpb24tc3RhdGljIj4KICAgIHtpZiBpc3NldCgkZW50cnktPmJ1Y2tldCl9CiAgICAgIDxzdHJvbmcgY2xhc3M9ImQtaW5saW5lLWJsb2NrIG1iLTIgdGV4dC1wcmltYXJ5Ij57JGVudHJ5LT5idWNrZXR9PC9zdHJvbmc+CiAgICB7L2lmfQogICAgICA8aDMgY2xhc3M9Im1iLTAiPnskZW50cnktPm5hbWV8Y21zX2VzY2FwZTpodG1sYWxsfTwvaDM+CiAgICAgIHtpZiAkZW50cnktPnBvc3RkYXRlfTxkaXYgY2xhc3M9Im1iLTEgdGV4dC1tdXRlZCI+eyRlbnRyeS0+cG9zdGRhdGV8Y21zX2RhdGVfZm9ybWF0fTwvZGl2PnsvaWZ9CiAgICAgIDxwIGNsYXNzPSJjYXJkLXRleHQgbWItYXV0byI+eyRtb2QtPkxhbmcoJ2xhYmVsX21pbWUnKX0geyRlbnRyeS0+bWltZX0sIHskbW9kLT5MYW5nKCdsYWJlbF9zaXplJyl9IHskZW50cnktPnNpemV9PC9wPgogICAgICA8b2wgY2xhc3M9Imxpc3QtdW5zdHlsZWQgbWItMCI+CiAgICAgICAge2lmICRlbnRyeS0+dXJsX29yaWdpbmFsfTxsaT48YSBocmVmPSJ7JGVudHJ5LT51cmxfb3JpZ2luYWx9Ij57JG1vZC0+TGFuZygnbGFiZWxfdXJsX29yaWdpbmFsJyl9PC9hPjwvbGk+ey9pZn0KICAgICAgICB7aWYgJGVudHJ5LT51cmx9PGxpPjxhIGhyZWY9InskZW50cnktPnVybH0iPnskbW9kLT5MYW5nKCdsYWJlbF91cmwnKX08L2E+PC9saT57L2lmfQogICAgICAgIHtpZiAkZW50cnktPnVybF9wcmVzaWduZWR9PGxpPjxhIGhyZWY9InskZW50cnktPnVybF9wcmVzaWduZWR9Ij57JG1vZC0+TGFuZygnbGFiZWxfdXJsX3ByZXNpZ25lZCcpfTwvYT48L2xpPnsvaWZ9CiAgICAgICAgPC9vbD4KICAgIDwvZGl2PgogICAge2lmICRlbnRyeS0+aXNpbWFnZX0KICAgIDxkaXYgY2xhc3M9ImNvbC1hdXRvIGQtbm9uZSBkLWxnLWJsb2NrIHAtMCI+CiAgICAgICAgPGRpdiBjbGFzcz0iYmQtcGxhY2Vob2xkZXItaW1nIiB3aWR0aD0iMjAwIj4KICAgICAgICAgIDxpbWcgc3JjPSJ7JGVudHJ5LT51cmxfcHJlc2lnbmVkfSIgd2lkdGg9IjIwMCIvPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICB7L2lmfQogIDwvZGl2Pgo8L2Rpdj4KPC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/orig_summary_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iZC1tZC1mbGV4IGZsZXgtbWQtcm93LXJldmVyc2UgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIj4KICA8ZGl2IGNsYXNzPSJtYi0zIG1iLW1kLTAgZC1mbGV4IHRleHQtbm93cmFwIj4KICA8c21hbGwgY2xhc3M9ImQtaW5saW5lLWZsZXggcHgtMiBweS0xIGZ3LXNlbWlib2xkIHRleHQtc3VjY2Vzcy1lbXBoYXNpcyBiZy1zdWNjZXNzLXN1YnRsZSBib3JkZXIgYm9yZGVyLXN1Y2Nlc3Mtc3VidGxlIHJvdW5kZWQtMiBtZS0yIj5MYXN0IFJlZnJlc2hlZCB7JHN0YXJ0ZGF0ZXxsb2NhbGVkYXRlX2Zvcm1hdDonaiAlaCBZIEg6aTpzJ308L3NtYWxsPgogIDwvZGl2PgogIDxoMSBjbGFzcz0iYmQtdGl0bGUgbWItMCIgaWQ9ImNvbnRlbnQiPnskYnVja2V0fTwvaDE+CjwvZGl2PgogICAgICAgICAKICA8bmF2IGFyaWEtbGFiZWw9ImJyZWFkY3J1bWIiPgogIDxvbCBjbGFzcz0iYnJlYWRjcnVtYiI+CiAgPGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0gYWN0aXZlIiBhcmlhLWN1cnJlbnQ9InBhZ2UiPkhvbWU8L2xpPgogIHtmb3JlYWNoICRwYXRoX3BhcnRzIGFzICRwYXJ0fQogICAgPGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iPgogICAge2lmICFlbXB0eSgkcGFydC0+dXJsKX0KICAgICAgPGEgaHJlZj0ieyRwYXJ0LT51cmx9Ij57JHBhcnQtPm5hbWV9PC9hPgogICAge2Vsc2V9CiAgICAgIHskcGFydC0+bmFtZX0KICAgIHsvaWZ9CiAgICA8L2xpPgogIHsvZm9yZWFjaH0KICA8L29sPgo8L25hdj4KCjxkaXYgY2xhc3M9ImNhcmQiPgo8dWwgY2xhc3M9Imxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaCI+CntpZiAkdXBfZGlydXJsfQogIDxsaSBjbGFzcz0ibGlzdC1ncm91cC1pdGVtIGJhY2t1cCI+eyR1cF9kaXJpY29ubGlua30geyR1cF9kaXJsaW5rfTwvbGk+CnsvaWZ9Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAge2lmICRlbnRyeS0+ZGlyfQogICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPjxhIGhyZWY9InskZW50cnktPmxpbmt9IiBjbGFzcz0iY2FyZC1saW5rIj57JGVudHJ5LT5pY29ufSB7JGVudHJ5LT5uYW1lfTwvYT48L2xpPgogIHtlbHNlfQogICAgPGxpIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iPgogICAgPGEgaHJlZj0ieyRlbnRyeS0+ZGV0YWlsX2xpbmt9IiBjbGFzcz0iY2FyZC1saW5rIj57JGVudHJ5LT5pY29ufTwvYT4gCiAgICB7JGVudHJ5LT5wcmVzaWduZWRfbGlua30KICAgIDwvbGk+CiAgey9pZn0Key9mb3JlYWNofQo8L3VsPgo8L2Rpdj4KCntpZiAkcGFnZWNvdW50ID4gMX0KICA8cD4Ke2lmICRwYWdlbnVtYmVyID4gMX0KeyRmaXJzdHBhZ2V9Jm5ic3A7eyRwcmV2cGFnZX0mbmJzcDsKey9pZn0KeyRwYWdldGV4dH0mbmJzcDt7JHBhZ2VudW1iZXJ9Jm5ic3A7eyRvZnRleHR9Jm5ic3A7eyRwYWdlY291bnR9CntpZiAkcGFnZW51bWJlciA8ICRwYWdlY291bnR9CiZuYnNwO3skbmV4dHBhZ2V9Jm5ic3A7eyRsYXN0cGFnZX0Key9pZn0KPC9wPgp7L2lmfQo8IS0tIEVuZCBBV1NTMyBEaXNwbGF5IFRlbXBsYXRlIC0tPg==]]></data>
	</file>
	<file>
	  <filename>/templates/orig_uploadform_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iYmQtZXhhbXBsZSI+DQp7JHN0YXJ0Zm9ybX0NCntpZiAkbWVzc2FnZX17JG1lc3NhZ2V9ey9pZn0NCg0KPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogIDxkaXYgY2xhc3M9ImN1c3RvbS1maWxlIj4NCiAgICA8aW5wdXQgdHlwZT0iZmlsZSIgY2xhc3M9ImN1c3RvbS1maWxlLWlucHV0IiBpZD0ieyRhY3Rpb25pZH1jdXN0b21GaWxlIiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2Jyb3dzZSI+DQogICAgPGxhYmVsIGNsYXNzPSJjdXN0b20tZmlsZS1sYWJlbCIgZm9yPSJ7JGFjdGlvbmlkfWN1c3RvbUZpbGUiPnskbW9kLT5MYW5nKCdjaG9vc2VfZmlsZScpfTwvbGFiZWw+DQogIDwvZGl2Pg0KPC9kaXY+DQp7KiBjYXB0Y2hhID8/ICp9DQp7aWYgaXNzZXQoJGNhcHRjaGEpfQ0KICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICB7JGNhcHRjaGF9PGJyLz4NCiAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCBtdC0zIiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2NhcHRjaGEiIHNpemU9IjEwIiBtYXhsZW5ndGg9IjEwIi8+DQogICAgPHNtYWxsIGlkPSJjYXB0Y2hhSGVscCIgY2xhc3M9ImZvcm0tdGV4dCB0ZXh0LW11dGVkIj57JG1vZC0+TGFuZygnY2FwdGNoYV90aXRsZScpfTwvc21hbGw+DQogIDwvZGl2Pg0Key9pZn0NCjxidXR0b24gdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X3N1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+eyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfTwvYnV0dG9uPg0KeyRlbmRmb3JtfQ0KPC9kaXY+DQoNCjwhLS0gcmVtb3ZlIHRoaXMgaWYgbm90IHVzaW5nIGJvb3RzdHJhcCAtLT4NCjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2JzLWN1c3RvbS1maWxlLWlucHV0L2Rpc3QvYnMtY3VzdG9tLWZpbGUtaW5wdXQuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdD4NCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgYnNDdXN0b21GaWxlSW5wdXQuaW5pdCgpDQp9KQ0KPC9zY3JpcHQ+IA0KPCEtLSBlbmQgcmVtb3ZlIC0tPg0Ke2dldF90ZW1wbGF0ZV92YXJzfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/uploadview.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdD57bGl0ZXJhbH0NCiQoZnVuY3Rpb24gKCkgew0KICAgICQoJyNmaWxldXBsb2FkJykuZmlsZXVwbG9hZCh7DQogICAgICAgIGRhdGFUeXBlOiAnanNvbicsDQogICAgICAgIHN0YXJ0OiBmdW5jdGlvbihlLGRhdGEpIHsNCiAgICAgICAgICAkKCcjcHJvZ3Jlc3NhcmVhJykuc2hvdygpOw0KICAgICAgICB9LA0KICAgICAgICBwcm9ncmVzc2FsbDogZnVuY3Rpb24oZSwgZGF0YSkgew0KICAgICAgICAgIC8vIG92ZXJhbGwgcHJvZ3Jlc3MgY2FsbGJhY2sNCiAgICAgICAgICB2YXIgcGVyYyA9IChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwgKiAxMDApLnRvRml4ZWQoMik7DQogICAgICAgICAgdmFyIHRvdGFsID0gbnVsbDsNCiAgICAgICAgICB0b3RhbCA9IChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwgKiAxMDApLnRvRml4ZWQoMCk7DQogICAgICAgICAgdmFyIHN0ciA9IHBlcmMgKyAnICUnOw0KICAgICAgICAgIC8vY29uc29sZS5sb2codG90YWwpOw0KICAgICAgICAgIGJhclZhbHVlKHRvdGFsKTsNCiAgICAgICAgICANCiAgICAgICAgICBmdW5jdGlvbiBiYXJWYWx1ZSh0b3RhbCkgew0KICAgICAgICAgICAgJCgiI3Byb2dyZXNzYXJlYSIpLnByb2dyZXNzYmFyKCB7DQogICAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludCh0b3RhbCkNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgJCgiLnVpLXByb2dyZXNzYmFyLXZhbHVlIikuaHRtbChzdHIpOw0KICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHsNCiAgICAgICAgICAgIHZhciBmaWxlc2xvb3A9W107DQogICAgICAgICAgICBpZihkYXRhLnJlc3VsdC5maWxlcyAhPSB1bmRlZmluZWQpew0KICAgICAgICAgICAgICAkLmVhY2goZGF0YS5yZXN1bHQuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkgew0KICAgICAgICAgICAgICAgIGlmKGZpbGUuZXJyb3Ipew0KICAgICAgICAgICAgICAgICAgZmlsZXNsb29wLnB1c2goJzxwPicrZmlsZS5uYW1lICsgIiAtICIgKyBmaWxlLmVycm9yKyc8L3A+Jyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYgKGZpbGVzbG9vcC5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgdmFyICRyZXNwb25zZSA9ICQoJzxhc2lkZS8+JykuYWRkQ2xhc3MoJ21lc3NhZ2UnKTsNCg0KICAgICAgICAgICAgICAgICRyZXNwb25zZS5hZGRDbGFzcygncGFnZWVycm9yY29udGFpbmVyJykNCiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgkKCc8c3Bhbj4nKS50ZXh0KCdDbG9zZScpLmFkZENsYXNzKCdjbG9zZS13YXJuaW5nJykpDQogICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoZmlsZXNsb29wLmpvaW4oJycpKTsNCiAgICAgICAgICAgDQogICAgICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQoJHJlc3BvbnNlKS5zbGlkZURvd24oMTAwMCwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2Uuc2xpZGVVcCgpOw0KICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgIH0sIDEwMDAwKTsNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfSwNCiAgICAgICAgc3RvcDogZnVuY3Rpb24oZSwgZGF0YSkgew0KICAgICAgICAgICQoJyNmaWxlc2FyZWEnKS5sb2FkKHJlZnJlc2hfdXJsKTsNCiAgICAgICAgICAkKCcjcHJvZ3Jlc3NhcmVhJykuZmFkZU91dCgpOw0KICAgICAgICB9DQogICAgfSk7DQp9KTsNCnsvbGl0ZXJhbH08L3NjcmlwdD4NCnskZm9ybXN0YXJ0fQ0KICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkaXNhYmxlX2J1ZmZlciIgdmFsdWU9IjEiIC8+DQogIHskaGlkZGVucGF0aH0NCiAgPGZpZWxkc2V0Pg0KICAgIDxkaXYgY2xhc3M9InVwbG9hZC13cmFwcGVyIj4NCiAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA2MCU7IGZsb2F0OiBsZWZ0OyI+DQogICAgICAgIHsqPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTUFYX0ZJTEVfU0laRSIgdmFsdWU9InskbWF4ZmlsZXNpemV9IiAvPip9eyogcmVjb21tZW5kYXRpb24gZm9yIGJyb3dzZXIgKn0NCiAgICAgICAgPGlucHV0IGlkPSJmaWxldXBsb2FkIiB0eXBlPSJmaWxlIiBuYW1lPSJ7JGFjdGlvbmlkfWZpbGVzW10iIHNpemU9IjUwIiB0aXRsZT0ieyRGaWxlTWFuYWdlci0+TGFuZygndGl0bGVfZmlsZWZpZWxkJyl9IiBtdWx0aXBsZS8+DQogICAgICAgIDxkaXYgaWQ9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+DQogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICA8aW5wdXQgaWQ9ImNhbmNlbCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ2NhbmNlbCcpfSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ii8+DQogICAgICAgICAgICB7KjxpbnB1dCBuYW1lPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4qfQ0KICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgaWQ9ImxlZnRjb2wiIHN0eWxlPSJoZWlnaHQ6IDRlbTsgd2lkdGg6IDQwJTsgZmxvYXQ6IGxlZnQ7IGRpc3BsYXk6IHRhYmxlOyI+DQogICAgICAgIHtpZiAhaXNzZXQoJGlzX2llKX0NCiAgICAgICAgICA8ZGl2IGlkPSJkcm9wem9uZSIgY2xhc3M9InZjZW50ZXJlZCBoY2VudGVyZWQgZmFkZSIgdGl0bGU9InskbW9kLT5MYW5nKCd0aXRsZV9kcm9wem9uZScpfSI+PHAgaWQ9ImRyb3B6b25ldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9kcm9wZmlsZXMnKX08L3A+PC9kaXY+DQogICAgICAgIHsvaWZ9DQogICAgICA8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9ImNsZWFyYiI+PC9kaXY+DQogICAgICA8ZGl2IGlkPSJwcm9ncmVzc2FyZWEiPjwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2ZpZWxkc2V0Pg0KeyRmb3JtZW5kfQ0KDQo=]]></data>
	</file>
</module>
