<?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>Minify</name>
	<version>0.9.1</version>
  <mincmsversion>1.11.5</mincmsversion>
	<help><![CDATA[CTxoMj5DTVNNUyBNaW5pZnkgTW9kdWxlIEhlbHA8L2gyPgogICAgPHA+VGhpcyBwcm9qZWN0IGVtYmVkcyA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5LyI+TWluaWZ5CiAgICAgICAgMi4xLjU8L2E+IGludG8gQ01TIE1hZGUgU2ltcGxlLiBGcm9tIHRoZSBNaW5pZnkgd2Vic2l0ZTo8L3A+CiAgICA8YmxvY2txdW90ZT4KICAgICAgPHA+TWluaWZ5IGlzIGEgUEhQNSBhcHAgdGhhdCBoZWxwcyB5b3UgZm9sbG93IHNldmVyYWwgb2YgWWFob28hJ3MgUnVsZXMKICAgICAgICBmb3IgSGlnaCBQZXJmb3JtYW5jZSBXZWIgU2l0ZXMuIEl0IGNvbWJpbmVzIG11bHRpcGxlIENTUyBvciBKYXZhc2NyaXB0CiAgICAgICAgZmlsZXMsIHJlbW92ZXMgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSBhbmQgY29tbWVudHMsIGFuZCBzZXJ2ZXMgdGhlbSB3aXRoCiAgICAgICAgZ3ppcCBlbmNvZGluZyBhbmQgb3B0aW1hbCBjbGllbnQtc2lkZSBjYWNoZSBoZWFkZXJzLjwvcD4KICAgIDwvYmxvY2txdW90ZT4KICAgIDxwPkZvciBleGFtcGxlLCB0aGUgamF2YXNjcmlwdHMgZm9yIHRoZSBBZG1pbiBpbnRlcmZhY2UgY291bGQgYmUgbWluaWZpZWQKICAgICAgaW50bzo8L3A+CiAgICA8cD48Y29kZT4mbHQ7c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIKc3JjPSIvbW9kdWxlcy9NaW5pZnkvbWluLz9iPWxpYi9qcXVlcnkvanMmYW1wO2FtcDtmPWpxdWVyeS0xLjcuMi5taW4uanMsanF1ZXJ5LXVpLTEuOC4yMS5jdXN0b20ubWluLmpzLGpxdWVyeS51aS5uZXN0ZWRTb3J0YWJsZS0xLjMuNC5qcyxqcXVlcnkuanNvbi0yLjMubWluLmpzIiZndDsmbHQ7L3NjcmlwdCZndDs8L2NvZGU+PC9wPgoJPGJyLz4KICAgIDxwPkN1cnJlbnRseSwgaXQgc2ltcGx5IGVtYmVkcyB0aGUgTWluaWZ5IHByb2plY3QgaW50byB0aGUgbW9kdWxlLCBhbmQKICAgICAgZXhwb3NlcyB0aGUgQnVpbGRlciB0byB0aGUgYWRtaW4gaW50ZXJmYWNlLiBUaGUgYnVpbGRlciBhbGxvd3MgeW91IHRvCiAgICAgIGVudGVyIHlvdXIgSmF2YXNjcmlwdCBmaWxlcyBpbiBhIGxpc3QsIGFuZCBvdXRwdXRzIGEgdGhlIDxjb2RlPiZsdDtzY3JpcHQuLi4uJmd0OzwvY29kZT4KICAgICAgdGFnIHRoYXQgeW91IHdvdWxkIGVtYmVkIHlvdXIgdGVtcGxhdGUuPC9wPgoJPGJyLz4KICAgIDxwPkZvciBzdXBwb3J0LCBwbGVhc2Ugc3VibWl0IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kcm1pa2Vjcm93ZS9jbXNtc19taW5pZnkvaXNzdWVzIj5hbgogICAgICAgIGlzc3VlPC9hPiBmb3IgYXNzaXN0YW5jZS48L3A+Cgk8YnIvPgogICAgPHA+Um9hZG1hcDo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT5Jbml0aWFsIFJlbGVhc2U8L2xpPgogICAgICA8bGk+SW1wbGVtZW50IERlYnVnIG1vZGUgZm9yIGRldmVsb3BtZW50PC9saT4KICAgICAgPGxpPk1haW50YWlucyB0aGUgbGlzdCBvZiBqYXZhc2NyaXB0cyAob3Igc3R5bGVzaGVldHMpLCBhbmQgYWxsb3cKICAgICAgICBlbWJlZGRpbmcgZGlmZmVyZW50IGxpc3RzLCBzdWNoIGFzIHtNaW5pZnkgcGFja2FnZT0ieHh4eCJ9PC9saT4KICAgICAgPGxpPkxvZyB0byBDTVNNUyBBZG1pbiBMb2c8L2xpPgogICAgPC91bD4KICAgIERvbmF0aW9ucyBhcmUgYXBwcmVjaWF0ZWQsIGFuZCB3b3VsZCBlbmNvdXJhZ2UgY29udGludWFsIGltcHJvdmVtZW50IG9mIHRoaXMKICAgIG1vZHVsZS48YnIgLz4KICAgIDxiciAvPgogICAgPGZvcm0gYWN0aW9uPSJodHRwczovL3d3dy5wYXlwYWwuY29tL2NnaS1iaW4vd2Vic2NyIiBtZXRob2Q9InBvc3QiIHRhcmdldD0iX3RvcCI+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNtZCIgdmFsdWU9Il9zLXhjbGljayIgLz4gPGlucHV0IHR5cGU9ImhpZGRlbiIKICAgICAgICBuYW1lPSJob3N0ZWRfYnV0dG9uX2lkIiB2YWx1ZT0iSzJMR05HWDY0VUc0OCIgLz4gPGlucHV0IHR5cGU9ImltYWdlIiBib3JkZXI9IjAiCiAgICAgICAgc3JjPSJodHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9lbl9VUy9pL2J0bi9idG5fZG9uYXRlQ0NfTEcuZ2lmIiBuYW1lPSJzdWJtaXQiCiAgICAgICAgYWx0PSJQYXlQYWwgLSBUaGUgc2FmZXIsIGVhc2llciB3YXkgdG8gcGF5IG9ubGluZSEiIC8+IDxpbWcgd2lkdGg9IjEiIGhlaWdodD0iMSIKICAgICAgICBib3JkZXI9IjAiIGFsdD0iIiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL2VuX1VTL2kvc2NyL3BpeGVsLmdpZiIgLz4KICAgIDwvZm9ybT48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBNaWtlIENyb3dlICZsdDtkcm1pa2Vjcm93ZUBnbWFpbC5jb20mZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMC45LjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CjxsaT5WZXJzaW9uIDAsOSAtIDE2IEp1bmUgMjAxMy4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjwvdWw+PGJyIC8+]]></about>
	<description><![CDATA[Control minification of Javascript and external CSS stylesheets]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovKiAtPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQoKICAgQ29kZSBmb3IgTWluaWZ5ICJkZWZhdWx0IiBhY3Rpb24KCiAgIC09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCiAgIAogICBUeXBpY2FsbHksIHRoaXMgd2lsbCBkaXNwbGF5IHNvbWV0aGluZyBmcm9tIGEgdGVtcGxhdGUKICAgb3IgZG8gc29tZSBvdGhlciB0YXNrLgogICAKKi8KCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiAoISAkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkgewogIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CgokcmV0dXJuX3RhYj0iYnVpbGRlciI7CmlmIChpc3NldCgkcGFyYW1zWyJ0YWIiXSkpICRyZXR1cm5fdGFiPSRwYXJhbXNbInRhYiJdOwoKJHRhYnMgPSBhcnJheSgpOwoKLy8kdGFic1tdID0gJ3NldHRpbmdzJzsgCiR0YWJzW10gPSAnYnVpbGRlcic7CiR0YWJzW10gPSAnbWluaWZ5X2hlbHAnOwoKaWYgKCBhcnJheV9rZXlfZXhpc3RzKCJ0YWJfZXJyb3IiLCAkcGFyYW1zKSAmJiAkcGFyYW1zWyd0YWJfZXJyb3InXSkgewogIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHBhcmFtc1sndGFiX2Vycm9yJ10pOwp9CmlmICggYXJyYXlfa2V5X2V4aXN0cygidGFiX2luZm8iLCAkcGFyYW1zKSAmJiAkcGFyYW1zWyd0YWJfaW5mbyddKSB7CgkkdGhpcy0+U2hvd01lc3NhZ2UoJHBhcmFtc1sndGFiX2luZm8nXSk7Cn0KCmVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOwpmb3JlYWNoICggJHRhYnMgYXMgJHRhYiApCiAgICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJHRhYiwkdGhpcy0+TGFuZygidGl0bGVfJHRhYiIpLCgkdGFiPT0kcmV0dXJuX3RhYikpOwplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgovLyBUaGVjb250ZW50IG9mIHRoZSB0YWJzCmVjaG8gJHRoaXMtPlN0YXJ0VGFiQ29udGVudCgpOwoKZm9yZWFjaCAoICR0YWJzIGFzICR0YWIgKSB7CiAgICBlY2hvICR0aGlzLT5TdGFydFRhYigkdGFiLCRwYXJhbXMpOwogICAgaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS4iL2FjdGlvbi5kb197JHRhYn0ucGhwIik7CiAgICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKfQoKZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwo=]]></data>
	</file>
	<file>
	  <filename>/action.do_builder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKQoJZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKaWYgKHBocHZlcnNpb24oKSA8IDUpIHsKCWV4aXQoJ01pbmlmeSByZXF1aXJlcyBQSFA1IG9yIGdyZWF0ZXIuJyk7Cn0KCi8vIGNoZWNrIGZvciBhdXRvLWVuY29kaW5nCiRlbmNvZGVPdXRwdXQgPSAoZnVuY3Rpb25fZXhpc3RzKCdnemRlZmxhdGUnKSAmJiAhaW5pX2dldCgnemxpYi5vdXRwdXRfY29tcHJlc3Npb24nKSk7CgpyZXF1aXJlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9taW4vY29uZmlnLnBocCc7CgpyZXF1aXJlICIkbWluX2xpYlBhdGgvTWluaWZ5L0xvYWRlci5waHAiOwpNaW5pZnlfTG9hZGVyOjpyZWdpc3RlcigpOwoKaWYgKCEkbWluX2VuYWJsZUJ1aWxkZXIpIHsKCWhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJyk7CglkaWUoJ1RoaXMgYXBwbGljYXRpb24gaXMgbm90IGVuYWJsZWQuIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5L3dpa2kvQnVpbGRlckFwcCcpOwp9CgppZiAoaXNzZXQoJG1pbl9idWlsZGVyUGFzc3dvcmQpICYmIGlzX3N0cmluZygkbWluX2J1aWxkZXJQYXNzd29yZCkgJiYgJG1pbl9idWlsZGVyUGFzc3dvcmQgIT09ICcnKSB7CglEb29EaWdlc3RBdXRoOjpodHRwX2F1dGgoJ01pbmlmeSBCdWlsZGVyJywgYXJyYXkoJ2FkbWluJyA9PiAkbWluX2J1aWxkZXJQYXNzd29yZCkpOwp9CgokY2FjaGVQYXRoQ29kZSA9ICcnOwppZiAoIWlzc2V0KCRtaW5fY2FjaGVQYXRoKSAmJiAhZnVuY3Rpb25fZXhpc3RzKCdzeXNfZ2V0X3RlbXBfZGlyJykpIHsKCSRkZXRlY3RlZFRtcCA9IE1pbmlmeV9DYWNoZV9GaWxlOjp0bXAoKTsKCSRjYWNoZVBhdGhDb2RlID0gIlwkbWluX2NhY2hlUGF0aCA9ICIgLiB2YXJfZXhwb3J0KCRkZXRlY3RlZFRtcCwgMSkgLiAnOyc7Cn0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdidWlsZGVyLnRwbCcpOwoKLy8kY29udGVudCA9IG9iX2dldF9jbGVhbigpOwoKLy8gc2V0dXAgTWluaWZ5Ci8vTWluaWZ5OjpzZXRDYWNoZSggaXNzZXQoJG1pbl9jYWNoZVBhdGgpID8gJG1pbl9jYWNoZVBhdGggOiAnJyAsICRtaW5fY2FjaGVGaWxlTG9ja2luZyk7Ci8vTWluaWZ5OjokdXBsb2FkZXJIb3Vyc0JlaGluZCA9ICRtaW5fdXBsb2FkZXJIb3Vyc0JlaGluZDsKLy9NaW5pZnk6OnNlcnZlKCdQYWdlJywgYXJyYXkoCi8vCSdjb250ZW50JyA9PiAkY29udGVudAovLwksICdpZCcgPT4gX19GSUxFX18KLy8JLy8gcmVnZW5lcmF0ZSBjYWNoZSBpZiBhbnkgb2YgdGhlc2UgY2hhbmdlCi8vCSwgJ2xhc3RNb2RpZmllZFRpbWUnID0+IG1heCggZmlsZW10aW1lKF9fRklMRV9fKSAsIGZpbGVtdGltZShkaXJuYW1lKF9fRklMRV9fKSAuICcvLi4vY29uZmlnLnBocCcpICwgZmlsZW10aW1lKGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi9saWIvTWluaWZ5LnBocCcpKQovLwksICdtaW5pZnlBbGwnID0+IHRydWUKLy8JLCAnZW5jb2RlT3V0cHV0JyA9PiAkZW5jb2RlT3V0cHV0Ci8vKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/action.do_minify_help.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKQoJZXhpdDsKCmlmICghICR0aGlzLT5DaGVja0FjY2VzcygpKSB7CiAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CgplY2hvICR0aGlzLT5MYW5nKCdtaW5pZnlfaGVscCcpOw==]]></data>
	</file>
	<file>
	  <filename>/action.do_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKQoJZXhpdDsKCmlmICghICR0aGlzLT5DaGVja0FjY2VzcygpKSB7CiAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/bm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[amF2YXNjcmlwdDooZnVuY3Rpb24oKSB7CiAgICB2YXIgZCA9IGRvY3VtZW50CiAgICAgICAsdXJpcyA9IFtdCiAgICAgICAsaSA9IDAKICAgICAgICxvCiAgICAgICAsaG9tZSA9IChsb2NhdGlvbiArICcnKS5zcGxpdCgnLycpLnNwbGljZSgwLCAzKS5qb2luKCcvJykgKyAnLyc7CiAgICBmdW5jdGlvbiBhZGQodXJpKSB7CiAgICAgICAgcmV0dXJuICgwID09PSB1cmkuaW5kZXhPZihob21lKSkKICAgICAgICAgICAgJiYgKCEvW1w/Jl0vLnRlc3QodXJpKSkKICAgICAgICAgICAgJiYgdXJpcy5wdXNoKGVzY2FwZSh1cmkuc3Vic3RyKGhvbWUubGVuZ3RoKSkpOwogICAgfTsKICAgIGZ1bmN0aW9uIHNoZWV0KHNzKSB7CiAgICAgICAgLy8gd2UgbXVzdCBjaGVjayB0aGUgZG9tYWluIHdpdGggYWRkKCkgYmVmb3JlIGFjY2Vzc2luZyBzcy5jc3NSdWxlcwogICAgICAgIC8vIG90aGVyd2lzZSBhIHNlY3VyaXR5IGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bgogICAgICAgIGlmIChzcy5ocmVmICYmIGFkZChzcy5ocmVmKSAmJiBzcy5jc3NSdWxlcykgewogICAgICAgICAgICB2YXIgaSA9IDAsIHI7CiAgICAgICAgICAgIHdoaWxlIChyID0gc3MuY3NzUnVsZXNbaSsrXSkKICAgICAgICAgICAgICAgIHIuc3R5bGVTaGVldCAmJiBzaGVldChyLnN0eWxlU2hlZXQpOwogICAgICAgIH0KICAgIH07CiAgICB3aGlsZSAobyA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpW2krK10pCiAgICAgICAgby5zcmMgJiYgIShvLnR5cGUgJiYgL3Zicy9pLnRlc3Qoby50eXBlKSkgJiYgYWRkKG8uc3JjKTsKICAgIGkgPSAwOwogICAgd2hpbGUgKG8gPSBkLnN0eWxlU2hlZXRzW2krK10pCiAgICAvKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9zdHlsZXNoZWV0cy5odG1sI1N0eWxlU2hlZXRzLURvY3VtZW50U3R5bGUtc3R5bGVTaGVldHMKICAgIGRvY3VtZW50LnN0eWxlU2hlZXQgaXMgYSBsaXN0IHByb3BlcnR5IHdoZXJlIFswXSBhY2Nlc3NlcyB0aGUgMXN0IGVsZW1lbnQgYW5kIAogICAgW291dE9mUmFuZ2VdIHJldHVybnMgbnVsbC4gSW4gSUUsIHN0eWxlU2hlZXRzIGlzIGEgZnVuY3Rpb24sIGFuZCBhbHNvIHRocm93cyBhbiAKICAgIGV4Y2VwdGlvbiB3aGVuIHlvdSBjaGVjayB0aGUgb3V0IG9mIGJvdW5kcyBpbmRleC4gKHNpZ2gpICovCiAgICAgICAgc2hlZXQobyk7CiAgICBpZiAodXJpcy5sZW5ndGgpCiAgICAgICAgd2luZG93Lm9wZW4oJyVCVUlMREVSX1VSTCUjJyArIHVyaXMuam9pbignLCcpKTsKICAgIGVsc2UKICAgICAgICBhbGVydCgnTm8ganMvY3NzIGZpbGVzIGZvdW5kIHdpdGggVVJMcyB3aXRoaW4gIicgCiAgICAgICAgICAgICsgaG9tZS5zcGxpdCgnLycpWzJdCiAgICAgICAgICAgICsgJyIuXG4oVGhpcyB0b29sIGlzIGxpbWl0ZWQgdG8gVVJMcyB3aXRoIHRoZSBzYW1lIGRvbWFpbi4pJyk7Cn0pKCk7]]></data>
	</file>
	<file>
	  <filename>/bm2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[amF2YXNjcmlwdDooZnVuY3Rpb24oKXsKICAgIHZhciBkID0gZG9jdW1lbnQKICAgICAgICxjID0gZC5jb29raWUKICAgICAgICxtID0gYy5tYXRjaCgvXGJtaW5pZnlEZWJ1Zz0oW147IF0rKS8pCiAgICAgICAsdiA9IG0gPyBkZWNvZGVVUklDb21wb25lbnQobVsxXSkgOiAnJwogICAgICAgLHAgPSBwcm9tcHQoJ0RlYnVnIE1pbmlmeSBVUklzIG9uICcgKyBsb2NhdGlvbi5ob3N0bmFtZSArICcgd2hpY2ggY29udGFpbjonCiAgICAgICAgICAgICAgICAgKyAnXG4oZW1wdHkgZm9yIG5vbmUsIHNwYWNlID0gT1IsICogPSBhbnkgc3RyaW5nLCA/ID0gYW55IGNoYXIpJywgdikKICAgIDsKICAgIGlmIChwID09PSBudWxsKSByZXR1cm47CiAgICBwID0gcC5yZXBsYWNlKC9eXHMrfFxzKyQvLCAnJyk7CiAgICB2ID0gKHAgPT09ICcnKQogICAgICAgID8gJ21pbmlmeURlYnVnPTsgZXhwaXJlcz1GcmksIDI3IEp1bCAyMDAxIDAyOjQ3OjExIFVUQzsgcGF0aD0vJwogICAgICAgIDogJ21pbmlmeURlYnVnPScgKyBlbmNvZGVVUklDb21wb25lbnQocCkgKyAnOyBwYXRoPS8nOwogICAgZC5jb29raWUgPSB2Owp9KSgpOw==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/jquery-1.6.3.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSB2MS42LjMgaHR0cDovL2pxdWVyeS5jb20vIHwgaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZSAqLw0KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY3UoYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjcihhKXtpZighY2dbYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NofHwoY2g9Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjaC5mcmFtZUJvcmRlcj1jaC53aWR0aD1jaC5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjaCk7aWYoIWNpfHwhY2guY3JlYXRlRWxlbWVudCljaT0oY2guY29udGVudFdpbmRvd3x8Y2guY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjaS53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY2kuY2xvc2UoKTtkPWNpLmNyZWF0ZUVsZW1lbnQoYSksY2kuYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNoKX1jZ1thXT1lfXJldHVybiBjZ1thXX1mdW5jdGlvbiBjcShhLGIpe3ZhciBjPXt9O2YuZWFjaChjbS5jb25jYXQuYXBwbHkoW10sY20uc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjcCgpe2NuPWJ9ZnVuY3Rpb24gY28oKXtzZXRUaW1lb3V0KGNwLDApO3JldHVybiBjbj1mLm5vdygpfWZ1bmN0aW9uIGNmKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2UoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gYiQoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGJaKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gYlkoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkEudGVzdChhKT9kKGEsZSk6YlkoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpYlkoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGJYKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gYlcoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJQLGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9YlcoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9YlcoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJWKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYkwpLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBieShhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J0OmJ1O2lmKGQ+MCl7YyE9PSJib3JkZXIiJiZmLmVhY2goZSxmdW5jdGlvbigpe2N8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2QrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK3RoaXMpKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDB9KTtyZXR1cm4gZCsicHgifWQ9YnYoYSxiLGIpO2lmKGQ8MHx8ZD09bnVsbClkPWEuc3R5bGVbYl18fDA7ZD1wYXJzZUZsb2F0KGQpfHwwLGMmJmYuZWFjaChlLGZ1bmN0aW9uKCl7ZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIit0aGlzKSl8fDAsYyE9PSJwYWRkaW5nIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrdGhpcykpfHwwKX0pO3JldHVybiBkKyJweCJ9ZnVuY3Rpb24gYmwoYSxiKXtiLnNyYz9mLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYmQsIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBiayhhKXtmLm5vZGVOYW1lKGEsImlucHV0Iik/YmooYSk6ImdldEVsZW1lbnRzQnlUYWdOYW1lImluIGEmJmYuZ3JlcChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJqKX1mdW5jdGlvbiBiaihhKXtpZihhLnR5cGU9PT0iY2hlY2tib3gifHxhLnR5cGU9PT0icmFkaW8iKWEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkfWZ1bmN0aW9uIGJpKGEpe3JldHVybiJnZXRFbGVtZW50c0J5VGFnTmFtZSJpbiBhP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKToicXVlcnlTZWxlY3RvckFsbCJpbiBhP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9uIGJoKGEsYil7dmFyIGM7aWYoYi5ub2RlVHlwZT09PTEpe2IuY2xlYXJBdHRyaWJ1dGVzJiZiLmNsZWFyQXR0cmlidXRlcygpLGIubWVyZ2VBdHRyaWJ1dGVzJiZiLm1lcmdlQXR0cmlidXRlcyhhKSxjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihjPT09Im9iamVjdCIpYi5vdXRlckhUTUw9YS5vdXRlckhUTUw7ZWxzZSBpZihjIT09ImlucHV0Inx8YS50eXBlIT09ImNoZWNrYm94IiYmYS50eXBlIT09InJhZGlvIil7aWYoYz09PSJvcHRpb24iKWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ7ZWxzZSBpZihjPT09ImlucHV0Inx8Yz09PSJ0ZXh0YXJlYSIpYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWV9ZWxzZSBhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKTtiLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pfX1mdW5jdGlvbiBiZyhhLGIpe2lmKGIubm9kZVR5cGU9PT0xJiYhIWYuaGFzRGF0YShhKSl7dmFyIGM9Zi5leHBhbmRvLGQ9Zi5kYXRhKGEpLGU9Zi5kYXRhKGIsZCk7aWYoZD1kW2NdKXt2YXIgZz1kLmV2ZW50cztlPWVbY109Zi5leHRlbmQoe30sZCk7aWYoZyl7ZGVsZXRlIGUuaGFuZGxlLGUuZXZlbnRzPXt9O2Zvcih2YXIgaCBpbiBnKWZvcih2YXIgaT0wLGo9Z1toXS5sZW5ndGg7aTxqO2krKylmLmV2ZW50LmFkZChiLGgrKGdbaF1baV0ubmFtZXNwYWNlPyIuIjoiIikrZ1toXVtpXS5uYW1lc3BhY2UsZ1toXVtpXSxnW2hdW2ldLmRhdGEpfX19fWZ1bmN0aW9uIGJmKGEsYil7cmV0dXJuIGYubm9kZU5hbWUoYSwidGFibGUiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTphfWZ1bmN0aW9uIFYoYSxiLGMpe2I9Ynx8MDtpZihmLmlzRnVuY3Rpb24oYikpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7dmFyIGU9ISFiLmNhbGwoYSxkLGEpO3JldHVybiBlPT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE9PT1iPT09Y30pO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7dmFyIGQ9Zi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZVR5cGU9PT0xfSk7aWYoUS50ZXN0KGIpKXJldHVybiBmLmZpbHRlcihiLGQsIWMpO2I9Zi5maWx0ZXIoYixkKX1yZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gZi5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gVShhKXtyZXR1cm4hYXx8IWEucGFyZW50Tm9kZXx8YS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTF9ZnVuY3Rpb24gTShhLGIpe3JldHVybihhJiZhIT09IioiP2ErIi4iOiIiKStiLnJlcGxhY2UoeSwiYCIpLnJlcGxhY2UoeiwiJiIpfWZ1bmN0aW9uIEwoYSl7dmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scD1bXSxxPVtdLHI9Zi5fZGF0YSh0aGlzLCJldmVudHMiKTtpZighKGEubGl2ZUZpcmVkPT09dGhpc3x8IXJ8fCFyLmxpdmV8fGEudGFyZ2V0LmRpc2FibGVkfHxhLmJ1dHRvbiYmYS50eXBlPT09ImNsaWNrIikpe2EubmFtZXNwYWNlJiYobj1uZXcgUmVnRXhwKCIoXnxcXC4pIithLm5hbWVzcGFjZS5zcGxpdCgiLiIpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpKSxhLmxpdmVGaXJlZD10aGlzO3ZhciBzPXIubGl2ZS5zbGljZSgwKTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKWc9c1tpXSxnLm9yaWdUeXBlLnJlcGxhY2UodywiIik9PT1hLnR5cGU/cS5wdXNoKGcuc2VsZWN0b3IpOnMuc3BsaWNlKGktLSwxKTtlPWYoYS50YXJnZXQpLmNsb3Nlc3QocSxhLmN1cnJlbnRUYXJnZXQpO2ZvcihqPTAsaz1lLmxlbmd0aDtqPGs7aisrKXttPWVbal07Zm9yKGk9MDtpPHMubGVuZ3RoO2krKyl7Zz1zW2ldO2lmKG0uc2VsZWN0b3I9PT1nLnNlbGVjdG9yJiYoIW58fG4udGVzdChnLm5hbWVzcGFjZSkpJiYhbS5lbGVtLmRpc2FibGVkKXtoPW0uZWxlbSxkPW51bGw7aWYoZy5wcmVUeXBlPT09Im1vdXNlZW50ZXIifHxnLnByZVR5cGU9PT0ibW91c2VsZWF2ZSIpYS50eXBlPWcucHJlVHlwZSxkPWYoYS5yZWxhdGVkVGFyZ2V0KS5jbG9zZXN0KGcuc2VsZWN0b3IpWzBdLGQmJmYuY29udGFpbnMoaCxkKSYmKGQ9aCk7KCFkfHxkIT09aCkmJnAucHVzaCh7ZWxlbTpoLGhhbmRsZU9iajpnLGxldmVsOm0ubGV2ZWx9KX19fWZvcihqPTAsaz1wLmxlbmd0aDtqPGs7aisrKXtlPXBbal07aWYoYyYmZS5sZXZlbD5jKWJyZWFrO2EuY3VycmVudFRhcmdldD1lLmVsZW0sYS5kYXRhPWUuaGFuZGxlT2JqLmRhdGEsYS5oYW5kbGVPYmo9ZS5oYW5kbGVPYmosbz1lLmhhbmRsZU9iai5vcmlnSGFuZGxlci5hcHBseShlLmVsZW0sYXJndW1lbnRzKTtpZihvPT09ITF8fGEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7Yz1lLmxldmVsLG89PT0hMSYmKGI9ITEpO2lmKGEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVha319cmV0dXJuIGJ9fWZ1bmN0aW9uIEooYSxjLGQpe3ZhciBlPWYuZXh0ZW5kKHt9LGRbMF0pO2UudHlwZT1hLGUub3JpZ2luYWxFdmVudD17fSxlLmxpdmVGaXJlZD1iLGYuZXZlbnQuaGFuZGxlLmNhbGwoYyxlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZkWzBdLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gRCgpe3JldHVybiEwfWZ1bmN0aW9uIEMoKXtyZXR1cm4hMX1mdW5jdGlvbiBtKGEsYyxkKXt2YXIgZT1jKyJkZWZlciIsZz1jKyJxdWV1ZSIsaD1jKyJtYXJrIixpPWYuZGF0YShhLGUsYiwhMCk7aSYmKGQ9PT0icXVldWUifHwhZi5kYXRhKGEsZyxiLCEwKSkmJihkPT09Im1hcmsifHwhZi5kYXRhKGEsaCxiLCEwKSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXshZi5kYXRhKGEsZyxiLCEwKSYmIWYuZGF0YShhLGgsYiwhMCkmJihmLnJlbW92ZURhdGEoYSxlLCEwKSxpLnJlc29sdmUoKSl9LDApfWZ1bmN0aW9uIGwoYSl7Zm9yKHZhciBiIGluIGEpaWYoYiE9PSJ0b0pTT04iKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGsoYSxjLGQpe2lmKGQ9PT1iJiZhLm5vZGVUeXBlPT09MSl7dmFyIGU9ImRhdGEtIitjLnJlcGxhY2UoaiwiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO2Q9YS5nZXRBdHRyaWJ1dGUoZSk7aWYodHlwZW9mIGQ9PSJzdHJpbmciKXt0cnl7ZD1kPT09InRydWUiPyEwOmQ9PT0iZmFsc2UiPyExOmQ9PT0ibnVsbCI/bnVsbDpmLmlzTmFOKGQpP2kudGVzdChkKT9mLnBhcnNlSlNPTihkKTpkOnBhcnNlRmxvYXQoZCl9Y2F0Y2goZyl7fWYuZGF0YShhLGMsZCl9ZWxzZSBkPWJ9cmV0dXJuIGR9dmFyIGM9YS5kb2N1bWVudCxkPWEubmF2aWdhdG9yLGU9YS5sb2NhdGlvbixmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSygpe2lmKCFlLmlzUmVhZHkpe3RyeXtjLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3NldFRpbWVvdXQoSywxKTtyZXR1cm59ZS5yZWFkeSgpfX12YXIgZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZS5mbi5pbml0KGEsYixoKX0sZj1hLmpRdWVyeSxnPWEuJCxoLGk9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLGo9L1xTLyxrPS9eXHMrLyxsPS9ccyskLyxtPS9cZC8sbj0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLG89L15bXF0sOnt9XHNdKiQvLHA9L1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZyxxPS8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZyxyPS8oPzpefDp8LCkoPzpccypcWykrL2cscz0vKHdlYmtpdClbIFwvXShbXHcuXSspLyx0PS8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSspLyx1PS8obXNpZSkgKFtcdy5dKykvLHY9Lyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKSk/Lyx3PS8tKFthLXpdfFswLTldKS9pZyx4PS9eLW1zLS8seT1mdW5jdGlvbihhLGIpe3JldHVybihiKyIiKS50b1VwcGVyQ2FzZSgpfSx6PWQudXNlckFnZW50LEEsQixDLEQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxFPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksRj1BcnJheS5wcm90b3R5cGUucHVzaCxHPUFycmF5LnByb3RvdHlwZS5zbGljZSxIPVN0cmluZy5wcm90b3R5cGUudHJpbSxJPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLEo9e307ZS5mbj1lLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxpbml0OmZ1bmN0aW9uKGEsZCxmKXt2YXIgZyxoLGosaztpZighYSlyZXR1cm4gdGhpcztpZihhLm5vZGVUeXBlKXt0aGlzLmNvbnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYoYT09PSJib2R5IiYmIWQmJmMuYm9keSl7dGhpcy5jb250ZXh0PWMsdGhpc1swXT1jLmJvZHksdGhpcy5zZWxlY3Rvcj1hLHRoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYodHlwZW9mIGE9PSJzdHJpbmciKXthLmNoYXJBdCgwKSE9PSI8Inx8YS5jaGFyQXQoYS5sZW5ndGgtMSkhPT0iPiJ8fGEubGVuZ3RoPDM/Zz1pLmV4ZWMoYSk6Zz1bbnVsbCxhLG51bGxdO2lmKGcmJihnWzFdfHwhZCkpe2lmKGdbMV0pe2Q9ZCBpbnN0YW5jZW9mIGU/ZFswXTpkLGs9ZD9kLm93bmVyRG9jdW1lbnR8fGQ6YyxqPW4uZXhlYyhhKSxqP2UuaXNQbGFpbk9iamVjdChkKT8oYT1bYy5jcmVhdGVFbGVtZW50KGpbMV0pXSxlLmZuLmF0dHIuY2FsbChhLGQsITApKTphPVtrLmNyZWF0ZUVsZW1lbnQoalsxXSldOihqPWUuYnVpbGRGcmFnbWVudChbZ1sxXV0sW2tdKSxhPShqLmNhY2hlYWJsZT9lLmNsb25lKGouZnJhZ21lbnQpOmouZnJhZ21lbnQpLmNoaWxkTm9kZXMpO3JldHVybiBlLm1lcmdlKHRoaXMsYSl9aD1jLmdldEVsZW1lbnRCeUlkKGdbMl0pO2lmKGgmJmgucGFyZW50Tm9kZSl7aWYoaC5pZCE9PWdbMl0pcmV0dXJuIGYuZmluZChhKTt0aGlzLmxlbmd0aD0xLHRoaXNbMF09aH10aGlzLmNvbnRleHQ9Yyx0aGlzLnNlbGVjdG9yPWE7cmV0dXJuIHRoaXN9cmV0dXJuIWR8fGQuanF1ZXJ5PyhkfHxmKS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoZCkuZmluZChhKX1pZihlLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGYucmVhZHkoYSk7YS5zZWxlY3RvciE9PWImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCk7cmV0dXJuIGUubWFrZUFycmF5KGEsdGhpcyl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS42LjMiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gRy5jYWxsKHRoaXMsMCl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD90aGlzLnRvQXJyYXkoKTphPDA/dGhpc1t0aGlzLmxlbmd0aCthXTp0aGlzW2FdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuY29uc3RydWN0b3IoKTtlLmlzQXJyYXkoYSk/Ri5hcHBseShkLGEpOmUubWVyZ2UoZCxhKSxkLnByZXZPYmplY3Q9dGhpcyxkLmNvbnRleHQ9dGhpcy5jb250ZXh0LGI9PT0iZmluZCI/ZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9yPyIgIjoiIikrYzpiJiYoZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyIuIitiKyIoIitjKyIpIik7cmV0dXJuIGR9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZS5lYWNoKHRoaXMsYSxiKX0scmVhZHk6ZnVuY3Rpb24oYSl7ZS5iaW5kUmVhZHkoKSxCLmRvbmUoYSk7cmV0dXJuIHRoaXN9LGVxOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsK2ErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEcuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsRy5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhlLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6Rixzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0sZS5mbi5pbml0LnByb3RvdHlwZT1lLmZuLGUuZXh0ZW5kPWUuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGYsZyxoLGk9YXJndW1lbnRzWzBdfHx7fSxqPTEsaz1hcmd1bWVudHMubGVuZ3RoLGw9ITE7dHlwZW9mIGk9PSJib29sZWFuIiYmKGw9aSxpPWFyZ3VtZW50c1sxXXx8e30saj0yKSx0eXBlb2YgaSE9Im9iamVjdCImJiFlLmlzRnVuY3Rpb24oaSkmJihpPXt9KSxrPT09aiYmKGk9dGhpcywtLWopO2Zvcig7ajxrO2orKylpZigoYT1hcmd1bWVudHNbal0pIT1udWxsKWZvcihjIGluIGEpe2Q9aVtjXSxmPWFbY107aWYoaT09PWYpY29udGludWU7bCYmZiYmKGUuaXNQbGFpbk9iamVjdChmKXx8KGc9ZS5pc0FycmF5KGYpKSk/KGc/KGc9ITEsaD1kJiZlLmlzQXJyYXkoZCk/ZDpbXSk6aD1kJiZlLmlzUGxhaW5PYmplY3QoZCk/ZDp7fSxpW2NdPWUuZXh0ZW5kKGwsaCxmKSk6ZiE9PWImJihpW2NdPWYpfXJldHVybiBpfSxlLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbihiKXthLiQ9PT1lJiYoYS4kPWcpLGImJmEualF1ZXJ5PT09ZSYmKGEualF1ZXJ5PWYpO3JldHVybiBlfSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP2UucmVhZHlXYWl0Kys6ZS5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMCYmIS0tZS5yZWFkeVdhaXR8fGEhPT0hMCYmIWUuaXNSZWFkeSl7aWYoIWMuYm9keSlyZXR1cm4gc2V0VGltZW91dChlLnJlYWR5LDEpO2UuaXNSZWFkeT0hMDtpZihhIT09ITAmJi0tZS5yZWFkeVdhaXQ+MClyZXR1cm47Qi5yZXNvbHZlV2l0aChjLFtlXSksZS5mbi50cmlnZ2VyJiZlKGMpLnRyaWdnZXIoInJlYWR5IikudW5iaW5kKCJyZWFkeSIpfX0sYmluZFJlYWR5OmZ1bmN0aW9uKCl7aWYoIUIpe0I9ZS5fRGVmZXJyZWQoKTtpZihjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7aWYoYy5hZGRFdmVudExpc3RlbmVyKWMuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQywhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLnJlYWR5LCExKTtlbHNlIGlmKGMuYXR0YWNoRXZlbnQpe2MuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQyksYS5hdHRhY2hFdmVudCgib25sb2FkIixlLnJlYWR5KTt2YXIgYj0hMTt0cnl7Yj1hLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChkKXt9Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmImJksoKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIGE9PSJvYmplY3QiJiYic2V0SW50ZXJ2YWwiaW4gYX0saXNOYU46ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGx8fCFtLnRlc3QoYSl8fGlzTmFOKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpKW0QuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxlLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIUUuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhRS5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxFLmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgYX0scGFyc2VKU09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1lLnRyaW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtpZihvLnRlc3QoYi5yZXBsYWNlKHAsIkAiKS5yZXBsYWNlKHEsIl0iKS5yZXBsYWNlKHIsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LHBhcnNlWE1MOmZ1bmN0aW9uKGMpe3ZhciBkLGY7dHJ5e2EuRE9NUGFyc2VyPyhmPW5ldyBET01QYXJzZXIsZD1mLnBhcnNlRnJvbVN0cmluZyhjLCJ0ZXh0L3htbCIpKTooZD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGQuYXN5bmM9ImZhbHNlIixkLmxvYWRYTUwoYykpfWNhdGNoKGcpe2Q9Yn0oIWR8fCFkLmRvY3VtZW50RWxlbWVudHx8ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZlLmVycm9yKCJJbnZhbGlkIFhNTDogIitjKTtyZXR1cm4gZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZqLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoeCwibXMtIikucmVwbGFjZSh3LHkpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT1iLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGc9MCxoPWEubGVuZ3RoLGk9aD09PWJ8fGUuaXNGdW5jdGlvbihhKTtpZihkKXtpZihpKXtmb3IoZiBpbiBhKWlmKGMuYXBwbHkoYVtmXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuYXBwbHkoYVtnKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihpKXtmb3IoZiBpbiBhKWlmKGMuY2FsbChhW2ZdLGYsYVtmXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmNhbGwoYVtnXSxnLGFbZysrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpIP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOkguY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UoaywiIikucmVwbGFjZShsLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107aWYoYSE9bnVsbCl7dmFyIGQ9ZS50eXBlKGEpO2EubGVuZ3RoPT1udWxsfHxkPT09InN0cmluZyJ8fGQ9PT0iZnVuY3Rpb24ifHxkPT09InJlZ2V4cCJ8fGUuaXNXaW5kb3coYSk/Ri5jYWxsKGMsYSk6ZS5tZXJnZShjLGEpfXJldHVybiBjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYil7aWYoIWIpcmV0dXJuLTE7aWYoSSlyZXR1cm4gSS5jYWxsKGIsYSk7Zm9yKHZhciBjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKWlmKGJbY109PT1hKXJldHVybiBjO3JldHVybi0xfSxtZXJnZTpmdW5jdGlvbihhLGMpe3ZhciBkPWEubGVuZ3RoLGU9MDtpZih0eXBlb2YgYy5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1jW2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1kO3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFjO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMhPT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoPVtdLGk9MCxqPWEubGVuZ3RoLGs9YSBpbnN0YW5jZW9mIGV8fGohPT1iJiZ0eXBlb2Ygaj09Im51bWJlciImJihqPjAmJmFbMF0mJmFbai0xXXx8aj09PTB8fGUuaXNBcnJheShhKSk7aWYoaylmb3IoO2k8ajtpKyspZj1jKGFbaV0saSxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7ZWxzZSBmb3IoZyBpbiBhKWY9YyhhW2ddLGcsZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO3JldHVybiBoLmNvbmNhdC5hcHBseShbXSxoKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXt2YXIgZD1hW2NdO2M9YSxhPWR9aWYoIWUuaXNGdW5jdGlvbihhKSlyZXR1cm4gYjt2YXIgZj1HLmNhbGwoYXJndW1lbnRzLDIpLGc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShjLGYuY29uY2F0KEcuY2FsbChhcmd1bWVudHMpKSl9O2cuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxnLmd1aWR8fGUuZ3VpZCsrO3JldHVybiBnfSxhY2Nlc3M6ZnVuY3Rpb24oYSxjLGQsZixnLGgpe3ZhciBpPWEubGVuZ3RoO2lmKHR5cGVvZiBjPT0ib2JqZWN0Iil7Zm9yKHZhciBqIGluIGMpZS5hY2Nlc3MoYSxqLGNbal0sZixnLGQpO3JldHVybiBhfWlmKGQhPT1iKXtmPSFoJiZmJiZlLmlzRnVuY3Rpb24oZCk7Zm9yKHZhciBrPTA7azxpO2srKylnKGFba10sYyxmP2QuY2FsbChhW2tdLGssZyhhW2tdLGMpKTpkLGgpO3JldHVybiBhfXJldHVybiBpP2coYVswXSxjKTpifSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTt2YXIgYj1zLmV4ZWMoYSl8fHQuZXhlYyhhKXx8dS5leGVjKGEpfHxhLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ2LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZS5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWI9dGhpcy5zdWIsYS5mbi5pbml0PWZ1bmN0aW9uKGQsZil7ZiYmZiBpbnN0YW5jZW9mIGUmJiEoZiBpbnN0YW5jZW9mIGEpJiYoZj1hKGYpKTtyZXR1cm4gZS5mbi5pbml0LmNhbGwodGhpcyxkLGYsYil9LGEuZm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgYj1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSksZS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7SlsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KSxBPWUudWFNYXRjaCh6KSxBLmJyb3dzZXImJihlLmJyb3dzZXJbQS5icm93c2VyXT0hMCxlLmJyb3dzZXIudmVyc2lvbj1BLnZlcnNpb24pLGUuYnJvd3Nlci53ZWJraXQmJihlLmJyb3dzZXIuc2FmYXJpPSEwKSxqLnRlc3QoIiAiKSYmKGs9L15bXHNceEEwXSsvLGw9L1tcc1x4QTBdKyQvKSxoPWUoYyksYy5hZGRFdmVudExpc3RlbmVyP0M9ZnVuY3Rpb24oKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEMsITEpLGUucmVhZHkoKX06Yy5hdHRhY2hFdmVudCYmKEM9ZnVuY3Rpb24oKXtjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiJiYoYy5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixDKSxlLnJlYWR5KCkpfSk7cmV0dXJuIGV9KCksZz0iZG9uZSBmYWlsIGlzUmVzb2x2ZWQgaXNSZWplY3RlZCBwcm9taXNlIHRoZW4gYWx3YXlzIHBpcGUiLnNwbGl0KCIgIiksaD1bXS5zbGljZTtmLmV4dGVuZCh7X0RlZmVycmVkOmZ1bmN0aW9uKCl7dmFyIGE9W10sYixjLGQsZT17ZG9uZTpmdW5jdGlvbigpe2lmKCFkKXt2YXIgYz1hcmd1bWVudHMsZyxoLGksaixrO2ImJihrPWIsYj0wKTtmb3IoZz0wLGg9Yy5sZW5ndGg7ZzxoO2crKylpPWNbZ10saj1mLnR5cGUoaSksaj09PSJhcnJheSI/ZS5kb25lLmFwcGx5KGUsaSk6aj09PSJmdW5jdGlvbiImJmEucHVzaChpKTtrJiZlLnJlc29sdmVXaXRoKGtbMF0sa1sxXSl9cmV0dXJuIHRoaXN9LHJlc29sdmVXaXRoOmZ1bmN0aW9uKGUsZil7aWYoIWQmJiFiJiYhYyl7Zj1mfHxbXSxjPTE7dHJ5e3doaWxlKGFbMF0pYS5zaGlmdCgpLmFwcGx5KGUsZil9ZmluYWxseXtiPVtlLGZdLGM9MH19cmV0dXJuIHRoaXN9LHJlc29sdmU6ZnVuY3Rpb24oKXtlLnJlc29sdmVXaXRoKHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30saXNSZXNvbHZlZDpmdW5jdGlvbigpe3JldHVybiEhY3x8ISFifSxjYW5jZWw6ZnVuY3Rpb24oKXtkPTEsYT1bXTtyZXR1cm4gdGhpc319O3JldHVybiBlfSxEZWZlcnJlZDpmdW5jdGlvbihhKXt2YXIgYj1mLl9EZWZlcnJlZCgpLGM9Zi5fRGVmZXJyZWQoKSxkO2YuZXh0ZW5kKGIse3RoZW46ZnVuY3Rpb24oYSxjKXtiLmRvbmUoYSkuZmFpbChjKTtyZXR1cm4gdGhpc30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGIuZG9uZS5hcHBseShiLGFyZ3VtZW50cykuZmFpbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGZhaWw6Yy5kb25lLHJlamVjdFdpdGg6Yy5yZXNvbHZlV2l0aCxyZWplY3Q6Yy5yZXNvbHZlLGlzUmVqZWN0ZWQ6Yy5pc1Jlc29sdmVkLHBpcGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZi5EZWZlcnJlZChmdW5jdGlvbihkKXtmLmVhY2goe2RvbmU6W2EsInJlc29sdmUiXSxmYWlsOltjLCJyZWplY3QiXX0sZnVuY3Rpb24oYSxjKXt2YXIgZT1jWzBdLGc9Y1sxXSxoO2YuaXNGdW5jdGlvbihlKT9iW2FdKGZ1bmN0aW9uKCl7aD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoJiZmLmlzRnVuY3Rpb24oaC5wcm9taXNlKT9oLnByb21pc2UoKS50aGVuKGQucmVzb2x2ZSxkLnJlamVjdCk6ZFtnKyJXaXRoIl0odGhpcz09PWI/ZDp0aGlzLFtoXSl9KTpiW2FdKGRbZ10pfSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oYSl7aWYoYT09bnVsbCl7aWYoZClyZXR1cm4gZDtkPWE9e319dmFyIGM9Zy5sZW5ndGg7d2hpbGUoYy0tKWFbZ1tjXV09YltnW2NdXTtyZXR1cm4gYX19KSxiLmRvbmUoYy5jYW5jZWwpLmZhaWwoYi5jYW5jZWwpLGRlbGV0ZSBiLmNhbmNlbCxhJiZhLmNhbGwoYixiKTtyZXR1cm4gYn0sd2hlbjpmdW5jdGlvbihhKXtmdW5jdGlvbiBpKGEpe3JldHVybiBmdW5jdGlvbihjKXtiW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9oLmNhbGwoYXJndW1lbnRzLDApOmMsLS1lfHxnLnJlc29sdmVXaXRoKGcsaC5jYWxsKGIsMCkpfX12YXIgYj1hcmd1bWVudHMsYz0wLGQ9Yi5sZW5ndGgsZT1kLGc9ZDw9MSYmYSYmZi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YTpmLkRlZmVycmVkKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmZi5pc0Z1bmN0aW9uKGJbY10ucHJvbWlzZSk/YltjXS5wcm9taXNlKCkudGhlbihpKGMpLGcucmVqZWN0KTotLWU7ZXx8Zy5yZXNvbHZlV2l0aChnLGIpfWVsc2UgZyE9PWEmJmcucmVzb2x2ZVdpdGgoZyxkP1thXTpbXSk7cmV0dXJuIGcucHJvbWlzZSgpfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1jLmRvY3VtZW50RWxlbWVudCxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7YS5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxhLmlubmVySFRNTD0iICAgPGxpbms+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSd0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPWNoZWNrYm94PiIsZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIWR8fCFkLmxlbmd0aHx8IWUpcmV0dXJue307Zz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0saz17bGVhZGluZ1doaXRlc3BhY2U6YS5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChlLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUkLy50ZXN0KGUuc3R5bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFlLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246aS52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6aC5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6YS5jbGFzc05hbWUhPT0idCIsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwfSxpLmNoZWNrZWQ9ITAsay5ub0Nsb25lQ2hlY2tlZD1pLmNsb25lTm9kZSghMCkuY2hlY2tlZCxnLmRpc2FibGVkPSEwLGsub3B0RGlzYWJsZWQ9IWguZGlzYWJsZWQ7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2godil7ay5kZWxldGVFeHBhbmRvPSExfSFhLmFkZEV2ZW50TGlzdGVuZXImJmEuYXR0YWNoRXZlbnQmJmEuZmlyZUV2ZW50JiYoYS5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXtrLm5vQ2xvbmVFdmVudD0hMX0pLGEuY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSksaT1jLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS52YWx1ZT0idCIsaS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT1pLnZhbHVlPT09InQiLGkuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGEuYXBwZW5kQ2hpbGQoaSksbD1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsLmFwcGVuZENoaWxkKGEuZmlyc3RDaGlsZCksay5jaGVja0Nsb25lPWwuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGEuaW5uZXJIVE1MPSIiLGEuc3R5bGUud2lkdGg9YS5zdHlsZS5wYWRkaW5nTGVmdD0iMXB4IixtPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxvPWMuY3JlYXRlRWxlbWVudChtPyJkaXYiOiJib2R5IikscD17dmlzaWJpbGl0eToiaGlkZGVuIix3aWR0aDowLGhlaWdodDowLGJvcmRlcjowLG1hcmdpbjowLGJhY2tncm91bmQ6Im5vbmUifSxtJiZmLmV4dGVuZChwLHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwcHgiLHRvcDoiLTEwMDBweCJ9KTtmb3IodCBpbiBwKW8uc3R5bGVbdF09cFt0XTtvLmFwcGVuZENoaWxkKGEpLG49bXx8YixuLmluc2VydEJlZm9yZShvLG4uZmlyc3RDaGlsZCksay5hcHBlbmRDaGVja2VkPWkuY2hlY2tlZCxrLmJveE1vZGVsPWEub2Zmc2V0V2lkdGg9PT0yLCJ6b29tImluIGEuc3R5bGUmJihhLnN0eWxlLmRpc3BsYXk9ImlubGluZSIsYS5zdHlsZS56b29tPTEsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWEub2Zmc2V0V2lkdGg9PT0yLGEuc3R5bGUuZGlzcGxheT0iIixhLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IixrLnNocmlua1dyYXBCbG9ja3M9YS5vZmZzZXRXaWR0aCE9PTIpLGEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIscT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHU9cVswXS5vZmZzZXRIZWlnaHQ9PT0wLHFbMF0uc3R5bGUuZGlzcGxheT0iIixxWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGsucmVsaWFibGVIaWRkZW5PZmZzZXRzPXUmJnFbMF0ub2Zmc2V0SGVpZ2h0PT09MCxhLmlubmVySFRNTD0iIixjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihqPWMuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS5tYXJnaW5SaWdodD0iMCIsYS5hcHBlbmRDaGlsZChqKSxrLnJlbGlhYmxlTWFyZ2luUmlnaHQ9KHBhcnNlSW50KChjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaixudWxsKXx8e21hcmdpblJpZ2h0OjB9KS5tYXJnaW5SaWdodCwxMCl8fDApPT09MCksby5pbm5lckhUTUw9IiIsbi5yZW1vdmVDaGlsZChvKTtpZihhLmF0dGFjaEV2ZW50KWZvcih0IGlue3N1Ym1pdDoxLGNoYW5nZToxLGZvY3VzaW46MX0pcz0ib24iK3QsdT1zIGluIGEsdXx8KGEuc2V0QXR0cmlidXRlKHMsInJldHVybjsiKSx1PXR5cGVvZiBhW3NdPT0iZnVuY3Rpb24iKSxrW3QrIkJ1YmJsZXMiXT11O289bD1nPWg9bT1qPWE9aT1udWxsO3JldHVybiBrfSgpLGYuYm94TW9kZWw9Zi5zdXBwb3J0LmJveE1vZGVsO3ZhciBpPS9eKD86XHsuKlx9fFxbLipcXSkkLyxqPS8oW2Etel0pKFtBLVpdKS9nO2YuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9mLmNhY2hlW2FbZi5leHBhbmRvXV06YVtmLmV4cGFuZG9dO3JldHVybiEhYSYmIWwoYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBnLGgsaT1mLmV4cGFuZG8saj10eXBlb2YgYz09InN0cmluZyIsaz1hLm5vZGVUeXBlLGw9az9mLmNhY2hlOmEsbT1rP2FbZi5leHBhbmRvXTphW2YuZXhwYW5kb10mJmYuZXhwYW5kbztpZigoIW18fGUmJm0mJmxbbV0mJiFsW21dW2ldKSYmaiYmZD09PWIpcmV0dXJuO218fChrP2FbZi5leHBhbmRvXT1tPSsrZi51dWlkOm09Zi5leHBhbmRvKSxsW21dfHwobFttXT17fSxrfHwobFttXS50b0pTT049Zi5ub29wKSk7aWYodHlwZW9mIGM9PSJvYmplY3QifHx0eXBlb2YgYz09ImZ1bmN0aW9uIillP2xbbV1baV09Zi5leHRlbmQobFttXVtpXSxjKTpsW21dPWYuZXh0ZW5kKGxbbV0sYyk7Zz1sW21dLGUmJihnW2ldfHwoZ1tpXT17fSksZz1nW2ldKSxkIT09YiYmKGdbZi5jYW1lbENhc2UoYyldPWQpO2lmKGM9PT0iZXZlbnRzIiYmIWdbY10pcmV0dXJuIGdbaV0mJmdbaV0uZXZlbnRzO2o/KGg9Z1tjXSxoPT1udWxsJiYoaD1nW2YuY2FtZWxDYXNlKGMpXSkpOmg9ZztyZXR1cm4gaH19LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiLGMpe2lmKCEhZi5hY2NlcHREYXRhKGEpKXt2YXIgZCxlPWYuZXhwYW5kbyxnPWEubm9kZVR5cGUsaD1nP2YuY2FjaGU6YSxpPWc/YVtmLmV4cGFuZG9dOmYuZXhwYW5kbztpZighaFtpXSlyZXR1cm47aWYoYil7ZD1jP2hbaV1bZV06aFtpXTtpZihkKXtkW2JdfHwoYj1mLmNhbWVsQ2FzZShiKSksZGVsZXRlIGRbYl07aWYoIWwoZCkpcmV0dXJufX1pZihjKXtkZWxldGUgaFtpXVtlXTtpZighbChoW2ldKSlyZXR1cm59dmFyIGo9aFtpXVtlXTtmLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8IWguc2V0SW50ZXJ2YWw/ZGVsZXRlIGhbaV06aFtpXT1udWxsLGo/KGhbaV09e30sZ3x8KGhbaV0udG9KU09OPWYubm9vcCksaFtpXVtlXT1qKTpnJiYoZi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8/ZGVsZXRlIGFbZi5leHBhbmRvXTphLnJlbW92ZUF0dHJpYnV0ZT9hLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pOmFbZi5leHBhbmRvXT1udWxsKX19LF9kYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kYXRhKGEsYixjLCEwKX0sYWNjZXB0RGF0YTpmdW5jdGlvbihhKXtpZihhLm5vZGVOYW1lKXt2YXIgYj1mLm5vRGF0YVthLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKGIpcmV0dXJuIGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9cmV0dXJuITB9fSksZi5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxjKXt2YXIgZD1udWxsO2lmKHR5cGVvZiBhPT0idW5kZWZpbmVkIil7aWYodGhpcy5sZW5ndGgpe2Q9Zi5kYXRhKHRoaXNbMF0pO2lmKHRoaXNbMF0ubm9kZVR5cGU9PT0xKXt2YXIgZT10aGlzWzBdLmF0dHJpYnV0ZXMsZztmb3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspZz1lW2hdLm5hbWUsZy5pbmRleE9mKCJkYXRhLSIpPT09MCYmKGc9Zi5jYW1lbENhc2UoZy5zdWJzdHJpbmcoNSkpLGsodGhpc1swXSxnLGRbZ10pKX19cmV0dXJuIGR9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRhdGEodGhpcyxhKX0pO3ZhciBqPWEuc3BsaXQoIi4iKTtqWzFdPWpbMV0/Ii4iK2pbMV06IiI7aWYoYz09PWIpe2Q9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIralsxXSsiISIsW2pbMF1dKSxkPT09YiYmdGhpcy5sZW5ndGgmJihkPWYuZGF0YSh0aGlzWzBdLGEpLGQ9ayh0aGlzWzBdLGEsZCkpO3JldHVybiBkPT09YiYmalsxXT90aGlzLmRhdGEoalswXSk6ZH1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zih0aGlzKSxkPVtqWzBdLGNdO2IudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2pbMV0rIiEiLGQpLGYuZGF0YSh0aGlzLGEsYyksYi50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIralsxXSsiISIsZCl9KX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVEYXRhKHRoaXMsYSl9KX19KSxmLmV4dGVuZCh7X21hcms6ZnVuY3Rpb24oYSxjKXthJiYoYz0oY3x8ImZ4IikrIm1hcmsiLGYuZGF0YShhLGMsKGYuZGF0YShhLGMsYiwhMCl8fDApKzEsITApKX0sX3VubWFyazpmdW5jdGlvbihhLGMsZCl7YSE9PSEwJiYoZD1jLGM9YSxhPSExKTtpZihjKXtkPWR8fCJmeCI7dmFyIGU9ZCsibWFyayIsZz1hPzA6KGYuZGF0YShjLGUsYiwhMCl8fDEpLTE7Zz9mLmRhdGEoYyxlLGcsITApOihmLnJlbW92ZURhdGEoYyxlLCEwKSxtKGMsZCwibWFyayIpKX19LHF1ZXVlOmZ1bmN0aW9uKGEsYyxkKXtpZihhKXtjPShjfHwiZngiKSsicXVldWUiO3ZhciBlPWYuZGF0YShhLGMsYiwhMCk7ZCYmKCFlfHxmLmlzQXJyYXkoZCk/ZT1mLmRhdGEoYSxjLGYubWFrZUFycmF5KGQpLCEwKTplLnB1c2goZCkpO3JldHVybiBlfHxbXX19LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9Zi5xdWV1ZShhLGIpLGQ9Yy5zaGlmdCgpLGU7ZD09PSJpbnByb2dyZXNzIiYmKGQ9Yy5zaGlmdCgpKSxkJiYoYj09PSJmeCImJmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGQuY2FsbChhLGZ1bmN0aW9uKCl7Zi5kZXF1ZXVlKGEsYil9KSksYy5sZW5ndGh8fChmLnJlbW92ZURhdGEoYSxiKyJxdWV1ZSIsITApLG0oYSxiLCJxdWV1ZSIpKX19KSxmLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxjKXt0eXBlb2YgYSE9InN0cmluZyImJihjPWEsYT0iZngiKTtpZihjPT09YilyZXR1cm4gZi5xdWV1ZSh0aGlzWzBdLGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mLnF1ZXVlKHRoaXMsYSxjKTthPT09ImZ4IiYmYlswXSE9PSJpbnByb2dyZXNzIiYmZi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVsYXk6ZnVuY3Rpb24oYSxiKXthPWYuZng/Zi5meC5zcGVlZHNbYV18fGE6YSxiPWJ8fCJmeCI7cmV0dXJuIHRoaXMucXVldWUoYixmdW5jdGlvbigpe3ZhciBjPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2YuZGVxdWV1ZShjLGIpfSxhKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gbSgpey0taHx8ZC5yZXNvbHZlV2l0aChlLFtlXSl9dHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9YiksYT1hfHwiZngiO3ZhciBkPWYuRGVmZXJyZWQoKSxlPXRoaXMsZz1lLmxlbmd0aCxoPTEsaT1hKyJkZWZlciIsaj1hKyJxdWV1ZSIsaz1hKyJtYXJrIixsO3doaWxlKGctLSlpZihsPWYuZGF0YShlW2ddLGksYiwhMCl8fChmLmRhdGEoZVtnXSxqLGIsITApfHxmLmRhdGEoZVtnXSxrLGIsITApKSYmZi5kYXRhKGVbZ10saSxmLl9EZWZlcnJlZCgpLCEwKSloKyssbC5kb25lKG0pO20oKTtyZXR1cm4gZC5wcm9taXNlKCl9fSk7dmFyIG49L1tcblx0XHJdL2csbz0vXHMrLyxwPS9cci9nLHE9L14oPzpidXR0b258aW5wdXQpJC9pLHI9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2kscz0vXmEoPzpyZWEpPyQvaSx0PS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLHUsdjtmLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLmF0dHIpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZUF0dHIodGhpcyxhKX0pfSxwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuYWNjZXNzKHRoaXMsYSxiLCEwLGYucHJvcCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7YT1mLnByb3BGaXhbYV18fGE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPWIsZGVsZXRlIHRoaXNbYV19Y2F0Y2goYyl7fX0pfSxhZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxnLGgsaTtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nIil7Yj1hLnNwbGl0KG8pO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtlPXRoaXNbY107aWYoZS5ub2RlVHlwZT09PTEpaWYoIWUuY2xhc3NOYW1lJiZiLmxlbmd0aD09PTEpZS5jbGFzc05hbWU9YTtlbHNle2c9IiAiK2UuY2xhc3NOYW1lKyIgIjtmb3IoaD0wLGk9Yi5sZW5ndGg7aDxpO2grKyl+Zy5pbmRleE9mKCIgIitiW2hdKyIgIil8fChnKz1iW2hdKyIgIik7ZS5jbGFzc05hbWU9Zi50cmltKGcpfX19cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxnLGgsaSxqO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmcifHxhPT09Yil7Yz0oYXx8IiIpLnNwbGl0KG8pO2ZvcihkPTAsZT10aGlzLmxlbmd0aDtkPGU7ZCsrKXtnPXRoaXNbZF07aWYoZy5ub2RlVHlwZT09PTEmJmcuY2xhc3NOYW1lKWlmKGEpe2g9KCIgIitnLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobiwiICIpO2ZvcihpPTAsaj1jLmxlbmd0aDtpPGo7aSsrKWg9aC5yZXBsYWNlKCIgIitjW2ldKyIgIiwiICIpO2cuY2xhc3NOYW1lPWYudHJpbShoKX1lbHNlIGcuY2xhc3NOYW1lPSIifX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYSxkPXR5cGVvZiBiPT0iYm9vbGVhbiI7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Zih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGM9PT0ic3RyaW5nIil7dmFyIGUsZz0wLGg9Zih0aGlzKSxpPWIsaj1hLnNwbGl0KG8pO3doaWxlKGU9altnKytdKWk9ZD9pOiFoLmhhc0NsYXNzKGUpLGhbaT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGUpfWVsc2UgaWYoYz09PSJ1bmRlZmluZWQifHxjPT09ImJvb2xlYW4iKXRoaXMuY2xhc3NOYW1lJiZmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIiOmYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXt2YXIgYj0iICIrYSsiICI7Zm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKWlmKHRoaXNbY10ubm9kZVR5cGU9PT0xJiYoIiAiK3RoaXNbY10uY2xhc3NOYW1lKyIgIikucmVwbGFjZShuLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX0sdmFsOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZT10aGlzWzBdO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZihlKXtjPWYudmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1tlLnR5cGVdO2lmKGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZSwidmFsdWUiKSkhPT1iKXJldHVybiBkO2Q9ZS52YWx1ZTtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2QucmVwbGFjZShwLCIiKTpkPT1udWxsPyIiOmR9cmV0dXJuIGJ9dmFyIGc9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGU9Zih0aGlzKSxoO2lmKHRoaXMubm9kZVR5cGU9PT0xKXtnP2g9YS5jYWxsKHRoaXMsZCxlLnZhbCgpKTpoPWEsaD09bnVsbD9oPSIiOnR5cGVvZiBoPT0ibnVtYmVyIj9oKz0iIjpmLmlzQXJyYXkoaCkmJihoPWYubWFwKGgsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6YSsiIn0pKSxjPWYudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1t0aGlzLnR5cGVdO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRoaXMsaCwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1ofX0pfX0pLGYuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiFifHxiLnNwZWNpZmllZD9hLnZhbHVlOmEudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiLGM9YS5zZWxlY3RlZEluZGV4LGQ9W10sZT1hLm9wdGlvbnMsZz1hLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoYzwwKXJldHVybiBudWxsO2Zvcih2YXIgaD1nP2M6MCxpPWc/YysxOmUubGVuZ3RoO2g8aTtoKyspe3ZhciBqPWVbaF07aWYoai5zZWxlY3RlZCYmKGYuc3VwcG9ydC5vcHREaXNhYmxlZD8hai5kaXNhYmxlZDpqLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09PW51bGwpJiYoIWoucGFyZW50Tm9kZS5kaXNhYmxlZHx8IWYubm9kZU5hbWUoai5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7Yj1mKGopLnZhbCgpO2lmKGcpcmV0dXJuIGI7ZC5wdXNoKGIpfX1pZihnJiYhZC5sZW5ndGgmJmUubGVuZ3RoKXJldHVybiBmKGVbY10pLnZhbCgpO3JldHVybiBkfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1mLm1ha2VBcnJheShiKTtmKGEpLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPWYuaW5BcnJheShmKHRoaXMpLnZhbCgpLGMpPj0wfSksYy5sZW5ndGh8fChhLnNlbGVjdGVkSW5kZXg9LTEpO3JldHVybiBjfX19LGF0dHJGbjp7dmFsOiEwLGNzczohMCxodG1sOiEwLHRleHQ6ITAsZGF0YTohMCx3aWR0aDohMCxoZWlnaHQ6ITAsb2Zmc2V0OiEwfSxhdHRyRml4Ont0YWJpbmRleDoidGFiSW5kZXgifSxhdHRyOmZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBnPWEubm9kZVR5cGU7aWYoIWF8fGc9PT0zfHxnPT09OHx8Zz09PTIpcmV0dXJuIGI7aWYoZSYmYyBpbiBmLmF0dHJGbilyZXR1cm4gZihhKVtjXShkKTtpZighKCJnZXRBdHRyaWJ1dGUiaW4gYSkpcmV0dXJuIGYucHJvcChhLGMsZCk7dmFyIGgsaSxqPWchPT0xfHwhZi5pc1hNTERvYyhhKTtqJiYoYz1mLmF0dHJGaXhbY118fGMsaT1mLmF0dHJIb29rc1tjXSxpfHwodC50ZXN0KGMpP2k9djp1JiYoaT11KSkpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJuIGJ9aWYoaSYmInNldCJpbiBpJiZqJiYoaD1pLnNldChhLGQsYykpIT09YilyZXR1cm4gaDthLnNldEF0dHJpYnV0ZShjLCIiK2QpO3JldHVybiBkfWlmKGkmJiJnZXQiaW4gaSYmaiYmKGg9aS5nZXQoYSxjKSkhPT1udWxsKXJldHVybiBoO2g9YS5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIGg9PT1udWxsP2I6aH0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjO2Eubm9kZVR5cGU9PT0xJiYoYj1mLmF0dHJGaXhbYl18fGIsZi5hdHRyKGEsYiwiIiksYS5yZW1vdmVBdHRyaWJ1dGUoYiksdC50ZXN0KGIpJiYoYz1mLnByb3BGaXhbYl18fGIpaW4gYSYmKGFbY109ITEpKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihxLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlmLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFmLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJmYubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTthLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYmKGEudmFsdWU9Yyk7cmV0dXJuIGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe2lmKHUmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHUuZ2V0KGEsYik7cmV0dXJuIGIgaW4gYT9hLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihhLGIsYyl7aWYodSYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdS5zZXQoYSxiLGMpO2EudmFsdWU9Yn19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWEubm9kZVR5cGU7aWYoIWF8fGU9PT0zfHxlPT09OHx8ZT09PTIpcmV0dXJuIGI7dmFyIGcsaCxpPWUhPT0xfHwhZi5pc1hNTERvYyhhKTtpJiYoYz1mLnByb3BGaXhbY118fGMsaD1mLnByb3BIb29rc1tjXSk7cmV0dXJuIGQhPT1iP2gmJiJzZXQiaW4gaCYmKGc9aC5zZXQoYSxkLGMpKSE9PWI/ZzphW2NdPWQ6aCYmImdldCJpbiBoJiYoZz1oLmdldChhLGMpKSE9PW51bGw/ZzphW2NdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9wYXJzZUludChjLnZhbHVlLDEwKTpyLnRlc3QoYS5ub2RlTmFtZSl8fHMudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6Yn19fX0pLGYuYXR0ckhvb2tzLnRhYkluZGV4PWYucHJvcEhvb2tzLnRhYkluZGV4LHY9e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkO3JldHVybiBmLnByb3AoYSxjKT09PSEwfHwoZD1hLmdldEF0dHJpYnV0ZU5vZGUoYykpJiZkLm5vZGVWYWx1ZSE9PSExP2MudG9Mb3dlckNhc2UoKTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2I9PT0hMT9mLnJlbW92ZUF0dHIoYSxjKTooZD1mLnByb3BGaXhbY118fGMsZCBpbiBhJiYoYVtkXT0hMCksYS5zZXRBdHRyaWJ1dGUoYyxjLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gY319LGYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGV8fCh1PWYudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZDtkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtyZXR1cm4gZCYmZC5ub2RlVmFsdWUhPT0iIj9kLm5vZGVWYWx1ZTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0QXR0cmlidXRlTm9kZShkKTtlfHwoZT1jLmNyZWF0ZUF0dHJpYnV0ZShkKSxhLnNldEF0dHJpYnV0ZU5vZGUoZSkpO3JldHVybiBlLm5vZGVWYWx1ZT1iKyIifX0sZi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe2YuYXR0ckhvb2tzW2JdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2JdLHtzZXQ6ZnVuY3Rpb24oYSxjKXtpZihjPT09IiIpe2Euc2V0QXR0cmlidXRlKGIsImF1dG8iKTtyZXR1cm4gY319fSl9KSksZi5zdXBwb3J0LmhyZWZOb3JtYWxpemVkfHxmLmVhY2goWyJocmVmIiwic3JjIiwid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGMpe2YuYXR0ckhvb2tzW2NdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2NdLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoYywyKTtyZXR1cm4gZD09PW51bGw/YjpkfX0pfSksZi5zdXBwb3J0LnN0eWxlfHwoZi5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fGJ9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9IiIrYn19KSxmLnN1cHBvcnQub3B0U2VsZWN0ZWR8fChmLnByb3BIb29rcy5zZWxlY3RlZD1mLmV4dGVuZChmLnByb3BIb29rcy5zZWxlY3RlZCx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpO3JldHVybiBudWxsfX0pKSxmLnN1cHBvcnQuY2hlY2tPbnx8Zi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjphLnZhbHVlfX19KSxmLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtmLnZhbEhvb2tzW3RoaXNdPWYuZXh0ZW5kKGYudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihhLGIpe2lmKGYuaXNBcnJheShiKSlyZXR1cm4gYS5jaGVja2VkPWYuaW5BcnJheShmKGEpLnZhbCgpLGIpPj0wfX0pfSk7dmFyIHc9L1wuKC4qKSQvLHg9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLHk9L1wuL2csej0vIC9nLEE9L1teXHdccy58YF0vZyxCPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoQSwiXFwkJiIpfTtmLmV2ZW50PXthZGQ6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoYS5ub2RlVHlwZSE9PTMmJmEubm9kZVR5cGUhPT04KXtpZihkPT09ITEpZD1DO2Vsc2UgaWYoIWQpcmV0dXJuO3ZhciBnLGg7ZC5oYW5kbGVyJiYoZz1kLGQ9Zy5oYW5kbGVyKSxkLmd1aWR8fChkLmd1aWQ9Zi5ndWlkKyspO3ZhciBpPWYuX2RhdGEoYSk7aWYoIWkpcmV0dXJuO3ZhciBqPWkuZXZlbnRzLGs9aS5oYW5kbGU7anx8KGkuZXZlbnRzPWo9e30pLGt8fChpLmhhbmRsZT1rPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgZiE9InVuZGVmaW5lZCImJighYXx8Zi5ldmVudC50cmlnZ2VyZWQhPT1hLnR5cGUpP2YuZXZlbnQuaGFuZGxlLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpOmJ9KSxrLmVsZW09YSxjPWMuc3BsaXQoIiAiKTt2YXIgbCxtPTAsbjt3aGlsZShsPWNbbSsrXSl7aD1nP2YuZXh0ZW5kKHt9LGcpOntoYW5kbGVyOmQsZGF0YTplfSxsLmluZGV4T2YoIi4iKT4tMT8obj1sLnNwbGl0KCIuIiksbD1uLnNoaWZ0KCksaC5uYW1lc3BhY2U9bi5zbGljZSgwKS5zb3J0KCkuam9pbigiLiIpKToobj1bXSxoLm5hbWVzcGFjZT0iIiksaC50eXBlPWwsaC5ndWlkfHwoaC5ndWlkPWQuZ3VpZCk7dmFyIG89altsXSxwPWYuZXZlbnQuc3BlY2lhbFtsXXx8e307aWYoIW8pe289altsXT1bXTtpZighcC5zZXR1cHx8cC5zZXR1cC5jYWxsKGEsZSxuLGspPT09ITEpYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihsLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitsLGspfXAuYWRkJiYocC5hZGQuY2FsbChhLGgpLGguaGFuZGxlci5ndWlkfHwoaC5oYW5kbGVyLmd1aWQ9ZC5ndWlkKSksby5wdXNoKGgpLGYuZXZlbnQuZ2xvYmFsW2xdPSEwfWE9bnVsbH19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoYS5ub2RlVHlwZSE9PTMmJmEubm9kZVR5cGUhPT04KXtkPT09ITEmJihkPUMpO3ZhciBnLGgsaSxqLGs9MCxsLG0sbixvLHAscSxyLHM9Zi5oYXNEYXRhKGEpJiZmLl9kYXRhKGEpLHQ9cyYmcy5ldmVudHM7aWYoIXN8fCF0KXJldHVybjtjJiZjLnR5cGUmJihkPWMuaGFuZGxlcixjPWMudHlwZSk7aWYoIWN8fHR5cGVvZiBjPT0ic3RyaW5nIiYmYy5jaGFyQXQoMCk9PT0iLiIpe2M9Y3x8IiI7Zm9yKGggaW4gdClmLmV2ZW50LnJlbW92ZShhLGgrYyk7cmV0dXJufWM9Yy5zcGxpdCgiICIpO3doaWxlKGg9Y1trKytdKXtyPWgscT1udWxsLGw9aC5pbmRleE9mKCIuIik8MCxtPVtdLGx8fChtPWguc3BsaXQoIi4iKSxoPW0uc2hpZnQoKSxuPW5ldyBSZWdFeHAoIihefFxcLikiK2YubWFwKG0uc2xpY2UoMCkuc29ydCgpLEIpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpKSxwPXRbaF07aWYoIXApY29udGludWU7aWYoIWQpe2ZvcihqPTA7ajxwLmxlbmd0aDtqKyspe3E9cFtqXTtpZihsfHxuLnRlc3QocS5uYW1lc3BhY2UpKWYuZXZlbnQucmVtb3ZlKGEscixxLmhhbmRsZXIsaikscC5zcGxpY2Uoai0tLDEpfWNvbnRpbnVlfW89Zi5ldmVudC5zcGVjaWFsW2hdfHx7fTtmb3Ioaj1lfHwwO2o8cC5sZW5ndGg7aisrKXtxPXBbal07aWYoZC5ndWlkPT09cS5ndWlkKXtpZihsfHxuLnRlc3QocS5uYW1lc3BhY2UpKWU9PW51bGwmJnAuc3BsaWNlKGotLSwxKSxvLnJlbW92ZSYmby5yZW1vdmUuY2FsbChhLHEpO2lmKGUhPW51bGwpYnJlYWt9fWlmKHAubGVuZ3RoPT09MHx8ZSE9bnVsbCYmcC5sZW5ndGg9PT0xKSghby50ZWFyZG93bnx8by50ZWFyZG93bi5jYWxsKGEsbSk9PT0hMSkmJmYucmVtb3ZlRXZlbnQoYSxoLHMuaGFuZGxlKSxnPW51bGwNCixkZWxldGUgdFtoXX1pZihmLmlzRW1wdHlPYmplY3QodCkpe3ZhciB1PXMuaGFuZGxlO3UmJih1LmVsZW09bnVsbCksZGVsZXRlIHMuZXZlbnRzLGRlbGV0ZSBzLmhhbmRsZSxmLmlzRW1wdHlPYmplY3QocykmJmYucmVtb3ZlRGF0YShhLGIsITApfX19LGN1c3RvbUV2ZW50OntnZXREYXRhOiEwLHNldERhdGE6ITAsY2hhbmdlRGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihjLGQsZSxnKXt2YXIgaD1jLnR5cGV8fGMsaT1bXSxqO2guaW5kZXhPZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGo9ITApLGguaW5kZXhPZigiLiIpPj0wJiYoaT1oLnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCEhZSYmIWYuZXZlbnQuY3VzdG9tRXZlbnRbaF18fCEhZi5ldmVudC5nbG9iYWxbaF0pe2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbZi5leHBhbmRvXT9jOm5ldyBmLkV2ZW50KGgsYyk6bmV3IGYuRXZlbnQoaCksYy50eXBlPWgsYy5leGNsdXNpdmU9aixjLm5hbWVzcGFjZT1pLmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1uZXcgUmVnRXhwKCIoXnxcXC4pIitpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpO2lmKGd8fCFlKWMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpO2lmKCFlKXtmLmVhY2goZi5jYWNoZSxmdW5jdGlvbigpe3ZhciBhPWYuZXhwYW5kbyxiPXRoaXNbYV07YiYmYi5ldmVudHMmJmIuZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGIuaGFuZGxlLmVsZW0pfSk7cmV0dXJufWlmKGUubm9kZVR5cGU9PT0zfHxlLm5vZGVUeXBlPT09OClyZXR1cm47Yy5yZXN1bHQ9YixjLnRhcmdldD1lLGQ9ZCE9bnVsbD9mLm1ha2VBcnJheShkKTpbXSxkLnVuc2hpZnQoYyk7dmFyIGs9ZSxsPWguaW5kZXhPZigiOiIpPDA/Im9uIitoOiIiO2Rve3ZhciBtPWYuX2RhdGEoaywiaGFuZGxlIik7Yy5jdXJyZW50VGFyZ2V0PWssbSYmbS5hcHBseShrLGQpLGwmJmYuYWNjZXB0RGF0YShrKSYma1tsXSYma1tsXS5hcHBseShrLGQpPT09ITEmJihjLnJlc3VsdD0hMSxjLnByZXZlbnREZWZhdWx0KCkpLGs9ay5wYXJlbnROb2RlfHxrLm93bmVyRG9jdW1lbnR8fGs9PT1jLnRhcmdldC5vd25lckRvY3VtZW50JiZhfXdoaWxlKGsmJiFjLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpO2lmKCFjLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgbixvPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYoKCFvLl9kZWZhdWx0fHxvLl9kZWZhdWx0LmNhbGwoZS5vd25lckRvY3VtZW50LGMpPT09ITEpJiYoaCE9PSJjbGljayJ8fCFmLm5vZGVOYW1lKGUsImEiKSkmJmYuYWNjZXB0RGF0YShlKSl7dHJ5e2wmJmVbaF0mJihuPWVbbF0sbiYmKGVbbF09bnVsbCksZi5ldmVudC50cmlnZ2VyZWQ9aCxlW2hdKCkpfWNhdGNoKHApe31uJiYoZVtsXT1uKSxmLmV2ZW50LnRyaWdnZXJlZD1ifX1yZXR1cm4gYy5yZXN1bHR9fSxoYW5kbGU6ZnVuY3Rpb24oYyl7Yz1mLmV2ZW50LmZpeChjfHxhLmV2ZW50KTt2YXIgZD0oKGYuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtjLnR5cGVdfHxbXSkuc2xpY2UoMCksZT0hYy5leGNsdXNpdmUmJiFjLm5hbWVzcGFjZSxnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtnWzBdPWMsYy5jdXJyZW50VGFyZ2V0PXRoaXM7Zm9yKHZhciBoPTAsaT1kLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1kW2hdO2lmKGV8fGMubmFtZXNwYWNlX3JlLnRlc3Qoai5uYW1lc3BhY2UpKXtjLmhhbmRsZXI9ai5oYW5kbGVyLGMuZGF0YT1qLmRhdGEsYy5oYW5kbGVPYmo9ajt2YXIgaz1qLmhhbmRsZXIuYXBwbHkodGhpcyxnKTtrIT09YiYmKGMucmVzdWx0PWssaz09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKTtpZihjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWt9fXJldHVybiBjLnJlc3VsdH0scHJvcHM6ImFsdEtleSBhdHRyQ2hhbmdlIGF0dHJOYW1lIGJ1YmJsZXMgYnV0dG9uIGNhbmNlbGFibGUgY2hhckNvZGUgY2xpZW50WCBjbGllbnRZIGN0cmxLZXkgY3VycmVudFRhcmdldCBkYXRhIGRldGFpbCBldmVudFBoYXNlIGZyb21FbGVtZW50IGhhbmRsZXIga2V5Q29kZSBsYXllclggbGF5ZXJZIG1ldGFLZXkgbmV3VmFsdWUgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHByZXZWYWx1ZSByZWxhdGVkTm9kZSByZWxhdGVkVGFyZ2V0IHNjcmVlblggc2NyZWVuWSBzaGlmdEtleSBzcmNFbGVtZW50IHRhcmdldCB0b0VsZW1lbnQgdmlldyB3aGVlbERlbHRhIHdoaWNoIi5zcGxpdCgiICIpLGZpeDpmdW5jdGlvbihhKXtpZihhW2YuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGQ9YTthPWYuRXZlbnQoZCk7Zm9yKHZhciBlPXRoaXMucHJvcHMubGVuZ3RoLGc7ZTspZz10aGlzLnByb3BzWy0tZV0sYVtnXT1kW2ddO2EudGFyZ2V0fHwoYS50YXJnZXQ9YS5zcmNFbGVtZW50fHxjKSxhLnRhcmdldC5ub2RlVHlwZT09PTMmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSwhYS5yZWxhdGVkVGFyZ2V0JiZhLmZyb21FbGVtZW50JiYoYS5yZWxhdGVkVGFyZ2V0PWEuZnJvbUVsZW1lbnQ9PT1hLnRhcmdldD9hLnRvRWxlbWVudDphLmZyb21FbGVtZW50KTtpZihhLnBhZ2VYPT1udWxsJiZhLmNsaWVudFghPW51bGwpe3ZhciBoPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGMsaT1oLmRvY3VtZW50RWxlbWVudCxqPWguYm9keTthLnBhZ2VYPWEuY2xpZW50WCsoaSYmaS5zY3JvbGxMZWZ0fHxqJiZqLnNjcm9sbExlZnR8fDApLShpJiZpLmNsaWVudExlZnR8fGomJmouY2xpZW50TGVmdHx8MCksYS5wYWdlWT1hLmNsaWVudFkrKGkmJmkuc2Nyb2xsVG9wfHxqJiZqLnNjcm9sbFRvcHx8MCktKGkmJmkuY2xpZW50VG9wfHxqJiZqLmNsaWVudFRvcHx8MCl9YS53aGljaD09bnVsbCYmKGEuY2hhckNvZGUhPW51bGx8fGEua2V5Q29kZSE9bnVsbCkmJihhLndoaWNoPWEuY2hhckNvZGUhPW51bGw/YS5jaGFyQ29kZTphLmtleUNvZGUpLCFhLm1ldGFLZXkmJmEuY3RybEtleSYmKGEubWV0YUtleT1hLmN0cmxLZXkpLCFhLndoaWNoJiZhLmJ1dHRvbiE9PWImJihhLndoaWNoPWEuYnV0dG9uJjE/MTphLmJ1dHRvbiYyPzM6YS5idXR0b24mND8yOjApO3JldHVybiBhfSxndWlkOjFlOCxwcm94eTpmLnByb3h5LHNwZWNpYWw6e3JlYWR5OntzZXR1cDpmLmJpbmRSZWFkeSx0ZWFyZG93bjpmLm5vb3B9LGxpdmU6e2FkZDpmdW5jdGlvbihhKXtmLmV2ZW50LmFkZCh0aGlzLE0oYS5vcmlnVHlwZSxhLnNlbGVjdG9yKSxmLmV4dGVuZCh7fSxhLHtoYW5kbGVyOkwsZ3VpZDphLmhhbmRsZXIuZ3VpZH0pKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe2YuZXZlbnQucmVtb3ZlKHRoaXMsTShhLm9yaWdUeXBlLGEuc2VsZWN0b3IpLGEpfX0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7Zi5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19fSxmLnJlbW92ZUV2ZW50PWMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpfSxmLkV2ZW50PWZ1bmN0aW9uKGEsYil7aWYoIXRoaXMucHJldmVudERlZmF1bHQpcmV0dXJuIG5ldyBmLkV2ZW50KGEsYik7YSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8YS5yZXR1cm5WYWx1ZT09PSExfHxhLmdldFByZXZlbnREZWZhdWx0JiZhLmdldFByZXZlbnREZWZhdWx0KCk/RDpDKTp0aGlzLnR5cGU9YSxiJiZmLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWYubm93KCksdGhpc1tmLmV4cGFuZG9dPSEwfSxmLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1EO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDshYXx8KGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUQ7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCksYS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPUQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOkMsaXNQcm9wYWdhdGlvblN0b3BwZWQ6Qyxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpDfTt2YXIgRT1mdW5jdGlvbihhKXt2YXIgYj1hLnJlbGF0ZWRUYXJnZXQsYz0hMSxkPWEudHlwZTthLnR5cGU9YS5kYXRhLGIhPT10aGlzJiYoYiYmKGM9Zi5jb250YWlucyh0aGlzLGIpKSxjfHwoZi5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1kKSl9LEY9ZnVuY3Rpb24oYSl7YS50eXBlPWEuZGF0YSxmLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2YuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Zi5ldmVudC5zcGVjaWFsW2FdPXtzZXR1cDpmdW5jdGlvbihjKXtmLmV2ZW50LmFkZCh0aGlzLGIsYyYmYy5zZWxlY3Rvcj9GOkUsYSl9LHRlYXJkb3duOmZ1bmN0aW9uKGEpe2YuZXZlbnQucmVtb3ZlKHRoaXMsYixhJiZhLnNlbGVjdG9yP0Y6RSl9fX0pLGYuc3VwcG9ydC5zdWJtaXRCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oYSxiKXtpZighZi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpZi5ldmVudC5hZGQodGhpcywiY2xpY2suc3BlY2lhbFN1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1mLm5vZGVOYW1lKGIsImlucHV0Iik/Yi50eXBlOiIiOyhjPT09InN1Ym1pdCJ8fGM9PT0iaW1hZ2UiKSYmZihiKS5jbG9zZXN0KCJmb3JtIikubGVuZ3RoJiZKKCJzdWJtaXQiLHRoaXMsYXJndW1lbnRzKX0pLGYuZXZlbnQuYWRkKHRoaXMsImtleXByZXNzLnNwZWNpYWxTdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9Zi5ub2RlTmFtZShiLCJpbnB1dCIpP2IudHlwZToiIjsoYz09PSJ0ZXh0Inx8Yz09PSJwYXNzd29yZCIpJiZmKGIpLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGgmJmEua2V5Q29kZT09PTEzJiZKKCJzdWJtaXQiLHRoaXMsYXJndW1lbnRzKX0pO2Vsc2UgcmV0dXJuITF9LHRlYXJkb3duOmZ1bmN0aW9uKGEpe2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5zcGVjaWFsU3VibWl0Iil9fSk7aWYoIWYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzKXt2YXIgRyxIPWZ1bmN0aW9uKGEpe3ZhciBiPWYubm9kZU5hbWUoYSwiaW5wdXQiKT9hLnR5cGU6IiIsYz1hLnZhbHVlO2I9PT0icmFkaW8ifHxiPT09ImNoZWNrYm94Ij9jPWEuY2hlY2tlZDpiPT09InNlbGVjdC1tdWx0aXBsZSI/Yz1hLnNlbGVjdGVkSW5kZXg+LTE/Zi5tYXAoYS5vcHRpb25zLGZ1bmN0aW9uKGEpe3JldHVybiBhLnNlbGVjdGVkfSkuam9pbigiLSIpOiIiOmYubm9kZU5hbWUoYSwic2VsZWN0IikmJihjPWEuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIGN9LEk9ZnVuY3Rpb24oYyl7dmFyIGQ9Yy50YXJnZXQsZSxnO2lmKCEheC50ZXN0KGQubm9kZU5hbWUpJiYhZC5yZWFkT25seSl7ZT1mLl9kYXRhKGQsIl9jaGFuZ2VfZGF0YSIpLGc9SChkKSwoYy50eXBlIT09ImZvY3Vzb3V0Inx8ZC50eXBlIT09InJhZGlvIikmJmYuX2RhdGEoZCwiX2NoYW5nZV9kYXRhIixnKTtpZihlPT09Ynx8Zz09PWUpcmV0dXJuO2lmKGUhPW51bGx8fGcpYy50eXBlPSJjaGFuZ2UiLGMubGl2ZUZpcmVkPWIsZi5ldmVudC50cmlnZ2VyKGMsYXJndW1lbnRzWzFdLGQpfX07Zi5ldmVudC5zcGVjaWFsLmNoYW5nZT17ZmlsdGVyczp7Zm9jdXNvdXQ6SSxiZWZvcmVkZWFjdGl2YXRlOkksY2xpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1mLm5vZGVOYW1lKGIsImlucHV0Iik/Yi50eXBlOiIiOyhjPT09InJhZGlvInx8Yz09PSJjaGVja2JveCJ8fGYubm9kZU5hbWUoYiwic2VsZWN0IikpJiZJLmNhbGwodGhpcyxhKX0sa2V5ZG93bjpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPWYubm9kZU5hbWUoYiwiaW5wdXQiKT9iLnR5cGU6IiI7KGEua2V5Q29kZT09PTEzJiYhZi5ub2RlTmFtZShiLCJ0ZXh0YXJlYSIpfHxhLmtleUNvZGU9PT0zMiYmKGM9PT0iY2hlY2tib3gifHxjPT09InJhZGlvIil8fGM9PT0ic2VsZWN0LW11bHRpcGxlIikmJkkuY2FsbCh0aGlzLGEpfSxiZWZvcmVhY3RpdmF0ZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtmLl9kYXRhKGIsIl9jaGFuZ2VfZGF0YSIsSChiKSl9fSxzZXR1cDpmdW5jdGlvbihhLGIpe2lmKHRoaXMudHlwZT09PSJmaWxlIilyZXR1cm4hMTtmb3IodmFyIGMgaW4gRylmLmV2ZW50LmFkZCh0aGlzLGMrIi5zcGVjaWFsQ2hhbmdlIixHW2NdKTtyZXR1cm4geC50ZXN0KHRoaXMubm9kZU5hbWUpfSx0ZWFyZG93bjpmdW5jdGlvbihhKXtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuc3BlY2lhbENoYW5nZSIpO3JldHVybiB4LnRlc3QodGhpcy5ub2RlTmFtZSl9fSxHPWYuZXZlbnQuc3BlY2lhbC5jaGFuZ2UuZmlsdGVycyxHLmZvY3VzPUcuYmVmb3JlYWN0aXZhdGV9Zi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxmLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZShhKXt2YXIgYz1mLmV2ZW50LmZpeChhKTtjLnR5cGU9YixjLm9yaWdpbmFsRXZlbnQ9e30sZi5ldmVudC50cmlnZ2VyKGMsbnVsbCxjLnRhcmdldCksYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYS5wcmV2ZW50RGVmYXVsdCgpfXZhciBkPTA7Zi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe2QrKz09PTAmJmMuYWRkRXZlbnRMaXN0ZW5lcihhLGUsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpey0tZD09PTAmJmMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGUsITApfX19KSxmLmVhY2goWyJiaW5kIiwib25lIl0sZnVuY3Rpb24oYSxjKXtmLmZuW2NdPWZ1bmN0aW9uKGEsZCxlKXt2YXIgZztpZih0eXBlb2YgYT09Im9iamVjdCIpe2Zvcih2YXIgaCBpbiBhKXRoaXNbY10oaCxkLGFbaF0sZSk7cmV0dXJuIHRoaXN9aWYoYXJndW1lbnRzLmxlbmd0aD09PTJ8fGQ9PT0hMSllPWQsZD1iO2M9PT0ib25lIj8oZz1mdW5jdGlvbihhKXtmKHRoaXMpLnVuYmluZChhLGcpO3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZy5ndWlkPWUuZ3VpZHx8Zi5ndWlkKyspOmc9ZTtpZihhPT09InVubG9hZCImJmMhPT0ib25lIil0aGlzLm9uZShhLGQsZSk7ZWxzZSBmb3IodmFyIGk9MCxqPXRoaXMubGVuZ3RoO2k8ajtpKyspZi5ldmVudC5hZGQodGhpc1tpXSxhLGcsZCk7cmV0dXJuIHRoaXN9fSksZi5mbi5leHRlbmQoe3VuYmluZDpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhPT0ib2JqZWN0IiYmIWEucHJldmVudERlZmF1bHQpZm9yKHZhciBjIGluIGEpdGhpcy51bmJpbmQoYyxhW2NdKTtlbHNlIGZvcih2YXIgZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKylmLmV2ZW50LnJlbW92ZSh0aGlzW2RdLGEsYik7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmxpdmUoYixjLGQsYSl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLnVuYmluZCgibGl2ZSIpOnRoaXMuZGllKGIsbnVsbCxjLGEpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXJldHVybiBmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0sITApfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9YS5ndWlkfHxmLmd1aWQrKyxkPTAsZT1mdW5jdGlvbihjKXt2YXIgZT0oZi5kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCl8fDApJWQ7Zi5kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxlKzEpLGMucHJldmVudERlZmF1bHQoKTtyZXR1cm4gYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pO3ZhciBLPXtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQiLG1vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifTtmLmVhY2goWyJsaXZlIiwiZGllIl0sZnVuY3Rpb24oYSxjKXtmLmZuW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe3ZhciBoLGk9MCxqLGssbCxtPWd8fHRoaXMuc2VsZWN0b3Isbj1nP3RoaXM6Zih0aGlzLmNvbnRleHQpO2lmKHR5cGVvZiBhPT0ib2JqZWN0IiYmIWEucHJldmVudERlZmF1bHQpe2Zvcih2YXIgbyBpbiBhKW5bY10obyxkLGFbb10sbSk7cmV0dXJuIHRoaXN9aWYoYz09PSJkaWUiJiYhYSYmZyYmZy5jaGFyQXQoMCk9PT0iLiIpe24udW5iaW5kKGcpO3JldHVybiB0aGlzfWlmKGQ9PT0hMXx8Zi5pc0Z1bmN0aW9uKGQpKWU9ZHx8QyxkPWI7YT0oYXx8IiIpLnNwbGl0KCIgIik7d2hpbGUoKGg9YVtpKytdKSE9bnVsbCl7aj13LmV4ZWMoaCksaz0iIixqJiYoaz1qWzBdLGg9aC5yZXBsYWNlKHcsIiIpKTtpZihoPT09ImhvdmVyIil7YS5wdXNoKCJtb3VzZWVudGVyIitrLCJtb3VzZWxlYXZlIitrKTtjb250aW51ZX1sPWgsS1toXT8oYS5wdXNoKEtbaF0rayksaD1oK2spOmg9KEtbaF18fGgpK2s7aWYoYz09PSJsaXZlIilmb3IodmFyIHA9MCxxPW4ubGVuZ3RoO3A8cTtwKyspZi5ldmVudC5hZGQobltwXSwibGl2ZS4iK00oaCxtKSx7ZGF0YTpkLHNlbGVjdG9yOm0saGFuZGxlcjplLG9yaWdUeXBlOmgsb3JpZ0hhbmRsZXI6ZSxwcmVUeXBlOmx9KTtlbHNlIG4udW5iaW5kKCJsaXZlLiIrTShoLG0pLGUpfXJldHVybiB0aGlzfX0pLGYuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLmJpbmQoYixhLGMpOnRoaXMudHJpZ2dlcihiKX0sZi5hdHRyRm4mJihmLmF0dHJGbltiXT0hMCl9KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHUoYSxiLGMsZCxlLGYpe2Zvcih2YXIgZz0wLGg9ZC5sZW5ndGg7ZzxoO2crKyl7dmFyIGk9ZFtnXTtpZihpKXt2YXIgaj0hMTtpPWlbYV07d2hpbGUoaSl7aWYoaS5zaXpjYWNoZT09PWMpe2o9ZFtpLnNpenNldF07YnJlYWt9aWYoaS5ub2RlVHlwZT09PTEpe2Z8fChpLnNpemNhY2hlPWMsaS5zaXpzZXQ9Zyk7aWYodHlwZW9mIGIhPSJzdHJpbmciKXtpZihpPT09Yil7aj0hMDticmVha319ZWxzZSBpZihrLmZpbHRlcihiLFtpXSkubGVuZ3RoPjApe2o9aTticmVha319aT1pW2FdfWRbZ109an19fWZ1bmN0aW9uIHQoYSxiLGMsZCxlLGYpe2Zvcih2YXIgZz0wLGg9ZC5sZW5ndGg7ZzxoO2crKyl7dmFyIGk9ZFtnXTtpZihpKXt2YXIgaj0hMTtpPWlbYV07d2hpbGUoaSl7aWYoaS5zaXpjYWNoZT09PWMpe2o9ZFtpLnNpenNldF07YnJlYWt9aS5ub2RlVHlwZT09PTEmJiFmJiYoaS5zaXpjYWNoZT1jLGkuc2l6c2V0PWcpO2lmKGkubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIpe2o9aTticmVha31pPWlbYV19ZFtnXT1qfX19dmFyIGE9LygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZyxkPTAsZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGc9ITEsaD0hMCxpPS9cXC9nLGo9L1xXLztbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7aD0hMTtyZXR1cm4gMH0pO3ZhciBrPWZ1bmN0aW9uKGIsZCxmLGcpe2Y9Znx8W10sZD1kfHxjO3ZhciBoPWQ7aWYoZC5ub2RlVHlwZSE9PTEmJmQubm9kZVR5cGUhPT05KXJldHVybltdO2lmKCFifHx0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIGY7dmFyIGksaixuLG8scSxyLHMsdCx1PSEwLHc9ay5pc1hNTChkKSx4PVtdLHk9Yjtkb3thLmV4ZWMoIiIpLGk9YS5leGVjKHkpO2lmKGkpe3k9aVszXSx4LnB1c2goaVsxXSk7aWYoaVsyXSl7bz1pWzNdO2JyZWFrfX19d2hpbGUoaSk7aWYoeC5sZW5ndGg+MSYmbS5leGVjKGIpKWlmKHgubGVuZ3RoPT09MiYmbC5yZWxhdGl2ZVt4WzBdXSlqPXYoeFswXSt4WzFdLGQpO2Vsc2V7aj1sLnJlbGF0aXZlW3hbMF1dP1tkXTprKHguc2hpZnQoKSxkKTt3aGlsZSh4Lmxlbmd0aCliPXguc2hpZnQoKSxsLnJlbGF0aXZlW2JdJiYoYis9eC5zaGlmdCgpKSxqPXYoYixqKX1lbHNleyFnJiZ4Lmxlbmd0aD4xJiZkLm5vZGVUeXBlPT09OSYmIXcmJmwubWF0Y2guSUQudGVzdCh4WzBdKSYmIWwubWF0Y2guSUQudGVzdCh4W3gubGVuZ3RoLTFdKSYmKHE9ay5maW5kKHguc2hpZnQoKSxkLHcpLGQ9cS5leHByP2suZmlsdGVyKHEuZXhwcixxLnNldClbMF06cS5zZXRbMF0pO2lmKGQpe3E9Zz97ZXhwcjp4LnBvcCgpLHNldDpwKGcpfTprLmZpbmQoeC5wb3AoKSx4Lmxlbmd0aD09PTEmJih4WzBdPT09In4ifHx4WzBdPT09IisiKSYmZC5wYXJlbnROb2RlP2QucGFyZW50Tm9kZTpkLHcpLGo9cS5leHByP2suZmlsdGVyKHEuZXhwcixxLnNldCk6cS5zZXQseC5sZW5ndGg+MD9uPXAoaik6dT0hMTt3aGlsZSh4Lmxlbmd0aClyPXgucG9wKCkscz1yLGwucmVsYXRpdmVbcl0/cz14LnBvcCgpOnI9IiIscz09bnVsbCYmKHM9ZCksbC5yZWxhdGl2ZVtyXShuLHMsdyl9ZWxzZSBuPXg9W119bnx8KG49aiksbnx8ay5lcnJvcihyfHxiKTtpZihlLmNhbGwobik9PT0iW29iamVjdCBBcnJheV0iKWlmKCF1KWYucHVzaC5hcHBseShmLG4pO2Vsc2UgaWYoZCYmZC5ub2RlVHlwZT09PTEpZm9yKHQ9MDtuW3RdIT1udWxsO3QrKyluW3RdJiYoblt0XT09PSEwfHxuW3RdLm5vZGVUeXBlPT09MSYmay5jb250YWlucyhkLG5bdF0pKSYmZi5wdXNoKGpbdF0pO2Vsc2UgZm9yKHQ9MDtuW3RdIT1udWxsO3QrKyluW3RdJiZuW3RdLm5vZGVUeXBlPT09MSYmZi5wdXNoKGpbdF0pO2Vsc2UgcChuLGYpO28mJihrKG8saCxmLGcpLGsudW5pcXVlU29ydChmKSk7cmV0dXJuIGZ9O2sudW5pcXVlU29ydD1mdW5jdGlvbihhKXtpZihyKXtnPWgsYS5zb3J0KHIpO2lmKGcpZm9yKHZhciBiPTE7YjxhLmxlbmd0aDtiKyspYVtiXT09PWFbYi0xXSYmYS5zcGxpY2UoYi0tLDEpfXJldHVybiBhfSxrLm1hdGNoZXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gayhhLG51bGwsbnVsbCxiKX0say5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gayhiLG51bGwsbnVsbCxbYV0pLmxlbmd0aD4wfSxrLmZpbmQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKCFhKXJldHVybltdO2Zvcih2YXIgZT0wLGY9bC5vcmRlci5sZW5ndGg7ZTxmO2UrKyl7dmFyIGcsaD1sLm9yZGVyW2VdO2lmKGc9bC5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSl7dmFyIGo9Z1sxXTtnLnNwbGljZSgxLDEpO2lmKGouc3Vic3RyKGoubGVuZ3RoLTEpIT09IlxcIil7Z1sxXT0oZ1sxXXx8IiIpLnJlcGxhY2UoaSwiIiksZD1sLmZpbmRbaF0oZyxiLGMpO2lmKGQhPW51bGwpe2E9YS5yZXBsYWNlKGwubWF0Y2hbaF0sIiIpO2JyZWFrfX19fWR8fChkPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6W10pO3JldHVybntzZXQ6ZCxleHByOmF9fSxrLmZpbHRlcj1mdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGg9YSxpPVtdLGo9YyxtPWMmJmNbMF0mJmsuaXNYTUwoY1swXSk7d2hpbGUoYSYmYy5sZW5ndGgpe2Zvcih2YXIgbiBpbiBsLmZpbHRlcilpZigoZj1sLmxlZnRNYXRjaFtuXS5leGVjKGEpKSE9bnVsbCYmZlsyXSl7dmFyIG8scCxxPWwuZmlsdGVyW25dLHI9ZlsxXTtnPSExLGYuc3BsaWNlKDEsMSk7aWYoci5zdWJzdHIoci5sZW5ndGgtMSk9PT0iXFwiKWNvbnRpbnVlO2o9PT1pJiYoaT1bXSk7aWYobC5wcmVGaWx0ZXJbbl0pe2Y9bC5wcmVGaWx0ZXJbbl0oZixqLGQsaSxlLG0pO2lmKCFmKWc9bz0hMDtlbHNlIGlmKGY9PT0hMCljb250aW51ZX1pZihmKWZvcih2YXIgcz0wOyhwPWpbc10pIT1udWxsO3MrKylpZihwKXtvPXEocCxmLHMsaik7dmFyIHQ9ZV4hIW87ZCYmbyE9bnVsbD90P2c9ITA6altzXT0hMTp0JiYoaS5wdXNoKHApLGc9ITApfWlmKG8hPT1iKXtkfHwoaj1pKSxhPWEucmVwbGFjZShsLm1hdGNoW25dLCIiKTtpZighZylyZXR1cm5bXTticmVha319aWYoYT09PWgpaWYoZz09bnVsbClrLmVycm9yKGEpO2Vsc2UgYnJlYWs7aD1hfXJldHVybiBqfSxrLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYX07dmFyIGw9ay5zZWxlY3RvcnM9e29yZGVyOlsiSUQiLCJOQU1FIiwiVEFHIl0sbWF0Y2g6e0lEOi8jKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxDTEFTUzovXC4oKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLE5BTUU6L1xbbmFtZT1bJyJdKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVsnIl0qXF0vLEFUVFI6L1xbXHMqKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspXHMqKD86KFxTPz0pXHMqKD86KFsnIl0pKC4qPylcM3woIz8oPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikqKXwpfClccypcXS8sVEFHOi9eKCg/Oltcd1x1MDBjMC1cdUZGRkZcKlwtXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XChccyooZXZlbnxvZGR8KD86WytcLV0/XGQrfCg/OlsrXC1dP1xkKik/blxzKig/OlsrXC1dXHMqXGQrKT8pKVxzKlwpKT8vLFBPUzovOihudGh8ZXF8Z3R8bHR8Zmlyc3R8bGFzdHxldmVufG9kZCkoPzpcKChcZCopXCkpPyg/PVteXC1dfCQpLyxQU0VVRE86LzooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykoPzpcKChbJyJdPykoKD86XChbXlwpXStcKXxbXlwoXCldKikrKVwyXCkpPy99LGxlZnRNYXRjaDp7fSxhdHRyTWFwOnsiY2xhc3MiOiJjbGFzc05hbWUiLCJmb3IiOiJodG1sRm9yIn0sYXR0ckhhbmRsZTp7aHJlZjpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInR5cGUiKX19LHJlbGF0aXZlOnsiKyI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYj09InN0cmluZyIsZD1jJiYhai50ZXN0KGIpLGU9YyYmIWQ7ZCYmKGI9Yi50b0xvd2VyQ2FzZSgpKTtmb3IodmFyIGY9MCxnPWEubGVuZ3RoLGg7ZjxnO2YrKylpZihoPWFbZl0pe3doaWxlKChoPWgucHJldmlvdXNTaWJsaW5nKSYmaC5ub2RlVHlwZSE9PTEpO2FbZl09ZXx8aCYmaC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yj9ofHwhMTpoPT09Yn1lJiZrLmZpbHRlcihiLGEsITApfSwiPiI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXR5cGVvZiBiPT0ic3RyaW5nIixlPTAsZj1hLmxlbmd0aDtpZihkJiYhai50ZXN0KGIpKXtiPWIudG9Mb3dlckNhc2UoKTtmb3IoO2U8ZjtlKyspe2M9YVtlXTtpZihjKXt2YXIgZz1jLnBhcmVudE5vZGU7YVtlXT1nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2c6ITF9fX1lbHNle2Zvcig7ZTxmO2UrKyljPWFbZV0sYyYmKGFbZV09ZD9jLnBhcmVudE5vZGU6Yy5wYXJlbnROb2RlPT09Yik7ZCYmay5maWx0ZXIoYixhLCEwKX19LCIiOmZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmPWQrKyxnPXU7dHlwZW9mIGI9PSJzdHJpbmciJiYhai50ZXN0KGIpJiYoYj1iLnRvTG93ZXJDYXNlKCksZT1iLGc9dCksZygicGFyZW50Tm9kZSIsYixmLGEsZSxjKX0sIn4iOmZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmPWQrKyxnPXU7dHlwZW9mIGI9PSJzdHJpbmciJiYhai50ZXN0KGIpJiYoYj1iLnRvTG93ZXJDYXNlKCksZT1iLGc9dCksZygicHJldmlvdXNTaWJsaW5nIixiLGYsYSxlLGMpfX0sZmluZDp7SUQ6ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT0idW5kZWZpbmVkIiYmIWMpe3ZhciBkPWIuZ2V0RWxlbWVudEJ5SWQoYVsxXSk7cmV0dXJuIGQmJmQucGFyZW50Tm9kZT9bZF06W119fSxOQU1FOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeU5hbWUhPSJ1bmRlZmluZWQiKXt2YXIgYz1bXSxkPWIuZ2V0RWxlbWVudHNCeU5hbWUoYVsxXSk7Zm9yKHZhciBlPTAsZj1kLmxlbmd0aDtlPGY7ZSsrKWRbZV0uZ2V0QXR0cmlidXRlKCJuYW1lIik9PT1hWzFdJiZjLnB1c2goZFtlXSk7cmV0dXJuIGMubGVuZ3RoPT09MD9udWxsOmN9fSxUQUc6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCIpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYVsxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXthPSIgIithWzFdLnJlcGxhY2UoaSwiIikrIiAiO2lmKGYpcmV0dXJuIGE7Zm9yKHZhciBnPTAsaDsoaD1iW2ddKSE9bnVsbDtnKyspaCYmKGVeKGguY2xhc3NOYW1lJiYoIiAiK2guY2xhc3NOYW1lKyIgIikucmVwbGFjZSgvW1x0XG5ccl0vZywiICIpLmluZGV4T2YoYSk+PTApP2N8fGQucHVzaChoKTpjJiYoYltnXT0hMSkpO3JldHVybiExfSxJRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXS5yZXBsYWNlKGksIiIpfSxUQUc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVsxXS5yZXBsYWNlKGksIiIpLnRvTG93ZXJDYXNlKCl9LENISUxEOmZ1bmN0aW9uKGEpe2lmKGFbMV09PT0ibnRoIil7YVsyXXx8ay5lcnJvcihhWzBdKSxhWzJdPWFbMl0ucmVwbGFjZSgvXlwrfFxzKi9nLCIiKTt2YXIgYj0vKC0/KShcZCopKD86bihbK1wtXT9cZCopKT8vLmV4ZWMoYVsyXT09PSJldmVuIiYmIjJuInx8YVsyXT09PSJvZGQiJiYiMm4rMSJ8fCEvXEQvLnRlc3QoYVsyXSkmJiIwbisiK2FbMl18fGFbMl0pO2FbMl09YlsxXSsoYlsyXXx8MSktMCxhWzNdPWJbM10tMH1lbHNlIGFbMl0mJmsuZXJyb3IoYVswXSk7YVswXT1kKys7cmV0dXJuIGF9LEFUVFI6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPWFbMV09YVsxXS5yZXBsYWNlKGksIiIpOyFmJiZsLmF0dHJNYXBbZ10mJihhWzFdPWwuYXR0ck1hcFtnXSksYVs0XT0oYVs0XXx8YVs1XXx8IiIpLnJlcGxhY2UoaSwiIiksYVsyXT09PSJ+PSImJihhWzRdPSIgIithWzRdKyIgIik7cmV0dXJuIGF9LFBTRVVETzpmdW5jdGlvbihiLGMsZCxlLGYpe2lmKGJbMV09PT0ibm90IilpZigoYS5leGVjKGJbM10pfHwiIikubGVuZ3RoPjF8fC9eXHcvLnRlc3QoYlszXSkpYlszXT1rKGJbM10sbnVsbCxudWxsLGMpO2Vsc2V7dmFyIGc9ay5maWx0ZXIoYlszXSxjLGQsITBeZik7ZHx8ZS5wdXNoLmFwcGx5KGUsZyk7cmV0dXJuITF9ZWxzZSBpZihsLm1hdGNoLlBPUy50ZXN0KGJbMF0pfHxsLm1hdGNoLkNISUxELnRlc3QoYlswXSkpcmV0dXJuITA7cmV0dXJuIGJ9LFBPUzpmdW5jdGlvbihhKXthLnVuc2hpZnQoITApO3JldHVybiBhfX0sZmlsdGVyczp7ZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExJiZhLnR5cGUhPT0iaGlkZGVuIn0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5jaGVja2VkPT09ITB9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7cmV0dXJuIGEuc2VsZWN0ZWQ9PT0hMH0scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiEhYS5maXJzdENoaWxkfSxlbXB0eTpmdW5jdGlvbihhKXtyZXR1cm4hYS5maXJzdENoaWxkfSxoYXM6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiEhayhjWzNdLGEpLmxlbmd0aH0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybi9oXGQvaS50ZXN0KGEubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0QXR0cmlidXRlKCJ0eXBlIiksYz1hLnR5cGU7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJ0ZXh0Ij09PWMmJihiPT09Y3x8Yj09PW51bGwpfSxyYWRpbzpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInJhZGlvIj09PWEudHlwZX0sY2hlY2tib3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJjaGVja2JveCI9PT1hLnR5cGV9LGZpbGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJmaWxlIj09PWEudHlwZX0scGFzc3dvcmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJwYXNzd29yZCI9PT1hLnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKGI9PT0iaW5wdXQifHxiPT09ImJ1dHRvbiIpJiYic3VibWl0Ij09PWEudHlwZX0saW1hZ2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJpbWFnZSI9PT1hLnR5cGV9LHJlc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJyZXNldCI9PT1hLnR5cGV9LGJ1dHRvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGI9PT0iaW5wdXQiJiYiYnV0dG9uIj09PWEudHlwZXx8Yj09PSJidXR0b24ifSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLnRlc3QoYS5ub2RlTmFtZSl9LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09YS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9fSxzZXRGaWx0ZXJzOntmaXJzdDpmdW5jdGlvbihhLGIpe3JldHVybiBiPT09MH0sbGFzdDpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYj09PWQubGVuZ3RoLTF9LGV2ZW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MH0sb2RkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIlMj09PTF9LGx0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYjxjWzNdLTB9LGd0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYj5jWzNdLTB9LG50aDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGNbM10tMD09PWJ9LGVxOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn19LGZpbHRlcjp7UFNFVURPOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWJbMV0sZj1sLmZpbHRlcnNbZV07aWYoZilyZXR1cm4gZihhLGMsYixkKTtpZihlPT09ImNvbnRhaW5zIilyZXR1cm4oYS50ZXh0Q29udGVudHx8YS5pbm5lclRleHR8fGsuZ2V0VGV4dChbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfWsuZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGM9YlsxXSxkPWE7c3dpdGNoKGMpe2Nhc2Uib25seSI6Y2FzZSJmaXJzdCI6d2hpbGUoZD1kLnByZXZpb3VzU2libGluZylpZihkLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtpZihjPT09ImZpcnN0IilyZXR1cm4hMDtkPWE7Y2FzZSJsYXN0Ijp3aGlsZShkPWQubmV4dFNpYmxpbmcpaWYoZC5ub2RlVHlwZT09PTEpcmV0dXJuITE7cmV0dXJuITA7Y2FzZSJudGgiOnZhciBlPWJbMl0sZj1iWzNdO2lmKGU9PT0xJiZmPT09MClyZXR1cm4hMDt2YXIgZz1iWzBdLGg9YS5wYXJlbnROb2RlO2lmKGgmJihoLnNpemNhY2hlIT09Z3x8IWEubm9kZUluZGV4KSl7dmFyIGk9MDtmb3IoZD1oLmZpcnN0Q2hpbGQ7ZDtkPWQubmV4dFNpYmxpbmcpZC5ub2RlVHlwZT09PTEmJihkLm5vZGVJbmRleD0rK2kpO2guc2l6Y2FjaGU9Z312YXIgaj1hLm5vZGVJbmRleC1mO3JldHVybiBlPT09MD9qPT09MDpqJWU9PT0wJiZqL2U+PTB9fSxJRDpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVUeXBlPT09MSYmYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifSxUQUc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PSIqIiYmYS5ub2RlVHlwZT09PTF8fGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bC5hdHRySGFuZGxlW2NdP2wuYXR0ckhhbmRsZVtjXShhKTphW2NdIT1udWxsP2FbY106YS5nZXRBdHRyaWJ1dGUoYyksZT1kKyIiLGY9YlsyXSxnPWJbNF07cmV0dXJuIGQ9PW51bGw/Zj09PSIhPSI6Zj09PSI9Ij9lPT09ZzpmPT09Iio9Ij9lLmluZGV4T2YoZyk+PTA6Zj09PSJ+PSI/KCIgIitlKyIgIikuaW5kZXhPZihnKT49MDpnP2Y9PT0iIT0iP2UhPT1nOmY9PT0iXj0iP2UuaW5kZXhPZihnKT09PTA6Zj09PSIkPSI/ZS5zdWJzdHIoZS5sZW5ndGgtZy5sZW5ndGgpPT09ZzpmPT09Inw9Ij9lPT09Z3x8ZS5zdWJzdHIoMCxnLmxlbmd0aCsxKT09PWcrIi0iOiExOmUmJmQhPT0hMX0sUE9TOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWJbMl0sZj1sLnNldEZpbHRlcnNbZV07aWYoZilyZXR1cm4gZihhLGMsYixkKX19fSxtPWwubWF0Y2guUE9TLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4iXFwiKyhiLTArMSl9O2Zvcih2YXIgbyBpbiBsLm1hdGNoKWwubWF0Y2hbb109bmV3IFJlZ0V4cChsLm1hdGNoW29dLnNvdXJjZSsvKD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpLGwubGVmdE1hdGNoW29dPW5ldyBSZWdFeHAoLyheKD86LnxccnxcbikqPykvLnNvdXJjZStsLm1hdGNoW29dLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csbikpO3ZhciBwPWZ1bmN0aW9uKGEsYil7YT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLDApO2lmKGIpe2IucHVzaC5hcHBseShiLGEpO3JldHVybiBifXJldHVybiBhfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKVswXS5ub2RlVHlwZX1jYXRjaChxKXtwPWZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPWJ8fFtdO2lmKGUuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSIpQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxhKTtlbHNlIGlmKHR5cGVvZiBhLmxlbmd0aD09Im51bWJlciIpZm9yKHZhciBmPWEubGVuZ3RoO2M8ZjtjKyspZC5wdXNoKGFbY10pO2Vsc2UgZm9yKDthW2NdO2MrKylkLnB1c2goYVtjXSk7cmV0dXJuIGR9fXZhciByLHM7Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/cj1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtnPSEwO3JldHVybiAwfWlmKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9ufHwhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbilyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxO3JldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjQ/LTE6MX06KHI9ZnVuY3Rpb24oYSxiKXtpZihhPT09Yil7Zz0hMDtyZXR1cm4gMH1pZihhLnNvdXJjZUluZGV4JiZiLnNvdXJjZUluZGV4KXJldHVybiBhLnNvdXJjZUluZGV4LWIuc291cmNlSW5kZXg7dmFyIGMsZCxlPVtdLGY9W10saD1hLnBhcmVudE5vZGUsaT1iLnBhcmVudE5vZGUsaj1oO2lmKGg9PT1pKXJldHVybiBzKGEsYik7aWYoIWgpcmV0dXJuLTE7aWYoIWkpcmV0dXJuIDE7d2hpbGUoaillLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7aj1pO3doaWxlKGopZi51bnNoaWZ0KGopLGo9ai5wYXJlbnROb2RlO2M9ZS5sZW5ndGgsZD1mLmxlbmd0aDtmb3IodmFyIGs9MDtrPGMmJms8ZDtrKyspaWYoZVtrXSE9PWZba10pcmV0dXJuIHMoZVtrXSxmW2tdKTtyZXR1cm4gaz09PWM/cyhhLGZba10sLTEpOnMoZVtrXSxiLDEpfSxzPWZ1bmN0aW9uKGEsYixjKXtpZihhPT09YilyZXR1cm4gYzt2YXIgZD1hLm5leHRTaWJsaW5nO3doaWxlKGQpe2lmKGQ9PT1iKXJldHVybi0xO2Q9ZC5uZXh0U2libGluZ31yZXR1cm4gMX0pLGsuZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYj0iIixjO2Zvcih2YXIgZD0wO2FbZF07ZCsrKWM9YVtkXSxjLm5vZGVUeXBlPT09M3x8Yy5ub2RlVHlwZT09PTQ/Yis9Yy5ub2RlVmFsdWU6Yy5ub2RlVHlwZSE9PTgmJihiKz1rLmdldFRleHQoYy5jaGlsZE5vZGVzKSk7cmV0dXJuIGJ9LGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJzY3JpcHQiKyhuZXcgRGF0ZSkuZ2V0VGltZSgpLGU9Yy5kb2N1bWVudEVsZW1lbnQ7YS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrZCsiJy8+IixlLmluc2VydEJlZm9yZShhLGUuZmlyc3RDaGlsZCksYy5nZXRFbGVtZW50QnlJZChkKSYmKGwuZmluZC5JRD1mdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGMuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhZCl7dmFyIGU9Yy5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZT9lLmlkPT09YVsxXXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9InVuZGVmaW5lZCImJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWU9PT1hWzFdP1tlXTpiOltdfX0sbC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBhLm5vZGVUeXBlPT09MSYmYyYmYy5ub2RlVmFsdWU9PT1ifSksZS5yZW1vdmVDaGlsZChhKSxlPWE9bnVsbH0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5hcHBlbmRDaGlsZChjLmNyZWF0ZUNvbW1lbnQoIiIpKSxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoPjAmJihsLmZpbmQuVEFHPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKTtpZihhWzFdPT09IioiKXt2YXIgZD1bXTtmb3IodmFyIGU9MDtjW2VdO2UrKyljW2VdLm5vZGVUeXBlPT09MSYmZC5wdXNoKGNbZV0pO2M9ZH1yZXR1cm4gY30pLGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IixhLmZpcnN0Q2hpbGQmJnR5cGVvZiBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlIT0idW5kZWZpbmVkIiYmYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIT09IiMiJiYobC5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0pLGE9bnVsbH0oKSxjLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGE9ayxiPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZD0iX19zaXp6bGVfXyI7Yi5pbm5lckhUTUw9IjxwIGNsYXNzPSdURVNUJz48L3A+IjtpZighYi5xdWVyeVNlbGVjdG9yQWxsfHxiLnF1ZXJ5U2VsZWN0b3JBbGwoIi5URVNUIikubGVuZ3RoIT09MCl7az1mdW5jdGlvbihiLGUsZixnKXtlPWV8fGM7aWYoIWcmJiFrLmlzWE1MKGUpKXt2YXIgaD0vXihcdyskKXxeXC4oW1x3XC1dKyQpfF4jKFtcd1wtXSskKS8uZXhlYyhiKTtpZihoJiYoZS5ub2RlVHlwZT09PTF8fGUubm9kZVR5cGU9PT05KSl7aWYoaFsxXSlyZXR1cm4gcChlLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLGYpO2lmKGhbMl0mJmwuZmluZC5DTEFTUyYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBwKGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShoWzJdKSxmKX1pZihlLm5vZGVUeXBlPT09OSl7aWYoYj09PSJib2R5IiYmZS5ib2R5KXJldHVybiBwKFtlLmJvZHldLGYpO2lmKGgmJmhbM10pe3ZhciBpPWUuZ2V0RWxlbWVudEJ5SWQoaFszXSk7aWYoIWl8fCFpLnBhcmVudE5vZGUpcmV0dXJuIHAoW10sZik7aWYoaS5pZD09PWhbM10pcmV0dXJuIHAoW2ldLGYpfXRyeXtyZXR1cm4gcChlLnF1ZXJ5U2VsZWN0b3JBbGwoYiksZil9Y2F0Y2goail7fX1lbHNlIGlmKGUubm9kZVR5cGU9PT0xJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2JqZWN0Iil7dmFyIG09ZSxuPWUuZ2V0QXR0cmlidXRlKCJpZCIpLG89bnx8ZCxxPWUucGFyZW50Tm9kZSxyPS9eXHMqWyt+XS8udGVzdChiKTtuP289by5yZXBsYWNlKC8nL2csIlxcJCYiKTplLnNldEF0dHJpYnV0ZSgiaWQiLG8pLHImJnEmJihlPWUucGFyZW50Tm9kZSk7dHJ5e2lmKCFyfHxxKXJldHVybiBwKGUucXVlcnlTZWxlY3RvckFsbCgiW2lkPSciK28rIiddICIrYiksZil9Y2F0Y2gocyl7fWZpbmFsbHl7bnx8bS5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gYShiLGUsZixnKX07Zm9yKHZhciBlIGluIGEpa1tlXT1hW2VdO2I9bnVsbH19KCksZnVuY3Rpb24oKXt2YXIgYT1jLmRvY3VtZW50RWxlbWVudCxiPWEubWF0Y2hlc1NlbGVjdG9yfHxhLm1vek1hdGNoZXNTZWxlY3Rvcnx8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3I7aWYoYil7dmFyIGQ9IWIuY2FsbChjLmNyZWF0ZUVsZW1lbnQoImRpdiIpLCJkaXYiKSxlPSExO3RyeXtiLmNhbGwoYy5kb2N1bWVudEVsZW1lbnQsIlt0ZXN0IT0nJ106c2l6emxlIil9Y2F0Y2goZil7ZT0hMH1rLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGMpe2M9Yy5yZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCI9JyQxJ10iKTtpZighay5pc1hNTChhKSl0cnl7aWYoZXx8IWwubWF0Y2guUFNFVURPLnRlc3QoYykmJiEvIT0vLnRlc3QoYykpe3ZhciBmPWIuY2FsbChhLGMpO2lmKGZ8fCFkfHxhLmRvY3VtZW50JiZhLmRvY3VtZW50Lm5vZGVUeXBlIT09MTEpcmV0dXJuIGZ9fWNhdGNoKGcpe31yZXR1cm4gayhjLG51bGwsbnVsbCxbYV0pLmxlbmd0aD4wfX19KCksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7aWYoISFhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCE9PTApe2EubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MSlyZXR1cm47bC5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpLGwuZmluZC5DTEFTUz1mdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9InVuZGVmaW5lZCImJiFjKXJldHVybiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYVsxXSl9LGE9bnVsbH19KCksYy5kb2N1bWVudEVsZW1lbnQuY29udGFpbnM/ay5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBhIT09YiYmKGEuY29udGFpbnM/YS5jb250YWlucyhiKTohMCl9OmMuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2suY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4hIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjE2KX06ay5jb250YWlucz1mdW5jdGlvbigpe3JldHVybiExfSxrLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPShhP2Eub3duZXJEb2N1bWVudHx8YTowKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGI/Yi5ub2RlTmFtZSE9PSJIVE1MIjohMX07dmFyIHY9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9IiIsZj1iLm5vZGVUeXBlP1tiXTpiO3doaWxlKGM9bC5tYXRjaC5QU0VVRE8uZXhlYyhhKSllKz1jWzBdLGE9YS5yZXBsYWNlKGwubWF0Y2guUFNFVURPLCIiKTthPWwucmVsYXRpdmVbYV0/YSsiKiI6YTtmb3IodmFyIGc9MCxoPWYubGVuZ3RoO2c8aDtnKyspayhhLGZbZ10sZCk7cmV0dXJuIGsuZmlsdGVyKGUsZCl9O2YuZmluZD1rLGYuZXhwcj1rLnNlbGVjdG9ycyxmLmV4cHJbIjoiXT1mLmV4cHIuZmlsdGVycyxmLnVuaXF1ZT1rLnVuaXF1ZVNvcnQsZi50ZXh0PWsuZ2V0VGV4dCxmLmlzWE1MRG9jPWsuaXNYTUwsZi5jb250YWlucz1rLmNvbnRhaW5zfSgpO3ZhciBOPS9VbnRpbCQvLE89L14oPzpwYXJlbnRzfHByZXZVbnRpbHxwcmV2QWxsKS8sUD0vLC8sUT0vXi5bXjojXFtcLixdKiQvLFI9QXJyYXkucHJvdG90eXBlLnNsaWNlLFM9Zi5leHByLm1hdGNoLlBPUyxUPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2YuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYyxkO2lmKHR5cGVvZiBhIT0ic3RyaW5nIilyZXR1cm4gZihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKylpZihmLmNvbnRhaW5zKGJbY10sdGhpcykpcmV0dXJuITB9KTt2YXIgZT10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsYSksZyxoLGk7Zm9yKGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspe2c9ZS5sZW5ndGgsZi5maW5kKGEsdGhpc1tjXSxlKTtpZihjPjApZm9yKGg9ZztoPGUubGVuZ3RoO2grKylmb3IoaT0wO2k8ZztpKyspaWYoZVtpXT09PWVbaF0pe2Uuc3BsaWNlKGgtLSwxKTticmVha319cmV0dXJuIGV9LGhhczpmdW5jdGlvbihhKXt2YXIgYj1mKGEpO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGM9Yi5sZW5ndGg7YTxjO2ErKylpZihmLmNvbnRhaW5zKHRoaXMsYlthXSkpcmV0dXJuITB9KX0sbm90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhWKHRoaXMsYSwhMSksIm5vdCIsYSl9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVih0aGlzLGEsITApLCJmaWx0ZXIiLGEpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIWEmJih0eXBlb2YgYT09InN0cmluZyI/Zi5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MDp0aGlzLmZpbHRlcihhKS5sZW5ndGg+MCl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkLGUsZz10aGlzWzBdO2lmKGYuaXNBcnJheShhKSl7dmFyIGgsaSxqPXt9LGs9MTtpZihnJiZhLmxlbmd0aCl7Zm9yKGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspaT1hW2RdLGpbaV18fChqW2ldPVMudGVzdChpKT9mKGksYnx8dGhpcy5jb250ZXh0KTppKTt3aGlsZShnJiZnLm93bmVyRG9jdW1lbnQmJmchPT1iKXtmb3IoaSBpbiBqKWg9altpXSwoaC5qcXVlcnk/aC5pbmRleChnKT4tMTpmKGcpLmlzKGgpKSYmYy5wdXNoKHtzZWxlY3RvcjppLGVsZW06ZyxsZXZlbDprfSk7Zz1nLnBhcmVudE5vZGUsaysrfX1yZXR1cm4gY312YXIgbD1TLnRlc3QoYSl8fHR5cGVvZiBhIT0ic3RyaW5nIj9mKGEsYnx8dGhpcy5jb250ZXh0KTowO2ZvcihkPTAsZT10aGlzLmxlbmd0aDtkPGU7ZCsrKXtnPXRoaXNbZF07d2hpbGUoZyl7aWYobD9sLmluZGV4KGcpPi0xOmYuZmluZC5tYXRjaGVzU2VsZWN0b3IoZyxhKSl7Yy5wdXNoKGcpO2JyZWFrfWc9Zy5wYXJlbnROb2RlO2lmKCFnfHwhZy5vd25lckRvY3VtZW50fHxnPT09Ynx8Zy5ub2RlVHlwZT09PTExKWJyZWFrfX1jPWMubGVuZ3RoPjE/Zi51bmlxdWUoYyk6YztyZXR1cm4gdGhpcy5wdXNoU3RhY2soYywiY2xvc2VzdCIsYSl9LGluZGV4OmZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5wcmV2QWxsKCkubGVuZ3RoOi0xO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gZi5pbkFycmF5KHRoaXNbMF0sZihhKSk7cmV0dXJuIGYuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFkZDpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhPT0ic3RyaW5nIj9mKGEsYik6Zi5tYWtlQXJyYXkoYSYmYS5ub2RlVHlwZT9bYV06YSksZD1mLm1lcmdlKHRoaXMuZ2V0KCksYyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFUoY1swXSl8fFUoZFswXSk/ZDpmLnVuaXF1ZShkKSl9LGFuZFNlbGY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZGQodGhpcy5wcmV2T2JqZWN0KX19KSxmLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJmIubm9kZVR5cGUhPT0xMT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubnRoKGEsMiwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuc2libGluZyhhLnBhcmVudE5vZGUuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGYuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OmYubWFrZUFycmF5KGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1mLm1hcCh0aGlzLGIsYyksZz1SLmNhbGwoYXJndW1lbnRzKTtOLnRlc3QoYSl8fChkPWMpLGQmJnR5cGVvZiBkPT0ic3RyaW5nIiYmKGU9Zi5maWx0ZXIoZCxlKSksZT10aGlzLmxlbmd0aD4xJiYhVFthXT9mLnVuaXF1ZShlKTplLCh0aGlzLmxlbmd0aD4xfHxQLnRlc3QoZCkpJiZPLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSxhLGcuam9pbigiLCIpKX19KSxmLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixjKXtjJiYoYT0iOm5vdCgiK2ErIikiKTtyZXR1cm4gYi5sZW5ndGg9PT0xP2YuZmluZC5tYXRjaGVzU2VsZWN0b3IoYlswXSxhKT9bYlswXV06W106Zi5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1bXSxnPWFbY107d2hpbGUoZyYmZy5ub2RlVHlwZSE9PTkmJihkPT09Ynx8Zy5ub2RlVHlwZSE9PTF8fCFmKGcpLmlzKGQpKSlnLm5vZGVUeXBlPT09MSYmZS5wdXNoKGcpLGc9Z1tjXTtyZXR1cm4gZX0sbnRoOmZ1bmN0aW9uKGEsYixjLGQpe2I9Ynx8MTt2YXIgZT0wO2Zvcig7YTthPWFbY10paWYoYS5ub2RlVHlwZT09PTEmJisrZT09PWIpYnJlYWs7cmV0dXJuIGF9LHNpYmxpbmc6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtmb3IoO2E7YT1hLm5leHRTaWJsaW5nKWEubm9kZVR5cGU9PT0xJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pO3ZhciBXPS8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csWD0vXlxzKy8sWT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLFo9LzwoW1x3Ol0rKS8sJD0vPHRib2R5L2ksXz0vPHwmIz9cdys7LyxiYT0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLGJiPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJjPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmQ9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmU9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07YmUub3B0Z3JvdXA9YmUub3B0aW9uLGJlLnRib2R5PWJlLnRmb290PWJlLmNvbGdyb3VwPWJlLmNhcHRpb249YmUudGhlYWQsYmUudGg9YmUudGQsZi5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8fChiZS5fZGVmYXVsdD1bMSwiZGl2PGRpdj4iLCI8L2Rpdj4iXSksZi5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKTtjLnRleHQoYS5jYWxsKHRoaXMsYixjLnRleHQoKSkpfSk7aWYodHlwZW9mIGEhPSJvYmplY3QiJiZhIT09YilyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxjKS5jcmVhdGVUZXh0Tm9kZShhKSk7cmV0dXJuIGYudGV4dCh0aGlzKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9ZihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGM9Yi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKHRoaXMpLndyYXBBbGwoYSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe2Yubm9kZU5hbWUodGhpcywiYm9keSIpfHxmKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWYoYXJndW1lbnRzWzBdKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmKGFyZ3VtZW50c1swXSkudG9BcnJheSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ7KGQ9dGhpc1tjXSkhPW51bGw7YysrKWlmKCFhfHxmLmZpbHRlcihhLFtkXSkubGVuZ3RoKSFiJiZkLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksZi5jbGVhbkRhdGEoW2RdKSksZC5wYXJlbnROb2RlJiZkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShXLCIiKTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJhLnRlc3QoYSkmJihmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCFYLnRlc3QoYSkpJiYhYmVbKFouZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKFksIjwkMT48LyQyPiIpO3RyeXtmb3IodmFyIGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspdGhpc1tjXS5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0YSh0aGlzW2NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHRoaXNbY10uaW5uZXJIVE1MPWEpfWNhdGNoKGUpe3RoaXMuZW1wdHkoKS5hcHBlbmQoYSl9fWVsc2UgZi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MuaHRtbChhLmNhbGwodGhpcyxiLGMuaHRtbCgpKSl9KTp0aGlzLmVtcHR5KCkuYXBwZW5kKGEpO3JldHVybiB0aGlzfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihhKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyksZD1jLmh0bWwoKTtjLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZCkpfSk7dHlwZW9mIGEhPSJzdHJpbmciJiYoYT1mKGEpLmRldGFjaCgpKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZXh0U2libGluZyxjPXRoaXMucGFyZW50Tm9kZTtmKHRoaXMpLnJlbW92ZSgpLGI/ZihiKS5iZWZvcmUoYSk6ZihjKS5hcHBlbmQoYSl9KX1yZXR1cm4gdGhpcy5sZW5ndGg/dGhpcy5wdXNoU3RhY2soZihmLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSk6dGhpc30sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpLGo9YVswXSxrPVtdO2lmKCFmLnN1cHBvcnQuY2hlY2tDbG9uZSYmYXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiBqPT0ic3RyaW5nIiYmYmIudGVzdChqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zih0aGlzKS5kb21NYW5pcChhLGMsZCwhMCl9KTtpZihmLmlzRnVuY3Rpb24oaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZz1mKHRoaXMpO2FbMF09ai5jYWxsKHRoaXMsZSxjP2cuaHRtbCgpOmIpLGcuZG9tTWFuaXAoYSxjLGQpfSk7aWYodGhpc1swXSl7aT1qJiZqLnBhcmVudE5vZGUsZi5zdXBwb3J0LnBhcmVudE5vZGUmJmkmJmkubm9kZVR5cGU9PT0xMSYmaS5jaGlsZE5vZGVzLmxlbmd0aD09PXRoaXMubGVuZ3RoP2U9e2ZyYWdtZW50Oml9OmU9Zi5idWlsZEZyYWdtZW50KGEsdGhpcyxrKSxoPWUuZnJhZ21lbnQsaC5jaGlsZE5vZGVzLmxlbmd0aD09PTE/Zz1oPWguZmlyc3RDaGlsZDpnPWguZmlyc3RDaGlsZDtpZihnKXtjPWMmJmYubm9kZU5hbWUoZywidHIiKTtmb3IodmFyIGw9MCxtPXRoaXMubGVuZ3RoLG49bS0xO2w8bTtsKyspZC5jYWxsKGM/YmYodGhpc1tsXSxnKTp0aGlzW2xdLGUuY2FjaGVhYmxlfHxtPjEmJmw8bj9mLmNsb25lKGgsITAsITApOmgpfWsubGVuZ3RoJiZmLmVhY2goayxibCl9cmV0dXJuIHRoaXN9fSksZi5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxnLGgsaTtiJiZiWzBdJiYoaT1iWzBdLm93bmVyRG9jdW1lbnR8fGJbMF0pLGkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8KGk9YyksYS5sZW5ndGg9PT0xJiZ0eXBlb2YgYVswXT09InN0cmluZyImJmFbMF0ubGVuZ3RoPDUxMiYmaT09PWMmJmFbMF0uY2hhckF0KDApPT09IjwiJiYhYmEudGVzdChhWzBdKSYmKGYuc3VwcG9ydC5jaGVja0Nsb25lfHwhYmIudGVzdChhWzBdKSkmJihnPSEwLGg9Zi5mcmFnbWVudHNbYVswXV0saCYmaCE9PTEmJihlPWgpKSxlfHwoZT1pLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmLmNsZWFuKGEsaSxlLGQpKSxnJiYoZi5mcmFnbWVudHNbYVswXV09aD9lOjEpOw0KcmV0dXJue2ZyYWdtZW50OmUsY2FjaGVhYmxlOmd9fSxmLmZyYWdtZW50cz17fSxmLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyl7dmFyIGQ9W10sZT1mKGMpLGc9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoZyYmZy5ub2RlVHlwZT09PTExJiZnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmZS5sZW5ndGg9PT0xKXtlW2JdKHRoaXNbMF0pO3JldHVybiB0aGlzfWZvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9KGg+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKTtmKGVbaF0pW2JdKGopLGQ9ZC5jb25jYXQoail9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQsYSxlLnNlbGVjdG9yKX19KSxmLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuY2xvbmVOb2RlKCEwKSxlLGcsaDtpZigoIWYuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCFmLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpJiYoYS5ub2RlVHlwZT09PTF8fGEubm9kZVR5cGU9PT0xMSkmJiFmLmlzWE1MRG9jKGEpKXtiaChhLGQpLGU9YmkoYSksZz1iaShkKTtmb3IoaD0wO2VbaF07KytoKWdbaF0mJmJoKGVbaF0sZ1toXSl9aWYoYil7YmcoYSxkKTtpZihjKXtlPWJpKGEpLGc9YmkoZCk7Zm9yKGg9MDtlW2hdOysraCliZyhlW2hdLGdbaF0pfX1lPWc9bnVsbDtyZXR1cm4gZH0sY2xlYW46ZnVuY3Rpb24oYSxiLGQsZSl7dmFyIGc7Yj1ifHxjLHR5cGVvZiBiLmNyZWF0ZUVsZW1lbnQ9PSJ1bmRlZmluZWQiJiYoYj1iLm93bmVyRG9jdW1lbnR8fGJbMF0mJmJbMF0ub3duZXJEb2N1bWVudHx8Yyk7dmFyIGg9W10saTtmb3IodmFyIGo9MCxrOyhrPWFbal0pIT1udWxsO2orKyl7dHlwZW9mIGs9PSJudW1iZXIiJiYoays9IiIpO2lmKCFrKWNvbnRpbnVlO2lmKHR5cGVvZiBrPT0ic3RyaW5nIilpZighXy50ZXN0KGspKWs9Yi5jcmVhdGVUZXh0Tm9kZShrKTtlbHNle2s9ay5yZXBsYWNlKFksIjwkMT48LyQyPiIpO3ZhciBsPShaLmV4ZWMoayl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbT1iZVtsXXx8YmUuX2RlZmF1bHQsbj1tWzBdLG89Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLmlubmVySFRNTD1tWzFdK2srbVsyXTt3aGlsZShuLS0pbz1vLmxhc3RDaGlsZDtpZighZi5zdXBwb3J0LnRib2R5KXt2YXIgcD0kLnRlc3QoaykscT1sPT09InRhYmxlIiYmIXA/by5maXJzdENoaWxkJiZvLmZpcnN0Q2hpbGQuY2hpbGROb2RlczptWzFdPT09Ijx0YWJsZT4iJiYhcD9vLmNoaWxkTm9kZXM6W107Zm9yKGk9cS5sZW5ndGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHFbaV0sInRib2R5IikmJiFxW2ldLmNoaWxkTm9kZXMubGVuZ3RoJiZxW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocVtpXSl9IWYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmWC50ZXN0KGspJiZvLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKFguZXhlYyhrKVswXSksby5maXJzdENoaWxkKSxrPW8uY2hpbGROb2Rlc312YXIgcjtpZighZi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpaWYoa1swXSYmdHlwZW9mIChyPWsubGVuZ3RoKT09Im51bWJlciIpZm9yKGk9MDtpPHI7aSsrKWJrKGtbaV0pO2Vsc2UgYmsoayk7ay5ub2RlVHlwZT9oLnB1c2goayk6aD1mLm1lcmdlKGgsayl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiYy50ZXN0KGEudHlwZSl9O2ZvcihqPTA7aFtqXTtqKyspaWYoZSYmZi5ub2RlTmFtZShoW2pdLCJzY3JpcHQiKSYmKCFoW2pdLnR5cGV8fGhbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWUucHVzaChoW2pdLnBhcmVudE5vZGU/aFtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhbal0pOmhbal0pO2Vsc2V7aWYoaFtqXS5ub2RlVHlwZT09PTEpe3ZhciBzPWYuZ3JlcChoW2pdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtoLnNwbGljZS5hcHBseShoLFtqKzEsMF0uY29uY2F0KHMpKX1kLmFwcGVuZENoaWxkKGhbal0pfX1yZXR1cm4gaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5leHBhbmRvLGc9Zi5ldmVudC5zcGVjaWFsLGg9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBpPTAsajsoaj1hW2ldKSE9bnVsbDtpKyspe2lmKGoubm9kZU5hbWUmJmYubm9EYXRhW2oubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1qW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdJiZkW2NdW2VdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGsgaW4gYi5ldmVudHMpZ1trXT9mLmV2ZW50LnJlbW92ZShqLGspOmYucmVtb3ZlRXZlbnQoaixrLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9aD9kZWxldGUgaltmLmV4cGFuZG9dOmoucmVtb3ZlQXR0cmlidXRlJiZqLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJtPS9hbHBoYVwoW14pXSpcKS9pLGJuPS9vcGFjaXR5PShbXildKikvLGJvPS8oW0EtWl18Xm1zKS9nLGJwPS9eLT9cZCsoPzpweCk/JC9pLGJxPS9eLT9cZC8sYnI9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnM9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ0PVsiTGVmdCIsIlJpZ2h0Il0sYnU9WyJUb3AiLCJCb3R0b20iXSxidixidyxieDtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YnYoYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1ici5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYnYpcmV0dXJuIGJ2KGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfX0pLGYuY3VyQ1NTPWYuY3NzLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlO2lmKGMpe2lmKGEub2Zmc2V0V2lkdGghPT0wKXJldHVybiBieShhLGIsZCk7Zi5zd2FwKGEsYnMsZnVuY3Rpb24oKXtlPWJ5KGEsYixkKX0pO3JldHVybiBlfX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJwLnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBibi50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc05hTihiKT8iIjoiYWxwaGEob3BhY2l0eT0iK2IqMTAwKyIpIixnPWQmJmQuZmlsdGVyfHxjLmZpbHRlcnx8IiI7Yy56b29tPTE7aWYoYj49MSYmZi50cmltKGcucmVwbGFjZShibSwiIikpPT09IiIpe2MucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKTtpZihkJiYhZC5maWx0ZXIpcmV0dXJufWMuZmlsdGVyPWJtLnRlc3QoZyk/Zy5yZXBsYWNlKGJtLGUpOmcrIiAiK2V9fSksZihmdW5jdGlvbigpe2Yuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0fHwoZi5jc3NIb29rcy5tYXJnaW5SaWdodD17Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM7Zi5zd2FwKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LGZ1bmN0aW9uKCl7Yj9jPWJ2KGEsIm1hcmdpbi1yaWdodCIsIm1hcmdpblJpZ2h0Iik6Yz1hLnN0eWxlLm1hcmdpblJpZ2h0fSk7cmV0dXJuIGN9fSl9KSxjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihidz1mdW5jdGlvbihhLGMpe3ZhciBkLGUsZztjPWMucmVwbGFjZShibywiLSQxIikudG9Mb3dlckNhc2UoKTtpZighKGU9YS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSlyZXR1cm4gYjtpZihnPWUuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpKWQ9Zy5nZXRQcm9wZXJ0eVZhbHVlKGMpLGQ9PT0iIiYmIWYuY29udGFpbnMoYS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhKSYmKGQ9Zi5zdHlsZShhLGMpKTtyZXR1cm4gZH0pLGMuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKGJ4PWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1hLmN1cnJlbnRTdHlsZSYmYS5jdXJyZW50U3R5bGVbYl0sZT1hLnJ1bnRpbWVTdHlsZSYmYS5ydW50aW1lU3R5bGVbYl0sZj1hLnN0eWxlOyFicC50ZXN0KGQpJiZicS50ZXN0KGQpJiYoYz1mLmxlZnQsZSYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZi5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmR8fDAsZD1mLnBpeGVsTGVmdCsicHgiLGYubGVmdD1jLGUmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWUpKTtyZXR1cm4gZD09PSIiPyJhdXRvIjpkfSksYnY9Ynd8fGJ4LGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFmLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZS5kaXNwbGF5fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KTt2YXIgYno9LyUyMC9nLGJBPS9cW1xdJC8sYkI9L1xyP1xuL2csYkM9LyMuKiQvLGJEPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYkU9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJGPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYkc9L14oPzpHRVR8SEVBRCkkLyxiSD0vXlwvXC8vLGJJPS9cPy8sYko9LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYks9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYkw9L1xzKy8sYk09LyhbPyZdKV89W14mXSovLGJOPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiTz1mLmZuLmxvYWQsYlA9e30sYlE9e30sYlIsYlMsYlQ9WyIqLyJdK1siKiJdO3RyeXtiUj1lLmhyZWZ9Y2F0Y2goYlUpe2JSPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJSLmhyZWY9IiIsYlI9YlIuaHJlZn1iUz1iTi5leGVjKGJSLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiTylyZXR1cm4gYk8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYkosIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJLLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJFLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJCLCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiQiwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJpbmQoYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2JYKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksYlgoYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlIsaXNMb2NhbDpiRi50ZXN0KGJTWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6YlR9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6YlYoYlApLGFqYXhUcmFuc3BvcnQ6YlYoYlEpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2JaKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWIkKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5yZXNvbHZlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5fRGVmZXJyZWQoKSxqPWQuc3RhdHVzQ29kZXx8e30sayxsPXt9LG09e30sbixvLHAscSxyLHM9MCx0LHUsdj17cmVhZHlTdGF0ZTowLHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYSxiKXtpZighcyl7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO2E9bVtjXT1tW2NdfHxhLGxbYV09Yn1yZXR1cm4gdGhpc30sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHM9PT0yP246bnVsbH0sZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oYSl7dmFyIGM7aWYocz09PTIpe2lmKCFvKXtvPXt9O3doaWxlKGM9YkQuZXhlYyhuKSlvW2NbMV0udG9Mb3dlckNhc2UoKV09Y1syXX1jPW9bYS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gYz09PWI/bnVsbDpjfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3N8fChkLm1pbWVUeXBlPWEpO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihhKXthPWF8fCJhYm9ydCIscCYmcC5hYm9ydChhKSx3KDAsYSk7cmV0dXJuIHRoaXN9fTtoLnByb21pc2Uodiksdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCx2LmNvbXBsZXRlPWkuZG9uZSx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJDLCIiKS5yZXBsYWNlKGJILGJTWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYkwpLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJOLmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iU1sxXSYmclsyXT09YlNbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiU1szXXx8KGJTWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGJXKGJQLGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJHLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJJLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYk0sIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYkkudGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiVCsiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1iVyhiUSxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7czwyP3coLTEseik6Zi5lcnJvcih6KX19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpYlkoZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYnosIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgYl89Zi5ub3coKSxjYT0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitiXysrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuY29udGVudFR5cGU9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmdHlwZW9mIGIuZGF0YT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjYS50ZXN0KGIudXJsKXx8ZSYmY2EudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2EsbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNhLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2I9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNkKWNkW2FdKDAsMSl9OiExLGNjPTAsY2Q7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNlKCl8fGNmKCl9OmNlLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKXtpZighYy5jcm9zc0RvbWFpbnx8Zi5zdXBwb3J0LmNvcnMpe3ZhciBkO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZyl7dmFyIGg9Yy54aHIoKSxpLGo7Yy51c2VybmFtZT9oLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMsYy51c2VybmFtZSxjLnBhc3N3b3JkKTpoLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMpO2lmKGMueGhyRmllbGRzKWZvcihqIGluIGMueGhyRmllbGRzKWhbal09Yy54aHJGaWVsZHNbal07Yy5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYy5taW1lVHlwZSksIWMuY3Jvc3NEb21haW4mJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihqIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGosZVtqXSl9Y2F0Y2goayl7fWguc2VuZChjLmhhc0NvbnRlbnQmJmMuZGF0YXx8bnVsbCksZD1mdW5jdGlvbihhLGUpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGQmJihlfHxoLnJlYWR5U3RhdGU9PT00KSl7ZD1iLGkmJihoLm9ucmVhZHlzdGF0ZWNoYW5nZT1mLm5vb3AsY2ImJmRlbGV0ZSBjZFtpXSk7aWYoZSloLnJlYWR5U3RhdGUhPT00JiZoLmFib3J0KCk7ZWxzZXtqPWguc3RhdHVzLGw9aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxtPXt9LG49aC5yZXNwb25zZVhNTCxuJiZuLmRvY3VtZW50RWxlbWVudCYmKG0ueG1sPW4pLG0udGV4dD1oLnJlc3BvbnNlVGV4dDt0cnl7az1oLnN0YXR1c1RleHR9Y2F0Y2gobyl7az0iIn0haiYmYy5pc0xvY2FsJiYhYy5jcm9zc0RvbWFpbj9qPW0udGV4dD8yMDA6NDA0Omo9PT0xMjIzJiYoaj0yMDQpfX19Y2F0Y2gocCl7ZXx8ZygtMSxwKX1tJiZnKGosayxtLGwpfSwhYy5hc3luY3x8aC5yZWFkeVN0YXRlPT09ND9kKCk6KGk9KytjYyxjYiYmKGNkfHwoY2Q9e30sZihhKS51bmxvYWQoY2IpKSxjZFtpXT1kKSxoLm9ucmVhZHlzdGF0ZWNoYW5nZT1kKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY2c9e30sY2gsY2ksY2o9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNrPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksY2wsY209W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV0sY247Zi5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjcSgic2hvdyIsMyksYSxiLGMpO2Zvcih2YXIgZz0wLGg9dGhpcy5sZW5ndGg7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9ZC5zdHlsZS5kaXNwbGF5LCFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZT09PSJub25lIiYmKGU9ZC5zdHlsZS5kaXNwbGF5PSIiKSxlPT09IiImJmYuY3NzKGQsImRpc3BsYXkiKT09PSJub25lIiYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixjcihkLm5vZGVOYW1lKSkpO2ZvcihnPTA7ZzxoO2crKyl7ZD10aGlzW2ddO2lmKGQuc3R5bGUpe2U9ZC5zdHlsZS5kaXNwbGF5O2lmKGU9PT0iInx8ZT09PSJub25lIilkLnN0eWxlLmRpc3BsYXk9Zi5fZGF0YShkLCJvbGRkaXNwbGF5Iil8fCIifX1yZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihhLGIsYyl7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjcSgiaGlkZSIsMyksYSxiLGMpO2Zvcih2YXIgZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKylpZih0aGlzW2RdLnN0eWxlKXt2YXIgZz1mLmNzcyh0aGlzW2RdLCJkaXNwbGF5Iik7ZyE9PSJub25lIiYmIWYuX2RhdGEodGhpc1tkXSwib2xkZGlzcGxheSIpJiZmLl9kYXRhKHRoaXNbZF0sIm9sZGRpc3BsYXkiLGcpfWZvcihkPTA7ZDxlO2QrKyl0aGlzW2RdLnN0eWxlJiYodGhpc1tkXS5zdHlsZS5kaXNwbGF5PSJub25lIik7cmV0dXJuIHRoaXN9LF90b2dnbGU6Zi5mbi50b2dnbGUsdG9nZ2xlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10eXBlb2YgYT09ImJvb2xlYW4iO2YuaXNGdW5jdGlvbihhKSYmZi5pc0Z1bmN0aW9uKGIpP3RoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YT09bnVsbHx8ZD90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1kP2E6Zih0aGlzKS5pcygiOmhpZGRlbiIpO2YodGhpcylbYj8ic2hvdyI6ImhpZGUiXSgpfSk6dGhpcy5hbmltYXRlKGNxKCJ0b2dnbGUiLDMpLGEsYixjKTtyZXR1cm4gdGhpc30sZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuc3BlZWQoYixjLGQpO2lmKGYuaXNFbXB0eU9iamVjdChhKSlyZXR1cm4gdGhpcy5lYWNoKGUuY29tcGxldGUsWyExXSk7YT1mLmV4dGVuZCh7fSxhKTtyZXR1cm4gdGhpc1tlLnF1ZXVlPT09ITE/ImVhY2giOiJxdWV1ZSJdKGZ1bmN0aW9uKCl7ZS5xdWV1ZT09PSExJiZmLl9tYXJrKHRoaXMpO3ZhciBiPWYuZXh0ZW5kKHt9LGUpLGM9dGhpcy5ub2RlVHlwZT09PTEsZD1jJiZmKHRoaXMpLmlzKCI6aGlkZGVuIiksZyxoLGksaixrLGwsbSxuLG87Yi5hbmltYXRlZFByb3BlcnRpZXM9e307Zm9yKGkgaW4gYSl7Zz1mLmNhbWVsQ2FzZShpKSxpIT09ZyYmKGFbZ109YVtpXSxkZWxldGUgYVtpXSksaD1hW2ddLGYuaXNBcnJheShoKT8oYi5hbmltYXRlZFByb3BlcnRpZXNbZ109aFsxXSxoPWFbZ109aFswXSk6Yi5hbmltYXRlZFByb3BlcnRpZXNbZ109Yi5zcGVjaWFsRWFzaW5nJiZiLnNwZWNpYWxFYXNpbmdbZ118fGIuZWFzaW5nfHwic3dpbmciO2lmKGg9PT0iaGlkZSImJmR8fGg9PT0ic2hvdyImJiFkKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7YyYmKGc9PT0iaGVpZ2h0Inx8Zz09PSJ3aWR0aCIpJiYoYi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV0sZi5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmYuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSImJihmLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dD8oaj1jcih0aGlzLm5vZGVOYW1lKSxqPT09ImlubGluZSI/dGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOih0aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZSIsdGhpcy5zdHlsZS56b29tPTEpKTp0aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKX1iLm92ZXJmbG93IT1udWxsJiYodGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7Zm9yKGkgaW4gYSlrPW5ldyBmLmZ4KHRoaXMsYixpKSxoPWFbaV0sY2oudGVzdChoKT9rW2g9PT0idG9nZ2xlIj9kPyJzaG93IjoiaGlkZSI6aF0oKToobD1jay5leGVjKGgpLG09ay5jdXIoKSxsPyhuPXBhcnNlRmxvYXQobFsyXSksbz1sWzNdfHwoZi5jc3NOdW1iZXJbaV0/IiI6InB4IiksbyE9PSJweCImJihmLnN0eWxlKHRoaXMsaSwobnx8MSkrbyksbT0obnx8MSkvay5jdXIoKSptLGYuc3R5bGUodGhpcyxpLG0rbykpLGxbMV0mJihuPShsWzFdPT09Ii09Ij8tMToxKSpuK20pLGsuY3VzdG9tKG0sbixvKSk6ay5jdXN0b20obSxoLCIiKSk7cmV0dXJuITB9KX0sc3RvcDpmdW5jdGlvbihhLGIpe2EmJnRoaXMucXVldWUoW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBhPWYudGltZXJzLGM9YS5sZW5ndGg7Ynx8Zi5fdW5tYXJrKCEwLHRoaXMpO3doaWxlKGMtLSlhW2NdLmVsZW09PT10aGlzJiYoYiYmYVtjXSghMCksYS5zcGxpY2UoYywxKSl9KSxifHx0aGlzLmRlcXVldWUoKTtyZXR1cm4gdGhpc319KSxmLmVhY2goe3NsaWRlRG93bjpjcSgic2hvdyIsMSksc2xpZGVVcDpjcSgiaGlkZSIsMSksc2xpZGVUb2dnbGU6Y3EoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksZi5leHRlbmQoe3NwZWVkOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZ0eXBlb2YgYT09Im9iamVjdCI/Zi5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxmLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIWYuaXNGdW5jdGlvbihiKSYmYn07ZC5kdXJhdGlvbj1mLmZ4Lm9mZj8wOnR5cGVvZiBkLmR1cmF0aW9uPT0ibnVtYmVyIj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gZi5meC5zcGVlZHM/Zi5meC5zcGVlZHNbZC5kdXJhdGlvbl06Zi5meC5zcGVlZHMuX2RlZmF1bHQsZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKGEpe2YuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZSE9PSExP2YuZGVxdWV1ZSh0aGlzKTphIT09ITEmJmYuX3VubWFyayh0aGlzKX07cmV0dXJuIGR9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnPWIub3JpZ3x8e319fSksZi5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSwoZi5meC5zdGVwW3RoaXMucHJvcF18fGYuZnguc3RlcC5fZGVmYXVsdCkodGhpcyl9LGN1cjpmdW5jdGlvbigpe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiYoIXRoaXMuZWxlbS5zdHlsZXx8dGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpKXJldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXTt2YXIgYSxiPWYuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3ApO3JldHVybiBpc05hTihhPXBhcnNlRmxvYXQoYikpPyFifHxiPT09ImF1dG8iPzA6YjphfSxjdXN0b206ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGcoYSl7cmV0dXJuIGQuc3RlcChhKX12YXIgZD10aGlzLGU9Zi5meDt0aGlzLnN0YXJ0VGltZT1jbnx8Y28oKSx0aGlzLnN0YXJ0PWEsdGhpcy5lbmQ9Yix0aGlzLnVuaXQ9Y3x8dGhpcy51bml0fHwoZi5jc3NOdW1iZXJbdGhpcy5wcm9wXT8iIjoicHgiKSx0aGlzLm5vdz10aGlzLnN0YXJ0LHRoaXMucG9zPXRoaXMuc3RhdGU9MCxnLmVsZW09dGhpcy5lbGVtLGcoKSYmZi50aW1lcnMucHVzaChnKSYmIWNsJiYoY2w9c2V0SW50ZXJ2YWwoZS50aWNrLGUuaW50ZXJ2YWwpKX0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCx0aGlzLmN1c3RvbSh0aGlzLnByb3A9PT0id2lkdGgifHx0aGlzLnByb3A9PT0iaGVpZ2h0Ij8xOjAsdGhpcy5jdXIoKSksZih0aGlzLmVsZW0pLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuaGlkZT0hMCx0aGlzLmN1c3RvbSh0aGlzLmN1cigpLDApfSxzdGVwOmZ1bmN0aW9uKGEpe3ZhciBiPWNufHxjbygpLGM9ITAsZD10aGlzLmVsZW0sZT10aGlzLm9wdGlvbnMsZyxoO2lmKGF8fGI+PWUuZHVyYXRpb24rdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kLHRoaXMucG9zPXRoaXMuc3RhdGU9MSx0aGlzLnVwZGF0ZSgpLGUuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF09ITA7Zm9yKGcgaW4gZS5hbmltYXRlZFByb3BlcnRpZXMpZS5hbmltYXRlZFByb3BlcnRpZXNbZ10hPT0hMCYmKGM9ITEpO2lmKGMpe2Uub3ZlcmZsb3chPW51bGwmJiFmLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyYmZi5lYWNoKFsiIiwiWCIsIlkiXSxmdW5jdGlvbihhLGIpe2Quc3R5bGVbIm92ZXJmbG93IitiXT1lLm92ZXJmbG93W2FdfSksZS5oaWRlJiZmKGQpLmhpZGUoKTtpZihlLmhpZGV8fGUuc2hvdylmb3IodmFyIGkgaW4gZS5hbmltYXRlZFByb3BlcnRpZXMpZi5zdHlsZShkLGksZS5vcmlnW2ldKTtlLmNvbXBsZXRlLmNhbGwoZCl9cmV0dXJuITF9ZS5kdXJhdGlvbj09SW5maW5pdHk/dGhpcy5ub3c9YjooaD1iLXRoaXMuc3RhcnRUaW1lLHRoaXMuc3RhdGU9aC9lLmR1cmF0aW9uLHRoaXMucG9zPWYuZWFzaW5nW2UuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF1dKHRoaXMuc3RhdGUsaCwwLDEsZS5kdXJhdGlvbiksdGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3MpLHRoaXMudXBkYXRlKCk7cmV0dXJuITB9fSxmLmV4dGVuZChmLmZ4LHt0aWNrOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPWYudGltZXJzLGI9MDtiPGEubGVuZ3RoOysrYilhW2JdKCl8fGEuc3BsaWNlKGItLSwxKTthLmxlbmd0aHx8Zi5meC5zdG9wKCl9LGludGVydmFsOjEzLHN0b3A6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGNsKSxjbD1udWxsfSxzcGVlZHM6e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihhKXtmLnN0eWxlKGEuZWxlbSwib3BhY2l0eSIsYS5ub3cpfSxfZGVmYXVsdDpmdW5jdGlvbihhKXthLmVsZW0uc3R5bGUmJmEuZWxlbS5zdHlsZVthLnByb3BdIT1udWxsP2EuZWxlbS5zdHlsZVthLnByb3BdPShhLnByb3A9PT0id2lkdGgifHxhLnByb3A9PT0iaGVpZ2h0Ij9NYXRoLm1heCgwLGEubm93KTphLm5vdykrYS51bml0OmEuZWxlbVthLnByb3BdPWEubm93fX19KSxmLmV4cHImJmYuZXhwci5maWx0ZXJzJiYoZi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZ3JlcChmLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH0pO3ZhciBjcz0vXnQoPzphYmxlfGR8aCkkL2ksY3Q9L14oPzpib2R5fGh0bWwpJC9pOyJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gYy5kb2N1bWVudEVsZW1lbnQ/Zi5mbi5vZmZzZXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXSxjO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0KGIpO3RyeXtjPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2goZCl7fXZhciBlPWIub3duZXJEb2N1bWVudCxnPWUuZG9jdW1lbnRFbGVtZW50O2lmKCFjfHwhZi5jb250YWlucyhnLGIpKXJldHVybiBjP3t0b3A6Yy50b3AsbGVmdDpjLmxlZnR9Ont0b3A6MCxsZWZ0OjB9O3ZhciBoPWUuYm9keSxpPWN1KGUpLGo9Zy5jbGllbnRUb3B8fGguY2xpZW50VG9wfHwwLGs9Zy5jbGllbnRMZWZ0fHxoLmNsaWVudExlZnR8fDAsbD1pLnBhZ2VZT2Zmc2V0fHxmLnN1cHBvcnQuYm94TW9kZWwmJmcuc2Nyb2xsVG9wfHxoLnNjcm9sbFRvcCxtPWkucGFnZVhPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxMZWZ0fHxoLnNjcm9sbExlZnQsbj1jLnRvcCtsLWosbz1jLmxlZnQrbS1rO3JldHVybnt0b3A6bixsZWZ0Om99fTpmLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0KGIpO2Yub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgYyxkPWIub2Zmc2V0UGFyZW50LGU9YixnPWIub3duZXJEb2N1bWVudCxoPWcuZG9jdW1lbnRFbGVtZW50LGk9Zy5ib2R5LGo9Zy5kZWZhdWx0VmlldyxrPWo/ai5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGUsbD1iLm9mZnNldFRvcCxtPWIub2Zmc2V0TGVmdDt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiZiIT09aSYmYiE9PWgpe2lmKGYub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9wLG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLm9mZnNldC5kb2VzTm90QWRkQm9yZGVyJiYoIWYub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzfHwhY3MudGVzdChiLm5vZGVOYW1lKSkmJihsKz1wYXJzZUZsb2F0KGMuYm9yZGVyVG9wV2lkdGgpfHwwLG0rPXBhcnNlRmxvYXQoYy5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxlPWQsZD1iLm9mZnNldFBhcmVudCksZi5vZmZzZXQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxrLnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCImJihsKz1NYXRoLm1heChoLnNjcm9sbFRvcCxpLnNjcm9sbFRvcCksbSs9TWF0aC5tYXgoaC5zY3JvbGxMZWZ0LGkuc2Nyb2xsTGVmdCkpO3JldHVybnt0b3A6bCxsZWZ0Om19fSxmLm9mZnNldD17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3ZhciBhPWMuYm9keSxiPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZCxlLGcsaCxpPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGo9IjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4Oyc+PGRpdj48L2Rpdj48L2Rpdj48dGFibGUgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OycgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz48dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPiI7Zi5leHRlbmQoYi5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxiLmlubmVySFRNTD1qLGEuaW5zZXJ0QmVmb3JlKGIsYS5maXJzdENoaWxkKSxkPWIuZmlyc3RDaGlsZCxlPWQuZmlyc3RDaGlsZCxoPWQubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkLHRoaXMuZG9lc05vdEFkZEJvcmRlcj1lLm9mZnNldFRvcCE9PTUsdGhpcy5kb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxscz1oLm9mZnNldFRvcD09PTUsZS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGUuc3R5bGUudG9wPSIyMHB4Iix0aGlzLnN1cHBvcnRzRml4ZWRQb3NpdGlvbj1lLm9mZnNldFRvcD09PTIwfHxlLm9mZnNldFRvcD09PTE1LGUuc3R5bGUucG9zaXRpb249ZS5zdHlsZS50b3A9IiIsZC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZS5vZmZzZXRUb3A9PT0tNSx0aGlzLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PWEub2Zmc2V0VG9wIT09aSxhLnJlbW92ZUNoaWxkKGIpLGYub2Zmc2V0LmluaXRpYWxpemU9Zi5ub29wfSxib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yub2Zmc2V0LmluaXRpYWxpemUoKSxmLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3QudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3QudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0ic2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lmKCFlKXJldHVybiBudWxsO2c9Y3UoZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2c9Y3UodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6ZihnKS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhJiZhLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYSxkLCJwYWRkaW5nIikpOm51bGx9LGYuZm5bIm91dGVyIitjXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiJiZiLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYixkLGE/Im1hcmdpbiI6ImJvcmRlciIpKTpudWxsfSxmLmZuW2RdPWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXNbMF07aWYoIWUpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Y1tkXShhLmNhbGwodGhpcyxiLGNbZF0oKSkpfSk7aWYoZi5pc1dpbmRvdyhlKSl7dmFyIGc9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10saD1lLmRvY3VtZW50LmJvZHk7cmV0dXJuIGUuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8aCYmaFsiY2xpZW50IitjXXx8Z31pZihlLm5vZGVUeXBlPT09OSlyZXR1cm4gTWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10sZS5ib2R5WyJzY3JvbGwiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2NdLGUuYm9keVsib2Zmc2V0IitjXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitjXSk7aWYoYT09PWIpe3ZhciBpPWYuY3NzKGUsZCksaj1wYXJzZUZsb2F0KGkpO3JldHVybiBmLmlzTmFOKGopP2k6an1yZXR1cm4gdGhpcy5jc3MoZCx0eXBlb2YgYT09InN0cmluZyI/YTphKyJweCIpfX0pLGEualF1ZXJ5PWEuJD1mfSkod2luZG93KTs=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ01pbmlmeSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0NvbmZpZ3VyZSBNaW5pZnkgdmlhIHRoZSBMYXlvdXQgc2VjaXRvbi4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01pbmlmeSBpcyBub3cgdW5pbnN0YWxsZWQnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gQXJlIHlvdSBzdXJlCnlvdSB3YW50IHRvIHVuc2luc3RhbGwgdGhpcyBtb2R1bGU/JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIFVuaW5zdGFsbGVkLic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnSmF2YXNjcmlwdCBhbmQgQ1NTIG1pbmlmaWVyIHVzaW5nIGh0dHBzOi8vZ2l0aHViLmNvbS9tcmNsYXkvbWluaWZ5JzsKCiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5kWydhZG1pbl90aXRsZSddID0gJ01pbmlmeSBBZG1pbiBQYW5lbCc7CiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnQ29udHJvbCBtaW5pZmljYXRpb24gb2YgSmF2YXNjcmlwdCBhbmQgZXh0ZXJuYWwgQ1NTIHN0eWxlc2hlZXRzJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CgovLyBUYWIgSGVhZGVycwokbGFuZ1sndGl0bGVfc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWyd0aXRsZV9idWlsZGVyJ10gPSAnQnVpbGRlcic7CiRsYW5nWyd0aXRsZV9taW5pZnlfaGVscCddID0gJ01pbmlmeSBIZWxwJzsKCi8vQ2hhbmdsb2cKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4KPGxpPlZlcnNpb24gMCw5IC0gMTYgSnVuZSAyMDEzLiBJbml0aWFsIFJlbGVhc2UuPC9saT4KPC91bD4nOwoKLy8gTWluaWZ5IEhlbHAKJGxhbmdbJ21pbmlmeV9oZWxwJ10gPSA8PDxFT1MKCQk8aDI+PGEgbmFtZT0iI1VzYWdlIj48L2E+VXNhZ2U8YSBocmVmPSIjVXNhZ2UiIGNsYXNzPSJzZWN0aW9uX2FuY2hvciI+PC9hPjwvaDI+CgkJPGhyLz4KPGgyPjxhIG5hbWU9Ik5ld3MiPjwvYT5OZXdzPGEgaHJlZj0iI05ld3MiIGNsYXNzPSJzZWN0aW9uX2FuY2hvciI+PC9hPjwvaDI+PHA+PHN0cm9uZz4yMDEyLTAzLTEwIDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9taW5pZnkvZG93bmxvYWRzL2xpc3QiIHJlbD0ibm9mb2xsb3ciPk1pbmlmeSAyLjEuNTwvYT4gcmVsZWFzZWQhIFdlJ3ZlIGFsc28gY29udmVydGVkIHRvIGdpdCBhbmQgYXJlIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9tcmNsYXkvbWluaWZ5IiByZWw9Im5vZm9sbG93Ij5taXJyb3JpbmcgYXQgR2l0SHViPC9hPi4gIDwvc3Ryb25nPjwvcD48aDI+PGEgbmFtZT0iQWJvdXQiPjwvYT5BYm91dDxhIGhyZWY9IiNBYm91dCIgY2xhc3M9InNlY3Rpb25fYW5jaG9yIj48L2E+PC9oMj48cD5NaW5pZnkgaXMgYSBQSFA1IGFwcCB0aGF0IGhlbHBzIHlvdSBmb2xsb3cgc2V2ZXJhbCBvZiBZYWhvbyEncyA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS9wZXJmb3JtYW5jZS9pbmRleC5odG1sI3J1bGVzIiByZWw9Im5vZm9sbG93Ij5SdWxlcyBmb3IgSGlnaCBQZXJmb3JtYW5jZSBXZWIgU2l0ZXM8L2E+LiA8L3A+PHA+SXQgY29tYmluZXMgbXVsdGlwbGUgQ1NTIG9yIEphdmFzY3JpcHQgZmlsZXMsIHJlbW92ZXMgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSBhbmQgY29tbWVudHMsIGFuZCBzZXJ2ZXMgdGhlbSB3aXRoIGd6aXAgZW5jb2RpbmcgYW5kIG9wdGltYWwgY2xpZW50LXNpZGUgY2FjaGUgaGVhZGVycy4gPC9wPjxoMz48YSBuYW1lPSIiPjwvYT48YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvbWluaWZ5IiByZWw9Im5vZm9sbG93Ij5TdXBwb3J0IExpc3Q8L2E+PC9oMz48aDI+PGEgbmFtZT0iTWluaWZ5X2luX1VzZSI+PC9hPk1pbmlmeSBpbiBVc2U8YSBocmVmPSIjTWluaWZ5X2luX1VzZSIgY2xhc3M9InNlY3Rpb25fYW5jaG9yIj48L2E+PC9oMj48cD48L3A+PHRhYmxlIGNsYXNzPSJ3aWtpdGFibGUiPjx0Ym9keT48dHI+PHRkIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7Ij4gPHN0cm9uZz5CZWZvcmU8L3N0cm9uZz4gPC90ZD48dGQgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICNjY2M7IHBhZGRpbmc6IDVweDsiPiA8aW1nIHNyYz0iaHR0cDovL21yY2xheS5vcmcvd3AtY29udGVudC91cGxvYWRzLzIwMDgvMDkvZmlkZGxlcl9iZWZvcmUucG5nIj4gPC90ZD48L3RyPiA8dHI+PHRkIHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjY2NjOyBwYWRkaW5nOiA1cHg7Ij4gPHN0cm9uZz5BZnRlcjwvc3Ryb25nPiA8L3RkPjx0ZCBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgI2NjYzsgcGFkZGluZzogNXB4OyI+IDxpbWcgc3JjPSJodHRwOi8vbXJjbGF5Lm9yZy93cC1jb250ZW50L3VwbG9hZHMvMjAwOC8wOS9maWRkbGVyX2FmdGVyLnBuZyI+IDwvdGQ+PC90cj4gPC90Ym9keT48L3RhYmxlPjxwPjwvcD48cD5UaGUgc3RhdHMgYWJvdmUgYXJlIGZyb20gYSA8YSBocmVmPSJodHRwOi8vbXJjbGF5Lm9yZy9pbmRleC5waHAvMjAwOC8wOS8xOS9taW5pZnktMjEtb24tbXJjbGF5b3JnLyIgcmVsPSJub2ZvbGxvdyI+YnJpZWYgd2Fsa3Rocm91Z2g8L2E+IHdoaWNoIHNob3dzIGhvdyBlYXN5IGl0IGlzIHRvIHNldCB1cCBNaW5pZnkgb24gYW4gZXhpc3Rpbmcgc2l0ZS4gSXQgZWxpbWluYXRlZCA1IEhUVFAgcmVxdWVzdHMgYW5kIHJlZHVjZWQgSlMvQ1NTIGJhbmR3aWR0aCBieSA3MCUuIDwvcD48cD5UaGUgZGVzaWduIGlzIHNvbWV3aGF0IHNpbWlsYXIgdG8gWWFob28ncyA8YSBocmVmPSJodHRwOi8veXVpYmxvZy5jb20vYmxvZy8yMDA4LzA3LzE2L2NvbWJvaGFuZGxlci8iIHJlbD0ibm9mb2xsb3ciPkNvbWJvIEhhbmRsZXIgU2VydmljZTwvYT4sIGV4Y2VwdCB0aGF0IE1pbmlmeSBjYW4gY29tYmluZSA8aT5hbnk8L2k+IGxvY2FsIEpTL0NTUyBmaWxlcyB5b3UgbmVlZCBmb3IgeW91ciBwYWdlLiA8L3A+PGgyPjxhIG5hbWU9Ik1pbmlmeV9pbnRlZ3JhdGVkX2ludG9fb3RoZXJfUHJvamVjdHMvUGx1Z2lucyI+PC9hPk1pbmlmeSBpbnRlZ3JhdGVkIGludG8gb3RoZXIgUHJvamVjdHMvUGx1Z2luczxhIGhyZWY9IiNNaW5pZnlfaW50ZWdyYXRlZF9pbnRvX290aGVyX1Byb2plY3RzL1BsdWdpbnMiIGNsYXNzPSJzZWN0aW9uX2FuY2hvciI+PC9hPjwvaDI+PHVsPjxsaT5Xb3JkUHJlc3M6IDxhIGhyZWY9Imh0dHA6Ly93b3JkcHJlc3Mub3JnL2V4dGVuZC9wbHVnaW5zL3dwLW1pbmlmeS8iIHJlbD0ibm9mb2xsb3ciPldQLU1pbmlmeTwvYT4gPC9saT48bGk+V29yZFByZXNzOiA8YSBocmVmPSJodHRwOi8vd29yZHByZXNzLm9yZy9leHRlbmQvcGx1Z2lucy93My10b3RhbC1jYWNoZS8iIHJlbD0ibm9mb2xsb3ciPlczIFRvdGFsIENhY2hlPC9hPiA8L2xpPjxsaT5aZW5kIEZyYW1ld29yazogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2J1YmJhLWg1Ny96Zi1oZWxwZXJzIiByZWw9Im5vZm9sbG93Ij5WaWV3IGhlbHBlcnMgZm9yIGxpbmtzL3NjcmlwdHM8L2E+IDwvbGk+PGxpPllpaTogPGEgaHJlZj0iaHR0cHM6Ly9iaXRidWNrZXQub3JnL1RlYW1UUEcvbWluc2NyaXB0L3dpa2kvSG9tZSIgcmVsPSJub2ZvbGxvdyI+bWluc2NyaXB0IEV4dGVuc2lvbjwvYT4gPC9saT48L3VsPjxoMj48YSBuYW1lPSJGZWF0dXJlcyI+PC9hPkZlYXR1cmVzPGEgaHJlZj0iI0ZlYXR1cmVzIiBjbGFzcz0ic2VjdGlvbl9hbmNob3IiPjwvYT48L2gyPjx1bD48bGk+Q29tYmluZXMgYW5kIG1pbmlmaWVzIG11bHRpcGxlIENTUyBvciBKYXZhU2NyaXB0IGZpbGVzIGludG8gYSBzaW5nbGUgZG93bmxvYWQgPC9saT48bGk+VXNlcyBhbiA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5L3NvdXJjZS9icm93c2UvdHJ1bmsvbWluL2xpYi9KU01pbi5waHAiIHJlbD0ibm9mb2xsb3ciPmVuaGFuY2VkIHBvcnQ8L2E+IG9mIERvdWdsYXMgQ3JvY2tmb3JkJ3MgPGEgaHJlZj0iaHR0cDovL3d3dy5jcm9ja2ZvcmQuY29tL2phdmFzY3JpcHQvanNtaW4uaHRtbCIgcmVsPSJub2ZvbGxvdyI+SlNNaW4gbGlicmFyeTwvYT4gYW5kIGN1c3RvbSBjbGFzc2VzIHRvIG1pbmlmeSA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5L3NvdXJjZS9icm93c2UvdHJ1bmsvbWluL2xpYi9NaW5pZnkvQ1NTLnBocCIgcmVsPSJub2ZvbGxvdyI+Q1NTPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL21pbmlmeS9zb3VyY2UvYnJvd3NlL3RydW5rL21pbi9saWIvTWluaWZ5L0hUTUwucGhwIiByZWw9Im5vZm9sbG93Ij5IVE1MPC9hPiA8L2xpPjxsaT5DYWNoZXMgc2VydmVyLXNpZGUgKGZpbGVzL2FwYy9tZW1jYWNoZSkgdG8gYXZvaWQgZG9pbmcgdW5uZWNlc3Nhcnkgd29yayA8L2xpPjxsaT5SZXNwb25kcyB3aXRoIGFuIEhUVFAgMzA0IChOb3QgTW9kaWZpZWQpIHJlc3BvbnNlIHdoZW4gdGhlIGJyb3dzZXIgaGFzIGFuIHVwLXRvLWRhdGUgY2FjaGUgY29weSA8L2xpPjxsaT5Nb3N0IG1vZHVsZXMgYXJlIGxhenktbG9hZGVkIGFzIG5lZWRlZCAoMzA0IHJlc3BvbnNlcyB1c2UgbWluaW1hbCBjb2RlKSA8L2xpPjxsaT5BdXRvbWF0aWNhbGx5IHJld3JpdGVzIHJlbGF0aXZlIFVSSXMgaW4gY29tYmluZWQgQ1NTIGZpbGVzIHRvIHBvaW50IHRvIHZhbGlkIGxvY2F0aW9ucyA8L2xpPjxsaT5XaXRoIGNhY2hpbmcgZW5hYmxlZCwgTWluaWZ5IGlzIGNhcGFibGUgb2YgaGFuZGxpbmcgaHVuZHJlZHMgb2YgcmVxdWVzdHMgcGVyIHNlY29uZCBvbiBhIG1vZGVyYXRlbHkgcG93ZXJmdWwgc2VydmVyLiAgPC9saT48bGk+Q29udGVudC1FbmNvZGluZzogZ3ppcCwgYmFzZWQgb24gcmVxdWVzdCBoZWFkZXJzLiBDYWNoaW5nIGFsbG93cyBpdCBzbyBzZXJ2ZSBnemlwcGVkIGZpbGVzIGZhc3RlciB0aGFuIEFwYWNoZSdzIG1vZF9kZWZsYXRlIG9wdGlvbiEgPC9saT48bGk+VGVzdCBjYXNlcyBmb3IgbW9zdCBjb21wb25lbnRzIDwvbGk+PGxpPkVhc3kgaW50ZWdyYXRpb24gb2YgM3JkLXBhcnR5IG1pbmlmaWVycyA8L2xpPjxsaT5TZXBhcmF0ZSB1dGlsaXR5IGNsYXNzZXMgZm9yIEhUVFAgZW5jb2RpbmcgYW5kIGNhY2hlIGNvbnRyb2wgPC9saT48L3VsPjxoMj48YSBuYW1lPSJSZXF1aXJlbWVudHMiPjwvYT5SZXF1aXJlbWVudHM8YSBocmVmPSIjUmVxdWlyZW1lbnRzIiBjbGFzcz0ic2VjdGlvbl9hbmNob3IiPjwvYT48L2gyPjx1bD48bGk+UEhQIDUuMS42IC8gY29tbWFuZC1saW5lIHRvb2xzIHJlcXVpcmUgNS4zIDwvbGk+PGxpPlRoZSBjb21tb25seSBpbnN0YWxsZWQgPGEgaHJlZj0iaHR0cDovL3VzMy5waHAubmV0L21hbnVhbC9lbi96bGliLmluc3RhbGxhdGlvbi5waHAiIHJlbD0ibm9mb2xsb3ciPnpsaWIgZXh0ZW5zaW9uPC9hPiBpcyByZWNvbW1lbmRlZCBmb3IgSFRUUCBlbmNvZGluZyBmdW5jdGlvbmFsaXR5LiA8L2xpPjxsaT5WZXJzaW9uIDEuMC4xIHJlcXVpcmVkIFBIUCA1LjIuMSsuIDwvbGk+PC91bD48aDI+PGEgbmFtZT0iSW5zdGFsbGF0aW9uIj48L2E+SW5zdGFsbGF0aW9uPGEgaHJlZj0iI0luc3RhbGxhdGlvbiIgY2xhc3M9InNlY3Rpb25fYW5jaG9yIj48L2E+PC9oMj48cD5TZWUgdGhlIDxhIGhyZWY9Ii9wL21pbmlmeS93aWtpL1VzZXJHdWlkZSI+VXNlckd1aWRlPC9hPi4gPC9wPjxoMj48YSBuYW1lPSIiPjwvYT48YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvbWluaWZ5IiByZWw9Im5vZm9sbG93Ij5TdXBwb3J0IExpc3Q8L2E+PC9oMj48aDI+PGEgbmFtZT0iUEhQNV9Db21wb25lbnRfQ2xhc3NlcyI+PC9hPlBIUDUgQ29tcG9uZW50IENsYXNzZXM8YSBocmVmPSIjUEhQNV9Db21wb25lbnRfQ2xhc3NlcyIgY2xhc3M9InNlY3Rpb25fYW5jaG9yIj48L2E+PC9oMj48cD5NaW5pZnkgaXMgYmFzZWQgb24gc2V2ZXJhbCA8YSBocmVmPSIvcC9taW5pZnkvd2lraS9Db21wb25lbnRDbGFzc2VzIj5QSFA1IGNsYXNzZXM8L2E+IHRoYXQgbWF5IGJlIHVzZWZ1bCBpbiBvdGhlciBwcm9qZWN0cyAoYWxsIEJTRCBsaWNlbnNlZCkuIDwvcD48aDI+PGEgbmFtZT0iV2FybmluZ3MiPjwvYT5XYXJuaW5nczxhIGhyZWY9IiNXYXJuaW5ncyIgY2xhc3M9InNlY3Rpb25fYW5jaG9yIj48L2E+PC9oMj48dWw+PGxpPk1pbmlmeSBpcyBkZXNpZ25lZCBmb3IgZWZmaWNpZW5jeSwgYnV0LCBmb3IgdmVyeSBoaWdoIHRyYWZmaWMgc2l0ZXMsIE1pbmlmeSBtYXkgc2VydmUgZmlsZXMgc2xvd2VyIHRoYW4geW91ciBIVFRQZCBkdWUgdG8gdGhlIENHSSBvdmVyaGVhZCBvZiBQSFAuIFNlZSB0aGUgPGEgaHJlZj0iL3AvbWluaWZ5L3dpa2kvRkFRIj5GQVE8L2E+IGFuZCA8YSBocmVmPSIvcC9taW5pZnkvd2lraS9Db29rQm9vayI+Q29va0Jvb2s8L2E+IGZvciBtb3JlIGluZm8uIDwvbGk+PGxpPklmIHlvdSBjb21iaW5lIGEgbG90IG9mIENTUywgd2F0Y2ggb3V0IGZvciA8YSBocmVmPSJodHRwOi8vd3d3LnRoZWNzc2Rpdi5jby51ay8yMDA5LzA4LzI4L2Fub3RoZXItd2VpcmQtaWU2LWJ1Zy8iIHJlbD0ibm9mb2xsb3ciPklFJ3MgNDA5NiBzZWxlY3RvcnMtcGVyLWZpbGUgbGltaXQ8L2E+LiBUaGlzIGJ1ZyBoYXMgYmVlbiB2ZXJpZmllZCBpbiBJRSB2ZXJzaW9ucyA2IHRocm91Z2ggOCAoc28gZmFyKS4gPC9saT48L3VsPjxoMj48YSBuYW1lPSJQcm9ibGVtX0RvbWFpbiI+PC9hPlByb2JsZW0gRG9tYWluPGEgaHJlZj0iI1Byb2JsZW1fRG9tYWluIiBjbGFzcz0ic2VjdGlvbl9hbmNob3IiPjwvYT48L2gyPjxwPlBhZ2VzIHRoYXQgcmVmZXIgdG8gbXVsdGlwbGUgQ1NTIG9yIEphdmFTY3JpcHQgZmlsZXMgb2Z0ZW4gc3VmZmVyIGZyb20gc2xvd2VyIHBhZ2UgbG9hZHMsIGR1ZSB0byB0aGUgYnJvd3NlciByZXF1ZXN0aW5nIGVhY2ggZmlsZSBpbmRpdmlkdWFsbHkuIE1hbnkgYnJvd3NlcnMgYWxzbyBhcmUgbGltaXRlZCB0byBhIGZldyBzaW11bHRhbmVvdXMgcmVxdWVzdHMgcGVyIGRvbWFpbi4gVGhlIHdhaXQgZm9yIGEgc2VyaWVzIG9mIHJlcXVlc3RzIGFuZCB0aGUgdHJhbnNmZXIgb2YgdW5vcHRpbWl6ZWQgZmlsZXMgY2FuIGRyYW1hdGljYWxseSByZWR1Y2UgdGhlIGNsaWVudC1zaWRlIHBlcmZvcm1hbmNlIG9mIHlvdXIgc2l0ZS4gPC9wPjxwPkhlcmUgYXJlIHNvbWUgb2YgWWFob28hJ3MgYmVzdCBwcmFjdGljZXMgdGhhdCBhcmUgYWRkcmVzc2VkIGJ5IHRoZSB1c2Ugb2YgTWluaWZ5LiA8L3A+PHVsPjxsaT48YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS9wZXJmb3JtYW5jZS9ydWxlcy5odG1sI251bV9odHRwIiByZWw9Im5vZm9sbG93Ij5NYWtlIEZld2VyIEhUVFAgUmVxdWVzdHM8L2E+IDwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3BlcmZvcm1hbmNlL3J1bGVzLmh0bWwjZXhwaXJlcyIgcmVsPSJub2ZvbGxvdyI+QWRkIGFuIEV4cGlyZXMgb3IgYSBDYWNoZS1Db250cm9sIEhlYWRlcjwvYT4gPC9saT48bGk+PGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci55YWhvby5jb20vcGVyZm9ybWFuY2UvcnVsZXMuaHRtbCNnemlwIiByZWw9Im5vZm9sbG93Ij5HemlwIENvbXBvbmVudHM8L2E+IDwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3BlcmZvcm1hbmNlL3J1bGVzLmh0bWwjbWluaWZ5IiByZWw9Im5vZm9sbG93Ij5NaW5pZnkgSmF2YVNjcmlwdCBhbmQgQ1NTPC9hPiA8L2xpPjxsaT48YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVyLnlhaG9vLmNvbS9wZXJmb3JtYW5jZS9ydWxlcy5odG1sI2V0YWdzIiByZWw9Im5vZm9sbG93Ij5Db25maWd1cmUgRVRhZ3M8L2E+IDwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3BlcmZvcm1hbmNlL3J1bGVzLmh0bWwjdW5kZXIyNSIgcmVsPSJub2ZvbGxvdyI+S2VlcCBDb21wb25lbnRzIHVuZGVyIDI1SzwvYT4gPC9saT48L3VsPjxoMz48YSBuYW1lPSJBY2tub3dsZWRnbWVudHMiPjwvYT5BY2tub3dsZWRnbWVudHM8YSBocmVmPSIjQWNrbm93bGVkZ21lbnRzIiBjbGFzcz0ic2VjdGlvbl9hbmNob3IiPjwvYT48L2gzPjxwPk1pbmlmeSB3YXMgaW5zcGlyZWQgYnkgPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2pzY3NzY29tcC8iIHJlbD0ibm9mb2xsb3ciPmpzY3NzY29tcDwvYT4gYnkgTWF4aW0gTWFydHlueXVrIGFuZCBieSB0aGUgYXJ0aWNsZSAnPGEgaHJlZj0iaHR0cDovL3d3dy5odW5sb2NrLmNvbS9ibG9ncy9TdXBlcmNoYXJnZWRfSmF2YXNjcmlwdCIgcmVsPSJub2ZvbGxvdyI+U3VwZXJjaGFyZ2VkIEphdmFTY3JpcHQ8L2E+JyBieSBQYXRyaWNrIEh1bmxvY2suIDwvcD48cD5UaGUgPGEgaHJlZj0iaHR0cDovL3d3dy5jcm9ja2ZvcmQuY29tL2phdmFzY3JpcHQvanNtaW4uaHRtbCIgcmVsPSJub2ZvbGxvdyI+SlNNaW4gbGlicmFyeTwvYT4gdXNlZCBmb3IgSmF2YVNjcmlwdCBtaW5pZmljYXRpb24gd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBEb3VnbGFzIENyb2NrZm9yZCBhbmQgd2FzIDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9qc21pbi1waHAiIHJlbD0ibm9mb2xsb3ciPnBvcnRlZCB0byBQSFA8L2E+IGJ5IFJ5YW4gR3JvdmUgc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4gTWluaWZ5LiA8L3A+PHA+WW91IG1heSBjb250YWN0IFN0ZXZlIENsYXkgKHN0ZXZlQG1yY2xheS5vcmcpIG9yIFJ5YW4gKHJ5YW5Ad29ua28uY29tKSBpZiB5b3UncmUgaW50ZXJlc3RlZCBpbiBqb2luaW5nIHRoZSBwcm9qZWN0LiA8L3A+CkVPUzsKCiRsYW5nWydoZWxwJ10gPSA8PDxFT1MKCTxoMj5DTVNNUyBNaW5pZnkgTW9kdWxlIEhlbHA8L2gyPgogICAgPHA+VGhpcyBwcm9qZWN0IGVtYmVkcyA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5LyI+TWluaWZ5CiAgICAgICAgMi4xLjU8L2E+IGludG8gQ01TIE1hZGUgU2ltcGxlLiBGcm9tIHRoZSBNaW5pZnkgd2Vic2l0ZTo8L3A+CiAgICA8YmxvY2txdW90ZT4KICAgICAgPHA+TWluaWZ5IGlzIGEgUEhQNSBhcHAgdGhhdCBoZWxwcyB5b3UgZm9sbG93IHNldmVyYWwgb2YgWWFob28hJ3MgUnVsZXMKICAgICAgICBmb3IgSGlnaCBQZXJmb3JtYW5jZSBXZWIgU2l0ZXMuIEl0IGNvbWJpbmVzIG11bHRpcGxlIENTUyBvciBKYXZhc2NyaXB0CiAgICAgICAgZmlsZXMsIHJlbW92ZXMgdW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSBhbmQgY29tbWVudHMsIGFuZCBzZXJ2ZXMgdGhlbSB3aXRoCiAgICAgICAgZ3ppcCBlbmNvZGluZyBhbmQgb3B0aW1hbCBjbGllbnQtc2lkZSBjYWNoZSBoZWFkZXJzLjwvcD4KICAgIDwvYmxvY2txdW90ZT4KICAgIDxwPkZvciBleGFtcGxlLCB0aGUgamF2YXNjcmlwdHMgZm9yIHRoZSBBZG1pbiBpbnRlcmZhY2UgY291bGQgYmUgbWluaWZpZWQKICAgICAgaW50bzo8L3A+CiAgICA8cD48Y29kZT4mbHQ7c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIKc3JjPSIvbW9kdWxlcy9NaW5pZnkvbWluLz9iPWxpYi9qcXVlcnkvanMmYW1wO2FtcDtmPWpxdWVyeS0xLjcuMi5taW4uanMsanF1ZXJ5LXVpLTEuOC4yMS5jdXN0b20ubWluLmpzLGpxdWVyeS51aS5uZXN0ZWRTb3J0YWJsZS0xLjMuNC5qcyxqcXVlcnkuanNvbi0yLjMubWluLmpzIiZndDsmbHQ7L3NjcmlwdCZndDs8L2NvZGU+PC9wPgoJPGJyLz4KICAgIDxwPkN1cnJlbnRseSwgaXQgc2ltcGx5IGVtYmVkcyB0aGUgTWluaWZ5IHByb2plY3QgaW50byB0aGUgbW9kdWxlLCBhbmQKICAgICAgZXhwb3NlcyB0aGUgQnVpbGRlciB0byB0aGUgYWRtaW4gaW50ZXJmYWNlLiBUaGUgYnVpbGRlciBhbGxvd3MgeW91IHRvCiAgICAgIGVudGVyIHlvdXIgSmF2YXNjcmlwdCBmaWxlcyBpbiBhIGxpc3QsIGFuZCBvdXRwdXRzIGEgdGhlIDxjb2RlPiZsdDtzY3JpcHQuLi4uJmd0OzwvY29kZT4KICAgICAgdGFnIHRoYXQgeW91IHdvdWxkIGVtYmVkIHlvdXIgdGVtcGxhdGUuPC9wPgoJPGJyLz4KICAgIDxwPkZvciBzdXBwb3J0LCBwbGVhc2Ugc3VibWl0IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kcm1pa2Vjcm93ZS9jbXNtc19taW5pZnkvaXNzdWVzIj5hbgogICAgICAgIGlzc3VlPC9hPiBmb3IgYXNzaXN0YW5jZS48L3A+Cgk8YnIvPgogICAgPHA+Um9hZG1hcDo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT5Jbml0aWFsIFJlbGVhc2U8L2xpPgogICAgICA8bGk+SW1wbGVtZW50IERlYnVnIG1vZGUgZm9yIGRldmVsb3BtZW50PC9saT4KICAgICAgPGxpPk1haW50YWlucyB0aGUgbGlzdCBvZiBqYXZhc2NyaXB0cyAob3Igc3R5bGVzaGVldHMpLCBhbmQgYWxsb3cKICAgICAgICBlbWJlZGRpbmcgZGlmZmVyZW50IGxpc3RzLCBzdWNoIGFzIHtNaW5pZnkgcGFja2FnZT0ieHh4eCJ9PC9saT4KICAgICAgPGxpPkxvZyB0byBDTVNNUyBBZG1pbiBMb2c8L2xpPgogICAgPC91bD4KICAgIERvbmF0aW9ucyBhcmUgYXBwcmVjaWF0ZWQsIGFuZCB3b3VsZCBlbmNvdXJhZ2UgY29udGludWFsIGltcHJvdmVtZW50IG9mIHRoaXMKICAgIG1vZHVsZS48YnIgLz4KICAgIDxiciAvPgogICAgPGZvcm0gYWN0aW9uPSJodHRwczovL3d3dy5wYXlwYWwuY29tL2NnaS1iaW4vd2Vic2NyIiBtZXRob2Q9InBvc3QiIHRhcmdldD0iX3RvcCI+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNtZCIgdmFsdWU9Il9zLXhjbGljayIgLz4gPGlucHV0IHR5cGU9ImhpZGRlbiIKICAgICAgICBuYW1lPSJob3N0ZWRfYnV0dG9uX2lkIiB2YWx1ZT0iSzJMR05HWDY0VUc0OCIgLz4gPGlucHV0IHR5cGU9ImltYWdlIiBib3JkZXI9IjAiCiAgICAgICAgc3JjPSJodHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9lbl9VUy9pL2J0bi9idG5fZG9uYXRlQ0NfTEcuZ2lmIiBuYW1lPSJzdWJtaXQiCiAgICAgICAgYWx0PSJQYXlQYWwgLSBUaGUgc2FmZXIsIGVhc2llciB3YXkgdG8gcGF5IG9ubGluZSEiIC8+IDxpbWcgd2lkdGg9IjEiIGhlaWdodD0iMSIKICAgICAgICBib3JkZXI9IjAiIGFsdD0iIiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL2VuX1VTL2kvc2NyL3BpeGVsLmdpZiIgLz4KICAgIDwvZm9ybT4KRU9TOwo=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEluc3RhbGwoKQoJICAgV2hlbiB5b3VyIG1vZHVsZSBpcyBpbnN0YWxsZWQsIHlvdSBtYXkgbmVlZCB0byBkbyBzb21lCgkgICBzZXR1cC4gVHlwaWNhbCB0aGluZ3MgdGhhdCBoYXBwZW4gaGVyZSBhcmUgdGhlIGNyZWF0aW9uCgkgICBhbmQgcHJlcG9wdWxhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsIGRhdGFiYXNlIHNlcXVlbmNlcywKCSAgIHBlcm1pc3Npb25zLCBwcmVmZXJlbmNlcywgZXRjLgoJICAgCSAgIAoJICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBjcmVhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsCgkgICBjaGVjayBvdXQgdGhlIEFET0RCIERhdGEgRGljdGlvbmFyeSBwYWdlIGF0CgkgICBodHRwOi8vcGhwbGVucy5jb20vbGVucy9hZG9kYi9kb2NzLWRhdGFkaWN0Lmh0bQoJICAgCgkgICBUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBzdHJpbmcgaW4gY2FzZSBvZiBhbnkgZXJyb3IsCgkgICBhbmQgQ01TIHdpbGwgbm90IGNvbnNpZGVyIHRoZSBtb2R1bGUgaW5zdGFsbGVkLgoJICAgU3VjY2Vzc2Z1bCBpbnN0YWxscyBzaG91bGQgcmV0dXJuIEZBTFNFIG9yIG5vdGhpbmcgYXQgYWxsLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJCS8qCgkJLy8gVHlwaWNhbCBEYXRhYmFzZSBJbml0aWFsaXphdGlvbgoJCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCQkKCQkvLyBteXNxbC1zcGVjaWZpYywgYnV0IGlnbm9yZWQgYnkgb3RoZXIgZGF0YWJhc2UKCQkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCQkKICAgICAgICAvLyB0YWJsZSBzY2hlbWEgZGVzY3JpcHRpb24KICAgICAgICAkZmxkcyA9ICIKCQkJaWQgSSBLRVksCgkJCWRlc2NyaXB0aW9uIEMoODApCgkJCSI7CgoJCS8vIGNyZWF0ZSBpdC4gVGhpcyBzaG91bGQgZG8gZXJyb3IgY2hlY2tpbmcsIGJ1dCBJJ20gYSBsYXp5IHNvZC4KCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfbWluaWZ5IiwKCQkJCSRmbGRzLCAkdGFib3B0YXJyYXkpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCgkJLy8gY3JlYXRlIGEgc2VxdWVuY2UKCQkkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX21pbmlmeV9zZXEiKTsKCQkqLwoJCQoJCS8vIHBlcm1pc3Npb25zCgkJJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ0FkZCBTdHlsZXNoZWV0cycsJ0FkZCBTdHlsZXNoZWV0cycpOwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTW9kaWZ5IFN0eWxlc2hlZXRzJywnTW9kaWZ5IFN0eWxlc2hlZXRzJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdSZW1vdmUgU3R5bGVzaGVldHMnLCdSZW1vdmUgU3R5bGVzaGVldHMnKTsKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ0FkZCBKYXZhc2NyaXB0cycsJ0FkZCBKYXZhc2NyaXB0cycpOwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTW9kaWZ5IEphdmFzY3JpcHRzJywnTW9kaWZ5IEphdmFzY3JpcHRzJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdSZW1vdmUgSmF2YXNjcmlwdHMnLCdSZW1vdmUgSmF2YXNjcmlwdHMnKTsKCgoJCS8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwoJCSR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7CgkJCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFVuaW5zdGFsbCgpCgkgICBTb21ldGltZXMsIGFuIGV4Y2VwdGlvbmFsbHkgdW5lbmxpZ2h0ZW5lZCBvciBpZ25vcmFudAoJICAgYWRtaW4gd2lsbCB3aXNoIHRvIHVuaW5zdGFsbCB5b3VyIG1vZHVsZS4gV2hpbGUgaXQKCSAgIHdvdWxkIGJlIGJlc3QgdG8gbGF5IGludG8gdGhlc2UgaWRpb3RzIHdpdGggYSBjbHVlc3RpY2ssCgkgICB3ZSB3aWxsIGRvIHRoZSBtYWduYW5pbW91cyB0aGluZyBhbmQgcmVtb3ZlIHRoZSBtb2R1bGUKCSAgIGFuZCBjbGVhbiB1cCB0aGUgZGF0YWJhc2UsIHBlcm1pc3Npb25zLCBhbmQgcHJlZmVyZW5jZXMKCSAgIHRoYXQgYXJlIHNwZWNpZmljIHRvIGl0LgoJICAgVGhpcyBpcyB0aGUgbWV0aG9kIHdoZXJlIHdlIGRvIHRoaXMuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJCS8qCgkJLy8gVHlwaWNhbCBEYXRhYmFzZSBSZW1vdmFsCgkJJGRiID0mICRnQ21zLT5HZXREYigpOwoJCQoJCS8vIHJlbW92ZSB0aGUgZGF0YWJhc2UgdGFibGUKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCAkZGIgKTsKCQkkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9taW5pZnkiICk7CgkJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKCQkvLyByZW1vdmUgdGhlIHNlcXVlbmNlCgkJJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX21pbmlmeV9zZXEiICk7CgkJKi8KCQkKCQkvLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCgkJJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ0FkZCBTdHlsZXNoZWV0cycpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTW9kaWZ5IFN0eWxlc2hlZXRzJyk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdSZW1vdmUgU3R5bGVzaGVldHMnKTsKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ0FkZCBKYXZhc2NyaXB0cycpOwokdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTW9kaWZ5IEphdmFzY3JpcHRzJyk7CiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdSZW1vdmUgSmF2YXNjcmlwdHMnKTsKCgkJCgkJLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFVwZ3JhZGUoKQoJICAgSWYgeW91ciBtb2R1bGUgdmVyc2lvbiBudW1iZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24KCSAgIG51bWJlciBvZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSwgdGhlIENNUyBBZG1pbiB3aWxsIGdpdmUKCSAgIHlvdSBhIGNoYW5jZSB0byB1cGdyYWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIGZ1bmN0aW9uCgkgICB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHVwZ3JhZGUuCgkgICBJZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgdXBncmFkZXMgaW5jcmVtZW50YWxseSwKCSAgIHNvIHlvdSBjb3VsZCB1cGdyYWRlIGZyb20gdmVyc2lvbiAwLjAuMSB0byAxMC41Ljcgd2l0aAoJICAgYSBzaW5nbGUgY2FsbC4gRm9yIGEgZ3JlYXQgZXhhbXBsZSBvZiB0aGlzLCBzZWUgdGhlIE5ld3MKCSAgIG1vZHVsZSBpbiB0aGUgc3RhbmRhcmQgQ01TIGluc3RhbGwuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgkJJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwoJCXN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQoJCXsKCQkJY2FzZSAiMS4wIjoKCQkJICAgICBicmVhazsKCQkJY2FzZSAiMS4xIjoKCQkJICAgICBicmVhazsKCQl9CgkJCgkJLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/min/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/builder/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/builder/bm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[amF2YXNjcmlwdDooZnVuY3Rpb24oKSB7CiAgICB2YXIgZCA9IGRvY3VtZW50CiAgICAgICAsdXJpcyA9IFtdCiAgICAgICAsaSA9IDAKICAgICAgICxvCiAgICAgICAsaG9tZSA9IChsb2NhdGlvbiArICcnKS5zcGxpdCgnLycpLnNwbGljZSgwLCAzKS5qb2luKCcvJykgKyAnLyc7CiAgICBmdW5jdGlvbiBhZGQodXJpKSB7CiAgICAgICAgcmV0dXJuICgwID09PSB1cmkuaW5kZXhPZihob21lKSkKICAgICAgICAgICAgJiYgKCEvW1w/Jl0vLnRlc3QodXJpKSkKICAgICAgICAgICAgJiYgdXJpcy5wdXNoKGVzY2FwZSh1cmkuc3Vic3RyKGhvbWUubGVuZ3RoKSkpOwogICAgfTsKICAgIGZ1bmN0aW9uIHNoZWV0KHNzKSB7CiAgICAgICAgLy8gd2UgbXVzdCBjaGVjayB0aGUgZG9tYWluIHdpdGggYWRkKCkgYmVmb3JlIGFjY2Vzc2luZyBzcy5jc3NSdWxlcwogICAgICAgIC8vIG90aGVyd2lzZSBhIHNlY3VyaXR5IGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bgogICAgICAgIGlmIChzcy5ocmVmICYmIGFkZChzcy5ocmVmKSAmJiBzcy5jc3NSdWxlcykgewogICAgICAgICAgICB2YXIgaSA9IDAsIHI7CiAgICAgICAgICAgIHdoaWxlIChyID0gc3MuY3NzUnVsZXNbaSsrXSkKICAgICAgICAgICAgICAgIHIuc3R5bGVTaGVldCAmJiBzaGVldChyLnN0eWxlU2hlZXQpOwogICAgICAgIH0KICAgIH07CiAgICB3aGlsZSAobyA9IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpW2krK10pCiAgICAgICAgby5zcmMgJiYgIShvLnR5cGUgJiYgL3Zicy9pLnRlc3Qoby50eXBlKSkgJiYgYWRkKG8uc3JjKTsKICAgIGkgPSAwOwogICAgd2hpbGUgKG8gPSBkLnN0eWxlU2hlZXRzW2krK10pCiAgICAvKiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1TdHlsZS9zdHlsZXNoZWV0cy5odG1sI1N0eWxlU2hlZXRzLURvY3VtZW50U3R5bGUtc3R5bGVTaGVldHMKICAgIGRvY3VtZW50LnN0eWxlU2hlZXQgaXMgYSBsaXN0IHByb3BlcnR5IHdoZXJlIFswXSBhY2Nlc3NlcyB0aGUgMXN0IGVsZW1lbnQgYW5kIAogICAgW291dE9mUmFuZ2VdIHJldHVybnMgbnVsbC4gSW4gSUUsIHN0eWxlU2hlZXRzIGlzIGEgZnVuY3Rpb24sIGFuZCBhbHNvIHRocm93cyBhbiAKICAgIGV4Y2VwdGlvbiB3aGVuIHlvdSBjaGVjayB0aGUgb3V0IG9mIGJvdW5kcyBpbmRleC4gKHNpZ2gpICovCiAgICAgICAgc2hlZXQobyk7CiAgICBpZiAodXJpcy5sZW5ndGgpCiAgICAgICAgd2luZG93Lm9wZW4oJyVCVUlMREVSX1VSTCUjJyArIHVyaXMuam9pbignLCcpKTsKICAgIGVsc2UKICAgICAgICBhbGVydCgnTm8ganMvY3NzIGZpbGVzIGZvdW5kIHdpdGggVVJMcyB3aXRoaW4gIicgCiAgICAgICAgICAgICsgaG9tZS5zcGxpdCgnLycpWzJdCiAgICAgICAgICAgICsgJyIuXG4oVGhpcyB0b29sIGlzIGxpbWl0ZWQgdG8gVVJMcyB3aXRoIHRoZSBzYW1lIGRvbWFpbi4pJyk7Cn0pKCk7]]></data>
	</file>
	<file>
	  <filename>/min/builder/bm2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[amF2YXNjcmlwdDooZnVuY3Rpb24oKXsKICAgIHZhciBkID0gZG9jdW1lbnQKICAgICAgICxjID0gZC5jb29raWUKICAgICAgICxtID0gYy5tYXRjaCgvXGJtaW5pZnlEZWJ1Zz0oW147IF0rKS8pCiAgICAgICAsdiA9IG0gPyBkZWNvZGVVUklDb21wb25lbnQobVsxXSkgOiAnJwogICAgICAgLHAgPSBwcm9tcHQoJ0RlYnVnIE1pbmlmeSBVUklzIG9uICcgKyBsb2NhdGlvbi5ob3N0bmFtZSArICcgd2hpY2ggY29udGFpbjonCiAgICAgICAgICAgICAgICAgKyAnXG4oZW1wdHkgZm9yIG5vbmUsIHNwYWNlID0gT1IsICogPSBhbnkgc3RyaW5nLCA/ID0gYW55IGNoYXIpJywgdikKICAgIDsKICAgIGlmIChwID09PSBudWxsKSByZXR1cm47CiAgICBwID0gcC5yZXBsYWNlKC9eXHMrfFxzKyQvLCAnJyk7CiAgICB2ID0gKHAgPT09ICcnKQogICAgICAgID8gJ21pbmlmeURlYnVnPTsgZXhwaXJlcz1GcmksIDI3IEp1bCAyMDAxIDAyOjQ3OjExIFVUQzsgcGF0aD0vJwogICAgICAgIDogJ21pbmlmeURlYnVnPScgKyBlbmNvZGVVUklDb21wb25lbnQocCkgKyAnOyBwYXRoPS8nOwogICAgZC5jb29raWUgPSB2Owp9KSgpOw==]]></data>
	</file>
	<file>
	  <filename>/min/builder/index.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKHBocHZlcnNpb24oKSA8IDUpIHsKCWV4aXQoJ01pbmlmeSByZXF1aXJlcyBQSFA1IG9yIGdyZWF0ZXIuJyk7Cn0KCi8vIGNoZWNrIGZvciBhdXRvLWVuY29kaW5nCiRlbmNvZGVPdXRwdXQgPSAoZnVuY3Rpb25fZXhpc3RzKCdnemRlZmxhdGUnKSAmJiAhaW5pX2dldCgnemxpYi5vdXRwdXRfY29tcHJlc3Npb24nKSk7CgovLyByZWNvbW1lbmQgJG1pbl9zeW1saW5rcyBzZXR0aW5nIGZvciBBcGFjaGUgVXNlckRpcgokc3ltbGlua09wdGlvbiA9ICcnOwppZiAoMCA9PT0gc3RycG9zKCRfU0VSVkVSWyJTRVJWRVJfU09GVFdBUkUiXSwgJ0FwYWNoZS8nKSAmJiBwcmVnX21hdGNoKCdAXi9cXH4oXFx3KykvQCcsICRfU0VSVkVSWydSRVFVRVNUX1VSSSddLCAkbSkKKSB7CgkkdXNlckRpciA9IERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkbVsxXSAuIERJUkVDVE9SWV9TRVBBUkFUT1I7CglpZiAoZmFsc2UgIT09IHN0cnBvcyhfX0ZJTEVfXywgJHVzZXJEaXIpKSB7CgkJJHNtID0gYXJyYXkoKTsKCQkkc21bIi8vfnskbVsxXX0iXSA9IGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpOwoJCSRhcnJheSA9IHN0cl9yZXBsYWNlKCdhcnJheSAoJywgJ2FycmF5KCcsIHZhcl9leHBvcnQoJHNtLCAxKSk7CgkJJHN5bWxpbmtPcHRpb24gPSAiXCRtaW5fc3ltbGlua3MgPSAkYXJyYXk7IjsKCX0KfQoKcmVxdWlyZSBkaXJuYW1lKF9fRklMRV9fKSAuICd2ZW5kb3IvY29uZmlnLnBocCc7CgpyZXF1aXJlICIkbWluX2xpYlBhdGgvTWluaWZ5L0xvYWRlci5waHAiOwpNaW5pZnlfTG9hZGVyOjpyZWdpc3RlcigpOwoKaWYgKCEkbWluX2VuYWJsZUJ1aWxkZXIpIHsKCWhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJyk7CglkaWUoJ1RoaXMgYXBwbGljYXRpb24gaXMgbm90IGVuYWJsZWQuIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5L3dpa2kvQnVpbGRlckFwcCcpOwp9CgppZiAoaXNzZXQoJG1pbl9idWlsZGVyUGFzc3dvcmQpICYmIGlzX3N0cmluZygkbWluX2J1aWxkZXJQYXNzd29yZCkgJiYgJG1pbl9idWlsZGVyUGFzc3dvcmQgIT09ICcnKSB7CglEb29EaWdlc3RBdXRoOjpodHRwX2F1dGgoJ01pbmlmeSBCdWlsZGVyJywgYXJyYXkoJ2FkbWluJyA9PiAkbWluX2J1aWxkZXJQYXNzd29yZCkpOwp9CgokY2FjaGVQYXRoQ29kZSA9ICcnOwppZiAoIWlzc2V0KCRtaW5fY2FjaGVQYXRoKSAmJiAhZnVuY3Rpb25fZXhpc3RzKCdzeXNfZ2V0X3RlbXBfZGlyJykpIHsKCSRkZXRlY3RlZFRtcCA9IE1pbmlmeV9DYWNoZV9GaWxlOjp0bXAoKTsKCSRjYWNoZVBhdGhDb2RlID0gIlwkbWluX2NhY2hlUGF0aCA9ICIgLiB2YXJfZXhwb3J0KCRkZXRlY3RlZFRtcCwgMSkgLiAnOyc7Cn0KCm9iX3N0YXJ0KCk7Cj8+CjwhRE9DVFlQRSBodG1sPgo8dGl0bGU+TWluaWZ5IFVSSSBCdWlsZGVyPC90aXRsZT4KPG1ldGEgbmFtZT0iUk9CT1RTIiBjb250ZW50PSJOT0lOREVYLCBOT0ZPTExPVyI+CjxzdHlsZT4KCWJvZHkge21hcmdpbjoxZW0gNjBweDt9CgloMSwgaDIsIGgzIHttYXJnaW4tbGVmdDotMjVweDsgcG9zaXRpb246cmVsYXRpdmU7fQoJaDEge21hcmdpbi10b3A6MDt9Cgkjc291cmNlcyB7bWFyZ2luOjA7IHBhZGRpbmc6MDt9Cgkjc291cmNlcyBsaSB7bWFyZ2luOjAgMCAwIDQwcHh9Cgkjc291cmNlcyBsaSBpbnB1dCB7bWFyZ2luLWxlZnQ6MnB4fQoJI2FkZCB7bWFyZ2luOjVweCAwIDFlbSA0MHB4fQoJLmhpZGUge2Rpc3BsYXk6bm9uZX0KCSN1cmlUYWJsZSB7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO30KCSN1cmlUYWJsZSB0ZCwgI3VyaVRhYmxlIHRoIHtwYWRkaW5nLXRvcDoxMHB4O30KCSN1cmlUYWJsZSB0aCB7cGFkZGluZy1yaWdodDoxMHB4O30KCSNncm91cENvbmZpZyB7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO30KCWIge2NvbG9yOiNjMDB9CgkudG9wTm90ZSB7YmFja2dyb3VuZDogI2ZmOTsgZGlzcGxheTppbmxpbmUtYmxvY2s7IHBhZGRpbmc6LjVlbSAuNmVtOyBtYXJnaW46MCAwIDFlbTt9CgkudG9wV2FybmluZyB7YmFja2dyb3VuZDojYzAwOyBjb2xvcjojZmZmOyBwYWRkaW5nOi41ZW0gLjZlbTsgbWFyZ2luOjAgMCAxZW07fQoJLnRvcFdhcm5pbmcgYSB7Y29sb3I6I2ZmZjt9CgkjanNEaWRudExvYWQge2Rpc3BsYXk6bm9uZTt9Cjwvc3R5bGU+Cjxib2R5Pgo8P3BocCBpZiAoJHN5bWxpbmtPcHRpb24pOiA/PgoJICAgIDxkaXYgY2xhc3M9dG9wTm90ZT48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEl0IGxvb2tzIGxpa2UgeW91J3JlIHJ1bm5pbmcgTWluaWZ5IGluIGEgdXNlcgoJCQlkaXJlY3RvcnkuIFlvdSBtYXkgbmVlZCB0aGUgZm9sbG93aW5nIG9wdGlvbiBpbiAvbWluL2NvbmZpZy5waHAgdG8gaGF2ZSBVUklzCgkJCWNvcnJlY3RseSByZXdyaXR0ZW4gaW4gQ1NTIG91dHB1dDoKCQkJPGJyPjx0ZXh0YXJlYSBpZD1zeW1saW5rT3B0IHJvd3M9MyBjb2xzPTgwIHJlYWRvbmx5Pjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3ltbGlua09wdGlvbik7ID8+PC90ZXh0YXJlYT4KCQk8L2Rpdj4KPD9waHAgZW5kaWY7ID8+CgoJPHAgY2xhc3M9dG9wV2FybmluZyBpZD1qc0RpZG50TG9hZD48c3Ryb25nPlVoIE9oLjwvc3Ryb25nPiBNaW5pZnkgd2FzIHVuYWJsZSB0bwoJCXNlcnZlIEphdmFzY3JpcHQgZm9yIHRoaXMgYXBwLiBUbyB0cm91Ymxlc2hvb3QgdGhpcywKCQk8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5L3dpa2kvRGVidWdnaW5nIj5lbmFibGUgRmlyZVBIUCBkZWJ1Z2dpbmc8L2E+CgkJYW5kIHJlcXVlc3QgdGhlIDxhIGlkPWJ1aWxkZXJTY3JpcHRTcmMgaHJlZj0jPk1pbmlmeSBVUkw8L2E+IGRpcmVjdGx5LiBIb3BlZnVsbHkgdGhlCgkJRmlyZVBIUCBjb25zb2xlIHdpbGwgcmVwb3J0IHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuCgk8L3A+Cgo8P3BocCBpZiAoJGNhY2hlUGF0aENvZGUpOiA/PgoJCTxwIGNsYXNzPXRvcE5vdGU+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiA8Y29kZT48P3BocCBlY2hvCglodG1sc3BlY2lhbGNoYXJzKCRkZXRlY3RlZFRtcCk7Cgk/PjwvY29kZT4gd2FzIGRpc2NvdmVyZWQgYXMgYSB1c2FibGUgdGVtcCBkaXJlY3RvcnkuPGJyPlRvCgkJCXNsaWdodGx5IGltcHJvdmUgcGVyZm9ybWFuY2UgeW91IGNhbiBoYXJkY29kZSB0aGlzIGluIC9taW4vY29uZmlnLnBocDoKCQkJPGNvZGU+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRjYWNoZVBhdGhDb2RlKTsgPz48L2NvZGU+PC9wPgoJCQkJPD9waHAgZW5kSWY7ID8+CgoJPHAgaWQ9bWluUmV3cml0ZUZhaWxlZCBjbGFzcz0iaGlkZSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBZb3VyIHdlYnNlcnZlciBkb2VzIG5vdCBzZWVtIHRvCgkJc3VwcG9ydCBtb2RfcmV3cml0ZSAodXNlZCBpbiAvbWluLy5odGFjY2VzcykuIFlvdXIgTWluaWZ5IFVSSXMgd2lsbCBjb250YWluICI/Iiwgd2hpY2ggCgkJPGEgaHJlZj0iaHR0cDovL3d3dy5zdGV2ZXNvdWRlcnMuY29tL2Jsb2cvMjAwOC8wOC8yMy9yZXZ2aW5nLWZpbGVuYW1lcy1kb250LXVzZS1xdWVyeXN0cmluZy8iCgkJICAgPm1heSByZWR1Y2UgdGhlIGJlbmVmaXQgb2YgcHJveHkgY2FjaGUgc2VydmVyczwvYT4uPC9wPgoKCTxoMT5NaW5pZnkgVVJJIEJ1aWxkZXI8L2gxPgoKCTxub3NjcmlwdD48cCBjbGFzcz0idG9wTm90ZSI+SmF2YXNjcmlwdCBhbmQgYSBicm93c2VyIHN1cHBvcnRlZCBieSBqUXVlcnkgMS4yLjYgaXMgcmVxdWlyZWQKCQlmb3IgdGhpcyBhcHBsaWNhdGlvbi48L3A+PC9ub3NjcmlwdD4KCgk8ZGl2IGlkPWFwcCBjbGFzcz1oaWRlPgoKCQk8cD5DcmVhdGUgYSBsaXN0IG9mIEphdmFzY3JpcHQgb3IgQ1NTIGZpbGVzIChvciAxIGlzIGZpbmUpIHlvdSdkIGxpa2UgdG8gY29tYmluZQoJCQlhbmQgY2xpY2sgW1VwZGF0ZV0uPC9wPgoKCQk8b2wgaWQ9c291cmNlcz48bGk+PC9saT48L29sPgoJCTxkaXYgaWQ9YWRkPjxidXR0b24+QWRkIGZpbGUgKzwvYnV0dG9uPjwvZGl2PgoKCQk8ZGl2IGlkPWJtVXJpcz48L2Rpdj4KCgkJPHA+PGJ1dHRvbiBpZD11cGRhdGUgY2xhc3M9aGlkZT5VcGRhdGU8L2J1dHRvbj48L3A+CgoJCTxkaXYgaWQ9cmVzdWx0cyBjbGFzcz1oaWRlPgoKCQkJPGgyPk1pbmlmeSBVUkk8L2gyPgoJCQk8cD5QbGFjZSB0aGlzIFVSSSBpbiB5b3VyIEhUTUwgdG8gc2VydmUgdGhlIGZpbGVzIGFib3ZlIGNvbWJpbmVkLCBtaW5pZmllZCwgY29tcHJlc3NlZCBhbmQKCQkJCXdpdGggY2FjaGUgaGVhZGVycy48L3A+CgkJCTx0YWJsZSBpZD11cmlUYWJsZT4KCQkJCTx0cj48dGg+VVJJPC90aD48dGQ+PGEgaWQ9dXJpQSBjbGFzcz1leHQ+L21pbjwvYT4gPHNtYWxsPihvcGVucyBpbiBuZXcgd2luZG93KTwvc21hbGw+PC90ZD48L3RyPgoJCQkJPHRyPjx0aD5IVE1MPC90aD48dGQ+PGlucHV0IGlkPXVyaUh0bWwgdHlwZT10ZXh0IHNpemU9MTAwIHJlYWRvbmx5PjwvdGQ+PC90cj4KCQkJPC90YWJsZT4KCgkJCTxoMj5Ib3cgdG8gc2VydmUgdGhlc2UgZmlsZXMgYXMgYSBncm91cDwvaDI+CgkJCTxwPkZvciB0aGUgYmVzdCBwZXJmb3JtYW5jZSB5b3UgY2FuIHNlcnZlIHRoZXNlIGZpbGVzIGFzIGEgcHJlLWRlZmluZWQgZ3JvdXAgd2l0aCBhIFVSSQoJCQkJbGlrZTogPGNvZGU+PHNwYW4gY2xhc3M9bWluUm9vdD4vbWluLz88L3NwYW4+Zz1rZXlOYW1lPC9jb2RlPjwvcD4KCQkJPHA+VG8gZG8gdGhpcywgYWRkIGEgbGluZSBsaWtlIHRoaXMgdG8gL21pbi9ncm91cHNDb25maWcucGhwOjwvcD4KCgkJCTxwcmU+PGNvZGU+cmV0dXJuIGFycmF5KAogICAgPHNwYW4gc3R5bGU9ImNvbG9yOiM2NjYiPi4uLiB5b3VyIGV4aXN0aW5nIGdyb3VwcyBoZXJlIC4uLjwvc3Bhbj4KPGlucHV0IGlkPWdyb3VwQ29uZmlnIHNpemU9MTAwIHR5cGU9dGV4dCByZWFkb25seT4KKTs8L2NvZGU+PC9wcmU+CgoJCQk8cD48ZW0+TWFrZSBzdXJlIHRvIHJlcGxhY2UgPGNvZGU+a2V5TmFtZTwvY29kZT4gd2l0aCBhIHVuaXF1ZSBrZXkgZm9yIHRoaXMgZ3JvdXAuPC9lbT48L3A+CgkJPC9kaXY+CgoJCTxkaXYgaWQ9Z2V0Qm0+CgkJCTxoMz5GaW5kIFVSSXMgb24gYSBQYWdlPC9oMz4KCQkJPHA+WW91IGNhbiB1c2UgdGhlIGJvb2ttYXJrbGV0IGJlbG93IHRvIGZldGNoIGFsbCBDU1MgJmFtcDsgSmF2YXNjcmlwdCBVUklzIGZyb20gYSBwYWdlCgkJCQlvbiB5b3VyIHNpdGUuIFdoZW4geW91IGFjdGl2ZSBpdCwgdGhpcyBwYWdlIHdpbGwgb3BlbiBpbiBhIG5ldyB3aW5kb3cgd2l0aCBhIGxpc3Qgb2YKCQkJCWF2YWlsYWJsZSBVUklzIHRvIGFkZC48L3A+CgoJCQk8cD48YSBpZD1ibT5DcmVhdGUgTWluaWZ5IFVSSXM8L2E+IDxzbWFsbD4ocmlnaHQtY2xpY2ssIGFkZCB0byBib29rbWFya3MpPC9zbWFsbD48L3A+CgkJPC9kaXY+CgoJCTxoMz5Db21iaW5pbmcgQ1NTIGZpbGVzIHRoYXQgY29udGFpbiA8Y29kZT5AaW1wb3J0PC9jb2RlPjwvaDM+CgkJPHA+SWYgeW91ciBDU1MgZmlsZXMgY29udGFpbiA8Y29kZT5AaW1wb3J0PC9jb2RlPiBkZWNsYXJhdGlvbnMsIE1pbmlmeSB3aWxsIG5vdCAKCQkJcmVtb3ZlIHRoZW0uIFRoZXJlZm9yZSwgeW91IHdpbGwgd2FudCB0byByZW1vdmUgdGhvc2UgdGhhdCBwb2ludCB0byBmaWxlcyBhbHJlYWR5CgkJCWluIHlvdXIgbGlzdCwgYW5kIG1vdmUgYW55IG90aGVycyB0byB0aGUgdG9wIG9mIHRoZSBmaXJzdCBmaWxlIGluIHlvdXIgbGlzdCAKCQkJKGltcG9ydHMgYmVsb3cgYW55IHN0eWxlcyB3aWxsIGJlIGlnbm9yZWQgYnkgYnJvd3NlcnMgYXMgaW52YWxpZCkuPC9wPgoJCTxwPklmIHlvdSBkZXNpcmUsIHlvdSBjYW4gdXNlIE1pbmlmeSBVUklzIGluIGltcG9ydHMgYW5kIHRoZXkgd2lsbCBub3QgYmUgdG91Y2hlZAoJCQlieSBNaW5pZnkuIEUuZy4gPGNvZGU+QGltcG9ydCAiPHNwYW4gY2xhc3M9bWluUm9vdD4vbWluLz88L3NwYW4+Zz1jc3MyIjs8L2NvZGU+PC9wPgoKCQk8aDM+RGVidWcgTW9kZTwvaDM+CgkJPHA+V2hlbiAvbWluL2NvbmZpZy5waHAgaGFzIDxjb2RlPiRtaW5fYWxsb3dEZWJ1Z0ZsYWcgPSA8c3Ryb25nPnRydWU8L3N0cm9uZz47PC9jb2RlPgoJCQl5b3UgY2FuIGdldCBkZWJ1ZyBvdXRwdXQgYnkgYXBwZW5kaW5nIDxjb2RlPiZhbXA7ZGVidWc8L2NvZGU+IHRvIGEgTWluaWZ5IFVSTCwgb3IKCQkJYnkgc2VuZGluZyB0aGUgY29va2llIDxjb2RlPm1pbkRlYnVnPSZsdDttYXRjaCZndDs8L2NvZGU+LCB3aGVyZSA8Y29kZT4mbHQ7bWF0Y2gmZ3Q7PC9jb2RlPgoJCQlzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIE1pbmlmeSBVUklzIHlvdSdkIGxpa2UgdG8gZGVidWcuIFRoaXMgYm9va21hcmtsZXQgd2lsbCBhbGxvdyB5b3UgdG8KCQkJc2V0IHRoaXMgY29va2llLjwvcD4KCQk8cD48YSBpZD1ibTI+TWluaWZ5IERlYnVnPC9hPiA8c21hbGw+KHJpZ2h0LWNsaWNrLCBhZGQgdG8gYm9va21hcmtzKTwvc21hbGw+PC9wPgoKCTwvZGl2PjwhLS0gI2FwcCAtLT4KCgk8aHI+Cgk8cD5OZWVkIGhlbHA/IENoZWNrIHRoZSA8YSBocmVmPSJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5L3cvbGlzdD9jYW49MyI+d2lraTwvYT4sCgkJb3IgcG9zdCB0byB0aGUgPGEgY2xhc3M9ZXh0IGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9taW5pZnkiPmRpc2N1c3Npb24KCQkJbGlzdDwvYT4uPC9wPgoJPHA+PHNtYWxsPlBvd2VyZWQgYnkgTWluaWZ5IDw/cGhwIGVjaG8gTWluaWZ5OjpWRVJTSU9OOyA/Pjwvc21hbGw+PC9wPgoKCTxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjYuMy9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KCTxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgnPHNjcmlwdCBzcmM9ImpxdWVyeS0xLjYuMy5taW4uanMiPjxcL3NjcmlwdD4nKTwvc2NyaXB0PgoJPHNjcmlwdD4KCQkJCShmdW5jdGlvbigpIHsKCQkJCQkvLyB3b3JrYXJvdW5kIHJlcXVpcmVkIHRvIHRlc3Qgd2hlbiAvbWluIGlzbid0IGNoaWxkIG9mIHdlYiByb290CgkJCQkJdmFyIHNyYyA9ICIuLi8/Zj0iICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywgJy9faW5kZXguanMnKS5zdWJzdHIoMSk7CgkJCQkJLy8gbG9hZCBzY3JpcHQgaW1tZWRpYXRlbHkKCQkJCQlkb2N1bWVudC53cml0ZSgnPFxzY3JpcHQgc3JjPSInICsgc3JjICsgJyI+PFwvc2NyaXB0PicpOwoJCQkJCSQoZnVuY3Rpb24oKSB7CgkJCQkJCSQoJyNidWlsZGVyU2NyaXB0U3JjJylbMF0uaHJlZiA9IHNyYzsKCQkJCQkJLy8gZ2l2ZSBNaW5pZnkgYSBmZXcgc2Vjb25kcyB0byBzZXJ2ZSBfaW5kZXguanMgYmVmb3JlIHNob3dpbmcgc2NhcnkgcmVkIHdhcm5pbmcKCQkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJCQkJCWlmICghd2luZG93Lk1VQikgewoJCQkJCQkJCS8vIE1pbmlmeSBkaWRuJ3QgbG9hZAoJCQkJCQkJCSQoJyNqc0RpZG50TG9hZCcpLmNzcyh7ZGlzcGxheTogJ2Jsb2NrJ30pOwoJCQkJCQkJfQoJCQkJCQl9LCAzMDAwKTsKCgkJCQkJCS8vIGRldGVjdGlvbiBvZiBkb3VibGUgb3V0cHV0IGVuY29kaW5nCgkJCQkJCXZhciBtc2cgPSAnPFxwIGNsYXNzPXRvcFdhcm5pbmc+PFxzdHJvbmc+V2FybmluZzo8XC9zdHJvbmc+ICc7CgkJCQkJCXZhciB1cmwgPSAnb2NDaGVjay5waHA/JyArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CgkJCQkJCSQuZ2V0KHVybCwgZnVuY3Rpb24ob2NTdGF0dXMpIHsKCQkJCQkJCSQuZ2V0KHVybCArICcmaGVsbG89MScsIGZ1bmN0aW9uKG9jSGVsbG8pIHsKCQkJCQkJCQlpZiAob2NIZWxsbyAhPSAnV29ybGQhJykgewoJCQkJCQkJCQltc2cgKz0gJ0l0IGFwcGVhcnMgb3V0cHV0IGlzIGJlaW5nIGF1dG9tYXRpY2FsbHkgY29tcHJlc3NlZCwgaW50ZXJmZXJpbmcgJwoJCQkJCQkJCQkJCSsgJyB3aXRoIE1pbmlmeVwncyBvd24gY29tcHJlc3Npb24uICc7CgkJCQkJCQkJCWlmIChvY1N0YXR1cyA9PSAnMScpCgkJCQkJCQkJCQltc2cgKz0gJ1RoZSBvcHRpb24gInpsaWIub3V0cHV0X2NvbXByZXNzaW9uIiBpcyBlbmFibGVkIGluIHlvdXIgUEhQIGNvbmZpZ3VyYXRpb24uICcKCQkJCQkJCQkJCQkJKyAnTWluaWZ5IHNldCB0aGlzIHRvICIwIiwgYnV0IGl0IGhhZCBubyBlZmZlY3QuIFRoaXMgb3B0aW9uIG11c3QgYmUgZGlzYWJsZWQgJwoJCQkJCQkJCQkJCQkrICdpbiBwaHAuaW5pIG9yIC5odGFjY2Vzcy4nOwoJCQkJCQkJCQllbHNlCgkJCQkJCQkJCQltc2cgKz0gJ1RoZSBvcHRpb24gInpsaWIub3V0cHV0X2NvbXByZXNzaW9uIiBpcyBkaXNhYmxlZCBpbiB5b3VyIFBIUCBjb25maWd1cmF0aW9uICcKCQkJCQkJCQkJCQkJKyAnc28gdGhpcyBiZWhhdmlvciBpcyBsaWtlbHkgZHVlIHRvIGEgc2VydmVyIG9wdGlvbi4nOwoJCQkJCQkJCQkkKGRvY3VtZW50LmJvZHkpLnByZXBlbmQobXNnICsgJzxcL3A+Jyk7CgkJCQkJCQkJfSBlbHNlCgkJCQkJCQkJaWYgKG9jU3RhdHVzID09ICcxJykKCQkJCQkJCQkJJChkb2N1bWVudC5ib2R5KS5wcmVwZW5kKCc8XHAgY2xhc3M9dG9wTm90ZT48XHN0cm9uZz5Ob3RlOjwvXHN0cm9uZz4gVGhlIG9wdGlvbiAnCgkJCQkJCQkJCQkJKyAnInpsaWIub3V0cHV0X2NvbXByZXNzaW9uIiBpcyBlbmFibGVkIGluIHlvdXIgUEhQIGNvbmZpZ3VyYXRpb24sIGJ1dCBoYXMgYmVlbiAnCgkJCQkJCQkJCQkJKyAnc3VjY2Vzc2Z1bGx5IGRpc2FibGVkIHZpYSBpbmlfc2V0KCkuIElmIHlvdSBleHBlcmllbmNlIG1hbmdsZWQgb3V0cHV0IHlvdSAnCgkJCQkJCQkJCQkJKyAnbWF5IHdhbnQgdG8gY29uc2lkZXIgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGluIHlvdXIgUEhQIGNvbmZpZ3VyYXRpb24uPFwvcD4nCgkJCQkJCQkJCQkJKTsKCQkJCQkJCX0pOwoJCQkJCQl9KTsKCQkJCQl9KTsKCQkJCX0pKCk7Cgk8L3NjcmlwdD4KPC9ib2R5Pgo8P3BocAokY29udGVudCA9IG9iX2dldF9jbGVhbigpOwoKLy8gc2V0dXAgTWluaWZ5Ck1pbmlmeTo6c2V0Q2FjaGUoCgkJaXNzZXQoJG1pbl9jYWNoZVBhdGgpID8gJG1pbl9jYWNoZVBhdGggOiAnJwoJCSwgJG1pbl9jYWNoZUZpbGVMb2NraW5nCik7Ck1pbmlmeTo6JHVwbG9hZGVySG91cnNCZWhpbmQgPSAkbWluX3VwbG9hZGVySG91cnNCZWhpbmQ7CgpNaW5pZnk6OnNlcnZlKCdQYWdlJywgYXJyYXkoCgknY29udGVudCcgPT4gJGNvbnRlbnQKCSwgJ2lkJyA9PiBfX0ZJTEVfXwoJLCAnbGFzdE1vZGlmaWVkVGltZScgPT4gbWF4KAoJCQkvLyByZWdlbmVyYXRlIGNhY2hlIGlmIGFueSBvZiB0aGVzZSBjaGFuZ2UKCQkJZmlsZW10aW1lKF9fRklMRV9fKQoJCQksIGZpbGVtdGltZShkaXJuYW1lKF9fRklMRV9fKSAuICcvLi4vY29uZmlnLnBocCcpCgkJCSwgZmlsZW10aW1lKGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi9saWIvTWluaWZ5LnBocCcpCgkpCgksICdtaW5pZnlBbGwnID0+IHRydWUKCSwgJ2VuY29kZU91dHB1dCcgPT4gJGVuY29kZU91dHB1dAopKTsK]]></data>
	</file>
	<file>
	  <filename>/min/builder/jquery-1.6.3.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSB2MS42LjMgaHR0cDovL2pxdWVyeS5jb20vIHwgaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZSAqLw0KKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY3UoYSl7cmV0dXJuIGYuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjcihhKXtpZighY2dbYV0pe3ZhciBiPWMuYm9keSxkPWYoIjwiK2ErIj4iKS5hcHBlbmRUbyhiKSxlPWQuY3NzKCJkaXNwbGF5Iik7ZC5yZW1vdmUoKTtpZihlPT09Im5vbmUifHxlPT09IiIpe2NofHwoY2g9Yy5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSxjaC5mcmFtZUJvcmRlcj1jaC53aWR0aD1jaC5oZWlnaHQ9MCksYi5hcHBlbmRDaGlsZChjaCk7aWYoIWNpfHwhY2guY3JlYXRlRWxlbWVudCljaT0oY2guY29udGVudFdpbmRvd3x8Y2guY29udGVudERvY3VtZW50KS5kb2N1bWVudCxjaS53cml0ZSgoYy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiPyI8IWRvY3R5cGUgaHRtbD4iOiIiKSsiPGh0bWw+PGJvZHk+IiksY2kuY2xvc2UoKTtkPWNpLmNyZWF0ZUVsZW1lbnQoYSksY2kuYm9keS5hcHBlbmRDaGlsZChkKSxlPWYuY3NzKGQsImRpc3BsYXkiKSxiLnJlbW92ZUNoaWxkKGNoKX1jZ1thXT1lfXJldHVybiBjZ1thXX1mdW5jdGlvbiBjcShhLGIpe3ZhciBjPXt9O2YuZWFjaChjbS5jb25jYXQuYXBwbHkoW10sY20uc2xpY2UoMCxiKSksZnVuY3Rpb24oKXtjW3RoaXNdPWF9KTtyZXR1cm4gY31mdW5jdGlvbiBjcCgpe2NuPWJ9ZnVuY3Rpb24gY28oKXtzZXRUaW1lb3V0KGNwLDApO3JldHVybiBjbj1mLm5vdygpfWZ1bmN0aW9uIGNmKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gY2UoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gYiQoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZD1hLmRhdGFUeXBlcyxlPXt9LGcsaCxpPWQubGVuZ3RoLGosaz1kWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09InN0cmluZyImJihlW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1kW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWVbbV18fGVbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGUpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWVbalsxXSsiICIra107aWYocCl7bz1lW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmYuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGJaKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gYlkoYSxiLGMsZCl7aWYoZi5pc0FycmF5KGIpKWYuZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8YkEudGVzdChhKT9kKGEsZSk6YlkoYSsiWyIrKHR5cGVvZiBlPT0ib2JqZWN0Inx8Zi5pc0FycmF5KGUpP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZiIT1udWxsJiZ0eXBlb2YgYj09Im9iamVjdCIpZm9yKHZhciBlIGluIGIpYlkoYSsiWyIrZSsiXSIsYltlXSxjLGQpO2Vsc2UgZChhLGIpfWZ1bmN0aW9uIGJYKGEsYyl7dmFyIGQsZSxnPWYuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBjKWNbZF0hPT1iJiYoKGdbZF0/YTplfHwoZT17fSkpW2RdPWNbZF0pO2UmJmYuZXh0ZW5kKCEwLGEsZSl9ZnVuY3Rpb24gYlcoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoPWFbZl0saT0wLGo9aD9oLmxlbmd0aDowLGs9YT09PWJQLGw7Zm9yKDtpPGomJihrfHwhbCk7aSsrKWw9aFtpXShjLGQsZSksdHlwZW9mIGw9PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9YlcoYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9YlcoYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJWKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZi5pc0Z1bmN0aW9uKGMpKXt2YXIgZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYkwpLGU9MCxnPWQubGVuZ3RoLGgsaSxqO2Zvcig7ZTxnO2UrKyloPWRbZV0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBieShhLGIsYyl7dmFyIGQ9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxlPWI9PT0id2lkdGgiP2J0OmJ1O2lmKGQ+MCl7YyE9PSJib3JkZXIiJiZmLmVhY2goZSxmdW5jdGlvbigpe2N8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2QrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK3RoaXMpKXx8MDpkLT1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDB9KTtyZXR1cm4gZCsicHgifWQ9YnYoYSxiLGIpO2lmKGQ8MHx8ZD09bnVsbClkPWEuc3R5bGVbYl18fDA7ZD1wYXJzZUZsb2F0KGQpfHwwLGMmJmYuZWFjaChlLGZ1bmN0aW9uKCl7ZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIit0aGlzKSl8fDAsYyE9PSJwYWRkaW5nIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYz09PSJtYXJnaW4iJiYoZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrdGhpcykpfHwwKX0pO3JldHVybiBkKyJweCJ9ZnVuY3Rpb24gYmwoYSxiKXtiLnNyYz9mLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmYuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYmQsIi8qJDAqLyIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX1mdW5jdGlvbiBiayhhKXtmLm5vZGVOYW1lKGEsImlucHV0Iik/YmooYSk6ImdldEVsZW1lbnRzQnlUYWdOYW1lImluIGEmJmYuZ3JlcChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJqKX1mdW5jdGlvbiBiaihhKXtpZihhLnR5cGU9PT0iY2hlY2tib3gifHxhLnR5cGU9PT0icmFkaW8iKWEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkfWZ1bmN0aW9uIGJpKGEpe3JldHVybiJnZXRFbGVtZW50c0J5VGFnTmFtZSJpbiBhP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKToicXVlcnlTZWxlY3RvckFsbCJpbiBhP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9uIGJoKGEsYil7dmFyIGM7aWYoYi5ub2RlVHlwZT09PTEpe2IuY2xlYXJBdHRyaWJ1dGVzJiZiLmNsZWFyQXR0cmlidXRlcygpLGIubWVyZ2VBdHRyaWJ1dGVzJiZiLm1lcmdlQXR0cmlidXRlcyhhKSxjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihjPT09Im9iamVjdCIpYi5vdXRlckhUTUw9YS5vdXRlckhUTUw7ZWxzZSBpZihjIT09ImlucHV0Inx8YS50eXBlIT09ImNoZWNrYm94IiYmYS50eXBlIT09InJhZGlvIil7aWYoYz09PSJvcHRpb24iKWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ7ZWxzZSBpZihjPT09ImlucHV0Inx8Yz09PSJ0ZXh0YXJlYSIpYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWV9ZWxzZSBhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKTtiLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pfX1mdW5jdGlvbiBiZyhhLGIpe2lmKGIubm9kZVR5cGU9PT0xJiYhIWYuaGFzRGF0YShhKSl7dmFyIGM9Zi5leHBhbmRvLGQ9Zi5kYXRhKGEpLGU9Zi5kYXRhKGIsZCk7aWYoZD1kW2NdKXt2YXIgZz1kLmV2ZW50cztlPWVbY109Zi5leHRlbmQoe30sZCk7aWYoZyl7ZGVsZXRlIGUuaGFuZGxlLGUuZXZlbnRzPXt9O2Zvcih2YXIgaCBpbiBnKWZvcih2YXIgaT0wLGo9Z1toXS5sZW5ndGg7aTxqO2krKylmLmV2ZW50LmFkZChiLGgrKGdbaF1baV0ubmFtZXNwYWNlPyIuIjoiIikrZ1toXVtpXS5uYW1lc3BhY2UsZ1toXVtpXSxnW2hdW2ldLmRhdGEpfX19fWZ1bmN0aW9uIGJmKGEsYil7cmV0dXJuIGYubm9kZU5hbWUoYSwidGFibGUiKT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxhLmFwcGVuZENoaWxkKGEub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTphfWZ1bmN0aW9uIFYoYSxiLGMpe2I9Ynx8MDtpZihmLmlzRnVuY3Rpb24oYikpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7dmFyIGU9ISFiLmNhbGwoYSxkLGEpO3JldHVybiBlPT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE9PT1iPT09Y30pO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7dmFyIGQ9Zi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZVR5cGU9PT0xfSk7aWYoUS50ZXN0KGIpKXJldHVybiBmLmZpbHRlcihiLGQsIWMpO2I9Zi5maWx0ZXIoYixkKX1yZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gZi5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gVShhKXtyZXR1cm4hYXx8IWEucGFyZW50Tm9kZXx8YS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTF9ZnVuY3Rpb24gTShhLGIpe3JldHVybihhJiZhIT09IioiP2ErIi4iOiIiKStiLnJlcGxhY2UoeSwiYCIpLnJlcGxhY2UoeiwiJiIpfWZ1bmN0aW9uIEwoYSl7dmFyIGIsYyxkLGUsZyxoLGksaixrLGwsbSxuLG8scD1bXSxxPVtdLHI9Zi5fZGF0YSh0aGlzLCJldmVudHMiKTtpZighKGEubGl2ZUZpcmVkPT09dGhpc3x8IXJ8fCFyLmxpdmV8fGEudGFyZ2V0LmRpc2FibGVkfHxhLmJ1dHRvbiYmYS50eXBlPT09ImNsaWNrIikpe2EubmFtZXNwYWNlJiYobj1uZXcgUmVnRXhwKCIoXnxcXC4pIithLm5hbWVzcGFjZS5zcGxpdCgiLiIpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpKSxhLmxpdmVGaXJlZD10aGlzO3ZhciBzPXIubGl2ZS5zbGljZSgwKTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKWc9c1tpXSxnLm9yaWdUeXBlLnJlcGxhY2UodywiIik9PT1hLnR5cGU/cS5wdXNoKGcuc2VsZWN0b3IpOnMuc3BsaWNlKGktLSwxKTtlPWYoYS50YXJnZXQpLmNsb3Nlc3QocSxhLmN1cnJlbnRUYXJnZXQpO2ZvcihqPTAsaz1lLmxlbmd0aDtqPGs7aisrKXttPWVbal07Zm9yKGk9MDtpPHMubGVuZ3RoO2krKyl7Zz1zW2ldO2lmKG0uc2VsZWN0b3I9PT1nLnNlbGVjdG9yJiYoIW58fG4udGVzdChnLm5hbWVzcGFjZSkpJiYhbS5lbGVtLmRpc2FibGVkKXtoPW0uZWxlbSxkPW51bGw7aWYoZy5wcmVUeXBlPT09Im1vdXNlZW50ZXIifHxnLnByZVR5cGU9PT0ibW91c2VsZWF2ZSIpYS50eXBlPWcucHJlVHlwZSxkPWYoYS5yZWxhdGVkVGFyZ2V0KS5jbG9zZXN0KGcuc2VsZWN0b3IpWzBdLGQmJmYuY29udGFpbnMoaCxkKSYmKGQ9aCk7KCFkfHxkIT09aCkmJnAucHVzaCh7ZWxlbTpoLGhhbmRsZU9iajpnLGxldmVsOm0ubGV2ZWx9KX19fWZvcihqPTAsaz1wLmxlbmd0aDtqPGs7aisrKXtlPXBbal07aWYoYyYmZS5sZXZlbD5jKWJyZWFrO2EuY3VycmVudFRhcmdldD1lLmVsZW0sYS5kYXRhPWUuaGFuZGxlT2JqLmRhdGEsYS5oYW5kbGVPYmo9ZS5oYW5kbGVPYmosbz1lLmhhbmRsZU9iai5vcmlnSGFuZGxlci5hcHBseShlLmVsZW0sYXJndW1lbnRzKTtpZihvPT09ITF8fGEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7Yz1lLmxldmVsLG89PT0hMSYmKGI9ITEpO2lmKGEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVha319cmV0dXJuIGJ9fWZ1bmN0aW9uIEooYSxjLGQpe3ZhciBlPWYuZXh0ZW5kKHt9LGRbMF0pO2UudHlwZT1hLGUub3JpZ2luYWxFdmVudD17fSxlLmxpdmVGaXJlZD1iLGYuZXZlbnQuaGFuZGxlLmNhbGwoYyxlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZkWzBdLnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gRCgpe3JldHVybiEwfWZ1bmN0aW9uIEMoKXtyZXR1cm4hMX1mdW5jdGlvbiBtKGEsYyxkKXt2YXIgZT1jKyJkZWZlciIsZz1jKyJxdWV1ZSIsaD1jKyJtYXJrIixpPWYuZGF0YShhLGUsYiwhMCk7aSYmKGQ9PT0icXVldWUifHwhZi5kYXRhKGEsZyxiLCEwKSkmJihkPT09Im1hcmsifHwhZi5kYXRhKGEsaCxiLCEwKSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXshZi5kYXRhKGEsZyxiLCEwKSYmIWYuZGF0YShhLGgsYiwhMCkmJihmLnJlbW92ZURhdGEoYSxlLCEwKSxpLnJlc29sdmUoKSl9LDApfWZ1bmN0aW9uIGwoYSl7Zm9yKHZhciBiIGluIGEpaWYoYiE9PSJ0b0pTT04iKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGsoYSxjLGQpe2lmKGQ9PT1iJiZhLm5vZGVUeXBlPT09MSl7dmFyIGU9ImRhdGEtIitjLnJlcGxhY2UoaiwiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO2Q9YS5nZXRBdHRyaWJ1dGUoZSk7aWYodHlwZW9mIGQ9PSJzdHJpbmciKXt0cnl7ZD1kPT09InRydWUiPyEwOmQ9PT0iZmFsc2UiPyExOmQ9PT0ibnVsbCI/bnVsbDpmLmlzTmFOKGQpP2kudGVzdChkKT9mLnBhcnNlSlNPTihkKTpkOnBhcnNlRmxvYXQoZCl9Y2F0Y2goZyl7fWYuZGF0YShhLGMsZCl9ZWxzZSBkPWJ9cmV0dXJuIGR9dmFyIGM9YS5kb2N1bWVudCxkPWEubmF2aWdhdG9yLGU9YS5sb2NhdGlvbixmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSygpe2lmKCFlLmlzUmVhZHkpe3RyeXtjLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3NldFRpbWVvdXQoSywxKTtyZXR1cm59ZS5yZWFkeSgpfX12YXIgZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZS5mbi5pbml0KGEsYixoKX0sZj1hLmpRdWVyeSxnPWEuJCxoLGk9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLGo9L1xTLyxrPS9eXHMrLyxsPS9ccyskLyxtPS9cZC8sbj0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLG89L15bXF0sOnt9XHNdKiQvLHA9L1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZyxxPS8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZyxyPS8oPzpefDp8LCkoPzpccypcWykrL2cscz0vKHdlYmtpdClbIFwvXShbXHcuXSspLyx0PS8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSspLyx1PS8obXNpZSkgKFtcdy5dKykvLHY9Lyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKSk/Lyx3PS8tKFthLXpdfFswLTldKS9pZyx4PS9eLW1zLS8seT1mdW5jdGlvbihhLGIpe3JldHVybihiKyIiKS50b1VwcGVyQ2FzZSgpfSx6PWQudXNlckFnZW50LEEsQixDLEQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxFPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksRj1BcnJheS5wcm90b3R5cGUucHVzaCxHPUFycmF5LnByb3RvdHlwZS5zbGljZSxIPVN0cmluZy5wcm90b3R5cGUudHJpbSxJPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLEo9e307ZS5mbj1lLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxpbml0OmZ1bmN0aW9uKGEsZCxmKXt2YXIgZyxoLGosaztpZighYSlyZXR1cm4gdGhpcztpZihhLm5vZGVUeXBlKXt0aGlzLmNvbnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYoYT09PSJib2R5IiYmIWQmJmMuYm9keSl7dGhpcy5jb250ZXh0PWMsdGhpc1swXT1jLmJvZHksdGhpcy5zZWxlY3Rvcj1hLHRoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYodHlwZW9mIGE9PSJzdHJpbmciKXthLmNoYXJBdCgwKSE9PSI8Inx8YS5jaGFyQXQoYS5sZW5ndGgtMSkhPT0iPiJ8fGEubGVuZ3RoPDM/Zz1pLmV4ZWMoYSk6Zz1bbnVsbCxhLG51bGxdO2lmKGcmJihnWzFdfHwhZCkpe2lmKGdbMV0pe2Q9ZCBpbnN0YW5jZW9mIGU/ZFswXTpkLGs9ZD9kLm93bmVyRG9jdW1lbnR8fGQ6YyxqPW4uZXhlYyhhKSxqP2UuaXNQbGFpbk9iamVjdChkKT8oYT1bYy5jcmVhdGVFbGVtZW50KGpbMV0pXSxlLmZuLmF0dHIuY2FsbChhLGQsITApKTphPVtrLmNyZWF0ZUVsZW1lbnQoalsxXSldOihqPWUuYnVpbGRGcmFnbWVudChbZ1sxXV0sW2tdKSxhPShqLmNhY2hlYWJsZT9lLmNsb25lKGouZnJhZ21lbnQpOmouZnJhZ21lbnQpLmNoaWxkTm9kZXMpO3JldHVybiBlLm1lcmdlKHRoaXMsYSl9aD1jLmdldEVsZW1lbnRCeUlkKGdbMl0pO2lmKGgmJmgucGFyZW50Tm9kZSl7aWYoaC5pZCE9PWdbMl0pcmV0dXJuIGYuZmluZChhKTt0aGlzLmxlbmd0aD0xLHRoaXNbMF09aH10aGlzLmNvbnRleHQ9Yyx0aGlzLnNlbGVjdG9yPWE7cmV0dXJuIHRoaXN9cmV0dXJuIWR8fGQuanF1ZXJ5PyhkfHxmKS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoZCkuZmluZChhKX1pZihlLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGYucmVhZHkoYSk7YS5zZWxlY3RvciE9PWImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCk7cmV0dXJuIGUubWFrZUFycmF5KGEsdGhpcyl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS42LjMiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gRy5jYWxsKHRoaXMsMCl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD90aGlzLnRvQXJyYXkoKTphPDA/dGhpc1t0aGlzLmxlbmd0aCthXTp0aGlzW2FdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuY29uc3RydWN0b3IoKTtlLmlzQXJyYXkoYSk/Ri5hcHBseShkLGEpOmUubWVyZ2UoZCxhKSxkLnByZXZPYmplY3Q9dGhpcyxkLmNvbnRleHQ9dGhpcy5jb250ZXh0LGI9PT0iZmluZCI/ZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9yPyIgIjoiIikrYzpiJiYoZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyIuIitiKyIoIitjKyIpIik7cmV0dXJuIGR9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZS5lYWNoKHRoaXMsYSxiKX0scmVhZHk6ZnVuY3Rpb24oYSl7ZS5iaW5kUmVhZHkoKSxCLmRvbmUoYSk7cmV0dXJuIHRoaXN9LGVxOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsK2ErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEcuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsRy5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhlLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6Rixzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0sZS5mbi5pbml0LnByb3RvdHlwZT1lLmZuLGUuZXh0ZW5kPWUuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGYsZyxoLGk9YXJndW1lbnRzWzBdfHx7fSxqPTEsaz1hcmd1bWVudHMubGVuZ3RoLGw9ITE7dHlwZW9mIGk9PSJib29sZWFuIiYmKGw9aSxpPWFyZ3VtZW50c1sxXXx8e30saj0yKSx0eXBlb2YgaSE9Im9iamVjdCImJiFlLmlzRnVuY3Rpb24oaSkmJihpPXt9KSxrPT09aiYmKGk9dGhpcywtLWopO2Zvcig7ajxrO2orKylpZigoYT1hcmd1bWVudHNbal0pIT1udWxsKWZvcihjIGluIGEpe2Q9aVtjXSxmPWFbY107aWYoaT09PWYpY29udGludWU7bCYmZiYmKGUuaXNQbGFpbk9iamVjdChmKXx8KGc9ZS5pc0FycmF5KGYpKSk/KGc/KGc9ITEsaD1kJiZlLmlzQXJyYXkoZCk/ZDpbXSk6aD1kJiZlLmlzUGxhaW5PYmplY3QoZCk/ZDp7fSxpW2NdPWUuZXh0ZW5kKGwsaCxmKSk6ZiE9PWImJihpW2NdPWYpfXJldHVybiBpfSxlLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbihiKXthLiQ9PT1lJiYoYS4kPWcpLGImJmEualF1ZXJ5PT09ZSYmKGEualF1ZXJ5PWYpO3JldHVybiBlfSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP2UucmVhZHlXYWl0Kys6ZS5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMCYmIS0tZS5yZWFkeVdhaXR8fGEhPT0hMCYmIWUuaXNSZWFkeSl7aWYoIWMuYm9keSlyZXR1cm4gc2V0VGltZW91dChlLnJlYWR5LDEpO2UuaXNSZWFkeT0hMDtpZihhIT09ITAmJi0tZS5yZWFkeVdhaXQ+MClyZXR1cm47Qi5yZXNvbHZlV2l0aChjLFtlXSksZS5mbi50cmlnZ2VyJiZlKGMpLnRyaWdnZXIoInJlYWR5IikudW5iaW5kKCJyZWFkeSIpfX0sYmluZFJlYWR5OmZ1bmN0aW9uKCl7aWYoIUIpe0I9ZS5fRGVmZXJyZWQoKTtpZihjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7aWYoYy5hZGRFdmVudExpc3RlbmVyKWMuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQywhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLnJlYWR5LCExKTtlbHNlIGlmKGMuYXR0YWNoRXZlbnQpe2MuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQyksYS5hdHRhY2hFdmVudCgib25sb2FkIixlLnJlYWR5KTt2YXIgYj0hMTt0cnl7Yj1hLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChkKXt9Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmImJksoKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIGE9PSJvYmplY3QiJiYic2V0SW50ZXJ2YWwiaW4gYX0saXNOYU46ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGx8fCFtLnRlc3QoYSl8fGlzTmFOKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpKW0QuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxlLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIUUuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhRS5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxFLmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgYX0scGFyc2VKU09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5nInx8IWIpcmV0dXJuIG51bGw7Yj1lLnRyaW0oYik7aWYoYS5KU09OJiZhLkpTT04ucGFyc2UpcmV0dXJuIGEuSlNPTi5wYXJzZShiKTtpZihvLnRlc3QoYi5yZXBsYWNlKHAsIkAiKS5yZXBsYWNlKHEsIl0iKS5yZXBsYWNlKHIsIiIpKSlyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitiKSkoKTtlLmVycm9yKCJJbnZhbGlkIEpTT046ICIrYil9LHBhcnNlWE1MOmZ1bmN0aW9uKGMpe3ZhciBkLGY7dHJ5e2EuRE9NUGFyc2VyPyhmPW5ldyBET01QYXJzZXIsZD1mLnBhcnNlRnJvbVN0cmluZyhjLCJ0ZXh0L3htbCIpKTooZD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGQuYXN5bmM9ImZhbHNlIixkLmxvYWRYTUwoYykpfWNhdGNoKGcpe2Q9Yn0oIWR8fCFkLmRvY3VtZW50RWxlbWVudHx8ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZlLmVycm9yKCJJbnZhbGlkIFhNTDogIitjKTtyZXR1cm4gZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZqLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoeCwibXMtIikucmVwbGFjZSh3LHkpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT1iLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGc9MCxoPWEubGVuZ3RoLGk9aD09PWJ8fGUuaXNGdW5jdGlvbihhKTtpZihkKXtpZihpKXtmb3IoZiBpbiBhKWlmKGMuYXBwbHkoYVtmXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuYXBwbHkoYVtnKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihpKXtmb3IoZiBpbiBhKWlmKGMuY2FsbChhW2ZdLGYsYVtmXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmNhbGwoYVtnXSxnLGFbZysrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpIP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOkguY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UoaywiIikucmVwbGFjZShsLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107aWYoYSE9bnVsbCl7dmFyIGQ9ZS50eXBlKGEpO2EubGVuZ3RoPT1udWxsfHxkPT09InN0cmluZyJ8fGQ9PT0iZnVuY3Rpb24ifHxkPT09InJlZ2V4cCJ8fGUuaXNXaW5kb3coYSk/Ri5jYWxsKGMsYSk6ZS5tZXJnZShjLGEpfXJldHVybiBjfSxpbkFycmF5OmZ1bmN0aW9uKGEsYil7aWYoIWIpcmV0dXJuLTE7aWYoSSlyZXR1cm4gSS5jYWxsKGIsYSk7Zm9yKHZhciBjPTAsZD1iLmxlbmd0aDtjPGQ7YysrKWlmKGJbY109PT1hKXJldHVybiBjO3JldHVybi0xfSxtZXJnZTpmdW5jdGlvbihhLGMpe3ZhciBkPWEubGVuZ3RoLGU9MDtpZih0eXBlb2YgYy5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1jW2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1kO3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFjO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMhPT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoPVtdLGk9MCxqPWEubGVuZ3RoLGs9YSBpbnN0YW5jZW9mIGV8fGohPT1iJiZ0eXBlb2Ygaj09Im51bWJlciImJihqPjAmJmFbMF0mJmFbai0xXXx8aj09PTB8fGUuaXNBcnJheShhKSk7aWYoaylmb3IoO2k8ajtpKyspZj1jKGFbaV0saSxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7ZWxzZSBmb3IoZyBpbiBhKWY9YyhhW2ddLGcsZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO3JldHVybiBoLmNvbmNhdC5hcHBseShbXSxoKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7aWYodHlwZW9mIGM9PSJzdHJpbmciKXt2YXIgZD1hW2NdO2M9YSxhPWR9aWYoIWUuaXNGdW5jdGlvbihhKSlyZXR1cm4gYjt2YXIgZj1HLmNhbGwoYXJndW1lbnRzLDIpLGc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShjLGYuY29uY2F0KEcuY2FsbChhcmd1bWVudHMpKSl9O2cuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxnLmd1aWR8fGUuZ3VpZCsrO3JldHVybiBnfSxhY2Nlc3M6ZnVuY3Rpb24oYSxjLGQsZixnLGgpe3ZhciBpPWEubGVuZ3RoO2lmKHR5cGVvZiBjPT0ib2JqZWN0Iil7Zm9yKHZhciBqIGluIGMpZS5hY2Nlc3MoYSxqLGNbal0sZixnLGQpO3JldHVybiBhfWlmKGQhPT1iKXtmPSFoJiZmJiZlLmlzRnVuY3Rpb24oZCk7Zm9yKHZhciBrPTA7azxpO2srKylnKGFba10sYyxmP2QuY2FsbChhW2tdLGssZyhhW2tdLGMpKTpkLGgpO3JldHVybiBhfXJldHVybiBpP2coYVswXSxjKTpifSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTt2YXIgYj1zLmV4ZWMoYSl8fHQuZXhlYyhhKXx8dS5leGVjKGEpfHxhLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ2LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZS5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWI9dGhpcy5zdWIsYS5mbi5pbml0PWZ1bmN0aW9uKGQsZil7ZiYmZiBpbnN0YW5jZW9mIGUmJiEoZiBpbnN0YW5jZW9mIGEpJiYoZj1hKGYpKTtyZXR1cm4gZS5mbi5pbml0LmNhbGwodGhpcyxkLGYsYil9LGEuZm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgYj1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSksZS5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7SlsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KSxBPWUudWFNYXRjaCh6KSxBLmJyb3dzZXImJihlLmJyb3dzZXJbQS5icm93c2VyXT0hMCxlLmJyb3dzZXIudmVyc2lvbj1BLnZlcnNpb24pLGUuYnJvd3Nlci53ZWJraXQmJihlLmJyb3dzZXIuc2FmYXJpPSEwKSxqLnRlc3QoIiAiKSYmKGs9L15bXHNceEEwXSsvLGw9L1tcc1x4QTBdKyQvKSxoPWUoYyksYy5hZGRFdmVudExpc3RlbmVyP0M9ZnVuY3Rpb24oKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEMsITEpLGUucmVhZHkoKX06Yy5hdHRhY2hFdmVudCYmKEM9ZnVuY3Rpb24oKXtjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiJiYoYy5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixDKSxlLnJlYWR5KCkpfSk7cmV0dXJuIGV9KCksZz0iZG9uZSBmYWlsIGlzUmVzb2x2ZWQgaXNSZWplY3RlZCBwcm9taXNlIHRoZW4gYWx3YXlzIHBpcGUiLnNwbGl0KCIgIiksaD1bXS5zbGljZTtmLmV4dGVuZCh7X0RlZmVycmVkOmZ1bmN0aW9uKCl7dmFyIGE9W10sYixjLGQsZT17ZG9uZTpmdW5jdGlvbigpe2lmKCFkKXt2YXIgYz1hcmd1bWVudHMsZyxoLGksaixrO2ImJihrPWIsYj0wKTtmb3IoZz0wLGg9Yy5sZW5ndGg7ZzxoO2crKylpPWNbZ10saj1mLnR5cGUoaSksaj09PSJhcnJheSI/ZS5kb25lLmFwcGx5KGUsaSk6aj09PSJmdW5jdGlvbiImJmEucHVzaChpKTtrJiZlLnJlc29sdmVXaXRoKGtbMF0sa1sxXSl9cmV0dXJuIHRoaXN9LHJlc29sdmVXaXRoOmZ1bmN0aW9uKGUsZil7aWYoIWQmJiFiJiYhYyl7Zj1mfHxbXSxjPTE7dHJ5e3doaWxlKGFbMF0pYS5zaGlmdCgpLmFwcGx5KGUsZil9ZmluYWxseXtiPVtlLGZdLGM9MH19cmV0dXJuIHRoaXN9LHJlc29sdmU6ZnVuY3Rpb24oKXtlLnJlc29sdmVXaXRoKHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30saXNSZXNvbHZlZDpmdW5jdGlvbigpe3JldHVybiEhY3x8ISFifSxjYW5jZWw6ZnVuY3Rpb24oKXtkPTEsYT1bXTtyZXR1cm4gdGhpc319O3JldHVybiBlfSxEZWZlcnJlZDpmdW5jdGlvbihhKXt2YXIgYj1mLl9EZWZlcnJlZCgpLGM9Zi5fRGVmZXJyZWQoKSxkO2YuZXh0ZW5kKGIse3RoZW46ZnVuY3Rpb24oYSxjKXtiLmRvbmUoYSkuZmFpbChjKTtyZXR1cm4gdGhpc30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGIuZG9uZS5hcHBseShiLGFyZ3VtZW50cykuZmFpbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGZhaWw6Yy5kb25lLHJlamVjdFdpdGg6Yy5yZXNvbHZlV2l0aCxyZWplY3Q6Yy5yZXNvbHZlLGlzUmVqZWN0ZWQ6Yy5pc1Jlc29sdmVkLHBpcGU6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZi5EZWZlcnJlZChmdW5jdGlvbihkKXtmLmVhY2goe2RvbmU6W2EsInJlc29sdmUiXSxmYWlsOltjLCJyZWplY3QiXX0sZnVuY3Rpb24oYSxjKXt2YXIgZT1jWzBdLGc9Y1sxXSxoO2YuaXNGdW5jdGlvbihlKT9iW2FdKGZ1bmN0aW9uKCl7aD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoJiZmLmlzRnVuY3Rpb24oaC5wcm9taXNlKT9oLnByb21pc2UoKS50aGVuKGQucmVzb2x2ZSxkLnJlamVjdCk6ZFtnKyJXaXRoIl0odGhpcz09PWI/ZDp0aGlzLFtoXSl9KTpiW2FdKGRbZ10pfSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oYSl7aWYoYT09bnVsbCl7aWYoZClyZXR1cm4gZDtkPWE9e319dmFyIGM9Zy5sZW5ndGg7d2hpbGUoYy0tKWFbZ1tjXV09YltnW2NdXTtyZXR1cm4gYX19KSxiLmRvbmUoYy5jYW5jZWwpLmZhaWwoYi5jYW5jZWwpLGRlbGV0ZSBiLmNhbmNlbCxhJiZhLmNhbGwoYixiKTtyZXR1cm4gYn0sd2hlbjpmdW5jdGlvbihhKXtmdW5jdGlvbiBpKGEpe3JldHVybiBmdW5jdGlvbihjKXtiW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9oLmNhbGwoYXJndW1lbnRzLDApOmMsLS1lfHxnLnJlc29sdmVXaXRoKGcsaC5jYWxsKGIsMCkpfX12YXIgYj1hcmd1bWVudHMsYz0wLGQ9Yi5sZW5ndGgsZT1kLGc9ZDw9MSYmYSYmZi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YTpmLkRlZmVycmVkKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmZi5pc0Z1bmN0aW9uKGJbY10ucHJvbWlzZSk/YltjXS5wcm9taXNlKCkudGhlbihpKGMpLGcucmVqZWN0KTotLWU7ZXx8Zy5yZXNvbHZlV2l0aChnLGIpfWVsc2UgZyE9PWEmJmcucmVzb2x2ZVdpdGgoZyxkP1thXTpbXSk7cmV0dXJuIGcucHJvbWlzZSgpfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1jLmRvY3VtZW50RWxlbWVudCxkLGUsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU7YS5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxhLmlubmVySFRNTD0iICAgPGxpbms+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSd0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPWNoZWNrYm94PiIsZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIWR8fCFkLmxlbmd0aHx8IWUpcmV0dXJue307Zz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0saz17bGVhZGluZ1doaXRlc3BhY2U6YS5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChlLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUkLy50ZXN0KGUuc3R5bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFlLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246aS52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6aC5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6YS5jbGFzc05hbWUhPT0idCIsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwfSxpLmNoZWNrZWQ9ITAsay5ub0Nsb25lQ2hlY2tlZD1pLmNsb25lTm9kZSghMCkuY2hlY2tlZCxnLmRpc2FibGVkPSEwLGsub3B0RGlzYWJsZWQ9IWguZGlzYWJsZWQ7dHJ5e2RlbGV0ZSBhLnRlc3R9Y2F0Y2godil7ay5kZWxldGVFeHBhbmRvPSExfSFhLmFkZEV2ZW50TGlzdGVuZXImJmEuYXR0YWNoRXZlbnQmJmEuZmlyZUV2ZW50JiYoYS5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24oKXtrLm5vQ2xvbmVFdmVudD0hMX0pLGEuY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSksaT1jLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaS52YWx1ZT0idCIsaS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGsucmFkaW9WYWx1ZT1pLnZhbHVlPT09InQiLGkuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGEuYXBwZW5kQ2hpbGQoaSksbD1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsLmFwcGVuZENoaWxkKGEuZmlyc3RDaGlsZCksay5jaGVja0Nsb25lPWwuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGEuaW5uZXJIVE1MPSIiLGEuc3R5bGUud2lkdGg9YS5zdHlsZS5wYWRkaW5nTGVmdD0iMXB4IixtPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSxvPWMuY3JlYXRlRWxlbWVudChtPyJkaXYiOiJib2R5IikscD17dmlzaWJpbGl0eToiaGlkZGVuIix3aWR0aDowLGhlaWdodDowLGJvcmRlcjowLG1hcmdpbjowLGJhY2tncm91bmQ6Im5vbmUifSxtJiZmLmV4dGVuZChwLHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwcHgiLHRvcDoiLTEwMDBweCJ9KTtmb3IodCBpbiBwKW8uc3R5bGVbdF09cFt0XTtvLmFwcGVuZENoaWxkKGEpLG49bXx8YixuLmluc2VydEJlZm9yZShvLG4uZmlyc3RDaGlsZCksay5hcHBlbmRDaGVja2VkPWkuY2hlY2tlZCxrLmJveE1vZGVsPWEub2Zmc2V0V2lkdGg9PT0yLCJ6b29tImluIGEuc3R5bGUmJihhLnN0eWxlLmRpc3BsYXk9ImlubGluZSIsYS5zdHlsZS56b29tPTEsay5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWEub2Zmc2V0V2lkdGg9PT0yLGEuc3R5bGUuZGlzcGxheT0iIixhLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IixrLnNocmlua1dyYXBCbG9ja3M9YS5vZmZzZXRXaWR0aCE9PTIpLGEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIscT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHU9cVswXS5vZmZzZXRIZWlnaHQ9PT0wLHFbMF0uc3R5bGUuZGlzcGxheT0iIixxWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGsucmVsaWFibGVIaWRkZW5PZmZzZXRzPXUmJnFbMF0ub2Zmc2V0SGVpZ2h0PT09MCxhLmlubmVySFRNTD0iIixjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihqPWMuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS5tYXJnaW5SaWdodD0iMCIsYS5hcHBlbmRDaGlsZChqKSxrLnJlbGlhYmxlTWFyZ2luUmlnaHQ9KHBhcnNlSW50KChjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoaixudWxsKXx8e21hcmdpblJpZ2h0OjB9KS5tYXJnaW5SaWdodCwxMCl8fDApPT09MCksby5pbm5lckhUTUw9IiIsbi5yZW1vdmVDaGlsZChvKTtpZihhLmF0dGFjaEV2ZW50KWZvcih0IGlue3N1Ym1pdDoxLGNoYW5nZToxLGZvY3VzaW46MX0pcz0ib24iK3QsdT1zIGluIGEsdXx8KGEuc2V0QXR0cmlidXRlKHMsInJldHVybjsiKSx1PXR5cGVvZiBhW3NdPT0iZnVuY3Rpb24iKSxrW3QrIkJ1YmJsZXMiXT11O289bD1nPWg9bT1qPWE9aT1udWxsO3JldHVybiBrfSgpLGYuYm94TW9kZWw9Zi5zdXBwb3J0LmJveE1vZGVsO3ZhciBpPS9eKD86XHsuKlx9fFxbLipcXSkkLyxqPS8oW2Etel0pKFtBLVpdKS9nO2YuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9mLmNhY2hlW2FbZi5leHBhbmRvXV06YVtmLmV4cGFuZG9dO3JldHVybiEhYSYmIWwoYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBnLGgsaT1mLmV4cGFuZG8saj10eXBlb2YgYz09InN0cmluZyIsaz1hLm5vZGVUeXBlLGw9az9mLmNhY2hlOmEsbT1rP2FbZi5leHBhbmRvXTphW2YuZXhwYW5kb10mJmYuZXhwYW5kbztpZigoIW18fGUmJm0mJmxbbV0mJiFsW21dW2ldKSYmaiYmZD09PWIpcmV0dXJuO218fChrP2FbZi5leHBhbmRvXT1tPSsrZi51dWlkOm09Zi5leHBhbmRvKSxsW21dfHwobFttXT17fSxrfHwobFttXS50b0pTT049Zi5ub29wKSk7aWYodHlwZW9mIGM9PSJvYmplY3QifHx0eXBlb2YgYz09ImZ1bmN0aW9uIillP2xbbV1baV09Zi5leHRlbmQobFttXVtpXSxjKTpsW21dPWYuZXh0ZW5kKGxbbV0sYyk7Zz1sW21dLGUmJihnW2ldfHwoZ1tpXT17fSksZz1nW2ldKSxkIT09YiYmKGdbZi5jYW1lbENhc2UoYyldPWQpO2lmKGM9PT0iZXZlbnRzIiYmIWdbY10pcmV0dXJuIGdbaV0mJmdbaV0uZXZlbnRzO2o/KGg9Z1tjXSxoPT1udWxsJiYoaD1nW2YuY2FtZWxDYXNlKGMpXSkpOmg9ZztyZXR1cm4gaH19LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiLGMpe2lmKCEhZi5hY2NlcHREYXRhKGEpKXt2YXIgZCxlPWYuZXhwYW5kbyxnPWEubm9kZVR5cGUsaD1nP2YuY2FjaGU6YSxpPWc/YVtmLmV4cGFuZG9dOmYuZXhwYW5kbztpZighaFtpXSlyZXR1cm47aWYoYil7ZD1jP2hbaV1bZV06aFtpXTtpZihkKXtkW2JdfHwoYj1mLmNhbWVsQ2FzZShiKSksZGVsZXRlIGRbYl07aWYoIWwoZCkpcmV0dXJufX1pZihjKXtkZWxldGUgaFtpXVtlXTtpZighbChoW2ldKSlyZXR1cm59dmFyIGo9aFtpXVtlXTtmLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8IWguc2V0SW50ZXJ2YWw/ZGVsZXRlIGhbaV06aFtpXT1udWxsLGo/KGhbaV09e30sZ3x8KGhbaV0udG9KU09OPWYubm9vcCksaFtpXVtlXT1qKTpnJiYoZi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8/ZGVsZXRlIGFbZi5leHBhbmRvXTphLnJlbW92ZUF0dHJpYnV0ZT9hLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pOmFbZi5leHBhbmRvXT1udWxsKX19LF9kYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kYXRhKGEsYixjLCEwKX0sYWNjZXB0RGF0YTpmdW5jdGlvbihhKXtpZihhLm5vZGVOYW1lKXt2YXIgYj1mLm5vRGF0YVthLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKGIpcmV0dXJuIGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9cmV0dXJuITB9fSksZi5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxjKXt2YXIgZD1udWxsO2lmKHR5cGVvZiBhPT0idW5kZWZpbmVkIil7aWYodGhpcy5sZW5ndGgpe2Q9Zi5kYXRhKHRoaXNbMF0pO2lmKHRoaXNbMF0ubm9kZVR5cGU9PT0xKXt2YXIgZT10aGlzWzBdLmF0dHJpYnV0ZXMsZztmb3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspZz1lW2hdLm5hbWUsZy5pbmRleE9mKCJkYXRhLSIpPT09MCYmKGc9Zi5jYW1lbENhc2UoZy5zdWJzdHJpbmcoNSkpLGsodGhpc1swXSxnLGRbZ10pKX19cmV0dXJuIGR9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRhdGEodGhpcyxhKX0pO3ZhciBqPWEuc3BsaXQoIi4iKTtqWzFdPWpbMV0/Ii4iK2pbMV06IiI7aWYoYz09PWIpe2Q9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIralsxXSsiISIsW2pbMF1dKSxkPT09YiYmdGhpcy5sZW5ndGgmJihkPWYuZGF0YSh0aGlzWzBdLGEpLGQ9ayh0aGlzWzBdLGEsZCkpO3JldHVybiBkPT09YiYmalsxXT90aGlzLmRhdGEoalswXSk6ZH1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zih0aGlzKSxkPVtqWzBdLGNdO2IudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2pbMV0rIiEiLGQpLGYuZGF0YSh0aGlzLGEsYyksYi50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIralsxXSsiISIsZCl9KX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVEYXRhKHRoaXMsYSl9KX19KSxmLmV4dGVuZCh7X21hcms6ZnVuY3Rpb24oYSxjKXthJiYoYz0oY3x8ImZ4IikrIm1hcmsiLGYuZGF0YShhLGMsKGYuZGF0YShhLGMsYiwhMCl8fDApKzEsITApKX0sX3VubWFyazpmdW5jdGlvbihhLGMsZCl7YSE9PSEwJiYoZD1jLGM9YSxhPSExKTtpZihjKXtkPWR8fCJmeCI7dmFyIGU9ZCsibWFyayIsZz1hPzA6KGYuZGF0YShjLGUsYiwhMCl8fDEpLTE7Zz9mLmRhdGEoYyxlLGcsITApOihmLnJlbW92ZURhdGEoYyxlLCEwKSxtKGMsZCwibWFyayIpKX19LHF1ZXVlOmZ1bmN0aW9uKGEsYyxkKXtpZihhKXtjPShjfHwiZngiKSsicXVldWUiO3ZhciBlPWYuZGF0YShhLGMsYiwhMCk7ZCYmKCFlfHxmLmlzQXJyYXkoZCk/ZT1mLmRhdGEoYSxjLGYubWFrZUFycmF5KGQpLCEwKTplLnB1c2goZCkpO3JldHVybiBlfHxbXX19LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9Zi5xdWV1ZShhLGIpLGQ9Yy5zaGlmdCgpLGU7ZD09PSJpbnByb2dyZXNzIiYmKGQ9Yy5zaGlmdCgpKSxkJiYoYj09PSJmeCImJmMudW5zaGlmdCgiaW5wcm9ncmVzcyIpLGQuY2FsbChhLGZ1bmN0aW9uKCl7Zi5kZXF1ZXVlKGEsYil9KSksYy5sZW5ndGh8fChmLnJlbW92ZURhdGEoYSxiKyJxdWV1ZSIsITApLG0oYSxiLCJxdWV1ZSIpKX19KSxmLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxjKXt0eXBlb2YgYSE9InN0cmluZyImJihjPWEsYT0iZngiKTtpZihjPT09YilyZXR1cm4gZi5xdWV1ZSh0aGlzWzBdLGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mLnF1ZXVlKHRoaXMsYSxjKTthPT09ImZ4IiYmYlswXSE9PSJpbnByb2dyZXNzIiYmZi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVsYXk6ZnVuY3Rpb24oYSxiKXthPWYuZng/Zi5meC5zcGVlZHNbYV18fGE6YSxiPWJ8fCJmeCI7cmV0dXJuIHRoaXMucXVldWUoYixmdW5jdGlvbigpe3ZhciBjPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2YuZGVxdWV1ZShjLGIpfSxhKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gbSgpey0taHx8ZC5yZXNvbHZlV2l0aChlLFtlXSl9dHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9YiksYT1hfHwiZngiO3ZhciBkPWYuRGVmZXJyZWQoKSxlPXRoaXMsZz1lLmxlbmd0aCxoPTEsaT1hKyJkZWZlciIsaj1hKyJxdWV1ZSIsaz1hKyJtYXJrIixsO3doaWxlKGctLSlpZihsPWYuZGF0YShlW2ddLGksYiwhMCl8fChmLmRhdGEoZVtnXSxqLGIsITApfHxmLmRhdGEoZVtnXSxrLGIsITApKSYmZi5kYXRhKGVbZ10saSxmLl9EZWZlcnJlZCgpLCEwKSloKyssbC5kb25lKG0pO20oKTtyZXR1cm4gZC5wcm9taXNlKCl9fSk7dmFyIG49L1tcblx0XHJdL2csbz0vXHMrLyxwPS9cci9nLHE9L14oPzpidXR0b258aW5wdXQpJC9pLHI9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2kscz0vXmEoPzpyZWEpPyQvaSx0PS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLHUsdjtmLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLmF0dHIpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZUF0dHIodGhpcyxhKX0pfSxwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuYWNjZXNzKHRoaXMsYSxiLCEwLGYucHJvcCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7YT1mLnByb3BGaXhbYV18fGE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2FdPWIsZGVsZXRlIHRoaXNbYV19Y2F0Y2goYyl7fX0pfSxhZGRDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxnLGgsaTtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nIil7Yj1hLnNwbGl0KG8pO2ZvcihjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKXtlPXRoaXNbY107aWYoZS5ub2RlVHlwZT09PTEpaWYoIWUuY2xhc3NOYW1lJiZiLmxlbmd0aD09PTEpZS5jbGFzc05hbWU9YTtlbHNle2c9IiAiK2UuY2xhc3NOYW1lKyIgIjtmb3IoaD0wLGk9Yi5sZW5ndGg7aDxpO2grKyl+Zy5pbmRleE9mKCIgIitiW2hdKyIgIil8fChnKz1iW2hdKyIgIik7ZS5jbGFzc05hbWU9Zi50cmltKGcpfX19cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxnLGgsaSxqO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmcifHxhPT09Yil7Yz0oYXx8IiIpLnNwbGl0KG8pO2ZvcihkPTAsZT10aGlzLmxlbmd0aDtkPGU7ZCsrKXtnPXRoaXNbZF07aWYoZy5ub2RlVHlwZT09PTEmJmcuY2xhc3NOYW1lKWlmKGEpe2g9KCIgIitnLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobiwiICIpO2ZvcihpPTAsaj1jLmxlbmd0aDtpPGo7aSsrKWg9aC5yZXBsYWNlKCIgIitjW2ldKyIgIiwiICIpO2cuY2xhc3NOYW1lPWYudHJpbShoKX1lbHNlIGcuY2xhc3NOYW1lPSIifX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYSxkPXR5cGVvZiBiPT0iYm9vbGVhbiI7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7Zih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGM9PT0ic3RyaW5nIil7dmFyIGUsZz0wLGg9Zih0aGlzKSxpPWIsaj1hLnNwbGl0KG8pO3doaWxlKGU9altnKytdKWk9ZD9pOiFoLmhhc0NsYXNzKGUpLGhbaT8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGUpfWVsc2UgaWYoYz09PSJ1bmRlZmluZWQifHxjPT09ImJvb2xlYW4iKXRoaXMuY2xhc3NOYW1lJiZmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIiOmYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXt2YXIgYj0iICIrYSsiICI7Zm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKWlmKHRoaXNbY10ubm9kZVR5cGU9PT0xJiYoIiAiK3RoaXNbY10uY2xhc3NOYW1lKyIgIikucmVwbGFjZShuLCIgIikuaW5kZXhPZihiKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX0sdmFsOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZT10aGlzWzBdO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZihlKXtjPWYudmFsSG9va3NbZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1tlLnR5cGVdO2lmKGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZSwidmFsdWUiKSkhPT1iKXJldHVybiBkO2Q9ZS52YWx1ZTtyZXR1cm4gdHlwZW9mIGQ9PSJzdHJpbmciP2QucmVwbGFjZShwLCIiKTpkPT1udWxsPyIiOmR9cmV0dXJuIGJ9dmFyIGc9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGU9Zih0aGlzKSxoO2lmKHRoaXMubm9kZVR5cGU9PT0xKXtnP2g9YS5jYWxsKHRoaXMsZCxlLnZhbCgpKTpoPWEsaD09bnVsbD9oPSIiOnR5cGVvZiBoPT0ibnVtYmVyIj9oKz0iIjpmLmlzQXJyYXkoaCkmJihoPWYubWFwKGgsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6YSsiIn0pKSxjPWYudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1t0aGlzLnR5cGVdO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRoaXMsaCwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1ofX0pfX0pLGYuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiFifHxiLnNwZWNpZmllZD9hLnZhbHVlOmEudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiLGM9YS5zZWxlY3RlZEluZGV4LGQ9W10sZT1hLm9wdGlvbnMsZz1hLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoYzwwKXJldHVybiBudWxsO2Zvcih2YXIgaD1nP2M6MCxpPWc/YysxOmUubGVuZ3RoO2g8aTtoKyspe3ZhciBqPWVbaF07aWYoai5zZWxlY3RlZCYmKGYuc3VwcG9ydC5vcHREaXNhYmxlZD8hai5kaXNhYmxlZDpqLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09PW51bGwpJiYoIWoucGFyZW50Tm9kZS5kaXNhYmxlZHx8IWYubm9kZU5hbWUoai5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7Yj1mKGopLnZhbCgpO2lmKGcpcmV0dXJuIGI7ZC5wdXNoKGIpfX1pZihnJiYhZC5sZW5ndGgmJmUubGVuZ3RoKXJldHVybiBmKGVbY10pLnZhbCgpO3JldHVybiBkfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1mLm1ha2VBcnJheShiKTtmKGEpLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPWYuaW5BcnJheShmKHRoaXMpLnZhbCgpLGMpPj0wfSksYy5sZW5ndGh8fChhLnNlbGVjdGVkSW5kZXg9LTEpO3JldHVybiBjfX19LGF0dHJGbjp7dmFsOiEwLGNzczohMCxodG1sOiEwLHRleHQ6ITAsZGF0YTohMCx3aWR0aDohMCxoZWlnaHQ6ITAsb2Zmc2V0OiEwfSxhdHRyRml4Ont0YWJpbmRleDoidGFiSW5kZXgifSxhdHRyOmZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBnPWEubm9kZVR5cGU7aWYoIWF8fGc9PT0zfHxnPT09OHx8Zz09PTIpcmV0dXJuIGI7aWYoZSYmYyBpbiBmLmF0dHJGbilyZXR1cm4gZihhKVtjXShkKTtpZighKCJnZXRBdHRyaWJ1dGUiaW4gYSkpcmV0dXJuIGYucHJvcChhLGMsZCk7dmFyIGgsaSxqPWchPT0xfHwhZi5pc1hNTERvYyhhKTtqJiYoYz1mLmF0dHJGaXhbY118fGMsaT1mLmF0dHJIb29rc1tjXSxpfHwodC50ZXN0KGMpP2k9djp1JiYoaT11KSkpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7Zi5yZW1vdmVBdHRyKGEsYyk7cmV0dXJuIGJ9aWYoaSYmInNldCJpbiBpJiZqJiYoaD1pLnNldChhLGQsYykpIT09YilyZXR1cm4gaDthLnNldEF0dHJpYnV0ZShjLCIiK2QpO3JldHVybiBkfWlmKGkmJiJnZXQiaW4gaSYmaiYmKGg9aS5nZXQoYSxjKSkhPT1udWxsKXJldHVybiBoO2g9YS5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIGg9PT1udWxsP2I6aH0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjO2Eubm9kZVR5cGU9PT0xJiYoYj1mLmF0dHJGaXhbYl18fGIsZi5hdHRyKGEsYiwiIiksYS5yZW1vdmVBdHRyaWJ1dGUoYiksdC50ZXN0KGIpJiYoYz1mLnByb3BGaXhbYl18fGIpaW4gYSYmKGFbY109ITEpKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihxLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlmLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFmLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJmYubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTthLnNldEF0dHJpYnV0ZSgidHlwZSIsYiksYyYmKGEudmFsdWU9Yyk7cmV0dXJuIGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe2lmKHUmJmYubm9kZU5hbWUoYSwiYnV0dG9uIikpcmV0dXJuIHUuZ2V0KGEsYik7cmV0dXJuIGIgaW4gYT9hLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihhLGIsYyl7aWYodSYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdS5zZXQoYSxiLGMpO2EudmFsdWU9Yn19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWEubm9kZVR5cGU7aWYoIWF8fGU9PT0zfHxlPT09OHx8ZT09PTIpcmV0dXJuIGI7dmFyIGcsaCxpPWUhPT0xfHwhZi5pc1hNTERvYyhhKTtpJiYoYz1mLnByb3BGaXhbY118fGMsaD1mLnByb3BIb29rc1tjXSk7cmV0dXJuIGQhPT1iP2gmJiJzZXQiaW4gaCYmKGc9aC5zZXQoYSxkLGMpKSE9PWI/ZzphW2NdPWQ6aCYmImdldCJpbiBoJiYoZz1oLmdldChhLGMpKSE9PW51bGw/ZzphW2NdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9wYXJzZUludChjLnZhbHVlLDEwKTpyLnRlc3QoYS5ub2RlTmFtZSl8fHMudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6Yn19fX0pLGYuYXR0ckhvb2tzLnRhYkluZGV4PWYucHJvcEhvb2tzLnRhYkluZGV4LHY9e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkO3JldHVybiBmLnByb3AoYSxjKT09PSEwfHwoZD1hLmdldEF0dHJpYnV0ZU5vZGUoYykpJiZkLm5vZGVWYWx1ZSE9PSExP2MudG9Mb3dlckNhc2UoKTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2I9PT0hMT9mLnJlbW92ZUF0dHIoYSxjKTooZD1mLnByb3BGaXhbY118fGMsZCBpbiBhJiYoYVtkXT0hMCksYS5zZXRBdHRyaWJ1dGUoYyxjLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gY319LGYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGV8fCh1PWYudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZDtkPWEuZ2V0QXR0cmlidXRlTm9kZShjKTtyZXR1cm4gZCYmZC5ub2RlVmFsdWUhPT0iIj9kLm5vZGVWYWx1ZTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0QXR0cmlidXRlTm9kZShkKTtlfHwoZT1jLmNyZWF0ZUF0dHJpYnV0ZShkKSxhLnNldEF0dHJpYnV0ZU5vZGUoZSkpO3JldHVybiBlLm5vZGVWYWx1ZT1iKyIifX0sZi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe2YuYXR0ckhvb2tzW2JdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2JdLHtzZXQ6ZnVuY3Rpb24oYSxjKXtpZihjPT09IiIpe2Euc2V0QXR0cmlidXRlKGIsImF1dG8iKTtyZXR1cm4gY319fSl9KSksZi5zdXBwb3J0LmhyZWZOb3JtYWxpemVkfHxmLmVhY2goWyJocmVmIiwic3JjIiwid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGMpe2YuYXR0ckhvb2tzW2NdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2NdLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoYywyKTtyZXR1cm4gZD09PW51bGw/YjpkfX0pfSksZi5zdXBwb3J0LnN0eWxlfHwoZi5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fGJ9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9IiIrYn19KSxmLnN1cHBvcnQub3B0U2VsZWN0ZWR8fChmLnByb3BIb29rcy5zZWxlY3RlZD1mLmV4dGVuZChmLnByb3BIb29rcy5zZWxlY3RlZCx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpO3JldHVybiBudWxsfX0pKSxmLnN1cHBvcnQuY2hlY2tPbnx8Zi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjphLnZhbHVlfX19KSxmLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtmLnZhbEhvb2tzW3RoaXNdPWYuZXh0ZW5kKGYudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihhLGIpe2lmKGYuaXNBcnJheShiKSlyZXR1cm4gYS5jaGVja2VkPWYuaW5BcnJheShmKGEpLnZhbCgpLGIpPj0wfX0pfSk7dmFyIHc9L1wuKC4qKSQvLHg9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLHk9L1wuL2csej0vIC9nLEE9L1teXHdccy58YF0vZyxCPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoQSwiXFwkJiIpfTtmLmV2ZW50PXthZGQ6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoYS5ub2RlVHlwZSE9PTMmJmEubm9kZVR5cGUhPT04KXtpZihkPT09ITEpZD1DO2Vsc2UgaWYoIWQpcmV0dXJuO3ZhciBnLGg7ZC5oYW5kbGVyJiYoZz1kLGQ9Zy5oYW5kbGVyKSxkLmd1aWR8fChkLmd1aWQ9Zi5ndWlkKyspO3ZhciBpPWYuX2RhdGEoYSk7aWYoIWkpcmV0dXJuO3ZhciBqPWkuZXZlbnRzLGs9aS5oYW5kbGU7anx8KGkuZXZlbnRzPWo9e30pLGt8fChpLmhhbmRsZT1rPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgZiE9InVuZGVmaW5lZCImJighYXx8Zi5ldmVudC50cmlnZ2VyZWQhPT1hLnR5cGUpP2YuZXZlbnQuaGFuZGxlLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpOmJ9KSxrLmVsZW09YSxjPWMuc3BsaXQoIiAiKTt2YXIgbCxtPTAsbjt3aGlsZShsPWNbbSsrXSl7aD1nP2YuZXh0ZW5kKHt9LGcpOntoYW5kbGVyOmQsZGF0YTplfSxsLmluZGV4T2YoIi4iKT4tMT8obj1sLnNwbGl0KCIuIiksbD1uLnNoaWZ0KCksaC5uYW1lc3BhY2U9bi5zbGljZSgwKS5zb3J0KCkuam9pbigiLiIpKToobj1bXSxoLm5hbWVzcGFjZT0iIiksaC50eXBlPWwsaC5ndWlkfHwoaC5ndWlkPWQuZ3VpZCk7dmFyIG89altsXSxwPWYuZXZlbnQuc3BlY2lhbFtsXXx8e307aWYoIW8pe289altsXT1bXTtpZighcC5zZXR1cHx8cC5zZXR1cC5jYWxsKGEsZSxuLGspPT09ITEpYS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihsLGssITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitsLGspfXAuYWRkJiYocC5hZGQuY2FsbChhLGgpLGguaGFuZGxlci5ndWlkfHwoaC5oYW5kbGVyLmd1aWQ9ZC5ndWlkKSksby5wdXNoKGgpLGYuZXZlbnQuZ2xvYmFsW2xdPSEwfWE9bnVsbH19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoYS5ub2RlVHlwZSE9PTMmJmEubm9kZVR5cGUhPT04KXtkPT09ITEmJihkPUMpO3ZhciBnLGgsaSxqLGs9MCxsLG0sbixvLHAscSxyLHM9Zi5oYXNEYXRhKGEpJiZmLl9kYXRhKGEpLHQ9cyYmcy5ldmVudHM7aWYoIXN8fCF0KXJldHVybjtjJiZjLnR5cGUmJihkPWMuaGFuZGxlcixjPWMudHlwZSk7aWYoIWN8fHR5cGVvZiBjPT0ic3RyaW5nIiYmYy5jaGFyQXQoMCk9PT0iLiIpe2M9Y3x8IiI7Zm9yKGggaW4gdClmLmV2ZW50LnJlbW92ZShhLGgrYyk7cmV0dXJufWM9Yy5zcGxpdCgiICIpO3doaWxlKGg9Y1trKytdKXtyPWgscT1udWxsLGw9aC5pbmRleE9mKCIuIik8MCxtPVtdLGx8fChtPWguc3BsaXQoIi4iKSxoPW0uc2hpZnQoKSxuPW5ldyBSZWdFeHAoIihefFxcLikiK2YubWFwKG0uc2xpY2UoMCkuc29ydCgpLEIpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpKSxwPXRbaF07aWYoIXApY29udGludWU7aWYoIWQpe2ZvcihqPTA7ajxwLmxlbmd0aDtqKyspe3E9cFtqXTtpZihsfHxuLnRlc3QocS5uYW1lc3BhY2UpKWYuZXZlbnQucmVtb3ZlKGEscixxLmhhbmRsZXIsaikscC5zcGxpY2Uoai0tLDEpfWNvbnRpbnVlfW89Zi5ldmVudC5zcGVjaWFsW2hdfHx7fTtmb3Ioaj1lfHwwO2o8cC5sZW5ndGg7aisrKXtxPXBbal07aWYoZC5ndWlkPT09cS5ndWlkKXtpZihsfHxuLnRlc3QocS5uYW1lc3BhY2UpKWU9PW51bGwmJnAuc3BsaWNlKGotLSwxKSxvLnJlbW92ZSYmby5yZW1vdmUuY2FsbChhLHEpO2lmKGUhPW51bGwpYnJlYWt9fWlmKHAubGVuZ3RoPT09MHx8ZSE9bnVsbCYmcC5sZW5ndGg9PT0xKSghby50ZWFyZG93bnx8by50ZWFyZG93bi5jYWxsKGEsbSk9PT0hMSkmJmYucmVtb3ZlRXZlbnQoYSxoLHMuaGFuZGxlKSxnPW51bGwNCixkZWxldGUgdFtoXX1pZihmLmlzRW1wdHlPYmplY3QodCkpe3ZhciB1PXMuaGFuZGxlO3UmJih1LmVsZW09bnVsbCksZGVsZXRlIHMuZXZlbnRzLGRlbGV0ZSBzLmhhbmRsZSxmLmlzRW1wdHlPYmplY3QocykmJmYucmVtb3ZlRGF0YShhLGIsITApfX19LGN1c3RvbUV2ZW50OntnZXREYXRhOiEwLHNldERhdGE6ITAsY2hhbmdlRGF0YTohMH0sdHJpZ2dlcjpmdW5jdGlvbihjLGQsZSxnKXt2YXIgaD1jLnR5cGV8fGMsaT1bXSxqO2guaW5kZXhPZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGo9ITApLGguaW5kZXhPZigiLiIpPj0wJiYoaT1oLnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCEhZSYmIWYuZXZlbnQuY3VzdG9tRXZlbnRbaF18fCEhZi5ldmVudC5nbG9iYWxbaF0pe2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbZi5leHBhbmRvXT9jOm5ldyBmLkV2ZW50KGgsYyk6bmV3IGYuRXZlbnQoaCksYy50eXBlPWgsYy5leGNsdXNpdmU9aixjLm5hbWVzcGFjZT1pLmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1uZXcgUmVnRXhwKCIoXnxcXC4pIitpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpO2lmKGd8fCFlKWMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpO2lmKCFlKXtmLmVhY2goZi5jYWNoZSxmdW5jdGlvbigpe3ZhciBhPWYuZXhwYW5kbyxiPXRoaXNbYV07YiYmYi5ldmVudHMmJmIuZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGIuaGFuZGxlLmVsZW0pfSk7cmV0dXJufWlmKGUubm9kZVR5cGU9PT0zfHxlLm5vZGVUeXBlPT09OClyZXR1cm47Yy5yZXN1bHQ9YixjLnRhcmdldD1lLGQ9ZCE9bnVsbD9mLm1ha2VBcnJheShkKTpbXSxkLnVuc2hpZnQoYyk7dmFyIGs9ZSxsPWguaW5kZXhPZigiOiIpPDA/Im9uIitoOiIiO2Rve3ZhciBtPWYuX2RhdGEoaywiaGFuZGxlIik7Yy5jdXJyZW50VGFyZ2V0PWssbSYmbS5hcHBseShrLGQpLGwmJmYuYWNjZXB0RGF0YShrKSYma1tsXSYma1tsXS5hcHBseShrLGQpPT09ITEmJihjLnJlc3VsdD0hMSxjLnByZXZlbnREZWZhdWx0KCkpLGs9ay5wYXJlbnROb2RlfHxrLm93bmVyRG9jdW1lbnR8fGs9PT1jLnRhcmdldC5vd25lckRvY3VtZW50JiZhfXdoaWxlKGsmJiFjLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpO2lmKCFjLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgbixvPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYoKCFvLl9kZWZhdWx0fHxvLl9kZWZhdWx0LmNhbGwoZS5vd25lckRvY3VtZW50LGMpPT09ITEpJiYoaCE9PSJjbGljayJ8fCFmLm5vZGVOYW1lKGUsImEiKSkmJmYuYWNjZXB0RGF0YShlKSl7dHJ5e2wmJmVbaF0mJihuPWVbbF0sbiYmKGVbbF09bnVsbCksZi5ldmVudC50cmlnZ2VyZWQ9aCxlW2hdKCkpfWNhdGNoKHApe31uJiYoZVtsXT1uKSxmLmV2ZW50LnRyaWdnZXJlZD1ifX1yZXR1cm4gYy5yZXN1bHR9fSxoYW5kbGU6ZnVuY3Rpb24oYyl7Yz1mLmV2ZW50LmZpeChjfHxhLmV2ZW50KTt2YXIgZD0oKGYuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtjLnR5cGVdfHxbXSkuc2xpY2UoMCksZT0hYy5leGNsdXNpdmUmJiFjLm5hbWVzcGFjZSxnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtnWzBdPWMsYy5jdXJyZW50VGFyZ2V0PXRoaXM7Zm9yKHZhciBoPTAsaT1kLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj1kW2hdO2lmKGV8fGMubmFtZXNwYWNlX3JlLnRlc3Qoai5uYW1lc3BhY2UpKXtjLmhhbmRsZXI9ai5oYW5kbGVyLGMuZGF0YT1qLmRhdGEsYy5oYW5kbGVPYmo9ajt2YXIgaz1qLmhhbmRsZXIuYXBwbHkodGhpcyxnKTtrIT09YiYmKGMucmVzdWx0PWssaz09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKTtpZihjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWt9fXJldHVybiBjLnJlc3VsdH0scHJvcHM6ImFsdEtleSBhdHRyQ2hhbmdlIGF0dHJOYW1lIGJ1YmJsZXMgYnV0dG9uIGNhbmNlbGFibGUgY2hhckNvZGUgY2xpZW50WCBjbGllbnRZIGN0cmxLZXkgY3VycmVudFRhcmdldCBkYXRhIGRldGFpbCBldmVudFBoYXNlIGZyb21FbGVtZW50IGhhbmRsZXIga2V5Q29kZSBsYXllclggbGF5ZXJZIG1ldGFLZXkgbmV3VmFsdWUgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHByZXZWYWx1ZSByZWxhdGVkTm9kZSByZWxhdGVkVGFyZ2V0IHNjcmVlblggc2NyZWVuWSBzaGlmdEtleSBzcmNFbGVtZW50IHRhcmdldCB0b0VsZW1lbnQgdmlldyB3aGVlbERlbHRhIHdoaWNoIi5zcGxpdCgiICIpLGZpeDpmdW5jdGlvbihhKXtpZihhW2YuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGQ9YTthPWYuRXZlbnQoZCk7Zm9yKHZhciBlPXRoaXMucHJvcHMubGVuZ3RoLGc7ZTspZz10aGlzLnByb3BzWy0tZV0sYVtnXT1kW2ddO2EudGFyZ2V0fHwoYS50YXJnZXQ9YS5zcmNFbGVtZW50fHxjKSxhLnRhcmdldC5ub2RlVHlwZT09PTMmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSwhYS5yZWxhdGVkVGFyZ2V0JiZhLmZyb21FbGVtZW50JiYoYS5yZWxhdGVkVGFyZ2V0PWEuZnJvbUVsZW1lbnQ9PT1hLnRhcmdldD9hLnRvRWxlbWVudDphLmZyb21FbGVtZW50KTtpZihhLnBhZ2VYPT1udWxsJiZhLmNsaWVudFghPW51bGwpe3ZhciBoPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGMsaT1oLmRvY3VtZW50RWxlbWVudCxqPWguYm9keTthLnBhZ2VYPWEuY2xpZW50WCsoaSYmaS5zY3JvbGxMZWZ0fHxqJiZqLnNjcm9sbExlZnR8fDApLShpJiZpLmNsaWVudExlZnR8fGomJmouY2xpZW50TGVmdHx8MCksYS5wYWdlWT1hLmNsaWVudFkrKGkmJmkuc2Nyb2xsVG9wfHxqJiZqLnNjcm9sbFRvcHx8MCktKGkmJmkuY2xpZW50VG9wfHxqJiZqLmNsaWVudFRvcHx8MCl9YS53aGljaD09bnVsbCYmKGEuY2hhckNvZGUhPW51bGx8fGEua2V5Q29kZSE9bnVsbCkmJihhLndoaWNoPWEuY2hhckNvZGUhPW51bGw/YS5jaGFyQ29kZTphLmtleUNvZGUpLCFhLm1ldGFLZXkmJmEuY3RybEtleSYmKGEubWV0YUtleT1hLmN0cmxLZXkpLCFhLndoaWNoJiZhLmJ1dHRvbiE9PWImJihhLndoaWNoPWEuYnV0dG9uJjE/MTphLmJ1dHRvbiYyPzM6YS5idXR0b24mND8yOjApO3JldHVybiBhfSxndWlkOjFlOCxwcm94eTpmLnByb3h5LHNwZWNpYWw6e3JlYWR5OntzZXR1cDpmLmJpbmRSZWFkeSx0ZWFyZG93bjpmLm5vb3B9LGxpdmU6e2FkZDpmdW5jdGlvbihhKXtmLmV2ZW50LmFkZCh0aGlzLE0oYS5vcmlnVHlwZSxhLnNlbGVjdG9yKSxmLmV4dGVuZCh7fSxhLHtoYW5kbGVyOkwsZ3VpZDphLmhhbmRsZXIuZ3VpZH0pKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe2YuZXZlbnQucmVtb3ZlKHRoaXMsTShhLm9yaWdUeXBlLGEuc2VsZWN0b3IpLGEpfX0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7Zi5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19fSxmLnJlbW92ZUV2ZW50PWMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpfSxmLkV2ZW50PWZ1bmN0aW9uKGEsYil7aWYoIXRoaXMucHJldmVudERlZmF1bHQpcmV0dXJuIG5ldyBmLkV2ZW50KGEsYik7YSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8YS5yZXR1cm5WYWx1ZT09PSExfHxhLmdldFByZXZlbnREZWZhdWx0JiZhLmdldFByZXZlbnREZWZhdWx0KCk/RDpDKTp0aGlzLnR5cGU9YSxiJiZmLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWYubm93KCksdGhpc1tmLmV4cGFuZG9dPSEwfSxmLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1EO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDshYXx8KGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUQ7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCksYS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPUQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOkMsaXNQcm9wYWdhdGlvblN0b3BwZWQ6Qyxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpDfTt2YXIgRT1mdW5jdGlvbihhKXt2YXIgYj1hLnJlbGF0ZWRUYXJnZXQsYz0hMSxkPWEudHlwZTthLnR5cGU9YS5kYXRhLGIhPT10aGlzJiYoYiYmKGM9Zi5jb250YWlucyh0aGlzLGIpKSxjfHwoZi5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1kKSl9LEY9ZnVuY3Rpb24oYSl7YS50eXBlPWEuZGF0YSxmLmV2ZW50LmhhbmRsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2YuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7Zi5ldmVudC5zcGVjaWFsW2FdPXtzZXR1cDpmdW5jdGlvbihjKXtmLmV2ZW50LmFkZCh0aGlzLGIsYyYmYy5zZWxlY3Rvcj9GOkUsYSl9LHRlYXJkb3duOmZ1bmN0aW9uKGEpe2YuZXZlbnQucmVtb3ZlKHRoaXMsYixhJiZhLnNlbGVjdG9yP0Y6RSl9fX0pLGYuc3VwcG9ydC5zdWJtaXRCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oYSxiKXtpZighZi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpZi5ldmVudC5hZGQodGhpcywiY2xpY2suc3BlY2lhbFN1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1mLm5vZGVOYW1lKGIsImlucHV0Iik/Yi50eXBlOiIiOyhjPT09InN1Ym1pdCJ8fGM9PT0iaW1hZ2UiKSYmZihiKS5jbG9zZXN0KCJmb3JtIikubGVuZ3RoJiZKKCJzdWJtaXQiLHRoaXMsYXJndW1lbnRzKX0pLGYuZXZlbnQuYWRkKHRoaXMsImtleXByZXNzLnNwZWNpYWxTdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9Zi5ub2RlTmFtZShiLCJpbnB1dCIpP2IudHlwZToiIjsoYz09PSJ0ZXh0Inx8Yz09PSJwYXNzd29yZCIpJiZmKGIpLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGgmJmEua2V5Q29kZT09PTEzJiZKKCJzdWJtaXQiLHRoaXMsYXJndW1lbnRzKX0pO2Vsc2UgcmV0dXJuITF9LHRlYXJkb3duOmZ1bmN0aW9uKGEpe2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5zcGVjaWFsU3VibWl0Iil9fSk7aWYoIWYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzKXt2YXIgRyxIPWZ1bmN0aW9uKGEpe3ZhciBiPWYubm9kZU5hbWUoYSwiaW5wdXQiKT9hLnR5cGU6IiIsYz1hLnZhbHVlO2I9PT0icmFkaW8ifHxiPT09ImNoZWNrYm94Ij9jPWEuY2hlY2tlZDpiPT09InNlbGVjdC1tdWx0aXBsZSI/Yz1hLnNlbGVjdGVkSW5kZXg+LTE/Zi5tYXAoYS5vcHRpb25zLGZ1bmN0aW9uKGEpe3JldHVybiBhLnNlbGVjdGVkfSkuam9pbigiLSIpOiIiOmYubm9kZU5hbWUoYSwic2VsZWN0IikmJihjPWEuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIGN9LEk9ZnVuY3Rpb24oYyl7dmFyIGQ9Yy50YXJnZXQsZSxnO2lmKCEheC50ZXN0KGQubm9kZU5hbWUpJiYhZC5yZWFkT25seSl7ZT1mLl9kYXRhKGQsIl9jaGFuZ2VfZGF0YSIpLGc9SChkKSwoYy50eXBlIT09ImZvY3Vzb3V0Inx8ZC50eXBlIT09InJhZGlvIikmJmYuX2RhdGEoZCwiX2NoYW5nZV9kYXRhIixnKTtpZihlPT09Ynx8Zz09PWUpcmV0dXJuO2lmKGUhPW51bGx8fGcpYy50eXBlPSJjaGFuZ2UiLGMubGl2ZUZpcmVkPWIsZi5ldmVudC50cmlnZ2VyKGMsYXJndW1lbnRzWzFdLGQpfX07Zi5ldmVudC5zcGVjaWFsLmNoYW5nZT17ZmlsdGVyczp7Zm9jdXNvdXQ6SSxiZWZvcmVkZWFjdGl2YXRlOkksY2xpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1mLm5vZGVOYW1lKGIsImlucHV0Iik/Yi50eXBlOiIiOyhjPT09InJhZGlvInx8Yz09PSJjaGVja2JveCJ8fGYubm9kZU5hbWUoYiwic2VsZWN0IikpJiZJLmNhbGwodGhpcyxhKX0sa2V5ZG93bjpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPWYubm9kZU5hbWUoYiwiaW5wdXQiKT9iLnR5cGU6IiI7KGEua2V5Q29kZT09PTEzJiYhZi5ub2RlTmFtZShiLCJ0ZXh0YXJlYSIpfHxhLmtleUNvZGU9PT0zMiYmKGM9PT0iY2hlY2tib3gifHxjPT09InJhZGlvIil8fGM9PT0ic2VsZWN0LW11bHRpcGxlIikmJkkuY2FsbCh0aGlzLGEpfSxiZWZvcmVhY3RpdmF0ZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtmLl9kYXRhKGIsIl9jaGFuZ2VfZGF0YSIsSChiKSl9fSxzZXR1cDpmdW5jdGlvbihhLGIpe2lmKHRoaXMudHlwZT09PSJmaWxlIilyZXR1cm4hMTtmb3IodmFyIGMgaW4gRylmLmV2ZW50LmFkZCh0aGlzLGMrIi5zcGVjaWFsQ2hhbmdlIixHW2NdKTtyZXR1cm4geC50ZXN0KHRoaXMubm9kZU5hbWUpfSx0ZWFyZG93bjpmdW5jdGlvbihhKXtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuc3BlY2lhbENoYW5nZSIpO3JldHVybiB4LnRlc3QodGhpcy5ub2RlTmFtZSl9fSxHPWYuZXZlbnQuc3BlY2lhbC5jaGFuZ2UuZmlsdGVycyxHLmZvY3VzPUcuYmVmb3JlYWN0aXZhdGV9Zi5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxmLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gZShhKXt2YXIgYz1mLmV2ZW50LmZpeChhKTtjLnR5cGU9YixjLm9yaWdpbmFsRXZlbnQ9e30sZi5ldmVudC50cmlnZ2VyKGMsbnVsbCxjLnRhcmdldCksYy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYS5wcmV2ZW50RGVmYXVsdCgpfXZhciBkPTA7Zi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe2QrKz09PTAmJmMuYWRkRXZlbnRMaXN0ZW5lcihhLGUsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpey0tZD09PTAmJmMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGUsITApfX19KSxmLmVhY2goWyJiaW5kIiwib25lIl0sZnVuY3Rpb24oYSxjKXtmLmZuW2NdPWZ1bmN0aW9uKGEsZCxlKXt2YXIgZztpZih0eXBlb2YgYT09Im9iamVjdCIpe2Zvcih2YXIgaCBpbiBhKXRoaXNbY10oaCxkLGFbaF0sZSk7cmV0dXJuIHRoaXN9aWYoYXJndW1lbnRzLmxlbmd0aD09PTJ8fGQ9PT0hMSllPWQsZD1iO2M9PT0ib25lIj8oZz1mdW5jdGlvbihhKXtmKHRoaXMpLnVuYmluZChhLGcpO3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZy5ndWlkPWUuZ3VpZHx8Zi5ndWlkKyspOmc9ZTtpZihhPT09InVubG9hZCImJmMhPT0ib25lIil0aGlzLm9uZShhLGQsZSk7ZWxzZSBmb3IodmFyIGk9MCxqPXRoaXMubGVuZ3RoO2k8ajtpKyspZi5ldmVudC5hZGQodGhpc1tpXSxhLGcsZCk7cmV0dXJuIHRoaXN9fSksZi5mbi5leHRlbmQoe3VuYmluZDpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhPT0ib2JqZWN0IiYmIWEucHJldmVudERlZmF1bHQpZm9yKHZhciBjIGluIGEpdGhpcy51bmJpbmQoYyxhW2NdKTtlbHNlIGZvcih2YXIgZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKylmLmV2ZW50LnJlbW92ZSh0aGlzW2RdLGEsYik7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmxpdmUoYixjLGQsYSl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLnVuYmluZCgibGl2ZSIpOnRoaXMuZGllKGIsbnVsbCxjLGEpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXJldHVybiBmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXNbMF0sITApfSx0b2dnbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9YS5ndWlkfHxmLmd1aWQrKyxkPTAsZT1mdW5jdGlvbihjKXt2YXIgZT0oZi5kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCl8fDApJWQ7Zi5kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxlKzEpLGMucHJldmVudERlZmF1bHQoKTtyZXR1cm4gYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pO3ZhciBLPXtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQiLG1vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifTtmLmVhY2goWyJsaXZlIiwiZGllIl0sZnVuY3Rpb24oYSxjKXtmLmZuW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe3ZhciBoLGk9MCxqLGssbCxtPWd8fHRoaXMuc2VsZWN0b3Isbj1nP3RoaXM6Zih0aGlzLmNvbnRleHQpO2lmKHR5cGVvZiBhPT0ib2JqZWN0IiYmIWEucHJldmVudERlZmF1bHQpe2Zvcih2YXIgbyBpbiBhKW5bY10obyxkLGFbb10sbSk7cmV0dXJuIHRoaXN9aWYoYz09PSJkaWUiJiYhYSYmZyYmZy5jaGFyQXQoMCk9PT0iLiIpe24udW5iaW5kKGcpO3JldHVybiB0aGlzfWlmKGQ9PT0hMXx8Zi5pc0Z1bmN0aW9uKGQpKWU9ZHx8QyxkPWI7YT0oYXx8IiIpLnNwbGl0KCIgIik7d2hpbGUoKGg9YVtpKytdKSE9bnVsbCl7aj13LmV4ZWMoaCksaz0iIixqJiYoaz1qWzBdLGg9aC5yZXBsYWNlKHcsIiIpKTtpZihoPT09ImhvdmVyIil7YS5wdXNoKCJtb3VzZWVudGVyIitrLCJtb3VzZWxlYXZlIitrKTtjb250aW51ZX1sPWgsS1toXT8oYS5wdXNoKEtbaF0rayksaD1oK2spOmg9KEtbaF18fGgpK2s7aWYoYz09PSJsaXZlIilmb3IodmFyIHA9MCxxPW4ubGVuZ3RoO3A8cTtwKyspZi5ldmVudC5hZGQobltwXSwibGl2ZS4iK00oaCxtKSx7ZGF0YTpkLHNlbGVjdG9yOm0saGFuZGxlcjplLG9yaWdUeXBlOmgsb3JpZ0hhbmRsZXI6ZSxwcmVUeXBlOmx9KTtlbHNlIG4udW5iaW5kKCJsaXZlLiIrTShoLG0pLGUpfXJldHVybiB0aGlzfX0pLGYuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLmJpbmQoYixhLGMpOnRoaXMudHJpZ2dlcihiKX0sZi5hdHRyRm4mJihmLmF0dHJGbltiXT0hMCl9KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHUoYSxiLGMsZCxlLGYpe2Zvcih2YXIgZz0wLGg9ZC5sZW5ndGg7ZzxoO2crKyl7dmFyIGk9ZFtnXTtpZihpKXt2YXIgaj0hMTtpPWlbYV07d2hpbGUoaSl7aWYoaS5zaXpjYWNoZT09PWMpe2o9ZFtpLnNpenNldF07YnJlYWt9aWYoaS5ub2RlVHlwZT09PTEpe2Z8fChpLnNpemNhY2hlPWMsaS5zaXpzZXQ9Zyk7aWYodHlwZW9mIGIhPSJzdHJpbmciKXtpZihpPT09Yil7aj0hMDticmVha319ZWxzZSBpZihrLmZpbHRlcihiLFtpXSkubGVuZ3RoPjApe2o9aTticmVha319aT1pW2FdfWRbZ109an19fWZ1bmN0aW9uIHQoYSxiLGMsZCxlLGYpe2Zvcih2YXIgZz0wLGg9ZC5sZW5ndGg7ZzxoO2crKyl7dmFyIGk9ZFtnXTtpZihpKXt2YXIgaj0hMTtpPWlbYV07d2hpbGUoaSl7aWYoaS5zaXpjYWNoZT09PWMpe2o9ZFtpLnNpenNldF07YnJlYWt9aS5ub2RlVHlwZT09PTEmJiFmJiYoaS5zaXpjYWNoZT1jLGkuc2l6c2V0PWcpO2lmKGkubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIpe2o9aTticmVha31pPWlbYV19ZFtnXT1qfX19dmFyIGE9LygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZyxkPTAsZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGc9ITEsaD0hMCxpPS9cXC9nLGo9L1xXLztbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7aD0hMTtyZXR1cm4gMH0pO3ZhciBrPWZ1bmN0aW9uKGIsZCxmLGcpe2Y9Znx8W10sZD1kfHxjO3ZhciBoPWQ7aWYoZC5ub2RlVHlwZSE9PTEmJmQubm9kZVR5cGUhPT05KXJldHVybltdO2lmKCFifHx0eXBlb2YgYiE9InN0cmluZyIpcmV0dXJuIGY7dmFyIGksaixuLG8scSxyLHMsdCx1PSEwLHc9ay5pc1hNTChkKSx4PVtdLHk9Yjtkb3thLmV4ZWMoIiIpLGk9YS5leGVjKHkpO2lmKGkpe3k9aVszXSx4LnB1c2goaVsxXSk7aWYoaVsyXSl7bz1pWzNdO2JyZWFrfX19d2hpbGUoaSk7aWYoeC5sZW5ndGg+MSYmbS5leGVjKGIpKWlmKHgubGVuZ3RoPT09MiYmbC5yZWxhdGl2ZVt4WzBdXSlqPXYoeFswXSt4WzFdLGQpO2Vsc2V7aj1sLnJlbGF0aXZlW3hbMF1dP1tkXTprKHguc2hpZnQoKSxkKTt3aGlsZSh4Lmxlbmd0aCliPXguc2hpZnQoKSxsLnJlbGF0aXZlW2JdJiYoYis9eC5zaGlmdCgpKSxqPXYoYixqKX1lbHNleyFnJiZ4Lmxlbmd0aD4xJiZkLm5vZGVUeXBlPT09OSYmIXcmJmwubWF0Y2guSUQudGVzdCh4WzBdKSYmIWwubWF0Y2guSUQudGVzdCh4W3gubGVuZ3RoLTFdKSYmKHE9ay5maW5kKHguc2hpZnQoKSxkLHcpLGQ9cS5leHByP2suZmlsdGVyKHEuZXhwcixxLnNldClbMF06cS5zZXRbMF0pO2lmKGQpe3E9Zz97ZXhwcjp4LnBvcCgpLHNldDpwKGcpfTprLmZpbmQoeC5wb3AoKSx4Lmxlbmd0aD09PTEmJih4WzBdPT09In4ifHx4WzBdPT09IisiKSYmZC5wYXJlbnROb2RlP2QucGFyZW50Tm9kZTpkLHcpLGo9cS5leHByP2suZmlsdGVyKHEuZXhwcixxLnNldCk6cS5zZXQseC5sZW5ndGg+MD9uPXAoaik6dT0hMTt3aGlsZSh4Lmxlbmd0aClyPXgucG9wKCkscz1yLGwucmVsYXRpdmVbcl0/cz14LnBvcCgpOnI9IiIscz09bnVsbCYmKHM9ZCksbC5yZWxhdGl2ZVtyXShuLHMsdyl9ZWxzZSBuPXg9W119bnx8KG49aiksbnx8ay5lcnJvcihyfHxiKTtpZihlLmNhbGwobik9PT0iW29iamVjdCBBcnJheV0iKWlmKCF1KWYucHVzaC5hcHBseShmLG4pO2Vsc2UgaWYoZCYmZC5ub2RlVHlwZT09PTEpZm9yKHQ9MDtuW3RdIT1udWxsO3QrKyluW3RdJiYoblt0XT09PSEwfHxuW3RdLm5vZGVUeXBlPT09MSYmay5jb250YWlucyhkLG5bdF0pKSYmZi5wdXNoKGpbdF0pO2Vsc2UgZm9yKHQ9MDtuW3RdIT1udWxsO3QrKyluW3RdJiZuW3RdLm5vZGVUeXBlPT09MSYmZi5wdXNoKGpbdF0pO2Vsc2UgcChuLGYpO28mJihrKG8saCxmLGcpLGsudW5pcXVlU29ydChmKSk7cmV0dXJuIGZ9O2sudW5pcXVlU29ydD1mdW5jdGlvbihhKXtpZihyKXtnPWgsYS5zb3J0KHIpO2lmKGcpZm9yKHZhciBiPTE7YjxhLmxlbmd0aDtiKyspYVtiXT09PWFbYi0xXSYmYS5zcGxpY2UoYi0tLDEpfXJldHVybiBhfSxrLm1hdGNoZXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gayhhLG51bGwsbnVsbCxiKX0say5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gayhiLG51bGwsbnVsbCxbYV0pLmxlbmd0aD4wfSxrLmZpbmQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKCFhKXJldHVybltdO2Zvcih2YXIgZT0wLGY9bC5vcmRlci5sZW5ndGg7ZTxmO2UrKyl7dmFyIGcsaD1sLm9yZGVyW2VdO2lmKGc9bC5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSl7dmFyIGo9Z1sxXTtnLnNwbGljZSgxLDEpO2lmKGouc3Vic3RyKGoubGVuZ3RoLTEpIT09IlxcIil7Z1sxXT0oZ1sxXXx8IiIpLnJlcGxhY2UoaSwiIiksZD1sLmZpbmRbaF0oZyxiLGMpO2lmKGQhPW51bGwpe2E9YS5yZXBsYWNlKGwubWF0Y2hbaF0sIiIpO2JyZWFrfX19fWR8fChkPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6W10pO3JldHVybntzZXQ6ZCxleHByOmF9fSxrLmZpbHRlcj1mdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGg9YSxpPVtdLGo9YyxtPWMmJmNbMF0mJmsuaXNYTUwoY1swXSk7d2hpbGUoYSYmYy5sZW5ndGgpe2Zvcih2YXIgbiBpbiBsLmZpbHRlcilpZigoZj1sLmxlZnRNYXRjaFtuXS5leGVjKGEpKSE9bnVsbCYmZlsyXSl7dmFyIG8scCxxPWwuZmlsdGVyW25dLHI9ZlsxXTtnPSExLGYuc3BsaWNlKDEsMSk7aWYoci5zdWJzdHIoci5sZW5ndGgtMSk9PT0iXFwiKWNvbnRpbnVlO2o9PT1pJiYoaT1bXSk7aWYobC5wcmVGaWx0ZXJbbl0pe2Y9bC5wcmVGaWx0ZXJbbl0oZixqLGQsaSxlLG0pO2lmKCFmKWc9bz0hMDtlbHNlIGlmKGY9PT0hMCljb250aW51ZX1pZihmKWZvcih2YXIgcz0wOyhwPWpbc10pIT1udWxsO3MrKylpZihwKXtvPXEocCxmLHMsaik7dmFyIHQ9ZV4hIW87ZCYmbyE9bnVsbD90P2c9ITA6altzXT0hMTp0JiYoaS5wdXNoKHApLGc9ITApfWlmKG8hPT1iKXtkfHwoaj1pKSxhPWEucmVwbGFjZShsLm1hdGNoW25dLCIiKTtpZighZylyZXR1cm5bXTticmVha319aWYoYT09PWgpaWYoZz09bnVsbClrLmVycm9yKGEpO2Vsc2UgYnJlYWs7aD1hfXJldHVybiBqfSxrLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYX07dmFyIGw9ay5zZWxlY3RvcnM9e29yZGVyOlsiSUQiLCJOQU1FIiwiVEFHIl0sbWF0Y2g6e0lEOi8jKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxDTEFTUzovXC4oKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLE5BTUU6L1xbbmFtZT1bJyJdKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVsnIl0qXF0vLEFUVFI6L1xbXHMqKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspXHMqKD86KFxTPz0pXHMqKD86KFsnIl0pKC4qPylcM3woIz8oPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikqKXwpfClccypcXS8sVEFHOi9eKCg/Oltcd1x1MDBjMC1cdUZGRkZcKlwtXXxcXC4pKykvLENISUxEOi86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XChccyooZXZlbnxvZGR8KD86WytcLV0/XGQrfCg/OlsrXC1dP1xkKik/blxzKig/OlsrXC1dXHMqXGQrKT8pKVxzKlwpKT8vLFBPUzovOihudGh8ZXF8Z3R8bHR8Zmlyc3R8bGFzdHxldmVufG9kZCkoPzpcKChcZCopXCkpPyg/PVteXC1dfCQpLyxQU0VVRE86LzooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykoPzpcKChbJyJdPykoKD86XChbXlwpXStcKXxbXlwoXCldKikrKVwyXCkpPy99LGxlZnRNYXRjaDp7fSxhdHRyTWFwOnsiY2xhc3MiOiJjbGFzc05hbWUiLCJmb3IiOiJodG1sRm9yIn0sYXR0ckhhbmRsZTp7aHJlZjpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImhyZWYiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInR5cGUiKX19LHJlbGF0aXZlOnsiKyI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYj09InN0cmluZyIsZD1jJiYhai50ZXN0KGIpLGU9YyYmIWQ7ZCYmKGI9Yi50b0xvd2VyQ2FzZSgpKTtmb3IodmFyIGY9MCxnPWEubGVuZ3RoLGg7ZjxnO2YrKylpZihoPWFbZl0pe3doaWxlKChoPWgucHJldmlvdXNTaWJsaW5nKSYmaC5ub2RlVHlwZSE9PTEpO2FbZl09ZXx8aCYmaC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yj9ofHwhMTpoPT09Yn1lJiZrLmZpbHRlcihiLGEsITApfSwiPiI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXR5cGVvZiBiPT0ic3RyaW5nIixlPTAsZj1hLmxlbmd0aDtpZihkJiYhai50ZXN0KGIpKXtiPWIudG9Mb3dlckNhc2UoKTtmb3IoO2U8ZjtlKyspe2M9YVtlXTtpZihjKXt2YXIgZz1jLnBhcmVudE5vZGU7YVtlXT1nLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2c6ITF9fX1lbHNle2Zvcig7ZTxmO2UrKyljPWFbZV0sYyYmKGFbZV09ZD9jLnBhcmVudE5vZGU6Yy5wYXJlbnROb2RlPT09Yik7ZCYmay5maWx0ZXIoYixhLCEwKX19LCIiOmZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmPWQrKyxnPXU7dHlwZW9mIGI9PSJzdHJpbmciJiYhai50ZXN0KGIpJiYoYj1iLnRvTG93ZXJDYXNlKCksZT1iLGc9dCksZygicGFyZW50Tm9kZSIsYixmLGEsZSxjKX0sIn4iOmZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmPWQrKyxnPXU7dHlwZW9mIGI9PSJzdHJpbmciJiYhai50ZXN0KGIpJiYoYj1iLnRvTG93ZXJDYXNlKCksZT1iLGc9dCksZygicHJldmlvdXNTaWJsaW5nIixiLGYsYSxlLGMpfX0sZmluZDp7SUQ6ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT0idW5kZWZpbmVkIiYmIWMpe3ZhciBkPWIuZ2V0RWxlbWVudEJ5SWQoYVsxXSk7cmV0dXJuIGQmJmQucGFyZW50Tm9kZT9bZF06W119fSxOQU1FOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeU5hbWUhPSJ1bmRlZmluZWQiKXt2YXIgYz1bXSxkPWIuZ2V0RWxlbWVudHNCeU5hbWUoYVsxXSk7Zm9yKHZhciBlPTAsZj1kLmxlbmd0aDtlPGY7ZSsrKWRbZV0uZ2V0QXR0cmlidXRlKCJuYW1lIik9PT1hWzFdJiZjLnB1c2goZFtlXSk7cmV0dXJuIGMubGVuZ3RoPT09MD9udWxsOmN9fSxUQUc6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCIpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYVsxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXthPSIgIithWzFdLnJlcGxhY2UoaSwiIikrIiAiO2lmKGYpcmV0dXJuIGE7Zm9yKHZhciBnPTAsaDsoaD1iW2ddKSE9bnVsbDtnKyspaCYmKGVeKGguY2xhc3NOYW1lJiYoIiAiK2guY2xhc3NOYW1lKyIgIikucmVwbGFjZSgvW1x0XG5ccl0vZywiICIpLmluZGV4T2YoYSk+PTApP2N8fGQucHVzaChoKTpjJiYoYltnXT0hMSkpO3JldHVybiExfSxJRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXS5yZXBsYWNlKGksIiIpfSxUQUc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVsxXS5yZXBsYWNlKGksIiIpLnRvTG93ZXJDYXNlKCl9LENISUxEOmZ1bmN0aW9uKGEpe2lmKGFbMV09PT0ibnRoIil7YVsyXXx8ay5lcnJvcihhWzBdKSxhWzJdPWFbMl0ucmVwbGFjZSgvXlwrfFxzKi9nLCIiKTt2YXIgYj0vKC0/KShcZCopKD86bihbK1wtXT9cZCopKT8vLmV4ZWMoYVsyXT09PSJldmVuIiYmIjJuInx8YVsyXT09PSJvZGQiJiYiMm4rMSJ8fCEvXEQvLnRlc3QoYVsyXSkmJiIwbisiK2FbMl18fGFbMl0pO2FbMl09YlsxXSsoYlsyXXx8MSktMCxhWzNdPWJbM10tMH1lbHNlIGFbMl0mJmsuZXJyb3IoYVswXSk7YVswXT1kKys7cmV0dXJuIGF9LEFUVFI6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPWFbMV09YVsxXS5yZXBsYWNlKGksIiIpOyFmJiZsLmF0dHJNYXBbZ10mJihhWzFdPWwuYXR0ck1hcFtnXSksYVs0XT0oYVs0XXx8YVs1XXx8IiIpLnJlcGxhY2UoaSwiIiksYVsyXT09PSJ+PSImJihhWzRdPSIgIithWzRdKyIgIik7cmV0dXJuIGF9LFBTRVVETzpmdW5jdGlvbihiLGMsZCxlLGYpe2lmKGJbMV09PT0ibm90IilpZigoYS5leGVjKGJbM10pfHwiIikubGVuZ3RoPjF8fC9eXHcvLnRlc3QoYlszXSkpYlszXT1rKGJbM10sbnVsbCxudWxsLGMpO2Vsc2V7dmFyIGc9ay5maWx0ZXIoYlszXSxjLGQsITBeZik7ZHx8ZS5wdXNoLmFwcGx5KGUsZyk7cmV0dXJuITF9ZWxzZSBpZihsLm1hdGNoLlBPUy50ZXN0KGJbMF0pfHxsLm1hdGNoLkNISUxELnRlc3QoYlswXSkpcmV0dXJuITA7cmV0dXJuIGJ9LFBPUzpmdW5jdGlvbihhKXthLnVuc2hpZnQoITApO3JldHVybiBhfX0sZmlsdGVyczp7ZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExJiZhLnR5cGUhPT0iaGlkZGVuIn0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5jaGVja2VkPT09ITB9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7cmV0dXJuIGEuc2VsZWN0ZWQ9PT0hMH0scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiEhYS5maXJzdENoaWxkfSxlbXB0eTpmdW5jdGlvbihhKXtyZXR1cm4hYS5maXJzdENoaWxkfSxoYXM6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiEhayhjWzNdLGEpLmxlbmd0aH0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybi9oXGQvaS50ZXN0KGEubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0QXR0cmlidXRlKCJ0eXBlIiksYz1hLnR5cGU7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJ0ZXh0Ij09PWMmJihiPT09Y3x8Yj09PW51bGwpfSxyYWRpbzpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInJhZGlvIj09PWEudHlwZX0sY2hlY2tib3g6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJjaGVja2JveCI9PT1hLnR5cGV9LGZpbGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJmaWxlIj09PWEudHlwZX0scGFzc3dvcmQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJwYXNzd29yZCI9PT1hLnR5cGV9LHN1Ym1pdDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKGI9PT0iaW5wdXQifHxiPT09ImJ1dHRvbiIpJiYic3VibWl0Ij09PWEudHlwZX0saW1hZ2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJpbWFnZSI9PT1hLnR5cGV9LHJlc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJyZXNldCI9PT1hLnR5cGV9LGJ1dHRvbjpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGI9PT0iaW5wdXQiJiYiYnV0dG9uIj09PWEudHlwZXx8Yj09PSJidXR0b24ifSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLnRlc3QoYS5ub2RlTmFtZSl9LGZvY3VzOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09YS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9fSxzZXRGaWx0ZXJzOntmaXJzdDpmdW5jdGlvbihhLGIpe3JldHVybiBiPT09MH0sbGFzdDpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYj09PWQubGVuZ3RoLTF9LGV2ZW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MH0sb2RkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIlMj09PTF9LGx0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYjxjWzNdLTB9LGd0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYj5jWzNdLTB9LG50aDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGNbM10tMD09PWJ9LGVxOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn19LGZpbHRlcjp7UFNFVURPOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWJbMV0sZj1sLmZpbHRlcnNbZV07aWYoZilyZXR1cm4gZihhLGMsYixkKTtpZihlPT09ImNvbnRhaW5zIilyZXR1cm4oYS50ZXh0Q29udGVudHx8YS5pbm5lclRleHR8fGsuZ2V0VGV4dChbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfWsuZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGM9YlsxXSxkPWE7c3dpdGNoKGMpe2Nhc2Uib25seSI6Y2FzZSJmaXJzdCI6d2hpbGUoZD1kLnByZXZpb3VzU2libGluZylpZihkLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtpZihjPT09ImZpcnN0IilyZXR1cm4hMDtkPWE7Y2FzZSJsYXN0Ijp3aGlsZShkPWQubmV4dFNpYmxpbmcpaWYoZC5ub2RlVHlwZT09PTEpcmV0dXJuITE7cmV0dXJuITA7Y2FzZSJudGgiOnZhciBlPWJbMl0sZj1iWzNdO2lmKGU9PT0xJiZmPT09MClyZXR1cm4hMDt2YXIgZz1iWzBdLGg9YS5wYXJlbnROb2RlO2lmKGgmJihoLnNpemNhY2hlIT09Z3x8IWEubm9kZUluZGV4KSl7dmFyIGk9MDtmb3IoZD1oLmZpcnN0Q2hpbGQ7ZDtkPWQubmV4dFNpYmxpbmcpZC5ub2RlVHlwZT09PTEmJihkLm5vZGVJbmRleD0rK2kpO2guc2l6Y2FjaGU9Z312YXIgaj1hLm5vZGVJbmRleC1mO3JldHVybiBlPT09MD9qPT09MDpqJWU9PT0wJiZqL2U+PTB9fSxJRDpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVUeXBlPT09MSYmYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifSxUQUc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PSIqIiYmYS5ub2RlVHlwZT09PTF8fGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bC5hdHRySGFuZGxlW2NdP2wuYXR0ckhhbmRsZVtjXShhKTphW2NdIT1udWxsP2FbY106YS5nZXRBdHRyaWJ1dGUoYyksZT1kKyIiLGY9YlsyXSxnPWJbNF07cmV0dXJuIGQ9PW51bGw/Zj09PSIhPSI6Zj09PSI9Ij9lPT09ZzpmPT09Iio9Ij9lLmluZGV4T2YoZyk+PTA6Zj09PSJ+PSI/KCIgIitlKyIgIikuaW5kZXhPZihnKT49MDpnP2Y9PT0iIT0iP2UhPT1nOmY9PT0iXj0iP2UuaW5kZXhPZihnKT09PTA6Zj09PSIkPSI/ZS5zdWJzdHIoZS5sZW5ndGgtZy5sZW5ndGgpPT09ZzpmPT09Inw9Ij9lPT09Z3x8ZS5zdWJzdHIoMCxnLmxlbmd0aCsxKT09PWcrIi0iOiExOmUmJmQhPT0hMX0sUE9TOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWJbMl0sZj1sLnNldEZpbHRlcnNbZV07aWYoZilyZXR1cm4gZihhLGMsYixkKX19fSxtPWwubWF0Y2guUE9TLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4iXFwiKyhiLTArMSl9O2Zvcih2YXIgbyBpbiBsLm1hdGNoKWwubWF0Y2hbb109bmV3IFJlZ0V4cChsLm1hdGNoW29dLnNvdXJjZSsvKD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpLGwubGVmdE1hdGNoW29dPW5ldyBSZWdFeHAoLyheKD86LnxccnxcbikqPykvLnNvdXJjZStsLm1hdGNoW29dLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csbikpO3ZhciBwPWZ1bmN0aW9uKGEsYil7YT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLDApO2lmKGIpe2IucHVzaC5hcHBseShiLGEpO3JldHVybiBifXJldHVybiBhfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKVswXS5ub2RlVHlwZX1jYXRjaChxKXtwPWZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPWJ8fFtdO2lmKGUuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSIpQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxhKTtlbHNlIGlmKHR5cGVvZiBhLmxlbmd0aD09Im51bWJlciIpZm9yKHZhciBmPWEubGVuZ3RoO2M8ZjtjKyspZC5wdXNoKGFbY10pO2Vsc2UgZm9yKDthW2NdO2MrKylkLnB1c2goYVtjXSk7cmV0dXJuIGR9fXZhciByLHM7Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/cj1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtnPSEwO3JldHVybiAwfWlmKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9ufHwhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbilyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxO3JldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjQ/LTE6MX06KHI9ZnVuY3Rpb24oYSxiKXtpZihhPT09Yil7Zz0hMDtyZXR1cm4gMH1pZihhLnNvdXJjZUluZGV4JiZiLnNvdXJjZUluZGV4KXJldHVybiBhLnNvdXJjZUluZGV4LWIuc291cmNlSW5kZXg7dmFyIGMsZCxlPVtdLGY9W10saD1hLnBhcmVudE5vZGUsaT1iLnBhcmVudE5vZGUsaj1oO2lmKGg9PT1pKXJldHVybiBzKGEsYik7aWYoIWgpcmV0dXJuLTE7aWYoIWkpcmV0dXJuIDE7d2hpbGUoaillLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7aj1pO3doaWxlKGopZi51bnNoaWZ0KGopLGo9ai5wYXJlbnROb2RlO2M9ZS5sZW5ndGgsZD1mLmxlbmd0aDtmb3IodmFyIGs9MDtrPGMmJms8ZDtrKyspaWYoZVtrXSE9PWZba10pcmV0dXJuIHMoZVtrXSxmW2tdKTtyZXR1cm4gaz09PWM/cyhhLGZba10sLTEpOnMoZVtrXSxiLDEpfSxzPWZ1bmN0aW9uKGEsYixjKXtpZihhPT09YilyZXR1cm4gYzt2YXIgZD1hLm5leHRTaWJsaW5nO3doaWxlKGQpe2lmKGQ9PT1iKXJldHVybi0xO2Q9ZC5uZXh0U2libGluZ31yZXR1cm4gMX0pLGsuZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYj0iIixjO2Zvcih2YXIgZD0wO2FbZF07ZCsrKWM9YVtkXSxjLm5vZGVUeXBlPT09M3x8Yy5ub2RlVHlwZT09PTQ/Yis9Yy5ub2RlVmFsdWU6Yy5ub2RlVHlwZSE9PTgmJihiKz1rLmdldFRleHQoYy5jaGlsZE5vZGVzKSk7cmV0dXJuIGJ9LGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJzY3JpcHQiKyhuZXcgRGF0ZSkuZ2V0VGltZSgpLGU9Yy5kb2N1bWVudEVsZW1lbnQ7YS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrZCsiJy8+IixlLmluc2VydEJlZm9yZShhLGUuZmlyc3RDaGlsZCksYy5nZXRFbGVtZW50QnlJZChkKSYmKGwuZmluZC5JRD1mdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGMuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhZCl7dmFyIGU9Yy5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZT9lLmlkPT09YVsxXXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9InVuZGVmaW5lZCImJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS5ub2RlVmFsdWU9PT1hWzFdP1tlXTpiOltdfX0sbC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlIT0idW5kZWZpbmVkIiYmYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBhLm5vZGVUeXBlPT09MSYmYyYmYy5ub2RlVmFsdWU9PT1ifSksZS5yZW1vdmVDaGlsZChhKSxlPWE9bnVsbH0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5hcHBlbmRDaGlsZChjLmNyZWF0ZUNvbW1lbnQoIiIpKSxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoPjAmJihsLmZpbmQuVEFHPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKTtpZihhWzFdPT09IioiKXt2YXIgZD1bXTtmb3IodmFyIGU9MDtjW2VdO2UrKyljW2VdLm5vZGVUeXBlPT09MSYmZC5wdXNoKGNbZV0pO2M9ZH1yZXR1cm4gY30pLGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IixhLmZpcnN0Q2hpbGQmJnR5cGVvZiBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlIT0idW5kZWZpbmVkIiYmYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIT09IiMiJiYobC5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0pLGE9bnVsbH0oKSxjLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGE9ayxiPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZD0iX19zaXp6bGVfXyI7Yi5pbm5lckhUTUw9IjxwIGNsYXNzPSdURVNUJz48L3A+IjtpZighYi5xdWVyeVNlbGVjdG9yQWxsfHxiLnF1ZXJ5U2VsZWN0b3JBbGwoIi5URVNUIikubGVuZ3RoIT09MCl7az1mdW5jdGlvbihiLGUsZixnKXtlPWV8fGM7aWYoIWcmJiFrLmlzWE1MKGUpKXt2YXIgaD0vXihcdyskKXxeXC4oW1x3XC1dKyQpfF4jKFtcd1wtXSskKS8uZXhlYyhiKTtpZihoJiYoZS5ub2RlVHlwZT09PTF8fGUubm9kZVR5cGU9PT05KSl7aWYoaFsxXSlyZXR1cm4gcChlLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLGYpO2lmKGhbMl0mJmwuZmluZC5DTEFTUyYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBwKGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShoWzJdKSxmKX1pZihlLm5vZGVUeXBlPT09OSl7aWYoYj09PSJib2R5IiYmZS5ib2R5KXJldHVybiBwKFtlLmJvZHldLGYpO2lmKGgmJmhbM10pe3ZhciBpPWUuZ2V0RWxlbWVudEJ5SWQoaFszXSk7aWYoIWl8fCFpLnBhcmVudE5vZGUpcmV0dXJuIHAoW10sZik7aWYoaS5pZD09PWhbM10pcmV0dXJuIHAoW2ldLGYpfXRyeXtyZXR1cm4gcChlLnF1ZXJ5U2VsZWN0b3JBbGwoYiksZil9Y2F0Y2goail7fX1lbHNlIGlmKGUubm9kZVR5cGU9PT0xJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2JqZWN0Iil7dmFyIG09ZSxuPWUuZ2V0QXR0cmlidXRlKCJpZCIpLG89bnx8ZCxxPWUucGFyZW50Tm9kZSxyPS9eXHMqWyt+XS8udGVzdChiKTtuP289by5yZXBsYWNlKC8nL2csIlxcJCYiKTplLnNldEF0dHJpYnV0ZSgiaWQiLG8pLHImJnEmJihlPWUucGFyZW50Tm9kZSk7dHJ5e2lmKCFyfHxxKXJldHVybiBwKGUucXVlcnlTZWxlY3RvckFsbCgiW2lkPSciK28rIiddICIrYiksZil9Y2F0Y2gocyl7fWZpbmFsbHl7bnx8bS5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gYShiLGUsZixnKX07Zm9yKHZhciBlIGluIGEpa1tlXT1hW2VdO2I9bnVsbH19KCksZnVuY3Rpb24oKXt2YXIgYT1jLmRvY3VtZW50RWxlbWVudCxiPWEubWF0Y2hlc1NlbGVjdG9yfHxhLm1vek1hdGNoZXNTZWxlY3Rvcnx8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3I7aWYoYil7dmFyIGQ9IWIuY2FsbChjLmNyZWF0ZUVsZW1lbnQoImRpdiIpLCJkaXYiKSxlPSExO3RyeXtiLmNhbGwoYy5kb2N1bWVudEVsZW1lbnQsIlt0ZXN0IT0nJ106c2l6emxlIil9Y2F0Y2goZil7ZT0hMH1rLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGMpe2M9Yy5yZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCI9JyQxJ10iKTtpZighay5pc1hNTChhKSl0cnl7aWYoZXx8IWwubWF0Y2guUFNFVURPLnRlc3QoYykmJiEvIT0vLnRlc3QoYykpe3ZhciBmPWIuY2FsbChhLGMpO2lmKGZ8fCFkfHxhLmRvY3VtZW50JiZhLmRvY3VtZW50Lm5vZGVUeXBlIT09MTEpcmV0dXJuIGZ9fWNhdGNoKGcpe31yZXR1cm4gayhjLG51bGwsbnVsbCxbYV0pLmxlbmd0aD4wfX19KCksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7aWYoISFhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCE9PTApe2EubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MSlyZXR1cm47bC5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpLGwuZmluZC5DTEFTUz1mdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9InVuZGVmaW5lZCImJiFjKXJldHVybiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYVsxXSl9LGE9bnVsbH19KCksYy5kb2N1bWVudEVsZW1lbnQuY29udGFpbnM/ay5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiBhIT09YiYmKGEuY29udGFpbnM/YS5jb250YWlucyhiKTohMCl9OmMuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2suY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4hIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjE2KX06ay5jb250YWlucz1mdW5jdGlvbigpe3JldHVybiExfSxrLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPShhP2Eub3duZXJEb2N1bWVudHx8YTowKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGI/Yi5ub2RlTmFtZSE9PSJIVE1MIjohMX07dmFyIHY9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9IiIsZj1iLm5vZGVUeXBlP1tiXTpiO3doaWxlKGM9bC5tYXRjaC5QU0VVRE8uZXhlYyhhKSllKz1jWzBdLGE9YS5yZXBsYWNlKGwubWF0Y2guUFNFVURPLCIiKTthPWwucmVsYXRpdmVbYV0/YSsiKiI6YTtmb3IodmFyIGc9MCxoPWYubGVuZ3RoO2c8aDtnKyspayhhLGZbZ10sZCk7cmV0dXJuIGsuZmlsdGVyKGUsZCl9O2YuZmluZD1rLGYuZXhwcj1rLnNlbGVjdG9ycyxmLmV4cHJbIjoiXT1mLmV4cHIuZmlsdGVycyxmLnVuaXF1ZT1rLnVuaXF1ZVNvcnQsZi50ZXh0PWsuZ2V0VGV4dCxmLmlzWE1MRG9jPWsuaXNYTUwsZi5jb250YWlucz1rLmNvbnRhaW5zfSgpO3ZhciBOPS9VbnRpbCQvLE89L14oPzpwYXJlbnRzfHByZXZVbnRpbHxwcmV2QWxsKS8sUD0vLC8sUT0vXi5bXjojXFtcLixdKiQvLFI9QXJyYXkucHJvdG90eXBlLnNsaWNlLFM9Zi5leHByLm1hdGNoLlBPUyxUPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2YuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYyxkO2lmKHR5cGVvZiBhIT0ic3RyaW5nIilyZXR1cm4gZihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKylpZihmLmNvbnRhaW5zKGJbY10sdGhpcykpcmV0dXJuITB9KTt2YXIgZT10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsYSksZyxoLGk7Zm9yKGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspe2c9ZS5sZW5ndGgsZi5maW5kKGEsdGhpc1tjXSxlKTtpZihjPjApZm9yKGg9ZztoPGUubGVuZ3RoO2grKylmb3IoaT0wO2k8ZztpKyspaWYoZVtpXT09PWVbaF0pe2Uuc3BsaWNlKGgtLSwxKTticmVha319cmV0dXJuIGV9LGhhczpmdW5jdGlvbihhKXt2YXIgYj1mKGEpO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGM9Yi5sZW5ndGg7YTxjO2ErKylpZihmLmNvbnRhaW5zKHRoaXMsYlthXSkpcmV0dXJuITB9KX0sbm90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhWKHRoaXMsYSwhMSksIm5vdCIsYSl9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVih0aGlzLGEsITApLCJmaWx0ZXIiLGEpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIWEmJih0eXBlb2YgYT09InN0cmluZyI/Zi5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MDp0aGlzLmZpbHRlcihhKS5sZW5ndGg+MCl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkLGUsZz10aGlzWzBdO2lmKGYuaXNBcnJheShhKSl7dmFyIGgsaSxqPXt9LGs9MTtpZihnJiZhLmxlbmd0aCl7Zm9yKGQ9MCxlPWEubGVuZ3RoO2Q8ZTtkKyspaT1hW2RdLGpbaV18fChqW2ldPVMudGVzdChpKT9mKGksYnx8dGhpcy5jb250ZXh0KTppKTt3aGlsZShnJiZnLm93bmVyRG9jdW1lbnQmJmchPT1iKXtmb3IoaSBpbiBqKWg9altpXSwoaC5qcXVlcnk/aC5pbmRleChnKT4tMTpmKGcpLmlzKGgpKSYmYy5wdXNoKHtzZWxlY3RvcjppLGVsZW06ZyxsZXZlbDprfSk7Zz1nLnBhcmVudE5vZGUsaysrfX1yZXR1cm4gY312YXIgbD1TLnRlc3QoYSl8fHR5cGVvZiBhIT0ic3RyaW5nIj9mKGEsYnx8dGhpcy5jb250ZXh0KTowO2ZvcihkPTAsZT10aGlzLmxlbmd0aDtkPGU7ZCsrKXtnPXRoaXNbZF07d2hpbGUoZyl7aWYobD9sLmluZGV4KGcpPi0xOmYuZmluZC5tYXRjaGVzU2VsZWN0b3IoZyxhKSl7Yy5wdXNoKGcpO2JyZWFrfWc9Zy5wYXJlbnROb2RlO2lmKCFnfHwhZy5vd25lckRvY3VtZW50fHxnPT09Ynx8Zy5ub2RlVHlwZT09PTExKWJyZWFrfX1jPWMubGVuZ3RoPjE/Zi51bmlxdWUoYyk6YztyZXR1cm4gdGhpcy5wdXNoU3RhY2soYywiY2xvc2VzdCIsYSl9LGluZGV4OmZ1bmN0aW9uKGEpe2lmKCFhKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5wcmV2QWxsKCkubGVuZ3RoOi0xO2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gZi5pbkFycmF5KHRoaXNbMF0sZihhKSk7cmV0dXJuIGYuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFkZDpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhPT0ic3RyaW5nIj9mKGEsYik6Zi5tYWtlQXJyYXkoYSYmYS5ub2RlVHlwZT9bYV06YSksZD1mLm1lcmdlKHRoaXMuZ2V0KCksYyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFUoY1swXSl8fFUoZFswXSk/ZDpmLnVuaXF1ZShkKSl9LGFuZFNlbGY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZGQodGhpcy5wcmV2T2JqZWN0KX19KSxmLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJmIubm9kZVR5cGUhPT0xMT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubnRoKGEsMiwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gZi5udGgoYSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gZi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuc2libGluZyhhLnBhcmVudE5vZGUuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGYuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZi5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OmYubWFrZUFycmF5KGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1mLm1hcCh0aGlzLGIsYyksZz1SLmNhbGwoYXJndW1lbnRzKTtOLnRlc3QoYSl8fChkPWMpLGQmJnR5cGVvZiBkPT0ic3RyaW5nIiYmKGU9Zi5maWx0ZXIoZCxlKSksZT10aGlzLmxlbmd0aD4xJiYhVFthXT9mLnVuaXF1ZShlKTplLCh0aGlzLmxlbmd0aD4xfHxQLnRlc3QoZCkpJiZPLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZSxhLGcuam9pbigiLCIpKX19KSxmLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixjKXtjJiYoYT0iOm5vdCgiK2ErIikiKTtyZXR1cm4gYi5sZW5ndGg9PT0xP2YuZmluZC5tYXRjaGVzU2VsZWN0b3IoYlswXSxhKT9bYlswXV06W106Zi5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1bXSxnPWFbY107d2hpbGUoZyYmZy5ub2RlVHlwZSE9PTkmJihkPT09Ynx8Zy5ub2RlVHlwZSE9PTF8fCFmKGcpLmlzKGQpKSlnLm5vZGVUeXBlPT09MSYmZS5wdXNoKGcpLGc9Z1tjXTtyZXR1cm4gZX0sbnRoOmZ1bmN0aW9uKGEsYixjLGQpe2I9Ynx8MTt2YXIgZT0wO2Zvcig7YTthPWFbY10paWYoYS5ub2RlVHlwZT09PTEmJisrZT09PWIpYnJlYWs7cmV0dXJuIGF9LHNpYmxpbmc6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtmb3IoO2E7YT1hLm5leHRTaWJsaW5nKWEubm9kZVR5cGU9PT0xJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pO3ZhciBXPS8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csWD0vXlxzKy8sWT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLFo9LzwoW1x3Ol0rKS8sJD0vPHRib2R5L2ksXz0vPHwmIz9cdys7LyxiYT0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLGJiPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJjPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmQ9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmU9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07YmUub3B0Z3JvdXA9YmUub3B0aW9uLGJlLnRib2R5PWJlLnRmb290PWJlLmNvbGdyb3VwPWJlLmNhcHRpb249YmUudGhlYWQsYmUudGg9YmUudGQsZi5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8fChiZS5fZGVmYXVsdD1bMSwiZGl2PGRpdj4iLCI8L2Rpdj4iXSksZi5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKTtjLnRleHQoYS5jYWxsKHRoaXMsYixjLnRleHQoKSkpfSk7aWYodHlwZW9mIGEhPSJvYmplY3QiJiZhIT09YilyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxjKS5jcmVhdGVUZXh0Tm9kZShhKSk7cmV0dXJuIGYudGV4dCh0aGlzKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9ZihhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2YodGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGM9Yi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKHRoaXMpLndyYXBBbGwoYSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe2Yubm9kZU5hbWUodGhpcywiYm9keSIpfHxmKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWYoYXJndW1lbnRzWzBdKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmKGFyZ3VtZW50c1swXSkudG9BcnJheSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGQ7KGQ9dGhpc1tjXSkhPW51bGw7YysrKWlmKCFhfHxmLmZpbHRlcihhLFtkXSkubGVuZ3RoKSFiJiZkLm5vZGVUeXBlPT09MSYmKGYuY2xlYW5EYXRhKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksZi5jbGVhbkRhdGEoW2RdKSksZC5wYXJlbnROb2RlJiZkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShXLCIiKTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJhLnRlc3QoYSkmJihmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCFYLnRlc3QoYSkpJiYhYmVbKFouZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKFksIjwkMT48LyQyPiIpO3RyeXtmb3IodmFyIGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspdGhpc1tjXS5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0YSh0aGlzW2NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHRoaXNbY10uaW5uZXJIVE1MPWEpfWNhdGNoKGUpe3RoaXMuZW1wdHkoKS5hcHBlbmQoYSl9fWVsc2UgZi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MuaHRtbChhLmNhbGwodGhpcyxiLGMuaHRtbCgpKSl9KTp0aGlzLmVtcHR5KCkuYXBwZW5kKGEpO3JldHVybiB0aGlzfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihhKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyksZD1jLmh0bWwoKTtjLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZCkpfSk7dHlwZW9mIGEhPSJzdHJpbmciJiYoYT1mKGEpLmRldGFjaCgpKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZXh0U2libGluZyxjPXRoaXMucGFyZW50Tm9kZTtmKHRoaXMpLnJlbW92ZSgpLGI/ZihiKS5iZWZvcmUoYSk6ZihjKS5hcHBlbmQoYSl9KX1yZXR1cm4gdGhpcy5sZW5ndGg/dGhpcy5wdXNoU3RhY2soZihmLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSk6dGhpc30sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpLGo9YVswXSxrPVtdO2lmKCFmLnN1cHBvcnQuY2hlY2tDbG9uZSYmYXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiBqPT0ic3RyaW5nIiYmYmIudGVzdChqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zih0aGlzKS5kb21NYW5pcChhLGMsZCwhMCl9KTtpZihmLmlzRnVuY3Rpb24oaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZz1mKHRoaXMpO2FbMF09ai5jYWxsKHRoaXMsZSxjP2cuaHRtbCgpOmIpLGcuZG9tTWFuaXAoYSxjLGQpfSk7aWYodGhpc1swXSl7aT1qJiZqLnBhcmVudE5vZGUsZi5zdXBwb3J0LnBhcmVudE5vZGUmJmkmJmkubm9kZVR5cGU9PT0xMSYmaS5jaGlsZE5vZGVzLmxlbmd0aD09PXRoaXMubGVuZ3RoP2U9e2ZyYWdtZW50Oml9OmU9Zi5idWlsZEZyYWdtZW50KGEsdGhpcyxrKSxoPWUuZnJhZ21lbnQsaC5jaGlsZE5vZGVzLmxlbmd0aD09PTE/Zz1oPWguZmlyc3RDaGlsZDpnPWguZmlyc3RDaGlsZDtpZihnKXtjPWMmJmYubm9kZU5hbWUoZywidHIiKTtmb3IodmFyIGw9MCxtPXRoaXMubGVuZ3RoLG49bS0xO2w8bTtsKyspZC5jYWxsKGM/YmYodGhpc1tsXSxnKTp0aGlzW2xdLGUuY2FjaGVhYmxlfHxtPjEmJmw8bj9mLmNsb25lKGgsITAsITApOmgpfWsubGVuZ3RoJiZmLmVhY2goayxibCl9cmV0dXJuIHRoaXN9fSksZi5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxnLGgsaTtiJiZiWzBdJiYoaT1iWzBdLm93bmVyRG9jdW1lbnR8fGJbMF0pLGkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8KGk9YyksYS5sZW5ndGg9PT0xJiZ0eXBlb2YgYVswXT09InN0cmluZyImJmFbMF0ubGVuZ3RoPDUxMiYmaT09PWMmJmFbMF0uY2hhckF0KDApPT09IjwiJiYhYmEudGVzdChhWzBdKSYmKGYuc3VwcG9ydC5jaGVja0Nsb25lfHwhYmIudGVzdChhWzBdKSkmJihnPSEwLGg9Zi5mcmFnbWVudHNbYVswXV0saCYmaCE9PTEmJihlPWgpKSxlfHwoZT1pLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmLmNsZWFuKGEsaSxlLGQpKSxnJiYoZi5mcmFnbWVudHNbYVswXV09aD9lOjEpOw0KcmV0dXJue2ZyYWdtZW50OmUsY2FjaGVhYmxlOmd9fSxmLmZyYWdtZW50cz17fSxmLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyl7dmFyIGQ9W10sZT1mKGMpLGc9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoZyYmZy5ub2RlVHlwZT09PTExJiZnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmZS5sZW5ndGg9PT0xKXtlW2JdKHRoaXNbMF0pO3JldHVybiB0aGlzfWZvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9KGg+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKTtmKGVbaF0pW2JdKGopLGQ9ZC5jb25jYXQoail9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQsYSxlLnNlbGVjdG9yKX19KSxmLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuY2xvbmVOb2RlKCEwKSxlLGcsaDtpZigoIWYuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCFmLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpJiYoYS5ub2RlVHlwZT09PTF8fGEubm9kZVR5cGU9PT0xMSkmJiFmLmlzWE1MRG9jKGEpKXtiaChhLGQpLGU9YmkoYSksZz1iaShkKTtmb3IoaD0wO2VbaF07KytoKWdbaF0mJmJoKGVbaF0sZ1toXSl9aWYoYil7YmcoYSxkKTtpZihjKXtlPWJpKGEpLGc9YmkoZCk7Zm9yKGg9MDtlW2hdOysraCliZyhlW2hdLGdbaF0pfX1lPWc9bnVsbDtyZXR1cm4gZH0sY2xlYW46ZnVuY3Rpb24oYSxiLGQsZSl7dmFyIGc7Yj1ifHxjLHR5cGVvZiBiLmNyZWF0ZUVsZW1lbnQ9PSJ1bmRlZmluZWQiJiYoYj1iLm93bmVyRG9jdW1lbnR8fGJbMF0mJmJbMF0ub3duZXJEb2N1bWVudHx8Yyk7dmFyIGg9W10saTtmb3IodmFyIGo9MCxrOyhrPWFbal0pIT1udWxsO2orKyl7dHlwZW9mIGs9PSJudW1iZXIiJiYoays9IiIpO2lmKCFrKWNvbnRpbnVlO2lmKHR5cGVvZiBrPT0ic3RyaW5nIilpZighXy50ZXN0KGspKWs9Yi5jcmVhdGVUZXh0Tm9kZShrKTtlbHNle2s9ay5yZXBsYWNlKFksIjwkMT48LyQyPiIpO3ZhciBsPShaLmV4ZWMoayl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbT1iZVtsXXx8YmUuX2RlZmF1bHQsbj1tWzBdLG89Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtvLmlubmVySFRNTD1tWzFdK2srbVsyXTt3aGlsZShuLS0pbz1vLmxhc3RDaGlsZDtpZighZi5zdXBwb3J0LnRib2R5KXt2YXIgcD0kLnRlc3QoaykscT1sPT09InRhYmxlIiYmIXA/by5maXJzdENoaWxkJiZvLmZpcnN0Q2hpbGQuY2hpbGROb2RlczptWzFdPT09Ijx0YWJsZT4iJiYhcD9vLmNoaWxkTm9kZXM6W107Zm9yKGk9cS5sZW5ndGgtMTtpPj0wOy0taSlmLm5vZGVOYW1lKHFbaV0sInRib2R5IikmJiFxW2ldLmNoaWxkTm9kZXMubGVuZ3RoJiZxW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocVtpXSl9IWYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmWC50ZXN0KGspJiZvLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKFguZXhlYyhrKVswXSksby5maXJzdENoaWxkKSxrPW8uY2hpbGROb2Rlc312YXIgcjtpZighZi5zdXBwb3J0LmFwcGVuZENoZWNrZWQpaWYoa1swXSYmdHlwZW9mIChyPWsubGVuZ3RoKT09Im51bWJlciIpZm9yKGk9MDtpPHI7aSsrKWJrKGtbaV0pO2Vsc2UgYmsoayk7ay5ub2RlVHlwZT9oLnB1c2goayk6aD1mLm1lcmdlKGgsayl9aWYoZCl7Zz1mdW5jdGlvbihhKXtyZXR1cm4hYS50eXBlfHxiYy50ZXN0KGEudHlwZSl9O2ZvcihqPTA7aFtqXTtqKyspaWYoZSYmZi5ub2RlTmFtZShoW2pdLCJzY3JpcHQiKSYmKCFoW2pdLnR5cGV8fGhbal0udHlwZS50b0xvd2VyQ2FzZSgpPT09InRleHQvamF2YXNjcmlwdCIpKWUucHVzaChoW2pdLnBhcmVudE5vZGU/aFtqXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhbal0pOmhbal0pO2Vsc2V7aWYoaFtqXS5ub2RlVHlwZT09PTEpe3ZhciBzPWYuZ3JlcChoW2pdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtoLnNwbGljZS5hcHBseShoLFtqKzEsMF0uY29uY2F0KHMpKX1kLmFwcGVuZENoaWxkKGhbal0pfX1yZXR1cm4gaH0sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZD1mLmNhY2hlLGU9Zi5leHBhbmRvLGc9Zi5ldmVudC5zcGVjaWFsLGg9Zi5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBpPTAsajsoaj1hW2ldKSE9bnVsbDtpKyspe2lmKGoubm9kZU5hbWUmJmYubm9EYXRhW2oubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1qW2YuZXhwYW5kb107aWYoYyl7Yj1kW2NdJiZkW2NdW2VdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGsgaW4gYi5ldmVudHMpZ1trXT9mLmV2ZW50LnJlbW92ZShqLGspOmYucmVtb3ZlRXZlbnQoaixrLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9aD9kZWxldGUgaltmLmV4cGFuZG9dOmoucmVtb3ZlQXR0cmlidXRlJiZqLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pLGRlbGV0ZSBkW2NdfX19fSk7dmFyIGJtPS9hbHBoYVwoW14pXSpcKS9pLGJuPS9vcGFjaXR5PShbXildKikvLGJvPS8oW0EtWl18Xm1zKS9nLGJwPS9eLT9cZCsoPzpweCk/JC9pLGJxPS9eLT9cZC8sYnI9L14oW1wtK10pPShbXC0rLlxkZV0rKS8sYnM9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ0PVsiTGVmdCIsIlJpZ2h0Il0sYnU9WyJUb3AiLCJCb3R0b20iXSxidixidyxieDtmLmZuLmNzcz1mdW5jdGlvbihhLGMpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZjPT09YilyZXR1cm4gdGhpcztyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGMsITAsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9mLnN0eWxlKGEsYyxkKTpmLmNzcyhhLGMpfSl9LGYuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYoYil7dmFyIGM9YnYoYSwib3BhY2l0eSIsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1ici5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYnYpcmV0dXJuIGJ2KGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfX0pLGYuY3VyQ1NTPWYuY3NzLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlO2lmKGMpe2lmKGEub2Zmc2V0V2lkdGghPT0wKXJldHVybiBieShhLGIsZCk7Zi5zd2FwKGEsYnMsZnVuY3Rpb24oKXtlPWJ5KGEsYixkKX0pO3JldHVybiBlfX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJwLnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZi5zdXBwb3J0Lm9wYWNpdHl8fChmLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBibi50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9Zi5pc05hTihiKT8iIjoiYWxwaGEob3BhY2l0eT0iK2IqMTAwKyIpIixnPWQmJmQuZmlsdGVyfHxjLmZpbHRlcnx8IiI7Yy56b29tPTE7aWYoYj49MSYmZi50cmltKGcucmVwbGFjZShibSwiIikpPT09IiIpe2MucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKTtpZihkJiYhZC5maWx0ZXIpcmV0dXJufWMuZmlsdGVyPWJtLnRlc3QoZyk/Zy5yZXBsYWNlKGJtLGUpOmcrIiAiK2V9fSksZihmdW5jdGlvbigpe2Yuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0fHwoZi5jc3NIb29rcy5tYXJnaW5SaWdodD17Z2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM7Zi5zd2FwKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LGZ1bmN0aW9uKCl7Yj9jPWJ2KGEsIm1hcmdpbi1yaWdodCIsIm1hcmdpblJpZ2h0Iik6Yz1hLnN0eWxlLm1hcmdpblJpZ2h0fSk7cmV0dXJuIGN9fSl9KSxjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihidz1mdW5jdGlvbihhLGMpe3ZhciBkLGUsZztjPWMucmVwbGFjZShibywiLSQxIikudG9Mb3dlckNhc2UoKTtpZighKGU9YS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSlyZXR1cm4gYjtpZihnPWUuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpKWQ9Zy5nZXRQcm9wZXJ0eVZhbHVlKGMpLGQ9PT0iIiYmIWYuY29udGFpbnMoYS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhKSYmKGQ9Zi5zdHlsZShhLGMpKTtyZXR1cm4gZH0pLGMuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKGJ4PWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1hLmN1cnJlbnRTdHlsZSYmYS5jdXJyZW50U3R5bGVbYl0sZT1hLnJ1bnRpbWVTdHlsZSYmYS5ydW50aW1lU3R5bGVbYl0sZj1hLnN0eWxlOyFicC50ZXN0KGQpJiZicS50ZXN0KGQpJiYoYz1mLmxlZnQsZSYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZi5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmR8fDAsZD1mLnBpeGVsTGVmdCsicHgiLGYubGVmdD1jLGUmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWUpKTtyZXR1cm4gZD09PSIiPyJhdXRvIjpkfSksYnY9Ynd8fGJ4LGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFmLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZS5kaXNwbGF5fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KTt2YXIgYno9LyUyMC9nLGJBPS9cW1xdJC8sYkI9L1xyP1xuL2csYkM9LyMuKiQvLGJEPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYkU9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJGPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYkc9L14oPzpHRVR8SEVBRCkkLyxiSD0vXlwvXC8vLGJJPS9cPy8sYko9LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYks9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYkw9L1xzKy8sYk09LyhbPyZdKV89W14mXSovLGJOPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiTz1mLmZuLmxvYWQsYlA9e30sYlE9e30sYlIsYlMsYlQ9WyIqLyJdK1siKiJdO3RyeXtiUj1lLmhyZWZ9Y2F0Y2goYlUpe2JSPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJSLmhyZWY9IiIsYlI9YlIuaHJlZn1iUz1iTi5leGVjKGJSLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiTylyZXR1cm4gYk8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYkosIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJLLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJFLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJCLCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiQiwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJpbmQoYixhKX19KSxmLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtmW2NdPWZ1bmN0aW9uKGEsZCxlLGcpe2YuaXNGdW5jdGlvbihkKSYmKGc9Z3x8ZSxlPWQsZD1iKTtyZXR1cm4gZi5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpnfSl9fSksZi5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBmLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2JYKGEsZi5hamF4U2V0dGluZ3MpOihiPWEsYT1mLmFqYXhTZXR0aW5ncyksYlgoYSxiKTtyZXR1cm4gYX0sYWpheFNldHRpbmdzOnt1cmw6YlIsaXNMb2NhbDpiRi50ZXN0KGJTWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6YlR9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpmLnBhcnNlSlNPTiwidGV4dCB4bWwiOmYucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6YlYoYlApLGFqYXhUcmFuc3BvcnQ6YlYoYlEpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB3KGEsYyxsLG0pe2lmKHMhPT0yKXtzPTIscSYmY2xlYXJUaW1lb3V0KHEpLHA9YixuPW18fCIiLHYucmVhZHlTdGF0ZT1hPjA/NDowO3ZhciBvLHIsdSx3PWMseD1sP2JaKGQsdixsKTpiLHksejtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihkLmlmTW9kaWZpZWQpe2lmKHk9di5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWYubGFzdE1vZGlmaWVkW2tdPXk7aWYoej12LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZi5ldGFnW2tdPXp9aWYoYT09PTMwNCl3PSJub3Rtb2RpZmllZCIsbz0hMDtlbHNlIHRyeXtyPWIkKGQseCksdz0ic3VjY2VzcyIsbz0hMH1jYXRjaChBKXt3PSJwYXJzZXJlcnJvciIsdT1BfX1lbHNle3U9dztpZighd3x8YSl3PSJlcnJvciIsYTwwJiYoYT0wKX12LnN0YXR1cz1hLHYuc3RhdHVzVGV4dD0iIisoY3x8dyksbz9oLnJlc29sdmVXaXRoKGUsW3Isdyx2XSk6aC5yZWplY3RXaXRoKGUsW3Ysdyx1XSksdi5zdGF0dXNDb2RlKGopLGo9Yix0JiZnLnRyaWdnZXIoImFqYXgiKyhvPyJTdWNjZXNzIjoiRXJyb3IiKSxbdixkLG8/cjp1XSksaS5yZXNvbHZlV2l0aChlLFt2LHddKSx0JiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt2LGRdKSwtLWYuYWN0aXZlfHxmLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09Im9iamVjdCImJihjPWEsYT1iKSxjPWN8fHt9O3ZhciBkPWYuYWpheFNldHVwKHt9LGMpLGU9ZC5jb250ZXh0fHxkLGc9ZSE9PWQmJihlLm5vZGVUeXBlfHxlIGluc3RhbmNlb2YgZik/ZihlKTpmLmV2ZW50LGg9Zi5EZWZlcnJlZCgpLGk9Zi5fRGVmZXJyZWQoKSxqPWQuc3RhdHVzQ29kZXx8e30sayxsPXt9LG09e30sbixvLHAscSxyLHM9MCx0LHUsdj17cmVhZHlTdGF0ZTowLHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYSxiKXtpZighcyl7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO2E9bVtjXT1tW2NdfHxhLGxbYV09Yn1yZXR1cm4gdGhpc30sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHM9PT0yP246bnVsbH0sZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oYSl7dmFyIGM7aWYocz09PTIpe2lmKCFvKXtvPXt9O3doaWxlKGM9YkQuZXhlYyhuKSlvW2NbMV0udG9Mb3dlckNhc2UoKV09Y1syXX1jPW9bYS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gYz09PWI/bnVsbDpjfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3N8fChkLm1pbWVUeXBlPWEpO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihhKXthPWF8fCJhYm9ydCIscCYmcC5hYm9ydChhKSx3KDAsYSk7cmV0dXJuIHRoaXN9fTtoLnByb21pc2Uodiksdi5zdWNjZXNzPXYuZG9uZSx2LmVycm9yPXYuZmFpbCx2LmNvbXBsZXRlPWkuZG9uZSx2LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYoczwyKWZvcihiIGluIGEpaltiXT1baltiXSxhW2JdXTtlbHNlIGI9YVt2LnN0YXR1c10sdi50aGVuKGIsYil9cmV0dXJuIHRoaXN9LGQudXJsPSgoYXx8ZC51cmwpKyIiKS5yZXBsYWNlKGJDLCIiKS5yZXBsYWNlKGJILGJTWzFdKyIvLyIpLGQuZGF0YVR5cGVzPWYudHJpbShkLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYkwpLGQuY3Jvc3NEb21haW49PW51bGwmJihyPWJOLmV4ZWMoZC51cmwudG9Mb3dlckNhc2UoKSksZC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT1iU1sxXSYmclsyXT09YlNbMl0mJihyWzNdfHwoclsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShiU1szXXx8KGJTWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGQuZGF0YSYmZC5wcm9jZXNzRGF0YSYmdHlwZW9mIGQuZGF0YSE9InN0cmluZyImJihkLmRhdGE9Zi5wYXJhbShkLmRhdGEsZC50cmFkaXRpb25hbCkpLGJXKGJQLGQsYyx2KTtpZihzPT09MilyZXR1cm4hMTt0PWQuZ2xvYmFsLGQudHlwZT1kLnR5cGUudG9VcHBlckNhc2UoKSxkLmhhc0NvbnRlbnQ9IWJHLnRlc3QoZC50eXBlKSx0JiZmLmFjdGl2ZSsrPT09MCYmZi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZC5oYXNDb250ZW50KXtkLmRhdGEmJihkLnVybCs9KGJJLnRlc3QoZC51cmwpPyImIjoiPyIpK2QuZGF0YSxkZWxldGUgZC5kYXRhKSxrPWQudXJsO2lmKGQuY2FjaGU9PT0hMSl7dmFyIHg9Zi5ub3coKSx5PWQudXJsLnJlcGxhY2UoYk0sIiQxXz0iK3gpO2QudXJsPXkrKHk9PT1kLnVybD8oYkkudGVzdChkLnVybCk/IiYiOiI/IikrIl89Iit4OiIiKX19KGQuZGF0YSYmZC5oYXNDb250ZW50JiZkLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZC5jb250ZW50VHlwZSksZC5pZk1vZGlmaWVkJiYoaz1rfHxkLnVybCxmLmxhc3RNb2RpZmllZFtrXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsZi5sYXN0TW9kaWZpZWRba10pLGYuZXRhZ1trXSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIixmLmV0YWdba10pKSx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsZC5kYXRhVHlwZXNbMF0mJmQuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0/ZC5hY2NlcHRzW2QuZGF0YVR5cGVzWzBdXSsoZC5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitiVCsiOyBxPTAuMDEiOiIiKTpkLmFjY2VwdHNbIioiXSk7Zm9yKHUgaW4gZC5oZWFkZXJzKXYuc2V0UmVxdWVzdEhlYWRlcih1LGQuaGVhZGVyc1t1XSk7aWYoZC5iZWZvcmVTZW5kJiYoZC5iZWZvcmVTZW5kLmNhbGwoZSx2LGQpPT09ITF8fHM9PT0yKSl7di5hYm9ydCgpO3JldHVybiExfWZvcih1IGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbdV0oZFt1XSk7cD1iVyhiUSxkLGMsdik7aWYoIXApdygtMSwiTm8gVHJhbnNwb3J0Iik7ZWxzZXt2LnJlYWR5U3RhdGU9MSx0JiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdixkXSksZC5hc3luYyYmZC50aW1lb3V0PjAmJihxPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2LmFib3J0KCJ0aW1lb3V0Iil9LGQudGltZW91dCkpO3RyeXtzPTEscC5zZW5kKGwsdyl9Y2F0Y2goeil7czwyP3coLTEseik6Zi5lcnJvcih6KX19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpYlkoZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYnosIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgYl89Zi5ub3coKSxjYT0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitiXysrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuY29udGVudFR5cGU9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmdHlwZW9mIGIuZGF0YT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjYS50ZXN0KGIudXJsKXx8ZSYmY2EudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2EsbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNhLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2I9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNkKWNkW2FdKDAsMSl9OiExLGNjPTAsY2Q7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNlKCl8fGNmKCl9OmNlLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKXtpZighYy5jcm9zc0RvbWFpbnx8Zi5zdXBwb3J0LmNvcnMpe3ZhciBkO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZyl7dmFyIGg9Yy54aHIoKSxpLGo7Yy51c2VybmFtZT9oLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMsYy51c2VybmFtZSxjLnBhc3N3b3JkKTpoLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMpO2lmKGMueGhyRmllbGRzKWZvcihqIGluIGMueGhyRmllbGRzKWhbal09Yy54aHJGaWVsZHNbal07Yy5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYy5taW1lVHlwZSksIWMuY3Jvc3NEb21haW4mJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihqIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGosZVtqXSl9Y2F0Y2goayl7fWguc2VuZChjLmhhc0NvbnRlbnQmJmMuZGF0YXx8bnVsbCksZD1mdW5jdGlvbihhLGUpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGQmJihlfHxoLnJlYWR5U3RhdGU9PT00KSl7ZD1iLGkmJihoLm9ucmVhZHlzdGF0ZWNoYW5nZT1mLm5vb3AsY2ImJmRlbGV0ZSBjZFtpXSk7aWYoZSloLnJlYWR5U3RhdGUhPT00JiZoLmFib3J0KCk7ZWxzZXtqPWguc3RhdHVzLGw9aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxtPXt9LG49aC5yZXNwb25zZVhNTCxuJiZuLmRvY3VtZW50RWxlbWVudCYmKG0ueG1sPW4pLG0udGV4dD1oLnJlc3BvbnNlVGV4dDt0cnl7az1oLnN0YXR1c1RleHR9Y2F0Y2gobyl7az0iIn0haiYmYy5pc0xvY2FsJiYhYy5jcm9zc0RvbWFpbj9qPW0udGV4dD8yMDA6NDA0Omo9PT0xMjIzJiYoaj0yMDQpfX19Y2F0Y2gocCl7ZXx8ZygtMSxwKX1tJiZnKGosayxtLGwpfSwhYy5hc3luY3x8aC5yZWFkeVN0YXRlPT09ND9kKCk6KGk9KytjYyxjYiYmKGNkfHwoY2Q9e30sZihhKS51bmxvYWQoY2IpKSxjZFtpXT1kKSxoLm9ucmVhZHlzdGF0ZWNoYW5nZT1kKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY2c9e30sY2gsY2ksY2o9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNrPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksY2wsY209W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV0sY247Zi5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjcSgic2hvdyIsMyksYSxiLGMpO2Zvcih2YXIgZz0wLGg9dGhpcy5sZW5ndGg7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9ZC5zdHlsZS5kaXNwbGF5LCFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZT09PSJub25lIiYmKGU9ZC5zdHlsZS5kaXNwbGF5PSIiKSxlPT09IiImJmYuY3NzKGQsImRpc3BsYXkiKT09PSJub25lIiYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixjcihkLm5vZGVOYW1lKSkpO2ZvcihnPTA7ZzxoO2crKyl7ZD10aGlzW2ddO2lmKGQuc3R5bGUpe2U9ZC5zdHlsZS5kaXNwbGF5O2lmKGU9PT0iInx8ZT09PSJub25lIilkLnN0eWxlLmRpc3BsYXk9Zi5fZGF0YShkLCJvbGRkaXNwbGF5Iil8fCIifX1yZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihhLGIsYyl7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjcSgiaGlkZSIsMyksYSxiLGMpO2Zvcih2YXIgZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKylpZih0aGlzW2RdLnN0eWxlKXt2YXIgZz1mLmNzcyh0aGlzW2RdLCJkaXNwbGF5Iik7ZyE9PSJub25lIiYmIWYuX2RhdGEodGhpc1tkXSwib2xkZGlzcGxheSIpJiZmLl9kYXRhKHRoaXNbZF0sIm9sZGRpc3BsYXkiLGcpfWZvcihkPTA7ZDxlO2QrKyl0aGlzW2RdLnN0eWxlJiYodGhpc1tkXS5zdHlsZS5kaXNwbGF5PSJub25lIik7cmV0dXJuIHRoaXN9LF90b2dnbGU6Zi5mbi50b2dnbGUsdG9nZ2xlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD10eXBlb2YgYT09ImJvb2xlYW4iO2YuaXNGdW5jdGlvbihhKSYmZi5pc0Z1bmN0aW9uKGIpP3RoaXMuX3RvZ2dsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YT09bnVsbHx8ZD90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1kP2E6Zih0aGlzKS5pcygiOmhpZGRlbiIpO2YodGhpcylbYj8ic2hvdyI6ImhpZGUiXSgpfSk6dGhpcy5hbmltYXRlKGNxKCJ0b2dnbGUiLDMpLGEsYixjKTtyZXR1cm4gdGhpc30sZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcigiOmhpZGRlbiIpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWYuc3BlZWQoYixjLGQpO2lmKGYuaXNFbXB0eU9iamVjdChhKSlyZXR1cm4gdGhpcy5lYWNoKGUuY29tcGxldGUsWyExXSk7YT1mLmV4dGVuZCh7fSxhKTtyZXR1cm4gdGhpc1tlLnF1ZXVlPT09ITE/ImVhY2giOiJxdWV1ZSJdKGZ1bmN0aW9uKCl7ZS5xdWV1ZT09PSExJiZmLl9tYXJrKHRoaXMpO3ZhciBiPWYuZXh0ZW5kKHt9LGUpLGM9dGhpcy5ub2RlVHlwZT09PTEsZD1jJiZmKHRoaXMpLmlzKCI6aGlkZGVuIiksZyxoLGksaixrLGwsbSxuLG87Yi5hbmltYXRlZFByb3BlcnRpZXM9e307Zm9yKGkgaW4gYSl7Zz1mLmNhbWVsQ2FzZShpKSxpIT09ZyYmKGFbZ109YVtpXSxkZWxldGUgYVtpXSksaD1hW2ddLGYuaXNBcnJheShoKT8oYi5hbmltYXRlZFByb3BlcnRpZXNbZ109aFsxXSxoPWFbZ109aFswXSk6Yi5hbmltYXRlZFByb3BlcnRpZXNbZ109Yi5zcGVjaWFsRWFzaW5nJiZiLnNwZWNpYWxFYXNpbmdbZ118fGIuZWFzaW5nfHwic3dpbmciO2lmKGg9PT0iaGlkZSImJmR8fGg9PT0ic2hvdyImJiFkKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7YyYmKGc9PT0iaGVpZ2h0Inx8Zz09PSJ3aWR0aCIpJiYoYi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV0sZi5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmYuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSImJihmLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dD8oaj1jcih0aGlzLm5vZGVOYW1lKSxqPT09ImlubGluZSI/dGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOih0aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZSIsdGhpcy5zdHlsZS56b29tPTEpKTp0aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKX1iLm92ZXJmbG93IT1udWxsJiYodGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7Zm9yKGkgaW4gYSlrPW5ldyBmLmZ4KHRoaXMsYixpKSxoPWFbaV0sY2oudGVzdChoKT9rW2g9PT0idG9nZ2xlIj9kPyJzaG93IjoiaGlkZSI6aF0oKToobD1jay5leGVjKGgpLG09ay5jdXIoKSxsPyhuPXBhcnNlRmxvYXQobFsyXSksbz1sWzNdfHwoZi5jc3NOdW1iZXJbaV0/IiI6InB4IiksbyE9PSJweCImJihmLnN0eWxlKHRoaXMsaSwobnx8MSkrbyksbT0obnx8MSkvay5jdXIoKSptLGYuc3R5bGUodGhpcyxpLG0rbykpLGxbMV0mJihuPShsWzFdPT09Ii09Ij8tMToxKSpuK20pLGsuY3VzdG9tKG0sbixvKSk6ay5jdXN0b20obSxoLCIiKSk7cmV0dXJuITB9KX0sc3RvcDpmdW5jdGlvbihhLGIpe2EmJnRoaXMucXVldWUoW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBhPWYudGltZXJzLGM9YS5sZW5ndGg7Ynx8Zi5fdW5tYXJrKCEwLHRoaXMpO3doaWxlKGMtLSlhW2NdLmVsZW09PT10aGlzJiYoYiYmYVtjXSghMCksYS5zcGxpY2UoYywxKSl9KSxifHx0aGlzLmRlcXVldWUoKTtyZXR1cm4gdGhpc319KSxmLmVhY2goe3NsaWRlRG93bjpjcSgic2hvdyIsMSksc2xpZGVVcDpjcSgiaGlkZSIsMSksc2xpZGVUb2dnbGU6Y3EoInRvZ2dsZSIsMSksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksZi5leHRlbmQoe3NwZWVkOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZ0eXBlb2YgYT09Im9iamVjdCI/Zi5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxmLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIWYuaXNGdW5jdGlvbihiKSYmYn07ZC5kdXJhdGlvbj1mLmZ4Lm9mZj8wOnR5cGVvZiBkLmR1cmF0aW9uPT0ibnVtYmVyIj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gZi5meC5zcGVlZHM/Zi5meC5zcGVlZHNbZC5kdXJhdGlvbl06Zi5meC5zcGVlZHMuX2RlZmF1bHQsZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKGEpe2YuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZSE9PSExP2YuZGVxdWV1ZSh0aGlzKTphIT09ITEmJmYuX3VubWFyayh0aGlzKX07cmV0dXJuIGR9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnPWIub3JpZ3x8e319fSksZi5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSwoZi5meC5zdGVwW3RoaXMucHJvcF18fGYuZnguc3RlcC5fZGVmYXVsdCkodGhpcyl9LGN1cjpmdW5jdGlvbigpe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiYoIXRoaXMuZWxlbS5zdHlsZXx8dGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpKXJldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXTt2YXIgYSxiPWYuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3ApO3JldHVybiBpc05hTihhPXBhcnNlRmxvYXQoYikpPyFifHxiPT09ImF1dG8iPzA6YjphfSxjdXN0b206ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGcoYSl7cmV0dXJuIGQuc3RlcChhKX12YXIgZD10aGlzLGU9Zi5meDt0aGlzLnN0YXJ0VGltZT1jbnx8Y28oKSx0aGlzLnN0YXJ0PWEsdGhpcy5lbmQ9Yix0aGlzLnVuaXQ9Y3x8dGhpcy51bml0fHwoZi5jc3NOdW1iZXJbdGhpcy5wcm9wXT8iIjoicHgiKSx0aGlzLm5vdz10aGlzLnN0YXJ0LHRoaXMucG9zPXRoaXMuc3RhdGU9MCxnLmVsZW09dGhpcy5lbGVtLGcoKSYmZi50aW1lcnMucHVzaChnKSYmIWNsJiYoY2w9c2V0SW50ZXJ2YWwoZS50aWNrLGUuaW50ZXJ2YWwpKX0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCx0aGlzLmN1c3RvbSh0aGlzLnByb3A9PT0id2lkdGgifHx0aGlzLnByb3A9PT0iaGVpZ2h0Ij8xOjAsdGhpcy5jdXIoKSksZih0aGlzLmVsZW0pLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuaGlkZT0hMCx0aGlzLmN1c3RvbSh0aGlzLmN1cigpLDApfSxzdGVwOmZ1bmN0aW9uKGEpe3ZhciBiPWNufHxjbygpLGM9ITAsZD10aGlzLmVsZW0sZT10aGlzLm9wdGlvbnMsZyxoO2lmKGF8fGI+PWUuZHVyYXRpb24rdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kLHRoaXMucG9zPXRoaXMuc3RhdGU9MSx0aGlzLnVwZGF0ZSgpLGUuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF09ITA7Zm9yKGcgaW4gZS5hbmltYXRlZFByb3BlcnRpZXMpZS5hbmltYXRlZFByb3BlcnRpZXNbZ10hPT0hMCYmKGM9ITEpO2lmKGMpe2Uub3ZlcmZsb3chPW51bGwmJiFmLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyYmZi5lYWNoKFsiIiwiWCIsIlkiXSxmdW5jdGlvbihhLGIpe2Quc3R5bGVbIm92ZXJmbG93IitiXT1lLm92ZXJmbG93W2FdfSksZS5oaWRlJiZmKGQpLmhpZGUoKTtpZihlLmhpZGV8fGUuc2hvdylmb3IodmFyIGkgaW4gZS5hbmltYXRlZFByb3BlcnRpZXMpZi5zdHlsZShkLGksZS5vcmlnW2ldKTtlLmNvbXBsZXRlLmNhbGwoZCl9cmV0dXJuITF9ZS5kdXJhdGlvbj09SW5maW5pdHk/dGhpcy5ub3c9YjooaD1iLXRoaXMuc3RhcnRUaW1lLHRoaXMuc3RhdGU9aC9lLmR1cmF0aW9uLHRoaXMucG9zPWYuZWFzaW5nW2UuYW5pbWF0ZWRQcm9wZXJ0aWVzW3RoaXMucHJvcF1dKHRoaXMuc3RhdGUsaCwwLDEsZS5kdXJhdGlvbiksdGhpcy5ub3c9dGhpcy5zdGFydCsodGhpcy5lbmQtdGhpcy5zdGFydCkqdGhpcy5wb3MpLHRoaXMudXBkYXRlKCk7cmV0dXJuITB9fSxmLmV4dGVuZChmLmZ4LHt0aWNrOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPWYudGltZXJzLGI9MDtiPGEubGVuZ3RoOysrYilhW2JdKCl8fGEuc3BsaWNlKGItLSwxKTthLmxlbmd0aHx8Zi5meC5zdG9wKCl9LGludGVydmFsOjEzLHN0b3A6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGNsKSxjbD1udWxsfSxzcGVlZHM6e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sc3RlcDp7b3BhY2l0eTpmdW5jdGlvbihhKXtmLnN0eWxlKGEuZWxlbSwib3BhY2l0eSIsYS5ub3cpfSxfZGVmYXVsdDpmdW5jdGlvbihhKXthLmVsZW0uc3R5bGUmJmEuZWxlbS5zdHlsZVthLnByb3BdIT1udWxsP2EuZWxlbS5zdHlsZVthLnByb3BdPShhLnByb3A9PT0id2lkdGgifHxhLnByb3A9PT0iaGVpZ2h0Ij9NYXRoLm1heCgwLGEubm93KTphLm5vdykrYS51bml0OmEuZWxlbVthLnByb3BdPWEubm93fX19KSxmLmV4cHImJmYuZXhwci5maWx0ZXJzJiYoZi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZ3JlcChmLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH0pO3ZhciBjcz0vXnQoPzphYmxlfGR8aCkkL2ksY3Q9L14oPzpib2R5fGh0bWwpJC9pOyJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gYy5kb2N1bWVudEVsZW1lbnQ/Zi5mbi5vZmZzZXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXSxjO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0KGIpO3RyeXtjPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2goZCl7fXZhciBlPWIub3duZXJEb2N1bWVudCxnPWUuZG9jdW1lbnRFbGVtZW50O2lmKCFjfHwhZi5jb250YWlucyhnLGIpKXJldHVybiBjP3t0b3A6Yy50b3AsbGVmdDpjLmxlZnR9Ont0b3A6MCxsZWZ0OjB9O3ZhciBoPWUuYm9keSxpPWN1KGUpLGo9Zy5jbGllbnRUb3B8fGguY2xpZW50VG9wfHwwLGs9Zy5jbGllbnRMZWZ0fHxoLmNsaWVudExlZnR8fDAsbD1pLnBhZ2VZT2Zmc2V0fHxmLnN1cHBvcnQuYm94TW9kZWwmJmcuc2Nyb2xsVG9wfHxoLnNjcm9sbFRvcCxtPWkucGFnZVhPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxMZWZ0fHxoLnNjcm9sbExlZnQsbj1jLnRvcCtsLWosbz1jLmxlZnQrbS1rO3JldHVybnt0b3A6bixsZWZ0Om99fTpmLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0KGIpO2Yub2Zmc2V0LmluaXRpYWxpemUoKTt2YXIgYyxkPWIub2Zmc2V0UGFyZW50LGU9YixnPWIub3duZXJEb2N1bWVudCxoPWcuZG9jdW1lbnRFbGVtZW50LGk9Zy5ib2R5LGo9Zy5kZWZhdWx0VmlldyxrPWo/ai5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGUsbD1iLm9mZnNldFRvcCxtPWIub2Zmc2V0TGVmdDt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiZiIT09aSYmYiE9PWgpe2lmKGYub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7Yz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGwtPWIuc2Nyb2xsVG9wLG0tPWIuc2Nyb2xsTGVmdCxiPT09ZCYmKGwrPWIub2Zmc2V0VG9wLG0rPWIub2Zmc2V0TGVmdCxmLm9mZnNldC5kb2VzTm90QWRkQm9yZGVyJiYoIWYub2Zmc2V0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzfHwhY3MudGVzdChiLm5vZGVOYW1lKSkmJihsKz1wYXJzZUZsb2F0KGMuYm9yZGVyVG9wV2lkdGgpfHwwLG0rPXBhcnNlRmxvYXQoYy5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxlPWQsZD1iLm9mZnNldFBhcmVudCksZi5vZmZzZXQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZjLm92ZXJmbG93IT09InZpc2libGUiJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksaz1jfWlmKGsucG9zaXRpb249PT0icmVsYXRpdmUifHxrLnBvc2l0aW9uPT09InN0YXRpYyIpbCs9aS5vZmZzZXRUb3AsbSs9aS5vZmZzZXRMZWZ0O2Yub2Zmc2V0LnN1cHBvcnRzRml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCImJihsKz1NYXRoLm1heChoLnNjcm9sbFRvcCxpLnNjcm9sbFRvcCksbSs9TWF0aC5tYXgoaC5zY3JvbGxMZWZ0LGkuc2Nyb2xsTGVmdCkpO3JldHVybnt0b3A6bCxsZWZ0Om19fSxmLm9mZnNldD17aW5pdGlhbGl6ZTpmdW5jdGlvbigpe3ZhciBhPWMuYm9keSxiPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZCxlLGcsaCxpPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGo9IjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4Oyc+PGRpdj48L2Rpdj48L2Rpdj48dGFibGUgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttYXJnaW46MDtib3JkZXI6NXB4IHNvbGlkICMwMDA7cGFkZGluZzowO3dpZHRoOjFweDtoZWlnaHQ6MXB4OycgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz48dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPiI7Zi5leHRlbmQoYi5zdHlsZSx7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAsYm9yZGVyOjAsd2lkdGg6IjFweCIsaGVpZ2h0OiIxcHgiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxiLmlubmVySFRNTD1qLGEuaW5zZXJ0QmVmb3JlKGIsYS5maXJzdENoaWxkKSxkPWIuZmlyc3RDaGlsZCxlPWQuZmlyc3RDaGlsZCxoPWQubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkLHRoaXMuZG9lc05vdEFkZEJvcmRlcj1lLm9mZnNldFRvcCE9PTUsdGhpcy5kb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxscz1oLm9mZnNldFRvcD09PTUsZS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGUuc3R5bGUudG9wPSIyMHB4Iix0aGlzLnN1cHBvcnRzRml4ZWRQb3NpdGlvbj1lLm9mZnNldFRvcD09PTIwfHxlLm9mZnNldFRvcD09PTE1LGUuc3R5bGUucG9zaXRpb249ZS5zdHlsZS50b3A9IiIsZC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsdGhpcy5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGU9ZS5vZmZzZXRUb3A9PT0tNSx0aGlzLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PWEub2Zmc2V0VG9wIT09aSxhLnJlbW92ZUNoaWxkKGIpLGYub2Zmc2V0LmluaXRpYWxpemU9Zi5ub29wfSxib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yub2Zmc2V0LmluaXRpYWxpemUoKSxmLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3QudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3QudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD0ic2Nyb2xsIitjO2YuZm5bZF09ZnVuY3Rpb24oYyl7dmFyIGUsZztpZihjPT09Yil7ZT10aGlzWzBdO2lmKCFlKXJldHVybiBudWxsO2c9Y3UoZSk7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06Zi5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtkXXx8Zy5kb2N1bWVudC5ib2R5W2RdOmVbZF19cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2c9Y3UodGhpcyksZz9nLnNjcm9sbFRvKGE/ZihnKS5zY3JvbGxMZWZ0KCk6YyxhP2M6ZihnKS5zY3JvbGxUb3AoKSk6dGhpc1tkXT1jfSl9fSksZi5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBkPWMudG9Mb3dlckNhc2UoKTtmLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXt2YXIgYT10aGlzWzBdO3JldHVybiBhJiZhLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYSxkLCJwYWRkaW5nIikpOm51bGx9LGYuZm5bIm91dGVyIitjXT1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO3JldHVybiBiJiZiLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYixkLGE/Im1hcmdpbiI6ImJvcmRlciIpKTpudWxsfSxmLmZuW2RdPWZ1bmN0aW9uKGEpe3ZhciBlPXRoaXNbMF07aWYoIWUpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Y1tkXShhLmNhbGwodGhpcyxiLGNbZF0oKSkpfSk7aWYoZi5pc1dpbmRvdyhlKSl7dmFyIGc9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10saD1lLmRvY3VtZW50LmJvZHk7cmV0dXJuIGUuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8aCYmaFsiY2xpZW50IitjXXx8Z31pZihlLm5vZGVUeXBlPT09OSlyZXR1cm4gTWF0aC5tYXgoZS5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY10sZS5ib2R5WyJzY3JvbGwiK2NdLGUuZG9jdW1lbnRFbGVtZW50WyJzY3JvbGwiK2NdLGUuYm9keVsib2Zmc2V0IitjXSxlLmRvY3VtZW50RWxlbWVudFsib2Zmc2V0IitjXSk7aWYoYT09PWIpe3ZhciBpPWYuY3NzKGUsZCksaj1wYXJzZUZsb2F0KGkpO3JldHVybiBmLmlzTmFOKGopP2k6an1yZXR1cm4gdGhpcy5jc3MoZCx0eXBlb2YgYT09InN0cmluZyI/YTphKyJweCIpfX0pLGEualF1ZXJ5PWEuJD1mfSkod2luZG93KTs=]]></data>
	</file>
	<file>
	  <filename>/min/builder/ocCheck.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCi8qKgogKiBBSkFYIGNoZWNrcyBmb3IgemxpYi5vdXRwdXRfY29tcHJlc3Npb24KICogCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KCiRfb2MgPSBpbmlfZ2V0KCd6bGliLm91dHB1dF9jb21wcmVzc2lvbicpOwogCi8vIGFsbG93IGFjY2VzcyBvbmx5IGlmIGJ1aWxkZXIgaXMgZW5hYmxlZApyZXF1aXJlIGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi9jb25maWcucGhwJzsKaWYgKCEgJG1pbl9lbmFibGVCdWlsZGVyKSB7CiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAvJyk7CiAgICBleGl0KCk7Cn0KCmlmIChpc3NldCgkX0dFVFsnaGVsbG8nXSkpIHsKICAgIC8vIGVjaG8gJ1dvcmxkIScKICAgIAogICAgLy8gdHJ5IHRvIHByZXZlbnQgZG91YmxlIGVuY29kaW5nIChtYXkgbm90IGhhdmUgYW4gZWZmZWN0KQogICAgaW5pX3NldCgnemxpYi5vdXRwdXRfY29tcHJlc3Npb24nLCAnMCcpOwogICAgCiAgICByZXF1aXJlICRtaW5fbGliUGF0aCAuICcvSFRUUC9FbmNvZGVyLnBocCc7CiAgICBIVFRQX0VuY29kZXI6OiRlbmNvZGVUb0llNiAgPSB0cnVlOyAvLyBqdXN0IGluIGNhc2UKICAgICRoZSA9IG5ldyBIVFRQX0VuY29kZXIoYXJyYXkoCiAgICAgICAgJ2NvbnRlbnQnID0+ICdXb3JsZCEnCiAgICAgICAgLCdtZXRob2QnID0+ICdkZWZsYXRlJwogICAgKSk7CiAgICAkaGUtPmVuY29kZSgpOw0KICAgICRoZS0+c2VuZEFsbCgpOw0KCn0gZWxzZSB7CiAgICAvLyBlY2hvIHN0YXR1cyAiMCIgb3IgIjEiCiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicpOwogICAgZWNobyAoaW50KSRfb2M7Cn0K]]></data>
	</file>
	<file>
	  <filename>/min/builder/rewriteTest.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MQ==]]></data>
	</file>
	<file>
	  <filename>/min/builder/test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKZXhpdCgpOwovKiBjdXJyZW50bHkgdW51c2VkLgoKLy8gY2FwdHVyZSBQSFAncyBkZWZhdWx0IHNldHRpbmcgKG1heSBnZXQgb3ZlcnJpZGRlbiBpbiBjb25maWcKJF9vYyA9IGluaV9nZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJyk7CgovLyBhbGxvdyBhY2Nlc3Mgb25seSBpZiBidWlsZGVyIGlzIGVuYWJsZWQKcmVxdWlyZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvLi4vY29uZmlnLnBocCc7CmlmICghICRtaW5fZW5hYmxlQnVpbGRlcikgewogICAgZXhpdCgpOwp9CgppZiAoaXNzZXQoJF9HRVRbJ29jJ10pKSB7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicpOwogICAgZWNobyAoaW50KSRfb2M7Cgp9IGVsc2VpZiAoaXNzZXQoJF9HRVRbJ3RleHQnXSkgJiYgaW5fYXJyYXkoJF9HRVRbJ3RleHQnXSwgYXJyYXkoJ2pzJywgJ2NzcycsICdmYWtlJykpKSB7CiAgICBpbmlfc2V0KCd6bGliLm91dHB1dF9jb21wcmVzc2lvbicsICcwJyk7CiAgICAkdHlwZSA9ICgkX0dFVFsndGV4dCddID09ICdqcycpCiAgICAgICAgPyAnYXBwbGljYXRpb24veC1qYXZhc2NyaXB0JwogICAgICAgIDogInRleHQveyRfR0VUWyd0ZXh0J119IjsKICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB7JHR5cGV9Iik7CiAgICBlY2hvICdIZWxsbyc7Cgp9IGVsc2VpZiAoaXNzZXQoJF9HRVRbJ2RvY3Jvb3QnXSkpIHsKICAgIGlmIChmYWxzZSA9PT0gcmVhbHBhdGgoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSkpIHsKICAgICAgICBlY2hvICI8cCBjbGFzcz10b3BXYXJuaW5nPjxzdHJvbmc+cmVhbHBhdGgoRE9DVU1FTlRfUk9PVCkgZmFpbGVkLjwvc3Ryb25nPiBZb3UgbWF5IG5lZWQgIgogICAgICAgICAgIC4gInRvIHNldCBcJG1pbl9kb2N1bWVudFJvb3QgbWFudWFsbHkgKGhvcGVmdWxseSByZWFscGF0aCgpIGlzIG5vdCAiCiAgICAgICAgICAgLiAiYnJva2VuIGluIHlvdXIgZW52aXJvbm1lbnQpLjwvcD4iOwogICAgfQogICAgaWYgKDAgIT09IHN0cnBvcyhyZWFscGF0aChfX0ZJTEVfXyksIHJlYWxwYXRoKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pKSkgewogICAgICAgIGVjaG8gIjxwIGNsYXNzPXRvcFdhcm5pbmc+PHN0cm9uZz5ET0NVTUVOVF9ST09UIGRvZXNuJ3QgY29udGFpbiB0aGlzIGZpbGUuPC9zdHJvbmc+IFlvdSBtYXkgIgogICAgICAgICAgIC4gIiBuZWVkIHRvIHNldCBcJG1pbl9kb2N1bWVudFJvb3QgbWFudWFsbHk8L3A+IjsKICAgIH0KICAgIGlmIChpc3NldCgkX1NFUlZFUlsnU1VCRE9NQUlOX0RPQ1VNRU5UX1JPT1QnXSkpIHsKICAgICAgICBlY2hvICI8cCBjbGFzcz10b3BOb3RlPjxzdHJvbmc+XCRfU0VSVkVSWydTVUJET01BSU5fRE9DVU1FTlRfUk9PVCddIGlzIHNldC48L3N0cm9uZz4gIgogICAgICAgICAgIC4gIllvdSBtYXkgbmVlZCB0byBzZXQgXCRtaW5fZG9jdW1lbnRSb290IHRvIHRoaXMgaW4gY29uZmlnLnBocDwvcD4iOwogICAgfQogICAgCn0KCi8vKi8=]]></data>
	</file>
	<file>
	  <filename>/min/builder/_index.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIE1pbmlmeSBVUkkgQnVpbGRlcgogKi8KdmFyIE1VQiA9IHsKICAgIF91aWQgOiAwLAogICAgX21pblJvb3QgOiAnL21pbi8/JywKICAgIGNoZWNrUmV3cml0ZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgdGVzdFVyaSA9IGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sICcvcmV3cml0ZVRlc3QuanMnKS5zdWJzdHIoMSk7CiAgICAgICAgZnVuY3Rpb24gZmFpbCgpIHsKICAgICAgICAgICAgJCgnI21pblJld3JpdGVGYWlsZWQnKVswXS5jbGFzc05hbWUgPSAndG9wTm90ZSc7CiAgICAgICAgfQogICAgICAgICQuYWpheCh7CiAgICAgICAgICAgIHVybCA6ICcuLi9mPScgKyB0ZXN0VXJpICsgJyYnICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKSwKICAgICAgICAgICAgc3VjY2VzcyA6IGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgICAgICBpZiAoZGF0YSA9PT0gJzEnKSB7CiAgICAgICAgICAgICAgICAgICAgTVVCLl9taW5Sb290ID0gJy9taW4vJzsKICAgICAgICAgICAgICAgICAgICAkKCdzcGFuLm1pblJvb3QnKS5odG1sKCcvbWluLycpOwogICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgZmFpbCgpOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXJyb3IgOiBmYWlsCiAgICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBHZXQgbWFya3VwIGZvciBuZXcgc291cmNlIExJIGVsZW1lbnQKICAgICAqLwogICAgbmV3TGkgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuICc8bGkgaWQ9ImxpJyArIE1VQi5fdWlkICsgJyI+aHR0cDovLycgKyBsb2NhdGlvbi5ob3N0ICsgJy88aW5wdXQgdHlwZT10ZXh0IHNpemU9MjA+JyArCiAgICAgICAgJyA8YnV0dG9uIHRpdGxlPSJSZW1vdmUiPng8L2J1dHRvbj4gPGJ1dHRvbiB0aXRsZT0iSW5jbHVkZSBFYXJsaWVyIj4mdWFycjs8L2J1dHRvbj4nICsKICAgICAgICAnIDxidXR0b24gdGl0bGU9IkluY2x1ZGUgTGF0ZXIiPiZkYXJyOzwvYnV0dG9uPiA8c3Bhbj48L3NwYW4+PC9saT4nOwogICAgfSwKICAgIC8qKgogICAgICogQWRkIG5ldyBlbXB0eSBzb3VyY2UgTEkgYW5kIGF0dGFjaCBoYW5kbGVycyB0byBidXR0b25zCiAgICAgKi8KICAgIGFkZExpIDogZnVuY3Rpb24gKCkgewogICAgICAgICQoJyNzb3VyY2VzJykuYXBwZW5kKE1VQi5uZXdMaSgpKTsKICAgICAgICB2YXIgbGkgPSAkKCcjbGknICsgTVVCLl91aWQpWzBdOwogICAgICAgICQoJ2J1dHRvblt0aXRsZT1SZW1vdmVdJywgbGkpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJCgnI3Jlc3VsdHMnKS5oaWRlKCk7CiAgICAgICAgICAgIHZhciBoYWRWYWx1ZSA9ICEhJCgnaW5wdXQnLCBsaSlbMF0udmFsdWU7CiAgICAgICAgICAgICQobGkpLnJlbW92ZSgpOwogICAgICAgIH0pOwogICAgICAgICQoJ2J1dHRvblt0aXRsZSQ9RWFybGllcl0nLCBsaSkuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKGxpKS5wcmV2KCdsaScpLmZpbmQoJ2lucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAkKCcjcmVzdWx0cycpLmhpZGUoKTsKICAgICAgICAgICAgICAgIC8vIHRoaXMgPSBwcmV2aW91cyBsaSBpbnB1dAogICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRoaXMudmFsdWU7CiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gJCgnaW5wdXQnLCBsaSkudmFsKCk7CiAgICAgICAgICAgICAgICAkKCdpbnB1dCcsIGxpKS52YWwodG1wKTsKICAgICAgICAgICAgICAgIE1VQi51cGRhdGVBbGxUZXN0TGlua3MoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgJCgnYnV0dG9uW3RpdGxlJD1MYXRlcl0nLCBsaSkuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKGxpKS5uZXh0KCdsaScpLmZpbmQoJ2lucHV0JykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAkKCcjcmVzdWx0cycpLmhpZGUoKTsKICAgICAgICAgICAgICAgIC8vIHRoaXMgPSBuZXh0IGxpIGlucHV0CiAgICAgICAgICAgICAgICB2YXIgdG1wID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSAkKCdpbnB1dCcsIGxpKS52YWwoKTsKICAgICAgICAgICAgICAgICQoJ2lucHV0JywgbGkpLnZhbCh0bXApOwogICAgICAgICAgICAgICAgTVVCLnVwZGF0ZUFsbFRlc3RMaW5rcygpOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICArK01VQi5fdWlkOwogICAgfSwKICAgIC8qKgogICAgICogSW4gdGhlIGNvbnRleHQgb2YgYSBzb3VyY2UgTEkgZWxlbWVudCwgdGhpcyB3aWxsIGFuYWx5emUgdGhlIFVSSSBpbgogICAgICogdGhlIElOUFVUIGFuZCBjaGVjayB0aGUgVVJMIG9uIHRoZSBzaXRlLgogICAgICovCiAgICBsaVVwZGF0ZVRlc3RMaW5rIDogZnVuY3Rpb24gKCkgeyAvLyBjYWxsIGluIGNvbnRleHQgb2YgbGkgZWxlbWVudAogICAgICAgIGlmICghICQoJ2lucHV0JywgdGhpcylbMF0udmFsdWUpIAogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIGxpID0gdGhpczsKICAgICAgICAkKCdzcGFuJywgdGhpcykuaHRtbCgnJyk7CiAgICAgICAgdmFyIHVybCA9IGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QgKyAnLycgKwogICAgICAgICAgICAgICAgJCgnaW5wdXQnLCB0aGlzKVswXS52YWx1ZS5yZXBsYWNlKC9eXC8vLCAnJyk7CiAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgdXJsIDogdXJsLAogICAgICAgICAgICBjb21wbGV0ZSA6IGZ1bmN0aW9uICh4aHIsIHN0YXQpIHsKICAgICAgICAgICAgICAgIGlmICgnc3VjY2VzcycgPT09IHN0YXQpCiAgICAgICAgICAgICAgICAgICAgJCgnc3BhbicsIGxpKS5odG1sKCcmI3gyNzEzOycpOwogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJCgnc3BhbicsIGxpKS5odG1sKCc8YnV0dG9uPjxiPjQwNCEgPC9iPiByZWNoZWNrPC9idXR0b24+JykKICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoJ2J1dHRvbicpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VQi5saVVwZGF0ZVRlc3RMaW5rLmNhbGwobGkpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGF0YVR5cGUgOiAndGV4dCcKICAgICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIENoZWNrIGFsbCBzb3VyY2UgVVJMcwogICAgICovCiAgICB1cGRhdGVBbGxUZXN0TGlua3MgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgnI3NvdXJjZXMgbGknKS5lYWNoKE1VQi5saVVwZGF0ZVRlc3RMaW5rKTsKICAgIH0sCiAgICAvKioKICAgICAqIEluIGEgZ2l2ZW4gYXJyYXkgb2Ygc3RyaW5ncywgZmluZCB0aGUgY2hhcmFjdGVyIHRoZXkgYWxsIGhhdmUgYXQKICAgICAqIGEgcGFydGljdWxhciBpbmRleAogICAgICogQHBhcmFtIEFycmF5IGFyciBhcnJheSBvZiBzdHJpbmdzCiAgICAgKiBAcGFyYW0gTnVtYmVyIHBvcyBpbmRleCB0byBjaGVjawogICAgICogQHJldHVybiBtaXhlZCBhIGNvbW1vbiBjaGFyIG9yICcnIGlmIGFueSBkbyBub3QgbWF0Y2gKICAgICAqLwogICAgZ2V0Q29tbW9uQ2hhckF0UG9zIDogZnVuY3Rpb24gKGFyciwgcG9zKSB7CiAgICAgICAgdmFyIGksCiAgICAgICAgICAgIGwgPSBhcnIubGVuZ3RoLAogICAgICAgICAgICBjID0gYXJyWzBdLmNoYXJBdChwb3MpOwogICAgICAgIGlmIChjID09PSAnJyB8fCBsID09PSAxKQogICAgICAgICAgICByZXR1cm4gYzsKICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbDsgKytpKQogICAgICAgICAgICBpZiAoYXJyW2ldLmNoYXJBdChwb3MpICE9PSBjKQogICAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIHJldHVybiBjOwogICAgfSwKICAgIC8qKgogICAgICogR2V0IHRoZSBzaG9ydGVzdCBVUkkgdG8gbWluaWZ5IHRoZSBzZXQgb2Ygc291cmNlIGZpbGVzCiAgICAgKiBAcGFyYW0gQXJyYXkgc291cmNlcyBVUklzCiAgICAgKi8KICAgIGdldEJlc3RVcmkgOiBmdW5jdGlvbiAoc291cmNlcykgewogICAgICAgIHZhciBwb3MgPSAwLAogICAgICAgICAgICBiYXNlID0gJycsCiAgICAgICAgICAgIGM7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgYyA9IE1VQi5nZXRDb21tb25DaGFyQXRQb3Moc291cmNlcywgcG9zKTsKICAgICAgICAgICAgaWYgKGMgPT09ICcnKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJhc2UgKz0gYzsKICAgICAgICAgICAgKytwb3M7CiAgICAgICAgfQogICAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2UoL1teXC9dKyQvLCAnJyk7CiAgICAgICAgdmFyIHVyaSA9IE1VQi5fbWluUm9vdCArICdmPScgKyBzb3VyY2VzLmpvaW4oJywnKTsKICAgICAgICBpZiAoYmFzZS5jaGFyQXQoYmFzZS5sZW5ndGggLSAxKSA9PT0gJy8nKSB7CiAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBiYXNlIGRpciEKICAgICAgICAgICAgdmFyIGJhc2VkU291cmNlcyA9IHNvdXJjZXMsCiAgICAgICAgICAgICAgICBpLAogICAgICAgICAgICAgICAgbCA9IHNvdXJjZXMubGVuZ3RoOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgKytpKSB7CiAgICAgICAgICAgICAgICBiYXNlZFNvdXJjZXNbaV0gPSBzb3VyY2VzW2ldLnN1YnN0cihiYXNlLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYmFzZSA9IGJhc2Uuc3Vic3RyKDAsIGJhc2UubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgIHZhciBiVXJpID0gTVVCLl9taW5Sb290ICsgJ2I9JyArIGJhc2UgKyAnJmY9JyArIGJhc2VkU291cmNlcy5qb2luKCcsJyk7CiAgICAgICAgICAgIC8vd2luZG93LmNvbnNvbGUgJiYgY29uc29sZS5sb2coW3VyaSwgYlVyaV0pOwogICAgICAgICAgICB1cmkgPSB1cmkubGVuZ3RoIDwgYlVyaS5sZW5ndGggPyB1cmkgOiBiVXJpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdXJpOwogICAgfSwKICAgIC8qKgogICAgICogQ3JlYXRlIHRoZSBNaW5pZnkgVVJJIGZvciB0aGUgc291cmNlcwogICAgICovCiAgICB1cGRhdGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgTVVCLnVwZGF0ZUFsbFRlc3RMaW5rcygpOwogICAgICAgIHZhciBzb3VyY2VzID0gW10sCiAgICAgICAgICAgIGV4dCA9IGZhbHNlLAogICAgICAgICAgICBmYWlsID0gZmFsc2UsCiAgICAgICAgICAgIG1hcmt1cDsKICAgICAgICAkKCcjc291cmNlcyBpbnB1dCcpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgbSwgdmFsOwogICAgICAgICAgICBpZiAoISBmYWlsICYmIHRoaXMudmFsdWUgJiYgKG0gPSB0aGlzLnZhbHVlLm1hdGNoKC9cLihjc3N8anMpJC8pKSkgewogICAgICAgICAgICAgICAgdmFyIHRoaXNFeHQgPSBtWzFdOwogICAgICAgICAgICAgICAgaWYgKGV4dCA9PT0gZmFsc2UpCiAgICAgICAgICAgICAgICAgICAgZXh0ID0gdGhpc0V4dDsgCiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzRXh0ICE9PSBleHQpIHsKICAgICAgICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxlcnQoJ2V4dGVuc2lvbnMgbXVzdCBtYXRjaCEnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnJlcGxhY2UoL15cLy8sICcnKTsKICAgICAgICAgICAgICAgIGlmICgtMSAhPT0gJC5pbkFycmF5KHRoaXMudmFsdWUsIHNvdXJjZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgZmFpbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsZXJ0KCdkdXBsaWNhdGUgZmlsZSEnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNvdXJjZXMucHVzaCh0aGlzLnZhbHVlKTsKICAgICAgICAgICAgfSAKICAgICAgICB9KTsKICAgICAgICBpZiAoZmFpbCB8fCAhIHNvdXJjZXMubGVuZ3RoKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgJCgnI2dyb3VwQ29uZmlnJykudmFsKCIgICAgJ2tleU5hbWUnID0+IGFycmF5KCcvLyIgKyBzb3VyY2VzLmpvaW4oIicsICcvLyIpICsgIicpLCIpOwogICAgICAgIHZhciB1cmkgPSBNVUIuZ2V0QmVzdFVyaShzb3VyY2VzKSwKICAgICAgICAgICAgdXJpSCA9IHVyaS5yZXBsYWNlKC88LywgJyZsdDsnKS5yZXBsYWNlKC8+LywgJyZndDsnKS5yZXBsYWNlKC8mLywgJyZhbXA7Jyk7CiAgICAgICAgJCgnI3VyaUEnKS5odG1sKHVyaUgpWzBdLmhyZWYgPSB1cmk7CiAgICAgICAgaWYgKGV4dCA9PT0gJ2pzJykgewogICAgICAgICAgICBtYXJrdXAgPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyArIHVyaUggKyAnIj48L3NjcmlwdD4nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1hcmt1cCA9ICc8bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInICsgdXJpSCArICciIC8+JzsKICAgICAgICB9CiAgICAgICAgJCgnI3VyaUh0bWwnKS52YWwobWFya3VwKTsKICAgICAgICAkKCcjcmVzdWx0cycpLnNob3coKTsKICAgIH0sCiAgICAvKioKICAgICAqIEhhbmRsZXIgZm9yIHRoZSAiQWRkIGZpbGUgKyIgYnV0dG9uCiAgICAgKi8KICAgIGFkZEJ1dHRvbkNsaWNrIDogZnVuY3Rpb24gKCkgewogICAgICAgICQoJyNyZXN1bHRzJykuaGlkZSgpOwogICAgICAgIE1VQi5hZGRMaSgpOwogICAgICAgIE1VQi51cGRhdGVBbGxUZXN0TGlua3MoKTsKICAgICAgICAkKCcjdXBkYXRlJykuc2hvdygpLmNsaWNrKE1VQi51cGRhdGUpOwogICAgICAgICQoJyNzb3VyY2VzIGxpOmxhc3QgaW5wdXQnKVswXS5mb2N1cygpOwogICAgfSwKICAgIC8qKgogICAgICogUnVucyBvbiBET01yZWFkeQogICAgICovCiAgICBpbml0IDogZnVuY3Rpb24gKCkgewogICAgICAgICQoJyNqc0RpZG50TG9hZCcpLnJlbW92ZSgpOwogICAgICAgICQoJyNhcHAnKS5zaG93KCk7CiAgICAgICAgJCgnI3NvdXJjZXMnKS5odG1sKCcnKTsKICAgICAgICAkKCcjYWRkIGJ1dHRvbicpLmNsaWNrKE1VQi5hZGRCdXR0b25DbGljayk7CiAgICAgICAgLy8gbWFrZSBlYXNpZXIgdG8gY29weSB0ZXh0IG91dCBvZgogICAgICAgICQoJyN1cmlIdG1sLCAjZ3JvdXBDb25maWcsICNzeW1saW5rT3B0JykuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLnNlbGVjdCgpOwogICAgICAgIH0pLmZvY3VzKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3QoKTsKICAgICAgICB9KTsKICAgICAgICAkKCdhLmV4dCcpLmF0dHIoe3RhcmdldDonX2JsYW5rJ30pOwogICAgICAgIGlmIChsb2NhdGlvbi5oYXNoKSB7CiAgICAgICAgICAgIC8vIG1ha2UgbGlua3Mgb3V0IG9mIFVSSXMgZnJvbSBib29rbWFya2xldAogICAgICAgICAgICAkKCcjZ2V0Qm0nKS5oaWRlKCk7CiAgICAgICAgICAgIHZhciBpID0gMCwgZm91bmQgPSBsb2NhdGlvbi5oYXNoLnN1YnN0cigxKS5zcGxpdCgnLCcpLCBsID0gZm91bmQubGVuZ3RoOwogICAgICAgICAgICAkKCcjYm1VcmlzJykuaHRtbCgnPHA+PHN0cm9uZz5Gb3VuZCBieSBib29rbWFya2xldDo8L3N0cm9uZz4gLzwvcD4nKTsKICAgICAgICAgICAgdmFyICRwID0gJCgnI2JtVXJpcyBwJyk7CiAgICAgICAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICAgICAkcC5hcHBlbmQoJCgnPGEgaHJlZj0jPjwvYT4nKS50ZXh0KGZvdW5kW2ldKVswXSk7CiAgICAgICAgICAgICAgICBpZiAoaSA8IChsIC0gMSkpIHsKICAgICAgICAgICAgICAgICAgICAkcC5hcHBlbmQoJywgLycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICQoJyNibVVyaXMgYScpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIE1VQi5hZGRCdXR0b25DbGljaygpOwogICAgICAgICAgICAgICAgJCgnI3NvdXJjZXMgbGk6bGFzdCBpbnB1dCcpLnZhbCh0aGlzLmlubmVySFRNTCk7CiAgICAgICAgICAgICAgICBNVUIubGlVcGRhdGVUZXN0TGluay5jYWxsKCQoJyNzb3VyY2VzIGxpOmxhc3QnKVswXSk7CiAgICAgICAgICAgICAgICAkKCcjcmVzdWx0cycpLmhpZGUoKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSkuYXR0cih7dGl0bGU6J0FkZCBmaWxlICsnfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gc2V0dXAgYm9va21hcmtsZXQgMQogICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgdXJsIDogJy4uLz9mPScgKyBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cL1teXC9dKiQvLCAnL2JtLmpzJykuc3Vic3RyKDEpLAogICAgICAgICAgICAgICAgc3VjY2VzcyA6IGZ1bmN0aW9uIChjb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2JtJylbMF0uaHJlZiA9IGNvZGUKICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJyVCVUlMREVSX1VSTCUnLCBsb2NhdGlvbi5ocmVmKQogICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXG4vZywgJyAnKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBkYXRhVHlwZSA6ICd0ZXh0JwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCQuYnJvd3Nlci5tc2llKSB7CiAgICAgICAgICAgICAgICAkKCcjZ2V0Qm0gcDpsYXN0JykuYXBwZW5kKCcgU29ycnksIG5vdCBzdXBwb3J0ZWQgaW4gTVNJRSEnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBNVUIuYWRkQnV0dG9uQ2xpY2soKTsKICAgICAgICB9CiAgICAgICAgLy8gc2V0dXAgYm9va21hcmtsZXQgMgogICAgICAgICQuYWpheCh7CiAgICAgICAgICAgIHVybCA6ICcuLi8/Zj0nICsgbG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXC9bXlwvXSokLywgJy9ibTIuanMnKS5zdWJzdHIoMSksCiAgICAgICAgICAgIHN1Y2Nlc3MgOiBmdW5jdGlvbiAoY29kZSkgewogICAgICAgICAgICAgICAgJCgnI2JtMicpWzBdLmhyZWYgPSBjb2RlLnJlcGxhY2UoL1xuL2csICcgJyk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRhdGFUeXBlIDogJ3RleHQnCiAgICAgICAgfSk7CiAgICAgICAgTVVCLmNoZWNrUmV3cml0ZSgpOwogICAgfQp9OwokKE1VQi5pbml0KTsK]]></data>
	</file>
	<file>
	  <filename>/min/config-test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBhcHBsaWVkIHdoZW4gdGhlIHZhcmlhYmxlICJ0ZXN0IiBpcyBhZGRlZCB0byB0aGUgcXVlcnlzdHJpbmcuCiAqCiAqIFRvIHRlc3QgY29uZmlnIG9wdGlvbnMsIHBsYWNlIHRoZW0gaW4gdGhpcyBmaWxlIGFuZCBhZGQgIiZ0ZXN0IiB0byB5b3VyIE1pbmlmeSBVUkwuCiAqIE5vdGUgdGhhdCBpZiB0aGlzIGlzIG9uIGEgcHVibGljIHNlcnZlciwgYW55b25lIGNhbiBleGVjdXRlIHlvdXIgdGVzdC4KICogCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KCg==]]></data>
	</file>
	<file>
	  <filename>/min/config.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENvbmZpZ3VyYXRpb24gZm9yICJtaW4iLCB0aGUgZGVmYXVsdCBhcHBsaWNhdGlvbiBidWlsdCB3aXRoIHRoZSBNaW5pZnkKICogbGlicmFyeQogKiAKICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKCi8qKgogKiBBbGxvdyB1c2Ugb2YgdGhlIE1pbmlmeSBVUkkgQnVpbGRlciBhcHAuIE9ubHkgc2V0IHRoaXMgdG8gdHJ1ZSB3aGlsZSB5b3UgbmVlZCBpdC4KICovCiRtaW5fZW5hYmxlQnVpbGRlciA9IHRydWU7CgovKioKICogSWYgbm9uLWVtcHR5LCB0aGUgQnVpbGRlciB3aWxsIGJlIHByb3RlY3RlZCB3aXRoIEhUVFAgRGlnZXN0IGF1dGguCiAqIFRoZSB1c2VybmFtZSBpcyAiYWRtaW4iLgogKi8KJG1pbl9idWlsZGVyUGFzc3dvcmQgPSAnJzsKCgovKioKICogU2V0IHRvIHRydWUgdG8gbG9nIG1lc3NhZ2VzIHRvIEZpcmVQSFAgKEZpcmVmb3ggRmlyZWJ1ZyBhZGRvbikuCiAqIFNldCB0byBmYWxzZSBmb3Igbm8gZXJyb3IgbG9nZ2luZyAoTWluaWZ5IG1heSBiZSBzbGlnaHRseSBmYXN0ZXIpLgogKiBAbGluayBodHRwOi8vd3d3LmZpcmVwaHAub3JnLwogKgogKiBJZiB5b3Ugd2FudCB0byB1c2UgYSBjdXN0b20gZXJyb3IgbG9nZ2VyLCBzZXQgdGhpcyB0byB5b3VyIGxvZ2dlcgogKiBpbnN0YW5jZS4gWW91ciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBtZXRob2QgbG9nKHN0cmluZyAkbWVzc2FnZSkuCiAqLwokbWluX2Vycm9yTG9nZ2VyID0gZmFsc2U7CgoKLyoqCiAqIFRvIGFsbG93IGRlYnVnIG1vZGUgb3V0cHV0LCB5b3UgbXVzdCBzZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZS4KICoKICogT25jZSB0cnVlLCB5b3UgY2FuIHNlbmQgdGhlIGNvb2tpZSBtaW5EZWJ1ZyB0byByZXF1ZXN0IGRlYnVnIG1vZGUgb3V0cHV0LiBUaGUKICogY29va2llIHZhbHVlIHNob3VsZCBtYXRjaCB0aGUgVVJJcyB5b3UnZCBsaWtlIHRvIGRlYnVnLiBFLmcuIHRvIGRlYnVnCiAqIC9taW4vZj1maWxlMS5qcyBzZW5kIHRoZSBjb29raWUgbWluRGVidWc9ZmlsZTEuanMKICogWW91IGNhbiBtYW51YWxseSBlbmFibGUgZGVidWdnaW5nIGJ5IGFwcGVuZGluZyAiJmRlYnVnIiB0byBhIFVSSS4KICogRS5nLiAvbWluLz9mPXNjcmlwdDEuanMsc2NyaXB0Mi5qcyZkZWJ1ZwogKiAKICogSW4gJ2RlYnVnJyBtb2RlLCBNaW5pZnkgY29tYmluZXMgZmlsZXMgd2l0aCBubyBtaW5pZmljYXRpb24gYW5kIGFkZHMgY29tbWVudHMKICogdG8gaW5kaWNhdGUgbGluZSAjcyBvZiB0aGUgb3JpZ2luYWwgZmlsZXMuCiAqLwokbWluX2FsbG93RGVidWdGbGFnID0gZmFsc2U7CgoKLyoqCiAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBzcGVjaWZ5IHlvdXIgdGVtcCBkaXJlY3RvcnkgaGVyZS4gT3RoZXJ3aXNlIE1pbmlmeQogKiB3aWxsIGhhdmUgdG8gbG9hZCBleHRyYSBjb2RlIHRvIGd1ZXNzLiBTb21lIGV4YW1wbGVzIGJlbG93OgogKi8KLy8kbWluX2NhY2hlUGF0aCA9ICdjOlxcV0lORE9XU1xcVGVtcCc7Ci8vJG1pbl9jYWNoZVBhdGggPSAnL3RtcCc7Ci8vJG1pbl9jYWNoZVBhdGggPSBwcmVnX3JlcGxhY2UoJy9eXFxkKzsvJywgJycsIHNlc3Npb25fc2F2ZV9wYXRoKCkpOwokbWluX2NhY2hlUGF0aCA9IGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKSkpLicvdG1wL2NhY2hlJzsKCi8qKgogKiBUbyB1c2UgQVBDL01lbWNhY2hlL1plbmRQbGF0Zm9ybSBmb3IgY2FjaGUgc3RvcmFnZSwgcmVxdWlyZSB0aGUgY2xhc3MgYW5kCiAqIHNldCAkbWluX2NhY2hlUGF0aCB0byBhbiBpbnN0YW5jZS4gRXhhbXBsZSBiZWxvdzoKICovCi8vcmVxdWlyZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvbGliL01pbmlmeS9DYWNoZS9BUEMucGhwJzsKLy8kbWluX2NhY2hlUGF0aCA9IG5ldyBNaW5pZnlfQ2FjaGVfQVBDKCk7CiNyZXF1aXJlX29uY2UgZGlybmFtZShfX0ZJTEVfXykuJy9saWIvTWluaWZ5L0NhY2hlL1hDYWNoZS5waHAnOwojJG1pbl9jYWNoZVBhdGggPSBuZXcgTWluaWZ5X0NhY2hlX1hDYWNoZSgpOwoKCi8qKgogKiBMZWF2ZSBhbiBlbXB0eSBzdHJpbmcgdG8gdXNlIFBIUCdzICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uCiAqCiAqIE9uIHNvbWUgc2VydmVycywgdGhpcyB2YWx1ZSBtYXkgYmUgbWlzY29uZmlndXJlZCBvciBtaXNzaW5nLiBJZiBzbywgc2V0IHRoaXMgCiAqIHRvIHlvdXIgZnVsbCBkb2N1bWVudCByb290IHBhdGggd2l0aCBubyB0cmFpbGluZyBzbGFzaC4KICogRS5nLiAnL2hvbWUvYWNjb3VudG5hbWUvcHVibGljX2h0bWwnIG9yICdjOlxceGFtcHBcXGh0ZG9jcycKICoKICogSWYgL21pbi8gaXMgZGlyZWN0bHkgaW5zaWRlIHlvdXIgZG9jdW1lbnQgcm9vdCwganVzdCB1bmNvbW1lbnQgdGhlIAogKiBzZWNvbmQgbGluZS4gVGhlIHRoaXJkIGxpbmUgbWlnaHQgd29yayBvbiBzb21lIEFwYWNoZSBzZXJ2ZXJzLgogKi8KJG1pbl9kb2N1bWVudFJvb3QgPSAnJzsKLy8kbWluX2RvY3VtZW50Um9vdCA9IHN1YnN0cihfX0ZJTEVfXywgMCwgLTE1KTsKLy8kbWluX2RvY3VtZW50Um9vdCA9ICRfU0VSVkVSWydTVUJET01BSU5fRE9DVU1FTlRfUk9PVCddOwoKCi8qKgogKiBDYWNoZSBmaWxlIGxvY2tpbmcuIFNldCB0byBmYWxzZSBpZiBmaWxlc3lzdGVtIGlzIE5GUy4gT24gYXQgbGVhc3Qgb25lIAogKiBORlMgc3lzdGVtIGZsb2NrLWluZyBhdHRlbXB0cyBzdGFsbGVkIFBIUCBmb3IgMzAgc2Vjb25kcyEKICovCiRtaW5fY2FjaGVGaWxlTG9ja2luZyA9IHRydWU7CgoKLyoqCiAqIENvbWJpbmluZyBtdWx0aXBsZSBDU1MgZmlsZXMgY2FuIHBsYWNlIEBpbXBvcnQgZGVjbGFyYXRpb25zIGFmdGVyIHJ1bGVzLCB3aGljaAogKiBpcyBpbnZhbGlkLiBNaW5pZnkgd2lsbCBhdHRlbXB0IHRvIGRldGVjdCB3aGVuIHRoaXMgaGFwcGVucyBhbmQgcGxhY2UgYQogKiB3YXJuaW5nIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgQ1NTIG91dHB1dC4gVG8gcmVzb2x2ZSB0aGlzIHlvdSBjYW4gZWl0aGVyIAogKiBtb3ZlIHRoZSBAaW1wb3J0cyB3aXRoaW4geW91ciBDU1MgZmlsZXMsIG9yIGVuYWJsZSB0aGlzIG9wdGlvbiwgd2hpY2ggd2lsbCAKICogbW92ZSBhbGwgQGltcG9ydHMgdG8gdGhlIHRvcCBvZiB0aGUgb3V0cHV0LiBOb3RlIHRoYXQgbW92aW5nIEBpbXBvcnRzIGNvdWxkIAogKiBhZmZlY3QgQ1NTIHZhbHVlcyAod2hpY2ggaXMgd2h5IHRoaXMgb3B0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQpLgogKi8KJG1pbl9zZXJ2ZU9wdGlvbnNbJ2J1YmJsZUNzc0ltcG9ydHMnXSA9IGZhbHNlOwoKCi8qKgogKiBDYWNoZS1Db250cm9sOiBtYXgtYWdlIHZhbHVlIHNlbnQgdG8gYnJvd3NlciAoaW4gc2Vjb25kcykuIEFmdGVyIHRoaXMgcGVyaW9kLAogKiB0aGUgYnJvd3NlciB3aWxsIHNlbmQgYW5vdGhlciBjb25kaXRpb25hbCBHRVQuIFVzZSBhIGxvbmdlciBwZXJpb2QgZm9yIGxvd2VyCiAqIHRyYWZmaWMgYnV0IHlvdSBtYXkgd2FudCB0byBzaG9ydGVuIHRoaXMgYmVmb3JlIG1ha2luZyBjaGFuZ2VzIGlmIGl0J3MgY3J1Y2lhbAogKiB0aG9zZSBjaGFuZ2VzIGFyZSBzZWVuIGltbWVkaWF0ZWx5LgogKgogKiBOb3RlOiBEZXNwaXRlIHRoaXMgc2V0dGluZywgaWYgeW91IGluY2x1ZGUgYSBudW1iZXIgYXQgdGhlIGVuZCBvZiB0aGUKICogcXVlcnlzdHJpbmcsIG1heEFnZSB3aWxsIGJlIHNldCB0byBvbmUgeWVhci4gRS5nLiAvbWluL2Y9aGVsbG8uY3NzJjEyMzQ1NgogKi8KJG1pbl9zZXJ2ZU9wdGlvbnNbJ21heEFnZSddID0gMTgwMDsKCgovKioKICogVG8gdXNlIEdvb2dsZSdzIENsb3N1cmUgQ29tcGlsZXIgQVBJIHRvIG1pbmlmeSBKYXZhc2NyaXB0IChmYWxsaW5nIGJhY2sgdG8gSlNNaW4KICogb24gZmFpbHVyZSksIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmU6CiAqLwovLyRtaW5fc2VydmVPcHRpb25zWydtaW5pZmllcnMnXVsnYXBwbGljYXRpb24veC1qYXZhc2NyaXB0J10gPSBhcnJheSgnTWluaWZ5X0pTX0Nsb3N1cmVDb21waWxlcicsICdtaW5pZnknKTsKCgovKioKICogSWYgeW91J2QgbGlrZSB0byByZXN0cmljdCB0aGUgImYiIG9wdGlvbiB0byBmaWxlcyB3aXRoaW4vYmVsb3cKICogcGFydGljdWxhciBkaXJlY3RvcmllcyBiZWxvdyBET0NVTUVOVF9ST09ULCBzZXQgdGhpcyBoZXJlLgogKiBZb3Ugd2lsbCBzdGlsbCBuZWVkIHRvIGluY2x1ZGUgdGhlIGRpcmVjdG9yeSBpbiB0aGUKICogZiBvciBiIEdFVCBwYXJhbWV0ZXJzLgogKiAKICogLy8gPSBzaG9ydGN1dCBmb3IgRE9DVU1FTlRfUk9PVCAKICovCi8vJG1pbl9zZXJ2ZU9wdGlvbnNbJ21pbkFwcCddWydhbGxvd0RpcnMnXSA9IGFycmF5KCcvL2pzJywgJy8vY3NzJyk7CgovKioKICogU2V0IHRvIHRydWUgdG8gZGlzYWJsZSB0aGUgImYiIEdFVCBwYXJhbWV0ZXIgZm9yIHNwZWNpZnlpbmcgZmlsZXMuCiAqIE9ubHkgdGhlICJnIiBwYXJhbWV0ZXIgd2lsbCBiZSBjb25zaWRlcmVkLgogKi8KJG1pbl9zZXJ2ZU9wdGlvbnNbJ21pbkFwcCddWydncm91cHNPbmx5J10gPSBmYWxzZTsKCgovKioKICogQnkgZGVmYXVsdCwgTWluaWZ5IHdpbGwgbm90IG1pbmlmeSBmaWxlcyB3aXRoIG5hbWVzIGNvbnRhaW5pbmcgLm1pbiBvciAtbWluCiAqIGJlZm9yZSB0aGUgZXh0ZW5zaW9uLiBFLmcuIG15RmlsZS5taW4uanMgd2lsbCBub3QgYmUgcHJvY2Vzc2VkIGJ5IEpTTWluCiAqIAogKiBUbyBtaW5pZnkgYWxsIGZpbGVzLCBzZXQgdGhpcyBvcHRpb24gdG8gbnVsbC4gWW91IGNvdWxkIGFsc28gc3BlY2lmeSB5b3VyCiAqIG93biBwYXR0ZXJuIHRoYXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBmaWxlbmFtZS4KICovCi8vJG1pbl9zZXJ2ZU9wdGlvbnNbJ21pbkFwcCddWydub01pblBhdHRlcm4nXSA9ICdAWy1cXC5dbWluXFwuKD86anN8Y3NzKSRAaSc7CgoKLyoqCiAqIElmIHlvdSBtaW5pZnkgQ1NTIGZpbGVzIHN0b3JlZCBpbiBzeW1saW5rLWVkIGRpcmVjdG9yaWVzLCB0aGUgVVJJIHJld3JpdGluZwogKiBhbGdvcml0aG0gY2FuIGZhaWwuIFRvIHByZXZlbnQgdGhpcywgcHJvdmlkZSBhbiBhcnJheSBvZiBsaW5rIHBhdGhzIHRvCiAqIHRhcmdldCBwYXRocywgd2hlcmUgdGhlIGxpbmsgcGF0aHMgYXJlIHdpdGhpbiB0aGUgZG9jdW1lbnQgcm9vdC4KICogCiAqIEJlY2F1c2UgcGF0aHMgbmVlZCB0byBiZSBub3JtYWxpemVkIGZvciB0aGlzIHRvIHdvcmssIHVzZSAiLy8iIHRvIHN1YnN0aXR1dGUgCiAqIHRoZSBkb2Mgcm9vdCBpbiB0aGUgbGluayBwYXRocyAodGhlIGFycmF5IGtleXMpLiBFLmcuOgogKiA8Y29kZT4KICogYXJyYXkoJy8vc3ltbGluaycgPT4gJy9yZWFsL3RhcmdldC9wYXRoJykgLy8gdW5peAogKiBhcnJheSgnLy9zdGF0aWMnID0+ICdEOlxcc3RhdGljU3RvcmFnZScpICAvLyBXaW5kb3dzCiAqIDwvY29kZT4KICovCiRtaW5fc3ltbGlua3MgPSBhcnJheSgpOwoKCi8qKgogKiBJZiB5b3UgdXBsb2FkIGZpbGVzIGZyb20gV2luZG93cyB0byBhIG5vbi1XaW5kb3dzIHNlcnZlciwgV2luZG93cyBtYXkgcmVwb3J0CiAqIGluY29ycmVjdCBtdGltZXMgZm9yIHRoZSBmaWxlcy4gVGhpcyBtYXkgY2F1c2UgTWluaWZ5IHRvIGtlZXAgc2VydmluZyBzdGFsZSAKICogY2FjaGUgZmlsZXMgd2hlbiBzb3VyY2UgZmlsZSBjaGFuZ2VzIGFyZSBtYWRlIHRvbyBmcmVxdWVudGx5IChlLmcuIG1vcmUgdGhhbgogKiBvbmNlIGFuIGhvdXIpLgogKiAKICogSW1tZWRpYXRlbHkgYWZ0ZXIgbW9kaWZ5aW5nIGFuZCB1cGxvYWRpbmcgYSBmaWxlLCB1c2UgdGhlIHRvdWNoIGNvbW1hbmQgdG8gCiAqIHVwZGF0ZSB0aGUgbXRpbWUgb24gdGhlIHNlcnZlci4gSWYgdGhlIG10aW1lIGp1bXBzIGFoZWFkIGJ5IGEgbnVtYmVyIG9mIGhvdXJzLAogKiBzZXQgdGhpcyB2YXJpYWJsZSB0byB0aGF0IG51bWJlci4gSWYgdGhlIG10aW1lIG1vdmVzIGJhY2ssIHRoaXMgc2hvdWxkIG5vdCBiZSAKICogbmVlZGVkLgogKgogKiBJbiB0aGUgV2luZG93cyBTRlRQIGNsaWVudCBXaW5TQ1AsIHRoZXJlJ3MgYW4gb3B0aW9uIHRoYXQgbWF5IGZpeCB0aGlzIAogKiBpc3N1ZSB3aXRob3V0IGNoYW5naW5nIHRoZSB2YXJpYWJsZSBiZWxvdy4gVW5kZXIgbG9naW4gPiBlbnZpcm9ubWVudCwgCiAqIHNlbGVjdCB0aGUgb3B0aW9uICJBZGp1c3QgcmVtb3RlIHRpbWVzdGFtcCB3aXRoIERTVCIuCiAqIEBsaW5rIGh0dHA6Ly93aW5zY3AubmV0L2VuZy9kb2NzL3VpX2xvZ2luX2Vudmlyb25tZW50I2RheWxpZ2h0X3NhdmluZ190aW1lCiAqLwokbWluX3VwbG9hZGVySG91cnNCZWhpbmQgPSAwOwoKCi8qKgogKiBQYXRoIHRvIE1pbmlmeSdzIGxpYiBmb2xkZXIuIElmIHlvdSBoYXBwZW4gdG8gbW92ZSBpdCwgY2hhbmdlIAogKiB0aGlzIGFjY29yZGluZ2x5LgogKi8KJG1pbl9saWJQYXRoID0gZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYic7CgoKLy8gdHJ5IHRvIGRpc2FibGUgb3V0cHV0X2NvbXByZXNzaW9uIChtYXkgbm90IGhhdmUgYW4gZWZmZWN0KQppbmlfc2V0KCd6bGliLm91dHB1dF9jb21wcmVzc2lvbicsICcwJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/min/groupsConfig.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEdyb3VwcyBjb25maWd1cmF0aW9uIGZvciBkZWZhdWx0IE1pbmlmeSBpbXBsZW1lbnRhdGlvbgogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKiogCiAqIFlvdSBtYXkgd2lzaCB0byB1c2UgdGhlIE1pbmlmeSBVUkkgQnVpbGRlciBhcHAgdG8gc3VnZ2VzdAogKiBjaGFuZ2VzLiBodHRwOi8veW91cmRvbWFpbi9taW4vYnVpbGRlci8KICoKICogU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9taW5pZnkvd2lraS9DdXN0b21Tb3VyY2UgZm9yIG90aGVyIGlkZWFzCiAqKi8KCnJldHVybiBhcnJheSgKICAgIC8vICdqcycgPT4gYXJyYXkoJy8vanMvZmlsZTEuanMnLCAnLy9qcy9maWxlMi5qcycpLAogICAgLy8gJ2NzcycgPT4gYXJyYXkoJy8vY3NzL2ZpbGUxLmNzcycsICcvL2Nzcy9maWxlMi5jc3MnKSwKKTs=]]></data>
	</file>
	<file>
	  <filename>/min/index.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEZyb250IGNvbnRyb2xsZXIgZm9yIGRlZmF1bHQgTWluaWZ5IGltcGxlbWVudGF0aW9uCiAqIAogKiBETyBOT1QgRURJVCEgQ29uZmlndXJlIHRoaXMgdXRpbGl0eSB2aWEgY29uZmlnLnBocCBhbmQgZ3JvdXBzQ29uZmlnLnBocAogKiAKICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKZGVmaW5lKCdNSU5JRllfTUlOX0RJUicsIGRpcm5hbWUoX19GSUxFX18pKTsKCi8vIGxvYWQgY29uZmlnCnJlcXVpcmUgTUlOSUZZX01JTl9ESVIgLiAnL2NvbmZpZy5waHAnOwoKaWYgKGlzc2V0KCRfR0VUWyd0ZXN0J10pKSB7CiAgICBpbmNsdWRlIE1JTklGWV9NSU5fRElSIC4gJy9jb25maWctdGVzdC5waHAnOwp9CgpyZXF1aXJlICIkbWluX2xpYlBhdGgvTWluaWZ5L0xvYWRlci5waHAiOwpNaW5pZnlfTG9hZGVyOjpyZWdpc3RlcigpOwoKTWluaWZ5OjokdXBsb2FkZXJIb3Vyc0JlaGluZCA9ICRtaW5fdXBsb2FkZXJIb3Vyc0JlaGluZDsKTWluaWZ5OjpzZXRDYWNoZSgKICAgIGlzc2V0KCRtaW5fY2FjaGVQYXRoKSA/ICRtaW5fY2FjaGVQYXRoIDogJycKICAgICwkbWluX2NhY2hlRmlsZUxvY2tpbmcKKTsKCmlmICgkbWluX2RvY3VtZW50Um9vdCkgewogICAgJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSA9ICRtaW5fZG9jdW1lbnRSb290OwogICAgTWluaWZ5OjokaXNEb2NSb290U2V0ID0gdHJ1ZTsKfQoKJG1pbl9zZXJ2ZU9wdGlvbnNbJ21pbmlmaWVyT3B0aW9ucyddWyd0ZXh0L2NzcyddWydzeW1saW5rcyddID0gJG1pbl9zeW1saW5rczsKLy8gYXV0by1hZGQgdGFyZ2V0cyB0byBhbGxvd0RpcnMKZm9yZWFjaCAoJG1pbl9zeW1saW5rcyBhcyAkdXJpID0+ICR0YXJnZXQpIHsKICAgICRtaW5fc2VydmVPcHRpb25zWydtaW5BcHAnXVsnYWxsb3dEaXJzJ11bXSA9ICR0YXJnZXQ7Cn0KCmlmICgkbWluX2FsbG93RGVidWdGbGFnKSB7CiAgICAkbWluX3NlcnZlT3B0aW9uc1snZGVidWcnXSA9IE1pbmlmeV9EZWJ1Z0RldGVjdG9yOjpzaG91bGREZWJ1Z1JlcXVlc3QoJF9DT09LSUUsICRfR0VULCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSk7Cn0KCmlmICgkbWluX2Vycm9yTG9nZ2VyKSB7CiAgICBpZiAodHJ1ZSA9PT0gJG1pbl9lcnJvckxvZ2dlcikgewogICAgICAgICRtaW5fZXJyb3JMb2dnZXIgPSBGaXJlUEhQOjpnZXRJbnN0YW5jZSh0cnVlKTsKICAgIH0KICAgIE1pbmlmeV9Mb2dnZXI6OnNldExvZ2dlcigkbWluX2Vycm9yTG9nZ2VyKTsKfQoKLy8gY2hlY2sgZm9yIFVSSSB2ZXJzaW9uaW5nCmlmIChwcmVnX21hdGNoKCcvJlxcZC8nLCAkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10pKSB7CiAgICAkbWluX3NlcnZlT3B0aW9uc1snbWF4QWdlJ10gPSAzMTUzNjAwMDsKfQppZiAoaXNzZXQoJF9HRVRbJ2cnXSkpIHsKICAgIC8vIHdlbGwgbmVlZCBncm91cHMgY29uZmlnCiAgICAkbWluX3NlcnZlT3B0aW9uc1snbWluQXBwJ11bJ2dyb3VwcyddID0gKHJlcXVpcmUgTUlOSUZZX01JTl9ESVIgLiAnL2dyb3Vwc0NvbmZpZy5waHAnKTsKfQppZiAoaXNzZXQoJF9HRVRbJ2YnXSkgfHwgaXNzZXQoJF9HRVRbJ2cnXSkpIHsKICAgIC8vIHNlcnZlISAgIAoKICAgIGlmICghIGlzc2V0KCRtaW5fc2VydmVDb250cm9sbGVyKSkgewogICAgICAgICRtaW5fc2VydmVDb250cm9sbGVyID0gbmV3IE1pbmlmeV9Db250cm9sbGVyX01pbkFwcCgpOwogICAgfQogICAgTWluaWZ5OjpzZXJ2ZSgkbWluX3NlcnZlQ29udHJvbGxlciwgJG1pbl9zZXJ2ZU9wdGlvbnMpOwogICAgICAgIAp9IGVsc2VpZiAoJG1pbl9lbmFibGVCdWlsZGVyKSB7CiAgICBoZWFkZXIoJ0xvY2F0aW9uOiBidWlsZGVyLycpOwogICAgZXhpdCgpOwp9IGVsc2UgewogICAgaGVhZGVyKCJMb2NhdGlvbjogLyIpOwogICAgZXhpdCgpOwp9]]></data>
	</file>
	<file>
	  <filename>/min/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/CSSmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qIQogKiBjc3NtaW4ucGhwIHJldiA5MWM1ZWE1CiAqIEF1dGhvcjogVHViYWwgTWFydGluIC0gaHR0cDovL2Jsb2cubWFyZ2Vubi5jb20vCiAqIFJlcG86IGh0dHBzOi8vZ2l0aHViLmNvbS90dWJhbG1hcnRpbi9ZVUktQ1NTLWNvbXByZXNzb3ItUEhQLXBvcnQKICoKICogVGhpcyBpcyBhIFBIUCBwb3J0IG9mIHRoZSBKYXZhc2NyaXB0IHBvcnQgb2YgdGhlIENTUyBtaW5pZmljYXRpb24gdG9vbAogKiBkaXN0cmlidXRlZCB3aXRoIFlVSUNvbXByZXNzb3IsIGl0c2VsZiBhIHBvcnQgb2YgdGhlIGNzc21pbiB1dGlsaXR5IGJ5CiAqIElzYWFjIFNjaGx1ZXRlciAtIGh0dHA6Ly9mb29oYWNrLmNvbS8KICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UgdGhlIFBIUCB2ZXJzaW9uIHVuZGVyIHRoZSBzYW1lCiAqIGNvbmRpdGlvbnMgYXMgdGhlIFlVSUNvbXByZXNzb3IuCiAqLwoKLyohCiAqIFlVSSBDb21wcmVzc29yCiAqIGh0dHA6Ly9kZXZlbG9wZXIueWFob28uY29tL3l1aS9jb21wcmVzc29yLwogKiBBdXRob3I6IEp1bGllbiBMZWNvbXRlIC0gaHR0cDovL3d3dy5qdWxpZW5sZWNvbXRlLm5ldC8KICogQ29weXJpZ2h0IChjKSAyMDExIFlhaG9vISBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoZSBjb3B5cmlnaHRzIGVtYm9kaWVkIGluIHRoZSBjb250ZW50IG9mIHRoaXMgZmlsZSBhcmUgbGljZW5zZWQKICogYnkgWWFob28hIEluYy4gdW5kZXIgdGhlIEJTRCAocmV2aXNlZCkgb3BlbiBzb3VyY2UgbGljZW5zZS4KICovCgpjbGFzcyBDU1NtaW4KewogICAgY29uc3QgTkwgPSAnX19fWVVJQ1NTTUlOX1BSRVNFUlZFRF9OTF9fXyc7CiAgICBjb25zdCBUT0tFTiA9ICdfX19ZVUlDU1NNSU5fUFJFU0VSVkVEX1RPS0VOXyc7CiAgICBjb25zdCBDT01NRU5UID0gJ19fX1lVSUNTU01JTl9QUkVTRVJWRV9DQU5ESURBVEVfQ09NTUVOVF8nOwogICAgY29uc3QgQ0xBU1NDT0xPTiA9ICdfX19ZVUlDU1NNSU5fUFNFVURPQ0xBU1NDT0xPTl9fXyc7CgogICAgcHJpdmF0ZSAkY29tbWVudHM7CiAgICBwcml2YXRlICRwcmVzZXJ2ZWRfdG9rZW5zOwogICAgcHJpdmF0ZSAkbWVtb3J5X2xpbWl0OwogICAgcHJpdmF0ZSAkbWF4X2V4ZWN1dGlvbl90aW1lOwogICAgcHJpdmF0ZSAkcGNyZV9iYWNrdHJhY2tfbGltaXQ7CiAgICBwcml2YXRlICRwY3JlX3JlY3Vyc2lvbl9saW1pdDsKICAgIHByaXZhdGUgJHJhaXNlX3BocF9saW1pdHM7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbHxpbnQgJHJhaXNlX3BocF9saW1pdHMKICAgICAqIElmIHRydWUsIFBIUCBzZXR0aW5ncyB3aWxsIGJlIHJhaXNlZCBpZiBuZWVkZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyYWlzZV9waHBfbGltaXRzID0gVFJVRSkKICAgIHsKICAgICAgICAvLyBTZXQgc3VnZ2VzdGVkIFBIUCBsaW1pdHMKICAgICAgICAkdGhpcy0+bWVtb3J5X2xpbWl0ID0gMTI4ICogMTA0ODU3NjsgLy8gMTI4TUIgaW4gYnl0ZXMKICAgICAgICAkdGhpcy0+bWF4X2V4ZWN1dGlvbl90aW1lID0gNjA7IC8vIDEgbWluCiAgICAgICAgJHRoaXMtPnBjcmVfYmFja3RyYWNrX2xpbWl0ID0gMTAwMCAqIDEwMDA7CiAgICAgICAgJHRoaXMtPnBjcmVfcmVjdXJzaW9uX2xpbWl0ID0gIDUwMCAqIDEwMDA7CgogICAgICAgICR0aGlzLT5yYWlzZV9waHBfbGltaXRzID0gKGJvb2wpICRyYWlzZV9waHBfbGltaXRzOwogICAgfQoKICAgIC8qKgogICAgICogTWluaWZ5IGEgc3RyaW5nIG9mIENTUwogICAgICogQHBhcmFtIHN0cmluZyAkY3NzCiAgICAgKiBAcGFyYW0gaW50fGJvb2wgJGxpbmVicmVha19wb3MKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBydW4oJGNzcyA9ICcnLCAkbGluZWJyZWFrX3BvcyA9IEZBTFNFKQogICAgewogICAgICAgIGlmIChlbXB0eSgkY3NzKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPnJhaXNlX3BocF9saW1pdHMpIHsKICAgICAgICAgICAgJHRoaXMtPmRvX3JhaXNlX3BocF9saW1pdHMoKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jb21tZW50cyA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPnByZXNlcnZlZF90b2tlbnMgPSBhcnJheSgpOwoKICAgICAgICAkc3RhcnRfaW5kZXggPSAwOwogICAgICAgICRsZW5ndGggPSBzdHJsZW4oJGNzcyk7CgogICAgICAgICRjc3MgPSAkdGhpcy0+ZXh0cmFjdF9kYXRhX3VybHMoJGNzcyk7CgogICAgICAgIC8vIGNvbGxlY3QgYWxsIGNvbW1lbnQgYmxvY2tzLi4uCiAgICAgICAgd2hpbGUgKCgkc3RhcnRfaW5kZXggPSAkdGhpcy0+aW5kZXhfb2YoJGNzcywgJy8qJywgJHN0YXJ0X2luZGV4KSkgPj0gMCkgewogICAgICAgICAgICAkZW5kX2luZGV4ID0gJHRoaXMtPmluZGV4X29mKCRjc3MsICcqLycsICRzdGFydF9pbmRleCArIDIpOwogICAgICAgICAgICBpZiAoJGVuZF9pbmRleCA8IDApIHsKICAgICAgICAgICAgICAgICRlbmRfaW5kZXggPSAkbGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb21tZW50X2ZvdW5kID0gJHRoaXMtPnN0cl9zbGljZSgkY3NzLCAkc3RhcnRfaW5kZXggKyAyLCAkZW5kX2luZGV4KTsKICAgICAgICAgICAgJHRoaXMtPmNvbW1lbnRzW10gPSAkY29tbWVudF9mb3VuZDsKICAgICAgICAgICAgJGNvbW1lbnRfcHJlc2VydmVfc3RyaW5nID0gc2VsZjo6Q09NTUVOVCAuIChjb3VudCgkdGhpcy0+Y29tbWVudHMpIC0gMSkgLiAnX19fJzsKICAgICAgICAgICAgJGNzcyA9ICR0aGlzLT5zdHJfc2xpY2UoJGNzcywgMCwgJHN0YXJ0X2luZGV4ICsgMikgLiAkY29tbWVudF9wcmVzZXJ2ZV9zdHJpbmcgLiAkdGhpcy0+c3RyX3NsaWNlKCRjc3MsICRlbmRfaW5kZXgpOwogICAgICAgICAgICAvLyBTZXQgY29ycmVjdCBzdGFydF9pbmRleDogRml4ZXMgaXNzdWUgIzI1MjgxMzAKICAgICAgICAgICAgJHN0YXJ0X2luZGV4ID0gJGVuZF9pbmRleCArIDIgKyBzdHJsZW4oJGNvbW1lbnRfcHJlc2VydmVfc3RyaW5nKSAtIHN0cmxlbigkY29tbWVudF9mb3VuZCk7CiAgICAgICAgfQoKICAgICAgICAvLyBwcmVzZXJ2ZSBzdHJpbmdzIHNvIHRoZWlyIGNvbnRlbnQgZG9lc24ndCBnZXQgYWNjaWRlbnRhbGx5IG1pbmlmaWVkCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnLyg/OiIoPzpbXlxcXFwiXXxcXFxcLnxcXFxcKSoiKXwnLiIoPzonKD86W15cXFxcJ118XFxcXC58XFxcXCkqJykvUyIsIGFycmF5KCR0aGlzLCAncmVwbGFjZV9zdHJpbmcnKSwgJGNzcyk7CgogICAgICAgIC8vIExldCdzIGRpdmlkZSBjc3MgY29kZSBpbiBjaHVua3Mgb2YgMjUuMDAwIGNoYXJzIGFwcm94LgogICAgICAgIC8vIFJlYXNvbjogUEhQJ3MgUENSRSBmdW5jdGlvbnMgbGlrZSBwcmVnX3JlcGxhY2UgaGF2ZSBhICJiYWNrdHJhY2sgbGltaXQiCiAgICAgICAgLy8gb2YgMTAwLjAwMCBjaGFycyBieSBkZWZhdWx0IChwaHAgPCA1LjMuNykgc28gaWYgd2UncmUgZGVhbGluZyB3aXRoIHJlYWxseQogICAgICAgIC8vIGxvbmcgc3RyaW5ncyBhbmQgYSAoc3ViKXBhdHRlcm4gbWF0Y2hlcyBhIG51bWJlciBvZiBjaGFycyBncmVhdGVyIHRoYW4KICAgICAgICAvLyB0aGUgYmFja3RyYWNrIGxpbWl0IG51bWJlciAoaS5lLiAvKC4qKS9zKSBQQ1JFIGZ1bmN0aW9ucyBtYXkgZmFpbCBzaWxlbnRseQogICAgICAgIC8vIHJldHVybmluZyBOVUxMIGFuZCAkY3NzIHdvdWxkIGJlIGVtcHR5LgogICAgICAgICRjaGFyc2V0ID0gJyc7CiAgICAgICAgJGNoYXJzZXRfcmVnZXhwID0gJy9AY2hhcnNldCBbXjtdKzsvaSc7CiAgICAgICAgJGNzc19jaHVua3MgPSBhcnJheSgpOwogICAgICAgICRjc3NfY2h1bmtfbGVuZ3RoID0gMjUwMDA7IC8vIGFwcm94IHNpemUsIG5vdCBleGFjdAogICAgICAgICRzdGFydF9pbmRleCA9IDA7CiAgICAgICAgJGkgPSAkY3NzX2NodW5rX2xlbmd0aDsgLy8gc2F2ZSBpbml0aWFsIGl0ZXJhdGlvbnMKICAgICAgICAkbCA9IHN0cmxlbigkY3NzKTsKCgogICAgICAgIC8vIGlmIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyAyNTAwMCBvciBsZXNzLCBkbyBub3QgY2h1bmsKICAgICAgICBpZiAoJGwgPD0gJGNzc19jaHVua19sZW5ndGgpIHsKICAgICAgICAgICAgJGNzc19jaHVua3NbXSA9ICRjc3M7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gY2h1bmsgY3NzIGNvZGUgc2VjdXJlbHkKICAgICAgICAgICAgd2hpbGUgKCRpIDwgJGwpIHsKICAgICAgICAgICAgICAgICRpICs9IDUwOyAvLyBzYXZlIGl0ZXJhdGlvbnMuIDUwMCBjaGVja3MgZm9yIGEgY2xvc2luZyBjdXJseSBicmFjZSB9CiAgICAgICAgICAgICAgICBpZiAoJGwgLSAkc3RhcnRfaW5kZXggPD0gJGNzc19jaHVua19sZW5ndGggfHwgJGkgPj0gJGwpIHsKICAgICAgICAgICAgICAgICAgICAkY3NzX2NodW5rc1tdID0gJHRoaXMtPnN0cl9zbGljZSgkY3NzLCAkc3RhcnRfaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRjc3NbJGkgLSAxXSA9PT0gJ30nICYmICRpIC0gJHN0YXJ0X2luZGV4ID4gJGNzc19jaHVua19sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgdHdvIGVuZGluZyBjdXJseSBicmFjZXMgfX0gc2VwYXJhdGVkIG9yIG5vdCBieSBzcGFjZXMsCiAgICAgICAgICAgICAgICAgICAgLy8gam9pbiB0aGVtIGluIHRoZSBzYW1lIGNodW5rIChpLmUuIEBtZWRpYSBibG9ja3MpCiAgICAgICAgICAgICAgICAgICAgJG5leHRfY2h1bmsgPSBzdWJzdHIoJGNzcywgJGkpOwogICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvXlxzKlx9LycsICRuZXh0X2NodW5rKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkaSA9ICRpICsgJHRoaXMtPmluZGV4X29mKCRuZXh0X2NodW5rLCAnfScpICsgMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRjc3NfY2h1bmtzW10gPSAkdGhpcy0+c3RyX3NsaWNlKCRjc3MsICRzdGFydF9pbmRleCwgJGkpOwogICAgICAgICAgICAgICAgICAgICRzdGFydF9pbmRleCA9ICRpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBNaW5pZnkgZWFjaCBjaHVuawogICAgICAgIGZvciAoJGkgPSAwLCAkbiA9IGNvdW50KCRjc3NfY2h1bmtzKTsgJGkgPCAkbjsgJGkrKykgewogICAgICAgICAgICAkY3NzX2NodW5rc1skaV0gPSAkdGhpcy0+bWluaWZ5KCRjc3NfY2h1bmtzWyRpXSwgJGxpbmVicmVha19wb3MpOwogICAgICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBAY2hhcnNldCBhdC1ydWxlIGZvdW5kCiAgICAgICAgICAgIGlmIChlbXB0eSgkY2hhcnNldCkgJiYgcHJlZ19tYXRjaCgkY2hhcnNldF9yZWdleHAsICRjc3NfY2h1bmtzWyRpXSwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgICAgICAkY2hhcnNldCA9ICRtYXRjaGVzWzBdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIERlbGV0ZSBhbGwgQGNoYXJzZXQgYXQtcnVsZXMKICAgICAgICAgICAgJGNzc19jaHVua3NbJGldID0gcHJlZ19yZXBsYWNlKCRjaGFyc2V0X3JlZ2V4cCwgJycsICRjc3NfY2h1bmtzWyRpXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBVcGRhdGUgdGhlIGZpcnN0IGNodW5rIGFuZCBwdXNoIHRoZSBjaGFyc2V0IHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUuCiAgICAgICAgJGNzc19jaHVua3NbMF0gPSAkY2hhcnNldCAuICRjc3NfY2h1bmtzWzBdOwoKICAgICAgICByZXR1cm4gaW1wbG9kZSgnJywgJGNzc19jaHVua3MpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgbWVtb3J5IGxpbWl0IGZvciB0aGlzIHNjcmlwdAogICAgICogQHBhcmFtIGludHxzdHJpbmcgJGxpbWl0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfbWVtb3J5X2xpbWl0KCRsaW1pdCkKICAgIHsKICAgICAgICAkdGhpcy0+bWVtb3J5X2xpbWl0ID0gJHRoaXMtPm5vcm1hbGl6ZV9pbnQoJGxpbWl0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG1heGltdW0gZXhlY3V0aW9uIHRpbWUgZm9yIHRoaXMgc2NyaXB0CiAgICAgKiBAcGFyYW0gaW50fHN0cmluZyAkc2Vjb25kcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X21heF9leGVjdXRpb25fdGltZSgkc2Vjb25kcykKICAgIHsKICAgICAgICAkdGhpcy0+bWF4X2V4ZWN1dGlvbl90aW1lID0gKGludCkgJHNlY29uZHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIHRoZSBQQ1JFIGJhY2t0cmFjayBsaW1pdCBmb3IgdGhpcyBzY3JpcHQKICAgICAqIEBwYXJhbSBpbnQgJGxpbWl0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRfcGNyZV9iYWNrdHJhY2tfbGltaXQoJGxpbWl0KQogICAgewogICAgICAgICR0aGlzLT5wY3JlX2JhY2t0cmFja19saW1pdCA9IChpbnQpICRsaW1pdDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIFBDUkUgcmVjdXJzaW9uIGxpbWl0IGZvciB0aGlzIHNjcmlwdAogICAgICogQHBhcmFtIGludCAkbGltaXQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9wY3JlX3JlY3Vyc2lvbl9saW1pdCgkbGltaXQpCiAgICB7CiAgICAgICAgJHRoaXMtPnBjcmVfcmVjdXJzaW9uX2xpbWl0ID0gKGludCkgJGxpbWl0OwogICAgfQoKICAgIC8qKgogICAgICogVHJ5IHRvIGNvbmZpZ3VyZSBQSFAgdG8gdXNlIGF0IGxlYXN0IHRoZSBzdWdnZXN0ZWQgbWluaW11bSBzZXR0aW5ncwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRvX3JhaXNlX3BocF9saW1pdHMoKQogICAgewogICAgICAgICRwaHBfbGltaXRzID0gYXJyYXkoCiAgICAgICAgICAgICdtZW1vcnlfbGltaXQnID0+ICR0aGlzLT5tZW1vcnlfbGltaXQsCiAgICAgICAgICAgICdtYXhfZXhlY3V0aW9uX3RpbWUnID0+ICR0aGlzLT5tYXhfZXhlY3V0aW9uX3RpbWUsCiAgICAgICAgICAgICdwY3JlLmJhY2t0cmFja19saW1pdCcgPT4gJHRoaXMtPnBjcmVfYmFja3RyYWNrX2xpbWl0LAogICAgICAgICAgICAncGNyZS5yZWN1cnNpb25fbGltaXQnID0+ICAkdGhpcy0+cGNyZV9yZWN1cnNpb25fbGltaXQKICAgICAgICApOwoKICAgICAgICAvLyBJZiBjdXJyZW50IHNldHRpbmdzIGFyZSBoaWdoZXIgcmVzcGVjdCB0aGVtLgogICAgICAgIGZvcmVhY2ggKCRwaHBfbGltaXRzIGFzICRuYW1lID0+ICRzdWdnZXN0ZWQpIHsKICAgICAgICAgICAgJGN1cnJlbnQgPSAkdGhpcy0+bm9ybWFsaXplX2ludChpbmlfZ2V0KCRuYW1lKSk7CiAgICAgICAgICAgIC8vIG1lbW9yeV9saW1pdCBleGNlcHRpb246IGFsbG93IC0xIGZvciAibm8gbWVtb3J5IGxpbWl0Ii4KICAgICAgICAgICAgaWYgKCRjdXJyZW50ID4gLTEgJiYgKCRzdWdnZXN0ZWQgPT0gLTEgfHwgJGN1cnJlbnQgPCAkc3VnZ2VzdGVkKSkgewogICAgICAgICAgICAgICAgaW5pX3NldCgkbmFtZSwgJHN1Z2dlc3RlZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBEb2VzIGJ1bGsgb2YgdGhlIG1pbmlmaWNhdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAkY3NzCiAgICAgKiBAcGFyYW0gaW50fGJvb2wgJGxpbmVicmVha19wb3MKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gbWluaWZ5KCRjc3MsICRsaW5lYnJlYWtfcG9zKQogICAgewogICAgICAgIC8vIHN0cmluZ3MgYXJlIHNhZmUsIG5vdyB3cmVzdGxlIHRoZSBjb21tZW50cwogICAgICAgIGZvciAoJGkgPSAwLCAkbWF4ID0gY291bnQoJHRoaXMtPmNvbW1lbnRzKTsgJGkgPCAkbWF4OyAkaSsrKSB7CgogICAgICAgICAgICAkdG9rZW4gPSAkdGhpcy0+Y29tbWVudHNbJGldOwogICAgICAgICAgICAkcGxhY2Vob2xkZXIgPSAnLycgLiBzZWxmOjpDT01NRU5UIC4gJGkgLiAnX19fLyc7CgogICAgICAgICAgICAvLyAhIGluIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGUgY29tbWVudCBtZWFucyBwcmVzZXJ2ZQogICAgICAgICAgICAvLyBzbyBwdXNoIHRvIHRoZSBwcmVzZXJ2ZWQgdG9rZW5zIGtlZXBpbmcgdGhlICEKICAgICAgICAgICAgaWYgKHN1YnN0cigkdG9rZW4sIDAsIDEpID09PSAnIScpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVzZXJ2ZWRfdG9rZW5zW10gPSAkdG9rZW47CiAgICAgICAgICAgICAgICAkdG9rZW5fdHJpbmcgPSBzZWxmOjpUT0tFTiAuIChjb3VudCgkdGhpcy0+cHJlc2VydmVkX3Rva2VucykgLSAxKSAuICdfX18nOwogICAgICAgICAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgkcGxhY2Vob2xkZXIsICR0b2tlbl90cmluZywgJGNzcywgMSk7CiAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSBuZXcgbGluZXMgZm9yIC8qISBpbXBvcnRhbnQgY29tbWVudHMKICAgICAgICAgICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy9ccypbXG5cclxmXStccyooXC9cKicuICR0b2tlbl90cmluZyAuJykvUycsIHNlbGY6Ok5MLickMScsICRjc3MpOwogICAgICAgICAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLygnLiAkdG9rZW5fdHJpbmcgLidcKlwvKVxzKltcblxyXGZdK1xzKi9TJywgJyQxJy5zZWxmOjpOTCwgJGNzcyk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gXCBpbiB0aGUgbGFzdCBwb3NpdGlvbiBsb29rcyBsaWtlIGhhY2sgZm9yIE1hYy9JRTUKICAgICAgICAgICAgLy8gc2hvcnRlbiB0aGF0IHRvIC8qXCovIGFuZCB0aGUgbmV4dCBvbmUgdG8gLyoqLwogICAgICAgICAgICBpZiAoc3Vic3RyKCR0b2tlbiwgKHN0cmxlbigkdG9rZW4pIC0gMSksIDEpID09PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlc2VydmVkX3Rva2Vuc1tdID0gJ1xcJzsKICAgICAgICAgICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJHBsYWNlaG9sZGVyLCAgc2VsZjo6VE9LRU4gLiAoY291bnQoJHRoaXMtPnByZXNlcnZlZF90b2tlbnMpIC0gMSkgLiAnX19fJywgJGNzcywgMSk7CiAgICAgICAgICAgICAgICAkaSA9ICRpICsgMTsgLy8gYXR0bjogYWR2YW5jaW5nIHRoZSBsb29wCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlc2VydmVkX3Rva2Vuc1tdID0gJyc7CiAgICAgICAgICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvJyAuIHNlbGY6OkNPTU1FTlQgLiAkaSAuICdfX18vJywgIHNlbGY6OlRPS0VOIC4gKGNvdW50KCR0aGlzLT5wcmVzZXJ2ZWRfdG9rZW5zKSAtIDEpIC4gJ19fXycsICRjc3MsIDEpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGtlZXAgZW1wdHkgY29tbWVudHMgYWZ0ZXIgY2hpbGQgc2VsZWN0b3JzIChJRTcgaGFjaykKICAgICAgICAgICAgLy8gZS5nLiBodG1sID4vKiovIGJvZHkKICAgICAgICAgICAgaWYgKHN0cmxlbigkdG9rZW4pID09PSAwKSB7CiAgICAgICAgICAgICAgICAkc3RhcnRfaW5kZXggPSAkdGhpcy0+aW5kZXhfb2YoJGNzcywgJHRoaXMtPnN0cl9zbGljZSgkcGxhY2Vob2xkZXIsIDEsIC0xKSk7CiAgICAgICAgICAgICAgICBpZiAoJHN0YXJ0X2luZGV4ID4gMikgewogICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdHIoJGNzcywgJHN0YXJ0X2luZGV4IC0gMywgMSkgPT09ICc+JykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+cHJlc2VydmVkX3Rva2Vuc1tdID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJHBsYWNlaG9sZGVyLCAgc2VsZjo6VE9LRU4gLiAoY291bnQoJHRoaXMtPnByZXNlcnZlZF90b2tlbnMpIC0gMSkgLiAnX19fJywgJGNzcywgMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBpbiBhbGwgb3RoZXIgY2FzZXMga2lsbCB0aGUgY29tbWVudAogICAgICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvXC9cKicgLiAkdGhpcy0+c3RyX3NsaWNlKCRwbGFjZWhvbGRlciwgMSwgLTEpIC4gJ1wqXC8vJywgJycsICRjc3MsIDEpOwogICAgICAgIH0KCgogICAgICAgIC8vIE5vcm1hbGl6ZSBhbGwgd2hpdGVzcGFjZSBzdHJpbmdzIHRvIHNpbmdsZSBzcGFjZXMuIEVhc2llciB0byB3b3JrIHdpdGggdGhhdCB3YXkuCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnL1xzKy8nLCAnICcsICRjc3MpOwoKICAgICAgICAvLyBTaG9ydGVuICYgcHJlc2VydmUgY2FsY3VsYXRpb25zIGNhbGMoLi4uKSBzaW5jZSBzcGFjZXMgYXJlIGltcG9ydGFudAogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJy9jYWxjKFwoKD86W15cKFwpXSt8KD8xKSkqXCkpL2knLCBhcnJheSgkdGhpcywgJ3JlcGxhY2VfY2FsYycpLCAkY3NzKTsKCiAgICAgICAgLy8gUmVwbGFjZSBwb3NpdGl2ZSBzaWduIGZyb20gbnVtYmVycyBwcmVjZWRlZCBieSA6IG9yIGEgd2hpdGUtc3BhY2UgYmVmb3JlIHRoZSBsZWFkaW5nIHNwYWNlIGlzIHJlbW92ZWQKICAgICAgICAvLyArMS4yZW0gdG8gMS4yZW0sICsuOHB4IHRvIC44cHgsICsyJSB0byAyJQogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy8oKD88IVxcXFwpXDp8XHMpXCsoXC4/XGQrKS9TJywgJyQxJDInLCAkY3NzKTsKCiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgemVyb3MgZnJvbSBpbnRlZ2VyIGFuZCBmbG9hdCBudW1iZXJzIHByZWNlZGVkIGJ5IDogb3IgYSB3aGl0ZS1zcGFjZQogICAgICAgIC8vIDAwMC42IHRvIC42LCAtMC44IHRvIC0uOCwgMDA1MCB0byA1MCwgLTAxLjA1IHRvIC0xLjA1CiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLygoPzwhXFxcXClcOnxccykoXC0/KTArKFwuP1xkKykvUycsICckMSQyJDMnLCAkY3NzKTsKCiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zIGZyb20gZmxvYXQgbnVtYmVycyBwcmVjZWRlZCBieSA6IG9yIGEgd2hpdGUtc3BhY2UKICAgICAgICAvLyAtNi4wMTAwZW0gdG8gLTYuMDFlbSwgLjAxMDAgdG8gLjAxLCAxLjIwMHB4IHRvIDEuMnB4CiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLygoPzwhXFxcXClcOnxccykoXC0/KShcZD9cLlxkKz8pMCsoW15cZF0pL1MnLCAnJDEkMiQzJDQnLCAkY3NzKTsKCiAgICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIC4wIC0+IC05LjAgdG8gLTkKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvKCg/PCFcXFxcKVw6fFxzKShcLT9cZCspXC4wKFteXGRdKS9TJywgJyQxJDIkMycsICRjc3MpOwoKICAgICAgICAvLyBSZXBsYWNlIDAgbGVuZ3RoIG51bWJlcnMgd2l0aCAwCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLygoPzwhXFxcXClcOnxccylcLT9cLj8wKyhbXlxkXSkvUycsICckezF9MCQyJywgJGNzcyk7CgogICAgICAgIC8vIFJlbW92ZSB0aGUgc3BhY2VzIGJlZm9yZSB0aGUgdGhpbmdzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIHNwYWNlcyBiZWZvcmUgdGhlbS4KICAgICAgICAvLyBCdXQsIGJlIGNhcmVmdWwgbm90IHRvIHR1cm4gInAgOmxpbmsgey4uLn0iIGludG8gInA6bGlua3suLi59IgogICAgICAgIC8vIFN3YXAgb3V0IGFueSBwc2V1ZG8tY2xhc3MgY29sb25zIHdpdGggdGhlIHRva2VuLCBhbmQgdGhlbiBzd2FwIGJhY2suCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnLyg/Ol58XH0pKD86KD86W15ce1w6XSkrXDopKyg/OlteXHtdKlx7KS8nLCBhcnJheSgkdGhpcywgJ3JlcGxhY2VfY29sb24nKSwgJGNzcyk7CiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnL1xzKyhbXCFce1x9XDtcOlw+XCtcKFwpXF1cflw9LF0pLycsICckMScsICRjc3MpOwogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy8nIC4gc2VsZjo6Q0xBU1NDT0xPTiAuICcvJywgJzonLCAkY3NzKTsKCiAgICAgICAgLy8gcmV0YWluIHNwYWNlIGZvciBzcGVjaWFsIElFNiBjYXNlcwogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy9cOmZpcnN0XC0obGluZXxsZXR0ZXIpKFx7fCwpL2knLCAnOmZpcnN0LSQxICQyJywgJGNzcyk7CgogICAgICAgIC8vIG5vIHNwYWNlIGFmdGVyIHRoZSBlbmQgb2YgYSBwcmVzZXJ2ZWQgY29tbWVudAogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy9cKlwvIC8nLCAnKi8nLCAkY3NzKTsKCiAgICAgICAgLy8gUHV0IHRoZSBzcGFjZSBiYWNrIGluIHNvbWUgY2FzZXMsIHRvIHN1cHBvcnQgc3R1ZmYgbGlrZQogICAgICAgIC8vIEBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7CiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnL1xiYW5kXCgvaScsICdhbmQgKCcsICRjc3MpOwoKICAgICAgICAvLyBSZW1vdmUgdGhlIHNwYWNlcyBhZnRlciB0aGUgdGhpbmdzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIHNwYWNlcyBhZnRlciB0aGVtLgogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy8oW1whXHtcfVw6O1w+XCtcKFxbXH5cPSxdKVxzKy9TJywgJyQxJywgJGNzcyk7CgogICAgICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBzZW1pY29sb25zCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLzsrXH0vJywgJ30nLCAkY3NzKTsKCiAgICAgICAgLy8gRml4IGZvciBpc3N1ZTogIzI1MjgxNDYKICAgICAgICAvLyBSZXN0b3JlIHNlbWljb2xvbiBpZiB0aGUgbGFzdCBwcm9wZXJ0eSBpcyBwcmVmaXhlZCB3aXRoIGEgYCpgIChsdGUgSUU3IGhhY2spCiAgICAgICAgLy8gdG8gYXZvaWQgaXNzdWVzIG9uIFN5bWJpYW4gUzYwIDMueCBicm93c2Vycy4KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvKFwqW2EtejAtOVwtXStccypcOlteO1x9XSspKFx9KS8nLCAnJDE7JDInLCAkY3NzKTsKCiAgICAgICAgLy8gUmVwbGFjZSAwIGxlbmd0aCB1bml0cyAwKHB4LGVtLCUpIHdpdGggMC4KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvKCg/PCFcXFxcKVw6fFxzKVwtPzAoPzplbXxleHxjaHxyZW18dnd8dmh8dm18dm1pbnxjbXxtbXxpbnxweHxwdHxwY3wlKS9pUycsICckezF9MCcsICRjc3MpOwoKICAgICAgICAvLyBSZXBsYWNlIDAgMDsgb3IgMCAwIDA7IG9yIDAgMCAwIDA7IHdpdGggMC4KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvXDowKD86IDApezEsM30oO3xcfSkvJywgJzowJDEnLCAkY3NzKTsKCiAgICAgICAgLy8gRml4IGZvciBpc3N1ZTogIzI1MjgxNDIKICAgICAgICAvLyBSZXBsYWNlIHRleHQtc2hhZG93OjA7IHdpdGggdGV4dC1zaGFkb3c6MCAwIDA7CiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLyh0ZXh0LXNoYWRvd1w6MCkoO3xcfSkvaWUnLCAic3RydG9sb3dlcignJDEgMCAwJDInKSIsICRjc3MpOwoKICAgICAgICAvLyBSZXBsYWNlIGJhY2tncm91bmQtcG9zaXRpb246MDsgd2l0aCBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDsKICAgICAgICAvLyBzYW1lIGZvciB0cmFuc2Zvcm0tb3JpZ2luCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLyhiYWNrZ3JvdW5kXC1wb3NpdGlvbnwoPzp3ZWJraXR8bW96fG98bXN8KVwtP3RyYW5zZm9ybVwtb3JpZ2luKVw6MCg7fFx9KS9pZVMnLCAic3RydG9sb3dlcignJDE6MCAwJDInKSIsICRjc3MpOwoKICAgICAgICAvLyBTaG9ydGVuIGNvbG9ycyBmcm9tIHJnYig1MSwxMDIsMTUzKSB0byAjMzM2Njk5LCByZ2IoMTAwJSwwJSwwJSkgdG8gI2ZmMDAwMCAoc1JHQiBjb2xvciBzcGFjZSkKICAgICAgICAvLyBTaG9ydGVuIGNvbG9ycyBmcm9tIGhzbCgwLCAxMDAlLCA1MCUpIHRvICNmZjAwMDAgKHNSR0IgY29sb3Igc3BhY2UpCiAgICAgICAgLy8gVGhpcyBtYWtlcyBpdCBtb3JlIGxpa2VseSB0aGF0IGl0J2xsIGdldCBmdXJ0aGVyIGNvbXByZXNzZWQgaW4gdGhlIG5leHQgc3RlcC4KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvcmdiXHMqXChccyooWzAtOSxcc1wtXC5cJV0rKVxzKlwpKC57MX0pL2knLCBhcnJheSgkdGhpcywgJ3JnYl90b19oZXgnKSwgJGNzcyk7CiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnL2hzbFxzKlwoXHMqKFswLTksXHNcLVwuXCVdKylccypcKSguezF9KS9pJywgYXJyYXkoJHRoaXMsICdoc2xfdG9faGV4JyksICRjc3MpOwoKICAgICAgICAvLyBTaG9ydGVuIGNvbG9ycyBmcm9tICNBQUJCQ0MgdG8gI0FCQyBvciBzaG9ydCBjb2xvciBuYW1lLgogICAgICAgICRjc3MgPSAkdGhpcy0+Y29tcHJlc3NfaGV4X2NvbG9ycygkY3NzKTsKCiAgICAgICAgLy8gYm9yZGVyOiBub25lIHRvIGJvcmRlcjowLCBvdXRsaW5lOiBub25lIHRvIG91dGxpbmU6MAogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy8oYm9yZGVyXC0/KD86dG9wfHJpZ2h0fGJvdHRvbXxsZWZ0fCl8b3V0bGluZSlcOm5vbmUoO3xcfSkvaWVTJywgInN0cnRvbG93ZXIoJyQxOjAkMicpIiwgJGNzcyk7CgogICAgICAgIC8vIHNob3J0ZXIgb3BhY2l0eSBJRSBmaWx0ZXIKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvcHJvZ2lkXDpEWEltYWdlVHJhbnNmb3JtXC5NaWNyb3NvZnRcLkFscGhhXChPcGFjaXR5XD0vaScsICdhbHBoYShvcGFjaXR5PScsICRjc3MpOwoKICAgICAgICAvLyBSZW1vdmUgZW1wdHkgcnVsZXMuCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnL1teXH07XHtcL10rXHtcfS9TJywgJycsICRjc3MpOwoKICAgICAgICAvLyBTb21lIHNvdXJjZSBjb250cm9sIHRvb2xzIGRvbid0IGxpa2UgaXQgd2hlbiBmaWxlcyBjb250YWluaW5nIGxpbmVzIGxvbmdlcgogICAgICAgIC8vIHRoYW4sIHNheSA4MDAwIGNoYXJhY3RlcnMsIGFyZSBjaGVja2VkIGluLiBUaGUgbGluZWJyZWFrIG9wdGlvbiBpcyB1c2VkIGluCiAgICAgICAgLy8gdGhhdCBjYXNlIHRvIHNwbGl0IGxvbmcgbGluZXMgYWZ0ZXIgYSBzcGVjaWZpYyBjb2x1bW4uCiAgICAgICAgaWYgKCRsaW5lYnJlYWtfcG9zICE9PSBGQUxTRSAmJiAoaW50KSAkbGluZWJyZWFrX3BvcyA+PSAwKSB7CiAgICAgICAgICAgICRsaW5lYnJlYWtfcG9zID0gKGludCkgJGxpbmVicmVha19wb3M7CiAgICAgICAgICAgICRzdGFydF9pbmRleCA9ICRpID0gMDsKICAgICAgICAgICAgd2hpbGUgKCRpIDwgc3RybGVuKCRjc3MpKSB7CiAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICAgICAgaWYgKCRjc3NbJGkgLSAxXSA9PT0gJ30nICYmICRpIC0gJHN0YXJ0X2luZGV4ID4gJGxpbmVicmVha19wb3MpIHsKICAgICAgICAgICAgICAgICAgICAkY3NzID0gJHRoaXMtPnN0cl9zbGljZSgkY3NzLCAwLCAkaSkgLiAiXG4iIC4gJHRoaXMtPnN0cl9zbGljZSgkY3NzLCAkaSk7CiAgICAgICAgICAgICAgICAgICAgJHN0YXJ0X2luZGV4ID0gJGk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFJlcGxhY2UgbXVsdGlwbGUgc2VtaS1jb2xvbnMgaW4gYSByb3cgYnkgYSBzaW5nbGUgb25lCiAgICAgICAgLy8gU2VlIFNGIGJ1ZyAjMTk4MDk4OQogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy87OysvJywgJzsnLCAkY3NzKTsKCiAgICAgICAgLy8gUmVzdG9yZSBuZXcgbGluZXMgZm9yIC8qISBpbXBvcnRhbnQgY29tbWVudHMKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvJy4gc2VsZjo6TkwgLicvJywgIlxuIiwgJGNzcyk7CgogICAgICAgIC8vIHJlc3RvcmUgcHJlc2VydmVkIGNvbW1lbnRzIGFuZCBzdHJpbmdzCiAgICAgICAgZm9yICgkaSA9IDAsICRtYXggPSBjb3VudCgkdGhpcy0+cHJlc2VydmVkX3Rva2Vucyk7ICRpIDwgJG1heDsgJGkrKykgewogICAgICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvJyAuIHNlbGY6OlRPS0VOIC4gJGkgLiAnX19fLycsICR0aGlzLT5wcmVzZXJ2ZWRfdG9rZW5zWyRpXSwgJGNzcywgMSk7CiAgICAgICAgfQoKICAgICAgICAvLyBUcmltIHRoZSBmaW5hbCBzdHJpbmcgKGZvciBhbnkgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZSBzcGFjZXMpCiAgICAgICAgcmV0dXJuIHRyaW0oJGNzcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBVdGlsaXR5IG1ldGhvZCB0byByZXBsYWNlIGFsbCBkYXRhIHVybHMgd2l0aCB0b2tlbnMgYmVmb3JlIHdlIHN0YXJ0CiAgICAgKiBjb21wcmVzc2luZywgdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzIHJ1bm5pbmcgc29tZSBvZiB0aGUgc3Vic2VxdWVudAogICAgICogcmVnZXhlcyBhZ2FpbnN0IGxhcmdlIHN0cmluZ3MgY2h1bmtzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNzcwogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBleHRyYWN0X2RhdGFfdXJscygkY3NzKQogICAgewogICAgICAgIC8vIExlYXZlIGRhdGEgdXJscyBhbG9uZSB0byBpbmNyZWFzZSBwYXJzZSBwZXJmb3JtYW5jZS4KICAgICAgICAkbWF4X2luZGV4ID0gc3RybGVuKCRjc3MpIC0gMTsKICAgICAgICAkYXBwZW5kX2luZGV4ID0gJGluZGV4ID0gJGxhc3RfaW5kZXggPSAkb2Zmc2V0ID0gMDsKICAgICAgICAkc2IgPSBhcnJheSgpOwogICAgICAgICRwYXR0ZXJuID0gJy91cmxcKFxzKihbIlwnXT8pZGF0YVw6L2knOwoKICAgICAgICAvLyBTaW5jZSB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIG5vbi1iYXNlNjQgZGF0YSB1cmxzLCB3ZSBuZWVkIHRvIGhhbmRsZQogICAgICAgIC8vICcgYW5kICkgYmVpbmcgcGFydCBvZiB0aGUgZGF0YSBzdHJpbmcuIEhlbmNlIHN3aXRjaGluZyB0byBpbmRleE9mLAogICAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIG1hdGNoaW5nIHN0cmluZyB0ZXJtaW5hdG9ycyBhbmQKICAgICAgICAvLyBoYW5kbGluZyBzYiBhcHBlbmRzIGRpcmVjdGx5LCBpbnN0ZWFkIG9mIHVzaW5nIG1hdGNoZXIuYXBwZW5kKiBtZXRob2RzLgoKICAgICAgICB3aGlsZSAocHJlZ19tYXRjaCgkcGF0dGVybiwgJGNzcywgJG0sIDAsICRvZmZzZXQpKSB7CiAgICAgICAgICAgICRpbmRleCA9ICR0aGlzLT5pbmRleF9vZigkY3NzLCAkbVswXSwgJG9mZnNldCk7CiAgICAgICAgICAgICRsYXN0X2luZGV4ID0gJGluZGV4ICsgc3RybGVuKCRtWzBdKTsKICAgICAgICAgICAgJHN0YXJ0X2luZGV4ID0gJGluZGV4ICsgNDsgLy8gInVybCgiLmxlbmd0aCgpCiAgICAgICAgICAgICRlbmRfaW5kZXggPSAkbGFzdF9pbmRleCAtIDE7CiAgICAgICAgICAgICR0ZXJtaW5hdG9yID0gJG1bMV07IC8vICcsICIgb3IgZW1wdHkgKG5vdCBxdW90ZWQpCiAgICAgICAgICAgICRmb3VuZF90ZXJtaW5hdG9yID0gRkFMU0U7CgogICAgICAgICAgICBpZiAoc3RybGVuKCR0ZXJtaW5hdG9yKSA9PT0gMCkgewogICAgICAgICAgICAgICAgJHRlcm1pbmF0b3IgPSAnKSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHdoaWxlICgkZm91bmRfdGVybWluYXRvciA9PT0gRkFMU0UgJiYgJGVuZF9pbmRleCsxIDw9ICRtYXhfaW5kZXgpIHsKICAgICAgICAgICAgICAgICRlbmRfaW5kZXggPSAkdGhpcy0+aW5kZXhfb2YoJGNzcywgJHRlcm1pbmF0b3IsICRlbmRfaW5kZXggKyAxKTsKCiAgICAgICAgICAgICAgICAvLyBlbmRJbmRleCA9PSAwIGRvZXNuJ3QgcmVhbGx5IGFwcGx5IGhlcmUKICAgICAgICAgICAgICAgIGlmICgkZW5kX2luZGV4ID4gMCAmJiBzdWJzdHIoJGNzcywgJGVuZF9pbmRleCAtIDEsIDEpICE9PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAgICAgJGZvdW5kX3Rlcm1pbmF0b3IgPSBUUlVFOwogICAgICAgICAgICAgICAgICAgIGlmICgnKScgIT0gJHRlcm1pbmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGVuZF9pbmRleCA9ICR0aGlzLT5pbmRleF9vZigkY3NzLCAnKScsICRlbmRfaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gRW5vdWdoIHNlYXJjaGluZywgc3RhcnQgbW92aW5nIHN0dWZmIG92ZXIgdG8gdGhlIGJ1ZmZlcgogICAgICAgICAgICAkc2JbXSA9ICR0aGlzLT5zdWJzdHJpbmcoJGNzcywgJGFwcGVuZF9pbmRleCwgJGluZGV4KTsKCiAgICAgICAgICAgIGlmICgkZm91bmRfdGVybWluYXRvcikgewogICAgICAgICAgICAgICAgJHRva2VuID0gJHRoaXMtPnN1YnN0cmluZygkY3NzLCAkc3RhcnRfaW5kZXgsICRlbmRfaW5kZXgpOwogICAgICAgICAgICAgICAgJHRva2VuID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcnLCAkdG9rZW4pOwogICAgICAgICAgICAgICAgJHRoaXMtPnByZXNlcnZlZF90b2tlbnNbXSA9ICR0b2tlbjsKCiAgICAgICAgICAgICAgICAkcHJlc2VydmVyID0gJ3VybCgnIC4gc2VsZjo6VE9LRU4gLiAoY291bnQoJHRoaXMtPnByZXNlcnZlZF90b2tlbnMpIC0gMSkgLiAnX19fKSc7CiAgICAgICAgICAgICAgICAkc2JbXSA9ICRwcmVzZXJ2ZXI7CgogICAgICAgICAgICAgICAgJGFwcGVuZF9pbmRleCA9ICRlbmRfaW5kZXggKyAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gTm8gZW5kIHRlcm1pbmF0b3IgZm91bmQsIHJlLWFkZCB0aGUgd2hvbGUgbWF0Y2guIFNob3VsZCB3ZSB0aHJvdy93YXJuIGhlcmU/CiAgICAgICAgICAgICAgICAkc2JbXSA9ICR0aGlzLT5zdWJzdHJpbmcoJGNzcywgJGluZGV4LCAkbGFzdF9pbmRleCk7CiAgICAgICAgICAgICAgICAkYXBwZW5kX2luZGV4ID0gJGxhc3RfaW5kZXg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRvZmZzZXQgPSAkbGFzdF9pbmRleDsKICAgICAgICB9CgogICAgICAgICRzYltdID0gJHRoaXMtPnN1YnN0cmluZygkY3NzLCAkYXBwZW5kX2luZGV4KTsKCiAgICAgICAgcmV0dXJuIGltcGxvZGUoJycsICRzYik7CiAgICB9CgogICAgLyoqCiAgICAgKiBVdGlsaXR5IG1ldGhvZCB0byBjb21wcmVzcyBoZXggY29sb3IgdmFsdWVzIG9mIHRoZSBmb3JtICNBQUJCQ0MgdG8gI0FCQyBvciBzaG9ydCBjb2xvciBuYW1lLgogICAgICoKICAgICAqIERPRVMgTk9UIGNvbXByZXNzIENTUyBJRCBzZWxlY3RvcnMgd2hpY2ggbWF0Y2ggdGhlIGFib3ZlIHBhdHRlcm4gKHdoaWNoIHdvdWxkIGJyZWFrIHRoaW5ncykuCiAgICAgKiBlLmcuICNBZGRyZXNzRm9ybSB7IC4uLiB9CiAgICAgKgogICAgICogRE9FUyBOT1QgY29tcHJlc3MgSUUgZmlsdGVycywgd2hpY2ggaGF2ZSBoZXggY29sb3IgdmFsdWVzICh3aGljaCB3b3VsZCBicmVhayB0aGluZ3MpLgogICAgICogZS5nLiBmaWx0ZXI6IGNocm9tYShjb2xvcj0iI0ZGRkZGRiIpOwogICAgICoKICAgICAqIERPRVMgTk9UIGNvbXByZXNzIGludmFsaWQgaGV4IHZhbHVlcy4KICAgICAqIGUuZy4gYmFja2dyb3VuZC1jb2xvcjogI2FhYmJjY2RkCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY3NzCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNvbXByZXNzX2hleF9jb2xvcnMoJGNzcykKICAgIHsKICAgICAgICAvLyBMb29rIGZvciBoZXggY29sb3JzIGluc2lkZSB7IC4uLiB9ICh0byBhdm9pZCBJRHMpIGFuZCB3aGljaCBkb24ndCBoYXZlIGEgPSwgb3IgYSAiIGluIGZyb250IG9mIHRoZW0gKHRvIGF2b2lkIGZpbHRlcnMpCiAgICAgICAgJHBhdHRlcm4gPSAnLyhcPVxzKj9bIlwnXT8pPyMoWzAtOWEtZl0pKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pKFswLTlhLWZdKShbMC05YS1mXSkoXH18W14wLTlhLWZ7XVtee10qP1x9KS9pUyc7CiAgICAgICAgJF9pbmRleCA9ICRpbmRleCA9ICRsYXN0X2luZGV4ID0gJG9mZnNldCA9IDA7CiAgICAgICAgJHNiID0gYXJyYXkoKTsKICAgICAgICAvLyBTZWU6IGh0dHA6Ly9hamF4bWluLmNvZGVwbGV4LmNvbS93aWtpcGFnZT90aXRsZT1DU1MlMjBDb2xvcnMKICAgICAgICAkc2hvcnRfc2FmZSA9IGFycmF5KAogICAgICAgICAgICAnIzgwODA4MCcgPT4gJ2dyYXknLAogICAgICAgICAgICAnIzAwODAwMCcgPT4gJ2dyZWVuJywKICAgICAgICAgICAgJyM4MDAwMDAnID0+ICdtYXJvb24nLAogICAgICAgICAgICAnIzAwMDA4MCcgPT4gJ25hdnknLAogICAgICAgICAgICAnIzgwODAwMCcgPT4gJ29saXZlJywKICAgICAgICAgICAgJyM4MDAwODAnID0+ICdwdXJwbGUnLAogICAgICAgICAgICAnI2MwYzBjMCcgPT4gJ3NpbHZlcicsCiAgICAgICAgICAgICcjMDA4MDgwJyA9PiAndGVhbCcsCiAgICAgICAgICAgICcjZjAwJyA9PiAncmVkJwogICAgICAgICk7CgogICAgICAgIHdoaWxlIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkY3NzLCAkbSwgMCwgJG9mZnNldCkpIHsKICAgICAgICAgICAgJGluZGV4ID0gJHRoaXMtPmluZGV4X29mKCRjc3MsICRtWzBdLCAkb2Zmc2V0KTsKICAgICAgICAgICAgJGxhc3RfaW5kZXggPSAkaW5kZXggKyBzdHJsZW4oJG1bMF0pOwogICAgICAgICAgICAkaXNfZmlsdGVyID0gKGJvb2wpICRtWzFdOwoKICAgICAgICAgICAgJHNiW10gPSAkdGhpcy0+c3Vic3RyaW5nKCRjc3MsICRfaW5kZXgsICRpbmRleCk7CgogICAgICAgICAgICBpZiAoJGlzX2ZpbHRlcikgewogICAgICAgICAgICAgICAgLy8gUmVzdG9yZSwgbWFpbnRhaW4gY2FzZSwgb3RoZXJ3aXNlIGZpbHRlciB3aWxsIGJyZWFrCiAgICAgICAgICAgICAgICAkc2JbXSA9ICRtWzFdIC4gJyMnIC4gJG1bMl0gLiAkbVszXSAuICRtWzRdIC4gJG1bNV0gLiAkbVs2XSAuICRtWzddOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHN0cnRvbG93ZXIoJG1bMl0pID09IHN0cnRvbG93ZXIoJG1bM10pICYmCiAgICAgICAgICAgICAgICAgICAgc3RydG9sb3dlcigkbVs0XSkgPT0gc3RydG9sb3dlcigkbVs1XSkgJiYKICAgICAgICAgICAgICAgICAgICBzdHJ0b2xvd2VyKCRtWzZdKSA9PSBzdHJ0b2xvd2VyKCRtWzddKSkgewogICAgICAgICAgICAgICAgICAgIC8vIENvbXByZXNzLgogICAgICAgICAgICAgICAgICAgICRoZXggPSAnIycgLiBzdHJ0b2xvd2VyKCRtWzNdIC4gJG1bNV0gLiAkbVs3XSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIE5vbiBjb21wcmVzc2libGUgY29sb3IsIHJlc3RvcmUgYnV0IGxvd2VyIGNhc2UuCiAgICAgICAgICAgICAgICAgICAgJGhleCA9ICcjJyAuIHN0cnRvbG93ZXIoJG1bMl0gLiAkbVszXSAuICRtWzRdIC4gJG1bNV0gLiAkbVs2XSAuICRtWzddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgSGV4IGNvbG9ycyB0byBzaG9ydCBzYWZlIGNvbG9yIG5hbWVzCiAgICAgICAgICAgICAgICAkc2JbXSA9IGFycmF5X2tleV9leGlzdHMoJGhleCwgJHNob3J0X3NhZmUpID8gJHNob3J0X3NhZmVbJGhleF0gOiAkaGV4OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkX2luZGV4ID0gJG9mZnNldCA9ICRsYXN0X2luZGV4IC0gc3RybGVuKCRtWzhdKTsKICAgICAgICB9CgogICAgICAgICRzYltdID0gJHRoaXMtPnN1YnN0cmluZygkY3NzLCAkX2luZGV4KTsKCiAgICAgICAgcmV0dXJuIGltcGxvZGUoJycsICRzYik7CiAgICB9CgogICAgLyogQ0FMTEJBQ0tTCiAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAqLwoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVwbGFjZV9zdHJpbmcoJG1hdGNoZXMpCiAgICB7CiAgICAgICAgJG1hdGNoID0gJG1hdGNoZXNbMF07CiAgICAgICAgJHF1b3RlID0gc3Vic3RyKCRtYXRjaCwgMCwgMSk7CiAgICAgICAgLy8gTXVzdCB1c2UgYWRkY3NsYXNoZXMgaW4gUEhQIHRvIGF2b2lkIHBhcnNpbmcgb2YgYmFja3NsYXNoZXMKICAgICAgICAkbWF0Y2ggPSBhZGRjc2xhc2hlcygkdGhpcy0+c3RyX3NsaWNlKCRtYXRjaCwgMSwgLTEpLCAnXFwnKTsKCiAgICAgICAgLy8gbWF5YmUgdGhlIHN0cmluZyBjb250YWlucyBhIGNvbW1lbnQtbGlrZSBzdWJzdHJpbmc/CiAgICAgICAgLy8gb25lLCBtYXliZSBtb3JlPyBwdXQnZW0gYmFjayB0aGVuCiAgICAgICAgaWYgKCgkcG9zID0gJHRoaXMtPmluZGV4X29mKCRtYXRjaCwgc2VsZjo6Q09NTUVOVCkpID49IDApIHsKICAgICAgICAgICAgZm9yICgkaSA9IDAsICRtYXggPSBjb3VudCgkdGhpcy0+Y29tbWVudHMpOyAkaSA8ICRtYXg7ICRpKyspIHsKICAgICAgICAgICAgICAgICRtYXRjaCA9IHByZWdfcmVwbGFjZSgnLycgLiBzZWxmOjpDT01NRU5UIC4gJGkgLiAnX19fLycsICR0aGlzLT5jb21tZW50c1skaV0sICRtYXRjaCwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIG1pbmlmeSBhbHBoYSBvcGFjaXR5IGluIGZpbHRlciBzdHJpbmdzCiAgICAgICAgJG1hdGNoID0gcHJlZ19yZXBsYWNlKCcvcHJvZ2lkXDpEWEltYWdlVHJhbnNmb3JtXC5NaWNyb3NvZnRcLkFscGhhXChPcGFjaXR5XD0vaScsICdhbHBoYShvcGFjaXR5PScsICRtYXRjaCk7CgogICAgICAgICR0aGlzLT5wcmVzZXJ2ZWRfdG9rZW5zW10gPSAkbWF0Y2g7CiAgICAgICAgcmV0dXJuICRxdW90ZSAuIHNlbGY6OlRPS0VOIC4gKGNvdW50KCR0aGlzLT5wcmVzZXJ2ZWRfdG9rZW5zKSAtIDEpIC4gJ19fXycgLiAkcXVvdGU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiByZXBsYWNlX2NvbG9uKCRtYXRjaGVzKQogICAgewogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2UoJy9cOi8nLCBzZWxmOjpDTEFTU0NPTE9OLCAkbWF0Y2hlc1swXSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiByZXBsYWNlX2NhbGMoJG1hdGNoZXMpCiAgICB7CiAgICAgICAgJHRoaXMtPnByZXNlcnZlZF90b2tlbnNbXSA9IHByZWdfcmVwbGFjZSgnL1xzPyhbXCpcL1woXCksXSlccz8vJywgJyQxJywgJG1hdGNoZXNbMF0pOwogICAgICAgIHJldHVybiBzZWxmOjpUT0tFTiAuIChjb3VudCgkdGhpcy0+cHJlc2VydmVkX3Rva2VucykgLSAxKSAuICdfX18nOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmdiX3RvX2hleCgkbWF0Y2hlcykKICAgIHsKICAgICAgICAvLyBTdXBwb3J0IGZvciBwZXJjZW50YWdlIHZhbHVlcyByZ2IoMTAwJSwgMCUsIDQ1JSk7CiAgICAgICAgaWYgKCR0aGlzLT5pbmRleF9vZigkbWF0Y2hlc1sxXSwgJyUnKSA+PSAwKXsKICAgICAgICAgICAgJHJnYmNvbG9ycyA9IGV4cGxvZGUoJywnLCBzdHJfcmVwbGFjZSgnJScsICcnLCAkbWF0Y2hlc1sxXSkpOwogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkcmdiY29sb3JzKTsgJGkrKykgewogICAgICAgICAgICAgICAgJHJnYmNvbG9yc1skaV0gPSAkdGhpcy0+cm91bmRfbnVtYmVyKGZsb2F0dmFsKCRyZ2Jjb2xvcnNbJGldKSAqIDIuNTUpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJnYmNvbG9ycyA9IGV4cGxvZGUoJywnLCAkbWF0Y2hlc1sxXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBWYWx1ZXMgb3V0c2lkZSB0aGUgc1JHQiBjb2xvciBzcGFjZSBzaG91bGQgYmUgY2xpcHBlZCAoMC0yNTUpCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJHJnYmNvbG9ycyk7ICRpKyspIHsKICAgICAgICAgICAgJHJnYmNvbG9yc1skaV0gPSAkdGhpcy0+Y2xhbXBfbnVtYmVyKGludHZhbCgkcmdiY29sb3JzWyRpXSwgMTApLCAwLCAyNTUpOwogICAgICAgICAgICAkcmdiY29sb3JzWyRpXSA9IHNwcmludGYoIiUwMngiLCAkcmdiY29sb3JzWyRpXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBGaXggZm9yIGlzc3VlICMyNTI4MDkzCiAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvW1xzXCxcKTtcfV0vJywgJG1hdGNoZXNbMl0pKXsKICAgICAgICAgICAgJG1hdGNoZXNbMl0gPSAnICcgLiAkbWF0Y2hlc1syXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAnIycgLiBpbXBsb2RlKCcnLCAkcmdiY29sb3JzKSAuICRtYXRjaGVzWzJdOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaHNsX3RvX2hleCgkbWF0Y2hlcykKICAgIHsKICAgICAgICAkdmFsdWVzID0gZXhwbG9kZSgnLCcsIHN0cl9yZXBsYWNlKCclJywgJycsICRtYXRjaGVzWzFdKSk7CiAgICAgICAgJGggPSBmbG9hdHZhbCgkdmFsdWVzWzBdKTsKICAgICAgICAkcyA9IGZsb2F0dmFsKCR2YWx1ZXNbMV0pOwogICAgICAgICRsID0gZmxvYXR2YWwoJHZhbHVlc1syXSk7CgogICAgICAgIC8vIFdyYXAgYW5kIGNsYW1wLCB0aGVuIGZyYWN0aW9uIQogICAgICAgICRoID0gKCgoJGggJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjA7CiAgICAgICAgJHMgPSAkdGhpcy0+Y2xhbXBfbnVtYmVyKCRzLCAwLCAxMDApIC8gMTAwOwogICAgICAgICRsID0gJHRoaXMtPmNsYW1wX251bWJlcigkbCwgMCwgMTAwKSAvIDEwMDsKCiAgICAgICAgaWYgKCRzID09IDApIHsKICAgICAgICAgICAgJHIgPSAkZyA9ICRiID0gJHRoaXMtPnJvdW5kX251bWJlcigyNTUgKiAkbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHYyID0gJGwgPCAwLjUgPyAkbCAqICgxICsgJHMpIDogKCRsICsgJHMpIC0gKCRzICogJGwpOwogICAgICAgICAgICAkdjEgPSAoMiAqICRsKSAtICR2MjsKICAgICAgICAgICAgJHIgPSAkdGhpcy0+cm91bmRfbnVtYmVyKDI1NSAqICR0aGlzLT5odWVfdG9fcmdiKCR2MSwgJHYyLCAkaCArICgxLzMpKSk7CiAgICAgICAgICAgICRnID0gJHRoaXMtPnJvdW5kX251bWJlcigyNTUgKiAkdGhpcy0+aHVlX3RvX3JnYigkdjEsICR2MiwgJGgpKTsKICAgICAgICAgICAgJGIgPSAkdGhpcy0+cm91bmRfbnVtYmVyKDI1NSAqICR0aGlzLT5odWVfdG9fcmdiKCR2MSwgJHYyLCAkaCAtICgxLzMpKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnJnYl90b19oZXgoYXJyYXkoJycsICRyLicsJy4kZy4nLCcuJGIsICRtYXRjaGVzWzJdKSk7CiAgICB9CgogICAgLyogSEVMUEVSUwogICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgKi8KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGh1ZV90b19yZ2IoJHYxLCAkdjIsICR2aCkKICAgIHsKICAgICAgICAkdmggPSAkdmggPCAwID8gJHZoICsgMSA6ICgkdmggPiAxID8gJHZoIC0gMSA6ICR2aCk7CiAgICAgICAgaWYgKCR2aCAqIDYgPCAxKSByZXR1cm4gJHYxICsgKCR2MiAtICR2MSkgKiA2ICogJHZoOwogICAgICAgIGlmICgkdmggKiAyIDwgMSkgcmV0dXJuICR2MjsKICAgICAgICBpZiAoJHZoICogMyA8IDIpIHJldHVybiAkdjEgKyAoJHYyIC0gJHYxKSAqICgoMi8zKSAtICR2aCkgKiA2OwogICAgICAgIHJldHVybiAkdjE7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiByb3VuZF9udW1iZXIoJG4pCiAgICB7CiAgICAgICAgcmV0dXJuIGludHZhbChmbG9vcihmbG9hdHZhbCgkbikgKyAwLjUpLCAxMCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjbGFtcF9udW1iZXIoJG4sICRtaW4sICRtYXgpCiAgICB7CiAgICAgICAgcmV0dXJuIG1pbihtYXgoJG4sICRtaW4pLCAkbWF4KTsKICAgIH0KCiAgICAvKioKICAgICAqIFBIUCBwb3J0IG9mIEphdmFzY3JpcHQncyAiaW5kZXhPZiIgZnVuY3Rpb24gZm9yIHN0cmluZ3Mgb25seQogICAgICogQXV0aG9yOiBUdWJhbCBNYXJ0aW4gaHR0cDovL2Jsb2cubWFyZ2Vubi5jb20KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoYXlzdGFjawogICAgICogQHBhcmFtIHN0cmluZyAkbmVlZGxlCiAgICAgKiBAcGFyYW0gaW50ICAgICRvZmZzZXQgaW5kZXggKG9wdGlvbmFsKQogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpbmRleF9vZigkaGF5c3RhY2ssICRuZWVkbGUsICRvZmZzZXQgPSAwKQogICAgewogICAgICAgICRpbmRleCA9IHN0cnBvcygkaGF5c3RhY2ssICRuZWVkbGUsICRvZmZzZXQpOwoKICAgICAgICByZXR1cm4gKCRpbmRleCAhPT0gRkFMU0UpID8gJGluZGV4IDogLTE7CiAgICB9CgogICAgLyoqCiAgICAgKiBQSFAgcG9ydCBvZiBKYXZhc2NyaXB0J3MgInN1YnN0cmluZyIgZnVuY3Rpb24KICAgICAqIEF1dGhvcjogVHViYWwgTWFydGluIGh0dHA6Ly9ibG9nLm1hcmdlbm4uY29tCiAgICAgKiBUZXN0czogaHR0cDovL21hcmdlbm4uY29tL3R1YmFsL3N1YnN0cmluZy8KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJHN0cgogICAgICogQHBhcmFtIGludCAgICAgICRmcm9tIGluZGV4CiAgICAgKiBAcGFyYW0gaW50fGJvb2wgJHRvIGluZGV4IChvcHRpb25hbCkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc3Vic3RyaW5nKCRzdHIsICRmcm9tID0gMCwgJHRvID0gRkFMU0UpCiAgICB7CiAgICAgICAgaWYgKCR0byAhPT0gRkFMU0UpIHsKICAgICAgICAgICAgaWYgKCRmcm9tID09ICR0byB8fCAoJGZyb20gPD0gMCAmJiAkdG8gPCAwKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGZyb20gPiAkdG8pIHsKICAgICAgICAgICAgICAgICRmcm9tX2NvcHkgPSAkZnJvbTsKICAgICAgICAgICAgICAgICRmcm9tID0gJHRvOwogICAgICAgICAgICAgICAgJHRvID0gJGZyb21fY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRmcm9tIDwgMCkgewogICAgICAgICAgICAkZnJvbSA9IDA7CiAgICAgICAgfQoKICAgICAgICAkc3Vic3RyaW5nID0gKCR0byA9PT0gRkFMU0UpID8gc3Vic3RyKCRzdHIsICRmcm9tKSA6IHN1YnN0cigkc3RyLCAkZnJvbSwgJHRvIC0gJGZyb20pOwogICAgICAgIHJldHVybiAoJHN1YnN0cmluZyA9PT0gRkFMU0UpID8gJycgOiAkc3Vic3RyaW5nOwogICAgfQoKICAgIC8qKgogICAgICogUEhQIHBvcnQgb2YgSmF2YXNjcmlwdCdzICJzbGljZSIgZnVuY3Rpb24gZm9yIHN0cmluZ3Mgb25seQogICAgICogQXV0aG9yOiBUdWJhbCBNYXJ0aW4gaHR0cDovL2Jsb2cubWFyZ2Vubi5jb20KICAgICAqIFRlc3RzOiBodHRwOi8vbWFyZ2Vubi5jb20vdHViYWwvc3RyX3NsaWNlLwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkc3RyCiAgICAgKiBAcGFyYW0gaW50ICAgICAgJHN0YXJ0IGluZGV4CiAgICAgKiBAcGFyYW0gaW50fGJvb2wgJGVuZCBpbmRleCAob3B0aW9uYWwpCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHN0cl9zbGljZSgkc3RyLCAkc3RhcnQgPSAwLCAkZW5kID0gRkFMU0UpCiAgICB7CiAgICAgICAgaWYgKCRlbmQgIT09IEZBTFNFICYmICgkc3RhcnQgPCAwIHx8ICRlbmQgPD0gMCkpIHsKICAgICAgICAgICAgJG1heCA9IHN0cmxlbigkc3RyKTsKCiAgICAgICAgICAgIGlmICgkc3RhcnQgPCAwKSB7CiAgICAgICAgICAgICAgICBpZiAoKCRzdGFydCA9ICRtYXggKyAkc3RhcnQpIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRlbmQgPCAwKSB7CiAgICAgICAgICAgICAgICBpZiAoKCRlbmQgPSAkbWF4ICsgJGVuZCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJGVuZCA8PSAkc3RhcnQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHNsaWNlID0gKCRlbmQgPT09IEZBTFNFKSA/IHN1YnN0cigkc3RyLCAkc3RhcnQpIDogc3Vic3RyKCRzdHIsICRzdGFydCwgJGVuZCAtICRzdGFydCk7CiAgICAgICAgcmV0dXJuICgkc2xpY2UgPT09IEZBTFNFKSA/ICcnIDogJHNsaWNlOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCBzdHJpbmdzIGxpa2UgIjY0TSIgb3IgIjMwIiB0byBpbnQgdmFsdWVzCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHNpemUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gbm9ybWFsaXplX2ludCgkc2l6ZSkKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRzaXplKSkgewogICAgICAgICAgICBzd2l0Y2ggKHN1YnN0cigkc2l6ZSwgLTEpKSB7CiAgICAgICAgICAgICAgICBjYXNlICdNJzogY2FzZSAnbSc6IHJldHVybiAkc2l6ZSAqIDEwNDg1NzY7CiAgICAgICAgICAgICAgICBjYXNlICdLJzogY2FzZSAnayc6IHJldHVybiAkc2l6ZSAqIDEwMjQ7CiAgICAgICAgICAgICAgICBjYXNlICdHJzogY2FzZSAnZyc6IHJldHVybiAkc2l6ZSAqIDEwNzM3NDE4MjQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAoaW50KSAkc2l6ZTsKICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/min/lib/DooDigestAuth.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIERvb0RpZ2VzdEF1dGggY2xhc3MgZmlsZS4KICoKICogQGF1dGhvciBMZW5nIFNoZW5nIEhvbmcgPGRhcmtyZWR6QGdtYWlsLmNvbT4KICogQGxpbmsgaHR0cDovL3d3dy5kb29waHAuY29tLwogKiBAY29weXJpZ2h0IENvcHlyaWdodCAmY29weTsgMjAwOSBMZW5nIFNoZW5nIEhvbmcKICogQGxpY2Vuc2UgaHR0cDovL3d3dy5kb29waHAuY29tL2xpY2Vuc2UKICovCgovKioKICogSGFuZGxlcyBIVFRQIGRpZ2VzdCBhdXRoZW50aWNhdGlvbgogKgogKiA8cD5IVFRQIGRpZ2VzdCBhdXRoZW50aWNhdGlvbiBjYW4gYmUgdXNlZCB3aXRoIHRoZSBVUkkgcm91dGVyLgogKiBIVFRQIGRpZ2VzdCBpcyBtdWNoIG1vcmUgcmVjb21tZW5kZWQgb3ZlciB0aGUgdXNlIG9mIEhUVFAgQmFzaWMgYXV0aCB3aGljaCBkb2Vzbid0IHByb3ZpZGUgYW55IGVuY3J5cHRpb24uCiAqIElmIHlvdSBhcmUgcnVubmluZyBQSFAgb24gQXBhY2hlIGluIENHSS9GYXN0Q0dJIG1vZGUsIHlvdSB3b3VsZCBuZWVkIHRvCiAqIGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciAuaHRhY2Nlc3MgZm9yIGRpZ2VzdCBhdXRoIHRvIHdvcmsgY29ycmVjdGx5LjwvcD4KICogPGNvZGU+UmV3cml0ZVJ1bGUgLiogLSBbRT1IVFRQX0FVVEhPUklaQVRJT046JXtIVFRQOkF1dGhvcml6YXRpb259LExdPC9jb2RlPgogKgogKiA8cD5UaGlzIGNsYXNzIGlzIHRlc3RlZCB1bmRlciBBcGFjaGUgMi4yIGFuZCBDaGVyb2tlZSB3ZWIgc2VydmVyLiBJdCBzaG91bGQgd29yayBpbiBib3RoIG1vZF9waHAgYW5kIGNnaSBtb2RlLjwvcD4KICoKICogQGF1dGhvciBMZW5nIFNoZW5nIEhvbmcgPGRhcmtyZWR6QGdtYWlsLmNvbT4KICogQHZlcnNpb24gJElkOiBEb29EaWdlc3RBdXRoLnBocCAxMDAwIDIwMDktMDctNyAxODoyNzoyMgogKiBAcGFja2FnZSBkb28uYXV0aAogKiBAc2luY2UgMS4wCiAqLwpjbGFzcyBEb29EaWdlc3RBdXRoewoKICAgIC8qKgogICAgICogQXV0aGVudGljYXRlIGFnYWluc3QgYSBsaXN0IG9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZHMuCiAgICAgKgogICAgICogPHA+SFRUUCBEaWdlc3QgQXV0aGVudGljYXRpb24gZG9lc24ndCB3b3JrIHdpdGggUEhQIGluIENHSSBtb2RlLAogICAgICogeW91IGhhdmUgdG8gYWRkIHRoaXMgaW50byB5b3VyIC5odGFjY2VzcyA8Y29kZT5SZXdyaXRlUnVsZSAuKiAtIFtFPUhUVFBfQVVUSE9SSVpBVElPTjole0hUVFA6QXV0aG9yaXphdGlvbn0sTF08L2NvZGU+PC9wPgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlYWxtIE5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHNlc3Npb24KICAgICAqIEBwYXJhbSBhcnJheSAkdXNlcnMgQW4gYXNzb2MgYXJyYXkgb2YgdXNlcm5hbWUgYW5kIHBhc3N3b3JkOiBhcnJheSgndW5hbWUxJz0+J3B3ZDEnLCAndW5hbWUyJz0+J3B3ZDInKQogICAgICogQHBhcmFtIHN0cmluZyAkZmFpbF9tc2cgTWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgaWYgdGhlIFVzZXIgY2FuY2VsIHRoZSBsb2dpbgogICAgICogQHBhcmFtIHN0cmluZyAkZmFpbF91cmwgVVJMIHRvIGJlIHJlZGlyZWN0IGlmIHRoZSBVc2VyIGNhbmNlbCB0aGUgbG9naW4KICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSB1c2VybmFtZSBpZiBsb2dpbiBzdWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGh0dHBfYXV0aCgkcmVhbG0sICR1c2VycywgJGZhaWxfbXNnPU5VTEwsICRmYWlsX3VybD1OVUxMKXsKICAgICAgICAkcmVhbG0gPSAiUmVzdHJpY3RlZCBhcmVhIC0gJHJlYWxtIjsKCiAgICAgICAgLy91c2VyID0+IHBhc3N3b3JkCiAgICAgICAgLy8kdXNlcnMgPSBhcnJheSgnYWRtaW4nID0+ICcxMjM0JywgJ2d1ZXN0JyA9PiAnZ3Vlc3QnKTsKICAgICAgICBpZighZW1wdHkoJF9TRVJWRVJbJ1JFRElSRUNUX0hUVFBfQVVUSE9SSVpBVElPTiddKSAmJiBzdHJwb3MoJF9TRVJWRVJbJ1JFRElSRUNUX0hUVFBfQVVUSE9SSVpBVElPTiddLCAnRGlnZXN0Jyk9PT0wKXsKICAgICAgICAgICAgJF9TRVJWRVJbJ1BIUF9BVVRIX0RJR0VTVCddID0gJF9TRVJWRVJbJ1JFRElSRUNUX0hUVFBfQVVUSE9SSVpBVElPTiddOwogICAgICAgIH0KCiAgICAgICAgaWYgKGVtcHR5KCRfU0VSVkVSWydQSFBfQVVUSF9ESUdFU1QnXSkpIHsKICAgICAgICAgICAgaGVhZGVyKCdXV1ctQXV0aGVudGljYXRlOiBEaWdlc3QgcmVhbG09IicuJHJlYWxtLgogICAgICAgICAgICAgICAgICAgJyIscW9wPSJhdXRoIixub25jZT0iJy51bmlxaWQoKS4nIixvcGFxdWU9IicubWQ1KCRyZWFsbSkuJyInKTsKICAgICAgICAgICAgaGVhZGVyKCdIVFRQLzEuMSA0MDEgVW5hdXRob3JpemVkJyk7CiAgICAgICAgICAgIGlmKCRmYWlsX21zZyE9TlVMTCkKICAgICAgICAgICAgICAgIGRpZSgkZmFpbF9tc2cpOwogICAgICAgICAgICBpZigkZmFpbF91cmwhPU5VTEwpCiAgICAgICAgICAgICAgICBkaWUoIjxzY3JpcHQ+d2luZG93LmxvY2F0aW9uLmhyZWYgPSAnJGZhaWxfdXJsJzwvc2NyaXB0PiIpOwogICAgICAgICAgICBleGl0OwogICAgICAgIH0KCiAgICAgICAgLy8gYW5hbHl6ZSB0aGUgUEhQX0FVVEhfRElHRVNUIHZhcmlhYmxlCiAgICAgICAgaWYgKCEoJGRhdGEgPSBzZWxmOjpodHRwX2RpZ2VzdF9wYXJzZSgkX1NFUlZFUlsnUEhQX0FVVEhfRElHRVNUJ10pKSB8fCAhaXNzZXQoJHVzZXJzWyRkYXRhWyd1c2VybmFtZSddXSkpewogICAgICAgICAgICBoZWFkZXIoJ1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0iJy4kcmVhbG0uCiAgICAgICAgICAgICAgICAgICAnIixxb3A9ImF1dGgiLG5vbmNlPSInLnVuaXFpZCgpLiciLG9wYXF1ZT0iJy5tZDUoJHJlYWxtKS4nIicpOwogICAgICAgICAgICBoZWFkZXIoJ0hUVFAvMS4xIDQwMSBVbmF1dGhvcml6ZWQnKTsKICAgICAgICAgICAgaWYoJGZhaWxfbXNnIT1OVUxMKQogICAgICAgICAgICAgICAgZGllKCRmYWlsX21zZyk7CiAgICAgICAgICAgIGlmKCRmYWlsX3VybCE9TlVMTCkKICAgICAgICAgICAgICAgIGRpZSgiPHNjcmlwdD53aW5kb3cubG9jYXRpb24uaHJlZiA9ICckZmFpbF91cmwnPC9zY3JpcHQ+Iik7CiAgICAgICAgICAgIGV4aXQ7CiAgICAgICAgfQoKICAgICAgICAvLyBnZW5lcmF0ZSB0aGUgdmFsaWQgcmVzcG9uc2UKICAgICAgICAkQTEgPSBtZDUoJGRhdGFbJ3VzZXJuYW1lJ10gLiAnOicgLiAkcmVhbG0gLiAnOicgLiAkdXNlcnNbJGRhdGFbJ3VzZXJuYW1lJ11dKTsKICAgICAgICAkQTIgPSBtZDUoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10uJzonLiRkYXRhWyd1cmknXSk7CiAgICAgICAgJHZhbGlkX3Jlc3BvbnNlID0gbWQ1KCRBMS4nOicuJGRhdGFbJ25vbmNlJ10uJzonLiRkYXRhWyduYyddLic6Jy4kZGF0YVsnY25vbmNlJ10uJzonLiRkYXRhWydxb3AnXS4nOicuJEEyKTsKCiAgICAgICAgaWYgKCRkYXRhWydyZXNwb25zZSddICE9ICR2YWxpZF9yZXNwb25zZSl7CiAgICAgICAgICAgIGhlYWRlcignSFRUUC8xLjEgNDAxIFVuYXV0aG9yaXplZCcpOwogICAgICAgICAgICBoZWFkZXIoJ1dXVy1BdXRoZW50aWNhdGU6IERpZ2VzdCByZWFsbT0iJy4kcmVhbG0uCiAgICAgICAgICAgICAgICAgICAnIixxb3A9ImF1dGgiLG5vbmNlPSInLnVuaXFpZCgpLiciLG9wYXF1ZT0iJy5tZDUoJHJlYWxtKS4nIicpOwogICAgICAgICAgICBpZigkZmFpbF9tc2chPU5VTEwpCiAgICAgICAgICAgICAgICBkaWUoJGZhaWxfbXNnKTsKICAgICAgICAgICAgaWYoJGZhaWxfdXJsIT1OVUxMKQogICAgICAgICAgICAgICAgZGllKCI8c2NyaXB0PndpbmRvdy5sb2NhdGlvbi5ocmVmID0gJyRmYWlsX3VybCc8L3NjcmlwdD4iKTsKICAgICAgICAgICAgZXhpdDsKICAgICAgICB9CgogICAgICAgIC8vIG9rLCB2YWxpZCB1c2VybmFtZSAmIHBhc3N3b3JkCiAgICAgICAgcmV0dXJuICRkYXRhWyd1c2VybmFtZSddOwogICAgfQoKICAgIC8qKgogICAgICogTWV0aG9kIHRvIHBhcnNlIHRoZSBodHRwIGF1dGggaGVhZGVyLCB3b3JrcyB3aXRoIElFLgogICAgICoKICAgICAqIEludGVybmV0IEV4cGxvcmVyIHJldHVybnMgYSBxb3A9Inh4eHh4eHh4eHh4IiBpbiB0aGUgaGVhZGVyIGluc3RlYWQgb2YgcW9wPXh4eHh4eHh4eHh4IGFzIG1vc3QgYnJvd3NlcnMgZG8uCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkdHh0IGhlYWRlciBzdHJpbmcgdG8gcGFyc2UKICAgICAqIEByZXR1cm4gYXJyYXkgQW4gYXNzb2MgYXJyYXkgb2YgdGhlIGRpZ2VzdCBhdXRoIHNlc3Npb24KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gaHR0cF9kaWdlc3RfcGFyc2UoJHR4dCkKICAgIHsKICAgICAgICAkcmVzID0gcHJlZ19tYXRjaCgiL3VzZXJuYW1lPVwiKFteXCJdKylcIi9pIiwgJHR4dCwgJG1hdGNoKTsKICAgICAgICAkZGF0YVsndXNlcm5hbWUnXSA9IChpc3NldCgkbWF0Y2hbMV0pKT8kbWF0Y2hbMV06bnVsbDsKICAgICAgICAkcmVzID0gcHJlZ19tYXRjaCgnL25vbmNlPVwiKFteXCJdKylcIi9pJywgJHR4dCwgJG1hdGNoKTsKICAgICAgICAkZGF0YVsnbm9uY2UnXSA9ICRtYXRjaFsxXTsKICAgICAgICAkcmVzID0gcHJlZ19tYXRjaCgnL25jPShbMC05XSspL2knLCAkdHh0LCAkbWF0Y2gpOwogICAgICAgICRkYXRhWyduYyddID0gJG1hdGNoWzFdOwogICAgICAgICRyZXMgPSBwcmVnX21hdGNoKCcvY25vbmNlPVwiKFteXCJdKylcIi9pJywgJHR4dCwgJG1hdGNoKTsKICAgICAgICAkZGF0YVsnY25vbmNlJ10gPSAkbWF0Y2hbMV07CiAgICAgICAgJHJlcyA9IHByZWdfbWF0Y2goJy9xb3A9KFteLF0rKS9pJywgJHR4dCwgJG1hdGNoKTsKICAgICAgICAkZGF0YVsncW9wJ10gPSBzdHJfcmVwbGFjZSgnIicsJycsJG1hdGNoWzFdKTsKICAgICAgICAkcmVzID0gcHJlZ19tYXRjaCgnL3VyaT1cIihbXlwiXSspXCIvaScsICR0eHQsICRtYXRjaCk7CiAgICAgICAgJGRhdGFbJ3VyaSddID0gJG1hdGNoWzFdOwogICAgICAgICRyZXMgPSBwcmVnX21hdGNoKCcvcmVzcG9uc2U9XCIoW15cIl0rKVwiL2knLCAkdHh0LCAkbWF0Y2gpOwogICAgICAgICRkYXRhWydyZXNwb25zZSddID0gJG1hdGNoWzFdOwogICAgICAgIHJldHVybiAkZGF0YTsKICAgIH0KCgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/FirePHP.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqICoqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCiAqICAKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRmlyZVBIUCAoaHR0cDovL3d3dy5maXJlcGhwLm9yZy8pLgogKiAKICogU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgKE5ldyBCU0QgTGljZW5zZSkKICogCiAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBDaHJpc3RvcGggRG9ybgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKiAKICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogKiAgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogKiAKICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAogKiAgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCiAqICAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAKICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBDaHJpc3RvcGggRG9ybiBub3IgdGhlIG5hbWVzIG9mIGl0cwogKiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCiAqICAgICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKiAKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAogKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAogKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogKiAKICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKioKICogCiAqIEBjb3B5cmlnaHQgICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBDaHJpc3RvcGggRG9ybgogKiBAYXV0aG9yICAgICAgQ2hyaXN0b3BoIERvcm4gPGNocmlzdG9waEBjaHJpc3RvcGhkb3JuLmNvbT4KICogQGxpY2Vuc2UgICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwCiAqIEBwYWNrYWdlICAgICBGaXJlUEhQCiAqLwogCiAKLyoqCiAqIFNlbmRzIHRoZSBnaXZlbiBkYXRhIHRvIHRoZSBGaXJlUEhQIEZpcmVmb3ggRXh0ZW5zaW9uLgogKiBUaGUgZGF0YSBjYW4gYmUgZGlzcGxheWVkIGluIHRoZSBGaXJlYnVnIENvbnNvbGUgb3IgaW4gdGhlCiAqICJTZXJ2ZXIiIHJlcXVlc3QgdGFiLgogKiAKICogRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOiBodHRwOi8vd3d3LmZpcmVwaHAub3JnLwogKiAKICogQGNvcHlyaWdodCAgIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IENocmlzdG9waCBEb3JuCiAqIEBhdXRob3IgICAgICBDaHJpc3RvcGggRG9ybiA8Y2hyaXN0b3BoQGNocmlzdG9waGRvcm4uY29tPgogKiBAbGljZW5zZSAgICAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAKICogQHBhY2thZ2UgICAgIEZpcmVQSFAKICovCmNsYXNzIEZpcmVQSFAgewogIAogIC8qKgogICAqIEZpcmVQSFAgdmVyc2lvbgogICAqCiAgICogQHZhciBzdHJpbmcKICAgKi8KICBjb25zdCBWRVJTSU9OID0gJzAuMi4wJzsKICAKICAvKioKICAgKiBGaXJlYnVnIExPRyBsZXZlbAogICAqCiAgICogTG9ncyBhIG1lc3NhZ2UgdG8gZmlyZWJ1ZyBjb25zb2xlLgogICAqIAogICAqIEB2YXIgc3RyaW5nCiAgICovCiAgY29uc3QgTE9HID0gJ0xPRyc7CiAgCiAgLyoqCiAgICogRmlyZWJ1ZyBJTkZPIGxldmVsCiAgICoKICAgKiBMb2dzIGEgbWVzc2FnZSB0byBmaXJlYnVnIGNvbnNvbGUgYW5kIGRpc3BsYXlzIGFuIGluZm8gaWNvbiBiZWZvcmUgdGhlIG1lc3NhZ2UuCiAgICogCiAgICogQHZhciBzdHJpbmcKICAgKi8KICBjb25zdCBJTkZPID0gJ0lORk8nOwogIAogIC8qKgogICAqIEZpcmVidWcgV0FSTiBsZXZlbAogICAqCiAgICogTG9ncyBhIG1lc3NhZ2UgdG8gZmlyZWJ1ZyBjb25zb2xlLCBkaXNwbGF5cyBhbiB3YXJuaW5nIGljb24gYmVmb3JlIHRoZSBtZXNzYWdlIGFuZCBjb2xvcnMgdGhlIGxpbmUgdHVycXVvaXNlLgogICAqIAogICAqIEB2YXIgc3RyaW5nCiAgICovCiAgY29uc3QgV0FSTiA9ICdXQVJOJzsKICAKICAvKioKICAgKiBGaXJlYnVnIEVSUk9SIGxldmVsCiAgICoKICAgKiBMb2dzIGEgbWVzc2FnZSB0byBmaXJlYnVnIGNvbnNvbGUsIGRpc3BsYXlzIGFuIGVycm9yIGljb24gYmVmb3JlIHRoZSBtZXNzYWdlIGFuZCBjb2xvcnMgdGhlIGxpbmUgeWVsbG93LiBBbHNvIGluY3JlbWVudHMgdGhlIGZpcmVidWcgZXJyb3IgY291bnQuCiAgICogCiAgICogQHZhciBzdHJpbmcKICAgKi8KICBjb25zdCBFUlJPUiA9ICdFUlJPUic7CiAgCiAgLyoqCiAgICogRHVtcHMgYSB2YXJpYWJsZSB0byBmaXJlYnVnJ3Mgc2VydmVyIHBhbmVsCiAgICoKICAgKiBAdmFyIHN0cmluZwogICAqLwogIGNvbnN0IERVTVAgPSAnRFVNUCc7CiAgCiAgLyoqCiAgICogRGlzcGxheXMgYSBzdGFjayB0cmFjZSBpbiBmaXJlYnVnIGNvbnNvbGUKICAgKgogICAqIEB2YXIgc3RyaW5nCiAgICovCiAgY29uc3QgVFJBQ0UgPSAnVFJBQ0UnOwogIAogIC8qKgogICAqIERpc3BsYXlzIGFuIGV4Y2VwdGlvbiBpbiBmaXJlYnVnIGNvbnNvbGUKICAgKiAKICAgKiBJbmNyZW1lbnRzIHRoZSBmaXJlYnVnIGVycm9yIGNvdW50LgogICAqCiAgICogQHZhciBzdHJpbmcKICAgKi8KICBjb25zdCBFWENFUFRJT04gPSAnRVhDRVBUSU9OJzsKICAKICAvKioKICAgKiBEaXNwbGF5cyBhbiB0YWJsZSBpbiBmaXJlYnVnIGNvbnNvbGUKICAgKgogICAqIEB2YXIgc3RyaW5nCiAgICovCiAgY29uc3QgVEFCTEUgPSAnVEFCTEUnOwogIAogIC8qKgogICAqIFN0YXJ0cyBhIGdyb3VwIGluIGZpcmVidWcgY29uc29sZQogICAqIAogICAqIEB2YXIgc3RyaW5nCiAgICovCiAgY29uc3QgR1JPVVBfU1RBUlQgPSAnR1JPVVBfU1RBUlQnOwogIAogIC8qKgogICAqIEVuZHMgYSBncm91cCBpbiBmaXJlYnVnIGNvbnNvbGUKICAgKiAKICAgKiBAdmFyIHN0cmluZwogICAqLwogIGNvbnN0IEdST1VQX0VORCA9ICdHUk9VUF9FTkQnOwogIAogIC8qKgogICAqIFNpbmdsZXRvbiBpbnN0YW5jZSBvZiBGaXJlUEhQCiAgICoKICAgKiBAdmFyIEZpcmVQSFAKICAgKi8KICBwcm90ZWN0ZWQgc3RhdGljICRpbnN0YW5jZSA9IG51bGw7CiAgCiAgLyoqCiAgICogV2lsZGZpcmUgcHJvdG9jb2wgbWVzc2FnZSBpbmRleAogICAqCiAgICogQHZhciBpbnQKICAgKi8KICBwcm90ZWN0ZWQgJG1lc3NhZ2VJbmRleCA9IDE7CiAgICAKICAvKioKICAgKiBPcHRpb25zIGZvciB0aGUgbGlicmFyeQogICAqIAogICAqIEB2YXIgYXJyYXkKICAgKi8KICBwcm90ZWN0ZWQgJG9wdGlvbnMgPSBhcnJheSgpOwogIAogIC8qKgogICAqIEZpbHRlcnMgdXNlZCB0byBleGNsdWRlIG9iamVjdCBtZW1iZXJzIHdoZW4gZW5jb2RpbmcKICAgKiAKICAgKiBAdmFyIGFycmF5CiAgICovCiAgcHJvdGVjdGVkICRvYmplY3RGaWx0ZXJzID0gYXJyYXkoKTsKICAKICAvKioKICAgKiBBIHN0YWNrIG9mIG9iamVjdHMgdXNlZCB0byBkZXRlY3QgcmVjdXJzaW9uIGR1cmluZyBvYmplY3QgZW5jb2RpbmcKICAgKiAKICAgKiBAdmFyIG9iamVjdAogICAqLwogIHByb3RlY3RlZCAkb2JqZWN0U3RhY2sgPSBhcnJheSgpOwogIAogIC8qKgogICAqIEZsYWcgdG8gZW5hYmxlL2Rpc2FibGUgbG9nZ2luZwogICAqIAogICAqIEB2YXIgYm9vbGVhbgogICAqLwogIHByb3RlY3RlZCAkZW5hYmxlZCA9IHRydWU7CiAgCiAgLyoqCiAgICogVGhlIG9iamVjdCBjb25zdHJ1Y3RvcgogICAqLwogIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgewogICAgJHRoaXMtPm9wdGlvbnNbJ21heE9iamVjdERlcHRoJ10gPSAxMDsKICAgICR0aGlzLT5vcHRpb25zWydtYXhBcnJheURlcHRoJ10gPSAyMDsKICAgICR0aGlzLT5vcHRpb25zWyd1c2VOYXRpdmVKc29uRW5jb2RlJ10gPSB0cnVlOwogICAgJHRoaXMtPm9wdGlvbnNbJ2luY2x1ZGVMaW5lTnVtYmVycyddID0gdHJ1ZTsKICB9CiAgICAKICAvKioKICAgKiBXaGVuIHRoZSBvYmplY3QgZ2V0cyBzZXJpYWxpemVkIG9ubHkgaW5jbHVkZSBzcGVjaWZpYyBvYmplY3QgbWVtYmVycy4KICAgKiAKICAgKiBAcmV0dXJuIGFycmF5CiAgICovICAKICBwdWJsaWMgZnVuY3Rpb24gX19zbGVlcCgpIHsKICAgIHJldHVybiBhcnJheSgnb3B0aW9ucycsJ29iamVjdEZpbHRlcnMnLCdlbmFibGVkJyk7CiAgfQogICAgCiAgLyoqCiAgICogR2V0cyBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgRmlyZVBIUAogICAqCiAgICogQHBhcmFtIGJvb2xlYW4gJEF1dG9DcmVhdGUKICAgKiBAcmV0dXJuIEZpcmVQSFAKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEluc3RhbmNlKCRBdXRvQ3JlYXRlPWZhbHNlKSB7CiAgICBpZigkQXV0b0NyZWF0ZT09PXRydWUgJiYgIXNlbGY6OiRpbnN0YW5jZSkgewogICAgICBzZWxmOjppbml0KCk7CiAgICB9CiAgICByZXR1cm4gc2VsZjo6JGluc3RhbmNlOwogIH0KICAgCiAgLyoqCiAgICogQ3JlYXRlcyBGaXJlUEhQIG9iamVjdCBhbmQgc3RvcmVzIGl0IGZvciBzaW5nbGV0b24gYWNjZXNzCiAgICoKICAgKiBAcmV0dXJuIEZpcmVQSFAKICAgKi8KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluaXQoKSB7CiAgICByZXR1cm4gc2VsZjo6JGluc3RhbmNlID0gbmV3IHNlbGYoKTsKICB9CiAgCiAgLyoqCiAgICogRW5hYmxlIGFuZCBkaXNhYmxlIGxvZ2dpbmcgdG8gRmlyZWJ1ZwogICAqIAogICAqIEBwYXJhbSBib29sZWFuICRFbmFibGVkIFRSVUUgdG8gZW5hYmxlLCBGQUxTRSB0byBkaXNhYmxlCiAgICogQHJldHVybiB2b2lkCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHNldEVuYWJsZWQoJEVuYWJsZWQpIHsKICAgICR0aGlzLT5lbmFibGVkID0gJEVuYWJsZWQ7CiAgfQogIAogIC8qKgogICAqIENoZWNrIGlmIGxvZ2dpbmcgaXMgZW5hYmxlZAogICAqIAogICAqIEByZXR1cm4gYm9vbGVhbiBUUlVFIGlmIGVuYWJsZWQKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZ2V0RW5hYmxlZCgpIHsKICAgIHJldHVybiAkdGhpcy0+ZW5hYmxlZDsKICB9CiAgCiAgLyoqCiAgICogU3BlY2lmeSBhIGZpbHRlciB0byBiZSB1c2VkIHdoZW4gZW5jb2RpbmcgYW4gb2JqZWN0CiAgICogCiAgICogRmlsdGVycyBhcmUgdXNlZCB0byBleGNsdWRlIG9iamVjdCBtZW1iZXJzLgogICAqIAogICAqIEBwYXJhbSBzdHJpbmcgJENsYXNzIFRoZSBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QKICAgKiBAcGFyYW0gYXJyYXkgJEZpbHRlciBBbiBhcnJheSBvciBtZW1iZXJzIHRvIGV4Y2x1ZGUKICAgKiBAcmV0dXJuIHZvaWQKICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gc2V0T2JqZWN0RmlsdGVyKCRDbGFzcywgJEZpbHRlcikgewogICAgJHRoaXMtPm9iamVjdEZpbHRlcnNbJENsYXNzXSA9ICRGaWx0ZXI7CiAgfQogIAogIC8qKgogICAqIFNldCBzb21lIG9wdGlvbnMgZm9yIHRoZSBsaWJyYXJ5CiAgICogCiAgICogT3B0aW9uczoKICAgKiAgLSBtYXhPYmplY3REZXB0aDogVGhlIG1heGltdW0gZGVwdGggdG8gdHJhdmVyc2Ugb2JqZWN0cyAoZGVmYXVsdDogMTApCiAgICogIC0gbWF4QXJyYXlEZXB0aDogVGhlIG1heGltdW0gZGVwdGggdG8gdHJhdmVyc2UgYXJyYXlzIChkZWZhdWx0OiAyMCkKICAgKiAgLSB1c2VOYXRpdmVKc29uRW5jb2RlOiBJZiB0cnVlIHdpbGwgdXNlIGpzb25fZW5jb2RlKCkgKGRlZmF1bHQ6IHRydWUpCiAgICogIC0gaW5jbHVkZUxpbmVOdW1iZXJzOiBJZiB0cnVlIHdpbGwgaW5jbHVkZSBsaW5lIG51bWJlcnMgYW5kIGZpbGVuYW1lcyAoZGVmYXVsdDogdHJ1ZSkKICAgKiAKICAgKiBAcGFyYW0gYXJyYXkgJE9wdGlvbnMgVGhlIG9wdGlvbnMgdG8gYmUgc2V0CiAgICogQHJldHVybiB2b2lkCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHNldE9wdGlvbnMoJE9wdGlvbnMpIHsKICAgICR0aGlzLT5vcHRpb25zID0gYXJyYXlfbWVyZ2UoJHRoaXMtPm9wdGlvbnMsJE9wdGlvbnMpOwogIH0KICAKICAvKioKICAgKiBSZWdpc3RlciBGaXJlUEhQIGFzIHlvdXIgZXJyb3IgaGFuZGxlcgogICAqIAogICAqIFdpbGwgdGhyb3cgZXhjZXB0aW9ucyBmb3IgZWFjaCBwaHAgZXJyb3IuCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyRXJyb3JIYW5kbGVyKCkKICB7CiAgICAvL05PVEU6IFRoZSBmb2xsb3dpbmcgZXJyb3JzIHdpbGwgbm90IGJlIGNhdWdodCBieSB0aGlzIGVycm9yIGhhbmRsZXI6CiAgICAvLyAgICAgIEVfRVJST1IsIEVfUEFSU0UsIEVfQ09SRV9FUlJPUiwKICAgIC8vICAgICAgRV9DT1JFX1dBUk5JTkcsIEVfQ09NUElMRV9FUlJPUiwKICAgIC8vICAgICAgRV9DT01QSUxFX1dBUk5JTkcsIEVfU1RSSUNUCiAgICAKICAgIHNldF9lcnJvcl9oYW5kbGVyKGFycmF5KCR0aGlzLCdlcnJvckhhbmRsZXInKSk7ICAgICAKICB9CgogIC8qKgogICAqIEZpcmVQSFAncyBlcnJvciBoYW5kbGVyCiAgICogCiAgICogVGhyb3dzIGV4Y2VwdGlvbiBmb3IgZWFjaCBwaHAgZXJyb3IgdGhhdCB3aWxsIG9jY3VyLgogICAqCiAgICogQHBhcmFtIGludCAkZXJybm8KICAgKiBAcGFyYW0gc3RyaW5nICRlcnJzdHIKICAgKiBAcGFyYW0gc3RyaW5nICRlcnJmaWxlCiAgICogQHBhcmFtIGludCAkZXJybGluZQogICAqIEBwYXJhbSBhcnJheSAkZXJyY29udGV4dAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBlcnJvckhhbmRsZXIoJGVycm5vLCAkZXJyc3RyLCAkZXJyZmlsZSwgJGVycmxpbmUsICRlcnJjb250ZXh0KQogIHsKICAgIC8vIERvbid0IHRocm93IGV4Y2VwdGlvbiBpZiBlcnJvciByZXBvcnRpbmcgaXMgc3dpdGNoZWQgb2ZmCiAgICBpZiAoZXJyb3JfcmVwb3J0aW5nKCkgPT0gMCkgewogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBPbmx5IHRocm93IGV4Y2VwdGlvbnMgZm9yIGVycm9ycyB3ZSBhcmUgYXNraW5nIGZvcgogICAgaWYgKGVycm9yX3JlcG9ydGluZygpICYgJGVycm5vKSB7CiAgICAgIHRocm93IG5ldyBFcnJvckV4Y2VwdGlvbigkZXJyc3RyLCAwLCAkZXJybm8sICRlcnJmaWxlLCAkZXJybGluZSk7CiAgICB9CiAgfQogIAogIC8qKgogICAqIFJlZ2lzdGVyIEZpcmVQSFAgYXMgeW91ciBleGNlcHRpb24gaGFuZGxlcgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlckV4Y2VwdGlvbkhhbmRsZXIoKQogIHsKICAgIHNldF9leGNlcHRpb25faGFuZGxlcihhcnJheSgkdGhpcywnZXhjZXB0aW9uSGFuZGxlcicpKTsgICAgIAogIH0KICAKICAvKioKICAgKiBGaXJlUEhQJ3MgZXhjZXB0aW9uIGhhbmRsZXIKICAgKiAKICAgKiBMb2dzIGFsbCBleGNlcHRpb25zIHRvIHlvdXIgZmlyZWJ1ZyBjb25zb2xlIGFuZCB0aGVuIHN0b3BzIHRoZSBzY3JpcHQuCiAgICoKICAgKiBAcGFyYW0gRXhjZXB0aW9uICRFeGNlcHRpb24KICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAqLwogIGZ1bmN0aW9uIGV4Y2VwdGlvbkhhbmRsZXIoJEV4Y2VwdGlvbikgewogICAgJHRoaXMtPmZiKCRFeGNlcHRpb24pOwogIH0KICAKICAvKioKICAgKiBTZXQgY3VzdG9tIHByb2Nlc3NvciB1cmwgZm9yIEZpcmVQSFAKICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJFVSTAogICAqLyAgICAKICBwdWJsaWMgZnVuY3Rpb24gc2V0UHJvY2Vzc29yVXJsKCRVUkwpCiAgewogICAgJHRoaXMtPnNldEhlYWRlcignWC1GaXJlUEhQLVByb2Nlc3NvclVSTCcsICRVUkwpOwogIH0KCiAgLyoqCiAgICogU2V0IGN1c3RvbSByZW5kZXJlciB1cmwgZm9yIEZpcmVQSFAKICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJFVSTAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzZXRSZW5kZXJlclVybCgkVVJMKQogIHsKICAgICR0aGlzLT5zZXRIZWFkZXIoJ1gtRmlyZVBIUC1SZW5kZXJlclVSTCcsICRVUkwpOwogIH0KICAKICAvKioKICAgKiBTdGFydCBhIGdyb3VwIGZvciBmb2xsb3dpbmcgbWVzc2FnZXMKICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJE5hbWUKICAgKiBAcmV0dXJuIHRydWUKICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBncm91cCgkTmFtZSkgewogICAgcmV0dXJuICR0aGlzLT5mYihudWxsLCAkTmFtZSwgRmlyZVBIUDo6R1JPVVBfU1RBUlQpOwogIH0KICAKICAvKioKICAgKiBFbmRzIGEgZ3JvdXAgeW91IGhhdmUgc3RhcnRlZCBiZWZvcmUKICAgKgogICAqIEByZXR1cm4gdHJ1ZQogICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdyb3VwRW5kKCkgewogICAgcmV0dXJuICR0aGlzLT5mYihudWxsLCBudWxsLCBGaXJlUEhQOjpHUk9VUF9FTkQpOwogIH0KCiAgLyoqCiAgICogTG9nIG9iamVjdCB3aXRoIGxhYmVsIHRvIGZpcmVidWcgY29uc29sZQogICAqCiAgICogQHNlZSBGaXJlUEhQOjpMT0cKICAgKiBAcGFyYW0gbWl4ZXMgJE9iamVjdAogICAqIEBwYXJhbSBzdHJpbmcgJExhYmVsCiAgICogQHJldHVybiB0cnVlCiAgICogQHRocm93cyBFeGNlcHRpb24KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gbG9nKCRPYmplY3QsICRMYWJlbD1udWxsKSB7CiAgICByZXR1cm4gJHRoaXMtPmZiKCRPYmplY3QsICRMYWJlbCwgRmlyZVBIUDo6TE9HKTsKICB9IAoKICAvKioKICAgKiBMb2cgb2JqZWN0IHdpdGggbGFiZWwgdG8gZmlyZWJ1ZyBjb25zb2xlCiAgICoKICAgKiBAc2VlIEZpcmVQSFA6OklORk8KICAgKiBAcGFyYW0gbWl4ZXMgJE9iamVjdAogICAqIEBwYXJhbSBzdHJpbmcgJExhYmVsCiAgICogQHJldHVybiB0cnVlCiAgICogQHRocm93cyBFeGNlcHRpb24KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gaW5mbygkT2JqZWN0LCAkTGFiZWw9bnVsbCkgewogICAgcmV0dXJuICR0aGlzLT5mYigkT2JqZWN0LCAkTGFiZWwsIEZpcmVQSFA6OklORk8pOwogIH0gCgogIC8qKgogICAqIExvZyBvYmplY3Qgd2l0aCBsYWJlbCB0byBmaXJlYnVnIGNvbnNvbGUKICAgKgogICAqIEBzZWUgRmlyZVBIUDo6V0FSTgogICAqIEBwYXJhbSBtaXhlcyAkT2JqZWN0CiAgICogQHBhcmFtIHN0cmluZyAkTGFiZWwKICAgKiBAcmV0dXJuIHRydWUKICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiB3YXJuKCRPYmplY3QsICRMYWJlbD1udWxsKSB7CiAgICByZXR1cm4gJHRoaXMtPmZiKCRPYmplY3QsICRMYWJlbCwgRmlyZVBIUDo6V0FSTik7CiAgfSAKCiAgLyoqCiAgICogTG9nIG9iamVjdCB3aXRoIGxhYmVsIHRvIGZpcmVidWcgY29uc29sZQogICAqCiAgICogQHNlZSBGaXJlUEhQOjpFUlJPUgogICAqIEBwYXJhbSBtaXhlcyAkT2JqZWN0CiAgICogQHBhcmFtIHN0cmluZyAkTGFiZWwKICAgKiBAcmV0dXJuIHRydWUKICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBlcnJvcigkT2JqZWN0LCAkTGFiZWw9bnVsbCkgewogICAgcmV0dXJuICR0aGlzLT5mYigkT2JqZWN0LCAkTGFiZWwsIEZpcmVQSFA6OkVSUk9SKTsKICB9IAoKICAvKioKICAgKiBEdW1wcyBrZXkgYW5kIHZhcmlhYmxlIHRvIGZpcmVidWcgc2VydmVyIHBhbmVsCiAgICoKICAgKiBAc2VlIEZpcmVQSFA6OkRVTVAKICAgKiBAcGFyYW0gc3RyaW5nICRLZXkKICAgKiBAcGFyYW0gbWl4ZWQgJFZhcmlhYmxlCiAgICogQHJldHVybiB0cnVlCiAgICogQHRocm93cyBFeGNlcHRpb24KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZHVtcCgkS2V5LCAkVmFyaWFibGUpIHsKICAgIHJldHVybiAkdGhpcy0+ZmIoJFZhcmlhYmxlLCAkS2V5LCBGaXJlUEhQOjpEVU1QKTsKICB9CiAgCiAgLyoqCiAgICogTG9nIGEgdHJhY2UgaW4gdGhlIGZpcmVidWcgY29uc29sZQogICAqCiAgICogQHNlZSBGaXJlUEhQOjpUUkFDRQogICAqIEBwYXJhbSBzdHJpbmcgJExhYmVsCiAgICogQHJldHVybiB0cnVlCiAgICogQHRocm93cyBFeGNlcHRpb24KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gdHJhY2UoJExhYmVsKSB7CiAgICByZXR1cm4gJHRoaXMtPmZiKCRMYWJlbCwgRmlyZVBIUDo6VFJBQ0UpOwogIH0gCgogIC8qKgogICAqIExvZyBhIHRhYmxlIGluIHRoZSBmaXJlYnVnIGNvbnNvbGUKICAgKgogICAqIEBzZWUgRmlyZVBIUDo6VEFCTEUKICAgKiBAcGFyYW0gc3RyaW5nICRMYWJlbAogICAqIEBwYXJhbSBzdHJpbmcgJFRhYmxlCiAgICogQHJldHVybiB0cnVlCiAgICogQHRocm93cyBFeGNlcHRpb24KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gdGFibGUoJExhYmVsLCAkVGFibGUpIHsKICAgIHJldHVybiAkdGhpcy0+ZmIoJFRhYmxlLCAkTGFiZWwsIEZpcmVQSFA6OlRBQkxFKTsKICB9CiAgCiAgLyoqCiAgICogQ2hlY2sgaWYgRmlyZVBIUCBpcyBpbnN0YWxsZWQgb24gY2xpZW50CiAgICoKICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgKi8KICBwdWJsaWMgZnVuY3Rpb24gZGV0ZWN0Q2xpZW50RXh0ZW5zaW9uKCkgewogICAgLyogQ2hlY2sgaWYgRmlyZVBIUCBpcyBpbnN0YWxsZWQgb24gY2xpZW50ICovCiAgICBpZighQHByZWdfbWF0Y2hfYWxsKCcvXHNGaXJlUEhQXC8oW1wufFxkXSopXHM/L3NpJywkdGhpcy0+Z2V0VXNlckFnZW50KCksJG0pIHx8CiAgICAgICAhdmVyc2lvbl9jb21wYXJlKCRtWzFdWzBdLCcwLjAuNicsJz49JykpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7ICAgIAogIH0KIAogIC8qKgogICAqIExvZyB2YXJpYmxlIHRvIEZpcmVidWcKICAgKiAKICAgKiBAc2VlIGh0dHA6Ly93d3cuZmlyZXBocC5vcmcvV2lraS9SZWZlcmVuY2UvRmIKICAgKiBAcGFyYW0gbWl4ZWQgJE9iamVjdCBUaGUgdmFyaWFibGUgdG8gYmUgbG9nZ2VkCiAgICogQHJldHVybiB0cnVlIFJldHVybiBUUlVFIGlmIG1lc3NhZ2Ugd2FzIGFkZGVkIHRvIGhlYWRlcnMsIEZBTFNFIG90aGVyd2lzZQogICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGZiKCRPYmplY3QpIHsKICAKICAgIGlmKCEkdGhpcy0+ZW5hYmxlZCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgCiAgICBpZiAoaGVhZGVyc19zZW50KCRmaWxlbmFtZSwgJGxpbmVudW0pKSB7CiAgICAgICAgdGhyb3cgJHRoaXMtPm5ld0V4Y2VwdGlvbignSGVhZGVycyBhbHJlYWR5IHNlbnQgaW4gJy4kZmlsZW5hbWUuJyBvbiBsaW5lICcuJGxpbmVudW0uJy4gQ2Fubm90IHNlbmQgbG9nIGRhdGEgdG8gRmlyZVBIUC4gWW91IG11c3QgaGF2ZSBPdXRwdXQgQnVmZmVyaW5nIGVuYWJsZWQgdmlhIG9iX3N0YXJ0KCkgb3Igb3V0cHV0X2J1ZmZlcmluZyBpbmkgZGlyZWN0aXZlLicpOwogICAgfQogIAogICAgJFR5cGUgPSBudWxsOwogICAgJExhYmVsID0gbnVsbDsKICAKICAgIGlmKGZ1bmNfbnVtX2FyZ3MoKT09MSkgewogICAgfSBlbHNlCiAgICBpZihmdW5jX251bV9hcmdzKCk9PTIpIHsKICAgICAgc3dpdGNoKGZ1bmNfZ2V0X2FyZygxKSkgewogICAgICAgIGNhc2Ugc2VsZjo6TE9HOgogICAgICAgIGNhc2Ugc2VsZjo6SU5GTzoKICAgICAgICBjYXNlIHNlbGY6OldBUk46CiAgICAgICAgY2FzZSBzZWxmOjpFUlJPUjoKICAgICAgICBjYXNlIHNlbGY6OkRVTVA6CiAgICAgICAgY2FzZSBzZWxmOjpUUkFDRToKICAgICAgICBjYXNlIHNlbGY6OkVYQ0VQVElPTjoKICAgICAgICBjYXNlIHNlbGY6OlRBQkxFOgogICAgICAgIGNhc2Ugc2VsZjo6R1JPVVBfU1RBUlQ6CiAgICAgICAgY2FzZSBzZWxmOjpHUk9VUF9FTkQ6CiAgICAgICAgICAkVHlwZSA9IGZ1bmNfZ2V0X2FyZygxKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAkTGFiZWwgPSBmdW5jX2dldF9hcmcoMSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSBlbHNlCiAgICBpZihmdW5jX251bV9hcmdzKCk9PTMpIHsKICAgICAgJFR5cGUgPSBmdW5jX2dldF9hcmcoMik7CiAgICAgICRMYWJlbCA9IGZ1bmNfZ2V0X2FyZygxKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICR0aGlzLT5uZXdFeGNlcHRpb24oJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gZmIoKSBmdW5jdGlvbiEnKTsKICAgIH0KICAKICAKICAgIGlmKCEkdGhpcy0+ZGV0ZWN0Q2xpZW50RXh0ZW5zaW9uKCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIAogICAgJG1ldGEgPSBhcnJheSgpOwogICAgJHNraXBGaW5hbE9iamVjdEVuY29kZSA9IGZhbHNlOwogIAogICAgaWYoJE9iamVjdCBpbnN0YW5jZW9mIEV4Y2VwdGlvbikgewoKICAgICAgJG1ldGFbJ2ZpbGUnXSA9ICR0aGlzLT5fZXNjYXBlVHJhY2VGaWxlKCRPYmplY3QtPmdldEZpbGUoKSk7CiAgICAgICRtZXRhWydsaW5lJ10gPSAkT2JqZWN0LT5nZXRMaW5lKCk7CiAgICAgIAogICAgICAkdHJhY2UgPSAkT2JqZWN0LT5nZXRUcmFjZSgpOwogICAgICBpZigkT2JqZWN0IGluc3RhbmNlb2YgRXJyb3JFeGNlcHRpb24KICAgICAgICAgJiYgaXNzZXQoJHRyYWNlWzBdWydmdW5jdGlvbiddKQogICAgICAgICAmJiAkdHJhY2VbMF1bJ2Z1bmN0aW9uJ109PSdlcnJvckhhbmRsZXInCiAgICAgICAgICYmIGlzc2V0KCR0cmFjZVswXVsnY2xhc3MnXSkKICAgICAgICAgJiYgJHRyYWNlWzBdWydjbGFzcyddPT0nRmlyZVBIUCcpIHsKICAgICAgICAgICAKICAgICAgICAkc2V2ZXJpdHkgPSBmYWxzZTsKICAgICAgICBzd2l0Y2goJE9iamVjdC0+Z2V0U2V2ZXJpdHkoKSkgewogICAgICAgICAgY2FzZSBFX1dBUk5JTkc6ICRzZXZlcml0eSA9ICdFX1dBUk5JTkcnOyBicmVhazsKICAgICAgICAgIGNhc2UgRV9OT1RJQ0U6ICRzZXZlcml0eSA9ICdFX05PVElDRSc7IGJyZWFrOwogICAgICAgICAgY2FzZSBFX1VTRVJfRVJST1I6ICRzZXZlcml0eSA9ICdFX1VTRVJfRVJST1InOyBicmVhazsKICAgICAgICAgIGNhc2UgRV9VU0VSX1dBUk5JTkc6ICRzZXZlcml0eSA9ICdFX1VTRVJfV0FSTklORyc7IGJyZWFrOwogICAgICAgICAgY2FzZSBFX1VTRVJfTk9USUNFOiAkc2V2ZXJpdHkgPSAnRV9VU0VSX05PVElDRSc7IGJyZWFrOwogICAgICAgICAgY2FzZSBFX1NUUklDVDogJHNldmVyaXR5ID0gJ0VfU1RSSUNUJzsgYnJlYWs7CiAgICAgICAgICBjYXNlIEVfUkVDT1ZFUkFCTEVfRVJST1I6ICRzZXZlcml0eSA9ICdFX1JFQ09WRVJBQkxFX0VSUk9SJzsgYnJlYWs7CiAgICAgICAgICBjYXNlIEVfREVQUkVDQVRFRDogJHNldmVyaXR5ID0gJ0VfREVQUkVDQVRFRCc7IGJyZWFrOwogICAgICAgICAgY2FzZSBFX1VTRVJfREVQUkVDQVRFRDogJHNldmVyaXR5ID0gJ0VfVVNFUl9ERVBSRUNBVEVEJzsgYnJlYWs7CiAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICRPYmplY3QgPSBhcnJheSgnQ2xhc3MnPT5nZXRfY2xhc3MoJE9iamVjdCksCiAgICAgICAgICAgICAgICAgICAgICAgICdNZXNzYWdlJz0+JHNldmVyaXR5Lic6ICcuJE9iamVjdC0+Z2V0TWVzc2FnZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAnRmlsZSc9PiR0aGlzLT5fZXNjYXBlVHJhY2VGaWxlKCRPYmplY3QtPmdldEZpbGUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICdMaW5lJz0+JE9iamVjdC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAnVHlwZSc9Pid0cmlnZ2VyJywKICAgICAgICAgICAgICAgICAgICAgICAgJ1RyYWNlJz0+JHRoaXMtPl9lc2NhcGVUcmFjZShhcnJheV9zcGxpY2UoJHRyYWNlLDIpKSk7CiAgICAgICAgJHNraXBGaW5hbE9iamVjdEVuY29kZSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJE9iamVjdCA9IGFycmF5KCdDbGFzcyc9PmdldF9jbGFzcygkT2JqZWN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgJ01lc3NhZ2UnPT4kT2JqZWN0LT5nZXRNZXNzYWdlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICdGaWxlJz0+JHRoaXMtPl9lc2NhcGVUcmFjZUZpbGUoJE9iamVjdC0+Z2V0RmlsZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgJ0xpbmUnPT4kT2JqZWN0LT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICdUeXBlJz0+J3Rocm93JywKICAgICAgICAgICAgICAgICAgICAgICAgJ1RyYWNlJz0+JHRoaXMtPl9lc2NhcGVUcmFjZSgkdHJhY2UpKTsKICAgICAgICAkc2tpcEZpbmFsT2JqZWN0RW5jb2RlID0gdHJ1ZTsKICAgICAgfQogICAgICAkVHlwZSA9IHNlbGY6OkVYQ0VQVElPTjsKICAgICAgCiAgICB9IGVsc2UKICAgIGlmKCRUeXBlPT1zZWxmOjpUUkFDRSkgewogICAgICAKICAgICAgJHRyYWNlID0gZGVidWdfYmFja3RyYWNlKCk7CiAgICAgIGlmKCEkdHJhY2UpIHJldHVybiBmYWxzZTsKICAgICAgZm9yKCAkaT0wIDsgJGk8c2l6ZW9mKCR0cmFjZSkgOyAkaSsrICkgewoKICAgICAgICBpZihpc3NldCgkdHJhY2VbJGldWydjbGFzcyddKQogICAgICAgICAgICYmIGlzc2V0KCR0cmFjZVskaV1bJ2ZpbGUnXSkKICAgICAgICAgICAmJiAoJHRyYWNlWyRpXVsnY2xhc3MnXT09J0ZpcmVQSFAnCiAgICAgICAgICAgICAgIHx8ICR0cmFjZVskaV1bJ2NsYXNzJ109PSdGQicpCiAgICAgICAgICAgJiYgKHN1YnN0cigkdGhpcy0+X3N0YW5kYXJkaXplUGF0aCgkdHJhY2VbJGldWydmaWxlJ10pLC0xOCwxOCk9PSdGaXJlUEhQQ29yZS9mYi5waHAnCiAgICAgICAgICAgICAgIHx8IHN1YnN0cigkdGhpcy0+X3N0YW5kYXJkaXplUGF0aCgkdHJhY2VbJGldWydmaWxlJ10pLC0yOSwyOSk9PSdGaXJlUEhQQ29yZS9GaXJlUEhQLmNsYXNzLnBocCcpKSB7CiAgICAgICAgICAvKiBTa2lwIC0gRkI6OnRyYWNlKCksIEZCOjpzZW5kKCksICRmaXJlcGhwLT50cmFjZSgpLCAkZmlyZXBocC0+ZmIoKSAqLwogICAgICAgIH0gZWxzZQogICAgICAgIGlmKGlzc2V0KCR0cmFjZVskaV1bJ2NsYXNzJ10pCiAgICAgICAgICAgJiYgaXNzZXQoJHRyYWNlWyRpKzFdWydmaWxlJ10pCiAgICAgICAgICAgJiYgJHRyYWNlWyRpXVsnY2xhc3MnXT09J0ZpcmVQSFAnCiAgICAgICAgICAgJiYgc3Vic3RyKCR0aGlzLT5fc3RhbmRhcmRpemVQYXRoKCR0cmFjZVskaSsxXVsnZmlsZSddKSwtMTgsMTgpPT0nRmlyZVBIUENvcmUvZmIucGhwJykgewogICAgICAgICAgLyogU2tpcCBmYigpICovCiAgICAgICAgfSBlbHNlCiAgICAgICAgaWYoJHRyYWNlWyRpXVsnZnVuY3Rpb24nXT09J2ZiJwogICAgICAgICAgIHx8ICR0cmFjZVskaV1bJ2Z1bmN0aW9uJ109PSd0cmFjZScKICAgICAgICAgICB8fCAkdHJhY2VbJGldWydmdW5jdGlvbiddPT0nc2VuZCcpIHsKICAgICAgICAgICRPYmplY3QgPSBhcnJheSgnQ2xhc3MnPT5pc3NldCgkdHJhY2VbJGldWydjbGFzcyddKT8kdHJhY2VbJGldWydjbGFzcyddOicnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdUeXBlJz0+aXNzZXQoJHRyYWNlWyRpXVsndHlwZSddKT8kdHJhY2VbJGldWyd0eXBlJ106JycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Z1bmN0aW9uJz0+aXNzZXQoJHRyYWNlWyRpXVsnZnVuY3Rpb24nXSk/JHRyYWNlWyRpXVsnZnVuY3Rpb24nXTonJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnTWVzc2FnZSc9PiR0cmFjZVskaV1bJ2FyZ3MnXVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnRmlsZSc9Pmlzc2V0KCR0cmFjZVskaV1bJ2ZpbGUnXSk/JHRoaXMtPl9lc2NhcGVUcmFjZUZpbGUoJHRyYWNlWyRpXVsnZmlsZSddKTonJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnTGluZSc9Pmlzc2V0KCR0cmFjZVskaV1bJ2xpbmUnXSk/JHRyYWNlWyRpXVsnbGluZSddOicnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdBcmdzJz0+aXNzZXQoJHRyYWNlWyRpXVsnYXJncyddKT8kdGhpcy0+ZW5jb2RlT2JqZWN0KCR0cmFjZVskaV1bJ2FyZ3MnXSk6JycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RyYWNlJz0+JHRoaXMtPl9lc2NhcGVUcmFjZShhcnJheV9zcGxpY2UoJHRyYWNlLCRpKzEpKSk7CgogICAgICAgICAgJHNraXBGaW5hbE9iamVjdEVuY29kZSA9IHRydWU7CiAgICAgICAgICAkbWV0YVsnZmlsZSddID0gaXNzZXQoJHRyYWNlWyRpXVsnZmlsZSddKT8kdGhpcy0+X2VzY2FwZVRyYWNlRmlsZSgkdHJhY2VbJGldWydmaWxlJ10pOicnOwogICAgICAgICAgJG1ldGFbJ2xpbmUnXSA9IGlzc2V0KCR0cmFjZVskaV1bJ2xpbmUnXSk/JHRyYWNlWyRpXVsnbGluZSddOicnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CgogICAgfSBlbHNlCiAgICBpZigkVHlwZT09c2VsZjo6VEFCTEUpIHsKICAgICAgCiAgICAgIGlmKGlzc2V0KCRPYmplY3RbMF0pICYmIGlzX3N0cmluZygkT2JqZWN0WzBdKSkgewogICAgICAgICRPYmplY3RbMV0gPSAkdGhpcy0+ZW5jb2RlVGFibGUoJE9iamVjdFsxXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgJE9iamVjdCA9ICR0aGlzLT5lbmNvZGVUYWJsZSgkT2JqZWN0KTsKICAgICAgfQoKICAgICAgJHNraXBGaW5hbE9iamVjdEVuY29kZSA9IHRydWU7CiAgICAgIAogICAgfSBlbHNlIHsKICAgICAgaWYoJFR5cGU9PT1udWxsKSB7CiAgICAgICAgJFR5cGUgPSBzZWxmOjpMT0c7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYoJHRoaXMtPm9wdGlvbnNbJ2luY2x1ZGVMaW5lTnVtYmVycyddKSB7CiAgICAgIGlmKCFpc3NldCgkbWV0YVsnZmlsZSddKSB8fCAhaXNzZXQoJG1ldGFbJ2xpbmUnXSkpIHsKCiAgICAgICAgJHRyYWNlID0gZGVidWdfYmFja3RyYWNlKCk7CiAgICAgICAgZm9yKCAkaT0wIDsgJHRyYWNlICYmICRpPHNpemVvZigkdHJhY2UpIDsgJGkrKyApIHsKICAKICAgICAgICAgIGlmKGlzc2V0KCR0cmFjZVskaV1bJ2NsYXNzJ10pCiAgICAgICAgICAgICAmJiBpc3NldCgkdHJhY2VbJGldWydmaWxlJ10pCiAgICAgICAgICAgICAmJiAoJHRyYWNlWyRpXVsnY2xhc3MnXT09J0ZpcmVQSFAnCiAgICAgICAgICAgICAgICAgfHwgJHRyYWNlWyRpXVsnY2xhc3MnXT09J0ZCJykKICAgICAgICAgICAgICYmIChzdWJzdHIoJHRoaXMtPl9zdGFuZGFyZGl6ZVBhdGgoJHRyYWNlWyRpXVsnZmlsZSddKSwtMTgsMTgpPT0nRmlyZVBIUENvcmUvZmIucGhwJwogICAgICAgICAgICAgICAgIHx8IHN1YnN0cigkdGhpcy0+X3N0YW5kYXJkaXplUGF0aCgkdHJhY2VbJGldWydmaWxlJ10pLC0yOSwyOSk9PSdGaXJlUEhQQ29yZS9GaXJlUEhQLmNsYXNzLnBocCcpKSB7CiAgICAgICAgICAgIC8qIFNraXAgLSBGQjo6dHJhY2UoKSwgRkI6OnNlbmQoKSwgJGZpcmVwaHAtPnRyYWNlKCksICRmaXJlcGhwLT5mYigpICovCiAgICAgICAgICB9IGVsc2UKICAgICAgICAgIGlmKGlzc2V0KCR0cmFjZVskaV1bJ2NsYXNzJ10pCiAgICAgICAgICAgICAmJiBpc3NldCgkdHJhY2VbJGkrMV1bJ2ZpbGUnXSkKICAgICAgICAgICAgICYmICR0cmFjZVskaV1bJ2NsYXNzJ109PSdGaXJlUEhQJwogICAgICAgICAgICAgJiYgc3Vic3RyKCR0aGlzLT5fc3RhbmRhcmRpemVQYXRoKCR0cmFjZVskaSsxXVsnZmlsZSddKSwtMTgsMTgpPT0nRmlyZVBIUENvcmUvZmIucGhwJykgewogICAgICAgICAgICAvKiBTa2lwIGZiKCkgKi8KICAgICAgICAgIH0gZWxzZQogICAgICAgICAgaWYoaXNzZXQoJHRyYWNlWyRpXVsnZmlsZSddKQogICAgICAgICAgICAgJiYgc3Vic3RyKCR0aGlzLT5fc3RhbmRhcmRpemVQYXRoKCR0cmFjZVskaV1bJ2ZpbGUnXSksLTE4LDE4KT09J0ZpcmVQSFBDb3JlL2ZiLnBocCcpIHsKICAgICAgICAgICAgLyogU2tpcCBGQjo6ZmIoKSAqLwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG1ldGFbJ2ZpbGUnXSA9IGlzc2V0KCR0cmFjZVskaV1bJ2ZpbGUnXSk/JHRoaXMtPl9lc2NhcGVUcmFjZUZpbGUoJHRyYWNlWyRpXVsnZmlsZSddKTonJzsKICAgICAgICAgICAgJG1ldGFbJ2xpbmUnXSA9IGlzc2V0KCR0cmFjZVskaV1bJ2xpbmUnXSk/JHRyYWNlWyRpXVsnbGluZSddOicnOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9ICAgICAgCiAgICAgIAogICAgICB9CiAgICB9IGVsc2UgewogICAgICB1bnNldCgkbWV0YVsnZmlsZSddKTsKICAgICAgdW5zZXQoJG1ldGFbJ2xpbmUnXSk7CiAgICB9CgogIAkkdGhpcy0+c2V0SGVhZGVyKCdYLVdmLVByb3RvY29sLTEnLCdodHRwOi8vbWV0YS53aWxkZmlyZWhxLm9yZy9Qcm90b2NvbC9Kc29uU3RyZWFtLzAuMicpOwogIAkkdGhpcy0+c2V0SGVhZGVyKCdYLVdmLTEtUGx1Z2luLTEnLCdodHRwOi8vbWV0YS5maXJlcGhwLm9yZy9XaWxkZmlyZS9QbHVnaW4vRmlyZVBIUC9MaWJyYXJ5LUZpcmVQSFBDb3JlLycuc2VsZjo6VkVSU0lPTik7CiAKICAgICRzdHJ1Y3R1cmVfaW5kZXggPSAxOwogICAgaWYoJFR5cGU9PXNlbGY6OkRVTVApIHsKICAgICAgJHN0cnVjdHVyZV9pbmRleCA9IDI7CiAgICAJJHRoaXMtPnNldEhlYWRlcignWC1XZi0xLVN0cnVjdHVyZS0yJywnaHR0cDovL21ldGEuZmlyZXBocC5vcmcvV2lsZGZpcmUvU3RydWN0dXJlL0ZpcmVQSFAvRHVtcC8wLjEnKTsKICAgIH0gZWxzZSB7CiAgICAJJHRoaXMtPnNldEhlYWRlcignWC1XZi0xLVN0cnVjdHVyZS0xJywnaHR0cDovL21ldGEuZmlyZXBocC5vcmcvV2lsZGZpcmUvU3RydWN0dXJlL0ZpcmVQSFAvRmlyZWJ1Z0NvbnNvbGUvMC4xJyk7CiAgICB9CiAgCiAgICBpZigkVHlwZT09c2VsZjo6RFVNUCkgewogICAgCSRtc2cgPSAneyInLiRMYWJlbC4nIjonLiR0aGlzLT5qc29uRW5jb2RlKCRPYmplY3QsICRza2lwRmluYWxPYmplY3RFbmNvZGUpLid9JzsKICAgIH0gZWxzZSB7CiAgICAgICRtc2dfbWV0YSA9IGFycmF5KCdUeXBlJz0+JFR5cGUpOwogICAgICBpZigkTGFiZWwhPT1udWxsKSB7CiAgICAgICAgJG1zZ19tZXRhWydMYWJlbCddID0gJExhYmVsOwogICAgICB9CiAgICAgIGlmKGlzc2V0KCRtZXRhWydmaWxlJ10pKSB7CiAgICAgICAgJG1zZ19tZXRhWydGaWxlJ10gPSAkbWV0YVsnZmlsZSddOwogICAgICB9CiAgICAgIGlmKGlzc2V0KCRtZXRhWydsaW5lJ10pKSB7CiAgICAgICAgJG1zZ19tZXRhWydMaW5lJ10gPSAkbWV0YVsnbGluZSddOwogICAgICB9CiAgICAJJG1zZyA9ICdbJy4kdGhpcy0+anNvbkVuY29kZSgkbXNnX21ldGEpLicsJy4kdGhpcy0+anNvbkVuY29kZSgkT2JqZWN0LCAkc2tpcEZpbmFsT2JqZWN0RW5jb2RlKS4nXSc7CiAgICB9CiAgICAKICAgICRwYXJ0cyA9IGV4cGxvZGUoIlxuIixjaHVua19zcGxpdCgkbXNnLCA1MDAwLCAiXG4iKSk7CgogICAgZm9yKCAkaT0wIDsgJGk8Y291bnQoJHBhcnRzKSA7ICRpKyspIHsKICAgICAgICAKICAgICAgICAkcGFydCA9ICRwYXJ0c1skaV07CiAgICAgICAgaWYgKCRwYXJ0KSB7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZihjb3VudCgkcGFydHMpPjIpIHsKICAgICAgICAgICAgICAvLyBNZXNzYWdlIG5lZWRzIHRvIGJlIHNwbGl0IGludG8gbXVsdGlwbGUgcGFydHMKICAgICAgICAgICAgICAkdGhpcy0+c2V0SGVhZGVyKCdYLVdmLTEtJy4kc3RydWN0dXJlX2luZGV4LictJy4nMS0nLiR0aGlzLT5tZXNzYWdlSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCRpPT0wKT9zdHJsZW4oJG1zZyk6JycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICd8JyAuICRwYXJ0IC4gJ3wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICgoJGk8Y291bnQoJHBhcnRzKS0yKT8nXFwnOicnKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgJHRoaXMtPnNldEhlYWRlcignWC1XZi0xLScuJHN0cnVjdHVyZV9pbmRleC4nLScuJzEtJy4kdGhpcy0+bWVzc2FnZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKCRwYXJ0KSAuICd8JyAuICRwYXJ0IC4gJ3wnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgJHRoaXMtPm1lc3NhZ2VJbmRleCsrOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCR0aGlzLT5tZXNzYWdlSW5kZXggPiA5OTk5OSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTWF4aW11bSBudW1iZXIgKDk5LDk5OSkgb2YgbWVzc2FnZXMgcmVhY2hlZCEnKTsgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIAkkdGhpcy0+c2V0SGVhZGVyKCdYLVdmLTEtSW5kZXgnLCR0aGlzLT5tZXNzYWdlSW5kZXgtMSk7CgogICAgcmV0dXJuIHRydWU7CiAgfQogIAogIC8qKgogICAqIFN0YW5kYXJkaXplcyBwYXRoIGZvciB3aW5kb3dzIHN5c3RlbXMuCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRQYXRoCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3N0YW5kYXJkaXplUGF0aCgkUGF0aCkgewogICAgcmV0dXJuIHByZWdfcmVwbGFjZSgnL1xcXFwrLycsJy8nLCRQYXRoKTsgICAgCiAgfQogIAogIC8qKgogICAqIEVzY2FwZSB0cmFjZSBwYXRoIGZvciB3aW5kb3dzIHN5c3RlbXMKICAgKgogICAqIEBwYXJhbSBhcnJheSAkVHJhY2UKICAgKiBAcmV0dXJuIGFycmF5CiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9lc2NhcGVUcmFjZSgkVHJhY2UpIHsKICAgIGlmKCEkVHJhY2UpIHJldHVybiAkVHJhY2U7CiAgICBmb3IoICRpPTAgOyAkaTxzaXplb2YoJFRyYWNlKSA7ICRpKysgKSB7CiAgICAgIGlmKGlzc2V0KCRUcmFjZVskaV1bJ2ZpbGUnXSkpIHsKICAgICAgICAkVHJhY2VbJGldWydmaWxlJ10gPSAkdGhpcy0+X2VzY2FwZVRyYWNlRmlsZSgkVHJhY2VbJGldWydmaWxlJ10pOwogICAgICB9CiAgICAgIGlmKGlzc2V0KCRUcmFjZVskaV1bJ2FyZ3MnXSkpIHsKICAgICAgICAkVHJhY2VbJGldWydhcmdzJ10gPSAkdGhpcy0+ZW5jb2RlT2JqZWN0KCRUcmFjZVskaV1bJ2FyZ3MnXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkVHJhY2U7ICAgIAogIH0KICAKICAvKioKICAgKiBFc2NhcGUgZmlsZSBpbmZvcm1hdGlvbiBvZiB0cmFjZSBmb3Igd2luZG93cyBzeXN0ZW1zCiAgICoKICAgKiBAcGFyYW0gc3RyaW5nICRGaWxlCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2VzY2FwZVRyYWNlRmlsZSgkRmlsZSkgewogICAgLyogQ2hlY2sgaWYgd2UgaGF2ZSBhIHdpbmRvd3MgZmlsZXBhdGggKi8KICAgIGlmKHN0cnBvcygkRmlsZSwnXFwnKSkgewogICAgICAvKiBGaXJzdCBzdHJpcCBkb3duIHRvIHNpbmdsZSBcICovCiAgICAgIAogICAgICAkZmlsZSA9IHByZWdfcmVwbGFjZSgnL1xcXFwrLycsJ1xcJywkRmlsZSk7CiAgICAgIAogICAgICByZXR1cm4gJGZpbGU7CiAgICB9CiAgICByZXR1cm4gJEZpbGU7CiAgfQoKICAvKioKICAgKiBTZW5kIGhlYWRlcgogICAqCiAgICogQHBhcmFtIHN0cmluZyAkTmFtZQogICAqIEBwYXJhbSBzdHJpbmdfdHlwZSAkVmFsdWUKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0SGVhZGVyKCROYW1lLCAkVmFsdWUpIHsKICAgIHJldHVybiBoZWFkZXIoJE5hbWUuJzogJy4kVmFsdWUpOwogIH0KCiAgLyoqCiAgICogR2V0IHVzZXIgYWdlbnQKICAgKgogICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlCiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHsKICAgIGlmKCFpc3NldCgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBleGNlcHRpb24KICAgKgogICAqIEBwYXJhbSBzdHJpbmcgJE1lc3NhZ2UKICAgKiBAcmV0dXJuIEV4Y2VwdGlvbgogICAqLwogIHByb3RlY3RlZCBmdW5jdGlvbiBuZXdFeGNlcHRpb24oJE1lc3NhZ2UpIHsKICAgIHJldHVybiBuZXcgRXhjZXB0aW9uKCRNZXNzYWdlKTsKICB9CiAgCiAgLyoqCiAgICogRW5jb2RlIGFuIG9iamVjdCBpbnRvIGEgSlNPTiBzdHJpbmcKICAgKiAKICAgKiBVc2VzIFBIUCdzIGplc29uX2VuY29kZSgpIGlmIGF2YWlsYWJsZQogICAqIAogICAqIEBwYXJhbSBvYmplY3QgJE9iamVjdCBUaGUgb2JqZWN0IHRvIGJlIGVuY29kZWQKICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgSlNPTiBzdHJpbmcKICAgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24ganNvbkVuY29kZSgkT2JqZWN0LCAkc2tpcE9iamVjdEVuY29kZT1mYWxzZSkKICB7CiAgICBpZighJHNraXBPYmplY3RFbmNvZGUpIHsKICAgICAgJE9iamVjdCA9ICR0aGlzLT5lbmNvZGVPYmplY3QoJE9iamVjdCk7CiAgICB9CiAgICAKICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnanNvbl9lbmNvZGUnKQogICAgICAgJiYgJHRoaXMtPm9wdGlvbnNbJ3VzZU5hdGl2ZUpzb25FbmNvZGUnXSE9ZmFsc2UpIHsKCiAgICAgIHJldHVybiBqc29uX2VuY29kZSgkT2JqZWN0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkdGhpcy0+anNvbl9lbmNvZGUoJE9iamVjdCk7CiAgICB9CiAgfQogIAogIC8qKgogICAqIEVuY29kZXMgYSB0YWJsZSBieSBlbmNvZGluZyBlYWNoIHJvdyBhbmQgY29sdW1uIHdpdGggZW5jb2RlT2JqZWN0KCkKICAgKiAKICAgKiBAcGFyYW0gYXJyYXkgJFRhYmxlIFRoZSB0YWJsZSB0byBiZSBlbmNvZGVkCiAgICogQHJldHVybiBhcnJheQogICAqLyAgCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZVRhYmxlKCRUYWJsZSkgewogICAgaWYoISRUYWJsZSkgcmV0dXJuICRUYWJsZTsKICAgIGZvciggJGk9MCA7ICRpPGNvdW50KCRUYWJsZSkgOyAkaSsrICkgewogICAgICBpZihpc19hcnJheSgkVGFibGVbJGldKSkgewogICAgICAgIGZvciggJGo9MCA7ICRqPGNvdW50KCRUYWJsZVskaV0pIDsgJGorKyApIHsKICAgICAgICAgICRUYWJsZVskaV1bJGpdID0gJHRoaXMtPmVuY29kZU9iamVjdCgkVGFibGVbJGldWyRqXSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gJFRhYmxlOwogIH0KICAKICAvKioKICAgKiBFbmNvZGVzIGFuIG9iamVjdCBpbmNsdWRpbmcgbWVtYmVycyB3aXRoCiAgICogcHJvdGVjdGVkIGFuZCBwcml2YXRlIHZpc2liaWxpdHkKICAgKiAKICAgKiBAcGFyYW0gT2JqZWN0ICRPYmplY3QgVGhlIG9iamVjdCB0byBiZSBlbmNvZGVkCiAgICogQHBhcmFtIGludCAkRGVwdGggVGhlIGN1cnJlbnQgdHJhdmVyc2FsIGRlcHRoCiAgICogQHJldHVybiBhcnJheSBBbGwgbWVtYmVycyBvZiB0aGUgb2JqZWN0CiAgICovCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZU9iamVjdCgkT2JqZWN0LCAkT2JqZWN0RGVwdGggPSAxLCAkQXJyYXlEZXB0aCA9IDEpCiAgewogICAgJHJldHVybiA9IGFycmF5KCk7CiAgICAKICAgIGlmIChpc19vYmplY3QoJE9iamVjdCkpIHsKCiAgICAgICAgaWYgKCRPYmplY3REZXB0aCA+ICR0aGlzLT5vcHRpb25zWydtYXhPYmplY3REZXB0aCddKSB7CiAgICAgICAgICByZXR1cm4gJyoqIE1heCBPYmplY3QgRGVwdGggKCcuJHRoaXMtPm9wdGlvbnNbJ21heE9iamVjdERlcHRoJ10uJykgKionOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBmb3JlYWNoICgkdGhpcy0+b2JqZWN0U3RhY2sgYXMgJHJlZlZhbCkgewogICAgICAgICAgICBpZiAoJHJlZlZhbCA9PT0gJE9iamVjdCkgewogICAgICAgICAgICAgICAgcmV0dXJuICcqKiBSZWN1cnNpb24gKCcuZ2V0X2NsYXNzKCRPYmplY3QpLicpICoqJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhcnJheV9wdXNoKCR0aGlzLT5vYmplY3RTdGFjaywgJE9iamVjdCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAkcmV0dXJuWydfX2NsYXNzTmFtZSddID0gJGNsYXNzID0gZ2V0X2NsYXNzKCRPYmplY3QpOwoKICAgICAgICAkcmVmbGVjdGlvbkNsYXNzID0gbmV3IFJlZmxlY3Rpb25DbGFzcygkY2xhc3MpOyAgCiAgICAgICAgJHByb3BlcnRpZXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICRyZWZsZWN0aW9uQ2xhc3MtPmdldFByb3BlcnRpZXMoKSBhcyAkcHJvcGVydHkpIHsKICAgICAgICAgICRwcm9wZXJ0aWVzWyRwcm9wZXJ0eS0+Z2V0TmFtZSgpXSA9ICRwcm9wZXJ0eTsKICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICRtZW1iZXJzID0gKGFycmF5KSRPYmplY3Q7CiAgICAgICAgICAgIAogICAgICAgIGZvcmVhY2goICRwcm9wZXJ0aWVzIGFzICRyYXdfbmFtZSA9PiAkcHJvcGVydHkgKSB7CiAgICAgICAgICAKICAgICAgICAgICRuYW1lID0gJHJhd19uYW1lOwogICAgICAgICAgaWYoJHByb3BlcnR5LT5pc1N0YXRpYygpKSB7CiAgICAgICAgICAgICRuYW1lID0gJ3N0YXRpYzonLiRuYW1lOwogICAgICAgICAgfQogICAgICAgICAgaWYoJHByb3BlcnR5LT5pc1B1YmxpYygpKSB7CiAgICAgICAgICAgICRuYW1lID0gJ3B1YmxpYzonLiRuYW1lOwogICAgICAgICAgfSBlbHNlCiAgICAgICAgICBpZigkcHJvcGVydHktPmlzUHJpdmF0ZSgpKSB7CiAgICAgICAgICAgICRuYW1lID0gJ3ByaXZhdGU6Jy4kbmFtZTsKICAgICAgICAgICAgJHJhd19uYW1lID0gIlwwIi4kY2xhc3MuIlwwIi4kcmF3X25hbWU7CiAgICAgICAgICB9IGVsc2UKICAgICAgICAgIGlmKCRwcm9wZXJ0eS0+aXNQcm90ZWN0ZWQoKSkgewogICAgICAgICAgICAkbmFtZSA9ICdwcm90ZWN0ZWQ6Jy4kbmFtZTsKICAgICAgICAgICAgJHJhd19uYW1lID0gIlwwIi4nKicuIlwwIi4kcmF3X25hbWU7CiAgICAgICAgICB9CiAgICAgICAgICAKICAgICAgICAgIGlmKCEoaXNzZXQoJHRoaXMtPm9iamVjdEZpbHRlcnNbJGNsYXNzXSkKICAgICAgICAgICAgICAgJiYgaXNfYXJyYXkoJHRoaXMtPm9iamVjdEZpbHRlcnNbJGNsYXNzXSkKICAgICAgICAgICAgICAgJiYgaW5fYXJyYXkoJHJhd19uYW1lLCR0aGlzLT5vYmplY3RGaWx0ZXJzWyRjbGFzc10pKSkgewoKICAgICAgICAgICAgaWYoYXJyYXlfa2V5X2V4aXN0cygkcmF3X25hbWUsJG1lbWJlcnMpCiAgICAgICAgICAgICAgICYmICEkcHJvcGVydHktPmlzU3RhdGljKCkpIHsKICAgICAgICAgICAgICAKICAgICAgICAgICAgICAkcmV0dXJuWyRuYW1lXSA9ICR0aGlzLT5lbmNvZGVPYmplY3QoJG1lbWJlcnNbJHJhd19uYW1lXSwgJE9iamVjdERlcHRoICsgMSwgMSk7ICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGlmKG1ldGhvZF9leGlzdHMoJHByb3BlcnR5LCdzZXRBY2Nlc3NpYmxlJykpIHsKICAgICAgICAgICAgICAgICRwcm9wZXJ0eS0+c2V0QWNjZXNzaWJsZSh0cnVlKTsKICAgICAgICAgICAgICAgICRyZXR1cm5bJG5hbWVdID0gJHRoaXMtPmVuY29kZU9iamVjdCgkcHJvcGVydHktPmdldFZhbHVlKCRPYmplY3QpLCAkT2JqZWN0RGVwdGggKyAxLCAxKTsKICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICBpZigkcHJvcGVydHktPmlzUHVibGljKCkpIHsKICAgICAgICAgICAgICAgICRyZXR1cm5bJG5hbWVdID0gJHRoaXMtPmVuY29kZU9iamVjdCgkcHJvcGVydHktPmdldFZhbHVlKCRPYmplY3QpLCAkT2JqZWN0RGVwdGggKyAxLCAxKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJldHVyblskbmFtZV0gPSAnKiogTmVlZCBQSFAgNS4zIHRvIGdldCB2YWx1ZSAqKic7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmV0dXJuWyRuYW1lXSA9ICcqKiBFeGNsdWRlZCBieSBGaWx0ZXIgKionOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBJbmNsdWRlIGFsbCBtZW1iZXJzIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBjbGFzcwogICAgICAgIC8vIGJ1dCBleGlzdCBpbiB0aGUgb2JqZWN0CiAgICAgICAgZm9yZWFjaCggJG1lbWJlcnMgYXMgJHJhd19uYW1lID0+ICR2YWx1ZSApIHsKICAgICAgICAgIAogICAgICAgICAgJG5hbWUgPSAkcmF3X25hbWU7CiAgICAgICAgICAKICAgICAgICAgIGlmICgkbmFtZXswfSA9PSAiXDAiKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoIlwwIiwgJG5hbWUpOwogICAgICAgICAgICAkbmFtZSA9ICRwYXJ0c1syXTsKICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgaWYoIWlzc2V0KCRwcm9wZXJ0aWVzWyRuYW1lXSkpIHsKICAgICAgICAgICAgJG5hbWUgPSAndW5kZWNsYXJlZDonLiRuYW1lOwogICAgICAgICAgICAgIAogICAgICAgICAgICBpZighKGlzc2V0KCR0aGlzLT5vYmplY3RGaWx0ZXJzWyRjbGFzc10pCiAgICAgICAgICAgICAgICAgJiYgaXNfYXJyYXkoJHRoaXMtPm9iamVjdEZpbHRlcnNbJGNsYXNzXSkKICAgICAgICAgICAgICAgICAmJiBpbl9hcnJheSgkcmF3X25hbWUsJHRoaXMtPm9iamVjdEZpbHRlcnNbJGNsYXNzXSkpKSB7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgJHJldHVyblskbmFtZV0gPSAkdGhpcy0+ZW5jb2RlT2JqZWN0KCR2YWx1ZSwgJE9iamVjdERlcHRoICsgMSwgMSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgJHJldHVyblskbmFtZV0gPSAnKiogRXhjbHVkZWQgYnkgRmlsdGVyICoqJzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBhcnJheV9wb3AoJHRoaXMtPm9iamVjdFN0YWNrKTsKICAgICAgICAKICAgIH0gZWxzZWlmIChpc19hcnJheSgkT2JqZWN0KSkgewoKICAgICAgICBpZiAoJEFycmF5RGVwdGggPiAkdGhpcy0+b3B0aW9uc1snbWF4QXJyYXlEZXB0aCddKSB7CiAgICAgICAgICByZXR1cm4gJyoqIE1heCBBcnJheSBEZXB0aCAoJy4kdGhpcy0+b3B0aW9uc1snbWF4QXJyYXlEZXB0aCddLicpICoqJzsKICAgICAgICB9CiAgICAgIAogICAgICAgIGZvcmVhY2ggKCRPYmplY3QgYXMgJGtleSA9PiAkdmFsKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIEVuY29kaW5nIHRoZSAkR0xPQkFMUyBQSFAgYXJyYXkgY2F1c2VzIGFuIGluZmluaXRlIGxvb3AKICAgICAgICAgIC8vIGlmIHRoZSByZWN1cnNpb24gaXMgbm90IHJlc2V0IGhlcmUgYXMgaXQgY29udGFpbnMKICAgICAgICAgIC8vIGEgcmVmZXJlbmNlIHRvIGl0c2VsZi4gVGhpcyBpcyB0aGUgb25seSB3YXkgSSBoYXZlIGNvbWUgdXAKICAgICAgICAgIC8vIHdpdGggdG8gc3RvcCBpbmZpbml0ZSByZWN1cnNpb24gaW4gdGhpcyBjYXNlLgogICAgICAgICAgaWYoJGtleT09J0dMT0JBTFMnCiAgICAgICAgICAgICAmJiBpc19hcnJheSgkdmFsKQogICAgICAgICAgICAgJiYgYXJyYXlfa2V5X2V4aXN0cygnR0xPQkFMUycsJHZhbCkpIHsKICAgICAgICAgICAgJHZhbFsnR0xPQkFMUyddID0gJyoqIFJlY3Vyc2lvbiAoR0xPQkFMUykgKionOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAkcmV0dXJuWyRrZXldID0gJHRoaXMtPmVuY29kZU9iamVjdCgkdmFsLCAxLCAkQXJyYXlEZXB0aCArIDEpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmKHNlbGY6OmlzX3V0ZjgoJE9iamVjdCkpIHsKICAgICAgICByZXR1cm4gJE9iamVjdDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdXRmOF9lbmNvZGUoJE9iamVjdCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcmV0dXJuOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmICRzdHJpbmcgaXMgdmFsaWQgVVRGLTggYW5kIGZhbHNlIG90aGVyd2lzZS4KICAgKgogICAqIEBwYXJhbSBtaXhlZCAkc3RyIFN0cmluZyB0byBiZSB0ZXN0ZWQKICAgKiBAcmV0dXJuIGJvb2xlYW4KICAgKi8KICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGlzX3V0ZjgoJHN0cikgewogICAgJGM9MDsgJGI9MDsKICAgICRiaXRzPTA7CiAgICAkbGVuPXN0cmxlbigkc3RyKTsKICAgIGZvcigkaT0wOyAkaTwkbGVuOyAkaSsrKXsKICAgICAgICAkYz1vcmQoJHN0clskaV0pOwogICAgICAgIGlmKCRjID4gMTI4KXsKICAgICAgICAgICAgaWYoKCRjID49IDI1NCkpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgZWxzZWlmKCRjID49IDI1MikgJGJpdHM9NjsKICAgICAgICAgICAgZWxzZWlmKCRjID49IDI0OCkgJGJpdHM9NTsKICAgICAgICAgICAgZWxzZWlmKCRjID49IDI0MCkgJGJpdHM9NDsKICAgICAgICAgICAgZWxzZWlmKCRjID49IDIyNCkgJGJpdHM9MzsKICAgICAgICAgICAgZWxzZWlmKCRjID49IDE5MikgJGJpdHM9MjsKICAgICAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGlmKCgkaSskYml0cykgPiAkbGVuKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHdoaWxlKCRiaXRzID4gMSl7CiAgICAgICAgICAgICAgICAkaSsrOwogICAgICAgICAgICAgICAgJGI9b3JkKCRzdHJbJGldKTsKICAgICAgICAgICAgICAgIGlmKCRiIDwgMTI4IHx8ICRiID4gMTkxKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAkYml0cy0tOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfSAKCiAgLyoqCiAgICogQ29udmVydHMgdG8gYW5kIGZyb20gSlNPTiBmb3JtYXQuCiAgICoKICAgKiBKU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgaXMgYSBsaWdodHdlaWdodCBkYXRhLWludGVyY2hhbmdlCiAgICogZm9ybWF0LiBJdCBpcyBlYXN5IGZvciBodW1hbnMgdG8gcmVhZCBhbmQgd3JpdGUuIEl0IGlzIGVhc3kgZm9yIG1hY2hpbmVzCiAgICogdG8gcGFyc2UgYW5kIGdlbmVyYXRlLiBJdCBpcyBiYXNlZCBvbiBhIHN1YnNldCBvZiB0aGUgSmF2YVNjcmlwdAogICAqIFByb2dyYW1taW5nIExhbmd1YWdlLCBTdGFuZGFyZCBFQ01BLTI2MiAzcmQgRWRpdGlvbiAtIERlY2VtYmVyIDE5OTkuCiAgICogVGhpcyBmZWF0dXJlIGNhbiBhbHNvIGJlIGZvdW5kIGluICBQeXRob24uIEpTT04gaXMgYSB0ZXh0IGZvcm1hdCB0aGF0IGlzCiAgICogY29tcGxldGVseSBsYW5ndWFnZSBpbmRlcGVuZGVudCBidXQgdXNlcyBjb252ZW50aW9ucyB0aGF0IGFyZSBmYW1pbGlhcgogICAqIHRvIHByb2dyYW1tZXJzIG9mIHRoZSBDLWZhbWlseSBvZiBsYW5ndWFnZXMsIGluY2x1ZGluZyBDLCBDKyssIEMjLCBKYXZhLAogICAqIEphdmFTY3JpcHQsIFBlcmwsIFRDTCwgYW5kIG1hbnkgb3RoZXJzLiBUaGVzZSBwcm9wZXJ0aWVzIG1ha2UgSlNPTiBhbgogICAqIGlkZWFsIGRhdGEtaW50ZXJjaGFuZ2UgbGFuZ3VhZ2UuCiAgICoKICAgKiBUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBzaW1wbGUgZW5jb2RlciBhbmQgZGVjb2RlciBmb3IgSlNPTiBub3RhdGlvbi4gSXQKICAgKiBpcyBpbnRlbmRlZCBmb3IgdXNlIHdpdGggY2xpZW50LXNpZGUgSmF2YXNjcmlwdCBhcHBsaWNhdGlvbnMgdGhhdCBtYWtlCiAgICogdXNlIG9mIEhUVFBSZXF1ZXN0IHRvIHBlcmZvcm0gc2VydmVyIGNvbW11bmljYXRpb24gZnVuY3Rpb25zIC0gZGF0YSBjYW4KICAgKiBiZSBlbmNvZGVkIGludG8gSlNPTiBub3RhdGlvbiBmb3IgdXNlIGluIGEgY2xpZW50LXNpZGUgamF2YXNjcmlwdCwgb3IKICAgKiBkZWNvZGVkIGZyb20gaW5jb21pbmcgSmF2YXNjcmlwdCByZXF1ZXN0cy4gSlNPTiBmb3JtYXQgaXMgbmF0aXZlIHRvCiAgICogSmF2YXNjcmlwdCwgYW5kIGNhbiBiZSBkaXJlY3RseSBldmFsKCknZWQgd2l0aCBubyBmdXJ0aGVyIHBhcnNpbmcKICAgKiBvdmVyaGVhZAogICAqCiAgICogQWxsIHN0cmluZ3Mgc2hvdWxkIGJlIGluIEFTQ0lJIG9yIFVURi04IGZvcm1hdCEKICAgKgogICAqIExJQ0VOU0U6IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKICAgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKICAgKiBjb25kaXRpb25zIGFyZSBtZXQ6IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUKICAgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwogICAqIGRpc2NsYWltZXIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKICAgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCiAgICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICAqIGRpc3RyaWJ1dGlvbi4KICAgKgogICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECiAgICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgogICAqIE5PIEVWRU5UIFNIQUxMIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAogICAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCiAgICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCiAgICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAogICAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgogICAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKICAgKiBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICiAgICogREFNQUdFLgogICAqCiAgICogQGNhdGVnb3J5CiAgICogQHBhY2thZ2UgICAgIFNlcnZpY2VzX0pTT04KICAgKiBAYXV0aG9yICAgICAgTWljaGFsIE1pZ3Vyc2tpIDxtaWtlLWpzb25AdGVjem5vLmNvbT4KICAgKiBAYXV0aG9yICAgICAgTWF0dCBLbmFwcCA8bWRrbmFwcFthdF1nbWFpbFtkb3RdY29tPgogICAqIEBhdXRob3IgICAgICBCcmV0dCBTdGltbWVybWFuIDxicmV0dHN0aW1tZXJtYW5bYXRdZ21haWxbZG90XWNvbT4KICAgKiBAYXV0aG9yICAgICAgQ2hyaXN0b3BoIERvcm4gPGNocmlzdG9waEBjaHJpc3RvcGhkb3JuLmNvbT4KICAgKiBAY29weXJpZ2h0ICAgMjAwNSBNaWNoYWwgTWlndXJza2kKICAgKiBAdmVyc2lvbiAgICAgQ1ZTOiAkSWQ6IEpTT04ucGhwLHYgMS4zMSAyMDA2LzA2LzI4IDA1OjU0OjE3IG1pZ3Vyc2tpIEV4cCAkCiAgICogQGxpY2Vuc2UgICAgIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwCiAgICogQGxpbmsgICAgICAgIGh0dHA6Ly9wZWFyLnBocC5uZXQvcGVwci9wZXByLXByb3Bvc2FsLXNob3cucGhwP2lkPTE5OAogICAqLwogICAKICAgICAKICAvKioKICAgKiBLZWVwIGEgbGlzdCBvZiBvYmplY3RzIGFzIHdlIGRlc2NlbmQgaW50byB0aGUgYXJyYXkgc28gd2UgY2FuIGRldGVjdCByZWN1cnNpb24uCiAgICovCiAgcHJpdmF0ZSAkanNvbl9vYmplY3RTdGFjayA9IGFycmF5KCk7CgoKIC8qKgogICogY29udmVydCBhIHN0cmluZyBmcm9tIG9uZSBVVEYtOCBjaGFyIHRvIG9uZSBVVEYtMTYgY2hhcgogICoKICAqIE5vcm1hbGx5IHNob3VsZCBiZSBoYW5kbGVkIGJ5IG1iX2NvbnZlcnRfZW5jb2RpbmcsIGJ1dAogICogcHJvdmlkZXMgYSBzbG93ZXIgUEhQLW9ubHkgbWV0aG9kIGZvciBpbnN0YWxsYXRpb25zCiAgKiB0aGF0IGxhY2sgdGhlIG11bHRpYnllIHN0cmluZyBleHRlbnNpb24uCiAgKgogICogQHBhcmFtICAgIHN0cmluZyAgJHV0ZjggICBVVEYtOCBjaGFyYWN0ZXIKICAqIEByZXR1cm4gICBzdHJpbmcgIFVURi0xNiBjaGFyYWN0ZXIKICAqIEBhY2Nlc3MgICBwcml2YXRlCiAgKi8KICBwcml2YXRlIGZ1bmN0aW9uIGpzb25fdXRmODJ1dGYxNigkdXRmOCkKICB7CiAgICAgIC8vIG9oIHBsZWFzZSBvaCBwbGVhc2Ugb2ggcGxlYXNlIG9oIHBsZWFzZSBvaCBwbGVhc2UKICAgICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdtYl9jb252ZXJ0X2VuY29kaW5nJykpIHsKICAgICAgICAgIHJldHVybiBtYl9jb252ZXJ0X2VuY29kaW5nKCR1dGY4LCAnVVRGLTE2JywgJ1VURi04Jyk7CiAgICAgIH0KCiAgICAgIHN3aXRjaChzdHJsZW4oJHV0ZjgpKSB7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgLy8gdGhpcyBjYXNlIHNob3VsZCBuZXZlciBiZSByZWFjaGVkLCBiZWNhdXNlIHdlIGFyZSBpbiBBU0NJSSByYW5nZQogICAgICAgICAgICAgIC8vIHNlZTogaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOAogICAgICAgICAgICAgIHJldHVybiAkdXRmODsKCiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgLy8gcmV0dXJuIGEgVVRGLTE2IGNoYXJhY3RlciBmcm9tIGEgMi1ieXRlIFVURi04IGNoYXIKICAgICAgICAgICAgICAvLyBzZWU6IGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgKICAgICAgICAgICAgICByZXR1cm4gY2hyKDB4MDcgJiAob3JkKCR1dGY4ezB9KSA+PiAyKSkKICAgICAgICAgICAgICAgICAgIC4gY2hyKCgweEMwICYgKG9yZCgkdXRmOHswfSkgPDwgNikpCiAgICAgICAgICAgICAgICAgICAgICAgfCAoMHgzRiAmIG9yZCgkdXRmOHsxfSkpKTsKCiAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgLy8gcmV0dXJuIGEgVVRGLTE2IGNoYXJhY3RlciBmcm9tIGEgMy1ieXRlIFVURi04IGNoYXIKICAgICAgICAgICAgICAvLyBzZWU6IGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91bmljb2RlLmh0bWwjdXRmLTgKICAgICAgICAgICAgICByZXR1cm4gY2hyKCgweEYwICYgKG9yZCgkdXRmOHswfSkgPDwgNCkpCiAgICAgICAgICAgICAgICAgICAgICAgfCAoMHgwRiAmIChvcmQoJHV0Zjh7MX0pID4+IDIpKSkKICAgICAgICAgICAgICAgICAgIC4gY2hyKCgweEMwICYgKG9yZCgkdXRmOHsxfSkgPDwgNikpCiAgICAgICAgICAgICAgICAgICAgICAgfCAoMHg3RiAmIG9yZCgkdXRmOHsyfSkpKTsKICAgICAgfQoKICAgICAgLy8gaWdub3JpbmcgVVRGLTMyIGZvciBub3csIHNvcnJ5CiAgICAgIHJldHVybiAnJzsKICB9CgogLyoqCiAgKiBlbmNvZGVzIGFuIGFyYml0cmFyeSB2YXJpYWJsZSBpbnRvIEpTT04gZm9ybWF0CiAgKgogICogQHBhcmFtICAgIG1peGVkICAgJHZhciAgICBhbnkgbnVtYmVyLCBib29sZWFuLCBzdHJpbmcsIGFycmF5LCBvciBvYmplY3QgdG8gYmUgZW5jb2RlZC4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlIGFyZ3VtZW50IDEgdG8gU2VydmljZXNfSlNPTigpIGFib3ZlIGZvciBhcnJheS1wYXJzaW5nIGJlaGF2aW9yLgogICogICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YXIgaXMgYSBzdHJuZywgbm90ZSB0aGF0IGVuY29kZSgpIGFsd2F5cyBleHBlY3RzIGl0CiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGluIEFTQ0lJIG9yIFVURi04IGZvcm1hdCEKICAqCiAgKiBAcmV0dXJuICAgbWl4ZWQgICBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnB1dCB2YXIgb3IgYW4gZXJyb3IgaWYgYSBwcm9ibGVtIG9jY3VycwogICogQGFjY2VzcyAgIHB1YmxpYwogICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBqc29uX2VuY29kZSgkdmFyKQogIHsKICAgIAogICAgaWYoaXNfb2JqZWN0KCR2YXIpKSB7CiAgICAgIGlmKGluX2FycmF5KCR2YXIsJHRoaXMtPmpzb25fb2JqZWN0U3RhY2spKSB7CiAgICAgICAgcmV0dXJuICciKiogUmVjdXJzaW9uICoqIic7CiAgICAgIH0KICAgIH0KICAgICAgICAgIAogICAgICBzd2l0Y2ggKGdldHR5cGUoJHZhcikpIHsKICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgICAgICAgIHJldHVybiAkdmFyID8gJ3RydWUnIDogJ2ZhbHNlJzsKCiAgICAgICAgICBjYXNlICdOVUxMJzoKICAgICAgICAgICAgICByZXR1cm4gJ251bGwnOwoKICAgICAgICAgIGNhc2UgJ2ludGVnZXInOgogICAgICAgICAgICAgIHJldHVybiAoaW50KSAkdmFyOwoKICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6CiAgICAgICAgICBjYXNlICdmbG9hdCc6CiAgICAgICAgICAgICAgcmV0dXJuIChmbG9hdCkgJHZhcjsKCiAgICAgICAgICBjYXNlICdzdHJpbmcnOgogICAgICAgICAgICAgIC8vIFNUUklOR1MgQVJFIEVYUEVDVEVEIFRPIEJFIElOIEFTQ0lJIE9SIFVURi04IEZPUk1BVAogICAgICAgICAgICAgICRhc2NpaSA9ICcnOwogICAgICAgICAgICAgICRzdHJsZW5fdmFyID0gc3RybGVuKCR2YXIpOwoKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBJdGVyYXRlIG92ZXIgZXZlcnkgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcsCiAgICAgICAgICAgICAgKiBlc2NhcGluZyB3aXRoIGEgc2xhc2ggb3IgZW5jb2RpbmcgdG8gVVRGLTggd2hlcmUgbmVjZXNzYXJ5CiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICBmb3IgKCRjID0gMDsgJGMgPCAkc3RybGVuX3ZhcjsgKyskYykgewoKICAgICAgICAgICAgICAgICAgJG9yZF92YXJfYyA9IG9yZCgkdmFyeyRjfSk7CgogICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJG9yZF92YXJfYyA9PSAweDA4OgogICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSAnXGInOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAkb3JkX3Zhcl9jID09IDB4MDk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49ICdcdCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlICRvcmRfdmFyX2MgPT0gMHgwQToKICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNjaWkgLj0gJ1xuJzsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJG9yZF92YXJfYyA9PSAweDBDOgogICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSAnXGYnOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAkb3JkX3Zhcl9jID09IDB4MEQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49ICdccic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgY2FzZSAkb3JkX3Zhcl9jID09IDB4MjI6CiAgICAgICAgICAgICAgICAgICAgICBjYXNlICRvcmRfdmFyX2MgPT0gMHgyRjoKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJG9yZF92YXJfYyA9PSAweDVDOgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvdWJsZSBxdW90ZSwgc2xhc2gsIHNsb3NoCiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49ICdcXCcuJHZhcnskY307CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgY2FzZSAoKCRvcmRfdmFyX2MgPj0gMHgyMCkgJiYgKCRvcmRfdmFyX2MgPD0gMHg3RikpOgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDAwMDAwMCAtIFUtMDAwMDAwN0YgKHNhbWUgYXMgQVNDSUkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFzY2lpIC49ICR2YXJ7JGN9OwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhFMCkgPT0gMHhDMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDAwMDgwIC0gVS0wMDAwMDdGRiwgbWFzayAxMTBYWFhYWAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsIG9yZCgkdmFyeyRjICsgMX0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAkYyArPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICR1dGYxNiA9ICR0aGlzLT5qc29uX3V0ZjgydXRmMTYoJGNoYXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSBzcHJpbnRmKCdcdSUwNHMnLCBiaW4yaGV4KCR1dGYxNikpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhGMCkgPT0gMHhFMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMDAwODAwIC0gVS0wMDAwRkZGRiwgbWFzayAxMTEwWFhYWAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgMX0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDJ9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+anNvbl91dGY4MnV0ZjE2KCRjaGFyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNjaWkgLj0gc3ByaW50ZignXHUlMDRzJywgYmluMmhleCgkdXRmMTYpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICBjYXNlICgoJG9yZF92YXJfYyAmIDB4RjgpID09IDB4RjApOgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYXJhY3RlcnMgVS0wMDAxMDAwMCAtIFUtMDAxRkZGRkYsIG1hc2sgMTExMTBYWFgKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3VuaWNvZGUuaHRtbCN1dGYtOAogICAgICAgICAgICAgICAgICAgICAgICAgICRjaGFyID0gcGFjaygnQyonLCAkb3JkX3Zhcl9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDF9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCR2YXJ7JGMgKyAyfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgM30pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAkYyArPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICR1dGYxNiA9ICR0aGlzLT5qc29uX3V0ZjgydXRmMTYoJGNoYXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSBzcHJpbnRmKCdcdSUwNHMnLCBiaW4yaGV4KCR1dGYxNikpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhGQykgPT0gMHhGOCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTAwMjAwMDAwIC0gVS0wM0ZGRkZGRiwgbWFzayAxMTExMTBYWAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgMX0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDJ9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCR2YXJ7JGMgKyAzfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgNH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAkYyArPSA0OwogICAgICAgICAgICAgICAgICAgICAgICAgICR1dGYxNiA9ICR0aGlzLT5qc29uX3V0ZjgydXRmMTYoJGNoYXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICRhc2NpaSAuPSBzcHJpbnRmKCdcdSUwNHMnLCBiaW4yaGV4KCR1dGYxNikpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKCgkb3JkX3Zhcl9jICYgMHhGRSkgPT0gMHhGQyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBVLTA0MDAwMDAwIC0gVS03RkZGRkZGRiwgbWFzayAxMTExMTEwWAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdW5pY29kZS5odG1sI3V0Zi04CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBwYWNrKCdDKicsICRvcmRfdmFyX2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgMX0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDJ9KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkKCR2YXJ7JGMgKyAzfSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZCgkdmFyeyRjICsgNH0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmQoJHZhcnskYyArIDV9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgJGMgKz0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgICAkdXRmMTYgPSAkdGhpcy0+anNvbl91dGY4MnV0ZjE2KCRjaGFyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAkYXNjaWkgLj0gc3ByaW50ZignXHUlMDRzJywgYmluMmhleCgkdXRmMTYpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgcmV0dXJuICciJy4kYXNjaWkuJyInOwoKICAgICAgICAgIGNhc2UgJ2FycmF5JzoKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBBcyBwZXIgSlNPTiBzcGVjIGlmIGFueSBhcnJheSBrZXkgaXMgbm90IGFuIGludGVnZXIKICAgICAgICAgICAgICAqIHdlIG11c3QgdHJlYXQgdGhlIHRoZSB3aG9sZSBhcnJheSBhcyBhbiBvYmplY3QuIFdlCiAgICAgICAgICAgICAgKiBhbHNvIHRyeSB0byBjYXRjaCBhIHNwYXJzZWx5IHBvcHVsYXRlZCBhc3NvY2lhdGl2ZQogICAgICAgICAgICAgICogYXJyYXkgd2l0aCBudW1lcmljIGtleXMgaGVyZSBiZWNhdXNlIHNvbWUgSlMgZW5naW5lcwogICAgICAgICAgICAgICogd2lsbCBjcmVhdGUgYW4gYXJyYXkgd2l0aCBlbXB0eSBpbmRleGVzIHVwIHRvCiAgICAgICAgICAgICAgKiBtYXhfaW5kZXggd2hpY2ggY2FuIGNhdXNlIG1lbW9yeSBpc3N1ZXMgYW5kIGJlY2F1c2UKICAgICAgICAgICAgICAqIHRoZSBrZXlzLCB3aGljaCBtYXkgYmUgcmVsZXZhbnQsIHdpbGwgYmUgcmVtYXBwZWQKICAgICAgICAgICAgICAqIG90aGVyd2lzZS4KICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgKiBBcyBwZXIgdGhlIEVDTUEgYW5kIEpTT04gc3BlY2lmaWNhdGlvbiBhbiBvYmplY3QgbWF5CiAgICAgICAgICAgICAgKiBoYXZlIGFueSBzdHJpbmcgYXMgYSBwcm9wZXJ0eS4gVW5mb3J0dW5hdGVseSBkdWUgdG8KICAgICAgICAgICAgICAqIGEgaG9sZSBpbiB0aGUgRUNNQSBzcGVjaWZpY2F0aW9uIGlmIHRoZSBrZXkgaXMgYQogICAgICAgICAgICAgICogRUNNQSByZXNlcnZlZCB3b3JkIG9yIHN0YXJ0cyB3aXRoIGEgZGlnaXQgdGhlCiAgICAgICAgICAgICAgKiBwYXJhbWV0ZXIgaXMgb25seSBhY2Nlc3NpYmxlIHVzaW5nIEVDTUFTY3JpcHQncwogICAgICAgICAgICAgICogYnJhY2tldCBub3RhdGlvbi4KICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAvLyB0cmVhdCBhcyBhIEpTT04gb2JqZWN0CiAgICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR2YXIpICYmIGNvdW50KCR2YXIpICYmIChhcnJheV9rZXlzKCR2YXIpICE9PSByYW5nZSgwLCBzaXplb2YoJHZhcikgLSAxKSkpIHsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICR0aGlzLT5qc29uX29iamVjdFN0YWNrW10gPSAkdmFyOwoKICAgICAgICAgICAgICAgICAgJHByb3BlcnRpZXMgPSBhcnJheV9tYXAoYXJyYXkoJHRoaXMsICdqc29uX25hbWVfdmFsdWUnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfa2V5cygkdmFyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfdmFsdWVzKCR2YXIpKTsKCiAgICAgICAgICAgICAgICAgIGFycmF5X3BvcCgkdGhpcy0+anNvbl9vYmplY3RTdGFjayk7CgogICAgICAgICAgICAgICAgICBmb3JlYWNoKCRwcm9wZXJ0aWVzIGFzICRwcm9wZXJ0eSkgewogICAgICAgICAgICAgICAgICAgICAgaWYoJHByb3BlcnR5IGluc3RhbmNlb2YgRXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwcm9wZXJ0eTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgcmV0dXJuICd7JyAuIGpvaW4oJywnLCAkcHJvcGVydGllcykgLiAnfSc7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAkdGhpcy0+anNvbl9vYmplY3RTdGFja1tdID0gJHZhcjsKCiAgICAgICAgICAgICAgLy8gdHJlYXQgaXQgbGlrZSBhIHJlZ3VsYXIgYXJyYXkKICAgICAgICAgICAgICAkZWxlbWVudHMgPSBhcnJheV9tYXAoYXJyYXkoJHRoaXMsICdqc29uX2VuY29kZScpLCAkdmFyKTsKCiAgICAgICAgICAgICAgYXJyYXlfcG9wKCR0aGlzLT5qc29uX29iamVjdFN0YWNrKTsKCiAgICAgICAgICAgICAgZm9yZWFjaCgkZWxlbWVudHMgYXMgJGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgaWYoJGVsZW1lbnQgaW5zdGFuY2VvZiBFeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZWxlbWVudDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgcmV0dXJuICdbJyAuIGpvaW4oJywnLCAkZWxlbWVudHMpIC4gJ10nOwoKICAgICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICAgICAgJHZhcnMgPSBzZWxmOjplbmNvZGVPYmplY3QoJHZhcik7CgogICAgICAgICAgICAgICR0aGlzLT5qc29uX29iamVjdFN0YWNrW10gPSAkdmFyOwoKICAgICAgICAgICAgICAkcHJvcGVydGllcyA9IGFycmF5X21hcChhcnJheSgkdGhpcywgJ2pzb25fbmFtZV92YWx1ZScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X2tleXMoJHZhcnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3ZhbHVlcygkdmFycykpOwoKICAgICAgICAgICAgICBhcnJheV9wb3AoJHRoaXMtPmpzb25fb2JqZWN0U3RhY2spOwogICAgICAgICAgICAgIAogICAgICAgICAgICAgIGZvcmVhY2goJHByb3BlcnRpZXMgYXMgJHByb3BlcnR5KSB7CiAgICAgICAgICAgICAgICAgIGlmKCRwcm9wZXJ0eSBpbnN0YW5jZW9mIEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwcm9wZXJ0eTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgcmV0dXJuICd7JyAuIGpvaW4oJywnLCAkcHJvcGVydGllcykgLiAnfSc7CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogIH0KCiAvKioKICAqIGFycmF5LXdhbGtpbmcgZnVuY3Rpb24gZm9yIHVzZSBpbiBnZW5lcmF0aW5nIEpTT04tZm9ybWF0dGVkIG5hbWUtdmFsdWUgcGFpcnMKICAqCiAgKiBAcGFyYW0gICAgc3RyaW5nICAkbmFtZSAgIG5hbWUgb2Yga2V5IHRvIHVzZQogICogQHBhcmFtICAgIG1peGVkICAgJHZhbHVlICByZWZlcmVuY2UgdG8gYW4gYXJyYXkgZWxlbWVudCB0byBiZSBlbmNvZGVkCiAgKgogICogQHJldHVybiAgIHN0cmluZyAgSlNPTi1mb3JtYXR0ZWQgbmFtZS12YWx1ZSBwYWlyLCBsaWtlICcibmFtZSI6dmFsdWUnCiAgKiBAYWNjZXNzICAgcHJpdmF0ZQogICovCiAgcHJpdmF0ZSBmdW5jdGlvbiBqc29uX25hbWVfdmFsdWUoJG5hbWUsICR2YWx1ZSkKICB7CiAgICAgIC8vIEVuY29kaW5nIHRoZSAkR0xPQkFMUyBQSFAgYXJyYXkgY2F1c2VzIGFuIGluZmluaXRlIGxvb3AKICAgICAgLy8gaWYgdGhlIHJlY3Vyc2lvbiBpcyBub3QgcmVzZXQgaGVyZSBhcyBpdCBjb250YWlucwogICAgICAvLyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuIFRoaXMgaXMgdGhlIG9ubHkgd2F5IEkgaGF2ZSBjb21lIHVwCiAgICAgIC8vIHdpdGggdG8gc3RvcCBpbmZpbml0ZSByZWN1cnNpb24gaW4gdGhpcyBjYXNlLgogICAgICBpZigkbmFtZT09J0dMT0JBTFMnCiAgICAgICAgICYmIGlzX2FycmF5KCR2YWx1ZSkKICAgICAgICAgJiYgYXJyYXlfa2V5X2V4aXN0cygnR0xPQkFMUycsJHZhbHVlKSkgewogICAgICAgICR2YWx1ZVsnR0xPQkFMUyddID0gJyoqIFJlY3Vyc2lvbiAqKic7CiAgICAgIH0KICAgIAogICAgICAkZW5jb2RlZF92YWx1ZSA9ICR0aGlzLT5qc29uX2VuY29kZSgkdmFsdWUpOwoKICAgICAgaWYoJGVuY29kZWRfdmFsdWUgaW5zdGFuY2VvZiBFeGNlcHRpb24pIHsKICAgICAgICAgIHJldHVybiAkZW5jb2RlZF92YWx1ZTsKICAgICAgfQoKICAgICAgcmV0dXJuICR0aGlzLT5qc29uX2VuY29kZShzdHJ2YWwoJG5hbWUpKSAuICc6JyAuICRlbmNvZGVkX3ZhbHVlOwogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/HTTP/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/HTTP/ConditionalGet.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIEhUVFBfQ29uZGl0aW9uYWxHZXQgIAogKiBAcGFja2FnZSBNaW5pZnkKICogQHN1YnBhY2thZ2UgSFRUUAogKi8KCi8qKgogKiBJbXBsZW1lbnQgY29uZGl0aW9uYWwgR0VUIHZpYSBhIHRpbWVzdGFtcCBvciBoYXNoIG9mIGNvbnRlbnQKICoKICogRS5nLiBDb250ZW50IGZyb20gREIgd2l0aCB1cGRhdGUgdGltZToKICogPGNvZGU+CiAqIGxpc3QoJHVwZGF0ZVRpbWUsICRjb250ZW50KSA9IGdldERiVXBkYXRlQW5kQ29udGVudCgpOwogKiAkY2cgPSBuZXcgSFRUUF9Db25kaXRpb25hbEdldChhcnJheSgKICogICAgICdsYXN0TW9kaWZpZWRUaW1lJyA9PiAkdXBkYXRlVGltZQogKiAgICAgLCdpc1B1YmxpYycgPT4gdHJ1ZQogKiApKTsKICogJGNnLT5zZW5kSGVhZGVycygpOwogKiBpZiAoJGNnLT5jYWNoZUlzVmFsaWQpIHsKICogICAgIGV4aXQoKTsKICogfQogKiBlY2hvICRjb250ZW50OwogKiA8L2NvZGU+CiAqIAogKiBFLmcuIFNob3J0Y3V0IGZvciB0aGUgYWJvdmUKICogPGNvZGU+CiAqIEhUVFBfQ29uZGl0aW9uYWxHZXQ6OmNoZWNrKCR1cGRhdGVUaW1lLCB0cnVlKTsgLy8gZXhpdHMgaWYgY2xpZW50IGhhcyBjYWNoZQogKiBlY2hvICRjb250ZW50OwogKiA8L2NvZGU+CiAqCiAqIEUuZy4gQ29udGVudCBmcm9tIERCIHdpdGggbm8gdXBkYXRlIHRpbWU6CiAqIDxjb2RlPgogKiAkY29udGVudCA9IGdldENvbnRlbnRGcm9tREIoKTsKICogJGNnID0gbmV3IEhUVFBfQ29uZGl0aW9uYWxHZXQoYXJyYXkoCiAqICAgICAnY29udGVudEhhc2gnID0+IG1kNSgkY29udGVudCkKICogKSk7CiAqICRjZy0+c2VuZEhlYWRlcnMoKTsKICogaWYgKCRjZy0+Y2FjaGVJc1ZhbGlkKSB7CiAqICAgICBleGl0KCk7CiAqIH0KICogZWNobyAkY29udGVudDsKICogPC9jb2RlPgogKiAKICogRS5nLiBTdGF0aWMgY29udGVudCB3aXRoIHNvbWUgc3RhdGljIGluY2x1ZGVzOgogKiA8Y29kZT4KICogLy8gYmVmb3JlIGNvbnRlbnQKICogJGNnID0gbmV3IEhUVFBfQ29uZGl0aW9uYWxHZXQoYXJyYXkoCiAqICAgICAnbGFzdFVwZGF0ZVRpbWUnID0+IG1heCgKICogICAgICAgICBmaWxlbXRpbWUoX19GSUxFX18pCiAqICAgICAgICAgLGZpbGVtdGltZSgnL3BhdGgvdG8vaGVhZGVyLmluYycpCiAqICAgICAgICAgLGZpbGVtdGltZSgnL3BhdGgvdG8vZm9vdGVyLmluYycpCiAqICAgICApCiAqICkpOwogKiAkY2ctPnNlbmRIZWFkZXJzKCk7CiAqIGlmICgkY2ctPmNhY2hlSXNWYWxpZCkgewogKiAgICAgZXhpdCgpOwogKiB9CiAqIDwvY29kZT4KICogQHBhY2thZ2UgTWluaWZ5CiAqIEBzdWJwYWNrYWdlIEhUVFAKICogQGF1dGhvciBTdGVwaGVuIENsYXkgPHN0ZXZlQG1yY2xheS5vcmc+CiAqLwpjbGFzcyBIVFRQX0NvbmRpdGlvbmFsR2V0IHsKCiAgICAvKioKICAgICAqIERvZXMgdGhlIGNsaWVudCBoYXZlIGEgdmFsaWQgY29weSBvZiB0aGUgcmVxdWVzdGVkIHJlc291cmNlPwogICAgICogCiAgICAgKiBZb3UnbGwgd2FudCB0byBjaGVjayB0aGlzIGFmdGVyIGluc3RhbnRpYXRpbmcgdGhlIG9iamVjdC4gSWYgdHJ1ZSwgZG8KICAgICAqIG5vdCBzZW5kIGNvbnRlbnQsIGp1c3QgY2FsbCBzZW5kSGVhZGVycygpIGlmIHlvdSBoYXZlbid0IGFscmVhZHkuCiAgICAgKgogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHB1YmxpYyAkY2FjaGVJc1ZhbGlkID0gbnVsbDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkc3BlYyBvcHRpb25zCiAgICAgKiAKICAgICAqICdpc1B1YmxpYyc6IChib29sKSBpZiBmYWxzZSwgdGhlIENhY2hlLUNvbnRyb2wgaGVhZGVyIHdpbGwgY29udGFpbgogICAgICogInByaXZhdGUiLCBhbGxvd2luZyBvbmx5IGJyb3dzZXIgY2FjaGluZy4gKGRlZmF1bHQgZmFsc2UpCiAgICAgKiAKICAgICAqICdsYXN0TW9kaWZpZWRUaW1lJzogKGludCkgaWYgZ2l2ZW4sIGJvdGggRVRhZyBBTkQgTGFzdC1Nb2RpZmllZCBoZWFkZXJzCiAgICAgKiB3aWxsIGJlIHNlbnQgd2l0aCBjb250ZW50LiBUaGlzIGlzIHJlY29tbWVuZGVkLgogICAgICoKICAgICAqICdlbmNvZGluZyc6IChzdHJpbmcpIGlmIHNldCwgdGhlIGhlYWRlciAiVmFyeTogQWNjZXB0LUVuY29kaW5nIiB3aWxsCiAgICAgKiBhbHdheXMgYmUgc2VudCBhbmQgYSB0cnVuY2F0ZWQgdmVyc2lvbiBvZiB0aGUgZW5jb2Rpbmcgd2lsbCBiZSBhcHBlbmRlZAogICAgICogdG8gdGhlIEVUYWcuIEUuZy4gInB1YjEyMzQ1NjtneiIuIFRoaXMgd2lsbCBhbHNvIHRyaWdnZXIgYSBtb3JlIGxlbmllbnQgCiAgICAgKiBjaGVja2luZyBvZiB0aGUgY2xpZW50J3MgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGFzIHRoZSBlbmNvZGluZyBwb3J0aW9uIG9mCiAgICAgKiB0aGUgRVRhZyB3aWxsIGJlIHN0cmlwcGVkIGJlZm9yZSBjb21wYXJpc29uLgogICAgICogCiAgICAgKiAnY29udGVudEhhc2gnOiAoc3RyaW5nKSBpZiBnaXZlbiwgb25seSB0aGUgRVRhZyBoZWFkZXIgY2FuIGJlIHNlbnQgd2l0aAogICAgICogY29udGVudCAob25seSBIVFRQMS4xIGNsaWVudHMgY2FuIGNvbmRpdGlvbmFsbHkgR0VUKS4gVGhlIGdpdmVuIHN0cmluZyAKICAgICAqIHNob3VsZCBiZSBzaG9ydCB3aXRoIG5vIHF1b3RlIGNoYXJhY3RlcnMgYW5kIGFsd2F5cyBjaGFuZ2Ugd2hlbiB0aGUgCiAgICAgKiByZXNvdXJjZSBjaGFuZ2VzIChyZWNvbW1lbmQgbWQ1KCkpLiBUaGlzIGlzIG5vdCBuZWVkZWQvdXNlZCBpZiAKICAgICAqIGxhc3RNb2RpZmllZFRpbWUgaXMgZ2l2ZW4uCiAgICAgKiAKICAgICAqICdlVGFnJzogKHN0cmluZykgaWYgZ2l2ZW4sIHRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSBFVGFnIGhlYWRlciByYXRoZXIKICAgICAqIHRoYW4gdmFsdWVzIGJhc2VkIG9uIGxhc3RNb2RpZmllZFRpbWUgb3IgY29udGVudEhhc2guIEFsc28gdGhlIGVuY29kaW5nCiAgICAgKiBzdHJpbmcgd2lsbCBub3QgYmUgYXBwZW5kZWQgdG8gdGhlIGdpdmVuIHZhbHVlIGFzIGRlc2NyaWJlZCBhYm92ZS4KICAgICAqIAogICAgICogJ2ludmFsaWRhdGUnOiAoYm9vbCkgaWYgdHJ1ZSwgdGhlIGNsaWVudCBjYWNoZSB3aWxsIGJlIGNvbnNpZGVyZWQgaW52YWxpZAogICAgICogd2l0aG91dCB0ZXN0aW5nLiBFZmZlY3RpdmVseSB0aGlzIGRpc2FibGVzIGNvbmRpdGlvbmFsIEdFVC4gCiAgICAgKiAoZGVmYXVsdCBmYWxzZSkKICAgICAqIAogICAgICogJ21heEFnZSc6IChpbnQpIGlmIGdpdmVuLCB0aGlzIHdpbGwgc2V0IHRoZSBDYWNoZS1Db250cm9sIG1heC1hZ2UgaW4gCiAgICAgKiBzZWNvbmRzLCBhbmQgYWxzbyBzZXQgdGhlIEV4cGlyZXMgaGVhZGVyIHRvIHRoZSBlcXVpdmFsZW50IEdNVCBkYXRlLiAKICAgICAqIEFmdGVyIHRoZSBtYXgtYWdlIHBlcmlvZCBoYXMgcGFzc2VkLCB0aGUgYnJvd3NlciB3aWxsIGFnYWluIHNlbmQgYSAKICAgICAqIGNvbmRpdGlvbmFsIEdFVCB0byByZXZhbGlkYXRlIGl0cyBjYWNoZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzcGVjKQogICAgewogICAgICAgICRzY29wZSA9IChpc3NldCgkc3BlY1snaXNQdWJsaWMnXSkgJiYgJHNwZWNbJ2lzUHVibGljJ10pCiAgICAgICAgICAgID8gJ3B1YmxpYycKICAgICAgICAgICAgOiAncHJpdmF0ZSc7CiAgICAgICAgJG1heEFnZSA9IDA7CiAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKGNhbiBiZSByZW1vdmVkIGxhdGVyKQogICAgICAgIGlmIChpc3NldCgkc3BlY1snc2V0RXhwaXJlcyddKSAKICAgICAgICAgICAgJiYgaXNfbnVtZXJpYygkc3BlY1snc2V0RXhwaXJlcyddKQogICAgICAgICAgICAmJiAhIGlzc2V0KCRzcGVjWydtYXhBZ2UnXSkpIHsKICAgICAgICAgICAgJHNwZWNbJ21heEFnZSddID0gJHNwZWNbJ3NldEV4cGlyZXMnXSAtICRfU0VSVkVSWydSRVFVRVNUX1RJTUUnXTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRzcGVjWydtYXhBZ2UnXSkpIHsKICAgICAgICAgICAgJG1heEFnZSA9ICRzcGVjWydtYXhBZ2UnXTsKICAgICAgICAgICAgJHRoaXMtPl9oZWFkZXJzWydFeHBpcmVzJ10gPSBzZWxmOjpnbXREYXRlKAogICAgICAgICAgICAgICAgJF9TRVJWRVJbJ1JFUVVFU1RfVElNRSddICsgJHNwZWNbJ21heEFnZSddIAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkZXRhZ0FwcGVuZCA9ICcnOwogICAgICAgIGlmIChpc3NldCgkc3BlY1snZW5jb2RpbmcnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zdHJpcEV0YWcgPSB0cnVlOwogICAgICAgICAgICAkdGhpcy0+X2hlYWRlcnNbJ1ZhcnknXSA9ICdBY2NlcHQtRW5jb2RpbmcnOwogICAgICAgICAgICBpZiAoJycgIT09ICRzcGVjWydlbmNvZGluZyddKSB7CiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRzcGVjWydlbmNvZGluZyddLCAneC0nKSkgewogICAgICAgICAgICAgICAgICAgICRzcGVjWydlbmNvZGluZyddID0gc3Vic3RyKCRzcGVjWydlbmNvZGluZyddLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRldGFnQXBwZW5kID0gJzsnIC4gc3Vic3RyKCRzcGVjWydlbmNvZGluZyddLCAwLCAyKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHNwZWNbJ2xhc3RNb2RpZmllZFRpbWUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9zZXRMYXN0TW9kaWZpZWQoJHNwZWNbJ2xhc3RNb2RpZmllZFRpbWUnXSk7CiAgICAgICAgICAgIGlmIChpc3NldCgkc3BlY1snZVRhZyddKSkgeyAvLyBVc2UgaXQKICAgICAgICAgICAgICAgICR0aGlzLT5fc2V0RXRhZygkc3BlY1snZVRhZyddLCAkc2NvcGUpOwogICAgICAgICAgICB9IGVsc2UgeyAvLyBiYXNlIGJvdGggaGVhZGVycyBvbiB0aW1lCiAgICAgICAgICAgICAgICAkdGhpcy0+X3NldEV0YWcoJHNwZWNbJ2xhc3RNb2RpZmllZFRpbWUnXSAuICRldGFnQXBwZW5kLCAkc2NvcGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRzcGVjWydlVGFnJ10pKSB7IC8vIFVzZSBpdAogICAgICAgICAgICAkdGhpcy0+X3NldEV0YWcoJHNwZWNbJ2VUYWcnXSwgJHNjb3BlKTsKICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJHNwZWNbJ2NvbnRlbnRIYXNoJ10pKSB7IC8vIFVzZSB0aGUgaGFzaCBhcyB0aGUgRVRhZwogICAgICAgICAgICAkdGhpcy0+X3NldEV0YWcoJHNwZWNbJ2NvbnRlbnRIYXNoJ10gLiAkZXRhZ0FwcGVuZCwgJHNjb3BlKTsKICAgICAgICB9CiAgICAgICAgJHByaXZhY3kgPSAoJHNjb3BlID09PSAncHJpdmF0ZScpCiAgICAgICAgICAgID8gJywgcHJpdmF0ZScKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkdGhpcy0+X2hlYWRlcnNbJ0NhY2hlLUNvbnRyb2wnXSA9ICJtYXgtYWdlPXskbWF4QWdlfXskcHJpdmFjeX0iOwogICAgICAgIC8vIGludmFsaWRhdGUgY2FjaGUgaWYgZGlzYWJsZWQsIG90aGVyd2lzZSBjaGVjawogICAgICAgICR0aGlzLT5jYWNoZUlzVmFsaWQgPSAoaXNzZXQoJHNwZWNbJ2ludmFsaWRhdGUnXSkgJiYgJHNwZWNbJ2ludmFsaWRhdGUnXSkKICAgICAgICAgICAgPyBmYWxzZQogICAgICAgICAgICA6ICR0aGlzLT5faXNDYWNoZVZhbGlkKCk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogR2V0IGFycmF5IG9mIG91dHB1dCBoZWFkZXJzIHRvIGJlIHNlbnQKICAgICAqIAogICAgICogSW4gdGhlIGNhc2Ugb2YgMzA0IHJlc3BvbnNlcywgdGhpcyBhcnJheSB3aWxsIG9ubHkgY29udGFpbiB0aGUgcmVzcG9uc2UKICAgICAqIGNvZGUgaGVhZGVyOiBhcnJheSgnX3Jlc3BvbnNlQ29kZScgPT4gJ0hUVFAvMS4wIDMwNCBOb3QgTW9kaWZpZWQnKQogICAgICogCiAgICAgKiBPdGhlcndpc2Ugc29tZXRoaW5nIGxpa2U6IAogICAgICogPGNvZGU+CiAgICAgKiBhcnJheSgKICAgICAqICAgICAnQ2FjaGUtQ29udHJvbCcgPT4gJ21heC1hZ2U9MCwgcHVibGljJwogICAgICogICAgICwnRVRhZycgPT4gJyJmb29iYXIiJwogICAgICogKQogICAgICogPC9jb2RlPgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXJzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9oZWFkZXJzOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIgaW4gYnl0ZXMKICAgICAqIAogICAgICogV2l0aCBtb3N0IFBIUCBjb25maWdzLCBhcyBsb25nIGFzIHlvdSBkb24ndCBmbHVzaCgpIG91dHB1dCwgdGhpcyBtZXRob2QKICAgICAqIGlzIG5vdCBuZWVkZWQgYW5kIFBIUCB3aWxsIGJ1ZmZlciBhbGwgb3V0cHV0IGFuZCBzZXQgQ29udGVudC1MZW5ndGggZm9yIAogICAgICogeW91LiBPdGhlcndpc2UgeW91J2xsIHdhbnQgdG8gY2FsbCB0aGlzIHRvIGxldCB0aGUgY2xpZW50IGtub3cgdXAgZnJvbnQuCiAgICAgKiAKICAgICAqIEBwYXJhbSBpbnQgJGJ5dGVzCiAgICAgKiAKICAgICAqIEByZXR1cm4gaW50IGNvcHkgb2YgaW5wdXQgJGJ5dGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb250ZW50TGVuZ3RoKCRieXRlcykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gJGJ5dGVzOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZCBoZWFkZXJzCiAgICAgKiAKICAgICAqIEBzZWUgZ2V0SGVhZGVycygpCiAgICAgKiAKICAgICAqIE5vdGUgdGhpcyBkb2Vzbid0ICJjbGVhciIgdGhlIGhlYWRlcnMuIENhbGxpbmcgc2VuZEhlYWRlcnMoKSB3aWxsCiAgICAgKiBjYWxsIGhlYWRlcigpIGFnYWluIChidXQgcHJvYmFibHkgaGF2ZSBub3QgZWZmZWN0KSBhbmQgZ2V0SGVhZGVycygpIHdpbGwKICAgICAqIHN0aWxsIHJldHVybiB0aGUgaGVhZGVycy4KICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRIZWFkZXJzKCkKICAgIHsKICAgICAgICAkaGVhZGVycyA9ICR0aGlzLT5faGVhZGVyczsKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygnX3Jlc3BvbnNlQ29kZScsICRoZWFkZXJzKSkgewogICAgICAgICAgICAvLyBGYXN0Q0dJIGVudmlyb25tZW50cyByZXF1aXJlIDNyZCBhcmcgdG8gaGVhZGVyKCkgdG8gYmUgc2V0CiAgICAgICAgICAgIGxpc3QoLCAkY29kZSkgPSBleHBsb2RlKCcgJywgJGhlYWRlcnNbJ19yZXNwb25zZUNvZGUnXSwgMyk7CiAgICAgICAgICAgIGhlYWRlcigkaGVhZGVyc1snX3Jlc3BvbnNlQ29kZSddLCB0cnVlLCAkY29kZSk7CiAgICAgICAgICAgIHVuc2V0KCRoZWFkZXJzWydfcmVzcG9uc2VDb2RlJ10pOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAkbmFtZSA9PiAkdmFsKSB7CiAgICAgICAgICAgIGhlYWRlcigkbmFtZSAuICc6ICcgLiAkdmFsKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8qKgogICAgICogRXhpdCBpZiB0aGUgY2xpZW50J3MgY2FjaGUgaXMgdmFsaWQgZm9yIHRoaXMgcmVzb3VyY2UKICAgICAqCiAgICAgKiBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIGZvciBjb21tb24gdXNlIG9mIHRoZSBjbGFzcwogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGxhc3RNb2RpZmllZFRpbWUgaWYgZ2l2ZW4sIGJvdGggRVRhZyBBTkQgTGFzdC1Nb2RpZmllZCBoZWFkZXJzCiAgICAgKiB3aWxsIGJlIHNlbnQgd2l0aCBjb250ZW50LiBUaGlzIGlzIHJlY29tbWVuZGVkLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICRpc1B1YmxpYyAoZGVmYXVsdCBmYWxzZSkgaWYgdHJ1ZSwgdGhlIENhY2hlLUNvbnRyb2wgaGVhZGVyIAogICAgICogd2lsbCBjb250YWluICJwdWJsaWMiLCBhbGxvd2luZyBwcm94aWVzIHRvIGNhY2hlIHRoZSBjb250ZW50LiBPdGhlcndpc2UgCiAgICAgKiAicHJpdmF0ZSIgd2lsbCBiZSBzZW50LCBhbGxvd2luZyBvbmx5IGJyb3dzZXIgY2FjaGluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgKGRlZmF1bHQgZW1wdHkpIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgY29uc3RydWN0b3IKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVjaygkbGFzdE1vZGlmaWVkVGltZSA9IG51bGwsICRpc1B1YmxpYyA9IGZhbHNlLCAkb3B0aW9ucyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgaWYgKG51bGwgIT09ICRsYXN0TW9kaWZpZWRUaW1lKSB7CiAgICAgICAgICAgICRvcHRpb25zWydsYXN0TW9kaWZpZWRUaW1lJ10gPSAoaW50KSRsYXN0TW9kaWZpZWRUaW1lOwogICAgICAgIH0KICAgICAgICAkb3B0aW9uc1snaXNQdWJsaWMnXSA9IChib29sKSRpc1B1YmxpYzsKICAgICAgICAkY2cgPSBuZXcgSFRUUF9Db25kaXRpb25hbEdldCgkb3B0aW9ucyk7CiAgICAgICAgJGNnLT5zZW5kSGVhZGVycygpOwogICAgICAgIGlmICgkY2ctPmNhY2hlSXNWYWxpZCkgewogICAgICAgICAgICBleGl0KCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICAKICAgIC8qKgogICAgICogR2V0IGEgR01UIGZvcm1hdHRlZCBkYXRlIGZvciB1c2UgaW4gSFRUUCBoZWFkZXJzCiAgICAgKiAKICAgICAqIDxjb2RlPgogICAgICogaGVhZGVyKCdFeHBpcmVzOiAnIC4gSFRUUF9Db25kaXRpb25hbEdldDo6Z210ZGF0ZSgkdGltZSkpOwogICAgICogPC9jb2RlPiAgCiAgICAgKgogICAgICogQHBhcmFtIGludCAkdGltZSB1bml4IHRpbWVzdGFtcAogICAgICogCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdtdERhdGUoJHRpbWUpCiAgICB7CiAgICAgICAgcmV0dXJuIGdtZGF0ZSgnRCwgZCBNIFkgSDppOnMgXEdcTVxUJywgJHRpbWUpOwogICAgfQogICAgCiAgICBwcm90ZWN0ZWQgJF9oZWFkZXJzID0gYXJyYXkoKTsKICAgIHByb3RlY3RlZCAkX2xtVGltZSA9IG51bGw7CiAgICBwcm90ZWN0ZWQgJF9ldGFnID0gbnVsbDsKICAgIHByb3RlY3RlZCAkX3N0cmlwRXRhZyA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkaGFzaAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNjb3BlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfc2V0RXRhZygkaGFzaCwgJHNjb3BlKQogICAgewogICAgICAgICR0aGlzLT5fZXRhZyA9ICciJyAuIHN1YnN0cigkc2NvcGUsIDAsIDMpIC4gJGhhc2ggLiAnIic7CiAgICAgICAgJHRoaXMtPl9oZWFkZXJzWydFVGFnJ10gPSAkdGhpcy0+X2V0YWc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfc2V0TGFzdE1vZGlmaWVkKCR0aW1lKQogICAgewogICAgICAgICR0aGlzLT5fbG1UaW1lID0gKGludCkkdGltZTsKICAgICAgICAkdGhpcy0+X2hlYWRlcnNbJ0xhc3QtTW9kaWZpZWQnXSA9IHNlbGY6OmdtdERhdGUoJHRpbWUpOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lIHZhbGlkaXR5IG9mIGNsaWVudCBjYWNoZSBhbmQgcXVldWUgMzA0IGhlYWRlciBpZiB2YWxpZAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2lzQ2FjaGVWYWxpZCgpCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICR0aGlzLT5fZXRhZykgewogICAgICAgICAgICAvLyBsbVRpbWUgaXMgY29waWVkIHRvIEVUYWcsIHNvIHRoaXMgY29uZGl0aW9uIGltcGxpZXMgdGhhdCB0aGUKICAgICAgICAgICAgLy8gc2VydmVyIHNlbnQgbmVpdGhlciBFVGFnIG5vciBMYXN0LU1vZGlmaWVkLCBzbyB0aGUgY2xpZW50IGNhbid0IAogICAgICAgICAgICAvLyBwb3NzaWJseSBoYXMgYSB2YWxpZCBjYWNoZS4KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkaXNWYWxpZCA9ICgkdGhpcy0+cmVzb3VyY2VNYXRjaGVkRXRhZygpIHx8ICR0aGlzLT5yZXNvdXJjZU5vdE1vZGlmaWVkKCkpOwogICAgICAgIGlmICgkaXNWYWxpZCkgewogICAgICAgICAgICAkdGhpcy0+X2hlYWRlcnNbJ19yZXNwb25zZUNvZGUnXSA9ICdIVFRQLzEuMCAzMDQgTm90IE1vZGlmaWVkJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRpc1ZhbGlkOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiByZXNvdXJjZU1hdGNoZWRFdGFnKCkKICAgIHsKICAgICAgICBpZiAoIWlzc2V0KCRfU0VSVkVSWydIVFRQX0lGX05PTkVfTUFUQ0gnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkY2xpZW50RXRhZ0xpc3QgPSBnZXRfbWFnaWNfcXVvdGVzX2dwYygpCiAgICAgICAgICAgID8gc3RyaXBzbGFzaGVzKCRfU0VSVkVSWydIVFRQX0lGX05PTkVfTUFUQ0gnXSkKICAgICAgICAgICAgOiAkX1NFUlZFUlsnSFRUUF9JRl9OT05FX01BVENIJ107CiAgICAgICAgJGNsaWVudEV0YWdzID0gZXhwbG9kZSgnLCcsICRjbGllbnRFdGFnTGlzdCk7CiAgICAgICAgCiAgICAgICAgJGNvbXBhcmVUbyA9ICR0aGlzLT5ub3JtYWxpemVFdGFnKCR0aGlzLT5fZXRhZyk7CiAgICAgICAgZm9yZWFjaCAoJGNsaWVudEV0YWdzIGFzICRjbGllbnRFdGFnKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+bm9ybWFsaXplRXRhZygkY2xpZW50RXRhZykgPT09ICRjb21wYXJlVG8pIHsKICAgICAgICAgICAgICAgIC8vIHJlc3BvbmQgd2l0aCB0aGUgY2xpZW50J3MgbWF0Y2hlZCBFVGFnLCBldmVuIGlmIGl0J3Mgbm90IHdoYXQKICAgICAgICAgICAgICAgIC8vIHdlIHdvdWxkJ3ZlIHNlbnQgYnkgZGVmYXVsdAogICAgICAgICAgICAgICAgJHRoaXMtPl9oZWFkZXJzWydFVGFnJ10gPSB0cmltKCRjbGllbnRFdGFnKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV0YWcKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gbm9ybWFsaXplRXRhZygkZXRhZykgewogICAgICAgICRldGFnID0gdHJpbSgkZXRhZyk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fc3RyaXBFdGFnCiAgICAgICAgICAgID8gcHJlZ19yZXBsYWNlKCcvO1xcd1xcdyIkLycsICciJywgJGV0YWcpCiAgICAgICAgICAgIDogJGV0YWc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHJlc291cmNlTm90TW9kaWZpZWQoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJF9TRVJWRVJbJ0hUVFBfSUZfTU9ESUZJRURfU0lOQ0UnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBzdHJpcCBvZmYgSUUncyBleHRyYSBkYXRhIChzZW1pY29sb24pCiAgICAgICAgbGlzdCgkaWZNb2RpZmllZFNpbmNlKSA9IGV4cGxvZGUoJzsnLCAkX1NFUlZFUlsnSFRUUF9JRl9NT0RJRklFRF9TSU5DRSddLCAyKTsKICAgICAgICBpZiAoc3RydG90aW1lKCRpZk1vZGlmaWVkU2luY2UpID49ICR0aGlzLT5fbG1UaW1lKSB7CiAgICAgICAgICAgIC8vIEFwYWNoZSAyLjIncyBiZWhhdmlvci4gSWYgdGhlcmUgd2FzIG5vIEVUYWcgbWF0Y2gsIHNlbmQgdGhlIAogICAgICAgICAgICAvLyBub24tZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBFVGFnIHZhbHVlLgogICAgICAgICAgICAkdGhpcy0+X2hlYWRlcnNbJ0VUYWcnXSA9ICR0aGlzLT5ub3JtYWxpemVFdGFnKCR0aGlzLT5fZXRhZyk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/min/lib/HTTP/Encoder.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIEhUVFBfRW5jb2RlciAgCiAqIEBwYWNrYWdlIE1pbmlmeQogKiBAc3VicGFja2FnZSBIVFRQCiAqLwogCi8qKgogKiBFbmNvZGUgYW5kIHNlbmQgZ3ppcHBlZC9kZWZsYXRlZCBjb250ZW50CiAqCiAqIFRoZSAiVmFyeTogQWNjZXB0LUVuY29kaW5nIiBoZWFkZXIgaXMgc2VudC4gSWYgdGhlIGNsaWVudCBhbGxvd3MgZW5jb2RpbmcsIAogKiBDb250ZW50LUVuY29kaW5nIGFuZCBDb250ZW50LUxlbmd0aCBhcmUgYWRkZWQuCiAqCiAqIDxjb2RlPgogKiAvLyBTZW5kIGEgQ1NTIGZpbGUsIGNvbXByZXNzZWQgaWYgcG9zc2libGUKICogJGhlID0gbmV3IEhUVFBfRW5jb2RlcihhcnJheSgKICogICAgICdjb250ZW50JyA9PiBmaWxlX2dldF9jb250ZW50cygkY3NzRmlsZSkKICogICAgICwndHlwZScgPT4gJ3RleHQvY3NzJwogKiApKTsKICogJGhlLT5lbmNvZGUoKTsKICogJGhlLT5zZW5kQWxsKCk7CiAqIDwvY29kZT4KICoKICogPGNvZGU+CiAqIC8vIFNob3J0Y3V0IHRvIGVuY29kaW5nIG91dHB1dAogKiBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9jc3MnKTsgLy8gbmVlZGVkIGlmIG5vdCBIVE1MCiAqIEhUVFBfRW5jb2Rlcjo6b3V0cHV0KCRjc3MpOwogKiA8L2NvZGU+CiAqIAogKiA8Y29kZT4KICogLy8gSnVzdCBzbmlmZiBmb3IgdGhlIGFjY2VwdGVkIGVuY29kaW5nCiAqICRlbmNvZGluZyA9IEhUVFBfRW5jb2Rlcjo6Z2V0QWNjZXB0ZWRFbmNvZGluZygpOwogKiA8L2NvZGU+CiAqCiAqIEZvciBtb3JlIGNvbnRyb2wgb3ZlciBoZWFkZXJzLCB1c2UgZ2V0SGVhZGVycygpIGFuZCBnZXREYXRhKCkgYW5kIHNlbmQgeW91cgogKiBvd24gb3V0cHV0LgogKiAKICogTm90ZTogSWYgeW91IGRvbid0IG5lZWQgaGVhZGVyIG1nbXQsIHVzZSBQSFAncyBuYXRpdmUgZ3plbmNvZGUsIGd6ZGVmbGF0ZSwgCiAqIGFuZCBnemNvbXByZXNzIGZ1bmN0aW9ucyBmb3IgZ3ppcCwgZGVmbGF0ZSwgYW5kIGNvbXByZXNzLWVuY29kaW5nCiAqIHJlc3BlY3RpdmVseS4KICogCiAqIEBwYWNrYWdlIE1pbmlmeQogKiBAc3VicGFja2FnZSBIVFRQCiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKi8KY2xhc3MgSFRUUF9FbmNvZGVyIHsKCiAgICAvKioKICAgICAqIFNob3VsZCB0aGUgZW5jb2RlciBhbGxvdyBIVFRQIGVuY29kaW5nIHRvIElFNj8gCiAgICAgKiAKICAgICAqIElmIHlvdSBoYXZlIG1hbnkgSUU2IHVzZXJzIGFuZCB0aGUgYmFuZHdpZHRoIHNhdmluZ3MgaXMgd29ydGggdHJvdWJsaW5nIAogICAgICogc29tZSBvZiB0aGVtLCBzZXQgdGhpcyB0byB0cnVlLgogICAgICogCiAgICAgKiBCeSBkZWZhdWx0LCBlbmNvZGluZyBpcyBvbmx5IG9mZmVyZWQgdG8gSUU3Ky4gV2hlbiB0aGlzIGlzIHRydWUsCiAgICAgKiBnZXRBY2NlcHRlZEVuY29kaW5nKCkgd2lsbCByZXR1cm4gYW4gZW5jb2RpbmcgZm9yIElFNiBpZiBpdHMgdXNlciBhZ2VudAogICAgICogc3RyaW5nIGNvbnRhaW5zICJTVjEiLiBUaGlzIGhhcyBiZWVuIGRvY3VtZW50ZWQgaW4gbWFueSBwbGFjZXMgYXMgInNhZmUiLAogICAgICogYnV0IHRoZXJlIHNlZW0gdG8gYmUgcmVtYWluaW5nLCBpbnRlcm1pdHRlbnQgZW5jb2RpbmcgYnVncyBpbiBwYXRjaGVkIAogICAgICogSUU2IG9uIHRoZSB3aWxkIHdlYi4KICAgICAqIAogICAgICogQHZhciBib29sCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGVuY29kZVRvSWU2ID0gdHJ1ZTsKICAgIAogICAgCiAgICAvKioKICAgICAqIERlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwgZm9yIHpsaWIgb3BlcmF0aW9ucwogICAgICogCiAgICAgKiBUaGlzIGxldmVsIGlzIHVzZWQgaWYgZW5jb2RlKCkgaXMgbm90IGdpdmVuIGEgJGNvbXByZXNzaW9uTGV2ZWwKICAgICAqIAogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyAkY29tcHJlc3Npb25MZXZlbCA9IDY7CiAgICAKCiAgICAvKioKICAgICAqIEdldCBhbiBIVFRQIEVuY29kZXIgb2JqZWN0CiAgICAgKiAKICAgICAqIEBwYXJhbSBhcnJheSAkc3BlYyBvcHRpb25zCiAgICAgKiAKICAgICAqICdjb250ZW50JzogKHN0cmluZyByZXF1aXJlZCkgY29udGVudCB0byBiZSBlbmNvZGVkCiAgICAgKiAKICAgICAqICd0eXBlJzogKHN0cmluZykgaWYgc2V0LCB0aGUgQ29udGVudC1UeXBlIGhlYWRlciB3aWxsIGhhdmUgdGhpcyB2YWx1ZS4KICAgICAqIAogICAgICogJ21ldGhvZDogKHN0cmluZykgb25seSBzZXQgdGhpcyBpZiB5b3UgYXJlIGZvcmNpbmcgYSBwYXJ0aWN1bGFyIGVuY29kaW5nCiAgICAgKiBtZXRob2QuIElmIG5vdCBzZXQsIHRoZSBiZXN0IG1ldGhvZCB3aWxsIGJlIGNob3NlbiBieSBnZXRBY2NlcHRlZEVuY29kaW5nKCkKICAgICAqIFRoZSBhdmFpbGFibGUgbWV0aG9kcyBhcmUgJ2d6aXAnLCAnZGVmbGF0ZScsICdjb21wcmVzcycsIGFuZCAnJyAobm8KICAgICAqIGVuY29kaW5nKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHNwZWMpIAogICAgewogICAgICAgICR0aGlzLT5fdXNlTWJTdHJsZW4gPSAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGluaV9nZXQoJ21ic3RyaW5nLmZ1bmNfb3ZlcmxvYWQnKSAhPT0gJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKGludClpbmlfZ2V0KCdtYnN0cmluZy5mdW5jX292ZXJsb2FkJykgJiAyKSk7CiAgICAgICAgJHRoaXMtPl9jb250ZW50ID0gJHNwZWNbJ2NvbnRlbnQnXTsKICAgICAgICAkdGhpcy0+X2hlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSAkdGhpcy0+X3VzZU1iU3RybGVuCiAgICAgICAgICAgID8gKHN0cmluZyltYl9zdHJsZW4oJHRoaXMtPl9jb250ZW50LCAnOGJpdCcpCiAgICAgICAgICAgIDogKHN0cmluZylzdHJsZW4oJHRoaXMtPl9jb250ZW50KTsKICAgICAgICBpZiAoaXNzZXQoJHNwZWNbJ3R5cGUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPl9oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICRzcGVjWyd0eXBlJ107CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkc3BlY1snbWV0aG9kJ10pCiAgICAgICAgICAgICYmIGluX2FycmF5KCRzcGVjWydtZXRob2QnXSwgYXJyYXkoJ2d6aXAnLCAnZGVmbGF0ZScsICdjb21wcmVzcycsICcnKSkpCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+X2VuY29kZU1ldGhvZCA9IGFycmF5KCRzcGVjWydtZXRob2QnXSwgJHNwZWNbJ21ldGhvZCddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+X2VuY29kZU1ldGhvZCA9IHNlbGY6OmdldEFjY2VwdGVkRW5jb2RpbmcoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgY29udGVudCBpbiBjdXJyZW50IGZvcm0KICAgICAqIAogICAgICogQ2FsbCBhZnRlciBlbmNvZGUoKSBmb3IgZW5jb2RlZCBjb250ZW50LgogICAgICogCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpIAogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2NvbnRlbnQ7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogR2V0IGFycmF5IG9mIG91dHB1dCBoZWFkZXJzIHRvIGJlIHNlbnQKICAgICAqIAogICAgICogRS5nLgogICAgICogPGNvZGU+CiAgICAgKiBhcnJheSgKICAgICAqICAgICAnQ29udGVudC1MZW5ndGgnID0+ICc2MTUnCiAgICAgKiAgICAgLCdDb250ZW50LUVuY29kaW5nJyA9PiAneC1nemlwJwogICAgICogICAgICwnVmFyeScgPT4gJ0FjY2VwdC1FbmNvZGluZycKICAgICAqICkKICAgICAqIDwvY29kZT4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faGVhZGVyczsKICAgIH0KCiAgICAvKioKICAgICAqIFNlbmQgb3V0cHV0IGhlYWRlcnMKICAgICAqIAogICAgICogWW91IG11c3QgY2FsbCB0aGlzIGJlZm9yZSBoZWFkZXJzIGFyZSBzZW50IGFuZCBpdCBwcm9iYWJseSBjYW5ub3QgYmUKICAgICAqIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB6bGliIG91dHB1dCBidWZmZXJpbmcgLyBtb2RfZ3ppcC4gRXJyb3JzIGFyZQogICAgICogbm90IGhhbmRsZWQgcHVycG9zZWZ1bGx5LgogICAgICogCiAgICAgKiBAc2VlIGdldEhlYWRlcnMoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEhlYWRlcnMoKQogICAgewogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5faGVhZGVycyBhcyAkbmFtZSA9PiAkdmFsKSB7CiAgICAgICAgICAgIGhlYWRlcigkbmFtZSAuICc6ICcgLiAkdmFsKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8qKgogICAgICogU2VuZCBvdXRwdXQgaGVhZGVycyBhbmQgY29udGVudAogICAgICogCiAgICAgKiBBIHNob3J0Y3V0IGZvciBzZW5kSGVhZGVycygpIGFuZCBlY2hvIGdldENvbnRlbnQoKQogICAgICoKICAgICAqIFlvdSBtdXN0IGNhbGwgdGhpcyBiZWZvcmUgaGVhZGVycyBhcmUgc2VudCBhbmQgaXQgcHJvYmFibHkgY2Fubm90IGJlCiAgICAgKiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggemxpYiBvdXRwdXQgYnVmZmVyaW5nIC8gbW9kX2d6aXAuIEVycm9ycyBhcmUKICAgICAqIG5vdCBoYW5kbGVkIHB1cnBvc2VmdWxseS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlbmRBbGwoKQogICAgewogICAgICAgICR0aGlzLT5zZW5kSGVhZGVycygpOwogICAgICAgIGVjaG8gJHRoaXMtPl9jb250ZW50OwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lIHRoZSBjbGllbnQncyBiZXN0IGVuY29kaW5nIG1ldGhvZCBmcm9tIHRoZSBIVFRQIEFjY2VwdC1FbmNvZGluZyAKICAgICAqIGhlYWRlci4KICAgICAqIAogICAgICogSWYgbm8gQWNjZXB0LUVuY29kaW5nIGhlYWRlciBpcyBzZXQsIG9yIHRoZSBicm93c2VyIGlzIElFIGJlZm9yZSB2NiBTUDIsCiAgICAgKiB0aGlzIHdpbGwgcmV0dXJuICgnJywgJycpLCB0aGUgImlkZW50aXR5IiBlbmNvZGluZy4KICAgICAqIAogICAgICogQSBzeW50YXgtYXdhcmUgc2NhbiBpcyBkb25lIG9mIHRoZSBBY2NlcHQtRW5jb2RpbmcsIHNvIHRoZSBtZXRob2QgbXVzdAogICAgICogYmUgbm9uIDAuIFRoZSBtZXRob2RzIGFyZSBmYXZvcmVkIGluIG9yZGVyIG9mIGd6aXAsIGRlZmxhdGUsIHRoZW4gCiAgICAgKiBjb21wcmVzcy4gRGVmbGF0ZSBpcyBhbHdheXMgc21hbGxlc3QgYW5kIGdlbmVyYWxseSBmYXN0ZXIsIGJ1dCBpcyAKICAgICAqIHJhcmVseSBzZW50IGJ5IHNlcnZlcnMsIHNvIGNsaWVudCBzdXBwb3J0IGNvdWxkIGJlIGJ1Z2dpZXIuCiAgICAgKiAKICAgICAqIEBwYXJhbSBib29sICRhbGxvd0NvbXByZXNzIGFsbG93IHRoZSBvbGRlciBjb21wcmVzcyBlbmNvZGluZwogICAgICogCiAgICAgKiBAcGFyYW0gYm9vbCAkYWxsb3dEZWZsYXRlIGFsbG93IHRoZSBtb3JlIHJlY2VudCBkZWZsYXRlIGVuY29kaW5nCiAgICAgKiAKICAgICAqIEByZXR1cm4gYXJyYXkgdHdvIHZhbHVlcywgMXN0IGlzIHRoZSBhY3R1YWwgZW5jb2RpbmcgbWV0aG9kLCAybmQgaXMgdGhlCiAgICAgKiBhbGlhcyBvZiB0aGF0IG1ldGhvZCB0byB1c2UgaW4gdGhlIENvbnRlbnQtRW5jb2RpbmcgaGVhZGVyIChzb21lIGJyb3dzZXJzCiAgICAgKiBjYWxsIGd6aXAgIngtZ3ppcCIgZXRjLikKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRBY2NlcHRlZEVuY29kaW5nKCRhbGxvd0NvbXByZXNzID0gdHJ1ZSwgJGFsbG93RGVmbGF0ZSA9IHRydWUpCiAgICB7CiAgICAgICAgLy8gQGxpbmsgaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxNC5odG1sCiAgICAgICAgCiAgICAgICAgaWYgKCEgaXNzZXQoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0VOQ09ESU5HJ10pCiAgICAgICAgICAgIHx8IHNlbGY6OmlzQnVnZ3lJZSgpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCcnLCAnJyk7CiAgICAgICAgfQogICAgICAgICRhZSA9ICRfU0VSVkVSWydIVFRQX0FDQ0VQVF9FTkNPRElORyddOwogICAgICAgIC8vIGd6aXAgY2hlY2tzIChxdWljaykKICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRhZSwgJ2d6aXAsJykgICAgICAgICAgICAgLy8gbW9zdCBicm93c2VycwogICAgICAgICAgICB8fCAwID09PSBzdHJwb3MoJGFlLCAnZGVmbGF0ZSwgZ3ppcCwnKSAvLyBvcGVyYQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2d6aXAnLCAnZ3ppcCcpOwogICAgICAgIH0KICAgICAgICAvLyBnemlwIGNoZWNrcyAoc2xvdykKICAgICAgICBpZiAocHJlZ19tYXRjaCgKICAgICAgICAgICAgICAgICdAKD86XnwsKVxccyooKD86eC0pP2d6aXApXFxzKig/OiR8LHw7XFxzKnE9KD86MFxcLnwxKSlAJwogICAgICAgICAgICAgICAgLCRhZQogICAgICAgICAgICAgICAgLCRtKSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2d6aXAnLCAkbVsxXSk7CiAgICAgICAgfQogICAgICAgIGlmICgkYWxsb3dEZWZsYXRlKSB7CiAgICAgICAgICAgIC8vIGRlZmxhdGUgY2hlY2tzICAgIAogICAgICAgICAgICAkYWVSZXYgPSBzdHJyZXYoJGFlKTsKICAgICAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkYWVSZXYsICdldGFsZmVkICwnKSAvLyBpZSwgd2Via2l0CiAgICAgICAgICAgICAgICB8fCAwID09PSBzdHJwb3MoJGFlUmV2LCAnZXRhbGZlZCwnKSAvLyBnZWNrbwogICAgICAgICAgICAgICAgfHwgMCA9PT0gc3RycG9zKCRhZSwgJ2RlZmxhdGUsJykgLy8gb3BlcmEKICAgICAgICAgICAgICAgIC8vIHNsb3cgcGFyc2luZwogICAgICAgICAgICAgICAgfHwgcHJlZ19tYXRjaCgKICAgICAgICAgICAgICAgICAgICAnQCg/Ol58LClcXHMqZGVmbGF0ZVxccyooPzokfCx8O1xccypxPSg/OjBcXC58MSkpQCcsICRhZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgnZGVmbGF0ZScsICdkZWZsYXRlJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRhbGxvd0NvbXByZXNzICYmIHByZWdfbWF0Y2goCiAgICAgICAgICAgICAgICAnQCg/Ol58LClcXHMqKCg/OngtKT9jb21wcmVzcylcXHMqKD86JHwsfDtcXHMqcT0oPzowXFwufDEpKUAnCiAgICAgICAgICAgICAgICAsJGFlCiAgICAgICAgICAgICAgICAsJG0pKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgnY29tcHJlc3MnLCAkbVsxXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheSgnJywgJycpOwogICAgfQoKICAgIC8qKgogICAgICogRW5jb2RlIChjb21wcmVzcykgdGhlIGNvbnRlbnQKICAgICAqIAogICAgICogSWYgdGhlIGVuY29kZSBtZXRob2QgaXMgJycgKG5vbmUpIG9yIGNvbXByZXNzaW9uIGxldmVsIGlzIDAsIG9yIHRoZSAnemxpYicKICAgICAqIGV4dGVuc2lvbiBpc24ndCBsb2FkZWQsIHdlIHJldHVybiBmYWxzZS4KICAgICAqIAogICAgICogVGhlbiB0aGUgYXBwcm9wcmlhdGUgZ3pfKiBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gY29tcHJlc3MgdGhlIGNvbnRlbnQuIElmCiAgICAgKiB0aGlzIGZhaWxzLCBmYWxzZSBpcyByZXR1cm5lZC4KICAgICAqIAogICAgICogVGhlIGhlYWRlciAiVmFyeTogQWNjZXB0LUVuY29kaW5nIiBpcyBhZGRlZC4gSWYgZW5jb2RpbmcgaXMgc3VjY2Vzc2Z1bCwgCiAgICAgKiB0aGUgQ29udGVudC1MZW5ndGggaGVhZGVyIGlzIHVwZGF0ZWQsIGFuZCBDb250ZW50LUVuY29kaW5nIGlzIGFsc28gYWRkZWQuCiAgICAgKiAKICAgICAqIEBwYXJhbSBpbnQgJGNvbXByZXNzaW9uTGV2ZWwgZ2l2ZW4gdG8gemxpYiBmdW5jdGlvbnMuIElmIG5vdCBnaXZlbiwgdGhlCiAgICAgKiBjbGFzcyBkZWZhdWx0IHdpbGwgYmUgdXNlZC4KICAgICAqIAogICAgICogQHJldHVybiBib29sIHN1Y2Nlc3MgdHJ1ZSBpZiB0aGUgY29udGVudCB3YXMgYWN0dWFsbHkgY29tcHJlc3NlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5jb2RlKCRjb21wcmVzc2lvbkxldmVsID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISBzZWxmOjppc0J1Z2d5SWUoKSkgewogICAgICAgICAgICAkdGhpcy0+X2hlYWRlcnNbJ1ZhcnknXSA9ICdBY2NlcHQtRW5jb2RpbmcnOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCA9PT0gJGNvbXByZXNzaW9uTGV2ZWwpIHsKICAgICAgICAgICAgJGNvbXByZXNzaW9uTGV2ZWwgPSBzZWxmOjokY29tcHJlc3Npb25MZXZlbDsKICAgICAgICB9CiAgICAgICAgaWYgKCcnID09PSAkdGhpcy0+X2VuY29kZU1ldGhvZFswXQogICAgICAgICAgICB8fCAoJGNvbXByZXNzaW9uTGV2ZWwgPT0gMCkKICAgICAgICAgICAgfHwgIWV4dGVuc2lvbl9sb2FkZWQoJ3psaWInKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCR0aGlzLT5fZW5jb2RlTWV0aG9kWzBdID09PSAnZGVmbGF0ZScpIHsKICAgICAgICAgICAgJGVuY29kZWQgPSBnemRlZmxhdGUoJHRoaXMtPl9jb250ZW50LCAkY29tcHJlc3Npb25MZXZlbCk7CiAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5fZW5jb2RlTWV0aG9kWzBdID09PSAnZ3ppcCcpIHsKICAgICAgICAgICAgJGVuY29kZWQgPSBnemVuY29kZSgkdGhpcy0+X2NvbnRlbnQsICRjb21wcmVzc2lvbkxldmVsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZW5jb2RlZCA9IGd6Y29tcHJlc3MoJHRoaXMtPl9jb250ZW50LCAkY29tcHJlc3Npb25MZXZlbCk7CiAgICAgICAgfQogICAgICAgIGlmIChmYWxzZSA9PT0gJGVuY29kZWQpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+X2hlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSAkdGhpcy0+X3VzZU1iU3RybGVuCiAgICAgICAgICAgID8gKHN0cmluZyltYl9zdHJsZW4oJGVuY29kZWQsICc4Yml0JykKICAgICAgICAgICAgOiAoc3RyaW5nKXN0cmxlbigkZW5jb2RlZCk7CiAgICAgICAgJHRoaXMtPl9oZWFkZXJzWydDb250ZW50LUVuY29kaW5nJ10gPSAkdGhpcy0+X2VuY29kZU1ldGhvZFsxXTsKICAgICAgICAkdGhpcy0+X2NvbnRlbnQgPSAkZW5jb2RlZDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBFbmNvZGUgYW5kIHNlbmQgYXBwcm9wcmlhdGUgaGVhZGVycyBhbmQgY29udGVudAogICAgICoKICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGNvbW1vbiB1c2Ugb2YgdGhlIGNsYXNzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQKICAgICAqIAogICAgICogQHBhcmFtIGludCAkY29tcHJlc3Npb25MZXZlbCBnaXZlbiB0byB6bGliIGZ1bmN0aW9ucy4gSWYgbm90IGdpdmVuLCB0aGUKICAgICAqIGNsYXNzIGRlZmF1bHQgd2lsbCBiZSB1c2VkLgogICAgICogCiAgICAgKiBAcmV0dXJuIGJvb2wgc3VjY2VzcyB0cnVlIGlmIHRoZSBjb250ZW50IHdhcyBhY3R1YWxseSBjb21wcmVzc2VkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb3V0cHV0KCRjb250ZW50LCAkY29tcHJlc3Npb25MZXZlbCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRjb21wcmVzc2lvbkxldmVsKSB7CiAgICAgICAgICAgICRjb21wcmVzc2lvbkxldmVsID0gc2VsZjo6JGNvbXByZXNzaW9uTGV2ZWw7CiAgICAgICAgfQogICAgICAgICRoZSA9IG5ldyBIVFRQX0VuY29kZXIoYXJyYXkoJ2NvbnRlbnQnID0+ICRjb250ZW50KSk7CiAgICAgICAgJHJldCA9ICRoZS0+ZW5jb2RlKCRjb21wcmVzc2lvbkxldmVsKTsKICAgICAgICAkaGUtPnNlbmRBbGwoKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICAvKioKICAgICAqIElzIHRoZSBicm93c2VyIGFuIElFIHZlcnNpb24gZWFybGllciB0aGFuIDYgU1AyPwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQnVnZ3lJZSgpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAkdWEgPSAkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ107CiAgICAgICAgLy8gcXVpY2sgZXNjYXBlIGZvciBub24tSUVzCiAgICAgICAgaWYgKDAgIT09IHN0cnBvcygkdWEsICdNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSAnKQogICAgICAgICAgICB8fCBmYWxzZSAhPT0gc3RycG9zKCR1YSwgJ09wZXJhJykpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBubyByZWdleCA9IGZhYWFzdAogICAgICAgICR2ZXJzaW9uID0gKGZsb2F0KXN1YnN0cigkdWEsIDMwKTsKICAgICAgICByZXR1cm4gc2VsZjo6JGVuY29kZVRvSWU2CiAgICAgICAgICAgID8gKCR2ZXJzaW9uIDwgNiB8fCAoJHZlcnNpb24gPT0gNiAmJiBmYWxzZSA9PT0gc3RycG9zKCR1YSwgJ1NWMScpKSkKICAgICAgICAgICAgOiAoJHZlcnNpb24gPCA3KTsKICAgIH0KICAgIAogICAgcHJvdGVjdGVkICRfY29udGVudCA9ICcnOwogICAgcHJvdGVjdGVkICRfaGVhZGVycyA9IGFycmF5KCk7CiAgICBwcm90ZWN0ZWQgJF9lbmNvZGVNZXRob2QgPSBhcnJheSgnJywgJycpOwogICAgcHJvdGVjdGVkICRfdXNlTWJTdHJsZW4gPSBmYWxzZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/JSMin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIEpTTWluLnBocCAtIG1vZGlmaWVkIFBIUCBpbXBsZW1lbnRhdGlvbiBvZiBEb3VnbGFzIENyb2NrZm9yZCdzIEpTTWluLgogKgogKiA8Y29kZT4KICogJG1pbmlmaWVkSnMgPSBKU01pbjo6bWluaWZ5KCRqcyk7CiAqIDwvY29kZT4KICoKICogVGhpcyBpcyBhIG1vZGlmaWVkIHBvcnQgb2YganNtaW4uYy4gSW1wcm92ZW1lbnRzOgogKgogKiBEb2VzIG5vdCBjaG9rZSBvbiBzb21lIHJlZ2V4cCBsaXRlcmFscyBjb250YWluaW5nIHF1b3RlIGNoYXJhY3RlcnMuIEUuZy4gLycvCiAqCiAqIFNwYWNlcyBhcmUgcHJlc2VydmVkIGFmdGVyIHNvbWUgYWRkL3N1YiBvcGVyYXRvcnMsIHNvIHRoZXkgYXJlIG5vdCBtaXN0YWtlbmx5CiAqIGNvbnZlcnRlZCB0byBwb3N0LWluYy9kZWMuIEUuZy4gYSArICsrYiAtPiBhKyArK2IKICoKICogUHJlc2VydmVzIG11bHRpLWxpbmUgY29tbWVudHMgdGhhdCBiZWdpbiB3aXRoIC8qIQogKgogKiBQSFAgNSBvciBoaWdoZXIgaXMgcmVxdWlyZWQuCiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSB1bmRlciB0aGUKICogc2FtZSB0ZXJtcyBhcyBqc21pbi5jLCB3aGljaCBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgogKgogKiAtLQogKiBDb3B5cmlnaHQgKGMpIDIwMDIgRG91Z2xhcyBDcm9ja2ZvcmQgICh3d3cuY3JvY2tmb3JkLmNvbSkKICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZgogKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgogKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvCiAqIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzCiAqIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbwogKiBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAogKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUaGUgU29mdHdhcmUgc2hhbGwgYmUgdXNlZCBmb3IgR29vZCwgbm90IEV2aWwuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgogKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAogKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogKiBTT0ZUV0FSRS4KICogLS0KICoKICogQHBhY2thZ2UgSlNNaW4KICogQGF1dGhvciBSeWFuIEdyb3ZlIDxyeWFuQHdvbmtvLmNvbT4gKFBIUCBwb3J0KQogKiBAYXV0aG9yIFN0ZXZlIENsYXkgPHN0ZXZlQG1yY2xheS5vcmc+IChtb2RpZmljYXRpb25zICsgY2xlYW51cCkKICogQGF1dGhvciBBbmRyZWEgR2lhbW1hcmNoaSA8aHR0cDovL3d3dy4zc2l0ZS5ldT4gKHNwYWNlQmVmb3JlUmVnRXhwKQogKiBAY29weXJpZ2h0IDIwMDIgRG91Z2xhcyBDcm9ja2ZvcmQgPGRvdWdsYXNAY3JvY2tmb3JkLmNvbT4gKGpzbWluLmMpCiAqIEBjb3B5cmlnaHQgMjAwOCBSeWFuIEdyb3ZlIDxyeWFuQHdvbmtvLmNvbT4gKFBIUCBwb3J0KQogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwIE1JVCBMaWNlbnNlCiAqIEBsaW5rIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9qc21pbi1waHAvCiAqLwoKY2xhc3MgSlNNaW4gewogICAgY29uc3QgT1JEX0xGICAgICAgICAgICAgPSAxMDsKICAgIGNvbnN0IE9SRF9TUEFDRSAgICAgICAgID0gMzI7CiAgICBjb25zdCBBQ1RJT05fS0VFUF9BICAgICA9IDE7CiAgICBjb25zdCBBQ1RJT05fREVMRVRFX0EgICA9IDI7CiAgICBjb25zdCBBQ1RJT05fREVMRVRFX0FfQiA9IDM7CgogICAgcHJvdGVjdGVkICRhICAgICAgICAgICA9ICJcbiI7CiAgICBwcm90ZWN0ZWQgJGIgICAgICAgICAgID0gJyc7CiAgICBwcm90ZWN0ZWQgJGlucHV0ICAgICAgID0gJyc7CiAgICBwcm90ZWN0ZWQgJGlucHV0SW5kZXggID0gMDsKICAgIHByb3RlY3RlZCAkaW5wdXRMZW5ndGggPSAwOwogICAgcHJvdGVjdGVkICRsb29rQWhlYWQgICA9IG51bGw7CiAgICBwcm90ZWN0ZWQgJG91dHB1dCAgICAgID0gJyc7CiAgICBwcm90ZWN0ZWQgJGxhc3RCeXRlT3V0ICA9ICcnOwogICAgcHJvdGVjdGVkICRrZXB0Q29tbWVudCA9ICcnOwoKICAgIC8qKgogICAgICogTWluaWZ5IEphdmFzY3JpcHQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkanMgSmF2YXNjcmlwdCB0byBiZSBtaW5pZmllZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWluaWZ5KCRqcykKICAgIHsKICAgICAgICAkanNtaW4gPSBuZXcgSlNNaW4oJGpzKTsKICAgICAgICByZXR1cm4gJGpzbWluLT5taW4oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlucHV0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaW5wdXQpCiAgICB7CiAgICAgICAgJHRoaXMtPmlucHV0ID0gJGlucHV0OwogICAgfQoKICAgIC8qKgogICAgICogUGVyZm9ybSBtaW5pZmljYXRpb24sIHJldHVybiByZXN1bHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWluKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPm91dHB1dCAhPT0gJycpIHsgLy8gbWluIGFscmVhZHkgcnVuCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgJG1iSW50RW5jID0gbnVsbDsKICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSAmJiAoKGludClpbmlfZ2V0KCdtYnN0cmluZy5mdW5jX292ZXJsb2FkJykgJiAyKSkgewogICAgICAgICAgICAkbWJJbnRFbmMgPSBtYl9pbnRlcm5hbF9lbmNvZGluZygpOwogICAgICAgICAgICBtYl9pbnRlcm5hbF9lbmNvZGluZygnOGJpdCcpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+aW5wdXQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsICR0aGlzLT5pbnB1dCk7CiAgICAgICAgJHRoaXMtPmlucHV0TGVuZ3RoID0gc3RybGVuKCR0aGlzLT5pbnB1dCk7CgogICAgICAgICR0aGlzLT5hY3Rpb24oc2VsZjo6QUNUSU9OX0RFTEVURV9BX0IpOwoKICAgICAgICB3aGlsZSAoJHRoaXMtPmEgIT09IG51bGwpIHsKICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIG5leHQgY29tbWFuZAogICAgICAgICAgICAkY29tbWFuZCA9IHNlbGY6OkFDVElPTl9LRUVQX0E7IC8vIGRlZmF1bHQKICAgICAgICAgICAgaWYgKCR0aGlzLT5hID09PSAnICcpIHsKICAgICAgICAgICAgICAgIGlmICgoJHRoaXMtPmxhc3RCeXRlT3V0ID09PSAnKycgfHwgJHRoaXMtPmxhc3RCeXRlT3V0ID09PSAnLScpCiAgICAgICAgICAgICAgICAgICAgICAgICYmICgkdGhpcy0+YiA9PT0gJHRoaXMtPmxhc3RCeXRlT3V0KSkgewogICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGRlbGV0ZSB0aGlzIHNwYWNlLiBJZiB3ZSBkbywgdGhlIGFkZGl0aW9uL3N1YnRyYWN0aW9uCiAgICAgICAgICAgICAgICAgICAgLy8gY291bGQgYmUgcGFyc2VkIGFzIGEgcG9zdC1pbmNyZW1lbnQKICAgICAgICAgICAgICAgIH0gZWxzZWlmICghICR0aGlzLT5pc0FscGhhTnVtKCR0aGlzLT5iKSkgewogICAgICAgICAgICAgICAgICAgICRjb21tYW5kID0gc2VsZjo6QUNUSU9OX0RFTEVURV9BOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2VpZiAoJHRoaXMtPmEgPT09ICJcbiIpIHsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YiA9PT0gJyAnKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0FfQjsKCiAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBtYnN0cmluZy5mdW5jX292ZXJsb2FkICYgMiwgbXVzdCBjaGVjayBmb3IgbnVsbCBiLAogICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBtYl9zdHJwb3Mgd2lsbCBnaXZlIFdBUk5JTkcKICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdGhpcy0+YiA9PT0gbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChmYWxzZSA9PT0gc3RycG9zKCd7WygrLSF+JywgJHRoaXMtPmIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEgJHRoaXMtPmlzQWxwaGFOdW0oJHRoaXMtPmIpKSkgewogICAgICAgICAgICAgICAgICAgICRjb21tYW5kID0gc2VsZjo6QUNUSU9OX0RFTEVURV9BOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2VpZiAoISAkdGhpcy0+aXNBbHBoYU51bSgkdGhpcy0+YSkpIHsKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YiA9PT0gJyAnCiAgICAgICAgICAgICAgICAgICAgfHwgKCR0aGlzLT5iID09PSAiXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICYmIChmYWxzZSA9PT0gc3RycG9zKCd9XSkrLSJcJycsICR0aGlzLT5hKSkpKSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzZWxmOjpBQ1RJT05fREVMRVRFX0FfQjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+YWN0aW9uKCRjb21tYW5kKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPm91dHB1dCA9IHRyaW0oJHRoaXMtPm91dHB1dCk7CgogICAgICAgIGlmICgkbWJJbnRFbmMgIT09IG51bGwpIHsKICAgICAgICAgICAgbWJfaW50ZXJuYWxfZW5jb2RpbmcoJG1iSW50RW5jKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5vdXRwdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBBQ1RJT05fS0VFUF9BID0gT3V0cHV0IEEuIENvcHkgQiB0byBBLiBHZXQgdGhlIG5leHQgQi4KICAgICAqIEFDVElPTl9ERUxFVEVfQSA9IENvcHkgQiB0byBBLiBHZXQgdGhlIG5leHQgQi4KICAgICAqIEFDVElPTl9ERUxFVEVfQV9CID0gR2V0IHRoZSBuZXh0IEIuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkY29tbWFuZAogICAgICogQHRocm93cyBKU01pbl9VbnRlcm1pbmF0ZWRSZWdFeHBFeGNlcHRpb258SlNNaW5fVW50ZXJtaW5hdGVkU3RyaW5nRXhjZXB0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBhY3Rpb24oJGNvbW1hbmQpCiAgICB7CiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGNvbXByZXNzICJhICsgKytiIiB0byAiYSsrK2IiLCBldGMuCiAgICAgICAgaWYgKCRjb21tYW5kID09PSBzZWxmOjpBQ1RJT05fREVMRVRFX0FfQgogICAgICAgICAgICAmJiAkdGhpcy0+YiA9PT0gJyAnCiAgICAgICAgICAgICYmICgkdGhpcy0+YSA9PT0gJysnIHx8ICR0aGlzLT5hID09PSAnLScpKSB7CiAgICAgICAgICAgIC8vIE5vdGU6IHdlJ3JlIGF0IGFuIGFkZGl0aW9uL3N1YnN0cmFjdGlvbiBvcGVyYXRvcjsgdGhlIGlucHV0SW5kZXgKICAgICAgICAgICAgLy8gd2lsbCBjZXJ0YWlubHkgYmUgYSB2YWxpZCBpbmRleAogICAgICAgICAgICBpZiAoJHRoaXMtPmlucHV0WyR0aGlzLT5pbnB1dEluZGV4XSA9PT0gJHRoaXMtPmEpIHsKICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgIisgKyIgb3IgIi0gLSIuIERvbid0IGRlbGV0ZSB0aGUgc3BhY2UuCiAgICAgICAgICAgICAgICAkY29tbWFuZCA9IHNlbGY6OkFDVElPTl9LRUVQX0E7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHN3aXRjaCAoJGNvbW1hbmQpIHsKICAgICAgICAgICAgY2FzZSBzZWxmOjpBQ1RJT05fS0VFUF9BOiAvLyAxCiAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hOwoKICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+a2VwdENvbW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0ID0gcnRyaW0oJHRoaXMtPm91dHB1dCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+a2VwdENvbW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmtlcHRDb21tZW50ID0gJyc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHRoaXMtPmxhc3RCeXRlT3V0ID0gJHRoaXMtPmE7CgogICAgICAgICAgICAgICAgLy8gZmFsbHRocm91Z2ggaW50ZW50aW9uYWwKICAgICAgICAgICAgY2FzZSBzZWxmOjpBQ1RJT05fREVMRVRFX0E6IC8vIDIKICAgICAgICAgICAgICAgICR0aGlzLT5hID0gJHRoaXMtPmI7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICInIiB8fCAkdGhpcy0+YSA9PT0gJyInKSB7IC8vIHN0cmluZyBsaXRlcmFsCiAgICAgICAgICAgICAgICAgICAgJHN0ciA9ICR0aGlzLT5hOyAvLyBpbiBjYXNlIG5lZWRlZCBmb3IgZXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgZm9yKDs7KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5sYXN0Qnl0ZU91dCA9ICR0aGlzLT5hOwoKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmEgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJHRoaXMtPmIpIHsgLy8gZW5kIHF1b3RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmlzRU9GKCR0aGlzLT5hKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpTTWluX1VudGVybWluYXRlZFN0cmluZ0V4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSlNNaW46IFVudGVybWluYXRlZCBTdHJpbmcgYXQgYnl0ZSB7JHRoaXMtPmlucHV0SW5kZXh9OiB7JHN0cn0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkc3RyIC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICdcXCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bGFzdEJ5dGVPdXQgPSAkdGhpcy0+YTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YSAgICAgICA9ICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHIgLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gZmFsbHRocm91Z2ggaW50ZW50aW9uYWwKICAgICAgICAgICAgY2FzZSBzZWxmOjpBQ1RJT05fREVMRVRFX0FfQjogLy8gMwogICAgICAgICAgICAgICAgJHRoaXMtPmIgPSAkdGhpcy0+bmV4dCgpOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5iID09PSAnLycgJiYgJHRoaXMtPmlzUmVnZXhwTGl0ZXJhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YSAuICR0aGlzLT5iOwogICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuID0gJy8nOyAvLyBrZWVwIGVudGlyZSBwYXR0ZXJuIGluIGNhc2Ugd2UgbmVlZCB0byByZXBvcnQgaXQgaW4gdGhlIGV4Y2VwdGlvbgogICAgICAgICAgICAgICAgICAgIGZvcig7OykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YSA9ICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhdHRlcm4gLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJ1snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoOzspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b3V0cHV0IC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuIC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+YSA9PT0gJ10nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICdcXCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmEgPSAkdGhpcy0+Z2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuIC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmlzRU9GKCR0aGlzLT5hKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSlNNaW5fVW50ZXJtaW5hdGVkUmVnRXhwRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkpTTWluOiBVbnRlcm1pbmF0ZWQgc2V0IGluIFJlZ0V4cCBhdCBieXRlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICR0aGlzLT5pbnB1dEluZGV4IC4iOiB7JHBhdHRlcm59Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICcvJykgeyAvLyBlbmQgcGF0dGVybgogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIHdoaWxlICh0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHRoaXMtPmEgPT09ICdcXCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vdXRwdXQgLj0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YSA9ICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuIC49ICR0aGlzLT5hOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHRoaXMtPmlzRU9GKCR0aGlzLT5hKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpTTWluX1VudGVybWluYXRlZFJlZ0V4cEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSlNNaW46IFVudGVybWluYXRlZCBSZWdFeHAgYXQgYnl0ZSB7JHRoaXMtPmlucHV0SW5kZXh9OiB7JHBhdHRlcm59Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPm91dHB1dCAuPSAkdGhpcy0+YTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxhc3RCeXRlT3V0ID0gJHRoaXMtPmE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5iID0gJHRoaXMtPm5leHQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZW5kIGNhc2UgQUNUSU9OX0RFTEVURV9BX0IKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzUmVnZXhwTGl0ZXJhbCgpCiAgICB7CiAgICAgICAgaWYgKGZhbHNlICE9PSBzdHJwb3MoIigsPTpbISZ8Pystfip7OyIsICR0aGlzLT5hKSkgewogICAgICAgICAgICAvLyB3ZSBvYnZpb3VzbHkgYXJlbid0IGRpdmlkaW5nCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPmEgPT09ICcgJyB8fCAkdGhpcy0+YSA9PT0gIlxuIikgewogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCR0aGlzLT5vdXRwdXQpOwogICAgICAgICAgICBpZiAoJGxlbmd0aCA8IDIpIHsgLy8gd2VpcmQgZWRnZSBjYXNlCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyB5b3UgY2FuJ3QgZGl2aWRlIGEga2V5d29yZAogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnLyg/OmNhc2V8ZWxzZXxpbnxyZXR1cm58dHlwZW9mKSQvJywgJHRoaXMtPm91dHB1dCwgJG0pKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPm91dHB1dCA9PT0gJG1bMF0pIHsgLy8gb2RkIGJ1dCBjb3VsZCBoYXBwZW4KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBpdCdzIGEga2V5d29yZCwgbm90IGVuZCBvZiBhbiBpZGVudGlmaWVyCiAgICAgICAgICAgICAgICAkY2hhckJlZm9yZUtleXdvcmQgPSBzdWJzdHIoJHRoaXMtPm91dHB1dCwgJGxlbmd0aCAtIHN0cmxlbigkbVswXSkgLSAxLCAxKTsKICAgICAgICAgICAgICAgIGlmICghICR0aGlzLT5pc0FscGhhTnVtKCRjaGFyQmVmb3JlS2V5d29yZCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gc3RkaW4uIFdhdGNoIG91dCBmb3IgbG9va2FoZWFkLiBJZiB0aGUgY2hhcmFjdGVyIGlzIGEgY29udHJvbCBjaGFyYWN0ZXIsCiAgICAgKiB0cmFuc2xhdGUgaXQgdG8gYSBzcGFjZSBvciBsaW5lZmVlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0KCkKICAgIHsKICAgICAgICAkYyA9ICR0aGlzLT5sb29rQWhlYWQ7CiAgICAgICAgJHRoaXMtPmxvb2tBaGVhZCA9IG51bGw7CiAgICAgICAgaWYgKCRjID09PSBudWxsKSB7CiAgICAgICAgICAgIC8vIGdldGMoc3RkaW4pCiAgICAgICAgICAgIGlmICgkdGhpcy0+aW5wdXRJbmRleCA8ICR0aGlzLT5pbnB1dExlbmd0aCkgewogICAgICAgICAgICAgICAgJGMgPSAkdGhpcy0+aW5wdXRbJHRoaXMtPmlucHV0SW5kZXhdOwogICAgICAgICAgICAgICAgJHRoaXMtPmlucHV0SW5kZXggKz0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAob3JkKCRjKSA+PSBzZWxmOjpPUkRfU1BBQ0UgfHwgJGMgPT09ICJcbiIgfHwgJGMgPT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICRjOwogICAgICAgIH0KICAgICAgICBpZiAoJGMgPT09ICJcciIpIHsKICAgICAgICAgICAgcmV0dXJuICJcbiI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnICc7CiAgICB9CgogICAgLyoqCiAgICAgKiBEb2VzICRhIGluZGljYXRlIGVuZCBvZiBpbnB1dD8KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzRU9GKCRhKQogICAgewogICAgICAgIHJldHVybiBvcmQoJGEpIDw9IHNlbGY6Ok9SRF9MRjsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBuZXh0IGNoYXIgKHdpdGhvdXQgZ2V0dGluZyBpdCkuIElmIGlzIGN0cmwgY2hhcmFjdGVyLCB0cmFuc2xhdGUgdG8gYSBzcGFjZSBvciBuZXdsaW5lLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwZWVrKCkKICAgIHsKICAgICAgICAkdGhpcy0+bG9va0FoZWFkID0gJHRoaXMtPmdldCgpOwogICAgICAgIHJldHVybiAkdGhpcy0+bG9va0FoZWFkOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRydWUgaWYgdGhlIGNoYXJhY3RlciBpcyBhIGxldHRlciwgZGlnaXQsIHVuZGVyc2NvcmUsIGRvbGxhciBzaWduLCBvciBub24tQVNDSUkgY2hhcmFjdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGMKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzQWxwaGFOdW0oJGMpCiAgICB7CiAgICAgICAgcmV0dXJuIChwcmVnX21hdGNoKCcvXlthLXowLTlBLVpfXFwkXFxcXF0kLycsICRjKSB8fCBvcmQoJGMpID4gMTI2KTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN1bWUgYSBzaW5nbGUgbGluZSBjb21tZW50IGZyb20gaW5wdXQgKHBvc3NpYmx5IHJldGFpbmluZyBpdCkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbnN1bWVTaW5nbGVMaW5lQ29tbWVudCgpCiAgICB7CiAgICAgICAgJGNvbW1lbnQgPSAnJzsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAkZ2V0ID0gJHRoaXMtPmdldCgpOwogICAgICAgICAgICAkY29tbWVudCAuPSAkZ2V0OwogICAgICAgICAgICBpZiAob3JkKCRnZXQpIDw9IHNlbGY6Ok9SRF9MRikgeyAvLyBlbmQgb2YgbGluZSByZWFjaGVkCiAgICAgICAgICAgICAgICAvLyBpZiBJRSBjb25kaXRpb25hbCBjb21tZW50CiAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15cXC9AKD86Y2Nfb258aWZ8ZWxpZnxlbHNlfGVuZClcXGIvJywgJGNvbW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmtlcHRDb21tZW50IC49ICIveyRjb21tZW50fSI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdW1lIGEgbXVsdGlwbGUgbGluZSBjb21tZW50IGZyb20gaW5wdXQgKHBvc3NpYmx5IHJldGFpbmluZyBpdCkKICAgICAqCiAgICAgKiBAdGhyb3dzIEpTTWluX1VudGVybWluYXRlZENvbW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbnN1bWVNdWx0aXBsZUxpbmVDb21tZW50KCkKICAgIHsKICAgICAgICAkdGhpcy0+Z2V0KCk7CiAgICAgICAgJGNvbW1lbnQgPSAnJzsKICAgICAgICBmb3IoOzspIHsKICAgICAgICAgICAgJGdldCA9ICR0aGlzLT5nZXQoKTsKICAgICAgICAgICAgaWYgKCRnZXQgPT09ICcqJykgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5wZWVrKCkgPT09ICcvJykgeyAvLyBlbmQgb2YgY29tbWVudCByZWFjaGVkCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmdldCgpOwogICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJGNvbW1lbnQsICchJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJlc2VydmVkIGJ5IFlVSSBDb21wcmVzc29yCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmtlcHRDb21tZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBwcmVwZW5kIGEgbmV3bGluZSBpZiB0d28gY29tbWVudHMgcmlnaHQgYWZ0ZXIgb25lIGFub3RoZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5rZXB0Q29tbWVudCA9ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmtlcHRDb21tZW50IC49ICIvKiEiIC4gc3Vic3RyKCRjb21tZW50LCAxKSAuICIqL1xuIjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZWdfbWF0Y2goJy9eQCg/OmNjX29ufGlmfGVsaWZ8ZWxzZXxlbmQpXFxiLycsICRjb21tZW50KSkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJRSBjb25kaXRpb25hbAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+a2VwdENvbW1lbnQgLj0gIi8qeyRjb21tZW50fSovIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2VpZiAoJGdldCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpTTWluX1VudGVybWluYXRlZENvbW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgIkpTTWluOiBVbnRlcm1pbmF0ZWQgY29tbWVudCBhdCBieXRlIHskdGhpcy0+aW5wdXRJbmRleH06IC8qeyRjb21tZW50fSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb21tZW50IC49ICRnZXQ7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBuZXh0IGNoYXJhY3Rlciwgc2tpcHBpbmcgb3ZlciBjb21tZW50cy4gU29tZSBjb21tZW50cyBtYXkgYmUgcHJlc2VydmVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBuZXh0KCkKICAgIHsKICAgICAgICAkZ2V0ID0gJHRoaXMtPmdldCgpOwogICAgICAgIGlmICgkZ2V0ID09PSAnLycpIHsKICAgICAgICAgICAgc3dpdGNoICgkdGhpcy0+cGVlaygpKSB7CiAgICAgICAgICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29uc3VtZVNpbmdsZUxpbmVDb21tZW50KCk7CiAgICAgICAgICAgICAgICAgICAgJGdldCA9ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICcqJzoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y29uc3VtZU11bHRpcGxlTGluZUNvbW1lbnQoKTsKICAgICAgICAgICAgICAgICAgICAkZ2V0ID0gJyAnOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZ2V0OwogICAgfQp9CgpjbGFzcyBKU01pbl9VbnRlcm1pbmF0ZWRTdHJpbmdFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KY2xhc3MgSlNNaW5fVW50ZXJtaW5hdGVkQ29tbWVudEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQpjbGFzcyBKU01pbl9VbnRlcm1pbmF0ZWRSZWdFeHBFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30K]]></data>
	</file>
	<file>
	  <filename>/min/lib/JSMinPlus.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBKU01pblBsdXMgdmVyc2lvbiAxLjQKICoKICogTWluaWZpZXMgYSBqYXZhc2NyaXB0IGZpbGUgdXNpbmcgYSBqYXZhc2NyaXB0IHBhcnNlcgogKgogKiBUaGlzIGltcGxlbWVudHMgYSBQSFAgcG9ydCBvZiBCcmVuZGFuIEVpY2gncyBOYXJjaXNzdXMgb3BlbiBzb3VyY2UgamF2YXNjcmlwdCBlbmdpbmUgKGluIGphdmFzY3JpcHQpCiAqIFJlZmVyZW5jZXM6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmFyY2lzc3VzXyhKYXZhU2NyaXB0X2VuZ2luZSkKICogTmFyY2lzc3VzIHNvdXJjZWNvZGU6IGh0dHA6Ly9teHIubW96aWxsYS5vcmcvbW96aWxsYS9zb3VyY2UvanMvbmFyY2lzc3VzLwogKiBKU01pblBsdXMgd2VibG9nOiBodHRwOi8vY3Jpc3AudHdlYWtibG9ncy5uZXQvYmxvZy9jYXQvNzE2CiAqCiAqIFRpbm8gWmlqZGVsIDxjcmlzcEB0d2Vha2Vycy5uZXQ+CiAqCiAqIFVzYWdlOiAkbWluaWZpZWQgPSBKU01pblBsdXM6Om1pbmlmeSgkc2NyaXB0IFssICRmaWxlbmFtZV0pCiAqCiAqIFZlcnNpb25sb2cgKHNlZSBhbHNvIGNoYW5nZWxvZy50eHQpOgogKiAyMy0wNy0yMDExIC0gcmVtb3ZlIGR5bmFtaWMgY3JlYXRpb24gb2YgT1BfKiBhbmQgS0VZV09SRF8qIGRlZmluZXMgYW5kIGRlY2xhcmUgdGhlbSBvbiB0b3AKICogICAgICAgICAgICAgIHJlZHVjZSBtZW1vcnkgZm9vdHByaW50IGJ5IG1pbmlmeWluZyBieSBibG9jay1zY29wZQogKiAgICAgICAgICAgICAgc29tZSBzbWFsbCBieXRlLXNhdmluZyBhbmQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzCiAqIDEyLTA1LTIwMDkgLSBmaXhlZCBob29rOmNvbG9uIHByZWNlZGVuY2UsIGZpeGVkIGVtcHR5IGJvZHkgaW4gbG9vcCBhbmQgaWYtY29uc3RydWN0cwogKiAxOC0wNC0yMDA5IC0gZml4ZWQgY3Jhc2hidWcgaW4gUEhQIDUuMi45IGFuZCBzZXZlcmFsIG90aGVyIGJ1Z2ZpeGVzCiAqIDEyLTA0LTIwMDkgLSBzb21lIHNtYWxsIGJ1Z2ZpeGVzIGFuZCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKICogMDktMDQtMjAwOSAtIGluaXRpYWwgb3BlbiBzb3VyY2VkIHZlcnNpb24gMS4wCiAqCiAqIExhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0OiBodHRwOi8vZmlsZXMudHdlYWtlcnMubmV0L2pzbWlucGx1cy9qc21pbnBsdXMuemlwCiAqCiAqLwoKLyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgogKiBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKICoKICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCiAqIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAogKiB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLwogKgogKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAogKiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKICogTGljZW5zZS4KICoKICogVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE5hcmNpc3N1cyBKYXZhU2NyaXB0IGVuZ2luZS4KICoKICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCiAqIEJyZW5kYW4gRWljaCA8YnJlbmRhbkBtb3ppbGxhLm9yZz4uCiAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDQKICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogKgogKiBDb250cmlidXRvcihzKTogVGlubyBaaWpkZWwgPGNyaXNwQHR3ZWFrZXJzLm5ldD4KICogUEhQIHBvcnQsIG1vZGlmaWNhdGlvbnMgYW5kIG1pbmlmaWVyIHJvdXRpbmUgYXJlIChDKSAyMDA5LTIwMTEKICoKICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKICogZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCiAqIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAogKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAogKiBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQogKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCiAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCiAqIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCiAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCiAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KICoKICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KCmRlZmluZSgnVE9LRU5fRU5EJywgMSk7CmRlZmluZSgnVE9LRU5fTlVNQkVSJywgMik7CmRlZmluZSgnVE9LRU5fSURFTlRJRklFUicsIDMpOwpkZWZpbmUoJ1RPS0VOX1NUUklORycsIDQpOwpkZWZpbmUoJ1RPS0VOX1JFR0VYUCcsIDUpOwpkZWZpbmUoJ1RPS0VOX05FV0xJTkUnLCA2KTsKZGVmaW5lKCdUT0tFTl9DT05EQ09NTUVOVF9TVEFSVCcsIDcpOwpkZWZpbmUoJ1RPS0VOX0NPTkRDT01NRU5UX0VORCcsIDgpOwoKZGVmaW5lKCdKU19TQ1JJUFQnLCAxMDApOwpkZWZpbmUoJ0pTX0JMT0NLJywgMTAxKTsKZGVmaW5lKCdKU19MQUJFTCcsIDEwMik7CmRlZmluZSgnSlNfRk9SX0lOJywgMTAzKTsKZGVmaW5lKCdKU19DQUxMJywgMTA0KTsKZGVmaW5lKCdKU19ORVdfV0lUSF9BUkdTJywgMTA1KTsKZGVmaW5lKCdKU19JTkRFWCcsIDEwNik7CmRlZmluZSgnSlNfQVJSQVlfSU5JVCcsIDEwNyk7CmRlZmluZSgnSlNfT0JKRUNUX0lOSVQnLCAxMDgpOwpkZWZpbmUoJ0pTX1BST1BFUlRZX0lOSVQnLCAxMDkpOwpkZWZpbmUoJ0pTX0dFVFRFUicsIDExMCk7CmRlZmluZSgnSlNfU0VUVEVSJywgMTExKTsKZGVmaW5lKCdKU19HUk9VUCcsIDExMik7CmRlZmluZSgnSlNfTElTVCcsIDExMyk7CgpkZWZpbmUoJ0pTX01JTklGSUVEJywgOTk5KTsKCmRlZmluZSgnREVDTEFSRURfRk9STScsIDApOwpkZWZpbmUoJ0VYUFJFU1NFRF9GT1JNJywgMSk7CmRlZmluZSgnU1RBVEVNRU5UX0ZPUk0nLCAyKTsKCi8qIE9wZXJhdG9ycyAqLwpkZWZpbmUoJ09QX1NFTUlDT0xPTicsICc7Jyk7CmRlZmluZSgnT1BfQ09NTUEnLCAnLCcpOwpkZWZpbmUoJ09QX0hPT0snLCAnPycpOwpkZWZpbmUoJ09QX0NPTE9OJywgJzonKTsKZGVmaW5lKCdPUF9PUicsICd8fCcpOwpkZWZpbmUoJ09QX0FORCcsICcmJicpOwpkZWZpbmUoJ09QX0JJVFdJU0VfT1InLCAnfCcpOwpkZWZpbmUoJ09QX0JJVFdJU0VfWE9SJywgJ14nKTsKZGVmaW5lKCdPUF9CSVRXSVNFX0FORCcsICcmJyk7CmRlZmluZSgnT1BfU1RSSUNUX0VRJywgJz09PScpOwpkZWZpbmUoJ09QX0VRJywgJz09Jyk7CmRlZmluZSgnT1BfQVNTSUdOJywgJz0nKTsKZGVmaW5lKCdPUF9TVFJJQ1RfTkUnLCAnIT09Jyk7CmRlZmluZSgnT1BfTkUnLCAnIT0nKTsKZGVmaW5lKCdPUF9MU0gnLCAnPDwnKTsKZGVmaW5lKCdPUF9MRScsICc8PScpOwpkZWZpbmUoJ09QX0xUJywgJzwnKTsKZGVmaW5lKCdPUF9VUlNIJywgJz4+PicpOwpkZWZpbmUoJ09QX1JTSCcsICc+PicpOwpkZWZpbmUoJ09QX0dFJywgJz49Jyk7CmRlZmluZSgnT1BfR1QnLCAnPicpOwpkZWZpbmUoJ09QX0lOQ1JFTUVOVCcsICcrKycpOwpkZWZpbmUoJ09QX0RFQ1JFTUVOVCcsICctLScpOwpkZWZpbmUoJ09QX1BMVVMnLCAnKycpOwpkZWZpbmUoJ09QX01JTlVTJywgJy0nKTsKZGVmaW5lKCdPUF9NVUwnLCAnKicpOwpkZWZpbmUoJ09QX0RJVicsICcvJyk7CmRlZmluZSgnT1BfTU9EJywgJyUnKTsKZGVmaW5lKCdPUF9OT1QnLCAnIScpOwpkZWZpbmUoJ09QX0JJVFdJU0VfTk9UJywgJ34nKTsKZGVmaW5lKCdPUF9ET1QnLCAnLicpOwpkZWZpbmUoJ09QX0xFRlRfQlJBQ0tFVCcsICdbJyk7CmRlZmluZSgnT1BfUklHSFRfQlJBQ0tFVCcsICddJyk7CmRlZmluZSgnT1BfTEVGVF9DVVJMWScsICd7Jyk7CmRlZmluZSgnT1BfUklHSFRfQ1VSTFknLCAnfScpOwpkZWZpbmUoJ09QX0xFRlRfUEFSRU4nLCAnKCcpOwpkZWZpbmUoJ09QX1JJR0hUX1BBUkVOJywgJyknKTsKZGVmaW5lKCdPUF9DT05EQ09NTUVOVF9FTkQnLCAnQCovJyk7CgpkZWZpbmUoJ09QX1VOQVJZX1BMVVMnLCAnVSsnKTsKZGVmaW5lKCdPUF9VTkFSWV9NSU5VUycsICdVLScpOwoKLyogS2V5d29yZHMgKi8KZGVmaW5lKCdLRVlXT1JEX0JSRUFLJywgJ2JyZWFrJyk7CmRlZmluZSgnS0VZV09SRF9DQVNFJywgJ2Nhc2UnKTsKZGVmaW5lKCdLRVlXT1JEX0NBVENIJywgJ2NhdGNoJyk7CmRlZmluZSgnS0VZV09SRF9DT05TVCcsICdjb25zdCcpOwpkZWZpbmUoJ0tFWVdPUkRfQ09OVElOVUUnLCAnY29udGludWUnKTsKZGVmaW5lKCdLRVlXT1JEX0RFQlVHR0VSJywgJ2RlYnVnZ2VyJyk7CmRlZmluZSgnS0VZV09SRF9ERUZBVUxUJywgJ2RlZmF1bHQnKTsKZGVmaW5lKCdLRVlXT1JEX0RFTEVURScsICdkZWxldGUnKTsKZGVmaW5lKCdLRVlXT1JEX0RPJywgJ2RvJyk7CmRlZmluZSgnS0VZV09SRF9FTFNFJywgJ2Vsc2UnKTsKZGVmaW5lKCdLRVlXT1JEX0VOVU0nLCAnZW51bScpOwpkZWZpbmUoJ0tFWVdPUkRfRkFMU0UnLCAnZmFsc2UnKTsKZGVmaW5lKCdLRVlXT1JEX0ZJTkFMTFknLCAnZmluYWxseScpOwpkZWZpbmUoJ0tFWVdPUkRfRk9SJywgJ2ZvcicpOwpkZWZpbmUoJ0tFWVdPUkRfRlVOQ1RJT04nLCAnZnVuY3Rpb24nKTsKZGVmaW5lKCdLRVlXT1JEX0lGJywgJ2lmJyk7CmRlZmluZSgnS0VZV09SRF9JTicsICdpbicpOwpkZWZpbmUoJ0tFWVdPUkRfSU5TVEFOQ0VPRicsICdpbnN0YW5jZW9mJyk7CmRlZmluZSgnS0VZV09SRF9ORVcnLCAnbmV3Jyk7CmRlZmluZSgnS0VZV09SRF9OVUxMJywgJ251bGwnKTsKZGVmaW5lKCdLRVlXT1JEX1JFVFVSTicsICdyZXR1cm4nKTsKZGVmaW5lKCdLRVlXT1JEX1NXSVRDSCcsICdzd2l0Y2gnKTsKZGVmaW5lKCdLRVlXT1JEX1RISVMnLCAndGhpcycpOwpkZWZpbmUoJ0tFWVdPUkRfVEhST1cnLCAndGhyb3cnKTsKZGVmaW5lKCdLRVlXT1JEX1RSVUUnLCAndHJ1ZScpOwpkZWZpbmUoJ0tFWVdPUkRfVFJZJywgJ3RyeScpOwpkZWZpbmUoJ0tFWVdPUkRfVFlQRU9GJywgJ3R5cGVvZicpOwpkZWZpbmUoJ0tFWVdPUkRfVkFSJywgJ3ZhcicpOwpkZWZpbmUoJ0tFWVdPUkRfVk9JRCcsICd2b2lkJyk7CmRlZmluZSgnS0VZV09SRF9XSElMRScsICd3aGlsZScpOwpkZWZpbmUoJ0tFWVdPUkRfV0lUSCcsICd3aXRoJyk7CgoKY2xhc3MgSlNNaW5QbHVzCnsKCXByaXZhdGUgJHBhcnNlcjsKCXByaXZhdGUgJHJlc2VydmVkID0gYXJyYXkoCgkJJ2JyZWFrJywgJ2Nhc2UnLCAnY2F0Y2gnLCAnY29udGludWUnLCAnZGVmYXVsdCcsICdkZWxldGUnLCAnZG8nLAoJCSdlbHNlJywgJ2ZpbmFsbHknLCAnZm9yJywgJ2Z1bmN0aW9uJywgJ2lmJywgJ2luJywgJ2luc3RhbmNlb2YnLAoJCSduZXcnLCAncmV0dXJuJywgJ3N3aXRjaCcsICd0aGlzJywgJ3Rocm93JywgJ3RyeScsICd0eXBlb2YnLCAndmFyJywKCQkndm9pZCcsICd3aGlsZScsICd3aXRoJywKCQkvLyBXb3JkcyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoJCSdhYnN0cmFjdCcsICdib29sZWFuJywgJ2J5dGUnLCAnY2hhcicsICdjbGFzcycsICdjb25zdCcsICdkZWJ1Z2dlcicsCgkJJ2RvdWJsZScsICdlbnVtJywgJ2V4cG9ydCcsICdleHRlbmRzJywgJ2ZpbmFsJywgJ2Zsb2F0JywgJ2dvdG8nLAoJCSdpbXBsZW1lbnRzJywgJ2ltcG9ydCcsICdpbnQnLCAnaW50ZXJmYWNlJywgJ2xvbmcnLCAnbmF0aXZlJywKCQkncGFja2FnZScsICdwcml2YXRlJywgJ3Byb3RlY3RlZCcsICdwdWJsaWMnLCAnc2hvcnQnLCAnc3RhdGljJywKCQknc3VwZXInLCAnc3luY2hyb25pemVkJywgJ3Rocm93cycsICd0cmFuc2llbnQnLCAndm9sYXRpbGUnLAoJCS8vIFRoZXNlIGFyZSBub3QgcmVzZXJ2ZWQsIGJ1dCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50CgkJLy8gaW4gaXNWYWxpZElkZW50aWZpZXIgKFNlZSBqc2xpbnQgc291cmNlIGNvZGUpCgkJJ2FyZ3VtZW50cycsICdldmFsJywgJ3RydWUnLCAnZmFsc2UnLCAnSW5maW5pdHknLCAnTmFOJywgJ251bGwnLCAndW5kZWZpbmVkJwoJKTsKCglwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKCXsKCQkkdGhpcy0+cGFyc2VyID0gbmV3IEpTUGFyc2VyKCR0aGlzKTsKCX0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1pbmlmeSgkanMsICRmaWxlbmFtZT0nJykKCXsKCQlzdGF0aWMgJGluc3RhbmNlOwoKCQkvLyB0aGlzIGlzIGEgc2luZ2xldG9uCgkJaWYoISRpbnN0YW5jZSkKCQkJJGluc3RhbmNlID0gbmV3IEpTTWluUGx1cygpOwoKCQlyZXR1cm4gJGluc3RhbmNlLT5taW4oJGpzLCAkZmlsZW5hbWUpOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gbWluKCRqcywgJGZpbGVuYW1lKQoJewoJCXRyeQoJCXsKCQkJJG4gPSAkdGhpcy0+cGFyc2VyLT5wYXJzZSgkanMsICRmaWxlbmFtZSwgMSk7CgkJCXJldHVybiAkdGhpcy0+cGFyc2VUcmVlKCRuKTsKCQl9CgkJY2F0Y2goRXhjZXB0aW9uICRlKQoJCXsKCQkJZWNobyAkZS0+Z2V0TWVzc2FnZSgpIC4gIlxuIjsKCQl9CgoJCXJldHVybiBmYWxzZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcGFyc2VUcmVlKCRuLCAkbm9CbG9ja0dyb3VwaW5nID0gZmFsc2UpCgl7CgkJJHMgPSAnJzsKCgkJc3dpdGNoICgkbi0+dHlwZSkKCQl7CgkJCWNhc2UgSlNfTUlOSUZJRUQ6CgkJCQkkcyA9ICRuLT52YWx1ZTsKCQkJYnJlYWs7CgoJCQljYXNlIEpTX1NDUklQVDoKCQkJCS8vIHdlIGRvIG5vdGhpbmcgeWV0IHdpdGggZnVuRGVjbHMgb3IgdmFyRGVjbHMKCQkJCSRub0Jsb2NrR3JvdXBpbmcgPSB0cnVlOwoJCQkvLyBGQUxMIFRIUk9VR0gKCgkJCWNhc2UgSlNfQkxPQ0s6CgkJCQkkY2hpbGRzID0gJG4tPnRyZWVOb2RlczsKCQkJCSRsYXN0VHlwZSA9IDA7CgkJCQlmb3IgKCRjID0gMCwgJGkgPSAwLCAkaiA9IGNvdW50KCRjaGlsZHMpOyAkaSA8ICRqOyAkaSsrKQoJCQkJewoJCQkJCSR0eXBlID0gJGNoaWxkc1skaV0tPnR5cGU7CgkJCQkJJHQgPSAkdGhpcy0+cGFyc2VUcmVlKCRjaGlsZHNbJGldKTsKCQkJCQlpZiAoc3RybGVuKCR0KSkKCQkJCQl7CgkJCQkJCWlmICgkYykKCQkJCQkJewoJCQkJCQkJJHMgPSBydHJpbSgkcywgJzsnKTsKCgkJCQkJCQlpZiAoJHR5cGUgPT0gS0VZV09SRF9GVU5DVElPTiAmJiAkY2hpbGRzWyRpXS0+ZnVuY3Rpb25Gb3JtID09IERFQ0xBUkVEX0ZPUk0pCgkJCQkJCQl7CgkJCQkJCQkJLy8gcHV0IGRlY2xhcmVkIGZ1bmN0aW9ucyBvbiBhIG5ldyBsaW5lCgkJCQkJCQkJJHMgLj0gIlxuIjsKCQkJCQkJCX0KCQkJCQkJCWVsc2VpZiAoJHR5cGUgPT0gS0VZV09SRF9WQVIgJiYgJHR5cGUgPT0gJGxhc3RUeXBlKQoJCQkJCQkJewoJCQkJCQkJCS8vIG11dGlwbGUgdmFyLXN0YXRlbWVudHMgY2FuIGdvIGludG8gb25lCgkJCQkJCQkJJHQgPSAnLCcgLiBzdWJzdHIoJHQsIDQpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCS8vIGFkZCB0ZXJtaW5hdG9yCgkJCQkJCQkJJHMgLj0gJzsnOwoJCQkJCQkJfQoJCQkJCQl9CgoJCQkJCQkkcyAuPSAkdDsKCgkJCQkJCSRjKys7CgkJCQkJCSRsYXN0VHlwZSA9ICR0eXBlOwoJCQkJCX0KCQkJCX0KCgkJCQlpZiAoJGMgPiAxICYmICEkbm9CbG9ja0dyb3VwaW5nKQoJCQkJewoJCQkJCSRzID0gJ3snIC4gJHMgLiAnfSc7CgkJCQl9CgkJCWJyZWFrOwoKCQkJY2FzZSBLRVlXT1JEX0ZVTkNUSU9OOgoJCQkJJHMgLj0gJ2Z1bmN0aW9uJyAuICgkbi0+bmFtZSA/ICcgJyAuICRuLT5uYW1lIDogJycpIC4gJygnOwoJCQkJJHBhcmFtcyA9ICRuLT5wYXJhbXM7CgkJCQlmb3IgKCRpID0gMCwgJGogPSBjb3VudCgkcGFyYW1zKTsgJGkgPCAkajsgJGkrKykKCQkJCQkkcyAuPSAoJGkgPyAnLCcgOiAnJykgLiAkcGFyYW1zWyRpXTsKCQkJCSRzIC49ICcpeycgLiAkdGhpcy0+cGFyc2VUcmVlKCRuLT5ib2R5LCB0cnVlKSAuICd9JzsKCQkJYnJlYWs7CgoJCQljYXNlIEtFWVdPUkRfSUY6CgkJCQkkcyA9ICdpZignIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+Y29uZGl0aW9uKSAuICcpJzsKCQkJCSR0aGVuUGFydCA9ICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRoZW5QYXJ0KTsKCQkJCSRlbHNlUGFydCA9ICRuLT5lbHNlUGFydCA/ICR0aGlzLT5wYXJzZVRyZWUoJG4tPmVsc2VQYXJ0KSA6IG51bGw7CgoJCQkJLy8gZW1wdHkgaWYtc3RhdGVtZW50CgkJCQlpZiAoJHRoZW5QYXJ0ID09ICcnKQoJCQkJCSR0aGVuUGFydCA9ICc7JzsKCgkJCQlpZiAoJGVsc2VQYXJ0KQoJCQkJewoJCQkJCS8vIGJlIGNhcmVmdWxsIGFuZCBhbHdheXMgbWFrZSBhIGJsb2NrIG91dCBvZiB0aGUgdGhlblBhcnQ7IGNvdWxkIGJlIG1vcmUgb3B0aW1pemVkIGJ1dCBpcyBhIGxvdCBvZiB0cm91YmxlCgkJCQkJaWYgKCR0aGVuUGFydCAhPSAnOycgJiYgJHRoZW5QYXJ0WzBdICE9ICd7JykKCQkJCQkJJHRoZW5QYXJ0ID0gJ3snIC4gJHRoZW5QYXJ0IC4gJ30nOwoKCQkJCQkkcyAuPSAkdGhlblBhcnQgLiAnZWxzZSc7CgoJCQkJCS8vIHdlIGNvdWxkIGNoZWNrIGZvciBtb3JlLCBidXQgdGhhdCBoYXJkbHkgZXZlciBhcHBsaWVzIHNvIGdvIGZvciBwZXJmb3JtYW5jZQoJCQkJCWlmICgkZWxzZVBhcnRbMF0gIT0gJ3snKQoJCQkJCQkkcyAuPSAnICc7CgoJCQkJCSRzIC49ICRlbHNlUGFydDsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkcyAuPSAkdGhlblBhcnQ7CgkJCQl9CgkJCWJyZWFrOwoKCQkJY2FzZSBLRVlXT1JEX1NXSVRDSDoKCQkJCSRzID0gJ3N3aXRjaCgnIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+ZGlzY3JpbWluYW50KSAuICcpeyc7CgkJCQkkY2FzZXMgPSAkbi0+Y2FzZXM7CgkJCQlmb3IgKCRpID0gMCwgJGogPSBjb3VudCgkY2FzZXMpOyAkaSA8ICRqOyAkaSsrKQoJCQkJewoJCQkJCSRjYXNlID0gJGNhc2VzWyRpXTsKCQkJCQlpZiAoJGNhc2UtPnR5cGUgPT0gS0VZV09SRF9DQVNFKQoJCQkJCQkkcyAuPSAnY2FzZScgLiAoJGNhc2UtPmNhc2VMYWJlbC0+dHlwZSAhPSBUT0tFTl9TVFJJTkcgPyAnICcgOiAnJykgLiAkdGhpcy0+cGFyc2VUcmVlKCRjYXNlLT5jYXNlTGFiZWwpIC4gJzonOwoJCQkJCWVsc2UKCQkJCQkJJHMgLj0gJ2RlZmF1bHQ6JzsKCgkJCQkJJHN0YXRlbWVudCA9ICR0aGlzLT5wYXJzZVRyZWUoJGNhc2UtPnN0YXRlbWVudHMsIHRydWUpOwoJCQkJCWlmICgkc3RhdGVtZW50KQoJCQkJCXsKCQkJCQkJJHMgLj0gJHN0YXRlbWVudDsKCQkJCQkJLy8gbm8gdGVybWluYXRvciBmb3IgbGFzdCBzdGF0ZW1lbnQKCQkJCQkJaWYgKCRpICsgMSA8ICRqKQoJCQkJCQkJJHMgLj0gJzsnOwoJCQkJCX0KCQkJCX0KCQkJCSRzIC49ICd9JzsKCQkJYnJlYWs7CgoJCQljYXNlIEtFWVdPUkRfRk9SOgoJCQkJJHMgPSAnZm9yKCcgLiAoJG4tPnNldHVwID8gJHRoaXMtPnBhcnNlVHJlZSgkbi0+c2V0dXApIDogJycpCgkJCQkJLiAnOycgLiAoJG4tPmNvbmRpdGlvbiA/ICR0aGlzLT5wYXJzZVRyZWUoJG4tPmNvbmRpdGlvbikgOiAnJykKCQkJCQkuICc7JyAuICgkbi0+dXBkYXRlID8gJHRoaXMtPnBhcnNlVHJlZSgkbi0+dXBkYXRlKSA6ICcnKSAuICcpJzsKCgkJCQkkYm9keSAgPSAkdGhpcy0+cGFyc2VUcmVlKCRuLT5ib2R5KTsKCQkJCWlmICgkYm9keSA9PSAnJykKCQkJCQkkYm9keSA9ICc7JzsKCgkJCQkkcyAuPSAkYm9keTsKCQkJYnJlYWs7CgoJCQljYXNlIEtFWVdPUkRfV0hJTEU6CgkJCQkkcyA9ICd3aGlsZSgnIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+Y29uZGl0aW9uKSAuICcpJzsKCgkJCQkkYm9keSAgPSAkdGhpcy0+cGFyc2VUcmVlKCRuLT5ib2R5KTsKCQkJCWlmICgkYm9keSA9PSAnJykKCQkJCQkkYm9keSA9ICc7JzsKCgkJCQkkcyAuPSAkYm9keTsKCQkJYnJlYWs7CgoJCQljYXNlIEpTX0ZPUl9JTjoKCQkJCSRzID0gJ2ZvcignIC4gKCRuLT52YXJEZWNsID8gJHRoaXMtPnBhcnNlVHJlZSgkbi0+dmFyRGVjbCkgOiAkdGhpcy0+cGFyc2VUcmVlKCRuLT5pdGVyYXRvcikpIC4gJyBpbiAnIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+b2JqZWN0KSAuICcpJzsKCgkJCQkkYm9keSAgPSAkdGhpcy0+cGFyc2VUcmVlKCRuLT5ib2R5KTsKCQkJCWlmICgkYm9keSA9PSAnJykKCQkJCQkkYm9keSA9ICc7JzsKCgkJCQkkcyAuPSAkYm9keTsKCQkJYnJlYWs7CgoJCQljYXNlIEtFWVdPUkRfRE86CgkJCQkkcyA9ICdkb3snIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+Ym9keSwgdHJ1ZSkgLiAnfXdoaWxlKCcgLiAkdGhpcy0+cGFyc2VUcmVlKCRuLT5jb25kaXRpb24pIC4gJyknOwoJCQlicmVhazsKCgkJCWNhc2UgS0VZV09SRF9CUkVBSzoKCQkJY2FzZSBLRVlXT1JEX0NPTlRJTlVFOgoJCQkJJHMgPSAkbi0+dmFsdWUgLiAoJG4tPmxhYmVsID8gJyAnIC4gJG4tPmxhYmVsIDogJycpOwoJCQlicmVhazsKCgkJCWNhc2UgS0VZV09SRF9UUlk6CgkJCQkkcyA9ICd0cnl7JyAuICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyeUJsb2NrLCB0cnVlKSAuICd9JzsKCQkJCSRjYXRjaENsYXVzZXMgPSAkbi0+Y2F0Y2hDbGF1c2VzOwoJCQkJZm9yICgkaSA9IDAsICRqID0gY291bnQoJGNhdGNoQ2xhdXNlcyk7ICRpIDwgJGo7ICRpKyspCgkJCQl7CgkJCQkJJHQgPSAkY2F0Y2hDbGF1c2VzWyRpXTsKCQkJCQkkcyAuPSAnY2F0Y2goJyAuICR0LT52YXJOYW1lIC4gKCR0LT5ndWFyZCA/ICcgaWYgJyAuICR0aGlzLT5wYXJzZVRyZWUoJHQtPmd1YXJkKSA6ICcnKSAuICcpeycgLiAkdGhpcy0+cGFyc2VUcmVlKCR0LT5ibG9jaywgdHJ1ZSkgLiAnfSc7CgkJCQl9CgkJCQlpZiAoJG4tPmZpbmFsbHlCbG9jaykKCQkJCQkkcyAuPSAnZmluYWxseXsnIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+ZmluYWxseUJsb2NrLCB0cnVlKSAuICd9JzsKCQkJYnJlYWs7CgoJCQljYXNlIEtFWVdPUkRfVEhST1c6CgkJCWNhc2UgS0VZV09SRF9SRVRVUk46CgkJCQkkcyA9ICRuLT50eXBlOwoJCQkJaWYgKCRuLT52YWx1ZSkKCQkJCXsKCQkJCQkkdCA9ICR0aGlzLT5wYXJzZVRyZWUoJG4tPnZhbHVlKTsKCQkJCQlpZiAoc3RybGVuKCR0KSkKCQkJCQl7CgkJCQkJCWlmICgkdGhpcy0+aXNXb3JkQ2hhcigkdFswXSkgfHwgJHRbMF0gPT0gJ1xcJykKCQkJCQkJCSRzIC49ICcgJzsKCgkJCQkJCSRzIC49ICR0OwoJCQkJCX0KCQkJCX0KCQkJYnJlYWs7CgoJCQljYXNlIEtFWVdPUkRfV0lUSDoKCQkJCSRzID0gJ3dpdGgoJyAuICR0aGlzLT5wYXJzZVRyZWUoJG4tPm9iamVjdCkgLiAnKScgLiAkdGhpcy0+cGFyc2VUcmVlKCRuLT5ib2R5KTsKCQkJYnJlYWs7CgoJCQljYXNlIEtFWVdPUkRfVkFSOgoJCQljYXNlIEtFWVdPUkRfQ09OU1Q6CgkJCQkkcyA9ICRuLT52YWx1ZSAuICcgJzsKCQkJCSRjaGlsZHMgPSAkbi0+dHJlZU5vZGVzOwoJCQkJZm9yICgkaSA9IDAsICRqID0gY291bnQoJGNoaWxkcyk7ICRpIDwgJGo7ICRpKyspCgkJCQl7CgkJCQkJJHQgPSAkY2hpbGRzWyRpXTsKCQkJCQkkcyAuPSAoJGkgPyAnLCcgOiAnJykgLiAkdC0+bmFtZTsKCQkJCQkkdSA9ICR0LT5pbml0aWFsaXplcjsKCQkJCQlpZiAoJHUpCgkJCQkJCSRzIC49ICc9JyAuICR0aGlzLT5wYXJzZVRyZWUoJHUpOwoJCQkJfQoJCQlicmVhazsKCgkJCWNhc2UgS0VZV09SRF9JTjoKCQkJY2FzZSBLRVlXT1JEX0lOU1RBTkNFT0Y6CgkJCQkkbGVmdCA9ICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1swXSk7CgkJCQkkcmlnaHQgPSAkdGhpcy0+cGFyc2VUcmVlKCRuLT50cmVlTm9kZXNbMV0pOwoKCQkJCSRzID0gJGxlZnQ7CgoJCQkJaWYgKCR0aGlzLT5pc1dvcmRDaGFyKHN1YnN0cigkbGVmdCwgLTEpKSkKCQkJCQkkcyAuPSAnICc7CgoJCQkJJHMgLj0gJG4tPnR5cGU7CgoJCQkJaWYgKCR0aGlzLT5pc1dvcmRDaGFyKCRyaWdodFswXSkgfHwgJHJpZ2h0WzBdID09ICdcXCcpCgkJCQkJJHMgLj0gJyAnOwoKCQkJCSRzIC49ICRyaWdodDsKCQkJYnJlYWs7CgoJCQljYXNlIEtFWVdPUkRfREVMRVRFOgoJCQljYXNlIEtFWVdPUkRfVFlQRU9GOgoJCQkJJHJpZ2h0ID0gJHRoaXMtPnBhcnNlVHJlZSgkbi0+dHJlZU5vZGVzWzBdKTsKCgkJCQkkcyA9ICRuLT50eXBlOwoKCQkJCWlmICgkdGhpcy0+aXNXb3JkQ2hhcigkcmlnaHRbMF0pIHx8ICRyaWdodFswXSA9PSAnXFwnKQoJCQkJCSRzIC49ICcgJzsKCgkJCQkkcyAuPSAkcmlnaHQ7CgkJCWJyZWFrOwoKCQkJY2FzZSBLRVlXT1JEX1ZPSUQ6CgkJCQkkcyA9ICd2b2lkKCcgLiAkdGhpcy0+cGFyc2VUcmVlKCRuLT50cmVlTm9kZXNbMF0pIC4gJyknOwoJCQlicmVhazsKCgkJCWNhc2UgS0VZV09SRF9ERUJVR0dFUjoKCQkJCXRocm93IG5ldyBFeGNlcHRpb24oJ05PVCBJTVBMRU1FTlRFRDogREVCVUdHRVInKTsKCQkJYnJlYWs7CgoJCQljYXNlIFRPS0VOX0NPTkRDT01NRU5UX1NUQVJUOgoJCQljYXNlIFRPS0VOX0NPTkRDT01NRU5UX0VORDoKCQkJCSRzID0gJG4tPnZhbHVlIC4gKCRuLT50eXBlID09IFRPS0VOX0NPTkRDT01NRU5UX1NUQVJUID8gJyAnIDogJycpOwoJCQkJJGNoaWxkcyA9ICRuLT50cmVlTm9kZXM7CgkJCQlmb3IgKCRpID0gMCwgJGogPSBjb3VudCgkY2hpbGRzKTsgJGkgPCAkajsgJGkrKykKCQkJCQkkcyAuPSAkdGhpcy0+cGFyc2VUcmVlKCRjaGlsZHNbJGldKTsKCQkJYnJlYWs7CgoJCQljYXNlIE9QX1NFTUlDT0xPTjoKCQkJCWlmICgkZXhwcmVzc2lvbiA9ICRuLT5leHByZXNzaW9uKQoJCQkJCSRzID0gJHRoaXMtPnBhcnNlVHJlZSgkZXhwcmVzc2lvbik7CgkJCWJyZWFrOwoKCQkJY2FzZSBKU19MQUJFTDoKCQkJCSRzID0gJG4tPmxhYmVsIC4gJzonIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+c3RhdGVtZW50KTsKCQkJYnJlYWs7CgoJCQljYXNlIE9QX0NPTU1BOgoJCQkJJGNoaWxkcyA9ICRuLT50cmVlTm9kZXM7CgkJCQlmb3IgKCRpID0gMCwgJGogPSBjb3VudCgkY2hpbGRzKTsgJGkgPCAkajsgJGkrKykKCQkJCQkkcyAuPSAoJGkgPyAnLCcgOiAnJykgLiAkdGhpcy0+cGFyc2VUcmVlKCRjaGlsZHNbJGldKTsKCQkJYnJlYWs7CgoJCQljYXNlIE9QX0FTU0lHTjoKCQkJCSRzID0gJHRoaXMtPnBhcnNlVHJlZSgkbi0+dHJlZU5vZGVzWzBdKSAuICRuLT52YWx1ZSAuICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1sxXSk7CgkJCWJyZWFrOwoKCQkJY2FzZSBPUF9IT09LOgoJCQkJJHMgPSAkdGhpcy0+cGFyc2VUcmVlKCRuLT50cmVlTm9kZXNbMF0pIC4gJz8nIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+dHJlZU5vZGVzWzFdKSAuICc6JyAuICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1syXSk7CgkJCWJyZWFrOwoKCQkJY2FzZSBPUF9PUjogY2FzZSBPUF9BTkQ6CgkJCWNhc2UgT1BfQklUV0lTRV9PUjogY2FzZSBPUF9CSVRXSVNFX1hPUjogY2FzZSBPUF9CSVRXSVNFX0FORDoKCQkJY2FzZSBPUF9FUTogY2FzZSBPUF9ORTogY2FzZSBPUF9TVFJJQ1RfRVE6IGNhc2UgT1BfU1RSSUNUX05FOgoJCQljYXNlIE9QX0xUOiBjYXNlIE9QX0xFOiBjYXNlIE9QX0dFOiBjYXNlIE9QX0dUOgoJCQljYXNlIE9QX0xTSDogY2FzZSBPUF9SU0g6IGNhc2UgT1BfVVJTSDoKCQkJY2FzZSBPUF9NVUw6IGNhc2UgT1BfRElWOiBjYXNlIE9QX01PRDoKCQkJCSRzID0gJHRoaXMtPnBhcnNlVHJlZSgkbi0+dHJlZU5vZGVzWzBdKSAuICRuLT50eXBlIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+dHJlZU5vZGVzWzFdKTsKCQkJYnJlYWs7CgoJCQljYXNlIE9QX1BMVVM6CgkJCWNhc2UgT1BfTUlOVVM6CgkJCQkkbGVmdCA9ICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1swXSk7CgkJCQkkcmlnaHQgPSAkdGhpcy0+cGFyc2VUcmVlKCRuLT50cmVlTm9kZXNbMV0pOwoKCQkJCXN3aXRjaCAoJG4tPnRyZWVOb2Rlc1sxXS0+dHlwZSkKCQkJCXsKCQkJCQljYXNlIE9QX1BMVVM6CgkJCQkJY2FzZSBPUF9NSU5VUzoKCQkJCQljYXNlIE9QX0lOQ1JFTUVOVDoKCQkJCQljYXNlIE9QX0RFQ1JFTUVOVDoKCQkJCQljYXNlIE9QX1VOQVJZX1BMVVM6CgkJCQkJY2FzZSBPUF9VTkFSWV9NSU5VUzoKCQkJCQkJJHMgPSAkbGVmdCAuICRuLT50eXBlIC4gJyAnIC4gJHJpZ2h0OwoJCQkJCWJyZWFrOwoKCQkJCQljYXNlIFRPS0VOX1NUUklORzoKCQkJCQkJLy9jb21iaW5lIGNvbmNhdHRlZCBzdHJpbmdzIHdpdGggc2FtZSBxdW90ZXN0eWxlCgkJCQkJCWlmICgkbi0+dHlwZSA9PSBPUF9QTFVTICYmIHN1YnN0cigkbGVmdCwgLTEpID09ICRyaWdodFswXSkKCQkJCQkJewoJCQkJCQkJJHMgPSBzdWJzdHIoJGxlZnQsIDAsIC0xKSAuIHN1YnN0cigkcmlnaHQsIDEpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkvLyBGQUxMIFRIUk9VR0gKCgkJCQkJZGVmYXVsdDoKCQkJCQkJJHMgPSAkbGVmdCAuICRuLT50eXBlIC4gJHJpZ2h0OwoJCQkJfQoJCQlicmVhazsKCgkJCWNhc2UgT1BfTk9UOgoJCQljYXNlIE9QX0JJVFdJU0VfTk9UOgoJCQljYXNlIE9QX1VOQVJZX1BMVVM6CgkJCWNhc2UgT1BfVU5BUllfTUlOVVM6CgkJCQkkcyA9ICRuLT52YWx1ZSAuICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1swXSk7CgkJCWJyZWFrOwoKCQkJY2FzZSBPUF9JTkNSRU1FTlQ6CgkJCWNhc2UgT1BfREVDUkVNRU5UOgoJCQkJaWYgKCRuLT5wb3N0Zml4KQoJCQkJCSRzID0gJHRoaXMtPnBhcnNlVHJlZSgkbi0+dHJlZU5vZGVzWzBdKSAuICRuLT52YWx1ZTsKCQkJCWVsc2UKCQkJCQkkcyA9ICRuLT52YWx1ZSAuICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1swXSk7CgkJCWJyZWFrOwoKCQkJY2FzZSBPUF9ET1Q6CgkJCQkkcyA9ICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1swXSkgLiAnLicgLiAkdGhpcy0+cGFyc2VUcmVlKCRuLT50cmVlTm9kZXNbMV0pOwoJCQlicmVhazsKCgkJCWNhc2UgSlNfSU5ERVg6CgkJCQkkcyA9ICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1swXSk7CgkJCQkvLyBTZWUgaWYgd2UgY2FuIHJlcGxhY2UgbmFtZWQgaW5kZXggd2l0aCBhIGRvdCBzYXZpbmcgMyBieXRlcwoJCQkJaWYgKAkkbi0+dHJlZU5vZGVzWzBdLT50eXBlID09IFRPS0VOX0lERU5USUZJRVIgJiYKCQkJCQkkbi0+dHJlZU5vZGVzWzFdLT50eXBlID09IFRPS0VOX1NUUklORyAmJgoJCQkJCSR0aGlzLT5pc1ZhbGlkSWRlbnRpZmllcihzdWJzdHIoJG4tPnRyZWVOb2Rlc1sxXS0+dmFsdWUsIDEsIC0xKSkKCQkJCSkKCQkJCQkkcyAuPSAnLicgLiBzdWJzdHIoJG4tPnRyZWVOb2Rlc1sxXS0+dmFsdWUsIDEsIC0xKTsKCQkJCWVsc2UKCQkJCQkkcyAuPSAnWycgLiAkdGhpcy0+cGFyc2VUcmVlKCRuLT50cmVlTm9kZXNbMV0pIC4gJ10nOwoJCQlicmVhazsKCgkJCWNhc2UgSlNfTElTVDoKCQkJCSRjaGlsZHMgPSAkbi0+dHJlZU5vZGVzOwoJCQkJZm9yICgkaSA9IDAsICRqID0gY291bnQoJGNoaWxkcyk7ICRpIDwgJGo7ICRpKyspCgkJCQkJJHMgLj0gKCRpID8gJywnIDogJycpIC4gJHRoaXMtPnBhcnNlVHJlZSgkY2hpbGRzWyRpXSk7CgkJCWJyZWFrOwoKCQkJY2FzZSBKU19DQUxMOgoJCQkJJHMgPSAkdGhpcy0+cGFyc2VUcmVlKCRuLT50cmVlTm9kZXNbMF0pIC4gJygnIC4gJHRoaXMtPnBhcnNlVHJlZSgkbi0+dHJlZU5vZGVzWzFdKSAuICcpJzsKCQkJYnJlYWs7CgoJCQljYXNlIEtFWVdPUkRfTkVXOgoJCQljYXNlIEpTX05FV19XSVRIX0FSR1M6CgkJCQkkcyA9ICduZXcgJyAuICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1swXSkgLiAnKCcgLiAoJG4tPnR5cGUgPT0gSlNfTkVXX1dJVEhfQVJHUyA/ICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1sxXSkgOiAnJykgLiAnKSc7CgkJCWJyZWFrOwoKCQkJY2FzZSBKU19BUlJBWV9JTklUOgoJCQkJJHMgPSAnWyc7CgkJCQkkY2hpbGRzID0gJG4tPnRyZWVOb2RlczsKCQkJCWZvciAoJGkgPSAwLCAkaiA9IGNvdW50KCRjaGlsZHMpOyAkaSA8ICRqOyAkaSsrKQoJCQkJewoJCQkJCSRzIC49ICgkaSA/ICcsJyA6ICcnKSAuICR0aGlzLT5wYXJzZVRyZWUoJGNoaWxkc1skaV0pOwoJCQkJfQoJCQkJJHMgLj0gJ10nOwoJCQlicmVhazsKCgkJCWNhc2UgSlNfT0JKRUNUX0lOSVQ6CgkJCQkkcyA9ICd7JzsKCQkJCSRjaGlsZHMgPSAkbi0+dHJlZU5vZGVzOwoJCQkJZm9yICgkaSA9IDAsICRqID0gY291bnQoJGNoaWxkcyk7ICRpIDwgJGo7ICRpKyspCgkJCQl7CgkJCQkJJHQgPSAkY2hpbGRzWyRpXTsKCQkJCQlpZiAoJGkpCgkJCQkJCSRzIC49ICcsJzsKCQkJCQlpZiAoJHQtPnR5cGUgPT0gSlNfUFJPUEVSVFlfSU5JVCkKCQkJCQl7CgkJCQkJCS8vIERpdGNoIHRoZSBxdW90ZXMgd2hlbiB0aGUgaW5kZXggaXMgYSB2YWxpZCBpZGVudGlmaWVyCgkJCQkJCWlmICgJJHQtPnRyZWVOb2Rlc1swXS0+dHlwZSA9PSBUT0tFTl9TVFJJTkcgJiYKCQkJCQkJCSR0aGlzLT5pc1ZhbGlkSWRlbnRpZmllcihzdWJzdHIoJHQtPnRyZWVOb2Rlc1swXS0+dmFsdWUsIDEsIC0xKSkKCQkJCQkJKQoJCQkJCQkJJHMgLj0gc3Vic3RyKCR0LT50cmVlTm9kZXNbMF0tPnZhbHVlLCAxLCAtMSk7CgkJCQkJCWVsc2UKCQkJCQkJCSRzIC49ICR0LT50cmVlTm9kZXNbMF0tPnZhbHVlOwoKCQkJCQkJJHMgLj0gJzonIC4gJHRoaXMtPnBhcnNlVHJlZSgkdC0+dHJlZU5vZGVzWzFdKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJJHMgLj0gJHQtPnR5cGUgPT0gSlNfR0VUVEVSID8gJ2dldCcgOiAnc2V0JzsKCQkJCQkJJHMgLj0gJyAnIC4gJHQtPm5hbWUgLiAnKCc7CgkJCQkJCSRwYXJhbXMgPSAkdC0+cGFyYW1zOwoJCQkJCQlmb3IgKCRpID0gMCwgJGogPSBjb3VudCgkcGFyYW1zKTsgJGkgPCAkajsgJGkrKykKCQkJCQkJCSRzIC49ICgkaSA/ICcsJyA6ICcnKSAuICRwYXJhbXNbJGldOwoJCQkJCQkkcyAuPSAnKXsnIC4gJHRoaXMtPnBhcnNlVHJlZSgkdC0+Ym9keSwgdHJ1ZSkgLiAnfSc7CgkJCQkJfQoJCQkJfQoJCQkJJHMgLj0gJ30nOwoJCQlicmVhazsKCgkJCWNhc2UgVE9LRU5fTlVNQkVSOgoJCQkJJHMgPSAkbi0+dmFsdWU7CgkJCQlpZiAocHJlZ19tYXRjaCgnL14oWzEtOV0rKSgwezMsfSkkLycsICRzLCAkbSkpCgkJCQkJJHMgPSAkbVsxXSAuICdlJyAuIHN0cmxlbigkbVsyXSk7CgkJCWJyZWFrOwoKCQkJY2FzZSBLRVlXT1JEX05VTEw6IGNhc2UgS0VZV09SRF9USElTOiBjYXNlIEtFWVdPUkRfVFJVRTogY2FzZSBLRVlXT1JEX0ZBTFNFOgoJCQljYXNlIFRPS0VOX0lERU5USUZJRVI6IGNhc2UgVE9LRU5fU1RSSU5HOiBjYXNlIFRPS0VOX1JFR0VYUDoKCQkJCSRzID0gJG4tPnZhbHVlOwoJCQlicmVhazsKCgkJCWNhc2UgSlNfR1JPVVA6CgkJCQlpZiAoaW5fYXJyYXkoCgkJCQkJJG4tPnRyZWVOb2Rlc1swXS0+dHlwZSwKCQkJCQlhcnJheSgKCQkJCQkJSlNfQVJSQVlfSU5JVCwgSlNfT0JKRUNUX0lOSVQsIEpTX0dST1VQLAoJCQkJCQlUT0tFTl9OVU1CRVIsIFRPS0VOX1NUUklORywgVE9LRU5fUkVHRVhQLCBUT0tFTl9JREVOVElGSUVSLAoJCQkJCQlLRVlXT1JEX05VTEwsIEtFWVdPUkRfVEhJUywgS0VZV09SRF9UUlVFLCBLRVlXT1JEX0ZBTFNFCgkJCQkJKQoJCQkJKSkKCQkJCXsKCQkJCQkkcyA9ICR0aGlzLT5wYXJzZVRyZWUoJG4tPnRyZWVOb2Rlc1swXSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHMgPSAnKCcgLiAkdGhpcy0+cGFyc2VUcmVlKCRuLT50cmVlTm9kZXNbMF0pIC4gJyknOwoJCQkJfQoJCQlicmVhazsKCgkJCWRlZmF1bHQ6CgkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdVTktOT1dOIFRPS0VOIFRZUEU6ICcgLiAkbi0+dHlwZSk7CgkJfQoKCQlyZXR1cm4gJHM7Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBpc1ZhbGlkSWRlbnRpZmllcigkc3RyaW5nKQoJewoJCXJldHVybiBwcmVnX21hdGNoKCcvXlthLXpBLVpfXVthLXpBLVowLTlfXSokLycsICRzdHJpbmcpICYmICFpbl9hcnJheSgkc3RyaW5nLCAkdGhpcy0+cmVzZXJ2ZWQpOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gaXNXb3JkQ2hhcigkY2hhcikKCXsKCQlyZXR1cm4gJGNoYXIgPT0gJ18nIHx8ICRjaGFyID09ICckJyB8fCBjdHlwZV9hbG51bSgkY2hhcik7Cgl9Cn0KCmNsYXNzIEpTUGFyc2VyCnsKCXByaXZhdGUgJHQ7Cglwcml2YXRlICRtaW5pZmllcjsKCglwcml2YXRlICRvcFByZWNlZGVuY2UgPSBhcnJheSgKCQknOycgPT4gMCwKCQknLCcgPT4gMSwKCQknPScgPT4gMiwgJz8nID0+IDIsICc6JyA9PiAyLAoJCS8vIFRoZSBhYm92ZSBhbGwgaGF2ZSB0byBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UsIHNlZSBidWcgMzMwOTc1CgkJJ3x8JyA9PiA0LAoJCScmJicgPT4gNSwKCQknfCcgPT4gNiwKCQknXicgPT4gNywKCQknJicgPT4gOCwKCQknPT0nID0+IDksICchPScgPT4gOSwgJz09PScgPT4gOSwgJyE9PScgPT4gOSwKCQknPCcgPT4gMTAsICc8PScgPT4gMTAsICc+PScgPT4gMTAsICc+JyA9PiAxMCwgJ2luJyA9PiAxMCwgJ2luc3RhbmNlb2YnID0+IDEwLAoJCSc8PCcgPT4gMTEsICc+PicgPT4gMTEsICc+Pj4nID0+IDExLAoJCScrJyA9PiAxMiwgJy0nID0+IDEyLAoJCScqJyA9PiAxMywgJy8nID0+IDEzLCAnJScgPT4gMTMsCgkJJ2RlbGV0ZScgPT4gMTQsICd2b2lkJyA9PiAxNCwgJ3R5cGVvZicgPT4gMTQsCgkJJyEnID0+IDE0LCAnficgPT4gMTQsICdVKycgPT4gMTQsICdVLScgPT4gMTQsCgkJJysrJyA9PiAxNSwgJy0tJyA9PiAxNSwKCQknbmV3JyA9PiAxNiwKCQknLicgPT4gMTcsCgkJSlNfTkVXX1dJVEhfQVJHUyA9PiAwLCBKU19JTkRFWCA9PiAwLCBKU19DQUxMID0+IDAsCgkJSlNfQVJSQVlfSU5JVCA9PiAwLCBKU19PQkpFQ1RfSU5JVCA9PiAwLCBKU19HUk9VUCA9PiAwCgkpOwoKCXByaXZhdGUgJG9wQXJpdHkgPSBhcnJheSgKCQknLCcgPT4gLTIsCgkJJz0nID0+IDIsCgkJJz8nID0+IDMsCgkJJ3x8JyA9PiAyLAoJCScmJicgPT4gMiwKCQknfCcgPT4gMiwKCQknXicgPT4gMiwKCQknJicgPT4gMiwKCQknPT0nID0+IDIsICchPScgPT4gMiwgJz09PScgPT4gMiwgJyE9PScgPT4gMiwKCQknPCcgPT4gMiwgJzw9JyA9PiAyLCAnPj0nID0+IDIsICc+JyA9PiAyLCAnaW4nID0+IDIsICdpbnN0YW5jZW9mJyA9PiAyLAoJCSc8PCcgPT4gMiwgJz4+JyA9PiAyLCAnPj4+JyA9PiAyLAoJCScrJyA9PiAyLCAnLScgPT4gMiwKCQknKicgPT4gMiwgJy8nID0+IDIsICclJyA9PiAyLAoJCSdkZWxldGUnID0+IDEsICd2b2lkJyA9PiAxLCAndHlwZW9mJyA9PiAxLAoJCSchJyA9PiAxLCAnficgPT4gMSwgJ1UrJyA9PiAxLCAnVS0nID0+IDEsCgkJJysrJyA9PiAxLCAnLS0nID0+IDEsCgkJJ25ldycgPT4gMSwKCQknLicgPT4gMiwKCQlKU19ORVdfV0lUSF9BUkdTID0+IDIsIEpTX0lOREVYID0+IDIsIEpTX0NBTEwgPT4gMiwKCQlKU19BUlJBWV9JTklUID0+IDEsIEpTX09CSkVDVF9JTklUID0+IDEsIEpTX0dST1VQID0+IDEsCgkJVE9LRU5fQ09ORENPTU1FTlRfU1RBUlQgPT4gMSwgVE9LRU5fQ09ORENPTU1FTlRfRU5EID0+IDEKCSk7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtaW5pZmllcj1udWxsKQoJewoJCSR0aGlzLT5taW5pZmllciA9ICRtaW5pZmllcjsKCQkkdGhpcy0+dCA9IG5ldyBKU1Rva2VuaXplcigpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBwYXJzZSgkcywgJGYsICRsKQoJewoJCS8vIGluaXRpYWxpemUgdG9rZW5pemVyCgkJJHRoaXMtPnQtPmluaXQoJHMsICRmLCAkbCk7CgoJCSR4ID0gbmV3IEpTQ29tcGlsZXJDb250ZXh0KGZhbHNlKTsKCQkkbiA9ICR0aGlzLT5TY3JpcHQoJHgpOwoJCWlmICghJHRoaXMtPnQtPmlzRG9uZSgpKQoJCQl0aHJvdyAkdGhpcy0+dC0+bmV3U3ludGF4RXJyb3IoJ1N5bnRheCBlcnJvcicpOwoKCQlyZXR1cm4gJG47Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBTY3JpcHQoJHgpCgl7CgkJJG4gPSAkdGhpcy0+U3RhdGVtZW50cygkeCk7CgkJJG4tPnR5cGUgPSBKU19TQ1JJUFQ7CgkJJG4tPmZ1bkRlY2xzID0gJHgtPmZ1bkRlY2xzOwoJCSRuLT52YXJEZWNscyA9ICR4LT52YXJEZWNsczsKCgkJLy8gbWluaWZ5IGJ5IHNjb3BlCgkJaWYgKCR0aGlzLT5taW5pZmllcikKCQl7CgkJCSRuLT52YWx1ZSA9ICR0aGlzLT5taW5pZmllci0+cGFyc2VUcmVlKCRuKTsKCgkJCS8vIGNsZWFyIHRyZWUgZnJvbSBub2RlIHRvIHNhdmUgbWVtb3J5CgkJCSRuLT50cmVlTm9kZXMgPSBudWxsOwoJCQkkbi0+ZnVuRGVjbHMgPSBudWxsOwoJCQkkbi0+dmFyRGVjbHMgPSBudWxsOwoKCQkJJG4tPnR5cGUgPSBKU19NSU5JRklFRDsKCQl9CgoJCXJldHVybiAkbjsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIFN0YXRlbWVudHMoJHgpCgl7CgkJJG4gPSBuZXcgSlNOb2RlKCR0aGlzLT50LCBKU19CTE9DSyk7CgkJYXJyYXlfcHVzaCgkeC0+c3RtdFN0YWNrLCAkbik7CgoJCXdoaWxlICghJHRoaXMtPnQtPmlzRG9uZSgpICYmICR0aGlzLT50LT5wZWVrKCkgIT0gT1BfUklHSFRfQ1VSTFkpCgkJCSRuLT5hZGROb2RlKCR0aGlzLT5TdGF0ZW1lbnQoJHgpKTsKCgkJYXJyYXlfcG9wKCR4LT5zdG10U3RhY2spOwoKCQlyZXR1cm4gJG47Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBCbG9jaygkeCkKCXsKCQkkdGhpcy0+dC0+bXVzdE1hdGNoKE9QX0xFRlRfQ1VSTFkpOwoJCSRuID0gJHRoaXMtPlN0YXRlbWVudHMoJHgpOwoJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfUklHSFRfQ1VSTFkpOwoKCQlyZXR1cm4gJG47Cgl9CgoJcHJpdmF0ZSBmdW5jdGlvbiBTdGF0ZW1lbnQoJHgpCgl7CgkJJHR0ID0gJHRoaXMtPnQtPmdldCgpOwoJCSRuMiA9IG51bGw7CgoJCS8vIENhc2VzIGZvciBzdGF0ZW1lbnRzIGVuZGluZyBpbiBhIHJpZ2h0IGN1cmx5IHJldHVybiBlYXJseSwgYXZvaWRpbmcgdGhlCgkJLy8gY29tbW9uIHNlbWljb2xvbiBpbnNlcnRpb24gbWFnaWMgYWZ0ZXIgdGhpcyBzd2l0Y2guCgkJc3dpdGNoICgkdHQpCgkJewoJCQljYXNlIEtFWVdPUkRfRlVOQ1RJT046CgkJCQlyZXR1cm4gJHRoaXMtPkZ1bmN0aW9uRGVmaW5pdGlvbigKCQkJCQkkeCwKCQkJCQl0cnVlLAoJCQkJCWNvdW50KCR4LT5zdG10U3RhY2spID4gMSA/IFNUQVRFTUVOVF9GT1JNIDogREVDTEFSRURfRk9STQoJCQkJKTsKCQkJYnJlYWs7CgoJCQljYXNlIE9QX0xFRlRfQ1VSTFk6CgkJCQkkbiA9ICR0aGlzLT5TdGF0ZW1lbnRzKCR4KTsKCQkJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfUklHSFRfQ1VSTFkpOwoJCQlyZXR1cm4gJG47CgoJCQljYXNlIEtFWVdPUkRfSUY6CgkJCQkkbiA9IG5ldyBKU05vZGUoJHRoaXMtPnQpOwoJCQkJJG4tPmNvbmRpdGlvbiA9ICR0aGlzLT5QYXJlbkV4cHJlc3Npb24oJHgpOwoJCQkJYXJyYXlfcHVzaCgkeC0+c3RtdFN0YWNrLCAkbik7CgkJCQkkbi0+dGhlblBhcnQgPSAkdGhpcy0+U3RhdGVtZW50KCR4KTsKCQkJCSRuLT5lbHNlUGFydCA9ICR0aGlzLT50LT5tYXRjaChLRVlXT1JEX0VMU0UpID8gJHRoaXMtPlN0YXRlbWVudCgkeCkgOiBudWxsOwoJCQkJYXJyYXlfcG9wKCR4LT5zdG10U3RhY2spOwoJCQlyZXR1cm4gJG47CgoJCQljYXNlIEtFWVdPUkRfU1dJVENIOgoJCQkJJG4gPSBuZXcgSlNOb2RlKCR0aGlzLT50KTsKCQkJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfTEVGVF9QQVJFTik7CgkJCQkkbi0+ZGlzY3JpbWluYW50ID0gJHRoaXMtPkV4cHJlc3Npb24oJHgpOwoJCQkJJHRoaXMtPnQtPm11c3RNYXRjaChPUF9SSUdIVF9QQVJFTik7CgkJCQkkbi0+Y2FzZXMgPSBhcnJheSgpOwoJCQkJJG4tPmRlZmF1bHRJbmRleCA9IC0xOwoKCQkJCWFycmF5X3B1c2goJHgtPnN0bXRTdGFjaywgJG4pOwoKCQkJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfTEVGVF9DVVJMWSk7CgoJCQkJd2hpbGUgKCgkdHQgPSAkdGhpcy0+dC0+Z2V0KCkpICE9IE9QX1JJR0hUX0NVUkxZKQoJCQkJewoJCQkJCXN3aXRjaCAoJHR0KQoJCQkJCXsKCQkJCQkJY2FzZSBLRVlXT1JEX0RFRkFVTFQ6CgkJCQkJCQlpZiAoJG4tPmRlZmF1bHRJbmRleCA+PSAwKQoJCQkJCQkJCXRocm93ICR0aGlzLT50LT5uZXdTeW50YXhFcnJvcignTW9yZSB0aGFuIG9uZSBzd2l0Y2ggZGVmYXVsdCcpOwoJCQkJCQkJLy8gRkFMTCBUSFJPVUdICgkJCQkJCWNhc2UgS0VZV09SRF9DQVNFOgoJCQkJCQkJJG4yID0gbmV3IEpTTm9kZSgkdGhpcy0+dCk7CgkJCQkJCQlpZiAoJHR0ID09IEtFWVdPUkRfREVGQVVMVCkKCQkJCQkJCQkkbi0+ZGVmYXVsdEluZGV4ID0gY291bnQoJG4tPmNhc2VzKTsKCQkJCQkJCWVsc2UKCQkJCQkJCQkkbjItPmNhc2VMYWJlbCA9ICR0aGlzLT5FeHByZXNzaW9uKCR4LCBPUF9DT0xPTik7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCWRlZmF1bHQ6CgkJCQkJCQl0aHJvdyAkdGhpcy0+dC0+bmV3U3ludGF4RXJyb3IoJ0ludmFsaWQgc3dpdGNoIGNhc2UnKTsKCQkJCQl9CgoJCQkJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfQ09MT04pOwoJCQkJCSRuMi0+c3RhdGVtZW50cyA9IG5ldyBKU05vZGUoJHRoaXMtPnQsIEpTX0JMT0NLKTsKCQkJCQl3aGlsZSAoKCR0dCA9ICR0aGlzLT50LT5wZWVrKCkpICE9IEtFWVdPUkRfQ0FTRSAmJiAkdHQgIT0gS0VZV09SRF9ERUZBVUxUICYmICR0dCAhPSBPUF9SSUdIVF9DVVJMWSkKCQkJCQkJJG4yLT5zdGF0ZW1lbnRzLT5hZGROb2RlKCR0aGlzLT5TdGF0ZW1lbnQoJHgpKTsKCgkJCQkJYXJyYXlfcHVzaCgkbi0+Y2FzZXMsICRuMik7CgkJCQl9CgoJCQkJYXJyYXlfcG9wKCR4LT5zdG10U3RhY2spOwoJCQlyZXR1cm4gJG47CgoJCQljYXNlIEtFWVdPUkRfRk9SOgoJCQkJJG4gPSBuZXcgSlNOb2RlKCR0aGlzLT50KTsKCQkJCSRuLT5pc0xvb3AgPSB0cnVlOwoJCQkJJHRoaXMtPnQtPm11c3RNYXRjaChPUF9MRUZUX1BBUkVOKTsKCgkJCQlpZiAoKCR0dCA9ICR0aGlzLT50LT5wZWVrKCkpICE9IE9QX1NFTUlDT0xPTikKCQkJCXsKCQkJCQkkeC0+aW5Gb3JMb29wSW5pdCA9IHRydWU7CgkJCQkJaWYgKCR0dCA9PSBLRVlXT1JEX1ZBUiB8fCAkdHQgPT0gS0VZV09SRF9DT05TVCkKCQkJCQl7CgkJCQkJCSR0aGlzLT50LT5nZXQoKTsKCQkJCQkJJG4yID0gJHRoaXMtPlZhcmlhYmxlcygkeCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRuMiA9ICR0aGlzLT5FeHByZXNzaW9uKCR4KTsKCQkJCQl9CgkJCQkJJHgtPmluRm9yTG9vcEluaXQgPSBmYWxzZTsKCQkJCX0KCgkJCQlpZiAoJG4yICYmICR0aGlzLT50LT5tYXRjaChLRVlXT1JEX0lOKSkKCQkJCXsKCQkJCQkkbi0+dHlwZSA9IEpTX0ZPUl9JTjsKCQkJCQlpZiAoJG4yLT50eXBlID09IEtFWVdPUkRfVkFSKQoJCQkJCXsKCQkJCQkJaWYgKGNvdW50KCRuMi0+dHJlZU5vZGVzKSAhPSAxKQoJCQkJCQl7CgkJCQkJCQl0aHJvdyAkdGhpcy0+dC0+U3ludGF4RXJyb3IoCgkJCQkJCQkJJ0ludmFsaWQgZm9yLi5pbiBsZWZ0LWhhbmQgc2lkZScsCgkJCQkJCQkJJHRoaXMtPnQtPmZpbGVuYW1lLAoJCQkJCQkJCSRuMi0+bGluZW5vCgkJCQkJCQkpOwoJCQkJCQl9CgoJCQkJCQkvLyBOQjogbjJbMF0udHlwZSA9PSBJREVOVElGSUVSIGFuZCBuMlswXS52YWx1ZSA9PSBuMlswXS5uYW1lLgoJCQkJCQkkbi0+aXRlcmF0b3IgPSAkbjItPnRyZWVOb2Rlc1swXTsKCQkJCQkJJG4tPnZhckRlY2wgPSAkbjI7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRuLT5pdGVyYXRvciA9ICRuMjsKCQkJCQkJJG4tPnZhckRlY2wgPSBudWxsOwoJCQkJCX0KCgkJCQkJJG4tPm9iamVjdCA9ICR0aGlzLT5FeHByZXNzaW9uKCR4KTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkbi0+c2V0dXAgPSAkbjIgPyAkbjIgOiBudWxsOwoJCQkJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfU0VNSUNPTE9OKTsKCQkJCQkkbi0+Y29uZGl0aW9uID0gJHRoaXMtPnQtPnBlZWsoKSA9PSBPUF9TRU1JQ09MT04gPyBudWxsIDogJHRoaXMtPkV4cHJlc3Npb24oJHgpOwoJCQkJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfU0VNSUNPTE9OKTsKCQkJCQkkbi0+dXBkYXRlID0gJHRoaXMtPnQtPnBlZWsoKSA9PSBPUF9SSUdIVF9QQVJFTiA/IG51bGwgOiAkdGhpcy0+RXhwcmVzc2lvbigkeCk7CgkJCQl9CgoJCQkJJHRoaXMtPnQtPm11c3RNYXRjaChPUF9SSUdIVF9QQVJFTik7CgkJCQkkbi0+Ym9keSA9ICR0aGlzLT5uZXN0KCR4LCAkbik7CgkJCXJldHVybiAkbjsKCgkJCWNhc2UgS0VZV09SRF9XSElMRToKCQkJICAgICAgICAkbiA9IG5ldyBKU05vZGUoJHRoaXMtPnQpOwoJCQkgICAgICAgICRuLT5pc0xvb3AgPSB0cnVlOwoJCQkgICAgICAgICRuLT5jb25kaXRpb24gPSAkdGhpcy0+UGFyZW5FeHByZXNzaW9uKCR4KTsKCQkJICAgICAgICAkbi0+Ym9keSA9ICR0aGlzLT5uZXN0KCR4LCAkbik7CgkJCXJldHVybiAkbjsKCgkJCWNhc2UgS0VZV09SRF9ETzoKCQkJCSRuID0gbmV3IEpTTm9kZSgkdGhpcy0+dCk7CgkJCQkkbi0+aXNMb29wID0gdHJ1ZTsKCQkJCSRuLT5ib2R5ID0gJHRoaXMtPm5lc3QoJHgsICRuLCBLRVlXT1JEX1dISUxFKTsKCQkJCSRuLT5jb25kaXRpb24gPSAkdGhpcy0+UGFyZW5FeHByZXNzaW9uKCR4KTsKCQkJCWlmICghJHgtPmVjbWFTdHJpY3RNb2RlKQoJCQkJewoJCQkJCS8vIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPiAod2l0aG91dCB2ZXJzaW9uIGhpbnRzKSBtYXkgbmVlZAoJCQkJCS8vIGF1dG9tYXRpYyBzZW1pY29sb24gaW5zZXJ0aW9uIHdpdGhvdXQgYSBuZXdsaW5lIGFmdGVyIGRvLXdoaWxlLgoJCQkJCS8vIFNlZSBodHRwOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIzODk0NS4KCQkJCQkkdGhpcy0+dC0+bWF0Y2goT1BfU0VNSUNPTE9OKTsKCQkJCQlyZXR1cm4gJG47CgkJCQl9CgkJCWJyZWFrOwoKCQkJY2FzZSBLRVlXT1JEX0JSRUFLOgoJCQljYXNlIEtFWVdPUkRfQ09OVElOVUU6CgkJCQkkbiA9IG5ldyBKU05vZGUoJHRoaXMtPnQpOwoKCQkJCWlmICgkdGhpcy0+dC0+cGVla09uU2FtZUxpbmUoKSA9PSBUT0tFTl9JREVOVElGSUVSKQoJCQkJewoJCQkJCSR0aGlzLT50LT5nZXQoKTsKCQkJCQkkbi0+bGFiZWwgPSAkdGhpcy0+dC0+Y3VycmVudFRva2VuKCktPnZhbHVlOwoJCQkJfQoKCQkJCSRzcyA9ICR4LT5zdG10U3RhY2s7CgkJCQkkaSA9IGNvdW50KCRzcyk7CgkJCQkkbGFiZWwgPSAkbi0+bGFiZWw7CgkJCQlpZiAoJGxhYmVsKQoJCQkJewoJCQkJCWRvCgkJCQkJewoJCQkJCQlpZiAoLS0kaSA8IDApCgkJCQkJCQl0aHJvdyAkdGhpcy0+dC0+bmV3U3ludGF4RXJyb3IoJ0xhYmVsIG5vdCBmb3VuZCcpOwoJCQkJCX0KCQkJCQl3aGlsZSAoJHNzWyRpXS0+bGFiZWwgIT0gJGxhYmVsKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlkbwoJCQkJCXsKCQkJCQkJaWYgKC0tJGkgPCAwKQoJCQkJCQkJdGhyb3cgJHRoaXMtPnQtPm5ld1N5bnRheEVycm9yKCdJbnZhbGlkICcgLiAkdHQpOwoJCQkJCX0KCQkJCQl3aGlsZSAoISRzc1skaV0tPmlzTG9vcCAmJiAoJHR0ICE9IEtFWVdPUkRfQlJFQUsgfHwgJHNzWyRpXS0+dHlwZSAhPSBLRVlXT1JEX1NXSVRDSCkpOwoJCQkJfQoKCQkJCSRuLT50YXJnZXQgPSAkc3NbJGldOwoJCQlicmVhazsKCgkJCWNhc2UgS0VZV09SRF9UUlk6CgkJCQkkbiA9IG5ldyBKU05vZGUoJHRoaXMtPnQpOwoJCQkJJG4tPnRyeUJsb2NrID0gJHRoaXMtPkJsb2NrKCR4KTsKCQkJCSRuLT5jYXRjaENsYXVzZXMgPSBhcnJheSgpOwoKCQkJCXdoaWxlICgkdGhpcy0+dC0+bWF0Y2goS0VZV09SRF9DQVRDSCkpCgkJCQl7CgkJCQkJJG4yID0gbmV3IEpTTm9kZSgkdGhpcy0+dCk7CgkJCQkJJHRoaXMtPnQtPm11c3RNYXRjaChPUF9MRUZUX1BBUkVOKTsKCQkJCQkkbjItPnZhck5hbWUgPSAkdGhpcy0+dC0+bXVzdE1hdGNoKFRPS0VOX0lERU5USUZJRVIpLT52YWx1ZTsKCgkJCQkJaWYgKCR0aGlzLT50LT5tYXRjaChLRVlXT1JEX0lGKSkKCQkJCQl7CgkJCQkJCWlmICgkeC0+ZWNtYVN0cmljdE1vZGUpCgkJCQkJCQl0aHJvdyAkdGhpcy0+dC0+bmV3U3ludGF4RXJyb3IoJ0lsbGVnYWwgY2F0Y2ggZ3VhcmQnKTsKCgkJCQkJCWlmIChjb3VudCgkbi0+Y2F0Y2hDbGF1c2VzKSAmJiAhZW5kKCRuLT5jYXRjaENsYXVzZXMpLT5ndWFyZCkKCQkJCQkJCXRocm93ICR0aGlzLT50LT5uZXdTeW50YXhFcnJvcignR3VhcmRlZCBjYXRjaCBhZnRlciB1bmd1YXJkZWQnKTsKCgkJCQkJCSRuMi0+Z3VhcmQgPSAkdGhpcy0+RXhwcmVzc2lvbigkeCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRuMi0+Z3VhcmQgPSBudWxsOwoJCQkJCX0KCgkJCQkJJHRoaXMtPnQtPm11c3RNYXRjaChPUF9SSUdIVF9QQVJFTik7CgkJCQkJJG4yLT5ibG9jayA9ICR0aGlzLT5CbG9jaygkeCk7CgkJCQkJYXJyYXlfcHVzaCgkbi0+Y2F0Y2hDbGF1c2VzLCAkbjIpOwoJCQkJfQoKCQkJCWlmICgkdGhpcy0+dC0+bWF0Y2goS0VZV09SRF9GSU5BTExZKSkKCQkJCQkkbi0+ZmluYWxseUJsb2NrID0gJHRoaXMtPkJsb2NrKCR4KTsKCgkJCQlpZiAoIWNvdW50KCRuLT5jYXRjaENsYXVzZXMpICYmICEkbi0+ZmluYWxseUJsb2NrKQoJCQkJCXRocm93ICR0aGlzLT50LT5uZXdTeW50YXhFcnJvcignSW52YWxpZCB0cnkgc3RhdGVtZW50Jyk7CgkJCXJldHVybiAkbjsKCgkJCWNhc2UgS0VZV09SRF9DQVRDSDoKCQkJY2FzZSBLRVlXT1JEX0ZJTkFMTFk6CgkJCQl0aHJvdyAkdGhpcy0+dC0+bmV3U3ludGF4RXJyb3IoJHR0ICsgJyB3aXRob3V0IHByZWNlZGluZyB0cnknKTsKCgkJCWNhc2UgS0VZV09SRF9USFJPVzoKCQkJCSRuID0gbmV3IEpTTm9kZSgkdGhpcy0+dCk7CgkJCQkkbi0+dmFsdWUgPSAkdGhpcy0+RXhwcmVzc2lvbigkeCk7CgkJCWJyZWFrOwoKCQkJY2FzZSBLRVlXT1JEX1JFVFVSTjoKCQkJCWlmICghJHgtPmluRnVuY3Rpb24pCgkJCQkJdGhyb3cgJHRoaXMtPnQtPm5ld1N5bnRheEVycm9yKCdJbnZhbGlkIHJldHVybicpOwoKCQkJCSRuID0gbmV3IEpTTm9kZSgkdGhpcy0+dCk7CgkJCQkkdHQgPSAkdGhpcy0+dC0+cGVla09uU2FtZUxpbmUoKTsKCQkJCWlmICgkdHQgIT0gVE9LRU5fRU5EICYmICR0dCAhPSBUT0tFTl9ORVdMSU5FICYmICR0dCAhPSBPUF9TRU1JQ09MT04gJiYgJHR0ICE9IE9QX1JJR0hUX0NVUkxZKQoJCQkJCSRuLT52YWx1ZSA9ICR0aGlzLT5FeHByZXNzaW9uKCR4KTsKCQkJCWVsc2UKCQkJCQkkbi0+dmFsdWUgPSBudWxsOwoJCQlicmVhazsKCgkJCWNhc2UgS0VZV09SRF9XSVRIOgoJCQkJJG4gPSBuZXcgSlNOb2RlKCR0aGlzLT50KTsKCQkJCSRuLT5vYmplY3QgPSAkdGhpcy0+UGFyZW5FeHByZXNzaW9uKCR4KTsKCQkJCSRuLT5ib2R5ID0gJHRoaXMtPm5lc3QoJHgsICRuKTsKCQkJcmV0dXJuICRuOwoKCQkJY2FzZSBLRVlXT1JEX1ZBUjoKCQkJY2FzZSBLRVlXT1JEX0NPTlNUOgoJCQkgICAgICAgICRuID0gJHRoaXMtPlZhcmlhYmxlcygkeCk7CgkJCWJyZWFrOwoKCQkJY2FzZSBUT0tFTl9DT05EQ09NTUVOVF9TVEFSVDoKCQkJY2FzZSBUT0tFTl9DT05EQ09NTUVOVF9FTkQ6CgkJCQkkbiA9IG5ldyBKU05vZGUoJHRoaXMtPnQpOwoJCQlyZXR1cm4gJG47CgoJCQljYXNlIEtFWVdPUkRfREVCVUdHRVI6CgkJCQkkbiA9IG5ldyBKU05vZGUoJHRoaXMtPnQpOwoJCQlicmVhazsKCgkJCWNhc2UgVE9LRU5fTkVXTElORToKCQkJY2FzZSBPUF9TRU1JQ09MT046CgkJCQkkbiA9IG5ldyBKU05vZGUoJHRoaXMtPnQsIE9QX1NFTUlDT0xPTik7CgkJCQkkbi0+ZXhwcmVzc2lvbiA9IG51bGw7CgkJCXJldHVybiAkbjsKCgkJCWRlZmF1bHQ6CgkJCQlpZiAoJHR0ID09IFRPS0VOX0lERU5USUZJRVIpCgkJCQl7CgkJCQkJJHRoaXMtPnQtPnNjYW5PcGVyYW5kID0gZmFsc2U7CgkJCQkJJHR0ID0gJHRoaXMtPnQtPnBlZWsoKTsKCQkJCQkkdGhpcy0+dC0+c2Nhbk9wZXJhbmQgPSB0cnVlOwoJCQkJCWlmICgkdHQgPT0gT1BfQ09MT04pCgkJCQkJewoJCQkJCQkkbGFiZWwgPSAkdGhpcy0+dC0+Y3VycmVudFRva2VuKCktPnZhbHVlOwoJCQkJCQkkc3MgPSAkeC0+c3RtdFN0YWNrOwoJCQkJCQlmb3IgKCRpID0gY291bnQoJHNzKSAtIDE7ICRpID49IDA7IC0tJGkpCgkJCQkJCXsKCQkJCQkJCWlmICgkc3NbJGldLT5sYWJlbCA9PSAkbGFiZWwpCgkJCQkJCQkJdGhyb3cgJHRoaXMtPnQtPm5ld1N5bnRheEVycm9yKCdEdXBsaWNhdGUgbGFiZWwnKTsKCQkJCQkJfQoKCQkJCQkJJHRoaXMtPnQtPmdldCgpOwoJCQkJCQkkbiA9IG5ldyBKU05vZGUoJHRoaXMtPnQsIEpTX0xBQkVMKTsKCQkJCQkJJG4tPmxhYmVsID0gJGxhYmVsOwoJCQkJCQkkbi0+c3RhdGVtZW50ID0gJHRoaXMtPm5lc3QoJHgsICRuKTsKCgkJCQkJCXJldHVybiAkbjsKCQkJCQl9CgkJCQl9CgoJCQkJJG4gPSBuZXcgSlNOb2RlKCR0aGlzLT50LCBPUF9TRU1JQ09MT04pOwoJCQkJJHRoaXMtPnQtPnVuZ2V0KCk7CgkJCQkkbi0+ZXhwcmVzc2lvbiA9ICR0aGlzLT5FeHByZXNzaW9uKCR4KTsKCQkJCSRuLT5lbmQgPSAkbi0+ZXhwcmVzc2lvbi0+ZW5kOwoJCQlicmVhazsKCQl9CgoJCWlmICgkdGhpcy0+dC0+bGluZW5vID09ICR0aGlzLT50LT5jdXJyZW50VG9rZW4oKS0+bGluZW5vKQoJCXsKCQkJJHR0ID0gJHRoaXMtPnQtPnBlZWtPblNhbWVMaW5lKCk7CgkJCWlmICgkdHQgIT0gVE9LRU5fRU5EICYmICR0dCAhPSBUT0tFTl9ORVdMSU5FICYmICR0dCAhPSBPUF9TRU1JQ09MT04gJiYgJHR0ICE9IE9QX1JJR0hUX0NVUkxZKQoJCQkJdGhyb3cgJHRoaXMtPnQtPm5ld1N5bnRheEVycm9yKCdNaXNzaW5nIDsgYmVmb3JlIHN0YXRlbWVudCcpOwoJCX0KCgkJJHRoaXMtPnQtPm1hdGNoKE9QX1NFTUlDT0xPTik7CgoJCXJldHVybiAkbjsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIEZ1bmN0aW9uRGVmaW5pdGlvbigkeCwgJHJlcXVpcmVOYW1lLCAkZnVuY3Rpb25Gb3JtKQoJewoJCSRmID0gbmV3IEpTTm9kZSgkdGhpcy0+dCk7CgoJCWlmICgkZi0+dHlwZSAhPSBLRVlXT1JEX0ZVTkNUSU9OKQoJCQkkZi0+dHlwZSA9ICgkZi0+dmFsdWUgPT0gJ2dldCcpID8gSlNfR0VUVEVSIDogSlNfU0VUVEVSOwoKCQlpZiAoJHRoaXMtPnQtPm1hdGNoKFRPS0VOX0lERU5USUZJRVIpKQoJCQkkZi0+bmFtZSA9ICR0aGlzLT50LT5jdXJyZW50VG9rZW4oKS0+dmFsdWU7CgkJZWxzZWlmICgkcmVxdWlyZU5hbWUpCgkJCXRocm93ICR0aGlzLT50LT5uZXdTeW50YXhFcnJvcignTWlzc2luZyBmdW5jdGlvbiBpZGVudGlmaWVyJyk7CgoJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfTEVGVF9QQVJFTik7CgkJCSRmLT5wYXJhbXMgPSBhcnJheSgpOwoKCQl3aGlsZSAoKCR0dCA9ICR0aGlzLT50LT5nZXQoKSkgIT0gT1BfUklHSFRfUEFSRU4pCgkJewoJCQlpZiAoJHR0ICE9IFRPS0VOX0lERU5USUZJRVIpCgkJCQl0aHJvdyAkdGhpcy0+dC0+bmV3U3ludGF4RXJyb3IoJ01pc3NpbmcgZm9ybWFsIHBhcmFtZXRlcicpOwoKCQkJYXJyYXlfcHVzaCgkZi0+cGFyYW1zLCAkdGhpcy0+dC0+Y3VycmVudFRva2VuKCktPnZhbHVlKTsKCgkJCWlmICgkdGhpcy0+dC0+cGVlaygpICE9IE9QX1JJR0hUX1BBUkVOKQoJCQkJJHRoaXMtPnQtPm11c3RNYXRjaChPUF9DT01NQSk7CgkJfQoKCQkkdGhpcy0+dC0+bXVzdE1hdGNoKE9QX0xFRlRfQ1VSTFkpOwoKCQkkeDIgPSBuZXcgSlNDb21waWxlckNvbnRleHQodHJ1ZSk7CgkJJGYtPmJvZHkgPSAkdGhpcy0+U2NyaXB0KCR4Mik7CgoJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfUklHSFRfQ1VSTFkpOwoJCSRmLT5lbmQgPSAkdGhpcy0+dC0+Y3VycmVudFRva2VuKCktPmVuZDsKCgkJJGYtPmZ1bmN0aW9uRm9ybSA9ICRmdW5jdGlvbkZvcm07CgkJaWYgKCRmdW5jdGlvbkZvcm0gPT0gREVDTEFSRURfRk9STSkKCQkJYXJyYXlfcHVzaCgkeC0+ZnVuRGVjbHMsICRmKTsKCgkJcmV0dXJuICRmOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gVmFyaWFibGVzKCR4KQoJewoJCSRuID0gbmV3IEpTTm9kZSgkdGhpcy0+dCk7CgoJCWRvCgkJewoJCQkkdGhpcy0+dC0+bXVzdE1hdGNoKFRPS0VOX0lERU5USUZJRVIpOwoKCQkJJG4yID0gbmV3IEpTTm9kZSgkdGhpcy0+dCk7CgkJCSRuMi0+bmFtZSA9ICRuMi0+dmFsdWU7CgoJCQlpZiAoJHRoaXMtPnQtPm1hdGNoKE9QX0FTU0lHTikpCgkJCXsKCQkJCWlmICgkdGhpcy0+dC0+Y3VycmVudFRva2VuKCktPmFzc2lnbk9wKQoJCQkJCXRocm93ICR0aGlzLT50LT5uZXdTeW50YXhFcnJvcignSW52YWxpZCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbicpOwoKCQkJCSRuMi0+aW5pdGlhbGl6ZXIgPSAkdGhpcy0+RXhwcmVzc2lvbigkeCwgT1BfQ09NTUEpOwoJCQl9CgoJCQkkbjItPnJlYWRPbmx5ID0gJG4tPnR5cGUgPT0gS0VZV09SRF9DT05TVDsKCgkJCSRuLT5hZGROb2RlKCRuMik7CgkJCWFycmF5X3B1c2goJHgtPnZhckRlY2xzLCAkbjIpOwoJCX0KCQl3aGlsZSAoJHRoaXMtPnQtPm1hdGNoKE9QX0NPTU1BKSk7CgoJCXJldHVybiAkbjsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIEV4cHJlc3Npb24oJHgsICRzdG9wPWZhbHNlKQoJewoJCSRvcGVyYXRvcnMgPSBhcnJheSgpOwoJCSRvcGVyYW5kcyA9IGFycmF5KCk7CgkJJG4gPSBmYWxzZTsKCgkJJGJsID0gJHgtPmJyYWNrZXRMZXZlbDsKCQkkY2wgPSAkeC0+Y3VybHlMZXZlbDsKCQkkcGwgPSAkeC0+cGFyZW5MZXZlbDsKCQkkaGwgPSAkeC0+aG9va0xldmVsOwoKCQl3aGlsZSAoKCR0dCA9ICR0aGlzLT50LT5nZXQoKSkgIT0gVE9LRU5fRU5EKQoJCXsKCQkJaWYgKCR0dCA9PSAkc3RvcCAmJgoJCQkJJHgtPmJyYWNrZXRMZXZlbCA9PSAkYmwgJiYKCQkJCSR4LT5jdXJseUxldmVsID09ICRjbCAmJgoJCQkJJHgtPnBhcmVuTGV2ZWwgPT0gJHBsICYmCgkJCQkkeC0+aG9va0xldmVsID09ICRobAoJCQkpCgkJCXsKCQkJCS8vIFN0b3Agb25seSBpZiB0dCBtYXRjaGVzIHRoZSBvcHRpb25hbCBzdG9wIHBhcmFtZXRlciwgYW5kIHRoYXQKCQkJCS8vIHRva2VuIGlzIG5vdCBxdW90ZWQgYnkgc29tZSBraW5kIG9mIGJyYWNrZXQuCgkJCQlicmVhazsKCQkJfQoKCQkJc3dpdGNoICgkdHQpCgkJCXsKCQkJCWNhc2UgT1BfU0VNSUNPTE9OOgoJCQkJCS8vIE5COiBjYW5ub3QgYmUgZW1wdHksIFN0YXRlbWVudCBoYW5kbGVkIHRoYXQuCgkJCQkJYnJlYWsgMjsKCgkJCQljYXNlIE9QX0hPT0s6CgkJCQkJaWYgKCR0aGlzLT50LT5zY2FuT3BlcmFuZCkKCQkJCQkJYnJlYWsgMjsKCgkJCQkJd2hpbGUgKAkhZW1wdHkoJG9wZXJhdG9ycykgJiYKCQkJCQkJJHRoaXMtPm9wUHJlY2VkZW5jZVtlbmQoJG9wZXJhdG9ycyktPnR5cGVdID4gJHRoaXMtPm9wUHJlY2VkZW5jZVskdHRdCgkJCQkJKQoJCQkJCQkkdGhpcy0+cmVkdWNlKCRvcGVyYXRvcnMsICRvcGVyYW5kcyk7CgoJCQkJCWFycmF5X3B1c2goJG9wZXJhdG9ycywgbmV3IEpTTm9kZSgkdGhpcy0+dCkpOwoKCQkJCQkrKyR4LT5ob29rTGV2ZWw7CgkJCQkJJHRoaXMtPnQtPnNjYW5PcGVyYW5kID0gdHJ1ZTsKCQkJCQkkbiA9ICR0aGlzLT5FeHByZXNzaW9uKCR4KTsKCgkJCQkJaWYgKCEkdGhpcy0+dC0+bWF0Y2goT1BfQ09MT04pKQoJCQkJCQlicmVhayAyOwoKCQkJCQktLSR4LT5ob29rTGV2ZWw7CgkJCQkJYXJyYXlfcHVzaCgkb3BlcmFuZHMsICRuKTsKCQkJCWJyZWFrOwoKCQkJCWNhc2UgT1BfQ09MT046CgkJCQkJaWYgKCR4LT5ob29rTGV2ZWwpCgkJCQkJCWJyZWFrIDI7CgoJCQkJCXRocm93ICR0aGlzLT50LT5uZXdTeW50YXhFcnJvcignSW52YWxpZCBsYWJlbCcpOwoJCQkJYnJlYWs7CgoJCQkJY2FzZSBPUF9BU1NJR046CgkJCQkJaWYgKCR0aGlzLT50LT5zY2FuT3BlcmFuZCkKCQkJCQkJYnJlYWsgMjsKCgkJCQkJLy8gVXNlID4sIG5vdCA+PSwgZm9yIHJpZ2h0LWFzc29jaWF0aXZlIEFTU0lHTgoJCQkJCXdoaWxlICgJIWVtcHR5KCRvcGVyYXRvcnMpICYmCgkJCQkJCSR0aGlzLT5vcFByZWNlZGVuY2VbZW5kKCRvcGVyYXRvcnMpLT50eXBlXSA+ICR0aGlzLT5vcFByZWNlZGVuY2VbJHR0XQoJCQkJCSkKCQkJCQkJJHRoaXMtPnJlZHVjZSgkb3BlcmF0b3JzLCAkb3BlcmFuZHMpOwoKCQkJCQlhcnJheV9wdXNoKCRvcGVyYXRvcnMsIG5ldyBKU05vZGUoJHRoaXMtPnQpKTsKCQkJCQllbmQoJG9wZXJhbmRzKS0+YXNzaWduT3AgPSAkdGhpcy0+dC0+Y3VycmVudFRva2VuKCktPmFzc2lnbk9wOwoJCQkJCSR0aGlzLT50LT5zY2FuT3BlcmFuZCA9IHRydWU7CgkJCQlicmVhazsKCgkJCQljYXNlIEtFWVdPUkRfSU46CgkJCQkJLy8gQW4gaW4gb3BlcmF0b3Igc2hvdWxkIG5vdCBiZSBwYXJzZWQgaWYgd2UncmUgcGFyc2luZyB0aGUgaGVhZCBvZgoJCQkJCS8vIGEgZm9yICguLi4pIGxvb3AsIHVubGVzcyBpdCBpcyBpbiB0aGUgdGhlbiBwYXJ0IG9mIGEgY29uZGl0aW9uYWwKCQkJCQkvLyBleHByZXNzaW9uLCBvciBwYXJlbnRoZXNpemVkIHNvbWVob3cuCgkJCQkJaWYgKCR4LT5pbkZvckxvb3BJbml0ICYmICEkeC0+aG9va0xldmVsICYmCgkJCQkJCSEkeC0+YnJhY2tldExldmVsICYmICEkeC0+Y3VybHlMZXZlbCAmJgoJCQkJCQkhJHgtPnBhcmVuTGV2ZWwKCQkJCQkpCgkJCQkJCWJyZWFrIDI7CgkJCQkvLyBGQUxMIFRIUk9VR0gKCQkJCWNhc2UgT1BfQ09NTUE6CgkJCQkJLy8gQSBjb21tYSBvcGVyYXRvciBzaG91bGQgbm90IGJlIHBhcnNlZCBpZiB3ZSdyZSBwYXJzaW5nIHRoZSB0aGVuIHBhcnQKCQkJCQkvLyBvZiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gdW5sZXNzIGl0J3MgcGFyZW50aGVzaXplZCBzb21laG93LgoJCQkJCWlmICgkdHQgPT0gT1BfQ09NTUEgJiYgJHgtPmhvb2tMZXZlbCAmJgoJCQkJCQkhJHgtPmJyYWNrZXRMZXZlbCAmJiAhJHgtPmN1cmx5TGV2ZWwgJiYKCQkJCQkJISR4LT5wYXJlbkxldmVsCgkJCQkJKQoJCQkJCQlicmVhayAyOwoJCQkJLy8gVHJlYXQgY29tbWEgYXMgbGVmdC1hc3NvY2lhdGl2ZSBzbyByZWR1Y2UgY2FuIGZvbGQgbGVmdC1oZWF2eQoJCQkJLy8gQ09NTUEgdHJlZXMgaW50byBhIHNpbmdsZSBhcnJheS4KCQkJCS8vIEZBTEwgVEhST1VHSAoJCQkJY2FzZSBPUF9PUjoKCQkJCWNhc2UgT1BfQU5EOgoJCQkJY2FzZSBPUF9CSVRXSVNFX09SOgoJCQkJY2FzZSBPUF9CSVRXSVNFX1hPUjoKCQkJCWNhc2UgT1BfQklUV0lTRV9BTkQ6CgkJCQljYXNlIE9QX0VROiBjYXNlIE9QX05FOiBjYXNlIE9QX1NUUklDVF9FUTogY2FzZSBPUF9TVFJJQ1RfTkU6CgkJCQljYXNlIE9QX0xUOiBjYXNlIE9QX0xFOiBjYXNlIE9QX0dFOiBjYXNlIE9QX0dUOgoJCQkJY2FzZSBLRVlXT1JEX0lOU1RBTkNFT0Y6CgkJCQljYXNlIE9QX0xTSDogY2FzZSBPUF9SU0g6IGNhc2UgT1BfVVJTSDoKCQkJCWNhc2UgT1BfUExVUzogY2FzZSBPUF9NSU5VUzoKCQkJCWNhc2UgT1BfTVVMOiBjYXNlIE9QX0RJVjogY2FzZSBPUF9NT0Q6CgkJCQljYXNlIE9QX0RPVDoKCQkJCQlpZiAoJHRoaXMtPnQtPnNjYW5PcGVyYW5kKQoJCQkJCQlicmVhayAyOwoKCQkJCQl3aGlsZSAoCSFlbXB0eSgkb3BlcmF0b3JzKSAmJgoJCQkJCQkkdGhpcy0+b3BQcmVjZWRlbmNlW2VuZCgkb3BlcmF0b3JzKS0+dHlwZV0gPj0gJHRoaXMtPm9wUHJlY2VkZW5jZVskdHRdCgkJCQkJKQoJCQkJCQkkdGhpcy0+cmVkdWNlKCRvcGVyYXRvcnMsICRvcGVyYW5kcyk7CgoJCQkJCWlmICgkdHQgPT0gT1BfRE9UKQoJCQkJCXsKCQkJCQkJJHRoaXMtPnQtPm11c3RNYXRjaChUT0tFTl9JREVOVElGSUVSKTsKCQkJCQkJYXJyYXlfcHVzaCgkb3BlcmFuZHMsIG5ldyBKU05vZGUoJHRoaXMtPnQsIE9QX0RPVCwgYXJyYXlfcG9wKCRvcGVyYW5kcyksIG5ldyBKU05vZGUoJHRoaXMtPnQpKSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCWFycmF5X3B1c2goJG9wZXJhdG9ycywgbmV3IEpTTm9kZSgkdGhpcy0+dCkpOwoJCQkJCQkkdGhpcy0+dC0+c2Nhbk9wZXJhbmQgPSB0cnVlOwoJCQkJCX0KCQkJCWJyZWFrOwoKCQkJCWNhc2UgS0VZV09SRF9ERUxFVEU6IGNhc2UgS0VZV09SRF9WT0lEOiBjYXNlIEtFWVdPUkRfVFlQRU9GOgoJCQkJY2FzZSBPUF9OT1Q6IGNhc2UgT1BfQklUV0lTRV9OT1Q6IGNhc2UgT1BfVU5BUllfUExVUzogY2FzZSBPUF9VTkFSWV9NSU5VUzoKCQkJCWNhc2UgS0VZV09SRF9ORVc6CgkJCQkJaWYgKCEkdGhpcy0+dC0+c2Nhbk9wZXJhbmQpCgkJCQkJCWJyZWFrIDI7CgoJCQkJCWFycmF5X3B1c2goJG9wZXJhdG9ycywgbmV3IEpTTm9kZSgkdGhpcy0+dCkpOwoJCQkJYnJlYWs7CgoJCQkJY2FzZSBPUF9JTkNSRU1FTlQ6IGNhc2UgT1BfREVDUkVNRU5UOgoJCQkJCWlmICgkdGhpcy0+dC0+c2Nhbk9wZXJhbmQpCgkJCQkJewoJCQkJCQlhcnJheV9wdXNoKCRvcGVyYXRvcnMsIG5ldyBKU05vZGUoJHRoaXMtPnQpKTsgIC8vIHByZWZpeCBpbmNyZW1lbnQgb3IgZGVjcmVtZW50CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCS8vIERvbid0IGNyb3NzIGEgbGluZSBib3VuZGFyeSBmb3IgcG9zdGZpeCB7aW4sZGV9Y3JlbWVudC4KCQkJCQkJJHQgPSAkdGhpcy0+dC0+dG9rZW5zWygkdGhpcy0+dC0+dG9rZW5JbmRleCArICR0aGlzLT50LT5sb29rYWhlYWQgLSAxKSAmIDNdOwoJCQkJCQlpZiAoJHQgJiYgJHQtPmxpbmVubyAhPSAkdGhpcy0+dC0+bGluZW5vKQoJCQkJCQkJYnJlYWsgMjsKCgkJCQkJCWlmICghZW1wdHkoJG9wZXJhdG9ycykpCgkJCQkJCXsKCQkJCQkJCS8vIFVzZSA+LCBub3QgPj0sIHNvIHBvc3RmaXggaGFzIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gcHJlZml4LgoJCQkJCQkJd2hpbGUgKCR0aGlzLT5vcFByZWNlZGVuY2VbZW5kKCRvcGVyYXRvcnMpLT50eXBlXSA+ICR0aGlzLT5vcFByZWNlZGVuY2VbJHR0XSkKCQkJCQkJCQkkdGhpcy0+cmVkdWNlKCRvcGVyYXRvcnMsICRvcGVyYW5kcyk7CgkJCQkJCX0KCgkJCQkJCSRuID0gbmV3IEpTTm9kZSgkdGhpcy0+dCwgJHR0LCBhcnJheV9wb3AoJG9wZXJhbmRzKSk7CgkJCQkJCSRuLT5wb3N0Zml4ID0gdHJ1ZTsKCQkJCQkJYXJyYXlfcHVzaCgkb3BlcmFuZHMsICRuKTsKCQkJCQl9CgkJCQlicmVhazsKCgkJCQljYXNlIEtFWVdPUkRfRlVOQ1RJT046CgkJCQkJaWYgKCEkdGhpcy0+dC0+c2Nhbk9wZXJhbmQpCgkJCQkJCWJyZWFrIDI7CgoJCQkJCWFycmF5X3B1c2goJG9wZXJhbmRzLCAkdGhpcy0+RnVuY3Rpb25EZWZpbml0aW9uKCR4LCBmYWxzZSwgRVhQUkVTU0VEX0ZPUk0pKTsKCQkJCQkkdGhpcy0+dC0+c2Nhbk9wZXJhbmQgPSBmYWxzZTsKCQkJCWJyZWFrOwoKCQkJCWNhc2UgS0VZV09SRF9OVUxMOiBjYXNlIEtFWVdPUkRfVEhJUzogY2FzZSBLRVlXT1JEX1RSVUU6IGNhc2UgS0VZV09SRF9GQUxTRToKCQkJCWNhc2UgVE9LRU5fSURFTlRJRklFUjogY2FzZSBUT0tFTl9OVU1CRVI6IGNhc2UgVE9LRU5fU1RSSU5HOiBjYXNlIFRPS0VOX1JFR0VYUDoKCQkJCQlpZiAoISR0aGlzLT50LT5zY2FuT3BlcmFuZCkKCQkJCQkJYnJlYWsgMjsKCgkJCQkJYXJyYXlfcHVzaCgkb3BlcmFuZHMsIG5ldyBKU05vZGUoJHRoaXMtPnQpKTsKCQkJCQkkdGhpcy0+dC0+c2Nhbk9wZXJhbmQgPSBmYWxzZTsKCQkJCWJyZWFrOwoKCQkJCWNhc2UgVE9LRU5fQ09ORENPTU1FTlRfU1RBUlQ6CgkJCQljYXNlIFRPS0VOX0NPTkRDT01NRU5UX0VORDoKCQkJCQlpZiAoJHRoaXMtPnQtPnNjYW5PcGVyYW5kKQoJCQkJCQlhcnJheV9wdXNoKCRvcGVyYXRvcnMsIG5ldyBKU05vZGUoJHRoaXMtPnQpKTsKCQkJCQllbHNlCgkJCQkJCWFycmF5X3B1c2goJG9wZXJhbmRzLCBuZXcgSlNOb2RlKCR0aGlzLT50KSk7CgkJCQlicmVhazsKCgkJCQljYXNlIE9QX0xFRlRfQlJBQ0tFVDoKCQkJCQlpZiAoJHRoaXMtPnQtPnNjYW5PcGVyYW5kKQoJCQkJCXsKCQkJCQkJLy8gQXJyYXkgaW5pdGlhbGlzZXIuICBQYXJzZSB1c2luZyByZWN1cnNpdmUgZGVzY2VudCwgYXMgdGhlCgkJCQkJCS8vIHN1Yi1ncmFtbWFyIGhlcmUgaXMgbm90IGFuIG9wZXJhdG9yIGdyYW1tYXIuCgkJCQkJCSRuID0gbmV3IEpTTm9kZSgkdGhpcy0+dCwgSlNfQVJSQVlfSU5JVCk7CgkJCQkJCXdoaWxlICgoJHR0ID0gJHRoaXMtPnQtPnBlZWsoKSkgIT0gT1BfUklHSFRfQlJBQ0tFVCkKCQkJCQkJewoJCQkJCQkJaWYgKCR0dCA9PSBPUF9DT01NQSkKCQkJCQkJCXsKCQkJCQkJCQkkdGhpcy0+dC0+Z2V0KCk7CgkJCQkJCQkJJG4tPmFkZE5vZGUobnVsbCk7CgkJCQkJCQkJY29udGludWU7CgkJCQkJCQl9CgoJCQkJCQkJJG4tPmFkZE5vZGUoJHRoaXMtPkV4cHJlc3Npb24oJHgsIE9QX0NPTU1BKSk7CgkJCQkJCQlpZiAoISR0aGlzLT50LT5tYXRjaChPUF9DT01NQSkpCgkJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCgkJCQkJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfUklHSFRfQlJBQ0tFVCk7CgkJCQkJCWFycmF5X3B1c2goJG9wZXJhbmRzLCAkbik7CgkJCQkJCSR0aGlzLT50LT5zY2FuT3BlcmFuZCA9IGZhbHNlOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkvLyBQcm9wZXJ0eSBpbmRleGluZyBvcGVyYXRvci4KCQkJCQkJYXJyYXlfcHVzaCgkb3BlcmF0b3JzLCBuZXcgSlNOb2RlKCR0aGlzLT50LCBKU19JTkRFWCkpOwoJCQkJCQkkdGhpcy0+dC0+c2Nhbk9wZXJhbmQgPSB0cnVlOwoJCQkJCQkrKyR4LT5icmFja2V0TGV2ZWw7CgkJCQkJfQoJCQkJYnJlYWs7CgoJCQkJY2FzZSBPUF9SSUdIVF9CUkFDS0VUOgoJCQkJCWlmICgkdGhpcy0+dC0+c2Nhbk9wZXJhbmQgfHwgJHgtPmJyYWNrZXRMZXZlbCA9PSAkYmwpCgkJCQkJCWJyZWFrIDI7CgoJCQkJCXdoaWxlICgkdGhpcy0+cmVkdWNlKCRvcGVyYXRvcnMsICRvcGVyYW5kcyktPnR5cGUgIT0gSlNfSU5ERVgpCgkJCQkJCWNvbnRpbnVlOwoKCQkJCQktLSR4LT5icmFja2V0TGV2ZWw7CgkJCQlicmVhazsKCgkJCQljYXNlIE9QX0xFRlRfQ1VSTFk6CgkJCQkJaWYgKCEkdGhpcy0+dC0+c2Nhbk9wZXJhbmQpCgkJCQkJCWJyZWFrIDI7CgoJCQkJCS8vIE9iamVjdCBpbml0aWFsaXNlci4gIEFzIGZvciBhcnJheSBpbml0aWFsaXNlcnMgKHNlZSBhYm92ZSksCgkJCQkJLy8gcGFyc2UgdXNpbmcgcmVjdXJzaXZlIGRlc2NlbnQuCgkJCQkJKyskeC0+Y3VybHlMZXZlbDsKCQkJCQkkbiA9IG5ldyBKU05vZGUoJHRoaXMtPnQsIEpTX09CSkVDVF9JTklUKTsKCQkJCQl3aGlsZSAoISR0aGlzLT50LT5tYXRjaChPUF9SSUdIVF9DVVJMWSkpCgkJCQkJewoJCQkJCQlkbwoJCQkJCQl7CgkJCQkJCQkkdHQgPSAkdGhpcy0+dC0+Z2V0KCk7CgkJCQkJCQkkdHYgPSAkdGhpcy0+dC0+Y3VycmVudFRva2VuKCktPnZhbHVlOwoJCQkJCQkJaWYgKCgkdHYgPT0gJ2dldCcgfHwgJHR2ID09ICdzZXQnKSAmJiAkdGhpcy0+dC0+cGVlaygpID09IFRPS0VOX0lERU5USUZJRVIpCgkJCQkJCQl7CgkJCQkJCQkJaWYgKCR4LT5lY21hU3RyaWN0TW9kZSkKCQkJCQkJCQkJdGhyb3cgJHRoaXMtPnQtPm5ld1N5bnRheEVycm9yKCdJbGxlZ2FsIHByb3BlcnR5IGFjY2Vzc29yJyk7CgoJCQkJCQkJCSRuLT5hZGROb2RlKCR0aGlzLT5GdW5jdGlvbkRlZmluaXRpb24oJHgsIHRydWUsIEVYUFJFU1NFRF9GT1JNKSk7CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJCQkJCQl7CgkJCQkJCQkJc3dpdGNoICgkdHQpCgkJCQkJCQkJewoJCQkJCQkJCQljYXNlIFRPS0VOX0lERU5USUZJRVI6CgkJCQkJCQkJCWNhc2UgVE9LRU5fTlVNQkVSOgoJCQkJCQkJCQljYXNlIFRPS0VOX1NUUklORzoKCQkJCQkJCQkJCSRpZCA9IG5ldyBKU05vZGUoJHRoaXMtPnQpOwoJCQkJCQkJCQlicmVhazsKCgkJCQkJCQkJCWNhc2UgT1BfUklHSFRfQ1VSTFk6CgkJCQkJCQkJCQlpZiAoJHgtPmVjbWFTdHJpY3RNb2RlKQoJCQkJCQkJCQkJCXRocm93ICR0aGlzLT50LT5uZXdTeW50YXhFcnJvcignSWxsZWdhbCB0cmFpbGluZyAsJyk7CgkJCQkJCQkJCWJyZWFrIDM7CgoJCQkJCQkJCQlkZWZhdWx0OgoJCQkJCQkJCQkJdGhyb3cgJHRoaXMtPnQtPm5ld1N5bnRheEVycm9yKCdJbnZhbGlkIHByb3BlcnR5IG5hbWUnKTsKCQkJCQkJCQl9CgoJCQkJCQkJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfQ09MT04pOwoJCQkJCQkJCSRuLT5hZGROb2RlKG5ldyBKU05vZGUoJHRoaXMtPnQsIEpTX1BST1BFUlRZX0lOSVQsICRpZCwgJHRoaXMtPkV4cHJlc3Npb24oJHgsIE9QX0NPTU1BKSkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCXdoaWxlICgkdGhpcy0+dC0+bWF0Y2goT1BfQ09NTUEpKTsKCgkJCQkJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfUklHSFRfQ1VSTFkpOwoJCQkJCQlicmVhazsKCQkJCQl9CgoJCQkJCWFycmF5X3B1c2goJG9wZXJhbmRzLCAkbik7CgkJCQkJJHRoaXMtPnQtPnNjYW5PcGVyYW5kID0gZmFsc2U7CgkJCQkJLS0keC0+Y3VybHlMZXZlbDsKCQkJCWJyZWFrOwoKCQkJCWNhc2UgT1BfUklHSFRfQ1VSTFk6CgkJCQkJaWYgKCEkdGhpcy0+dC0+c2Nhbk9wZXJhbmQgJiYgJHgtPmN1cmx5TGV2ZWwgIT0gJGNsKQoJCQkJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdQQU5JQzogcmlnaHQgY3VybHkgYm90Y2gnKTsKCQkJCWJyZWFrIDI7CgoJCQkJY2FzZSBPUF9MRUZUX1BBUkVOOgoJCQkJCWlmICgkdGhpcy0+dC0+c2Nhbk9wZXJhbmQpCgkJCQkJewoJCQkJCQlhcnJheV9wdXNoKCRvcGVyYXRvcnMsIG5ldyBKU05vZGUoJHRoaXMtPnQsIEpTX0dST1VQKSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXdoaWxlICgJIWVtcHR5KCRvcGVyYXRvcnMpICYmCgkJCQkJCQkkdGhpcy0+b3BQcmVjZWRlbmNlW2VuZCgkb3BlcmF0b3JzKS0+dHlwZV0gPiAkdGhpcy0+b3BQcmVjZWRlbmNlW0tFWVdPUkRfTkVXXQoJCQkJCQkpCgkJCQkJCQkkdGhpcy0+cmVkdWNlKCRvcGVyYXRvcnMsICRvcGVyYW5kcyk7CgoJCQkJCQkvLyBIYW5kbGUgKCkgbm93LCB0byByZWd1bGFyaXplIHRoZSBuLWFyeSBjYXNlIGZvciBuID4gMC4KCQkJCQkJLy8gV2UgbXVzdCBzZXQgc2Nhbk9wZXJhbmQgaW4gY2FzZSB0aGVyZSBhcmUgYXJndW1lbnRzIGFuZAoJCQkJCQkvLyB0aGUgZmlyc3Qgb25lIGlzIGEgcmVnZXhwIG9yIHVuYXJ5Ky8tLgoJCQkJCQkkbiA9IGVuZCgkb3BlcmF0b3JzKTsKCQkJCQkJJHRoaXMtPnQtPnNjYW5PcGVyYW5kID0gdHJ1ZTsKCQkJCQkJaWYgKCR0aGlzLT50LT5tYXRjaChPUF9SSUdIVF9QQVJFTikpCgkJCQkJCXsKCQkJCQkJCWlmICgkbiAmJiAkbi0+dHlwZSA9PSBLRVlXT1JEX05FVykKCQkJCQkJCXsKCQkJCQkJCQlhcnJheV9wb3AoJG9wZXJhdG9ycyk7CgkJCQkJCQkJJG4tPmFkZE5vZGUoYXJyYXlfcG9wKCRvcGVyYW5kcykpOwoJCQkJCQkJfQoJCQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCSRuID0gbmV3IEpTTm9kZSgkdGhpcy0+dCwgSlNfQ0FMTCwgYXJyYXlfcG9wKCRvcGVyYW5kcyksIG5ldyBKU05vZGUoJHRoaXMtPnQsIEpTX0xJU1QpKTsKCQkJCQkJCX0KCgkJCQkJCQlhcnJheV9wdXNoKCRvcGVyYW5kcywgJG4pOwoJCQkJCQkJJHRoaXMtPnQtPnNjYW5PcGVyYW5kID0gZmFsc2U7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoKCQkJCQkJaWYgKCRuICYmICRuLT50eXBlID09IEtFWVdPUkRfTkVXKQoJCQkJCQkJJG4tPnR5cGUgPSBKU19ORVdfV0lUSF9BUkdTOwoJCQkJCQllbHNlCgkJCQkJCQlhcnJheV9wdXNoKCRvcGVyYXRvcnMsIG5ldyBKU05vZGUoJHRoaXMtPnQsIEpTX0NBTEwpKTsKCQkJCQl9CgoJCQkJCSsrJHgtPnBhcmVuTGV2ZWw7CgkJCQlicmVhazsKCgkJCQljYXNlIE9QX1JJR0hUX1BBUkVOOgoJCQkJCWlmICgkdGhpcy0+dC0+c2Nhbk9wZXJhbmQgfHwgJHgtPnBhcmVuTGV2ZWwgPT0gJHBsKQoJCQkJCQlicmVhayAyOwoKCQkJCQl3aGlsZSAoKCR0dCA9ICR0aGlzLT5yZWR1Y2UoJG9wZXJhdG9ycywgJG9wZXJhbmRzKS0+dHlwZSkgIT0gSlNfR1JPVVAgJiYKCQkJCQkJJHR0ICE9IEpTX0NBTEwgJiYgJHR0ICE9IEpTX05FV19XSVRIX0FSR1MKCQkJCQkpCgkJCQkJewoJCQkJCQljb250aW51ZTsKCQkJCQl9CgoJCQkJCWlmICgkdHQgIT0gSlNfR1JPVVApCgkJCQkJewoJCQkJCQkkbiA9IGVuZCgkb3BlcmFuZHMpOwoJCQkJCQlpZiAoJG4tPnRyZWVOb2Rlc1sxXS0+dHlwZSAhPSBPUF9DT01NQSkKCQkJCQkJCSRuLT50cmVlTm9kZXNbMV0gPSBuZXcgSlNOb2RlKCR0aGlzLT50LCBKU19MSVNULCAkbi0+dHJlZU5vZGVzWzFdKTsKCQkJCQkJZWxzZQoJCQkJCQkJJG4tPnRyZWVOb2Rlc1sxXS0+dHlwZSA9IEpTX0xJU1Q7CgkJCQkJfQoKCQkJCQktLSR4LT5wYXJlbkxldmVsOwoJCQkJYnJlYWs7CgoJCQkJLy8gQXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24gbWVhbnMgd2UgbWF5IHNjYW4gYWNyb3NzIGEgbmV3bGluZQoJCQkJLy8gYW5kIGludG8gdGhlIGJlZ2lubmluZyBvZiBhbm90aGVyIHN0YXRlbWVudC4gIElmIHNvLCBicmVhayBvdXQgb2YKCQkJCS8vIHRoZSB3aGlsZSBsb29wIGFuZCBsZXQgdGhlIHQuc2Nhbk9wZXJhbmQgbG9naWMgaGFuZGxlIGVycm9ycy4KCQkJCWRlZmF1bHQ6CgkJCQkJYnJlYWsgMjsKCQkJfQoJCX0KCgkJaWYgKCR4LT5ob29rTGV2ZWwgIT0gJGhsKQoJCQl0aHJvdyAkdGhpcy0+dC0+bmV3U3ludGF4RXJyb3IoJ01pc3NpbmcgOiBpbiBjb25kaXRpb25hbCBleHByZXNzaW9uJyk7CgoJCWlmICgkeC0+cGFyZW5MZXZlbCAhPSAkcGwpCgkJCXRocm93ICR0aGlzLT50LT5uZXdTeW50YXhFcnJvcignTWlzc2luZyApIGluIHBhcmVudGhldGljYWwnKTsKCgkJaWYgKCR4LT5icmFja2V0TGV2ZWwgIT0gJGJsKQoJCQl0aHJvdyAkdGhpcy0+dC0+bmV3U3ludGF4RXJyb3IoJ01pc3NpbmcgXSBpbiBpbmRleCBleHByZXNzaW9uJyk7CgoJCWlmICgkdGhpcy0+dC0+c2Nhbk9wZXJhbmQpCgkJCXRocm93ICR0aGlzLT50LT5uZXdTeW50YXhFcnJvcignTWlzc2luZyBvcGVyYW5kJyk7CgoJCS8vIFJlc3VtZSBkZWZhdWx0IG1vZGUsIHNjYW5uaW5nIGZvciBvcGVyYW5kcywgbm90IG9wZXJhdG9ycy4KCQkkdGhpcy0+dC0+c2Nhbk9wZXJhbmQgPSB0cnVlOwoJCSR0aGlzLT50LT51bmdldCgpOwoKCQl3aGlsZSAoY291bnQoJG9wZXJhdG9ycykpCgkJCSR0aGlzLT5yZWR1Y2UoJG9wZXJhdG9ycywgJG9wZXJhbmRzKTsKCgkJcmV0dXJuIGFycmF5X3BvcCgkb3BlcmFuZHMpOwoJfQoKCXByaXZhdGUgZnVuY3Rpb24gUGFyZW5FeHByZXNzaW9uKCR4KQoJewoJCSR0aGlzLT50LT5tdXN0TWF0Y2goT1BfTEVGVF9QQVJFTik7CgkJJG4gPSAkdGhpcy0+RXhwcmVzc2lvbigkeCk7CgkJJHRoaXMtPnQtPm11c3RNYXRjaChPUF9SSUdIVF9QQVJFTik7CgoJCXJldHVybiAkbjsKCX0KCgkvLyBTdGF0ZW1lbnQgc3RhY2sgYW5kIG5lc3RlZCBzdGF0ZW1lbnQgaGFuZGxlci4KCXByaXZhdGUgZnVuY3Rpb24gbmVzdCgkeCwgJG5vZGUsICRlbmQgPSBmYWxzZSkKCXsKCQlhcnJheV9wdXNoKCR4LT5zdG10U3RhY2ssICRub2RlKTsKCQkkbiA9ICR0aGlzLT5zdGF0ZW1lbnQoJHgpOwoJCWFycmF5X3BvcCgkeC0+c3RtdFN0YWNrKTsKCgkJaWYgKCRlbmQpCgkJCSR0aGlzLT50LT5tdXN0TWF0Y2goJGVuZCk7CgoJCXJldHVybiAkbjsKCX0KCglwcml2YXRlIGZ1bmN0aW9uIHJlZHVjZSgmJG9wZXJhdG9ycywgJiRvcGVyYW5kcykKCXsKCQkkbiA9IGFycmF5X3BvcCgkb3BlcmF0b3JzKTsKCQkkb3AgPSAkbi0+dHlwZTsKCQkkYXJpdHkgPSAkdGhpcy0+b3BBcml0eVskb3BdOwoJCSRjID0gY291bnQoJG9wZXJhbmRzKTsKCQlpZiAoJGFyaXR5ID09IC0yKQoJCXsKCQkJLy8gRmxhdHRlbiBsZWZ0LWFzc29jaWF0aXZlIHRyZWVzCgkJCWlmICgkYyA+PSAyKQoJCQl7CgkJCQkkbGVmdCA9ICRvcGVyYW5kc1skYyAtIDJdOwoJCQkJaWYgKCRsZWZ0LT50eXBlID09ICRvcCkKCQkJCXsKCQkJCQkkcmlnaHQgPSBhcnJheV9wb3AoJG9wZXJhbmRzKTsKCQkJCQkkbGVmdC0+YWRkTm9kZSgkcmlnaHQpOwoJCQkJCXJldHVybiAkbGVmdDsKCQkJCX0KCQkJfQoJCQkkYXJpdHkgPSAyOwoJCX0KCgkJLy8gQWx3YXlzIHVzZSBwdXNoIHRvIGFkZCBvcGVyYW5kcyB0byBuLCB0byB1cGRhdGUgc3RhcnQgYW5kIGVuZAoJCSRhID0gYXJyYXlfc3BsaWNlKCRvcGVyYW5kcywgJGMgLSAkYXJpdHkpOwoJCWZvciAoJGkgPSAwOyAkaSA8ICRhcml0eTsgJGkrKykKCQkJJG4tPmFkZE5vZGUoJGFbJGldKTsKCgkJLy8gSW5jbHVkZSBjbG9zaW5nIGJyYWNrZXQgb3IgcG9zdGZpeCBvcGVyYXRvciBpbiBbc3RhcnQsZW5kXQoJCSR0ZSA9ICR0aGlzLT50LT5jdXJyZW50VG9rZW4oKS0+ZW5kOwoJCWlmICgkbi0+ZW5kIDwgJHRlKQoJCQkkbi0+ZW5kID0gJHRlOwoKCQlhcnJheV9wdXNoKCRvcGVyYW5kcywgJG4pOwoKCQlyZXR1cm4gJG47Cgl9Cn0KCmNsYXNzIEpTQ29tcGlsZXJDb250ZXh0CnsKCXB1YmxpYyAkaW5GdW5jdGlvbiA9IGZhbHNlOwoJcHVibGljICRpbkZvckxvb3BJbml0ID0gZmFsc2U7CglwdWJsaWMgJGVjbWFTdHJpY3RNb2RlID0gZmFsc2U7CglwdWJsaWMgJGJyYWNrZXRMZXZlbCA9IDA7CglwdWJsaWMgJGN1cmx5TGV2ZWwgPSAwOwoJcHVibGljICRwYXJlbkxldmVsID0gMDsKCXB1YmxpYyAkaG9va0xldmVsID0gMDsKCglwdWJsaWMgJHN0bXRTdGFjayA9IGFycmF5KCk7CglwdWJsaWMgJGZ1bkRlY2xzID0gYXJyYXkoKTsKCXB1YmxpYyAkdmFyRGVjbHMgPSBhcnJheSgpOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaW5GdW5jdGlvbikKCXsKCQkkdGhpcy0+aW5GdW5jdGlvbiA9ICRpbkZ1bmN0aW9uOwoJfQp9CgpjbGFzcyBKU05vZGUKewoJcHJpdmF0ZSAkdHlwZTsKCXByaXZhdGUgJHZhbHVlOwoJcHJpdmF0ZSAkbGluZW5vOwoJcHJpdmF0ZSAkc3RhcnQ7Cglwcml2YXRlICRlbmQ7CgoJcHVibGljICR0cmVlTm9kZXMgPSBhcnJheSgpOwoJcHVibGljICRmdW5EZWNscyA9IGFycmF5KCk7CglwdWJsaWMgJHZhckRlY2xzID0gYXJyYXkoKTsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHQsICR0eXBlPTApCgl7CgkJaWYgKCR0b2tlbiA9ICR0LT5jdXJyZW50VG9rZW4oKSkKCQl7CgkJCSR0aGlzLT50eXBlID0gJHR5cGUgPyAkdHlwZSA6ICR0b2tlbi0+dHlwZTsKCQkJJHRoaXMtPnZhbHVlID0gJHRva2VuLT52YWx1ZTsKCQkJJHRoaXMtPmxpbmVubyA9ICR0b2tlbi0+bGluZW5vOwoJCQkkdGhpcy0+c3RhcnQgPSAkdG9rZW4tPnN0YXJ0OwoJCQkkdGhpcy0+ZW5kID0gJHRva2VuLT5lbmQ7CgkJfQoJCWVsc2UKCQl7CgkJCSR0aGlzLT50eXBlID0gJHR5cGU7CgkJCSR0aGlzLT5saW5lbm8gPSAkdC0+bGluZW5vOwoJCX0KCgkJaWYgKCgkbnVtYXJncyA9IGZ1bmNfbnVtX2FyZ3MoKSkgPiAyKQoJCXsKCQkJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CgkJCWZvciAoJGkgPSAyOyAkaSA8ICRudW1hcmdzOyAkaSsrKQoJCQkJJHRoaXMtPmFkZE5vZGUoJGFyZ3NbJGldKTsKCQl9Cgl9CgoJLy8gd2UgZG9uJ3Qgd2FudCB0byBibG9hdCBvdXIgb2JqZWN0IHdpdGggYWxsIGtpbmQgb2Ygc3BlY2lmaWMgcHJvcGVydGllcywgc28gd2UgdXNlIG92ZXJsb2FkaW5nCglwdWJsaWMgZnVuY3Rpb24gX19zZXQoJG5hbWUsICR2YWx1ZSkKCXsKCQkkdGhpcy0+JG5hbWUgPSAkdmFsdWU7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRuYW1lKQoJewoJCWlmIChpc3NldCgkdGhpcy0+JG5hbWUpKQoJCQlyZXR1cm4gJHRoaXMtPiRuYW1lOwoKCQlyZXR1cm4gbnVsbDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gYWRkTm9kZSgkbm9kZSkKCXsKCQlpZiAoJG5vZGUgIT09IG51bGwpCgkJewoJCQlpZiAoJG5vZGUtPnN0YXJ0IDwgJHRoaXMtPnN0YXJ0KQoJCQkJJHRoaXMtPnN0YXJ0ID0gJG5vZGUtPnN0YXJ0OwoJCQlpZiAoJHRoaXMtPmVuZCA8ICRub2RlLT5lbmQpCgkJCQkkdGhpcy0+ZW5kID0gJG5vZGUtPmVuZDsKCQl9CgoJCSR0aGlzLT50cmVlTm9kZXNbXSA9ICRub2RlOwoJfQp9CgpjbGFzcyBKU1Rva2VuaXplcgp7Cglwcml2YXRlICRjdXJzb3IgPSAwOwoJcHJpdmF0ZSAkc291cmNlOwoKCXB1YmxpYyAkdG9rZW5zID0gYXJyYXkoKTsKCXB1YmxpYyAkdG9rZW5JbmRleCA9IDA7CglwdWJsaWMgJGxvb2thaGVhZCA9IDA7CglwdWJsaWMgJHNjYW5OZXdsaW5lcyA9IGZhbHNlOwoJcHVibGljICRzY2FuT3BlcmFuZCA9IHRydWU7CgoJcHVibGljICRmaWxlbmFtZTsKCXB1YmxpYyAkbGluZW5vOwoKCXByaXZhdGUgJGtleXdvcmRzID0gYXJyYXkoCgkJJ2JyZWFrJywKCQknY2FzZScsICdjYXRjaCcsICdjb25zdCcsICdjb250aW51ZScsCgkJJ2RlYnVnZ2VyJywgJ2RlZmF1bHQnLCAnZGVsZXRlJywgJ2RvJywKCQknZWxzZScsICdlbnVtJywKCQknZmFsc2UnLCAnZmluYWxseScsICdmb3InLCAnZnVuY3Rpb24nLAoJCSdpZicsICdpbicsICdpbnN0YW5jZW9mJywKCQknbmV3JywgJ251bGwnLAoJCSdyZXR1cm4nLAoJCSdzd2l0Y2gnLAoJCSd0aGlzJywgJ3Rocm93JywgJ3RydWUnLCAndHJ5JywgJ3R5cGVvZicsCgkJJ3ZhcicsICd2b2lkJywKCQknd2hpbGUnLCAnd2l0aCcKCSk7CgoJcHJpdmF0ZSAkb3BUeXBlTmFtZXMgPSBhcnJheSgKCQknOycsICcsJywgJz8nLCAnOicsICd8fCcsICcmJicsICd8JywgJ14nLAoJCScmJywgJz09PScsICc9PScsICc9JywgJyE9PScsICchPScsICc8PCcsICc8PScsCgkJJzwnLCAnPj4+JywgJz4+JywgJz49JywgJz4nLCAnKysnLCAnLS0nLCAnKycsCgkJJy0nLCAnKicsICcvJywgJyUnLCAnIScsICd+JywgJy4nLCAnWycsCgkJJ10nLCAneycsICd9JywgJygnLCAnKScsICdAKi8nCgkpOwoKCXByaXZhdGUgJGFzc2lnbk9wcyA9IGFycmF5KCd8JywgJ14nLCAnJicsICc8PCcsICc+PicsICc+Pj4nLCAnKycsICctJywgJyonLCAnLycsICclJyk7Cglwcml2YXRlICRvcFJlZ0V4cDsKCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQoJewoJCSR0aGlzLT5vcFJlZ0V4cCA9ICcjXignIC4gaW1wbG9kZSgnfCcsIGFycmF5X21hcCgncHJlZ19xdW90ZScsICR0aGlzLT5vcFR5cGVOYW1lcykpIC4gJykjJzsKCX0KCglwdWJsaWMgZnVuY3Rpb24gaW5pdCgkc291cmNlLCAkZmlsZW5hbWUgPSAnJywgJGxpbmVubyA9IDEpCgl7CgkJJHRoaXMtPnNvdXJjZSA9ICRzb3VyY2U7CgkJJHRoaXMtPmZpbGVuYW1lID0gJGZpbGVuYW1lID8gJGZpbGVuYW1lIDogJ1tpbmxpbmVdJzsKCQkkdGhpcy0+bGluZW5vID0gJGxpbmVubzsKCgkJJHRoaXMtPmN1cnNvciA9IDA7CgkJJHRoaXMtPnRva2VucyA9IGFycmF5KCk7CgkJJHRoaXMtPnRva2VuSW5kZXggPSAwOwoJCSR0aGlzLT5sb29rYWhlYWQgPSAwOwoJCSR0aGlzLT5zY2FuTmV3bGluZXMgPSBmYWxzZTsKCQkkdGhpcy0+c2Nhbk9wZXJhbmQgPSB0cnVlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRJbnB1dCgkY2h1bmtzaXplKQoJewoJCWlmICgkY2h1bmtzaXplKQoJCQlyZXR1cm4gc3Vic3RyKCR0aGlzLT5zb3VyY2UsICR0aGlzLT5jdXJzb3IsICRjaHVua3NpemUpOwoKCQlyZXR1cm4gc3Vic3RyKCR0aGlzLT5zb3VyY2UsICR0aGlzLT5jdXJzb3IpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc0RvbmUoKQoJewoJCXJldHVybiAkdGhpcy0+cGVlaygpID09IFRPS0VOX0VORDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbWF0Y2goJHR0KQoJewoJCXJldHVybiAkdGhpcy0+Z2V0KCkgPT0gJHR0IHx8ICR0aGlzLT51bmdldCgpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBtdXN0TWF0Y2goJHR0KQoJewoJICAgICAgICBpZiAoISR0aGlzLT5tYXRjaCgkdHQpKQoJCQl0aHJvdyAkdGhpcy0+bmV3U3ludGF4RXJyb3IoJ1VuZXhwZWN0ZWQgdG9rZW47IHRva2VuICcgLiAkdHQgLiAnIGV4cGVjdGVkJyk7CgoJCXJldHVybiAkdGhpcy0+Y3VycmVudFRva2VuKCk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHBlZWsoKQoJewoJCWlmICgkdGhpcy0+bG9va2FoZWFkKQoJCXsKCQkJJG5leHQgPSAkdGhpcy0+dG9rZW5zWygkdGhpcy0+dG9rZW5JbmRleCArICR0aGlzLT5sb29rYWhlYWQpICYgM107CgkJCWlmICgkdGhpcy0+c2Nhbk5ld2xpbmVzICYmICRuZXh0LT5saW5lbm8gIT0gJHRoaXMtPmxpbmVubykKCQkJCSR0dCA9IFRPS0VOX05FV0xJTkU7CgkJCWVsc2UKCQkJCSR0dCA9ICRuZXh0LT50eXBlOwoJCX0KCQllbHNlCgkJewoJCQkkdHQgPSAkdGhpcy0+Z2V0KCk7CgkJCSR0aGlzLT51bmdldCgpOwoJCX0KCgkJcmV0dXJuICR0dDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gcGVla09uU2FtZUxpbmUoKQoJewoJCSR0aGlzLT5zY2FuTmV3bGluZXMgPSB0cnVlOwoJCSR0dCA9ICR0aGlzLT5wZWVrKCk7CgkJJHRoaXMtPnNjYW5OZXdsaW5lcyA9IGZhbHNlOwoKCQlyZXR1cm4gJHR0OwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBjdXJyZW50VG9rZW4oKQoJewoJCWlmICghZW1wdHkoJHRoaXMtPnRva2VucykpCgkJCXJldHVybiAkdGhpcy0+dG9rZW5zWyR0aGlzLT50b2tlbkluZGV4XTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0KCRjaHVua3NpemUgPSAxMDAwKQoJewoJCXdoaWxlKCR0aGlzLT5sb29rYWhlYWQpCgkJewoJCQkkdGhpcy0+bG9va2FoZWFkLS07CgkJCSR0aGlzLT50b2tlbkluZGV4ID0gKCR0aGlzLT50b2tlbkluZGV4ICsgMSkgJiAzOwoJCQkkdG9rZW4gPSAkdGhpcy0+dG9rZW5zWyR0aGlzLT50b2tlbkluZGV4XTsKCQkJaWYgKCR0b2tlbi0+dHlwZSAhPSBUT0tFTl9ORVdMSU5FIHx8ICR0aGlzLT5zY2FuTmV3bGluZXMpCgkJCQlyZXR1cm4gJHRva2VuLT50eXBlOwoJCX0KCgkJJGNvbmRpdGlvbmFsX2NvbW1lbnQgPSBmYWxzZTsKCgkJLy8gc3RyaXAgd2hpdGVzcGFjZSBhbmQgY29tbWVudHMKCQl3aGlsZSh0cnVlKQoJCXsKCQkJJGlucHV0ID0gJHRoaXMtPmdldElucHV0KCRjaHVua3NpemUpOwoKCQkJLy8gd2hpdGVzcGFjZSBoYW5kbGluZzsgZ29iYmxlIHVwIFxyIGFzIHdlbGwgKGVmZmVjdGl2ZWx5IHdlIGRvbid0IGhhdmUgc3VwcG9ydCBmb3IgTUFDIG5ld2xpbmVzISkKCQkJJHJlID0gJHRoaXMtPnNjYW5OZXdsaW5lcyA/ICcvXlsgXHJcdF0rLycgOiAnL15ccysvJzsKCQkJaWYgKHByZWdfbWF0Y2goJHJlLCAkaW5wdXQsICRtYXRjaCkpCgkJCXsKCQkJCSRzcGFjZXMgPSAkbWF0Y2hbMF07CgkJCQkkc3BhY2VsZW4gPSBzdHJsZW4oJHNwYWNlcyk7CgkJCQkkdGhpcy0+Y3Vyc29yICs9ICRzcGFjZWxlbjsKCQkJCWlmICghJHRoaXMtPnNjYW5OZXdsaW5lcykKCQkJCQkkdGhpcy0+bGluZW5vICs9IHN1YnN0cl9jb3VudCgkc3BhY2VzLCAiXG4iKTsKCgkJCQlpZiAoJHNwYWNlbGVuID09ICRjaHVua3NpemUpCgkJCQkJY29udGludWU7IC8vIGNvbXBsZXRlIGNodW5rIGNvbnRhaW5lZCB3aGl0ZXNwYWNlCgoJCQkJJGlucHV0ID0gJHRoaXMtPmdldElucHV0KCRjaHVua3NpemUpOwoJCQkJaWYgKCRpbnB1dCA9PSAnJyB8fCAkaW5wdXRbMF0gIT0gJy8nKQoJCQkJCWJyZWFrOwoJCQl9CgoJCQkvLyBDb21tZW50cwoJCQlpZiAoIXByZWdfbWF0Y2goJy9eXC8oPzpcKihAKD86Y2Nfb258aWZ8ZWxpZnxlbHNlfGVuZCkpPy4qP1wqXC98XC9bXlxuXSopL3MnLCAkaW5wdXQsICRtYXRjaCkpCgkJCXsKCQkJCWlmICghJGNodW5rc2l6ZSkKCQkJCQlicmVhazsKCgkJCQkvLyByZXRyeSB3aXRoIGEgZnVsbCBjaHVuayBmZXRjaDsgdGhpcyBhbHNvIHByZXZlbnRzIGJyZWFrYWdlIG9mIGxvbmcgcmVndWxhciBleHByZXNzaW9ucyAod2hpY2ggd2lsbCBuZXZlciBtYXRjaCBhIGNvbW1lbnQpCgkJCQkkY2h1bmtzaXplID0gbnVsbDsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgY29uZGl0aW9uYWwgKEpTY3JpcHQpIGNvbW1lbnQKCQkJaWYgKCFlbXB0eSgkbWF0Y2hbMV0pKQoJCQl7CgkJCQkkbWF0Y2hbMF0gPSAnLyonIC4gJG1hdGNoWzFdOwoJCQkJJGNvbmRpdGlvbmFsX2NvbW1lbnQgPSB0cnVlOwoJCQkJYnJlYWs7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+Y3Vyc29yICs9IHN0cmxlbigkbWF0Y2hbMF0pOwoJCQkJJHRoaXMtPmxpbmVubyArPSBzdWJzdHJfY291bnQoJG1hdGNoWzBdLCAiXG4iKTsKCQkJfQoJCX0KCgkJaWYgKCRpbnB1dCA9PSAnJykKCQl7CgkJCSR0dCA9IFRPS0VOX0VORDsKCQkJJG1hdGNoID0gYXJyYXkoJycpOwoJCX0KCQllbHNlaWYgKCRjb25kaXRpb25hbF9jb21tZW50KQoJCXsKCQkJJHR0ID0gVE9LRU5fQ09ORENPTU1FTlRfU1RBUlQ7CgkJfQoJCWVsc2UKCQl7CgkJCXN3aXRjaCAoJGlucHV0WzBdKQoJCQl7CgkJCQljYXNlICcwJzoKCQkJCQkvLyBoZXhhZGVjaW1hbAoJCQkJCWlmICgoJGlucHV0WzFdID09ICd4JyB8fCAkaW5wdXRbMV0gPT0gJ1gnKSAmJiBwcmVnX21hdGNoKCcvXjB4WzAtOWEtZl0rL2knLCAkaW5wdXQsICRtYXRjaCkpCgkJCQkJewoJCQkJCQkkdHQgPSBUT0tFTl9OVU1CRVI7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCS8vIEZBTEwgVEhST1VHSAoKCQkJCWNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzoKCQkJCWNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOgoJCQkJCS8vIHNob3VsZCBhbHdheXMgbWF0Y2gKCQkJCQlwcmVnX21hdGNoKCcvXlxkKyg/OlwuXGQqKT8oPzpbZUVdWy0rXT9cZCspPy8nLCAkaW5wdXQsICRtYXRjaCk7CgkJCQkJJHR0ID0gVE9LRU5fTlVNQkVSOwoJCQkJYnJlYWs7CgoJCQkJY2FzZSAiJyI6CgkJCQkJaWYgKHByZWdfbWF0Y2goJy9eXCcoPzpbXlxcXFxcJ1xyXG5dKyt8XFxcXCg/Oi58XHI/XG4pKSpcJy8nLCAkaW5wdXQsICRtYXRjaCkpCgkJCQkJewoJCQkJCQkkdHQgPSBUT0tFTl9TVFJJTkc7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCWlmICgkY2h1bmtzaXplKQoJCQkJCQkJcmV0dXJuICR0aGlzLT5nZXQobnVsbCk7IC8vIHJldHJ5IHdpdGggYSBmdWxsIGNodW5rIGZldGNoCgoJCQkJCQl0aHJvdyAkdGhpcy0+bmV3U3ludGF4RXJyb3IoJ1VudGVybWluYXRlZCBzdHJpbmcgbGl0ZXJhbCcpOwoJCQkJCX0KCQkJCWJyZWFrOwoKCQkJCWNhc2UgJyInOgoJCQkJCWlmIChwcmVnX21hdGNoKCcvXiIoPzpbXlxcXFwiXHJcbl0rK3xcXFxcKD86Lnxccj9cbikpKiIvJywgJGlucHV0LCAkbWF0Y2gpKQoJCQkJCXsKCQkJCQkJJHR0ID0gVE9LRU5fU1RSSU5HOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQlpZiAoJGNodW5rc2l6ZSkKCQkJCQkJCXJldHVybiAkdGhpcy0+Z2V0KG51bGwpOyAvLyByZXRyeSB3aXRoIGEgZnVsbCBjaHVuayBmZXRjaAoKCQkJCQkJdGhyb3cgJHRoaXMtPm5ld1N5bnRheEVycm9yKCdVbnRlcm1pbmF0ZWQgc3RyaW5nIGxpdGVyYWwnKTsKCQkJCQl9CgkJCQlicmVhazsKCgkJCQljYXNlICcvJzoKCQkJCQlpZiAoJHRoaXMtPnNjYW5PcGVyYW5kICYmIHByZWdfbWF0Y2goJy9eXC8oKD86XFxcXC58XFsoPzpcXFxcLnxbXlxdXSkqXF18W15cL10pKylcLyhbZ2lteV0qKS8nLCAkaW5wdXQsICRtYXRjaCkpCgkJCQkJewoJCQkJCQkkdHQgPSBUT0tFTl9SRUdFWFA7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCS8vIEZBTEwgVEhST1VHSAoKCQkJCWNhc2UgJ3wnOgoJCQkJY2FzZSAnXic6CgkJCQljYXNlICcmJzoKCQkJCWNhc2UgJzwnOgoJCQkJY2FzZSAnPic6CgkJCQljYXNlICcrJzoKCQkJCWNhc2UgJy0nOgoJCQkJY2FzZSAnKic6CgkJCQljYXNlICclJzoKCQkJCWNhc2UgJz0nOgoJCQkJY2FzZSAnISc6CgkJCQkJLy8gc2hvdWxkIGFsd2F5cyBtYXRjaAoJCQkJCXByZWdfbWF0Y2goJHRoaXMtPm9wUmVnRXhwLCAkaW5wdXQsICRtYXRjaCk7CgkJCQkJJG9wID0gJG1hdGNoWzBdOwoJCQkJCWlmIChpbl9hcnJheSgkb3AsICR0aGlzLT5hc3NpZ25PcHMpICYmICRpbnB1dFtzdHJsZW4oJG9wKV0gPT0gJz0nKQoJCQkJCXsKCQkJCQkJJHR0ID0gT1BfQVNTSUdOOwoJCQkJCQkkbWF0Y2hbMF0gLj0gJz0nOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJewoJCQkJCQkkdHQgPSAkb3A7CgkJCQkJCWlmICgkdGhpcy0+c2Nhbk9wZXJhbmQpCgkJCQkJCXsKCQkJCQkJCWlmICgkb3AgPT0gT1BfUExVUykKCQkJCQkJCQkkdHQgPSBPUF9VTkFSWV9QTFVTOwoJCQkJCQkJZWxzZWlmICgkb3AgPT0gT1BfTUlOVVMpCgkJCQkJCQkJJHR0ID0gT1BfVU5BUllfTUlOVVM7CgkJCQkJCX0KCQkJCQkJJG9wID0gbnVsbDsKCQkJCQl9CgkJCQlicmVhazsKCgkJCQljYXNlICcuJzoKCQkJCQlpZiAocHJlZ19tYXRjaCgnL15cLlxkKyg/OltlRV1bLStdP1xkKyk/LycsICRpbnB1dCwgJG1hdGNoKSkKCQkJCQl7CgkJCQkJCSR0dCA9IFRPS0VOX05VTUJFUjsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJLy8gRkFMTCBUSFJPVUdICgoJCQkJY2FzZSAnOyc6CgkJCQljYXNlICcsJzoKCQkJCWNhc2UgJz8nOgoJCQkJY2FzZSAnOic6CgkJCQljYXNlICd+JzoKCQkJCWNhc2UgJ1snOgoJCQkJY2FzZSAnXSc6CgkJCQljYXNlICd7JzoKCQkJCWNhc2UgJ30nOgoJCQkJY2FzZSAnKCc6CgkJCQljYXNlICcpJzoKCQkJCQkvLyB0aGVzZSBhcmUgYWxsIHNpbmdsZQoJCQkJCSRtYXRjaCA9IGFycmF5KCRpbnB1dFswXSk7CgkJCQkJJHR0ID0gJGlucHV0WzBdOwoJCQkJYnJlYWs7CgoJCQkJY2FzZSAnQCc6CgkJCQkJLy8gY2hlY2sgZW5kIG9mIGNvbmRpdGlvbmFsIGNvbW1lbnQKCQkJCQlpZiAoc3Vic3RyKCRpbnB1dCwgMCwgMykgPT0gJ0AqLycpCgkJCQkJewoJCQkJCQkkbWF0Y2ggPSBhcnJheSgnQCovJyk7CgkJCQkJCSR0dCA9IFRPS0VOX0NPTkRDT01NRU5UX0VORDsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCQl0aHJvdyAkdGhpcy0+bmV3U3ludGF4RXJyb3IoJ0lsbGVnYWwgdG9rZW4nKTsKCQkJCWJyZWFrOwoKCQkJCWNhc2UgIlxuIjoKCQkJCQlpZiAoJHRoaXMtPnNjYW5OZXdsaW5lcykKCQkJCQl7CgkJCQkJCSRtYXRjaCA9IGFycmF5KCJcbiIpOwoJCQkJCQkkdHQgPSBUT0tFTl9ORVdMSU5FOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJCXRocm93ICR0aGlzLT5uZXdTeW50YXhFcnJvcignSWxsZWdhbCB0b2tlbicpOwoJCQkJYnJlYWs7CgoJCQkJZGVmYXVsdDoKCQkJCQkvLyBGSVhNRTogYWRkIHN1cHBvcnQgZm9yIHVuaWNvZGUgYW5kIHVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlIFx1SEhISAoJCQkJCWlmIChwcmVnX21hdGNoKCcvXlskXHddKy8nLCAkaW5wdXQsICRtYXRjaCkpCgkJCQkJewoJCQkJCQkkdHQgPSBpbl9hcnJheSgkbWF0Y2hbMF0sICR0aGlzLT5rZXl3b3JkcykgPyAkbWF0Y2hbMF0gOiBUT0tFTl9JREVOVElGSUVSOwoJCQkJCX0KCQkJCQllbHNlCgkJCQkJCXRocm93ICR0aGlzLT5uZXdTeW50YXhFcnJvcignSWxsZWdhbCB0b2tlbicpOwoJCQl9CgkJfQoKCQkkdGhpcy0+dG9rZW5JbmRleCA9ICgkdGhpcy0+dG9rZW5JbmRleCArIDEpICYgMzsKCgkJaWYgKCFpc3NldCgkdGhpcy0+dG9rZW5zWyR0aGlzLT50b2tlbkluZGV4XSkpCgkJCSR0aGlzLT50b2tlbnNbJHRoaXMtPnRva2VuSW5kZXhdID0gbmV3IEpTVG9rZW4oKTsKCgkJJHRva2VuID0gJHRoaXMtPnRva2Vuc1skdGhpcy0+dG9rZW5JbmRleF07CgkJJHRva2VuLT50eXBlID0gJHR0OwoKCQlpZiAoJHR0ID09IE9QX0FTU0lHTikKCQkJJHRva2VuLT5hc3NpZ25PcCA9ICRvcDsKCgkJJHRva2VuLT5zdGFydCA9ICR0aGlzLT5jdXJzb3I7CgoJCSR0b2tlbi0+dmFsdWUgPSAkbWF0Y2hbMF07CgkJJHRoaXMtPmN1cnNvciArPSBzdHJsZW4oJG1hdGNoWzBdKTsKCgkJJHRva2VuLT5lbmQgPSAkdGhpcy0+Y3Vyc29yOwoJCSR0b2tlbi0+bGluZW5vID0gJHRoaXMtPmxpbmVubzsKCgkJcmV0dXJuICR0dDsKCX0KCglwdWJsaWMgZnVuY3Rpb24gdW5nZXQoKQoJewoJCWlmICgrKyR0aGlzLT5sb29rYWhlYWQgPT0gNCkKCQkJdGhyb3cgJHRoaXMtPm5ld1N5bnRheEVycm9yKCdQQU5JQzogdG9vIG11Y2ggbG9va2FoZWFkIScpOwoKCQkkdGhpcy0+dG9rZW5JbmRleCA9ICgkdGhpcy0+dG9rZW5JbmRleCAtIDEpICYgMzsKCX0KCglwdWJsaWMgZnVuY3Rpb24gbmV3U3ludGF4RXJyb3IoJG0pCgl7CgkJcmV0dXJuIG5ldyBFeGNlcHRpb24oJ1BhcnNlIGVycm9yOiAnIC4gJG0gLiAnIGluIGZpbGUgXCcnIC4gJHRoaXMtPmZpbGVuYW1lIC4gJ1wnIG9uIGxpbmUgJyAuICR0aGlzLT5saW5lbm8pOwoJfQp9CgpjbGFzcyBKU1Rva2VuCnsKCXB1YmxpYyAkdHlwZTsKCXB1YmxpYyAkdmFsdWU7CglwdWJsaWMgJHN0YXJ0OwoJcHVibGljICRlbmQ7CglwdWJsaWMgJGxpbmVubzsKCXB1YmxpYyAkYXNzaWduT3A7Cn0K]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeSAgCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KIAovKioKICogTWluaWZ5IC0gQ29tYmluZXMsIG1pbmlmaWVzLCBhbmQgY2FjaGVzIEphdmFTY3JpcHQgYW5kIENTUyBmaWxlcyBvbiBkZW1hbmQuCiAqCiAqIFNlZSBSRUFETUUgZm9yIHVzYWdlIGluc3RydWN0aW9ucyAoZm9yIG5vdykuCiAqCiAqIFRoaXMgbGlicmFyeSB3YXMgaW5zcGlyZWQgYnkge0BsaW5rIG1haWx0bzpmbGFzaGtvdEBtYWlsLnJ1IGpzY3NzY29tcCBieSBNYXhpbSBNYXJ0eW55dWt9CiAqIGFuZCBieSB0aGUgYXJ0aWNsZSB7QGxpbmsgaHR0cDovL3d3dy5odW5sb2NrLmNvbS9ibG9ncy9TdXBlcmNoYXJnZWRfSmF2YXNjcmlwdCAiU3VwZXJjaGFyZ2VkIEphdmFTY3JpcHQiIGJ5IFBhdHJpY2sgSHVubG9ja30uCiAqCiAqIFJlcXVpcmVzIFBIUCA1LjEuMC4KICogVGVzdGVkIG9uIFBIUCA1LjEuNi4KICoKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgUnlhbiBHcm92ZSA8cnlhbkB3b25rby5jb20+CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKiBAY29weXJpZ2h0IDIwMDggUnlhbiBHcm92ZSwgU3RlcGhlbiBDbGF5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBAbGljZW5zZSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwICBOZXcgQlNEIExpY2Vuc2UKICogQGxpbmsgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL21pbmlmeS8KICovCmNsYXNzIE1pbmlmeSB7CiAgICAKICAgIGNvbnN0IFZFUlNJT04gPSAnMi4xLjUnOwogICAgY29uc3QgVFlQRV9DU1MgPSAndGV4dC9jc3MnOwogICAgY29uc3QgVFlQRV9IVE1MID0gJ3RleHQvaHRtbCc7CiAgICAvLyB0aGVyZSBpcyBzb21lIGRlYmF0ZSBvdmVyIHRoZSBpZGVhbCBKUyBDb250ZW50LVR5cGUsIGJ1dCB0aGlzIGlzIHRoZQogICAgLy8gQXBhY2hlIGRlZmF1bHQgYW5kIHdoYXQgWWFob28hIHVzZXMuLgogICAgY29uc3QgVFlQRV9KUyA9ICdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnOwogICAgY29uc3QgVVJMX0RFQlVHID0gJ2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9taW5pZnkvd2lraS9EZWJ1Z2dpbmcnOwogICAgCiAgICAvKioKICAgICAqIEhvdyBtYW55IGhvdXJzIGJlaGluZCBhcmUgdGhlIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWVzIG9mIHVwbG9hZGVkIGZpbGVzPwogICAgICogCiAgICAgKiBJZiB5b3UgdXBsb2FkIGZpbGVzIGZyb20gV2luZG93cyB0byBhIG5vbi1XaW5kb3dzIHNlcnZlciwgV2luZG93cyBtYXkgcmVwb3J0CiAgICAgKiBpbmNvcnJlY3QgbXRpbWVzIGZvciB0aGUgZmlsZXMuIEltbWVkaWF0ZWx5IGFmdGVyIG1vZGlmeWluZyBhbmQgdXBsb2FkaW5nIGEgCiAgICAgKiBmaWxlLCB1c2UgdGhlIHRvdWNoIGNvbW1hbmQgdG8gdXBkYXRlIHRoZSBtdGltZSBvbiB0aGUgc2VydmVyLiBJZiB0aGUgbXRpbWUgCiAgICAgKiBqdW1wcyBhaGVhZCBieSBhIG51bWJlciBvZiBob3Vycywgc2V0IHRoaXMgdmFyaWFibGUgdG8gdGhhdCBudW1iZXIuIElmIHRoZSBtdGltZSAKICAgICAqIG1vdmVzIGJhY2ssIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCiAgICAgKgogICAgICogQHZhciBpbnQgJHVwbG9hZGVySG91cnNCZWhpbmQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyAkdXBsb2FkZXJIb3Vyc0JlaGluZCA9IDA7CiAgICAKICAgIC8qKgogICAgICogSWYgdGhpcyBzdHJpbmcgaXMgbm90IGVtcHR5IEFORCB0aGUgc2VydmUoKSBvcHRpb24gJ2J1YmJsZUNzc0ltcG9ydHMnIGlzCiAgICAgKiBOT1Qgc2V0LCB0aGVuIHNlcnZlKCkgd2lsbCBjaGVjayBDU1MgZmlsZXMgZm9yIEBpbXBvcnQgZGVjbGFyYXRpb25zIHRoYXQKICAgICAqIGFwcGVhciB0b28gbGF0ZSBpbiB0aGUgY29tYmluZWQgc3R5bGVzaGVldC4gSWYgZm91bmQsIHNlcnZlKCkgd2lsbCBwcmVwZW5kCiAgICAgKiB0aGUgb3V0cHV0IHdpdGggdGhpcyB3YXJuaW5nLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nICRpbXBvcnRXYXJuaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGltcG9ydFdhcm5pbmcgPSAiLyogU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9taW5pZnkvd2lraS9Db21tb25Qcm9ibGVtcyNAaW1wb3J0c19jYW5fYXBwZWFyX2luX2ludmFsaWRfbG9jYXRpb25zX2luX2NvbWJpbmVkX0NTU19maWxlcyAqL1xuIjsKCiAgICAvKioKICAgICAqIEhhcyB0aGUgRE9DVU1FTlRfUk9PVCBiZWVuIHNldCBpbiB1c2VyIGNvZGU/CiAgICAgKiAKICAgICAqIEB2YXIgYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljICRpc0RvY1Jvb3RTZXQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIFNwZWNpZnkgYSBjYWNoZSBvYmplY3QgKHdpdGggaWRlbnRpY2FsIGludGVyZmFjZSBhcyBNaW5pZnlfQ2FjaGVfRmlsZSkgb3IKICAgICAqIGEgcGF0aCB0byB1c2Ugd2l0aCBNaW5pZnlfQ2FjaGVfRmlsZS4KICAgICAqIAogICAgICogSWYgbm90IGNhbGxlZCwgTWluaWZ5IHdpbGwgbm90IHVzZSBhIGNhY2hlIGFuZCwgZm9yIGVhY2ggMjAwIHJlc3BvbnNlLCB3aWxsIAogICAgICogbmVlZCB0byByZWNvbWJpbmUgZmlsZXMsIG1pbmlmeSBhbmQgZW5jb2RlIHRoZSBvdXRwdXQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRjYWNoZSBvYmplY3Qgd2l0aCBpZGVudGljYWwgaW50ZXJmYWNlIGFzIE1pbmlmeV9DYWNoZV9GaWxlIG9yCiAgICAgKiBhIGRpcmVjdG9yeSBwYXRoLCBvciBudWxsIHRvIGRpc2FibGUgY2FjaGluZy4gKGRlZmF1bHQgPSAnJykKICAgICAqIAogICAgICogQHBhcmFtIGJvb2wgJGZpbGVMb2NraW5nIChkZWZhdWx0ID0gdHJ1ZSkgVGhpcyBvbmx5IGFwcGxpZXMgaWYgdGhlIGZpcnN0CiAgICAgKiBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBudWxsCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0Q2FjaGUoJGNhY2hlID0gJycsICRmaWxlTG9ja2luZyA9IHRydWUpCiAgICB7CiAgICAgICAgaWYgKGlzX3N0cmluZygkY2FjaGUpKSB7CiAgICAgICAgICAgIHNlbGY6OiRfY2FjaGUgPSBuZXcgTWluaWZ5X0NhY2hlX0ZpbGUoJGNhY2hlLCAkZmlsZUxvY2tpbmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNlbGY6OiRfY2FjaGUgPSAkY2FjaGU7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvKioKICAgICAqIFNlcnZlIGEgcmVxdWVzdCBmb3IgYSBtaW5pZmllZCBmaWxlLiAKICAgICAqIAogICAgICogSGVyZSBhcmUgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBkZWZhdWx0cyBpbiB0aGUgYmFzZSBjb250cm9sbGVyOgogICAgICogCiAgICAgKiAnaXNQdWJsaWMnIDogc2VuZCAicHVibGljIiBpbnN0ZWFkIG9mICJwcml2YXRlIiBpbiBDYWNoZS1Db250cm9sIAogICAgICogaGVhZGVycywgYWxsb3dpbmcgc2hhcmVkIGNhY2hlcyB0byBjYWNoZSB0aGUgb3V0cHV0LiAoZGVmYXVsdCB0cnVlKQogICAgICogCiAgICAgKiAncXVpZXQnIDogc2V0IHRvIHRydWUgdG8gaGF2ZSBzZXJ2ZSgpIHJldHVybiBhbiBhcnJheSByYXRoZXIgdGhhbiBzZW5kaW5nCiAgICAgKiBhbnkgaGVhZGVycy9vdXRwdXQgKGRlZmF1bHQgZmFsc2UpCiAgICAgKiAKICAgICAqICdlbmNvZGVPdXRwdXQnIDogc2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgY29udGVudCBlbmNvZGluZywgYW5kIG5vdCBzZW5kCiAgICAgKiB0aGUgVmFyeSBoZWFkZXIgKGRlZmF1bHQgdHJ1ZSkKICAgICAqIAogICAgICogJ2VuY29kZU1ldGhvZCcgOiBnZW5lcmFsbHkgeW91IHNob3VsZCBsZXQgdGhpcyBiZSBkZXRlcm1pbmVkIGJ5IAogICAgICogSFRUUF9FbmNvZGVyIChsZWF2ZSBudWxsKSwgYnV0IHlvdSBjYW4gZm9yY2UgYSBwYXJ0aWN1bGFyIGVuY29kaW5nCiAgICAgKiB0byBiZSByZXR1cm5lZCwgYnkgc2V0dGluZyB0aGlzIHRvICdnemlwJyBvciAnJyAobm8gZW5jb2RpbmcpCiAgICAgKiAKICAgICAqICdlbmNvZGVMZXZlbCcgOiBsZXZlbCBvZiBlbmNvZGluZyBjb21wcmVzc2lvbiAoMCB0byA5LCBkZWZhdWx0IDkpCiAgICAgKiAKICAgICAqICdjb250ZW50VHlwZUNoYXJzZXQnIDogYXBwZW5kZWQgdG8gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgc2VudC4gU2V0IHRvIGEgZmFsc2V5CiAgICAgKiB2YWx1ZSB0byByZW1vdmUuIChkZWZhdWx0ICd1dGYtOCcpICAKICAgICAqIAogICAgICogJ21heEFnZScgOiBzZXQgdGhpcyB0byB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdGhlIGNsaWVudCBzaG91bGQgdXNlIGl0cyBjYWNoZQogICAgICogYmVmb3JlIHJldmFsaWRhdGluZyB3aXRoIHRoZSBzZXJ2ZXIuIFRoaXMgc2V0cyBDYWNoZS1Db250cm9sOiBtYXgtYWdlIGFuZCB0aGUKICAgICAqIEV4cGlyZXMgaGVhZGVyLiBVbmxpa2UgdGhlIG9sZCAnc2V0RXhwaXJlcycgc2V0dGluZywgdGhpcyBzZXR0aW5nIHdpbGwgTk9UCiAgICAgKiBwcmV2ZW50IGNvbmRpdGlvbmFsIEdFVHMuIE5vdGUgdGhpcyBoYXMgbm90aGluZyB0byBkbyB3aXRoIHNlcnZlci1zaWRlIGNhY2hpbmcuCiAgICAgKiAKICAgICAqICdyZXdyaXRlQ3NzVXJpcycgOiBJZiB0cnVlLCBzZXJ2ZSgpIHdpbGwgYXV0b21hdGljYWxseSBzZXQgdGhlICdjdXJyZW50RGlyJwogICAgICogbWluaWZpZXIgb3B0aW9uIHRvIGVuYWJsZSBVUkkgcmV3cml0aW5nIGluIENTUyBmaWxlcyAoZGVmYXVsdCB0cnVlKQogICAgICogCiAgICAgKiAnYnViYmxlQ3NzSW1wb3J0cycgOiBJZiB0cnVlLCBhbGwgQGltcG9ydCBkZWNsYXJhdGlvbnMgaW4gY29tYmluZWQgQ1NTCiAgICAgKiBmaWxlcyB3aWxsIGJlIG1vdmUgdG8gdGhlIHRvcC4gTm90ZSB0aGlzIG1heSBhbHRlciBlZmZlY3RpdmUgQ1NTIHZhbHVlcwogICAgICogZHVlIHRvIGEgY2hhbmdlIGluIG9yZGVyLiAoZGVmYXVsdCBmYWxzZSkKICAgICAqIAogICAgICogJ2RlYnVnJyA6IHNldCB0byB0cnVlIHRvIG1pbmlmeSBhbGwgc291cmNlcyB3aXRoIHRoZSAnTGluZXMnIGNvbnRyb2xsZXIsIHdoaWNoCiAgICAgKiBlYXNlcyB0aGUgZGVidWdnaW5nIG9mIGNvbWJpbmVkIGZpbGVzLiBUaGlzIGFsc28gcHJldmVudHMgMzA0IHJlc3BvbnNlcy4KICAgICAqIEBzZWUgTWluaWZ5X0xpbmVzOjptaW5pZnkoKQogICAgICogCiAgICAgKiAnbWluaWZpZXJzJyA6IHRvIG92ZXJyaWRlIE1pbmlmeSdzIGRlZmF1bHQgY2hvaWNlIG9mIG1pbmlmaWVyIGZ1bmN0aW9uIGZvciAKICAgICAqIGEgcGFydGljdWxhciBjb250ZW50LXR5cGUsIHNwZWNpZnkgeW91ciBjYWxsYmFjayB1bmRlciB0aGUga2V5IG9mIHRoZSAKICAgICAqIGNvbnRlbnQtdHlwZToKICAgICAqIDxjb2RlPgogICAgICogLy8gY2FsbCBjdXN0b21Dc3NNaW5pZmllcigkY3NzKSBmb3IgYWxsIENTUyBtaW5pZmljYXRpb24KICAgICAqICRvcHRpb25zWydtaW5pZmllcnMnXVtNaW5pZnk6OlRZUEVfQ1NTXSA9ICdjdXN0b21Dc3NNaW5pZmllcic7CiAgICAgKiAKICAgICAqIC8vIGRvbid0IG1pbmlmeSBKYXZhc2NyaXB0IGF0IGFsbAogICAgICogJG9wdGlvbnNbJ21pbmlmaWVycyddW01pbmlmeTo6VFlQRV9KU10gPSAnJzsKICAgICAqIDwvY29kZT4KICAgICAqIAogICAgICogJ21pbmlmaWVyT3B0aW9ucycgOiB0byBzZW5kIG9wdGlvbnMgdG8gdGhlIG1pbmlmaWVyIGZ1bmN0aW9uLCBzcGVjaWZ5IHlvdXIgb3B0aW9ucwogICAgICogdW5kZXIgdGhlIGtleSBvZiB0aGUgY29udGVudC10eXBlLiBFLmcuIFRvIHNlbmQgdGhlIENTUyBtaW5pZmllciBhbiBvcHRpb246IAogICAgICogPGNvZGU+CiAgICAgKiAvLyBnaXZlIENTUyBtaW5pZmllciBhcnJheSgnb3B0aW9uTmFtZScgPT4gJ29wdGlvblZhbHVlJykgYXMgMm5kIGFyZ3VtZW50IAogICAgICogJG9wdGlvbnNbJ21pbmlmaWVyT3B0aW9ucyddW01pbmlmeTo6VFlQRV9DU1NdWydvcHRpb25OYW1lJ10gPSAnb3B0aW9uVmFsdWUnOwogICAgICogPC9jb2RlPgogICAgICogCiAgICAgKiAnY29udGVudFR5cGUnIDogKG9wdGlvbmFsKSB0aGlzIGlzIG9ubHkgbmVlZGVkIGlmIHlvdXIgZmlsZSBleHRlbnNpb24gaXMgbm90IAogICAgICoganMvY3NzL2h0bWwuIFRoZSBnaXZlbiBjb250ZW50LXR5cGUgd2lsbCBiZSBzZW50IHJlZ2FyZGxlc3Mgb2Ygc291cmNlIGZpbGUKICAgICAqIGV4dGVuc2lvbiwgc28gdGhpcyBzaG91bGQgbm90IGJlIHVzZWQgaW4gYSBHcm91cHMgY29uZmlnIHdpdGggb3RoZXIKICAgICAqIEphdmFzY3JpcHQvQ1NTIGZpbGVzLgogICAgICogCiAgICAgKiBBbnkgY29udHJvbGxlciBvcHRpb25zIGFyZSBkb2N1bWVudGVkIGluIHRoYXQgY29udHJvbGxlcidzIHNldHVwU291cmNlcygpIG1ldGhvZC4KICAgICAqIAogICAgICogQHBhcmFtIG1peGVkICRjb250cm9sbGVyIGluc3RhbmNlIG9mIHN1YmNsYXNzIG9mIE1pbmlmeV9Db250cm9sbGVyX0Jhc2Ugb3Igc3RyaW5nCiAgICAgKiBuYW1lIG9mIGNvbnRyb2xsZXIuIEUuZy4gJ0ZpbGVzJwogICAgICogCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgY29udHJvbGxlci9zZXJ2ZSBvcHRpb25zCiAgICAgKiAKICAgICAqIEByZXR1cm4gbnVsbHxhcnJheSBpZiB0aGUgJ3F1aWV0JyBvcHRpb24gaXMgc2V0IHRvIHRydWUsIGFuIGFycmF5CiAgICAgKiB3aXRoIGtleXMgInN1Y2Nlc3MiIChib29sKSwgInN0YXR1c0NvZGUiIChpbnQpLCAiY29udGVudCIgKHN0cmluZyksIGFuZAogICAgICogImhlYWRlcnMiIChhcnJheSkuCiAgICAgKgogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXJ2ZSgkY29udHJvbGxlciwgJG9wdGlvbnMgPSBhcnJheSgpKQogICAgewogICAgICAgIGlmICghIHNlbGY6OiRpc0RvY1Jvb3RTZXQgJiYgMCA9PT0gc3RyaXBvcyhQSFBfT1MsICd3aW4nKSkgewogICAgICAgICAgICBzZWxmOjpzZXREb2NSb290KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfc3RyaW5nKCRjb250cm9sbGVyKSkgewogICAgICAgICAgICAvLyBtYWtlICRjb250cm9sbGVyIGludG8gb2JqZWN0CiAgICAgICAgICAgICRjbGFzcyA9ICdNaW5pZnlfQ29udHJvbGxlcl8nIC4gJGNvbnRyb2xsZXI7CiAgICAgICAgICAgICRjb250cm9sbGVyID0gbmV3ICRjbGFzcygpOwogICAgICAgICAgICAvKiBAdmFyIE1pbmlmeV9Db250cm9sbGVyX0Jhc2UgJGNvbnRyb2xsZXIgKi8KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gc2V0IHVwIGNvbnRyb2xsZXIgc291cmNlcyBhbmQgbWl4IHJlbWFpbmluZyBvcHRpb25zIHdpdGgKICAgICAgICAvLyBjb250cm9sbGVyIGRlZmF1bHRzCiAgICAgICAgJG9wdGlvbnMgPSAkY29udHJvbGxlci0+c2V0dXBTb3VyY2VzKCRvcHRpb25zKTsKICAgICAgICAkb3B0aW9ucyA9ICRjb250cm9sbGVyLT5hbmFseXplU291cmNlcygkb3B0aW9ucyk7CiAgICAgICAgc2VsZjo6JF9vcHRpb25zID0gJGNvbnRyb2xsZXItPm1peEluRGVmYXVsdE9wdGlvbnMoJG9wdGlvbnMpOwogICAgICAgIAogICAgICAgIC8vIGNoZWNrIHJlcXVlc3QgdmFsaWRpdHkKICAgICAgICBpZiAoISAkY29udHJvbGxlci0+c291cmNlcykgewogICAgICAgICAgICAvLyBpbnZhbGlkIHJlcXVlc3QhCiAgICAgICAgICAgIGlmICghIHNlbGY6OiRfb3B0aW9uc1sncXVpZXQnXSkgewogICAgICAgICAgICAgICAgc2VsZjo6X2Vycm9yRXhpdChzZWxmOjokX29wdGlvbnNbJ2JhZFJlcXVlc3RIZWFkZXInXSwgc2VsZjo6VVJMX0RFQlVHKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGxpc3QoLCRzdGF0dXNDb2RlKSA9IGV4cGxvZGUoJyAnLCBzZWxmOjokX29wdGlvbnNbJ2JhZFJlcXVlc3RIZWFkZXInXSk7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IGZhbHNlCiAgICAgICAgICAgICAgICAgICAgLCdzdGF0dXNDb2RlJyA9PiAoaW50KSRzdGF0dXNDb2RlCiAgICAgICAgICAgICAgICAgICAgLCdjb250ZW50JyA9PiAnJwogICAgICAgICAgICAgICAgICAgICwnaGVhZGVycycgPT4gYXJyYXkoKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBzZWxmOjokX2NvbnRyb2xsZXIgPSAkY29udHJvbGxlcjsKICAgICAgICAKICAgICAgICBpZiAoc2VsZjo6JF9vcHRpb25zWydkZWJ1ZyddKSB7CiAgICAgICAgICAgIHNlbGY6Ol9zZXR1cERlYnVnKCRjb250cm9sbGVyLT5zb3VyY2VzKTsKICAgICAgICAgICAgc2VsZjo6JF9vcHRpb25zWydtYXhBZ2UnXSA9IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGRldGVybWluZSBlbmNvZGluZwogICAgICAgIGlmIChzZWxmOjokX29wdGlvbnNbJ2VuY29kZU91dHB1dCddKSB7CiAgICAgICAgICAgICRzZW5kVmFyeSA9IHRydWU7CiAgICAgICAgICAgIGlmIChzZWxmOjokX29wdGlvbnNbJ2VuY29kZU1ldGhvZCddICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAvLyBjb250cm9sbGVyIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQgdGhpcwogICAgICAgICAgICAgICAgJGNvbnRlbnRFbmNvZGluZyA9IHNlbGY6OiRfb3B0aW9uc1snZW5jb2RlTWV0aG9kJ107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBzbmlmZiByZXF1ZXN0IGhlYWRlcgogICAgICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHdoYXQgdGhlIGNsaWVudCBhY2NlcHRzLCAkY29udGVudEVuY29kaW5nIG1heSBiZQogICAgICAgICAgICAgICAgLy8gJ3gtZ3ppcCcgd2hpbGUgb3VyIGludGVybmFsIGVuY29kZU1ldGhvZCBpcyAnZ3ppcCcuIENhbGxpbmcKICAgICAgICAgICAgICAgIC8vIGdldEFjY2VwdGVkRW5jb2RpbmcoZmFsc2UsIGZhbHNlKSBsZWF2ZXMgb3V0IGNvbXByZXNzIGFuZCBkZWZsYXRlIGFzIG9wdGlvbnMuCiAgICAgICAgICAgICAgICBsaXN0KHNlbGY6OiRfb3B0aW9uc1snZW5jb2RlTWV0aG9kJ10sICRjb250ZW50RW5jb2RpbmcpID0gSFRUUF9FbmNvZGVyOjpnZXRBY2NlcHRlZEVuY29kaW5nKGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAkc2VuZFZhcnkgPSAhIEhUVFBfRW5jb2Rlcjo6aXNCdWdneUllKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZWxmOjokX29wdGlvbnNbJ2VuY29kZU1ldGhvZCddID0gJyc7IC8vIGlkZW50aXR5IChubyBlbmNvZGluZykKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gY2hlY2sgY2xpZW50IGNhY2hlCiAgICAgICAgJGNnT3B0aW9ucyA9IGFycmF5KAogICAgICAgICAgICAnbGFzdE1vZGlmaWVkVGltZScgPT4gc2VsZjo6JF9vcHRpb25zWydsYXN0TW9kaWZpZWRUaW1lJ10KICAgICAgICAgICAgLCdpc1B1YmxpYycgPT4gc2VsZjo6JF9vcHRpb25zWydpc1B1YmxpYyddCiAgICAgICAgICAgICwnZW5jb2RpbmcnID0+IHNlbGY6OiRfb3B0aW9uc1snZW5jb2RlTWV0aG9kJ10KICAgICAgICApOwogICAgICAgIGlmIChzZWxmOjokX29wdGlvbnNbJ21heEFnZSddID4gMCkgewogICAgICAgICAgICAkY2dPcHRpb25zWydtYXhBZ2UnXSA9IHNlbGY6OiRfb3B0aW9uc1snbWF4QWdlJ107CiAgICAgICAgfSBlbHNlaWYgKHNlbGY6OiRfb3B0aW9uc1snZGVidWcnXSkgewogICAgICAgICAgICAkY2dPcHRpb25zWydpbnZhbGlkYXRlJ10gPSB0cnVlOwogICAgICAgIH0KICAgICAgICAkY2cgPSBuZXcgSFRUUF9Db25kaXRpb25hbEdldCgkY2dPcHRpb25zKTsKICAgICAgICBpZiAoJGNnLT5jYWNoZUlzVmFsaWQpIHsKICAgICAgICAgICAgLy8gY2xpZW50J3MgY2FjaGUgaXMgdmFsaWQKICAgICAgICAgICAgaWYgKCEgc2VsZjo6JF9vcHRpb25zWydxdWlldCddKSB7CiAgICAgICAgICAgICAgICAkY2ctPnNlbmRIZWFkZXJzKCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnID0+IHRydWUKICAgICAgICAgICAgICAgICAgICAsJ3N0YXR1c0NvZGUnID0+IDMwNAogICAgICAgICAgICAgICAgICAgICwnY29udGVudCcgPT4gJycKICAgICAgICAgICAgICAgICAgICAsJ2hlYWRlcnMnID0+ICRjZy0+Z2V0SGVhZGVycygpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gY2xpZW50IHdpbGwgbmVlZCBvdXRwdXQKICAgICAgICAgICAgJGhlYWRlcnMgPSAkY2ctPmdldEhlYWRlcnMoKTsKICAgICAgICAgICAgdW5zZXQoJGNnKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHNlbGY6OiRfb3B0aW9uc1snY29udGVudFR5cGUnXSA9PT0gc2VsZjo6VFlQRV9DU1MKICAgICAgICAgICAgJiYgc2VsZjo6JF9vcHRpb25zWydyZXdyaXRlQ3NzVXJpcyddKSB7CiAgICAgICAgICAgIGZvcmVhY2goJGNvbnRyb2xsZXItPnNvdXJjZXMgYXMgJGtleSA9PiAkc291cmNlKSB7CiAgICAgICAgICAgICAgICBpZiAoJHNvdXJjZS0+ZmlsZXBhdGggCiAgICAgICAgICAgICAgICAgICAgJiYgIWlzc2V0KCRzb3VyY2UtPm1pbmlmeU9wdGlvbnNbJ2N1cnJlbnREaXInXSkKICAgICAgICAgICAgICAgICAgICAmJiAhaXNzZXQoJHNvdXJjZS0+bWluaWZ5T3B0aW9uc1sncHJlcGVuZFJlbGF0aXZlUGF0aCddKQogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZS0+bWluaWZ5T3B0aW9uc1snY3VycmVudERpciddID0gZGlybmFtZSgkc291cmNlLT5maWxlcGF0aCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gY2hlY2sgc2VydmVyIGNhY2hlCiAgICAgICAgaWYgKG51bGwgIT09IHNlbGY6OiRfY2FjaGUgJiYgISBzZWxmOjokX29wdGlvbnNbJ2RlYnVnJ10pIHsKICAgICAgICAgICAgLy8gdXNpbmcgY2FjaGUKICAgICAgICAgICAgLy8gdGhlIGdvYWwgaXMgdG8gdXNlIG9ubHkgdGhlIGNhY2hlIG1ldGhvZHMgdG8gc25pZmYgdGhlIGxlbmd0aCBhbmQgCiAgICAgICAgICAgIC8vIG91dHB1dCB0aGUgY29udGVudCwgYXMgdGhleSBkbyBub3QgcmVxdWlyZSBldmVyIGxvYWRpbmcgdGhlIGZpbGUgaW50bwogICAgICAgICAgICAvLyBtZW1vcnkuCiAgICAgICAgICAgICRjYWNoZUlkID0gc2VsZjo6X2dldENhY2hlSWQoKTsKICAgICAgICAgICAgJGZ1bGxDYWNoZUlkID0gKHNlbGY6OiRfb3B0aW9uc1snZW5jb2RlTWV0aG9kJ10pCiAgICAgICAgICAgICAgICA/ICRjYWNoZUlkIC4gJy5neicKICAgICAgICAgICAgICAgIDogJGNhY2hlSWQ7CiAgICAgICAgICAgIC8vIGNoZWNrIGNhY2hlIGZvciB2YWxpZCBlbnRyeQogICAgICAgICAgICAkY2FjaGVJc1JlYWR5ID0gc2VsZjo6JF9jYWNoZS0+aXNWYWxpZCgkZnVsbENhY2hlSWQsIHNlbGY6OiRfb3B0aW9uc1snbGFzdE1vZGlmaWVkVGltZSddKTsgCiAgICAgICAgICAgIGlmICgkY2FjaGVJc1JlYWR5KSB7CiAgICAgICAgICAgICAgICAkY2FjaGVDb250ZW50TGVuZ3RoID0gc2VsZjo6JF9jYWNoZS0+Z2V0U2l6ZSgkZnVsbENhY2hlSWQpOyAgICAKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlICYgY2FjaGUgY29udGVudAogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IHNlbGY6Ol9jb21iaW5lTWluaWZ5KCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmOjokX2NvbnRyb2xsZXItPmxvZygkZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoISBzZWxmOjokX29wdGlvbnNbJ3F1aWV0J10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6X2Vycm9yRXhpdChzZWxmOjokX29wdGlvbnNbJ2Vycm9ySGVhZGVyJ10sIHNlbGY6OlVSTF9ERUJVRyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2VsZjo6JF9jYWNoZS0+c3RvcmUoJGNhY2hlSWQsICRjb250ZW50KTsKICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykgJiYgc2VsZjo6JF9vcHRpb25zWydlbmNvZGVNZXRob2QnXSkgewogICAgICAgICAgICAgICAgICAgIHNlbGY6OiRfY2FjaGUtPnN0b3JlKCRjYWNoZUlkIC4gJy5neicsIGd6ZW5jb2RlKCRjb250ZW50LCBzZWxmOjokX29wdGlvbnNbJ2VuY29kZUxldmVsJ10pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIG5vIGNhY2hlCiAgICAgICAgICAgICRjYWNoZUlzUmVhZHkgPSBmYWxzZTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRjb250ZW50ID0gc2VsZjo6X2NvbWJpbmVNaW5pZnkoKTsKICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICBzZWxmOjokX2NvbnRyb2xsZXItPmxvZygkZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgIGlmICghIHNlbGY6OiRfb3B0aW9uc1sncXVpZXQnXSkgewogICAgICAgICAgICAgICAgICAgIHNlbGY6Ol9lcnJvckV4aXQoc2VsZjo6JF9vcHRpb25zWydlcnJvckhlYWRlciddLCBzZWxmOjpVUkxfREVCVUcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgJGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEgJGNhY2hlSXNSZWFkeSAmJiBzZWxmOjokX29wdGlvbnNbJ2VuY29kZU1ldGhvZCddKSB7CiAgICAgICAgICAgIC8vIHN0aWxsIG5lZWQgdG8gZW5jb2RlCiAgICAgICAgICAgICRjb250ZW50ID0gZ3plbmNvZGUoJGNvbnRlbnQsIHNlbGY6OiRfb3B0aW9uc1snZW5jb2RlTGV2ZWwnXSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGFkZCBoZWFkZXJzCiAgICAgICAgJGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSAkY2FjaGVJc1JlYWR5CiAgICAgICAgICAgID8gJGNhY2hlQ29udGVudExlbmd0aAogICAgICAgICAgICA6ICgoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSAmJiAoKGludClpbmlfZ2V0KCdtYnN0cmluZy5mdW5jX292ZXJsb2FkJykgJiAyKSkKICAgICAgICAgICAgICAgID8gbWJfc3RybGVuKCRjb250ZW50LCAnOGJpdCcpCiAgICAgICAgICAgICAgICA6IHN0cmxlbigkY29udGVudCkKICAgICAgICAgICAgKTsKICAgICAgICAkaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBzZWxmOjokX29wdGlvbnNbJ2NvbnRlbnRUeXBlQ2hhcnNldCddCiAgICAgICAgICAgID8gc2VsZjo6JF9vcHRpb25zWydjb250ZW50VHlwZSddIC4gJzsgY2hhcnNldD0nIC4gc2VsZjo6JF9vcHRpb25zWydjb250ZW50VHlwZUNoYXJzZXQnXQogICAgICAgICAgICA6IHNlbGY6OiRfb3B0aW9uc1snY29udGVudFR5cGUnXTsKICAgICAgICBpZiAoc2VsZjo6JF9vcHRpb25zWydlbmNvZGVNZXRob2QnXSAhPT0gJycpIHsKICAgICAgICAgICAgJGhlYWRlcnNbJ0NvbnRlbnQtRW5jb2RpbmcnXSA9ICRjb250ZW50RW5jb2Rpbmc7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxmOjokX29wdGlvbnNbJ2VuY29kZU91dHB1dCddICYmICRzZW5kVmFyeSkgewogICAgICAgICAgICAkaGVhZGVyc1snVmFyeSddID0gJ0FjY2VwdC1FbmNvZGluZyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoISBzZWxmOjokX29wdGlvbnNbJ3F1aWV0J10pIHsKICAgICAgICAgICAgLy8gb3V0cHV0IGhlYWRlcnMgJiBjb250ZW50CiAgICAgICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRuYW1lID0+ICR2YWwpIHsKICAgICAgICAgICAgICAgIGhlYWRlcigkbmFtZSAuICc6ICcgLiAkdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGNhY2hlSXNSZWFkeSkgewogICAgICAgICAgICAgICAgc2VsZjo6JF9jYWNoZS0+ZGlzcGxheSgkZnVsbENhY2hlSWQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWNobyAkY29udGVudDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgICAgICdzdWNjZXNzJyA9PiB0cnVlCiAgICAgICAgICAgICAgICAsJ3N0YXR1c0NvZGUnID0+IDIwMAogICAgICAgICAgICAgICAgLCdjb250ZW50JyA9PiAkY2FjaGVJc1JlYWR5CiAgICAgICAgICAgICAgICAgICAgPyBzZWxmOjokX2NhY2hlLT5mZXRjaCgkZnVsbENhY2hlSWQpCiAgICAgICAgICAgICAgICAgICAgOiAkY29udGVudAogICAgICAgICAgICAgICAgLCdoZWFkZXJzJyA9PiAkaGVhZGVycwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBSZXR1cm4gY29tYmluZWQgbWluaWZpZWQgY29udGVudCBmb3IgYSBzZXQgb2Ygc291cmNlcwogICAgICoKICAgICAqIE5vIGludGVybmFsIGNhY2hpbmcgd2lsbCBiZSB1c2VkIGFuZCB0aGUgY29udGVudCB3aWxsIG5vdCBiZSBIVFRQIGVuY29kZWQuCiAgICAgKiAKICAgICAqIEBwYXJhbSBhcnJheSAkc291cmNlcyBhcnJheSBvZiBmaWxlcGF0aHMgYW5kL29yIE1pbmlmeV9Tb3VyY2Ugb2JqZWN0cwogICAgICogCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgKG9wdGlvbmFsKSBhcnJheSBvZiBvcHRpb25zIGZvciBzZXJ2ZS4gQnkgZGVmYXVsdAogICAgICogdGhlc2UgYXJlIGFscmVhZHkgc2V0OiBxdWlldCA9IHRydWUsIGVuY29kZU1ldGhvZCA9ICcnLCBsYXN0TW9kaWZpZWRUaW1lID0gMC4KICAgICAqIAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21iaW5lKCRzb3VyY2VzLCAkb3B0aW9ucyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJGNhY2hlID0gc2VsZjo6JF9jYWNoZTsKICAgICAgICBzZWxmOjokX2NhY2hlID0gbnVsbDsKICAgICAgICAkb3B0aW9ucyA9IGFycmF5X21lcmdlKGFycmF5KAogICAgICAgICAgICAnZmlsZXMnID0+IChhcnJheSkkc291cmNlcwogICAgICAgICAgICAsJ3F1aWV0JyA9PiB0cnVlCiAgICAgICAgICAgICwnZW5jb2RlTWV0aG9kJyA9PiAnJwogICAgICAgICAgICAsJ2xhc3RNb2RpZmllZFRpbWUnID0+IDAKICAgICAgICApLCAkb3B0aW9ucyk7CiAgICAgICAgJG91dCA9IHNlbGY6OnNlcnZlKCdGaWxlcycsICRvcHRpb25zKTsKICAgICAgICBzZWxmOjokX2NhY2hlID0gJGNhY2hlOwogICAgICAgIHJldHVybiAkb3V0Wydjb250ZW50J107CiAgICB9CiAgICAKICAgIC8qKgogICAgICogU2V0ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uIE9uIElJUywgdGhlIHZhbHVlIGlzIGNyZWF0ZWQgZnJvbSBTQ1JJUFRfRklMRU5BTUUgYW5kIFNDUklQVF9OQU1FLgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkb2NSb290IHZhbHVlIHRvIHVzZSBmb3IgRE9DVU1FTlRfUk9PVAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldERvY1Jvb3QoJGRvY1Jvb3QgPSAnJykKICAgIHsKICAgICAgICBzZWxmOjokaXNEb2NSb290U2V0ID0gdHJ1ZTsKICAgICAgICBpZiAoJGRvY1Jvb3QpIHsKICAgICAgICAgICAgJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSA9ICRkb2NSb290OwogICAgICAgIH0gZWxzZWlmIChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10pCiAgICAgICAgICAgICAgICAgICYmIDAgPT09IHN0cnBvcygkX1NFUlZFUlsnU0VSVkVSX1NPRlRXQVJFJ10sICdNaWNyb3NvZnQtSUlTLycpKSB7CiAgICAgICAgICAgICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gPSBzdWJzdHIoCiAgICAgICAgICAgICAgICAkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10KICAgICAgICAgICAgICAgICwwCiAgICAgICAgICAgICAgICAsc3RybGVuKCRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSkgLSBzdHJsZW4oJF9TRVJWRVJbJ1NDUklQVF9OQU1FJ10pKTsKICAgICAgICAgICAgJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSA9IHJ0cmltKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10sICdcXCcpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBBbnkgTWluaWZ5X0NhY2hlXyogb2JqZWN0IG9yIG51bGwgKGkuZS4gbm8gc2VydmVyIGNhY2hlIGlzIHVzZWQpCiAgICAgKgogICAgICogQHZhciBNaW5pZnlfQ2FjaGVfRmlsZQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX2NhY2hlID0gbnVsbDsKICAgIAogICAgLyoqCiAgICAgKiBBY3RpdmUgY29udHJvbGxlciBmb3IgY3VycmVudCByZXF1ZXN0CiAgICAgKgogICAgICogQHZhciBNaW5pZnlfQ29udHJvbGxlcl9CYXNlCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJF9jb250cm9sbGVyID0gbnVsbDsKICAgIAogICAgLyoqCiAgICAgKiBPcHRpb25zIGZvciBjdXJyZW50IHJlcXVlc3QKICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJF9vcHRpb25zID0gbnVsbDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhlYWRlcgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVybAogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIF9lcnJvckV4aXQoJGhlYWRlciwgJHVybCkKICAgIHsKICAgICAgICAkdXJsID0gaHRtbHNwZWNpYWxjaGFycygkdXJsLCBFTlRfUVVPVEVTKTsKICAgICAgICBsaXN0KCwkaDEpID0gZXhwbG9kZSgnICcsICRoZWFkZXIsIDIpOwogICAgICAgICRoMSA9IGh0bWxzcGVjaWFsY2hhcnMoJGgxKTsKICAgICAgICAvLyBGYXN0Q0dJIGVudmlyb25tZW50cyByZXF1aXJlIDNyZCBhcmcgdG8gaGVhZGVyKCkgdG8gYmUgc2V0CiAgICAgICAgbGlzdCgsICRjb2RlKSA9IGV4cGxvZGUoJyAnLCAkaGVhZGVyLCAzKTsKICAgICAgICBoZWFkZXIoJGhlYWRlciwgdHJ1ZSwgJGNvZGUpOwogICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnKTsKICAgICAgICBlY2hvICI8aDE+JGgxPC9oMT4iOwogICAgICAgIGVjaG8gIjxwPlBsZWFzZSBzZWUgPGEgaHJlZj0nJHVybCc+JHVybDwvYT4uPC9wPiI7CiAgICAgICAgZXhpdCgpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHVwIHNvdXJjZXMgdG8gdXNlIE1pbmlmeV9MaW5lcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc291cmNlcyBNaW5pZnlfU291cmNlIGluc3RhbmNlcwogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIF9zZXR1cERlYnVnKCRzb3VyY2VzKQogICAgewogICAgICAgIGZvcmVhY2ggKCRzb3VyY2VzIGFzICRzb3VyY2UpIHsKICAgICAgICAgICAgJHNvdXJjZS0+bWluaWZpZXIgPSBhcnJheSgnTWluaWZ5X0xpbmVzJywgJ21pbmlmeScpOwogICAgICAgICAgICAkaWQgPSAkc291cmNlLT5nZXRJZCgpOwogICAgICAgICAgICAkc291cmNlLT5taW5pZnlPcHRpb25zID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnaWQnID0+IChpc19maWxlKCRpZCkgPyBiYXNlbmFtZSgkaWQpIDogJGlkKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBDb21iaW5lcyBzb3VyY2VzIGFuZCBtaW5pZmllcyB0aGUgcmVzdWx0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gX2NvbWJpbmVNaW5pZnkoKQogICAgewogICAgICAgICR0eXBlID0gc2VsZjo6JF9vcHRpb25zWydjb250ZW50VHlwZSddOyAvLyBlYXNlIHJlYWRhYmlsaXR5CiAgICAgICAgCiAgICAgICAgLy8gd2hlbiBjb21iaW5pbmcgc2NyaXB0cywgbWFrZSBzdXJlIGFsbCBzdGF0ZW1lbnRzIHNlcGFyYXRlZCBhbmQKICAgICAgICAvLyB0cmFpbGluZyBzaW5nbGUgbGluZSBjb21tZW50IGlzIHRlcm1pbmF0ZWQKICAgICAgICAkaW1wbG9kZVNlcGFyYXRvciA9ICgkdHlwZSA9PT0gc2VsZjo6VFlQRV9KUykKICAgICAgICAgICAgPyAiXG47IgogICAgICAgICAgICA6ICcnOwogICAgICAgIC8vIGFsbG93IHRoZSB1c2VyIHRvIHBhc3MgYSBwYXJ0aWN1bGFyIGFycmF5IG9mIG9wdGlvbnMgdG8gZWFjaAogICAgICAgIC8vIG1pbmlmaWVyIChkZXNpZ25hdGVkIGJ5IHR5cGUpLiBzb3VyY2Ugb2JqZWN0cyBtYXkgc3RpbGwgb3ZlcnJpZGUKICAgICAgICAvLyB0aGVzZQogICAgICAgICRkZWZhdWx0T3B0aW9ucyA9IGlzc2V0KHNlbGY6OiRfb3B0aW9uc1snbWluaWZpZXJPcHRpb25zJ11bJHR5cGVdKQogICAgICAgICAgICA/IHNlbGY6OiRfb3B0aW9uc1snbWluaWZpZXJPcHRpb25zJ11bJHR5cGVdCiAgICAgICAgICAgIDogYXJyYXkoKTsKICAgICAgICAvLyBpZiBtaW5pZmllciBub3Qgc2V0LCBkZWZhdWx0IGlzIG5vIG1pbmlmaWNhdGlvbi4gc291cmNlIG9iamVjdHMKICAgICAgICAvLyBtYXkgc3RpbGwgb3ZlcnJpZGUgdGhpcwogICAgICAgICRkZWZhdWx0TWluaWZpZXIgPSBpc3NldChzZWxmOjokX29wdGlvbnNbJ21pbmlmaWVycyddWyR0eXBlXSkKICAgICAgICAgICAgPyBzZWxmOjokX29wdGlvbnNbJ21pbmlmaWVycyddWyR0eXBlXQogICAgICAgICAgICA6IGZhbHNlOwoKICAgICAgICAvLyBwcm9jZXNzIGdyb3VwcyBvZiBzb3VyY2VzIHdpdGggaWRlbnRpY2FsIG1pbmlmaWVycy9vcHRpb25zCiAgICAgICAgJGNvbnRlbnQgPSBhcnJheSgpOwogICAgICAgICRpID0gMDsKICAgICAgICAkbCA9IGNvdW50KHNlbGY6OiRfY29udHJvbGxlci0+c291cmNlcyk7CiAgICAgICAgJGdyb3VwVG9Qcm9jZXNzVG9nZXRoZXIgPSBhcnJheSgpOwogICAgICAgICRsYXN0TWluaWZpZXIgPSBudWxsOwogICAgICAgICRsYXN0T3B0aW9ucyA9IG51bGw7CiAgICAgICAgZG8gewogICAgICAgICAgICAvLyBnZXQgbmV4dCBzb3VyY2UKICAgICAgICAgICAgJHNvdXJjZSA9IG51bGw7CiAgICAgICAgICAgIGlmICgkaSA8ICRsKSB7CiAgICAgICAgICAgICAgICAkc291cmNlID0gc2VsZjo6JF9jb250cm9sbGVyLT5zb3VyY2VzWyRpXTsKICAgICAgICAgICAgICAgIC8qIEB2YXIgTWluaWZ5X1NvdXJjZSAkc291cmNlICovCiAgICAgICAgICAgICAgICAkc291cmNlQ29udGVudCA9ICRzb3VyY2UtPmdldENvbnRlbnQoKTsKCiAgICAgICAgICAgICAgICAvLyBhbGxvdyB0aGUgc291cmNlIHRvIG92ZXJyaWRlIG91ciBtaW5pZmllciBhbmQgb3B0aW9ucwogICAgICAgICAgICAgICAgJG1pbmlmaWVyID0gKG51bGwgIT09ICRzb3VyY2UtPm1pbmlmaWVyKQogICAgICAgICAgICAgICAgICAgID8gJHNvdXJjZS0+bWluaWZpZXIKICAgICAgICAgICAgICAgICAgICA6ICRkZWZhdWx0TWluaWZpZXI7CiAgICAgICAgICAgICAgICAkb3B0aW9ucyA9IChudWxsICE9PSAkc291cmNlLT5taW5pZnlPcHRpb25zKQogICAgICAgICAgICAgICAgICAgID8gYXJyYXlfbWVyZ2UoJGRlZmF1bHRPcHRpb25zLCAkc291cmNlLT5taW5pZnlPcHRpb25zKQogICAgICAgICAgICAgICAgICAgIDogJGRlZmF1bHRPcHRpb25zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGRvIHdlIG5lZWQgdG8gcHJvY2VzcyBvdXIgZ3JvdXAgcmlnaHQgbm93PwogICAgICAgICAgICBpZiAoJGkgPiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHllcywgd2UgaGF2ZSBhdCBsZWFzdCB0aGUgZmlyc3QgZ3JvdXAgcG9wdWxhdGVkCiAgICAgICAgICAgICAgICAmJiAoCiAgICAgICAgICAgICAgICAgICAgISAkc291cmNlICAgICAgICAgICAgICAgICAgICAgICAgLy8geWVzLCB3ZSByYW4gb3V0IG9mIHNvdXJjZXMKICAgICAgICAgICAgICAgICAgICB8fCAkdHlwZSA9PT0gc2VsZjo6VFlQRV9DU1MgICAgICAvLyB5ZXMsIHRvIHByb2Nlc3MgQ1NTIGluZGl2aWR1YWxseSAoYXZvaWRpbmcgUENSRSBidWdzL2xpbWl0cykKICAgICAgICAgICAgICAgICAgICB8fCAkbWluaWZpZXIgIT09ICRsYXN0TWluaWZpZXIgICAvLyB5ZXMsIG1pbmlmaWVyIGNoYW5nZWQKICAgICAgICAgICAgICAgICAgICB8fCAkb3B0aW9ucyAhPT0gJGxhc3RPcHRpb25zKSAgICAvLyB5ZXMsIG9wdGlvbnMgY2hhbmdlZAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvLyBtaW5pZnkgcHJldmlvdXMgc291cmNlcyB3aXRoIGxhc3Qgc2V0dGluZ3MKICAgICAgICAgICAgICAgICRpbXBsb2RlZCA9IGltcGxvZGUoJGltcGxvZGVTZXBhcmF0b3IsICRncm91cFRvUHJvY2Vzc1RvZ2V0aGVyKTsKICAgICAgICAgICAgICAgICRncm91cFRvUHJvY2Vzc1RvZ2V0aGVyID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgIGlmICgkbGFzdE1pbmlmaWVyKSB7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRbXSA9IGNhbGxfdXNlcl9mdW5jKCRsYXN0TWluaWZpZXIsICRpbXBsb2RlZCwgJGxhc3RPcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRXhjZXB0aW9uIGluIG1pbmlmaWVyOiAiIC4gJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkY29udGVudFtdID0gJGltcGxvZGVkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGFkZCBjb250ZW50IHRvIHRoZSBncm91cAogICAgICAgICAgICBpZiAoJHNvdXJjZSkgewogICAgICAgICAgICAgICAgJGdyb3VwVG9Qcm9jZXNzVG9nZXRoZXJbXSA9ICRzb3VyY2VDb250ZW50OwogICAgICAgICAgICAgICAgJGxhc3RNaW5pZmllciA9ICRtaW5pZmllcjsKICAgICAgICAgICAgICAgICRsYXN0T3B0aW9ucyA9ICRvcHRpb25zOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRpKys7CiAgICAgICAgfSB3aGlsZSAoJHNvdXJjZSk7CgogICAgICAgICRjb250ZW50ID0gaW1wbG9kZSgkaW1wbG9kZVNlcGFyYXRvciwgJGNvbnRlbnQpOwogICAgICAgIAogICAgICAgIGlmICgkdHlwZSA9PT0gc2VsZjo6VFlQRV9DU1MgJiYgZmFsc2UgIT09IHN0cnBvcygkY29udGVudCwgJ0BpbXBvcnQnKSkgewogICAgICAgICAgICAkY29udGVudCA9IHNlbGY6Ol9oYW5kbGVDc3NJbXBvcnRzKCRjb250ZW50KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gZG8gYW55IHBvc3QtcHJvY2Vzc2luZyAoZXNwLiBmb3IgZWRpdGluZyBidWlsZCBVUklzKQogICAgICAgIGlmIChzZWxmOjokX29wdGlvbnNbJ3Bvc3Rwcm9jZXNzb3JSZXF1aXJlJ10pIHsKICAgICAgICAgICAgcmVxdWlyZV9vbmNlIHNlbGY6OiRfb3B0aW9uc1sncG9zdHByb2Nlc3NvclJlcXVpcmUnXTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbGY6OiRfb3B0aW9uc1sncG9zdHByb2Nlc3NvciddKSB7CiAgICAgICAgICAgICRjb250ZW50ID0gY2FsbF91c2VyX2Z1bmMoc2VsZjo6JF9vcHRpb25zWydwb3N0cHJvY2Vzc29yJ10sICRjb250ZW50LCAkdHlwZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkY29udGVudDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBNYWtlIGEgdW5pcXVlIGNhY2hlIGlkIGZvciBmb3IgdGhpcyByZXF1ZXN0LgogICAgICogCiAgICAgKiBBbnkgc2V0dGluZ3MgdGhhdCBjb3VsZCBhZmZlY3Qgb3V0cHV0IGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gIAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHByZWZpeAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gX2dldENhY2hlSWQoJHByZWZpeCA9ICdtaW5pZnknKQogICAgewogICAgICAgICRuYW1lID0gcHJlZ19yZXBsYWNlKCcvW15hLXpBLVowLTlcXC49XyxdLycsICcnLCBzZWxmOjokX2NvbnRyb2xsZXItPnNlbGVjdGlvbklkKTsKICAgICAgICAkbmFtZSA9IHByZWdfcmVwbGFjZSgnL1xcLisvJywgJy4nLCAkbmFtZSk7CiAgICAgICAgJG5hbWUgPSBzdWJzdHIoJG5hbWUsIDAsIDIwMCAtIDM0IC0gc3RybGVuKCRwcmVmaXgpKTsKICAgICAgICAkbWQ1ID0gbWQ1KHNlcmlhbGl6ZShhcnJheSgKICAgICAgICAgICAgTWluaWZ5X1NvdXJjZTo6Z2V0RGlnZXN0KHNlbGY6OiRfY29udHJvbGxlci0+c291cmNlcykKICAgICAgICAgICAgLHNlbGY6OiRfb3B0aW9uc1snbWluaWZpZXJzJ10gCiAgICAgICAgICAgICxzZWxmOjokX29wdGlvbnNbJ21pbmlmaWVyT3B0aW9ucyddCiAgICAgICAgICAgICxzZWxmOjokX29wdGlvbnNbJ3Bvc3Rwcm9jZXNzb3InXQogICAgICAgICAgICAsc2VsZjo6JF9vcHRpb25zWydidWJibGVDc3NJbXBvcnRzJ10KICAgICAgICAgICAgLHNlbGY6OlZFUlNJT04KICAgICAgICApKSk7CiAgICAgICAgcmV0dXJuICJ7JHByZWZpeH1feyRuYW1lfV97JG1kNX0iOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEJ1YmJsZSBDU1MgQGltcG9ydHMgdG8gdGhlIHRvcCBvciBwcmVwZW5kIGEgd2FybmluZyBpZiBhbiBpbXBvcnQgaXMgZGV0ZWN0ZWQgbm90IGF0IHRoZSB0b3AuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY3NzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBfaGFuZGxlQ3NzSW1wb3J0cygkY3NzKQogICAgewogICAgICAgIGlmIChzZWxmOjokX29wdGlvbnNbJ2J1YmJsZUNzc0ltcG9ydHMnXSkgewogICAgICAgICAgICAvLyBidWJibGUgQ1NTIGltcG9ydHMKICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJy9AaW1wb3J0Lio/Oy8nLCAkY3NzLCAkaW1wb3J0cyk7CiAgICAgICAgICAgICRjc3MgPSBpbXBsb2RlKCcnLCAkaW1wb3J0c1swXSkgLiBwcmVnX3JlcGxhY2UoJy9AaW1wb3J0Lio/Oy8nLCAnJywgJGNzcyk7CiAgICAgICAgfSBlbHNlIGlmICgnJyAhPT0gc2VsZjo6JGltcG9ydFdhcm5pbmcpIHsKICAgICAgICAgICAgLy8gcmVtb3ZlIGNvbW1lbnRzIHNvIHdlIGRvbid0IG1pc3Rha2UgeyBpbiBhIGNvbW1lbnQgYXMgYSBibG9jawogICAgICAgICAgICAkbm9Db21tZW50Q3NzID0gcHJlZ19yZXBsYWNlKCdAL1xcKltcXHNcXFNdKj9cXCovQCcsICcnLCAkY3NzKTsKICAgICAgICAgICAgJGxhc3RJbXBvcnRQb3MgPSBzdHJycG9zKCRub0NvbW1lbnRDc3MsICdAaW1wb3J0Jyk7CiAgICAgICAgICAgICRmaXJzdEJsb2NrUG9zID0gc3RycG9zKCRub0NvbW1lbnRDc3MsICd7Jyk7CiAgICAgICAgICAgIGlmIChmYWxzZSAhPT0gJGxhc3RJbXBvcnRQb3MKICAgICAgICAgICAgICAgICYmIGZhbHNlICE9PSAkZmlyc3RCbG9ja1BvcwogICAgICAgICAgICAgICAgJiYgJGZpcnN0QmxvY2tQb3MgPCAkbGFzdEltcG9ydFBvcwogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIC8vIHsgYXBwZWFycyBiZWZvcmUgQGltcG9ydCA6IHByZXBlbmQgd2FybmluZwogICAgICAgICAgICAgICAgJGNzcyA9IHNlbGY6OiRpbXBvcnRXYXJuaW5nIC4gJGNzczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGNzczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/Minify/Build.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9CdWlsZCAgCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KCi8qKgogKiBNYWludGFpbiBhIHNpbmdsZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIGZvciBhIGdyb3VwIG9mIE1pbmlmeSBzb3VyY2VzIHRvCiAqIGFsbG93IHVzZSBvZiBmYXIgb2ZmIEV4cGlyZXMgaGVhZGVycyBpbiBNaW5pZnkuCiAqIAogKiA8Y29kZT4KICogLy8gaW4gY29uZmlnIGZpbGUKICogJGdyb3VwU291cmNlcyA9IGFycmF5KAogKiAgICdqcycgPT4gYXJyYXkoJ2ZpbGUxLmpzJywgJ2ZpbGUyLmpzJykKICogICAsJ2NzcycgPT4gYXJyYXkoJ2ZpbGUxLmNzcycsICdmaWxlMi5jc3MnLCAnZmlsZTMuY3NzJykKICogKQogKiAKICogLy8gZHVyaW5nIEhUTUwgZ2VuZXJhdGlvbgogKiAkanNCdWlsZCA9IG5ldyBNaW5pZnlfQnVpbGQoJGdyb3VwU291cmNlc1snanMnXSk7CiAqICRjc3NCdWlsZCA9IG5ldyBNaW5pZnlfQnVpbGQoJGdyb3VwU291cmNlc1snY3NzJ10pOwogKiAKICogJHNjcmlwdCA9ICI8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSciCiAqICAgICAuICRqc0J1aWxkLT51cmkoJy9taW4ucGhwL2pzJykgLiAiJz48L3NjcmlwdD4iOwogKiAkbGluayA9ICI8bGluayByZWw9J3N0eWxlc2hlZXQnIHR5cGU9J3RleHQvY3NzJyBocmVmPSciCiAqICAgICAuICRjc3NCdWlsZC0+dXJpKCcvbWluLnBocC9jc3MnKSAuICInPiI7CiAqIAogKiAvLyBpbiBtaW4ucGhwCiAqIE1pbmlmeTo6c2VydmUoJ0dyb3VwcycsIGFycmF5KAogKiAgICdncm91cHMnID0+ICRncm91cFNvdXJjZXMKICogICAsJ3NldEV4cGlyZXMnID0+ICh0aW1lKCkgKyA4NjQwMCAqIDM2NSkKICogKSk7CiAqIDwvY29kZT4KICogCiAqIEBwYWNrYWdlIE1pbmlmeQogKiBAYXV0aG9yIFN0ZXBoZW4gQ2xheSA8c3RldmVAbXJjbGF5Lm9yZz4KICovCmNsYXNzIE1pbmlmeV9CdWlsZCB7CiAgICAKICAgIC8qKgogICAgICogTGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiBhbGwgZmlsZXMgaW4gdGhlIGJ1aWxkCiAgICAgKiAKICAgICAqIEB2YXIgaW50IAogICAgICovCiAgICBwdWJsaWMgJGxhc3RNb2RpZmllZCA9IDA7CiAgICAKICAgIC8qKgogICAgICogU3RyaW5nIHRvIHVzZSBhcyBhbXBlcnNhbmQgaW4gdXJpKCkuIFNldCB0aGlzIHRvICcmJyBpZgogICAgICogeW91IGFyZSBub3QgSFRNTC1lc2NhcGluZyBVUklzLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGFtcGVyc2FuZCA9ICcmYW1wOyc7CiAgICAKICAgIC8qKgogICAgICogR2V0IGEgdGltZS1zdGFtcGVkIFVSSQogICAgICogCiAgICAgKiA8Y29kZT4KICAgICAqIGVjaG8gJGItPnVyaSgnL3NpdGUuanMnKTsKICAgICAqIC8vIG91dHB1dHMgIi9zaXRlLmpzPzE2NzgyNDIiCiAgICAgKiAKICAgICAqIGVjaG8gJGItPnVyaSgnL3NjcmlwdGFjdWxvdXMuanM/bG9hZD1lZmZlY3RzJyk7CiAgICAgKiAvLyBvdXRwdXRzICIvc2NyaXB0YWN1bG91cy5qcz9sb2FkPWVmZmVjdHMmYW1wMTY3ODI0MiIKICAgICAqIDwvY29kZT4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkKICAgICAqIEBwYXJhbSBib29sZWFuICRmb3JjZUFtcGVyc2FuZCAoZGVmYXVsdCA9IGZhbHNlKSBGb3JjZSB0aGUgdXNlIG9mIGFtcGVyc2FuZCB0byAKICAgICAqIGFwcGVuZCB0aGUgdGltZXN0YW1wIHRvIHRoZSBVUkkuCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdXJpKCR1cmksICRmb3JjZUFtcGVyc2FuZCA9IGZhbHNlKSB7CiAgICAgICAgJHNlcCA9ICgkZm9yY2VBbXBlcnNhbmQgfHwgc3RycG9zKCR1cmksICc/JykgIT09IGZhbHNlKQogICAgICAgICAgICA/IHNlbGY6OiRhbXBlcnNhbmQKICAgICAgICAgICAgOiAnPyc7CiAgICAgICAgcmV0dXJuICJ7JHVyaX17JHNlcH17JHRoaXMtPmxhc3RNb2RpZmllZH0iOwogICAgfQoKCS8qKgogICAgICogQ3JlYXRlIGEgYnVpbGQgb2JqZWN0CiAgICAgKiAKICAgICAqIEBwYXJhbSBhcnJheSAkc291cmNlcyBhcnJheSBvZiBNaW5pZnlfU291cmNlIG9iamVjdHMgYW5kL29yIGZpbGUgcGF0aHMKICAgICAqIAogICAgICogQHJldHVybiBudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc291cmNlcykgCiAgICB7CiAgICAgICAgJG1heCA9IDA7CiAgICAgICAgZm9yZWFjaCAoKGFycmF5KSRzb3VyY2VzIGFzICRzb3VyY2UpIHsKICAgICAgICAgICAgaWYgKCRzb3VyY2UgaW5zdGFuY2VvZiBNaW5pZnlfU291cmNlKSB7CiAgICAgICAgICAgICAgICAkbWF4ID0gbWF4KCRtYXgsICRzb3VyY2UtPmxhc3RNb2RpZmllZCk7CiAgICAgICAgICAgIH0gZWxzZWlmIChpc19zdHJpbmcoJHNvdXJjZSkpIHsKICAgICAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJHNvdXJjZSwgJy8vJykpIHsKICAgICAgICAgICAgICAgICAgICAkc291cmNlID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuIHN1YnN0cigkc291cmNlLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc19maWxlKCRzb3VyY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgJG1heCA9IG1heCgkbWF4LCBmaWxlbXRpbWUoJHNvdXJjZSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICR0aGlzLT5sYXN0TW9kaWZpZWQgPSAkbWF4OwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Cache/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/Minify/Cache/APC.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9DYWNoZV9BUEMKICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKLyoqCiAqIEFQQy1iYXNlZCBjYWNoZSBjbGFzcyBmb3IgTWluaWZ5CiAqIAogKiA8Y29kZT4KICogTWluaWZ5OjpzZXRDYWNoZShuZXcgTWluaWZ5X0NhY2hlX0FQQygpKTsKICogPC9jb2RlPgogKiAKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgQ2hyaXMgRWR3YXJkcwogKiovCmNsYXNzIE1pbmlmeV9DYWNoZV9BUEMgewoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgTWluaWZ5X0NhY2hlX0FQQyBvYmplY3QsIHRvIGJlIHBhc3NlZCB0bwogICAgICogTWluaWZ5OjpzZXRDYWNoZSgpLgogICAgICoKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRleHBpcmUgc2Vjb25kcyB1bnRpbCBleHBpcmF0aW9uIChkZWZhdWx0ID0gMAogICAgICogbWVhbmluZyB0aGUgaXRlbSB3aWxsIG5vdCBnZXQgYW4gZXhwaXJhdGlvbiBkYXRlKQogICAgICoKICAgICAqIEByZXR1cm4gbnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGV4cGlyZSA9IDApCiAgICB7CiAgICAgICAgJHRoaXMtPl9leHAgPSAkZXhwaXJlOwogICAgfQoKICAgIC8qKgogICAgICogV3JpdGUgZGF0YSB0byBjYWNoZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgc3VjY2VzcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RvcmUoJGlkLCAkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gYXBjX3N0b3JlKCRpZCwgInskX1NFUlZFUlsnUkVRVUVTVF9USU1FJ119fHskZGF0YX0iLCAkdGhpcy0+X2V4cCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHNpemUgb2YgYSBjYWNoZSBlbnRyeQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIGNhY2hlIGlkCiAgICAgKgogICAgICogQHJldHVybiBpbnQgc2l6ZSBpbiBieXRlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgkaWQpCiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPl9mZXRjaCgkaWQpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIChmdW5jdGlvbl9leGlzdHMoJ21iX3N0cmxlbicpICYmICgoaW50KWluaV9nZXQoJ21ic3RyaW5nLmZ1bmNfb3ZlcmxvYWQnKSAmIDIpKQogICAgICAgICAgICA/IG1iX3N0cmxlbigkdGhpcy0+X2RhdGEsICc4Yml0JykKICAgICAgICAgICAgOiBzdHJsZW4oJHRoaXMtPl9kYXRhKTsKICAgIH0KCiAgICAvKioKICAgICAqIERvZXMgYSB2YWxpZCBjYWNoZSBlbnRyeSBleGlzdD8KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNyY010aW1lIG10aW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZShzKQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBleGlzdHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoJGlkLCAkc3JjTXRpbWUpCiAgICB7CiAgICAgICAgcmV0dXJuICgkdGhpcy0+X2ZldGNoKCRpZCkgJiYgKCR0aGlzLT5fbG0gPj0gJHNyY010aW1lKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZW5kIHRoZSBjYWNoZWQgY29udGVudCB0byBvdXRwdXQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzcGxheSgkaWQpCiAgICB7CiAgICAgICAgZWNobyAkdGhpcy0+X2ZldGNoKCRpZCkKICAgICAgICAgICAgPyAkdGhpcy0+X2RhdGEKICAgICAgICAgICAgOiAnJzsKICAgIH0KCiAgICAvKioKICAgICAqIEZldGNoIHRoZSBjYWNoZWQgY29udGVudAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIGNhY2hlIGlkCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZldGNoKCRpZCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9mZXRjaCgkaWQpCiAgICAgICAgICAgID8gJHRoaXMtPl9kYXRhCiAgICAgICAgICAgIDogJyc7CiAgICB9CgogICAgcHJpdmF0ZSAkX2V4cCA9IG51bGw7CgogICAgLy8gY2FjaGUgb2YgbW9zdCByZWNlbnRseSBmZXRjaGVkIGlkCiAgICBwcml2YXRlICRfbG0gPSBudWxsOwogICAgcHJpdmF0ZSAkX2RhdGEgPSBudWxsOwogICAgcHJpdmF0ZSAkX2lkID0gbnVsbDsKCiAgICAvKioKICAgICAqIEZldGNoIGRhdGEgYW5kIHRpbWVzdGFtcCBmcm9tIGFwYywgc3RvcmUgaW4gaW5zdGFuY2UKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBzdWNjZXNzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2ZldGNoKCRpZCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPl9pZCA9PT0gJGlkKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAkcmV0ID0gYXBjX2ZldGNoKCRpZCk7CiAgICAgICAgaWYgKGZhbHNlID09PSAkcmV0KSB7CiAgICAgICAgICAgICR0aGlzLT5faWQgPSBudWxsOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGxpc3QoJHRoaXMtPl9sbSwgJHRoaXMtPl9kYXRhKSA9IGV4cGxvZGUoJ3wnLCAkcmV0LCAyKTsKICAgICAgICAkdGhpcy0+X2lkID0gJGlkOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Cache/File.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9DYWNoZV9GaWxlICAKICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKY2xhc3MgTWluaWZ5X0NhY2hlX0ZpbGUgewogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhdGggPSAnJywgJGZpbGVMb2NraW5nID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCEgJHBhdGgpIHsKICAgICAgICAgICAgJHBhdGggPSBzZWxmOjp0bXAoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPl9sb2NraW5nID0gJGZpbGVMb2NraW5nOwogICAgICAgICR0aGlzLT5fcGF0aCA9ICRwYXRoOwogICAgfQoKICAgIC8qKgogICAgICogV3JpdGUgZGF0YSB0byBjYWNoZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZCAoZS5nLiBhIGZpbGVuYW1lKQogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkYXRhCiAgICAgKiAKICAgICAqIEByZXR1cm4gYm9vbCBzdWNjZXNzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzdG9yZSgkaWQsICRkYXRhKQogICAgewogICAgICAgICRmbGFnID0gJHRoaXMtPl9sb2NraW5nCiAgICAgICAgICAgID8gTE9DS19FWAogICAgICAgICAgICA6IG51bGw7CiAgICAgICAgJGZpbGUgPSAkdGhpcy0+X3BhdGggLiAnLycgLiAkaWQ7CiAgICAgICAgaWYgKCEgQGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCAkZGF0YSwgJGZsYWcpKSB7CiAgICAgICAgICAgICR0aGlzLT5fbG9nKCJNaW5pZnlfQ2FjaGVfRmlsZTogV3JpdGUgZmFpbGVkIHRvICckZmlsZSciKTsKICAgICAgICB9CiAgICAgICAgLy8gd3JpdGUgY29udHJvbAogICAgICAgIGlmICgkZGF0YSAhPT0gJHRoaXMtPmZldGNoKCRpZCkpIHsKICAgICAgICAgICAgQHVubGluaygkZmlsZSk7CiAgICAgICAgICAgICR0aGlzLT5fbG9nKCJNaW5pZnlfQ2FjaGVfRmlsZTogUG9zdC13cml0ZSByZWFkIGZhaWxlZCBmb3IgJyRmaWxlJyIpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgc2l6ZSBvZiBhIGNhY2hlIGVudHJ5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgY2FjaGUgaWQgKGUuZy4gYSBmaWxlbmFtZSkKICAgICAqIAogICAgICogQHJldHVybiBpbnQgc2l6ZSBpbiBieXRlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgkaWQpCiAgICB7CiAgICAgICAgcmV0dXJuIGZpbGVzaXplKCR0aGlzLT5fcGF0aCAuICcvJyAuICRpZCk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogRG9lcyBhIHZhbGlkIGNhY2hlIGVudHJ5IGV4aXN0PwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIGNhY2hlIGlkIChlLmcuIGEgZmlsZW5hbWUpCiAgICAgKiAKICAgICAqIEBwYXJhbSBpbnQgJHNyY010aW1lIG10aW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZShzKQogICAgICogCiAgICAgKiBAcmV0dXJuIGJvb2wgZXhpc3RzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1ZhbGlkKCRpZCwgJHNyY010aW1lKQogICAgewogICAgICAgICRmaWxlID0gJHRoaXMtPl9wYXRoIC4gJy8nIC4gJGlkOwogICAgICAgIHJldHVybiAoaXNfZmlsZSgkZmlsZSkgJiYgKGZpbGVtdGltZSgkZmlsZSkgPj0gJHNyY010aW1lKSk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogU2VuZCB0aGUgY2FjaGVkIGNvbnRlbnQgdG8gb3V0cHV0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgY2FjaGUgaWQgKGUuZy4gYSBmaWxlbmFtZSkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BsYXkoJGlkKQogICAgewogICAgICAgIGlmICgkdGhpcy0+X2xvY2tpbmcpIHsKICAgICAgICAgICAgJGZwID0gZm9wZW4oJHRoaXMtPl9wYXRoIC4gJy8nIC4gJGlkLCAncmInKTsKICAgICAgICAgICAgZmxvY2soJGZwLCBMT0NLX1NIKTsKICAgICAgICAgICAgZnBhc3N0aHJ1KCRmcCk7CiAgICAgICAgICAgIGZsb2NrKCRmcCwgTE9DS19VTik7CiAgICAgICAgICAgIGZjbG9zZSgkZnApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlYWRmaWxlKCR0aGlzLT5fcGF0aCAuICcvJyAuICRpZCk7ICAgICAgICAgICAgCiAgICAgICAgfQogICAgfQogICAgCgkvKioKICAgICAqIEZldGNoIHRoZSBjYWNoZWQgY29udGVudAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIGNhY2hlIGlkIChlLmcuIGEgZmlsZW5hbWUpCiAgICAgKiAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaCgkaWQpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5fbG9ja2luZykgewogICAgICAgICAgICAkZnAgPSBmb3BlbigkdGhpcy0+X3BhdGggLiAnLycgLiAkaWQsICdyYicpOwogICAgICAgICAgICBmbG9jaygkZnAsIExPQ0tfU0gpOwogICAgICAgICAgICAkcmV0ID0gc3RyZWFtX2dldF9jb250ZW50cygkZnApOwogICAgICAgICAgICBmbG9jaygkZnAsIExPQ0tfVU4pOwogICAgICAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgICAgICAgcmV0dXJuICRyZXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5fcGF0aCAuICcvJyAuICRpZCk7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvKioKICAgICAqIEZldGNoIHRoZSBjYWNoZSBwYXRoIHVzZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fcGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIHVzYWJsZSB0ZW1wIGRpcmVjdG9yeQogICAgICoKICAgICAqIEFkYXB0ZWQgZnJvbSBTb2xhci9EaXIucGhwCiAgICAgKiBAYXV0aG9yIFBhdWwgTS4gSm9uZXMgPHBtam9uZXNAc29sYXJwaHAuY29tPgogICAgICogQGxpY2Vuc2UgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocCBCU0QKICAgICAqIEBsaW5rIGh0dHA6Ly9zb2xhcnBocC5jb20vdHJhYy9jb3JlL2Jyb3dzZXIvdHJ1bmsvU29sYXIvRGlyLnBocAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG1wKCkKICAgIHsKICAgICAgICBzdGF0aWMgJHRtcCA9IG51bGw7CiAgICAgICAgaWYgKCEgJHRtcCkgewogICAgICAgICAgICAkdG1wID0gZnVuY3Rpb25fZXhpc3RzKCdzeXNfZ2V0X3RlbXBfZGlyJykKICAgICAgICAgICAgICAgID8gc3lzX2dldF90ZW1wX2RpcigpCiAgICAgICAgICAgICAgICA6IHNlbGY6Ol90bXAoKTsKICAgICAgICAgICAgJHRtcCA9IHJ0cmltKCR0bXAsIERJUkVDVE9SWV9TRVBBUkFUT1IpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIE9TLXNwZWNpZmljIGRpcmVjdG9yeSBmb3IgdGVtcG9yYXJ5IGZpbGVzCiAgICAgKgogICAgICogQGF1dGhvciBQYXVsIE0uIEpvbmVzIDxwbWpvbmVzQHNvbGFycGhwLmNvbT4KICAgICAqIEBsaWNlbnNlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAgQlNECiAgICAgKiBAbGluayBodHRwOi8vc29sYXJwaHAuY29tL3RyYWMvY29yZS9icm93c2VyL3RydW5rL1NvbGFyL0Rpci5waHAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIF90bXAoKQogICAgewogICAgICAgIC8vIG5vbi1XaW5kb3dzIHN5c3RlbT8KICAgICAgICBpZiAoc3RydG9sb3dlcihzdWJzdHIoUEhQX09TLCAwLCAzKSkgIT0gJ3dpbicpIHsKICAgICAgICAgICAgJHRtcCA9IGVtcHR5KCRfRU5WWydUTVBESVInXSkgPyBnZXRlbnYoJ1RNUERJUicpIDogJF9FTlZbJ1RNUERJUiddOwogICAgICAgICAgICBpZiAoJHRtcCkgewogICAgICAgICAgICAgICAgcmV0dXJuICR0bXA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJy90bXAnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIFdpbmRvd3MgJ1RFTVAnCiAgICAgICAgJHRtcCA9IGVtcHR5KCRfRU5WWydURU1QJ10pID8gZ2V0ZW52KCdURU1QJykgOiAkX0VOVlsnVEVNUCddOwogICAgICAgIGlmICgkdG1wKSB7CiAgICAgICAgICAgIHJldHVybiAkdG1wOwogICAgICAgIH0KICAgICAgICAvLyBXaW5kb3dzICdUTVAnCiAgICAgICAgJHRtcCA9IGVtcHR5KCRfRU5WWydUTVAnXSkgPyBnZXRlbnYoJ1RNUCcpIDogJF9FTlZbJ1RNUCddOwogICAgICAgIGlmICgkdG1wKSB7CiAgICAgICAgICAgIHJldHVybiAkdG1wOwogICAgICAgIH0KICAgICAgICAvLyBXaW5kb3dzICd3aW5kaXInCiAgICAgICAgJHRtcCA9IGVtcHR5KCRfRU5WWyd3aW5kaXInXSkgPyBnZXRlbnYoJ3dpbmRpcicpIDogJF9FTlZbJ3dpbmRpciddOwogICAgICAgIGlmICgkdG1wKSB7CiAgICAgICAgICAgIHJldHVybiAkdG1wOwogICAgICAgIH0KICAgICAgICAvLyBmaW5hbCBmYWxsYmFjayBmb3IgV2luZG93cwogICAgICAgIHJldHVybiBnZXRlbnYoJ1N5c3RlbVJvb3QnKSAuICdcXHRlbXAnOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZCBtZXNzYWdlIHRvIHRoZSBNaW5pZnkgbG9nZ2VyCiAgICAgKiBAcGFyYW0gc3RyaW5nICRtc2cKICAgICAqIEByZXR1cm4gbnVsbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2xvZygkbXNnKQogICAgewogICAgICAgIE1pbmlmeV9Mb2dnZXI6OmxvZygkbXNnKTsKICAgIH0KICAgIAogICAgcHJpdmF0ZSAkX3BhdGggPSBudWxsOwogICAgcHJpdmF0ZSAkX2xvY2tpbmcgPSBudWxsOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Cache/Memcache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9DYWNoZV9NZW1jYWNoZQogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKioKICogTWVtY2FjaGUtYmFzZWQgY2FjaGUgY2xhc3MgZm9yIE1pbmlmeQogKiAKICogPGNvZGU+CiAqIC8vIGZhbGwgYmFjayB0byBkaXNrIGNhY2hpbmcgaWYgbWVtY2FjaGUgY2FuJ3QgY29ubmVjdAogKiAkbWVtY2FjaGUgPSBuZXcgTWVtY2FjaGU7CiAqIGlmICgkbWVtY2FjaGUtPmNvbm5lY3QoJ2xvY2FsaG9zdCcsIDExMjExKSkgewogKiAgICAgTWluaWZ5OjpzZXRDYWNoZShuZXcgTWluaWZ5X0NhY2hlX01lbWNhY2hlKCRtZW1jYWNoZSkpOwogKiB9IGVsc2UgewogKiAgICAgTWluaWZ5OjpzZXRDYWNoZSgpOwogKiB9CiAqIDwvY29kZT4KICoqLwpjbGFzcyBNaW5pZnlfQ2FjaGVfTWVtY2FjaGUgewogICAgCiAgICAvKioKICAgICAqIENyZWF0ZSBhIE1pbmlmeV9DYWNoZV9NZW1jYWNoZSBvYmplY3QsIHRvIGJlIHBhc3NlZCB0byAKICAgICAqIE1pbmlmeTo6c2V0Q2FjaGUoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gTWVtY2FjaGUgJG1lbWNhY2hlIGFscmVhZHktY29ubmVjdGVkIGluc3RhbmNlCiAgICAgKiAKICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyZSBzZWNvbmRzIHVudGlsIGV4cGlyYXRpb24gKGRlZmF1bHQgPSAwCiAgICAgKiBtZWFuaW5nIHRoZSBpdGVtIHdpbGwgbm90IGdldCBhbiBleHBpcmF0aW9uIGRhdGUpCiAgICAgKiAKICAgICAqIEByZXR1cm4gbnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1lbWNhY2hlLCAkZXhwaXJlID0gMCkKICAgIHsKICAgICAgICAkdGhpcy0+X21jID0gJG1lbWNhY2hlOwogICAgICAgICR0aGlzLT5fZXhwID0gJGV4cGlyZTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBXcml0ZSBkYXRhIHRvIGNhY2hlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIGNhY2hlIGlkCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqIAogICAgICogQHJldHVybiBib29sIHN1Y2Nlc3MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0b3JlKCRpZCwgJGRhdGEpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fbWMtPnNldCgkaWQsICJ7JF9TRVJWRVJbJ1JFUVVFU1RfVElNRSddfXx7JGRhdGF9IiwgMCwgJHRoaXMtPl9leHApOwogICAgfQogICAgCiAgICAKICAgIC8qKgogICAgICogR2V0IHRoZSBzaXplIG9mIGEgY2FjaGUgZW50cnkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICogCiAgICAgKiBAcmV0dXJuIGludCBzaXplIGluIGJ5dGVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCRpZCkKICAgIHsKICAgICAgICBpZiAoISAkdGhpcy0+X2ZldGNoKCRpZCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKGZ1bmN0aW9uX2V4aXN0cygnbWJfc3RybGVuJykgJiYgKChpbnQpaW5pX2dldCgnbWJzdHJpbmcuZnVuY19vdmVybG9hZCcpICYgMikpCiAgICAgICAgICAgID8gbWJfc3RybGVuKCR0aGlzLT5fZGF0YSwgJzhiaXQnKQogICAgICAgICAgICA6IHN0cmxlbigkdGhpcy0+X2RhdGEpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIERvZXMgYSB2YWxpZCBjYWNoZSBlbnRyeSBleGlzdD8KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICogCiAgICAgKiBAcGFyYW0gaW50ICRzcmNNdGltZSBtdGltZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGUocykKICAgICAqIAogICAgICogQHJldHVybiBib29sIGV4aXN0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZCgkaWQsICRzcmNNdGltZSkKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT5fZmV0Y2goJGlkKSAmJiAoJHRoaXMtPl9sbSA+PSAkc3JjTXRpbWUpKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBTZW5kIHRoZSBjYWNoZWQgY29udGVudCB0byBvdXRwdXQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzcGxheSgkaWQpCiAgICB7CiAgICAgICAgZWNobyAkdGhpcy0+X2ZldGNoKCRpZCkKICAgICAgICAgICAgPyAkdGhpcy0+X2RhdGEKICAgICAgICAgICAgOiAnJzsKICAgIH0KICAgIAoJLyoqCiAgICAgKiBGZXRjaCB0aGUgY2FjaGVkIGNvbnRlbnQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICogCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2goJGlkKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2ZldGNoKCRpZCkKICAgICAgICAgICAgPyAkdGhpcy0+X2RhdGEKICAgICAgICAgICAgOiAnJzsKICAgIH0KICAgIAogICAgcHJpdmF0ZSAkX21jID0gbnVsbDsKICAgIHByaXZhdGUgJF9leHAgPSBudWxsOwogICAgCiAgICAvLyBjYWNoZSBvZiBtb3N0IHJlY2VudGx5IGZldGNoZWQgaWQKICAgIHByaXZhdGUgJF9sbSA9IG51bGw7CiAgICBwcml2YXRlICRfZGF0YSA9IG51bGw7CiAgICBwcml2YXRlICRfaWQgPSBudWxsOwogICAgCgkvKioKICAgICAqIEZldGNoIGRhdGEgYW5kIHRpbWVzdGFtcCBmcm9tIG1lbWNhY2hlLCBzdG9yZSBpbiBpbnN0YW5jZQogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZAogICAgICogCiAgICAgKiBAcmV0dXJuIGJvb2wgc3VjY2VzcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9mZXRjaCgkaWQpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5faWQgPT09ICRpZCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgJHJldCA9ICR0aGlzLT5fbWMtPmdldCgkaWQpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJHJldCkgewogICAgICAgICAgICAkdGhpcy0+X2lkID0gbnVsbDsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBsaXN0KCR0aGlzLT5fbG0sICR0aGlzLT5fZGF0YSkgPSBleHBsb2RlKCd8JywgJHJldCwgMik7CiAgICAgICAgJHRoaXMtPl9pZCA9ICRpZDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Cache/XCache.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9DYWNoZV9YQ2FjaGUKICoKICogQGxpbmsgaHR0cDovL3hjYWNoZS5saWdodHRwZC5uZXQvCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KCi8qKgogKiBYQ2FjaGUtYmFzZWQgY2FjaGUgY2xhc3MgZm9yIE1pbmlmeQogKiB7QHNlZSBodHRwOi8veGNhY2hlLmxpZ2h0dHBkLm5ldC93aWtpL1hjYWNoZUFwaSBYQ2FjaGUgQVBJfQogKgogKiA8Y29kZT4KICogTWluaWZ5OjpzZXRDYWNoZShuZXcgTWluaWZ5X0NhY2hlX1hDYWNoZSgpKTsKICogPC9jb2RlPgogKgogKiBAcGFja2FnZSBNaW5pZnkKICogQGF1dGhvciBFbGFuIFJ1dXNhbcOkZSA8Z2xlbkBkZWxmaS5lZT4KICoqLwpjbGFzcyBNaW5pZnlfQ2FjaGVfWENhY2hlIHsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIE1pbmlmeV9DYWNoZV9YQ2FjaGUgb2JqZWN0LCB0byBiZSBwYXNzZWQgdG8KICAgICAqIE1pbmlmeTo6c2V0Q2FjaGUoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRleHBpcmUgc2Vjb25kcyB1bnRpbCBleHBpcmF0aW9uIChkZWZhdWx0ID0gMAogICAgICogbWVhbmluZyB0aGUgaXRlbSB3aWxsIG5vdCBnZXQgYW4gZXhwaXJhdGlvbiBkYXRlKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGV4cGlyZSA9IDApCiAgICB7CiAgICAgICAgJHRoaXMtPl9leHAgPSAkZXhwaXJlOwogICAgfQoKICAgIC8qKgogICAgICogV3JpdGUgZGF0YSB0byBjYWNoZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICogQHBhcmFtIHN0cmluZyAkZGF0YQogICAgICogQHJldHVybiBib29sIHN1Y2Nlc3MKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN0b3JlKCRpZCwgJGRhdGEpCiAgICB7CiAgICAgICAgcmV0dXJuIHhjYWNoZV9zZXQoJGlkLCAieyRfU0VSVkVSWydSRVFVRVNUX1RJTUUnXX18eyRkYXRhfSIsICR0aGlzLT5fZXhwKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgc2l6ZSBvZiBhIGNhY2hlIGVudHJ5CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgY2FjaGUgaWQKICAgICAqIEByZXR1cm4gaW50IHNpemUgaW4gYnl0ZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoJGlkKQogICAgewogICAgICAgIGlmICghICR0aGlzLT5fZmV0Y2goJGlkKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSAmJiAoKGludClpbmlfZ2V0KCdtYnN0cmluZy5mdW5jX292ZXJsb2FkJykgJiAyKSkKICAgICAgICAgICAgPyBtYl9zdHJsZW4oJHRoaXMtPl9kYXRhLCAnOGJpdCcpCiAgICAgICAgICAgIDogc3RybGVuKCR0aGlzLT5fZGF0YSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEb2VzIGEgdmFsaWQgY2FjaGUgZW50cnkgZXhpc3Q/CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgY2FjaGUgaWQKICAgICAqIEBwYXJhbSBpbnQgJHNyY010aW1lIG10aW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZShzKQogICAgICogQHJldHVybiBib29sIGV4aXN0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZCgkaWQsICRzcmNNdGltZSkKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT5fZmV0Y2goJGlkKSAmJiAoJHRoaXMtPl9sbSA+PSAkc3JjTXRpbWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNlbmQgdGhlIGNhY2hlZCBjb250ZW50IHRvIG91dHB1dAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkIGNhY2hlIGlkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaXNwbGF5KCRpZCkKICAgIHsKICAgICAgICBlY2hvICR0aGlzLT5fZmV0Y2goJGlkKQogICAgICAgICAgICA/ICR0aGlzLT5fZGF0YQogICAgICAgICAgICA6ICcnOwogICAgfQoKICAgIC8qKgogICAgICogRmV0Y2ggdGhlIGNhY2hlZCBjb250ZW50CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgY2FjaGUgaWQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmZXRjaCgkaWQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fZmV0Y2goJGlkKQogICAgICAgICAgICA/ICR0aGlzLT5fZGF0YQogICAgICAgICAgICA6ICcnOwogICAgfQoKICAgIHByaXZhdGUgJF9leHAgPSBudWxsOwoKICAgIC8vIGNhY2hlIG9mIG1vc3QgcmVjZW50bHkgZmV0Y2hlZCBpZAogICAgcHJpdmF0ZSAkX2xtID0gbnVsbDsKICAgIHByaXZhdGUgJF9kYXRhID0gbnVsbDsKICAgIHByaXZhdGUgJF9pZCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBGZXRjaCBkYXRhIGFuZCB0aW1lc3RhbXAgZnJvbSB4Y2FjaGUsIHN0b3JlIGluIGluc3RhbmNlCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQKICAgICAqIEByZXR1cm4gYm9vbCBzdWNjZXNzCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gX2ZldGNoKCRpZCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPl9pZCA9PT0gJGlkKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAkcmV0ID0geGNhY2hlX2dldCgkaWQpOwogICAgICAgIGlmIChmYWxzZSA9PT0gJHJldCkgewogICAgICAgICAgICAkdGhpcy0+X2lkID0gbnVsbDsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBsaXN0KCR0aGlzLT5fbG0sICR0aGlzLT5fZGF0YSkgPSBleHBsb2RlKCd8JywgJHJldCwgMik7CiAgICAgICAgJHRoaXMtPl9pZCA9ICRpZDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Cache/ZendPlatform.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9DYWNoZV9aZW5kUGxhdGZvcm0KICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKCi8qKgogKiBaZW5kUGxhdGZvcm0tYmFzZWQgY2FjaGUgY2xhc3MgZm9yIE1pbmlmeQogKgogKiBCYXNlZCBvbiBNaW5pZnlfQ2FjaGVfQVBDLCB1c2VzIG91dHB1dF9jYWNoZV9nZXQvcHV0IChjdXJyZW50bHkgZGVwcmVjYXRlZCkKICogCiAqIDxjb2RlPgogKiBNaW5pZnk6OnNldENhY2hlKG5ldyBNaW5pZnlfQ2FjaGVfWmVuZFBsYXRmb3JtKCkpOwogKiA8L2NvZGU+CiAqCiAqIEBwYWNrYWdlIE1pbmlmeQogKiBAYXV0aG9yIFBhdHJpY2sgdmFuIERpc3NlbAogKi8KY2xhc3MgTWluaWZ5X0NhY2hlX1plbmRQbGF0Zm9ybSB7CgoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgTWluaWZ5X0NhY2hlX1plbmRQbGF0Zm9ybSBvYmplY3QsIHRvIGJlIHBhc3NlZCB0bwogICAgICogTWluaWZ5OjpzZXRDYWNoZSgpLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJGV4cGlyZSBzZWNvbmRzIHVudGlsIGV4cGlyYXRpb24gKGRlZmF1bHQgPSAwCiAgICAgKiBtZWFuaW5nIHRoZSBpdGVtIHdpbGwgbm90IGdldCBhbiBleHBpcmF0aW9uIGRhdGUpCiAgICAgKgogICAgICogQHJldHVybiBudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZXhwaXJlID0gMCkKICAgIHsKICAgICAgICAkdGhpcy0+X2V4cCA9ICRleHBpcmU7CiAgICB9CgoKICAgIC8qKgogICAgICogV3JpdGUgZGF0YSB0byBjYWNoZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGRhdGEKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wgc3VjY2VzcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RvcmUoJGlkLCAkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gb3V0cHV0X2NhY2hlX3B1dCgkaWQsICJ7JF9TRVJWRVJbJ1JFUVVFU1RfVElNRSddfXx7JGRhdGF9Iik7CiAgICB9CgoKICAgIC8qKgogICAgICogR2V0IHRoZSBzaXplIG9mIGEgY2FjaGUgZW50cnkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICoKICAgICAqIEByZXR1cm4gaW50IHNpemUgaW4gYnl0ZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoJGlkKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2ZldGNoKCRpZCkKICAgICAgICAgICAgPyBzdHJsZW4oJHRoaXMtPl9kYXRhKQogICAgICAgICAgICA6IGZhbHNlOwogICAgfQoKCiAgICAvKioKICAgICAqIERvZXMgYSB2YWxpZCBjYWNoZSBlbnRyeSBleGlzdD8KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRpZCBjYWNoZSBpZAogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHNyY010aW1lIG10aW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZShzKQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBleGlzdHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzVmFsaWQoJGlkLCAkc3JjTXRpbWUpCiAgICB7CiAgICAgICAgJHJldCA9ICgkdGhpcy0+X2ZldGNoKCRpZCkgJiYgKCR0aGlzLT5fbG0gPj0gJHNyY010aW1lKSk7CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CgoKICAgIC8qKgogICAgICogU2VuZCB0aGUgY2FjaGVkIGNvbnRlbnQgdG8gb3V0cHV0CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgY2FjaGUgaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpc3BsYXkoJGlkKQogICAgewogICAgICAgIGVjaG8gJHRoaXMtPl9mZXRjaCgkaWQpCiAgICAgICAgICAgID8gJHRoaXMtPl9kYXRhCiAgICAgICAgICAgIDogJyc7CiAgICB9CgoKICAgIC8qKgogICAgICogRmV0Y2ggdGhlIGNhY2hlZCBjb250ZW50CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQgY2FjaGUgaWQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmV0Y2goJGlkKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+X2ZldGNoKCRpZCkKICAgICAgICAgICAgPyAkdGhpcy0+X2RhdGEKICAgICAgICAgICAgOiAnJzsKICAgIH0KCgogICAgcHJpdmF0ZSAkX2V4cCA9IG51bGw7CgoKICAgIC8vIGNhY2hlIG9mIG1vc3QgcmVjZW50bHkgZmV0Y2hlZCBpZAogICAgcHJpdmF0ZSAkX2xtID0gbnVsbDsKICAgIHByaXZhdGUgJF9kYXRhID0gbnVsbDsKICAgIHByaXZhdGUgJF9pZCA9IG51bGw7CgoKICAgIC8qKgogICAgICogRmV0Y2ggZGF0YSBhbmQgdGltZXN0YW1wIGZyb20gWmVuZFBsYXRmb3JtLCBzdG9yZSBpbiBpbnN0YW5jZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGlkCiAgICAgKgogICAgICogQHJldHVybiBib29sIHN1Y2Nlc3MKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZmV0Y2goJGlkKQogICAgewogICAgICAgIGlmICgkdGhpcy0+X2lkID09PSAkaWQpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgICRyZXQgPSBvdXRwdXRfY2FjaGVfZ2V0KCRpZCwgJHRoaXMtPl9leHApOwogICAgICAgIGlmIChmYWxzZSA9PT0gJHJldCkgewogICAgICAgICAgICAkdGhpcy0+X2lkID0gbnVsbDsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBsaXN0KCR0aGlzLT5fbG0sICR0aGlzLT5fZGF0YSkgPSBleHBsb2RlKCd8JywgJHJldCwgMik7CiAgICAgICAgJHRoaXMtPl9pZCA9ICRpZDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/ClosureCompiler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9DbG9zdXJlQ29tcGlsZXIKICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKLyoqCiAqIENvbXByZXNzIEphdmFzY3JpcHQgdXNpbmcgdGhlIENsb3N1cmUgQ29tcGlsZXIKICoKICogWW91IG11c3Qgc2V0ICRqYXJGaWxlIGFuZCAkdGVtcERpciBiZWZvcmUgY2FsbGluZyB0aGUgbWluaWZ5IGZ1bmN0aW9ucy4KICogQWxzbywgZGVwZW5kaW5nIG9uIHlvdXIgc2hlbGwncyBlbnZpcm9ubWVudCwgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkKICogdGhlIGZ1bGwgcGF0aCB0byBqYXZhIGluICRqYXZhRXhlY3V0YWJsZSBvciB1c2UgcHV0ZW52KCkgdG8gc2V0dXAgdGhlCiAqIEphdmEgZW52aXJvbm1lbnQuCiAqCiAqIDxjb2RlPgogKiBNaW5pZnlfQ2xvc3VyZUNvbXBpbGVyOjokamFyRmlsZSA9ICcvcGF0aC90by9jbG9zdXJlLWNvbXBpbGVyLTIwMTIwMTIzLmphcic7CiAqIE1pbmlmeV9DbG9zdXJlQ29tcGlsZXI6OiR0ZW1wRGlyID0gJy90bXAnOwogKiAkY29kZSA9IE1pbmlmeV9DbG9zdXJlQ29tcGlsZXI6Om1pbmlmeSgKICogICAkY29kZSwKICogICBhcnJheSgnY29tcGlsYXRpb25fbGV2ZWwnID0+ICdTSU1QTEVfT1BUSU1JWkFUSU9OUycpCiAqICk7CiAqCiAqIC0tY29tcGlsYXRpb25fbGV2ZWwgV0hJVEVTUEFDRV9PTkxZLCBTSU1QTEVfT1BUSU1JWkFUSU9OUywgQURWQU5DRURfT1BUSU1JWkFUSU9OUwogKgogKiA8L2NvZGU+CiAqCiAqIEB0b2RvIHVuaXQgdGVzdHMsICRvcHRpb25zIGRvY3MKICogQHRvZG8gbW9yZSBvcHRpb25zIHN1cHBvcnQgKG9yIHNob3VsZCBqdXN0IHBhc3N0aHJ1IHRoZW0gYWxsPykKICoKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKiBAYXV0aG9yIEVsYW4gUnV1c2Ftw6RlIDxnbGVuQGRlbGZpLmVlPgogKi8KY2xhc3MgTWluaWZ5X0Nsb3N1cmVDb21waWxlciB7CgogICAgLyoqCiAgICAgKiBGaWxlcGF0aCBvZiB0aGUgQ2xvc3VyZSBDb21waWxlciBqYXIgZmlsZS4gVGhpcyBtdXN0IGJlIHNldCBiZWZvcmUKICAgICAqIGNhbGxpbmcgbWluaWZ5SnMoKS4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljICRqYXJGaWxlID0gbnVsbDsKCiAgICAvKioKICAgICAqIFdyaXRhYmxlIHRlbXAgZGlyZWN0b3J5LiBUaGlzIG11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nIG1pbmlmeUpzKCkuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyAkdGVtcERpciA9IG51bGw7CgogICAgLyoqCiAgICAgKiBGaWxlcGF0aCBvZiAiamF2YSIgZXhlY3V0YWJsZSAobWF5IGJlIG5lZWRlZCBpZiBub3QgaW4gc2hlbGwncyBQQVRIKQogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGphdmFFeGVjdXRhYmxlID0gJ2phdmEnOwoKICAgIC8qKgogICAgICogTWluaWZ5IGEgSmF2YXNjcmlwdCBzdHJpbmcKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRqcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyAodmVyYm9zZSBpcyBpZ25vcmVkKQogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jbG9zdXJlLWNvbXBpbGVyL3NvdXJjZS9icm93c2UvdHJ1bmsvUkVBRE1FCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtaW5pZnkoJGpzLCAkb3B0aW9ucyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgc2VsZjo6X3ByZXBhcmUoKTsKICAgICAgICBpZiAoISAoJHRtcEZpbGUgPSB0ZW1wbmFtKHNlbGY6OiR0ZW1wRGlyLCAnY2NfJykpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pbmlmeV9DbG9zdXJlQ29tcGlsZXIgOiBjb3VsZCBub3QgY3JlYXRlIHRlbXAgZmlsZS4nKTsKICAgICAgICB9CiAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHRtcEZpbGUsICRqcyk7CiAgICAgICAgZXhlYyhzZWxmOjpfZ2V0Q21kKCRvcHRpb25zLCAkdG1wRmlsZSksICRvdXRwdXQsICRyZXN1bHRfY29kZSk7CiAgICAgICAgdW5saW5rKCR0bXBGaWxlKTsKICAgICAgICBpZiAoJHJlc3VsdF9jb2RlICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTWluaWZ5X0Nsb3N1cmVDb21waWxlciA6IENsb3N1cmUgQ29tcGlsZXIgZXhlY3V0aW9uIGZhaWxlZC4nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGltcGxvZGUoIlxuIiwgJG91dHB1dCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2dldENtZCgkdXNlck9wdGlvbnMsICR0bXBGaWxlKQogICAgewogICAgICAgICRvID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJ2NoYXJzZXQnID0+ICd1dGYtOCcsCiAgICAgICAgICAgICAgICAnY29tcGlsYXRpb25fbGV2ZWwnID0+ICdTSU1QTEVfT1BUSU1JWkFUSU9OUycsCiAgICAgICAgICAgICksCiAgICAgICAgICAgICR1c2VyT3B0aW9ucwogICAgICAgICk7CiAgICAgICAgJGNtZCA9IHNlbGY6OiRqYXZhRXhlY3V0YWJsZSAuICcgLWphciAnIC4gZXNjYXBlc2hlbGxhcmcoc2VsZjo6JGphckZpbGUpCiAgICAgICAgICAgICAuIChwcmVnX21hdGNoKCcvXltcXGRhLXpBLVowLTlcXC1dKyQvJywgJG9bJ2NoYXJzZXQnXSkKICAgICAgICAgICAgICAgID8gIiAtLWNoYXJzZXQgeyRvWydjaGFyc2V0J119IgogICAgICAgICAgICAgICAgOiAnJyk7CgogICAgICAgIGZvcmVhY2ggKGFycmF5KCdjb21waWxhdGlvbl9sZXZlbCcpIGFzICRvcHQpIHsKICAgICAgICAgICAgaWYgKCRvWyRvcHRdKSB7CiAgICAgICAgICAgICAgICAkY21kIC49ICIgLS17JG9wdH0gIi4gZXNjYXBlc2hlbGxhcmcoJG9bJG9wdF0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkY21kIC4gJyAnIC4gZXNjYXBlc2hlbGxhcmcoJHRtcEZpbGUpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9wcmVwYXJlKCkKICAgIHsKICAgICAgICBpZiAoISBpc19maWxlKHNlbGY6OiRqYXJGaWxlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNaW5pZnlfQ2xvc3VyZUNvbXBpbGVyIDogJGphckZpbGUoJy5zZWxmOjokamFyRmlsZS4nKSBpcyBub3QgYSB2YWxpZCBmaWxlLicpOwogICAgICAgIH0KICAgICAgICBpZiAoISBpc19yZWFkYWJsZShzZWxmOjokamFyRmlsZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTWluaWZ5X0Nsb3N1cmVDb21waWxlciA6ICRqYXJGaWxlKCcuc2VsZjo6JGphckZpbGUuJykgaXMgbm90IHJlYWRhYmxlLicpOwogICAgICAgIH0KICAgICAgICBpZiAoISBpc19kaXIoc2VsZjo6JHRlbXBEaXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pbmlmeV9DbG9zdXJlQ29tcGlsZXIgOiAkdGVtcERpcignLnNlbGY6OiR0ZW1wRGlyLicpIGlzIG5vdCBhIHZhbGlkIGRpcmVjb3RyeS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgaXNfd3JpdGFibGUoc2VsZjo6JHRlbXBEaXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pbmlmeV9DbG9zdXJlQ29tcGlsZXIgOiAkdGVtcERpcignLnNlbGY6OiR0ZW1wRGlyLicpIGlzIG5vdCB3cml0YWJsZS4nKTsKICAgICAgICB9CiAgICB9Cn0KCi8qIHZpbTp0cz00OnN3PTQ6ZXQgKi8K]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/CommentPreserver.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Db21tZW50UHJlc2VydmVyIAogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKioKICogUHJvY2VzcyBhIHN0cmluZyBpbiBwaWVjZXMgcHJlc2VydmluZyBDLXN0eWxlIGNvbW1lbnRzIHRoYXQgYmVnaW4gd2l0aCAiLyohIgogKiAKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKi8KY2xhc3MgTWluaWZ5X0NvbW1lbnRQcmVzZXJ2ZXIgewogICAgCiAgICAvKioKICAgICAqIFN0cmluZyB0byBiZSBwcmVwZW5kZWQgdG8gZWFjaCBwcmVzZXJ2ZWQgY29tbWVudAogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJHByZXBlbmQgPSAiXG4iOwogICAgCiAgICAvKioKICAgICAqIFN0cmluZyB0byBiZSBhcHBlbmRlZCB0byBlYWNoIHByZXNlcnZlZCBjb21tZW50CiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyAkYXBwZW5kID0gIlxuIjsKICAgIAogICAgLyoqCiAgICAgKiBQcm9jZXNzIGEgc3RyaW5nIG91dHNpZGUgb2YgQy1zdHlsZSBjb21tZW50cyB0aGF0IGJlZ2luIHdpdGggIi8qISIKICAgICAqCiAgICAgKiBPbiBlYWNoIG5vbi1lbXB0eSBzdHJpbmcgb3V0c2lkZSB0aGVzZSBjb21tZW50cywgdGhlIGdpdmVuIHByb2Nlc3NvciAKICAgICAqIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLiBUaGUgY29tbWVudHMgd2lsbCBiZSBzdXJyb3VuZGVkIGJ5IAogICAgICogTWluaWZ5X0NvbW1lbnRQcmVzZXJ2ZXI6OiRwcmVwcmVuZCBhbmQgTWluaWZ5X0NvbW1lbnRQcmVzZXJ2ZXI6OiRhcHBlbmQuCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQKICAgICAqIEBwYXJhbSBjYWxsYmFjayAkcHJvY2Vzc29yIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MgYXJyYXkgb2YgZXh0cmEgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIHByb2Nlc3NvciAKICAgICAqIGZ1bmN0aW9uIChkZWZhdWx0ID0gYXJyYXkoKSkKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJvY2VzcygkY29udGVudCwgJHByb2Nlc3NvciwgJGFyZ3MgPSBhcnJheSgpKQogICAgewogICAgICAgICRyZXQgPSAnJzsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICBsaXN0KCRiZWZvcmVDb21tZW50LCAkY29tbWVudCwgJGFmdGVyQ29tbWVudCkgPSBzZWxmOjpfbmV4dENvbW1lbnQoJGNvbnRlbnQpOwogICAgICAgICAgICBpZiAoJycgIT09ICRiZWZvcmVDb21tZW50KSB7CiAgICAgICAgICAgICAgICAkY2FsbEFyZ3MgPSAkYXJnczsKICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJGNhbGxBcmdzLCAkYmVmb3JlQ29tbWVudCk7CiAgICAgICAgICAgICAgICAkcmV0IC49IGNhbGxfdXNlcl9mdW5jX2FycmF5KCRwcm9jZXNzb3IsICRjYWxsQXJncyk7ICAgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJGNvbW1lbnQpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXQgLj0gJGNvbW1lbnQ7CiAgICAgICAgICAgICRjb250ZW50ID0gJGFmdGVyQ29tbWVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXQ7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogRXh0cmFjdCBjb21tZW50cyB0aGF0IFlVSSBDb21wcmVzc29yIHByZXNlcnZlcy4KICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkaW4gaW5wdXQKICAgICAqIAogICAgICogQHJldHVybiBhcnJheSAzIGVsZW1lbnRzIGFyZSByZXR1cm5lZC4gSWYgYSBZVUkgY29tbWVudCBpcyBmb3VuZCwgdGhlCiAgICAgKiAybmQgZWxlbWVudCBpcyB0aGUgY29tbWVudCBhbmQgdGhlIDFzdCBhbmQgM3JkIGFyZSB0aGUgc3Vycm91bmRpbmcKICAgICAqIHN0cmluZ3MuIElmIG5vIGNvbW1lbnQgaXMgZm91bmQsIHRoZSBlbnRpcmUgc3RyaW5nIGlzIHJldHVybmVkIGFzIHRoZSAKICAgICAqIDFzdCBlbGVtZW50IGFuZCB0aGUgb3RoZXIgdHdvIGFyZSBmYWxzZS4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX25leHRDb21tZW50KCRpbikKICAgIHsKICAgICAgICBpZiAoCiAgICAgICAgICAgIGZhbHNlID09PSAoJHN0YXJ0ID0gc3RycG9zKCRpbiwgJy8qIScpKQogICAgICAgICAgICB8fCBmYWxzZSA9PT0gKCRlbmQgPSBzdHJwb3MoJGluLCAnKi8nLCAkc3RhcnQgKyAzKSkKICAgICAgICApIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCRpbiwgZmFsc2UsIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgJHJldCA9IGFycmF5KAogICAgICAgICAgICBzdWJzdHIoJGluLCAwLCAkc3RhcnQpCiAgICAgICAgICAgICxzZWxmOjokcHJlcGVuZCAuICcvKiEnIC4gc3Vic3RyKCRpbiwgJHN0YXJ0ICsgMywgJGVuZCAtICRzdGFydCAtIDEpIC4gc2VsZjo6JGFwcGVuZAogICAgICAgICk7CiAgICAgICAgJGVuZENoYXJzID0gKHN0cmxlbigkaW4pIC0gJGVuZCAtIDIpOwogICAgICAgICRyZXRbXSA9ICgwID09PSAkZW5kQ2hhcnMpCiAgICAgICAgICAgID8gJycKICAgICAgICAgICAgOiBzdWJzdHIoJGluLCAtJGVuZENoYXJzKTsKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Controller/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/Minify/Controller/Base.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Db250cm9sbGVyX0Jhc2UgIAogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKioKICogQmFzZSBjbGFzcyBmb3IgTWluaWZ5IGNvbnRyb2xsZXIKICogCiAqIFRoZSBjb250cm9sbGVyIGNsYXNzIHZhbGlkYXRlcyBhIHJlcXVlc3QgYW5kIHVzZXMgaXQgdG8gY3JlYXRlIHNvdXJjZXMKICogZm9yIG1pbmlmaWNhdGlvbiBhbmQgc2V0IG9wdGlvbnMgbGlrZSBjb250ZW50VHlwZS4gSXQncyBhbHNvIHJlc3BvbnNpYmxlCiAqIGZvciBsb2FkaW5nIG1pbmlmaWVyIGNvZGUgdXBvbiByZXF1ZXN0LgogKiAKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKi8KYWJzdHJhY3QgY2xhc3MgTWluaWZ5X0NvbnRyb2xsZXJfQmFzZSB7CiAgICAKICAgIC8qKgogICAgICogU2V0dXAgY29udHJvbGxlciBzb3VyY2VzIGFuZCBzZXQgYW4gbmVlZGVkIG9wdGlvbnMgZm9yIE1pbmlmeTo6c291cmNlCiAgICAgKiAKICAgICAqIFlvdSBtdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgc3ViY2xhc3MgY29udHJvbGxlciB0byBzZXQgCiAgICAgKiAkdGhpcy0+c291cmNlcy4gSWYgdGhlIHJlcXVlc3QgaXMgTk9UIHZhbGlkLCBtYWtlIHN1cmUgJHRoaXMtPnNvdXJjZXMgCiAgICAgKiBpcyBsZWZ0IGFuIGVtcHR5IGFycmF5LiBUaGVuIHN0cmlwIGFueSBjb250cm9sbGVyLXNwZWNpZmljIG9wdGlvbnMgZnJvbSAKICAgICAqICRvcHRpb25zIGFuZCByZXR1cm4gaXQuIFRvIHNlcnZlIGZpbGVzLCAkdGhpcy0+c291cmNlcyBtdXN0IGJlIGFuIGFycmF5IG9mCiAgICAgKiBNaW5pZnlfU291cmNlIG9iamVjdHMuCiAgICAgKiAKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBjb250cm9sbGVyIGFuZCBNaW5pZnkgb3B0aW9ucwogICAgICogCiAgICAgKiBAcmV0dXJuIGFycmF5ICRvcHRpb25zIE1pbmlmeTo6c2VydmUgb3B0aW9ucwogICAgICovCiAgICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gc2V0dXBTb3VyY2VzKCRvcHRpb25zKTsKICAgIAogICAgLyoqCiAgICAgKiBHZXQgZGVmYXVsdCBNaW5pZnkgb3B0aW9ucyBmb3IgdGhpcyBjb250cm9sbGVyLgogICAgICogCiAgICAgKiBPdmVycmlkZSBpbiBzdWJjbGFzcyB0byBjaGFuZ2UgZGVmYXVsdHMKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IG9wdGlvbnMgZm9yIE1pbmlmeQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGVmYXVsdE1pbmlmeU9wdGlvbnMoKSB7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAnaXNQdWJsaWMnID0+IHRydWUKICAgICAgICAgICAgLCdlbmNvZGVPdXRwdXQnID0+IGZ1bmN0aW9uX2V4aXN0cygnZ3pkZWZsYXRlJykKICAgICAgICAgICAgLCdlbmNvZGVNZXRob2QnID0+IG51bGwgLy8gZGV0ZXJtaW5lIGxhdGVyCiAgICAgICAgICAgICwnZW5jb2RlTGV2ZWwnID0+IDkKICAgICAgICAgICAgLCdtaW5pZmllck9wdGlvbnMnID0+IGFycmF5KCkgLy8gbm8gbWluaWZpZXIgb3B0aW9ucwogICAgICAgICAgICAsJ2NvbnRlbnRUeXBlQ2hhcnNldCcgPT4gJ3V0Zi04JwogICAgICAgICAgICAsJ21heEFnZScgPT4gMTgwMCAvLyAzMCBtaW51dGVzCiAgICAgICAgICAgICwncmV3cml0ZUNzc1VyaXMnID0+IHRydWUKICAgICAgICAgICAgLCdidWJibGVDc3NJbXBvcnRzJyA9PiBmYWxzZQogICAgICAgICAgICAsJ3F1aWV0JyA9PiBmYWxzZSAvLyBzZXJ2ZSgpIHdpbGwgc2VuZCBoZWFkZXJzIGFuZCBvdXRwdXQKICAgICAgICAgICAgLCdkZWJ1ZycgPT4gZmFsc2UKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGlmIHlvdSBvdmVycmlkZSB0aGVzZSwgdGhlIHJlc3BvbnNlIGNvZGVzIE1VU1QgYmUgZGlyZWN0bHkgYWZ0ZXIKICAgICAgICAgICAgLy8gdGhlIGZpcnN0IHNwYWNlLgogICAgICAgICAgICAsJ2JhZFJlcXVlc3RIZWFkZXInID0+ICdIVFRQLzEuMCA0MDAgQmFkIFJlcXVlc3QnCiAgICAgICAgICAgICwnZXJyb3JIZWFkZXInICAgICAgPT4gJ0hUVFAvMS4wIDUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3InCiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBjYWxsYmFjayBmdW5jdGlvbiB0byBzZWUvbW9kaWZ5IGNvbnRlbnQgb2YgYWxsIHNvdXJjZXMKICAgICAgICAgICAgLCdwb3N0cHJvY2Vzc29yJyA9PiBudWxsCiAgICAgICAgICAgIC8vIGZpbGUgdG8gcmVxdWlyZSB0byBsb2FkIHByZXByb2Nlc3NvcgogICAgICAgICAgICAsJ3Bvc3Rwcm9jZXNzb3JSZXF1aXJlJyA9PiBudWxsCiAgICAgICAgKTsKICAgIH0gIAoKICAgIC8qKgogICAgICogR2V0IGRlZmF1bHQgbWluaWZpZXJzIGZvciB0aGlzIGNvbnRyb2xsZXIuCiAgICAgKiAKICAgICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzIHRvIGNoYW5nZSBkZWZhdWx0cwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgbWluaWZpZXIgY2FsbGJhY2tzIGZvciBjb21tb24gdHlwZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERlZmF1bHRNaW5pZmVycygpIHsKICAgICAgICAkcmV0W01pbmlmeTo6VFlQRV9KU10gPSBhcnJheSgnSlNNaW4nLCAnbWluaWZ5Jyk7CiAgICAgICAgJHJldFtNaW5pZnk6OlRZUEVfQ1NTXSA9IGFycmF5KCdNaW5pZnlfQ1NTJywgJ21pbmlmeScpOwogICAgICAgICRyZXRbTWluaWZ5OjpUWVBFX0hUTUxdID0gYXJyYXkoJ01pbmlmeV9IVE1MJywgJ21pbmlmeScpOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQogICAgCiAgICAvKioKICAgICAqIElzIGEgdXNlci1naXZlbiBmaWxlIHdpdGhpbiBhbiBhbGxvd2FibGUgZGlyZWN0b3J5LCBleGlzdGluZywKICAgICAqIGFuZCBoYXZpbmcgYW4gZXh0ZW5zaW9uIGpzL2Nzcy9odG1sL3R4dCA/CiAgICAgKiAKICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY29udHJvbGxlcnMgdGhhdCBoYXZlIHRvIGFjY2VwdAogICAgICogdXNlci1naXZlbiBwYXRocwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgZnVsbCBmaWxlIHBhdGggKGFscmVhZHkgcHJvY2Vzc2VkIGJ5IHJlYWxwYXRoKCkpCiAgICAgKiAKICAgICAqIEBwYXJhbSBhcnJheSAkc2FmZURpcnMgZGlyZWN0b3JpZXMgd2hlcmUgZmlsZXMgYXJlIHNhZmUgdG8gc2VydmUuIEZpbGVzIGNhbiBhbHNvCiAgICAgKiBiZSBpbiBzdWJkaXJlY3RvcmllcyBvZiB0aGVzZSBkaXJlY3Rvcmllcy4KICAgICAqIAogICAgICogQHJldHVybiBib29sIGZpbGUgaXMgc2FmZQogICAgICoKICAgICAqIEBkZXByZWNhdGVkIHVzZSBjaGVja0FsbG93RGlycywgY2hlY2tOb3RIaWRkZW4gaW5zdGVhZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9maWxlSXNTYWZlKCRmaWxlLCAkc2FmZURpcnMpCiAgICB7CiAgICAgICAgJHBhdGhPayA9IGZhbHNlOwogICAgICAgIGZvcmVhY2ggKChhcnJheSkkc2FmZURpcnMgYXMgJHNhZmVEaXIpIHsKICAgICAgICAgICAgaWYgKHN0cnBvcygkZmlsZSwgJHNhZmVEaXIpID09PSAwKSB7CiAgICAgICAgICAgICAgICAkcGF0aE9rID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRiYXNlID0gYmFzZW5hbWUoJGZpbGUpOwogICAgICAgIGlmICghICRwYXRoT2sgfHwgISBpc19maWxlKCRmaWxlKSB8fCAkYmFzZVswXSA9PT0gJy4nKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbGlzdCgkcmV2RXh0KSA9IGV4cGxvZGUoJy4nLCBzdHJyZXYoJGJhc2UpKTsKICAgICAgICByZXR1cm4gaW5fYXJyYXkoc3RycmV2KCRyZXZFeHQpLCBhcnJheSgnanMnLCAnY3NzJywgJ2h0bWwnLCAndHh0JykpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZQogICAgICogQHBhcmFtIGFycmF5ICRhbGxvd0RpcnMKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaQogICAgICogQHJldHVybiBib29sCiAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNrQWxsb3dEaXJzKCRmaWxlLCAkYWxsb3dEaXJzLCAkdXJpKQogICAgewogICAgICAgIGZvcmVhY2ggKChhcnJheSkkYWxsb3dEaXJzIGFzICRhbGxvd0RpcikgewogICAgICAgICAgICBpZiAoc3RycG9zKCRmaWxlLCAkYWxsb3dEaXIpID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJGaWxlICckZmlsZScgaXMgb3V0c2lkZSBcJGFsbG93RGlycy4gSWYgdGhlIHBhdGggaXMiCiAgICAgICAgICAgIC4gIiByZXNvbHZlZCB2aWEgYW4gYWxpYXMvc3ltbGluaywgbG9vayBpbnRvIHRoZSBcJG1pbl9zeW1saW5rcyBvcHRpb24uIgogICAgICAgICAgICAuICIgRS5nLiBcJG1pbl9zeW1saW5rc1snLyIgLiBkaXJuYW1lKCR1cmkpIC4gIiddID0gJyIgLiBkaXJuYW1lKCRmaWxlKSAuICInOyIpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZQogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja05vdEhpZGRlbigkZmlsZSkKICAgIHsKICAgICAgICAkYiA9IGJhc2VuYW1lKCRmaWxlKTsKICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRiLCAnLicpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIkZpbGVuYW1lICckYicgc3RhcnRzIHdpdGggcGVyaW9kIChtYXkgYmUgaGlkZGVuKSIpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIGluc3RhbmNlcyBvZiBNaW5pZnlfU291cmNlLCB3aGljaCBwcm92aWRlIGNvbnRlbnQgYW5kIGFueSBpbmRpdmlkdWFsIG1pbmlmaWNhdGlvbiBuZWVkcy4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKiAKICAgICAqIEBzZWUgTWluaWZ5X1NvdXJjZQogICAgICovCiAgICBwdWJsaWMgJHNvdXJjZXMgPSBhcnJheSgpOwogICAgCiAgICAvKioKICAgICAqIFNob3J0IG5hbWUgdG8gcGxhY2UgaW5zaWRlIGNhY2hlIGlkCiAgICAgKgogICAgICogVGhlIHNldHVwU291cmNlcygpIG1ldGhvZCBtYXkgY2hvb3NlIHRvIHNldCB0aGlzLCBtYWtpbmcgaXQgZWFzaWVyIHRvCiAgICAgKiByZWNvZ25pemUgYSBwYXJ0aWN1bGFyIHNldCBvZiBzb3VyY2VzL3NldHRpbmdzIGluIHRoZSBjYWNoZSBmb2xkZXIuIEl0CiAgICAgKiB3aWxsIGJlIGZpbHRlcmVkIGFuZCB0cnVuY2F0ZWQgdG8gbWFrZSB0aGUgZmluYWwgY2FjaGUgaWQgPD0gMjUwIGJ5dGVzLgogICAgICogCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgJHNlbGVjdGlvbklkID0gJyc7CgogICAgLyoqCiAgICAgKiBNaXggaW4gZGVmYXVsdCBjb250cm9sbGVyIG9wdGlvbnMgd2l0aCB1c2VyLWdpdmVuIG9wdGlvbnMKICAgICAqIAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIHVzZXIgb3B0aW9ucwogICAgICogCiAgICAgKiBAcmV0dXJuIGFycmF5IG1peGVkIG9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZpbmFsIGZ1bmN0aW9uIG1peEluRGVmYXVsdE9wdGlvbnMoJG9wdGlvbnMpCiAgICB7CiAgICAgICAgJHJldCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAkdGhpcy0+Z2V0RGVmYXVsdE1pbmlmeU9wdGlvbnMoKSwgJG9wdGlvbnMKICAgICAgICApOwogICAgICAgIGlmICghIGlzc2V0KCRvcHRpb25zWydtaW5pZmllcnMnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ21pbmlmaWVycyddID0gYXJyYXkoKTsKICAgICAgICB9CiAgICAgICAgJHJldFsnbWluaWZpZXJzJ10gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgJHRoaXMtPmdldERlZmF1bHRNaW5pZmVycygpLCAkb3B0aW9uc1snbWluaWZpZXJzJ10KICAgICAgICApOwogICAgICAgIHJldHVybiAkcmV0OwogICAgfQogICAgCiAgICAvKioKICAgICAqIEFuYWx5emUgc291cmNlcyAoaWYgdGhlcmUgYXJlIGFueSkgYW5kIHNldCAkb3B0aW9ucyAnY29udGVudFR5cGUnIAogICAgICogYW5kICdsYXN0TW9kaWZpZWRUaW1lJyBpZiB0aGV5IGFscmVhZHkgYXJlbid0LgogICAgICogCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgb3B0aW9ucyBmb3IgTWluaWZ5CiAgICAgKiAKICAgICAqIEByZXR1cm4gYXJyYXkgb3B0aW9ucyBmb3IgTWluaWZ5CiAgICAgKi8KICAgIHB1YmxpYyBmaW5hbCBmdW5jdGlvbiBhbmFseXplU291cmNlcygkb3B0aW9ucyA9IGFycmF5KCkpIAogICAgewogICAgICAgIGlmICgkdGhpcy0+c291cmNlcykgewogICAgICAgICAgICBpZiAoISBpc3NldCgkb3B0aW9uc1snY29udGVudFR5cGUnXSkpIHsKICAgICAgICAgICAgICAgICRvcHRpb25zWydjb250ZW50VHlwZSddID0gTWluaWZ5X1NvdXJjZTo6Z2V0Q29udGVudFR5cGUoJHRoaXMtPnNvdXJjZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGxhc3QgbW9kaWZpZWQgaXMgbmVlZGVkIGZvciBjYWNoaW5nLCBldmVuIGlmIHNldEV4cGlyZXMgaXMgc2V0CiAgICAgICAgICAgIGlmICghIGlzc2V0KCRvcHRpb25zWydsYXN0TW9kaWZpZWRUaW1lJ10pKSB7CiAgICAgICAgICAgICAgICAkbWF4ID0gMDsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zb3VyY2VzIGFzICRzb3VyY2UpIHsKICAgICAgICAgICAgICAgICAgICAkbWF4ID0gbWF4KCRzb3VyY2UtPmxhc3RNb2RpZmllZCwgJG1heCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkb3B0aW9uc1snbGFzdE1vZGlmaWVkVGltZSddID0gJG1heDsKICAgICAgICAgICAgfSAgICAKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZCBtZXNzYWdlIHRvIHRoZSBNaW5pZnkgbG9nZ2VyCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbXNnCiAgICAgKgogICAgICogQHJldHVybiBudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2coJG1zZykgewogICAgICAgIE1pbmlmeV9Mb2dnZXI6OmxvZygkbXNnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Controller/Files.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Db250cm9sbGVyX0ZpbGVzICAKICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKLyoqCiAqIENvbnRyb2xsZXIgY2xhc3MgZm9yIG1pbmlmeWluZyBhIHNldCBvZiBmaWxlcwogKiAKICogRS5nLiB0aGUgZm9sbG93aW5nIHdvdWxkIHNlcnZlIHRoZSBtaW5pZmllZCBKYXZhc2NyaXB0IGZvciBhIHNpdGUKICogPGNvZGU+CiAqIE1pbmlmeTo6c2VydmUoJ0ZpbGVzJywgYXJyYXkoCiAqICAgICAnZmlsZXMnID0+IGFycmF5KAogKiAgICAgICAgICcvL2pzL2pxdWVyeS5qcycKICogICAgICAgICAsJy8vanMvcGx1Z2lucy5qcycKICogICAgICAgICAsJy9ob21lL3VzZXJuYW1lL2ZpbGUuanMnCiAqICAgICApCiAqICkpOwogKiA8L2NvZGU+CiAqIAogKiBBcyBhIHNob3J0Y3V0LCB0aGUgY29udHJvbGxlciB3aWxsIHJlcGxhY2UgIi8vIiBhdCB0aGUgYmVnaW5uaW5nCiAqIG9mIGEgZmlsZW5hbWUgd2l0aCAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJy8nLgogKgogKiBAcGFja2FnZSBNaW5pZnkKICogQGF1dGhvciBTdGVwaGVuIENsYXkgPHN0ZXZlQG1yY2xheS5vcmc+CiAqLwpjbGFzcyBNaW5pZnlfQ29udHJvbGxlcl9GaWxlcyBleHRlbmRzIE1pbmlmeV9Db250cm9sbGVyX0Jhc2UgewogICAgCiAgICAvKioKICAgICAqIFNldCB1cCBmaWxlIHNvdXJjZXMKICAgICAqIAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIGNvbnRyb2xsZXIgYW5kIE1pbmlmeSBvcHRpb25zCiAgICAgKiBAcmV0dXJuIGFycmF5IE1pbmlmeSBvcHRpb25zCiAgICAgKiAKICAgICAqIENvbnRyb2xsZXIgb3B0aW9uczoKICAgICAqIAogICAgICogJ2ZpbGVzJzogKHJlcXVpcmVkKSBhcnJheSBvZiBjb21wbGV0ZSBmaWxlIHBhdGhzLCBvciBhIHNpbmdsZSBwYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXR1cFNvdXJjZXMoJG9wdGlvbnMpIHsKICAgICAgICAvLyBzdHJpcCBjb250cm9sbGVyIG9wdGlvbnMKICAgICAgICAKICAgICAgICAkZmlsZXMgPSAkb3B0aW9uc1snZmlsZXMnXTsKICAgICAgICAvLyBpZiAkZmlsZXMgaXMgYSBzaW5nbGUgb2JqZWN0LCBjYXN0aW5nIHdpbGwgYnJlYWsgaXQKICAgICAgICBpZiAoaXNfb2JqZWN0KCRmaWxlcykpIHsKICAgICAgICAgICAgJGZpbGVzID0gYXJyYXkoJGZpbGVzKTsKICAgICAgICB9IGVsc2VpZiAoISBpc19hcnJheSgkZmlsZXMpKSB7CiAgICAgICAgICAgICRmaWxlcyA9IChhcnJheSkkZmlsZXM7CiAgICAgICAgfQogICAgICAgIHVuc2V0KCRvcHRpb25zWydmaWxlcyddKTsKICAgICAgICAKICAgICAgICAkc291cmNlcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7CiAgICAgICAgICAgIGlmICgkZmlsZSBpbnN0YW5jZW9mIE1pbmlmeV9Tb3VyY2UpIHsKICAgICAgICAgICAgICAgICRzb3VyY2VzW10gPSAkZmlsZTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJGZpbGUsICcvLycpKSB7CiAgICAgICAgICAgICAgICAkZmlsZSA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiBzdWJzdHIoJGZpbGUsIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZWFsUGF0aCA9IHJlYWxwYXRoKCRmaWxlKTsKICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJHJlYWxQYXRoKSkgewogICAgICAgICAgICAgICAgJHNvdXJjZXNbXSA9IG5ldyBNaW5pZnlfU291cmNlKGFycmF5KAogICAgICAgICAgICAgICAgICAgICdmaWxlcGF0aCcgPT4gJHJlYWxQYXRoCiAgICAgICAgICAgICAgICApKTsgICAgCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9nKCJUaGUgcGF0aCBcInskZmlsZX1cIiBjb3VsZCBub3QgYmUgZm91bmQgKG9yIHdhcyBub3QgYSBmaWxlKSIpOwogICAgICAgICAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkc291cmNlcykgewogICAgICAgICAgICAkdGhpcy0+c291cmNlcyA9ICRzb3VyY2VzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJG9wdGlvbnM7CiAgICB9Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Controller/Groups.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Db250cm9sbGVyX0dyb3VwcyAgCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KCi8qKgogKiBDb250cm9sbGVyIGNsYXNzIGZvciBzZXJ2aW5nIHByZWRldGVybWluZWQgZ3JvdXBzIG9mIG1pbmltaXplZCBzZXRzLCBzZWxlY3RlZAogKiBieSBQQVRIX0lORk8KICogCiAqIDxjb2RlPgogKiBNaW5pZnk6OnNlcnZlKCdHcm91cHMnLCBhcnJheSggCiAqICAgICAnZ3JvdXBzJyA9PiBhcnJheSgKICogICAgICAgICAnY3NzJyA9PiBhcnJheSgnLy9jc3MvdHlwZS5jc3MnLCAnLy9jc3MvbGF5b3V0LmNzcycpCiAqICAgICAgICAsJ2pzJyA9PiBhcnJheSgnLy9qcy9qcXVlcnkuanMnLCAnLy9qcy9zaXRlLmpzJykKICogICAgICkKICogKSk7CiAqIDwvY29kZT4KICogCiAqIElmIHRoZSBhYm92ZSBjb2RlIHdlcmUgcGxhY2VkIGluIC9zZXJ2ZS5waHAsIGl0IHdvdWxkIGVuYWJsZSB0aGUgVVJMcwogKiAvc2VydmUucGhwL2pzIGFuZCAvc2VydmUucGhwL2NzcwogKiAKICogQXMgYSBzaG9ydGN1dCwgdGhlIGNvbnRyb2xsZXIgd2lsbCByZXBsYWNlICIvLyIgYXQgdGhlIGJlZ2lubmluZwogKiBvZiBhIGZpbGVuYW1lIHdpdGggJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAuICcvJy4KICogCiAqIEBwYWNrYWdlIE1pbmlmeQogKiBAYXV0aG9yIFN0ZXBoZW4gQ2xheSA8c3RldmVAbXJjbGF5Lm9yZz4KICovCmNsYXNzIE1pbmlmeV9Db250cm9sbGVyX0dyb3VwcyBleHRlbmRzIE1pbmlmeV9Db250cm9sbGVyX0Jhc2UgewogICAgCiAgICAvKioKICAgICAqIFNldCB1cCBncm91cHMgb2YgZmlsZXMgYXMgc291cmNlcwogICAgICogCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgY29udHJvbGxlciBhbmQgTWluaWZ5IG9wdGlvbnMKICAgICAqCiAgICAgKiAnZ3JvdXBzJzogKHJlcXVpcmVkKSBhcnJheSBtYXBwaW5nIFBBVEhfSU5GTyBzdHJpbmdzIHRvIGFycmF5cwogICAgICogb2YgY29tcGxldGUgZmlsZSBwYXRocy4gQHNlZSBNaW5pZnlfQ29udHJvbGxlcl9Hcm91cHMKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IE1pbmlmeSBvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXR1cFNvdXJjZXMoJG9wdGlvbnMpIHsKICAgICAgICAvLyBzdHJpcCBjb250cm9sbGVyIG9wdGlvbnMKICAgICAgICAkZ3JvdXBzID0gJG9wdGlvbnNbJ2dyb3VwcyddOwogICAgICAgIHVuc2V0KCRvcHRpb25zWydncm91cHMnXSk7CiAgICAgICAgCiAgICAgICAgLy8gbW9kX2ZjZ2lkIHBsYWNlcyBQQVRIX0lORk8gaW4gT1JJR19QQVRIX0lORk8KICAgICAgICAkcGkgPSBpc3NldCgkX1NFUlZFUlsnT1JJR19QQVRIX0lORk8nXSkKICAgICAgICAgICAgPyBzdWJzdHIoJF9TRVJWRVJbJ09SSUdfUEFUSF9JTkZPJ10sIDEpIAogICAgICAgICAgICA6IChpc3NldCgkX1NFUlZFUlsnUEFUSF9JTkZPJ10pCiAgICAgICAgICAgICAgICA/IHN1YnN0cigkX1NFUlZFUlsnUEFUSF9JTkZPJ10sIDEpIAogICAgICAgICAgICAgICAgOiBmYWxzZQogICAgICAgICAgICApOwogICAgICAgIGlmIChmYWxzZSA9PT0gJHBpIHx8ICEgaXNzZXQoJGdyb3Vwc1skcGldKSkgewogICAgICAgICAgICAvLyBubyBQQVRIX0lORk8gb3Igbm90IGEgdmFsaWQgZ3JvdXAKICAgICAgICAgICAgJHRoaXMtPmxvZygiTWlzc2luZyBQQVRIX0lORk8gb3Igbm8gZ3JvdXAgc2V0IGZvciBcIiRwaVwiIik7CiAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICB9CiAgICAgICAgJHNvdXJjZXMgPSBhcnJheSgpOwogICAgICAgIAogICAgICAgICRmaWxlcyA9ICRncm91cHNbJHBpXTsKICAgICAgICAvLyBpZiAkZmlsZXMgaXMgYSBzaW5nbGUgb2JqZWN0LCBjYXN0aW5nIHdpbGwgYnJlYWsgaXQKICAgICAgICBpZiAoaXNfb2JqZWN0KCRmaWxlcykpIHsKICAgICAgICAgICAgJGZpbGVzID0gYXJyYXkoJGZpbGVzKTsKICAgICAgICB9IGVsc2VpZiAoISBpc19hcnJheSgkZmlsZXMpKSB7CiAgICAgICAgICAgICRmaWxlcyA9IChhcnJheSkkZmlsZXM7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkgewogICAgICAgICAgICBpZiAoJGZpbGUgaW5zdGFuY2VvZiBNaW5pZnlfU291cmNlKSB7CiAgICAgICAgICAgICAgICAkc291cmNlc1tdID0gJGZpbGU7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRmaWxlLCAnLy8nKSkgewogICAgICAgICAgICAgICAgJGZpbGUgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gc3Vic3RyKCRmaWxlLCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVhbFBhdGggPSByZWFscGF0aCgkZmlsZSk7CiAgICAgICAgICAgIGlmIChpc19maWxlKCRyZWFsUGF0aCkpIHsKICAgICAgICAgICAgICAgICRzb3VyY2VzW10gPSBuZXcgTWluaWZ5X1NvdXJjZShhcnJheSgKICAgICAgICAgICAgICAgICAgICAnZmlsZXBhdGgnID0+ICRyZWFsUGF0aAogICAgICAgICAgICAgICAgKSk7ICAgIAogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvZygiVGhlIHBhdGggXCJ7JGZpbGV9XCIgY291bGQgbm90IGJlIGZvdW5kIChvciB3YXMgbm90IGEgZmlsZSkiKTsKICAgICAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJHNvdXJjZXMpIHsKICAgICAgICAgICAgJHRoaXMtPnNvdXJjZXMgPSAkc291cmNlczsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Controller/MinApp.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Db250cm9sbGVyX01pbkFwcCAgCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KCi8qKgogKiBDb250cm9sbGVyIGNsYXNzIGZvciByZXF1ZXN0cyB0byAvbWluL2luZGV4LnBocAogKiAKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKi8KY2xhc3MgTWluaWZ5X0NvbnRyb2xsZXJfTWluQXBwIGV4dGVuZHMgTWluaWZ5X0NvbnRyb2xsZXJfQmFzZSB7CiAgICAKICAgIC8qKgogICAgICogU2V0IHVwIGdyb3VwcyBvZiBmaWxlcyBhcyBzb3VyY2VzCiAgICAgKiAKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBjb250cm9sbGVyIGFuZCBNaW5pZnkgb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgTWluaWZ5IG9wdGlvbnMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldHVwU291cmNlcygkb3B0aW9ucykgewogICAgICAgIC8vIGZpbHRlciBjb250cm9sbGVyIG9wdGlvbnMKICAgICAgICAkY09wdGlvbnMgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAnYWxsb3dEaXJzJyA9PiAnLy8nCiAgICAgICAgICAgICAgICAsJ2dyb3Vwc09ubHknID0+IGZhbHNlCiAgICAgICAgICAgICAgICAsJ2dyb3VwcycgPT4gYXJyYXkoKQogICAgICAgICAgICAgICAgLCdub01pblBhdHRlcm4nID0+ICdAWy1cXC5dbWluXFwuKD86anN8Y3NzKSRAaScgLy8gbWF0Y2hlZCBhZ2FpbnN0IGJhc2VuYW1lCiAgICAgICAgICAgICkKICAgICAgICAgICAgLChpc3NldCgkb3B0aW9uc1snbWluQXBwJ10pID8gJG9wdGlvbnNbJ21pbkFwcCddIDogYXJyYXkoKSkKICAgICAgICApOwogICAgICAgIHVuc2V0KCRvcHRpb25zWydtaW5BcHAnXSk7CiAgICAgICAgJHNvdXJjZXMgPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5zZWxlY3Rpb25JZCA9ICcnOwogICAgICAgICRmaXJzdE1pc3NpbmdSZXNvdXJjZSA9IG51bGw7CiAgICAgICAgCiAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydnJ10pKSB7CiAgICAgICAgICAgIGlmICghIGlzX3N0cmluZygkX0dFVFsnZyddKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvZygiR0VUIHBhcmFtICdnJyB3YXMgaW52YWxpZCIpOwogICAgICAgICAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIGFkZCBncm91cChzKQogICAgICAgICAgICAkdGhpcy0+c2VsZWN0aW9uSWQgLj0gJ2c9JyAuICRfR0VUWydnJ107CiAgICAgICAgICAgICRrZXlzID0gZXhwbG9kZSgnLCcsICRfR0VUWydnJ10pOwogICAgICAgICAgICBpZiAoJGtleXMgIT0gYXJyYXlfdW5pcXVlKCRrZXlzKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvZygiRHVwbGljYXRlIGdyb3VwIGtleSBmb3VuZC4iKTsKICAgICAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICAgICAgfQogICAgICAgICAgICAka2V5cyA9IGV4cGxvZGUoJywnLCAkX0dFVFsnZyddKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJGtleSkgewogICAgICAgICAgICAgICAgaWYgKCEgaXNzZXQoJGNPcHRpb25zWydncm91cHMnXVska2V5XSkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bG9nKCJBIGdyb3VwIGNvbmZpZ3VyYXRpb24gZm9yIFwieyRrZXl9XCIgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRmaWxlcyA9ICRjT3B0aW9uc1snZ3JvdXBzJ11bJGtleV07CiAgICAgICAgICAgICAgICAvLyBpZiAkZmlsZXMgaXMgYSBzaW5nbGUgb2JqZWN0LCBjYXN0aW5nIHdpbGwgYnJlYWsgaXQKICAgICAgICAgICAgICAgIGlmIChpc19vYmplY3QoJGZpbGVzKSkgewogICAgICAgICAgICAgICAgICAgICRmaWxlcyA9IGFycmF5KCRmaWxlcyk7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoISBpc19hcnJheSgkZmlsZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpbGVzID0gKGFycmF5KSRmaWxlczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkZmlsZSBpbnN0YW5jZW9mIE1pbmlmeV9Tb3VyY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHNvdXJjZXNbXSA9ICRmaWxlOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkZmlsZSwgJy8vJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gc3Vic3RyKCRmaWxlLCAxKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHJlYWxwYXRoID0gcmVhbHBhdGgoJGZpbGUpOwogICAgICAgICAgICAgICAgICAgIGlmICgkcmVhbHBhdGggJiYgaXNfZmlsZSgkcmVhbHBhdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzb3VyY2VzW10gPSAkdGhpcy0+X2dldEZpbGVTb3VyY2UoJHJlYWxwYXRoLCAkY09wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5sb2coIlRoZSBwYXRoIFwieyRmaWxlfVwiIChyZWFscGF0aCBcInskcmVhbHBhdGh9XCIpIGNvdWxkIG5vdCBiZSBmb3VuZCAob3Igd2FzIG5vdCBhIGZpbGUpIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSAkZmlyc3RNaXNzaW5nUmVzb3VyY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaXJzdE1pc3NpbmdSZXNvdXJjZSA9IGJhc2VuYW1lKCRmaWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlY29uZE1pc3NpbmdSZXNvdXJjZSA9IGJhc2VuYW1lKCRmaWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5sb2coIk1vcmUgdGhhbiBvbmUgZmlsZSB3YXMgbWlzc2luZzogJyRmaXJzdE1pc3NpbmdSZXNvdXJjZScsICckc2Vjb25kTWlzc2luZ1Jlc291cmNlJyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRzb3VyY2VzKSB7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNoZWNrVHlwZSgkc291cmNlc1swXSk7CiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEgJGNPcHRpb25zWydncm91cHNPbmx5J10gJiYgaXNzZXQoJF9HRVRbJ2YnXSkpIHsKICAgICAgICAgICAgaWYgKCEgaXNfc3RyaW5nKCRfR0VUWydmJ10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bG9nKCJHRVQgcGFyYW0gJ2YnIHdhcyBpbnZhbGlkIik7CiAgICAgICAgICAgICAgICByZXR1cm4gJG9wdGlvbnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gdHJ5IHVzZXIgZmlsZXMKICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgYXJlIHRvIGxpbWl0IHRoZSBVUkxzIHRoYXQgbWluaWZ5IHdpbGwKICAgICAgICAgICAgLy8gcmVzcG9uZCB0by4KICAgICAgICAgICAgaWYgKC8vIHZlcmlmeSBhdCBsZWFzdCBvbmUgZmlsZSwgZmlsZXMgYXJlIHNpbmdsZSBjb21tYSBzZXBhcmF0ZWQsIAogICAgICAgICAgICAgICAgLy8gYW5kIGFyZSBhbGwgc2FtZSBleHRlbnNpb24KICAgICAgICAgICAgICAgICEgcHJlZ19tYXRjaCgnL15bXixdK1xcLihjc3N8anMpKD86LFteLF0rXFwuXFwxKSokLycsICRfR0VUWydmJ10sICRtKQogICAgICAgICAgICAgICAgLy8gbm8gIi8vIgogICAgICAgICAgICAgICAgfHwgc3RycG9zKCRfR0VUWydmJ10sICcvLycpICE9PSBmYWxzZQogICAgICAgICAgICAgICAgLy8gbm8gIlwiCiAgICAgICAgICAgICAgICB8fCBzdHJwb3MoJF9HRVRbJ2YnXSwgJ1xcJykgIT09IGZhbHNlCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvZygiR0VUIHBhcmFtICdmJyB3YXMgaW52YWxpZCIpOwogICAgICAgICAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRleHQgPSAiLnskbVsxXX0iOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJHRoaXMtPmNoZWNrVHlwZSgkbVsxXSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxvZygkZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZmlsZXMgPSBleHBsb2RlKCcsJywgJF9HRVRbJ2YnXSk7CiAgICAgICAgICAgIGlmICgkZmlsZXMgIT0gYXJyYXlfdW5pcXVlKCRmaWxlcykpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5sb2coIkR1cGxpY2F0ZSBmaWxlcyB3ZXJlIHNwZWNpZmllZCIpOwogICAgICAgICAgICAgICAgcmV0dXJuICRvcHRpb25zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc3NldCgkX0dFVFsnYiddKSkgewogICAgICAgICAgICAgICAgLy8gY2hlY2sgZm9yIHZhbGlkaXR5CiAgICAgICAgICAgICAgICBpZiAoaXNfc3RyaW5nKCRfR0VUWydiJ10pCiAgICAgICAgICAgICAgICAgICAgJiYgcHJlZ19tYXRjaCgnQF5bXi9dKyg/Oi9bXi9dKykqJEAnLCAkX0dFVFsnYiddKQogICAgICAgICAgICAgICAgICAgICYmIGZhbHNlID09PSBzdHJwb3MoJF9HRVRbJ2InXSwgJy4uJykKICAgICAgICAgICAgICAgICAgICAmJiAkX0dFVFsnYiddICE9PSAnLicpIHsKICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZCBiYXNlCiAgICAgICAgICAgICAgICAgICAgJGJhc2UgPSAiL3skX0dFVFsnYiddfS8iOyAgICAgICAKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxvZygiR0VUIHBhcmFtICdiJyB3YXMgaW52YWxpZCIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRiYXNlID0gJy8nOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRhbGxvd0RpcnMgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoICgoYXJyYXkpJGNPcHRpb25zWydhbGxvd0RpcnMnXSBhcyAkYWxsb3dEaXIpIHsKICAgICAgICAgICAgICAgICRhbGxvd0RpcnNbXSA9IHJlYWxwYXRoKHN0cl9yZXBsYWNlKCcvLycsICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiAnLycsICRhbGxvd0RpcikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRiYXNlbmFtZXMgPSBhcnJheSgpOyAvLyBqdXN0IGZvciBjYWNoZSBpZAogICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsKICAgICAgICAgICAgICAgICR1cmkgPSAkYmFzZSAuICRmaWxlOwogICAgICAgICAgICAgICAgJHBhdGggPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJHVyaTsKICAgICAgICAgICAgICAgICRyZWFscGF0aCA9IHJlYWxwYXRoKCRwYXRoKTsKICAgICAgICAgICAgICAgIGlmIChmYWxzZSA9PT0gJHJlYWxwYXRoIHx8ICEgaXNfZmlsZSgkcmVhbHBhdGgpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxvZygiVGhlIHBhdGggXCJ7JHBhdGh9XCIgKHJlYWxwYXRoIFwieyRyZWFscGF0aH1cIikgY291bGQgbm90IGJlIGZvdW5kIChvciB3YXMgbm90IGEgZmlsZSkiKTsKICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gJGZpcnN0TWlzc2luZ1Jlc291cmNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmaXJzdE1pc3NpbmdSZXNvdXJjZSA9ICR1cmk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzZWNvbmRNaXNzaW5nUmVzb3VyY2UgPSAkdXJpOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bG9nKCJNb3JlIHRoYW4gb25lIGZpbGUgd2FzIG1pc3Npbmc6ICckZmlyc3RNaXNzaW5nUmVzb3VyY2UnLCAnJHNlY29uZE1pc3NpbmdSZXNvdXJjZWAnIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIHBhcmVudDo6Y2hlY2tOb3RIaWRkZW4oJHJlYWxwYXRoKTsKICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6OmNoZWNrQWxsb3dEaXJzKCRyZWFscGF0aCwgJGFsbG93RGlycywgJHVyaSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bG9nKCRlLT5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRzb3VyY2VzW10gPSAkdGhpcy0+X2dldEZpbGVTb3VyY2UoJHJlYWxwYXRoLCAkY09wdGlvbnMpOwogICAgICAgICAgICAgICAgJGJhc2VuYW1lc1tdID0gYmFzZW5hbWUoJHJlYWxwYXRoLCAkZXh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHRoaXMtPnNlbGVjdGlvbklkKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2VsZWN0aW9uSWQgLj0gJ19mPSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnNlbGVjdGlvbklkIC49IGltcGxvZGUoJywnLCAkYmFzZW5hbWVzKSAuICRleHQ7CiAgICAgICAgfQogICAgICAgIGlmICgkc291cmNlcykgewogICAgICAgICAgICBpZiAobnVsbCAhPT0gJGZpcnN0TWlzc2luZ1Jlc291cmNlKSB7CiAgICAgICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRzb3VyY2VzLCBuZXcgTWluaWZ5X1NvdXJjZShhcnJheSgKICAgICAgICAgICAgICAgICAgICAnaWQnID0+ICdtaXNzaW5nRmlsZScKICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgbm90IGNhdXNlIGNhY2hlIGludmFsaWRhdGlvbgogICAgICAgICAgICAgICAgICAgICwnbGFzdE1vZGlmaWVkJyA9PiAwCiAgICAgICAgICAgICAgICAgICAgLy8gZHVlIHRvIGNhY2hpbmcsIGZpbGVuYW1lIGlzIHVucmVsaWFibGUuCiAgICAgICAgICAgICAgICAgICAgLCdjb250ZW50JyA9PiAiLyogTWluaWZ5OiBhdCBsZWFzdCBvbmUgbWlzc2luZyBmaWxlLiBTZWUgIiAuIE1pbmlmeTo6VVJMX0RFQlVHIC4gIiAqL1xuIgogICAgICAgICAgICAgICAgICAgICwnbWluaWZpZXInID0+ICcnCiAgICAgICAgICAgICAgICApKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnNvdXJjZXMgPSAkc291cmNlczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+bG9nKCJObyBzb3VyY2VzIHRvIHNlcnZlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGUKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNPcHRpb25zCiAgICAgKgogICAgICogQHJldHVybiBNaW5pZnlfU291cmNlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfZ2V0RmlsZVNvdXJjZSgkZmlsZSwgJGNPcHRpb25zKQogICAgewogICAgICAgICRzcGVjWydmaWxlcGF0aCddID0gJGZpbGU7CiAgICAgICAgaWYgKCRjT3B0aW9uc1snbm9NaW5QYXR0ZXJuJ10gJiYgcHJlZ19tYXRjaCgkY09wdGlvbnNbJ25vTWluUGF0dGVybiddLCBiYXNlbmFtZSgkZmlsZSkpKSB7CiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCd+XC5jc3MkfmknLCAkZmlsZSkpIHsKICAgICAgICAgICAgICAgICRzcGVjWydtaW5pZnlPcHRpb25zJ11bJ2NvbXByZXNzJ10gPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzcGVjWydtaW5pZmllciddID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBNaW5pZnlfU291cmNlKCRzcGVjKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgJF90eXBlID0gbnVsbDsKCiAgICAvKioKICAgICAqIE1ha2Ugc3VyZSB0aGF0IG9ubHkgc291cmNlIGZpbGVzIG9mIGEgc2luZ2xlIHR5cGUgYXJlIHJlZ2lzdGVyZWQKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzb3VyY2VPckV4dAogICAgICoKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1R5cGUoJHNvdXJjZU9yRXh0KQogICAgewogICAgICAgIGlmICgkc291cmNlT3JFeHQgPT09ICdqcycpIHsKICAgICAgICAgICAgJHR5cGUgPSBNaW5pZnk6OlRZUEVfSlM7CiAgICAgICAgfSBlbHNlaWYgKCRzb3VyY2VPckV4dCA9PT0gJ2NzcycpIHsKICAgICAgICAgICAgJHR5cGUgPSBNaW5pZnk6OlRZUEVfQ1NTOwogICAgICAgIH0gZWxzZWlmICgkc291cmNlT3JFeHQtPmNvbnRlbnRUeXBlICE9PSBudWxsKSB7CiAgICAgICAgICAgICR0eXBlID0gJHNvdXJjZU9yRXh0LT5jb250ZW50VHlwZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICgkdGhpcy0+X3R5cGUgPT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPl90eXBlID0gJHR5cGU7CiAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT5fdHlwZSAhPT0gJHR5cGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignQ29udGVudC1UeXBlIG1pc21hdGNoJyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Controller/Page.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Db250cm9sbGVyX1BhZ2UgIAogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKioKICogQ29udHJvbGxlciBjbGFzcyBmb3Igc2VydmluZyBhIHNpbmdsZSBIVE1MIHBhZ2UKICogCiAqIEBsaW5rIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9taW5pZnkvc291cmNlL2Jyb3dzZS90cnVuay93ZWIvZXhhbXBsZXMvMS9pbmRleC5waHAjNTkKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKi8KY2xhc3MgTWluaWZ5X0NvbnRyb2xsZXJfUGFnZSBleHRlbmRzIE1pbmlmeV9Db250cm9sbGVyX0Jhc2UgewogICAgCiAgICAvKioKICAgICAqIFNldCB1cCBzb3VyY2Ugb2YgSFRNTCBjb250ZW50CiAgICAgKiAKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBjb250cm9sbGVyIGFuZCBNaW5pZnkgb3B0aW9ucwogICAgICogQHJldHVybiBhcnJheSBNaW5pZnkgb3B0aW9ucwogICAgICogCiAgICAgKiBDb250cm9sbGVyIG9wdGlvbnM6CiAgICAgKiAKICAgICAqICdjb250ZW50JzogKHJlcXVpcmVkKSBIVE1MIG1hcmt1cAogICAgICogCiAgICAgKiAnaWQnOiAocmVxdWlyZWQpIGlkIG9mIHBhZ2UgKHN0cmluZyBmb3IgdXNlIGluIHNlcnZlci1zaWRlIGNhY2hpbmcpCiAgICAgKiAKICAgICAqICdsYXN0TW9kaWZpZWRUaW1lJzogdGltZXN0YW1wIG9mIHdoZW4gdGhpcyBjb250ZW50IGNoYW5nZWQuIFRoaXMKICAgICAqIGlzIHJlY29tbWVuZGVkIHRvIGFsbG93IGJvdGggc2VydmVyIGFuZCBjbGllbnQtc2lkZSBjYWNoaW5nLgogICAgICogCiAgICAgKiAnbWluaWZ5QWxsJzogc2hvdWxkIGFsbCBDU1MgYW5kIEphdmFzY3JpcHQgYmxvY2tzIGJlIGluZGl2aWR1YWxseSAKICAgICAqIG1pbmlmaWVkPyAoZGVmYXVsdCBmYWxzZSkgCiAgICAgKgogICAgICogQHRvZG8gQWRkICdmaWxlJyBvcHRpb24gdG8gcmVhZCBIVE1MIGZpbGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXR1cFNvdXJjZXMoJG9wdGlvbnMpIHsKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2ZpbGUnXSkpIHsKICAgICAgICAgICAgJHNvdXJjZVNwZWMgPSBhcnJheSgKICAgICAgICAgICAgICAgICdmaWxlcGF0aCcgPT4gJG9wdGlvbnNbJ2ZpbGUnXQogICAgICAgICAgICApOwogICAgICAgICAgICAkZiA9ICRvcHRpb25zWydmaWxlJ107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gc3RyaXAgY29udHJvbGxlciBvcHRpb25zCiAgICAgICAgICAgICRzb3VyY2VTcGVjID0gYXJyYXkoCiAgICAgICAgICAgICAgICAnY29udGVudCcgPT4gJG9wdGlvbnNbJ2NvbnRlbnQnXQogICAgICAgICAgICAgICAgLCdpZCcgPT4gJG9wdGlvbnNbJ2lkJ10KICAgICAgICAgICAgKTsKICAgICAgICAgICAgJGYgPSAkb3B0aW9uc1snaWQnXTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2NvbnRlbnQnXSwgJG9wdGlvbnNbJ2lkJ10pOwogICAgICAgIH0KICAgICAgICAvLyBzb21ldGhpbmcgbGlrZSAiYnVpbGRlcixpbmRleC5waHAiIG9yICJkaXJlY3RvcnksZmlsZS5odG1sIgogICAgICAgICR0aGlzLT5zZWxlY3Rpb25JZCA9IHN0cnRyKHN1YnN0cigkZiwgMSArIHN0cmxlbihkaXJuYW1lKGRpcm5hbWUoJGYpKSkpLCAnL1xcJywgJywsJyk7CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snbWluaWZ5QWxsJ10pKSB7CiAgICAgICAgICAgIC8vIHRoaXMgd2lsbCBiZSB0aGUgMm5kIGFyZ3VtZW50IHBhc3NlZCB0byBNaW5pZnlfSFRNTDo6bWluaWZ5KCkKICAgICAgICAgICAgJHNvdXJjZVNwZWNbJ21pbmlmeU9wdGlvbnMnXSA9IGFycmF5KAogICAgICAgICAgICAgICAgJ2Nzc01pbmlmaWVyJyA9PiBhcnJheSgnTWluaWZ5X0NTUycsICdtaW5pZnknKQogICAgICAgICAgICAgICAgLCdqc01pbmlmaWVyJyA9PiBhcnJheSgnSlNNaW4nLCAnbWluaWZ5JykKICAgICAgICAgICAgKTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ21pbmlmeUFsbCddKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnNvdXJjZXNbXSA9IG5ldyBNaW5pZnlfU291cmNlKCRzb3VyY2VTcGVjKTsKICAgICAgICAKICAgICAgICAkb3B0aW9uc1snY29udGVudFR5cGUnXSA9IE1pbmlmeTo6VFlQRV9IVE1MOwogICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Controller/Version1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Db250cm9sbGVyX1ZlcnNpb24xICAKICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKLyoqCiAqIENvbnRyb2xsZXIgY2xhc3MgZm9yIGVtdWxhdGluZyB2ZXJzaW9uIDEgb2YgbWluaWZ5LnBocCAobW9zdGx5IGEgcHJvb2Ytb2YtY29uY2VwdCkKICogCiAqIDxjb2RlPgogKiBNaW5pZnk6OnNlcnZlKCdWZXJzaW9uMScpOwogKiA8L2NvZGU+CiAqIAogKiBAcGFja2FnZSBNaW5pZnkKICogQGF1dGhvciBTdGVwaGVuIENsYXkgPHN0ZXZlQG1yY2xheS5vcmc+CiAqLwpjbGFzcyBNaW5pZnlfQ29udHJvbGxlcl9WZXJzaW9uMSBleHRlbmRzIE1pbmlmeV9Db250cm9sbGVyX0Jhc2UgewogICAgCiAgICAvKioKICAgICAqIFNldCB1cCBncm91cHMgb2YgZmlsZXMgYXMgc291cmNlcwogICAgICogCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgY29udHJvbGxlciBhbmQgTWluaWZ5IG9wdGlvbnMKICAgICAqIEByZXR1cm4gYXJyYXkgTWluaWZ5IG9wdGlvbnMKICAgICAqIAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0dXBTb3VyY2VzKCRvcHRpb25zKSB7CiAgICAgICAgc2VsZjo6X3NldHVwRGVmaW5lcygpOwogICAgICAgIGlmIChNSU5JRllfVVNFX0NBQ0hFKSB7CiAgICAgICAgICAgICRjYWNoZURpciA9IGRlZmluZWQoJ01JTklGWV9DQUNIRV9ESVInKQogICAgICAgICAgICAgICAgPyBNSU5JRllfQ0FDSEVfRElSCiAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgICAgICBNaW5pZnk6OnNldENhY2hlKCRjYWNoZURpcik7CiAgICAgICAgfQogICAgICAgICRvcHRpb25zWydiYWRSZXF1ZXN0SGVhZGVyJ10gPSAnSFRUUC8xLjAgNDA0IE5vdCBGb3VuZCc7CiAgICAgICAgJG9wdGlvbnNbJ2NvbnRlbnRUeXBlQ2hhcnNldCddID0gTUlOSUZZX0VOQ09ESU5HOwoKICAgICAgICAvLyBUaGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcmUgdG8gbGltaXQgdGhlIFVSTHMgdGhhdCBtaW5pZnkgd2lsbAogICAgICAgIC8vIHJlc3BvbmQgdG8uIElkZWFsbHkgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIHdheSB0byByZWZlcmVuY2UgYSBmaWxlLgogICAgICAgIGlmICghIGlzc2V0KCRfR0VUWydmaWxlcyddKQogICAgICAgICAgICAvLyB2ZXJpZnkgYXQgbGVhc3Qgb25lIGZpbGUsIGZpbGVzIGFyZSBzaW5nbGUgY29tbWEgc2VwYXJhdGVkLCAKICAgICAgICAgICAgLy8gYW5kIGFyZSBhbGwgc2FtZSBleHRlbnNpb24KICAgICAgICAgICAgfHwgISBwcmVnX21hdGNoKCcvXlteLF0rXFwuKGNzc3xqcykoLFteLF0rXFwuXFwxKSokLycsICRfR0VUWydmaWxlcyddLCAkbSkKICAgICAgICAgICAgLy8gbm8gIi8vIiAobWFrZXMgVVJMIHJld3JpdGluZyBlYXNpZXIpCiAgICAgICAgICAgIHx8IHN0cnBvcygkX0dFVFsnZmlsZXMnXSwgJy8vJykgIT09IGZhbHNlCiAgICAgICAgICAgIC8vIG5vICJcIgogICAgICAgICAgICB8fCBzdHJwb3MoJF9HRVRbJ2ZpbGVzJ10sICdcXCcpICE9PSBmYWxzZQogICAgICAgICAgICAvLyBubyAiLi8iCiAgICAgICAgICAgIHx8IHByZWdfbWF0Y2goJy8oPzpefFteXFwuXSlcXC5cXC8vJywgJF9HRVRbJ2ZpbGVzJ10pCiAgICAgICAgKSB7CiAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICB9CiAgICAgICAgJGV4dGVuc2lvbiA9ICRtWzFdOwogICAgICAgIAogICAgICAgICRmaWxlcyA9IGV4cGxvZGUoJywnLCAkX0dFVFsnZmlsZXMnXSk7CiAgICAgICAgaWYgKGNvdW50KCRmaWxlcykgPiBNSU5JRllfTUFYX0ZJTEVTKSB7CiAgICAgICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gc3RyaW5ncyBmb3IgcHJlcGVuZGluZyB0byByZWxhdGl2ZS9hYnNvbHV0ZSBwYXRocwogICAgICAgICRwcmVwZW5kUmVsUGF0aHMgPSBkaXJuYW1lKCRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSkKICAgICAgICAgICAgLiBESVJFQ1RPUllfU0VQQVJBVE9SOwogICAgICAgICRwcmVwZW5kQWJzUGF0aHMgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOwogICAgICAgIAogICAgICAgICRzb3VyY2VzID0gYXJyYXkoKTsKICAgICAgICAkZ29vZEZpbGVzID0gYXJyYXkoKTsKICAgICAgICAkaGFzQmFkU291cmNlID0gZmFsc2U7CiAgICAgICAgCiAgICAgICAgJGFsbG93RGlycyA9IGlzc2V0KCRvcHRpb25zWydhbGxvd0RpcnMnXSkKICAgICAgICAgICAgPyAkb3B0aW9uc1snYWxsb3dEaXJzJ10KICAgICAgICAgICAgOiBNSU5JRllfQkFTRV9ESVI7CiAgICAgICAgCiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7CiAgICAgICAgICAgIC8vIHByZXBlbmQgYXBwcm9wcmlhdGUgc3RyaW5nIGZvciBhYnMvcmVsIHBhdGhzCiAgICAgICAgICAgICRmaWxlID0gKCRmaWxlWzBdID09PSAnLycgPyAkcHJlcGVuZEFic1BhdGhzIDogJHByZXBlbmRSZWxQYXRocykgLiAkZmlsZTsKICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGEgcmVhbCBmaWxlIQogICAgICAgICAgICAkZmlsZSA9IHJlYWxwYXRoKCRmaWxlKTsKICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgdW5zYWZlIG9yIGR1cGxpY2F0ZSBmaWxlcwogICAgICAgICAgICBpZiAocGFyZW50OjpfZmlsZUlzU2FmZSgkZmlsZSwgJGFsbG93RGlycykgCiAgICAgICAgICAgICAgICAmJiAhaW5fYXJyYXkoJGZpbGUsICRnb29kRmlsZXMpKSAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJGdvb2RGaWxlc1tdID0gJGZpbGU7CiAgICAgICAgICAgICAgICAkc3JjT3B0aW9ucyA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICdmaWxlcGF0aCcgPT4gJGZpbGUKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkdGhpcy0+c291cmNlc1tdID0gbmV3IE1pbmlmeV9Tb3VyY2UoJHNyY09wdGlvbnMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGhhc0JhZFNvdXJjZSA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoJGhhc0JhZFNvdXJjZSkgewogICAgICAgICAgICAkdGhpcy0+c291cmNlcyA9IGFycmF5KCk7CiAgICAgICAgfQogICAgICAgIGlmICghIE1JTklGWV9SRVdSSVRFX0NTU19VUkxTKSB7CiAgICAgICAgICAgICRvcHRpb25zWydyZXdyaXRlQ3NzVXJpcyddID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3B0aW9uczsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX3NldHVwRGVmaW5lcygpCiAgICB7CiAgICAgICAgJGRlZmF1bHRzID0gYXJyYXkoCiAgICAgICAgICAgICdNSU5JRllfQkFTRV9ESVInID0+IHJlYWxwYXRoKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pCiAgICAgICAgICAgICwnTUlOSUZZX0VOQ09ESU5HJyA9PiAndXRmLTgnCiAgICAgICAgICAgICwnTUlOSUZZX01BWF9GSUxFUycgPT4gMTYKICAgICAgICAgICAgLCdNSU5JRllfUkVXUklURV9DU1NfVVJMUycgPT4gdHJ1ZQogICAgICAgICAgICAsJ01JTklGWV9VU0VfQ0FDSEUnID0+IHRydWUKICAgICAgICApOwogICAgICAgIGZvcmVhY2ggKCRkZWZhdWx0cyBhcyAkY29uc3QgPT4gJHZhbCkgewogICAgICAgICAgICBpZiAoISBkZWZpbmVkKCRjb25zdCkpIHsKICAgICAgICAgICAgICAgIGRlZmluZSgkY29uc3QsICR2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/CSS.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ2xhc3MgTWluaWZ5X0NTUyAgDQogKiBAcGFja2FnZSBNaW5pZnkNCiAqLw0KDQovKioNCiAqIE1pbmlmeSBDU1MNCiAqDQogKiBUaGlzIGNsYXNzIHVzZXMgTWluaWZ5X0NTU19Db21wcmVzc29yIGFuZCBNaW5pZnlfQ1NTX1VyaVJld3JpdGVyIHRvIA0KICogbWluaWZ5IENTUyBhbmQgcmV3cml0ZSByZWxhdGl2ZSBVUklzLg0KICogDQogKiBAcGFja2FnZSBNaW5pZnkNCiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPg0KICogQGF1dGhvciBodHRwOi8vY29kZS5nb29nbGUuY29tL3UvMXN0dmFtcC8gKElzc3VlIDY0IHBhdGNoKQ0KICovDQpjbGFzcyBNaW5pZnlfQ1NTIHsNCiAgICANCiAgICAvKioNCiAgICAgKiBNaW5pZnkgYSBDU1Mgc3RyaW5nDQogICAgICogDQogICAgICogQHBhcmFtIHN0cmluZyAkY3NzDQogICAgICogDQogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIGF2YWlsYWJsZSBvcHRpb25zOg0KICAgICAqIA0KICAgICAqICdwcmVzZXJ2ZUNvbW1lbnRzJzogKGRlZmF1bHQgdHJ1ZSkgbXVsdGktbGluZSBjb21tZW50cyB0aGF0IGJlZ2luDQogICAgICogd2l0aCAiLyohIiB3aWxsIGJlIHByZXNlcnZlZCB3aXRoIG5ld2xpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgdG8NCiAgICAgKiBlbmhhbmNlIHJlYWRhYmlsaXR5Lg0KICAgICAqDQogICAgICogJ3JlbW92ZUNoYXJzZXRzJzogKGRlZmF1bHQgdHJ1ZSkgcmVtb3ZlIGFsbCBAY2hhcnNldCBhdC1ydWxlcw0KICAgICAqIA0KICAgICAqICdwcmVwZW5kUmVsYXRpdmVQYXRoJzogKGRlZmF1bHQgbnVsbCkgaWYgZ2l2ZW4sIHRoaXMgc3RyaW5nIHdpbGwgYmUNCiAgICAgKiBwcmVwZW5kZWQgdG8gYWxsIHJlbGF0aXZlIFVSSXMgaW4gaW1wb3J0L3VybCBkZWNsYXJhdGlvbnMNCiAgICAgKiANCiAgICAgKiAnY3VycmVudERpcic6IChkZWZhdWx0IG51bGwpIGlmIGdpdmVuLCB0aGlzIGlzIGFzc3VtZWQgdG8gYmUgdGhlDQogICAgICogZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IENTUyBmaWxlLiBVc2luZyB0aGlzLCBtaW5pZnkgd2lsbCByZXdyaXRlDQogICAgICogYWxsIHJlbGF0aXZlIFVSSXMgaW4gaW1wb3J0L3VybCBkZWNsYXJhdGlvbnMgdG8gY29ycmVjdGx5IHBvaW50IHRvDQogICAgICogdGhlIGRlc2lyZWQgZmlsZXMuIEZvciB0aGlzIHRvIHdvcmssIHRoZSBmaWxlcyAqbXVzdCogZXhpc3QgYW5kIGJlDQogICAgICogdmlzaWJsZSBieSB0aGUgUEhQIHByb2Nlc3MuDQogICAgICoNCiAgICAgKiAnc3ltbGlua3MnOiAoZGVmYXVsdCA9IGFycmF5KCkpIElmIHRoZSBDU1MgZmlsZSBpcyBzdG9yZWQgaW4gDQogICAgICogYSBzeW1saW5rLWVkIGRpcmVjdG9yeSwgcHJvdmlkZSBhbiBhcnJheSBvZiBsaW5rIHBhdGhzIHRvDQogICAgICogdGFyZ2V0IHBhdGhzLCB3aGVyZSB0aGUgbGluayBwYXRocyBhcmUgd2l0aGluIHRoZSBkb2N1bWVudCByb290LiBCZWNhdXNlIA0KICAgICAqIHBhdGhzIG5lZWQgdG8gYmUgbm9ybWFsaXplZCBmb3IgdGhpcyB0byB3b3JrLCB1c2UgIi8vIiB0byBzdWJzdGl0dXRlIA0KICAgICAqIHRoZSBkb2Mgcm9vdCBpbiB0aGUgbGluayBwYXRocyAodGhlIGFycmF5IGtleXMpLiBFLmcuOg0KICAgICAqIDxjb2RlPg0KICAgICAqIGFycmF5KCcvL3N5bWxpbmsnID0+ICcvcmVhbC90YXJnZXQvcGF0aCcpIC8vIHVuaXgNCiAgICAgKiBhcnJheSgnLy9zdGF0aWMnID0+ICdEOlxcc3RhdGljU3RvcmFnZScpICAvLyBXaW5kb3dzDQogICAgICogPC9jb2RlPg0KICAgICAqDQogICAgICogJ2RvY1Jvb3QnOiAoZGVmYXVsdCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pDQogICAgICogc2VlIE1pbmlmeV9DU1NfVXJpUmV3cml0ZXI6OnJld3JpdGUNCiAgICAgKiANCiAgICAgKiBAcmV0dXJuIHN0cmluZw0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWluaWZ5KCRjc3MsICRvcHRpb25zID0gYXJyYXkoKSkgDQogICAgew0KICAgICAgICAkb3B0aW9ucyA9IGFycmF5X21lcmdlKGFycmF5KA0KICAgICAgICAgICAgJ2NvbXByZXNzJyA9PiB0cnVlLA0KICAgICAgICAgICAgJ3JlbW92ZUNoYXJzZXRzJyA9PiB0cnVlLA0KICAgICAgICAgICAgJ3ByZXNlcnZlQ29tbWVudHMnID0+IHRydWUsDQogICAgICAgICAgICAnY3VycmVudERpcicgPT4gbnVsbCwNCiAgICAgICAgICAgICdkb2NSb290JyA9PiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLA0KICAgICAgICAgICAgJ3ByZXBlbmRSZWxhdGl2ZVBhdGgnID0+IG51bGwsDQogICAgICAgICAgICAnc3ltbGlua3MnID0+IGFycmF5KCksDQogICAgICAgICksICRvcHRpb25zKTsNCiAgICAgICAgDQogICAgICAgIGlmICgkb3B0aW9uc1sncmVtb3ZlQ2hhcnNldHMnXSkgew0KICAgICAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnL0BjaGFyc2V0W147XSs7XFxzKi8nLCAnJywgJGNzcyk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRvcHRpb25zWydjb21wcmVzcyddKSB7DQogICAgICAgICAgICBpZiAoISAkb3B0aW9uc1sncHJlc2VydmVDb21tZW50cyddKSB7DQogICAgICAgICAgICAgICAgJGNzcyA9IE1pbmlmeV9DU1NfQ29tcHJlc3Nvcjo6cHJvY2VzcygkY3NzLCAkb3B0aW9ucyk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRjc3MgPSBNaW5pZnlfQ29tbWVudFByZXNlcnZlcjo6cHJvY2VzcygNCiAgICAgICAgICAgICAgICAgICAgJGNzcw0KICAgICAgICAgICAgICAgICAgICAsYXJyYXkoJ01pbmlmeV9DU1NfQ29tcHJlc3NvcicsICdwcm9jZXNzJykNCiAgICAgICAgICAgICAgICAgICAgLGFycmF5KCRvcHRpb25zKQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKCEgJG9wdGlvbnNbJ2N1cnJlbnREaXInXSAmJiAhICRvcHRpb25zWydwcmVwZW5kUmVsYXRpdmVQYXRoJ10pIHsNCiAgICAgICAgICAgIHJldHVybiAkY3NzOw0KICAgICAgICB9DQogICAgICAgIGlmICgkb3B0aW9uc1snY3VycmVudERpciddKSB7DQogICAgICAgICAgICByZXR1cm4gTWluaWZ5X0NTU19VcmlSZXdyaXRlcjo6cmV3cml0ZSgNCiAgICAgICAgICAgICAgICAkY3NzDQogICAgICAgICAgICAgICAgLCRvcHRpb25zWydjdXJyZW50RGlyJ10NCiAgICAgICAgICAgICAgICAsJG9wdGlvbnNbJ2RvY1Jvb3QnXQ0KICAgICAgICAgICAgICAgICwkb3B0aW9uc1snc3ltbGlua3MnXQ0KICAgICAgICAgICAgKTsgIA0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuIE1pbmlmeV9DU1NfVXJpUmV3cml0ZXI6OnByZXBlbmQoDQogICAgICAgICAgICAgICAgJGNzcw0KICAgICAgICAgICAgICAgICwkb3B0aW9uc1sncHJlcGVuZFJlbGF0aXZlUGF0aCddDQogICAgICAgICAgICApOw0KICAgICAgICB9DQogICAgfQ0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/CSS/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/Minify/CSS/Compressor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ2xhc3MgTWluaWZ5X0NTU19Db21wcmVzc29yIA0KICogQHBhY2thZ2UgTWluaWZ5DQogKi8NCg0KLyoqDQogKiBDb21wcmVzcyBDU1MNCiAqDQogKiBUaGlzIGlzIGEgaGVhdnkgcmVnZXgtYmFzZWQgcmVtb3ZhbCBvZiB3aGl0ZXNwYWNlLCB1bm5lY2Vzc2FyeQ0KICogY29tbWVudHMgYW5kIHRva2VucywgYW5kIHNvbWUgQ1NTIHZhbHVlIG1pbmltaXphdGlvbiwgd2hlcmUgcHJhY3RpY2FsLg0KICogTWFueSBzdGVwcyBoYXZlIGJlZW4gdGFrZW4gdG8gYXZvaWQgYnJlYWtpbmcgY29tbWVudC1iYXNlZCBoYWNrcywgDQogKiBpbmNsdWRpbmcgdGhlIGllNS9tYWMgZmlsdGVyIChhbmQgaXRzIGludmVyc2lvbiksIGJ1dCBleHBlY3QgdHJpY2t5DQogKiBoYWNrcyBpbnZvbHZpbmcgY29tbWVudCB0b2tlbnMgaW4gJ2NvbnRlbnQnIHZhbHVlIHN0cmluZ3MgdG8gYnJlYWsNCiAqIG1pbmltaXphdGlvbiBiYWRseS4gQSB0ZXN0IHN1aXRlIGlzIGF2YWlsYWJsZS4NCiAqIA0KICogQHBhY2thZ2UgTWluaWZ5DQogKiBAYXV0aG9yIFN0ZXBoZW4gQ2xheSA8c3RldmVAbXJjbGF5Lm9yZz4NCiAqIEBhdXRob3IgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS91LzFzdHZhbXAvIChJc3N1ZSA2NCBwYXRjaCkNCiAqLw0KY2xhc3MgTWluaWZ5X0NTU19Db21wcmVzc29yIHsNCg0KICAgIC8qKg0KICAgICAqIE1pbmlmeSBhIENTUyBzdHJpbmcNCiAgICAgKiANCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjc3MNCiAgICAgKiANCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgKGN1cnJlbnRseSBpZ25vcmVkKQ0KICAgICAqIA0KICAgICAqIEByZXR1cm4gc3RyaW5nDQogICAgICovDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcm9jZXNzKCRjc3MsICRvcHRpb25zID0gYXJyYXkoKSkNCiAgICB7DQogICAgICAgICRvYmogPSBuZXcgTWluaWZ5X0NTU19Db21wcmVzc29yKCRvcHRpb25zKTsNCiAgICAgICAgcmV0dXJuICRvYmotPl9wcm9jZXNzKCRjc3MpOw0KICAgIH0NCiAgICANCiAgICAvKioNCiAgICAgKiBAdmFyIGFycmF5DQogICAgICovDQogICAgcHJvdGVjdGVkICRfb3B0aW9ucyA9IG51bGw7DQogICAgDQogICAgLyoqDQogICAgICogQXJlIHdlICJpbiIgYSBoYWNrPyBJLmUuIGFyZSBzb21lIGJyb3dzZXJzIHRhcmdldHRlZCB1bnRpbCB0aGUgbmV4dCBjb21tZW50Pw0KICAgICAqDQogICAgICogQHZhciBib29sDQogICAgICovDQogICAgcHJvdGVjdGVkICRfaW5IYWNrID0gZmFsc2U7DQogICAgDQogICAgDQogICAgLyoqDQogICAgICogQ29uc3RydWN0b3INCiAgICAgKiANCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgKGN1cnJlbnRseSBpZ25vcmVkKQ0KICAgICAqLw0KICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9wdGlvbnMpIHsNCiAgICAgICAgJHRoaXMtPl9vcHRpb25zID0gJG9wdGlvbnM7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIE1pbmlmeSBhIENTUyBzdHJpbmcNCiAgICAgKiANCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjc3MNCiAgICAgKiANCiAgICAgKiBAcmV0dXJuIHN0cmluZw0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfcHJvY2VzcygkY3NzKQ0KICAgIHsNCiAgICAgICAgJGNzcyA9IHN0cl9yZXBsYWNlKCJcclxuIiwgIlxuIiwgJGNzcyk7DQogICAgICAgIA0KICAgICAgICAvLyBwcmVzZXJ2ZSBlbXB0eSBjb21tZW50IGFmdGVyICc+Jw0KICAgICAgICAvLyBodHRwOi8vd3d3LndlYmRldm91dC5uZXQvY3NzLWhhY2tzI2luX2Nzcy1zZWxlY3RvcnMNCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnQD4vXFwqXFxzKlxcKi9AJywgJz4vKmtlZXAqLycsICRjc3MpOw0KICAgICAgICANCiAgICAgICAgLy8gcHJlc2VydmUgZW1wdHkgY29tbWVudCBiZXR3ZWVuIHByb3BlcnR5IGFuZCB2YWx1ZQ0KICAgICAgICAvLyBodHRwOi8vY3NzLWRpc2N1c3MuaW5jdXRpby5jb20vP3BhZ2U9Qm94TW9kZWxIYWNrDQogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJ0AvXFwqXFxzKlxcKi9cXHMqOkAnLCAnLyprZWVwKi86JywgJGNzcyk7DQogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJ0A6XFxzKi9cXCpcXHMqXFwqL0AnLCAnOi8qa2VlcCovJywgJGNzcyk7DQogICAgICAgIA0KICAgICAgICAvLyBhcHBseSBjYWxsYmFjayB0byBhbGwgdmFsaWQgY29tbWVudHMgKGFuZCBzdHJpcCBvdXQgc3Vycm91bmRpbmcgd3MNCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnQFxccyovXFwqKFtcXHNcXFNdKj8pXFwqL1xccypAJw0KICAgICAgICAgICAgLGFycmF5KCR0aGlzLCAnX2NvbW1lbnRDQicpLCAkY3NzKTsNCg0KICAgICAgICAvLyByZW1vdmUgd3MgYXJvdW5kIHsgfSBhbmQgbGFzdCBzZW1pY29sb24gaW4gZGVjbGFyYXRpb24gYmxvY2sNCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnL1xccyp7XFxzKi8nLCAneycsICRjc3MpOw0KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvOz9cXHMqfVxccyovJywgJ30nLCAkY3NzKTsNCiAgICAgICAgDQogICAgICAgIC8vIHJlbW92ZSB3cyBzdXJyb3VuZGluZyBzZW1pY29sb25zDQogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy9cXHMqO1xccyovJywgJzsnLCAkY3NzKTsNCiAgICAgICAgDQogICAgICAgIC8vIHJlbW92ZSB3cyBhcm91bmQgdXJscw0KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvDQogICAgICAgICAgICAgICAgdXJsXFwoICAgICAgIyB1cmwoDQogICAgICAgICAgICAgICAgXFxzKg0KICAgICAgICAgICAgICAgIChbXlxcKV0rPykgICMgMSA9IHRoZSBVUkwgKHJlYWxseSBqdXN0IGEgYnVuY2ggb2Ygbm9uIHJpZ2h0IHBhcmVudGhlc2lzKQ0KICAgICAgICAgICAgICAgIFxccyoNCiAgICAgICAgICAgICAgICBcXCkgICAgICAgICAjICkNCiAgICAgICAgICAgIC94JywgJ3VybCgkMSknLCAkY3NzKTsNCiAgICAgICAgDQogICAgICAgIC8vIHJlbW92ZSB3cyBiZXR3ZWVuIHJ1bGVzIGFuZCBjb2xvbnMNCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLw0KICAgICAgICAgICAgICAgIFxccyoNCiAgICAgICAgICAgICAgICAoW3s7XSkgICAgICAgICAgICAgICMgMSA9IGJlZ2lubmluZyBvZiBibG9jayBvciBydWxlIHNlcGFyYXRvciANCiAgICAgICAgICAgICAgICBcXHMqDQogICAgICAgICAgICAgICAgKFtcXCpfXT9bXFx3XFwtXSspICAjIDIgPSBwcm9wZXJ0eSAoYW5kIG1heWJlIElFIGZpbHRlcikNCiAgICAgICAgICAgICAgICBcXHMqDQogICAgICAgICAgICAgICAgOg0KICAgICAgICAgICAgICAgIFxccyoNCiAgICAgICAgICAgICAgICAoXFxifFsjXCciLV0pICAgICAgICAjIDMgPSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSB2YWx1ZQ0KICAgICAgICAgICAgL3gnLCAnJDEkMjokMycsICRjc3MpOw0KICAgICAgICANCiAgICAgICAgLy8gcmVtb3ZlIHdzIGluIHNlbGVjdG9ycw0KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvDQogICAgICAgICAgICAgICAgKD86ICAgICAgICAgICAgICAjIG5vbi1jYXB0dXJlDQogICAgICAgICAgICAgICAgICAgIFxccyoNCiAgICAgICAgICAgICAgICAgICAgW15+PissXFxzXSsgICMgc2VsZWN0b3IgcGFydA0KICAgICAgICAgICAgICAgICAgICBcXHMqDQogICAgICAgICAgICAgICAgICAgIFssPit+XSAgICAgICAjIGNvbWJpbmF0b3JzDQogICAgICAgICAgICAgICAgKSsNCiAgICAgICAgICAgICAgICBcXHMqDQogICAgICAgICAgICAgICAgW15+PissXFxzXSsgICAgICAjIHNlbGVjdG9yIHBhcnQNCiAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICMgb3BlbiBkZWNsYXJhdGlvbiBibG9jaw0KICAgICAgICAgICAgL3gnDQogICAgICAgICAgICAsYXJyYXkoJHRoaXMsICdfc2VsZWN0b3JzQ0InKSwgJGNzcyk7DQogICAgICAgIA0KICAgICAgICAvLyBtaW5pbWl6ZSBoZXggY29sb3JzDQogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy8oW149XSkjKFthLWZcXGRdKVxcMihbYS1mXFxkXSlcXDMoW2EtZlxcZF0pXFw0KFtcXHM7XFx9XSkvaScNCiAgICAgICAgICAgICwgJyQxIyQyJDMkNCQ1JywgJGNzcyk7DQogICAgICAgIA0KICAgICAgICAvLyByZW1vdmUgc3BhY2VzIGJldHdlZW4gZm9udCBmYW1pbGllcw0KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvZm9udC1mYW1pbHk6KFteO31dKykoWzt9XSkvJw0KICAgICAgICAgICAgLGFycmF5KCR0aGlzLCAnX2ZvbnRGYW1pbHlDQicpLCAkY3NzKTsNCiAgICAgICAgDQogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoJy9AaW1wb3J0XFxzK3VybC8nLCAnQGltcG9ydCB1cmwnLCAkY3NzKTsNCiAgICAgICAgDQogICAgICAgIC8vIHJlcGxhY2UgYW55IHdzIGludm9sdmluZyBuZXdsaW5lcyB3aXRoIGEgc2luZ2xlIG5ld2xpbmUNCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnL1sgXFx0XSpcXG4rXFxzKi8nLCAiXG4iLCAkY3NzKTsNCiAgICAgICAgDQogICAgICAgIC8vIHNlcGFyYXRlIGNvbW1vbiBkZXNjZW5kZW50IHNlbGVjdG9ycyB3LyBuZXdsaW5lcyAodG8gbGltaXQgbGluZSBsZW5ndGhzKQ0KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvKFtcXHcjXFwuXFwqXSspXFxzKyhbXFx3I1xcLlxcKl0rKXsvJywgIiQxXG4kMnsiLCAkY3NzKTsNCiAgICAgICAgDQogICAgICAgIC8vIFVzZSBuZXdsaW5lIGFmdGVyIDFzdCBudW1lcmljIHZhbHVlICh0byBsaW1pdCBsaW5lIGxlbmd0aHMpLg0KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvDQogICAgICAgICAgICAoKD86cGFkZGluZ3xtYXJnaW58Ym9yZGVyfG91dGxpbmUpOlxcZCsoPzpweHxlbSk/KSAjIDEgPSBwcm9wIDogMXN0IG51bWVyaWMgdmFsdWUNCiAgICAgICAgICAgIFxccysNCiAgICAgICAgICAgIC94Jw0KICAgICAgICAgICAgLCIkMVxuIiwgJGNzcyk7DQogICAgICAgIA0KICAgICAgICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgSUU2IGJ1ZzogaHR0cDovL3d3dy5jcmFua3lnZWVrLmNvbS9pZTZwZWJ1Zy8NCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLzpmaXJzdC1sKGV0dGVyfGluZSlcXHsvJywgJzpmaXJzdC1sJDEgeycsICRjc3MpOw0KICAgICAgICAgICAgDQogICAgICAgIHJldHVybiB0cmltKCRjc3MpOw0KICAgIH0NCiAgICANCiAgICAvKioNCiAgICAgKiBSZXBsYWNlIHdoYXQgbG9va3MgbGlrZSBhIHNldCBvZiBzZWxlY3RvcnMgIA0KICAgICAqDQogICAgICogQHBhcmFtIGFycmF5ICRtIHJlZ2V4IG1hdGNoZXMNCiAgICAgKiANCiAgICAgKiBAcmV0dXJuIHN0cmluZw0KICAgICAqLw0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfc2VsZWN0b3JzQ0IoJG0pDQogICAgew0KICAgICAgICAvLyByZW1vdmUgd3MgYXJvdW5kIHRoZSBjb21iaW5hdG9ycw0KICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlKCcvXFxzKihbLD4rfl0pXFxzKi8nLCAnJDEnLCAkbVswXSk7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIFByb2Nlc3MgYSBjb21tZW50IGFuZCByZXR1cm4gYSByZXBsYWNlbWVudA0KICAgICAqIA0KICAgICAqIEBwYXJhbSBhcnJheSAkbSByZWdleCBtYXRjaGVzDQogICAgICogDQogICAgICogQHJldHVybiBzdHJpbmcNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2NvbW1lbnRDQigkbSkNCiAgICB7DQogICAgICAgICRoYXNTdXJyb3VuZGluZ1dzID0gKHRyaW0oJG1bMF0pICE9PSAkbVsxXSk7DQogICAgICAgICRtID0gJG1bMV07IA0KICAgICAgICAvLyAkbSBpcyB0aGUgY29tbWVudCBjb250ZW50IHcvbyB0aGUgc3Vycm91bmRpbmcgdG9rZW5zLCANCiAgICAgICAgLy8gYnV0IHRoZSByZXR1cm4gdmFsdWUgd2lsbCByZXBsYWNlIHRoZSBlbnRpcmUgY29tbWVudC4NCiAgICAgICAgaWYgKCRtID09PSAna2VlcCcpIHsNCiAgICAgICAgICAgIHJldHVybiAnLyoqLyc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRtID09PSAnIiAiJykgew0KICAgICAgICAgICAgLy8gY29tcG9uZW50IG9mIGh0dHA6Ly90YW50ZWsuY29tL0NTUy9FeGFtcGxlcy9taWRwYXNzLmh0bWwNCiAgICAgICAgICAgIHJldHVybiAnLyoiICIqLyc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKHByZWdfbWF0Y2goJ0AiO1xcfVxccypcXH0vXFwqXFxzK0AnLCAkbSkpIHsNCiAgICAgICAgICAgIC8vIGNvbXBvbmVudCBvZiBodHRwOi8vdGFudGVrLmNvbS9DU1MvRXhhbXBsZXMvbWlkcGFzcy5odG1sDQogICAgICAgICAgICByZXR1cm4gJy8qIjt9fS8qICovJzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJHRoaXMtPl9pbkhhY2spIHsNCiAgICAgICAgICAgIC8vIGludmVyc2lvbjogZmVlZGluZyBvbmx5IHRvIG9uZSBicm93c2VyDQogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnQA0KICAgICAgICAgICAgICAgICAgICBeLyAgICAgICAgICAgICAgICMgY29tbWVudCBzdGFydGVkIGxpa2UgLyovDQogICAgICAgICAgICAgICAgICAgIFxccyoNCiAgICAgICAgICAgICAgICAgICAgKFxcU1tcXHNcXFNdKz8pICAjIGhhcyBhdCBsZWFzdCBzb21lIG5vbi13cyBjb250ZW50DQogICAgICAgICAgICAgICAgICAgIFxccyoNCiAgICAgICAgICAgICAgICAgICAgL1xcKiAgICAgICAgICAgICAjIGVuZHMgbGlrZSAvKi8gb3IgLyoqLw0KICAgICAgICAgICAgICAgIEB4JywgJG0sICRuKSkgew0KICAgICAgICAgICAgICAgIC8vIGVuZCBoYWNrIG1vZGUgYWZ0ZXIgdGhpcyBjb21tZW50LCBidXQgcHJlc2VydmUgdGhlIGhhY2sgYW5kIGNvbW1lbnQgY29udGVudA0KICAgICAgICAgICAgICAgICR0aGlzLT5faW5IYWNrID0gZmFsc2U7DQogICAgICAgICAgICAgICAgcmV0dXJuICIvKi97JG5bMV19LyoqLyI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKHN1YnN0cigkbSwgLTEpID09PSAnXFwnKSB7IC8vIGNvbW1lbnQgZW5kcyBsaWtlIFwqLw0KICAgICAgICAgICAgLy8gYmVnaW4gaGFjayBtb2RlIGFuZCBwcmVzZXJ2ZSBoYWNrDQogICAgICAgICAgICAkdGhpcy0+X2luSGFjayA9IHRydWU7DQogICAgICAgICAgICByZXR1cm4gJy8qXFwqLyc7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRtICE9PSAnJyAmJiAkbVswXSA9PT0gJy8nKSB7IC8vIGNvbW1lbnQgbG9va3MgbGlrZSAvKi8gZm9vICovDQogICAgICAgICAgICAvLyBiZWdpbiBoYWNrIG1vZGUgYW5kIHByZXNlcnZlIGhhY2sNCiAgICAgICAgICAgICR0aGlzLT5faW5IYWNrID0gdHJ1ZTsNCiAgICAgICAgICAgIHJldHVybiAnLyovKi8nOw0KICAgICAgICB9DQogICAgICAgIGlmICgkdGhpcy0+X2luSGFjaykgew0KICAgICAgICAgICAgLy8gYSByZWd1bGFyIGNvbW1lbnQgZW5kcyBoYWNrIG1vZGUgYnV0IHNob3VsZCBiZSBwcmVzZXJ2ZWQNCiAgICAgICAgICAgICR0aGlzLT5faW5IYWNrID0gZmFsc2U7DQogICAgICAgICAgICByZXR1cm4gJy8qKi8nOw0KICAgICAgICB9DQogICAgICAgIC8vIElzc3VlIDEwNzogaWYgdGhlcmUncyBhbnkgc3Vycm91bmRpbmcgd2hpdGVzcGFjZSwgaXQgbWF5IGJlIGltcG9ydGFudCwgc28gDQogICAgICAgIC8vIHJlcGxhY2UgdGhlIGNvbW1lbnQgd2l0aCBhIHNpbmdsZSBzcGFjZQ0KICAgICAgICByZXR1cm4gJGhhc1N1cnJvdW5kaW5nV3MgLy8gcmVtb3ZlIGFsbCBvdGhlciBjb21tZW50cw0KICAgICAgICAgICAgPyAnICcNCiAgICAgICAgICAgIDogJyc7DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIFByb2Nlc3MgYSBmb250LWZhbWlseSBsaXN0aW5nIGFuZCByZXR1cm4gYSByZXBsYWNlbWVudA0KICAgICAqIA0KICAgICAqIEBwYXJhbSBhcnJheSAkbSByZWdleCBtYXRjaGVzDQogICAgICogDQogICAgICogQHJldHVybiBzdHJpbmcgICANCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2ZvbnRGYW1pbHlDQigkbSkNCiAgICB7DQogICAgICAgIC8vIElzc3VlIDIxMDogbXVzdCBub3QgZWxpbWluYXRlIFdTIGJldHdlZW4gd29yZHMgaW4gdW5xdW90ZWQgZmFtaWxpZXMNCiAgICAgICAgJHBpZWNlcyA9IHByZWdfc3BsaXQoJy8oXCdbXlwnXStcJ3wiW14iXSsiKS8nLCAkbVsxXSwgbnVsbCwgUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFIHwgUFJFR19TUExJVF9OT19FTVBUWSk7DQogICAgICAgICRvdXQgPSAnZm9udC1mYW1pbHk6JzsNCiAgICAgICAgd2hpbGUgKG51bGwgIT09ICgkcGllY2UgPSBhcnJheV9zaGlmdCgkcGllY2VzKSkpIHsNCiAgICAgICAgICAgIGlmICgkcGllY2VbMF0gIT09ICciJyAmJiAkcGllY2VbMF0gIT09ICInIikgew0KICAgICAgICAgICAgICAgICRwaWVjZSA9IHByZWdfcmVwbGFjZSgnL1xccysvJywgJyAnLCAkcGllY2UpOw0KICAgICAgICAgICAgICAgICRwaWVjZSA9IHByZWdfcmVwbGFjZSgnL1xccz8sXFxzPy8nLCAnLCcsICRwaWVjZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkb3V0IC49ICRwaWVjZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJG91dCAuICRtWzJdOw0KICAgIH0NCn0NCg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/CSS/UriRewriter.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9DU1NfVXJpUmV3cml0ZXIgIAogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKioKICogUmV3cml0ZSBmaWxlLXJlbGF0aXZlIFVSSXMgYXMgcm9vdC1yZWxhdGl2ZSBpbiBDU1MgZmlsZXMKICoKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKi8KY2xhc3MgTWluaWZ5X0NTU19VcmlSZXdyaXRlciB7CiAgICAKICAgIC8qKgogICAgICogcmV3cml0ZSgpIGFuZCByZXdyaXRlUmVsYXRpdmUoKSBhcHBlbmQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGhlcmUKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljICRkZWJ1Z1RleHQgPSAnJzsKICAgIAogICAgLyoqCiAgICAgKiBJbiBDU1MgY29udGVudCwgcmV3cml0ZSBmaWxlIHJlbGF0aXZlIFVSSXMgYXMgcm9vdCByZWxhdGl2ZQogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjc3MKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZyAkY3VycmVudERpciBUaGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IENTUyBmaWxlLgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkb2NSb290IFRoZSBkb2N1bWVudCByb290IG9mIHRoZSB3ZWIgc2l0ZSBpbiB3aGljaCAKICAgICAqIHRoZSBDU1MgZmlsZSByZXNpZGVzIChkZWZhdWx0ID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSkuCiAgICAgKiAKICAgICAqIEBwYXJhbSBhcnJheSAkc3ltbGlua3MgKGRlZmF1bHQgPSBhcnJheSgpKSBJZiB0aGUgQ1NTIGZpbGUgaXMgc3RvcmVkIGluIAogICAgICogYSBzeW1saW5rLWVkIGRpcmVjdG9yeSwgcHJvdmlkZSBhbiBhcnJheSBvZiBsaW5rIHBhdGhzIHRvCiAgICAgKiB0YXJnZXQgcGF0aHMsIHdoZXJlIHRoZSBsaW5rIHBhdGhzIGFyZSB3aXRoaW4gdGhlIGRvY3VtZW50IHJvb3QuIEJlY2F1c2UgCiAgICAgKiBwYXRocyBuZWVkIHRvIGJlIG5vcm1hbGl6ZWQgZm9yIHRoaXMgdG8gd29yaywgdXNlICIvLyIgdG8gc3Vic3RpdHV0ZSAKICAgICAqIHRoZSBkb2Mgcm9vdCBpbiB0aGUgbGluayBwYXRocyAodGhlIGFycmF5IGtleXMpLiBFLmcuOgogICAgICogPGNvZGU+CiAgICAgKiBhcnJheSgnLy9zeW1saW5rJyA9PiAnL3JlYWwvdGFyZ2V0L3BhdGgnKSAvLyB1bml4CiAgICAgKiBhcnJheSgnLy9zdGF0aWMnID0+ICdEOlxcc3RhdGljU3RvcmFnZScpICAvLyBXaW5kb3dzCiAgICAgKiA8L2NvZGU+CiAgICAgKiAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV3cml0ZSgkY3NzLCAkY3VycmVudERpciwgJGRvY1Jvb3QgPSBudWxsLCAkc3ltbGlua3MgPSBhcnJheSgpKSAKICAgIHsKICAgICAgICBzZWxmOjokX2RvY1Jvb3QgPSBzZWxmOjpfcmVhbHBhdGgoCiAgICAgICAgICAgICRkb2NSb290ID8gJGRvY1Jvb3QgOiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddCiAgICAgICAgKTsKICAgICAgICBzZWxmOjokX2N1cnJlbnREaXIgPSBzZWxmOjpfcmVhbHBhdGgoJGN1cnJlbnREaXIpOwogICAgICAgIHNlbGY6OiRfc3ltbGlua3MgPSBhcnJheSgpOwogICAgICAgIAogICAgICAgIC8vIG5vcm1hbGl6ZSBzeW1saW5rcwogICAgICAgIGZvcmVhY2ggKCRzeW1saW5rcyBhcyAkbGluayA9PiAkdGFyZ2V0KSB7CiAgICAgICAgICAgICRsaW5rID0gKCRsaW5rID09PSAnLy8nKQogICAgICAgICAgICAgICAgPyBzZWxmOjokX2RvY1Jvb3QKICAgICAgICAgICAgICAgIDogc3RyX3JlcGxhY2UoJy8vJywgc2VsZjo6JF9kb2NSb290IC4gJy8nLCAkbGluayk7CiAgICAgICAgICAgICRsaW5rID0gc3RydHIoJGxpbmssICcvJywgRElSRUNUT1JZX1NFUEFSQVRPUik7CiAgICAgICAgICAgIHNlbGY6OiRfc3ltbGlua3NbJGxpbmtdID0gc2VsZjo6X3JlYWxwYXRoKCR0YXJnZXQpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBzZWxmOjokZGVidWdUZXh0IC49ICJkb2NSb290ICAgIDogIiAuIHNlbGY6OiRfZG9jUm9vdCAuICJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAuICJjdXJyZW50RGlyIDogIiAuIHNlbGY6OiRfY3VycmVudERpciAuICJcbiI7CiAgICAgICAgaWYgKHNlbGY6OiRfc3ltbGlua3MpIHsKICAgICAgICAgICAgc2VsZjo6JGRlYnVnVGV4dCAuPSAic3ltbGlua3MgOiAiIC4gdmFyX2V4cG9ydChzZWxmOjokX3N5bWxpbmtzLCAxKSAuICJcbiI7CiAgICAgICAgfQogICAgICAgIHNlbGY6OiRkZWJ1Z1RleHQgLj0gIlxuIjsKICAgICAgICAKICAgICAgICAkY3NzID0gc2VsZjo6X3RyaW1VcmxzKCRjc3MpOwogICAgICAgIAogICAgICAgIC8vIHJld3JpdGUKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvQGltcG9ydFxccysoW1wnIl0pKC4qPylbXCciXS8nCiAgICAgICAgICAgICxhcnJheShzZWxmOjokY2xhc3NOYW1lLCAnX3Byb2Nlc3NVcmlDQicpLCAkY3NzKTsKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvdXJsXFwoXFxzKihbXlxcKVxcc10rKVxccypcXCkvJwogICAgICAgICAgICAsYXJyYXkoc2VsZjo6JGNsYXNzTmFtZSwgJ19wcm9jZXNzVXJpQ0InKSwgJGNzcyk7CgogICAgICAgIHJldHVybiAkY3NzOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEluIENTUyBjb250ZW50LCBwcmVwZW5kIGEgcGF0aCB0byByZWxhdGl2ZSBVUklzCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNzcwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBwYXRoIHRvIHByZXBlbmQuCiAgICAgKiAKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJlcGVuZCgkY3NzLCAkcGF0aCkKICAgIHsKICAgICAgICBzZWxmOjokX3ByZXBlbmRQYXRoID0gJHBhdGg7CiAgICAgICAgCiAgICAgICAgJGNzcyA9IHNlbGY6Ol90cmltVXJscygkY3NzKTsKICAgICAgICAKICAgICAgICAvLyBhcHBlbmQKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvQGltcG9ydFxccysoW1wnIl0pKC4qPylbXCciXS8nCiAgICAgICAgICAgICxhcnJheShzZWxmOjokY2xhc3NOYW1lLCAnX3Byb2Nlc3NVcmlDQicpLCAkY3NzKTsKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvdXJsXFwoXFxzKihbXlxcKVxcc10rKVxccypcXCkvJwogICAgICAgICAgICAsYXJyYXkoc2VsZjo6JGNsYXNzTmFtZSwgJ19wcm9jZXNzVXJpQ0InKSwgJGNzcyk7CgogICAgICAgIHNlbGY6OiRfcHJlcGVuZFBhdGggPSBudWxsOwogICAgICAgIHJldHVybiAkY3NzOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCBhIHJvb3QgcmVsYXRpdmUgVVJJIGZyb20gYSBmaWxlIHJlbGF0aXZlIFVSSQogICAgICoKICAgICAqIDxjb2RlPgogICAgICogTWluaWZ5X0NTU19VcmlSZXdyaXRlcjo6cmV3cml0ZVJlbGF0aXZlKAogICAgICogICAgICAgJy4uL2ltZy9oZWxsby5naWYnCiAgICAgKiAgICAgLCAnL2hvbWUvdXNlci93d3cvY3NzJyAgLy8gcGF0aCBvZiBDU1MgZmlsZQogICAgICogICAgICwgJy9ob21lL3VzZXIvd3d3JyAgICAgIC8vIGRvYyByb290CiAgICAgKiApOwogICAgICogLy8gcmV0dXJucyAnL2ltZy9oZWxsby5naWYnCiAgICAgKiAKICAgICAqIC8vIGV4YW1wbGUgd2hlcmUgc3RhdGljIGZpbGVzIGFyZSBzdG9yZWQgaW4gYSBzeW1saW5rZWQgZGlyZWN0b3J5CiAgICAgKiBNaW5pZnlfQ1NTX1VyaVJld3JpdGVyOjpyZXdyaXRlUmVsYXRpdmUoCiAgICAgKiAgICAgICAnaGVsbG8uZ2lmJwogICAgICogICAgICwgJy92YXIvc3RhdGljRmlsZXMvdGhlbWUnCiAgICAgKiAgICAgLCAnL2hvbWUvdXNlci93d3cnCiAgICAgKiAgICAgLCBhcnJheSgnL2hvbWUvdXNlci93d3cvc3RhdGljJyA9PiAnL3Zhci9zdGF0aWNGaWxlcycpCiAgICAgKiApOwogICAgICogLy8gcmV0dXJucyAnL3N0YXRpYy90aGVtZS9oZWxsby5naWYnCiAgICAgKiA8L2NvZGU+CiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHVyaSBmaWxlIHJlbGF0aXZlIFVSSQogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWFsQ3VycmVudERpciByZWFscGF0aCBvZiB0aGUgY3VycmVudCBmaWxlJ3MgZGlyZWN0b3J5LgogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRyZWFsRG9jUm9vdCByZWFscGF0aCBvZiB0aGUgc2l0ZSBkb2N1bWVudCByb290LgogICAgICogCiAgICAgKiBAcGFyYW0gYXJyYXkgJHN5bWxpbmtzIChkZWZhdWx0ID0gYXJyYXkoKSkgSWYgdGhlIGZpbGUgaXMgc3RvcmVkIGluIAogICAgICogYSBzeW1saW5rLWVkIGRpcmVjdG9yeSwgcHJvdmlkZSBhbiBhcnJheSBvZiBsaW5rIHBhdGhzIHRvCiAgICAgKiByZWFsIHRhcmdldCBwYXRocywgd2hlcmUgdGhlIGxpbmsgcGF0aHMgImFwcGVhciIgdG8gYmUgd2l0aGluIHRoZSBkb2N1bWVudCAKICAgICAqIHJvb3QuIEUuZy46CiAgICAgKiA8Y29kZT4KICAgICAqIGFycmF5KCcvaG9tZS9mb28vd3d3L25vdC9yZWFsL3BhdGgnID0+ICcvcmVhbC90YXJnZXQvcGF0aCcpIC8vIHVuaXgKICAgICAqIGFycmF5KCdDOlxcaHRkb2NzXFxub3RcXHJlYWwnID0+ICdEOlxccmVhbFxcdGFyZ2V0XFxwYXRoJykgIC8vIFdpbmRvd3MKICAgICAqIDwvY29kZT4KICAgICAqIAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXdyaXRlUmVsYXRpdmUoJHVyaSwgJHJlYWxDdXJyZW50RGlyLCAkcmVhbERvY1Jvb3QsICRzeW1saW5rcyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgLy8gcHJlcGVuZCBwYXRoIHdpdGggY3VycmVudCBkaXIgc2VwYXJhdG9yIChPUy1pbmRlcGVuZGVudCkKICAgICAgICAkcGF0aCA9IHN0cnRyKCRyZWFsQ3VycmVudERpciwgJy8nLCBESVJFQ1RPUllfU0VQQVJBVE9SKSAgCiAgICAgICAgICAgIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHN0cnRyKCR1cmksICcvJywgRElSRUNUT1JZX1NFUEFSQVRPUik7CiAgICAgICAgCiAgICAgICAgc2VsZjo6JGRlYnVnVGV4dCAuPSAiZmlsZS1yZWxhdGl2ZSBVUkkgIDogeyR1cml9XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgLiAicGF0aCBwcmVwZW5kZWQgICAgIDogeyRwYXRofVxuIjsKICAgICAgICAKICAgICAgICAvLyAidW5yZXNvbHZlIiBhIHN5bWxpbmsgYmFjayB0byBkb2Mgcm9vdAogICAgICAgIGZvcmVhY2ggKCRzeW1saW5rcyBhcyAkbGluayA9PiAkdGFyZ2V0KSB7CiAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJHBhdGgsICR0YXJnZXQpKSB7CiAgICAgICAgICAgICAgICAvLyByZXBsYWNlICR0YXJnZXQgd2l0aCAkbGluawogICAgICAgICAgICAgICAgJHBhdGggPSAkbGluayAuIHN1YnN0cigkcGF0aCwgc3RybGVuKCR0YXJnZXQpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc2VsZjo6JGRlYnVnVGV4dCAuPSAic3ltbGluayB1bnJlc29sdmVkIDogeyRwYXRofVxuIjsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gc3RyaXAgZG9jIHJvb3QKICAgICAgICAkcGF0aCA9IHN1YnN0cigkcGF0aCwgc3RybGVuKCRyZWFsRG9jUm9vdCkpOwogICAgICAgIAogICAgICAgIHNlbGY6OiRkZWJ1Z1RleHQgLj0gImRvY3Jvb3Qgc3RyaXBwZWQgICA6IHskcGF0aH1cbiI7CiAgICAgICAgCiAgICAgICAgLy8gZml4IHRvIHJvb3QtcmVsYXRpdmUgVVJJCiAgICAgICAgJHVyaSA9IHN0cnRyKCRwYXRoLCAnL1xcJywgJy8vJyk7CiAgICAgICAgJHVyaSA9IHNlbGY6OnJlbW92ZURvdHMoJHVyaSk7CiAgICAgIAogICAgICAgIHNlbGY6OiRkZWJ1Z1RleHQgLj0gInRyYXZlcnNhbHMgcmVtb3ZlZCA6IHskdXJpfVxuXG4iOwogICAgICAgIAogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGluc3RhbmNlcyBvZiAiLi8iIGFuZCAiLi4vIiB3aGVyZSBwb3NzaWJsZSBmcm9tIGEgcm9vdC1yZWxhdGl2ZSBVUkkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cmkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbW92ZURvdHMoJHVyaSkKICAgIHsKICAgICAgICAkdXJpID0gc3RyX3JlcGxhY2UoJy8uLycsICcvJywgJHVyaSk7CiAgICAgICAgLy8gaW5zcGlyZWQgYnkgcGF0Y2ggZnJvbSBPbGVnIENoZXJuaXkKICAgICAgICBkbyB7CiAgICAgICAgICAgICR1cmkgPSBwcmVnX3JlcGxhY2UoJ0AvW14vXSsvXFwuXFwuL0AnLCAnLycsICR1cmksIDEsICRjaGFuZ2VkKTsKICAgICAgICB9IHdoaWxlICgkY2hhbmdlZCk7CiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogRGVmaW5lcyB3aGljaCBjbGFzcyB0byBjYWxsIGFzIHBhcnQgb2YgY2FsbGJhY2tzLCBjaGFuZ2UgdGhpcwogICAgICogaWYgeW91IGV4dGVuZCBNaW5pZnlfQ1NTX1VyaVJld3JpdGVyCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkY2xhc3NOYW1lID0gJ01pbmlmeV9DU1NfVXJpUmV3cml0ZXInOwoKICAgIC8qKgogICAgICogR2V0IHJlYWxwYXRoIHdpdGggYW55IHRyYWlsaW5nIHNsYXNoIHJlbW92ZWQuIElmIHJlYWxwYXRoKCkgZmFpbHMsCiAgICAgKiBqdXN0IHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2guCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqIAogICAgICogQHJldHVybiBtaXhlZCBwYXRoIHdpdGggbm8gdHJhaWxpbmcgc2xhc2gKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBfcmVhbHBhdGgoJHBhdGgpCiAgICB7CiAgICAgICAgJHJlYWxQYXRoID0gcmVhbHBhdGgoJHBhdGgpOwogICAgICAgIGlmICgkcmVhbFBhdGggIT09IGZhbHNlKSB7CiAgICAgICAgICAgICRwYXRoID0gJHJlYWxQYXRoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcnRyaW0oJHBhdGgsICcvXFwnKTsKICAgIH0KCiAgICAvKioKICAgICAqIERpcmVjdG9yeSBvZiB0aGlzIHN0eWxlc2hlZXQKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX2N1cnJlbnREaXIgPSAnJzsKCiAgICAvKioKICAgICAqIERPQ19ST09UCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9kb2NSb290ID0gJyc7CgogICAgLyoqCiAgICAgKiBkaXJlY3RvcnkgcmVwbGFjZW1lbnRzIHRvIG1hcCBzeW1saW5rIHRhcmdldHMgYmFjayB0byB0aGVpcgogICAgICogc291cmNlICh3aXRoaW4gdGhlIGRvY3VtZW50IHJvb3QpIEUuZy4gJy92YXIvd3d3L3N5bWxpbmsnID0+ICcvdmFyL3JlYWxwYXRoJwogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJF9zeW1saW5rcyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBQYXRoIHRvIHByZXBlbmQKICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX3ByZXBlbmRQYXRoID0gbnVsbDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNzcwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF90cmltVXJscygkY3NzKQogICAgewogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2UoJy8KICAgICAgICAgICAgdXJsXFwoICAgICAgIyB1cmwoCiAgICAgICAgICAgIFxccyoKICAgICAgICAgICAgKFteXFwpXSs/KSAgIyAxID0gVVJJIChhc3N1bWluZyBkb2VzIG5vdCBjb250YWluICIpIikKICAgICAgICAgICAgXFxzKgogICAgICAgICAgICBcXCkgICAgICAgICAjICkKICAgICAgICAveCcsICd1cmwoJDEpJywgJGNzcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG0KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfcHJvY2Vzc1VyaUNCKCRtKQogICAgewogICAgICAgIC8vICRtIG1hdGNoZWQgZWl0aGVyICcvQGltcG9ydFxccysoW1wnIl0pKC4qPylbXCciXS8nIG9yICcvdXJsXFwoXFxzKihbXlxcKVxcc10rKVxccypcXCkvJwogICAgICAgICRpc0ltcG9ydCA9ICgkbVswXVswXSA9PT0gJ0AnKTsKICAgICAgICAvLyBkZXRlcm1pbmUgVVJJIGFuZCB0aGUgcXVvdGUgY2hhcmFjdGVyIChpZiBhbnkpCiAgICAgICAgaWYgKCRpc0ltcG9ydCkgewogICAgICAgICAgICAkcXVvdGVDaGFyID0gJG1bMV07CiAgICAgICAgICAgICR1cmkgPSAkbVsyXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyAkbVsxXSBpcyBlaXRoZXIgcXVvdGVkIG9yIG5vdAogICAgICAgICAgICAkcXVvdGVDaGFyID0gKCRtWzFdWzBdID09PSAiJyIgfHwgJG1bMV1bMF0gPT09ICciJykKICAgICAgICAgICAgICAgID8gJG1bMV1bMF0KICAgICAgICAgICAgICAgIDogJyc7CiAgICAgICAgICAgICR1cmkgPSAoJHF1b3RlQ2hhciA9PT0gJycpCiAgICAgICAgICAgICAgICA/ICRtWzFdCiAgICAgICAgICAgICAgICA6IHN1YnN0cigkbVsxXSwgMSwgc3RybGVuKCRtWzFdKSAtIDIpOwogICAgICAgIH0KICAgICAgICAvLyBhbmFseXplIFVSSQogICAgICAgIGlmICgnLycgIT09ICR1cmlbMF0gICAgICAgICAgICAgICAgICAvLyByb290LXJlbGF0aXZlCiAgICAgICAgICAgICYmIGZhbHNlID09PSBzdHJwb3MoJHVyaSwgJy8vJykgIC8vIHByb3RvY29sIChub24tZGF0YSkKICAgICAgICAgICAgJiYgMCAhPT0gc3RycG9zKCR1cmksICdkYXRhOicpICAgLy8gZGF0YSBwcm90b2NvbAogICAgICAgICkgewogICAgICAgICAgICAvLyBVUkkgaXMgZmlsZS1yZWxhdGl2ZTogcmV3cml0ZSBkZXBlbmRpbmcgb24gb3B0aW9ucwogICAgICAgICAgICBpZiAoc2VsZjo6JF9wcmVwZW5kUGF0aCA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgJHVyaSA9IHNlbGY6OnJld3JpdGVSZWxhdGl2ZSgkdXJpLCBzZWxmOjokX2N1cnJlbnREaXIsIHNlbGY6OiRfZG9jUm9vdCwgc2VsZjo6JF9zeW1saW5rcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdXJpID0gc2VsZjo6JF9wcmVwZW5kUGF0aCAuICR1cmk7CiAgICAgICAgICAgICAgICBpZiAoJHVyaVswXSA9PT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgJHJvb3QgPSAnJzsKICAgICAgICAgICAgICAgICAgICAkcm9vdFJlbGF0aXZlID0gJHVyaTsKICAgICAgICAgICAgICAgICAgICAkdXJpID0gJHJvb3QgLiBzZWxmOjpyZW1vdmVEb3RzKCRyb290UmVsYXRpdmUpOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKHByZWdfbWF0Y2goJ0BeKChodHRwcz9cOik/Ly8oW14vXSspKS9AJywgJHVyaSwgJG0pICYmIChmYWxzZSAhPT0gc3RycG9zKCRtWzNdLCAnLicpKSkgewogICAgICAgICAgICAgICAgICAgICRyb290ID0gJG1bMV07CiAgICAgICAgICAgICAgICAgICAgJHJvb3RSZWxhdGl2ZSA9IHN1YnN0cigkdXJpLCBzdHJsZW4oJHJvb3QpKTsKICAgICAgICAgICAgICAgICAgICAkdXJpID0gJHJvb3QgLiBzZWxmOjpyZW1vdmVEb3RzKCRyb290UmVsYXRpdmUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaXNJbXBvcnQKICAgICAgICAgICAgPyAiQGltcG9ydCB7JHF1b3RlQ2hhcn17JHVyaX17JHF1b3RlQ2hhcn0iCiAgICAgICAgICAgIDogInVybCh7JHF1b3RlQ2hhcn17JHVyaX17JHF1b3RlQ2hhcn0pIjsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/DebugDetector.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBEZXRlY3Qgd2hldGhlciByZXF1ZXN0IHNob3VsZCBiZSBkZWJ1Z2dlZA0KICoNCiAqIEBwYWNrYWdlIE1pbmlmeQ0KICogQGF1dGhvciBTdGVwaGVuIENsYXkgPHN0ZXZlQG1yY2xheS5vcmc+DQogKi8NCmNsYXNzIE1pbmlmeV9EZWJ1Z0RldGVjdG9yIHsNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNob3VsZERlYnVnUmVxdWVzdCgkY29va2llLCAkZ2V0LCAkcmVxdWVzdFVyaSkNCiAgICB7DQogICAgICAgIGlmIChpc3NldCgkZ2V0WydkZWJ1ZyddKSkgew0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCEgZW1wdHkoJGNvb2tpZVsnbWluaWZ5RGVidWcnXSkpIHsNCiAgICAgICAgICAgIGZvcmVhY2ggKHByZWdfc3BsaXQoJy9cXHMrLycsICRjb29raWVbJ21pbmlmeURlYnVnJ10pIGFzICRkZWJ1Z1VyaSkgew0KICAgICAgICAgICAgICAgICRwYXR0ZXJuID0gJ0AnIC4gcHJlZ19xdW90ZSgkZGVidWdVcmksICdAJykgLiAnQGknOw0KICAgICAgICAgICAgICAgICRwYXR0ZXJuID0gc3RyX3JlcGxhY2UoYXJyYXkoJ1xcKicsICdcXD8nKSwgYXJyYXkoJy4qJywgJy4nKSwgJHBhdHRlcm4pOw0KICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCRwYXR0ZXJuLCAkcmVxdWVzdFVyaSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQp9DQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/HTML.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ2xhc3MgTWluaWZ5X0hUTUwNCiAqIEBwYWNrYWdlIE1pbmlmeQ0KICovDQoNCi8qKg0KICogQ29tcHJlc3MgSFRNTA0KICoNCiAqIFRoaXMgaXMgYSBoZWF2eSByZWdleC1iYXNlZCByZW1vdmFsIG9mIHdoaXRlc3BhY2UsIHVubmVjZXNzYXJ5IGNvbW1lbnRzIGFuZA0KICogdG9rZW5zLiBJRSBjb25kaXRpb25hbCBjb21tZW50cyBhcmUgcHJlc2VydmVkLiBUaGVyZSBhcmUgYWxzbyBvcHRpb25zIHRvIGhhdmUNCiAqIFNUWUxFIGFuZCBTQ1JJUFQgYmxvY2tzIGNvbXByZXNzZWQgYnkgY2FsbGJhY2sgZnVuY3Rpb25zLg0KICoNCiAqIEEgdGVzdCBzdWl0ZSBpcyBhdmFpbGFibGUuDQogKg0KICogQHBhY2thZ2UgTWluaWZ5DQogKiBAYXV0aG9yIFN0ZXBoZW4gQ2xheSA8c3RldmVAbXJjbGF5Lm9yZz4NCiAqLw0KY2xhc3MgTWluaWZ5X0hUTUwgew0KICAgIC8qKg0KICAgICAqIEB2YXIgYm9vbGVhbg0KICAgICAqLw0KICAgIHByb3RlY3RlZCAkX2pzQ2xlYW5Db21tZW50cyA9IHRydWU7DQoNCiAgICAvKioNCiAgICAgKiAiTWluaWZ5IiBhbiBIVE1MIHBhZ2UNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGh0bWwNCiAgICAgKg0KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucw0KICAgICAqDQogICAgICogJ2Nzc01pbmlmaWVyJyA6IChvcHRpb25hbCkgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcHJvY2VzcyBjb250ZW50IG9mIFNUWUxFDQogICAgICogZWxlbWVudHMuDQogICAgICoNCiAgICAgKiAnanNNaW5pZmllcicgOiAob3B0aW9uYWwpIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHByb2Nlc3MgY29udGVudCBvZiBTQ1JJUFQNCiAgICAgKiBlbGVtZW50cy4gTm90ZTogdGhlIHR5cGUgYXR0cmlidXRlIGlzIGlnbm9yZWQuDQogICAgICoNCiAgICAgKiAneGh0bWwnIDogKG9wdGlvbmFsIGJvb2xlYW4pIHNob3VsZCBjb250ZW50IGJlIHRyZWF0ZWQgYXMgWEhUTUwxLjA/IElmDQogICAgICogdW5zZXQsIG1pbmlmeSB3aWxsIHNuaWZmIGZvciBhbiBYSFRNTCBkb2N0eXBlLg0KICAgICAqDQogICAgICogQHJldHVybiBzdHJpbmcNCiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1pbmlmeSgkaHRtbCwgJG9wdGlvbnMgPSBhcnJheSgpKSB7DQogICAgICAgICRtaW4gPSBuZXcgc2VsZigkaHRtbCwgJG9wdGlvbnMpOw0KICAgICAgICByZXR1cm4gJG1pbi0+cHJvY2VzcygpOw0KICAgIH0NCg0KDQogICAgLyoqDQogICAgICogQ3JlYXRlIGEgbWluaWZpZXIgb2JqZWN0DQogICAgICoNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRodG1sDQogICAgICoNCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMNCiAgICAgKg0KICAgICAqICdjc3NNaW5pZmllcicgOiAob3B0aW9uYWwpIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHByb2Nlc3MgY29udGVudCBvZiBTVFlMRQ0KICAgICAqIGVsZW1lbnRzLg0KICAgICAqDQogICAgICogJ2pzTWluaWZpZXInIDogKG9wdGlvbmFsKSBjYWxsYmFjayBmdW5jdGlvbiB0byBwcm9jZXNzIGNvbnRlbnQgb2YgU0NSSVBUDQogICAgICogZWxlbWVudHMuIE5vdGU6IHRoZSB0eXBlIGF0dHJpYnV0ZSBpcyBpZ25vcmVkLg0KICAgICAqDQogICAgICogJ2pzQ2xlYW5Db21tZW50cycgOiAob3B0aW9uYWwpIHdoZXRoZXIgdG8gcmVtb3ZlIEhUTUwgY29tbWVudHMgYmVnaW5uaW5nIGFuZCBlbmQgb2Ygc2NyaXB0IGJsb2NrDQogICAgICoNCiAgICAgKiAneGh0bWwnIDogKG9wdGlvbmFsIGJvb2xlYW4pIHNob3VsZCBjb250ZW50IGJlIHRyZWF0ZWQgYXMgWEhUTUwxLjA/IElmDQogICAgICogdW5zZXQsIG1pbmlmeSB3aWxsIHNuaWZmIGZvciBhbiBYSFRNTCBkb2N0eXBlLg0KICAgICAqDQogICAgICogQHJldHVybiBudWxsDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRodG1sLCAkb3B0aW9ucyA9IGFycmF5KCkpDQogICAgew0KICAgICAgICAkdGhpcy0+X2h0bWwgPSBzdHJfcmVwbGFjZSgiXHJcbiIsICJcbiIsIHRyaW0oJGh0bWwpKTsNCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd4aHRtbCddKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9pc1hodG1sID0gKGJvb2wpJG9wdGlvbnNbJ3hodG1sJ107DQogICAgICAgIH0NCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydjc3NNaW5pZmllciddKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9jc3NNaW5pZmllciA9ICRvcHRpb25zWydjc3NNaW5pZmllciddOw0KICAgICAgICB9DQogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snanNNaW5pZmllciddKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9qc01pbmlmaWVyID0gJG9wdGlvbnNbJ2pzTWluaWZpZXInXTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2pzQ2xlYW5Db21tZW50cyddKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9qc0NsZWFuQ29tbWVudHMgPSAoYm9vbCkkb3B0aW9uc1snanNDbGVhbkNvbW1lbnRzJ107DQogICAgICAgIH0NCiAgICB9DQoNCg0KICAgIC8qKg0KICAgICAqIE1pbmlmeSB0aGUgbWFya2V1cCBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3INCiAgICAgKiANCiAgICAgKiBAcmV0dXJuIHN0cmluZw0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzKCkNCiAgICB7DQogICAgICAgIGlmICgkdGhpcy0+X2lzWGh0bWwgPT09IG51bGwpIHsNCiAgICAgICAgICAgICR0aGlzLT5faXNYaHRtbCA9IChmYWxzZSAhPT0gc3RycG9zKCR0aGlzLT5faHRtbCwgJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwnKSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICR0aGlzLT5fcmVwbGFjZW1lbnRIYXNoID0gJ01JTklGWUhUTUwnIC4gbWQ1KCRfU0VSVkVSWydSRVFVRVNUX1RJTUUnXSk7DQogICAgICAgICR0aGlzLT5fcGxhY2Vob2xkZXJzID0gYXJyYXkoKTsNCiAgICAgICAgDQogICAgICAgIC8vIHJlcGxhY2UgU0NSSVBUcyAoYW5kIG1pbmlmeSkgd2l0aCBwbGFjZWhvbGRlcnMNCiAgICAgICAgJHRoaXMtPl9odG1sID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKA0KICAgICAgICAgICAgJy8oXFxzKik8c2NyaXB0KFxcYltePl0qPz4pKFtcXHNcXFNdKj8pPFxcL3NjcmlwdD4oXFxzKikvaScNCiAgICAgICAgICAgICxhcnJheSgkdGhpcywgJ19yZW1vdmVTY3JpcHRDQicpDQogICAgICAgICAgICAsJHRoaXMtPl9odG1sKTsNCiAgICAgICAgDQogICAgICAgIC8vIHJlcGxhY2UgU1RZTEVzIChhbmQgbWluaWZ5KSB3aXRoIHBsYWNlaG9sZGVycw0KICAgICAgICAkdGhpcy0+X2h0bWwgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soDQogICAgICAgICAgICAnL1xccyo8c3R5bGUoXFxiW14+XSo+KShbXFxzXFxTXSo/KTxcXC9zdHlsZT5cXHMqL2knDQogICAgICAgICAgICAsYXJyYXkoJHRoaXMsICdfcmVtb3ZlU3R5bGVDQicpDQogICAgICAgICAgICAsJHRoaXMtPl9odG1sKTsNCiAgICAgICAgDQogICAgICAgIC8vIHJlbW92ZSBIVE1MIGNvbW1lbnRzIChub3QgY29udGFpbmluZyBJRSBjb25kaXRpb25hbCBjb21tZW50cykuDQogICAgICAgICR0aGlzLT5faHRtbCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygNCiAgICAgICAgICAgICcvPCEtLShbXFxzXFxTXSo/KS0tPi8nDQogICAgICAgICAgICAsYXJyYXkoJHRoaXMsICdfY29tbWVudENCJykNCiAgICAgICAgICAgICwkdGhpcy0+X2h0bWwpOw0KICAgICAgICANCiAgICAgICAgLy8gcmVwbGFjZSBQUkVzIHdpdGggcGxhY2Vob2xkZXJzDQogICAgICAgICR0aGlzLT5faHRtbCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnL1xccyo8cHJlKFxcYltePl0qPz5bXFxzXFxTXSo/PFxcL3ByZT4pXFxzKi9pJw0KICAgICAgICAgICAgLGFycmF5KCR0aGlzLCAnX3JlbW92ZVByZUNCJykNCiAgICAgICAgICAgICwkdGhpcy0+X2h0bWwpOw0KICAgICAgICANCiAgICAgICAgLy8gcmVwbGFjZSBURVhUQVJFQXMgd2l0aCBwbGFjZWhvbGRlcnMNCiAgICAgICAgJHRoaXMtPl9odG1sID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKA0KICAgICAgICAgICAgJy9cXHMqPHRleHRhcmVhKFxcYltePl0qPz5bXFxzXFxTXSo/PFxcL3RleHRhcmVhPilcXHMqL2knDQogICAgICAgICAgICAsYXJyYXkoJHRoaXMsICdfcmVtb3ZlVGV4dGFyZWFDQicpDQogICAgICAgICAgICAsJHRoaXMtPl9odG1sKTsNCiAgICAgICAgDQogICAgICAgIC8vIHRyaW0gZWFjaCBsaW5lLg0KICAgICAgICAvLyBAdG9kbyB0YWtlIGludG8gYWNjb3VudCBhdHRyaWJ1dGUgdmFsdWVzIHRoYXQgc3BhbiBtdWx0aXBsZSBsaW5lcy4NCiAgICAgICAgJHRoaXMtPl9odG1sID0gcHJlZ19yZXBsYWNlKCcvXlxccyt8XFxzKyQvbScsICcnLCAkdGhpcy0+X2h0bWwpOw0KICAgICAgICANCiAgICAgICAgLy8gcmVtb3ZlIHdzIGFyb3VuZCBibG9jay91bmRpc3BsYXllZCBlbGVtZW50cw0KICAgICAgICAkdGhpcy0+X2h0bWwgPSBwcmVnX3JlcGxhY2UoJy9cXHMrKDxcXC8/KD86YXJlYXxiYXNlKD86Zm9udCk/fGJsb2NrcXVvdGV8Ym9keScNCiAgICAgICAgICAgIC4nfGNhcHRpb258Y2VudGVyfGNpdGV8Y29sKD86Z3JvdXApP3xkZHxkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZvcm0nDQogICAgICAgICAgICAuJ3xmcmFtZSg/OnNldCk/fGhbMS02XXxoZWFkfGhyfGh0bWx8bGVnZW5kfGxpfGxpbmt8bWFwfG1lbnV8bWV0YScNCiAgICAgICAgICAgIC4nfG9sfG9wdCg/Omdyb3VwfGlvbil8cHxwYXJhbXx0KD86YWJsZXxib2R5fGhlYWR8ZHxofHxyfGZvb3R8aXRsZSknDQogICAgICAgICAgICAuJ3x1bClcXGJbXj5dKj4pL2knLCAnJDEnLCAkdGhpcy0+X2h0bWwpOw0KICAgICAgICANCiAgICAgICAgLy8gcmVtb3ZlIHdzIG91dHNpZGUgb2YgYWxsIGVsZW1lbnRzDQogICAgICAgICR0aGlzLT5faHRtbCA9IHByZWdfcmVwbGFjZSgNCiAgICAgICAgICAgICcvPihcXHMoPzpcXHMqKSk/KFtePF0rKShcXHMoPzpccyopKT88LycNCiAgICAgICAgICAgICwnPiQxJDIkMzwnDQogICAgICAgICAgICAsJHRoaXMtPl9odG1sKTsNCiAgICAgICAgDQogICAgICAgIC8vIHVzZSBuZXdsaW5lcyBiZWZvcmUgMXN0IGF0dHJpYnV0ZSBpbiBvcGVuIHRhZ3MgKHRvIGxpbWl0IGxpbmUgbGVuZ3RocykNCiAgICAgICAgJHRoaXMtPl9odG1sID0gcHJlZ19yZXBsYWNlKCcvKDxbYS16XFwtXSspXFxzKyhbXj5dKz4pL2knLCAiJDFcbiQyIiwgJHRoaXMtPl9odG1sKTsNCiAgICAgICAgDQogICAgICAgIC8vIGZpbGwgcGxhY2Vob2xkZXJzDQogICAgICAgICR0aGlzLT5faHRtbCA9IHN0cl9yZXBsYWNlKA0KICAgICAgICAgICAgYXJyYXlfa2V5cygkdGhpcy0+X3BsYWNlaG9sZGVycykNCiAgICAgICAgICAgICxhcnJheV92YWx1ZXMoJHRoaXMtPl9wbGFjZWhvbGRlcnMpDQogICAgICAgICAgICAsJHRoaXMtPl9odG1sDQogICAgICAgICk7DQogICAgICAgIC8vIGlzc3VlIDIyOTogbXVsdGktcGFzcyB0byBjYXRjaCBzY3JpcHRzIHRoYXQgZGlkbid0IGdldCByZXBsYWNlZCBpbiB0ZXh0YXJlYXMNCiAgICAgICAgJHRoaXMtPl9odG1sID0gc3RyX3JlcGxhY2UoDQogICAgICAgICAgICBhcnJheV9rZXlzKCR0aGlzLT5fcGxhY2Vob2xkZXJzKQ0KICAgICAgICAgICAgLGFycmF5X3ZhbHVlcygkdGhpcy0+X3BsYWNlaG9sZGVycykNCiAgICAgICAgICAgICwkdGhpcy0+X2h0bWwNCiAgICAgICAgKTsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5faHRtbDsNCiAgICB9DQogICAgDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9jb21tZW50Q0IoJG0pDQogICAgew0KICAgICAgICByZXR1cm4gKDAgPT09IHN0cnBvcygkbVsxXSwgJ1snKSB8fCBmYWxzZSAhPT0gc3RycG9zKCRtWzFdLCAnPCFbJykpDQogICAgICAgICAgICA/ICRtWzBdDQogICAgICAgICAgICA6ICcnOw0KICAgIH0NCiAgICANCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Jlc2VydmVQbGFjZSgkY29udGVudCkNCiAgICB7DQogICAgICAgICRwbGFjZWhvbGRlciA9ICclJyAuICR0aGlzLT5fcmVwbGFjZW1lbnRIYXNoIC4gY291bnQoJHRoaXMtPl9wbGFjZWhvbGRlcnMpIC4gJyUnOw0KICAgICAgICAkdGhpcy0+X3BsYWNlaG9sZGVyc1skcGxhY2Vob2xkZXJdID0gJGNvbnRlbnQ7DQogICAgICAgIHJldHVybiAkcGxhY2Vob2xkZXI7DQogICAgfQ0KDQogICAgcHJvdGVjdGVkICRfaXNYaHRtbCA9IG51bGw7DQogICAgcHJvdGVjdGVkICRfcmVwbGFjZW1lbnRIYXNoID0gbnVsbDsNCiAgICBwcm90ZWN0ZWQgJF9wbGFjZWhvbGRlcnMgPSBhcnJheSgpOw0KICAgIHByb3RlY3RlZCAkX2Nzc01pbmlmaWVyID0gbnVsbDsNCiAgICBwcm90ZWN0ZWQgJF9qc01pbmlmaWVyID0gbnVsbDsNCg0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfcmVtb3ZlUHJlQ0IoJG0pDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9yZXNlcnZlUGxhY2UoIjxwcmV7JG1bMV19Iik7DQogICAgfQ0KICAgIA0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfcmVtb3ZlVGV4dGFyZWFDQigkbSkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc2VydmVQbGFjZSgiPHRleHRhcmVheyRtWzFdfSIpOw0KICAgIH0NCg0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfcmVtb3ZlU3R5bGVDQigkbSkNCiAgICB7DQogICAgICAgICRvcGVuU3R5bGUgPSAiPHN0eWxleyRtWzFdfSI7DQogICAgICAgICRjc3MgPSAkbVsyXTsNCiAgICAgICAgLy8gcmVtb3ZlIEhUTUwgY29tbWVudHMNCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgnLyg/Ol5cXHMqPCEtLXwtLT5cXHMqJCkvJywgJycsICRjc3MpOw0KICAgICAgICANCiAgICAgICAgLy8gcmVtb3ZlIENEQVRBIHNlY3Rpb24gbWFya2Vycw0KICAgICAgICAkY3NzID0gJHRoaXMtPl9yZW1vdmVDZGF0YSgkY3NzKTsNCiAgICAgICAgDQogICAgICAgIC8vIG1pbmlmeQ0KICAgICAgICAkbWluaWZpZXIgPSAkdGhpcy0+X2Nzc01pbmlmaWVyDQogICAgICAgICAgICA/ICR0aGlzLT5fY3NzTWluaWZpZXINCiAgICAgICAgICAgIDogJ3RyaW0nOw0KICAgICAgICAkY3NzID0gY2FsbF91c2VyX2Z1bmMoJG1pbmlmaWVyLCAkY3NzKTsNCiAgICAgICAgDQogICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc2VydmVQbGFjZSgkdGhpcy0+X25lZWRzQ2RhdGEoJGNzcykNCiAgICAgICAgICAgID8gInskb3BlblN0eWxlfS8qPCFbQ0RBVEFbKi97JGNzc30vKl1dPiovPC9zdHlsZT4iDQogICAgICAgICAgICA6ICJ7JG9wZW5TdHlsZX17JGNzc308L3N0eWxlPiINCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3JlbW92ZVNjcmlwdENCKCRtKQ0KICAgIHsNCiAgICAgICAgJG9wZW5TY3JpcHQgPSAiPHNjcmlwdHskbVsyXX0iOw0KICAgICAgICAkanMgPSAkbVszXTsNCiAgICAgICAgDQogICAgICAgIC8vIHdoaXRlc3BhY2Ugc3Vycm91bmRpbmc/IHByZXNlcnZlIGF0IGxlYXN0IG9uZSBzcGFjZQ0KICAgICAgICAkd3MxID0gKCRtWzFdID09PSAnJykgPyAnJyA6ICcgJzsNCiAgICAgICAgJHdzMiA9ICgkbVs0XSA9PT0gJycpID8gJycgOiAnICc7DQoNCiAgICAgICAgLy8gcmVtb3ZlIEhUTUwgY29tbWVudHMgKGFuZCBlbmRpbmcgIi8vIiBpZiBwcmVzZW50KQ0KICAgICAgICBpZiAoJHRoaXMtPl9qc0NsZWFuQ29tbWVudHMpIHsNCiAgICAgICAgICAgICRqcyA9IHByZWdfcmVwbGFjZSgnLyg/Ol5cXHMqPCEtLVxccyp8XFxzKig/OlxcL1xcLyk/XFxzKi0tPlxccyokKS8nLCAnJywgJGpzKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIHJlbW92ZSBDREFUQSBzZWN0aW9uIG1hcmtlcnMNCiAgICAgICAgJGpzID0gJHRoaXMtPl9yZW1vdmVDZGF0YSgkanMpOw0KICAgICAgICANCiAgICAgICAgLy8gbWluaWZ5DQogICAgICAgICRtaW5pZmllciA9ICR0aGlzLT5fanNNaW5pZmllcg0KICAgICAgICAgICAgPyAkdGhpcy0+X2pzTWluaWZpZXINCiAgICAgICAgICAgIDogJ3RyaW0nOw0KICAgICAgICAkanMgPSBjYWxsX3VzZXJfZnVuYygkbWluaWZpZXIsICRqcyk7DQogICAgICAgIA0KICAgICAgICByZXR1cm4gJHRoaXMtPl9yZXNlcnZlUGxhY2UoJHRoaXMtPl9uZWVkc0NkYXRhKCRqcykNCiAgICAgICAgICAgID8gInskd3MxfXskb3BlblNjcmlwdH0vKjwhW0NEQVRBWyoveyRqc30vKl1dPiovPC9zY3JpcHQ+eyR3czJ9Ig0KICAgICAgICAgICAgOiAieyR3czF9eyRvcGVuU2NyaXB0fXskanN9PC9zY3JpcHQ+eyR3czJ9Ig0KICAgICAgICApOw0KICAgIH0NCg0KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfcmVtb3ZlQ2RhdGEoJHN0cikNCiAgICB7DQogICAgICAgIHJldHVybiAoZmFsc2UgIT09IHN0cnBvcygkc3RyLCAnPCFbQ0RBVEFbJykpDQogICAgICAgICAgICA/IHN0cl9yZXBsYWNlKGFycmF5KCc8IVtDREFUQVsnLCAnXV0+JyksICcnLCAkc3RyKQ0KICAgICAgICAgICAgOiAkc3RyOw0KICAgIH0NCiAgICANCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX25lZWRzQ2RhdGEoJHN0cikNCiAgICB7DQogICAgICAgIHJldHVybiAoJHRoaXMtPl9pc1hodG1sICYmIHByZWdfbWF0Y2goJy8oPzpbPCZdfFxcLVxcLXxcXF1cXF0+KS8nLCAkc3RyKSk7DQogICAgfQ0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/HTML/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/Minify/HTML/Helper.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9IVE1MX0hlbHBlcgogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKioKICogSGVscGVycyBmb3Igd3JpdGluZyBNaW5meSBVUklzIGludG8gSFRNTAogKgogKiBAcGFja2FnZSBNaW5pZnkKICogQGF1dGhvciBTdGVwaGVuIENsYXkgPHN0ZXZlQG1yY2xheS5vcmc+CiAqLwpjbGFzcyBNaW5pZnlfSFRNTF9IZWxwZXIgewogICAgcHVibGljICRyZXdyaXRlV29ya3MgPSB0cnVlOwogICAgcHVibGljICRtaW5BcHBVcmkgPSAnL21pbic7CiAgICBwdWJsaWMgJGdyb3Vwc0NvbmZpZ0ZpbGUgPSAnJzsKCiAgICAvKioKICAgICAqIEdldCBhbiBIVE1MLWVzY2FwZWQgTWluaWZ5IFVSSSBmb3IgYSBncm91cCBvciBzZXQgb2YgZmlsZXMKICAgICAqIAogICAgICogQHBhcmFtIHN0cmluZ3xhcnJheSAka2V5T3JGaWxlcyBhIGdyb3VwIGtleSBvciBhcnJheSBvZiBmaWxlcGF0aHMvVVJJcwogICAgICogQHBhcmFtIGFycmF5ICRvcHRzIG9wdGlvbnM6CiAgICAgKiAgICdmYXJFeHBpcmVzJyA6IChkZWZhdWx0IHRydWUpIGFwcGVuZCBhIG1vZGlmaWVkIHRpbWVzdGFtcCBmb3IgY2FjaGUgcmV2dmluZwogICAgICogICAnZGVidWcnIDogKGRlZmF1bHQgZmFsc2UpIGFwcGVuZCBkZWJ1ZyBmbGFnCiAgICAgKiAgICdjaGFyc2V0JyA6IChkZWZhdWx0ICdVVEYtOCcpIGZvciBodG1sc3BlY2lhbGNoYXJzCiAgICAgKiAgICdtaW5BcHBVcmknIDogKGRlZmF1bHQgJy9taW4nKSBVUkkgb2YgbWluIGRpcmVjdG9yeQogICAgICogICAncmV3cml0ZVdvcmtzJyA6IChkZWZhdWx0IHRydWUpIGRvZXMgbW9kX3Jld3JpdGUgd29yayBpbiBtaW4gYXBwPwogICAgICogICAnZ3JvdXBzQ29uZmlnRmlsZScgOiBzcGVjaWZ5IGlmIGRpZmZlcmVudAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVcmkoJGtleU9yRmlsZXMsICRvcHRzID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkb3B0cyA9IGFycmF5X21lcmdlKGFycmF5KCAvLyBkZWZhdWx0IG9wdGlvbnMKICAgICAgICAgICAgJ2ZhckV4cGlyZXMnID0+IHRydWUKICAgICAgICAgICAgLCdkZWJ1ZycgPT4gZmFsc2UKICAgICAgICAgICAgLCdjaGFyc2V0JyA9PiAnVVRGLTgnCiAgICAgICAgICAgICwnbWluQXBwVXJpJyA9PiAnL21pbicKICAgICAgICAgICAgLCdyZXdyaXRlV29ya3MnID0+IHRydWUKICAgICAgICAgICAgLCdncm91cHNDb25maWdGaWxlJyA9PiAnJwogICAgICAgICksICRvcHRzKTsKICAgICAgICAkaCA9IG5ldyBzZWxmOwogICAgICAgICRoLT5taW5BcHBVcmkgPSAkb3B0c1snbWluQXBwVXJpJ107CiAgICAgICAgJGgtPnJld3JpdGVXb3JrcyA9ICRvcHRzWydyZXdyaXRlV29ya3MnXTsKICAgICAgICAkaC0+Z3JvdXBzQ29uZmlnRmlsZSA9ICRvcHRzWydncm91cHNDb25maWdGaWxlJ107CiAgICAgICAgaWYgKGlzX2FycmF5KCRrZXlPckZpbGVzKSkgewogICAgICAgICAgICAkaC0+c2V0RmlsZXMoJGtleU9yRmlsZXMsICRvcHRzWydmYXJFeHBpcmVzJ10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRoLT5zZXRHcm91cCgka2V5T3JGaWxlcywgJG9wdHNbJ2ZhckV4cGlyZXMnXSk7CiAgICAgICAgfQogICAgICAgICR1cmkgPSAkaC0+Z2V0UmF3VXJpKCRvcHRzWydmYXJFeHBpcmVzJ10sICRvcHRzWydkZWJ1ZyddKTsKICAgICAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdXJpLCBFTlRfUVVPVEVTLCAkb3B0c1snY2hhcnNldCddKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBub24tSFRNTC1lc2NhcGVkIFVSSSB0byBtaW5pZnkgdGhlIHNwZWNpZmllZCBmaWxlcwogICAgICoKICAgICAqIEBwYXJhbSBib29sICRmYXJFeHBpcmVzCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVidWcKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSYXdVcmkoJGZhckV4cGlyZXMgPSB0cnVlLCAkZGVidWcgPSBmYWxzZSkKICAgIHsKICAgICAgICAkcGF0aCA9IHJ0cmltKCR0aGlzLT5taW5BcHBVcmksICcvJykgLiAnLyc7CiAgICAgICAgaWYgKCEgJHRoaXMtPnJld3JpdGVXb3JrcykgewogICAgICAgICAgICAkcGF0aCAuPSAnPyc7CiAgICAgICAgfQogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+X2dyb3VwS2V5KSB7CiAgICAgICAgICAgIC8vIEB0b2RvOiBpbXBsZW1lbnQgc2hvcnRlc3QgdXJpCiAgICAgICAgICAgICRwYXRoID0gc2VsZjo6X2dldFNob3J0ZXN0VXJpKCR0aGlzLT5fZmlsZVBhdGhzLCAkcGF0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHBhdGggLj0gImc9IiAuICR0aGlzLT5fZ3JvdXBLZXk7CiAgICAgICAgfQogICAgICAgIGlmICgkZGVidWcpIHsKICAgICAgICAgICAgJHBhdGggLj0gIiZkZWJ1ZyI7CiAgICAgICAgfSBlbHNlaWYgKCRmYXJFeHBpcmVzICYmICR0aGlzLT5fbGFzdE1vZGlmaWVkKSB7CiAgICAgICAgICAgICRwYXRoIC49ICImIiAuICR0aGlzLT5fbGFzdE1vZGlmaWVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGZpbGVzIHRoYXQgd2lsbCBjb21wcmlzZSB0aGUgVVJJIHdlJ3JlIGJ1aWxkaW5nCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRmaWxlcwogICAgICogQHBhcmFtIGJvb2wgJGNoZWNrTGFzdE1vZGlmaWVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGaWxlcygkZmlsZXMsICRjaGVja0xhc3RNb2RpZmllZCA9IHRydWUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9ncm91cEtleSA9IG51bGw7CiAgICAgICAgaWYgKCRjaGVja0xhc3RNb2RpZmllZCkgewogICAgICAgICAgICAkdGhpcy0+X2xhc3RNb2RpZmllZCA9IHNlbGY6OmdldExhc3RNb2RpZmllZCgkZmlsZXMpOwogICAgICAgIH0KICAgICAgICAvLyBub3JtYWxpemUgcGF0aHMgbGlrZSBpbiAvbWluL2Y9PHBhdGhzPgogICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkayA9PiAkZmlsZSkgewogICAgICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRmaWxlLCAnLy8nKSkgewogICAgICAgICAgICAgICAgJGZpbGUgPSBzdWJzdHIoJGZpbGUsIDIpOwogICAgICAgICAgICB9IGVsc2VpZiAoMCA9PT0gc3RycG9zKCRmaWxlLCAnLycpCiAgICAgICAgICAgICAgICAgICAgICB8fCAxID09PSBzdHJwb3MoJGZpbGUsICc6XFwnKSkgewogICAgICAgICAgICAgICAgJGZpbGUgPSBzdWJzdHIoJGZpbGUsIHN0cmxlbigkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRmaWxlID0gc3RydHIoJGZpbGUsICdcXCcsICcvJyk7CiAgICAgICAgICAgICRmaWxlc1ska10gPSAkZmlsZTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPl9maWxlUGF0aHMgPSAkZmlsZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGdyb3VwIG9mIGZpbGVzIHRoYXQgd2lsbCBjb21wcmlzZSB0aGUgVVJJIHdlJ3JlIGJ1aWxkaW5nCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAka2V5CiAgICAgKiBAcGFyYW0gYm9vbCAkY2hlY2tMYXN0TW9kaWZpZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEdyb3VwKCRrZXksICRjaGVja0xhc3RNb2RpZmllZCA9IHRydWUpCiAgICB7CiAgICAgICAgJHRoaXMtPl9ncm91cEtleSA9ICRrZXk7CiAgICAgICAgaWYgKCRjaGVja0xhc3RNb2RpZmllZCkgewogICAgICAgICAgICBpZiAoISAkdGhpcy0+Z3JvdXBzQ29uZmlnRmlsZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPmdyb3Vwc0NvbmZpZ0ZpbGUgPSBkaXJuYW1lKGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSkpKSAuICcvZ3JvdXBzQ29uZmlnLnBocCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJHRoaXMtPmdyb3Vwc0NvbmZpZ0ZpbGUpKSB7CiAgICAgICAgICAgICAgICAkZ2MgPSAocmVxdWlyZSAkdGhpcy0+Z3JvdXBzQ29uZmlnRmlsZSk7CiAgICAgICAgICAgICAgICAka2V5cyA9IGV4cGxvZGUoJywnLCAka2V5KTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRrZXlzIGFzICRrZXkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGdjWyRrZXldKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X2xhc3RNb2RpZmllZCA9IHNlbGY6OmdldExhc3RNb2RpZmllZCgkZ2NbJGtleV0sICR0aGlzLT5fbGFzdE1vZGlmaWVkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1heChsYXN0TW9kaWZpZWQpIG9mIGFsbCBmaWxlcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJHNvdXJjZXMKICAgICAqIEBwYXJhbSBpbnQgJGxhc3RNb2RpZmllZAogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMYXN0TW9kaWZpZWQoJHNvdXJjZXMsICRsYXN0TW9kaWZpZWQgPSAwKQogICAgewogICAgICAgICRtYXggPSAkbGFzdE1vZGlmaWVkOwogICAgICAgIGZvcmVhY2ggKChhcnJheSkkc291cmNlcyBhcyAkc291cmNlKSB7CiAgICAgICAgICAgIGlmIChpc19vYmplY3QoJHNvdXJjZSkgJiYgaXNzZXQoJHNvdXJjZS0+bGFzdE1vZGlmaWVkKSkgewogICAgICAgICAgICAgICAgJG1heCA9IG1heCgkbWF4LCAkc291cmNlLT5sYXN0TW9kaWZpZWQpOwogICAgICAgICAgICB9IGVsc2VpZiAoaXNfc3RyaW5nKCRzb3VyY2UpKSB7CiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRzb3VyY2UsICcvLycpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNvdXJjZSA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiBzdWJzdHIoJHNvdXJjZSwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaXNfZmlsZSgkc291cmNlKSkgewogICAgICAgICAgICAgICAgICAgICRtYXggPSBtYXgoJG1heCwgZmlsZW10aW1lKCRzb3VyY2UpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG1heDsKICAgIH0KCiAgICBwcm90ZWN0ZWQgJF9ncm91cEtleSA9IG51bGw7IC8vIGlmIHByZXNlbnQsIFVSSSB3aWxsIGJlIGxpa2UgZz0uLi4KICAgIHByb3RlY3RlZCAkX2ZpbGVQYXRocyA9IGFycmF5KCk7CiAgICBwcm90ZWN0ZWQgJF9sYXN0TW9kaWZpZWQgPSBudWxsOwoKICAgIAogICAgLyoqCiAgICAgKiBJbiBhIGdpdmVuIGFycmF5IG9mIHN0cmluZ3MsIGZpbmQgdGhlIGNoYXJhY3RlciB0aGV5IGFsbCBoYXZlIGF0CiAgICAgKiBhIHBhcnRpY3VsYXIgaW5kZXgKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyciBhcnJheSBvZiBzdHJpbmdzCiAgICAgKiBAcGFyYW0gaW50ICRwb3MgaW5kZXggdG8gY2hlY2sKICAgICAqIEByZXR1cm4gbWl4ZWQgYSBjb21tb24gY2hhciBvciAnJyBpZiBhbnkgZG8gbm90IG1hdGNoCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gX2dldENvbW1vbkNoYXJBdFBvcygkYXJyLCAkcG9zKSB7CiAgICAgICAgaWYgKCFpc3NldCgkYXJyWzBdWyRwb3NdKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRjID0gJGFyclswXVskcG9zXTsKICAgICAgICAkbCA9IGNvdW50KCRhcnIpOwogICAgICAgIGlmICgkbCA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gJGM7CiAgICAgICAgfQogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8ICRsOyArKyRpKSB7CiAgICAgICAgICAgIGlmICgkYXJyWyRpXVskcG9zXSAhPT0gJGMpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHNob3J0ZXN0IFVSSSB0byBtaW5pZnkgdGhlIHNldCBvZiBzb3VyY2UgZmlsZXMKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhdGhzIHJvb3QtcmVsYXRpdmUgVVJJcyBvZiBmaWxlcwogICAgICogQHBhcmFtIHN0cmluZyAkbWluUm9vdCByb290LXJlbGF0aXZlIFVSSSBvZiB0aGUgIm1pbiIgYXBwbGljYXRpb24KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gX2dldFNob3J0ZXN0VXJpKCRwYXRocywgJG1pblJvb3QgPSAnL21pbi8nKSB7CiAgICAgICAgJHBvcyA9IDA7CiAgICAgICAgJGJhc2UgPSAnJzsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICAkYyA9IHNlbGY6Ol9nZXRDb21tb25DaGFyQXRQb3MoJHBhdGhzLCAkcG9zKTsKICAgICAgICAgICAgaWYgKCRjID09PSAnJykgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkYmFzZSAuPSAkYzsKICAgICAgICAgICAgfQogICAgICAgICAgICArKyRwb3M7CiAgICAgICAgfQogICAgICAgICRiYXNlID0gcHJlZ19yZXBsYWNlKCdAW14vXSskQCcsICcnLCAkYmFzZSk7CiAgICAgICAgJHVyaSA9ICRtaW5Sb290IC4gJ2Y9JyAuIGltcGxvZGUoJywnLCAkcGF0aHMpOwogICAgICAgIAogICAgICAgIGlmIChzdWJzdHIoJGJhc2UsIC0xKSA9PT0gJy8nKSB7CiAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBiYXNlIGRpciEKICAgICAgICAgICAgJGJhc2VkUGF0aHMgPSAkcGF0aHM7CiAgICAgICAgICAgICRsID0gY291bnQoJHBhdGhzKTsKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGw7ICsrJGkpIHsKICAgICAgICAgICAgICAgICRiYXNlZFBhdGhzWyRpXSA9IHN1YnN0cigkcGF0aHNbJGldLCBzdHJsZW4oJGJhc2UpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYmFzZSA9IHN1YnN0cigkYmFzZSwgMCwgc3RybGVuKCRiYXNlKSAtIDEpOwogICAgICAgICAgICAkYlVyaSA9ICRtaW5Sb290IC4gJ2I9JyAuICRiYXNlIC4gJyZmPScgLiBpbXBsb2RlKCcsJywgJGJhc2VkUGF0aHMpOwoKICAgICAgICAgICAgJHVyaSA9IHN0cmxlbigkdXJpKSA8IHN0cmxlbigkYlVyaSkKICAgICAgICAgICAgICAgID8gJHVyaQogICAgICAgICAgICAgICAgOiAkYlVyaTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/ImportProcessor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qKg0KICogQ2xhc3MgTWluaWZ5X0ltcG9ydFByb2Nlc3Nvcg0KICogQHBhY2thZ2UgTWluaWZ5DQogKi8NCg0KLyoqDQogKiBMaW5lYXJpemUgYSBDU1MvSlMgZmlsZSBieSBpbmNsdWRpbmcgY29udGVudCBzcGVjaWZpZWQgYnkgQ1NTIGltcG9ydA0KICogZGVjbGFyYXRpb25zLiBJbiBDU1MgZmlsZXMsIHJlbGF0aXZlIFVSSXMgYXJlIGZpeGVkLg0KICoNCiAqIEBpbXBvcnRzIHdpbGwgYmUgcHJvY2Vzc2VkIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZQ0KICogZmlsZXM7IGkuZS4gQGltcG9ydHMgY29tbWVudGVkIG91dCBvciBpbiBzdHJpbmcgY29udGVudCB3aWxsIHN0aWxsIGJlDQogKiBwcm9jZXNzZWQhDQogKg0KICogVGhpcyBoYXMgYSB1bml0IHRlc3QgYnV0IHNob3VsZCBiZSBjb25zaWRlcmVkICJleHBlcmltZW50YWwiLg0KICoNCiAqIEBwYWNrYWdlIE1pbmlmeQ0KICogQGF1dGhvciBTdGVwaGVuIENsYXkgPHN0ZXZlQG1yY2xheS5vcmc+DQogKiBAYXV0aG9yIFNpbW9uIFNjaGljayA8c2ltb25zaW1jaXR5QGdtYWlsLmNvbT4NCiAqLw0KY2xhc3MgTWluaWZ5X0ltcG9ydFByb2Nlc3NvciB7DQoNCiAgICBwdWJsaWMgc3RhdGljICRmaWxlc0luY2x1ZGVkID0gYXJyYXkoKTsNCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJvY2VzcygkZmlsZSkNCiAgICB7DQogICAgICAgIHNlbGY6OiRmaWxlc0luY2x1ZGVkID0gYXJyYXkoKTsNCiAgICAgICAgc2VsZjo6JF9pc0NzcyA9IChzdHJ0b2xvd2VyKHN1YnN0cigkZmlsZSwgLTQpKSA9PT0gJy5jc3MnKTsNCiAgICAgICAgJG9iaiA9IG5ldyBNaW5pZnlfSW1wb3J0UHJvY2Vzc29yKGRpcm5hbWUoJGZpbGUpKTsNCiAgICAgICAgcmV0dXJuICRvYmotPl9nZXRDb250ZW50KCRmaWxlKTsNCiAgICB9DQoNCiAgICAvLyBhbGxvd3MgY2FsbGJhY2sgZnVuY3MgdG8ga25vdyB0aGUgY3VycmVudCBkaXJlY3RvcnkNCiAgICBwcml2YXRlICRfY3VycmVudERpciA9IG51bGw7DQoNCiAgICAvLyBhbGxvd3MgY2FsbGJhY2sgZnVuY3MgdG8ga25vdyB0aGUgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIHRoYXQgaW5oZXJpdHMgdGhpcyBvbmUNCiAgICBwcml2YXRlICRfcHJldmlld3NEaXIgPSBudWxsOw0KDQogICAgLy8gYWxsb3dzIF9pbXBvcnRDQiB0byB3cml0ZSB0aGUgZmV0Y2hlZCBjb250ZW50IGJhY2sgdG8gdGhlIG9iag0KICAgIHByaXZhdGUgJF9pbXBvcnRlZENvbnRlbnQgPSAnJzsNCg0KICAgIHByaXZhdGUgc3RhdGljICRfaXNDc3MgPSBudWxsOw0KDQogICAgLyoqDQogICAgICogQHBhcmFtIFN0cmluZyAkY3VycmVudERpcg0KICAgICAqIEBwYXJhbSBTdHJpbmcgJHByZXZpZXdzRGlyIElzIG9ubHkgdXNlZCBpbnRlcm5hbGx5DQogICAgICovDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY3VycmVudERpciwgJHByZXZpZXdzRGlyID0gIiIpDQogICAgew0KICAgICAgICAkdGhpcy0+X2N1cnJlbnREaXIgPSAkY3VycmVudERpcjsNCiAgICAgICAgJHRoaXMtPl9wcmV2aWV3c0RpciA9ICRwcmV2aWV3c0RpcjsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRDb250ZW50KCRmaWxlLCAkaXNfaW1wb3J0ZWQgPSBmYWxzZSkNCiAgICB7DQogICAgICAgICRmaWxlID0gcmVhbHBhdGgoJGZpbGUpOw0KICAgICAgICBpZiAoISAkZmlsZQ0KICAgICAgICAgICAgfHwgaW5fYXJyYXkoJGZpbGUsIHNlbGY6OiRmaWxlc0luY2x1ZGVkKQ0KICAgICAgICAgICAgfHwgZmFsc2UgPT09ICgkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygkZmlsZSkpDQogICAgICAgICkgew0KICAgICAgICAgICAgLy8gZmlsZSBtaXNzaW5nLCBhbHJlYWR5IGluY2x1ZGVkLCBvciBmYWlsZWQgcmVhZA0KICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICB9DQogICAgICAgIHNlbGY6OiRmaWxlc0luY2x1ZGVkW10gPSByZWFscGF0aCgkZmlsZSk7DQogICAgICAgICR0aGlzLT5fY3VycmVudERpciA9IGRpcm5hbWUoJGZpbGUpOw0KDQogICAgICAgIC8vIHJlbW92ZSBVVEYtOCBCT00gaWYgcHJlc2VudA0KICAgICAgICBpZiAocGFjaygiQ0NDIiwweGVmLDB4YmIsMHhiZikgPT09IHN1YnN0cigkY29udGVudCwgMCwgMykpIHsNCiAgICAgICAgICAgICRjb250ZW50ID0gc3Vic3RyKCRjb250ZW50LCAzKTsNCiAgICAgICAgfQ0KICAgICAgICAvLyBlbnN1cmUgdW5pZm9ybSBFT0xzDQogICAgICAgICRjb250ZW50ID0gc3RyX3JlcGxhY2UoIlxyXG4iLCAiXG4iLCAkY29udGVudCk7DQoNCiAgICAgICAgLy8gcHJvY2VzcyBAaW1wb3J0cw0KICAgICAgICAkY29udGVudCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygNCiAgICAgICAgICAgICcvDQogICAgICAgICAgICAgICAgQGltcG9ydFxccysNCiAgICAgICAgICAgICAgICAoPzp1cmxcXChcXHMqKT8gICAgICAjIG1heWJlIHVybCgNCiAgICAgICAgICAgICAgICBbXCciXT8gICAgICAgICAgICAgICAjIG1heWJlIHF1b3RlDQogICAgICAgICAgICAgICAgKC4qPykgICAgICAgICAgICAgICAgIyAxID0gVVJJDQogICAgICAgICAgICAgICAgW1wnIl0/ICAgICAgICAgICAgICAgIyBtYXliZSBlbmQgcXVvdGUNCiAgICAgICAgICAgICAgICAoPzpcXHMqXFwpKT8gICAgICAgICAjIG1heWJlICkNCiAgICAgICAgICAgICAgICAoW2EtekEtWixcXHNdKik/ICAgICAjIDIgPSBtZWRpYSBsaXN0DQogICAgICAgICAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgIyBlbmQgdG9rZW4NCiAgICAgICAgICAgIC94Jw0KICAgICAgICAgICAgLGFycmF5KCR0aGlzLCAnX2ltcG9ydENCJykNCiAgICAgICAgICAgICwkY29udGVudA0KICAgICAgICApOw0KDQogICAgICAgIC8vIFlvdSBvbmx5IG5lZWQgdG8gcmV3b3JrIHRoZSBpbXBvcnQtcGF0aCBpZiB0aGUgc2NyaXB0IGlzIGltcG9ydGVkDQogICAgICAgIGlmIChzZWxmOjokX2lzQ3NzICYmICRpc19pbXBvcnRlZCkgew0KICAgICAgICAgICAgLy8gcmV3cml0ZSByZW1haW5pbmcgcmVsYXRpdmUgVVJJcw0KICAgICAgICAgICAgJGNvbnRlbnQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soDQogICAgICAgICAgICAgICAgJy91cmxcXChcXHMqKFteXFwpXFxzXSspXFxzKlxcKS8nDQogICAgICAgICAgICAgICAgLGFycmF5KCR0aGlzLCAnX3VybENCJykNCiAgICAgICAgICAgICAgICAsJGNvbnRlbnQNCiAgICAgICAgICAgICk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJHRoaXMtPl9pbXBvcnRlZENvbnRlbnQgLiAkY29udGVudDsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9pbXBvcnRDQigkbSkNCiAgICB7DQogICAgICAgICR1cmwgPSAkbVsxXTsNCiAgICAgICAgJG1lZGlhTGlzdCA9IHByZWdfcmVwbGFjZSgnL1xccysvJywgJycsICRtWzJdKTsNCg0KICAgICAgICBpZiAoc3RycG9zKCR1cmwsICc6Ly8nKSA+IDApIHsNCiAgICAgICAgICAgIC8vIHByb3RvY29sLCBsZWF2ZSBpbiBwbGFjZSBmb3IgQ1NTLCBjb21tZW50IGZvciBKUw0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRfaXNDc3MNCiAgICAgICAgICAgICAgICA/ICRtWzBdDQogICAgICAgICAgICAgICAgOiAiLyogTWluaWZ5X0ltcG9ydFByb2Nlc3NvciB3aWxsIG5vdCBpbmNsdWRlIHJlbW90ZSBjb250ZW50ICovIjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJy8nID09PSAkdXJsWzBdKSB7DQogICAgICAgICAgICAvLyBwcm90b2NvbC1yZWxhdGl2ZSBvciByb290IHBhdGgNCiAgICAgICAgICAgICR1cmwgPSBsdHJpbSgkdXJsLCAnLycpOw0KICAgICAgICAgICAgJGZpbGUgPSByZWFscGF0aCgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKSAuIERJUkVDVE9SWV9TRVBBUkFUT1INCiAgICAgICAgICAgICAgICAuIHN0cnRyKCR1cmwsICcvJywgRElSRUNUT1JZX1NFUEFSQVRPUik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAvLyByZWxhdGl2ZSB0byBjdXJyZW50IHBhdGgNCiAgICAgICAgICAgICRmaWxlID0gJHRoaXMtPl9jdXJyZW50RGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUg0KICAgICAgICAgICAgICAgIC4gc3RydHIoJHVybCwgJy8nLCBESVJFQ1RPUllfU0VQQVJBVE9SKTsNCiAgICAgICAgfQ0KICAgICAgICAkb2JqID0gbmV3IE1pbmlmeV9JbXBvcnRQcm9jZXNzb3IoZGlybmFtZSgkZmlsZSksICR0aGlzLT5fY3VycmVudERpcik7DQogICAgICAgICRjb250ZW50ID0gJG9iai0+X2dldENvbnRlbnQoJGZpbGUsIHRydWUpOw0KICAgICAgICBpZiAoJycgPT09ICRjb250ZW50KSB7DQogICAgICAgICAgICAvLyBmYWlsZWQuIGxlYXZlIGluIHBsYWNlIGZvciBDU1MsIGNvbW1lbnQgZm9yIEpTDQogICAgICAgICAgICByZXR1cm4gc2VsZjo6JF9pc0Nzcw0KICAgICAgICAgICAgICAgID8gJG1bMF0NCiAgICAgICAgICAgICAgICA6ICIvKiBNaW5pZnlfSW1wb3J0UHJvY2Vzc29yIGNvdWxkIG5vdCBmZXRjaCAneyRmaWxlfScgKi8iOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAoIXNlbGY6OiRfaXNDc3MgfHwgcHJlZ19tYXRjaCgnQCg/Ol4kfFxcYmFsbFxcYilAJywgJG1lZGlhTGlzdCkpDQogICAgICAgICAgICA/ICRjb250ZW50DQogICAgICAgICAgICA6ICJAbWVkaWEgeyRtZWRpYUxpc3R9IHtcbnskY29udGVudH1cbn1cbiI7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfdXJsQ0IoJG0pDQogICAgew0KICAgICAgICAvLyAkbVsxXSBpcyBlaXRoZXIgcXVvdGVkIG9yIG5vdA0KICAgICAgICAkcXVvdGUgPSAoJG1bMV1bMF0gPT09ICInIiB8fCAkbVsxXVswXSA9PT0gJyInKQ0KICAgICAgICAgICAgPyAkbVsxXVswXQ0KICAgICAgICAgICAgOiAnJzsNCiAgICAgICAgJHVybCA9ICgkcXVvdGUgPT09ICcnKQ0KICAgICAgICAgICAgPyAkbVsxXQ0KICAgICAgICAgICAgOiBzdWJzdHIoJG1bMV0sIDEsIHN0cmxlbigkbVsxXSkgLSAyKTsNCiAgICAgICAgaWYgKCcvJyAhPT0gJHVybFswXSkgew0KICAgICAgICAgICAgaWYgKHN0cnBvcygkdXJsLCAnLy8nKSA+IDApIHsNCiAgICAgICAgICAgICAgICAvLyBwcm9iYWJseSBzdGFydHMgd2l0aCBwcm90b2NvbCwgZG8gbm90IGFsdGVyDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIC8vIHByZXBlbmQgcGF0aCB3aXRoIGN1cnJlbnQgZGlyIHNlcGFyYXRvciAoT1MtaW5kZXBlbmRlbnQpDQogICAgICAgICAgICAgICAgJHBhdGggPSAkdGhpcy0+X2N1cnJlbnREaXINCiAgICAgICAgICAgICAgICAgICAgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gc3RydHIoJHVybCwgJy8nLCBESVJFQ1RPUllfU0VQQVJBVE9SKTsNCiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgdGhlIHJlbGF0aXZlIHBhdGggYnkgdGhlIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSB0aGF0IGltcG9ydGVkIHRoaXMgb25lDQogICAgICAgICAgICAgICAgJHVybCA9IHNlbGY6OmdldFBhdGhEaWZmKHJlYWxwYXRoKCR0aGlzLT5fcHJldmlld3NEaXIpLCAkcGF0aCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICJ1cmwoeyRxdW90ZX17JHVybH17JHF1b3RlfSkiOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJGZyb20NCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0bw0KICAgICAqIEBwYXJhbSBzdHJpbmcgJHBzDQogICAgICogQHJldHVybiBzdHJpbmcNCiAgICAgKi8NCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFBhdGhEaWZmKCRmcm9tLCAkdG8sICRwcyA9IERJUkVDVE9SWV9TRVBBUkFUT1IpDQogICAgew0KICAgICAgICAkcmVhbEZyb20gPSAkdGhpcy0+dHJ1ZXBhdGgoJGZyb20pOw0KICAgICAgICAkcmVhbFRvID0gJHRoaXMtPnRydWVwYXRoKCR0byk7DQoNCiAgICAgICAgJGFyRnJvbSA9IGV4cGxvZGUoJHBzLCBydHJpbSgkcmVhbEZyb20sICRwcykpOw0KICAgICAgICAkYXJUbyA9IGV4cGxvZGUoJHBzLCBydHJpbSgkcmVhbFRvLCAkcHMpKTsNCiAgICAgICAgd2hpbGUgKGNvdW50KCRhckZyb20pICYmIGNvdW50KCRhclRvKSAmJiAoJGFyRnJvbVswXSA9PSAkYXJUb1swXSkpDQogICAgICAgIHsNCiAgICAgICAgICAgIGFycmF5X3NoaWZ0KCRhckZyb20pOw0KICAgICAgICAgICAgYXJyYXlfc2hpZnQoJGFyVG8pOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBzdHJfcGFkKCIiLCBjb3VudCgkYXJGcm9tKSAqIDMsICcuLicgLiAkcHMpIC4gaW1wbG9kZSgkcHMsICRhclRvKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIHJlcGxhY2UgUEhQJ3MgZXh0cmVtZWx5IGJ1Z2d5IHJlYWxwYXRoKCkuDQogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aCBUaGUgb3JpZ2luYWwgcGF0aCwgY2FuIGJlIHJlbGF0aXZlIGV0Yy4NCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgcmVzb2x2ZWQgcGF0aCwgaXQgbWlnaHQgbm90IGV4aXN0Lg0KICAgICAqIEBzZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80MDQ5ODU2L3JlcGxhY2UtcGhwcy1yZWFscGF0aA0KICAgICAqLw0KICAgIGZ1bmN0aW9uIHRydWVwYXRoKCRwYXRoKQ0KICAgIHsNCiAgICAgICAgLy8gd2hldGhlciAkcGF0aCBpcyB1bml4IG9yIG5vdA0KICAgICAgICAkdW5pcGF0aCA9IHN0cmxlbigkcGF0aCkgPT0gMCB8fCAkcGF0aHswfSAhPSAnLyc7DQogICAgICAgIC8vIGF0dGVtcHRzIHRvIGRldGVjdCBpZiBwYXRoIGlzIHJlbGF0aXZlIGluIHdoaWNoIGNhc2UsIGFkZCBjd2QNCiAgICAgICAgaWYgKHN0cnBvcygkcGF0aCwgJzonKSA9PT0gZmFsc2UgJiYgJHVuaXBhdGgpDQogICAgICAgICAgICAkcGF0aCA9ICR0aGlzLT5fY3VycmVudERpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkcGF0aDsNCg0KICAgICAgICAvLyByZXNvbHZlIHBhdGggcGFydHMgKHNpbmdsZSBkb3QsIGRvdWJsZSBkb3QgYW5kIGRvdWJsZSBkZWxpbWl0ZXJzKQ0KICAgICAgICAkcGF0aCA9IHN0cl9yZXBsYWNlKGFycmF5KCcvJywgJ1xcJyksIERJUkVDVE9SWV9TRVBBUkFUT1IsICRwYXRoKTsNCiAgICAgICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7DQogICAgICAgICRhYnNvbHV0ZXMgPSBhcnJheSgpOw0KICAgICAgICBmb3JlYWNoICgkcGFydHMgYXMgJHBhcnQpIHsNCiAgICAgICAgICAgIGlmICgnLicgPT0gJHBhcnQpDQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkgew0KICAgICAgICAgICAgICAgIGFycmF5X3BvcCgkYWJzb2x1dGVzKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHBhdGggPSBpbXBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsICRhYnNvbHV0ZXMpOw0KICAgICAgICAvLyByZXNvbHZlIGFueSBzeW1saW5rcw0KICAgICAgICBpZiAoZmlsZV9leGlzdHMoJHBhdGgpICYmIGxpbmtpbmZvKCRwYXRoKSA+IDApDQogICAgICAgICAgICAkcGF0aCA9IHJlYWRsaW5rKCRwYXRoKTsNCiAgICAgICAgLy8gcHV0IGluaXRpYWwgc2VwYXJhdG9yIHRoYXQgY291bGQgaGF2ZSBiZWVuIGxvc3QNCiAgICAgICAgJHBhdGggPSAhJHVuaXBhdGggPyAnLycgLiAkcGF0aCA6ICRwYXRoOw0KICAgICAgICByZXR1cm4gJHBhdGg7DQogICAgfQ0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/JS/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/Minify/JS/ClosureCompiler.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9KU19DbG9zdXJlQ29tcGlsZXIKICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKLyoqCiAqIE1pbmlmeSBKYXZhc2NyaXB0IHVzaW5nIEdvb2dsZSdzIENsb3N1cmUgQ29tcGlsZXIgQVBJCiAqCiAqIEBsaW5rIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vY2xvc3VyZS9jb21waWxlci8KICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKgogKiBAdG9kbyBjYW4gdXNlIGEgc3RyZWFtIHdyYXBwZXIgdG8gdW5pdCB0ZXN0IHRoaXM/CiAqLwpjbGFzcyBNaW5pZnlfSlNfQ2xvc3VyZUNvbXBpbGVyIHsKICAgIGNvbnN0IFVSTCA9ICdodHRwOi8vY2xvc3VyZS1jb21waWxlci5hcHBzcG90LmNvbS9jb21waWxlJzsKCiAgICAvKioKICAgICAqIE1pbmlmeSBKYXZhc2NyaXB0IGNvZGUgdmlhIEhUVFAgcmVxdWVzdCB0byB0aGUgQ2xvc3VyZSBDb21waWxlciBBUEkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRqcyBpbnB1dCBjb2RlCiAgICAgKiBAcGFyYW0gYXJyYXkgJG9wdGlvbnMgdW51c2VkIGF0IHRoaXMgcG9pbnQKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWluaWZ5KCRqcywgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQogICAgewogICAgICAgICRvYmogPSBuZXcgc2VsZigkb3B0aW9ucyk7CiAgICAgICAgcmV0dXJuICRvYmotPm1pbigkanMpOwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucwogICAgICoKICAgICAqIGZhbGxiYWNrRnVuYyA6IGRlZmF1bHQgYXJyYXkoJHRoaXMsICdmYWxsYmFjaycpOwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5fZmFsbGJhY2tGdW5jID0gaXNzZXQoJG9wdGlvbnNbJ2ZhbGxiYWNrTWluaWZpZXInXSkKICAgICAgICAgICAgPyAkb3B0aW9uc1snZmFsbGJhY2tNaW5pZmllciddCiAgICAgICAgICAgIDogYXJyYXkoJHRoaXMsICdfZmFsbGJhY2snKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbWluKCRqcykKICAgIHsKICAgICAgICAkcG9zdEJvZHkgPSAkdGhpcy0+X2J1aWxkUG9zdEJvZHkoJGpzKTsKICAgICAgICAkYnl0ZXMgPSAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSAmJiAoKGludClpbmlfZ2V0KCdtYnN0cmluZy5mdW5jX292ZXJsb2FkJykgJiAyKSkKICAgICAgICAgICAgPyBtYl9zdHJsZW4oJHBvc3RCb2R5LCAnOGJpdCcpCiAgICAgICAgICAgIDogc3RybGVuKCRwb3N0Qm9keSk7CiAgICAgICAgaWYgKCRieXRlcyA+IDIwMDAwMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgTWluaWZ5X0pTX0Nsb3N1cmVDb21waWxlcl9FeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnUE9TVCBjb250ZW50IGxhcmdlciB0aGFuIDIwMDAwMCBieXRlcycKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJHJlc3BvbnNlID0gJHRoaXMtPl9nZXRSZXNwb25zZSgkcG9zdEJvZHkpOwogICAgICAgIGlmIChwcmVnX21hdGNoKCcvXkVycm9yXChcZFxkP1wpOi8nLCAkcmVzcG9uc2UpKSB7CiAgICAgICAgICAgIGlmIChpc19jYWxsYWJsZSgkdGhpcy0+X2ZhbGxiYWNrRnVuYykpIHsKICAgICAgICAgICAgICAgICRyZXNwb25zZSA9ICIvKiBSZWNlaXZlZCBlcnJvcnMgZnJvbSBDbG9zdXJlIENvbXBpbGVyIEFQSTpcbiRyZXNwb25zZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAuICJcbihVc2luZyBmYWxsYmFjayBtaW5pZmllcilcbiovXG4iOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlIC49IGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZmFsbGJhY2tGdW5jLCAkanMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1pbmlmeV9KU19DbG9zdXJlQ29tcGlsZXJfRXhjZXB0aW9uKCRyZXNwb25zZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRyZXNwb25zZSA9PT0gJycpIHsKICAgICAgICAgICAgJGVycm9ycyA9ICR0aGlzLT5fZ2V0UmVzcG9uc2UoJHRoaXMtPl9idWlsZFBvc3RCb2R5KCRqcywgdHJ1ZSkpOwogICAgICAgICAgICB0aHJvdyBuZXcgTWluaWZ5X0pTX0Nsb3N1cmVDb21waWxlcl9FeGNlcHRpb24oJGVycm9ycyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzcG9uc2U7CiAgICB9CgogICAgcHJvdGVjdGVkICRfZmFsbGJhY2tGdW5jID0gbnVsbDsKCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2dldFJlc3BvbnNlKCRwb3N0Qm9keSkKICAgIHsKICAgICAgICAkYWxsb3dVcmxGb3BlbiA9IHByZWdfbWF0Y2goJy8xfHllc3xvbnx0cnVlL2knLCBpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSk7CiAgICAgICAgaWYgKCRhbGxvd1VybEZvcGVuKSB7CiAgICAgICAgICAgICRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKHNlbGY6OlVSTCwgZmFsc2UsIHN0cmVhbV9jb250ZXh0X2NyZWF0ZShhcnJheSgKICAgICAgICAgICAgICAgICdodHRwJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnbWV0aG9kJyA9PiAnUE9TVCcsCiAgICAgICAgICAgICAgICAgICAgJ2hlYWRlcicgPT4gIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXHJcbkNvbm5lY3Rpb246IGNsb3NlXHJcbiIsCiAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQnID0+ICRwb3N0Qm9keSwKICAgICAgICAgICAgICAgICAgICAnbWF4X3JlZGlyZWN0cycgPT4gMCwKICAgICAgICAgICAgICAgICAgICAndGltZW91dCcgPT4gMTUsCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICkpKTsKICAgICAgICB9IGVsc2VpZiAoZGVmaW5lZCgnQ1VSTE9QVF9QT1NUJykpIHsKICAgICAgICAgICAgJGNoID0gY3VybF9pbml0KHNlbGY6OlVSTCk7CiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCB0cnVlKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hUVFBIRUFERVIsIGFycmF5KCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRwb3N0Qm9keSk7CiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgZmFsc2UpOwogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDE1KTsKICAgICAgICAgICAgJGNvbnRlbnRzID0gY3VybF9leGVjKCRjaCk7CiAgICAgICAgICAgIGN1cmxfY2xvc2UoJGNoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgTWluaWZ5X0pTX0Nsb3N1cmVDb21waWxlcl9FeGNlcHRpb24oCiAgICAgICAgICAgICAgICJDb3VsZCBub3QgbWFrZSBIVFRQIHJlcXVlc3Q6IGFsbG93X3VybF9vcGVuIGlzIGZhbHNlIGFuZCBjVVJMIG5vdCBhdmFpbGFibGUiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGlmIChmYWxzZSA9PT0gJGNvbnRlbnRzKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBNaW5pZnlfSlNfQ2xvc3VyZUNvbXBpbGVyX0V4Y2VwdGlvbigKICAgICAgICAgICAgICAgIk5vIEhUVFAgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cmltKCRjb250ZW50cyk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9idWlsZFBvc3RCb2R5KCRqcywgJHJldHVybkVycm9ycyA9IGZhbHNlKQogICAgewogICAgICAgIHJldHVybiBodHRwX2J1aWxkX3F1ZXJ5KGFycmF5KAogICAgICAgICAgICAnanNfY29kZScgPT4gJGpzLAogICAgICAgICAgICAnb3V0cHV0X2luZm8nID0+ICgkcmV0dXJuRXJyb3JzID8gJ2Vycm9ycycgOiAnY29tcGlsZWRfY29kZScpLAogICAgICAgICAgICAnb3V0cHV0X2Zvcm1hdCcgPT4gJ3RleHQnLAogICAgICAgICAgICAnY29tcGlsYXRpb25fbGV2ZWwnID0+ICdTSU1QTEVfT1BUSU1JWkFUSU9OUycKICAgICAgICApLCBudWxsLCAnJicpOwogICAgfQoKICAgIC8qKgogICAgICogRGVmYXVsdCBmYWxsYmFjayBmdW5jdGlvbiBpZiBDQyBBUEkgZmFpbHMKICAgICAqIEBwYXJhbSBzdHJpbmcgJGpzCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2ZhbGxiYWNrKCRqcykKICAgIHsKICAgICAgICByZXR1cm4gSlNNaW46Om1pbmlmeSgkanMpOwogICAgfQp9CgpjbGFzcyBNaW5pZnlfSlNfQ2xvc3VyZUNvbXBpbGVyX0V4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7fQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Lines.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9MaW5lcyAgCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KCi8qKgogKiBBZGQgbGluZSBudW1iZXJzIGluIEMtc3R5bGUgY29tbWVudHMgZm9yIGVhc2llciBkZWJ1Z2dpbmcgb2YgY29tYmluZWQgY29udGVudAogKgogKiBAcGFja2FnZSBNaW5pZnkKICogQGF1dGhvciBTdGVwaGVuIENsYXkgPHN0ZXZlQG1yY2xheS5vcmc+CiAqIEBhdXRob3IgQWRhbSBQZWRlcnNlbiAoSXNzdWUgNTUgZml4KQogKi8KY2xhc3MgTWluaWZ5X0xpbmVzIHsKCiAgICAvKioKICAgICAqIEFkZCBsaW5lIG51bWJlcnMgaW4gQy1zdHlsZSBjb21tZW50cwogICAgICoKICAgICAqIFRoaXMgdXNlcyBhIHZlcnkgYmFzaWMgcGFyc2VyIGVhc2lseSBmb29sZWQgYnkgY29tbWVudCB0b2tlbnMgaW5zaWRlCiAgICAgKiBzdHJpbmdzIG9yIHJlZ2V4ZXMsIGJ1dCwgb3RoZXJ3aXNlLCBnZW5lcmFsbHkgY2xlYW4gY29kZSB3aWxsIG5vdCBiZSAKICAgICAqIG1hbmdsZWQuIFVSSSByZXdyaXRpbmcgY2FuIGFsc28gYmUgcGVyZm9ybWVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvbnRlbnQKICAgICAqIAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zIGF2YWlsYWJsZSBvcHRpb25zOgogICAgICogCiAgICAgKiAnaWQnOiAob3B0aW9uYWwpIHN0cmluZyB0byBpZGVudGlmeSBmaWxlLiBFLmcuIGZpbGUgbmFtZS9wYXRoCiAgICAgKgogICAgICogJ2N1cnJlbnREaXInOiAoZGVmYXVsdCBudWxsKSBpZiBnaXZlbiwgdGhpcyBpcyBhc3N1bWVkIHRvIGJlIHRoZQogICAgICogZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50IENTUyBmaWxlLiBVc2luZyB0aGlzLCBtaW5pZnkgd2lsbCByZXdyaXRlCiAgICAgKiBhbGwgcmVsYXRpdmUgVVJJcyBpbiBpbXBvcnQvdXJsIGRlY2xhcmF0aW9ucyB0byBjb3JyZWN0bHkgcG9pbnQgdG8KICAgICAqIHRoZSBkZXNpcmVkIGZpbGVzLCBhbmQgcHJlcGVuZCBhIGNvbW1lbnQgd2l0aCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQKICAgICAqIHRoaXMgcHJvY2Vzcy4KICAgICAqIAogICAgICogQHJldHVybiBzdHJpbmcgCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWluaWZ5KCRjb250ZW50LCAkb3B0aW9ucyA9IGFycmF5KCkpIAogICAgewogICAgICAgICRpZCA9IChpc3NldCgkb3B0aW9uc1snaWQnXSkgJiYgJG9wdGlvbnNbJ2lkJ10pCiAgICAgICAgICAgID8gJG9wdGlvbnNbJ2lkJ10KICAgICAgICAgICAgOiAnJzsKICAgICAgICAkY29udGVudCA9IHN0cl9yZXBsYWNlKCJcclxuIiwgIlxuIiwgJGNvbnRlbnQpOwoKICAgICAgICAvLyBIYWNraWx5IHJld3JpdGUgc3RyaW5ncyB3aXRoIFhQYXRoIGV4cHJlc3Npb25zIHRoYXQgYXJlCiAgICAgICAgLy8gbGlrZWx5IHRvIHRocm93IG9mZiBvdXIgZHVtYiBwYXJzZXIgKGZvciBQcm90b3R5cGUgMS42LjEpLgogICAgICAgICRjb250ZW50ID0gc3RyX3JlcGxhY2UoJyIvKiInLCAnIi8iKyIqIicsICRjb250ZW50KTsKICAgICAgICAkY29udGVudCA9IHByZWdfcmVwbGFjZSgnQChbXCciXSkoXFwuPy8vPylcXCpAJywgJyQxJDIkMSskMSonLCAkY29udGVudCk7CgogICAgICAgICRsaW5lcyA9IGV4cGxvZGUoIlxuIiwgJGNvbnRlbnQpOwogICAgICAgICRudW1MaW5lcyA9IGNvdW50KCRsaW5lcyk7CiAgICAgICAgLy8gZGV0ZXJtaW5lIGxlZnQgcGFkZGluZwogICAgICAgICRwYWRUbyA9IHN0cmxlbigoc3RyaW5nKSAkbnVtTGluZXMpOyAvLyBlLmcuIDEwMyBsaW5lcyA9IDMgZGlnaXRzCiAgICAgICAgJGluQ29tbWVudCA9IGZhbHNlOwogICAgICAgICRpID0gMDsKICAgICAgICAkbmV3TGluZXMgPSBhcnJheSgpOwogICAgICAgIHdoaWxlIChudWxsICE9PSAoJGxpbmUgPSBhcnJheV9zaGlmdCgkbGluZXMpKSkgewogICAgICAgICAgICBpZiAoKCcnICE9PSAkaWQpICYmICgwID09ICRpICUgNTApKSB7CiAgICAgICAgICAgICAgICBpZiAoJGluQ29tbWVudCkgewogICAgICAgICAgICAgICAgICAgIGFycmF5X3B1c2goJG5ld0xpbmVzLCAnJywgIi8qIHskaWR9ICp8IiwgJycpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCRuZXdMaW5lcywgJycsICIvKiB7JGlkfSAqLyIsICcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICArKyRpOwogICAgICAgICAgICAkbmV3TGluZXNbXSA9IHNlbGY6Ol9hZGROb3RlKCRsaW5lLCAkaSwgJGluQ29tbWVudCwgJHBhZFRvKTsKICAgICAgICAgICAgJGluQ29tbWVudCA9IHNlbGY6Ol9lb2xJbkNvbW1lbnQoJGxpbmUsICRpbkNvbW1lbnQpOwogICAgICAgIH0KICAgICAgICAkY29udGVudCA9IGltcGxvZGUoIlxuIiwgJG5ld0xpbmVzKSAuICJcbiI7CiAgICAgICAgCiAgICAgICAgLy8gY2hlY2sgZm9yIGRlc2lyZWQgVVJJIHJld3JpdGluZwogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snY3VycmVudERpciddKSkgewogICAgICAgICAgICBNaW5pZnlfQ1NTX1VyaVJld3JpdGVyOjokZGVidWdUZXh0ID0gJyc7CiAgICAgICAgICAgICRjb250ZW50ID0gTWluaWZ5X0NTU19VcmlSZXdyaXRlcjo6cmV3cml0ZSgKICAgICAgICAgICAgICAgICAkY29udGVudAogICAgICAgICAgICAgICAgLCRvcHRpb25zWydjdXJyZW50RGlyJ10KICAgICAgICAgICAgICAgICxpc3NldCgkb3B0aW9uc1snZG9jUm9vdCddKSA/ICRvcHRpb25zWydkb2NSb290J10gOiAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddCiAgICAgICAgICAgICAgICAsaXNzZXQoJG9wdGlvbnNbJ3N5bWxpbmtzJ10pID8gJG9wdGlvbnNbJ3N5bWxpbmtzJ10gOiBhcnJheSgpCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRjb250ZW50ID0gIi8qIE1pbmlmeV9DU1NfVXJpUmV3cml0ZXI6OlwkZGVidWdUZXh0XG5cbiIgCiAgICAgICAgICAgICAgICAgICAgIC4gTWluaWZ5X0NTU19VcmlSZXdyaXRlcjo6JGRlYnVnVGV4dCAuICIqL1xuIgogICAgICAgICAgICAgICAgICAgICAuICRjb250ZW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gJGNvbnRlbnQ7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogSXMgdGhlIHBhcnNlciB3aXRoaW4gYSBDLXN0eWxlIGNvbW1lbnQgYXQgdGhlIGVuZCBvZiB0aGlzIGxpbmU/CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbGluZSBjdXJyZW50IGxpbmUgb2YgY29kZQogICAgICogCiAgICAgKiBAcGFyYW0gYm9vbCAkaW5Db21tZW50IHdhcyB0aGUgcGFyc2VyIGluIGEgY29tbWVudCBhdCB0aGUKICAgICAqIGJlZ2lubmluZyBvZiB0aGUgbGluZT8KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2VvbEluQ29tbWVudCgkbGluZSwgJGluQ29tbWVudCkKICAgIHsKICAgICAgICAvLyBjcnVkZSB3YXkgdG8gYXZvaWQgdGhpbmdzIGxpa2UgLy8gKi8KICAgICAgICAkbGluZSA9IHByZWdfcmVwbGFjZSgnfi8vLio/KFxcKi98L1xcKikuKn4nLCAnJywgJGxpbmUpOwoKICAgICAgICB3aGlsZSAoc3RybGVuKCRsaW5lKSkgewogICAgICAgICAgICAkc2VhcmNoID0gJGluQ29tbWVudAogICAgICAgICAgICAgICAgPyAnKi8nCiAgICAgICAgICAgICAgICA6ICcvKic7CiAgICAgICAgICAgICRwb3MgPSBzdHJwb3MoJGxpbmUsICRzZWFyY2gpOwogICAgICAgICAgICBpZiAoZmFsc2UgPT09ICRwb3MpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaW5Db21tZW50OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCRwb3MgPT0gMAogICAgICAgICAgICAgICAgICAgIHx8ICgkaW5Db21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgID8gc3Vic3RyKCRsaW5lLCAkcG9zLCAzKQogICAgICAgICAgICAgICAgICAgICAgICA6IHN1YnN0cigkbGluZSwgJHBvcy0xLCAzKSkgIT0gJyovKicpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRpbkNvbW1lbnQgPSAhICRpbkNvbW1lbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbGluZSA9IHN1YnN0cigkbGluZSwgJHBvcyArIDIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkaW5Db21tZW50OwogICAgfQogICAgCiAgICAvKioKICAgICAqIFByZXBlbmQgYSBjb21tZW50IChvciBub3RlKSB0byB0aGUgZ2l2ZW4gbGluZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxpbmUgY3VycmVudCBsaW5lIG9mIGNvZGUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRub3RlIGNvbnRlbnQgb2Ygbm90ZS9jb21tZW50CiAgICAgKiAKICAgICAqIEBwYXJhbSBib29sICRpbkNvbW1lbnQgd2FzIHRoZSBwYXJzZXIgaW4gYSBjb21tZW50IGF0IHRoZQogICAgICogYmVnaW5uaW5nIG9mIHRoZSBsaW5lPwogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJHBhZFRvIG1pbmltdW0gd2lkdGggb2YgY29tbWVudAogICAgICogCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfYWRkTm90ZSgkbGluZSwgJG5vdGUsICRpbkNvbW1lbnQsICRwYWRUbykKICAgIHsKICAgICAgICByZXR1cm4gJGluQ29tbWVudAogICAgICAgICAgICA/ICcvKiAnIC4gc3RyX3BhZCgkbm90ZSwgJHBhZFRvLCAnICcsIFNUUl9QQURfUklHSFQpIC4gJyAqfCAnIC4gJGxpbmUKICAgICAgICAgICAgOiAnLyogJyAuIHN0cl9wYWQoJG5vdGUsICRwYWRUbywgJyAnLCBTVFJfUEFEX1JJR0hUKSAuICcgKi8gJyAuICRsaW5lOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Loader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Mb2FkZXIKICogQHBhY2thZ2UgTWluaWZ5CiAqLwoKLyoqCiAqIENsYXNzIGF1dG9sb2FkZXIKICoKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKi8KY2xhc3MgTWluaWZ5X0xvYWRlciB7CiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZENsYXNzKCRjbGFzcykKICAgIHsKICAgICAgICAkZmlsZSA9IGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpIC4gRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgICAgICAkZmlsZSAuPSBzdHJ0cigkY2xhc3MsICJcXF8iLCBESVJFQ1RPUllfU0VQQVJBVE9SIC4gRElSRUNUT1JZX1NFUEFSQVRPUikgLiAnLnBocCc7CiAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCRmaWxlKSkgewogICAgICAgICAgICByZXF1aXJlICRmaWxlOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyKCkKICAgIHsKICAgICAgICAkaW5zdCA9IG5ldyBzZWxmKCk7CiAgICAgICAgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCRpbnN0LCAnbG9hZENsYXNzJykpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Logger.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Mb2dnZXIgIAogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKiogCiAqIE1lc3NhZ2UgbG9nZ2luZyBjbGFzcwogKiAKICogQHBhY2thZ2UgTWluaWZ5CiAqIEBhdXRob3IgU3RlcGhlbiBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKgogKiBAdG9kbyBsb3NlIHRoaXMgc2luZ2xldG9uISBwYXNzIGxvZyBvYmplY3QgaW4gTWluaWZ5OjpzZXJ2ZSBhbmQgZGlzdHJpYnV0ZSB0byBvdGhlcnMKICovCmNsYXNzIE1pbmlmeV9Mb2dnZXIgewoKICAgIC8qKgogICAgICogU2V0IGxvZ2dlciBvYmplY3QuIAogICAgICoKICAgICAqIFRoZSBvYmplY3Qgc2hvdWxkIGhhdmUgYSBtZXRob2QgImxvZyIgdGhhdCBhY2NlcHRzIGEgdmFsdWUgYXMgMXN0IGFyZ3VtZW50IGFuZAogICAgICogYW4gb3B0aW9uYWwgc3RyaW5nIGxhYmVsIGFzIHRoZSAybmQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRvYmogb3IgYSAiZmFsc2V5IiB2YWx1ZSB0byBkaXNhYmxlCiAgICAgKiBAcmV0dXJuIG51bGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRMb2dnZXIoJG9iaiA9IG51bGwpIHsKICAgICAgICBzZWxmOjokX2xvZ2dlciA9ICRvYmoKICAgICAgICAgICAgPyAkb2JqCiAgICAgICAgICAgIDogbnVsbDsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBQYXNzIGEgbWVzc2FnZSB0byB0aGUgbG9nZ2VyIChpZiBzZXQpCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbXNnIG1lc3NhZ2UgdG8gbG9nCiAgICAgKiBAcmV0dXJuIG51bGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2coJG1zZywgJGxhYmVsID0gJ01pbmlmeScpIHsKICAgICAgICBpZiAoISBzZWxmOjokX2xvZ2dlcikgcmV0dXJuOwogICAgICAgIHNlbGY6OiRfbG9nZ2VyLT5sb2coJG1zZywgJGxhYmVsKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkIGxvZ2dlciBvYmplY3QgKGxpa2UgRmlyZVBIUCkgb3IgbnVsbCAoaS5lLiBubyBsb2dnZXIgYXZhaWxhYmxlKQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyAkX2xvZ2dlciA9IG51bGw7Cn0K]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Packer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9QYWNrZXIKICoKICogVG8gdXNlIHRoaXMgY2xhc3MgeW91IG11c3QgZmlyc3QgZG93bmxvYWQgdGhlIFBIUCBwb3J0IG9mIFBhY2tlcgogKiBhbmQgcGxhY2UgdGhlIGZpbGUgImNsYXNzLkphdmFTY3JpcHRQYWNrZXIucGhwIiBpbiAvbGliIChvciB5b3VyCiAqIGluY2x1ZGVfcGF0aCkuIAogKiBAbGluayBodHRwOi8vam9saWNsaWMuZnJlZS5mci9waHAvamF2YXNjcmlwdC1wYWNrZXIvZW4vCiAqCiAqIEJlIGF3YXJlIHRoYXQsIGFzIGxvbmcgYXMgSFRUUCBlbmNvZGluZyBpcyB1c2VkLCBzY3JpcHRzIG1pbmlmaWVkIHdpdGggSlNNaW4KICogd2lsbCBwcm92aWRlIGJldHRlciBjbGllbnQtc2lkZSBwZXJmb3JtYW5jZSwgYXMgdGhleSBuZWVkIG5vdCBiZSB1bnBhY2tlZCBpbgogKiBjbGllbnQtc2lkZSBjb2RlLgogKiAKICogQHBhY2thZ2UgTWluaWZ5ICAKICovCgppZiAoZmFsc2UgPT09IChAaW5jbHVkZSAnY2xhc3MuSmF2YVNjcmlwdFBhY2tlci5waHAnKSkgewogICAgdHJpZ2dlcl9lcnJvcigKICAgICAgICAnVGhlIHNjcmlwdCAiY2xhc3MuSmF2YVNjcmlwdFBhY2tlci5waHAiIGlzIHJlcXVpcmVkLiBQbGVhc2Ugc2VlOiBodHRwOicKICAgICAgICAuJy8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5L3NvdXJjZS9icm93c2UvdHJ1bmsvbWluL2xpYi9NaW5pZnkvUGFja2VyLnBocCcKICAgICAgICAsRV9VU0VSX0VSUk9SCiAgICApOwp9CgovKioKICogTWluaWZ5IEphdmFzY3JpcHQgdXNpbmcgRGVhbiBFZHdhcmQncyBQYWNrZXIKICogCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KY2xhc3MgTWluaWZ5X1BhY2tlciB7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1pbmlmeSgkY29kZSwgJG9wdGlvbnMgPSBhcnJheSgpKQogICAgewogICAgICAgIC8vIEB0b2RvOiBzZXQgZW5jb2Rpbmcgb3B0aW9ucyBiYXNlZCBvbiAkb3B0aW9ucyA6KQogICAgICAgICRwYWNrZXIgPSBuZXcgSmF2YXNjcmlwdFBhY2tlcigkY29kZSwgJ05vcm1hbCcsIHRydWUsIGZhbHNlKTsKICAgICAgICByZXR1cm4gdHJpbSgkcGFja2VyLT5wYWNrKCkpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/Source.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9Tb3VyY2UgIAogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKiogCiAqIEEgY29udGVudCBzb3VyY2UgdG8gYmUgbWluaWZpZWQgYnkgTWluaWZ5LiAKICogCiAqIFRoaXMgYWxsb3dzIHBlci1zb3VyY2UgbWluaWZpY2F0aW9uIG9wdGlvbnMgYW5kIHRoZSBtaXhpbmcgb2YgZmlsZXMgd2l0aAogKiBjb250ZW50IGZyb20gb3RoZXIgc291cmNlcy4KICogCiAqIEBwYWNrYWdlIE1pbmlmeQogKiBAYXV0aG9yIFN0ZXBoZW4gQ2xheSA8c3RldmVAbXJjbGF5Lm9yZz4KICovCmNsYXNzIE1pbmlmeV9Tb3VyY2UgewoKICAgIC8qKgogICAgICogQHZhciBpbnQgdGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbgogICAgICovCiAgICBwdWJsaWMgJGxhc3RNb2RpZmllZCA9IG51bGw7CiAgICAKICAgIC8qKgogICAgICogQHZhciBjYWxsYmFjayBtaW5pZmllciBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgc291cmNlLgogICAgICovCiAgICBwdWJsaWMgJG1pbmlmaWVyID0gbnVsbDsKICAgIAogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5IG1pbmlmaWNhdGlvbiBvcHRpb25zIHNwZWNpZmljIHRvIHRoaXMgc291cmNlLgogICAgICovCiAgICBwdWJsaWMgJG1pbmlmeU9wdGlvbnMgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgZnVsbCBwYXRoIG9mIGZpbGUKICAgICAqLwogICAgcHVibGljICRmaWxlcGF0aCA9IG51bGw7CiAgICAKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcgSFRUUCBDb250ZW50IFR5cGUgKE1pbmlmeSByZXF1aXJlcyBvbmUgb2YgdGhlIGNvbnN0YW50cyBNaW5pZnk6OlRZUEVfKikKICAgICAqLwogICAgcHVibGljICRjb250ZW50VHlwZSA9IG51bGw7CiAgICAKICAgIC8qKgogICAgICogQ3JlYXRlIGEgTWluaWZ5X1NvdXJjZQogICAgICogCiAgICAgKiBJbiB0aGUgJHNwZWMgYXJyYXkoKSwgeW91IGNhbiBlaXRoZXIgcHJvdmlkZSBhICdmaWxlcGF0aCcgdG8gYW4gZXhpc3RpbmcKICAgICAqIGZpbGUgKGV4aXN0ZW5jZSB3aWxsIG5vdCBiZSBjaGVja2VkISkgb3IgZ2l2ZSAnaWQnICh1bmlxdWUgc3RyaW5nIGZvciAKICAgICAqIHRoZSBjb250ZW50KSwgJ2NvbnRlbnQnICh0aGUgc3RyaW5nIGNvbnRlbnQpIGFuZCAnbGFzdE1vZGlmaWVkJyAKICAgICAqICh1bml4dGltZSBvZiBsYXN0IHVwZGF0ZSkuCiAgICAgKiAKICAgICAqIEFzIGEgc2hvcnRjdXQsIHRoZSBjb250cm9sbGVyIHdpbGwgcmVwbGFjZSAiLy8iIGF0IHRoZSBiZWdpbm5pbmcKICAgICAqIG9mIGEgZmlsZXBhdGggd2l0aCAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC4gJy8nLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc3BlYyBvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3BlYykKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHNwZWNbJ2ZpbGVwYXRoJ10pKSB7CiAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJHNwZWNbJ2ZpbGVwYXRoJ10sICcvLycpKSB7CiAgICAgICAgICAgICAgICAkc3BlY1snZmlsZXBhdGgnXSA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gLiBzdWJzdHIoJHNwZWNbJ2ZpbGVwYXRoJ10sIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzZWdtZW50cyA9IGV4cGxvZGUoJy4nLCAkc3BlY1snZmlsZXBhdGgnXSk7CiAgICAgICAgICAgICRleHQgPSBzdHJ0b2xvd2VyKGFycmF5X3BvcCgkc2VnbWVudHMpKTsKICAgICAgICAgICAgc3dpdGNoICgkZXh0KSB7CiAgICAgICAgICAgIGNhc2UgJ2pzJyAgIDogJHRoaXMtPmNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2NzcycgIDogJHRoaXMtPmNvbnRlbnRUeXBlID0gJ3RleHQvY3NzJzsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaHRtJyAgOiAvLyBmYWxsdGhyb3VnaAogICAgICAgICAgICBjYXNlICdodG1sJyA6ICR0aGlzLT5jb250ZW50VHlwZSA9ICd0ZXh0L2h0bWwnOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5maWxlcGF0aCA9ICRzcGVjWydmaWxlcGF0aCddOwogICAgICAgICAgICAkdGhpcy0+X2lkID0gJHNwZWNbJ2ZpbGVwYXRoJ107CiAgICAgICAgICAgICR0aGlzLT5sYXN0TW9kaWZpZWQgPSBmaWxlbXRpbWUoJHNwZWNbJ2ZpbGVwYXRoJ10pCiAgICAgICAgICAgICAgICAvLyBvZmZzZXQgZm9yIFdpbmRvd3MgdXBsb2FkZXJzIHdpdGggb3V0IG9mIHN5bmMgY2xvY2tzCiAgICAgICAgICAgICAgICArIHJvdW5kKE1pbmlmeTo6JHVwbG9hZGVySG91cnNCZWhpbmQgKiAzNjAwKTsKICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJHNwZWNbJ2lkJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5faWQgPSAnaWQ6OicgLiAkc3BlY1snaWQnXTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRzcGVjWydjb250ZW50J10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+X2NvbnRlbnQgPSAkc3BlY1snY29udGVudCddOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPl9nZXRDb250ZW50RnVuYyA9ICRzcGVjWydnZXRDb250ZW50RnVuYyddOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5sYXN0TW9kaWZpZWQgPSBpc3NldCgkc3BlY1snbGFzdE1vZGlmaWVkJ10pCiAgICAgICAgICAgICAgICA/ICRzcGVjWydsYXN0TW9kaWZpZWQnXQogICAgICAgICAgICAgICAgOiB0aW1lKCk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkc3BlY1snY29udGVudFR5cGUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPmNvbnRlbnRUeXBlID0gJHNwZWNbJ2NvbnRlbnRUeXBlJ107CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkc3BlY1snbWluaWZpZXInXSkpIHsKICAgICAgICAgICAgJHRoaXMtPm1pbmlmaWVyID0gJHNwZWNbJ21pbmlmaWVyJ107CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkc3BlY1snbWluaWZ5T3B0aW9ucyddKSkgewogICAgICAgICAgICAkdGhpcy0+bWluaWZ5T3B0aW9ucyA9ICRzcGVjWydtaW5pZnlPcHRpb25zJ107CiAgICAgICAgfQogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCBjb250ZW50CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgICRjb250ZW50ID0gKG51bGwgIT09ICR0aGlzLT5maWxlcGF0aCkKICAgICAgICAgICAgPyBmaWxlX2dldF9jb250ZW50cygkdGhpcy0+ZmlsZXBhdGgpCiAgICAgICAgICAgIDogKChudWxsICE9PSAkdGhpcy0+X2NvbnRlbnQpCiAgICAgICAgICAgICAgICA/ICR0aGlzLT5fY29udGVudAogICAgICAgICAgICAgICAgOiBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2dldENvbnRlbnRGdW5jLCAkdGhpcy0+X2lkKQogICAgICAgICAgICApOwogICAgICAgIC8vIHJlbW92ZSBVVEYtOCBCT00gaWYgcHJlc2VudAogICAgICAgIHJldHVybiAocGFjaygiQ0NDIiwweGVmLDB4YmIsMHhiZikgPT09IHN1YnN0cigkY29udGVudCwgMCwgMykpCiAgICAgICAgICAgID8gc3Vic3RyKCRjb250ZW50LCAzKQogICAgICAgICAgICA6ICRjb250ZW50OwogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCBpZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5faWQ7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogVmVyaWZpZXMgYSBzaW5nbGUgbWluaWZpY2F0aW9uIGNhbGwgY2FuIGhhbmRsZSBhbGwgc291cmNlcwogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkc291cmNlcyBNaW5pZnlfU291cmNlIGluc3RhbmNlcwogICAgICogCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZmYgdGhlcmUgbm8gc291cmNlcyB3aXRoIHNwZWNpZmljIG1pbmlmaWVyIHByZWZlcmVuY2VzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhdmVOb01pbmlmeVByZWZzKCRzb3VyY2VzKQogICAgewogICAgICAgIGZvcmVhY2ggKCRzb3VyY2VzIGFzICRzb3VyY2UpIHsKICAgICAgICAgICAgaWYgKG51bGwgIT09ICRzb3VyY2UtPm1pbmlmaWVyCiAgICAgICAgICAgICAgICB8fCBudWxsICE9PSAkc291cmNlLT5taW5pZnlPcHRpb25zKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogR2V0IHVuaXF1ZSBzdHJpbmcgZm9yIGEgc2V0IG9mIHNvdXJjZXMKICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHNvdXJjZXMgTWluaWZ5X1NvdXJjZSBpbnN0YW5jZXMKICAgICAqIAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXREaWdlc3QoJHNvdXJjZXMpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHNvdXJjZXMgYXMgJHNvdXJjZSkgewogICAgICAgICAgICAkaW5mb1tdID0gYXJyYXkoCiAgICAgICAgICAgICAgICAkc291cmNlLT5faWQsICRzb3VyY2UtPm1pbmlmaWVyLCAkc291cmNlLT5taW5pZnlPcHRpb25zCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBtZDUoc2VyaWFsaXplKCRpbmZvKSk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogR2V0IGNvbnRlbnQgdHlwZSBmcm9tIGEgZ3JvdXAgb2Ygc291cmNlcwogICAgICogCiAgICAgKiBUaGlzIGlzIGNhbGxlZCBpZiB0aGUgdXNlciBkb2Vzbid0IHBhc3MgaW4gYSAnY29udGVudFR5cGUnIG9wdGlvbnMgIAogICAgICogCiAgICAgKiBAcGFyYW0gYXJyYXkgJHNvdXJjZXMgTWluaWZ5X1NvdXJjZSBpbnN0YW5jZXMKICAgICAqIAogICAgICogQHJldHVybiBzdHJpbmcgY29udGVudCB0eXBlLiBlLmcuICd0ZXh0L2NzcycKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb250ZW50VHlwZSgkc291cmNlcykKICAgIHsKICAgICAgICBmb3JlYWNoICgkc291cmNlcyBhcyAkc291cmNlKSB7CiAgICAgICAgICAgIGlmICgkc291cmNlLT5jb250ZW50VHlwZSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRzb3VyY2UtPmNvbnRlbnRUeXBlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAndGV4dC9wbGFpbic7CiAgICB9CiAgICAKICAgIHByb3RlY3RlZCAkX2NvbnRlbnQgPSBudWxsOwogICAgcHJvdGVjdGVkICRfZ2V0Q29udGVudEZ1bmMgPSBudWxsOwogICAgcHJvdGVjdGVkICRfaWQgPSBudWxsOwp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/YUI/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/Minify/YUI/CssCompressor.java</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogWVVJIENvbXByZXNzb3IKICogaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2NvbXByZXNzb3IvCiAqIEF1dGhvcjogSnVsaWVuIExlY29tdGUgLSAgaHR0cDovL3d3dy5qdWxpZW5sZWNvbXRlLm5ldC8KICogQXV0aG9yOiBJc2FhYyBTY2hsdWV0ZXIgLSBodHRwOi8vZm9vaGFjay5jb20vCiAqIEF1dGhvcjogU3RveWFuIFN0ZWZhbm92IC0gaHR0cDovL3BocGllZC5jb20vCiAqIENvcHlyaWdodCAoYykgMjAxMSBZYWhvbyEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhlIGNvcHlyaWdodHMgZW1ib2RpZWQgaW4gdGhlIGNvbnRlbnQgb2YgdGhpcyBmaWxlIGFyZSBsaWNlbnNlZAogKiBieSBZYWhvbyEgSW5jLiB1bmRlciB0aGUgQlNEIChyZXZpc2VkKSBvcGVuIHNvdXJjZSBsaWNlbnNlLgogKi8KcGFja2FnZSBjb20ueWFob28ucGxhdGZvcm0ueXVpLmNvbXByZXNzb3I7CgppbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKaW1wb3J0IGphdmEuaW8uUmVhZGVyOwppbXBvcnQgamF2YS5pby5Xcml0ZXI7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKCnB1YmxpYyBjbGFzcyBDc3NDb21wcmVzc29yIHsKCiAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBzcmNzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKCiAgICBwdWJsaWMgQ3NzQ29tcHJlc3NvcihSZWFkZXIgaW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgLy8gUmVhZCB0aGUgc3RyZWFtLi4uCiAgICAgICAgaW50IGM7CiAgICAgICAgd2hpbGUgKChjID0gaW4ucmVhZCgpKSAhPSAtMSkgewogICAgICAgICAgICBzcmNzYi5hcHBlbmQoKGNoYXIpIGMpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBMZWF2ZSBkYXRhIHVybHMgYWxvbmUgdG8gaW5jcmVhc2UgcGFyc2UgcGVyZm9ybWFuY2UuCiAgICBwcm90ZWN0ZWQgU3RyaW5nIGV4dHJhY3REYXRhVXJscyhTdHJpbmcgY3NzLCBBcnJheUxpc3QgcHJlc2VydmVkVG9rZW5zKSB7CgogICAgCWludCBtYXhJbmRleCA9IGNzcy5sZW5ndGgoKSAtIDE7CiAgICAgICAgaW50IGFwcGVuZEluZGV4ID0gMDsKCiAgICAJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICAgICAgICBQYXR0ZXJuIHAgPSBQYXR0ZXJuLmNvbXBpbGUoInVybFxcKFxccyooW1wiJ10/KWRhdGFcXDoiKTsKICAgICAgICBNYXRjaGVyIG0gPSBwLm1hdGNoZXIoY3NzKTsKICAgICAgICAKICAgICAgICAvKiAKICAgICAgICAgKiBTaW5jZSB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIG5vbi1iYXNlNjQgZGF0YSB1cmxzLCB3ZSBuZWVkIHRvIGhhbmRsZSAKICAgICAgICAgKiAnIGFuZCApIGJlaW5nIHBhcnQgb2YgdGhlIGRhdGEgc3RyaW5nLiBIZW5jZSBzd2l0Y2hpbmcgdG8gaW5kZXhPZiwKICAgICAgICAgKiB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UgaGF2ZSBtYXRjaGluZyBzdHJpbmcgdGVybWluYXRvcnMgYW5kCiAgICAgICAgICogaGFuZGxpbmcgc2IgYXBwZW5kcyBkaXJlY3RseSwgaW5zdGVhZCBvZiB1c2luZyBtYXRjaGVyLmFwcGVuZCogbWV0aG9kcy4KICAgICAgICAgKi8KCiAgICAgICAgd2hpbGUgKG0uZmluZCgpKSB7CgogICAgICAgIAlpbnQgc3RhcnRJbmRleCA9IG0uc3RhcnQoKSArIDQ7ICAJLy8gInVybCgiLmxlbmd0aCgpCiAgICAJCVN0cmluZyB0ZXJtaW5hdG9yID0gbS5ncm91cCgxKTsgICAgIC8vICcsICIgb3IgZW1wdHkgKG5vdCBxdW90ZWQpCiAgICAJCQogICAgCQlpZiAodGVybWluYXRvci5sZW5ndGgoKSA9PSAwKSB7CiAgICAJCSAJdGVybWluYXRvciA9ICIpIjsKICAgIAkJfQoKICAgIAkJYm9vbGVhbiBmb3VuZFRlcm1pbmF0b3IgPSBmYWxzZTsKCiAgICAJCWludCBlbmRJbmRleCA9IG0uZW5kKCkgLSAxOwogICAgCQl3aGlsZShmb3VuZFRlcm1pbmF0b3IgPT0gZmFsc2UgJiYgZW5kSW5kZXgrMSA8PSBtYXhJbmRleCkgewogICAgCQkJZW5kSW5kZXggPSBjc3MuaW5kZXhPZih0ZXJtaW5hdG9yLCBlbmRJbmRleCsxKTsKCiAgICAJCQlpZiAoKGVuZEluZGV4ID4gMCkgJiYgKGNzcy5jaGFyQXQoZW5kSW5kZXgtMSkgIT0gJ1xcJykpIHsKICAgIAkJCQlmb3VuZFRlcm1pbmF0b3IgPSB0cnVlOwogICAgCQkJCWlmICghIikiLmVxdWFscyh0ZXJtaW5hdG9yKSkgewogICAgCQkJCQllbmRJbmRleCA9IGNzcy5pbmRleE9mKCIpIiwgZW5kSW5kZXgpOyAKICAgIAkJCQl9CiAgICAJCQl9CiAgICAJCX0KCiAgICAJCS8vIEVub3VnaCBzZWFyY2hpbmcsIHN0YXJ0IG1vdmluZyBzdHVmZiBvdmVyIHRvIHRoZSBidWZmZXIKCQkJc2IuYXBwZW5kKGNzcy5zdWJzdHJpbmcoYXBwZW5kSW5kZXgsIG0uc3RhcnQoKSkpOwoKICAgIAkJaWYgKGZvdW5kVGVybWluYXRvcikgewogICAgCQkJU3RyaW5nIHRva2VuID0gY3NzLnN1YnN0cmluZyhzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICAJCQl0b2tlbiA9IHRva2VuLnJlcGxhY2VBbGwoIlxccysiLCAiIik7CgkgICAgCQlwcmVzZXJ2ZWRUb2tlbnMuYWRkKHRva2VuKTsKCgkgICAgCQlTdHJpbmcgcHJlc2VydmVyID0gInVybChfX19ZVUlDU1NNSU5fUFJFU0VSVkVEX1RPS0VOXyIgKyAocHJlc2VydmVkVG9rZW5zLnNpemUoKSAtIDEpICsgIl9fXykiOwoJICAgIAkJc2IuYXBwZW5kKHByZXNlcnZlcik7CgoJICAgIAkJYXBwZW5kSW5kZXggPSBlbmRJbmRleCArIDE7CiAgICAJCX0gZWxzZSB7CiAgICAJCQkvLyBObyBlbmQgdGVybWluYXRvciBmb3VuZCwgcmUtYWRkIHRoZSB3aG9sZSBtYXRjaC4gU2hvdWxkIHdlIHRocm93L3dhcm4gaGVyZT8KICAgIAkJCXNiLmFwcGVuZChjc3Muc3Vic3RyaW5nKG0uc3RhcnQoKSwgbS5lbmQoKSkpOwogICAgCQkJYXBwZW5kSW5kZXggPSBtLmVuZCgpOwogICAgCQl9CiAgICAgICAgfQoKICAgICAgICBzYi5hcHBlbmQoY3NzLnN1YnN0cmluZyhhcHBlbmRJbmRleCkpOwoKICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBjb21wcmVzcyhXcml0ZXIgb3V0LCBpbnQgbGluZWJyZWFrcG9zKQogICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewoKICAgICAgICBQYXR0ZXJuIHA7CiAgICAgICAgTWF0Y2hlciBtOwogICAgICAgIFN0cmluZyBjc3MgPSBzcmNzYi50b1N0cmluZygpOwoKICAgICAgICBpbnQgc3RhcnRJbmRleCA9IDA7CiAgICAgICAgaW50IGVuZEluZGV4ID0gMDsKICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgaW50IG1heCA9IDA7CiAgICAgICAgQXJyYXlMaXN0IHByZXNlcnZlZFRva2VucyA9IG5ldyBBcnJheUxpc3QoMCk7CiAgICAgICAgQXJyYXlMaXN0IGNvbW1lbnRzID0gbmV3IEFycmF5TGlzdCgwKTsKICAgICAgICBTdHJpbmcgdG9rZW47CiAgICAgICAgaW50IHRvdGFsbGVuID0gY3NzLmxlbmd0aCgpOwogICAgICAgIFN0cmluZyBwbGFjZWhvbGRlcjsKCiAgICAgICAgY3NzID0gdGhpcy5leHRyYWN0RGF0YVVybHMoY3NzLCBwcmVzZXJ2ZWRUb2tlbnMpOwoKICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKGNzcyk7CgogICAgICAgIC8vIGNvbGxlY3QgYWxsIGNvbW1lbnQgYmxvY2tzLi4uCiAgICAgICAgd2hpbGUgKChzdGFydEluZGV4ID0gc2IuaW5kZXhPZigiLyoiLCBzdGFydEluZGV4KSkgPj0gMCkgewogICAgICAgICAgICBlbmRJbmRleCA9IHNiLmluZGV4T2YoIiovIiwgc3RhcnRJbmRleCArIDIpOwogICAgICAgICAgICBpZiAoZW5kSW5kZXggPCAwKSB7CiAgICAgICAgICAgICAgICBlbmRJbmRleCA9IHRvdGFsbGVuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0b2tlbiA9IHNiLnN1YnN0cmluZyhzdGFydEluZGV4ICsgMiwgZW5kSW5kZXgpOwogICAgICAgICAgICBjb21tZW50cy5hZGQodG9rZW4pOwogICAgICAgICAgICBzYi5yZXBsYWNlKHN0YXJ0SW5kZXggKyAyLCBlbmRJbmRleCwgIl9fX1lVSUNTU01JTl9QUkVTRVJWRV9DQU5ESURBVEVfQ09NTUVOVF8iICsgKGNvbW1lbnRzLnNpemUoKSAtIDEpICsgIl9fXyIpOwogICAgICAgICAgICBzdGFydEluZGV4ICs9IDI7CiAgICAgICAgfQogICAgICAgIGNzcyA9IHNiLnRvU3RyaW5nKCk7CgogICAgICAgIC8vIHByZXNlcnZlIHN0cmluZ3Mgc28gdGhlaXIgY29udGVudCBkb2Vzbid0IGdldCBhY2NpZGVudGFsbHkgbWluaWZpZWQKICAgICAgICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBwID0gUGF0dGVybi5jb21waWxlKCIoXCIoW15cXFxcXCJdfFxcXFwufFxcXFwpKlwiKXwoXCcoW15cXFxcXCddfFxcXFwufFxcXFwpKlwnKSIpOwogICAgICAgIG0gPSBwLm1hdGNoZXIoY3NzKTsKICAgICAgICB3aGlsZSAobS5maW5kKCkpIHsKICAgICAgICAgICAgdG9rZW4gPSBtLmdyb3VwKCk7CiAgICAgICAgICAgIGNoYXIgcXVvdGUgPSB0b2tlbi5jaGFyQXQoMCk7CiAgICAgICAgICAgIHRva2VuID0gdG9rZW4uc3Vic3RyaW5nKDEsIHRva2VuLmxlbmd0aCgpIC0gMSk7CgogICAgICAgICAgICAvLyBtYXliZSB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgY29tbWVudC1saWtlIHN1YnN0cmluZz8KICAgICAgICAgICAgLy8gb25lLCBtYXliZSBtb3JlPyBwdXQnZW0gYmFjayB0aGVuCiAgICAgICAgICAgIGlmICh0b2tlbi5pbmRleE9mKCJfX19ZVUlDU1NNSU5fUFJFU0VSVkVfQ0FORElEQVRFX0NPTU1FTlRfIikgPj0gMCkgewogICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbWF4ID0gY29tbWVudHMuc2l6ZSgpOyBpIDwgbWF4OyBpICs9IDEpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuLnJlcGxhY2UoIl9fX1lVSUNTU01JTl9QUkVTRVJWRV9DQU5ESURBVEVfQ09NTUVOVF8iICsgaSArICJfX18iLCBjb21tZW50cy5nZXQoaSkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIG1pbmlmeSBhbHBoYSBvcGFjaXR5IGluIGZpbHRlciBzdHJpbmdzCiAgICAgICAgICAgIHRva2VuID0gdG9rZW4ucmVwbGFjZUFsbCgiKD9pKXByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYVxcKE9wYWNpdHk9IiwgImFscGhhKG9wYWNpdHk9Iik7CgogICAgICAgICAgICBwcmVzZXJ2ZWRUb2tlbnMuYWRkKHRva2VuKTsKICAgICAgICAgICAgU3RyaW5nIHByZXNlcnZlciA9IHF1b3RlICsgIl9fX1lVSUNTU01JTl9QUkVTRVJWRURfVE9LRU5fIiArIChwcmVzZXJ2ZWRUb2tlbnMuc2l6ZSgpIC0gMSkgKyAiX19fIiArIHF1b3RlOwogICAgICAgICAgICBtLmFwcGVuZFJlcGxhY2VtZW50KHNiLCBwcmVzZXJ2ZXIpOwogICAgICAgIH0KICAgICAgICBtLmFwcGVuZFRhaWwoc2IpOwogICAgICAgIGNzcyA9IHNiLnRvU3RyaW5nKCk7CgoKICAgICAgICAvLyBzdHJpbmdzIGFyZSBzYWZlLCBub3cgd3Jlc3RsZSB0aGUgY29tbWVudHMKICAgICAgICBmb3IgKGkgPSAwLCBtYXggPSBjb21tZW50cy5zaXplKCk7IGkgPCBtYXg7IGkgKz0gMSkgewoKICAgICAgICAgICAgdG9rZW4gPSBjb21tZW50cy5nZXQoaSkudG9TdHJpbmcoKTsKICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSAiX19fWVVJQ1NTTUlOX1BSRVNFUlZFX0NBTkRJREFURV9DT01NRU5UXyIgKyBpICsgIl9fXyI7CgogICAgICAgICAgICAvLyAhIGluIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGUgY29tbWVudCBtZWFucyBwcmVzZXJ2ZQogICAgICAgICAgICAvLyBzbyBwdXNoIHRvIHRoZSBwcmVzZXJ2ZWQgdG9rZW5zIHdoaWxlIHN0cmlwcGluZyB0aGUgIQogICAgICAgICAgICBpZiAodG9rZW4uc3RhcnRzV2l0aCgiISIpKSB7CiAgICAgICAgICAgICAgICBwcmVzZXJ2ZWRUb2tlbnMuYWRkKHRva2VuKTsKICAgICAgICAgICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlKHBsYWNlaG9sZGVyLCAgIl9fX1lVSUNTU01JTl9QUkVTRVJWRURfVE9LRU5fIiArIChwcmVzZXJ2ZWRUb2tlbnMuc2l6ZSgpIC0gMSkgKyAiX19fIik7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gXCBpbiB0aGUgbGFzdCBwb3NpdGlvbiBsb29rcyBsaWtlIGhhY2sgZm9yIE1hYy9JRTUKICAgICAgICAgICAgLy8gc2hvcnRlbiB0aGF0IHRvIC8qXCovIGFuZCB0aGUgbmV4dCBvbmUgdG8gLyoqLwogICAgICAgICAgICBpZiAodG9rZW4uZW5kc1dpdGgoIlxcIikpIHsKICAgICAgICAgICAgICAgIHByZXNlcnZlZFRva2Vucy5hZGQoIlxcIik7CiAgICAgICAgICAgICAgICBjc3MgPSBjc3MucmVwbGFjZShwbGFjZWhvbGRlciwgICJfX19ZVUlDU1NNSU5fUFJFU0VSVkVEX1RPS0VOXyIgKyAocHJlc2VydmVkVG9rZW5zLnNpemUoKSAtIDEpICsgIl9fXyIpOwogICAgICAgICAgICAgICAgaSA9IGkgKyAxOyAvLyBhdHRuOiBhZHZhbmNpbmcgdGhlIGxvb3AKICAgICAgICAgICAgICAgIHByZXNlcnZlZFRva2Vucy5hZGQoIiIpOwogICAgICAgICAgICAgICAgY3NzID0gY3NzLnJlcGxhY2UoIl9fX1lVSUNTU01JTl9QUkVTRVJWRV9DQU5ESURBVEVfQ09NTUVOVF8iICsgaSArICJfX18iLCAgIl9fX1lVSUNTU01JTl9QUkVTRVJWRURfVE9LRU5fIiArIChwcmVzZXJ2ZWRUb2tlbnMuc2l6ZSgpIC0gMSkgKyAiX19fIik7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8ga2VlcCBlbXB0eSBjb21tZW50cyBhZnRlciBjaGlsZCBzZWxlY3RvcnMgKElFNyBoYWNrKQogICAgICAgICAgICAvLyBlLmcuIGh0bWwgPi8qKi8gYm9keQogICAgICAgICAgICBpZiAodG9rZW4ubGVuZ3RoKCkgPT0gMCkgewogICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IGNzcy5pbmRleE9mKHBsYWNlaG9sZGVyKTsKICAgICAgICAgICAgICAgIGlmIChzdGFydEluZGV4ID4gMikgewogICAgICAgICAgICAgICAgICAgIGlmIChjc3MuY2hhckF0KHN0YXJ0SW5kZXggLSAzKSA9PSAnPicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVkVG9rZW5zLmFkZCgiIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlKHBsYWNlaG9sZGVyLCAgIl9fX1lVSUNTU01JTl9QUkVTRVJWRURfVE9LRU5fIiArIChwcmVzZXJ2ZWRUb2tlbnMuc2l6ZSgpIC0gMSkgKyAiX19fIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBpbiBhbGwgb3RoZXIgY2FzZXMga2lsbCB0aGUgY29tbWVudAogICAgICAgICAgICBjc3MgPSBjc3MucmVwbGFjZSgiLyoiICsgcGxhY2Vob2xkZXIgKyAiKi8iLCAiIik7CiAgICAgICAgfQoKCiAgICAgICAgLy8gTm9ybWFsaXplIGFsbCB3aGl0ZXNwYWNlIHN0cmluZ3MgdG8gc2luZ2xlIHNwYWNlcy4gRWFzaWVyIHRvIHdvcmsgd2l0aCB0aGF0IHdheS4KICAgICAgICBjc3MgPSBjc3MucmVwbGFjZUFsbCgiXFxzKyIsICIgIik7CgogICAgICAgIC8vIFJlbW92ZSB0aGUgc3BhY2VzIGJlZm9yZSB0aGUgdGhpbmdzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIHNwYWNlcyBiZWZvcmUgdGhlbS4KICAgICAgICAvLyBCdXQsIGJlIGNhcmVmdWwgbm90IHRvIHR1cm4gInAgOmxpbmsgey4uLn0iIGludG8gInA6bGlua3suLi59IgogICAgICAgIC8vIFN3YXAgb3V0IGFueSBwc2V1ZG8tY2xhc3MgY29sb25zIHdpdGggdGhlIHRva2VuLCBhbmQgdGhlbiBzd2FwIGJhY2suCiAgICAgICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgcCA9IFBhdHRlcm4uY29tcGlsZSgiKF58XFx9KSgoW15cXHs6XSkrOikrKFteXFx7XSpcXHspIik7CiAgICAgICAgbSA9IHAubWF0Y2hlcihjc3MpOwogICAgICAgIHdoaWxlIChtLmZpbmQoKSkgewogICAgICAgICAgICBTdHJpbmcgcyA9IG0uZ3JvdXAoKTsKICAgICAgICAgICAgcyA9IHMucmVwbGFjZUFsbCgiOiIsICJfX19ZVUlDU1NNSU5fUFNFVURPQ0xBU1NDT0xPTl9fXyIpOwogICAgICAgICAgICBzID0gcy5yZXBsYWNlQWxsKCAiXFxcXCIsICJcXFxcXFxcXCIgKS5yZXBsYWNlQWxsKCAiXFwkIiwgIlxcXFxcXCQiICk7CiAgICAgICAgICAgIG0uYXBwZW5kUmVwbGFjZW1lbnQoc2IsIHMpOwogICAgICAgIH0KICAgICAgICBtLmFwcGVuZFRhaWwoc2IpOwogICAgICAgIGNzcyA9IHNiLnRvU3RyaW5nKCk7CiAgICAgICAgLy8gUmVtb3ZlIHNwYWNlcyBiZWZvcmUgdGhlIHRoaW5ncyB0aGF0IHNob3VsZCBub3QgaGF2ZSBzcGFjZXMgYmVmb3JlIHRoZW0uCiAgICAgICAgY3NzID0gY3NzLnJlcGxhY2VBbGwoIlxccysoWyF7fTs6PitcXChcXClcXF0sXSkiLCAiJDEiKTsKICAgICAgICAvLyBicmluZyBiYWNrIHRoZSBjb2xvbgogICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlQWxsKCJfX19ZVUlDU1NNSU5fUFNFVURPQ0xBU1NDT0xPTl9fXyIsICI6Iik7CgogICAgICAgIC8vIHJldGFpbiBzcGFjZSBmb3Igc3BlY2lhbCBJRTYgY2FzZXMKICAgICAgICBjc3MgPSBjc3MucmVwbGFjZUFsbCgiOmZpcnN0XFwtKGxpbmV8bGV0dGVyKShcXHt8LCkiLCAiOmZpcnN0LSQxICQyIik7CgogICAgICAgIC8vIG5vIHNwYWNlIGFmdGVyIHRoZSBlbmQgb2YgYSBwcmVzZXJ2ZWQgY29tbWVudAogICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlQWxsKCJcXCovICIsICIqLyIpOwoKICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIEBjaGFyc2V0LCB0aGVuIG9ubHkgYWxsb3cgb25lLCBhbmQgcHVzaCB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLgogICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlQWxsKCJeKC4qKShAY2hhcnNldCBcIlteXCJdKlwiOykiLCAiJDIkMSIpOwogICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlQWxsKCJeKFxccypAY2hhcnNldCBbXjtdKztcXHMqKSsiLCAiJDEiKTsKCiAgICAgICAgLy8gUHV0IHRoZSBzcGFjZSBiYWNrIGluIHNvbWUgY2FzZXMsIHRvIHN1cHBvcnQgc3R1ZmYgbGlrZQogICAgICAgIC8vIEBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7CiAgICAgICAgY3NzID0gY3NzLnJlcGxhY2VBbGwoIlxcYmFuZFxcKCIsICJhbmQgKCIpOwoKICAgICAgICAvLyBSZW1vdmUgdGhlIHNwYWNlcyBhZnRlciB0aGUgdGhpbmdzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIHNwYWNlcyBhZnRlciB0aGVtLgogICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlQWxsKCIoWyF7fTo7PitcXChcXFssXSlcXHMrIiwgIiQxIik7CgogICAgICAgIC8vIHJlbW92ZSB1bm5lY2Vzc2FyeSBzZW1pY29sb25zCiAgICAgICAgY3NzID0gY3NzLnJlcGxhY2VBbGwoIjsrfSIsICJ9Iik7CgogICAgICAgIC8vIFJlcGxhY2UgMChweCxlbSwlKSB3aXRoIDAuCiAgICAgICAgY3NzID0gY3NzLnJlcGxhY2VBbGwoIihbXFxzOl0pKDApKHB4fGVtfCV8aW58Y218bW18cGN8cHR8ZXgpIiwgIiQxJDIiKTsKCiAgICAgICAgLy8gUmVwbGFjZSAwIDAgMCAwOyB3aXRoIDAuCiAgICAgICAgY3NzID0gY3NzLnJlcGxhY2VBbGwoIjowIDAgMCAwKDt8fSkiLCAiOjAkMSIpOwogICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlQWxsKCI6MCAwIDAoO3x9KSIsICI6MCQxIik7CiAgICAgICAgY3NzID0gY3NzLnJlcGxhY2VBbGwoIjowIDAoO3x9KSIsICI6MCQxIik7CgoKICAgICAgICAvLyBSZXBsYWNlIGJhY2tncm91bmQtcG9zaXRpb246MDsgd2l0aCBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDsKICAgICAgICAvLyBzYW1lIGZvciB0cmFuc2Zvcm0tb3JpZ2luCiAgICAgICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgcCA9IFBhdHRlcm4uY29tcGlsZSgiKD9pKShiYWNrZ3JvdW5kLXBvc2l0aW9ufHRyYW5zZm9ybS1vcmlnaW58d2Via2l0LXRyYW5zZm9ybS1vcmlnaW58bW96LXRyYW5zZm9ybS1vcmlnaW58by10cmFuc2Zvcm0tb3JpZ2lufG1zLXRyYW5zZm9ybS1vcmlnaW4pOjAoO3x9KSIpOwogICAgICAgIG0gPSBwLm1hdGNoZXIoY3NzKTsKICAgICAgICB3aGlsZSAobS5maW5kKCkpIHsKICAgICAgICAgICAgbS5hcHBlbmRSZXBsYWNlbWVudChzYiwgbS5ncm91cCgxKS50b0xvd2VyQ2FzZSgpICsgIjowIDAiICsgbS5ncm91cCgyKSk7CiAgICAgICAgfQogICAgICAgIG0uYXBwZW5kVGFpbChzYik7CiAgICAgICAgY3NzID0gc2IudG9TdHJpbmcoKTsKCiAgICAgICAgLy8gUmVwbGFjZSAwLjYgdG8gLjYsIGJ1dCBvbmx5IHdoZW4gcHJlY2VkZWQgYnkgOiBvciBhIHdoaXRlLXNwYWNlCiAgICAgICAgY3NzID0gY3NzLnJlcGxhY2VBbGwoIig6fFxccykwK1xcLihcXGQrKSIsICIkMS4kMiIpOwoKICAgICAgICAvLyBTaG9ydGVuIGNvbG9ycyBmcm9tIHJnYig1MSwxMDIsMTUzKSB0byAjMzM2Njk5CiAgICAgICAgLy8gVGhpcyBtYWtlcyBpdCBtb3JlIGxpa2VseSB0aGF0IGl0J2xsIGdldCBmdXJ0aGVyIGNvbXByZXNzZWQgaW4gdGhlIG5leHQgc3RlcC4KICAgICAgICBwID0gUGF0dGVybi5jb21waWxlKCJyZ2JcXHMqXFwoXFxzKihbMC05LFxcc10rKVxccypcXCkiKTsKICAgICAgICBtID0gcC5tYXRjaGVyKGNzcyk7CiAgICAgICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgd2hpbGUgKG0uZmluZCgpKSB7CiAgICAgICAgICAgIFN0cmluZ1tdIHJnYmNvbG9ycyA9IG0uZ3JvdXAoMSkuc3BsaXQoIiwiKTsKICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGhleGNvbG9yID0gbmV3IFN0cmluZ0J1ZmZlcigiIyIpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmdiY29sb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpbnQgdmFsID0gSW50ZWdlci5wYXJzZUludChyZ2Jjb2xvcnNbaV0pOwogICAgICAgICAgICAgICAgaWYgKHZhbCA8IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgaGV4Y29sb3IuYXBwZW5kKCIwIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBoZXhjb2xvci5hcHBlbmQoSW50ZWdlci50b0hleFN0cmluZyh2YWwpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBtLmFwcGVuZFJlcGxhY2VtZW50KHNiLCBoZXhjb2xvci50b1N0cmluZygpKTsKICAgICAgICB9CiAgICAgICAgbS5hcHBlbmRUYWlsKHNiKTsKICAgICAgICBjc3MgPSBzYi50b1N0cmluZygpOwoKICAgICAgICAvLyBTaG9ydGVuIGNvbG9ycyBmcm9tICNBQUJCQ0MgdG8gI0FCQy4gTm90ZSB0aGF0IHdlIHdhbnQgdG8gbWFrZSBzdXJlCiAgICAgICAgLy8gdGhlIGNvbG9yIGlzIG5vdCBwcmVjZWRlZCBieSBlaXRoZXIgIiwgIiBvciA9LiBJbmRlZWQsIHRoZSBwcm9wZXJ0eQogICAgICAgIC8vICAgICBmaWx0ZXI6IGNocm9tYShjb2xvcj0iI0ZGRkZGRiIpOwogICAgICAgIC8vIHdvdWxkIGJlY29tZQogICAgICAgIC8vICAgICBmaWx0ZXI6IGNocm9tYShjb2xvcj0iI0ZGRiIpOwogICAgICAgIC8vIHdoaWNoIG1ha2VzIHRoZSBmaWx0ZXIgYnJlYWsgaW4gSUUuCiAgICAgICAgLy8gV2UgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSB3ZSdyZSBvbmx5IGNvbXByZXNzaW5nICNBQUJCQ0MgcGF0dGVybnMgaW5zaWRlIHsgfSwgbm90IGlkIHNlbGVjdG9ycyAoICNGQUFCQUMge30gKQogICAgICAgIC8vIFdlIGFsc28gd2FudCB0byBhdm9pZCBjb21wcmVzc2luZyBpbnZhbGlkIHZhbHVlcyAoZS5nLiAjQUFCQkNDRCB0byAjQUJDRCkKICAgICAgICBwID0gUGF0dGVybi5jb21waWxlKCIoXFw9XFxzKj9bXCInXT8pPyIgKyAiIyhbMC05YS1mQS1GXSkoWzAtOWEtZkEtRl0pKFswLTlhLWZBLUZdKShbMC05YS1mQS1GXSkoWzAtOWEtZkEtRl0pKFswLTlhLWZBLUZdKSIgKyAiKDo/XFx9fFteMC05YS1mQS1Ge11bXntdKj9cXH0pIik7CgogICAgICAgIG0gPSBwLm1hdGNoZXIoY3NzKTsKICAgICAgICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBpbnQgaW5kZXggPSAwOwoKICAgICAgICB3aGlsZSAobS5maW5kKGluZGV4KSkgewoKICAgICAgICAJc2IuYXBwZW5kKGNzcy5zdWJzdHJpbmcoaW5kZXgsIG0uc3RhcnQoKSkpOwoKICAgICAgICAJYm9vbGVhbiBpc0ZpbHRlciA9IChtLmdyb3VwKDEpICE9IG51bGwgJiYgISIiLmVxdWFscyhtLmdyb3VwKDEpKSk7IAoKICAgICAgICAJaWYgKGlzRmlsdGVyKSB7CiAgICAgICAgCQkvLyBSZXN0b3JlLCBhcyBpcy4gQ29tcHJlc3Npb24gd2lsbCBicmVhayBmaWx0ZXJzCiAgICAgICAgCQlzYi5hcHBlbmQobS5ncm91cCgxKSArICIjIiArIG0uZ3JvdXAoMikgKyBtLmdyb3VwKDMpICsgbS5ncm91cCg0KSArIG0uZ3JvdXAoNSkgKyBtLmdyb3VwKDYpICsgbS5ncm91cCg3KSk7CiAgICAgICAgCX0gZWxzZSB7CiAgICAgICAgCQlpZiggbS5ncm91cCgyKS5lcXVhbHNJZ25vcmVDYXNlKG0uZ3JvdXAoMykpICYmCiAgICAgICAgICAgICAgICAgICAgbS5ncm91cCg0KS5lcXVhbHNJZ25vcmVDYXNlKG0uZ3JvdXAoNSkpICYmCiAgICAgICAgICAgICAgICAgICAgbS5ncm91cCg2KS5lcXVhbHNJZ25vcmVDYXNlKG0uZ3JvdXAoNykpKSB7CgoJICAgICAgICAJCS8vICNBQUJCQ0MgcGF0dGVybgoJICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiIyIgKyAobS5ncm91cCgzKSArIG0uZ3JvdXAoNSkgKyBtLmdyb3VwKDcpKS50b0xvd2VyQ2FzZSgpKTsKCiAgICAgICAgCQl9IGVsc2UgewoKICAgICAgICAJCQkvLyBOb24tY29tcHJlc3NpYmxlIGNvbG9yLCByZXN0b3JlLCBidXQgbG93ZXIgY2FzZS4KICAgICAgICAJCQlzYi5hcHBlbmQoIiMiICsgKG0uZ3JvdXAoMikgKyBtLmdyb3VwKDMpICsgbS5ncm91cCg0KSArIG0uZ3JvdXAoNSkgKyBtLmdyb3VwKDYpICsgbS5ncm91cCg3KSkudG9Mb3dlckNhc2UoKSk7CiAgICAgICAgCQl9CiAgICAgICAgICAgIH0KCiAgICAgICAgCWluZGV4ID0gbS5lbmQoNyk7CiAgICAgICAgfQoKICAgICAgICBzYi5hcHBlbmQoY3NzLnN1YnN0cmluZyhpbmRleCkpOwogICAgICAgIGNzcyA9IHNiLnRvU3RyaW5nKCk7CgogICAgICAgIC8vIGJvcmRlcjogbm9uZSAtPiBib3JkZXI6MAogICAgICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgIHAgPSBQYXR0ZXJuLmNvbXBpbGUoIig/aSkoYm9yZGVyfGJvcmRlci10b3B8Ym9yZGVyLXJpZ2h0fGJvcmRlci1ib3R0b218Ym9yZGVyLXJpZ2h0fG91dGxpbmV8YmFja2dyb3VuZCk6bm9uZSg7fH0pIik7CiAgICAgICAgbSA9IHAubWF0Y2hlcihjc3MpOwogICAgICAgIHdoaWxlIChtLmZpbmQoKSkgewogICAgICAgICAgICBtLmFwcGVuZFJlcGxhY2VtZW50KHNiLCBtLmdyb3VwKDEpLnRvTG93ZXJDYXNlKCkgKyAiOjAiICsgbS5ncm91cCgyKSk7CiAgICAgICAgfQogICAgICAgIG0uYXBwZW5kVGFpbChzYik7CiAgICAgICAgY3NzID0gc2IudG9TdHJpbmcoKTsKCiAgICAgICAgLy8gc2hvcnRlciBvcGFjaXR5IElFIGZpbHRlcgogICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlQWxsKCIoP2kpcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhXFwoT3BhY2l0eT0iLCAiYWxwaGEob3BhY2l0eT0iKTsKCiAgICAgICAgLy8gUmVtb3ZlIGVtcHR5IHJ1bGVzLgogICAgICAgIGNzcyA9IGNzcy5yZXBsYWNlQWxsKCJbXlxcfVxcey87XStcXHtcXH0iLCAiIik7CgogICAgICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIGFmdGVyIHdlIHJlLWluc2VydCB0b2tlbnMuIFRoZXNlIGNvdWxkIGFsdGVyIHRoZSBicmVhayBwb2ludHMuIEhvd2V2ZXIgdGhlbgogICAgICAgIC8vIHdlJ2QgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgYnJlYWsgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cmluZyBldGMuCiAgICAgICAgaWYgKGxpbmVicmVha3BvcyA+PSAwKSB7CiAgICAgICAgICAgIC8vIFNvbWUgc291cmNlIGNvbnRyb2wgdG9vbHMgZG9uJ3QgbGlrZSBpdCB3aGVuIGZpbGVzIGNvbnRhaW5pbmcgbGluZXMgbG9uZ2VyCiAgICAgICAgICAgIC8vIHRoYW4sIHNheSA4MDAwIGNoYXJhY3RlcnMsIGFyZSBjaGVja2VkIGluLiBUaGUgbGluZWJyZWFrIG9wdGlvbiBpcyB1c2VkIGluCiAgICAgICAgICAgIC8vIHRoYXQgY2FzZSB0byBzcGxpdCBsb25nIGxpbmVzIGFmdGVyIGEgc3BlY2lmaWMgY29sdW1uLgogICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgaW50IGxpbmVzdGFydHBvcyA9IDA7CiAgICAgICAgICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcihjc3MpOwogICAgICAgICAgICB3aGlsZSAoaSA8IHNiLmxlbmd0aCgpKSB7CiAgICAgICAgICAgICAgICBjaGFyIGMgPSBzYi5jaGFyQXQoaSsrKTsKICAgICAgICAgICAgICAgIGlmIChjID09ICd9JyAmJiBpIC0gbGluZXN0YXJ0cG9zID4gbGluZWJyZWFrcG9zKSB7CiAgICAgICAgICAgICAgICAgICAgc2IuaW5zZXJ0KGksICdcbicpOwogICAgICAgICAgICAgICAgICAgIGxpbmVzdGFydHBvcyA9IGk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNzcyA9IHNiLnRvU3RyaW5nKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZXBsYWNlIG11bHRpcGxlIHNlbWktY29sb25zIGluIGEgcm93IGJ5IGEgc2luZ2xlIG9uZQogICAgICAgIC8vIFNlZSBTRiBidWcgIzE5ODA5ODkKICAgICAgICBjc3MgPSBjc3MucmVwbGFjZUFsbCgiOzsrIiwgIjsiKTsKCiAgICAgICAgLy8gcmVzdG9yZSBwcmVzZXJ2ZWQgY29tbWVudHMgYW5kIHN0cmluZ3MKICAgICAgICBmb3IoaSA9IDAsIG1heCA9IHByZXNlcnZlZFRva2Vucy5zaXplKCk7IGkgPCBtYXg7IGkrKykgewogICAgICAgICAgICBjc3MgPSBjc3MucmVwbGFjZSgiX19fWVVJQ1NTTUlOX1BSRVNFUlZFRF9UT0tFTl8iICsgaSArICJfX18iLCBwcmVzZXJ2ZWRUb2tlbnMuZ2V0KGkpLnRvU3RyaW5nKCkpOwogICAgICAgIH0KCiAgICAgICAgLy8gVHJpbSB0aGUgZmluYWwgc3RyaW5nIChmb3IgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGUgc3BhY2VzKQogICAgICAgIGNzcyA9IGNzcy50cmltKCk7CgogICAgICAgIC8vIFdyaXRlIHRoZSBvdXRwdXQuLi4KICAgICAgICBvdXQud3JpdGUoY3NzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/YUI/CssCompressor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9ZVUlfQ3NzQ29tcHJlc3NvciAKICogQHBhY2thZ2UgTWluaWZ5CiAqCiAqIFlVSSBDb21wcmVzc29yCiAqIEF1dGhvcjogSnVsaWVuIExlY29tdGUgLSAgaHR0cDovL3d3dy5qdWxpZW5sZWNvbXRlLm5ldC8KICogQXV0aG9yOiBJc2FhYyBTY2hsdWV0ZXIgLSBodHRwOi8vZm9vaGFjay5jb20vCiAqIEF1dGhvcjogU3RveWFuIFN0ZWZhbm92IC0gaHR0cDovL3BocGllZC5jb20vCiAqIEF1dGhvcjogU3RldmUgQ2xheSAgICAgIC0gaHR0cDovL3d3dy5tcmNsYXkub3JnLyAoUEhQIHBvcnQpCiAqIENvcHlyaWdodCAoYykgMjAwOSBZYWhvbyEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhlIGNvcHlyaWdodHMgZW1ib2RpZWQgaW4gdGhlIGNvbnRlbnQgb2YgdGhpcyBmaWxlIGFyZSBsaWNlbnNlZAogKiBieSBZYWhvbyEgSW5jLiB1bmRlciB0aGUgQlNEIChyZXZpc2VkKSBvcGVuIHNvdXJjZSBsaWNlbnNlLgogKi8KCi8qKgogKiBDb21wcmVzcyBDU1MgKGluY29tcGxldGUgRE8gTk9UIFVTRSkKICogCiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3l1aS95dWljb21wcmVzc29yL2Jsb2IvbWFzdGVyL3NyYy9jb20veWFob28vcGxhdGZvcm0veXVpL2NvbXByZXNzb3IvQ3NzQ29tcHJlc3Nvci5qYXZhCiAqCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KY2xhc3MgTWluaWZ5X1lVSV9Dc3NDb21wcmVzc29yIHsKCiAgICAvKioKICAgICAqIE1pbmlmeSBhIENTUyBzdHJpbmcKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjc3MKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tcHJlc3MoJGNzcywgJGxpbmVicmVha3BvcyA9IDApCiAgICB7CiAgICAgICAgJGNzcyA9IHN0cl9yZXBsYWNlKCJcclxuIiwgIlxuIiwgJGNzcyk7CgogICAgICAgIC8qKgogICAgICAgICAqIEB0b2RvIGNvbW1lbnQgcmVtb3ZhbAogICAgICAgICAqIEB0b2RvIHJlLXBvcnQgZnJvbSBuZXdlciBKYXZhIHZlcnNpb24KICAgICAgICAgKi8KCiAgICAgICAgLy8gTm9ybWFsaXplIGFsbCB3aGl0ZXNwYWNlIHN0cmluZ3MgdG8gc2luZ2xlIHNwYWNlcy4gRWFzaWVyIHRvIHdvcmsgd2l0aCB0aGF0IHdheS4KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCdAXHMrQCcsICcgJywgJGNzcyk7CgogICAgICAgIC8vIE1ha2UgYSBwc2V1ZG8gY2xhc3MgZm9yIHRoZSBCb3ggTW9kZWwgSGFjawogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoIkBcIlxcXFxcIn1cXFxcXCJcIkAiLCAiX19fUFNFVURPQ0xBU1NCTUhfX18iLCAkY3NzKTsKCiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzcGFjZXMgYmVmb3JlIHRoZSB0aGluZ3MgdGhhdCBzaG91bGQgbm90IGhhdmUgc3BhY2VzIGJlZm9yZSB0aGVtLgogICAgICAgIC8vIEJ1dCwgYmUgY2FyZWZ1bCBub3QgdG8gdHVybiAicCA6bGluayB7Li4ufSIgaW50byAicDpsaW5rey4uLn0iCiAgICAgICAgLy8gU3dhcCBvdXQgYW55IHBzZXVkby1jbGFzcyBjb2xvbnMgd2l0aCB0aGUgdG9rZW4sIGFuZCB0aGVuIHN3YXAgYmFjay4KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCJAKF58XFx9KSgoW15cXHs6XSkrOikrKFteXFx7XSpcXHspQCIsIGFycmF5KCR0aGlzLCAnX3JlbW92ZVNwYWNlc0NCJyksICRjc3MpOwoKICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCJAXFxzKyhbIXt9Ozo+K1xcKFxcKVxcXSxdKUAiLCAiJDEiLCAkY3NzKTsKICAgICAgICAkY3NzID0gc3RyX3JlcGxhY2UoIl9fX1BTRVVET0NMQVNTQ09MT05fX18iLCAiOiIsICRjc3MpOwoKICAgICAgICAvLyBSZW1vdmUgdGhlIHNwYWNlcyBhZnRlciB0aGUgdGhpbmdzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIHNwYWNlcyBhZnRlciB0aGVtLgogICAgICAgICRjc3MgPSBwcmVnX3JlcGxhY2UoIkAoWyF7fTo7PitcXChcXFssXSlcXHMrQCIsICIkMSIsICRjc3MpOwoKICAgICAgICAvLyBBZGQgdGhlIHNlbWljb2xvbiB3aGVyZSBpdCdzIG1pc3NpbmcuCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgiQChbXjtcXH1dKX1AIiwgIiQxO30iLCAkY3NzKTsKCiAgICAgICAgLy8gUmVwbGFjZSAwKHB4LGVtLCUpIHdpdGggMC4KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCJAKFtcXHM6XSkoMCkocHh8ZW18JXxpbnxjbXxtbXxwY3xwdHxleClAIiwgIiQxJDIiLCAkY3NzKTsKCiAgICAgICAgLy8gUmVwbGFjZSAwIDAgMCAwOyB3aXRoIDAuCiAgICAgICAgJGNzcyA9IHN0cl9yZXBsYWNlKCI6MCAwIDAgMDsiLCAiOjA7IiwgJGNzcyk7CiAgICAgICAgJGNzcyA9IHN0cl9yZXBsYWNlKCI6MCAwIDA7IiwgIjowOyIsICRjc3MpOwogICAgICAgICRjc3MgPSBzdHJfcmVwbGFjZSgiOjAgMDsiLCAiOjA7IiwgJGNzcyk7CgogICAgICAgIC8vIFJlcGxhY2UgYmFja2dyb3VuZC1wb3NpdGlvbjowOyB3aXRoIGJhY2tncm91bmQtcG9zaXRpb246MCAwOwogICAgICAgICRjc3MgPSBzdHJfcmVwbGFjZSgiYmFja2dyb3VuZC1wb3NpdGlvbjowOyIsICJiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMDsiLCAkY3NzKTsKCiAgICAgICAgLy8gUmVwbGFjZSAwLjYgdG8gLjYsIGJ1dCBvbmx5IHdoZW4gcHJlY2VkZWQgYnkgOiBvciBhIHdoaXRlLXNwYWNlCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgiQCg6fFxccykwK1xcLihcXGQrKUAiLCAiJDEuJDIiLCAkY3NzKTsKCiAgICAgICAgLy8gU2hvcnRlbiBjb2xvcnMgZnJvbSByZ2IoNTEsMTAyLDE1MykgdG8gIzMzNjY5OQogICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgbW9yZSBsaWtlbHkgdGhhdCBpdCdsbCBnZXQgZnVydGhlciBjb21wcmVzc2VkIGluIHRoZSBuZXh0IHN0ZXAuCiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygiQHJnYlxccypcXChcXHMqKFswLTksXFxzXSspXFxzKlxcKUAiLCBhcnJheSgkdGhpcywgJ19zaG9ydGVuUmdiQ0InKSwgJGNzcyk7CgogICAgICAgIC8vIFNob3J0ZW4gY29sb3JzIGZyb20gI0FBQkJDQyB0byAjQUJDLiBOb3RlIHRoYXQgd2Ugd2FudCB0byBtYWtlIHN1cmUKICAgICAgICAvLyB0aGUgY29sb3IgaXMgbm90IHByZWNlZGVkIGJ5IGVpdGhlciAiLCAiIG9yID0uIEluZGVlZCwgdGhlIHByb3BlcnR5CiAgICAgICAgLy8gICAgIGZpbHRlcjogY2hyb21hKGNvbG9yPSIjRkZGRkZGIik7CiAgICAgICAgLy8gd291bGQgYmVjb21lCiAgICAgICAgLy8gICAgIGZpbHRlcjogY2hyb21hKGNvbG9yPSIjRkZGIik7CiAgICAgICAgLy8gd2hpY2ggbWFrZXMgdGhlIGZpbHRlciBicmVhayBpbiBJRS4KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCJAKFteXCInPVxcc10pKFxccyopIyhbMC05YS1mQS1GXSkoWzAtOWEtZkEtRl0pKFswLTlhLWZBLUZdKShbMC05YS1mQS1GXSkoWzAtOWEtZkEtRl0pKFswLTlhLWZBLUZdKUAiLCBhcnJheSgkdGhpcywgJ19zaG9ydGVuSGV4Q0InKSwgJGNzcyk7CgogICAgICAgIC8vIFJlbW92ZSBlbXB0eSBydWxlcy4KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCJAW15cXH1dK1xceztcXH1AIiwgIiIsICRjc3MpOwoKICAgICAgICAkbGluZWJyZWFrcG9zID0gaXNzZXQoJHRoaXMtPl9vcHRpb25zWydsaW5lYnJlYWtwb3MnXSkKICAgICAgICAgICAgPyAkdGhpcy0+X29wdGlvbnNbJ2xpbmVicmVha3BvcyddCiAgICAgICAgICAgIDogMDsKCiAgICAgICAgaWYgKCRsaW5lYnJlYWtwb3MgPiAwKSB7CiAgICAgICAgICAgIC8vIFNvbWUgc291cmNlIGNvbnRyb2wgdG9vbHMgZG9uJ3QgbGlrZSBpdCB3aGVuIGZpbGVzIGNvbnRhaW5pbmcgbGluZXMgbG9uZ2VyCiAgICAgICAgICAgIC8vIHRoYW4sIHNheSA4MDAwIGNoYXJhY3RlcnMsIGFyZSBjaGVja2VkIGluLiBUaGUgbGluZWJyZWFrIG9wdGlvbiBpcyB1c2VkIGluCiAgICAgICAgICAgIC8vIHRoYXQgY2FzZSB0byBzcGxpdCBsb25nIGxpbmVzIGFmdGVyIGEgc3BlY2lmaWMgY29sdW1uLgogICAgICAgICAgICAkaSA9IDA7CiAgICAgICAgICAgICRsaW5lc3RhcnRwb3MgPSAwOwogICAgICAgICAgICAkc2IgPSAkY3NzOwoKICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHN0cmxlbiByZXR1cm5zIGJ5dGUgY291bnQKICAgICAgICAgICAgJG1iSW50RW5jID0gbnVsbDsKICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnbWJfc3RybGVuJykgJiYgKChpbnQpaW5pX2dldCgnbWJzdHJpbmcuZnVuY19vdmVybG9hZCcpICYgMikpIHsKICAgICAgICAgICAgICAgICRtYkludEVuYyA9IG1iX2ludGVybmFsX2VuY29kaW5nKCk7CiAgICAgICAgICAgICAgICBtYl9pbnRlcm5hbF9lbmNvZGluZygnOGJpdCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRzYkxlbmd0aCA9IHN0cmxlbigkY3NzKTsKICAgICAgICAgICAgd2hpbGUgKCRpIDwgJHNiTGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAkYyA9ICRzYlskaSsrXTsKICAgICAgICAgICAgICAgIGlmICgkYyA9PT0gJ30nICYmICRpIC0gJGxpbmVzdGFydHBvcyA+ICRsaW5lYnJlYWtwb3MpIHsKICAgICAgICAgICAgICAgICAgICAkc2IgPSBzdWJzdHJfcmVwbGFjZSgkc2IsICJcbiIsICRpLCAwKTsKICAgICAgICAgICAgICAgICAgICAkc2JMZW5ndGgrKzsKICAgICAgICAgICAgICAgICAgICAkbGluZXN0YXJ0cG9zID0gJGk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNzcyA9ICRzYjsKCiAgICAgICAgICAgIC8vIHVuZG8gcG90ZW50aWFsIG1iX2VuY29kaW5nIGNoYW5nZQogICAgICAgICAgICBpZiAoJG1iSW50RW5jICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBtYl9pbnRlcm5hbF9lbmNvZGluZygkbWJJbnRFbmMpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZXBsYWNlIHRoZSBwc2V1ZG8gY2xhc3MgZm9yIHRoZSBCb3ggTW9kZWwgSGFjawogICAgICAgICRjc3MgPSBzdHJfcmVwbGFjZSgiX19fUFNFVURPQ0xBU1NCTUhfX18iLCAiXCJcXFxcXCJ9XFxcXFwiXCIiLCAkY3NzKTsKCiAgICAgICAgLy8gUmVwbGFjZSBtdWx0aXBsZSBzZW1pLWNvbG9ucyBpbiBhIHJvdyBieSBhIHNpbmdsZSBvbmUKICAgICAgICAvLyBTZWUgU0YgYnVnICMxOTgwOTg5CiAgICAgICAgJGNzcyA9IHByZWdfcmVwbGFjZSgiQDs7K0AiLCAiOyIsICRjc3MpOwoKICAgICAgICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgSUU2IGJ1ZzogaHR0cDovL3d3dy5jcmFua3lnZWVrLmNvbS9pZTZwZWJ1Zy8KICAgICAgICAkY3NzID0gcHJlZ19yZXBsYWNlKCcvOmZpcnN0LWwoZXR0ZXJ8aW5lKVxcey8nLCAnOmZpcnN0LWwkMSB7JywgJGNzcyk7CgogICAgICAgIC8vIFRyaW0gdGhlIGZpbmFsIHN0cmluZyAoZm9yIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlIHNwYWNlcykKICAgICAgICAkY3NzID0gdHJpbSgkY3NzKTsKCiAgICAgICAgcmV0dXJuICRjc3M7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9yZW1vdmVTcGFjZXNDQigkbSkKICAgIHsKICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2UoJzonLCAnX19fUFNFVURPQ0xBU1NDT0xPTl9fXycsICRtWzBdKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3Nob3J0ZW5SZ2JDQigkbSkKICAgIHsKICAgICAgICAkcmdiY29sb3JzID0gZXhwbG9kZSgnLCcsICRtWzFdKTsKICAgICAgICAkaGV4Y29sb3IgPSAnIyc7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJHJnYmNvbG9ycyk7ICRpKyspIHsKICAgICAgICAgICAgJHZhbCA9IHJvdW5kKCRyZ2Jjb2xvcnNbJGldKTsKICAgICAgICAgICAgaWYgKCR2YWwgPCAxNikgewogICAgICAgICAgICAgICAgJGhleGNvbG9yIC49ICcwJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkaGV4Y29sb3IgLj0gZGVjaGV4KCR2YWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGhleGNvbG9yOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBfc2hvcnRlbkhleENCKCRtKQogICAgewogICAgICAgIC8vIFRlc3QgZm9yIEFBQkJDQyBwYXR0ZXJuCiAgICAgICAgaWYgKChzdHJ0b2xvd2VyKCRtWzNdKT09PXN0cnRvbG93ZXIoJG1bNF0pKSAmJgogICAgICAgICAgICAgICAgKHN0cnRvbG93ZXIoJG1bNV0pPT09c3RydG9sb3dlcigkbVs2XSkpICYmCiAgICAgICAgICAgICAgICAoc3RydG9sb3dlcigkbVs3XSk9PT1zdHJ0b2xvd2VyKCRtWzhdKSkpIHsKICAgICAgICAgICAgcmV0dXJuICRtWzFdIC4gJG1bMl0gLiAiIyIgLiAkbVszXSAuICRtWzVdIC4gJG1bN107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRtWzBdOwogICAgICAgIH0KICAgIH0KfQ==]]></data>
	</file>
	<file>
	  <filename>/min/lib/Minify/YUICompressor.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIENsYXNzIE1pbmlmeV9ZVUlDb21wcmVzc29yIAogKiBAcGFja2FnZSBNaW5pZnkKICovCgovKioKICogQ29tcHJlc3MgSmF2YXNjcmlwdC9DU1MgdXNpbmcgdGhlIFlVSSBDb21wcmVzc29yCiAqIAogKiBZb3UgbXVzdCBzZXQgJGphckZpbGUgYW5kICR0ZW1wRGlyIGJlZm9yZSBjYWxsaW5nIHRoZSBtaW5pZnkgZnVuY3Rpb25zLgogKiBBbHNvLCBkZXBlbmRpbmcgb24geW91ciBzaGVsbCdzIGVudmlyb25tZW50LCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeQogKiB0aGUgZnVsbCBwYXRoIHRvIGphdmEgaW4gJGphdmFFeGVjdXRhYmxlIG9yIHVzZSBwdXRlbnYoKSB0byBzZXR1cCB0aGUKICogSmF2YSBlbnZpcm9ubWVudC4KICogCiAqIDxjb2RlPgogKiBNaW5pZnlfWVVJQ29tcHJlc3Nvcjo6JGphckZpbGUgPSAnL3BhdGgvdG8veXVpY29tcHJlc3Nvci0yLjQuNi5qYXInOwogKiBNaW5pZnlfWVVJQ29tcHJlc3Nvcjo6JHRlbXBEaXIgPSAnL3RtcCc7CiAqICRjb2RlID0gTWluaWZ5X1lVSUNvbXByZXNzb3I6Om1pbmlmeUpzKAogKiAgICRjb2RlCiAqICAgLGFycmF5KCdub211bmdlJyA9PiB0cnVlLCAnbGluZS1icmVhaycgPT4gMTAwMCkKICogKTsKICogPC9jb2RlPgogKgogKiBOb3RlOiBJbiBjYXNlIHlvdSBydW4gb3V0IHN0YWNrIChkZWZhdWx0IGlzIDUxMmspLCB5b3UgbWF5IGluY3JlYXNlIHN0YWNrIHNpemUgaW4gJG9wdGlvbnM6CiAqICAgYXJyYXkoJ3N0YWNrLXNpemUnID0+ICcyMDQ4aycpCiAqCiAqIEB0b2RvIHVuaXQgdGVzdHMsICRvcHRpb25zIGRvY3MKICogCiAqIEBwYWNrYWdlIE1pbmlmeQogKiBAYXV0aG9yIFN0ZXBoZW4gQ2xheSA8c3RldmVAbXJjbGF5Lm9yZz4KICovCmNsYXNzIE1pbmlmeV9ZVUlDb21wcmVzc29yIHsKCiAgICAvKioKICAgICAqIEZpbGVwYXRoIG9mIHRoZSBZVUkgQ29tcHJlc3NvciBqYXIgZmlsZS4gVGhpcyBtdXN0IGJlIHNldCBiZWZvcmUKICAgICAqIGNhbGxpbmcgbWluaWZ5SnMoKSBvciBtaW5pZnlDc3MoKS4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljICRqYXJGaWxlID0gbnVsbDsKICAgIAogICAgLyoqCiAgICAgKiBXcml0YWJsZSB0ZW1wIGRpcmVjdG9yeS4gVGhpcyBtdXN0IGJlIHNldCBiZWZvcmUgY2FsbGluZyBtaW5pZnlKcygpCiAgICAgKiBvciBtaW5pZnlDc3MoKS4KICAgICAqCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljICR0ZW1wRGlyID0gbnVsbDsKICAgIAogICAgLyoqCiAgICAgKiBGaWxlcGF0aCBvZiAiamF2YSIgZXhlY3V0YWJsZSAobWF5IGJlIG5lZWRlZCBpZiBub3QgaW4gc2hlbGwncyBQQVRIKQogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgJGphdmFFeGVjdXRhYmxlID0gJ2phdmEnOwogICAgCiAgICAvKioKICAgICAqIE1pbmlmeSBhIEphdmFzY3JpcHQgc3RyaW5nCiAgICAgKiAKICAgICAqIEBwYXJhbSBzdHJpbmcgJGpzCiAgICAgKiAKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyAodmVyYm9zZSBpcyBpZ25vcmVkKQogICAgICogCiAgICAgKiBAc2VlIGh0dHA6Ly93d3cuanVsaWVubGVjb210ZS5uZXQveXVpY29tcHJlc3Nvci9SRUFETUUKICAgICAqIAogICAgICogQHJldHVybiBzdHJpbmcgCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWluaWZ5SnMoJGpzLCAkb3B0aW9ucyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6Ol9taW5pZnkoJ2pzJywgJGpzLCAkb3B0aW9ucyk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogTWluaWZ5IGEgQ1NTIHN0cmluZwogICAgICogCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjc3MKICAgICAqIAogICAgICogQHBhcmFtIGFycmF5ICRvcHRpb25zICh2ZXJib3NlIGlzIGlnbm9yZWQpCiAgICAgKiAKICAgICAqIEBzZWUgaHR0cDovL3d3dy5qdWxpZW5sZWNvbXRlLm5ldC95dWljb21wcmVzc29yL1JFQURNRQogICAgICogCiAgICAgKiBAcmV0dXJuIHN0cmluZyAKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtaW5pZnlDc3MoJGNzcywgJG9wdGlvbnMgPSBhcnJheSgpKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpfbWluaWZ5KCdjc3MnLCAkY3NzLCAkb3B0aW9ucyk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9taW5pZnkoJHR5cGUsICRjb250ZW50LCAkb3B0aW9ucykKICAgIHsKICAgICAgICBzZWxmOjpfcHJlcGFyZSgpOwogICAgICAgIGlmICghICgkdG1wRmlsZSA9IHRlbXBuYW0oc2VsZjo6JHRlbXBEaXIsICd5dWljXycpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNaW5pZnlfWVVJQ29tcHJlc3NvciA6IGNvdWxkIG5vdCBjcmVhdGUgdGVtcCBmaWxlLicpOwogICAgICAgIH0KICAgICAgICBmaWxlX3B1dF9jb250ZW50cygkdG1wRmlsZSwgJGNvbnRlbnQpOwogICAgICAgIGV4ZWMoc2VsZjo6X2dldENtZCgkb3B0aW9ucywgJHR5cGUsICR0bXBGaWxlKSwgJG91dHB1dCwgJHJlc3VsdF9jb2RlKTsKICAgICAgICB1bmxpbmsoJHRtcEZpbGUpOwogICAgICAgIGlmICgkcmVzdWx0X2NvZGUgIT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNaW5pZnlfWVVJQ29tcHJlc3NvciA6IFlVSSBjb21wcmVzc29yIGV4ZWN1dGlvbiBmYWlsZWQuJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbXBsb2RlKCJcbiIsICRvdXRwdXQpOwogICAgfQogICAgCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBfZ2V0Q21kKCR1c2VyT3B0aW9ucywgJHR5cGUsICR0bXBGaWxlKQogICAgewogICAgICAgICRvID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJ2NoYXJzZXQnID0+ICcnCiAgICAgICAgICAgICAgICAsJ2xpbmUtYnJlYWsnID0+IDUwMDAKICAgICAgICAgICAgICAgICwndHlwZScgPT4gJHR5cGUKICAgICAgICAgICAgICAgICwnbm9tdW5nZScgPT4gZmFsc2UKICAgICAgICAgICAgICAgICwncHJlc2VydmUtc2VtaScgPT4gZmFsc2UKICAgICAgICAgICAgICAgICwnZGlzYWJsZS1vcHRpbWl6YXRpb25zJyA9PiBmYWxzZQoJICAgICAgICAgICAgLCdzdGFjay1zaXplJyA9PiAnJwogICAgICAgICAgICApCiAgICAgICAgICAgICwkdXNlck9wdGlvbnMKICAgICAgICApOwogICAgICAgICRjbWQgPSBzZWxmOjokamF2YUV4ZWN1dGFibGUKCSAgICAgICAgIC4gKCFlbXB0eSgkb1snc3RhY2stc2l6ZSddKQoJICAgICAgICAgICAgPyAnIC1Yc3MnIC4gJG9bJ3N0YWNrLXNpemUnXQoJICAgICAgICAgICAgOiAnJykKCSAgICAgICAgIC4gJyAtamFyICcgLiBlc2NhcGVzaGVsbGFyZyhzZWxmOjokamFyRmlsZSkKICAgICAgICAgICAgIC4gIiAtLXR5cGUgeyR0eXBlfSIKICAgICAgICAgICAgIC4gKHByZWdfbWF0Y2goJy9eW1xcZGEtekEtWjAtOVxcLV0rJC8nLCAkb1snY2hhcnNldCddKQogICAgICAgICAgICAgICAgPyAiIC0tY2hhcnNldCB7JG9bJ2NoYXJzZXQnXX0iIAogICAgICAgICAgICAgICAgOiAnJykKICAgICAgICAgICAgIC4gKGlzX251bWVyaWMoJG9bJ2xpbmUtYnJlYWsnXSkgJiYgJG9bJ2xpbmUtYnJlYWsnXSA+PSAwCiAgICAgICAgICAgICAgICA/ICcgLS1saW5lLWJyZWFrICcgLiAoaW50KSRvWydsaW5lLWJyZWFrJ10KICAgICAgICAgICAgICAgIDogJycpOwogICAgICAgIGlmICgkdHlwZSA9PT0gJ2pzJykgewogICAgICAgICAgICBmb3JlYWNoIChhcnJheSgnbm9tdW5nZScsICdwcmVzZXJ2ZS1zZW1pJywgJ2Rpc2FibGUtb3B0aW1pemF0aW9ucycpIGFzICRvcHQpIHsKICAgICAgICAgICAgICAgICRjbWQgLj0gJG9bJG9wdF0gCiAgICAgICAgICAgICAgICAgICAgPyAiIC0teyRvcHR9IgogICAgICAgICAgICAgICAgICAgIDogJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRjbWQgLiAnICcgLiBlc2NhcGVzaGVsbGFyZygkdG1wRmlsZSk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9wcmVwYXJlKCkKICAgIHsKICAgICAgICBpZiAoISBpc19maWxlKHNlbGY6OiRqYXJGaWxlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNaW5pZnlfWVVJQ29tcHJlc3NvciA6ICRqYXJGaWxlKCcuc2VsZjo6JGphckZpbGUuJykgaXMgbm90IGEgdmFsaWQgZmlsZS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgaXNfcmVhZGFibGUoc2VsZjo6JGphckZpbGUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pbmlmeV9ZVUlDb21wcmVzc29yIDogJGphckZpbGUoJy5zZWxmOjokamFyRmlsZS4nKSBpcyBub3QgcmVhZGFibGUuJyk7CiAgICAgICAgfQogICAgICAgIGlmICghIGlzX2RpcihzZWxmOjokdGVtcERpcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTWluaWZ5X1lVSUNvbXByZXNzb3IgOiAkdGVtcERpcignLnNlbGY6OiR0ZW1wRGlyLicpIGlzIG5vdCBhIHZhbGlkIGRpcmVjb3RyeS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgaXNfd3JpdGFibGUoc2VsZjo6JHRlbXBEaXIpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pbmlmeV9ZVUlDb21wcmVzc29yIDogJHRlbXBEaXIoJy5zZWxmOjokdGVtcERpci4nKSBpcyBub3Qgd3JpdGFibGUuJyk7CiAgICAgICAgfQogICAgfQp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/min/lib/MrClay/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/MrClay/Cli.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCgpuYW1lc3BhY2UgTXJDbGF5OwoKdXNlIE1yQ2xheVxDbGlcQXJnOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKLyoqCiAqIEZvcm1zIGEgZnJvbnQgY29udHJvbGxlciBmb3IgYSBjb25zb2xlIGFwcCwgaGFuZGxpbmcgYW5kIHZhbGlkYXRpbmcgYXJndW1lbnRzIChvcHRpb25zKQogKgogKiBJbnN0YW50aWF0ZSwgYWRkIGFyZ3VtZW50cywgdGhlbiBjYWxsIHZhbGlkYXRlKCkuIEFmdGVyd2FyZHMsIHRoZSB1c2VyJ3MgdmFsaWQgYXJndW1lbnRzCiAqIGFuZCB0aGVpciB2YWx1ZXMgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGNsaS0+dmFsdWVzLgogKgogKiBZb3UgbWF5IGFsc28gc3BlY2lmeSB0aGF0IHNvbWUgYXJndW1lbnRzIGJlIHVzZWQgdG8gcHJvdmlkZSBpbnB1dC9vdXRwdXQuIEJ5IGNvbW11bmljYXRpbmcKICogc29sZWx5IHRocm91Z2ggdGhlIGZpbGUgcG9pbnRlcnMgcHJvdmlkZWQgYnkgb3BlbklucHV0KCkvb3Blbk91dHB1dCgpLCB5b3UgY2FuIG1ha2UgeW91cgogKiBhcHAgbW9yZSBmbGV4aWJsZSB0byBlbmQgdXNlcnMuCiAqCiAqIEBhdXRob3IgU3RldmUgQ2xheSA8c3RldmVAbXJjbGF5Lm9yZz4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAgIE1JVCBMaWNlbnNlCiAqLwpjbGFzcyBDbGkgewogICAgCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkgdmFsaWRhdGlvbiBlcnJvcnMKICAgICAqLwogICAgcHVibGljICRlcnJvcnMgPSBhcnJheSgpOwogICAgCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkgb3B0aW9uIHZhbHVlcyBhdmFpbGFibGUgYWZ0ZXIgdmFsaWRhdGlvbi4KICAgICAqIAogICAgICogRS5nLiBhcnJheSgKICAgICAqICAgICAgJ2EnID0+IGZhbHNlICAgICAgICAgICAgICAvLyBvcHRpb24gd2FzIG1pc3NpbmcKICAgICAqICAgICAsJ2InID0+IHRydWUgICAgICAgICAgICAgICAvLyBvcHRpb24gd2FzIHByZXNlbnQKICAgICAqICAgICAsJ2MnID0+ICJIZWxsbyIgICAgICAgICAgICAvLyBvcHRpb24gaGFkIHZhbHVlCiAgICAgKiAgICAgLCdmJyA9PiAiL2hvbWUvdXNlci9maWxlIiAgLy8gZmlsZSBwYXRoIGZyb20gcm9vdAogICAgICogICAgICwnZi5yYXcnID0+ICJ+L2ZpbGUiICAgICAgIC8vIGZpbGUgcGF0aCBhcyBnaXZlbiB0byBvcHRpb24KICAgICAqICkKICAgICAqLwogICAgcHVibGljICR2YWx1ZXMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwdWJsaWMgJG1vcmVBcmdzID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHVibGljICRkZWJ1ZyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wgVGhlIHVzZXIgd2FudHMgaGVscCBpbmZvCiAgICAgKi8KICAgIHB1YmxpYyAkaXNIZWxwUmVxdWVzdCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBBcmdbXQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9hcmdzID0gYXJyYXkoKTsKCiAgICAvKioKICAgICAqIEB2YXIgcmVzb3VyY2UKICAgICAqLwogICAgcHJvdGVjdGVkICRfc3RkaW4gPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciByZXNvdXJjZQogICAgICovCiAgICBwcm90ZWN0ZWQgJF9zdGRvdXQgPSBudWxsOwogICAgCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRleGl0SWZOb1N0ZGluIChkZWZhdWx0IHRydWUpIEV4aXQoKSBpZiBTVERJTiBpcyBub3QgZGVmaW5lZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGV4aXRJZk5vU3RkaW4gPSB0cnVlKQogICAgewogICAgICAgIGlmICgkZXhpdElmTm9TdGRpbiAmJiAhIGRlZmluZWQoJ1NURElOJykpIHsKICAgICAgICAgICAgZXhpdCgnVGhpcyBzY3JpcHQgaXMgZm9yIGNvbW1hbmQtbGluZSB1c2Ugb25seS4nKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRHTE9CQUxTWydhcmd2J11bMV0pCiAgICAgICAgICAgICAmJiAoJEdMT0JBTFNbJ2FyZ3YnXVsxXSA9PT0gJy0/JyB8fCAkR0xPQkFMU1snYXJndiddWzFdID09PSAnLS1oZWxwJykpIHsKICAgICAgICAgICAgJHRoaXMtPmlzSGVscFJlcXVlc3QgPSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBBcmd8c3RyaW5nICRsZXR0ZXIKICAgICAqIEByZXR1cm4gQXJnCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRPcHRpb25hbEFyZygkbGV0dGVyKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YWRkQXJndW1lbnQoJGxldHRlciwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIEFyZ3xzdHJpbmcgJGxldHRlcgogICAgICogQHJldHVybiBBcmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFJlcXVpcmVkQXJnKCRsZXR0ZXIpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hZGRBcmd1bWVudCgkbGV0dGVyLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGxldHRlcgogICAgICogQHBhcmFtIGJvb2wgJHJlcXVpcmVkCiAgICAgKiBAcGFyYW0gQXJnfG51bGwgJGFyZwogICAgICogQHJldHVybiBBcmcKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRBcmd1bWVudCgkbGV0dGVyLCAkcmVxdWlyZWQsIEFyZyAkYXJnID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISBwcmVnX21hdGNoKCcvXlthLXpBLVpdJC8nLCAkbGV0dGVyKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCckbGV0dGVyIG11c3QgYmUgaW4gW2EtekEtWl0nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCEgJGFyZykgewogICAgICAgICAgICAkYXJnID0gbmV3IEFyZygkcmVxdWlyZWQpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+X2FyZ3NbJGxldHRlcl0gPSAkYXJnOwogICAgICAgIHJldHVybiAkYXJnOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkbGV0dGVyCiAgICAgKiBAcmV0dXJuIEFyZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBcmd1bWVudCgkbGV0dGVyKQogICAgewogICAgICAgIHJldHVybiBpc3NldCgkdGhpcy0+X2FyZ3NbJGxldHRlcl0pID8gJHRoaXMtPl9hcmdzWyRsZXR0ZXJdIDogbnVsbDsKICAgIH0KCiAgICAvKgogICAgICogUmVhZCBhbmQgdmFsaWRhdGUgb3B0aW9ucwogICAgICogCiAgICAgKiBAcmV0dXJuIGJvb2wgdHJ1ZSBpZiBhbGwgb3B0aW9ucyBhcmUgdmFsaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlKCkKICAgIHsKICAgICAgICAkb3B0aW9ucyA9ICcnOwogICAgICAgICR0aGlzLT5lcnJvcnMgPSBhcnJheSgpOwogICAgICAgICR0aGlzLT52YWx1ZXMgPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5fc3RkaW4gPSBudWxsOwogICAgICAgIAogICAgICAgIGlmICgkdGhpcy0+aXNIZWxwUmVxdWVzdCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRsZXR0ZXJzVXNlZCA9ICcnOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5fYXJncyBhcyAkbGV0dGVyID0+ICRhcmcpIHsKICAgICAgICAgICAgLyogQHZhciBBcmcgJGFyZyAgKi8KICAgICAgICAgICAgJG9wdGlvbnMgLj0gJGxldHRlcjsKICAgICAgICAgICAgJGxldHRlcnNVc2VkIC49ICRsZXR0ZXI7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoJGFyZy0+bWF5SGF2ZVZhbHVlIHx8ICRhcmctPm11c3RIYXZlVmFsdWUpIHsKICAgICAgICAgICAgICAgICRvcHRpb25zIC49ICgkYXJnLT5tdXN0SGF2ZVZhbHVlID8gJzonIDogJzo6Jyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5kZWJ1Z1snYXJndiddID0gJEdMT0JBTFNbJ2FyZ3YnXTsKICAgICAgICAkYXJndkNvcHkgPSBhcnJheV9zbGljZSgkR0xPQkFMU1snYXJndiddLCAxKTsKICAgICAgICAkbyA9IGdldG9wdCgkb3B0aW9ucyk7CiAgICAgICAgJHRoaXMtPmRlYnVnWydnZXRvcHRfb3B0aW9ucyddID0gJG9wdGlvbnM7CiAgICAgICAgJHRoaXMtPmRlYnVnWydnZXRvcHRfcmV0dXJuJ10gPSAkbzsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPl9hcmdzIGFzICRsZXR0ZXIgPT4gJGFyZykgewogICAgICAgICAgICAvKiBAdmFyIEFyZyAkYXJnICAqLwogICAgICAgICAgICAkdGhpcy0+dmFsdWVzWyRsZXR0ZXJdID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChpc3NldCgkb1skbGV0dGVyXSkpIHsKICAgICAgICAgICAgICAgIGlmIChpc19ib29sKCRvWyRsZXR0ZXJdKSkgewoKICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgZnJvbSBhcmd2IGNvcHkKICAgICAgICAgICAgICAgICAgICAkayA9IGFycmF5X3NlYXJjaCgiLSRsZXR0ZXIiLCAkYXJndkNvcHkpOwogICAgICAgICAgICAgICAgICAgIGlmICgkayAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfc3BsaWNlKCRhcmd2Q29weSwgJGssIDEpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCRhcmctPm11c3RIYXZlVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFkZEVycm9yKCRsZXR0ZXIsICJNaXNzaW5nIHZhbHVlIik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnZhbHVlc1skbGV0dGVyXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmcKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dmFsdWVzWyRsZXR0ZXJdID0gJG9bJGxldHRlcl07CiAgICAgICAgICAgICAgICAgICAgJHYgPSYgJHRoaXMtPnZhbHVlc1skbGV0dGVyXTsKCiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gYXJndiBjb3B5CiAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgbG9vayBmb3IgLW92YWx1ZSBvciAtbz12YWx1ZQogICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuID0gIi9eLXskbGV0dGVyfT0/IiAuIHByZWdfcXVvdGUoJHYsICcvJykgLiAiJC8iOwogICAgICAgICAgICAgICAgICAgICRmb3VuZEluQXJndiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRhcmd2Q29weSBhcyAkayA9PiAkYXJnVikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgkcGF0dGVybiwgJGFyZ1YpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9zcGxpY2UoJGFyZ3ZDb3B5LCAkaywgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm91bmRJbkFyZ3YgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCEgJGZvdW5kSW5Bcmd2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwYWNlIHNlcGFyYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAkayA9IGFycmF5X3NlYXJjaCgiLSRsZXR0ZXIiLCAkYXJndkNvcHkpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGsgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9zcGxpY2UoJGFyZ3ZDb3B5LCAkaywgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB2YWx1ZSBpc24ndCByZWFsbHkgYW5vdGhlciBvcHRpb24KICAgICAgICAgICAgICAgICAgICBpZiAoc3RybGVuKCRsZXR0ZXJzVXNlZCkgPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYXR0ZXJuID0gIi9eLVsiIC4gc3RyX3JlcGxhY2UoJGxldHRlciwgJycsICRsZXR0ZXJzVXNlZCkgLiAiXS9pIjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJHBhdHRlcm4sICR2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmFkZEVycm9yKCRsZXR0ZXIsICJWYWx1ZSB3YXMgcmVhZCBhcyBhbm90aGVyIG9wdGlvbjogJXMiLCAkdik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkYXJnLT5hc3NlcnRGaWxlIHx8ICRhcmctPmFzc2VydERpcikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZbMF0gIT09ICcvJyAmJiAkdlswXSAhPT0gJ34nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+dmFsdWVzWyIkbGV0dGVyLnJhdyJdID0gJHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdiA9IGdldGN3ZCgpIC4gIi8kdiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCRhcmctPmFzc2VydEZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhcmctPnVzZUFzSW5maWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X3N0ZGluID0gJHY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkYXJnLT51c2VBc091dGZpbGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fc3Rkb3V0ID0gJHY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRhcmctPmFzc2VydFJlYWRhYmxlICYmICEgaXNfcmVhZGFibGUoJHYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkRXJyb3IoJGxldHRlciwgIkZpbGUgbm90IHJlYWRhYmxlOiAlcyIsICR2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYXJnLT5hc3NlcnRXcml0YWJsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2ZpbGUoJHYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgaXNfd3JpdGFibGUoJHYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hZGRFcnJvcigkbGV0dGVyLCAiRmlsZSBub3Qgd3JpdGFibGU6ICVzIiwgJHYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEgaXNfd3JpdGFibGUoZGlybmFtZSgkdikpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5hZGRFcnJvcigkbGV0dGVyLCAiRGlyZWN0b3J5IG5vdCB3cml0YWJsZTogJXMiLCBkaXJuYW1lKCR2KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRhcmctPmFzc2VydERpciAmJiAkYXJnLT5hc3NlcnRXcml0YWJsZSAmJiAhIGlzX3dyaXRhYmxlKCR2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkRXJyb3IoJGxldHRlciwgIkRpcmVjdG9yeSBub3QgcmVhZGFibGU6ICVzIiwgJHYpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICgkYXJnLT5pc1JlcXVpcmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YWRkRXJyb3IoJGxldHRlciwgIk1pc3NpbmciKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdGhpcy0+bW9yZUFyZ3MgPSAkYXJndkNvcHk7CiAgICAgICAgcmVzZXQoJHRoaXMtPm1vcmVBcmdzKTsKICAgICAgICByZXR1cm4gZW1wdHkoJHRoaXMtPmVycm9ycyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGZ1bGwgcGF0aHMgb2YgZmlsZShzKSBwYXNzZWQgaW4gYXMgdW5zcGVjaWZpZWQgYXJndW1lbnRzCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aEFyZ3MoKQogICAgewogICAgICAgICRyID0gJHRoaXMtPm1vcmVBcmdzOwogICAgICAgIGZvcmVhY2ggKCRyIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgIGlmICgkdlswXSAhPT0gJy8nICYmICR2WzBdICE9PSAnficpIHsKICAgICAgICAgICAgICAgICR2ID0gZ2V0Y3dkKCkgLiAiLyR2IjsKICAgICAgICAgICAgICAgICR2ID0gc3RyX3JlcGxhY2UoJy8uLycsICcvJywgJHYpOwogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICR2ID0gcHJlZ19yZXBsYWNlKCdAL1teL10rL1xcLlxcLi9AJywgJy8nLCAkdiwgMSwgJGNoYW5nZWQpOwogICAgICAgICAgICAgICAgfSB3aGlsZSAoJGNoYW5nZWQpOwogICAgICAgICAgICAgICAgJHJbJGtdID0gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCBhIHNob3J0IGxpc3Qgb2YgZXJyb3JzIHdpdGggb3B0aW9ucwogICAgICogCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JSZXBvcnQoKQogICAgewogICAgICAgIGlmIChlbXB0eSgkdGhpcy0+ZXJyb3JzKSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgICAgICRyID0gIlNvbWUgYXJndW1lbnRzIGRpZCBub3QgcGFzcyB2YWxpZGF0aW9uOlxuIjsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZXJyb3JzIGFzICRsZXR0ZXIgPT4gJGFycikgewogICAgICAgICAgICAkciAuPSAiICAkbGV0dGVyIDogIiAuIGltcGxvZGUoJywgJywgJGFycikgLiAiXG4iOwogICAgICAgIH0KICAgICAgICAkciAuPSAiXG4iOwogICAgICAgIHJldHVybiAkcjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBcmd1bWVudHNMaXN0aW5nKCkKICAgIHsKICAgICAgICAkciA9ICJcbiI7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPl9hcmdzIGFzICRsZXR0ZXIgPT4gJGFyZykgewogICAgICAgICAgICAvKiBAdmFyIEFyZyAkYXJnICAqLwogICAgICAgICAgICAkZGVzYyA9ICRhcmctPmdldERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICRmbGFnID0gIiAtJGxldHRlciAiOwogICAgICAgICAgICBpZiAoJGFyZy0+bWF5SGF2ZVZhbHVlKSB7CiAgICAgICAgICAgICAgICAkZmxhZyAuPSAiW1ZBTF0iOwogICAgICAgICAgICB9IGVsc2VpZiAoJGFyZy0+bXVzdEhhdmVWYWx1ZSkgewogICAgICAgICAgICAgICAgJGZsYWcgLj0gIlZBTCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRhcmctPmFzc2VydEZpbGUpIHsKICAgICAgICAgICAgICAgICRmbGFnID0gc3RyX3JlcGxhY2UoJ1ZBTCcsICdGSUxFJywgJGZsYWcpOwogICAgICAgICAgICB9IGVsc2VpZiAoJGFyZy0+YXNzZXJ0RGlyKSB7CiAgICAgICAgICAgICAgICAkZmxhZyA9IHN0cl9yZXBsYWNlKCdWQUwnLCAnRElSJywgJGZsYWcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkYXJnLT5pc1JlcXVpcmVkKCkpIHsKICAgICAgICAgICAgICAgICRkZXNjID0gIihyZXF1aXJlZCkgJGRlc2MiOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRmbGFnID0gc3RyX3BhZCgkZmxhZywgMTIsICIgIiwgU1RSX1BBRF9SSUdIVCk7CiAgICAgICAgICAgICRkZXNjID0gd29yZHdyYXAoJGRlc2MsIDcwKTsKICAgICAgICAgICAgJHIgLj0gJGZsYWcgLiBzdHJfcmVwbGFjZSgiXG4iLCAiXG4gICAgICAgICAgICAiLCAkZGVzYykgLiAiXG5cbiI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcjsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBHZXQgcmVzb3VyY2Ugb2Ygb3BlbiBpbnB1dCBzdHJlYW0uIE1heSBiZSBTVERJTiBvciBhIGZpbGUgcG9pbnRlcgogICAgICogdG8gdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IGFuIG9wdGlvbiB3aXRoICdTVERJTicuCiAgICAgKgogICAgICogQHJldHVybiByZXNvdXJjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb3BlbklucHV0KCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPl9zdGRpbikgewogICAgICAgICAgICByZXR1cm4gU1RESU47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPl9zdGRpbiA9IGZvcGVuKCR0aGlzLT5fc3RkaW4sICdyYicpOwogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl9zdGRpbjsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZUlucHV0KCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPl9zdGRpbikgewogICAgICAgICAgICBmY2xvc2UoJHRoaXMtPl9zdGRpbik7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCByZXNvdXJjZSBvZiBvcGVuIG91dHB1dCBzdHJlYW0uIE1heSBiZSBTVERPVVQgb3IgYSBmaWxlIHBvaW50ZXIKICAgICAqIHRvIHRoZSBmaWxlIHNwZWNpZmllZCBieSBhbiBvcHRpb24gd2l0aCAnU1RET1VUJy4gVGhlIGZpbGUgd2lsbCBiZQogICAgICogdHJ1bmNhdGVkIHRvIDAgYnl0ZXMgb24gb3BlbmluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvcGVuT3V0cHV0KCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHRoaXMtPl9zdGRvdXQpIHsKICAgICAgICAgICAgcmV0dXJuIFNURE9VVDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+X3N0ZG91dCA9IGZvcGVuKCR0aGlzLT5fc3Rkb3V0LCAnd2InKTsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5fc3Rkb3V0OwogICAgICAgIH0KICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlT3V0cHV0KCkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPl9zdGRvdXQpIHsKICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5fc3Rkb3V0KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRsZXR0ZXIKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1zZwogICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZEVycm9yKCRsZXR0ZXIsICRtc2csICR2YWx1ZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdmFsdWUgPSB2YXJfZXhwb3J0KCR2YWx1ZSwgMSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5lcnJvcnNbJGxldHRlcl1bXSA9IHNwcmludGYoJG1zZywgJHZhbHVlKTsKICAgIH0KfQoK]]></data>
	</file>
	<file>
	  <filename>/min/lib/MrClay/Cli/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/min/lib/MrClay/Cli/Arg.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBNckNsYXlcQ2xpOwoKdXNlIEJhZE1ldGhvZENhbGxFeGNlcHRpb247CgovKioKICogQW4gYXJndW1lbnQgZm9yIGEgQ0xJIGFwcC4gVGhpcyBzcGVjaWZpZXMgdGhlIGFyZ3VtZW50LCB3aGF0IHZhbHVlcyBpdCBleHBlY3RzIGFuZAogKiBob3cgaXQncyB0cmVhdGVkIGR1cmluZyB2YWxpZGF0aW9uLgogKgogKiBCeSBkZWZhdWx0LCB0aGUgYXJndW1lbnQgd2lsbCBiZSBhc3N1bWVkIHRvIGJlIGFuIG9wdGlvbmFsIGxldHRlciBmbGFnIHdpdGggbm8gdmFsdWUgZm9sbG93aW5nLgogKgogKiBJZiB0aGUgYXJndW1lbnQgbWF5IHJlY2VpdmUgYSB2YWx1ZSwgY2FsbCBtYXlIYXZlVmFsdWUoKS4gSWYgdGhlcmUncyB3aGl0ZXNwYWNlIGFmdGVyIHRoZQogKiBmbGFnLCB0aGUgdmFsdWUgd2lsbCBiZSByZXR1cm5lZCBhcyB0cnVlIGluc3RlYWQgb2YgdGhlIHN0cmluZy4KICoKICogSWYgdGhlIGFyZ3VtZW50IE1VU1QgYmUgYWNjb21wYW5pZWQgYnkgYSB2YWx1ZSwgY2FsbCBtdXN0SGF2ZVZhbHVlKCkuIEluIHRoaXMgY2FzZSwgd2hpdGVzcGFjZQogKiBpcyBwZXJtaXR0ZWQgYmV0d2VlbiB0aGUgZmxhZyBhbmQgaXRzIHZhbHVlLgogKgogKiBVc2UgYXNzZXJ0RmlsZSgpIG9yIGFzc2VydERpcigpIHRvIGluZGljYXRlIHRoYXQgdGhlIGFyZ3VtZW50IG11c3QgcmV0dXJuIGEgc3RyaW5nIHZhbHVlCiAqIHNwZWNpZnlpbmcgYSBmaWxlIG9yIGRpcmVjdG9yeS4gRHVyaW5nIHZhbGlkYXRpb24sIHRoZSB2YWx1ZSB3aWxsIGJlIHJlc29sdmVkIHRvIGEKICogZnVsbCBmaWxlL2RpciBwYXRoIChub3QgbmVjZXNzYXJpbHkgZXhpc3RpbmchKSBhbmQgdGhlIG9yaWdpbmFsIHZhbHVlIHdpbGwgYmUgYWNjZXNzaWJsZQogKiB2aWEgYSAiKi5yYXciIGtleS4gRS5nLiAkY2xpLT52YWx1ZXNbJ2YucmF3J10KICoKICogVXNlIGFzc2VydFJlYWRhYmxlKCkvYXNzZXJ0V3JpdGFibGUoKSB0byBjYXVzZSB0aGUgdmFsaWRhdG9yIHRvIHRlc3QgdGhlIGZpbGUvZGlyIGZvcgogKiByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHJlc3BlY3RpdmVseS4KICoKICogQG1ldGhvZCBcTXJDbGF5XENsaVxBcmcgbWF5SGF2ZVZhbHVlKCkgQXNzZXJ0IHRoYXQgdGhlIGFyZ3VtZW50LCBpZiBwcmVzZW50LCBtYXkgcmVjZWl2ZSBhIHN0cmluZyB2YWx1ZQogKiBAbWV0aG9kIFxNckNsYXlcQ2xpXEFyZyBtdXN0SGF2ZVZhbHVlKCkgQXNzZXJ0IHRoYXQgdGhlIGFyZ3VtZW50LCBpZiBwcmVzZW50LCBtdXN0IHJlY2VpdmUgYSBzdHJpbmcgdmFsdWUKICogQG1ldGhvZCBcTXJDbGF5XENsaVxBcmcgYXNzZXJ0RmlsZSgpIEFzc2VydCB0aGF0IHRoZSBhcmd1bWVudCdzIHZhbHVlIG11c3Qgc3BlY2lmeSBhIGZpbGUKICogQG1ldGhvZCBcTXJDbGF5XENsaVxBcmcgYXNzZXJ0RGlyKCkgQXNzZXJ0IHRoYXQgdGhlIGFyZ3VtZW50J3MgdmFsdWUgbXVzdCBzcGVjaWZ5IGEgZGlyZWN0b3J5CiAqIEBtZXRob2QgXE1yQ2xheVxDbGlcQXJnIGFzc2VydFJlYWRhYmxlKCkgQXNzZXJ0IHRoYXQgdGhlIHNwZWNpZmllZCBmaWxlL2RpciBtdXN0IGJlIHJlYWRhYmxlCiAqIEBtZXRob2QgXE1yQ2xheVxDbGlcQXJnIGFzc2VydFdyaXRhYmxlKCkgQXNzZXJ0IHRoYXQgdGhlIHNwZWNpZmllZCBmaWxlL2RpciBtdXN0IGJlIHdyaXRhYmxlCiAqCiAqIEBwcm9wZXJ0eS1yZWFkIGJvb2wgbWF5SGF2ZVZhbHVlCiAqIEBwcm9wZXJ0eS1yZWFkIGJvb2wgbXVzdEhhdmVWYWx1ZQogKiBAcHJvcGVydHktcmVhZCBib29sIGFzc2VydEZpbGUKICogQHByb3BlcnR5LXJlYWQgYm9vbCBhc3NlcnREaXIKICogQHByb3BlcnR5LXJlYWQgYm9vbCBhc3NlcnRSZWFkYWJsZQogKiBAcHJvcGVydHktcmVhZCBib29sIGFzc2VydFdyaXRhYmxlCiAqIEBwcm9wZXJ0eS1yZWFkIGJvb2wgdXNlQXNJbmZpbGUKICogQHByb3BlcnR5LXJlYWQgYm9vbCB1c2VBc091dGZpbGUKICoKICogQGF1dGhvciBTdGV2ZSBDbGF5IDxzdGV2ZUBtcmNsYXkub3JnPgogKiBAbGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocCAgTUlUIExpY2Vuc2UKICovCmNsYXNzIEFyZyB7CiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERlZmF1bHRTcGVjKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICdtYXlIYXZlVmFsdWUnID0+IGZhbHNlLAogICAgICAgICAgICAnbXVzdEhhdmVWYWx1ZScgPT4gZmFsc2UsCiAgICAgICAgICAgICdhc3NlcnRGaWxlJyA9PiBmYWxzZSwKICAgICAgICAgICAgJ2Fzc2VydERpcicgPT4gZmFsc2UsCiAgICAgICAgICAgICdhc3NlcnRSZWFkYWJsZScgPT4gZmFsc2UsCiAgICAgICAgICAgICdhc3NlcnRXcml0YWJsZScgPT4gZmFsc2UsCiAgICAgICAgICAgICd1c2VBc0luZmlsZScgPT4gZmFsc2UsCiAgICAgICAgICAgICd1c2VBc091dGZpbGUnID0+IGZhbHNlLAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkc3BlYyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJvdGVjdGVkICRyZXF1aXJlZCA9IGZhbHNlOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRkZXNjcmlwdGlvbiA9ICcnOwoKICAgIC8qKgogICAgICogQHBhcmFtIGJvb2wgJGlzUmVxdWlyZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpc1JlcXVpcmVkID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHRoaXMtPnNwZWMgPSAkdGhpcy0+Z2V0RGVmYXVsdFNwZWMoKTsKICAgICAgICAkdGhpcy0+cmVxdWlyZWQgPSAoYm9vbCkgJGlzUmVxdWlyZWQ7CiAgICAgICAgaWYgKCRpc1JlcXVpcmVkKSB7CiAgICAgICAgICAgICR0aGlzLT5zcGVjWydtdXN0SGF2ZVZhbHVlJ10gPSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEFzc2VydCB0aGF0IHRoZSBhcmd1bWVudCdzIHZhbHVlIHBvaW50cyB0byBhIHdyaXRhYmxlIGZpbGUuIFdoZW4KICAgICAqIENsaTo6b3Blbk91dHB1dCgpIGlzIGNhbGxlZCwgYSB3cml0ZSBwb2ludGVyIHRvIHRoaXMgZmlsZSB3aWxsCiAgICAgKiBiZSBwcm92aWRlZC4KICAgICAqIEByZXR1cm4gQXJnCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1c2VBc091dGZpbGUoKQogICAgewogICAgICAgICR0aGlzLT5zcGVjWyd1c2VBc091dGZpbGUnXSA9IHRydWU7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hc3NlcnRGaWxlKCktPmFzc2VydFdyaXRhYmxlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBc3NlcnQgdGhhdCB0aGUgYXJndW1lbnQncyB2YWx1ZSBwb2ludHMgdG8gYSByZWFkYWJsZSBmaWxlLiBXaGVuCiAgICAgKiBDbGk6Om9wZW5JbnB1dCgpIGlzIGNhbGxlZCwgYSByZWFkIHBvaW50ZXIgdG8gdGhpcyBmaWxlIHdpbGwKICAgICAqIGJlIHByb3ZpZGVkLgogICAgICogQHJldHVybiBBcmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVzZUFzSW5maWxlKCkKICAgIHsKICAgICAgICAkdGhpcy0+c3BlY1sndXNlQXNJbmZpbGUnXSA9IHRydWU7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hc3NlcnRGaWxlKCktPmFzc2VydFJlYWRhYmxlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTcGVjKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNwZWM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNjCiAgICAgKiBAcmV0dXJuIEFyZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGVzY3JpcHRpb24oJGRlc2MpCiAgICB7CiAgICAgICAgJHRoaXMtPmRlc2NyaXB0aW9uID0gJGRlc2M7CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERlc2NyaXB0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRlc2NyaXB0aW9uOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlcXVpcmVkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVpcmVkOwogICAgfQoKICAgIC8qKgogICAgICogTm90ZTogbWFnaWMgbWV0aG9kcyBkZWNsYXJlZCBpbiBjbGFzcyBQSFBET0MKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcGFyYW0gYXJyYXkgJGFyZ3MKICAgICAqIEByZXR1cm4gQXJnCiAgICAgKiBAdGhyb3dzIEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbmFtZSwgYXJyYXkgJGFyZ3MgPSBhcnJheSgpKQogICAgewogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkdGhpcy0+c3BlYykpIHsKICAgICAgICAgICAgJHRoaXMtPnNwZWNbJG5hbWVdID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKCRuYW1lID09PSAnYXNzZXJ0RmlsZScgfHwgJG5hbWUgPT09ICdhc3NlcnREaXInKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c3BlY1snbXVzdEhhdmVWYWx1ZSddID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCdNZXRob2QgZG9lcyBub3QgZXhpc3QnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogTm90ZTogbWFnaWMgcHJvcGVydGllcyBkZWNsYXJlZCBpbiBjbGFzcyBQSFBET0MKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKiBAcmV0dXJuIGJvb2x8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCiAgICB7CiAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJG5hbWUsICR0aGlzLT5zcGVjKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNwZWNbJG5hbWVdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/min/quick-test.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFRoaXMgZmlsZSBleGlzdHMgb25seSBmb3IgdGVzdGluZyBhIE1pbmlmeSBpbnN0YWxsYXRpb24uIEl0J3MgY29udGVudCBpcyBub3QgdXNlZC4KICoKICogaHR0cDovL2V4YW1wbGUub3JnL21pbi9mPW1pbi9xdWljay10ZXN0LmNzcwogKi8KCkBpbXBvcnQgICAgIHVybCggL21vcmUuY3NzICk7CgogICAgYm9keSwgdGQsIHRoIHsKICAgICAgICBmb250LWZhbWlseTogVmVyZGFuYSAsICJCaXRzdHJlYW0gVmVyYSBTYW5zIiAsIEFyaWFsIE5hcnJvdywgc2Fucy1zZXJpZiA7CgoJZm9udC1zaXplICA6IDEycHg7Cn0KCi5uYXYgewogICAgbWFyZ2luLWxlZnQ6IDIwJTsKfQojbWFpbi1uYXYgewogICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOwogICAgYm9yZGVyOiAxcHggc29saWQgIzAwZmY3NzsKfQoKZGl2I2NvbnRlbnQKaDEgKyBwIHsKICAgIHBhZGRpbmctdG9wOiAwOwogICAgbWFyZ2luLXRvcDogMDsKfQoKQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHsKCSNtZWRpYS1xdWVyaWVzLTEgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjMGYwOyB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/min/quick-test.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIFRoaXMgZmlsZSBleGlzdHMgb25seSBmb3IgdGVzdGluZyBhIE1pbmlmeSBpbnN0YWxsYXRpb24uIEl0J3MgY29udGVudCBpcyBub3QgdXNlZC4KICoKICogaHR0cDovL2V4YW1wbGUub3JnL21pbi9mPW1pbi9xdWljay10ZXN0LmpzCiAqLwoKLyogRmluZHMgdGhlIGxvd2VzdCBjb21tb24gbXVsdGlwbGUgb2YgdHdvIG51bWJlcnMgKi8KZnVuY3Rpb24gTENNQ2FsY3VsYXRvcih4LCB5KSB7IC8vIGNvbnN0cnVjdG9yIGZ1bmN0aW9uCiAgICB2YXIgY2hlY2tJbnQgPSBmdW5jdGlvbiAoeCkgeyAvLyBpbm5lciBmdW5jdGlvbgogICAgICAgIGlmICh4ICUgMSAhPT0gMCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHggKyAiIGlzIG5vdCBhbiBpbnRlZ2VyIik7IC8vIHRocm93IGFuIGV4Y2VwdGlvbgogICAgICAgIH0KICAgICAgICByZXR1cm4geDsKICAgIH07CiAgICB0aGlzLmEgPSBjaGVja0ludCh4KTsKICAgIC8vIF4gc2VtaWNvbG9ucyBhcmUgb3B0aW9uYWwKICAgIHRoaXMuYiA9IGNoZWNrSW50KHkpOwp9Ci8vIFRoZSBwcm90b3R5cGUgb2Ygb2JqZWN0IGluc3RhbmNlcyBjcmVhdGVkIGJ5IGEgY29uc3RydWN0b3IgaXMKLy8gdGhhdCBjb25zdHJ1Y3RvcidzICJwcm90b3R5cGUiIHByb3BlcnR5LgpMQ01DYWxjdWxhdG9yLnByb3RvdHlwZSA9IHsgLy8gb2JqZWN0IGxpdGVyYWwKICAgIGNvbnN0cnVjdG9yOiBMQ01DYWxjdWxhdG9yLCAvLyB3aGVuIHJlYXNzaWduaW5nIGEgcHJvdG90eXBlLCBzZXQgdGhlIGNvbnN0cnVjdG9yIHByb3BlcnR5IGFwcHJvcHJpYXRlbHkKICAgIGdjZDogZnVuY3Rpb24gKCkgeyAvLyBtZXRob2QgdGhhdCBjYWxjdWxhdGVzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvcgogICAgICAgIC8vIEV1Y2xpZGVhbiBhbGdvcml0aG06CiAgICAgICAgdmFyIGEgPSBNYXRoLmFicyh0aGlzLmEpLCBiID0gTWF0aC5hYnModGhpcy5iKSwgdDsKICAgICAgICBpZiAoYSA8IGIpIHsKICAgICAgICAgICAgLy8gc3dhcCB2YXJpYWJsZXMKICAgICAgICAgICAgdCA9IGI7CiAgICAgICAgICAgIGIgPSBhOwogICAgICAgICAgICBhID0gdDsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKGIgIT09IDApIHsKICAgICAgICAgICAgdCA9IGI7CiAgICAgICAgICAgIGIgPSBhICUgYjsKICAgICAgICAgICAgYSA9IHQ7CiAgICAgICAgfQogICAgICAgIC8vIE9ubHkgbmVlZCB0byBjYWxjdWxhdGUgR0NEIG9uY2UsIHNvICJyZWRlZmluZSIgdGhpcyBtZXRob2QuCiAgICAgICAgLy8gKEFjdHVhbGx5IG5vdCByZWRlZmluaXRpb24gLSBpdCdzIGRlZmluZWQgb24gdGhlIGluc3RhbmNlIGl0c2VsZiwKICAgICAgICAvLyBzbyB0aGF0IHRoaXMuZ2NkIHJlZmVycyB0byB0aGlzICJyZWRlZmluaXRpb24iIGluc3RlYWQgb2YgTENNQ2FsY3VsYXRvci5wcm90b3R5cGUuZ2NkLikKICAgICAgICAvLyBBbHNvLCAnZ2NkJyA9PT0gImdjZCIsIHRoaXNbJ2djZCddID09PSB0aGlzLmdjZAogICAgICAgIHRoaXNbJ2djZCddID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9OwogICAgICAgIHJldHVybiBhOwogICAgfSwKICAgIC8vIE9iamVjdCBwcm9wZXJ0eSBuYW1lcyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHN0cmluZ3MgZGVsaW1pdGVkIGJ5IGRvdWJsZSAoIikgb3Igc2luZ2xlICgnKSBxdW90ZXMuCiAgICAibGNtIiA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAvLyBWYXJpYWJsZSBuYW1lcyBkb24ndCBjb2xsaWRlIHdpdGggb2JqZWN0IHByb3BlcnRpZXMsIGUuZy4gfGxjbXwgaXMgbm90IHx0aGlzLmxjbXwuCiAgICAgICAgLy8gbm90IHVzaW5nIHx0aGlzLmEgKiB0aGlzLmJ8IHRvIGF2b2lkIEZQIHByZWNpc2lvbiBpc3N1ZXMKICAgICAgICB2YXIgbGNtID0gdGhpcy5hIC8gdGhpcy5nY2QoKSAqIHRoaXMuYjsKICAgICAgICAvLyBPbmx5IG5lZWQgdG8gY2FsY3VsYXRlIGxjbSBvbmNlLCBzbyAicmVkZWZpbmUiIHRoaXMgbWV0aG9kLgogICAgICAgIHRoaXMubGNtID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gbGNtOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIGxjbTsKICAgIH0sCiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiAiTENNQ2FsY3VsYXRvcjogYSA9ICIgKyB0aGlzLmEgKyAiLCBiID0gIiArIHRoaXMuYjsKICAgIH0KfTsKCi8vZGVmaW5lIGdlbmVyaWMgb3V0cHV0IGZ1bmN0aW9uOyB0aGlzIGltcGxlbWVudGF0aW9uIG9ubHkgd29ya3MgZm9yIHdlYiBicm93c2VycwpmdW5jdGlvbiBvdXRwdXQoeCkgewogICAgZG9jdW1lbnQud3JpdGUoeCArICI8YnI+Iik7Cn0KCi8vIE5vdGU6IEFycmF5J3MgbWFwKCkgYW5kIGZvckVhY2goKSBhcmUgZGVmaW5lZCBpbiBKYXZhU2NyaXB0IDEuNi4KLy8gVGhleSBhcmUgdXNlZCBoZXJlIHRvIGRlbW9uc3RyYXRlIEphdmFTY3JpcHQncyBpbmhlcmVudCBmdW5jdGlvbmFsIG5hdHVyZS4KW1syNSwgNTVdLCBbMjEsIDU2XSwgWzIyLCA1OF0sIFsyOCwgNTZdXS5tYXAoZnVuY3Rpb24gKHBhaXIpIHsgLy8gYXJyYXkgbGl0ZXJhbCArIG1hcHBpbmcgZnVuY3Rpb24KICAgIHJldHVybiBuZXcgTENNQ2FsY3VsYXRvcihwYWlyWzBdLCBwYWlyWzFdKTsKfSkuc29ydChmdW5jdGlvbiAoYSwgYikgeyAvLyBzb3J0IHdpdGggdGhpcyBjb21wYXJhdGl2ZSBmdW5jdGlvbgogICAgcmV0dXJuIGEubGNtKCkgLSBiLmxjbSgpOwp9KS5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHsKICAgIG91dHB1dChvYmogKyAiLCBnY2QgPSAiICsgb2JqLmdjZCgpICsgIiwgbGNtID0gIiArIG9iai5sY20oKSk7Cn0pOw==]]></data>
	</file>
	<file>
	  <filename>/min/utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoqCiAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBnZW5lcmF0aW5nIFVSSXMgaW4gSFRNTCBmaWxlcwogKgogKiBAd2FybmluZyBUaGVzZSBmdW5jdGlvbnMgZXhlY3V0ZSBtaW4vZ3JvdXBzQ29uZmlnLnBocCwgc29tZXRpbWVzIG11bHRpcGxlIHRpbWVzLgogKiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCBmdW5jdGlvbnMgYXJlIG5vdCByZWRlZmluZWQsIGFuZCBpZiB5b3VyIHVzZSBjdXN0b20gc291cmNlcywKICogeW91IG11c3QgcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9saWIvTWluaWZ5L1NvdXJjZS5waHAnIHNvIHRoYXQKICogY2xhc3MgaXMgYXZhaWxhYmxlLgogKgogKiBAcGFja2FnZSBNaW5pZnkKICovCgppZiAoISBjbGFzc19leGlzdHMoJ01pbmlmeV9Mb2FkZXInLCBmYWxzZSkpIHsKICAgIHJlcXVpcmUgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xpYi9NaW5pZnkvTG9hZGVyLnBocCc7CiAgICBNaW5pZnlfTG9hZGVyOjpyZWdpc3RlcigpOwp9CgovKgogKiBHZXQgYW4gSFRNTC1lc2NhcGVkIE1pbmlmeSBVUkkgZm9yIGEgZ3JvdXAgb3Igc2V0IG9mIGZpbGVzLiBCeSBkZWZhdWx0LCBVUklzCiAqIHdpbGwgY29udGFpbiB0aW1lc3RhbXBzIHRvIGFsbG93IGZhci1mdXR1cmUgRXhwaXJlcyBoZWFkZXJzLgogKgogKiA8Y29kZT4KICogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iPD89IE1pbmlmeV9nZXRVcmkoJ2NzcycpOyA/PiIgLz4KICogPHNjcmlwdCBzcmM9Ijw/PSBNaW5pZnlfZ2V0VXJpKCdqcycpOyA/PiI+PC9zY3JpcHQ+CiAqIDxzY3JpcHQgc3JjPSI8Pz0gTWluaWZ5X2dldFVyaShhcnJheSgKICogICAgICAnLy9zY3JpcHRzL2ZpbGUxLmpzJwogKiAgICAgICwnLy9zY3JpcHRzL2ZpbGUyLmpzJwogKiApKTsgPz4iPjwvc2NyaXB0PgogKiA8L2NvZGU+CiAqCiAqIEBwYXJhbSBtaXhlZCAka2V5T3JGaWxlcyBhIGdyb3VwIGtleSBvciBhcnJheSBvZiBmaWxlIHBhdGhzL1VSSXMKICogQHBhcmFtIGFycmF5ICRvcHRzIG9wdGlvbnM6CiAqICAgJ2ZhckV4cGlyZXMnIDogKGRlZmF1bHQgdHJ1ZSkgYXBwZW5kIGEgbW9kaWZpZWQgdGltZXN0YW1wIGZvciBjYWNoZSByZXZ2aW5nCiAqICAgJ2RlYnVnJyA6IChkZWZhdWx0IGZhbHNlKSBhcHBlbmQgZGVidWcgZmxhZwogKiAgICdjaGFyc2V0JyA6IChkZWZhdWx0ICdVVEYtOCcpIGZvciBodG1sc3BlY2lhbGNoYXJzCiAqICAgJ21pbkFwcFVyaScgOiAoZGVmYXVsdCAnL21pbicpIFVSSSBvZiBtaW4gZGlyZWN0b3J5CiAqICAgJ3Jld3JpdGVXb3JrcycgOiAoZGVmYXVsdCB0cnVlKSBkb2VzIG1vZF9yZXdyaXRlIHdvcmsgaW4gbWluIGFwcD8KICogICAnZ3JvdXBzQ29uZmlnRmlsZScgOiBzcGVjaWZ5IGlmIGRpZmZlcmVudAogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gTWluaWZ5X2dldFVyaSgka2V5T3JGaWxlcywgJG9wdHMgPSBhcnJheSgpKQp7CiAgICByZXR1cm4gTWluaWZ5X0hUTUxfSGVscGVyOjpnZXRVcmkoJGtleU9yRmlsZXMsICRvcHRzKTsKfQoKCi8qKgogKiBHZXQgdGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2Ygc2V2ZXJhbCBzb3VyY2UganMvY3NzIGZpbGVzLiBJZiB5b3UncmUKICogY2FjaGluZyB0aGUgb3V0cHV0IG9mIE1pbmlmeV9nZXRVcmkoKSwgeW91IG1pZ2h0IHdhbnQgdG8ga25vdyBpZiBvbmUgb2YgdGhlCiAqIGRlcGVuZGVudCBzb3VyY2UgZmlsZXMgaGFzIGNoYW5nZWQgc28geW91IGNhbiB1cGRhdGUgdGhlIEhUTUwuCiAqCiAqIFNpbmNlIHRoaXMgbWFrZXMgYSBidW5jaCBvZiBzdGF0KCkgY2FsbHMsIHlvdSBtaWdodCBub3Qgd2FudCB0byBjaGVjayB0aGlzCiAqIG9uIGV2ZXJ5IHJlcXVlc3QuCiAqIAogKiBAcGFyYW0gYXJyYXkgJGtleXNBbmRGaWxlcyBncm91cCBrZXlzIGFuZC9vciBmaWxlIHBhdGhzL1VSSXMuCiAqIEByZXR1cm4gaW50IGxhdGVzdCBtb2RpZmljYXRpb24gdGltZSBvZiBhbGwgZ2l2ZW4ga2V5cy9maWxlcwogKi8KZnVuY3Rpb24gTWluaWZ5X210aW1lKCRrZXlzQW5kRmlsZXMsICRncm91cHNDb25maWdGaWxlID0gbnVsbCkKewogICAgJGdjID0gbnVsbDsKICAgIGlmICghICRncm91cHNDb25maWdGaWxlKSB7CiAgICAgICAgJGdyb3Vwc0NvbmZpZ0ZpbGUgPSBkaXJuYW1lKF9fRklMRV9fKSAuICcvZ3JvdXBzQ29uZmlnLnBocCc7CiAgICB9CiAgICAkc291cmNlcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoICgka2V5c0FuZEZpbGVzIGFzICRrZXlPckZpbGUpIHsKICAgICAgICBpZiAoaXNfb2JqZWN0KCRrZXlPckZpbGUpCiAgICAgICAgICAgIHx8IDAgPT09IHN0cnBvcygka2V5T3JGaWxlLCAnLycpCiAgICAgICAgICAgIHx8IDEgPT09IHN0cnBvcygka2V5T3JGaWxlLCAnOlxcJykpIHsKICAgICAgICAgICAgLy8gYSBmaWxlL3NvdXJjZSBvYmoKICAgICAgICAgICAgJHNvdXJjZXNbXSA9ICRrZXlPckZpbGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCEgJGdjKSB7CiAgICAgICAgICAgICAgICAkZ2MgPSAocmVxdWlyZSAkZ3JvdXBzQ29uZmlnRmlsZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yZWFjaCAoJGdjWyRrZXlPckZpbGVdIGFzICRzb3VyY2UpIHsKICAgICAgICAgICAgICAgICRzb3VyY2VzW10gPSAkc291cmNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIE1pbmlmeV9IVE1MX0hlbHBlcjo6Z2V0TGFzdE1vZGlmaWVkKCRzb3VyY2VzKTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/Minify.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTW9kdWxlOiBNaW5pZnkgLSBKYXZhc2NyaXB0IGFuZCBDU1MgbWluaWZpZXIgdXNpbmcgaHR0cHM6Ly9naXRodWIuY29tL21yY2xheS9taW5pZnkKIyBWZXJzaW9uOiAwLjksIE1pa2UgQ3Jvd2UKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMyBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojIFRoaXMgZmlsZSBvcmlnaW5hbGx5IGNyZWF0ZWQgYnkgTW9kdWxlTWFrZXIgbW9kdWxlLCB2ZXJzaW9uIDAuMy4yCiMgQ29weXJpZ2h0IChjKSAyMDEzIGJ5IFNhbXVlbCBHb2xkc3RlaW4gKHNqZ0BjbXNtYWRlc2ltcGxlLm9yZykgCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNaW5pZnkgTW9kdWxlOgojIENvcHlyaWdodCAoYykgMjAxMyBNaWtlIENyb3dlIDxkcm1pa2Vjcm93ZUBnbWFpbC5jb20+CiMgCiMgTWluaWZ5OgojIENvcHlyaWdodCAoYykgMjAwOCBSeWFuIEdyb3ZlIDxyeWFuQHdvbmtvLmNvbT4KIyBDb3B5cmlnaHQgKGMpIDIwMDggU3RldmUgQ2xheSA8c3RldmVAbXJjbGF5Lm9yZz4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojIAojIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAojIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgojIAojICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCiMgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiMgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKIyAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgojICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIyAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGlzIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQojICAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CiMgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIyAKIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECiMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCiMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgojIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwojIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAojIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBNaW5pZnkgZXh0ZW5kcyBDTVNNb2R1bGUgewoKCWZ1bmN0aW9uIEdldE5hbWUoKSAJCQkJCXsgcmV0dXJuICdNaW5pZnknOyB9IAoJZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgCQkJeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOyB9IAoJZnVuY3Rpb24gR2V0VmVyc2lvbigpIAkJCQl7IHJldHVybiAnMC45LjEnOyB9IAoJZnVuY3Rpb24gR2V0SGVscCgpIAkJCQkJeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsgfSAKCWZ1bmN0aW9uIEdldEF1dGhvcigpIAkJCQl7IHJldHVybiAnTWlrZSBDcm93ZSc7IH0gCglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIAkJCXsgcmV0dXJuICdkcm1pa2Vjcm93ZUBnbWFpbC5jb20nOyB9IAoJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgCQkJeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOyB9IAoJZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSAJCQl7IHJldHVybiBmYWxzZTsgfSAKCWZ1bmN0aW9uIEhhc0FkbWluKCkgCQkJCXsgcmV0dXJuIHRydWU7IH0gCglmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKSAJCQl7IHJldHVybiAnbGF5b3V0JzsgfSAKCWZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSAJCXsgcmV0dXJuICR0aGlzLT5MYW5nKCdhZG1pbmRlc2NyaXB0aW9uJyk7IH0gCglmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKSAJCXsgcmV0dXJuIHRydWU7IH0gCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgIENoZWNrQWNjZXNzKCkKCSAgVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIHdpbGwgY2hlY2sgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIHBlcm1pc3Npb24sCgkgIGFuZCBkaXNwbGF5IGFuIGVycm9yIHBhZ2UgaWYgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGFkZXF1YXRlIHBlcm1pc3Npb25zLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCglmdW5jdGlvbiBDaGVja0FjY2VzcygkcGVybSA9ICdNb2RpZnkgU3R5bGVzaGVldHMnKSB7CgkJcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHBlcm0pOwoJfQoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICBEaXNwbGF5RXJyb3JQYWdlKCkKCSAgVGhpcyBpcyBhIHNpbXBsZSBmdW5jdGlvbiBmb3IgZ2VuZXJhdGluZyBlcnJvciBwYWdlcy4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJZnVuY3Rpb24gRGlzcGxheUVycm9yUGFnZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuX2lkLCAkbWVzc2FnZSA9ICcnKSB7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdtZXNzYWdlJywgJG1lc3NhZ2UpOwoKCQkvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwoJfQoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICBHZXREZXBlbmRlbmNpZXMoKQoJICBZb3VyIG1vZHVsZSBtYXkgbmVlZCBhbm90aGVyIG1vZHVsZSB0byBhbHJlYWR5IGJlIGluc3RhbGxlZAoJICBiZWZvcmUgeW91IGNhbiBpbnN0YWxsIGl0LgoJICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kCgkgIG1pbmltdW0gdmVyc2lvbiBudW1iZXJzIHRoYXQgdGhpcyBtb2R1bGUgcmVxdWlyZXMuCgoJICBJdCBzaG91bGQgcmV0dXJuIGFuIGhhc2gsIGVnLgoJICByZXR1cm4gYXJyYXkoJ3NvbWVtb2R1bGUnPT4nMS4wJywgJ290aGVybW9kdWxlJz0+JzEuMScpOwoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCglmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKSB7CgkJcmV0dXJuIGFycmF5KCk7Cgl9CgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgIE1pbmltdW1DTVNWZXJzaW9uKCkKCSAgWW91ciBtb2R1bGUgbWF5IHJlcXVpcmUgZnVuY3Rpb25zIG9yIG9iamVjdHMgZnJvbQoJICBhIHNwZWNpZmljIHZlcnNpb24gb2YgQ01TIE1hZGUgU2ltcGxlLgoJICBFdmVyIHNpbmNlIHZlcnNpb24gMC4xMSwgeW91IGNhbiBzcGVjaWZ5IHdoaWNoIG1pbmltdW0KCSAgQ01TIE1TIHZlcnNpb24gaXMgcmVxdWlyZWQgZm9yIHlvdXIgbW9kdWxlLCB3aGljaCB3aWxsCgkgIHByZXZlbnQgaXQgZnJvbSBiZWluZyBpbnN0YWxsZWQgYnkgYSB2ZXJzaW9uIG9mIENNUyB0aGF0CgkgIGNhbid0IHJ1biBpdC4KCgkgIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZQoJICBtaW5pbXVtIHZlcnNpb24gdGhhdCB0aGlzIG1vZHVsZSByZXF1aXJlcy4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7CgkJcmV0dXJuICIxLjExLjUiOwoJfQoKCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICBNYXhpbXVtQ01TVmVyc2lvbigpCgkgIFlvdSBtYXkgd2FudCB0byBwcmV2ZW50IHBlb3BsZSBmcm9tIHVzaW5nIHlvdXIgbW9kdWxlIGluCgkgIGZ1dHVyZSB2ZXJzaW9ucyBvZiBDTVMgTWFkZSBTaW1wbGUsIGVzcGVjaWFsbHkgaWYgeW91CgkgIHRoaW5rIEFQSSBmZWF0dXJlcyB5b3UgdXNlIG1heSBjaGFuZ2UgLS0gYWZ0ZXIgYWxsLCB5b3UKCSAgbmV2ZXIgcmVhbGx5IGtub3cgaG93IHRoZSBDTVMgTVMgQVBJIGNvdWxkIGV2b2x2ZS4KCgkgIFNvLCB0byBwcmV2ZW50IHBlb3BsZSBmcm9tIGZsb29kaW5nIHlvdSB3aXRoIGJ1ZyByZXBvcnRzCgkgIHdoZW4gYSBuZXcgdmVyc2lvbiBvZiBDTVMgTVMgaXMgcmVsZWFzZWQsIHlvdSBjYW4gc2ltcGx5CgkgIHJlc3RyaWN0IHRoZSB2ZXJzaW9uLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZSBvbnVzIGlzIG9uIHlvdQoJICB0byByZWxlYXNlIGEgbmV3IHZlcnNpb24gb2YgeW91ciBtb2R1bGUgd2hlbiBhIG5ldyB2ZXJzaW9uCgkgIG9mIHRoZSBDTVMgaXMgcmVsZWFzZWQuLi4KCgkgIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZQoJICBtYXhpbXVtIHZlcnNpb24gdGhhdCB0aGlzIG1vZHVsZSBzdXBwb3J0cy4KCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJZnVuY3Rpb24gTWF4aW11bUNNU1ZlcnNpb24oKSB7CgkJcmV0dXJuICIyLjAuMCI7Cgl9CgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgIEluc3RhbGxQb3N0TWVzc2FnZSgpCgkgIEFmdGVyIGluc3RhbGxhdGlvbiwgdGhlcmUgbWF5IGJlIHRoaW5ncyB5b3Ugd2FudCB0bwoJICBjb21tdW5pY2F0ZSB0byB5b3VyIGFkbWluLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYQoJICBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCWZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7Cgl9CgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKCSAgQWZ0ZXIgcmVtb3ZpbmcgYSBtb2R1bGUsIHRoZXJlIG1heSBiZSB0aGluZ3MgeW91IHdhbnQgdG8KCSAgY29tbXVuaWNhdGUgdG8geW91ciBhZG1pbi4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKCSAgc3RyaW5nIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCglmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpIHsKCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsKCX0KCgkvKioKCSAqIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQoJICogVGhpcyBhbGxvd3MgeW91IHRvIGRpc3BsYXkgYSBtZXNzYWdlIGFsb25nIHdpdGggYSBZZXMvTm8gZGlhbG9nIGJveC4gSWYgdGhlIHVzZXIgcmVzcG9uZHMKCSAqIGluIHRoZSBhZmZpcm1hdGl2ZSB0byB5b3VyIG1lc3NhZ2UsIHRoZSB1bmluc3RhbGwgd2lsbCBwcm9jZWVkLiBJZiB0aGV5IHJlc3BvbmQgaW4gdGhlCgkgKiBuZWdhdGl2ZSwgdGhlIHVuaW5zdGFsbCB3aWxsIGJlIGNhbmNlbGVkLiBUaHVzLCB5b3VyIG1lc3NhZ2Ugc2hvdWxkIGJlIG9mIHRoZSBmb3JtCgkgKiAiQWxsIG1vZHVsZSBkYXRhIHdpbGwgYmUgZGVsZXRlZC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGlzIG1vZHVsZT8iCgkgKgoJICogSWYgeW91IGRvbid0IHdhbnQgdGhlIGRpYWxvZywgaGF2ZSB0aGlzIG1ldGhvZCByZXR1cm4gYSBGQUxTRSwgd2hpY2ggd2lsbCBjYXVzZSB0aGUKCSAqIG1vZHVsZSB0byB1bmluc3RhbGwgaW1tZWRpYXRlbHkgaWYgdGhlIHVzZXIgY2xpY2tzIHRoZSAidW5pbnN0YWxsIiBsaW5rLgoJICovCglmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgewoJCXJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOwoJfQoKCS8vIEZvciBmdXR1cmUgLS0gaW50ZWdyYWRlIG91ciBsb2dnZ2luZyB3aXRoIE1pbmlmeQoJZnVuY3Rpb24gbG9nKCRtc2csICRsYWJlbCkgewoJCSR0aGlzLT5BdWRpdCgwLCAiTWluaWZ5IiwgIiRsYWJlbDogJG1zZyIpOwoJfQoKfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/ocCheck.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCi8qKgogKiBBSkFYIGNoZWNrcyBmb3IgemxpYi5vdXRwdXRfY29tcHJlc3Npb24KICogCiAqIEBwYWNrYWdlIE1pbmlmeQogKi8KCiRfb2MgPSBpbmlfZ2V0KCd6bGliLm91dHB1dF9jb21wcmVzc2lvbicpOwogCi8vIGFsbG93IGFjY2VzcyBvbmx5IGlmIGJ1aWxkZXIgaXMgZW5hYmxlZApyZXF1aXJlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9taW4vY29uZmlnLnBocCc7CmlmICghICRtaW5fZW5hYmxlQnVpbGRlcikgewogICAgaGVhZGVyKCdMb2NhdGlvbjogLycpOwogICAgZXhpdCgpOwp9CgppZiAoaXNzZXQoJF9HRVRbJ2hlbGxvJ10pKSB7CiAgICAvLyBlY2hvICdXb3JsZCEnCiAgICAKICAgIC8vIHRyeSB0byBwcmV2ZW50IGRvdWJsZSBlbmNvZGluZyAobWF5IG5vdCBoYXZlIGFuIGVmZmVjdCkKICAgIGluaV9zZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJywgJzAnKTsKICAgIAogICAgcmVxdWlyZSAkbWluX2xpYlBhdGggLiAnL0hUVFAvRW5jb2Rlci5waHAnOwogICAgSFRUUF9FbmNvZGVyOjokZW5jb2RlVG9JZTYgID0gdHJ1ZTsgLy8ganVzdCBpbiBjYXNlCiAgICAkaGUgPSBuZXcgSFRUUF9FbmNvZGVyKGFycmF5KAogICAgICAgICdjb250ZW50JyA9PiAnV29ybGQhJwogICAgICAgICwnbWV0aG9kJyA9PiAnZGVmbGF0ZScKICAgICkpOwogICAgJGhlLT5lbmNvZGUoKTsKICAgICRoZS0+c2VuZEFsbCgpOwoKfSBlbHNlIHsKICAgIC8vIGVjaG8gc3RhdHVzICIwIiBvciAiMSIKICAgIGhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluJyk7CiAgICBlY2hvIChpbnQpJF9vYzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q01TTVMgTWluaWZ5Cj09PT09PT09PT09PQoKVGhpcyBwcm9qZWN0IGVtYmVkcyBbTWluaWZ5IDIuMS41XShodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbWluaWZ5LykgaW50byBDTVMgTWFkZSBTaW1wbGUuICBGcm9tIHRoZSBNaW5pZnkgd2Vic2l0ZToKCj4gTWluaWZ5IGlzIGEgUEhQNSBhcHAgdGhhdCBoZWxwcyB5b3UgZm9sbG93IHNldmVyYWwgb2YgWWFob28hJ3MgUnVsZXMgZm9yIEhpZ2ggUGVyZm9ybWFuY2UgV2ViIFNpdGVzLiBJdCBjb21iaW5lcyBtdWx0aXBsZSBDU1Mgb3IgSmF2YXNjcmlwdCBmaWxlcywgcmVtb3ZlcyB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cywgYW5kIHNlcnZlcyB0aGVtIHdpdGggZ3ppcCBlbmNvZGluZyBhbmQgb3B0aW1hbCBjbGllbnQtc2lkZSBjYWNoZSBoZWFkZXJzLgoKRm9yIGV4YW1wbGUsIHRoZSBqYXZhc2NyaXB0cyBmb3IgdGhlIEFkbWluIGludGVyZmFjZSBjb3VsZCBiZSBtaW5pZmllZCBpbnRvOgoKYGA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvbW9kdWxlcy9NaW5pZnkvbWluLz9iPWxpYi9qcXVlcnkvanMmYW1wO2Y9anF1ZXJ5LTEuNy4yLm1pbi5qcyxqcXVlcnktdWktMS44LjIxLmN1c3RvbS5taW4uanMsanF1ZXJ5LnVpLm5lc3RlZFNvcnRhYmxlLTEuMy40LmpzLGpxdWVyeS5qc29uLTIuMy5taW4uanMiPjwvc2NyaXB0PmBgCgpDdXJyZW50bHksIGl0IHNpbXBseSBlbWJlZHMgdGhlIE1pbmlmeSBwcm9qZWN0IGludG8gdGhlIG1vZHVsZSwgYW5kIGV4cG9zZXMgdGhlIEJ1aWxkZXIgdG8gdGhlIGFkbWluIGludGVyZmFjZS4gIFRoZSBidWlsZGVyIGFsbG93cyB5b3UgdG8gZW50ZXIgeW91ciBKYXZhc2NyaXB0IGZpbGVzIGluIGEgbGlzdCwgYW5kIG91dHB1dHMgYSB0aGUgYGA8c2NyaXB0Li4uLj5gYCB0YWcgdGhhdCB5b3Ugd291bGQgZW1iZWQgeW91ciB0ZW1wbGF0ZS4KCkZvciBzdXBwb3J0LCBwbGVhc2Ugc3VibWl0IFthbiBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL2RybWlrZWNyb3dlL2Ntc21zX21pbmlmeS9pc3N1ZXMpIGZvciBhc3Npc3RhbmNlLgoKUm9hZG1hcDoKCi0gSW5pdGlhbCBSZWxlYXNlCi0gSW1wbGVtZW50IERlYnVnIG1vZGUgZm9yIGRldmVsb3BtZW50Ci0gTWFpbnRhaW5zIHRoZSBsaXN0IG9mIGphdmFzY3JpcHRzIChvciBzdHlsZXNoZWV0cyksIGFuZCBhbGxvdyBlbWJlZGRpbmcgZGlmZmVyZW50IGxpc3RzLCBzdWNoIGFzIHtNaW5pZnkgcGFja2FnZT0ieHh4eCJ9Ci0gTG9nIHRvIENNU01TIEFkbWluIExvZwoKCgo=]]></data>
	</file>
	<file>
	  <filename>/rewriteTest.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MQ==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD5QbGFjZSB0aGUgY29udGVudHMgb2YgeW91ciBhZG1pbiBwYW5lbCBoZXJlLjwvcD4=]]></data>
	</file>
	<file>
	  <filename>/templates/builder.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9Cgk8c3R5bGU+CgkJYm9keSB7bWFyZ2luOjFlbSA2MHB4O30KCQloMSwgaDIsIGgzIHtwb3NpdGlvbjpyZWxhdGl2ZTt9CgkJaDEge21hcmdpbi10b3A6MDt9CgkJI3NvdXJjZXMge21hcmdpbjowOyBwYWRkaW5nOjA7fQoJCSNzb3VyY2VzIGxpIHttYXJnaW46MCAwIDAgNDBweH0KCQkjc291cmNlcyBsaSBpbnB1dCB7bWFyZ2luLWxlZnQ6MnB4fQoJCSNhZGQge21hcmdpbjo1cHggMCAxZW0gNDBweH0KCQkuaGlkZSB7ZGlzcGxheTpub25lfQoJCSN1cmlUYWJsZSB7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO30KCQkjdXJpVGFibGUgdGQsICN1cmlUYWJsZSB0aCB7cGFkZGluZy10b3A6MTBweDt9CgkJI3VyaVRhYmxlIHRoIHtwYWRkaW5nLXJpZ2h0OjEwcHg7fQoJCSNncm91cENvbmZpZyB7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO30KCQliIHtjb2xvcjojYzAwfQoJCS50b3BOb3RlIHtiYWNrZ3JvdW5kOiAjZmY5OyBkaXNwbGF5OmlubGluZS1ibG9jazsgcGFkZGluZzouNWVtIC42ZW07IG1hcmdpbjowIDAgMWVtO30KCQkudG9wV2FybmluZyB7YmFja2dyb3VuZDojYzAwOyBjb2xvcjojZmZmOyBwYWRkaW5nOi41ZW0gLjZlbTsgbWFyZ2luOjAgMCAxZW07fQoJCS50b3BXYXJuaW5nIGEge2NvbG9yOiNmZmY7fQoJCSNqc0RpZG50TG9hZCB7ZGlzcGxheTpub25lO30KCTwvc3R5bGU+CnsvbGl0ZXJhbH0KPHAgY2xhc3M9dG9wV2FybmluZyBpZD1qc0RpZG50TG9hZD48c3Ryb25nPlVoIE9oLjwvc3Ryb25nPiBNaW5pZnkgd2FzIHVuYWJsZSB0bwoJc2VydmUgSmF2YXNjcmlwdCBmb3IgdGhpcyBhcHAuIFRvIHRyb3VibGVzaG9vdCB0aGlzLAoJPGEgaHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL21pbmlmeS93aWtpL0RlYnVnZ2luZyI+ZW5hYmxlIEZpcmVQSFAgZGVidWdnaW5nPC9hPgoJYW5kIHJlcXVlc3QgdGhlIDxhIGlkPWJ1aWxkZXJTY3JpcHRTcmMgaHJlZj0jPk1pbmlmeSBVUkw8L2E+IGRpcmVjdGx5LiBIb3BlZnVsbHkgdGhlCglGaXJlUEhQIGNvbnNvbGUgd2lsbCByZXBvcnQgdGhlIGNhdXNlIG9mIHRoZSBlcnJvci4KPC9wPgoKPHAgaWQ9bWluUmV3cml0ZUZhaWxlZCBjbGFzcz0iaGlkZSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBZb3VyIHdlYnNlcnZlciBkb2VzIG5vdCBzZWVtIHRvCglzdXBwb3J0IG1vZF9yZXdyaXRlICh1c2VkIGluIC9taW4vLmh0YWNjZXNzKS4gWW91ciBNaW5pZnkgVVJJcyB3aWxsIGNvbnRhaW4gIj8iLCB3aGljaCAKCTxhIGhyZWY9Imh0dHA6Ly93d3cuc3RldmVzb3VkZXJzLmNvbS9ibG9nLzIwMDgvMDgvMjMvcmV2dmluZy1maWxlbmFtZXMtZG9udC11c2UtcXVlcnlzdHJpbmcvIgoJICAgPm1heSByZWR1Y2UgdGhlIGJlbmVmaXQgb2YgcHJveHkgY2FjaGUgc2VydmVyczwvYT4uPC9wPgoKPGgxPk1pbmlmeSBVUkkgQnVpbGRlcjwvaDE+Cgo8bm9zY3JpcHQ+PHAgY2xhc3M9InRvcE5vdGUiPkphdmFzY3JpcHQgYW5kIGEgYnJvd3NlciBzdXBwb3J0ZWQgYnkgalF1ZXJ5IDEuMi42IGlzIHJlcXVpcmVkCglmb3IgdGhpcyBhcHBsaWNhdGlvbi48L3A+PC9ub3NjcmlwdD4KCjxkaXYgaWQ9YXBwIGNsYXNzPWhpZGU+CgoJPHA+Q3JlYXRlIGEgbGlzdCBvZiBKYXZhc2NyaXB0IG9yIENTUyBmaWxlcyAob3IgMSBpcyBmaW5lKSB5b3UnZCBsaWtlIHRvIGNvbWJpbmUKCQlhbmQgY2xpY2sgW1VwZGF0ZV0uPC9wPgoKCTxvbCBpZD1zb3VyY2VzPjxsaT48L2xpPjwvb2w+Cgk8ZGl2IGlkPWFkZD48YnV0dG9uPkFkZCBmaWxlICs8L2J1dHRvbj48L2Rpdj4KCgk8ZGl2IGlkPWJtVXJpcz48L2Rpdj4KCgk8cD48YnV0dG9uIGlkPXVwZGF0ZSBjbGFzcz1oaWRlPlVwZGF0ZTwvYnV0dG9uPjwvcD4KCgk8ZGl2IGlkPXJlc3VsdHMgY2xhc3M9aGlkZT4KCgkJPGgyPk1pbmlmeSBVUkk8L2gyPgoJCTxwPlBsYWNlIHRoaXMgVVJJIGluIHlvdXIgSFRNTCB0byBzZXJ2ZSB0aGUgZmlsZXMgYWJvdmUgY29tYmluZWQsIG1pbmlmaWVkLCBjb21wcmVzc2VkIGFuZAoJCQl3aXRoIGNhY2hlIGhlYWRlcnMuPC9wPgoJCTx0YWJsZSBpZD11cmlUYWJsZT4KCQkJPHRyPjx0aD5VUkk8L3RoPjx0ZD48YSBpZD11cmlBIGNsYXNzPWV4dD4vbWluPC9hPiA8c21hbGw+KG9wZW5zIGluIG5ldyB3aW5kb3cpPC9zbWFsbD48L3RkPjwvdHI+CgkJCTx0cj48dGg+SFRNTDwvdGg+PHRkPjxpbnB1dCBpZD11cmlIdG1sIHR5cGU9dGV4dCBzaXplPTEwMCByZWFkb25seT48L3RkPjwvdHI+CgkJPC90YWJsZT4KCgkJPGgyPkhvdyB0byBzZXJ2ZSB0aGVzZSBmaWxlcyBhcyBhIGdyb3VwPC9oMj4KCQk8cD5Gb3IgdGhlIGJlc3QgcGVyZm9ybWFuY2UgeW91IGNhbiBzZXJ2ZSB0aGVzZSBmaWxlcyBhcyBhIHByZS1kZWZpbmVkIGdyb3VwIHdpdGggYSBVUkkKCQkJbGlrZTogPGNvZGU+PHNwYW4gY2xhc3M9bWluUm9vdD4vbWluLz88L3NwYW4+Zz1rZXlOYW1lPC9jb2RlPjwvcD4KCQk8cD5UbyBkbyB0aGlzLCBhZGQgYSBsaW5lIGxpa2UgdGhpcyB0byAvbWluL2dyb3Vwc0NvbmZpZy5waHA6PC9wPgoKCQk8cHJlPjxjb2RlPnJldHVybiBhcnJheSgKICAgIDxzcGFuIHN0eWxlPSJjb2xvcjojNjY2Ij4uLi4geW91ciBleGlzdGluZyBncm91cHMgaGVyZSAuLi48L3NwYW4+CjxpbnB1dCBpZD1ncm91cENvbmZpZyBzaXplPTEwMCB0eXBlPXRleHQgcmVhZG9ubHk+Cik7PC9jb2RlPjwvcHJlPgoKCQk8cD48ZW0+TWFrZSBzdXJlIHRvIHJlcGxhY2UgPGNvZGU+a2V5TmFtZTwvY29kZT4gd2l0aCBhIHVuaXF1ZSBrZXkgZm9yIHRoaXMgZ3JvdXAuPC9lbT48L3A+Cgk8L2Rpdj4KCgk8ZGl2IGlkPWdldEJtPgoJCTxoMz5GaW5kIFVSSXMgb24gYSBQYWdlPC9oMz4KCQk8cD5Zb3UgY2FuIHVzZSB0aGUgYm9va21hcmtsZXQgYmVsb3cgdG8gZmV0Y2ggYWxsIENTUyAmYW1wOyBKYXZhc2NyaXB0IFVSSXMgZnJvbSBhIHBhZ2UKCQkJb24geW91ciBzaXRlLiBXaGVuIHlvdSBhY3RpdmUgaXQsIHRoaXMgcGFnZSB3aWxsIG9wZW4gaW4gYSBuZXcgd2luZG93IHdpdGggYSBsaXN0IG9mCgkJCWF2YWlsYWJsZSBVUklzIHRvIGFkZC48L3A+CgoJCTxwPjxhIGlkPWJtPkNyZWF0ZSBNaW5pZnkgVVJJczwvYT4gPHNtYWxsPihyaWdodC1jbGljaywgYWRkIHRvIGJvb2ttYXJrcyk8L3NtYWxsPjwvcD4KCTwvZGl2PgoKCTxoMz5Db21iaW5pbmcgQ1NTIGZpbGVzIHRoYXQgY29udGFpbiA8Y29kZT5AaW1wb3J0PC9jb2RlPjwvaDM+Cgk8cD5JZiB5b3VyIENTUyBmaWxlcyBjb250YWluIDxjb2RlPkBpbXBvcnQ8L2NvZGU+IGRlY2xhcmF0aW9ucywgTWluaWZ5IHdpbGwgbm90IAoJCXJlbW92ZSB0aGVtLiBUaGVyZWZvcmUsIHlvdSB3aWxsIHdhbnQgdG8gcmVtb3ZlIHRob3NlIHRoYXQgcG9pbnQgdG8gZmlsZXMgYWxyZWFkeQoJCWluIHlvdXIgbGlzdCwgYW5kIG1vdmUgYW55IG90aGVycyB0byB0aGUgdG9wIG9mIHRoZSBmaXJzdCBmaWxlIGluIHlvdXIgbGlzdCAKCQkoaW1wb3J0cyBiZWxvdyBhbnkgc3R5bGVzIHdpbGwgYmUgaWdub3JlZCBieSBicm93c2VycyBhcyBpbnZhbGlkKS48L3A+Cgk8cD5JZiB5b3UgZGVzaXJlLCB5b3UgY2FuIHVzZSBNaW5pZnkgVVJJcyBpbiBpbXBvcnRzIGFuZCB0aGV5IHdpbGwgbm90IGJlIHRvdWNoZWQKCQlieSBNaW5pZnkuIEUuZy4gPGNvZGU+QGltcG9ydCAiPHNwYW4gY2xhc3M9bWluUm9vdD4vbWluLz88L3NwYW4+Zz1jc3MyIjs8L2NvZGU+PC9wPgoKCTxoMz5EZWJ1ZyBNb2RlPC9oMz4KCTxwPldoZW4gL21pbi9jb25maWcucGhwIGhhcyA8Y29kZT4kbWluX2FsbG93RGVidWdGbGFnID0gPHN0cm9uZz50cnVlPC9zdHJvbmc+OzwvY29kZT4KCQl5b3UgY2FuIGdldCBkZWJ1ZyBvdXRwdXQgYnkgYXBwZW5kaW5nIDxjb2RlPiZhbXA7ZGVidWc8L2NvZGU+IHRvIGEgTWluaWZ5IFVSTCwgb3IKCQlieSBzZW5kaW5nIHRoZSBjb29raWUgPGNvZGU+bWluRGVidWc9Jmx0O21hdGNoJmd0OzwvY29kZT4sIHdoZXJlIDxjb2RlPiZsdDttYXRjaCZndDs8L2NvZGU+CgkJc2hvdWxkIGJlIGEgc3RyaW5nIGluIHRoZSBNaW5pZnkgVVJJcyB5b3UnZCBsaWtlIHRvIGRlYnVnLiBUaGlzIGJvb2ttYXJrbGV0IHdpbGwgYWxsb3cgeW91IHRvCgkJc2V0IHRoaXMgY29va2llLjwvcD4KCTxwPjxhIGlkPWJtMj5NaW5pZnkgRGVidWc8L2E+IDxzbWFsbD4ocmlnaHQtY2xpY2ssIGFkZCB0byBib29rbWFya3MpPC9zbWFsbD48L3A+Cgo8L2Rpdj48IS0tICNhcHAgLS0+Cgo8aHI+CjxwPk5lZWQgaGVscD8gQ2hlY2sgdGhlIDxhIGhyZWY9Imh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9taW5pZnkvdy9saXN0P2Nhbj0zIj53aWtpPC9hPiwKCW9yIHBvc3QgdG8gdGhlIDxhIGNsYXNzPWV4dCBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvbWluaWZ5Ij5kaXNjdXNzaW9uCgkJbGlzdDwvYT4uPC9wPgo8cD48c21hbGw+UG93ZXJlZCBieSBNaW5pZnkgPD9waHAgZWNobyBNaW5pZnk6OlZFUlNJT047ID8+PC9zbWFsbD48L3A+Cgo8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS42LjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgnPHNjcmlwdCBzcmM9ImpxdWVyeS0xLjYuMy5taW4uanMiPjxcL3NjcmlwdD4nKTwvc2NyaXB0Pgp7bGl0ZXJhbH0KCTxzY3JpcHQ+CgkJCShmdW5jdGlvbigpIHsKCQkJCS8vIHdvcmthcm91bmQgcmVxdWlyZWQgdG8gdGVzdCB3aGVuIC9taW4gaXNuJ3QgY2hpbGQgb2Ygd2ViIHJvb3QKCQkJCXZhciBzcmMgPSAiL21vZHVsZXMvTWluaWZ5L21pbi8/Zj1tb2R1bGVzL01pbmlmeS9faW5kZXguanMiOwoJCQkJLy8gbG9hZCBzY3JpcHQgaW1tZWRpYXRlbHkKCQkJCWRvY3VtZW50LndyaXRlKCc8XHNjcmlwdCBzcmM9IicgKyBzcmMgKyAnIj48XC9zY3JpcHQ+Jyk7CgkJCQkkKGZ1bmN0aW9uKCkgewoJCQkJCSQoJyNidWlsZGVyU2NyaXB0U3JjJylbMF0uaHJlZiA9IHNyYzsKCQkJCQkvLyBnaXZlIE1pbmlmeSBhIGZldyBzZWNvbmRzIHRvIHNlcnZlIF9pbmRleC5qcyBiZWZvcmUgc2hvd2luZyBzY2FyeSByZWQgd2FybmluZwoJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJCQkJCWlmICghd2luZG93Lk1VQikgewoJCQkJCQkJLy8gTWluaWZ5IGRpZG4ndCBsb2FkCgkJCQkJCQkkKCcjanNEaWRudExvYWQnKS5jc3Moe2Rpc3BsYXk6ICdibG9jayd9KTsKCQkJCQkJfQoJCQkJCX0sIDMwMDApOwoKCQkJCQkvLyBkZXRlY3Rpb24gb2YgZG91YmxlIG91dHB1dCBlbmNvZGluZwoJCQkJCXZhciBtc2cgPSAnPFxwIGNsYXNzPXRvcFdhcm5pbmc+PFxzdHJvbmc+V2FybmluZzo8XC9zdHJvbmc+ICc7CgkJCQkJdmFyIHVybCA9ICcvbW9kdWxlcy9NaW5pZnkvb2NDaGVjay5waHA/JyArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CgkJCQkJJC5nZXQodXJsLCBmdW5jdGlvbihvY1N0YXR1cykgewoJCQkJCQkkLmdldCh1cmwgKyAnJmhlbGxvPTEnLCBmdW5jdGlvbihvY0hlbGxvKSB7CgkJCQkJCQlpZiAob2NIZWxsbyAhPSAnV29ybGQhJykgewoJCQkJCQkJCW1zZyArPSAnSXQgYXBwZWFycyBvdXRwdXQgaXMgYmVpbmcgYXV0b21hdGljYWxseSBjb21wcmVzc2VkLCBpbnRlcmZlcmluZyAnCgkJCQkJCQkJCQkrICcgd2l0aCBNaW5pZnlcJ3Mgb3duIGNvbXByZXNzaW9uLiAnOwoJCQkJCQkJCWlmIChvY1N0YXR1cyA9PSAnMScpCgkJCQkJCQkJCW1zZyArPSAnVGhlIG9wdGlvbiAiemxpYi5vdXRwdXRfY29tcHJlc3Npb24iIGlzIGVuYWJsZWQgaW4geW91ciBQSFAgY29uZmlndXJhdGlvbi4gJwoJCQkJCQkJCQkJCSsgJ01pbmlmeSBzZXQgdGhpcyB0byAiMCIsIGJ1dCBpdCBoYWQgbm8gZWZmZWN0LiBUaGlzIG9wdGlvbiBtdXN0IGJlIGRpc2FibGVkICcKCQkJCQkJCQkJCQkrICdpbiBwaHAuaW5pIG9yIC5odGFjY2Vzcy4nOwoJCQkJCQkJCWVsc2UKCQkJCQkJCQkJbXNnICs9ICdUaGUgb3B0aW9uICJ6bGliLm91dHB1dF9jb21wcmVzc2lvbiIgaXMgZGlzYWJsZWQgaW4geW91ciBQSFAgY29uZmlndXJhdGlvbiAnCgkJCQkJCQkJCQkJKyAnc28gdGhpcyBiZWhhdmlvciBpcyBsaWtlbHkgZHVlIHRvIGEgc2VydmVyIG9wdGlvbi4nOwoJCQkJCQkJCSQoZG9jdW1lbnQuYm9keSkucHJlcGVuZChtc2cgKyAnPFwvcD4nKTsKCQkJCQkJCX0gZWxzZQoJCQkJCQkJaWYgKG9jU3RhdHVzID09ICcxJykKCQkJCQkJCQkkKGRvY3VtZW50LmJvZHkpLnByZXBlbmQoJzxccCBjbGFzcz10b3BOb3RlPjxcc3Ryb25nPk5vdGU6PC9cc3Ryb25nPiBUaGUgb3B0aW9uICcKCQkJCQkJCQkJCSsgJyJ6bGliLm91dHB1dF9jb21wcmVzc2lvbiIgaXMgZW5hYmxlZCBpbiB5b3VyIFBIUCBjb25maWd1cmF0aW9uLCBidXQgaGFzIGJlZW4gJwoJCQkJCQkJCQkJKyAnc3VjY2Vzc2Z1bGx5IGRpc2FibGVkIHZpYSBpbmlfc2V0KCkuIElmIHlvdSBleHBlcmllbmNlIG1hbmdsZWQgb3V0cHV0IHlvdSAnCgkJCQkJCQkJCQkrICdtYXkgd2FudCB0byBjb25zaWRlciBkaXNhYmxpbmcgdGhpcyBvcHRpb24gaW4geW91ciBQSFAgY29uZmlndXJhdGlvbi48XC9wPicKCQkJCQkJCQkJCSk7CgkJCQkJCX0pOwoJCQkJCX0pOwoJCQkJfSk7CgkJCX0pKCk7Cgl7L2xpdGVyYWx9Cjwvc2NyaXB0Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4Ke2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9]]></data>
	</file>
	<file>
	  <filename>/test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKZXhpdCgpOwovKiBjdXJyZW50bHkgdW51c2VkLgoKLy8gY2FwdHVyZSBQSFAncyBkZWZhdWx0IHNldHRpbmcgKG1heSBnZXQgb3ZlcnJpZGRlbiBpbiBjb25maWcKJF9vYyA9IGluaV9nZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJyk7CgovLyBhbGxvdyBhY2Nlc3Mgb25seSBpZiBidWlsZGVyIGlzIGVuYWJsZWQKcmVxdWlyZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvLi4vY29uZmlnLnBocCc7CmlmICghICRtaW5fZW5hYmxlQnVpbGRlcikgewogICAgZXhpdCgpOwp9CgppZiAoaXNzZXQoJF9HRVRbJ29jJ10pKSB7CiAgICBoZWFkZXIoJ0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbicpOwogICAgZWNobyAoaW50KSRfb2M7Cgp9IGVsc2VpZiAoaXNzZXQoJF9HRVRbJ3RleHQnXSkgJiYgaW5fYXJyYXkoJF9HRVRbJ3RleHQnXSwgYXJyYXkoJ2pzJywgJ2NzcycsICdmYWtlJykpKSB7CiAgICBpbmlfc2V0KCd6bGliLm91dHB1dF9jb21wcmVzc2lvbicsICcwJyk7CiAgICAkdHlwZSA9ICgkX0dFVFsndGV4dCddID09ICdqcycpCiAgICAgICAgPyAnYXBwbGljYXRpb24veC1qYXZhc2NyaXB0JwogICAgICAgIDogInRleHQveyRfR0VUWyd0ZXh0J119IjsKICAgIGhlYWRlcigiQ29udGVudC1UeXBlOiB7JHR5cGV9Iik7CiAgICBlY2hvICdIZWxsbyc7Cgp9IGVsc2VpZiAoaXNzZXQoJF9HRVRbJ2RvY3Jvb3QnXSkpIHsKICAgIGlmIChmYWxzZSA9PT0gcmVhbHBhdGgoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSkpIHsKICAgICAgICBlY2hvICI8cCBjbGFzcz10b3BXYXJuaW5nPjxzdHJvbmc+cmVhbHBhdGgoRE9DVU1FTlRfUk9PVCkgZmFpbGVkLjwvc3Ryb25nPiBZb3UgbWF5IG5lZWQgIgogICAgICAgICAgIC4gInRvIHNldCBcJG1pbl9kb2N1bWVudFJvb3QgbWFudWFsbHkgKGhvcGVmdWxseSByZWFscGF0aCgpIGlzIG5vdCAiCiAgICAgICAgICAgLiAiYnJva2VuIGluIHlvdXIgZW52aXJvbm1lbnQpLjwvcD4iOwogICAgfQogICAgaWYgKDAgIT09IHN0cnBvcyhyZWFscGF0aChfX0ZJTEVfXyksIHJlYWxwYXRoKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pKSkgewogICAgICAgIGVjaG8gIjxwIGNsYXNzPXRvcFdhcm5pbmc+PHN0cm9uZz5ET0NVTUVOVF9ST09UIGRvZXNuJ3QgY29udGFpbiB0aGlzIGZpbGUuPC9zdHJvbmc+IFlvdSBtYXkgIgogICAgICAgICAgIC4gIiBuZWVkIHRvIHNldCBcJG1pbl9kb2N1bWVudFJvb3QgbWFudWFsbHk8L3A+IjsKICAgIH0KICAgIGlmIChpc3NldCgkX1NFUlZFUlsnU1VCRE9NQUlOX0RPQ1VNRU5UX1JPT1QnXSkpIHsKICAgICAgICBlY2hvICI8cCBjbGFzcz10b3BOb3RlPjxzdHJvbmc+XCRfU0VSVkVSWydTVUJET01BSU5fRE9DVU1FTlRfUk9PVCddIGlzIHNldC48L3N0cm9uZz4gIgogICAgICAgICAgIC4gIllvdSBtYXkgbmVlZCB0byBzZXQgXCRtaW5fZG9jdW1lbnRSb290IHRvIHRoaXMgaW4gY29uZmlnLnBocDwvcD4iOwogICAgfQogICAgCn0KCi8vKi8=]]></data>
	</file>
	<file>
	  <filename>/_index.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIE1pbmlmeSBVUkkgQnVpbGRlcgogKi8KdmFyIE1VQiA9IHsKICAgIF91aWQgOiAwLAogICAgX21pblJvb3QgOiAnL21vZHVsZXMvTWluaWZ5L21pbi8/JywKICAgIGNoZWNrUmV3cml0ZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgdGVzdFVyaSA9ICIvbW9kdWxlcy9NaW5pZnkvcmV3cml0ZVRlc3QuanMiOwogICAgICAgIGZ1bmN0aW9uIGZhaWwoKSB7CiAgICAgICAgICAgICQoJyNtaW5SZXdyaXRlRmFpbGVkJylbMF0uY2xhc3NOYW1lID0gJ3RvcE5vdGUnOwogICAgICAgIH0KICAgICAgICAkLmFqYXgoewogICAgICAgICAgICB1cmwgOiAnL21vZHVsZXMvTWluaWZ5L21pbi8/Zj0nICsgdGVzdFVyaSArICcmJyArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksCiAgICAgICAgICAgIHN1Y2Nlc3MgOiBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09ICcxJykgewogICAgICAgICAgICAgICAgICAgIE1VQi5fbWluUm9vdCA9ICcvbW9kdWxlcy9NaW5pZnkvbWluLz8nOwogICAgICAgICAgICAgICAgICAgICQoJ3NwYW4ubWluUm9vdCcpLmh0bWwoJy9tb2R1bGVzL01pbmlmeS9taW4vPycpOwogICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBlcnJvciA6IGZhaWwKICAgICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEdldCBtYXJrdXAgZm9yIG5ldyBzb3VyY2UgTEkgZWxlbWVudAogICAgICovCiAgICBuZXdMaSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gJzxsaSBpZD0ibGknICsgTVVCLl91aWQgKyAnIj5odHRwOi8vJyArIGxvY2F0aW9uLmhvc3QgKyAnLzxpbnB1dCB0eXBlPXRleHQgc2l6ZT0yMD4nICsKICAgICAgICAnIDxidXR0b24gdGl0bGU9IlJlbW92ZSI+eDwvYnV0dG9uPiA8YnV0dG9uIHRpdGxlPSJJbmNsdWRlIEVhcmxpZXIiPiZ1YXJyOzwvYnV0dG9uPicgKwogICAgICAgICcgPGJ1dHRvbiB0aXRsZT0iSW5jbHVkZSBMYXRlciI+JmRhcnI7PC9idXR0b24+IDxzcGFuPjwvc3Bhbj48L2xpPic7CiAgICB9LAogICAgLyoqCiAgICAgKiBBZGQgbmV3IGVtcHR5IHNvdXJjZSBMSSBhbmQgYXR0YWNoIGhhbmRsZXJzIHRvIGJ1dHRvbnMKICAgICAqLwogICAgYWRkTGkgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgnI3NvdXJjZXMnKS5hcHBlbmQoTVVCLm5ld0xpKCkpOwogICAgICAgIHZhciBsaSA9ICQoJyNsaScgKyBNVUIuX3VpZClbMF07CiAgICAgICAgJCgnYnV0dG9uW3RpdGxlPVJlbW92ZV0nLCBsaSkuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKCcjcmVzdWx0cycpLmhpZGUoKTsKICAgICAgICAgICAgdmFyIGhhZFZhbHVlID0gISEkKCdpbnB1dCcsIGxpKVswXS52YWx1ZTsKICAgICAgICAgICAgJChsaSkucmVtb3ZlKCk7CiAgICAgICAgfSk7CiAgICAgICAgJCgnYnV0dG9uW3RpdGxlJD1FYXJsaWVyXScsIGxpKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICQobGkpLnByZXYoJ2xpJykuZmluZCgnaW5wdXQnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICQoJyNyZXN1bHRzJykuaGlkZSgpOwogICAgICAgICAgICAgICAgLy8gdGhpcyA9IHByZXZpb3VzIGxpIGlucHV0CiAgICAgICAgICAgICAgICB2YXIgdG1wID0gdGhpcy52YWx1ZTsKICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSAkKCdpbnB1dCcsIGxpKS52YWwoKTsKICAgICAgICAgICAgICAgICQoJ2lucHV0JywgbGkpLnZhbCh0bXApOwogICAgICAgICAgICAgICAgTVVCLnVwZGF0ZUFsbFRlc3RMaW5rcygpOwogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICAkKCdidXR0b25bdGl0bGUkPUxhdGVyXScsIGxpKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICQobGkpLm5leHQoJ2xpJykuZmluZCgnaW5wdXQnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICQoJyNyZXN1bHRzJykuaGlkZSgpOwogICAgICAgICAgICAgICAgLy8gdGhpcyA9IG5leHQgbGkgaW5wdXQKICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0aGlzLnZhbHVlOwogICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9ICQoJ2lucHV0JywgbGkpLnZhbCgpOwogICAgICAgICAgICAgICAgJCgnaW5wdXQnLCBsaSkudmFsKHRtcCk7CiAgICAgICAgICAgICAgICBNVUIudXBkYXRlQWxsVGVzdExpbmtzKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgICsrTVVCLl91aWQ7CiAgICB9LAogICAgLyoqCiAgICAgKiBJbiB0aGUgY29udGV4dCBvZiBhIHNvdXJjZSBMSSBlbGVtZW50LCB0aGlzIHdpbGwgYW5hbHl6ZSB0aGUgVVJJIGluCiAgICAgKiB0aGUgSU5QVVQgYW5kIGNoZWNrIHRoZSBVUkwgb24gdGhlIHNpdGUuCiAgICAgKi8KICAgIGxpVXBkYXRlVGVzdExpbmsgOiBmdW5jdGlvbiAoKSB7IC8vIGNhbGwgaW4gY29udGV4dCBvZiBsaSBlbGVtZW50CiAgICAgICAgaWYgKCEgJCgnaW5wdXQnLCB0aGlzKVswXS52YWx1ZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciBsaSA9IHRoaXM7CiAgICAgICAgJCgnc3BhbicsIHRoaXMpLmh0bWwoJycpOwogICAgICAgIHZhciB1cmwgPSBsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBsb2NhdGlvbi5ob3N0ICsgJy8nICsKICAgICAgICAgICAgICAgICQoJ2lucHV0JywgdGhpcylbMF0udmFsdWUucmVwbGFjZSgvXlwvLywgJycpOwogICAgICAgICQuYWpheCh7CiAgICAgICAgICAgIHVybCA6IHVybCwKICAgICAgICAgICAgY29tcGxldGUgOiBmdW5jdGlvbiAoeGhyLCBzdGF0KSB7CiAgICAgICAgICAgICAgICBpZiAoJ3N1Y2Nlc3MnID09PSBzdGF0KQogICAgICAgICAgICAgICAgICAgICQoJ3NwYW4nLCBsaSkuaHRtbCgnJiN4MjcxMzsnKTsKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICQoJ3NwYW4nLCBsaSkuaHRtbCgnPGJ1dHRvbj48Yj40MDQhIDwvYj4gcmVjaGVjazwvYnV0dG9uPicpCiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKCdidXR0b24nKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNVUIubGlVcGRhdGVUZXN0TGluay5jYWxsKGxpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRhdGFUeXBlIDogJ3RleHQnCiAgICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBDaGVjayBhbGwgc291cmNlIFVSTHMKICAgICAqLwogICAgdXBkYXRlQWxsVGVzdExpbmtzIDogZnVuY3Rpb24gKCkgewogICAgICAgICQoJyNzb3VyY2VzIGxpJykuZWFjaChNVUIubGlVcGRhdGVUZXN0TGluayk7CiAgICB9LAogICAgLyoqCiAgICAgKiBJbiBhIGdpdmVuIGFycmF5IG9mIHN0cmluZ3MsIGZpbmQgdGhlIGNoYXJhY3RlciB0aGV5IGFsbCBoYXZlIGF0CiAgICAgKiBhIHBhcnRpY3VsYXIgaW5kZXgKICAgICAqIEBwYXJhbSBBcnJheSBhcnIgYXJyYXkgb2Ygc3RyaW5ncwogICAgICogQHBhcmFtIE51bWJlciBwb3MgaW5kZXggdG8gY2hlY2sKICAgICAqIEByZXR1cm4gbWl4ZWQgYSBjb21tb24gY2hhciBvciAnJyBpZiBhbnkgZG8gbm90IG1hdGNoCiAgICAgKi8KICAgIGdldENvbW1vbkNoYXJBdFBvcyA6IGZ1bmN0aW9uIChhcnIsIHBvcykgewogICAgICAgIHZhciBpLAogICAgICAgICAgICBsID0gYXJyLmxlbmd0aCwKICAgICAgICAgICAgYyA9IGFyclswXS5jaGFyQXQocG9zKTsKICAgICAgICBpZiAoYyA9PT0gJycgfHwgbCA9PT0gMSkKICAgICAgICAgICAgcmV0dXJuIGM7CiAgICAgICAgZm9yIChpID0gMTsgaSA8IGw7ICsraSkKICAgICAgICAgICAgaWYgKGFycltpXS5jaGFyQXQocG9zKSAhPT0gYykKICAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICByZXR1cm4gYzsKICAgIH0sCiAgICAvKioKICAgICAqIEdldCB0aGUgc2hvcnRlc3QgVVJJIHRvIG1pbmlmeSB0aGUgc2V0IG9mIHNvdXJjZSBmaWxlcwogICAgICogQHBhcmFtIEFycmF5IHNvdXJjZXMgVVJJcwogICAgICovCiAgICBnZXRCZXN0VXJpIDogZnVuY3Rpb24gKHNvdXJjZXMpIHsKICAgICAgICB2YXIgcG9zID0gMCwKICAgICAgICAgICAgYmFzZSA9ICcnLAogICAgICAgICAgICBjOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIGMgPSBNVUIuZ2V0Q29tbW9uQ2hhckF0UG9zKHNvdXJjZXMsIHBvcyk7CiAgICAgICAgICAgIGlmIChjID09PSAnJykKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBiYXNlICs9IGM7CiAgICAgICAgICAgICsrcG9zOwogICAgICAgIH0KICAgICAgICBiYXNlID0gYmFzZS5yZXBsYWNlKC9bXlwvXSskLywgJycpOwogICAgICAgIHZhciB1cmkgPSBNVUIuX21pblJvb3QgKyAnZj0nICsgc291cmNlcy5qb2luKCcsJyk7CiAgICAgICAgaWYgKGJhc2UuY2hhckF0KGJhc2UubGVuZ3RoIC0gMSkgPT09ICcvJykgewogICAgICAgICAgICAvLyB3ZSBoYXZlIGEgYmFzZSBkaXIhCiAgICAgICAgICAgIHZhciBiYXNlZFNvdXJjZXMgPSBzb3VyY2VzLAogICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgIGwgPSBzb3VyY2VzLmxlbmd0aDsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7ICsraSkgewogICAgICAgICAgICAgICAgYmFzZWRTb3VyY2VzW2ldID0gc291cmNlc1tpXS5zdWJzdHIoYmFzZS5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJhc2UgPSBiYXNlLnN1YnN0cigwLCBiYXNlLmxlbmd0aCAtIDEpOwogICAgICAgICAgICB2YXIgYlVyaSA9IE1VQi5fbWluUm9vdCArICdiPScgKyBiYXNlICsgJyZmPScgKyBiYXNlZFNvdXJjZXMuam9pbignLCcpOwogICAgICAgICAgICAvL3dpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUubG9nKFt1cmksIGJVcmldKTsKICAgICAgICAgICAgdXJpID0gdXJpLmxlbmd0aCA8IGJVcmkubGVuZ3RoID8gdXJpIDogYlVyaTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHVyaTsKICAgIH0sCiAgICAvKioKICAgICAqIENyZWF0ZSB0aGUgTWluaWZ5IFVSSSBmb3IgdGhlIHNvdXJjZXMKICAgICAqLwogICAgdXBkYXRlIDogZnVuY3Rpb24gKCkgewogICAgICAgIE1VQi51cGRhdGVBbGxUZXN0TGlua3MoKTsKICAgICAgICB2YXIgc291cmNlcyA9IFtdLAogICAgICAgICAgICBleHQgPSBmYWxzZSwKICAgICAgICAgICAgZmFpbCA9IGZhbHNlLAogICAgICAgICAgICBtYXJrdXA7CiAgICAgICAgJCgnI3NvdXJjZXMgaW5wdXQnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIG0sIHZhbDsKICAgICAgICAgICAgaWYgKCEgZmFpbCAmJiB0aGlzLnZhbHVlICYmIChtID0gdGhpcy52YWx1ZS5tYXRjaCgvXC4oY3NzfGpzKSQvKSkpIHsKICAgICAgICAgICAgICAgIHZhciB0aGlzRXh0ID0gbVsxXTsKICAgICAgICAgICAgICAgIGlmIChleHQgPT09IGZhbHNlKQogICAgICAgICAgICAgICAgICAgIGV4dCA9IHRoaXNFeHQ7CiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzRXh0ICE9PSBleHQpIHsKICAgICAgICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxlcnQoJ2V4dGVuc2lvbnMgbXVzdCBtYXRjaCEnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnJlcGxhY2UoL15cLy8sICcnKTsKICAgICAgICAgICAgICAgIGlmICgtMSAhPT0gJC5pbkFycmF5KHRoaXMudmFsdWUsIHNvdXJjZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgZmFpbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsZXJ0KCdkdXBsaWNhdGUgZmlsZSEnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNvdXJjZXMucHVzaCh0aGlzLnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmIChmYWlsIHx8ICEgc291cmNlcy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAkKCcjZ3JvdXBDb25maWcnKS52YWwoIiAgICAna2V5TmFtZScgPT4gYXJyYXkoJy8vIiArIHNvdXJjZXMuam9pbigiJywgJy8vIikgKyAiJyksIik7CiAgICAgICAgdmFyIHVyaSA9IE1VQi5nZXRCZXN0VXJpKHNvdXJjZXMpLAogICAgICAgICAgICB1cmlIID0gdXJpLnJlcGxhY2UoLzwvLCAnJmx0OycpLnJlcGxhY2UoLz4vLCAnJmd0OycpLnJlcGxhY2UoLyYvLCAnJmFtcDsnKTsKICAgICAgICAkKCcjdXJpQScpLmh0bWwodXJpSClbMF0uaHJlZiA9IHVyaTsKICAgICAgICBpZiAoZXh0ID09PSAnanMnKSB7CiAgICAgICAgICAgIG1hcmt1cCA9ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInICsgdXJpSCArICciPjwvc2NyaXB0Pic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWFya3VwID0gJzxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhyZWY9IicgKyB1cmlIICsgJyIgLz4nOwogICAgICAgIH0KICAgICAgICAkKCcjdXJpSHRtbCcpLnZhbChtYXJrdXApOwogICAgICAgICQoJyNyZXN1bHRzJykuc2hvdygpOwogICAgfSwKICAgIC8qKgogICAgICogSGFuZGxlciBmb3IgdGhlICJBZGQgZmlsZSArIiBidXR0b24KICAgICAqLwogICAgYWRkQnV0dG9uQ2xpY2sgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgnI3Jlc3VsdHMnKS5oaWRlKCk7CiAgICAgICAgTVVCLmFkZExpKCk7CiAgICAgICAgTVVCLnVwZGF0ZUFsbFRlc3RMaW5rcygpOwogICAgICAgICQoJyN1cGRhdGUnKS5zaG93KCkuY2xpY2soTVVCLnVwZGF0ZSk7CiAgICAgICAgJCgnI3NvdXJjZXMgbGk6bGFzdCBpbnB1dCcpWzBdLmZvY3VzKCk7CiAgICB9LAogICAgLyoqCiAgICAgKiBSdW5zIG9uIERPTXJlYWR5CiAgICAgKi8KICAgIGluaXQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgJCgnI2pzRGlkbnRMb2FkJykucmVtb3ZlKCk7CiAgICAgICAgJCgnI2FwcCcpLnNob3coKTsKICAgICAgICAkKCcjc291cmNlcycpLmh0bWwoJycpOwogICAgICAgICQoJyNhZGQgYnV0dG9uJykuY2xpY2soTVVCLmFkZEJ1dHRvbkNsaWNrKTsKICAgICAgICAvLyBtYWtlIGVhc2llciB0byBjb3B5IHRleHQgb3V0IG9mCiAgICAgICAgJCgnI3VyaUh0bWwsICNncm91cENvbmZpZywgI3N5bWxpbmtPcHQnKS5jbGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0KCk7CiAgICAgICAgfSkuZm9jdXMoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLnNlbGVjdCgpOwogICAgICAgIH0pOwogICAgICAgICQoJ2EuZXh0JykuYXR0cih7dGFyZ2V0OidfYmxhbmsnfSk7CiAgICAgICAgaWYgKGxvY2F0aW9uLmhhc2gpIHsKICAgICAgICAgICAgLy8gbWFrZSBsaW5rcyBvdXQgb2YgVVJJcyBmcm9tIGJvb2ttYXJrbGV0CiAgICAgICAgICAgICQoJyNnZXRCbScpLmhpZGUoKTsKICAgICAgICAgICAgdmFyIGkgPSAwLCBmb3VuZCA9IGxvY2F0aW9uLmhhc2guc3Vic3RyKDEpLnNwbGl0KCcsJyksIGwgPSBmb3VuZC5sZW5ndGg7CiAgICAgICAgICAgICQoJyNibVVyaXMnKS5odG1sKCc8cD48c3Ryb25nPkZvdW5kIGJ5IGJvb2ttYXJrbGV0Ojwvc3Ryb25nPiAvPC9wPicpOwogICAgICAgICAgICB2YXIgJHAgPSAkKCcjYm1VcmlzIHAnKTsKICAgICAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgICAgICRwLmFwcGVuZCgkKCc8YSBocmVmPSM+PC9hPicpLnRleHQoZm91bmRbaV0pWzBdKTsKICAgICAgICAgICAgICAgIGlmIChpIDwgKGwgLSAxKSkgewogICAgICAgICAgICAgICAgICAgICRwLmFwcGVuZCgnLCAvJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJCgnI2JtVXJpcyBhJykuY2xpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgTVVCLmFkZEJ1dHRvbkNsaWNrKCk7CiAgICAgICAgICAgICAgICAkKCcjc291cmNlcyBsaTpsYXN0IGlucHV0JykudmFsKHRoaXMuaW5uZXJIVE1MKTsKICAgICAgICAgICAgICAgIE1VQi5saVVwZGF0ZVRlc3RMaW5rLmNhbGwoJCgnI3NvdXJjZXMgbGk6bGFzdCcpWzBdKTsKICAgICAgICAgICAgICAgICQoJyNyZXN1bHRzJykuaGlkZSgpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9KS5hdHRyKHt0aXRsZTonQWRkIGZpbGUgKyd9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBzZXR1cCBib29rbWFya2xldCAxCiAgICAgICAgICAgICQuYWpheCh7CiAgICAgICAgICAgICAgICB1cmwgOiAnLi4vP2Y9JyArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1wvW15cL10qJC8sICcvYm0uanMnKS5zdWJzdHIoMSksCiAgICAgICAgICAgICAgICBzdWNjZXNzIDogZnVuY3Rpb24gKGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICAkKCcjYm0nKVswXS5ocmVmID0gY29kZQogICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnJUJVSUxERVJfVVJMJScsIGxvY2F0aW9uLmhyZWYpCiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cbi9nLCAnICcpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRhdGFUeXBlIDogJ3RleHQnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoJC5icm93c2VyLm1zaWUpIHsKICAgICAgICAgICAgICAgICQoJyNnZXRCbSBwOmxhc3QnKS5hcHBlbmQoJyBTb3JyeSwgbm90IHN1cHBvcnRlZCBpbiBNU0lFIScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIE1VQi5hZGRCdXR0b25DbGljaygpOwogICAgICAgIH0KICAgICAgICAvLyBzZXR1cCBib29rbWFya2xldCAyCiAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgdXJsIDogJy4uLz9mPScgKyBsb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cL1teXC9dKiQvLCAnL2JtMi5qcycpLnN1YnN0cigxKSwKICAgICAgICAgICAgc3VjY2VzcyA6IGZ1bmN0aW9uIChjb2RlKSB7CiAgICAgICAgICAgICAgICAkKCcjYm0yJylbMF0uaHJlZiA9IGNvZGUucmVwbGFjZSgvXG4vZywgJyAnKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGF0YVR5cGUgOiAndGV4dCcKICAgICAgICB9KTsKICAgICAgICBNVUIuY2hlY2tSZXdyaXRlKCk7CiAgICB9Cn07CiQoTVVCLmluaXQpOwo=]]></data>
	</file>
</module>
