<?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>Planyo</name>
	<version>1.0</version>
  <mincmsversion>1.9.4.1</mincmsversion>
	<help><![CDATA[ClBsYW55byBpcyBhIGNvbW1pc3Npb24tZnJlZSBmbGV4aWJsZSBvbmxpbmUgcmVzZXJ2YXRpb24gc3lzdGVtIGZvciBhbnkga2luZCBvZiByZXNvdXJjZXMgc3VjaCBhcyBob3RlbHMsIGhvbGlkYXkgYXBhcnRtZW50cywgeWFjaHQgcmVudGFscywgZHJpdmluZyBzY2hvb2xzLCB0ZW5uaXMgY291cnRzLCBkb2N0b3IgYXBwb2ludG1lbnRzLCBldmVudHMgZXRjLg0KPGJyIC8+PGJyIC8+DQpQbGFueW8gaXMgYXZhaWxhYmxlIGluIDEwIGxhbmd1YWdlcyBhbmQgaGVscHMgeW91IG1hbmFnZSB5b3VyIGNsaWVudHMnIGJvb2tpbmdzIGJ5IGhhbmRsaW5nIGFsbCBlbWFpbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGNsaWVudHMsIGFsbG93aW5nIHZhcmlvdXMgYm9va2luZyBjb25maXJtYXRpb24gbWVjaGFuaXNtcywgaGFuZGxpbmcgcGF5bWVudHMgKGFsc28gb25saW5lIGNyZWRpdCBjYXJkIHBheW1lbnRzKSwgcHJpbnRpbmcgaW52b2ljZXMgZXRjLg0KPGJyIC8+PGJyIC8+DQpUaGlzIG1vZHVsZSBlbWJlZHMgdGhlIHJlc2VydmF0aW9uIHN5c3RlbSAoYXZhaWxhYmlsaXR5IHNlYXJjaCBib3ggYW5kIHRoZSByZXNlcnZhdGlvbiBmb3JtKSBpbnRvIHlvdXIgc2l0ZSBzbyB0aGUgdmlzaXRvcnMgY2FuIGdvIHRocm91Z2ggdGhlIHdob2xlIHByb2Nlc3MgKHNlYXJjaCBhbmQgcmVzZXJ2YXRpb24pIHdpdGhvdXQgZXZlciBsZWF2aW5nIHlvdXIgd2Vic2l0ZS4gQmVmb3JlIHVzaW5nIHRoaXMgbW9kdWxlIHlvdSBzaG91bGQgY3JlYXRlIGFuIGFjY291bnQgYXQgcGxhbnlvLmNvbS4gCjxiciAvPgpQbGVhc2Ugc2VlIGh0dHA6Ly93d3cucGxhbnlvLmNvbS9jbXNtcy1yZXNlcnZhdGlvbi1zeXN0ZW0gZm9yIG1vcmUgaW5mby4gWW91IGNhbiBhbHNvIHNlZSBvdXIgaG9tZSBwYWdlIGF0IGh0dHA6Ly93d3cucGxhbnlvLmNvbSBmb3IgYWRtaW4gYmFja29mZmljZSBvciB2aXNpdG9yIGRlbW9uc3RyYXRpb24sIG9yIGZvciB0dXRvcmlhbCBtb3ZpZXMsIHByaWNpbmcgYW5kIG1vcmUgaW5mby4gCjxiciAvPgo8aDM+VXNhZ2U8L2gzPgpPbmNlIHlvdSBoYXZlIHRoZSBQbGFueW8gbW9kdWxlIGluc3RhbGxlZCwgZ28gdG8gdGhlIHBhZ2Ugd2hlcmUgeW91IHdhbnQgdG8gc2hvdyB0aGUgc2VhcmNoIGZvcm0gYW5kIGFkZCB0aGUgUGxhbnlvIG1vZHVsZSB0YWcuIApGb3IgZGVtbyBwdXJwb3NlcyB5b3UgbWF5IGFkZCB0aGUgdGFnIHdpdGhvdXQgYW55IHBhcmFtZXRlcnM6PGJyIC8+PGJyIC8+CntjbXNfbW9kdWxlIG1vZHVsZT0nUGxhbnlvJ308YnIgLz48YnIgLz4KT3RoZXJ3aXNlLCBhcyBhIG1pbmltdW0sIHRoZSB0YWcgcmVxdWlyZXMgeW91ciBzaXRlIElEIChpZiB5b3UgZG9uJ3QgaGF2ZSBvbmUsIGNyZWF0ZSBhIG5ldyBzaXRlIGF0IHd3dy5wbGFueW8uY29tKTxiciAvPjxiciAvPgp7Y21zX21vZHVsZSBtb2R1bGU9J1BsYW55bycgc2l0ZT0nMTEnfTxiciAvPjxiciAvPgpTZWUgdGhlIHRhYmxlIGJlbG93IGZvciB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcGFyYW1ldGVycyB0aGF0IHlvdSBjYW4gYWRkaXRpb25hbGx5IHVzZSBpbiB0aGUgdGFnLjxiciAvPgoKPGgzPk9wdGlvbmFsIFBhcmFtZXRlcnM8L2gzPgo8dGFibGUgd2lkdGg9JzEwMCUnIGJvcmRlcj0nMScgY2VsbHBhZGRpbmc9JzMnPgo8dGJvZHk+Cjx0cj48dGg+UGFyYW1ldGVyPC90aD48dGg+RGVzY3JpcHRpb248L3RoPjx0aD5EZWZhdWx0PC90aD48L3RyPgo8dHI+PHRkPnNpdGU8L3RkPjx0ZD5wbGFueW8gc2l0ZSBJRDwvdGQ+PHRkPjxiPmRlbW88L2I+ICg9IGRlbW8gc2l0ZSk8L3RkPjwvdHI+Cjx0cj48dGQ+bGFuZ3VhZ2U8L3RkPjx0ZD5sYW5ndWFnZSBvZiB0aGUgdXNlciBpbnRlcmZhY2U7IGN1cnJlbnRseSBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOiBFTiwgRlIsIERFLCBJVCwgRVMsIFBMLCBESywgRkksIFNFLCBJUywgUk88L3RkPjx0ZD48Yj5FTjwvYj4gKD0gRW5nbGlzaCk8L3RkPjwvdHI+Cjx0cj48dGQ+ZXh0cmFfc2VhcmNoX2ZpZWxkczwvdGQ+PHRkPmNvbW1hLXNlcGFyYXRlZCBleHRyYSBmaWVsZHMgaW4gdGhlIHNlYXJjaCBib3g8L3RkPjx0ZD5ub25lPC90ZD48L3RyPgo8dHI+PHRkPnNvcnRfZmllbGRzPC90ZD48dGQ+Y29tbWEtc2VwYXJhdGVkIHNvcnQgZmllbGRzOyBhIHNpbmdsZSBmaWVsZCB3aWxsIGhpZGUgdGhlIHNvcnQgZHJvcGRvd24gYm94PC90ZD48dGQ+bm9uZTwvdGQ+PC90cj4KPHRyPjx0ZD5kZWZhdWx0X21vZGU8L3RkPjx0ZD5DaG9vc2UgdGhlIGluaXRpYWwgbW9kZTogJ3NlYXJjaCcgdG8gYWxsb3cgY2xpZW50cyB0byBzZWFyY2ggZm9yIGF2YWlsYWJsZSBkYXRlcyBvciAncmVzb3VyY2VzJyB0byBkaXNwbGF5IGEgbGlzdCBvZiBhbGwgcmVzb3VyY2VzIChpbiBzdWNoIGNhc2Ugc2VhcmNoIG11c3QgYmUgaW5pdGlhdGVkIGJ5IGVtYmVkZGluZyBhbiBleHRyYSBzZWFyY2ggYm94IC0tIHNlZSBsYXN0IHN0ZXAgb2YgaW50ZWdyYXRpb24gaW4gUGxhbnlvJ3MgYWRtaW4gcGFuZWwpLiBDaG9vc2luZyAnZW1wdHknIHdpbGwgbm90IGRpc3BsYXkgYW55dGhpbmcgYnkgZGVmYXVsdCBidXQgd2lsbCByZXF1aXJlIHlvdSB0byBlaXRoZXIgcGFzcyB0aGUgcmVzb3VyY2UgSUQgdG8gdGhlIG1vZHVsZSBhcyBwYXJhbWV0ZXIgaW4gdGhlIFVSTCAocmVzb3VyY2VfaWQpIG9yIGFkZCBhbiBleHRlcm5hbCBzZWFyY2ggYm94IG9yIGNhbGVuZGFyIHByZXZpZXc8L3RkPjx0ZD48Yj5yZXNvdXJjZXM8L2I+PC90ZD48L3RyPgo8dHI+PHRkPmpzX2ZyYW1ld29yazwvdGQ+PHRkPk9uZSBvZjogJ2pxdWVyeScsICdqcXVlcnktbm9pbmNsdWRlJywgJ21vb3Rvb2xzJywgJ21vb3Rvb2xzLW5vaW5jbHVkZSc7IENob29zZSB0aGUgSmF2YXNjcmlwdCBmcmFtZXdvcmsgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IFBsYW55by4gUGxhbnlvIHdvcmtzIHdpdGggYm90aCBtb290b29scyBhbmQgalF1ZXJ5LiBMZWF2ZSB0aGUgZGVmYXVsdCBpZiB5b3UncmUgbm90IHN1cmUgd2hpY2ggb25lIHRvIGNob29zZS4gQ2hhbmdlIHRvICdtb290b29scycgaWYgeW91IGFscmVhZHkgdXNlIG1vb3Rvb2xzIG9uIHlvdXIgd2Vic2l0ZSBhbmQgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIG11bHRpcGxlIEpTIGZyYW1ld29ya3MuIElmIG90aGVyIHBhcnRzIG9mIHlvdXIgd2Vic2l0ZSBhbHJlYWR5IHVzZSB0aGUgbGlicmFyeSBjaG9zZW4sIGNob29zZSB0aGUgJ3h4eC1ub2luY2x1ZGUnIHZlcnNpb24gdG8gYXZvaWQgaW5jbHVkaW5nIHRoZSBsaWJyYXJ5IHR3aWNlPC90ZD48dGQ+PGI+anF1ZXJ5PC9iPjwvdGQ+PC90cj4KPC90Ym9keT48L3RhYmxlPgo8YnIgLz48YnIgLz4KPGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBYdHJlZW1lIEdtYkggJmx0O3d3dy5wbGFueW8uY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMDxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPgo8dWw+CjxsaT4xLjAgLSBNYXksIDIwMTEKPHA+VGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZSBvZiB0aGUgbW9kdWxlLjwvcD4KPC9saT4KPC91bD4KPGJyIC8+]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/button-bg.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAMAAADEfo0+AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAwUExUReZ2F70FAcIUBNE8C80xCcknCMYdBtVHDb8MAuNsFdxbErsAAOBkE8ALA9lRENlRD8WzhMEAAABNSURBVHjalNA5DoBADATB5l7O/f9vYYVE0BNRgeXAkj2G/1bhEDah1uvxltazCIMwCpMwC71QmrN86IRdcqJIbok74tLIEmn9j1uAAQB/lggMJUI3HgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/embed-code-preview.htm</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSAKdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGNhbiBiZSBtb2RpZmllZCBpbiB0aGUgaWZyYW1lIHRhZwotIGhlaWdodCBhbmQgd2lkdGgKCmFuZCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgaW4gdGhlIFVSTCAoc3JjIHByb3BlcnR5KSBjYW4gYmUgYWRkZWQgb3IgbW9kaWZpZWQ6Ci0gY2FsZW5kYXIKLSBmZWVkYmFja191cmwKLSByZXNvdXJjZV9pZCAob3B0aW9uYWwpIC0tIGxpbWl0cyB0aGUgcHJldmlldyB0byBhIHNpbmdsZSByZXNvdXJjZQotLT4KCjxpZnJhbWUgd2lkdGg9Jzk0MCcgaGVpZ2h0PScyNDUnIHNjcm9sbGluZz0nbm8nIGZyYW1lYm9yZGVyPScwJyBzcmM9J2h0dHA6Ly93d3cucGxhbnlvLmNvbS9lbWJlZC1jYWxlbmRhci5waHA/Y2FsZW5kYXI9W0lEIG9mIHlvdXIgcGxhbnlvIHNpdGVdJmZlZWRiYWNrX3VybD1bdXJsIG9mIHRoZSByZXNlcnZhdGlvbiBmb3JtIG9uIHlvdXIgc2VydmVyXSc+PC9pZnJhbWU+Cg==]]></data>
	</file>
	<file>
	  <filename>/embed-code-reserve.htm</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLyBjaGFuZ2UgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBzZXR0aW5ncwp2YXIgdWxhcF9zY3JpcHQ9InVsYXAucGhwIjsgLy8gZmlsZSBuYW1lIHRvIG9uZSBvZiB0aGUgVUxBUCBzY3JpcHRzLCBlLmcuIHVsYXAucGhwCnZhciBwbGFueW9fc2l0ZV9pZD0nW3NpdGUgSURdJzsgLy8gSUQgb2YgeW91ciBwbGFueW8gc2l0ZQp2YXIgcGxhbnlvX2ZpbGVzX2xvY2F0aW9uPScnOyAvLyByZWxhdGl2ZSBvciBhYnNvbHV0ZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBsYW55byBmaWxlcyBhcmUga2VwdCAodXN1YWxseSAnL3BsYW55by1maWxlcycpCnZhciBleHRyYV9zZWFyY2hfZmllbGRzPScnOyAvLyBjb21tYS1zZXBhcmF0ZWQgZXh0cmEgZmllbGRzIGluIHRoZSBzZWFyY2ggYm94CnZhciBwbGFueW9fbGFuZ3VhZ2U9J0VOJzsgLy8geW91IGNhbiBvcHRpb25hbGx5IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaGVyZSwgZS5nLiAnRlInIG9yICdFUycgb3IgcGFzcyB0aGUgbGFuZ3VnZSBpbiB0aGUgJ2xhbmcnIHBhcmFtZXRlcgp2YXIgc29ydF9maWVsZHM9J25hbWUscHJpY2UnOyAvLyBjb21tYS1zZXBhcmF0ZWQgc29ydCBmaWVsZHMgLS0gYSBzaW5nbGUgZmllbGQgd2lsbCBoaWRlIHRoZSBzb3J0IGRyb3Bkb3duIGJveAp2YXIgcHJlc2VudGF0aW9uX21vZGU9ZmFsc2U7IC8vIGZhbHNlOiBzaG93IHRoZSBzZWFyY2ggYm94IGJ5IGRlZmF1bHQsIHRydWU6IHNob3cgcmVzb3VyY2UgbGlzdCBieSBkZWZhdWx0CnZhciBwbGFueW9fcmVzb3VyY2VfaWQ9Jyc7IC8vIG9wdGlvbmFsOiBJRCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVzZXJ2ZWQKdmFyIGVtcHR5X21vZGU9ZmFsc2U7IC8vIHNob3VsZCBiZSBhbHdheXMgc2V0IHRvIGZhbHNlCjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBnZXRfcGFyYW0gKG5hbWUpIHtuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFtdLywiXFxcWyIpLnJlcGxhY2UoL1tcXV0vLCJcXFxdIik7dmFyIHJlZ2V4UyA9ICJbXFw/Jl0iK25hbWUrIj0oW14mI10qKSI7dmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCAocmVnZXhTKTt2YXIgcmVzdWx0cyA9IHJlZ2V4LmV4ZWMgKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtpZiAocmVzdWx0cyA9PSBudWxsKSByZXR1cm4gbnVsbDtlbHNlICByZXR1cm4gcmVzdWx0c1sxXTt9CmlmIChnZXRfcGFyYW0oJ21vZGUnKSlwbGFueW9fZW1iZWRfbW9kZSA9IGdldF9wYXJhbSgnbW9kZScpOwpmdW5jdGlvbiBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKG5hbWUpIHtpZihwbGFueW9fZmlsZXNfbG9jYXRpb24ubGVuZ3RoPT0wfHxwbGFueW9fZmlsZXNfbG9jYXRpb24ubGFzdEluZGV4T2YoJy8nKT09cGxhbnlvX2ZpbGVzX2xvY2F0aW9uLmxlbmd0aC0xKXJldHVybiBwbGFueW9fZmlsZXNfbG9jYXRpb24rbmFtZTsgZWxzZSByZXR1cm4gcGxhbnlvX2ZpbGVzX2xvY2F0aW9uKycvJytuYW1lO30KZG9jdW1lbnQud3JpdGUoIjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJwbGFueW8tc3R5bGVzLmNzcyIpKyInIHR5cGU9J3RleHQvY3NzJyAvPiIpOwpkb2N1bWVudC53cml0ZSgiPGRpdiBpZD0ncGxhbnlvX2NvbnRlbnQnPjxpbWcgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoImhvdXJnbGFzcy5naWYiKSsiJyBhbGlnbj0nbWlkZGxlJyAvPjwvZGl2PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJtb290b29scy0xLjItY29yZS5qcyIpKyInPjwvc2MiKyJyaXB0PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJtb290b29scy0xLjItbW9yZS5qcyIpKyInPjwvc2MiKyJyaXB0PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgidXRpbHMuanMiKSsiJyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwvc2MiKyJyaXB0PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgicGxhbnlvLXJlc2VydmF0aW9ucy5qcyIpKyInIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zYyIrInJpcHQ+Iik7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+CjxhIGhyZWY9J2h0dHA6Ly93d3cucGxhbnlvLmNvbS9hYm91dC1jYWxlbmRhci5waHA/Y2FsZW5kYXI9W3NpdGUgSURdJz5NYWtlIGEgcmVzZXJ2YXRpb248L2E+PGJyLz48YnIvPjxhIGhyZWY9J2h0dHA6Ly93d3cucGxhbnlvLmNvbS8nPlJlc2VydmF0aW9uCiAgc3lzdGVtIHBvd2VyZWQgYnkgUGxhbnlvPC9hPgo8L25vc2NyaXB0Pgo=]]></data>
	</file>
	<file>
	  <filename>/embed-code-reserve.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGNoYW5nZSB0aGUgZm9sbG93aW5nIHZhbHVlcyB0byBtYXRjaCB5b3VyIHNldHRpbmdzCiRzaXRlX2lkID0gJ2RlbW8nOyAgLy8gSUQgb2YgeW91ciBwbGFueW8gc2l0ZS4gSXQgY2FuIGJlIGEgbnVtYmVyIG9yIHRoZSBkZWZhdWx0IHZhbHVlICgnZGVtbycpIHRvIHNlZSBkZW1vbnN0cmF0aW9uIG9mIHRoZSBwbHVnaW4KJHBsYW55b19maWxlc19sb2NhdGlvbiA9ICcvcGxhbnlvLWZpbGVzJzsgIC8vIHJlbGF0aXZlIG9yIGFic29sdXRlIGRpcmVjdG9yeSB3aGVyZSB0aGUgcGxhbnlvIGZpbGVzIGFyZSBrZXB0ICh1c3VhbGx5ICcvcGxhbnlvLWZpbGVzJykKJHBsYW55b19sYW5ndWFnZSA9ICdFTic7ICAvLyB5b3UgY2FuIG9wdGlvbmFsbHkgY2hhbmdlIHRoZSBsYW5ndWFnZSBoZXJlLCBlLmcuICdGUicgb3IgJ0VTJyBvciBwYXNzIHRoZSBsYW5ndWdlIGluIHRoZSAnbGFuZycgcGFyYW1ldGVyCiRhbHdheXNfdXNlX2FqYXggPSBmYWxzZTsgIC8vIHNldCB0byB0cnVlIHRvIHVzZSBBSkFYIHRvIGRpc3BsYXkgcmVzb3VyY2UgbGlzdCBhbmQgcmVzb3VyY2UgZGV0YWlscyB2aWV3cwokc29ydF9maWVsZHMgPSAnbmFtZSxwcmljZSc7ICAvLyBjb21tYS1zZXBhcmF0ZWQgc29ydCBmaWVsZHMgLS0gYSBzaW5nbGUgZmllbGQgd2lsbCBoaWRlIHRoZSBzb3J0IGRyb3Bkb3duIGJveAokZXh0cmFfc2VhcmNoX2ZpZWxkcyA9ICcnOyAgLy8gY29tbWEtc2VwYXJhdGVkIGV4dHJhIGZpZWxkcyBpbiB0aGUgc2VhcmNoIGJveAokZGVmYXVsdF9tb2RlID0gJ3Jlc291cmNlcyc7ICAvLyBpbml0aWFsIChkZWZ1YWx0KSBwbHVnaW4gbW9kZTsgb25lIG9mOiAncmVzb3VyY2VzJywgJ3NlYXJjaCcsICdlbXB0eScKJGRvbnRfaW5jbHVkZV9tb290b29scyA9IGZhbHNlOyAgLy8gc2V0IHRvIHRydWUgb25seSBpZiBtb290b29scyBpcyBhbHJlYWR5IGluY2x1ZGVkCgppbmNsdWRlX29uY2UoJ3BsYW55by1wbHVnaW4taW1wbC5waHAnKTsKCnBsYW55b19zZXR1cCgpOwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/embed-code-search-php.htm</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKZ2xvYmFsICRwbGFueW9fc2l0ZV9pZCwgJHBsYW55b19maWxlc19sb2NhdGlvbiwgJHBsYW55b19sYW5ndWFnZSwKICAgJHBsYW55b19hbHdheXNfdXNlX2FqYXgsICRwbGFueW9fc29ydF9maWVsZHMsICRwbGFueW9fcmVzb3VyY2VfaWQsCiAgICRwbGFueW9fanNfbGlicmFyeV91c2VkLCAkcGxhbnlvX2luY2x1ZGVfanNfbGlicmFyeSwgJHBsYW55b19kZWZhdWx0X21vZGUsICRwbGFueW9fZXh0cmFfc2VhcmNoX2ZpZWxkczsKCiRwbGFueW9fc2l0ZV9pZCA9ICdbc2l0ZSBJRF0nOyAgLy8gSUQgb2YgeW91ciBwbGFueW8gc2l0ZS4gSXQgY2FuIGJlIGEgbnVtYmVyIG9yICdkZW1vJyB0byBzZWUgZGVtb25zdHJhdGlvbiBvZiB0aGUgcGx1Z2luCiRwbGFueW9fZmlsZXNfbG9jYXRpb25fcmVhbCA9ICdwbGFueW8tZmlsZXMnOyAvLyByZWxhdGl2ZSBvciBhYnNvbHV0ZSBkaXJlY3RvcnkgKHRoaXMgaXMgcmVhbCBwYXRoLCBub3QgSFRUUCBwYXRoKSB3aGVyZSB0aGUgcGxhbnlvIGZpbGVzIGFyZSBrZXB0CiRwbGFueW9fZmlsZXNfbG9jYXRpb24gPSAnL3BsYW55by1maWxlcyc7ICAvLyByZWxhdGl2ZSBvciBhYnNvbHV0ZSBkaXJlY3RvcnkgKEhUVFAgcGF0aCkgd2hlcmUgdGhlIHBsYW55byBmaWxlcyBhcmUga2VwdCAodXN1YWxseSAnL3BsYW55by1maWxlcycpCiRwbGFueW9fbGFuZ3VhZ2UgPSAnRU4nOyAgLy8geW91IGNhbiBvcHRpb25hbGx5IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaGVyZSwgZS5nLiAnRlInIG9yICdFUycgb3IgcGFzcyB0aGUgbGFuZ3VnZSBpbiB0aGUgJ2xhbmcnIHBhcmFtZXRlcgokcGxhbnlvX2Fsd2F5c191c2VfYWpheCA9IGZhbHNlOyAgLy8gc2V0IHRvIHRydWUgdG8gdXNlIEFKQVggdG8gZGlzcGxheSByZXNvdXJjZSBsaXN0IGFuZCByZXNvdXJjZSBkZXRhaWxzIHZpZXdzOyBkZWZhdWx0IHZhbHVlIChmYWxzZSkgbWFrZXMgdGhlIG91dHB1dCBjb250ZW50IFNFTy1mcmllbmRseQokcGxhbnlvX3NvcnRfZmllbGRzID0gJ25hbWUscHJpY2UnOyAgLy8gY29tbWEtc2VwYXJhdGVkIHNvcnQgZmllbGRzIC0tIGEgc2luZ2xlIGZpZWxkIHdpbGwgaGlkZSB0aGUgc29ydCBkcm9wZG93biBib3gKJHBsYW55b19leHRyYV9zZWFyY2hfZmllbGRzID0gJyc7ICAvLyBjb21tYS1zZXBhcmF0ZWQgZXh0cmEgZmllbGRzIGluIHRoZSBzZWFyY2ggYm94CiRwbGFueW9fZGVmYXVsdF9tb2RlID0gJ3Jlc291cmNlcyc7IC8vIG9uZSBvZjogJ3Jlc291cmNlcycgKGRpc3BsYXlzIGxpc3Qgb2YgcmVzb3VyY2VzIHdpdGggcGhvdG9zLCBkZXNjcmlwdGlvbnMgZXRjLiksICdzZWFyY2gnIChkaXNwbGF5cyB0aGUgc2VhcmNoIGJveCksICdlbXB0eScgKHdpbGwgbm90IGRpc3BsYXkgYW55dGhpbmcgYnkgZGVmYXVsdCBidXQgd2lsbCByZXF1aXJlIHlvdSB0byBlaXRoZXIgcGFzcyB0aGUgcmVzb3VyY2UgSUQgYXMgcGFyYW1ldGVyIGluIHRoZSBVUkwgKHJlc291cmNlX2lkKSBvciBhZGQgYW4gZXh0ZXJuYWwgc2VhcmNoIGJveCBvciBjYWxlbmRhciBwcmV2aWV3KQokcGxhbnlvX3Jlc291cmNlX2lkID0gbnVsbDsgIC8vIG9wdGlvbmFsOiBJRCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgcmVzZXJ2ZWQgKHNldCBvbmx5IGlmIGFsd2F5cyB0aGUgc2FtZSkKJHBsYW55b19qc19saWJyYXJ5X3VzZWQ9J2pxdWVyeSc7IC8vIHNldCB0aGlzIHRvICdtb290b29scycgaWYgeW91IHdhbnQgdG8gdXNlIG1vb3Rvb2xzIGluc3RlYWQgb2YgalF1ZXJ5CiRwbGFueW9faW5jbHVkZV9qc19saWJyYXJ5PXRydWU7IC8vIHNldCB0aGlzIHRvIGZhbHNlIGlmIHlvdXIgd2Vic2l0ZSBhbHJlYWR5IGluY2x1ZGVzIHRoZSBKYXZhc2NyaXB0IGxpYnJhcnkgY2hvc2VuIGluIHRoZSBsaXZlIGFib3ZlIChqUXVlcnkgb3IgbW9vdG9vbHMpCgpyZXF1aXJlX29uY2UoJHBsYW55b19maWxlc19sb2NhdGlvbl9yZWFsLicvcGxhbnlvLXBsdWdpbi1pbXBsLnBocCcpOwplY2hvICI8ZGl2IGlkPSdwbGFueW9fcGx1Z2luX2NvZGUnPiI7CnBsYW55b19zZXR1cCgpOwplY2hvICI8L2Rpdj4iOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/embed-code-search.htm</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLyBjaGFuZ2UgdGhlIGZvbGxvd2luZyB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBzZXR0aW5ncwp2YXIgdWxhcF9zY3JpcHQ9InVsYXAucGhwIjsgLy8gZmlsZSBuYW1lIHRvIG9uZSBvZiB0aGUgVUxBUCBzY3JpcHRzLCBlLmcuIHVsYXAucGhwCnZhciBwbGFueW9fc2l0ZV9pZD0nW3NpdGUgSURdJzsgLy8gSUQgb2YgeW91ciBwbGFueW8gc2l0ZQp2YXIgcGxhbnlvX2ZpbGVzX2xvY2F0aW9uPScvcGxhbnlvLWZpbGVzJzsgLy8gcmVsYXRpdmUgb3IgYWJzb2x1dGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBwbGFueW8gZmlsZXMgYXJlIGtlcHQgKHVzdWFsbHkgJy9wbGFueW8tZmlsZXMnKQp2YXIgZXh0cmFfc2VhcmNoX2ZpZWxkcz0nJzsgLy8gY29tbWEtc2VwYXJhdGVkIGV4dHJhIGZpZWxkcyBpbiB0aGUgc2VhcmNoIGJveAp2YXIgcGxhbnlvX2xhbmd1YWdlPSdFTic7IC8vIHlvdSBjYW4gb3B0aW9uYWxseSBjaGFuZ2UgdGhlIGxhbmd1YWdlIGhlcmUsIGUuZy4gJ0ZSJyBvciAnRVMnIG9yIHBhc3MgdGhlIGxhbmd1Z2UgaW4gdGhlICdsYW5nJyBwYXJhbWV0ZXIKdmFyIHNvcnRfZmllbGRzPSduYW1lLHByaWNlJzsgLy8gY29tbWEtc2VwYXJhdGVkIHNvcnQgZmllbGRzIC0tIGEgc2luZ2xlIGZpZWxkIHdpbGwgaGlkZSB0aGUgc29ydCBkcm9wZG93biBib3gKdmFyIHByZXNlbnRhdGlvbl9tb2RlPWZhbHNlOyAvLyBmYWxzZTogc2hvdyB0aGUgc2VhcmNoIGJveCBieSBkZWZhdWx0LHRydWU6IHNob3cgcmVzb3VyY2UgbGlzdCBieSBkZWZhdWx0CnZhciBlbXB0eV9tb2RlPWZhbHNlOyAvLyBzaG91bGQgYmUgYWx3YXlzIHNldCB0byBmYWxzZQp2YXIgcGxhbnlvX2pzX2xpYnJhcnlfdXNlZD0nanF1ZXJ5JzsgLy8gc2V0IHRoaXMgdG8gJ21vb3Rvb2xzJyBpZiB5b3Ugd2FudCB0byB1c2UgbW9vdG9vbHMgaW5zdGVhZCBvZiBqUXVlcnkKdmFyIHBsYW55b19pbmNsdWRlX2pzX2xpYnJhcnk9dHJ1ZTsgLy8gc2V0IHRoaXMgdG8gZmFsc2UgaWYgeW91ciB3ZWJzaXRlIGFscmVhZHkgaW5jbHVkZXMgdGhlIEphdmFzY3JpcHQgbGlicmFyeSBjaG9zZW4gaW4gdGhlIGxpdmUgYWJvdmUgKGpRdWVyeSBvciBtb290b29scykKdmFyIHBsYW55b191c2VfaHR0cHM9KCJodHRwczoiID09IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sKTsgLy8gc2V0IHRoaXMgdG8gdHJ1ZSBpZiBlbWJlZGRpbmcgcGxhbnlvIG9uIGEgc2VjdXJlIHdlYnNpdGUgKFNTTCkKPC9zY3JpcHQ+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIGdldF9wYXJhbSAobmFtZSkge25hbWUgPSBuYW1lLnJlcGxhY2UoL1tcW10vLCJcXFxbIikucmVwbGFjZSgvW1xdXS8sIlxcXF0iKTt2YXIgcmVnZXhTID0gIltcXD8mXSIrbmFtZSsiPShbXiYjXSopIjt2YXIgcmVnZXggPSBuZXcgUmVnRXhwIChyZWdleFMpO3ZhciByZXN1bHRzID0gcmVnZXguZXhlYyAod2luZG93LmxvY2F0aW9uLmhyZWYpO2lmIChyZXN1bHRzID09IG51bGwpIHJldHVybiBudWxsO2Vsc2UgIHJldHVybiByZXN1bHRzWzFdO30KaWYgKGdldF9wYXJhbSgnbW9kZScpKXBsYW55b19lbWJlZF9tb2RlID0gZ2V0X3BhcmFtKCdtb2RlJyk7CmZ1bmN0aW9uIGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgobmFtZSkge2lmKHBsYW55b19maWxlc19sb2NhdGlvbi5sZW5ndGg9PTB8fHBsYW55b19maWxlc19sb2NhdGlvbi5sYXN0SW5kZXhPZignLycpPT1wbGFueW9fZmlsZXNfbG9jYXRpb24ubGVuZ3RoLTEpcmV0dXJuIHBsYW55b19maWxlc19sb2NhdGlvbituYW1lOyBlbHNlIHJldHVybiBwbGFueW9fZmlsZXNfbG9jYXRpb24rJy8nK25hbWU7fQpkb2N1bWVudC53cml0ZSgiPGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoInBsYW55by1zdHlsZXMuY3NzIikrIicgdHlwZT0ndGV4dC9jc3MnIC8+Iik7CmRvY3VtZW50LndyaXRlKCI8ZGl2IGlkPSdwbGFueW9fY29udGVudCc+PGltZyBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgiaG91cmdsYXNzLmdpZiIpKyInIGFsaWduPSdtaWRkbGUnIC8+PC9kaXY+Iik7CmlmIChwbGFueW9fanNfbGlicmFyeV91c2VkPT0nanF1ZXJ5JyB8fCBwbGFueW9fanNfbGlicmFyeV91c2VkPT0nalF1ZXJ5JykgewogIGlmIChwbGFueW9faW5jbHVkZV9qc19saWJyYXJ5KSBkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJqcXVlcnkuanMiKSsiJz48L3NjIisicmlwdD4iKTsKICBkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgicGxhbnlvLWpxdWVyeS11dGlscy5qcyIpKyInIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zYyIrInJpcHQ+Iik7CiAgZG9jdW1lbnQud3JpdGUoIjxzYyIrInJpcHQgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoInBsYW55by1qcXVlcnktcmVzZXJ2YXRpb25zLmpzIikrIicgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz48L3NjIisicmlwdD4iKTsKfQplbHNlIHsKICBpZiAocGxhbnlvX2luY2x1ZGVfanNfbGlicmFyeSkgewogICAgZG9jdW1lbnQud3JpdGUoIjxzYyIrInJpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgibW9vdG9vbHMtMS4yLWNvcmUuanMiKSsiJz48L3NjIisicmlwdD4iKTsKICAgIGRvY3VtZW50LndyaXRlKCI8c2MiKyJyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoIm1vb3Rvb2xzLTEuMi1tb3JlLmpzIikrIic+PC9zYyIrInJpcHQ+Iik7CiAgfQogIGRvY3VtZW50LndyaXRlKCI8c2MiKyJyaXB0IHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJ1dGlscy5qcyIpKyInIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zYyIrInJpcHQ+Iik7CiAgZG9jdW1lbnQud3JpdGUoIjxzYyIrInJpcHQgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoInBsYW55by1yZXNlcnZhdGlvbnMuanMiKSsiJyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwvc2MiKyJyaXB0PiIpOwp9Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+PGEgaHJlZj0naHR0cDovL3d3dy5wbGFueW8uY29tL2Fib3V0LWNhbGVuZGFyLnBocD9jYWxlbmRhcj1bc2l0ZSBJRF0nPk1ha2UgYSByZXNlcnZhdGlvbjwvYT48YnIvPjxici8+PGEgaHJlZj0naHR0cDovL3d3dy5wbGFueW8uY29tLyc+UmVzZXJ2YXRpb24gc3lzdGVtIHBvd2VyZWQgYnkgUGxhbnlvPC9hPjwvbm9zY3JpcHQ+Cg==]]></data>
	</file>
	<file>
	  <filename>/hourglass.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhGAAYAPQAAP///wAAAM7Ozvr6+uDg4LCwsOjo6I6OjsjIyJycnNjY2KioqMDAwPLy8nZ2doaGhri4uGhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJBwAAACwAAAAAGAAYAAAFriAgjiQAQWVaDgr5POSgkoTDjFE0NoQ8iw8HQZQTDQjDn4jhSABhAAOhoTqSDg7qSUQwxEaEwwFhXHhHgzOA1xshxAnfTzotGRaHglJqkJcaVEqCgyoCBQkJBQKDDXQGDYaIioyOgYSXA36XIgYMBWRzXZoKBQUMmil0lgalLSIClgBpO0g+s26nUWddXyoEDIsACq5SsTMMDIECwUdJPw0Mzsu0qHYkw72bBmozIQAh+QQJBwAAACwAAAAAGAAYAAAFsCAgjiTAMGVaDgR5HKQwqKNxIKPjjFCk0KNXC6ATKSI7oAhxWIhezwhENTCQEoeGCdWIPEgzESGxEIgGBWstEW4QCGGAIJEoxGmGt5ZkgCRQQHkGd2CESoeIIwoMBQUMP4cNeQQGDYuNj4iSb5WJnmeGng0CDGaBlIQEJziHk3sABidDAHBgagButSKvAAoyuHuUYHgCkAZqebw0AgLBQyyzNKO3byNuoSS8x8OfwIchACH5BAkHAAAALAAAAAAYABgAAAW4ICCOJIAgZVoOBJkkpDKoo5EI43GMjNPSokXCINKJCI4HcCRIQEQvqIOhGhBHhUTDhGo4diOZyFAoKEQDxra2mAEgjghOpCgz3LTBIxJ5kgwMBShACREHZ1V4Kg1rS44pBAgMDAg/Sw0GBAQGDZGTlY+YmpyPpSQDiqYiDQoCliqZBqkGAgKIS5kEjQ21VwCyp76dBHiNvz+MR74AqSOdVwbQuo+abppo10ssjdkAnc0rf8vgl8YqIQAh+QQJBwAAACwAAAAAGAAYAAAFrCAgjiQgCGVaDgZZFCQxqKNRKGOSjMjR0qLXTyciHA7AkaLACMIAiwOC1iAxCrMToHHYjWQiA4NBEA0Q1RpWxHg4cMXxNDk4OBxNUkPAQAEXDgllKgMzQA1pSYopBgonCj9JEA8REQ8QjY+RQJOVl4ugoYssBJuMpYYjDQSliwasiQOwNakALKqsqbWvIohFm7V6rQAGP6+JQLlFg7KDQLKJrLjBKbvAor3IKiEAIfkECQcAAAAsAAAAABgAGAAABbUgII4koChlmhokw5DEoI4NQ4xFMQoJO4uuhignMiQWvxGBIQC+AJBEUyUcIRiyE6CR0CllW4HABxBURTUw4nC4FcWo5CDBRpQaCoF7VjgsyCUDYDMNZ0mHdwYEBAaGMwwHDg4HDA2KjI4qkJKUiJ6faJkiA4qAKQkRB3E0i6YpAw8RERAjA4tnBoMApCMQDhFTuySKoSKMJAq6rD4GzASiJYtgi6PUcs9Kew0xh7rNJMqIhYchACH5BAkHAAAALAAAAAAYABgAAAW0ICCOJEAQZZo2JIKQxqCOjWCMDDMqxT2LAgELkBMZCoXfyCBQiFwiRsGpku0EshNgUNAtrYPT0GQVNRBWwSKBMp98P24iISgNDAS4ipGA6JUpA2WAhDR4eWM/CAkHBwkIDYcGiTOLjY+FmZkNlCN3eUoLDmwlDW+AAwcODl5bYl8wCVYMDw5UWzBtnAANEQ8kBIM0oAAGPgcREIQnVloAChEOqARjzgAQEbczg8YkWJq8nSUhACH5BAkHAAAALAAAAAAYABgAAAWtICCOJGAYZZoOpKKQqDoORDMKwkgwtiwSBBYAJ2owGL5RgxBziQQMgkwoMkhNqAEDARPSaiMDFdDIiRSFQowMXE8Z6RdpYHWnEAWGPVkajPmARVZMPUkCBQkJBQINgwaFPoeJi4GVlQ2Qc3VJBQcLV0ptfAMJBwdcIl+FYjALQgimoGNWIhAQZA4HXSpLMQ8PIgkOSHxAQhERPw7ASTSFyCMMDqBTJL8tf3y2fCEAIfkECQcAAAAsAAAAABgAGAAABa8gII4k0DRlmg6kYZCoOg5EDBDEaAi2jLO3nEkgkMEIL4BLpBAkVy3hCTAQKGAznM0AFNFGBAbj2cA9jQixcGZAGgECBu/9HnTp+FGjjezJFAwFBQwKe2Z+KoCChHmNjVMqA21nKQwJEJRlbnUFCQlFXlpeCWcGBUACCwlrdw8RKGImBwktdyMQEQciB7oACwcIeA4RVwAODiIGvHQKERAjxyMIB5QlVSTLYLZ0sW8hACH5BAkHAAAALAAAAAAYABgAAAW0ICCOJNA0ZZoOpGGQrDoOBCoSxNgQsQzgMZyIlvOJdi+AS2SoyXrK4umWPM5wNiV0UDUIBNkdoepTfMkA7thIECiyRtUAGq8fm2O4jIBgMBA1eAZ6Knx+gHaJR4QwdCMKBxEJRggFDGgQEREPjjAMBQUKIwIRDhBDC2QNDDEKoEkDoiMHDigICGkJBS2dDA6TAAnAEAkCdQ8ORQcHTAkLcQQODLPMIgIJaCWxJMIkPIoAt3EhACH5BAkHAAAALAAAAAAYABgAAAWtICCOJNA0ZZoOpGGQrDoOBCoSxNgQsQzgMZyIlvOJdi+AS2SoyXrK4umWHM5wNiV0UN3xdLiqr+mENcWpM9TIbrsBkEck8oC0DQqBQGGIz+t3eXtob0ZTPgNrIwQJDgtGAgwCWSIMDg4HiiUIDAxFAAoODwxDBWINCEGdSTQkCQcoegADBaQ6MggHjwAFBZUFCm0HB0kJCUy9bAYHCCPGIwqmRq0jySMGmj6yRiEAIfkECQcAAAAsAAAAABgAGAAABbIgII4k0DRlmg6kYZCsOg4EKhLE2BCxDOAxnIiW84l2L4BLZKipBopW8XRLDkeCiAMyMvQAA+uON4JEIo+vqukkKQ6RhLHplVGN+LyKcXA4Dgx5DWwGDXx+gIKENnqNdzIDaiMECwcFRgQCCowiCAcHCZIlCgICVgSfCEMMnA0CXaU2YSQFoQAKUQMMqjoyAglcAAyBAAIMRUYLCUkFlybDeAYJryLNk6xGNCTQXY0juHghACH5BAkHAAAALAAAAAAYABgAAAWzICCOJNA0ZVoOAmkY5KCSSgSNBDE2hDyLjohClBMNij8RJHIQvZwEVOpIekRQJyJs5AMoHA+GMbE1lnm9EcPhOHRnhpwUl3AsknHDm5RN+v8qCAkHBwkIfw1xBAYNgoSGiIqMgJQifZUjBhAJYj95ewIJCQV7KYpzBAkLLQADCHOtOpY5PgNlAAykAEUsQ1wzCgWdCIdeArczBQVbDJ0NAqyeBb64nQAGArBTt8R8mLuyPyEAOwAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/icon-calendar.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhGAAYALMAAP///9DQ0KCgoPLy8tnZ2dlREPX19eLi4vz8/AAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAYABgAAAR9EMhJq6Ui6827QYAQjGRplsJhhGd7CsTAunQAy12ux+EU+EBJoEC89YRBwE9ILBgFyaXS13zWaE8qUcqdZJnbqJcHBRe6SIn12vpO08qm1I2Oh9VksXlOZrfzcHV8OHpvhnSFgyE6jBo8BgcEkpOUlZQqAAgGA5ydnp+eHxEAOw==]]></data>
	</file>
	<file>
	  <filename>/icon-calendar.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8AdwBruPm69gAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kIHQwYOb/iyvEAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAR1JREFUSMfllUFKxEAQRV9PokYGURB3rg2EQDyBG68gZJkcIRt33sCdJ+i+T8AOZJMTuBgEFUQiDOVqhmRmzJAxQcS/+1Vd/an6BaVEhO9gjDmjB5Ikma3GlIhgjBEGRpqmU6B2jTFTgDAMcV13kM+ttQCnwPOE8XAIOJMkSd5HFGE5k7IsxxWI43gZrKoK3/d7cXV39brgjzcPx2sCnue1lPvyvfpt4yaOaXK7g6IoWom+/PPenjT2dF0giqJW8f7t5UuzeDXfxW1DYPQR/Z4HrZnu4MlWD7bxLo/+iQe99r7DA0QErbU0Ya39EddaC3ABHP19D8a8yT7w5C4OdJZl13mezzY9DoLgfAeND2CuRASllAMcAM6ATcyB+gtFuttczzsCuQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/icon-help.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFAAUAMZsAP/50f+ohv9JAv9dHf9IAP/+/f/DrN/Xsv+DTv/tw//74P/62f/7+f/97v9MBf/htf/Kmf9rKvv1zf+mb/9JAf9UDv+TaffxyuTdt//59v/28uLbtv/97f5NB//39P/85v33z//97/+IWfbwyfjyy+3mwP740P/Wxv/28+PHnv/51f/73/Xux/5PCOjhu//51OnivP/50vPtxv9gHfdrK/9lJPHrxOfguvjes//98f/nx/r0zP/Wp/z2z+7nwfuPVf/61//63PDpw//p3P+QZP+ndf5QCf7ImP/+9f/62v9xN//Twv9wNfltLerPpezmv/+DT//73f7Jmf/Twf1PCf/bzf9QC/9zNfDqw/vgtf+yff1SDf+/k/9OCPTux//86vOARfR6PuqldP/o1eyfbP/73uvlv/++i/9UD/9RC+bfuvz1zv///////////////////////////////////////////////////////////////////////////////yH5BAEAAH8ALAAAAAAUABQAAAfxgH+Cg4SFhoUnBoqLJ4eCAQNpSlAIlZVMVgMBhQECQ0g5IQ2jDRwcXzoCm4MDYyEfK1wzBGhFQVFlKjgDhAIfCi8JFREQEwRnADE7TwKEDgpJAAlaD9IEEwAAJDAdzgoL2dk8ERUJ2RcuLd7g2cIR1efpzivsABAEEOEAIzfdgwILVJjI9mACPAA9bGCgQGhAFhZeRkg4QkDKmgssfGxIwWtQJycb1GCRAIJECQwHDqSgsMrjACNNfpiQYOYAGBpUNDnSYKEGECEHwliY4miQhS4KZBwQI6LoIApXQJQgs0XEEqeCBAggQIBIFaxgw4oNBAA7]]></data>
	</file>
	<file>
	  <filename>/icon-help.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oJAQwxMs1NP6sAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAqhJREFUOMutlE1IVFEYhp9zZ8R/xbLsx4KoFkURBEHRz7LGghZRtCgqgqhWbQoyI+iHIqKFREFBVBa5aGeLokUtglrVLiXQ7A91GrVRr4xz7z33bXEbc5qRWnjghcP5znn5zvu932ckMZMrPm2kyWxALCgaM/TxTG+LhvIyPLn5Hj++HMIdhkUrLLWzs5giPxhOxvj6sYSyqgli8VYe95+ZjEmKkKBZCSMlu6VwXLIjkv0p2eG/MBQh+CH1v5USJtSOeEuO5w/hvgVWAx8ikqBP8nulVzekQ4ukBNLuWqn9lOR1S36P5H+Ssh808emptHdOJsfzR8Ohfof6OghHIHTB/Qk3W6ChES7chu5OeHANGubCxq2Awfc93LIqSkcGSwuLEouBvAjY6OzACVizHuY1wtKV0NYKA99zYhGGwgYWOU5oCgiNmbwIQFUNbNsd7Xs64ebF/LMp+hNzco9x/mksdxTOHY3219sj0iI+moawiEV6OiPSgyeir0+9PVlZimRo7W8NA/K82dAYadmQT2ZtiO/7WGsx1jeFRamelQn6usu9mlkIcByHkpI4sf5vmLZWtHQlYf18/CAgtJZs1sN1xzGDA1A33xZ2SpNpBnM5deURE1V1xONxKirLqayswHEcfD9g3B0nk8nge36UTXqQxvOHAc7wTFcKW6/JNFNTf1bZsXJv4ZIgtnx1Sex4C9Za0ulR3NExZrdddePJb7Y0lax2Kmo8RlIXcmT5rTcVO6nWnvqHOrJM8rqUTr5Wb1eHxk5vstpVe1/b2VL0XV7rTcU2bmlnmeR/1tjQG/V2dWjg7rGUEqZ9OqLC1sut7Y5YtY7w0h3Sqc+Ez5+Eizvu4/jZl0i3/mVbUzBgm5zwtxiRFdZu7eLdi/081/v/GbBmpie2wwyvX+fg2Y04BS2DAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/index.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/jquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuNC4yCiAqIGh0dHA6Ly9qcXVlcnkuY29tLwogKgogKiBDb3B5cmlnaHQgMjAxMCwgSm9obiBSZXNpZwogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBJbmNsdWRlcyBTaXp6bGUuanMKICogaHR0cDovL3NpenpsZWpzLmNvbS8KICogQ29weXJpZ2h0IDIwMTAsIFRoZSBEb2pvIEZvdW5kYXRpb24KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCwgQlNELCBhbmQgR1BMIExpY2Vuc2VzLgogKgogKiBEYXRlOiBTYXQgRmViIDEzIDIyOjMzOjQ4IDIwMTAgLTA1MDAKICovCihmdW5jdGlvbihBLHcpe2Z1bmN0aW9uIG1hKCl7aWYoIWMuaXNSZWFkeSl7dHJ5e3MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7c2V0VGltZW91dChtYSwxKTtyZXR1cm59Yy5yZWFkeSgpfX1mdW5jdGlvbiBRYShhLGIpe2Iuc3JjP2MuYWpheCh7dXJsOmIuc3JjLGFzeW5jOmZhbHNlLGRhdGFUeXBlOiJzY3JpcHQifSk6Yy5nbG9iYWxFdmFsKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKTtiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBYKGEsYixkLGYsZSxqKXt2YXIgaT1hLmxlbmd0aDtpZih0eXBlb2YgYj09PSJvYmplY3QiKXtmb3IodmFyIG8gaW4gYilYKGEsbyxiW29dLGYsZSxkKTtyZXR1cm4gYX1pZihkIT09dyl7Zj0haiYmZiYmYy5pc0Z1bmN0aW9uKGQpO2ZvcihvPTA7bzxpO28rKyllKGFbb10sYixmP2QuY2FsbChhW29dLG8sZShhW29dLGIpKTpkLGopO3JldHVybiBhfXJldHVybiBpPwplKGFbMF0sYik6d31mdW5jdGlvbiBKKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9ZnVuY3Rpb24gWSgpe3JldHVybiBmYWxzZX1mdW5jdGlvbiBaKCl7cmV0dXJuIHRydWV9ZnVuY3Rpb24gbmEoYSxiLGQpe2RbMF0udHlwZT1hO3JldHVybiBjLmV2ZW50LmhhbmRsZS5hcHBseShiLGQpfWZ1bmN0aW9uIG9hKGEpe3ZhciBiLGQ9W10sZj1bXSxlPWFyZ3VtZW50cyxqLGksbyxrLG4scjtpPWMuZGF0YSh0aGlzLCJldmVudHMiKTtpZighKGEubGl2ZUZpcmVkPT09dGhpc3x8IWl8fCFpLmxpdmV8fGEuYnV0dG9uJiZhLnR5cGU9PT0iY2xpY2siKSl7YS5saXZlRmlyZWQ9dGhpczt2YXIgdT1pLmxpdmUuc2xpY2UoMCk7Zm9yKGs9MDtrPHUubGVuZ3RoO2srKyl7aT11W2tdO2kub3JpZ1R5cGUucmVwbGFjZShPLCIiKT09PWEudHlwZT9mLnB1c2goaS5zZWxlY3Rvcik6dS5zcGxpY2Uoay0tLDEpfWo9YyhhLnRhcmdldCkuY2xvc2VzdChmLGEuY3VycmVudFRhcmdldCk7bj0wO2ZvcihyPQpqLmxlbmd0aDtuPHI7bisrKWZvcihrPTA7azx1Lmxlbmd0aDtrKyspe2k9dVtrXTtpZihqW25dLnNlbGVjdG9yPT09aS5zZWxlY3Rvcil7bz1qW25dLmVsZW07Zj1udWxsO2lmKGkucHJlVHlwZT09PSJtb3VzZWVudGVyInx8aS5wcmVUeXBlPT09Im1vdXNlbGVhdmUiKWY9YyhhLnJlbGF0ZWRUYXJnZXQpLmNsb3Nlc3QoaS5zZWxlY3RvcilbMF07aWYoIWZ8fGYhPT1vKWQucHVzaCh7ZWxlbTpvLGhhbmRsZU9iajppfSl9fW49MDtmb3Iocj1kLmxlbmd0aDtuPHI7bisrKXtqPWRbbl07YS5jdXJyZW50VGFyZ2V0PWouZWxlbTthLmRhdGE9ai5oYW5kbGVPYmouZGF0YTthLmhhbmRsZU9iaj1qLmhhbmRsZU9iajtpZihqLmhhbmRsZU9iai5vcmlnSGFuZGxlci5hcHBseShqLmVsZW0sZSk9PT1mYWxzZSl7Yj1mYWxzZTticmVha319cmV0dXJuIGJ9fWZ1bmN0aW9uIHBhKGEsYil7cmV0dXJuImxpdmUuIisoYSYmYSE9PSIqIj9hKyIuIjoiIikrYi5yZXBsYWNlKC9cLi9nLCJgIikucmVwbGFjZSgvIC9nLAoiJiIpfWZ1bmN0aW9uIHFhKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiByYShhLGIpe3ZhciBkPTA7Yi5lYWNoKGZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZT09PShhW2RdJiZhW2RdLm5vZGVOYW1lKSl7dmFyIGY9Yy5kYXRhKGFbZCsrXSksZT1jLmRhdGEodGhpcyxmKTtpZihmPWYmJmYuZXZlbnRzKXtkZWxldGUgZS5oYW5kbGU7ZS5ldmVudHM9e307Zm9yKHZhciBqIGluIGYpZm9yKHZhciBpIGluIGZbal0pYy5ldmVudC5hZGQodGhpcyxqLGZbal1baV0sZltqXVtpXS5kYXRhKX19fSl9ZnVuY3Rpb24gc2EoYSxiLGQpe3ZhciBmLGUsajtiPWImJmJbMF0/YlswXS5vd25lckRvY3VtZW50fHxiWzBdOnM7aWYoYS5sZW5ndGg9PT0xJiZ0eXBlb2YgYVswXT09PSJzdHJpbmciJiZhWzBdLmxlbmd0aDw1MTImJmI9PT1zJiYhdGEudGVzdChhWzBdKSYmKGMuc3VwcG9ydC5jaGVja0Nsb25lfHwhdWEudGVzdChhWzBdKSkpe2U9CnRydWU7aWYoaj1jLmZyYWdtZW50c1thWzBdXSlpZihqIT09MSlmPWp9aWYoIWYpe2Y9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yy5jbGVhbihhLGIsZixkKX1pZihlKWMuZnJhZ21lbnRzW2FbMF1dPWo/ZjoxO3JldHVybntmcmFnbWVudDpmLGNhY2hlYWJsZTplfX1mdW5jdGlvbiBLKGEsYil7dmFyIGQ9e307Yy5lYWNoKHZhLmNvbmNhdC5hcHBseShbXSx2YS5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2RbdGhpc109YX0pO3JldHVybiBkfWZ1bmN0aW9uIHdhKGEpe3JldHVybiJzY3JvbGxUbyJpbiBhJiZhLmRvY3VtZW50P2E6YS5ub2RlVHlwZT09PTk/YS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3c6ZmFsc2V9dmFyIGM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGMuZm4uaW5pdChhLGIpfSxSYT1BLmpRdWVyeSxTYT1BLiQscz1BLmRvY3VtZW50LFQsVGE9L15bXjxdKig8W1x3XFddKz4pW14+XSokfF4jKFtcdy1dKykkLyxVYT0vXi5bXjojXFtcLixdKiQvLFZhPS9cUy8sCldhPS9eKFxzfFx1MDBBMCkrfChcc3xcdTAwQTApKyQvZyxYYT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLFA9bmF2aWdhdG9yLnVzZXJBZ2VudCx4YT1mYWxzZSxRPVtdLEwsJD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGFhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYmE9QXJyYXkucHJvdG90eXBlLnB1c2gsUj1BcnJheS5wcm90b3R5cGUuc2xpY2UseWE9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y7Yy5mbj1jLnByb3RvdHlwZT17aW5pdDpmdW5jdGlvbihhLGIpe3ZhciBkLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YTt0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFiKXt0aGlzLmNvbnRleHQ9czt0aGlzWzBdPXMuYm9keTt0aGlzLnNlbGVjdG9yPSJib2R5Ijt0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT09InN0cmluZyIpaWYoKGQ9VGEuZXhlYyhhKSkmJgooZFsxXXx8IWIpKWlmKGRbMV0pe2Y9Yj9iLm93bmVyRG9jdW1lbnR8fGI6cztpZihhPVhhLmV4ZWMoYSkpaWYoYy5pc1BsYWluT2JqZWN0KGIpKXthPVtzLmNyZWF0ZUVsZW1lbnQoYVsxXSldO2MuZm4uYXR0ci5jYWxsKGEsYix0cnVlKX1lbHNlIGE9W2YuY3JlYXRlRWxlbWVudChhWzFdKV07ZWxzZXthPXNhKFtkWzFdXSxbZl0pO2E9KGEuY2FjaGVhYmxlP2EuZnJhZ21lbnQuY2xvbmVOb2RlKHRydWUpOmEuZnJhZ21lbnQpLmNoaWxkTm9kZXN9cmV0dXJuIGMubWVyZ2UodGhpcyxhKX1lbHNle2lmKGI9cy5nZXRFbGVtZW50QnlJZChkWzJdKSl7aWYoYi5pZCE9PWRbMl0pcmV0dXJuIFQuZmluZChhKTt0aGlzLmxlbmd0aD0xO3RoaXNbMF09Yn10aGlzLmNvbnRleHQ9czt0aGlzLnNlbGVjdG9yPWE7cmV0dXJuIHRoaXN9ZWxzZSBpZighYiYmL15cdyskLy50ZXN0KGEpKXt0aGlzLnNlbGVjdG9yPWE7dGhpcy5jb250ZXh0PXM7YT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO3JldHVybiBjLm1lcmdlKHRoaXMsCmEpfWVsc2UgcmV0dXJuIWJ8fGIuanF1ZXJ5PyhifHxUKS5maW5kKGEpOmMoYikuZmluZChhKTtlbHNlIGlmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gVC5yZWFkeShhKTtpZihhLnNlbGVjdG9yIT09dyl7dGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yO3RoaXMuY29udGV4dD1hLmNvbnRleHR9cmV0dXJuIGMubWFrZUFycmF5KGEsdGhpcyl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS40LjIiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gUi5jYWxsKHRoaXMsMCl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD90aGlzLnRvQXJyYXkoKTphPDA/dGhpcy5zbGljZShhKVswXTp0aGlzW2FdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWMoKTtjLmlzQXJyYXkoYSk/YmEuYXBwbHkoZixhKTpjLm1lcmdlKGYsYSk7Zi5wcmV2T2JqZWN0PXRoaXM7Zi5jb250ZXh0PXRoaXMuY29udGV4dDtpZihiPT09CiJmaW5kIilmLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStkO2Vsc2UgaWYoYilmLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2QrIikiO3JldHVybiBmfSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGMuZWFjaCh0aGlzLGEsYil9LHJlYWR5OmZ1bmN0aW9uKGEpe2MuYmluZFJlYWR5KCk7aWYoYy5pc1JlYWR5KWEuY2FsbChzLGMpO2Vsc2UgUSYmUS5wdXNoKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhSLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLFIuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYy5tYXAodGhpcywKZnVuY3Rpb24oYixkKXtyZXR1cm4gYS5jYWxsKGIsZCxiKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8YyhudWxsKX0scHVzaDpiYSxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX07Yy5mbi5pbml0LnByb3RvdHlwZT1jLmZuO2MuZXh0ZW5kPWMuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdfHx7fSxiPTEsZD1hcmd1bWVudHMubGVuZ3RoLGY9ZmFsc2UsZSxqLGksbztpZih0eXBlb2YgYT09PSJib29sZWFuIil7Zj1hO2E9YXJndW1lbnRzWzFdfHx7fTtiPTJ9aWYodHlwZW9mIGEhPT0ib2JqZWN0IiYmIWMuaXNGdW5jdGlvbihhKSlhPXt9O2lmKGQ9PT1iKXthPXRoaXM7LS1ifWZvcig7YjxkO2IrKylpZigoZT1hcmd1bWVudHNbYl0pIT1udWxsKWZvcihqIGluIGUpe2k9YVtqXTtvPWVbal07aWYoYSE9PW8paWYoZiYmbyYmKGMuaXNQbGFpbk9iamVjdChvKXx8Yy5pc0FycmF5KG8pKSl7aT1pJiYoYy5pc1BsYWluT2JqZWN0KGkpfHwKYy5pc0FycmF5KGkpKT9pOmMuaXNBcnJheShvKT9bXTp7fTthW2pdPWMuZXh0ZW5kKGYsaSxvKX1lbHNlIGlmKG8hPT13KWFbal09b31yZXR1cm4gYX07Yy5leHRlbmQoe25vQ29uZmxpY3Q6ZnVuY3Rpb24oYSl7QS4kPVNhO2lmKGEpQS5qUXVlcnk9UmE7cmV0dXJuIGN9LGlzUmVhZHk6ZmFsc2UscmVhZHk6ZnVuY3Rpb24oKXtpZighYy5pc1JlYWR5KXtpZighcy5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGMucmVhZHksMTMpO2MuaXNSZWFkeT10cnVlO2lmKFEpe2Zvcih2YXIgYSxiPTA7YT1RW2IrK107KWEuY2FsbChzLGMpO1E9bnVsbH1jLmZuLnRyaWdnZXJIYW5kbGVyJiZjKHMpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpfX0sYmluZFJlYWR5OmZ1bmN0aW9uKCl7aWYoIXhhKXt4YT10cnVlO2lmKHMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIGMucmVhZHkoKTtpZihzLmFkZEV2ZW50TGlzdGVuZXIpe3MuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsCkwsZmFsc2UpO0EuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsYy5yZWFkeSxmYWxzZSl9ZWxzZSBpZihzLmF0dGFjaEV2ZW50KXtzLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEwpO0EuYXR0YWNoRXZlbnQoIm9ubG9hZCIsYy5yZWFkeSk7dmFyIGE9ZmFsc2U7dHJ5e2E9QS5mcmFtZUVsZW1lbnQ9PW51bGx9Y2F0Y2goYil7fXMuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsJiZhJiZtYSgpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuICQuY2FsbChhKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LGlzQXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuICQuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSJ9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7aWYoIWF8fCQuY2FsbChhKSE9PSJbb2JqZWN0IE9iamVjdF0ifHxhLm5vZGVUeXBlfHxhLnNldEludGVydmFsKXJldHVybiBmYWxzZTtpZihhLmNvbnN0cnVjdG9yJiYhYWEuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhYWEuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwKImlzUHJvdG90eXBlT2YiKSlyZXR1cm4gZmFsc2U7dmFyIGI7Zm9yKGIgaW4gYSk7cmV0dXJuIGI9PT13fHxhYS5jYWxsKGEsYil9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBhO30scGFyc2VKU09OOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhIT09InN0cmluZyJ8fCFhKXJldHVybiBudWxsO2E9Yy50cmltKGEpO2lmKC9eW1xdLDp7fVxzXSokLy50ZXN0KGEucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCJAIikucmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2csIl0iKS5yZXBsYWNlKC8oPzpefDp8LCkoPzpccypcWykrL2csIiIpKSlyZXR1cm4gQS5KU09OJiZBLkpTT04ucGFyc2U/QS5KU09OLnBhcnNlKGEpOihuZXcgRnVuY3Rpb24oInJldHVybiAiKwphKSkoKTtlbHNlIGMuZXJyb3IoIkludmFsaWQgSlNPTjogIithKX0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihhKXtpZihhJiZWYS50ZXN0KGEpKXt2YXIgYj1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fHMuZG9jdW1lbnRFbGVtZW50LGQ9cy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtkLnR5cGU9InRleHQvamF2YXNjcmlwdCI7aWYoYy5zdXBwb3J0LnNjcmlwdEV2YWwpZC5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKGEpKTtlbHNlIGQudGV4dD1hO2IuaW5zZXJ0QmVmb3JlKGQsYi5maXJzdENoaWxkKTtiLnJlbW92ZUNoaWxkKGQpfX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYixkKXt2YXIgZixlPTAsaj1hLmxlbmd0aCxpPWo9PT13fHxjLmlzRnVuY3Rpb24oYSk7aWYoZClpZihpKWZvcihmIGluIGEpe2lmKGIuYXBwbHkoYVtmXSwKZCk9PT1mYWxzZSlicmVha31lbHNlIGZvcig7ZTxqOyl7aWYoYi5hcHBseShhW2UrK10sZCk9PT1mYWxzZSlicmVha31lbHNlIGlmKGkpZm9yKGYgaW4gYSl7aWYoYi5jYWxsKGFbZl0sZixhW2ZdKT09PWZhbHNlKWJyZWFrfWVsc2UgZm9yKGQ9YVswXTtlPGomJmIuY2FsbChkLGUsZCkhPT1mYWxzZTtkPWFbKytlXSk7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuKGF8fCIiKS5yZXBsYWNlKFdhLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7Yj1ifHxbXTtpZihhIT1udWxsKWEubGVuZ3RoPT1udWxsfHx0eXBlb2YgYT09PSJzdHJpbmcifHxjLmlzRnVuY3Rpb24oYSl8fHR5cGVvZiBhIT09ImZ1bmN0aW9uIiYmYS5zZXRJbnRlcnZhbD9iYS5jYWxsKGIsYSk6Yy5tZXJnZShiLGEpO3JldHVybiBifSxpbkFycmF5OmZ1bmN0aW9uKGEsYil7aWYoYi5pbmRleE9mKXJldHVybiBiLmluZGV4T2YoYSk7Zm9yKHZhciBkPTAsZj1iLmxlbmd0aDtkPGY7ZCsrKWlmKGJbZF09PT0KYSlyZXR1cm4gZDtyZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgZD1hLmxlbmd0aCxmPTA7aWYodHlwZW9mIGIubGVuZ3RoPT09Im51bWJlciIpZm9yKHZhciBlPWIubGVuZ3RoO2Y8ZTtmKyspYVtkKytdPWJbZl07ZWxzZSBmb3IoO2JbZl0hPT13OylhW2QrK109YltmKytdO2EubGVuZ3RoPWQ7cmV0dXJuIGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGQpe2Zvcih2YXIgZj1bXSxlPTAsaj1hLmxlbmd0aDtlPGo7ZSsrKSFkIT09IWIoYVtlXSxlKSYmZi5wdXNoKGFbZV0pO3JldHVybiBmfSxtYXA6ZnVuY3Rpb24oYSxiLGQpe2Zvcih2YXIgZj1bXSxlLGo9MCxpPWEubGVuZ3RoO2o8aTtqKyspe2U9YihhW2pdLGosZCk7aWYoZSE9bnVsbClmW2YubGVuZ3RoXT1lfXJldHVybiBmLmNvbmNhdC5hcHBseShbXSxmKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYixkKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MilpZih0eXBlb2YgYj09PSJzdHJpbmciKXtkPWE7YT1kW2JdO2I9d31lbHNlIGlmKGImJgohYy5pc0Z1bmN0aW9uKGIpKXtkPWI7Yj13fWlmKCFiJiZhKWI9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShkfHx0aGlzLGFyZ3VtZW50cyl9O2lmKGEpYi5ndWlkPWEuZ3VpZD1hLmd1aWR8fGIuZ3VpZHx8Yy5ndWlkKys7cmV0dXJuIGJ9LHVhTWF0Y2g6ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7YT0vKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKGEpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8Lyhtc2llKSAoW1x3Ll0rKS8uZXhlYyhhKXx8IS9jb21wYXRpYmxlLy50ZXN0KGEpJiYvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmFbMV18fCIiLHZlcnNpb246YVsyXXx8IjAifX0sYnJvd3Nlcjp7fX0pO1A9Yy51YU1hdGNoKFApO2lmKFAuYnJvd3Nlcil7Yy5icm93c2VyW1AuYnJvd3Nlcl09dHJ1ZTtjLmJyb3dzZXIudmVyc2lvbj1QLnZlcnNpb259aWYoYy5icm93c2VyLndlYmtpdCljLmJyb3dzZXIuc2FmYXJpPQp0cnVlO2lmKHlhKWMuaW5BcnJheT1mdW5jdGlvbihhLGIpe3JldHVybiB5YS5jYWxsKGIsYSl9O1Q9YyhzKTtpZihzLmFkZEV2ZW50TGlzdGVuZXIpTD1mdW5jdGlvbigpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsTCxmYWxzZSk7Yy5yZWFkeSgpfTtlbHNlIGlmKHMuYXR0YWNoRXZlbnQpTD1mdW5jdGlvbigpe2lmKHMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpe3MuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsTCk7Yy5yZWFkeSgpfX07KGZ1bmN0aW9uKCl7Yy5zdXBwb3J0PXt9O3ZhciBhPXMuZG9jdW1lbnRFbGVtZW50LGI9cy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxkPXMuY3JlYXRlRWxlbWVudCgiZGl2IiksZj0ic2NyaXB0IitKKCk7ZC5zdHlsZS5kaXNwbGF5PSJub25lIjtkLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0nY29sb3I6cmVkO2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7CnZhciBlPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxqPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighKCFlfHwhZS5sZW5ndGh8fCFqKSl7Yy5zdXBwb3J0PXtsZWFkaW5nV2hpdGVzcGFjZTpkLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovcmVkLy50ZXN0KGouZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDpqLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41NSQvLnRlc3Qoai5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWouc3R5bGUuY3NzRmxvYXQsY2hlY2tPbjpkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLnZhbHVlPT09Im9uIixvcHRTZWxlY3RlZDpzLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKHMuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLnNlbGVjdGVkLApwYXJlbnROb2RlOmQucmVtb3ZlQ2hpbGQoZC5hcHBlbmRDaGlsZChzLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSkucGFyZW50Tm9kZT09PW51bGwsZGVsZXRlRXhwYW5kbzp0cnVlLGNoZWNrQ2xvbmU6ZmFsc2Usc2NyaXB0RXZhbDpmYWxzZSxub0Nsb25lRXZlbnQ6dHJ1ZSxib3hNb2RlbDpudWxsfTtiLnR5cGU9InRleHQvamF2YXNjcmlwdCI7dHJ5e2IuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgid2luZG93LiIrZisiPTE7IikpfWNhdGNoKGkpe31hLmluc2VydEJlZm9yZShiLGEuZmlyc3RDaGlsZCk7aWYoQVtmXSl7Yy5zdXBwb3J0LnNjcmlwdEV2YWw9dHJ1ZTtkZWxldGUgQVtmXX10cnl7ZGVsZXRlIGIudGVzdH1jYXRjaChvKXtjLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz1mYWxzZX1hLnJlbW92ZUNoaWxkKGIpO2lmKGQuYXR0YWNoRXZlbnQmJmQuZmlyZUV2ZW50KXtkLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbiBrKCl7Yy5zdXBwb3J0Lm5vQ2xvbmVFdmVudD0KZmFsc2U7ZC5kZXRhY2hFdmVudCgib25jbGljayIsayl9KTtkLmNsb25lTm9kZSh0cnVlKS5maXJlRXZlbnQoIm9uY2xpY2siKX1kPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0ncmFkaW90ZXN0JyBjaGVja2VkPSdjaGVja2VkJy8+IjthPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2EuYXBwZW5kQ2hpbGQoZC5maXJzdENoaWxkKTtjLnN1cHBvcnQuY2hlY2tDbG9uZT1hLmNsb25lTm9kZSh0cnVlKS5jbG9uZU5vZGUodHJ1ZSkubGFzdENoaWxkLmNoZWNrZWQ7YyhmdW5jdGlvbigpe3ZhciBrPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7ay5zdHlsZS53aWR0aD1rLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiO3MuYm9keS5hcHBlbmRDaGlsZChrKTtjLmJveE1vZGVsPWMuc3VwcG9ydC5ib3hNb2RlbD1rLm9mZnNldFdpZHRoPT09MjtzLmJvZHkucmVtb3ZlQ2hpbGQoaykuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KTthPWZ1bmN0aW9uKGspe3ZhciBuPQpzLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2s9Im9uIitrO3ZhciByPWsgaW4gbjtpZighcil7bi5zZXRBdHRyaWJ1dGUoaywicmV0dXJuOyIpO3I9dHlwZW9mIG5ba109PT0iZnVuY3Rpb24ifXJldHVybiByfTtjLnN1cHBvcnQuc3VibWl0QnViYmxlcz1hKCJzdWJtaXQiKTtjLnN1cHBvcnQuY2hhbmdlQnViYmxlcz1hKCJjaGFuZ2UiKTthPWI9ZD1lPWo9bnVsbH19KSgpO2MucHJvcHM9eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLHJlYWRvbmx5OiJyZWFkT25seSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdGFiaW5kZXg6InRhYkluZGV4Iix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIn07dmFyIEc9ImpRdWVyeSIrSigpLFlhPTAsemE9e307Yy5leHRlbmQoe2NhY2hlOnt9LGV4cGFuZG86Ryxub0RhdGE6e2VtYmVkOnRydWUsb2JqZWN0OnRydWUsCmFwcGxldDp0cnVlfSxkYXRhOmZ1bmN0aW9uKGEsYixkKXtpZighKGEubm9kZU5hbWUmJmMubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pKXthPWE9PUE/emE6YTt2YXIgZj1hW0ddLGU9Yy5jYWNoZTtpZighZiYmdHlwZW9mIGI9PT0ic3RyaW5nIiYmZD09PXcpcmV0dXJuIG51bGw7Znx8KGY9KytZYSk7aWYodHlwZW9mIGI9PT0ib2JqZWN0Iil7YVtHXT1mO2VbZl09Yy5leHRlbmQodHJ1ZSx7fSxiKX1lbHNlIGlmKCFlW2ZdKXthW0ddPWY7ZVtmXT17fX1hPWVbZl07aWYoZCE9PXcpYVtiXT1kO3JldHVybiB0eXBlb2YgYj09PSJzdHJpbmciP2FbYl06YX19LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiKXtpZighKGEubm9kZU5hbWUmJmMubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pKXthPWE9PUE/emE6YTt2YXIgZD1hW0ddLGY9Yy5jYWNoZSxlPWZbZF07aWYoYil7aWYoZSl7ZGVsZXRlIGVbYl07Yy5pc0VtcHR5T2JqZWN0KGUpJiZjLnJlbW92ZURhdGEoYSl9fWVsc2V7aWYoYy5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8pZGVsZXRlIGFbYy5leHBhbmRvXTsKZWxzZSBhLnJlbW92ZUF0dHJpYnV0ZSYmYS5yZW1vdmVBdHRyaWJ1dGUoYy5leHBhbmRvKTtkZWxldGUgZltkXX19fX0pO2MuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGE9PT0idW5kZWZpbmVkIiYmdGhpcy5sZW5ndGgpcmV0dXJuIGMuZGF0YSh0aGlzWzBdKTtlbHNlIGlmKHR5cGVvZiBhPT09Im9iamVjdCIpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2MuZGF0YSh0aGlzLGEpfSk7dmFyIGQ9YS5zcGxpdCgiLiIpO2RbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihiPT09dyl7dmFyIGY9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIrZFsxXSsiISIsW2RbMF1dKTtpZihmPT09dyYmdGhpcy5sZW5ndGgpZj1jLmRhdGEodGhpc1swXSxhKTtyZXR1cm4gZj09PXcmJmRbMV0/dGhpcy5kYXRhKGRbMF0pOmZ9ZWxzZSByZXR1cm4gdGhpcy50cmlnZ2VyKCJzZXREYXRhIitkWzFdKyIhIixbZFswXSxiXSkuZWFjaChmdW5jdGlvbigpe2MuZGF0YSh0aGlzLAphLGIpfSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2MucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSk7Yy5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYixkKXtpZihhKXtiPShifHwiZngiKSsicXVldWUiO3ZhciBmPWMuZGF0YShhLGIpO2lmKCFkKXJldHVybiBmfHxbXTtpZighZnx8Yy5pc0FycmF5KGQpKWY9Yy5kYXRhKGEsYixjLm1ha2VBcnJheShkKSk7ZWxzZSBmLnB1c2goZCk7cmV0dXJuIGZ9fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBkPWMucXVldWUoYSxiKSxmPWQuc2hpZnQoKTtpZihmPT09ImlucHJvZ3Jlc3MiKWY9ZC5zaGlmdCgpO2lmKGYpe2I9PT0iZngiJiZkLnVuc2hpZnQoImlucHJvZ3Jlc3MiKTtmLmNhbGwoYSxmdW5jdGlvbigpe2MuZGVxdWV1ZShhLGIpfSl9fX0pO2MuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhIT09InN0cmluZyIpe2I9YTthPSJmeCJ9aWYoYj09PQp3KXJldHVybiBjLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWMucXVldWUodGhpcyxhLGIpO2E9PT0iZngiJiZkWzBdIT09ImlucHJvZ3Jlc3MiJiZjLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Yy5meD9jLmZ4LnNwZWVkc1thXXx8YTphO2I9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5kZXF1ZXVlKGQsYil9LGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9fSk7dmFyIEFhPS9bXG5cdF0vZyxjYT0vXHMrLyxaYT0vXHIvZywkYT0vaHJlZnxzcmN8c3R5bGUvLGFiPS8oYnV0dG9ufGlucHV0KS9pLGJiPS8oYnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpL2ksCmNiPS9eKGF8YXJlYSkkL2ksQmE9L3JhZGlvfGNoZWNrYm94LztjLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBYKHRoaXMsYSxiLHRydWUsYy5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5hdHRyKHRoaXMsYSwiIik7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGEpfSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciByPWModGhpcyk7ci5hZGRDbGFzcyhhLmNhbGwodGhpcyxuLHIuYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nIilmb3IodmFyIGI9KGF8fCIiKS5zcGxpdChjYSksZD0wLGY9dGhpcy5sZW5ndGg7ZDxmO2QrKyl7dmFyIGU9dGhpc1tkXTtpZihlLm5vZGVUeXBlPT09MSlpZihlLmNsYXNzTmFtZSl7Zm9yKHZhciBqPSIgIitlLmNsYXNzTmFtZSsiICIsCmk9ZS5jbGFzc05hbWUsbz0wLGs9Yi5sZW5ndGg7bzxrO28rKylpZihqLmluZGV4T2YoIiAiK2Jbb10rIiAiKTwwKWkrPSIgIitiW29dO2UuY2xhc3NOYW1lPWMudHJpbShpKX1lbHNlIGUuY2xhc3NOYW1lPWF9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGspe3ZhciBuPWModGhpcyk7bi5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxrLG4uYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nInx8YT09PXcpZm9yKHZhciBiPShhfHwiIikuc3BsaXQoY2EpLGQ9MCxmPXRoaXMubGVuZ3RoO2Q8ZjtkKyspe3ZhciBlPXRoaXNbZF07aWYoZS5ub2RlVHlwZT09PTEmJmUuY2xhc3NOYW1lKWlmKGEpe2Zvcih2YXIgaj0oIiAiK2UuY2xhc3NOYW1lKyIgIikucmVwbGFjZShBYSwiICIpLGk9MCxvPWIubGVuZ3RoO2k8bztpKyspaj1qLnJlcGxhY2UoIiAiK2JbaV0rIiAiLAoiICIpO2UuY2xhc3NOYW1lPWMudHJpbShqKX1lbHNlIGUuY2xhc3NOYW1lPSIifXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBkPXR5cGVvZiBhLGY9dHlwZW9mIGI9PT0iYm9vbGVhbiI7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGo9Yyh0aGlzKTtqLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGUsai5hdHRyKCJjbGFzcyIpLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGQ9PT0ic3RyaW5nIilmb3IodmFyIGUsaj0wLGk9Yyh0aGlzKSxvPWIsaz1hLnNwbGl0KGNhKTtlPWtbaisrXTspe289Zj9vOiFpLmhhc0NsYXNzKGUpO2lbbz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGUpfWVsc2UgaWYoZD09PSJ1bmRlZmluZWQifHxkPT09ImJvb2xlYW4iKXt0aGlzLmNsYXNzTmFtZSYmYy5kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKTt0aGlzLmNsYXNzTmFtZT0KdGhpcy5jbGFzc05hbWV8fGE9PT1mYWxzZT8iIjpjLmRhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn19KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7YT0iICIrYSsiICI7Zm9yKHZhciBiPTAsZD10aGlzLmxlbmd0aDtiPGQ7YisrKWlmKCgiICIrdGhpc1tiXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKEFhLCIgIikuaW5kZXhPZihhKT4tMSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9LHZhbDpmdW5jdGlvbihhKXtpZihhPT09dyl7dmFyIGI9dGhpc1swXTtpZihiKXtpZihjLm5vZGVOYW1lKGIsIm9wdGlvbiIpKXJldHVybihiLmF0dHJpYnV0ZXMudmFsdWV8fHt9KS5zcGVjaWZpZWQ/Yi52YWx1ZTpiLnRleHQ7aWYoYy5ub2RlTmFtZShiLCJzZWxlY3QiKSl7dmFyIGQ9Yi5zZWxlY3RlZEluZGV4LGY9W10sZT1iLm9wdGlvbnM7Yj1iLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoZDwwKXJldHVybiBudWxsO3ZhciBqPWI/ZDowO2ZvcihkPWI/ZCsxOmUubGVuZ3RoO2o8ZDtqKyspe3ZhciBpPQplW2pdO2lmKGkuc2VsZWN0ZWQpe2E9YyhpKS52YWwoKTtpZihiKXJldHVybiBhO2YucHVzaChhKX19cmV0dXJuIGZ9aWYoQmEudGVzdChiLnR5cGUpJiYhYy5zdXBwb3J0LmNoZWNrT24pcmV0dXJuIGIuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmIudmFsdWU7cmV0dXJuKGIudmFsdWV8fCIiKS5yZXBsYWNlKFphLCIiKX1yZXR1cm4gd312YXIgbz1jLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihrKXt2YXIgbj1jKHRoaXMpLHI9YTtpZih0aGlzLm5vZGVUeXBlPT09MSl7aWYobylyPWEuY2FsbCh0aGlzLGssbi52YWwoKSk7aWYodHlwZW9mIHI9PT0ibnVtYmVyIilyKz0iIjtpZihjLmlzQXJyYXkocikmJkJhLnRlc3QodGhpcy50eXBlKSl0aGlzLmNoZWNrZWQ9Yy5pbkFycmF5KG4udmFsKCkscik+PTA7ZWxzZSBpZihjLm5vZGVOYW1lKHRoaXMsInNlbGVjdCIpKXt2YXIgdT1jLm1ha2VBcnJheShyKTtjKCJvcHRpb24iLHRoaXMpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPQpjLmluQXJyYXkoYyh0aGlzKS52YWwoKSx1KT49MH0pO2lmKCF1Lmxlbmd0aCl0aGlzLnNlbGVjdGVkSW5kZXg9LTF9ZWxzZSB0aGlzLnZhbHVlPXJ9fSl9fSk7Yy5leHRlbmQoe2F0dHJGbjp7dmFsOnRydWUsY3NzOnRydWUsaHRtbDp0cnVlLHRleHQ6dHJ1ZSxkYXRhOnRydWUsd2lkdGg6dHJ1ZSxoZWlnaHQ6dHJ1ZSxvZmZzZXQ6dHJ1ZX0sYXR0cjpmdW5jdGlvbihhLGIsZCxmKXtpZighYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04KXJldHVybiB3O2lmKGYmJmIgaW4gYy5hdHRyRm4pcmV0dXJuIGMoYSlbYl0oZCk7Zj1hLm5vZGVUeXBlIT09MXx8IWMuaXNYTUxEb2MoYSk7dmFyIGU9ZCE9PXc7Yj1mJiZjLnByb3BzW2JdfHxiO2lmKGEubm9kZVR5cGU9PT0xKXt2YXIgaj0kYS50ZXN0KGIpO2lmKGIgaW4gYSYmZiYmIWope2lmKGUpe2I9PT0idHlwZSImJmFiLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSYmYy5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIik7CmFbYl09ZH1pZihjLm5vZGVOYW1lKGEsImZvcm0iKSYmYS5nZXRBdHRyaWJ1dGVOb2RlKGIpKXJldHVybiBhLmdldEF0dHJpYnV0ZU5vZGUoYikubm9kZVZhbHVlO2lmKGI9PT0idGFiSW5kZXgiKXJldHVybihiPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiSW5kZXgiKSkmJmIuc3BlY2lmaWVkP2IudmFsdWU6YmIudGVzdChhLm5vZGVOYW1lKXx8Y2IudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6dztyZXR1cm4gYVtiXX1pZighYy5zdXBwb3J0LnN0eWxlJiZmJiZiPT09InN0eWxlIil7aWYoZSlhLnN0eWxlLmNzc1RleHQ9IiIrZDtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fWUmJmEuc2V0QXR0cmlidXRlKGIsIiIrZCk7YT0hYy5zdXBwb3J0LmhyZWZOb3JtYWxpemVkJiZmJiZqP2EuZ2V0QXR0cmlidXRlKGIsMik6YS5nZXRBdHRyaWJ1dGUoYik7cmV0dXJuIGE9PT1udWxsP3c6YX1yZXR1cm4gYy5zdHlsZShhLGIsZCl9fSk7dmFyIE89L1wuKC4qKSQvLGRiPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoL1teXHdcc1wuXHxgXS9nLApmdW5jdGlvbihiKXtyZXR1cm4iXFwiK2J9KX07Yy5ldmVudD17YWRkOmZ1bmN0aW9uKGEsYixkLGYpe2lmKCEoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04KSl7aWYoYS5zZXRJbnRlcnZhbCYmYSE9PUEmJiFhLmZyYW1lRWxlbWVudClhPUE7dmFyIGUsajtpZihkLmhhbmRsZXIpe2U9ZDtkPWUuaGFuZGxlcn1pZighZC5ndWlkKWQuZ3VpZD1jLmd1aWQrKztpZihqPWMuZGF0YShhKSl7dmFyIGk9ai5ldmVudHM9ai5ldmVudHN8fHt9LG89ai5oYW5kbGU7aWYoIW8pai5oYW5kbGU9bz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgYyE9PSJ1bmRlZmluZWQiJiYhYy5ldmVudC50cmlnZ2VyZWQ/Yy5ldmVudC5oYW5kbGUuYXBwbHkoby5lbGVtLGFyZ3VtZW50cyk6d307by5lbGVtPWE7Yj1iLnNwbGl0KCIgIik7Zm9yKHZhciBrLG49MCxyO2s9YltuKytdOyl7aj1lP2MuZXh0ZW5kKHt9LGUpOntoYW5kbGVyOmQsZGF0YTpmfTtpZihrLmluZGV4T2YoIi4iKT4tMSl7cj1rLnNwbGl0KCIuIik7Cms9ci5zaGlmdCgpO2oubmFtZXNwYWNlPXIuc2xpY2UoMCkuc29ydCgpLmpvaW4oIi4iKX1lbHNle3I9W107ai5uYW1lc3BhY2U9IiJ9ai50eXBlPWs7ai5ndWlkPWQuZ3VpZDt2YXIgdT1pW2tdLHo9Yy5ldmVudC5zcGVjaWFsW2tdfHx7fTtpZighdSl7dT1pW2tdPVtdO2lmKCF6LnNldHVwfHx6LnNldHVwLmNhbGwoYSxmLHIsbyk9PT1mYWxzZSlpZihhLmFkZEV2ZW50TGlzdGVuZXIpYS5hZGRFdmVudExpc3RlbmVyKGssbyxmYWxzZSk7ZWxzZSBhLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrayxvKX1pZih6LmFkZCl7ei5hZGQuY2FsbChhLGopO2lmKCFqLmhhbmRsZXIuZ3VpZClqLmhhbmRsZXIuZ3VpZD1kLmd1aWR9dS5wdXNoKGopO2MuZXZlbnQuZ2xvYmFsW2tdPXRydWV9YT1udWxsfX19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGQsZil7aWYoIShhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpKXt2YXIgZSxqPTAsaSxvLGssbixyLHUsej1jLmRhdGEoYSksCkM9eiYmei5ldmVudHM7aWYoeiYmQyl7aWYoYiYmYi50eXBlKXtkPWIuaGFuZGxlcjtiPWIudHlwZX1pZighYnx8dHlwZW9mIGI9PT0ic3RyaW5nIiYmYi5jaGFyQXQoMCk9PT0iLiIpe2I9Ynx8IiI7Zm9yKGUgaW4gQyljLmV2ZW50LnJlbW92ZShhLGUrYil9ZWxzZXtmb3IoYj1iLnNwbGl0KCIgIik7ZT1iW2orK107KXtuPWU7aT1lLmluZGV4T2YoIi4iKTwwO289W107aWYoIWkpe289ZS5zcGxpdCgiLiIpO2U9by5zaGlmdCgpO2s9bmV3IFJlZ0V4cCgiKF58XFwuKSIrYy5tYXAoby5zbGljZSgwKS5zb3J0KCksZGIpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpfWlmKHI9Q1tlXSlpZihkKXtuPWMuZXZlbnQuc3BlY2lhbFtlXXx8e307Zm9yKEI9Znx8MDtCPHIubGVuZ3RoO0IrKyl7dT1yW0JdO2lmKGQuZ3VpZD09PXUuZ3VpZCl7aWYoaXx8ay50ZXN0KHUubmFtZXNwYWNlKSl7Zj09bnVsbCYmci5zcGxpY2UoQi0tLDEpO24ucmVtb3ZlJiZuLnJlbW92ZS5jYWxsKGEsdSl9aWYoZiE9Cm51bGwpYnJlYWt9fWlmKHIubGVuZ3RoPT09MHx8ZiE9bnVsbCYmci5sZW5ndGg9PT0xKXtpZighbi50ZWFyZG93bnx8bi50ZWFyZG93bi5jYWxsKGEsbyk9PT1mYWxzZSlDYShhLGUsei5oYW5kbGUpO2RlbGV0ZSBDW2VdfX1lbHNlIGZvcih2YXIgQj0wO0I8ci5sZW5ndGg7QisrKXt1PXJbQl07aWYoaXx8ay50ZXN0KHUubmFtZXNwYWNlKSl7Yy5ldmVudC5yZW1vdmUoYSxuLHUuaGFuZGxlcixCKTtyLnNwbGljZShCLS0sMSl9fX1pZihjLmlzRW1wdHlPYmplY3QoQykpe2lmKGI9ei5oYW5kbGUpYi5lbGVtPW51bGw7ZGVsZXRlIHouZXZlbnRzO2RlbGV0ZSB6LmhhbmRsZTtjLmlzRW1wdHlPYmplY3QoeikmJmMucmVtb3ZlRGF0YShhKX19fX19LHRyaWdnZXI6ZnVuY3Rpb24oYSxiLGQsZil7dmFyIGU9YS50eXBlfHxhO2lmKCFmKXthPXR5cGVvZiBhPT09Im9iamVjdCI/YVtHXT9hOmMuZXh0ZW5kKGMuRXZlbnQoZSksYSk6Yy5FdmVudChlKTtpZihlLmluZGV4T2YoIiEiKT49MCl7YS50eXBlPQplPWUuc2xpY2UoMCwtMSk7YS5leGNsdXNpdmU9dHJ1ZX1pZighZCl7YS5zdG9wUHJvcGFnYXRpb24oKTtjLmV2ZW50Lmdsb2JhbFtlXSYmYy5lYWNoKGMuY2FjaGUsZnVuY3Rpb24oKXt0aGlzLmV2ZW50cyYmdGhpcy5ldmVudHNbZV0mJmMuZXZlbnQudHJpZ2dlcihhLGIsdGhpcy5oYW5kbGUuZWxlbSl9KX1pZighZHx8ZC5ub2RlVHlwZT09PTN8fGQubm9kZVR5cGU9PT04KXJldHVybiB3O2EucmVzdWx0PXc7YS50YXJnZXQ9ZDtiPWMubWFrZUFycmF5KGIpO2IudW5zaGlmdChhKX1hLmN1cnJlbnRUYXJnZXQ9ZDsoZj1jLmRhdGEoZCwiaGFuZGxlIikpJiZmLmFwcGx5KGQsYik7Zj1kLnBhcmVudE5vZGV8fGQub3duZXJEb2N1bWVudDt0cnl7aWYoIShkJiZkLm5vZGVOYW1lJiZjLm5vRGF0YVtkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSlpZihkWyJvbiIrZV0mJmRbIm9uIitlXS5hcHBseShkLGIpPT09ZmFsc2UpYS5yZXN1bHQ9ZmFsc2V9Y2F0Y2goail7fWlmKCFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJgpmKWMuZXZlbnQudHJpZ2dlcihhLGIsZix0cnVlKTtlbHNlIGlmKCFhLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtmPWEudGFyZ2V0O3ZhciBpLG89Yy5ub2RlTmFtZShmLCJhIikmJmU9PT0iY2xpY2siLGs9Yy5ldmVudC5zcGVjaWFsW2VdfHx7fTtpZigoIWsuX2RlZmF1bHR8fGsuX2RlZmF1bHQuY2FsbChkLGEpPT09ZmFsc2UpJiYhbyYmIShmJiZmLm5vZGVOYW1lJiZjLm5vRGF0YVtmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSl7dHJ5e2lmKGZbZV0pe2lmKGk9Zlsib24iK2VdKWZbIm9uIitlXT1udWxsO2MuZXZlbnQudHJpZ2dlcmVkPXRydWU7ZltlXSgpfX1jYXRjaChuKXt9aWYoaSlmWyJvbiIrZV09aTtjLmV2ZW50LnRyaWdnZXJlZD1mYWxzZX19fSxoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGIsZCxmLGU7YT1hcmd1bWVudHNbMF09Yy5ldmVudC5maXgoYXx8QS5ldmVudCk7YS5jdXJyZW50VGFyZ2V0PXRoaXM7Yj1hLnR5cGUuaW5kZXhPZigiLiIpPDAmJiFhLmV4Y2x1c2l2ZTsKaWYoIWIpe2Q9YS50eXBlLnNwbGl0KCIuIik7YS50eXBlPWQuc2hpZnQoKTtmPW5ldyBSZWdFeHAoIihefFxcLikiK2Quc2xpY2UoMCkuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpfWU9Yy5kYXRhKHRoaXMsImV2ZW50cyIpO2Q9ZVthLnR5cGVdO2lmKGUmJmQpe2Q9ZC5zbGljZSgwKTtlPTA7Zm9yKHZhciBqPWQubGVuZ3RoO2U8ajtlKyspe3ZhciBpPWRbZV07aWYoYnx8Zi50ZXN0KGkubmFtZXNwYWNlKSl7YS5oYW5kbGVyPWkuaGFuZGxlcjthLmRhdGE9aS5kYXRhO2EuaGFuZGxlT2JqPWk7aT1pLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGkhPT13KXthLnJlc3VsdD1pO2lmKGk9PT1mYWxzZSl7YS5wcmV2ZW50RGVmYXVsdCgpO2Euc3RvcFByb3BhZ2F0aW9uKCl9fWlmKGEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVha319fXJldHVybiBhLnJlc3VsdH0scHJvcHM6ImFsdEtleSBhdHRyQ2hhbmdlIGF0dHJOYW1lIGJ1YmJsZXMgYnV0dG9uIGNhbmNlbGFibGUgY2hhckNvZGUgY2xpZW50WCBjbGllbnRZIGN0cmxLZXkgY3VycmVudFRhcmdldCBkYXRhIGRldGFpbCBldmVudFBoYXNlIGZyb21FbGVtZW50IGhhbmRsZXIga2V5Q29kZSBsYXllclggbGF5ZXJZIG1ldGFLZXkgbmV3VmFsdWUgb2Zmc2V0WCBvZmZzZXRZIG9yaWdpbmFsVGFyZ2V0IHBhZ2VYIHBhZ2VZIHByZXZWYWx1ZSByZWxhdGVkTm9kZSByZWxhdGVkVGFyZ2V0IHNjcmVlblggc2NyZWVuWSBzaGlmdEtleSBzcmNFbGVtZW50IHRhcmdldCB0b0VsZW1lbnQgdmlldyB3aGVlbERlbHRhIHdoaWNoIi5zcGxpdCgiICIpLApmaXg6ZnVuY3Rpb24oYSl7aWYoYVtHXSlyZXR1cm4gYTt2YXIgYj1hO2E9Yy5FdmVudChiKTtmb3IodmFyIGQ9dGhpcy5wcm9wcy5sZW5ndGgsZjtkOyl7Zj10aGlzLnByb3BzWy0tZF07YVtmXT1iW2ZdfWlmKCFhLnRhcmdldClhLnRhcmdldD1hLnNyY0VsZW1lbnR8fHM7aWYoYS50YXJnZXQubm9kZVR5cGU9PT0zKWEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGU7aWYoIWEucmVsYXRlZFRhcmdldCYmYS5mcm9tRWxlbWVudClhLnJlbGF0ZWRUYXJnZXQ9YS5mcm9tRWxlbWVudD09PWEudGFyZ2V0P2EudG9FbGVtZW50OmEuZnJvbUVsZW1lbnQ7aWYoYS5wYWdlWD09bnVsbCYmYS5jbGllbnRYIT1udWxsKXtiPXMuZG9jdW1lbnRFbGVtZW50O2Q9cy5ib2R5O2EucGFnZVg9YS5jbGllbnRYKyhiJiZiLnNjcm9sbExlZnR8fGQmJmQuc2Nyb2xsTGVmdHx8MCktKGImJmIuY2xpZW50TGVmdHx8ZCYmZC5jbGllbnRMZWZ0fHwwKTthLnBhZ2VZPWEuY2xpZW50WSsoYiYmYi5zY3JvbGxUb3B8fApkJiZkLnNjcm9sbFRvcHx8MCktKGImJmIuY2xpZW50VG9wfHxkJiZkLmNsaWVudFRvcHx8MCl9aWYoIWEud2hpY2gmJihhLmNoYXJDb2RlfHxhLmNoYXJDb2RlPT09MD9hLmNoYXJDb2RlOmEua2V5Q29kZSkpYS53aGljaD1hLmNoYXJDb2RlfHxhLmtleUNvZGU7aWYoIWEubWV0YUtleSYmYS5jdHJsS2V5KWEubWV0YUtleT1hLmN0cmxLZXk7aWYoIWEud2hpY2gmJmEuYnV0dG9uIT09dylhLndoaWNoPWEuYnV0dG9uJjE/MTphLmJ1dHRvbiYyPzM6YS5idXR0b24mND8yOjA7cmV0dXJuIGF9LGd1aWQ6MUU4LHByb3h5OmMucHJveHksc3BlY2lhbDp7cmVhZHk6e3NldHVwOmMuYmluZFJlYWR5LHRlYXJkb3duOmMubm9vcH0sbGl2ZTp7YWRkOmZ1bmN0aW9uKGEpe2MuZXZlbnQuYWRkKHRoaXMsYS5vcmlnVHlwZSxjLmV4dGVuZCh7fSxhLHtoYW5kbGVyOm9hfSkpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7dmFyIGI9dHJ1ZSxkPWEub3JpZ1R5cGUucmVwbGFjZShPLCIiKTtjLmVhY2goYy5kYXRhKHRoaXMsCiJldmVudHMiKS5saXZlfHxbXSxmdW5jdGlvbigpe2lmKGQ9PT10aGlzLm9yaWdUeXBlLnJlcGxhY2UoTywiIikpcmV0dXJuIGI9ZmFsc2V9KTtiJiZjLmV2ZW50LnJlbW92ZSh0aGlzLGEub3JpZ1R5cGUsb2EpfX0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsZCl7aWYodGhpcy5zZXRJbnRlcnZhbCl0aGlzLm9uYmVmb3JldW5sb2FkPWQ7cmV0dXJuIGZhbHNlfSx0ZWFyZG93bjpmdW5jdGlvbihhLGIpe2lmKHRoaXMub25iZWZvcmV1bmxvYWQ9PT1iKXRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbH19fX07dmFyIENhPXMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsZCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKGIsZCxmYWxzZSl9OmZ1bmN0aW9uKGEsYixkKXthLmRldGFjaEV2ZW50KCJvbiIrYixkKX07Yy5FdmVudD1mdW5jdGlvbihhKXtpZighdGhpcy5wcmV2ZW50RGVmYXVsdClyZXR1cm4gbmV3IGMuRXZlbnQoYSk7aWYoYSYmYS50eXBlKXt0aGlzLm9yaWdpbmFsRXZlbnQ9CmE7dGhpcy50eXBlPWEudHlwZX1lbHNlIHRoaXMudHlwZT1hO3RoaXMudGltZVN0YW1wPUooKTt0aGlzW0ddPXRydWV9O2MuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPVo7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKGEpe2EucHJldmVudERlZmF1bHQmJmEucHJldmVudERlZmF1bHQoKTthLnJldHVyblZhbHVlPWZhbHNlfX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1aO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDtpZihhKXthLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKTthLmNhbmNlbEJ1YmJsZT10cnVlfX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1aO3RoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksCmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOll9O3ZhciBEYT1mdW5jdGlvbihhKXt2YXIgYj1hLnJlbGF0ZWRUYXJnZXQ7dHJ5e2Zvcig7YiYmYiE9PXRoaXM7KWI9Yi5wYXJlbnROb2RlO2lmKGIhPT10aGlzKXthLnR5cGU9YS5kYXRhO2MuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19Y2F0Y2goZCl7fX0sRWE9ZnVuY3Rpb24oYSl7YS50eXBlPWEuZGF0YTtjLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2MuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Yy5ldmVudC5zcGVjaWFsW2FdPXtzZXR1cDpmdW5jdGlvbihkKXtjLmV2ZW50LmFkZCh0aGlzLGIsZCYmZC5zZWxlY3Rvcj9FYTpEYSxhKX0sdGVhcmRvd246ZnVuY3Rpb24oZCl7Yy5ldmVudC5yZW1vdmUodGhpcyxiLGQmJmQuc2VsZWN0b3I/RWE6RGEpfX19KTtpZighYy5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMpYy5ldmVudC5zcGVjaWFsLnN1Ym1pdD0Ke3NldHVwOmZ1bmN0aW9uKCl7aWYodGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09ImZvcm0iKXtjLmV2ZW50LmFkZCh0aGlzLCJjbGljay5zcGVjaWFsU3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxkPWIudHlwZTtpZigoZD09PSJzdWJtaXQifHxkPT09ImltYWdlIikmJmMoYikuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aClyZXR1cm4gbmEoInN1Ym1pdCIsdGhpcyxhcmd1bWVudHMpfSk7Yy5ldmVudC5hZGQodGhpcywia2V5cHJlc3Muc3BlY2lhbFN1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsZD1iLnR5cGU7aWYoKGQ9PT0idGV4dCJ8fGQ9PT0icGFzc3dvcmQiKSYmYyhiKS5jbG9zZXN0KCJmb3JtIikubGVuZ3RoJiZhLmtleUNvZGU9PT0xMylyZXR1cm4gbmEoInN1Ym1pdCIsdGhpcyxhcmd1bWVudHMpfSl9ZWxzZSByZXR1cm4gZmFsc2V9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Yy5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxTdWJtaXQiKX19OwppZighYy5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMpe3ZhciBkYT0vdGV4dGFyZWF8aW5wdXR8c2VsZWN0L2ksZWEsRmE9ZnVuY3Rpb24oYSl7dmFyIGI9YS50eXBlLGQ9YS52YWx1ZTtpZihiPT09InJhZGlvInx8Yj09PSJjaGVja2JveCIpZD1hLmNoZWNrZWQ7ZWxzZSBpZihiPT09InNlbGVjdC1tdWx0aXBsZSIpZD1hLnNlbGVjdGVkSW5kZXg+LTE/Yy5tYXAoYS5vcHRpb25zLGZ1bmN0aW9uKGYpe3JldHVybiBmLnNlbGVjdGVkfSkuam9pbigiLSIpOiIiO2Vsc2UgaWYoYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09InNlbGVjdCIpZD1hLnNlbGVjdGVkSW5kZXg7cmV0dXJuIGR9LGZhPWZ1bmN0aW9uKGEsYil7dmFyIGQ9YS50YXJnZXQsZixlO2lmKCEoIWRhLnRlc3QoZC5ub2RlTmFtZSl8fGQucmVhZE9ubHkpKXtmPWMuZGF0YShkLCJfY2hhbmdlX2RhdGEiKTtlPUZhKGQpO2lmKGEudHlwZSE9PSJmb2N1c291dCJ8fGQudHlwZSE9PSJyYWRpbyIpYy5kYXRhKGQsIl9jaGFuZ2VfZGF0YSIsCmUpO2lmKCEoZj09PXd8fGU9PT1mKSlpZihmIT1udWxsfHxlKXthLnR5cGU9ImNoYW5nZSI7cmV0dXJuIGMuZXZlbnQudHJpZ2dlcihhLGIsZCl9fX07Yy5ldmVudC5zcGVjaWFsLmNoYW5nZT17ZmlsdGVyczp7Zm9jdXNvdXQ6ZmEsY2xpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsZD1iLnR5cGU7aWYoZD09PSJyYWRpbyJ8fGQ9PT0iY2hlY2tib3gifHxiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0ic2VsZWN0IilyZXR1cm4gZmEuY2FsbCh0aGlzLGEpfSxrZXlkb3duOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGQ9Yi50eXBlO2lmKGEua2V5Q29kZT09PTEzJiZiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0idGV4dGFyZWEifHxhLmtleUNvZGU9PT0zMiYmKGQ9PT0iY2hlY2tib3gifHxkPT09InJhZGlvIil8fGQ9PT0ic2VsZWN0LW11bHRpcGxlIilyZXR1cm4gZmEuY2FsbCh0aGlzLGEpfSxiZWZvcmVhY3RpdmF0ZTpmdW5jdGlvbihhKXthPWEudGFyZ2V0O2MuZGF0YShhLAoiX2NoYW5nZV9kYXRhIixGYShhKSl9fSxzZXR1cDpmdW5jdGlvbigpe2lmKHRoaXMudHlwZT09PSJmaWxlIilyZXR1cm4gZmFsc2U7Zm9yKHZhciBhIGluIGVhKWMuZXZlbnQuYWRkKHRoaXMsYSsiLnNwZWNpYWxDaGFuZ2UiLGVhW2FdKTtyZXR1cm4gZGEudGVzdCh0aGlzLm5vZGVOYW1lKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtjLmV2ZW50LnJlbW92ZSh0aGlzLCIuc3BlY2lhbENoYW5nZSIpO3JldHVybiBkYS50ZXN0KHRoaXMubm9kZU5hbWUpfX07ZWE9Yy5ldmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJzfXMuYWRkRXZlbnRMaXN0ZW5lciYmYy5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoZil7Zj1jLmV2ZW50LmZpeChmKTtmLnR5cGU9YjtyZXR1cm4gYy5ldmVudC5oYW5kbGUuY2FsbCh0aGlzLGYpfWMuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYSwKZCx0cnVlKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLHRydWUpfX19KTtjLmVhY2goWyJiaW5kIiwib25lIl0sZnVuY3Rpb24oYSxiKXtjLmZuW2JdPWZ1bmN0aW9uKGQsZixlKXtpZih0eXBlb2YgZD09PSJvYmplY3QiKXtmb3IodmFyIGogaW4gZCl0aGlzW2JdKGosZixkW2pdLGUpO3JldHVybiB0aGlzfWlmKGMuaXNGdW5jdGlvbihmKSl7ZT1mO2Y9d312YXIgaT1iPT09Im9uZSI/Yy5wcm94eShlLGZ1bmN0aW9uKGspe2ModGhpcykudW5iaW5kKGssaSk7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk6ZTtpZihkPT09InVubG9hZCImJmIhPT0ib25lIil0aGlzLm9uZShkLGYsZSk7ZWxzZXtqPTA7Zm9yKHZhciBvPXRoaXMubGVuZ3RoO2o8bztqKyspYy5ldmVudC5hZGQodGhpc1tqXSxkLGksZil9cmV0dXJuIHRoaXN9fSk7Yy5mbi5leHRlbmQoe3VuYmluZDpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhPT09Im9iamVjdCImJgohYS5wcmV2ZW50RGVmYXVsdClmb3IodmFyIGQgaW4gYSl0aGlzLnVuYmluZChkLGFbZF0pO2Vsc2V7ZD0wO2Zvcih2YXIgZj10aGlzLmxlbmd0aDtkPGY7ZCsrKWMuZXZlbnQucmVtb3ZlKHRoaXNbZF0sYSxiKX1yZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGQsZil7cmV0dXJuIHRoaXMubGl2ZShiLGQsZixhKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMudW5iaW5kKCJsaXZlIik6dGhpcy5kaWUoYixudWxsLGQsYSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yy5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe2lmKHRoaXNbMF0pe2E9Yy5FdmVudChhKTthLnByZXZlbnREZWZhdWx0KCk7YS5zdG9wUHJvcGFnYXRpb24oKTtjLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0pO3JldHVybiBhLnJlc3VsdH19LAp0b2dnbGU6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPWFyZ3VtZW50cyxkPTE7ZDxiLmxlbmd0aDspYy5wcm94eShhLGJbZCsrXSk7cmV0dXJuIHRoaXMuY2xpY2soYy5wcm94eShhLGZ1bmN0aW9uKGYpe3ZhciBlPShjLmRhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtjLmRhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGUrMSk7Zi5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiW2VdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ZmFsc2V9KSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pO3ZhciBHYT17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0Iixtb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In07Yy5lYWNoKFsibGl2ZSIsImRpZSJdLGZ1bmN0aW9uKGEsYil7Yy5mbltiXT1mdW5jdGlvbihkLGYsZSxqKXt2YXIgaSxvPTAsayxuLHI9anx8dGhpcy5zZWxlY3RvciwKdT1qP3RoaXM6Yyh0aGlzLmNvbnRleHQpO2lmKGMuaXNGdW5jdGlvbihmKSl7ZT1mO2Y9d31mb3IoZD0oZHx8IiIpLnNwbGl0KCIgIik7KGk9ZFtvKytdKSE9bnVsbDspe2o9Ty5leGVjKGkpO2s9IiI7aWYoail7az1qWzBdO2k9aS5yZXBsYWNlKE8sIiIpfWlmKGk9PT0iaG92ZXIiKWQucHVzaCgibW91c2VlbnRlciIraywibW91c2VsZWF2ZSIrayk7ZWxzZXtuPWk7aWYoaT09PSJmb2N1cyJ8fGk9PT0iYmx1ciIpe2QucHVzaChHYVtpXStrKTtpKz1rfWVsc2UgaT0oR2FbaV18fGkpK2s7Yj09PSJsaXZlIj91LmVhY2goZnVuY3Rpb24oKXtjLmV2ZW50LmFkZCh0aGlzLHBhKGkscikse2RhdGE6ZixzZWxlY3RvcjpyLGhhbmRsZXI6ZSxvcmlnVHlwZTppLG9yaWdIYW5kbGVyOmUscHJlVHlwZTpufSl9KTp1LnVuYmluZChwYShpLHIpLGUpfX1yZXR1cm4gdGhpc319KTtjLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IiLnNwbGl0KCIgIiksCmZ1bmN0aW9uKGEsYil7Yy5mbltiXT1mdW5jdGlvbihkKXtyZXR1cm4gZD90aGlzLmJpbmQoYixkKTp0aGlzLnRyaWdnZXIoYil9O2lmKGMuYXR0ckZuKWMuYXR0ckZuW2JdPXRydWV9KTtBLmF0dGFjaEV2ZW50JiYhQS5hZGRFdmVudExpc3RlbmVyJiZBLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gYy5jYWNoZSlpZihjLmNhY2hlW2FdLmhhbmRsZSl0cnl7Yy5ldmVudC5yZW1vdmUoYy5jYWNoZVthXS5oYW5kbGUuZWxlbSl9Y2F0Y2goYil7fX0pOyhmdW5jdGlvbigpe2Z1bmN0aW9uIGEoZyl7Zm9yKHZhciBoPSIiLGwsbT0wO2dbbV07bSsrKXtsPWdbbV07aWYobC5ub2RlVHlwZT09PTN8fGwubm9kZVR5cGU9PT00KWgrPWwubm9kZVZhbHVlO2Vsc2UgaWYobC5ub2RlVHlwZSE9PTgpaCs9YShsLmNoaWxkTm9kZXMpfXJldHVybiBofWZ1bmN0aW9uIGIoZyxoLGwsbSxxLHApe3E9MDtmb3IodmFyIHY9bS5sZW5ndGg7cTx2O3ErKyl7dmFyIHQ9bVtxXTsKaWYodCl7dD10W2ddO2Zvcih2YXIgeT1mYWxzZTt0Oyl7aWYodC5zaXpjYWNoZT09PWwpe3k9bVt0LnNpenNldF07YnJlYWt9aWYodC5ub2RlVHlwZT09PTEmJiFwKXt0LnNpemNhY2hlPWw7dC5zaXpzZXQ9cX1pZih0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oKXt5PXQ7YnJlYWt9dD10W2ddfW1bcV09eX19fWZ1bmN0aW9uIGQoZyxoLGwsbSxxLHApe3E9MDtmb3IodmFyIHY9bS5sZW5ndGg7cTx2O3ErKyl7dmFyIHQ9bVtxXTtpZih0KXt0PXRbZ107Zm9yKHZhciB5PWZhbHNlO3Q7KXtpZih0LnNpemNhY2hlPT09bCl7eT1tW3Quc2l6c2V0XTticmVha31pZih0Lm5vZGVUeXBlPT09MSl7aWYoIXApe3Quc2l6Y2FjaGU9bDt0LnNpenNldD1xfWlmKHR5cGVvZiBoIT09InN0cmluZyIpe2lmKHQ9PT1oKXt5PXRydWU7YnJlYWt9fWVsc2UgaWYoay5maWx0ZXIoaCxbdF0pLmxlbmd0aD4wKXt5PXQ7YnJlYWt9fXQ9dFtnXX1tW3FdPXl9fX12YXIgZj0vKCg/OlwoKD86XChbXigpXStcKXxbXigpXSspK1wpfFxbKD86XFtbXltcXV0qXF18WyciXVteJyJdKlsnIl18W15bXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZywKZT0wLGo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPWZhbHNlLG89dHJ1ZTtbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7bz1mYWxzZTtyZXR1cm4gMH0pO3ZhciBrPWZ1bmN0aW9uKGcsaCxsLG0pe2w9bHx8W107dmFyIHE9aD1ofHxzO2lmKGgubm9kZVR5cGUhPT0xJiZoLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighZ3x8dHlwZW9mIGchPT0ic3RyaW5nIilyZXR1cm4gbDtmb3IodmFyIHA9W10sdix0LHksUyxIPXRydWUsTT14KGgpLEk9ZzsoZi5leGVjKCIiKSx2PWYuZXhlYyhJKSkhPT1udWxsOyl7ST12WzNdO3AucHVzaCh2WzFdKTtpZih2WzJdKXtTPXZbM107YnJlYWt9fWlmKHAubGVuZ3RoPjEmJnIuZXhlYyhnKSlpZihwLmxlbmd0aD09PTImJm4ucmVsYXRpdmVbcFswXV0pdD1nYShwWzBdK3BbMV0saCk7ZWxzZSBmb3IodD1uLnJlbGF0aXZlW3BbMF1dP1toXTprKHAuc2hpZnQoKSxoKTtwLmxlbmd0aDspe2c9cC5zaGlmdCgpO2lmKG4ucmVsYXRpdmVbZ10pZys9cC5zaGlmdCgpOwp0PWdhKGcsdCl9ZWxzZXtpZighbSYmcC5sZW5ndGg+MSYmaC5ub2RlVHlwZT09PTkmJiFNJiZuLm1hdGNoLklELnRlc3QocFswXSkmJiFuLm1hdGNoLklELnRlc3QocFtwLmxlbmd0aC0xXSkpe3Y9ay5maW5kKHAuc2hpZnQoKSxoLE0pO2g9di5leHByP2suZmlsdGVyKHYuZXhwcix2LnNldClbMF06di5zZXRbMF19aWYoaCl7dj1tP3tleHByOnAucG9wKCksc2V0OnoobSl9OmsuZmluZChwLnBvcCgpLHAubGVuZ3RoPT09MSYmKHBbMF09PT0ifiJ8fHBbMF09PT0iKyIpJiZoLnBhcmVudE5vZGU/aC5wYXJlbnROb2RlOmgsTSk7dD12LmV4cHI/ay5maWx0ZXIodi5leHByLHYuc2V0KTp2LnNldDtpZihwLmxlbmd0aD4wKXk9eih0KTtlbHNlIEg9ZmFsc2U7Zm9yKDtwLmxlbmd0aDspe3ZhciBEPXAucG9wKCk7dj1EO2lmKG4ucmVsYXRpdmVbRF0pdj1wLnBvcCgpO2Vsc2UgRD0iIjtpZih2PT1udWxsKXY9aDtuLnJlbGF0aXZlW0RdKHksdixNKX19ZWxzZSB5PVtdfXl8fCh5PXQpO3l8fGsuZXJyb3IoRHx8CmcpO2lmKGouY2FsbCh5KT09PSJbb2JqZWN0IEFycmF5XSIpaWYoSClpZihoJiZoLm5vZGVUeXBlPT09MSlmb3IoZz0wO3lbZ10hPW51bGw7ZysrKXtpZih5W2ddJiYoeVtnXT09PXRydWV8fHlbZ10ubm9kZVR5cGU9PT0xJiZFKGgseVtnXSkpKWwucHVzaCh0W2ddKX1lbHNlIGZvcihnPTA7eVtnXSE9bnVsbDtnKyspeVtnXSYmeVtnXS5ub2RlVHlwZT09PTEmJmwucHVzaCh0W2ddKTtlbHNlIGwucHVzaC5hcHBseShsLHkpO2Vsc2Ugeih5LGwpO2lmKFMpe2soUyxxLGwsbSk7ay51bmlxdWVTb3J0KGwpfXJldHVybiBsfTtrLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZyl7aWYoQil7aT1vO2cuc29ydChCKTtpZihpKWZvcih2YXIgaD0xO2g8Zy5sZW5ndGg7aCsrKWdbaF09PT1nW2gtMV0mJmcuc3BsaWNlKGgtLSwxKX1yZXR1cm4gZ307ay5tYXRjaGVzPWZ1bmN0aW9uKGcsaCl7cmV0dXJuIGsoZyxudWxsLG51bGwsaCl9O2suZmluZD1mdW5jdGlvbihnLGgsbCl7dmFyIG0scTtpZighZylyZXR1cm5bXTsKZm9yKHZhciBwPTAsdj1uLm9yZGVyLmxlbmd0aDtwPHY7cCsrKXt2YXIgdD1uLm9yZGVyW3BdO2lmKHE9bi5sZWZ0TWF0Y2hbdF0uZXhlYyhnKSl7dmFyIHk9cVsxXTtxLnNwbGljZSgxLDEpO2lmKHkuc3Vic3RyKHkubGVuZ3RoLTEpIT09IlxcIil7cVsxXT0ocVsxXXx8IiIpLnJlcGxhY2UoL1xcL2csIiIpO209bi5maW5kW3RdKHEsaCxsKTtpZihtIT1udWxsKXtnPWcucmVwbGFjZShuLm1hdGNoW3RdLCIiKTticmVha319fX1tfHwobT1oLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3JldHVybntzZXQ6bSxleHByOmd9fTtrLmZpbHRlcj1mdW5jdGlvbihnLGgsbCxtKXtmb3IodmFyIHE9ZyxwPVtdLHY9aCx0LHksUz1oJiZoWzBdJiZ4KGhbMF0pO2cmJmgubGVuZ3RoOyl7Zm9yKHZhciBIIGluIG4uZmlsdGVyKWlmKCh0PW4ubGVmdE1hdGNoW0hdLmV4ZWMoZykpIT1udWxsJiZ0WzJdKXt2YXIgTT1uLmZpbHRlcltIXSxJLEQ7RD10WzFdO3k9ZmFsc2U7dC5zcGxpY2UoMSwxKTtpZihELnN1YnN0cihELmxlbmd0aC0KMSkhPT0iXFwiKXtpZih2PT09cClwPVtdO2lmKG4ucHJlRmlsdGVyW0hdKWlmKHQ9bi5wcmVGaWx0ZXJbSF0odCx2LGwscCxtLFMpKXtpZih0PT09dHJ1ZSljb250aW51ZX1lbHNlIHk9ST10cnVlO2lmKHQpZm9yKHZhciBVPTA7KEQ9dltVXSkhPW51bGw7VSsrKWlmKEQpe0k9TShELHQsVSx2KTt2YXIgSGE9bV4hIUk7aWYobCYmSSE9bnVsbClpZihIYSl5PXRydWU7ZWxzZSB2W1VdPWZhbHNlO2Vsc2UgaWYoSGEpe3AucHVzaChEKTt5PXRydWV9fWlmKEkhPT13KXtsfHwodj1wKTtnPWcucmVwbGFjZShuLm1hdGNoW0hdLCIiKTtpZigheSlyZXR1cm5bXTticmVha319fWlmKGc9PT1xKWlmKHk9PW51bGwpay5lcnJvcihnKTtlbHNlIGJyZWFrO3E9Z31yZXR1cm4gdn07ay5lcnJvcj1mdW5jdGlvbihnKXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2c7fTt2YXIgbj1rLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKS8sCkNMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRi1dfFxcLikrKVsnIl0qXF0vLEFUVFI6L1xbXHMqKCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKylccyooPzooXFM/PSlccyooWyciXSopKC4qPylcM3wpXHMqXF0vLFRBRzovXigoPzpbXHdcdTAwYzAtXHVGRkZGXCotXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XCgoZXZlbnxvZGR8W1xkbistXSopXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W14tXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkYtXXxcXC4pKykoPzpcKChbJyJdPykoKD86XChbXlwpXStcKXxbXlwoXCldKikrKVwyXCkpPy99LGxlZnRNYXRjaDp7fSxhdHRyTWFwOnsiY2xhc3MiOiJjbGFzc05hbWUiLCJmb3IiOiJodG1sRm9yIn0sYXR0ckhhbmRsZTp7aHJlZjpmdW5jdGlvbihnKXtyZXR1cm4gZy5nZXRBdHRyaWJ1dGUoImhyZWYiKX19LApyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGcsaCl7dmFyIGw9dHlwZW9mIGg9PT0ic3RyaW5nIixtPWwmJiEvXFcvLnRlc3QoaCk7bD1sJiYhbTtpZihtKWg9aC50b0xvd2VyQ2FzZSgpO209MDtmb3IodmFyIHE9Zy5sZW5ndGgscDttPHE7bSsrKWlmKHA9Z1ttXSl7Zm9yKDsocD1wLnByZXZpb3VzU2libGluZykmJnAubm9kZVR5cGUhPT0xOyk7Z1ttXT1sfHxwJiZwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oP3B8fGZhbHNlOnA9PT1ofWwmJmsuZmlsdGVyKGgsZyx0cnVlKX0sIj4iOmZ1bmN0aW9uKGcsaCl7dmFyIGw9dHlwZW9mIGg9PT0ic3RyaW5nIjtpZihsJiYhL1xXLy50ZXN0KGgpKXtoPWgudG9Mb3dlckNhc2UoKTtmb3IodmFyIG09MCxxPWcubGVuZ3RoO208cTttKyspe3ZhciBwPWdbbV07aWYocCl7bD1wLnBhcmVudE5vZGU7Z1ttXT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oP2w6ZmFsc2V9fX1lbHNle209MDtmb3IocT1nLmxlbmd0aDttPHE7bSsrKWlmKHA9Z1ttXSlnW21dPQpsP3AucGFyZW50Tm9kZTpwLnBhcmVudE5vZGU9PT1oO2wmJmsuZmlsdGVyKGgsZyx0cnVlKX19LCIiOmZ1bmN0aW9uKGcsaCxsKXt2YXIgbT1lKysscT1kO2lmKHR5cGVvZiBoPT09InN0cmluZyImJiEvXFcvLnRlc3QoaCkpe3ZhciBwPWg9aC50b0xvd2VyQ2FzZSgpO3E9Yn1xKCJwYXJlbnROb2RlIixoLG0sZyxwLGwpfSwifiI6ZnVuY3Rpb24oZyxoLGwpe3ZhciBtPWUrKyxxPWQ7aWYodHlwZW9mIGg9PT0ic3RyaW5nIiYmIS9cVy8udGVzdChoKSl7dmFyIHA9aD1oLnRvTG93ZXJDYXNlKCk7cT1ifXEoInByZXZpb3VzU2libGluZyIsaCxtLGcscCxsKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGcsaCxsKXtpZih0eXBlb2YgaC5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhbClyZXR1cm4oZz1oLmdldEVsZW1lbnRCeUlkKGdbMV0pKT9bZ106W119LE5BTUU6ZnVuY3Rpb24oZyxoKXtpZih0eXBlb2YgaC5nZXRFbGVtZW50c0J5TmFtZSE9PSJ1bmRlZmluZWQiKXt2YXIgbD1bXTsKaD1oLmdldEVsZW1lbnRzQnlOYW1lKGdbMV0pO2Zvcih2YXIgbT0wLHE9aC5sZW5ndGg7bTxxO20rKyloW21dLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09Z1sxXSYmbC5wdXNoKGhbbV0pO3JldHVybiBsLmxlbmd0aD09PTA/bnVsbDpsfX0sVEFHOmZ1bmN0aW9uKGcsaCl7cmV0dXJuIGguZ2V0RWxlbWVudHNCeVRhZ05hbWUoZ1sxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKGcsaCxsLG0scSxwKXtnPSIgIitnWzFdLnJlcGxhY2UoL1xcL2csIiIpKyIgIjtpZihwKXJldHVybiBnO3A9MDtmb3IodmFyIHY7KHY9aFtwXSkhPW51bGw7cCsrKWlmKHYpaWYocV4odi5jbGFzc05hbWUmJigiICIrdi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcbl0vZywiICIpLmluZGV4T2YoZyk+PTApKWx8fG0ucHVzaCh2KTtlbHNlIGlmKGwpaFtwXT1mYWxzZTtyZXR1cm4gZmFsc2V9LElEOmZ1bmN0aW9uKGcpe3JldHVybiBnWzFdLnJlcGxhY2UoL1xcL2csIiIpfSxUQUc6ZnVuY3Rpb24oZyl7cmV0dXJuIGdbMV0udG9Mb3dlckNhc2UoKX0sCkNISUxEOmZ1bmN0aW9uKGcpe2lmKGdbMV09PT0ibnRoIil7dmFyIGg9LygtPykoXGQqKW4oKD86XCt8LSk/XGQqKS8uZXhlYyhnWzJdPT09ImV2ZW4iJiYiMm4ifHxnWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChnWzJdKSYmIjBuKyIrZ1syXXx8Z1syXSk7Z1syXT1oWzFdKyhoWzJdfHwxKS0wO2dbM109aFszXS0wfWdbMF09ZSsrO3JldHVybiBnfSxBVFRSOmZ1bmN0aW9uKGcsaCxsLG0scSxwKXtoPWdbMV0ucmVwbGFjZSgvXFwvZywiIik7aWYoIXAmJm4uYXR0ck1hcFtoXSlnWzFdPW4uYXR0ck1hcFtoXTtpZihnWzJdPT09In49IilnWzRdPSIgIitnWzRdKyIgIjtyZXR1cm4gZ30sUFNFVURPOmZ1bmN0aW9uKGcsaCxsLG0scSl7aWYoZ1sxXT09PSJub3QiKWlmKChmLmV4ZWMoZ1szXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChnWzNdKSlnWzNdPWsoZ1szXSxudWxsLG51bGwsaCk7ZWxzZXtnPWsuZmlsdGVyKGdbM10saCxsLHRydWVecSk7bHx8bS5wdXNoLmFwcGx5KG0sCmcpO3JldHVybiBmYWxzZX1lbHNlIGlmKG4ubWF0Y2guUE9TLnRlc3QoZ1swXSl8fG4ubWF0Y2guQ0hJTEQudGVzdChnWzBdKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZ30sUE9TOmZ1bmN0aW9uKGcpe2cudW5zaGlmdCh0cnVlKTtyZXR1cm4gZ319LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuZGlzYWJsZWQ9PT1mYWxzZSYmZy50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGcpe3JldHVybiBnLmRpc2FibGVkPT09dHJ1ZX0sY2hlY2tlZDpmdW5jdGlvbihnKXtyZXR1cm4gZy5jaGVja2VkPT09dHJ1ZX0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuc2VsZWN0ZWQ9PT10cnVlfSxwYXJlbnQ6ZnVuY3Rpb24oZyl7cmV0dXJuISFnLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGcpe3JldHVybiFnLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihnLGgsbCl7cmV0dXJuISFrKGxbM10sZykubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oZyl7cmV0dXJuL2hcZC9pLnRlc3QoZy5ub2RlTmFtZSl9LAp0ZXh0OmZ1bmN0aW9uKGcpe3JldHVybiJ0ZXh0Ij09PWcudHlwZX0scmFkaW86ZnVuY3Rpb24oZyl7cmV0dXJuInJhZGlvIj09PWcudHlwZX0sY2hlY2tib3g6ZnVuY3Rpb24oZyl7cmV0dXJuImNoZWNrYm94Ij09PWcudHlwZX0sZmlsZTpmdW5jdGlvbihnKXtyZXR1cm4iZmlsZSI9PT1nLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKGcpe3JldHVybiJwYXNzd29yZCI9PT1nLnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihnKXtyZXR1cm4ic3VibWl0Ij09PWcudHlwZX0saW1hZ2U6ZnVuY3Rpb24oZyl7cmV0dXJuImltYWdlIj09PWcudHlwZX0scmVzZXQ6ZnVuY3Rpb24oZyl7cmV0dXJuInJlc2V0Ij09PWcudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGcpe3JldHVybiJidXR0b24iPT09Zy50eXBlfHxnLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oZyl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KGcubm9kZU5hbWUpfX0sCnNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGcsaCl7cmV0dXJuIGg9PT0wfSxsYXN0OmZ1bmN0aW9uKGcsaCxsLG0pe3JldHVybiBoPT09bS5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihnLGgpe3JldHVybiBoJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gaCUyPT09MX0sbHQ6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBoPGxbM10tMH0sZ3Q6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBoPmxbM10tMH0sbnRoOmZ1bmN0aW9uKGcsaCxsKXtyZXR1cm4gbFszXS0wPT09aH0sZXE6ZnVuY3Rpb24oZyxoLGwpe3JldHVybiBsWzNdLTA9PT1ofX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oZyxoLGwsbSl7dmFyIHE9aFsxXSxwPW4uZmlsdGVyc1txXTtpZihwKXJldHVybiBwKGcsbCxoLG0pO2Vsc2UgaWYocT09PSJjb250YWlucyIpcmV0dXJuKGcudGV4dENvbnRlbnR8fGcuaW5uZXJUZXh0fHxhKFtnXSl8fCIiKS5pbmRleE9mKGhbM10pPj0wO2Vsc2UgaWYocT09PSJub3QiKXtoPQpoWzNdO2w9MDtmb3IobT1oLmxlbmd0aDtsPG07bCsrKWlmKGhbbF09PT1nKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZX1lbHNlIGsuZXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrcSl9LENISUxEOmZ1bmN0aW9uKGcsaCl7dmFyIGw9aFsxXSxtPWc7c3dpdGNoKGwpe2Nhc2UgIm9ubHkiOmNhc2UgImZpcnN0Ijpmb3IoO209bS5wcmV2aW91c1NpYmxpbmc7KWlmKG0ubm9kZVR5cGU9PT0xKXJldHVybiBmYWxzZTtpZihsPT09ImZpcnN0IilyZXR1cm4gdHJ1ZTttPWc7Y2FzZSAibGFzdCI6Zm9yKDttPW0ubmV4dFNpYmxpbmc7KWlmKG0ubm9kZVR5cGU9PT0xKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZTtjYXNlICJudGgiOmw9aFsyXTt2YXIgcT1oWzNdO2lmKGw9PT0xJiZxPT09MClyZXR1cm4gdHJ1ZTtoPWhbMF07dmFyIHA9Zy5wYXJlbnROb2RlO2lmKHAmJihwLnNpemNhY2hlIT09aHx8IWcubm9kZUluZGV4KSl7dmFyIHY9MDtmb3IobT1wLmZpcnN0Q2hpbGQ7bTttPQptLm5leHRTaWJsaW5nKWlmKG0ubm9kZVR5cGU9PT0xKW0ubm9kZUluZGV4PSsrdjtwLnNpemNhY2hlPWh9Zz1nLm5vZGVJbmRleC1xO3JldHVybiBsPT09MD9nPT09MDpnJWw9PT0wJiZnL2w+PTB9fSxJRDpmdW5jdGlvbihnLGgpe3JldHVybiBnLm5vZGVUeXBlPT09MSYmZy5nZXRBdHRyaWJ1dGUoImlkIik9PT1ofSxUQUc6ZnVuY3Rpb24oZyxoKXtyZXR1cm4gaD09PSIqIiYmZy5ub2RlVHlwZT09PTF8fGcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWh9LENMQVNTOmZ1bmN0aW9uKGcsaCl7cmV0dXJuKCIgIisoZy5jbGFzc05hbWV8fGcuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoaCk+LTF9LEFUVFI6ZnVuY3Rpb24oZyxoKXt2YXIgbD1oWzFdO2c9bi5hdHRySGFuZGxlW2xdP24uYXR0ckhhbmRsZVtsXShnKTpnW2xdIT1udWxsP2dbbF06Zy5nZXRBdHRyaWJ1dGUobCk7bD1nKyIiO3ZhciBtPWhbMl07aD1oWzRdO3JldHVybiBnPT1udWxsP209PT0iIT0iOm09PT0KIj0iP2w9PT1oOm09PT0iKj0iP2wuaW5kZXhPZihoKT49MDptPT09In49Ij8oIiAiK2wrIiAiKS5pbmRleE9mKGgpPj0wOiFoP2wmJmchPT1mYWxzZTptPT09IiE9Ij9sIT09aDptPT09Il49Ij9sLmluZGV4T2YoaCk9PT0wOm09PT0iJD0iP2wuc3Vic3RyKGwubGVuZ3RoLWgubGVuZ3RoKT09PWg6bT09PSJ8PSI/bD09PWh8fGwuc3Vic3RyKDAsaC5sZW5ndGgrMSk9PT1oKyItIjpmYWxzZX0sUE9TOmZ1bmN0aW9uKGcsaCxsLG0pe3ZhciBxPW4uc2V0RmlsdGVyc1toWzJdXTtpZihxKXJldHVybiBxKGcsbCxoLG0pfX19LHI9bi5tYXRjaC5QT1M7Zm9yKHZhciB1IGluIG4ubWF0Y2gpe24ubWF0Y2hbdV09bmV3IFJlZ0V4cChuLm1hdGNoW3VdLnNvdXJjZSsvKD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpO24ubGVmdE1hdGNoW3VdPW5ldyBSZWdFeHAoLyheKD86LnxccnxcbikqPykvLnNvdXJjZStuLm1hdGNoW3VdLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csZnVuY3Rpb24oZywKaCl7cmV0dXJuIlxcIisoaC0wKzEpfSkpfXZhciB6PWZ1bmN0aW9uKGcsaCl7Zz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChnLDApO2lmKGgpe2gucHVzaC5hcHBseShoLGcpO3JldHVybiBofXJldHVybiBnfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKX1jYXRjaChDKXt6PWZ1bmN0aW9uKGcsaCl7aD1ofHxbXTtpZihqLmNhbGwoZyk9PT0iW29iamVjdCBBcnJheV0iKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGgsZyk7ZWxzZSBpZih0eXBlb2YgZy5sZW5ndGg9PT0ibnVtYmVyIilmb3IodmFyIGw9MCxtPWcubGVuZ3RoO2w8bTtsKyspaC5wdXNoKGdbbF0pO2Vsc2UgZm9yKGw9MDtnW2xdO2wrKyloLnB1c2goZ1tsXSk7cmV0dXJuIGh9fXZhciBCO2lmKHMuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKUI9ZnVuY3Rpb24oZyxoKXtpZighZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8CiFoLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtpZihnPT1oKWk9dHJ1ZTtyZXR1cm4gZy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxfWc9Zy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihoKSY0Py0xOmc9PT1oPzA6MTtpZihnPT09MClpPXRydWU7cmV0dXJuIGd9O2Vsc2UgaWYoInNvdXJjZUluZGV4ImluIHMuZG9jdW1lbnRFbGVtZW50KUI9ZnVuY3Rpb24oZyxoKXtpZighZy5zb3VyY2VJbmRleHx8IWguc291cmNlSW5kZXgpe2lmKGc9PWgpaT10cnVlO3JldHVybiBnLnNvdXJjZUluZGV4Py0xOjF9Zz1nLnNvdXJjZUluZGV4LWguc291cmNlSW5kZXg7aWYoZz09PTApaT10cnVlO3JldHVybiBnfTtlbHNlIGlmKHMuY3JlYXRlUmFuZ2UpQj1mdW5jdGlvbihnLGgpe2lmKCFnLm93bmVyRG9jdW1lbnR8fCFoLm93bmVyRG9jdW1lbnQpe2lmKGc9PWgpaT10cnVlO3JldHVybiBnLm93bmVyRG9jdW1lbnQ/LTE6MX12YXIgbD1nLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSxtPQpoLm93bmVyRG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtsLnNldFN0YXJ0KGcsMCk7bC5zZXRFbmQoZywwKTttLnNldFN0YXJ0KGgsMCk7bS5zZXRFbmQoaCwwKTtnPWwuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlLlNUQVJUX1RPX0VORCxtKTtpZihnPT09MClpPXRydWU7cmV0dXJuIGd9OyhmdW5jdGlvbigpe3ZhciBnPXMuY3JlYXRlRWxlbWVudCgiZGl2IiksaD0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKTtnLmlubmVySFRNTD0iPGEgbmFtZT0nIitoKyInLz4iO3ZhciBsPXMuZG9jdW1lbnRFbGVtZW50O2wuaW5zZXJ0QmVmb3JlKGcsbC5maXJzdENoaWxkKTtpZihzLmdldEVsZW1lbnRCeUlkKGgpKXtuLmZpbmQuSUQ9ZnVuY3Rpb24obSxxLHApe2lmKHR5cGVvZiBxLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFwKXJldHVybihxPXEuZ2V0RWxlbWVudEJ5SWQobVsxXSkpP3EuaWQ9PT1tWzFdfHx0eXBlb2YgcS5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJgpxLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09bVsxXT9bcV06dzpbXX07bi5maWx0ZXIuSUQ9ZnVuY3Rpb24obSxxKXt2YXIgcD10eXBlb2YgbS5nZXRBdHRyaWJ1dGVOb2RlIT09InVuZGVmaW5lZCImJm0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbS5ub2RlVHlwZT09PTEmJnAmJnAubm9kZVZhbHVlPT09cX19bC5yZW1vdmVDaGlsZChnKTtsPWc9bnVsbH0pKCk7KGZ1bmN0aW9uKCl7dmFyIGc9cy5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmFwcGVuZENoaWxkKHMuY3JlYXRlQ29tbWVudCgiIikpO2lmKGcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCluLmZpbmQuVEFHPWZ1bmN0aW9uKGgsbCl7bD1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKGhbMV0pO2lmKGhbMV09PT0iKiIpe2g9W107Zm9yKHZhciBtPTA7bFttXTttKyspbFttXS5ub2RlVHlwZT09PTEmJmgucHVzaChsW21dKTtsPWh9cmV0dXJuIGx9O2cuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IjsKaWYoZy5maXJzdENoaWxkJiZ0eXBlb2YgZy5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PSJ1bmRlZmluZWQiJiZnLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIikhPT0iIyIpbi5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oaCl7cmV0dXJuIGguZ2V0QXR0cmlidXRlKCJocmVmIiwyKX07Zz1udWxsfSkoKTtzLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGc9ayxoPXMuY3JlYXRlRWxlbWVudCgiZGl2Iik7aC5pbm5lckhUTUw9IjxwIGNsYXNzPSdURVNUJz48L3A+IjtpZighKGgucXVlcnlTZWxlY3RvckFsbCYmaC5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aD09PTApKXtrPWZ1bmN0aW9uKG0scSxwLHYpe3E9cXx8cztpZighdiYmcS5ub2RlVHlwZT09PTkmJiF4KHEpKXRyeXtyZXR1cm4geihxLnF1ZXJ5U2VsZWN0b3JBbGwobSkscCl9Y2F0Y2godCl7fXJldHVybiBnKG0scSxwLHYpfTtmb3IodmFyIGwgaW4gZylrW2xdPWdbbF07aD1udWxsfX0oKTsKKGZ1bmN0aW9uKCl7dmFyIGc9cy5jcmVhdGVFbGVtZW50KCJkaXYiKTtnLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEoIWcuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8Zy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MCkpe2cubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoZy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoIT09MSl7bi5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpO24uZmluZC5DTEFTUz1mdW5jdGlvbihoLGwsbSl7aWYodHlwZW9mIGwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PSJ1bmRlZmluZWQiJiYhbSlyZXR1cm4gbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGhbMV0pfTtnPW51bGx9fX0pKCk7dmFyIEU9cy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihnLGgpe3JldHVybiEhKGcuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaCkmMTYpfToKZnVuY3Rpb24oZyxoKXtyZXR1cm4gZyE9PWgmJihnLmNvbnRhaW5zP2cuY29udGFpbnMoaCk6dHJ1ZSl9LHg9ZnVuY3Rpb24oZyl7cmV0dXJuKGc9KGc/Zy5vd25lckRvY3VtZW50fHxnOjApLmRvY3VtZW50RWxlbWVudCk/Zy5ub2RlTmFtZSE9PSJIVE1MIjpmYWxzZX0sZ2E9ZnVuY3Rpb24oZyxoKXt2YXIgbD1bXSxtPSIiLHE7Zm9yKGg9aC5ub2RlVHlwZT9baF06aDtxPW4ubWF0Y2guUFNFVURPLmV4ZWMoZyk7KXttKz1xWzBdO2c9Zy5yZXBsYWNlKG4ubWF0Y2guUFNFVURPLCIiKX1nPW4ucmVsYXRpdmVbZ10/ZysiKiI6ZztxPTA7Zm9yKHZhciBwPWgubGVuZ3RoO3E8cDtxKyspayhnLGhbcV0sbCk7cmV0dXJuIGsuZmlsdGVyKG0sbCl9O2MuZmluZD1rO2MuZXhwcj1rLnNlbGVjdG9ycztjLmV4cHJbIjoiXT1jLmV4cHIuZmlsdGVycztjLnVuaXF1ZT1rLnVuaXF1ZVNvcnQ7Yy50ZXh0PWE7Yy5pc1hNTERvYz14O2MuY29udGFpbnM9RX0pKCk7dmFyIGViPS9VbnRpbCQvLGZiPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLApnYj0vLC87Uj1BcnJheS5wcm90b3R5cGUuc2xpY2U7dmFyIElhPWZ1bmN0aW9uKGEsYixkKXtpZihjLmlzRnVuY3Rpb24oYikpcmV0dXJuIGMuZ3JlcChhLGZ1bmN0aW9uKGUsail7cmV0dXJuISFiLmNhbGwoZSxqLGUpPT09ZH0pO2Vsc2UgaWYoYi5ub2RlVHlwZSlyZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1iPT09ZH0pO2Vsc2UgaWYodHlwZW9mIGI9PT0ic3RyaW5nIil7dmFyIGY9Yy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU9PT0xfSk7aWYoVWEudGVzdChiKSlyZXR1cm4gYy5maWx0ZXIoYixmLCFkKTtlbHNlIGI9Yy5maWx0ZXIoYixmKX1yZXR1cm4gYy5ncmVwKGEsZnVuY3Rpb24oZSl7cmV0dXJuIGMuaW5BcnJheShlLGIpPj0wPT09ZH0pfTtjLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGQ9MCxmPTAsZT10aGlzLmxlbmd0aDtmPGU7ZisrKXtkPWIubGVuZ3RoOwpjLmZpbmQoYSx0aGlzW2ZdLGIpO2lmKGY+MClmb3IodmFyIGo9ZDtqPGIubGVuZ3RoO2orKylmb3IodmFyIGk9MDtpPGQ7aSsrKWlmKGJbaV09PT1iW2pdKXtiLnNwbGljZShqLS0sMSk7YnJlYWt9fXJldHVybiBifSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9YyhhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGQ9MCxmPWIubGVuZ3RoO2Q8ZjtkKyspaWYoYy5jb250YWlucyh0aGlzLGJbZF0pKXJldHVybiB0cnVlfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soSWEodGhpcyxhLGZhbHNlKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhJYSh0aGlzLGEsdHJ1ZSksImZpbHRlciIsYSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhYSYmYy5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MH0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2lmKGMuaXNBcnJheShhKSl7dmFyIGQ9W10sZj10aGlzWzBdLGUsaj0Ke30saTtpZihmJiZhLmxlbmd0aCl7ZT0wO2Zvcih2YXIgbz1hLmxlbmd0aDtlPG87ZSsrKXtpPWFbZV07altpXXx8KGpbaV09Yy5leHByLm1hdGNoLlBPUy50ZXN0KGkpP2MoaSxifHx0aGlzLmNvbnRleHQpOmkpfWZvcig7ZiYmZi5vd25lckRvY3VtZW50JiZmIT09Yjspe2ZvcihpIGluIGope2U9altpXTtpZihlLmpxdWVyeT9lLmluZGV4KGYpPi0xOmMoZikuaXMoZSkpe2QucHVzaCh7c2VsZWN0b3I6aSxlbGVtOmZ9KTtkZWxldGUgaltpXX19Zj1mLnBhcmVudE5vZGV9fXJldHVybiBkfXZhciBrPWMuZXhwci5tYXRjaC5QT1MudGVzdChhKT9jKGEsYnx8dGhpcy5jb250ZXh0KTpudWxsO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbihuLHIpe2Zvcig7ciYmci5vd25lckRvY3VtZW50JiZyIT09Yjspe2lmKGs/ay5pbmRleChyKT4tMTpjKHIpLmlzKGEpKXJldHVybiByO3I9ci5wYXJlbnROb2RlfXJldHVybiBudWxsfSl9LGluZGV4OmZ1bmN0aW9uKGEpe2lmKCFhfHx0eXBlb2YgYT09PQoic3RyaW5nIilyZXR1cm4gYy5pbkFycmF5KHRoaXNbMF0sYT9jKGEpOnRoaXMucGFyZW50KCkuY2hpbGRyZW4oKSk7cmV0dXJuIGMuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFkZDpmdW5jdGlvbihhLGIpe2E9dHlwZW9mIGE9PT0ic3RyaW5nIj9jKGEsYnx8dGhpcy5jb250ZXh0KTpjLm1ha2VBcnJheShhKTtiPWMubWVyZ2UodGhpcy5nZXQoKSxhKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socWEoYVswXSl8fHFhKGJbMF0pP2I6Yy51bmlxdWUoYikpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9fSk7Yy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuKGE9YS5wYXJlbnROb2RlKSYmYS5ub2RlVHlwZSE9PTExP2E6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBjLmRpcihhLCJwYXJlbnROb2RlIiwKZCl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGMubnRoKGEsMiwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gYy5udGgoYSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGMuZGlyKGEsIm5leHRTaWJsaW5nIixkKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixkKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLnBhcmVudE5vZGUuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGMuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYy5ub2RlTmFtZShhLCJpZnJhbWUiKT8KYS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpjLm1ha2VBcnJheShhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtjLmZuW2FdPWZ1bmN0aW9uKGQsZil7dmFyIGU9Yy5tYXAodGhpcyxiLGQpO2ViLnRlc3QoYSl8fChmPWQpO2lmKGYmJnR5cGVvZiBmPT09InN0cmluZyIpZT1jLmZpbHRlcihmLGUpO2U9dGhpcy5sZW5ndGg+MT9jLnVuaXF1ZShlKTplO2lmKCh0aGlzLmxlbmd0aD4xfHxnYi50ZXN0KGYpKSYmZmIudGVzdChhKSllPWUucmV2ZXJzZSgpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsUi5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KTtjLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixkKXtpZihkKWE9Ijpub3QoIithKyIpIjtyZXR1cm4gYy5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYixkKXt2YXIgZj1bXTtmb3IoYT1hW2JdO2EmJmEubm9kZVR5cGUhPT05JiYoZD09PXd8fGEubm9kZVR5cGUhPT0xfHwhYyhhKS5pcyhkKSk7KXthLm5vZGVUeXBlPT09CjEmJmYucHVzaChhKTthPWFbYl19cmV0dXJuIGZ9LG50aDpmdW5jdGlvbihhLGIsZCl7Yj1ifHwxO2Zvcih2YXIgZj0wO2E7YT1hW2RdKWlmKGEubm9kZVR5cGU9PT0xJiYrK2Y9PT1iKWJyZWFrO3JldHVybiBhfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPVtdO2E7YT1hLm5leHRTaWJsaW5nKWEubm9kZVR5cGU9PT0xJiZhIT09YiYmZC5wdXNoKGEpO3JldHVybiBkfX0pO3ZhciBKYT0vIGpRdWVyeVxkKz0iKD86XGQrfG51bGwpIi9nLFY9L15ccysvLEthPS8oPChbXHc6XSspW14+XSo/KVwvPi9nLGhiPS9eKD86YXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkkL2ksTGE9LzwoW1x3Ol0rKS8saWI9Lzx0Ym9keS9pLGpiPS88fCYjP1x3KzsvLHRhPS88c2NyaXB0fDxvYmplY3R8PGVtYmVkfDxvcHRpb258PHN0eWxlL2ksdWE9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksTWE9ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBoYi50ZXN0KGQpPwphOmIrIj48LyIrZCsiPiJ9LEY9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07Ri5vcHRncm91cD1GLm9wdGlvbjtGLnRib2R5PUYudGZvb3Q9Ri5jb2xncm91cD1GLmNhcHRpb249Ri50aGVhZDtGLnRoPUYudGQ7aWYoIWMuc3VwcG9ydC5odG1sU2VyaWFsaXplKUYuX2RlZmF1bHQ9WzEsImRpdjxkaXY+IiwiPC9kaXY+Il07Yy5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7aWYoYy5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGQ9CmModGhpcyk7ZC50ZXh0KGEuY2FsbCh0aGlzLGIsZC50ZXh0KCkpKX0pO2lmKHR5cGVvZiBhIT09Im9iamVjdCImJmEhPT13KXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fHMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gYy50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGQpe2ModGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxkKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1jKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSh0cnVlKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pO2IubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBkPXRoaXM7ZC5maXJzdENoaWxkJiZkLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xOylkPWQuZmlyc3RDaGlsZDtyZXR1cm4gZH0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sCndyYXBJbm5lcjpmdW5jdGlvbihhKXtpZihjLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtjKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Yyh0aGlzKSxkPWIuY29udGVudHMoKTtkLmxlbmd0aD9kLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yyh0aGlzKS53cmFwQWxsKGEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtjLm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8Yyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LApwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZhbHNlLGZ1bmN0aW9uKGIpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYix0aGlzKX0pO2Vsc2UgaWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Yyhhcmd1bWVudHNbMF0pO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZhbHNlLGZ1bmN0aW9uKGIpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYiwKdGhpcy5uZXh0U2libGluZyl9KTtlbHNlIGlmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIixhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLGMoYXJndW1lbnRzWzBdKS50b0FycmF5KCkpO3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBkPTAsZjsoZj10aGlzW2RdKSE9bnVsbDtkKyspaWYoIWF8fGMuZmlsdGVyKGEsW2ZdKS5sZW5ndGgpe2lmKCFiJiZmLm5vZGVUeXBlPT09MSl7Yy5jbGVhbkRhdGEoZi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTtjLmNsZWFuRGF0YShbZl0pfWYucGFyZW50Tm9kZSYmZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGYpfXJldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI7KGI9dGhpc1thXSkhPW51bGw7YSsrKWZvcihiLm5vZGVUeXBlPT09MSYmYy5jbGVhbkRhdGEoYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTtiLmZpcnN0Q2hpbGQ7KWIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKTsKcmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMubWFwKGZ1bmN0aW9uKCl7aWYoIWMuc3VwcG9ydC5ub0Nsb25lRXZlbnQmJiFjLmlzWE1MRG9jKHRoaXMpKXt2YXIgZD10aGlzLm91dGVySFRNTCxmPXRoaXMub3duZXJEb2N1bWVudDtpZighZCl7ZD1mLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2QuYXBwZW5kQ2hpbGQodGhpcy5jbG9uZU5vZGUodHJ1ZSkpO2Q9ZC5pbm5lckhUTUx9cmV0dXJuIGMuY2xlYW4oW2QucmVwbGFjZShKYSwiIikucmVwbGFjZSgvPShbXj0iJz5cc10rXC8pPi9nLCc9IiQxIj4nKS5yZXBsYWNlKFYsIiIpXSxmKVswXX1lbHNlIHJldHVybiB0aGlzLmNsb25lTm9kZSh0cnVlKX0pO2lmKGE9PT10cnVlKXtyYSh0aGlzLGIpO3JhKHRoaXMuZmluZCgiKiIpLGIuZmluZCgiKiIpKX1yZXR1cm4gYn0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09dylyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShKYSwKIiIpOm51bGw7ZWxzZSBpZih0eXBlb2YgYT09PSJzdHJpbmciJiYhdGEudGVzdChhKSYmKGMuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IVYudGVzdChhKSkmJiFGWyhMYS5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoS2EsTWEpO3RyeXtmb3IodmFyIGI9MCxkPXRoaXMubGVuZ3RoO2I8ZDtiKyspaWYodGhpc1tiXS5ub2RlVHlwZT09PTEpe2MuY2xlYW5EYXRhKHRoaXNbYl0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7dGhpc1tiXS5pbm5lckhUTUw9YX19Y2F0Y2goZil7dGhpcy5lbXB0eSgpLmFwcGVuZChhKX19ZWxzZSBjLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBqPWModGhpcyksaT1qLmh0bWwoKTtqLmVtcHR5KCkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbCh0aGlzLGUsaSl9KX0pOnRoaXMuZW1wdHkoKS5hcHBlbmQoYSk7cmV0dXJuIHRoaXN9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0mJgp0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGMuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBkPWModGhpcyksZj1kLmh0bWwoKTtkLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZikpfSk7aWYodHlwZW9mIGEhPT0ic3RyaW5nIilhPWMoYSkuZGV0YWNoKCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsZD10aGlzLnBhcmVudE5vZGU7Yyh0aGlzKS5yZW1vdmUoKTtiP2MoYikuYmVmb3JlKGEpOmMoZCkuYXBwZW5kKGEpfSl9ZWxzZSByZXR1cm4gdGhpcy5wdXNoU3RhY2soYyhjLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSx0cnVlKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGYodSl7cmV0dXJuIGMubm9kZU5hbWUodSwidGFibGUiKT91LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHwKdS5hcHBlbmRDaGlsZCh1Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6dX12YXIgZSxqLGk9YVswXSxvPVtdLGs7aWYoIWMuc3VwcG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIGk9PT0ic3RyaW5nIiYmdWEudGVzdChpKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Yyh0aGlzKS5kb21NYW5pcChhLGIsZCx0cnVlKX0pO2lmKGMuaXNGdW5jdGlvbihpKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHUpe3ZhciB6PWModGhpcyk7YVswXT1pLmNhbGwodGhpcyx1LGI/ei5odG1sKCk6dyk7ei5kb21NYW5pcChhLGIsZCl9KTtpZih0aGlzWzBdKXtlPWkmJmkucGFyZW50Tm9kZTtlPWMuc3VwcG9ydC5wYXJlbnROb2RlJiZlJiZlLm5vZGVUeXBlPT09MTEmJmUuY2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD97ZnJhZ21lbnQ6ZX06c2EoYSx0aGlzLG8pO2s9ZS5mcmFnbWVudDtpZihqPWsuY2hpbGROb2Rlcy5sZW5ndGg9PT0KMT8oaz1rLmZpcnN0Q2hpbGQpOmsuZmlyc3RDaGlsZCl7Yj1iJiZjLm5vZGVOYW1lKGosInRyIik7Zm9yKHZhciBuPTAscj10aGlzLmxlbmd0aDtuPHI7bisrKWQuY2FsbChiP2YodGhpc1tuXSxqKTp0aGlzW25dLG4+MHx8ZS5jYWNoZWFibGV8fHRoaXMubGVuZ3RoPjE/ay5jbG9uZU5vZGUodHJ1ZSk6ayl9by5sZW5ndGgmJmMuZWFjaChvLFFhKX1yZXR1cm4gdGhpc319KTtjLmZyYWdtZW50cz17fTtjLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2MuZm5bYV09ZnVuY3Rpb24oZCl7dmFyIGY9W107ZD1jKGQpO3ZhciBlPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGUmJmUubm9kZVR5cGU9PT0xMSYmZS5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmQubGVuZ3RoPT09MSl7ZFtiXSh0aGlzWzBdKTsKcmV0dXJuIHRoaXN9ZWxzZXtlPTA7Zm9yKHZhciBqPWQubGVuZ3RoO2U8ajtlKyspe3ZhciBpPShlPjA/dGhpcy5jbG9uZSh0cnVlKTp0aGlzKS5nZXQoKTtjLmZuW2JdLmFwcGx5KGMoZFtlXSksaSk7Zj1mLmNvbmNhdChpKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soZixhLGQuc2VsZWN0b3IpfX19KTtjLmV4dGVuZCh7Y2xlYW46ZnVuY3Rpb24oYSxiLGQsZil7Yj1ifHxzO2lmKHR5cGVvZiBiLmNyZWF0ZUVsZW1lbnQ9PT0idW5kZWZpbmVkIiliPWIub3duZXJEb2N1bWVudHx8YlswXSYmYlswXS5vd25lckRvY3VtZW50fHxzO2Zvcih2YXIgZT1bXSxqPTAsaTsoaT1hW2pdKSE9bnVsbDtqKyspe2lmKHR5cGVvZiBpPT09Im51bWJlciIpaSs9IiI7aWYoaSl7aWYodHlwZW9mIGk9PT0ic3RyaW5nIiYmIWpiLnRlc3QoaSkpaT1iLmNyZWF0ZVRleHROb2RlKGkpO2Vsc2UgaWYodHlwZW9mIGk9PT0ic3RyaW5nIil7aT1pLnJlcGxhY2UoS2EsTWEpO3ZhciBvPShMYS5leGVjKGkpfHxbIiIsCiIiXSlbMV0udG9Mb3dlckNhc2UoKSxrPUZbb118fEYuX2RlZmF1bHQsbj1rWzBdLHI9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3Ioci5pbm5lckhUTUw9a1sxXStpK2tbMl07bi0tOylyPXIubGFzdENoaWxkO2lmKCFjLnN1cHBvcnQudGJvZHkpe249aWIudGVzdChpKTtvPW89PT0idGFibGUiJiYhbj9yLmZpcnN0Q2hpbGQmJnIuZmlyc3RDaGlsZC5jaGlsZE5vZGVzOmtbMV09PT0iPHRhYmxlPiImJiFuP3IuY2hpbGROb2RlczpbXTtmb3Ioaz1vLmxlbmd0aC0xO2s+PTA7LS1rKWMubm9kZU5hbWUob1trXSwidGJvZHkiKSYmIW9ba10uY2hpbGROb2Rlcy5sZW5ndGgmJm9ba10ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvW2tdKX0hYy5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZWLnRlc3QoaSkmJnIuaW5zZXJ0QmVmb3JlKGIuY3JlYXRlVGV4dE5vZGUoVi5leGVjKGkpWzBdKSxyLmZpcnN0Q2hpbGQpO2k9ci5jaGlsZE5vZGVzfWlmKGkubm9kZVR5cGUpZS5wdXNoKGkpO2Vsc2UgZT0KYy5tZXJnZShlLGkpfX1pZihkKWZvcihqPTA7ZVtqXTtqKyspaWYoZiYmYy5ub2RlTmFtZShlW2pdLCJzY3JpcHQiKSYmKCFlW2pdLnR5cGV8fGVbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWYucHVzaChlW2pdLnBhcmVudE5vZGU/ZVtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVbal0pOmVbal0pO2Vsc2V7ZVtqXS5ub2RlVHlwZT09PTEmJmUuc3BsaWNlLmFwcGx5KGUsW2orMSwwXS5jb25jYXQoYy5tYWtlQXJyYXkoZVtqXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IikpKSk7ZC5hcHBlbmRDaGlsZChlW2pdKX1yZXR1cm4gZX0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixkLGY9Yy5jYWNoZSxlPWMuZXZlbnQuc3BlY2lhbCxqPWMuc3VwcG9ydC5kZWxldGVFeHBhbmRvLGk9MCxvOyhvPWFbaV0pIT1udWxsO2krKylpZihkPW9bYy5leHBhbmRvXSl7Yj1mW2RdO2lmKGIuZXZlbnRzKWZvcih2YXIgayBpbiBiLmV2ZW50cyllW2tdPwpjLmV2ZW50LnJlbW92ZShvLGspOkNhKG8sayxiLmhhbmRsZSk7aWYoailkZWxldGUgb1tjLmV4cGFuZG9dO2Vsc2Ugby5yZW1vdmVBdHRyaWJ1dGUmJm8ucmVtb3ZlQXR0cmlidXRlKGMuZXhwYW5kbyk7ZGVsZXRlIGZbZF19fX0pO3ZhciBrYj0vei0/aW5kZXh8Zm9udC0/d2VpZ2h0fG9wYWNpdHl8em9vbXxsaW5lLT9oZWlnaHQvaSxOYT0vYWxwaGFcKFteKV0qXCkvLE9hPS9vcGFjaXR5PShbXildKikvLGhhPS9mbG9hdC9pLGlhPS8tKFthLXpdKS9pZyxsYj0vKFtBLVpdKS9nLG1iPS9eLT9cZCsoPzpweCk/JC9pLG5iPS9eLT9cZC8sb2I9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LHBiPVsiTGVmdCIsIlJpZ2h0Il0scWI9WyJUb3AiLCJCb3R0b20iXSxyYj1zLmRlZmF1bHRWaWV3JiZzLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUsUGE9Yy5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQiLGphPQpmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O2MuZm4uY3NzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIFgodGhpcyxhLGIsdHJ1ZSxmdW5jdGlvbihkLGYsZSl7aWYoZT09PXcpcmV0dXJuIGMuY3VyQ1NTKGQsZik7aWYodHlwZW9mIGU9PT0ibnVtYmVyIiYmIWtiLnRlc3QoZikpZSs9InB4IjtjLnN0eWxlKGQsZixlKX0pfTtjLmV4dGVuZCh7c3R5bGU6ZnVuY3Rpb24oYSxiLGQpe2lmKCFhfHxhLm5vZGVUeXBlPT09M3x8YS5ub2RlVHlwZT09PTgpcmV0dXJuIHc7aWYoKGI9PT0id2lkdGgifHxiPT09ImhlaWdodCIpJiZwYXJzZUZsb2F0KGQpPDApZD13O3ZhciBmPWEuc3R5bGV8fGEsZT1kIT09dztpZighYy5zdXBwb3J0Lm9wYWNpdHkmJmI9PT0ib3BhY2l0eSIpe2lmKGUpe2Yuem9vbT0xO2I9cGFyc2VJbnQoZCwxMCkrIiI9PT0iTmFOIj8iIjoiYWxwaGEob3BhY2l0eT0iK2QqMTAwKyIpIjthPWYuZmlsdGVyfHxjLmN1ckNTUyhhLCJmaWx0ZXIiKXx8IiI7Zi5maWx0ZXI9Ck5hLnRlc3QoYSk/YS5yZXBsYWNlKE5hLGIpOmJ9cmV0dXJuIGYuZmlsdGVyJiZmLmZpbHRlci5pbmRleE9mKCJvcGFjaXR5PSIpPj0wP3BhcnNlRmxvYXQoT2EuZXhlYyhmLmZpbHRlcilbMV0pLzEwMCsiIjoiIn1pZihoYS50ZXN0KGIpKWI9UGE7Yj1iLnJlcGxhY2UoaWEsamEpO2lmKGUpZltiXT1kO3JldHVybiBmW2JdfSxjc3M6ZnVuY3Rpb24oYSxiLGQsZil7aWYoYj09PSJ3aWR0aCJ8fGI9PT0iaGVpZ2h0Iil7dmFyIGUsaj1iPT09IndpZHRoIj9wYjpxYjtmdW5jdGlvbiBpKCl7ZT1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0O2YhPT0iYm9yZGVyIiYmYy5lYWNoKGosZnVuY3Rpb24oKXtmfHwoZS09cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJwYWRkaW5nIit0aGlzLHRydWUpKXx8MCk7aWYoZj09PSJtYXJnaW4iKWUrPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luIit0aGlzLHRydWUpKXx8MDtlbHNlIGUtPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwKImJvcmRlciIrdGhpcysiV2lkdGgiLHRydWUpKXx8MH0pfWEub2Zmc2V0V2lkdGghPT0wP2koKTpjLnN3YXAoYSxvYixpKTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLnJvdW5kKGUpKX1yZXR1cm4gYy5jdXJDU1MoYSxiLGQpfSxjdXJDU1M6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmLGU9YS5zdHlsZTtpZighYy5zdXBwb3J0Lm9wYWNpdHkmJmI9PT0ib3BhY2l0eSImJmEuY3VycmVudFN0eWxlKXtmPU9hLnRlc3QoYS5jdXJyZW50U3R5bGUuZmlsdGVyfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjoiIjtyZXR1cm4gZj09PSIiPyIxIjpmfWlmKGhhLnRlc3QoYikpYj1QYTtpZighZCYmZSYmZVtiXSlmPWVbYl07ZWxzZSBpZihyYil7aWYoaGEudGVzdChiKSliPSJmbG9hdCI7Yj1iLnJlcGxhY2UobGIsIi0kMSIpLnRvTG93ZXJDYXNlKCk7ZT1hLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7aWYoIWUpcmV0dXJuIG51bGw7aWYoYT1lLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlmPQphLmdldFByb3BlcnR5VmFsdWUoYik7aWYoYj09PSJvcGFjaXR5IiYmZj09PSIiKWY9IjEifWVsc2UgaWYoYS5jdXJyZW50U3R5bGUpe2Q9Yi5yZXBsYWNlKGlhLGphKTtmPWEuY3VycmVudFN0eWxlW2JdfHxhLmN1cnJlbnRTdHlsZVtkXTtpZighbWIudGVzdChmKSYmbmIudGVzdChmKSl7Yj1lLmxlZnQ7dmFyIGo9YS5ydW50aW1lU3R5bGUubGVmdDthLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQ7ZS5sZWZ0PWQ9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDA7Zj1lLnBpeGVsTGVmdCsicHgiO2UubGVmdD1iO2EucnVudGltZVN0eWxlLmxlZnQ9an19cmV0dXJuIGZ9LHN3YXA6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPXt9O2Zvcih2YXIgZSBpbiBiKXtmW2VdPWEuc3R5bGVbZV07YS5zdHlsZVtlXT1iW2VdfWQuY2FsbChhKTtmb3IoZSBpbiBiKWEuc3R5bGVbZV09ZltlXX19KTtpZihjLmV4cHImJmMuZXhwci5maWx0ZXJzKXtjLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9CmEub2Zmc2V0V2lkdGgsZD1hLm9mZnNldEhlaWdodCxmPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJ0ciI7cmV0dXJuIGI9PT0wJiZkPT09MCYmIWY/dHJ1ZTpiPjAmJmQ+MCYmIWY/ZmFsc2U6Yy5jdXJDU1MoYSwiZGlzcGxheSIpPT09Im5vbmUifTtjLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFjLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9fXZhciBzYj1KKCksdGI9LzxzY3JpcHQoLnxccykqP1wvc2NyaXB0Pi9naSx1Yj0vc2VsZWN0fHRleHRhcmVhL2ksdmI9L2NvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2Vlay9pLE49Lz1cPygmfCQpLyxrYT0vXD8vLHdiPS8oXD98JilfPS4qPygmfCQpLyx4Yj0vXihcdys6KT9cL1wvKFteXC8/I10rKS8seWI9LyUyMC9nLHpiPWMuZm4ubG9hZDtjLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGIsZCl7aWYodHlwZW9mIGEhPT0KInN0cmluZyIpcmV0dXJuIHpiLmNhbGwodGhpcyxhKTtlbHNlIGlmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZj1hLmluZGV4T2YoIiAiKTtpZihmPj0wKXt2YXIgZT1hLnNsaWNlKGYsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGYpfWY9IkdFVCI7aWYoYilpZihjLmlzRnVuY3Rpb24oYikpe2Q9YjtiPW51bGx9ZWxzZSBpZih0eXBlb2YgYj09PSJvYmplY3QiKXtiPWMucGFyYW0oYixjLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7Zj0iUE9TVCJ9dmFyIGo9dGhpcztjLmFqYXgoe3VybDphLHR5cGU6ZixkYXRhVHlwZToiaHRtbCIsZGF0YTpiLGNvbXBsZXRlOmZ1bmN0aW9uKGksbyl7aWYobz09PSJzdWNjZXNzInx8bz09PSJub3Rtb2RpZmllZCIpai5odG1sKGU/YygiPGRpdiAvPiIpLmFwcGVuZChpLnJlc3BvbnNlVGV4dC5yZXBsYWNlKHRiLCIiKSkuZmluZChlKTppLnJlc3BvbnNlVGV4dCk7ZCYmai5lYWNoKGQsW2kucmVzcG9uc2VUZXh0LG8saV0pfX0pO3JldHVybiB0aGlzfSwKc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9jLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fHViLnRlc3QodGhpcy5ub2RlTmFtZSl8fHZiLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXthPWModGhpcykudmFsKCk7cmV0dXJuIGE9PW51bGw/bnVsbDpjLmlzQXJyYXkoYSk/Yy5tYXAoYSxmdW5jdGlvbihkKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6ZH19KTp7bmFtZTpiLm5hbWUsdmFsdWU6YX19KS5nZXQoKX19KTtjLmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLApmdW5jdGlvbihhLGIpe2MuZm5bYl09ZnVuY3Rpb24oZCl7cmV0dXJuIHRoaXMuYmluZChiLGQpfX0pO2MuZXh0ZW5kKHtnZXQ6ZnVuY3Rpb24oYSxiLGQsZil7aWYoYy5pc0Z1bmN0aW9uKGIpKXtmPWZ8fGQ7ZD1iO2I9bnVsbH1yZXR1cm4gYy5hamF4KHt0eXBlOiJHRVQiLHVybDphLGRhdGE6YixzdWNjZXNzOmQsZGF0YVR5cGU6Zn0pfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYy5nZXQoYSxudWxsLGIsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYy5nZXQoYSxiLGQsImpzb24iKX0scG9zdDpmdW5jdGlvbihhLGIsZCxmKXtpZihjLmlzRnVuY3Rpb24oYikpe2Y9Znx8ZDtkPWI7Yj17fX1yZXR1cm4gYy5hamF4KHt0eXBlOiJQT1NUIix1cmw6YSxkYXRhOmIsc3VjY2VzczpkLGRhdGFUeXBlOmZ9KX0sYWpheFNldHVwOmZ1bmN0aW9uKGEpe2MuZXh0ZW5kKGMuYWpheFNldHRpbmdzLGEpfSxhamF4U2V0dGluZ3M6e3VybDpsb2NhdGlvbi5ocmVmLApnbG9iYWw6dHJ1ZSx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLHByb2Nlc3NEYXRhOnRydWUsYXN5bmM6dHJ1ZSx4aHI6QS5YTUxIdHRwUmVxdWVzdCYmKEEubG9jYXRpb24ucHJvdG9jb2whPT0iZmlsZToifHwhQS5BY3RpdmVYT2JqZWN0KT9mdW5jdGlvbigpe3JldHVybiBuZXcgQS5YTUxIdHRwUmVxdWVzdH06ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBBLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYSl7fX0sYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHNjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0Iixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLHRleHQ6InRleHQvcGxhaW4iLF9kZWZhdWx0OiIqLyoifX0sbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheDpmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7ZS5zdWNjZXNzJiYKZS5zdWNjZXNzLmNhbGwoayxvLGkseCk7ZS5nbG9iYWwmJmYoImFqYXhTdWNjZXNzIixbeCxlXSl9ZnVuY3Rpb24gZCgpe2UuY29tcGxldGUmJmUuY29tcGxldGUuY2FsbChrLHgsaSk7ZS5nbG9iYWwmJmYoImFqYXhDb21wbGV0ZSIsW3gsZV0pO2UuZ2xvYmFsJiYhLS1jLmFjdGl2ZSYmYy5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpfWZ1bmN0aW9uIGYocSxwKXsoZS5jb250ZXh0P2MoZS5jb250ZXh0KTpjLmV2ZW50KS50cmlnZ2VyKHEscCl9dmFyIGU9Yy5leHRlbmQodHJ1ZSx7fSxjLmFqYXhTZXR0aW5ncyxhKSxqLGksbyxrPWEmJmEuY29udGV4dHx8ZSxuPWUudHlwZS50b1VwcGVyQ2FzZSgpO2lmKGUuZGF0YSYmZS5wcm9jZXNzRGF0YSYmdHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciKWUuZGF0YT1jLnBhcmFtKGUuZGF0YSxlLnRyYWRpdGlvbmFsKTtpZihlLmRhdGFUeXBlPT09Impzb25wIil7aWYobj09PSJHRVQiKU4udGVzdChlLnVybCl8fChlLnVybCs9KGthLnRlc3QoZS51cmwpPwoiJiI6Ij8iKSsoZS5qc29ucHx8ImNhbGxiYWNrIikrIj0/Iik7ZWxzZSBpZighZS5kYXRhfHwhTi50ZXN0KGUuZGF0YSkpZS5kYXRhPShlLmRhdGE/ZS5kYXRhKyImIjoiIikrKGUuanNvbnB8fCJjYWxsYmFjayIpKyI9PyI7ZS5kYXRhVHlwZT0ianNvbiJ9aWYoZS5kYXRhVHlwZT09PSJqc29uIiYmKGUuZGF0YSYmTi50ZXN0KGUuZGF0YSl8fE4udGVzdChlLnVybCkpKXtqPWUuanNvbnBDYWxsYmFja3x8Impzb25wIitzYisrO2lmKGUuZGF0YSllLmRhdGE9KGUuZGF0YSsiIikucmVwbGFjZShOLCI9IitqKyIkMSIpO2UudXJsPWUudXJsLnJlcGxhY2UoTiwiPSIraisiJDEiKTtlLmRhdGFUeXBlPSJzY3JpcHQiO0Fbal09QVtqXXx8ZnVuY3Rpb24ocSl7bz1xO2IoKTtkKCk7QVtqXT13O3RyeXtkZWxldGUgQVtqXX1jYXRjaChwKXt9eiYmei5yZW1vdmVDaGlsZChDKX19aWYoZS5kYXRhVHlwZT09PSJzY3JpcHQiJiZlLmNhY2hlPT09bnVsbCllLmNhY2hlPWZhbHNlO2lmKGUuY2FjaGU9PT0KZmFsc2UmJm49PT0iR0VUIil7dmFyIHI9SigpLHU9ZS51cmwucmVwbGFjZSh3YiwiJDFfPSIrcisiJDIiKTtlLnVybD11Kyh1PT09ZS51cmw/KGthLnRlc3QoZS51cmwpPyImIjoiPyIpKyJfPSIrcjoiIil9aWYoZS5kYXRhJiZuPT09IkdFVCIpZS51cmwrPShrYS50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmRhdGE7ZS5nbG9iYWwmJiFjLmFjdGl2ZSsrJiZjLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpO3I9KHI9eGIuZXhlYyhlLnVybCkpJiYoclsxXSYmclsxXSE9PWxvY2F0aW9uLnByb3RvY29sfHxyWzJdIT09bG9jYXRpb24uaG9zdCk7aWYoZS5kYXRhVHlwZT09PSJzY3JpcHQiJiZuPT09IkdFVCImJnIpe3ZhciB6PXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8cy5kb2N1bWVudEVsZW1lbnQsQz1zLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO0Muc3JjPWUudXJsO2lmKGUuc2NyaXB0Q2hhcnNldClDLmNoYXJzZXQ9ZS5zY3JpcHRDaGFyc2V0O2lmKCFqKXt2YXIgQj0KZmFsc2U7Qy5vbmxvYWQ9Qy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZighQiYmKCF0aGlzLnJlYWR5U3RhdGV8fHRoaXMucmVhZHlTdGF0ZT09PSJsb2FkZWQifHx0aGlzLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKSl7Qj10cnVlO2IoKTtkKCk7Qy5vbmxvYWQ9Qy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDt6JiZDLnBhcmVudE5vZGUmJnoucmVtb3ZlQ2hpbGQoQyl9fX16Lmluc2VydEJlZm9yZShDLHouZmlyc3RDaGlsZCk7cmV0dXJuIHd9dmFyIEU9ZmFsc2UseD1lLnhocigpO2lmKHgpe2UudXNlcm5hbWU/eC5vcGVuKG4sZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpOngub3BlbihuLGUudXJsLGUuYXN5bmMpO3RyeXtpZihlLmRhdGF8fGEmJmEuY29udGVudFR5cGUpeC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGUuY29udGVudFR5cGUpO2lmKGUuaWZNb2RpZmllZCl7Yy5sYXN0TW9kaWZpZWRbZS51cmxdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIiwKYy5sYXN0TW9kaWZpZWRbZS51cmxdKTtjLmV0YWdbZS51cmxdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLGMuZXRhZ1tlLnVybF0pfXJ8fHguc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iik7eC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGUuZGF0YVR5cGUmJmUuYWNjZXB0c1tlLmRhdGFUeXBlXT9lLmFjY2VwdHNbZS5kYXRhVHlwZV0rIiwgKi8qIjplLmFjY2VwdHMuX2RlZmF1bHQpfWNhdGNoKGdhKXt9aWYoZS5iZWZvcmVTZW5kJiZlLmJlZm9yZVNlbmQuY2FsbChrLHgsZSk9PT1mYWxzZSl7ZS5nbG9iYWwmJiEtLWMuYWN0aXZlJiZjLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIik7eC5hYm9ydCgpO3JldHVybiBmYWxzZX1lLmdsb2JhbCYmZigiYWpheFNlbmQiLFt4LGVdKTt2YXIgZz14Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihxKXtpZigheHx8eC5yZWFkeVN0YXRlPT09MHx8cT09PSJhYm9ydCIpe0V8fApkKCk7RT10cnVlO2lmKHgpeC5vbnJlYWR5c3RhdGVjaGFuZ2U9Yy5ub29wfWVsc2UgaWYoIUUmJngmJih4LnJlYWR5U3RhdGU9PT00fHxxPT09InRpbWVvdXQiKSl7RT10cnVlO3gub25yZWFkeXN0YXRlY2hhbmdlPWMubm9vcDtpPXE9PT0idGltZW91dCI/InRpbWVvdXQiOiFjLmh0dHBTdWNjZXNzKHgpPyJlcnJvciI6ZS5pZk1vZGlmaWVkJiZjLmh0dHBOb3RNb2RpZmllZCh4LGUudXJsKT8ibm90bW9kaWZpZWQiOiJzdWNjZXNzIjt2YXIgcDtpZihpPT09InN1Y2Nlc3MiKXRyeXtvPWMuaHR0cERhdGEoeCxlLmRhdGFUeXBlLGUpfWNhdGNoKHYpe2k9InBhcnNlcmVycm9yIjtwPXZ9aWYoaT09PSJzdWNjZXNzInx8aT09PSJub3Rtb2RpZmllZCIpanx8YigpO2Vsc2UgYy5oYW5kbGVFcnJvcihlLHgsaSxwKTtkKCk7cT09PSJ0aW1lb3V0IiYmeC5hYm9ydCgpO2lmKGUuYXN5bmMpeD1udWxsfX07dHJ5e3ZhciBoPXguYWJvcnQ7eC5hYm9ydD1mdW5jdGlvbigpe3gmJmguY2FsbCh4KTsKZygiYWJvcnQiKX19Y2F0Y2gobCl7fWUuYXN5bmMmJmUudGltZW91dD4wJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eCYmIUUmJmcoInRpbWVvdXQiKX0sZS50aW1lb3V0KTt0cnl7eC5zZW5kKG49PT0iUE9TVCJ8fG49PT0iUFVUInx8bj09PSJERUxFVEUiP2UuZGF0YTpudWxsKX1jYXRjaChtKXtjLmhhbmRsZUVycm9yKGUseCxudWxsLG0pO2QoKX1lLmFzeW5jfHxnKCk7cmV0dXJuIHh9fSxoYW5kbGVFcnJvcjpmdW5jdGlvbihhLGIsZCxmKXtpZihhLmVycm9yKWEuZXJyb3IuY2FsbChhLmNvbnRleHR8fGEsYixkLGYpO2lmKGEuZ2xvYmFsKShhLmNvbnRleHQ/YyhhLmNvbnRleHQpOmMuZXZlbnQpLnRyaWdnZXIoImFqYXhFcnJvciIsW2IsYSxmXSl9LGFjdGl2ZTowLGh0dHBTdWNjZXNzOmZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4hYS5zdGF0dXMmJmxvY2F0aW9uLnByb3RvY29sPT09ImZpbGU6Inx8YS5zdGF0dXM+PTIwMCYmYS5zdGF0dXM8MzAwfHxhLnN0YXR1cz09PTMwNHx8YS5zdGF0dXM9PT0KMTIyM3x8YS5zdGF0dXM9PT0wfWNhdGNoKGIpe31yZXR1cm4gZmFsc2V9LGh0dHBOb3RNb2RpZmllZDpmdW5jdGlvbihhLGIpe3ZhciBkPWEuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSxmPWEuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKTtpZihkKWMubGFzdE1vZGlmaWVkW2JdPWQ7aWYoZiljLmV0YWdbYl09ZjtyZXR1cm4gYS5zdGF0dXM9PT0zMDR8fGEuc3RhdHVzPT09MH0saHR0cERhdGE6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWEuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfHwiIixlPWI9PT0ieG1sInx8IWImJmYuaW5kZXhPZigieG1sIik+PTA7YT1lP2EucmVzcG9uc2VYTUw6YS5yZXNwb25zZVRleHQ7ZSYmYS5kb2N1bWVudEVsZW1lbnQubm9kZU5hbWU9PT0icGFyc2VyZXJyb3IiJiZjLmVycm9yKCJwYXJzZXJlcnJvciIpO2lmKGQmJmQuZGF0YUZpbHRlcilhPWQuZGF0YUZpbHRlcihhLGIpO2lmKHR5cGVvZiBhPT09InN0cmluZyIpaWYoYj09PQoianNvbiJ8fCFiJiZmLmluZGV4T2YoImpzb24iKT49MClhPWMucGFyc2VKU09OKGEpO2Vsc2UgaWYoYj09PSJzY3JpcHQifHwhYiYmZi5pbmRleE9mKCJqYXZhc2NyaXB0Iik+PTApYy5nbG9iYWxFdmFsKGEpO3JldHVybiBhfSxwYXJhbTpmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoaSxvKXtpZihjLmlzQXJyYXkobykpYy5lYWNoKG8sZnVuY3Rpb24oayxuKXtifHwvXFtcXSQvLnRlc3QoaSk/ZihpLG4pOmQoaSsiWyIrKHR5cGVvZiBuPT09Im9iamVjdCJ8fGMuaXNBcnJheShuKT9rOiIiKSsiXSIsbil9KTtlbHNlIWImJm8hPW51bGwmJnR5cGVvZiBvPT09Im9iamVjdCI/Yy5lYWNoKG8sZnVuY3Rpb24oayxuKXtkKGkrIlsiK2srIl0iLG4pfSk6ZihpLG8pfWZ1bmN0aW9uIGYoaSxvKXtvPWMuaXNGdW5jdGlvbihvKT9vKCk6bztlW2UubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoaSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChvKX12YXIgZT1bXTtpZihiPT09dyliPWMuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsOwppZihjLmlzQXJyYXkoYSl8fGEuanF1ZXJ5KWMuZWFjaChhLGZ1bmN0aW9uKCl7Zih0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcih2YXIgaiBpbiBhKWQoaixhW2pdKTtyZXR1cm4gZS5qb2luKCImIikucmVwbGFjZSh5YiwiKyIpfX0pO3ZhciBsYT17fSxBYj0vdG9nZ2xlfHNob3d8aGlkZS8sQmI9L14oWystXT0pPyhbXGQrLS5dKykoLiopJC8sVyx2YT1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXTtjLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhLGIpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoSygic2hvdyIsMyksYSxiKTtlbHNle2E9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXt2YXIgZD1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIpOwp0aGlzW2FdLnN0eWxlLmRpc3BsYXk9ZHx8IiI7aWYoYy5jc3ModGhpc1thXSwiZGlzcGxheSIpPT09Im5vbmUiKXtkPXRoaXNbYV0ubm9kZU5hbWU7dmFyIGY7aWYobGFbZF0pZj1sYVtkXTtlbHNle3ZhciBlPWMoIjwiK2QrIiAvPiIpLmFwcGVuZFRvKCJib2R5Iik7Zj1lLmNzcygiZGlzcGxheSIpO2lmKGY9PT0ibm9uZSIpZj0iYmxvY2siO2UucmVtb3ZlKCk7bGFbZF09Zn1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIsZil9fWE9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXRoaXNbYV0uc3R5bGUuZGlzcGxheT1jLmRhdGEodGhpc1thXSwib2xkZGlzcGxheSIpfHwiIjtyZXR1cm4gdGhpc319LGhpZGU6ZnVuY3Rpb24oYSxiKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKEsoImhpZGUiLDMpLGEsYik7ZWxzZXthPTA7Zm9yKGI9dGhpcy5sZW5ndGg7YTxiO2ErKyl7dmFyIGQ9Yy5kYXRhKHRoaXNbYV0sIm9sZGRpc3BsYXkiKTshZCYmZCE9PSJub25lIiYmYy5kYXRhKHRoaXNbYV0sCiJvbGRkaXNwbGF5IixjLmNzcyh0aGlzW2FdLCJkaXNwbGF5IikpfWE9MDtmb3IoYj10aGlzLmxlbmd0aDthPGI7YSsrKXRoaXNbYV0uc3R5bGUuZGlzcGxheT0ibm9uZSI7cmV0dXJuIHRoaXN9fSxfdG9nZ2xlOmMuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIpe3ZhciBkPXR5cGVvZiBhPT09ImJvb2xlYW4iO2lmKGMuaXNGdW5jdGlvbihhKSYmYy5pc0Z1bmN0aW9uKGIpKXRoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZWxzZSBhPT1udWxsfHxkP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWQ/YTpjKHRoaXMpLmlzKCI6aGlkZGVuIik7Yyh0aGlzKVtmPyJzaG93IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1hdGUoSygidG9nZ2xlIiwzKSxhLGIpO3JldHVybiB0aGlzfSxmYWRlVG86ZnVuY3Rpb24oYSxiLGQpe3JldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxkKX0sCmFuaW1hdGU6ZnVuY3Rpb24oYSxiLGQsZil7dmFyIGU9Yy5zcGVlZChiLGQsZik7aWYoYy5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSk7cmV0dXJuIHRoaXNbZS5xdWV1ZT09PWZhbHNlPyJlYWNoIjoicXVldWUiXShmdW5jdGlvbigpe3ZhciBqPWMuZXh0ZW5kKHt9LGUpLGksbz10aGlzLm5vZGVUeXBlPT09MSYmYyh0aGlzKS5pcygiOmhpZGRlbiIpLGs9dGhpcztmb3IoaSBpbiBhKXt2YXIgbj1pLnJlcGxhY2UoaWEsamEpO2lmKGkhPT1uKXthW25dPWFbaV07ZGVsZXRlIGFbaV07aT1ufWlmKGFbaV09PT0iaGlkZSImJm98fGFbaV09PT0ic2hvdyImJiFvKXJldHVybiBqLmNvbXBsZXRlLmNhbGwodGhpcyk7aWYoKGk9PT0iaGVpZ2h0Inx8aT09PSJ3aWR0aCIpJiZ0aGlzLnN0eWxlKXtqLmRpc3BsYXk9Yy5jc3ModGhpcywiZGlzcGxheSIpO2oub3ZlcmZsb3c9dGhpcy5zdHlsZS5vdmVyZmxvd31pZihjLmlzQXJyYXkoYVtpXSkpeyhqLnNwZWNpYWxFYXNpbmc9Cmouc3BlY2lhbEVhc2luZ3x8e30pW2ldPWFbaV1bMV07YVtpXT1hW2ldWzBdfX1pZihqLm92ZXJmbG93IT1udWxsKXRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7ai5jdXJBbmltPWMuZXh0ZW5kKHt9LGEpO2MuZWFjaChhLGZ1bmN0aW9uKHIsdSl7dmFyIHo9bmV3IGMuZngoayxqLHIpO2lmKEFiLnRlc3QodSkpelt1PT09InRvZ2dsZSI/bz8ic2hvdyI6ImhpZGUiOnVdKGEpO2Vsc2V7dmFyIEM9QmIuZXhlYyh1KSxCPXouY3VyKHRydWUpfHwwO2lmKEMpe3U9cGFyc2VGbG9hdChDWzJdKTt2YXIgRT1DWzNdfHwicHgiO2lmKEUhPT0icHgiKXtrLnN0eWxlW3JdPSh1fHwxKStFO0I9KHV8fDEpL3ouY3VyKHRydWUpKkI7ay5zdHlsZVtyXT1CK0V9aWYoQ1sxXSl1PShDWzFdPT09Ii09Ij8tMToxKSp1K0I7ei5jdXN0b20oQix1LEUpfWVsc2Ugei5jdXN0b20oQix1LCIiKX19KTtyZXR1cm4gdHJ1ZX0pfSxzdG9wOmZ1bmN0aW9uKGEsYil7dmFyIGQ9Yy50aW1lcnM7YSYmdGhpcy5xdWV1ZShbXSk7CnRoaXMuZWFjaChmdW5jdGlvbigpe2Zvcih2YXIgZj1kLmxlbmd0aC0xO2Y+PTA7Zi0tKWlmKGRbZl0uZWxlbT09PXRoaXMpe2ImJmRbZl0odHJ1ZSk7ZC5zcGxpY2UoZiwxKX19KTtifHx0aGlzLmRlcXVldWUoKTtyZXR1cm4gdGhpc319KTtjLmVhY2goe3NsaWRlRG93bjpLKCJzaG93IiwxKSxzbGlkZVVwOksoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOksoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9fSxmdW5jdGlvbihhLGIpe2MuZm5bYV09ZnVuY3Rpb24oZCxmKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsZCxmKX19KTtjLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBmPWEmJnR5cGVvZiBhPT09Im9iamVjdCI/YTp7Y29tcGxldGU6ZHx8IWQmJmJ8fGMuaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpkJiZifHxiJiYhYy5pc0Z1bmN0aW9uKGIpJiZifTtmLmR1cmF0aW9uPWMuZngub2ZmPzA6dHlwZW9mIGYuZHVyYXRpb249PT0KIm51bWJlciI/Zi5kdXJhdGlvbjpjLmZ4LnNwZWVkc1tmLmR1cmF0aW9uXXx8Yy5meC5zcGVlZHMuX2RlZmF1bHQ7Zi5vbGQ9Zi5jb21wbGV0ZTtmLmNvbXBsZXRlPWZ1bmN0aW9uKCl7Zi5xdWV1ZSE9PWZhbHNlJiZjKHRoaXMpLmRlcXVldWUoKTtjLmlzRnVuY3Rpb24oZi5vbGQpJiZmLm9sZC5jYWxsKHRoaXMpfTtyZXR1cm4gZn0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oYSxiLGQsZil7cmV0dXJuIGQrZiphfSxzd2luZzpmdW5jdGlvbihhLGIsZCxmKXtyZXR1cm4oLU1hdGguY29zKGEqTWF0aC5QSSkvMiswLjUpKmYrZH19LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsZCl7dGhpcy5vcHRpb25zPWI7dGhpcy5lbGVtPWE7dGhpcy5wcm9wPWQ7aWYoIWIub3JpZyliLm9yaWc9e319fSk7Yy5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKTsoYy5meC5zdGVwW3RoaXMucHJvcF18fApjLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpO2lmKCh0aGlzLnByb3A9PT0iaGVpZ2h0Inx8dGhpcy5wcm9wPT09IndpZHRoIikmJnRoaXMuZWxlbS5zdHlsZSl0aGlzLmVsZW0uc3R5bGUuZGlzcGxheT0iYmxvY2sifSxjdXI6ZnVuY3Rpb24oYSl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3JldHVybihhPXBhcnNlRmxvYXQoYy5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCxhKSkpJiZhPi0xMDAwMD9hOnBhcnNlRmxvYXQoYy5jdXJDU1ModGhpcy5lbGVtLHRoaXMucHJvcCkpfHwwfSxjdXN0b206ZnVuY3Rpb24oYSxiLGQpe2Z1bmN0aW9uIGYoail7cmV0dXJuIGUuc3RlcChqKX10aGlzLnN0YXJ0VGltZT1KKCk7dGhpcy5zdGFydD1hO3RoaXMuZW5kPWI7dGhpcy51bml0PWR8fHRoaXMudW5pdHx8InB4Ijt0aGlzLm5vdz10aGlzLnN0YXJ0Owp0aGlzLnBvcz10aGlzLnN0YXRlPTA7dmFyIGU9dGhpcztmLmVsZW09dGhpcy5lbGVtO2lmKGYoKSYmYy50aW1lcnMucHVzaChmKSYmIVcpVz1zZXRJbnRlcnZhbChjLmZ4LnRpY2ssMTMpfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1jLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5zaG93PXRydWU7dGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpO2ModGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWMuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCk7dGhpcy5vcHRpb25zLmhpZGU9dHJ1ZTt0aGlzLmN1c3RvbSh0aGlzLmN1cigpLDApfSxzdGVwOmZ1bmN0aW9uKGEpe3ZhciBiPUooKSxkPXRydWU7aWYoYXx8Yj49dGhpcy5vcHRpb25zLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz0KdGhpcy5lbmQ7dGhpcy5wb3M9dGhpcy5zdGF0ZT0xO3RoaXMudXBkYXRlKCk7dGhpcy5vcHRpb25zLmN1ckFuaW1bdGhpcy5wcm9wXT10cnVlO2Zvcih2YXIgZiBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSlpZih0aGlzLm9wdGlvbnMuY3VyQW5pbVtmXSE9PXRydWUpZD1mYWxzZTtpZihkKXtpZih0aGlzLm9wdGlvbnMuZGlzcGxheSE9bnVsbCl7dGhpcy5lbGVtLnN0eWxlLm92ZXJmbG93PXRoaXMub3B0aW9ucy5vdmVyZmxvdzthPWMuZGF0YSh0aGlzLmVsZW0sIm9sZGRpc3BsYXkiKTt0aGlzLmVsZW0uc3R5bGUuZGlzcGxheT1hP2E6dGhpcy5vcHRpb25zLmRpc3BsYXk7aWYoYy5jc3ModGhpcy5lbGVtLCJkaXNwbGF5Iik9PT0ibm9uZSIpdGhpcy5lbGVtLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn10aGlzLm9wdGlvbnMuaGlkZSYmYyh0aGlzLmVsZW0pLmhpZGUoKTtpZih0aGlzLm9wdGlvbnMuaGlkZXx8dGhpcy5vcHRpb25zLnNob3cpZm9yKHZhciBlIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKWMuc3R5bGUodGhpcy5lbGVtLAplLHRoaXMub3B0aW9ucy5vcmlnW2VdKTt0aGlzLm9wdGlvbnMuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pfXJldHVybiBmYWxzZX1lbHNle2U9Yi10aGlzLnN0YXJ0VGltZTt0aGlzLnN0YXRlPWUvdGhpcy5vcHRpb25zLmR1cmF0aW9uO2E9dGhpcy5vcHRpb25zLmVhc2luZ3x8KGMuZWFzaW5nLnN3aW5nPyJzd2luZyI6ImxpbmVhciIpO3RoaXMucG9zPWMuZWFzaW5nW3RoaXMub3B0aW9ucy5zcGVjaWFsRWFzaW5nJiZ0aGlzLm9wdGlvbnMuc3BlY2lhbEVhc2luZ1t0aGlzLnByb3BdfHxhXSh0aGlzLnN0YXRlLGUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik7dGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3M7dGhpcy51cGRhdGUoKX1yZXR1cm4gdHJ1ZX19O2MuZXh0ZW5kKGMuZngse3RpY2s6ZnVuY3Rpb24oKXtmb3IodmFyIGE9Yy50aW1lcnMsYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0oKXx8YS5zcGxpY2UoYi0tLDEpO2EubGVuZ3RofHwKYy5meC5zdG9wKCl9LHN0b3A6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKFcpO1c9bnVsbH0sc3BlZWRzOntzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHN0ZXA6e29wYWNpdHk6ZnVuY3Rpb24oYSl7Yy5zdHlsZShhLmVsZW0sIm9wYWNpdHkiLGEubm93KX0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7aWYoYS5lbGVtLnN0eWxlJiZhLmVsZW0uc3R5bGVbYS5wcm9wXSE9bnVsbClhLmVsZW0uc3R5bGVbYS5wcm9wXT0oYS5wcm9wPT09IndpZHRoInx8YS5wcm9wPT09ImhlaWdodCI/TWF0aC5tYXgoMCxhLm5vdyk6YS5ub3cpK2EudW5pdDtlbHNlIGEuZWxlbVthLnByb3BdPWEubm93fX19KTtpZihjLmV4cHImJmMuZXhwci5maWx0ZXJzKWMuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBjLmdyZXAoYy50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5sZW5ndGh9O2MuZm4ub2Zmc2V0PSJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gcy5kb2N1bWVudEVsZW1lbnQ/CmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2Mub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsZSl9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGMub2Zmc2V0LmJvZHlPZmZzZXQoYik7dmFyIGQ9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxmPWIub3duZXJEb2N1bWVudDtiPWYuYm9keTtmPWYuZG9jdW1lbnRFbGVtZW50O3JldHVybnt0b3A6ZC50b3ArKHNlbGYucGFnZVlPZmZzZXR8fGMuc3VwcG9ydC5ib3hNb2RlbCYmZi5zY3JvbGxUb3B8fGIuc2Nyb2xsVG9wKS0oZi5jbGllbnRUb3B8fGIuY2xpZW50VG9wfHwwKSxsZWZ0OmQubGVmdCsoc2VsZi5wYWdlWE9mZnNldHx8Yy5zdXBwb3J0LmJveE1vZGVsJiZmLnNjcm9sbExlZnR8fGIuc2Nyb2xsTGVmdCktKGYuY2xpZW50TGVmdHx8Yi5jbGllbnRMZWZ0fHwwKX19OmZ1bmN0aW9uKGEpe3ZhciBiPQp0aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXtjLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLHIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBjLm9mZnNldC5ib2R5T2Zmc2V0KGIpO2Mub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgZD1iLm9mZnNldFBhcmVudCxmPWIsZT1iLm93bmVyRG9jdW1lbnQsaixpPWUuZG9jdW1lbnRFbGVtZW50LG89ZS5ib2R5O2Y9KGU9ZS5kZWZhdWx0Vmlldyk/ZS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGU7Zm9yKHZhciBrPWIub2Zmc2V0VG9wLG49Yi5vZmZzZXRMZWZ0OyhiPWIucGFyZW50Tm9kZSkmJmIhPT1vJiZiIT09aTspe2lmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmZi5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7aj1lP2UuZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlOwprLT1iLnNjcm9sbFRvcDtuLT1iLnNjcm9sbExlZnQ7aWYoYj09PWQpe2srPWIub2Zmc2V0VG9wO24rPWIub2Zmc2V0TGVmdDtpZihjLm9mZnNldC5kb2VzTm90QWRkQm9yZGVyJiYhKGMub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzJiYvXnQoYWJsZXxkfGgpJC9pLnRlc3QoYi5ub2RlTmFtZSkpKXtrKz1wYXJzZUZsb2F0KGouYm9yZGVyVG9wV2lkdGgpfHwwO24rPXBhcnNlRmxvYXQoai5ib3JkZXJMZWZ0V2lkdGgpfHwwfWY9ZDtkPWIub2Zmc2V0UGFyZW50fWlmKGMub2Zmc2V0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSYmai5vdmVyZmxvdyE9PSJ2aXNpYmxlIil7ays9cGFyc2VGbG9hdChqLmJvcmRlclRvcFdpZHRoKXx8MDtuKz1wYXJzZUZsb2F0KGouYm9yZGVyTGVmdFdpZHRoKXx8MH1mPWp9aWYoZi5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGYucG9zaXRpb249PT0ic3RhdGljIil7ays9by5vZmZzZXRUb3A7bis9by5vZmZzZXRMZWZ0fWlmKGMub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmCmYucG9zaXRpb249PT0iZml4ZWQiKXtrKz1NYXRoLm1heChpLnNjcm9sbFRvcCxvLnNjcm9sbFRvcCk7bis9TWF0aC5tYXgoaS5zY3JvbGxMZWZ0LG8uc2Nyb2xsTGVmdCl9cmV0dXJue3RvcDprLGxlZnQ6bn19O2Mub2Zmc2V0PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9cy5ib2R5LGI9cy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLGYsZSxqPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luVG9wIix0cnVlKSl8fDA7Yy5leHRlbmQoYi5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KTtiLmlubmVySFRNTD0iPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7Jz48ZGl2PjwvZGl2PjwvZGl2Pjx0YWJsZSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7JyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjsKYS5pbnNlcnRCZWZvcmUoYixhLmZpcnN0Q2hpbGQpO2Q9Yi5maXJzdENoaWxkO2Y9ZC5maXJzdENoaWxkO2U9ZC5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQ7dGhpcy5kb2VzTm90QWRkQm9yZGVyPWYub2Zmc2V0VG9wIT09NTt0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPWUub2Zmc2V0VG9wPT09NTtmLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCI7Zi5zdHlsZS50b3A9IjIwcHgiO3RoaXMuc3VwcG9ydHNGaXhlZFBvc2l0aW9uPWYub2Zmc2V0VG9wPT09MjB8fGYub2Zmc2V0VG9wPT09MTU7Zi5zdHlsZS5wb3NpdGlvbj1mLnN0eWxlLnRvcD0iIjtkLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Quc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjt0aGlzLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZT1mLm9mZnNldFRvcD09PS01O3RoaXMuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9YS5vZmZzZXRUb3AhPT1qO2EucmVtb3ZlQ2hpbGQoYik7CmMub2Zmc2V0LmluaXRpYWxpemU9Yy5ub29wfSxib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGQ9YS5vZmZzZXRMZWZ0O2Mub2Zmc2V0LmluaXRpYWxpemUoKTtpZihjLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCl7Yis9cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJtYXJnaW5Ub3AiLHRydWUpKXx8MDtkKz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGEsIm1hcmdpbkxlZnQiLHRydWUpKXx8MH1yZXR1cm57dG9wOmIsbGVmdDpkfX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixkKXtpZigvc3RhdGljLy50ZXN0KGMuY3VyQ1NTKGEsInBvc2l0aW9uIikpKWEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjt2YXIgZj1jKGEpLGU9Zi5vZmZzZXQoKSxqPXBhcnNlSW50KGMuY3VyQ1NTKGEsInRvcCIsdHJ1ZSksMTApfHwwLGk9cGFyc2VJbnQoYy5jdXJDU1MoYSwibGVmdCIsdHJ1ZSksMTApfHwwO2lmKGMuaXNGdW5jdGlvbihiKSliPWIuY2FsbChhLApkLGUpO2Q9e3RvcDpiLnRvcC1lLnRvcCtqLGxlZnQ6Yi5sZWZ0LWUubGVmdCtpfTsidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxkKTpmLmNzcyhkKX19O2MuZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGQ9dGhpcy5vZmZzZXQoKSxmPS9eYm9keXxodG1sJC9pLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtkLnRvcC09cGFyc2VGbG9hdChjLmN1ckNTUyhhLCJtYXJnaW5Ub3AiLHRydWUpKXx8MDtkLmxlZnQtPXBhcnNlRmxvYXQoYy5jdXJDU1MoYSwibWFyZ2luTGVmdCIsdHJ1ZSkpfHwwO2YudG9wKz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGJbMF0sImJvcmRlclRvcFdpZHRoIix0cnVlKSl8fDA7Zi5sZWZ0Kz1wYXJzZUZsb2F0KGMuY3VyQ1NTKGJbMF0sImJvcmRlckxlZnRXaWR0aCIsdHJ1ZSkpfHwwO3JldHVybnt0b3A6ZC50b3AtCmYudG9wLGxlZnQ6ZC5sZWZ0LWYubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8cy5ib2R5O2EmJiEvXmJvZHl8aHRtbCQvaS50ZXN0KGEubm9kZU5hbWUpJiZjLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyI7KWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KTtjLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxiKXt2YXIgZD0ic2Nyb2xsIitiO2MuZm5bZF09ZnVuY3Rpb24oZil7dmFyIGU9dGhpc1swXSxqO2lmKCFlKXJldHVybiBudWxsO2lmKGYhPT13KXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihqPXdhKHRoaXMpKWouc2Nyb2xsVG8oIWE/ZjpjKGopLnNjcm9sbExlZnQoKSxhP2Y6YyhqKS5zY3JvbGxUb3AoKSk7ZWxzZSB0aGlzW2RdPWZ9KTtlbHNlIHJldHVybihqPXdhKGUpKT8icGFnZVhPZmZzZXQiaW4gaj9qW2E/InBhZ2VZT2Zmc2V0IjoKInBhZ2VYT2Zmc2V0Il06Yy5zdXBwb3J0LmJveE1vZGVsJiZqLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8ai5kb2N1bWVudC5ib2R5W2RdOmVbZF19fSk7Yy5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGIpe3ZhciBkPWIudG9Mb3dlckNhc2UoKTtjLmZuWyJpbm5lciIrYl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXT9jLmNzcyh0aGlzWzBdLGQsZmFsc2UsInBhZGRpbmciKTpudWxsfTtjLmZuWyJvdXRlciIrYl09ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXNbMF0/Yy5jc3ModGhpc1swXSxkLGZhbHNlLGY/Im1hcmdpbiI6ImJvcmRlciIpOm51bGx9O2MuZm5bZF09ZnVuY3Rpb24oZil7dmFyIGU9dGhpc1swXTtpZighZSlyZXR1cm4gZj09bnVsbD9udWxsOnRoaXM7aWYoYy5pc0Z1bmN0aW9uKGYpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oail7dmFyIGk9Yyh0aGlzKTtpW2RdKGYuY2FsbCh0aGlzLGosaVtkXSgpKSl9KTtyZXR1cm4ic2Nyb2xsVG8iaW4KZSYmZS5kb2N1bWVudD9lLmRvY3VtZW50LmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCImJmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2JdfHxlLmRvY3VtZW50LmJvZHlbImNsaWVudCIrYl06ZS5ub2RlVHlwZT09PTk/TWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYl0sZS5ib2R5WyJzY3JvbGwiK2JdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2JdLGUuYm9keVsib2Zmc2V0IitiXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitiXSk6Zj09PXc/Yy5jc3MoZSxkKTp0aGlzLmNzcyhkLHR5cGVvZiBmPT09InN0cmluZyI/ZjpmKyJweCIpfX0pO0EualF1ZXJ5PUEuJD1jfSkod2luZG93KTsK]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ3ByZXVuaW5zdGFsbCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgdGhlIFBsYW55byBtb2R1bGU/JzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnUGxhbnlvIFJlc2VydmF0aW9uIFN5c3RlbSBtb2R1bGUgc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCEnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1BsYW55byBzdWNjZXNzZnVsbHkgdW4taW5zdGFsbGVkLic7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdQbGFueW8gUmVzZXJ2YXRpb24gU3lzdGVtJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQSBtb2R1bGUgZm9yIGZhY2lsaXRhdGluZyBTT0FQIHRyYW5zYWN0aW9ucyB3aXRoaW4gQ01TTVMnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnSW5zdGFsbGVkJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnVXBncmFkZWQnOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvcic7CiRsYW5nWydoZWxwY29udGVudCddID0gIgpQbGFueW8gaXMgYSBjb21taXNzaW9uLWZyZWUgZmxleGlibGUgb25saW5lIHJlc2VydmF0aW9uIHN5c3RlbSBmb3IgYW55IGtpbmQgb2YgcmVzb3VyY2VzIHN1Y2ggYXMgaG90ZWxzLCBob2xpZGF5IGFwYXJ0bWVudHMsIHlhY2h0IHJlbnRhbHMsIGRyaXZpbmcgc2Nob29scywgdGVubmlzIGNvdXJ0cywgZG9jdG9yIGFwcG9pbnRtZW50cywgZXZlbnRzIGV0Yy4NCjxiciAvPjxiciAvPg0KUGxhbnlvIGlzIGF2YWlsYWJsZSBpbiAxMCBsYW5ndWFnZXMgYW5kIGhlbHBzIHlvdSBtYW5hZ2UgeW91ciBjbGllbnRzJyBib29raW5ncyBieSBoYW5kbGluZyBhbGwgZW1haWwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBjbGllbnRzLCBhbGxvd2luZyB2YXJpb3VzIGJvb2tpbmcgY29uZmlybWF0aW9uIG1lY2hhbmlzbXMsIGhhbmRsaW5nIHBheW1lbnRzIChhbHNvIG9ubGluZSBjcmVkaXQgY2FyZCBwYXltZW50cyksIHByaW50aW5nIGludm9pY2VzIGV0Yy4NCjxiciAvPjxiciAvPg0KVGhpcyBtb2R1bGUgZW1iZWRzIHRoZSByZXNlcnZhdGlvbiBzeXN0ZW0gKGF2YWlsYWJpbGl0eSBzZWFyY2ggYm94IGFuZCB0aGUgcmVzZXJ2YXRpb24gZm9ybSkgaW50byB5b3VyIHNpdGUgc28gdGhlIHZpc2l0b3JzIGNhbiBnbyB0aHJvdWdoIHRoZSB3aG9sZSBwcm9jZXNzIChzZWFyY2ggYW5kIHJlc2VydmF0aW9uKSB3aXRob3V0IGV2ZXIgbGVhdmluZyB5b3VyIHdlYnNpdGUuIEJlZm9yZSB1c2luZyB0aGlzIG1vZHVsZSB5b3Ugc2hvdWxkIGNyZWF0ZSBhbiBhY2NvdW50IGF0IHBsYW55by5jb20uIAo8YnIgLz4KUGxlYXNlIHNlZSBodHRwOi8vd3d3LnBsYW55by5jb20vY21zbXMtcmVzZXJ2YXRpb24tc3lzdGVtIGZvciBtb3JlIGluZm8uIFlvdSBjYW4gYWxzbyBzZWUgb3VyIGhvbWUgcGFnZSBhdCBodHRwOi8vd3d3LnBsYW55by5jb20gZm9yIGFkbWluIGJhY2tvZmZpY2Ugb3IgdmlzaXRvciBkZW1vbnN0cmF0aW9uLCBvciBmb3IgdHV0b3JpYWwgbW92aWVzLCBwcmljaW5nIGFuZCBtb3JlIGluZm8uIAo8YnIgLz4KPGgzPlVzYWdlPC9oMz4KT25jZSB5b3UgaGF2ZSB0aGUgUGxhbnlvIG1vZHVsZSBpbnN0YWxsZWQsIGdvIHRvIHRoZSBwYWdlIHdoZXJlIHlvdSB3YW50IHRvIHNob3cgdGhlIHNlYXJjaCBmb3JtIGFuZCBhZGQgdGhlIFBsYW55byBtb2R1bGUgdGFnLiAKRm9yIGRlbW8gcHVycG9zZXMgeW91IG1heSBhZGQgdGhlIHRhZyB3aXRob3V0IGFueSBwYXJhbWV0ZXJzOjxiciAvPjxiciAvPgp7Y21zX21vZHVsZSBtb2R1bGU9J1BsYW55byd9PGJyIC8+PGJyIC8+Ck90aGVyd2lzZSwgYXMgYSBtaW5pbXVtLCB0aGUgdGFnIHJlcXVpcmVzIHlvdXIgc2l0ZSBJRCAoaWYgeW91IGRvbid0IGhhdmUgb25lLCBjcmVhdGUgYSBuZXcgc2l0ZSBhdCB3d3cucGxhbnlvLmNvbSk8YnIgLz48YnIgLz4Ke2Ntc19tb2R1bGUgbW9kdWxlPSdQbGFueW8nIHNpdGU9JzExJ308YnIgLz48YnIgLz4KU2VlIHRoZSB0YWJsZSBiZWxvdyBmb3IgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHBhcmFtZXRlcnMgdGhhdCB5b3UgY2FuIGFkZGl0aW9uYWxseSB1c2UgaW4gdGhlIHRhZy48YnIgLz4KCjxoMz5PcHRpb25hbCBQYXJhbWV0ZXJzPC9oMz4KPHRhYmxlIHdpZHRoPScxMDAlJyBib3JkZXI9JzEnIGNlbGxwYWRkaW5nPSczJz4KPHRib2R5Pgo8dHI+PHRoPlBhcmFtZXRlcjwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48dGg+RGVmYXVsdDwvdGg+PC90cj4KPHRyPjx0ZD5zaXRlPC90ZD48dGQ+cGxhbnlvIHNpdGUgSUQ8L3RkPjx0ZD48Yj5kZW1vPC9iPiAoPSBkZW1vIHNpdGUpPC90ZD48L3RyPgo8dHI+PHRkPmxhbmd1YWdlPC90ZD48dGQ+bGFuZ3VhZ2Ugb2YgdGhlIHVzZXIgaW50ZXJmYWNlOyBjdXJyZW50bHkgc3VwcG9ydGVkIGxhbmd1YWdlczogRU4sIEZSLCBERSwgSVQsIEVTLCBQTCwgREssIEZJLCBTRSwgSVMsIFJPPC90ZD48dGQ+PGI+RU48L2I+ICg9IEVuZ2xpc2gpPC90ZD48L3RyPgo8dHI+PHRkPmV4dHJhX3NlYXJjaF9maWVsZHM8L3RkPjx0ZD5jb21tYS1zZXBhcmF0ZWQgZXh0cmEgZmllbGRzIGluIHRoZSBzZWFyY2ggYm94PC90ZD48dGQ+bm9uZTwvdGQ+PC90cj4KPHRyPjx0ZD5zb3J0X2ZpZWxkczwvdGQ+PHRkPmNvbW1hLXNlcGFyYXRlZCBzb3J0IGZpZWxkczsgYSBzaW5nbGUgZmllbGQgd2lsbCBoaWRlIHRoZSBzb3J0IGRyb3Bkb3duIGJveDwvdGQ+PHRkPm5vbmU8L3RkPjwvdHI+Cjx0cj48dGQ+ZGVmYXVsdF9tb2RlPC90ZD48dGQ+Q2hvb3NlIHRoZSBpbml0aWFsIG1vZGU6ICdzZWFyY2gnIHRvIGFsbG93IGNsaWVudHMgdG8gc2VhcmNoIGZvciBhdmFpbGFibGUgZGF0ZXMgb3IgJ3Jlc291cmNlcycgdG8gZGlzcGxheSBhIGxpc3Qgb2YgYWxsIHJlc291cmNlcyAoaW4gc3VjaCBjYXNlIHNlYXJjaCBtdXN0IGJlIGluaXRpYXRlZCBieSBlbWJlZGRpbmcgYW4gZXh0cmEgc2VhcmNoIGJveCAtLSBzZWUgbGFzdCBzdGVwIG9mIGludGVncmF0aW9uIGluIFBsYW55bydzIGFkbWluIHBhbmVsKS4gQ2hvb3NpbmcgJ2VtcHR5JyB3aWxsIG5vdCBkaXNwbGF5IGFueXRoaW5nIGJ5IGRlZmF1bHQgYnV0IHdpbGwgcmVxdWlyZSB5b3UgdG8gZWl0aGVyIHBhc3MgdGhlIHJlc291cmNlIElEIHRvIHRoZSBtb2R1bGUgYXMgcGFyYW1ldGVyIGluIHRoZSBVUkwgKHJlc291cmNlX2lkKSBvciBhZGQgYW4gZXh0ZXJuYWwgc2VhcmNoIGJveCBvciBjYWxlbmRhciBwcmV2aWV3PC90ZD48dGQ+PGI+cmVzb3VyY2VzPC9iPjwvdGQ+PC90cj4KPHRyPjx0ZD5qc19mcmFtZXdvcms8L3RkPjx0ZD5PbmUgb2Y6ICdqcXVlcnknLCAnanF1ZXJ5LW5vaW5jbHVkZScsICdtb290b29scycsICdtb290b29scy1ub2luY2x1ZGUnOyBDaG9vc2UgdGhlIEphdmFzY3JpcHQgZnJhbWV3b3JrIHdoaWNoIHdpbGwgYmUgdXNlZCBieSBQbGFueW8uIFBsYW55byB3b3JrcyB3aXRoIGJvdGggbW9vdG9vbHMgYW5kIGpRdWVyeS4gTGVhdmUgdGhlIGRlZmF1bHQgaWYgeW91J3JlIG5vdCBzdXJlIHdoaWNoIG9uZSB0byBjaG9vc2UuIENoYW5nZSB0byAnbW9vdG9vbHMnIGlmIHlvdSBhbHJlYWR5IHVzZSBtb290b29scyBvbiB5b3VyIHdlYnNpdGUgYW5kIGRvbid0IHdhbnQgdG8gaW5jbHVkZSBtdWx0aXBsZSBKUyBmcmFtZXdvcmtzLiBJZiBvdGhlciBwYXJ0cyBvZiB5b3VyIHdlYnNpdGUgYWxyZWFkeSB1c2UgdGhlIGxpYnJhcnkgY2hvc2VuLCBjaG9vc2UgdGhlICd4eHgtbm9pbmNsdWRlJyB2ZXJzaW9uIHRvIGF2b2lkIGluY2x1ZGluZyB0aGUgbGlicmFyeSB0d2ljZTwvdGQ+PHRkPjxiPmpxdWVyeTwvYj48L3RkPjwvdHI+CjwvdGJvZHk+PC90YWJsZT4KPGJyIC8+PGJyIC8+CiI7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICcKPHVsPgo8bGk+MS4wIC0gTWF5LCAyMDExCjxwPlRoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgdGhlIG1vZHVsZS48L3A+CjwvbGk+CjwvdWw+Cic7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/mobile.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCI+DQo8aHRtbD4NCjxoZWFkPiAgICANCiAgICA8dGl0bGU+TWFrZSByZXNlcnZhdGlvbjwvdGl0bGU+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCIgLz4NCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgKiB7bWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweDsgYm9yZGVyOiAwcHg7fQogICAgICBodG1sIHtoZWlnaHQ6IDEwMCU7fQ0KICAgICAgYm9keSB7aGVpZ2h0OiAxMDAlO30NCiAgICA8L3N0eWxlPg0KPC9oZWFkPgo8Ym9keT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBwbGFueW9fZ2V0X3BhcmFtIChuYW1lKSB7CiAgbmFtZSA9IG5hbWUucmVwbGFjZSgvW1xbXS8sIlxcXFsiKS5yZXBsYWNlKC9bXF1dLywiXFxcXSIpOwogIHZhciByZWdleFMgPSAiW1xcPyZdIituYW1lKyI9KFteJiNdKikiOwogIHZhciByZWdleCA9IG5ldyBSZWdFeHAgKHJlZ2V4Uyk7CiAgdmFyIHJlc3VsdHMgPSByZWdleC5leGVjICh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgaWYgKHJlc3VsdHMgPT0gbnVsbCkKICAgIHJldHVybiBudWxsOwogIGVsc2UKICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0c1sxXSkucmVwbGFjZSgvXCsvZywgJyAnKTsKfQp2YXIgdGl0bGUgPSBwbGFueW9fZ2V0X3BhcmFtICgndCcpOwppZiAodGl0bGUpCiAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZTsgICAKZG9jdW1lbnQud3JpdGUgKCI8aWZyYW1lIHNyYz1cIiIgKyBwbGFueW9fZ2V0X3BhcmFtICgnc3JjJykgKyAiXCIgd2lkdGg9JzEwMCUnIHN0eWxlPSdtaW4taGVpZ2h0Ojk4JTsnIGZyYW1lYm9yZGVyPScwJyBtYXJnaW5oZWlnaHQ9JzAnIG1hcmdpbndpZHRoPScwJz4iKTsNCiBkb2N1bWVudC53cml0ZSAoIiA8cD5Zb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBpZnJhbWVzLjwvcD4iKTsNCmRvY3VtZW50LndyaXRlICgiPC9pZnJhbWU+Iik7Cjwvc2NyaXB0PgoKPC9ib2R5Pg==]]></data>
	</file>
	<file>
	  <filename>/mootools-1.2-core.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly9Nb29Ub29scywgPGh0dHA6Ly9tb290b29scy5uZXQ+LCBNeSBPYmplY3QgT3JpZW50ZWQgKEphdmFTY3JpcHQpIFRvb2xzLiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBWYWxlcmlvIFByb2lldHRpLCA8aHR0cDovL21hZDRtaWxrLm5ldD4sIE1JVCBTdHlsZSBMaWNlbnNlLgoKdmFyIE1vb1Rvb2xzPXt2ZXJzaW9uOiIxLjIuNCIsYnVpbGQ6IjBkOTExMzI0MWE5MGI5Y2Q1NjQzYjkyNjc5NTg1MmEyMDI2NzEwZDQifTt2YXIgTmF0aXZlPWZ1bmN0aW9uKGspe2s9a3x8e307dmFyIGE9ay5uYW1lO3ZhciBpPWsubGVnYWN5O3ZhciBiPWsucHJvdGVjdDsKdmFyIGM9ay5pbXBsZW1lbnQ7dmFyIGg9ay5nZW5lcmljczt2YXIgZj1rLmluaXRpYWxpemU7dmFyIGc9ay5hZnRlckltcGxlbWVudHx8ZnVuY3Rpb24oKXt9O3ZhciBkPWZ8fGk7aD1oIT09ZmFsc2U7ZC5jb25zdHJ1Y3Rvcj1OYXRpdmU7ZC4kZmFtaWx5PXtuYW1lOiJuYXRpdmUifTsKaWYoaSYmZil7ZC5wcm90b3R5cGU9aS5wcm90b3R5cGU7fWQucHJvdG90eXBlLmNvbnN0cnVjdG9yPWQ7aWYoYSl7dmFyIGU9YS50b0xvd2VyQ2FzZSgpO2QucHJvdG90eXBlLiRmYW1pbHk9e25hbWU6ZX07TmF0aXZlLnR5cGl6ZShkLGUpO312YXIgaj1mdW5jdGlvbihuLGwsbyxtKXtpZighYnx8bXx8IW4ucHJvdG90eXBlW2xdKXtuLnByb3RvdHlwZVtsXT1vOwp9aWYoaCl7TmF0aXZlLmdlbmVyaWNpemUobixsLGIpO31nLmNhbGwobixsLG8pO3JldHVybiBuO307ZC5hbGlhcz1mdW5jdGlvbihuLGwscCl7aWYodHlwZW9mIG49PSJzdHJpbmciKXt2YXIgbz10aGlzLnByb3RvdHlwZVtuXTtpZigobj1vKSl7cmV0dXJuIGoodGhpcyxsLG4scCk7Cn19Zm9yKHZhciBtIGluIG4pe3RoaXMuYWxpYXMobSxuW21dLGwpO31yZXR1cm4gdGhpczt9O2QuaW1wbGVtZW50PWZ1bmN0aW9uKG0sbCxvKXtpZih0eXBlb2YgbT09InN0cmluZyIpe3JldHVybiBqKHRoaXMsbSxsLG8pO31mb3IodmFyIG4gaW4gbSl7aih0aGlzLG4sbVtuXSxsKTsKfXJldHVybiB0aGlzO307aWYoYyl7ZC5pbXBsZW1lbnQoYyk7fXJldHVybiBkO307TmF0aXZlLmdlbmVyaWNpemU9ZnVuY3Rpb24oYixjLGEpe2lmKCghYXx8IWJbY10pJiZ0eXBlb2YgYi5wcm90b3R5cGVbY109PSJmdW5jdGlvbiIpe2JbY109ZnVuY3Rpb24oKXt2YXIgZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwpyZXR1cm4gYi5wcm90b3R5cGVbY10uYXBwbHkoZC5zaGlmdCgpLGQpO307fX07TmF0aXZlLmltcGxlbWVudD1mdW5jdGlvbihkLGMpe2Zvcih2YXIgYj0wLGE9ZC5sZW5ndGg7YjxhO2IrKyl7ZFtiXS5pbXBsZW1lbnQoYyk7fX07TmF0aXZlLnR5cGl6ZT1mdW5jdGlvbihhLGIpe2lmKCFhLnR5cGUpe2EudHlwZT1mdW5jdGlvbihjKXtyZXR1cm4oJHR5cGUoYyk9PT1iKTsKfTt9fTsoZnVuY3Rpb24oKXt2YXIgYT17QXJyYXk6QXJyYXksRGF0ZTpEYXRlLEZ1bmN0aW9uOkZ1bmN0aW9uLE51bWJlcjpOdW1iZXIsUmVnRXhwOlJlZ0V4cCxTdHJpbmc6U3RyaW5nfTtmb3IodmFyIGggaW4gYSl7bmV3IE5hdGl2ZSh7bmFtZTpoLGluaXRpYWxpemU6YVtoXSxwcm90ZWN0OnRydWV9KTsKfXZhciBkPXsiYm9vbGVhbiI6Qm9vbGVhbiwibmF0aXZlIjpOYXRpdmUsb2JqZWN0Ok9iamVjdH07Zm9yKHZhciBjIGluIGQpe05hdGl2ZS50eXBpemUoZFtjXSxjKTt9dmFyIGY9e0FycmF5OlsiY29uY2F0IiwiaW5kZXhPZiIsImpvaW4iLCJsYXN0SW5kZXhPZiIsInBvcCIsInB1c2giLCJyZXZlcnNlIiwic2hpZnQiLCJzbGljZSIsInNvcnQiLCJzcGxpY2UiLCJ0b1N0cmluZyIsInVuc2hpZnQiLCJ2YWx1ZU9mIl0sU3RyaW5nOlsiY2hhckF0IiwiY2hhckNvZGVBdCIsImNvbmNhdCIsImluZGV4T2YiLCJsYXN0SW5kZXhPZiIsIm1hdGNoIiwicmVwbGFjZSIsInNlYXJjaCIsInNsaWNlIiwic3BsaXQiLCJzdWJzdHIiLCJzdWJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIsInRvVXBwZXJDYXNlIiwidmFsdWVPZiJdfTsKZm9yKHZhciBlIGluIGYpe2Zvcih2YXIgYj1mW2VdLmxlbmd0aDtiLS07KXtOYXRpdmUuZ2VuZXJpY2l6ZShhW2VdLGZbZV1bYl0sdHJ1ZSk7fX19KSgpO3ZhciBIYXNoPW5ldyBOYXRpdmUoe25hbWU6Ikhhc2giLGluaXRpYWxpemU6ZnVuY3Rpb24oYSl7aWYoJHR5cGUoYSk9PSJoYXNoIil7YT0kdW5saW5rKGEuZ2V0Q2xlYW4oKSk7Cn1mb3IodmFyIGIgaW4gYSl7dGhpc1tiXT1hW2JdO31yZXR1cm4gdGhpczt9fSk7SGFzaC5pbXBsZW1lbnQoe2ZvckVhY2g6ZnVuY3Rpb24oYixjKXtmb3IodmFyIGEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShhKSl7Yi5jYWxsKGMsdGhpc1thXSxhLHRoaXMpOwp9fX0sZ2V0Q2xlYW46ZnVuY3Rpb24oKXt2YXIgYj17fTtmb3IodmFyIGEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShhKSl7YlthXT10aGlzW2FdO319cmV0dXJuIGI7fSxnZXRMZW5ndGg6ZnVuY3Rpb24oKXt2YXIgYj0wO2Zvcih2YXIgYSBpbiB0aGlzKXtpZih0aGlzLmhhc093blByb3BlcnR5KGEpKXtiKys7Cn19cmV0dXJuIGI7fX0pO0hhc2guYWxpYXMoImZvckVhY2giLCJlYWNoIik7QXJyYXkuaW1wbGVtZW50KHtmb3JFYWNoOmZ1bmN0aW9uKGMsZCl7Zm9yKHZhciBiPTAsYT10aGlzLmxlbmd0aDtiPGE7YisrKXtjLmNhbGwoZCx0aGlzW2JdLGIsdGhpcyk7fX19KTtBcnJheS5hbGlhcygiZm9yRWFjaCIsImVhY2giKTsKZnVuY3Rpb24gJEEoYil7aWYoYi5pdGVtKXt2YXIgYT1iLmxlbmd0aCxjPW5ldyBBcnJheShhKTt3aGlsZShhLS0pe2NbYV09YlthXTt9cmV0dXJuIGM7fXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiKTt9ZnVuY3Rpb24gJGFyZ3VtZW50cyhhKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzW2FdOwp9O31mdW5jdGlvbiAkY2hrKGEpe3JldHVybiAhIShhfHxhPT09MCk7fWZ1bmN0aW9uICRjbGVhcihhKXtjbGVhclRpbWVvdXQoYSk7Y2xlYXJJbnRlcnZhbChhKTtyZXR1cm4gbnVsbDt9ZnVuY3Rpb24gJGRlZmluZWQoYSl7cmV0dXJuKGEhPXVuZGVmaW5lZCk7fWZ1bmN0aW9uICRlYWNoKGMsYixkKXt2YXIgYT0kdHlwZShjKTsKKChhPT0iYXJndW1lbnRzInx8YT09ImNvbGxlY3Rpb24ifHxhPT0iYXJyYXkiKT9BcnJheTpIYXNoKS5lYWNoKGMsYixkKTt9ZnVuY3Rpb24gJGVtcHR5KCl7fWZ1bmN0aW9uICRleHRlbmQoYyxhKXtmb3IodmFyIGIgaW4gKGF8fHt9KSl7Y1tiXT1hW2JdO31yZXR1cm4gYzsKfWZ1bmN0aW9uICRIKGEpe3JldHVybiBuZXcgSGFzaChhKTt9ZnVuY3Rpb24gJGxhbWJkYShhKXtyZXR1cm4oJHR5cGUoYSk9PSJmdW5jdGlvbiIpP2E6ZnVuY3Rpb24oKXtyZXR1cm4gYTt9O31mdW5jdGlvbiAkbWVyZ2UoKXt2YXIgYT1BcnJheS5zbGljZShhcmd1bWVudHMpOwphLnVuc2hpZnQoe30pO3JldHVybiAkbWl4aW4uYXBwbHkobnVsbCxhKTt9ZnVuY3Rpb24gJG1peGluKGUpe2Zvcih2YXIgZD0xLGE9YXJndW1lbnRzLmxlbmd0aDtkPGE7ZCsrKXt2YXIgYj1hcmd1bWVudHNbZF07aWYoJHR5cGUoYikhPSJvYmplY3QiKXtjb250aW51ZTsKfWZvcih2YXIgYyBpbiBiKXt2YXIgZz1iW2NdLGY9ZVtjXTtlW2NdPShmJiYkdHlwZShnKT09Im9iamVjdCImJiR0eXBlKGYpPT0ib2JqZWN0Iik/JG1peGluKGYsZyk6JHVubGluayhnKTt9fXJldHVybiBlO31mdW5jdGlvbiAkcGljaygpe2Zvcih2YXIgYj0wLGE9YXJndW1lbnRzLmxlbmd0aDsKYjxhO2IrKyl7aWYoYXJndW1lbnRzW2JdIT11bmRlZmluZWQpe3JldHVybiBhcmd1bWVudHNbYl07fX1yZXR1cm4gbnVsbDt9ZnVuY3Rpb24gJHJhbmRvbShiLGEpe3JldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKGEtYisxKStiKTt9ZnVuY3Rpb24gJHNwbGF0KGIpe3ZhciBhPSR0eXBlKGIpOwpyZXR1cm4oYSk/KChhIT0iYXJyYXkiJiZhIT0iYXJndW1lbnRzIik/W2JdOmIpOltdO312YXIgJHRpbWU9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuICtuZXcgRGF0ZTt9O2Z1bmN0aW9uICR0cnkoKXtmb3IodmFyIGI9MCxhPWFyZ3VtZW50cy5sZW5ndGg7YjxhOwpiKyspe3RyeXtyZXR1cm4gYXJndW1lbnRzW2JdKCk7fWNhdGNoKGMpe319cmV0dXJuIG51bGw7fWZ1bmN0aW9uICR0eXBlKGEpe2lmKGE9PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO31pZihhLiRmYW1pbHkpe3JldHVybihhLiRmYW1pbHkubmFtZT09Im51bWJlciImJiFpc0Zpbml0ZShhKSk/ZmFsc2U6YS4kZmFtaWx5Lm5hbWU7Cn1pZihhLm5vZGVOYW1lKXtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOnJldHVybiJlbGVtZW50IjtjYXNlIDM6cmV0dXJuKC9cUy8pLnRlc3QoYS5ub2RlVmFsdWUpPyJ0ZXh0bm9kZSI6IndoaXRlc3BhY2UiO319ZWxzZXtpZih0eXBlb2YgYS5sZW5ndGg9PSJudW1iZXIiKXtpZihhLmNhbGxlZSl7cmV0dXJuImFyZ3VtZW50cyI7Cn1lbHNle2lmKGEuaXRlbSl7cmV0dXJuImNvbGxlY3Rpb24iO319fX1yZXR1cm4gdHlwZW9mIGE7fWZ1bmN0aW9uICR1bmxpbmsoYyl7dmFyIGI7c3dpdGNoKCR0eXBlKGMpKXtjYXNlIm9iamVjdCI6Yj17fTtmb3IodmFyIGUgaW4gYyl7YltlXT0kdW5saW5rKGNbZV0pOwp9YnJlYWs7Y2FzZSJoYXNoIjpiPW5ldyBIYXNoKGMpO2JyZWFrO2Nhc2UiYXJyYXkiOmI9W107Zm9yKHZhciBkPTAsYT1jLmxlbmd0aDtkPGE7ZCsrKXtiW2RdPSR1bmxpbmsoY1tkXSk7fWJyZWFrO2RlZmF1bHQ6cmV0dXJuIGM7fXJldHVybiBiO312YXIgQnJvd3Nlcj0kbWVyZ2Uoe0VuZ2luZTp7bmFtZToidW5rbm93biIsdmVyc2lvbjowfSxQbGF0Zm9ybTp7bmFtZTood2luZG93Lm9yaWVudGF0aW9uIT11bmRlZmluZWQpPyJpcG9kIjoobmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKC9tYWN8d2lufGxpbnV4L2kpfHxbIm90aGVyIl0pWzBdLnRvTG93ZXJDYXNlKCl9LEZlYXR1cmVzOnt4cGF0aDohIShkb2N1bWVudC5ldmFsdWF0ZSksYWlyOiEhKHdpbmRvdy5ydW50aW1lKSxxdWVyeTohIShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKX0sUGx1Z2luczp7fSxFbmdpbmVzOntwcmVzdG86ZnVuY3Rpb24oKXtyZXR1cm4oIXdpbmRvdy5vcGVyYSk/ZmFsc2U6KChhcmd1bWVudHMuY2FsbGVlLmNhbGxlcik/OTYwOigoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSk/OTUwOjkyNSkpOwp9LHRyaWRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4oIXdpbmRvdy5BY3RpdmVYT2JqZWN0KT9mYWxzZTooKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCk/KChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKT82OjUpOjQpO30sd2Via2l0OmZ1bmN0aW9uKCl7cmV0dXJuKG5hdmlnYXRvci50YWludEVuYWJsZWQpP2ZhbHNlOigoQnJvd3Nlci5GZWF0dXJlcy54cGF0aCk/KChCcm93c2VyLkZlYXR1cmVzLnF1ZXJ5KT81MjU6NDIwKTo0MTkpOwp9LGdlY2tvOmZ1bmN0aW9uKCl7cmV0dXJuKCFkb2N1bWVudC5nZXRCb3hPYmplY3RGb3ImJndpbmRvdy5tb3pJbm5lclNjcmVlblg9PW51bGwpP2ZhbHNlOigoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSk/MTk6MTgpO319fSxCcm93c2VyfHx7fSk7QnJvd3Nlci5QbGF0Zm9ybVtCcm93c2VyLlBsYXRmb3JtLm5hbWVdPXRydWU7CkJyb3dzZXIuZGV0ZWN0PWZ1bmN0aW9uKCl7Zm9yKHZhciBiIGluIHRoaXMuRW5naW5lcyl7dmFyIGE9dGhpcy5FbmdpbmVzW2JdKCk7aWYoYSl7dGhpcy5FbmdpbmU9e25hbWU6Yix2ZXJzaW9uOmF9O3RoaXMuRW5naW5lW2JdPXRoaXMuRW5naW5lW2IrYV09dHJ1ZTsKYnJlYWs7fX1yZXR1cm57bmFtZTpiLHZlcnNpb246YX07fTtCcm93c2VyLmRldGVjdCgpO0Jyb3dzZXIuUmVxdWVzdD1mdW5jdGlvbigpe3JldHVybiAkdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO30sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1TWE1MMi5YTUxIVFRQIik7Cn0sZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7fSk7fTtCcm93c2VyLkZlYXR1cmVzLnhocj0hIShCcm93c2VyLlJlcXVlc3QoKSk7QnJvd3Nlci5QbHVnaW5zLkZsYXNoPShmdW5jdGlvbigpe3ZhciBhPSgkdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5wbHVnaW5zWyJTaG9ja3dhdmUgRmxhc2giXS5kZXNjcmlwdGlvbjsKfSxmdW5jdGlvbigpe3JldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiU2hvY2t3YXZlRmxhc2guU2hvY2t3YXZlRmxhc2giKS5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTt9KXx8IjAgcjAiKS5tYXRjaCgvXGQrL2cpO3JldHVybnt2ZXJzaW9uOnBhcnNlSW50KGFbMF18fDArIi4iK2FbMV0sMTApfHwwLGJ1aWxkOnBhcnNlSW50KGFbMl0sMTApfHwwfTsKfSkoKTtmdW5jdGlvbiAkZXhlYyhiKXtpZighYil7cmV0dXJuIGI7fWlmKHdpbmRvdy5leGVjU2NyaXB0KXt3aW5kb3cuZXhlY1NjcmlwdChiKTt9ZWxzZXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTthLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvamF2YXNjcmlwdCIpOwphWyhCcm93c2VyLkVuZ2luZS53ZWJraXQmJkJyb3dzZXIuRW5naW5lLnZlcnNpb248NDIwKT8iaW5uZXJUZXh0IjoidGV4dCJdPWI7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChhKTtkb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGEpO31yZXR1cm4gYjt9TmF0aXZlLlVJRD0xOwp2YXIgJHVpZD0oQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/ZnVuY3Rpb24oYSl7cmV0dXJuKGEudWlkfHwoYS51aWQ9W05hdGl2ZS5VSUQrK10pKVswXTt9OmZ1bmN0aW9uKGEpe3JldHVybiBhLnVpZHx8KGEudWlkPU5hdGl2ZS5VSUQrKyk7fTt2YXIgV2luZG93PW5ldyBOYXRpdmUoe25hbWU6IldpbmRvdyIsbGVnYWN5OihCcm93c2VyLkVuZ2luZS50cmlkZW50KT9udWxsOndpbmRvdy5XaW5kb3csaW5pdGlhbGl6ZTpmdW5jdGlvbihhKXskdWlkKGEpOwppZighYS5FbGVtZW50KXthLkVsZW1lbnQ9JGVtcHR5O2lmKEJyb3dzZXIuRW5naW5lLndlYmtpdCl7YS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTt9YS5FbGVtZW50LnByb3RvdHlwZT0oQnJvd3Nlci5FbmdpbmUud2Via2l0KT93aW5kb3dbIltbRE9NRWxlbWVudC5wcm90b3R5cGVdXSJdOnt9Owp9YS5kb2N1bWVudC53aW5kb3c9YTtyZXR1cm4gJGV4dGVuZChhLFdpbmRvdy5Qcm90b3R5cGUpO30sYWZ0ZXJJbXBsZW1lbnQ6ZnVuY3Rpb24oYixhKXt3aW5kb3dbYl09V2luZG93LlByb3RvdHlwZVtiXT1hO319KTtXaW5kb3cuUHJvdG90eXBlPXskZmFtaWx5OntuYW1lOiJ3aW5kb3cifX07Cm5ldyBXaW5kb3cod2luZG93KTt2YXIgRG9jdW1lbnQ9bmV3IE5hdGl2ZSh7bmFtZToiRG9jdW1lbnQiLGxlZ2FjeTooQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/bnVsbDp3aW5kb3cuRG9jdW1lbnQsaW5pdGlhbGl6ZTpmdW5jdGlvbihhKXskdWlkKGEpO2EuaGVhZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07CmEuaHRtbD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCYmQnJvd3Nlci5FbmdpbmUudmVyc2lvbjw9NCl7JHRyeShmdW5jdGlvbigpe2EuZXhlY0NvbW1hbmQoIkJhY2tncm91bmRJbWFnZUNhY2hlIixmYWxzZSx0cnVlKTsKfSk7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe2Eud2luZG93LmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZnVuY3Rpb24oKXthLndpbmRvdy5kZXRhY2hFdmVudCgib251bmxvYWQiLGFyZ3VtZW50cy5jYWxsZWUpO2EuaGVhZD1hLmh0bWw9YS53aW5kb3c9bnVsbDsKfSk7fXJldHVybiAkZXh0ZW5kKGEsRG9jdW1lbnQuUHJvdG90eXBlKTt9LGFmdGVySW1wbGVtZW50OmZ1bmN0aW9uKGIsYSl7ZG9jdW1lbnRbYl09RG9jdW1lbnQuUHJvdG90eXBlW2JdPWE7fX0pO0RvY3VtZW50LlByb3RvdHlwZT17JGZhbWlseTp7bmFtZToiZG9jdW1lbnQifX07Cm5ldyBEb2N1bWVudChkb2N1bWVudCk7QXJyYXkuaW1wbGVtZW50KHtldmVyeTpmdW5jdGlvbihjLGQpe2Zvcih2YXIgYj0wLGE9dGhpcy5sZW5ndGg7YjxhO2IrKyl7aWYoIWMuY2FsbChkLHRoaXNbYl0sYix0aGlzKSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7Cn0sZmlsdGVyOmZ1bmN0aW9uKGQsZSl7dmFyIGM9W107Zm9yKHZhciBiPTAsYT10aGlzLmxlbmd0aDtiPGE7YisrKXtpZihkLmNhbGwoZSx0aGlzW2JdLGIsdGhpcykpe2MucHVzaCh0aGlzW2JdKTt9fXJldHVybiBjO30sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoJGRlZmluZWQpOwp9LGluZGV4T2Y6ZnVuY3Rpb24oYyxkKXt2YXIgYT10aGlzLmxlbmd0aDtmb3IodmFyIGI9KGQ8MCk/TWF0aC5tYXgoMCxhK2QpOmR8fDA7YjxhO2IrKyl7aWYodGhpc1tiXT09PWMpe3JldHVybiBiO319cmV0dXJuIC0xO30sbWFwOmZ1bmN0aW9uKGQsZSl7dmFyIGM9W107CmZvcih2YXIgYj0wLGE9dGhpcy5sZW5ndGg7YjxhO2IrKyl7Y1tiXT1kLmNhbGwoZSx0aGlzW2JdLGIsdGhpcyk7fXJldHVybiBjO30sc29tZTpmdW5jdGlvbihjLGQpe2Zvcih2YXIgYj0wLGE9dGhpcy5sZW5ndGg7YjxhO2IrKyl7aWYoYy5jYWxsKGQsdGhpc1tiXSxiLHRoaXMpKXtyZXR1cm4gdHJ1ZTsKfX1yZXR1cm4gZmFsc2U7fSxhc3NvY2lhdGU6ZnVuY3Rpb24oYyl7dmFyIGQ9e30sYj1NYXRoLm1pbih0aGlzLmxlbmd0aCxjLmxlbmd0aCk7Zm9yKHZhciBhPTA7YTxiO2ErKyl7ZFtjW2FdXT10aGlzW2FdO31yZXR1cm4gZDt9LGxpbms6ZnVuY3Rpb24oYyl7dmFyIGE9e307CmZvcih2YXIgZT0wLGI9dGhpcy5sZW5ndGg7ZTxiO2UrKyl7Zm9yKHZhciBkIGluIGMpe2lmKGNbZF0odGhpc1tlXSkpe2FbZF09dGhpc1tlXTtkZWxldGUgY1tkXTticmVhazt9fX1yZXR1cm4gYTt9LGNvbnRhaW5zOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuaW5kZXhPZihhLGIpIT0tMTsKfSxleHRlbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBiPTAsYT1jLmxlbmd0aDtiPGE7YisrKXt0aGlzLnB1c2goY1tiXSk7fXJldHVybiB0aGlzO30sZ2V0TGFzdDpmdW5jdGlvbigpe3JldHVybih0aGlzLmxlbmd0aCk/dGhpc1t0aGlzLmxlbmd0aC0xXTpudWxsO30sZ2V0UmFuZG9tOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMubGVuZ3RoKT90aGlzWyRyYW5kb20oMCx0aGlzLmxlbmd0aC0xKV06bnVsbDsKfSxpbmNsdWRlOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLmNvbnRhaW5zKGEpKXt0aGlzLnB1c2goYSk7fXJldHVybiB0aGlzO30sY29tYmluZTpmdW5jdGlvbihjKXtmb3IodmFyIGI9MCxhPWMubGVuZ3RoO2I8YTtiKyspe3RoaXMuaW5jbHVkZShjW2JdKTt9cmV0dXJuIHRoaXM7Cn0sZXJhc2U6ZnVuY3Rpb24oYil7Zm9yKHZhciBhPXRoaXMubGVuZ3RoO2EtLTthKXtpZih0aGlzW2FdPT09Yil7dGhpcy5zcGxpY2UoYSwxKTt9fXJldHVybiB0aGlzO30sZW1wdHk6ZnVuY3Rpb24oKXt0aGlzLmxlbmd0aD0wO3JldHVybiB0aGlzO30sZmxhdHRlbjpmdW5jdGlvbigpe3ZhciBkPVtdOwpmb3IodmFyIGI9MCxhPXRoaXMubGVuZ3RoO2I8YTtiKyspe3ZhciBjPSR0eXBlKHRoaXNbYl0pO2lmKCFjKXtjb250aW51ZTt9ZD1kLmNvbmNhdCgoYz09ImFycmF5Inx8Yz09ImNvbGxlY3Rpb24ifHxjPT0iYXJndW1lbnRzIik/QXJyYXkuZmxhdHRlbih0aGlzW2JdKTp0aGlzW2JdKTsKfXJldHVybiBkO30saGV4VG9SZ2I6ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGghPTMpe3JldHVybiBudWxsO312YXIgYT10aGlzLm1hcChmdW5jdGlvbihjKXtpZihjLmxlbmd0aD09MSl7Yys9Yzt9cmV0dXJuIGMudG9JbnQoMTYpO30pO3JldHVybihiKT9hOiJyZ2IoIithKyIpIjsKfSxyZ2JUb0hleDpmdW5jdGlvbihkKXtpZih0aGlzLmxlbmd0aDwzKXtyZXR1cm4gbnVsbDt9aWYodGhpcy5sZW5ndGg9PTQmJnRoaXNbM109PTAmJiFkKXtyZXR1cm4idHJhbnNwYXJlbnQiO312YXIgYj1bXTtmb3IodmFyIGE9MDthPDM7YSsrKXt2YXIgYz0odGhpc1thXS0wKS50b1N0cmluZygxNik7CmIucHVzaCgoYy5sZW5ndGg9PTEpPyIwIitjOmMpO31yZXR1cm4oZCk/YjoiIyIrYi5qb2luKCIiKTt9fSk7RnVuY3Rpb24uaW1wbGVtZW50KHtleHRlbmQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpe3RoaXNbYl09YVtiXTt9cmV0dXJuIHRoaXM7fSxjcmVhdGU6ZnVuY3Rpb24oYil7dmFyIGE9dGhpczsKYj1ifHx7fTtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGM9Yi5hcmd1bWVudHM7Yz0oYyE9dW5kZWZpbmVkKT8kc3BsYXQoYyk6QXJyYXkuc2xpY2UoYXJndW1lbnRzLChiLmV2ZW50KT8xOjApO2lmKGIuZXZlbnQpe2M9W2R8fHdpbmRvdy5ldmVudF0uZXh0ZW5kKGMpOwp9dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShiLmJpbmR8fG51bGwsYyk7fTtpZihiLmRlbGF5KXtyZXR1cm4gc2V0VGltZW91dChlLGIuZGVsYXkpO31pZihiLnBlcmlvZGljYWwpe3JldHVybiBzZXRJbnRlcnZhbChlLGIucGVyaW9kaWNhbCk7fWlmKGIuYXR0ZW1wdCl7cmV0dXJuICR0cnkoZSk7Cn1yZXR1cm4gZSgpO307fSxydW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5hcHBseShiLCRzcGxhdChhKSk7fSxwYXNzOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuY3JlYXRlKHtiaW5kOmIsYXJndW1lbnRzOmF9KTt9LGJpbmQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2JpbmQ6Yixhcmd1bWVudHM6YX0pOwp9LGJpbmRXaXRoRXZlbnQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2JpbmQ6Yixhcmd1bWVudHM6YSxldmVudDp0cnVlfSk7fSxhdHRlbXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuY3JlYXRlKHtiaW5kOmIsYXJndW1lbnRzOmEsYXR0ZW1wdDp0cnVlfSkoKTsKfSxkZWxheTpmdW5jdGlvbihiLGMsYSl7cmV0dXJuIHRoaXMuY3JlYXRlKHtiaW5kOmMsYXJndW1lbnRzOmEsZGVsYXk6Yn0pKCk7fSxwZXJpb2RpY2FsOmZ1bmN0aW9uKGMsYixhKXtyZXR1cm4gdGhpcy5jcmVhdGUoe2JpbmQ6Yixhcmd1bWVudHM6YSxwZXJpb2RpY2FsOmN9KSgpOwp9fSk7TnVtYmVyLmltcGxlbWVudCh7bGltaXQ6ZnVuY3Rpb24oYixhKXtyZXR1cm4gTWF0aC5taW4oYSxNYXRoLm1heChiLHRoaXMpKTt9LHJvdW5kOmZ1bmN0aW9uKGEpe2E9TWF0aC5wb3coMTAsYXx8MCk7cmV0dXJuIE1hdGgucm91bmQodGhpcyphKS9hO30sdGltZXM6ZnVuY3Rpb24oYixjKXtmb3IodmFyIGE9MDsKYTx0aGlzO2ErKyl7Yi5jYWxsKGMsYSx0aGlzKTt9fSx0b0Zsb2F0OmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7fSx0b0ludDpmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQodGhpcyxhfHwxMCk7fX0pO051bWJlci5hbGlhcygidGltZXMiLCJlYWNoIik7CihmdW5jdGlvbihiKXt2YXIgYT17fTtiLmVhY2goZnVuY3Rpb24oYyl7aWYoIU51bWJlcltjXSl7YVtjXT1mdW5jdGlvbigpe3JldHVybiBNYXRoW2NdLmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdCgkQShhcmd1bWVudHMpKSk7fTt9fSk7TnVtYmVyLmltcGxlbWVudChhKTsKfSkoWyJhYnMiLCJhY29zIiwiYXNpbiIsImF0YW4iLCJhdGFuMiIsImNlaWwiLCJjb3MiLCJleHAiLCJmbG9vciIsImxvZyIsIm1heCIsIm1pbiIsInBvdyIsInNpbiIsInNxcnQiLCJ0YW4iXSk7U3RyaW5nLmltcGxlbWVudCh7dGVzdDpmdW5jdGlvbihhLGIpe3JldHVybigodHlwZW9mIGE9PSJzdHJpbmciKT9uZXcgUmVnRXhwKGEsYik6YSkudGVzdCh0aGlzKTsKfSxjb250YWluczpmdW5jdGlvbihhLGIpe3JldHVybihiKT8oYit0aGlzK2IpLmluZGV4T2YoYithK2IpPi0xOnRoaXMuaW5kZXhPZihhKT4tMTt9LHRyaW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIik7fSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoL1xzKy9nLCIgIikudHJpbSgpOwp9LGNhbWVsQ2FzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoLy1cRC9nLGZ1bmN0aW9uKGEpe3JldHVybiBhLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO30pO30saHlwaGVuYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgvW0EtWl0vZyxmdW5jdGlvbihhKXtyZXR1cm4oIi0iK2EuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpOwp9KTt9LGNhcGl0YWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXBsYWNlKC9cYlthLXpdL2csZnVuY3Rpb24oYSl7cmV0dXJuIGEudG9VcHBlckNhc2UoKTt9KTt9LGVzY2FwZVJlZ0V4cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlcGxhY2UoLyhbLS4qKz9eJHt9KCl8W1xdXC9cXF0pL2csIlxcJDEiKTsKfSx0b0ludDpmdW5jdGlvbihhKXtyZXR1cm4gcGFyc2VJbnQodGhpcyxhfHwxMCk7fSx0b0Zsb2F0OmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlRmxvYXQodGhpcyk7fSxoZXhUb1JnYjpmdW5jdGlvbihiKXt2YXIgYT10aGlzLm1hdGNoKC9eIz8oXHd7MSwyfSkoXHd7MSwyfSkoXHd7MSwyfSkkLyk7CnJldHVybihhKT9hLnNsaWNlKDEpLmhleFRvUmdiKGIpOm51bGw7fSxyZ2JUb0hleDpmdW5jdGlvbihiKXt2YXIgYT10aGlzLm1hdGNoKC9cZHsxLDN9L2cpO3JldHVybihhKT9hLnJnYlRvSGV4KGIpOm51bGw7fSxzdHJpcFNjcmlwdHM6ZnVuY3Rpb24oYil7dmFyIGE9IiI7CnZhciBjPXRoaXMucmVwbGFjZSgvPHNjcmlwdFtePl0qPihbXHNcU10qPyk8XC9zY3JpcHQ+L2dpLGZ1bmN0aW9uKCl7YSs9YXJndW1lbnRzWzFdKyJcbiI7cmV0dXJuIiI7fSk7aWYoYj09PXRydWUpeyRleGVjKGEpO31lbHNle2lmKCR0eXBlKGIpPT0iZnVuY3Rpb24iKXtiKGEsYyk7Cn19cmV0dXJuIGM7fSxzdWJzdGl0dXRlOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucmVwbGFjZShifHwoL1xcP1x7KFtee31dKylcfS9nKSxmdW5jdGlvbihkLGMpe2lmKGQuY2hhckF0KDApPT0iXFwiKXtyZXR1cm4gZC5zbGljZSgxKTt9cmV0dXJuKGFbY10hPXVuZGVmaW5lZCk/YVtjXToiIjsKfSk7fX0pO0hhc2guaW1wbGVtZW50KHtoYXM6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxrZXlPZjpmdW5jdGlvbihiKXtmb3IodmFyIGEgaW4gdGhpcyl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShhKSYmdGhpc1thXT09PWIpe3JldHVybiBhO319cmV0dXJuIG51bGw7Cn0saGFzVmFsdWU6ZnVuY3Rpb24oYSl7cmV0dXJuKEhhc2gua2V5T2YodGhpcyxhKSE9PW51bGwpO30sZXh0ZW5kOmZ1bmN0aW9uKGEpe0hhc2guZWFjaChhfHx7fSxmdW5jdGlvbihjLGIpe0hhc2guc2V0KHRoaXMsYixjKTt9LHRoaXMpO3JldHVybiB0aGlzO30sY29tYmluZTpmdW5jdGlvbihhKXtIYXNoLmVhY2goYXx8e30sZnVuY3Rpb24oYyxiKXtIYXNoLmluY2x1ZGUodGhpcyxiLGMpOwp9LHRoaXMpO3JldHVybiB0aGlzO30sZXJhc2U6ZnVuY3Rpb24oYSl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShhKSl7ZGVsZXRlIHRoaXNbYV07fXJldHVybiB0aGlzO30sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybih0aGlzLmhhc093blByb3BlcnR5KGEpKT90aGlzW2FdOm51bGw7Cn0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIXRoaXNbYV18fHRoaXMuaGFzT3duUHJvcGVydHkoYSkpe3RoaXNbYV09Yjt9cmV0dXJuIHRoaXM7fSxlbXB0eTpmdW5jdGlvbigpe0hhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKGIsYSl7ZGVsZXRlIHRoaXNbYV07fSx0aGlzKTsKcmV0dXJuIHRoaXM7fSxpbmNsdWRlOmZ1bmN0aW9uKGEsYil7aWYodGhpc1thXT09dW5kZWZpbmVkKXt0aGlzW2FdPWI7fXJldHVybiB0aGlzO30sbWFwOmZ1bmN0aW9uKGIsYyl7dmFyIGE9bmV3IEhhc2g7SGFzaC5lYWNoKHRoaXMsZnVuY3Rpb24oZSxkKXthLnNldChkLGIuY2FsbChjLGUsZCx0aGlzKSk7Cn0sdGhpcyk7cmV0dXJuIGE7fSxmaWx0ZXI6ZnVuY3Rpb24oYixjKXt2YXIgYT1uZXcgSGFzaDtIYXNoLmVhY2godGhpcyxmdW5jdGlvbihlLGQpe2lmKGIuY2FsbChjLGUsZCx0aGlzKSl7YS5zZXQoZCxlKTt9fSx0aGlzKTtyZXR1cm4gYTt9LGV2ZXJ5OmZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBhIGluIHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoYSkmJiFiLmNhbGwoYyx0aGlzW2FdLGEpKXtyZXR1cm4gZmFsc2U7Cn19cmV0dXJuIHRydWU7fSxzb21lOmZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBhIGluIHRoaXMpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoYSkmJmIuY2FsbChjLHRoaXNbYV0sYSkpe3JldHVybiB0cnVlO319cmV0dXJuIGZhbHNlO30sZ2V0S2V5czpmdW5jdGlvbigpe3ZhciBhPVtdOwpIYXNoLmVhY2godGhpcyxmdW5jdGlvbihjLGIpe2EucHVzaChiKTt9KTtyZXR1cm4gYTt9LGdldFZhbHVlczpmdW5jdGlvbigpe3ZhciBhPVtdO0hhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKGIpe2EucHVzaChiKTt9KTtyZXR1cm4gYTt9LHRvUXVlcnlTdHJpbmc6ZnVuY3Rpb24oYSl7dmFyIGI9W107Ckhhc2guZWFjaCh0aGlzLGZ1bmN0aW9uKGYsZSl7aWYoYSl7ZT1hKyJbIitlKyJdIjt9dmFyIGQ7c3dpdGNoKCR0eXBlKGYpKXtjYXNlIm9iamVjdCI6ZD1IYXNoLnRvUXVlcnlTdHJpbmcoZixlKTticmVhaztjYXNlImFycmF5Ijp2YXIgYz17fTtmLmVhY2goZnVuY3Rpb24oaCxnKXtjW2ddPWg7Cn0pO2Q9SGFzaC50b1F1ZXJ5U3RyaW5nKGMsZSk7YnJlYWs7ZGVmYXVsdDpkPWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmKTt9aWYoZiE9dW5kZWZpbmVkKXtiLnB1c2goZCk7fX0pO3JldHVybiBiLmpvaW4oIiYiKTt9fSk7SGFzaC5hbGlhcyh7a2V5T2Y6ImluZGV4T2YiLGhhc1ZhbHVlOiJjb250YWlucyJ9KTsKdmFyIEV2ZW50PW5ldyBOYXRpdmUoe25hbWU6IkV2ZW50Iixpbml0aWFsaXplOmZ1bmN0aW9uKGEsZil7Zj1mfHx3aW5kb3c7dmFyIGs9Zi5kb2N1bWVudDthPWF8fGYuZXZlbnQ7aWYoYS4kZXh0ZW5kZWQpe3JldHVybiBhO310aGlzLiRleHRlbmRlZD10cnVlO3ZhciBqPWEudHlwZTsKdmFyIGc9YS50YXJnZXR8fGEuc3JjRWxlbWVudDt3aGlsZShnJiZnLm5vZGVUeXBlPT0zKXtnPWcucGFyZW50Tm9kZTt9aWYoai50ZXN0KC9rZXkvKSl7dmFyIGI9YS53aGljaHx8YS5rZXlDb2RlO3ZhciBtPUV2ZW50LktleXMua2V5T2YoYik7aWYoaj09ImtleWRvd24iKXt2YXIgZD1iLTExMTsKaWYoZD4wJiZkPDEzKXttPSJmIitkO319bT1tfHxTdHJpbmcuZnJvbUNoYXJDb2RlKGIpLnRvTG93ZXJDYXNlKCk7fWVsc2V7aWYoai5tYXRjaCgvKGNsaWNrfG1vdXNlfG1lbnUpL2kpKXtrPSghay5jb21wYXRNb2RlfHxrLmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/ay5odG1sOmsuYm9keTsKdmFyIGk9e3g6YS5wYWdlWHx8YS5jbGllbnRYK2suc2Nyb2xsTGVmdCx5OmEucGFnZVl8fGEuY2xpZW50WStrLnNjcm9sbFRvcH07dmFyIGM9e3g6KGEucGFnZVgpP2EucGFnZVgtZi5wYWdlWE9mZnNldDphLmNsaWVudFgseTooYS5wYWdlWSk/YS5wYWdlWS1mLnBhZ2VZT2Zmc2V0OmEuY2xpZW50WX07CmlmKGoubWF0Y2goL0RPTU1vdXNlU2Nyb2xsfG1vdXNld2hlZWwvKSl7dmFyIGg9KGEud2hlZWxEZWx0YSk/YS53aGVlbERlbHRhLzEyMDotKGEuZGV0YWlsfHwwKS8zO312YXIgZT0oYS53aGljaD09Myl8fChhLmJ1dHRvbj09Mik7dmFyIGw9bnVsbDtpZihqLm1hdGNoKC9vdmVyfG91dC8pKXtzd2l0Y2goail7Y2FzZSJtb3VzZW92ZXIiOmw9YS5yZWxhdGVkVGFyZ2V0fHxhLmZyb21FbGVtZW50OwpicmVhaztjYXNlIm1vdXNlb3V0IjpsPWEucmVsYXRlZFRhcmdldHx8YS50b0VsZW1lbnQ7fWlmKCEoZnVuY3Rpb24oKXt3aGlsZShsJiZsLm5vZGVUeXBlPT0zKXtsPWwucGFyZW50Tm9kZTt9cmV0dXJuIHRydWU7fSkuY3JlYXRlKHthdHRlbXB0OkJyb3dzZXIuRW5naW5lLmdlY2tvfSkoKSl7bD1mYWxzZTsKfX19fXJldHVybiAkZXh0ZW5kKHRoaXMse2V2ZW50OmEsdHlwZTpqLHBhZ2U6aSxjbGllbnQ6YyxyaWdodENsaWNrOmUsd2hlZWw6aCxyZWxhdGVkVGFyZ2V0OmwsdGFyZ2V0OmcsY29kZTpiLGtleTptLHNoaWZ0OmEuc2hpZnRLZXksY29udHJvbDphLmN0cmxLZXksYWx0OmEuYWx0S2V5LG1ldGE6YS5tZXRhS2V5fSk7Cn19KTtFdmVudC5LZXlzPW5ldyBIYXNoKHtlbnRlcjoxMyx1cDozOCxkb3duOjQwLGxlZnQ6MzcscmlnaHQ6MzksZXNjOjI3LHNwYWNlOjMyLGJhY2tzcGFjZTo4LHRhYjo5LCJkZWxldGUiOjQ2fSk7RXZlbnQuaW1wbGVtZW50KHtzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RvcFByb3BhZ2F0aW9uKCkucHJldmVudERlZmF1bHQoKTsKfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtpZih0aGlzLmV2ZW50LnN0b3BQcm9wYWdhdGlvbil7dGhpcy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt9ZWxzZXt0aGlzLmV2ZW50LmNhbmNlbEJ1YmJsZT10cnVlO31yZXR1cm4gdGhpczt9LHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCl7dGhpcy5ldmVudC5wcmV2ZW50RGVmYXVsdCgpOwp9ZWxzZXt0aGlzLmV2ZW50LnJldHVyblZhbHVlPWZhbHNlO31yZXR1cm4gdGhpczt9fSk7ZnVuY3Rpb24gQ2xhc3MoYil7aWYoYiBpbnN0YW5jZW9mIEZ1bmN0aW9uKXtiPXtpbml0aWFsaXplOmJ9O312YXIgYT1mdW5jdGlvbigpe09iamVjdC5yZXNldCh0aGlzKTtpZihhLl9wcm90b3R5cGluZyl7cmV0dXJuIHRoaXM7Cn10aGlzLl9jdXJyZW50PSRlbXB0eTt2YXIgYz0odGhpcy5pbml0aWFsaXplKT90aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXM7ZGVsZXRlIHRoaXMuX2N1cnJlbnQ7ZGVsZXRlIHRoaXMuY2FsbGVyO3JldHVybiBjO30uZXh0ZW5kKHRoaXMpOwphLmltcGxlbWVudChiKTthLmNvbnN0cnVjdG9yPUNsYXNzO2EucHJvdG90eXBlLmNvbnN0cnVjdG9yPWE7cmV0dXJuIGE7fUZ1bmN0aW9uLnByb3RvdHlwZS5wcm90ZWN0PWZ1bmN0aW9uKCl7dGhpcy5fcHJvdGVjdGVkPXRydWU7cmV0dXJuIHRoaXM7fTtPYmplY3QucmVzZXQ9ZnVuY3Rpb24oYSxjKXtpZihjPT1udWxsKXtmb3IodmFyIGUgaW4gYSl7T2JqZWN0LnJlc2V0KGEsZSk7Cn1yZXR1cm4gYTt9ZGVsZXRlIGFbY107c3dpdGNoKCR0eXBlKGFbY10pKXtjYXNlIm9iamVjdCI6dmFyIGQ9ZnVuY3Rpb24oKXt9O2QucHJvdG90eXBlPWFbY107dmFyIGI9bmV3IGQ7YVtjXT1PYmplY3QucmVzZXQoYik7YnJlYWs7Y2FzZSJhcnJheSI6YVtjXT0kdW5saW5rKGFbY10pOwpicmVhazt9cmV0dXJuIGE7fTtuZXcgTmF0aXZlKHtuYW1lOiJDbGFzcyIsaW5pdGlhbGl6ZTpDbGFzc30pLmV4dGVuZCh7aW5zdGFudGlhdGU6ZnVuY3Rpb24oYil7Yi5fcHJvdG90eXBpbmc9dHJ1ZTt2YXIgYT1uZXcgYjtkZWxldGUgYi5fcHJvdG90eXBpbmc7cmV0dXJuIGE7Cn0sd3JhcDpmdW5jdGlvbihhLGIsYyl7aWYoYy5fb3JpZ2luKXtjPWMuX29yaWdpbjt9cmV0dXJuIGZ1bmN0aW9uKCl7aWYoYy5fcHJvdGVjdGVkJiZ0aGlzLl9jdXJyZW50PT1udWxsKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtZXRob2QgIicrYisnIiBjYW5ub3QgYmUgY2FsbGVkLicpOwp9dmFyIGU9dGhpcy5jYWxsZXIsZj10aGlzLl9jdXJyZW50O3RoaXMuY2FsbGVyPWY7dGhpcy5fY3VycmVudD1hcmd1bWVudHMuY2FsbGVlO3ZhciBkPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2N1cnJlbnQ9Zjt0aGlzLmNhbGxlcj1lO3JldHVybiBkO30uZXh0ZW5kKHtfb3duZXI6YSxfb3JpZ2luOmMsX25hbWU6Yn0pOwp9fSk7Q2xhc3MuaW1wbGVtZW50KHtpbXBsZW1lbnQ6ZnVuY3Rpb24oYSxkKXtpZigkdHlwZShhKT09Im9iamVjdCIpe2Zvcih2YXIgZSBpbiBhKXt0aGlzLmltcGxlbWVudChlLGFbZV0pO31yZXR1cm4gdGhpczt9dmFyIGY9Q2xhc3MuTXV0YXRvcnNbYV07aWYoZil7ZD1mLmNhbGwodGhpcyxkKTsKaWYoZD09bnVsbCl7cmV0dXJuIHRoaXM7fX12YXIgYz10aGlzLnByb3RvdHlwZTtzd2l0Y2goJHR5cGUoZCkpe2Nhc2UiZnVuY3Rpb24iOmlmKGQuX2hpZGRlbil7cmV0dXJuIHRoaXM7fWNbYV09Q2xhc3Mud3JhcCh0aGlzLGEsZCk7YnJlYWs7Y2FzZSJvYmplY3QiOnZhciBiPWNbYV07CmlmKCR0eXBlKGIpPT0ib2JqZWN0Iil7JG1peGluKGIsZCk7fWVsc2V7Y1thXT0kdW5saW5rKGQpO31icmVhaztjYXNlImFycmF5IjpjW2FdPSR1bmxpbmsoZCk7YnJlYWs7ZGVmYXVsdDpjW2FdPWQ7fXJldHVybiB0aGlzO319KTtDbGFzcy5NdXRhdG9ycz17RXh0ZW5kczpmdW5jdGlvbihhKXt0aGlzLnBhcmVudD1hOwp0aGlzLnByb3RvdHlwZT1DbGFzcy5pbnN0YW50aWF0ZShhKTt0aGlzLmltcGxlbWVudCgicGFyZW50IixmdW5jdGlvbigpe3ZhciBiPXRoaXMuY2FsbGVyLl9uYW1lLGM9dGhpcy5jYWxsZXIuX293bmVyLnBhcmVudC5wcm90b3R5cGVbYl07aWYoIWMpe3Rocm93IG5ldyBFcnJvcignVGhlIG1ldGhvZCAiJytiKyciIGhhcyBubyBwYXJlbnQuJyk7Cn1yZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fS5wcm90ZWN0KCkpO30sSW1wbGVtZW50czpmdW5jdGlvbihhKXskc3BsYXQoYSkuZWFjaChmdW5jdGlvbihiKXtpZihiIGluc3RhbmNlb2YgRnVuY3Rpb24pe2I9Q2xhc3MuaW5zdGFudGlhdGUoYik7fXRoaXMuaW1wbGVtZW50KGIpOwp9LHRoaXMpO319O3ZhciBDaGFpbj1uZXcgQ2xhc3MoeyRjaGFpbjpbXSxjaGFpbjpmdW5jdGlvbigpe3RoaXMuJGNoYWluLmV4dGVuZChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykpO3JldHVybiB0aGlzO30sY2FsbENoYWluOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuJGNoYWluLmxlbmd0aCk/dGhpcy4kY2hhaW4uc2hpZnQoKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZmFsc2U7Cn0sY2xlYXJDaGFpbjpmdW5jdGlvbigpe3RoaXMuJGNoYWluLmVtcHR5KCk7cmV0dXJuIHRoaXM7fX0pO3ZhciBFdmVudHM9bmV3IENsYXNzKHskZXZlbnRzOnt9LGFkZEV2ZW50OmZ1bmN0aW9uKGMsYixhKXtjPUV2ZW50cy5yZW1vdmVPbihjKTtpZihiIT0kZW1wdHkpe3RoaXMuJGV2ZW50c1tjXT10aGlzLiRldmVudHNbY118fFtdOwp0aGlzLiRldmVudHNbY10uaW5jbHVkZShiKTtpZihhKXtiLmludGVybmFsPXRydWU7fX1yZXR1cm4gdGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSl7dGhpcy5hZGRFdmVudChiLGFbYl0pO31yZXR1cm4gdGhpczt9LGZpcmVFdmVudDpmdW5jdGlvbihjLGIsYSl7Yz1FdmVudHMucmVtb3ZlT24oYyk7CmlmKCF0aGlzLiRldmVudHN8fCF0aGlzLiRldmVudHNbY10pe3JldHVybiB0aGlzO310aGlzLiRldmVudHNbY10uZWFjaChmdW5jdGlvbihkKXtkLmNyZWF0ZSh7YmluZDp0aGlzLGRlbGF5OmEsImFyZ3VtZW50cyI6Yn0pKCk7fSx0aGlzKTtyZXR1cm4gdGhpczt9LHJlbW92ZUV2ZW50OmZ1bmN0aW9uKGIsYSl7Yj1FdmVudHMucmVtb3ZlT24oYik7CmlmKCF0aGlzLiRldmVudHNbYl0pe3JldHVybiB0aGlzO31pZighYS5pbnRlcm5hbCl7dGhpcy4kZXZlbnRzW2JdLmVyYXNlKGEpO31yZXR1cm4gdGhpczt9LHJlbW92ZUV2ZW50czpmdW5jdGlvbihjKXt2YXIgZDtpZigkdHlwZShjKT09Im9iamVjdCIpe2ZvcihkIGluIGMpe3RoaXMucmVtb3ZlRXZlbnQoZCxjW2RdKTsKfXJldHVybiB0aGlzO31pZihjKXtjPUV2ZW50cy5yZW1vdmVPbihjKTt9Zm9yKGQgaW4gdGhpcy4kZXZlbnRzKXtpZihjJiZjIT1kKXtjb250aW51ZTt9dmFyIGI9dGhpcy4kZXZlbnRzW2RdO2Zvcih2YXIgYT1iLmxlbmd0aDthLS07YSl7dGhpcy5yZW1vdmVFdmVudChkLGJbYV0pOwp9fXJldHVybiB0aGlzO319KTtFdmVudHMucmVtb3ZlT249ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSgvXm9uKFtBLVpdKS8sZnVuY3Rpb24oYixjKXtyZXR1cm4gYy50b0xvd2VyQ2FzZSgpO30pO307dmFyIE9wdGlvbnM9bmV3IENsYXNzKHtzZXRPcHRpb25zOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zPSRtZXJnZS5ydW4oW3RoaXMub3B0aW9uc10uZXh0ZW5kKGFyZ3VtZW50cykpOwppZighdGhpcy5hZGRFdmVudCl7cmV0dXJuIHRoaXM7fWZvcih2YXIgYSBpbiB0aGlzLm9wdGlvbnMpe2lmKCR0eXBlKHRoaXMub3B0aW9uc1thXSkhPSJmdW5jdGlvbiJ8fCEoL15vbltBLVpdLykudGVzdChhKSl7Y29udGludWU7fXRoaXMuYWRkRXZlbnQoYSx0aGlzLm9wdGlvbnNbYV0pOwpkZWxldGUgdGhpcy5vcHRpb25zW2FdO31yZXR1cm4gdGhpczt9fSk7dmFyIEVsZW1lbnQ9bmV3IE5hdGl2ZSh7bmFtZToiRWxlbWVudCIsbGVnYWN5OndpbmRvdy5FbGVtZW50LGluaXRpYWxpemU6ZnVuY3Rpb24oYSxiKXt2YXIgYz1FbGVtZW50LkNvbnN0cnVjdG9ycy5nZXQoYSk7CmlmKGMpe3JldHVybiBjKGIpO31pZih0eXBlb2YgYT09InN0cmluZyIpe3JldHVybiBkb2N1bWVudC5uZXdFbGVtZW50KGEsYik7fXJldHVybiBkb2N1bWVudC5pZChhKS5zZXQoYik7fSxhZnRlckltcGxlbWVudDpmdW5jdGlvbihhLGIpe0VsZW1lbnQuUHJvdG90eXBlW2FdPWI7CmlmKEFycmF5W2FdKXtyZXR1cm47fUVsZW1lbnRzLmltcGxlbWVudChhLGZ1bmN0aW9uKCl7dmFyIGM9W10sZz10cnVlO2Zvcih2YXIgZT0wLGQ9dGhpcy5sZW5ndGg7ZTxkO2UrKyl7dmFyIGY9dGhpc1tlXVthXS5hcHBseSh0aGlzW2VdLGFyZ3VtZW50cyk7Yy5wdXNoKGYpOwppZihnKXtnPSgkdHlwZShmKT09ImVsZW1lbnQiKTt9fXJldHVybihnKT9uZXcgRWxlbWVudHMoYyk6Yzt9KTt9fSk7RWxlbWVudC5Qcm90b3R5cGU9eyRmYW1pbHk6e25hbWU6ImVsZW1lbnQifX07RWxlbWVudC5Db25zdHJ1Y3RvcnM9bmV3IEhhc2g7dmFyIElGcmFtZT1uZXcgTmF0aXZlKHtuYW1lOiJJRnJhbWUiLGdlbmVyaWNzOmZhbHNlLGluaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgZj1BcnJheS5saW5rKGFyZ3VtZW50cyx7cHJvcGVydGllczpPYmplY3QudHlwZSxpZnJhbWU6JGRlZmluZWR9KTsKdmFyIGQ9Zi5wcm9wZXJ0aWVzfHx7fTt2YXIgYz1kb2N1bWVudC5pZChmLmlmcmFtZSk7dmFyIGU9ZC5vbmxvYWR8fCRlbXB0eTtkZWxldGUgZC5vbmxvYWQ7ZC5pZD1kLm5hbWU9JHBpY2soZC5pZCxkLm5hbWUsYz8oYy5pZHx8Yy5uYW1lKToiSUZyYW1lXyIrJHRpbWUoKSk7CmM9bmV3IEVsZW1lbnQoY3x8ImlmcmFtZSIsZCk7dmFyIGI9ZnVuY3Rpb24oKXt2YXIgZz0kdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIGMuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ob3N0O30pO2lmKCFnfHxnPT13aW5kb3cubG9jYXRpb24uaG9zdCl7dmFyIGg9bmV3IFdpbmRvdyhjLmNvbnRlbnRXaW5kb3cpOwpuZXcgRG9jdW1lbnQoYy5jb250ZW50V2luZG93LmRvY3VtZW50KTskZXh0ZW5kKGguRWxlbWVudC5wcm90b3R5cGUsRWxlbWVudC5Qcm90b3R5cGUpO31lLmNhbGwoYy5jb250ZW50V2luZG93LGMuY29udGVudFdpbmRvdy5kb2N1bWVudCk7fTt2YXIgYT0kdHJ5KGZ1bmN0aW9uKCl7cmV0dXJuIGMuY29udGVudFdpbmRvdzsKfSk7KChhJiZhLmRvY3VtZW50LmJvZHkpfHx3aW5kb3cuZnJhbWVzW2QuaWRdKT9iKCk6Yy5hZGRMaXN0ZW5lcigibG9hZCIsYik7cmV0dXJuIGM7fX0pO3ZhciBFbGVtZW50cz1uZXcgTmF0aXZlKHtpbml0aWFsaXplOmZ1bmN0aW9uKGYsYil7Yj0kZXh0ZW5kKHtkZHVwOnRydWUsY2FzaDp0cnVlfSxiKTsKZj1mfHxbXTtpZihiLmRkdXB8fGIuY2FzaCl7dmFyIGc9e30sZT1bXTtmb3IodmFyIGM9MCxhPWYubGVuZ3RoO2M8YTtjKyspe3ZhciBkPWRvY3VtZW50LmlkKGZbY10sIWIuY2FzaCk7aWYoYi5kZHVwKXtpZihnW2QudWlkXSl7Y29udGludWU7fWdbZC51aWRdPXRydWU7Cn1pZihkKXtlLnB1c2goZCk7fX1mPWU7fXJldHVybihiLmNhc2gpPyRleHRlbmQoZix0aGlzKTpmO319KTtFbGVtZW50cy5pbXBsZW1lbnQoe2ZpbHRlcjpmdW5jdGlvbihhLGIpe2lmKCFhKXtyZXR1cm4gdGhpczt9cmV0dXJuIG5ldyBFbGVtZW50cyhBcnJheS5maWx0ZXIodGhpcywodHlwZW9mIGE9PSJzdHJpbmciKT9mdW5jdGlvbihjKXtyZXR1cm4gYy5tYXRjaChhKTsKfTphLGIpKTt9fSk7RG9jdW1lbnQuaW1wbGVtZW50KHtuZXdFbGVtZW50OmZ1bmN0aW9uKGEsYil7aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCYmYil7WyJuYW1lIiwidHlwZSIsImNoZWNrZWQiXS5lYWNoKGZ1bmN0aW9uKGMpe2lmKCFiW2NdKXtyZXR1cm47fWErPSIgIitjKyc9IicrYltjXSsnIic7CmlmKGMhPSJjaGVja2VkIil7ZGVsZXRlIGJbY107fX0pO2E9IjwiK2ErIj4iO31yZXR1cm4gZG9jdW1lbnQuaWQodGhpcy5jcmVhdGVFbGVtZW50KGEpKS5zZXQoYik7fSxuZXdUZXh0Tm9kZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5jcmVhdGVUZXh0Tm9kZShhKTsKfSxnZXREb2N1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzO30sZ2V0V2luZG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMud2luZG93O30saWQ6KGZ1bmN0aW9uKCl7dmFyIGE9e3N0cmluZzpmdW5jdGlvbihkLGMsYil7ZD1iLmdldEVsZW1lbnRCeUlkKGQpO3JldHVybihkKT9hLmVsZW1lbnQoZCxjKTpudWxsOwp9LGVsZW1lbnQ6ZnVuY3Rpb24oYixlKXskdWlkKGIpO2lmKCFlJiYhYi4kZmFtaWx5JiYhKC9eb2JqZWN0fGVtYmVkJC9pKS50ZXN0KGIudGFnTmFtZSkpe3ZhciBjPUVsZW1lbnQuUHJvdG90eXBlO2Zvcih2YXIgZCBpbiBjKXtiW2RdPWNbZF07fX1yZXR1cm4gYjt9LG9iamVjdDpmdW5jdGlvbihjLGQsYil7aWYoYy50b0VsZW1lbnQpe3JldHVybiBhLmVsZW1lbnQoYy50b0VsZW1lbnQoYiksZCk7Cn1yZXR1cm4gbnVsbDt9fTthLnRleHRub2RlPWEud2hpdGVzcGFjZT1hLndpbmRvdz1hLmRvY3VtZW50PSRhcmd1bWVudHMoMCk7cmV0dXJuIGZ1bmN0aW9uKGMsZSxkKXtpZihjJiZjLiRmYW1pbHkmJmMudWlkKXtyZXR1cm4gYzt9dmFyIGI9JHR5cGUoYyk7cmV0dXJuKGFbYl0pP2FbYl0oYyxlLGR8fGRvY3VtZW50KTpudWxsOwp9O30pKCl9KTtpZih3aW5kb3cuJD09bnVsbCl7V2luZG93LmltcGxlbWVudCh7JDpmdW5jdGlvbihhLGIpe3JldHVybiBkb2N1bWVudC5pZChhLGIsdGhpcy5kb2N1bWVudCk7fX0pO31XaW5kb3cuaW1wbGVtZW50KHskJDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoPT0xJiZ0eXBlb2YgYT09InN0cmluZyIpe3JldHVybiB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzKGEpOwp9dmFyIGY9W107dmFyIGM9QXJyYXkuZmxhdHRlbihhcmd1bWVudHMpO2Zvcih2YXIgZD0wLGI9Yy5sZW5ndGg7ZDxiO2QrKyl7dmFyIGU9Y1tkXTtzd2l0Y2goJHR5cGUoZSkpe2Nhc2UiZWxlbWVudCI6Zi5wdXNoKGUpO2JyZWFrO2Nhc2Uic3RyaW5nIjpmLmV4dGVuZCh0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRzKGUsdHJ1ZSkpOwp9fXJldHVybiBuZXcgRWxlbWVudHMoZik7fSxnZXREb2N1bWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvY3VtZW50O30sZ2V0V2luZG93OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fX0pO05hdGl2ZS5pbXBsZW1lbnQoW0VsZW1lbnQsRG9jdW1lbnRdLHtnZXRFbGVtZW50OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGRvY3VtZW50LmlkKHRoaXMuZ2V0RWxlbWVudHMoYSx0cnVlKVswXXx8bnVsbCxiKTsKfSxnZXRFbGVtZW50czpmdW5jdGlvbihhLGQpe2E9YS5zcGxpdCgiLCIpO3ZhciBjPVtdO3ZhciBiPShhLmxlbmd0aD4xKTthLmVhY2goZnVuY3Rpb24oZSl7dmFyIGY9dGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShlLnRyaW0oKSk7KGIpP2MuZXh0ZW5kKGYpOmM9ZjsKfSx0aGlzKTtyZXR1cm4gbmV3IEVsZW1lbnRzKGMse2RkdXA6YixjYXNoOiFkfSk7fX0pOyhmdW5jdGlvbigpe3ZhciBoPXt9LGY9e307dmFyIGk9e2lucHV0OiJjaGVja2VkIixvcHRpb246InNlbGVjdGVkIix0ZXh0YXJlYTooQnJvd3Nlci5FbmdpbmUud2Via2l0JiZCcm93c2VyLkVuZ2luZS52ZXJzaW9uPDQyMCk/ImlubmVySFRNTCI6InZhbHVlIn07CnZhciBjPWZ1bmN0aW9uKGwpe3JldHVybihmW2xdfHwoZltsXT17fSkpO307dmFyIGc9ZnVuY3Rpb24obixsKXtpZighbil7cmV0dXJuO312YXIgbT1uLnVpZDtpZihCcm93c2VyLkVuZ2luZS50cmlkZW50KXtpZihuLmNsZWFyQXR0cmlidXRlcyl7dmFyIHE9bCYmbi5jbG9uZU5vZGUoZmFsc2UpOwpuLmNsZWFyQXR0cmlidXRlcygpO2lmKHEpe24ubWVyZ2VBdHRyaWJ1dGVzKHEpO319ZWxzZXtpZihuLnJlbW92ZUV2ZW50cyl7bi5yZW1vdmVFdmVudHMoKTt9fWlmKCgvb2JqZWN0L2kpLnRlc3Qobi50YWdOYW1lKSl7Zm9yKHZhciBvIGluIG4pe2lmKHR5cGVvZiBuW29dPT0iZnVuY3Rpb24iKXtuW29dPSRlbXB0eTsKfX1FbGVtZW50LmRpc3Bvc2Uobik7fX1pZighbSl7cmV0dXJuO31oW21dPWZbbV09bnVsbDt9O3ZhciBkPWZ1bmN0aW9uKCl7SGFzaC5lYWNoKGgsZyk7aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCl7JEEoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm9iamVjdCIpKS5lYWNoKGcpOwp9aWYod2luZG93LkNvbGxlY3RHYXJiYWdlKXtDb2xsZWN0R2FyYmFnZSgpO31oPWY9bnVsbDt9O3ZhciBqPWZ1bmN0aW9uKG4sbCxzLG0scCxyKXt2YXIgbz1uW3N8fGxdO3ZhciBxPVtdO3doaWxlKG8pe2lmKG8ubm9kZVR5cGU9PTEmJighbXx8RWxlbWVudC5tYXRjaChvLG0pKSl7aWYoIXApe3JldHVybiBkb2N1bWVudC5pZChvLHIpOwp9cS5wdXNoKG8pO31vPW9bbF07fXJldHVybihwKT9uZXcgRWxlbWVudHMocSx7ZGR1cDpmYWxzZSxjYXNoOiFyfSk6bnVsbDt9O3ZhciBlPXtodG1sOiJpbm5lckhUTUwiLCJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IiLGRlZmF1bHRWYWx1ZToiZGVmYXVsdFZhbHVlIix0ZXh0OihCcm93c2VyLkVuZ2luZS50cmlkZW50fHwoQnJvd3Nlci5FbmdpbmUud2Via2l0JiZCcm93c2VyLkVuZ2luZS52ZXJzaW9uPDQyMCkpPyJpbm5lclRleHQiOiJ0ZXh0Q29udGVudCJ9Owp2YXIgYj1bImNvbXBhY3QiLCJub3dyYXAiLCJpc21hcCIsImRlY2xhcmUiLCJub3NoYWRlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwicmVhZG9ubHkiLCJtdWx0aXBsZSIsInNlbGVjdGVkIiwibm9yZXNpemUiLCJkZWZlciJdO3ZhciBrPVsidmFsdWUiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwiYWNjZXNzS2V5IiwiY2VsbFBhZGRpbmciLCJjZWxsU3BhY2luZyIsImNvbFNwYW4iLCJmcmFtZUJvcmRlciIsIm1heExlbmd0aCIsInJlYWRPbmx5Iiwicm93U3BhbiIsInRhYkluZGV4IiwidXNlTWFwIl07CmI9Yi5hc3NvY2lhdGUoYik7SGFzaC5leHRlbmQoZSxiKTtIYXNoLmV4dGVuZChlLGsuYXNzb2NpYXRlKGsubWFwKFN0cmluZy50b0xvd2VyQ2FzZSkpKTt2YXIgYT17YmVmb3JlOmZ1bmN0aW9uKG0sbCl7aWYobC5wYXJlbnROb2RlKXtsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG0sbCk7Cn19LGFmdGVyOmZ1bmN0aW9uKG0sbCl7aWYoIWwucGFyZW50Tm9kZSl7cmV0dXJuO312YXIgbj1sLm5leHRTaWJsaW5nOyhuKT9sLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG0sbik6bC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKG0pO30sYm90dG9tOmZ1bmN0aW9uKG0sbCl7bC5hcHBlbmRDaGlsZChtKTsKfSx0b3A6ZnVuY3Rpb24obSxsKXt2YXIgbj1sLmZpcnN0Q2hpbGQ7KG4pP2wuaW5zZXJ0QmVmb3JlKG0sbik6bC5hcHBlbmRDaGlsZChtKTt9fTthLmluc2lkZT1hLmJvdHRvbTtIYXNoLmVhY2goYSxmdW5jdGlvbihsLG0pe209bS5jYXBpdGFsaXplKCk7RWxlbWVudC5pbXBsZW1lbnQoImluamVjdCIrbSxmdW5jdGlvbihuKXtsKHRoaXMsZG9jdW1lbnQuaWQobix0cnVlKSk7CnJldHVybiB0aGlzO30pO0VsZW1lbnQuaW1wbGVtZW50KCJncmFiIittLGZ1bmN0aW9uKG4pe2woZG9jdW1lbnQuaWQobix0cnVlKSx0aGlzKTtyZXR1cm4gdGhpczt9KTt9KTtFbGVtZW50LmltcGxlbWVudCh7c2V0OmZ1bmN0aW9uKG8sbSl7c3dpdGNoKCR0eXBlKG8pKXtjYXNlIm9iamVjdCI6Zm9yKHZhciBuIGluIG8pe3RoaXMuc2V0KG4sb1tuXSk7Cn1icmVhaztjYXNlInN0cmluZyI6dmFyIGw9RWxlbWVudC5Qcm9wZXJ0aWVzLmdldChvKTsobCYmbC5zZXQpP2wuc2V0LmFwcGx5KHRoaXMsQXJyYXkuc2xpY2UoYXJndW1lbnRzLDEpKTp0aGlzLnNldFByb3BlcnR5KG8sbSk7fXJldHVybiB0aGlzO30sZ2V0OmZ1bmN0aW9uKG0pe3ZhciBsPUVsZW1lbnQuUHJvcGVydGllcy5nZXQobSk7CnJldHVybihsJiZsLmdldCk/bC5nZXQuYXBwbHkodGhpcyxBcnJheS5zbGljZShhcmd1bWVudHMsMSkpOnRoaXMuZ2V0UHJvcGVydHkobSk7fSxlcmFzZTpmdW5jdGlvbihtKXt2YXIgbD1FbGVtZW50LlByb3BlcnRpZXMuZ2V0KG0pOyhsJiZsLmVyYXNlKT9sLmVyYXNlLmFwcGx5KHRoaXMpOnRoaXMucmVtb3ZlUHJvcGVydHkobSk7CnJldHVybiB0aGlzO30sc2V0UHJvcGVydHk6ZnVuY3Rpb24obSxuKXt2YXIgbD1lW21dO2lmKG49PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMucmVtb3ZlUHJvcGVydHkobSk7fWlmKGwmJmJbbV0pe249ISFuO30obCk/dGhpc1tsXT1uOnRoaXMuc2V0QXR0cmlidXRlKG0sIiIrbik7CnJldHVybiB0aGlzO30sc2V0UHJvcGVydGllczpmdW5jdGlvbihsKXtmb3IodmFyIG0gaW4gbCl7dGhpcy5zZXRQcm9wZXJ0eShtLGxbbV0pO31yZXR1cm4gdGhpczt9LGdldFByb3BlcnR5OmZ1bmN0aW9uKG0pe3ZhciBsPWVbbV07dmFyIG49KGwpP3RoaXNbbF06dGhpcy5nZXRBdHRyaWJ1dGUobSwyKTsKcmV0dXJuKGJbbV0pPyEhbjoobCk/bjpufHxudWxsO30sZ2V0UHJvcGVydGllczpmdW5jdGlvbigpe3ZhciBsPSRBKGFyZ3VtZW50cyk7cmV0dXJuIGwubWFwKHRoaXMuZ2V0UHJvcGVydHksdGhpcykuYXNzb2NpYXRlKGwpO30scmVtb3ZlUHJvcGVydHk6ZnVuY3Rpb24obSl7dmFyIGw9ZVttXTsKKGwpP3RoaXNbbF09KGwmJmJbbV0pP2ZhbHNlOiIiOnRoaXMucmVtb3ZlQXR0cmlidXRlKG0pO3JldHVybiB0aGlzO30scmVtb3ZlUHJvcGVydGllczpmdW5jdGlvbigpe0FycmF5LmVhY2goYXJndW1lbnRzLHRoaXMucmVtb3ZlUHJvcGVydHksdGhpcyk7cmV0dXJuIHRoaXM7Cn0saGFzQ2xhc3M6ZnVuY3Rpb24obCl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lLmNvbnRhaW5zKGwsIiAiKTt9LGFkZENsYXNzOmZ1bmN0aW9uKGwpe2lmKCF0aGlzLmhhc0NsYXNzKGwpKXt0aGlzLmNsYXNzTmFtZT0odGhpcy5jbGFzc05hbWUrIiAiK2wpLmNsZWFuKCk7Cn1yZXR1cm4gdGhpczt9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGwpe3RoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKF58XFxzKSIrbCsiKD86XFxzfCQpIiksIiQxIik7cmV0dXJuIHRoaXM7fSx0b2dnbGVDbGFzczpmdW5jdGlvbihsKXtyZXR1cm4gdGhpcy5oYXNDbGFzcyhsKT90aGlzLnJlbW92ZUNsYXNzKGwpOnRoaXMuYWRkQ2xhc3MobCk7Cn0sYWRvcHQ6ZnVuY3Rpb24oKXtBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihsKXtsPWRvY3VtZW50LmlkKGwsdHJ1ZSk7aWYobCl7dGhpcy5hcHBlbmRDaGlsZChsKTt9fSx0aGlzKTtyZXR1cm4gdGhpczt9LGFwcGVuZFRleHQ6ZnVuY3Rpb24obSxsKXtyZXR1cm4gdGhpcy5ncmFiKHRoaXMuZ2V0RG9jdW1lbnQoKS5uZXdUZXh0Tm9kZShtKSxsKTsKfSxncmFiOmZ1bmN0aW9uKG0sbCl7YVtsfHwiYm90dG9tIl0oZG9jdW1lbnQuaWQobSx0cnVlKSx0aGlzKTtyZXR1cm4gdGhpczt9LGluamVjdDpmdW5jdGlvbihtLGwpe2FbbHx8ImJvdHRvbSJdKHRoaXMsZG9jdW1lbnQuaWQobSx0cnVlKSk7cmV0dXJuIHRoaXM7fSxyZXBsYWNlczpmdW5jdGlvbihsKXtsPWRvY3VtZW50LmlkKGwsdHJ1ZSk7CmwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcyxsKTtyZXR1cm4gdGhpczt9LHdyYXBzOmZ1bmN0aW9uKG0sbCl7bT1kb2N1bWVudC5pZChtLHRydWUpO3JldHVybiB0aGlzLnJlcGxhY2VzKG0pLmdyYWIobSxsKTt9LGdldFByZXZpb3VzOmZ1bmN0aW9uKGwsbSl7cmV0dXJuIGoodGhpcywicHJldmlvdXNTaWJsaW5nIixudWxsLGwsZmFsc2UsbSk7Cn0sZ2V0QWxsUHJldmlvdXM6ZnVuY3Rpb24obCxtKXtyZXR1cm4gaih0aGlzLCJwcmV2aW91c1NpYmxpbmciLG51bGwsbCx0cnVlLG0pO30sZ2V0TmV4dDpmdW5jdGlvbihsLG0pe3JldHVybiBqKHRoaXMsIm5leHRTaWJsaW5nIixudWxsLGwsZmFsc2UsbSk7fSxnZXRBbGxOZXh0OmZ1bmN0aW9uKGwsbSl7cmV0dXJuIGoodGhpcywibmV4dFNpYmxpbmciLG51bGwsbCx0cnVlLG0pOwp9LGdldEZpcnN0OmZ1bmN0aW9uKGwsbSl7cmV0dXJuIGoodGhpcywibmV4dFNpYmxpbmciLCJmaXJzdENoaWxkIixsLGZhbHNlLG0pO30sZ2V0TGFzdDpmdW5jdGlvbihsLG0pe3JldHVybiBqKHRoaXMsInByZXZpb3VzU2libGluZyIsImxhc3RDaGlsZCIsbCxmYWxzZSxtKTsKfSxnZXRQYXJlbnQ6ZnVuY3Rpb24obCxtKXtyZXR1cm4gaih0aGlzLCJwYXJlbnROb2RlIixudWxsLGwsZmFsc2UsbSk7fSxnZXRQYXJlbnRzOmZ1bmN0aW9uKGwsbSl7cmV0dXJuIGoodGhpcywicGFyZW50Tm9kZSIsbnVsbCxsLHRydWUsbSk7fSxnZXRTaWJsaW5nczpmdW5jdGlvbihsLG0pe3JldHVybiB0aGlzLmdldFBhcmVudCgpLmdldENoaWxkcmVuKGwsbSkuZXJhc2UodGhpcyk7Cn0sZ2V0Q2hpbGRyZW46ZnVuY3Rpb24obCxtKXtyZXR1cm4gaih0aGlzLCJuZXh0U2libGluZyIsImZpcnN0Q2hpbGQiLGwsdHJ1ZSxtKTt9LGdldFdpbmRvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQud2luZG93O30sZ2V0RG9jdW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50Owp9LGdldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKG8sbil7dmFyIG09dGhpcy5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG8pO2lmKCFtKXtyZXR1cm4gbnVsbDt9Zm9yKHZhciBsPW0ucGFyZW50Tm9kZTtsIT10aGlzO2w9bC5wYXJlbnROb2RlKXtpZighbCl7cmV0dXJuIG51bGw7Cn19cmV0dXJuIGRvY3VtZW50LmlkKG0sbik7fSxnZXRTZWxlY3RlZDpmdW5jdGlvbigpe3JldHVybiBuZXcgRWxlbWVudHMoJEEodGhpcy5vcHRpb25zKS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIGwuc2VsZWN0ZWQ7fSkpO30sZ2V0Q29tcHV0ZWRTdHlsZTpmdW5jdGlvbihtKXtpZih0aGlzLmN1cnJlbnRTdHlsZSl7cmV0dXJuIHRoaXMuY3VycmVudFN0eWxlW20uY2FtZWxDYXNlKCldOwp9dmFyIGw9dGhpcy5nZXREb2N1bWVudCgpLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKTtyZXR1cm4obCk/bC5nZXRQcm9wZXJ0eVZhbHVlKFttLmh5cGhlbmF0ZSgpXSk6bnVsbDt9LHRvUXVlcnlTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgbD1bXTsKdGhpcy5nZXRFbGVtZW50cygiaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEiLHRydWUpLmVhY2goZnVuY3Rpb24obSl7aWYoIW0ubmFtZXx8bS5kaXNhYmxlZHx8bS50eXBlPT0ic3VibWl0Inx8bS50eXBlPT0icmVzZXQifHxtLnR5cGU9PSJmaWxlIil7cmV0dXJuO312YXIgbj0obS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJzZWxlY3QiKT9FbGVtZW50LmdldFNlbGVjdGVkKG0pLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gby52YWx1ZTsKfSk6KChtLnR5cGU9PSJyYWRpbyJ8fG0udHlwZT09ImNoZWNrYm94IikmJiFtLmNoZWNrZWQpP251bGw6bS52YWx1ZTskc3BsYXQobikuZWFjaChmdW5jdGlvbihvKXtpZih0eXBlb2YgbyE9InVuZGVmaW5lZCIpe2wucHVzaChtLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChvKSk7Cn19KTt9KTtyZXR1cm4gbC5qb2luKCImIik7fSxjbG9uZTpmdW5jdGlvbihvLGwpe289byE9PWZhbHNlO3ZhciByPXRoaXMuY2xvbmVOb2RlKG8pO3ZhciBuPWZ1bmN0aW9uKHYsdSl7aWYoIWwpe3YucmVtb3ZlQXR0cmlidXRlKCJpZCIpO31pZihCcm93c2VyLkVuZ2luZS50cmlkZW50KXt2LmNsZWFyQXR0cmlidXRlcygpOwp2Lm1lcmdlQXR0cmlidXRlcyh1KTt2LnJlbW92ZUF0dHJpYnV0ZSgidWlkIik7aWYodi5vcHRpb25zKXt2YXIgdz12Lm9wdGlvbnMscz11Lm9wdGlvbnM7Zm9yKHZhciB0PXcubGVuZ3RoO3QtLTspe3dbdF0uc2VsZWN0ZWQ9c1t0XS5zZWxlY3RlZDt9fX12YXIgeD1pW3UudGFnTmFtZS50b0xvd2VyQ2FzZSgpXTsKaWYoeCYmdVt4XSl7dlt4XT11W3hdO319O2lmKG8pe3ZhciBwPXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxxPXRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtmb3IodmFyIG09cC5sZW5ndGg7bS0tOyl7bihwW21dLHFbbV0pO319bihyLHRoaXMpO3JldHVybiBkb2N1bWVudC5pZChyKTsKfSxkZXN0cm95OmZ1bmN0aW9uKCl7RWxlbWVudC5lbXB0eSh0aGlzKTtFbGVtZW50LmRpc3Bvc2UodGhpcyk7Zyh0aGlzLHRydWUpO3JldHVybiBudWxsO30sZW1wdHk6ZnVuY3Rpb24oKXskQSh0aGlzLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24obCl7RWxlbWVudC5kZXN0cm95KGwpOwp9KTtyZXR1cm4gdGhpczt9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5wYXJlbnROb2RlKT90aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk6dGhpczt9LGhhc0NoaWxkOmZ1bmN0aW9uKGwpe2w9ZG9jdW1lbnQuaWQobCx0cnVlKTtpZighbCl7cmV0dXJuIGZhbHNlOwp9aWYoQnJvd3Nlci5FbmdpbmUud2Via2l0JiZCcm93c2VyLkVuZ2luZS52ZXJzaW9uPDQyMCl7cmV0dXJuICRBKHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobC50YWdOYW1lKSkuY29udGFpbnMobCk7fXJldHVybih0aGlzLmNvbnRhaW5zKT8odGhpcyE9bCYmdGhpcy5jb250YWlucyhsKSk6ISEodGhpcy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihsKSYxNik7Cn0sbWF0Y2g6ZnVuY3Rpb24obCl7cmV0dXJuKCFsfHwobD09dGhpcyl8fChFbGVtZW50LmdldCh0aGlzLCJ0YWciKT09bCkpO319KTtOYXRpdmUuaW1wbGVtZW50KFtFbGVtZW50LFdpbmRvdyxEb2N1bWVudF0se2FkZExpc3RlbmVyOmZ1bmN0aW9uKG8sbil7aWYobz09InVubG9hZCIpe3ZhciBsPW4sbT10aGlzOwpuPWZ1bmN0aW9uKCl7bS5yZW1vdmVMaXN0ZW5lcigidW5sb2FkIixuKTtsKCk7fTt9ZWxzZXtoW3RoaXMudWlkXT10aGlzO31pZih0aGlzLmFkZEV2ZW50TGlzdGVuZXIpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLG4sZmFsc2UpO31lbHNle3RoaXMuYXR0YWNoRXZlbnQoIm9uIitvLG4pOwp9cmV0dXJuIHRoaXM7fSxyZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihtLGwpe2lmKHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcil7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG0sbCxmYWxzZSk7fWVsc2V7dGhpcy5kZXRhY2hFdmVudCgib24iK20sbCk7fXJldHVybiB0aGlzOwp9LHJldHJpZXZlOmZ1bmN0aW9uKG0sbCl7dmFyIG89Yyh0aGlzLnVpZCksbj1vW21dO2lmKGwhPXVuZGVmaW5lZCYmbj09dW5kZWZpbmVkKXtuPW9bbV09bDt9cmV0dXJuICRwaWNrKG4pO30sc3RvcmU6ZnVuY3Rpb24obSxsKXt2YXIgbj1jKHRoaXMudWlkKTtuW21dPWw7CnJldHVybiB0aGlzO30sZWxpbWluYXRlOmZ1bmN0aW9uKGwpe3ZhciBtPWModGhpcy51aWQpO2RlbGV0ZSBtW2xdO3JldHVybiB0aGlzO319KTt3aW5kb3cuYWRkTGlzdGVuZXIoInVubG9hZCIsZCk7fSkoKTtFbGVtZW50LlByb3BlcnRpZXM9bmV3IEhhc2g7RWxlbWVudC5Qcm9wZXJ0aWVzLnN0eWxlPXtzZXQ6ZnVuY3Rpb24oYSl7dGhpcy5zdHlsZS5jc3NUZXh0PWE7Cn0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUuY3NzVGV4dDt9LGVyYXNlOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5jc3NUZXh0PSIiO319O0VsZW1lbnQuUHJvcGVydGllcy50YWc9e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKfX07RWxlbWVudC5Qcm9wZXJ0aWVzLmh0bWw9KGZ1bmN0aW9uKCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dmFyIGE9e3RhYmxlOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxzZWxlY3Q6WzEsIjxzZWxlY3Q+IiwiPC9zZWxlY3Q+Il0sdGJvZHk6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRyOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXX07CmEudGhlYWQ9YS50Zm9vdD1hLnRib2R5O3ZhciBiPXtzZXQ6ZnVuY3Rpb24oKXt2YXIgZT1BcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuam9pbigiIik7dmFyIGY9QnJvd3Nlci5FbmdpbmUudHJpZGVudCYmYVt0aGlzLmdldCgidGFnIildO2lmKGYpe3ZhciBnPWM7Zy5pbm5lckhUTUw9ZlsxXStlK2ZbMl07CmZvcih2YXIgZD1mWzBdO2QtLTspe2c9Zy5maXJzdENoaWxkO310aGlzLmVtcHR5KCkuYWRvcHQoZy5jaGlsZE5vZGVzKTt9ZWxzZXt0aGlzLmlubmVySFRNTD1lO319fTtiLmVyYXNlPWIuc2V0O3JldHVybiBiO30pKCk7aWYoQnJvd3Nlci5FbmdpbmUud2Via2l0JiZCcm93c2VyLkVuZ2luZS52ZXJzaW9uPDQyMCl7RWxlbWVudC5Qcm9wZXJ0aWVzLnRleHQ9e2dldDpmdW5jdGlvbigpe2lmKHRoaXMuaW5uZXJUZXh0KXtyZXR1cm4gdGhpcy5pbm5lclRleHQ7Cn12YXIgYT10aGlzLm93bmVyRG9jdW1lbnQubmV3RWxlbWVudCgiZGl2Iix7aHRtbDp0aGlzLmlubmVySFRNTH0pLmluamVjdCh0aGlzLm93bmVyRG9jdW1lbnQuYm9keSk7dmFyIGI9YS5pbm5lclRleHQ7YS5kZXN0cm95KCk7cmV0dXJuIGI7fX07fUVsZW1lbnQuUHJvcGVydGllcy5ldmVudHM9e3NldDpmdW5jdGlvbihhKXt0aGlzLmFkZEV2ZW50cyhhKTsKfX07TmF0aXZlLmltcGxlbWVudChbRWxlbWVudCxXaW5kb3csRG9jdW1lbnRdLHthZGRFdmVudDpmdW5jdGlvbihlLGcpe3ZhciBoPXRoaXMucmV0cmlldmUoImV2ZW50cyIse30pO2hbZV09aFtlXXx8e2tleXM6W10sdmFsdWVzOltdfTtpZihoW2VdLmtleXMuY29udGFpbnMoZykpe3JldHVybiB0aGlzOwp9aFtlXS5rZXlzLnB1c2goZyk7dmFyIGY9ZSxhPUVsZW1lbnQuRXZlbnRzLmdldChlKSxjPWcsaT10aGlzO2lmKGEpe2lmKGEub25BZGQpe2Eub25BZGQuY2FsbCh0aGlzLGcpO31pZihhLmNvbmRpdGlvbil7Yz1mdW5jdGlvbihqKXtpZihhLmNvbmRpdGlvbi5jYWxsKHRoaXMsaikpe3JldHVybiBnLmNhbGwodGhpcyxqKTsKfXJldHVybiB0cnVlO307fWY9YS5iYXNlfHxmO312YXIgZD1mdW5jdGlvbigpe3JldHVybiBnLmNhbGwoaSk7fTt2YXIgYj1FbGVtZW50Lk5hdGl2ZUV2ZW50c1tmXTtpZihiKXtpZihiPT0yKXtkPWZ1bmN0aW9uKGope2o9bmV3IEV2ZW50KGosaS5nZXRXaW5kb3coKSk7CmlmKGMuY2FsbChpLGopPT09ZmFsc2Upe2ouc3RvcCgpO319O310aGlzLmFkZExpc3RlbmVyKGYsZCk7fWhbZV0udmFsdWVzLnB1c2goZCk7cmV0dXJuIHRoaXM7fSxyZW1vdmVFdmVudDpmdW5jdGlvbihjLGIpe3ZhciBhPXRoaXMucmV0cmlldmUoImV2ZW50cyIpO2lmKCFhfHwhYVtjXSl7cmV0dXJuIHRoaXM7Cn12YXIgZj1hW2NdLmtleXMuaW5kZXhPZihiKTtpZihmPT0tMSl7cmV0dXJuIHRoaXM7fWFbY10ua2V5cy5zcGxpY2UoZiwxKTt2YXIgZT1hW2NdLnZhbHVlcy5zcGxpY2UoZiwxKVswXTt2YXIgZD1FbGVtZW50LkV2ZW50cy5nZXQoYyk7aWYoZCl7aWYoZC5vblJlbW92ZSl7ZC5vblJlbW92ZS5jYWxsKHRoaXMsYik7Cn1jPWQuYmFzZXx8Yzt9cmV0dXJuKEVsZW1lbnQuTmF0aXZlRXZlbnRzW2NdKT90aGlzLnJlbW92ZUxpc3RlbmVyKGMsZSk6dGhpczt9LGFkZEV2ZW50czpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSl7dGhpcy5hZGRFdmVudChiLGFbYl0pO31yZXR1cm4gdGhpczsKfSxyZW1vdmVFdmVudHM6ZnVuY3Rpb24oYSl7dmFyIGM7aWYoJHR5cGUoYSk9PSJvYmplY3QiKXtmb3IoYyBpbiBhKXt0aGlzLnJlbW92ZUV2ZW50KGMsYVtjXSk7fXJldHVybiB0aGlzO312YXIgYj10aGlzLnJldHJpZXZlKCJldmVudHMiKTtpZighYil7cmV0dXJuIHRoaXM7Cn1pZighYSl7Zm9yKGMgaW4gYil7dGhpcy5yZW1vdmVFdmVudHMoYyk7fXRoaXMuZWxpbWluYXRlKCJldmVudHMiKTt9ZWxzZXtpZihiW2FdKXt3aGlsZShiW2FdLmtleXNbMF0pe3RoaXMucmVtb3ZlRXZlbnQoYSxiW2FdLmtleXNbMF0pO31iW2FdPW51bGw7fX1yZXR1cm4gdGhpczsKfSxmaXJlRXZlbnQ6ZnVuY3Rpb24oZCxiLGEpe3ZhciBjPXRoaXMucmV0cmlldmUoImV2ZW50cyIpO2lmKCFjfHwhY1tkXSl7cmV0dXJuIHRoaXM7fWNbZF0ua2V5cy5lYWNoKGZ1bmN0aW9uKGUpe2UuY3JlYXRlKHtiaW5kOnRoaXMsZGVsYXk6YSwiYXJndW1lbnRzIjpifSkoKTsKfSx0aGlzKTtyZXR1cm4gdGhpczt9LGNsb25lRXZlbnRzOmZ1bmN0aW9uKGQsYSl7ZD1kb2N1bWVudC5pZChkKTt2YXIgYz1kLnJldHJpZXZlKCJldmVudHMiKTtpZighYyl7cmV0dXJuIHRoaXM7fWlmKCFhKXtmb3IodmFyIGIgaW4gYyl7dGhpcy5jbG9uZUV2ZW50cyhkLGIpOwp9fWVsc2V7aWYoY1thXSl7Y1thXS5rZXlzLmVhY2goZnVuY3Rpb24oZSl7dGhpcy5hZGRFdmVudChhLGUpO30sdGhpcyk7fX1yZXR1cm4gdGhpczt9fSk7RWxlbWVudC5OYXRpdmVFdmVudHM9e2NsaWNrOjIsZGJsY2xpY2s6Mixtb3VzZXVwOjIsbW91c2Vkb3duOjIsY29udGV4dG1lbnU6Mixtb3VzZXdoZWVsOjIsRE9NTW91c2VTY3JvbGw6Mixtb3VzZW92ZXI6Mixtb3VzZW91dDoyLG1vdXNlbW92ZToyLHNlbGVjdHN0YXJ0OjIsc2VsZWN0ZW5kOjIsa2V5ZG93bjoyLGtleXByZXNzOjIsa2V5dXA6Mixmb2N1czoyLGJsdXI6MixjaGFuZ2U6MixyZXNldDoyLHNlbGVjdDoyLHN1Ym1pdDoyLGxvYWQ6MSx1bmxvYWQ6MSxiZWZvcmV1bmxvYWQ6MixyZXNpemU6MSxtb3ZlOjEsRE9NQ29udGVudExvYWRlZDoxLHJlYWR5c3RhdGVjaGFuZ2U6MSxlcnJvcjoxLGFib3J0OjEsc2Nyb2xsOjF9OwooZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbihiKXt2YXIgYz1iLnJlbGF0ZWRUYXJnZXQ7aWYoYz09dW5kZWZpbmVkKXtyZXR1cm4gdHJ1ZTt9aWYoYz09PWZhbHNlKXtyZXR1cm4gZmFsc2U7fXJldHVybigkdHlwZSh0aGlzKSE9ImRvY3VtZW50IiYmYyE9dGhpcyYmYy5wcmVmaXghPSJ4dWwiJiYhdGhpcy5oYXNDaGlsZChjKSk7Cn07RWxlbWVudC5FdmVudHM9bmV3IEhhc2goe21vdXNlZW50ZXI6e2Jhc2U6Im1vdXNlb3ZlciIsY29uZGl0aW9uOmF9LG1vdXNlbGVhdmU6e2Jhc2U6Im1vdXNlb3V0Iixjb25kaXRpb246YX0sbW91c2V3aGVlbDp7YmFzZTooQnJvd3Nlci5FbmdpbmUuZ2Vja28pPyJET01Nb3VzZVNjcm9sbCI6Im1vdXNld2hlZWwifX0pOwp9KSgpO0VsZW1lbnQuUHJvcGVydGllcy5zdHlsZXM9e3NldDpmdW5jdGlvbihhKXt0aGlzLnNldFN0eWxlcyhhKTt9fTtFbGVtZW50LlByb3BlcnRpZXMub3BhY2l0eT17c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWIpe2lmKGE9PTApe2lmKHRoaXMuc3R5bGUudmlzaWJpbGl0eSE9ImhpZGRlbiIpe3RoaXMuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKfX1lbHNle2lmKHRoaXMuc3R5bGUudmlzaWJpbGl0eSE9InZpc2libGUiKXt0aGlzLnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUiO319fWlmKCF0aGlzLmN1cnJlbnRTdHlsZXx8IXRoaXMuY3VycmVudFN0eWxlLmhhc0xheW91dCl7dGhpcy5zdHlsZS56b29tPTE7fWlmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe3RoaXMuc3R5bGUuZmlsdGVyPShhPT0xKT8iIjoiYWxwaGEob3BhY2l0eT0iK2EqMTAwKyIpIjsKfXRoaXMuc3R5bGUub3BhY2l0eT1hO3RoaXMuc3RvcmUoIm9wYWNpdHkiLGEpO30sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV0cmlldmUoIm9wYWNpdHkiLDEpO319O0VsZW1lbnQuaW1wbGVtZW50KHtzZXRPcGFjaXR5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnNldCgib3BhY2l0eSIsYSx0cnVlKTsKfSxnZXRPcGFjaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7fSxzZXRTdHlsZTpmdW5jdGlvbihiLGEpe3N3aXRjaChiKXtjYXNlIm9wYWNpdHkiOnJldHVybiB0aGlzLnNldCgib3BhY2l0eSIscGFyc2VGbG9hdChhKSk7Y2FzZSJmbG9hdCI6Yj0oQnJvd3Nlci5FbmdpbmUudHJpZGVudCk/InN0eWxlRmxvYXQiOiJjc3NGbG9hdCI7Cn1iPWIuY2FtZWxDYXNlKCk7aWYoJHR5cGUoYSkhPSJzdHJpbmciKXt2YXIgYz0oRWxlbWVudC5TdHlsZXMuZ2V0KGIpfHwiQCIpLnNwbGl0KCIgIik7YT0kc3BsYXQoYSkubWFwKGZ1bmN0aW9uKGUsZCl7aWYoIWNbZF0pe3JldHVybiIiO31yZXR1cm4oJHR5cGUoZSk9PSJudW1iZXIiKT9jW2RdLnJlcGxhY2UoIkAiLE1hdGgucm91bmQoZSkpOmU7Cn0pLmpvaW4oIiAiKTt9ZWxzZXtpZihhPT1TdHJpbmcoTnVtYmVyKGEpKSl7YT1NYXRoLnJvdW5kKGEpO319dGhpcy5zdHlsZVtiXT1hO3JldHVybiB0aGlzO30sZ2V0U3R5bGU6ZnVuY3Rpb24oZyl7c3dpdGNoKGcpe2Nhc2Uib3BhY2l0eSI6cmV0dXJuIHRoaXMuZ2V0KCJvcGFjaXR5Iik7CmNhc2UiZmxvYXQiOmc9KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpPyJzdHlsZUZsb2F0IjoiY3NzRmxvYXQiO31nPWcuY2FtZWxDYXNlKCk7dmFyIGE9dGhpcy5zdHlsZVtnXTtpZighJGNoayhhKSl7YT1bXTtmb3IodmFyIGYgaW4gRWxlbWVudC5TaG9ydFN0eWxlcyl7aWYoZyE9Zil7Y29udGludWU7Cn1mb3IodmFyIGUgaW4gRWxlbWVudC5TaG9ydFN0eWxlc1tmXSl7YS5wdXNoKHRoaXMuZ2V0U3R5bGUoZSkpO31yZXR1cm4gYS5qb2luKCIgIik7fWE9dGhpcy5nZXRDb21wdXRlZFN0eWxlKGcpO31pZihhKXthPVN0cmluZyhhKTt2YXIgYz1hLm1hdGNoKC9yZ2JhP1woW1xkXHMsXStcKS8pOwppZihjKXthPWEucmVwbGFjZShjWzBdLGNbMF0ucmdiVG9IZXgoKSk7fX1pZihCcm93c2VyLkVuZ2luZS5wcmVzdG98fChCcm93c2VyLkVuZ2luZS50cmlkZW50JiYhJGNoayhwYXJzZUludChhLDEwKSkpKXtpZihnLnRlc3QoL14oaGVpZ2h0fHdpZHRoKSQvKSl7dmFyIGI9KGc9PSJ3aWR0aCIpP1sibGVmdCIsInJpZ2h0Il06WyJ0b3AiLCJib3R0b20iXSxkPTA7CmIuZWFjaChmdW5jdGlvbihoKXtkKz10aGlzLmdldFN0eWxlKCJib3JkZXItIitoKyItd2lkdGgiKS50b0ludCgpK3RoaXMuZ2V0U3R5bGUoInBhZGRpbmctIitoKS50b0ludCgpO30sdGhpcyk7cmV0dXJuIHRoaXNbIm9mZnNldCIrZy5jYXBpdGFsaXplKCldLWQrInB4IjsKfWlmKChCcm93c2VyLkVuZ2luZS5wcmVzdG8pJiZTdHJpbmcoYSkudGVzdCgicHgiKSl7cmV0dXJuIGE7fWlmKGcudGVzdCgvKGJvcmRlciguKylXaWR0aHxtYXJnaW58cGFkZGluZykvKSl7cmV0dXJuIjBweCI7fX1yZXR1cm4gYTt9LHNldFN0eWxlczpmdW5jdGlvbihiKXtmb3IodmFyIGEgaW4gYil7dGhpcy5zZXRTdHlsZShhLGJbYV0pOwp9cmV0dXJuIHRoaXM7fSxnZXRTdHlsZXM6ZnVuY3Rpb24oKXt2YXIgYT17fTtBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihiKXthW2JdPXRoaXMuZ2V0U3R5bGUoYik7fSx0aGlzKTtyZXR1cm4gYTt9fSk7RWxlbWVudC5TdHlsZXM9bmV3IEhhc2goe2xlZnQ6IkBweCIsdG9wOiJAcHgiLGJvdHRvbToiQHB4IixyaWdodDoiQHB4Iix3aWR0aDoiQHB4IixoZWlnaHQ6IkBweCIsbWF4V2lkdGg6IkBweCIsbWF4SGVpZ2h0OiJAcHgiLG1pbldpZHRoOiJAcHgiLG1pbkhlaWdodDoiQHB4IixiYWNrZ3JvdW5kQ29sb3I6InJnYihALCBALCBAKSIsYmFja2dyb3VuZFBvc2l0aW9uOiJAcHggQHB4Iixjb2xvcjoicmdiKEAsIEAsIEApIixmb250U2l6ZToiQHB4IixsZXR0ZXJTcGFjaW5nOiJAcHgiLGxpbmVIZWlnaHQ6IkBweCIsY2xpcDoicmVjdChAcHggQHB4IEBweCBAcHgpIixtYXJnaW46IkBweCBAcHggQHB4IEBweCIscGFkZGluZzoiQHB4IEBweCBAcHggQHB4Iixib3JkZXI6IkBweCBAIHJnYihALCBALCBAKSBAcHggQCByZ2IoQCwgQCwgQCkgQHB4IEAgcmdiKEAsIEAsIEApIixib3JkZXJXaWR0aDoiQHB4IEBweCBAcHggQHB4Iixib3JkZXJTdHlsZToiQCBAIEAgQCIsYm9yZGVyQ29sb3I6InJnYihALCBALCBAKSByZ2IoQCwgQCwgQCkgcmdiKEAsIEAsIEApIHJnYihALCBALCBAKSIsekluZGV4OiJAIix6b29tOiJAIixmb250V2VpZ2h0OiJAIix0ZXh0SW5kZW50OiJAcHgiLG9wYWNpdHk6IkAifSk7CkVsZW1lbnQuU2hvcnRTdHlsZXM9e21hcmdpbjp7fSxwYWRkaW5nOnt9LGJvcmRlcjp7fSxib3JkZXJXaWR0aDp7fSxib3JkZXJTdHlsZTp7fSxib3JkZXJDb2xvcjp7fX07WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXS5lYWNoKGZ1bmN0aW9uKGcpe3ZhciBmPUVsZW1lbnQuU2hvcnRTdHlsZXM7CnZhciBiPUVsZW1lbnQuU3R5bGVzO1sibWFyZ2luIiwicGFkZGluZyJdLmVhY2goZnVuY3Rpb24oaCl7dmFyIGk9aCtnO2ZbaF1baV09YltpXT0iQHB4Ijt9KTt2YXIgZT0iYm9yZGVyIitnO2YuYm9yZGVyW2VdPWJbZV09IkBweCBAIHJnYihALCBALCBAKSI7dmFyIGQ9ZSsiV2lkdGgiLGE9ZSsiU3R5bGUiLGM9ZSsiQ29sb3IiOwpmW2VdPXt9O2YuYm9yZGVyV2lkdGhbZF09ZltlXVtkXT1iW2RdPSJAcHgiO2YuYm9yZGVyU3R5bGVbYV09ZltlXVthXT1iW2FdPSJAIjtmLmJvcmRlckNvbG9yW2NdPWZbZV1bY109YltjXT0icmdiKEAsIEAsIEApIjt9KTsoZnVuY3Rpb24oKXtFbGVtZW50LmltcGxlbWVudCh7c2Nyb2xsVG86ZnVuY3Rpb24oaCxpKXtpZihiKHRoaXMpKXt0aGlzLmdldFdpbmRvdygpLnNjcm9sbFRvKGgsaSk7Cn1lbHNle3RoaXMuc2Nyb2xsTGVmdD1oO3RoaXMuc2Nyb2xsVG9wPWk7fXJldHVybiB0aGlzO30sZ2V0U2l6ZTpmdW5jdGlvbigpe2lmKGIodGhpcykpe3JldHVybiB0aGlzLmdldFdpbmRvdygpLmdldFNpemUoKTt9cmV0dXJue3g6dGhpcy5vZmZzZXRXaWR0aCx5OnRoaXMub2Zmc2V0SGVpZ2h0fTsKfSxnZXRTY3JvbGxTaXplOmZ1bmN0aW9uKCl7aWYoYih0aGlzKSl7cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsU2l6ZSgpO31yZXR1cm57eDp0aGlzLnNjcm9sbFdpZHRoLHk6dGhpcy5zY3JvbGxIZWlnaHR9O30sZ2V0U2Nyb2xsOmZ1bmN0aW9uKCl7aWYoYih0aGlzKSl7cmV0dXJuIHRoaXMuZ2V0V2luZG93KCkuZ2V0U2Nyb2xsKCk7Cn1yZXR1cm57eDp0aGlzLnNjcm9sbExlZnQseTp0aGlzLnNjcm9sbFRvcH07fSxnZXRTY3JvbGxzOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcyxoPXt4OjAseTowfTt3aGlsZShpJiYhYihpKSl7aC54Kz1pLnNjcm9sbExlZnQ7aC55Kz1pLnNjcm9sbFRvcDtpPWkucGFyZW50Tm9kZTsKfXJldHVybiBoO30sZ2V0T2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7dmFyIGg9dGhpcztpZihiKGgpKXtyZXR1cm4gbnVsbDt9aWYoIUJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe3JldHVybiBoLm9mZnNldFBhcmVudDt9d2hpbGUoKGg9aC5wYXJlbnROb2RlKSYmIWIoaCkpe2lmKGQoaCwicG9zaXRpb24iKSE9InN0YXRpYyIpe3JldHVybiBoOwp9fXJldHVybiBudWxsO30sZ2V0T2Zmc2V0czpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXt2YXIgaj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09ZG9jdW1lbnQuaWQodGhpcy5nZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCkscD1tLmdldFNjcm9sbCgpLGs9dGhpcy5nZXRTY3JvbGxzKCksaT10aGlzLmdldFNjcm9sbCgpLGg9KGQodGhpcywicG9zaXRpb24iKT09ImZpeGVkIik7CnJldHVybnt4OmoubGVmdC50b0ludCgpK2sueC1pLngrKChoKT8wOnAueCktbS5jbGllbnRMZWZ0LHk6ai50b3AudG9JbnQoKStrLnktaS55KygoaCk/MDpwLnkpLW0uY2xpZW50VG9wfTt9dmFyIGw9dGhpcyxuPXt4OjAseTowfTtpZihiKHRoaXMpKXtyZXR1cm4gbjsKfXdoaWxlKGwmJiFiKGwpKXtuLngrPWwub2Zmc2V0TGVmdDtuLnkrPWwub2Zmc2V0VG9wO2lmKEJyb3dzZXIuRW5naW5lLmdlY2tvKXtpZighZihsKSl7bi54Kz1jKGwpO24ueSs9ZyhsKTt9dmFyIG89bC5wYXJlbnROb2RlO2lmKG8mJmQobywib3ZlcmZsb3ciKSE9InZpc2libGUiKXtuLngrPWMobyk7Cm4ueSs9ZyhvKTt9fWVsc2V7aWYobCE9dGhpcyYmQnJvd3Nlci5FbmdpbmUud2Via2l0KXtuLngrPWMobCk7bi55Kz1nKGwpO319bD1sLm9mZnNldFBhcmVudDt9aWYoQnJvd3Nlci5FbmdpbmUuZ2Vja28mJiFmKHRoaXMpKXtuLngtPWModGhpcyk7bi55LT1nKHRoaXMpOwp9cmV0dXJuIG47fSxnZXRQb3NpdGlvbjpmdW5jdGlvbihrKXtpZihiKHRoaXMpKXtyZXR1cm57eDowLHk6MH07fXZhciBsPXRoaXMuZ2V0T2Zmc2V0cygpLGk9dGhpcy5nZXRTY3JvbGxzKCk7dmFyIGg9e3g6bC54LWkueCx5OmwueS1pLnl9O3ZhciBqPShrJiYoaz1kb2N1bWVudC5pZChrKSkpP2suZ2V0UG9zaXRpb24oKTp7eDowLHk6MH07CnJldHVybnt4OmgueC1qLngseTpoLnktai55fTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKGope2lmKGIodGhpcykpe3JldHVybiB0aGlzLmdldFdpbmRvdygpLmdldENvb3JkaW5hdGVzKCk7fXZhciBoPXRoaXMuZ2V0UG9zaXRpb24oaiksaT10aGlzLmdldFNpemUoKTsKdmFyIGs9e2xlZnQ6aC54LHRvcDpoLnksd2lkdGg6aS54LGhlaWdodDppLnl9O2sucmlnaHQ9ay5sZWZ0K2sud2lkdGg7ay5ib3R0b209ay50b3Aray5oZWlnaHQ7cmV0dXJuIGs7fSxjb21wdXRlUG9zaXRpb246ZnVuY3Rpb24oaCl7cmV0dXJue2xlZnQ6aC54LWUodGhpcywibWFyZ2luLWxlZnQiKSx0b3A6aC55LWUodGhpcywibWFyZ2luLXRvcCIpfTsKfSxzZXRQb3NpdGlvbjpmdW5jdGlvbihoKXtyZXR1cm4gdGhpcy5zZXRTdHlsZXModGhpcy5jb21wdXRlUG9zaXRpb24oaCkpO319KTtOYXRpdmUuaW1wbGVtZW50KFtEb2N1bWVudCxXaW5kb3ddLHtnZXRTaXplOmZ1bmN0aW9uKCl7aWYoQnJvd3Nlci5FbmdpbmUucHJlc3RvfHxCcm93c2VyLkVuZ2luZS53ZWJraXQpe3ZhciBpPXRoaXMuZ2V0V2luZG93KCk7CnJldHVybnt4OmkuaW5uZXJXaWR0aCx5OmkuaW5uZXJIZWlnaHR9O312YXIgaD1hKHRoaXMpO3JldHVybnt4OmguY2xpZW50V2lkdGgseTpoLmNsaWVudEhlaWdodH07fSxnZXRTY3JvbGw6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmdldFdpbmRvdygpLGg9YSh0aGlzKTsKcmV0dXJue3g6aS5wYWdlWE9mZnNldHx8aC5zY3JvbGxMZWZ0LHk6aS5wYWdlWU9mZnNldHx8aC5zY3JvbGxUb3B9O30sZ2V0U2Nyb2xsU2l6ZTpmdW5jdGlvbigpe3ZhciBpPWEodGhpcyksaD10aGlzLmdldFNpemUoKTtyZXR1cm57eDpNYXRoLm1heChpLnNjcm9sbFdpZHRoLGgueCkseTpNYXRoLm1heChpLnNjcm9sbEhlaWdodCxoLnkpfTsKfSxnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybnt4OjAseTowfTt9LGdldENvb3JkaW5hdGVzOmZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5nZXRTaXplKCk7cmV0dXJue3RvcDowLGxlZnQ6MCxib3R0b206aC55LHJpZ2h0OmgueCxoZWlnaHQ6aC55LHdpZHRoOmgueH07Cn19KTt2YXIgZD1FbGVtZW50LmdldENvbXB1dGVkU3R5bGU7ZnVuY3Rpb24gZShoLGkpe3JldHVybiBkKGgsaSkudG9JbnQoKXx8MDt9ZnVuY3Rpb24gZihoKXtyZXR1cm4gZChoLCItbW96LWJveC1zaXppbmciKT09ImJvcmRlci1ib3giO31mdW5jdGlvbiBnKGgpe3JldHVybiBlKGgsImJvcmRlci10b3Atd2lkdGgiKTsKfWZ1bmN0aW9uIGMoaCl7cmV0dXJuIGUoaCwiYm9yZGVyLWxlZnQtd2lkdGgiKTt9ZnVuY3Rpb24gYihoKXtyZXR1cm4oL14oPzpib2R5fGh0bWwpJC9pKS50ZXN0KGgudGFnTmFtZSk7fWZ1bmN0aW9uIGEoaCl7dmFyIGk9aC5nZXREb2N1bWVudCgpO3JldHVybighaS5jb21wYXRNb2RlfHxpLmNvbXBhdE1vZGU9PSJDU1MxQ29tcGF0Iik/aS5odG1sOmkuYm9keTsKfX0pKCk7RWxlbWVudC5hbGlhcygic2V0UG9zaXRpb24iLCJwb3NpdGlvbiIpO05hdGl2ZS5pbXBsZW1lbnQoW1dpbmRvdyxEb2N1bWVudCxFbGVtZW50XSx7Z2V0SGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2l6ZSgpLnk7fSxnZXRXaWR0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNpemUoKS54Owp9LGdldFNjcm9sbFRvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNjcm9sbCgpLnk7fSxnZXRTY3JvbGxMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsKCkueDt9LGdldFNjcm9sbEhlaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFNjcm9sbFNpemUoKS55Owp9LGdldFNjcm9sbFdpZHRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0U2Nyb2xsU2l6ZSgpLng7fSxnZXRUb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpLnk7fSxnZXRMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UG9zaXRpb24oKS54Owp9fSk7TmF0aXZlLmltcGxlbWVudChbRG9jdW1lbnQsRWxlbWVudF0se2dldEVsZW1lbnRzOmZ1bmN0aW9uKGgsZyl7aD1oLnNwbGl0KCIsIik7dmFyIGMsZT17fTtmb3IodmFyIGQ9MCxiPWgubGVuZ3RoO2Q8YjtkKyspe3ZhciBhPWhbZF0sZj1TZWxlY3RvcnMuVXRpbHMuc2VhcmNoKHRoaXMsYSxlKTsKaWYoZCE9MCYmZi5pdGVtKXtmPSRBKGYpO31jPShkPT0wKT9mOihjLml0ZW0pPyRBKGMpLmNvbmNhdChmKTpjLmNvbmNhdChmKTt9cmV0dXJuIG5ldyBFbGVtZW50cyhjLHtkZHVwOihoLmxlbmd0aD4xKSxjYXNoOiFnfSk7fX0pO0VsZW1lbnQuaW1wbGVtZW50KHttYXRjaDpmdW5jdGlvbihiKXtpZighYnx8KGI9PXRoaXMpKXtyZXR1cm4gdHJ1ZTsKfXZhciBkPVNlbGVjdG9ycy5VdGlscy5wYXJzZVRhZ0FuZElEKGIpO3ZhciBhPWRbMF0sZT1kWzFdO2lmKCFTZWxlY3RvcnMuRmlsdGVycy5ieUlEKHRoaXMsZSl8fCFTZWxlY3RvcnMuRmlsdGVycy5ieVRhZyh0aGlzLGEpKXtyZXR1cm4gZmFsc2U7fXZhciBjPVNlbGVjdG9ycy5VdGlscy5wYXJzZVNlbGVjdG9yKGIpOwpyZXR1cm4oYyk/U2VsZWN0b3JzLlV0aWxzLmZpbHRlcih0aGlzLGMse30pOnRydWU7fX0pO3ZhciBTZWxlY3RvcnM9e0NhY2hlOntudGg6e30scGFyc2VkOnt9fX07U2VsZWN0b3JzLlJlZ0V4cHM9e2lkOigvIyhbXHctXSspLyksdGFnOigvXihcdyt8XCopLykscXVpY2s6KC9eKFx3K3xcKikkLyksc3BsaXR0ZXI6KC9ccyooWys+flxzXSlccyooW2EtekEtWiMuKjpcW10pL2cpLGNvbWJpbmVkOigvXC4oW1x3LV0rKXxcWyhcdyspKD86KFshKl4kfnxdPz0pKFsiJ10/KShbXlw0XSo/KVw0KT9cXXw6KFtcdy1dKykoPzpcKFsiJ10/KC4qPyk/WyInXT9cKXwkKS9nKX07ClNlbGVjdG9ycy5VdGlscz17Y2hrOmZ1bmN0aW9uKGIsYyl7aWYoIWMpe3JldHVybiB0cnVlO312YXIgYT0kdWlkKGIpO2lmKCFjW2FdKXtyZXR1cm4gY1thXT10cnVlO31yZXR1cm4gZmFsc2U7fSxwYXJzZU50aEFyZ3VtZW50OmZ1bmN0aW9uKGgpe2lmKFNlbGVjdG9ycy5DYWNoZS5udGhbaF0pe3JldHVybiBTZWxlY3RvcnMuQ2FjaGUubnRoW2hdOwp9dmFyIGU9aC5tYXRjaCgvXihbKy1dP1xkKik/KFthLXpdKyk/KFsrLV0/XGQqKT8kLyk7aWYoIWUpe3JldHVybiBmYWxzZTt9dmFyIGc9cGFyc2VJbnQoZVsxXSwxMCk7dmFyIGQ9KGd8fGc9PT0wKT9nOjE7dmFyIGY9ZVsyXXx8ZmFsc2U7dmFyIGM9cGFyc2VJbnQoZVszXSwxMCl8fDA7CmlmKGQhPTApe2MtLTt3aGlsZShjPDEpe2MrPWQ7fXdoaWxlKGM+PWQpe2MtPWQ7fX1lbHNle2Q9YztmPSJpbmRleCI7fXN3aXRjaChmKXtjYXNlIm4iOmU9e2E6ZCxiOmMsc3BlY2lhbDoibiJ9O2JyZWFrO2Nhc2Uib2RkIjplPXthOjIsYjowLHNwZWNpYWw6Im4ifTsKYnJlYWs7Y2FzZSJldmVuIjplPXthOjIsYjoxLHNwZWNpYWw6Im4ifTticmVhaztjYXNlImZpcnN0IjplPXthOjAsc3BlY2lhbDoiaW5kZXgifTticmVhaztjYXNlImxhc3QiOmU9e3NwZWNpYWw6Imxhc3QtY2hpbGQifTticmVhaztjYXNlIm9ubHkiOmU9e3NwZWNpYWw6Im9ubHktY2hpbGQifTsKYnJlYWs7ZGVmYXVsdDplPXthOihkLTEpLHNwZWNpYWw6ImluZGV4In07fXJldHVybiBTZWxlY3RvcnMuQ2FjaGUubnRoW2hdPWU7fSxwYXJzZVNlbGVjdG9yOmZ1bmN0aW9uKGUpe2lmKFNlbGVjdG9ycy5DYWNoZS5wYXJzZWRbZV0pe3JldHVybiBTZWxlY3RvcnMuQ2FjaGUucGFyc2VkW2VdOwp9dmFyIGQsaD17Y2xhc3NlczpbXSxwc2V1ZG9zOltdLGF0dHJpYnV0ZXM6W119O3doaWxlKChkPVNlbGVjdG9ycy5SZWdFeHBzLmNvbWJpbmVkLmV4ZWMoZSkpKXt2YXIgaT1kWzFdLGc9ZFsyXSxmPWRbM10sYj1kWzVdLGM9ZFs2XSxqPWRbN107aWYoaSl7aC5jbGFzc2VzLnB1c2goaSk7Cn1lbHNle2lmKGMpe3ZhciBhPVNlbGVjdG9ycy5Qc2V1ZG8uZ2V0KGMpO2lmKGEpe2gucHNldWRvcy5wdXNoKHtwYXJzZXI6YSxhcmd1bWVudDpqfSk7fWVsc2V7aC5hdHRyaWJ1dGVzLnB1c2goe25hbWU6YyxvcGVyYXRvcjoiPSIsdmFsdWU6an0pO319ZWxzZXtpZihnKXtoLmF0dHJpYnV0ZXMucHVzaCh7bmFtZTpnLG9wZXJhdG9yOmYsdmFsdWU6Yn0pOwp9fX19aWYoIWguY2xhc3Nlcy5sZW5ndGgpe2RlbGV0ZSBoLmNsYXNzZXM7fWlmKCFoLmF0dHJpYnV0ZXMubGVuZ3RoKXtkZWxldGUgaC5hdHRyaWJ1dGVzO31pZighaC5wc2V1ZG9zLmxlbmd0aCl7ZGVsZXRlIGgucHNldWRvczt9aWYoIWguY2xhc3NlcyYmIWguYXR0cmlidXRlcyYmIWgucHNldWRvcyl7aD1udWxsOwp9cmV0dXJuIFNlbGVjdG9ycy5DYWNoZS5wYXJzZWRbZV09aDt9LHBhcnNlVGFnQW5kSUQ6ZnVuY3Rpb24oYil7dmFyIGE9Yi5tYXRjaChTZWxlY3RvcnMuUmVnRXhwcy50YWcpO3ZhciBjPWIubWF0Y2goU2VsZWN0b3JzLlJlZ0V4cHMuaWQpO3JldHVyblsoYSk/YVsxXToiKiIsKGMpP2NbMV06ZmFsc2VdOwp9LGZpbHRlcjpmdW5jdGlvbihmLGMsZSl7dmFyIGQ7aWYoYy5jbGFzc2VzKXtmb3IoZD1jLmNsYXNzZXMubGVuZ3RoO2QtLTtkKXt2YXIgZz1jLmNsYXNzZXNbZF07aWYoIVNlbGVjdG9ycy5GaWx0ZXJzLmJ5Q2xhc3MoZixnKSl7cmV0dXJuIGZhbHNlO319fWlmKGMuYXR0cmlidXRlcyl7Zm9yKGQ9Yy5hdHRyaWJ1dGVzLmxlbmd0aDsKZC0tO2Qpe3ZhciBiPWMuYXR0cmlidXRlc1tkXTtpZighU2VsZWN0b3JzLkZpbHRlcnMuYnlBdHRyaWJ1dGUoZixiLm5hbWUsYi5vcGVyYXRvcixiLnZhbHVlKSl7cmV0dXJuIGZhbHNlO319fWlmKGMucHNldWRvcyl7Zm9yKGQ9Yy5wc2V1ZG9zLmxlbmd0aDtkLS07ZCl7dmFyIGE9Yy5wc2V1ZG9zW2RdOwppZighU2VsZWN0b3JzLkZpbHRlcnMuYnlQc2V1ZG8oZixhLnBhcnNlcixhLmFyZ3VtZW50LGUpKXtyZXR1cm4gZmFsc2U7fX19cmV0dXJuIHRydWU7fSxnZXRCeVRhZ0FuZElEOmZ1bmN0aW9uKGIsYSxkKXtpZihkKXt2YXIgYz0oYi5nZXRFbGVtZW50QnlJZCk/Yi5nZXRFbGVtZW50QnlJZChkLHRydWUpOkVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQoYixkLHRydWUpOwpyZXR1cm4oYyYmU2VsZWN0b3JzLkZpbHRlcnMuYnlUYWcoYyxhKSk/W2NdOltdO31lbHNle3JldHVybiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO319LHNlYXJjaDpmdW5jdGlvbihvLGgsdCl7dmFyIGI9W107dmFyIGM9aC50cmltKCkucmVwbGFjZShTZWxlY3RvcnMuUmVnRXhwcy5zcGxpdHRlcixmdW5jdGlvbihrLGosaSl7Yi5wdXNoKGopOwpyZXR1cm4iOikiK2k7fSkuc3BsaXQoIjopIik7dmFyIHAsZSxBO2Zvcih2YXIgej0wLHY9Yy5sZW5ndGg7ejx2O3orKyl7dmFyIHk9Y1t6XTtpZih6PT0wJiZTZWxlY3RvcnMuUmVnRXhwcy5xdWljay50ZXN0KHkpKXtwPW8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoeSk7CmNvbnRpbnVlO312YXIgYT1iW3otMV07dmFyIHE9U2VsZWN0b3JzLlV0aWxzLnBhcnNlVGFnQW5kSUQoeSk7dmFyIEI9cVswXSxyPXFbMV07aWYoej09MCl7cD1TZWxlY3RvcnMuVXRpbHMuZ2V0QnlUYWdBbmRJRChvLEIscik7fWVsc2V7dmFyIGQ9e30sZz1bXTtmb3IodmFyIHg9MCx3PXAubGVuZ3RoOwp4PHc7eCsrKXtnPVNlbGVjdG9ycy5HZXR0ZXJzW2FdKGcscFt4XSxCLHIsZCk7fXA9Zzt9dmFyIGY9U2VsZWN0b3JzLlV0aWxzLnBhcnNlU2VsZWN0b3IoeSk7aWYoZil7ZT1bXTtmb3IodmFyIHU9MCxzPXAubGVuZ3RoO3U8czt1Kyspe0E9cFt1XTtpZihTZWxlY3RvcnMuVXRpbHMuZmlsdGVyKEEsZix0KSl7ZS5wdXNoKEEpOwp9fXA9ZTt9fXJldHVybiBwO319O1NlbGVjdG9ycy5HZXR0ZXJzPXsiICI6ZnVuY3Rpb24oaCxnLGosYSxlKXt2YXIgZD1TZWxlY3RvcnMuVXRpbHMuZ2V0QnlUYWdBbmRJRChnLGosYSk7Zm9yKHZhciBjPTAsYj1kLmxlbmd0aDtjPGI7YysrKXt2YXIgZj1kW2NdO2lmKFNlbGVjdG9ycy5VdGlscy5jaGsoZixlKSl7aC5wdXNoKGYpOwp9fXJldHVybiBoO30sIj4iOmZ1bmN0aW9uKGgsZyxqLGEsZil7dmFyIGM9U2VsZWN0b3JzLlV0aWxzLmdldEJ5VGFnQW5kSUQoZyxqLGEpO2Zvcih2YXIgZT0wLGQ9Yy5sZW5ndGg7ZTxkO2UrKyl7dmFyIGI9Y1tlXTtpZihiLnBhcmVudE5vZGU9PWcmJlNlbGVjdG9ycy5VdGlscy5jaGsoYixmKSl7aC5wdXNoKGIpOwp9fXJldHVybiBoO30sIisiOmZ1bmN0aW9uKGMsYixhLGUsZCl7d2hpbGUoKGI9Yi5uZXh0U2libGluZykpe2lmKGIubm9kZVR5cGU9PTEpe2lmKFNlbGVjdG9ycy5VdGlscy5jaGsoYixkKSYmU2VsZWN0b3JzLkZpbHRlcnMuYnlUYWcoYixhKSYmU2VsZWN0b3JzLkZpbHRlcnMuYnlJRChiLGUpKXtjLnB1c2goYik7Cn1icmVhazt9fXJldHVybiBjO30sIn4iOmZ1bmN0aW9uKGMsYixhLGUsZCl7d2hpbGUoKGI9Yi5uZXh0U2libGluZykpe2lmKGIubm9kZVR5cGU9PTEpe2lmKCFTZWxlY3RvcnMuVXRpbHMuY2hrKGIsZCkpe2JyZWFrO31pZihTZWxlY3RvcnMuRmlsdGVycy5ieVRhZyhiLGEpJiZTZWxlY3RvcnMuRmlsdGVycy5ieUlEKGIsZSkpe2MucHVzaChiKTsKfX19cmV0dXJuIGM7fX07U2VsZWN0b3JzLkZpbHRlcnM9e2J5VGFnOmZ1bmN0aW9uKGIsYSl7cmV0dXJuKGE9PSIqInx8KGIudGFnTmFtZSYmYi50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PWEpKTt9LGJ5SUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oIWJ8fChhLmlkJiZhLmlkPT1iKSk7Cn0sYnlDbGFzczpmdW5jdGlvbihiLGEpe3JldHVybihiLmNsYXNzTmFtZSYmYi5jbGFzc05hbWUuY29udGFpbnMmJmIuY2xhc3NOYW1lLmNvbnRhaW5zKGEsIiAiKSk7fSxieVBzZXVkbzpmdW5jdGlvbihhLGQsYyxiKXtyZXR1cm4gZC5jYWxsKGEsYyxiKTt9LGJ5QXR0cmlidXRlOmZ1bmN0aW9uKGMsZCxiLGUpe3ZhciBhPUVsZW1lbnQucHJvdG90eXBlLmdldFByb3BlcnR5LmNhbGwoYyxkKTsKaWYoIWEpe3JldHVybihiPT0iIT0iKTt9aWYoIWJ8fGU9PXVuZGVmaW5lZCl7cmV0dXJuIHRydWU7fXN3aXRjaChiKXtjYXNlIj0iOnJldHVybihhPT1lKTtjYXNlIio9IjpyZXR1cm4oYS5jb250YWlucyhlKSk7Y2FzZSJePSI6cmV0dXJuKGEuc3Vic3RyKDAsZS5sZW5ndGgpPT1lKTsKY2FzZSIkPSI6cmV0dXJuKGEuc3Vic3RyKGEubGVuZ3RoLWUubGVuZ3RoKT09ZSk7Y2FzZSIhPSI6cmV0dXJuKGEhPWUpO2Nhc2Uifj0iOnJldHVybiBhLmNvbnRhaW5zKGUsIiAiKTtjYXNlInw9IjpyZXR1cm4gYS5jb250YWlucyhlLCItIik7fXJldHVybiBmYWxzZTsKfX07U2VsZWN0b3JzLlBzZXVkbz1uZXcgSGFzaCh7Y2hlY2tlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoZWNrZWQ7fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiAhKHRoaXMuaW5uZXJUZXh0fHx0aGlzLnRleHRDb250ZW50fHwiIikubGVuZ3RoO30sbm90OmZ1bmN0aW9uKGEpe3JldHVybiAhRWxlbWVudC5tYXRjaCh0aGlzLGEpOwp9LGNvbnRhaW5zOmZ1bmN0aW9uKGEpe3JldHVybih0aGlzLmlubmVyVGV4dHx8dGhpcy50ZXh0Q29udGVudHx8IiIpLmNvbnRhaW5zKGEpO30sImZpcnN0LWNoaWxkIjpmdW5jdGlvbigpe3JldHVybiBTZWxlY3RvcnMuUHNldWRvLmluZGV4LmNhbGwodGhpcywwKTt9LCJsYXN0LWNoaWxkIjpmdW5jdGlvbigpe3ZhciBhPXRoaXM7CndoaWxlKChhPWEubmV4dFNpYmxpbmcpKXtpZihhLm5vZGVUeXBlPT0xKXtyZXR1cm4gZmFsc2U7fX1yZXR1cm4gdHJ1ZTt9LCJvbmx5LWNoaWxkIjpmdW5jdGlvbigpe3ZhciBiPXRoaXM7d2hpbGUoKGI9Yi5wcmV2aW91c1NpYmxpbmcpKXtpZihiLm5vZGVUeXBlPT0xKXtyZXR1cm4gZmFsc2U7Cn19dmFyIGE9dGhpczt3aGlsZSgoYT1hLm5leHRTaWJsaW5nKSl7aWYoYS5ub2RlVHlwZT09MSl7cmV0dXJuIGZhbHNlO319cmV0dXJuIHRydWU7fSwibnRoLWNoaWxkIjpmdW5jdGlvbihnLGUpe2c9KGc9PXVuZGVmaW5lZCk/Im4iOmc7dmFyIGM9U2VsZWN0b3JzLlV0aWxzLnBhcnNlTnRoQXJndW1lbnQoZyk7CmlmKGMuc3BlY2lhbCE9Im4iKXtyZXR1cm4gU2VsZWN0b3JzLlBzZXVkb1tjLnNwZWNpYWxdLmNhbGwodGhpcyxjLmEsZSk7fXZhciBmPTA7ZS5wb3NpdGlvbnM9ZS5wb3NpdGlvbnN8fHt9O3ZhciBkPSR1aWQodGhpcyk7aWYoIWUucG9zaXRpb25zW2RdKXt2YXIgYj10aGlzOwp3aGlsZSgoYj1iLnByZXZpb3VzU2libGluZykpe2lmKGIubm9kZVR5cGUhPTEpe2NvbnRpbnVlO31mKys7dmFyIGE9ZS5wb3NpdGlvbnNbJHVpZChiKV07aWYoYSE9dW5kZWZpbmVkKXtmPWErZjticmVhazt9fWUucG9zaXRpb25zW2RdPWY7fXJldHVybihlLnBvc2l0aW9uc1tkXSVjLmE9PWMuYik7Cn0saW5kZXg6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPTA7d2hpbGUoKGI9Yi5wcmV2aW91c1NpYmxpbmcpKXtpZihiLm5vZGVUeXBlPT0xJiYrK2M+YSl7cmV0dXJuIGZhbHNlO319cmV0dXJuKGM9PWEpO30sZXZlbjpmdW5jdGlvbihiLGEpe3JldHVybiBTZWxlY3RvcnMuUHNldWRvWyJudGgtY2hpbGQiXS5jYWxsKHRoaXMsIjJuKzEiLGEpOwp9LG9kZDpmdW5jdGlvbihiLGEpe3JldHVybiBTZWxlY3RvcnMuUHNldWRvWyJudGgtY2hpbGQiXS5jYWxsKHRoaXMsIjJuIixhKTt9LHNlbGVjdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWQ7fSxlbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZGlzYWJsZWQ9PT1mYWxzZSk7Cn19KTtFbGVtZW50LkV2ZW50cy5kb21yZWFkeT17b25BZGQ6ZnVuY3Rpb24oYSl7aWYoQnJvd3Nlci5sb2FkZWQpe2EuY2FsbCh0aGlzKTt9fX07KGZ1bmN0aW9uKCl7dmFyIGI9ZnVuY3Rpb24oKXtpZihCcm93c2VyLmxvYWRlZCl7cmV0dXJuO31Ccm93c2VyLmxvYWRlZD10cnVlOwp3aW5kb3cuZmlyZUV2ZW50KCJkb21yZWFkeSIpO2RvY3VtZW50LmZpcmVFdmVudCgiZG9tcmVhZHkiKTt9O3dpbmRvdy5hZGRFdmVudCgibG9hZCIsYik7aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CihmdW5jdGlvbigpeygkdHJ5KGZ1bmN0aW9uKCl7YS5kb1Njcm9sbCgpO3JldHVybiBkb2N1bWVudC5pZChhKS5pbmplY3QoZG9jdW1lbnQuYm9keSkuc2V0KCJodG1sIiwidGVtcCIpLmRpc3Bvc2UoKTt9KSk/YigpOmFyZ3VtZW50cy5jYWxsZWUuZGVsYXkoNTApO30pKCk7Cn1lbHNle2lmKEJyb3dzZXIuRW5naW5lLndlYmtpdCYmQnJvd3Nlci5FbmdpbmUudmVyc2lvbjw1MjUpeyhmdW5jdGlvbigpeyhbImxvYWRlZCIsImNvbXBsZXRlIl0uY29udGFpbnMoZG9jdW1lbnQucmVhZHlTdGF0ZSkpP2IoKTphcmd1bWVudHMuY2FsbGVlLmRlbGF5KDUwKTsKfSkoKTt9ZWxzZXtkb2N1bWVudC5hZGRFdmVudCgiRE9NQ29udGVudExvYWRlZCIsYik7fX19KSgpO3ZhciBKU09OPW5ldyBIYXNoKHRoaXMuSlNPTiYme3N0cmluZ2lmeTpKU09OLnN0cmluZ2lmeSxwYXJzZTpKU09OLnBhcnNlfSkuZXh0ZW5kKHskc3BlY2lhbENoYXJzOnsiXGIiOiJcXGIiLCJcdCI6IlxcdCIsIlxuIjoiXFxuIiwiXGYiOiJcXGYiLCJcciI6IlxcciIsJyInOidcXCInLCJcXCI6IlxcXFwifSwkcmVwbGFjZUNoYXJzOmZ1bmN0aW9uKGEpe3JldHVybiBKU09OLiRzcGVjaWFsQ2hhcnNbYV18fCJcXHUwMCIrTWF0aC5mbG9vcihhLmNoYXJDb2RlQXQoKS8xNikudG9TdHJpbmcoMTYpKyhhLmNoYXJDb2RlQXQoKSUxNikudG9TdHJpbmcoMTYpOwp9LGVuY29kZTpmdW5jdGlvbihiKXtzd2l0Y2goJHR5cGUoYikpe2Nhc2Uic3RyaW5nIjpyZXR1cm4nIicrYi5yZXBsYWNlKC9bXHgwMC1ceDFmXFwiXS9nLEpTT04uJHJlcGxhY2VDaGFycykrJyInO2Nhc2UiYXJyYXkiOnJldHVybiJbIitTdHJpbmcoYi5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkpKyJdIjsKY2FzZSJvYmplY3QiOmNhc2UiaGFzaCI6dmFyIGE9W107SGFzaC5lYWNoKGIsZnVuY3Rpb24oZSxkKXt2YXIgYz1KU09OLmVuY29kZShlKTtpZihjKXthLnB1c2goSlNPTi5lbmNvZGUoZCkrIjoiK2MpO319KTtyZXR1cm4ieyIrYSsifSI7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIFN0cmluZyhiKTsKY2FzZSBmYWxzZTpyZXR1cm4ibnVsbCI7fXJldHVybiBudWxsO30sZGVjb2RlOmZ1bmN0aW9uKHN0cmluZyxzZWN1cmUpe2lmKCR0eXBlKHN0cmluZykhPSJzdHJpbmcifHwhc3RyaW5nLmxlbmd0aCl7cmV0dXJuIG51bGw7fWlmKHNlY3VyZSYmISgvXlssOnt9XFtcXTAtOS5cLStFYWVmbG5yLXUgXG5cclx0XSokLykudGVzdChzdHJpbmcucmVwbGFjZSgvXFwuL2csIkAiKS5yZXBsYWNlKC8iW14iXFxcblxyXSoiL2csIiIpKSl7cmV0dXJuIG51bGw7Cn1yZXR1cm4gZXZhbCgiKCIrc3RyaW5nKyIpIik7fX0pO05hdGl2ZS5pbXBsZW1lbnQoW0hhc2gsQXJyYXksU3RyaW5nLE51bWJlcl0se3RvSlNPTjpmdW5jdGlvbigpe3JldHVybiBKU09OLmVuY29kZSh0aGlzKTt9fSk7dmFyIENvb2tpZT1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6T3B0aW9ucyxvcHRpb25zOntwYXRoOmZhbHNlLGRvbWFpbjpmYWxzZSxkdXJhdGlvbjpmYWxzZSxzZWN1cmU6ZmFsc2UsZG9jdW1lbnQ6ZG9jdW1lbnR9LGluaXRpYWxpemU6ZnVuY3Rpb24oYixhKXt0aGlzLmtleT1iOwp0aGlzLnNldE9wdGlvbnMoYSk7fSx3cml0ZTpmdW5jdGlvbihiKXtiPWVuY29kZVVSSUNvbXBvbmVudChiKTtpZih0aGlzLm9wdGlvbnMuZG9tYWluKXtiKz0iOyBkb21haW49Iit0aGlzLm9wdGlvbnMuZG9tYWluO31pZih0aGlzLm9wdGlvbnMucGF0aCl7Yis9IjsgcGF0aD0iK3RoaXMub3B0aW9ucy5wYXRoOwp9aWYodGhpcy5vcHRpb25zLmR1cmF0aW9uKXt2YXIgYT1uZXcgRGF0ZSgpO2Euc2V0VGltZShhLmdldFRpbWUoKSt0aGlzLm9wdGlvbnMuZHVyYXRpb24qMjQqNjAqNjAqMTAwMCk7Yis9IjsgZXhwaXJlcz0iK2EudG9HTVRTdHJpbmcoKTt9aWYodGhpcy5vcHRpb25zLnNlY3VyZSl7Yis9Ijsgc2VjdXJlIjsKfXRoaXMub3B0aW9ucy5kb2N1bWVudC5jb29raWU9dGhpcy5rZXkrIj0iK2I7cmV0dXJuIHRoaXM7fSxyZWFkOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLmRvY3VtZW50LmNvb2tpZS5tYXRjaCgiKD86Xnw7KVxccyoiK3RoaXMua2V5LmVzY2FwZVJlZ0V4cCgpKyI9KFteO10qKSIpOwpyZXR1cm4oYSk/ZGVjb2RlVVJJQ29tcG9uZW50KGFbMV0pOm51bGw7fSxkaXNwb3NlOmZ1bmN0aW9uKCl7bmV3IENvb2tpZSh0aGlzLmtleSwkbWVyZ2UodGhpcy5vcHRpb25zLHtkdXJhdGlvbjotMX0pKS53cml0ZSgiIik7cmV0dXJuIHRoaXM7fX0pO0Nvb2tpZS53cml0ZT1mdW5jdGlvbihiLGMsYSl7cmV0dXJuIG5ldyBDb29raWUoYixhKS53cml0ZShjKTsKfTtDb29raWUucmVhZD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IENvb2tpZShhKS5yZWFkKCk7fTtDb29raWUuZGlzcG9zZT1mdW5jdGlvbihiLGEpe3JldHVybiBuZXcgQ29va2llKGIsYSkuZGlzcG9zZSgpO307dmFyIFN3aWZmPW5ldyBDbGFzcyh7SW1wbGVtZW50czpbT3B0aW9uc10sb3B0aW9uczp7aWQ6bnVsbCxoZWlnaHQ6MSx3aWR0aDoxLGNvbnRhaW5lcjpudWxsLHByb3BlcnRpZXM6e30scGFyYW1zOntxdWFsaXR5OiJoaWdoIixhbGxvd1NjcmlwdEFjY2VzczoiYWx3YXlzIix3TW9kZToidHJhbnNwYXJlbnQiLHN3TGl2ZUNvbm5lY3Q6dHJ1ZX0sY2FsbEJhY2tzOnt9LHZhcnM6e319LHRvRWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdDsKfSxpbml0aWFsaXplOmZ1bmN0aW9uKGwsbSl7dGhpcy5pbnN0YW5jZT0iU3dpZmZfIiskdGltZSgpO3RoaXMuc2V0T3B0aW9ucyhtKTttPXRoaXMub3B0aW9uczt2YXIgYj10aGlzLmlkPW0uaWR8fHRoaXMuaW5zdGFuY2U7dmFyIGE9ZG9jdW1lbnQuaWQobS5jb250YWluZXIpOwpTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0YW5jZV09e307dmFyIGU9bS5wYXJhbXMsZz1tLnZhcnMsZj1tLmNhbGxCYWNrczt2YXIgaD0kZXh0ZW5kKHtoZWlnaHQ6bS5oZWlnaHQsd2lkdGg6bS53aWR0aH0sbS5wcm9wZXJ0aWVzKTt2YXIgaz10aGlzO2Zvcih2YXIgZCBpbiBmKXtTd2lmZi5DYWxsQmFja3NbdGhpcy5pbnN0YW5jZV1bZF09KGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KGsub2JqZWN0LGFyZ3VtZW50cyk7Cn07fSkoZltkXSk7Z1tkXT0iU3dpZmYuQ2FsbEJhY2tzLiIrdGhpcy5pbnN0YW5jZSsiLiIrZDt9ZS5mbGFzaFZhcnM9SGFzaC50b1F1ZXJ5U3RyaW5nKGcpO2lmKEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpe2guY2xhc3NpZD0iY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIjsKZS5tb3ZpZT1sO31lbHNle2gudHlwZT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giO2guZGF0YT1sO312YXIgaj0nPG9iamVjdCBpZD0iJytiKyciJztmb3IodmFyIGkgaW4gaCl7ais9IiAiK2krJz0iJytoW2ldKyciJzt9ais9Ij4iO2Zvcih2YXIgYyBpbiBlKXtpZihlW2NdKXtqKz0nPHBhcmFtIG5hbWU9IicrYysnIiB2YWx1ZT0iJytlW2NdKyciIC8+JzsKfX1qKz0iPC9vYmplY3Q+Ijt0aGlzLm9iamVjdD0oKGEpP2EuZW1wdHkoKTpuZXcgRWxlbWVudCgiZGl2IikpLnNldCgiaHRtbCIsaikuZmlyc3RDaGlsZDt9LHJlcGxhY2VzOmZ1bmN0aW9uKGEpe2E9ZG9jdW1lbnQuaWQoYSx0cnVlKTthLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMudG9FbGVtZW50KCksYSk7CnJldHVybiB0aGlzO30saW5qZWN0OmZ1bmN0aW9uKGEpe2RvY3VtZW50LmlkKGEsdHJ1ZSkuYXBwZW5kQ2hpbGQodGhpcy50b0VsZW1lbnQoKSk7cmV0dXJuIHRoaXM7fSxyZW1vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gU3dpZmYucmVtb3RlLmFwcGx5KFN3aWZmLFt0aGlzLnRvRWxlbWVudCgpXS5leHRlbmQoYXJndW1lbnRzKSk7Cn19KTtTd2lmZi5DYWxsQmFja3M9e307U3dpZmYucmVtb3RlPWZ1bmN0aW9uKG9iaixmbil7dmFyIHJzPW9iai5DYWxsRnVuY3Rpb24oJzxpbnZva2UgbmFtZT0iJytmbisnIiByZXR1cm50eXBlPSJqYXZhc2NyaXB0Ij4nK19fZmxhc2hfX2FyZ3VtZW50c1RvWE1MKGFyZ3VtZW50cywyKSsiPC9pbnZva2U+Iik7CnJldHVybiBldmFsKHJzKTt9O3ZhciBGeD1uZXcgQ2xhc3Moe0ltcGxlbWVudHM6W0NoYWluLEV2ZW50cyxPcHRpb25zXSxvcHRpb25zOntmcHM6NTAsdW5pdDpmYWxzZSxkdXJhdGlvbjo1MDAsbGluazoiaWdub3JlIn0saW5pdGlhbGl6ZTpmdW5jdGlvbihhKXt0aGlzLnN1YmplY3Q9dGhpcy5zdWJqZWN0fHx0aGlzOwp0aGlzLnNldE9wdGlvbnMoYSk7dGhpcy5vcHRpb25zLmR1cmF0aW9uPUZ4LkR1cmF0aW9uc1t0aGlzLm9wdGlvbnMuZHVyYXRpb25dfHx0aGlzLm9wdGlvbnMuZHVyYXRpb24udG9JbnQoKTt2YXIgYj10aGlzLm9wdGlvbnMud2FpdDtpZihiPT09ZmFsc2Upe3RoaXMub3B0aW9ucy5saW5rPSJjYW5jZWwiOwp9fSxnZXRUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiAtKE1hdGguY29zKE1hdGguUEkqYSktMSkvMjt9O30sc3RlcDpmdW5jdGlvbigpe3ZhciBhPSR0aW1lKCk7aWYoYTx0aGlzLnRpbWUrdGhpcy5vcHRpb25zLmR1cmF0aW9uKXt2YXIgYj10aGlzLnRyYW5zaXRpb24oKGEtdGhpcy50aW1lKS90aGlzLm9wdGlvbnMuZHVyYXRpb24pOwp0aGlzLnNldCh0aGlzLmNvbXB1dGUodGhpcy5mcm9tLHRoaXMudG8sYikpO31lbHNle3RoaXMuc2V0KHRoaXMuY29tcHV0ZSh0aGlzLmZyb20sdGhpcy50bywxKSk7dGhpcy5jb21wbGV0ZSgpO319LHNldDpmdW5jdGlvbihhKXtyZXR1cm4gYTt9LGNvbXB1dGU6ZnVuY3Rpb24oYyxiLGEpe3JldHVybiBGeC5jb21wdXRlKGMsYixhKTsKfSxjaGVjazpmdW5jdGlvbigpe2lmKCF0aGlzLnRpbWVyKXtyZXR1cm4gdHJ1ZTt9c3dpdGNoKHRoaXMub3B0aW9ucy5saW5rKXtjYXNlImNhbmNlbCI6dGhpcy5jYW5jZWwoKTtyZXR1cm4gdHJ1ZTtjYXNlImNoYWluIjp0aGlzLmNoYWluKHRoaXMuY2FsbGVyLmJpbmQodGhpcyxhcmd1bWVudHMpKTsKcmV0dXJuIGZhbHNlO31yZXR1cm4gZmFsc2U7fSxzdGFydDpmdW5jdGlvbihiLGEpe2lmKCF0aGlzLmNoZWNrKGIsYSkpe3JldHVybiB0aGlzO310aGlzLmZyb209Yjt0aGlzLnRvPWE7dGhpcy50aW1lPTA7dGhpcy50cmFuc2l0aW9uPXRoaXMuZ2V0VHJhbnNpdGlvbigpOwp0aGlzLnN0YXJ0VGltZXIoKTt0aGlzLm9uU3RhcnQoKTtyZXR1cm4gdGhpczt9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5zdG9wVGltZXIoKSl7dGhpcy5vbkNvbXBsZXRlKCk7fXJldHVybiB0aGlzO30sY2FuY2VsOmZ1bmN0aW9uKCl7aWYodGhpcy5zdG9wVGltZXIoKSl7dGhpcy5vbkNhbmNlbCgpOwp9cmV0dXJuIHRoaXM7fSxvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoInN0YXJ0Iix0aGlzLnN1YmplY3QpO30sb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsdGhpcy5zdWJqZWN0KTtpZighdGhpcy5jYWxsQ2hhaW4oKSl7dGhpcy5maXJlRXZlbnQoImNoYWluQ29tcGxldGUiLHRoaXMuc3ViamVjdCk7Cn19LG9uQ2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoImNhbmNlbCIsdGhpcy5zdWJqZWN0KS5jbGVhckNoYWluKCk7fSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuc3RvcFRpbWVyKCk7cmV0dXJuIHRoaXM7fSxyZXN1bWU6ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0VGltZXIoKTsKcmV0dXJuIHRoaXM7fSxzdG9wVGltZXI6ZnVuY3Rpb24oKXtpZighdGhpcy50aW1lcil7cmV0dXJuIGZhbHNlO310aGlzLnRpbWU9JHRpbWUoKS10aGlzLnRpbWU7dGhpcy50aW1lcj0kY2xlYXIodGhpcy50aW1lcik7cmV0dXJuIHRydWU7fSxzdGFydFRpbWVyOmZ1bmN0aW9uKCl7aWYodGhpcy50aW1lcil7cmV0dXJuIGZhbHNlOwp9dGhpcy50aW1lPSR0aW1lKCktdGhpcy50aW1lO3RoaXMudGltZXI9dGhpcy5zdGVwLnBlcmlvZGljYWwoTWF0aC5yb3VuZCgxMDAwL3RoaXMub3B0aW9ucy5mcHMpLHRoaXMpO3JldHVybiB0cnVlO319KTtGeC5jb21wdXRlPWZ1bmN0aW9uKGMsYixhKXtyZXR1cm4oYi1jKSphK2M7Cn07RnguRHVyYXRpb25zPXsic2hvcnQiOjI1MCxub3JtYWw6NTAwLCJsb25nIjoxMDAwfTtGeC5DU1M9bmV3IENsYXNzKHtFeHRlbmRzOkZ4LHByZXBhcmU6ZnVuY3Rpb24oZCxlLGIpe2I9JHNwbGF0KGIpO3ZhciBjPWJbMV07aWYoISRjaGsoYykpe2JbMV09YlswXTsKYlswXT1kLmdldFN0eWxlKGUpO312YXIgYT1iLm1hcCh0aGlzLnBhcnNlKTtyZXR1cm57ZnJvbTphWzBdLHRvOmFbMV19O30scGFyc2U6ZnVuY3Rpb24oYSl7YT0kbGFtYmRhKGEpKCk7YT0odHlwZW9mIGE9PSJzdHJpbmciKT9hLnNwbGl0KCIgIik6JHNwbGF0KGEpOwpyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYyl7Yz1TdHJpbmcoYyk7dmFyIGI9ZmFsc2U7RnguQ1NTLlBhcnNlcnMuZWFjaChmdW5jdGlvbihmLGUpe2lmKGIpe3JldHVybjt9dmFyIGQ9Zi5wYXJzZShjKTtpZigkY2hrKGQpKXtiPXt2YWx1ZTpkLHBhcnNlcjpmfTt9fSk7CmI9Ynx8e3ZhbHVlOmMscGFyc2VyOkZ4LkNTUy5QYXJzZXJzLlN0cmluZ307cmV0dXJuIGI7fSk7fSxjb21wdXRlOmZ1bmN0aW9uKGQsYyxiKXt2YXIgYT1bXTsoTWF0aC5taW4oZC5sZW5ndGgsYy5sZW5ndGgpKS50aW1lcyhmdW5jdGlvbihlKXthLnB1c2goe3ZhbHVlOmRbZV0ucGFyc2VyLmNvbXB1dGUoZFtlXS52YWx1ZSxjW2VdLnZhbHVlLGIpLHBhcnNlcjpkW2VdLnBhcnNlcn0pOwp9KTthLiRmYW1pbHk9e25hbWU6ImZ4OmNzczp2YWx1ZSJ9O3JldHVybiBhO30sc2VydmU6ZnVuY3Rpb24oYyxiKXtpZigkdHlwZShjKSE9ImZ4OmNzczp2YWx1ZSIpe2M9dGhpcy5wYXJzZShjKTt9dmFyIGE9W107Yy5lYWNoKGZ1bmN0aW9uKGQpe2E9YS5jb25jYXQoZC5wYXJzZXIuc2VydmUoZC52YWx1ZSxiKSk7Cn0pO3JldHVybiBhO30scmVuZGVyOmZ1bmN0aW9uKGEsZCxjLGIpe2Euc2V0U3R5bGUoZCx0aGlzLnNlcnZlKGMsYikpO30sc2VhcmNoOmZ1bmN0aW9uKGEpe2lmKEZ4LkNTUy5DYWNoZVthXSl7cmV0dXJuIEZ4LkNTUy5DYWNoZVthXTt9dmFyIGI9e307QXJyYXkuZWFjaChkb2N1bWVudC5zdHlsZVNoZWV0cyxmdW5jdGlvbihlLGQpe3ZhciBjPWUuaHJlZjsKaWYoYyYmYy5jb250YWlucygiOi8vIikmJiFjLmNvbnRhaW5zKGRvY3VtZW50LmRvbWFpbikpe3JldHVybjt9dmFyIGY9ZS5ydWxlc3x8ZS5jc3NSdWxlcztBcnJheS5lYWNoKGYsZnVuY3Rpb24oaixnKXtpZighai5zdHlsZSl7cmV0dXJuO312YXIgaD0oai5zZWxlY3RvclRleHQpP2ouc2VsZWN0b3JUZXh0LnJlcGxhY2UoL15cdysvLGZ1bmN0aW9uKGkpe3JldHVybiBpLnRvTG93ZXJDYXNlKCk7Cn0pOm51bGw7aWYoIWh8fCFoLnRlc3QoIl4iK2ErIiQiKSl7cmV0dXJuO31FbGVtZW50LlN0eWxlcy5lYWNoKGZ1bmN0aW9uKGssaSl7aWYoIWouc3R5bGVbaV18fEVsZW1lbnQuU2hvcnRTdHlsZXNbaV0pe3JldHVybjt9az1TdHJpbmcoai5zdHlsZVtpXSk7YltpXT0oay50ZXN0KC9ecmdiLykpP2sucmdiVG9IZXgoKTprOwp9KTt9KTt9KTtyZXR1cm4gRnguQ1NTLkNhY2hlW2FdPWI7fX0pO0Z4LkNTUy5DYWNoZT17fTtGeC5DU1MuUGFyc2Vycz1uZXcgSGFzaCh7Q29sb3I6e3BhcnNlOmZ1bmN0aW9uKGEpe2lmKGEubWF0Y2goL14jWzAtOWEtZl17Myw2fSQvaSkpe3JldHVybiBhLmhleFRvUmdiKHRydWUpOwp9cmV0dXJuKChhPWEubWF0Y2goLyhcZCspLFxzKihcZCspLFxzKihcZCspLykpKT9bYVsxXSxhWzJdLGFbM11dOmZhbHNlO30sY29tcHV0ZTpmdW5jdGlvbihjLGIsYSl7cmV0dXJuIGMubWFwKGZ1bmN0aW9uKGUsZCl7cmV0dXJuIE1hdGgucm91bmQoRnguY29tcHV0ZShjW2RdLGJbZF0sYSkpOwp9KTt9LHNlcnZlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm1hcChOdW1iZXIpO319LE51bWJlcjp7cGFyc2U6cGFyc2VGbG9hdCxjb21wdXRlOkZ4LmNvbXB1dGUsc2VydmU6ZnVuY3Rpb24oYixhKXtyZXR1cm4oYSk/YithOmI7fX0sU3RyaW5nOntwYXJzZTokbGFtYmRhKGZhbHNlKSxjb21wdXRlOiRhcmd1bWVudHMoMSksc2VydmU6JGFyZ3VtZW50cygwKX19KTsKRnguVHdlZW49bmV3IENsYXNzKHtFeHRlbmRzOkZ4LkNTUyxpbml0aWFsaXplOmZ1bmN0aW9uKGIsYSl7dGhpcy5lbGVtZW50PXRoaXMuc3ViamVjdD1kb2N1bWVudC5pZChiKTt0aGlzLnBhcmVudChhKTt9LHNldDpmdW5jdGlvbihiLGEpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2E9YjsKYj10aGlzLnByb3BlcnR5fHx0aGlzLm9wdGlvbnMucHJvcGVydHk7fXRoaXMucmVuZGVyKHRoaXMuZWxlbWVudCxiLGEsdGhpcy5vcHRpb25zLnVuaXQpO3JldHVybiB0aGlzO30sc3RhcnQ6ZnVuY3Rpb24oYyxlLGQpe2lmKCF0aGlzLmNoZWNrKGMsZSxkKSl7cmV0dXJuIHRoaXM7Cn12YXIgYj1BcnJheS5mbGF0dGVuKGFyZ3VtZW50cyk7dGhpcy5wcm9wZXJ0eT10aGlzLm9wdGlvbnMucHJvcGVydHl8fGIuc2hpZnQoKTt2YXIgYT10aGlzLnByZXBhcmUodGhpcy5lbGVtZW50LHRoaXMucHJvcGVydHksYik7cmV0dXJuIHRoaXMucGFyZW50KGEuZnJvbSxhLnRvKTsKfX0pO0VsZW1lbnQuUHJvcGVydGllcy50d2Vlbj17c2V0OmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMucmV0cmlldmUoInR3ZWVuIik7aWYoYil7Yi5jYW5jZWwoKTt9cmV0dXJuIHRoaXMuZWxpbWluYXRlKCJ0d2VlbiIpLnN0b3JlKCJ0d2VlbjpvcHRpb25zIiwkZXh0ZW5kKHtsaW5rOiJjYW5jZWwifSxhKSk7Cn0sZ2V0OmZ1bmN0aW9uKGEpe2lmKGF8fCF0aGlzLnJldHJpZXZlKCJ0d2VlbiIpKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgidHdlZW46b3B0aW9ucyIpKXt0aGlzLnNldCgidHdlZW4iLGEpO310aGlzLnN0b3JlKCJ0d2VlbiIsbmV3IEZ4LlR3ZWVuKHRoaXMsdGhpcy5yZXRyaWV2ZSgidHdlZW46b3B0aW9ucyIpKSk7Cn1yZXR1cm4gdGhpcy5yZXRyaWV2ZSgidHdlZW4iKTt9fTtFbGVtZW50LmltcGxlbWVudCh7dHdlZW46ZnVuY3Rpb24oYSxjLGIpe3RoaXMuZ2V0KCJ0d2VlbiIpLnN0YXJ0KGFyZ3VtZW50cyk7cmV0dXJuIHRoaXM7fSxmYWRlOmZ1bmN0aW9uKGMpe3ZhciBlPXRoaXMuZ2V0KCJ0d2VlbiIpLGQ9Im9wYWNpdHkiLGE7CmM9JHBpY2soYywidG9nZ2xlIik7c3dpdGNoKGMpe2Nhc2UiaW4iOmUuc3RhcnQoZCwxKTticmVhaztjYXNlIm91dCI6ZS5zdGFydChkLDApO2JyZWFrO2Nhc2Uic2hvdyI6ZS5zZXQoZCwxKTticmVhaztjYXNlImhpZGUiOmUuc2V0KGQsMCk7YnJlYWs7Y2FzZSJ0b2dnbGUiOnZhciBiPXRoaXMucmV0cmlldmUoImZhZGU6ZmxhZyIsdGhpcy5nZXQoIm9wYWNpdHkiKT09MSk7CmUuc3RhcnQoZCwoYik/MDoxKTt0aGlzLnN0b3JlKCJmYWRlOmZsYWciLCFiKTthPXRydWU7YnJlYWs7ZGVmYXVsdDplLnN0YXJ0KGQsYXJndW1lbnRzKTt9aWYoIWEpe3RoaXMuZWxpbWluYXRlKCJmYWRlOmZsYWciKTt9cmV0dXJuIHRoaXM7fSxoaWdobGlnaHQ6ZnVuY3Rpb24oYyxhKXtpZighYSl7YT10aGlzLnJldHJpZXZlKCJoaWdobGlnaHQ6b3JpZ2luYWwiLHRoaXMuZ2V0U3R5bGUoImJhY2tncm91bmQtY29sb3IiKSk7CmE9KGE9PSJ0cmFuc3BhcmVudCIpPyIjZmZmIjphO312YXIgYj10aGlzLmdldCgidHdlZW4iKTtiLnN0YXJ0KCJiYWNrZ3JvdW5kLWNvbG9yIixjfHwiI2ZmZmY4OCIsYSkuY2hhaW4oZnVuY3Rpb24oKXt0aGlzLnNldFN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIix0aGlzLnJldHJpZXZlKCJoaWdobGlnaHQ6b3JpZ2luYWwiKSk7CmIuY2FsbENoYWluKCk7fS5iaW5kKHRoaXMpKTtyZXR1cm4gdGhpczt9fSk7RnguTW9ycGg9bmV3IENsYXNzKHtFeHRlbmRzOkZ4LkNTUyxpbml0aWFsaXplOmZ1bmN0aW9uKGIsYSl7dGhpcy5lbGVtZW50PXRoaXMuc3ViamVjdD1kb2N1bWVudC5pZChiKTt0aGlzLnBhcmVudChhKTsKfSxzZXQ6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXthPXRoaXMuc2VhcmNoKGEpO31mb3IodmFyIGIgaW4gYSl7dGhpcy5yZW5kZXIodGhpcy5lbGVtZW50LGIsYVtiXSx0aGlzLm9wdGlvbnMudW5pdCk7fXJldHVybiB0aGlzO30sY29tcHV0ZTpmdW5jdGlvbihlLGQsYyl7dmFyIGE9e307CmZvcih2YXIgYiBpbiBlKXthW2JdPXRoaXMucGFyZW50KGVbYl0sZFtiXSxjKTt9cmV0dXJuIGE7fSxzdGFydDpmdW5jdGlvbihiKXtpZighdGhpcy5jaGVjayhiKSl7cmV0dXJuIHRoaXM7fWlmKHR5cGVvZiBiPT0ic3RyaW5nIil7Yj10aGlzLnNlYXJjaChiKTt9dmFyIGU9e30sZD17fTsKZm9yKHZhciBjIGluIGIpe3ZhciBhPXRoaXMucHJlcGFyZSh0aGlzLmVsZW1lbnQsYyxiW2NdKTtlW2NdPWEuZnJvbTtkW2NdPWEudG87fXJldHVybiB0aGlzLnBhcmVudChlLGQpO319KTtFbGVtZW50LlByb3BlcnRpZXMubW9ycGg9e3NldDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnJldHJpZXZlKCJtb3JwaCIpOwppZihiKXtiLmNhbmNlbCgpO31yZXR1cm4gdGhpcy5lbGltaW5hdGUoIm1vcnBoIikuc3RvcmUoIm1vcnBoOm9wdGlvbnMiLCRleHRlbmQoe2xpbms6ImNhbmNlbCJ9LGEpKTt9LGdldDpmdW5jdGlvbihhKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgibW9ycGgiKSl7aWYoYXx8IXRoaXMucmV0cmlldmUoIm1vcnBoOm9wdGlvbnMiKSl7dGhpcy5zZXQoIm1vcnBoIixhKTsKfXRoaXMuc3RvcmUoIm1vcnBoIixuZXcgRnguTW9ycGgodGhpcyx0aGlzLnJldHJpZXZlKCJtb3JwaDpvcHRpb25zIikpKTt9cmV0dXJuIHRoaXMucmV0cmlldmUoIm1vcnBoIik7fX07RWxlbWVudC5pbXBsZW1lbnQoe21vcnBoOmZ1bmN0aW9uKGEpe3RoaXMuZ2V0KCJtb3JwaCIpLnN0YXJ0KGEpOwpyZXR1cm4gdGhpczt9fSk7RnguaW1wbGVtZW50KHtnZXRUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLnRyYW5zaXRpb258fEZ4LlRyYW5zaXRpb25zLlNpbmUuZWFzZUluT3V0O2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7dmFyIGI9YS5zcGxpdCgiOiIpOwphPUZ4LlRyYW5zaXRpb25zO2E9YVtiWzBdXXx8YVtiWzBdLmNhcGl0YWxpemUoKV07aWYoYlsxXSl7YT1hWyJlYXNlIitiWzFdLmNhcGl0YWxpemUoKSsoYlsyXT9iWzJdLmNhcGl0YWxpemUoKToiIildO319cmV0dXJuIGE7fX0pO0Z4LlRyYW5zaXRpb249ZnVuY3Rpb24oYixhKXthPSRzcGxhdChhKTsKcmV0dXJuICRleHRlbmQoYix7ZWFzZUluOmZ1bmN0aW9uKGMpe3JldHVybiBiKGMsYSk7fSxlYXNlT3V0OmZ1bmN0aW9uKGMpe3JldHVybiAxLWIoMS1jLGEpO30sZWFzZUluT3V0OmZ1bmN0aW9uKGMpe3JldHVybihjPD0wLjUpP2IoMipjLGEpLzI6KDItYigyKigxLWMpLGEpKS8yOwp9fSk7fTtGeC5UcmFuc2l0aW9ucz1uZXcgSGFzaCh7bGluZWFyOiRhcmd1bWVudHMoMCl9KTtGeC5UcmFuc2l0aW9ucy5leHRlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpe0Z4LlRyYW5zaXRpb25zW2JdPW5ldyBGeC5UcmFuc2l0aW9uKGFbYl0pO319O0Z4LlRyYW5zaXRpb25zLmV4dGVuZCh7UG93OmZ1bmN0aW9uKGIsYSl7cmV0dXJuIE1hdGgucG93KGIsYVswXXx8Nik7Cn0sRXhwbzpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5wb3coMiw4KihhLTEpKTt9LENpcmM6ZnVuY3Rpb24oYSl7cmV0dXJuIDEtTWF0aC5zaW4oTWF0aC5hY29zKGEpKTt9LFNpbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIDEtTWF0aC5zaW4oKDEtYSkqTWF0aC5QSS8yKTsKfSxCYWNrOmZ1bmN0aW9uKGIsYSl7YT1hWzBdfHwxLjYxODtyZXR1cm4gTWF0aC5wb3coYiwyKSooKGErMSkqYi1hKTt9LEJvdW5jZTpmdW5jdGlvbihmKXt2YXIgZTtmb3IodmFyIGQ9MCxjPTE7MTtkKz1jLGMvPTIpe2lmKGY+PSg3LTQqZCkvMTEpe2U9YypjLU1hdGgucG93KCgxMS02KmQtMTEqZikvNCwyKTsKYnJlYWs7fX1yZXR1cm4gZTt9LEVsYXN0aWM6ZnVuY3Rpb24oYixhKXtyZXR1cm4gTWF0aC5wb3coMiwxMCotLWIpKk1hdGguY29zKDIwKmIqTWF0aC5QSSooYVswXXx8MSkvMyk7fX0pO1siUXVhZCIsIkN1YmljIiwiUXVhcnQiLCJRdWludCJdLmVhY2goZnVuY3Rpb24oYixhKXtGeC5UcmFuc2l0aW9uc1tiXT1uZXcgRnguVHJhbnNpdGlvbihmdW5jdGlvbihjKXtyZXR1cm4gTWF0aC5wb3coYyxbYSsyXSk7Cn0pO30pO3ZhciBSZXF1ZXN0PW5ldyBDbGFzcyh7SW1wbGVtZW50czpbQ2hhaW4sRXZlbnRzLE9wdGlvbnNdLG9wdGlvbnM6e3VybDoiIixkYXRhOiIiLGhlYWRlcnM6eyJYLVJlcXVlc3RlZC1XaXRoIjoiWE1MSHR0cFJlcXVlc3QiLEFjY2VwdDoidGV4dC9qYXZhc2NyaXB0LCB0ZXh0L2h0bWwsIGFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKiJ9LGFzeW5jOnRydWUsZm9ybWF0OmZhbHNlLG1ldGhvZDoicG9zdCIsbGluazoiaWdub3JlIixpc1N1Y2Nlc3M6bnVsbCxlbXVsYXRpb246dHJ1ZSx1cmxFbmNvZGVkOnRydWUsZW5jb2Rpbmc6InV0Zi04IixldmFsU2NyaXB0czpmYWxzZSxldmFsUmVzcG9uc2U6ZmFsc2Usbm9DYWNoZTpmYWxzZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihhKXt0aGlzLnhocj1uZXcgQnJvd3Nlci5SZXF1ZXN0KCk7CnRoaXMuc2V0T3B0aW9ucyhhKTt0aGlzLm9wdGlvbnMuaXNTdWNjZXNzPXRoaXMub3B0aW9ucy5pc1N1Y2Nlc3N8fHRoaXMuaXNTdWNjZXNzO3RoaXMuaGVhZGVycz1uZXcgSGFzaCh0aGlzLm9wdGlvbnMuaGVhZGVycyk7fSxvblN0YXRlQ2hhbmdlOmZ1bmN0aW9uKCl7aWYodGhpcy54aHIucmVhZHlTdGF0ZSE9NHx8IXRoaXMucnVubmluZyl7cmV0dXJuOwp9dGhpcy5ydW5uaW5nPWZhbHNlO3RoaXMuc3RhdHVzPTA7JHRyeShmdW5jdGlvbigpe3RoaXMuc3RhdHVzPXRoaXMueGhyLnN0YXR1czt9LmJpbmQodGhpcykpO3RoaXMueGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT0kZW1wdHk7aWYodGhpcy5vcHRpb25zLmlzU3VjY2Vzcy5jYWxsKHRoaXMsdGhpcy5zdGF0dXMpKXt0aGlzLnJlc3BvbnNlPXt0ZXh0OnRoaXMueGhyLnJlc3BvbnNlVGV4dCx4bWw6dGhpcy54aHIucmVzcG9uc2VYTUx9Owp0aGlzLnN1Y2Nlc3ModGhpcy5yZXNwb25zZS50ZXh0LHRoaXMucmVzcG9uc2UueG1sKTt9ZWxzZXt0aGlzLnJlc3BvbnNlPXt0ZXh0Om51bGwseG1sOm51bGx9O3RoaXMuZmFpbHVyZSgpO319LGlzU3VjY2VzczpmdW5jdGlvbigpe3JldHVybigodGhpcy5zdGF0dXM+PTIwMCkmJih0aGlzLnN0YXR1czwzMDApKTsKfSxwcm9jZXNzU2NyaXB0czpmdW5jdGlvbihhKXtpZih0aGlzLm9wdGlvbnMuZXZhbFJlc3BvbnNlfHwoLyhlY21hfGphdmEpc2NyaXB0LykudGVzdCh0aGlzLmdldEhlYWRlcigiQ29udGVudC10eXBlIikpKXtyZXR1cm4gJGV4ZWMoYSk7fXJldHVybiBhLnN0cmlwU2NyaXB0cyh0aGlzLm9wdGlvbnMuZXZhbFNjcmlwdHMpOwp9LHN1Y2Nlc3M6ZnVuY3Rpb24oYixhKXt0aGlzLm9uU3VjY2Vzcyh0aGlzLnByb2Nlc3NTY3JpcHRzKGIpLGEpO30sb25TdWNjZXNzOmZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoImNvbXBsZXRlIixhcmd1bWVudHMpLmZpcmVFdmVudCgic3VjY2VzcyIsYXJndW1lbnRzKS5jYWxsQ2hhaW4oKTsKfSxmYWlsdXJlOmZ1bmN0aW9uKCl7dGhpcy5vbkZhaWx1cmUoKTt9LG9uRmFpbHVyZTpmdW5jdGlvbigpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIpLmZpcmVFdmVudCgiZmFpbHVyZSIsdGhpcy54aHIpO30sc2V0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dGhpcy5oZWFkZXJzLnNldChhLGIpOwpyZXR1cm4gdGhpczt9LGdldEhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4gJHRyeShmdW5jdGlvbigpe3JldHVybiB0aGlzLnhoci5nZXRSZXNwb25zZUhlYWRlcihhKTt9LmJpbmQodGhpcykpO30sY2hlY2s6ZnVuY3Rpb24oKXtpZighdGhpcy5ydW5uaW5nKXtyZXR1cm4gdHJ1ZTsKfXN3aXRjaCh0aGlzLm9wdGlvbnMubGluayl7Y2FzZSJjYW5jZWwiOnRoaXMuY2FuY2VsKCk7cmV0dXJuIHRydWU7Y2FzZSJjaGFpbiI6dGhpcy5jaGFpbih0aGlzLmNhbGxlci5iaW5kKHRoaXMsYXJndW1lbnRzKSk7cmV0dXJuIGZhbHNlO31yZXR1cm4gZmFsc2U7fSxzZW5kOmZ1bmN0aW9uKGspe2lmKCF0aGlzLmNoZWNrKGspKXtyZXR1cm4gdGhpczsKfXRoaXMucnVubmluZz10cnVlO3ZhciBpPSR0eXBlKGspO2lmKGk9PSJzdHJpbmcifHxpPT0iZWxlbWVudCIpe2s9e2RhdGE6a307fXZhciBkPXRoaXMub3B0aW9ucztrPSRleHRlbmQoe2RhdGE6ZC5kYXRhLHVybDpkLnVybCxtZXRob2Q6ZC5tZXRob2R9LGspO3ZhciBnPWsuZGF0YSxiPVN0cmluZyhrLnVybCksYT1rLm1ldGhvZC50b0xvd2VyQ2FzZSgpOwpzd2l0Y2goJHR5cGUoZykpe2Nhc2UiZWxlbWVudCI6Zz1kb2N1bWVudC5pZChnKS50b1F1ZXJ5U3RyaW5nKCk7YnJlYWs7Y2FzZSJvYmplY3QiOmNhc2UiaGFzaCI6Zz1IYXNoLnRvUXVlcnlTdHJpbmcoZyk7fWlmKHRoaXMub3B0aW9ucy5mb3JtYXQpe3ZhciBqPSJmb3JtYXQ9Iit0aGlzLm9wdGlvbnMuZm9ybWF0OwpnPShnKT9qKyImIitnOmo7fWlmKHRoaXMub3B0aW9ucy5lbXVsYXRpb24mJiFbImdldCIsInBvc3QiXS5jb250YWlucyhhKSl7dmFyIGg9Il9tZXRob2Q9IithO2c9KGcpP2grIiYiK2c6aDthPSJwb3N0Ijt9aWYodGhpcy5vcHRpb25zLnVybEVuY29kZWQmJmE9PSJwb3N0Iil7dmFyIGM9KHRoaXMub3B0aW9ucy5lbmNvZGluZyk/IjsgY2hhcnNldD0iK3RoaXMub3B0aW9ucy5lbmNvZGluZzoiIjsKdGhpcy5oZWFkZXJzLnNldCgiQ29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIitjKTt9aWYodGhpcy5vcHRpb25zLm5vQ2FjaGUpe3ZhciBmPSJub0NhY2hlPSIrbmV3IERhdGUoKS5nZXRUaW1lKCk7Zz0oZyk/ZisiJiIrZzpmOwp9dmFyIGU9Yi5sYXN0SW5kZXhPZigiLyIpO2lmKGU+LTEmJihlPWIuaW5kZXhPZigiIyIpKT4tMSl7Yj1iLnN1YnN0cigwLGUpO31pZihnJiZhPT0iZ2V0Iil7Yj1iKyhiLmNvbnRhaW5zKCI/Iik/IiYiOiI/IikrZztnPW51bGw7fXRoaXMueGhyLm9wZW4oYS50b1VwcGVyQ2FzZSgpLGIsdGhpcy5vcHRpb25zLmFzeW5jKTsKdGhpcy54aHIub25yZWFkeXN0YXRlY2hhbmdlPXRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpO3RoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKG0sbCl7dHJ5e3RoaXMueGhyLnNldFJlcXVlc3RIZWFkZXIobCxtKTt9Y2F0Y2gobil7dGhpcy5maXJlRXZlbnQoImV4Y2VwdGlvbiIsW2wsbV0pOwp9fSx0aGlzKTt0aGlzLmZpcmVFdmVudCgicmVxdWVzdCIpO3RoaXMueGhyLnNlbmQoZyk7aWYoIXRoaXMub3B0aW9ucy5hc3luYyl7dGhpcy5vblN0YXRlQ2hhbmdlKCk7fXJldHVybiB0aGlzO30sY2FuY2VsOmZ1bmN0aW9uKCl7aWYoIXRoaXMucnVubmluZyl7cmV0dXJuIHRoaXM7Cn10aGlzLnJ1bm5pbmc9ZmFsc2U7dGhpcy54aHIuYWJvcnQoKTt0aGlzLnhoci5vbnJlYWR5c3RhdGVjaGFuZ2U9JGVtcHR5O3RoaXMueGhyPW5ldyBCcm93c2VyLlJlcXVlc3QoKTt0aGlzLmZpcmVFdmVudCgiY2FuY2VsIik7cmV0dXJuIHRoaXM7fX0pOyhmdW5jdGlvbigpe3ZhciBhPXt9OwpbImdldCIsInBvc3QiLCJwdXQiLCJkZWxldGUiLCJHRVQiLCJQT1NUIiwiUFVUIiwiREVMRVRFIl0uZWFjaChmdW5jdGlvbihiKXthW2JdPWZ1bmN0aW9uKCl7dmFyIGM9QXJyYXkubGluayhhcmd1bWVudHMse3VybDpTdHJpbmcudHlwZSxkYXRhOiRkZWZpbmVkfSk7CnJldHVybiB0aGlzLnNlbmQoJGV4dGVuZChjLHttZXRob2Q6Yn0pKTt9O30pO1JlcXVlc3QuaW1wbGVtZW50KGEpO30pKCk7RWxlbWVudC5Qcm9wZXJ0aWVzLnNlbmQ9e3NldDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnJldHJpZXZlKCJzZW5kIik7aWYoYil7Yi5jYW5jZWwoKTsKfXJldHVybiB0aGlzLmVsaW1pbmF0ZSgic2VuZCIpLnN0b3JlKCJzZW5kOm9wdGlvbnMiLCRleHRlbmQoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLG1ldGhvZDp0aGlzLmdldCgibWV0aG9kIil8fCJwb3N0Iix1cmw6dGhpcy5nZXQoImFjdGlvbiIpfSxhKSk7fSxnZXQ6ZnVuY3Rpb24oYSl7aWYoYXx8IXRoaXMucmV0cmlldmUoInNlbmQiKSl7aWYoYXx8IXRoaXMucmV0cmlldmUoInNlbmQ6b3B0aW9ucyIpKXt0aGlzLnNldCgic2VuZCIsYSk7Cn10aGlzLnN0b3JlKCJzZW5kIixuZXcgUmVxdWVzdCh0aGlzLnJldHJpZXZlKCJzZW5kOm9wdGlvbnMiKSkpO31yZXR1cm4gdGhpcy5yZXRyaWV2ZSgic2VuZCIpO319O0VsZW1lbnQuaW1wbGVtZW50KHtzZW5kOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZ2V0KCJzZW5kIik7CmIuc2VuZCh7ZGF0YTp0aGlzLHVybDphfHxiLm9wdGlvbnMudXJsfSk7cmV0dXJuIHRoaXM7fX0pO1JlcXVlc3QuSFRNTD1uZXcgQ2xhc3Moe0V4dGVuZHM6UmVxdWVzdCxvcHRpb25zOnt1cGRhdGU6ZmFsc2UsYXBwZW5kOmZhbHNlLGV2YWxTY3JpcHRzOnRydWUsZmlsdGVyOmZhbHNlfSxwcm9jZXNzSFRNTDpmdW5jdGlvbihjKXt2YXIgYj1jLm1hdGNoKC88Ym9keVtePl0qPihbXHNcU10qPyk8XC9ib2R5Pi9pKTsKYz0oYik/YlsxXTpjO3ZhciBhPW5ldyBFbGVtZW50KCJkaXYiKTtyZXR1cm4gJHRyeShmdW5jdGlvbigpe3ZhciBkPSI8cm9vdD4iK2MrIjwvcm9vdD4iLGc7aWYoQnJvd3Nlci5FbmdpbmUudHJpZGVudCl7Zz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpOwpnLmFzeW5jPWZhbHNlO2cubG9hZFhNTChkKTt9ZWxzZXtnPW5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoZCwidGV4dC94bWwiKTt9ZD1nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJyb290IilbMF07aWYoIWQpe3JldHVybiBudWxsO31mb3IodmFyIGY9MCxlPWQuY2hpbGROb2Rlcy5sZW5ndGg7CmY8ZTtmKyspe3ZhciBoPUVsZW1lbnQuY2xvbmUoZC5jaGlsZE5vZGVzW2ZdLHRydWUsdHJ1ZSk7aWYoaCl7YS5ncmFiKGgpO319cmV0dXJuIGE7fSl8fGEuc2V0KCJodG1sIixjKTt9LHN1Y2Nlc3M6ZnVuY3Rpb24oZCl7dmFyIGM9dGhpcy5vcHRpb25zLGI9dGhpcy5yZXNwb25zZTsKYi5odG1sPWQuc3RyaXBTY3JpcHRzKGZ1bmN0aW9uKGUpe2IuamF2YXNjcmlwdD1lO30pO3ZhciBhPXRoaXMucHJvY2Vzc0hUTUwoYi5odG1sKTtiLnRyZWU9YS5jaGlsZE5vZGVzO2IuZWxlbWVudHM9YS5nZXRFbGVtZW50cygiKiIpO2lmKGMuZmlsdGVyKXtiLnRyZWU9Yi5lbGVtZW50cy5maWx0ZXIoYy5maWx0ZXIpOwp9aWYoYy51cGRhdGUpe2RvY3VtZW50LmlkKGMudXBkYXRlKS5lbXB0eSgpLnNldCgiaHRtbCIsYi5odG1sKTt9ZWxzZXtpZihjLmFwcGVuZCl7ZG9jdW1lbnQuaWQoYy5hcHBlbmQpLmFkb3B0KGEuZ2V0Q2hpbGRyZW4oKSk7fX1pZihjLmV2YWxTY3JpcHRzKXskZXhlYyhiLmphdmFzY3JpcHQpOwp9dGhpcy5vblN1Y2Nlc3MoYi50cmVlLGIuZWxlbWVudHMsYi5odG1sLGIuamF2YXNjcmlwdCk7fX0pO0VsZW1lbnQuUHJvcGVydGllcy5sb2FkPXtzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5yZXRyaWV2ZSgibG9hZCIpO2lmKGIpe2IuY2FuY2VsKCk7fXJldHVybiB0aGlzLmVsaW1pbmF0ZSgibG9hZCIpLnN0b3JlKCJsb2FkOm9wdGlvbnMiLCRleHRlbmQoe2RhdGE6dGhpcyxsaW5rOiJjYW5jZWwiLHVwZGF0ZTp0aGlzLG1ldGhvZDoiZ2V0In0sYSkpOwp9LGdldDpmdW5jdGlvbihhKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgibG9hZCIpKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgibG9hZDpvcHRpb25zIikpe3RoaXMuc2V0KCJsb2FkIixhKTt9dGhpcy5zdG9yZSgibG9hZCIsbmV3IFJlcXVlc3QuSFRNTCh0aGlzLnJldHJpZXZlKCJsb2FkOm9wdGlvbnMiKSkpOwp9cmV0dXJuIHRoaXMucmV0cmlldmUoImxvYWQiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7bG9hZDpmdW5jdGlvbigpe3RoaXMuZ2V0KCJsb2FkIikuc2VuZChBcnJheS5saW5rKGFyZ3VtZW50cyx7ZGF0YTpPYmplY3QudHlwZSx1cmw6U3RyaW5nLnR5cGV9KSk7cmV0dXJuIHRoaXM7Cn19KTtSZXF1ZXN0LkpTT049bmV3IENsYXNzKHtFeHRlbmRzOlJlcXVlc3Qsb3B0aW9uczp7c2VjdXJlOnRydWV9LGluaXRpYWxpemU6ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnQoYSk7dGhpcy5oZWFkZXJzLmV4dGVuZCh7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIiwiWC1SZXF1ZXN0IjoiSlNPTiJ9KTsKfSxzdWNjZXNzOmZ1bmN0aW9uKGEpe3RoaXMucmVzcG9uc2UuanNvbj1KU09OLmRlY29kZShhLHRoaXMub3B0aW9ucy5zZWN1cmUpO3RoaXMub25TdWNjZXNzKHRoaXMucmVzcG9uc2UuanNvbixhKTt9fSk7]]></data>
	</file>
	<file>
	  <filename>/mootools-1.2-more.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly9Nb29Ub29scyBNb3JlLCA8aHR0cDovL21vb3Rvb2xzLm5ldC9tb3JlPi4gQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgQWFyb24gTmV3dG9uIDxodHRwOi8vY2xpZW50Y2lkZS5jb20vPiwgVmFsZXJpbyBQcm9pZXR0aSA8aHR0cDovL21hZDRtaWxrLm5ldD4gJiB0aGUgTW9vVG9vbHMgdGVhbSA8aHR0cDovL21vb3Rvb2xzLm5ldC9kZXZlbG9wZXJzPiwgTUlUIFN0eWxlIExpY2Vuc2UuCgpNb29Ub29scy5Nb3JlPXt2ZXJzaW9uOiIxLjIuNC40IixidWlsZDoiNmY2MDU3ZGM2NDVmZGI3NTQ3Njg5MTgzYjIzMTEwNjNiZDY1M2RkZiJ9O0VsZW1lbnQuaW1wbGVtZW50KHttZWFzdXJlOmZ1bmN0aW9uKGUpe3ZhciBnPWZ1bmN0aW9uKGgpe3JldHVybiAhISghaHx8aC5vZmZzZXRIZWlnaHR8fGgub2Zmc2V0V2lkdGgpOwp9O2lmKGcodGhpcykpe3JldHVybiBlLmFwcGx5KHRoaXMpO312YXIgZD10aGlzLmdldFBhcmVudCgpLGY9W10sYj1bXTt3aGlsZSghZyhkKSYmZCE9ZG9jdW1lbnQuYm9keSl7Yi5wdXNoKGQuZXhwb3NlKCkpO2Q9ZC5nZXRQYXJlbnQoKTt9dmFyIGM9dGhpcy5leHBvc2UoKTsKdmFyIGE9ZS5hcHBseSh0aGlzKTtjKCk7Yi5lYWNoKGZ1bmN0aW9uKGgpe2goKTt9KTtyZXR1cm4gYTt9LGV4cG9zZTpmdW5jdGlvbigpe2lmKHRoaXMuZ2V0U3R5bGUoImRpc3BsYXkiKSE9Im5vbmUiKXtyZXR1cm4gJGVtcHR5O312YXIgYT10aGlzLnN0eWxlLmNzc1RleHQ7CnRoaXMuc2V0U3R5bGVzKHtkaXNwbGF5OiJibG9jayIscG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4ifSk7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5jc3NUZXh0PWE7fS5iaW5kKHRoaXMpO30sZ2V0RGltZW5zaW9uczpmdW5jdGlvbihhKXthPSRtZXJnZSh7Y29tcHV0ZVNpemU6ZmFsc2V9LGEpOwp2YXIgZj17fTt2YXIgZD1mdW5jdGlvbihnLGUpe3JldHVybihlLmNvbXB1dGVTaXplKT9nLmdldENvbXB1dGVkU2l6ZShlKTpnLmdldFNpemUoKTt9O3ZhciBiPXRoaXMuZ2V0UGFyZW50KCJib2R5Iik7aWYoYiYmdGhpcy5nZXRTdHlsZSgiZGlzcGxheSIpPT0ibm9uZSIpe2Y9dGhpcy5tZWFzdXJlKGZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcyxhKTsKfSk7fWVsc2V7aWYoYil7dHJ5e2Y9ZCh0aGlzLGEpO31jYXRjaChjKXt9fWVsc2V7Zj17eDowLHk6MH07fX1yZXR1cm4gJGNoayhmLngpPyRleHRlbmQoZix7d2lkdGg6Zi54LGhlaWdodDpmLnl9KTokZXh0ZW5kKGYse3g6Zi53aWR0aCx5OmYuaGVpZ2h0fSk7fSxnZXRDb21wdXRlZFNpemU6ZnVuY3Rpb24oYSl7YT0kbWVyZ2Uoe3N0eWxlczpbInBhZGRpbmciLCJib3JkZXIiXSxwbGFpbnM6e2hlaWdodDpbInRvcCIsImJvdHRvbSJdLHdpZHRoOlsibGVmdCIsInJpZ2h0Il19LG1vZGU6ImJvdGgifSxhKTsKdmFyIGM9e3dpZHRoOjAsaGVpZ2h0OjB9O3N3aXRjaChhLm1vZGUpe2Nhc2UidmVydGljYWwiOmRlbGV0ZSBjLndpZHRoO2RlbGV0ZSBhLnBsYWlucy53aWR0aDticmVhaztjYXNlImhvcml6b250YWwiOmRlbGV0ZSBjLmhlaWdodDtkZWxldGUgYS5wbGFpbnMuaGVpZ2h0OwpicmVhazt9dmFyIGI9W107JGVhY2goYS5wbGFpbnMsZnVuY3Rpb24oZyxmKXtnLmVhY2goZnVuY3Rpb24oaCl7YS5zdHlsZXMuZWFjaChmdW5jdGlvbihpKXtiLnB1c2goKGk9PSJib3JkZXIiKT9pKyItIitoKyItd2lkdGgiOmkrIi0iK2gpO30pO30pO30pO3ZhciBlPXt9OwpiLmVhY2goZnVuY3Rpb24oZil7ZVtmXT10aGlzLmdldENvbXB1dGVkU3R5bGUoZik7fSx0aGlzKTt2YXIgZD1bXTskZWFjaChhLnBsYWlucyxmdW5jdGlvbihnLGYpe3ZhciBoPWYuY2FwaXRhbGl6ZSgpO2NbInRvdGFsIitoXT1jWyJjb21wdXRlZCIraF09MDtnLmVhY2goZnVuY3Rpb24oaSl7Y1siY29tcHV0ZWQiK2kuY2FwaXRhbGl6ZSgpXT0wOwpiLmVhY2goZnVuY3Rpb24oayxqKXtpZihrLnRlc3QoaSkpe2Vba109ZVtrXS50b0ludCgpfHwwO2NbInRvdGFsIitoXT1jWyJ0b3RhbCIraF0rZVtrXTtjWyJjb21wdXRlZCIraS5jYXBpdGFsaXplKCldPWNbImNvbXB1dGVkIitpLmNhcGl0YWxpemUoKV0rZVtrXTt9aWYoay50ZXN0KGkpJiZmIT1rJiYoay50ZXN0KCJib3JkZXIiKXx8ay50ZXN0KCJwYWRkaW5nIikpJiYhZC5jb250YWlucyhrKSl7ZC5wdXNoKGspOwpjWyJjb21wdXRlZCIraF09Y1siY29tcHV0ZWQiK2hdLWVba107fX0pO30pO30pO1siV2lkdGgiLCJIZWlnaHQiXS5lYWNoKGZ1bmN0aW9uKGcpe3ZhciBmPWcudG9Mb3dlckNhc2UoKTtpZighJGNoayhjW2ZdKSl7cmV0dXJuO31jW2ZdPWNbZl0rdGhpc1sib2Zmc2V0IitnXStjWyJjb21wdXRlZCIrZ107CmNbInRvdGFsIitnXT1jW2ZdK2NbInRvdGFsIitnXTtkZWxldGUgY1siY29tcHV0ZWQiK2ddO30sdGhpcyk7cmV0dXJuICRleHRlbmQoZSxjKTt9fSk7KGZ1bmN0aW9uKCl7dmFyIGE9RWxlbWVudC5wcm90b3R5cGUucG9zaXRpb247RWxlbWVudC5pbXBsZW1lbnQoe3Bvc2l0aW9uOmZ1bmN0aW9uKGcpe2lmKGcmJigkZGVmaW5lZChnLngpfHwkZGVmaW5lZChnLnkpKSl7cmV0dXJuIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpczsKfSRlYWNoKGd8fHt9LGZ1bmN0aW9uKHUsdCl7aWYoISRkZWZpbmVkKHUpKXtkZWxldGUgZ1t0XTt9fSk7Zz0kbWVyZ2Uoe3JlbGF0aXZlVG86ZG9jdW1lbnQuYm9keSxwb3NpdGlvbjp7eDoiY2VudGVyIix5OiJjZW50ZXIifSxlZGdlOmZhbHNlLG9mZnNldDp7eDowLHk6MH0scmV0dXJuUG9zOmZhbHNlLHJlbEZpeGVkUG9zaXRpb246ZmFsc2UsaWdub3JlTWFyZ2luczpmYWxzZSxpZ25vcmVTY3JvbGw6ZmFsc2UsYWxsb3dOZWdhdGl2ZTpmYWxzZX0sZyk7CnZhciByPXt4OjAseTowfSxlPWZhbHNlO3ZhciBjPXRoaXMubWVhc3VyZShmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5pZCh0aGlzLmdldE9mZnNldFBhcmVudCgpKTt9KTtpZihjJiZjIT10aGlzLmdldERvY3VtZW50KCkuYm9keSl7cj1jLm1lYXN1cmUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQb3NpdGlvbigpOwp9KTtlPWMhPWRvY3VtZW50LmlkKGcucmVsYXRpdmVUbyk7Zy5vZmZzZXQueD1nLm9mZnNldC54LXIueDtnLm9mZnNldC55PWcub2Zmc2V0Lnktci55O312YXIgcz1mdW5jdGlvbih0KXtpZigkdHlwZSh0KSE9InN0cmluZyIpe3JldHVybiB0O310PXQudG9Mb3dlckNhc2UoKTsKdmFyIHU9e307aWYodC50ZXN0KCJsZWZ0Iikpe3UueD0ibGVmdCI7fWVsc2V7aWYodC50ZXN0KCJyaWdodCIpKXt1Lng9InJpZ2h0Ijt9ZWxzZXt1Lng9ImNlbnRlciI7fX1pZih0LnRlc3QoInVwcGVyIil8fHQudGVzdCgidG9wIikpe3UueT0idG9wIjt9ZWxzZXtpZih0LnRlc3QoImJvdHRvbSIpKXt1Lnk9ImJvdHRvbSI7Cn1lbHNle3UueT0iY2VudGVyIjt9fXJldHVybiB1O307Zy5lZGdlPXMoZy5lZGdlKTtnLnBvc2l0aW9uPXMoZy5wb3NpdGlvbik7aWYoIWcuZWRnZSl7aWYoZy5wb3NpdGlvbi54PT0iY2VudGVyIiYmZy5wb3NpdGlvbi55PT0iY2VudGVyIil7Zy5lZGdlPXt4OiJjZW50ZXIiLHk6ImNlbnRlciJ9Owp9ZWxzZXtnLmVkZ2U9e3g6ImxlZnQiLHk6InRvcCJ9O319dGhpcy5zZXRTdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpO3ZhciBmPWRvY3VtZW50LmlkKGcucmVsYXRpdmVUbyl8fGRvY3VtZW50LmJvZHksZD1mPT1kb2N1bWVudC5ib2R5P3dpbmRvdy5nZXRTY3JvbGwoKTpmLmdldFBvc2l0aW9uKCksbD1kLnksaD1kLng7CnZhciBuPXRoaXMuZ2V0RGltZW5zaW9ucyh7Y29tcHV0ZVNpemU6dHJ1ZSxzdHlsZXM6WyJwYWRkaW5nIiwiYm9yZGVyIiwibWFyZ2luIl19KTt2YXIgaj17fSxvPWcub2Zmc2V0LnkscT1nLm9mZnNldC54LGs9d2luZG93LmdldFNpemUoKTtzd2l0Y2goZy5wb3NpdGlvbi54KXtjYXNlImxlZnQiOmoueD1oK3E7CmJyZWFrO2Nhc2UicmlnaHQiOmoueD1oK3ErZi5vZmZzZXRXaWR0aDticmVhaztkZWZhdWx0OmoueD1oKygoZj09ZG9jdW1lbnQuYm9keT9rLng6Zi5vZmZzZXRXaWR0aCkvMikrcTticmVhazt9c3dpdGNoKGcucG9zaXRpb24ueSl7Y2FzZSJ0b3AiOmoueT1sK287YnJlYWs7CmNhc2UiYm90dG9tIjpqLnk9bCtvK2Yub2Zmc2V0SGVpZ2h0O2JyZWFrO2RlZmF1bHQ6ai55PWwrKChmPT1kb2N1bWVudC5ib2R5P2sueTpmLm9mZnNldEhlaWdodCkvMikrbzticmVhazt9aWYoZy5lZGdlKXt2YXIgYj17fTtzd2l0Y2goZy5lZGdlLngpe2Nhc2UibGVmdCI6Yi54PTA7CmJyZWFrO2Nhc2UicmlnaHQiOmIueD0tbi54LW4uY29tcHV0ZWRSaWdodC1uLmNvbXB1dGVkTGVmdDticmVhaztkZWZhdWx0OmIueD0tKG4udG90YWxXaWR0aC8yKTticmVhazt9c3dpdGNoKGcuZWRnZS55KXtjYXNlInRvcCI6Yi55PTA7YnJlYWs7Y2FzZSJib3R0b20iOmIueT0tbi55LW4uY29tcHV0ZWRUb3Atbi5jb21wdXRlZEJvdHRvbTsKYnJlYWs7ZGVmYXVsdDpiLnk9LShuLnRvdGFsSGVpZ2h0LzIpO2JyZWFrO31qLngrPWIueDtqLnkrPWIueTt9aj17bGVmdDooKGoueD49MHx8ZXx8Zy5hbGxvd05lZ2F0aXZlKT9qLng6MCkudG9JbnQoKSx0b3A6KChqLnk+PTB8fGV8fGcuYWxsb3dOZWdhdGl2ZSk/ai55OjApLnRvSW50KCl9Owp2YXIgaT17bGVmdDoieCIsdG9wOiJ5In07WyJtaW5pbXVtIiwibWF4aW11bSJdLmVhY2goZnVuY3Rpb24odCl7WyJsZWZ0IiwidG9wIl0uZWFjaChmdW5jdGlvbih1KXt2YXIgdj1nW3RdP2dbdF1baVt1XV06bnVsbDtpZih2IT1udWxsJiZqW3VdPHYpe2pbdV09djt9fSk7Cn0pO2lmKGYuZ2V0U3R5bGUoInBvc2l0aW9uIik9PSJmaXhlZCJ8fGcucmVsRml4ZWRQb3NpdGlvbil7dmFyIG09d2luZG93LmdldFNjcm9sbCgpO2oudG9wKz1tLnk7ai5sZWZ0Kz1tLng7fWlmKGcuaWdub3JlU2Nyb2xsKXt2YXIgcD1mLmdldFNjcm9sbCgpO2oudG9wLT1wLnk7CmoubGVmdC09cC54O31pZihnLmlnbm9yZU1hcmdpbnMpe2oubGVmdCs9KGcuZWRnZS54PT0icmlnaHQiP25bIm1hcmdpbi1yaWdodCJdOmcuZWRnZS54PT0iY2VudGVyIj8tblsibWFyZ2luLWxlZnQiXSsoKG5bIm1hcmdpbi1yaWdodCJdK25bIm1hcmdpbi1sZWZ0Il0pLzIpOi1uWyJtYXJnaW4tbGVmdCJdKTsKai50b3ArPShnLmVkZ2UueT09ImJvdHRvbSI/blsibWFyZ2luLWJvdHRvbSJdOmcuZWRnZS55PT0iY2VudGVyIj8tblsibWFyZ2luLXRvcCJdKygoblsibWFyZ2luLWJvdHRvbSJdK25bIm1hcmdpbi10b3AiXSkvMik6LW5bIm1hcmdpbi10b3AiXSk7fWoubGVmdD1NYXRoLmNlaWwoai5sZWZ0KTsKai50b3A9TWF0aC5jZWlsKGoudG9wKTtpZihnLnJldHVyblBvcyl7cmV0dXJuIGo7fWVsc2V7dGhpcy5zZXRTdHlsZXMoaik7fXJldHVybiB0aGlzO319KTt9KSgpO0Z4LlNsaWRlPW5ldyBDbGFzcyh7RXh0ZW5kczpGeCxvcHRpb25zOnttb2RlOiJ2ZXJ0aWNhbCIsd3JhcHBlcjpmYWxzZSxoaWRlT3ZlcmZsb3c6dHJ1ZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihiLGEpe3RoaXMuYWRkRXZlbnQoImNvbXBsZXRlIixmdW5jdGlvbigpe3RoaXMub3Blbj0odGhpcy53cmFwcGVyWyJvZmZzZXQiK3RoaXMubGF5b3V0LmNhcGl0YWxpemUoKV0hPTApOwppZih0aGlzLm9wZW4pe3RoaXMud3JhcHBlci5zZXRTdHlsZSgiaGVpZ2h0IiwiIik7fWlmKHRoaXMub3BlbiYmQnJvd3Nlci5FbmdpbmUud2Via2l0NDE5KXt0aGlzLmVsZW1lbnQuZGlzcG9zZSgpLmluamVjdCh0aGlzLndyYXBwZXIpO319LHRydWUpO3RoaXMuZWxlbWVudD10aGlzLnN1YmplY3Q9ZG9jdW1lbnQuaWQoYik7CnRoaXMucGFyZW50KGEpO3ZhciBkPXRoaXMuZWxlbWVudC5yZXRyaWV2ZSgid3JhcHBlciIpO3ZhciBjPXRoaXMuZWxlbWVudC5nZXRTdHlsZXMoIm1hcmdpbiIsInBvc2l0aW9uIiwib3ZlcmZsb3ciKTtpZih0aGlzLm9wdGlvbnMuaGlkZU92ZXJmbG93KXtjPSRleHRlbmQoYyx7b3ZlcmZsb3c6ImhpZGRlbiJ9KTsKfWlmKHRoaXMub3B0aW9ucy53cmFwcGVyKXtkPWRvY3VtZW50LmlkKHRoaXMub3B0aW9ucy53cmFwcGVyKS5zZXRTdHlsZXMoYyk7fXRoaXMud3JhcHBlcj1kfHxuZXcgRWxlbWVudCgiZGl2Iix7c3R5bGVzOmN9KS53cmFwcyh0aGlzLmVsZW1lbnQpO3RoaXMuZWxlbWVudC5zdG9yZSgid3JhcHBlciIsdGhpcy53cmFwcGVyKS5zZXRTdHlsZSgibWFyZ2luIiwwKTsKdGhpcy5ub3c9W107dGhpcy5vcGVuPXRydWU7fSx2ZXJ0aWNhbDpmdW5jdGlvbigpe3RoaXMubWFyZ2luPSJtYXJnaW4tdG9wIjt0aGlzLmxheW91dD0iaGVpZ2h0Ijt0aGlzLm9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0O30saG9yaXpvbnRhbDpmdW5jdGlvbigpe3RoaXMubWFyZ2luPSJtYXJnaW4tbGVmdCI7CnRoaXMubGF5b3V0PSJ3aWR0aCI7dGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoO30sc2V0OmZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLm1hcmdpbixhWzBdKTt0aGlzLndyYXBwZXIuc2V0U3R5bGUodGhpcy5sYXlvdXQsYVsxXSk7CnJldHVybiB0aGlzO30sY29tcHV0ZTpmdW5jdGlvbihjLGIsYSl7cmV0dXJuWzAsMV0ubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBGeC5jb21wdXRlKGNbZF0sYltkXSxhKTt9KTt9LHN0YXJ0OmZ1bmN0aW9uKGIsZSl7aWYoIXRoaXMuY2hlY2soYixlKSl7cmV0dXJuIHRoaXM7Cn10aGlzW2V8fHRoaXMub3B0aW9ucy5tb2RlXSgpO3ZhciBkPXRoaXMuZWxlbWVudC5nZXRTdHlsZSh0aGlzLm1hcmdpbikudG9JbnQoKTt2YXIgYz10aGlzLndyYXBwZXIuZ2V0U3R5bGUodGhpcy5sYXlvdXQpLnRvSW50KCk7dmFyIGE9W1tkLGNdLFswLHRoaXMub2Zmc2V0XV07CnZhciBnPVtbZCxjXSxbLXRoaXMub2Zmc2V0LDBdXTt2YXIgZjtzd2l0Y2goYil7Y2FzZSJpbiI6Zj1hO2JyZWFrO2Nhc2Uib3V0IjpmPWc7YnJlYWs7Y2FzZSJ0b2dnbGUiOmY9KGM9PTApP2E6Zzt9cmV0dXJuIHRoaXMucGFyZW50KGZbMF0sZlsxXSk7fSxzbGlkZUluOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnN0YXJ0KCJpbiIsYSk7Cn0sc2xpZGVPdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc3RhcnQoIm91dCIsYSk7fSxoaWRlOmZ1bmN0aW9uKGEpe3RoaXNbYXx8dGhpcy5vcHRpb25zLm1vZGVdKCk7dGhpcy5vcGVuPWZhbHNlO3JldHVybiB0aGlzLnNldChbLXRoaXMub2Zmc2V0LDBdKTt9LHNob3c6ZnVuY3Rpb24oYSl7dGhpc1thfHx0aGlzLm9wdGlvbnMubW9kZV0oKTsKdGhpcy5vcGVuPXRydWU7cmV0dXJuIHRoaXMuc2V0KFswLHRoaXMub2Zmc2V0XSk7fSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuc3RhcnQoInRvZ2dsZSIsYSk7fX0pO0VsZW1lbnQuUHJvcGVydGllcy5zbGlkZT17c2V0OmZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMucmV0cmlldmUoInNsaWRlIik7CmlmKGEpe2EuY2FuY2VsKCk7fXJldHVybiB0aGlzLmVsaW1pbmF0ZSgic2xpZGUiKS5zdG9yZSgic2xpZGU6b3B0aW9ucyIsJGV4dGVuZCh7bGluazoiY2FuY2VsIn0sYikpO30sZ2V0OmZ1bmN0aW9uKGEpe2lmKGF8fCF0aGlzLnJldHJpZXZlKCJzbGlkZSIpKXtpZihhfHwhdGhpcy5yZXRyaWV2ZSgic2xpZGU6b3B0aW9ucyIpKXt0aGlzLnNldCgic2xpZGUiLGEpOwp9dGhpcy5zdG9yZSgic2xpZGUiLG5ldyBGeC5TbGlkZSh0aGlzLHRoaXMucmV0cmlldmUoInNsaWRlOm9wdGlvbnMiKSkpO31yZXR1cm4gdGhpcy5yZXRyaWV2ZSgic2xpZGUiKTt9fTtFbGVtZW50LmltcGxlbWVudCh7c2xpZGU6ZnVuY3Rpb24oZCxlKXtkPWR8fCJ0b2dnbGUiOwp2YXIgYj10aGlzLmdldCgic2xpZGUiKSxhO3N3aXRjaChkKXtjYXNlImhpZGUiOmIuaGlkZShlKTticmVhaztjYXNlInNob3ciOmIuc2hvdyhlKTticmVhaztjYXNlInRvZ2dsZSI6dmFyIGM9dGhpcy5yZXRyaWV2ZSgic2xpZGU6ZmxhZyIsYi5vcGVuKTtiW2M/InNsaWRlT3V0Ijoic2xpZGVJbiJdKGUpOwp0aGlzLnN0b3JlKCJzbGlkZTpmbGFnIiwhYyk7YT10cnVlO2JyZWFrO2RlZmF1bHQ6Yi5zdGFydChkLGUpO31pZighYSl7dGhpcy5lbGltaW5hdGUoInNsaWRlOmZsYWciKTt9cmV0dXJuIHRoaXM7fX0pO3ZhciBEcmFnPW5ldyBDbGFzcyh7SW1wbGVtZW50czpbRXZlbnRzLE9wdGlvbnNdLG9wdGlvbnM6e3NuYXA6Nix1bml0OiJweCIsZ3JpZDpmYWxzZSxzdHlsZTp0cnVlLGxpbWl0OmZhbHNlLGhhbmRsZTpmYWxzZSxpbnZlcnQ6ZmFsc2UscHJldmVudERlZmF1bHQ6ZmFsc2Usc3RvcFByb3BhZ2F0aW9uOmZhbHNlLG1vZGlmaWVyczp7eDoibGVmdCIseToidG9wIn19LGluaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgYj1BcnJheS5saW5rKGFyZ3VtZW50cyx7b3B0aW9uczpPYmplY3QudHlwZSxlbGVtZW50OiRkZWZpbmVkfSk7CnRoaXMuZWxlbWVudD1kb2N1bWVudC5pZChiLmVsZW1lbnQpO3RoaXMuZG9jdW1lbnQ9dGhpcy5lbGVtZW50LmdldERvY3VtZW50KCk7dGhpcy5zZXRPcHRpb25zKGIub3B0aW9uc3x8e30pO3ZhciBhPSR0eXBlKHRoaXMub3B0aW9ucy5oYW5kbGUpO3RoaXMuaGFuZGxlcz0oKGE9PSJhcnJheSJ8fGE9PSJjb2xsZWN0aW9uIik/JCQodGhpcy5vcHRpb25zLmhhbmRsZSk6ZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLmhhbmRsZSkpfHx0aGlzLmVsZW1lbnQ7CnRoaXMubW91c2U9e25vdzp7fSxwb3M6e319O3RoaXMudmFsdWU9e3N0YXJ0Ont9LG5vdzp7fX07dGhpcy5zZWxlY3Rpb249KEJyb3dzZXIuRW5naW5lLnRyaWRlbnQpPyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7dGhpcy5ib3VuZD17c3RhcnQ6dGhpcy5zdGFydC5iaW5kKHRoaXMpLGNoZWNrOnRoaXMuY2hlY2suYmluZCh0aGlzKSxkcmFnOnRoaXMuZHJhZy5iaW5kKHRoaXMpLHN0b3A6dGhpcy5zdG9wLmJpbmQodGhpcyksY2FuY2VsOnRoaXMuY2FuY2VsLmJpbmQodGhpcyksZXZlbnRTdG9wOiRsYW1iZGEoZmFsc2UpfTsKdGhpcy5hdHRhY2goKTt9LGF0dGFjaDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5hZGRFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0KTtyZXR1cm4gdGhpczt9LGRldGFjaDpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5yZW1vdmVFdmVudCgibW91c2Vkb3duIix0aGlzLmJvdW5kLnN0YXJ0KTsKcmV0dXJuIHRoaXM7fSxzdGFydDpmdW5jdGlvbihjKXtpZihjLnJpZ2h0Q2xpY2spe3JldHVybjt9aWYodGhpcy5vcHRpb25zLnByZXZlbnREZWZhdWx0KXtjLnByZXZlbnREZWZhdWx0KCk7fWlmKHRoaXMub3B0aW9ucy5zdG9wUHJvcGFnYXRpb24pe2Muc3RvcFByb3BhZ2F0aW9uKCk7Cn10aGlzLm1vdXNlLnN0YXJ0PWMucGFnZTt0aGlzLmZpcmVFdmVudCgiYmVmb3JlU3RhcnQiLHRoaXMuZWxlbWVudCk7dmFyIGE9dGhpcy5vcHRpb25zLmxpbWl0O3RoaXMubGltaXQ9e3g6W10seTpbXX07Zm9yKHZhciBkIGluIHRoaXMub3B0aW9ucy5tb2RpZmllcnMpe2lmKCF0aGlzLm9wdGlvbnMubW9kaWZpZXJzW2RdKXtjb250aW51ZTsKfWlmKHRoaXMub3B0aW9ucy5zdHlsZSl7dGhpcy52YWx1ZS5ub3dbZF09dGhpcy5lbGVtZW50LmdldFN0eWxlKHRoaXMub3B0aW9ucy5tb2RpZmllcnNbZF0pLnRvSW50KCk7fWVsc2V7dGhpcy52YWx1ZS5ub3dbZF09dGhpcy5lbGVtZW50W3RoaXMub3B0aW9ucy5tb2RpZmllcnNbZF1dOwp9aWYodGhpcy5vcHRpb25zLmludmVydCl7dGhpcy52YWx1ZS5ub3dbZF0qPS0xO310aGlzLm1vdXNlLnBvc1tkXT1jLnBhZ2VbZF0tdGhpcy52YWx1ZS5ub3dbZF07aWYoYSYmYVtkXSl7Zm9yKHZhciBiPTI7Yi0tO2Ipe2lmKCRjaGsoYVtkXVtiXSkpe3RoaXMubGltaXRbZF1bYl09JGxhbWJkYShhW2RdW2JdKSgpOwp9fX19aWYoJHR5cGUodGhpcy5vcHRpb25zLmdyaWQpPT0ibnVtYmVyIil7dGhpcy5vcHRpb25zLmdyaWQ9e3g6dGhpcy5vcHRpb25zLmdyaWQseTp0aGlzLm9wdGlvbnMuZ3JpZH07fXRoaXMuZG9jdW1lbnQuYWRkRXZlbnRzKHttb3VzZW1vdmU6dGhpcy5ib3VuZC5jaGVjayxtb3VzZXVwOnRoaXMuYm91bmQuY2FuY2VsfSk7CnRoaXMuZG9jdW1lbnQuYWRkRXZlbnQodGhpcy5zZWxlY3Rpb24sdGhpcy5ib3VuZC5ldmVudFN0b3ApO30sY2hlY2s6ZnVuY3Rpb24oYSl7aWYodGhpcy5vcHRpb25zLnByZXZlbnREZWZhdWx0KXthLnByZXZlbnREZWZhdWx0KCk7fXZhciBiPU1hdGgucm91bmQoTWF0aC5zcXJ0KE1hdGgucG93KGEucGFnZS54LXRoaXMubW91c2Uuc3RhcnQueCwyKStNYXRoLnBvdyhhLnBhZ2UueS10aGlzLm1vdXNlLnN0YXJ0LnksMikpKTsKaWYoYj50aGlzLm9wdGlvbnMuc25hcCl7dGhpcy5jYW5jZWwoKTt0aGlzLmRvY3VtZW50LmFkZEV2ZW50cyh7bW91c2Vtb3ZlOnRoaXMuYm91bmQuZHJhZyxtb3VzZXVwOnRoaXMuYm91bmQuc3RvcH0pO3RoaXMuZmlyZUV2ZW50KCJzdGFydCIsW3RoaXMuZWxlbWVudCxhXSkuZmlyZUV2ZW50KCJzbmFwIix0aGlzLmVsZW1lbnQpOwp9fSxkcmFnOmZ1bmN0aW9uKGEpe2lmKHRoaXMub3B0aW9ucy5wcmV2ZW50RGVmYXVsdCl7YS5wcmV2ZW50RGVmYXVsdCgpO310aGlzLm1vdXNlLm5vdz1hLnBhZ2U7Zm9yKHZhciBiIGluIHRoaXMub3B0aW9ucy5tb2RpZmllcnMpe2lmKCF0aGlzLm9wdGlvbnMubW9kaWZpZXJzW2JdKXtjb250aW51ZTsKfXRoaXMudmFsdWUubm93W2JdPXRoaXMubW91c2Uubm93W2JdLXRoaXMubW91c2UucG9zW2JdO2lmKHRoaXMub3B0aW9ucy5pbnZlcnQpe3RoaXMudmFsdWUubm93W2JdKj0tMTt9aWYodGhpcy5vcHRpb25zLmxpbWl0JiZ0aGlzLmxpbWl0W2JdKXtpZigkY2hrKHRoaXMubGltaXRbYl1bMV0pJiYodGhpcy52YWx1ZS5ub3dbYl0+dGhpcy5saW1pdFtiXVsxXSkpe3RoaXMudmFsdWUubm93W2JdPXRoaXMubGltaXRbYl1bMV07Cn1lbHNle2lmKCRjaGsodGhpcy5saW1pdFtiXVswXSkmJih0aGlzLnZhbHVlLm5vd1tiXTx0aGlzLmxpbWl0W2JdWzBdKSl7dGhpcy52YWx1ZS5ub3dbYl09dGhpcy5saW1pdFtiXVswXTt9fX1pZih0aGlzLm9wdGlvbnMuZ3JpZFtiXSl7dGhpcy52YWx1ZS5ub3dbYl0tPSgodGhpcy52YWx1ZS5ub3dbYl0tKHRoaXMubGltaXRbYl1bMF18fDApKSV0aGlzLm9wdGlvbnMuZ3JpZFtiXSk7Cn1pZih0aGlzLm9wdGlvbnMuc3R5bGUpe3RoaXMuZWxlbWVudC5zZXRTdHlsZSh0aGlzLm9wdGlvbnMubW9kaWZpZXJzW2JdLHRoaXMudmFsdWUubm93W2JdK3RoaXMub3B0aW9ucy51bml0KTt9ZWxzZXt0aGlzLmVsZW1lbnRbdGhpcy5vcHRpb25zLm1vZGlmaWVyc1tiXV09dGhpcy52YWx1ZS5ub3dbYl07Cn19dGhpcy5maXJlRXZlbnQoImRyYWciLFt0aGlzLmVsZW1lbnQsYV0pO30sY2FuY2VsOmZ1bmN0aW9uKGEpe3RoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnQoIm1vdXNlbW92ZSIsdGhpcy5ib3VuZC5jaGVjayk7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCgibW91c2V1cCIsdGhpcy5ib3VuZC5jYW5jZWwpOwppZihhKXt0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50KHRoaXMuc2VsZWN0aW9uLHRoaXMuYm91bmQuZXZlbnRTdG9wKTt0aGlzLmZpcmVFdmVudCgiY2FuY2VsIix0aGlzLmVsZW1lbnQpO319LHN0b3A6ZnVuY3Rpb24oYSl7dGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudCh0aGlzLnNlbGVjdGlvbix0aGlzLmJvdW5kLmV2ZW50U3RvcCk7CnRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnQoIm1vdXNlbW92ZSIsdGhpcy5ib3VuZC5kcmFnKTt0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50KCJtb3VzZXVwIix0aGlzLmJvdW5kLnN0b3ApO2lmKGEpe3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsW3RoaXMuZWxlbWVudCxhXSk7Cn19fSk7RWxlbWVudC5pbXBsZW1lbnQoe21ha2VSZXNpemFibGU6ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IERyYWcodGhpcywkbWVyZ2Uoe21vZGlmaWVyczp7eDoid2lkdGgiLHk6ImhlaWdodCJ9fSxhKSk7dGhpcy5zdG9yZSgicmVzaXplciIsYik7cmV0dXJuIGIuYWRkRXZlbnQoImRyYWciLGZ1bmN0aW9uKCl7dGhpcy5maXJlRXZlbnQoInJlc2l6ZSIsYik7Cn0uYmluZCh0aGlzKSk7fX0pO0RyYWcuTW92ZT1uZXcgQ2xhc3Moe0V4dGVuZHM6RHJhZyxvcHRpb25zOntkcm9wcGFibGVzOltdLGNvbnRhaW5lcjpmYWxzZSxwcmVjYWxjdWxhdGU6ZmFsc2UsaW5jbHVkZU1hcmdpbnM6dHJ1ZSxjaGVja0Ryb3BwYWJsZXM6dHJ1ZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihiLGEpe3RoaXMucGFyZW50KGIsYSk7CmI9dGhpcy5lbGVtZW50O3RoaXMuZHJvcHBhYmxlcz0kJCh0aGlzLm9wdGlvbnMuZHJvcHBhYmxlcyk7dGhpcy5jb250YWluZXI9ZG9jdW1lbnQuaWQodGhpcy5vcHRpb25zLmNvbnRhaW5lcik7aWYodGhpcy5jb250YWluZXImJiR0eXBlKHRoaXMuY29udGFpbmVyKSE9ImVsZW1lbnQiKXt0aGlzLmNvbnRhaW5lcj1kb2N1bWVudC5pZCh0aGlzLmNvbnRhaW5lci5nZXREb2N1bWVudCgpLmJvZHkpOwp9dmFyIGM9Yi5nZXRTdHlsZXMoImxlZnQiLCJ0b3AiLCJwb3NpdGlvbiIpO2lmKGMubGVmdD09ImF1dG8ifHxjLnRvcD09ImF1dG8iKXtiLnNldFBvc2l0aW9uKGIuZ2V0UG9zaXRpb24oYi5nZXRPZmZzZXRQYXJlbnQoKSkpO31pZihjLnBvc2l0aW9uPT0ic3RhdGljIil7Yi5zZXRTdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpOwp9dGhpcy5hZGRFdmVudCgic3RhcnQiLHRoaXMuY2hlY2tEcm9wcGFibGVzLHRydWUpO3RoaXMub3ZlcmVkPW51bGw7fSxzdGFydDpmdW5jdGlvbihhKXtpZih0aGlzLmNvbnRhaW5lcil7dGhpcy5vcHRpb25zLmxpbWl0PXRoaXMuY2FsY3VsYXRlTGltaXQoKTt9aWYodGhpcy5vcHRpb25zLnByZWNhbGN1bGF0ZSl7dGhpcy5wb3NpdGlvbnM9dGhpcy5kcm9wcGFibGVzLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gYi5nZXRDb29yZGluYXRlcygpOwp9KTt9dGhpcy5wYXJlbnQoYSk7fSxjYWxjdWxhdGVMaW1pdDpmdW5jdGlvbigpe3ZhciBkPXRoaXMuZWxlbWVudC5nZXRPZmZzZXRQYXJlbnQoKSxnPXRoaXMuY29udGFpbmVyLmdldENvb3JkaW5hdGVzKGQpLGY9e30sYz17fSxiPXt9LGk9e30saz17fTtbInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLmVhY2goZnVuY3Rpb24obyl7ZltvXT10aGlzLmNvbnRhaW5lci5nZXRTdHlsZSgiYm9yZGVyLSIrbykudG9JbnQoKTsKYltvXT10aGlzLmVsZW1lbnQuZ2V0U3R5bGUoImJvcmRlci0iK28pLnRvSW50KCk7Y1tvXT10aGlzLmVsZW1lbnQuZ2V0U3R5bGUoIm1hcmdpbi0iK28pLnRvSW50KCk7aVtvXT10aGlzLmNvbnRhaW5lci5nZXRTdHlsZSgibWFyZ2luLSIrbykudG9JbnQoKTtrW29dPWQuZ2V0U3R5bGUoInBhZGRpbmctIitvKS50b0ludCgpOwp9LHRoaXMpO3ZhciBlPXRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCtjLmxlZnQrYy5yaWdodCxuPXRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQrYy50b3ArYy5ib3R0b20saD0wLGo9MCxtPWcucmlnaHQtZi5yaWdodC1lLGE9Zy5ib3R0b20tZi5ib3R0b20tbjtpZih0aGlzLm9wdGlvbnMuaW5jbHVkZU1hcmdpbnMpe2grPWMubGVmdDsKais9Yy50b3A7fWVsc2V7bSs9Yy5yaWdodDthKz1jLmJvdHRvbTt9aWYodGhpcy5lbGVtZW50LmdldFN0eWxlKCJwb3NpdGlvbiIpPT0icmVsYXRpdmUiKXt2YXIgbD10aGlzLmVsZW1lbnQuZ2V0Q29vcmRpbmF0ZXMoZCk7bC5sZWZ0LT10aGlzLmVsZW1lbnQuZ2V0U3R5bGUoImxlZnQiKS50b0ludCgpOwpsLnRvcC09dGhpcy5lbGVtZW50LmdldFN0eWxlKCJ0b3AiKS50b0ludCgpO2grPWYubGVmdC1sLmxlZnQ7ais9Zi50b3AtbC50b3A7bSs9Yy5sZWZ0LWwubGVmdDthKz1jLnRvcC1sLnRvcDtpZih0aGlzLmNvbnRhaW5lciE9ZCl7aCs9aS5sZWZ0K2subGVmdDtqKz0oQnJvd3Nlci5FbmdpbmUudHJpZGVudDQ/MDppLnRvcCkray50b3A7Cn19ZWxzZXtoLT1jLmxlZnQ7ai09Yy50b3A7aWYodGhpcy5jb250YWluZXI9PWQpe20tPWYubGVmdDthLT1mLnRvcDt9ZWxzZXtoKz1nLmxlZnQrZi5sZWZ0O2orPWcudG9wK2YudG9wO319cmV0dXJue3g6W2gsbV0seTpbaixhXX07fSxjaGVja0FnYWluc3Q6ZnVuY3Rpb24oYyxiKXtjPSh0aGlzLnBvc2l0aW9ucyk/dGhpcy5wb3NpdGlvbnNbYl06Yy5nZXRDb29yZGluYXRlcygpOwp2YXIgYT10aGlzLm1vdXNlLm5vdztyZXR1cm4oYS54PmMubGVmdCYmYS54PGMucmlnaHQmJmEueTxjLmJvdHRvbSYmYS55PmMudG9wKTt9LGNoZWNrRHJvcHBhYmxlczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZHJvcHBhYmxlcy5maWx0ZXIodGhpcy5jaGVja0FnYWluc3QsdGhpcykuZ2V0TGFzdCgpOwppZih0aGlzLm92ZXJlZCE9YSl7aWYodGhpcy5vdmVyZWQpe3RoaXMuZmlyZUV2ZW50KCJsZWF2ZSIsW3RoaXMuZWxlbWVudCx0aGlzLm92ZXJlZF0pO31pZihhKXt0aGlzLmZpcmVFdmVudCgiZW50ZXIiLFt0aGlzLmVsZW1lbnQsYV0pO310aGlzLm92ZXJlZD1hO319LGRyYWc6ZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnQoYSk7CmlmKHRoaXMub3B0aW9ucy5jaGVja0Ryb3BwYWJsZXMmJnRoaXMuZHJvcHBhYmxlcy5sZW5ndGgpe3RoaXMuY2hlY2tEcm9wcGFibGVzKCk7fX0sc3RvcDpmdW5jdGlvbihhKXt0aGlzLmNoZWNrRHJvcHBhYmxlcygpO3RoaXMuZmlyZUV2ZW50KCJkcm9wIixbdGhpcy5lbGVtZW50LHRoaXMub3ZlcmVkLGFdKTsKdGhpcy5vdmVyZWQ9bnVsbDtyZXR1cm4gdGhpcy5wYXJlbnQoYSk7fX0pO0VsZW1lbnQuaW1wbGVtZW50KHttYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBEcmFnLk1vdmUodGhpcyxhKTt0aGlzLnN0b3JlKCJkcmFnZ2VyIixiKTtyZXR1cm4gYjt9fSk7CnZhciBTb3J0YWJsZXM9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7c25hcDo0LG9wYWNpdHk6MSxjbG9uZTpmYWxzZSxyZXZlcnQ6ZmFsc2UsaGFuZGxlOmZhbHNlLGNvbnN0cmFpbjpmYWxzZX0saW5pdGlhbGl6ZTpmdW5jdGlvbihhLGIpe3RoaXMuc2V0T3B0aW9ucyhiKTsKdGhpcy5lbGVtZW50cz1bXTt0aGlzLmxpc3RzPVtdO3RoaXMuaWRsZT10cnVlO3RoaXMuYWRkTGlzdHMoJCQoZG9jdW1lbnQuaWQoYSl8fGEpKTtpZighdGhpcy5vcHRpb25zLmNsb25lKXt0aGlzLm9wdGlvbnMucmV2ZXJ0PWZhbHNlO31pZih0aGlzLm9wdGlvbnMucmV2ZXJ0KXt0aGlzLmVmZmVjdD1uZXcgRnguTW9ycGgobnVsbCwkbWVyZ2Uoe2R1cmF0aW9uOjI1MCxsaW5rOiJjYW5jZWwifSx0aGlzLm9wdGlvbnMucmV2ZXJ0KSk7Cn19LGF0dGFjaDpmdW5jdGlvbigpe3RoaXMuYWRkTGlzdHModGhpcy5saXN0cyk7cmV0dXJuIHRoaXM7fSxkZXRhY2g6ZnVuY3Rpb24oKXt0aGlzLmxpc3RzPXRoaXMucmVtb3ZlTGlzdHModGhpcy5saXN0cyk7cmV0dXJuIHRoaXM7fSxhZGRJdGVtczpmdW5jdGlvbigpe0FycmF5LmZsYXR0ZW4oYXJndW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGEpe3RoaXMuZWxlbWVudHMucHVzaChhKTsKdmFyIGI9YS5yZXRyaWV2ZSgic29ydGFibGVzOnN0YXJ0Iix0aGlzLnN0YXJ0LmJpbmRXaXRoRXZlbnQodGhpcyxhKSk7KHRoaXMub3B0aW9ucy5oYW5kbGU/YS5nZXRFbGVtZW50KHRoaXMub3B0aW9ucy5oYW5kbGUpfHxhOmEpLmFkZEV2ZW50KCJtb3VzZWRvd24iLGIpOwp9LHRoaXMpO3JldHVybiB0aGlzO30sYWRkTGlzdHM6ZnVuY3Rpb24oKXtBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykuZWFjaChmdW5jdGlvbihhKXt0aGlzLmxpc3RzLnB1c2goYSk7dGhpcy5hZGRJdGVtcyhhLmdldENoaWxkcmVuKCkpO30sdGhpcyk7cmV0dXJuIHRoaXM7Cn0scmVtb3ZlSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gJCQoQXJyYXkuZmxhdHRlbihhcmd1bWVudHMpLm1hcChmdW5jdGlvbihhKXt0aGlzLmVsZW1lbnRzLmVyYXNlKGEpO3ZhciBiPWEucmV0cmlldmUoInNvcnRhYmxlczpzdGFydCIpOyh0aGlzLm9wdGlvbnMuaGFuZGxlP2EuZ2V0RWxlbWVudCh0aGlzLm9wdGlvbnMuaGFuZGxlKXx8YTphKS5yZW1vdmVFdmVudCgibW91c2Vkb3duIixiKTsKcmV0dXJuIGE7fSx0aGlzKSk7fSxyZW1vdmVMaXN0czpmdW5jdGlvbigpe3JldHVybiAkJChBcnJheS5mbGF0dGVuKGFyZ3VtZW50cykubWFwKGZ1bmN0aW9uKGEpe3RoaXMubGlzdHMuZXJhc2UoYSk7dGhpcy5yZW1vdmVJdGVtcyhhLmdldENoaWxkcmVuKCkpO3JldHVybiBhOwp9LHRoaXMpKTt9LGdldENsb25lOmZ1bmN0aW9uKGIsYSl7aWYoIXRoaXMub3B0aW9ucy5jbG9uZSl7cmV0dXJuIG5ldyBFbGVtZW50KCJkaXYiKS5pbmplY3QoZG9jdW1lbnQuYm9keSk7fWlmKCR0eXBlKHRoaXMub3B0aW9ucy5jbG9uZSk9PSJmdW5jdGlvbiIpe3JldHVybiB0aGlzLm9wdGlvbnMuY2xvbmUuY2FsbCh0aGlzLGIsYSx0aGlzLmxpc3QpOwp9dmFyIGM9YS5jbG9uZSh0cnVlKS5zZXRTdHlsZXMoe21hcmdpbjoiMHB4Iixwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsd2lkdGg6YS5nZXRTdHlsZSgid2lkdGgiKX0pO2lmKGMuZ2V0KCJodG1sIikudGVzdCgicmFkaW8iKSl7Yy5nZXRFbGVtZW50cygiaW5wdXRbdHlwZT1yYWRpb10iKS5lYWNoKGZ1bmN0aW9uKGQsZSl7ZC5zZXQoIm5hbWUiLCJjbG9uZV8iK2UpOwp9KTt9cmV0dXJuIGMuaW5qZWN0KHRoaXMubGlzdCkuc2V0UG9zaXRpb24oYS5nZXRQb3NpdGlvbihhLmdldE9mZnNldFBhcmVudCgpKSk7fSxnZXREcm9wcGFibGVzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5saXN0LmdldENoaWxkcmVuKCk7aWYoIXRoaXMub3B0aW9ucy5jb25zdHJhaW4pe2E9dGhpcy5saXN0cy5jb25jYXQoYSkuZXJhc2UodGhpcy5saXN0KTsKfXJldHVybiBhLmVyYXNlKHRoaXMuY2xvbmUpLmVyYXNlKHRoaXMuZWxlbWVudCk7fSxpbnNlcnQ6ZnVuY3Rpb24oYyxiKXt2YXIgYT0iaW5zaWRlIjtpZih0aGlzLmxpc3RzLmNvbnRhaW5zKGIpKXt0aGlzLmxpc3Q9Yjt0aGlzLmRyYWcuZHJvcHBhYmxlcz10aGlzLmdldERyb3BwYWJsZXMoKTsKfWVsc2V7YT10aGlzLmVsZW1lbnQuZ2V0QWxsUHJldmlvdXMoKS5jb250YWlucyhiKT8iYmVmb3JlIjoiYWZ0ZXIiO310aGlzLmVsZW1lbnQuaW5qZWN0KGIsYSk7dGhpcy5maXJlRXZlbnQoInNvcnQiLFt0aGlzLmVsZW1lbnQsdGhpcy5jbG9uZV0pO30sc3RhcnQ6ZnVuY3Rpb24oYixhKXtpZighdGhpcy5pZGxlKXtyZXR1cm47Cn10aGlzLmlkbGU9ZmFsc2U7dGhpcy5lbGVtZW50PWE7dGhpcy5vcGFjaXR5PWEuZ2V0KCJvcGFjaXR5Iik7dGhpcy5saXN0PWEuZ2V0UGFyZW50KCk7dGhpcy5jbG9uZT10aGlzLmdldENsb25lKGIsYSk7dGhpcy5kcmFnPW5ldyBEcmFnLk1vdmUodGhpcy5jbG9uZSx7c25hcDp0aGlzLm9wdGlvbnMuc25hcCxjb250YWluZXI6dGhpcy5vcHRpb25zLmNvbnN0cmFpbiYmdGhpcy5lbGVtZW50LmdldFBhcmVudCgpLGRyb3BwYWJsZXM6dGhpcy5nZXREcm9wcGFibGVzKCksb25TbmFwOmZ1bmN0aW9uKCl7Yi5zdG9wKCk7CnRoaXMuY2xvbmUuc2V0U3R5bGUoInZpc2liaWxpdHkiLCJ2aXNpYmxlIik7dGhpcy5lbGVtZW50LnNldCgib3BhY2l0eSIsdGhpcy5vcHRpb25zLm9wYWNpdHl8fDApO3RoaXMuZmlyZUV2ZW50KCJzdGFydCIsW3RoaXMuZWxlbWVudCx0aGlzLmNsb25lXSk7fS5iaW5kKHRoaXMpLG9uRW50ZXI6dGhpcy5pbnNlcnQuYmluZCh0aGlzKSxvbkNhbmNlbDp0aGlzLnJlc2V0LmJpbmQodGhpcyksb25Db21wbGV0ZTp0aGlzLmVuZC5iaW5kKHRoaXMpfSk7CnRoaXMuY2xvbmUuaW5qZWN0KHRoaXMuZWxlbWVudCwiYmVmb3JlIik7dGhpcy5kcmFnLnN0YXJ0KGIpO30sZW5kOmZ1bmN0aW9uKCl7dGhpcy5kcmFnLmRldGFjaCgpO3RoaXMuZWxlbWVudC5zZXQoIm9wYWNpdHkiLHRoaXMub3BhY2l0eSk7aWYodGhpcy5lZmZlY3Qpe3ZhciBhPXRoaXMuZWxlbWVudC5nZXRTdHlsZXMoIndpZHRoIiwiaGVpZ2h0Iik7CnZhciBiPXRoaXMuY2xvbmUuY29tcHV0ZVBvc2l0aW9uKHRoaXMuZWxlbWVudC5nZXRQb3NpdGlvbih0aGlzLmNsb25lLm9mZnNldFBhcmVudCkpO3RoaXMuZWZmZWN0LmVsZW1lbnQ9dGhpcy5jbG9uZTt0aGlzLmVmZmVjdC5zdGFydCh7dG9wOmIudG9wLGxlZnQ6Yi5sZWZ0LHdpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0LG9wYWNpdHk6MC4yNX0pLmNoYWluKHRoaXMucmVzZXQuYmluZCh0aGlzKSk7Cn1lbHNle3RoaXMucmVzZXQoKTt9fSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaWRsZT10cnVlO3RoaXMuY2xvbmUuZGVzdHJveSgpO3RoaXMuZmlyZUV2ZW50KCJjb21wbGV0ZSIsdGhpcy5lbGVtZW50KTt9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3ZhciBjPUFycmF5LmxpbmsoYXJndW1lbnRzLHttb2RpZmllcjpGdW5jdGlvbi50eXBlLGluZGV4OiRkZWZpbmVkfSk7CnZhciBiPXRoaXMubGlzdHMubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBkLmdldENoaWxkcmVuKCkubWFwKGMubW9kaWZpZXJ8fGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldCgiaWQiKTt9LHRoaXMpO30sdGhpcyk7dmFyIGE9Yy5pbmRleDtpZih0aGlzLmxpc3RzLmxlbmd0aD09MSl7YT0wOwp9cmV0dXJuICRjaGsoYSkmJmE+PTAmJmE8dGhpcy5saXN0cy5sZW5ndGg/YlthXTpiO319KTsoZnVuY3Rpb24oKXt2YXIgYT1mdW5jdGlvbihjLGIpe3JldHVybihjKT8oJHR5cGUoYyk9PSJmdW5jdGlvbiI/YyhiKTpiLmdldChjKSk6IiI7fTt0aGlzLlRpcHM9bmV3IENsYXNzKHtJbXBsZW1lbnRzOltFdmVudHMsT3B0aW9uc10sb3B0aW9uczp7b25TaG93OmZ1bmN0aW9uKCl7dGhpcy50aXAuc2V0U3R5bGUoImRpc3BsYXkiLCJibG9jayIpOwp9LG9uSGlkZTpmdW5jdGlvbigpe3RoaXMudGlwLnNldFN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO30sdGl0bGU6InRpdGxlIix0ZXh0OmZ1bmN0aW9uKGIpe3JldHVybiBiLmdldCgicmVsIil8fGIuZ2V0KCJocmVmIik7fSxzaG93RGVsYXk6MTAwLGhpZGVEZWxheToxMDAsY2xhc3NOYW1lOiJ0aXAtd3JhcCIsb2Zmc2V0Ont4OjE2LHk6MTZ9LHdpbmRvd1BhZGRpbmc6e3g6MCx5OjB9LGZpeGVkOmZhbHNlfSxpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGI9QXJyYXkubGluayhhcmd1bWVudHMse29wdGlvbnM6T2JqZWN0LnR5cGUsZWxlbWVudHM6JGRlZmluZWR9KTsKdGhpcy5zZXRPcHRpb25zKGIub3B0aW9ucyk7aWYoYi5lbGVtZW50cyl7dGhpcy5hdHRhY2goYi5lbGVtZW50cyk7fXRoaXMuY29udGFpbmVyPW5ldyBFbGVtZW50KCJkaXYiLHsiY2xhc3MiOiJ0aXAifSk7fSx0b0VsZW1lbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLnRpcCl7cmV0dXJuIHRoaXMudGlwOwp9cmV0dXJuIHRoaXMudGlwPW5ldyBFbGVtZW50KCJkaXYiLHsiY2xhc3MiOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsc3R5bGVzOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MH19KS5hZG9wdChuZXcgRWxlbWVudCgiZGl2Iix7ImNsYXNzIjoidGlwLXRvcCJ9KSx0aGlzLmNvbnRhaW5lcixuZXcgRWxlbWVudCgiZGl2Iix7ImNsYXNzIjoidGlwLWJvdHRvbSJ9KSkuaW5qZWN0KGRvY3VtZW50LmJvZHkpOwp9LGF0dGFjaDpmdW5jdGlvbihiKXskJChiKS5lYWNoKGZ1bmN0aW9uKGQpe3ZhciBmPWEodGhpcy5vcHRpb25zLnRpdGxlLGQpLGU9YSh0aGlzLm9wdGlvbnMudGV4dCxkKTtkLmVyYXNlKCJ0aXRsZSIpLnN0b3JlKCJ0aXA6bmF0aXZlIixmKS5yZXRyaWV2ZSgidGlwOnRpdGxlIixmKTsKZC5yZXRyaWV2ZSgidGlwOnRleHQiLGUpO3RoaXMuZmlyZUV2ZW50KCJhdHRhY2giLFtkXSk7dmFyIGM9WyJlbnRlciIsImxlYXZlIl07aWYoIXRoaXMub3B0aW9ucy5maXhlZCl7Yy5wdXNoKCJtb3ZlIik7fWMuZWFjaChmdW5jdGlvbihoKXt2YXIgZz1kLnJldHJpZXZlKCJ0aXA6IitoKTsKaWYoIWcpe2c9dGhpc1siZWxlbWVudCIraC5jYXBpdGFsaXplKCldLmJpbmRXaXRoRXZlbnQodGhpcyxkKTt9ZC5zdG9yZSgidGlwOiIraCxnKS5hZGRFdmVudCgibW91c2UiK2gsZyk7fSx0aGlzKTt9LHRoaXMpO3JldHVybiB0aGlzO30sZGV0YWNoOmZ1bmN0aW9uKGIpeyQkKGIpLmVhY2goZnVuY3Rpb24oZCl7WyJlbnRlciIsImxlYXZlIiwibW92ZSJdLmVhY2goZnVuY3Rpb24oZSl7ZC5yZW1vdmVFdmVudCgibW91c2UiK2UsZC5yZXRyaWV2ZSgidGlwOiIrZSkpLmVsaW1pbmF0ZSgidGlwOiIrZSk7Cn0pO3RoaXMuZmlyZUV2ZW50KCJkZXRhY2giLFtkXSk7aWYodGhpcy5vcHRpb25zLnRpdGxlPT0idGl0bGUiKXt2YXIgYz1kLnJldHJpZXZlKCJ0aXA6bmF0aXZlIik7aWYoYyl7ZC5zZXQoInRpdGxlIixjKTt9fX0sdGhpcyk7cmV0dXJuIHRoaXM7fSxlbGVtZW50RW50ZXI6ZnVuY3Rpb24oYyxiKXt0aGlzLmNvbnRhaW5lci5lbXB0eSgpOwpbInRpdGxlIiwidGV4dCJdLmVhY2goZnVuY3Rpb24oZSl7dmFyIGQ9Yi5yZXRyaWV2ZSgidGlwOiIrZSk7aWYoZCl7dGhpcy5maWxsKG5ldyBFbGVtZW50KCJkaXYiLHsiY2xhc3MiOiJ0aXAtIitlfSkuaW5qZWN0KHRoaXMuY29udGFpbmVyKSxkKTt9fSx0aGlzKTskY2xlYXIodGhpcy50aW1lcik7CnRoaXMudGltZXI9KGZ1bmN0aW9uKCl7dGhpcy5zaG93KHRoaXMsYik7dGhpcy5wb3NpdGlvbigodGhpcy5vcHRpb25zLmZpeGVkKT97cGFnZTpiLmdldFBvc2l0aW9uKCl9OmMpO30pLmRlbGF5KHRoaXMub3B0aW9ucy5zaG93RGVsYXksdGhpcyk7fSxlbGVtZW50TGVhdmU6ZnVuY3Rpb24oYyxiKXskY2xlYXIodGhpcy50aW1lcik7CnRoaXMudGltZXI9dGhpcy5oaWRlLmRlbGF5KHRoaXMub3B0aW9ucy5oaWRlRGVsYXksdGhpcyxiKTt0aGlzLmZpcmVGb3JQYXJlbnQoYyxiKTt9LGZpcmVGb3JQYXJlbnQ6ZnVuY3Rpb24oYyxiKXtiPWIuZ2V0UGFyZW50KCk7aWYoIWJ8fGI9PWRvY3VtZW50LmJvZHkpe3JldHVybjsKfWlmKGIucmV0cmlldmUoInRpcDplbnRlciIpKXtiLmZpcmVFdmVudCgibW91c2VlbnRlciIsYyk7fWVsc2V7dGhpcy5maXJlRm9yUGFyZW50KGMsYik7fX0sZWxlbWVudE1vdmU6ZnVuY3Rpb24oYyxiKXt0aGlzLnBvc2l0aW9uKGMpO30scG9zaXRpb246ZnVuY3Rpb24oZSl7aWYoIXRoaXMudGlwKXtkb2N1bWVudC5pZCh0aGlzKTsKfXZhciBjPXdpbmRvdy5nZXRTaXplKCksYj13aW5kb3cuZ2V0U2Nyb2xsKCksZj17eDp0aGlzLnRpcC5vZmZzZXRXaWR0aCx5OnRoaXMudGlwLm9mZnNldEhlaWdodH0sZD17eDoibGVmdCIseToidG9wIn0sZz17fTtmb3IodmFyIGggaW4gZCl7Z1tkW2hdXT1lLnBhZ2VbaF0rdGhpcy5vcHRpb25zLm9mZnNldFtoXTsKaWYoKGdbZFtoXV0rZltoXS1iW2hdKT5jW2hdLXRoaXMub3B0aW9ucy53aW5kb3dQYWRkaW5nW2hdKXtnW2RbaF1dPWUucGFnZVtoXS10aGlzLm9wdGlvbnMub2Zmc2V0W2hdLWZbaF07fX10aGlzLnRpcC5zZXRTdHlsZXMoZyk7fSxmaWxsOmZ1bmN0aW9uKGIsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXtiLnNldCgiaHRtbCIsYyk7Cn1lbHNle2IuYWRvcHQoYyk7fX0sc2hvdzpmdW5jdGlvbihiKXtpZighdGhpcy50aXApe2RvY3VtZW50LmlkKHRoaXMpO310aGlzLmZpcmVFdmVudCgic2hvdyIsW3RoaXMudGlwLGJdKTt9LGhpZGU6ZnVuY3Rpb24oYil7aWYoIXRoaXMudGlwKXtkb2N1bWVudC5pZCh0aGlzKTsKfXRoaXMuZmlyZUV2ZW50KCJoaWRlIixbdGhpcy50aXAsYl0pO319KTt9KSgpOw==]]></data>
	</file>
	<file>
	  <filename>/planyo-jquery-reservations.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gJElkJAoKdmFyIHBsYW55b19zZXR0aW5ncyA9IHdpbmRvdzsKalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShpbml0X3BsYW55byk7CgpmdW5jdGlvbiBwbGFueW8kKHgpIHsKICByZXR1cm4galF1ZXJ5KHgpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X3BhcmFtKG5hbWUpIHsKICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fb3ZlcnJpZGVzKSAmJiB3aW5kb3cucGxhbnlvX292ZXJyaWRlc1tuYW1lXSkKICAgIHJldHVybiB3aW5kb3cucGxhbnlvX292ZXJyaWRlc1tuYW1lXTsKICBuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFtdLywiXFxcWyIpLnJlcGxhY2UoL1tcXV0vLCJcXFxdIik7CiAgdmFyIHJlZ2V4UyA9ICJbXFw/Jl0iK25hbWUrIj0oW14mI10qKSI7CiAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFMpOwogIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgaWYgKHJlc3VsdHMgPT0gbnVsbCkKICAgIHJldHVybiBudWxsOwogIGVsc2UKICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0c1sxXSkucmVwbGFjZSgvXCsvZywgJyAnKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9mb3JtX2RhdGEob2JqKSB7CiAgdmFyIGdldHN0ciA9ICIiOwogIHJldHVybiBvYmouc2VyaWFsaXplKCk7Cn0KCmZ1bmN0aW9uIHBsYW55b19vbl9yZXNlcnZhdGlvbl9zdWNjZXNzKHJlc2VydmF0aW9uX2lkLCB1c2VyX3RleHQpIHsKICBqUXVlcnkoJyNwbGFueW9fY29udGVudCcpLmNoaWxkcmVuKCkuY3NzKCdkaXNwbGF5Jywnbm9uZScpOwogIGpRdWVyeSgnI3Jlc19lcnJvcl9tc2cnKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgalF1ZXJ5KCcjcmVzX29rX21zZycpLmNzcygnZGlzcGxheScsJ2lubGluZScpOwogIGpRdWVyeSgnI3Jlc2VydmVfZm9ybScpLmNzcygnZGlzcGxheScsJ25vbmUnKTsKICBqUXVlcnkoJyNwcm9kdWN0X2Zvcm0nKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgalF1ZXJ5KCcjcHJpY2VfaW5mb19kaXYnKS5jc3MoJ2Rpc3BsYXknLCdub25lJyk7CiAgaWYgKHJlc2VydmF0aW9uX2lkICYmIHVzZXJfdGV4dC5pbmRleE9mICgiPCEtLSBTSE9XX0FERElUSU9OQUxfUFJPRFVDVFMgLS0+IikgIT0gLTEpIHsKICAgIHBsYW55b19lbWJlZF9hZGRpdGlvbmFsX3Byb2R1Y3RzX2Zvcm0ocmVzZXJ2YXRpb25faWQpOwogIH0KICBlbHNlIHsKICAgIGpRdWVyeSgnI3Jlc19va19tc2cnKS5odG1sKHVzZXJfdGV4dCk7CiAgICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQpKSB7CiAgICAgIGRvY3VtZW50LnJlc2VydmF0aW9uX2lkID0gcmVzZXJ2YXRpb25faWQ7CiAgICAgIHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQoJ3Jlc2VydmF0aW9uX2RvbmUnKTsKICAgIH0KICB9Cn0KIApmdW5jdGlvbiBwbGFueW9fb25fcmVzZXJ2YXRpb25fZmFpbHVyZShlcnJvcl90ZXh0KSB7CiAgIHZhciBlcnJvcl9kaXYgPSBqUXVlcnkoJyNyZXNfZXJyb3JfbXNnJyk7CiAgIGVycm9yX2Rpdi5jc3MoJ2Rpc3BsYXknLCdibG9jaycpOwogICBlcnJvcl9kaXYuaHRtbChlcnJvcl90ZXh0KyI8cD4iKTsKICAgalF1ZXJ5KHdpbmRvdykuc2Nyb2xsVG9wKDApOwogICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQpKSB7CiAgICAgd2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZCgncmVzZXJ2YXRpb25fZmFpbHVyZScpOwogICB9Cn0KIApmdW5jdGlvbiBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkgewogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdmZWVkYmFja191cmwnKSkKICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQocGxhbnlvX2dldF9wYXJhbSgnZmVlZGJhY2tfdXJsJykpOwogIGVsc2UKICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpOwp9CgpmdW5jdGlvbiBwbGFueW9fc2hvd19ob3VyZ2xhc3MoaGlkZV9lbGVtZW50KSB7CiAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9wZW5kaW5nID0gdHJ1ZTsKICBpZiAoaGlkZV9lbGVtZW50ICYmIGhpZGVfZWxlbWVudC5sZW5ndGggPiAwKSB7CiAgICBkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudCA9IGhpZGVfZWxlbWVudDsKICAgIGhpZGVfZWxlbWVudC5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwogICAgaGlkZV9lbGVtZW50LmJlZm9yZSgiPGRpdiBpZD0naG91cmdsYXNzX2VsZW1lbnQnPjxkaXYgY2xhc3M9J2hvdXJnbGFzc19pbWcnPjwvZGl2PjwvZGl2PiIpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2hpZGVfaG91cmdsYXNzKCkgewogIGlmIChkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX3BlbmRpbmcpIHsKICAgIGlmIChkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudCAmJiBkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudC5sZW5ndGggPiAwKSB7CiAgICAgIGRvY3VtZW50LnBsYW55b19hamF4X2NhbGxfaGlkZV9lbGVtZW50LmNzcygnZGlzcGxheScsICdpbmxpbmUnKTsKICAgICAgalF1ZXJ5KCcjaG91cmdsYXNzX2VsZW1lbnQnKS5yZW1vdmUoKTsKICAgICAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9oaWRlX2VsZW1lbnQgPSBudWxsOwogICAgfQogICAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9wZW5kaW5nID0gZmFsc2U7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fb25fcmVxdWVzdF9mYWlsdXJlKCkgewogIHBsYW55b19oaWRlX2hvdXJnbGFzcygpOwogIHZhciBlcnJvcl9kaXYgPSBqUXVlcnkoJyNyZXNfZXJyb3JfbXNnJyk7CiAgZXJyb3JfZGl2LmNzcygnZGlzcGxheScsICdibG9jaycpOwogIGVycm9yX2Rpdi5odG1sKCJVbmtub3duIGVycm9yIGluICIgKyBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQgKyAiPHA+Iik7Cn0KCmZ1bmN0aW9uIHBsYW55b191bnNlcmlhbGl6ZSh1cmwpIHsKICB2YXIgcGFyYW1zID0gdXJsOwogIGlmICh1cmwubWF0Y2goL1w/KC4rKSQvKSkgewogICAgICBwYXJhbXMgPSBSZWdFeHAuJDE7CiAgfQogIHZhciBwQXJyYXkgPSBwYXJhbXMuc3BsaXQoIiYiKTsKICB2YXIgcEhhc2ggPSB7fTsKICBmb3IodmFyIGkgPSAwOyBpIDwgcEFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgdGVtcCA9IHBBcnJheVtpXS5zcGxpdCgiPSIpOwogICAgaWYgKHRlbXBbMF0gIT0gJ3EnIHx8ICF3aW5kb3cuRHJ1cGFsKQogICAgICBwSGFzaFt0ZW1wWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudCh0ZW1wWzFdKS5yZXBsYWNlKC9cKy9nLCAnICcpOwogIH0KICByZXR1cm4gcEhhc2g7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfY29va2llKGNfbmFtZSkgewogIGlmIChkb2N1bWVudC5jb29raWUubGVuZ3RoID4gMCkgewogICAgY19zdGFydCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKGNfbmFtZSArICI9Iik7CiAgICBpZiAoY19zdGFydCAhPSAtMSkgewogICAgICBjX3N0YXJ0ID0gY19zdGFydCArIGNfbmFtZS5sZW5ndGgrMTsKICAgICAgY19lbmQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZigiOyIsIGNfc3RhcnQpOwogICAgICBpZiAoY19lbmQgPT0gLTEpIAogICAgICAgIGNfZW5kID0gZG9jdW1lbnQuY29va2llLmxlbmd0aDsKICAgICAgcmV0dXJuIHVuZXNjYXBlKGRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcoY19zdGFydCwgY19lbmQpKTsKICAgIH0KICB9CiAgcmV0dXJuICIiOwp9CgpmdW5jdGlvbiBwbGFueW9fc2VuZF9yZXF1ZXN0KGRhdGEsIG9uX2NvbXBsZXRlX2Z1bmN0aW9uLCBoaWRlX2l0ZW0pIHsKICBwbGFueW9fc2hvd19ob3VyZ2xhc3MoaGlkZV9pdGVtKTsKICB2YXIgcmVxX2RhdGEgPSBkYXRhOwogIGlmIChyZXFfZGF0YS5pbmRleE9mKCdmZWVkYmFja191cmw9JykgPT0gLTEpCiAgICByZXFfZGF0YSArPSAiJmZlZWRiYWNrX3VybD0iICsgcGxhbnlvX2dldF9jdXJyZW50X3VybCgpOwogIGlmIChyZXFfZGF0YS5pbmRleE9mKCd1bGFwX3VybD0nKSA9PSAtMSkKICAgIHJlcV9kYXRhICs9ICImdWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCI7CiAgaWYgKHBsYW55b19zZXR0aW5ncy5wbGFueW9fbGFuZ3VhZ2UpCiAgICByZXFfZGF0YSArPSAiJmxhbmd1YWdlPSIgKyBwbGFueW9fc2V0dGluZ3MucGxhbnlvX2xhbmd1YWdlLnRvVXBwZXJDYXNlKCk7CiAgdmFyIHNob3BwaW5nX2NhcnRfaWQgPSBwbGFueW9fZ2V0X2Nvb2tpZSgncGxhbnlvX2NhcnRfaWQnKTsKICBpZiAoc2hvcHBpbmdfY2FydF9pZCAmJiByZXFfZGF0YS5pbmRleE9mKCdjYXJ0X2lkPScpID09IC0xKQogICAgcmVxX2RhdGEgKz0gIiZjYXJ0X2lkPSIgKyBzaG9wcGluZ19jYXJ0X2lkICsgIiZmaXJzdF9yZXNlcnZhdGlvbl9pZD0iICsgcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19maXJzdF9yZXNlcnZhdGlvbl9pZCcpOwogIHJlcV9kYXRhICs9ICImdXNlcl9hZ2VudD0iICsgbmF2aWdhdG9yLnVzZXJBZ2VudDsKICB2YXIgcmVxX2RhdGFfYXJyID0gcGxhbnlvX3Vuc2VyaWFsaXplKHJlcV9kYXRhKTsKICBqUXVlcnkucG9zdChwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQsIHJlcV9kYXRhX2FyciwKCSAgICBmdW5jdGlvbihkYXRhLCBzdGF0dXMpIHsKCSAgICAgIGlmIChzdGF0dXMgPT0gInN1Y2Nlc3MiKQoJCW9uX2NvbXBsZXRlX2Z1bmN0aW9uKGRhdGEpOwoJICAgICAgZWxzZQoJCXBsYW55b19vbl9yZXF1ZXN0X2ZhaWx1cmUoKTsKCSB9LCAnanNvbicpOwp9CgpmdW5jdGlvbiBwbGFueW9fb25fY29tcGxldGVfc2hvd19zdGF0dXModHh0KSB7CiAgalF1ZXJ5KCcjcGxhbnlvX2NvbnRlbnQnKS5odG1sKCIiKTsKICBwbGFueW9faGlkZV9ob3VyZ2xhc3MoKTsKICB2YXIgb2JqID0gKHR4dCAmJiB0eXBlb2YgdHh0ID09ICdvYmplY3QnKSA/IHR4dCA6IGpRdWVyeS5wYXJzZUpTT04odHh0KTsKICBpZiAoIW9iaikgCiAgICByZXR1cm47CiAgdmFyIGNvZGUgPSBvYmpbJ3Jlc3BvbnNlX2NvZGUnXTsKICBpZiAoY29kZSA9PSAwKSB7CiAgICAvLyBzdWNjZXNzCiAgICB2YXIgb2tfZGl2ID0galF1ZXJ5KCcjcmVzX29rX21zZycpOwogICAgaWYgKCFva19kaXYgfHwgb2tfZGl2Lmxlbmd0aCA9PSAwKSB7CiAgICAgIGpRdWVyeSgnI3BsYW55b19jb250ZW50JykuYXBwZW5kKCI8ZGl2IGlkPSdyZXNfb2tfbXNnJz48L2Rpdj4iKTsKICAgICAgb2tfZGl2ID0galF1ZXJ5KCcjcmVzX29rX21zZycpOwogICAgfQogICAgb2tfZGl2LmNzcygnZGlzcGxheScsICdpbmxpbmUnKTsKICAgIG9rX2Rpdi5odG1sKG9ialsnZGF0YSddWyd1c2VyX3RleHQnXSk7CgogICAgaWYgKHBsYW55b19pc3NldChvYmosICdkYXRhJywgJ3JlZGlyZWN0X2xvY2F0aW9uJykpCiAgICAgIGV2YWwob2JqWydkYXRhJ11bJ3JlZGlyZWN0X2xvY2F0aW9uJ10pOwoKICAgIGlmIChwbGFueW9faXNzZXQod2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZCkpCiAgICAgIHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQocGxhbnlvX2dldF9wYXJhbSgnbW9kZScpKTsKICB9CiAgZWxzZSB7CiAgICB2YXIgZXJyb3JfZGl2ID0galF1ZXJ5KCcjcmVzX2Vycm9yX21zZycpOwogICAgaWYgKCFlcnJvcl9kaXYgfHwgZXJyb3JfZGl2Lmxlbmd0aCA9PSAwKSB7CiAgICAgIGpRdWVyeSgnI3BsYW55b19jb250ZW50JykuYXBwZW5kKCI8ZGl2IGlkPSdyZXNfZXJyb3JfbXNnJz48L2Rpdj4iKTsKICAgICAgZXJyb3JfZGl2ID0galF1ZXJ5KCcjcmVzX2Vycm9yX21zZycpOwogICAgfQogICAgZXJyb3JfZGl2LmNzcygnZGlzcGxheScsICdibG9jaycpOwogICAgZXJyb3JfZGl2Lmh0bWwob2JqWydyZXNwb25zZV9tZXNzYWdlJ10pOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2luaXRfY2FuY2VsX21vZGUoKSB7CiAgcGxhbnlvX3NlbmRfcmVxdWVzdCgibW9kZT1jYW5jZWwmYz0iICsgcGxhbnlvX2dldF9wYXJhbSgnYycpICsgIiZ1c2VyX2lkPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCd1c2VyX2lkJykgKyAiJnNpdGVfaWQ9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCArICImcmVzZXJ2YXRpb25faWQ9IiArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJykgKyAiJnJlc291cmNlX2lkPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpICsgIiZyZWFzb249IiArIHBsYW55b19nZXRfcGFyYW0oJ3JlYXNvbicpLCBwbGFueW9fb25fY29tcGxldGVfc2hvd19zdGF0dXMsIG51bGwpOwp9CgpmdW5jdGlvbiBwbGFueW9faW5pdF92ZXJpZnlfZW1haWxfbW9kZSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0KCJtb2RlPXZlcmlmeV9lbWFpbCZ2ZXJpZmljYXRpb25fY29kZT0iICsgcGxhbnlvX2dldF9wYXJhbSgndmVyaWZpY2F0aW9uX2NvZGUnKSArICImc2l0ZV9pZD0iICsgcGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkICsgIiZyZXNlcnZhdGlvbl9pZD0iICsgcGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSwgcGxhbnlvX29uX2NvbXBsZXRlX3Nob3dfc3RhdHVzLCBudWxsKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2luaXRfcGF5bWVudF9jb25maXJtYXRpb25fbW9kZSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0KCJtb2RlPXBheW1lbnRfY29uZmlybWF0aW9uJnJlc2VydmF0aW9uX2lkPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCdyZXNlcnZhdGlvbl9pZCcpICsgIiZzaXRlX2lkPSIgKyBwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQsIHBsYW55b19vbl9jb21wbGV0ZV9zaG93X3N0YXR1cywgbnVsbCk7Cn0KIApmdW5jdGlvbiBwbGFueW9fb25fcmVzZXJ2YXRpb25fY29tcGxldGUodHh0KSB7CiAgcGxhbnlvX2hpZGVfaG91cmdsYXNzKCk7CgogIHZhciBvYmogPSBudWxsOwogIHRyeSB7CiAgICBvYmogPSAodHh0ICYmIHR5cGVvZiB0eHQgPT0gJ29iamVjdCcpID8gdHh0IDogalF1ZXJ5LnBhcnNlSlNPTih0eHQpOwogIH0KICBjYXRjaChlcnIpIHsKICB9CiAgaWYgKCFvYmopIHsKICAgIHBsYW55b19vbl9yZXNlcnZhdGlvbl9mYWlsdXJlKCdVbmtub3duIHJlc2VydmF0aW9uIGVycm9yOiAnICsgdHh0KTsKICAgIHJldHVybjsKICB9CgogIHZhciBjb2RlID0gb2JqWydyZXNwb25zZV9jb2RlJ107CiAgaWYgKGNvZGUgPT0gMCkgewogICAgLy8gc3VjY2VzcwogICAgcGxhbnlvX29uX3Jlc2VydmF0aW9uX3N1Y2Nlc3Mob2JqWydkYXRhJ11bJ3Jlc2VydmF0aW9uX2lkJ10sIG9ialsnZGF0YSddWyd1c2VyX3RleHQnXSk7CiAgfQogIGVsc2UgewogICAgcGxhbnlvX29uX3Jlc2VydmF0aW9uX2ZhaWx1cmUob2JqWydyZXNwb25zZV9tZXNzYWdlJ10pOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX3NlbmRfcmVzZXJ2YXRpb25fZm9ybSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0KCJtb2RlPW1ha2VfcmVzZXJ2YXRpb24mc2l0ZV9pZD0iICsgcGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkICsgIiYiICsgcGxhbnlvX2dldF9mb3JtX2RhdGEoalF1ZXJ5KCcjcmVzZXJ2ZV9mb3JtJykpLCBwbGFueW9fb25fcmVzZXJ2YXRpb25fY29tcGxldGUsIGpRdWVyeSgnI3N1Ym1pdF9idXR0b24nKSk7CiAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBwbGFueW9fc2VuZF9wcm9kdWN0X2Zvcm0oKSB7CiAgcGxhbnlvX3NlbmRfcmVxdWVzdCgibW9kZT1yZXNlcnZlX3Byb2R1Y3RzJnNpdGVfaWQ9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCArICImIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGpRdWVyeSgnI3Byb2R1Y3RfZm9ybScpKSwgcGxhbnlvX29uX3Jlc2VydmF0aW9uX2NvbXBsZXRlLCBqUXVlcnkoJyNzdWJtaXRfYnV0dG9uJykpOwogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX29uX3NlYXJjaF9zdWNjZXNzKHJlc3VsdHMpIHsKICBqUXVlcnkoJyNyZXNfZXJyb3JfbXNnJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsKICB2YXIgcmVzdWx0c19jb2RlID0gcmVzdWx0czsKCiAgalF1ZXJ5KCcjc2VhcmNoX3Jlc3VsdHMnKS5odG1sKHJlc3VsdHNfY29kZSk7Cn0KIApmdW5jdGlvbiBwbGFueW9fb25fc2VhcmNoX2ZhaWx1cmUoZXJyb3JfdGV4dCkgewogICB2YXIgZXJyb3JfZGl2ID0galF1ZXJ5KCcjcmVzX2Vycm9yX21zZycpOwogICBlcnJvcl9kaXYuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7CiAgIGVycm9yX2Rpdi5odG1sKGVycm9yX3RleHQgKyAnPHA+Jyk7CiAgIGpRdWVyeSgnI3NlYXJjaF9yZXN1bHRzJykuaHRtbCgnJyk7CiAgIGpRdWVyeSh3aW5kb3cpLnNjcm9sbFRvcCgwKTsKfQoKZnVuY3Rpb24gcGxhbnlvX29uX3NlYXJjaF9jb21wbGV0ZSh0eHQpIHsKICBwbGFueW9faGlkZV9ob3VyZ2xhc3MoKTsKICB2YXIgb2JqID0gbnVsbDsKICB0cnkgewogICAgb2JqID0gKHR4dCAmJiB0eXBlb2YgdHh0ID09ICdvYmplY3QnKSA/IHR4dCA6IGpRdWVyeS5wYXJzZUpTT04odHh0KTsKICB9CiAgY2F0Y2goZXJyKSB7CiAgfQogIGlmICghb2JqKSB7CiAgICBwbGFueW9fb25fc2VhcmNoX2ZhaWx1cmUoJ1Vua25vd24gc2VhcmNoIGVycm9yOiAnICsgdHh0KTsKICAgIHJldHVybjsKICB9CiAgdmFyIGNvZGUgPSBvYmpbJ3Jlc3BvbnNlX2NvZGUnXTsKICBpZiAoY29kZSA9PSAwKSB7CiAgICAvLyBzdWNjZXNzCiAgICBwbGFueW9fb25fc2VhcmNoX3N1Y2Nlc3Mob2JqWydkYXRhJ11bJ2NvZGUnXSk7CiAgfQogIGVsc2UgewogICAgcGxhbnlvX29uX3NlYXJjaF9mYWlsdXJlKG9ialsncmVzcG9uc2VfbWVzc2FnZSddKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX3NlYXJjaF9mb3JtKCkgewogIHBsYW55b19zZW5kX3JlcXVlc3QoIm1vZGU9cmVzb3VyY2Vfc2VhcmNoJm91dHB1dD1odG1sJnNpdGVfaWQ9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCArICImIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGpRdWVyeSgnI3NlYXJjaF9mb3JtJykpLCBwbGFueW9fb25fc2VhcmNoX2NvbXBsZXRlLCBqUXVlcnkoJyNzdWJtaXRfYnV0dG9uJykpOwogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2lzX3NwZWNpYWxfbW9kZShtb2RlKSB7CiAgcmV0dXJuIChtb2RlID09ICJ2ZXJpZnlfZW1haWwiIHx8IG1vZGUgPT0gInBheW1lbnRfY29uZmlybWF0aW9uIiB8fCBtb2RlID09ICJjYW5jZWwiIHx8IG1vZGUgPT0gImNhbmNlbF9jb2RlIiB8fCBtb2RlID09ICJyZXNlcnZhdGlvbl9kZXRhaWxzIiB8fCBtb2RlID09ICJwYXltZW50X2Zvcm0iIHx8IG1vZGUgPT0gInJlc2VydmF0aW9uX2xpc3QiIHx8IG1vZGUgPT0gInNob3dfY2FydCIgfHwgbW9kZSA9PSAiY2hlY2tvdXQiKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2luaXRfc3BlY2lhbF9tb2RlcygpIHsKICB2YXIgbW9kZSA9IHBsYW55b19nZXRfcGFyYW0oJ21vZGUnKTsKICBpZiAocGxhbnlvX2lzX3NwZWNpYWxfbW9kZShtb2RlKSkgewogICAgaWYgKG1vZGUgPT0gInZlcmlmeV9lbWFpbCIpIHsKICAgICAgcGxhbnlvX2luaXRfdmVyaWZ5X2VtYWlsX21vZGUoKTsKICAgIH0KICAgIGVsc2UgaWYgKG1vZGUgPT0gInBheW1lbnRfY29uZmlybWF0aW9uIikgewogICAgICBwbGFueW9faW5pdF9wYXltZW50X2NvbmZpcm1hdGlvbl9tb2RlKCk7CiAgICB9CiAgICBlbHNlIGlmIChtb2RlID09ICJjYW5jZWwiKSB7CiAgICAgIHBsYW55b19pbml0X2NhbmNlbF9tb2RlKCk7CiAgICB9CiAgICBlbHNlIGlmIChtb2RlID09ICdyZXNlcnZhdGlvbl9kZXRhaWxzJykgewogICAgICBwbGFueW9fZW1iZWRfcmVzZXJ2YXRpb25fZGV0YWlscyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQsIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ3VzZXJfaWQnKSk7CiAgICB9CiAgICBlbHNlIGlmIChtb2RlID09ICdyZXNlcnZhdGlvbl9saXN0JykgewogICAgICBwbGFueW9fZW1iZWRfcmVzZXJ2YXRpb25fbGlzdChwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQsIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ3VzZXJfaWQnKSk7CiAgICB9CiAgICBlbHNlIGlmIChtb2RlID09ICdjYW5jZWxfY29kZScpIHsKICAgICAgcGxhbnlvX2VtYmVkX2NhbmNlbF9jb2RlKHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSwgcGxhbnlvX2dldF9wYXJhbSgnYycpLCBwbGFueW9fZ2V0X3BhcmFtKCd1c2VyX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ3Jlc291cmNlX2lkJykpOwogICAgfQogICAgZWxzZSBpZiAobW9kZSA9PSAncGF5bWVudF9mb3JtJykgewogICAgICBwbGFueW9fZW1iZWRfcGF5bWVudF9mb3JtKHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSwgcGxhbnlvX2dldF9wYXJhbSgndXNlcl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdhdXRvX3JlZGlyZWN0JykpOwogICAgfQogICAgZWxzZSBpZiAobW9kZSA9PSAnc2hvd19jYXJ0JykgewogICAgICBwbGFueW9fZW1iZWRfY2FydF9jb2RlKHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgnY2FydF9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdmaXJzdF9yZXNlcnZhdGlvbl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdyZW1vdmVfcmVzZXJ2YXRpb25faWQnKSk7CiAgICB9CiAgICBlbHNlIGlmIChtb2RlID09ICdjaGVja291dCcpIHsKICAgICAgcGxhbnlvX2VtYmVkX2NoZWNrb3V0X2NvZGUocGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkLCBwbGFueW9fZ2V0X3BhcmFtKCdjYXJ0X2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ2ZpcnN0X3Jlc2VydmF0aW9uX2lkJykpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9waG9uZV9jb2RlcyhuYW1lKSB7CnJldHVybiAiPHNlbGVjdCBpZD0nIiArIG5hbWUgKyAiJyBuYW1lPSciICsgbmFtZSArICInID48b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSctMSc+LS0gQ291bnRyeSBjb2RlIC0tJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzkzJz5BZmdoYW5pc3RhbiAoOTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1NSc+QWxiYW5pYSAoMzU1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMTMnPkFsZ2VyaWEgKDIxMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzc2Jz5BbmRvcnJhICgzNzYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0NCc+QW5nb2xhICgyNDQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2NCc+QW5ndWlsbGEgKDI2NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjcyJz5BbnRhcmN0aWNhICg2NzIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU0Jz5BcmdlbnRpbmEgKDU0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzQnPkFybWVuaWEgKDM3NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjk3Jz5BcnViYSAoMjk3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2MSc+QXVzdHJhbGlhICg2MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDMnPkF1c3RyaWEgKDQzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5OTQnPkF6ZXJiYWlqYW4gKDk5NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQyJz5CYWhhbWFzICgyNDIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk3Myc+QmFocmFpbiAoOTczKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4ODAnPkJhbmdsYWRlc2ggKDg4MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQ2Jz5CYXJiYWRvcyAoMjQ2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzUnPkJlbGFydXMgKDM3NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzInPkJlbGdpdW0gKDMyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDEnPkJlbGl6ZSAoNTAxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0NDEnPkJlcm11ZGEgKDQ0MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTc1Jz5CaHV0YW4gKDk3NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTkxJz5Cb2xpdmlhICg1OTEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2Nyc+Qm90c3dhbmEgKDI2NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTUnPkJyYXppbCAoNTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3Myc+QnJ1bmVpICg2NzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1OSc+QnVsZ2FyaWEgKDM1OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjI2Jz5CdXJraW5hIEZhc28gKDIyNikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjU3Jz5CdXJ1bmRpICgyNTcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg1NSc+Q2FtYm9kaWEgKDg1NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjM3Jz5DYW1lcm9vbiAoMjM3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScxJz5DYW5hZGEgLyBVU0EgKDEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU2Jz5DaGlsZSAoNTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg2Jz5DaGluYSAoODYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU3Jz5Db2xvbWJpYSAoNTcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0Mic+Q29uZ28gKDI0MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjgyJz5Db29rIElzbGFuZHMgKDY4MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTA2Jz5Db3N0YSBSaWNhICg1MDYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM4NSc+Q3JvYXRpYSAoMzg1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1Myc+Q3ViYSAoNTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5OSc+Q3VyYWNhbyAoNTk5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTcnPkN5cHJ1cyAoMzU3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0MjAnPkN6ZWNoIFJlcHVibGljICg0MjApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ1Jz5EZW5tYXJrICg0NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQ2Jz5EaWVnbyBHYXJjaWEgKDI0NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjUzJz5Eamlib3V0aSAoMjUzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4MDknPkRvbWluaWNhICg4MDkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5Myc+RWN1YWRvciAoNTkzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMCc+RWd5cHQgKDIwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDMnPkVsIFNhbHZhZG9yICg1MDMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3Mic+RXN0b25pYSAoMzcyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyOTgnPkZhZXJvZSBJc2xhbmRzICgyOTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwMCc+RmFsa2xhbmQgKDUwMCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjc5Jz5GaWppIElzbGFuZHMgKDY3OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzU4Jz5GaW5sYW5kICgzNTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzMzJz5GcmFuY2UgKDMzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTYnPkFudGlsbGVzICAoNTk2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTQnPkd1aWFuYSAoNTk0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNDEnPkdhYm9uIFJlcHVibGljICgyNDEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyMCc+R2FtYmlhICgyMjApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk5NSc+R2VvcmdpYSAoOTk1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0OSc+R2VybWFueSAoNDkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIzMyc+R2hhbmEgKDIzMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzUwJz5HaWJyYWx0YXIgKDM1MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzAnPkdyZWVjZSAoMzApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI5OSc+R3JlZW5sYW5kICgyOTkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ3Myc+R3JlbmFkYSAoNDczKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTAnPkd1YWRlbG91cGUgKDU5MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjcxJz5HdWFtICg2NzEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwMic+R3VhdGVtYWxhICg1MDIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5Mic+R3V5YW5hICg1OTIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwOSc+SGFpdGkgKDUwOSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTA0Jz5Ib25kdXJhcyAoNTA0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NTInPkhvbmcgS29uZyAoODUyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNic+SHVuZ2FyeSAoMzYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1NCc+SWNlbGFuZCAoMzU0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5MSc+SW5kaWEgKDkxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2Mic+SW5kb25lc2lhICg2MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTgnPklyYW4gKDk4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjQnPklyYXEgKDk2NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzUzJz5JcmVsYW5kICgzNTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk3Mic+SXNyYWVsICg5NzIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM5Jz5JdGFseSAoMzkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg3Nic+SmFtYWljYSAoODc2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4MSc+SmFwYW4gSWRjICg4MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODEnPkphcGFuIEtkZCAoODEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2Mic+Sm9yZGFuICg5NjIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzcnPkthemFraHN0YW4gKDcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1NCc+S2VueWEgKDI1NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjg2Jz5LaXJpYmF0aSAoNjg2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NTAnPktvcmVhLCBOb3J0aCAoODUwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4Mic+S29yZWEsIFNvdXRoICg4MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTY1Jz5LdXdhaXQgKDk2NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNyc+S3lyZ3l6c3RhbiAoNykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODU2Jz5MYW9zICg4NTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3MSc+TGF0dmlhICgzNzEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2MSc+TGViYW5vbiAoOTYxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjYnPkxlc290aG8gKDI2NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjMxJz5MaWJlcmlhICgyMzEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIxOCc+TGlieWEgKDIxOCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDIzJz5MaWVjaHRlbnN0ZWluICg0MjMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3MCc+TGl0aHVhbmlhICgzNzApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1Mic+THV4ZW1ib3VyZyAoMzUyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NTMnPk1hY2FvICg4NTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM4OSc+TWFjZWRvbmlhICgzODkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2MSc+TWFkYWdhc2NhciAoMjYxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjUnPk1hbGF3aSAoMjY1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2MCc+TWFsYXlzaWEgKDYwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjAnPk1hbGRpdmVzICg5NjApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyMyc+TWFsaSBSZXB1YmxpYyAoMjIzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTYnPk1hbHRhICgzNTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY5Mic+TWFyc2hhbGwgSXNsYW5kcyAoNjkyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMjInPk1hdXJpdGFuaWEgKDIyMikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjMwJz5NYXVyaXRpdXMgKDIzMCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjY5Jz5NYXlvdHRlIElzbGFuZCAoMjY5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1Mic+TWV4aWNvICg1MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjkxJz5NaWNyb25lc2lhICg2OTEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3Myc+TW9sZG92YSAoMzczKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczMyc+TW9uYWNvICgzMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDczJz5Nb250c2VycmF0ICg0NzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIxMic+TW9yb2NjbyAoMjEyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTgnPk1vemFtYmlxdWUgKDI1OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTUnPk15YW5tYXIgKDk1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjQnPk5hbWliaWEgKDI2NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjc0Jz5OYXVydSAoNjc0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NzcnPk5lcGFsICg5NzcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzMxJz5OZXRoZXJsYW5kcyAoMzEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5OSc+QW50aWxsZXMgKDU5OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjg3Jz5OZXcgQ2FsZWRvbmlhICg2ODcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY0Jz5OZXcgWmVhbGFuZCAoNjQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwNSc+TmljYXJhZ3VhICg1MDUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIzNCc+TmlnZXJpYSAoMjM0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMjcnPk5pZ2VyIFJlcHVibGljICgyMjcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4Myc+Tml1ZSAoNjgzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzInPk5vcmZvbGsgSXNsYW5kICg2NzIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ3Jz5Ob3J3YXkgKDQ3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjgnPk9tYW4gKDk2OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTInPlBha2lzdGFuICg5MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjgwJz5QYWxhdSAoNjgwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTUnPlBhcmFndWF5ICg1OTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUxJz5QZXJ1ICg1MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjMnPlBoaWxpcHBpbmVzICg2MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDgnPlBvbGFuZCAoNDgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1MSc+UG9ydHVnYWwgKDM1MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNzg3Jz5QdWVydG8gUmljbyAoNzg3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NzQnPlFhdGFyICg5NzQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2Mic+UmV1bmlvbiBJc2xhbmQgKDI2MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDAnPlJvbWFuaWEgKDQwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc3Jz5SdXNzaWEgKDcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1MCc+UndhbmRhICgyNTApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5OSc+U3QgRXVzdGF0aXVzICg1OTkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI5MCc+U3QgSGVsZW5hICgyOTApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzc1OCc+U3QgTHVjaWEgKDc1OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk5Jz5TdCBNYWFydGVuICg1OTkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzgwOSc+U3QgVmluY2VudCAoODA5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODQnPlNhbW9hICg2ODQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3OCc+U2FuIE1hcmlubyAoMzc4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMzknPlNhbyBUb21lICgyMzkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2Nic+U2F1ZGkgQXJhYmlhICg5NjYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyMSc+U2VuZWdhbCAoMjIxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMzInPlNpZXJyYSBMZW9uZSAoMjMyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NSc+U2luZ2Fwb3JlICg2NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDIxJz5TbG92YWtpYSAoNDIxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczODYnPlNsb3ZlbmlhICgzODYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3Nyc+U29sb21vbiBJc2xhbmRzICg2NzcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1Mic+U29tYWxpYSAoMjUyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNyc+U291dGggQWZyaWNhICgyNykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzQnPlNwYWluICgzNCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTQnPlNyaSBMYW5rYSAoOTQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0OSc+U3VkYW4gKDI0OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk3Jz5TdXJpbmFtZSAoNTk3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjgnPlN3YXppbGFuZCAoMjY4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0Nic+U3dlZGVuICg0NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDEnPlN3aXR6ZXJsYW5kICg0MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTYzJz5TeXJpYSAoOTYzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4ODYnPlRhaXdhbiAoODg2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc3Jz5UYWppa2lzdGFuICg3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTUnPlRhbnphbmlhICgyNTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY2Jz5UaGFpbGFuZCAoNjYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyOCc+VG9nbyAoMjI4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzYnPlRvbmdhIElzbGFuZHMgKDY3NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjE2Jz5UdW5pc2lhICgyMTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzkwJz5UdXJrZXkgKDkwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5OTMnPlR1cmttZW5pc3RhbiAoOTkzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODgnPlR1dmFsdSAoNjg4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTYnPlVnYW5kYSAoMjU2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczODAnPlVrcmFpbmUgKDM4MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDQnPlVLICg0NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMSc+VVNBIC8gQ2FuYWRhICgxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTgnPlVydWd1YXkgKDU5OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTk4Jz5VemJla2lzdGFuICg5OTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3OCc+VmFudWF0dSAoNjc4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczOSc+VmF0aWNhbiBDaXR5ICgzOSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTgnPlZlbmV6dWVsYSAoNTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg0Jz5WaWV0bmFtICg4NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjgxJz5XYWxsaXMgKDY4MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjg1Jz5XZXN0ZXJuIFNhbW9hICg2ODUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2Nyc+WWVtZW4gKDk2NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzgxJz5TZXJiaWEgKDM4MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjYwJz5aYW1iaWEgKDI2MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjYzJz5aaW1iYWJ3ZSAoMjYzKSZuYnNwOzwvb3B0aW9uPjwvc2VsZWN0PiAiOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2NvdW50cnlfY29kZXMoKSB7CiAgcmV0dXJuICI8c2VsZWN0IGlkPSdjb3VudHJ5JyBuYW1lPSdjb3VudHJ5Jz48b3B0aW9uIHNlbGVjdGVkPSdzZWxlY3RlZCcgdmFsdWU9J25vbmUnPi0tLTwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBRic+QWZnaGFuaXN0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQUwnPkFsYmFuaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRFonPkFsZ2VyaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVMnPkFtZXJpY2FuIFNhbW9hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FEJz5BbmRvcnJhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FPJz5BbmdvbGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQUknPkFuZ3VpbGxhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FRJz5BbnRhcmN0aWNhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FHJz5BbnRpZ3VhIGFuZCBCYXJidWRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FSJz5BcmdlbnRpbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQU0nPkFybWVuaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVcnPkFydWJhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FVJz5BdXN0cmFsaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVQnPkF1c3RyaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVonPkF6ZXJiYWlqYW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQlMnPkJhaGFtYXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkgnPkJhaHJhaW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkQnPkJhbmdsYWRlc2gmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkInPkJhcmJhZG9zJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JZJz5CZWxhcnVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JFJz5CZWxnaXVtJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JaJz5CZWxpemUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkonPkJlbmluJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JNJz5CZXJtdWRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JUJz5CaHV0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQk8nPkJvbGl2aWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkEnPkJvc25pYSBhbmQgSGVyemVnb3ZpbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQlcnPkJvdHN3YW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JWJz5Cb3V2ZXQgSXNsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JSJz5CcmF6aWwmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSU8nPkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCTic+QnJ1bmVpIERhcnVzc2FsYW0mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkcnPkJ1bGdhcmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JGJz5CdXJraW5hIEZhc28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkknPkJ1cnVuZGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS0gnPkNhbWJvZGlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NNJz5DYW1lcm9vbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDQSc+Q2FuYWRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NWJz5DYXBlIFZlcmRlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tZJz5DYXltYW4gSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDRic+Q2VudHJhbCBBZnJpY2FuIFJlcHVibGljJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1REJz5DaGFkJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NMJz5DaGlsZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDTic+Q2hpbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ1gnPkNocmlzdG1hcyBJc2xhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0MnPkNvY29zIChLZWVsaW5nKSBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NPJz5Db2xvbWJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLTSc+Q29tb3JvcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDRyc+Q29uZ28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0QnPkNvbmdvLCB0aGUgRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0snPkNvb2sgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDUic+Q29zdGEgUmljYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDSSc+Q290ZSBEJ0l2b2lyZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdIUic+Q3JvYXRpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDVSc+Q3ViYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDWSc+Q3lwcnVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NaJz5DemVjaCBSZXB1YmxpYyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdESyc+RGVubWFyayZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdESic+RGppYm91dGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRE0nPkRvbWluaWNhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0RPJz5Eb21pbmljYW4gUmVwdWJsaWMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRUMnPkVjdWFkb3ImbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRUcnPkVneXB0Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NWJz5FbCBTYWx2YWRvciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHUSc+RXF1YXRvcmlhbCBHdWluZWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRVInPkVyaXRyZWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRUUnPkVzdG9uaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRVQnPkV0aGlvcGlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0ZLJz5GYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRk8nPkZhcm9lIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRkonPkZpamkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRkknPkZpbmxhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRlInPkZyYW5jZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHRic+RnJlbmNoIEd1aWFuYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQRic+RnJlbmNoIFBvbHluZXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdURic+RnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dBJz5HYWJvbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHTSc+R2FtYmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dFJz5HZW9yZ2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0RFJz5HZXJtYW55Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dIJz5HaGFuYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHSSc+R2licmFsdGFyJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dSJz5HcmVlY2UmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR0wnPkdyZWVubGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHRCc+R3JlbmFkYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHUCc+R3VhZGVsb3VwZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHVSc+R3VhbSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHVCc+R3VhdGVtYWxhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dOJz5HdWluZWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1cnPkd1aW5lYS1CaXNzYXUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1knPkd1eWFuYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdIVCc+SGFpdGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSE0nPkhlYXJkIElzbGFuZCBhbmQgTWNkb25hbGQgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdWQSc+SG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSE4nPkhvbmR1cmFzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0hLJz5Ib25nIEtvbmcmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSFUnPkh1bmdhcnkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSVMnPkljZWxhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSU4nPkluZGlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0QnPkluZG9uZXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJUic+SXJhbiwgSXNsYW1pYyBSZXB1YmxpYyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJUSc+SXJhcSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJRSc+SXJlbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJTCc+SXNyYWVsJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lUJz5JdGFseSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdKTSc+SmFtYWljYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdKUCc+SmFwYW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSk8nPkpvcmRhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLWic+S2F6YWtoc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLRSc+S2VueWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS0knPktpcmliYXRpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tQJz5Lb3JlYSwgRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLUic+S29yZWEsIFJlcHVibGljIG9mJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tXJz5LdXdhaXQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS0cnPkt5cmd5enN0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEEnPkxhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0xWJz5MYXR2aWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEInPkxlYmFub24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFMnPkxlc290aG8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFInPkxpYmVyaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFknPkxpYnlhbiBBcmFiIEphbWFoaXJpeWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEknPkxpZWNodGVuc3RlaW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFQnPkxpdGh1YW5pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMVSc+THV4ZW1ib3VyZyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNTyc+TWFjYW8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUsnPk1hY2Vkb25pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNRyc+TWFkYWdhc2NhciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNVyc+TWFsYXdpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01ZJz5NYWxheXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNVic+TWFsZGl2ZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUwnPk1hbGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVQnPk1hbHRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01IJz5NYXJzaGFsbCBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01RJz5NYXJ0aW5pcXVlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01SJz5NYXVyaXRhbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01VJz5NYXVyaXRpdXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nWVQnPk1heW90dGUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVgnPk1leGljbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdGTSc+TWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNRCc+TW9sZG92YSwgUmVwdWJsaWMgb2YmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUMnPk1vbmFjbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNTic+TW9uZ29saWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVMnPk1vbnRzZXJyYXQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUEnPk1vcm9jY28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVonPk1vemFtYmlxdWUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTU0nPk15YW5tYXImbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTkEnPk5hbWliaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTlInPk5hdXJ1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05QJz5OZXBhbCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOTCc+TmV0aGVybGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQU4nPk5ldGhlcmxhbmRzIEFudGlsbGVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05DJz5OZXcgQ2FsZWRvbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05aJz5OZXcgWmVhbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOSSc+TmljYXJhZ3VhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05FJz5OaWdlciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdORyc+TmlnZXJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOVSc+Tml1ZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdORic+Tm9yZm9sayBJc2xhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVAnPk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOTyc+Tm9yd2F5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J09NJz5PbWFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BLJz5QYWtpc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQVyc+UGFsYXUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUFMnPlBhbGVzdGluaWFuIFRlcnJpdG9yeSwgT2NjdXBpZWQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEEnPlBhbmFtYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQRyc+UGFwdWEgTmV3IEd1aW5lYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQWSc+UGFyYWd1YXkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEUnPlBlcnUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEgnPlBoaWxpcHBpbmVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BOJz5QaXRjYWlybiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQTCc+UG9sYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BUJz5Qb3J0dWdhbCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQUic+UHVlcnRvIFJpY28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUUEnPlFhdGFyJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1JFJz5SZXVuaW9uJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1JPJz5Sb21hbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1JVJz5SdXNzaWFuIEZlZGVyYXRpb24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUlcnPlJ3YW5kYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTSCc+U2FpbnQgSGVsZW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tOJz5TYWludCBLaXR0cyBhbmQgTmV2aXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEMnPlNhaW50IEx1Y2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BNJz5TYWludCBQaWVycmUgYW5kIE1pcXVlbG9uJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZDJz5TYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdXUyc+U2Ftb2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU00nPlNhbiBNYXJpbm8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU1QnPlNhbyBUb21lIGFuZCBQcmluY2lwZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTQSc+U2F1ZGkgQXJhYmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NOJz5TZW5lZ2FsJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NTJz5TZXJiaWEgYW5kIE1vbnRlbmVncm8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0MnPlNleWNoZWxsZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0wnPlNpZXJyYSBMZW9uZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTRyc+U2luZ2Fwb3JlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NLJz5TbG92YWtpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTSSc+U2xvdmVuaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0InPlNvbG9tb24gSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTTyc+U29tYWxpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdaQSc+U291dGggQWZyaWNhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dTJz5Tby4gR2VvcmdpYSBhbmQgdGhlIFNvLiBTYW5kd2ljaCBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VTJz5TcGFpbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMSyc+U3JpIExhbmthJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NEJz5TdWRhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTUic+U3VyaW5hbWUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0onPlN2YWxiYXJkIGFuZCBKYW4gTWF5ZW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU1onPlN3YXppbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTRSc+U3dlZGVuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQ0gnPlN3aXR6ZXJsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NZJz5TeXJpYW4gQXJhYiBSZXB1YmxpYyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUVyc+VGFpd2FuLCBQcm92aW5jZSBvZiBDaGluYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUSic+VGFqaWtpc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUWic+VGFuemFuaWEsIFVuaXRlZCBSZXB1YmxpYyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUSCc+VGhhaWxhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEwnPlRpbW9yLUxlc3RlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RHJz5Ub2dvJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RLJz5Ub2tlbGF1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RPJz5Ub25nYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUVCc+VHJpbmlkYWQgYW5kIFRvYmFnbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUTic+VHVuaXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUUic+VHVya2V5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RNJz5UdXJrbWVuaXN0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEMnPlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUVic+VHV2YWx1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1VHJz5VZ2FuZGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVUEnPlVrcmFpbmUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQUUnPlVuaXRlZCBBcmFiIEVtaXJhdGVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dCJz5Vbml0ZWQgS2luZ2RvbSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdVUyc+VW5pdGVkIFN0YXRlcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdVTSc+VW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1VZJz5VcnVndWF5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1VaJz5VemJla2lzdGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZVJz5WYW51YXR1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZFJz5WZW5lenVlbGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVk4nPlZpZXQgTmFtJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZHJz5WaXJnaW4gSXNsYW5kcywgQnJpdGlzaCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdWSSc+VmlyZ2luIElzbGFuZHMsIFUucy4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nV0YnPldhbGxpcyBhbmQgRnV0dW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VIJz5XZXN0ZXJuIFNhaGFyYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdZRSc+WWVtZW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nWk0nPlphbWJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdaVyc+WmltYmFid2UmbmJzcDs8L29wdGlvbj48L3NlbGVjdD4gIjsKfQoKZnVuY3Rpb24gcGxhbnlvX3ByZWZpbGxfcGFyYW1zKHBhcmFtcykgewogIGZvciAodmFyIHAgaW4gcGFyYW1zKSB7CiAgICB2YXIgbmFtZSA9IHBhcmFtc1twXTsKICAgIGlmICh0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJykgewogICAgICB2YXIgdmFsdWUgPSBwbGFueW9fZ2V0X3BhcmFtKG5hbWUpOwogICAgICBpZiAodmFsdWUgJiYgalF1ZXJ5KCcjJyArIG5hbWUpLmxlbmd0aCA+IDApCglqUXVlcnkoJyMnICsgbmFtZSkudmFsKHZhbHVlKTsKICAgICAgaWYgKHZhbHVlICYmIGpRdWVyeSgnI2JveF8nICsgbmFtZSkubGVuZ3RoID4gMCkKCWpRdWVyeSgnI2JveF8nICsgbmFtZSkudmFsKHZhbHVlKTsKICAgICAgaWYgKHZhbHVlICYmIG5hbWUuaW5kZXhPZignYm94XycpID09IDAgJiYgalF1ZXJ5KCcjJyArIG5hbWUuc3Vic3RyKDQpKS5sZW5ndGggPiAwKQogICAgICAgIGpRdWVyeSgnIycgKyBuYW1lLnN1YnN0cig0KSkudmFsKHZhbHVlKTsKCiAgICB9CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9faXNfcHJlc2VudGF0aW9uX21vZGUoKSB7CiAgdmFyIHByZXNlbnRhdGlvbl9tb2RlID0gcGxhbnlvX2dldF9wYXJhbSgncHJlc2VudGF0aW9uX21vZGUnKTsKICBpZiAocHJlc2VudGF0aW9uX21vZGUpCiAgICByZXR1cm4gKHByZXNlbnRhdGlvbl9tb2RlICE9ICcwJyk7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3N1Ym1pdHRlZCcpIHx8IHBsYW55b19nZXRfcGFyYW0oJ3ByZWZpbGwnKSB8fCAocGxhbnlvX2dldF9wYXJhbSgnbW9kZScpICYmIHBsYW55b19nZXRfcGFyYW0oJ21vZGUnKSAhPSAncmVzb3VyY2VzJykpCiAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIChwbGFueW9fc2V0dGluZ3MucHJlc2VudGF0aW9uX21vZGUgPT0gMSk7Cn0KCmZ1bmN0aW9uIGdldF9wbGFueW9fbW9kZSgpIHsKICBpZiAocGxhbnlvX2lzc2V0ICh3aW5kb3cuZm9yY2VfZW1wdHlfbW9kZSkgJiYgd2luZG93LmZvcmNlX2VtcHR5X21vZGUpCiAgICByZXR1cm4gJ2VtcHR5JzsKICB2YXIgcHJlc2VudGF0aW9uX21vZGUgPSBwbGFueW9faXNfcHJlc2VudGF0aW9uX21vZGUoKTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgncmVzb3VyY2VfaWQnKSB8fCAocGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fcmVzb3VyY2VfaWQpICYmIHdpbmRvdy5wbGFueW9fcmVzb3VyY2VfaWQgPiAwKSkgewogICAgaWYgKHByZXNlbnRhdGlvbl9tb2RlKQogICAgICByZXR1cm4gJ3Jlc291cmNlX2Rlc2MnOwogICAgZWxzZQogICAgICByZXR1cm4gJ3Jlc2VydmUnOwogIH0KICBlbHNlIHsKICAgIGlmIChwcmVzZW50YXRpb25fbW9kZSkgewogICAgICBpZiAocGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkLmluZGV4T2YoJ00nKSA9PSAwICYmICFwbGFueW9fZ2V0X3BhcmFtKCdzaXRlX2lkJykgJiYgcGxhbnlvX2dldF9wYXJhbSgnbW9kZScpICE9ICdyZXNvdXJjZXMnKQogICAgICAgIHJldHVybiAnc2l0ZV9saXN0JzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiAncmVzb3VyY2VfbGlzdCc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgaWYgKHBsYW55b19zZXR0aW5ncy5lbXB0eV9tb2RlID09ICcxJyAmJiAhcGxhbnlvX2dldF9wYXJhbSgnc3VibWl0dGVkJykpCiAgICAgICAgcmV0dXJuICdlbXB0eSc7CiAgICAgIHJldHVybiAnc2VhcmNoJzsKICAgIH0KICB9Cgp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2FkZGl0aW9uYWxfcHJvcHMoZm9ybSwgZWxzKSB7CiAgalF1ZXJ5KCI6aW5wdXRbbmFtZV49J3Byb3BfcmVzXyddIikuZWFjaChmdW5jdGlvbigpIHsKICAgIGVsc1tlbHMubGVuZ3RoXSA9IHRoaXMubmFtZTsKICB9KTsKICBqUXVlcnkoIjppbnB1dFtuYW1lXj0ncmVudGFsX3Byb3BfJ10iKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgZWxzW2Vscy5sZW5ndGhdID0gdGhpcy5uYW1lOwogIH0pOwogIHJldHVybiBlbHM7Cn0KCmZ1bmN0aW9uIHBsYW55b19mb3JtX2xvYWRlZChjb2RlKSB7CiAgaWYgKCFjb2RlIHx8IGNvZGUuc3Vic3RyICgwLCA1KSA9PSAiRXJyb3IiKSB7CiAgICB3aW5kb3cubG9jYXRpb24gPSAocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzZXJ2ZS5waHA/Y2FsZW5kYXI9IiArIHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZDsKICB9CiAgZWxzZSB7CiAgICBjb2RlID0gY29kZS5yZXBsYWNlKCJ7UEgtbW9iaWxlX2NvdW50cnlfcGFyYW19IiwgcGxhbnlvX2dldF9waG9uZV9jb2RlcygibW9iaWxlX2NvdW50cnlfcGFyYW0iKSk7CiAgICBjb2RlID0gY29kZS5yZXBsYWNlKCJ7UEgtcGhvbmVfY291bnRyeV9wYXJhbX0iLCBwbGFueW9fZ2V0X3Bob25lX2NvZGVzKCJwaG9uZV9jb3VudHJ5X3BhcmFtIikpOwogICAgY29kZSA9IGNvZGUucmVwbGFjZSgie0NPLWNvdW50cnlfcGFyYW19IiwgcGxhbnlvX2dldF9jb3VudHJ5X2NvZGVzKCkpOwogICAgY29kZSA9IGNvZGUucmVwbGFjZSgvcGxhbnlvLXN0eWxlcy5jc3MvZywgZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgicGxhbnlvLXN0eWxlcy5jc3MiKSk7CiAgICBqUXVlcnkoJyNwbGFueW9fY29udGVudCcpLmh0bWwoY29kZSk7CgogICAgdmFyIHBsYW55b19tb2RlID0gcGxhbnlvX2dldF9wYXJhbSgnbW9kZScpOwogICAgaWYgKCFwbGFueW9faXNfc3BlY2lhbF9tb2RlKHBsYW55b19tb2RlKSkKICAgICAgcGxhbnlvX21vZGUgPSBnZXRfcGxhbnlvX21vZGUoKTsKICAgIGlmIChwbGFueW9fbW9kZSA9PSAnc2VhcmNoJykgewogICAgICBqUXVlcnkoJyNzZWFyY2hfZm9ybScpLnN1Ym1pdChwbGFueW9fc2VuZF9zZWFyY2hfZm9ybSk7CiAgICAgIHZhciBwYXJhbXNfYXJyYXkgPSBuZXcgQXJyYXkoJ3N0YXJ0X2RhdGUnLCAnZW5kX2RhdGUnLCAnb25lX2RhdGUnLCAnc3RhcnRfdGltZScsICdlbmRfdGltZScsICdzb3J0JywgJ2JveF9zdGFydF9kYXRlJywgJ2JveF9lbmRfZGF0ZScsICdib3hfb25lX2RhdGUnLCAnYm94X3N0YXJ0X3RpbWUnLCAnYm94X2VuZF90aW1lJywgJ3JlbnRhbF90aW1lX3ZhbHVlJyk7CiAgICAgIHBsYW55b19nZXRfYWRkaXRpb25hbF9wcm9wcyhqUXVlcnkoJyNzZWFyY2hfZm9ybScpLCBwYXJhbXNfYXJyYXkpOwogICAgICBwbGFueW9fcHJlZmlsbF9wYXJhbXMocGFyYW1zX2FycmF5KTsKICAgICAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3N1Ym1pdHRlZCcpKSB7CglwbGFueW9fc2VuZF9zZWFyY2hfZm9ybSgpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzZXJ2ZScpIHsKICAgICAgc2V0VGltZW91dCgiaWYod2luZG93LnBsYW55b19kYXRlc19jaGFuZ2VkKSBwbGFueW9fZGF0ZXNfY2hhbmdlZCgpOyIsIDEwMCk7CiAgICAgIHNldFRpbWVvdXQoImlmKHdpbmRvdy5wbGFueW9fZGF0ZXNfY2hhbmdlZCkgcGxhbnlvX2RhdGVzX2NoYW5nZWQoKTsiLCAxNTAwKTsKICAgICAgc2V0VGltZW91dCgiaWYod2luZG93LnBsYW55b19kYXRlc19jaGFuZ2VkKSBwbGFueW9fZGF0ZXNfY2hhbmdlZCgpOyIsIDUwMDApOwogICAgICBqUXVlcnkoJyNyZXNlcnZlX2Zvcm0nKS5zdWJtaXQocGxhbnlvX3NlbmRfcmVzZXJ2YXRpb25fZm9ybSk7CiAgICAgIGpRdWVyeSgnI3Byb2R1Y3RfZm9ybScpLnN1Ym1pdChwbGFueW9fc2VuZF9wcm9kdWN0X2Zvcm0pOwogICAgICB2YXIgcGFyYW1zX2FycmF5ID0gbmV3IEFycmF5KCdzdGFydF9kYXRlJywgJ2VuZF9kYXRlJywgJ29uZV9kYXRlJywgJ3N0YXJ0X3RpbWUnLCAnZW5kX3RpbWUnLCAnYm94X3N0YXJ0X2RhdGUnLCAnYm94X2VuZF9kYXRlJywgJ2JveF9vbmVfZGF0ZScsICdib3hfc3RhcnRfdGltZScsICdib3hfZW5kX3RpbWUnLCAncmVudGFsX3RpbWVfdmFsdWUnKTsKICAgICAgcGxhbnlvX2dldF9hZGRpdGlvbmFsX3Byb3BzKGpRdWVyeSgnI3Jlc2VydmVfZm9ybScpLCBwYXJhbXNfYXJyYXkpOwogICAgICBwbGFueW9fcHJlZmlsbF9wYXJhbXMocGFyYW1zX2FycmF5KTsKICAgICAgaWYoalF1ZXJ5KCcjcGxhbnlvX3ByaWNlX2hvbGRlcicpLmxlbmd0aCkgewogICAgICAgIGpRdWVyeSgnI3BsYW55b19wcmljZV9ob2xkZXInKS5hcHBlbmQoalF1ZXJ5KCcjcHJpY2VfaW5mbycpKTsKICAgICAgICBqUXVlcnkoJyNwbGFueW9fcHJpY2VfaG9sZGVyJykuY3NzKCdkaXNwbGF5JywnJykKICAgICAgICBqUXVlcnkoJyNwcmljZV9pbmZvX2RpdicpLmNzcygnZGlzcGxheScsJ25vbmUnKQogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAnY2hlY2tvdXQnKSB7CiAgICAgIGlmIChwbGFueW9faXNzZXQod2luZG93LmpzX3N1Ym1pdF9wYXltZW50X2Zvcm0pKQogICAgICAgIHdpbmRvdy5qc19zdWJtaXRfcGF5bWVudF9mb3JtKCk7CiAgICB9CiAgICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQpKQogICAgICB3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKHBsYW55b19tb2RlKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLCBmb3JtX3VybF9wYXJhbXMpIHsKICBpZiAocGxhbnlvX3NldHRpbmdzLnBsYW55b19sYW5ndWFnZSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAiJmxhbmd1YWdlPSIgKyBwbGFueW9fc2V0dGluZ3MucGxhbnlvX2xhbmd1YWdlLnRvVXBwZXJDYXNlKCk7CiAgZm9ybV91cmxfcGFyYW1zICs9ICImaHRtbF9jb250ZW50X3R5cGU9MSI7CiAgZm9ybV91cmxfcGFyYW1zICs9ICImcGx1Z2luX21vZGU9MTAiOwogIHZhciBzaG9wcGluZ19jYXJ0X2lkID0gcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19jYXJ0X2lkJyk7CiAgaWYgKHNob3BwaW5nX2NhcnRfaWQgJiYgZm9ybV91cmxfcGFyYW1zLmluZGV4T2YoJ2NhcnRfaWQ9JykgPT0gLTEpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZjYXJ0X2lkPSIgKyBzaG9wcGluZ19jYXJ0X2lkICsgIiZmaXJzdF9yZXNlcnZhdGlvbl9pZD0iICsgcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19maXJzdF9yZXNlcnZhdGlvbl9pZCcpOwogIGZvcm1fdXJsX3BhcmFtcyArPSAiJnVzZXJfYWdlbnQ9IiArIG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgZG9jdW1lbnQucGxhbnlvX2ZpbGVfcGF0aCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgoJycpOwogIHZhciBmb3JtX3VybF9wYXJhbXNfYXJyID0gcGxhbnlvX3Vuc2VyaWFsaXplKGZvcm1fdXJsX3BhcmFtcyk7CiAgalF1ZXJ5LnBvc3QoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zX2FycixwbGFueW9fZm9ybV9sb2FkZWQpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfY2FuY2VsX2NvZGUoc2l0ZV9pZCwgcmVzZXJ2YXRpb25faWQsIGMsIHVzZXJfaWQsIHJlc291cmNlX2lkKSB7CiAgaWYgKHJlc2VydmF0aW9uX2lkKSB7CiAgICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHBsYW55b19zZXR0aW5ncy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X2NhbmNlbF9jb2RlJnJlc2VydmF0aW9uX2lkPSIrcmVzZXJ2YXRpb25faWQrIiZjPSIrYysiJnJlc291cmNlX2lkPSIrcmVzb3VyY2VfaWQrIiZ1c2VyX2lkPSIrdXNlcl9pZCsiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKSsiJnNpdGVfaWQ9IitzaXRlX2lkOwogICAgcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9yZXNlcnZhdGlvbl9kZXRhaWxzKHNpdGVfaWQsIHJlc2VydmF0aW9uX2lkLCB1c2VyX2lkKSB7CiAgaWYgKHJlc2VydmF0aW9uX2lkKSB7CiAgICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHBsYW55b19zZXR0aW5ncy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3Jlc2VydmF0aW9uX2RldGFpbHNfY29kZSZyZXNlcnZhdGlvbl9pZD0iK3Jlc2VydmF0aW9uX2lkKyImdXNlcl9pZD0iK3VzZXJfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrIiZzaXRlX2lkPSIrc2l0ZV9pZDsKICAgIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcmVzZXJ2YXRpb25fbGlzdChzaXRlX2lkLCByZXNlcnZhdGlvbl9pZCwgdXNlcl9pZCkgewogIGlmIChyZXNlcnZhdGlvbl9pZCkgewogICAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9yZXNlcnZhdGlvbl9saXN0X2NvZGUmcmVzZXJ2YXRpb25faWQ9IityZXNlcnZhdGlvbl9pZCsiJnVzZXJfaWQ9Iit1c2VyX2lkKyImZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpKyImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3BheW1lbnRfZm9ybShzaXRlX2lkLCByZXNlcnZhdGlvbl9pZCwgdXNlcl9pZCwgYXV0b19yZWRpcmVjdCkgewogIGlmIChyZXNlcnZhdGlvbl9pZCkgewogICAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9wYXltZW50X2Zvcm1fY29kZSZyZXNlcnZhdGlvbl9pZD0iK3Jlc2VydmF0aW9uX2lkKyImdXNlcl9pZD0iK3VzZXJfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrIiZzaXRlX2lkPSIrc2l0ZV9pZCsoYXV0b19yZWRpcmVjdCA/ICImYXV0b19yZWRpcmVjdD0iK2F1dG9fcmVkaXJlY3QgOiAiIik7CiAgICB2YXIgYW1vdW50ID0gcGxhbnlvX2dldF9wYXJhbSgnYW1vdW50Jyk7CiAgICBpZiAoYW1vdW50KQogICAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZhbW91bnQ9IithbW91bnQ7CiAgICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX2NhcnRfY29kZShzaXRlX2lkLCBjYXJ0X2lkLCBmaXJzdF9yZXNlcnZhdGlvbl9pZCwgcmVtb3ZlX3Jlc2VydmF0aW9uX2lkKSB7CiAgaWYgKCFjYXJ0X2lkKSB7CiAgICBjYXJ0X2lkID0gcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19jYXJ0X2lkJyk7CiAgICBmaXJzdF9yZXNlcnZhdGlvbl9pZCA9IHBsYW55b19nZXRfY29va2llKCdwbGFueW9fZmlyc3RfcmVzZXJ2YXRpb25faWQnKTsKICB9CiAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfY2FydF9jb2RlJmZpcnN0X3Jlc2VydmF0aW9uX2lkPSIrZmlyc3RfcmVzZXJ2YXRpb25faWQrIiZyZW1vdmVfcmVzZXJ2YXRpb25faWQ9IisocmVtb3ZlX3Jlc2VydmF0aW9uX2lkID8gcmVtb3ZlX3Jlc2VydmF0aW9uX2lkIDogIiIpKyImY2FydF9pZD0iK2NhcnRfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrIiZzaXRlX2lkPSIrc2l0ZV9pZDsKICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfY2hlY2tvdXRfY29kZShzaXRlX2lkLCBjYXJ0X2lkLCBmaXJzdF9yZXNlcnZhdGlvbl9pZCkgewogIGlmICghY2FydF9pZCkgewogICAgY2FydF9pZCA9IHBsYW55b19nZXRfY29va2llKCdwbGFueW9fY2FydF9pZCcpOwogICAgZmlyc3RfcmVzZXJ2YXRpb25faWQgPSBwbGFueW9fZ2V0X2Nvb2tpZSgncGxhbnlvX2ZpcnN0X3Jlc2VydmF0aW9uX2lkJyk7CiAgfQogIHZhciBmb3JtX3VybCA9IHBsYW55b19zZXR0aW5ncy51bGFwX3NjcmlwdDsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHBsYW55b19zZXR0aW5ncy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X2NoZWNrb3V0X2NvZGUmZmlyc3RfcmVzZXJ2YXRpb25faWQ9IitmaXJzdF9yZXNlcnZhdGlvbl9pZCsiJmNhcnRfaWQ9IitjYXJ0X2lkKyImZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpKyImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3Jlc2VydmF0aW9uX2Zvcm0oc2l0ZV9pZCwgcmVzb3VyY2VfaWQpIHsKICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgaWYgKCFyZXNvdXJjZV9pZCkgewogICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cucGxhbnlvX3Jlc291cmNlX2lkKSkKICAgICAgcmVzb3VyY2VfaWQgPSB3aW5kb3cucGxhbnlvX3Jlc291cmNlX2lkOwogICAgZWxzZQogICAgICByZXNvdXJjZV9pZCA9ICcnOwogIH0KICB2YXIgZGF0ZV9zdHIgPSAnJzsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnc3RhcnRfZGF0ZScpKQogICAgZGF0ZV9zdHIgPSAiJnN0YXJ0X2RhdGU9IiArIHBsYW55b19nZXRfcGFyYW0oJ3N0YXJ0X2RhdGUnKTsKICBlbHNlIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdvbmVfZGF0ZScpKQogICAgZGF0ZV9zdHIgPSAiJm9uZV9kYXRlPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCdvbmVfZGF0ZScpOwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfcmVzZXJ2YXRpb25fZm9ybV9jb2RlJnNpdGVfaWQ9IiArIHNpdGVfaWQgKyAiJnJlc291cmNlX2lkPSIgKyByZXNvdXJjZV9pZCArICImZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkgKyBkYXRlX3N0cjsKICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfYWRkaXRpb25hbF9wcm9kdWN0c19mb3JtKHJlc2VydmF0aW9uX2lkKSB7CiAgaWYgKHJlc2VydmF0aW9uX2lkKSB7CiAgICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHBsYW55b19zZXR0aW5ncy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X2FkZGl0aW9uYWxfcHJvZHVjdHNfY29kZSZyZXNlcnZhdGlvbl9pZD0iICsgcmVzZXJ2YXRpb25faWQgKyAiJmZlZWRiYWNrX3VybD0iICsgcGxhbnlvX2dldF9jdXJyZW50X3VybCgpOwogICAgcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9zZWFyY2hfZm9ybShzaXRlX2lkKSB7CiAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfc2VhcmNoX2Zvcm1fY29kZSZmZWVkYmFja191cmw9IiArIHBsYW55b19nZXRfY3VycmVudF91cmwoKSArICImZXh0cmFfc2VhcmNoX2ZpZWxkcz0iICsgKHBsYW55b19nZXRfcGFyYW0oJ2V4dHJhX3NlYXJjaF9maWVsZHMnKSA/IHBsYW55b19nZXRfcGFyYW0oJ2V4dHJhX3NlYXJjaF9maWVsZHMnKSA6IHBsYW55b19zZXR0aW5ncy5leHRyYV9zZWFyY2hfZmllbGRzKSArICImc2l0ZV9pZD0iICsgc2l0ZV9pZDsKICBpZiAocGxhbnlvX2lzc2V0KHBsYW55b19zZXR0aW5ncy5zb3J0X2ZpZWxkcykpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZzb3J0X2ZpZWxkcz0iICsgcGxhbnlvX3NldHRpbmdzLnNvcnRfZmllbGRzOwogIHZhciByYW5nZV9zZWFyY2ggPSBwbGFueW9fZ2V0X3BhcmFtKCdyYW5nZV9zZWFyY2gnKTsKICBpZiAoIXJhbmdlX3NlYXJjaCkKICAgIHJhbmdlX3NlYXJjaCA9IGRvY3VtZW50LnJhbmdlX3NlYXJjaDsKICBpZiAocmFuZ2Vfc2VhcmNoKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImcmFuZ2Vfc2VhcmNoPSIrcmFuZ2Vfc2VhcmNoOwogIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLCBmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcmVzb3VyY2VfbGlzdChzaXRlX2lkKSB7CiAgdmFyIGZvcm1fdXJsID0gcGxhbnlvX3NldHRpbmdzLnVsYXBfc2NyaXB0OwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9IisocGxhbnlvX3NldHRpbmdzLnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfcmVzb3VyY2VfbGlzdF9jb2RlJmZlZWRiYWNrX3VybD0iICsgcGxhbnlvX2dldF9jdXJyZW50X3VybCgpICsgIiZzaXRlX2lkPSIgKyBzaXRlX2lkOwogIGlmIChwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQuaW5kZXhPZignTScpPT0wKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImbWV0YXNpdGVfaWQ9IitwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQuc3Vic3RyKDEpOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdyZXNfZmlsdGVyX25hbWUnKSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAnJicgKyBwbGFueW9fZ2V0X3BhcmFtKCdyZXNfZmlsdGVyX25hbWUnKSArICc9JyArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfdmFsdWUnKTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnY2FsX2ZpbHRlcl9uYW1lJykpCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gJyYnICsgcGxhbnlvX2dldF9wYXJhbSgnY2FsX2ZpbHRlcl9uYW1lJykgKyAnPScgKyBwbGFueW9fZ2V0X3BhcmFtKCdjYWxfZmlsdGVyX3ZhbHVlJyk7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3NvcnQnKSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAnJnNvcnQ9JyArIHBsYW55b19nZXRfcGFyYW0oJ3NvcnQnKTsKICBwbGFueW9fZW1iZWRfY29kZShmb3JtX3VybCwgZm9ybV91cmxfcGFyYW1zKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3NpdGVfbGlzdChtZXRhc2l0ZV9pZCkgewogIHZhciBmb3JtX3VybCA9IHBsYW55b19zZXR0aW5ncy51bGFwX3NjcmlwdDsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHBsYW55b19zZXR0aW5ncy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3NpdGVfbGlzdF9jb2RlJmZlZWRiYWNrX3VybD0iICsgcGxhbnlvX2dldF9jdXJyZW50X3VybCgpICsgIiZtZXRhc2l0ZV9pZD0iICsgbWV0YXNpdGVfaWQ7CiAgcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsIGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9yZXNvdXJjZV9kZXNjKHJlc291cmNlX2lkLCBzaXRlX2lkKSB7CiAgaWYgKCFyZXNvdXJjZV9pZCkgewogICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cucGxhbnlvX3Jlc291cmNlX2lkKSkKICAgICAgcmVzb3VyY2VfaWQgPSB3aW5kb3cucGxhbnlvX3Jlc291cmNlX2lkOwogICAgZWxzZQogICAgICByZXNvdXJjZV9pZCA9ICcnOwogIH0KICB2YXIgZm9ybV91cmwgPSBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQ7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyhwbGFueW9fc2V0dGluZ3MucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9zaW5nbGVfcmVzb3VyY2VfY29kZSZmZWVkYmFja191cmw9IiArIHBsYW55b19nZXRfY3VycmVudF91cmwoKSArICImcmVzb3VyY2VfaWQ9IiArIHJlc291cmNlX2lkICsiJnNpdGVfaWQ9IitzaXRlX2lkOwogIHBsYW55b19lbWJlZF9jb2RlKGZvcm1fdXJsLCBmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBpbml0X3BsYW55bygpIHsKICBpZiAod2luZG93LkRydXBhbCAmJiAhcGxhbnlvX2lzc2V0KHdpbmRvdy5wbGFueW9fZG9udF91c2VfZHJ1cGFsX3BsdWdpbikpCiAgICBwbGFueW9fc2V0dGluZ3MgPSBEcnVwYWwuc2V0dGluZ3MucGxhbnlvOwogIGlmKGpRdWVyeSgnI3BsYW55b19wcmljZV9ob2xkZXInKS5sZW5ndGgpCiAgICBqUXVlcnkoJyNwbGFueW9fcHJpY2VfaG9sZGVyJykuY3NzKCdkaXNwbGF5Jywnbm9uZScpCiAgaWYgKCF3aW5kb3cuRHJ1cGFsIHx8IHBsYW55b19pc3NldCh3aW5kb3cucGxhbnlvX2RvbnRfdXNlX2RydXBhbF9wbHVnaW4pKSB7CiAgICBwbGFueW9fc2V0dGluZ3MudWxhcF9zY3JpcHQgPSBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKHBsYW55b19zZXR0aW5ncy51bGFwX3NjcmlwdCk7CiAgfQogIGlmIChwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQgPT0gJ2RlbW8nKQogICAgcGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkID0gMTE7IC8vIGRpc3BsYXkgdGhlIGRlbW8gc2l0ZQogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdsYW5nJykpCiAgICBwbGFueW9fc2V0dGluZ3MucGxhbnlvX2xhbmd1YWdlID0gcGxhbnlvX2dldF9wYXJhbSgnbGFuZycpOwogIGlmICghcGxhbnlvX2luaXRfc3BlY2lhbF9tb2RlcygpKSB7CiAgICB2YXIgcGxhbnlvX21vZGUgPSBnZXRfcGxhbnlvX21vZGUoKTsKICAgIGlmIChwbGFueW9fbW9kZSA9PSAnc2VhcmNoJykKICAgICAgcGxhbnlvX2VtYmVkX3NlYXJjaF9mb3JtKHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzZXJ2ZScpCiAgICAgIHBsYW55b19lbWJlZF9yZXNlcnZhdGlvbl9mb3JtKHBsYW55b19zZXR0aW5ncy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgncmVzb3VyY2VfaWQnKSk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzb3VyY2VfbGlzdCcpCiAgICAgIHBsYW55b19lbWJlZF9yZXNvdXJjZV9saXN0KChwbGFueW9fZ2V0X3BhcmFtKCdzaXRlX2lkJykgJiYgcGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkLmluZGV4T2YoJ00nKT09MCkgPyBwbGFueW9fZ2V0X3BhcmFtKCdzaXRlX2lkJykgOiBwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQpOwogICAgZWxzZSBpZiAocGxhbnlvX21vZGUgPT0gJ3NpdGVfbGlzdCcgJiYgcGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkLmluZGV4T2YoJ00nKT09MCkKICAgICAgcGxhbnlvX2VtYmVkX3NpdGVfbGlzdChwbGFueW9fc2V0dGluZ3MucGxhbnlvX3NpdGVfaWQuc3Vic3RyKDEpKTsKICAgIGVsc2UgaWYgKHBsYW55b19tb2RlID09ICdyZXNvdXJjZV9kZXNjJykKICAgICAgcGxhbnlvX2VtYmVkX3Jlc291cmNlX2Rlc2MocGxhbnlvX2dldF9wYXJhbSgncmVzb3VyY2VfaWQnKSwgcGxhbnlvX3NldHRpbmdzLnBsYW55b19zaXRlX2lkKTsKICAgIGVsc2UgaWYgKHBsYW55b19tb2RlID09ICdlbXB0eScpCiAgICAgIGpRdWVyeSgnI3BsYW55b19jb250ZW50JykuaHRtbCgnJyk7CiAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/planyo-jquery-utils.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gJElkJAoKZnVuY3Rpb24gcGxhbnlvX2dldF9uZXh0X21vbnRoKG1vbnRoLCB5ZWFyKSB7CiAgdmFyIG5leHRfbW9udGggPSBtb250aCArIDE7CiAgdmFyIG5leHRfeWVhciA9IHllYXI7CiAgaWYgKG5leHRfbW9udGggPT0gMTMpIHsKICAgIG5leHRfbW9udGggPSAxOwogICAgbmV4dF95ZWFyKys7CiAgfQogIHJldHVybiBuZXcgQXJyYXkobmV4dF9tb250aCwgbmV4dF95ZWFyKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9wcmV2X21vbnRoKG1vbnRoLCB5ZWFyKSB7CiAgdmFyIHByZXZfbW9udGggPSBtb250aCAtIDE7CiAgdmFyIHByZXZfeWVhciA9IHllYXI7CiAgaWYgKHByZXZfbW9udGggPT0gMCkgewogICAgcHJldl9tb250aCA9IDEyOwogICAgcHJldl95ZWFyLS07CiAgfQogIHJldHVybiBuZXcgQXJyYXkocHJldl9tb250aCwgcHJldl95ZWFyKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9tb250aF9zcGVjcyAobW9udGgsIHllYXIpIHsKICAvLyByZXR1cm5zIGFuIGFycmF5OiAob2Zmc2V0IG9mIHRoZSBmaXJzdCBkYXkgb2YgbW9udGgsICMgb2YgZGF5cyBpbiBsYXN0IG1vbnRoLCAjIG9mIGRheXMgaW4gY3VycmVudCBtb250aCwgbW9udGgsIHllYXIpCiAgICAgIAogIHZhciBkID0gbmV3IERhdGUoKTsKICBpZiAoIW1vbnRoIHx8ICF5ZWFyKQogICAgZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyICgpLCBkLmdldE1vbnRoICgpLCAxKTsKICBlbHNlCiAgICBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoIC0gMSwgMSk7CiAgdmFyIGZpcnN0X29mZnNldCA9IChkLmdldERheSgpICsgNikgJSA3OwogIHZhciBsYXN0X21vbnRoX2xhc3RfZGF0ZSA9IG5ldyBEYXRlKGQpOwogIGxhc3RfbW9udGhfbGFzdF9kYXRlLnNldERhdGUoZC5nZXREYXRlKCktMSk7CiAgdmFyIHByZXZfbW9udGhfY291bnQgPSBsYXN0X21vbnRoX2xhc3RfZGF0ZS5nZXREYXRlKCk7CiAgdmFyIHRoaXNfbW9udGhfbGFzdF9kYXRlID0gbmV3IERhdGUoZCk7CiAgdGhpc19tb250aF9sYXN0X2RhdGUuc2V0TW9udGgoZC5nZXRNb250aCgpICsgMSk7CiAgdGhpc19tb250aF9sYXN0X2RhdGUuc2V0RGF0ZSh0aGlzX21vbnRoX2xhc3RfZGF0ZS5nZXREYXRlKCkgLSAxKTsKICB2YXIgdGhpc19tb250aF9jb3VudCA9IHRoaXNfbW9udGhfbGFzdF9kYXRlLmdldERhdGUoKTsKICByZXR1cm4gbmV3IEFycmF5KGZpcnN0X29mZnNldCwgcHJldl9tb250aF9jb3VudCwgdGhpc19tb250aF9jb3VudCwgbW9udGgsIHllYXIpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2RheV9uYW1lKG4sIGlzX3Nob3J0KSB7CiAgLy8gZGF5IG5hbWVzIGFyZSBpbXBvcnRlZCBmcm9tIHBsYW55by5jb20gdXNpbmcgdGhlIGNob3NlbiBsYW5ndWFnZTsgb25seSBpZiBubyB0cmFuc2xhdGlvbnMgYXJlIGZvdW5kLCB0aGUgRW5nbGlzaCB2ZXJzaW9ucyBhcmUgdXNlZAogIHZhciBhcnIgPSBwbGFueW9faXNzZXQoZG9jdW1lbnQuc193ZWVrZGF5c19zaG9ydCkgPyAoaXNfc2hvcnQgPyBkb2N1bWVudC5zX3dlZWtkYXlzX3Nob3J0IDogZG9jdW1lbnQuc193ZWVrZGF5c19tZWQpIDoKICAgIChpc19zaG9ydCA/IG5ldyBBcnJheSgiTSIsICJUIiwgIlciLCAiVCIsICJGIiwgIlMiLCAiUyIpIDogbmV3IEFycmF5KCJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iKSk7CiAgcmV0dXJuIGFyciBbbiAlIDddOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X21vbnRoX25hbWUobiwgaXNfc2hvcnQpIHsKICAvLyBtb250aCBuYW1lcyBhcmUgaW1wb3J0ZWQgZnJvbSBwbGFueW8uY29tIHVzaW5nIHRoZSBjaG9zZW4gbGFuZ3VhZ2U7IG9ubHkgaWYgbm8gdHJhbnNsYXRpb25zIGFyZSBmb3VuZCwgdGhlIEVuZ2xpc2ggdmVyc2lvbnMgYXJlIHVzZWQKICB2YXIgYXJyID0gcGxhbnlvX2lzc2V0KGRvY3VtZW50LnNfbW9udGhzX3Nob3J0KSA/IChpc19zaG9ydCA/IGRvY3VtZW50LnNfbW9udGhzX3Nob3J0IDogZG9jdW1lbnQuc19tb250aHNfbG9uZykgOgogICAgKGlzX3Nob3J0ID8gbmV3IEFycmF5KCJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIpIDogbmV3IEFycmF5KCJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwgIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIikpOwogIHJldHVybiBhcnIgW24gLSAxXTsKfQoKZnVuY3Rpb24gcGxhbnlvX291dHB1dF9ob3VyX29ubHkoaG91ciwgZXVyb3BlYW5fc3R5bGVfcG9zdGZpeCkgewogIGlmIChkb2N1bWVudC50aW1lX2Zvcm1hdCAmJiBkb2N1bWVudC50aW1lX2Zvcm1hdC5pbmRleE9mKCdhJykgIT0gLTEpCiAgICByZXR1cm4gKChob3VyICUgMTIpID09IDAgPyAxMiA6IGhvdXIgJSAxMikgKyAnICcrIChob3VyIDwgMTIgPyAnYW0nIDogJ3BtJyk7CiAgcmV0dXJuIGhvdXIgKyAoZXVyb3BlYW5fc3R5bGVfcG9zdGZpeCA/IGV1cm9wZWFuX3N0eWxlX3Bvc3RmaXggOiAnJyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19vdXRwdXRfdGltZShob3VyLCBtaW51dGUpIHsKICB2YXIgdGltZV9zdHIgPSBkb2N1bWVudC50aW1lX2Zvcm1hdDsKICBpZiAoIXRpbWVfc3RyKQogICAgdGltZV9zdHIgPSAiSDppIjsKICB0aW1lX3N0ciA9IHRpbWVfc3RyLnJlcGxhY2UoIkgiLCBob3VyKTsKICB0aW1lX3N0ciA9IHRpbWVfc3RyLnJlcGxhY2UoImgiLCAoaG91ciAlIDEyKSA9PSAwID8gMTIgOiBob3VyICUgMTIpOwogIHRpbWVfc3RyID0gdGltZV9zdHIucmVwbGFjZSgiYSIsIGhvdXIgPCAxMiA/ICdhbScgOiAncG0nKTsKICB0aW1lX3N0ciA9IHRpbWVfc3RyLnJlcGxhY2UoImkiLCBtaW51dGUgPCAxMCA/ICcwJyArIG1pbnV0ZSA6IG1pbnV0ZSk7CiAgcmV0dXJuIHRpbWVfc3RyOwp9CgpmdW5jdGlvbiBwbGFueW9fb3V0cHV0X2RhdGUoeWVhciwgbW9udGgsIGRheSkgewogIHZhciBkYXRlID0gZG9jdW1lbnQuZGF0ZV9mb3JtYXQ7CiAgaWYgKCFkYXRlKQogICAgZGF0ZSA9ICJZLW0tZCI7CiAgZGF0ZSA9IGRhdGUucmVwbGFjZSgiWSIsIHllYXIpOwogIGRhdGUgPSBkYXRlLnJlcGxhY2UoIm0iLCBtb250aCA8IDEwID8gJzAnK21vbnRoIDogbW9udGgpOwogIGRhdGUgPSBkYXRlLnJlcGxhY2UoIk0iLCBwbGFueW9fZ2V0X21vbnRoX25hbWUobW9udGgsIHRydWUpKTsKICBkYXRlID0gZGF0ZS5yZXBsYWNlKCJkIiwgZGF5IDwgMTAgPyAnMCcgKyBkYXkgOiBkYXkpOwogIHJldHVybiBkYXRlOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2RheV9pbmZvX2Zvcl9tb250aChtb250aCwgeWVhcikgewogIHZhciBub3cgPSBuZXcgRGF0ZSgpOwoKICB2YXIgZGF5X2luZm8gPSBuZXcgQXJyYXkoKTsKICAKICB2YXIgbW9udGhfc3BlY3MgPSBwbGFueW9fZ2V0X21vbnRoX3NwZWNzKG1vbnRoLCB5ZWFyKTsKICB2YXIgZGF5X2l0ZXJhdG9yID0gbW9udGhfc3BlY3MgWzFdIC0gbW9udGhfc3BlY3MgWzBdICsgMTsKICB2YXIgZGF5c19pbl9tb250aF9sZWZ0ID0gbW9udGhfc3BlY3MgWzBdIC0gMTsKICB2YXIgbW9udGhfaXRlcmF0b3IgPSAtMTsgLy8gc3RhcnRpbmcgbGFzdCBtb250aCB1bmxlc3MgZGF5X2l0ZXJhdG9yIGlzIDEKICBpZiAoZGF5c19pbl9tb250aF9sZWZ0ID09IC0xKSB7CiAgICBtb250aF9pdGVyYXRvciA9IDA7CiAgICBkYXlzX2luX21vbnRoX2xlZnQgPSBtb250aF9zcGVjcyBbMl0gLSAxOwogICAgZGF5X2l0ZXJhdG9yID0gMTsKICB9CiAgZm9yICh2YXIgeSA9IDA7IHkgPCA2OyB5KyspIHsKICAgIGRheV9pbmZvIFt5XSA9IG5ldyBBcnJheSgpOwogICAgZm9yICh2YXIgeCA9IDA7IHggPCA3OyB4KyspIHsKICAgICAgZGF5X2luZm8gW3ldW3hdID0gbmV3IEFycmF5KCk7CiAgICAgIHZhciBkYXlfY2xhc3M7CiAgICAgIGlmIChtb250aCAtIDEgPT0gbm93LmdldE1vbnRoKCkgJiYgbW9udGhfaXRlcmF0b3IgPT0gMCAmJiBkYXlfaXRlcmF0b3IgPT0gbm93LmdldERhdGUoKSAmJiB5ZWFyID09IG5vdy5nZXRGdWxsWWVhciAoKSkKCWRheV9jbGFzcyA9ICdhY3RpdmVfZGF5JzsKICAgICAgZWxzZQoJZGF5X2NsYXNzID0gKG1vbnRoX2l0ZXJhdG9yID09IDAgPyAnY3VyX21vbnRoX2RheScgOiAnZXh0X21vbnRoX2RheScpOwoKICAgICAgZGF5X2luZm9beV1beF1bJ3R5cGUnXSA9IGRheV9jbGFzczsKICAgICAgZGF5X2luZm9beV1beF1bJ2RheSddID0gZGF5X2l0ZXJhdG9yOwogICAgICBkYXlfaW5mb1t5XVt4XVsnbW9udGgnXSA9IG1vbnRoICsgbW9udGhfaXRlcmF0b3I7CiAgICAgIGRheV9pbmZvW3ldW3hdWyd5ZWFyJ10gPSB5ZWFyOwogICAgICBpZiAobW9udGggKyBtb250aF9pdGVyYXRvciA9PSAwKSB7CglkYXlfaW5mb1t5XVt4XVsnbW9udGgnXSA9IDEyOwoJZGF5X2luZm9beV1beF1bJ3llYXInXSA9IHllYXIgLSAxOwogICAgICB9IGVsc2UgaWYgKG1vbnRoICsgbW9udGhfaXRlcmF0b3IgPT0gMTMpIHsKCWRheV9pbmZvW3ldW3hdWydtb250aCddID0gMTsKCWRheV9pbmZvW3ldW3hdWyd5ZWFyJ10gPSB5ZWFyICsgMTsKICAgICAgfQogICAgICAKICAgICAgaWYgKGRheXNfaW5fbW9udGhfbGVmdCA9PSAwKSB7Cgltb250aF9pdGVyYXRvcisrOwoJZGF5c19pbl9tb250aF9sZWZ0ID0gbW9udGhfc3BlY3MgWzJdOwoJZGF5X2l0ZXJhdG9yID0gMDsKICAgICAgfQogICAgICBkYXlzX2luX21vbnRoX2xlZnQtLTsKICAgICAgZGF5X2l0ZXJhdG9yKys7CiAgICB9CiAgfQoKICByZXR1cm4gZGF5X2luZm87Cn0KCmZ1bmN0aW9uIHBsYW55b19zaG93X2NhbGVuZGFyX3BpY2tlcihtb250aCwgeWVhciwgZGl2X2lkLCBkYXRlX2Z1bikgewogIHZhciBub3cgPSBuZXcgRGF0ZSgpOwogIGlmIChtb250aCA9PSBudWxsICYmIHllYXIgPT0gbnVsbCkgewogICAgbW9udGggPSBub3cuZ2V0TW9udGgoKSArIDE7CiAgICB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCk7CiAgfQogIGVsc2UgaWYgKG1vbnRoID09IDApIHsKICAgIG1vbnRoID0gMTI7CiAgICB5ZWFyLS07CiAgfQogIGVsc2UgaWYgKG1vbnRoID09IDEzKSB7CiAgICBtb250aCA9IDE7CiAgICB5ZWFyKys7CiAgfQogIHZhciBkYXlfaW5mbyA9IHBsYW55b19nZXRfZGF5X2luZm9fZm9yX21vbnRoKG1vbnRoLCB5ZWFyKTsKICAKICB2YXIgZGl2X2NvZGUgPSAiPHRhYmxlIGNsYXNzPSdjYWxwaWNrZXInPjxjYXB0aW9uPjxhIGNsYXNzPSduYXYnIGhyZWY9XCJqYXZhc2NyaXB0OnBsYW55b19zaG93X2NhbGVuZGFyX3BpY2tlcigiICsgKG1vbnRoLTEpICsgIiwgIiArIHllYXIgKyAiLCAnIiArIGRpdl9pZCArICInLCciICsgZGF0ZV9mdW4gKyAiJyk7XCI+JmxhcXVvOzwvYT48YSBjbGFzcz0nbmF2JyBocmVmPVwiamF2YXNjcmlwdDpwbGFueW9fc2hvd19jYWxlbmRhcl9waWNrZXIoIiArIChtb250aCArIDEpICsgIiwiICsgeWVhciArICIsICciICsgZGl2X2lkICsgIicsJyIgKyBkYXRlX2Z1biArICInKTtcIj4mcmFxdW87PC9hPiAiICsgcGxhbnlvX2dldF9tb250aF9uYW1lKG1vbnRoLCBmYWxzZSkgKyAiICIgKyB5ZWFyICsgIjwvY2FwdGlvbj48dGhlYWQ+PHRyPiI7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCA3OyBpKyspIHsKICAgIGRpdl9jb2RlICs9ICI8dGg+IiArIHBsYW55b19nZXRfZGF5X25hbWUoaSwgdHJ1ZSkgKyAiPC90aD4iOwogIH0KICBkaXZfY29kZSArPSAiPC90aGVhZD48dGJvZHk+IjsKICBmb3IgKHZhciB5ID0gMDsgeSA8IDY7IHkrKykgewogICAgZGl2X2NvZGUgKz0gIjx0cj4iOwogICAgZm9yICh2YXIgeCA9IDA7IHggPCA3OyB4KyspIHsKICAgICAgZGl2X2NvZGUgKz0gIjx0ZCBjbGFzcz0nIiArIGRheV9pbmZvW3ldW3hdWyd0eXBlJ10gKyAiJyBvbmNsaWNrPSciICsgZGF0ZV9mdW4gKyAiKCIgKyBkYXlfaW5mb1t5XVt4XVsnZGF5J10gKyAiLCIgKyBkYXlfaW5mb1t5XVt4XVsnbW9udGgnXSArICIsIiArIGRheV9pbmZvW3ldW3hdWyd5ZWFyJ10gKyAiKSc+IiArIGRheV9pbmZvW3ldW3hdWydkYXknXSArICI8L3RkPiI7CiAgICB9CiAgICBkaXZfY29kZSArPSAiPC90cj4iOwogIH0KICBkaXZfY29kZSArPSAiPC90cj4iOwogIGRpdl9jb2RlICs9ICI8L3Rib2R5PjwvdGFibGU+IjsKICBqUXVlcnkoJyMnICsgZGl2X2lkKS5odG1sKGRpdl9jb2RlKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9wcmV2X2RheShkYXksIG1vbnRoLCB5ZWFyLCBvZmZzZXQpIHsKICAvLyByZXR1cm5zIGFuIGFycmF5OiAoZGF5LCBtb250aCwgeWVhcikKICAvLyBub3RlOiBvZmZzZXQgbXVzdCBiZSA8IDI4CiAgCiAgdmFyIHNwZWNzID0gcGxhbnlvX2dldF9tb250aF9zcGVjcyhtb250aCwgeWVhcik7CgogIHZhciByZXRfdmFsID0gbmV3IEFycmF5ICgpOwogIGlmICghb2Zmc2V0KSBvZmZzZXQgPSAxOwogIGlmIChkYXkgLSBvZmZzZXQgPD0gMCkgewogICAgcmV0X3ZhbFswXSA9IHNwZWNzWzFdIC0gb2Zmc2V0ICsgZGF5OwogICAgcmV0X3ZhbFsxXSA9IG1vbnRoIC0gMTsKICAgIHJldF92YWxbMl0gPSB5ZWFyOwogICAgaWYgKHJldF92YWxbMV0gPT0gMCkgewogICAgICByZXRfdmFsWzFdID0gMTI7CiAgICAgIHJldF92YWxbMl0gPSB5ZWFyIC0gMTsKICAgIH0KICB9CiAgZWxzZSB7CiAgICByZXRfdmFsWzBdID0gZGF5IC0gb2Zmc2V0OwogICAgcmV0X3ZhbFsxXSA9IG1vbnRoOwogICAgcmV0X3ZhbFsyXSA9IHllYXI7CiAgfQogIHJldHVybiByZXRfdmFsOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X25leHRfZGF5KGRheSwgbW9udGgsIHllYXIsIG9mZnNldCkgewogIC8vIHJldHVybnMgYW4gYXJyYXk6IChkYXksIG1vbnRoLCB5ZWFyKQogIC8vIG5vdGU6IG9mZnNldCBtdXN0IGJlIDwgMjgKICAKICB2YXIgc3BlY3MgPSBwbGFueW9fZ2V0X21vbnRoX3NwZWNzKG1vbnRoLCB5ZWFyKTsKCiAgdmFyIHJldF92YWwgPSBuZXcgQXJyYXkgKCk7CiAgaWYgKCFvZmZzZXQpIG9mZnNldCA9IDE7CiAgaWYgKGRheSArIG9mZnNldCA+IHNwZWNzIFsyXSkgewogICAgcmV0X3ZhbFswXSA9IGRheSArIG9mZnNldCAtIHNwZWNzIFsyXTsKICAgIHJldF92YWxbMV0gPSBtb250aCArIDE7CiAgICByZXRfdmFsWzJdID0geWVhcjsKICAgIGlmIChyZXRfdmFsWzFdID09IDEzKSB7CiAgICAgIHJldF92YWxbMV0gPSAxOwogICAgICByZXRfdmFsWzJdID0geWVhciArIDE7CiAgICB9CiAgfQogIGVsc2UgewogICAgcmV0X3ZhbFswXSA9IGRheSArIG9mZnNldDsKICAgIHJldF92YWxbMV0gPSBtb250aDsKICAgIHJldF92YWxbMl0gPSB5ZWFyOwogIH0KICByZXR1cm4gcmV0X3ZhbDsKfQoKLy8gcmV0dXJucyBhbiBhcnJheSAobWluLCBtYXgpIG9mIG1pbiBhbmQgbWF4IHZhbHVlcyBvZiBhcnJheQovLyBpZiBhcnJheSdzIHZhbHVlcyBhcmUgYW4gYXJyYXkgb2YgcHJvcGVydGllcywgcHJvcGVydHkgdG8gYmUgdXNlZCBjYW4gYmUgc3BlY2lmaWVkCi8vIG90aGVyd2lzZSwgbGVhdmUgcHJvcGVydHkgbnVsbApmdW5jdGlvbiBwbGFueW9fZ2V0X2FycmF5X21pbl9tYXgoYXJyLCBwcm9wZXJ0eSkgewogIHZhciBtaW47CiAgdmFyIG1heDsKICB2YXIgbiA9IDA7CiAgZm9yICh2YXIgaXQgaW4gYXJyKSB7CiAgICB2YXIgdmFsID0gKHByb3BlcnR5ID8gaXQgW3Byb3BlcnR5XSA6IGl0KTsKICAgIGlmIChuID09IDAgfHwgdmFsIDwgbWluKQogICAgICBtaW4gPSB2YWw7CiAgICBpZiAobiA9PSAwIHx8IHZhbCA+IG1heCkKICAgICAgbWF4ID0gdmFsOwogICAgbisrOwogIH0KICByZXR1cm4gbmV3IEFycmF5KG1pbixtYXgpOwp9CgpmdW5jdGlvbiBwbGFueW9fY29uZmlybV9hY3Rpb25fd2l0aF9pbnB1dCh0ZXh0KSB7CiAgcmV0dXJuIHByb21wdCh0ZXh0KTsKfQoKZnVuY3Rpb24gcGxhbnlvX2NvbmZpcm1fYWN0aW9uKHRleHQpIHsKICBpZiAoY29uZmlybSh0ZXh0KSkKICAgIHJldHVybiB0cnVlOwogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2lzc2V0KG9iaiwgZDEsIGQyLCBkMywgZDQsIGQ1KSB7CiAgdHJ5IHsKICAgIGlmIChkNSAhPSBudWxsKQogICAgICByZXR1cm4gb2JqW2QxXVtkMl1bZDNdW2Q0XVtkNV0gIT0gdW5kZWZpbmVkOwogICAgaWYgKGQ0ICE9IG51bGwpCiAgICAgIHJldHVybiBvYmpbZDFdW2QyXVtkM11bZDRdICE9IHVuZGVmaW5lZDsKICAgIGlmIChkMyAhPSBudWxsKQogICAgICByZXR1cm4gb2JqW2QxXVtkMl1bZDNdICE9IHVuZGVmaW5lZDsKICAgIGlmIChkMiAhPSBudWxsKQogICAgICByZXR1cm4gb2JqW2QxXVtkMl0gIT0gdW5kZWZpbmVkOwogICAgaWYgKGQxICE9IG51bGwpCiAgICAgIHJldHVybiBvYmpbZDFdICE9IHVuZGVmaW5lZDsKICAgIHJldHVybiBvYmogIT0gdW5kZWZpbmVkOwogIH0KICBjYXRjaCAoZXJyKSB7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX2Nsb3NlX2NhbGVuZGFyKCkgewogIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlcikgewogICAgdmFyIGVsID0galF1ZXJ5KCcjJyArIGRvY3VtZW50LmN1cnJlbnRfcGlja2VyICsgJ2NhbCcpOwogICAgZWwuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpOwogICAgZWwuY3NzKCdsZWZ0JywgJy0xMDAwJyk7CiAgfQp9CgpmdW5jdGlvbiBjb252ZXJ0X2VudGl0aWVzX3RvX3V0ZjggKHN0cikgewogIHZhciBpID0gc3RyLmluZGV4T2YgKCImIyIpOw0KICB3aGlsZSAoaSAhPSAtMSkgewogICAgdmFyIGlTQyA9IHN0ci5pbmRleE9mICgiOyIsIGkpOwogICAgaWYgKGlTQyAhPSAtMSAmJiAoaVNDIC0gaSAtIDIpID4gMCAmJiAoaVNDIC0gaSAtIDIpIDw9IDUpIHsKICAgICAgdmFyIGRlY2ltYWwgPSBzdHIuc3Vic3RyIChpICsgMiwgaVNDIC0gaSAtIDIpOwogICAgICBpZiAoIWlzTmFOIChkZWNpbWFsKSAmJiBkZWNpbWFsID09IHBhcnNlSW50IChkZWNpbWFsKSkgewogICAgICAgIHN0ciA9IHN0ci5zdWJzdHIgKDAsIGkpICsgU3RyaW5nLmZyb21DaGFyQ29kZSAoZGVjaW1hbCkgKyAoKHN0ci5sZW5ndGggPiBpU0MgKyAxKSA/IHN0ci5zdWJzdHIgKGlTQyArIDEpIDogJycpOwogICAgICB9CiAgICB9CiAgICBpID0gc3RyLmluZGV4T2YgKCImIyIsIGkgKyAxKTsKICB9ICAKICByZXR1cm4gc3RyOwp9CgpmdW5jdGlvbiBwbGFueW9fY2FsZW5kYXJfZGF0ZV9jaG9zZW4oZGF5LCBtb250aCwgeWVhcikgewogIHZhciBwaWNrZXIgPSBqUXVlcnkoJyMnICsgZG9jdW1lbnQuY3VycmVudF9waWNrZXIpOwogIHBpY2tlci52YWwoY29udmVydF9lbnRpdGllc190b191dGY4IChwbGFueW9fb3V0cHV0X2RhdGUoeWVhciwgbW9udGgsIGRheSkpKTsKICBpZiAoZG9jdW1lbnQuY3VycmVudF9waWNrZXJfb25jaGFuZ2UpCiAgICBldmFsKGRvY3VtZW50LmN1cnJlbnRfcGlja2VyX29uY2hhbmdlKTsKICBkb2N1bWVudC5wcmV2aW91c19tb250aF9waWNrZWQgPSBtb250aDsKICBkb2N1bWVudC5wcmV2aW91c195ZWFyX3BpY2tlZCA9IHllYXI7CiAgcGxhbnlvX2Nsb3NlX2NhbGVuZGFyKCk7CiAgaWYgKHdpbmRvdy5qc19uYXYpIHsKICAgIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9PSAnc3RhcnRfZGF0ZScpCiAgICAgIGpzX25hdihudWxsLCBtb250aCwgeWVhcik7CiAgICBlbHNlIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9PSAnb25lX2RhdGUnIHx8IGRvY3VtZW50LmN1cnJlbnRfcGlja2VyID09ICdkYXRlJykKICAgICAganNfbmF2KGRheSwgbW9udGgsIHllYXIpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX3Nob3dfY2FsZW5kYXIoY2FsLG9uY2hhbmdlKSB7CiAgdmFyIGNhbF9lbCA9IGpRdWVyeSgnIycgKyBjYWwpOwogIHZhciBjYWxfcmVmX2VsID0galF1ZXJ5KCcjJyArIGNhbCArICdjYWxyZWYnKTsKICB2YXIgb2xkX2RhdGUgPSBEYXRlLnBhcnNlKGNhbF9lbC52YWwoKSk7CiAgaWYgKCFjYWxfZWwudmFsKCkpIHsKICAgIGlmICghZG9jdW1lbnQuY3VycmVudF9waWNrZXIpIHsKICAgICAgaWYgKGpRdWVyeSgnI3N0YXJ0X2RhdGUnKSkKICAgICAgICBkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9ICdzdGFydF9kYXRlJzsKICAgICAgZWxzZSBpZiAoalF1ZXJ5KCcjb25lX2RhdGUnKSkKICAgICAgICBkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9ICdvbmVfZGF0ZSc7CiAgICB9CiAgICB2YXIgcGlja2VyID0galF1ZXJ5KCcjJyArIGRvY3VtZW50LmN1cnJlbnRfcGlja2VyKTsKICAgIGlmIChwaWNrZXIpCiAgICAgIG9sZF9kYXRlID0gRGF0ZS5wYXJzZShwaWNrZXIudmFsKCkpOwogIH0KICBkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9IGNhbDsKICBkb2N1bWVudC5jdXJyZW50X3BpY2tlcl9vbmNoYW5nZSA9IG9uY2hhbmdlOwogIHZhciBtb250aCA9IG51bGw7CiAgdmFyIHllYXIgPSBudWxsOwogIGlmIChkb2N1bWVudC5wcmV2aW91c195ZWFyX3BpY2tlZCAhPSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5wcmV2aW91c19tb250aF9waWNrZWQgIT0gJ3VuZGVmaW5lZCcpIHsKICAgIG1vbnRoID0gZG9jdW1lbnQucHJldmlvdXNfbW9udGhfcGlja2VkOwogICAgeWVhciA9IGRvY3VtZW50LnByZXZpb3VzX3llYXJfcGlja2VkOwogIH0KICBpZiAob2xkX2RhdGUgIT0gJ3VuZGVmaW5lZCcgJiYgb2xkX2RhdGUgPiAwKSB7CiAgICB2YXIgb2xkX2RhdGVfb2JqID0gbmV3IERhdGUoKTsKICAgIG9sZF9kYXRlX29iai5zZXRUaW1lKG9sZF9kYXRlKTsKICAgIG1vbnRoID0gb2xkX2RhdGVfb2JqLmdldE1vbnRoKCkgKyAxOwogICAgeWVhciA9IG9sZF9kYXRlX29iai5nZXRGdWxsWWVhcigpOwogIH0KICB2YXIgY2FsX2NhbF9lbCA9IGpRdWVyeSgnIycgKyBjYWwgKyAnY2FsJyk7CiAgaWYgKGNhbF9jYWxfZWwucGFyZW50KCkgIT0galF1ZXJ5KCdib2R5JykpIAogICAgalF1ZXJ5KCdib2R5JykuYXBwZW5kKGNhbF9jYWxfZWwpOwogIHBsYW55b19zaG93X2NhbGVuZGFyX3BpY2tlciAobW9udGgsIHllYXIsIGNhbCArICdjYWwnLCAncGxhbnlvX2NhbGVuZGFyX2RhdGVfY2hvc2VuJyk7CiAgY2FsX2NhbF9lbC5jc3MoJ2xlZnQnLCBjYWxfcmVmX2VsLm9mZnNldCgpLmxlZnQgKyAncHgnKTsKICBjYWxfY2FsX2VsLmNzcygndG9wJywgKGNhbF9yZWZfZWwub2Zmc2V0KCkudG9wICsgY2FsX3JlZl9lbC5oZWlnaHQoKSArIDUpICsgJ3B4Jyk7CiAgY2FsX2NhbF9lbC5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X3BhcmFtKG5hbWUpIHsKICBuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFtdLywiXFxcWyIpLnJlcGxhY2UoL1tcXV0vLCJcXFxdIik7CiAgdmFyIHJlZ2V4UyA9ICJbXFw/Jl0iK25hbWUrIj0oW14mI10qKSI7CiAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFMpOwogIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyh3aW5kb3cubG9jYXRpb24uaHJlZik7CiAgaWYgKHJlc3VsdHMgPT0gbnVsbCkKICAgIHJldHVybiBudWxsOwogIGVsc2UKICAgIHJldHVybiByZXN1bHRzWzFdOwp9CgpmdW5jdGlvbiBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKG5hbWUpIHsKICB2YXIgbG9jID0gd2luZG93LnBsYW55b19maWxlc19sb2NhdGlvbjsKICBpZiAoIWxvYykKICAgIGxvYyA9IHBsYW55b19zZXR0aW5ncy5wbGFueW9fZmlsZXNfbG9jYXRpb247CiAgaWYgKGxvYy5sZW5ndGggPT0gMCB8fCBsb2MubGFzdEluZGV4T2YoJy8nKSA9PSBsb2MubGVuZ3RoIC0gMSkKICAgIHJldHVybiBsb2MgKyBuYW1lOwogIGVsc2UKICAgIHJldHVybiBsb2MgKyAnLycgKyBuYW1lOwp9CgpmdW5jdGlvbiBzaG93X3Byb2R1Y3RfaW1hZ2VzIChwYXJlbnRfLCBpZCkgewogIHZhciBib3ggPSBqUXVlcnkoJyNwcm9kdWN0X2JveF8nICsgaWQpOwogIHZhciBwYXJlbnQgPSBqUXVlcnkgKHBhcmVudF8pOwogIGlmIChib3ggJiYgcGFyZW50KSB7ICAgIAogICAgYm94LmNzcygndG9wJywgcGFyZW50Lm9mZnNldCgpLnRvcCArICdweCcpOwogICAgYm94LmNzcygnbGVmdCcsIChwYXJlbnQub2Zmc2V0KCkubGVmdCArIDMwKSArICdweCcpOwogICAgYm94LmNzcygnZGlzcGxheScsICcnKTsKICB9ICAKfQoKZnVuY3Rpb24gaGlkZV9wcm9kdWN0X2ltYWdlcyAoaWQpIHsKICB2YXIgYm94ID0galF1ZXJ5ICgnI3Byb2R1Y3RfYm94XycgKyBpZCk7CiAgaWYgKGJveCkgewogICAgYm94LmNzcygnZGlzcGxheScsICdub25lJyk7CiAgfQp9]]></data>
	</file>
	<file>
	  <filename>/planyo-plugin-impl.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJHBsYW55b19zZXRfY29udGVudF90eXBlKSkKICBAaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIpOwokaGVhZGVyX3dyaXR0ZW4gPSB0cnVlOwoKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvdWxhcC5waHAnKTsKCmZ1bmN0aW9uIHBsYW55b19nZXRfcGFyYW0oJG5hbWUpIHsKICBnbG9iYWwgJF9HRVQ7CiAgZ2xvYmFsICRfUE9TVDsKICBpZiAoaXNzZXQgKCRfR0VUIFskbmFtZV0pKQogICAgcmV0dXJuICRfR0VUIFskbmFtZV07CiAgaWYgKGlzc2V0ICgkX1BPU1QgWyRuYW1lXSkpCiAgICByZXR1cm4gJF9QT1NUIFskbmFtZV07CiAgcmV0dXJuIG51bGw7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfY29udGVudHMoJHVybCwgJHBhcmFtcykgewogIHJldHVybiBzZW5kX2h0dHBfcG9zdCgkdXJsLCAkcGFyYW1zKTsKfQoKZnVuY3Rpb24gcGxhbnlvX291dHB1dF9yZXNvdXJjZV9saXN0KCkgewogIGdsb2JhbCAkcGxhbnlvX3NpdGVfaWQsICRwbGFueW9fbWV0YXNpdGVfaWQsICRwbGFueW9fZmVlZGJhY2tfdXJsLCAkcGxhbnlvX2RlZmF1bHRfbW9kZSwgJHBsYW55b19sYW5ndWFnZSwgJHBsYW55b19maWxlc19sb2NhdGlvbjsKICAkcGxhbnlvX2RlZmF1bHRfbW9kZSA9ICdlbXB0eSc7CiAgJGxhbmd1YWdlID0gJHBsYW55b19sYW5ndWFnZTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnbGFuZycpKQogICAgJGxhbmd1YWdlID0gcGxhbnlvX2dldF9wYXJhbSgnbGFuZycpOwogIGlmICgkcGxhbnlvX21ldGFzaXRlX2lkICYmIHBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSkgewogICAgJHNpdGVfaWRfdXNlZCA9IHBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKTsKICAgICRtZXRhc2l0ZV9pZF91c2VkID0gJHBsYW55b19tZXRhc2l0ZV9pZDsKICB9CiAgZWxzZSBpZiAoJHBsYW55b19zaXRlX2lkICYmICEkcGxhbnlvX21ldGFzaXRlX2lkKSB7CiAgICAkc2l0ZV9pZF91c2VkID0gJHBsYW55b19zaXRlX2lkOwogICAgJG1ldGFzaXRlX2lkX3VzZWQgPSAnJzsKICB9CiAgZWxzZSB7CiAgICAkc2l0ZV9pZF91c2VkID0gJyc7CiAgICAkbWV0YXNpdGVfaWRfdXNlZCA9ICRwbGFueW9fbWV0YXNpdGVfaWQ7CiAgfQogICRwYXJhbXMgPSBhcnJheSgnbW9kdmVyJz0+JzEuNicsJ3NpdGVfaWQnPT4kc2l0ZV9pZF91c2VkLCdtZXRhc2l0ZV9pZCc9PiRtZXRhc2l0ZV9pZF91c2VkLCAnbW9kZSc9PidkaXNwbGF5X3Jlc291cmNlX2xpc3RfY29kZScsJ2ZlZWRiYWNrX3VybCc9PiRwbGFueW9fZmVlZGJhY2tfdXJsLCAnbGFuZ3VhZ2UnPT4kbGFuZ3VhZ2UgPyAkbGFuZ3VhZ2UgOiAnJywgcGxhbnlvX2dldF9wYXJhbSgnc29ydCcpLCAncmVzX2ZpbHRlcl9uYW1lJz0+cGxhbnlvX2dldF9wYXJhbSgncmVzX2ZpbHRlcl9uYW1lJyksICdyZXNfZmlsdGVyX3ZhbHVlJz0+cGxhbnlvX2dldF9wYXJhbSgncmVzX2ZpbHRlcl92YWx1ZScpLCAncGxhbnlvX2ZpbGVzX2xvY2F0aW9uJz0+JHBsYW55b19maWxlc19sb2NhdGlvbik7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfbmFtZScpICYmIHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfdmFsdWUnKSkgewogICAgJHBhcmFtc1sncmVzX2ZpbHRlcl9uYW1lJ10gPSBwbGFueW9fZ2V0X3BhcmFtKCdyZXNfZmlsdGVyX25hbWUnKTsKICAgICRwYXJhbXNbJ3Jlc19maWx0ZXJfdmFsdWUnXSA9IHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfdmFsdWUnKTsKICB9CiAgJHBhcmFtc1sndXNlcl9hZ2VudCddID0gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOwogIGVjaG8gcGxhbnlvX2dldF9jb250ZW50cygoKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb24nKSA/ICJodHRwcyIgOiAiaHR0cCIpLiI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwIiwgJHBhcmFtcyk7CiAgZWNobyAiPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPlxudmFyIGZvcmNlX2VtcHR5X21vZGU9dHJ1ZTtcbjwvc2NyaXB0PlxuIjsKfQoKZnVuY3Rpb24gcGxhbnlvX291dHB1dF9zaXRlX2xpc3QoKSB7CiAgZ2xvYmFsICRwbGFueW9fbWV0YXNpdGVfaWQsICRwbGFueW9fZmVlZGJhY2tfdXJsLCAkcGxhbnlvX2RlZmF1bHRfbW9kZSwgJHBsYW55b19sYW5ndWFnZSwgJHBsYW55b19maWxlc19sb2NhdGlvbjsKICAkcGxhbnlvX2RlZmF1bHRfbW9kZSA9ICdlbXB0eSc7CiAgJGxhbmd1YWdlID0gJHBsYW55b19sYW5ndWFnZTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnbGFuZycpKQogICAgJGxhbmd1YWdlID0gcGxhbnlvX2dldF9wYXJhbSgnbGFuZycpOwogICRwYXJhbXMgPSBhcnJheSgnbW9kdmVyJz0+JzEuNicsJ3NpdGVfaWQnPT4iIiwnbWV0YXNpdGVfaWQnPT4gJHBsYW55b19tZXRhc2l0ZV9pZCwgJ21vZGUnPT4nZGlzcGxheV9zaXRlX2xpc3RfY29kZScsJ2ZlZWRiYWNrX3VybCc9PiRwbGFueW9fZmVlZGJhY2tfdXJsLCAnbGFuZ3VhZ2UnPT4kbGFuZ3VhZ2UgPyAkbGFuZ3VhZ2UgOiAnJywgJ3NvcnQnPT5wbGFueW9fZ2V0X3BhcmFtKCdzb3J0JyksICdjYWxfZmlsdGVyX25hbWUnPT5wbGFueW9fZ2V0X3BhcmFtKCdjYWxfZmlsdGVyX25hbWUnKSwgJ2NhbF9maWx0ZXJfdmFsdWUnPT5wbGFueW9fZ2V0X3BhcmFtKCdjYWxfZmlsdGVyX3ZhbHVlJyksICdwbGFueW9fZmlsZXNfbG9jYXRpb24nPT4kcGxhbnlvX2ZpbGVzX2xvY2F0aW9uKTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnY2FsX2ZpbHRlcl9uYW1lJykgJiYgcGxhbnlvX2dldF9wYXJhbSgnY2FsX2ZpbHRlcl92YWx1ZScpKSB7CiAgICAkcGFyYW1zWydjYWxfZmlsdGVyX25hbWUnXSA9IHBsYW55b19nZXRfcGFyYW0oJ2NhbF9maWx0ZXJfbmFtZScpOwogICAgJHBhcmFtc1snY2FsX2ZpbHRlcl92YWx1ZSddID0gcGxhbnlvX2dldF9wYXJhbSgnY2FsX2ZpbHRlcl92YWx1ZScpOwogIH0KICAkcGFyYW1zWyd1c2VyX2FnZW50J10gPSAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ107CiAgZWNobyBwbGFueW9fZ2V0X2NvbnRlbnRzKCgoaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pICYmICRfU0VSVkVSWydIVFRQUyddID09ICdvbicpID8gImh0dHBzIiA6ICJodHRwIikuIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAiLCAkcGFyYW1zKTsKICBlY2hvICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+XG52YXIgZm9yY2VfZW1wdHlfbW9kZT10cnVlO1xuPC9zY3JpcHQ+XG4iOwp9CgpmdW5jdGlvbiBwbGFueW9fb3V0cHV0X3Jlc291cmNlX2RldGFpbHMoKSB7CiAgZ2xvYmFsICRwbGFueW9fc2l0ZV9pZCwgJHBsYW55b19tZXRhc2l0ZV9pZCwgJHBsYW55b19mZWVkYmFja191cmwsICRwbGFueW9fZGVmYXVsdF9tb2RlLCAkcGxhbnlvX2xhbmd1YWdlLCAkcGxhbnlvX2ZpbGVzX2xvY2F0aW9uLCAkcGxhbnlvX3Jlc291cmNlX2lkOwogICRwbGFueW9fZGVmYXVsdF9tb2RlID0gJ2VtcHR5JzsKICAkbGFuZ3VhZ2UgPSAkcGxhbnlvX2xhbmd1YWdlOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdsYW5nJykpCiAgICAkbGFuZ3VhZ2UgPSBwbGFueW9fZ2V0X3BhcmFtKCdsYW5nJyk7CiAgZWNobyBwbGFueW9fZ2V0X2NvbnRlbnRzKChpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gJ29uJyA/ICJodHRwcyIgOiAiaHR0cCIpLiI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwIiwgYXJyYXkoJ21vZHZlcic9PicxLjYnLCdzaXRlX2lkJz0+KCRwbGFueW9fc2l0ZV9pZCAmJiAhJHBsYW55b19tZXRhc2l0ZV9pZCA/ICRwbGFueW9fc2l0ZV9pZCA6ICIiKSwnbWV0YXNpdGVfaWQnPT4oJHBsYW55b19tZXRhc2l0ZV9pZCA/ICRwbGFueW9fbWV0YXNpdGVfaWQgOiAiIiksICdyZXNvdXJjZV9pZCc9PigkcGxhbnlvX3Jlc291cmNlX2lkID8gJHBsYW55b19yZXNvdXJjZV9pZCA6IHBsYW55b19nZXRfcGFyYW0oJ3Jlc291cmNlX2lkJykpLCAnbW9kZSc9PidkaXNwbGF5X3NpbmdsZV9yZXNvdXJjZV9jb2RlJywnZmVlZGJhY2tfdXJsJz0+JHBsYW55b19mZWVkYmFja191cmwsICdsYW5ndWFnZSc9PiRsYW5ndWFnZSA/ICRsYW5ndWFnZSA6ICcnLCAndXNlcl9hZ2VudCc9PiRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwgJ3BsYW55b19maWxlc19sb2NhdGlvbic9PiRwbGFueW9fZmlsZXNfbG9jYXRpb24pKTsKICBlY2hvICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+XG52YXIgZm9yY2VfZW1wdHlfbW9kZT10cnVlO1xuPC9zY3JpcHQ+XG4iOwp9CgpmdW5jdGlvbiBwbGFueW9faXNfcHJlc2VudGF0aW9uX21vZGUoKSB7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0gKCdzdWJtaXR0ZWQnKSB8fCBwbGFueW9fZ2V0X3BhcmFtICgncHJlZmlsbCcpIHx8IHBsYW55b19nZXRfcGFyYW0oJ21vZGUnKSkKICAgIHJldHVybiBmYWxzZTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgncHJlc2VudGF0aW9uX21vZGUnKSA9PSAnMCcpCiAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCmZ1bmN0aW9uIHBsYW55b19zZXR1cCgpIHsKICBnbG9iYWwgJHBsYW55b19mZWVkYmFja191cmwsICRwbGFueW9fYWx3YXlzX3VzZV9hamF4LCAkcGxhbnlvX3NpdGVfaWQsICRwbGFueW9fbWV0YXNpdGVfaWQsICRwbGFueW9fZGVmYXVsdF9tb2RlLCAkcGxhbnlvX3Jlc291cmNlX2lkLCAkcGxhbnlvX2ZpbGVzX2xvY2F0aW9uLCAkcGxhbnlvX2xhbmd1YWdlLCAkcGxhbnlvX3NvcnRfZmllbGRzLCAkcGxhbnlvX2V4dHJhX3NlYXJjaF9maWVsZHMsICRwbGFueW9fanNfbGlicmFyeV91c2VkLCAkcGxhbnlvX2luY2x1ZGVfanNfbGlicmFyeTsKCiAgaWYgKCRwbGFueW9fZGVmYXVsdF9tb2RlID09ICdlbXB0eScgJiYgKHBsYW55b19nZXRfcGFyYW0oJ3Jlc291cmNlX2lkJykgfHwgJHBsYW55b19yZXNvdXJjZV9pZCkpCiAgICAkcGxhbnlvX2RlZmF1bHRfbW9kZSA9ICdyZXNlcnZlJzsKICAkcGxhbnlvX21ldGFzaXRlX2lkID0gbnVsbDsKICBpZiAoISRwbGFueW9fc2l0ZV9pZCB8fCAkcGxhbnlvX3NpdGVfaWQgPT0gJ2RlbW8nKQogICAgJHBsYW55b19zaXRlX2lkID0gMTE7ICAvLyBkZW1vIHNpdGUKICBlbHNlIGlmIChzdWJzdHIoJHBsYW55b19zaXRlX2lkLCAwLCAxKSA9PSAnTScpCiAgICAkcGxhbnlvX21ldGFzaXRlX2lkID0gc3Vic3RyKCRwbGFueW9fc2l0ZV9pZCwgMSk7ICAvLyBtZXRhc2l0ZSBJRDogc2V0IG9ubHkgZm9yIG1ldGFzaXRlcwoKICBpZiAoISRwbGFueW9fYWx3YXlzX3VzZV9hamF4ICYmICgkcGxhbnlvX2RlZmF1bHRfbW9kZSA9PSAncmVzb3VyY2VzJyB8fCAkcGxhbnlvX2RlZmF1bHRfbW9kZSA9PSAnc2l0ZXMnKSkgewogICAgJHBsYW55b19mZWVkYmFja191cmwgPSBwbGFueW9fZ2V0X3BhcmFtKCdmZWVkYmFja191cmwnKTsKICAgIGlmICghJHBsYW55b19mZWVkYmFja191cmwpCiAgICAgICRwbGFueW9fZmVlZGJhY2tfdXJsID0gKChpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gJ29uJykgPyAiaHR0cHMiIDogImh0dHAiKS4iOi8vIiAuICRfU0VSVkVSWydTRVJWRVJfTkFNRSddIC4gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ107CiAgICAKICAgIGlmIChwbGFueW9faXNfcHJlc2VudGF0aW9uX21vZGUoKSkgewogICAgICBpZiAocGxhbnlvX2dldF9wYXJhbSgncmVzb3VyY2VfaWQnKSB8fCAkcGxhbnlvX3Jlc291cmNlX2lkKQogICAgICAgIHBsYW55b19vdXRwdXRfcmVzb3VyY2VfZGV0YWlscygpOwogICAgICBlbHNlIGlmICgkcGxhbnlvX21ldGFzaXRlX2lkICYmICRwbGFueW9fZGVmYXVsdF9tb2RlICE9ICdyZXNvdXJjZXMnICYmICFwbGFueW9fZ2V0X3BhcmFtKCdzaXRlX2lkJykpCiAgICAgICAgcGxhbnlvX291dHB1dF9zaXRlX2xpc3QoKTsKICAgICAgZWxzZQogICAgICAgIHBsYW55b19vdXRwdXRfcmVzb3VyY2VfbGlzdCgpOwogICAgfQogIH0KCj8+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLy8gdGhlc2UgdmFsdWVzIGFyZSBjb3BpZWQgZnJvbSB0aGUgUEhQIHNldHRpbmdzOyBwbGVhc2UgdXBkYXRlIHRoZSBvcmlnaW5hbCB2YWx1ZXMgYWJvdmUgYW5kIGxlYXZlIHRoZXNlIHVuY2hhbmdlZAp2YXIgdWxhcF9zY3JpcHQ9InVsYXAucGhwIjsgLy8gZmlsZSBuYW1lIHRvIG9uZSBvZiB0aGUgVUxBUCBzY3JpcHRzLCBlLmcuIHVsYXAucGhwCnZhciBwbGFueW9fc2l0ZV9pZD0nPD9waHAgZWNobyAkcGxhbnlvX3NpdGVfaWQ7Pz4nOyAvLyBJRCBvZiB5b3VyIHBsYW55byBzaXRlCnZhciBwbGFueW9fcmVzb3VyY2VfaWQ9Jzw/cGhwIGlmICgkcGxhbnlvX3Jlc291cmNlX2lkKSBlY2hvICRwbGFueW9fcmVzb3VyY2VfaWQ7Pz4nOyAvLyBvcHRpb25hbDogSUQgb2YgdGhlIHJlc291cmNlIGJlaW5nIHJlc2VydmVkCnZhciBwbGFueW9fZmlsZXNfbG9jYXRpb249Jzw/cGhwIGVjaG8gJHBsYW55b19maWxlc19sb2NhdGlvbjs/Pic7IC8vIHJlbGF0aXZlIG9yIGFic29sdXRlIGRpcmVjdG9yeSB3aGVyZSB0aGUgcGxhbnlvIGZpbGVzIGFyZSBrZXB0ICh1c3VhbGx5ICcvcGxhbnlvLWZpbGVzJykKdmFyIHBsYW55b19sYW5ndWFnZT0nPD9waHAgZWNobyAkcGxhbnlvX2xhbmd1YWdlOz8+JzsgLy8geW91IGNhbiBvcHRpb25hbGx5IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaGVyZSwgZS5nLiAnRlInIG9yICdFUycgb3IgcGFzcyB0aGUgbGFuZ3VnZSBpbiB0aGUgJ2xhbmcnIHBhcmFtZXRlcgp2YXIgc29ydF9maWVsZHM9Jzw/cGhwIGVjaG8gJHBsYW55b19zb3J0X2ZpZWxkczs/Pic7IC8vIGNvbW1hLXNlcGFyYXRlZCBzb3J0IGZpZWxkcyAtLSBhIHNpbmdsZSBmaWVsZCB3aWxsIGhpZGUgdGhlIHNvcnQgZHJvcGRvd24gYm94CnZhciBleHRyYV9zZWFyY2hfZmllbGRzPSc8P3BocCBlY2hvICRwbGFueW9fZXh0cmFfc2VhcmNoX2ZpZWxkczs/Pic7IC8vIGNvbW1hLXNlcGFyYXRlZCBleHRyYSBmaWVsZHMgaW4gdGhlIHNlYXJjaCBib3gKdmFyIHByZXNlbnRhdGlvbl9tb2RlPTw/cGhwIGVjaG8gKCRwbGFueW9fZGVmYXVsdF9tb2RlID09ICdyZXNvdXJjZXMnKSA/ICJ0cnVlIiA6ICJmYWxzZSI7Pz47IC8vIGZhbHNlOiBzaG93IHRoZSBzZWFyY2ggYm94IGJ5IGRlZmF1bHQsIHRydWU6IHNob3cgcmVzb3VyY2UgbGlzdCBieSBkZWZhdWx0CnZhciBlbXB0eV9tb2RlPTw/cGhwIGVjaG8gKCRwbGFueW9fZGVmYXVsdF9tb2RlID09ICdlbXB0eScpID8gInRydWUiIDogImZhbHNlIjs/PjsgLy8gaWYgdHJ1ZSwgZG9uJ3Qgc2hvdyBhbnl0aGluZyBieSBkZWZhdWx0CnZhciBwbGFueW9fdXNlX2h0dHBzPTw/cGhwIGVjaG8gKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb24nKSA/ICJ0cnVlIiA6ICJmYWxzZSI7Pz47IC8vIHNldCB0aGlzIHRvIHRydWUgaWYgZW1iZWRkaW5nIHBsYW55byBvbiBhIHNlY3VyZSB3ZWJzaXRlIChTU0wpCjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBnZXRfcGFyYW0gKG5hbWUpIHtuYW1lID0gbmFtZS5yZXBsYWNlKC9bXFtdLywiXFxcWyIpLnJlcGxhY2UoL1tcXV0vLCJcXFxdIik7dmFyIHJlZ2V4UyA9ICJbXFw/Jl0iK25hbWUrIj0oW14mI10qKSI7dmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCAocmVnZXhTKTt2YXIgcmVzdWx0cyA9IHJlZ2V4LmV4ZWMgKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtpZiAocmVzdWx0cyA9PSBudWxsKSByZXR1cm4gbnVsbDtlbHNlICByZXR1cm4gcmVzdWx0c1sxXTt9CmlmIChnZXRfcGFyYW0oJ21vZGUnKSlwbGFueW9fZW1iZWRfbW9kZSA9IGdldF9wYXJhbSgnbW9kZScpOwpmdW5jdGlvbiBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKG5hbWUpIHtpZihwbGFueW9fZmlsZXNfbG9jYXRpb24ubGVuZ3RoPT0wfHxwbGFueW9fZmlsZXNfbG9jYXRpb24ubGFzdEluZGV4T2YoJy8nKT09cGxhbnlvX2ZpbGVzX2xvY2F0aW9uLmxlbmd0aC0xKXJldHVybiBwbGFueW9fZmlsZXNfbG9jYXRpb24rbmFtZTsgZWxzZSByZXR1cm4gcGxhbnlvX2ZpbGVzX2xvY2F0aW9uKycvJytuYW1lO30KZG9jdW1lbnQud3JpdGUoIjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJwbGFueW8tc3R5bGVzLmNzcyIpKyInIHR5cGU9J3RleHQvY3NzJyAvPiIpOwpkb2N1bWVudC53cml0ZSgiPGRpdiBpZD0ncGxhbnlvX2NvbnRlbnQnPjxpbWcgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoImhvdXJnbGFzcy5naWYiKSsiJyBhbGlnbj0nbWlkZGxlJyAvPjwvZGl2PiIpOwo8P3BocAppZiAoJHBsYW55b19qc19saWJyYXJ5X3VzZWQgPT0gJ2pxdWVyeScgfHwgJHBsYW55b19qc19saWJyYXJ5X3VzZWQgPT0gJ2pRdWVyeScpIHsKICAgIGlmICgkcGxhbnlvX2luY2x1ZGVfanNfbGlicmFyeSkgewo/Pgpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJqcXVlcnkuanMiKSsiJz48L3NjIisicmlwdD4iKTsKPD9waHAKICAgIH0KPz4KZG9jdW1lbnQud3JpdGUoIjxzYyIrInJpcHQgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoInBsYW55by1qcXVlcnktdXRpbHMuanMiKSsiJyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwvc2MiKyJyaXB0PiIpOwpkb2N1bWVudC53cml0ZSgiPHNjIisicmlwdCBzcmM9JyIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgicGxhbnlvLWpxdWVyeS1yZXNlcnZhdGlvbnMuanMiKSsiJyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPjwvc2MiKyJyaXB0PiIpOwo8P3BocAp9CmVsc2UgewogICAgaWYgKCRwbGFueW9faW5jbHVkZV9qc19saWJyYXJ5KSB7Cj8+CmRvY3VtZW50LndyaXRlKCI8c2MiKyJyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoIm1vb3Rvb2xzLTEuMi1jb3JlLmpzIikrIic+PC9zYyIrInJpcHQ+Iik7CmRvY3VtZW50LndyaXRlKCI8c2MiKyJyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSciK2dldF9mdWxsX3BsYW55b19maWxlX3BhdGgoIm1vb3Rvb2xzLTEuMi1tb3JlLmpzIikrIic+PC9zYyIrInJpcHQ+Iik7Cjw/cGhwCiAgICB9Cj8+CmRvY3VtZW50LndyaXRlKCI8c2MiKyJyaXB0IHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJ1dGlscy5qcyIpKyInIHR5cGU9J3RleHQvamF2YXNjcmlwdCc+PC9zYyIrInJpcHQ+Iik7CmRvY3VtZW50LndyaXRlKCI8c2MiKyJyaXB0IHNyYz0nIitnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJwbGFueW8tcmVzZXJ2YXRpb25zLmpzIikrIicgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz48L3NjIisicmlwdD4iKTsKPD9waHAKfQo/Pgo8L3NjcmlwdD4KPG5vc2NyaXB0Pgo8YSBocmVmPSdodHRwOi8vd3d3LnBsYW55by5jb20vYWJvdXQtY2FsZW5kYXIucGhwP2NhbGVuZGFyPTw/cGhwIGVjaG8gJHBsYW55b19zaXRlX2lkOz8+Jz5NYWtlIGEgcmVzZXJ2YXRpb248L2E+PGJyLz48YnIvPjxhIGhyZWY9J2h0dHA6Ly93d3cucGxhbnlvLmNvbS8nPlJlc2VydmF0aW9uCiAgc3lzdGVtIHBvd2VyZWQgYnkgUGxhbnlvPC9hPgo8L25vc2NyaXB0Pgo8P3BocAp9Cj8+]]></data>
	</file>
	<file>
	  <filename>/planyo-reservations.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dHJ5IHsKICBpZiAoIXBsYW55b19pc3NldCh3aW5kb3cuSlNPTikgfHwgIXBsYW55b19pc3NldCh3aW5kb3cuSlNPTi5kZWNvZGUpKSB7CiAgICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5Kc29uKSkgSlNPTiA9IEpzb247CiAgICBKc29uLmVuY29kZSA9IEpzb24udG9TdHJpbmc7CiAgICBKc29uLmRlY29kZSA9IEpzb24uZXZhbHVhdGU7CiAgfQogfQpjYXRjaChlcnIpIHt9CgpmdW5jdGlvbiBwbGFueW8kKHgpIHsKICBpZiAocGxhbnlvX2lzc2V0KGRvY3VtZW50LmlkKSkKICAgIHJldHVybiBkb2N1bWVudC5pZCh4KTsKICByZXR1cm4gJCh4KTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9wYXJhbSAobmFtZSkgewogIGlmIChwbGFueW9faXNzZXQod2luZG93LnBsYW55b19vdmVycmlkZXMpICYmIHdpbmRvdy5wbGFueW9fb3ZlcnJpZGVzW25hbWVdKQogICAgcmV0dXJuIHdpbmRvdy5wbGFueW9fb3ZlcnJpZGVzW25hbWVdOwogIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1tcW10vLCJcXFxbIikucmVwbGFjZSgvW1xdXS8sIlxcXF0iKTsKICB2YXIgcmVnZXhTID0gIltcXD8mXSIrbmFtZSsiPShbXiYjXSopIjsKICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwIChyZWdleFMpOwogIHZhciByZXN1bHRzID0gcmVnZXguZXhlYyAod2luZG93LmxvY2F0aW9uLmhyZWYpOwogIGlmIChyZXN1bHRzID09IG51bGwpCiAgICByZXR1cm4gbnVsbDsKICBlbHNlCiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdHNbMV0pLnJlcGxhY2UoL1wrL2csICcgJyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfZm9ybV9kYXRhKG9iaikgewogIHZhciBnZXRzdHIgPSAiIjsKICBmb3IgKHZhciBpPTA7IGk8b2JqLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgZWwgPSBvYmouZWxlbWVudHNbaV07CiAgICB2YXIgdGFnTmFtZSA9IGVsLnRhZ05hbWU7CiAgICBpZiAodGFnTmFtZSA9PSAiSU5QVVQiKSB7CiAgICAgIGlmIChlbC50eXBlID09ICJ0ZXh0IiB8fCBlbC50eXBlID09ICJoaWRkZW4iKSB7CglnZXRzdHIgKz0gZWwubmFtZSArICI9IiArIGVuY29kZVVSSUNvbXBvbmVudChlbC52YWx1ZSkgKyAiJiI7CiAgICAgIH0KICAgICAgaWYgKGVsLnR5cGUgPT0gImNoZWNrYm94IikgewoJaWYgKGVsLmNoZWNrZWQpIHsKCSAgZ2V0c3RyICs9IGVsLm5hbWUgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoZWwudmFsdWUpICsgIiYiOwoJfSBlbHNlIHsKCSAgZ2V0c3RyICs9IGVsLm5hbWUgKyAiPSYiOwoJfQogICAgICB9CiAgICAgIGlmIChlbC50eXBlID09ICJyYWRpbyIpIHsKCWlmIChlbC5jaGVja2VkKSB7CgkgIGdldHN0ciArPSBlbC5uYW1lICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGVsLnZhbHVlKSArICImIjsKCX0KICAgICAgfQogICAgfSAgIAogICAgZWxzZSBpZiAodGFnTmFtZSA9PSAiVEVYVEFSRUEiKSB7CiAgICAgIGdldHN0ciArPSBlbC5uYW1lICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGVsLnZhbHVlKSArICImIjsKICAgIH0KICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gIlNFTEVDVCIpIHsKICAgICAgdmFyIHNlbCA9IGVsOwogICAgICBpZiAoc2VsLnNlbGVjdGVkSW5kZXggPj0gMCkKICAgICAgICBnZXRzdHIgKz0gc2VsLm5hbWUgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQoc2VsLm9wdGlvbnNbc2VsLnNlbGVjdGVkSW5kZXhdLnZhbHVlKSArICImIjsKICAgIH0KICB9CiAgcmV0dXJuIGdldHN0cjsKfQoKZnVuY3Rpb24gcGxhbnlvX29uX3Jlc2VydmF0aW9uX3N1Y2Nlc3MocmVzZXJ2YXRpb25faWQsIHVzZXJfdGV4dCkgewogIHBsYW55byQoJ3BsYW55b19jb250ZW50JykuZ2V0Q2hpbGRyZW4oKS5zZXRTdHlsZSgnZGlzcGxheScsICdub25lJyk7CiAgcGxhbnlvJCgncmVzX29rX21zZycpLnN0eWxlLmRpc3BsYXk9J2lubGluZSc7CiAgcGxhbnlvJCgncmVzX2Vycm9yX21zZycpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogIGlmIChwbGFueW8kKCdyZXNlcnZlX2Zvcm0nKSkKICAgIHBsYW55byQoJ3Jlc2VydmVfZm9ybScpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogIGlmIChwbGFueW8kKCdwcm9kdWN0X2Zvcm0nKSkKICAgIHBsYW55byQoJ3Byb2R1Y3RfZm9ybScpLnN0eWxlLmRpc3BsYXk9J25vbmUnOwogIGlmIChwbGFueW8kKCdwcmljZV9pbmZvX2RpdicpKQogICAgcGxhbnlvJCgncHJpY2VfaW5mb19kaXYnKS5zdHlsZS5kaXNwbGF5PSdub25lJzsKICBpZiAocmVzZXJ2YXRpb25faWQgJiYgdXNlcl90ZXh0LmluZGV4T2YgKCI8IS0tIFNIT1dfQURESVRJT05BTF9QUk9EVUNUUyAtLT4iKSAhPSAtMSkgewogICAgcGxhbnlvX2VtYmVkX2FkZGl0aW9uYWxfcHJvZHVjdHNfZm9ybShyZXNlcnZhdGlvbl9pZCk7CiAgfQogIGVsc2UgewogICAgcGxhbnlvJCgncmVzX29rX21zZycpLmlubmVySFRNTCA9IHVzZXJfdGV4dDsKICAgIGV2YWxfY2hpbGRyZW5fc2NyaXB0cyhwbGFueW8kKCdyZXNfb2tfbXNnJykpOwogICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKSkgewogICAgICBkb2N1bWVudC5yZXNlcnZhdGlvbl9pZCA9IHJlc2VydmF0aW9uX2lkOwogICAgICB3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKCdyZXNlcnZhdGlvbl9kb25lJyk7CiAgICB9CiAgfQogIHdpbmRvdy5zY3JvbGwoMCwwKTsKfQogCmZ1bmN0aW9uIHBsYW55b19vbl9yZXNlcnZhdGlvbl9mYWlsdXJlKGVycm9yX3RleHQpIHsKICAgdmFyIGVycm9yX2RpdiA9IHBsYW55byQoJ3Jlc19lcnJvcl9tc2cnKTsKICAgZXJyb3JfZGl2LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsKICAgZXJyb3JfZGl2LmlubmVySFRNTCA9IGVycm9yX3RleHQrIjxwPiI7CiAgIHdpbmRvdy5zY3JvbGwoMCwwKTsKICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKSkgewogICAgIHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQoJ3Jlc2VydmF0aW9uX2ZhaWx1cmUnKTsKICAgfQp9CiAKZnVuY3Rpb24gcGxhbnlvX2dldF9jdXJyZW50X3VybCgpIHsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnZmVlZGJhY2tfdXJsJykpCiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHBsYW55b19nZXRfcGFyYW0oJ2ZlZWRiYWNrX3VybCcpKTsKICBlbHNlCiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTsKfQoKZnVuY3Rpb24gcGxhbnlvX3Nob3dfaG91cmdsYXNzKGhpZGVfZWxlbWVudCkgewogIGRvY3VtZW50LnBsYW55b19hamF4X2NhbGxfcGVuZGluZyA9IHRydWU7CiAgaWYgKGhpZGVfZWxlbWVudCkgewogICAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9oaWRlX2VsZW1lbnQgPSBoaWRlX2VsZW1lbnQ7CiAgICBoaWRlX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIHZhciBwYXJlbnQgPSBoaWRlX2VsZW1lbnQucGFyZW50Tm9kZTsKICAgIGlmIChwYXJlbnQpCiAgICAgIHZhciBob3VyZ2xhc3NfZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgaG91cmdsYXNzX2VsZW1lbnQuaWQgPSAiaG91cmdsYXNzX2VsZW1lbnQiOwogICAgaG91cmdsYXNzX2VsZW1lbnQuaW5uZXJIVE1MID0gIjxkaXYgY2xhc3M9J2hvdXJnbGFzc19pbWcnPjwvZGl2PiI7CiAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGhvdXJnbGFzc19lbGVtZW50LCBoaWRlX2VsZW1lbnQpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2hpZGVfaG91cmdsYXNzKCkgewogIGlmIChkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX3BlbmRpbmcpIHsKICAgIGlmIChkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudCkgewogICAgICBkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7CiAgICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5wbGFueW9fYWpheF9jYWxsX2hpZGVfZWxlbWVudC5wYXJlbnROb2RlOwogICAgICBpZiAocGFyZW50KQoJcGFyZW50LnJlbW92ZUNoaWxkIChwbGFueW8kKCdob3VyZ2xhc3NfZWxlbWVudCcpKTsKICAgICAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9oaWRlX2VsZW1lbnQgPSBudWxsOwogICAgfQogICAgZG9jdW1lbnQucGxhbnlvX2FqYXhfY2FsbF9wZW5kaW5nID0gZmFsc2U7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fb25fcmVxdWVzdF9mYWlsdXJlICgpIHsKICBwbGFueW9faGlkZV9ob3VyZ2xhc3MoKTsKICB2YXIgZXJyb3JfZGl2ID0gcGxhbnlvJCgncmVzX2Vycm9yX21zZycpOwogIGVycm9yX2Rpdi5zdHlsZS5kaXNwbGF5PSdibG9jayc7CiAgZXJyb3JfZGl2LmlubmVySFRNTCA9ICJVbmtub3duIGVycm9yIGluICIrZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCkrIiAoTVQiK01vb1Rvb2xzLnZlcnNpb24rIik8cD4iOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2Nvb2tpZShjX25hbWUpIHsKICBpZiAoZG9jdW1lbnQuY29va2llLmxlbmd0aCA+IDApIHsKICAgIGNfc3RhcnQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZihjX25hbWUgKyAiPSIpOwogICAgaWYgKGNfc3RhcnQgIT0gLTEpIHsKICAgICAgY19zdGFydCA9IGNfc3RhcnQgKyBjX25hbWUubGVuZ3RoKzE7CiAgICAgIGNfZW5kID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YoIjsiLCBjX3N0YXJ0KTsKICAgICAgaWYgKGNfZW5kID09IC0xKSAKICAgICAgICBjX2VuZCA9IGRvY3VtZW50LmNvb2tpZS5sZW5ndGg7CiAgICAgIHJldHVybiB1bmVzY2FwZShkb2N1bWVudC5jb29raWUuc3Vic3RyaW5nKGNfc3RhcnQsIGNfZW5kKSk7CiAgICB9CiAgfQogIHJldHVybiAiIjsKfQoKZnVuY3Rpb24gcGxhbnlvX3NlbmRfcmVxdWVzdCAoZGF0YSwgb25fY29tcGxldGVfZnVuY3Rpb24sIGhpZGVfaXRlbSkgewogIHBsYW55b19zaG93X2hvdXJnbGFzcyhoaWRlX2l0ZW0pOwogIHZhciByZXFfZGF0YSA9IGRhdGE7CiAgaWYgKHJlcV9kYXRhLmluZGV4T2YoJ2ZlZWRiYWNrX3VybD0nKSA9PSAtMSkKICAgIHJlcV9kYXRhICs9ICImZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCk7CiAgaWYgKHJlcV9kYXRhLmluZGV4T2YoJ3VsYXBfdXJsPScpID09IC0xKQogICAgcmVxX2RhdGEgKz0gIiZ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwIjsKICBpZiAod2luZG93LnBsYW55b19sYW5ndWFnZSkKICAgIHJlcV9kYXRhICs9ICImbGFuZ3VhZ2U9IiArIHBsYW55b19sYW5ndWFnZS50b1VwcGVyQ2FzZSgpOwogIHZhciBzaG9wcGluZ19jYXJ0X2lkID0gcGxhbnlvX2dldF9jb29raWUgKCdwbGFueW9fY2FydF9pZCcpOwogIGlmIChzaG9wcGluZ19jYXJ0X2lkICYmIHJlcV9kYXRhLmluZGV4T2YoJ2NhcnRfaWQ9JykgPT0gLTEpCiAgICByZXFfZGF0YSArPSAiJmNhcnRfaWQ9IiArIHNob3BwaW5nX2NhcnRfaWQgKyAiJmZpcnN0X3Jlc2VydmF0aW9uX2lkPSIgKyBwbGFueW9fZ2V0X2Nvb2tpZSgncGxhbnlvX2ZpcnN0X3Jlc2VydmF0aW9uX2lkJyk7CiAgcmVxX2RhdGEgKz0gIiZ1c2VyX2FnZW50PSIgKyBuYXZpZ2F0b3IudXNlckFnZW50OwogIGlmIChwbGFueW9faXNzZXQod2luZG93LlJlcXVlc3QpICYmIHBsYW55b19pc3NldCh3aW5kb3cuUmVxdWVzdC5KU09OKSkgewogICAgdmFyIHhocl9yZXEgPSBuZXcgUmVxdWVzdC5KU09OICgKCQkJCSAgICB7CgkJCQkgICAgdXJsOmdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpLAoJCQkJCW1ldGhvZDoncG9zdCcsCgkJCQkJb25TdWNjZXNzOiBvbl9jb21wbGV0ZV9mdW5jdGlvbiwKCQkJCQlvbkZhaWx1cmU6IHBsYW55b19vbl9yZXF1ZXN0X2ZhaWx1cmUsCgkJCQkJb25FeGNlcHRpb246IHBsYW55b19vbl9yZXF1ZXN0X2ZhaWx1cmUsCgkJCQkJb25DYW5jZWw6IHBsYW55b19vbl9yZXF1ZXN0X2ZhaWx1cmUKCQkJCQl9KS5zZW5kKHJlcV9kYXRhKTsKICB9CiAgZWxzZSB7CiAgICB2YXIgeGhyX3JlcSA9IG5ldyBYSFIgKHsKICAgICAgbWV0aG9kOidwb3N0JywKICAgICAgICAgIG9uU3VjY2Vzczogb25fY29tcGxldGVfZnVuY3Rpb24sCiAgICAgICAgICBvbkZhaWx1cmU6IHBsYW55b19vbl9yZXF1ZXN0X2ZhaWx1cmUKCSAgfSkuc2VuZChnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKHVsYXBfc2NyaXB0KSwgcmVxX2RhdGEpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX29uX2NvbXBsZXRlX3Nob3dfc3RhdHVzICh0eHQpIHsKICBwbGFueW8kKCdwbGFueW9fY29udGVudCcpLmlubmVySFRNTCA9ICIiOwogIHBsYW55b19oaWRlX2hvdXJnbGFzcygpOwogIHZhciBvYmogPSAodHh0ICYmIHR5cGVvZiB0eHQgPT0gJ29iamVjdCcpID8gdHh0IDogSlNPTi5kZWNvZGUgKHR4dCk7CiAgaWYgKCFvYmopIHJldHVybjsKICB2YXIgY29kZSA9IG9ialsncmVzcG9uc2VfY29kZSddOwogIGlmIChjb2RlID09IDApIHsvLyBzdWNjZXNzCiAgICB2YXIgb2tfZGl2ID0gcGxhbnlvJCgncmVzX29rX21zZycpOwogICAgaWYgKCFva19kaXYpIHsKICAgICAgb2tfZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIG9rX2Rpdi5pZCA9ICdyZXNfb2tfbXNnJzsKICAgICAgcGxhbnlvJCgncGxhbnlvX2NvbnRlbnQnKS5hcHBlbmRDaGlsZChva19kaXYpOwogICAgfQogICAgb2tfZGl2LnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJzsKICAgIG9rX2Rpdi5pbm5lckhUTUwgPSBvYmpbJ2RhdGEnXVsndXNlcl90ZXh0J10gKyAiPGJyLz48YnIvPiI7CgogICAgaWYgKHBsYW55b19pc3NldChvYmosJ2RhdGEnLCdyZWRpcmVjdF9sb2NhdGlvbicpKQogICAgICBldmFsKG9ialsnZGF0YSddWydyZWRpcmVjdF9sb2NhdGlvbiddKTsKCiAgICBpZiAocGxhbnlvX2lzc2V0KHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQpKQogICAgICB3aW5kb3cub25fcGxhbnlvX2Zvcm1fbG9hZGVkKHBsYW55b19nZXRfcGFyYW0oJ21vZGUnKSk7CiAgfQogIGVsc2UgewogICAgdmFyIGVycm9yX2RpdiA9IHBsYW55byQoJ3Jlc19lcnJvcl9tc2cnKTsKICAgIGlmICghZXJyb3JfZGl2KSB7CiAgICAgIGVycm9yX2RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBlcnJvcl9kaXYuaWQgPSAncmVzX2Vycm9yX21zZyc7CiAgICAgIHBsYW55byQoJ3BsYW55b19jb250ZW50JykuYXBwZW5kQ2hpbGQoZXJyb3JfZGl2KTsKICAgIH0KICAgIGVycm9yX2Rpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGVycm9yX2Rpdi5pbm5lckhUTUwgPSBvYmpbJ3Jlc3BvbnNlX21lc3NhZ2UnXSArICI8YnIvPjxici8+IjsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19pbml0X2NhbmNlbF9tb2RlKCkgewogIHBsYW55b19zZW5kX3JlcXVlc3QgKCJtb2RlPWNhbmNlbCZjPSIgKyBwbGFueW9fZ2V0X3BhcmFtKCdjJykgKyAiJnVzZXJfaWQ9IiArIHBsYW55b19nZXRfcGFyYW0oJ3VzZXJfaWQnKSArICImc2l0ZV9pZD0iICsgd2luZG93LnBsYW55b19zaXRlX2lkICsgIiZyZXNlcnZhdGlvbl9pZD0iICsgcGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSArICImcmVzb3VyY2VfaWQ9IiArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc291cmNlX2lkJykgKyAiJnJlYXNvbj0iICsgcGxhbnlvX2dldF9wYXJhbSgncmVhc29uJyksIHBsYW55b19vbl9jb21wbGV0ZV9zaG93X3N0YXR1cywgbnVsbCk7Cn0KCmZ1bmN0aW9uIHBsYW55b19pbml0X3ZlcmlmeV9lbWFpbF9tb2RlKCkgewogIHBsYW55b19zZW5kX3JlcXVlc3QgKCJtb2RlPXZlcmlmeV9lbWFpbCZ2ZXJpZmljYXRpb25fY29kZT0iICsgcGxhbnlvX2dldF9wYXJhbSgndmVyaWZpY2F0aW9uX2NvZGUnKSArICImc2l0ZV9pZD0iICsgd2luZG93LnBsYW55b19zaXRlX2lkICsgIiZyZXNlcnZhdGlvbl9pZD0iICsgcGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSwgcGxhbnlvX29uX2NvbXBsZXRlX3Nob3dfc3RhdHVzLCBudWxsKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2luaXRfcGF5bWVudF9jb25maXJtYXRpb25fbW9kZSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0ICgibW9kZT1wYXltZW50X2NvbmZpcm1hdGlvbiZyZXNlcnZhdGlvbl9pZD0iICsgcGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSArICImc2l0ZV9pZD0iICsgd2luZG93LnBsYW55b19zaXRlX2lkLCBwbGFueW9fb25fY29tcGxldGVfc2hvd19zdGF0dXMsIG51bGwpOwp9CiAKZnVuY3Rpb24gcGxhbnlvX29uX3Jlc2VydmF0aW9uX2NvbXBsZXRlICh0eHQpIHsKICBwbGFueW9faGlkZV9ob3VyZ2xhc3MoKTsKCiAgdmFyIG9iaiA9IG51bGw7CiAgdHJ5IHsKICAgIG9iaiA9ICh0eHQgJiYgdHlwZW9mIHR4dCA9PSAnb2JqZWN0JykgPyB0eHQgOiBKU09OLmRlY29kZSAodHh0KTsKICB9CiAgY2F0Y2ggKGVycikgewogIH0KICBpZiAoIW9iaikgewogICAgcGxhbnlvX29uX3Jlc2VydmF0aW9uX2ZhaWx1cmUoJ1Vua25vd24gcmVzZXJ2YXRpb24gZXJyb3I6ICcrdHh0KTsKICAgIHJldHVybjsKICB9CgogIHZhciBjb2RlID0gb2JqWydyZXNwb25zZV9jb2RlJ107CiAgaWYgKGNvZGUgPT0gMCkgey8vIHN1Y2Nlc3MKICAgIHBsYW55b19vbl9yZXNlcnZhdGlvbl9zdWNjZXNzIChvYmpbJ2RhdGEnXVsncmVzZXJ2YXRpb25faWQnXSwgb2JqWydkYXRhJ11bJ3VzZXJfdGV4dCddKTsKICB9CiAgZWxzZSB7CiAgICBwbGFueW9fb25fcmVzZXJ2YXRpb25fZmFpbHVyZSAob2JqWydyZXNwb25zZV9tZXNzYWdlJ10pOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX3NlbmRfcmVzZXJ2YXRpb25fZm9ybSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0ICgibW9kZT1tYWtlX3Jlc2VydmF0aW9uJnNpdGVfaWQ9IiArIHdpbmRvdy5wbGFueW9fc2l0ZV9pZCArICImIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNlcnZlX2Zvcm0nKSksIHBsYW55b19vbl9yZXNlcnZhdGlvbl9jb21wbGV0ZSwgcGxhbnlvJCgnc3VibWl0X2J1dHRvbicpKTsKICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHBsYW55b19zZW5kX3Byb2R1Y3RfZm9ybSgpIHsKICBwbGFueW9fc2VuZF9yZXF1ZXN0ICgibW9kZT1yZXNlcnZlX3Byb2R1Y3RzJnNpdGVfaWQ9IiArIHdpbmRvdy5wbGFueW9fc2l0ZV9pZCArIiYiICsgcGxhbnlvX2dldF9mb3JtX2RhdGEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2R1Y3RfZm9ybScpKSwgcGxhbnlvX29uX3Jlc2VydmF0aW9uX2NvbXBsZXRlLCBwbGFueW8kKCdzdWJtaXRfYnV0dG9uJykpOwogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gcGxhbnlvX29uX3NlYXJjaF9zdWNjZXNzKHJlc3VsdHMpIHsKICBwbGFueW8kKCdyZXNfZXJyb3JfbXNnJykuc3R5bGUuZGlzcGxheT0nbm9uZSc7CiAgdmFyIHJlc3VsdHNfY29kZSA9IHJlc3VsdHM7CgogIHBsYW55byQoJ3NlYXJjaF9yZXN1bHRzJykuaW5uZXJIVE1MID0gcmVzdWx0c19jb2RlOwp9CiAKZnVuY3Rpb24gcGxhbnlvX29uX3NlYXJjaF9mYWlsdXJlKGVycm9yX3RleHQpIHsKICAgdmFyIGVycm9yX2RpdiA9IHBsYW55byQoJ3Jlc19lcnJvcl9tc2cnKTsKICAgZXJyb3JfZGl2LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsKICAgZXJyb3JfZGl2LmlubmVySFRNTCA9IGVycm9yX3RleHQrIjxwPiI7CiAgIHBsYW55byQoJ3NlYXJjaF9yZXN1bHRzJykuaW5uZXJIVE1MID0gIiI7CiAgIHdpbmRvdy5zY3JvbGwoMCwwKTsKfQoKZnVuY3Rpb24gcGxhbnlvX29uX3NlYXJjaF9jb21wbGV0ZSAodHh0KSB7CiAgcGxhbnlvX2hpZGVfaG91cmdsYXNzKCk7CiAgdmFyIG9iaiA9IG51bGw7CiAgdHJ5IHsKICAgIG9iaiA9ICh0eHQgJiYgdHlwZW9mIHR4dCA9PSAnb2JqZWN0JykgPyB0eHQgOiBKU09OLmRlY29kZSAodHh0KTsKICB9CiAgY2F0Y2ggKGVycikgewogIH0KICBpZiAoIW9iaikgewogICAgcGxhbnlvX29uX3NlYXJjaF9mYWlsdXJlKCdVbmtub3duIHNlYXJjaCBlcnJvcjogJyt0eHQpOwogICAgcmV0dXJuOwogIH0KICB2YXIgY29kZSA9IG9ialsncmVzcG9uc2VfY29kZSddOwogIGlmIChjb2RlID09IDApIHsvLyBzdWNjZXNzCiAgICBwbGFueW9fb25fc2VhcmNoX3N1Y2Nlc3MgKG9ialsnZGF0YSddWydjb2RlJ10pOwogIH0KICBlbHNlIHsKICAgIHBsYW55b19vbl9zZWFyY2hfZmFpbHVyZSAob2JqWydyZXNwb25zZV9tZXNzYWdlJ10pOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX3NlbmRfc2VhcmNoX2Zvcm0oKSB7CiAgcGxhbnlvX3NlbmRfcmVxdWVzdCAoIm1vZGU9cmVzb3VyY2Vfc2VhcmNoJm91dHB1dD1odG1sJnNpdGVfaWQ9IiArIHdpbmRvdy5wbGFueW9fc2l0ZV9pZCArICImIiArIHBsYW55b19nZXRfZm9ybV9kYXRhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWFyY2hfZm9ybScpKSwgcGxhbnlvX29uX3NlYXJjaF9jb21wbGV0ZSwgcGxhbnlvJCgnc3VibWl0X2J1dHRvbicpKTsKICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHBsYW55b19pc19zcGVjaWFsX21vZGUobW9kZSkgewogIHJldHVybiAobW9kZSA9PSAidmVyaWZ5X2VtYWlsIiB8fCBtb2RlID09ICJwYXltZW50X2NvbmZpcm1hdGlvbiIgfHwgbW9kZSA9PSAiY2FuY2VsIiB8fCBtb2RlID09ICJjYW5jZWxfY29kZSIgfHwgbW9kZSA9PSAicmVzZXJ2YXRpb25fZGV0YWlscyIgfHwgbW9kZSA9PSAicGF5bWVudF9mb3JtIiB8fCBtb2RlID09ICJyZXNlcnZhdGlvbl9saXN0IiB8fCBtb2RlID09ICJzaG93X2NhcnQiIHx8IG1vZGUgPT0gImNoZWNrb3V0Iik7Cn0KCmZ1bmN0aW9uIHBsYW55b19pbml0X3NwZWNpYWxfbW9kZXMoKSB7CiAgdmFyIG1vZGUgPSBwbGFueW9fZ2V0X3BhcmFtKCdtb2RlJyk7CiAgaWYgKHBsYW55b19pc19zcGVjaWFsX21vZGUobW9kZSkpIHsKICAgIGlmIChtb2RlID09ICJ2ZXJpZnlfZW1haWwiKQogICAgICBwbGFueW9faW5pdF92ZXJpZnlfZW1haWxfbW9kZSgpOwogICAgZWxzZSBpZiAobW9kZSA9PSAicGF5bWVudF9jb25maXJtYXRpb24iKQogICAgICBwbGFueW9faW5pdF9wYXltZW50X2NvbmZpcm1hdGlvbl9tb2RlKCk7CiAgICBlbHNlIGlmIChtb2RlID09ICJjYW5jZWwiKQogICAgICBwbGFueW9faW5pdF9jYW5jZWxfbW9kZSgpOwogICAgZWxzZSBpZiAobW9kZSA9PSAncmVzZXJ2YXRpb25fZGV0YWlscycpCiAgICAgIHBsYW55b19lbWJlZF9yZXNlcnZhdGlvbl9kZXRhaWxzKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgncmVzZXJ2YXRpb25faWQnKSwgcGxhbnlvX2dldF9wYXJhbSgndXNlcl9pZCcpKTsKICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3Jlc2VydmF0aW9uX2xpc3QnKQogICAgICBwbGFueW9fZW1iZWRfcmVzZXJ2YXRpb25fbGlzdCh3aW5kb3cucGxhbnlvX3NpdGVfaWQsIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ3VzZXJfaWQnKSk7CiAgICBlbHNlIGlmIChtb2RlID09ICdjYW5jZWxfY29kZScpCiAgICAgIHBsYW55b19lbWJlZF9jYW5jZWxfY29kZSh3aW5kb3cucGxhbnlvX3NpdGVfaWQsIHBsYW55b19nZXRfcGFyYW0oJ3Jlc2VydmF0aW9uX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ2MnKSwgcGxhbnlvX2dldF9wYXJhbSgndXNlcl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpKTsKICAgIGVsc2UgaWYgKG1vZGUgPT0gJ3BheW1lbnRfZm9ybScpCiAgICAgIHBsYW55b19lbWJlZF9wYXltZW50X2Zvcm0od2luZG93LnBsYW55b19zaXRlX2lkLCBwbGFueW9fZ2V0X3BhcmFtKCdyZXNlcnZhdGlvbl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCd1c2VyX2lkJyksIHBsYW55b19nZXRfcGFyYW0oJ2F1dG9fcmVkaXJlY3QnKSk7CiAgICBlbHNlIGlmIChtb2RlID09ICdzaG93X2NhcnQnKQogICAgICBwbGFueW9fZW1iZWRfY2FydF9jb2RlKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgnY2FydF9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdmaXJzdF9yZXNlcnZhdGlvbl9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdyZW1vdmVfcmVzZXJ2YXRpb25faWQnKSk7CiAgICBlbHNlIGlmIChtb2RlID09ICdjaGVja291dCcpCiAgICAgIHBsYW55b19lbWJlZF9jaGVja291dF9jb2RlKHdpbmRvdy5wbGFueW9fc2l0ZV9pZCwgcGxhbnlvX2dldF9wYXJhbSgnY2FydF9pZCcpLCBwbGFueW9fZ2V0X3BhcmFtKCdmaXJzdF9yZXNlcnZhdGlvbl9pZCcpKTsKICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfcGhvbmVfY29kZXMobmFtZSkgewpyZXR1cm4gIjxzZWxlY3QgaWQ9JyIrbmFtZSsiJyBuYW1lPSciK25hbWUrIicgPjxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9Jy0xJz4tLSBDb3VudHJ5IGNvZGUgLS0mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTMnPkFmZ2hhbmlzdGFuICg5MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzU1Jz5BbGJhbmlhICgzNTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIxMyc+QWxnZXJpYSAoMjEzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNzYnPkFuZG9ycmEgKDM3NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQ0Jz5BbmdvbGEgKDI0NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjY0Jz5Bbmd1aWxsYSAoMjY0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzInPkFudGFyY3RpY2EgKDY3MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTQnPkFyZ2VudGluYSAoNTQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3NCc+QXJtZW5pYSAoMzc0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyOTcnPkFydWJhICgyOTcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzYxJz5BdXN0cmFsaWEgKDYxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0Myc+QXVzdHJpYSAoNDMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk5NCc+QXplcmJhaWphbiAoOTk0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNDInPkJhaGFtYXMgKDI0MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTczJz5CYWhyYWluICg5NzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg4MCc+QmFuZ2xhZGVzaCAoODgwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNDYnPkJhcmJhZG9zICgyNDYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM3NSc+QmVsYXJ1cyAoMzc1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczMic+QmVsZ2l1bSAoMzIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwMSc+QmVsaXplICg1MDEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ0MSc+QmVybXVkYSAoNDQxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NzUnPkJodXRhbiAoOTc1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTEnPkJvbGl2aWEgKDU5MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjY3Jz5Cb3Rzd2FuYSAoMjY3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1NSc+QnJhemlsICg1NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjczJz5CcnVuZWkgKDY3MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzU5Jz5CdWxnYXJpYSAoMzU5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMjYnPkJ1cmtpbmEgRmFzbyAoMjI2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTcnPkJ1cnVuZGkgKDI1NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODU1Jz5DYW1ib2RpYSAoODU1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMzcnPkNhbWVyb29uICgyMzcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzEnPkNhbmFkYSAvIFVTQSAoMSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTYnPkNoaWxlICg1NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODYnPkNoaW5hICg4NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTcnPkNvbG9tYmlhICg1NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQyJz5Db25nbyAoMjQyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODInPkNvb2sgSXNsYW5kcyAoNjgyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDYnPkNvc3RhIFJpY2EgKDUwNikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzg1Jz5Dcm9hdGlhICgzODUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUzJz5DdWJhICg1MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk5Jz5DdXJhY2FvICg1OTkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1Nyc+Q3lwcnVzICgzNTcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQyMCc+Q3plY2ggUmVwdWJsaWMgKDQyMCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDUnPkRlbm1hcmsgKDQ1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNDYnPkRpZWdvIEdhcmNpYSAoMjQ2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNTMnPkRqaWJvdXRpICgyNTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzgwOSc+RG9taW5pY2EgKDgwOSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTkzJz5FY3VhZG9yICg1OTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIwJz5FZ3lwdCAoMjApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUwMyc+RWwgU2FsdmFkb3IgKDUwMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzcyJz5Fc3RvbmlhICgzNzIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI5OCc+RmFlcm9lIElzbGFuZHMgKDI5OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTAwJz5GYWxrbGFuZCAoNTAwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzknPkZpamkgSXNsYW5kcyAoNjc5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTgnPkZpbmxhbmQgKDM1OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzMnPkZyYW5jZSAoMzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5Nic+QW50aWxsZXMgICg1OTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5NCc+R3VpYW5hICg1OTQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI0MSc+R2Fib24gUmVwdWJsaWMgKDI0MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjIwJz5HYW1iaWEgKDIyMCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTk1Jz5HZW9yZ2lhICg5OTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ5Jz5HZXJtYW55ICg0OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjMzJz5HaGFuYSAoMjMzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTAnPkdpYnJhbHRhciAoMzUwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczMCc+R3JlZWNlICgzMCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjk5Jz5HcmVlbmxhbmQgKDI5OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDczJz5HcmVuYWRhICg0NzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5MCc+R3VhZGVsb3VwZSAoNTkwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzEnPkd1YW0gKDY3MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTAyJz5HdWF0ZW1hbGEgKDUwMikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTkyJz5HdXlhbmEgKDU5MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTA5Jz5IYWl0aSAoNTA5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1MDQnPkhvbmR1cmFzICg1MDQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg1Mic+SG9uZyBLb25nICg4NTIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM2Jz5IdW5nYXJ5ICgzNikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzU0Jz5JY2VsYW5kICgzNTQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzkxJz5JbmRpYSAoOTEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzYyJz5JbmRvbmVzaWEgKDYyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5OCc+SXJhbiAoOTgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2NCc+SXJhcSAoOTY0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNTMnPklyZWxhbmQgKDM1MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTcyJz5Jc3JhZWwgKDk3MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzknPkl0YWx5ICgzOSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODc2Jz5KYW1haWNhICg4NzYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzgxJz5KYXBhbiBJZGMgKDgxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4MSc+SmFwYW4gS2RkICg4MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTYyJz5Kb3JkYW4gKDk2MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNyc+S2F6YWtoc3RhbiAoNykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjU0Jz5LZW55YSAoMjU0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODYnPktpcmliYXRpICg2ODYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg1MCc+S29yZWEsIE5vcnRoICg4NTApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzgyJz5Lb3JlYSwgU291dGggKDgyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjUnPkt1d2FpdCAoOTY1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc3Jz5LeXJneXpzdGFuICg3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc4NTYnPkxhb3MgKDg1NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzcxJz5MYXR2aWEgKDM3MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTYxJz5MZWJhbm9uICg5NjEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2Nic+TGVzb3RobyAoMjY2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMzEnPkxpYmVyaWEgKDIzMSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjE4Jz5MaWJ5YSAoMjE4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0MjMnPkxpZWNodGVuc3RlaW4gKDQyMykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzcwJz5MaXRodWFuaWEgKDM3MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzUyJz5MdXhlbWJvdXJnICgzNTIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg1Myc+TWFjYW8gKDg1MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzg5Jz5NYWNlZG9uaWEgKDM4OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjYxJz5NYWRhZ2FzY2FyICgyNjEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2NSc+TWFsYXdpICgyNjUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzYwJz5NYWxheXNpYSAoNjApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2MCc+TWFsZGl2ZXMgKDk2MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjIzJz5NYWxpIFJlcHVibGljICgyMjMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM1Nic+TWFsdGEgKDM1NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjkyJz5NYXJzaGFsbCBJc2xhbmRzICg2OTIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyMic+TWF1cml0YW5pYSAoMjIyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMzAnPk1hdXJpdGl1cyAoMjMwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjknPk1heW90dGUgSXNsYW5kICgyNjkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzUyJz5NZXhpY28gKDUyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2OTEnPk1pY3JvbmVzaWEgKDY5MSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzczJz5Nb2xkb3ZhICgzNzMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzMzJz5Nb25hY28gKDMzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0NzMnPk1vbnRzZXJyYXQgKDQ3MykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjEyJz5Nb3JvY2NvICgyMTIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1OCc+TW96YW1iaXF1ZSAoMjU4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NSc+TXlhbm1hciAoOTUpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2NCc+TmFtaWJpYSAoMjY0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2NzQnPk5hdXJ1ICg2NzQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk3Nyc+TmVwYWwgKDk3NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzEnPk5ldGhlcmxhbmRzICgzMSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk5Jz5BbnRpbGxlcyAoNTk5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODcnPk5ldyBDYWxlZG9uaWEgKDY4NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjQnPk5ldyBaZWFsYW5kICg2NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTA1Jz5OaWNhcmFndWEgKDUwNSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjM0Jz5OaWdlcmlhICgyMzQpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIyNyc+TmlnZXIgUmVwdWJsaWMgKDIyNykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjgzJz5OaXVlICg2ODMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3Mic+Tm9yZm9sayBJc2xhbmQgKDY3MikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNDcnPk5vcndheSAoNDcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk2OCc+T21hbiAoOTY4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5Mic+UGFraXN0YW4gKDkyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODAnPlBhbGF1ICg2ODApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5NSc+UGFyYWd1YXkgKDU5NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTEnPlBlcnUgKDUxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2Myc+UGhpbGlwcGluZXMgKDYzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0OCc+UG9sYW5kICg0OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzUxJz5Qb3J0dWdhbCAoMzUxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc3ODcnPlB1ZXJ0byBSaWNvICg3ODcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk3NCc+UWF0YXIgKDk3NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjYyJz5SZXVuaW9uIElzbGFuZCAoMjYyKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0MCc+Um9tYW5pYSAoNDApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzcnPlJ1c3NpYSAoNykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjUwJz5Sd2FuZGEgKDI1MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNTk5Jz5TdCBFdXN0YXRpdXMgKDU5OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjkwJz5TdCBIZWxlbmEgKDI5MCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNzU4Jz5TdCBMdWNpYSAoNzU4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTknPlN0IE1hYXJ0ZW4gKDU5OSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODA5Jz5TdCBWaW5jZW50ICg4MDkpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4NCc+U2Ftb2EgKDY4NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMzc4Jz5TYW4gTWFyaW5vICgzNzgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIzOSc+U2FvIFRvbWUgKDIzOSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTY2Jz5TYXVkaSBBcmFiaWEgKDk2NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjIxJz5TZW5lZ2FsICgyMjEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzIzMic+U2llcnJhIExlb25lICgyMzIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY1Jz5TaW5nYXBvcmUgKDY1KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0MjEnPlNsb3Zha2lhICg0MjEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM4Nic+U2xvdmVuaWEgKDM4NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjc3Jz5Tb2xvbW9uIElzbGFuZHMgKDY3NykmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjUyJz5Tb21hbGlhICgyNTIpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI3Jz5Tb3V0aCBBZnJpY2EgKDI3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczNCc+U3BhaW4gKDM0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NCc+U3JpIExhbmthICg5NCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjQ5Jz5TdWRhbiAoMjQ5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OTcnPlN1cmluYW1lICg1OTcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI2OCc+U3dhemlsYW5kICgyNjgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzQ2Jz5Td2VkZW4gKDQ2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0MSc+U3dpdHplcmxhbmQgKDQxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5NjMnPlN5cmlhICg5NjMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzg4Nic+VGFpd2FuICg4ODYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzcnPlRhamlraXN0YW4gKDcpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1NSc+VGFuemFuaWEgKDI1NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjYnPlRoYWlsYW5kICg2NikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nMjI4Jz5Ub2dvICgyMjgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY3Nic+VG9uZ2EgSXNsYW5kcyAoNjc2KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyMTYnPlR1bmlzaWEgKDIxNikmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTAnPlR1cmtleSAoOTApJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9Jzk5Myc+VHVya21lbmlzdGFuICg5OTMpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzY4OCc+VHV2YWx1ICg2ODgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzI1Nic+VWdhbmRhICgyNTYpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM4MCc+VWtyYWluZSAoMzgwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc0NCc+VUsgKDQ0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScxJz5VU0EgLyBDYW5hZGEgKDEpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzU5OCc+VXJ1Z3VheSAoNTk4KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc5OTgnPlV6YmVraXN0YW4gKDk5OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nNjc4Jz5WYW51YXR1ICg2NzgpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9JzM5Jz5WYXRpY2FuIENpdHkgKDM5KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc1OCc+VmVuZXp1ZWxhICg1OCkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nODQnPlZpZXRuYW0gKDg0KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODEnPldhbGxpcyAoNjgxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSc2ODUnPldlc3Rlcm4gU2Ftb2EgKDY4NSkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nOTY3Jz5ZZW1lbiAoOTY3KSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSczODEnPlNlcmJpYSAoMzgxKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjAnPlphbWJpYSAoMjYwKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPScyNjMnPlppbWJhYndlICgyNjMpJm5ic3A7PC9vcHRpb24+PC9zZWxlY3Q+ICI7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfY291bnRyeV9jb2RlcygpIHsKICByZXR1cm4gIjxzZWxlY3QgaWQ9J2NvdW50cnknIG5hbWU9J2NvdW50cnknPjxvcHRpb24gc2VsZWN0ZWQ9J3NlbGVjdGVkJyB2YWx1ZT0nbm9uZSc+LS0tPC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0FGJz5BZmdoYW5pc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBTCc+QWxiYW5pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdEWic+QWxnZXJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBUyc+QW1lcmljYW4gU2Ftb2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQUQnPkFuZG9ycmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQU8nPkFuZ29sYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBSSc+QW5ndWlsbGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVEnPkFudGFyY3RpY2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQUcnPkFudGlndWEgYW5kIEJhcmJ1ZGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVInPkFyZ2VudGluYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBTSc+QXJtZW5pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBVyc+QXJ1YmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQVUnPkF1c3RyYWxpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBVCc+QXVzdHJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdBWic+QXplcmJhaWphbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCUyc+QmFoYW1hcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCSCc+QmFocmFpbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCRCc+QmFuZ2xhZGVzaCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCQic+QmFyYmFkb3MmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQlknPkJlbGFydXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkUnPkJlbGdpdW0mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQlonPkJlbGl6ZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCSic+QmVuaW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQk0nPkJlcm11ZGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQlQnPkJodXRhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCTyc+Qm9saXZpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCQSc+Qm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCVyc+Qm90c3dhbmEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQlYnPkJvdXZldCBJc2xhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQlInPkJyYXppbCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJTyc+QnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0JOJz5CcnVuZWkgRGFydXNzYWxhbSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCRyc+QnVsZ2FyaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQkYnPkJ1cmtpbmEgRmFzbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdCSSc+QnVydW5kaSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLSCc+Q2FtYm9kaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ00nPkNhbWVyb29uJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NBJz5DYW5hZGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ1YnPkNhcGUgVmVyZGUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS1knPkNheW1hbiBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NGJz5DZW50cmFsIEFmcmljYW4gUmVwdWJsaWMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEQnPkNoYWQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ0wnPkNoaWxlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NOJz5DaGluYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDWCc+Q2hyaXN0bWFzIElzbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDQyc+Q29jb3MgKEtlZWxpbmcpIElzbGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ08nPkNvbG9tYmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tNJz5Db21vcm9zJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NHJz5Db25nbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDRCc+Q29uZ28sIHRoZSBEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdDSyc+Q29vayBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NSJz5Db3N0YSBSaWNhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NJJz5Db3RlIEQnSXZvaXJlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0hSJz5Dcm9hdGlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NVJz5DdWJhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NZJz5DeXBydXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQ1onPkN6ZWNoIFJlcHVibGljJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0RLJz5EZW5tYXJrJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0RKJz5Eamlib3V0aSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdETSc+RG9taW5pY2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRE8nPkRvbWluaWNhbiBSZXB1YmxpYyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdFQyc+RWN1YWRvciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdFRyc+RWd5cHQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU1YnPkVsIFNhbHZhZG9yJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dRJz5FcXVhdG9yaWFsIEd1aW5lYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdFUic+RXJpdHJlYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdFRSc+RXN0b25pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdFVCc+RXRoaW9waWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nRksnPkZhbGtsYW5kIElzbGFuZHMgKE1hbHZpbmFzKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdGTyc+RmFyb2UgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdGSic+RmlqaSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdGSSc+RmlubGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdGUic+RnJhbmNlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dGJz5GcmVuY2ggR3VpYW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BGJz5GcmVuY2ggUG9seW5lc2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RGJz5GcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR0EnPkdhYm9uJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dNJz5HYW1iaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR0UnPkdlb3JnaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nREUnPkdlcm1hbnkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR0gnPkdoYW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dJJz5HaWJyYWx0YXImbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR1InPkdyZWVjZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHTCc+R3JlZW5sYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dEJz5HcmVuYWRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dQJz5HdWFkZWxvdXBlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dVJz5HdWFtJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dUJz5HdWF0ZW1hbGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nR04nPkd1aW5lYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHVyc+R3VpbmVhLUJpc3NhdSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdHWSc+R3V5YW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0hUJz5IYWl0aSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdITSc+SGVhcmQgSXNsYW5kIGFuZCBNY2RvbmFsZCBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZBJz5Ib2x5IFNlZSAoVmF0aWNhbiBDaXR5IFN0YXRlKSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdITic+SG9uZHVyYXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSEsnPkhvbmcgS29uZyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdIVSc+SHVuZ2FyeSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJUyc+SWNlbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJTic+SW5kaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSUQnPkluZG9uZXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJUic+SXJhbiwgSXNsYW1pYyBSZXB1YmxpYyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJUSc+SXJhcSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJRSc+SXJlbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdJTCc+SXNyYWVsJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0lUJz5JdGFseSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdKTSc+SmFtYWljYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdKUCc+SmFwYW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nSk8nPkpvcmRhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLWic+S2F6YWtoc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLRSc+S2VueWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS0knPktpcmliYXRpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tQJz5Lb3JlYSwgRGVtb2NyYXRpYyBQZW9wbGUncyBSZXB1YmxpYyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdLUic+S29yZWEsIFJlcHVibGljIG9mJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tXJz5LdXdhaXQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nS0cnPkt5cmd5enN0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEEnPkxhbyBQZW9wbGUncyBEZW1vY3JhdGljIFJlcHVibGljJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0xWJz5MYXR2aWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEInPkxlYmFub24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFMnPkxlc290aG8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFInPkxpYmVyaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFknPkxpYnlhbiBBcmFiIEphbWFoaXJpeWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEknPkxpZWNodGVuc3RlaW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTFQnPkxpdGh1YW5pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMVSc+THV4ZW1ib3VyZyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNTyc+TWFjYW8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUsnPk1hY2Vkb25pYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNRyc+TWFkYWdhc2NhciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNVyc+TWFsYXdpJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01ZJz5NYWxheXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNVic+TWFsZGl2ZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUwnPk1hbGkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVQnPk1hbHRhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01IJz5NYXJzaGFsbCBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01RJz5NYXJ0aW5pcXVlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01SJz5NYXVyaXRhbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J01VJz5NYXVyaXRpdXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nWVQnPk1heW90dGUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVgnPk1leGljbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdGTSc+TWljcm9uZXNpYSwgRmVkZXJhdGVkIFN0YXRlcyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNRCc+TW9sZG92YSwgUmVwdWJsaWMgb2YmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUMnPk1vbmFjbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdNTic+TW9uZ29saWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVMnPk1vbnRzZXJyYXQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTUEnPk1vcm9jY28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVonPk1vemFtYmlxdWUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTU0nPk15YW5tYXImbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTkEnPk5hbWliaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTlInPk5hdXJ1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05QJz5OZXBhbCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOTCc+TmV0aGVybGFuZHMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQU4nPk5ldGhlcmxhbmRzIEFudGlsbGVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05DJz5OZXcgQ2FsZWRvbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05aJz5OZXcgWmVhbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOSSc+TmljYXJhZ3VhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J05FJz5OaWdlciZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdORyc+TmlnZXJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOVSc+Tml1ZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdORic+Tm9yZm9sayBJc2xhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTVAnPk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdOTyc+Tm9yd2F5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J09NJz5PbWFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BLJz5QYWtpc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQVyc+UGFsYXUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUFMnPlBhbGVzdGluaWFuIFRlcnJpdG9yeSwgT2NjdXBpZWQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEEnPlBhbmFtYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQRyc+UGFwdWEgTmV3IEd1aW5lYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQWSc+UGFyYWd1YXkmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEUnPlBlcnUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUEgnPlBoaWxpcHBpbmVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BOJz5QaXRjYWlybiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQTCc+UG9sYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BUJz5Qb3J0dWdhbCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdQUic+UHVlcnRvIFJpY28mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUUEnPlFhdGFyJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1JFJz5SZXVuaW9uJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1JPJz5Sb21hbmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1JVJz5SdXNzaWFuIEZlZGVyYXRpb24mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nUlcnPlJ3YW5kYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTSCc+U2FpbnQgSGVsZW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0tOJz5TYWludCBLaXR0cyBhbmQgTmV2aXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nTEMnPlNhaW50IEx1Y2lhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1BNJz5TYWludCBQaWVycmUgYW5kIE1pcXVlbG9uJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZDJz5TYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdXUyc+U2Ftb2EmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU00nPlNhbiBNYXJpbm8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU1QnPlNhbyBUb21lIGFuZCBQcmluY2lwZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTQSc+U2F1ZGkgQXJhYmlhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NOJz5TZW5lZ2FsJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0NTJz5TZXJiaWEgYW5kIE1vbnRlbmVncm8mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0MnPlNleWNoZWxsZXMmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0wnPlNpZXJyYSBMZW9uZSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTRyc+U2luZ2Fwb3JlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NLJz5TbG92YWtpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTSSc+U2xvdmVuaWEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0InPlNvbG9tb24gSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTTyc+U29tYWxpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdaQSc+U291dGggQWZyaWNhJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dTJz5Tby4gR2VvcmdpYSBhbmQgdGhlIFNvLiBTYW5kd2ljaCBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VTJz5TcGFpbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdMSyc+U3JpIExhbmthJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NEJz5TdWRhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTUic+U3VyaW5hbWUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU0onPlN2YWxiYXJkIGFuZCBKYW4gTWF5ZW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nU1onPlN3YXppbGFuZCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdTRSc+U3dlZGVuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQ0gnPlN3aXR6ZXJsYW5kJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1NZJz5TeXJpYW4gQXJhYiBSZXB1YmxpYyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUVyc+VGFpd2FuLCBQcm92aW5jZSBvZiBDaGluYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUSic+VGFqaWtpc3RhbiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUWic+VGFuemFuaWEsIFVuaXRlZCBSZXB1YmxpYyBvZiZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUSCc+VGhhaWxhbmQmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEwnPlRpbW9yLUxlc3RlJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RHJz5Ub2dvJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RLJz5Ub2tlbGF1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RPJz5Ub25nYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUVCc+VHJpbmlkYWQgYW5kIFRvYmFnbyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUTic+VHVuaXNpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUUic+VHVya2V5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1RNJz5UdXJrbWVuaXN0YW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVEMnPlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdUVic+VHV2YWx1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1VHJz5VZ2FuZGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVUEnPlVrcmFpbmUmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nQUUnPlVuaXRlZCBBcmFiIEVtaXJhdGVzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0dCJz5Vbml0ZWQgS2luZ2RvbSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdVUyc+VW5pdGVkIFN0YXRlcyZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdVTSc+VW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1VZJz5VcnVndWF5Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1VaJz5VemJla2lzdGFuJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZVJz5WYW51YXR1Jm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZFJz5WZW5lenVlbGEmbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nVk4nPlZpZXQgTmFtJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J1ZHJz5WaXJnaW4gSXNsYW5kcywgQnJpdGlzaCZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdWSSc+VmlyZ2luIElzbGFuZHMsIFUucy4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nV0YnPldhbGxpcyBhbmQgRnV0dW5hJm5ic3A7PC9vcHRpb24+PG9wdGlvbiAgdmFsdWU9J0VIJz5XZXN0ZXJuIFNhaGFyYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdZRSc+WWVtZW4mbmJzcDs8L29wdGlvbj48b3B0aW9uICB2YWx1ZT0nWk0nPlphbWJpYSZuYnNwOzwvb3B0aW9uPjxvcHRpb24gIHZhbHVlPSdaVyc+WmltYmFid2UmbmJzcDs8L29wdGlvbj48L3NlbGVjdD4gIjsKfQoKZnVuY3Rpb24gcGxhbnlvX3ByZWZpbGxfcGFyYW1zKHBhcmFtcykgewogIGZvciAodmFyIHAgaW4gcGFyYW1zKSB7CiAgICB2YXIgbmFtZSA9IHBhcmFtc1twXTsKICAgIGlmICh0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJykgewogICAgICB2YXIgdmFsdWUgPSBwbGFueW9fZ2V0X3BhcmFtKG5hbWUpOwogICAgICBpZiAodmFsdWUgJiYgcGxhbnlvJChuYW1lKSkKCXBsYW55byQobmFtZSkudmFsdWUgPSB2YWx1ZTsKICAgICAgaWYgKHZhbHVlICYmIHBsYW55byQoJ2JveF8nK25hbWUpKQoJcGxhbnlvJCgnYm94XycrbmFtZSkudmFsdWUgPSB2YWx1ZTsKICAgICAgaWYgKHZhbHVlICYmIG5hbWUuaW5kZXhPZignYm94XycpID09IDAgJiYgcGxhbnlvJChuYW1lLnN1YnN0cig0KSkpIHsKICAgICAgICBwbGFueW8kKG5hbWUuc3Vic3RyKDQpKS52YWx1ZSA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9faXNfcHJlc2VudGF0aW9uX21vZGUoKSB7CiAgdmFyIHByZXNlbnRhdGlvbl9tb2RlID0gcGxhbnlvX2dldF9wYXJhbSAoJ3ByZXNlbnRhdGlvbl9tb2RlJyk7CiAgaWYgKHByZXNlbnRhdGlvbl9tb2RlKQogICAgcmV0dXJuIChwcmVzZW50YXRpb25fbW9kZSAhPSAnMCcpOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtICgnc3VibWl0dGVkJykgfHwgcGxhbnlvX2dldF9wYXJhbSAoJ3ByZWZpbGwnKSB8fCAocGxhbnlvX2dldF9wYXJhbSgnbW9kZScpICYmIHBsYW55b19nZXRfcGFyYW0oJ21vZGUnKSAhPSAncmVzb3VyY2VzJykpCiAgICByZXR1cm4gZmFsc2U7CiAgaWYgKHBsYW55b19pc3NldCAod2luZG93LnByZXNlbnRhdGlvbl9tb2RlKSkKICAgIHJldHVybiB3aW5kb3cucHJlc2VudGF0aW9uX21vZGU7CiAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBnZXRfcGxhbnlvX21vZGUoKSB7CiAgaWYgKHBsYW55b19pc3NldCAod2luZG93LmZvcmNlX2VtcHR5X21vZGUpICYmIHdpbmRvdy5mb3JjZV9lbXB0eV9tb2RlKQogICAgcmV0dXJuICdlbXB0eSc7CiAgdmFyIHByZXNlbnRhdGlvbl9tb2RlID0gcGxhbnlvX2lzX3ByZXNlbnRhdGlvbl9tb2RlKCk7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0gKCdyZXNvdXJjZV9pZCcpIHx8IChwbGFueW9faXNzZXQod2luZG93LnBsYW55b19yZXNvdXJjZV9pZCkgJiYgd2luZG93LnBsYW55b19yZXNvdXJjZV9pZCA+IDApKSB7CiAgICBpZiAocHJlc2VudGF0aW9uX21vZGUpCiAgICAgIHJldHVybiAncmVzb3VyY2VfZGVzYyc7CiAgICBlbHNlCiAgICAgIHJldHVybiAncmVzZXJ2ZSc7CiAgfQogIGVsc2UgewogICAgaWYgKHByZXNlbnRhdGlvbl9tb2RlKSB7CiAgICAgIGlmICh3aW5kb3cucGxhbnlvX3NpdGVfaWQuaW5kZXhPZignTScpID09IDAgJiYgIXBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSAmJiBwbGFueW9fZ2V0X3BhcmFtKCdtb2RlJykgIT0gJ3Jlc291cmNlcycpCiAgICAgICAgcmV0dXJuICdzaXRlX2xpc3QnOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuICdyZXNvdXJjZV9saXN0JzsKICAgIH0KICAgIGVsc2UgewogICAgICBpZiAocGxhbnlvX2lzc2V0ICh3aW5kb3cuZW1wdHlfbW9kZSkgJiYgd2luZG93LmVtcHR5X21vZGUgJiYgIXBsYW55b19nZXRfcGFyYW0oJ3N1Ym1pdHRlZCcpKQogICAgICAgIHJldHVybiAnZW1wdHknOwogICAgICByZXR1cm4gJ3NlYXJjaCc7CiAgICB9CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2FkZGl0aW9uYWxfcHJvcHMgKGZvcm0sIGVscykgewogIGlmIChmb3JtKSB7CiAgICB2YXIgYXIgPSBmb3JtLmVsZW1lbnRzOwogICAgZm9yKHZhciBpPTA7YXIgJiYgaTxhci5sZW5ndGg7aSsrKSB7CiAgICAgIGlmIChhciBbaV0ubmFtZSAmJiAoYXIgW2ldLm5hbWUuaW5kZXhPZigncHJvcF9yZXNfJykgPT0gMCB8fCBhciBbaV0ubmFtZS5pbmRleE9mKCdyZW50YWxfcHJvcF8nKSA9PSAwKSkKCWVscyBbZWxzLmxlbmd0aF0gPSBhciBbaV0ubmFtZTsKICAgIH0KICB9CiAgcmV0dXJuIGVsczsKfQoKZnVuY3Rpb24gZXZhbF9jaGlsZHJlbl9zY3JpcHRzKHBhcikgewogIGRvY3VtZW50LmV2YWxfdGV4dCA9IG51bGw7CiAgcGFyLmdldEVsZW1lbnRzKCdzY3JpcHQnKS5lYWNoIChmdW5jdGlvbihpdGVtKSB7CiAgICAgIGlmIChkb2N1bWVudC5ldmFsX3RleHQpIGRvY3VtZW50LmV2YWxfdGV4dCArPSAiXG4iK2l0ZW0udGV4dDsgZWxzZSBkb2N1bWVudC5ldmFsX3RleHQgPSBpdGVtLnRleHQ7CiAgICB9KTsKICAKICBpZihkb2N1bWVudC5ldmFsX3RleHQpIHsKICAgIGlmKHdpbmRvdy5leGVjU2NyaXB0KQogICAgICB3aW5kb3cuZXhlY1NjcmlwdChkb2N1bWVudC5ldmFsX3RleHQpOwogICAgZWxzZQogICAgICBzZXRUaW1lb3V0KCJldmFsKGRvY3VtZW50LmV2YWxfdGV4dCkiLCAwKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19mb3JtX2xvYWRlZChjb2RlKSB7CiAgaWYgKCFjb2RlIHx8IGNvZGUuc3Vic3RyICgwLCA1KSA9PSAiRXJyb3IiKSB7CiAgICB3aW5kb3cubG9jYXRpb24gPSAod2luZG93LnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzZXJ2ZS5waHA/Y2FsZW5kYXI9IiArIHdpbmRvdy5wbGFueW9fc2l0ZV9pZDsKICB9CiAgZWxzZSB7CiAgICBjb2RlID0gY29kZS5yZXBsYWNlKCJ7UEgtbW9iaWxlX2NvdW50cnlfcGFyYW19IiwgcGxhbnlvX2dldF9waG9uZV9jb2RlcygibW9iaWxlX2NvdW50cnlfcGFyYW0iKSk7CiAgICBjb2RlID0gY29kZS5yZXBsYWNlKCJ7UEgtcGhvbmVfY291bnRyeV9wYXJhbX0iLCBwbGFueW9fZ2V0X3Bob25lX2NvZGVzKCJwaG9uZV9jb3VudHJ5X3BhcmFtIikpOwogICAgY29kZSA9IGNvZGUucmVwbGFjZSgie0NPLWNvdW50cnlfcGFyYW19IiwgcGxhbnlvX2dldF9jb3VudHJ5X2NvZGVzKCkpOwogICAgLy9jb2RlID0gY29kZS5yZXBsYWNlKC9pY29uLWNhbGVuZGFyLnBuZy9nLCBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJpY29uLWNhbGVuZGFyLnBuZyIpKTsKICAgIC8vY29kZSA9IGNvZGUucmVwbGFjZSgvaWNvbi1oZWxwLmdpZi9nLCBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKCJpY29uLWhlbHAuZ2lmIikpOwogICAgY29kZSA9IGNvZGUucmVwbGFjZSgvcGxhbnlvLXN0eWxlcy5jc3MvZywgZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgicGxhbnlvLXN0eWxlcy5jc3MiKSk7CiAgICBwbGFueW8kKCdwbGFueW9fY29udGVudCcpLmlubmVySFRNTCA9IGNvZGU7CgogICAgaWYgKCFwbGFueW9faXNzZXQod2luZG93LlJlcXVlc3QpIHx8ICFwbGFueW9faXNzZXQod2luZG93LlJlcXVlc3QuSlNPTikpIHsKICAgICAgZXZhbF9jaGlsZHJlbl9zY3JpcHRzKHBsYW55byQoJ3BsYW55b19jb250ZW50JykpOwogICAgfQoKICAgIHZhciBwbGFueW9fbW9kZSA9IHBsYW55b19nZXRfcGFyYW0oJ21vZGUnKTsKICAgIGlmICghcGxhbnlvX2lzX3NwZWNpYWxfbW9kZShwbGFueW9fbW9kZSkpCiAgICAgIHBsYW55b19tb2RlID0gZ2V0X3BsYW55b19tb2RlKCk7CiAgICBpZiAocGxhbnlvX21vZGUgPT0gJ3NlYXJjaCcpIHsKICAgICAgcGxhbnlvJCgnc2VhcmNoX2Zvcm0nKS5vbnN1Ym1pdD1wbGFueW9fc2VuZF9zZWFyY2hfZm9ybTsKICAgICAgdmFyIHBhcmFtc19hcnJheSA9IG5ldyBBcnJheSgnc3RhcnRfZGF0ZScsICdlbmRfZGF0ZScsICdvbmVfZGF0ZScsICdzdGFydF90aW1lJywgJ2VuZF90aW1lJywgJ3NvcnQnLCAnYm94X3N0YXJ0X2RhdGUnLCAnYm94X2VuZF9kYXRlJywgJ2JveF9vbmVfZGF0ZScsICdib3hfc3RhcnRfdGltZScsICdib3hfZW5kX3RpbWUnLCAncmVudGFsX3RpbWVfdmFsdWUnKTsKICAgICAgcGxhbnlvX2dldF9hZGRpdGlvbmFsX3Byb3BzIChwbGFueW8kKCdzZWFyY2hfZm9ybScpLCBwYXJhbXNfYXJyYXkpOwogICAgICBwbGFueW9fcHJlZmlsbF9wYXJhbXMocGFyYW1zX2FycmF5KTsKICAgICAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3N1Ym1pdHRlZCcpKSB7CglwbGFueW9fc2VuZF9zZWFyY2hfZm9ybSgpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAncmVzZXJ2ZScpIHsKICAgICAgc2V0VGltZW91dCgiaWYod2luZG93LnBsYW55b19kYXRlc19jaGFuZ2VkKSBwbGFueW9fZGF0ZXNfY2hhbmdlZCgpOyIsMTAwKTsKICAgICAgc2V0VGltZW91dCgiaWYod2luZG93LnBsYW55b19kYXRlc19jaGFuZ2VkKSBwbGFueW9fZGF0ZXNfY2hhbmdlZCgpOyIsMTUwMCk7CiAgICAgIHNldFRpbWVvdXQoImlmKHdpbmRvdy5wbGFueW9fZGF0ZXNfY2hhbmdlZCkgcGxhbnlvX2RhdGVzX2NoYW5nZWQoKTsiLDUwMDApOwogICAgICBpZiAocGxhbnlvJCgncmVzZXJ2ZV9mb3JtJykpCiAgICAgICAgcGxhbnlvJCgncmVzZXJ2ZV9mb3JtJykub25zdWJtaXQ9cGxhbnlvX3NlbmRfcmVzZXJ2YXRpb25fZm9ybTsKICAgICAgaWYgKHBsYW55byQoJ3Byb2R1Y3RfZm9ybScpKQogICAgICAgIHBsYW55byQoJ3Byb2R1Y3RfZm9ybScpLm9uc3VibWl0PXBsYW55b19zZW5kX3Byb2R1Y3RfZm9ybTsKICAgICAgdmFyIHBhcmFtc19hcnJheSA9IG5ldyBBcnJheSgnc3RhcnRfZGF0ZScsICdlbmRfZGF0ZScsICdvbmVfZGF0ZScsICdzdGFydF90aW1lJywgJ2VuZF90aW1lJywgJ2JveF9zdGFydF9kYXRlJywgJ2JveF9lbmRfZGF0ZScsICdib3hfb25lX2RhdGUnLCAnYm94X3N0YXJ0X3RpbWUnLCAnYm94X2VuZF90aW1lJywgJ3JlbnRhbF90aW1lX3ZhbHVlJyk7CiAgICAgIHBsYW55b19nZXRfYWRkaXRpb25hbF9wcm9wcyAocGxhbnlvJCgncmVzZXJ2ZV9mb3JtJyksIHBhcmFtc19hcnJheSk7CiAgICAgIHBsYW55b19wcmVmaWxsX3BhcmFtcyhwYXJhbXNfYXJyYXkpOwogICAgICBpZiAocGxhbnlvJCgicGxhbnlvX3ByaWNlX2hvbGRlciIpKSB7CiAgICAgICAgcGxhbnlvJCgncGxhbnlvX3ByaWNlX2hvbGRlcicpLmFwcGVuZENoaWxkKHBsYW55byQoJ3ByaWNlX2luZm8nKSk7CiAgICAgICAgcGxhbnlvJCgncGxhbnlvX3ByaWNlX2hvbGRlcicpLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICBwbGFueW8kKCdwcmljZV9pbmZvX2RpdicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHBsYW55b19tb2RlID09ICdjaGVja291dCcpIHsKICAgICAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cuanNfc3VibWl0X3BheW1lbnRfZm9ybSkpCiAgICAgICAgd2luZG93LmpzX3N1Ym1pdF9wYXltZW50X2Zvcm0oKTsKICAgIH0KICAgIGlmIChwbGFueW9faXNzZXQod2luZG93Lm9uX3BsYW55b19mb3JtX2xvYWRlZCkpCiAgICAgIHdpbmRvdy5vbl9wbGFueW9fZm9ybV9sb2FkZWQocGxhbnlvX21vZGUpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX2NvZGUoZm9ybV91cmwsIGZvcm1fdXJsX3BhcmFtcykgewogIGlmICh3aW5kb3cucGxhbnlvX2xhbmd1YWdlKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImbGFuZ3VhZ2U9IiArIHBsYW55b19sYW5ndWFnZS50b1VwcGVyQ2FzZSgpOwogIGZvcm1fdXJsX3BhcmFtcyArPSAiJmh0bWxfY29udGVudF90eXBlPTEiOwogIHZhciBzaG9wcGluZ19jYXJ0X2lkID0gcGxhbnlvX2dldF9jb29raWUgKCdwbGFueW9fY2FydF9pZCcpOwogIGlmIChzaG9wcGluZ19jYXJ0X2lkICYmIGZvcm1fdXJsX3BhcmFtcy5pbmRleE9mKCdjYXJ0X2lkPScpID09IC0xKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImY2FydF9pZD0iICsgc2hvcHBpbmdfY2FydF9pZCArICImZmlyc3RfcmVzZXJ2YXRpb25faWQ9IiArIHBsYW55b19nZXRfY29va2llKCdwbGFueW9fZmlyc3RfcmVzZXJ2YXRpb25faWQnKTsKICBmb3JtX3VybF9wYXJhbXMgKz0gIiZ1c2VyX2FnZW50PSIgKyBuYXZpZ2F0b3IudXNlckFnZW50Ow0KICBkb2N1bWVudC5wbGFueW9fZmlsZV9wYXRoID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCgnJyk7DQogIGlmIChwbGFueW9faXNzZXQod2luZG93LlJlcXVlc3QpICYmIHBsYW55b19pc3NldCh3aW5kb3cuUmVxdWVzdC5KU09OKSkgewogICAgdmFyIHhocl9yZXEgPSBuZXcgUmVxdWVzdCAoCgkJCQkgICAgewoJCQkJICAgIHVybDpmb3JtX3VybCwKCQkJCQltZXRob2Q6J3Bvc3QnLAoJCQkJCW9uU3VjY2VzczogcGxhbnlvX2Zvcm1fbG9hZGVkLAoJCQkJCWV2YWxTY3JpcHRzOiB0cnVlCgkJCQkJfSkuc2VuZChmb3JtX3VybF9wYXJhbXMpOwogIH0KICBlbHNlIHsKICAgIHZhciB4aHJfcmVxID0gbmV3IFhIUiAoewogICAgICBtZXRob2Q6J3Bvc3QnLAoJICBvblN1Y2Nlc3M6IHBsYW55b19mb3JtX2xvYWRlZCwKCSAgZXZhbFNjcmlwdHM6IHRydWUKCSAgfSkuc2VuZChmb3JtX3VybCwgZm9ybV91cmxfcGFyYW1zKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9jYW5jZWxfY29kZShzaXRlX2lkLCByZXNlcnZhdGlvbl9pZCwgYywgdXNlcl9pZCwgcmVzb3VyY2VfaWQpIHsKICBpZiAocmVzZXJ2YXRpb25faWQpIHsKICAgIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9jYW5jZWxfY29kZSZyZXNlcnZhdGlvbl9pZD0iK3Jlc2VydmF0aW9uX2lkKyImYz0iK2MrIiZyZXNvdXJjZV9pZD0iK3Jlc291cmNlX2lkKyImdXNlcl9pZD0iK3VzZXJfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrIiZzaXRlX2lkPSIrc2l0ZV9pZDsKICAgIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3Jlc2VydmF0aW9uX2RldGFpbHMoc2l0ZV9pZCwgcmVzZXJ2YXRpb25faWQsIHVzZXJfaWQpIHsKICBpZiAocmVzZXJ2YXRpb25faWQpIHsKICAgIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9yZXNlcnZhdGlvbl9kZXRhaWxzX2NvZGUmcmVzZXJ2YXRpb25faWQ9IityZXNlcnZhdGlvbl9pZCsiJnVzZXJfaWQ9Iit1c2VyX2lkKyImZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpKyImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgICBwbGFueW9fZW1iZWRfY29kZSAoZm9ybV91cmwsZm9ybV91cmxfcGFyYW1zKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9yZXNlcnZhdGlvbl9saXN0KHNpdGVfaWQsIHJlc2VydmF0aW9uX2lkLCB1c2VyX2lkKSB7CiAgaWYgKHJlc2VydmF0aW9uX2lkKSB7CiAgICB2YXIgZm9ybV91cmwgPSBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKHVsYXBfc2NyaXB0KTsKICAgIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9Iisod2luZG93LnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfcmVzZXJ2YXRpb25fbGlzdF9jb2RlJnJlc2VydmF0aW9uX2lkPSIrcmVzZXJ2YXRpb25faWQrIiZ1c2VyX2lkPSIrdXNlcl9pZCsiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKSsiJnNpdGVfaWQ9IitzaXRlX2lkOwogICAgcGxhbnlvX2VtYmVkX2NvZGUgKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcGF5bWVudF9mb3JtKHNpdGVfaWQsIHJlc2VydmF0aW9uX2lkLCB1c2VyX2lkLCBhdXRvX3JlZGlyZWN0KSB7CiAgaWYgKHJlc2VydmF0aW9uX2lkKSB7CiAgICB2YXIgZm9ybV91cmwgPSBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKHVsYXBfc2NyaXB0KTsKICAgIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9Iisod2luZG93LnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfcGF5bWVudF9mb3JtX2NvZGUmcmVzZXJ2YXRpb25faWQ9IityZXNlcnZhdGlvbl9pZCsiJnVzZXJfaWQ9Iit1c2VyX2lkKyImZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpKyImc2l0ZV9pZD0iK3NpdGVfaWQrKGF1dG9fcmVkaXJlY3QgPyAiJmF1dG9fcmVkaXJlY3Q9IithdXRvX3JlZGlyZWN0IDogIiIpOwogICAgdmFyIGFtb3VudCA9IHBsYW55b19nZXRfcGFyYW0oJ2Ftb3VudCcpOwogICAgaWYgKGFtb3VudCkKICAgICAgZm9ybV91cmxfcGFyYW1zICs9ICImYW1vdW50PSIrYW1vdW50OwogICAgcGxhbnlvX2VtYmVkX2NvZGUgKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfY2FydF9jb2RlKHNpdGVfaWQsIGNhcnRfaWQsIGZpcnN0X3Jlc2VydmF0aW9uX2lkLCByZW1vdmVfcmVzZXJ2YXRpb25faWQpIHsKICBpZiAoIWNhcnRfaWQpIHsKICAgIGNhcnRfaWQgPSBwbGFueW9fZ2V0X2Nvb2tpZSgncGxhbnlvX2NhcnRfaWQnKTsKICAgIGZpcnN0X3Jlc2VydmF0aW9uX2lkID0gcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19maXJzdF9yZXNlcnZhdGlvbl9pZCcpOwogIH0KICB2YXIgZm9ybV91cmwgPSBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKHVsYXBfc2NyaXB0KTsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X2NhcnRfY29kZSZmaXJzdF9yZXNlcnZhdGlvbl9pZD0iK2ZpcnN0X3Jlc2VydmF0aW9uX2lkKyImcmVtb3ZlX3Jlc2VydmF0aW9uX2lkPSIrKHJlbW92ZV9yZXNlcnZhdGlvbl9pZCA/IHJlbW92ZV9yZXNlcnZhdGlvbl9pZCA6ICIiKSsiJmNhcnRfaWQ9IitjYXJ0X2lkKyImZmVlZGJhY2tfdXJsPSIrcGxhbnlvX2dldF9jdXJyZW50X3VybCgpKyImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgcGxhbnlvX2VtYmVkX2NvZGUgKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9jaGVja291dF9jb2RlKHNpdGVfaWQsIGNhcnRfaWQsIGZpcnN0X3Jlc2VydmF0aW9uX2lkKSB7CiAgaWYgKCFjYXJ0X2lkKSB7CiAgICBjYXJ0X2lkID0gcGxhbnlvX2dldF9jb29raWUoJ3BsYW55b19jYXJ0X2lkJyk7CiAgICBmaXJzdF9yZXNlcnZhdGlvbl9pZCA9IHBsYW55b19nZXRfY29va2llKCdwbGFueW9fZmlyc3RfcmVzZXJ2YXRpb25faWQnKTsKICB9CiAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9jaGVja291dF9jb2RlJmZpcnN0X3Jlc2VydmF0aW9uX2lkPSIrZmlyc3RfcmVzZXJ2YXRpb25faWQrIiZjYXJ0X2lkPSIrY2FydF9pZCsiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKSsiJnNpdGVfaWQ9IitzaXRlX2lkOwogIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwp9CgpmdW5jdGlvbiBwbGFueW9fZW1iZWRfcmVzZXJ2YXRpb25fZm9ybShzaXRlX2lkLCByZXNvdXJjZV9pZCkgewogIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogIGlmICghcmVzb3VyY2VfaWQpIHsKICAgIGlmIChwbGFueW9faXNzZXQgKHdpbmRvdy5wbGFueW9fcmVzb3VyY2VfaWQpKQogICAgICByZXNvdXJjZV9pZCA9IHdpbmRvdy5wbGFueW9fcmVzb3VyY2VfaWQ7CiAgICBlbHNlCiAgICAgIHJlc291cmNlX2lkID0gJyc7CiAgfQogIHZhciBkYXRlX3N0ciA9ICcnOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdzdGFydF9kYXRlJykpCiAgICBkYXRlX3N0ciA9ICImc3RhcnRfZGF0ZT0iK3BsYW55b19nZXRfcGFyYW0oJ3N0YXJ0X2RhdGUnKTsKICBlbHNlIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdvbmVfZGF0ZScpKQogICAgZGF0ZV9zdHIgPSAiJm9uZV9kYXRlPSIrcGxhbnlvX2dldF9wYXJhbSgnb25lX2RhdGUnKTsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3Jlc2VydmF0aW9uX2Zvcm1fY29kZSZzaXRlX2lkPSIrc2l0ZV9pZCsiJnJlc291cmNlX2lkPSIrcmVzb3VyY2VfaWQrIiZmZWVkYmFja191cmw9IitwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkrZGF0ZV9zdHI7CiAgcGxhbnlvX2VtYmVkX2NvZGUgKGZvcm1fdXJsLGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9hZGRpdGlvbmFsX3Byb2R1Y3RzX2Zvcm0ocmVzZXJ2YXRpb25faWQpIHsKICBpZiAocmVzZXJ2YXRpb25faWQpIHsKICAgIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogICAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9hZGRpdGlvbmFsX3Byb2R1Y3RzX2NvZGUmcmVzZXJ2YXRpb25faWQ9IityZXNlcnZhdGlvbl9pZCsiJmZlZWRiYWNrX3VybD0iK3BsYW55b19nZXRfY3VycmVudF91cmwoKTsKICAgIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCxmb3JtX3VybF9wYXJhbXMpOwogIH0KfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3NlYXJjaF9mb3JtKHNpdGVfaWQpIHsKICB2YXIgZm9ybV91cmwgPSBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKHVsYXBfc2NyaXB0KTsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3NlYXJjaF9mb3JtX2NvZGUmZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkgKyAiJmV4dHJhX3NlYXJjaF9maWVsZHM9IiArIChwbGFueW9fZ2V0X3BhcmFtKCdleHRyYV9zZWFyY2hfZmllbGRzJykgPyBwbGFueW9fZ2V0X3BhcmFtKCdleHRyYV9zZWFyY2hfZmllbGRzJykgOiBleHRyYV9zZWFyY2hfZmllbGRzKSArICImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgaWYgKHBsYW55b19pc3NldCh3aW5kb3cuc29ydF9maWVsZHMpKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICImc29ydF9maWVsZHM9Iitzb3J0X2ZpZWxkczsKICB2YXIgcmFuZ2Vfc2VhcmNoID0gcGxhbnlvX2dldF9wYXJhbSgncmFuZ2Vfc2VhcmNoJyk7CiAgaWYgKCFyYW5nZV9zZWFyY2gpCiAgICByYW5nZV9zZWFyY2ggPSBkb2N1bWVudC5yYW5nZV9zZWFyY2g7CiAgaWYgKHJhbmdlX3NlYXJjaCkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAiJnJhbmdlX3NlYXJjaD0iK3JhbmdlX3NlYXJjaDsKICBwbGFueW9fZW1iZWRfY29kZSAoZm9ybV91cmwsIGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9yZXNvdXJjZV9saXN0KHNpdGVfaWQpIHsKICB2YXIgZm9ybV91cmwgPSBnZXRfZnVsbF9wbGFueW9fZmlsZV9wYXRoKHVsYXBfc2NyaXB0KTsKICB2YXIgZm9ybV91cmxfcGFyYW1zID0gInVsYXBfdXJsPSIrKHdpbmRvdy5wbGFueW9fdXNlX2h0dHBzID8gImh0dHBzIiA6ICJodHRwIikrIjovL3d3dy5wbGFueW8uY29tL3Jlc3QvcGxhbnlvLXJlc2VydmF0aW9ucy5waHAmbW9kZT1kaXNwbGF5X3Jlc291cmNlX2xpc3RfY29kZSZmZWVkYmFja191cmw9IiArIHBsYW55b19nZXRfY3VycmVudF91cmwoKSArICImc2l0ZV9pZD0iK3NpdGVfaWQ7CiAgaWYgKHdpbmRvdy5wbGFueW9fc2l0ZV9pZC5pbmRleE9mKCdNJyk9PTApCiAgICBmb3JtX3VybF9wYXJhbXMgKz0gIiZtZXRhc2l0ZV9pZD0iK3dpbmRvdy5wbGFueW9fc2l0ZV9pZC5zdWJzdHIoMSk7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfbmFtZScpKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICcmJyArIHBsYW55b19nZXRfcGFyYW0oJ3Jlc19maWx0ZXJfbmFtZScpICsgJz0nICsgcGxhbnlvX2dldF9wYXJhbSgncmVzX2ZpbHRlcl92YWx1ZScpOwogIGlmIChwbGFueW9fZ2V0X3BhcmFtKCdjYWxfZmlsdGVyX25hbWUnKSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAnJicgKyBwbGFueW9fZ2V0X3BhcmFtKCdjYWxfZmlsdGVyX25hbWUnKSArICc9JyArIHBsYW55b19nZXRfcGFyYW0oJ2NhbF9maWx0ZXJfdmFsdWUnKTsKICBpZiAocGxhbnlvX2dldF9wYXJhbSgnc29ydCcpKQogICAgZm9ybV91cmxfcGFyYW1zICs9ICcmc29ydD0nICsgcGxhbnlvX2dldF9wYXJhbSgnc29ydCcpOwogIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCwgZm9ybV91cmxfcGFyYW1zKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2VtYmVkX3NpdGVfbGlzdChtZXRhc2l0ZV9pZCkgewogIHZhciBmb3JtX3VybCA9IGdldF9mdWxsX3BsYW55b19maWxlX3BhdGgodWxhcF9zY3JpcHQpOwogIHZhciBmb3JtX3VybF9wYXJhbXMgPSAidWxhcF91cmw9Iisod2luZG93LnBsYW55b191c2VfaHR0cHMgPyAiaHR0cHMiIDogImh0dHAiKSsiOi8vd3d3LnBsYW55by5jb20vcmVzdC9wbGFueW8tcmVzZXJ2YXRpb25zLnBocCZtb2RlPWRpc3BsYXlfc2l0ZV9saXN0X2NvZGUmZmVlZGJhY2tfdXJsPSIgKyBwbGFueW9fZ2V0X2N1cnJlbnRfdXJsKCkgKyAiJm1ldGFzaXRlX2lkPSIrbWV0YXNpdGVfaWQ7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0oJ3NvcnQnKSkKICAgIGZvcm1fdXJsX3BhcmFtcyArPSAnJnNvcnQ9JyArIHBsYW55b19nZXRfcGFyYW0oJ3NvcnQnKTsKICBwbGFueW9fZW1iZWRfY29kZSAoZm9ybV91cmwsIGZvcm1fdXJsX3BhcmFtcyk7Cn0KCmZ1bmN0aW9uIHBsYW55b19lbWJlZF9yZXNvdXJjZV9kZXNjKHJlc291cmNlX2lkLCBzaXRlX2lkKSB7CiAgaWYgKCFyZXNvdXJjZV9pZCkgewogICAgaWYgKHBsYW55b19pc3NldCAod2luZG93LnBsYW55b19yZXNvdXJjZV9pZCkpCiAgICAgIHJlc291cmNlX2lkID0gd2luZG93LnBsYW55b19yZXNvdXJjZV9pZDsKICAgIGVsc2UKICAgICAgcmVzb3VyY2VfaWQgPSAnJzsKICB9CiAgdmFyIGZvcm1fdXJsID0gZ2V0X2Z1bGxfcGxhbnlvX2ZpbGVfcGF0aCh1bGFwX3NjcmlwdCk7CiAgdmFyIGZvcm1fdXJsX3BhcmFtcyA9ICJ1bGFwX3VybD0iKyh3aW5kb3cucGxhbnlvX3VzZV9odHRwcyA/ICJodHRwcyIgOiAiaHR0cCIpKyI6Ly93d3cucGxhbnlvLmNvbS9yZXN0L3BsYW55by1yZXNlcnZhdGlvbnMucGhwJm1vZGU9ZGlzcGxheV9zaW5nbGVfcmVzb3VyY2VfY29kZSZmZWVkYmFja191cmw9IiArIHBsYW55b19nZXRfY3VycmVudF91cmwoKSArICImcmVzb3VyY2VfaWQ9IityZXNvdXJjZV9pZCsiJnNpdGVfaWQ9IitzaXRlX2lkOwogIHBsYW55b19lbWJlZF9jb2RlIChmb3JtX3VybCwgZm9ybV91cmxfcGFyYW1zKTsKfQoKZnVuY3Rpb24gaW5pdF9wbGFueW8oKSB7CiAgaWYgKHBsYW55byQoJ3BsYW55b19wcmljZV9ob2xkZXInKSkKICAgIHBsYW55byQoJ3BsYW55b19wcmljZV9ob2xkZXInKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIGlmICh3aW5kb3cucGxhbnlvX3NpdGVfaWQgPT0gJ2RlbW8nKQogICAgd2luZG93LnBsYW55b19zaXRlX2lkID0gMTE7CiAgaWYgKHBsYW55b19nZXRfcGFyYW0gKCdsYW5nJykpCiAgICBwbGFueW9fbGFuZ3VhZ2UgPSBwbGFueW9fZ2V0X3BhcmFtKCdsYW5nJyk7CiAgaWYgKCFwbGFueW9faW5pdF9zcGVjaWFsX21vZGVzKCkpIHsKICAgIHZhciBwbGFueW9fbW9kZSA9IGdldF9wbGFueW9fbW9kZSgpOwogICAgaWYgKHBsYW55b19tb2RlID09ICdzZWFyY2gnKQogICAgICBwbGFueW9fZW1iZWRfc2VhcmNoX2Zvcm0od2luZG93LnBsYW55b19zaXRlX2lkKTsKICAgIGVsc2UgaWYgKHBsYW55b19tb2RlID09ICdyZXNlcnZlJykKICAgICAgcGxhbnlvX2VtYmVkX3Jlc2VydmF0aW9uX2Zvcm0od2luZG93LnBsYW55b19zaXRlX2lkLCBwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpKTsKICAgIGVsc2UgaWYgKHBsYW55b19tb2RlID09ICdyZXNvdXJjZV9saXN0JykKICAgICAgcGxhbnlvX2VtYmVkX3Jlc291cmNlX2xpc3QoKHBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSAmJiB3aW5kb3cucGxhbnlvX3NpdGVfaWQuaW5kZXhPZignTScpPT0wKSA/IHBsYW55b19nZXRfcGFyYW0oJ3NpdGVfaWQnKSA6IHdpbmRvdy5wbGFueW9fc2l0ZV9pZCk7CiAgICBlbHNlIGlmIChwbGFueW9fbW9kZSA9PSAnc2l0ZV9saXN0JyAmJiB3aW5kb3cucGxhbnlvX3NpdGVfaWQuaW5kZXhPZignTScpPT0wKQogICAgICBwbGFueW9fZW1iZWRfc2l0ZV9saXN0KHdpbmRvdy5wbGFueW9fc2l0ZV9pZC5zdWJzdHIoMSkpOwogICAgZWxzZSBpZiAocGxhbnlvX21vZGUgPT0gJ3Jlc291cmNlX2Rlc2MnKQogICAgICBwbGFueW9fZW1iZWRfcmVzb3VyY2VfZGVzYyhwbGFueW9fZ2V0X3BhcmFtKCdyZXNvdXJjZV9pZCcpLCB3aW5kb3cucGxhbnlvX3NpdGVfaWQpOwogICAgZWxzZSBpZiAocGxhbnlvX21vZGUgPT0gJ2VtcHR5JykKICAgICAgcGxhbnlvJCgncGxhbnlvX2NvbnRlbnQnKS5pbm5lckhUTUwgPSAiIjsKICB9Cn0KCndpbmRvdy5hZGRFdmVudCgnZG9tcmVhZHknLCBpbml0X3BsYW55byk7Cg==]]></data>
	</file>
	<file>
	  <filename>/planyo-styles.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I3Jlc2VydmVfZm9ybSwgI3NlYXJjaF9mb3JtLCAjYm94X3NlYXJjaF9mb3JtLCAjcHJvZHVjdF9mb3JtLCAjcHJlc2VudGF0aW9uX2NvZGUsICNyZXNvdXJjZXMgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsJCiAgICBmb250OiBub3JtYWwgMTJweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgZGlzcGxheTogYmxvY2s7CiAgICB0ZXh0LWFsaWduOmxlZnQ7Cn0KCiNwbGFueW9fY29udGVudCB7CiAgICBtYXJnaW4tYm90dG9tOjMwcHg7Cn0KCiNwbGFueW9fY29udGVudCBhLCAjcGxhbnlvX3BsdWdpbl9jb2RlIGEgewogICAgY29sb3I6ICNlMDU4MTc7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCiNwbGFueW9fY29udGVudCBhOmhvdmVyLCAjcGxhbnlvX3BsdWdpbl9jb2RlIGE6aG92ZXIgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCiNyZXNlcnZlX2Zvcm0sICNyZXNvdXJjZXMsICNwcmVzZW50YXRpb25fY29kZSB7CiAgICB3aWR0aDoxMDAlOwp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSBmaWVsZHNldCwgI2JveF9zZWFyY2hfZm9ybSBmaWVsZHNldCwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIGZpZWxkc2V0IHsKICAgIHBhZGRpbmc6IDFlbSAwOwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZy10b3A6IDA7Cn0KCiNwbGFueW9fY29udGVudCBmb3JtIGZpZWxkc2V0IGxlZ2VuZCwgI2JveF9zZWFyY2hfZm9ybSBmaWVsZHNldCBsZWdlbmQsICNwbGFueW9fcGx1Z2luX2NvZGUgZm9ybSBmaWVsZHNldCBsZWdlbmQgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTozcHg7CiAgICBwYWRkaW5nOjA7CiAgICBwYWRkaW5nLXJpZ2h0OiAxZW07CiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2UwZTBlMDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgY29sb3I6IGJsYWNrOwp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSBsYWJlbCwgI2JveF9zZWFyY2hfZm9ybSBsYWJlbCwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIGxhYmVsIHsKICAgIGRpc3BsYXk6IGlubGluZTsKICAgIGZsb2F0OiBsZWZ0OwogICAgY2xlYXI6IGxlZnQ7CiAgICB3aWR0aDogMTJlbTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgIG1hcmdpbi10b3A6MnB4Owp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSBsYWJlbCBlbSwgI2JveF9zZWFyY2hfZm9ybSBsYWJlbCBlbSwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIGxhYmVsIGVtIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgY29sb3I6IHJlZDsKfQoKI3BsYW55b19jb250ZW50IGZvcm0gc2VsZWN0LCAjYm94X3NlYXJjaF9mb3JtIHNlbGVjdCwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIHNlbGVjdCB7CiAgICBtYXJnaW4tYm90dG9tOjNweDsKfQoKI3BsYW55b19jb250ZW50IGZvcm0gaW5wdXQsICNib3hfc2VhcmNoX2Zvcm0gaW5wdXQsICNwbGFueW9fcGx1Z2luX2NvZGUgZm9ybSBpbnB1dCB7CiAgICBwYWRkaW5nLXRvcDogMnB4OwogICAgbWFyZ2luLWJvdHRvbTozcHg7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBkaXNwbGF5OmlubGluZTsKfQoKI3BsYW55b19jb250ZW50IGZvcm0gaW5wdXRbdHlwZT0idGV4dCJdLCAjcGxhbnlvX3BsdWdpbl9jb2RlIGZvcm0gaW5wdXRbdHlwZT0idGV4dCJdIHsKICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICB3aWR0aDoxNWVtOwp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSAjb25lX2RhdGUsICNwbGFueW9fY29udGVudCBmb3JtICNzdGFydF9kYXRlLCNwbGFueW9fY29udGVudCBmb3JtICNlbmRfZGF0ZSwKI2JveF9vbmVfZGF0ZSwgI2JveF9zdGFydF9kYXRlLCNib3hfZW5kX2RhdGUsCiNwbGFueW9fcGx1Z2luX2NvZGUgZm9ybSAjb25lX2RhdGUsICNwbGFueW9fcGx1Z2luX2NvZGUgZm9ybSAjc3RhcnRfZGF0ZSwjcGxhbnlvX3BsdWdpbl9jb2RlIGZvcm0gI2VuZF9kYXRlIHsKICAgIHdpZHRoOjhlbTsKfQoKI3Jlc2VydmVfZm9ybSAjcGhvbmUsICNyZXNlcnZlX2Zvcm0gI21vYmlsZV9udW1iZXJfcGFyYW0gewogICAgd2lkdGg6OGVtOwp9CgoucGFnZS1wbGFueW8gI3BsYW55b19jb250ZW50IHVsIHsKICAgIG1hcmdpbi10b3A6MjNweDsKfQoKI3BsYW55b19jb250ZW50IHVsLnN1bW1hcnksICNwbGFueW9fcGx1Z2luX2NvZGUgdWwuc3VtbWFyeSwgI2JveF9zZWFyY2hfZm9ybSB1bC5zdW1tYXJ5IHsKICAgIGxpbmUtaGVpZ2h0OjEuNTsKfQoKI3BsYW55b19jb250ZW50IHVsLCAjcGxhbnlvX3BsdWdpbl9jb2RlIHVsLCAjYm94X3NlYXJjaF9mb3JtIHVsIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOjA7CiAgICB0ZXh0LWluZGVudDowOwp9CgojcGxhbnlvX2NvbnRlbnQgZm9ybSBsaSwgI3BsYW55b19wbHVnaW5fY29kZSBmb3JtIGxpLCAjcmVzb3VyY2VzIGxpLCAjYm94X3NlYXJjaF9mb3JtIHVsIHsKICAgIG1hcmdpbjogMCAwIC41ZW0gMDsKICAgIGNsZWFyOmJvdGg7Cn0KCiNwbGFueW9fY29udGVudCAuYnV0dG9uLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5idXR0b24sICNwbGFueW9fY29udGVudCAuY2hlY2tvdXRfYnV0dG9uIHsKICAgIGRpc3BsYXk6YmxvY2s7CiAgICBtYXJnaW46IDAgMCAxZW07CiAgICBwYWRkaW5nOiAwIC41ZW07CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBsaW5lLWhlaWdodDoyNHB4OyAgICAKICAgIGJhY2tncm91bmQ6IHVybChidXR0b24tYmcucG5nKTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOjNweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1czozcHg7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Owp9CgojcGxhbnlvX2NvbnRlbnQgLmNoZWNrb3V0X2J1dHRvbiB7CiAgICBtYXJnaW46NXB4IDAgMjVweDsKICAgIHdpZHRoOjE2MHB4OwogICAgdGV4dC1hbGlnbjpjZW50ZXI7Cn0KCiNwbGFueW9fY29udGVudCBsaSBpbWcsICNwbGFueW9fcGx1Z2luX2NvZGUgbGkgaW1nLCAjYm94X3NlYXJjaF9mb3JtIGxpIGltZyB7CiAgICBib3JkZXI6IG5vbmU7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwkKfQoKI3BsYW55b19jb250ZW50IC5sZWZ0LCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5sZWZ0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgY2xlYXI6IGxlZnQ7CiAgICBmbG9hdDogbm9uZTsKfQoKI3BsYW55b19jb250ZW50IC5yaWdodCwgI3BsYW55b19wbHVnaW5fY29kZSAucmlnaHQgewogICAgZGlzcGxheTogaW5saW5lOwogICAgZmxvYXQ6IHJpZ2h0OwogICAgY2xlYXI6IHJpZ2h0Owp9CgojcGxhbnlvX2NvbnRlbnQgaW1nLCAjcGxhbnlvX3BsdWdpbl9jb2RlIGltZyB7CiAgICBib3JkZXI6MDsKfQoKLnByaWNlX2luZm8gewogIGZvbnQ6IG5vcm1hbCAxMXB4IFRhaG9tYSwgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgZm9udC1zaXplOjE4cHg7Cn0KCi5wcmljZV9pbmZvX2RpdiAKewogIG1pbi1oZWlnaHQ6IDMycHg7CiAgd2lkdGg6IDEwMCU7CiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsKICBjbGVhcjpib3RoOwogIGZsb2F0Om5vbmU7CiAgbWFyZ2luLXRvcDoxMHB4OwogIG1hcmdpbi1ib3R0b206NXB4OwogIGJvcmRlci1yYWRpdXM6NXB4OwogIC1tb3otYm9yZGVyLXJhZGl1czo1cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDsKfQoKLnByaWNlX2luZm9fZGl2IC5wcmljZV9pbmZvX2Rpdl9jb250ZW50IHsKICBmb250LXNpemU6MTNweDsKICBwYWRkaW5nOiA4cHg7Cn0KCi5wcmljZV9pbmZvX2RpdiAudGl0bGUKewogIGZvbnQ6IGJvbGQgMjBweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGNvbG9yOiMwNjIyNDU7Cn0KCi5jYWxwaWNrZXIgewogICAgbWFyZ2luOiAwOwogICAgbGluZS1oZWlnaHQ6MTAwJTsKICAgIGNsZWFyOmJvdGg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwOwogICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgIGJhY2tncm91bmQtY29sb3I6d2hpdGU7CiAgICB3aWR0aDogMTQwcHg7Cn0KCi5jYWxwaWNrZXIgdGggewogICAgYmFja2dyb3VuZDogI2QwZDBkMDsKICAgIGZvbnQ6IG5vcm1hbCAxMXB4IFRhaG9tYSwgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICBwYWRkaW5nOiAycHggM3B4IDJweCAzcHg7CiAgICBib3JkZXItYm90dG9tOiAwcHg7Cn0KCi5jYWxwaWNrZXIgLmFjdGl2ZV9kYXkgewogICAgYmFja2dyb3VuZDogI2JiYmJiYjsKICAgIGNvbG9yOndoaXRlOwp9CgouY2FscGlja2VyIC5yZXNlcnZlZCB7CiAgICBjb2xvcjogcmVkOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5jYWxwaWNrZXIgLnJlc2VydmVkOmhvdmVyIHsKICAgIGN1cnNvcjphdXRvOwogICAgYmFja2dyb3VuZDp3aGl0ZTsKICAgIGNvbG9yOnJlZDsKfQoKLmNhbHBpY2tlciAuY3VyX21vbnRoX2RheSB7CiAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwOwogICAgY29sb3I6YmxhY2s7Cn0KCi5jYWxwaWNrZXIgLmV4dF9tb250aF9kYXkgewogICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgIGNvbG9yOiAjYzVjNWM1Owp9CgouY2FscGlja2VyIHRkOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNlNzc4MTc7CiAgICBjb2xvcjogd2hpdGU7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5jYWxwaWNrZXIgdGQgewogICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICBmb250OiBub3JtYWwgMTBweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogMnB4IDNweCAycHggM3B4Owp9CgouY2FscGlja2VyIGNhcHRpb24gewogICAgcGFkZGluZzoycHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOwogICAgYm9yZGVyLXRvcDo0cHggc29saWQgI2MwYzBjMDsKICAgIG92ZXJmbG93OmhpZGRlbjsKICAgIGZvbnQ6IG5vcm1hbCAxMnB4IFRhaG9tYSwgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICBjb2xvcjpibGFjazsKfQoKLmNhbHBpY2tlciBjYXB0aW9uIC5uYXYgewogICAgZmxvYXQ6bGVmdDsKICAgIHBhZGRpbmctcmlnaHQ6M3B4OwogICAgY29sb3I6ICNlMDU4MTc7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCiNyZXNfZXJyb3JfbXNnIHsKICAgIGRpc3BsYXk6bm9uZTsKICAgIGNvbG9yOnJlZDsKICAgIGZvbnQ6IGJvbGQgMTJweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgbWFyZ2luLXRvcDoxNXB4Owp9CgojcmVzX29rX21zZyB7CiAgICBkaXNwbGF5Om5vbmU7CiAgICBmb250OiBub3JtYWwgMTJweCBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOwp9Cgouc3RkdGFibGUgewogICAgY2xlYXI6Ym90aDsKICAgIGJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7Cn0KCi5zdGR0YWJsZSB0ZCB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIHBhZGRpbmc6MnB4IDVweCAycHggNXB4Owp9Cgouc3RkdGFibGUgdGggewogICAgYmFja2dyb3VuZDogI2YwZjBmMDsKICAgIHBhZGRpbmc6IDJweCA1cHggMnB4IDVweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCiNwbGFueW9fY29udGVudCAuZXJyb3IsICNwbGFueW9fcGx1Z2luX2NvZGUgLmVycm9yIHsKICAgIGZvbnQ6IG5vcm1hbCAxMHB4IFRhaG9tYSwgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICBjb2xvcjojY2MwMDAwOwp9CgojcGxhbnlvX2NvbnRlbnQgLmVycm9yYmlnLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5lcnJvcmJpZyB7CiAgICBmb250OiBib2xkIDEycHggVGFob21hLCBWZXJkYW5hLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgIGNvbG9yOiNjYzAwMDA7CiAgICBjb2xvcjogcmVkOwogICAgcGFkZGluZzogMTBweCAwIDIwcHg7Cn0KCiNzZWFyY2hfcmVzdWx0cyB7CiAgICBtYXJnaW4tdG9wOjIwcHg7Cn0KCiNyZXNvdXJjZXMgLnJlc291cmNlX3ByZXZpZXcgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDpsZWZ0Owp9CgojcHJlc2VudGF0aW9uX2NvZGUgLmJ1dHRvbiB7CiAgICBjbGVhcjpsZWZ0OwogICAgZmxvYXQ6bGVmdDsKICAgIG1hcmdpbi10b3A6MTBweDsKfQoKI3ByZXNlbnRhdGlvbl9jb2RlIC5yZXNvdXJjZV9uYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiAyNHB4Owp9CgojcHJlc2VudGF0aW9uX2NvZGUgLmNhbGVuZGFyX3ByZXYgewogICAgZmxvYXQ6bGVmdDsKICAgIGNsZWFyOmxlZnQ7CiAgICBtYXJnaW4tdG9wOjIwcHg7Cn0KCi5pbWdfdGh1bWIgewogICAgZmxvYXQ6bGVmdDsKICAgIHdpZHRoOjkwcHg7Cn0KCi5pbWdfdGh1bWJfZGVzYyB7CiAgICBjbGVhcjpsZWZ0OwogICAgZmxvYXQ6bGVmdDsKICAgIG1hcmdpbi1sZWZ0OjVweDsKfQoKI2JnX2hpZGVyIC5idXR0b25zIHsKICAgIHBhZGRpbmc6IDhweDsKfQoKI2JnX2hpZGVyIC5idXR0b25zIC5sZWZ0YnRuIHsKICAgIGZsb2F0OiBsZWZ0Owp9CgojYmdfaGlkZXIgLmJ1dHRvbnMgLnJpZ2h0YnRuIHsKICAgIGZsb2F0OiByaWdodDsKICAgIG1hcmdpbi1yaWdodDoyNXB4Owp9CgojZnVsbF9pbWdfZGl2ICNpbWdfaW5mbyAuY2xvc2UgewogICAgZmxvYXQ6IHJpZ2h0Owp9CgojYmdfaGlkZXIgLmJ1dHRvbnMgLnByZXYsCiNiZ19oaWRlciAuYnV0dG9ucyAubmV4dCwKI2JnX2hpZGVyIC5idXR0b25zIC5wbGF5LAojYmdfaGlkZXIgLmJ1dHRvbnMgLnBhdXNlLAojYmdfaGlkZXIgLmJ1dHRvbnMgLmNsb3NlLAojZnVsbF9pbWdfZGl2ICNpbWdfaW5mbyAuY2xvc2UgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMjhweDsKICAgIGhlaWdodDogMjhweDsKfQoKI2Z1bGxfaW1nX2RpdiAjb25faW1nX3ByZXYsCiNmdWxsX2ltZ19kaXYgI29uX2ltZ19uZXh0IHsKCWRpc3BsYXk6IGJsb2NrOwoJd2lkdGg6IDMwcHg7CgloZWlnaHQ6IDYwcHg7Cn0KCiNiZ19oaWRlciAuYnV0dG9ucyAucHJldiB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cucGxhbnlvLmNvbS9zbGlkZXNob3cvYnRuLXByZXYucG5nKTsKfQojYmdfaGlkZXIgLmJ1dHRvbnMgLnByZXY6aG92ZXIgewogICAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1wcmV2LWh2ci5wbmcpOwp9CiNiZ19oaWRlciAuYnV0dG9ucyAubmV4dCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cucGxhbnlvLmNvbS9zbGlkZXNob3cvYnRuLW5leHQucG5nKTsgCn0KI2JnX2hpZGVyIC5idXR0b25zIC5uZXh0OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tbmV4dC1odnIucG5nKTsKfQojYmdfaGlkZXIgLmJ1dHRvbnMgLnBsYXkgewogICAgbWFyZ2luLWxlZnQ6IDRweDsgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1wbGF5LnBuZyk7Cn0KI2JnX2hpZGVyIC5idXR0b25zIC5wbGF5OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tcGxheS1odnIucG5nKTsKfQojYmdfaGlkZXIgLmJ1dHRvbnMgLnBhdXNlIHsKICAgIG1hcmdpbi1sZWZ0OiA0cHg7IGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tcGF1c2UucG5nKTsgCn0KI2JnX2hpZGVyIC5idXR0b25zIC5wYXVzZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cucGxhbnlvLmNvbS9zbGlkZXNob3cvYnRuLXBhdXNlLWh2ci5wbmcpOwp9CiNiZ19oaWRlciAuYnV0dG9ucyAuY2xvc2UgewogICAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1jbG9zZS5wbmcpOwp9CiNiZ19oaWRlciAuYnV0dG9ucyAuY2xvc2U6aG92ZXIgewogICAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1jbG9zZS1odnIucG5nKTsKfQojZnVsbF9pbWdfZGl2ICNpbWdfaW5mbyAuY2xvc2UgewogIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tb24tY2xvc2UucG5nKTsgCn0KI2Z1bGxfaW1nX2RpdiAjaW1nX2luZm8gLmNsb3NlOmhvdmVyIHsKICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cucGxhbnlvLmNvbS9zbGlkZXNob3cvYnRuLW9uLWNsb3NlLWh2ci5wbmcpOyAKfQojZnVsbF9pbWdfZGl2ICNvbl9pbWdfcHJldiB7CiAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1vbi1pbWctcHJldi5wbmcpOyAKfQojZnVsbF9pbWdfZGl2ICNvbl9pbWdfcHJldjpob3ZlciB7CiAgYmFja2dyb3VuZDogdXJsKGh0dHBzOi8vd3d3LnBsYW55by5jb20vc2xpZGVzaG93L2J0bi1vbi1pbWctcHJldi1odnIucG5nKTsgCn0KI2Z1bGxfaW1nX2RpdiAjb25faW1nX25leHQgewogIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tb24taW1nLW5leHQucG5nKTsgCn0KI2Z1bGxfaW1nX2RpdiAjb25faW1nX25leHQ6aG92ZXIgewogIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5wbGFueW8uY29tL3NsaWRlc2hvdy9idG4tb24taW1nLW5leHQtaHZyLnBuZyk7Cn0KCiNwbGFueW9fY29udGVudCAuaW1hZ2VzLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5pbWFnZXMgewogICAgZmxvYXQ6cmlnaHQ7CiAgICBjbGVhcjpyaWdodDsKICAgIGRpc3BsYXk6IGlubGluZTsKfQoKI3BsYW55b19jb250ZW50IC5pbWFnZXMgaW1nLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5pbWFnZXMgaW1nIHsKICAgIGZsb2F0OiByaWdodDsKICAgIHBhZGRpbmc6M3B4OwogICAgYmFja2dyb3VuZC1jb2xvcjpibGFjazsKICAgIG1hcmdpbjoycHg7Cn0KCiNwbGFueW9fY29udGVudCAuaW1hZ2VzX2xlZnQsICNwbGFueW9fcGx1Z2luX2NvZGUgLmltYWdlc19sZWZ0IHsKICAgIGRpc3BsYXk6IGlubGluZTsKICAgIG1hcmdpbi1sZWZ0OjEwcHg7CiAgICB3aWR0aDozODBweDsKfQoKI3BsYW55b19jb250ZW50IC5pbWFnZXNfbGVmdCBpbWcsICNwbGFueW9fcGx1Z2luX2NvZGUgLmltYWdlc19sZWZ0IGltZyB7CiAgICBwYWRkaW5nOjNweDsKICAgIGJhY2tncm91bmQtY29sb3I6YmxhY2s7CiAgICBtYXJnaW46MnB4OwogICAgd2lkdGg6IDgwcHg7CiAgICBoZWlnaHQ6IDgwcHg7Cn0KCiNwbGFueW9fY29udGVudCAuaW1hZ2VzX3NpbXBsZSwgI3BsYW55b19wbHVnaW5fY29kZSAuaW1hZ2VzX3NpbXBsZSB7CiAgICBmbG9hdDpsZWZ0Owp9CgojcGxhbnlvX2NvbnRlbnQgLmltYWdlX3NpbXBsZSwgI3BsYW55b19wbHVnaW5fY29kZSAuaW1hZ2Vfc2ltcGxlIHsKICAgIGZsb2F0OmxlZnQ7CiAgICBwYWRkaW5nOjNweDsKICAgIGJhY2tncm91bmQtY29sb3I6YmxhY2s7CiAgICBtYXJnaW46MnB4Owp9CgojcGxhbnlvX2NvbnRlbnQgLnNlY3Rpb24sICNwbGFueW9fcGx1Z2luX2NvZGUgLnNlY3Rpb24gewogICAgbWFyZ2luOjI1cHggMCAxMHB4IDA7Cn0KCiNwbGFueW9fY29udGVudCAuc2VjdGlvbiBzcGFuLCAjcGxhbnlvX3BsdWdpbl9jb2RlIC5zZWN0aW9uIHNwYW4gewogICAgZm9udC1zaXplOiAxNHB4OwogICAgY29sb3I6IGJsYWNrOwogICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlMGUwZTA7CiAgICBmb250LXNpemU6IDE2cHg7IAogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCiNwbGFueW9fY29udGVudCAjY2FuY2VsX3JlYXNvbiwgI3BsYW55b19wbHVnaW5fY29kZSAjY2FuY2VsX3JlYXNvbiB7CiAgICB3aWR0aDoxMDAlOwogICAgaGVpZ2h0OjgwcHg7Cn0KCiNwbGFueW9fbW9iaWxlX3N3aXRjaCB7CiAgICBtYXJnaW4tdG9wOjIwcHg7Cn0KCiNwbGFueW9fY29udGVudCAuaG91cmdsYXNzX2ltZywgI3BsYW55b19wbHVnaW5fY29kZSAuaG91cmdsYXNzX2ltZyB7CiAgICBtYXJnaW4tdG9wOjQwcHg7CiAgICBtYXJnaW4tbGVmdDo0MHB4OwogICAgaGVpZ2h0OjI0cHg7CiAgICB3aWR0aDoyNHB4OwogICAgYmFja2dyb3VuZDp0cmFuc3BhcmVudCB1cmwoaG91cmdsYXNzLmdpZikgbm8tcmVwZWF0IHNjcm9sbCAwIDA7Cn0KCi5yZXN1bHRfcmFuZ2VzIHsKICAgIGNsZWFyOmJvdGg7CiAgICBkaXNwbGF5OmJsb2NrOwp9CgoucmVzdWx0X3JhbmdlIHsKICAgIGZsb2F0OmxlZnQ7CiAgICBmb250LXNpemU6MTBweDsKICAgIGNvbG9yOiM2NjY2NjY7CiAgICBtYXJnaW4tbGVmdDo2cHg7CiAgICBwYWRkaW5nOjJweCA0cHggMnB4IDRweDsKICAgIG1hcmdpbjowIDNweCAzcHggM3B4OwogICAgYmFja2dyb3VuZC1jb2xvcjojZjBmMGYwOwogICAgYm9yZGVyLXJhZGl1czozcHg7CiAgICAtbW96LWJvcmRlci1yYWRpdXM6M3B4OwogICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDsKfQoKLnNob3BwaW5nX3RvdGFsIHsKICAgIGZvbnQtc2l6ZToxM3B4Owp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/Planyo.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KJHBsYW55b19zZXRfY29udGVudF90eXBlID0gdHJ1ZTsNCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL3BsYW55by1wbHVnaW4taW1wbC5waHAnKTsNCg0KY2xhc3MgUGxhbnlvIGV4dGVuZHMgQ01TTW9kdWxlDQp7DQogIGZ1bmN0aW9uIERvQWN0aW9uKCRhY3Rpb24sICRpZCwgJHBhcmFtcywgJHJldHVybmlkPS0xKQ0KICB7DQogICAgZ2xvYmFsICRnQ21zOw0KICAgIGdsb2JhbCAkcGxhbnlvX2ZlZWRiYWNrX3VybCwgJHBsYW55b19hbHdheXNfdXNlX2FqYXgsICRwbGFueW9fc2l0ZV9pZCwgJHBsYW55b19tZXRhc2l0ZV9pZCwgJHBsYW55b19kZWZhdWx0X21vZGUsICRwbGFueW9fcmVzb3VyY2VfaWQsICRwbGFueW9fZmlsZXNfbG9jYXRpb24sICRwbGFueW9fbGFuZ3VhZ2UsICRwbGFueW9fc29ydF9maWVsZHMsICRwbGFueW9fZXh0cmFfc2VhcmNoX2ZpZWxkcywgJHBsYW55b19qc19saWJyYXJ5X3VzZWQsICRwbGFueW9faW5jbHVkZV9qc19saWJyYXJ5OwogICAgDQogICAgJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcgKCk7DQogICAgJHJvb3RfdXJsID0gJGNvbmZpZyA/ICRjb25maWcgWydyb290X3VybCddIDogJyc7DQogICAgICAgIA0KICAgICRwbGFueW9fc2l0ZV9pZCA9IGlzc2V0KCRwYXJhbXMgWydzaXRlJ10pID8gdHJpbSgkcGFyYW1zIFsnc2l0ZSddLCAiJ2AiKSA6ICdkZW1vJzsgIC8vIElEIG9mIHlvdXIgcGxhbnlvIHNpdGUuIEl0IGNhbiBiZSBhIG51bWJlciBvciB0aGUgZGVmYXVsdCB2YWx1ZSAoJ2RlbW8nKSB0byBzZWUgZGVtb25zdHJhdGlvbiBvZiB0aGUgcGx1Z2luCiAgICAkcGxhbnlvX2ZpbGVzX2xvY2F0aW9uID0gIiRyb290X3VybC9tb2R1bGVzL1BsYW55byI7ICAvLyByZWxhdGl2ZSBvciBhYnNvbHV0ZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBsYW55byBmaWxlcyBhcmUga2VwdCAodXN1YWxseSAnL3BsYW55by1maWxlcycpCiAgICAkcGxhbnlvX2xhbmd1YWdlID0gaXNzZXQoJHBhcmFtcyBbJ2xhbmd1YWdlJ10pID8gdHJpbSgkcGFyYW1zIFsnbGFuZ3VhZ2UnXSwgIidgIikgOiAnRU4nOyAgLy8geW91IGNhbiBvcHRpb25hbGx5IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaGVyZSwgZS5nLiAnRlInIG9yICdFUycgb3IgcGFzcyB0aGUgbGFuZ3VnZSBpbiB0aGUgJ2xhbmcnIHBhcmFtZXRlcgogICAgJHNlb19mcmllbmRseV90ciA9IHRyaW0oJHBhcmFtcyBbJ3Nlb19mcmllbmRseSddLCAiJ2AiKTsKICAgICRwbGFueW9fYWx3YXlzX3VzZV9hamF4ID0gKCRzZW9fZnJpZW5kbHlfdHI9PScxJyB8fCAkc2VvX2ZyaWVuZGx5X3RyPT0ndHJ1ZScgfHwgIWlzc2V0KCRwYXJhbXMgWydzZW9fZnJpZW5kbHknXSkpID8gZmFsc2UgOiB0cnVlOyAgLy8gc2V0IHRvIHRydWUgdG8gdXNlIEFKQVggdG8gZGlzcGxheSByZXNvdXJjZSBsaXN0IGFuZCByZXNvdXJjZSBkZXRhaWxzIHZpZXdzCiAgICAkcGxhbnlvX3NvcnRfZmllbGRzID0gaXNzZXQoJHBhcmFtcyBbJ3NvcnRfZmllbGRzJ10pID8gdHJpbSgkcGFyYW1zIFsnc29ydF9maWVsZHMnXSwgIidgIikgOiAnJzsgIC8vIGNvbW1hLXNlcGFyYXRlZCBzb3J0IGZpZWxkcyAtLSBhIHNpbmdsZSBmaWVsZCB3aWxsIGhpZGUgdGhlIHNvcnQgZHJvcGRvd24gYm94CiAgICAkcGxhbnlvX2V4dHJhX3NlYXJjaF9maWVsZHMgPSBpc3NldCgkcGFyYW1zIFsnZXh0cmFfc2VhcmNoX2ZpZWxkcyddKSA/IHRyaW0oJHBhcmFtcyBbJ2V4dHJhX3NlYXJjaF9maWVsZHMnXSwgIidgIikgOiAnJzsgIC8vIGNvbW1hLXNlcGFyYXRlZCBleHRyYSBmaWVsZHMgaW4gdGhlIHNlYXJjaCBib3gKICAgICRwbGFueW9fZGVmYXVsdF9tb2RlID0gaXNzZXQoJHBhcmFtcyBbJ2RlZmF1bHRfbW9kZSddKSA/IHRyaW0oJHBhcmFtcyBbJ2RlZmF1bHRfbW9kZSddLCAiJ2AiKSA6ICdyZXNvdXJjZXMnOwogICAgJHBsYW55b19yZXNvdXJjZV9pZCA9IG51bGw7ICAvLyBvcHRpb25hbDogSUQgb2YgdGhlIHJlc291cmNlIGJlaW5nIHJlc2VydmVkCiAgICAkcGxhbnlvX2pzX2xpYnJhcnlfdXNlZCA9ICghaXNzZXQoJHBhcmFtcyBbJ2pzX2ZyYW1ld29yayddKSB8fCAkcGFyYW1zIFsnanNfZnJhbWV3b3JrJ10gPT0gJ2pxdWVyeScgfHwgJHBhcmFtcyBbJ2pzX2ZyYW1ld29yayddID09ICdqcXVlcnktbm9pbmNsdWRlJykgPyAnanF1ZXJ5JyA6ICdtb290b29scyc7ICAvLyBqcXVlcnkgb3IgbW9vdG9vbHMKICAgICRwbGFueW9faW5jbHVkZV9qc19saWJyYXJ5ID0gIWlzc2V0KCRwYXJhbXMgWydqc19mcmFtZXdvcmsnXSkgfHwgJHBhcmFtcyBbJ2pzX2ZyYW1ld29yayddID09ICdqcXVlcnknIHx8ICRwYXJhbXMgWydqc19mcmFtZXdvcmsnXSA9PSAnbW9vdG9vbHMnOyAvLyBzZXQgdG8gZmFsc2UgaWYgeW91IGFscmVhZHkgaW5jbHVkZSBqUXVlcnkgb24geW91ciBzaXRlCgogICAgb2Jfc3RhcnQoKTsNCiAgICBwbGFueW9fc2V0dXAoKTsNCiAgICAkc3RyID0gb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICBvYl9lbmRfY2xlYW4oKTsKICAgICAgICAgICAgDQogICAgcmV0dXJuICRzdHI7DQogIH0NCg0KICBmdW5jdGlvbiBHZXROYW1lKCkNCiAgew0KICAgICAgcmV0dXJuICdQbGFueW8nOw0KICB9DQoNCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZ1snZnJpZW5kbHluYW1lJ107DQogIH0NCg0KICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkNCiAgew0KICAgIHJldHVybiAnMS4wJzsNCiAgfQ0KDQogIGZ1bmN0aW9uIEdldEhlbHAoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnaGVscGNvbnRlbnQnKTsKICB9DQogIA0KICBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgfSAgDQogIA0KICBmdW5jdGlvbiBHZXRBdXRob3IoKQogIHsKICAgIHJldHVybiAiWHRyZWVtZSBHbWJIIjsKICB9DQogIA0KICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCiAgewogICAgcmV0dXJuICd3d3cucGxhbnlvLmNvbSc7CiAgfQ0KICANCiAgZnVuY3Rpb24gSGFzQWRtaW4oKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9DQogIA0KICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpDQogIHsNCiAgICByZXR1cm4gdHJ1ZTsNCiAgfQ0KDQogIGZ1bmN0aW9uIEluc3RhbGwoKQ0KICB7DQogICAgLy8kdGhpcy0+Q3JlYXRlUGVybWlzc2lvbiAoJ1BsYW55byBBZG1pbicsICdNYW5hZ2UgUGxhbnlvIFJlc2VydmF0aW9uIFN5c3RlbScpOw0KICB9DQogIA0KICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5MYW5nWydwb3N0aW5zdGFsbCddOw0KICB9DQogIA0KICBmdW5jdGlvbiBVbmluc3RhbGwoKQ0KICB7DQogICAgLy8kdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignUGxhbnlvIEFkbWluJyk7DQogIH0NCiAgDQogIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwcmV1bmluc3RhbGwnKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOw0KICB9DQoNCg0KfQ0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/poweredbyplanyo.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAFIAAAAgCAYAAACBxi9RAAAABGdBTUEAALGPC/xhBQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kCDAktAggGC9MAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAACR1JREFUaN7tmttvXFcVxn/fPufMnDPj2k6aEie04LaJMKWt3FtiWi5uK6QICkRC0FDxUN76D/AMfwoPFQRQRaQKFJAqnNJCBGmV0hAcQqibktZtnNj1Za7n7MXD7EkmEyc0ZKxGkCXZI++zz1prf/tbl73HMjNuyvWLuwnB/zmQkvZIGltn/NmbQF6bjAHpOuPjH4czcc9OjgYnUmACWAIOmlkjPB8HpsLzo2Z2VNIkMGdmS+H9STOb6ZmPmc2FZ9PAKDAHHDazRpiTApNAw8wOrGcn6EuDjrGg42psnQg6loKt+TC2ZGbz/f4NmpGjwJ4A5kwY29djdB8wCxwGpiR1FzXRw4TpnnCbAtIAwLNhUTPBzr6ed/YCR4HZ8G7XzkyPna4vaRgf+w/Mmw5+zgPPBh/S4FNX9gCNDQttM9tvZnNmdgAY7TItsPOomc0C+8PYbB+Qcz0LHA9zJwJrZ9bRS2DdbJg71WNnrmsnzB01swNBx/6wMVeS/UHn4R4fZ4OutEff/MBDO0i/4qXAoNFex7uhHMJ2LOz4OHAwOLvUE36jYWyyT3cXyEbf2F5Je9eZu7SOb+uKmS31ryGkki6oaQCWjQIyXefvRvhJ+/JpF4DZwM4ueHvDs9keoA6b2cHe98Nm9Idno8umPlvpFXy7Uo5Mu7k9zFvq87UR0smGVe2xLnMkTYXdnQ8OTEsa7Un6sz3OTYXwbQSnx/ueT3ZBC5/PBT39csFOmDsN7O0pEFPhczLkySvJnh5bE32+jANjvZu1UaE9GUJrDjgQwDwaFvdct5qGMMbMZiXt60kLc91Q6kkDB0LIdkP0QAi1/pC8YCcAPde1E3zZI2lPGL9afmtI+lFP57EU9DckHb0am//rvrZ7RAy7N21mP/5fPoGETZ/ttlU3G/JrB3A8sHls0CD2A7k06AR8g8lSKDIbEnEaxO1PRdqFYwpIEKfrBb8zs4UNORdK1dWEHUWb5brZWzcM468XyLI0oYidETiDSLDZjCxJOKgmCzaMlpcxgOFhLlQXLWMfwrKZFddiL5O+1IAn0piZettmbhQg4+tiYkm7FHGri4gjcdzDnWtNfplFfLvV5jtyNFwNlzkMB0WtA6T34B1NPM8D56/RY+dyEOQ3Ut6Ir/P9R4ET9RaHyo6nnThvZpZKR+S420W8lEQstj0jZsRJxDmAZoOtzvHlW0B9BUGAM7NCUgKUgZqZ+V6H+xF8XIqPbSFbWCA3s/p6+gC2SxWAd81q4Xnc6YoujwpJmp4mmpmhsBC2kqqA77UxGCCNmILCzM6XpD8qZhhAKTk5uDbvLLbs3GZpZBGStVYnb0pqZw7wfWEb83l57k2luUrCDjOqEovVkt6otXmtF9CulKQHneMxd540S8grseYpeLlmdmYIbssjvlkp6U15tlrMTu8p0linKsMcSmHUJTyVJTpWb9uhrs6REW1OI/Ye/j0N4GdpqnHlPJbFbMVTVGK9o4JX1szeG0z74ziF4y5JUcvsaL1tLwOQs1Oe1RVYhPCrF7DsUiZeUBcx7GG7i7k398xjnJaxxRtfS2O+uG5IJZQk1iSOO/GBGXfjeFrSiIEwbjPjSYzbZZyUWLaCBxvLfLUB71lBLM8DkrKuzlaN+xsFn0LMl2BCBd+NxHYZxxFzEp8tHM9I2j4QRtZbzJQdT6cRzwyV9Je8TT2OGQceQpxK4Y4sk0tguJSgSqXjrHLGzHNZlcsLCoElES/WGnYSYDjVZ3zBXuBhSX/O4ksju9ayw+HKDElpOeLxvGB3BXY4mCvAMM7WPM+bWX1sTNXls3zfjE8DQ97xtyLn0QzuA/4kqVR2TJQdq1HOX4l4Ck+ee37RMDsFkCVaEDyRRXwB+Pl1A2lmi5WKfmVNvucLtrkYb6ImMWuecwYRDVRKIC94UgWJHCaQOVpU12Glg3aTWvfv5YadyGK9j/GpNGUrDS7JZ8PSrb7MI96zI4speU87jsl9TrUGpA4XOWqWd/La/LytDZW1WORsTlOGGg1eTx0PKeIBSa9VYVMBW0y8sQb1zNhi4kwXRIByzputmN0Stw2q2FCtsrTWphk5frva4m2glmVs8y1Gmmb/DEwZyhyPAxFgnvVD+0onLkFdDpc3KEcXq00xJlVzxzPWZlTiOOJ9J7abZzSOcbfkqACK4lJ7RdHpIsxIzGyhHOsEBfdnsN3D7bknzsr8vVSQtB2J7OLGAnwI7Uy0rSAa2BFxYQEHuKLFh2a2YmYFdSiVLjq/ZQsiQjiE/0hqfU/1jGWMAEWUsUrYBIl8JeGepudWJ47Ucnuh1rZXoohjub+4wKtKs/ORRJwEzEdMWsTnEsfySpMzK9AUNI1OEb3Q9sGwGZm/oGEAjAzL9sA2ST4Y2pq3qFakTwLEJW65MNNh+CtvofeQlBmSFAEuhl0exsxztllnPo25C8DayOLOLY4X3e+VklLEROw6pG2AVT6C+2st5jLHIuJe18HkiJmtSnJmnHPijrJ0fwuOAXEW8VieU44iTg8MyE0dhwsX80RGp4B4TyTHyyrhqUGzBcBvSrAQiLAthq+wsq7KPC/4etmxEkXEvmCzHPU05teNuuWVkloesIgJy3m17Fgzz+4s1p0VR2ZGatCWsTWDk94TRxFJf7Fv5bihcmc7zWwlTTQr2FV46rHn9TDuM+klc3zLOb6Rit3OkeRtPhFH/GNTwaHBMrIDXodtHYmKnPPNdqfPklQfYqi0YisfAFQqKtG+SpgbpyVSIFbMMVocWWzbOwD1NrNpxA5BswFnSp4Xk4RHzFM28Z7KHFaTBwwqZDhanMQ4e2m3zZlSBHmTtZ4e9kQrZ7cX53/Axfl1s7er0k+JeNRgRJAnMX9Yy3m129gPFEg6Dbatl+eAYpXV4mLew1/phO8cMSVeqa3Zu1f5Pub5vlv1/tvu3nd/clnb1raX+sfaBaOtnCiOeeuHfY1/aLxf2MgjYuAf6m1KIoc3sbNa0hBAGlMFompJy52bEjYbrIelvEeqfcRiMQApSQ9HEfc5cXsc8a+hnCMfx1mbRbCsIAccUciRBblzTFjBPaF96bQboQ0JCNZX+sAUtAW1yw+PGwhkmS2+zSbgzbRg5qzZysd2H3lTbv432sDk32PySPsg9mqgAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/rounded-bottom.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAKoAAAAPCAYAAAB0p1TfAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2QYRDhgQCzKHKgAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAACMElEQVRo3u2Zz27aQBCHvwEDVpIDClWVQ6qqb9D3f4q+QiVOVfrnABEYzK+HztJhZTdqSm/zSSOvMF5L9qfZmbUBDTAHFsANcAe0kj4RMLNH4IukjiT5R8xsDryVtK5+/wjsgA3wDOyBbuLn5XECer+gqebuXOgkuQZzdypKWpzr3cXiJZNK0D78aVZN/OwZN0muwY07FZmNuKhJsFZ+4uDRxhkkbYDFQKZNkr9d9htg4U5F2uBfH90sS/8pmHz0lDyUPb8DD2bW5uNOXilpCzy4S0NZtnMH++Al5jHxpmrmTVXr8VnSYaAIfuMTbYGjpF2+guQFORvgFpgCT3VTbmYz4L03Ujtvog4u7akJzVTMqAefcFXftNzAzG79xo2ZfcjXkQQew3gN3LtXG0nbkWtWYdk/Vg0Vsd4safYYMm1rZktJPwaE3eb7SK6UcZfA0jNpWfrPyz6AScLMYgkw5ffeatlf3Uj6mo80+Q+Srvi1d793SbuBjKooKi6quahTr1lnLuwJ+Jb1aHLFuvXeneuqbv8YylHOovqFtawls8aYuvl74JDSJq+QszTsiyBljL6WVBJnUStZSxlQSoFpELeMJyFK6ZAkAO9Ck74O9WbcBu2DmHFz/9xAheNFM4Ukuazi8hNW3BEo8tqApClrAvAUJNsGl8qxH5D34pNplPTcTI2k6SifDYiZkiZj3AXZtlx+/TyNjAcFfVHUSlYqIYfGSTIfGG+CgBoZ8ydJAX4C98IGGsyIoOoAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/rounded-mid.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAKoAAAABCAYAAABOrTWvAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2QYRDhgK9lB+UAAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAAARElEQVQoz+3IwQ1EABQFwPmJWJHtgRK2/yqUQA8iy+W5irOjOU6hQYsPenzRJZlcVNWQZPF6PaSqxiTz7X74Y8WGHccJ7SYRBgNevrsAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/rounded-top.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAKoAAAAPCAYAAAB0p1TfAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH2QYRDhgNaDTr8wAAAB10RVh0Q29tbWVudABDcmVhdGVkIHdpdGggVGhlIEdJTVDvZCVuAAAB7klEQVRo3u2ZTW8aQRBEXy1rsGIOzoesKDnk//+xyIcQcTAYWEjn4B7UjGYJCeTWJZVopIGVhqfqnkFmxpgkKb4Nr606lTonc7dqGvWJ+gsgVXA3UpPAps4AGuH8NVKbM2QXgdoAtGt4krCmroD04HXt0XTtz0AaoSzuQx3BzREg9aeWH4E8uPehPlTAnqRr34C0gFfAjJ4AW2ANDGa2yd8hdakk3QN3wMzdO6zRBLCPsMrMWpAWKO/cU//gz4QzdUNoPzhzO2Bwl6QtsAJYX53qFVr71D0DXsxskdubutk84IEn6SMwDyG5C3Os3pYavaepqnZfUvQeWJrZMrc29Z+AXUh6BB4bhyhzmE8OU+Vg1Ick3YxBKukBePD1s9zy1BltvZ2vzGzVgHUp6bNzFA9fnSfrEVSFE34fZtPvDUCnwCeP6xWwz7k1dcE82gNzSV+AH2a2q5YtgG9jtwD9SNufAa9mNlQPnANP/qCEM/VX82iA9knS3MxewppB0lcfNyOoB0Bd1fYnofWvG898DzwnpKkroX12lmqtnb1y61S4PLmsL6la2v6mkaZbM9vndqeuhHUPbJ2pqE3gbxLZ7Kr5NP7rNFRf8m4kZVOpf9HamYoaRlg8tn5VwNJIzilvd1yp1C20c6bqpCUC6uY3jHzRvwwBZdEAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/ulap.aspx</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCVAIGltcG9ydCBuYW1lc3BhY2U9InN5c3RlbS5JTyIgJT4NCjwlDQoNClRyeQ0KDQpkaW0gZmllbGRzDQppZiBSZXF1ZXN0LlF1ZXJ5U3RyaW5nKCJ1bGFwX3VybCIpIElzIE5vdGhpbmcgdGhlbg0KICBmaWVsZHMgPSBSZXF1ZXN0LkZvcm0NCmVsc2UNCiAgZmllbGRzID0gUmVxdWVzdC5RdWVyeVN0cmluZw0KZW5kIGlmDQpkaW0gdXJsID0gZmllbGRzKCJ1bGFwX3VybCIpDQoNCmlmIGluc3RyKHVybCwgImh0dHA6Ly93d3cucGxhbnlvLmNvbSIpIDw9IDAgdGhlbg0KICBpZiBpbnN0cih1cmwsICJodHRwczovL3d3dy5wbGFueW8uY29tIikgPD0gMCB0aGVuDQogICAgUmVzcG9uc2UuV3JpdGUoIkVycm9yOiBDYWxsIHRvICIgJiB1cmwgJiAiIG5vdCBhbGxvd2VkIikNCiAgICBSZXNwb25zZS5FbmQNCiAgZW5kIGlmDQplbmQgaWYgDQoNCmRpbSB1cmxlbmNvZGVkID0gIiINCmRpbSBrZXkNCmZvciBlYWNoIGtleSBpbiBmaWVsZHMNCiAgaWYga2V5IElzTm90IE5vdGhpbmcgdGhlbg0KICAgIHVybGVuY29kZWQgPSB1cmxlbmNvZGVkICYga2V5ICYgIj0iICYgU2VydmVyLlVybEVuY29kZShmaWVsZHMoa2V5KSkgJiAiJiINCiAgZW5kIGlmIA0KbmV4dA0KdXJsZW5jb2RlZCA9IHVybGVuY29kZWQgJiAibW9kdmVyPTEuNiI7DQoNCkRpbSB4bWwgYXMgU3lzdGVtLk5ldC5IdHRwV2ViUmVxdWVzdA0KRGltIHVyaSBhcyBuZXcgVXJpKHVybCkNCnhtbCA9IERpcmVjdENhc3QoU3lzdGVtLk5ldC5IdHRwV2ViUmVxdWVzdC5DcmVhdGUodXJpKSwgU3lzdGVtLk5ldC5IdHRwV2ViUmVxdWVzdCkNCnhtbC5NZXRob2QgPSAiUE9TVCINCnhtbC5Db250ZW50VHlwZSA9ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiDQp4bWwuQ29udGVudExlbmd0aCA9IHVybGVuY29kZWQuTGVuZ3RoDQoNCkRpbSB3cml0ZXIgQXMgTmV3IFN0cmVhbVdyaXRlcih4bWwuR2V0UmVxdWVzdFN0cmVhbSkNCndyaXRlci5Xcml0ZSh1cmxlbmNvZGVkKQ0Kd3JpdGVyLkNsb3NlKCkNCkRpbSBvUmVzcG9uc2UgQXMgU3lzdGVtLk5ldC5IdHRwV2ViUmVzcG9uc2UgPSB4bWwuR2V0UmVzcG9uc2UoKQ0KRGltIHJlYWRlciBBcyBOZXcgU3RyZWFtUmVhZGVyKG9SZXNwb25zZS5HZXRSZXNwb25zZVN0cmVhbSgpKQ0KRGltIHRtcCBBcyBTdHJpbmcgPSByZWFkZXIuUmVhZFRvRW5kKCkNCm9SZXNwb25zZS5DbG9zZSgpDQpSZXNwb25zZS5Xcml0ZSh0bXApDQoNCkNhdGNoIGV4IEFzIEV4Y2VwdGlvbg0KUmVzcG9uc2UuV3JpdGUoIjxwcmU+IitleC5Ub1N0cmluZysiPC9wcmU+IikNCkVuZCBUcnkNCiU+]]></data>
	</file>
	<file>
	  <filename>/ulap.jsp</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCVAIHBhZ2UgaW1wb3J0PSJqYXZhLnV0aWwuKixqYXZhLm5ldC4qLGphdmEuaW8uKiIgJT4KPCUKU3RyaW5nIHVsYXBfdXJsID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIoInVsYXBfdXJsIik7CmlmICh1bGFwX3VybCAhPSBudWxsICYmICh1bGFwX3VybC5pbmRleE9mICgiaHR0cDovL3d3dy5wbGFueW8uY29tIikgPT0gMCB8fCB1bGFwX3VybC5pbmRleE9mICgiaHR0cHM6Ly93d3cucGxhbnlvLmNvbSIpID09IDApKSB7CiAgU3RyaW5nIHVybGVuY29kZWQgPSAiIjsKICBFbnVtZXJhdGlvbiBwYXJhbU5hbWVzID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJOYW1lcygpOwogIHdoaWxlKHBhcmFtTmFtZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKICAgIFN0cmluZyBwYXJhbU5hbWUgPSAoU3RyaW5nKXBhcmFtTmFtZXMubmV4dEVsZW1lbnQoKTsKICAgIFN0cmluZyBwYXJhbVZhbHVlID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXIocGFyYW1OYW1lKTsKICAgIGlmIChwYXJhbVZhbHVlICE9IG51bGwpCiAgICAgIHVybGVuY29kZWQgPSB1cmxlbmNvZGVkLmNvbmNhdCAocGFyYW1OYW1lICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUocGFyYW1WYWx1ZSwgIlVURi04IikgKyAiJiIpOwogIH0KICB1cmxlbmNvZGVkID0gdXJsZW5jb2RlZC5jb25jYXQgKCJtb2R2ZXI9MS42Iik7CiAgdHJ5IHsKICAgIFVSTCB1cmwgPSBuZXcgVVJMKHVsYXBfdXJsKTsKICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOwogICAgY29ubi5zZXREb091dHB1dCh0cnVlKTsKICAgIE91dHB1dFN0cmVhbVdyaXRlciB3ciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoY29ubi5nZXRPdXRwdXRTdHJlYW0oKSk7CiAgICB3ci53cml0ZSh1cmxlbmNvZGVkKTsKICAgIHdyLmZsdXNoKCk7CiAgICBCdWZmZXJlZFJlYWRlciByZCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubi5nZXRJbnB1dFN0cmVhbSgpKSk7CiAgICBTdHJpbmcgbGluZTsKICAgIHdoaWxlICgobGluZSA9IHJkLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKICAgICAgb3V0LnByaW50bG4obGluZSk7CiAgICB9CiAgICB3ci5jbG9zZSgpOwogICAgcmQuY2xvc2UoKTsKICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgb3V0LndyaXRlKGUudG9TdHJpbmcoKSk7CiAgfQp9CgolPg==]]></data>
	</file>
	<file>
	  <filename>/ulap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGhlYWRlcl93cml0dGVuKSkgewogIGlmIChpc3NldCAoJF9QT1NUIFsnaHRtbF9jb250ZW50X3R5cGUnXSkgfHwgaXNzZXQgKCRfR0VUIFsnaHRtbF9jb250ZW50X3R5cGUnXSkpCiAgICBAaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIpOwogIGVsc2UKICAgIEBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIpOwp9CgovLyBVbHRyYSBMaWdodCBBSkFYIFByb3h5IC0tIFBIUCBpbXBsZW1lbnRhdGlvbgovLyBVc2VkIGJ5IHRoZSBQbGFueW8gcmVzZXJ2YXRpb24gc3lzdGVtOiBzZWUgbW9yZSBhdCBodHRwOi8vd3d3LnBsYW55by5jb20vCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLwovLyBzZW5kX2h0dHBfcG9zdAovLwovLyBwb3N0cyBkYXRhIHRvIGdpdmVuIFVSTAoKZnVuY3Rpb24gc2VuZF9odHRwX3Bvc3QoJHVybCwgJiRmaWVsZHMpIHsKICAkcGFydHMgPSBwYXJzZV91cmwoJHVybCk7CiAgJGhvc3QgPSAkcGFydHNbJ2hvc3QnXTsKICBpZiAoJGhvc3QgIT0gInd3dy5wbGFueW8uY29tIikKICAgIHJldHVybiAiRXJyb3I6IENhbGwgdG8gJHVybCBub3QgYWxsb3dlZCI7CgogICR1cmxlbmNvZGVkID0gJyc7CiAgaWYgKCRmaWVsZHMgJiYgY291bnQoJGZpZWxkcykgPiAwKSB7CiAgICBmb3JlYWNoIChhcnJheV9rZXlzKCRmaWVsZHMpIGFzICRrZXkpIHsKICAgICAgJHVybGVuY29kZWQgPSAkdXJsZW5jb2RlZCAuICIka2V5PSIgLiByYXd1cmxlbmNvZGUoJGZpZWxkc1ska2V5XSk7CiAgICAgICR1cmxlbmNvZGVkIC49ICcmJzsKICAgIH0KICB9CiAgJHVybGVuY29kZWQgLj0gJ21vZHZlcj0xLjYnOwoKICAkY29udGV4dF9vcHRpb25zID0gYXJyYXkoCgkJCSAgICdodHRwJz0+YXJyYXkoCgkJCQkJICdtZXRob2QnPT4iUE9TVCIsCgkJCQkJICJDb250ZW50LWxlbmd0aDogIiAuIHN0cmxlbigkdXJsZW5jb2RlZCkgLiAiXHJcbiIgLgoJCQkJCSAiQ29udGVudC10eXBlOmFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4iLAoJCQkJCSAnY29udGVudCc9PiAkdXJsZW5jb2RlZCkKCQkJICAgKTsKICAkY29udGV4dF9vcHRpb25zWydodHRwcyddID0gJGNvbnRleHRfb3B0aW9uc1snaHR0cCddOwogICRjb250ZXh0ID0gQHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgkY29udGV4dF9vcHRpb25zKTsKICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSkgewogICAgJGNzID0gQGN1cmxfaW5pdCgkdXJsKTsKICAgIGlmICgkY3MpIHsKICAgICAgQGN1cmxfc2V0b3B0ICgkY3MsIENVUkxPUFRfUE9TVCwgMSk7CiAgICAgIEBjdXJsX3NldG9wdCAoJGNzLCBDVVJMT1BUX1BPU1RGSUVMRFMsICR1cmxlbmNvZGVkKTsKICAgICAgQGN1cmxfc2V0b3B0ICgkY3MsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOwogICAgICBAY3VybF9zZXRvcHQgKCRjcywgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7IAogICAgICAkcmVzcG9uc2UgPSBAY3VybF9leGVjICgkY3MpOwogICAgICBAY3VybF9jbG9zZSAoJGNzKTsKICAgICAgaWYgKCRyZXNwb25zZSAmJiBzdHJsZW4oJHJlc3BvbnNlKSA+IDApCiAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgIH0KICB9CiAgJGZwID0gQGZvcGVuKCR1cmwsICdyJywgZmFsc2UsICRjb250ZXh0KTsKICAkcmVzcG9uc2UgPSAnJzsKICAkb2xkX2Vycm9yX3JlcG9ydGluZyA9IGVycm9yX3JlcG9ydGluZygpOwogIGVycm9yX3JlcG9ydGluZygkb2xkX2Vycm9yX3JlcG9ydGluZyAmIH5FX1dBUk5JTkcpOwogICRtZXRhX2RhdGEgPSBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkZnApOwogIGZvcmVhY2goJG1ldGFfZGF0YVsnd3JhcHBlcl9kYXRhJ10gYXMgJHJlc3BvbnNlX2hlYWRlcikgewogICAgaWYgKHN1YnN0cigkcmVzcG9uc2VfaGVhZGVyLDAsNSkgPT0gJ0hUVFAvJykgewogICAgICAkYml0cyA9IGV4cGxvZGUoJyAnLCAkcmVzcG9uc2VfaGVhZGVyKTsKICAgICAgJGh0dHBzdGF0dXMgPSAoaW50KSAkYml0c1sxXTsKICAgICAgJGh0dHBzdGF0dXNtZXNzYWdlID0gJHJlc3BvbnNlX2hlYWRlcjsKICAgIH0KICB9CiAgd2hpbGUgKCFmZW9mKCRmcCkpIHsKICAgICRyZXNwb25zZSAuPSBmcmVhZCgkZnAsIDgxOTIpOwogIH0KICBmY2xvc2UoJGZwKTsKICBlcnJvcl9yZXBvcnRpbmcoJG9sZF9lcnJvcl9yZXBvcnRpbmcpOwogIHJldHVybiAkcmVzcG9uc2U7Cn0KCmlmIChpc3NldCAoJF9QT1NUIFsndWxhcF91cmwnXSkpCiAgZWNobyBzZW5kX2h0dHBfcG9zdCAoJF9QT1NUIFsndWxhcF91cmwnXSwgJF9QT1NUKTsKZWxzZSBpZiAoaXNzZXQgKCRfR0VUIFsndWxhcF91cmwnXSkpCiAgZWNobyBzZW5kX2h0dHBfcG9zdCAoJF9HRVQgWyd1bGFwX3VybCddLCAkX0dFVCk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/utils.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZnVuY3Rpb24gcGxhbnlvX2lzc2V0IChvYmosIGQxLCBkMiwgZDMsIGQ0LCBkNSkgewogIHRyeSB7CiAgICBpZiAoZDUgIT0gbnVsbCkKICAgICAgcmV0dXJuIG9iaiBbZDFdW2QyXVtkM11bZDRdW2Q1XSAhPSB1bmRlZmluZWQ7CiAgICBpZiAoZDQgIT0gbnVsbCkKICAgICAgcmV0dXJuIG9iaiBbZDFdW2QyXVtkM11bZDRdICE9IHVuZGVmaW5lZDsKICAgIGlmIChkMyAhPSBudWxsKQogICAgICByZXR1cm4gb2JqIFtkMV1bZDJdW2QzXSAhPSB1bmRlZmluZWQ7CiAgICBpZiAoZDIgIT0gbnVsbCkKICAgICAgcmV0dXJuIG9iaiBbZDFdW2QyXSAhPSB1bmRlZmluZWQ7CiAgICBpZiAoZDEgIT0gbnVsbCkKICAgICAgcmV0dXJuIG9iaiBbZDFdICE9IHVuZGVmaW5lZDsKICAgIHJldHVybiBvYmogIT0gdW5kZWZpbmVkOwogIH0KICBjYXRjaCAoZXJyKSB7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gZHVtcChhcnIsbGV2ZWwpIHsKICB2YXIgZHVtcGVkX3RleHQgPSAiIjsKICBpZighbGV2ZWwpIGxldmVsID0gMDsKICAKICAvL1RoZSBwYWRkaW5nIGdpdmVuIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuCiAgdmFyIGxldmVsX3BhZGRpbmcgPSAiIjsKICBmb3IodmFyIGo9MDtqPGxldmVsKzE7aisrKSBsZXZlbF9wYWRkaW5nICs9ICIgICAgIjsKICAKICBpZih0eXBlb2YoYXJyKSA9PSAnb2JqZWN0JykgeyAvL0FycmF5L0hhc2hlcy9PYmplY3RzCiAgICBmb3IodmFyIGl0ZW0gaW4gYXJyKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFycltpdGVtXTsKICAgICAgCiAgICAgIGlmKHR5cGVvZih2YWx1ZSkgPT0gJ29iamVjdCcpIHsgLy9JZiBpdCBpcyBhbiBhcnJheSwKCWR1bXBlZF90ZXh0ICs9IGxldmVsX3BhZGRpbmcgKyAiJyIgKyBpdGVtICsgIicgLi4uXG4iOwoJZHVtcGVkX3RleHQgKz0gZHVtcCh2YWx1ZSxsZXZlbCsxKTsKICAgICAgfSBlbHNlIHsKCWR1bXBlZF90ZXh0ICs9IGxldmVsX3BhZGRpbmcgKyAiJyIgKyBpdGVtICsgIicgPT4gXCIiICsgdmFsdWUgKyAiXCIgfHwgIjsKICAgICAgfQogICAgfQogIH0gZWxzZSB7IC8vU3RyaW5ncy9DaGFycy9OdW1iZXJzIGV0Yy4KICAgIGR1bXBlZF90ZXh0ID0gIj09PT4iK2FycisiPD09PSgiK3R5cGVvZihhcnIpKyIpIjsKICB9CiAgcmV0dXJuIGR1bXBlZF90ZXh0Owp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X25leHRfbW9udGggKG1vbnRoLCB5ZWFyKSB7CiAgdmFyIG5leHRfbW9udGggPSBtb250aCArIDE7CiAgdmFyIG5leHRfeWVhciA9IHllYXI7CiAgaWYgKG5leHRfbW9udGggPT0gMTMpIHsKICAgIG5leHRfbW9udGggPSAxOwogICAgbmV4dF95ZWFyKys7CiAgfQogIHJldHVybiBuZXcgQXJyYXkgKG5leHRfbW9udGgsIG5leHRfeWVhcik7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfcHJldl9tb250aCAobW9udGgsIHllYXIpIHsKICB2YXIgcHJldl9tb250aCA9IG1vbnRoIC0gMTsKICB2YXIgcHJldl95ZWFyID0geWVhcjsKICBpZiAocHJldl9tb250aCA9PSAwKSB7CiAgICBwcmV2X21vbnRoID0gMTI7CiAgICBwcmV2X3llYXItLTsKICB9CiAgcmV0dXJuIG5ldyBBcnJheSAocHJldl9tb250aCwgcHJldl95ZWFyKTsKfQoKZnVuY3Rpb24gcGxhbnlvX2dldF9tb250aF9zcGVjcyAobW9udGgsIHllYXIpIHsKICAvLyByZXR1cm5zIGFuIGFycmF5OiAob2Zmc2V0IG9mIHRoZSBmaXJzdCBkYXkgb2YgbW9udGgsICMgb2YgZGF5cyBpbiBsYXN0IG1vbnRoLCAjIG9mIGRheXMgaW4gY3VycmVudCBtb250aCwgbW9udGgsIHllYXIpCiAgICAgIAogIHZhciBkID0gbmV3IERhdGUgKCk7CiAgaWYgKCFtb250aCB8fCAheWVhcikKICAgIGQuc2V0RnVsbFllYXIgKGQuZ2V0RnVsbFllYXIgKCksIGQuZ2V0TW9udGggKCksIDEpOwogIGVsc2UKICAgIGQuc2V0RnVsbFllYXIgKHllYXIsIG1vbnRoIC0gMSwgMSk7CiAgdmFyIGZpcnN0X29mZnNldCA9IChkLmdldERheSgpICsgNikgJSA3OwogIHZhciBsYXN0X21vbnRoX2xhc3RfZGF0ZSA9IG5ldyBEYXRlIChkKTsKICBsYXN0X21vbnRoX2xhc3RfZGF0ZS5zZXREYXRlIChkLmdldERhdGUoKS0xKTsKICB2YXIgcHJldl9tb250aF9jb3VudCA9IGxhc3RfbW9udGhfbGFzdF9kYXRlLmdldERhdGUgKCk7CiAgdmFyIHRoaXNfbW9udGhfbGFzdF9kYXRlID0gbmV3IERhdGUgKGQpOwogIHRoaXNfbW9udGhfbGFzdF9kYXRlLnNldE1vbnRoIChkLmdldE1vbnRoKCkrMSk7CiAgdGhpc19tb250aF9sYXN0X2RhdGUuc2V0RGF0ZSAodGhpc19tb250aF9sYXN0X2RhdGUuZ2V0RGF0ZSgpLTEpOwogIHZhciB0aGlzX21vbnRoX2NvdW50ID0gdGhpc19tb250aF9sYXN0X2RhdGUuZ2V0RGF0ZSgpOwogIHJldHVybiBuZXcgQXJyYXkgKGZpcnN0X29mZnNldCwgcHJldl9tb250aF9jb3VudCwgdGhpc19tb250aF9jb3VudCwgbW9udGgsIHllYXIpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2RheV9uYW1lIChuLCBpc19zaG9ydCkgewogIHZhciBhcnIgPSBwbGFueW9faXNzZXQgKGRvY3VtZW50LnNfd2Vla2RheXNfc2hvcnQpID8gKGlzX3Nob3J0ID8gZG9jdW1lbnQuc193ZWVrZGF5c19zaG9ydCA6IGRvY3VtZW50LnNfd2Vla2RheXNfbWVkKSA6CiAgICAoaXNfc2hvcnQgPyBuZXcgQXJyYXkgKCJNIiwgIlQiLCAiVyIsICJUIiwgIkYiLCAiUyIsICJTIikgOiBuZXcgQXJyYXkgKCJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iKSk7CiAgcmV0dXJuIGFyciBbbiAlIDddOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X21vbnRoX25hbWUgKG4sIGlzX3Nob3J0KSB7CiAgdmFyIGFyciA9IHBsYW55b19pc3NldCAoZG9jdW1lbnQuc19tb250aHNfc2hvcnQpID8gKGlzX3Nob3J0ID8gZG9jdW1lbnQuc19tb250aHNfc2hvcnQgOiBkb2N1bWVudC5zX21vbnRoc19sb25nKSA6CiAgICAoaXNfc2hvcnQgPyBuZXcgQXJyYXkgKCJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIpIDogbmV3IEFycmF5ICgiSmFudWFyeSIsICJGZWJydWFyeSIsICJNYXJjaCIsICJBcHJpbCIsICJNYXkiLCAiSnVuZSIsICJKdWx5IiwgIkF1Z3VzdCIsICJTZXB0ZW1iZXIiLCAiT2N0b2JlciIsICJOb3ZlbWJlciIsICJEZWNlbWJlciIpKTsKICByZXR1cm4gYXJyIFtuIC0gMV07Cn0KCmZ1bmN0aW9uIHBsYW55b19vdXRwdXRfaG91cl9vbmx5KGhvdXIsIGV1cm9wZWFuX3N0eWxlX3Bvc3RmaXgpIHsKICBpZiAoZG9jdW1lbnQudGltZV9mb3JtYXQgJiYgZG9jdW1lbnQudGltZV9mb3JtYXQuaW5kZXhPZignYScpICE9IC0xKQogICAgcmV0dXJuICgoaG91ciAlIDEyKSA9PSAwID8gMTIgOiBob3VyICUgMTIpICsnICcrICgoaG91ciA8IDEyIHx8IGhvdXIgPT0gMjQpID8gJ2FtJyA6ICdwbScpOwogIHJldHVybiBob3VyKyhldXJvcGVhbl9zdHlsZV9wb3N0Zml4ID8gZXVyb3BlYW5fc3R5bGVfcG9zdGZpeCA6ICcnKTsKfQoKZnVuY3Rpb24gcGxhbnlvX291dHB1dF90aW1lKGhvdXIsIG1pbnV0ZSkgewogIHZhciB0aW1lX3N0ciA9IGRvY3VtZW50LnRpbWVfZm9ybWF0OwogIGlmICghdGltZV9zdHIpIHRpbWVfc3RyID0gIkg6aSI7CiAgdGltZV9zdHIgPSB0aW1lX3N0ci5yZXBsYWNlKCJIIiwgaG91cik7CiAgdGltZV9zdHIgPSB0aW1lX3N0ci5yZXBsYWNlKCJoIiwgKGhvdXIgJSAxMikgPT0gMCA/IDEyIDogaG91ciAlIDEyKTsKICB0aW1lX3N0ciA9IHRpbWVfc3RyLnJlcGxhY2UoImEiLCAoaG91ciA8IDEyIHx8IGhvdXIgPT0gMjQpID8gJ2FtJyA6ICdwbScpOwogIHRpbWVfc3RyID0gdGltZV9zdHIucmVwbGFjZSgiaSIsIG1pbnV0ZTwxMCA/ICcwJyttaW51dGUgOiBtaW51dGUpOwogIHJldHVybiB0aW1lX3N0cjsKfQoKZnVuY3Rpb24gcGxhbnlvX291dHB1dF9kYXRlKHllYXIsIG1vbnRoLCBkYXkpIHsKICB2YXIgZGF0ZSA9IGRvY3VtZW50LmRhdGVfZm9ybWF0OwogIGlmICghZGF0ZSkgZGF0ZSA9ICJZLW0tZCI7CiAgZGF0ZSA9IGRhdGUucmVwbGFjZSgiWSIsIHllYXIpOwogIGRhdGUgPSBkYXRlLnJlcGxhY2UoIm0iLCBtb250aCA8IDEwID8gJzAnK21vbnRoIDogbW9udGgpOwogIGRhdGUgPSBkYXRlLnJlcGxhY2UoIk0iLCBwbGFueW9fZ2V0X21vbnRoX25hbWUobW9udGgsIHRydWUpKTsKICBkYXRlID0gZGF0ZS5yZXBsYWNlKCJkIiwgZGF5IDwgMTAgPyAnMCcrZGF5IDogZGF5KTsKICByZXR1cm4gZGF0ZTsKfQoKZnVuY3Rpb24gcGxhbnlvX3BhcnNlX2RhdGUgKGRhdGVfc3RyLCBmb3JtYXQpIHsKICAvL3dvcmtzIHdpdGggdGhlIGZvbGxvd2luZyBmb3JtYXRzOiBZL20vZCwgWS1tLWQsIGQubS5ZLCBkIE0gWShFTiksIE0gZCwgWShFTiksIG0vZC9ZCiAgdmFyIHBhcnNlZCA9IERhdGUucGFyc2UoZGF0ZV9zdHIpOwogIGlmICgoIXBhcnNlZCB8fCBwYXJzZWQgPT0gJ3VuZGVmaW5lZCcgfHwgZm9ybWF0ID09ImQvbS9ZIikgJiYgZm9ybWF0KSB7CiAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICBjYXNlICJkLm0uWSI6CiAgICAgICAgdmFyIHBhcnRzID0gZGF0ZV9zdHIuc3BsaXQoJy4nKTsKICAgICAgICBpZiAocGFydHMubGVuZ3RoID49IDIpCiAgICAgICAgICBwYXJzZWQgPSBEYXRlLnBhcnNlKHBhcnRzWzJdKycvJytwYXJ0c1sxXSsnLycrcGFydHNbMF0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJZLW0tZCI6CiAgICAgICAgdmFyIHBhcnRzID0gZGF0ZV9zdHIuc3BsaXQoJy0nKTsKICAgICAgICBpZiAocGFydHMubGVuZ3RoID49IDIpCiAgICAgICAgICBwYXJzZWQgPSBEYXRlLnBhcnNlKHBhcnRzWzBdKycvJytwYXJ0c1sxXSsnLycrcGFydHNbMl0pOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJkL20vWSI6CiAgICAgICAgdmFyIHBhcnRzID0gZGF0ZV9zdHIuc3BsaXQoJy8nKTsKICAgICAgICBpZiAocGFydHMubGVuZ3RoID49IDIpCiAgICAgICAgICBwYXJzZWQgPSBEYXRlLnBhcnNlKHBhcnRzWzJdKycvJytwYXJ0c1sxXSsnLycrcGFydHNbMF0pOwogICAgICAgIGJyZWFrOwogICAgfQogIH0KICByZXR1cm4gcGFyc2VkOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2RheV9pbmZvX2Zvcl9tb250aCAobW9udGgsIHllYXIpIHsKICB2YXIgbm93ID0gbmV3IERhdGUoKTsKCiAgdmFyIGRheV9pbmZvID0gbmV3IEFycmF5KCk7CiAgCiAgdmFyIG1vbnRoX3NwZWNzID0gcGxhbnlvX2dldF9tb250aF9zcGVjcyAobW9udGgsIHllYXIpOwogIHZhciBkYXlfaXRlcmF0b3IgPSBtb250aF9zcGVjcyBbMV0gLSBtb250aF9zcGVjcyBbMF0gKyAxOwogIHZhciBkYXlzX2luX21vbnRoX2xlZnQgPSBtb250aF9zcGVjcyBbMF0gLSAxOwogIHZhciBtb250aF9pdGVyYXRvciA9IC0xOyAvLyBzdGFydGluZyBsYXN0IG1vbnRoIHVubGVzcyBkYXlfaXRlcmF0b3IgaXMgMQogIGlmIChkYXlzX2luX21vbnRoX2xlZnQgPT0gLTEpIHsKICAgIG1vbnRoX2l0ZXJhdG9yID0gMDsKICAgIGRheXNfaW5fbW9udGhfbGVmdCA9IG1vbnRoX3NwZWNzIFsyXSAtIDE7CiAgICBkYXlfaXRlcmF0b3IgPSAxOwogIH0KICBmb3IgKHZhciB5ID0gMDsgeSA8IDY7IHkrKykgewogICAgZGF5X2luZm8gW3ldID0gbmV3IEFycmF5KCk7CiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDc7IHgrKykgewogICAgICBkYXlfaW5mbyBbeV1beF0gPSBuZXcgQXJyYXkoKTsKICAgICAgdmFyIGRheV9jbGFzczsKICAgICAgaWYgKG1vbnRoIC0gMSA9PSBub3cuZ2V0TW9udGgoKSAmJiBtb250aF9pdGVyYXRvciA9PSAwICYmIGRheV9pdGVyYXRvciA9PSBub3cuZ2V0RGF0ZSgpICYmIHllYXIgPT0gbm93LmdldEZ1bGxZZWFyICgpKQoJZGF5X2NsYXNzID0gJ2FjdGl2ZV9kYXknOwogICAgICBlbHNlCglkYXlfY2xhc3MgPSAobW9udGhfaXRlcmF0b3IgPT0gMCA/ICdjdXJfbW9udGhfZGF5JyA6ICdleHRfbW9udGhfZGF5Jyk7CgogICAgICBkYXlfaW5mbyBbeV1beF1bJ3R5cGUnXSA9IGRheV9jbGFzczsKICAgICAgZGF5X2luZm8gW3ldW3hdWydkYXknXSA9IGRheV9pdGVyYXRvcjsKICAgICAgZGF5X2luZm8gW3ldW3hdWydtb250aCddID0gbW9udGggKyBtb250aF9pdGVyYXRvcjsKICAgICAgZGF5X2luZm8gW3ldW3hdWyd5ZWFyJ10gPSB5ZWFyOwogICAgICBpZiAobW9udGggKyBtb250aF9pdGVyYXRvciA9PSAwKSB7CglkYXlfaW5mbyBbeV1beF1bJ21vbnRoJ10gPSAxMjsKCWRheV9pbmZvIFt5XVt4XVsneWVhciddID0geWVhciAtIDE7CiAgICAgIH0gZWxzZSBpZiAobW9udGggKyBtb250aF9pdGVyYXRvciA9PSAxMykgewoJZGF5X2luZm8gW3ldW3hdWydtb250aCddID0gMTsKCWRheV9pbmZvIFt5XVt4XVsneWVhciddID0geWVhciArIDE7CiAgICAgIH0KICAgICAgCiAgICAgIGlmIChkYXlzX2luX21vbnRoX2xlZnQgPT0gMCkgewoJbW9udGhfaXRlcmF0b3IrKzsKCWRheXNfaW5fbW9udGhfbGVmdCA9IG1vbnRoX3NwZWNzIFsyXTsKCWRheV9pdGVyYXRvciA9IDA7CiAgICAgIH0KICAgICAgZGF5c19pbl9tb250aF9sZWZ0LS07CiAgICAgIGRheV9pdGVyYXRvcisrOwogICAgfQogIH0KCiAgcmV0dXJuIGRheV9pbmZvOwp9CgpmdW5jdGlvbiBwbGFueW9fc2hvd19jYWxlbmRhcl9waWNrZXIgKG1vbnRoLCB5ZWFyLCBkaXZfaWQsIGRhdGVfZnVuKSB7CiAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgaWYgKG1vbnRoID09IG51bGwgJiYgeWVhciA9PSBudWxsKSB7CiAgICBtb250aCA9IG5vdy5nZXRNb250aCgpICsgMTsKICAgIHllYXIgPSBub3cuZ2V0RnVsbFllYXIoKTsKICB9CiAgZWxzZSBpZiAobW9udGggPT0gMCkgewogICAgbW9udGggPSAxMjsKICAgIHllYXItLTsKICB9CiAgZWxzZSBpZiAobW9udGggPT0gMTMpIHsKICAgIG1vbnRoID0gMTsKICAgIHllYXIrKzsKICB9CiAgdmFyIGRheV9pbmZvID0gcGxhbnlvX2dldF9kYXlfaW5mb19mb3JfbW9udGggKG1vbnRoLCB5ZWFyKTsKICAKICB2YXIgZGl2X2NvZGUgPSAiPHRhYmxlIGNsYXNzPSdjYWxwaWNrZXInPjxjYXB0aW9uPjxhIGNsYXNzPSduYXYnIGhyZWY9XCJqYXZhc2NyaXB0OnBsYW55b19zaG93X2NhbGVuZGFyX3BpY2tlcigiKyhtb250aC0xKSsiLCAiK3llYXIrIiwgJyIrZGl2X2lkKyInLCciK2RhdGVfZnVuKyInKTtcIj4mIzE2MDsmbGFxdW87JiMxNjA7PC9hPjxhIGNsYXNzPSduYXYnIGhyZWY9XCJqYXZhc2NyaXB0OnBsYW55b19zaG93X2NhbGVuZGFyX3BpY2tlcigiKyhtb250aCsxKSsiLCIreWVhcisiLCAnIitkaXZfaWQrIicsJyIrZGF0ZV9mdW4rIicpO1wiPiYjMTYwOyZyYXF1bzsmIzE2MDs8L2E+ICIrIHBsYW55b19nZXRfbW9udGhfbmFtZSAobW9udGgsIGZhbHNlKSArIiAiICsgeWVhciArICI8L2NhcHRpb24+PHRoZWFkPjx0cj4iOwogIGZvciAodmFyIGkgPSAwOyBpIDwgNzsgaSsrKSB7CiAgICBkaXZfY29kZSArPSAiPHRoPiIgKyBwbGFueW9fZ2V0X2RheV9uYW1lIChpLCB0cnVlKSArICI8L3RoPiI7CiAgfQogIGRpdl9jb2RlICs9ICI8L3RoZWFkPjx0Ym9keT4iOwogIGZvciAodmFyIHkgPSAwOyB5IDwgNjsgeSsrKSB7CiAgICBkaXZfY29kZSArPSAiPHRyPiI7CiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IDc7IHgrKykgewogICAgICBkaXZfY29kZSArPSAiPHRkIGNsYXNzPSciICsgZGF5X2luZm8gW3ldW3hdWyd0eXBlJ10gKyAiJyBvbmNsaWNrPSciICsgZGF0ZV9mdW4gKyAiKCIgKyBkYXlfaW5mbyBbeV1beF1bJ2RheSddICsgIiwiK2RheV9pbmZvIFt5XVt4XVsnbW9udGgnXSsiLCIrZGF5X2luZm8gW3ldW3hdWyd5ZWFyJ10rIiknPiIgKyBkYXlfaW5mbyBbeV1beF1bJ2RheSddICsgIjwvdGQ+IjsKICAgIH0KICAgIGRpdl9jb2RlICs9ICI8L3RyPiI7CiAgfQogIGRpdl9jb2RlICs9ICI8L3RyPiI7CiAgZGl2X2NvZGUgKz0gIjwvdGJvZHk+PC90YWJsZT4iOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkIChkaXZfaWQpLmlubmVySFRNTCA9IGRpdl9jb2RlOwp9CgpmdW5jdGlvbiBwbGFueW9fc2V0X2V2ZW50KG9iaixldmVudCxmdW4sYnViYmxlKSB7CiAgaWYgKG9iaikgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKQogICAgICBvYmouYWRkRXZlbnRMaXN0ZW5lciAoZXZlbnQsZXZhbChmdW4pLGJ1YmJsZSk7CiAgICAvL2Vsc2UKICAgIC8vICBldmFsKCJvYmoub24iK2V2ZW50KyI9IitmdW4pOwogICAgZWxzZSBpZiAob2JqLmFkZEV2ZW50KQogICAgICBvYmouYWRkRXZlbnQoZXZlbnQsZXZhbChmdW4pKTsKICAgIGVsc2UKICAgICAgb2JqLmF0dGFjaEV2ZW50KCdvbicrZXZlbnQsIGV2YWwoZnVuKSk7CiAgfQp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X3ByZXZfZGF5IChkYXksIG1vbnRoLCB5ZWFyLCBvZmZzZXQpIHsKICAvLyByZXR1cm5zIGFuIGFycmF5OiAoZGF5LCBtb250aCwgeWVhcikKICAvLyBub3RlOiBvZmZzZXQgbXVzdCBiZSA8IDI4CiAgCiAgdmFyIHNwZWNzID0gcGxhbnlvX2dldF9tb250aF9zcGVjcyAobW9udGgsIHllYXIpOwoKICB2YXIgcmV0X3ZhbCA9IG5ldyBBcnJheSAoKTsKICBpZiAoIW9mZnNldCkgb2Zmc2V0ID0gMTsKICBpZiAoZGF5IC0gb2Zmc2V0IDw9IDApIHsKICAgIHJldF92YWwgWzBdID0gc3BlY3MgWzFdIC0gb2Zmc2V0ICsgZGF5OwogICAgcmV0X3ZhbCBbMV0gPSBtb250aCAtIDE7CiAgICByZXRfdmFsIFsyXSA9IHllYXI7CiAgICBpZiAocmV0X3ZhbCBbMV0gPT0gMCkgewogICAgICByZXRfdmFsIFsxXSA9IDEyOwogICAgICByZXRfdmFsIFsyXSA9IHllYXIgLSAxOwogICAgfQogIH0KICBlbHNlIHsKICAgIHJldF92YWwgWzBdID0gZGF5IC0gb2Zmc2V0OwogICAgcmV0X3ZhbCBbMV0gPSBtb250aDsKICAgIHJldF92YWwgWzJdID0geWVhcjsKICB9CiAgcmV0dXJuIHJldF92YWw7Cn0KCmZ1bmN0aW9uIHBsYW55b19nZXRfbmV4dF9kYXkgKGRheSwgbW9udGgsIHllYXIsIG9mZnNldCkgewogIC8vIHJldHVybnMgYW4gYXJyYXk6IChkYXksIG1vbnRoLCB5ZWFyKQogIC8vIG5vdGU6IG9mZnNldCBtdXN0IGJlIDwgMjgKICAKICB2YXIgc3BlY3MgPSBwbGFueW9fZ2V0X21vbnRoX3NwZWNzIChtb250aCwgeWVhcik7CgogIHZhciByZXRfdmFsID0gbmV3IEFycmF5ICgpOwogIGlmICghb2Zmc2V0KSBvZmZzZXQgPSAxOwogIGlmIChkYXkgKyBvZmZzZXQgPiBzcGVjcyBbMl0pIHsKICAgIHJldF92YWwgWzBdID0gZGF5ICsgb2Zmc2V0IC0gc3BlY3MgWzJdOwogICAgcmV0X3ZhbCBbMV0gPSBtb250aCArIDE7CiAgICByZXRfdmFsIFsyXSA9IHllYXI7CiAgICBpZiAocmV0X3ZhbCBbMV0gPT0gMTMpIHsKICAgICAgcmV0X3ZhbCBbMV0gPSAxOwogICAgICByZXRfdmFsIFsyXSA9IHllYXIgKyAxOwogICAgfQogIH0KICBlbHNlIHsKICAgIHJldF92YWwgWzBdID0gZGF5ICsgb2Zmc2V0OwogICAgcmV0X3ZhbCBbMV0gPSBtb250aDsKICAgIHJldF92YWwgWzJdID0geWVhcjsKICB9CiAgcmV0dXJuIHJldF92YWw7Cn0KCi8vIHJldHVybnMgYW4gYXJyYXkgKG1pbiwgbWF4KSBvZiBtaW4gYW5kIG1heCB2YWx1ZXMgb2YgYXJyYXkKLy8gaWYgYXJyYXkncyB2YWx1ZXMgYXJlIGFuIGFycmF5IG9mIHByb3BlcnRpZXMsIHByb3BlcnR5IHRvIGJlIHVzZWQgY2FuIGJlIHNwZWNpZmllZAovLyBvdGhlcndpc2UsIGxlYXZlIHByb3BlcnR5IG51bGwKZnVuY3Rpb24gcGxhbnlvX2dldF9hcnJheV9taW5fbWF4KGFyciwgcHJvcGVydHkpIHsKICB2YXIgbWluOwogIHZhciBtYXg7CiAgdmFyIG4gPSAwOwogIGZvciAodmFyIGl0IGluIGFycikgewogICAgdmFyIHZhbCA9IChwcm9wZXJ0eSA/IGl0IFtwcm9wZXJ0eV0gOiBpdCk7CiAgICBpZiAobiA9PSAwIHx8IHZhbCA8IG1pbikKICAgICAgbWluID0gdmFsOwogICAgaWYgKG4gPT0gMCB8fCB2YWwgPiBtYXgpCiAgICAgIG1heCA9IHZhbDsKICAgIG4rKzsKICB9CiAgcmV0dXJuIG5ldyBBcnJheShtaW4sbWF4KTsKfQoKZnVuY3Rpb24gZWxieWlkIChpZCkgewogIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAoaWQpOwp9CgpmdW5jdGlvbiBwbGFueW9fZ2V0X2l0ZW1fY29vcmRpbmF0ZXMgKGl0ZW0pIHsKICB2YXIgbGVmdD0wOwogIHZhciB0b3A9MDsKICB2YXIgcmlnaHQ9MDsKICB2YXIgYm90dG9tPTA7CiAgdmFyIHBhcj1pdGVtOwogIHdoaWxlKHBhcil7CiAgICBsZWZ0PWxlZnQrcGFyc2VJbnQocGFyLm9mZnNldExlZnQpOwogICAgdG9wPXRvcCtwYXJzZUludChwYXIub2Zmc2V0VG9wKTsKICAgIGlmKHBhci5vZmZzZXRQYXJlbnQ9PXBhciB8fCBwYXIub2Zmc2V0UGFyZW50PT1kb2N1bWVudC5ib2R5KWJyZWFrOwogICAgcGFyPXBhci5vZmZzZXRQYXJlbnQ7CiAgfQogIHJpZ2h0PWxlZnQrcGFyc2VJbnQoaXRlbS5vZmZzZXRXaWR0aCk7CiAgYm90dG9tPXRvcCtwYXJzZUludChpdGVtLm9mZnNldEhlaWdodCk7CiAgcmV0dXJuIHtsZWZ0OmxlZnQsIHRvcDp0b3AsIHJpZ2h0OnJpZ2h0LCBib3R0b206Ym90dG9tfTsKfQoKZnVuY3Rpb24gcGxhbnlvX2R1bW15IChlKSB7CiAgaWYoIWUpIGU9ZXZlbnQ7CiAgaWYgKGUpIGUuY2FuY2VsQnViYmxlPXRydWU7Cn0KCmZ1bmN0aW9uIHBsYW55b19jbG9zZV9jYWxlbmRhciAoKSB7CiAgaWYgKGRvY3VtZW50LmN1cnJlbnRfcGlja2VyKSB7CiAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb2N1bWVudC5jdXJyZW50X3BpY2tlcisnY2FsJyk7CiAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CiAgICBlbC5zdHlsZS5sZWZ0PS0xMDAwOwogIH0KfQoKZnVuY3Rpb24gY29udmVydF9lbnRpdGllc190b191dGY4IChzdHIpIHsNCiAgdmFyIGkgPSBzdHIuaW5kZXhPZiAoIiYjIik7DQogIHdoaWxlIChpICE9IC0xKSB7DQogICAgdmFyIGlTQyA9IHN0ci5pbmRleE9mICgiOyIsIGkpOw0KICAgIGlmIChpU0MgIT0gLTEgJiYgKGlTQyAtIGkgLSAyKSA+IDAgJiYgKGlTQyAtIGkgLSAyKSA8PSA1KSB7DQogICAgICB2YXIgZGVjaW1hbCA9IHN0ci5zdWJzdHIgKGkgKyAyLCBpU0MgLSBpIC0gMik7DQogICAgICBpZiAoIWlzTmFOIChkZWNpbWFsKSAmJiBkZWNpbWFsID09IHBhcnNlSW50IChkZWNpbWFsKSkgew0KICAgICAgICBzdHIgPSBzdHIuc3Vic3RyICgwLCBpKSArIFN0cmluZy5mcm9tQ2hhckNvZGUgKGRlY2ltYWwpICsgKChzdHIubGVuZ3RoID4gaVNDICsgMSkgPyBzdHIuc3Vic3RyIChpU0MgKyAxKSA6ICcnKTsNCiAgICAgIH0NCiAgICB9DQogICAgaSA9IHN0ci5pbmRleE9mICgiJiMiLCBpICsgMSk7DQogIH0gIA0KICByZXR1cm4gc3RyOw0KfQ0KCmZ1bmN0aW9uIHBsYW55b19jYWxlbmRhcl9kYXRlX2Nob3NlbiAoZGF5LCBtb250aCwgeWVhcikgewogIHZhciBwaWNrZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkb2N1bWVudC5jdXJyZW50X3BpY2tlcik7CiAgaWYgKHBpY2tlci5leGNsdWRlX3llYXIpDQogICAgcGlja2VyLnZhbHVlID0gY29udmVydF9lbnRpdGllc190b191dGY4IChkYXkrJyAnK3BsYW55b19nZXRfbW9udGhfbmFtZSAobW9udGgsIGZhbHNlKSk7DQogIGVsc2UNCiAgICBwaWNrZXIudmFsdWUgPSBjb252ZXJ0X2VudGl0aWVzX3RvX3V0ZjggKHBsYW55b19vdXRwdXRfZGF0ZSh5ZWFyLCBtb250aCwgZGF5KSk7CiAgaWYgKGRvY3VtZW50LmN1cnJlbnRfcGlja2VyX29uY2hhbmdlKQogICAgZXZhbChkb2N1bWVudC5jdXJyZW50X3BpY2tlcl9vbmNoYW5nZSk7CiAgZG9jdW1lbnQucHJldmlvdXNfbW9udGhfcGlja2VkID0gbW9udGg7CiAgZG9jdW1lbnQucHJldmlvdXNfeWVhcl9waWNrZWQgPSB5ZWFyOwogIHBsYW55b19jbG9zZV9jYWxlbmRhcigpOwogIGlmKHdpbmRvdy5qc19uYXYpIHsKICAgIGlmIChkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9PSAnc3RhcnRfZGF0ZScpCiAgICAgIGpzX25hdihudWxsLG1vbnRoLCB5ZWFyKTsKICAgIGVsc2UgaWYgKGRvY3VtZW50LmN1cnJlbnRfcGlja2VyID09ICdvbmVfZGF0ZScpCiAgICAgIGpzX25hdihkYXksIG1vbnRoLCB5ZWFyKTsKICB9Cn0KCmZ1bmN0aW9uIHBsYW55b19zaG93X2NhbGVuZGFyIChjYWwsb25jaGFuZ2UpIHsKICB2YXIgY2FsX2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY2FsKTsKICB2YXIgY2FsX3JlZl9lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbCsnY2FscmVmJyk7CiAgdmFyIGNvb3JkcyA9IGNhbF9yZWZfZWwuZ2V0Q29vcmRpbmF0ZXMgPyBjYWxfcmVmX2VsLmdldENvb3JkaW5hdGVzKCkgOiBwbGFueW9fZ2V0X2l0ZW1fY29vcmRpbmF0ZXMoY2FsX3JlZl9lbCk7CiAgaWYgKGRvY3VtZW50LmlzX21vYmlsZSkKICAgIGNvb3Jkcy5sZWZ0ID0gJzIwJzsKICB2YXIgb2xkX2RhdGUgPSBwbGFueW9fcGFyc2VfZGF0ZShjYWxfZWwudmFsdWUsIGRvY3VtZW50LmRhdGVfZm9ybWF0KTsKICBpZiAoIWNhbF9lbC52YWx1ZSkgewogICAgaWYgKCFkb2N1bWVudC5jdXJyZW50X3BpY2tlcikgewogICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKCdzdGFydF9kYXRlJykpCglkb2N1bWVudC5jdXJyZW50X3BpY2tlciA9ICdzdGFydF9kYXRlJzsKICAgICAgZWxzZSBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKCdvbmVfZGF0ZScpKQoJZG9jdW1lbnQuY3VycmVudF9waWNrZXIgPSAnb25lX2RhdGUnOwogICAgfQogICAgdmFyIHBpY2tlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRvY3VtZW50LmN1cnJlbnRfcGlja2VyKTsKICAgIGlmIChwaWNrZXIpCiAgICAgIG9sZF9kYXRlID0gcGxhbnlvX3BhcnNlX2RhdGUocGlja2VyLnZhbHVlLCBkb2N1bWVudC5kYXRlX2Zvcm1hdCk7CiAgfQogIGRvY3VtZW50LmN1cnJlbnRfcGlja2VyID0gY2FsOwogIGRvY3VtZW50LmN1cnJlbnRfcGlja2VyX29uY2hhbmdlID0gb25jaGFuZ2U7CiAgdmFyIG1vbnRoID0gbnVsbDsKICB2YXIgeWVhciA9IG51bGw7CiAgaWYgKGRvY3VtZW50LnByZXZpb3VzX3llYXJfcGlja2VkICE9ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LnByZXZpb3VzX21vbnRoX3BpY2tlZCAhPSAndW5kZWZpbmVkJykgewogICAgbW9udGggPSBkb2N1bWVudC5wcmV2aW91c19tb250aF9waWNrZWQ7CiAgICB5ZWFyID0gZG9jdW1lbnQucHJldmlvdXNfeWVhcl9waWNrZWQ7CiAgfQogIGlmIChvbGRfZGF0ZSAhPSAndW5kZWZpbmVkJyAmJiBvbGRfZGF0ZSA+IDApIHsKICAgIHZhciBvbGRfZGF0ZV9vYmogPSBuZXcgRGF0ZSgpOwogICAgb2xkX2RhdGVfb2JqLnNldFRpbWUgKG9sZF9kYXRlKTsKICAgIG1vbnRoID0gb2xkX2RhdGVfb2JqLmdldE1vbnRoKCkgKyAxOwogICAgeWVhciA9IG9sZF9kYXRlX29iai5nZXRGdWxsWWVhcigpOwogIH0KICB2YXIgY2FsX2NhbF9lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhbCsnY2FsJyk7CiAgaWYoY2FsX2NhbF9lbC5wYXJlbnROb2RlICE9IGRvY3VtZW50LmJvZHkpIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2FsX2NhbF9lbCk7CiAgcGxhbnlvX3Nob3dfY2FsZW5kYXJfcGlja2VyIChtb250aCwgeWVhciwgY2FsKydjYWwnLCAncGxhbnlvX2NhbGVuZGFyX2RhdGVfY2hvc2VuJyk7CiAgY2FsX2NhbF9lbC5zdHlsZS5sZWZ0ID0gY29vcmRzLmxlZnQrJ3B4JzsKICBjYWxfY2FsX2VsLnN0eWxlLnRvcCA9IChjb29yZHMuYm90dG9tKzUpKydweCc7CiAgY2FsX2NhbF9lbC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwp9CgpmdW5jdGlvbiBqc19zZXRfZXZlbnQob2JqLGV2ZW50LGZ1bixidWJibGUpIHsKICByZXR1cm4gcGxhbnlvX3NldF9ldmVudChvYmosZXZlbnQsZnVuLGJ1YmJsZSk7Cn0KCmZ1bmN0aW9uIGpzX2R1bW15IChlKSB7CiAgcmV0dXJuIHBsYW55b19kdW1teSAoZSk7Cn0KCmZ1bmN0aW9uIGpzX2Nsb3NlX2NhbGVuZGFyICgpIHsKICByZXR1cm4gcGxhbnlvX2Nsb3NlX2NhbGVuZGFyICgpOwp9CgpmdW5jdGlvbiBqc19zaG93X2NhbGVuZGFyIChjYWwsb25jaGFuZ2UpIHsKICByZXR1cm4gcGxhbnlvX3Nob3dfY2FsZW5kYXIgKGNhbCxvbmNoYW5nZSk7Cn0KCmZ1bmN0aW9uIHNob3dfcHJvZHVjdF9pbWFnZXMgKHBhcmVudCwgaWQpIHsKICB2YXIgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKCdwcm9kdWN0X2JveF8nICsgaWQpOwogIGlmIChib3ggJiYgcGFyZW50KSB7CiAgICB2YXIgY29vcmRzID0gcGFyZW50LmdldENvb3JkaW5hdGVzID8gcGFyZW50LmdldENvb3JkaW5hdGVzICgpIDogcGxhbnlvX2dldF9pdGVtX2Nvb3JkaW5hdGVzIChwYXJlbnQpOyAgICAKICAgIGJveC5zdHlsZS50b3AgPSBjb29yZHMudG9wICsgJ3B4JzsKICAgIGJveC5zdHlsZS5sZWZ0ID0gKGNvb3Jkcy5sZWZ0ICsgMzApICsgJ3B4JzsKICAgIGJveC5zdHlsZS5kaXNwbGF5ID0gJyc7ICAgIAogIH0gIAp9CgpmdW5jdGlvbiBoaWRlX3Byb2R1Y3RfaW1hZ2VzIChpZCkgewogIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAoJ3Byb2R1Y3RfYm94XycgKyBpZCk7CiAgaWYgKGJveCkgewogICAgYm94LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgfQp9CgoKCgoKCgoKCgoKCgo=]]></data>
	</file>
</module>
