<?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>CodeMirror</name>
	<version>2.2.0</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[PHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLjxoMz5QYXJhbWV0cmU8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0cmV0IGFuZ2l2ZXIgaHZpbGtldCBzcHJvZyBkZXIgc2thbCBicnVnZXMgdGlsIHZpc25pbmcgZm9yIGJlcyZvc2xhc2g7Z2VuZGUuIElra2UgYWxsZSBtb2R1bGVyIHVuZGVyc3Qmb3NsYXNoO3R0ZXIgZWxsZXIgYmVoJm9zbGFzaDt2ZXIgZGV0dGUuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+TGF2ZXQgYWY6IE1vcnRlbiBQb3Vsc2VuICZsdDsmbHQ7bW9ydGVuQHBvdWxzZW4ub3JnJmd0OyZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAyLjIuMDxiciAvPjxiciAvPkhpc3RvcmlrIG92ZXIgJmFlbGlnO25kcmluZ2VyOjxiciAvPjx1bD4KICA8bGk+Mi4yLjAgLSBVcGRhdGVkIHRvIENNIDIuMTUsIGFkZGVkIG9wdGlvbmFsIGZ1bGxzY3JlZW4gbW9kZTwvbGk+CiAgPGxpPjIuMS4yIC0gVXBkYXRlZCB0byBDTSAyLjEyLCBjbGVhbmVyIHdheSBvZiBzYXZpbmcgZWRpdG9yIGNvbnRlbnQgdG8gdGV4dGFyZWE8L2xpPgogIDxsaT4yLjEuMCAtIFVwZGF0ZWQgdG8gQ00gMi4xLjEsIG9uY2UgYWdhaW4gY2hhbmdlIHRlc3Rtb2RlLi4uIDwvbGk+CiAgPGxpPjIuMC4xIC0gVXBkYXRlZCB0byBDTSAyLjAuMTwvbGk+CiAgPGxpPjIuMCAtIFVwZGF0ZWQgdG8gQ00gMi4wIGFuZCByZXdvcmtlZCBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgdG8gbWFrZSB0aGlzIHdvcms8L2xpPgogIDxsaT4wLjEuOSAtIFVwZGF0ZWQgdG8gQ00gMC45MzwvbGk+CiAgPGxpPjAuMS44IC0gVXBkYXRlZCB0byBDTSAwLjksIGFkZGVkIG9wdGlvbiBvbiBob3cgdG8gaGFuZGxlIFRBQjwvbGk+CiAgPGxpPjAuMS43IC0gVXBkYXRlZCB0byBDTSAwLjgwPC9saT4KICA8bGk+MC4xLjYgLSBVcGRhdGVkIHRvIENNIDAuNzAsIEFkZGVkIG9wdGlvbiB0byBtYXRjaCBwYXJlbnRoZXNpczwvbGk+CiAgPGxpPjAuMS41IC0gVXBkYXRlZCB0byBDTSAwLjY2LCByZW1vdmVkIGEgc3RyYW5nZSBcbiBjaGFyIGZyb20gaGVhZGVyb3V0cHV0LCBtYWRlIHRhYmJpbmcgd29yazwvbGk+CiAgPGxpPjAuMS40IC0gRml4ZWQgQ1BVIGhvZ2dpbmcgcHJvYmxlbXMgYnkgcmV3cml0aW5nIHRlc3RhcmVhLWNvZGU8L2xpPgogIDxsaT4wLjEuMyAtIFVwZGF0ZWQgdG8gQ00gMC42NSwgYWRkZWQgb3B0aW9uIHRvIHRvZ2dsZSB3b3Jkd3JhcDwvbGk+CiAgPGxpPjAuMS4yIC0gVXBkYXRlZCB0byBDTSAwLjYzPC9saT4KICA8bGk+MC4xLjEgLSBVcGRhdGVkIHRvIENNIDAuNjIsIGZpeGVkIGV4YW1wbGVzIGFuZCBwcm9iYWJseSBmdW5jdGlvbmFsaXR5IGFzIHdlbGw8L2xpPgogIDxsaT4wLjEuMCAtIEluaXRpYWwgcmVsZWFzZSA8L2xpPgo8L3VsPjxiciAvPg==]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbImV4YW1wbGVzeW50YXgiXSkpIHsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsJHBhcmFtc1siZXhhbXBsZXN5bnRheCJdKTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigic2V0dGluZ3MiLCR0aGlzLT5MYW5nKCJzZXR0aW5nc3RhYiIpKTsKLyplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImh0bWwiLCR0aGlzLT5MYW5nKCJodG1sdGVzdCIpKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCJwaHAiLCR0aGlzLT5MYW5nKCJwaHB0ZXN0IikpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImNzcyIsJHRoaXMtPkxhbmcoImNzc3Rlc3QiKSk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigianMiLCR0aGlzLT5MYW5nKCJqc3Rlc3QiKSk7CiovCmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgoKZWNobyAkdGhpcy0+U3RhcnRUYWIoInNldHRpbmdzIik7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlc2V0dGluZ3MnLCAkcmV0dXJuaWQpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc3RleHQnLCAkdGhpcy0+TGFuZygic2hvd2xpbmVudW1iZXJzIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCJzaG93bGluZW51bWJlcnMiLDEsJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSkpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVudGV4dCcsICR0aGlzLT5MYW5nKCJhbGxvd2Z1bGxzY3JlZW4iKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVuaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImFsbG93ZnVsbHNjcmVlbiIsMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYWxsb3dmdWxsc2NyZWVuIiwxKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnN0ZXh0JywgJHRoaXMtPkxhbmcoImNzc2FkZGl0aW9ucyIpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnNpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5fZGVmYXVsdGNzc2FkZGl0aW9ucyksIjYwIikpOwoKCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGhlbWV0ZXh0JywgJHRoaXMtPkxhbmcoInRoZW1lIikpOwokdGhlbWVzPWFycmF5KCdkZWZhdWx0Jz0+ImRlZmF1bHQiLCJlbGVnYW50Ij0+ImVsZWdhbnQiLCJuZWF0Ij0+Im5lYXQiLCJuaWdodCI9PiJuaWdodCIpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RoZW1laW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsInRoZW1lIiwkdGhlbWVzLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0aGVtZSIsImRlZmF1bHQiKSkpOwoKLyokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RleHR3cmFwcGluZ3RleHQnLCAkdGhpcy0+TGFuZygidGV4dHdyYXBwaW5nIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RleHR3cmFwcGluZ2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCJ0ZXh0d3JhcHBpbmciLDEsJHRoaXMtPkdldFByZWZlcmVuY2UoInRleHR3cmFwcGluZyIsMSkpKTsKKi8KLyokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2F1dG9tYXRjaHBhcmVuc3RleHQnLCAkdGhpcy0+TGFuZygiYXV0b21hdGNocGFyZW5zIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2F1dG9tYXRjaHBhcmVuc2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCJhdXRvbWF0Y2hwYXJlbnMiLCIxIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwiMCIpKSk7CiovCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGFiaGFuZGxpbmd0ZXh0JywgJHRoaXMtPkxhbmcoInRhYmhhbmRsaW5nIikpOwokdGFiZnVuY3Rpb25zPWFycmF5KAogICR0aGlzLT5MYW5nKCJ0YWJkZWZhdWx0Iik9PiJkZWZhdWx0IiwKICAkdGhpcy0+TGFuZygidGFiaW5kZW50Iik9PiJpbmRlbnQiLAogICR0aGlzLT5MYW5nKCJ0YWJzcGFjZXMiKT0+ImNsYXNzaWMiLAogICR0aGlzLT5MYW5nKCJ0YWJzaGlmdCIpPT4ic2hpZnQiCik7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGFiaGFuZGxpbmdpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwidGFiaGFuZGxpbmciLCR0YWJmdW5jdGlvbnMsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwiaW5kZW50IikpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdzYXZlc2V0dGluZ3MnKSkpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdzZXR0aW5ncy50cGwnKTsKCmVjaG8gJHRoaXMtPkVuZFRhYigpOwovKgplY2hvICR0aGlzLT5TdGFydFRhYigiaHRtbCIpOwoKJGNvbnRlbnQ9Igo8aHRtbD4KICA8aGVhZD4KICAgIDx0aXRsZT5UZXN0aW5nIGh0bWwtc3ludGF4PC90aXRsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICBBbmQgZG9pbmcgYWJzb2x1dGVseSBub3RoaW5nIGVsc2UKICA8L2JvZHk+CjwvaHRtbD4KIjsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwiZGVmYXVsdGFkbWluIik7CmVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkY29udGVudCwidGVzdGh0bWwiLCcnLCcnLCcnLCcnLCcnLCcnLCdDb2RlTWlycm9yJywiaHRtbCIpOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgplY2hvICR0aGlzLT5FbmRUYWIoKTsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJwaHAiKTsKJGNvbnRlbnQ9Igo8P3BocAogIGZ1bmN0aW9uIHRlc3RQSFAoXCRzb21lcGFyYW0pIHsKICBlY2hvICdEbyB5b3UgdGhpbmsgdGhpcyBsb29rcyBuaWNlPyc7Cn0KPz4KIjsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwiZGVmYXVsdGFkbWluIik7CmVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkY29udGVudCwidGVzdHBocCIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCJwaHAiKTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgplY2hvICR0aGlzLT5TdGFydFRhYigiY3NzIik7CiRjb250ZW50PSIKLnRlc3Rjc3MgewogIGZvbnQtd2VpZ2h0OmJvbGQ7CiAgaGVpZ2h0OiAxMHB4Owp9CiI7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsImRlZmF1bHRhZG1pbiIpOwplY2hvICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGNvbnRlbnQsInRlc3Rjc3MiLCcnLCcnLCcnLCcnLCcnLCcnLCdDb2RlTWlycm9yJywiY3NzIik7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgoKZWNobyAkdGhpcy0+U3RhcnRUYWIoImpzIik7CiAgICAkY29udGVudD0nCmZ1bmN0aW9uIG15anNmdW5jdGlvbihwYXJhbXMpIHsKICB2YXIgbXNnID0gIlRoaXMgamF2YXNjcmlwdCBpcyBmYW50YXN0aWMhIgogIGZvciAodmFyIGk9MDsgaTw5OTk5OyBpKyspIHsKICAgIGFsZXJ0KG1zZyk7CiAgICAvKlRoaXMgbXVzdCBiZSB0aGUgbW9zdCBhbm5veWluZyBmdW5jdGlvbiBldmVyISovCiAvKiB9CiAgcmV0dXJuIHRydWUKfQonOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKTsKZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRjb250ZW50LCJ0ZXN0anMiLCcnLCcnLCcnLCcnLCcnLCcnLCdDb2RlTWlycm9yJywianMiKTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKKi8KCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKCiRjb250ZW50PSIiOwpzd2l0Y2ggKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJleGFtcGxlc3ludGF4IiwiaHRtbCIpKSB7CiAgY2FzZSAiaHRtbCIgOiB7CiAgICAkY29udGVudD0iCjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlRlc3RpbmcgaHRtbC1zeW50YXg8L3RpdGxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIEFuZCBkb2luZyBhYnNvbHV0ZWx5IG5vdGhpbmcgZWxzZQogIDwvYm9keT4KPC9odG1sPgoiOwogIGJyZWFrOwogIH0KICBjYXNlICJjc3MiIDogewogICAgJGNvbnRlbnQ9IgoudGVzdGNzcyB7CiAgZm9udC13ZWlnaHQ6Ym9sZDsKICBoZWlnaHQ6IDEwcHg7Cn0KIjsKICBicmVhazsKICB9CiAgY2FzZSAicGhwIiA6IHsKICAgICRjb250ZW50PSIKPD9waHAKICBmdW5jdGlvbiB0ZXN0UEhQKFwkc29tZXBhcmFtKSB7CiAgICBlY2hvICdEbyB5b3UgdGhpbmsgdGhpcyBsb29rcyBuaWNlPyc7CiAgfQo/PgoiOwogIGJyZWFrOwogIH0KICBjYXNlICJqcyIgOiB7CiAgICAkY29udGVudD0nCmZ1bmN0aW9uIG15anNmdW50aW9uKHBhcmFtcykgewogIHZhciBtc2cgPSAiVGhpcyBqYXZhc2NyaXB0IGlzIGZhbnRhc3RpYyEiCiAgZm9yICh2YXIgaT0wOyBpPDk5OTk7IGkrKykgewogICAgYWxlcnQobXNnKTsKCiAgfQogIHJldHVybiB0cnVlCn0KJzsKICBicmVhazsKICB9Cn0KCmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsImRlZmF1bHRhZG1pbiIpOwplY2hvICR0aGlzLT5MYW5nKCJleGFtcGxlc3ludGF4IikuIjogIjsKJHN5bnRheGVzPWFycmF5KCR0aGlzLT5MYW5nKCJodG1sdGVzdCIpPT4iaHRtbCIsJHRoaXMtPkxhbmcoImNzc3Rlc3QiKT0+ImNzcyIsJHRoaXMtPkxhbmcoInBocHRlc3QiKT0+InBocCIsJHRoaXMtPkxhbmcoImpzdGVzdCIpPT4ianMiKTsKZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsImV4YW1wbGVzeW50YXgiLCRzeW50YXhlcywtMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsImh0bWwiKSwib25jaGFuZ2U9J3RoaXMuZm9ybS5zdWJtaXQoKSciKTsKLy9lY2hvICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsImV4YW1wbGVzdWJtaXQiLCR0aGlzLT5MYW5nKCJjaGFuZ2UiKSk7CmVjaG8gIjxici8+IjsKZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRjb250ZW50LCJ0ZXN0YXJlYTEiLCcnLCcnLCcnLCcnLCcnLCcnLCdDb2RlTWlycm9yJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsImh0bWwiKSk7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYoaXNzZXQoJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pKSAKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwgJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pOwplbHNlCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsICcwJyk7CgppZihpc3NldCgkcGFyYW1zWyJhbGxvd2Z1bGxzY3JlZW4iXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsICRwYXJhbXNbImFsbG93ZnVsbHNjcmVlbiJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhbGxvd2Z1bGxzY3JlZW4iLCAnMCcpOwoKLyppZihpc3NldCgkcGFyYW1zWyJ0ZXh0d3JhcHBpbmciXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRleHR3cmFwcGluZyIsICRwYXJhbXNbInRleHR3cmFwcGluZyJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCAnMCcpOyovCiAgCi8qaWYoaXNzZXQoJHBhcmFtc1siYXV0b21hdGNocGFyZW5zIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhdXRvbWF0Y2hwYXJlbnMiLCAkcGFyYW1zWyJhdXRvbWF0Y2hwYXJlbnMiXSk7CmVsc2UKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwgJzAnKTsqLwoKaWYoaXNzZXQoJHBhcmFtc1sidGFiaGFuZGxpbmciXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwgJHBhcmFtc1sidGFiaGFuZGxpbmciXSk7CgppZihpc3NldCgkcGFyYW1zWyJjc3NhZGRpdGlvbnMiXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImNzc2FkZGl0aW9ucyIsICRwYXJhbXNbImNzc2FkZGl0aW9ucyJdKTsKCmlmKGlzc2V0KCRwYXJhbXNbInRoZW1lIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0aGVtZSIsICRwYXJhbXNbInRoZW1lIl0pOwoKCiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsYXJyYXkoIm1vZHVsZV9tZXNzYWdlIj0+JHRoaXMtPkxhbmcoInNldHRpbmdzc2F2ZWQiKSwidGFiIj0+InNldHRpbmdzIikpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/CodeMirror.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiNDTVMgLSBDTVMgTWFkZSBTaW1wbGUNCiMoYykyMDA1LTA2IGJ5IE1vcnRlbiBQb3Vsc2VuIChtb3J0ZW5AcG91bHNlbi5vcmcpDQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMNCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KI2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KI1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KI0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiNhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KI0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCg0KDQpjbGFzcyBDb2RlTWlycm9yIGV4dGVuZHMgQ01TTW9kdWxlIHsNCgl2YXIgJG5vZWRpdG9ycz0wOw0KCXZhciAkaGVhZGVyaW5mb3NlbnQ9ZmFsc2U7DQogIHZhciAkX2h0bWxhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfamF2YXNjcmlwdGFjdGl2ZSA9IGZhbHNlOw0KICB2YXIgJF9jc3NhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfcGhwYWN0aXZlID0gZmFsc2U7DQogIHZhciAkX2RlZmF1bHRjc3NhZGRpdGlvbnMgPSAiLkNvZGVNaXJyb3Ige2xpbmUtaGVpZ2h0OiAxLjNlbTsgZm9udC1zaXplOjExcHh9IjsNCg0KCWZ1bmN0aW9uIEdldE5hbWUoKSB7DQoJCXJldHVybiAnQ29kZU1pcnJvcic7DQoJfQ0KDQoJZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglmdW5jdGlvbiBIYXNBZG1pbigpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0SGVscCgpIHsNCgkJcmV0dXJuICR0aGlzLT5MYW5nKCJoZWxwIik7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0QXV0aG9yKCkgew0KCQlyZXR1cm4gJ01vcnRlbiBQb3Vsc2VuJzsNCgl9DQoNCglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsNCgkJcmV0dXJuICcmbHQ7bW9ydGVuQHBvdWxzZW4ub3JnJmd0Oyc7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgew0KCQlyZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnY2hhbmdlbG9nLnRwbCcpOw0KCX0NCg0KCWZ1bmN0aW9uIEdldFZlcnNpb24oKSB7DQoJCXJldHVybiAnMi4yLjAnOw0KCX0NCgkNCglmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsNCgkJcmV0dXJuICIxLjkiOw0KCX0NCg0KICBmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zPWFycmF5KCkpIHsNCiAgICBpZiAoJGNhcGFiaWxpdHk9PSJ3eXNpd3lnIikgcmV0dXJuIHRydWU7DQogICAgaWYgKCRjYXBhYmlsaXR5PT0ic3ludGF4aGlnaGxpZ2h0aW5nIikgcmV0dXJuIHRydWU7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQoNCglmdW5jdGlvbiBJc1dZU0lXWUcoKSB7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCWZ1bmN0aW9uIElzU3ludGF4SGlnaGxpZ2h0ZXIoKSB7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCWZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHsNCgkJcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyk7DQoJfQ0KDQoJZnVuY3Rpb24gU3ludGF4UGFnZUZvcm1TdWJtaXQoKSB7DQoJCXJldHVybiAiZm9yICh2YXIgY250RWRpdG9yID0gMDsgY250RWRpdG9yIDwgbnVtQ29kZU1pcnJvckFyZWFzOyBjbnRFZGl0b3IrKykge1xuIg0KCQkuICJcdFx0dmFyIGVkaXRvciA9IGV2YWwoJ2NvZGVtaXJyb3JlZGl0b3InICsgY250RWRpdG9yKTtcbiINCiAgICAuIlx0XHRlZGl0b3Iuc2F2ZSgpIg0KICAgIC8qLiAiXHRcdHZhciB0ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2RlbWlycm9yYXJlYScgKyBjbnRFZGl0b3IpO1xuIg0KICAgICAgLy8uImFsZXJ0KGVkaXRvci5nZXRDb2RlKCkpOyINCgkJLy8uICJcdFx0ZWRpdG9yLnRleHRhcmVhLnZhbHVlID0gZWRpdG9yLmdldENvZGUoKTtcbiINCiAgICAgIC4gIlx0XHR0ZXh0YXJlYS52YWx1ZSA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuIiovDQoJCS4gIlx0fVxuIjsNCgl9DQoJDQoJZnVuY3Rpb24gV1lTSVdZR1BhZ2VGb3JtU3VibWl0KCkgew0KCQlyZXR1cm4gJHRoaXMtPlN5bnRheFBhZ2VGb3JtU3VibWl0KCk7DQoJfQ0KDQoJZnVuY3Rpb24gV1lTSVdZR1RleHRBcmVhKCRuYW1lPSd0ZXh0YXJlYScsJGNvbHVtbnM9JzgwJywkcm93cz0nMTUnLCRlbmNvZGluZz0nJywkY29udGVudD0nJywkc3R5bGVzaGVldD0nJywkYWRkdGV4dD0nJykgew0KCQkkdGhpcy0+d3lzaXd5Z2FjdGl2ZT10cnVlOw0KCQlyZXR1cm4gJHRoaXMtPlN5bnRheFRleHRhcmVhKCRuYW1lLCJodG1sIiwkY29sdW1ucywkcm93cywkZW5jb2RpbmcsJGNvbnRlbnQpOw0KCX0NCg0KCWZ1bmN0aW9uIFN5bnRheFRleHRhcmVhKCRuYW1lPSd0ZXh0YXJlYScsJHN5bnRheD0iaHRtbCIsJGNvbHVtbnM9JzgwJywkcm93cz0nMTUnLCRlbmNvZGluZz0nJywkY29udGVudD0nJywkc3R5bGVzaGVldD0nJywkYWRkdGV4dD0nJykgew0KCQkkdGV4dGFyZWE9IiI7DQoJCSR0aGlzLT5zeW50YXhhY3RpdmU9dHJ1ZTsJDQoJCS8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ1c2VhdXRvY29tcGxldGUiLCIxIik9PSIwIikgJGNsYXNzLj0iIGF1dG9jb21wbGV0ZS1vZmYiOw0KCQlpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsIjEiKT09IjAiKSAkY2xhc3MuPSIgbGluZW51bWJlcnMtb2ZmIjsNCgkJKi8NCiAgICAgIC8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzaG93dG9nZ2xlc3ludGF4IiwiMSIpPT0iMSIpIHsNCiAgICAgDQoJCQkkdGV4dGFyZWEuPSI8YnIvPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgY2hlY2tlZD0nMScgb25jbGljaz0nY29kZXByZXNzIi4kdGhpcy0+bm9lZGl0b3JzLiIudG9nZ2xlRWRpdG9yKCk7JyBjaGVja2VkPSdjaGVja2VkJyBpZD0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+PGxhYmVsIGZvcj0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+Ii4kdGhpcy0+TGFuZygidG9nZ2xlc3ludGF4IikuIjwvbGFiZWw+IjsNCgkJfSovDQogICAgJHNtYXJ0eT0kdGhpcy0+c21hcnR5Ow0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwiMSIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdsaW5lbnVtYmVycycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbignbGluZW51bWJlcnMnLCAiZmFsc2UiKTsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCIxIik9PSIxIil7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ3RleHR3cmFwcGluZycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5nJywgImZhbHNlIik7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwiMCIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnMnLCAidHJ1ZSIpOw0KICAgIH0gZWxzZSB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ2F1dG9tYXRjaHBhcmVucycsICJmYWxzZSIpOw0KICAgIH0NCg0KICAgICR0aGVtZT0kdGhpcy0+R2V0UHJlZmVyZW5jZSgidGhlbWUiLCJkZWZhdWx0Iik7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0aGVtZScsICR0aGVtZSk7DQoNCiAgICAvL2xpbmVOdW1iZXJzOiB0cnVlLA0KICAgIC8vJGNvbmZpZz0kdGhpcy0+R2V0Q29uZmlnKCk7DQogICAgJGNvbmZpZz1jbXNtcygpLT5HZXRDb25maWcoKTsNCg0KICAgICRzbWFydHktPmFzc2lnbigndGV4dGFyZWFpZCcsICJjb2RlbWlycm9yYXJlYSIuJHRoaXMtPm5vZWRpdG9ycyk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0ZXh0YXJlYW5hbWUnLCAkbmFtZSk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCdjb250ZW50JywgJGNvbnRlbnQpOw0KICAgICRzbWFydHktPmFzc2lnbignaWQnLCAkdGhpcy0+bm9lZGl0b3JzKTsNCiAgICAvLyRwYXJzZXJmaWxlPSIiOyAkY3NzZmlsZT0iIjsNCiAgICAvKiRjbWRpcj0kY29uZmlnWyJyb290X3VybCJdLicvbW9kdWxlcy9Db2RlTWlycm9yL2NvZGVtaXJyb3InOw0KICAgIHN3aXRjaCgkc3ludGF4KSB7DQogICAgICANCiAgICAgIGNhc2UgImh0bWwiIDogDQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2V4bWwuanMiJzsgDQogICAgICAgICRjc3NmaWxlPSciJy4kY21kaXIuJy9tb2RlL3htbC94bWwuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiY3NzIiA6DQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2Vjc3MuanMiJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9jc3MuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiamF2YXNjcmlwdCIgOg0KICAgICAgY2FzZSAianMiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyJdJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiJzsNCiAgICAgICAgYnJlYWs7DQogICAgICBjYXNlICJwaHAiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sicGFyc2V4bWwuanMiLCAicGFyc2Vjc3MuanMiLCAidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyIsICJwYXJzZWh0bWxtaXhlZC5qcyIsIi4uL2NvbnRyaWIvcGhwL2pzL3Rva2VuaXplcGhwLmpzIiwgIi4uL2NvbnRyaWIvcGhwL2pzL3BhcnNlcGhwLmpzIiwgICAgICAgICAgICAgICAgICAgICAiLi4vY29udHJpYi9waHAvanMvcGFyc2VwaHBodG1sbWl4ZWQuanMiXSc7DQogICAgICAgICRjc3NmaWxlPSdbIicuJGNtZGlyLicvY3NzL3htbGNvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9jc3Njb2xvcnMuY3NzIiwiJy4kY21kaXIuJy9jb250cmliL3BocC9jc3MvcGhwY29sb3JzLmNzcyJdJzsNCiAgICAgICAgYnJlYWs7DQogICAgfSovDQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhcnNlcmZpbGUnLCAkcGFyc2VyZmlsZSk7DQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Nzc2ZpbGUnLCAkY3NzZmlsZSk7DQoNCiAgICAkc21hcnR5LT5hc3NpZ24oJ3RhYmhhbmRsaW5nJywgJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwiaW5kZW50IikpOw0KICAgICRzbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVuJywgJHRoaXMtPkdldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsIjAiKSk7DQogICAgDQogICAgJHNtYXJ0eS0+YXNzaWduKCdyb290X3VybCcsICRjb25maWdbInJvb3RfdXJsIl0pOw0KDQogICAgc3dpdGNoICgkc3ludGF4KSB7DQogICAgICBjYXNlICJodG1sIiA6ICRzbWFydHktPmFzc2lnbignbW9kZScsICJ0ZXh0L2h0bWwiKTsgJHRoaXMtPl9odG1sYWN0aXZlPXRydWU7IGJyZWFrOw0KICAgICAgY2FzZSAianMiOg0KICAgICAgY2FzZSAiamF2YXNjcmlwdCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAiamF2YXNjcmlwdCIpOyR0aGlzLT5famF2YXNjcmlwdGFjdGl2ZT10cnVlOyAgYnJlYWs7DQogICAgICBjYXNlICJjc3MiIDogJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywgImNzcyIpOyAkdGhpcy0+X2Nzc2FjdGl2ZT10cnVlOyBicmVhazsNCiAgICAgIGNhc2UgInBocCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAicGhwIik7ICR0aGlzLT5fcGhwYWN0aXZlPXRydWU7IGJyZWFrOw0KICAgIH0NCg0KDQogICAgJHRleHRhcmVhPSR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2NvZGVtaXJyb3IyYXJlYS50cGwnKTsNCg0KCQkkdGhpcy0+bm9lZGl0b3JzKys7DQoNCgkJcmV0dXJuICR0ZXh0YXJlYTsNCgl9DQoNCglmdW5jdGlvbiBXWVNJV1lHR2VuZXJhdGVIZWFkZXIoJGh0bWxyZXN1bHQ9JycpIHsNCgkJcmV0dXJuICR0aGlzLT5TeW50YXhHZW5lcmF0ZUhlYWRlcigpOw0KCX0NCg0KCWZ1bmN0aW9uIFN5bnRheEdlbmVyYXRlSGVhZGVyKCRodG1scmVzdWx0PScnKSB7DQoJCWlmICgkdGhpcy0+aGVhZGVyaW5mb3NlbnQpIHJldHVybiAiIjsNCgkJaWYgKCR0aGlzLT5ub2VkaXRvcnM9PTApIHJldHVybiAnJzsNCgkJLy8kR0xPQkFMU1siY29uZmlnIl1bInJvb3RfcGF0aCJdLg0KICAgICRjb25maWc9Y21zbXMoKS0+R2V0Q29uZmlnKCk7DQogICAgJGFscmVhZHlpbj1hcnJheSgpOw0KDQogICAgJHRoZW1lPSR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0aGVtZSIsImRlZmF1bHQiKTsNCg0KCQkkc2NyaXB0cGF0aD0kY29uZmlnWyJyb290X3VybCJdLiIvbW9kdWxlcy9Db2RlTWlycm9yL2NvZGVtaXJyb3IyIjsNCgkJJGhlYWRlcj0iIjsNCiAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL2xpYi9jb2RlbWlycm9yLmNzcyIvPic7DQoJCSRoZWFkZXIuPScNCgkgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0Pic7DQogICAgaWYgKCR0aGVtZSE9ImRlZmF1bHQiKSAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL3RoZW1lL2RlZmF1bHQuY3NzIi8+JzsNCg0KICAgICRoZWFkZXIuPScNCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRzY3JpcHRwYXRoLicvdGhlbWUvJy4kdGhlbWUuJy5jc3MiLz4nOw0KICAgIA0KICAgIGlmICgkdGhpcy0+X2h0bWxhY3RpdmUpIHsNCg0KICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2Nzcy9jc3MuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109ImNzcy5qcyI7DQogICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4nOw0KICAgICAgJGFscmVhZHlpbltdPSJqYXZhc2NyaXB0LmpzIjsNCiAgICAgICRoZWFkZXIuPScNCiAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4nOw0KICAgICAgJGFscmVhZHlpbltdPSJ4bWwuanMiOw0KICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109Imh0bWxtaXhlZC5qcyI7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+X2phdmFzY3JpcHRhY3RpdmUpIHsNCiAgICAgIGlmICghaW5fYXJyYXkoImphdmFzY3JpcHQuanMiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iamF2YXNjcmlwdC5qcyI7DQogICAgICB9DQogICAgICAgICAgICANCg0KICAgIH0NCiAgICBpZiAoJHRoaXMtPl9jc3NhY3RpdmUpIHsNCiAgICAgIGlmICghaW5fYXJyYXkoImNzcy5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2Nzcy9jc3MuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iY3NzLmpzIjsNCiAgICAgIH0NCg0KICAgIH0NCiAgICBpZiAoJHRoaXMtPl9waHBhY3RpdmUpIHsNCiAgICAgIGlmICghaW5fYXJyYXkoImNzcy5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJjc3MuanMiOw0KICAgICAgfQ0KICAgICAgaWYgKCFpbl9hcnJheSgiamF2YXNjcmlwdC5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4nOw0KICAgICAgICAkYWxyZWFkeWluW109ImphdmFzY3JpcHQuanMiOw0KICAgICAgfQ0KICAgICAgaWYgKCFpbl9hcnJheSgieG1sLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4nOw0KICAgICAgICAkYWxyZWFkeWluW109InhtbC5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJjbGlrZS5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY2xpa2UvY2xpa2UuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iY2xpa2UuanMiOw0KICAgICAgfQ0KICAgICAgaWYgKCFpbl9hcnJheSgiY2xpa2UuY3NzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy9tb2RlL2NsaWtlL2NsaWtlLmNzcyIgLz4nOw0KICAgICAgICAkYWxyZWFkeWluW109ImNsaWtlLmNzcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJwaHAuanMiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL3BocC9waHAuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0icGhwLmpzIjsNCiAgICAgIH0NCiAgICB9DQogICAgaWYgKCR0aGVtZSE9ImRlZmF1bHQiKSB7DQogICAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL3RoZW1lL2RlZmF1bHQuY3NzIi8+JzsNCiAgICB9DQogICAgJGhlYWRlci49Jw0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy90aGVtZS8nLiR0aGVtZS4nLmNzcyIvPic7DQogICAgJGhlYWRlci49Jw0KDQo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICB2YXIgbnVtQ29kZU1pcnJvckFyZWFzPScuJHRoaXMtPm5vZWRpdG9ycy4nOw0KPC9zY3JpcHQ+DQoNCic7DQoNCiAgICAkaGVhZGVyLj0nDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAnLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5fZGVmYXVsdGNzc2FkZGl0aW9ucykuJw0KPC9zdHlsZT4NCiAgICAnOw0KDQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJhbGxvd2Z1bGxzY3JlZW4iLDApPT0iMSIpIHsNCiAgICAkYmdjb2xvcj0id2hpdGUiOw0KICAgIGlmICgkdGhlbWU9PSJuaWdodCIpICRiZ2NvbG9yPSJibGFjayI7DQogICAgICAkaGVhZGVyLj0nDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgLmZ1bGxzY3JlZW4gew0KICAgICAgICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICAgICAgICB0b3A6IDA7DQogICAgICAgICAgICAgICAgICBsZWZ0OiAwOw0KICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgICAgICAgICAgICB6LWluZGV4OiA5OTk5Ow0KICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwOw0KICAgICAgICAgICAgICAgICAgcGFkZGluZzogMDsNCiAgICAgICAgICAgICAgICAgIGJvcmRlcjogMHB4IHNvbGlkICNCQkJCQkI7DQogICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOw0KICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjonLiRiZ2NvbG9yLic7DQogICAgICAgICAgICAgIH0NCjwvc3R5bGU+DQo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICBmdW5jdGlvbiB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZygpDQogICAgICB7DQogICAgICAgICAgdmFyIGVkaXRvckRpdiA9ICQoIi5Db2RlTWlycm9yLXNjcm9sbCIpOw0KICAgICAgICAgIGlmICghZWRpdG9yRGl2Lmhhc0NsYXNzKCJmdWxsc2NyZWVuIikpIHsNCiAgICAgICAgICAgICAgdG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcuYmVmb3JlRnVsbHNjcmVlbiA9IHsgaGVpZ2h0OiBlZGl0b3JEaXYuaGVpZ2h0KCksIHdpZHRoOiBlZGl0b3JEaXYud2lkdGgoKSB9DQogICAgICAgICAgICAgIGVkaXRvckRpdi5hZGRDbGFzcygiZnVsbHNjcmVlbiIpOw0KICAgICAgICAgICAgICBlZGl0b3JEaXYuaGVpZ2h0KCIxMDAlIik7DQogICAgICAgICAgICAgIGVkaXRvckRpdi53aWR0aCgiMTAwJSIpOw0KICAgICAgICAgICAgICBlZGl0b3IucmVmcmVzaCgpOw0KICAgICAgICAgIH0NCiAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgZWRpdG9yRGl2LnJlbW92ZUNsYXNzKCJmdWxsc2NyZWVuIik7DQogICAgICAgICAgICAgIGVkaXRvckRpdi5oZWlnaHQodG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcuYmVmb3JlRnVsbHNjcmVlbi5oZWlnaHQpOw0KICAgICAgICAgICAgICBlZGl0b3JEaXYud2lkdGgodG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcuYmVmb3JlRnVsbHNjcmVlbi53aWR0aCk7DQogICAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7DQogICAgICAgICAgfQ0KICAgICAgfQ0KICANCjwvc2NyaXB0Pg0KDQogICAgICAnOw0KICAgIH0NCg0KDQoNCgkJJHRoaXMtPmhlYWRlcmluZm9zZW50PXRydWU7DQoJCXJldHVybiAkaGVhZGVyOw0KCX0NCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/compress.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvbXByZXNzaW9uIEhlbHBlcjwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iY3NzL2RvY3MuY3NzIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPgogIDwvaGVhZD4KICA8Ym9keT4KCjxoMT48c3BhbiBjbGFzcz0ibG9nby1icmFjZXMiPnsgfTwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+Q29kZU1pcnJvcjwvYT48L2gxPgoKPHByZSBjbGFzcz0iZ3JleSI+CjxpbWcgc3JjPSJjc3MvYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIFNjcmlwdCBjb21wcmVzc2lvbgogICBoZWxwZXIgKi8KPC9wcmU+CgogICAgPHA+VG8gb3B0aW1pemUgbG9hZGluZyBDb2RlTWlycm9yLCBlc3BlY2lhbGx5IHdoZW4gaW5jbHVkaW5nIGEKICAgIGJ1bmNoIG9mIGRpZmZlcmVudCBtb2RlcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tYmluZSBhbmQKICAgIG1pbmlmeSAoYW5kIHByZWZlcmFibHkgYWxzbyBnemlwKSB0aGUgc2NyaXB0cy4gVGhpcyBwYWdlIG1ha2VzCiAgICB0aG9zZSBmaXJzdCB0d28gc3RlcHMgdmVyeSBlYXN5LiBTaW1wbHkgc2VsZWN0IHRoZSB2ZXJzaW9uIGFuZAogICAgc2NyaXB0cyB5b3UgbmVlZCBpbiB0aGUgZm9ybSBiZWxvdywgYW5kCiAgICBjbGljayA8c3Ryb25nPkNvbXByZXNzPC9zdHJvbmc+IHRvIGRvd25sb2FkIHRoZSBtaW5pZmllZCBzY3JpcHQKICAgIGZpbGUuPC9wPgoKICAgIDxmb3JtIGlkPSJmb3JtIiBhY3Rpb249Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvdWdsaWZ5anMiIG1ldGhvZD0icG9zdCI+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJkb3dubG9hZCIgbmFtZT0iZG93bmxvYWQiIHZhbHVlPSJjb2RlbWlycm9yLWNvbXByZXNzZWQuanMiLz4KICAgICAgPHA+VmVyc2lvbjogPHNlbGVjdCBpZD0idmVyc2lvbiIgb25jaGFuZ2U9InNldFZlcnNpb24odGhpcyk7IiBzdHlsZT0icGFkZGluZzogMXB4Ij4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5IRUFEPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjE1O2Y9Ij4yLjE1PC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjEzO2Y9Ij4yLjEzPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjEyO2Y9Ij4yLjEyPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjExO2Y9Ij4yLjExPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjE7Zj0iPjIuMTwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4wMjtmPSI+Mi4wMjwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4wMTtmPSI+Mi4wMTwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4wO2Y9Ij4yLjA8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9YmV0YTI7Zj0iPmJldGEyPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPWJldGExO2Y9Ij5iZXRhMTwvb3B0aW9uPgogICAgICA8L3NlbGVjdD48L3A+CgogICAgICA8c2VsZWN0IG11bHRpcGxlPSJtdWx0aXBsZSIgbmFtZT0iY29kZV91cmwiIHN0eWxlPSJ3aWR0aDogNDBlbTsiIGNsYXNzPSJmaWVsZCIgaWQ9ImZpbGVzIj4KICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9IkNvZGVNaXJyb3IgTGlicmFyeSI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL2NvZGVtaXJyb3IuanMiIHNlbGVjdGVkPmNvZGVtaXJyb3IuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvb3ZlcmxheS5qcyI+b3ZlcmxheS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi9ydW5tb2RlLmpzIj5ydW5tb2RlLmpzPC9vcHRpb24+CiAgICAgICAgPC9vcHRncm91cD4KICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9Ik1vZGVzIj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2NsaWtlL2NsaWtlLmpzIj5jbGlrZS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvY2xvanVyZS9jbG9qdXJlLmpzIj5jbG9qdXJlLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9jb2ZmZWVzY3JpcHQvY29mZmVlc2NyaXB0LmpzIj5jb2ZmZWVzY3JpcHQuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2Nzcy9jc3MuanMiPmNzcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvZGlmZi9kaWZmLmpzIj5kaWZmLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9oYXNrZWxsL2hhc2tlbGwuanMiPmhhc2tlbGwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPmh0bWxtaXhlZC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj5qYXZhc2NyaXB0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9qaW5qYTIvamluamEyLmpzIj5qaW5qYTIuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2x1YS9sdWEuanMiPmx1YS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvbWFya2Rvd24vbWFya2Rvd24uanMiPm1hcmtkb3duLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9udHJpcGxlcy9udHJpcGxlcy5qcyI+bnRyaXBsZXMuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3Bhc2NhbC9wYXNjYWwuanMiPnBhc2NhbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcGhwL3BocC5qcyI+cGhwLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9wbHNxbC9wbHNxbC5qcyI+cGxzcWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3B5dGhvbi9weXRob24uanMiPnB5dGhvbi5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvci9yLmpzIj5yLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9yc3QvcnN0LmpzIj5yc3QuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3J1YnkvcnVieS5qcyI+cnVieS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvc2NoZW1lL3NjaGVtZS5qcyI+c2NoZW1lLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9zbWFsbHRhbGsvc21hbGx0YWxrLmpzIj5zbWFsbHRhbGsuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3NwYXJxbC9zcGFycWwuanMiPnNwYXJxbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvc3RleC9zdGV4LmpzIj5zdGV4LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS92ZWxvY2l0eS92ZWxvY2l0eS5qcyI+dmVsb2NpdHkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3htbC94bWwuanMiPnhtbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUveWFtbC95YW1sLmpzIj55YW1sLmpzPC9vcHRpb24+CiAgICAgICAgPC9vcHRncm91cD4KICAgICAgPC9zZWxlY3Q+PC9wPgoKICAgICAgPHA+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPkNvbXByZXNzPC9idXR0b24+IHdpdGggPGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vbWlzaG9vL1VnbGlmeUpTLyI+VWdsaWZ5SlM8L2E+CiAgICAgIDwvcD4KCiAgICAgIDxwPkN1c3RvbSBjb2RlIHRvIGFkZCB0byB0aGUgY29tcHJlc3NlZCBmaWxlOjx0ZXh0YXJlYSBuYW1lPSJqc19jb2RlIiBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogMTVlbTsiIGNsYXNzPSJmaWVsZCI+PC90ZXh0YXJlYT48L3A+CiAgICA8L2Zvcm0+CgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICBmdW5jdGlvbiBzZXRWZXJzaW9uKHZlcikgewogICAgICAgIHZhciB1cmxwcmVmaXggPSB2ZXIub3B0aW9uc1t2ZXIuc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlcyIpLCBtOwogICAgICAgIGZvciAodmFyIG9wdGdyID0gc2VsZWN0LmZpcnN0Q2hpbGQ7IG9wdGdyOyBvcHRnciA9IG9wdGdyLm5leHRTaWJsaW5nKQogICAgICAgICAgZm9yICh2YXIgb3B0ID0gb3B0Z3IuZmlyc3RDaGlsZDsgb3B0OyBvcHQgPSBvcHQubmV4dFNpYmxpbmcpIHsKICAgICAgICAgICAgaWYgKG9wdC5ub2RlTmFtZSAhPSAiT1BUSU9OIikKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgZWxzZSBpZiAobSA9IG9wdC52YWx1ZS5tYXRjaCgvXmh0dHA6XC9cL2NvZGVtaXJyb3IubmV0XC8yXC8oLiopJC8pKQogICAgICAgICAgICAgIG9wdC52YWx1ZSA9IHVybHByZWZpeCArIG1bMV07CiAgICAgICAgICAgIGVsc2UgaWYgKG0gPSBvcHQudmFsdWUubWF0Y2goL2h0dHA6XC9cL21hcmlqbmhhdmVyYmVrZS5ubFwvZ2l0XC9jb2RlbWlycm9yXD9hPWJsb2JfcGxhaW47aGI9W147XSs7Zj0oLiopJC8pKQogICAgICAgICAgICAgIG9wdC52YWx1ZSA9IHVybHByZWZpeCArIG1bMV07CiAgICAgICAgICB9CiAgICAgICB9CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/css/baboon.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/codemirror2/css/baboon_vector.svg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICBpZD0ic3ZnMzE4MSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjAgcjk2NTQiCiAgIHdpZHRoPSIxNzUwIgogICBoZWlnaHQ9Ijk2MCIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iYmFib29uX3ZlY3Rvci5zdmciPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTMxODciPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzMTg1Ij48Y2xpcFBhdGgKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImNsaXBQYXRoMzE5NSI+PHBhdGgKICAgICAgICAgZD0iTSAwLDc2OCAxNDAwLDc2OCAxNDAwLDAgMCwwIDAsNzY4IHoiCiAgICAgICAgIGlkPSJwYXRoMzE5NyIgLz48L2NsaXBQYXRoPjxjbGlwUGF0aAogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0iY2xpcFBhdGgzMjE1Ij48cGF0aAogICAgICAgICBkPSJNIDAsNzY4IDE0MDAsNzY4IDE0MDAsMCAwLDAgMCw3NjggeiIKICAgICAgICAgaWQ9InBhdGgzMjE3IiAvPjwvY2xpcFBhdGg+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTQ0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NTEiCiAgICAgaWQ9Im5hbWVkdmlldzMxODMiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuMjA1NTAyOTEiCiAgICAgaW5rc2NhcGU6Y3g9IjE1MzQuMTY2NyIKICAgICBpbmtzY2FwZTpjeT0iNzk1Ljc4MTU2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzMxODkiIC8+PGcKICAgICBpZD0iZzMxODkiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpbmtzY2FwZTpsYWJlbD0iYmFib29uX3ZlY3RvciIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwwLDk2MCkiPjxnCiAgICAgICBpZD0iZzMxOTEiPjxnCiAgICAgICAgIGlkPSJnMzE5MyIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzE5NSkiPjxnCiAgICAgICAgICAgaWQ9ImczMTk5IgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1OC45NTYxLDU2OS45Njc4KSI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMCwwIDU5LjgzNSw2OS4zNTUgODcuMDM0LDI2LjUxOCAxMzMuOTQ5LC03LjQ3OSBjIDAsMCA3NC4xMTYsLTMyLjYzOSA3NC43OTUsLTM0LjY3OCAwLjY4LC0yLjA0IDg0LjMxNCwtNTkuMTU1IDg0LjMxNCwtNTkuMTU1IGwgMTIuMjM4LC03NC43OTUgNS40MzksLTk3LjkxMiAtMTMuNTk4LC0yNS4xNTkgLTQuNzYsLTQwLjc5NyAtMTguMzU4LC0yMy4xMTggMjQuMzksLTUuNTYxIDAuNTAxLC01LjE5MiAtMTQuMDEyLC02MC42NDEgMTYuNDc3LC05My4zNjggNy4yMjMsLTQ5Ljk3MiAtMjA4LjI5NSwtNTEuNzU0IC0xOC41NTIsNC4wMDUgLTM3LjQ2OCw4LjMyNSAtMTAuMDM2LDQuMDM2IC02Ni44ODUsMTAuMTAxIGMgMCwwIC0xNC45NTksNzQuNzkzIC0xNi45OTksNzMuNDMzIC0yLjAzOSwtMS4zNTkgLTQyLjgzNiw1Ni40MzcgLTQyLjgzNiw1Ni40MzcgbCAtMTkuNzE5LDY1LjI3NCAxMi40OCw3NC41NzEgLTcuOTYxLDkuNjQzIC0yNi40NzksMTYuMTg3IC0xMi43MTYsMzguMzA5IDQuMDgsNDguMjc3IDguNzY5LDM4Ljk4NSBMIDYuNjA4LC03NC4zMDggMCwwIHoiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgaWQ9InBhdGgzMjAxIiAvPjwvZz48ZwogICAgICAgICAgIGlkPSJnMzIwMyIKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3OC44NjU3LDY4Mi4xNTgyKSI+PHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMCwwIDE0Mi43ODksNDAuNzk3IDI1OS43NCw1Mi4zNTUgMzEzLjQ1NywtMjMyLjU0MyAyMDQuNjY1LC0yOTEuNjk4IDc4LjE5NCwtMjkzLjczOCAwLDAgeiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBpZD0icGF0aDMyMDUiIC8+PC9nPjxnCiAgICAgICAgICAgaWQ9ImczMjA3IgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2OS41MTIyLDM0NS4yMzQ0KSI+PHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMCwwIDE4LjgwMSwtNzQuNDI1IDQwLjcyOCwtODUuNDA4IDU5LjUzOSwtNTkuNTQxIDQwLjI1OSwxMy41MDMgMzYuODIxLDE1LjY2OSAwLDAgeiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBpZD0icGF0aDMyMDkiIC8+PC9nPjwvZz48L2c+PGcKICAgICAgIGlkPSJnMzIyMyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc0MS45MTgsMTA5LjAzMzIpIj48cGF0aAogICAgICAgICBkPSJtIDAsMCAtMTcuMjM2LC05LjQwMSAtMTYuNDUyLC0yMi43MjEgLTAuNzgzLDEyLjUzNyA2LjI2OCwxNy4yMzQgMTMuMzE3LDYuMjY4IEwgMCw3LjgzMyAxNC44ODQsMy45MTcgMCwwIHogbSAxNzIuNjIyLC0yMS44MjQgYyAtMC4wMzEsMC4yNzEgLTAuMDgxLDAuNTM1IC0wLjExNywwLjgwNCAtMjAuODUsNy42NTMgLTQ5LjU5LDcuMzI3IC02Ni44NzQsMTAuOTI3IC0xMy44NDksMi44ODYgLTIzLjA0Nyw5LjExOSAtMjcuMDMyLDEyLjI5OCAtOS44NjMsLTguNDk0IC0xMi4wMjUsLTE0LjM3NyAtMTIuMDI1LC0xNC4zNzcgMCwwIC05LjgxNiwxNS4zMDkgLTMwLjE3LDI1Ljc2IC03LjA1LDMuNjIxIC0xNy43NjcsNS42OTEgLTI5LjM0MSw1LjY5MSAtMjQuMjk3LDAgLTUyLjM4NCwtOS4xNTUgLTU4LjMzOSwtMzIuMjIzIC0xMC40NTgsLTQwLjUxMSA5LjY5NywtNzYuNTk0IDQ5LjgxNCwtNzcuNjIzIDEuMzI1LC0wLjAzNCAyLjYyMywtMC4xMiAzLjg5NCwtMC4xMiAzNi4xMzEsMCA0OC44NTUsOC41NzIgNTguMzIzLDE1LjQ3OCAwLjAyNywwLjAyMSAwLjEwNCwwIDAuMTA0LDAgMCwwIDI1LjEyNiwtMTEuNTA2IDUzLjUyOSwtMTEuNTA2IDQuNDE5LDAgOS4xNTYsMC40MTUgMTQuMjQ5LDEuMDYzIDMxLjY0MSw0LjAxOCA0Ny45ODksMjguMTI0IDQzLjk4NSw2My44MjgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNkZjAwMTk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzIyNSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzIyNyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMC44NDgxLDI3MC4wMjU0KSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAtMy4wNjMsLTAuNjkxIC0xMi41MzUsMC43ODQgLTEyLjUzNSwwLjc4NCBsIDYuMjY3LC0yNS44NTMgNDMuNDgxLDEzLjMxOSAtOS4wMSwyNy40MTggQyAyOC4yMDMsMTUuNjY4IDcuODY3LDEuNzc3IDAsMCIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgaWQ9InBhdGgzMjI5IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48ZwogICAgICAgaWQ9ImczMjMxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjExLjY2MDUyLDYxNS44NTk4NCkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIC0xNi4yNDMsLTIuODcxIC0xNS40NjIsLTkuNCA0LjMyMywtMTAuOTM4IDE0LjU2OCw5Ljg5IEwgMi43NSwtOC43NzEgMCwwIHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzIzMyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzIzNSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NC4xNTczMiw2MjYuNDA4NCkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIC0xNS42NCwwLjQwNyAtMTQuMjc5LC0zLjYwOCAyLjAwOCwtOS43NDcgMTQuNzU2LDQuMjA4IEwgMS4xMTEsLTguMjE1IDAsMCB6IgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyMzciCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgZD0iTSA0MzYuNjU2MjUgMjIuMjgxMjUgQyA0MzYuNjU2MjUgMjIuMjgxMjUgMzM4LjE4Mzc1IDI1LjM4NSAyNTEgNDIuODEyNSBDIDE2My4yNDg3NSA2MC4zNTM3NSA3MC40MDYyNSA5OS42NTYyNSA3MC40MDYyNSA5OS42NTYyNSBMIDE3NS4xODc1IDQ5NS4yODEyNSBMIDMyNy45Njg3NSA0OTIuMzQzNzUgTCAzMzcuNzUgNTI3LjU5Mzc1IEMgMzM3Ljc1IDUyNy41OTM3NSAzNjUuMDk1IDUyMy4yNTg3NSAzNzMgNTE4Ljc4MTI1IEMgMzc2LjMxMzc1IDUxNi45MDM3NSAzODMuNzgxMjUgNTA4IDM4My43ODEyNSA1MDggTCAzNzcuNzUgNDg0LjY1NjI1IEwgNTA0LjIxODc1IDQwNy4xNTYyNSBMIDQzNi42NTYyNSAyMi4yODEyNSB6IE0gNDEwLjUzMTI1IDU1LjE4NzUgTCA0NjUuNjg3NSAzOTMuMzEyNSBMIDM0Ni41OTM3NSA0NTYuNjI1IEwgMjAyLjc1IDQ2Ni40Njg3NSBMIDExMiAxMTQuNDA2MjUgTCAyNjMgNzkuMTg3NSBMIDQxMC41MzEyNSA1NS4xODc1IHogIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44LDAsMCwtMC44LDAsNzY4KSIKICAgICAgIGlkPSJwYXRoMzI1MyIgLz48ZwogICAgICAgaWQ9ImczMjQ3IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4xOTkyMzgsLTAuMDI4NzkzMzEsMC4wMjY3MzA4NCwxLjA1MjA3NTYsMTcyLjQxOTM1LDQ5OC4zNzMzOSkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIGMgMCwwIC0xLjg2MSwxLjQ4MSAtOS4xNDMsLTEuNDU3IDkuNzEyLDE4Ljg2NyA5LjQzOSwzOS45ODkgOS40MzksMzkuOTg5IDAsMCAtMy4xMDYsLTIuNDY1IC0xMS4zMTEsLTguNDcgOS4yNDEsMjMuMDQ0IDUuMzM4LDcyLjUyNSA1LjMzOCw3Mi41MjUgMCwwIC0xNy40OTMsNDAuNzQ2IC0xMy42NTcsNDUuNzk5IDguODQxLDExLjY1IDIzLjgzNCwyMy45NjggNDQuMjk1LDI1LjU5NCAxNy45MzUsMS40MjQgNDQuNjA2LC00Ljk1MyA1NS44NjUsLTE1LjI4NCA0LjUzNiwtNC4xNjEgMjMuMzY3LC00Ny40OTMgMjMuMzY3LC00Ny40OTMgMCwwIDYuMTA0LC0zNS4yNzEgMTEuNjE5LC01NC4xMDggNS41MTMsLTE4LjgzOSAxMS4wNTQsLTI2LjY3NCAyMS4yODQsLTM0LjgyNSAxNy44MzEsLTE0LjIwNyAyNy4wNzYsLTI5LjkzOCAyNy4wNzYsLTI5LjkzOCBMIDE0My4zOTksMy45NDUgYyAzLjY1NSwtMTcuMzU2IDE0Ljg3NSwtMzQuMjggMjcuMzksLTQ3LjY3MiAtMTIuODYzLDEuNTA3IC0xOS42MSw4Ljc4MyAtMTkuNjEsOC43ODMgMCwwIDIuMTUxLC0xMi42NjQgOS4xMDksLTI2LjU1NCBsIDI4LjcxMiwxNS4yNjQgLTEuNzYyLDEwLjgwNSBjIC01LjEyOCw5LjMwNCAtOS4zMzYsMTUuNTM0IC05LjMzNiwxNS41MzQgMCwwIDIuMDg5LDAuOTU2IDcuMzg1LC0zLjU3MiBsIC0yLjAwNSwxMi4yOTYgYyAtNC44MTQsOS4zOTEgLTExLjc3MywxNi43NTIgLTI1LjExNSwzMS4xMTMgNS45NDQsLTYuMDg3IDE1LjQzOCwtNS4zNzkgMjAuNzUxLC00LjM1NiBsIC0wLjU3MiwzLjUxMiBjIC0yLjIzMSwxLjI3OCAtNS40OTQsMy4xNzEgLTEwLjI0MSw1Ljk1NyAtMTIuNDMsNy4yOTkgLTIyLjMyNiwyMS4wNDkgLTIyLjMyNiwyMS4wNDkgMCwwIDEyLjg1LDEuODE1IDIwLjUxMywxMS4wMjIgLTcuMzE2LC0yLjY0MSAtMTguNTg1LDAuNzk5IC0xOC41ODUsMC43OTkgLTE3LjA4Niw2Ljc3MiAtMTUuMDIyLDMwLjIxNyAtMTcuNjg3LDUwLjU4NyAtMi42NjcsMjAuMzcgLTkuMjk5LDM0LjEyNSAtOS4yOTksMzQuMTI1IDAsMCAtMC4yNDMsMi4xNDkgMTEuOTEsLTUuOTA2IC03Ljc0NCwzMy4yMTUgLTM1LjU0NSw0NC45NCAtMzUuNTQ1LDQ0Ljk0IDAsMCAyLjIyMywyLjc5IDIyLjg0MywwLjA0NCAtMTYuNDY5LDE1LjgxNyAtMzIuMzAzLDE2Ljg5NiAtMzIuMzAzLDE2Ljg5NiAwLDAgMTAuMDc3LDIuMjUgMjMuNjExLDAuMjQgMCwwIC0zLjMyNywzLjUwOCAtNy41NDksNi40NTMgTCAzNS45ODUsMTk0LjI5MSAtNzcuNTQzLDE2Ny44MTUgLTguMjExLC0xMDEuMTcgMTcuNDgxLC05OS40MTMgQyA4LjYwMiwtODUuMTE0IC0wLjM3MSwtNjMuODM3IC0yLjE1LC00MC44NTcgLTQuOTExLC01LjIwOCAwLDAgMCwwIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNDkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzMyNTUiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDQuMjIxMzQsNTgwLjg4MzUzKSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAwLC0xLjQxOCAwLjQzLC0yLjczNiAxLjE2OCwtMy44MyAxLjUyMywwLjY3NyAzLjU1MSwxLjA5NCA1Ljc4NiwxLjA5NCAyLjE2NCwwIDQuMTMzLC0wLjM5IDUuNjM5LC0xLjAyOSAwLjcxMSwxLjA4MSAxLjEyOSwyLjM3NCAxLjEyOSwzLjc2NSAwLDMuNzkgLTMuMDcyLDYuODYxIC02Ljg2MSw2Ljg2MSBDIDMuMDcxLDYuODYxIDAsMy43OSAwLDAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzI1NyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzI1OSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI1Ni4zMzExLDU5NS4zMTY0NikiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIGMgMCwtMS40MTggMC40MywtMi43MzYgMS4xNjgsLTMuODMgMS41MjQsMC42NzcgMy41NTIsMS4wOTQgNS43ODcsMS4wOTQgMi4xNjMsMCA0LjEzMiwtMC4zOSA1LjYzOCwtMS4wMjkgMC43MTIsMS4wODEgMS4xMjksMi4zNzMgMS4xMjksMy43NjUgMCwzLjc5IC0zLjA3Miw2Ljg2MSAtNi44NjEsNi44NjEgQyAzLjA3MSw2Ljg2MSAwLDMuNzkgMCwwIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzQxNzQiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Njk0NTA5LDAuMDc4MTA1NjMsLTAuMDc4MTA1NjMsMC45OTY5NDUwOSw0Ny4zNDg3NDgsLTE1LjM0ODI5OSkiPjxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMi41MDk4LDYxMC4xNTU4KSIKICAgICAgICAgaWQ9ImczMjE5Ij48cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGgzMjIxIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNkZjAwMTk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0ibSAwLDAgNC40NSwyLjc1MiA1LjM0LDMuNzg1IDcuMDUsLTguMjI2IDcuMDkzLC0zMy4zNTkgMTcuODAxLC01MS4yNTkgMTMuODYsLTMwLjIxNSAyNi4yNjEsLTEuNTUgLTYuNjg1LC0zNS42NTMgYyAwLDAgLTQ5Ljk4LC0yMS44NzEgLTQ5LjU0NSwtMjEuOTExIC00Mi42NTcsNC4wMDEgLTEyLjU1Myw0My4wNjYgLTguNjMxLDQ3LjMwMSBMIDMuNjY2LC00Ny44NjkgMCwwIHoiIC8+PC9nPjxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0Ny42MjYsNDY3LjM1NDUpIgogICAgICAgICBpZD0iZzMyMzkiPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBpZD0icGF0aDMyNDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSJNIDAsMCBDIC0zLjA0NCwtMC4zNDUgLTUuMjMyLC0zLjA5MiAtNC44ODgsLTYuMTM2IC00LjU0MywtOS4xOCAxLjU3NiwtMi4yNTQgMTMuMzA4LC00Ljk2MSAxMy45NzEsLTEuOTcgMy4wNDQsMC4zNDQgMCwwIiAvPjwvZz48ZwogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzkuNDQxOSw0NzYuNTc2MikiCiAgICAgICAgIGlkPSJnMzI0MyI+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoMzI0NSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMCwwIEMgMy4yNzEsMS4wOCA2Ljc5OCwtMC42OTcgNy44OCwtMy45NjkgOC45NiwtNy4yNCAtMC41NSwtMy4wNDQgLTExLjI1OCwtMTEuMzI5IC0xMy4zNDUsLTguNTg2IC0zLjI3MiwtMS4wODEgMCwwIiAvPjwvZz48ZwogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODQuMTkyOSw1MjUuOTA4MikiCiAgICAgICAgIGlkPSJnMzI2MyI+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoMzI2NSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMCwwIEMgMCwwIC02Ljk3MiwyOC42NzEgLTYuOTcyLDI5LjM1NSBMIDEuNTg1LDIuODY0IDkuOTk5LC0xMC41NjQgMTMuNjM0LC0zMi42OTcgNy45MjIsLTExLjA5OCAwLDAgeiBNIC0wLjYzMywtMTUuMDM2IC05LjE5LC00Ljg2IC0xNi40NzgsMjUuNzc2IGMgLTAuMjAyLDAuNjg0IDkuMTA2LC0yOC44MTEgOS4xMDYsLTI4LjgxMSBsIDguNjQsLTExLjY0MiAyLjQ2OSwtMTcuMzM2IC00LjM3LDE2Ljk3NyB6IG0gLTYuMzM5LC02LjA4NSAtMTAuNDU3LDE2LjgyNiAtNS40NDQsMjguNjQ2IDYuNjE0LC0yNy44NDIgMTEuMzExLC0xOC4wMjYgMS40MTMsLTkuNTgzIC0zLjQzNyw5Ljk3OSB6IG0gLTUzLjQ2MiwtMTMuMjQ2IC0xLjQzNywyNC45NDQgLTIuNjgyLDI4Ljc1NCA1LjEwNiwtMjkuODk1IDEuMjEyLC0yMS42NzcgNC4xMzksLTE4LjIzNiAtNi4zMzgsMTYuMTEgeiBtIC00LjI2NSwtMTkuNTUgLTYuNjY1LDE1LjUxNiAwLjQwNCwyOS4yMDUgLTAuODgyLDI4LjE2OSAzLjEwNCwtMjguMzk2IDAuODA4LC0yNi42OTcgNC4yNDIsLTE1Ljk3MiAyLjQyMywtNi42MTcgLTMuNDM0LDQuNzkyIHogbSAtOS42OTUsLTIuOTY3IC03LjExNywxNi44ODUgMS4zMTgsMzIuMDEgMCwyNS4yMjMgMi4xMTUsLTI1LjA2MSAtMC41ODEsLTMxLjI1OSA1Ljg2OSwtMTYuNDI5IDUuMDU2LC04LjY3MSAtNi42Niw3LjMwMiB6IG0gMTAzLjE0NCwtNy45NyAtNi42NzYsMjAuMzggMi4xNDEsMTEuNTQgTCAxNi40OTksLTkuMzc2IDQuNTU3LDEzLjEwNCAtNS44NzksNTMuOTcgYyAwLDAgLTguMzI1LC03LjQxIC0xNi43ODEsLTguMDggLTguNDU1LC0wLjY3MSAtMTUuMDksNC4wMTggLTE1LjA5LDQuMDE4IDAsMCAzLjU5MiwtMTcuNzYxIDguNjU5LC0zNy41OTcgNS4wNjksLTE5LjgzNiAxNy41MjgsLTQ0Ljg2NiAxNy41MjgsLTQ0Ljg2NiAwLDAgMjEuNTc4LC04LjE5NyAyNC4zMDIsLTE2LjU4NyAyLjcyNCwtOC4zOTEgLTMuNTA4LC0yMi45MTEgLTE0LjEwMiwtMjYuNTUxIC0xMC41OTMsLTMuNjQgLTMyLjI4NCwtOC4yNjIgLTMyLjI4NCwtOC4yNjIgMCwwIC0xOSwxLjUxMiAtMjAuNDM4LDE0LjI2IDAsMCA0LjEzMSwxNi40MDYgMTAuNDE4LDE5LjIyNSA2LjI4NSwyLjgxOSAyMS4zNjIsMTEuMTc0IDIxLjM2MiwxMS4xNzQgbCAtOC4yNTQsMS4zMzIgLTcuNjY0LC0xLjMzMiBjIDAsMCAtNC43ODQsMTEuMjk1IC0xMC45NzMsMzUuMDg2IC02LjE5LDIzLjc5IC04Ljk2Nyw0Mi40ODUgLTguOTY3LDQyLjQ4NSAwLDAgLTMuOTEyLC00LjM5MSAtMTQuMTk5LC00Ljg4NSAtMTAuMjg2LC0wLjQ5NCAtMTYuMDMxLDcuOTg4IC0xNi4wMzEsNy45ODggbCAxLjAyNywtMzAuMTg1IC0xLjA0OSwtMjUuODMgLTAuMTUsLTI5LjIyIDUuMTAyLC0xNS45OSAxOS44MTgsLTMwLjQ0OCBjIDAsMCAxNC4xMDIsLTkuMjkzIDMxLjcyOCwtOS4yOTMgMTYuNDUzLDEuMzI4IDUxLjEzMSwxOC4wNDcgNTEuMTMxLDE4LjA0NyBsIDkuNTM2LDE2LjY4NyB6IiAvPjwvZz48L2c+PGcKICAgICAgIGlkPSJnMzI2NyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDg0Ny4yNjM3LDMyMS41MDU5KSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAyLjI1MiwzLjUxNiA2LjY5MywxNS4zIDYuNjkzLDE1LjMgMCwwIDMuNzc4LC0xMy4zMDYgMS45MTIsLTE3LjIxMyAtMy4wNTYsLTYuNDA0IC0yMy45MDUsLTE1LjMgLTIzLjkwNSwtMTUuMyAwLDAgMTIuMTk2LDEyLjM2NCAxNS4zLDE3LjIxMyBtIC0zMy41MTQsMjMuMTYgLTAuNzU3LDU2LjM1MiBjIDAsMCAxMS4xMzYsLTE0LjAyOCAxMS44NDMsLTE5LjczOSAxLjE3NiwtOS40OTEgLTExLjA4NiwtMzYuNjEzIC0xMS4wODYsLTM2LjYxMyBtIC0xNy41NzUsMjM2LjkyMSBjIDAsMCAxMi40NTMsLTE1LjMzOCAxNC44NTQsLTIxLjM5IDEuNDI0LC0zLjU5MSAyLjI4NiwtMTUuMjg3IDIuMjg2LC0xNS4yODcgbCAtMTcuMTQsMzYuNjc3IHogTSAtOTguNTc0LC04Ni4xMzYgYyAtOS43NTcsLTAuOTA2IC0yOS44MzYsMS4wMTYgLTM4LjkxMiw0LjcwOCAtNy40OTksMy4wNSAtMjUuNzM0LDE5LjY1NiAtMjUuNzM0LDE5LjY1NiBsIDI0LjE4NywtMTAuODYgLTQuNzAxLDE3LjYyNyAxNS4yNzIsLTIyLjAwOSA0MS44MTMsLTUuMzU2IGMgMCwwIC04LjgxMiwtMy40NzcgLTExLjkyNSwtMy43NjYgbSAtNzQuNDI4LDE1Ny45NDEgYyAtNC41MTgsMTAuMDU3IC0xLjc2Myw0NC4wNjUgLTEuNzYzLDQ0LjA2NSAwLDAgNy41NDQsLTMxLjA5MyAxMi4zMzgsLTQwLjU0MSA2Ljk3OCwtMTMuNzU0IDM3LjAxNSwtNDkuMzUyIDM3LjAxNSwtNDkuMzUyIDAsMCAtNDAuODI0LDMwLjc1OSAtNDcuNTksNDUuODI4IG0gLTE3LjgzMywtMTQ5LjQ3IC00MC40MDcsMjQuNzI0IDEuNjM2LC0xNy41NzUgMC4wMjYsLTAuMDM1IC01LjE3OCwtMjkuODExIC0yLjA1NiwtMTAuNzAxIDAuMzgzLC0zMy4zNCAtNC45ODIsMzYuNDA2IDYuNDEsNDEuNDUgLTExLjA2Myw4LjMzOCAtMTcuNTMyLDQzLjE1OSAyMy41MDIsLTM4Ljc3OSAyLjM1MSwxNC4xMDEgNDAuNjM0LC0yNS42OTUgMTEuOTI0LC01LjY1MSAxMy44MDksLTI4Ljg3MSAtMTkuNDU3LDIyLjI4IHogbSAtODUuNTIyLDEzOC44NjMgMTcuMjEyLC0zNC40MjQgYyAwLDAgLTEyLjk3MiwxMS4xODUgLTE1LjI5OSwxNi4yNTcgLTEuOTA1LDQuMTUyIC0xLjkxMywxOC4xNjcgLTEuOTEzLDE4LjE2NyBtIC0yLjM2Nyw2Ni4wNDIgYyAwLDAgLTYuMjA2LDE1LjU4MSAtNi4zMjMsMjEuMDgyIC0wLjE2OCw3LjgxNyA0LjU2OCwyMy4xNDggNy42OTUsMzAuMzE1IDAuNzU1LDEuNzMgNC4xMDMsNi4zNDEgNC4xMDMsNi4zNDEgMCwwIC00LjY1NCwtMjQuNTQyIC01LjM0NywtMzIuODI5IC0wLjUxOCwtNi4yMDUgLTAuMTI4LC0yNC45MDkgLTAuMTI4LC0yNC45MDkgbSAtNy4xOTUsLTExNC44MDkgYyAtMC4zMzQsMy4zNjMgMS45MTIsMTMuMzg3IDEuOTEyLDEzLjM4NyBsIDMuODI1LC0yOS42NDMgYyAwLDAgLTUuMzEzLDExLjk2NyAtNS43MzcsMTYuMjU2IG0gLTIwLjA4Miw1My41NDkgYyAtMS4zOTQsMy41NzEgLTAuOTU2LDE1LjMwMSAtMC45NTYsMTUuMzAxIGwgMTMuMzg4LC0zMC42IGMgMCwwIC0xMC42MzksMTAuNzEgLTEyLjQzMiwxNS4yOTkgbSAtNi4wMywxMDYuNzk1IGMgMCwwIC0wLjMxNSwzNS44MzEgNC42MzcsNDYuMzc5IDQuNTMxLDkuNjQ3IDI5LjkzNiwzMC4zNTYgMjkuOTM2LDMwLjM1NiAwLDAgLTE3LjgyNCwtMjIuNDcgLTIxLjUwMywtMzEuMiAtNS4wODksLTEyLjA3NyAtMTAuMTE5LC01MS40MzcgLTEwLjExOSwtNTEuNDM3IGwgLTIuOTUxLDUuOTAyIHogTSA1MC4xMjEsMjA1LjAxIGMgMy4zMzUsLTkuMTU1IDEuMTY4LC0zOC45NTYgMS4xNjgsLTM4Ljk1NiAwLDAgLTUuNDUxLDI5Ljk4NyAtOS4yMjEsMzkuMzY2IC00LjIxNCwxMC40ODcgLTIzLjAxNCwzOC45MDcgLTIzLjAxNCwzOC45MDcgMCwwIDI2Ljc4LC0yNy41NDYgMzEuMDY3LC0zOS4zMTcgTSA1NC41MDYsOTUuNjI0IGMgMCwwIDYuODg0LC0xOC41ODYgNS43MzgsLTI0Ljg2MSAtMC43NzMsLTQuMjQxIC05LjU2MiwtMTQuMzQ1IC05LjU2MiwtMTQuMzQ1IDAsMCAyLjQxNCwxMi44NzQgMi44NjgsMTcuMjEyIDAuNTczLDUuNDc0IDAuOTU2LDIxLjk5NCAwLjk1NiwyMS45OTQgTSAxOS4xMjUsLTEzLjM4OSBjIDAsMCA5LjY1NiwyMi4xODMgMTEuMDYyLDMwLjA2OCAxLjIzNSw2Ljk0MSAwLDI4LjIwMyAwLDI4LjIwMyAwLDAgOC40NzcsLTIyLjgxOSA3LjEwNiwtMzAuNTM4IEMgMzUuODQ1LDYuMTgzIDE5LjEyNSwtMTMuMzg5IDE5LjEyNSwtMTMuMzg5IG0gNDQxLjQ4NywtNDAuOTY1IGMgLTMuMjQ5LDguOTM1IC02LjU4NywxNy4yMyAtMTAuMDEsMjQuOTI4IGwgLTEuODYyLDI4Ljg3MyAtOC44NTcsLTQuODc2IC0yNS44NjIsNDkuNDU3IC00LjgyOCwtMTAuMzQgYyAtMzIuNjksMzEuNDggLTcwLjQ1NywzNC4yODQgLTExMS45ODIsMzEuNjQ2IC02NS41NjgsLTQuMTYzIC05MS41ODcsLTQxLjYzIC03OS4wOTgsLTU3LjI0MSAxMi40OSwtMTUuNjEzIDE4LjczMywtNS4yMDUgNDAuNTg5LDUuMjAzIDIxLjg1OCwxMC40MDcgNzQuOTM3LDI2LjAxNyAxMTAuMzIzLC0yLjA4MiAzNS4zODYsLTI4LjEgODYuMzgzLC0xMDkuMjgxIDUwLjk5NywtMTY5LjY0NiAtMzUuMzg2LC02MC4zNjUgLTEwNS42MjYsLTEwNS4zODUgLTE4Mi4xMzUsLTg4LjQ2NSAtODYuNDIyLDE5LjExMiAtMTI2LjA3OCw2MC4wODIgLTE3Ny42NzUsNzQuODExIC04LjMxMSwxLjMzNCAtMTguMzQ3LDIuNzg5IC0yNC43OTEsMy4xOTEgLTEyLjY3MSwwLjc5MiAtMjEuNiwxNC43MjcgLTIxLjYsMTQuNzI3IGwgMTcuMTgxLC05LjMyNyAyNS43NjMsLTIuMzYgYyAyLjMzMSwxNCA5LjM5NSw0OS4wNTQgOS4zOTUsNDkuMDU0IGwgLTguNjg4LDg3LjI5IC0xOC42NjgsLTI3LjA2IC03LjI0NiwxMC4xODQgLTIxLjM0OSwtMjIuOTE1IC0xNS40NzMsLTEuOTU5IDE0LjY3LDYuNTk2IDIxLjM4LDI5LjQwOSA2LjcsLTEzLjc1NCAxOS40ODUsMjQuNjkxIDAuMDA0LC0wLjAxMSAxNi40Nyw5LjUyNSAtMy4xMjMsNjguNjkgMTAuNDA3LC0xMC40MDcgLTQuMTYzLDQwLjU5IDIyLjE3Myw3MS41MDIgLTM0LjY2Miw5MS44OTkgMTYuNjUyLC00LjE2MiAtMTkuNzczLDM1LjM4NiAtNDAuNTkxLDM4LjUwOSA5LjM2OCwxNy42OTMgLTkzLjY3MSw5LjM2OCAtMjAuMjI5LC03LjE2NSAtMTguNDM3LDM4LjI5MiAxMy4yMiw4LjgxMyAtNjkuMDM5LDE0LjY5IDIuOTM4LDE5LjA5NSAtODAuNzkxLC0yMy4zMDMgLTI2LjE0NywtMTkuMTkxIC0xMTYuMzM5LDAgOC44MTQsLTEwLjE4OCAtNDIuNTAxLC00MC42NDEgLTguOTExLC03OC40OTEgNy4zNDQsLTEuNDk0IDguODE0LC00NS41NDggMjMuNTAyLC0yNC45NzggMTkuMDk2LDQ1LjUzMyAtMTQuNjg5LC00LjQwOSA0MS4xMyw0OC40NzQgMzAuODQ4LDI2LjQ0IC0xNC42OSwtMS40NjkgMTkuMDk2LDE2LjE1OCAxMDUuNzYzLDIuOTM4IDcyLjkxNywxNS43OTkgLTQxLjYyMywtMTQuNzQyIC0zMC4xODEsLTcuMjg1IC0xMDQuMDc5LC0xLjA0MyAxLjA0LC0xMS40NDkgLTY0LjUyNiwtNjEuNDAzIDE0LjU3MSwyLjA4MSAtMjcuODQ0LC02My4yOCBjIC0xNS4wMTcsLTEzLjcxOSAtMjguMDYsLTU1LjAxNiAtMzYuNjg3LC03NS4xNDUgLTkuMzY3LC0yMS44NTYgLTIwLjgxNiwtMzkuNTUgLTIwLjgxNiwtMzkuNTUgMCwwIC0zMC4xODIsLTYuMjQ0IC02MS40MDUsLTE4LjczNCAtMzEuMjI0LC0xMi40ODkgLTQzLjcxMyw0LjE2MyAtNDMuNzEzLDQuMTYzIGwgLTMuMTIyLC04LjMyNiBjIDAsMCAtMTguMjgsLTkuMDU3IC0zOS4zMDMsLTExLjgyNSAtMTYuNDMsLTIuMTYyIC05Ljk2NywtMjAuOTQ2IC05LjYxMywtMjYuNjg0IDAuNDA1LC02LjU3IDQuMjk0LC0xOS43NzQgOC4zMjUsLTI0Ljk3OCAzLjIyNywtNC4xNjUgMTIuNTI1LC0xMC40MjUgMTcuNjk0LC0xMS40NDggMTIuMDM5LC0yLjM4NSAyOC4xMDEsNS4yMDQgNDUuNzk0LDE3LjY5MyA3NC45MzYsLTYuMjQ1IDEwMy4yNDEsLTEwLjMyMSAxMjYuOTc0LDguMzI2IDE0LjU3MiwxMS40NDggMjkuMTQyLDIyLjg5NyA0MS42MzEsNDAuNTkgbCAtMTUuNjExLDQyLjY3MSAtOC4zMjcsLTE0LjU2OSAtNS44MDcsNDQuOTMxIDEuODQxLDE3Ljg2MyA1LjU0NywtNTEuMjM0IDcuNzg5LDkuMjU3IDM1LjM4NywtNzAuNzcyIDExLjQ0OCw0LjE2NCBjIDAsMCAxMy41MTUsLTE4LjU4MyAyMy4wNTcsLTMyLjg4MSBsIC0yNi4wMiwyNS4wMDYgLTEwLjIyNCwtNS45NjQgLTExLjA3NiwyMi4xNTIgYyAwLDAgLTEzLjM4MywtMi4zNTMgLTI0LjcyNywtMTguMDI3IC0xNS44NjIsLTIxLjkxNSAtMjMuNTAzLC0yNC42NzggLTE3LjYyNywtNzguNzM1IDUuODc2LC01NC4wNTUgMTYuNDUyLC01NC4wNTUgNjQuNjMyLC0xMjEuMDM5IDExLjc1MiwtMTYuNDUyIDE0LjYwMSwtMTguNDY1IDE0LjYwMSwtMTguNDY1IGwgLTUxLjAzLC0yNy4zNjUgLTIyLjMyNywtNS44NzYgLTIxLjM4NCwtMTEuMjggYyAwLDAgNC43NDQsLTguMTc0IDcuNDk1LC05LjM2OSA0LjczOSwtMi4wNjIgMjAuNjEzLDEuNTYgMjAuNjEzLDEuNTYgMCwwIDE1LjYwMywtNi43NjMgMzYuNzU2LC02Ljc2MyAyMS4xNTIsMCAzMi45MDMsOC4yMjUgNDcuMDA1LDguMjI1IDE0LjEwMSwwIDM4Ljc4LC04LjIyNSA1Ny41ODIsLTUuODc2IDE4LjgwMiwyLjM1MSAyMi4zMjgsMTIuOTI3IDIyLjMyOCwxMi45MjcgbCAtNTEuNzA2LDU0LjA1NyAtNC42NzUsNDcuMDk2IC01Ni42MDUsNzUuNzY5IC0zLjAzOCw5LjQzNyA2NS43OTEsLTgyLjI0IDUuMTA3LC00Ni43NSA1NS4xNjEsLTYxLjQwNSAzNy40NjgsLTguMzI1IGMgMCwwIC0wLjI1NywxLjIyNiAtMC42MjUsMy4xMTQgLTYuMTQ2LDE1LjY2NCAtNi45ODYsMzQuODk0IC0xLjk5OSw1NC4yMTQgNi45NzUsMjcuMDEyIDM4Ljg1LDM2LjU5NiA2NC4wMjksMzYuNTk2IDEyLjUwNiwwIDI0LjE3OSwtMi4zMTIgMzIuMDI1LC02LjM0MSAxMi45MTIsLTYuNjMgMjEuODUxLC0xNS4wNzYgMjcuMDI5LC0yMC45MTcgMy42NzMsNC41MTYgNy4xMzMsNy4xOTQgMTEuODMzLDExLjExIDAsMCAxMi4xNDMsLTExLjc1MSA0NS4wNDcsLTE0LjEwMSAyNy4xNCwtMS45MzkgNDUuMDQ4LC04LjIyNiA3MC45MDEsLTE5LjU4NSA1My42NzYsLTIzLjU4NCAxMDIuNSwtNjEuNzg1IDIwNy42MTgsLTQ1LjEzMiAxMDUuMTE5LDE2LjY1MSAyMDYuMDczLDExMy40NDQgMTY0LjQ0MiwyMjcuOTI5IgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNjkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMzI5LjI2Mzk4LDcyMy4zMDgyIC0xMTguMDI1LC0xOS4yIC0xMjAuODAwMDAzLC0yOC4xNzUgNzIuNjAwMDAzLC0yODEuNjUgMTE1LjA3NSw3Ljg3NSA5NS4yNzUsNTAuNjUgLTQ0LjEyNSwyNzAuNSB6IG0gLTYuNTUsLTEwLjU3NSA0MC42NzUsLTI1Mi40IC04Ny44NSwtNDcuMjc1IC0xMDYuMTI1LC03LjMyNSAtNjYuOTUsMjYyLjggMTExLjQsMjYuMjc1IDEwOC44NSwxNy45MjUgeiIKICAgICAgIGlkPSJwYXRoMzI1My0zIiAvPjwvZz48L3N2Zz4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/css/docs.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ym9keSB7CiAgZm9udC1mYW1pbHk6IERyb2lkIFNhbnMsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWF4LXdpZHRoOiA2NC4zZW07CiAgbWFyZ2luOiAzZW0gYXV0bzsKICBwYWRkaW5nOiAwIDFlbTsKfQoKaDEgewogIGxldHRlci1zcGFjaW5nOiAtM3B4OwogIGZvbnQtc2l6ZTogMy4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogMDsKfQoKaDIgewogIGZvbnQtc2l6ZTogMS4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogLjVlbSAwOwogIGxldHRlci1zcGFjaW5nOiAtMXB4Owp9CgpoMyB7CiAgZm9udC1zaXplOiAxZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbWFyZ2luOiAuNGVtIDA7Cn0KCnByZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsKICBib3JkZXItcmFkaXVzOiA2cHg7CiAgcGFkZGluZzogMWVtOwp9CgpwcmUuY29kZSB7CiAgbWFyZ2luOiAwIDFlbTsKfQoKLmdyZXkgewogIGZvbnQtc2l6ZTogMi4yZW07CiAgcGFkZGluZzogLjVlbSAxZW07CiAgbGluZS1oZWlnaHQ6IDEuMmVtOwogIG1hcmdpbi10b3A6IC41ZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgppbWcubG9nbyB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAtMjVweDsKICBib3R0b206IDRweDsKfQoKYTpsaW5rLCBhOnZpc2l0ZWQsIC5xdWFzaWxpbmsgewogIGNvbG9yOiAjZGYwMDE5OwogIGN1cnNvcjogcG9pbnRlcjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmE6aG92ZXIsIC5xdWFzaWxpbms6aG92ZXIgewogIGNvbG9yOiAjODAwMDA0Owp9CgpoMSBhOmxpbmssIGgxIGE6dmlzaXRlZCwgaDEgYTpob3ZlciB7CiAgY29sb3I6IGJsYWNrOwp9Cgp1bCB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmctbGVmdDogMS4yZW07Cn0KCmEuZG93bmxvYWQgewogIGNvbG9yOiB3aGl0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYwMDE5OwogIHdpZHRoOiAxMDAlOwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LXNpemU6IDEuMjNlbTsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7CiAgYm9yZGVyLXJhZGl1czogNnB4OwogIHBhZGRpbmc6IC41ZW0gMDsKICBtYXJnaW4tYm90dG9tOiAxZW07Cn0KCmEuZG93bmxvYWQ6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNiYjAwMTA7Cn0KCi5yZWwgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5yZWwtbm90ZSB7CiAgY29sb3I6ICM3Nzc7CiAgZm9udC1zaXplOiAuOWVtOwogIG1hcmdpbi10b3A6IC4xZW07Cn0KCi5sb2dvLWJyYWNlcyB7CiAgY29sb3I6ICNkZjAwMTk7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRvcDogLTRweDsKfQoKLmJsayB7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5sZWZ0IHsKICB3aWR0aDogMzdlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07CiAgcGFkZGluZy1ib3R0b206IDFlbTsKfQoKLmxlZnQxIHsKICB3aWR0aDogMTUuMjRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjQ1ZW07Cn0KCi5sZWZ0MiB7CiAgd2lkdGg6IDE1LjI0ZW07Cn0KCi5yaWdodCB7CiAgd2lkdGg6IDIwLjY4ZW07Cn0KCi5sZWZ0YmlnIHsKICB3aWR0aDogNDIuNDRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07Cn0KCi5yaWdodHNtYWxsIHsKICB3aWR0aDogMTUuMjRlbTsKfQoKLmNsZWFyOmFmdGVyIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAwOwogIGNvbnRlbnQ6ICIgIjsKICBjbGVhcjogYm90aDsKICBoZWlnaHQ6IDA7Cn0KLmNsZWFyIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9Ci8qIHN0YXJ0IGNvbW1lbnRlZCBiYWNrc2xhc2ggaGFjayBcKi8KKiBodG1sIC5jbGVhciB7IGhlaWdodDogMSU7IH0KLmNsZWFyIHsgZGlzcGxheTogYmxvY2s7IH0KLyogY2xvc2UgY29tbWVudGVkIGJhY2tzbGFzaCBoYWNrICovCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/activeline.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQWN0aXZlIExpbmUgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY3NzL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICAuYWN0aXZlbGluZSB7YmFja2dyb3VuZDogI2YwZmNmZiAhaW1wb3J0YW50O30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogQWN0aXZlIExpbmUgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJzcyB4bWxuczphdG9tPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iIHZlcnNpb249IjIuMCIKICAgICB4bWxuczpnZW9yc3M9Imh0dHA6Ly93d3cuZ2VvcnNzLm9yZy9nZW9yc3MiCiAgICAgeG1sbnM6dHdpdHRlcj0iaHR0cDovL2FwaS50d2l0dGVyLmNvbSI+CiAgPGNoYW5uZWw+CiAgICA8dGl0bGU+VHdpdHRlciAvIGNvZGVtaXJyb3I8L3RpdGxlPgogICAgPGxpbms+aHR0cDovL3R3aXR0ZXIuY29tL2NvZGVtaXJyb3I8L2xpbms+CiAgICA8YXRvbTpsaW5rIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiCiAgICAgICAgICAgICAgIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHJlbD0ic2VsZiIvPgogICAgPGRlc2NyaXB0aW9uPlR3aXR0ZXIgdXBkYXRlcyBmcm9tIENvZGVNaXJyb3IgLyBjb2RlbWlycm9yLjwvZGVzY3JpcHRpb24+CiAgICA8bGFuZ3VhZ2U+ZW4tdXM8L2xhbmd1YWdlPgogICAgPHR0bD40MDwvdHRsPgogIDxpdGVtPgogICAgPHRpdGxlPmNvZGVtaXJyb3I6IGh0dHA6Ly9jbG91ZC1pZGUuY29tICYjODIxMjsgdGhleSdyZSBzcHJpbmdpbmcgdXAgbGlrZSBtdXNocm9vbXMuIFRoaXMgb25lCiAgICAgIHVzZXMgQ29kZU1pcnJvciBhcyBpdHMgZWRpdG9yLjwvdGl0bGU+CiAgICA8ZGVzY3JpcHRpb24+Y29kZW1pcnJvcjogaHR0cDovL2Nsb3VkLWlkZS5jb20gJiM4MjEyOyB0aGV5J3JlIHNwcmluZ2luZyB1cCBsaWtlIG11c2hyb29tcy4gVGhpcwogICAgICBvbmUgdXNlcyBDb2RlTWlycm9yIGFzIGl0cyBlZGl0b3IuPC9kZXNjcmlwdGlvbj4KICAgIDxwdWJEYXRlPlRodSwgMTcgTWFyIDIwMTEgMjM6MzQ6NDcgKzAwMDA8L3B1YkRhdGU+CiAgICA8Z3VpZD5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvci9zdGF0dXNlcy80ODUyNzczMzcyMjA1ODc1MjwvZ3VpZD4KICAgIDxsaW5rPmh0dHA6Ly90d2l0dGVyLmNvbS9jb2RlbWlycm9yL3N0YXR1c2VzLzQ4NTI3NzMzNzIyMDU4NzUyPC9saW5rPgogICAgPHR3aXR0ZXI6c291cmNlPndlYjwvdHdpdHRlcjpzb3VyY2U+CiAgICA8dHdpdHRlcjpwbGFjZS8+CiAgPC9pdGVtPgogIDxpdGVtPgogICAgPHRpdGxlPmNvZGVtaXJyb3I6IFBvc3RlZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBDb2RlTWlycm9yIDIgaW50ZXJuYWxzIGF0CiAgICAgIGh0dHA6Ly9jb2RlbWlycm9yLm5ldC8yL2ludGVybmFscy5odG1sPC90aXRsZT4KICAgIDxkZXNjcmlwdGlvbj5jb2RlbWlycm9yOiBQb3N0ZWQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgQ29kZU1pcnJvciAyIGludGVybmFscyBhdAogICAgICBodHRwOi8vY29kZW1pcnJvci5uZXQvMi9pbnRlcm5hbHMuaHRtbDwvZGVzY3JpcHRpb24+CiAgICA8cHViRGF0ZT5XZWQsIDAyIE1hciAyMDExIDEyOjE1OjA5ICswMDAwPC9wdWJEYXRlPgogICAgPGd1aWQ+aHR0cDovL3R3aXR0ZXIuY29tL2NvZGVtaXJyb3Ivc3RhdHVzZXMvNDI5MjA4Nzk3ODg3ODk3NjA8L2d1aWQ+CiAgICA8bGluaz5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvci9zdGF0dXNlcy80MjkyMDg3OTc4ODc4OTc2MDwvbGluaz4KICAgIDx0d2l0dGVyOnNvdXJjZT53ZWI8L3R3aXR0ZXI6c291cmNlPgogICAgPHR3aXR0ZXI6cGxhY2UvPgogIDwvaXRlbT4KICA8L2NoYW5uZWw+CjwvcnNzPjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgbW9kZTogImFwcGxpY2F0aW9uL3htbCIsCiAgbGluZU51bWJlcnM6IHRydWUsCiAgb25DdXJzb3JBY3Rpdml0eTogZnVuY3Rpb24oKSB7CiAgICBlZGl0b3Iuc2V0TGluZUNsYXNzKGhsTGluZSwgbnVsbCk7CiAgICBobExpbmUgPSBlZGl0b3Iuc2V0TGluZUNsYXNzKGVkaXRvci5nZXRDdXJzb3IoKS5saW5lLCAiYWN0aXZlbGluZSIpOwogIH0KfSk7CnZhciBobExpbmUgPSBlZGl0b3Iuc2V0TGluZUNsYXNzKDAsICJhY3RpdmVsaW5lIik7Cjwvc2NyaXB0PgoKICAgIDxwPlN0eWxpbmcgdGhlIGN1cnJlbnQgY3Vyc29yIGxpbmUuPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/changemode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogTW9kZS1DaGFuZ2luZyBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL2RlZmF1bHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9zY2hlbWUvc2NoZW1lLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY3NzL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBNb2RlLUNoYW5naW5nIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Cjs7IElmIHRoZXJlIGlzIFNjaGVtZSBjb2RlIGluIGhlcmUsIHRoZSBlZGl0b3Igd2lsbCBiZSBpbiBTY2hlbWUgbW9kZS4KOzsgSWYgeW91IHB1dCBpbiBKUyBpbnN0ZWFkLCBpdCdsbCBzd2l0Y2ggdG8gSlMgbW9kZS4KCihkZWZpbmUgKGRvdWJsZSB4KQogICgqIHggeCkpCjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+T24gY2hhbmdlcyB0byB0aGUgY29udGVudCBvZiB0aGUgYWJvdmUgZWRpdG9yLCBhIChjcnVkZSkgc2NyaXB0CnRyaWVzIHRvIGF1dG8tZGV0ZWN0IHRoZSBsYW5ndWFnZSB1c2VkLCBhbmQgc3dpdGNoZXMgdGhlIGVkaXRvciB0bwplaXRoZXIgSmF2YVNjcmlwdCBvciBTY2hlbWUgbW9kZSBiYXNlZCBvbiB0aGF0LjwvcD4KCjxzY3JpcHQ+CiAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgIG1vZGU6ICJzY2hlbWUiLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgdGFiTW9kZTogImluZGVudCIsCiAgICBvbkNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgIGNsZWFyVGltZW91dChwZW5kaW5nKTsKICAgICAgc2V0VGltZW91dCh1cGRhdGUsIDQwMCk7CiAgICB9CiAgfSk7CiAgdmFyIHBlbmRpbmc7CiAgZnVuY3Rpb24gbG9va3NMaWtlU2NoZW1lKGNvZGUpIHsKICAgIHJldHVybiAhL15ccypcKFxzKmZ1bmN0aW9uXGIvLnRlc3QoY29kZSkgJiYgL15ccypbO1woXS8udGVzdChjb2RlKTsKICB9CiAgZnVuY3Rpb24gdXBkYXRlKCkgewogICAgZWRpdG9yLnNldE9wdGlvbigibW9kZSIsIGxvb2tzTGlrZVNjaGVtZShlZGl0b3IuZ2V0VmFsdWUoKSkgPyAic2NoZW1lIiA6ICJqYXZhc2NyaXB0Iik7CiAgfQo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQXV0b2NvbXBsZXRlIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbmlnaHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Nzcy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLmNvbXBsZXRpb25zIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDJweCAzcHggNXB4IHJnYmEoMCwwLDAsLjIpOwogICAgICAgIC1tb3otYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLDAsMCwuMik7CiAgICAgICAgYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLDAsMCwuMik7CiAgICAgIH0KICAgICAgLmNvbXBsZXRpb25zIHNlbGVjdCB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZhZmFmYTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CiAgICAgIC5Db2RlTWlycm9yIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEF1dG9jb21wbGV0ZSBkZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgpmdW5jdGlvbiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCkgewogIHZhciBmb3VuZCA9IFtdLCBzdGFydCA9IHRva2VuLnN0cmluZzsKICBmdW5jdGlvbiBtYXliZUFkZChzdHIpIHsKICAgIGlmIChzdHIuaW5kZXhPZihzdGFydCkgPT0gMCkgZm91bmQucHVzaChzdHIpOwogIH0KICBmdW5jdGlvbiBnYXRoZXJDb21wbGV0aW9ucyhvYmopIHsKICAgIGlmICh0eXBlb2Ygb2JqID09ICJzdHJpbmciKSBmb3JFYWNoKHN0cmluZ1Byb3BzLCBtYXliZUFkZCk7CiAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkgZm9yRWFjaChhcnJheVByb3BzLCBtYXliZUFkZCk7CiAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikgZm9yRWFjaChmdW5jUHJvcHMsIG1heWJlQWRkKTsKICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSBtYXliZUFkZChuYW1lKTsKICB9CgogIGlmIChjb250ZXh0KSB7CiAgICAvLyBJZiB0aGlzIGlzIGEgcHJvcGVydHksIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNvbWUgb2JqZWN0IHdlIGNhbgogICAgLy8gZmluZCBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4KICAgIHZhciBvYmogPSBjb250ZXh0LnBvcCgpLCBiYXNlOwogICAgaWYgKG9iai5jbGFzc05hbWUgPT0gImpzLXZhcmlhYmxlIikKICAgICAgYmFzZSA9IHdpbmRvd1tvYmouc3RyaW5nXTsKICAgIGVsc2UgaWYgKG9iai5jbGFzc05hbWUgPT0gImpzLXN0cmluZyIpCiAgICAgIGJhc2UgPSAiIjsKICAgIGVsc2UgaWYgKG9iai5jbGFzc05hbWUgPT0gImpzLWF0b20iKQogICAgICBiYXNlID0gMTsKICAgIHdoaWxlIChiYXNlICE9IG51bGwgJiYgY29udGV4dC5sZW5ndGgpCiAgICAgIGJhc2UgPSBiYXNlW2NvbnRleHQucG9wKCkuc3RyaW5nXTsKICAgIGlmIChiYXNlICE9IG51bGwpIGdhdGhlckNvbXBsZXRpb25zKGJhc2UpOwogIH0KICBlbHNlIHsKICAgIC8vIElmIG5vdCwganVzdCBsb29rIGluIHRoZSB3aW5kb3cgb2JqZWN0IGFuZCBhbnkgbG9jYWwgc2NvcGUKICAgIC8vIChyZWFkaW5nIGludG8gSlMgbW9kZSBpbnRlcm5hbHMgdG8gZ2V0IGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMpCiAgICBmb3IgKHZhciB2ID0gdG9rZW4uc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KSBtYXliZUFkZCh2Lm5hbWUpOwogICAgZ2F0aGVyQ29tcGxldGlvbnMod2luZG93KTsKICAgIGZvckVhY2goa2V5d29yZHMsIG1heWJlQWRkKTsKICB9CiAgcmV0dXJuIGZvdW5kOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+UHJlc3MgPHN0cm9uZz5jdHJsLXNwYWNlPC9zdHJvbmc+IHRvIGFjdGl2YXRlIGF1dG9jb21wbGV0aW9uLiBTZWUKdGhlIDxhIGhyZWY9ImNvbXBsZXRlLmpzIj5jb2RlPC9hPiB0byBmaWd1cmUgb3V0IGhvdyBpdCB3b3Jrcy48L3A+CgogICAgPHNjcmlwdCBzcmM9ImNvbXBsZXRlLmpzIj48L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICAvLyBNaW5pbWFsIGV2ZW50LWhhbmRsaW5nIHdyYXBwZXIuCiAgZnVuY3Rpb24gc3RvcEV2ZW50KCkgewogICAgaWYgKHRoaXMucHJldmVudERlZmF1bHQpIHt0aGlzLnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7fQogICAgZWxzZSB7dGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB0aGlzLmNhbmNlbEJ1YmJsZSA9IHRydWU7fQogIH0KICBmdW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50LnN0b3ApIGV2ZW50LnN0b3AgPSBzdG9wRXZlbnQ7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSwgdHlwZSwgaGFuZGxlcikgewogICAgZnVuY3Rpb24gd3JhcEhhbmRsZXIoZXZlbnQpIHtoYW5kbGVyKGFkZFN0b3AoZXZlbnQgfHwgd2luZG93LmV2ZW50KSk7fQogICAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gImZ1bmN0aW9uIikKICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHdyYXBIYW5kbGVyLCBmYWxzZSk7CiAgICBlbHNlCiAgICAgIG5vZGUuYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTsKICB9CgogIGZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGFyci5sZW5ndGg7IGkgPCBlOyArK2kpIGYoYXJyW2ldKTsKICB9CgogIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgIHRoZW1lOiAibmlnaHQiLAogICAgb25LZXlFdmVudDogZnVuY3Rpb24oaSwgZSkgewogICAgICAvLyBIb29rIGludG8gY3RybC1zcGFjZQogICAgICBpZiAoZS5rZXlDb2RlID09IDMyICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiAhZS5hbHRLZXkpIHsKICAgICAgICBlLnN0b3AoKTsKICAgICAgICByZXR1cm4gc3RhcnRDb21wbGV0ZSgpOwogICAgICB9CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIHN0YXJ0Q29tcGxldGUoKSB7CiAgICAvLyBXZSB3YW50IGEgc2luZ2xlIGN1cnNvciBwb3NpdGlvbi4KICAgIGlmIChlZGl0b3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkgcmV0dXJuOwogICAgLy8gRmluZCB0aGUgdG9rZW4gYXQgdGhlIGN1cnNvcgogICAgdmFyIGN1ciA9IGVkaXRvci5nZXRDdXJzb3IoZmFsc2UpLCB0b2tlbiA9IGVkaXRvci5nZXRUb2tlbkF0KGN1ciksIHRwcm9wID0gdG9rZW47CiAgICAvLyBJZiBpdCdzIG5vdCBhICd3b3JkLXN0eWxlJyB0b2tlbiwgaWdub3JlIHRoZSB0b2tlbi4KICAgIGlmICghL15bXHckX10qJC8udGVzdCh0b2tlbi5zdHJpbmcpKSB7CiAgICAgIHRva2VuID0gdHByb3AgPSB7c3RhcnQ6IGN1ci5jaCwgZW5kOiBjdXIuY2gsIHN0cmluZzogIiIsIHN0YXRlOiB0b2tlbi5zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHRva2VuLnN0cmluZyA9PSAiLiIgPyAicHJvcGVydHkiIDogbnVsbH07CiAgICB9CiAgICAvLyBJZiBpdCBpcyBhIHByb3BlcnR5LCBmaW5kIG91dCB3aGF0IGl0IGlzIGEgcHJvcGVydHkgb2YuCiAgICB3aGlsZSAodHByb3AuY2xhc3NOYW1lID09ICJwcm9wZXJ0eSIpIHsKICAgICAgdHByb3AgPSBlZGl0b3IuZ2V0VG9rZW5BdCh7bGluZTogY3VyLmxpbmUsIGNoOiB0cHJvcC5zdGFydH0pOwogICAgICBpZiAodHByb3Auc3RyaW5nICE9ICIuIikgcmV0dXJuOwogICAgICB0cHJvcCA9IGVkaXRvci5nZXRUb2tlbkF0KHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgIGlmICghY29udGV4dCkgdmFyIGNvbnRleHQgPSBbXTsKICAgICAgY29udGV4dC5wdXNoKHRwcm9wKTsKICAgIH0KICAgIHZhciBjb21wbGV0aW9ucyA9IGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KTsKICAgIGlmICghY29tcGxldGlvbnMubGVuZ3RoKSByZXR1cm47CiAgICBmdW5jdGlvbiBpbnNlcnQoc3RyKSB7CiAgICAgIGVkaXRvci5yZXBsYWNlUmFuZ2Uoc3RyLCB7bGluZTogY3VyLmxpbmUsIGNoOiB0b2tlbi5zdGFydH0sIHtsaW5lOiBjdXIubGluZSwgY2g6IHRva2VuLmVuZH0pOwogICAgfQogICAgLy8gV2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBjb21wbGV0aW9uLCB1c2UgaXQgZGlyZWN0bHkuCiAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID09IDEpIHtpbnNlcnQoY29tcGxldGlvbnNbMF0pOyByZXR1cm4gdHJ1ZTt9CgogICAgLy8gQnVpbGQgdGhlIHNlbGVjdCB3aWRnZXQKICAgIHZhciBjb21wbGV0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgY29tcGxldGUuY2xhc3NOYW1lID0gImNvbXBsZXRpb25zIjsKICAgIHZhciBzZWwgPSBjb21wbGV0ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSk7CiAgICBzZWwubXVsdGlwbGUgPSB0cnVlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wbGV0aW9ucy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgb3B0ID0gc2VsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTsKICAgICAgb3B0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbXBsZXRpb25zW2ldKSk7CiAgICB9CiAgICBzZWwuZmlyc3RDaGlsZC5zZWxlY3RlZCA9IHRydWU7CiAgICBzZWwuc2l6ZSA9IE1hdGgubWluKDEwLCBjb21wbGV0aW9ucy5sZW5ndGgpOwogICAgdmFyIHBvcyA9IGVkaXRvci5jdXJzb3JDb29yZHMoKTsKICAgIGNvbXBsZXRlLnN0eWxlLmxlZnQgPSBwb3MueCArICJweCI7CiAgICBjb21wbGV0ZS5zdHlsZS50b3AgPSBwb3MueUJvdCArICJweCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbXBsZXRlKTsKICAgIC8vIEhhY2sgdG8gaGlkZSB0aGUgc2Nyb2xsYmFyLgogICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA8PSAxMCkKICAgICAgY29tcGxldGUuc3R5bGUud2lkdGggPSAoc2VsLmNsaWVudFdpZHRoIC0gMSkgKyAicHgiOwoKICAgIHZhciBkb25lID0gZmFsc2U7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGRvbmUpIHJldHVybjsKICAgICAgZG9uZSA9IHRydWU7CiAgICAgIGNvbXBsZXRlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29tcGxldGUpOwogICAgfQogICAgZnVuY3Rpb24gcGljaygpIHsKICAgICAgaW5zZXJ0KHNlbC5vcHRpb25zW3NlbC5zZWxlY3RlZEluZGV4XS50ZXh0KTsKICAgICAgY2xvc2UoKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe2VkaXRvci5mb2N1cygpO30sIDUwKTsKICAgIH0KICAgIGNvbm5lY3Qoc2VsLCAiYmx1ciIsIGNsb3NlKTsKICAgIGNvbm5lY3Qoc2VsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZTsKICAgICAgLy8gRW50ZXIgYW5kIHNwYWNlCiAgICAgIGlmIChjb2RlID09IDEzIHx8IGNvZGUgPT0gMzIpIHtldmVudC5zdG9wKCk7IHBpY2soKTt9CiAgICAgIC8vIEVzY2FwZQogICAgICBlbHNlIGlmIChjb2RlID09IDI3KSB7ZXZlbnQuc3RvcCgpOyBjbG9zZSgpOyBlZGl0b3IuZm9jdXMoKTt9CiAgICAgIGVsc2UgaWYgKGNvZGUgIT0gMzggJiYgY29kZSAhPSA0MCkge2Nsb3NlKCk7IGVkaXRvci5mb2N1cygpOyBzZXRUaW1lb3V0KHN0YXJ0Q29tcGxldGUsIDUwKTt9CiAgICB9KTsKICAgIGNvbm5lY3Qoc2VsLCAiZGJsY2xpY2siLCBwaWNrKTsKCiAgICBzZWwuZm9jdXMoKTsKICAgIC8vIE9wZXJhIHNvbWV0aW1lcyBpZ25vcmVzIGZvY3VzaW5nIGEgZnJlc2hseSBjcmVhdGVkIG5vZGUKICAgIGlmICh3aW5kb3cub3BlcmEpIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZiAoIWRvbmUpIHNlbC5mb2N1cygpO30sIDEwMCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZhciBzdHJpbmdQcm9wcyA9ICgiY2hhckF0IGNoYXJDb2RlQXQgaW5kZXhPZiBsYXN0SW5kZXhPZiBzdWJzdHJpbmcgc3Vic3RyIHNsaWNlIHRyaW0gdHJpbUxlZnQgdHJpbVJpZ2h0ICIgKwogICAgICAgICAgICAgICAgICAgICAidG9VcHBlckNhc2UgdG9Mb3dlckNhc2Ugc3BsaXQgY29uY2F0IG1hdGNoIHJlcGxhY2Ugc2VhcmNoIikuc3BsaXQoIiAiKTsKICB2YXIgYXJyYXlQcm9wcyA9ICgibGVuZ3RoIGNvbmNhdCBqb2luIHNwbGljZSBwdXNoIHBvcCBzaGlmdCB1bnNoaWZ0IHNsaWNlIHJldmVyc2Ugc29ydCBpbmRleE9mICIgKwogICAgICAgICAgICAgICAgICAgICJsYXN0SW5kZXhPZiBldmVyeSBzb21lIGZpbHRlciBmb3JFYWNoIG1hcCByZWR1Y2UgcmVkdWNlUmlnaHQgIikuc3BsaXQoIiAiKTsKICB2YXIgZnVuY1Byb3BzID0gInByb3RvdHlwZSBhcHBseSBjYWxsIGJpbmQiLnNwbGl0KCIgIik7CiAgdmFyIGtleXdvcmRzID0gKCJicmVhayBjYXNlIGNhdGNoIGNvbnRpbnVlIGRlYnVnZ2VyIGRlZmF1bHQgZGVsZXRlIGRvIGVsc2UgZmFsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgICJpZiBpbiBpbnN0YW5jZW9mIG5ldyBudWxsIHJldHVybiBzd2l0Y2ggdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHZhciB2b2lkIHdoaWxlIHdpdGgiKS5zcGxpdCgiICIpOwoKICBmdW5jdGlvbiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCkgewogICAgdmFyIGZvdW5kID0gW10sIHN0YXJ0ID0gdG9rZW4uc3RyaW5nOwogICAgZnVuY3Rpb24gbWF5YmVBZGQoc3RyKSB7CiAgICAgIGlmIChzdHIuaW5kZXhPZihzdGFydCkgPT0gMCkgZm91bmQucHVzaChzdHIpOwogICAgfQogICAgZnVuY3Rpb24gZ2F0aGVyQ29tcGxldGlvbnMob2JqKSB7CiAgICAgIGlmICh0eXBlb2Ygb2JqID09ICJzdHJpbmciKSBmb3JFYWNoKHN0cmluZ1Byb3BzLCBtYXliZUFkZCk7CiAgICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSBmb3JFYWNoKGFycmF5UHJvcHMsIG1heWJlQWRkKTsKICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRnVuY3Rpb24pIGZvckVhY2goZnVuY1Byb3BzLCBtYXliZUFkZCk7CiAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSBtYXliZUFkZChuYW1lKTsKICAgIH0KCiAgICBpZiAoY29udGV4dCkgewogICAgICAvLyBJZiB0aGlzIGlzIGEgcHJvcGVydHksIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNvbWUgb2JqZWN0IHdlIGNhbgogICAgICAvLyBmaW5kIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICB2YXIgb2JqID0gY29udGV4dC5wb3AoKSwgYmFzZTsKICAgICAgaWYgKG9iai5jbGFzc05hbWUgPT0gInZhcmlhYmxlIikKICAgICAgICBiYXNlID0gd2luZG93W29iai5zdHJpbmddOwogICAgICBlbHNlIGlmIChvYmouY2xhc3NOYW1lID09ICJzdHJpbmciKQogICAgICAgIGJhc2UgPSAiIjsKICAgICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAiYXRvbSIpCiAgICAgICAgYmFzZSA9IDE7CiAgICAgIHdoaWxlIChiYXNlICE9IG51bGwgJiYgY29udGV4dC5sZW5ndGgpCiAgICAgICAgYmFzZSA9IGJhc2VbY29udGV4dC5wb3AoKS5zdHJpbmddOwogICAgICBpZiAoYmFzZSAhPSBudWxsKSBnYXRoZXJDb21wbGV0aW9ucyhiYXNlKTsKICAgIH0KICAgIGVsc2UgewogICAgICAvLyBJZiBub3QsIGp1c3QgbG9vayBpbiB0aGUgd2luZG93IG9iamVjdCBhbmQgYW55IGxvY2FsIHNjb3BlCiAgICAgIC8vIChyZWFkaW5nIGludG8gSlMgbW9kZSBpbnRlcm5hbHMgdG8gZ2V0IGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMpCiAgICAgIGZvciAodmFyIHYgPSB0b2tlbi5zdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpIG1heWJlQWRkKHYubmFtZSk7CiAgICAgIGdhdGhlckNvbXBsZXRpb25zKHdpbmRvdyk7CiAgICAgIGZvckVhY2goa2V5d29yZHMsIG1heWJlQWRkKTsKICAgIH0KICAgIHJldHVybiBmb3VuZDsKICB9Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/fullscreen.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogRnVsbCBTY3JlZW4gRWRpdGluZzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL25pZ2h0LmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY3NzL2RvY3MuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSJodHRwOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNi4xL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO30KICAgICAgICAuZnVsbHNjcmVlbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgei1pbmRleDogOTk5OTsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICBib3JkZXI6IDBweCBzb2xpZCAjQkJCQkJCOwogICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogRnVsbCBTY3JlZW4gRWRpdGluZzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIiByb3dzPSI1Ij4KICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio4IHNwYWNlcyBzaG91bGQgYmUKICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fdGFiTW9kZSI+PGNvZGU+dGFiTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogIDxkZD5EZXRlcm1pbmVzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIHRhYiBrZXkuCiAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPiJjbGFzc2ljIiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICBiZWhhdmUgbGlrZSB0aGUgPGNvZGU+InNoaWZ0IjwvY29kZT4gbW9kZS4gKFdoZW4gc2hpZnQgaXMKICAgICAgaGVsZCwgdGhpcyBiZWhhdmVzIGxpa2UgdGhlIDxjb2RlPiJpbmRlbnQiPC9jb2RlPiBtb2RlLik8L2RkPgogICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kZW50IGFsbCBzZWxlY3RlZCBsaW5lcyBieQogICAgICBvbmUgPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0PC9jb2RlPjwvYT4uCiAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICBsaW5lcyBvbmUgdW5pdC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImluZGVudCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgY29udGV4dC4gT25seSB3b3JrcyBpZiB0aGUKICAgICAgbW9kZSA8YSBocmVmPSIjaW5kZW50Ij5zdXBwb3J0czwvYT4gaXQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGNhcHR1cmUgdGFiIHByZXNzZXMsIGxldCB0aGUgYnJvd3NlciBhcHBseSBpdHMKICAgICAgZGVmYXVsdCBiZWhhdmlvdXIgKHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgc2tpcHMgdG8gdGhlIG5leHQKICAgICAgY29udHJvbCkuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCjwvdGV4dGFyZWE+PC9mb3JtPgogPHNjcmlwdD4KCihmdW5jdGlvbiAoKSB7CgogICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICB0aGVtZTogIm5pZ2h0IiwKICAgICAgICBvbktleUV2ZW50OiBmdW5jdGlvbihpLCBlKSB7CiAgICAgICAgICAvLyBIb29rIGludG8gRjExCiAgICAgICAgICBpZiAoKGUua2V5Q29kZSA9PSAxMjIgfHwgZS5rZXlDb2RlID09IDI3KSAmJiBlLnR5cGUgPT0gJ2tleWRvd24nKSB7CiAgICAgICAgICAgIGUuc3RvcCgpOwogICAgICAgICAgICByZXR1cm4gdG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICBmdW5jdGlvbiB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZygpCiAgICB7CiAgICAgICAgdmFyIGVkaXRvckRpdiA9ICQoJy5Db2RlTWlycm9yLXNjcm9sbCcpOwogICAgICAgIGlmICghZWRpdG9yRGl2Lmhhc0NsYXNzKCdmdWxsc2NyZWVuJykpIHsKICAgICAgICAgICAgdG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcuYmVmb3JlRnVsbHNjcmVlbiA9IHsgaGVpZ2h0OiBlZGl0b3JEaXYuaGVpZ2h0KCksIHdpZHRoOiBlZGl0b3JEaXYud2lkdGgoKSB9CiAgICAgICAgICAgIGVkaXRvckRpdi5hZGRDbGFzcygnZnVsbHNjcmVlbicpOwogICAgICAgICAgICBlZGl0b3JEaXYuaGVpZ2h0KCcxMDAlJyk7CiAgICAgICAgICAgIGVkaXRvckRpdi53aWR0aCgnMTAwJScpOwogICAgICAgICAgICBlZGl0b3IucmVmcmVzaCgpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZWRpdG9yRGl2LnJlbW92ZUNsYXNzKCdmdWxsc2NyZWVuJyk7CiAgICAgICAgICAgIGVkaXRvckRpdi5oZWlnaHQodG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcuYmVmb3JlRnVsbHNjcmVlbi5oZWlnaHQpOwogICAgICAgICAgICBlZGl0b3JEaXYud2lkdGgodG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcuYmVmb3JlRnVsbHNjcmVlbi53aWR0aCk7CiAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7CiAgICAgICAgfQogICAgfQoKfSkoKTsKPC9zY3JpcHQ+CgogICAgPHA+UHJlc3MgPHN0cm9uZz5GMTE8L3N0cm9uZz4gKG9yIDxzdHJvbmc+RVNDPC9zdHJvbmc+IGluIFNhZmFyaSBvbiBNYWMgT1MgWCkgd2hlbiBjdXJzb3IgaXMgaW4gdGhlIGVkaXRvciB0byB0b2dnbGUgZnVsbCBzY3JlZW4gZWRpdGluZy48L3A+CgogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBEb2VzIG5vdCBjdXJyZW50bHkgd29yayBjb3JyZWN0bHkgaW4gSUUKICAgIDYgYW5kIDcsIHdoZXJlIHNldHRpbmcgdGhlIGhlaWdodCBvZiBzb21ldGhpbmcKICAgIHRvIDxjb2RlPjEwMCU8L2NvZGU+IGRvZXNuJ3QgbWFrZSBpdCBmdWxsLXNjcmVlbi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/marker.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQnJlYWtwb2ludCBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL2RlZmF1bHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Nzcy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICAgICAgICB3aWR0aDogM2VtOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICB9CiAgICAgIC5Db2RlTWlycm9yIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEJyZWFrcG9pbnQgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogIGxpbmVOdW1iZXJzOiB0cnVlLAogIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICBlbHNlCiAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgfQp9KTsKPC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5DbGljayB0aGUgbGluZS1udW1iZXIgZ3V0dGVyIHRvIGFkZCBvciByZW1vdmUgJ2JyZWFrcG9pbnRzJy48L3A+CgogICAgPHNjcmlwdD4KICAgICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICAgICAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgICAgICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgICAgICAgfQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/mustache.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogT3ZlcmxheSBQYXJzZXIgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9vdmVybGF5LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvZGVmYXVsdC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUveG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Nzcy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO30KICAgICAgLmNtLW11c3RhY2hlIHtjb2xvcjogIzBjYTt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IE92ZXJsYXkgUGFyc2VyIERlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CjxodG1sPgogIDxib2R5PgogICAgPGgxPnt7dGl0bGV9fTwvaDE+CiAgICA8cD5UaGVzZSBhcmUgbGlua3MgdG8ge3t0aGluZ3N9fTo8L3A+CiAgICA8dWw+e3sjbGlua3N9fQogICAgICA8bGk+PGEgaHJlZj0ie3t1cmx9fSI+e3t0ZXh0fX08L2E+PC9saT4KICAgIHt7L2xpbmtzfX08L3VsPgogIDwvYm9keT4KPC9odG1sPgo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgpDb2RlTWlycm9yLmRlZmluZU1vZGUoIm11c3RhY2hlIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgbXVzdGFjaGVPdmVybGF5ID0gewogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5tYXRjaCgie3siKSkgewogICAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKQogICAgICAgICAgaWYgKGNoID09ICJ9IiAmJiBzdHJlYW0ubmV4dCgpID09ICJ9IikgYnJlYWs7CiAgICAgICAgcmV0dXJuICJtdXN0YWNoZSI7CiAgICAgIH0KICAgICAgd2hpbGUgKHN0cmVhbS5uZXh0KCkgIT0gbnVsbCAmJiAhc3RyZWFtLm1hdGNoKCJ7eyIsIGZhbHNlKSkge30KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfTsKICByZXR1cm4gQ29kZU1pcnJvci5vdmVybGF5UGFyc2VyKENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHBhcnNlckNvbmZpZy5iYWNrZHJvcCB8fCAidGV4dC9odG1sIiksIG11c3RhY2hlT3ZlcmxheSk7Cn0pOwp2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6ICJtdXN0YWNoZSJ9KTsKPC9zY3JpcHQ+CgogICAgPHA+RGVtb25zdHJhdGlvbiBvZiBhIG1vZGUgdGhhdCBwYXJzZXMgSFRNTCwgaGlnaGxpZ2h0aW5nCiAgICB0aGUgPGEgaHJlZj0iaHR0cDovL211c3RhY2hlLmdpdGh1Yi5jb20vIj5NdXN0YWNoZTwvYT4gdGVtcGxhdGluZwogICAgZGlyZWN0aXZlcyBpbnNpZGUgb2YgaXQgYnkgdXNpbmcgdGhlIGNvZGUKICAgIGluIDxhIGhyZWY9Ii4uL2xpYi9vdmVybGF5LmpzIj48Y29kZT5vdmVybGF5LmpzPC9jb2RlPjwvYT4uIFZpZXcKICAgIHNvdXJjZSB0byBzZWUgdGhlIDE1IGxpbmVzIG9mIGNvZGUgbmVlZGVkIHRvIGFjY29tcGxpc2ggdGhpcy48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/preview.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogSFRNTDUgcHJldmlldzwvdGl0bGU+CiAgICA8bWV0YSBjaGFyc2V0PXV0Zi04PgogICAgPHNjcmlwdCBzcmM9Li4vbGliL2NvZGVtaXJyb3IuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL3htbC94bWwuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcz48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPS4uL21vZGUvY3NzL2Nzcy5qcz48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPS4uL21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcz48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD1zdHlsZXNoZWV0IGhyZWY9Li4vbGliL2NvZGVtaXJyb3IuY3NzPgogICAgPGxpbmsgcmVsPXN0eWxlc2hlZXQgaHJlZj0uLi90aGVtZS9kZWZhdWx0LmNzcz4KICAgIDxsaW5rIHJlbD1zdHlsZXNoZWV0IGhyZWY9Li4vY3NzL2RvY3MuY3NzPgogICAgPHN0eWxlIHR5cGU9dGV4dC9jc3M+CiAgICAgIC5Db2RlTWlycm9yIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICB9CiAgICAgIGlmcmFtZSB7CiAgICAgICAgd2lkdGg6IDQ5JTsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgIGJvcmRlci1sZWZ0OiAwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogSFRNTDUgcHJldmlldzwvaDE+CiAgICA8dGV4dGFyZWEgaWQ9Y29kZSBuYW1lPWNvZGU+CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KICA8aGVhZD4KICAgIDx0aXRsZT5IVE1MNSBjYW52YXMgZGVtbzwvdGl0bGU+CiAgICA8bWV0YSBjaGFyc2V0PXV0Zi04PgogIDwvaGVhZD4KICA8Ym9keT4KICAgPHA+Q2FudmFzIHBhbmUgZ29lcyBoZXJlOjwvcD4KICAgIDxjYW52YXMgaWQ9dHV0b3JpYWwgd2lkdGg9MjUwIGhlaWdodD0yNTA+PC9jYW52YXM+CiAgICA8c2NyaXB0PgogICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R1dG9yaWFsJyk7CiAgICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7CgogICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICdyZ2IoMjUwLDAsMCknOwogICAgICBjb250ZXh0LmZpbGxSZWN0KDEwLCAxMCwgNTUsIDUwKTsKCiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYmEoMCwgMCwgMjUwLCAwLjUpJzsKICAgICAgY29udGV4dC5maWxsUmVjdCgzMCwgMzAsIDU1LCA1MCk7CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4KPC90ZXh0YXJlYT4KICAgIDxpZnJhbWUgaWQ9cHJldmlldz48L2lmcmFtZT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBkZWxheTsKICAgICAgLy8gSW5pdGlhbGl6ZSBDb2RlTWlycm9yIGVkaXRvciB3aXRoIGEgbmljZSBodG1sNSBjYW52YXMgZGVtby4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2RlJyksIHsKICAgICAgICBtb2RlOiAndGV4dC9odG1sJywKICAgICAgICB0YWJNb2RlOiAnaW5kZW50JywKICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQoZGVsYXkpOwogICAgICAgICAgZGVsYXkgPSBzZXRUaW1lb3V0KHVwZGF0ZVByZXZpZXcsIDMwMCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgCiAgICAgIGZ1bmN0aW9uIHVwZGF0ZVByZXZpZXcoKSB7CiAgICAgICAgdmFyIHByZXZpZXdGcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmV2aWV3Jyk7CiAgICAgICAgdmFyIHByZXZpZXcgPSAgcHJldmlld0ZyYW1lLmNvbnRlbnREb2N1bWVudCB8fCAgcHJldmlld0ZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7CiAgICAgICAgcHJldmlldy5vcGVuKCk7CiAgICAgICAgcHJldmlldy53cml0ZShlZGl0b3IuZ2V0VmFsdWUoKSk7CiAgICAgICAgcHJldmlldy5jbG9zZSgpOwogICAgICB9CiAgICAgIHNldFRpbWVvdXQodXBkYXRlUHJldmlldywgMzAwKTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/resize.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQXV0b3Jlc2l6ZSBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL2RlZmF1bHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2Nzcy9jc3MuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9jc3MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlOwogICAgICB9CiAgICAgIC5Db2RlTWlycm9yLXNjcm9sbCB7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEF1dG9yZXNpemUgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBoZWlnaHQ6IGF1dG87CiAgb3ZlcmZsb3cteTogaGlkZGVuOwogIG92ZXJmbG93LXg6IGF1dG87CiAgd2lkdGg6IDEwMCUKfTwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+Qnkgc2V0dGluZyBhIGZldyBDU1MgcHJvcGVydGllcywgQ29kZU1pcnJvciBjYW4gYmUgbWFkZSB0bwphdXRvbWF0aWNhbGx5IHJlc2l6ZSB0byBmaXQgaXRzIGNvbnRlbnQuPC9wPgoKICAgIDxzY3JpcHQ+CiAgICAgIENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/runmode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogTW9kZSBSdW5uZXIgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9ydW5tb2RlLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvZGVmYXVsdC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUveG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Nzcy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogTW9kZSBSdW5uZXIgRGVtbzwvaDE+CgogICAgPHRleHRhcmVhIGlkPSJjb2RlIiBzdHlsZT0id2lkdGg6IDkwJTsgaGVpZ2h0OiA3ZW07IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOiAuMmVtIC40ZW07Ij4KPGZvb2Jhcj4KICA8YmxhaD5FbnRlciB5b3VyIHhtbCBoZXJlIGFuZCBwcmVzcyB0aGUgYnV0dG9uIGJlbG93IHRvIGRpc3BsYXkKICAgIGl0IGFzIGhpZ2hsaWdodGVkIGJ5IHRoZSBDb2RlTWlycm9yIFhNTCBtb2RlPC9ibGFoPgogIDx0YWcyIGZvbz0iMiIgYmFyPSImYW1wO3F1b3Q7YmFyJmFtcDtxdW90OyIvPgo8L2Zvb2Jhcj48L3RleHRhcmVhPjxicj4KICAgIDxidXR0b24gb25jbGljaz0iZG9IaWdobGlnaHQoKTsiPkhpZ2hsaWdodCE8L2J1dHRvbj4KICAgIDxwcmUgaWQ9Im91dHB1dCIgY2xhc3M9ImNtLXMtZGVmYXVsdCI+PC9wcmU+CgogICAgPHNjcmlwdD4KZnVuY3Rpb24gZG9IaWdobGlnaHQoKSB7CiAgQ29kZU1pcnJvci5ydW5Nb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIikudmFsdWUsICJhcHBsaWNhdGlvbi94bWwiLAogICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3V0cHV0IikpOwp9Cjwvc2NyaXB0PgoKICAgIDxwPlJ1bm5pbmcgYSBDb2RlTWlycm9yIG1vZGUgb3V0c2lkZSBvZiB0aGUgZWRpdG9yLgogICAgVGhlIDxjb2RlPkNvZGVNaXJyb3IucnVuTW9kZTwvY29kZT4gZnVuY3Rpb24sIGRlZmluZWQKICAgIGluIDxjb2RlPjxhIGhyZWY9Ii4uL2xpYi9ydW5tb2RlLmpzIj5saWIvcnVubW9kZS5qczwvYT48L2NvZGU+IHRha2VzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT50ZXh0IChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgZG9jdW1lbnQgdG8gcnVuIHRocm91Z2ggdGhlIGhpZ2hsaWdodGVyLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5tb2RlICg8YSBocmVmPSIuLi9tYW51YWwuaHRtbCNvcHRpb25fbW9kZSI+bW9kZSBzcGVjPC9hPik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBtb2RlIHRvIHVzZSAobXVzdCBiZSBsb2FkZWQgYXMgbm9ybWFsKS48L2RkPgogICAgICA8ZHQ+PGNvZGU+b3V0cHV0IChmdW5jdGlvbiBvciBET00gbm9kZSk8L2NvZGU+PC9kdD4KICAgICAgPGRkPklmIHRoaXMgaXMgYSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggdG9rZW4gd2l0aAogICAgICB0d28gYXJndW1lbnRzLCB0aGUgdG9rZW4ncyB0ZXh0IGFuZCB0aGUgdG9rZW4ncyBzdHlsZSBjbGFzcyAobWF5CiAgICAgIGJlIDxjb2RlPm51bGw8L2NvZGU+IGZvciB1bnN0eWxlZCB0b2tlbnMpLiBJZiBpdCBpcyBhIERPTSBub2RlLAogICAgICB0aGUgdG9rZW5zIHdpbGwgYmUgY29udmVydGVkIHRvIDxjb2RlPnNwYW48L2NvZGU+IGVsZW1lbnRzIGFzIGluCiAgICAgIGFuIGVkaXRvciwgYW5kIGluc2VydGVkIGludG8gdGhlIG5vZGUKICAgICAgKHRocm91Z2ggPGNvZGU+aW5uZXJIVE1MPC9jb2RlPikuPC9kZD4KICAgIDwvZGw+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/search.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogU2VhcmNoL1JlcGxhY2UgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY3NzL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICAuc2VhcmNoZWQge2JhY2tncm91bmQ6IHllbGxvdzt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IFNlYXJjaC9SZXBsYWNlIERlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiAgPGR0IGlkPSJvcHRpb25faW5kZW50V2l0aFRhYnMiPjxjb2RlPmluZGVudFdpdGhUYWJzIChib29sZWFuKTwvY29kZT48L2R0PgogIDxkZD5XaGV0aGVyLCB3aGVuIGluZGVudGluZywgdGhlIGZpcnN0IE4qOCBzcGFjZXMgc2hvdWxkIGJlCiAgcmVwbGFjZWQgYnkgTiB0YWJzLiBEZWZhdWx0IGlzIGZhbHNlLjwvZGQ+CgogIDxkdCBpZD0ib3B0aW9uX3RhYk1vZGUiPjxjb2RlPnRhYk1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSB0YWIga2V5LgogIE11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iY2xhc3NpYyIgKHRoZSBkZWZhdWx0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkLCBpbnNlcnQgYSB0YWIuIE90aGVyd2lzZSwKICAgICAgYmVoYXZlIGxpa2UgdGhlIDxjb2RlPiJzaGlmdCI8L2NvZGU+IG1vZGUuIChXaGVuIHNoaWZ0IGlzCiAgICAgIGhlbGQsIHRoaXMgYmVoYXZlcyBsaWtlIHRoZSA8Y29kZT4iaW5kZW50IjwvY29kZT4gbW9kZS4pPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJzaGlmdCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGVudCBhbGwgc2VsZWN0ZWQgbGluZXMgYnkKICAgICAgb25lIDxhIGhyZWY9IiNvcHRpb25faW5kZW50VW5pdCI+PGNvZGU+aW5kZW50VW5pdDwvY29kZT48L2E+LgogICAgICBJZiBzaGlmdCB3YXMgaGVsZCB3aGlsZSBwcmVzc2luZyB0YWIsIHVuLWluZGVudCBhbGwgc2VsZWN0ZWQKICAgICAgbGluZXMgb25lIHVuaXQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJpbmRlbnQiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlICdjb3JyZWN0bHknLCBiYXNlZCBvbiBpdHMgc3ludGFjdGljCiAgICAgIGNvbnRleHQuIE9ubHkgd29ya3MgaWYgdGhlCiAgICAgIG1vZGUgPGEgaHJlZj0iI2luZGVudCI+c3VwcG9ydHM8L2E+IGl0LjwvZGQ+CiAgICAgIDxkdD48Y29kZT4iZGVmYXVsdCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkRvIG5vdCBjYXB0dXJlIHRhYiBwcmVzc2VzLCBsZXQgdGhlIGJyb3dzZXIgYXBwbHkgaXRzCiAgICAgIGRlZmF1bHQgYmVoYXZpb3VyICh3aGljaCB1c3VhbGx5IG1lYW5zIGl0IHNraXBzIHRvIHRoZSBuZXh0CiAgICAgIGNvbnRyb2wpLjwvZGQ+CiAgICA8L2RsPjwvZGQ+CgogIDxkdCBpZD0ib3B0aW9uX2VudGVyTW9kZSI+PGNvZGU+ZW50ZXJNb2RlIChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgPGRkPkRldGVybWluZXMgd2hldGhlciBhbmQgaG93IG5ldyBsaW5lcyBhcmUgaW5kZW50ZWQgd2hlbiB0aGUKICBlbnRlciBrZXkgaXMgcHJlc3NlZC4gVGhlIGZvbGxvd2luZyBtb2RlcyBhcmUgc3VwcG9ydGVkOgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+ImluZGVudCIgKHRoZSBkZWZhdWx0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VXNlIHRoZSBtb2RlJ3MgaW5kZW50YXRpb24gcnVsZXMgdG8gZ2l2ZSB0aGUgbmV3IGxpbmUKICAgICAgdGhlIGNvcnJlY3QgaW5kZW50YXRpb24uPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJrZWVwIjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kZW50IHRoZSBsaW5lIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT4iZmxhdCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkRvIG5vdCBpbmRlbnQgdGhlIG5ldyBsaW5lLjwvZGQ+CiAgICA8L2RsPjwvZGQ+CjwvdGV4dGFyZWE+PC9mb3JtPgo8YnV0dG9uIHR5cGU9YnV0dG9uIG9uY2xpY2s9InNlYXJjaCgpIj5TZWFyY2g8L2J1dHRvbj4KPGlucHV0IHR5cGU9dGV4dCBzdHlsZT0id2lkdGg6IDVlbSIgaWQ9cXVlcnkgdmFsdWU9aW5kZW50PiBvcgo8YnV0dG9uIHR5cGU9YnV0dG9uIG9uY2xpY2s9InJlcGxhY2UoKSI+cmVwbGFjZTwvYnV0dG9uPiBpdCBieQo8aW5wdXQgdHlwZT10ZXh0IHN0eWxlPSJ3aWR0aDogNWVtIiBpZD1yZXBsYWNlPgoKICAgIDxzY3JpcHQ+CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7bW9kZTogInRleHQvaHRtbCIsIGxpbmVOdW1iZXJzOiB0cnVlfSk7Cgp2YXIgbGFzdFBvcyA9IG51bGwsIGxhc3RRdWVyeSA9IG51bGwsIG1hcmtlZCA9IFtdOwoKZnVuY3Rpb24gdW5tYXJrKCkgewogIGZvciAodmFyIGkgPSAwOyBpIDwgbWFya2VkLmxlbmd0aDsgKytpKSBtYXJrZWRbaV0oKTsKICBtYXJrZWQubGVuZ3RoID0gMDsKfQoKZnVuY3Rpb24gc2VhcmNoKCkgewogIHVubWFyaygpOyAgICAgICAgICAgICAgICAgICAgIAogIHZhciB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1ZXJ5IikudmFsdWU7CiAgaWYgKCF0ZXh0KSByZXR1cm47CiAgZm9yICh2YXIgY3Vyc29yID0gZWRpdG9yLmdldFNlYXJjaEN1cnNvcih0ZXh0KTsgY3Vyc29yLmZpbmROZXh0KCk7KQogICAgbWFya2VkLnB1c2goZWRpdG9yLm1hcmtUZXh0KGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpLCAic2VhcmNoZWQiKSk7CgogIGlmIChsYXN0UXVlcnkgIT0gdGV4dCkgbGFzdFBvcyA9IG51bGw7CiAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRTZWFyY2hDdXJzb3IodGV4dCwgbGFzdFBvcyB8fCBlZGl0b3IuZ2V0Q3Vyc29yKCkpOwogIGlmICghY3Vyc29yLmZpbmROZXh0KCkpIHsKICAgIGN1cnNvciA9IGVkaXRvci5nZXRTZWFyY2hDdXJzb3IodGV4dCk7CiAgICBpZiAoIWN1cnNvci5maW5kTmV4dCgpKSByZXR1cm47CiAgfQogIGVkaXRvci5zZXRTZWxlY3Rpb24oY3Vyc29yLmZyb20oKSwgY3Vyc29yLnRvKCkpOwogIGxhc3RRdWVyeSA9IHRleHQ7IGxhc3RQb3MgPSBjdXJzb3IudG8oKTsKfQoKZnVuY3Rpb24gcmVwbGFjZSgpIHsKICB1bm1hcmsoKTsKICB2YXIgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJxdWVyeSIpLnZhbHVlLAogICAgICByZXBsYWNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlcGxhY2UiKS52YWx1ZTsKICBpZiAoIXRleHQpIHJldHVybjsKICBmb3IgKHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0U2VhcmNoQ3Vyc29yKHRleHQpOyBjdXJzb3IuZmluZE5leHQoKTspCiAgICBjdXJzb3IucmVwbGFjZShyZXBsYWNlKTsKfQo8L3NjcmlwdD4KCiAgICA8cD5EZW1vbnN0cmF0aW9uIG9mIHNlYXJjaC9yZXBsYWNlIGZ1bmN0aW9uYWxpdHkgYW5kIG1hcmtpbmcKICAgIHRleHQuPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/theme.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogVGhlbWUgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL25lYXQuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvZWxlZ2FudC5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9uaWdodC5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9jb2JhbHQuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvZWNsaXBzZS5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY3NzL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBUaGVtZSBkZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgpmdW5jdGlvbiBmaW5kU2VxdWVuY2UoZ29hbCkgewogIGZ1bmN0aW9uIGZpbmQoc3RhcnQsIGhpc3RvcnkpIHsKICAgIGlmIChzdGFydCA9PSBnb2FsKQogICAgICByZXR1cm4gaGlzdG9yeTsKICAgIGVsc2UgaWYgKHN0YXJ0ID4gZ29hbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBlbHNlCiAgICAgIHJldHVybiBmaW5kKHN0YXJ0ICsgNSwgIigiICsgaGlzdG9yeSArICIgKyA1KSIpIHx8CiAgICAgICAgICAgICBmaW5kKHN0YXJ0ICogMywgIigiICsgaGlzdG9yeSArICIgKiAzKSIpOwogIH0KICByZXR1cm4gZmluZCgxLCAiMSIpOwp9PC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5TZWxlY3QgYSB0aGVtZTogPHNlbGVjdCBvbmNoYW5nZT0ic2VsZWN0VGhlbWUodGhpcykiPgogICAgPG9wdGlvbiBzZWxlY3RlZD5kZWZhdWx0PC9vcHRpb24+CiAgICA8b3B0aW9uPm5pZ2h0PC9vcHRpb24+CiAgICA8b3B0aW9uPm5lYXQ8L29wdGlvbj4KICAgIDxvcHRpb24+ZWxlZ2FudDwvb3B0aW9uPgogICAgPG9wdGlvbj5jb2JhbHQ8L29wdGlvbj4KICAgIDxvcHRpb24+ZWNsaXBzZTwvb3B0aW9uPgo8L3NlbGVjdD4KPC9wPgoKPHNjcmlwdD4KICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgbGluZU51bWJlcnM6IHRydWUKICB9KTsKICBmdW5jdGlvbiBzZWxlY3RUaGVtZShub2RlKSB7CiAgICB2YXIgdGhlbWUgPSBub2RlLm9wdGlvbnNbbm9kZS5zZWxlY3RlZEluZGV4XS5pbm5lckhUTUw7CiAgICBlZGl0b3Iuc2V0T3B0aW9uKCJ0aGVtZSIsIHRoZW1lKTsKICB9Cjwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImNzcy9kb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvdXNlcl90aW1lbGluZS8yNDIyODMyODgucnNzIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIi8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImNzcy9iYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogSW4tYnJvd3NlciBjb2RlIGVkaXRpbmcKICAgbWFkZSBiZWFyYWJsZSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0IGJsayI+CgogIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAwIj5Db2RlTWlycm9yIGlzIGEgSmF2YVNjcmlwdCBsaWJyYXJ5IHRoYXQgY2FuCiAgYmUgdXNlZCB0byBjcmVhdGUgYSByZWxhdGl2ZWx5IHBsZWFzYW50IGVkaXRvciBpbnRlcmZhY2UgZm9yCiAgY29kZS1saWtlIGNvbnRlbnQgJiN4MjAxNTsgY29tcHV0ZXIgcHJvZ3JhbXMsIEhUTUwgbWFya3VwLCBhbmQKICBzaW1pbGFyLiBJZiBhIG1vZGUgaGFzIGJlZW4gd3JpdHRlbiBmb3IgdGhlIGxhbmd1YWdlIHlvdSBhcmUKICBlZGl0aW5nLCB0aGUgY29kZSB3aWxsIGJlIGNvbG91cmVkLCBhbmQgdGhlIGVkaXRvciB3aWxsIG9wdGlvbmFsbHkKICBoZWxwIHlvdSB3aXRoIGluZGVudGF0aW9uLjwvcD4KCiAgPHA+VGhpcyBpcyB0aGUgcHJvamVjdCBwYWdlIGZvciBDb2RlTWlycm9yIDIsIHRoZSBjdXJyZW50bHkgbW9yZQogIGFjdGl2ZWx5IGRldmVsb3BlZCwgYW5kIHJlY29tbWVuZGVkCiAgdmVyc2lvbi4gPGEgaHJlZj0iMS9pbmRleC5odG1sIj5Db2RlTWlycm9yIDE8L2E+IGlzIHN0aWxsIGF2YWlsYWJsZQogIGZyb20gaGVyZS48L3A+CgogIDxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0MSBibGsiPgoKICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDogMCI+U3VwcG9ydGVkIG1vZGVzOjwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9jbGlrZS9pbmRleC5odG1sIj5DLCBKYXZhLCBDIywgYW5kIHNpbWlsYXI8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvY2xvanVyZS9pbmRleC5odG1sIj5DbG9qdXJlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2NvZmZlZXNjcmlwdC9pbmRleC5odG1sIj5Db2ZmZWVTY3JpcHQ8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvY3NzL2luZGV4Lmh0bWwiPkNTUzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9kaWZmL2luZGV4Lmh0bWwiPmRpZmY8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvamF2YXNjcmlwdC9pbmRleC5odG1sIj5KYXZhU2NyaXB0PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2hhc2tlbGwvaW5kZXguaHRtbCI+SGFza2VsbDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9odG1sbWl4ZWQvaW5kZXguaHRtbCI+SFRNTCBtaXhlZC1tb2RlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2ppbmphMi9pbmRleC5odG1sIj5KaW5qYTI8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvbHVhL2luZGV4Lmh0bWwiPkx1YTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9tYXJrZG93bi9pbmRleC5odG1sIj5NYXJrZG93bjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9udHJpcGxlcy9pbmRleC5odG1sIj5OVHJpcGxlczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9wYXNjYWwvaW5kZXguaHRtbCI+UGFzY2FsPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3BocC9pbmRleC5odG1sIj5QSFA8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcGxzcWwvaW5kZXguaHRtbCI+UEwvU1FMPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob248L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvci9pbmRleC5odG1sIj5SPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3JzdC9pbmRleC5odG1sIj5yZVN0cnVjdHVyZWRUZXh0PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3J1YnkvaW5kZXguaHRtbCI+UnVieTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9zY2hlbWUvaW5kZXguaHRtbCI+U2NoZW1lPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3NtYWxsdGFsay9pbmRleC5odG1sIj5TbWFsbHRhbGs8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc3BhcnFsL2luZGV4Lmh0bWwiPlNQQVJRTDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9zdGV4L2luZGV4Lmh0bWwiPnNUZVgsIExhVGVYPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3ZlbG9jaXR5L2luZGV4Lmh0bWwiPlZlbG9jaXR5PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3htbC9pbmRleC5odG1sIj5YTUwvSFRNTDwvYT4gKDxhIGhyZWY9Im1vZGUveG1scHVyZS9pbmRleC5odG1sIj5hbHRlcm5hdGl2ZSBYTUw8L2E+KTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3lhbWwvaW5kZXguaHRtbCI+WUFNTDwvYT48L2xpPgogICAgPC91bD4KCiAgPC9kaXY+PGRpdiBjbGFzcz0ibGVmdDIgYmxrIj4KCiAgICA8aDIgc3R5bGU9Im1hcmdpbi10b3A6IDAiPlVzYWdlIGRlbW9zOjwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9jb21wbGV0ZS5odG1sIj5BdXRvY29tcGxldGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9tdXN0YWNoZS5odG1sIj5Nb2RlIG92ZXJsYXlzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3NlYXJjaC5odG1sIj5TZWFyY2gvcmVwbGFjZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9wcmV2aWV3Lmh0bWwiPkhUTUwgZWRpdG9yIHdpdGggcHJldmlldzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9yZXNpemUuaHRtbCI+QXV0by1yZXNpemluZyBlZGl0b3I8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vbWFya2VyLmh0bWwiPlNldHRpbmcgYnJlYWtwb2ludHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vYWN0aXZlbGluZS5odG1sIj5IaWdobGlnaHRpbmcgdGhlIGN1cnJlbnQgbGluZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby90aGVtZS5odG1sIj5UaGVtaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3J1bm1vZGUuaHRtbCI+U3RhbmQtYWxvbmUgaGlnaGxpZ2h0aW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2Z1bGxzY3JlZW4uaHRtbCI+RnVsbC1zY3JlZW4gZWRpdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9jaGFuZ2Vtb2RlLmh0bWwiPk1vZGUgYXV0by1jaGFuZ2luZzwvYT48L2xpPgogICAgPC91bD4KCiAgPC9kaXY+PC9kaXY+CgogIDxoMiBpZD0iY29kZSI+R2V0dGluZyB0aGUgY29kZTwvaDI+CgogIDxwPkFsbCBvZiBDb2RlTWlycm9yIGlzIHJlbGVhc2VkIHVuZGVyIGEgPGEKICBocmVmPSJMSUNFTlNFIj5NSVQtc3R5bGU8L2E+IGxpY2Vuc2UuIFRvIGdldCBpdCwgeW91IGNhbiBkb3dubG9hZAogIHRoZSA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci56aXAiPmxhdGVzdAogIHJlbGVhc2U8L2E+IG9yIHRoZSBjdXJyZW50IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3IyLWxhdGVzdC56aXAiPmRldmVsb3BtZW50CiAgc25hcHNob3Q8L2E+IGFzIHppcCBmaWxlcy4gVG8gY3JlYXRlIGEgY3VzdG9tIG1pbmlmaWVkIHNjcmlwdCBmaWxlLAogIHlvdSBjYW4gdXNlIHRoZSA8YSBocmVmPSJjb21wcmVzcy5odG1sIj5jb21wcmVzc2lvbiBBUEk8L2E+LjwvcD4KCiAgPHA+V2UgdXNlIDxhIGhyZWY9Imh0dHA6Ly9naXQtc2NtLmNvbS8iPmdpdDwvYT4gZm9yIHZlcnNpb24gY29udHJvbC4KICBUaGUgbWFpbiByZXBvc2l0b3J5IGNhbiBiZSBmZXRjaGVkIGluIHRoaXMgd2F5OjwvcD4KCiAgPHByZSBjbGFzcz0iY29kZSI+Z2l0IGNsb25lIGh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyPC9wcmU+CgogIDxwPkNvZGVNaXJyb3IgY2FuIGFsc28gYmUgZm91bmQgb24gR2l0SHViIGF0IDxhCiAgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yMiI+bWFyaWpuaC9Db2RlTWlycm9yMjwvYT4uCiAgSWYgeW91IHBsYW4gdG8gaGFjayBvbiB0aGUgY29kZSBhbmQgY29udHJpYnV0ZSBwYXRjaGVzLCB0aGUgYmVzdCB3YXkKICB0byBkbyBpdCBpcyB0byBjcmVhdGUgYSBHaXRIdWIgZm9yaywgYW5kIHNlbmQgcHVsbCByZXF1ZXN0cy48L3A+CgogIDxoMiBpZD0iZG9jdW1lbnRpb24iPkRvY3VtZW50YXRpb248L2gyPgoKICA8cD5UaGUgPGEgaHJlZj0ibWFudWFsLmh0bWwiPm1hbnVhbDwvYT4gaXMgeW91ciBmaXJzdCBzdG9wIGZvcgogIGxlYXJuaW5nIGhvdyB0byB1c2UgdGhpcyBsaWJyYXJ5LiBJdCBzdGFydHMgd2l0aCBhIHF1aWNrIGV4cGxhbmF0aW9uCiAgb2YgaG93IHRvIHVzZSB0aGUgZWRpdG9yLCBhbmQgdGhlbiBkZXNjcmliZXMgYWxsIG9mIHRoZSAobWFueSkKICBvcHRpb25zIGFuZCBtZXRob2RzIHRoYXQgQ29kZU1pcnJvciBleHBvc2VzLjwvcD4KCiAgPHA+Rm9yIHRob3NlIHdobyB3YW50IHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIGNvZGUsIHRoZXJlIGlzCiAgYW4gPGEgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPm92ZXJ2aWV3IG9mIHRoZSBpbnRlcm5hbHM8L2E+IGF2YWlsYWJsZS4KICBUaGUgPGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yMiI+c291cmNlIGNvZGU8L2E+CiAgaXRzZWxmIGlzLCBmb3IgdGhlIG1vc3QgcGFydCwgYWxzbyB3ZWxsIGNvbW1lbnRlZC48L3A+CgogIDxoMiBpZD0ic3VwcG9ydCI+U3VwcG9ydCBhbmQgYnVnIHJlcG9ydHM8L2gyPgoKICA8cD5UaGVyZSBpcwogIGEgPGEgaHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2NvZGVtaXJyb3IiPkdvb2dsZQogIGdyb3VwPC9hPiAoYSBzb3J0IG9mIG1haWxpbmcgbGlzdC9uZXdzZ3JvdXAgdGhpbmcpIGZvciBkaXNjdXNzaW9uCiAgYW5kIG5ld3MgcmVsYXRlZCB0byBDb2RlTWlycm9yLiBSZXBvcnRpbmcgYnVncyBpcyBiZXN0IGRvbmUKICBvbiA8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9tYXJpam5oL0NvZGVNaXJyb3IyL2lzc3VlcyI+Z2l0aHViPC9hPi4KICBZb3UgY2FuIGFsc28gZS1tYWlsIG1lCiAgZGlyZWN0bHk6IDxhIGhyZWY9Im1haWx0bzptYXJpam5oQGdtYWlsLmNvbSI+TWFyaWpuCiAgSGF2ZXJiZWtlPC9hPi48L3A+CgogIDxoMiBpZD0ic3VwcG9ydGVkIj5TdXBwb3J0ZWQgYnJvd3NlcnM8L2gyPgoKICA8cD5UaGUgZm9sbG93aW5nIGJyb3dzZXJzIGFyZSBhYmxlIHRvIHJ1biBDb2RlTWlycm9yOjwvcD4KCiAgPHVsPgogICAgPGxpPkZpcmVmb3ggMiBvciBoaWdoZXI8L2xpPgogICAgPGxpPkNocm9tZSwgYW55IHZlcnNpb248L2xpPgogICAgPGxpPlNhZmFyaSAzIG9yIGhpZ2hlcjwvbGk+CiAgICA8bGk+SW50ZXJuZXQgRXhwbG9yZXIgNiBvciBoaWdoZXI8L2xpPgogICAgPGxpPk9wZXJhIDkgb3IgaGlnaGVyICh3aXRoIHNvbWUga2V5LWhhbmRsaW5nIHByb2JsZW1zIG9uIE9TIFgpPC9saT4KICA8L3VsPgoKICA8cD5JIGFtIG5vdCBhY3RpdmVseSB0ZXN0aW5nIGFnYWluc3QgZXZlcnkgbmV3IGJyb3dzZXIgcmVsZWFzZSwgYW5kCiAgdmVuZG9ycyBoYXZlIGEgaGFiaXQgb2YgaW50cm9kdWNpbmcgYnVncyBhbGwgdGhlIHRpbWUsIHNvIEkgYW0KICByZWx5aW5nIG9uIHRoZSBjb21tdW5pdHkgdG8gdGVsbCBtZSB3aGVuIHNvbWV0aGluZyBicmVha3MuCiAgU2VlIDxhIGhyZWY9IiNzdXBwb3J0Ij5oZXJlPC9hPiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QKICBtZS48L3A+Cgo8L2Rpdj4KCjxkaXYgY2xhc3M9InJpZ2h0IGJsayI+CgogIDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLnppcCIgY2xhc3M9ImRvd25sb2FkIj5Eb3dubG9hZCB0aGUgbGF0ZXN0IHJlbGVhc2U8L2E+CgogIDxoMj5NYWtlIGEgZG9uYXRpb248L2gyPgoKICA8dWw+CiAgICA8bGk+PHNwYW4gb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BheXBhbCcpLnN1Ym1pdCgpOyIgY2xhc3M9InF1YXNpbGluayI+UGF5cGFsPC9zcGFuPjwvbGk+CiAgICA8bGk+PHNwYW4gb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhbmtpbmZvJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IiBjbGFzcz0icXVhc2lsaW5rIj5CYW5rPC9zcGFuPjwvbGk+CiAgPC91bD4KCiAgPHAgaWQ9ImJhbmtpbmZvIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgQmFuazogPGk+UmFib2Jhbms8L2k+PGJyLz4KICAgIENvdW50cnk6IDxpPk5ldGhlcmxhbmRzPC9pPjxici8+CiAgICBTV0lGVDogPGk+UkFCT05MMlU8L2k+PGJyLz4KICAgIEFjY291bnQ6IDxpPjE0Nzg1MDc3MDwvaT48YnIvPgogICAgTmFtZTogPGk+TWFyaWpuIEhhdmVyYmVrZTwvaT48YnIvPgogICAgSUJBTjogPGk+TkwyNiBSQUJPIDAxNDcgODUwNyA3MDwvaT4KICA8L3A+CgogIDxoMj5SZWxlYXNlczo8L2gyPgoKICA8cCBjbGFzcz0icmVsIj4yNi0wOS0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjE1LnppcCI+VmVyc2lvbiAyLjE1PC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5GaXggYnVnIHRoYXQgc251Y2sgaW50byAyLjE0OiBDbGlja2luZyB0aGUKICBjaGFyYWN0ZXIgdGhhdCBjdXJyZW50bHkgaGFzIHRoZSBjdXJzb3IgZGlkbid0IHJlLWZvY3VzIHRoZQogIGVkaXRvci48L3A+CgogIDxwIGNsYXNzPSJyZWwiPjI2LTA5LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTQuemlwIj5WZXJzaW9uIDIuMTQ8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgPGEgaHJlZj0ibW9kZS9jbG9qdXJlL2luZGV4Lmh0bWwiPkNsb2p1cmU8L2E+LCA8YSBocmVmPSJtb2RlL3Bhc2NhbC9pbmRleC5odG1sIj5QYXNjYWw8L2E+LCA8YSBocmVmPSJtb2RlL250cmlwbGVzL2luZGV4Lmh0bWwiPk5UcmlwbGVzPC9hPiwgPGEgaHJlZj0ibW9kZS9qaW5qYTIvaW5kZXguaHRtbCI+SmluamEyPC9hPiwgYW5kIDxhIGhyZWY9Im1vZGUvbWFya2Rvd24vaW5kZXguaHRtbCI+TWFya2Rvd248L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9InRoZW1lL2NvYmFsdC5jc3MiPkNvYmFsdDwvYT4gYW5kIDxhIGhyZWY9InRoZW1lL2VjbGlwc2UuY3NzIj5FY2xpcHNlPC9hPiB0aGVtZXMuPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtYW51YWwuaHRtbCNvcHRpb25fZml4ZWRHdXR0ZXIiPjxjb2RlPmZpeGVkR3V0dGVyPC9jb2RlPjwvYT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+Rml4IGJ1ZyB3aXRoIDxjb2RlPnNldFZhbHVlPC9jb2RlPiBicmVha2luZyBjdXJzb3IgbW92ZW1lbnQuPC9saT4KICAgIDxsaT5NYWtlIGd1dHRlciB1cGRhdGVzIG11Y2ggbW9yZSBlZmZpY2llbnQuPC9saT4KICAgIDxsaT5BbGxvdyBkcmFnZ2luZyBvZiB0ZXh0IG91dCBvZiB0aGUgZWRpdG9yIChvbiBtb2Rlcm4gYnJvd3NlcnMpLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjMtMDgtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xMy56aXAiPlZlcnNpb24gMi4xMzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCA8YSBocmVmPSJtb2RlL3J1YnkvaW5kZXguaHRtbCI+UnVieTwvYT4sIDxhIGhyZWY9Im1vZGUvci9pbmRleC5odG1sIj5SPC9hPiwgPGEgaHJlZj0ibW9kZS9jb2ZmZWVzY3JpcHQvaW5kZXguaHRtbCI+Q29mZmVlU2NyaXB0PC9hPiwgYW5kIDxhIGhyZWY9Im1vZGUvdmVsb2NpdHkvaW5kZXguaHRtbCI+VmVsb2NpdHk8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1hbnVhbC5odG1sI2dldEd1dHRlckVsZW1lbnQiPjxjb2RlPmdldEd1dHRlckVsZW1lbnQ8L2NvZGU+PC9hPiB0byBBUEkuPC9saT4KICAgIDxsaT5TZXZlcmFsIGZpeGVzIHRvIHNjcm9sbGluZyBhbmQgcG9zaXRpb25pbmcuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0ibWFudWFsLmh0bWwjb3B0aW9uX3NtYXJ0SG9tZSI+PGNvZGU+c21hcnRIb21lPC9jb2RlPjwvYT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+QWRkIGFuIGV4cGVyaW1lbnRhbCA8YSBocmVmPSJtb2RlL3htbHB1cmUvaW5kZXguaHRtbCI+cHVyZSBYTUw8L2E+IG1vZGUuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yNS0wNy0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjEyLnppcCI+VmVyc2lvbiAyLjEyPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0ibW9kZS9zcGFycWwvaW5kZXguaHRtbCI+U1BBUlFMPC9hPiBtb2RlLjwvbGk+CiAgICA8bGk+Rml4IGJ1ZyB3aXRoIGN1cnNvciBqdW1waW5nIGFyb3VuZCBpbiBhbiB1bmZvY3VzZWQgZWRpdG9yIGluIElFLjwvbGk+CiAgICA8bGk+QWxsb3cga2V5IGFuZCBtb3VzZSBldmVudHMgdG8gYnViYmxlIG91dCBvZiB0aGUgZWRpdG9yLiBJZ25vcmUgd2lkZ2V0IGNsaWNrcy48L2xpPgogICAgPGxpPlNvbHZlIGN1cnNvciBmbGFraW5lc3MgYWZ0ZXIgdW5kby9yZWRvLjwvbGk+CiAgICA8bGk+Rml4IGJsb2NrLXJlaW5kZW50IGlnbm9yaW5nIHRoZSBsYXN0IGZldyBsaW5lcy48L2xpPgogICAgPGxpPkZpeCBwYXJzaW5nIG9mIG11bHRpLWxpbmUgYXR0cnMgaW4gWE1MIG1vZGUuPC9saT4KICAgIDxsaT5Vc2UgPGNvZGU+aW5uZXJIVE1MPC9jb2RlPiBmb3IgSFRNTC1lc2NhcGluZy48L2xpPgogICAgPGxpPlNvbWUgZml4ZXMgdG8gaW5kZW50YXRpb24gaW4gQy1saWtlIG1vZGUuPC9saT4KICAgIDxsaT5TaHJpbmsgaG9yaXogc2Nyb2xsYmFycyB3aGVuIGxvbmcgbGluZXMgcmVtb3ZlZC48L2xpPgogICAgPGxpPkZpeCB3aWR0aCBmZWVkYmFjayBsb29wIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgd2lkdGggb2YgYW4gaW5uZXIgRElWIHRvIHNocmluay48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjA0LTA3LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTEuemlwIj5WZXJzaW9uIDIuMTE8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtb2RlL3NjaGVtZS9pbmRleC5odG1sIj5TY2hlbWUgbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8Y29kZT5yZXBsYWNlPC9jb2RlPiBtZXRob2QgdG8gc2VhcmNoIGN1cnNvcnMsIGZvciBjdXJzb3ItcHJlc2VydmluZyByZXBsYWNlbWVudHMuPC9saT4KICAgIDxsaT5NYWtlIHRoZSA8YSBocmVmPSJtb2RlL2NsaWtlL2luZGV4Lmh0bWwiPkMtbGlrZSBtb2RlPC9hPiBtb2RlIG1vcmUgY3VzdG9taXplYWJsZS48L2xpPgogICAgPGxpPlVwZGF0ZSBYTUwgbW9kZSB0byBzcG90IG1pc21hdGNoZWQgdGFncy48L2xpPgogICAgPGxpPkFkZCA8Y29kZT5nZXRTdGF0ZUFmdGVyPC9jb2RlPiBBUEkgYW5kIDxjb2RlPmNvbXBhcmVTdGF0ZTwvY29kZT4gbW9kZSBBUEkgbWV0aG9kcyBmb3IgZmluZXItZ3JhaW5lZCBtb2RlIG1hZ2ljLjwvbGk+CiAgICA8bGk+QWRkIGEgPGNvZGU+Z2V0U2Nyb2xsZXJFbGVtZW50PC9jb2RlPiBBUEkgbWV0aG9kIHRvIG1hbmlwdWxhdGUgdGhlIHNjcm9sbGluZyBESVYuPC9saT4KICAgIDxsaT5GaXggZHJhZy1hbmQtZHJvcCBmb3IgRmlyZWZveC48L2xpPgogICAgPGxpPkFkZCBhIEMjIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSA8YSBocmVmPSJtb2RlL2NsaWtlL2luZGV4Lmh0bWwiPkMtbGlrZSBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCA8YSBocmVmPSJkZW1vL2Z1bGxzY3JlZW4uaHRtbCI+ZnVsbC1zY3JlZW4gZWRpdGluZzwvYT4gYW5kIDxhIGhyZWY9ImRlbW8vY2hhbmdlbW9kZS5odG1sIj5tb2RlLWNoYW5naW5nPC9hPiBkZW1vcy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjA3LTA2LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMS56aXAiPlZlcnNpb24gMi4xPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5BZGQKICBhIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl90aGVtZSI+dGhlbWU8L2E+IHN5c3RlbQogICg8YSBocmVmPSJkZW1vL3RoZW1lLmh0bWwiPmRlbW88L2E+KS4gTm90ZSB0aGF0IHRoaXMgaXMgbm90CiAgYmFja3dhcmRzLWNvbXBhdGlibGXigJR5b3UnbGwgaGF2ZSB0byB1cGRhdGUgeW91ciBzdHlsZXMgYW5kCiAgbW9kZXMhPC9wPgoKICA8cCBjbGFzcz0icmVsIj4wNy0wNi0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjAyLnppcCI+VmVyc2lvbiAyLjAyPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0ibW9kZS9sdWEvaW5kZXguaHRtbCI+THVhIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+Rml4IHJldmVyc2Utc2VhcmNoaW5nIGZvciBhIHJlZ2V4cC48L2xpPgogICAgPGxpPkVtcHR5IGxpbmVzIGNhbiBubyBsb25nZXIgYnJlYWsgaGlnaGxpZ2h0aW5nLjwvbGk+CiAgICA8bGk+UmV3b3JrIHNjcm9sbGluZyBtb2RlbCAodGhlIG91dGVyIHdyYXBwZXIgbm8gbG9uZ2VyIGRvZXMgdGhlIHNjcm9sbGluZykuPC9saT4KICAgIDxsaT5Tb2x2ZSBob3Jpem9udGFsIGppdHRlcmluZyBvbiBsb25nIGxpbmVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRlbW8vcnVubW9kZS5odG1sIj5ydW5tb2RlLmpzPC9hPi48L2xpPgogICAgPGxpPkltbWVkaWF0ZWx5IHJlLWhpZ2hsaWdodCB0ZXh0IHdoZW4gdHlwaW5nLjwvbGk+CiAgICA8bGk+Rml4IHByb2JsZW0gd2l0aCAnc3RpY2tpbmcnIGhvcml6b250YWwgc2Nyb2xsYmFyLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjYtMDUtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4wMS56aXAiPlZlcnNpb24gMi4wMTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Im1vZGUvc21hbGx0YWxrL2luZGV4Lmh0bWwiPlNtYWxsdGFsayBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Im1vZGUvcnN0L2luZGV4Lmh0bWwiPnJlU3RydWN0dXJlZFRleHQgbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtb2RlL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob24gbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtb2RlL3Bsc3FsL2luZGV4Lmh0bWwiPlBML1NRTCBtb2RlPC9hPi48L2xpPgogICAgPGxpPjxjb2RlPmNvb3Jkc0NoYXI8L2NvZGU+IG5vdyB3b3JrczwvbGk+CiAgICA8bGk+Rml4IGEgcHJvYmxlbSB3aGVyZSA8Y29kZT5vbkN1cnNvckFjdGl2aXR5PC9jb2RlPiBpbnRlcmZlcmVkIHdpdGggPGNvZGU+b25DaGFuZ2U8L2NvZGU+LjwvbGk+CiAgICA8bGk+Rml4IGEgbnVtYmVyIG9mIHNjcm9sbGluZyBhbmQgbW91c2UtY2xpY2stcG9zaXRpb24gZ2xpdGNoZXMuPC9saT4KICAgIDxsaT5QYXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFuZ2VkIGxpbmVzIHRvIDxjb2RlPm9uQ2hhbmdlPC9jb2RlPi48L2xpPgogICAgPGxpPlN1cHBvcnQgY21kLXVwL2Rvd24gb24gT1MgWC48L2xpPgogICAgPGxpPkFkZCB0cmlwbGUtY2xpY2sgbGluZSBzZWxlY3Rpb24uPC9saT4KICAgIDxsaT5Eb24ndCBoYW5kbGUgc2hpZnQgd2hlbiBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uIHRocm91Z2ggdGhlIEFQSS48L2xpPgogICAgPGxpPlN1cHBvcnQgPGNvZGU+Im5vY3Vyc29yIjwvY29kZT4gbW9kZSBmb3IgPGNvZGU+cmVhZE9ubHk8L2NvZGU+IG9wdGlvbi48L2xpPgogICAgPGxpPkFkZCBhbiA8Y29kZT5vbkhpZ2hsaWdodENvbXBsZXRlPC9jb2RlPiBvcHRpb24uPC9saT4KICAgIDxsaT5GaXggdGhlIGNvbnRleHQgbWVudSBmb3IgRmlyZWZveC48L2xpPgogIDwvdWw+CgogIDxwPjxhIGhyZWY9Im9sZHJlbGVhc2UuaHRtbCI+T2xkZXIgcmVsZWFzZXMuLi48L2E+PC9wPgoKPC9kaXY+PC9kaXY+Cgo8ZGl2IHN0eWxlPSJoZWlnaHQ6IDJlbSI+Jm5ic3A7PC9kaXY+CgogIDxmb3JtIGFjdGlvbj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9jZ2ktYmluL3dlYnNjciIgbWV0aG9kPSJwb3N0IiBpZD0icGF5cGFsIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNtZCIgdmFsdWU9Il9zLXhjbGljayIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaG9zdGVkX2J1dHRvbl9pZCIgdmFsdWU9IjNGVkhTNUZHVVk3Q0MiLz4KICA8L2Zvcm0+CgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/internals.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEludGVybmFsczwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iY3NzL2RvY3MuY3NzIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPgogICAgPHN0eWxlPmRsIGRsIHttYXJnaW46IDA7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImNzcy9iYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogKFJlLSkgSW1wbGVtZW50aW5nIEEgU3ludGF4LQogICBIaWdobGlnaHRpbmcgRWRpdG9yIGluIEphdmFTY3JpcHQgKi8KPC9wcmU+Cgo8ZGl2IGNsYXNzPSJjbGVhciI+PGRpdiBjbGFzcz0ibGVmdGJpZyBibGsiPgoKPHAgc3R5bGU9ImZvbnQtc2l6ZTogODUlIiBpZD0iaW50cm8iPgogIDxzdHJvbmc+VG9waWM6PC9zdHJvbmc+IEphdmFTY3JpcHQsIGNvZGUgZWRpdG9yIGltcGxlbWVudGF0aW9uPGJyPgogIDxzdHJvbmc+QXV0aG9yOjwvc3Ryb25nPiBNYXJpam4gSGF2ZXJiZWtlPGJyPgogIDxzdHJvbmc+RGF0ZTo8L3N0cm9uZz4gTWFyY2ggMm5kIDIwMTEKPC9wPgoKPHA+VGhpcyBpcyBhIGZvbGxvd3VwIHRvCm15IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5CcnV0YWwgT2R5c3NleSB0byB0aGUKRGFyayBTaWRlIG9mIHRoZSBET00gVHJlZTwvYT4gc3RvcnkuIFRoYXQgb25lIGRlc2NyaWJlcyB0aGUKbWluZC1iZW5kaW5nIHByb2Nlc3Mgb2YgaW1wbGVtZW50aW5nICh3aGF0IHdvdWxkIGJlY29tZSkgQ29kZU1pcnJvciAxLgpUaGlzIG9uZSBkZXNjcmliZXMgdGhlIGludGVybmFscyBvZiBDb2RlTWlycm9yIDIsIGEgY29tcGxldGUgcmV3cml0ZQphbmQgcmV0aGluayBvZiB0aGUgb2xkIGNvZGUgYmFzZS4gSSB3YW50ZWQgdG8gZ2l2ZSB0aGlzIHBpZWNlIGFub3RoZXIKSHVudGVyIFRob21wc29uIGNvcHljYXQgc3VidGl0bGUsIGJ1dCBzb21laG93IHRoYXQgd291bGQgYmUgb3V0IG9mCnBsYWNl4oCUdGhlIHByb2Nlc3MgdGhpcyB0aW1lIGFyb3VuZCB3YXMgb25lIG9mIHN0cmFpZ2h0Zm9yd2FyZAplbmdpbmVlcmluZywgcmVxdWlyaW5nIG5vIHNlcmlvdXMgbWluZC1iZW5kaW5nIHdoYXRzb2V2ZXIuPC9wPgoKPHA+U28sIHdoYXQgaXMgd3Jvbmcgd2l0aCBDb2RlTWlycm9yIDE/IEknZCBlc3RpbWF0ZSwgYnkgbWFpbGluZyBsaXN0CmFjdGl2aXR5IGFuZCBnZW5lcmFsIHNlYXJjaC1lbmdpbmUgcHJlc2VuY2UsIHRoYXQgaXQgaGFzIGJlZW4KaW50ZWdyYXRlZCBpbnRvIGFib3V0IGEgdGhvdXNhbmQgc3lzdGVtcyBieSBub3cuIFRoZSBtb3N0IHByb21pbmVudApvbmUsIHNpbmNlIGEgZmV3IHdlZWtzLApiZWluZyA8YSBocmVmPSJodHRwOi8vZ29vZ2xlY29kZS5ibG9nc3BvdC5jb20vMjAxMS8wMS9tYWtlLXF1aWNrLWZpeGVzLXF1aWNrZXItb24tZ29vZ2xlLmh0bWwiPkdvb2dsZQpjb2RlJ3MgcHJvamVjdCBob3N0aW5nPC9hPi4gSXQgd29ya3MsIGFuZCBpdCdzIGJlaW5nIHVzZWQgd2lkZWx5LjwvYT4KCjxwPlN0aWxsLCBJIGRpZCBub3Qgc3RhcnQgcmVwbGFjaW5nIGl0IGJlY2F1c2UgSSB3YXMgYm9yZWQuIENvZGVNaXJyb3IKMSB3YXMgaGVhdmlseSByZWxpYW50IG9uIDxjb2RlPmRlc2lnbk1vZGU8L2NvZGU+Cm9yIDxjb2RlPmNvbnRlbnRFZGl0YWJsZTwvY29kZT4gKGRlcGVuZGluZyBvbiB0aGUgYnJvd3NlcikuIE5laXRoZXIgb2YKdGhlc2UgYXJlIHdlbGwgc3BlY2lmaWVkIChIVE1MNSB0cmllcwp0byA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lZGl0aW5nLmh0bWwjY29udGVudGVkaXRhYmxlIj5zcGVjaWZ5PC9hPgp0aGVpciBiYXNpY3MpLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZXkgdGVuZCB0byBiZSBvbmUgb2YgdGhlIG1vcmUKb2JzY3VyZSBhbmQgYnVnZ3kgYXJlYXMgb2YgYnJvd3NlciBmdW5jdGlvbmFsaXR54oCUQ29kZU1pcnJvciwgYnkgdXNpbmcKdGhpcyBmdW5jdGlvbmFsaXR5IGluIGEgbm9uLXR5cGljYWwgd2F5LCB3YXMgY29uc3RhbnRseSBydW5uaW5nIHVwCmFnYWluc3QgYnJvd3NlciBidWdzLiBXZWJLaXQgd291bGRuJ3Qgc2hvdyBhbiBlbXB0eSBsaW5lIGF0IHRoZSBlbmQgb2YKdGhlIGRvY3VtZW50LCBhbmQgaW4gc29tZSByZWxlYXNlcyB3b3VsZCBzdWRkZW5seSBnZXQgdW5iZWFyYWJseSBzbG93LgpGaXJlZm94IHdvdWxkIHNob3cgdGhlIGN1cnNvciBpbiB0aGUgd3JvbmcgcGxhY2UuIEludGVybmV0IEV4cGxvcmVyCndvdWxkIGluc2lzdCBvbiBsaW5raWZ5aW5nIGV2ZXJ5dGhpbmcgdGhhdCBsb29rZWQgbGlrZSBhIFVSTCBvciBlbWFpbAphZGRyZXNzLCBhIGJlaGF2aW91ciB0aGF0IGNhbid0IGJlIHR1cm5lZCBvZmYuIFNvbWUgYnVncyBJIG1hbmFnZWQgdG8Kd29yayBhcm91bmQgKHdoaWNoIHdhcyBvZnRlbiBhIGZydXN0cmF0aW5nLCBwYWluZnVsIHByb2Nlc3MpLCBvdGhlcnMsCnN1Y2ggYXMgdGhlIEZpcmVmb3ggY3Vyc29yIHBsYWNlbWVudCwgSSBnYXZlIHVwIG9uLCBhbmQgaGFkIHRvIHRlbGwKdXNlciBhZnRlciB1c2VyIHRoYXQgdGhleSB3ZXJlIGtub3duIHByb2JsZW1zLCBidXQgbm90IHNvbWV0aGluZyBJCmNvdWxkIGhlbHAuPC9wPgoKPHA+QWxzbywgdGhlcmUgaXMgdGhlIGZhY3QgdGhhdCA8Y29kZT5kZXNpZ25Nb2RlPC9jb2RlPiAod2hpY2ggc2VlbWVkCnRvIGJlIGxlc3MgYnVnZ3kgdGhhbiA8Y29kZT5jb250ZW50RWRpdGFibGU8L2NvZGU+IGluIFdlYmtpdCBhbmQKRmlyZWZveCwgYW5kIHdhcyB0aHVzIHVzZWQgYnkgQ29kZU1pcnJvciAxIGluIHRob3NlIGJyb3dzZXJzKSByZXF1aXJlcwphIGZyYW1lLiBGcmFtZXMgYXJlIGFub3RoZXIgdHJpY2t5IGFyZWEuIEl0IHRha2VzIHNvbWUgZWZmb3J0IHRvCnByZXZlbnQgZ2V0dGluZyB0cmlwcGVkIHVwIGJ5IGRvbWFpbiByZXN0cmljdGlvbnMsIHRoZXkgZG9uJ3QKaW5pdGlhbGl6ZSBzeW5jaHJvbm91c2x5LCBiZWhhdmUgc3RyYW5nZWx5IGluIHJlc3BvbnNlIHRvIHRoZSBiYWNrCmJ1dHRvbiwgYW5kLCBvbiBzZXZlcmFsIGJyb3dzZXJzLCBjYW4ndCBiZSBtb3ZlZCBhcm91bmQgdGhlIERPTQp3aXRob3V0IGhhdmluZyB0aGVtIHJlLWluaXRpYWxpemUuIFRoZXkgZGlkIHByb3ZpZGUgYSB2ZXJ5IG5pY2Ugd2F5IHRvCm5hbWVzcGFjZSB0aGUgbGlicmFyeSwgdGhvdWdo4oCUQ29kZU1pcnJvciAxIGNvdWxkIGZyZWVseSBwb2xsdXRlIHRoZQpuYW1lc3BhY2UgaW5zaWRlIHRoZSBmcmFtZS48L3A+Cgo8cD5GaW5hbGx5LCB3b3JraW5nIHdpdGggYW4gZWRpdGFibGUgZG9jdW1lbnQgbWVhbnMgd29ya2luZyB3aXRoCnNlbGVjdGlvbiBpbiBhcmJpdHJhcnkgRE9NIHN0cnVjdHVyZXMuIEludGVybmV0IEV4cGxvcmVyICg4IGFuZApiZWZvcmUpIGhhcyBhbiB1dHRlcmx5IGRpZmZlcmVudCAoYW5kIGF3a3dhcmQpIHNlbGVjdGlvbiBBUEkgdGhhbiBhbGwKb2YgdGhlIG90aGVyIGJyb3dzZXJzLCBhbmQgZXZlbiBhbW9uZyB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZgo8Y29kZT5kb2N1bWVudC5zZWxlY3Rpb248L2NvZGU+LCBkZXRhaWxzIGFib3V0IGhvdyBleGFjdGx5IGEgc2VsZWN0aW9uCmlzIHJlcHJlc2VudGVkIHZhcnkgcXVpdGUgYSBiaXQuIEFkZCB0byB0aGF0IHRoZSBmYWN0IHRoYXQgT3BlcmEncwpzZWxlY3Rpb24gc3VwcG9ydCB0ZW5kZWQgdG8gYmUgdmVyeSBidWdneSB1bnRpbCByZWNlbnRseSwgYW5kIHlvdSBjYW4KaW1hZ2luZSB3aHkgQ29kZU1pcnJvciAxIGNvbnRhaW5zIDcwMCBsaW5lcyBvZiBzZWxlY3Rpb24taGFuZGxpbmcKY29kZS48L3A+Cgo8cD5BbmQgdGhhdCBicmluZ3MgdXMgdG8gdGhlIG1haW4gaXNzdWUgd2l0aCB0aGUgQ29kZU1pcnJvciAxCmNvZGUgYmFzZTogVGhlIHByb3BvcnRpb24gb2YgYnJvd3Nlci1idWctd29ya2Fyb3VuZHMgdG8gcmVhbAphcHBsaWNhdGlvbiBjb2RlIHdhcyBnZXR0aW5nIGRhbmdlcm91c2x5IGhpZ2guIEJ5IGJ1aWxkaW5nIG9uIHRvcCBvZiBhCmZldyBkb2RneSBmZWF0dXJlcywgSSBwdXQgdGhlIHN5c3RlbSBpbiBhIHZ1bG5lcmFibGUgcG9zaXRpb27igJRhbnkKaW5jb21wYXRpYmlsaXR5IGFuZCBidWdnaW5lc3MgaW4gdGhlc2UgZmVhdHVyZXMsIEkgaGFkIHRvIHBhcGVyIG92ZXIKd2l0aCBteSBvd24gY29kZS4gTm90IG9ubHkgZGlkIEkgaGF2ZSB0byBkbyBzb21lIHNlcmlvdXMgc3R1bnQtd29yayB0bwpnZXQgaXQgdG8gd29yayBvbiBvbGRlciBicm93c2VycyAoYXMgZGV0YWlsZWQgaW4gdGhlCnByZXZpb3VzIDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5zdG9yeTwvYT4pLCB0aGluZ3MKYWxzbyBrZXB0IGJyZWFraW5nIGluIG5ld2x5IHJlbGVhc2VkIHZlcnNpb25zLCByZXF1aXJpbmcgbWUgdG8gY29tZSB1cAp3aXRoIDxlbT5uZXc8L2VtPiBzY2FyeSBoYWNrcyBpbiBvcmRlciB0byBrZWVwIHVwLiBUaGlzIHdhcyBzdGFydGluZwp0byBsb3NlIGl0cyBhcHBlYWwuPC9wPgoKPGgyIGlkPSJhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvaDI+Cgo8cD5XaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHRyeSB0byBzaWRlc3RlcCBtb3N0IG9mIHRoZSBoYWlyeSBoYWNrcwp0aGF0IGNhbWUgdXAgaW4gdmVyc2lvbiAxLiBJIG93ZSBhIGxvdCB0byB0aGUKPGEgaHJlZj0iaHR0cDovL2FjZS5hamF4Lm9yZyI+QUNFPC9hPiBlZGl0b3IgZm9yIGluc3BpcmF0aW9uIG9uIGhvdyB0bwphcHByb2FjaCB0aGlzLjwvcD4KCjxwPkkgYWJzb2x1dGVseSBkaWQgbm90IHdhbnQgdG8gYmUgY29tcGxldGVseSByZWxpYW50IG9uIGtleSBldmVudHMgdG8KZ2VuZXJhdGUgbXkgaW5wdXQuIEV2ZXJ5IEphdmFTY3JpcHQgcHJvZ3JhbW1lciBrbm93cyB0aGF0IGtleSBldmVudAppbmZvcm1hdGlvbiBpcyBob3JyaWJsZSBhbmQgaW5jb21wbGV0ZS4gU29tZSBwZW9wbGUgKG1vc3QgYXdlc29tZWx5Ck1paGFpIEJhem9uIHdpdGggPGEgaHJlZj0iaHR0cDovL3ltYWNzLm9yZyI+WW1hY3M8L2E+KSBoYXZlIGJlZW4gYWJsZQp0byBidWlsZCBtb3JlIG9yIGxlc3MgZnVuY3Rpb25pbmcgZWRpdG9ycyBieSBkaXJlY3RseSByZWFkaW5nIGtleQpldmVudHMsIGJ1dCBpdCB0YWtlcyBhIGxvdCBvZiB3b3JrICh0aGUga2luZCBvZiBuZXZlci1lbmRpbmcsIGZyYWdpbGUKd29yayBJIGRlc2NyaWJlZCBlYXJsaWVyKSwgYW5kIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBwcm9wZXJseSBzdXBwb3J0CnRoaW5ncyBsaWtlIG11bHRpLWtleXN0b2tlIGludGVybmF0aW9uYWwgY2hhcmFjdGVyIGlucHV0LjwvcD4KCjxwPlNvIHdoYXQgSSBkbyBpcyBmb2N1cyBhIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGxldCB0aGUgYnJvd3NlcgpiZWxpZXZlIHRoYXQgdGhlIHVzZXIgaXMgdHlwaW5nIGludG8gdGhhdC4gV2hhdCB3ZSBzaG93IHRvIHRoZSB1c2VyIGlzCmEgRE9NIHN0cnVjdHVyZSB3ZSBidWlsdCB0byByZXByZXNlbnQgaGlzIGRvY3VtZW50LiBJZiB0aGlzIGlzIHVwZGF0ZWQKcXVpY2tseSBlbm91Z2gsIGFuZCBzaG93cyBzb21lIGtpbmQgb2YgYmVsaWV2YWJsZSBjdXJzb3IsIGl0IGZlZWxzCmxpa2UgYSByZWFsIHRleHQtaW5wdXQgY29udHJvbC48L3A+Cgo8cD5Bbm90aGVyIGJpZyB3aW4gaXMgdGhhdCB0aGlzIERPTSByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBoYXZlIHRvCnNwYW4gdGhlIHdob2xlIGRvY3VtZW50LiBTb21lIENvZGVNaXJyb3IgMSB1c2VycyBpbnNpc3RlZCB0aGF0IHRoZXkKbmVlZGVkIHRvIHB1dCBhIDMwIHRob3VzYW5kIGxpbmUgWE1MIGRvY3VtZW50IGludG8gQ29kZU1pcnJvci4gUHV0dGluZwphbGwgdGhhdCBpbnRvIHRoZSBET00gdGFrZXMgYSB3aGlsZSwgZXNwZWNpYWxseSBzaW5jZSwgZm9yIHNvbWUKcmVhc29uLCBhbiBlZGl0YWJsZSBET00gdHJlZSBpcyBzbG93ZXIgdGhhbiBhIG5vcm1hbCBvbmUgb24gbW9zdApicm93c2Vycy4gSWYgd2UgaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB3aGF0IHdlIHNob3csIHdlIG11c3Qgb25seQplbnN1cmUgdGhhdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBhZGRlZCwgYW5kIGNhbgpkbyB0aGUgcmVzdCBvbmx5IHdoZW4gbmVlZGVkLiAoRm9ydHVuYXRlbHksIHRoZSA8Y29kZT5vbnNjcm9sbDwvY29kZT4KZXZlbnQgd29ya3MgYWxtb3N0IHRoZSBzYW1lIG9uIGFsbCBicm93c2VycywgYW5kIGxlbmRzIGl0c2VsZiB3ZWxsIHRvCmRpc3BsYXlpbmcgdGhpbmdzIG9ubHkgYXMgdGhleSBhcmUgc2Nyb2xsZWQgaW50byB2aWV3Lik8L3A+Cgo8aDIgaWQ9ImlucHV0Ij5JbnB1dDwvaDI+Cgo8cD5BQ0UgdXNlcyBpdHMgaGlkZGVuIHRleHRhcmVhIG9ubHkgYXMgYSB0ZXh0IGlucHV0IHNoaW0sIGFuZCBkb2VzCmFsbCBjdXJzb3IgbW92ZW1lbnQgYW5kIHRoaW5ncyBsaWtlIHRleHQgZGVsZXRpb24gaXRzZWxmIGJ5IGRpcmVjdGx5CmhhbmRsaW5nIGtleSBldmVudHMuIENvZGVNaXJyb3IncyB3YXkgaXMgdG8gbGV0IHRoZSBicm93c2VyIGRvIGl0cwp0aGluZyBhcyBtdWNoIGFzIHBvc3NpYmxlLCBhbmQgbm90LCBmb3IgZXhhbXBsZSwgZGVmaW5lIGl0cyBvd24gc2V0IG9mCmtleSBiaW5kaW5ncy4gT25lIHdheSB0byBkbyB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0byBoYXZlIHRoZSB3aG9sZQpkb2N1bWVudCBpbnNpZGUgdGhlIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGFmdGVyIGVhY2gga2V5IGV2ZW50IHVwZGF0ZQp0aGUgZGlzcGxheSBET00gdG8gcmVmbGVjdCB3aGF0J3MgaW4gdGhhdCB0ZXh0YXJlYS48L3A+Cgo8cD5UaGF0J2QgYmUgc2ltcGxlLCBidXQgaXQgaXMgbm90IHJlYWxpc3RpYy4gRm9yIGV2ZW4gbWVkaXVtLXNpemVkCmRvY3VtZW50IHRoZSBlZGl0b3Igd291bGQgYmUgY29uc3RhbnRseSBtdW5naW5nIGh1Z2Ugc3RyaW5ncywgYW5kIGdldAp0ZXJyaWJseSBzbG93LiBXaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHB1dCB0aGUgY3VycmVudCBzZWxlY3Rpb24sCmFsb25nIHdpdGggYW4gZXh0cmEgbGluZSBvbiB0aGUgdG9wIGFuZCBvbiB0aGUgYm90dG9tLCBpbnRvIHRoZQp0ZXh0YXJlYS48L3A+Cgo8cD5UaGlzIG1lYW5zIHRoYXQgdGhlIGFycm93IGtleXMgKGFuZCB0aGVpciBjdHJsLXZhcmlhdGlvbnMpLCBob21lLAplbmQsIGV0Y2V0ZXJhLCBkbyBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHNwZWNpYWxseS4gV2UganVzdCByZWFkIHRoZQpjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRlIG91ciBjdXJzb3IgdG8gbWF0Y2ggaXQuCkFsc28sIGNvcHkgYW5kIHBhc3RlIHdvcmsgcHJldHR5IG11Y2ggZm9yIGZyZWUsIGFuZCBwZW9wbGUgZ2V0IHRoZWlyCm5hdGl2ZSBrZXkgYmluZGluZ3MsIHdpdGhvdXQgYW55IHNwZWNpYWwgd29yayBvbiBteSBwYXJ0LiBGb3IgZXhhbXBsZSwKSSBoYXZlIGVtYWNzIGtleSBiaW5kaW5ncyBjb25maWd1cmVkIGZvciBDaHJvbWUgYW5kIEZpcmVmb3guIFRoZXJlIGlzCm5vIHdheSBmb3IgYSBzY3JpcHQgdG8gZGV0ZWN0IHRoaXMuPC9wPgoKPHA+T2YgY291cnNlLCBzaW5jZSBvbmx5IGEgc21hbGwgcGFydCBvZiB0aGUgZG9jdW1lbnQgc2l0cyBpbiB0aGUKdGV4dGFyZWEsIGtleXMgbGlrZSBwYWdlIHVwIGFuZCBjdHJsLWVuZCB3b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcuCkNvZGVNaXJyb3IgaXMgY2F0Y2hpbmcgdGhvc2UgZXZlbnRzIGFuZCBoYW5kbGluZyB0aGVtIGl0c2VsZi48L3A+Cgo8aDIgaWQ9InNlbGVjdGlvbiI+U2VsZWN0aW9uPC9oMj4KCjxwPkdldHRpbmcgYW5kIHNldHRpbmcgdGhlIHNlbGVjdGlvbiByYW5nZSBvZiBhIHRleHRhcmVhIGluIG1vZGVybgpicm93c2VycyBpcyB0cml2aWFs4oCUeW91IGp1c3QgdXNlIHRoZSA8Y29kZT5zZWxlY3Rpb25TdGFydDwvY29kZT4KYW5kIDxjb2RlPnNlbGVjdGlvbkVuZDwvY29kZT4gcHJvcGVydGllcy4gT24gSUUgeW91IGhhdmUgdG8gZG8gc29tZQppbnNhbmUgc3R1ZmYgd2l0aCB0ZW1wb3JhcnkgcmFuZ2VzIGFuZCBjb21wZW5zYXRpbmcgZm9yIHRoZSBmYWN0IHRoYXQKbW92aW5nIHRoZSBzZWxlY3Rpb24gYnkgYSAnY2hhcmFjdGVyJyB3aWxsIHRyZWF0IFxyXG4gYXMgYSBzaW5nbGUKY2hhcmFjdGVyLCBidXQgZXZlbiB0aGVyZSBpdCBpcyBwb3NzaWJsZSB0byBidWlsZCBmdW5jdGlvbnMgdGhhdApyZWxpYWJseSBzZXQgYW5kIGdldCB0aGUgc2VsZWN0aW9uIHJhbmdlLjwvcD4KCjxwPkJ1dCBjb25zaWRlciB0aGlzIHR5cGljYWwgY2FzZTogV2hlbiBJJ20gc29tZXdoZXJlIGluIG15IGRvY3VtZW50LApwcmVzcyBzaGlmdCwgYW5kIHByZXNzIHRoZSB1cCBhcnJvdywgc29tZXRoaW5nIGdldHMgc2VsZWN0ZWQuIFRoZW4sIGlmCkksIHN0aWxsIGhvbGRpbmcgc2hpZnQsIHByZXNzIHRoZSB1cCBhcnJvdyBhZ2FpbiwgdGhlIHRvcCBvZiBteQpzZWxlY3Rpb24gaXMgYWRqdXN0ZWQuIFRoZSBzZWxlY3Rpb24gcmVtZW1iZXJzIHdoZXJlIGl0cyA8ZW0+aGVhZDwvZW0+CmFuZCBpdHMgPGVtPmFuY2hvcjwvZW0+IGFyZSwgYW5kIG1vdmVzIHRoZSBoZWFkIHdoZW4gd2Ugc2hpZnQtbW92ZS4KVGhpcyBpcyBhIGdlbmVyYWxseSBhY2NlcHRlZCBwcm9wZXJ0eSBvZiBzZWxlY3Rpb25zLCBhbmQgZG9uZSByaWdodCBieQpldmVyeSBlZGl0aW5nIGNvbXBvbmVudCBidWlsdCBpbiB0aGUgcGFzdCB0d2VudHkgeWVhcnMuPC9wPgoKPHA+QnV0IG5vdCBzb21ldGhpbmcgdGhhdCB0aGUgYnJvd3NlciBzZWxlY3Rpb24gQVBJcyBleHBvc2UuPC9wPgoKPHA+R3JlYXQuIFNvIHdoZW4gc29tZW9uZSBjcmVhdGVzIGFuICd1cHNpZGUtZG93bicgc2VsZWN0aW9uLCB0aGUgbmV4dAp0aW1lIENvZGVNaXJyb3IgaGFzIHRvIHVwZGF0ZSB0aGUgdGV4dGFyZWEsIGl0J2xsIHJlLWNyZWF0ZSB0aGUKc2VsZWN0aW9uIGFzIGFuICd1cHNpZGUtdXAnIHNlbGVjdGlvbiwgd2l0aCB0aGUgYW5jaG9yIGF0IHRoZSB0b3AsIGFuZAp0aGUgbmV4dCBjdXJzb3IgbW90aW9uIHdpbGwgYmVoYXZlIGluIGFuIHVuZXhwZWN0ZWQgd2F54oCUb3VyIHNlY29uZAp1cC1hcnJvdyBwcmVzcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSB3aWxsIG5vdCBkbyBhbnl0aGluZywgc2luY2UgaXQgaXMKaW50ZXJwcmV0ZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0LjwvcD4KCjxwPk5vIHByb2JsZW0uIFdlJ2xsIGp1c3QsIGVobSwgZGV0ZWN0IHRoYXQgdGhlIHNlbGVjdGlvbiBpcwp1cHNpZGUtZG93biAoeW91IGNhbiB0ZWxsIGJ5IHRoZSB3YXkgaXQgd2FzIGNyZWF0ZWQpLCBhbmQgdGhlbiwgd2hlbgphbiB1cHNpZGUtZG93biBzZWxlY3Rpb24gaXMgcHJlc2VudCwgYW5kIGEgY3Vyc29yLW1vdmluZyBrZXkgaXMKcHJlc3NlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHNoaWZ0LCB3ZSBxdWlja2x5IGNvbGxhcHNlIHRoZSBzZWxlY3Rpb24KaW4gdGhlIHRleHRhcmVhIHRvIGl0cyBzdGFydCwgYWxsb3cgdGhlIGtleSB0byB0YWtlIGVmZmVjdCwgYW5kIHRoZW4KY29tYmluZSBpdHMgbmV3IGhlYWQgd2l0aCBpdHMgb2xkIGFuY2hvciB0byBnZXQgdGhlIDxlbT5yZWFsPC9lbT4Kc2VsZWN0aW9uLjwvcD4KCjxwPkluIHNob3J0LCBzY2FyeSBoYWNrcyBjb3VsZCBub3QgYmUgYXZvaWRlZCBlbnRpcmVseSBpbiBDb2RlTWlycm9yCjIuPC9wPgoKPHA+QW5kLCB0aGUgb2JzZXJ2YW50IHJlYWRlciBtaWdodCBhc2ssIGhvdyBkbyB5b3UgZXZlbiBrbm93IHRoYXQgYQprZXkgY29tYm8gaXMgYSBjdXJzb3ItbW92aW5nIGNvbWJvLCBpZiB5b3UgY2xhaW0geW91IHN1cHBvcnQgYW55Cm5hdGl2ZSBrZXkgYmluZGluZ3M/IFdlbGwsIHdlIGRvbid0LCBidXQgd2UgY2FuIGxlYXJuLiBUaGUgZWRpdG9yCmtlZXBzIGEgc2V0IGtub3duIGN1cnNvci1tb3ZlbWVudCBjb21ib3MgKGluaXRpYWxpemVkIHRvIHRoZQpwcmVkaWN0YWJsZSBkZWZhdWx0cyksIGFuZCB1cGRhdGVzIHRoaXMgc2V0IHdoZW4gaXQgb2JzZXJ2ZXMgdGhhdApwcmVzc2luZyBhIGNlcnRhaW4ga2V5IGhhZCAob25seSkgdGhlIGVmZmVjdCBvZiBtb3ZpbmcgdGhlIGN1cnNvci4KVGhpcywgb2YgY291cnNlLCBkb2Vzbid0IHdvcmsgaWYgdGhlIGZpcnN0IHRpbWUgdGhlIGtleSBpcyB1c2VkIHdhcwpmb3IgZXh0ZW5kaW5nIGFuIGludmVydGVkIHNlbGVjdGlvbiwgYnV0IGl0IHdvcmtzIG1vc3Qgb2YgdGhlCnRpbWUuPC9wPgoKPGgyIGlkPSJ1cGRhdGUiPkludGVsbGlnZW50IFVwZGF0aW5nPC9oMj4KCjxwPk9uZSB0aGluZyB0aGF0IGFsd2F5cyBjb21lcyB1cCB3aGVuIHlvdSBoYXZlIGEgY29tcGxpY2F0ZWQgaW50ZXJuYWwKc3RhdGUgdGhhdCdzIHJlZmxlY3RlZCBpbiBzb21lIHVzZXItdmlzaWJsZSBleHRlcm5hbCByZXByZXNlbnRhdGlvbgooaW4gdGhpcyBjYXNlLCB0aGUgZGlzcGxheWVkIGNvZGUgYW5kIHRoZSB0ZXh0YXJlYSdzIGNvbnRlbnQpIGlzCmtlZXBpbmcgdGhlIHR3byBpbiBzeW5jLiBUaGUgbmFpdmUgd2F5IGlzIHRvIGp1c3QgdXBkYXRlIHRoZSBkaXNwbGF5CmV2ZXJ5IHRpbWUgeW91IGNoYW5nZSB5b3VyIHN0YXRlLCBidXQgdGhpcyBpcyBub3Qgb25seSBlcnJvciBwcm9uZQooeW91J2xsIGZvcmdldCksIGl0IGFsc28gZWFzaWx5IGxlYWRzIHRvIGR1cGxpY2F0ZSB3b3JrIG9uIGJpZywKY29tcG9zaXRlIG9wZXJhdGlvbnMuIFRoZW4geW91IHN0YXJ0IHBhc3NpbmcgYXJvdW5kIGZsYWdzIGluZGljYXRpbmcKd2hldGhlciB0aGUgZGlzcGxheSBzaG91bGQgYmUgdXBkYXRlZCBpbiBhbiBhdHRlbXB0IHRvIGJlIGVmZmljaWVudAphZ2FpbiBhbmQsIHdlbGwsIGF0IHRoYXQgcG9pbnQgeW91IG1pZ2h0IGFzIHdlbGwgZ2l2ZSB1cCBjb21wbGV0ZWx5LjwvcD4KCjxwPkkgZGlkIGdvIGRvd24gdGhhdCByb2FkLCBidXQgdGhlbiBzd2l0Y2hlZCB0byBhIG11Y2ggc2ltcGxlciBtb2RlbDoKc2ltcGx5IGtlZXAgdHJhY2sgb2YgYWxsIHRoZSB0aGluZ3MgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBkdXJpbmcgYW4KYWN0aW9uLCBhbmQgdGhlbiwgb25seSBhdCB0aGUgZW5kLCB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byB1cGRhdGUgdGhlCnVzZXItdmlzaWJsZSBkaXNwbGF5LjwvcD4KCjxwPkNvZGVNaXJyb3IgdXNlcyBhIGNvbmNlcHQgb2YgPGVtPm9wZXJhdGlvbnM8L2VtPiwgd2hpY2ggc3RhcnQgYnkKY2FsbGluZyBhIHNwZWNpZmljIHNldC11cCBmdW5jdGlvbiB0aGF0IGNsZWFycyB0aGUgc3RhdGUgYW5kIGVuZCBieQpjYWxsaW5nIGFub3RoZXIgZnVuY3Rpb24gdGhhdCByZWFkcyB0aGlzIHN0YXRlIGFuZCBkb2VzIHRoZSByZXF1aXJlZAp1cGRhdGluZy4gTW9zdCBldmVudCBoYW5kbGVycywgYW5kIGFsbCB0aGUgdXNlci12aXNpYmxlIG1ldGhvZHMgdGhhdApjaGFuZ2Ugc3RhdGUgYXJlIHdyYXBwZWQgbGlrZSB0aGlzLiBUaGVyZSdzIGEgbWV0aG9kCmNhbGxlZCA8Y29kZT5vcGVyYXRpb248L2NvZGU+IHRoYXQgYWNjZXB0cyBhIGZ1bmN0aW9uLCBhbmQgcmV0dXJucwphbm90aGVyIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIGdpdmVuIGZ1bmN0aW9uIGFzIGFuIG9wZXJhdGlvbi48L3A+Cgo8cD5JdCdzIHRyaXZpYWwgdG8gZXh0ZW5kIHRoaXMgKGFzIENvZGVNaXJyb3IgZG9lcykgdG8gZGV0ZWN0IG5lc3RpbmcsCmFuZCwgd2hlbiBhbiBvcGVyYXRpb24gaXMgc3RhcnRlZCBpbnNpZGUgYW4gb3BlcmF0aW9uLCBzaW1wbHkKaW5jcmVtZW50IHRoZSBuZXN0aW5nIGNvdW50LCBhbmQgb25seSBkbyB0aGUgdXBkYXRpbmcgd2hlbiB0aGlzIGNvdW50CnJlYWNoZXMgemVybyBhZ2Fpbi48L3A+Cgo8cD5JZiB3ZSBoYXZlIGEgc2V0IG9mIGNoYW5nZWQgcmFuZ2VzIGFuZCBrbm93IHRoZSBjdXJyZW50bHkgc2hvd24KcmFuZ2UsIHdlIGNhbiAod2l0aCBzb21lIGF3a3dhcmQgY29kZSB0byBkZWFsIHdpdGggdGhlIGZhY3QgdGhhdApjaGFuZ2VzIGNhbiBhZGQgYW5kIHJlbW92ZSBsaW5lcywgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgY2hhbmdpbmcKY29vcmRpbmF0ZSBzeXN0ZW0pIGNvbnN0cnVjdCBhIG1hcCBvZiB0aGUgcmFuZ2VzIHRoYXQgd2VyZSBsZWZ0CmludGFjdC4gV2UgY2FuIHRoZW4gY29tcGFyZSB0aGlzIG1hcCB3aXRoIHRoZSBwYXJ0IG9mIHRoZSBkb2N1bWVudAp0aGF0J3MgY3VycmVudGx5IHZpc2libGUgKGJhc2VkIG9uIHNjcm9sbCBvZmZzZXQgYW5kIGVkaXRvciBoZWlnaHQpIHRvCmRldGVybWluZSB3aGV0aGVyIHNvbWV0aGluZyBuZWVkcyB0byBiZSB1cGRhdGVkLjwvcD4KCjxwPkNvZGVNaXJyb3IgdXNlcyB0d28gdXBkYXRlIGFsZ29yaXRobXPigJRhIGZ1bGwgcmVmcmVzaCwgd2hlcmUgaXQganVzdApkaXNjYXJkcyB0aGUgd2hvbGUgcGFydCBvZiB0aGUgRE9NIHRoYXQgY29udGFpbnMgdGhlIGVkaXRlZCB0ZXh0IGFuZApyZWJ1aWxkcyBpdCwgYW5kIGEgcGF0Y2ggYWxnb3JpdGhtLCB3aGVyZSBpdCB1c2VzIHRoZSBpbmZvcm1hdGlvbgphYm91dCBjaGFuZ2VkIGFuZCBpbnRhY3QgcmFuZ2VzIHRvIHVwZGF0ZSBvbmx5IHRoZSBvdXQtb2YtZGF0ZSBwYXJ0cwpvZiB0aGUgRE9NLiBXaGVuIG1vcmUgdGhhbiAzMCBwZXJjZW50ICh3aGljaCBpcyB0aGUgY3VycmVudCBoZXVyaXN0aWMsCm1pZ2h0IGNoYW5nZSkgb2YgdGhlIGxpbmVzIG5lZWQgdG8gYmUgdXBkYXRlZCwgdGhlIGZ1bGwgcmVmcmVzaCBpcwpjaG9zZW4gKHNpbmNlIGl0J3MgZmFzdGVyIHRvIGRvIHRoYW4gcGFpbnN0YWtpbmdseSBmaW5kaW5nIGFuZAp1cGRhdGluZyBhbGwgdGhlIGNoYW5nZWQgbGluZXMpLCBpbiB0aGUgb3RoZXIgY2FzZSBpdCBkb2VzIHRoZQpwYXRjaGluZyAoc28gdGhhdCwgaWYgeW91IHNjcm9sbCBhIGxpbmUgb3Igc2VsZWN0IGFub3RoZXIgY2hhcmFjdGVyLAp0aGUgd2hvbGUgc2NyZWVuIGRvZXNuJ3QgaGF2ZSB0byBiZSByZS1yZW5kZXJlZCkuPC9wPgoKPHA+QWxsIHVwZGF0aW5nIHVzZXMgPGNvZGU+aW5uZXJIVE1MPC9jb2RlPiByYXRoZXIgdGhhbiBkaXJlY3QgRE9NCm1hbmlwdWxhdGlvbiwgc2luY2UgdGhhdCBzdGlsbCBzZWVtcyB0byBiZSBieSBmYXIgdGhlIGZhc3Rlc3Qgd2F5IHRvCmJ1aWxkIGRvY3VtZW50cy4gVGhlcmUncyBhIHBlci1saW5lIGZ1bmN0aW9uIHRoYXQgY29tYmluZXMgdGhlCmhpZ2hsaWdodGluZywgPGEgaHJlZj0ibWFudWFsLmh0bWwjbWFya1RleHQiPm1hcmtpbmc8L2E+LCBhbmQKc2VsZWN0aW9uIGluZm8gZm9yIHRoYXQgbGluZSBpbnRvIGEgc25pcHBldCBvZiBIVE1MLiBUaGUgcGF0Y2ggdXBkYXRlcgp1c2VzIHRoaXMgdG8gcmVzZXQgaW5kaXZpZHVhbCBsaW5lcywgdGhlIHJlZnJlc2ggdXBkYXRlciBidWlsZHMgYW4KSFRNTCBjaHVuayBmb3IgdGhlIHdob2xlIHZpc2libGUgZG9jdW1lbnQgYXQgb25jZSwgYW5kIHRoZW4gdXNlcyBhCnNpbmdsZSA8Y29kZT5pbm5lckhUTUw8L2NvZGU+IHVwZGF0ZSB0byBkbyB0aGUgcmVmcmVzaC48L3A+Cgo8aDIgaWQ9InBhcnNlIj5QYXJzZXJzIGNhbiBiZSBTaW1wbGU8L2gyPgoKPHA+V2hlbiBJIHdyb3RlIENvZGVNaXJyb3IgMSwgSQp0aG91Z2h0IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sI3BhcnNlciI+aW50ZXJydXB0YWJsZQpwYXJzZXJzPC9hPiB3ZXJlIGEgaHVnZWx5IHNjYXJ5IGFuZCBjb21wbGljYXRlZCB0aGluZywgYW5kIEkgdXNlZCBhCmJ1bmNoIG9mIGhlYXZ5d2VpZ2h0IGFic3RyYWN0aW9ucyB0byBrZWVwIHRoaXMgc3VwcG9zZWQgY29tcGxleGl0eQp1bmRlciBjb250cm9sOiBwYXJzZXJzCndlcmUgPGEgaHJlZj0iaHR0cDovL2JvYi5weXRob25tYWMub3JnL2FyY2hpdmVzLzIwMDUvMDcvMDYvaXRlcmF0aW9uLWluLWphdmFzY3JpcHQvIj5pdGVyYXRvcnM8L2E+CnRoYXQgY29uc3VtZWQgaW5wdXQgZnJvbSBhbm90aGVyIGl0ZXJhdG9yLCBhbmQgdXNlZCBmdW5ueQpjbG9zdXJlLXJlc2V0dGluZyB0cmlja3MgdG8gY29weSBhbmQgcmVzdW1lIHRoZW1zZWx2ZXMuPC9wPgoKPHA+VGhpcyBtYWRlIGZvciBhIHJhdGhlciBuaWNlIHN5c3RlbSwgaW4gdGhhdCBwYXJzZXJzIGZvcm1lZCBzdHJpY3RseQpzZXBhcmF0ZSBtb2R1bGVzLCBhbmQgY291bGQgYmUgY29tcG9zZWQgaW4gcHJlZGljdGFibGUgd2F5cy4KVW5mb3J0dW5hdGVseSwgaXQgd2FzIHF1aXRlIHNsb3cgKHN0YWNraW5nIHRocmVlIG9yIGZvdXIgaXRlcmF0b3JzIG9uCnRvcCBvZiBlYWNoIG90aGVyKSwgYW5kIGV4dHJlbWVseSBpbnRpbWlkYXRpbmcgdG8gcGVvcGxlIG5vdCB1c2VkIHRvIGEKZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBzdHlsZS48L3A+Cgo8cD5XaXRoIGEgZmV3IHNtYWxsIGNoYW5nZXMsIGhvd2V2ZXIsIHdlIGNhbiBrZWVwIGFsbCB0aG9zZQphZHZhbnRhZ2VzLCBidXQgc2ltcGxpZnkgdGhlIEFQSSBhbmQgbWFrZSB0aGUgd2hvbGUgdGhpbmcgbGVzcwppbmRpcmVjdCBhbmQgaW5lZmZpY2llbnQuIENvZGVNaXJyb3IKMidzIDxhIGhyZWY9Im1hbnVhbC5odG1sI21vZGVhcGkiPm1vZGUgQVBJPC9hPiB1c2VzIGV4cGxpY2l0IHN0YXRlCm9iamVjdHMsIGFuZCBtYWtlcyB0aGUgcGFyc2VyL3Rva2VuaXplciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IHRha2VzIGEKc3RhdGUgYW5kIGEgY2hhcmFjdGVyIHN0cmVhbSBhYnN0cmFjdGlvbiwgYWR2YW5jZXMgdGhlIHN0cmVhbSBvbmUKdG9rZW4sIGFuZCByZXR1cm5zIHRoZSB3YXkgdGhlIHRva2VuIHNob3VsZCBiZSBzdHlsZWQuIFRoaXMgc3RhdGUgbWF5CmJlIGNvcGllZCwgb3B0aW9uYWxseSBpbiBhIG1vZGUtZGVmaW5lZCB3YXksIGluIG9yZGVyIHRvIGJlIGFibGUgdG8KY29udGludWUgYSBwYXJzZSBhdCBhIGdpdmVuIHBvaW50LiBFdmVuIHNvbWVvbmUgd2hvJ3MgbmV2ZXIgdG91Y2hlZCBhCmxhbWJkYSBpbiBoaXMgbGlmZSBjYW4gdW5kZXJzdGFuZCB0aGlzIGFwcHJvYWNoLiBBZGRpdGlvbmFsbHksIGZhcgpmZXdlciBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIGNvdXJzZSBvZiBwYXJzaW5nIG5vdy48L3A+Cgo8cD5UaGUgYmlnZ2VzdCBzcGVlZHVwIGNvbWVzIGZyb20gdGhlIGZhY3QgdGhhdCB0aGUgcGFyc2luZyBubyBsb25nZXIKaGFzIHRvIHRvdWNoIHRoZSBET00gdGhvdWdoLiBJbiBDb2RlTWlycm9yIDEsIG9uIGFuIG9sZGVyIGJyb3dzZXIsIHlvdQpjb3VsZCA8ZW0+c2VlPC9lbT4gdGhlIHBhcnNlciB3b3JrIGl0cyB3YXkgdGhyb3VnaCB0aGUgZG9jdW1lbnQsCm1hbmFnaW5nIHNvbWUgdHdlbnR5IGxpbmVzIGluIGVhY2ggNTAtbWlsbGlzZWNvbmQgdGltZSBzbGljZSBpdCBnb3QuIEl0CndhcyByZWFkaW5nIGl0cyBpbnB1dCBmcm9tIHRoZSBET00sIGFuZCB1cGRhdGluZyB0aGUgRE9NIGFzIGl0IHdlbnQKYWxvbmcsIHdoaWNoIGFueSBleHBlcmllbmNlZCBKYXZhU2NyaXB0IHByb2dyYW1tZXIgd2lsbCBpbW1lZGlhdGVseQpzcG90IGFzIGEgcmVjaXBlIGZvciBzbG93bmVzcy4gSW4gQ29kZU1pcnJvciAyLCB0aGUgcGFyc2VyIHVzdWFsbHkKZmluaXNoZXMgdGhlIHdob2xlIGRvY3VtZW50IGluIGEgc2luZ2xlIDEwMC1taWxsaXNlY29uZCB0aW1lIHNsaWNl4oCUaXQKbWFuYWdlcyBzb21lIDE1MDAgbGluZXMgZHVyaW5nIHRoYXQgdGltZSBvbiBDaHJvbWUuIEFsbCBpdCBoYXMgdG8gZG8KaXMgbXVuZ2Ugc3RyaW5ncywgc28gdGhlcmUgaXMgbm8gcmVhbCByZWFzb24gZm9yIGl0IHRvIGJlIHNsb3cKYW55bW9yZS48L3A+Cgo8aDIgaWQ9InN1bW1hcnkiPldoYXQgR2l2ZXM/PC9oMj4KCjxwPkdpdmVuIGFsbCB0aGlzLCB3aGF0IGNhbiB5b3UgZXhwZWN0IGZyb20gQ29kZU1pcnJvciAyPyBGaXJzdCwgdGhlCmdvb2Q6PC9wPgoKPHVsPgoKPGxpPjxzdHJvbmc+U21hbGwuPC9zdHJvbmc+IHRoZSBiYXNlIGxpYnJhcnkgaXMgc29tZSAzMmsgd2hlbiBtaW5pZmllZApub3csIDEyayB3aGVuIGd6aXBwZWQuIEl0J3Mgc21hbGxlciB0aGFuIGl0cyBvd24gbG9nby48L2xpPgoKPGxpPjxzdHJvbmc+TGlnaHR3ZWlnaHQuPC9zdHJvbmc+IENvZGVNaXJyb3IgMiBpbml0aWFsaXplcyB2ZXJ5CnF1aWNrbHksIGFuZCBkb2VzIGFsbW9zdCBubyB3b3JrIHdoZW4gaXQgaXMgbm90IGZvY3VzZWQuIFRoaXMgbWVhbnMKeW91IGNhbiB0cmVhdCBpdCBhbG1vc3QgbGlrZSBhIHRleHRhcmVhLCBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvbiBhCnBhZ2Ugd2l0aG91dCB0cm91YmxlLjwvbGk+Cgo8bGk+PHN0cm9uZz5IdWdlIGRvY3VtZW50IHN1cHBvcnQuPC9zdHJvbmc+IFNpbmNlIGhpZ2hsaWdodGluZyBpcwpyZWFsbHkgZmFzdCwgYW5kIG5vIERPTSBzdHJ1Y3R1cmUgaXMgYmVpbmcgYnVpbHQgZm9yIG5vbi12aXNpYmxlCmNvbnRlbnQsIHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgdXAgeW91ciBicm93c2VyIHdoZW4gYQp1c2VyIGVudGVycyBhIG1lZ2FieXRlLXNpemVkIGRvY3VtZW50LjwvbGk+Cgo8bGk+PHN0cm9uZz5FeHRlbmRlZCBBUEkuPC9zdHJvbmc+IFNvbWUgdGhpbmdzIGtlcHQgY29taW5nIHVwIGluIHRoZQptYWlsaW5nIGxpc3QsIHN1Y2ggYXMgbWFya2luZyBwaWVjZXMgb2YgdGV4dCBvciBsaW5lcywgd2hpY2ggd2VyZQpleHRyZW1lbHkgaGFyZCB0byBkbyB3aXRoIENvZGVNaXJyb3IgMS4gVGhlIG5ldyB2ZXJzaW9uIGhhcyBwcm9wZXIKc3VwcG9ydCBmb3IgdGhlc2UgYnVpbHQgaW4uPC9saT4KCjxsaT48c3Ryb25nPlRhYiBzdXBwb3J0Ljwvc3Ryb25nPiBUYWJzIGluc2lkZSBlZGl0YWJsZSBkb2N1bWVudHMgd2VyZSwKZm9yIHNvbWUgcmVhc29uLCBhIG5vLWdvLiBBdCBsZWFzdCBzaXggZGlmZmVyZW50IHBlb3BsZSBhbm5vdW5jZWQgdGhleQp3ZXJlIGdvaW5nIHRvIGFkZCB0YWIgc3VwcG9ydCB0byBDb2RlTWlycm9yIDEsIG5vbmUgc3Vydml2ZWQgKEkgbWVhbiwKbm9uZSBkZWxpdmVyZWQgYSB3b3JraW5nIHZlcnNpb24pLiBDb2RlTWlycm9yIDIgbm8gbG9uZ2VyIHJlbW92ZXMgdGFicwpmcm9tIHlvdXIgZG9jdW1lbnQuPC9saT4KCjxsaT48c3Ryb25nPlNhbmUgc3R5bGluZy48L3N0cm9uZz4gPGNvZGU+aWZyYW1lPC9jb2RlPiBub2RlcyBhcmVuJ3QKcmVhbGx5IGtub3duIGZvciByZXNwZWN0aW5nIGRvY3VtZW50IGZsb3cuIE5vdyB0aGF0IGFuIGVkaXRvciBpbnN0YW5jZQppcyBhIHBsYWluIDxjb2RlPmRpdjwvY29kZT4gZWxlbWVudCwgaXQgaXMgbXVjaCBlYXNpZXIgdG8gc2l6ZSBpdCB0bwpmaXQgdGhlIHN1cnJvdW5kaW5nIGVsZW1lbnRzLiBZb3UgZG9uJ3QgZXZlbiBoYXZlIHRvIG1ha2UgaXQgc2Nyb2xsIGlmCnlvdSBkbyBub3QgPGEgaHJlZj0iZGVtby9yZXNpemUuaHRtbCI+d2FudCB0bzwvYT4uPC9saT4KCjwvdWw+Cgo8cD5UaGVuLCB0aGUgYmFkOjwvcD4KCjx1bD4KCjxsaT48c3Ryb25nPk5vIGxpbmUtd3JhcHBpbmcuPC9zdHJvbmc+IEknZCBoYXZlIGxpa2VkIHRvIGdldApsaW5lLXdyYXBwaW5nIHRvIHdvcmssIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBtb2RlbCBJJ20gdXNpbmcgdmVyeQp3ZWxsLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCBjdXJzb3IgbW92ZW1lbnQgaW4gdGhlIHRleHRhcmVhIG1hdGNoZXMKd2hhdCB5b3Ugc2VlIG9uIHRoZSBzY3JlZW4sIGFuZCBpdCBzZWVtcyB0byBiZSBpbXBvc3NpYmxlIHRvIGhhdmUgdGhlCmxpbmVzIHdyYXBwZWQgdGhlIHNhbWUgaW4gdGhlIHRleHRhcmVhIGFuZCB0aGUgbm9ybWFsIERPTS48L2xpPgoKPGxpPjxzdHJvbmc+U29tZSBjdXJzb3IgZmxha2luZXNzLjwvc3Ryb25nPiBUaGUgdGV4dGFyZWEgaGFjayBkb2VzIG5vdApyZWFsbHkgZG8ganVzdGljZSB0byB0aGUgY29tcGxleGl0eSBvZiBjdXJzb3IgaGFuZGxpbmfigJRhIHNlbGVjdGlvbiBpcwp0eXBpY2FsbHkgbW9yZSB0aGFuIGp1c3QgYW4gb2Zmc2V0IGludG8gYSBzdHJpbmcuIEZvciBleGFtcGxlLCBpZiB5b3UKdXNlIHRoZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG1vdmUgdG8gYSBzaG9ydGVyIGxpbmUgYW5kIHRoZW4KYmFjaywgeW91J2xsIGVuZCB1cCBpbiB5b3VyIG9sZCBwb3NpdGlvbiBpbiBtb3N0IGVkaXRvciBjb250cm9scywgYnV0CkNvZGVNaXJyb3IgMiBjdXJyZW50bHkgZG9lc24ndCByZW1lbWJlciB0aGUgJ3JlYWwnIGN1cnNvciBjb2x1bW4gaW4KdGhpcyBjYXNlLiBUaGVzZSBjYW4gYmUgd29ya2VkIGFyb3VuZCBvbiBhIGNhc2UtYnktY2FzZSBiYXNpcywgYnV0CkkgaGF2ZW4ndCBwdXQgbXVjaCBlbmVyZ3kgaW50byB0aGF0IHlldC48L2xpPgoKPGxpPjxzdHJvbmc+TGltaXRlZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBlZGl0YWJsZSBwYW5lbC48L3N0cm9uZz4KU2luY2UgdGhlIGVsZW1lbnQgeW91J3JlIGxvb2tpbmcgYXQgaXMgbm90IGEgcmVhbCBlZGl0YWJsZSBwYW5lbCwKbmF0aXZlIGJyb3dzZXIgYmVoYXZpb3VyIGZvciBlZGl0YWJsZSBjb250cm9scyBkb2Vzbid0IHdvcmsKYXV0b21hdGljYWxseS4gVGhyb3VnaCBhIGxvdCBvZiBldmVudCBnbHVlIGNvZGUsIEkndmUgbWFuYWdlZCB0byBtYWtlCmRyYWcgYW5kIGRyb3Agd29yayBwcmV0dHkgd2VsbCwgaGF2ZSBjb250ZXh0IG1lbnVzIHdvcmsgb24gbW9zdApicm93c2VycyAoZXhjZXB0IE9wZXJhKS4gTWlkZGxlLWNsaWNrIHBhc3RlIG9uIEZpcmVmb3ggaW4gTGludXggaXMKYnJva2VuIHVudGlsIHNvbWVvbmUgZmluZHMgYSB3YXkgdG8gaW50ZXJjZXB0IGl0LjwvbGk+Cgo8L3VsPgoKPC9kaXY+PGRpdiBjbGFzcz0icmlnaHRzbWFsbCBibGsiPgoKICAgIDxoMj5Db250ZW50czwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI2ludHJvIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2lucHV0Ij5JbnB1dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3NlbGVjdGlvbiI+U2VsZWN0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjdXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3BhcnNlIj5QYXJzaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjc3VtbWFyeSI+V2hhdCBHaXZlcz88L2E+PC9saT4KICAgIDwvdWw+Cgo8L2Rpdj48L2Rpdj4KCjxkaXYgc3R5bGU9ImhlaWdodDogMmVtIj4mbmJzcDs8L2Rpdj4KCjwvYm9keT48L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3IgewogIGxpbmUtaGVpZ2h0OiAxZW07CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBvdmVyZmxvdzogYXV0bzsKICBoZWlnaHQ6IDMwMHB4OwogIC8qIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYW4gSUVbNjddIGJ1ZyB3aGVyZSB0aGUgc2Nyb2xsZWQgY29udGVudAogICAgIGlzIHZpc2libGUgb3V0c2lkZSBvZiB0aGUgc2Nyb2xsaW5nIGJveC4gKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5Db2RlTWlycm9yLWd1dHRlciB7CiAgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7CiAgei1pbmRleDogMTA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNzsKICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZWVlOwogIG1pbi13aWR0aDogMmVtOwogIGhlaWdodDogMTAwJTsKfQouQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7CiAgY29sb3I6ICNhYWE7CiAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgcGFkZGluZzogLjRlbSAuMmVtIC40ZW0gLjRlbTsKfQouQ29kZU1pcnJvci1saW5lcyB7CiAgcGFkZGluZzogLjRlbTsKfQoKLkNvZGVNaXJyb3IgcHJlIHsKICAtbW96LWJvcmRlci1yYWRpdXM6IDA7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwOwogIC1vLWJvcmRlci1yYWRpdXM6IDA7CiAgYm9yZGVyLXJhZGl1czogMDsKICBib3JkZXItd2lkdGg6IDA7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgZm9udC1zaXplOiBpbmhlcml0OwogIHBhZGRpbmc6IDA7IG1hcmdpbjogMDsKICB3aGl0ZS1zcGFjZTogcHJlOwogIHdvcmQtd3JhcDogbm9ybWFsOwp9CgouQ29kZU1pcnJvciB0ZXh0YXJlYSB7CiAgZm9udC1mYW1pbHk6IGluaGVyaXQgIWltcG9ydGFudDsKICBmb250LXNpemU6IGluaGVyaXQgIWltcG9ydGFudDsKfQoKLkNvZGVNaXJyb3ItY3Vyc29yIHsKICB6LWluZGV4OiAxMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdmlzaWJpbGl0eTogaGlkZGVuOwogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2sgIWltcG9ydGFudDsKfQouQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLWN1cnNvciB7CiAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoKc3Bhbi5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICBiYWNrZ3JvdW5kOiAjY2NjICFpbXBvcnRhbnQ7CiAgY29sb3I6IEhpZ2hsaWdodFRleHQgIWltcG9ydGFudDsKfQouQ29kZU1pcnJvci1mb2N1c2VkIHNwYW4uQ29kZU1pcnJvci1zZWxlY3RlZCB7CiAgYmFja2dyb3VuZDogSGlnaGxpZ2h0ICFpbXBvcnRhbnQ7Cn0KCi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICMwZjAgIWltcG9ydGFudDt9Ci5Db2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICNmMjIgIWltcG9ydGFudDt9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQWxsIGZ1bmN0aW9ucyB0aGF0IG5lZWQgYWNjZXNzIHRvIHRoZSBlZGl0b3IncyBzdGF0ZSBsaXZlIGluc2lkZQovLyB0aGUgQ29kZU1pcnJvciBmdW5jdGlvbi4gQmVsb3cgdGhhdCwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZSwKLy8gc29tZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQuCgovLyBDb2RlTWlycm9yIGlzIHRoZSBvbmx5IGdsb2JhbCB2YXIgd2UgY2xhaW0KdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgLy8gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBlZGl0b3IgaW5zdGFuY2UuIEl0J3MKICAvLyBjbG9zdXJlIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGVkaXRvciBzdGF0ZS4KICBmdW5jdGlvbiBDb2RlTWlycm9yKHBsYWNlLCBnaXZlbk9wdGlvbnMpIHsKICAgIC8vIERldGVybWluZSBlZmZlY3RpdmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRzLgogICAgdmFyIG9wdGlvbnMgPSB7fSwgZGVmYXVsdHMgPSBDb2RlTWlycm9yLmRlZmF1bHRzOwogICAgZm9yICh2YXIgb3B0IGluIGRlZmF1bHRzKQogICAgICBpZiAoZGVmYXVsdHMuaGFzT3duUHJvcGVydHkob3B0KSkKICAgICAgICBvcHRpb25zW29wdF0gPSAoZ2l2ZW5PcHRpb25zICYmIGdpdmVuT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpID8gZ2l2ZW5PcHRpb25zIDogZGVmYXVsdHMpW29wdF07CgogICAgdmFyIHRhcmdldERvY3VtZW50ID0gb3B0aW9uc1siZG9jdW1lbnQiXTsKICAgIC8vIFRoZSBlbGVtZW50IGluIHdoaWNoIHRoZSBlZGl0b3IgbGl2ZXMuCiAgICB2YXIgd3JhcHBlciA9IHRhcmdldERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgd3JhcHBlci5jbGFzc05hbWUgPSAiQ29kZU1pcnJvciI7CiAgICAvLyBUaGlzIG1lc3MgY3JlYXRlcyB0aGUgYmFzZSBET00gc3RydWN0dXJlIGZvciB0aGUgZWRpdG9yLgogICAgd3JhcHBlci5pbm5lckhUTUwgPQogICAgICAnPGRpdiBzdHlsZT0ib3ZlcmZsb3c6IGhpZGRlbjsgcG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDBweDsiPicgKyAvLyBXcmFwcyBhbmQgaGlkZXMgaW5wdXQgdGV4dGFyZWEKICAgICAgICAnPHRleHRhcmVhIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAycHg7IiB3cmFwPSJvZmYiICcgKwogICAgICAgICAgJ2F1dG9jb3JyZWN0PSJvZmYiIGF1dG9jYXBpdGFsaXplPSJvZmYiPjwvdGV4dGFyZWE+PC9kaXY+JyArCiAgICAgICc8ZGl2IGNsYXNzPSJDb2RlTWlycm9yLXNjcm9sbCBjbS1zLScgKyBvcHRpb25zLnRoZW1lICsgJyI+JyArCiAgICAgICAgJzxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+JyArIC8vIFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0LCBjYXVzZXMgc2Nyb2xsaW5nCiAgICAgICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6IDA7IHdpZHRoOiAwOyBvdmVyZmxvdzogaGlkZGVuOyI+PC9kaXY+JyArCiAgICAgICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj4nICsgLy8gTW92ZWQgYXJvdW5kIGl0cyBwYXJlbnQgdG8gY292ZXIgdmlzaWJsZSB2aWV3CiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJDb2RlTWlycm9yLWd1dHRlciI+PGRpdiBjbGFzcz0iQ29kZU1pcnJvci1ndXR0ZXItdGV4dCI+PC9kaXY+PC9kaXY+JyArCiAgICAgICAgICAgIC8vIFByb3ZpZGVzIHBvc2l0aW9uaW5nIHJlbGF0aXZlIHRvICh2aXNpYmxlKSB0ZXh0IG9yaWdpbgogICAgICAgICAgICAnPGRpdiBjbGFzcz0iQ29kZU1pcnJvci1saW5lcyI+PGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIiBkcmFnZ2FibGU9InRydWUiPicgKwogICAgICAgICAgICAgICc8cHJlIGNsYXNzPSJDb2RlTWlycm9yLWN1cnNvciI+JiMxNjA7PC9wcmU+JyArIC8vIEFic29sdXRlbHkgcG9zaXRpb25lZCBibGlua3kgY3Vyc29yCiAgICAgICAgICAgICAgJzxkaXY+PC9kaXY+JyArIC8vIFRoaXMgRElWIGNvbnRhaW5zIHRoZSBhY3R1YWwgY29kZQogICAgICAgICAgICAnPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+JzsKICAgIGlmIChwbGFjZS5hcHBlbmRDaGlsZCkgcGxhY2UuYXBwZW5kQ2hpbGQod3JhcHBlcik7IGVsc2UgcGxhY2Uod3JhcHBlcik7CiAgICAvLyBJJ3ZlIG5ldmVyIHNlZW4gbW9yZSBlbGVnYW50IGNvZGUgaW4gbXkgbGlmZS4KICAgIHZhciBpbnB1dERpdiA9IHdyYXBwZXIuZmlyc3RDaGlsZCwgaW5wdXQgPSBpbnB1dERpdi5maXJzdENoaWxkLAogICAgICAgIHNjcm9sbGVyID0gd3JhcHBlci5sYXN0Q2hpbGQsIGNvZGUgPSBzY3JvbGxlci5maXJzdENoaWxkLAogICAgICAgIG1lYXN1cmUgPSBjb2RlLmZpcnN0Q2hpbGQsIG1vdmVyID0gbWVhc3VyZS5uZXh0U2libGluZywKICAgICAgICBndXR0ZXIgPSBtb3Zlci5maXJzdENoaWxkLCBndXR0ZXJUZXh0ID0gZ3V0dGVyLmZpcnN0Q2hpbGQsCiAgICAgICAgbGluZVNwYWNlID0gZ3V0dGVyLm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQsCiAgICAgICAgY3Vyc29yID0gbGluZVNwYWNlLmZpcnN0Q2hpbGQsIGxpbmVEaXYgPSBjdXJzb3IubmV4dFNpYmxpbmc7CiAgICBpZiAob3B0aW9ucy50YWJpbmRleCAhPSBudWxsKSBpbnB1dC50YWJpbmRleCA9IG9wdGlvbnMudGFiaW5kZXg7CiAgICBpZiAoIW9wdGlvbnMuZ3V0dGVyICYmICFvcHRpb25zLmxpbmVOdW1iZXJzKSBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCiAgICAvLyBEZWxheWVkIG9iamVjdCB3cmFwIHRpbWVvdXRzLCBtYWtpbmcgc3VyZSBvbmx5IG9uZSBpcyBhY3RpdmUuIGJsaW5rZXIgaG9sZHMgYW4gaW50ZXJ2YWwuCiAgICB2YXIgcG9sbCA9IG5ldyBEZWxheWVkKCksIGhpZ2hsaWdodCA9IG5ldyBEZWxheWVkKCksIGJsaW5rZXI7CgogICAgLy8gbW9kZSBob2xkcyBhIG1vZGUgQVBJIG9iamVjdC4gbGluZXMgYW4gYXJyYXkgb2YgTGluZSBvYmplY3RzCiAgICAvLyAoc2VlIExpbmUgY29uc3RydWN0b3IpLCB3b3JrIGFuIGFycmF5IG9mIGxpbmVzIHRoYXQgc2hvdWxkIGJlCiAgICAvLyBwYXJzZWQsIGFuZCBoaXN0b3J5IHRoZSB1bmRvIGhpc3RvcnkgKGluc3RhbmNlIG9mIEhpc3RvcnkKICAgIC8vIGNvbnN0cnVjdG9yKS4KICAgIHZhciBtb2RlLCBsaW5lcyA9IFtuZXcgTGluZSgiIildLCB3b3JrLCBoaXN0b3J5ID0gbmV3IEhpc3RvcnkoKSwgZm9jdXNlZDsKICAgIGxvYWRNb2RlKCk7CiAgICAvLyBUaGUgc2VsZWN0aW9uLiBUaGVzZSBhcmUgYWx3YXlzIG1haW50YWluZWQgdG8gcG9pbnQgYXQgdmFsaWQKICAgIC8vIHBvc2l0aW9ucy4gSW52ZXJ0ZWQgaXMgdXNlZCB0byByZW1lbWJlciB0aGF0IHRoZSB1c2VyIGlzCiAgICAvLyBzZWxlY3RpbmcgYm90dG9tLXRvLXRvcC4KICAgIHZhciBzZWwgPSB7ZnJvbToge2xpbmU6IDAsIGNoOiAwfSwgdG86IHtsaW5lOiAwLCBjaDogMH0sIGludmVydGVkOiBmYWxzZX07CiAgICAvLyBTZWxlY3Rpb24tcmVsYXRlZCBmbGFncy4gc2hpZnRTZWxlY3Rpbmcgb2J2aW91c2x5IHRyYWNrcwogICAgLy8gd2hldGhlciB0aGUgdXNlciBpcyBob2xkaW5nIHNoaWZ0LiByZWR1Y2VkU2VsZWN0aW9uIGlzIGEgaGFjawogICAgLy8gdG8gZ2V0IGFyb3VuZCB0aGUgZmFjdCB0aGF0IHdlIGNhbid0IGNyZWF0ZSBpbnZlcnRlZAogICAgLy8gc2VsZWN0aW9ucy4gU2VlIGJlbG93LgogICAgdmFyIHNoaWZ0U2VsZWN0aW5nLCByZWR1Y2VkU2VsZWN0aW9uLCBsYXN0Q2xpY2ssIGxhc3REb3VibGVDbGljazsKICAgIC8vIFZhcmlhYmxlcyB1c2VkIGJ5IHN0YXJ0T3BlcmF0aW9uL2VuZE9wZXJhdGlvbiB0byB0cmFjayB3aGF0CiAgICAvLyBoYXBwZW5lZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi4KICAgIHZhciB1cGRhdGVJbnB1dCwgY2hhbmdlcywgdGV4dENoYW5nZWQsIHNlbGVjdGlvbkNoYW5nZWQsIGxlYXZlSW5wdXRBbG9uZSwgZ3V0dGVyRGlydHk7CiAgICAvLyBDdXJyZW50IHZpc2libGUgcmFuZ2UgKG1heSBiZSBiaWdnZXIgdGhhbiB0aGUgdmlldyB3aW5kb3cpLgogICAgdmFyIHNob3dpbmdGcm9tID0gMCwgc2hvd2luZ1RvID0gMCwgbGFzdEhlaWdodCA9IDAsIGN1cktleUlkID0gbnVsbDsKICAgIC8vIGVkaXRpbmcgd2lsbCBob2xkIGFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSB0aGluZ3Mgd2UgcHV0IGluIHRoZQogICAgLy8gdGV4dGFyZWEsIHRvIGhlbHAgZmlndXJlIG91dCB3aGV0aGVyIHNvbWV0aGluZyBjaGFuZ2VkLgogICAgLy8gYnJhY2tldEhpZ2hsaWdodGVkIGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhhdCBhIGJhY2tldCBoYXMgYmVlbgogICAgLy8gbWFya2VkLgogICAgdmFyIGVkaXRpbmcsIGJyYWNrZXRIaWdobGlnaHRlZDsKICAgIC8vIFRyYWNrcyB0aGUgbWF4aW11bSBsaW5lIGxlbmd0aCBzbyB0aGF0IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhcgogICAgLy8gY2FuIGJlIGtlcHQgc3RhdGljIHdoZW4gc2Nyb2xsaW5nLgogICAgdmFyIG1heExpbmUgPSAiIiwgbWF4V2lkdGg7CgogICAgLy8gSW5pdGlhbGl6ZSB0aGUgY29udGVudC4KICAgIG9wZXJhdGlvbihmdW5jdGlvbigpe3NldFZhbHVlKG9wdGlvbnMudmFsdWUgfHwgIiIpOyB1cGRhdGVJbnB1dCA9IGZhbHNlO30pKCk7CgogICAgLy8gUmVnaXN0ZXIgb3VyIGV2ZW50IGhhbmRsZXJzLgogICAgY29ubmVjdChzY3JvbGxlciwgIm1vdXNlZG93biIsIG9wZXJhdGlvbihvbk1vdXNlRG93bikpOwogICAgY29ubmVjdChsaW5lU3BhY2UsICJkcmFnc3RhcnQiLCBvbkRyYWdTdGFydCk7CiAgICAvLyBHZWNrbyBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXQKICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKICAgIC8vIGhhbmRsZWQgaW4gb25Nb3VzZURvd24gZm9yIEdlY2tvLgogICAgaWYgKCFnZWNrbykgY29ubmVjdChzY3JvbGxlciwgImNvbnRleHRtZW51Iiwgb25Db250ZXh0TWVudSk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CiAgICAgIHVwZGF0ZURpc3BsYXkoW10pOwogICAgICBpZiAob3B0aW9ucy5maXhlZEd1dHRlcikgZ3V0dGVyLnN0eWxlLmxlZnQgPSBzY3JvbGxlci5zY3JvbGxMZWZ0ICsgInB4IjsKICAgICAgaWYgKG9wdGlvbnMub25TY3JvbGwpIG9wdGlvbnMub25TY3JvbGwoaW5zdGFuY2UpOwogICAgfSk7CiAgICBjb25uZWN0KHdpbmRvdywgInJlc2l6ZSIsIGZ1bmN0aW9uKCkge3VwZGF0ZURpc3BsYXkodHJ1ZSk7fSk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5dXAiLCBvcGVyYXRpb24ob25LZXlVcCkpOwogICAgY29ubmVjdChpbnB1dCwgImtleWRvd24iLCBvcGVyYXRpb24ob25LZXlEb3duKSk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5cHJlc3MiLCBvcGVyYXRpb24ob25LZXlQcmVzcykpOwogICAgY29ubmVjdChpbnB1dCwgImZvY3VzIiwgb25Gb2N1cyk7CiAgICBjb25uZWN0KGlucHV0LCAiYmx1ciIsIG9uQmx1cik7CgogICAgY29ubmVjdChzY3JvbGxlciwgImRyYWdlbnRlciIsIGVfc3RvcCk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAiZHJhZ292ZXIiLCBlX3N0b3ApOwogICAgY29ubmVjdChzY3JvbGxlciwgImRyb3AiLCBvcGVyYXRpb24ob25Ecm9wKSk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAicGFzdGUiLCBmdW5jdGlvbigpe2ZvY3VzSW5wdXQoKTsgZmFzdFBvbGwoKTt9KTsKICAgIGNvbm5lY3QoaW5wdXQsICJwYXN0ZSIsIGZ1bmN0aW9uKCl7ZmFzdFBvbGwoKTt9KTsKICAgIGNvbm5lY3QoaW5wdXQsICJjdXQiLCBmdW5jdGlvbigpe2Zhc3RQb2xsKCk7fSk7CiAgICAKICAgIC8vIElFIHRocm93cyB1bnNwZWNpZmllZCBlcnJvciBpbiBjZXJ0YWluIGNhc2VzLCB3aGVuIAogICAgLy8gdHJ5aW5nIHRvIGFjY2VzcyBhY3RpdmVFbGVtZW50IGJlZm9yZSBvbmxvYWQKICAgIHZhciBoYXNGb2N1czsgdHJ5IHsgaGFzRm9jdXMgPSAodGFyZ2V0RG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBpbnB1dCk7IH0gY2F0Y2goZSkgeyB9CiAgICBpZiAoaGFzRm9jdXMpIHNldFRpbWVvdXQob25Gb2N1cywgMjApOwogICAgZWxzZSBvbkJsdXIoKTsKCiAgICBmdW5jdGlvbiBpc0xpbmUobCkge3JldHVybiBsID49IDAgJiYgbCA8IGxpbmVzLmxlbmd0aDt9CiAgICAvLyBUaGUgaW5zdGFuY2Ugb2JqZWN0IHRoYXQgd2UnbGwgcmV0dXJuLiBNb3N0bHkgY2FsbHMgb3V0IHRvCiAgICAvLyBsb2NhbCBmdW5jdGlvbnMgaW4gdGhlIENvZGVNaXJyb3IgZnVuY3Rpb24uIFNvbWUgZG8gc29tZSBleHRyYQogICAgLy8gcmFuZ2UgY2hlY2tpbmcgYW5kL29yIGNsaXBwaW5nLiBvcGVyYXRpb24gaXMgdXNlZCB0byB3cmFwIHRoZQogICAgLy8gY2FsbCBzbyB0aGF0IGNoYW5nZXMgaXQgbWFrZXMgYXJlIHRyYWNrZWQsIGFuZCB0aGUgZGlzcGxheSBpcwogICAgLy8gdXBkYXRlZCBhZnRlcndhcmRzLgogICAgdmFyIGluc3RhbmNlID0gd3JhcHBlci5Db2RlTWlycm9yID0gewogICAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsCiAgICAgIHNldFZhbHVlOiBvcGVyYXRpb24oc2V0VmFsdWUpLAogICAgICBnZXRTZWxlY3Rpb246IGdldFNlbGVjdGlvbiwKICAgICAgcmVwbGFjZVNlbGVjdGlvbjogb3BlcmF0aW9uKHJlcGxhY2VTZWxlY3Rpb24pLAogICAgICBmb2N1czogZnVuY3Rpb24oKXtmb2N1c0lucHV0KCk7IG9uRm9jdXMoKTsgZmFzdFBvbGwoKTt9LAogICAgICBzZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHsKICAgICAgICBvcHRpb25zW29wdGlvbl0gPSB2YWx1ZTsKICAgICAgICBpZiAob3B0aW9uID09ICJsaW5lTnVtYmVycyIgfHwgb3B0aW9uID09ICJndXR0ZXIiIHx8IG9wdGlvbiA9PSAiZmlyc3RMaW5lTnVtYmVyIikKICAgICAgICAgIG9wZXJhdGlvbihndXR0ZXJDaGFuZ2VkKSgpOwogICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAibW9kZSIgfHwgb3B0aW9uID09ICJpbmRlbnRVbml0IikgbG9hZE1vZGUoKTsKICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInJlYWRPbmx5IiAmJiB2YWx1ZSA9PSAibm9jdXJzb3IiKSBpbnB1dC5ibHVyKCk7CiAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJ0aGVtZSIpIHNjcm9sbGVyLmNsYXNzTmFtZSA9IHNjcm9sbGVyLmNsYXNzTmFtZS5yZXBsYWNlKC9jbS1zLVx3Ky8sICJjbS1zLSIgKyB2YWx1ZSk7CiAgICAgIH0sCiAgICAgIGdldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uKSB7cmV0dXJuIG9wdGlvbnNbb3B0aW9uXTt9LAogICAgICB1bmRvOiBvcGVyYXRpb24odW5kbyksCiAgICAgIHJlZG86IG9wZXJhdGlvbihyZWRvKSwKICAgICAgaW5kZW50TGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKG4sIGRpcikgewogICAgICAgIGlmIChpc0xpbmUobikpIGluZGVudExpbmUobiwgZGlyID09IG51bGwgPyAic21hcnQiIDogZGlyID8gImFkZCIgOiAic3VidHJhY3QiKTsKICAgICAgfSksCiAgICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHtyZXR1cm4ge3VuZG86IGhpc3RvcnkuZG9uZS5sZW5ndGgsIHJlZG86IGhpc3RvcnkudW5kb25lLmxlbmd0aH07fSwKICAgICAgbWF0Y2hCcmFja2V0czogb3BlcmF0aW9uKGZ1bmN0aW9uKCl7bWF0Y2hCcmFja2V0cyh0cnVlKTt9KSwKICAgICAgZ2V0VG9rZW5BdDogZnVuY3Rpb24ocG9zKSB7CiAgICAgICAgcG9zID0gY2xpcFBvcyhwb3MpOwogICAgICAgIHJldHVybiBsaW5lc1twb3MubGluZV0uZ2V0VG9rZW5BdChtb2RlLCBnZXRTdGF0ZUJlZm9yZShwb3MubGluZSksIHBvcy5jaCk7CiAgICAgIH0sCiAgICAgIGdldFN0YXRlQWZ0ZXI6IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBsaW5lID0gY2xpcExpbmUobGluZSA9PSBudWxsID8gbGluZXMubGVuZ3RoIC0gMTogbGluZSk7CiAgICAgICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKGxpbmUgKyAxKTsKICAgICAgfSwKICAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCl7CiAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHN0YXJ0ID0gc2VsLmludmVydGVkOwogICAgICAgIHJldHVybiBwYWdlQ29vcmRzKHN0YXJ0ID8gc2VsLmZyb20gOiBzZWwudG8pOwogICAgICB9LAogICAgICBjaGFyQ29vcmRzOiBmdW5jdGlvbihwb3Mpe3JldHVybiBwYWdlQ29vcmRzKGNsaXBQb3MocG9zKSk7fSwKICAgICAgY29vcmRzQ2hhcjogZnVuY3Rpb24oY29vcmRzKSB7CiAgICAgICAgdmFyIG9mZiA9IGVsdE9mZnNldChsaW5lU3BhY2UpOwogICAgICAgIHZhciBsaW5lID0gY2xpcExpbmUoTWF0aC5taW4obGluZXMubGVuZ3RoIC0gMSwgc2hvd2luZ0Zyb20gKyBNYXRoLmZsb29yKChjb29yZHMueSAtIG9mZi50b3ApIC8gbGluZUhlaWdodCgpKSkpOwogICAgICAgIHJldHVybiBjbGlwUG9zKHtsaW5lOiBsaW5lLCBjaDogY2hhckZyb21YKGNsaXBMaW5lKGxpbmUpLCBjb29yZHMueCAtIG9mZi5sZWZ0KX0pOwogICAgICB9LAogICAgICBnZXRTZWFyY2hDdXJzb3I6IGZ1bmN0aW9uKHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKSB7cmV0dXJuIG5ldyBTZWFyY2hDdXJzb3IocXVlcnksIHBvcywgY2FzZUZvbGQpO30sCiAgICAgIG1hcmtUZXh0OiBvcGVyYXRpb24oZnVuY3Rpb24oYSwgYiwgYyl7cmV0dXJuIG9wZXJhdGlvbihtYXJrVGV4dChhLCBiLCBjKSk7fSksCiAgICAgIHNldE1hcmtlcjogb3BlcmF0aW9uKGFkZEd1dHRlck1hcmtlciksCiAgICAgIGNsZWFyTWFya2VyOiBvcGVyYXRpb24ocmVtb3ZlR3V0dGVyTWFya2VyKSwKICAgICAgc2V0TGluZUNsYXNzOiBvcGVyYXRpb24oc2V0TGluZUNsYXNzKSwKICAgICAgbGluZUluZm86IGxpbmVJbmZvLAogICAgICBhZGRXaWRnZXQ6IGZ1bmN0aW9uKHBvcywgbm9kZSwgc2Nyb2xsLCB2ZXJ0LCBob3JpeikgewogICAgICAgIHBvcyA9IGxvY2FsQ29vcmRzKGNsaXBQb3MocG9zKSk7CiAgICAgICAgdmFyIHRvcCA9IHBvcy55Qm90LCBsZWZ0ID0gcG9zLng7CiAgICAgICAgbm9kZS5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICAgICAgY29kZS5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgICBpZiAodmVydCA9PSAib3ZlciIpIHRvcCA9IHBvcy55OwogICAgICAgIGVsc2UgaWYgKHZlcnQgPT0gIm5lYXIiKSB7CiAgICAgICAgICB2YXIgdnNwYWNlID0gTWF0aC5tYXgoc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0LCBsaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0KCkpLAogICAgICAgICAgICAgIGhzcGFjZSA9IE1hdGgubWF4KGNvZGUuY2xpZW50V2lkdGgsIGxpbmVTcGFjZS5jbGllbnRXaWR0aCkgLSBwYWRkaW5nTGVmdCgpOwogICAgICAgICAgaWYgKHBvcy55Qm90ICsgbm9kZS5vZmZzZXRIZWlnaHQgPiB2c3BhY2UgJiYgcG9zLnkgPiBub2RlLm9mZnNldEhlaWdodCkKICAgICAgICAgICAgdG9wID0gcG9zLnkgLSBub2RlLm9mZnNldEhlaWdodDsKICAgICAgICAgIGlmIChsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCA+IGhzcGFjZSkKICAgICAgICAgICAgbGVmdCA9IGhzcGFjZSAtIG5vZGUub2Zmc2V0V2lkdGg7CiAgICAgICAgfQogICAgICAgIG5vZGUuc3R5bGUudG9wID0gKHRvcCArIHBhZGRpbmdUb3AoKSkgKyAicHgiOwogICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgICBpZiAoaG9yaXogPT0gInJpZ2h0IikgewogICAgICAgICAgbGVmdCA9IGNvZGUuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdpZHRoOwogICAgICAgICAgbm9kZS5zdHlsZS5yaWdodCA9ICIwcHgiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaG9yaXogPT0gImxlZnQiKSBsZWZ0ID0gMDsKICAgICAgICAgIGVsc2UgaWYgKGhvcml6ID09ICJtaWRkbGUiKSBsZWZ0ID0gKGNvZGUuY2xpZW50V2lkdGggLSBub2RlLm9mZnNldFdpZHRoKSAvIDI7CiAgICAgICAgICBub2RlLnN0eWxlLmxlZnQgPSAobGVmdCArIHBhZGRpbmdMZWZ0KCkpICsgInB4IjsKICAgICAgICB9CiAgICAgICAgaWYgKHNjcm9sbCkKICAgICAgICAgIHNjcm9sbEludG9WaWV3KGxlZnQsIHRvcCwgbGVmdCArIG5vZGUub2Zmc2V0V2lkdGgsIHRvcCArIG5vZGUub2Zmc2V0SGVpZ2h0KTsKICAgICAgfSwKCiAgICAgIGxpbmVDb3VudDogZnVuY3Rpb24oKSB7cmV0dXJuIGxpbmVzLmxlbmd0aDt9LAogICAgICBnZXRDdXJzb3I6IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHN0YXJ0ID0gc2VsLmludmVydGVkOwogICAgICAgIHJldHVybiBjb3B5UG9zKHN0YXJ0ID8gc2VsLmZyb20gOiBzZWwudG8pOwogICAgICB9LAogICAgICBzb21ldGhpbmdTZWxlY3RlZDogZnVuY3Rpb24oKSB7cmV0dXJuICFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKTt9LAogICAgICBzZXRDdXJzb3I6IG9wZXJhdGlvbihmdW5jdGlvbihsaW5lLCBjaCkgewogICAgICAgIGlmIChjaCA9PSBudWxsICYmIHR5cGVvZiBsaW5lLmxpbmUgPT0gIm51bWJlciIpIHNldEN1cnNvcihsaW5lLmxpbmUsIGxpbmUuY2gpOwogICAgICAgIGVsc2Ugc2V0Q3Vyc29yKGxpbmUsIGNoKTsKICAgICAgfSksCiAgICAgIHNldFNlbGVjdGlvbjogb3BlcmF0aW9uKGZ1bmN0aW9uKGZyb20sIHRvKSB7c2V0U2VsZWN0aW9uKGNsaXBQb3MoZnJvbSksIGNsaXBQb3ModG8gfHwgZnJvbSkpO30pLAogICAgICBnZXRMaW5lOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZShsaW5lKSkgcmV0dXJuIGxpbmVzW2xpbmVdLnRleHQ7fSwKICAgICAgc2V0TGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUsIHRleHQpIHsKICAgICAgICBpZiAoaXNMaW5lKGxpbmUpKSByZXBsYWNlUmFuZ2UodGV4dCwge2xpbmU6IGxpbmUsIGNoOiAwfSwge2xpbmU6IGxpbmUsIGNoOiBsaW5lc1tsaW5lXS50ZXh0Lmxlbmd0aH0pOwogICAgICB9KSwKICAgICAgcmVtb3ZlTGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBpZiAoaXNMaW5lKGxpbmUpKSByZXBsYWNlUmFuZ2UoIiIsIHtsaW5lOiBsaW5lLCBjaDogMH0sIGNsaXBQb3Moe2xpbmU6IGxpbmUrMSwgY2g6IDB9KSk7CiAgICAgIH0pLAogICAgICByZXBsYWNlUmFuZ2U6IG9wZXJhdGlvbihyZXBsYWNlUmFuZ2UpLAogICAgICBnZXRSYW5nZTogZnVuY3Rpb24oZnJvbSwgdG8pIHtyZXR1cm4gZ2V0UmFuZ2UoY2xpcFBvcyhmcm9tKSwgY2xpcFBvcyh0bykpO30sCgogICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBvcGVyYXRpb24oZikoKTt9LAogICAgICByZWZyZXNoOiBmdW5jdGlvbigpe3VwZGF0ZURpc3BsYXkodHJ1ZSk7fSwKICAgICAgZ2V0SW5wdXRGaWVsZDogZnVuY3Rpb24oKXtyZXR1cm4gaW5wdXQ7fSwKICAgICAgZ2V0V3JhcHBlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHdyYXBwZXI7fSwKICAgICAgZ2V0U2Nyb2xsZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiBzY3JvbGxlcjt9LAogICAgICBnZXRHdXR0ZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiBndXR0ZXI7fQogICAgfTsKCiAgICBmdW5jdGlvbiBzZXRWYWx1ZShjb2RlKSB7CiAgICAgIGhpc3RvcnkgPSBudWxsOwogICAgICB2YXIgdG9wID0ge2xpbmU6IDAsIGNoOiAwfTsKICAgICAgdXBkYXRlTGluZXModG9wLCB7bGluZTogbGluZXMubGVuZ3RoIC0gMSwgY2g6IGxpbmVzW2xpbmVzLmxlbmd0aC0xXS50ZXh0Lmxlbmd0aH0sCiAgICAgICAgICAgICAgICAgIHNwbGl0TGluZXMoY29kZSksIHRvcCwgdG9wKTsKICAgICAgaGlzdG9yeSA9IG5ldyBIaXN0b3J5KCk7CiAgICAgIHVwZGF0ZUlucHV0ID0gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFZhbHVlKGNvZGUpIHsKICAgICAgdmFyIHRleHQgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyArK2kpCiAgICAgICAgdGV4dC5wdXNoKGxpbmVzW2ldLnRleHQpOwogICAgICByZXR1cm4gdGV4dC5qb2luKCJcbiIpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgY2xpY2sgaW4gYSB3aWRnZXQKICAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBjb2RlICYmIG4gIT0gbW92ZXIpIHJldHVybjsKCiAgICAgIC8vIEZpcnN0LCBzZWUgaWYgdGhpcyBpcyBhIGNsaWNrIGluIHRoZSBndXR0ZXIKICAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBndXR0ZXJUZXh0KSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5vbkd1dHRlckNsaWNrKQogICAgICAgICAgICBvcHRpb25zLm9uR3V0dGVyQ2xpY2soaW5zdGFuY2UsIGluZGV4T2YoZ3V0dGVyVGV4dC5jaGlsZE5vZGVzLCBuKSArIHNob3dpbmdGcm9tLCBlKTsKICAgICAgICAgIHJldHVybiBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIH0KCiAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKTsKICAgICAgCiAgICAgIHN3aXRjaCAoZV9idXR0b24oZSkpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmIChnZWNrbyAmJiAhbWFjKSBvbkNvbnRleHRNZW51KGUpOwogICAgICAgIHJldHVybjsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChzdGFydCkgc2V0Q3Vyc29yKHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCB0cnVlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gRm9yIGJ1dHRvbiAxLCBpZiBpdCB3YXMgY2xpY2tlZCBpbnNpZGUgdGhlIGVkaXRvcgogICAgICAvLyAocG9zRnJvbU1vdXNlIHJldHVybmluZyBub24tbnVsbCksIHdlIGhhdmUgdG8gYWRqdXN0IHRoZQogICAgICAvLyBzZWxlY3Rpb24uCiAgICAgIGlmICghc3RhcnQpIHtpZiAoZV90YXJnZXQoZSkgPT0gc2Nyb2xsZXIpIGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CgogICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKICAgICAgCiAgICAgIHZhciBub3cgPSArbmV3IERhdGU7CiAgICAgIGlmIChsYXN0RG91YmxlQ2xpY2sgPiBub3cgLSA0MDApIHsKICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIHJldHVybiBzZWxlY3RMaW5lKHN0YXJ0LmxpbmUpOwogICAgICB9IGVsc2UgaWYgKGxhc3RDbGljayA+IG5vdyAtIDQwMCkgewogICAgICAgIGxhc3REb3VibGVDbGljayA9IG5vdzsKICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIHJldHVybiBzZWxlY3RXb3JkQXQoc3RhcnQpOwogICAgICB9IGVsc2UgeyBsYXN0Q2xpY2sgPSBub3c7IH0KCiAgICAgIHZhciBsYXN0ID0gc3RhcnQsIGdvaW5nOwogICAgICBpZiAoZHJhZ0FuZERyb3AgJiYgIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pICYmCiAgICAgICAgICAhcG9zTGVzcyhzdGFydCwgc2VsLmZyb20pICYmICFwb3NMZXNzKHNlbC50bywgc3RhcnQpKSB7CiAgICAgICAgLy8gTGV0IHRoZSBkcmFnIGhhbmRsZXIgaGFuZGxlIHRoaXMuCiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgIHNldEN1cnNvcihzdGFydC5saW5lLCBzdGFydC5jaCwgdHJ1ZSk7CgogICAgICBmdW5jdGlvbiBleHRlbmQoZSkgewogICAgICAgIHZhciBjdXIgPSBwb3NGcm9tTW91c2UoZSwgdHJ1ZSk7CiAgICAgICAgaWYgKGN1ciAmJiAhcG9zRXEoY3VyLCBsYXN0KSkgewogICAgICAgICAgaWYgKCFmb2N1c2VkKSBvbkZvY3VzKCk7CiAgICAgICAgICBsYXN0ID0gY3VyOwogICAgICAgICAgc2V0U2VsZWN0aW9uVXNlcihzdGFydCwgY3VyKTsKICAgICAgICAgIHVwZGF0ZUlucHV0ID0gZmFsc2U7CiAgICAgICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcygpOwogICAgICAgICAgaWYgKGN1ci5saW5lID49IHZpc2libGUudG8gfHwgY3VyLmxpbmUgPCB2aXNpYmxlLmZyb20pCiAgICAgICAgICAgIGdvaW5nID0gc2V0VGltZW91dChvcGVyYXRpb24oZnVuY3Rpb24oKXtleHRlbmQoZSk7fSksIDE1MCk7CiAgICAgICAgfQogICAgICB9CgogICAgICB2YXIgbW92ZSA9IGNvbm5lY3QodGFyZ2V0RG9jdW1lbnQsICJtb3VzZW1vdmUiLCBvcGVyYXRpb24oZnVuY3Rpb24oZSkgewogICAgICAgIGNsZWFyVGltZW91dChnb2luZyk7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBleHRlbmQoZSk7CiAgICAgIH0pLCB0cnVlKTsKICAgICAgdmFyIHVwID0gY29ubmVjdCh0YXJnZXREb2N1bWVudCwgIm1vdXNldXAiLCBvcGVyYXRpb24oZnVuY3Rpb24oZSkgewogICAgICAgIGNsZWFyVGltZW91dChnb2luZyk7CiAgICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShlKTsKICAgICAgICBpZiAoY3VyKSBzZXRTZWxlY3Rpb25Vc2VyKHN0YXJ0LCBjdXIpOwogICAgICAgIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgICAgZm9jdXNJbnB1dCgpOwogICAgICAgIHVwZGF0ZUlucHV0ID0gdHJ1ZTsKICAgICAgICBtb3ZlKCk7IHVwKCk7CiAgICAgIH0pLCB0cnVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uRHJvcChlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShlLCB0cnVlKSwgZmlsZXMgPSBlLmRhdGFUcmFuc2Zlci5maWxlczsKICAgICAgaWYgKCFwb3MgfHwgb3B0aW9ucy5yZWFkT25seSkgcmV0dXJuOwogICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlKSB7CiAgICAgICAgZnVuY3Rpb24gbG9hZEZpbGUoZmlsZSwgaSkgewogICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyOwogICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0ZXh0W2ldID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAgICAgaWYgKCsrcmVhZCA9PSBuKSByZXBsYWNlUmFuZ2UodGV4dC5qb2luKCIiKSwgY2xpcFBvcyhwb3MpLCBjbGlwUG9zKHBvcykpOwogICAgICAgICAgfTsKICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOwogICAgICAgIH0KICAgICAgICB2YXIgbiA9IGZpbGVzLmxlbmd0aCwgdGV4dCA9IEFycmF5KG4pLCByZWFkID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgbG9hZEZpbGUoZmlsZXNbaV0sIGkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgdGV4dCA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTsKICAgICAgICAgIGlmICh0ZXh0KSByZXBsYWNlUmFuZ2UodGV4dCwgcG9zLCBwb3MpOwogICAgICAgIH0KICAgICAgICBjYXRjaChlKXt9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGUpIHsKICAgICAgdmFyIHR4dCA9IGdldFNlbGVjdGlvbigpOwogICAgICAvLyBUaGlzIHdpbGwgcmVzZXQgZXNjYXBlRWxlbWVudAogICAgICBodG1sRXNjYXBlKHR4dCk7CiAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlc2NhcGVFbGVtZW50LCAwLCAwKTsKICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIHR4dCk7CiAgICB9CiAgICBmdW5jdGlvbiBvbktleURvd24oZSkgewogICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKCiAgICAgIHZhciBjb2RlID0gZS5rZXlDb2RlOwogICAgICAvLyBJRSBkb2VzIHN0cmFuZ2UgdGhpbmdzIHdpdGggZXNjYXBlLgogICAgICBpZiAoaWUgJiYgY29kZSA9PSAyNykgeyBlLnJldHVyblZhbHVlID0gZmFsc2U7IH0KICAgICAgLy8gVHJpZXMgdG8gZGV0ZWN0IGN0cmwgb24gbm9uLW1hYywgY21kIG9uIG1hYy4KICAgICAgdmFyIG1vZCA9IChtYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkpICYmICFlLmFsdEtleSwgYW55TW9kID0gZS5jdHJsS2V5IHx8IGUuYWx0S2V5IHx8IGUubWV0YUtleTsKICAgICAgaWYgKGNvZGUgPT0gMTYgfHwgZS5zaGlmdEtleSkgc2hpZnRTZWxlY3RpbmcgPSBzaGlmdFNlbGVjdGluZyB8fCAoc2VsLmludmVydGVkID8gc2VsLnRvIDogc2VsLmZyb20pOwogICAgICBlbHNlIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDsKICAgICAgLy8gRmlyc3QgZ2l2ZSBvbktleUV2ZW50IG9wdGlvbiBhIGNoYW5jZSB0byBoYW5kbGUgdGhpcy4KICAgICAgaWYgKG9wdGlvbnMub25LZXlFdmVudCAmJiBvcHRpb25zLm9uS2V5RXZlbnQoaW5zdGFuY2UsIGFkZFN0b3AoZSkpKSByZXR1cm47CgogICAgICBpZiAoY29kZSA9PSAzMyB8fCBjb2RlID09IDM0KSB7c2Nyb2xsUGFnZShjb2RlID09IDM0KTsgcmV0dXJuIGVfcHJldmVudERlZmF1bHQoZSk7fSAvLyBwYWdlIHVwL2Rvd24KICAgICAgaWYgKG1vZCAmJiAoKGNvZGUgPT0gMzYgfHwgY29kZSA9PSAzNSkgfHwgLy8gY3RybC1ob21lL2VuZAogICAgICAgICAgICAgICAgICBtYWMgJiYgKGNvZGUgPT0gMzggfHwgY29kZSA9PSA0MCkpKSB7IC8vIGNtZC11cC9kb3duCiAgICAgICAgc2Nyb2xsRW5kKGNvZGUgPT0gMzYgfHwgY29kZSA9PSAzOCk7IHJldHVybiBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICB9CiAgICAgIGlmIChtb2QgJiYgY29kZSA9PSA2NSkge3NlbGVjdEFsbCgpOyByZXR1cm4gZV9wcmV2ZW50RGVmYXVsdChlKTt9IC8vIGN0cmwtYQogICAgICBpZiAoIW9wdGlvbnMucmVhZE9ubHkpIHsKICAgICAgICBpZiAoIWFueU1vZCAmJiBjb2RlID09IDEzKSB7cmV0dXJuO30gLy8gZW50ZXIKICAgICAgICBpZiAoIWFueU1vZCAmJiBjb2RlID09IDkgJiYgaGFuZGxlVGFiKGUuc2hpZnRLZXkpKSByZXR1cm4gZV9wcmV2ZW50RGVmYXVsdChlKTsgLy8gdGFiCiAgICAgICAgaWYgKG1vZCAmJiBjb2RlID09IDkwKSB7dW5kbygpOyByZXR1cm4gZV9wcmV2ZW50RGVmYXVsdChlKTt9IC8vIGN0cmwtegogICAgICAgIGlmIChtb2QgJiYgKChlLnNoaWZ0S2V5ICYmIGNvZGUgPT0gOTApIHx8IGNvZGUgPT0gODkpKSB7cmVkbygpOyByZXR1cm4gZV9wcmV2ZW50RGVmYXVsdChlKTt9IC8vIGN0cmwtc2hpZnQteiwgY3RybC15CiAgICAgIH0KICAgICAgaWYgKGNvZGUgPT0gMzYpIHsgaWYgKG9wdGlvbnMuc21hcnRIb21lKSB7IHNtYXJ0SG9tZSgpOyByZXR1cm4gZV9wcmV2ZW50RGVmYXVsdChlKTsgfSB9CgogICAgICAvLyBLZXkgaWQgdG8gdXNlIGluIHRoZSBtb3ZlbWVudEtleXMgbWFwLiBXZSBhbHNvIHBhc3MgaXQgdG8KICAgICAgLy8gZmFzdFBvbGwgaW4gb3JkZXIgdG8gJ3NlbGYgbGVhcm4nLiBXZSBuZWVkIHRoaXMgYmVjYXVzZQogICAgICAvLyByZWR1Y2VkU2VsZWN0aW9uLCB0aGUgaGFjayB3aGVyZSB3ZSBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHRvCiAgICAgIC8vIGl0cyBzdGFydCB3aGVuIGl0IGlzIGludmVydGVkIGFuZCBhIG1vdmVtZW50IGtleSBpcyBwcmVzc2VkCiAgICAgIC8vIChhbmQgbGF0ZXIgcmVzdG9yZSBpdCBhZ2FpbiksIHNob3VsZG4ndCBiZSB1c2VkIGZvcgogICAgICAvLyBub24tbW92ZW1lbnQga2V5cy4KICAgICAgY3VyS2V5SWQgPSAobW9kID8gImMiIDogIiIpICsgKGUuYWx0S2V5ID8gImEiIDogIiIpICsgY29kZTsKICAgICAgaWYgKHNlbC5pbnZlcnRlZCAmJiBtb3ZlbWVudEtleXNbY3VyS2V5SWRdID09PSB0cnVlKSB7CiAgICAgICAgdmFyIHJhbmdlID0gc2VsUmFuZ2UoaW5wdXQpOwogICAgICAgIGlmIChyYW5nZSkgewogICAgICAgICAgcmVkdWNlZFNlbGVjdGlvbiA9IHthbmNob3I6IHJhbmdlLnN0YXJ0fTsKICAgICAgICAgIHNldFNlbFJhbmdlKGlucHV0LCByYW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBEb24ndCBzYXZlIHRoZSBrZXkgYXMgYSBtb3ZlbWVudGtleSB1bmxlc3MgaXQgaGFkIGEgbW9kaWZpZXIKICAgICAgaWYgKCFtb2QgJiYgIWUuYWx0S2V5KSBjdXJLZXlJZCA9IG51bGw7CiAgICAgIGZhc3RQb2xsKGN1cktleUlkKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uS2V5VXAoZSkgewogICAgICBpZiAob3B0aW9ucy5vbktleUV2ZW50ICYmIG9wdGlvbnMub25LZXlFdmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICAgaWYgKHJlZHVjZWRTZWxlY3Rpb24pIHsKICAgICAgICByZWR1Y2VkU2VsZWN0aW9uID0gbnVsbDsKICAgICAgICB1cGRhdGVJbnB1dCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGUua2V5Q29kZSA9PSAxNikgc2hpZnRTZWxlY3RpbmcgPSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gb25LZXlQcmVzcyhlKSB7CiAgICAgIGlmIChvcHRpb25zLm9uS2V5RXZlbnQgJiYgb3B0aW9ucy5vbktleUV2ZW50KGluc3RhbmNlLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwogICAgICBpZiAob3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmIG1vZGUuZWxlY3RyaWNDaGFycykgewogICAgICAgIHZhciBjaCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSA9PSBudWxsID8gZS5rZXlDb2RlIDogZS5jaGFyQ29kZSk7CiAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGNoKSA+IC0xKQogICAgICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oZnVuY3Rpb24oKSB7aW5kZW50TGluZShzZWwudG8ubGluZSwgInNtYXJ0Iik7fSksIDUwKTsKICAgICAgfQogICAgICB2YXIgY29kZSA9IGUua2V5Q29kZTsKICAgICAgLy8gUmUtc3RvcCB0YWIgYW5kIGVudGVyLiBOZWNlc3Nhcnkgb24gc29tZSBicm93c2Vycy4KICAgICAgaWYgKGNvZGUgPT0gMTMpIHtpZiAoIW9wdGlvbnMucmVhZE9ubHkpIGhhbmRsZUVudGVyKCk7IGVfcHJldmVudERlZmF1bHQoZSk7fQogICAgICBlbHNlIGlmICghZS5jdHJsS2V5ICYmICFlLmFsdEtleSAmJiAhZS5tZXRhS2V5ICYmIGNvZGUgPT0gOSAmJiBvcHRpb25zLnRhYk1vZGUgIT0gImRlZmF1bHQiKSBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICBlbHNlIGZhc3RQb2xsKGN1cktleUlkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbkZvY3VzKCkgewogICAgICBpZiAob3B0aW9ucy5yZWFkT25seSA9PSAibm9jdXJzb3IiKSByZXR1cm47CiAgICAgIGlmICghZm9jdXNlZCkgewogICAgICAgIGlmIChvcHRpb25zLm9uRm9jdXMpIG9wdGlvbnMub25Gb2N1cyhpbnN0YW5jZSk7CiAgICAgICAgZm9jdXNlZCA9IHRydWU7CiAgICAgICAgaWYgKHdyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pID09IC0xKQogICAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLWZvY3VzZWQiOwogICAgICAgIGlmICghbGVhdmVJbnB1dEFsb25lKSBwcmVwYXJlSW5wdXQoKTsKICAgICAgfQogICAgICBzbG93UG9sbCgpOwogICAgICByZXN0YXJ0QmxpbmsoKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uQmx1cigpIHsKICAgICAgaWYgKGZvY3VzZWQpIHsKICAgICAgICBpZiAob3B0aW9ucy5vbkJsdXIpIG9wdGlvbnMub25CbHVyKGluc3RhbmNlKTsKICAgICAgICBmb2N1c2VkID0gZmFsc2U7CiAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgPSB3cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mb2N1c2VkIiwgIiIpOwogICAgICB9CiAgICAgIGNsZWFySW50ZXJ2YWwoYmxpbmtlcik7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7aWYgKCFmb2N1c2VkKSBzaGlmdFNlbGVjdGluZyA9IG51bGw7fSwgMTUwKTsKICAgIH0KCiAgICAvLyBSZXBsYWNlIHRoZSByYW5nZSBmcm9tIGZyb20gdG8gdG8gYnkgdGhlIHN0cmluZ3MgaW4gbmV3VGV4dC4KICAgIC8vIEFmdGVyd2FyZHMsIHNldCB0aGUgc2VsZWN0aW9uIHRvIHNlbEZyb20sIHNlbFRvLgogICAgZnVuY3Rpb24gdXBkYXRlTGluZXMoZnJvbSwgdG8sIG5ld1RleHQsIHNlbEZyb20sIHNlbFRvKSB7CiAgICAgIGlmIChoaXN0b3J5KSB7CiAgICAgICAgdmFyIG9sZCA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSBmcm9tLmxpbmUsIGUgPSB0by5saW5lICsgMTsgaSA8IGU7ICsraSkgb2xkLnB1c2gobGluZXNbaV0udGV4dCk7CiAgICAgICAgaGlzdG9yeS5hZGRDaGFuZ2UoZnJvbS5saW5lLCBuZXdUZXh0Lmxlbmd0aCwgb2xkKTsKICAgICAgICB3aGlsZSAoaGlzdG9yeS5kb25lLmxlbmd0aCA+IG9wdGlvbnMudW5kb0RlcHRoKSBoaXN0b3J5LmRvbmUuc2hpZnQoKTsKICAgICAgfQogICAgICB1cGRhdGVMaW5lc05vVW5kbyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pOwogICAgfQogICAgZnVuY3Rpb24gdW5yZWRvSGVscGVyKGZyb20sIHRvKSB7CiAgICAgIHZhciBjaGFuZ2UgPSBmcm9tLnBvcCgpOwogICAgICBpZiAoY2hhbmdlKSB7CiAgICAgICAgdmFyIHJlcGxhY2VkID0gW10sIGVuZCA9IGNoYW5nZS5zdGFydCArIGNoYW5nZS5hZGRlZDsKICAgICAgICBmb3IgKHZhciBpID0gY2hhbmdlLnN0YXJ0OyBpIDwgZW5kOyArK2kpIHJlcGxhY2VkLnB1c2gobGluZXNbaV0udGV4dCk7CiAgICAgICAgdG8ucHVzaCh7c3RhcnQ6IGNoYW5nZS5zdGFydCwgYWRkZWQ6IGNoYW5nZS5vbGQubGVuZ3RoLCBvbGQ6IHJlcGxhY2VkfSk7CiAgICAgICAgdmFyIHBvcyA9IGNsaXBQb3Moe2xpbmU6IGNoYW5nZS5zdGFydCArIGNoYW5nZS5vbGQubGVuZ3RoIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2g6IGVkaXRFbmQocmVwbGFjZWRbcmVwbGFjZWQubGVuZ3RoLTFdLCBjaGFuZ2Uub2xkW2NoYW5nZS5vbGQubGVuZ3RoLTFdKX0pOwogICAgICAgIHVwZGF0ZUxpbmVzTm9VbmRvKHtsaW5lOiBjaGFuZ2Uuc3RhcnQsIGNoOiAwfSwge2xpbmU6IGVuZCAtIDEsIGNoOiBsaW5lc1tlbmQtMV0udGV4dC5sZW5ndGh9LCBjaGFuZ2Uub2xkLCBwb3MsIHBvcyk7CiAgICAgICAgdXBkYXRlSW5wdXQgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiB1bmRvKCkge3VucmVkb0hlbHBlcihoaXN0b3J5LmRvbmUsIGhpc3RvcnkudW5kb25lKTt9CiAgICBmdW5jdGlvbiByZWRvKCkge3VucmVkb0hlbHBlcihoaXN0b3J5LnVuZG9uZSwgaGlzdG9yeS5kb25lKTt9CgogICAgZnVuY3Rpb24gdXBkYXRlTGluZXNOb1VuZG8oZnJvbSwgdG8sIG5ld1RleHQsIHNlbEZyb20sIHNlbFRvKSB7CiAgICAgIHZhciByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxzZSwgbWF4TGluZUxlbmd0aCA9IG1heExpbmUubGVuZ3RoOwogICAgICBmb3IgKHZhciBpID0gZnJvbS5saW5lOyBpIDw9IHRvLmxpbmU7ICsraSkgewogICAgICAgIGlmIChsaW5lc1tpXS50ZXh0Lmxlbmd0aCA9PSBtYXhMaW5lTGVuZ3RoKSB7cmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTsgYnJlYWs7fQogICAgICB9CgogICAgICB2YXIgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZSwgZmlyc3RMaW5lID0gbGluZXNbZnJvbS5saW5lXSwgbGFzdExpbmUgPSBsaW5lc1t0by5saW5lXTsKICAgICAgLy8gRmlyc3QgYWRqdXN0IHRoZSBsaW5lIHN0cnVjdHVyZSwgdGFraW5nIHNvbWUgY2FyZSB0byBsZWF2ZSBoaWdobGlnaHRpbmcgaW50YWN0LgogICAgICBpZiAoZmlyc3RMaW5lID09IGxhc3RMaW5lKSB7CiAgICAgICAgaWYgKG5ld1RleHQubGVuZ3RoID09IDEpCiAgICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCB0by5jaCwgbmV3VGV4dFswXSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBsYXN0TGluZSA9IGZpcnN0TGluZS5zcGxpdCh0by5jaCwgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aC0xXSk7CiAgICAgICAgICB2YXIgc3BsaWNlYXJncyA9IFtmcm9tLmxpbmUgKyAxLCBubGluZXNdOwogICAgICAgICAgZmlyc3RMaW5lLnJlcGxhY2UoZnJvbS5jaCwgZmlyc3RMaW5lLnRleHQubGVuZ3RoLCBuZXdUZXh0WzBdKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKSBzcGxpY2VhcmdzLnB1c2gobmV3IExpbmUobmV3VGV4dFtpXSkpOwogICAgICAgICAgc3BsaWNlYXJncy5wdXNoKGxhc3RMaW5lKTsKICAgICAgICAgIGxpbmVzLnNwbGljZS5hcHBseShsaW5lcywgc3BsaWNlYXJncyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKG5ld1RleHQubGVuZ3RoID09IDEpIHsKICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBmaXJzdExpbmUudGV4dC5sZW5ndGgsIG5ld1RleHRbMF0gKyBsYXN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSk7CiAgICAgICAgbGluZXMuc3BsaWNlKGZyb20ubGluZSArIDEsIG5saW5lcyk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIHNwbGljZWFyZ3MgPSBbZnJvbS5saW5lICsgMSwgbmxpbmVzIC0gMV07CiAgICAgICAgZmlyc3RMaW5lLnJlcGxhY2UoZnJvbS5jaCwgZmlyc3RMaW5lLnRleHQubGVuZ3RoLCBuZXdUZXh0WzBdKTsKICAgICAgICBsYXN0TGluZS5yZXBsYWNlKDAsIHRvLmNoLCBuZXdUZXh0W25ld1RleHQubGVuZ3RoLTFdKTsKICAgICAgICBmb3IgKHZhciBpID0gMSwgZSA9IG5ld1RleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkgc3BsaWNlYXJncy5wdXNoKG5ldyBMaW5lKG5ld1RleHRbaV0pKTsKICAgICAgICBsaW5lcy5zcGxpY2UuYXBwbHkobGluZXMsIHNwbGljZWFyZ3MpOwogICAgICB9CgoKICAgICAgZm9yICh2YXIgaSA9IGZyb20ubGluZSwgZSA9IGkgKyBuZXdUZXh0Lmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBsID0gbGluZXNbaV0udGV4dDsKICAgICAgICBpZiAobC5sZW5ndGggPiBtYXhMaW5lTGVuZ3RoKSB7CiAgICAgICAgICBtYXhMaW5lID0gbDsgbWF4TGluZUxlbmd0aCA9IGwubGVuZ3RoOyBtYXhXaWR0aCA9IG51bGw7CiAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHJlY29tcHV0ZU1heExlbmd0aCkgewogICAgICAgIG1heExpbmVMZW5ndGggPSAwOyBtYXhMaW5lID0gIiI7IG1heFdpZHRoID0gbnVsbDsKICAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgICAgdmFyIGwgPSBsaW5lc1tpXS50ZXh0OwogICAgICAgICAgaWYgKGwubGVuZ3RoID4gbWF4TGluZUxlbmd0aCkgewogICAgICAgICAgICBtYXhMaW5lTGVuZ3RoID0gbC5sZW5ndGg7IG1heExpbmUgPSBsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQWRkIHRoZXNlIGxpbmVzIHRvIHRoZSB3b3JrIGFycmF5LCBzbyB0aGF0IHRoZXkgd2lsbCBiZQogICAgICAvLyBoaWdobGlnaHRlZC4gQWRqdXN0IHdvcmsgbGluZXMgaWYgbGluZXMgd2VyZSBhZGRlZC9yZW1vdmVkLgogICAgICB2YXIgbmV3V29yayA9IFtdLCBsZW5kaWZmID0gbmV3VGV4dC5sZW5ndGggLSBubGluZXMgLSAxOwogICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHdvcmsubGVuZ3RoOyBpIDwgbDsgKytpKSB7CiAgICAgICAgdmFyIHRhc2sgPSB3b3JrW2ldOwogICAgICAgIGlmICh0YXNrIDwgZnJvbS5saW5lKSBuZXdXb3JrLnB1c2godGFzayk7CiAgICAgICAgZWxzZSBpZiAodGFzayA+IHRvLmxpbmUpIG5ld1dvcmsucHVzaCh0YXNrICsgbGVuZGlmZik7CiAgICAgIH0KICAgICAgaWYgKG5ld1RleHQubGVuZ3RoIDwgNSkgewogICAgICAgIGhpZ2hsaWdodExpbmVzKGZyb20ubGluZSwgZnJvbS5saW5lICsgbmV3VGV4dC5sZW5ndGgpOwogICAgICAgIG5ld1dvcmsucHVzaChmcm9tLmxpbmUgKyBuZXdUZXh0Lmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3V29yay5wdXNoKGZyb20ubGluZSk7CiAgICAgIH0KICAgICAgd29yayA9IG5ld1dvcms7CiAgICAgIHN0YXJ0V29ya2VyKDEwMCk7CiAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhlc2UgbGluZXMgY2hhbmdlZCwgZm9yIHVwZGF0aW5nIHRoZSBkaXNwbGF5CiAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0bzogdG8ubGluZSArIDEsIGRpZmY6IGxlbmRpZmZ9KTsKICAgICAgdGV4dENoYW5nZWQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBuZXdUZXh0fTsKCiAgICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uCiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmUobikge3JldHVybiBuIDw9IE1hdGgubWluKHRvLmxpbmUsIHRvLmxpbmUgKyBsZW5kaWZmKSA/IG4gOiBuICsgbGVuZGlmZjt9CiAgICAgIHNldFNlbGVjdGlvbihzZWxGcm9tLCBzZWxUbywgdXBkYXRlTGluZShzZWwuZnJvbS5saW5lKSwgdXBkYXRlTGluZShzZWwudG8ubGluZSkpOwoKICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY3JvbGwtc2l6ZSBkaXYgaGFzIHRoZSBjb3JyZWN0IGhlaWdodC4KICAgICAgY29kZS5zdHlsZS5oZWlnaHQgPSAobGluZXMubGVuZ3RoICogbGluZUhlaWdodCgpICsgMiAqIHBhZGRpbmdUb3AoKSkgKyAicHgiOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZShjb2RlLCBmcm9tLCB0bykgewogICAgICBmcm9tID0gY2xpcFBvcyhmcm9tKTsKICAgICAgaWYgKCF0bykgdG8gPSBmcm9tOyBlbHNlIHRvID0gY2xpcFBvcyh0byk7CiAgICAgIGNvZGUgPSBzcGxpdExpbmVzKGNvZGUpOwogICAgICBmdW5jdGlvbiBhZGp1c3RQb3MocG9zKSB7CiAgICAgICAgaWYgKHBvc0xlc3MocG9zLCBmcm9tKSkgcmV0dXJuIHBvczsKICAgICAgICBpZiAoIXBvc0xlc3ModG8sIHBvcykpIHJldHVybiBlbmQ7CiAgICAgICAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNvZGUubGVuZ3RoIC0gKHRvLmxpbmUgLSBmcm9tLmxpbmUpIC0gMTsKICAgICAgICB2YXIgY2ggPSBwb3MuY2g7CiAgICAgICAgaWYgKHBvcy5saW5lID09IHRvLmxpbmUpCiAgICAgICAgICBjaCArPSBjb2RlW2NvZGUubGVuZ3RoLTFdLmxlbmd0aCAtICh0by5jaCAtICh0by5saW5lID09IGZyb20ubGluZSA/IGZyb20uY2ggOiAwKSk7CiAgICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lLCBjaDogY2h9OwogICAgICB9CiAgICAgIHZhciBlbmQ7CiAgICAgIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGZ1bmN0aW9uKGVuZDEpIHsKICAgICAgICBlbmQgPSBlbmQxOwogICAgICAgIHJldHVybiB7ZnJvbTogYWRqdXN0UG9zKHNlbC5mcm9tKSwgdG86IGFkanVzdFBvcyhzZWwudG8pfTsKICAgICAgfSk7CiAgICAgIHJldHVybiBlbmQ7CiAgICB9CiAgICBmdW5jdGlvbiByZXBsYWNlU2VsZWN0aW9uKGNvZGUsIGNvbGxhcHNlKSB7CiAgICAgIHJlcGxhY2VSYW5nZTEoc3BsaXRMaW5lcyhjb2RlKSwgc2VsLmZyb20sIHNlbC50bywgZnVuY3Rpb24oZW5kKSB7CiAgICAgICAgaWYgKGNvbGxhcHNlID09ICJlbmQiKSByZXR1cm4ge2Zyb206IGVuZCwgdG86IGVuZH07CiAgICAgICAgZWxzZSBpZiAoY29sbGFwc2UgPT0gInN0YXJ0IikgcmV0dXJuIHtmcm9tOiBzZWwuZnJvbSwgdG86IHNlbC5mcm9tfTsKICAgICAgICBlbHNlIHJldHVybiB7ZnJvbTogc2VsLmZyb20sIHRvOiBlbmR9OwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGNvbXB1dGVTZWwpIHsKICAgICAgdmFyIGVuZGNoID0gY29kZS5sZW5ndGggPT0gMSA/IGNvZGVbMF0ubGVuZ3RoICsgZnJvbS5jaCA6IGNvZGVbY29kZS5sZW5ndGgtMV0ubGVuZ3RoOwogICAgICB2YXIgbmV3U2VsID0gY29tcHV0ZVNlbCh7bGluZTogZnJvbS5saW5lICsgY29kZS5sZW5ndGggLSAxLCBjaDogZW5kY2h9KTsKICAgICAgdXBkYXRlTGluZXMoZnJvbSwgdG8sIGNvZGUsIG5ld1NlbC5mcm9tLCBuZXdTZWwudG8pOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJhbmdlKGZyb20sIHRvKSB7CiAgICAgIHZhciBsMSA9IGZyb20ubGluZSwgbDIgPSB0by5saW5lOwogICAgICBpZiAobDEgPT0gbDIpIHJldHVybiBsaW5lc1tsMV0udGV4dC5zbGljZShmcm9tLmNoLCB0by5jaCk7CiAgICAgIHZhciBjb2RlID0gW2xpbmVzW2wxXS50ZXh0LnNsaWNlKGZyb20uY2gpXTsKICAgICAgZm9yICh2YXIgaSA9IGwxICsgMTsgaSA8IGwyOyArK2kpIGNvZGUucHVzaChsaW5lc1tpXS50ZXh0KTsKICAgICAgY29kZS5wdXNoKGxpbmVzW2wyXS50ZXh0LnNsaWNlKDAsIHRvLmNoKSk7CiAgICAgIHJldHVybiBjb2RlLmpvaW4oIlxuIik7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oKSB7CiAgICAgIHJldHVybiBnZXRSYW5nZShzZWwuZnJvbSwgc2VsLnRvKTsKICAgIH0KCiAgICB2YXIgcG9sbGluZ0Zhc3QgPSBmYWxzZTsgLy8gRW5zdXJlcyBzbG93UG9sbCBkb2Vzbid0IGNhbmNlbCBmYXN0UG9sbAogICAgZnVuY3Rpb24gc2xvd1BvbGwoKSB7CiAgICAgIGlmIChwb2xsaW5nRmFzdCkgcmV0dXJuOwogICAgICBwb2xsLnNldCgyMDAwLCBmdW5jdGlvbigpIHsKICAgICAgICBzdGFydE9wZXJhdGlvbigpOwogICAgICAgIHJlYWRJbnB1dCgpOwogICAgICAgIGlmIChmb2N1c2VkKSBzbG93UG9sbCgpOwogICAgICAgIGVuZE9wZXJhdGlvbigpOwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGZhc3RQb2xsKGtleUlkKSB7CiAgICAgIHZhciBtaXNzZWQgPSBmYWxzZTsKICAgICAgcG9sbGluZ0Zhc3QgPSB0cnVlOwogICAgICBmdW5jdGlvbiBwKCkgewogICAgICAgIHN0YXJ0T3BlcmF0aW9uKCk7CiAgICAgICAgdmFyIGNoYW5nZWQgPSByZWFkSW5wdXQoKTsKICAgICAgICBpZiAoY2hhbmdlZCAmJiBrZXlJZCkgewogICAgICAgICAgaWYgKGNoYW5nZWQgPT0gIm1vdmVkIiAmJiBtb3ZlbWVudEtleXNba2V5SWRdID09IG51bGwpIG1vdmVtZW50S2V5c1trZXlJZF0gPSB0cnVlOwogICAgICAgICAgaWYgKGNoYW5nZWQgPT0gImNoYW5nZWQiKSBtb3ZlbWVudEtleXNba2V5SWRdID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghY2hhbmdlZCAmJiAhbWlzc2VkKSB7bWlzc2VkID0gdHJ1ZTsgcG9sbC5zZXQoODAsIHApO30KICAgICAgICBlbHNlIHtwb2xsaW5nRmFzdCA9IGZhbHNlOyBzbG93UG9sbCgpO30KICAgICAgICBlbmRPcGVyYXRpb24oKTsKICAgICAgfQogICAgICBwb2xsLnNldCgyMCwgcCk7CiAgICB9CgogICAgLy8gSW5zcGVjdHMgdGhlIHRleHRhcmVhLCBjb21wYXJlcyBpdHMgc3RhdGUgKGNvbnRlbnQsIHNlbGVjdGlvbikKICAgIC8vIHRvIHRoZSBkYXRhIGluIHRoZSBlZGl0aW5nIHZhcmlhYmxlLCBhbmQgdXBkYXRlcyB0aGUgZWRpdG9yCiAgICAvLyBjb250ZW50IG9yIGN1cnNvciBpZiBzb21ldGhpbmcgY2hhbmdlZC4KICAgIGZ1bmN0aW9uIHJlYWRJbnB1dCgpIHsKICAgICAgaWYgKGxlYXZlSW5wdXRBbG9uZSB8fCAhZm9jdXNlZCkgcmV0dXJuOwogICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlLCB0ZXh0ID0gaW5wdXQudmFsdWUsIHNyID0gc2VsUmFuZ2UoaW5wdXQpOwogICAgICBpZiAoIXNyKSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciBjaGFuZ2VkID0gZWRpdGluZy50ZXh0ICE9IHRleHQsIHJzID0gcmVkdWNlZFNlbGVjdGlvbjsKICAgICAgdmFyIG1vdmVkID0gY2hhbmdlZCB8fCBzci5zdGFydCAhPSBlZGl0aW5nLnN0YXJ0IHx8IHNyLmVuZCAhPSAocnMgPyBlZGl0aW5nLnN0YXJ0IDogZWRpdGluZy5lbmQpOwogICAgICBpZiAoIW1vdmVkICYmICFycykgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgIHNoaWZ0U2VsZWN0aW5nID0gcmVkdWNlZFNlbGVjdGlvbiA9IG51bGw7CiAgICAgICAgaWYgKG9wdGlvbnMucmVhZE9ubHkpIHt1cGRhdGVJbnB1dCA9IHRydWU7IHJldHVybiAiY2hhbmdlZCI7fQogICAgICB9CgogICAgICAvLyBDb21wdXRlIHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kIGJhc2VkIG9uIHN0YXJ0L2VuZCBvZmZzZXRzIGluIHRleHRhcmVhCiAgICAgIGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXQobiwgc3RhcnRMaW5lKSB7CiAgICAgICAgdmFyIHBvcyA9IDA7CiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgdmFyIGZvdW5kID0gdGV4dC5pbmRleE9mKCJcbiIsIHBvcyk7CiAgICAgICAgICBpZiAoZm91bmQgPT0gLTEgfHwgKHRleHQuY2hhckF0KGZvdW5kLTEpID09ICJcciIgPyBmb3VuZCAtIDEgOiBmb3VuZCkgPj0gbikKICAgICAgICAgICAgcmV0dXJuIHtsaW5lOiBzdGFydExpbmUsIGNoOiBuIC0gcG9zfTsKICAgICAgICAgICsrc3RhcnRMaW5lOwogICAgICAgICAgcG9zID0gZm91bmQgKyAxOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgZnJvbSA9IGNvbXB1dGVPZmZzZXQoc3Iuc3RhcnQsIGVkaXRpbmcuZnJvbSksCiAgICAgICAgICB0byA9IGNvbXB1dGVPZmZzZXQoc3IuZW5kLCBlZGl0aW5nLmZyb20pOwogICAgICAvLyBIZXJlIHdlIGhhdmUgdG8gdGFrZSB0aGUgcmVkdWNlZFNlbGVjdGlvbiBoYWNrIGludG8gYWNjb3VudCwKICAgICAgLy8gc28gdGhhdCB5b3UgY2FuLCBmb3IgZXhhbXBsZSwgcHJlc3Mgc2hpZnQtdXAgYXQgdGhlIHN0YXJ0IG9mCiAgICAgIC8vIHlvdXIgc2VsZWN0aW9uIGFuZCBoYXZlIHRoZSByaWdodCB0aGluZyBoYXBwZW4uCiAgICAgIGlmIChycykgewogICAgICAgIHZhciBoZWFkID0gc3Iuc3RhcnQgPT0gcnMuYW5jaG9yID8gdG8gOiBmcm9tOwogICAgICAgIHZhciB0YWlsID0gc2hpZnRTZWxlY3RpbmcgPyBzZWwudG8gOiBzci5zdGFydCA9PSBycy5hbmNob3IgPyBmcm9tIDogdG87CiAgICAgICAgaWYgKHNlbC5pbnZlcnRlZCA9IHBvc0xlc3MoaGVhZCwgdGFpbCkpIHsgZnJvbSA9IGhlYWQ7IHRvID0gdGFpbDsgfQogICAgICAgIGVsc2UgeyByZWR1Y2VkU2VsZWN0aW9uID0gbnVsbDsgZnJvbSA9IHRhaWw7IHRvID0gaGVhZDsgfQogICAgICB9CgogICAgICAvLyBJbiBzb21lIGNhc2VzIChjdXJzb3Igb24gc2FtZSBsaW5lIGFzIGJlZm9yZSksIHdlIGRvbid0IGhhdmUKICAgICAgLy8gdG8gdXBkYXRlIHRoZSB0ZXh0YXJlYSBjb250ZW50IGF0IGFsbC4KICAgICAgaWYgKGZyb20ubGluZSA9PSB0by5saW5lICYmIGZyb20ubGluZSA9PSBzZWwuZnJvbS5saW5lICYmIGZyb20ubGluZSA9PSBzZWwudG8ubGluZSAmJiAhc2hpZnRTZWxlY3RpbmcpCiAgICAgICAgdXBkYXRlSW5wdXQgPSBmYWxzZTsKCiAgICAgIC8vIE1hZ2ljIG1lc3MgdG8gZXh0cmFjdCBwcmVjaXNlIGVkaXRlZCByYW5nZSBmcm9tIHRoZSBjaGFuZ2VkCiAgICAgIC8vIHN0cmluZy4KICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICB2YXIgc3RhcnQgPSAwLCBlbmQgPSB0ZXh0Lmxlbmd0aCwgbGVuID0gTWF0aC5taW4oZW5kLCBlZGl0aW5nLnRleHQubGVuZ3RoKTsKICAgICAgICB2YXIgYywgbGluZSA9IGVkaXRpbmcuZnJvbSwgbmwgPSAtMTsKICAgICAgICB3aGlsZSAoc3RhcnQgPCBsZW4gJiYgKGMgPSB0ZXh0LmNoYXJBdChzdGFydCkpID09IGVkaXRpbmcudGV4dC5jaGFyQXQoc3RhcnQpKSB7CiAgICAgICAgICArK3N0YXJ0OwogICAgICAgICAgaWYgKGMgPT0gIlxuIikge2xpbmUrKzsgbmwgPSBzdGFydDt9CiAgICAgICAgfQogICAgICAgIHZhciBjaCA9IG5sID4gLTEgPyBzdGFydCAtIG5sIDogc3RhcnQsIGVuZGxpbmUgPSBlZGl0aW5nLnRvIC0gMSwgZWRlbmQgPSBlZGl0aW5nLnRleHQubGVuZ3RoOwogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIGMgPSBlZGl0aW5nLnRleHQuY2hhckF0KGVkZW5kKTsKICAgICAgICAgIGlmICh0ZXh0LmNoYXJBdChlbmQpICE9IGMpIHsrK2VuZDsgKytlZGVuZDsgYnJlYWs7fQogICAgICAgICAgaWYgKGMgPT0gIlxuIikgZW5kbGluZS0tOwogICAgICAgICAgaWYgKGVkZW5kIDw9IHN0YXJ0IHx8IGVuZCA8PSBzdGFydCkgYnJlYWs7CiAgICAgICAgICAtLWVuZDsgLS1lZGVuZDsKICAgICAgICB9CiAgICAgICAgdmFyIG5sID0gZWRpdGluZy50ZXh0Lmxhc3RJbmRleE9mKCJcbiIsIGVkZW5kIC0gMSksIGVuZGNoID0gbmwgPT0gLTEgPyBlZGVuZCA6IGVkZW5kIC0gbmwgLSAxOwogICAgICAgIHVwZGF0ZUxpbmVzKHtsaW5lOiBsaW5lLCBjaDogY2h9LCB7bGluZTogZW5kbGluZSwgY2g6IGVuZGNofSwgc3BsaXRMaW5lcyh0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpKSwgZnJvbSwgdG8pOwogICAgICAgIGlmIChsaW5lICE9IGVuZGxpbmUgfHwgZnJvbS5saW5lICE9IGxpbmUpIHVwZGF0ZUlucHV0ID0gdHJ1ZTsKICAgICAgfQogICAgICBlbHNlIHNldFNlbGVjdGlvbihmcm9tLCB0byk7CgogICAgICBlZGl0aW5nLnRleHQgPSB0ZXh0OyBlZGl0aW5nLnN0YXJ0ID0gc3Iuc3RhcnQ7IGVkaXRpbmcuZW5kID0gc3IuZW5kOwogICAgICByZXR1cm4gY2hhbmdlZCA/ICJjaGFuZ2VkIiA6IG1vdmVkID8gIm1vdmVkIiA6IGZhbHNlOwogICAgfQoKICAgIC8vIFNldCB0aGUgdGV4dGFyZWEgY29udGVudCBhbmQgc2VsZWN0aW9uIHJhbmdlIHRvIG1hdGNoIHRoZQogICAgLy8gZWRpdG9yIHN0YXRlLgogICAgZnVuY3Rpb24gcHJlcGFyZUlucHV0KCkgewogICAgICB2YXIgdGV4dCA9IFtdOwogICAgICB2YXIgZnJvbSA9IE1hdGgubWF4KDAsIHNlbC5mcm9tLmxpbmUgLSAxKSwgdG8gPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIHNlbC50by5saW5lICsgMik7CiAgICAgIGZvciAodmFyIGkgPSBmcm9tOyBpIDwgdG87ICsraSkgdGV4dC5wdXNoKGxpbmVzW2ldLnRleHQpOwogICAgICB0ZXh0ID0gaW5wdXQudmFsdWUgPSB0ZXh0LmpvaW4obGluZVNlcCk7CiAgICAgIHZhciBzdGFydGNoID0gc2VsLmZyb20uY2gsIGVuZGNoID0gc2VsLnRvLmNoOwogICAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8IHNlbC5mcm9tLmxpbmU7ICsraSkKICAgICAgICBzdGFydGNoICs9IGxpbmVTZXAubGVuZ3RoICsgbGluZXNbaV0udGV4dC5sZW5ndGg7CiAgICAgIGZvciAodmFyIGkgPSBmcm9tOyBpIDwgc2VsLnRvLmxpbmU7ICsraSkKICAgICAgICBlbmRjaCArPSBsaW5lU2VwLmxlbmd0aCArIGxpbmVzW2ldLnRleHQubGVuZ3RoOwogICAgICBlZGl0aW5nID0ge3RleHQ6IHRleHQsIGZyb206IGZyb20sIHRvOiB0bywgc3RhcnQ6IHN0YXJ0Y2gsIGVuZDogZW5kY2h9OwogICAgICBzZXRTZWxSYW5nZShpbnB1dCwgc3RhcnRjaCwgcmVkdWNlZFNlbGVjdGlvbiA/IHN0YXJ0Y2ggOiBlbmRjaCk7CiAgICB9CiAgICBmdW5jdGlvbiBmb2N1c0lucHV0KCkgewogICAgICBpZiAob3B0aW9ucy5yZWFkT25seSAhPSAibm9jdXJzb3IiKSBpbnB1dC5mb2N1cygpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcm9sbEVkaXRvckludG9WaWV3KCkgewogICAgICBpZiAoIWN1cnNvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QpIHJldHVybjsKICAgICAgdmFyIHJlY3QgPSBjdXJzb3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIHZhciB3aW5IID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7CiAgICAgIGlmIChyZWN0LnRvcCA8IDAgfHwgcmVjdC5ib3R0b20gPiB3aW5IKSBjdXJzb3Iuc2Nyb2xsSW50b1ZpZXcoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNjcm9sbEN1cnNvckludG9WaWV3KCkgewogICAgICB2YXIgY3Vyc29yID0gbG9jYWxDb29yZHMoc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8pOwogICAgICByZXR1cm4gc2Nyb2xsSW50b1ZpZXcoY3Vyc29yLngsIGN1cnNvci55LCBjdXJzb3IueCwgY3Vyc29yLnlCb3QpOwogICAgfQogICAgZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoeDEsIHkxLCB4MiwgeTIpIHsKICAgICAgdmFyIHBsID0gcGFkZGluZ0xlZnQoKSwgcHQgPSBwYWRkaW5nVG9wKCksIGxoID0gbGluZUhlaWdodCgpOwogICAgICB5MSArPSBwdDsgeTIgKz0gcHQ7IHgxICs9IHBsOyB4MiArPSBwbDsKICAgICAgdmFyIHNjcmVlbiA9IHNjcm9sbGVyLmNsaWVudEhlaWdodCwgc2NyZWVudG9wID0gc2Nyb2xsZXIuc2Nyb2xsVG9wLCBzY3JvbGxlZCA9IGZhbHNlLCByZXN1bHQgPSB0cnVlOwogICAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHtzY3JvbGxlci5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCB5MSAtIDIqbGgpOyBzY3JvbGxlZCA9IHRydWU7fQogICAgICBlbHNlIGlmICh5MiA+IHNjcmVlbnRvcCArIHNjcmVlbikge3Njcm9sbGVyLnNjcm9sbFRvcCA9IHkyICsgbGggLSBzY3JlZW47IHNjcm9sbGVkID0gdHJ1ZTt9CgogICAgICB2YXIgc2NyZWVudyA9IHNjcm9sbGVyLmNsaWVudFdpZHRoLCBzY3JlZW5sZWZ0ID0gc2Nyb2xsZXIuc2Nyb2xsTGVmdDsKICAgICAgdmFyIGd1dHRlcncgPSBvcHRpb25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyLmNsaWVudFdpZHRoIDogMDsKICAgICAgaWYgKHgxIDwgc2NyZWVubGVmdCArIGd1dHRlcncpIHsKICAgICAgICBpZiAoeDEgPCA1MCkgeDEgPSAwOwogICAgICAgIHNjcm9sbGVyLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0dGVydyk7CiAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHgyID4gc2NyZWVudyArIHNjcmVlbmxlZnQpIHsKICAgICAgICBzY3JvbGxlci5zY3JvbGxMZWZ0ID0geDIgKyAxMCAtIHNjcmVlbnc7CiAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwogICAgICAgIGlmICh4MiA+IGNvZGUuY2xpZW50V2lkdGgpIHJlc3VsdCA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmIChzY3JvbGxlZCAmJiBvcHRpb25zLm9uU2Nyb2xsKSBvcHRpb25zLm9uU2Nyb2xsKGluc3RhbmNlKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBmdW5jdGlvbiB2aXNpYmxlTGluZXMoKSB7CiAgICAgIHZhciBsaCA9IGxpbmVIZWlnaHQoKSwgdG9wID0gc2Nyb2xsZXIuc2Nyb2xsVG9wIC0gcGFkZGluZ1RvcCgpOwogICAgICByZXR1cm4ge2Zyb206IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih0b3AgLyBsaCkpKSwKICAgICAgICAgICAgICB0bzogTWF0aC5taW4obGluZXMubGVuZ3RoLCBNYXRoLmNlaWwoKHRvcCArIHNjcm9sbGVyLmNsaWVudEhlaWdodCkgLyBsaCkpfTsKICAgIH0KICAgIC8vIFVzZXMgYSBzZXQgb2YgY2hhbmdlcyBwbHVzIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiB0bwogICAgLy8gZGV0ZXJtaW5lIHdoaWNoIERPTSB1cGRhdGVzIGhhdmUgdG8gYmUgbWFkZSwgYW5kIG1ha2VzIHRoZQogICAgLy8gdXBkYXRlcy4KICAgIGZ1bmN0aW9uIHVwZGF0ZURpc3BsYXkoY2hhbmdlcykgewogICAgICBpZiAoIXNjcm9sbGVyLmNsaWVudFdpZHRoKSB7CiAgICAgICAgc2hvd2luZ0Zyb20gPSBzaG93aW5nVG8gPSAwOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAvLyBGaXJzdCBjcmVhdGUgYSByYW5nZSBvZiB0aGVvcmV0aWNhbGx5IGludGFjdCBsaW5lcywgYW5kIHB1bmNoCiAgICAgIC8vIGhvbGVzIGluIHRoYXQgdXNpbmcgdGhlIGNoYW5nZSBpbmZvLgogICAgICB2YXIgaW50YWN0ID0gY2hhbmdlcyA9PT0gdHJ1ZSA/IFtdIDogW3tmcm9tOiBzaG93aW5nRnJvbSwgdG86IHNob3dpbmdUbywgZG9tU3RhcnQ6IDB9XTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGFuZ2VzLmxlbmd0aCB8fCAwOyBpIDwgbDsgKytpKSB7CiAgICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbaV0sIGludGFjdDIgPSBbXSwgZGlmZiA9IGNoYW5nZS5kaWZmIHx8IDA7CiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGwyID0gaW50YWN0Lmxlbmd0aDsgaiA8IGwyOyArK2opIHsKICAgICAgICAgIHZhciByYW5nZSA9IGludGFjdFtqXTsKICAgICAgICAgIGlmIChjaGFuZ2UudG8gPD0gcmFuZ2UuZnJvbSkKICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5nZS5mcm9tICsgZGlmZiwgdG86IHJhbmdlLnRvICsgZGlmZiwgZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0fSk7CiAgICAgICAgICBlbHNlIGlmIChyYW5nZS50byA8PSBjaGFuZ2UuZnJvbSkKICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHJhbmdlKTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoY2hhbmdlLmZyb20gPiByYW5nZS5mcm9tKQogICAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogcmFuZ2UuZnJvbSwgdG86IGNoYW5nZS5mcm9tLCBkb21TdGFydDogcmFuZ2UuZG9tU3RhcnR9KQogICAgICAgICAgICBpZiAoY2hhbmdlLnRvIDwgcmFuZ2UudG8pCiAgICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiBjaGFuZ2UudG8gKyBkaWZmLCB0bzogcmFuZ2UudG8gKyBkaWZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0ICsgKGNoYW5nZS50byAtIHJhbmdlLmZyb20pfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGludGFjdCA9IGludGFjdDI7CiAgICAgIH0KCiAgICAgIC8vIFRoZW4sIGRldGVybWluZSB3aGljaCBsaW5lcyB3ZSdkIHdhbnQgdG8gc2VlLCBhbmQgd2hpY2gKICAgICAgLy8gdXBkYXRlcyBoYXZlIHRvIGJlIG1hZGUgdG8gZ2V0IHRoZXJlLgogICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcygpOwogICAgICB2YXIgZnJvbSA9IE1hdGgubWluKHNob3dpbmdGcm9tLCBNYXRoLm1heCh2aXNpYmxlLmZyb20gLSAzLCAwKSksCiAgICAgICAgICB0byA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgTWF0aC5tYXgoc2hvd2luZ1RvLCB2aXNpYmxlLnRvICsgMykpLAogICAgICAgICAgdXBkYXRlcyA9IFtdLCBkb21Qb3MgPSAwLCBkb21FbmQgPSBzaG93aW5nVG8gLSBzaG93aW5nRnJvbSwgcG9zID0gZnJvbSwgY2hhbmdlZExpbmVzID0gMDsKCiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaW50YWN0Lmxlbmd0aDsgaSA8IGw7ICsraSkgewogICAgICAgIHZhciByYW5nZSA9IGludGFjdFtpXTsKICAgICAgICBpZiAocmFuZ2UudG8gPD0gZnJvbSkgY29udGludWU7CiAgICAgICAgaWYgKHJhbmdlLmZyb20gPj0gdG8pIGJyZWFrOwogICAgICAgIGlmIChyYW5nZS5kb21TdGFydCA+IGRvbVBvcyB8fCByYW5nZS5mcm9tID4gcG9zKSB7CiAgICAgICAgICB1cGRhdGVzLnB1c2goe2Zyb206IHBvcywgdG86IHJhbmdlLmZyb20sIGRvbVNpemU6IHJhbmdlLmRvbVN0YXJ0IC0gZG9tUG9zLCBkb21TdGFydDogZG9tUG9zfSk7CiAgICAgICAgICBjaGFuZ2VkTGluZXMgKz0gcmFuZ2UuZnJvbSAtIHBvczsKICAgICAgICB9CiAgICAgICAgcG9zID0gcmFuZ2UudG87CiAgICAgICAgZG9tUG9zID0gcmFuZ2UuZG9tU3RhcnQgKyAocmFuZ2UudG8gLSByYW5nZS5mcm9tKTsKICAgICAgfQogICAgICBpZiAoZG9tUG9zICE9IGRvbUVuZCB8fCBwb3MgIT0gdG8pIHsKICAgICAgICBjaGFuZ2VkTGluZXMgKz0gTWF0aC5hYnModG8gLSBwb3MpOwogICAgICAgIHVwZGF0ZXMucHVzaCh7ZnJvbTogcG9zLCB0bzogdG8sIGRvbVNpemU6IGRvbUVuZCAtIGRvbVBvcywgZG9tU3RhcnQ6IGRvbVBvc30pOwogICAgICAgIGlmICh0byAtIHBvcyAhPSBkb21FbmQgLSBkb21Qb3MpIGd1dHRlckRpcnR5ID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKCF1cGRhdGVzLmxlbmd0aCkgcmV0dXJuOwogICAgICBsaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIC8vIElmIG1vcmUgdGhhbiAzMCUgb2YgdGhlIHNjcmVlbiBuZWVkcyB1cGRhdGUsIGp1c3QgZG8gYSBmdWxsCiAgICAgIC8vIHJlZHJhdyAod2hpY2ggaXMgcXVpY2tlciB0aGFuIHBhdGNoaW5nKQogICAgICBpZiAoY2hhbmdlZExpbmVzID4gKHZpc2libGUudG8gLSB2aXNpYmxlLmZyb20pICogLjMpCiAgICAgICAgcmVmcmVzaERpc3BsYXkoZnJvbSA9IE1hdGgubWF4KHZpc2libGUuZnJvbSAtIDEwLCAwKSwgdG8gPSBNYXRoLm1pbih2aXNpYmxlLnRvICsgNywgbGluZXMubGVuZ3RoKSk7CiAgICAgIC8vIE90aGVyd2lzZSwgb25seSB1cGRhdGUgdGhlIHN0dWZmIHRoYXQgbmVlZHMgdXBkYXRpbmcuCiAgICAgIGVsc2UKICAgICAgICBwYXRjaERpc3BsYXkodXBkYXRlcyk7CiAgICAgIGxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICIiOwoKICAgICAgLy8gUG9zaXRpb24gdGhlIG1vdmVyIGRpdiB0byBhbGlnbiB3aXRoIHRoZSBsaW5lcyBpdCdzIHN1cHBvc2VkCiAgICAgIC8vIHRvIGJlIHNob3dpbmcgKHdoaWNoIHdpbGwgY292ZXIgdGhlIHZpc2libGUgZGlzcGxheSkKICAgICAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gc2hvd2luZ0Zyb20gfHwgdG8gIT0gc2hvd2luZ1RvIHx8IGxhc3RIZWlnaHQgIT0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0OwogICAgICBzaG93aW5nRnJvbSA9IGZyb207IHNob3dpbmdUbyA9IHRvOwogICAgICBtb3Zlci5zdHlsZS50b3AgPSAoZnJvbSAqIGxpbmVIZWlnaHQoKSkgKyAicHgiOwogICAgICBpZiAoZGlmZmVyZW50KSB7CiAgICAgICAgbGFzdEhlaWdodCA9IHNjcm9sbGVyLmNsaWVudEhlaWdodDsKICAgICAgICBjb2RlLnN0eWxlLmhlaWdodCA9IChsaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0KCkgKyAyICogcGFkZGluZ1RvcCgpKSArICJweCI7CiAgICAgIH0KICAgICAgaWYgKGRpZmZlcmVudCB8fCBndXR0ZXJEaXJ0eSkgdXBkYXRlR3V0dGVyKCk7CgogICAgICBpZiAobWF4V2lkdGggPT0gbnVsbCkgbWF4V2lkdGggPSBzdHJpbmdXaWR0aChtYXhMaW5lKTsKICAgICAgaWYgKG1heFdpZHRoID4gc2Nyb2xsZXIuY2xpZW50V2lkdGgpIHsKICAgICAgICBsaW5lU3BhY2Uuc3R5bGUud2lkdGggPSBtYXhXaWR0aCArICJweCI7CiAgICAgICAgLy8gTmVlZGVkIHRvIHByZXZlbnQgb2RkIHdyYXBwaW5nL2hpZGluZyBvZiB3aWRnZXRzIHBsYWNlZCBpbiBoZXJlLgogICAgICAgIGNvZGUuc3R5bGUud2lkdGggPSAiIjsKICAgICAgICBjb2RlLnN0eWxlLndpZHRoID0gc2Nyb2xsZXIuc2Nyb2xsV2lkdGggKyAicHgiOwogICAgICB9IGVsc2UgewogICAgICAgIGxpbmVTcGFjZS5zdHlsZS53aWR0aCA9IGNvZGUuc3R5bGUud2lkdGggPSAiIjsKICAgICAgfQoKICAgICAgLy8gU2luY2UgdGhpcyBpcyBhbGwgcmF0aGVyIGVycm9yIHByb25lLCBpdCBpcyBob25vdXJlZCB3aXRoIHRoZQogICAgICAvLyBvbmx5IGFzc2VydGlvbiBpbiB0aGUgd2hvbGUgZmlsZS4KICAgICAgaWYgKGxpbmVEaXYuY2hpbGROb2Rlcy5sZW5ndGggIT0gc2hvd2luZ1RvIC0gc2hvd2luZ0Zyb20pCiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCQUQgUEFUQ0ghICIgKyBKU09OLnN0cmluZ2lmeSh1cGRhdGVzKSArICIgc2l6ZT0iICsgKHNob3dpbmdUbyAtIHNob3dpbmdGcm9tKSArCiAgICAgICAgICAgICAgICAgICAgICAgICIgbm9kZXM9IiArIGxpbmVEaXYuY2hpbGROb2Rlcy5sZW5ndGgpOwogICAgICB1cGRhdGVDdXJzb3IoKTsKICAgIH0KCiAgICBmdW5jdGlvbiByZWZyZXNoRGlzcGxheShmcm9tLCB0bykgewogICAgICB2YXIgaHRtbCA9IFtdLCBzdGFydCA9IHtsaW5lOiBmcm9tLCBjaDogMH0sIGluU2VsID0gcG9zTGVzcyhzZWwuZnJvbSwgc3RhcnQpICYmICFwb3NMZXNzKHNlbC50bywgc3RhcnQpOwogICAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8IHRvOyArK2kpIHsKICAgICAgICB2YXIgY2gxID0gbnVsbCwgY2gyID0gbnVsbDsKICAgICAgICBpZiAoaW5TZWwpIHsKICAgICAgICAgIGNoMSA9IDA7CiAgICAgICAgICBpZiAoc2VsLnRvLmxpbmUgPT0gaSkge2luU2VsID0gZmFsc2U7IGNoMiA9IHNlbC50by5jaDt9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNlbC5mcm9tLmxpbmUgPT0gaSkgewogICAgICAgICAgaWYgKHNlbC50by5saW5lID09IGkpIHtjaDEgPSBzZWwuZnJvbS5jaDsgY2gyID0gc2VsLnRvLmNoO30KICAgICAgICAgIGVsc2Uge2luU2VsID0gdHJ1ZTsgY2gxID0gc2VsLmZyb20uY2g7fQogICAgICAgIH0KICAgICAgICBodG1sLnB1c2gobGluZXNbaV0uZ2V0SFRNTChjaDEsIGNoMiwgdHJ1ZSkpOwogICAgICB9CiAgICAgIGxpbmVEaXYuaW5uZXJIVE1MID0gaHRtbC5qb2luKCIiKTsKICAgIH0KICAgIGZ1bmN0aW9uIHBhdGNoRGlzcGxheSh1cGRhdGVzKSB7CiAgICAgIC8vIFNsaWdodGx5IGRpZmZlcmVudCBhbGdvcml0aG0gZm9yIElFIChiYWRJbm5lckhUTUwpLCBzaW5jZQogICAgICAvLyB0aGVyZSAuaW5uZXJIVE1MIG9uIFBSRSBub2RlcyBpcyBkdW1iLCBhbmQgZGlzY2FyZHMKICAgICAgLy8gd2hpdGVzcGFjZS4KICAgICAgdmFyIHNmcm9tID0gc2VsLmZyb20ubGluZSwgc3RvID0gc2VsLnRvLmxpbmUsIG9mZiA9IDAsCiAgICAgICAgICBzY3JhdGNoID0gYmFkSW5uZXJIVE1MICYmIHRhcmdldERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHVwZGF0ZXMubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgICAgdmFyIHJlYyA9IHVwZGF0ZXNbaV07CiAgICAgICAgdmFyIGV4dHJhID0gKHJlYy50byAtIHJlYy5mcm9tKSAtIHJlYy5kb21TaXplOwogICAgICAgIHZhciBub2RlQWZ0ZXIgPSBsaW5lRGl2LmNoaWxkTm9kZXNbcmVjLmRvbVN0YXJ0ICsgcmVjLmRvbVNpemUgKyBvZmZdIHx8IG51bGw7CiAgICAgICAgaWYgKGJhZElubmVySFRNTCkKICAgICAgICAgIGZvciAodmFyIGogPSBNYXRoLm1heCgtZXh0cmEsIHJlYy5kb21TaXplKTsgaiA+IDA7IC0taikKICAgICAgICAgICAgbGluZURpdi5yZW1vdmVDaGlsZChub2RlQWZ0ZXIgPyBub2RlQWZ0ZXIucHJldmlvdXNTaWJsaW5nIDogbGluZURpdi5sYXN0Q2hpbGQpOwogICAgICAgIGVsc2UgaWYgKGV4dHJhKSB7CiAgICAgICAgICBmb3IgKHZhciBqID0gTWF0aC5tYXgoMCwgZXh0cmEpOyBqID4gMDsgLS1qKQogICAgICAgICAgICBsaW5lRGl2Lmluc2VydEJlZm9yZSh0YXJnZXREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKSwgbm9kZUFmdGVyKTsKICAgICAgICAgIGZvciAodmFyIGogPSBNYXRoLm1heCgwLCAtZXh0cmEpOyBqID4gMDsgLS1qKQogICAgICAgICAgICBsaW5lRGl2LnJlbW92ZUNoaWxkKG5vZGVBZnRlciA/IG5vZGVBZnRlci5wcmV2aW91c1NpYmxpbmcgOiBsaW5lRGl2Lmxhc3RDaGlsZCk7CiAgICAgICAgfQogICAgICAgIHZhciBub2RlID0gbGluZURpdi5jaGlsZE5vZGVzW3JlYy5kb21TdGFydCArIG9mZl0sIGluU2VsID0gc2Zyb20gPCByZWMuZnJvbSAmJiBzdG8gPj0gcmVjLmZyb207CiAgICAgICAgZm9yICh2YXIgaiA9IHJlYy5mcm9tOyBqIDwgcmVjLnRvOyArK2opIHsKICAgICAgICAgIHZhciBjaDEgPSBudWxsLCBjaDIgPSBudWxsOwogICAgICAgICAgaWYgKGluU2VsKSB7CiAgICAgICAgICAgIGNoMSA9IDA7CiAgICAgICAgICAgIGlmIChzdG8gPT0gaikge2luU2VsID0gZmFsc2U7IGNoMiA9IHNlbC50by5jaDt9CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChzZnJvbSA9PSBqKSB7CiAgICAgICAgICAgIGlmIChzdG8gPT0gaikge2NoMSA9IHNlbC5mcm9tLmNoOyBjaDIgPSBzZWwudG8uY2g7fQogICAgICAgICAgICBlbHNlIHtpblNlbCA9IHRydWU7IGNoMSA9IHNlbC5mcm9tLmNoO30KICAgICAgICAgIH0KICAgICAgICAgIGlmIChiYWRJbm5lckhUTUwpIHsKICAgICAgICAgICAgc2NyYXRjaC5pbm5lckhUTUwgPSBsaW5lc1tqXS5nZXRIVE1MKGNoMSwgY2gyLCB0cnVlKTsKICAgICAgICAgICAgbGluZURpdi5pbnNlcnRCZWZvcmUoc2NyYXRjaC5maXJzdENoaWxkLCBub2RlQWZ0ZXIpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG5vZGUuaW5uZXJIVE1MID0gbGluZXNbal0uZ2V0SFRNTChjaDEsIGNoMiwgZmFsc2UpOwogICAgICAgICAgICBub2RlLmNsYXNzTmFtZSA9IGxpbmVzW2pdLmNsYXNzTmFtZSB8fCAiIjsKICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG9mZiArPSBleHRyYTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZUd1dHRlcigpIHsKICAgICAgaWYgKCFvcHRpb25zLmd1dHRlciAmJiAhb3B0aW9ucy5saW5lTnVtYmVycykgcmV0dXJuOwogICAgICB2YXIgaFRleHQgPSBtb3Zlci5vZmZzZXRIZWlnaHQsIGhFZGl0b3IgPSBzY3JvbGxlci5jbGllbnRIZWlnaHQ7CiAgICAgIGd1dHRlci5zdHlsZS5oZWlnaHQgPSAoaFRleHQgLSBoRWRpdG9yIDwgMiA/IGhFZGl0b3IgOiBoVGV4dCkgKyAicHgiOwogICAgICB2YXIgaHRtbCA9IFtdOwogICAgICBmb3IgKHZhciBpID0gc2hvd2luZ0Zyb207IGkgPCBNYXRoLm1heChzaG93aW5nVG8sIHNob3dpbmdGcm9tICsgMSk7ICsraSkgewogICAgICAgIHZhciBtYXJrZXIgPSBsaW5lc1tpXS5ndXR0ZXJNYXJrZXI7CiAgICAgICAgdmFyIHRleHQgPSBvcHRpb25zLmxpbmVOdW1iZXJzID8gaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyIDogbnVsbDsKICAgICAgICBpZiAobWFya2VyICYmIG1hcmtlci50ZXh0KQogICAgICAgICAgdGV4dCA9IG1hcmtlci50ZXh0LnJlcGxhY2UoIiVOJSIsIHRleHQgIT0gbnVsbCA/IHRleHQgOiAiIik7CiAgICAgICAgZWxzZSBpZiAodGV4dCA9PSBudWxsKQogICAgICAgICAgdGV4dCA9ICJcdTAwYTAiOwogICAgICAgIGh0bWwucHVzaCgobWFya2VyICYmIG1hcmtlci5zdHlsZSA/ICc8cHJlIGNsYXNzPSInICsgbWFya2VyLnN0eWxlICsgJyI+JyA6ICI8cHJlPiIpLCB0ZXh0LCAiPC9wcmU+Iik7CiAgICAgIH0KICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIGd1dHRlclRleHQuaW5uZXJIVE1MID0gaHRtbC5qb2luKCIiKTsKICAgICAgdmFyIG1pbndpZHRoID0gU3RyaW5nKGxpbmVzLmxlbmd0aCkubGVuZ3RoLCBmaXJzdE5vZGUgPSBndXR0ZXJUZXh0LmZpcnN0Q2hpbGQsIHZhbCA9IGVsdFRleHQoZmlyc3ROb2RlKSwgcGFkID0gIiI7CiAgICAgIHdoaWxlICh2YWwubGVuZ3RoICsgcGFkLmxlbmd0aCA8IG1pbndpZHRoKSBwYWQgKz0gIlx1MDBhMCI7CiAgICAgIGlmIChwYWQpIGZpcnN0Tm9kZS5pbnNlcnRCZWZvcmUodGFyZ2V0RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGFkKSwgZmlyc3ROb2RlLmZpcnN0Q2hpbGQpOwogICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICBsaW5lU3BhY2Uuc3R5bGUubWFyZ2luTGVmdCA9IGd1dHRlci5vZmZzZXRXaWR0aCArICJweCI7CiAgICAgIGd1dHRlckRpcnR5ID0gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGVDdXJzb3IoKSB7CiAgICAgIHZhciBoZWFkID0gc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8sIGxoID0gbGluZUhlaWdodCgpOwogICAgICB2YXIgeCA9IGNoYXJYKGhlYWQubGluZSwgaGVhZC5jaCk7CiAgICAgIHZhciB0b3AgPSBoZWFkLmxpbmUgKiBsaCAtIHNjcm9sbGVyLnNjcm9sbFRvcDsKICAgICAgaW5wdXREaXYuc3R5bGUudG9wID0gTWF0aC5tYXgoTWF0aC5taW4odG9wLCBzY3JvbGxlci5vZmZzZXRIZWlnaHQpLCAwKSArICJweCI7CiAgICAgIGlucHV0RGl2LnN0eWxlLmxlZnQgPSAoeCAtIHNjcm9sbGVyLnNjcm9sbExlZnQpICsgInB4IjsKICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSB7CiAgICAgICAgY3Vyc29yLnN0eWxlLnRvcCA9IChoZWFkLmxpbmUgLSBzaG93aW5nRnJvbSkgKiBsaCArICJweCI7CiAgICAgICAgY3Vyc29yLnN0eWxlLmxlZnQgPSB4ICsgInB4IjsKICAgICAgICBjdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICB9CiAgICAgIGVsc2UgY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uVXNlcihmcm9tLCB0bykgewogICAgICB2YXIgc2ggPSBzaGlmdFNlbGVjdGluZyAmJiBjbGlwUG9zKHNoaWZ0U2VsZWN0aW5nKTsKICAgICAgaWYgKHNoKSB7CiAgICAgICAgaWYgKHBvc0xlc3Moc2gsIGZyb20pKSBmcm9tID0gc2g7CiAgICAgICAgZWxzZSBpZiAocG9zTGVzcyh0bywgc2gpKSB0byA9IHNoOwogICAgICB9CiAgICAgIHNldFNlbGVjdGlvbihmcm9tLCB0byk7CiAgICB9CiAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbi4gTGFzdCB0d28gYXJncyBhcmUgb25seSB1c2VkIGJ5CiAgICAvLyB1cGRhdGVMaW5lcywgc2luY2UgdGhleSBoYXZlIHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbGluZQogICAgLy8gbnVtYmVycyBiZWZvcmUgdGhlIHVwZGF0ZS4KICAgIGZ1bmN0aW9uIHNldFNlbGVjdGlvbihmcm9tLCB0bywgb2xkRnJvbSwgb2xkVG8pIHsKICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBmcm9tKSAmJiBwb3NFcShzZWwudG8sIHRvKSkgcmV0dXJuOwogICAgICBpZiAocG9zTGVzcyh0bywgZnJvbSkpIHt2YXIgdG1wID0gdG87IHRvID0gZnJvbTsgZnJvbSA9IHRtcDt9CgogICAgICBpZiAocG9zRXEoZnJvbSwgdG8pKSBzZWwuaW52ZXJ0ZWQgPSBmYWxzZTsKICAgICAgZWxzZSBpZiAocG9zRXEoZnJvbSwgc2VsLnRvKSkgc2VsLmludmVydGVkID0gZmFsc2U7CiAgICAgIGVsc2UgaWYgKHBvc0VxKHRvLCBzZWwuZnJvbSkpIHNlbC5pbnZlcnRlZCA9IHRydWU7CgogICAgICAvLyBTb21lIHVnbHkgbG9naWMgdXNlZCB0byBvbmx5IG1hcmsgdGhlIGxpbmVzIHRoYXQgYWN0dWFsbHkgZGlkCiAgICAgIC8vIHNlZSBhIGNoYW5nZSBpbiBzZWxlY3Rpb24gYXMgY2hhbmdlZCwgcmF0aGVyIHRoYW4gdGhlIHdob2xlCiAgICAgIC8vIHNlbGVjdGVkIHJhbmdlLgogICAgICBpZiAob2xkRnJvbSA9PSBudWxsKSB7b2xkRnJvbSA9IHNlbC5mcm9tLmxpbmU7IG9sZFRvID0gc2VsLnRvLmxpbmU7fQogICAgICBpZiAocG9zRXEoZnJvbSwgdG8pKSB7CiAgICAgICAgaWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkKICAgICAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogb2xkRnJvbSwgdG86IG9sZFRvICsgMX0pOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSB7CiAgICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBmcm9tLmxpbmUsIHRvOiB0by5saW5lICsgMX0pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmICghcG9zRXEoZnJvbSwgc2VsLmZyb20pKSB7CiAgICAgICAgICBpZiAoZnJvbS5saW5lIDwgb2xkRnJvbSkKICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBmcm9tLmxpbmUsIHRvOiBNYXRoLm1pbih0by5saW5lLCBvbGRGcm9tKSArIDF9KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBvbGRGcm9tLCB0bzogTWF0aC5taW4ob2xkVG8sIGZyb20ubGluZSkgKyAxfSk7CiAgICAgICAgfQogICAgICAgIGlmICghcG9zRXEodG8sIHNlbC50bykpIHsKICAgICAgICAgIGlmICh0by5saW5lIDwgb2xkVG8pCiAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogTWF0aC5tYXgob2xkRnJvbSwgZnJvbS5saW5lKSwgdG86IG9sZFRvICsgMX0pOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IE1hdGgubWF4KGZyb20ubGluZSwgb2xkVG8pLCB0bzogdG8ubGluZSArIDF9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2VsLmZyb20gPSBmcm9tOyBzZWwudG8gPSB0bzsKICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRDdXJzb3IobGluZSwgY2gsIHVzZXIpIHsKICAgICAgdmFyIHBvcyA9IGNsaXBQb3Moe2xpbmU6IGxpbmUsIGNoOiBjaCB8fCAwfSk7CiAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNlciA6IHNldFNlbGVjdGlvbikocG9zLCBwb3MpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsaXBMaW5lKG4pIHtyZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4obiwgbGluZXMubGVuZ3RoLTEpKTt9CiAgICBmdW5jdGlvbiBjbGlwUG9zKHBvcykgewogICAgICBpZiAocG9zLmxpbmUgPCAwKSByZXR1cm4ge2xpbmU6IDAsIGNoOiAwfTsKICAgICAgaWYgKHBvcy5saW5lID49IGxpbmVzLmxlbmd0aCkgcmV0dXJuIHtsaW5lOiBsaW5lcy5sZW5ndGgtMSwgY2g6IGxpbmVzW2xpbmVzLmxlbmd0aC0xXS50ZXh0Lmxlbmd0aH07CiAgICAgIHZhciBjaCA9IHBvcy5jaCwgbGluZWxlbiA9IGxpbmVzW3Bvcy5saW5lXS50ZXh0Lmxlbmd0aDsKICAgICAgaWYgKGNoID09IG51bGwgfHwgY2ggPiBsaW5lbGVuKSByZXR1cm4ge2xpbmU6IHBvcy5saW5lLCBjaDogbGluZWxlbn07CiAgICAgIGVsc2UgaWYgKGNoIDwgMCkgcmV0dXJuIHtsaW5lOiBwb3MubGluZSwgY2g6IDB9OwogICAgICBlbHNlIHJldHVybiBwb3M7CiAgICB9CgogICAgZnVuY3Rpb24gc2Nyb2xsUGFnZShkb3duKSB7CiAgICAgIHZhciBsaW5lc1BlclBhZ2UgPSBNYXRoLmZsb29yKHNjcm9sbGVyLmNsaWVudEhlaWdodCAvIGxpbmVIZWlnaHQoKSksIGhlYWQgPSBzZWwuaW52ZXJ0ZWQgPyBzZWwuZnJvbSA6IHNlbC50bzsKICAgICAgc2V0Q3Vyc29yKGhlYWQubGluZSArIChNYXRoLm1heChsaW5lc1BlclBhZ2UgLSAxLCAxKSAqIChkb3duID8gMSA6IC0xKSksIGhlYWQuY2gsIHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gc2Nyb2xsRW5kKHRvcCkgewogICAgICB2YXIgcG9zID0gdG9wID8ge2xpbmU6IDAsIGNoOiAwfSA6IHtsaW5lOiBsaW5lcy5sZW5ndGggLSAxLCBjaDogbGluZXNbbGluZXMubGVuZ3RoLTFdLnRleHQubGVuZ3RofTsKICAgICAgc2V0U2VsZWN0aW9uVXNlcihwb3MsIHBvcyk7CiAgICB9CiAgICBmdW5jdGlvbiBzZWxlY3RBbGwoKSB7CiAgICAgIHZhciBlbmRMaW5lID0gbGluZXMubGVuZ3RoIC0gMTsKICAgICAgc2V0U2VsZWN0aW9uKHtsaW5lOiAwLCBjaDogMH0sIHtsaW5lOiBlbmRMaW5lLCBjaDogbGluZXNbZW5kTGluZV0udGV4dC5sZW5ndGh9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlbGVjdFdvcmRBdChwb3MpIHsKICAgICAgdmFyIGxpbmUgPSBsaW5lc1twb3MubGluZV0udGV4dDsKICAgICAgdmFyIHN0YXJ0ID0gcG9zLmNoLCBlbmQgPSBwb3MuY2g7CiAgICAgIHdoaWxlIChzdGFydCA+IDAgJiYgL1x3Ly50ZXN0KGxpbmUuY2hhckF0KHN0YXJ0IC0gMSkpKSAtLXN0YXJ0OwogICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgL1x3Ly50ZXN0KGxpbmUuY2hhckF0KGVuZCkpKSArK2VuZDsKICAgICAgc2V0U2VsZWN0aW9uVXNlcih7bGluZTogcG9zLmxpbmUsIGNoOiBzdGFydH0sIHtsaW5lOiBwb3MubGluZSwgY2g6IGVuZH0pOwogICAgfQogICAgZnVuY3Rpb24gc2VsZWN0TGluZShsaW5lKSB7CiAgICAgIHNldFNlbGVjdGlvblVzZXIoe2xpbmU6IGxpbmUsIGNoOiAwfSwge2xpbmU6IGxpbmUsIGNoOiBsaW5lc1tsaW5lXS50ZXh0Lmxlbmd0aH0pOwogICAgfQogICAgZnVuY3Rpb24gaGFuZGxlRW50ZXIoKSB7CiAgICAgIHJlcGxhY2VTZWxlY3Rpb24oIlxuIiwgImVuZCIpOwogICAgICBpZiAob3B0aW9ucy5lbnRlck1vZGUgIT0gImZsYXQiKQogICAgICAgIGluZGVudExpbmUoc2VsLmZyb20ubGluZSwgb3B0aW9ucy5lbnRlck1vZGUgPT0gImtlZXAiID8gInByZXYiIDogInNtYXJ0Iik7CiAgICB9CiAgICBmdW5jdGlvbiBoYW5kbGVUYWIoc2hpZnQpIHsKICAgICAgZnVuY3Rpb24gaW5kZW50U2VsZWN0ZWQobW9kZSkgewogICAgICAgIGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmV0dXJuIGluZGVudExpbmUoc2VsLmZyb20ubGluZSwgbW9kZSk7CiAgICAgICAgdmFyIGUgPSBzZWwudG8ubGluZSAtIChzZWwudG8uY2ggPyAwIDogMSk7CiAgICAgICAgZm9yICh2YXIgaSA9IHNlbC5mcm9tLmxpbmU7IGkgPD0gZTsgKytpKSBpbmRlbnRMaW5lKGksIG1vZGUpOwogICAgICB9CiAgICAgIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDsKICAgICAgc3dpdGNoIChvcHRpb25zLnRhYk1vZGUpIHsKICAgICAgY2FzZSAiZGVmYXVsdCI6CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBjYXNlICJpbmRlbnQiOgogICAgICAgIGluZGVudFNlbGVjdGVkKCJzbWFydCIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJjbGFzc2ljIjoKICAgICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHsKICAgICAgICAgIGlmIChzaGlmdCkgaW5kZW50TGluZShzZWwuZnJvbS5saW5lLCAic21hcnQiKTsKICAgICAgICAgIGVsc2UgcmVwbGFjZVNlbGVjdGlvbigiXHQiLCAiZW5kIik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgInNoaWZ0IjoKICAgICAgICBpbmRlbnRTZWxlY3RlZChzaGlmdCA/ICJzdWJ0cmFjdCIgOiAiYWRkIik7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBzbWFydEhvbWUoKSB7CiAgICAgIHZhciBmaXJzdE5vbldTID0gTWF0aC5tYXgoMCwgbGluZXNbc2VsLmZyb20ubGluZV0udGV4dC5zZWFyY2goL1xTLykpOwogICAgICBzZXRDdXJzb3Ioc2VsLmZyb20ubGluZSwgc2VsLmZyb20uY2ggPD0gZmlyc3ROb25XUyAmJiBzZWwuZnJvbS5jaCA/IDAgOiBmaXJzdE5vbldTLCB0cnVlKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmRlbnRMaW5lKG4sIGhvdykgewogICAgICBpZiAoaG93ID09ICJzbWFydCIpIHsKICAgICAgICBpZiAoIW1vZGUuaW5kZW50KSBob3cgPSAicHJldiI7CiAgICAgICAgZWxzZSB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShuKTsKICAgICAgfQoKICAgICAgdmFyIGxpbmUgPSBsaW5lc1tuXSwgY3VyU3BhY2UgPSBsaW5lLmluZGVudGF0aW9uKCksIGN1clNwYWNlU3RyaW5nID0gbGluZS50ZXh0Lm1hdGNoKC9eXHMqLylbMF0sIGluZGVudGF0aW9uOwogICAgICBpZiAoaG93ID09ICJwcmV2IikgewogICAgICAgIGlmIChuKSBpbmRlbnRhdGlvbiA9IGxpbmVzW24tMV0uaW5kZW50YXRpb24oKTsKICAgICAgICBlbHNlIGluZGVudGF0aW9uID0gMDsKICAgICAgfQogICAgICBlbHNlIGlmIChob3cgPT0gInNtYXJ0IikgaW5kZW50YXRpb24gPSBtb2RlLmluZGVudChzdGF0ZSwgbGluZS50ZXh0LnNsaWNlKGN1clNwYWNlU3RyaW5nLmxlbmd0aCkpOwogICAgICBlbHNlIGlmIChob3cgPT0gImFkZCIpIGluZGVudGF0aW9uID0gY3VyU3BhY2UgKyBvcHRpb25zLmluZGVudFVuaXQ7CiAgICAgIGVsc2UgaWYgKGhvdyA9PSAic3VidHJhY3QiKSBpbmRlbnRhdGlvbiA9IGN1clNwYWNlIC0gb3B0aW9ucy5pbmRlbnRVbml0OwogICAgICBpbmRlbnRhdGlvbiA9IE1hdGgubWF4KDAsIGluZGVudGF0aW9uKTsKICAgICAgdmFyIGRpZmYgPSBpbmRlbnRhdGlvbiAtIGN1clNwYWNlOwoKICAgICAgaWYgKCFkaWZmKSB7CiAgICAgICAgaWYgKHNlbC5mcm9tLmxpbmUgIT0gbiAmJiBzZWwudG8ubGluZSAhPSBuKSByZXR1cm47CiAgICAgICAgdmFyIGluZGVudFN0cmluZyA9IGN1clNwYWNlU3RyaW5nOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHZhciBpbmRlbnRTdHJpbmcgPSAiIiwgcG9zID0gMDsKICAgICAgICBpZiAob3B0aW9ucy5pbmRlbnRXaXRoVGFicykKICAgICAgICAgIGZvciAodmFyIGkgPSBNYXRoLmZsb29yKGluZGVudGF0aW9uIC8gdGFiU2l6ZSk7IGk7IC0taSkge3BvcyArPSB0YWJTaXplOyBpbmRlbnRTdHJpbmcgKz0gIlx0Ijt9CiAgICAgICAgd2hpbGUgKHBvcyA8IGluZGVudGF0aW9uKSB7Kytwb3M7IGluZGVudFN0cmluZyArPSAiICI7fQogICAgICB9CgogICAgICByZXBsYWNlUmFuZ2UoaW5kZW50U3RyaW5nLCB7bGluZTogbiwgY2g6IDB9LCB7bGluZTogbiwgY2g6IGN1clNwYWNlU3RyaW5nLmxlbmd0aH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGxvYWRNb2RlKCkgewogICAgICBtb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsIG9wdGlvbnMubW9kZSk7CiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgKytpKQogICAgICAgIGxpbmVzW2ldLnN0YXRlQWZ0ZXIgPSBudWxsOwogICAgICB3b3JrID0gWzBdOwogICAgICBzdGFydFdvcmtlcigpOwogICAgfQogICAgZnVuY3Rpb24gZ3V0dGVyQ2hhbmdlZCgpIHsKICAgICAgdmFyIHZpc2libGUgPSBvcHRpb25zLmd1dHRlciB8fCBvcHRpb25zLmxpbmVOdW1iZXJzOwogICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAiIiA6ICJub25lIjsKICAgICAgaWYgKHZpc2libGUpIGd1dHRlckRpcnR5ID0gdHJ1ZTsKICAgICAgZWxzZSBsaW5lRGl2LnBhcmVudE5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IDA7CiAgICB9CgogICAgZnVuY3Rpb24gbWFya1RleHQoZnJvbSwgdG8sIGNsYXNzTmFtZSkgewogICAgICBmcm9tID0gY2xpcFBvcyhmcm9tKTsgdG8gPSBjbGlwUG9zKHRvKTsKICAgICAgdmFyIGFjY3VtID0gW107CiAgICAgIGZ1bmN0aW9uIGFkZChsaW5lLCBmcm9tLCB0bywgY2xhc3NOYW1lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tsaW5lXSwgbWFyayA9IGxpbmUuYWRkTWFyayhmcm9tLCB0bywgY2xhc3NOYW1lKTsKICAgICAgICBtYXJrLmxpbmUgPSBsaW5lOwogICAgICAgIGFjY3VtLnB1c2gobWFyayk7CiAgICAgIH0KICAgICAgaWYgKGZyb20ubGluZSA9PSB0by5saW5lKSBhZGQoZnJvbS5saW5lLCBmcm9tLmNoLCB0by5jaCwgY2xhc3NOYW1lKTsKICAgICAgZWxzZSB7CiAgICAgICAgYWRkKGZyb20ubGluZSwgZnJvbS5jaCwgbnVsbCwgY2xhc3NOYW1lKTsKICAgICAgICBmb3IgKHZhciBpID0gZnJvbS5saW5lICsgMSwgZSA9IHRvLmxpbmU7IGkgPCBlOyArK2kpCiAgICAgICAgICBhZGQoaSwgMCwgbnVsbCwgY2xhc3NOYW1lKTsKICAgICAgICBhZGQodG8ubGluZSwgMCwgdG8uY2gsIGNsYXNzTmFtZSk7CiAgICAgIH0KICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBmcm9tLmxpbmUsIHRvOiB0by5saW5lICsgMX0pOwogICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN0YXJ0LCBlbmQ7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2N1bS5sZW5ndGg7ICsraSkgewogICAgICAgICAgdmFyIG1hcmsgPSBhY2N1bVtpXSwgZm91bmQgPSBpbmRleE9mKGxpbmVzLCBtYXJrLmxpbmUpOwogICAgICAgICAgbWFyay5saW5lLnJlbW92ZU1hcmsobWFyayk7CiAgICAgICAgICBpZiAoZm91bmQgPiAtMSkgewogICAgICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgc3RhcnQgPSBmb3VuZDsKICAgICAgICAgICAgZW5kID0gZm91bmQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydCAhPSBudWxsKSBjaGFuZ2VzLnB1c2goe2Zyb206IHN0YXJ0LCB0bzogZW5kICsgMX0pOwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZEd1dHRlck1hcmtlcihsaW5lLCB0ZXh0LCBjbGFzc05hbWUpIHsKICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSBsaW5lID0gbGluZXNbY2xpcExpbmUobGluZSldOwogICAgICBsaW5lLmd1dHRlck1hcmtlciA9IHt0ZXh0OiB0ZXh0LCBzdHlsZTogY2xhc3NOYW1lfTsKICAgICAgZ3V0dGVyRGlydHkgPSB0cnVlOwogICAgICByZXR1cm4gbGluZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlbW92ZUd1dHRlck1hcmtlcihsaW5lKSB7CiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGxpbmVzW2NsaXBMaW5lKGxpbmUpXTsKICAgICAgbGluZS5ndXR0ZXJNYXJrZXIgPSBudWxsOwogICAgICBndXR0ZXJEaXJ0eSA9IHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRMaW5lQ2xhc3MobGluZSwgY2xhc3NOYW1lKSB7CiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgewogICAgICAgIHZhciBubyA9IGxpbmU7CiAgICAgICAgbGluZSA9IGxpbmVzW2NsaXBMaW5lKGxpbmUpXTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB2YXIgbm8gPSBpbmRleE9mKGxpbmVzLCBsaW5lKTsKICAgICAgICBpZiAobm8gPT0gLTEpIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChsaW5lLmNsYXNzTmFtZSAhPSBjbGFzc05hbWUpIHsKICAgICAgICBsaW5lLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IG5vLCB0bzogbm8gKyAxfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGxpbmU7CiAgICB9CgogICAgZnVuY3Rpb24gbGluZUluZm8obGluZSkgewogICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIHsKICAgICAgICB2YXIgbiA9IGxpbmU7CiAgICAgICAgbGluZSA9IGxpbmVzW2xpbmVdOwogICAgICAgIGlmICghbGluZSkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIG4gPSBpbmRleE9mKGxpbmVzLCBsaW5lKTsKICAgICAgICBpZiAobiA9PSAtMSkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgdmFyIG1hcmtlciA9IGxpbmUuZ3V0dGVyTWFya2VyOwogICAgICByZXR1cm4ge2xpbmU6IG4sIHRleHQ6IGxpbmUudGV4dCwgbWFya2VyVGV4dDogbWFya2VyICYmIG1hcmtlci50ZXh0LCBtYXJrZXJDbGFzczogbWFya2VyICYmIG1hcmtlci5zdHlsZX07CiAgICB9CgogICAgZnVuY3Rpb24gc3RyaW5nV2lkdGgoc3RyKSB7CiAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gIjxwcmU+PHNwYW4+eDwvc3Bhbj48L3ByZT4iOwogICAgICBtZWFzdXJlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IHN0cjsKICAgICAgcmV0dXJuIG1lYXN1cmUuZmlyc3RDaGlsZC5maXJzdENoaWxkLm9mZnNldFdpZHRoIHx8IDEwOwogICAgfQogICAgLy8gVGhlc2UgYXJlIHVzZWQgdG8gZ28gZnJvbSBwaXhlbCBwb3NpdGlvbnMgdG8gY2hhcmFjdGVyCiAgICAvLyBwb3NpdGlvbnMsIHRha2luZyB2YXJ5aW5nIGNoYXJhY3RlciB3aWR0aHMgaW50byBhY2NvdW50LgogICAgZnVuY3Rpb24gY2hhclgobGluZSwgcG9zKSB7CiAgICAgIGlmIChwb3MgPT0gMCkgcmV0dXJuIDA7CiAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gIjxwcmU+PHNwYW4+IiArIGxpbmVzW2xpbmVdLmdldEhUTUwobnVsbCwgbnVsbCwgZmFsc2UsIHBvcykgKyAiPC9zcGFuPjwvcHJlPiI7CiAgICAgIHJldHVybiBtZWFzdXJlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aDsKICAgIH0KICAgIGZ1bmN0aW9uIGNoYXJGcm9tWChsaW5lLCB4KSB7CiAgICAgIGlmICh4IDw9IDApIHJldHVybiAwOwogICAgICB2YXIgbGluZU9iaiA9IGxpbmVzW2xpbmVdLCB0ZXh0ID0gbGluZU9iai50ZXh0OwogICAgICBmdW5jdGlvbiBnZXRYKGxlbikgewogICAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gIjxwcmU+PHNwYW4+IiArIGxpbmVPYmouZ2V0SFRNTChudWxsLCBudWxsLCBmYWxzZSwgbGVuKSArICI8L3NwYW4+PC9wcmU+IjsKICAgICAgICByZXR1cm4gbWVhc3VyZS5maXJzdENoaWxkLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGg7CiAgICAgIH0KICAgICAgdmFyIGZyb20gPSAwLCBmcm9tWCA9IDAsIHRvID0gdGV4dC5sZW5ndGgsIHRvWDsKICAgICAgLy8gR3Vlc3MgYSBzdWl0YWJsZSB1cHBlciBib3VuZCBmb3Igb3VyIHNlYXJjaC4KICAgICAgdmFyIGVzdGltYXRlZCA9IE1hdGgubWluKHRvLCBNYXRoLmNlaWwoeCAvIHN0cmluZ1dpZHRoKCJ4IikpKTsKICAgICAgZm9yICg7OykgewogICAgICAgIHZhciBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOwogICAgICAgIGlmIChlc3RYIDw9IHggJiYgZXN0aW1hdGVkIDwgdG8pIGVzdGltYXRlZCA9IE1hdGgubWluKHRvLCBNYXRoLmNlaWwoZXN0aW1hdGVkICogMS4yKSk7CiAgICAgICAgZWxzZSB7dG9YID0gZXN0WDsgdG8gPSBlc3RpbWF0ZWQ7IGJyZWFrO30KICAgICAgfQogICAgICBpZiAoeCA+IHRvWCkgcmV0dXJuIHRvOwogICAgICAvLyBUcnkgdG8gZ3Vlc3MgYSBzdWl0YWJsZSBsb3dlciBib3VuZCBhcyB3ZWxsLgogICAgICBlc3RpbWF0ZWQgPSBNYXRoLmZsb29yKHRvICogMC44KTsgZXN0WCA9IGdldFgoZXN0aW1hdGVkKTsKICAgICAgaWYgKGVzdFggPCB4KSB7ZnJvbSA9IGVzdGltYXRlZDsgZnJvbVggPSBlc3RYO30KICAgICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoIGJldHdlZW4gdGhlc2UgYm91bmRzLgogICAgICBmb3IgKDs7KSB7CiAgICAgICAgaWYgKHRvIC0gZnJvbSA8PSAxKSByZXR1cm4gKHRvWCAtIHggPiB4IC0gZnJvbVgpID8gZnJvbSA6IHRvOwogICAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmNlaWwoKGZyb20gKyB0bykgLyAyKSwgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKICAgICAgICBpZiAobWlkZGxlWCA+IHgpIHt0byA9IG1pZGRsZTsgdG9YID0gbWlkZGxlWDt9CiAgICAgICAgZWxzZSB7ZnJvbSA9IG1pZGRsZTsgZnJvbVggPSBtaWRkbGVYO30KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGxvY2FsQ29vcmRzKHBvcywgaW5MaW5lV3JhcCkgewogICAgICB2YXIgbGggPSBsaW5lSGVpZ2h0KCksIGxpbmUgPSBwb3MubGluZSAtIChpbkxpbmVXcmFwID8gc2hvd2luZ0Zyb20gOiAwKTsKICAgICAgcmV0dXJuIHt4OiBjaGFyWChwb3MubGluZSwgcG9zLmNoKSwgeTogbGluZSAqIGxoLCB5Qm90OiAobGluZSArIDEpICogbGh9OwogICAgfQogICAgZnVuY3Rpb24gcGFnZUNvb3Jkcyhwb3MpIHsKICAgICAgdmFyIGxvY2FsID0gbG9jYWxDb29yZHMocG9zLCB0cnVlKSwgb2ZmID0gZWx0T2Zmc2V0KGxpbmVTcGFjZSk7CiAgICAgIHJldHVybiB7eDogb2ZmLmxlZnQgKyBsb2NhbC54LCB5OiBvZmYudG9wICsgbG9jYWwueSwgeUJvdDogb2ZmLnRvcCArIGxvY2FsLnlCb3R9OwogICAgfQoKICAgIGZ1bmN0aW9uIGxpbmVIZWlnaHQoKSB7CiAgICAgIHZhciBubGluZXMgPSBsaW5lRGl2LmNoaWxkTm9kZXMubGVuZ3RoOwogICAgICBpZiAobmxpbmVzKSByZXR1cm4gKGxpbmVEaXYub2Zmc2V0SGVpZ2h0IC8gbmxpbmVzKSB8fCAxOwogICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICI8cHJlPng8L3ByZT4iOwogICAgICByZXR1cm4gbWVhc3VyZS5maXJzdENoaWxkLm9mZnNldEhlaWdodCB8fCAxOwogICAgfQogICAgZnVuY3Rpb24gcGFkZGluZ1RvcCgpIHtyZXR1cm4gbGluZVNwYWNlLm9mZnNldFRvcDt9CiAgICBmdW5jdGlvbiBwYWRkaW5nTGVmdCgpIHtyZXR1cm4gbGluZVNwYWNlLm9mZnNldExlZnQ7fQoKICAgIGZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShlLCBsaWJlcmFsKSB7CiAgICAgIHZhciBvZmZXID0gZWx0T2Zmc2V0KHNjcm9sbGVyLCB0cnVlKSwgeCwgeTsKICAgICAgLy8gRmFpbHMgdW5wcmVkaWN0YWJseSBvbiBJRVs2N10gd2hlbiBtb3VzZSBpcyBkcmFnZ2VkIGFyb3VuZCBxdWlja2x5LgogICAgICB0cnkgeyB4ID0gZS5jbGllbnRYOyB5ID0gZS5jbGllbnRZOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9CiAgICAgIC8vIFRoaXMgaXMgYSBtZXNzIG9mIGEgaGV1cmlzdGljIHRvIHRyeSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgYQogICAgICAvLyBzY3JvbGwtYmFyIHdhcyBjbGlja2VkIG9yIG5vdCwgYW5kIHRvIHJldHVybiBudWxsIGlmIG9uZSB3YXMKICAgICAgLy8gKGFuZCAhbGliZXJhbCkuCiAgICAgIGlmICghbGliZXJhbCAmJiAoeCAtIG9mZlcubGVmdCA+IHNjcm9sbGVyLmNsaWVudFdpZHRoIHx8IHkgLSBvZmZXLnRvcCA+IHNjcm9sbGVyLmNsaWVudEhlaWdodCkpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHZhciBvZmZMID0gZWx0T2Zmc2V0KGxpbmVTcGFjZSwgdHJ1ZSk7CiAgICAgIHZhciBsaW5lID0gc2hvd2luZ0Zyb20gKyBNYXRoLmZsb29yKCh5IC0gb2ZmTC50b3ApIC8gbGluZUhlaWdodCgpKTsKICAgICAgcmV0dXJuIGNsaXBQb3Moe2xpbmU6IGxpbmUsIGNoOiBjaGFyRnJvbVgoY2xpcExpbmUobGluZSksIHggLSBvZmZMLmxlZnQpfSk7CiAgICB9CiAgICBmdW5jdGlvbiBvbkNvbnRleHRNZW51KGUpIHsKICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShlKTsKICAgICAgaWYgKCFwb3MgfHwgd2luZG93Lm9wZXJhKSByZXR1cm47IC8vIE9wZXJhIGlzIGRpZmZpY3VsdC4KICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pIHx8IHBvc0xlc3MocG9zLCBzZWwuZnJvbSkgfHwgIXBvc0xlc3MocG9zLCBzZWwudG8pKQogICAgICAgIG9wZXJhdGlvbihzZXRDdXJzb3IpKHBvcy5saW5lLCBwb3MuY2gpOwoKICAgICAgdmFyIG9sZENTUyA9IGlucHV0LnN0eWxlLmNzc1RleHQ7CiAgICAgIGlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgaW5wdXQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLmNsaWVudFkgLSA1KSArCiAgICAgICAgInB4OyBsZWZ0OiAiICsgKGUuY2xpZW50WCAtIDUpICsgInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgIiArCiAgICAgICAgImJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsgb3BhY2l0eTogLjA1OyBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9NSk7IjsKICAgICAgbGVhdmVJbnB1dEFsb25lID0gdHJ1ZTsKICAgICAgdmFyIHZhbCA9IGlucHV0LnZhbHVlID0gZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGZvY3VzSW5wdXQoKTsKICAgICAgc2V0U2VsUmFuZ2UoaW5wdXQsIDAsIGlucHV0LnZhbHVlLmxlbmd0aCk7CiAgICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHsKICAgICAgICB2YXIgbmV3VmFsID0gc3BsaXRMaW5lcyhpbnB1dC52YWx1ZSkuam9pbigiXG4iKTsKICAgICAgICBpZiAobmV3VmFsICE9IHZhbCkgb3BlcmF0aW9uKHJlcGxhY2VTZWxlY3Rpb24pKG5ld1ZhbCwgImVuZCIpOwogICAgICAgIGlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKICAgICAgICBpbnB1dC5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTOwogICAgICAgIGxlYXZlSW5wdXRBbG9uZSA9IGZhbHNlOwogICAgICAgIHByZXBhcmVJbnB1dCgpOwogICAgICAgIHNsb3dQb2xsKCk7CiAgICAgIH0KICAgICAgCiAgICAgIGlmIChnZWNrbykgewogICAgICAgIGVfc3RvcChlKTsKICAgICAgICB2YXIgbW91c2V1cCA9IGNvbm5lY3Qod2luZG93LCAibW91c2V1cCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgbW91c2V1cCgpOwogICAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDIwKTsKICAgICAgICB9LCB0cnVlKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgNTApOwogICAgICB9CiAgICB9CgogICAgLy8gQ3Vyc29yLWJsaW5raW5nCiAgICBmdW5jdGlvbiByZXN0YXJ0QmxpbmsoKSB7CiAgICAgIGNsZWFySW50ZXJ2YWwoYmxpbmtlcik7CiAgICAgIHZhciBvbiA9IHRydWU7CiAgICAgIGN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gIiI7CiAgICAgIGJsaW5rZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICBjdXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyAiIiA6ICJoaWRkZW4iOwogICAgICB9LCA2NTApOwogICAgfQoKICAgIHZhciBtYXRjaGluZyA9IHsiKCI6ICIpPiIsICIpIjogIig8IiwgIlsiOiAiXT4iLCAiXSI6ICJbPCIsICJ7IjogIn0+IiwgIn0iOiAiezwifTsKICAgIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHMoYXV0b2NsZWFyKSB7CiAgICAgIHZhciBoZWFkID0gc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8sIGxpbmUgPSBsaW5lc1toZWFkLmxpbmVdLCBwb3MgPSBoZWFkLmNoIC0gMTsKICAgICAgdmFyIG1hdGNoID0gKHBvcyA+PSAwICYmIG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQocG9zKV0pIHx8IG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQoKytwb3MpXTsKICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuOwogICAgICB2YXIgY2ggPSBtYXRjaC5jaGFyQXQoMCksIGZvcndhcmQgPSBtYXRjaC5jaGFyQXQoMSkgPT0gIj4iLCBkID0gZm9yd2FyZCA/IDEgOiAtMSwgc3QgPSBsaW5lLnN0eWxlczsKICAgICAgZm9yICh2YXIgb2ZmID0gcG9zICsgMSwgaSA9IDAsIGUgPSBzdC5sZW5ndGg7IGkgPCBlOyBpKz0yKQogICAgICAgIGlmICgob2ZmIC09IHN0W2ldLmxlbmd0aCkgPD0gMCkge3ZhciBzdHlsZSA9IHN0W2krMV07IGJyZWFrO30KCiAgICAgIHZhciBzdGFjayA9IFtsaW5lLnRleHQuY2hhckF0KHBvcyldLCByZSA9IC9bKCl7fVtcXV0vOwogICAgICBmdW5jdGlvbiBzY2FuKGxpbmUsIGZyb20sIHRvKSB7CiAgICAgICAgaWYgKCFsaW5lLnRleHQpIHJldHVybjsKICAgICAgICB2YXIgc3QgPSBsaW5lLnN0eWxlcywgcG9zID0gZm9yd2FyZCA/IDAgOiBsaW5lLnRleHQubGVuZ3RoIC0gMSwgY3VyOwogICAgICAgIGZvciAodmFyIGkgPSBmb3J3YXJkID8gMCA6IHN0Lmxlbmd0aCAtIDIsIGUgPSBmb3J3YXJkID8gc3QubGVuZ3RoIDogLTI7IGkgIT0gZTsgaSArPSAyKmQpIHsKICAgICAgICAgIHZhciB0ZXh0ID0gc3RbaV07CiAgICAgICAgICBpZiAoc3RbaSsxXSAhPSBudWxsICYmIHN0W2krMV0gIT0gc3R5bGUpIHtwb3MgKz0gZCAqIHRleHQubGVuZ3RoOyBjb250aW51ZTt9CiAgICAgICAgICBmb3IgKHZhciBqID0gZm9yd2FyZCA/IDAgOiB0ZXh0Lmxlbmd0aCAtIDEsIHRlID0gZm9yd2FyZCA/IHRleHQubGVuZ3RoIDogLTE7IGogIT0gdGU7IGogKz0gZCwgcG9zKz1kKSB7CiAgICAgICAgICAgIGlmIChwb3MgPj0gZnJvbSAmJiBwb3MgPCB0byAmJiByZS50ZXN0KGN1ciA9IHRleHQuY2hhckF0KGopKSkgewogICAgICAgICAgICAgIHZhciBtYXRjaCA9IG1hdGNoaW5nW2N1cl07CiAgICAgICAgICAgICAgaWYgKG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIgPT0gZm9yd2FyZCkgc3RhY2sucHVzaChjdXIpOwogICAgICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZhbHNlfTsKICAgICAgICAgICAgICBlbHNlIGlmICghc3RhY2subGVuZ3RoKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogdHJ1ZX07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IGhlYWQubGluZSwgZSA9IGZvcndhcmQgPyBNYXRoLm1pbihpICsgMTAwLCBsaW5lcy5sZW5ndGgpIDogTWF0aC5tYXgoLTEsIGkgLSAxMDApOyBpICE9IGU7IGkrPWQpIHsKICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2ldLCBmaXJzdCA9IGkgPT0gaGVhZC5saW5lOwogICAgICAgIHZhciBmb3VuZCA9IHNjYW4obGluZSwgZmlyc3QgJiYgZm9yd2FyZCA/IHBvcyArIDEgOiAwLCBmaXJzdCAmJiAhZm9yd2FyZCA/IHBvcyA6IGxpbmUudGV4dC5sZW5ndGgpOwogICAgICAgIGlmIChmb3VuZCkgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSB7cG9zOiBudWxsLCBtYXRjaDogZmFsc2V9OwogICAgICB2YXIgc3R5bGUgPSBmb3VuZC5tYXRjaCA/ICJDb2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCIgOiAiQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQiOwogICAgICB2YXIgb25lID0gbWFya1RleHQoe2xpbmU6IGhlYWQubGluZSwgY2g6IHBvc30sIHtsaW5lOiBoZWFkLmxpbmUsIGNoOiBwb3MrMX0sIHN0eWxlKSwKICAgICAgICAgIHR3byA9IGZvdW5kLnBvcyAhPSBudWxsCiAgICAgICAgICAgID8gbWFya1RleHQoe2xpbmU6IGksIGNoOiBmb3VuZC5wb3N9LCB7bGluZTogaSwgY2g6IGZvdW5kLnBvcyArIDF9LCBzdHlsZSkKICAgICAgICAgICAgOiBmdW5jdGlvbigpIHt9OwogICAgICB2YXIgY2xlYXIgPSBvcGVyYXRpb24oZnVuY3Rpb24oKXtvbmUoKTsgdHdvKCk7fSk7CiAgICAgIGlmIChhdXRvY2xlYXIpIHNldFRpbWVvdXQoY2xlYXIsIDgwMCk7CiAgICAgIGVsc2UgYnJhY2tldEhpZ2hsaWdodGVkID0gY2xlYXI7CiAgICB9CgogICAgLy8gRmluZHMgdGhlIGxpbmUgdG8gc3RhcnQgd2l0aCB3aGVuIHN0YXJ0aW5nIGEgcGFyc2UuIFRyaWVzIHRvCiAgICAvLyBmaW5kIGEgbGluZSB3aXRoIGEgc3RhdGVBZnRlciwgc28gdGhhdCBpdCBjYW4gc3RhcnQgd2l0aCBhCiAgICAvLyB2YWxpZCBzdGF0ZS4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyB0aGUgbGluZSB3aXRoIHRoZQogICAgLy8gc21hbGxlc3QgaW5kZW50YXRpb24sIHdoaWNoIHRlbmRzIHRvIG5lZWQgdGhlIGxlYXN0IGNvbnRleHQgdG8KICAgIC8vIHBhcnNlIGNvcnJlY3RseS4KICAgIGZ1bmN0aW9uIGZpbmRTdGFydExpbmUobikgewogICAgICB2YXIgbWluaW5kZW50LCBtaW5saW5lOwogICAgICBmb3IgKHZhciBzZWFyY2ggPSBuLCBsaW0gPSBuIC0gNDA7IHNlYXJjaCA+IGxpbTsgLS1zZWFyY2gpIHsKICAgICAgICBpZiAoc2VhcmNoID09IDApIHJldHVybiAwOwogICAgICAgIHZhciBsaW5lID0gbGluZXNbc2VhcmNoLTFdOwogICAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHJldHVybiBzZWFyY2g7CiAgICAgICAgdmFyIGluZGVudGVkID0gbGluZS5pbmRlbnRhdGlvbigpOwogICAgICAgIGlmIChtaW5saW5lID09IG51bGwgfHwgbWluaW5kZW50ID4gaW5kZW50ZWQpIHsKICAgICAgICAgIG1pbmxpbmUgPSBzZWFyY2ggLSAxOwogICAgICAgICAgbWluaW5kZW50ID0gaW5kZW50ZWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBtaW5saW5lOwogICAgfQogICAgZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUobikgewogICAgICB2YXIgc3RhcnQgPSBmaW5kU3RhcnRMaW5lKG4pLCBzdGF0ZSA9IHN0YXJ0ICYmIGxpbmVzW3N0YXJ0LTFdLnN0YXRlQWZ0ZXI7CiAgICAgIGlmICghc3RhdGUpIHN0YXRlID0gc3RhcnRTdGF0ZShtb2RlKTsKICAgICAgZWxzZSBzdGF0ZSA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IG47ICsraSkgewogICAgICAgIHZhciBsaW5lID0gbGluZXNbaV07CiAgICAgICAgbGluZS5oaWdobGlnaHQobW9kZSwgc3RhdGUpOwogICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgIH0KICAgICAgaWYgKG4gPCBsaW5lcy5sZW5ndGggJiYgIWxpbmVzW25dLnN0YXRlQWZ0ZXIpIHdvcmsucHVzaChuKTsKICAgICAgcmV0dXJuIHN0YXRlOwogICAgfQogICAgZnVuY3Rpb24gaGlnaGxpZ2h0TGluZXMoc3RhcnQsIGVuZCkgewogICAgICB2YXIgc3RhdGUgPSBnZXRTdGF0ZUJlZm9yZShzdGFydCk7CiAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7CiAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXTsKICAgICAgICBsaW5lLmhpZ2hsaWdodChtb2RlLCBzdGF0ZSk7CiAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKCkgewogICAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgb3B0aW9ucy53b3JrVGltZTsKICAgICAgdmFyIGZvdW5kV29yayA9IHdvcmsubGVuZ3RoOwogICAgICB3aGlsZSAod29yay5sZW5ndGgpIHsKICAgICAgICBpZiAoIWxpbmVzW3Nob3dpbmdGcm9tXS5zdGF0ZUFmdGVyKSB2YXIgdGFzayA9IHNob3dpbmdGcm9tOwogICAgICAgIGVsc2UgdmFyIHRhc2sgPSB3b3JrLnBvcCgpOwogICAgICAgIGlmICh0YXNrID49IGxpbmVzLmxlbmd0aCkgY29udGludWU7CiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZFN0YXJ0TGluZSh0YXNrKSwgc3RhdGUgPSBzdGFydCAmJiBsaW5lc1tzdGFydC0xXS5zdGF0ZUFmdGVyOwogICAgICAgIGlmIChzdGF0ZSkgc3RhdGUgPSBjb3B5U3RhdGUobW9kZSwgc3RhdGUpOwogICAgICAgIGVsc2Ugc3RhdGUgPSBzdGFydFN0YXRlKG1vZGUpOwoKICAgICAgICB2YXIgdW5jaGFuZ2VkID0gMCwgY29tcGFyZSA9IG1vZGUuY29tcGFyZVN0YXRlcywgcmVhbENoYW5nZSA9IGZhbHNlOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7ICsraSkgewogICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXSwgaGFkU3RhdGUgPSBsaW5lLnN0YXRlQWZ0ZXI7CiAgICAgICAgICBpZiAoK25ldyBEYXRlID4gZW5kKSB7CiAgICAgICAgICAgIHdvcmsucHVzaChpKTsKICAgICAgICAgICAgc3RhcnRXb3JrZXIob3B0aW9ucy53b3JrRGVsYXkpOwogICAgICAgICAgICBpZiAocmVhbENoYW5nZSkgY2hhbmdlcy5wdXNoKHtmcm9tOiB0YXNrLCB0bzogaSArIDF9KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGNoYW5nZWQgPSBsaW5lLmhpZ2hsaWdodChtb2RlLCBzdGF0ZSk7CiAgICAgICAgICBpZiAoY2hhbmdlZCkgcmVhbENoYW5nZSA9IHRydWU7CiAgICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb3B5U3RhdGUobW9kZSwgc3RhdGUpOwogICAgICAgICAgaWYgKGNvbXBhcmUpIHsKICAgICAgICAgICAgaWYgKGhhZFN0YXRlICYmIGNvbXBhcmUoaGFkU3RhdGUsIHN0YXRlKSkgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoY2hhbmdlZCAhPT0gZmFsc2UgfHwgIWhhZFN0YXRlKSB1bmNoYW5nZWQgPSAwOwogICAgICAgICAgICBlbHNlIGlmICgrK3VuY2hhbmdlZCA+IDMpIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocmVhbENoYW5nZSkgY2hhbmdlcy5wdXNoKHtmcm9tOiB0YXNrLCB0bzogaSArIDF9KTsKICAgICAgfQogICAgICBpZiAoZm91bmRXb3JrICYmIG9wdGlvbnMub25IaWdobGlnaHRDb21wbGV0ZSkKICAgICAgICBvcHRpb25zLm9uSGlnaGxpZ2h0Q29tcGxldGUoaW5zdGFuY2UpOwogICAgfQogICAgZnVuY3Rpb24gc3RhcnRXb3JrZXIodGltZSkgewogICAgICBpZiAoIXdvcmsubGVuZ3RoKSByZXR1cm47CiAgICAgIGhpZ2hsaWdodC5zZXQodGltZSwgb3BlcmF0aW9uKGhpZ2hsaWdodFdvcmtlcikpOwogICAgfQoKICAgIC8vIE9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gd3JhcCBjaGFuZ2VzIGluIHN1Y2ggYSB3YXkgdGhhdCBlYWNoCiAgICAvLyBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlIGN1cnNvciBhbmQgZGlzcGxheSAod2hpY2ggd291bGQKICAgIC8vIGJlIGF3a3dhcmQsIHNsb3csIGFuZCBlcnJvci1wcm9uZSksIGJ1dCBpbnN0ZWFkIHVwZGF0ZXMgYXJlCiAgICAvLyBiYXRjaGVkIGFuZCB0aGVuIGFsbCBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25jZS4KICAgIGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9uKCkgewogICAgICB1cGRhdGVJbnB1dCA9IG51bGw7IGNoYW5nZXMgPSBbXTsgdGV4dENoYW5nZWQgPSBzZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBlbmRPcGVyYXRpb24oKSB7CiAgICAgIHZhciByZVNjcm9sbCA9IGZhbHNlOwogICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkgcmVTY3JvbGwgPSAhc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKICAgICAgaWYgKGNoYW5nZXMubGVuZ3RoKSB1cGRhdGVEaXNwbGF5KGNoYW5nZXMpOwogICAgICBlbHNlIHsKICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkgdXBkYXRlQ3Vyc29yKCk7CiAgICAgICAgaWYgKGd1dHRlckRpcnR5KSB1cGRhdGVHdXR0ZXIoKTsKICAgICAgfQogICAgICBpZiAocmVTY3JvbGwpIHNjcm9sbEN1cnNvckludG9WaWV3KCk7CiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7c2Nyb2xsRWRpdG9ySW50b1ZpZXcoKTsgcmVzdGFydEJsaW5rKCk7fQoKICAgICAgLy8gdXBkYXRlSW5wdXQgY2FuIGJlIHNldCB0byBhIGJvb2xlYW4gdmFsdWUgdG8gZm9yY2UvcHJldmVudCBhbgogICAgICAvLyB1cGRhdGUuCiAgICAgIGlmIChmb2N1c2VkICYmICFsZWF2ZUlucHV0QWxvbmUgJiYKICAgICAgICAgICh1cGRhdGVJbnB1dCA9PT0gdHJ1ZSB8fCAodXBkYXRlSW5wdXQgIT09IGZhbHNlICYmIHNlbGVjdGlvbkNoYW5nZWQpKSkKICAgICAgICBwcmVwYXJlSW5wdXQoKTsKCiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmIG9wdGlvbnMubWF0Y2hCcmFja2V0cykKICAgICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgIGlmIChicmFja2V0SGlnaGxpZ2h0ZWQpIHticmFja2V0SGlnaGxpZ2h0ZWQoKTsgYnJhY2tldEhpZ2hsaWdodGVkID0gbnVsbDt9CiAgICAgICAgICBtYXRjaEJyYWNrZXRzKGZhbHNlKTsKICAgICAgICB9KSwgMjApOwogICAgICB2YXIgdGMgPSB0ZXh0Q2hhbmdlZDsgLy8gdGV4dENoYW5nZWQgY2FuIGJlIHJlc2V0IGJ5IGN1cnNvcmFjdGl2aXR5IGNhbGxiYWNrCiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmIG9wdGlvbnMub25DdXJzb3JBY3Rpdml0eSkKICAgICAgICBvcHRpb25zLm9uQ3Vyc29yQWN0aXZpdHkoaW5zdGFuY2UpOwogICAgICBpZiAodGMgJiYgb3B0aW9ucy5vbkNoYW5nZSAmJiBpbnN0YW5jZSkKICAgICAgICBvcHRpb25zLm9uQ2hhbmdlKGluc3RhbmNlLCB0Yyk7CiAgICB9CiAgICB2YXIgbmVzdGVkT3BlcmF0aW9uID0gMDsKICAgIGZ1bmN0aW9uIG9wZXJhdGlvbihmKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIW5lc3RlZE9wZXJhdGlvbisrKSBzdGFydE9wZXJhdGlvbigpOwogICAgICAgIHRyeSB7dmFyIHJlc3VsdCA9IGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTt9CiAgICAgICAgZmluYWxseSB7aWYgKCEtLW5lc3RlZE9wZXJhdGlvbikgZW5kT3BlcmF0aW9uKCk7fQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gU2VhcmNoQ3Vyc29yKHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKSB7CiAgICAgIHRoaXMuYXRPY2N1cnJlbmNlID0gZmFsc2U7CiAgICAgIGlmIChjYXNlRm9sZCA9PSBudWxsKSBjYXNlRm9sZCA9IHR5cGVvZiBxdWVyeSA9PSAic3RyaW5nIiAmJiBxdWVyeSA9PSBxdWVyeS50b0xvd2VyQ2FzZSgpOwoKICAgICAgaWYgKHBvcyAmJiB0eXBlb2YgcG9zID09ICJvYmplY3QiKSBwb3MgPSBjbGlwUG9zKHBvcyk7CiAgICAgIGVsc2UgcG9zID0ge2xpbmU6IDAsIGNoOiAwfTsKICAgICAgdGhpcy5wb3MgPSB7ZnJvbTogcG9zLCB0bzogcG9zfTsKCiAgICAgIC8vIFRoZSBtYXRjaGVzIG1ldGhvZCBpcyBmaWxsZWQgaW4gYmFzZWQgb24gdGhlIHR5cGUgb2YgcXVlcnkuCiAgICAgIC8vIEl0IHRha2VzIGEgcG9zaXRpb24gYW5kIGEgZGlyZWN0aW9uLCBhbmQgcmV0dXJucyBhbiBvYmplY3QKICAgICAgLy8gZGVzY3JpYmluZyB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mIHRoZSBxdWVyeSwgb3IgbnVsbCBpZiBubwogICAgICAvLyBtb3JlIG1hdGNoZXMgd2VyZSBmb3VuZC4KICAgICAgaWYgKHR5cGVvZiBxdWVyeSAhPSAic3RyaW5nIikgLy8gUmVnZXhwIG1hdGNoCiAgICAgICAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24ocmV2ZXJzZSwgcG9zKSB7CiAgICAgICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW3Bvcy5saW5lXS50ZXh0LnNsaWNlKDAsIHBvcy5jaCksIG1hdGNoID0gbGluZS5tYXRjaChxdWVyeSksIHN0YXJ0ID0gMDsKICAgICAgICAgICAgd2hpbGUgKG1hdGNoKSB7CiAgICAgICAgICAgICAgdmFyIGluZCA9IGxpbmUuaW5kZXhPZihtYXRjaFswXSk7CiAgICAgICAgICAgICAgc3RhcnQgKz0gaW5kOwogICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKGluZCArIDEpOwogICAgICAgICAgICAgIHZhciBuZXdtYXRjaCA9IGxpbmUubWF0Y2gocXVlcnkpOwogICAgICAgICAgICAgIGlmIChuZXdtYXRjaCkgbWF0Y2ggPSBuZXdtYXRjaDsKICAgICAgICAgICAgICBlbHNlIGJyZWFrOwogICAgICAgICAgICAgIHN0YXJ0Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW3Bvcy5saW5lXS50ZXh0LnNsaWNlKHBvcy5jaCksIG1hdGNoID0gbGluZS5tYXRjaChxdWVyeSksCiAgICAgICAgICAgICAgICBzdGFydCA9IG1hdGNoICYmIHBvcy5jaCArIGxpbmUuaW5kZXhPZihtYXRjaFswXSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobWF0Y2gpCiAgICAgICAgICAgIHJldHVybiB7ZnJvbToge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnR9LAogICAgICAgICAgICAgICAgICAgIHRvOiB7bGluZTogcG9zLmxpbmUsIGNoOiBzdGFydCArIG1hdGNoWzBdLmxlbmd0aH0sCiAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IG1hdGNofTsKICAgICAgICB9OwogICAgICBlbHNlIHsgLy8gU3RyaW5nIHF1ZXJ5CiAgICAgICAgaWYgKGNhc2VGb2xkKSBxdWVyeSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgdmFyIGZvbGQgPSBjYXNlRm9sZCA/IGZ1bmN0aW9uKHN0cil7cmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO30gOiBmdW5jdGlvbihzdHIpe3JldHVybiBzdHI7fTsKICAgICAgICB2YXIgdGFyZ2V0ID0gcXVlcnkuc3BsaXQoIlxuIik7CiAgICAgICAgLy8gRGlmZmVyZW50IG1ldGhvZHMgZm9yIHNpbmdsZS1saW5lIGFuZCBtdWx0aS1saW5lIHF1ZXJpZXMKICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA9PSAxKQogICAgICAgICAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24ocmV2ZXJzZSwgcG9zKSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gZm9sZChsaW5lc1twb3MubGluZV0udGV4dCksIGxlbiA9IHF1ZXJ5Lmxlbmd0aCwgbWF0Y2g7CiAgICAgICAgICAgIGlmIChyZXZlcnNlID8gKHBvcy5jaCA+PSBsZW4gJiYgKG1hdGNoID0gbGluZS5sYXN0SW5kZXhPZihxdWVyeSwgcG9zLmNoIC0gbGVuKSkgIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgIDogKG1hdGNoID0gbGluZS5pbmRleE9mKHF1ZXJ5LCBwb3MuY2gpKSAhPSAtMSkKICAgICAgICAgICAgICByZXR1cm4ge2Zyb206IHtsaW5lOiBwb3MubGluZSwgY2g6IG1hdGNofSwKICAgICAgICAgICAgICAgICAgICAgIHRvOiB7bGluZTogcG9zLmxpbmUsIGNoOiBtYXRjaCArIGxlbn19OwogICAgICAgICAgfTsKICAgICAgICBlbHNlCiAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBmdW5jdGlvbihyZXZlcnNlLCBwb3MpIHsKICAgICAgICAgICAgdmFyIGxuID0gcG9zLmxpbmUsIGlkeCA9IChyZXZlcnNlID8gdGFyZ2V0Lmxlbmd0aCAtIDEgOiAwKSwgbWF0Y2ggPSB0YXJnZXRbaWR4XSwgbGluZSA9IGZvbGQobGluZXNbbG5dLnRleHQpOwogICAgICAgICAgICB2YXIgb2Zmc2V0QSA9IChyZXZlcnNlID8gbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCA6IGxpbmUubGFzdEluZGV4T2YobWF0Y2gpKTsKICAgICAgICAgICAgaWYgKHJldmVyc2UgPyBvZmZzZXRBID49IHBvcy5jaCB8fCBvZmZzZXRBICE9IG1hdGNoLmxlbmd0aAogICAgICAgICAgICAgICAgICAgICAgICA6IG9mZnNldEEgPD0gcG9zLmNoIHx8IG9mZnNldEEgIT0gbGluZS5sZW5ndGggLSBtYXRjaC5sZW5ndGgpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgaWYgKHJldmVyc2UgPyAhbG4gOiBsbiA9PSBsaW5lcy5sZW5ndGggLSAxKSByZXR1cm47CiAgICAgICAgICAgICAgbGluZSA9IGZvbGQobGluZXNbbG4gKz0gcmV2ZXJzZSA/IC0xIDogMV0udGV4dCk7CiAgICAgICAgICAgICAgbWF0Y2ggPSB0YXJnZXRbcmV2ZXJzZSA/IC0taWR4IDogKytpZHhdOwogICAgICAgICAgICAgIGlmIChpZHggPiAwICYmIGlkeCA8IHRhcmdldC5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICBpZiAobGluZSAhPSBtYXRjaCkgcmV0dXJuOwogICAgICAgICAgICAgICAgZWxzZSBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdmFyIG9mZnNldEIgPSAocmV2ZXJzZSA/IGxpbmUubGFzdEluZGV4T2YobWF0Y2gpIDogbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCk7CiAgICAgICAgICAgICAgaWYgKHJldmVyc2UgPyBvZmZzZXRCICE9IGxpbmUubGVuZ3RoIC0gbWF0Y2gubGVuZ3RoIDogb2Zmc2V0QiAhPSBtYXRjaC5sZW5ndGgpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge2xpbmU6IHBvcy5saW5lLCBjaDogb2Zmc2V0QX0sIGVuZCA9IHtsaW5lOiBsbiwgY2g6IG9mZnNldEJ9OwogICAgICAgICAgICAgIHJldHVybiB7ZnJvbTogcmV2ZXJzZSA/IGVuZCA6IHN0YXJ0LCB0bzogcmV2ZXJzZSA/IHN0YXJ0IDogZW5kfTsKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgfQogICAgfQoKICAgIFNlYXJjaEN1cnNvci5wcm90b3R5cGUgPSB7CiAgICAgIGZpbmROZXh0OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maW5kKGZhbHNlKTt9LAogICAgICBmaW5kUHJldmlvdXM6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpbmQodHJ1ZSk7fSwKCiAgICAgIGZpbmQ6IGZ1bmN0aW9uKHJldmVyc2UpIHsKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsIHBvcyA9IGNsaXBQb3MocmV2ZXJzZSA/IHRoaXMucG9zLmZyb20gOiB0aGlzLnBvcy50byk7CiAgICAgICAgZnVuY3Rpb24gc2F2ZVBvc0FuZEZhaWwobGluZSkgewogICAgICAgICAgdmFyIHBvcyA9IHtsaW5lOiBsaW5lLCBjaDogMH07CiAgICAgICAgICBzZWxmLnBvcyA9IHtmcm9tOiBwb3MsIHRvOiBwb3N9OwogICAgICAgICAgc2VsZi5hdE9jY3VycmVuY2UgPSBmYWxzZTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIGlmICh0aGlzLnBvcyA9IHRoaXMubWF0Y2hlcyhyZXZlcnNlLCBwb3MpKSB7CiAgICAgICAgICAgIHRoaXMuYXRPY2N1cnJlbmNlID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zLm1hdGNoIHx8IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICAgICBpZiAoIXBvcy5saW5lKSByZXR1cm4gc2F2ZVBvc0FuZEZhaWwoMCk7CiAgICAgICAgICAgIHBvcyA9IHtsaW5lOiBwb3MubGluZS0xLCBjaDogbGluZXNbcG9zLmxpbmUtMV0udGV4dC5sZW5ndGh9OwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChwb3MubGluZSA9PSBsaW5lcy5sZW5ndGggLSAxKSByZXR1cm4gc2F2ZVBvc0FuZEZhaWwobGluZXMubGVuZ3RoKTsKICAgICAgICAgICAgcG9zID0ge2xpbmU6IHBvcy5saW5lKzEsIGNoOiAwfTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCgogICAgICBmcm9tOiBmdW5jdGlvbigpIHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiBjb3B5UG9zKHRoaXMucG9zLmZyb20pO30sCiAgICAgIHRvOiBmdW5jdGlvbigpIHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiBjb3B5UG9zKHRoaXMucG9zLnRvKTt9LAoKICAgICAgcmVwbGFjZTogZnVuY3Rpb24obmV3VGV4dCkgewogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICBpZiAodGhpcy5hdE9jY3VycmVuY2UpCiAgICAgICAgICBvcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlbGYucG9zLnRvID0gcmVwbGFjZVJhbmdlKG5ld1RleHQsIHNlbGYucG9zLmZyb20sIHNlbGYucG9zLnRvKTsKICAgICAgICAgIH0pKCk7CiAgICAgIH0KICAgIH07CgogICAgZm9yICh2YXIgZXh0IGluIGV4dGVuc2lvbnMpCiAgICAgIGlmIChleHRlbnNpb25zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4dCkgJiYKICAgICAgICAgICFpbnN0YW5jZS5wcm9wZXJ0eUlzRW51bWVyYWJsZShleHQpKQogICAgICAgIGluc3RhbmNlW2V4dF0gPSBleHRlbnNpb25zW2V4dF07CiAgICByZXR1cm4gaW5zdGFuY2U7CiAgfSAvLyAoZW5kIG9mIGZ1bmN0aW9uIENvZGVNaXJyb3IpCgogIC8vIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KICBDb2RlTWlycm9yLmRlZmF1bHRzID0gewogICAgdmFsdWU6ICIiLAogICAgbW9kZTogbnVsbCwKICAgIHRoZW1lOiAiZGVmYXVsdCIsCiAgICBpbmRlbnRVbml0OiAyLAogICAgaW5kZW50V2l0aFRhYnM6IGZhbHNlLAogICAgdGFiTW9kZTogImNsYXNzaWMiLAogICAgZW50ZXJNb2RlOiAiaW5kZW50IiwKICAgIGVsZWN0cmljQ2hhcnM6IHRydWUsCiAgICBvbktleUV2ZW50OiBudWxsLAogICAgbGluZU51bWJlcnM6IGZhbHNlLAogICAgZ3V0dGVyOiBmYWxzZSwKICAgIGZpeGVkR3V0dGVyOiBmYWxzZSwKICAgIGZpcnN0TGluZU51bWJlcjogMSwKICAgIHJlYWRPbmx5OiBmYWxzZSwKICAgIHNtYXJ0SG9tZTogdHJ1ZSwKICAgIG9uQ2hhbmdlOiBudWxsLAogICAgb25DdXJzb3JBY3Rpdml0eTogbnVsbCwKICAgIG9uR3V0dGVyQ2xpY2s6IG51bGwsCiAgICBvbkhpZ2hsaWdodENvbXBsZXRlOiBudWxsLAogICAgb25Gb2N1czogbnVsbCwgb25CbHVyOiBudWxsLCBvblNjcm9sbDogbnVsbCwKICAgIG1hdGNoQnJhY2tldHM6IGZhbHNlLAogICAgd29ya1RpbWU6IDEwMCwKICAgIHdvcmtEZWxheTogMjAwLAogICAgdW5kb0RlcHRoOiA0MCwKICAgIHRhYmluZGV4OiBudWxsLAogICAgZG9jdW1lbnQ6IHdpbmRvdy5kb2N1bWVudAogIH07CgogIC8vIEtub3duIG1vZGVzLCBieSBuYW1lIGFuZCBieSBNSU1FCiAgdmFyIG1vZGVzID0ge30sIG1pbWVNb2RlcyA9IHt9OwogIENvZGVNaXJyb3IuZGVmaW5lTW9kZSA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUpIHsKICAgIGlmICghQ29kZU1pcnJvci5kZWZhdWx0cy5tb2RlICYmIG5hbWUgIT0gIm51bGwiKSBDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgPSBuYW1lOwogICAgbW9kZXNbbmFtZV0gPSBtb2RlOwogIH07CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FID0gZnVuY3Rpb24obWltZSwgc3BlYykgewogICAgbWltZU1vZGVzW21pbWVdID0gc3BlYzsKICB9OwogIENvZGVNaXJyb3IuZ2V0TW9kZSA9IGZ1bmN0aW9uKG9wdGlvbnMsIHNwZWMpIHsKICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYykpCiAgICAgIHNwZWMgPSBtaW1lTW9kZXNbc3BlY107CiAgICBpZiAodHlwZW9mIHNwZWMgPT0gInN0cmluZyIpCiAgICAgIHZhciBtbmFtZSA9IHNwZWMsIGNvbmZpZyA9IHt9OwogICAgZWxzZSBpZiAoc3BlYyAhPSBudWxsKQogICAgICB2YXIgbW5hbWUgPSBzcGVjLm5hbWUsIGNvbmZpZyA9IHNwZWM7CiAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1ttbmFtZV07CiAgICBpZiAoIW1mYWN0b3J5KSB7CiAgICAgIGlmICh3aW5kb3cuY29uc29sZSkgY29uc29sZS53YXJuKCJObyBtb2RlICIgKyBtbmFtZSArICIgZm91bmQsIGZhbGxpbmcgYmFjayB0byBwbGFpbiB0ZXh0LiIpOwogICAgICByZXR1cm4gQ29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsICJ0ZXh0L3BsYWluIik7CiAgICB9CiAgICByZXR1cm4gbWZhY3Rvcnkob3B0aW9ucywgY29uZmlnIHx8IHt9KTsKICB9OwogIENvZGVNaXJyb3IubGlzdE1vZGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbGlzdCA9IFtdOwogICAgZm9yICh2YXIgbSBpbiBtb2RlcykKICAgICAgaWYgKG1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKG0pKSBsaXN0LnB1c2gobSk7CiAgICByZXR1cm4gbGlzdDsKICB9OwogIENvZGVNaXJyb3IubGlzdE1JTUVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbGlzdCA9IFtdOwogICAgZm9yICh2YXIgbSBpbiBtaW1lTW9kZXMpCiAgICAgIGlmIChtaW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobSkpIGxpc3QucHVzaCh7bWltZTogbSwgbW9kZTogbWltZU1vZGVzW21dfSk7CiAgICByZXR1cm4gbGlzdDsKICB9OwoKICB2YXIgZXh0ZW5zaW9ucyA9IHt9OwogIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uID0gZnVuY3Rpb24obmFtZSwgZnVuYykgewogICAgZXh0ZW5zaW9uc1tuYW1lXSA9IGZ1bmM7CiAgfTsKCiAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEgPSBmdW5jdGlvbih0ZXh0YXJlYSwgb3B0aW9ucykgewogICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CiAgICBvcHRpb25zLnZhbHVlID0gdGV4dGFyZWEudmFsdWU7CiAgICBpZiAoIW9wdGlvbnMudGFiaW5kZXggJiYgdGV4dGFyZWEudGFiaW5kZXgpCiAgICAgIG9wdGlvbnMudGFiaW5kZXggPSB0ZXh0YXJlYS50YWJpbmRleDsKCiAgICBmdW5jdGlvbiBzYXZlKCkge3RleHRhcmVhLnZhbHVlID0gaW5zdGFuY2UuZ2V0VmFsdWUoKTt9CiAgICBpZiAodGV4dGFyZWEuZm9ybSkgewogICAgICAvLyBEZXBsb3JhYmxlIGhhY2sgdG8gbWFrZSB0aGUgc3VibWl0IG1ldGhvZCBkbyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgIHZhciBybVN1Ym1pdCA9IGNvbm5lY3QodGV4dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUsIHRydWUpOwogICAgICBpZiAodHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YXIgcmVhbFN1Ym1pdCA9IHRleHRhcmVhLmZvcm0uc3VibWl0OwogICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRTdWJtaXQoKSB7CiAgICAgICAgICBzYXZlKCk7CiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7CiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCgpOwogICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSB3cmFwcGVkU3VibWl0OwogICAgICAgIH0KICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7CiAgICAgIH0KICAgIH0KCiAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgdmFyIGluc3RhbmNlID0gQ29kZU1pcnJvcihmdW5jdGlvbihub2RlKSB7CiAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIHRleHRhcmVhLm5leHRTaWJsaW5nKTsKICAgIH0sIG9wdGlvbnMpOwogICAgaW5zdGFuY2Uuc2F2ZSA9IHNhdmU7CiAgICBpbnN0YW5jZS50b1RleHRBcmVhID0gZnVuY3Rpb24oKSB7CiAgICAgIHNhdmUoKTsKICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnN0YW5jZS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICAgICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICBpZiAodGV4dGFyZWEuZm9ybSkgewogICAgICAgIHJtU3VibWl0KCk7CiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9PSAiZnVuY3Rpb24iKQogICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGluc3RhbmNlOwogIH07CgogIC8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggc3RhdGUuIEV4cG9ydGVkIGJlY2F1c2UgbW9kZXMKICAvLyBzb21ldGltZXMgbmVlZCB0byBkbyB0aGlzLgogIGZ1bmN0aW9uIGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSkgewogICAgaWYgKHN0YXRlID09PSB0cnVlKSByZXR1cm4gc3RhdGU7CiAgICBpZiAobW9kZS5jb3B5U3RhdGUpIHJldHVybiBtb2RlLmNvcHlTdGF0ZShzdGF0ZSk7CiAgICB2YXIgbnN0YXRlID0ge307CiAgICBmb3IgKHZhciBuIGluIHN0YXRlKSB7CiAgICAgIHZhciB2YWwgPSBzdGF0ZVtuXTsKICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEFycmF5KSB2YWwgPSB2YWwuY29uY2F0KFtdKTsKICAgICAgbnN0YXRlW25dID0gdmFsOwogICAgfQogICAgcmV0dXJuIG5zdGF0ZTsKICB9CiAgQ29kZU1pcnJvci5zdGFydFN0YXRlID0gc3RhcnRTdGF0ZTsKICBmdW5jdGlvbiBzdGFydFN0YXRlKG1vZGUsIGExLCBhMikgewogICAgcmV0dXJuIG1vZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3RhcnRTdGF0ZShhMSwgYTIpIDogdHJ1ZTsKICB9CiAgQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBjb3B5U3RhdGU7CgogIC8vIFRoZSBjaGFyYWN0ZXIgc3RyZWFtIHVzZWQgYnkgYSBtb2RlJ3MgcGFyc2VyLgogIGZ1bmN0aW9uIFN0cmluZ1N0cmVhbShzdHJpbmcpIHsKICAgIHRoaXMucG9zID0gdGhpcy5zdGFydCA9IDA7CiAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKICB9CiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZSA9IHsKICAgIGVvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aDt9LAogICAgc29sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3MgPT0gMDt9LAogICAgcGVlazogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7fSwKICAgIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5wb3MgPCB0aGlzLnN0cmluZy5sZW5ndGgpCiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKTsKICAgIH0sCiAgICBlYXQ6IGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgIHZhciBjaCA9IHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7CiAgICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOwogICAgICBlbHNlIHZhciBvayA9IGNoICYmIChtYXRjaC50ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkpOwogICAgICBpZiAob2spIHsrK3RoaXMucG9zOyByZXR1cm4gY2g7fQogICAgfSwKICAgIGVhdFdoaWxlOiBmdW5jdGlvbihtYXRjaCkgewogICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSl7fQogICAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydDsKICAgIH0sCiAgICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgICB3aGlsZSAoL1tcc1x1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpICsrdGhpcy5wb3M7CiAgICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0OwogICAgfSwKICAgIHNraXBUb0VuZDogZnVuY3Rpb24oKSB7dGhpcy5wb3MgPSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICAgIHNraXBUbzogZnVuY3Rpb24oY2gpIHsKICAgICAgdmFyIGZvdW5kID0gdGhpcy5zdHJpbmcuaW5kZXhPZihjaCwgdGhpcy5wb3MpOwogICAgICBpZiAoZm91bmQgPiAtMSkge3RoaXMucG9zID0gZm91bmQ7IHJldHVybiB0cnVlO30KICAgIH0sCiAgICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCiAgICBjb2x1bW46IGZ1bmN0aW9uKCkge3JldHVybiBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5zdGFydCk7fSwKICAgIGluZGVudGF0aW9uOiBmdW5jdGlvbigpIHtyZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcpO30sCiAgICBtYXRjaDogZnVuY3Rpb24ocGF0dGVybiwgY29uc3VtZSwgY2FzZUluc2Vuc2l0aXZlKSB7CiAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICAgIGZ1bmN0aW9uIGNhc2VkKHN0cikge3JldHVybiBjYXNlSW5zZW5zaXRpdmUgPyBzdHIudG9Mb3dlckNhc2UoKSA6IHN0cjt9CiAgICAgICAgaWYgKGNhc2VkKHRoaXMuc3RyaW5nKS5pbmRleE9mKGNhc2VkKHBhdHRlcm4pLCB0aGlzLnBvcykgPT0gdGhpcy5wb3MpIHsKICAgICAgICAgIGlmIChjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gcGF0dGVybi5sZW5ndGg7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHBhdHRlcm4pOwogICAgICAgIGlmIChtYXRjaCAmJiBjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOwogICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgfQogICAgfSwKICAgIGN1cnJlbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMucG9zKTt9CiAgfTsKICBDb2RlTWlycm9yLlN0cmluZ1N0cmVhbSA9IFN0cmluZ1N0cmVhbTsKCiAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmcKICAvLyBoaWdobGlnaHRpbmcgaW5mbyAodGhlIHN0eWxlcyBhcnJheSkuCiAgZnVuY3Rpb24gTGluZSh0ZXh0LCBzdHlsZXMpIHsKICAgIHRoaXMuc3R5bGVzID0gc3R5bGVzIHx8IFt0ZXh0LCBudWxsXTsKICAgIHRoaXMuc3RhdGVBZnRlciA9IG51bGw7CiAgICB0aGlzLnRleHQgPSB0ZXh0OwogICAgdGhpcy5tYXJrZWQgPSB0aGlzLmd1dHRlck1hcmtlciA9IHRoaXMuY2xhc3NOYW1lID0gbnVsbDsKICB9CiAgTGluZS5wcm90b3R5cGUgPSB7CiAgICAvLyBSZXBsYWNlIGEgcGllY2Ugb2YgYSBsaW5lLCBrZWVwaW5nIHRoZSBzdHlsZXMgYXJvdW5kIGl0IGludGFjdC4KICAgIHJlcGxhY2U6IGZ1bmN0aW9uKGZyb20sIHRvLCB0ZXh0KSB7CiAgICAgIHZhciBzdCA9IFtdLCBtayA9IHRoaXMubWFya2VkOwogICAgICBjb3B5U3R5bGVzKDAsIGZyb20sIHRoaXMuc3R5bGVzLCBzdCk7CiAgICAgIGlmICh0ZXh0KSBzdC5wdXNoKHRleHQsIG51bGwpOwogICAgICBjb3B5U3R5bGVzKHRvLCB0aGlzLnRleHQubGVuZ3RoLCB0aGlzLnN0eWxlcywgc3QpOwogICAgICB0aGlzLnN0eWxlcyA9IHN0OwogICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQuc2xpY2UoMCwgZnJvbSkgKyB0ZXh0ICsgdGhpcy50ZXh0LnNsaWNlKHRvKTsKICAgICAgdGhpcy5zdGF0ZUFmdGVyID0gbnVsbDsKICAgICAgaWYgKG1rKSB7CiAgICAgICAgdmFyIGRpZmYgPSB0ZXh0Lmxlbmd0aCAtICh0byAtIGZyb20pLCBlbmQgPSB0aGlzLnRleHQubGVuZ3RoOwogICAgICAgIGZ1bmN0aW9uIGZpeChuKSB7cmV0dXJuIG4gPD0gTWF0aC5taW4odG8sIHRvICsgZGlmZikgPyBuIDogbiArIGRpZmY7fQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWsubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHZhciBtYXJrID0gbWtbaV0sIGRlbCA9IGZhbHNlOwogICAgICAgICAgaWYgKG1hcmsuZnJvbSA+PSBlbmQpIGRlbCA9IHRydWU7CiAgICAgICAgICBlbHNlIHttYXJrLmZyb20gPSBmaXgobWFyay5mcm9tKTsgaWYgKG1hcmsudG8gIT0gbnVsbCkgbWFyay50byA9IGZpeChtYXJrLnRvKTt9CiAgICAgICAgICBpZiAoZGVsIHx8IG1hcmsuZnJvbSA+PSBtYXJrLnRvKSB7bWsuc3BsaWNlKGksIDEpOyBpLS07fQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8vIFNwbGl0IGEgbGluZSBpbiB0d28sIGFnYWluIGtlZXBpbmcgc3R5bGVzIGludGFjdC4KICAgIHNwbGl0OiBmdW5jdGlvbihwb3MsIHRleHRCZWZvcmUpIHsKICAgICAgdmFyIHN0ID0gW3RleHRCZWZvcmUsIG51bGxdOwogICAgICBjb3B5U3R5bGVzKHBvcywgdGhpcy50ZXh0Lmxlbmd0aCwgdGhpcy5zdHlsZXMsIHN0KTsKICAgICAgcmV0dXJuIG5ldyBMaW5lKHRleHRCZWZvcmUgKyB0aGlzLnRleHQuc2xpY2UocG9zKSwgc3QpOwogICAgfSwKICAgIGFkZE1hcms6IGZ1bmN0aW9uKGZyb20sIHRvLCBzdHlsZSkgewogICAgICB2YXIgbWsgPSB0aGlzLm1hcmtlZCwgbWFyayA9IHtmcm9tOiBmcm9tLCB0bzogdG8sIHN0eWxlOiBzdHlsZX07CiAgICAgIGlmICh0aGlzLm1hcmtlZCA9PSBudWxsKSB0aGlzLm1hcmtlZCA9IFtdOwogICAgICB0aGlzLm1hcmtlZC5wdXNoKG1hcmspOwogICAgICB0aGlzLm1hcmtlZC5zb3J0KGZ1bmN0aW9uKGEsIGIpe3JldHVybiBhLmZyb20gLSBiLmZyb207fSk7CiAgICAgIHJldHVybiBtYXJrOwogICAgfSwKICAgIHJlbW92ZU1hcms6IGZ1bmN0aW9uKG1hcmspIHsKICAgICAgdmFyIG1rID0gdGhpcy5tYXJrZWQ7CiAgICAgIGlmICghbWspIHJldHVybjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkKICAgICAgICBpZiAobWtbaV0gPT0gbWFyaykge21rLnNwbGljZShpLCAxKTsgYnJlYWs7fQogICAgfSwKICAgIC8vIFJ1biB0aGUgZ2l2ZW4gbW9kZSdzIHBhcnNlciBvdmVyIGEgbGluZSwgdXBkYXRlIHRoZSBzdHlsZXMKICAgIC8vIGFycmF5LCB3aGljaCBjb250YWlucyBhbHRlcm5hdGluZyBmcmFnbWVudHMgb2YgdGV4dCBhbmQgQ1NTCiAgICAvLyBjbGFzc2VzLgogICAgaGlnaGxpZ2h0OiBmdW5jdGlvbihtb2RlLCBzdGF0ZSkgewogICAgICB2YXIgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0aGlzLnRleHQpLCBzdCA9IHRoaXMuc3R5bGVzLCBwb3MgPSAwOwogICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlLCBjdXJXb3JkID0gc3RbMF0sIHByZXZXb3JkOwogICAgICBpZiAodGhpcy50ZXh0ID09ICIiICYmIG1vZGUuYmxhbmtMaW5lKSBtb2RlLmJsYW5rTGluZShzdGF0ZSk7CiAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgdmFyIHN0eWxlID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKICAgICAgICB2YXIgc3Vic3RyID0gdGhpcy50ZXh0LnNsaWNlKHN0cmVhbS5zdGFydCwgc3RyZWFtLnBvcyk7CiAgICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBvczsKICAgICAgICBpZiAocG9zICYmIHN0W3Bvcy0xXSA9PSBzdHlsZSkKICAgICAgICAgIHN0W3Bvcy0yXSArPSBzdWJzdHI7CiAgICAgICAgZWxzZSBpZiAoc3Vic3RyKSB7CiAgICAgICAgICBpZiAoIWNoYW5nZWQgJiYgKHN0W3BvcysxXSAhPSBzdHlsZSB8fCAocG9zICYmIHN0W3Bvcy0yXSAhPSBwcmV2V29yZCkpKSBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgIHN0W3BvcysrXSA9IHN1YnN0cjsgc3RbcG9zKytdID0gc3R5bGU7CiAgICAgICAgICBwcmV2V29yZCA9IGN1cldvcmQ7IGN1cldvcmQgPSBzdFtwb3NdOwogICAgICAgIH0KICAgICAgICAvLyBHaXZlIHVwIHdoZW4gbGluZSBpcyByaWRpY3Vsb3VzbHkgbG9uZwogICAgICAgIGlmIChzdHJlYW0ucG9zID4gNTAwMCkgewogICAgICAgICAgc3RbcG9zKytdID0gdGhpcy50ZXh0LnNsaWNlKHN0cmVhbS5wb3MpOyBzdFtwb3MrK10gPSBudWxsOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdC5sZW5ndGggIT0gcG9zKSB7c3QubGVuZ3RoID0gcG9zOyBjaGFuZ2VkID0gdHJ1ZTt9CiAgICAgIGlmIChwb3MgJiYgc3RbcG9zLTJdICE9IHByZXZXb3JkKSBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgLy8gU2hvcnQgbGluZXMgd2l0aCBzaW1wbGUgaGlnaGxpZ2h0cyByZXR1cm4gbnVsbCwgYW5kIGFyZQogICAgICAvLyBjb3VudGVkIGFzIGNoYW5nZWQgYnkgdGhlIGRyaXZlciBiZWNhdXNlIHRoZXkgYXJlIGxpa2VseSB0bwogICAgICAvLyBoaWdobGlnaHQgdGhlIHNhbWUgd2F5IGluIHZhcmlvdXMgY29udGV4dHMuCiAgICAgIHJldHVybiBjaGFuZ2VkIHx8IChzdC5sZW5ndGggPCA1ICYmIHRoaXMudGV4dC5sZW5ndGggPCAxMCA/IG51bGwgOiBmYWxzZSk7CiAgICB9LAogICAgLy8gRmV0Y2ggdGhlIHBhcnNlciB0b2tlbiBmb3IgYSBnaXZlbiBjaGFyYWN0ZXIuIFVzZWZ1bCBmb3IgaGFja3MKICAgIC8vIHRoYXQgd2FudCB0byBpbnNwZWN0IHRoZSBtb2RlIHN0YXRlIChzYXksIGZvciBjb21wbGV0aW9uKS4KICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9uKG1vZGUsIHN0YXRlLCBjaCkgewogICAgICB2YXIgdHh0ID0gdGhpcy50ZXh0LCBzdHJlYW0gPSBuZXcgU3RyaW5nU3RyZWFtKHR4dCk7CiAgICAgIHdoaWxlIChzdHJlYW0ucG9zIDwgY2ggJiYgIXN0cmVhbS5lb2woKSkgewogICAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICAgICAgdmFyIHN0eWxlID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICByZXR1cm4ge3N0YXJ0OiBzdHJlYW0uc3RhcnQsCiAgICAgICAgICAgICAgZW5kOiBzdHJlYW0ucG9zLAogICAgICAgICAgICAgIHN0cmluZzogc3RyZWFtLmN1cnJlbnQoKSwKICAgICAgICAgICAgICBjbGFzc05hbWU6IHN0eWxlIHx8IG51bGwsCiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlfTsKICAgIH0sCiAgICBpbmRlbnRhdGlvbjogZnVuY3Rpb24oKSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMudGV4dCk7fSwKICAgIC8vIFByb2R1Y2VzIGFuIEhUTUwgZnJhZ21lbnQgZm9yIHRoZSBsaW5lLCB0YWtpbmcgc2VsZWN0aW9uLAogICAgLy8gbWFya2luZywgYW5kIGhpZ2hsaWdodGluZyBpbnRvIGFjY291bnQuCiAgICBnZXRIVE1MOiBmdW5jdGlvbihzZnJvbSwgc3RvLCBpbmNsdWRlUHJlLCBlbmRBdCkgewogICAgICB2YXIgaHRtbCA9IFtdOwogICAgICBpZiAoaW5jbHVkZVByZSkKICAgICAgICBodG1sLnB1c2godGhpcy5jbGFzc05hbWUgPyAnPHByZSBjbGFzcz0iJyArIHRoaXMuY2xhc3NOYW1lICsgJyI+JzogIjxwcmU+Iik7CiAgICAgIGZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGUpIHsKICAgICAgICBpZiAoIXRleHQpIHJldHVybjsKICAgICAgICBpZiAoc3R5bGUpIGh0bWwucHVzaCgnPHNwYW4gY2xhc3M9IicsIHN0eWxlLCAnIj4nLCBodG1sRXNjYXBlKHRleHQpLCAiPC9zcGFuPiIpOwogICAgICAgIGVsc2UgaHRtbC5wdXNoKGh0bWxFc2NhcGUodGV4dCkpOwogICAgICB9CiAgICAgIHZhciBzdCA9IHRoaXMuc3R5bGVzLCBhbGxUZXh0ID0gdGhpcy50ZXh0LCBtYXJrZWQgPSB0aGlzLm1hcmtlZDsKICAgICAgaWYgKHNmcm9tID09IHN0bykgc2Zyb20gPSBudWxsOwogICAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGg7CiAgICAgIGlmIChlbmRBdCAhPSBudWxsKSBsZW4gPSBNYXRoLm1pbihlbmRBdCwgbGVuKTsKCiAgICAgIGlmICghYWxsVGV4dCAmJiBlbmRBdCA9PSBudWxsKQogICAgICAgIHNwYW4oIiAiLCBzZnJvbSAhPSBudWxsICYmIHN0byA9PSBudWxsID8gIkNvZGVNaXJyb3Itc2VsZWN0ZWQiIDogbnVsbCk7CiAgICAgIGVsc2UgaWYgKCFtYXJrZWQgJiYgc2Zyb20gPT0gbnVsbCkKICAgICAgICBmb3IgKHZhciBpID0gMCwgY2ggPSAwOyBjaCA8IGxlbjsgaSs9MikgewogICAgICAgICAgdmFyIHN0ciA9IHN0W2ldLCBsID0gc3RyLmxlbmd0aDsKICAgICAgICAgIGlmIChjaCArIGwgPiBsZW4pIHN0ciA9IHN0ci5zbGljZSgwLCBsZW4gLSBjaCk7CiAgICAgICAgICBjaCArPSBsOwogICAgICAgICAgc3BhbihzdHIsICJjbS0iICsgc3RbaSsxXSk7CiAgICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB2YXIgcG9zID0gMCwgaSA9IDAsIHRleHQgPSAiIiwgc3R5bGUsIHNnID0gMDsKICAgICAgICB2YXIgbWFya3BvcyA9IC0xLCBtYXJrID0gbnVsbDsKICAgICAgICBmdW5jdGlvbiBuZXh0TWFyaygpIHsKICAgICAgICAgIGlmIChtYXJrZWQpIHsKICAgICAgICAgICAgbWFya3BvcyArPSAxOwogICAgICAgICAgICBtYXJrID0gKG1hcmtwb3MgPCBtYXJrZWQubGVuZ3RoKSA/IG1hcmtlZFttYXJrcG9zXSA6IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG5leHRNYXJrKCk7CiAgICAgICAgd2hpbGUgKHBvcyA8IGxlbikgewogICAgICAgICAgdmFyIHVwdG8gPSBsZW47CiAgICAgICAgICB2YXIgZXh0cmFTdHlsZSA9ICIiOwogICAgICAgICAgaWYgKHNmcm9tICE9IG51bGwpIHsKICAgICAgICAgICAgaWYgKHNmcm9tID4gcG9zKSB1cHRvID0gc2Zyb207CiAgICAgICAgICAgIGVsc2UgaWYgKHN0byA9PSBudWxsIHx8IHN0byA+IHBvcykgewogICAgICAgICAgICAgIGV4dHJhU3R5bGUgPSAiIENvZGVNaXJyb3Itc2VsZWN0ZWQiOwogICAgICAgICAgICAgIGlmIChzdG8gIT0gbnVsbCkgdXB0byA9IE1hdGgubWluKHVwdG8sIHN0byk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChtYXJrICYmIG1hcmsudG8gIT0gbnVsbCAmJiBtYXJrLnRvIDw9IHBvcykgbmV4dE1hcmsoKTsKICAgICAgICAgIGlmIChtYXJrKSB7CiAgICAgICAgICAgIGlmIChtYXJrLmZyb20gPiBwb3MpIHVwdG8gPSBNYXRoLm1pbih1cHRvLCBtYXJrLmZyb20pOwogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBleHRyYVN0eWxlICs9ICIgIiArIG1hcmsuc3R5bGU7CiAgICAgICAgICAgICAgaWYgKG1hcmsudG8gIT0gbnVsbCkgdXB0byA9IE1hdGgubWluKHVwdG8sIG1hcmsudG8pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgIHZhciBlbmQgPSBwb3MgKyB0ZXh0Lmxlbmd0aDsKICAgICAgICAgICAgdmFyIGFwcGxpZWRTdHlsZSA9IHN0eWxlOwogICAgICAgICAgICBpZiAoZXh0cmFTdHlsZSkgYXBwbGllZFN0eWxlID0gc3R5bGUgPyBzdHlsZSArIGV4dHJhU3R5bGUgOiBleHRyYVN0eWxlOwogICAgICAgICAgICBzcGFuKGVuZCA+IHVwdG8gPyB0ZXh0LnNsaWNlKDAsIHVwdG8gLSBwb3MpIDogdGV4dCwgYXBwbGllZFN0eWxlKTsKICAgICAgICAgICAgaWYgKGVuZCA+PSB1cHRvKSB7dGV4dCA9IHRleHQuc2xpY2UodXB0byAtIHBvcyk7IHBvcyA9IHVwdG87IGJyZWFrO30KICAgICAgICAgICAgcG9zID0gZW5kOwogICAgICAgICAgICB0ZXh0ID0gc3RbaSsrXTsgc3R5bGUgPSAiY20tIiArIHN0W2krK107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzZnJvbSAhPSBudWxsICYmIHN0byA9PSBudWxsKSBzcGFuKCIgIiwgIkNvZGVNaXJyb3Itc2VsZWN0ZWQiKTsKICAgICAgfQogICAgICBpZiAoaW5jbHVkZVByZSkgaHRtbC5wdXNoKCI8L3ByZT4iKTsKICAgICAgcmV0dXJuIGh0bWwuam9pbigiIik7CiAgICB9CiAgfTsKICAvLyBVdGlsaXR5IHVzZWQgYnkgcmVwbGFjZSBhbmQgc3BsaXQgYWJvdmUKICBmdW5jdGlvbiBjb3B5U3R5bGVzKGZyb20sIHRvLCBzb3VyY2UsIGRlc3QpIHsKICAgIGZvciAodmFyIGkgPSAwLCBwb3MgPSAwLCBzdGF0ZSA9IDA7IHBvcyA8IHRvOyBpKz0yKSB7CiAgICAgIHZhciBwYXJ0ID0gc291cmNlW2ldLCBlbmQgPSBwb3MgKyBwYXJ0Lmxlbmd0aDsKICAgICAgaWYgKHN0YXRlID09IDApIHsKICAgICAgICBpZiAoZW5kID4gZnJvbSkgZGVzdC5wdXNoKHBhcnQuc2xpY2UoZnJvbSAtIHBvcywgTWF0aC5taW4ocGFydC5sZW5ndGgsIHRvIC0gcG9zKSksIHNvdXJjZVtpKzFdKTsKICAgICAgICBpZiAoZW5kID49IGZyb20pIHN0YXRlID0gMTsKICAgICAgfQogICAgICBlbHNlIGlmIChzdGF0ZSA9PSAxKSB7CiAgICAgICAgaWYgKGVuZCA+IHRvKSBkZXN0LnB1c2gocGFydC5zbGljZSgwLCB0byAtIHBvcyksIHNvdXJjZVtpKzFdKTsKICAgICAgICBlbHNlIGRlc3QucHVzaChwYXJ0LCBzb3VyY2VbaSsxXSk7CiAgICAgIH0KICAgICAgcG9zID0gZW5kOwogICAgfQogIH0KCiAgLy8gVGhlIGhpc3Rvcnkgb2JqZWN0ICdjaHVua3MnIGNoYW5nZXMgdGhhdCBhcmUgbWFkZSBjbG9zZSB0b2dldGhlcgogIC8vIGFuZCBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBpbnRvIGJpZ2dlciB1bmRvYWJsZSB1bml0cy4KICBmdW5jdGlvbiBIaXN0b3J5KCkgewogICAgdGhpcy50aW1lID0gMDsKICAgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9IFtdOwogIH0KICBIaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgIGFkZENoYW5nZTogZnVuY3Rpb24oc3RhcnQsIGFkZGVkLCBvbGQpIHsKICAgICAgdGhpcy51bmRvbmUubGVuZ3RoID0gMDsKICAgICAgdmFyIHRpbWUgPSArbmV3IERhdGUsIGxhc3QgPSB0aGlzLmRvbmVbdGhpcy5kb25lLmxlbmd0aCAtIDFdOwogICAgICBpZiAodGltZSAtIHRoaXMudGltZSA+IDQwMCB8fCAhbGFzdCB8fAogICAgICAgICAgbGFzdC5zdGFydCA+IHN0YXJ0ICsgYWRkZWQgfHwgbGFzdC5zdGFydCArIGxhc3QuYWRkZWQgPCBzdGFydCAtIGxhc3QuYWRkZWQgKyBsYXN0Lm9sZC5sZW5ndGgpCiAgICAgICAgdGhpcy5kb25lLnB1c2goe3N0YXJ0OiBzdGFydCwgYWRkZWQ6IGFkZGVkLCBvbGQ6IG9sZH0pOwogICAgICBlbHNlIHsKICAgICAgICB2YXIgb2xkb2ZmID0gMDsKICAgICAgICBpZiAoc3RhcnQgPCBsYXN0LnN0YXJ0KSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gbGFzdC5zdGFydCAtIHN0YXJ0IC0gMTsgaSA+PSAwOyAtLWkpCiAgICAgICAgICAgIGxhc3Qub2xkLnVuc2hpZnQob2xkW2ldKTsKICAgICAgICAgIGxhc3QuYWRkZWQgKz0gbGFzdC5zdGFydCAtIHN0YXJ0OwogICAgICAgICAgbGFzdC5zdGFydCA9IHN0YXJ0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsYXN0LnN0YXJ0IDwgc3RhcnQpIHsKICAgICAgICAgIG9sZG9mZiA9IHN0YXJ0IC0gbGFzdC5zdGFydDsKICAgICAgICAgIGFkZGVkICs9IG9sZG9mZjsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IGxhc3QuYWRkZWQgLSBvbGRvZmYsIGUgPSBvbGQubGVuZ3RoOyBpIDwgZTsgKytpKQogICAgICAgICAgbGFzdC5vbGQucHVzaChvbGRbaV0pOwogICAgICAgIGlmIChsYXN0LmFkZGVkIDwgYWRkZWQpIGxhc3QuYWRkZWQgPSBhZGRlZDsKICAgICAgfQogICAgICB0aGlzLnRpbWUgPSB0aW1lOwogICAgfQogIH07CgogIGZ1bmN0aW9uIHN0b3BNZXRob2QoKSB7ZV9zdG9wKHRoaXMpO30KICAvLyBFbnN1cmUgYW4gZXZlbnQgaGFzIGEgc3RvcCBtZXRob2QuCiAgZnVuY3Rpb24gYWRkU3RvcChldmVudCkgewogICAgaWYgKCFldmVudC5zdG9wKSBldmVudC5zdG9wID0gc3RvcE1ldGhvZDsKICAgIHJldHVybiBldmVudDsKICB9CgogIGZ1bmN0aW9uIGVfcHJldmVudERlZmF1bHQoZSkgewogICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTsKICAgIGVsc2UgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogIH0KICBmdW5jdGlvbiBlX3N0b3BQcm9wYWdhdGlvbihlKSB7CiAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICBlbHNlIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gZV9zdG9wKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9CiAgZnVuY3Rpb24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7fQogIGZ1bmN0aW9uIGVfYnV0dG9uKGUpIHsKICAgIGlmIChlLndoaWNoKSByZXR1cm4gZS53aGljaDsKICAgIGVsc2UgaWYgKGUuYnV0dG9uICYgMSkgcmV0dXJuIDE7CiAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDIpIHJldHVybiAzOwogICAgZWxzZSBpZiAoZS5idXR0b24gJiA0KSByZXR1cm4gMjsKICB9CgogIC8vIEV2ZW50IGhhbmRsZXIgcmVnaXN0cmF0aW9uLiBJZiBkaXNjb25uZWN0IGlzIHRydWUsIGl0J2xsIHJldHVybiBhCiAgLy8gZnVuY3Rpb24gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlci4KICBmdW5jdGlvbiBjb25uZWN0KG5vZGUsIHR5cGUsIGhhbmRsZXIsIGRpc2Nvbm5lY3QpIHsKICAgIGZ1bmN0aW9uIHdyYXBIYW5kbGVyKGV2ZW50KSB7aGFuZGxlcihldmVudCB8fCB3aW5kb3cuZXZlbnQpO30KICAgIGlmICh0eXBlb2Ygbm9kZS5hZGRFdmVudExpc3RlbmVyID09ICJmdW5jdGlvbiIpIHsKICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHdyYXBIYW5kbGVyLCBmYWxzZSk7CiAgICAgIGlmIChkaXNjb25uZWN0KSByZXR1cm4gZnVuY3Rpb24oKSB7bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHdyYXBIYW5kbGVyLCBmYWxzZSk7fTsKICAgIH0KICAgIGVsc2UgewogICAgICBub2RlLmF0dGFjaEV2ZW50KCJvbiIgKyB0eXBlLCB3cmFwSGFuZGxlcik7CiAgICAgIGlmIChkaXNjb25uZWN0KSByZXR1cm4gZnVuY3Rpb24oKSB7bm9kZS5kZXRhY2hFdmVudCgib24iICsgdHlwZSwgd3JhcEhhbmRsZXIpO307CiAgICB9CiAgfQoKICBmdW5jdGlvbiBEZWxheWVkKCkge3RoaXMuaWQgPSBudWxsO30KICBEZWxheWVkLnByb3RvdHlwZSA9IHtzZXQ6IGZ1bmN0aW9uKG1zLCBmKSB7Y2xlYXJUaW1lb3V0KHRoaXMuaWQpOyB0aGlzLmlkID0gc2V0VGltZW91dChmLCBtcyk7fX07CgogIC8vIFNvbWUgSUUgdmVyc2lvbnMgZG9uJ3QgcHJlc2VydmUgd2hpdGVzcGFjZSB3aGVuIHNldHRpbmcgdGhlCiAgLy8gaW5uZXJIVE1MIG9mIGEgUFJFIHRhZy4KICB2YXIgYmFkSW5uZXJIVE1MID0gKGZ1bmN0aW9uKCkgewogICAgdmFyIHByZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpOwogICAgcHJlLmlubmVySFRNTCA9ICIgIjsgcmV0dXJuICFwcmUuaW5uZXJIVE1MOwogIH0pKCk7CgogIC8vIERldGVjdCBkcmFnLWFuZC1kcm9wCiAgdmFyIGRyYWdBbmREcm9wID0gKGZ1bmN0aW9uKCkgewogICAgLy8gSUU4IGhhcyBvbmRyYWdzdGFydCBhbmQgb25kcm9wIHByb3BlcnRpZXMsIGJ1dCBkb2Vzbid0IHNlZW0gdG8KICAgIC8vIGFjdHVhbGx5IHN1cHBvcnQgb25kcmFnc3RhcnQgdGhlIHdheSBpdCdzIHN1cHBvc2VkIHRvIHdvcmsuCiAgICBpZiAoL01TSUUgWzEtOF1cYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgcmV0dXJuIGZhbHNlOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgcmV0dXJuICJvbmRyYWdzdGFydCIgaW4gZGl2ICYmICJvbmRyb3AiIGluIGRpdjsKICB9KSgpOwoKICB2YXIgZ2Vja28gPSAvZ2Vja29cL1xkezd9L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICB2YXIgaWUgPSAvTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICB2YXIgc2FmYXJpID0gL0FwcGxlIENvbXB1dGVyLy50ZXN0KG5hdmlnYXRvci52ZW5kb3IpOwoKICB2YXIgbGluZVNlcCA9ICJcbiI7CiAgLy8gRmVhdHVyZS1kZXRlY3Qgd2hldGhlciBuZXdsaW5lcyBpbiB0ZXh0YXJlYXMgYXJlIGNvbnZlcnRlZCB0byBcclxuCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciB0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CiAgICB0ZS52YWx1ZSA9ICJmb29cbmJhciI7CiAgICBpZiAodGUudmFsdWUuaW5kZXhPZigiXHIiKSA+IC0xKSBsaW5lU2VwID0gIlxyXG4iOwogIH0oKSk7CgogIHZhciB0YWJTaXplID0gODsKICB2YXIgbWFjID0gL01hYy8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pOwogIHZhciBtb3ZlbWVudEtleXMgPSB7fTsKICBmb3IgKHZhciBpID0gMzU7IGkgPD0gNDA7ICsraSkKICAgIG1vdmVtZW50S2V5c1tpXSA9IG1vdmVtZW50S2V5c1siYyIgKyBpXSA9IHRydWU7CgogIC8vIENvdW50cyB0aGUgY29sdW1uIG9mZnNldCBpbiBhIHN0cmluZywgdGFraW5nIHRhYnMgaW50byBhY2NvdW50LgogIC8vIFVzZWQgbW9zdGx5IHRvIGZpbmQgaW5kZW50YXRpb24uCiAgZnVuY3Rpb24gY291bnRDb2x1bW4oc3RyaW5nLCBlbmQpIHsKICAgIGlmIChlbmQgPT0gbnVsbCkgewogICAgICBlbmQgPSBzdHJpbmcuc2VhcmNoKC9bXlxzXHUwMGEwXS8pOwogICAgICBpZiAoZW5kID09IC0xKSBlbmQgPSBzdHJpbmcubGVuZ3RoOwogICAgfQogICAgZm9yICh2YXIgaSA9IDAsIG4gPSAwOyBpIDwgZW5kOyArK2kpIHsKICAgICAgaWYgKHN0cmluZy5jaGFyQXQoaSkgPT0gIlx0IikgbiArPSB0YWJTaXplIC0gKG4gJSB0YWJTaXplKTsKICAgICAgZWxzZSArK247CiAgICB9CiAgICByZXR1cm4gbjsKICB9CgogIGZ1bmN0aW9uIGNvbXB1dGVkU3R5bGUoZWx0KSB7CiAgICBpZiAoZWx0LmN1cnJlbnRTdHlsZSkgcmV0dXJuIGVsdC5jdXJyZW50U3R5bGU7CiAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWx0LCBudWxsKTsKICB9CiAgLy8gRmluZCB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCBieSBmb2xsb3dpbmcgdGhlIG9mZnNldFBhcmVudCBjaGFpbi4KICAvLyBJZiBzY3JlZW49PXRydWUsIGl0IHJldHVybnMgc2NyZWVuIChyYXRoZXIgdGhhbiBwYWdlKSBjb29yZGluYXRlcy4KICBmdW5jdGlvbiBlbHRPZmZzZXQobm9kZSwgc2NyZWVuKSB7CiAgICB2YXIgZG9jID0gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7CiAgICB2YXIgeCA9IDAsIHkgPSAwLCBza2lwRG9jID0gZmFsc2U7CiAgICBmb3IgKHZhciBuID0gbm9kZTsgbjsgbiA9IG4ub2Zmc2V0UGFyZW50KSB7CiAgICAgIHggKz0gbi5vZmZzZXRMZWZ0OyB5ICs9IG4ub2Zmc2V0VG9wOwogICAgICBpZiAoc2NyZWVuICYmIGNvbXB1dGVkU3R5bGUobikucG9zaXRpb24gPT0gImZpeGVkIikKICAgICAgICBza2lwRG9jID0gdHJ1ZTsKICAgIH0KICAgIHZhciBlID0gc2NyZWVuICYmICFza2lwRG9jID8gbnVsbCA6IGRvYzsKICAgIGZvciAodmFyIG4gPSBub2RlLnBhcmVudE5vZGU7IG4gIT0gZTsgbiA9IG4ucGFyZW50Tm9kZSkKICAgICAgaWYgKG4uc2Nyb2xsTGVmdCAhPSBudWxsKSB7IHggLT0gbi5zY3JvbGxMZWZ0OyB5IC09IG4uc2Nyb2xsVG9wO30KICAgIHJldHVybiB7bGVmdDogeCwgdG9wOiB5fTsKICB9CiAgLy8gR2V0IGEgbm9kZSdzIHRleHQgY29udGVudC4KICBmdW5jdGlvbiBlbHRUZXh0KG5vZGUpIHsKICAgIHJldHVybiBub2RlLnRleHRDb250ZW50IHx8IG5vZGUuaW5uZXJUZXh0IHx8IG5vZGUubm9kZVZhbHVlIHx8ICIiOwogIH0KCiAgLy8gT3BlcmF0aW9ucyBvbiB7bGluZSwgY2h9IG9iamVjdHMuCiAgZnVuY3Rpb24gcG9zRXEoYSwgYikge3JldHVybiBhLmxpbmUgPT0gYi5saW5lICYmIGEuY2ggPT0gYi5jaDt9CiAgZnVuY3Rpb24gcG9zTGVzcyhhLCBiKSB7cmV0dXJuIGEubGluZSA8IGIubGluZSB8fCAoYS5saW5lID09IGIubGluZSAmJiBhLmNoIDwgYi5jaCk7fQogIGZ1bmN0aW9uIGNvcHlQb3MoeCkge3JldHVybiB7bGluZTogeC5saW5lLCBjaDogeC5jaH07fQoKICB2YXIgZXNjYXBlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGZ1bmN0aW9uIGh0bWxFc2NhcGUoc3RyKSB7CiAgICBlc2NhcGVFbGVtZW50LmlubmVyVGV4dCA9IGVzY2FwZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdHI7CiAgICByZXR1cm4gZXNjYXBlRWxlbWVudC5pbm5lckhUTUw7CiAgfQogIENvZGVNaXJyb3IuaHRtbEVzY2FwZSA9IGh0bWxFc2NhcGU7CgogIC8vIFVzZWQgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciBhbiB1bmRvL3JlZG8gYnkgZmluZGluZyB0aGUKICAvLyBsYXN0IGVkaXRlZCBjaGFyYWN0ZXIuCiAgZnVuY3Rpb24gZWRpdEVuZChmcm9tLCB0bykgewogICAgaWYgKCF0bykgcmV0dXJuIGZyb20gPyBmcm9tLmxlbmd0aCA6IDA7CiAgICBpZiAoIWZyb20pIHJldHVybiB0by5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPj0gMCAmJiBqID49IDA7IC0taSwgLS1qKQogICAgICBpZiAoZnJvbS5jaGFyQXQoaSkgIT0gdG8uY2hhckF0KGopKSBicmVhazsKICAgIHJldHVybiBqICsgMTsKICB9CgogIGZ1bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7CiAgICBpZiAoY29sbGVjdGlvbi5pbmRleE9mKSByZXR1cm4gY29sbGVjdGlvbi5pbmRleE9mKGVsdCk7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgZTsgKytpKQogICAgICBpZiAoY29sbGVjdGlvbltpXSA9PSBlbHQpIHJldHVybiBpOwogICAgcmV0dXJuIC0xOwogIH0KCiAgLy8gU2VlIGlmICIiLnNwbGl0IGlzIHRoZSBicm9rZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW4KICAvLyBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BsaXQgbGluZXMuCiAgdmFyIHNwbGl0TGluZXMsIHNlbFJhbmdlLCBzZXRTZWxSYW5nZTsKICBpZiAoIlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGggIT0gMykKICAgIHNwbGl0TGluZXMgPSBmdW5jdGlvbihzdHJpbmcpIHsKICAgICAgdmFyIHBvcyA9IDAsIG5sLCByZXN1bHQgPSBbXTsKICAgICAgd2hpbGUgKChubCA9IHN0cmluZy5pbmRleE9mKCJcbiIsIHBvcykpID4gLTEpIHsKICAgICAgICByZXN1bHQucHVzaChzdHJpbmcuc2xpY2UocG9zLCBzdHJpbmcuY2hhckF0KG5sLTEpID09ICJcciIgPyBubCAtIDEgOiBubCkpOwogICAgICAgIHBvcyA9IG5sICsgMTsKICAgICAgfQogICAgICByZXN1bHQucHVzaChzdHJpbmcuc2xpY2UocG9zKSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogIGVsc2UKICAgIHNwbGl0TGluZXMgPSBmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcuc3BsaXQoL1xyP1xuLyk7fTsKICBDb2RlTWlycm9yLnNwbGl0TGluZXMgPSBzcGxpdExpbmVzOwoKICAvLyBTYW5lIG1vZGVsIG9mIGZpbmRpbmcgYW5kIHNldHRpbmcgdGhlIHNlbGVjdGlvbiBpbiBhIHRleHRhcmVhCiAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHsKICAgIHNlbFJhbmdlID0gZnVuY3Rpb24odGUpIHsKICAgICAgdHJ5IHtyZXR1cm4ge3N0YXJ0OiB0ZS5zZWxlY3Rpb25TdGFydCwgZW5kOiB0ZS5zZWxlY3Rpb25FbmR9O30KICAgICAgY2F0Y2goZSkge3JldHVybiBudWxsO30KICAgIH07CiAgICBpZiAoc2FmYXJpKQogICAgICAvLyBPbiBTYWZhcmksIHNlbGVjdGlvbiBzZXQgd2l0aCBzZXRTZWxlY3Rpb25SYW5nZSBhcmUgaW4gYSBzb3J0CiAgICAgIC8vIG9mIGxpbWJvIHdydCB0aGVpciBhbmNob3IuIElmIHlvdSBwcmVzcyBzaGlmdC1sZWZ0IGluIHRoZW0sCiAgICAgIC8vIHRoZSBhbmNob3IgaXMgcHV0IGF0IHRoZSBlbmQsIGFuZCB0aGUgc2VsZWN0aW9uIGV4cGFuZGVkIHRvCiAgICAgIC8vIHRoZSBsZWZ0LiBJZiB5b3UgcHJlc3Mgc2hpZnQtcmlnaHQsIHRoZSBhbmNob3IgZW5kcyB1cCBhdCB0aGUKICAgICAgLy8gZnJvbnQuIFRoaXMgaXMgbm90IHdoYXQgQ29kZU1pcnJvciB3YW50cywgc28gaXQgZG9lcyBhCiAgICAgIC8vIHNwdXJpb3VzIG1vZGlmeSgpIGNhbGwgdG8gZ2V0IG91dCBvZiBsaW1iby4KICAgICAgc2V0U2VsUmFuZ2UgPSBmdW5jdGlvbih0ZSwgc3RhcnQsIGVuZCkgewogICAgICAgIGlmIChzdGFydCA9PSBlbmQpCiAgICAgICAgICB0ZS5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIHRlLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQgLSAxKTsKICAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5tb2RpZnkoImV4dGVuZCIsICJmb3J3YXJkIiwgImNoYXJhY3RlciIpOwogICAgICAgIH0KICAgICAgfTsKICAgIGVsc2UKICAgICAgc2V0U2VsUmFuZ2UgPSBmdW5jdGlvbih0ZSwgc3RhcnQsIGVuZCkgewogICAgICAgIHRyeSB7dGUuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7fQogICAgICAgIGNhdGNoKGUpIHt9IC8vIEZhaWxzIG9uIEZpcmVmb3ggd2hlbiB0ZXh0YXJlYSBpc24ndCBwYXJ0IG9mIHRoZSBkb2N1bWVudAogICAgICB9OwogIH0KICAvLyBJRSBtb2RlbC4gRG9uJ3QgYXNrLgogIGVsc2UgewogICAgc2VsUmFuZ2UgPSBmdW5jdGlvbih0ZSkgewogICAgICB0cnkge3ZhciByYW5nZSA9IHRlLm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7fQogICAgICBjYXRjaChlKSB7cmV0dXJuIG51bGw7fQogICAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLnBhcmVudEVsZW1lbnQoKSAhPSB0ZSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciB2YWwgPSB0ZS52YWx1ZSwgbGVuID0gdmFsLmxlbmd0aCwgbG9jYWxSYW5nZSA9IHRlLmNyZWF0ZVRleHRSYW5nZSgpOwogICAgICBsb2NhbFJhbmdlLm1vdmVUb0Jvb2ttYXJrKHJhbmdlLmdldEJvb2ttYXJrKCkpOwogICAgICB2YXIgZW5kUmFuZ2UgPSB0ZS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgZW5kUmFuZ2UuY29sbGFwc2UoZmFsc2UpOwoKICAgICAgaWYgKGxvY2FsUmFuZ2UuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsIGVuZFJhbmdlKSA+IC0xKQogICAgICAgIHJldHVybiB7c3RhcnQ6IGxlbiwgZW5kOiBsZW59OwoKICAgICAgdmFyIHN0YXJ0ID0gLWxvY2FsUmFuZ2UubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCAtbGVuKTsKICAgICAgZm9yICh2YXIgaSA9IHZhbC5pbmRleE9mKCJcciIpOyBpID4gLTEgJiYgaSA8IHN0YXJ0OyBpID0gdmFsLmluZGV4T2YoIlxyIiwgaSsxKSwgc3RhcnQrKykge30KCiAgICAgIGlmIChsb2NhbFJhbmdlLmNvbXBhcmVFbmRQb2ludHMoIkVuZFRvRW5kIiwgZW5kUmFuZ2UpID4gLTEpCiAgICAgICAgcmV0dXJuIHtzdGFydDogc3RhcnQsIGVuZDogbGVufTsKCiAgICAgIHZhciBlbmQgPSAtbG9jYWxSYW5nZS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLCAtbGVuKTsKICAgICAgZm9yICh2YXIgaSA9IHZhbC5pbmRleE9mKCJcciIpOyBpID4gLTEgJiYgaSA8IGVuZDsgaSA9IHZhbC5pbmRleE9mKCJcciIsIGkrMSksIGVuZCsrKSB7fQogICAgICByZXR1cm4ge3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9OwogICAgfTsKICAgIHNldFNlbFJhbmdlID0gZnVuY3Rpb24odGUsIHN0YXJ0LCBlbmQpIHsKICAgICAgdmFyIHJhbmdlID0gdGUuY3JlYXRlVGV4dFJhbmdlKCk7CiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpOwogICAgICB2YXIgZW5kcmFuZ2UgPSByYW5nZS5kdXBsaWNhdGUoKTsKICAgICAgdmFyIG5ld2xpbmVzID0gMCwgdHh0ID0gdGUudmFsdWU7CiAgICAgIGZvciAodmFyIHBvcyA9IHR4dC5pbmRleE9mKCJcbiIpOyBwb3MgPiAtMSAmJiBwb3MgPCBzdGFydDsgcG9zID0gdHh0LmluZGV4T2YoIlxuIiwgcG9zICsgMSkpCiAgICAgICAgKytuZXdsaW5lczsKICAgICAgcmFuZ2UubW92ZSgiY2hhcmFjdGVyIiwgc3RhcnQgLSBuZXdsaW5lcyk7CiAgICAgIGZvciAoOyBwb3MgPiAtMSAmJiBwb3MgPCBlbmQ7IHBvcyA9IHR4dC5pbmRleE9mKCJcbiIsIHBvcyArIDEpKQogICAgICAgICsrbmV3bGluZXM7CiAgICAgIGVuZHJhbmdlLm1vdmUoImNoYXJhY3RlciIsIGVuZCAtIG5ld2xpbmVzKTsKICAgICAgcmFuZ2Uuc2V0RW5kUG9pbnQoIkVuZFRvRW5kIiwgZW5kcmFuZ2UpOwogICAgICByYW5nZS5zZWxlY3QoKTsKICAgIH07CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZU1vZGUoIm51bGwiLCBmdW5jdGlvbigpIHsKICAgIHJldHVybiB7dG9rZW46IGZ1bmN0aW9uKHN0cmVhbSkge3N0cmVhbS5za2lwVG9FbmQoKTt9fTsKICB9KTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvcGxhaW4iLCAibnVsbCIpOwoKICByZXR1cm4gQ29kZU1pcnJvcjsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/overlay.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBtb2RlcyB0byBiZSBjb21iaW5lZC4gVGhlIG1vZGUgZ2l2ZW4KLy8gYXMgdGhlIGJhc2UgYXJndW1lbnQgdGFrZXMgY2FyZSBvZiBtb3N0IG9mIHRoZSBub3JtYWwgbW9kZQovLyBmdW5jdGlvbmFsaXR5LCBidXQgYSBzZWNvbmQgKHR5cGljYWxseSBzaW1wbGUpIG1vZGUgaXMgdXNlZCwgd2hpY2gKLy8gY2FuIG92ZXJyaWRlIHRoZSBzdHlsZSBvZiB0ZXh0LiBCb3RoIG1vZGVzIGdldCB0byBwYXJzZSBhbGwgb2YgdGhlCi8vIHRleHQsIGJ1dCB3aGVuIGJvdGggYXNzaWduIGEgbm9uLW51bGwgc3R5bGUgdG8gYSBwaWVjZSBvZiBjb2RlLCB0aGUKLy8gb3ZlcmxheSB3aW5zLCB1bmxlc3MgdGhlIGNvbWJpbmUgYXJndW1lbnQgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UKLy8gdGhlIHN0eWxlcyBhcmUgY29tYmluZWQuCgpDb2RlTWlycm9yLm92ZXJsYXlQYXJzZXIgPSBmdW5jdGlvbihiYXNlLCBvdmVybGF5LCBjb21iaW5lKSB7CiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShiYXNlKSwKICAgICAgICBvdmVybGF5OiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUob3ZlcmxheSksCiAgICAgICAgYmFzZVBvczogMCwgYmFzZUN1cjogbnVsbCwKICAgICAgICBvdmVybGF5UG9zOiAwLCBvdmVybGF5Q3VyOiBudWxsCiAgICAgIH07CiAgICB9LAogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3IuY29weVN0YXRlKGJhc2UsIHN0YXRlLmJhc2UpLAogICAgICAgIG92ZXJsYXk6IENvZGVNaXJyb3IuY29weVN0YXRlKG92ZXJsYXksIHN0YXRlLm92ZXJsYXkpLAogICAgICAgIGJhc2VQb3M6IHN0YXRlLmJhc2VQb3MsIGJhc2VDdXI6IG51bGwsCiAgICAgICAgb3ZlcmxheVBvczogc3RhdGUub3ZlcmxheVBvcywgb3ZlcmxheUN1cjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLmJhc2VQb3MpIHsKICAgICAgICBzdGF0ZS5iYXNlQ3VyID0gYmFzZS50b2tlbihzdHJlYW0sIHN0YXRlLmJhc2UpOwogICAgICAgIHN0YXRlLmJhc2VQb3MgPSBzdHJlYW0ucG9zOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uc3RhcnQgPT0gc3RhdGUub3ZlcmxheVBvcykgewogICAgICAgIHN0cmVhbS5wb3MgPSBzdHJlYW0uc3RhcnQ7CiAgICAgICAgc3RhdGUub3ZlcmxheUN1ciA9IG92ZXJsYXkudG9rZW4oc3RyZWFtLCBzdGF0ZS5vdmVybGF5KTsKICAgICAgICBzdGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnBvczsKICAgICAgfQogICAgICBzdHJlYW0ucG9zID0gTWF0aC5taW4oc3RhdGUuYmFzZVBvcywgc3RhdGUub3ZlcmxheVBvcyk7CiAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHN0YXRlLmJhc2VQb3MgPSBzdGF0ZS5vdmVybGF5UG9zID0gMDsKCiAgICAgIGlmIChzdGF0ZS5vdmVybGF5Q3VyID09IG51bGwpIHJldHVybiBzdGF0ZS5iYXNlQ3VyOwogICAgICBpZiAoc3RhdGUuYmFzZUN1ciAhPSBudWxsICYmIGNvbWJpbmUpIHJldHVybiBzdGF0ZS5iYXNlQ3VyICsgIiAiICsgc3RhdGUub3ZlcmxheUN1cjsKICAgICAgZWxzZSByZXR1cm4gc3RhdGUub3ZlcmxheUN1cjsKICAgIH0sCiAgICAKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICByZXR1cm4gYmFzZS5pbmRlbnQoc3RhdGUuYmFzZSwgdGV4dEFmdGVyKTsKICAgIH0sCiAgICBlbGVjdHJpY0NoYXJzOiBiYXNlLmVsZWN0cmljQ2hhcnMKICB9Owp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/runmode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5ydW5Nb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBtb2Rlc3BlYywgY2FsbGJhY2spIHsKICB2YXIgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZSh7aW5kZW50VW5pdDogMn0sIG1vZGVzcGVjKTsKICB2YXIgaXNOb2RlID0gY2FsbGJhY2subm9kZVR5cGUgPT0gMTsKICBpZiAoaXNOb2RlKSB7CiAgICB2YXIgbm9kZSA9IGNhbGxiYWNrLCBhY2N1bSA9IFtdOwogICAgY2FsbGJhY2sgPSBmdW5jdGlvbihzdHJpbmcsIHN0eWxlKSB7CiAgICAgIGlmIChzdHJpbmcgPT0gIlxuIikKICAgICAgICBhY2N1bS5wdXNoKCI8YnI+Iik7CiAgICAgIGVsc2UgaWYgKHN0eWxlKQogICAgICAgIGFjY3VtLnB1c2goIjxzcGFuIGNsYXNzPVwiY20tIiArIENvZGVNaXJyb3IuaHRtbEVzY2FwZShzdHlsZSkgKyAiXCI+IiArIENvZGVNaXJyb3IuaHRtbEVzY2FwZShzdHJpbmcpICsgIjwvc3Bhbj4iKTsKICAgICAgZWxzZQogICAgICAgIGFjY3VtLnB1c2goQ29kZU1pcnJvci5odG1sRXNjYXBlKHN0cmluZykpOwogICAgfQogIH0KICB2YXIgbGluZXMgPSBDb2RlTWlycm9yLnNwbGl0TGluZXMoc3RyaW5nKSwgc3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUobW9kZSk7CiAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgIGlmIChpKSBjYWxsYmFjaygiXG4iKTsKICAgIHZhciBzdHJlYW0gPSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0obGluZXNbaV0pOwogICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgdmFyIHN0eWxlID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKICAgICAgY2FsbGJhY2soc3RyZWFtLmN1cnJlbnQoKSwgc3R5bGUpOwogICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgfQogIH0KICBpZiAoaXNOb2RlKQogICAgbm9kZS5pbm5lckhUTUwgPSBhY2N1bS5qb2luKCIiKTsKfTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmlqbiBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/manual.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVzZXIgTWFudWFsPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJjc3MvZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgICA8c3R5bGU+ZGwgZGwge21hcmdpbjogMDt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iY3NzL2JhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBVc2VyIG1hbnVhbCBhbmQKICAgcmVmZXJlbmNlIGd1aWRlICovCjwvcHJlPgoKPGRpdiBjbGFzcz0iY2xlYXIiPjxkaXYgY2xhc3M9ImxlZnRiaWcgYmxrIj4KCiAgICA8aDIgaWQ9Im92ZXJ2aWV3Ij5PdmVydmlldzwvaDI+CgogICAgPHA+Q29kZU1pcnJvciBpcyBhIGNvZGUtZWRpdG9yIGNvbXBvbmVudCB0aGF0IGNhbiBiZSBlbWJlZGRlZCBpbgogICAgV2ViIHBhZ2VzLiBJdCBwcm92aWRlcyA8ZW0+b25seTwvZW0+IHRoZSBlZGl0b3IgY29tcG9uZW50LCBubwogICAgYWNjb21wYW55aW5nIGJ1dHRvbnMKICAgIChzZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vY3RvbGFicy5jb20vamF2YXNjcmlwdHMvY29kZW1pcnJvci11aS8iPkNvZGVNaXJyb3IKICAgIFVJPC9hPiBmb3IgYSBkcm9wLWluIGJ1dHRvbiBiYXIpLCBhdXRvLWNvbXBsZXRpb24sIG9yIG90aGVyIElERQogICAgZnVuY3Rpb25hbGl0eS4gSXQgZG9lcyBwcm92aWRlIGEgcmljaCBBUEkgb24gdG9wIG9mIHdoaWNoIHN1Y2gKICAgIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHN0cmFpZ2h0Zm9yd2FyZGx5IGltcGxlbWVudGVkLjwvcD4KCiAgICA8cD5Db2RlTWlycm9yIHdvcmtzIHdpdGggbGFuZ3VhZ2Utc3BlY2lmaWMgbW9kZXMuIE1vZGVzIGFyZQogICAgSmF2YVNjcmlwdCBwcm9ncmFtcyB0aGF0IGhlbHAgY29sb3IgKGFuZCBvcHRpb25hbGx5IGluZGVudCkgdGV4dAogICAgd3JpdHRlbiBpbiBhIGdpdmVuIGxhbmd1YWdlLiBUaGUgZGlzdHJpYnV0aW9uIGNvbWVzIHdpdGggYSBmZXcKICAgIG1vZGVzIChzZWUgdGhlIDxjb2RlPm1vZGUvPC9jb2RlPiBkaXJlY3RvcnkpLCBhbmQgaXQgaXNuJ3QgaGFyZAogICAgdG8gPGEgaHJlZj0iI21vZGVhcGkiPndyaXRlIG5ldyBvbmVzPC9hPiBmb3Igb3RoZXIgbGFuZ3VhZ2VzLjwvcD4KCiAgICA8aDIgaWQ9InVzYWdlIj5CYXNpYyBVc2FnZTwvaDI+CgogICAgPHA+VGhlIGVhc2llc3Qgd2F5IHRvIHVzZSBDb2RlTWlycm9yIGlzIHRvIHNpbXBseSBsb2FkIHRoZSBzY3JpcHQKICAgIGFuZCBzdHlsZSBzaGVldCBmb3VuZCB1bmRlciA8Y29kZT5saWIvPC9jb2RlPiBpbiB0aGUgZGlzdHJpYnV0aW9uLAogICAgcGx1cyBhIG1vZGUgc2NyaXB0IGZyb20gb25lIG9mIHRoZSA8Y29kZT5tb2RlLzwvY29kZT4gZGlyZWN0b3JpZXMKICAgIGFuZCBhIHRoZW1lIHN0eWxlc2hlZXQgZnJvbSA8Y29kZT50aGVtZS88L2NvZGU+LiAoU2VlCiAgICBhbHNvIDxhIGhyZWY9ImNvbXByZXNzLmh0bWwiPnRoZSBjb21wcmVzc2lvbiBoZWxwZXI8L2E+LikgRm9yCiAgICBleGFtcGxlOjwvcD4KCiAgICA8cHJlPiZsdDtzY3JpcHQgc3JjPSJsaWIvY29kZW1pcnJvci5qcyI+Jmx0Oy9zY3JpcHQ+CiZsdDtsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibGliL2NvZGVtaXJyb3IuY3NzIj4KJmx0O3NjcmlwdCBzcmM9Im1vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj4mbHQ7L3NjcmlwdD4KJmx0O2xpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0aGVtZS9kZWZhdWx0LmNzcyI+PC9wcmU+CgogICAgPHA+KElmIHlvdSB1c2UgYSB0aGVtZSBvdGhlciB0aGFuIDxjb2RlPmRlZmF1bHQuY3NzPC9jb2RlPiwgeW91CiAgICBhbHNvIGhhdmUgdG8gc3BlY2lmeSB0aGUKICAgIDxhIGhyZWY9IiNvcHRpb25fdGhlbWUiPjxjb2RlPnRoZW1lPC9jb2RlPjwvYT4gb3B0aW9uLikgSGF2aW5nCiAgICBkb25lIHRoaXMsIGFuIGVkaXRvciBpbnN0YW5jZSBjYW4gYmUgY3JlYXRlZCBsaWtlIHRoaXM6PC9wPgoKICAgIDxwcmU+dmFyIG15Q29kZU1pcnJvciA9IENvZGVNaXJyb3IoZG9jdW1lbnQuYm9keSk7PC9wcmU+CgogICAgPHA+VGhlIGVkaXRvciB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBkb2N1bWVudCBib2R5LCB3aWxsIHN0YXJ0CiAgICBlbXB0eSwgYW5kIHdpbGwgdXNlIHRoZSBtb2RlIHRoYXQgd2UgbG9hZGVkLiBUbyBoYXZlIG1vcmUgY29udHJvbAogICAgb3ZlciB0aGUgbmV3IGVkaXRvciwgYSBjb25maWd1cmF0aW9uIG9iamVjdCBjYW4gYmUgcGFzc2VkCiAgICB0byA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBhcyBhIHNlY29uZCBhcmd1bWVudDo8L3A+CgogICAgPHByZT52YXIgbXlDb2RlTWlycm9yID0gQ29kZU1pcnJvcihkb2N1bWVudC5ib2R5LCB7CiAgdmFsdWU6ICJmdW5jdGlvbiBteVNjcmlwdCgpe3JldHVybiAxMDA7fVxuIiwKICBtb2RlOiAgImphdmFzY3JpcHQiCn0pOzwvcHJlPgoKICAgIDxwPlRoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBlZGl0b3Igd2l0aCBhIHBpZWNlIG9mIGNvZGUgYWxyZWFkeSBpbgogICAgaXQsIGFuZCBleHBsaWNpdGx5IHRlbGwgaXQgdG8gdXNlIHRoZSBKYXZhU2NyaXB0IG1vZGUgKHdoaWNoIGlzCiAgICB1c2VmdWwgd2hlbiBtdWx0aXBsZSBtb2RlcyBhcmUgbG9hZGVkKS4KICAgIFNlZSA8YSBocmVmPSIjY29uZmlnIj5iZWxvdzwvYT4gZm9yIGEgZnVsbCBkaXNjdXNzaW9uIG9mIHRoZQogICAgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgQ29kZU1pcnJvciBhY2NlcHRzLjwvcD4KCiAgICA8cD5JbiBjYXNlcyB3aGVyZSB5b3UgZG9uJ3Qgd2FudCB0byBhcHBlbmQgdGhlIGVkaXRvciB0byBhbgogICAgZWxlbWVudCwgYW5kIG5lZWQgbW9yZSBjb250cm9sIG92ZXIgdGhlIHdheSBpdCBpcyBpbnNlcnRlZCwgdGhlCiAgICBmaXJzdCBhcmd1bWVudCB0byB0aGUgPGNvZGU+Q29kZU1pcnJvcjwvY29kZT4gZnVuY3Rpb24gY2FuIGFsc28KICAgIGJlIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBnaXZlbiBhIERPTSBlbGVtZW50LCBpbnNlcnRzIGl0IGludG8gdGhlCiAgICBkb2N1bWVudCBzb21ld2hlcmUuIFRoaXMgY291bGQgYmUgdXNlZCB0bywgZm9yIGV4YW1wbGUsIHJlcGxhY2UgYQogICAgdGV4dGFyZWEgd2l0aCBhIHJlYWwgZWRpdG9yOjwvcD4KCiAgICA8cHJlPnZhciBteUNvZGVNaXJyb3IgPSBDb2RlTWlycm9yKGZ1bmN0aW9uKGVsdCkgewogIG15VGV4dEFyZWEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZWx0LCBteVRleHRBcmVhKTsKfSwge3ZhbHVlOiBteVRleHRBcmVhLnZhbHVlfSk7PC9wcmU+CgogICAgPHA+SG93ZXZlciwgZm9yIHRoaXMgdXNlIGNhc2UsIHdoaWNoIGlzIGEgY29tbW9uIHdheSB0byB1c2UKICAgIENvZGVNaXJyb3IsIHRoZSBsaWJyYXJ5IHByb3ZpZGVzIGEgbXVjaCBtb3JlIHBvd2VyZnVsCiAgICBzaG9ydGN1dDo8L3A+CgogICAgPHByZT52YXIgbXlDb2RlTWlycm9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEobXlUZXh0QXJlYSk7PC9wcmU+CgogICAgPHA+VGhpcyB3aWxsLCBhbW9uZyBvdGhlciB0aGluZ3MsIGVuc3VyZSB0aGF0IHRoZSB0ZXh0YXJlYSdzIHZhbHVlCiAgICBpcyB1cGRhdGVkIHdoZW4gdGhlIGZvcm0gKGlmIGl0IGlzIHBhcnQgb2YgYSBmb3JtKSBpcyBzdWJtaXR0ZWQuCiAgICBTZWUgdGhlIDxhIGhyZWY9IiNmcm9tVGV4dEFyZWEiPkFQSSByZWZlcmVuY2U8L2E+IGZvciBhIGZ1bGwKICAgIGRlc2NyaXB0aW9uIG9mIHRoaXMgbWV0aG9kLjwvcD4KCiAgICA8aDIgaWQ9ImNvbmZpZyI+Q29uZmlndXJhdGlvbjwvaDI+CgogICAgPHA+Qm90aCB0aGUgPGNvZGU+Q29kZU1pcnJvcjwvY29kZT4gZnVuY3Rpb24gYW5kCiAgICBpdHMgPGNvZGU+ZnJvbVRleHRBcmVhPC9jb2RlPiBtZXRob2QgdGFrZSBhcyBzZWNvbmQgKG9wdGlvbmFsKQogICAgYXJndW1lbnQgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbnkgb3B0aW9uCiAgICBub3Qgc3VwcGxpZWQgbGlrZSB0aGlzIHdpbGwgYmUgdGFrZW4KICAgIGZyb20gPGNvZGU+Q29kZU1pcnJvci5kZWZhdWx0czwvY29kZT4sIGFuIG9iamVjdCBjb250YWluaW5nIHRoZQogICAgZGVmYXVsdCBvcHRpb25zLiBZb3UgY2FuIHVwZGF0ZSB0aGlzIG9iamVjdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHRzCiAgICBvbiB5b3VyIHBhZ2UuPC9wPgoKICAgIDxwPk9wdGlvbnMgYXJlIG5vdCBjaGVja2VkIGluIGFueSB3YXksIHNvIHNldHRpbmcgYm9ndXMgb3B0aW9uCiAgICB2YWx1ZXMgaXMgYm91bmQgdG8gbGVhZCB0byBvZGQgZXJyb3JzLjwvcD4KCiAgICA8cD48ZW0+Tm90ZTo8L2VtPiBDb2RlTWlycm9yCiAgICAyIDxhIGhyZWY9ImludGVybmFscy5odG1sI3N1bW1hcnkiPmRvZXMgbm90IHN1cHBvcnQ8L2E+CiAgICBsaW5lLXdyYXBwaW5nLiBJIHdvdWxkIGhhdmUgdmVyeSBtdWNoIGxpa2VkIHRvIHN1cHBvcnQgaXQsIGJ1dCBpdAogICAgY29tYmluZXMgZXh0cmVtZWx5IHBvb3JseSB3aXRoIHRoZSB3YXkgdGhlIGVkaXRvciBpcwogICAgaW1wbGVtZW50ZWQuPC9wPgoKICAgIDxwPlRoZXNlIGFyZSB0aGUgc3VwcG9ydGVkIG9wdGlvbnM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJvcHRpb25fdmFsdWUiPjxjb2RlPnZhbHVlIChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGVkaXRvci48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fbW9kZSI+PGNvZGU+bW9kZSAoc3RyaW5nIG9yIG9iamVjdCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBtb2RlIHRvIHVzZS4gV2hlbiBub3QgZ2l2ZW4sIHRoaXMgd2lsbCBkZWZhdWx0IHRvIHRoZQogICAgICBmaXJzdCBtb2RlIHRoYXQgd2FzIGxvYWRlZC4gSXQgbWF5IGJlIGEgc3RyaW5nLCB3aGljaCBlaXRoZXIKICAgICAgc2ltcGx5IG5hbWVzIHRoZSBtb2RlIG9yIGlzCiAgICAgIGEgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSU1FIj5NSU1FPC9hPiB0eXBlCiAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kZS4gQWx0ZXJuYXRpdmVseSwgaXQgbWF5IGJlIGFuIG9iamVjdAogICAgICBjb250YWluaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1vZGUsIHdpdGgKICAgICAgYSA8Y29kZT5uYW1lPC9jb2RlPiBwcm9wZXJ0eSB0aGF0IG5hbWVzIHRoZSBtb2RlIChmb3IKICAgICAgZXhhbXBsZSA8Y29kZT57bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVlfTwvY29kZT4pLiBUaGUgZGVtbwogICAgICBwYWdlcyBmb3IgZWFjaCBtb2RlIGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb25maWd1cmF0aW9uCiAgICAgIHBhcmFtZXRlcnMgdGhlIG1vZGUgc3VwcG9ydHMuIFlvdSBjYW4gYXNrIENvZGVNaXJyb3Igd2hpY2ggbW9kZXMKICAgICAgYW5kIE1JTUUgdHlwZXMgYXJlIGxvYWRlZCB3aXRoCiAgICAgIHRoZSA8Y29kZT5Db2RlTWlycm9yLmxpc3RNb2RlczwvY29kZT4KICAgICAgYW5kIDxjb2RlPkNvZGVNaXJyb3IubGlzdE1JTUVzPC9jb2RlPiBmdW5jdGlvbnMuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3RoZW1lIj48Y29kZT50aGVtZSAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHRoZW1lIHRvIHN0eWxlIHRoZSBlZGl0b3Igd2l0aC4gWW91IG11c3QgbWFrZSBzdXJlIHRoZQogICAgICBDU1MgZmlsZSBkZWZpbmluZyB0aGUgY29ycmVzcG9uZGluZyA8Y29kZT4uY20tcy1bbmFtZV08L2NvZGU+CiAgICAgIHN0eWxlcyBpcyBsb2FkZWQgKHNlZQogICAgICB0aGUgPGEgaHJlZj0idGhlbWUvIj48Y29kZT50aGVtZTwvY29kZT48L2E+IGRpcmVjdG9yeSBpbiB0aGUKICAgICAgZGlzdHJpYnV0aW9uKS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25faW5kZW50VW5pdCI+PGNvZGU+aW5kZW50VW5pdCAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkhvdyBtYW55IHNwYWNlcyBhIGJsb2NrICh3aGF0ZXZlciB0aGF0IG1lYW5zIGluIHRoZSBlZGl0ZWQKICAgICAgbGFuZ3VhZ2UpIHNob3VsZCBiZSBpbmRlbnRlZC4gVGhlIGRlZmF1bHQgaXMgMi48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25faW5kZW50V2l0aFRhYnMiPjxjb2RlPmluZGVudFdpdGhUYWJzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hldGhlciwgd2hlbiBpbmRlbnRpbmcsIHRoZSBmaXJzdCBOKjggc3BhY2VzIHNob3VsZCBiZQogICAgICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3RhYk1vZGUiPjxjb2RlPnRhYk1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkRldGVybWluZXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgdGFiIGtleS4KICAgICAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgICAgICA8ZGw+CiAgICAgICAgICA8ZHQ+PGNvZGU+ImNsYXNzaWMiICh0aGUgZGVmYXVsdCk8L2NvZGU+PC9kdD4KICAgICAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICAgICAgYmVoYXZlIGxpa2UgdGhlIDxjb2RlPiJzaGlmdCI8L2NvZGU+IG1vZGUuIChXaGVuIHNoaWZ0IGlzCiAgICAgICAgICBoZWxkLCB0aGlzIGJlaGF2ZXMgbGlrZSB0aGUgPGNvZGU+ImluZGVudCI8L2NvZGU+IG1vZGUuKTwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICAgICAgPGRkPkluZGVudCBhbGwgc2VsZWN0ZWQgbGluZXMgYnkKICAgICAgICAgIG9uZSA8YSBocmVmPSIjb3B0aW9uX2luZGVudFVuaXQiPjxjb2RlPmluZGVudFVuaXQ8L2NvZGU+PC9hPi4KICAgICAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICAgICAgbGluZXMgb25lIHVuaXQuPC9kZD4KICAgICAgICAgIDxkdD48Y29kZT4iaW5kZW50IjwvY29kZT48L2R0PgogICAgICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgICAgIGNvbnRleHQuIE9ubHkgd29ya3MgaWYgdGhlCiAgICAgICAgICBtb2RlIDxhIGhyZWY9IiNpbmRlbnQiPnN1cHBvcnRzPC9hPiBpdC48L2RkPgogICAgICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICAgICAgPGRkPkRvIG5vdCBjYXB0dXJlIHRhYiBwcmVzc2VzLCBsZXQgdGhlIGJyb3dzZXIgYXBwbHkgaXRzCiAgICAgICAgICBkZWZhdWx0IGJlaGF2aW91ciAod2hpY2ggdXN1YWxseSBtZWFucyBpdCBza2lwcyB0byB0aGUgbmV4dAogICAgICAgICAgY29udHJvbCkuPC9kZD4KICAgICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9lbnRlck1vZGUiPjxjb2RlPmVudGVyTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogICAgICBlbnRlciBrZXkgaXMgcHJlc3NlZC4gVGhlIGZvbGxvd2luZyBtb2RlcyBhcmUgc3VwcG9ydGVkOgogICAgICAgIDxkbD4KICAgICAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+VXNlIHRoZSBtb2RlJ3MgaW5kZW50YXRpb24gcnVsZXMgdG8gZ2l2ZSB0aGUgbmV3IGxpbmUKICAgICAgICAgIHRoZSBjb3JyZWN0IGluZGVudGF0aW9uLjwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+SW5kZW50IHRoZSBsaW5lIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBsaW5lLjwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+ImZsYXQiPC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9lbGVjdHJpY0NoYXJzIj48Y29kZT5lbGVjdHJpY0NoYXJzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29uZmlndXJlcyB3aGV0aGVyIHRoZSBlZGl0b3Igc2hvdWxkIHJlLWluZGVudCB0aGUgY3VycmVudAogICAgICBsaW5lIHdoZW4gYSBjaGFyYWN0ZXIgaXMgdHlwZWQgdGhhdCBtaWdodCBjaGFuZ2UgaXRzIHByb3BlcgogICAgICBpbmRlbnRhdGlvbiAob25seSB3b3JrcyBpZiB0aGUgbW9kZSBzdXBwb3J0cyBpbmRlbnRhdGlvbikuCiAgICAgIERlZmF1bHQgaXMgdHJ1ZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fc21hcnRIb21lIj48Y29kZT5zbWFydEhvbWUgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Db25maWd1cmVzIHdoZXRoZXIgdGhlIGhvbWUga2V5IHRha2VzIHlvdSB0byB0aGUgZmlyc3QKICAgICAgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyICh1bmxlc3MgYWxyZWFkeSB0aGVyZSkgb3IgdG8gdGhlIHN0YXJ0CiAgICAgIG9mIHRoZSBsaW5lLiBPbiBieSBkZWZhdWx0LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9saW5lTnVtYmVycyI+PGNvZGU+bGluZU51bWJlcnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGV0aGVyIHRvIHNob3cgbGluZSBudW1iZXJzIHRvIHRoZSBsZWZ0IG9mIHRoZSBlZGl0b3IuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2ZpcnN0TGluZU51bWJlciI+PGNvZGU+Zmlyc3RMaW5lTnVtYmVyIChpbnRlZ2VyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+QXQgd2hpY2ggbnVtYmVyIHRvIHN0YXJ0IGNvdW50aW5nIGxpbmVzLiBEZWZhdWx0IGlzIDEuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2d1dHRlciI+PGNvZGU+Z3V0dGVyIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2FuIGJlIHVzZWQgdG8gZm9yY2UgYSAnZ3V0dGVyJyAoZW1wdHkgc3BhY2Ugb24gdGhlIGxlZnQgb2YKICAgICAgdGhlIGVkaXRvcikgdG8gYmUgc2hvd24gZXZlbiB3aGVuIG5vIGxpbmUgbnVtYmVycyBhcmUgYWN0aXZlLgogICAgICBUaGlzIGlzIHVzZWZ1bCBmb3Igc2V0dGluZyA8YSBocmVmPSIjc2V0TWFya2VyIj5tYXJrZXJzPC9hPi48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fZml4ZWRHdXR0ZXIiPjxjb2RlPmZpeGVkR3V0dGVyIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiBlbmFibGVkIChvZmYgYnkgZGVmYXVsdCksIHRoaXMgd2lsbCBtYWtlIHRoZSBndXR0ZXIKICAgICAgc3RheSB2aXNpYmxlIHdoZW4gdGhlIGRvY3VtZW50IGlzIHNjcm9sbGVkIGhvcml6b250YWxseS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fcmVhZE9ubHkiPjxjb2RlPnJlYWRPbmx5IChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBkaXNhYmxlcyBlZGl0aW5nIG9mIHRoZSBlZGl0b3IgY29udGVudCBieSB0aGUgdXNlci4KICAgICAgKENoYW5nZXMgdGhyb3VnaCBBUEkgZnVuY3Rpb25zIHdpbGwgc3RpbGwgYmUgcG9zc2libGUuKSBJZiB5b3UKICAgICAgYWxzbyB3YW50IHRvIGRpc2FibGUgdGhlIGN1cnNvciwgdXNlIDxjb2RlPiJub2N1cnNvciI8L2NvZGU+IGFzCiAgICAgIGEgdmFsdWUgZm9yIHRoaXMgb3B0aW9uLCBpbnN0ZWFkIG9mIDxjb2RlPnRydWU8L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkNoYW5nZSI+PGNvZGU+b25DaGFuZ2UgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiBnaXZlbiwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZQogICAgICBjb250ZW50IG9mIHRoZSBlZGl0b3IgaXMgY2hhbmdlZC4gSXQgd2lsbCBiZSBnaXZlbiB0aGUgZWRpdG9yCiAgICAgIGluc3RhbmNlIGFzIG9ubHkgYXJndW1lbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uQ3Vyc29yQWN0aXZpdHkiPjxjb2RlPm9uQ3Vyc29yQWN0aXZpdHkgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+TGlrZSA8Y29kZT5vbkNoYW5nZTwvY29kZT4sIGJ1dCB3aWxsIGFsc28gYmUgY2FsbGVkIHdoZW4gdGhlCiAgICAgIGN1cnNvciBtb3ZlcyB3aXRob3V0IGFueSBjaGFuZ2VzIGJlaW5nIG1hZGUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uR3V0dGVyQ2xpY2siPjxjb2RlPm9uR3V0dGVyQ2xpY2sgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiBnaXZlbiwgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGVkaXRvciBndXR0ZXIgKHRoZQogICAgICBsaW5lLW51bWJlciBhcmVhKSBpcyBjbGlja2VkLiBXaWxsIGJlIGdpdmVuIHRoZSBlZGl0b3IgaW5zdGFuY2UKICAgICAgYXMgZmlyc3QgYXJndW1lbnQsIHRoZSAoemVyby1iYXNlZCkgbnVtYmVyIG9mIHRoZSBsaW5lIHRoYXQgd2FzCiAgICAgIGNsaWNrZWQgYXMgc2Vjb25kIGFyZ3VtZW50LCBhbmQgdGhlIHJhdyA8Y29kZT5tb3VzZWRvd248L2NvZGU+CiAgICAgIGV2ZW50IG9iamVjdCBhcyB0aGlyZCBhcmd1bWVudC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25Gb2N1cyI+PGNvZGU+b25Gb2N1cywgb25CbHVyIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBnaXZlbiBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGVkaXRvciBpcwogICAgICBmb2N1c2VkIG9yIHVuZm9jdXNlZC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25TY3JvbGwiPjxjb2RlPm9uU2Nyb2xsIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZ2l2ZW4sIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBlZGl0b3IgaXMKICAgICAgc2Nyb2xsZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uSGlnaGxpZ2h0Q29tcGxldGUiPjxjb2RlPm9uSGlnaGxpZ2h0Q29tcGxldGUgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbmV2ZXIgdGhlIGVkaXRvcidzIGNvbnRlbnQgaGFzIGJlZW4gZnVsbHkgaGlnaGxpZ2h0ZWQsCiAgICAgIHRoaXMgZnVuY3Rpb24gKGlmIGdpdmVuKSB3aWxsIGJlIGNhbGxlZC4gSXQnbGwgYmUgZ2l2ZW4gYSBzaW5nbGUKICAgICAgYXJndW1lbnQsIHRoZSBlZGl0b3IgaW5zdGFuY2UuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX21hdGNoQnJhY2tldHMiPjxjb2RlPm1hdGNoQnJhY2tldHMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5EZXRlcm1pbmVzIHdoZXRoZXIgYnJhY2tldHMgYXJlIG1hdGNoZWQgd2hlbmV2ZXIgdGhlIGN1cnNvcgogICAgICBpcyBtb3ZlZCBuZXh0IHRvIGEgYnJhY2tldC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fd29ya1RpbWUiPjxjb2RlPndvcmtUaW1lLCB3b3JrRGVsYXkgKG51bWJlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkhpZ2hsaWdodGluZyBpcyBkb25lIGJ5IGEgcHNldWRvIGJhY2tncm91bmQtdGhyZWFkIHRoYXQgd2lsbAogICAgICB3b3JrIGZvciA8Y29kZT53b3JrVGltZTwvY29kZT4gbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiB1c2UKICAgICAgdGltZW91dCB0byBzbGVlcCBmb3IgPGNvZGU+d29ya0RlbGF5PC9jb2RlPiBtaWxsaXNlY29uZHMuIFRoZQogICAgICBkZWZhdWx0cyBhcmUgMjAwIGFuZCAzMDAsIHlvdSBjYW4gY2hhbmdlIHRoZXNlIG9wdGlvbnMgdG8gbWFrZQogICAgICB0aGUgaGlnaGxpZ2h0aW5nIG1vcmUgb3IgbGVzcyBhZ2dyZXNzaXZlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl91bmRvRGVwdGgiPjxjb2RlPnVuZG9EZXB0aCAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiB1bmRvIGxldmVscyB0aGF0IHRoZSBlZGl0b3Igc3RvcmVzLgogICAgICBEZWZhdWx0cyB0byA0MC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fdGFiaW5kZXgiPjxjb2RlPnRhYmluZGV4IChpbnRlZ2VyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNhZGVmLXRhYmluZGV4Ij50YWIKICAgICAgaW5kZXg8L2E+IHRvIGFzc2lnbiB0byB0aGUgZWRpdG9yLiBJZiBub3QgZ2l2ZW4sIG5vIHRhYiBpbmRleAogICAgICB3aWxsIGJlIGFzc2lnbmVkLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9kb2N1bWVudCI+PGNvZGU+ZG9jdW1lbnQgKERPTSBkb2N1bWVudCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIGRpc3BsYXkgdGhlIGVkaXRvciBpbiBhbm90aGVyIERPTS4KICAgICAgQnkgZGVmYXVsdCBpdCB3aWxsIHVzZSB0aGUgZ2xvYmFsIDxjb2RlPmRvY3VtZW50PC9jb2RlPgogICAgICBvYmplY3QuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uS2V5RXZlbnQiPjxjb2RlPm9uS2V5RXZlbnQgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBwcm92aWRlcyBhIHJhdGhlciBsb3ctbGV2ZWwgaG9vayBpbnRvIENvZGVNaXJyb3IncyBrZXkKICAgICAgaGFuZGxpbmcuIElmIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIG9uCiAgICAgIGV2ZXJ5IDxjb2RlPmtleWRvd248L2NvZGU+LCA8Y29kZT5rZXl1cDwvY29kZT4sCiAgICAgIGFuZCA8Y29kZT5rZXlwcmVzczwvY29kZT4gZXZlbnQgdGhhdCBDb2RlTWlycm9yIGNhcHR1cmVzLiBJdAogICAgICB3aWxsIGJlIHBhc3NlZCB0d28gYXJndW1lbnRzLCB0aGUgZWRpdG9yIGluc3RhbmNlIGFuZCB0aGUga2V5CiAgICAgIGV2ZW50LiBUaGlzIGtleSBldmVudCBpcyBwcmV0dHkgbXVjaCB0aGUgcmF3IGtleSBldmVudCwgZXhjZXB0CiAgICAgIHRoYXQgYSA8Y29kZT5zdG9wKCk8L2NvZGU+IG1ldGhvZCBpcyBhbHdheXMgYWRkZWQgdG8gaXQuIFlvdQogICAgICBjb3VsZCBmZWVkIGl0IHRvLCBmb3IgZXhhbXBsZSwgPGNvZGU+alF1ZXJ5LkV2ZW50PC9jb2RlPiB0bwogICAgICBmdXJ0aGVyIG5vcm1hbGl6ZSBpdC48YnI+VGhpcyBmdW5jdGlvbiBjYW4gaW5zcGVjdCB0aGUga2V5CiAgICAgIGV2ZW50LCBhbmQgaGFuZGxlIGl0IGlmIGl0IHdhbnRzIHRvLiBJdCBtYXkgcmV0dXJuIHRydWUgdG8gdGVsbAogICAgICBDb2RlTWlycm9yIHRvIGlnbm9yZSB0aGUgZXZlbnQuIEJlIHdhcnkgdGhhdCwgb24gc29tZSBicm93c2VycywKICAgICAgc3RvcHBpbmcgYSA8Y29kZT5rZXlkb3duPC9jb2RlPiBkb2VzIG5vdCBzdG9wCiAgICAgIHRoZSA8Y29kZT5rZXlwcmVzczwvY29kZT4gZnJvbSBmaXJpbmcsIHdoZXJlYXMgb24gb3RoZXJzIGl0CiAgICAgIGRvZXMuIElmIHlvdSByZXNwb25kIHRvIGFuIGV2ZW50LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGluc3BlY3QKICAgICAgaXRzIDxjb2RlPnR5cGU8L2NvZGU+IHByb3BlcnR5IGFuZCBvbmx5IGRvIHNvbWV0aGluZyB3aGVuIGl0CiAgICAgIGlzIDxjb2RlPmtleWRvd248L2NvZGU+IChvciA8Y29kZT5rZXlwcmVzczwvY29kZT4gZm9yIGFjdGlvbnMKICAgICAgdGhhdCBuZWVkIGNoYXJhY3RlciBkYXRhKS48L2RkPgogICAgPC9kbD4KCiAgICA8aDIgaWQ9InN0eWxpbmciPkN1c3RvbWl6ZWQgU3R5bGluZzwvaDI+CgogICAgPHA+VXAgdG8gYSBjZXJ0YWluIGV4dGVudCwgQ29kZU1pcnJvcidzIGxvb2sgY2FuIGJlIGNoYW5nZWQgYnkKICAgIG1vZGlmeWluZyBzdHlsZSBzaGVldCBmaWxlcy4gVGhlIHN0eWxlIHNoZWV0cyBzdXBwbGllZCBieSBtb2RlcwogICAgc2ltcGx5IHByb3ZpZGUgdGhlIGNvbG9ycyBmb3IgdGhhdCBtb2RlLCBhbmQgY2FuIGJlIGFkYXB0ZWQgaW4gYQogICAgdmVyeSBzdHJhaWdodGZvcndhcmQgd2F5LiBUbyBzdHlsZSB0aGUgZWRpdG9yIGl0c2VsZiwgaXQgaXMKICAgIHBvc3NpYmxlIHRvIGFsdGVyIG9yIG92ZXJyaWRlIHRoZSBzdHlsZXMgZGVmaW5lZAogICAgaW4gPGEgaHJlZj0ibGliL2NvZGVtaXJyb3IuY3NzIj48Y29kZT5jb2RlbWlycm9yLmNzczwvY29kZT48L2E+LjwvcD4KCiAgICA8cD5Tb21lIGNhcmUgbXVzdCBiZSB0YWtlbiB0aGVyZSwgc2luY2UgYSBsb3Qgb2YgdGhlIHJ1bGVzIGluIHRoaXMKICAgIGZpbGUgYXJlIG5lY2Vzc2FyeSB0byBoYXZlIENvZGVNaXJyb3IgZnVuY3Rpb24gcHJvcGVybHkuIEFkanVzdGluZwogICAgY29sb3JzIHNob3VsZCBiZSBzYWZlLCBvZiBjb3Vyc2UsIGFuZCB3aXRoIHNvbWUgY2FyZSBhIGxvdCBvZgogICAgb3RoZXIgdGhpbmdzIGNhbiBiZSBjaGFuZ2VkIGFzIHdlbGwuIFRoZSBDU1MgY2xhc3NlcyBkZWZpbmVkIGluCiAgICB0aGlzIGZpbGUgc2VydmUgdGhlIGZvbGxvd2luZyByb2xlczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3IiPjxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBvdXRlciBlbGVtZW50IG9mIHRoZSBlZGl0b3IuIFRoaXMgc2hvdWxkIGJlIHVzZWQgZm9yCiAgICAgIGJvcmRlcnMgYW5kIHBvc2l0aW9uaW5nLiBDYW4gYWxzbyBiZSB1c2VkIHRvIHNldCBzdHlsZXMgdGhhdAogICAgICBzaG91bGQgaG9sZCBmb3IgZXZlcnl0aGluZyBpbnNpZGUgdGhlIGVkaXRvciAoc3VjaCBhcyBmb250CiAgICAgIGFuZCBmb250IHNpemUpLCBvciB0byBzZXQgYSBiYWNrZ3JvdW5kLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3Jfc2Nyb2xsIj48Y29kZT5Db2RlTWlycm9yLXNjcm9sbDwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGVkaXRvciBzY3JvbGxzICg8Y29kZT5vdmVyZmxvdzoKICAgICAgYXV0bzwvY29kZT4gKyBmaXhlZCBoZWlnaHQpLiBCeSBkZWZhdWx0LCBpdCBkb2VzLiBHaXZpbmcKICAgICAgdGhpcyA8Y29kZT5oZWlnaHQ6IGF1dG87IG92ZXJmbG93OiB2aXNpYmxlOzwvY29kZT4gd2lsbCBjYXVzZQogICAgICB0aGUgZWRpdG9yIHRvIHJlc2l6ZSB0byBmaXQgaXRzIGNvbnRlbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9mb2N1c2VkIj48Y29kZT5Db2RlTWlycm9yLWZvY3VzZWQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW5ldmVyIHRoZSBlZGl0b3IgaXMgZm9jdXNlZCwgdGhlIHRvcCBlbGVtZW50IGdldHMgdGhpcwogICAgICBjbGFzcy4gVGhpcyBpcyB1c2VkIHRvIGhpZGUgdGhlIGN1cnNvciBhbmQgZ2l2ZSB0aGUgc2VsZWN0aW9uIGEKICAgICAgZGlmZmVyZW50IGNvbG9yIHdoZW4gdGhlIGVkaXRvciBpcyBub3QgZm9jdXNlZC48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX2d1dHRlciI+PGNvZGU+Q29kZU1pcnJvci1ndXR0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlVzZSB0aGlzIGZvciBnaXZpbmcgYSBiYWNrZ3JvdW5kIG9yIGEgYm9yZGVyIHRvIHRoZSBlZGl0b3IKICAgICAgZ3V0dGVyLiBEb24ndCBzZXQgYW55IHBhZGRpbmcgaGVyZSwKICAgICAgdXNlIDxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQ8L2NvZGU+IGZvciB0aGF0LiBCeSBkZWZhdWx0LAogICAgICB0aGUgZ3V0dGVyIGlzICdmbHVpZCcsIG1lYW5pbmcgaXQgd2lsbCBhZGp1c3QgaXRzIHdpZHRoIHRvIHRoZQogICAgICBtYXhpbXVtIGxpbmUgbnVtYmVyIG9yIGxpbmUgbWFya2VyIHdpZHRoLiBZb3UgY2FuIGFsc28gc2V0IGEKICAgICAgZml4ZWQgd2lkdGggaWYgeW91IHdhbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9ndXR0ZXJfdGV4dCI+PGNvZGU+Q29kZU1pcnJvci1ndXR0ZXItdGV4dDwvY29kZT48L2R0PgogICAgICA8ZGQ+VXNlZCB0byBzdHlsZSB0aGUgYWN0dWFsIGxpbmUgbnVtYmVycy4gRm9yIHRoZSBudW1iZXJzIHRvCiAgICAgIGxpbmUgdXAsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBmb250IGluIHRoZSBndXR0ZXIgaXMgdGhlCiAgICAgIHNhbWUgYXMgdGhlIG9uZSBpbiB0aGUgcmVzdCBvZiB0aGUgZWRpdG9yLCBzbyB5b3Ugc2hvdWxkCiAgICAgIHByb2JhYmx5IG9ubHkgc2V0IGZvbnQgc3R5bGUgYW5kIHNpemUgaW4KICAgICAgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGNsYXNzLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfbGluZXMiPjxjb2RlPkNvZGVNaXJyb3ItbGluZXM8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSB2aXNpYmxlIGxpbmVzLiBJZiB0aGlzIGhhcyB2ZXJ0aWNhbAogICAgICBwYWRkaW5nLCA8Y29kZT5Db2RlTWlycm9yLWd1dHRlcjwvY29kZT4gc2hvdWxkIGhhdmUgdGhlIHNhbWUKICAgICAgcGFkZGluZy48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX2N1cnNvciI+PGNvZGU+Q29kZU1pcnJvci1jdXJzb3I8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBjdXJzb3IgaXMgYSBibG9jayBlbGVtZW50IHRoYXQgaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkLgogICAgICBZb3UgY2FuIG1ha2UgaXQgbG9vayB3aGljaGV2ZXIgd2F5IHlvdSB3YW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3Jfc2VsZWN0ZWQiPjxjb2RlPkNvZGVNaXJyb3Itc2VsZWN0ZWQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBzZWxlY3Rpb24gaXMgcmVwcmVzZW50ZWQgYnkgPGNvZGU+c3BhbjwvY29kZT4gZWxlbWVudHMKICAgICAgd2l0aCB0aGlzIGNsYXNzLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfbWF0Y2hpbmdicmFja2V0Ij48Y29kZT5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldDwvY29kZT4sCiAgICAgICAgPGNvZGU+Q29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZXNlIGFyZSB1c2VkIHRvIHN0eWxlIG1hdGNoZWQgKG9yIHVubWF0Y2hlZCkgYnJhY2tldHMuPC9kZD4KICAgIDwvZGw+CgogICAgPHA+VGhlIGFjdHVhbCBsaW5lcywgYXMgd2VsbCBhcyB0aGUgY3Vyc29yLCBhcmUgcmVwcmVzZW50ZWQKICAgIGJ5IDxjb2RlPnByZTwvY29kZT4gZWxlbWVudHMuIEJ5IGRlZmF1bHQgbm8gdGV4dCBzdHlsaW5nIChzdWNoIGFzCiAgICBib2xkKSB0aGF0IG1pZ2h0IGNoYW5nZSBsaW5lIGhlaWdodCBpcyBhcHBsaWVkLiBJZiB5b3UgZG8gd2FudAogICAgc3VjaCBlZmZlY3RzLCB5b3UnbGwgaGF2ZSB0byBnaXZlIDxjb2RlPkNvZGVNaXJyb3IgcHJlPC9jb2RlPiBhCiAgICBmaXhlZCBoZWlnaHQuIEFsc28sIHlvdSBtdXN0IHN0aWxsIHRha2UgY2FyZSB0aGF0IGNoYXJhY3RlciB3aWR0aAogICAgaXMgY29uc3RhbnQuPC9wPgoKICAgIDxwPklmIHlvdXIgcGFnZSdzIHN0eWxlIHNoZWV0cyBkbyBmdW5reSB0aGluZ3MgdG8KICAgIGFsbCA8Y29kZT5kaXY8L2NvZGU+IG9yIDxjb2RlPnByZTwvY29kZT4gZWxlbWVudHMgKHlvdSBwcm9iYWJseQogICAgc2hvdWxkbid0IGRvIHRoYXQpLCB5b3UnbGwgaGF2ZSB0byBkZWZpbmUgcnVsZXMgdG8gY2FuY2VsIHRoZXNlCiAgICBlZmZlY3RzIG91dCBhZ2FpbiBmb3IgZWxlbWVudHMgdW5kZXIgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+CiAgICBjbGFzcy48L3A+CgogICAgPGgyIGlkPSJhcGkiPlByb2dyYW1taW5nIEFQSTwvaDI+CgogICAgPHA+QSBsb3Qgb2YgQ29kZU1pcnJvciBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgdGhyb3VnaCBpdHMgQVBJLgogICAgVGhpcyBoYXMgdGhlIGRpc2FkdmFudGFnZSB0aGF0IHlvdSBuZWVkIHRvIGRvIHdvcmsgdG8gZW5hYmxlIHRoZW0sCiAgICBhbmQgdGhlIGFkdmFudGFnZSB0aGF0IENvZGVNaXJyb3Igd2lsbCBmaXQgc2VhbWxlc3NseSBpbnRvIHlvdXIKICAgIGFwcGxpY2F0aW9uLjwvcD4KCiAgICA8cD5XaGVuZXZlciBwb2ludHMgaW4gdGhlIGRvY3VtZW50IGFyZSByZXByZXNlbnRlZCwgdGhlIEFQSSB1c2VzCiAgICBvYmplY3RzIHdpdGggPGNvZGU+bGluZTwvY29kZT4gYW5kIDxjb2RlPmNoPC9jb2RlPiBwcm9wZXJ0aWVzLgogICAgQm90aCBhcmUgemVyby1iYXNlZC4gQ29kZU1pcnJvciBtYWtlcyBzdXJlIHRvICdjbGlwJyBhbnkgcG9zaXRpb25zCiAgICBwYXNzZWQgYnkgY2xpZW50IGNvZGUgc28gdGhhdCB0aGV5IGZpdCBpbnNpZGUgdGhlIGRvY3VtZW50LCBzbyB5b3UKICAgIHNob3VsZG4ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBzYW5pdGl6aW5nIHlvdXIgY29vcmRpbmF0ZXMuIElmIHlvdQogICAgZ2l2ZSA8Y29kZT5jaDwvY29kZT4gYSB2YWx1ZSBvZiA8Y29kZT5udWxsPC9jb2RlPiwgb3IgZG9uJ3QKICAgIHNwZWNpZnkgaXQsIGl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQKICAgIGxpbmUuPC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJnZXRWYWx1ZSI+PGNvZGU+Z2V0VmFsdWUoKSDihpIgc3RyaW5nPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5HZXQgdGhlIGN1cnJlbnQgZWRpdG9yIGNvbnRlbnQuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRWYWx1ZSI+PGNvZGU+c2V0VmFsdWUoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBlZGl0b3IgY29udGVudC48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRTZWxlY3Rpb24iPjxjb2RlPmdldFNlbGVjdGlvbigpIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvZGUuPC9kZD4KICAgICAgPGR0IGlkPSJyZXBsYWNlU2VsZWN0aW9uIj48Y29kZT5yZXBsYWNlU2VsZWN0aW9uKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlcGxhY2UgdGhlIHNlbGVjdGlvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuPC9kZD4KCiAgICAgIDxkdCBpZD0iZm9jdXMiPjxjb2RlPmZvY3VzKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdpdmUgdGhlIGVkaXRvciBmb2N1cy48L2RkPgoKICAgICAgPGR0IGlkPSJzZXRPcHRpb24iPjxjb2RlPnNldE9wdGlvbihvcHRpb24sIHZhbHVlKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBlZGl0b3IuIDxjb2RlPm9wdGlvbjwvY29kZT4KICAgICAgc2hvdWxkIHRoZSBuYW1lIG9mIGFuIDxhIGhyZWY9IiNjb25maWciPm9wdGlvbjwvYT4sCiAgICAgIGFuZCA8Y29kZT52YWx1ZTwvY29kZT4gc2hvdWxkIGJlIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQKICAgICAgb3B0aW9uLjwvZGQ+CiAgICAgIDxkdCBpZD0iZ2V0T3B0aW9uIj48Y29kZT5nZXRPcHRpb24ob3B0aW9uKSDihpIgdmFsdWU8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gb3B0aW9uIGZvciB0aGlzCiAgICAgIGVkaXRvciBpbnN0YW5jZS48L2RkPgoKICAgICAgPGR0IGlkPSJjdXJzb3JDb29yZHMiPjxjb2RlPmN1cnNvckNvb3JkcyhzdGFydCkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyBhbiA8Y29kZT57eCwgeSwgeUJvdH08L2NvZGU+IG9iamVjdCBjb250YWluaW5nIHRoZQogICAgICBjb29yZGluYXRlcyBvZiB0aGUgY3Vyc29yIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlCiAgICAgIHBhZ2UuIDxjb2RlPnlCb3Q8L2NvZGU+IGlzIHRoZSBjb29yZGluYXRlIG9mIHRoZSBib3R0b20gb2YgdGhlCiAgICAgIGN1cnNvci4gPGNvZGU+c3RhcnQ8L2NvZGU+IGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgeW91CiAgICAgIHdhbnQgdGhlIHN0YXJ0IG9yIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbi48L2RkPgogICAgICA8ZHQgaWQ9ImNoYXJDb29yZHMiPjxjb2RlPmNoYXJDb29yZHMocG9zKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5MaWtlIDxjb2RlPmN1cnNvckNvb3JkczwvY29kZT4sIGJ1dCByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZgogICAgICBhbiBhcmJpdHJhcnkgY2hhcmFjdGVycy4gPGNvZGU+cG9zPC9jb2RlPiBzaG91bGQgYmUKICAgICAgYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QuPC9kZD4KICAgICAgPGR0IGlkPSJjb29yZHNDaGFyIj48Y29kZT5jb29yZHNDaGFyKG9iamVjdCkg4oaSIHBvczwvY29kZT48L2R0PgogICAgICA8ZGQ+R2l2ZW4gYW4gPGNvZGU+e3gsIHl9PC9jb2RlPiBvYmplY3QgKGluIHBhZ2UgY29vcmRpbmF0ZXMpLAogICAgICByZXR1cm5zIHRoZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBwb3NpdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvCiAgICAgIGl0LjwvZGQ+CgogICAgICA8ZHQgaWQ9InVuZG8iPjxjb2RlPnVuZG8oKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VW5kbyBvbmUgZWRpdCAoaWYgYW55IHVuZG8gZXZlbnRzIGFyZSBzdG9yZWQpLjwvZGQ+CiAgICAgIDxkdCBpZD0icmVkbyI+PGNvZGU+cmVkbygpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZWRvIG9uZSB1bmRvbmUgZWRpdC48L2RkPgogICAgICA8ZHQgaWQ9Imhpc3RvcnlTaXplIj48Y29kZT5oaXN0b3J5U2l6ZSgpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgYW4gb2JqZWN0IHdpdGggPGNvZGU+e3VuZG8sIHJlZG99PC9jb2RlPiBwcm9wZXJ0aWVzLAogICAgICBib3RoIG9mIHdoaWNoIGhvbGQgaW50ZWdlcnMsIGluZGljYXRpbmcgdGhlIGFtb3VudCBvZiBzdG9yZWQKICAgICAgdW5kbyBhbmQgcmVkbyBvcGVyYXRpb25zLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImluZGVudExpbmUiPjxjb2RlPmluZGVudExpbmUobGluZSwgZGlyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVzZXQgdGhlIGdpdmVuIGxpbmUncyBpbmRlbnRhdGlvbiB0byB0aGUgaW5kZW50YXRpb24KICAgICAgcHJlc2NyaWJlZCBieSB0aGUgbW9kZS4gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBnaXZlbiwKICAgICAgaW5kZW50YXRpb24gd2lsbCBiZSBpbmNyZWFzZWQgKGlmIDxjb2RlPmRpcjwvY29kZT4gaXMgdHJ1ZSkgb3IKICAgICAgZGVjcmVhc2VkIChpZiBmYWxzZSkgYnkgYW4gPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij5pbmRlbnQKICAgICAgdW5pdDwvYT4gaW5zdGVhZC48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRTZWFyY2hDdXJzb3IiPjxjb2RlPmdldFNlYXJjaEN1cnNvcihxdWVyeSwgc3RhcnQsIGNhc2VGb2xkKSDihpIgY3Vyc29yPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2VkIHRvIGltcGxlbWVudCBzZWFyY2gvcmVwbGFjZQogICAgICBmdW5jdGlvbmFsaXR5LiA8Y29kZT5xdWVyeTwvY29kZT4gY2FuIGJlIGEgcmVndWxhciBleHByZXNzaW9uIG9yCiAgICAgIGEgc3RyaW5nIChvbmx5IHN0cmluZ3Mgd2lsbCBtYXRjaCBhY3Jvc3MgbGluZXPigJRpZiB0aGV5IGNvbnRhaW4KICAgICAgbmV3bGluZXMpLiA8Y29kZT5zdGFydDwvY29kZT4gcHJvdmlkZXMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mCiAgICAgIHRoZSBzZWFyY2guIEl0IGNhbiBiZSBhIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdCwgb3IgY2FuCiAgICAgIGJlIGxlZnQgb2ZmIHRvIGRlZmF1bHQgdG8gdGhlIHN0YXJ0IG9mIHRoZQogICAgICBkb2N1bWVudC4gPGNvZGU+Y2FzZUZvbGQ8L2NvZGU+IGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBtYXRjaGluZyBhCiAgICAgIHN0cmluZy4gSXQgd2lsbCBjYXVzZSB0aGUgc2VhcmNoIHRvIGJlIGNhc2UtaW5zZW5zaXRpdmUuIEEKICAgICAgc2VhcmNoIGN1cnNvciBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogICAgICAgIDxkbD4KICAgICAgICAgIDxkdD48Y29kZT5maW5kTmV4dCgpLCBmaW5kUHJldmlvdXMoKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICAgICAgPGRkPlNlYXJjaCBmb3J3YXJkIG9yIGJhY2t3YXJkIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24uCiAgICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIGEgbWF0Y2ggd2FzIGZvdW5kLiBJZgogICAgICAgICAgbWF0Y2hpbmcgYSByZWd1bGFyIGV4cHJlc3Npb24sIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUKICAgICAgICAgIGFycmF5IHJldHVybmVkIGJ5IHRoZSA8Y29kZT5tYXRjaDwvY29kZT4gbWV0aG9kLCBpbiBjYXNlIHlvdQogICAgICAgICAgd2FudCB0byBleHRyYWN0IG1hdGNoZWQgZ3JvdXBzLjwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+ZnJvbSgpLCB0bygpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgICAgIDxkZD5UaGVzZSBhcmUgb25seSB2YWxpZCB3aGVuIHRoZSBsYXN0IGNhbGwKICAgICAgICAgIHRvIDxjb2RlPmZpbmROZXh0PC9jb2RlPiBvciA8Y29kZT5maW5kUHJldmlvdXM8L2NvZGU+IGRpZAogICAgICAgICAgbm90IHJldHVybiBmYWxzZS4gVGhleSB3aWxsIHJldHVybiA8Y29kZT57bGluZSwgY2h9PC9jb2RlPgogICAgICAgICAgb2JqZWN0cyBwb2ludGluZyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgbWF0Y2guPC9kZD4KICAgICAgICAgIDxkdD48Y29kZT5yZXBsYWNlKHRleHQpPC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+UmVwbGFjZXMgdGhlIGN1cnJlbnRseSBmb3VuZCBtYXRjaCB3aXRoIHRoZSBnaXZlbiB0ZXh0CiAgICAgICAgICBhbmQgYWRqdXN0cyB0aGUgY3Vyc29yIHBvc2l0aW9uIHRvIHJlZmxlY3QgdGhlCiAgICAgICAgICByZXBsYWNlbWVudC48L2RkPgogICAgICAgIDwvZGw+PC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0VG9rZW5BdCI+PGNvZGU+Z2V0VG9rZW5BdChwb3MpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHJpZXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdG9rZW4gdGhlIGN1cnJlbnQgbW9kZSBmb3VuZAogICAgICBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gKGEgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0KS4gVGhlCiAgICAgIHJldHVybmVkIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogICAgICA8ZGw+CiAgICAgICAgPGR0Pjxjb2RlPnN0YXJ0PC9jb2RlPjwvZHQ+PGRkPlRoZSBjaGFyYWN0ZXIgKG9uIHRoZSBnaXZlbiBsaW5lKSBhdCB3aGljaCB0aGUgdG9rZW4gc3RhcnRzLjwvZGQ+CiAgICAgICAgPGR0Pjxjb2RlPmVuZDwvY29kZT48L2R0PjxkZD5UaGUgY2hhcmFjdGVyIGF0IHdoaWNoIHRoZSB0b2tlbiBlbmRzLjwvZGQ+CiAgICAgICAgPGR0Pjxjb2RlPnN0cmluZzwvY29kZT48L2R0PjxkZD5UaGUgdG9rZW4ncyBzdHJpbmcuPC9kZD4KICAgICAgICA8ZHQ+PGNvZGU+Y2xhc3NOYW1lPC9jb2RlPjwvZHQ+PGRkPlRoZSBjbGFzcyB0aGUgbW9kZSBhc3NpZ25lZAogICAgICAgIHRvIHRoZSB0b2tlbi4gKENhbiBiZSBudWxsIHdoZW4gbm8gY2xhc3Mgd2FzIGFzc2lnbmVkLik8L2RkPgogICAgICAgIDxkdD48Y29kZT5zdGF0ZTwvY29kZT48L2R0PjxkZD5UaGUgbW9kZSdzIHN0YXRlIGF0IHRoZSBlbmQgb2YgdGhpcyB0b2tlbi48L2RkPgogICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9Im1hcmtUZXh0Ij48Y29kZT5tYXJrVGV4dChmcm9tLCB0bywgY2xhc3NOYW1lKSDihpIgZnVuY3Rpb248L2NvZGU+PC9kdD4KICAgICAgPGRkPkNhbiBiZSB1c2VkIHRvIG1hcmsgYSByYW5nZSBvZiB0ZXh0IHdpdGggYSBzcGVjaWZpYyBDU1MKICAgICAgY2xhc3MgbmFtZS4gPGNvZGU+ZnJvbTwvY29kZT4gYW5kIDxjb2RlPnRvPC9jb2RlPiBzaG91bGQKICAgICAgYmUgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0cy4gVGhlIG1ldGhvZCB3aWxsIHJldHVybiBhCiAgICAgIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCB0byByZW1vdmUgdGhlIG1hcmtpbmcuPC9kZD4KCiAgICAgIDxkdCBpZD0ic2V0TWFya2VyIj48Y29kZT5zZXRNYXJrZXIobGluZSwgdGV4dCwgY2xhc3NOYW1lKSDihpIgbGluZUhhbmRsZTwvY29kZT48L2R0PgogICAgICA8ZGQ+QWRkIGEgZ3V0dGVyIG1hcmtlciBmb3IgdGhlIGdpdmVuIGxpbmUuIEd1dHRlciBtYXJrZXJzIGFyZQogICAgICBzaG93biBpbiB0aGUgbGluZS1udW1iZXIgYXJlYSAoaW5zdGVhZCBvZiB0aGUgbnVtYmVyIGZvciB0aGlzCiAgICAgIGxpbmUpLiBCb3RoIDxjb2RlPnRleHQ8L2NvZGU+IGFuZCA8Y29kZT5jbGFzc05hbWU8L2NvZGU+IGFyZQogICAgICBvcHRpb25hbC4gU2V0dGluZyA8Y29kZT50ZXh0PC9jb2RlPiB0byBhIFVuaWNvZGUgY2hhcmFjdGVyIGxpa2UKICAgICAg4pePIHRlbmRzIHRvIGdpdmUgYSBuaWNlIGVmZmVjdC4gVG8gcHV0IGEgcGljdHVyZSBpbiB0aGUgZ3V0dGVyLAogICAgICBzZXQgPGNvZGU+dGV4dDwvY29kZT4gdG8gYSBzcGFjZSBhbmQgPGNvZGU+Y2xhc3NOYW1lPC9jb2RlPiB0bwogICAgICBzb21ldGhpbmcgdGhhdCBzZXRzIGEgYmFja2dyb3VuZCBpbWFnZS4gSWYgeW91CiAgICAgIHNwZWNpZnkgPGNvZGU+dGV4dDwvY29kZT4sIHRoZSBnaXZlbiB0ZXh0ICh3aGljaCBtYXkgY29udGFpbgogICAgICBIVE1MKSB3aWxsLCBieSBkZWZhdWx0LCByZXBsYWNlIHRoZSBsaW5lIG51bWJlciBmb3IgdGhhdCBsaW5lLgogICAgICBJZiB0aGlzIGlzIG5vdCB3aGF0IHlvdSB3YW50LCB5b3UgY2FuIGluY2x1ZGUgdGhlCiAgICAgIHN0cmluZyA8Y29kZT4lTiU8L2NvZGU+IGluIHRoZSB0ZXh0LCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5CiAgICAgIHRoZSBsaW5lIG51bWJlci48L2RkPgogICAgICA8ZHQgaWQ9ImNsZWFyTWFya2VyIj48Y29kZT5jbGVhck1hcmtlcihsaW5lKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2xlYXJzIGEgbWFya2VyIGNyZWF0ZWQKICAgICAgd2l0aCA8Y29kZT5zZXRNYXJrZXI8L2NvZGU+LiA8Y29kZT5saW5lPC9jb2RlPiBjYW4gYmUgZWl0aGVyIGEKICAgICAgbnVtYmVyIG9yIGEgaGFuZGxlIHJldHVybmVkIGJ5IDxjb2RlPnNldE1hcmtlcjwvY29kZT4gKHNpbmNlIGEKICAgICAgbnVtYmVyIG1heSBub3cgcmVmZXIgdG8gYSBkaWZmZXJlbnQgbGluZSBpZiBzb21ldGhpbmcgd2FzIGFkZGVkCiAgICAgIG9yIGRlbGV0ZWQpLjwvZGQ+CiAgICAgIDxkdCBpZD0ic2V0TGluZUNsYXNzIj48Y29kZT5zZXRMaW5lQ2xhc3MobGluZSwgY2xhc3NOYW1lKSDihpIgbGluZUhhbmRsZTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IGEgQ1NTIGNsYXNzIG5hbWUgZm9yIHRoZSBnaXZlbiBsaW5lLiA8Y29kZT5saW5lPC9jb2RlPgogICAgICBjYW4gYmUgYSBudW1iZXIgb3IgYSBsaW5lIGhhbmRsZSAoYXMgcmV0dXJuZWQKICAgICAgYnkgPGNvZGU+c2V0TWFya2VyPC9jb2RlPiBvciB0aGlzIGZ1bmN0aW9uKS4KICAgICAgUGFzcyA8Y29kZT5udWxsPC9jb2RlPiB0byBjbGVhciB0aGUgY2xhc3MgZm9yIGEgbGluZS48L2RkPgoKICAgICAgPGR0IGlkPSJsaW5lSW5mbyI+PGNvZGU+bGluZUluZm8obGluZSkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbGluZSBudW1iZXIsIHRleHQgY29udGVudCwgYW5kIG1hcmtlciBzdGF0dXMgb2YKICAgICAgdGhlIGdpdmVuIGxpbmUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBudW1iZXIgb3IgYSBoYW5kbGUKICAgICAgcmV0dXJuZWQgYnkgPGNvZGU+c2V0TWFya2VyPC9jb2RlPi4gVGhlIHJldHVybmVkIG9iamVjdCBoYXMgdGhlCiAgICAgIHN0cnVjdHVyZSA8Y29kZT57bGluZSwgdGV4dCwgbWFya2VyVGV4dCwgbWFya2VyQ2xhc3N9PC9jb2RlPi48L2RkPgoKICAgICAgPGR0IGlkPSJhZGRXaWRnZXQiPjxjb2RlPmFkZFdpZGdldChwb3MsIG5vZGUsIHNjcm9sbEludG9WaWV3KTwvY29kZT48L2R0PgogICAgICA8ZGQ+UHV0cyA8Y29kZT5ub2RlPC9jb2RlPiwgd2hpY2ggc2hvdWxkIGJlIGFuIGFic29sdXRlbHkKICAgICAgcG9zaXRpb25lZCBET00gbm9kZSwgaW50byB0aGUgZWRpdG9yLCBwb3NpdGlvbmVkIHJpZ2h0IGJlbG93IHRoZQogICAgICBnaXZlbiA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBwb3NpdGlvbi4KICAgICAgV2hlbiA8Y29kZT5zY3JvbGxJbnRvVmlldzwvY29kZT4gaXMgdHJ1ZSwgdGhlIGVkaXRvciB3aWxsIGVuc3VyZQogICAgICB0aGF0IHRoZSBlbnRpcmUgbm9kZSBpcyB2aXNpYmxlIChpZiBwb3NzaWJsZSkuIFRvIHJlbW92ZSB0aGUKICAgICAgd2lkZ2V0IGFnYWluLCBzaW1wbHkgdXNlIERPTSBtZXRob2RzIChtb3ZlIGl0IHNvbWV3aGVyZSBlbHNlLCBvcgogICAgICBjYWxsIDxjb2RlPnJlbW92ZUNoaWxkPC9jb2RlPiBvbiBpdHMgcGFyZW50KS48L2RkPgoKICAgICAgPGR0IGlkPSJtYXRjaEJyYWNrZXRzIj48Y29kZT5tYXRjaEJyYWNrZXRzKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkZvcmNlIG1hdGNoaW5nLWJyYWNrZXQtaGlnaGxpZ2h0aW5nIHRvIGhhcHBlbi48L2RkPgoKICAgICAgPGR0IGlkPSJsaW5lQ291bnQiPjxjb2RlPmxpbmVDb3VudCgpIOKGkiBudW1iZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBlZGl0b3IuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0Q3Vyc29yIj48Y29kZT5nZXRDdXJzb3Ioc3RhcnQpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPjxjb2RlPnN0YXJ0PC9jb2RlPiBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzdGFydAogICAgICBvciB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gbXVzdCBiZSByZXRyaWV2ZWQuIElmIGl0IGlzIG5vdAogICAgICBnaXZlbiwgdGhlIGN1cnJlbnQgY3Vyc29yIHBvcywgaS5lLiB0aGUgc2lkZSBvZiB0aGUgc2VsZWN0aW9uCiAgICAgIHRoYXQgd291bGQgbW92ZSBpZiB5b3UgcHJlc3NlZCBhbiBhcnJvdyBrZXksIGlzIGNob3Nlbi4KICAgICAgQSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC48L2RkPgogICAgICA8ZHQgaWQ9InNvbWV0aGluZ1NlbGVjdGVkIj48Y29kZT5zb21ldGhpbmdTZWxlY3RlZCgpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm4gdHJ1ZSBpZiBhbnkgdGV4dCBpcyBzZWxlY3RlZC48L2RkPgogICAgICA8ZHQgaWQ9InNldEN1cnNvciI+PGNvZGU+c2V0Q3Vyc29yKHBvcyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlNldCB0aGUgY3Vyc29yIHBvc2l0aW9uLiBZb3UgY2FuIGVpdGhlciBwYXNzIGEKICAgICAgc2luZ2xlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdCwgb3IgdGhlIGxpbmUgYW5kIHRoZQogICAgICBjaGFyYWN0ZXIgYXMgdHdvIHNlcGFyYXRlIHBhcmFtZXRlcnMuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRTZWxlY3Rpb24iPjxjb2RlPnNldFNlbGVjdGlvbihzdGFydCwgZW5kKTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBzZWxlY3Rpb24gcmFuZ2UuIDxjb2RlPnN0YXJ0PC9jb2RlPgogICAgICBhbmQgPGNvZGU+ZW5kPC9jb2RlPiBzaG91bGQgYmUgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0cy48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRMaW5lIj48Y29kZT5nZXRMaW5lKG4pIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgY29udGVudCBvZiBsaW5lIDxjb2RlPm48L2NvZGU+LjwvZGQ+CiAgICAgIDxkdCBpZD0ic2V0TGluZSI+PGNvZGU+c2V0TGluZShuLCB0ZXh0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBjb250ZW50IG9mIGxpbmUgPGNvZGU+bjwvY29kZT4uPC9kZD4KICAgICAgPGR0IGlkPSJyZW1vdmVMaW5lIj48Y29kZT5yZW1vdmVMaW5lKG4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZW1vdmUgdGhlIGdpdmVuIGxpbmUgZnJvbSB0aGUgZG9jdW1lbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0UmFuZ2UiPjxjb2RlPmdldFJhbmdlKGZyb20sIHRvKSDihpIgc3RyaW5nPC9jb2RlPjwvdGQ+CiAgICAgIDxkZD5HZXQgdGhlIHRleHQgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9pbnRzIGluIHRoZSBlZGl0b3IsIHdoaWNoCiAgICAgIHNob3VsZCBiZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3RzLjwvZGQ+CiAgICAgIDxkdCBpZD0icmVwbGFjZVJhbmdlIj48Y29kZT5yZXBsYWNlUmFuZ2Uoc3RyaW5nLCBmcm9tLCB0byk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlcGxhY2UgdGhlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGJldHdlZW4gPGNvZGU+ZnJvbTwvY29kZT4KICAgICAgYW5kIDxjb2RlPnRvPC9jb2RlPiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuIDxjb2RlPmZyb208L2NvZGU+CiAgICAgIGFuZCA8Y29kZT50bzwvY29kZT4gbXVzdCBiZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPgogICAgICBvYmplY3RzLiA8Y29kZT50bzwvY29kZT4gY2FuIGJlIGxlZnQgb2ZmIHRvIHNpbXBseSBpbnNlcnQgdGhlCiAgICAgIHN0cmluZyBhdCBwb3NpdGlvbiA8Y29kZT5mcm9tPC9jb2RlPi48L2RkPgogICAgPC9kbD4KCiAgICA8cD5UaGUgZm9sbG93aW5nIGFyZSBtb3JlIGxvdy1sZXZlbCBtZXRob2RzOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdCBpZD0ib3BlcmF0aW9uIj48Y29kZT5vcGVyYXRpb24oZnVuYykg4oaSIHJlc3VsdDwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29kZU1pcnJvciBpbnRlcm5hbGx5IGJ1ZmZlcnMgY2hhbmdlcyBhbmQgb25seSB1cGRhdGVzIGl0cwogICAgICBET00gc3RydWN0dXJlIGFmdGVyIGl0IGhhcyBmaW5pc2hlZCBwZXJmb3JtaW5nIHNvbWUgb3BlcmF0aW9uLgogICAgICBJZiB5b3UgbmVlZCB0byBwZXJmb3JtIGEgbG90IG9mIG9wZXJhdGlvbnMgb24gYSBDb2RlTWlycm9yCiAgICAgIGluc3RhbmNlLCB5b3UgY2FuIGNhbGwgdGhpcyBtZXRob2Qgd2l0aCBhIGZ1bmN0aW9uIGFyZ3VtZW50LiBJdAogICAgICB3aWxsIGNhbGwgdGhlIGZ1bmN0aW9uLCBidWZmZXJpbmcgdXAgYWxsIGNoYW5nZXMsIGFuZCBvbmx5IGRvaW5nCiAgICAgIHRoZSBleHBlbnNpdmUgdXBkYXRlIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLiBUaGlzIGNhbiBiZSBhCiAgICAgIGxvdCBmYXN0ZXIuIFRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIG1ldGhvZCB3aWxsIGJlIHRoZSByZXR1cm4KICAgICAgdmFsdWUgb2YgeW91ciBmdW5jdGlvbi48L2RkPgoKICAgICAgPGR0IGlkPSJyZWZyZXNoIj48Y29kZT5yZWZyZXNoKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPklmIHlvdXIgY29kZSBkb2VzIHNvbWV0aGluZyB0byBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIGVkaXRvcgogICAgICBlbGVtZW50ICh3aW5kb3cgcmVzaXplcyBhcmUgYWxyZWFkeSBsaXN0ZW5lZCBmb3IpLCBvciB1bmhpZGVzCiAgICAgIGl0LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGZvbGxvdyB1cCBieSBjYWxsaW5nIHRoaXMgbWV0aG9kIHRvCiAgICAgIGVuc3VyZSBDb2RlTWlycm9yIGlzIHN0aWxsIGxvb2tpbmcgYXMgaW50ZW5kZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0SW5wdXRGaWVsZCI+PGNvZGU+Z2V0SW5wdXRGaWVsZCgpIOKGkiB0ZXh0YXJlYTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgaGlkZW4gdGV4dGFyZWEgdXNlZCB0byByZWFkIGlucHV0LjwvZGQ+CiAgICAgIDxkdCBpZD0iZ2V0V3JhcHBlckVsZW1lbnQiPjxjb2RlPmdldFdyYXBwZXJFbGVtZW50KCkg4oaSIG5vZGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIERPTSBub2RlIHRoYXQgcmVwcmVzZW50cyB0aGUgZWRpdG9yLiBSZW1vdmUgdGhpcwogICAgICBmcm9tIHlvdXIgdHJlZSB0byBkZWxldGUgYW4gZWRpdG9yIGluc3RhbmNlLjwvZGQ+CiAgICAgIDxkdCBpZD0iZ2V0U2Nyb2xsZXJFbGVtZW50Ij48Y29kZT5nZXRTY3JvbGxlckVsZW1lbnQoKSDihpIgbm9kZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgRE9NIG5vZGUgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHNpemluZyBhbmQKICAgICAgdGhlIHNjcm9sbGluZyBvZiB0aGUgZWRpdG9yLiBZb3UgY2FuIGNoYW5nZQogICAgICB0aGUgPGNvZGU+aGVpZ2h0PC9jb2RlPiBhbmQgPGNvZGU+d2lkdGg8L2NvZGU+IHN0eWxlcyBvZiB0aGlzCiAgICAgIGVsZW1lbnQgdG8gcmVzaXplIGFuIGVkaXRvci4gKFlvdSBtaWdodCBoYXZlIHRvIGNhbGwKICAgICAgdGhlIDxhIGhyZWY9IiNyZWZyZXNoIj48Y29kZT5yZWZyZXNoPC9jb2RlPjwvYT4gbWV0aG9kCiAgICAgIGFmdGVyd2FyZHMuKTwvZGQ+CiAgICAgIDxkdCBpZD0iZ2V0R3V0dGVyRWxlbWVudCI+PGNvZGU+Z2V0R3V0dGVyRWxlbWVudCgpIOKGkiBub2RlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5GZXRjaGVzIHRoZSBET00gbm9kZSB0aGF0IHJlcHJlc2VudHMgdGhlIGVkaXRvciBndXR0ZXIuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0U3RhdGVBZnRlciI+PGNvZGU+Z2V0U3RhdGVBZnRlcihsaW5lKSDihpIgc3RhdGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIG1vZGUncyBwYXJzZXIgc3RhdGUsIGlmIGFueSwgYXQgdGhlIGVuZCBvZiB0aGUKICAgICAgZ2l2ZW4gbGluZSBudW1iZXIuIElmIG5vIGxpbmUgbnVtYmVyIGlzIGdpdmVuLCB0aGUgc3RhdGUgYXQgdGhlCiAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQgaXMgcmV0dXJuZWQuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igc3RvcmluZwogICAgICBwYXJzaW5nIGVycm9ycyBpbiB0aGUgc3RhdGUsIG9yIGdldHRpbmcgb3RoZXIga2luZHMgb2YKICAgICAgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBmb3IgYSBsaW5lLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwIGlkPSJmcm9tVGV4dEFyZWEiPkZpbmFsbHksIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBvYmplY3QKICAgIGl0c2VsZiBoYXMgYSBtZXRob2QgPGNvZGU+ZnJvbVRleHRBcmVhPC9jb2RlPi4gVGhpcyB0YWtlcyBhCiAgICB0ZXh0YXJlYSBET00gbm9kZSBhcyBmaXJzdCBhcmd1bWVudCBhbmQgYW4gb3B0aW9uYWwgY29uZmlndXJhdGlvbgogICAgb2JqZWN0IGFzIHNlY29uZC4gSXQgd2lsbCByZXBsYWNlIHRoZSB0ZXh0YXJlYSB3aXRoIGEgQ29kZU1pcnJvcgogICAgaW5zdGFuY2UsIGFuZCB3aXJlIHVwIHRoZSBmb3JtIG9mIHRoYXQgdGV4dGFyZWEgKGlmIGFueSkgdG8gbWFrZQogICAgc3VyZSB0aGUgZWRpdG9yIGNvbnRlbnRzIGFyZSBwdXQgaW50byB0aGUgdGV4dGFyZWEgd2hlbiB0aGUgZm9ybQogICAgaXMgc3VibWl0dGVkLiBBIENvZGVNaXJyb3IgaW5zdGFuY2UgY3JlYXRlZCB0aGlzIHdheSBoYXMgdHdvCiAgICBhZGRpdGlvbmFsIG1ldGhvZHM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJzYXZlIj48Y29kZT5zYXZlKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNvcHkgdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvciBpbnRvIHRoZSB0ZXh0YXJlYS48L2RkPgoKICAgICAgPGR0IGlkPSJ0b1RleHRBcmVhIj48Y29kZT50b1RleHRBcmVhKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlbW92ZSB0aGUgZWRpdG9yLCBhbmQgcmVzdG9yZSB0aGUgb3JpZ2luYWwgdGV4dGFyZWEgKHdpdGgKICAgICAgdGhlIGVkaXRvcidzIGN1cnJlbnQgY29udGVudCkuPC9kZD4KICAgIDwvZGw+CgogICAgPHAgaWQ9ImRlZmluZUV4dGVuc2lvbiI+SWYgeW91IHdhbnQgZGVmaW5lIGV4dHJhIG1ldGhvZHMgaW4gdGVybXMKICAgIG9mIHRoZSBDb2RlTWlycm9yIEFQSSwgaXMgaXQgcG9zc2libGUgdG8KICAgIHVzZSA8Y29kZT5Db2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbihuYW1lLCB2YWx1ZSk8L2NvZGU+LiBUaGlzCiAgICB3aWxsIGNhdXNlIHRoZSBnaXZlbiB2YWx1ZSAodXN1YWxseSBhIG1ldGhvZCkgdG8gYmUgYWRkZWQgdG8gYWxsCiAgICBDb2RlTWlycm9yIGluc3RhbmNlcyBjcmVhdGVkIGZyb20gdGhlbiBvbi48L3A+CgogICAgPGgyIGlkPSJtb2RlYXBpIj5Xcml0aW5nIENvZGVNaXJyb3IgTW9kZXM8L2gyPgoKICAgIDxwPk1vZGVzIHR5cGljYWxseSBjb25zaXN0IG9mIGEgSmF2YVNjcmlwdCBmaWxlIGFuZCBhIENTUyBmaWxlLgogICAgVGhlIENTUyBmaWxlIChzZWUsIGZvcgogICAgZXhhbXBsZSA8YSBocmVmPSJtb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5jc3MiPjxjb2RlPmphdmFzY3JpcHQuY3NzPC9jb2RlPjwvYT4pCiAgICBkZWZpbmVzIHRoZSBjbGFzc2VzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN0eWxlIHRoZSBzeW50YWN0aWMKICAgIGVsZW1lbnRzIG9mIHRoZSBjb2RlLCBhbmQgdGhlIHNjcmlwdCBjb250YWlucyB0aGUgbG9naWMgdG8KICAgIGFjdHVhbGx5IGFzc2lnbiB0aGVzZSBjbGFzc2VzIHRvIHRoZSByaWdodCBwaWVjZXMgb2YgdGV4dC48L3A+CgogICAgPHA+WW91J2xsIHVzdWFsbHkgd2FudCB0byB1c2Ugc29tZSBraW5kIG9mIHByZWZpeCBmb3IgeW91ciBDU1MKICAgIGNsYXNzZXMsIHNvIHRoYXQgdGhleSBhcmUgdW5saWtlbHkgdG8gY2xhc2ggd2l0aCBvdGhlciBjbGFzc2VzLAogICAgYm90aCB0aG9zZSB1c2VkIGJ5IG90aGVyIG1vZGVzIGFuZCB0aG9zZSBkZWZpbmVkIGJ5IHRoZSBwYWdlIGluCiAgICB3aGljaCBDb2RlTWlycm9yIGlzIGVtYmVkZGVkLjwvcD4KCiAgICA8cCBpZD0iZGVmaW5lTW9kZSI+VGhlIG1vZGUgc2NyaXB0IHNob3VsZAogICAgY2FsbCA8Y29kZT5Db2RlTWlycm9yLmRlZmluZU1vZGU8L2NvZGU+IHRvIHJlZ2lzdGVyIGl0c2VsZiB3aXRoCiAgICBDb2RlTWlycm9yLiBUaGlzIGZ1bmN0aW9uIHRha2VzIHR3byBhcmd1bWVudHMuIFRoZSBmaXJzdCBzaG91bGQgYmUKICAgIHRoZSBuYW1lIG9mIHRoZSBtb2RlLCBmb3Igd2hpY2ggeW91IHNob3VsZCB1c2UgYSBsb3dlcmNhc2Ugc3RyaW5nLAogICAgcHJlZmVyYWJseSBvbmUgdGhhdCBpcyBhbHNvIHRoZSBuYW1lIG9mIHRoZSBmaWxlcyB0aGF0IGRlZmluZSB0aGUKICAgIG1vZGUgKGkuZS4gPGNvZGU+InhtbCI8L2NvZGU+IGlzIGRlZmluZWQgPGNvZGU+eG1sLmpzPC9jb2RlPikuIFRoZQogICAgc2Vjb25kIGFyZ3VtZW50IHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRoYXQsIGdpdmVuIGEgQ29kZU1pcnJvcgogICAgY29uZmlndXJhdGlvbiBvYmplY3QgKHRoZSB0aGluZyBwYXNzZWQgdG8KICAgIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBmdW5jdGlvbikgYW5kIGEgbW9kZSBjb25maWd1cmF0aW9uCiAgICBvYmplY3QgKGFzIGluIHRoZSA8YSBocmVmPSIjb3B0aW9uX21vZGUiPjxjb2RlPm1vZGU8L2NvZGU+PC9hPgogICAgb3B0aW9uKSwgcmV0dXJucyBhIG1vZGUgb2JqZWN0LjwvcD4KCiAgICA8cD5UeXBpY2FsbHksIHlvdSBzaG91bGQgdXNlIHRoaXMgc2Vjb25kIGFyZ3VtZW50CiAgICB0byA8Y29kZT5kZWZpbmVNb2RlPC9jb2RlPiBhcyB5b3VyIG1vZHVsZSBzY29wZSBmdW5jdGlvbiAobW9kZXMKICAgIHNob3VsZCBub3QgbGVhayBhbnl0aGluZyBpbnRvIHRoZSBnbG9iYWwgc2NvcGUhKSwgaS5lLiB3cml0ZSB5b3VyCiAgICB3aG9sZSBtb2RlIGluc2lkZSB0aGlzIGZ1bmN0aW9uLjwvcD4KCiAgICA8cD5UaGUgbWFpbiByZXNwb25zaWJpbGl0eSBvZiBhIG1vZGUgc2NyaXB0IGlzIDxlbT5wYXJzaW5nPC9lbT4KICAgIHRoZSBjb250ZW50IG9mIHRoZSBlZGl0b3IuIERlcGVuZGluZyBvbiB0aGUgbGFuZ3VhZ2UgYW5kIHRoZQogICAgYW1vdW50IG9mIGZ1bmN0aW9uYWxpdHkgZGVzaXJlZCwgdGhpcyBjYW4gYmUgZG9uZSBpbiByZWFsbHkgZWFzeQogICAgb3IgZXh0cmVtZWx5IGNvbXBsaWNhdGVkIHdheXMuIFNvbWUgcGFyc2VycyBjYW4gYmUgc3RhdGVsZXNzLAogICAgbWVhbmluZyB0aGF0IHRoZXkgbG9vayBhdCBvbmUgZWxlbWVudCAoPGVtPnRva2VuPC9lbT4pIG9mIHRoZSBjb2RlCiAgICBhdCBhIHRpbWUsIHdpdGggbm8gbWVtb3J5IG9mIHdoYXQgY2FtZSBiZWZvcmUuIE1vc3QsIGhvd2V2ZXIsIHdpbGwKICAgIG5lZWQgdG8gcmVtZW1iZXIgc29tZXRoaW5nLiBUaGlzIGlzIGRvbmUgYnkgdXNpbmcgYSA8ZW0+c3RhdGUKICAgIG9iamVjdDwvZW0+LCB3aGljaCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgbXV0YXRlZCBldmVyeSB0aW1lIGEKICAgIG5ldyB0b2tlbiBpcyByZWFkLjwvcD4KCiAgICA8cCBpZD0ic3RhcnRTdGF0ZSI+TW9kZXMgdGhhdCB1c2UgYSBzdGF0ZSBtdXN0IGRlZmluZQogICAgYSA8Y29kZT5zdGFydFN0YXRlPC9jb2RlPiBtZXRob2Qgb24gdGhlaXIgbW9kZSBvYmplY3QuIFRoaXMgaXMgYQogICAgZnVuY3Rpb24gb2Ygbm8gYXJndW1lbnRzIHRoYXQgcHJvZHVjZXMgYSBzdGF0ZSBvYmplY3QgdG8gYmUgdXNlZAogICAgYXQgdGhlIHN0YXJ0IG9mIGEgZG9jdW1lbnQuPC9wPgoKICAgIDxwIGlkPSJ0b2tlbiI+VGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgb2YgYSBtb2RlIG9iamVjdCBpcwogICAgaXRzIDxjb2RlPnRva2VuKHN0cmVhbSwgc3RhdGUpPC9jb2RlPiBtZXRob2QuIEFsbCBtb2RlcyBtdXN0CiAgICBkZWZpbmUgdGhpcyBtZXRob2QuIEl0IHNob3VsZCByZWFkIG9uZSB0b2tlbiBmcm9tIHRoZSBzdHJlYW0gaXQgaXMKICAgIGdpdmVuIGFzIGFuIGFyZ3VtZW50LCBvcHRpb25hbGx5IHVwZGF0ZSBpdHMgc3RhdGUsIGFuZCByZXR1cm4gYQogICAgc3R5bGUgc3RyaW5nLCBvciA8Y29kZT5udWxsPC9jb2RlPiBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUgdG8KICAgIGJlIHN0eWxlZC4gRm9yIHlvdXIgc3R5bGVzLCB5b3UgY2FuIGVpdGhlciB1c2UgdGhlICdzdGFuZGFyZCcgb25lcwogICAgZGVmaW5lZCBpbiB0aGUgdGhlbWVzICh3aXRob3V0IHRoZSA8Y29kZT5jbS08L2NvZGU+IHByZWZpeCksIG9yCiAgICBkZWZpbmUgeW91ciBvd24gKGFzIHRoZSA8YSBocmVmPSIuLi9tb2RlL2RpZmYvaW5kZXguaHRtbCI+ZGlmZjwvYT4KICAgIG1vZGUgZG9lcykgYW5kIGhhdmUgcGVvcGxlIGluY2x1ZGUgYSBjdXN0b20gdGhlbWUgZm9yIHlvdXIKICAgIG1vZGUuPHA+CgogICAgPHAgaWQ9IlN0cmluZ1N0cmVhbSI+VGhlIHN0cmVhbSBvYmplY3QgZW5jYXBzdWxhdGVzIGEgbGluZSBvZiBjb2RlCiAgICAodG9rZW5zIG1heSBuZXZlciBzcGFuIGxpbmVzKSBhbmQgb3VyIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhhdAogICAgbGluZS4gSXQgaGFzIHRoZSBmb2xsb3dpbmcgQVBJOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT5lb2woKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHN0cmVhbSBpcyBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5zb2woKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHN0cmVhbSBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlCiAgICAgIGxpbmUuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5wZWVrKCkg4oaSIGNoYXJhY3RlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSB3aXRob3V0IGFkdmFuY2luZwogICAgICBpdC4gV2lsbCByZXR1cm4gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5uZXh0KCkg4oaSIGNoYXJhY3RlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSBhbmQgYWR2YW5jZXMgaXQuCiAgICAgIEFsc28gcmV0dXJucyA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IHdoZW4gbm8gbW9yZSBjaGFyYWN0ZXJzIGFyZQogICAgICBhdmFpbGFibGUuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5lYXQobWF0Y2gpIOKGkiBjaGFyYWN0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPjxjb2RlPm1hdGNoPC9jb2RlPiBjYW4gYmUgYSBjaGFyYWN0ZXIsIGEgcmVndWxhciBleHByZXNzaW9uLAogICAgICBvciBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjaGFyYWN0ZXIgYW5kIHJldHVybnMgYSBib29sZWFuLiBJZgogICAgICB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSAnbWF0Y2hlcycgdGhlIGdpdmVuIGFyZ3VtZW50LAogICAgICBpdCBpcyBjb25zdW1lZCBhbmQgcmV0dXJuZWQuIE90aGVyd2lzZSwgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPgogICAgICBpcyByZXR1cm5lZC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ZWF0V2hpbGUobWF0Y2gpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXBlYXRlZGx5IGNhbGxzIDxjb2RlPmVhdDwvY29kZT4gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnQsCiAgICAgIHVudGlsIGl0IGZhaWxzLiBSZXR1cm5zIHRydWUgaWYgYW55IGNoYXJhY3RlcnMgd2VyZSBlYXRlbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ZWF0U3BhY2UoKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+U2hvcnRjdXQgZm9yIDxjb2RlPmVhdFdoaWxlPC9jb2RlPiB3aGVuIG1hdGNoaW5nCiAgICAgIHdoaXRlLXNwYWNlLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5za2lwVG9FbmQoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+TW92ZXMgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPnNraXBUbyhjaCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlNraXBzIHRvIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIGNoYXJhY3RlciwgaWYKICAgICAgZm91bmQuIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2hhcmFjdGVyIHdhcyBmb3VuZC48L2RkPgogICAgICA8ZHQ+PGNvZGU+bWF0Y2gocGF0dGVybiwgY29uc3VtZSwgY2FzZUZvbGQpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BY3QgbGlrZSBhCiAgICAgIG11bHRpLWNoYXJhY3RlciA8Y29kZT5lYXQ8L2NvZGU+4oCUaWYgPGNvZGU+Y29uc3VtZTwvY29kZT4gaXMgdHJ1ZQogICAgICBvciBub3QgZ2l2ZW7igJRvciBhIGxvb2stYWhlYWQgdGhhdCBkb2Vzbid0IHVwZGF0ZSB0aGUgc3RyZWFtCiAgICAgIHBvc2l0aW9u4oCUaWYgaXQgaXMgZmFsc2UuIDxjb2RlPnBhdHRlcm48L2NvZGU+IGNhbiBiZSBlaXRoZXIgYQogICAgICBzdHJpbmcgb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RhcnRpbmcgd2l0aCA8Y29kZT5ePC9jb2RlPi4KICAgICAgV2hlbiBpdCBpcyBhIHN0cmluZywgPGNvZGU+Y2FzZUZvbGQ8L2NvZGU+IGNhbiBiZSBzZXQgdG8gdHJ1ZSB0bwogICAgICBtYWtlIHRoZSBtYXRjaCBjYXNlLWluc2Vuc2l0aXZlLiBXaGVuIHN1Y2Nlc3NmdWxseSBtYXRjaGluZyBhCiAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgdGhlIGFycmF5CiAgICAgIHJldHVybmVkIGJ5IDxjb2RlPm1hdGNoPC9jb2RlPiwgaW4gY2FzZSB5b3UgbmVlZCB0byBleHRyYWN0CiAgICAgIG1hdGNoZWQgZ3JvdXBzLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+YmFja1VwKG4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5CYWNrcyB1cCB0aGUgc3RyZWFtIDxjb2RlPm48L2NvZGU+IGNoYXJhY3RlcnMuIEJhY2tpbmcgaXQgdXAKICAgICAgZnVydGhlciB0aGFuIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCB0b2tlbiB3aWxsIGNhdXNlIHRoaW5ncyB0bwogICAgICBicmVhaywgc28gYmUgY2FyZWZ1bC48L2RkPgogICAgICA8ZHQ+PGNvZGU+Y29sdW1uKCkg4oaSIGludGVnZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIGNvbHVtbiAodGFraW5nIGludG8gYWNjb3VudCB0YWJzKSBhdCB3aGljaCB0aGUKICAgICAgY3VycmVudCB0b2tlbiBzdGFydHMuIENhbiBiZSB1c2VkIHRvIGZpbmQgb3V0IHdoZXRoZXIgYSB0b2tlbgogICAgICBzdGFydHMgYSBuZXcgbGluZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+aW5kZW50YXRpb24oKSDihpIgaW50ZWdlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+VGVsbHMgeW91IGhvdyBmYXIgdGhlIGN1cnJlbnQgbGluZSBoYXMgYmVlbiBpbmRlbnRlZCwgaW4KICAgICAgc3BhY2VzLiBDb3JyZWN0cyBmb3IgdGFiIGNoYXJhY3RlcnMuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5jdXJyZW50KCkg4oaSIHN0cmluZzwvY29kZT48L2R0PgogICAgICA8ZGQ+R2V0IHRoZSBzdHJpbmcgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgdG9rZW4gYW5kCiAgICAgIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi48L2RkPgogICAgPC9kbD4KCiAgICA8cCBpZD0iYmxhbmtMaW5lIj5CeSBkZWZhdWx0LCBibGFuayBsaW5lcyBhcmUgc2ltcGx5IHNraXBwZWQgd2hlbgogICAgdG9rZW5pemluZyBhIGRvY3VtZW50LiBGb3IgbGFuZ3VhZ2VzIHRoYXQgaGF2ZSBzaWduaWZpY2FudCBibGFuawogICAgbGluZXMsIHlvdSBjYW4gZGVmaW5lIGEgPGNvZGU+YmxhbmtMaW5lKHN0YXRlKTwvY29kZT4gbWV0aG9kIG9uCiAgICB5b3VyIG1vZGUgdGhhdCB3aWxsIGdldCBjYWxsZWQgd2hlbmV2ZXIgYSBibGFuayBsaW5lIGlzIHBhc3NlZAogICAgb3Zlciwgc28gdGhhdCBpdCBjYW4gdXBkYXRlIHRoZSBwYXJzZXIgc3RhdGUuPC9wPgoKICAgIDxwIGlkPSJjb3B5U3RhdGUiPkJlY2F1c2Ugc3RhdGUgb2JqZWN0IGFyZSBtdXRhdGVkLCBhbmQgQ29kZU1pcnJvcgogICAgbmVlZHMgdG8ga2VlcCB2YWxpZCB2ZXJzaW9ucyBvZiBhIHN0YXRlIGFyb3VuZCBzbyB0aGF0IGl0IGNhbgogICAgcmVzdGFydCBhIHBhcnNlIGF0IGFueSBsaW5lLCBjb3BpZXMgbXVzdCBiZSBtYWRlIG9mIHN0YXRlIG9iamVjdHMuCiAgICBUaGUgZGVmYXVsdCBhbGdvcml0aG0gdXNlZCBpcyB0aGF0IGEgbmV3IHN0YXRlIG9iamVjdCBpcyBjcmVhdGVkLAogICAgd2hpY2ggZ2V0cyBhbGwgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9sZCBvYmplY3QuIEFueSBwcm9wZXJ0aWVzCiAgICB3aGljaCBob2xkIGFycmF5cyBnZXQgYSBjb3B5IG9mIHRoZXNlIGFycmF5cyAoc2luY2UgYXJyYXlzIHRlbmQgdG8KICAgIGJlIHVzZWQgYXMgbXV0YWJsZSBzdGFja3MpLiBXaGVuIHRoaXMgaXMgbm90IGNvcnJlY3QsIGZvciBleGFtcGxlCiAgICBiZWNhdXNlIGEgbW9kZSBtdXRhdGVzIG5vbi1hcnJheSBwcm9wZXJ0aWVzIG9mIGl0cyBzdGF0ZSBvYmplY3QsIGEKICAgIG1vZGUgb2JqZWN0IHNob3VsZCBkZWZpbmUgYSA8Y29kZT5jb3B5U3RhdGU8L2NvZGU+IG1ldGhvZCwKICAgIHdoaWNoIGlzIGdpdmVuIGEgc3RhdGUgYW5kIHNob3VsZCByZXR1cm4gYSBzYWZlIGNvcHkgb2YgdGhhdAogICAgc3RhdGUuPC9wPgoKICAgIDxwIGlkPSJjb21wYXJlU3RhdGVzIj5CeSBkZWZhdWx0LCBDb2RlTWlycm9yIHdpbGwgc3RvcCByZS1wYXJzaW5nCiAgICBhIGRvY3VtZW50IGFzIHNvb24gYXMgaXQgZW5jb3VudGVycyBhIGZldyBsaW5lcyB0aGF0IHdlcmUKICAgIGhpZ2hsaWdodGVkIHRoZSBzYW1lIGluIHRoZSBvbGQgcGFyc2UgYXMgaW4gdGhlIG5ldyBvbmUuIEl0IGlzCiAgICBwb3NzaWJsZSB0byBwcm92aWRlIGFuIGV4cGxpY2l0IHdheSB0byB0ZXN0IHdoZXRoZXIgYSBzdGF0ZSBpcwogICAgZXF1aXZhbGVudCB0byBhbm90aGVyIG9uZSwgd2hpY2ggQ29kZU1pcnJvciB3aWxsIHVzZSAoaW5zdGVhZCBvZgogICAgdGhlIHVuY2hhbmdlZC1saW5lcyBoZXVyaXN0aWMpIHRvIGRlY2lkZSB3aGVuIHRvIHN0b3AKICAgIGhpZ2hsaWdodGluZy4gWW91IGRvIHRoaXMgYnkgcHJvdmlkaW5nCiAgICBhIDxjb2RlPmNvbXBhcmVTdGF0ZXM8L2NvZGU+IG1ldGhvZCBvbiB5b3VyIG1vZGUgb2JqZWN0LCB3aGljaAogICAgdGFrZXMgdHdvIHN0YXRlIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyCiAgICB0aGV5IGFyZSBlcXVpdmFsZW50LiBTZWUgdGhlIFhNTCBtb2RlLCB3aGljaCB1c2VzIHRoaXMgdG8gcHJvdmlkZQogICAgcmVsaWFibGUgaGlnaGxpZ2h0aW5nIG9mIGJhZCBjbG9zaW5nIHRhZ3MsIGFzIGFuIGV4YW1wbGUuPC9wPgoKICAgIDxwIGlkPSJpbmRlbnQiPklmIHlvdSB3YW50IHlvdXIgbW9kZSB0byBwcm92aWRlIHNtYXJ0IGluZGVudGF0aW9uCiAgICAoc2VlIDxhIGhyZWY9IiNvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlcm1vZGU8L2NvZGU+PC9hPgogICAgYW5kIDxhIGhyZWY9IiNvcHRpb25fdGFiTW9kZSI+PGNvZGU+dGFiTW9kZTwvY29kZT48L2E+IHdoZW4gdGhleQogICAgaGF2ZSBhIHZhbHVlIG9mIDxjb2RlPiJpbmRlbnQiPC9jb2RlPiksIHlvdSBtdXN0IGRlZmluZQogICAgYW4gPGNvZGU+aW5kZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpPC9jb2RlPiBtZXRob2Qgb24geW91ciBtb2RlCiAgICBvYmplY3QuPC9wPgoKICAgIDxwPlRoZSBpbmRlbnRhdGlvbiBtZXRob2Qgc2hvdWxkIGluc3BlY3QgdGhlIGdpdmVuIHN0YXRlIG9iamVjdCwKICAgIGFuZCBvcHRpb25hbGx5IHRoZSA8Y29kZT50ZXh0QWZ0ZXI8L2NvZGU+IHN0cmluZywgd2hpY2ggY29udGFpbnMKICAgIHRoZSB0ZXh0IG9uIHRoZSBsaW5lIHRoYXQgaXMgYmVpbmcgaW5kZW50ZWQsIGFuZCByZXR1cm4gYW4KICAgIGludGVnZXIsIHRoZSBhbW91bnQgb2Ygc3BhY2VzIHRvIGluZGVudC4gSXQgc2hvdWxkIHVzdWFsbHkgdGFrZQogICAgdGhlIDxhIGhyZWY9IiNvcHRpb25faW5kZW50VW5pdCI+PGNvZGU+aW5kZW50VW5pdDwvY29kZT48L2E+CiAgICBvcHRpb24gaW50byBhY2NvdW50LjwvcD4KCiAgICA8cCBpZD0iZWxlY3RyaWNDaGFycyI+RmluYWxseSwgYSBtb2RlIG1heSBkZWZpbmUKICAgIGFuIDxjb2RlPmVsZWN0cmljQ2hhcnM8L2NvZGU+IHByb3BlcnR5LCB3aGljaCBzaG91bGQgaG9sZCBhIHN0cmluZwogICAgY29udGFpbmluZyBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgdHJpZ2dlciB0aGUgYmVoYXZpb3VyCiAgICBkZXNjcmliZWQgZm9yCiAgICB0aGUgPGEgaHJlZj0iI29wdGlvbl9lbGVjdHJpY0NoYXJzIj48Y29kZT5lbGVjdHJpY0NoYXJzPC9jb2RlPjwvYT4KICAgIG9wdGlvbi48L3A+CgogICAgPHA+U28sIHRvIHN1bW1hcml6ZSwgYSBtb2RlIDxlbT5tdXN0PC9lbT4gcHJvdmlkZQogICAgYSA8Y29kZT50b2tlbjwvY29kZT4gbWV0aG9kLCBhbmQgaXQgPGVtPm1heTwvZW0+CiAgICBwcm92aWRlIDxjb2RlPnN0YXJ0U3RhdGU8L2NvZGU+LCA8Y29kZT5jb3B5U3RhdGU8L2NvZGU+LAogICAgYW5kIDxjb2RlPmluZGVudDwvY29kZT4gbWV0aG9kcy4gRm9yIGFuIGV4YW1wbGUgb2YgYSB0cml2aWFsIG1vZGUsCiAgICBzZWUgdGhlIDxhIGhyZWY9Im1vZGUvZGlmZi9kaWZmLmpzIj5kaWZmIG1vZGU8L2E+LCBmb3IgYSBtb3JlCiAgICBpbnZvbHZlZCBleGFtcGxlLCBzZWUKICAgIHRoZSA8YSBocmVmPSJtb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+SmF2YVNjcmlwdAogICAgbW9kZTwvYT4uPC9wPgoKICAgIDxwPlNvbWV0aW1lcywgaXQgaXMgdXNlZnVsIGZvciBtb2RlcyB0byA8ZW0+bmVzdDwvZW0+4oCUdG8gaGF2ZSBvbmUKICAgIG1vZGUgZGVsZWdhdGUgd29yayB0byBhbm90aGVyIG1vZGUuIEFuIGV4YW1wbGUgb2YgdGhpcyBraW5kIG9mCiAgICBtb2RlIGlzIHRoZSA8YSBocmVmPSJtb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPm1peGVkLW1vZGUgSFRNTAogICAgbW9kZTwvYT4uIFRvIGltcGxlbWVudCBzdWNoIG5lc3RpbmcsIGl0IGlzIHVzdWFsbHkgbmVjZXNzYXJ5IHRvCiAgICBjcmVhdGUgbW9kZSBvYmplY3RzIGFuZCBjb3B5IHN0YXRlcyB5b3Vyc2VsZi4gVG8gY3JlYXRlIGEgbW9kZQogICAgb2JqZWN0LCB0aGVyZSBhcmUgPGNvZGU+Q29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsCiAgICBwYXJzZXJDb25maWcpPC9jb2RlPiwgd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY29uZmlndXJhdGlvbgogICAgb2JqZWN0IGFzIHBhc3NlZCB0byB0aGUgbW9kZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgYW5kIHRoZSBzZWNvbmQKICAgIGFyZ3VtZW50IGlzIGEgbW9kZSBzcGVjaWZpY2F0aW9uIGFzIGluCiAgICB0aGUgPGEgaHJlZj0iI29wdGlvbl9tb2RlIj48Y29kZT5tb2RlPC9jb2RlPjwvYT4gb3B0aW9uLiBUbyBjb3B5IGEKICAgIHN0YXRlIG9iamVjdCwgY2FsbCA8Y29kZT5Db2RlTWlycm9yLmNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk8L2NvZGU+LAogICAgd2hlcmUgPGNvZGU+bW9kZTwvY29kZT4gaXMgdGhlIG1vZGUgdGhhdCBjcmVhdGVkIHRoZSBnaXZlbgogICAgc3RhdGUuPC9wPgoKICAgIDxwPlRvIG1ha2UgaW5kZW50YXRpb24gd29yayBwcm9wZXJseSBpbiBhIG5lc3RlZCBwYXJzZXIsIGl0IGlzCiAgICBhZHZpc2FibGUgdG8gZ2l2ZSB0aGUgPGNvZGU+c3RhcnRTdGF0ZTwvY29kZT4gbWV0aG9kIG9mIG1vZGVzIHRoYXQKICAgIGFyZSBpbnRlbmRlZCB0byBiZSBuZXN0ZWQgYW4gb3B0aW9uYWwgYXJndW1lbnQgdGhhdCBwcm92aWRlcyB0aGUKICAgIGJhc2UgaW5kZW50YXRpb24gZm9yIHRoZSBibG9jayBvZiBjb2RlLiBUaGUgSmF2YVNjcmlwdCBhbmQgQ1NTCiAgICBwYXJzZXIgZG8gdGhpcywgZm9yIGV4YW1wbGUsIHRvIGFsbG93IEphdmFTY3JpcHQgYW5kIENTUyBjb2RlCiAgICBpbnNpZGUgdGhlIG1peGVkLW1vZGUgSFRNTCBtb2RlIHRvIGJlIHByb3Blcmx5IGluZGVudGVkLjwvcD4KCiAgICA8cD5GaW5hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBhc3NvY2lhdGUgeW91ciBtb2RlLCBvciBhIGNlcnRhaW4KICAgIGNvbmZpZ3VyYXRpb24gb2YgeW91ciBtb2RlLCB3aXRoCiAgICBhIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlNRSI+TUlNRTwvYT4gdHlwZS4gRm9yCiAgICBleGFtcGxlLCB0aGUgSmF2YVNjcmlwdCBtb2RlIGFzc29jaWF0ZXMgaXRzZWxmCiAgICB3aXRoIDxjb2RlPnRleHQvamF2YXNjcmlwdDwvY29kZT4sIGFuZCBpdHMgSlNPTiB2YXJpYW50CiAgICB3aXRoIDxjb2RlPmFwcGxpY2F0aW9uL2pzb248L2NvZGU+LiBUbyBkbyB0aGlzLAogICAgY2FsbCA8Y29kZT5Db2RlTWlycm9yLmRlZmluZU1JTUUobWltZSwgbW9kZVNwZWMpPC9jb2RlPiwKICAgIHdoZXJlIDxjb2RlPm1vZGVTcGVjPC9jb2RlPiBjYW4gYmUgYSBzdHJpbmcgb3Igb2JqZWN0IHNwZWNpZnlpbmcgYQogICAgbW9kZSwgYXMgaW4gdGhlIDxhIGhyZWY9IiNvcHRpb25fbW9kZSI+PGNvZGU+bW9kZTwvY29kZT48L2E+CiAgICBvcHRpb24uPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0icmlnaHRzbWFsbCBibGsiPgoKICAgIDxoMj5Db250ZW50czwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI292ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3VzYWdlIj5CYXNpYyBVc2FnZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2NvbmZpZyI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3N0eWxpbmciPkN1c3RvbWl6ZWQgU3R5bGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2FwaSI+UHJvZ3JhbW1pbmcgQVBJPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjbW9kZWFwaSI+V3JpdGluZyBDb2RlTWlycm9yIE1vZGVzPC9hPjwvbGk+CiAgICA8L3VsPgoKPC9kaXY+PC9kaXY+Cgo8ZGl2IHN0eWxlPSJoZWlnaHQ6IDJlbSI+Jm5ic3A7PC9kaXY+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/clike.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5jLWxpa2Uta2V5d29yZCB7Y29sb3I6ICM5MGI7fQpzcGFuLmMtbGlrZS1udW1iZXIge2NvbG9yOiAjMjkxO30Kc3Bhbi5jLWxpa2UtY29tbWVudCB7Y29sb3I6ICNhNzA7fQpzcGFuLmMtbGlrZS1zdHJpbmcge2NvbG9yOiAjYTIyO30Kc3Bhbi5jLWxpa2UtcHJlcHJvY2Vzc29yIHtjb2xvcjogIzA0OTt9CnNwYW4uYy1saWtlLXZhciB7Y29sb3I6ICMyMmI7fQpzcGFuLmMtbGlrZS1hbm5vdGF0aW9uIHtjb2xvcjogIzY2Njt9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/clike.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbGlrZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgPSBwYXJzZXJDb25maWcua2V5d29yZHMgfHwge30sCiAgICAgIGJsb2NrS2V5d29yZHMgPSBwYXJzZXJDb25maWcuYmxvY2tLZXl3b3JkcyB8fCB7fSwKICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge30sCiAgICAgIGhvb2tzID0gcGFyc2VyQ29uZmlnLmhvb2tzIHx8IHt9LAogICAgICBtdWx0aUxpbmVTdHJpbmdzID0gcGFyc2VyQ29uZmlnLm11bHRpTGluZVN0cmluZ3M7CiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xcL10vOwoKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoaG9va3NbY2hdKSB7CiAgICAgIHZhciByZXN1bHQgPSBob29rc1tjaF0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDsKICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgfQogICAgfQogICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfQogICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7CiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsKICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgIH0KICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gImF0b20iOwogICAgcmV0dXJuICJ3b3JkIjsKICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLmFsaWduID0gYWxpZ247CiAgICB0aGlzLnByZXYgPSBwcmV2OwogIH0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpOwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTsKICAgIGlmICh0ID09ICIpIiB8fCB0ID09ICJdIiB8fCB0ID09ICJ9IikKICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkOwogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICAvLyBJbnRlcmZhY2UKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZTogbnVsbCwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJ0b3AiLCBmYWxzZSksCiAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIGN1clB1bmMgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IiB8fCBzdHlsZSA9PSAibWV0YSIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJdIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IikgewogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkKICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAic3RhdGVtZW50Iik7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UgJiYgc3RhdGUudG9rZW5pemUgIT0gbnVsbCkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgY3R4ID0gc3RhdGUuY29udGV4dCwgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogaW5kZW50VW5pdCk7CiAgICAgIGVsc2UgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZSByZXR1cm4gY3R4LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ7fSIKICB9Owp9KTsKCihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsKICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIG9iajsKICB9CiAgdmFyIGNLZXl3b3JkcyA9ICJhdXRvIGlmIGJyZWFrIGludCBjYXNlIGxvbmcgY2hhciByZWdpc3RlciBjb250aW51ZSByZXR1cm4gZGVmYXVsdCBzaG9ydCBkbyBzaXplb2YgIiArCiAgICAiZG91YmxlIHN0YXRpYyBlbHNlIHN0cnVjdCBlbnRyeSBzd2l0Y2ggZXh0ZXJuIHR5cGVkZWYgZmxvYXQgdW5pb24gZm9yIHVuc2lnbmVkICIgKwogICAgImdvdG8gd2hpbGUgZW51bSB2b2lkIGNvbnN0IHNpZ25lZCB2b2xhdGlsZSI7CgogIGZ1bmN0aW9uIGNwcEhvb2soc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKCFzdGF0ZS5zdGFydE9mTGluZSkgcmV0dXJuIGZhbHNlOwogICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgcmV0dXJuICJtZXRhIjsKICB9CgogIC8vIEMjLXN0eWxlIHN0cmluZ3Mgd2hlcmUgIiIgZXNjYXBlcyBhIHF1b3RlLgogIGZ1bmN0aW9uIHRva2VuQXRTdHJpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG5leHQ7CiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChuZXh0ID09ICciJyAmJiAhc3RyZWFtLmVhdCgnIicpKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gInN0cmluZyI7CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jc3JjIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcyhjS2V5d29yZHMpLAogICAgYmxvY2tLZXl3b3Jkczogd29yZHMoImNhc2UgZG8gZWxzZSBmb3IgaWYgc3dpdGNoIHdoaWxlIHN0cnVjdCIpLAogICAgYXRvbXM6IHdvcmRzKCJudWxsIiksCiAgICBob29rczogeyIjIjogY3BwSG9va30KICB9KTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jKytzcmMiLCB7CiAgICBuYW1lOiAiY2xpa2UiLAogICAga2V5d29yZHM6IHdvcmRzKGNLZXl3b3JkcyArICIgYXNtIGR5bmFtaWNfY2FzdCBuYW1lc3BhY2UgcmVpbnRlcnByZXRfY2FzdCB0cnkgYm9vbCBleHBsaWNpdCBuZXcgIiArCiAgICAgICAgICAgICAgICAgICAgInN0YXRpY19jYXN0IHR5cGVpZCBjYXRjaCBvcGVyYXRvciB0ZW1wbGF0ZSB0eXBlbmFtZSBjbGFzcyBmcmllbmQgcHJpdmF0ZSAiICsKICAgICAgICAgICAgICAgICAgICAidGhpcyB1c2luZyBjb25zdF9jYXN0IGlubGluZSBwdWJsaWMgdGhyb3cgdmlydHVhbCBkZWxldGUgbXV0YWJsZSBwcm90ZWN0ZWQgIiArCiAgICAgICAgICAgICAgICAgICAgIndjaGFyX3QiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN0cnVjdCBzd2l0Y2ggdHJ5IHdoaWxlIiksCiAgICBhdG9tczogd29yZHMoInRydWUgZmFsc2UgbnVsbCIpLAogICAgaG9va3M6IHsiIyI6IGNwcEhvb2t9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtamF2YSIsIHsKICAgIG5hbWU6ICJjbGlrZSIsCiAgICBrZXl3b3Jkczogd29yZHMoImFic3RyYWN0IGFzc2VydCBib29sZWFuIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgIiArIAogICAgICAgICAgICAgICAgICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCAiICsKICAgICAgICAgICAgICAgICAgICAiaW5zdGFuY2VvZiBpbnQgaW50ZXJmYWNlIGxvbmcgbmF0aXZlIG5ldyBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyAiICsKICAgICAgICAgICAgICAgICAgICAicmV0dXJuIHNob3J0IHN0YXRpYyBzdHJpY3RmcCBzdXBlciBzd2l0Y2ggc3luY2hyb25pemVkIHRoaXMgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCAiICsKICAgICAgICAgICAgICAgICAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN3aXRjaCB0cnkgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9CiAgICB9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtY3NoYXJwIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcygiYWJzdHJhY3QgYXMgYmFzZSBib29sIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNoZWNrZWQgY2xhc3MgY29uc3QgY29udGludWUgZGVjaW1hbCIgKyAKICAgICAgICAgICAgICAgICAgICAiIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmluYWxseSBmaXhlZCBmbG9hdCBmb3IiICsgCiAgICAgICAgICAgICAgICAgICAgIiBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBvYmplY3QiICsgCiAgICAgICAgICAgICAgICAgICAgIiBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCIgKyAKICAgICAgICAgICAgICAgICAgICAiIHNpemVvZiBzdGFja2FsbG9jIHN0YXRpYyBzdHJpbmcgc3RydWN0IHN3aXRjaCB0aGlzIHRocm93IHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQiICsgCiAgICAgICAgICAgICAgICAgICAgIiB1bnNhZmUgdXNob3J0IHVzaW5nIHZpcnR1YWwgdm9pZCB2b2xhdGlsZSB3aGlsZSBhZGQgYWxpYXMgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZHluYW1pYyBmcm9tIGdldCIgKyAKICAgICAgICAgICAgICAgICAgICAiIGdsb2JhbCBncm91cCBpbnRvIGpvaW4gbGV0IG9yZGVyYnkgcGFydGlhbCByZW1vdmUgc2VsZWN0IHNldCB2YWx1ZSB2YXIgeWllbGQiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGZvcmVhY2ggaWYgc3RydWN0IHN3aXRjaCB0cnkgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgnIicpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQXRTdHJpbmc7CiAgICAgICAgICByZXR1cm4gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICAgcmV0dXJuICJtZXRhIjsKICAgICAgfQogICAgfQogIH0pOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWdyb292eSIsIHsKICAgIG5hbWU6ICJjbGlrZSIsCiAgICBrZXl3b3Jkczogd29yZHMoImFic3RyYWN0IGFzIGFzc2VydCBib29sZWFuIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZiBkZWZhdWx0ICIgKwogICAgICAgICAgICAgICAgICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCAiICsKICAgICAgICAgICAgICAgICAgICAiaW4gaW5zdGFuY2VvZiBpbnQgaW50ZXJmYWNlIGxvbmcgbmF0aXZlIG5ldyBwYWNrYWdlIHByb3BlcnR5IHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyAiICsKICAgICAgICAgICAgICAgICAgICAicmV0dXJuIHNob3J0IHN0YXRpYyBzdHJpY3RmcCBzdXBlciBzd2l0Y2ggc3luY2hyb25pemVkIHRoaXMgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCAiICsKICAgICAgICAgICAgICAgICAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9CiAgICB9CiAgfSk7Cn0oKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQy1saWtlIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJjbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL2RlZmF1bHQuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyOiAycHggaW5zZXQgI2RlZTt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBDLWxpa2UgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovKiBDIGRlbW8gY29kZSAqLwoKI2luY2x1ZGUgPHptcS5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5jbHVkZSA8c2VtYXBob3JlLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgoKdHlwZWRlZiBzdHJ1Y3QgewogIHZvaWQqIGFyZ19zb2NrZXQ7CiAgem1xX21zZ190KiBhcmdfbXNnOwogIGNoYXIqIGFyZ19zdHJpbmc7CiAgdW5zaWduZWQgbG9uZyBhcmdfbGVuOwogIGludCBhcmdfaW50LCBhcmdfY29tbWFuZDsKCiAgaW50IHNpZ25hbF9mZDsKICBpbnQgcGFkOwogIHZvaWQqIGNvbnRleHQ7CiAgc2VtX3Qgc2VtOwp9IGFjbF96bXFfY29udGV4dDsKCiNkZWZpbmUgcChYKSAoY29udGV4dC0+YXJnXyMjWCkKCnZvaWQqIHptcV90aHJlYWQodm9pZCogY29udGV4dF9wb2ludGVyKSB7CiAgYWNsX3ptcV9jb250ZXh0KiBjb250ZXh0ID0gKGFjbF96bXFfY29udGV4dCopY29udGV4dF9wb2ludGVyOwogIGNoYXIgb2sgPSAnSycsIGVyciA9ICdYJzsKICBpbnQgcmVzOwoKICB3aGlsZSAoMSkgewogICAgd2hpbGUgKChyZXMgPSBzZW1fd2FpdCgmYW1wO2NvbnRleHQtPnNlbSkpID09IEVJTlRSKTsKICAgIGlmIChyZXMpIHt3cml0ZShjb250ZXh0LT5zaWduYWxfZmQsICZhbXA7ZXJyLCAxKTsgZ290byBjbGVhbnVwO30KICAgIHN3aXRjaChwKGNvbW1hbmQpKSB7CiAgICBjYXNlIDA6IGdvdG8gY2xlYW51cDsKICAgIGNhc2UgMTogcChzb2NrZXQpID0gem1xX3NvY2tldChjb250ZXh0LT5jb250ZXh0LCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgMjogcChpbnQpID0gem1xX2Nsb3NlKHAoc29ja2V0KSk7IGJyZWFrOwogICAgY2FzZSAzOiBwKGludCkgPSB6bXFfYmluZChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA0OiBwKGludCkgPSB6bXFfY29ubmVjdChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA1OiBwKGludCkgPSB6bXFfZ2V0c29ja29wdChwKHNvY2tldCksIHAoaW50KSwgKHZvaWQqKXAoc3RyaW5nKSwgJmFtcDtwKGxlbikpOyBicmVhazsKICAgIGNhc2UgNjogcChpbnQpID0gem1xX3NldHNvY2tvcHQocChzb2NrZXQpLCBwKGludCksICh2b2lkKilwKHN0cmluZyksIHAobGVuKSk7IGJyZWFrOwogICAgY2FzZSA3OiBwKGludCkgPSB6bXFfc2VuZChwKHNvY2tldCksIHAobXNnKSwgcChpbnQpKTsgYnJlYWs7CiAgICBjYXNlIDg6IHAoaW50KSA9IHptcV9yZWN2KHAoc29ja2V0KSwgcChtc2cpLCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgOTogcChpbnQpID0gem1xX3BvbGwocChzb2NrZXQpLCBwKGludCksIHAobGVuKSk7IGJyZWFrOwogICAgfQogICAgcChjb21tYW5kKSA9IGVycm5vOwogICAgd3JpdGUoY29udGV4dC0+c2lnbmFsX2ZkLCAmYW1wO29rLCAxKTsKICB9CiBjbGVhbnVwOgogIGNsb3NlKGNvbnRleHQtPnNpZ25hbF9mZCk7CiAgZnJlZShjb250ZXh0X3BvaW50ZXIpOwogIHJldHVybiAwOwp9Cgp2b2lkKiB6bXFfdGhyZWFkX2luaXQodm9pZCogem1xX2NvbnRleHQsIGludCBzaWduYWxfZmQpIHsKICBhY2xfem1xX2NvbnRleHQqIGNvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKGFjbF96bXFfY29udGV4dCkpOwogIHB0aHJlYWRfdCB0aHJlYWQ7CgogIGNvbnRleHQtPmNvbnRleHQgPSB6bXFfY29udGV4dDsKICBjb250ZXh0LT5zaWduYWxfZmQgPSBzaWduYWxfZmQ7CiAgc2VtX2luaXQoJmFtcDtjb250ZXh0LT5zZW0sIDEsIDApOwogIHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCAwLCAmYW1wO3ptcV90aHJlYWQsIGNvbnRleHQpOwogIHB0aHJlYWRfZGV0YWNoKHRocmVhZCk7CiAgcmV0dXJuIGNvbnRleHQ7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtY3NyYyIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgbW9kZSB0aGF0IHRyaWVzIHRvIGhhbmRsZSBDLWxpa2UgbGFuZ3VhZ2VzIGFzIHdlbGwgYXMgaXQKICAgIGNhbi4gVGFrZXMgdHdvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczogPGNvZGU+a2V5d29yZHM8L2NvZGU+LCBhbgogICAgb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIGFyZSB0aGUga2V5d29yZHMgaW4gdGhlIGxhbmd1YWdlLAogICAgYW5kIDxjb2RlPnVzZUNQUDwvY29kZT4sIHdoaWNoIGRldGVybWluZXMgd2hldGhlciBDIHByZXByb2Nlc3NvcgogICAgZGlyZWN0aXZlcyBhcmUgcmVjb2duaXplZC48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1jc3JjPC9jb2RlPgogICAgKEMgY29kZSksIDxjb2RlPnRleHQveC1jKytzcmM8L2NvZGU+IChDKysKICAgIGNvZGUpLCA8Y29kZT50ZXh0L3gtamF2YTwvY29kZT4gKEphdmEKICAgIGNvZGUpLCA8Y29kZT50ZXh0L3gtZ3Jvb3Z5PC9jb2RlPiAoR3Jvb3Z5IGNvZGUpLjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LCB0eXBlOwogIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHt0eXBlID0gdHA7IHJldHVybiBzdHlsZTt9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICJAIikge3N0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsgcmV0dXJuIHJldCgibWV0YSIsIHN0cmVhbS5jdXJyZW50KCkpO30KICAgIGVsc2UgaWYgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCIhIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI9IikgcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmICgoY2ggPT0gIn4iIHx8IGNoID09ICJ8IikgJiYgc3RyZWFtLmVhdCgiPSIpKSByZXR1cm4gcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIiMiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKICAgICAgcmV0dXJuIHJldCgiYXRvbSIsICJoYXNoIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiISIpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXHMqXHcqLyk7CiAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvWywuKz4qXC9dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKICAgIH0KICAgIGVsc2UgaWYgKC9bO3t9OlxbXF1dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsIGNoKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7CiAgICAgIHJldHVybiByZXQoInZhcmlhYmxlIiwgInZhcmlhYmxlIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSAiLyIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBkYXNoZXMgPSAwLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChkYXNoZXMgPj0gMiAmJiBjaCA9PSAiPiIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBkYXNoZXMgPSAoY2ggPT0gIi0iKSA/IGRhc2hlcyArIDEgOiAwOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCiAgICAgICAgICAgICAgc3RhY2s6IFtdfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CgogICAgICB2YXIgY29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsKICAgICAgaWYgKHR5cGUgPT0gImhhc2giICYmIGNvbnRleHQgPT0gInJ1bGUiKSBzdHlsZSA9ICJhdG9tIjsKICAgICAgZWxzZSBpZiAoc3R5bGUgPT0gInZhcmlhYmxlIikgewogICAgICAgIGlmIChjb250ZXh0ID09ICJydWxlIikgc3R5bGUgPSAibnVtYmVyIjsKICAgICAgICBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09ICJAbWVkaWF7Iikgc3R5bGUgPSAidGFnIjsKICAgICAgfQoKICAgICAgaWYgKGNvbnRleHQgPT0gInJ1bGUiICYmIC9eW1x7XH07XSQvLnRlc3QodHlwZSkpCiAgICAgICAgc3RhdGUuc3RhY2sucG9wKCk7CiAgICAgIGlmICh0eXBlID09ICJ7IikgewogICAgICAgIGlmIChjb250ZXh0ID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlheyI7CiAgICAgICAgZWxzZSBzdGF0ZS5zdGFjay5wdXNoKCJ7Iik7CiAgICAgIH0KICAgICAgZWxzZSBpZiAodHlwZSA9PSAifSIpIHN0YXRlLnN0YWNrLnBvcCgpOwogICAgICBlbHNlIGlmICh0eXBlID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFjay5wdXNoKCJAbWVkaWEiKTsKICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAieyIgJiYgdHlwZSAhPSAiY29tbWVudCIpIHN0YXRlLnN0YWNrLnB1c2goInJ1bGUiKTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgdmFyIG4gPSBzdGF0ZS5zdGFjay5sZW5ndGg7CiAgICAgIGlmICgvXlx9Ly50ZXN0KHRleHRBZnRlcikpCiAgICAgICAgbiAtPSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPT0gInJ1bGUiID8gMiA6IDE7CiAgICAgIHJldHVybiBzdGF0ZS5iYXNlSW5kZW50ICsgbiAqIGluZGVudFVuaXQ7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2NzcyIsICJjc3MiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQ1NTIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJjc3MuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JhY2tncm91bmQ6ICNmOGY4Zjg7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Nzcy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogQ1NTIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLyogU29tZSBleGFtcGxlIENTUyAqLwoKQGltcG9ydCB1cmwoInNvbWV0aGluZy5jc3MiKTsKCmJvZHkgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAzZW0gNmVtOwogIGZvbnQtZmFtaWx5OiB0YWhvbWEsIGFyaWFsLCBzYW5zLXNlcmlmOwogIGNvbG9yOiAjMDAwOwp9CgojbmF2aWdhdGlvbiBhIHsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKfQoKaDEgewogIGZvbnQtc2l6ZTogMi41ZW07Cn0KCmgyIHsKICBmb250LXNpemU6IDEuN2VtOwp9CgpoMTpiZWZvcmUsIGgyOmJlZm9yZSB7CiAgY29udGVudDogIjo6IjsKfQoKY29kZSB7CiAgZm9udC1mYW1pbHk6IGNvdXJpZXIsIG1vbm9zcGFjZTsKICBmb250LXNpemU6IDgwJTsKICBjb2xvcjogIzQxOEE4QTsKfQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC9jc3M8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/diff.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLXJhbmdlaW5mbyB7Y29sb3I6ICNhMGI7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbWludXMge2NvbG9yOiAjYTIyO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXBsdXMge2NvbG9yOiAjMmIyO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/diff.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJkaWZmIiwgZnVuY3Rpb24oKSB7CiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHsKICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICBpZiAoY2ggPT0gIisiKSByZXR1cm4gInBsdXMiOwogICAgICBpZiAoY2ggPT0gIi0iKSByZXR1cm4gIm1pbnVzIjsKICAgICAgaWYgKGNoID09ICJAIikgcmV0dXJuICJyYW5nZWluZm8iOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZGlmZiIsICJkaWZmIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogRGlmZiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iZGlmZi5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRpZmYuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9jc3MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IERpZmYgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgpkaWZmIC0tZ2l0IGEvaW5kZXguaHRtbCBiL2luZGV4Lmh0bWwKaW5kZXggYzFkOTE1Ni4uNzc2NDc0NCAxMDA2NDQKLS0tIGEvaW5kZXguaHRtbAorKysgYi9pbmRleC5odG1sCkBAIC05NSw3ICs5NSw4IEBAIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUgPSB7CiAgICAgPHNjcmlwdD4KICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAotICAgICAgICBhdXRvTWF0Y2hCcmFja2V0czogdHJ1ZQorICAgICAgICBhdXRvTWF0Y2hCcmFja2V0czogdHJ1ZSwKKyAgICAgIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKHgpe2NvbnNvbGUubG9nKHgpO30KICAgICAgIH0pOwogICAgIDwvc2NyaXB0PgogICA8L2JvZHk+CmRpZmYgLS1naXQgYS9saWIvY29kZW1pcnJvci5qcyBiL2xpYi9jb2RlbWlycm9yLmpzCmluZGV4IDA0NjQ2YTkuLjlhMzljYzcgMTAwNjQ0Ci0tLSBhL2xpYi9jb2RlbWlycm9yLmpzCisrKyBiL2xpYi9jb2RlbWlycm9yLmpzCkBAIC0zOTksMTAgKzM5OSwxNiBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAKICAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7Ci0gICAgICB2YXIgc3RhcnQgPSBwb3NGcm9tTW91c2UoZSksIGxhc3QgPSBzdGFydDsKKyAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKSwgbGFzdCA9IHN0YXJ0LCB0YXJnZXQgPSBlLnRhcmdldCgpOwogICAgICAgaWYgKCFzdGFydCkgcmV0dXJuOwogICAgICAgc2V0Q3Vyc29yKHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCBmYWxzZSk7CiAgICAgICBpZiAoZS5idXR0b24oKSAhPSAxKSByZXR1cm47CisgICAgICBpZiAodGFyZ2V0LnBhcmVudE5vZGUgPT0gZ3V0dGVyKSB7CisgICAgICAgIGlmIChvcHRpb25zLm9uR3V0dGVyQ2xpY2spCisgICAgICAgICAgb3B0aW9ucy5vbkd1dHRlckNsaWNrKGluZGV4T2YoZ3V0dGVyLmNoaWxkTm9kZXMsIHRhcmdldCkgKyBzaG93aW5nRnJvbSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKwogICAgICAgaWYgKCFmb2N1c2VkKSBvbkZvY3VzKCk7CiAKICAgICAgIGUuc3RvcCgpOwpAQCAtODA4LDcgKzgxNCw3IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZm9yICh2YXIgaSA9IHNob3dpbmdGcm9tOyBpIDwgc2hvd2luZ1RvOyArK2kpIHsKICAgICAgICAgdmFyIG1hcmtlciA9IGxpbmVzW2ldLmd1dHRlck1hcmtlcjsKICAgICAgICAgaWYgKG1hcmtlcikgaHRtbC5wdXNoKCc8ZGl2IGNsYXNzPSInICsgbWFya2VyLnN0eWxlICsgJyI+JyArIGh0bWxFc2NhcGUobWFya2VyLnRleHQpICsgJzwvZGl2PicpOwotICAgICAgICBlbHNlIGh0bWwucHVzaCgiPGRpdj4iICsgKG9wdGlvbnMubGluZU51bWJlcnMgPyBpICsgMSA6ICJcdTAwYTAiKSArICI8L2Rpdj4iKTsKKyAgICAgICAgZWxzZSBodG1sLnB1c2goIjxkaXY+IiArIChvcHRpb25zLmxpbmVOdW1iZXJzID8gaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyIDogIlx1MDBhMCIpICsgIjwvZGl2PiIpOwogICAgICAgfQogICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7IC8vIFRPRE8gdGVzdCB3aGV0aGVyIHRoaXMgYWN0dWFsbHkgaGVscHMKICAgICAgIGd1dHRlci5pbm5lckhUTUwgPSBodG1sLmpvaW4oIiIpOwpAQCAtMTM3MSwxMCArMTM3Nyw4IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAob3B0aW9uID09ICJwYXJzZXIiKSBzZXRQYXJzZXIodmFsdWUpOwogICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJsaW5lTnVtYmVycyIpIHNldExpbmVOdW1iZXJzKHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiZ3V0dGVyIikgc2V0R3V0dGVyKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAicmVhZE9ubHkiKSBvcHRpb25zLnJlYWRPbmx5ID0gdmFsdWU7Ci0gICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PT0gImluZGVudFVuaXQiKSB7b3B0aW9ucy5pbmRlbnRVbml0ID0gaW5kZW50VW5pdCA9IHZhbHVlOyBzZXRQYXJzZXIob3B0aW9ucy5wYXJzZXIpO30KLSAgICAgICAgZWxzZSBpZiAoL14oPzplbnRlck1vZGV8dGFiTW9kZXxpbmRlbnRXaXRoVGFic3xyZWFkT25seXxhdXRvTWF0Y2hCcmFja2V0c3x1bmRvRGVwdGgpJC8udGVzdChvcHRpb24pKSBvcHRpb25zW29wdGlvbl0gPSB2YWx1ZTsKLSAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNhbid0IHNldCBvcHRpb24gIiArIG9wdGlvbik7CisgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PT0gImluZGVudFVuaXQiKSB7b3B0aW9ucy5pbmRlbnRVbml0ID0gdmFsdWU7IHNldFBhcnNlcihvcHRpb25zLnBhcnNlcik7fQorICAgICAgICBlbHNlIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlOwogICAgICAgfSwKICAgICAgIGN1cnNvckNvb3JkczogY3Vyc29yQ29vcmRzLAogICAgICAgdW5kbzogb3BlcmF0aW9uKHVuZG8pLApAQCAtMTQwMiw3ICsxNDA2LDggQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXBsYWNlUmFuZ2U6IG9wZXJhdGlvbihyZXBsYWNlUmFuZ2UpLAogCiAgICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBvcGVyYXRpb24oZikoKTt9LAotICAgICAgcmVmcmVzaDogZnVuY3Rpb24oKXt1cGRhdGVEaXNwbGF5KFt7ZnJvbTogMCwgdG86IGxpbmVzLmxlbmd0aH1dKTt9CisgICAgICByZWZyZXNoOiBmdW5jdGlvbigpe3VwZGF0ZURpc3BsYXkoW3tmcm9tOiAwLCB0bzogbGluZXMubGVuZ3RofV0pO30sCisgICAgICBnZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpe3JldHVybiBpbnB1dDt9CiAgICAgfTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiAgIH0KQEAgLTE0MjAsNiArMTQyNSw3IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJlYWRPbmx5OiBmYWxzZSwKICAgICBvbkNoYW5nZTogbnVsbCwKICAgICBvbkN1cnNvckFjdGl2aXR5OiBudWxsLAorICAgIG9uR3V0dGVyQ2xpY2s6IG51bGwsCiAgICAgYXV0b01hdGNoQnJhY2tldHM6IGZhbHNlLAogICAgIHdvcmtUaW1lOiAyMDAsCiAgICAgd29ya0RlbGF5OiAzMDAsCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHt9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtZGlmZjwvY29kZT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/haskell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJoYXNrZWxsIiwgZnVuY3Rpb24oY21DZmcsIG1vZGVDZmcpIHsKCiAgZnVuY3Rpb24gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgZikgewogICAgc2V0U3RhdGUoZik7CiAgICByZXR1cm4gZihzb3VyY2UsIHNldFN0YXRlKTsKICB9CiAgCiAgLy8gVGhlc2Ugc2hvdWxkIGFsbCBiZSBVbmljb2RlIGV4dGVuZGVkLCBhcyBwZXIgdGhlIEhhc2tlbGwgMjAxMCByZXBvcnQKICB2YXIgc21hbGxSRSA9IC9bYS16X10vOwogIHZhciBsYXJnZVJFID0gL1tBLVpdLzsKICB2YXIgZGlnaXRSRSA9IC9bMC05XS87CiAgdmFyIGhleGl0UkUgPSAvWzAtOUEtRmEtZl0vOwogIHZhciBvY3RpdFJFID0gL1swLTddLzsKICB2YXIgaWRSRSA9IC9bYS16X0EtWjAtOSddLzsKICB2YXIgc3ltYm9sUkUgPSAvWy0hIyQlJiorLlwvPD0+P0BcXF58fjpdLzsKICB2YXIgc3BlY2lhbFJFID0gL1soKSw7W1xdYHt9XS87CiAgdmFyIHdoaXRlQ2hhclJFID0gL1sgXHRcdlxmXS87IC8vIG5ld2xpbmVzIGFyZSBoYW5kbGVkIGluIHRva2VuaXplcgogICAgCiAgZnVuY3Rpb24gbm9ybWFsKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgIGlmIChzb3VyY2UuZWF0V2hpbGUod2hpdGVDaGFyUkUpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgICAKICAgIHZhciBjaCA9IHNvdXJjZS5uZXh0KCk7CiAgICBpZiAoc3BlY2lhbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgdmFyIHQgPSAiY29tbWVudCI7CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyMnKSkgewogICAgICAgICAgdCA9ICJtZXRhIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN3aXRjaFN0YXRlKHNvdXJjZSwgc2V0U3RhdGUsIG5jb21tZW50KHQsIDEpKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgaWYgKGNoID09ICdcJycpIHsKICAgICAgaWYgKHNvdXJjZS5lYXQoJ1xcJykpIHsKICAgICAgICBzb3VyY2UubmV4dCgpOyAgLy8gc2hvdWxkIGhhbmRsZSBvdGhlciBlc2NhcGVzIGhlcmUKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzb3VyY2UubmV4dCgpOwogICAgICB9CiAgICAgIGlmIChzb3VyY2UuZWF0KCdcJycpKSB7CiAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICB9CiAgICAgIHJldHVybiAiZXJyb3IiOwogICAgfQogICAgCiAgICBpZiAoY2ggPT0gJyInKSB7CiAgICAgIHJldHVybiBzd2l0Y2hTdGF0ZShzb3VyY2UsIHNldFN0YXRlLCBzdHJpbmdMaXRlcmFsKTsKICAgIH0KICAgICAgCiAgICBpZiAobGFyZ2VSRS50ZXN0KGNoKSkgewogICAgICBzb3VyY2UuZWF0V2hpbGUoaWRSRSk7CiAgICAgIGlmIChzb3VyY2UuZWF0KCcuJykpIHsKICAgICAgICByZXR1cm4gInF1YWxpZmllciI7CiAgICAgIH0KICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH0KICAgICAgCiAgICBpZiAoc21hbGxSRS50ZXN0KGNoKSkgewogICAgICBzb3VyY2UuZWF0V2hpbGUoaWRSRSk7CiAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgfQogICAgICAKICAgIGlmIChkaWdpdFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnMCcpIHsKICAgICAgICBpZiAoc291cmNlLmVhdCgvW3hYXS8pKSB7CiAgICAgICAgICBzb3VyY2UuZWF0V2hpbGUoaGV4aXRSRSk7IC8vIHNob3VsZCByZXF1aXJlIGF0IGxlYXN0IDEKICAgICAgICAgIHJldHVybiAiaW50ZWdlciI7CiAgICAgICAgfQogICAgICAgIGlmIChzb3VyY2UuZWF0KC9bb09dLykpIHsKICAgICAgICAgIHNvdXJjZS5lYXRXaGlsZShvY3RpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMQogICAgICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgICAgIH0KICAgICAgfQogICAgICBzb3VyY2UuZWF0V2hpbGUoZGlnaXRSRSk7CiAgICAgIHZhciB0ID0gIm51bWJlciI7CiAgICAgIGlmIChzb3VyY2UuZWF0KCcuJykpIHsKICAgICAgICB0ID0gIm51bWJlciI7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxCiAgICAgIH0KICAgICAgaWYgKHNvdXJjZS5lYXQoL1tlRV0vKSkgewogICAgICAgIHQgPSAibnVtYmVyIjsKICAgICAgICBzb3VyY2UuZWF0KC9bLStdLyk7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxCiAgICAgIH0KICAgICAgcmV0dXJuIHQ7CiAgICB9CiAgICAgIAogICAgaWYgKHN5bWJvbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgvLS8pKSB7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKC8tLyk7CiAgICAgICAgaWYgKCFzb3VyY2UuZWF0KHN5bWJvbFJFKSkgewogICAgICAgICAgc291cmNlLnNraXBUb0VuZCgpOwogICAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHQgPSAidmFyaWFibGUiOwogICAgICBpZiAoY2ggPT0gJzonKSB7CiAgICAgICAgdCA9ICJ2YXJpYWJsZS0yIjsKICAgICAgfQogICAgICBzb3VyY2UuZWF0V2hpbGUoc3ltYm9sUkUpOwogICAgICByZXR1cm4gdDsgICAgCiAgICB9CiAgICAgIAogICAgcmV0dXJuICJlcnJvciI7CiAgfQogICAgCiAgZnVuY3Rpb24gbmNvbW1lbnQodHlwZSwgbmVzdCkgewogICAgaWYgKG5lc3QgPT0gMCkgewogICAgICByZXR1cm4gbm9ybWFsOwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgICAgdmFyIGN1cnJOZXN0ID0gbmVzdDsKICAgICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgICB2YXIgY2ggPSBzb3VyY2UubmV4dCgpOwogICAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgICArK2N1cnJOZXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgnfScpKSB7CiAgICAgICAgICAtLWN1cnJOZXN0OwogICAgICAgICAgaWYgKGN1cnJOZXN0ID09IDApIHsKICAgICAgICAgICAgc2V0U3RhdGUobm9ybWFsKTsKICAgICAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldFN0YXRlKG5jb21tZW50KHR5cGUsIGN1cnJOZXN0KSk7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQogIH0KICAgIAogIGZ1bmN0aW9uIHN0cmluZ0xpdGVyYWwoc291cmNlLCBzZXRTdGF0ZSkgewogICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgdmFyIGNoID0gc291cmNlLm5leHQoKTsKICAgICAgaWYgKGNoID09ICciJykgewogICAgICAgIHNldFN0YXRlKG5vcm1hbCk7CiAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICB9CiAgICAgIGlmIChjaCA9PSAnXFwnKSB7CiAgICAgICAgaWYgKHNvdXJjZS5lb2woKSB8fCBzb3VyY2UuZWF0KHdoaXRlQ2hhclJFKSkgewogICAgICAgICAgc2V0U3RhdGUoc3RyaW5nR2FwKTsKICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICB9CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyYnKSkgewogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNvdXJjZS5uZXh0KCk7IC8vIHNob3VsZCBoYW5kbGUgb3RoZXIgZXNjYXBlcyBoZXJlCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzZXRTdGF0ZShub3JtYWwpOwogICAgcmV0dXJuICJlcnJvciI7CiAgfQogIAogIGZ1bmN0aW9uIHN0cmluZ0dhcChzb3VyY2UsIHNldFN0YXRlKSB7CiAgICBpZiAoc291cmNlLmVhdCgnXFwnKSkgewogICAgICByZXR1cm4gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgc3RyaW5nTGl0ZXJhbCk7CiAgICB9CiAgICBzb3VyY2UubmV4dCgpOwogICAgc2V0U3RhdGUobm9ybWFsKTsKICAgIHJldHVybiAiZXJyb3IiOwogIH0KICAKICAKICB2YXIgd2VsbEtub3duV29yZHMgPSAoZnVuY3Rpb24oKSB7CiAgICB2YXIgd2t3ID0ge307CiAgICBmdW5jdGlvbiBzZXRUeXBlKHQpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKICAgICAgICAgIHdrd1thcmd1bWVudHNbaV1dID0gdDsKICAgICAgfQogICAgfQogICAgCiAgICBzZXRUeXBlKCJrZXl3b3JkIikoCiAgICAgICJjYXNlIiwgImNsYXNzIiwgImRhdGEiLCAiZGVmYXVsdCIsICJkZXJpdmluZyIsICJkbyIsICJlbHNlIiwgImZvcmVpZ24iLAogICAgICAiaWYiLCAiaW1wb3J0IiwgImluIiwgImluZml4IiwgImluZml4bCIsICJpbmZpeHIiLCAiaW5zdGFuY2UiLCAibGV0IiwKICAgICAgIm1vZHVsZSIsICJuZXd0eXBlIiwgIm9mIiwgInRoZW4iLCAidHlwZSIsICJ3aGVyZSIsICJfIik7CiAgICAgIAogICAgc2V0VHlwZSgia2V5d29yZCIpKAogICAgICAiXC5cLiIsICI6IiwgIjo6IiwgIj0iLCAiXFwiLCAiXCIiLCAiPC0iLCAiLT4iLCAiQCIsICJ+IiwgIj0+Iik7CiAgICAgIAogICAgc2V0VHlwZSgiYnVpbHRpbiIpKAogICAgICAiISEiLCAiJCEiLCAiJCIsICImJiIsICIrIiwgIisrIiwgIi0iLCAiLiIsICIvIiwgIi89IiwgIjwiLCAiPD0iLCAiPTw8IiwKICAgICAgIj09IiwgIj4iLCAiPj0iLCAiPj4iLCAiPj49IiwgIl4iLCAiXl4iLCAifHwiLCAiKiIsICIqKiIpOwogICAgICAKICAgIHNldFR5cGUoImJ1aWx0aW4iKSgKICAgICAgIkJvb2wiLCAiQm91bmRlZCIsICJDaGFyIiwgIkRvdWJsZSIsICJFUSIsICJFaXRoZXIiLCAiRW51bSIsICJFcSIsCiAgICAgICJGYWxzZSIsICJGaWxlUGF0aCIsICJGbG9hdCIsICJGbG9hdGluZyIsICJGcmFjdGlvbmFsIiwgIkZ1bmN0b3IiLCAiR1QiLAogICAgICAiSU8iLCAiSU9FcnJvciIsICJJbnQiLCAiSW50ZWdlciIsICJJbnRlZ3JhbCIsICJKdXN0IiwgIkxUIiwgIkxlZnQiLAogICAgICAiTWF5YmUiLCAiTW9uYWQiLCAiTm90aGluZyIsICJOdW0iLCAiT3JkIiwgIk9yZGVyaW5nIiwgIlJhdGlvbmFsIiwgIlJlYWQiLAogICAgICAiUmVhZFMiLCAiUmVhbCIsICJSZWFsRmxvYXQiLCAiUmVhbEZyYWMiLCAiUmlnaHQiLCAiU2hvdyIsICJTaG93UyIsCiAgICAgICJTdHJpbmciLCAiVHJ1ZSIpOwogICAgICAKICAgIHNldFR5cGUoImJ1aWx0aW4iKSgKICAgICAgImFicyIsICJhY29zIiwgImFjb3NoIiwgImFsbCIsICJhbmQiLCAiYW55IiwgImFwcGVuZEZpbGUiLCAiYXNUeXBlT2YiLAogICAgICAiYXNpbiIsICJhc2luaCIsICJhdGFuIiwgImF0YW4yIiwgImF0YW5oIiwgImJyZWFrIiwgImNhdGNoIiwgImNlaWxpbmciLAogICAgICAiY29tcGFyZSIsICJjb25jYXQiLCAiY29uY2F0TWFwIiwgImNvbnN0IiwgImNvcyIsICJjb3NoIiwgImN1cnJ5IiwKICAgICAgImN5Y2xlIiwgImRlY29kZUZsb2F0IiwgImRpdiIsICJkaXZNb2QiLCAiZHJvcCIsICJkcm9wV2hpbGUiLCAiZWl0aGVyIiwKICAgICAgImVsZW0iLCAiZW5jb2RlRmxvYXQiLCAiZW51bUZyb20iLCAiZW51bUZyb21UaGVuIiwgImVudW1Gcm9tVGhlblRvIiwKICAgICAgImVudW1Gcm9tVG8iLCAiZXJyb3IiLCAiZXZlbiIsICJleHAiLCAiZXhwb25lbnQiLCAiZmFpbCIsICJmaWx0ZXIiLAogICAgICAiZmxpcCIsICJmbG9hdERpZ2l0cyIsICJmbG9hdFJhZGl4IiwgImZsb2F0UmFuZ2UiLCAiZmxvb3IiLCAiZm1hcCIsCiAgICAgICJmb2xkbCIsICJmb2xkbDEiLCAiZm9sZHIiLCAiZm9sZHIxIiwgImZyb21FbnVtIiwgImZyb21JbnRlZ2VyIiwKICAgICAgImZyb21JbnRlZ3JhbCIsICJmcm9tUmF0aW9uYWwiLCAiZnN0IiwgImdjZCIsICJnZXRDaGFyIiwgImdldENvbnRlbnRzIiwKICAgICAgImdldExpbmUiLCAiaGVhZCIsICJpZCIsICJpbml0IiwgImludGVyYWN0IiwgImlvRXJyb3IiLCAiaXNEZW5vcm1hbGl6ZWQiLAogICAgICAiaXNJRUVFIiwgImlzSW5maW5pdGUiLCAiaXNOYU4iLCAiaXNOZWdhdGl2ZVplcm8iLCAiaXRlcmF0ZSIsICJsYXN0IiwKICAgICAgImxjbSIsICJsZW5ndGgiLCAibGV4IiwgImxpbmVzIiwgImxvZyIsICJsb2dCYXNlIiwgImxvb2t1cCIsICJtYXAiLAogICAgICAibWFwTSIsICJtYXBNXyIsICJtYXgiLCAibWF4Qm91bmQiLCAibWF4aW11bSIsICJtYXliZSIsICJtaW4iLCAibWluQm91bmQiLAogICAgICAibWluaW11bSIsICJtb2QiLCAibmVnYXRlIiwgIm5vdCIsICJub3RFbGVtIiwgIm51bGwiLCAib2RkIiwgIm9yIiwKICAgICAgIm90aGVyd2lzZSIsICJwaSIsICJwcmVkIiwgInByaW50IiwgInByb2R1Y3QiLCAicHJvcGVyRnJhY3Rpb24iLAogICAgICAicHV0Q2hhciIsICJwdXRTdHIiLCAicHV0U3RyTG4iLCAicXVvdCIsICJxdW90UmVtIiwgInJlYWQiLCAicmVhZEZpbGUiLAogICAgICAicmVhZElPIiwgInJlYWRMaXN0IiwgInJlYWRMbiIsICJyZWFkUGFyZW4iLCAicmVhZHMiLCAicmVhZHNQcmVjIiwKICAgICAgInJlYWxUb0ZyYWMiLCAicmVjaXAiLCAicmVtIiwgInJlcGVhdCIsICJyZXBsaWNhdGUiLCAicmV0dXJuIiwgInJldmVyc2UiLAogICAgICAicm91bmQiLCAic2NhbGVGbG9hdCIsICJzY2FubCIsICJzY2FubDEiLCAic2NhbnIiLCAic2NhbnIxIiwgInNlcSIsCiAgICAgICJzZXF1ZW5jZSIsICJzZXF1ZW5jZV8iLCAic2hvdyIsICJzaG93Q2hhciIsICJzaG93TGlzdCIsICJzaG93UGFyZW4iLAogICAgICAic2hvd1N0cmluZyIsICJzaG93cyIsICJzaG93c1ByZWMiLCAic2lnbmlmaWNhbmQiLCAic2lnbnVtIiwgInNpbiIsCiAgICAgICJzaW5oIiwgInNuZCIsICJzcGFuIiwgInNwbGl0QXQiLCAic3FydCIsICJzdWJ0cmFjdCIsICJzdWNjIiwgInN1bSIsCiAgICAgICJ0YWlsIiwgInRha2UiLCAidGFrZVdoaWxlIiwgInRhbiIsICJ0YW5oIiwgInRvRW51bSIsICJ0b0ludGVnZXIiLAogICAgICAidG9SYXRpb25hbCIsICJ0cnVuY2F0ZSIsICJ1bmN1cnJ5IiwgInVuZGVmaW5lZCIsICJ1bmxpbmVzIiwgInVudGlsIiwKICAgICAgInVud29yZHMiLCAidW56aXAiLCAidW56aXAzIiwgInVzZXJFcnJvciIsICJ3b3JkcyIsICJ3cml0ZUZpbGUiLCAiemlwIiwKICAgICAgInppcDMiLCAiemlwV2l0aCIsICJ6aXBXaXRoMyIpOwogICAgICAKICAgIHJldHVybiB3a3c7CiAgfSkoKTsKICAgIAogIAogIAogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSAgeyByZXR1cm4geyBmOiBub3JtYWwgfTsgfSwKICAgIGNvcHlTdGF0ZTogIGZ1bmN0aW9uIChzKSB7IHJldHVybiB7IGY6IHMuZiB9OyB9LAogICAgCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgdCA9IHN0YXRlLmYoc3RyZWFtLCBmdW5jdGlvbihzKSB7IHN0YXRlLmYgPSBzOyB9KTsKICAgICAgdmFyIHcgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICByZXR1cm4gKHcgaW4gd2VsbEtub3duV29yZHMpID8gd2VsbEtub3duV29yZHNbd10gOiB0OwogICAgfQogIH07Cgp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWhhc2tlbGwiLCAiaGFza2VsbCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogSGFza2VsbCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaGFza2VsbC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL2VsZWdhbnQuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9jc3MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEhhc2tlbGwgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgptb2R1bGUgVW5pcXVlUGVybXMgKAogICAgdW5pcXVlUGVybXMKICAgICkKd2hlcmUKCi0tIHwgRmluZCBhbGwgdW5pcXVlIHBlcm11dGF0aW9ucyBvZiBhIGxpc3Qgd2hlcmUgdGhlcmUgbWlnaHQgYmUgZHVwbGljYXRlcy4KdW5pcXVlUGVybXMgOjogKEVxIGEpID0+IFthXSAtPiBbW2FdXQp1bmlxdWVQZXJtcyA9IHBlcm1CYWcgLiBtYWtlQmFnCgotLSB8IEFuIHVub3JkZXJlZCBjb2xsZWN0aW9uIHdoZXJlIGR1cGxpY2F0ZSB2YWx1ZXMgYXJlIGFsbG93ZWQsCi0tIGJ1dCByZXByZXNlbnRlZCB3aXRoIGEgc2luZ2xlIHZhbHVlIGFuZCBhIGNvdW50Lgp0eXBlIEJhZyBhID0gWyhhLCBJbnQpXQoKbWFrZUJhZyA6OiAoRXEgYSkgPT4gW2FdIC0+IEJhZyBhCm1ha2VCYWcgW10gPSBbXQptYWtlQmFnIChhOmFzKSA9IG1peCBhICQgbWFrZUJhZyBhcwogIHdoZXJlCiAgICBtaXggYSBbXSAgICAgICAgICAgICAgICAgICAgICAgID0gWyhhLDEpXQogICAgbWl4IGEgKGJuQChiLG4pOmJzKSB8IGEgPT0gYiAgICA9IChiLG4rMSk6YnMKICAgICAgICAgICAgICAgICAgICAgICAgfCBvdGhlcndpc2UgPSBibiA6IG1peCBhIGJzCgpwZXJtQmFnIDo6IEJhZyBhIC0+IFtbYV1dCnBlcm1CYWcgW10gPSBbW11dCnBlcm1CYWcgYnMgPSBjb25jYXRNYXAgKFwoZixjcykgLT4gbWFwIChmOikgJCBwZXJtQmFnIGNzKSAuIG9uZU9mRWFjaCAkIGJzCiAgd2hlcmUKICAgIG9uZU9mRWFjaCBbXSA9IFtdCiAgICBvbmVPZkVhY2ggKGFuQChhLG4pOmJzKSA9CiAgICAgICAgbGV0IGJzJyA9IGlmIG4gPT0gMSB0aGVuIGJzIGVsc2UgKGEsbi0xKTpicwogICAgICAgIGluIChhLGJzJykgOiBtYXBTbmQgKGFuOikgKG9uZU9mRWFjaCBicykKICAgIAogICAgYXBTbmQgZiAoYSxiKSA9IChhLCBmIGIpCiAgICBtYXBTbmQgPSBtYXAgLiBhcFNuZAo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgdGhlbWU6ICJlbGVnYW50IgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtaGFza2VsbDwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/htmlmixed.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKICB2YXIganNNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImphdmFzY3JpcHQiKTsKICB2YXIgY3NzTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICJjc3MiKTsKCiAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7CiAgICBpZiAoc3R5bGUgPT0gInRhZyIgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIgJiYgc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQpIHsKICAgICAgaWYgKC9ec2NyaXB0JC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbiA9IGphdmFzY3JpcHQ7CiAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IGpzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9ICJqYXZhc2NyaXB0IjsKICAgICAgfQogICAgICBlbHNlIGlmICgvXnN0eWxlJC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbiA9IGNzczsKICAgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gY3NzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9ICJjc3MiOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3R5bGU7CiAgfQogIGZ1bmN0aW9uIG1heWJlQmFja3VwKHN0cmVhbSwgcGF0LCBzdHlsZSkgewogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICB2YXIgY2xvc2UgPSBjdXIuc2VhcmNoKHBhdCk7CiAgICBpZiAoY2xvc2UgPiAtMSkgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gY2xvc2UpOwogICAgcmV0dXJuIHN0eWxlOwogIH0KICBmdW5jdGlvbiBqYXZhc2NyaXB0KHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0ubWF0Y2goL148XC9ccypzY3JpcHRccyo+L2ksIGZhbHNlKSkgewogICAgICBzdGF0ZS50b2tlbiA9IGh0bWw7CiAgICAgIHN0YXRlLmN1clN0YXRlID0gbnVsbDsKICAgICAgc3RhdGUubW9kZSA9ICJodG1sIjsKICAgICAgcmV0dXJuIGh0bWwoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gbWF5YmVCYWNrdXAoc3RyZWFtLCAvPFwvXHMqc2NyaXB0XHMqPi8sCiAgICAgICAgICAgICAgICAgICAgICAganNNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOwogIH0KICBmdW5jdGlvbiBjc3Moc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5tYXRjaCgvXjxcL1xzKnN0eWxlXHMqPi9pLCBmYWxzZSkpIHsKICAgICAgc3RhdGUudG9rZW4gPSBodG1sOwogICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gbnVsbDsKICAgICAgc3RhdGUubW9kZSA9ICJodG1sIjsKICAgICAgcmV0dXJuIGh0bWwoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gbWF5YmVCYWNrdXAoc3RyZWFtLCAvPFwvXHMqc3R5bGVccyo+LywKICAgICAgICAgICAgICAgICAgICAgICBjc3NNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhdGUgPSBodG1sTW9kZS5zdGFydFN0YXRlKCk7CiAgICAgIHJldHVybiB7dG9rZW46IGh0bWwsIGxvY2FsU3RhdGU6IG51bGwsIG1vZGU6ICJodG1sIiwgaHRtbFN0YXRlOiBzdGF0ZX07CiAgICB9LAoKICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgaWYgKHN0YXRlLmxvY2FsU3RhdGUpCiAgICAgICAgdmFyIGxvY2FsID0gQ29kZU1pcnJvci5jb3B5U3RhdGUoc3RhdGUudG9rZW4gPT0gY3NzID8gY3NzTW9kZSA6IGpzTW9kZSwgc3RhdGUubG9jYWxTdGF0ZSk7CiAgICAgIHJldHVybiB7dG9rZW46IHN0YXRlLnRva2VuLCBsb2NhbFN0YXRlOiBsb2NhbCwgbW9kZTogc3RhdGUubW9kZSwKICAgICAgICAgICAgICBodG1sU3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKGh0bWxNb2RlLCBzdGF0ZS5odG1sU3RhdGUpfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuID09IGh0bWwgfHwgL15ccyo8XC8vLnRlc3QodGV4dEFmdGVyKSkKICAgICAgICByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgdGV4dEFmdGVyKTsKICAgICAgZWxzZSBpZiAoc3RhdGUudG9rZW4gPT0gamF2YXNjcmlwdCkKICAgICAgICByZXR1cm4ganNNb2RlLmluZGVudChzdGF0ZS5sb2NhbFN0YXRlLCB0ZXh0QWZ0ZXIpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGNzc01vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlcik7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICIve306IgogIH0KfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIsICJodG1sbWl4ZWQiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogSFRNTCBtaXhlZCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vdGhlbWUvZGVmYXVsdC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Imh0bWxtaXhlZC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Nzcy9kb2NzLmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEhUTUwgbWl4ZWQgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIj4KICA8IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tPgogIDxoZWFkPgogICAgPHRpdGxlPk1peGVkIEhUTUwgRXhhbXBsZTwvdGl0bGU+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICBoMSB7Zm9udC1mYW1pbHk6IGNvbWljIHNhbnM7IGNvbG9yOiAjZjBmO30KICAgICAgZGl2IHtiYWNrZ3JvdW5kOiB5ZWxsb3cgIWltcG9ydGFudDt9CiAgICAgIGJvZHkgewogICAgICAgIG1heC13aWR0aDogNTBlbTsKICAgICAgICBtYXJnaW46IDFlbSAyZW0gMWVtIDVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+TWl4ZWQgSFRNTCBFeGFtcGxlPC9oMT4KICAgIDxzY3JpcHQ+CiAgICAgIGZ1bmN0aW9uIGpzRnVuYyhhcmcxLCBhcmcyKSB7CiAgICAgICAgaWYgKGFyZzEgJiYgYXJnMikgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiYWNob28iOwogICAgICB9CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6ICJ0ZXh0L2h0bWwiLCB0YWJNb2RlOiAiaW5kZW50In0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+VGhlIEhUTUwgbWl4ZWQgbW9kZSBkZXBlbmRzIG9uIHRoZSBYTUwsIEphdmFTY3JpcHQsIGFuZCBDU1MgbW9kZXMuPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+CiAgICAocmVkZWZpbmVkLCBvbmx5IHRha2VzIGVmZmVjdCBpZiB5b3UgbG9hZCB0aGlzIHBhcnNlciBhZnRlciB0aGUKICAgIFhNTCBwYXJzZXIpLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogSmF2YVNjcmlwdCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL2RlZmF1bHQuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEphdmFTY3JpcHQgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZSAodGhlIGFjdHVhbCBuZXcgcGFyc2VyIGNoYXJhY3RlciBzdHJlYW0gaW1wbGVtZW50YXRpb24pCgpmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyaW5nKSB7CiAgdGhpcy5wb3MgPSAwOwogIHRoaXMuc3RyaW5nID0gc3RyaW5nOwp9CgpTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewogIGRvbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTt9LAogIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMucG9zICZsdDsgdGhpcy5zdHJpbmcubGVuZ3RoKQogICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOwogIH0sCiAgZWF0OiBmdW5jdGlvbihtYXRjaCkgewogICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOwogICAgZWxzZSB2YXIgb2sgPSBjaCAmYW1wOyZhbXA7IG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKTsKICAgIGlmIChvaykge3RoaXMucG9zKys7IHJldHVybiBjaDt9CiAgfSwKICBlYXRXaGlsZTogZnVuY3Rpb24obWF0Y2gpIHsKICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSk7CiAgICBpZiAodGhpcy5wb3MgPiBzdGFydCkgcmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHN0YXJ0LCB0aGlzLnBvcyk7CiAgfSwKICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCiAgY29sdW1uOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3M7fSwKICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgIHdoaWxlICgvXHMvLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHRoaXMucG9zKys7CiAgICByZXR1cm4gdGhpcy5wb3MgLSBzdGFydDsKICB9LAogIG1hdGNoOiBmdW5jdGlvbihwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHsKICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICBmdW5jdGlvbiBjYXNlZChzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fQogICAgICBpZiAoY2FzZWQodGhpcy5zdHJpbmcpLmluZGV4T2YoY2FzZWQocGF0dGVybiksIHRoaXMucG9zKSA9PSB0aGlzLnBvcykgewogICAgICAgIGlmIChjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gc3RyLmxlbmd0aDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTsKICAgICAgaWYgKG1hdGNoICZhbXA7JmFtcDsgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgcmV0dXJuIG1hdGNoOwogICAgfQogIH0KfTsKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5KYXZhU2NyaXB0IG1vZGUgc3VwcG9ydHMgYSBzaW5nbGUgY29uZmlndXJhdGlvbgogICAgb3B0aW9uLCA8Y29kZT5qc29uPC9jb2RlPiwgd2hpY2ggd2lsbCBzZXQgdGhlIG1vZGUgdG8gZXhwZWN0IEpTT04KICAgIGRhdGEgcmF0aGVyIHRoYW4gYSBKYXZhU2NyaXB0IHByb2dyYW0uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2phdmFzY3JpcHQ8L2NvZGU+LCA8Y29kZT5hcHBsaWNhdGlvbi9qc29uPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZpZy5qc29uOwoKICAvLyBUb2tlbml6ZXIKCiAgdmFyIGtleXdvcmRzID0gZnVuY3Rpb24oKXsKICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiAia2V5d29yZCJ9O30KICAgIHZhciBBID0ga3coImtleXdvcmQgYSIpLCBCID0ga3coImtleXdvcmQgYiIpLCBDID0ga3coImtleXdvcmQgYyIpOwogICAgdmFyIG9wZXJhdG9yID0ga3coIm9wZXJhdG9yIiksIGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifTsKICAgIHJldHVybiB7CiAgICAgICJpZiI6IEEsICJ3aGlsZSI6IEEsICJ3aXRoIjogQSwgImVsc2UiOiBCLCAiZG8iOiBCLCAidHJ5IjogQiwgImZpbmFsbHkiOiBCLAogICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVlIjogQywgIm5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLAogICAgICAidmFyIjoga3coInZhciIpLCAiZnVuY3Rpb24iOiBrdygiZnVuY3Rpb24iKSwgImNhdGNoIjoga3coImNhdGNoIiksCiAgICAgICJmb3IiOiBrdygiZm9yIiksICJzd2l0Y2giOiBrdygic3dpdGNoIiksICJjYXNlIjoga3coImNhc2UiKSwgImRlZmF1bHQiOiBrdygiZGVmYXVsdCIpLAogICAgICAiaW4iOiBvcGVyYXRvciwgInR5cGVvZiI6IG9wZXJhdG9yLCAiaW5zdGFuY2VvZiI6IG9wZXJhdG9yLAogICAgICAidHJ1ZSI6IGF0b20sICJmYWxzZSI6IGF0b20sICJudWxsIjogYXRvbSwgInVuZGVmaW5lZCI6IGF0b20sICJOYU4iOiBhdG9tLCAiSW5maW5pdHkiOiBhdG9tCiAgICB9OwogIH0oKTsKCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xdLzsKCiAgZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgZikgewogICAgc3RhdGUudG9rZW5pemUgPSBmOwogICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7CiAgfQoKICBmdW5jdGlvbiBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBlbmQpIHsKICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQ7CiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChuZXh0ID09IGVuZCAmJiAhZXNjYXBlZCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICB9CiAgICByZXR1cm4gZXNjYXBlZDsKICB9CgogIC8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGhvdXQKICAvLyBjb25zaW5nIHVwIHRvbnMgb2Ygb2JqZWN0cy4KICB2YXIgdHlwZSwgY29udGVudDsKICBmdW5jdGlvbiByZXQodHAsIHN0eWxlLCBjb250KSB7CiAgICB0eXBlID0gdHA7IGNvbnRlbnQgPSBjb250OwogICAgcmV0dXJuIHN0eWxlOwogIH0KCiAgZnVuY3Rpb24ganNUb2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAnIicgfHwgY2ggPT0gIiciKQogICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwganNUb2tlblN0cmluZyhjaCkpOwogICAgZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpCiAgICAgIHJldHVybiByZXQoY2gpOwogICAgZWxzZSBpZiAoY2ggPT0gIjAiICYmIHN0cmVhbS5lYXQoL3gvaSkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXGRhLWZdL2kpOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICB9ICAgICAgCiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXlxkKig/OlwuXGQqKT8oPzplWytcLV0/XGQrKT8vKTsKICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJlciIpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwganNUb2tlbkNvbW1lbnQpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoIi8iKSkgewogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKICAgICAgfQogICAgICBlbHNlIGlmIChzdGF0ZS5yZUFsbG93ZWQpIHsKICAgICAgICBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCAiLyIpOwogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW2dpbXldLyk7IC8vICd5JyBpcyAic3RpY2t5IiBvcHRpb24gaW4gTW96aWxsYQogICAgICAgIHJldHVybiByZXQoInJlZ2V4cCIsICJzdHJpbmciKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgbnVsbCwgc3RyZWFtLmN1cnJlbnQoKSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gcmV0KCJlcnJvciIsICJlcnJvciIpOwogICAgfQogICAgZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBudWxsLCBzdHJlYW0uY3VycmVudCgpKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLCBrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIGtleXdvcmRzW3dvcmRdOwogICAgICByZXR1cm4ga25vd24gPyByZXQoa25vd24udHlwZSwga25vd24uc3R5bGUsIHdvcmQpIDoKICAgICAgICAgICAgICAgICAgICAgcmV0KCJ2YXJpYWJsZSIsICJ2YXJpYWJsZSIsIHdvcmQpOwogICAgfQogIH0KCiAgZnVuY3Rpb24ganNUb2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKCFuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBxdW90ZSkpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGpzVG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKICAgICAgaWYgKGNoID09ICIvIiAmJiBtYXliZUVuZCkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogIH0KCiAgLy8gUGFyc2VyCgogIHZhciBhdG9taWNUeXBlcyA9IHsiYXRvbSI6IHRydWUsICJudW1iZXIiOiB0cnVlLCAidmFyaWFibGUiOiB0cnVlLCAic3RyaW5nIjogdHJ1ZSwgInJlZ2V4cCI6IHRydWV9OwoKICBmdW5jdGlvbiBKU0xleGljYWwoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYsIGluZm8pIHsKICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDsKICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMucHJldiA9IHByZXY7CiAgICB0aGlzLmluZm8gPSBpbmZvOwogICAgaWYgKGFsaWduICE9IG51bGwpIHRoaXMuYWxpZ24gPSBhbGlnbjsKICB9CgogIGZ1bmN0aW9uIGluU2NvcGUoc3RhdGUsIHZhcm5hbWUpIHsKICAgIGZvciAodmFyIHYgPSBzdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpCiAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBwYXJzZUpTKHN0YXRlLCBzdHlsZSwgdHlwZSwgY29udGVudCwgc3RyZWFtKSB7CiAgICB2YXIgY2MgPSBzdGF0ZS5jYzsKICAgIC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy4KICAgIC8vIChMZXNzIHdhc3RlZnVsIHRoYW4gY29uc2luZyB1cCBhIGh1bmRyZWQgY2xvc3VyZXMgb24gZXZlcnkgY2FsbC4pCiAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7CiAgCiAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoImFsaWduIikpCiAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSB0cnVlOwoKICAgIHdoaWxlKHRydWUpIHsKICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5wb3AoKSA6IGpzb25Nb2RlID8gZXhwcmVzc2lvbiA6IHN0YXRlbWVudDsKICAgICAgaWYgKGNvbWJpbmF0b3IodHlwZSwgY29udGVudCkpIHsKICAgICAgICB3aGlsZShjYy5sZW5ndGggJiYgY2NbY2MubGVuZ3RoIC0gMV0ubGV4KQogICAgICAgICAgY2MucG9wKCkoKTsKICAgICAgICBpZiAoY3gubWFya2VkKSByZXR1cm4gY3gubWFya2VkOwogICAgICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIgJiYgaW5TY29wZShzdGF0ZSwgY29udGVudCkpIHJldHVybiAidmFyaWFibGUtMiI7CiAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBDb21iaW5hdG9yIHV0aWxzCgogIHZhciBjeCA9IHtzdGF0ZTogbnVsbCwgY29sdW1uOiBudWxsLCBtYXJrZWQ6IG51bGwsIGNjOiBudWxsfTsKICBmdW5jdGlvbiBwYXNzKCkgewogICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVzaChhcmd1bWVudHNbaV0pOwogIH0KICBmdW5jdGlvbiBjb250KCkgewogICAgcGFzcy5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIHJlZ2lzdGVyKHZhcm5hbWUpIHsKICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgaWYgKHN0YXRlLmNvbnRleHQpIHsKICAgICAgY3gubWFya2VkID0gImRlZiI7CiAgICAgIGZvciAodmFyIHYgPSBzdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpCiAgICAgICAgaWYgKHYubmFtZSA9PSB2YXJuYW1lKSByZXR1cm47CiAgICAgIHN0YXRlLmxvY2FsVmFycyA9IHtuYW1lOiB2YXJuYW1lLCBuZXh0OiBzdGF0ZS5sb2NhbFZhcnN9OwogICAgfQogIH0KCiAgLy8gQ29tYmluYXRvcnMKCiAgdmFyIGRlZmF1bHRWYXJzID0ge25hbWU6ICJ0aGlzIiwgbmV4dDoge25hbWU6ICJhcmd1bWVudHMifX07CiAgZnVuY3Rpb24gcHVzaGNvbnRleHQoKSB7CiAgICBpZiAoIWN4LnN0YXRlLmNvbnRleHQpIGN4LnN0YXRlLmxvY2FsVmFycyA9IGRlZmF1bHRWYXJzOwogICAgY3guc3RhdGUuY29udGV4dCA9IHtwcmV2OiBjeC5zdGF0ZS5jb250ZXh0LCB2YXJzOiBjeC5zdGF0ZS5sb2NhbFZhcnN9OwogIH0KICBmdW5jdGlvbiBwb3Bjb250ZXh0KCkgewogICAgY3guc3RhdGUubG9jYWxWYXJzID0gY3guc3RhdGUuY29udGV4dC52YXJzOwogICAgY3guc3RhdGUuY29udGV4dCA9IGN4LnN0YXRlLmNvbnRleHQucHJldjsKICB9CiAgZnVuY3Rpb24gcHVzaGxleCh0eXBlLCBpbmZvKSB7CiAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgICBzdGF0ZS5sZXhpY2FsID0gbmV3IEpTTGV4aWNhbChzdGF0ZS5pbmRlbnRlZCwgY3guc3RyZWFtLmNvbHVtbigpLCB0eXBlLCBudWxsLCBzdGF0ZS5sZXhpY2FsLCBpbmZvKQogICAgfTsKICAgIHJlc3VsdC5sZXggPSB0cnVlOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gcG9wbGV4KCkgewogICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CiAgICBpZiAoc3RhdGUubGV4aWNhbC5wcmV2KSB7CiAgICAgIGlmIChzdGF0ZS5sZXhpY2FsLnR5cGUgPT0gIikiKQogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUubGV4aWNhbC5pbmRlbnRlZDsKICAgICAgc3RhdGUubGV4aWNhbCA9IHN0YXRlLmxleGljYWwucHJldjsKICAgIH0KICB9CiAgcG9wbGV4LmxleCA9IHRydWU7CgogIGZ1bmN0aW9uIGV4cGVjdCh3YW50ZWQpIHsKICAgIHJldHVybiBmdW5jdGlvbiBleHBlY3RpbmcodHlwZSkgewogICAgICBpZiAodHlwZSA9PSB3YW50ZWQpIHJldHVybiBjb250KCk7CiAgICAgIGVsc2UgaWYgKHdhbnRlZCA9PSAiOyIpIHJldHVybiBwYXNzKCk7CiAgICAgIGVsc2UgcmV0dXJuIGNvbnQoYXJndW1lbnRzLmNhbGxlZSk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gc3RhdGVtZW50KHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ2YXIiKSByZXR1cm4gY29udChwdXNobGV4KCJ2YXJkZWYiKSwgdmFyZGVmMSwgZXhwZWN0KCI7IiksIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAia2V5d29yZCBhIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBzdGF0ZW1lbnQsIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAia2V5d29yZCBiIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBzdGF0ZW1lbnQsIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxvY2ssIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVybiBjb250KCk7CiAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7CiAgICBpZiAodHlwZSA9PSAiZm9yIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHBlY3QoIigiKSwgcHVzaGxleCgiKSIpLCBmb3JzcGVjMSwgZXhwZWN0KCIpIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wbGV4LCBzdGF0ZW1lbnQsIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0IiksIG1heWJlbGFiZWwpOwogICAgaWYgKHR5cGUgPT0gInN3aXRjaCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgcHVzaGxleCgifSIsICJzd2l0Y2giKSwgZXhwZWN0KCJ7IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIHBvcGxleCwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJjYXNlIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI6IikpOwogICAgaWYgKHR5cGUgPT0gImRlZmF1bHQiKSByZXR1cm4gY29udChleHBlY3QoIjoiKSk7CiAgICBpZiAodHlwZSA9PSAiY2F0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHB1c2hjb250ZXh0LCBleHBlY3QoIigiKSwgZnVuYXJnLCBleHBlY3QoIikiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCwgcG9wbGV4LCBwb3Bjb250ZXh0KTsKICAgIHJldHVybiBwYXNzKHB1c2hsZXgoInN0YXQiKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCI7IiksIHBvcGxleCk7CiAgfQogIGZ1bmN0aW9uIGV4cHJlc3Npb24odHlwZSkgewogICAgaWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGMiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBleHByZXNzaW9uLCBleHBlY3QoIikiKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJvcGVyYXRvciIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIGNvbW1hc2VwKGV4cHJlc3Npb24sICJdIiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgY29tbWFzZXAob2JqcHJvcCwgIn0iKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICAgIHJldHVybiBjb250KCk7CiAgfQogIGZ1bmN0aW9uIG1heWJlb3BlcmF0b3IodHlwZSwgdmFsdWUpIHsKICAgIGlmICh0eXBlID09ICJvcGVyYXRvciIgJiYgL1wrXCt8LS0vLnRlc3QodmFsdWUpKSByZXR1cm4gY29udChtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJvcGVyYXRvciIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm47CiAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgY29tbWFzZXAoZXhwcmVzc2lvbiwgIikiKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICIuIikgcmV0dXJuIGNvbnQocHJvcGVydHksIG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIGV4cHJlc3Npb24sIGV4cGVjdCgiXSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogIH0KICBmdW5jdGlvbiBtYXliZWxhYmVsKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1lbnQpOwogICAgcmV0dXJuIHBhc3MobWF5YmVvcGVyYXRvciwgZXhwZWN0KCI7IiksIHBvcGxleCk7CiAgfQogIGZ1bmN0aW9uIHByb3BlcnR5KHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHtjeC5tYXJrZWQgPSAicHJvcGVydHkiOyByZXR1cm4gY29udCgpO30KICB9CiAgZnVuY3Rpb24gb2JqcHJvcCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSBjeC5tYXJrZWQgPSAicHJvcGVydHkiOwogICAgaWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChleHBlY3QoIjoiKSwgZXhwcmVzc2lvbik7CiAgfQogIGZ1bmN0aW9uIGNvbW1hc2VwKHdoYXQsIGVuZCkgewogICAgZnVuY3Rpb24gcHJvY2VlZCh0eXBlKSB7CiAgICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQod2hhdCwgcHJvY2VlZCk7CiAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgcmV0dXJuIGNvbnQoZXhwZWN0KGVuZCkpOwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uIGNvbW1hU2VwYXJhdGVkKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpOwogICAgICBlbHNlIHJldHVybiBwYXNzKHdoYXQsIHByb2NlZWQpOwogICAgfTsKICB9CiAgZnVuY3Rpb24gYmxvY2sodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIHBhc3Moc3RhdGVtZW50LCBibG9jayk7CiAgfQogIGZ1bmN0aW9uIHZhcmRlZjEodHlwZSwgdmFsdWUpIHsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpe3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQodmFyZGVmMik7fQogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gdmFyZGVmMih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID09ICI9IikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgdmFyZGVmMik7CiAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHZhcmRlZjEpOwogIH0KICBmdW5jdGlvbiBmb3JzcGVjMSh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyIikgcmV0dXJuIGNvbnQodmFyZGVmMSwgZm9yc3BlYzIpOwogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gcGFzcyhmb3JzcGVjMik7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSByZXR1cm4gY29udChmb3JtYXliZWluKTsKICAgIHJldHVybiBwYXNzKGZvcnNwZWMyKTsKICB9CiAgZnVuY3Rpb24gZm9ybWF5YmVpbih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID09ICJpbiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvciwgZm9yc3BlYzIpOwogIH0KICBmdW5jdGlvbiBmb3JzcGVjMih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udChmb3JzcGVjMyk7CiAgICBpZiAodmFsdWUgPT0gImluIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CiAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3QoIjsiKSwgZm9yc3BlYzMpOwogIH0KICBmdW5jdGlvbiBmb3JzcGVjMyh0eXBlKSB7CiAgICBpZiAodHlwZSAhPSAiKSIpIGNvbnQoZXhwcmVzc2lvbik7CiAgfQogIGZ1bmN0aW9uIGZ1bmN0aW9uZGVmKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChmdW5jdGlvbmRlZik7fQogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIHB1c2hjb250ZXh0LCBjb21tYXNlcChmdW5hcmcsICIpIiksIHBvcGxleCwgc3RhdGVtZW50LCBwb3Bjb250ZXh0KTsKICB9CiAgZnVuY3Rpb24gZnVuYXJnKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udCgpO30KICB9CgogIC8vIEludGVyZmFjZQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICByZXR1cm4gewogICAgICAgIHRva2VuaXplOiBqc1Rva2VuQmFzZSwKICAgICAgICByZUFsbG93ZWQ6IHRydWUsCiAgICAgICAgY2M6IFtdLAogICAgICAgIGxleGljYWw6IG5ldyBKU0xleGljYWwoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCAiYmxvY2siLCBmYWxzZSksCiAgICAgICAgbG9jYWxWYXJzOiBudWxsLAogICAgICAgIGNvbnRleHQ6IG51bGwsCiAgICAgICAgaW5kZW50ZWQ6IDAKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmICghc3RhdGUubGV4aWNhbC5oYXNPd25Qcm9wZXJ0eSgiYWxpZ24iKSkKICAgICAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSBmYWxzZTsKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAodHlwZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgc3RhdGUucmVBbGxvd2VkID0gdHlwZSA9PSAib3BlcmF0b3IiIHx8IHR5cGUgPT0gImtleXdvcmQgYyIgfHwgdHlwZS5tYXRjaCgvXltcW3t9XCgsOzpdJC8pOwogICAgICByZXR1cm4gcGFyc2VKUyhzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0ganNUb2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLAogICAgICAgICAgdHlwZSA9IGxleGljYWwudHlwZSwgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSB0eXBlOwogICAgICBpZiAodHlwZSA9PSAidmFyZGVmIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyA0OwogICAgICBlbHNlIGlmICh0eXBlID09ICJmb3JtIiAmJiBmaXJzdENoYXIgPT0gInsiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZDsKICAgICAgZWxzZSBpZiAodHlwZSA9PSAic3RhdCIgfHwgdHlwZSA9PSAiZm9ybSIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgaW5kZW50VW5pdDsKICAgICAgZWxzZSBpZiAobGV4aWNhbC5pbmZvID09ICJzd2l0Y2giICYmICFjbG9zaW5nKQogICAgICAgIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKC9eKD86Y2FzZXxkZWZhdWx0KVxiLy50ZXN0KHRleHRBZnRlcikgPyBpbmRlbnRVbml0IDogMiAqIGluZGVudFVuaXQpOwogICAgICBlbHNlIGlmIChsZXhpY2FsLmFsaWduKSByZXR1cm4gbGV4aWNhbC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAiOnt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2phdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIpOwpDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL2pzb24iLCB7bmFtZTogImphdmFzY3JpcHQiLCBqc29uOiB0cnVlfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogTHVhIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJsdWEuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9uZWF0LmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9jc3MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEx1YSBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tW1sKZXhhbXBsZSB1c2VsZXNzIGNvZGUgdG8gc2hvdyBsdWEgc3ludGF4IGhpZ2hsaWdodGluZwp0aGlzIGlzIG11bHRpbGluZSBjb21tZW50Cl1dCgpmdW5jdGlvbiBibGFoYmxhaGJsYWgoeCkKCiAgbG9jYWwgdGFibGUgPSB7CiAgICAiYXNkIiA9IDEyMywKICAgICJ4IiA9IDAuMzQsICAKICB9CiAgaWYgeCB+PSAzIHRoZW4KICAgIHByaW50KCB4ICkKICBlbHNlaWYgeCA9PSAic3RyaW5nIgogICAgbXlfY3VzdG9tX2Z1bmN0aW9uKCAweDM0ICkKICBlbHNlCiAgICB1bmtub3duX2Z1bmN0aW9uKCAic29tZSBzdHJpbmciICkKICBlbmQKCiAgLS1zaW5nbGUgbGluZSBjb21tZW50CiAgCmVuZAoKZnVuY3Rpb24gYmxhYmxhYmxhMygpCgogIGZvciBrLHYgaW4gaXBhaXJzKCB0YWJsZSApIGRvCiAgICAtLWFiY2RlLi4KICAgIHk9Wz1bCiAgeD1bWwogICAgICB4IGlzIGEgbXVsdGkgbGluZSBzdHJpbmcKICAgXV0KICBidXQgaXRzIGRlZmluaXRpb24gaXMgaXNpZGUgYSBoaWdoZXN0IGxldmVsIHN0cmluZyEKICBdPV0KICAgIHByaW50KCIgXCJcIiAiKQoKICAgIHMgPSBtYXRoLnNpbiggeCApCiAgZW5kCgplbmQKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIHRhYk1vZGU6ICJpbmRlbnQiLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgdGhlbWU6ICJuZWF0IgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPkxvb3NlbHkgYmFzZWQgb24gRnJhbmNpc3plawogICAgV2F3cnphaydzIDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8xL2NvbnRyaWIvbHVhIj5Db2RlTWlycm9yCiAgICAxIG1vZGU8L2E+LiBPbmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMKICAgIHN1cHBvcnRlZCwgPGNvZGU+c3BlY2lhbHM8L2NvZGU+LCB0byB3aGljaCB5b3UgY2FuIHByb3ZpZGUgYW4KICAgIGFycmF5IG9mIHN0cmluZ3MgdG8gaGF2ZSB0aG9zZSBpZGVudGlmaWVycyBoaWdobGlnaHRlZCB3aXRoCiAgICB0aGUgPGNvZGU+bHVhLXNwZWNpYWw8L2NvZGU+IHN0eWxlLjwvcD4KICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtbHVhPC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/lua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gTFVBIG1vZGUuIFBvcnRlZCB0byBDb2RlTWlycm9yIDIgZnJvbSBGcmFuY2lzemVrIFdhd3J6YWsncwovLyBDb2RlTWlycm9yIDEgbW9kZS4KLy8gaGlnaGxpZ2h0cyBrZXl3b3Jkcywgc3RyaW5ncywgY29tbWVudHMgKG5vIGxldmVsaW5nIHN1cHBvcnRlZCEgKCJbPT1bIikpLCB0b2tlbnMsIGJhc2ljIGluZGVudGluZwogCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibHVhIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwoKICBmdW5jdGlvbiBwcmVmaXhSRSh3b3JkcykgewogICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiICsgd29yZHMuam9pbigifCIpICsgIikiLCAiaSIpOwogIH0KICBmdW5jdGlvbiB3b3JkUkUod29yZHMpIHsKICAgIHJldHVybiBuZXcgUmVnRXhwKCJeKD86IiArIHdvcmRzLmpvaW4oInwiKSArICIpJCIsICJpIik7CiAgfQogIHZhciBzcGVjaWFscyA9IHdvcmRSRShwYXJzZXJDb25maWcuc3BlY2lhbHMgfHwgW10pOwogCiAgLy8gbG9uZyBsaXN0IG9mIHN0YW5kYXJkIGZ1bmN0aW9ucyBmcm9tIGx1YSBtYW51YWwKICB2YXIgYnVpbHRpbnMgPSB3b3JkUkUoWwogICAgIl9HIiwiX1ZFUlNJT04iLCJhc3NlcnQiLCJjb2xsZWN0Z2FyYmFnZSIsImRvZmlsZSIsImVycm9yIiwiZ2V0ZmVudiIsImdldG1ldGF0YWJsZSIsImlwYWlycyIsImxvYWQiLAogICAgImxvYWRmaWxlIiwibG9hZHN0cmluZyIsIm1vZHVsZSIsIm5leHQiLCJwYWlycyIsInBjYWxsIiwicHJpbnQiLCJyYXdlcXVhbCIsInJhd2dldCIsInJhd3NldCIsInJlcXVpcmUiLAogICAgInNlbGVjdCIsInNldGZlbnYiLCJzZXRtZXRhdGFibGUiLCJ0b251bWJlciIsInRvc3RyaW5nIiwidHlwZSIsInVucGFjayIsInhwY2FsbCIsCgogICAgImNvcm91dGluZS5jcmVhdGUiLCJjb3JvdXRpbmUucmVzdW1lIiwiY29yb3V0aW5lLnJ1bm5pbmciLCJjb3JvdXRpbmUuc3RhdHVzIiwiY29yb3V0aW5lLndyYXAiLCJjb3JvdXRpbmUueWllbGQiLAoKICAgICJkZWJ1Zy5kZWJ1ZyIsImRlYnVnLmdldGZlbnYiLCJkZWJ1Zy5nZXRob29rIiwiZGVidWcuZ2V0aW5mbyIsImRlYnVnLmdldGxvY2FsIiwiZGVidWcuZ2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5nZXRyZWdpc3RyeSIsImRlYnVnLmdldHVwdmFsdWUiLCJkZWJ1Zy5zZXRmZW52IiwiZGVidWcuc2V0aG9vayIsImRlYnVnLnNldGxvY2FsIiwiZGVidWcuc2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5zZXR1cHZhbHVlIiwiZGVidWcudHJhY2ViYWNrIiwKCiAgICAiY2xvc2UiLCJmbHVzaCIsImxpbmVzIiwicmVhZCIsInNlZWsiLCJzZXR2YnVmIiwid3JpdGUiLAoKICAgICJpby5jbG9zZSIsImlvLmZsdXNoIiwiaW8uaW5wdXQiLCJpby5saW5lcyIsImlvLm9wZW4iLCJpby5vdXRwdXQiLCJpby5wb3BlbiIsImlvLnJlYWQiLCJpby5zdGRlcnIiLCJpby5zdGRpbiIsCiAgICAiaW8uc3Rkb3V0IiwiaW8udG1wZmlsZSIsImlvLnR5cGUiLCJpby53cml0ZSIsCgogICAgIm1hdGguYWJzIiwibWF0aC5hY29zIiwibWF0aC5hc2luIiwibWF0aC5hdGFuIiwibWF0aC5hdGFuMiIsIm1hdGguY2VpbCIsIm1hdGguY29zIiwibWF0aC5jb3NoIiwibWF0aC5kZWciLAogICAgIm1hdGguZXhwIiwibWF0aC5mbG9vciIsIm1hdGguZm1vZCIsIm1hdGguZnJleHAiLCJtYXRoLmh1Z2UiLCJtYXRoLmxkZXhwIiwibWF0aC5sb2ciLCJtYXRoLmxvZzEwIiwibWF0aC5tYXgiLAogICAgIm1hdGgubWluIiwibWF0aC5tb2RmIiwibWF0aC5waSIsIm1hdGgucG93IiwibWF0aC5yYWQiLCJtYXRoLnJhbmRvbSIsIm1hdGgucmFuZG9tc2VlZCIsIm1hdGguc2luIiwibWF0aC5zaW5oIiwKICAgICJtYXRoLnNxcnQiLCJtYXRoLnRhbiIsIm1hdGgudGFuaCIsCgogICAgIm9zLmNsb2NrIiwib3MuZGF0ZSIsIm9zLmRpZmZ0aW1lIiwib3MuZXhlY3V0ZSIsIm9zLmV4aXQiLCJvcy5nZXRlbnYiLCJvcy5yZW1vdmUiLCJvcy5yZW5hbWUiLCJvcy5zZXRsb2NhbGUiLAogICAgIm9zLnRpbWUiLCJvcy50bXBuYW1lIiwKCiAgICAicGFja2FnZS5jcGF0aCIsInBhY2thZ2UubG9hZGVkIiwicGFja2FnZS5sb2FkZXJzIiwicGFja2FnZS5sb2FkbGliIiwicGFja2FnZS5wYXRoIiwicGFja2FnZS5wcmVsb2FkIiwKICAgICJwYWNrYWdlLnNlZWFsbCIsCgogICAgInN0cmluZy5ieXRlIiwic3RyaW5nLmNoYXIiLCJzdHJpbmcuZHVtcCIsInN0cmluZy5maW5kIiwic3RyaW5nLmZvcm1hdCIsInN0cmluZy5nbWF0Y2giLCJzdHJpbmcuZ3N1YiIsCiAgICAic3RyaW5nLmxlbiIsInN0cmluZy5sb3dlciIsInN0cmluZy5tYXRjaCIsInN0cmluZy5yZXAiLCJzdHJpbmcucmV2ZXJzZSIsInN0cmluZy5zdWIiLCJzdHJpbmcudXBwZXIiLAoKICAgICJ0YWJsZS5jb25jYXQiLCJ0YWJsZS5pbnNlcnQiLCJ0YWJsZS5tYXhuIiwidGFibGUucmVtb3ZlIiwidGFibGUuc29ydCIKICBdKTsKICB2YXIga2V5d29yZHMgPSB3b3JkUkUoWyJhbmQiLCJicmVhayIsImVsc2VpZiIsImZhbHNlIiwibmlsIiwibm90Iiwib3IiLCJyZXR1cm4iLAoJCQkgInRydWUiLCJmdW5jdGlvbiIsICJlbmQiLCAiaWYiLCAidGhlbiIsICJlbHNlIiwgImRvIiwgCgkJCSAid2hpbGUiLCAicmVwZWF0IiwgInVudGlsIiwgImZvciIsICJpbiIsICJsb2NhbCIgXSk7CgogIHZhciBpbmRlbnRUb2tlbnMgPSB3b3JkUkUoWyJmdW5jdGlvbiIsICJpZiIsInJlcGVhdCIsImZvciIsIndoaWxlIiwgIlxcKCIsICJ7Il0pOwogIHZhciBkZWRlbnRUb2tlbnMgPSB3b3JkUkUoWyJlbmQiLCAidW50aWwiLCAiXFwpIiwgIn0iXSk7CiAgdmFyIGRlZGVudFBhcnRpYWwgPSBwcmVmaXhSRShbImVuZCIsICJ1bnRpbCIsICJcXCkiLCAifSIsICJlbHNlIiwgImVsc2VpZiJdKTsKCiAgZnVuY3Rpb24gcmVhZEJyYWNrZXQoc3RyZWFtKSB7CiAgICB2YXIgbGV2ZWwgPSAwOwogICAgd2hpbGUgKHN0cmVhbS5lYXQoIj0iKSkgKytsZXZlbDsKICAgIHN0cmVhbS5lYXQoIlsiKTsKICAgIHJldHVybiBsZXZlbDsKICB9CgogIGZ1bmN0aW9uIG5vcm1hbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KCItIikpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIlsiKSkKICAgICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAiY29tbWVudCIpKShzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfSAKICAgIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikKICAgICAgcmV0dXJuIChzdGF0ZS5jdXIgPSBzdHJpbmcoY2gpKShzdHJlYW0sIHN0YXRlKTsKICAgIGlmIChjaCA9PSAiWyIgJiYgL1tcWz1dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKQogICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAic3RyaW5nIikpKHN0cmVhbSwgc3RhdGUpOwogICAgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHcuJV0vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfQogICAgaWYgKC9bXHdfXS8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXy5dLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBicmFja2V0ZWQobGV2ZWwsIHN0eWxlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3VybGV2ID0gbnVsbCwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGN1cmxldiA9PSBudWxsKSB7aWYgKGNoID09ICJdIikgY3VybGV2ID0gMDt9CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIj0iKSArK2N1cmxldjsKICAgICAgICBlbHNlIGlmIChjaCA9PSAiXSIgJiYgY3VybGV2ID09IGxldmVsKSB7IHN0YXRlLmN1ciA9IG5vcm1hbDsgYnJlYWs7IH0KICAgICAgICBlbHNlIGN1cmxldiA9IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhazsKICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoIWVzY2FwZWQpIHN0YXRlLmN1ciA9IG5vcm1hbDsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CiAgICAKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbCkgewogICAgICByZXR1cm4ge2Jhc2Vjb2w6IGJhc2Vjb2wgfHwgMCwgaW5kZW50RGVwdGg6IDAsIGN1cjogbm9ybWFsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUuY3VyKHN0cmVhbSwgc3RhdGUpOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIGlmIChzdHlsZSA9PSAidmFyaWFibGUiKSB7CiAgICAgICAgaWYgKGtleXdvcmRzLnRlc3Qod29yZCkpIHN0eWxlID0gImtleXdvcmQiOwogICAgICAgIGVsc2UgaWYgKGJ1aWx0aW5zLnRlc3Qod29yZCkpIHN0eWxlID0gImJ1aWx0aW4iOwoJZWxzZSBpZiAoc3BlY2lhbHMudGVzdCh3b3JkKSkgc3R5bGUgPSAidmFyaWFibGUtMiI7CiAgICAgIH0KICAgICAgaWYgKChzdHlsZSAhPSAibHVhLWNvbW1lbnQiKSAmJiAoc3R5bGUgIT0gImx1YS1zdHJpbmciKSl7CiAgICAgICAgaWYgKGluZGVudFRva2Vucy50ZXN0KHdvcmQpKSArK3N0YXRlLmluZGVudERlcHRoOwogICAgICAgIGVsc2UgaWYgKGRlZGVudFRva2Vucy50ZXN0KHdvcmQpKSAtLXN0YXRlLmluZGVudERlcHRoOwogICAgICB9CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBjbG9zaW5nID0gZGVkZW50UGFydGlhbC50ZXN0KHRleHRBZnRlcik7CiAgICAgIHJldHVybiBzdGF0ZS5iYXNlY29sICsgaW5kZW50VW5pdCAqIChzdGF0ZS5pbmRlbnREZXB0aCAtIChjbG9zaW5nID8gMSA6IDApKTsKICAgIH0KICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWx1YSIsICJsdWEiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogUEhQIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2Nzcy9jc3MuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2NsaWtlL2NsaWtlLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJwaHAuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBQSFAgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8P3BocApmdW5jdGlvbiBoZWxsbygkd2hvKSB7CglyZXR1cm4gIkhlbGxvICIgLiAkd2hvOwp9Cj8+CjxwPlRoZSBwcm9ncmFtIHNheXMgPD89IGhlbGxvKCJXb3JsZCIpID8+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIEpTIGNvZGUiKTsgLy8gYWxzbyBjb2xvcmVkCjwvc2NyaXB0Pgo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwIiwKICAgICAgICBpbmRlbnRVbml0OiA4LAogICAgICAgIGluZGVudFdpdGhUYWJzOiB0cnVlLAogICAgICAgIGVudGVyTW9kZTogImtlZXAiLAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgSFRNTC9QSFAgbW9kZSBiYXNlZCBvbgogICAgdGhlIDxhIGhyZWY9Ii4uL2NsaWtlLyI+Qy1saWtlPC9hPiBtb2RlLiBEZXBlbmRzIG9uIFhNTCwKICAgIEphdmFTY3JpcHQsIENTUywgYW5kIEMtbGlrZSBtb2Rlcy48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwPC9jb2RlPiAoSFRNTCB3aXRoIFBIUCBjb2RlKSwgPGNvZGU+dGV4dC94LXBocDwvY29kZT4gKHBsYWluLCBub24td3JhcHBlZCBQSFAgY29kZSkuPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICBmdW5jdGlvbiBoZXJlZG9jKGRlbGltKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKGRlbGltKSkgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICBlbHNlIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfQogIH0KICB2YXIgcGhwQ29uZmlnID0gewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiBrZXl3b3JkcygiYWJzdHJhY3QgYW5kIGFycmF5IGFzIGJyZWFrIGNhc2UgY2F0Y2ggY2Z1bmN0aW9uIGNsYXNzIGNsb25lIGNvbnN0IGNvbnRpbnVlIGRlY2xhcmUgIiArCiAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgZG8gZWxzZSBlbHNlaWYgZW5kZGVjbGFyZSBlbmRmb3IgZW5kZm9yZWFjaCBlbmRpZiBlbmRzd2l0Y2ggZW5kd2hpbGUgZXh0ZW5kcyAiICsKICAgICAgICAgICAgICAgICAgICAgICAiZmluYWwgZm9yIGZvcmVhY2ggZnVuY3Rpb24gZ2xvYmFsIGdvdG8gaWYgaW1wbGVtZW50cyBpbnRlcmZhY2UgaW5zdGFuY2VvZiBuYW1lc3BhY2UgIiArCiAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBvciBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgc3RhdGljIHN3aXRjaCB0aHJvdyB0cnkgdXNlIHZhciB3aGlsZSB4b3IgcmV0dXJuIiArCiAgICAgICAgICAgICAgICAgICAgICAgImRpZSBlY2hvIGVtcHR5IGV4aXQgZXZhbCBpbmNsdWRlIGluY2x1ZGVfb25jZSBpc3NldCBsaXN0IHJlcXVpcmUgcmVxdWlyZV9vbmNlIHByaW50IHVuc2V0IiksCiAgICBibG9ja0tleXdvcmRzOiBrZXl3b3JkcygiY2F0Y2ggZG8gZWxzZSBlbHNlaWYgZm9yIGZvcmVhY2ggaWYgc3dpdGNoIHRyeSB3aGlsZSIpLAogICAgYXRvbXM6IGtleXdvcmRzKCJ0cnVlIGZhbHNlIG51bGwgVFJVRSBGQUxTRSBOVUxMIiksCiAgICBtdWx0aUxpbmVTdHJpbmdzOiB0cnVlLAogICAgaG9va3M6IHsKICAgICAgIiQiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgfSwKICAgICAgIjwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvPDwvKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl0vKTsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaGVyZWRvYyhzdHJlYW0uY3VycmVudCgpLnNsaWNlKDMpKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgfTsKCiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJwaHAiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgdmFyIGh0bWxNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgInRleHQvaHRtbCIpOwogICAgdmFyIGpzTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICJ0ZXh0L2phdmFzY3JpcHQiKTsKICAgIHZhciBjc3NNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgInRleHQvY3NzIik7CiAgICB2YXIgcGhwTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHBocENvbmZpZyk7CgogICAgZnVuY3Rpb24gZGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgeyAvLyBUT0RPIG9wZW4gUEhQIGluc2lkZSB0ZXh0L2NzcwogICAgICBpZiAoc3RhdGUuY3VyTW9kZSA9PSBodG1sTW9kZSkgewogICAgICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuY3VyU3RhdGUpOwogICAgICAgIGlmIChzdHlsZSA9PSAibWV0YSIgJiYgL148XD8vLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgIHN0YXRlLmN1ck1vZGUgPSBwaHBNb2RlOwogICAgICAgICAgc3RhdGUuY3VyU3RhdGUgPSBzdGF0ZS5waHA7CiAgICAgICAgICBzdGF0ZS5jdXJDbG9zZSA9IC9eXD8+LzsKCQkgIHN0YXRlLm1vZGUgPSAgJ3BocCc7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHN0eWxlID09ICJ0YWciICYmIHN0cmVhbS5jdXJyZW50KCkgPT0gIj4iICYmIHN0YXRlLmN1clN0YXRlLmNvbnRleHQpIHsKICAgICAgICAgIGlmICgvXnNjcmlwdCQvaS50ZXN0KHN0YXRlLmN1clN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGpzTW9kZTsKICAgICAgICAgICAgc3RhdGUuY3VyU3RhdGUgPSBqc01vZGUuc3RhcnRTdGF0ZShodG1sTW9kZS5pbmRlbnQoc3RhdGUuY3VyU3RhdGUsICIiKSk7CiAgICAgICAgICAgIHN0YXRlLmN1ckNsb3NlID0gL148XC9ccypzY3JpcHRccyo+L2k7CgkJCXN0YXRlLm1vZGUgPSAgJ2phdmFzY3JpcHQnOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoL15zdHlsZSQvaS50ZXN0KHN0YXRlLmN1clN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGNzc01vZGU7CiAgICAgICAgICAgIHN0YXRlLmN1clN0YXRlID0gY3NzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5jdXJTdGF0ZSwgIiIpKTsKICAgICAgICAgICAgc3RhdGUuY3VyQ2xvc2UgPSAgL148XC9ccypzdHlsZVxzKj4vaTsKICAgICAgICAgICAgc3RhdGUubW9kZSA9ICAnY3NzJzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0cmVhbS5tYXRjaChzdGF0ZS5jdXJDbG9zZSwgZmFsc2UpKSB7CiAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGh0bWxNb2RlOwogICAgICAgIHN0YXRlLmN1clN0YXRlID0gc3RhdGUuaHRtbDsKICAgICAgICBzdGF0ZS5jdXJDbG9zZSA9IG51bGw7CgkJc3RhdGUubW9kZSA9ICAnaHRtbCc7CiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKHN0cmVhbSwgc3RhdGUpOwogICAgICB9CiAgICAgIGVsc2UgcmV0dXJuIHN0YXRlLmN1ck1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5jdXJTdGF0ZSk7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGh0bWwgPSBodG1sTW9kZS5zdGFydFN0YXRlKCk7CiAgICAgICAgcmV0dXJuIHtodG1sOiBodG1sLAogICAgICAgICAgICAgICAgcGhwOiBwaHBNb2RlLnN0YXJ0U3RhdGUoKSwKICAgICAgICAgICAgICAgIGN1ck1vZGU6CXBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBwaHBNb2RlIDogaHRtbE1vZGUsCiAgICAgICAgICAgICAgICBjdXJTdGF0ZToJcGFyc2VyQ29uZmlnLnN0YXJ0T3BlbiA/IHBocE1vZGUuc3RhcnRTdGF0ZSgpIDogaHRtbCwKICAgICAgICAgICAgICAgIGN1ckNsb3NlOglwYXJzZXJDb25maWcuc3RhcnRPcGVuID8gL15cPz4vIDogbnVsbCwKCQkJCW1vZGU6CQlwYXJzZXJDb25maWcuc3RhcnRPcGVuID8gJ3BocCcgOiAnaHRtbCd9CiAgICAgIH0sCgogICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgdmFyIGh0bWwgPSBzdGF0ZS5odG1sLCBodG1sTmV3ID0gQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1vZGUsIGh0bWwpLAogICAgICAgICAgICBwaHAgPSBzdGF0ZS5waHAsIHBocE5ldyA9IENvZGVNaXJyb3IuY29weVN0YXRlKHBocE1vZGUsIHBocCksIGN1cjsKICAgICAgICBpZiAoc3RhdGUuY3VyU3RhdGUgPT0gaHRtbCkgY3VyID0gaHRtbE5ldzsKICAgICAgICBlbHNlIGlmIChzdGF0ZS5jdXJTdGF0ZSA9PSBwaHApIGN1ciA9IHBocE5ldzsKICAgICAgICBlbHNlIGN1ciA9IENvZGVNaXJyb3IuY29weVN0YXRlKHN0YXRlLmN1ck1vZGUsIHN0YXRlLmN1clN0YXRlKTsKICAgICAgICByZXR1cm4ge2h0bWw6IGh0bWxOZXcsIHBocDogcGhwTmV3LCBjdXJNb2RlOiBzdGF0ZS5jdXJNb2RlLCBjdXJTdGF0ZTogY3VyLCBjdXJDbG9zZTogc3RhdGUuY3VyQ2xvc2V9OwogICAgICB9LAoKICAgICAgdG9rZW46IGRpc3BhdGNoLAoKICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICAgaWYgKChzdGF0ZS5jdXJNb2RlICE9IHBocE1vZGUgJiYgL15ccyo8XC8vLnRlc3QodGV4dEFmdGVyKSkgfHwKICAgICAgICAgICAgKHN0YXRlLmN1ck1vZGUgPT0gcGhwTW9kZSAmJiAvXlw/Pi8udGVzdCh0ZXh0QWZ0ZXIpKSkKICAgICAgICAgIHJldHVybiBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbCwgdGV4dEFmdGVyKTsKICAgICAgICByZXR1cm4gc3RhdGUuY3VyTW9kZS5pbmRlbnQoc3RhdGUuY3VyU3RhdGUsIHRleHRBZnRlcik7CiAgICAgIH0sCgogICAgICBlbGVjdHJpY0NoYXJzOiAiL3t9OiIKICAgIH0KICB9KTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwIiwgInBocCIpOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1odHRwZC1waHAtb3BlbiIsIHtuYW1lOiAicGhwIiwgc3RhcnRPcGVuOiB0cnVlfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcGhwIiwgcGhwQ29uZmlnKTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogT3JhY2xlIFBML1NRTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGxzcWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Nzcy9kb2NzLmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlcjogMnB4IGluc2V0ICNkZWU7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogT3JhY2xlIFBML1NRTCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tIE9yYWNsZSBQTC9TUUwgQ29kZSBEZW1vCi8qCiAgIGJhc2VkIG9uIGMtbGlrZSBtb2RlLCBhZGFwdGVkIHRvIFBML1NRTCBieSBQZXRlciBSYWdhbml0c2NoICggaHR0cDovL3d3dy5vcmFjbGUtYW5kLWFwZXguY29tLyApCiAgIEFwcmlsIDIwMTEKKi8KREVDTEFSRQogICAgdklkeCAgICBOVU1CRVI7CiAgICB2U3RyaW5nIFZBUkNIQVIyKDEwMCk7CiAgICBjVGV4dCAgIENPTlNUQU5UIFZBUkNIQVIyKDEwMCkgOj0gJ1RoYXQnJ3MgaXQhIEhhdmUgZnVuIHdpdGggQ29kZU1pcnJvciAyJzsKQkVHSU4KICAgIHZJZHggOj0gMDsKICAgIC0tCiAgICBGT1IgckRBVEEgSU4KICAgICAgKCBTRUxFQ1QgKgogICAgICAgICAgRlJPTSBFTVAKICAgICAgICAgT1JERVIgQlkgRU1QTk8KICAgICAgKQogICAgTE9PUAogICAgICAgIHZJZHggICAgOj0gdklkeCArIDE7CiAgICAgICAgdlN0cmluZyA6PSByREFUQS5FTVBOTyB8fCAnIC0gJyB8fCByREFUQS5FTkFNRTsKICAgICAgICAtLQogICAgICAgIFVQREFURSBFTVAKICAgICAgICAgICBTRVQgU0FMICAgPSBTQUwgKiAxMDEvMTAwCiAgICAgICAgIFdIRVJFIEVNUE5PID0gckRBVEEuRU1QTk8KICAgICAgICA7CiAgICBFTkQgTE9PUDsKICAgIC0tCiAgICBTWVMuREJNU19PVVRQVVQuUHV0X0xpbmUgKGNUZXh0KTsKRU5EOwotLQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBtb2RlOiAidGV4dC94LXBsc3FsIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPgogICAgICAgIFNpbXBsZSBtb2RlIHRoYXQgaGFuZGxlcyBPcmFjbGUgUEwvU1FMIGxhbmd1YWdlIChhbmQgT3JhY2xlIFNRTCwgb2YgY291cnNlKS4KICAgIDwvcD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZSBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtcGxzcWw8L2NvZGU+CiAgICAoUExTUUwgY29kZSkKPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/plsql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwbHNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgICAgICAgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgICAgICAgICA9IHBhcnNlckNvbmZpZy5rZXl3b3JkcywKICAgICAgZnVuY3Rpb25zICAgICAgICA9IHBhcnNlckNvbmZpZy5mdW5jdGlvbnMsCiAgICAgIHR5cGVzICAgICAgICAgICAgPSBwYXJzZXJDb25maWcudHlwZXMsCiAgICAgIHNxbHBsdXMgICAgICAgICAgPSBwYXJzZXJDb25maWcuc3FscGx1cywKICAgICAgbXVsdGlMaW5lU3RyaW5ncyA9IHBhcnNlckNvbmZpZy5tdWx0aUxpbmVTdHJpbmdzOwogIHZhciBpc09wZXJhdG9yQ2hhciAgID0gL1srXC0qJiU9PD4hPzpcL3xdLzsKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIHZhciB0eXBlOwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUpIHsKICAgIHR5cGUgPSB0cDsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgLy8gc3RhcnQgb2Ygc3RyaW5nPwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpOwogICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFsIHNpZ25zIFtde30oKS4sOz8gU2VwZXJhdG9yPwogICAgZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcLl0vLnRlc3QoY2gpKQogICAgICByZXR1cm4gcmV0KGNoKTsKICAgIC8vIHN0YXJ0IG9mIGEgbnVtYmVyIHZhbHVlPwogICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICB9CiAgICAvLyBtdWx0aSBsaW5lIGNvbW1lbnQgb3Igc2ltcGxlIG9wZXJhdG9yPwogICAgZWxzZSBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIik7CiAgICAgIH0KICAgIH0KICAgIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnQgb3Igc2ltcGxlIG9wZXJhdG9yPwogICAgZWxzZSBpZiAoY2ggPT0gIi0iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCItIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJvcGVyYXRvciIpOwogICAgICB9CiAgICB9CiAgICAvLyBwbC9zcWwgdmFyaWFibGU/CiAgICBlbHNlIGlmIChjaCA9PSAiQCIgfHwgY2ggPT0gIiQiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XGRcJF9dLyk7CiAgICAgIHJldHVybiByZXQoIndvcmQiLCAidmFyaWFibGUiKTsKICAgIH0KICAgIC8vIGlzIGl0IGEgb3BlcmF0b3I/CiAgICBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJvcGVyYXRvciIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIGdldCB0aGUgd2hvbGUgd29yZAogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQga2V5d29yZHM/CiAgICAgIGlmIChrZXl3b3JkcyAmJiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImtleXdvcmQiKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zPwogICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImJ1aWx0aW4iKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgdHlwZXM/CiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInZhcmlhYmxlLTIiKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgc3FscGx1cyBrZXl3b3Jkcz8KICAgICAgaWYgKHNxbHBsdXMgJiYgc3FscGx1cy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInZhcmlhYmxlLTMiKTsKICAgICAgLy8gZGVmYXVsdDoganVzdCBhICJ3b3JkIgogICAgICByZXR1cm4gcmV0KCJ3b3JkIiwgInBsc3FsLXdvcmQiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJwbHNxbC1zdHJpbmciKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAicGxzcWwtY29tbWVudCIpOwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICBzdGFydE9mTGluZTogdHJ1ZQogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfQogIH07Cn0pOwoKKGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIgY0tleXdvcmRzID0gImFib3J0IGFjY2VwdCBhY2Nlc3MgYWRkIGFsbCBhbHRlciBhbmQgYW55IGFycmF5IGFycmF5bGVuIGFzIGFzYyBhc3NlcnQgYXNzaWduIGF0IGF0dHJpYnV0ZXMgYXVkaXQgIiArCiAgICAgICAgImF1dGhvcml6YXRpb24gYXZnICIgKwogICAgICAgICJiYXNlX3RhYmxlIGJlZ2luIGJldHdlZW4gYmluYXJ5X2ludGVnZXIgYm9keSBib29sZWFuIGJ5ICIgKwogICAgICAgICJjYXNlIGNhc3QgY2hhciBjaGFyX2Jhc2UgY2hlY2sgY2xvc2UgY2x1c3RlciBjbHVzdGVycyBjb2xhdXRoIGNvbHVtbiBjb21tZW50IGNvbW1pdCBjb21wcmVzcyBjb25uZWN0ICIgKwogICAgICAgICJjb25uZWN0ZWQgY29uc3RhbnQgY29uc3RyYWludCBjcmFzaCBjcmVhdGUgY3VycmVudCBjdXJydmFsIGN1cnNvciAiICsKICAgICAgICAiZGF0YV9iYXNlIGRhdGFiYXNlIGRhdGUgZGJhIGRlYWxsb2NhdGUgZGVidWdvZmYgZGVidWdvbiBkZWNpbWFsIGRlY2xhcmUgZGVmYXVsdCBkZWZpbml0aW9uIGRlbGF5IGRlbGV0ZSAiICsKICAgICAgICAiZGVzYyBkaWdpdHMgZGlzcG9zZSBkaXN0aW5jdCBkbyBkcm9wICIgKwogICAgICAgICJlbHNlIGVsc2lmIGVuYWJsZSBlbmQgZW50cnkgZXNjYXBlIGV4Y2VwdGlvbiBleGNlcHRpb25faW5pdCBleGNoYW5nZSBleGNsdXNpdmUgZXhpc3RzIGV4aXQgZXh0ZXJuYWwgIiArCiAgICAgICAgImZhc3QgZmV0Y2ggZmlsZSBmb3IgZm9yY2UgZm9ybSBmcm9tIGZ1bmN0aW9uICIgKwogICAgICAgICJnZW5lcmljIGdvdG8gZ3JhbnQgZ3JvdXAgIiArCiAgICAgICAgImhhdmluZyAiICsKICAgICAgICAiaWRlbnRpZmllZCBpZiBpbW1lZGlhdGUgaW4gaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5kaWNhdG9yIGluaXRpYWwgaW5pdHJhbnMgaW5zZXJ0IGludGVyZmFjZSBpbnRlcnNlY3QgIiArCiAgICAgICAgImludG8gaXMgIiArCiAgICAgICAgImtleSAiICsKICAgICAgICAibGV2ZWwgbGlicmFyeSBsaWtlIGxpbWl0ZWQgbG9jYWwgbG9jayBsb2cgbG9nZ2luZyBsb25nIGxvb3AgIiArCiAgICAgICAgIm1hc3RlciBtYXhleHRlbnRzIG1heHRyYW5zIG1lbWJlciBtaW5leHRlbnRzIG1pbnVzIG1pc2xhYmVsIG1vZGUgbW9kaWZ5IG11bHRpc2V0ICIgKwogICAgICAgICJuZXcgbmV4dCBubyBub2F1ZGl0IG5vY29tcHJlc3Mgbm9sb2dnaW5nIG5vcGFyYWxsZWwgbm90IG5vd2FpdCBudW1iZXJfYmFzZSAiICsKICAgICAgICAib2JqZWN0IG9mIG9mZiBvZmZsaW5lIG9uIG9ubGluZSBvbmx5IG9wZW4gb3B0aW9uIG9yIG9yZGVyIG91dCAiICsKICAgICAgICAicGFja2FnZSBwYXJhbGxlbCBwYXJ0aXRpb24gcGN0ZnJlZSBwY3RpbmNyZWFzZSBwY3R1c2VkIHBsc19pbnRlZ2VyIHBvc2l0aXZlIHBvc2l0aXZlbiBwcmFnbWEgcHJpbWFyeSBwcmlvciAiICsKICAgICAgICAicHJpdmF0ZSBwcml2aWxlZ2VzIHByb2NlZHVyZSBwdWJsaWMgIiArCiAgICAgICAgInJhaXNlIHJhbmdlIHJhdyByZWFkIHJlYnVpbGQgcmVjb3JkIHJlZiByZWZlcmVuY2VzIHJlZnJlc2ggcmVsZWFzZSByZW5hbWUgcmVwbGFjZSByZXNvdXJjZSByZXN0cmljdCByZXR1cm4gIiArCiAgICAgICAgInJldHVybmluZyByZXZlcnNlIHJldm9rZSByb2xsYmFjayByb3cgcm93aWQgcm93bGFiZWwgcm93bnVtIHJvd3MgcnVuICIgKwogICAgICAgICJzYXZlcG9pbnQgc2NoZW1hIHNlZ21lbnQgc2VsZWN0IHNlcGFyYXRlIHNlc3Npb24gc2V0IHNoYXJlIHNuYXBzaG90IHNvbWUgc3BhY2Ugc3BsaXQgc3FsIHN0YXJ0IHN0YXRlbWVudCAiICsKICAgICAgICAic3RvcmFnZSBzdWJ0eXBlIHN1Y2Nlc3NmdWwgc3lub255bSAiICsKICAgICAgICAidGFiYXV0aCB0YWJsZSB0YWJsZXMgdGFibGVzcGFjZSB0YXNrIHRlcm1pbmF0ZSB0aGVuIHRvIHRyaWdnZXIgdHJ1bmNhdGUgdHlwZSAiICsKICAgICAgICAidW5pb24gdW5pcXVlIHVubGltaXRlZCB1bnJlY292ZXJhYmxlIHVudXNhYmxlIHVwZGF0ZSB1c2UgdXNpbmcgIiArCiAgICAgICAgInZhbGlkYXRlIHZhbHVlIHZhbHVlcyB2YXJpYWJsZSB2aWV3IHZpZXdzICIgKwogICAgICAgICJ3aGVuIHdoZW5ldmVyIHdoZXJlIHdoaWxlIHdpdGggd29yayI7CgogIHZhciBjRnVuY3Rpb25zID0gImFicyBhY29zIGFkZF9tb250aHMgYXNjaWkgYXNpbiBhdGFuIGF0YW4yIGF2ZXJhZ2UgIiArCiAgICAgICAgImJmaWxlbmFtZSAiICsKICAgICAgICAiY2VpbCBjaGFydG9yb3dpZCBjaHIgY29uY2F0IGNvbnZlcnQgY29zIGNvc2ggY291bnQgIiArCiAgICAgICAgImRlY29kZSBkZXJlZiBkdWFsIGR1bXAgZHVwX3ZhbF9vbl9pbmRleCAiICsKICAgICAgICAiZW1wdHkgZXJyb3IgZXhwICIgKwogICAgICAgICJmYWxzZSBmbG9vciBmb3VuZCAiICsKICAgICAgICAiZ2xiIGdyZWF0ZXN0ICIgKwogICAgICAgICJoZXh0b3JhdyAiICsKICAgICAgICAiaW5pdGNhcCBpbnN0ciBpbnN0cmIgaXNvcGVuICIgKwogICAgICAgICJsYXN0X2RheSBsZWFzdCBsZW5naHQgbGVuZ2h0YiBsbiBsb3dlciBscGFkIGx0cmltIGx1YiAiICsKICAgICAgICAibWFrZV9yZWYgbWF4IG1pbiBtb2QgbW9udGhzX2JldHdlZW4gIiArCiAgICAgICAgIm5ld190aW1lIG5leHRfZGF5IG5leHR2YWwgbmxzX2NoYXJzZXRfZGVjbF9sZW4gbmxzX2NoYXJzZXRfaWQgbmxzX2NoYXJzZXRfbmFtZSBubHNfaW5pdGNhcCBubHNfbG93ZXIgIiArCiAgICAgICAgIm5sc19zb3J0IG5sc191cHBlciBubHNzb3J0IG5vX2RhdGFfZm91bmQgbm90Zm91bmQgbnVsbCBudmwgIiArCiAgICAgICAgIm90aGVycyAiICsKICAgICAgICAicG93ZXIgIiArCiAgICAgICAgInJhd3RvaGV4IHJlZnRvaGV4IHJvdW5kIHJvd2NvdW50IHJvd2lkdG9jaGFyIHJwYWQgcnRyaW0gIiArCiAgICAgICAgInNpZ24gc2luIHNpbmggc291bmRleCBzcWxjb2RlIHNxbGVycm0gc3FydCBzdGRkZXYgc3Vic3RyIHN1YnN0cmIgc3VtIHN5c2RhdGUgIiArCiAgICAgICAgInRhbiB0YW5oIHRvX2NoYXIgdG9fZGF0ZSB0b19sYWJlbCB0b19tdWx0aV9ieXRlIHRvX251bWJlciB0b19zaW5nbGVfYnl0ZSB0cmFuc2xhdGUgdHJ1ZSB0cnVuYyAiICsKICAgICAgICAidWlkIHVwcGVyIHVzZXIgdXNlcmVudiAiICsKICAgICAgICAidmFyaWFuY2UgdnNpemUiOwoKICB2YXIgY1R5cGVzID0gImJmaWxlIGJsb2IgIiArCiAgICAgICAgImNoYXJhY3RlciBjbG9iICIgKwogICAgICAgICJkZWMgIiArCiAgICAgICAgImZsb2F0ICIgKwogICAgICAgICJpbnQgaW50ZWdlciAiICsKICAgICAgICAibWxzbGFiZWwgIiArCiAgICAgICAgIm5hdHVyYWwgbmF0dXJhbG4gbmNoYXIgbmNsb2IgbnVtYmVyIG51bWVyaWMgbnZhcmNoYXIyICIgKwogICAgICAgICJyZWFsIHJvd3R5cGUgIiArCiAgICAgICAgInNpZ250eXBlIHNtYWxsaW50IHN0cmluZyAiICsKICAgICAgICAidmFyY2hhciB2YXJjaGFyMiI7CgogIHZhciBjU3FscGx1cyA9ICJhcHBpbmZvIGFycmF5c2l6ZSBhdXRvY29tbWl0IGF1dG9wcmludCBhdXRvcmVjb3ZlcnkgYXV0b3RyYWNlICIgKwogICAgICAgICJibG9ja3Rlcm1pbmF0b3IgYnJlYWsgYnRpdGxlICIgKwogICAgICAgICJjbWRzZXAgY29sc2VwIGNvbXBhdGliaWxpdHkgY29tcHV0ZSBjb25jYXQgY29weWNvbW1pdCBjb3B5dHlwZWNoZWNrICIgKwogICAgICAgICJkZWZpbmUgZGVzY3JpYmUgIiArCiAgICAgICAgImVjaG8gZWRpdGZpbGUgZW1iZWRkZWQgZXNjYXBlIGV4ZWMgZXhlY3V0ZSAiICsKICAgICAgICAiZmVlZGJhY2sgZmxhZ2dlciBmbHVzaCAiICsKICAgICAgICAiaGVhZGluZyBoZWFkc2VwICIgKwogICAgICAgICJpbnN0YW5jZSAiICsKICAgICAgICAibGluZXNpemUgbG5vIGxvYm9mZnNldCBsb2dzb3VyY2UgbG9uZyBsb25nY2h1bmtzaXplICIgKwogICAgICAgICJtYXJrdXAgIiArCiAgICAgICAgIm5hdGl2ZSBuZXdwYWdlIG51bWZvcm1hdCBudW13aWR0aCAiICsKICAgICAgICAicGFnZXNpemUgcGF1c2UgcG5vICIgKwogICAgICAgICJyZWNzZXAgcmVjc2VwY2hhciByZWxlYXNlIHJlcGZvb3RlciByZXBoZWFkZXIgIiArCiAgICAgICAgInNlcnZlcm91dHB1dCBzaGlmdGlub3V0IHNob3cgc2hvd21vZGUgc2l6ZSBzcG9vbCBzcWxibGFua2xpbmVzIHNxbGNhc2Ugc3FsY29kZSBzcWxjb250aW51ZSBzcWxudW1iZXIgIiArCiAgICAgICAgInNxbHBsdXNjb21wYXRpYmlsaXR5IHNxbHByZWZpeCBzcWxwcm9tcHQgc3FsdGVybWluYXRvciBzdWZmaXggIiArCiAgICAgICAgInRhYiB0ZXJtIHRlcm1vdXQgdGltZSB0aW1pbmcgdHJpbW91dCB0cmltc3Bvb2wgdHRpdGxlICIgKwogICAgICAgICJ1bmRlcmxpbmUgIiArCiAgICAgICAgInZlcmlmeSB2ZXJzaW9uICIgKwogICAgICAgICJ3cmFwIjsKCiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcGxzcWwiLCB7CiAgICBuYW1lOiAicGxzcWwiLAogICAga2V5d29yZHM6IGtleXdvcmRzKGNLZXl3b3JkcyksCiAgICBmdW5jdGlvbnM6IGtleXdvcmRzKGNGdW5jdGlvbnMpLAogICAgdHlwZXM6IGtleXdvcmRzKGNUeXBlcyksCiAgICBzcWxwbHVzOiBrZXl3b3JkcyhjU3FscGx1cykKICB9KTsKfSgpKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogUHl0aG9uIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJweXRob24uanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Nzcy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBQeXRob24gbW9kZTwvaDE+CiAgICAKICAgIDxkaXY+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBMaXRlcmFscwoxMjM0CjAuMGUxMDEKLjEyMwowYjAxMDEwMDExMTAwCjBvMDEyMzQ1NjcKMHgwOTg3NjU0MzIxYWJjZGVmCjcKMjE0NzQ4MzY0NwozTAo3OTIyODE2MjUxNDI2NDMzNzU5MzU0Mzk1MDMzNkwKMHgxMDAwMDAwMDBMCjc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2CjB4ZGVhZGJlZWYKMy4xNGoKMTAuagoxMGoKLjAwMWoKMWUxMDBqCjMuMTRlLTEwagoKCiMgU3RyaW5nIExpdGVyYWxzCidGb3JcJycKIkdvZFwiIgoiIiJzbyBsb3ZlZAp0aGUgd29ybGQiIiIKJycndGhhdCBoZSBnYXZlCmhpcyBvbmx5IGJlZ290dGVuXCcgJycnCid0aGF0IHdob3NvZXZlciBiZWxpZXZldGggXAppbiBoaW0nCicnCgojIElkZW50aWZpZXJzCl9fYV9fCmEuYgphLmIuYwoKIyBPcGVyYXRvcnMKKyAtICogLyAlICYgfCBeIH4gPCA+Cj09ICE9IDw9ID49IDw+IDw8ID4+IC8vICoqCmFuZCBvciBub3QgaW4gaXMKCiMgRGVsaW1pdGVycwooKSBbXSB7fSAsIDogYCA9IDsgQCAuICAjIE5vdGUgdGhhdCBAIGFuZCAuIHJlcXVpcmUgdGhlIHByb3BlciBjb250ZXh0LgorPSAtPSAqPSAvPSAlPSAmPSB8PSBePQovLz0gPj49IDw8PSAqKj0KCiMgS2V5d29yZHMKYXMgYXNzZXJ0IGJyZWFrIGNsYXNzIGNvbnRpbnVlIGRlZiBkZWwgZWxpZiBlbHNlIGV4Y2VwdApmaW5hbGx5IGZvciBmcm9tIGdsb2JhbCBpZiBpbXBvcnQgbGFtYmRhIHBhc3MgcmFpc2UKcmV0dXJuIHRyeSB3aGlsZSB3aXRoIHlpZWxkCgojIFB5dGhvbiAyIEtleXdvcmRzIChvdGhlcndpc2UgSWRlbnRpZmllcnMpCmV4ZWMgcHJpbnQKCiMgUHl0aG9uIDMgS2V5d29yZHMgKG90aGVyd2lzZSBJZGVudGlmaWVycykKbm9ubG9jYWwKCiMgVHlwZXMKYm9vbCBjbGFzc21ldGhvZCBjb21wbGV4IGRpY3QgZW51bWVyYXRlIGZsb2F0IGZyb3plbnNldCBpbnQgbGlzdCBvYmplY3QKcHJvcGVydHkgcmV2ZXJzZWQgc2V0IHNsaWNlIHN0YXRpY21ldGhvZCBzdHIgc3VwZXIgdHVwbGUgdHlwZQoKIyBQeXRob24gMiBUeXBlcyAob3RoZXJ3aXNlIElkZW50aWZpZXJzKQpiYXNlc3RyaW5nIGJ1ZmZlciBmaWxlIGxvbmcgdW5pY29kZSB4cmFuZ2UKCiMgUHl0aG9uIDMgVHlwZXMgKG90aGVyd2lzZSBJZGVudGlmaWVycykKYnl0ZWFycmF5IGJ5dGVzIGZpbHRlciBtYXAgbWVtb3J5dmlldyBvcGVuIHJhbmdlIHppcAoKIyBTb21lIEV4YW1wbGUgY29kZQppbXBvcnQgb3MKZnJvbSBwYWNrYWdlIGltcG9ydCBQYXJlbnRDbGFzcwoKQG5vbnNlbnNlRGVjb3JhdG9yCmRlZiBkb2VzTm90aGluZygpOgogICAgcGFzcwoKY2xhc3MgRXhhbXBsZUNsYXNzKFBhcmVudENsYXNzKToKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBleGFtcGxlKGlucHV0U3RyKToKICAgICAgICBhID0gbGlzdChpbnB1dFN0cikKICAgICAgICBhLnJldmVyc2UoKQogICAgICAgIHJldHVybiAnJy5qb2luKGEpCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1peGluID0gJ0hlbGxvJyk6CiAgICAgICAgc2VsZi5taXhpbiA9IG1peGluCgo8L3RleHRhcmVhPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiB7bmFtZTogInB5dGhvbiIsCiAgICAgICAgICAgICAgIHZlcnNpb246IDIsCiAgICAgICAgICAgICAgIHNpbmdsZUxpbmVTdHJpbmdFcnJvcnM6IGZhbHNlfSwKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgogICAgPGgyPkNvbmZpZ3VyYXRpb24gT3B0aW9uczo8L2gyPgogICAgPHVsPgogICAgICA8bGk+dmVyc2lvbiAtIDIvMyAtIFRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byByZWNvZ25pemUuICBEZWZhdWx0IGlzIDIuPC9saT4KICAgICAgPGxpPnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMgLSB0cnVlL2ZhbHNlIC0gSWYgeW91IGhhdmUgYSBzaW5nbGUtbGluZSBzdHJpbmcgdGhhdCBpcyBub3QgdGVybWluYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCB0aGlzIHdpbGwgc2hvdyBzdWJzZXF1ZW50IGxpbmVzIGFzIGVycm9ycyBpZiB0cnVlLCBvdGhlcndpc2UgaXQgd2lsbCBjb25zaWRlciB0aGUgbmV3bGluZSBhcyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuIERlZmF1bHQgaXMgZmFsc2UuPC9saT4KICAgIDwvdWw+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1weXRob248L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/LICENSE.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTAgVGltb3RoeSBGYXJyZWxsCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/python.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJweXRob24iLCBmdW5jdGlvbihjb25mLCBwYXJzZXJDb25mKSB7CiAgICB2YXIgRVJST1JDTEFTUyA9ICdlcnJvcic7CiAgICAKICAgIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHsKICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXigoIiArIHdvcmRzLmpvaW4oIil8KCIpICsgIikpXFxiIik7CiAgICB9CiAgICAKICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeW1xcK1xcLVxcKi8lJnxcXF5+PD4hXSIpOwogICAgdmFyIHNpbmdsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCdeW1xcKFxcKVxcW1xcXVxce1xcfUAsOmA9O1xcLl0nKTsKICAgIHZhciBkb3VibGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeKCg9PSl8KCE9KXwoPD0pfCg+PSl8KDw+KXwoPDwpfCg+Pil8KC8vKXwoXFwqXFwqKSkiKTsKICAgIHZhciBkb3VibGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cCgiXigoXFwrPSl8KFxcLT0pfChcXCo9KXwoJT0pfCgvPSl8KCY9KXwoXFx8PSl8KFxcXj0pKSIpOwogICAgdmFyIHRyaXBsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCJeKCgvLz0pfCg+Pj0pfCg8PD0pfChcXCpcXCo9KSkiKTsKICAgIHZhciBpZGVudGlmaWVycyA9IG5ldyBSZWdFeHAoIl5bX0EtWmEtel1bX0EtWmEtejAtOV0qIik7CgogICAgdmFyIHdvcmRPcGVyYXRvcnMgPSB3b3JkUmVnZXhwKFsnYW5kJywgJ29yJywgJ25vdCcsICdpcycsICdpbiddKTsKICAgIHZhciBjb21tb25rZXl3b3JkcyA9IFsnYXMnLCAnYXNzZXJ0JywgJ2JyZWFrJywgJ2NsYXNzJywgJ2NvbnRpbnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmJywgJ2RlbCcsICdlbGlmJywgJ2Vsc2UnLCAnZXhjZXB0JywgJ2ZpbmFsbHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICdmb3InLCAnZnJvbScsICdnbG9iYWwnLCAnaWYnLCAnaW1wb3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFtYmRhJywgJ3Bhc3MnLCAncmFpc2UnLCAncmV0dXJuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ5JywgJ3doaWxlJywgJ3dpdGgnLCAneWllbGQnXTsKICAgIHZhciBjb21tb250eXBlcyA9IFsnYm9vbCcsICdjbGFzc21ldGhvZCcsICdjb21wbGV4JywgJ2RpY3QnLCAnZW51bWVyYXRlJywKICAgICAgICAgICAgICAgICAgICAgICAnZmxvYXQnLCAnZnJvemVuc2V0JywgJ2ludCcsICdsaXN0JywgJ29iamVjdCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnR5JywgJ3JldmVyc2VkJywgJ3NldCcsICdzbGljZScsICdzdGF0aWNtZXRob2QnLAogICAgICAgICAgICAgICAgICAgICAgICdzdHInLCAnc3VwZXInLCAndHVwbGUnLCAndHlwZSddOwogICAgdmFyIHB5MiA9IHsndHlwZXMnOiBbJ2Jhc2VzdHJpbmcnLCAnYnVmZmVyJywgJ2ZpbGUnLCAnbG9uZycsICd1bmljb2RlJywKICAgICAgICAgICAgICAgICAgICAgICAgICd4cmFuZ2UnXSwKICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogWydleGVjJywgJ3ByaW50J119OwogICAgdmFyIHB5MyA9IHsndHlwZXMnOiBbJ2J5dGVhcnJheScsICdieXRlcycsICdmaWx0ZXInLCAnbWFwJywgJ21lbW9yeXZpZXcnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ29wZW4nLCAncmFuZ2UnLCAnemlwJ10sCiAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6IFsnbm9ubG9jYWwnXX07CgogICAgaWYgKCEhcGFyc2VyQ29uZi52ZXJzaW9uICYmIHBhcnNlSW50KHBhcnNlckNvbmYudmVyc2lvbiwgMTApID09PSAzKSB7CiAgICAgICAgY29tbW9ua2V5d29yZHMgPSBjb21tb25rZXl3b3Jkcy5jb25jYXQocHkzLmtleXdvcmRzKTsKICAgICAgICBjb21tb250eXBlcyA9IGNvbW1vbnR5cGVzLmNvbmNhdChweTMudHlwZXMpOwogICAgICAgIHZhciBzdHJpbmdQcmVmaXhlcyA9IG5ldyBSZWdFeHAoIl4oKFtyYl18KGJyKSk/KCd7M318XCJ7M318WydcIl0pKSIsICJpIik7CiAgICB9IGVsc2UgewogICAgICAgIGNvbW1vbmtleXdvcmRzID0gY29tbW9ua2V5d29yZHMuY29uY2F0KHB5Mi5rZXl3b3Jkcyk7CiAgICAgICAgY29tbW9udHlwZXMgPSBjb21tb250eXBlcy5jb25jYXQocHkyLnR5cGVzKTsKICAgICAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKCJeKChbcnViXXwodXIpfChicikpPygnezN9fFwiezN9fFsnXCJdKSkiLCAiaSIpOwogICAgfQogICAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChjb21tb25rZXl3b3Jkcyk7CiAgICB2YXIgdHlwZXMgPSB3b3JkUmVnZXhwKGNvbW1vbnR5cGVzKTsKCiAgICB2YXIgaW5kZW50SW5mbyA9IG51bGw7CgogICAgLy8gdG9rZW5pemVycwogICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlcwogICAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICAgICAgdmFyIHNjb3BlT2Zmc2V0ID0gc3RhdGUuc2NvcGVzWzBdLm9mZnNldDsKICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZU9mZnNldCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgICAgICAgICAgaWYgKGxpbmVPZmZzZXQgPiBzY29wZU9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIGluZGVudEluZm8gPSAnaW5kZW50JzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZU9mZnNldCA8IHNjb3BlT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50SW5mbyA9ICdkZWRlbnQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoc2NvcGVPZmZzZXQgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgZGVkZW50KHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTsKICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgQ29tbWVudHMKICAgICAgICBpZiAoY2ggPT09ICcjJykgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBOdW1iZXIgTGl0ZXJhbHMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eWzAtOVwuXS8sIGZhbHNlKSkgewogICAgICAgICAgICB2YXIgZmxvYXRMaXRlcmFsID0gZmFsc2U7CiAgICAgICAgICAgIC8vIEZsb2F0cwogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXGQqXC5cZCsoZVtcK1wtXT9cZCspPy9pKSkgeyBmbG9hdExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cZCtcLlxkKi8pKSB7IGZsb2F0TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlwuXGQrLykpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICBpZiAoZmxvYXRMaXRlcmFsKSB7CiAgICAgICAgICAgICAgICAvLyBGbG9hdCBsaXRlcmFscyBtYXkgYmUgImltYWdpbmFyeSIKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL0ovaSk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ251bWJlcic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSW50ZWdlcnMKICAgICAgICAgICAgdmFyIGludExpdGVyYWwgPSBmYWxzZTsKICAgICAgICAgICAgLy8gSGV4CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14weFswLTlhLWZdKy9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICAvLyBCaW5hcnkKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjBiWzAxXSsvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgLy8gT2N0YWwKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjBvWzAtN10rL2kpKSB7IGludExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIC8vIERlY2ltYWwKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlsxLTldXGQqKGVbXCtcLV0/XGQrKT8vKSkgewogICAgICAgICAgICAgICAgLy8gRGVjaW1hbCBsaXRlcmFscyBtYXkgYmUgImltYWdpbmFyeSIKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL0ovaSk7CiAgICAgICAgICAgICAgICAvLyBUT0RPIC0gQ2FuIHlvdSBoYXZlIGltYWdpbmFyeSBsb25ncz8KICAgICAgICAgICAgICAgIGludExpdGVyYWwgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFplcm8gYnkgaXRzZWxmIHdpdGggbm8gb3RoZXIgcGllY2Ugb2YgbnVtYmVyLgogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eMCg/IVtcZHhdKS9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICBpZiAoaW50TGl0ZXJhbCkgewogICAgICAgICAgICAgICAgLy8gSW50ZWdlciBsaXRlcmFscyBtYXkgYmUgImxvbmciCiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9ML2kpOwogICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBTdHJpbmdzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzdHJpbmdQcmVmaXhlcykpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZ0ZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIG9wZXJhdG9ycyBhbmQgRGVsaW1pdGVycwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2godHJpcGxlRGVsaW1pdGVycykgfHwgc3RyZWFtLm1hdGNoKGRvdWJsZURlbGltaXRlcnMpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGRvdWJsZU9wZXJhdG9ycykKICAgICAgICAgICAgfHwgc3RyZWFtLm1hdGNoKHNpbmdsZU9wZXJhdG9ycykKICAgICAgICAgICAgfHwgc3RyZWFtLm1hdGNoKHdvcmRPcGVyYXRvcnMpKSB7CiAgICAgICAgICAgIHJldHVybiAnb3BlcmF0b3InOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHNpbmdsZURlbGltaXRlcnMpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHR5cGVzKSkgewogICAgICAgICAgICByZXR1cm4gJ2J1aWx0aW4nOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzKSkgewogICAgICAgICAgICByZXR1cm4gJ2tleXdvcmQnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIG5vbi1kZXRlY3RlZCBpdGVtcwogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHRva2VuU3RyaW5nRmFjdG9yeShkZWxpbWl0ZXIpIHsKICAgICAgICB3aGlsZSAoJ3J1YicuaW5kZXhPZihkZWxpbWl0ZXIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpID49IDApIHsKICAgICAgICAgICAgZGVsaW1pdGVyID0gZGVsaW1pdGVyLnN1YnN0cigxKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNpbmdsZWxpbmUgPSBkZWxpbWl0ZXIubGVuZ3RoID09IDE7CiAgICAgICAgdmFyIE9VVENMQVNTID0gJ3N0cmluZyc7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14nIlxcXS8pOwogICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXQoJ1xcJykpIHsKICAgICAgICAgICAgICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVsaW5lICYmIHN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goZGVsaW1pdGVyKSkgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgvWyciXS8pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzaW5nbGVsaW5lKSB7CiAgICAgICAgICAgICAgICBpZiAocGFyc2VyQ29uZi5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUzsKICAgICAgICB9OwogICAgfQogICAgCiAgICBmdW5jdGlvbiBpbmRlbnQoc3RyZWFtLCBzdGF0ZSwgdHlwZSkgewogICAgICAgIHR5cGUgPSB0eXBlIHx8ICdweSc7CiAgICAgICAgdmFyIGluZGVudFVuaXQgPSAwOwogICAgICAgIGlmICh0eXBlID09PSAncHknKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2NvcGVzW2ldLnR5cGUgPT09ICdweScpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRVbml0ID0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCArIGNvbmYuaW5kZW50VW5pdDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGluZGVudFVuaXQgPSBzdHJlYW0uY29sdW1uKCkgKyBzdHJlYW0uY3VycmVudCgpLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgc3RhdGUuc2NvcGVzLnVuc2hpZnQoewogICAgICAgICAgICBvZmZzZXQ6IGluZGVudFVuaXQsCiAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICB9KTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZGVkZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZiAoc3RhdGUuc2NvcGVzLmxlbmd0aCA9PSAxKSByZXR1cm47CiAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1swXS50eXBlID09PSAncHknKSB7CiAgICAgICAgICAgIHZhciBfaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIHZhciBfaW5kZW50X2luZGV4ID0gLTE7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoX2luZGVudCA9PT0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIF9pbmRlbnRfaW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfaW5kZW50X2luZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgIT09IF9pbmRlbnQpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGluZGVudEluZm8gPSBudWxsOwogICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIHZhciBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKCiAgICAgICAgLy8gSGFuZGxlICcuJyBjb25uZWN0ZWQgaWRlbnRpZmllcnMKICAgICAgICBpZiAoY3VycmVudCA9PT0gJy4nKSB7CiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgICAgICBpZiAoc3R5bGUgPT09ICd2YXJpYWJsZScpIHsKICAgICAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIGRlY29yYXRvcnMKICAgICAgICBpZiAoY3VycmVudCA9PT0gJ0AnKSB7CiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgICAgICBpZiAoc3R5bGUgPT09ICd2YXJpYWJsZScKICAgICAgICAgICAgICAgIHx8IGN1cnJlbnQgPT09ICdAc3RhdGljbWV0aG9kJwogICAgICAgICAgICAgICAgfHwgY3VycmVudCA9PT0gJ0BjbGFzc21ldGhvZCcpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnbWV0YSc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlcy4KICAgICAgICBpZiAoY3VycmVudCA9PT0gJ3Bhc3MnIHx8IGN1cnJlbnQgPT09ICdyZXR1cm4nKSB7CiAgICAgICAgICAgIHN0YXRlLmRlZGVudCArPSAxOwogICAgICAgIH0KICAgICAgICBpZiAoKGN1cnJlbnQgPT09ICc6JyAmJiAhc3RhdGUubGFtYmRhICYmIHN0YXRlLnNjb3Blc1swXS50eXBlID09ICdweScpCiAgICAgICAgICAgIHx8IGluZGVudEluZm8gPT09ICdpbmRlbnQnKSB7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGltaXRlcl9pbmRleCA9ICdbKHsnLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaW5kZW50KHN0cmVhbSwgc3RhdGUsICddKX0nLnNsaWNlKGRlbGltaXRlcl9pbmRleCwgZGVsaW1pdGVyX2luZGV4KzEpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGluZGVudEluZm8gPT09ICdkZWRlbnQnKSB7CiAgICAgICAgICAgIGlmIChkZWRlbnQoc3RyZWFtLCBzdGF0ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlbGltaXRlcl9pbmRleCA9ICddKX0nLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGRlZGVudChzdHJlYW0sIHN0YXRlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmRlZGVudCA+IDAgJiYgc3RyZWFtLmVvbCgpICYmIHN0YXRlLnNjb3Blc1swXS50eXBlID09ICdweScpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPiAxKSBzdGF0ZS5zY29wZXMuc2hpZnQoKTsKICAgICAgICAgICAgc3RhdGUuZGVkZW50IC09IDE7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBzdHlsZTsKICAgIH0KCiAgICB2YXIgZXh0ZXJuYWwgPSB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgc2NvcGVzOiBbe29mZnNldDpiYXNlY29sdW1uIHx8IDAsIHR5cGU6J3B5J31dLAogICAgICAgICAgICAgIGxhc3RUb2tlbjogbnVsbCwKICAgICAgICAgICAgICBsYW1iZGE6IGZhbHNlLAogICAgICAgICAgICAgIGRlZGVudDogMAogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBzdGF0ZS5sYXN0VG9rZW4gPSB7c3R5bGU6c3R5bGUsIGNvbnRlbnQ6IHN0cmVhbS5jdXJyZW50KCl9OwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSAmJiBzdHJlYW0ubGFtYmRhKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5sYW1iZGEgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gc3RhdGUuc2NvcGVzWzBdLm9mZnNldDsKICAgICAgICB9CiAgICAgICAgCiAgICB9OwogICAgcmV0dXJuIGV4dGVybmFsOwp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXB5dGhvbiIsICJweXRob24iKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icnN0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icnN0LmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiByZVN0cnVjdHVyZWRUZXh0IG1vZGU8L2gxPgoKPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLi4gVGhpcyBpcyBhbiBleGNlcnB0IGZyb20gU3BoaW54IGRvY3VtZW50YXRpb246IGh0dHA6Ly9zcGhpbngucG9jb28ub3JnL19zb3VyY2VzL3Jlc3QudHh0CgouLiBoaWdobGlnaHRsYW5nOjogcmVzdAoKLi4gX3JzdC1wcmltZXI6CgpyZVN0cnVjdHVyZWRUZXh0IFByaW1lcgo9PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBzZWN0aW9uIGlzIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIHJlU3RydWN0dXJlZFRleHQgKHJlU1QpIGNvbmNlcHRzIGFuZApzeW50YXgsIGludGVuZGVkIHRvIHByb3ZpZGUgYXV0aG9ycyB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiB0byBhdXRob3IgZG9jdW1lbnRzCnByb2R1Y3RpdmVseS4gIFNpbmNlIHJlU1Qgd2FzIGRlc2lnbmVkIHRvIGJlIGEgc2ltcGxlLCB1bm9idHJ1c2l2ZSBtYXJrdXAKbGFuZ3VhZ2UsIHRoaXMgd2lsbCBub3QgdGFrZSB0b28gbG9uZy4KCi4uIHNlZWFsc286OgoKICAgVGhlIGF1dGhvcml0YXRpdmUgYHJlU3RydWN0dXJlZFRleHQgVXNlciBEb2N1bWVudGF0aW9uCiAgICZsdDtodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0L3JzdC5odG1sJmd0O2BfLiAgVGhlICJyZWYiIGxpbmtzIGluIHRoaXMKICAgZG9jdW1lbnQgbGluayB0byB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGluZGl2aWR1YWwgY29uc3RydWN0cyBpbiB0aGUgcmVTVAogICByZWZlcmVuY2UuCgoKUGFyYWdyYXBocwotLS0tLS0tLS0tCgpUaGUgcGFyYWdyYXBoICg6ZHVyZWY6YHJlZiAmbHQ7cGFyYWdyYXBocyZndDtgKSBpcyB0aGUgbW9zdCBiYXNpYyBibG9jayBpbiBhIHJlU1QKZG9jdW1lbnQuICBQYXJhZ3JhcGhzIGFyZSBzaW1wbHkgY2h1bmtzIG9mIHRleHQgc2VwYXJhdGVkIGJ5IG9uZSBvciBtb3JlIGJsYW5rCmxpbmVzLiAgQXMgaW4gUHl0aG9uLCBpbmRlbnRhdGlvbiBpcyBzaWduaWZpY2FudCBpbiByZVNULCBzbyBhbGwgbGluZXMgb2YgdGhlCnNhbWUgcGFyYWdyYXBoIG11c3QgYmUgbGVmdC1hbGlnbmVkIHRvIHRoZSBzYW1lIGxldmVsIG9mIGluZGVudGF0aW9uLgoKCi4uIF9pbmxpbmVtYXJrdXA6CgpJbmxpbmUgbWFya3VwCi0tLS0tLS0tLS0tLS0KClRoZSBzdGFuZGFyZCByZVNUIGlubGluZSBtYXJrdXAgaXMgcXVpdGUgc2ltcGxlOiB1c2UKCiogb25lIGFzdGVyaXNrOiBgYCp0ZXh0KmBgIGZvciBlbXBoYXNpcyAoaXRhbGljcyksCiogdHdvIGFzdGVyaXNrczogYGAqKnRleHQqKmBgIGZvciBzdHJvbmcgZW1waGFzaXMgKGJvbGRmYWNlKSwgYW5kCiogYmFja3F1b3RlczogYGBgYHRleHRgYGBgIGZvciBjb2RlIHNhbXBsZXMuCgpJZiBhc3Rlcmlza3Mgb3IgYmFja3F1b3RlcyBhcHBlYXIgaW4gcnVubmluZyB0ZXh0IGFuZCBjb3VsZCBiZSBjb25mdXNlZCB3aXRoCmlubGluZSBtYXJrdXAgZGVsaW1pdGVycywgdGhleSBoYXZlIHRvIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4KCkJlIGF3YXJlIG9mIHNvbWUgcmVzdHJpY3Rpb25zIG9mIHRoaXMgbWFya3VwOgoKKiBpdCBtYXkgbm90IGJlIG5lc3RlZCwKKiBjb250ZW50IG1heSBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZTogYGAqIHRleHQqYGAgaXMgd3JvbmcsCiogaXQgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSBzdXJyb3VuZGluZyB0ZXh0IGJ5IG5vbi13b3JkIGNoYXJhY3RlcnMuICBVc2UgYQogIGJhY2tzbGFzaCBlc2NhcGVkIHNwYWNlIHRvIHdvcmsgYXJvdW5kIHRoYXQ6IGBgdGhpc2lzXCAqb25lKlwgd29yZGBgLgoKVGhlc2UgcmVzdHJpY3Rpb25zIG1heSBiZSBsaWZ0ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBkb2N1dGlscy4KCnJlU1QgYWxzbyBhbGxvd3MgZm9yIGN1c3RvbSAiaW50ZXJwcmV0ZWQgdGV4dCByb2xlcyInLCB3aGljaCBzaWduaWZ5IHRoYXQgdGhlCmVuY2xvc2VkIHRleHQgc2hvdWxkIGJlIGludGVycHJldGVkIGluIGEgc3BlY2lmaWMgd2F5LiAgU3BoaW54IHVzZXMgdGhpcyB0bwpwcm92aWRlIHNlbWFudGljIG1hcmt1cCBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcgb2YgaWRlbnRpZmllcnMsIGFzIGRlc2NyaWJlZCBpbgp0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbi4gIFRoZSBnZW5lcmFsIHN5bnRheCBpcyBgYDpyb2xlbmFtZTpgY29udGVudGBgYC4KClN0YW5kYXJkIHJlU1QgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyByb2xlczoKCiogOmR1cm9sZTpgZW1waGFzaXNgIC0tIGFsdGVybmF0ZSBzcGVsbGluZyBmb3IgYGAqZW1waGFzaXMqYGAKKiA6ZHVyb2xlOmBzdHJvbmdgIC0tIGFsdGVybmF0ZSBzcGVsbGluZyBmb3IgYGAqKnN0cm9uZyoqYGAKKiA6ZHVyb2xlOmBsaXRlcmFsYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgYGBsaXRlcmFsYGBgYAoqIDpkdXJvbGU6YHN1YnNjcmlwdGAgLS0gc3Vic2NyaXB0IHRleHQKKiA6ZHVyb2xlOmBzdXBlcnNjcmlwdGAgLS0gc3VwZXJzY3JpcHQgdGV4dAoqIDpkdXJvbGU6YHRpdGxlLXJlZmVyZW5jZWAgLS0gZm9yIHRpdGxlcyBvZiBib29rcywgcGVyaW9kaWNhbHMsIGFuZCBvdGhlcgogIG1hdGVyaWFscwoKU2VlIDpyZWY6YGlubGluZS1tYXJrdXBgIGZvciByb2xlcyBhZGRlZCBieSBTcGhpbnguCgoKTGlzdHMgYW5kIFF1b3RlLWxpa2UgYmxvY2tzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKTGlzdCBtYXJrdXAgKDpkdXJlZjpgcmVmICZsdDtidWxsZXQtbGlzdHMmZ3Q7YCkgaXMgbmF0dXJhbDoganVzdCBwbGFjZSBhbiBhc3RlcmlzayBhdAp0aGUgc3RhcnQgb2YgYSBwYXJhZ3JhcGggYW5kIGluZGVudCBwcm9wZXJseS4gIFRoZSBzYW1lIGdvZXMgZm9yIG51bWJlcmVkIGxpc3RzOwp0aGV5IGNhbiBhbHNvIGJlIGF1dG9udW1iZXJlZCB1c2luZyBhIGBgI2BgIHNpZ246OgoKICAgKiBUaGlzIGlzIGEgYnVsbGV0ZWQgbGlzdC4KICAgKiBJdCBoYXMgdHdvIGl0ZW1zLCB0aGUgc2Vjb25kCiAgICAgaXRlbSB1c2VzIHR3byBsaW5lcy4KCiAgIDEuIFRoaXMgaXMgYSBudW1iZXJlZCBsaXN0LgogICAyLiBJdCBoYXMgdHdvIGl0ZW1zIHRvby4KCiAgICMuIFRoaXMgaXMgYSBudW1iZXJlZCBsaXN0LgogICAjLiBJdCBoYXMgdHdvIGl0ZW1zIHRvby4KCgpOZXN0ZWQgbGlzdHMgYXJlIHBvc3NpYmxlLCBidXQgYmUgYXdhcmUgdGhhdCB0aGV5IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlCnBhcmVudCBsaXN0IGl0ZW1zIGJ5IGJsYW5rIGxpbmVzOjoKCiAgICogdGhpcyBpcwogICAqIGEgbGlzdAoKICAgICAqIHdpdGggYSBuZXN0ZWQgbGlzdAogICAgICogYW5kIHNvbWUgc3ViaXRlbXMKCiAgICogYW5kIGhlcmUgdGhlIHBhcmVudCBsaXN0IGNvbnRpbnVlcwoKRGVmaW5pdGlvbiBsaXN0cyAoOmR1cmVmOmByZWYgJmx0O2RlZmluaXRpb24tbGlzdHMmZ3Q7YCkgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czo6CgogICB0ZXJtICh1cCB0byBhIGxpbmUgb2YgdGV4dCkKICAgICAgRGVmaW5pdGlvbiBvZiB0aGUgdGVybSwgd2hpY2ggbXVzdCBiZSBpbmRlbnRlZAoKICAgICAgYW5kIGNhbiBldmVuIGNvbnNpc3Qgb2YgbXVsdGlwbGUgcGFyYWdyYXBocwoKICAgbmV4dCB0ZXJtCiAgICAgIERlc2NyaXB0aW9uLgoKTm90ZSB0aGF0IHRoZSB0ZXJtIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LgoKUXVvdGVkIHBhcmFncmFwaHMgKDpkdXJlZjpgcmVmICZsdDtibG9jay1xdW90ZXMmZ3Q7YCkgYXJlIGNyZWF0ZWQgYnkganVzdCBpbmRlbnRpbmcKdGhlbSBtb3JlIHRoYW4gdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMuCgpMaW5lIGJsb2NrcyAoOmR1cmVmOmByZWYgJmx0O2xpbmUtYmxvY2tzJmd0O2ApIGFyZSBhIHdheSBvZiBwcmVzZXJ2aW5nIGxpbmUgYnJlYWtzOjoKCiAgIHwgVGhlc2UgbGluZXMgYXJlCiAgIHwgYnJva2VuIGV4YWN0bHkgbGlrZSBpbgogICB8IHRoZSBzb3VyY2UgZmlsZS4KClRoZXJlIGFyZSBhbHNvIHNldmVyYWwgbW9yZSBzcGVjaWFsIGJsb2NrcyBhdmFpbGFibGU6CgoqIGZpZWxkIGxpc3RzICg6ZHVyZWY6YHJlZiAmbHQ7ZmllbGQtbGlzdHMmZ3Q7YCkKKiBvcHRpb24gbGlzdHMgKDpkdXJlZjpgcmVmICZsdDtvcHRpb24tbGlzdHMmZ3Q7YCkKKiBxdW90ZWQgbGl0ZXJhbCBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtxdW90ZWQtbGl0ZXJhbC1ibG9ja3MmZ3Q7YCkKKiBkb2N0ZXN0IGJsb2NrcyAoOmR1cmVmOmByZWYgJmx0O2RvY3Rlc3QtYmxvY2tzJmd0O2ApCgoKU291cmNlIENvZGUKLS0tLS0tLS0tLS0KCkxpdGVyYWwgY29kZSBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtsaXRlcmFsLWJsb2NrcyZndDtgKSBhcmUgaW50cm9kdWNlZCBieSBlbmRpbmcgYQpwYXJhZ3JhcGggd2l0aCB0aGUgc3BlY2lhbCBtYXJrZXIgYGA6OmBgLiAgVGhlIGxpdGVyYWwgYmxvY2sgbXVzdCBiZSBpbmRlbnRlZAooYW5kLCBsaWtlIGFsbCBwYXJhZ3JhcGhzLCBzZXBhcmF0ZWQgZnJvbSB0aGUgc3Vycm91bmRpbmcgb25lcyBieSBibGFuayBsaW5lcyk6OgoKICAgVGhpcyBpcyBhIG5vcm1hbCB0ZXh0IHBhcmFncmFwaC4gVGhlIG5leHQgcGFyYWdyYXBoIGlzIGEgY29kZSBzYW1wbGU6OgoKICAgICAgSXQgaXMgbm90IHByb2Nlc3NlZCBpbiBhbnkgd2F5LCBleGNlcHQKICAgICAgdGhhdCB0aGUgaW5kZW50YXRpb24gaXMgcmVtb3ZlZC4KCiAgICAgIEl0IGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzLgoKICAgVGhpcyBpcyBhIG5vcm1hbCB0ZXh0IHBhcmFncmFwaCBhZ2Fpbi4KClRoZSBoYW5kbGluZyBvZiB0aGUgYGA6OmBgIG1hcmtlciBpcyBzbWFydDoKCiogSWYgaXQgb2NjdXJzIGFzIGEgcGFyYWdyYXBoIG9mIGl0cyBvd24sIHRoYXQgcGFyYWdyYXBoIGlzIGNvbXBsZXRlbHkgbGVmdAogIG91dCBvZiB0aGUgZG9jdW1lbnQuCiogSWYgaXQgaXMgcHJlY2VkZWQgYnkgd2hpdGVzcGFjZSwgdGhlIG1hcmtlciBpcyByZW1vdmVkLgoqIElmIGl0IGlzIHByZWNlZGVkIGJ5IG5vbi13aGl0ZXNwYWNlLCB0aGUgbWFya2VyIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlCiAgY29sb24uCgpUaGF0IHdheSwgdGhlIHNlY29uZCBzZW50ZW5jZSBpbiB0aGUgYWJvdmUgZXhhbXBsZSdzIGZpcnN0IHBhcmFncmFwaCB3b3VsZCBiZQpyZW5kZXJlZCBhcyAiVGhlIG5leHQgcGFyYWdyYXBoIGlzIGEgY29kZSBzYW1wbGU6Ii4KCgouLiBfcnN0LXRhYmxlczoKClRhYmxlcwotLS0tLS0KClR3byBmb3JtcyBvZiB0YWJsZXMgYXJlIHN1cHBvcnRlZC4gIEZvciAqZ3JpZCB0YWJsZXMqICg6ZHVyZWY6YHJlZgombHQ7Z3JpZC10YWJsZXMmZ3Q7YCksIHlvdSBoYXZlIHRvICJwYWludCIgdGhlIGNlbGwgZ3JpZCB5b3Vyc2VsZi4gIFRoZXkgbG9vayBsaWtlCnRoaXM6OgoKICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKwogICB8IEhlYWRlciByb3csIGNvbHVtbiAxICAgfCBIZWFkZXIgMiAgIHwgSGVhZGVyIDMgfCBIZWFkZXIgNCB8CiAgIHwgKGhlYWRlciByb3dzIG9wdGlvbmFsKSB8ICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwKICAgKz09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rPT09PT09PT09PSs9PT09PT09PT09KwogICB8IGJvZHkgcm93IDEsIGNvbHVtbiAxICAgfCBjb2x1bW4gMiAgIHwgY29sdW1uIDMgfCBjb2x1bW4gNCB8CiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKICAgfCBib2R5IHJvdyAyICAgICAgICAgICAgIHwgLi4uICAgICAgICB8IC4uLiAgICAgIHwgICAgICAgICAgfAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCgoqU2ltcGxlIHRhYmxlcyogKDpkdXJlZjpgcmVmICZsdDtzaW1wbGUtdGFibGVzJmd0O2ApIGFyZSBlYXNpZXIgdG8gd3JpdGUsIGJ1dApsaW1pdGVkOiB0aGV5IG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJvdywgYW5kIHRoZSBmaXJzdCBjb2x1bW4gY2Fubm90CmNvbnRhaW4gbXVsdGlwbGUgbGluZXMuICBUaGV5IGxvb2sgbGlrZSB0aGlzOjoKCiAgID09PT09ICA9PT09PSAgPT09PT09PQogICBBICAgICAgQiAgICAgIEEgYW5kIEIKICAgPT09PT0gID09PT09ICA9PT09PT09CiAgIEZhbHNlICBGYWxzZSAgRmFsc2UKICAgVHJ1ZSAgIEZhbHNlICBGYWxzZQogICBGYWxzZSAgVHJ1ZSAgIEZhbHNlCiAgIFRydWUgICBUcnVlICAgVHJ1ZQogICA9PT09PSAgPT09PT0gID09PT09PT0KCgpIeXBlcmxpbmtzCi0tLS0tLS0tLS0KCkV4dGVybmFsIGxpbmtzCl5eXl5eXl5eXl5eXl5eCgpVc2UgYGBgTGluayB0ZXh0ICZsdDtodHRwOi8vZXhhbXBsZS5jb20vJmd0O2BfYGAgZm9yIGlubGluZSB3ZWIgbGlua3MuICBJZiB0aGUgbGluawp0ZXh0IHNob3VsZCBiZSB0aGUgd2ViIGFkZHJlc3MsIHlvdSBkb24ndCBuZWVkIHNwZWNpYWwgbWFya3VwIGF0IGFsbCwgdGhlIHBhcnNlcgpmaW5kcyBsaW5rcyBhbmQgbWFpbCBhZGRyZXNzZXMgaW4gb3JkaW5hcnkgdGV4dC4KCllvdSBjYW4gYWxzbyBzZXBhcmF0ZSB0aGUgbGluayBhbmQgdGhlIHRhcmdldCBkZWZpbml0aW9uICg6ZHVyZWY6YHJlZgombHQ7aHlwZXJsaW5rLXRhcmdldHMmZ3Q7YCksIGxpa2UgdGhpczo6CgogICBUaGlzIGlzIGEgcGFyYWdyYXBoIHRoYXQgY29udGFpbnMgYGEgbGlua2BfLgoKICAgLi4gX2EgbGluazogaHR0cDovL2V4YW1wbGUuY29tLwoKCkludGVybmFsIGxpbmtzCl5eXl5eXl5eXl5eXl5eCgpJbnRlcm5hbCBsaW5raW5nIGlzIGRvbmUgdmlhIGEgc3BlY2lhbCByZVNUIHJvbGUgcHJvdmlkZWQgYnkgU3BoaW54LCBzZWUgdGhlCnNlY3Rpb24gb24gc3BlY2lmaWMgbWFya3VwLCA6cmVmOmByZWYtcm9sZWAuCgoKU2VjdGlvbnMKLS0tLS0tLS0KClNlY3Rpb24gaGVhZGVycyAoOmR1cmVmOmByZWYgJmx0O3NlY3Rpb25zJmd0O2ApIGFyZSBjcmVhdGVkIGJ5IHVuZGVybGluaW5nIChhbmQKb3B0aW9uYWxseSBvdmVybGluaW5nKSB0aGUgc2VjdGlvbiB0aXRsZSB3aXRoIGEgcHVuY3R1YXRpb24gY2hhcmFjdGVyLCBhdCBsZWFzdAphcyBsb25nIGFzIHRoZSB0ZXh0OjoKCiAgID09PT09PT09PT09PT09PT09CiAgIFRoaXMgaXMgYSBoZWFkaW5nCiAgID09PT09PT09PT09PT09PT09CgpOb3JtYWxseSwgdGhlcmUgYXJlIG5vIGhlYWRpbmcgbGV2ZWxzIGFzc2lnbmVkIHRvIGNlcnRhaW4gY2hhcmFjdGVycyBhcyB0aGUKc3RydWN0dXJlIGlzIGRldGVybWluZWQgZnJvbSB0aGUgc3VjY2Vzc2lvbiBvZiBoZWFkaW5ncy4gIEhvd2V2ZXIsIGZvciB0aGUKUHl0aG9uIGRvY3VtZW50YXRpb24sIHRoaXMgY29udmVudGlvbiBpcyB1c2VkIHdoaWNoIHlvdSBtYXkgZm9sbG93OgoKKiBgYCNgYCB3aXRoIG92ZXJsaW5lLCBmb3IgcGFydHMKKiBgYCpgYCB3aXRoIG92ZXJsaW5lLCBmb3IgY2hhcHRlcnMKKiBgYD1gYCwgZm9yIHNlY3Rpb25zCiogYGAtYGAsIGZvciBzdWJzZWN0aW9ucwoqIGBgXmBgLCBmb3Igc3Vic3Vic2VjdGlvbnMKKiBgYCJgYCwgZm9yIHBhcmFncmFwaHMKCk9mIGNvdXJzZSwgeW91IGFyZSBmcmVlIHRvIHVzZSB5b3VyIG93biBtYXJrZXIgY2hhcmFjdGVycyAoc2VlIHRoZSByZVNUCmRvY3VtZW50YXRpb24pLCBhbmQgdXNlIGEgZGVlcGVyIG5lc3RpbmcgbGV2ZWwsIGJ1dCBrZWVwIGluIG1pbmQgdGhhdCBtb3N0CnRhcmdldCBmb3JtYXRzIChIVE1MLCBMYVRlWCkgaGF2ZSBhIGxpbWl0ZWQgc3VwcG9ydGVkIG5lc3RpbmcgZGVwdGguCgoKRXhwbGljaXQgTWFya3VwCi0tLS0tLS0tLS0tLS0tLQoKIkV4cGxpY2l0IG1hcmt1cCIgKDpkdXJlZjpgcmVmICZsdDtleHBsaWNpdC1tYXJrdXAtYmxvY2tzJmd0O2ApIGlzIHVzZWQgaW4gcmVTVCBmb3IKbW9zdCBjb25zdHJ1Y3RzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIGZvb3Rub3RlcywKc3BlY2lhbGx5LWhpZ2hsaWdodGVkIHBhcmFncmFwaHMsIGNvbW1lbnRzLCBhbmQgZ2VuZXJpYyBkaXJlY3RpdmVzLgoKQW4gZXhwbGljaXQgbWFya3VwIGJsb2NrIGJlZ2lucyB3aXRoIGEgbGluZSBzdGFydGluZyB3aXRoIGBgLi5gYCBmb2xsb3dlZCBieQp3aGl0ZXNwYWNlIGFuZCBpcyB0ZXJtaW5hdGVkIGJ5IHRoZSBuZXh0IHBhcmFncmFwaCBhdCB0aGUgc2FtZSBsZXZlbCBvZgppbmRlbnRhdGlvbi4gIChUaGVyZSBuZWVkcyB0byBiZSBhIGJsYW5rIGxpbmUgYmV0d2VlbiBleHBsaWNpdCBtYXJrdXAgYW5kIG5vcm1hbApwYXJhZ3JhcGhzLiAgVGhpcyBtYXkgYWxsIHNvdW5kIGEgYml0IGNvbXBsaWNhdGVkLCBidXQgaXQgaXMgaW50dWl0aXZlIGVub3VnaAp3aGVuIHlvdSB3cml0ZSBpdC4pCgoKLi4gX2RpcmVjdGl2ZXM6CgpEaXJlY3RpdmVzCi0tLS0tLS0tLS0KCkEgZGlyZWN0aXZlICg6ZHVyZWY6YHJlZiAmbHQ7ZGlyZWN0aXZlcyZndDtgKSBpcyBhIGdlbmVyaWMgYmxvY2sgb2YgZXhwbGljaXQgbWFya3VwLgpCZXNpZGVzIHJvbGVzLCBpdCBpcyBvbmUgb2YgdGhlIGV4dGVuc2lvbiBtZWNoYW5pc21zIG9mIHJlU1QsIGFuZCBTcGhpbnggbWFrZXMKaGVhdnkgdXNlIG9mIGl0LgoKRG9jdXRpbHMgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBkaXJlY3RpdmVzOgoKKiBBZG1vbml0aW9uczogOmR1ZGlyOmBhdHRlbnRpb25gLCA6ZHVkaXI6YGNhdXRpb25gLCA6ZHVkaXI6YGRhbmdlcmAsCiAgOmR1ZGlyOmBlcnJvcmAsIDpkdWRpcjpgaGludGAsIDpkdWRpcjpgaW1wb3J0YW50YCwgOmR1ZGlyOmBub3RlYCwKICA6ZHVkaXI6YHRpcGAsIDpkdWRpcjpgd2FybmluZ2AgYW5kIHRoZSBnZW5lcmljIDpkdWRpcjpgYWRtb25pdGlvbmAuCiAgKE1vc3QgdGhlbWVzIHN0eWxlIG9ubHkgIm5vdGUiIGFuZCAid2FybmluZyIgc3BlY2lhbGx5LikKCiogSW1hZ2VzOgoKICAtIDpkdWRpcjpgaW1hZ2VgIChzZWUgYWxzbyBJbWFnZXNfIGJlbG93KQogIC0gOmR1ZGlyOmBmaWd1cmVgIChhbiBpbWFnZSB3aXRoIGNhcHRpb24gYW5kIG9wdGlvbmFsIGxlZ2VuZCkKCiogQWRkaXRpb25hbCBib2R5IGVsZW1lbnRzOgoKICAtIDpkdWRpcjpgY29udGVudHNgIChhIGxvY2FsLCBpLmUuIGZvciB0aGUgY3VycmVudCBmaWxlIG9ubHksIHRhYmxlIG9mCiAgICBjb250ZW50cykKICAtIDpkdWRpcjpgY29udGFpbmVyYCAoYSBjb250YWluZXIgd2l0aCBhIGN1c3RvbSBjbGFzcywgdXNlZnVsIHRvIGdlbmVyYXRlIGFuCiAgICBvdXRlciBgYCZsdDtkaXYmZ3Q7YGAgaW4gSFRNTCkKICAtIDpkdWRpcjpgcnVicmljYCAoYSBoZWFkaW5nIHdpdGhvdXQgcmVsYXRpb24gdG8gdGhlIGRvY3VtZW50IHNlY3Rpb25pbmcpCiAgLSA6ZHVkaXI6YHRvcGljYCwgOmR1ZGlyOmBzaWRlYmFyYCAoc3BlY2lhbCBoaWdobGlnaHRlZCBib2R5IGVsZW1lbnRzKQogIC0gOmR1ZGlyOmBwYXJzZWQtbGl0ZXJhbGAgKGxpdGVyYWwgYmxvY2sgdGhhdCBzdXBwb3J0cyBpbmxpbmUgbWFya3VwKQogIC0gOmR1ZGlyOmBlcGlncmFwaGAgKGEgYmxvY2sgcXVvdGUgd2l0aCBvcHRpb25hbCBhdHRyaWJ1dGlvbiBsaW5lKQogIC0gOmR1ZGlyOmBoaWdobGlnaHRzYCwgOmR1ZGlyOmBwdWxsLXF1b3RlYCAoYmxvY2sgcXVvdGVzIHdpdGggdGhlaXIgb3duCiAgICBjbGFzcyBhdHRyaWJ1dGUpCiAgLSA6ZHVkaXI6YGNvbXBvdW5kYCAoYSBjb21wb3VuZCBwYXJhZ3JhcGgpCgoqIFNwZWNpYWwgdGFibGVzOgoKICAtIDpkdWRpcjpgdGFibGVgIChhIHRhYmxlIHdpdGggdGl0bGUpCiAgLSA6ZHVkaXI6YGNzdi10YWJsZWAgKGEgdGFibGUgZ2VuZXJhdGVkIGZyb20gY29tbWEtc2VwYXJhdGVkIHZhbHVlcykKICAtIDpkdWRpcjpgbGlzdC10YWJsZWAgKGEgdGFibGUgZ2VuZXJhdGVkIGZyb20gYSBsaXN0IG9mIGxpc3RzKQoKKiBTcGVjaWFsIGRpcmVjdGl2ZXM6CgogIC0gOmR1ZGlyOmByYXdgIChpbmNsdWRlIHJhdyB0YXJnZXQtZm9ybWF0IG1hcmt1cCkKICAtIDpkdWRpcjpgaW5jbHVkZWAgKGluY2x1ZGUgcmVTdHJ1Y3R1cmVkVGV4dCBmcm9tIGFub3RoZXIgZmlsZSkKICAgIC0tIGluIFNwaGlueCwgd2hlbiBnaXZlbiBhbiBhYnNvbHV0ZSBpbmNsdWRlIGZpbGUgcGF0aCwgdGhpcyBkaXJlY3RpdmUgdGFrZXMKICAgIGl0IGFzIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5CiAgLSA6ZHVkaXI6YGNsYXNzYCAoYXNzaWduIGEgY2xhc3MgYXR0cmlidXRlIHRvIHRoZSBuZXh0IGVsZW1lbnQpIFsxXV8KCiogSFRNTCBzcGVjaWZpY3M6CgogIC0gOmR1ZGlyOmBtZXRhYCAoZ2VuZXJhdGlvbiBvZiBIVE1MIGBgJmx0O21ldGEmZ3Q7YGAgdGFncykKICAtIDpkdWRpcjpgdGl0bGVgIChvdmVycmlkZSBkb2N1bWVudCB0aXRsZSkKCiogSW5mbHVlbmNpbmcgbWFya3VwOgoKICAtIDpkdWRpcjpgZGVmYXVsdC1yb2xlYCAoc2V0IGEgbmV3IGRlZmF1bHQgcm9sZSkKICAtIDpkdWRpcjpgcm9sZWAgKGNyZWF0ZSBhIG5ldyByb2xlKQoKICBTaW5jZSB0aGVzZSBhcmUgb25seSBwZXItZmlsZSwgYmV0dGVyIHVzZSBTcGhpbngnIGZhY2lsaXRpZXMgZm9yIHNldHRpbmcgdGhlCiAgOmNvbmZ2YWw6YGRlZmF1bHRfcm9sZWAuCgpEbyAqbm90KiB1c2UgdGhlIGRpcmVjdGl2ZXMgOmR1ZGlyOmBzZWN0bnVtYCwgOmR1ZGlyOmBoZWFkZXJgIGFuZAo6ZHVkaXI6YGZvb3RlcmAuCgpEaXJlY3RpdmVzIGFkZGVkIGJ5IFNwaGlueCBhcmUgZGVzY3JpYmVkIGluIDpyZWY6YHNwaGlueG1hcmt1cGAuCgpCYXNpY2FsbHksIGEgZGlyZWN0aXZlIGNvbnNpc3RzIG9mIGEgbmFtZSwgYXJndW1lbnRzLCBvcHRpb25zIGFuZCBjb250ZW50LiAoS2VlcAp0aGlzIHRlcm1pbm9sb2d5IGluIG1pbmQsIGl0IGlzIHVzZWQgaW4gdGhlIG5leHQgY2hhcHRlciBkZXNjcmliaW5nIGN1c3RvbQpkaXJlY3RpdmVzLikgIExvb2tpbmcgYXQgdGhpcyBleGFtcGxlLCA6OgoKICAgLi4gZnVuY3Rpb246OiBmb28oeCkKICAgICAgICAgICAgICAgICBmb28oeSwgeikKICAgICAgOm1vZHVsZTogc29tZS5tb2R1bGUubmFtZQoKICAgICAgUmV0dXJuIGEgbGluZSBvZiB0ZXh0IGlucHV0IGZyb20gdGhlIHVzZXIuCgpgYGZ1bmN0aW9uYGAgaXMgdGhlIGRpcmVjdGl2ZSBuYW1lLiAgSXQgaXMgZ2l2ZW4gdHdvIGFyZ3VtZW50cyBoZXJlLCB0aGUKcmVtYWluZGVyIG9mIHRoZSBmaXJzdCBsaW5lIGFuZCB0aGUgc2Vjb25kIGxpbmUsIGFzIHdlbGwgYXMgb25lIG9wdGlvbgpgYG1vZHVsZWBgIChhcyB5b3UgY2FuIHNlZSwgb3B0aW9ucyBhcmUgZ2l2ZW4gaW4gdGhlIGxpbmVzIGltbWVkaWF0ZWx5IGZvbGxvd2luZwp0aGUgYXJndW1lbnRzIGFuZCBpbmRpY2F0ZWQgYnkgdGhlIGNvbG9ucykuICBPcHRpb25zIG11c3QgYmUgaW5kZW50ZWQgdG8gdGhlCnNhbWUgbGV2ZWwgYXMgdGhlIGRpcmVjdGl2ZSBjb250ZW50LgoKVGhlIGRpcmVjdGl2ZSBjb250ZW50IGZvbGxvd3MgYWZ0ZXIgYSBibGFuayBsaW5lIGFuZCBpcyBpbmRlbnRlZCByZWxhdGl2ZSB0byB0aGUKZGlyZWN0aXZlIHN0YXJ0LgoKCkltYWdlcwotLS0tLS0KCnJlU1Qgc3VwcG9ydHMgYW4gaW1hZ2UgZGlyZWN0aXZlICg6ZHVkaXI6YHJlZiAmbHQ7aW1hZ2UmZ3Q7YCksIHVzZWQgbGlrZSBzbzo6CgogICAuLiBpbWFnZTo6IGdudS5wbmcKICAgICAgKG9wdGlvbnMpCgpXaGVuIHVzZWQgd2l0aGluIFNwaGlueCwgdGhlIGZpbGUgbmFtZSBnaXZlbiAoaGVyZSBgYGdudS5wbmdgYCkgbXVzdCBlaXRoZXIgYmUKcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBmaWxlLCBvciBhYnNvbHV0ZSB3aGljaCBtZWFucyB0aGF0IHRoZXkgYXJlIHJlbGF0aXZlIHRvCnRoZSB0b3Agc291cmNlIGRpcmVjdG9yeS4gIEZvciBleGFtcGxlLCB0aGUgZmlsZSBgYHNrZXRjaC9zcGFtLnJzdGBgIGNvdWxkIHJlZmVyCnRvIHRoZSBpbWFnZSBgYGltYWdlcy9zcGFtLnBuZ2BgIGFzIGBgLi4vaW1hZ2VzL3NwYW0ucG5nYGAgb3IKYGAvaW1hZ2VzL3NwYW0ucG5nYGAuCgpTcGhpbnggd2lsbCBhdXRvbWF0aWNhbGx5IGNvcHkgaW1hZ2UgZmlsZXMgb3ZlciB0byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgb3V0cHV0CmRpcmVjdG9yeSBvbiBidWlsZGluZyAoZS5nLiB0aGUgYGBfc3RhdGljYGAgZGlyZWN0b3J5IGZvciBIVE1MIG91dHB1dC4pCgpJbnRlcnByZXRhdGlvbiBvZiBpbWFnZSBzaXplIG9wdGlvbnMgKGBgd2lkdGhgYCBhbmQgYGBoZWlnaHRgYCkgaXMgYXMgZm9sbG93czoKaWYgdGhlIHNpemUgaGFzIG5vIHVuaXQgb3IgdGhlIHVuaXQgaXMgcGl4ZWxzLCB0aGUgZ2l2ZW4gc2l6ZSB3aWxsIG9ubHkgYmUKcmVzcGVjdGVkIGZvciBvdXRwdXQgY2hhbm5lbHMgdGhhdCBzdXBwb3J0IHBpeGVscyAoaS5lLiBub3QgaW4gTGFUZVggb3V0cHV0KS4KT3RoZXIgdW5pdHMgKGxpa2UgYGBwdGBgIGZvciBwb2ludHMpIHdpbGwgYmUgdXNlZCBmb3IgSFRNTCBhbmQgTGFUZVggb3V0cHV0LgoKU3BoaW54IGV4dGVuZHMgdGhlIHN0YW5kYXJkIGRvY3V0aWxzIGJlaGF2aW9yIGJ5IGFsbG93aW5nIGFuIGFzdGVyaXNrIGZvciB0aGUKZXh0ZW5zaW9uOjoKCiAgIC4uIGltYWdlOjogZ251LioKClNwaGlueCB0aGVuIHNlYXJjaGVzIGZvciBhbGwgaW1hZ2VzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBwYXR0ZXJuIGFuZCBkZXRlcm1pbmVzCnRoZWlyIHR5cGUuICBFYWNoIGJ1aWxkZXIgdGhlbiBjaG9vc2VzIHRoZSBiZXN0IGltYWdlIG91dCBvZiB0aGVzZSBjYW5kaWRhdGVzLgpGb3IgaW5zdGFuY2UsIGlmIHRoZSBmaWxlIG5hbWUgYGBnbnUuKmBgIHdhcyBnaXZlbiBhbmQgdHdvIGZpbGVzIDpmaWxlOmBnbnUucGRmYAphbmQgOmZpbGU6YGdudS5wbmdgIGV4aXN0ZWQgaW4gdGhlIHNvdXJjZSB0cmVlLCB0aGUgTGFUZVggYnVpbGRlciB3b3VsZCBjaG9vc2UKdGhlIGZvcm1lciwgd2hpbGUgdGhlIEhUTUwgYnVpbGRlciB3b3VsZCBwcmVmZXIgdGhlIGxhdHRlci4KCi4uIHZlcnNpb25jaGFuZ2VkOjogMC40CiAgIEFkZGVkIHRoZSBzdXBwb3J0IGZvciBmaWxlIG5hbWVzIGVuZGluZyBpbiBhbiBhc3Rlcmlzay4KCi4uIHZlcnNpb25jaGFuZ2VkOjogMC42CiAgIEltYWdlIHBhdGhzIGNhbiBub3cgYmUgYWJzb2x1dGUuCgoKRm9vdG5vdGVzCi0tLS0tLS0tLQoKRm9yIGZvb3Rub3RlcyAoOmR1cmVmOmByZWYgJmx0O2Zvb3Rub3RlcyZndDtgKSwgdXNlIGBgWyNuYW1lXV9gYCB0byBtYXJrIHRoZSBmb290bm90ZQpsb2NhdGlvbiwgYW5kIGFkZCB0aGUgZm9vdG5vdGUgYm9keSBhdCB0aGUgYm90dG9tIG9mIHRoZSBkb2N1bWVudCBhZnRlciBhCiJGb290bm90ZXMiIHJ1YnJpYyBoZWFkaW5nLCBsaWtlIHNvOjoKCiAgIExvcmVtIGlwc3VtIFsjZjFdXyBkb2xvciBzaXQgYW1ldCAuLi4gWyNmMl1fCgogICAuLiBydWJyaWM6OiBGb290bm90ZXMKCiAgIC4uIFsjZjFdIFRleHQgb2YgdGhlIGZpcnN0IGZvb3Rub3RlLgogICAuLiBbI2YyXSBUZXh0IG9mIHRoZSBzZWNvbmQgZm9vdG5vdGUuCgpZb3UgY2FuIGFsc28gZXhwbGljaXRseSBudW1iZXIgdGhlIGZvb3Rub3RlcyAoYGBbMV1fYGApIG9yIHVzZSBhdXRvLW51bWJlcmVkCmZvb3Rub3RlcyB3aXRob3V0IG5hbWVzIChgYFsjXV9gYCkuCgoKQ2l0YXRpb25zCi0tLS0tLS0tLQoKU3RhbmRhcmQgcmVTVCBjaXRhdGlvbnMgKDpkdXJlZjpgcmVmICZsdDtjaXRhdGlvbnMmZ3Q7YCkgYXJlIHN1cHBvcnRlZCwgd2l0aCB0aGUKYWRkaXRpb25hbCBmZWF0dXJlIHRoYXQgdGhleSBhcmUgImdsb2JhbCIsIGkuZS4gYWxsIGNpdGF0aW9ucyBjYW4gYmUgcmVmZXJlbmNlZApmcm9tIGFsbCBmaWxlcy4gIFVzZSB0aGVtIGxpa2Ugc286OgoKICAgTG9yZW0gaXBzdW0gW1JlZl1fIGRvbG9yIHNpdCBhbWV0LgoKICAgLi4gW1JlZl0gQm9vayBvciBhcnRpY2xlIHJlZmVyZW5jZSwgVVJMIG9yIHdoYXRldmVyLgoKQ2l0YXRpb24gdXNhZ2UgaXMgc2ltaWxhciB0byBmb290bm90ZSB1c2FnZSwgYnV0IHdpdGggYSBsYWJlbCB0aGF0IGlzIG5vdApudW1lcmljIG9yIGJlZ2lucyB3aXRoIGBgI2BgLgoKClN1YnN0aXR1dGlvbnMKLS0tLS0tLS0tLS0tLQoKcmVTVCBzdXBwb3J0cyAic3Vic3RpdHV0aW9ucyIgKDpkdXJlZjpgcmVmICZsdDtzdWJzdGl0dXRpb24tZGVmaW5pdGlvbnMmZ3Q7YCksIHdoaWNoCmFyZSBwaWVjZXMgb2YgdGV4dCBhbmQvb3IgbWFya3VwIHJlZmVycmVkIHRvIGluIHRoZSB0ZXh0IGJ5IGBgfG5hbWV8YGAuICBUaGV5CmFyZSBkZWZpbmVkIGxpa2UgZm9vdG5vdGVzIHdpdGggZXhwbGljaXQgbWFya3VwIGJsb2NrcywgbGlrZSB0aGlzOjoKCiAgIC4uIHxuYW1lfCByZXBsYWNlOjogcmVwbGFjZW1lbnQgKnRleHQqCgpvciB0aGlzOjoKCiAgIC4uIHxjYXV0aW9ufCBpbWFnZTo6IHdhcm5pbmcucG5nCiAgICAgICAgICAgICAgICA6YWx0OiBXYXJuaW5nIQoKU2VlIHRoZSA6ZHVyZWY6YHJlU1QgcmVmZXJlbmNlIGZvciBzdWJzdGl0dXRpb25zICZsdDtzdWJzdGl0dXRpb24tZGVmaW5pdGlvbnMmZ3Q7YApmb3IgZGV0YWlscy4KCklmIHlvdSB3YW50IHRvIHVzZSBzb21lIHN1YnN0aXR1dGlvbnMgZm9yIGFsbCBkb2N1bWVudHMsIHB1dCB0aGVtIGludG8KOmNvbmZ2YWw6YHJzdF9wcm9sb2dgIG9yIHB1dCB0aGVtIGludG8gYSBzZXBhcmF0ZSBmaWxlIGFuZCBpbmNsdWRlIGl0IGludG8gYWxsCmRvY3VtZW50cyB5b3Ugd2FudCB0byB1c2UgdGhlbSBpbiwgdXNpbmcgdGhlIDpyc3Q6ZGlyOmBpbmNsdWRlYCBkaXJlY3RpdmUuICAoQmUKc3VyZSB0byBnaXZlIHRoZSBpbmNsdWRlIGZpbGUgYSBmaWxlIG5hbWUgZXh0ZW5zaW9uIGRpZmZlcmluZyBmcm9tIHRoYXQgb2Ygb3RoZXIKc291cmNlIGZpbGVzLCB0byBhdm9pZCBTcGhpbnggZmluZGluZyBpdCBhcyBhIHN0YW5kYWxvbmUgZG9jdW1lbnQuKQoKU3BoaW54IGRlZmluZXMgc29tZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMsIHNlZSA6cmVmOmBkZWZhdWx0LXN1YnN0aXR1dGlvbnNgLgoKCkNvbW1lbnRzCi0tLS0tLS0tCgpFdmVyeSBleHBsaWNpdCBtYXJrdXAgYmxvY2sgd2hpY2ggaXNuJ3QgYSB2YWxpZCBtYXJrdXAgY29uc3RydWN0IChsaWtlIHRoZQpmb290bm90ZXMgYWJvdmUpIGlzIHJlZ2FyZGVkIGFzIGEgY29tbWVudCAoOmR1cmVmOmByZWYgJmx0O2NvbW1lbnRzJmd0O2ApLiAgRm9yCmV4YW1wbGU6OgoKICAgLi4gVGhpcyBpcyBhIGNvbW1lbnQuCgpZb3UgY2FuIGluZGVudCB0ZXh0IGFmdGVyIGEgY29tbWVudCBzdGFydCB0byBmb3JtIG11bHRpbGluZSBjb21tZW50czo6CgogICAuLgogICAgICBUaGlzIHdob2xlIGluZGVudGVkIGJsb2NrCiAgICAgIGlzIGEgY29tbWVudC4KCiAgICAgIFN0aWxsIGluIHRoZSBjb21tZW50LgoKClNvdXJjZSBlbmNvZGluZwotLS0tLS0tLS0tLS0tLS0KClNpbmNlIHRoZSBlYXNpZXN0IHdheSB0byBpbmNsdWRlIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlIGVtIGRhc2hlcyBvciBjb3B5cmlnaHQKc2lnbnMgaW4gcmVTVCBpcyB0byBkaXJlY3RseSB3cml0ZSB0aGVtIGFzIFVuaWNvZGUgY2hhcmFjdGVycywgb25lIGhhcyB0bwpzcGVjaWZ5IGFuIGVuY29kaW5nLiAgU3BoaW54IGFzc3VtZXMgc291cmNlIGZpbGVzIHRvIGJlIGVuY29kZWQgaW4gVVRGLTggYnkKZGVmYXVsdDsgeW91IGNhbiBjaGFuZ2UgdGhpcyB3aXRoIHRoZSA6Y29uZnZhbDpgc291cmNlX2VuY29kaW5nYCBjb25maWcgdmFsdWUuCgoKR290Y2hhcwotLS0tLS0tCgpUaGVyZSBhcmUgc29tZSBwcm9ibGVtcyBvbmUgY29tbW9ubHkgcnVucyBpbnRvIHdoaWxlIGF1dGhvcmluZyByZVNUIGRvY3VtZW50czoKCiogKipTZXBhcmF0aW9uIG9mIGlubGluZSBtYXJrdXA6KiogQXMgc2FpZCBhYm92ZSwgaW5saW5lIG1hcmt1cCBzcGFucyBtdXN0IGJlCiAgc2VwYXJhdGVkIGZyb20gdGhlIHN1cnJvdW5kaW5nIHRleHQgYnkgbm9uLXdvcmQgY2hhcmFjdGVycywgeW91IGhhdmUgdG8gdXNlIGEKICBiYWNrc2xhc2gtZXNjYXBlZCBzcGFjZSB0byBnZXQgYXJvdW5kIHRoYXQuICBTZWUgYHRoZSByZWZlcmVuY2UKICAmbHQ7aHR0cDovL2RvY3V0aWxzLnNmLm5ldC9kb2NzL3JlZi9yc3QvcmVzdHJ1Y3R1cmVkdGV4dC5odG1sI2lubGluZS1tYXJrdXAmZ3Q7YF8KICBmb3IgdGhlIGRldGFpbHMuCgoqICoqTm8gbmVzdGVkIGlubGluZSBtYXJrdXA6KiogU29tZXRoaW5nIGxpa2UgYGAqc2VlIDpmdW5jOmBmb29gKmBgIGlzIG5vdAogIHBvc3NpYmxlLgoKCi4uIHJ1YnJpYzo6IEZvb3Rub3RlcwoKLi4gWzFdIFdoZW4gdGhlIGRlZmF1bHQgZG9tYWluIGNvbnRhaW5zIGEgOnJzdDpkaXI6YGNsYXNzYCBkaXJlY3RpdmUsIHRoaXMgZGlyZWN0aXZlCiAgICAgICB3aWxsIGJlIHNoYWRvd2VkLiAgVGhlcmVmb3JlLCBTcGhpbnggcmUtZXhwb3J0cyBpdCBhcyA6cnN0OmRpcjpgcnN0LWNsYXNzYC4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPlRoZSByZVN0cnVjdHVyZWRUZXh0IG1vZGUgc3VwcG9ydHMgb25lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyOjwvcD4KICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPnZlcmJhdGltIChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BIG5hbWUgb3IgTUlNRSB0eXBlIG9mIGEgbW9kZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgaGlnaGxpZ2h0aW5nCiAgICAgIHZlcmJhdGltIGJsb2Nrcy4gQnkgZGVmYXVsdCwgcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlIHVzZXMgdW5pZm9ybSBjb2xvcgogICAgICBmb3Igd2hvbGUgYmxvY2sgb2YgdmVyYmF0aW0gdGV4dCBpZiBubyBtb2RlIGlzIGdpdmVuLjwvZGQ+CiAgICA8L2RsPgogICAgPHA+SWYgPGNvZGU+cHl0aG9uPC9jb2RlPiBtb2RlIGlzIGF2YWlsYWJsZSAobm90IGEgcGFydCBvZiBDb2RlTWlycm9yIDIgeWV0KSwKICAgIGl0IHdpbGwgYmUgdXNlZCBmb3IgaGlnaGxpZ2h0aW5nIGJsb2NrcyBjb250YWluaW5nIFB5dGhvbi9JUHl0aG9uIHRlcm1pbmFsCiAgICBzZXNzaW9ucyAoYmxvY2tzIHN0YXJ0aW5nIHdpdGggPGNvZGU+Jmd0OyZndDsmZ3Q7PC9jb2RlPiAoZm9yIFB5dGhvbikgb3IKICAgIDxjb2RlPkluIFtudW1dOjwvY29kZT4gKGZvciBJUHl0aG9uKS4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJzdDwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/rst.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLWVtcGhhc2lzIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWludGVycHJldGVkIHsKICAgIGNvbG9yOiAjMzNjYzY2Owp9CgouY20tcy1kZWZhdWx0IHNwYW4uY20taW5saW5lIHsKICAgIGNvbG9yOiAjMzM5OWNjOwp9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tcm9sZSB7CiAgICBjb2xvcjogIzY2NjY5OTsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWxpc3QgewogICAgY29sb3I6ICNjYzAwOTk7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWJvZHkgewogICAgY29sb3I6ICM2Njk5Y2M7Cn0KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12ZXJiYXRpbSB7CiAgICBjb2xvcjogIzMzNjZmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhYTc3MDA7Cn0KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1kaXJlY3RpdmUgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzOTlmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWh5cGVybGluayB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiAjMzM2NmZmOwp9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tZm9vdG5vdGUgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzMzNmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWNpdGF0aW9uIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6ICMzMzAwZmY7Cn0KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1yZXBsYWNlbWVudCB7CiAgICBjb2xvcjogIzk5MzNjYzsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlY3Rpb24gewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogI2NjMDA5OTsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWRpcmVjdGl2ZS1tYXJrZXIgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzOTlmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXZlcmJhdGltLW1hcmtlciB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiAjOTkwMGZmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/rst.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCdyc3QnLCBmdW5jdGlvbihjb25maWcsIG9wdGlvbnMpIHsKICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBmbiwgY3R4KSB7CiAgICAgICAgc3RhdGUuZm4gPSBmbjsKICAgICAgICBzZXRDdHgoc3RhdGUsIGN0eCk7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Q3R4KHN0YXRlLCBjdHgpIHsKICAgICAgICBzdGF0ZS5jdHggPSBjdHggfHwge307CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Tm9ybWFsKHN0YXRlLCBjaCkgewogICAgICAgIGlmIChjaCAmJiAodHlwZW9mIGNoICE9PSAnc3RyaW5nJykpIHsKICAgICAgICAgICAgdmFyIHN0ciA9IGNoLmN1cnJlbnQoKTsKICAgICAgICAgICAgY2ggPSBzdHJbc3RyLmxlbmd0aC0xXTsKICAgICAgICB9CgogICAgICAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwsIHtiYWNrOiBjaH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGhhc01vZGUobW9kZSkgewogICAgICAgIGlmIChtb2RlKSB7CiAgICAgICAgICAgIHZhciBtb2RlcyA9IENvZGVNaXJyb3IubGlzdE1vZGVzKCk7CgogICAgICAgICAgICBmb3IgKHZhciBpIGluIG1vZGVzKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kZXNbaV0gPT0gbW9kZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TW9kZShtb2RlKSB7CiAgICAgICAgaWYgKGhhc01vZGUobW9kZSkpIHsKICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIG1vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICB2YXIgdmVyYmF0aW1Nb2RlID0gZ2V0TW9kZShvcHRpb25zLnZlcmJhdGltKTsKICAgIHZhciBweXRob25Nb2RlID0gZ2V0TW9kZSgncHl0aG9uJyk7CgogICAgdmFyIHJlU2VjdGlvbiA9IC9eWyEiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxcXV5fYHt8fX5dLzsKICAgIHZhciByZURpcmVjdGl2ZSA9IC9eXHMqXHcoWy06Llx3XSpcdyk/OjooXHN8JCkvOwogICAgdmFyIHJlSHlwZXJsaW5rID0gL15ccypfW1x3LV0rOihcc3wkKS87CiAgICB2YXIgcmVGb290bm90ZSA9IC9eXHMqXFsoXGQrfCMpXF0oXHN8JCkvOwogICAgdmFyIHJlQ2l0YXRpb24gPSAvXlxzKlxbW0EtWmEtel1bXHctXSpcXShcc3wkKS87CiAgICB2YXIgcmVGb290bm90ZVJlZiA9IC9eXFsoXGQrfCMpXF1fLzsKICAgIHZhciByZUNpdGF0aW9uUmVmID0gL15cW1tBLVphLXpdW1x3LV0qXF1fLzsKICAgIHZhciByZURpcmVjdGl2ZU1hcmtlciA9IC9eXC5cLihcc3wkKS87CiAgICB2YXIgcmVWZXJiYXRpbU1hcmtlciA9IC9eOjpccyokLzsKICAgIHZhciByZVByZUlubGluZSA9IC9eWy1ccyIoW3s8LzpdLzsKICAgIHZhciByZVBvc3RJbmxpbmUgPSAvXlstXHNgJyIpXF19Pi86Liw7IT9cXF9dLzsKICAgIHZhciByZUVudW1lcmF0ZWRMaXN0ID0gL15ccyooKFxkK3xbQS1aYS16I10pWy4pXXxcKChcZCt8W0EtWi1hLXojXSlcKSlccy87CiAgICB2YXIgcmVCdWxsZXRlZExpc3QgPSAvXlxzKlstXCtcKl1ccy87CiAgICB2YXIgcmVFeGFtcGxlcyA9IC9eXHMrKD4+PnxJbiBcW1xkK1xdOilccy87CgogICAgZnVuY3Rpb24gbm9ybWFsKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2gsIHNvbCwgaTsKCiAgICAgICAgaWYgKHN0cmVhbS5lYXQoL1xcLykpIHsKICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBzb2wgPSBzdHJlYW0uc29sKCk7CgogICAgICAgIGlmIChzb2wgJiYgKGNoID0gc3RyZWFtLmVhdChyZVNlY3Rpb24pKSkgewogICAgICAgICAgICBmb3IgKGkgPSAwOyBzdHJlYW0uZWF0KGNoKTsgaSsrKTsKCiAgICAgICAgICAgIGlmIChpID49IDMgJiYgc3RyZWFtLm1hdGNoKC9eXHMqJC8pKSB7CiAgICAgICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIG51bGwpOwogICAgICAgICAgICAgICAgcmV0dXJuICdzZWN0aW9uJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoaSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoc29sICYmIHN0cmVhbS5tYXRjaChyZURpcmVjdGl2ZU1hcmtlcikpIHsKICAgICAgICAgICAgaWYgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCBkaXJlY3RpdmUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJ2RpcmVjdGl2ZS1tYXJrZXInOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChyZVZlcmJhdGltTWFya2VyKSkgewogICAgICAgICAgICBpZiAoIXZlcmJhdGltTW9kZSkgewogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIHZlcmJhdGltKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBtb2RlID0gdmVyYmF0aW1Nb2RlOwoKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSwgewogICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYWw6IG1vZGUuc3RhcnRTdGF0ZSgpCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICd2ZXJiYXRpbS1tYXJrZXInOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNvbCAmJiBzdHJlYW0ubWF0Y2gocmVFeGFtcGxlcywgZmFsc2UpKSB7CiAgICAgICAgICAgIGlmICghcHl0aG9uTW9kZSkgewogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIHZlcmJhdGltKTsKICAgICAgICAgICAgICAgIHJldHVybiAndmVyYmF0aW0tbWFya2VyJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBtb2RlID0gcHl0aG9uTW9kZTsKCiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgdmVyYmF0aW0sIHsKICAgICAgICAgICAgICAgICAgICBtb2RlOiBtb2RlLAogICAgICAgICAgICAgICAgICAgIGxvY2FsOiBtb2RlLnN0YXJ0U3RhdGUoKQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgKHN0cmVhbS5tYXRjaChyZUVudW1lcmF0ZWRMaXN0KSB8fAogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5tYXRjaChyZUJ1bGxldGVkTGlzdCkpKSB7CiAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgcmV0dXJuICdsaXN0JzsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHRlc3RCYWNrd2FyZChyZSkgewogICAgICAgICAgICByZXR1cm4gc29sIHx8ICFzdGF0ZS5jdHguYmFjayB8fCByZS50ZXN0KHN0YXRlLmN0eC5iYWNrKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHRlc3RGb3J3YXJkKHJlKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJlYW0uZW9sKCkgfHwgc3RyZWFtLm1hdGNoKHJlLCBmYWxzZSk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiB0ZXN0SW5saW5lKHJlKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJlYW0ubWF0Y2gocmUpICYmIHRlc3RCYWNrd2FyZCgvXFcvKSAmJiB0ZXN0Rm9yd2FyZCgvXFcvKTsKICAgICAgICB9CgogICAgICAgIGlmICh0ZXN0SW5saW5lKHJlRm9vdG5vdGVSZWYpKSB7CiAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgcmV0dXJuICdmb290bm90ZSc7CiAgICAgICAgfQoKICAgICAgICBpZiAodGVzdElubGluZShyZUNpdGF0aW9uUmVmKSkgewogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIHN0cmVhbSk7CiAgICAgICAgICAgIHJldHVybiAnY2l0YXRpb24nOwogICAgICAgIH0KCiAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwoKICAgICAgICBpZiAodGVzdEJhY2t3YXJkKHJlUHJlSW5saW5lKSkgewogICAgICAgICAgICBpZiAoKGNoID09PSAnOicgfHwgY2ggPT09ICd8JykgJiYgc3RyZWFtLmVhdCgvXFMvKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuOwoKICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSAncm9sZSc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gJ3JlcGxhY2VtZW50JzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgaW5saW5lLCB7CiAgICAgICAgICAgICAgICAgICAgY2g6IGNoLAogICAgICAgICAgICAgICAgICAgIHdpZGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIHByZXY6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46IHRva2VuCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChjaCA9PT0gJyonIHx8IGNoID09PSAnYCcpIHsKICAgICAgICAgICAgICAgIHZhciBvcmlnID0gY2gsCiAgICAgICAgICAgICAgICAgICAgd2lkZSA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgICAgICBpZiAoY2ggPT0gb3JpZykgewogICAgICAgICAgICAgICAgICAgIHdpZGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoY2ggJiYgIS9ccy8udGVzdChjaCkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW47CgogICAgICAgICAgICAgICAgICAgIGlmIChvcmlnID09PSAnKicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB3aWRlID8gJ3N0cm9uZycgOiAnZW1waGFzaXMnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gd2lkZSA/ICdpbmxpbmUnIDogJ2ludGVycHJldGVkJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCBpbmxpbmUsIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2g6IG9yaWcsICAgICAgICAgICAgICAgLy8gaW5saW5lKCkgaGFzIHRvIGtub3cgd2hhdCB0byBzZWFyY2ggZm9yCiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGU6IHdpZGUsICAgICAgICAgICAgIC8vIGFyZSB3ZSBsb29raW5nIGZvciBgY2hgIG9yIGBjaGNoYAogICAgICAgICAgICAgICAgICAgICAgICBwcmV2OiBudWxsLCAgICAgICAgICAgICAvLyB0ZXJtaW5hdG9yIG11c3Qgbm90IGJlIHByZWNlZWRlZCB3aXRoIHdoaXRlc3BhY2UKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHRva2VuICAgICAgICAgICAgLy8gSSBkb24ndCB3YW50IHRvIHJlY29tcHV0ZSB0aGlzIGFsbCB0aGUgdGltZQogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHNldE5vcm1hbChzdGF0ZSwgY2gpOwogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIGlubGluZShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKSwKICAgICAgICAgICAgdG9rZW4gPSBzdGF0ZS5jdHgudG9rZW47CgogICAgICAgIGZ1bmN0aW9uIGZpbmlzaChjaCkgewogICAgICAgICAgICBzdGF0ZS5jdHgucHJldiA9IGNoOwogICAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgfQoKICAgICAgICBpZiAoY2ggIT0gc3RhdGUuY3R4LmNoKSB7CiAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgIH0KCiAgICAgICAgaWYgKC9ccy8udGVzdChzdGF0ZS5jdHgucHJldikpIHsKICAgICAgICAgICAgcmV0dXJuIGZpbmlzaChjaCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUuY3R4LndpZGUpIHsKICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwoKICAgICAgICAgICAgaWYgKGNoICE9IHN0YXRlLmN0eC5jaCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZpbmlzaChjaCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghc3RyZWFtLmVvbCgpICYmICFyZVBvc3RJbmxpbmUudGVzdChzdHJlYW0ucGVlaygpKSkgewogICAgICAgICAgICBpZiAoc3RhdGUuY3R4LndpZGUpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgIH0KCiAgICAgICAgc2V0U3RhdGUoc3RhdGUsIG5vcm1hbCk7CiAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBjaCk7CgogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBkaXJlY3RpdmUoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciB0b2tlbiA9IG51bGw7CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocmVEaXJlY3RpdmUpKSB7CiAgICAgICAgICAgIHRva2VuID0gJ2RpcmVjdGl2ZSc7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocmVIeXBlcmxpbmspKSB7CiAgICAgICAgICAgIHRva2VuID0gJ2h5cGVybGluayc7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocmVGb290bm90ZSkpIHsKICAgICAgICAgICAgdG9rZW4gPSAnZm9vdG5vdGUnOwogICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKHJlQ2l0YXRpb24pKSB7CiAgICAgICAgICAgIHRva2VuID0gJ2NpdGF0aW9uJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHJlYW0uZWF0U3BhY2UoKTsKCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGNvbW1lbnQpOwogICAgICAgICAgICAgICAgcmV0dXJuICdjb21tZW50JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGJvZHksIHtzdGFydDogdHJ1ZX0pOwogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBib2R5KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgdG9rZW4gPSAnYm9keSc7CgogICAgICAgIGlmICghc3RhdGUuY3R4LnN0YXJ0IHx8IHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgdG9rZW4pOwogICAgICAgIH0KCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHNldEN0eChzdGF0ZSk7CgogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBjb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgJ2NvbW1lbnQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiB2ZXJiYXRpbShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIGJsb2NrKHN0cmVhbSwgc3RhdGUsICd2ZXJiYXRpbScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICAgICAgICAgIGlmICghc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIHN0cmVhbSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB2ZXJiYXRpbU1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5jdHgubG9jYWwpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBibG9jayhzdHJlYW0sIHN0YXRlLCB0b2tlbikgewogICAgICAgIGlmIChzdHJlYW0uZW9sKCkgfHwgc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHtmbjogbm9ybWFsLCBjdHg6IHt9fTsKICAgICAgICB9LAoKICAgICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgICAgIHJldHVybiB7Zm46IHN0YXRlLmZuLCBjdHg6IHN0YXRlLmN0eH07CiAgICAgICAgfSwKCiAgICAgICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gc3RhdGUuZm4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9CiAgICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXJzdCIsICJyc3QiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogU2NoZW1lIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJzY2hlbWUuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JhY2tncm91bmQ6ICNmOGY4Zjg7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Nzcy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogU2NoZW1lIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KOyBTZWUgaWYgdGhlIGlucHV0IHN0YXJ0cyB3aXRoIGEgZ2l2ZW4gc3ltYm9sLgooZGVmaW5lIChtYXRjaC1zeW1ib2wgaW5wdXQgcGF0dGVybikKICAoY29uZCAoKG51bGw/IChyZW1haW4gaW5wdXQpKSAjZikKCSgoZXF2PyAoY2FyIChyZW1haW4gaW5wdXQpKSBwYXR0ZXJuKSAoci1jZHIgaW5wdXQpKQoJKGVsc2UgI2YpKSkKCjsgQWxsb3cgdGhlIGlucHV0IHRvIHN0YXJ0IHdpdGggb25lIG9mIGEgbGlzdCBvZiBwYXR0ZXJucy4KKGRlZmluZSAobWF0Y2gtb3IgaW5wdXQgcGF0dGVybikKICAoY29uZCAoKG51bGw/IHBhdHRlcm4pICNmKQoJKChtYXRjaC1wYXR0ZXJuIGlucHV0IChjYXIgcGF0dGVybikpKQoJKGVsc2UgKG1hdGNoLW9yIGlucHV0IChjZHIgcGF0dGVybikpKSkpCgo7IEFsbG93IGEgc2VxdWVuY2Ugb2YgcGF0dGVybnMuCihkZWZpbmUgKG1hdGNoLXNlcSBpbnB1dCBwYXR0ZXJuKQogIChpZiAobnVsbD8gcGF0dGVybikKICAgICAgaW5wdXQKICAgICAgKGxldCAoKG1hdGNoIChtYXRjaC1wYXR0ZXJuIGlucHV0IChjYXIgcGF0dGVybikpKSkKCShpZiBtYXRjaCAobWF0Y2gtc2VxIG1hdGNoIChjZHIgcGF0dGVybikpICNmKSkpKQoKOyBNYXRjaCB3aXRoIHRoZSBwYXR0ZXJuIGJ1dCBubyBwcm9ibGVtIGlmIGl0IGRvZXMgbm90IG1hdGNoLgooZGVmaW5lIChtYXRjaC1vcHQgaW5wdXQgcGF0dGVybikKICAobGV0ICgobWF0Y2ggKG1hdGNoLXBhdHRlcm4gaW5wdXQgKGNhciBwYXR0ZXJuKSkpKQogICAgKGlmIG1hdGNoIG1hdGNoIGlucHV0KSkpCgo7IE1hdGNoIGFueXRoaW5nIChvdGhlciB0aGFuICcoKSksIHVudGlsIHBhdHRlcm4gaXMgZm91bmQuIFRoZSByYXRoZXIKOyBjbHVtc3kgZm9ybSBvZiByZXF1aXJpbmcgYW4gZW5kaW5nIHBhdHRlcm4gaXMgbmVlZGVkIHRvIGRlY2lkZSB3aGVyZQo7IHRoZSBlbmQgb2YgdGhlIG1hdGNoIGlzLiBJZiBub25lIGlzIGdpdmVuLCB0aGlzIHdpbGwgbWF0Y2ggdGhlIHJlc3QKOyBvZiB0aGUgc2VudGVuY2UuCihkZWZpbmUgKG1hdGNoLWFueSBpbnB1dCBwYXR0ZXJuKQogIChjb25kICgobnVsbD8gKHJlbWFpbiBpbnB1dCkpICNmKQoJKChudWxsPyBwYXR0ZXJuKSAoZi1jb25zIChyZW1haW4gaW5wdXQpIChjbGVhci1yZW1haW4gaW5wdXQpKSkKCShlbHNlCgkgKGxldCAoKGFjY3VtLWFueSAoY29sbGVjdG9yKSkpCgkgICAoZGVmaW5lIChtYXRjaC1wYXR0ZXJuLWFueSBpbnB1dCBwYXR0ZXJuKQoJICAgICAoY29uZCAoKG51bGw/IChyZW1haW4gaW5wdXQpKSAjZikKCQkgICAoZWxzZSAoYWNjdW0tYW55IChjYXIgKHJlbWFpbiBpbnB1dCkpKQoJCQkgKGNvbmQgKChtYXRjaC1wYXR0ZXJuIChyLWNkciBpbnB1dCkgcGF0dGVybikpCgkJCSAgICAgICAoZWxzZSAobWF0Y2gtcGF0dGVybi1hbnkgKHItY2RyIGlucHV0KSBwYXR0ZXJuKSkpKSkpCgkgICAobGV0ICgocmV0dmFsIChtYXRjaC1wYXR0ZXJuLWFueSBpbnB1dCAoY2FyIHBhdHRlcm4pKSkpCgkgICAgIChpZiByZXR2YWwKCQkgKGYtY29ucyAoYWNjdW0tYW55KSByZXR2YWwpCgkJICNmKSkpKSkpCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHt9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtc2NoZW1lPC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/scheme.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEF1dGhvcjogS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW4KICovCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic2NoZW1lIiwgZnVuY3Rpb24gKGNvbmZpZywgbW9kZSkgewogICAgdmFyIEJVSUxUSU4gPSAiYnVpbHRpbiIsIENPTU1FTlQgPSAiY29tbWVudCIsIFNUUklORyA9ICJzdHJpbmciLAogICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlXT1JEPSJrZXl3b3JkIjsKICAgIHZhciBJTkRFTlRfV09SRF9TS0lQID0gMiwgS0VZV09SRFNfU0tJUCA9IDE7CiAgICAKICAgIGZ1bmN0aW9uIG1ha2VLZXl3b3JkcyhzdHIpIHsKICAgICAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KCiAgICB2YXIga2V5d29yZHMgPSBtYWtlS2V5d29yZHMoIs67IGNhc2UtbGFtYmRhIGNhbGwvY2MgY2xhc3MgZGVmaW5lLWNsYXNzIGV4aXQtaGFuZGxlciBmaWVsZCBpbXBvcnQgaW5oZXJpdCBpbml0LWZpZWxkIGludGVyZmFjZSBsZXQqLXZhbHVlcyBsZXQtdmFsdWVzIGxldC9lYyBtaXhpbiBvcHQtbGFtYmRhIG92ZXJyaWRlIHByb3RlY3QgcHJvdmlkZSBwdWJsaWMgcmVuYW1lIHJlcXVpcmUgcmVxdWlyZS1mb3Itc3ludGF4IHN5bnRheCBzeW50YXgtY2FzZSBzeW50YXgtZXJyb3IgdW5pdC9zaWcgdW5sZXNzIHdoZW4gd2l0aC1zeW50YXggYW5kIGJlZ2luIGNhbGwtd2l0aC1jdXJyZW50LWNvbnRpbnVhdGlvbiBjYWxsLXdpdGgtaW5wdXQtZmlsZSBjYWxsLXdpdGgtb3V0cHV0LWZpbGUgY2FzZSBjb25kIGRlZmluZSBkZWZpbmUtc3ludGF4IGRlbGF5IGRvIGR5bmFtaWMtd2luZCBlbHNlIGZvci1lYWNoIGlmIGxhbWJkYSBsZXQgbGV0KiBsZXQtc3ludGF4IGxldHJlYyBsZXRyZWMtc3ludGF4IG1hcCBvciBzeW50YXgtcnVsZXMgYWJzIGFjb3MgYW5nbGUgYXBwZW5kIGFwcGx5IGFzaW4gYXNzb2MgYXNzcSBhc3N2IGF0YW4gYm9vbGVhbj8gY2FhciBjYWRyIGNhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSBjYWxsLXdpdGgtdmFsdWVzIGNhciBjZGRkYXIgY2RkZGRyIGNkciBjZWlsaW5nIGNoYXItPmludGVnZXIgY2hhci1hbHBoYWJldGljPyBjaGFyLWNpPD0/IGNoYXItY2k8PyBjaGFyLWNpPT8gY2hhci1jaT49PyBjaGFyLWNpPj8gY2hhci1kb3duY2FzZSBjaGFyLWxvd2VyLWNhc2U/IGNoYXItbnVtZXJpYz8gY2hhci1yZWFkeT8gY2hhci11cGNhc2UgY2hhci11cHBlci1jYXNlPyBjaGFyLXdoaXRlc3BhY2U/IGNoYXI8PT8gY2hhcjw/IGNoYXI9PyBjaGFyPj0/IGNoYXI+PyBjaGFyPyBjbG9zZS1pbnB1dC1wb3J0IGNsb3NlLW91dHB1dC1wb3J0IGNvbXBsZXg/IGNvbnMgY29zIGN1cnJlbnQtaW5wdXQtcG9ydCBjdXJyZW50LW91dHB1dC1wb3J0IGRlbm9taW5hdG9yIGRpc3BsYXkgZW9mLW9iamVjdD8gZXE/IGVxdWFsPyBlcXY/IGV2YWwgZXZlbj8gZXhhY3QtPmluZXhhY3QgZXhhY3Q/IGV4cCBleHB0ICNmIGZsb29yIGZvcmNlIGdjZCBpbWFnLXBhcnQgaW5leGFjdC0+ZXhhY3QgaW5leGFjdD8gaW5wdXQtcG9ydD8gaW50ZWdlci0+Y2hhciBpbnRlZ2VyPyBpbnRlcmFjdGlvbi1lbnZpcm9ubWVudCBsY20gbGVuZ3RoIGxpc3QgbGlzdC0+c3RyaW5nIGxpc3QtPnZlY3RvciBsaXN0LXJlZiBsaXN0LXRhaWwgbGlzdD8gbG9hZCBsb2cgbWFnbml0dWRlIG1ha2UtcG9sYXIgbWFrZS1yZWN0YW5ndWxhciBtYWtlLXN0cmluZyBtYWtlLXZlY3RvciBtYXggbWVtYmVyIG1lbXEgbWVtdiBtaW4gbW9kdWxvIG5lZ2F0aXZlPyBuZXdsaW5lIG5vdCBudWxsLWVudmlyb25tZW50IG51bGw/IG51bWJlci0+c3RyaW5nIG51bWJlcj8gbnVtZXJhdG9yIG9kZD8gb3Blbi1pbnB1dC1maWxlIG9wZW4tb3V0cHV0LWZpbGUgb3V0cHV0LXBvcnQ/IHBhaXI/IHBlZWstY2hhciBwb3J0PyBwb3NpdGl2ZT8gcHJvY2VkdXJlPyBxdWFzaXF1b3RlIHF1b3RlIHF1b3RpZW50IHJhdGlvbmFsPyByYXRpb25hbGl6ZSByZWFkIHJlYWQtY2hhciByZWFsLXBhcnQgcmVhbD8gcmVtYWluZGVyIHJldmVyc2Ugcm91bmQgc2NoZW1lLXJlcG9ydC1lbnZpcm9ubWVudCBzZXQhIHNldC1jYXIhIHNldC1jZHIhIHNpbiBzcXJ0IHN0cmluZyBzdHJpbmctPmxpc3Qgc3RyaW5nLT5udW1iZXIgc3RyaW5nLT5zeW1ib2wgc3RyaW5nLWFwcGVuZCBzdHJpbmctY2k8PT8gc3RyaW5nLWNpPD8gc3RyaW5nLWNpPT8gc3RyaW5nLWNpPj0/IHN0cmluZy1jaT4/IHN0cmluZy1jb3B5IHN0cmluZy1maWxsISBzdHJpbmctbGVuZ3RoIHN0cmluZy1yZWYgc3RyaW5nLXNldCEgc3RyaW5nPD0/IHN0cmluZzw/IHN0cmluZz0/IHN0cmluZz49PyBzdHJpbmc+PyBzdHJpbmc/IHN1YnN0cmluZyBzeW1ib2wtPnN0cmluZyBzeW1ib2w/ICN0IHRhbiB0cmFuc2NyaXB0LW9mZiB0cmFuc2NyaXB0LW9uIHRydW5jYXRlIHZhbHVlcyB2ZWN0b3IgdmVjdG9yLT5saXN0IHZlY3Rvci1maWxsISB2ZWN0b3ItbGVuZ3RoIHZlY3Rvci1yZWYgdmVjdG9yLXNldCEgd2l0aC1pbnB1dC1mcm9tLWZpbGUgd2l0aC1vdXRwdXQtdG8tZmlsZSB3cml0ZSB3cml0ZS1jaGFyIHplcm8/Iik7CiAgICB2YXIgaW5kZW50S2V5cyA9IG1ha2VLZXl3b3JkcygiZGVmaW5lIGxldCBsZXRyZWMgbGV0KiBsYW1iZGEiKTsKICAgIAoKICAgIGZ1bmN0aW9uIHN0YXRlU3RhY2soaW5kZW50LCB0eXBlLCBwcmV2KSB7IC8vIHJlcHJlc2VudHMgYSBzdGF0ZSBzdGFjayBvYmplY3QKICAgICAgICB0aGlzLmluZGVudCA9IGluZGVudDsKICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIHRoaXMucHJldiA9IHByZXY7CiAgICB9CgogICAgZnVuY3Rpb24gcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnQsIHR5cGUpIHsKICAgICAgICBzdGF0ZS5pbmRlbnRTdGFjayA9IG5ldyBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgc3RhdGUuaW5kZW50U3RhY2spOwogICAgfQoKICAgIGZ1bmN0aW9uIHBvcFN0YWNrKHN0YXRlKSB7CiAgICAgICAgc3RhdGUuaW5kZW50U3RhY2sgPSBzdGF0ZS5pbmRlbnRTdGFjay5wcmV2OwogICAgfQogICAgCiAgICAvKioKICAgICAqIFNjaGVtZSBudW1iZXJzIGFyZSBjb21wbGljYXRlZCB1bmZvcnR1bmF0ZWx5LgogICAgICogQ2hlY2tzIGlmIHdlJ3JlIGxvb2tpbmcgYXQgYSBudW1iZXIsIHdoaWNoIG1pZ2h0IGJlIHBvc3NpYmx5IGEgZnJhY3Rpb24uCiAgICAgKiBBbHNvIGNoZWNrcyB0aGF0IGl0IGlzIG5vdCBwYXJ0IG9mIGEgbG9uZ2VyIGlkZW50aWZpZXIuIFJldHVybnMgdHJ1ZS9mYWxzZSBhY2NvcmRpbmdseS4KICAgICAqLwogICAgZnVuY3Rpb24gaXNOdW1iZXIoY2gsIHN0cmVhbSl7IAogICAgICAgIGlmKC9bMC05XS8uZXhlYyhjaCkgIT0gbnVsbCl7IAogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1swLTldLyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXQoL1wvLyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWzAtOV0vKTsKICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSB8fCAhKC9bYS16QS1aXC1cX1wvXS8uZXhlYyhzdHJlYW0ucGVlaygpKSkpIHJldHVybiB0cnVlOwogICAgICAgICAgICBzdHJlYW0uYmFja1VwKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoIC0gMSk7IC8vIHVuZG8gYWxsIHRoZSBlYXRpbmcKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgaW5kZW50U3RhY2s6IG51bGwsCiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbjogMCwKICAgICAgICAgICAgICAgIG1vZGU6IGZhbHNlLAogICAgICAgICAgICAgICAgc0V4cHJDb21tZW50OiBmYWxzZQogICAgICAgICAgICB9OwogICAgICAgIH0sCgogICAgICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICBpZiAoc3RhdGUuaW5kZW50U3RhY2sgPT0gbnVsbCAmJiBzdHJlYW0uc29sKCkpIHsKICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBpbmRlbnRhdGlvbiwgYnV0IG9ubHkgaWYgaW5kZW50U3RhY2sgaXMgZW1wdHkKICAgICAgICAgICAgICAgIHN0YXRlLmluZGVudGF0aW9uID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNraXAgc3BhY2VzCiAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJldHVyblR5cGUgPSBudWxsOwogICAgICAgICAgICAKICAgICAgICAgICAgc3dpdGNoKHN0YXRlLm1vZGUpewogICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjogLy8gbXVsdGktbGluZSBzdHJpbmcgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQsIGVzY2FwZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09ICJcIiIgJiYgIWVzY2FwZWQpIHsKICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFNUUklORzsgLy8gY29udGludWUgb24gaW4gc2NoZW1lLXN0cmluZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJjb21tZW50IjogLy8gY29tbWVudCBwYXJzaW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCwgbWF5YmVFbmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09ICIjIiAmJiBtYXliZUVuZCkgewogICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtYXliZUVuZCA9IChuZXh0ID09ICJ8Iik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAicy1leHByLWNvbW1lbnQiOiAvLyBzLWV4cHIgY29tbWVudGluZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKHN0cmVhbS5wZWVrKCkgPT0gIigiIHx8IHN0cmVhbS5wZWVrKCkgPT0gIlsiKXsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWN0dWFsbHkgc3RhcnQgc2NoZW1lIHMtZXhwciBjb21tZW50aW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc0V4cHJDb21tZW50ID0gMDsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IHdlIGp1c3QgY29tbWVudCB0aGUgZW50aXJlIG9mIHRoZSBuZXh0IHRva2VuCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14vc10vKTsgLy8gZWF0IG5vbiBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGRlZmF1bHQgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gIlwiIikgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBTVFJJTkc7CiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAiJyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEFUT007CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnIycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXQoInwiKSkgewkJCQkJLy8gTXVsdGktbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gImNvbW1lbnQiOyAvLyB0b2dnbGUgdG8gY29tbWVudCBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KC9bdGZdLykpIHsJCQkvLyAjdC8jZiAoYXRvbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBBVE9NOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJzsnKSkgewkJCQkvLyBTLUV4cHIgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9ICJzLWV4cHItY29tbWVudCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIjsiKSB7IC8vIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOyAvLyByZXN0IG9mIHRoZSBsaW5lIGlzIGEgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICItIil7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZighaXNOYU4ocGFyc2VJbnQoc3RyZWFtLnBlZWsoKSkpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1wvMC05XS8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IE5VTUJFUjsKICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGNoLHN0cmVhbSkpewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gTlVNQkVSOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIigiIHx8IGNoID09ICJbIikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5V29yZCA9ICcnOyB2YXIgaW5kZW50VGVtcCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAgIEVpdGhlciAKICAgICAgICAgICAgICAgICAgICAgICAgKGluZGVudC13b3JkIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIChub24taW5kZW50LXdvcmQgLi4KICAgICAgICAgICAgICAgICAgICAgICAgKDtzb21ldGhpbmcgZWxzZSwgYnJhY2tldCwgZXRjLgogICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGxldHRlciA9IHN0cmVhbS5lYXQoL1teXHNcKFxbXDtcKVxdXS8pKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlXb3JkICs9IGxldHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5V29yZC5sZW5ndGggPiAwICYmIGluZGVudEtleXMucHJvcGVydHlJc0VudW1lcmFibGUoa2V5V29yZCkpIHsgLy8gaW5kZW50LXdvcmQKICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIElOREVOVF9XT1JEX1NLSVAsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm9uLWluZGVudCB3b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjb250aW51ZSBlYXRpbmcgdGhlIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVvbCgpIHx8IHN0cmVhbS5wZWVrKCkgPT0gIjsiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90aGluZyBzaWduaWZpY2FudCBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlc3RhcnQgaW5kZW50YXRpb24gMSBzcGFjZSBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIDEsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnRUZW1wICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGgsIGNoKTsgLy8gZWxzZSB3ZSBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggLSAxKTsgLy8gdW5kbyBhbGwgdGhlIGVhdGluZwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0YXRlLnNFeHByQ29tbWVudCA9PSAibnVtYmVyIikgc3RhdGUuc0V4cHJDb21tZW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlJBQ0tFVDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICIpIiB8fCBjaCA9PSAiXSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEJSQUNLRVQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRlbnRTdGFjayAhPSBudWxsICYmIHN0YXRlLmluZGVudFN0YWNrLnR5cGUgPT0gKGNoID09ICIpIiA/ICIoIiA6ICJbIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcFN0YWNrKHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0YXRlLnNFeHByQ29tbWVudCA9PSAibnVtYmVyIil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoLS1zdGF0ZS5zRXhwckNvbW1lbnQgPT0gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UOyAvLyBmaW5hbCBjbG9zaW5nIGJyYWNrZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc0V4cHJDb21tZW50ID0gZmFsc2U7IC8vIHR1cm4gb2ZmIHMtZXhwciBjb21tZW50aW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX1wtXS8pOwogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMgJiYga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBCVUlMVElOOwogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSByZXR1cm5UeXBlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICh0eXBlb2Ygc3RhdGUuc0V4cHJDb21tZW50ID09ICJudW1iZXIiKSA/IENPTU1FTlQgOiByZXR1cm5UeXBlOwogICAgICAgIH0sCgogICAgICAgIGluZGVudDogZnVuY3Rpb24gKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwpIHJldHVybiBzdGF0ZS5pbmRlbnRhdGlvbjsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmluZGVudFN0YWNrLmluZGVudDsKICAgICAgICB9CiAgICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXNjaGVtZSIsICJzY2hlbWUiKTs=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogU21hbGx0YWxrIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJzbWFsbHRhbGsuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Nzcy9kb2NzLmNzcyI+CiAgICA8c3R5bGU+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDJweCBzb2xpZCAjZGVlOyBib3JkZXItcmlnaHQtd2lkdGg6IDEwcHg7fQogICAgICAuQ29kZU1pcnJvci1ndXR0ZXIge2JvcmRlcjogbm9uZTsgYmFja2dyb3VuZDogI2RlZTt9CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciBwcmUge2NvbG9yOiB3aGl0ZTsgZm9udC13ZWlnaHQ6IGJvbGQ7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBTbWFsbHRhbGsgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgoiIAogICAgVGhpcyBpcyBhIHRlc3Qgb2YgdGhlIFNtYWxsdGFsayBjb2RlCiIKU2Vhc2lkZS5XQUNvbXBvbmVudCBzdWJjbGFzczogI015Q291bnRlciBbCiAgICB8IGNvdW50IHwKICAgIE15Q291bnRlciBjbGFzcyAmZ3Q7Jmd0OyBjYW5CZVJvb3QgWyBedHJ1ZSBdCgogICAgaW5pdGlhbGl6ZSBbCiAgICAgICAgc3VwZXIgaW5pdGlhbGl6ZS4KICAgICAgICBjb3VudCA6PSAwLgogICAgXQogICAgc3RhdGVzIFsgXnsgc2VsZiB9IF0KICAgIHJlbmRlckNvbnRlbnRPbjogaHRtbCBbCiAgICAgICAgaHRtbCBoZWFkaW5nOiBjb3VudC4KICAgICAgICBodG1sIGFuY2hvciBjYWxsYmFjazogWyBjb3VudCA6PSBjb3VudCArIDEgXTsgd2l0aDogJysrJy4KICAgICAgICBodG1sIHNwYWNlLgogICAgICAgIGh0bWwgYW5jaG9yIGNhbGxiYWNrOiBbIGNvdW50IDo9IGNvdW50IC0gMSBdOyB3aXRoOiAnLS0nLgogICAgXQpdCgpNeUNvdW50ZXIgcmVnaXN0ZXJBc0FwcGxpY2F0aW9uOiAnbXljb3VudGVyJwo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1zdHNyYyIsCiAgICAgICAgaW5kZW50VW5pdDogNAogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlNpbXBsZSBTbWFsbHRhbGsgbW9kZS48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1zdHNyYzwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/smalltalk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzbWFsbHRhbGsiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBrZXl3b3JkcyA9IHsidHJ1ZSI6IDEsICJmYWxzZSI6IDEsIG5pbDogMSwgc2VsZjogMSwgInN1cGVyIjogMSwgdGhpc0NvbnRleHQ6IDF9OwogIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CgogIGZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHsKICAgIHN0YXRlLnRva2VuaXplID0gZjsKICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpOwogIH0KCiAgdmFyIHR5cGU7CiAgZnVuY3Rpb24gcmV0KHRwLCBzdHlsZSkgewogICAgdHlwZSA9IHRwOwogICAgcmV0dXJuIHN0eWxlOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoY2ggPT0gJyInKQogICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KGNoKSk7CiAgICBlbHNlIGlmIChjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpOwogICAgZWxzZSBpZiAoY2ggPT0gIiMiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgICByZXR1cm4gcmV0KCJzdHJpbmciLCAic3RyaW5nIik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5dLykKICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJlciIpOwogICAgfQogICAgZWxzZSBpZiAoL1tcW1xdKCldLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KGNoLCBudWxsKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImtleXdvcmQiKTsKICAgICAgcmV0dXJuIHJldCgid29yZCIsICJ2YXJpYWJsZSIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlOwogICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCkpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQogICAgICB9CiAgICAgIGlmIChlbmQpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHsKICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDsKICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMuYWxpZ24gPSBhbGlnbjsKICAgIHRoaXMucHJldiA9IHByZXY7CiAgfQoKICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpOwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKICB9CgogIC8vIEludGVyZmFjZQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICByZXR1cm4gewogICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLAogICAgICAgIGluZGVudGVkOiAwLAogICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlCiAgICAgIH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTsKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHR5cGUgPT0gImNvbW1lbnQiKSByZXR1cm4gc3R5bGU7CiAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gdHJ1ZTsKCiAgICAgIGlmICh0eXBlID09ICJbIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIl0iKTsKICAgICAgZWxzZSBpZiAodHlwZSA9PSAiKCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICIpIik7CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gY3R4LnR5cGUpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDsKICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBjdHggPSBzdGF0ZS5jb250ZXh0LCBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlOwogICAgICBpZiAoY3R4LmFsaWduKSByZXR1cm4gY3R4LmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogIl0iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1zdHNyYyIsIHtuYW1lOiAic21hbGx0YWxrIn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogU1BBUlFMIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJzcGFycWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9jc3MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IFNQQVJRTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+ClBSRUZJWCBhOiAmbHQ7aHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9hbm5vdGF0aW9uLW5zIz4KUFJFRklYIGRjOiAmbHQ7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8+ClBSRUZJWCBmb2FmOiAmbHQ7aHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS8+CgojIENvbW1lbnQhCgpTRUxFQ1QgP2dpdmVuID9mYW1pbHkKV0hFUkUgewogID9hbm5vdCBhOmFubm90YXRlcyAmbHQ7aHR0cDovL3d3dy53My5vcmcvVFIvcmRmLXNwYXJxbC1xdWVyeS8+IC4KICA/YW5ub3QgZGM6Y3JlYXRvciA/YyAuCiAgT1BUSU9OQUwgez9jIGZvYWY6Z2l2ZW4gP2dpdmVuIDsKICAgICAgICAgICAgICAgZm9hZjpmYW1pbHkgP2ZhbWlseSB9IC4KICBGSUxURVIgaXNCbGFuayg/YykKfQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtc3BhcnFsLXF1ZXJ5IiwKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtc3BhcnFsLXF1ZXJ5PC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/sparql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcGFycWwiLCBmdW5jdGlvbihjb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBjdXJQdW5jOwoKICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7CiAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIgKyB3b3Jkcy5qb2luKCJ8IikgKyAiKSQiLCAiaSIpOwogIH0KICB2YXIgb3BzID0gd29yZFJlZ2V4cChbInN0ciIsICJsYW5nIiwgImxhbmdtYXRjaGVzIiwgImRhdGF0eXBlIiwgImJvdW5kIiwgInNhbWV0ZXJtIiwgImlzaXJpIiwgImlzdXJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgImlzYmxhbmsiLCAiaXNsaXRlcmFsIiwgInVuaW9uIiwgImEiXSk7CiAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChbImJhc2UiLCAicHJlZml4IiwgInNlbGVjdCIsICJkaXN0aW5jdCIsICJyZWR1Y2VkIiwgImNvbnN0cnVjdCIsICJkZXNjcmliZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzayIsICJmcm9tIiwgIm5hbWVkIiwgIndoZXJlIiwgIm9yZGVyIiwgImxpbWl0IiwgIm9mZnNldCIsICJmaWx0ZXIiLCAib3B0aW9uYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmFwaCIsICJieSIsICJhc2MiLCAiZGVzYyJdKTsKICB2YXIgb3BlcmF0b3JDaGFycyA9IC9bKitcLTw+PSZ8XS87CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgY3VyUHVuYyA9IG51bGw7CiAgICBpZiAoY2ggPT0gIiQiIHx8IGNoID09ICI/IikgewogICAgICBzdHJlYW0ubWF0Y2goL15bXHdcZF0qLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiPCIgJiYgIXN0cmVhbS5tYXRjaCgvXltcc1x1MDBhMD1dLywgZmFsc2UpKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXlteXHNcdTAwYTA+XSo+Py8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIlwiIiB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkxpdGVyYWwoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBlbHNlIGlmICgvW3t9XChcKSxcLjtcW1xdXS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CiAgICBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXJzKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiOiIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZFwuX1wtXS8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW19cd1xkXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF9cLV0vKTsKICAgICAgICByZXR1cm4gImF0b20iOwogICAgICB9CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwgdHlwZTsKICAgICAgaWYgKG9wcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBlbHNlIGlmIChrZXl3b3Jkcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuTGl0ZXJhbChxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHR5cGUsIGNvbCkgewogICAgc3RhdGUuY29udGV4dCA9IHtwcmV2OiBzdGF0ZS5jb250ZXh0LCBpbmRlbnQ6IHN0YXRlLmluZGVudCwgY29sOiBjb2wsIHR5cGU6IHR5cGV9OwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudDsKICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICAgICAgICBpbmRlbnQ6IDAsCiAgICAgICAgICAgICAgY29sOiAwfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCkgc3RhdGUuY29udGV4dC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgaWYgKHN0eWxlICE9ICJjb21tZW50IiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgIT0gInBhdHRlcm4iKSB7CiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsICIpIiwgc3RyZWFtLmNvbHVtbigpKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCAiXSIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgIn0iLCBzdHJlYW0uY29sdW1uKCkpOwogICAgICBlbHNlIGlmICgvW1xdXH1cKV0vLnRlc3QoY3VyUHVuYykpIHsKICAgICAgICB3aGlsZSAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBjdXJQdW5jID09IHN0YXRlLmNvbnRleHQudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiLiIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoL2F0b218c3RyaW5nfHZhcmlhYmxlLy50ZXN0KHN0eWxlKSAmJiBzdGF0ZS5jb250ZXh0KSB7CiAgICAgICAgaWYgKC9bXH1cXV0vLnRlc3Qoc3RhdGUuY29udGV4dC50eXBlKSkKICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCAicGF0dGVybiIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgICAgZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09ICJwYXR0ZXJuIiAmJiAhc3RhdGUuY29udGV4dC5hbGlnbikgewogICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgICAgICBzdGF0ZS5jb250ZXh0LmNvbCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoL1tcXVx9XS8udGVzdChmaXJzdENoYXIpKQogICAgICAgIHdoaWxlIChjb250ZXh0ICYmIGNvbnRleHQudHlwZSA9PSAicGF0dGVybiIpIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CgogICAgICB2YXIgY2xvc2luZyA9IGNvbnRleHQgJiYgZmlyc3RDaGFyID09IGNvbnRleHQudHlwZTsKICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgIHJldHVybiAwOwogICAgICBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKQogICAgICAgIHJldHVybiBjb250ZXh0LmNvbDsKICAgICAgZWxzZSBpZiAoY29udGV4dC5hbGlnbikKICAgICAgICByZXR1cm4gY29udGV4dC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb250ZXh0LmluZGVudCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LXNwYXJxbC1xdWVyeSIsICJzcGFycWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogc1RlWCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic3RleC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL2RlZmF1bHQuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBzVGVYIG1vZGU8L2gxPgogICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+ClxiZWdpbnttb2R1bGV9W2lkPWJidC1zaXplXQpcaW1wb3J0bW9kdWxlW2JhbGFuY2VkLWJpbmFyeS10cmVlc117YmFsYW5jZWQtYmluYXJ5LXRyZWVzfQpcaW1wb3J0bW9kdWxlW1xLV0FSQ3NsaWRlc3tkbWF0aC9lbi9jYXJkaW5hbGl0eX1de2NhcmRpbmFsaXR5fQoKXGJlZ2lue2ZyYW1lfQogIFxmcmFtZXRpdGxle1NpemUgTGVtbWEgZm9yIEJhbGFuY2VkIFRyZWVzfQogIFxiZWdpbntpdGVtaXplfQogIFxpdGVtCiAgICBcYmVnaW57YXNzZXJ0aW9ufVtpZD1zaXplLWxlbW1hLHR5cGU9bGVtbWFdIAogICAgTGV0ICRHPVx0dXB7VixFfSQgYmUgYSBcdGVybXJlZltjZD1iaW5hcnktdHJlZXNde2JhbGFuY2VkIGJpbmFyeSB0cmVlfSAKICAgIG9mIFx0ZXJtcmVmW2NkPWdyYXBoLWRlcHRoLG5hbWU9dmVydGV4LWRlcHRoXXtkZXB0aH0kbj5pJCwgdGhlbiB0aGUgc2V0CiAgICAgJFxkZWZlcXtcbGl2YXJ7Vn1pfXtcc2V0c3R7XGluc2V0e3Z9e1Z9fXtcZ2RlcHRoe3Z9ID0gaX19JCBvZgogICAgXHRlcm1yZWZbY2Q9Z3JhcGhzLWludHJvLG5hbWU9bm9kZV17bm9kZXN9IGF0IAogICAgXHRlcm1yZWZbY2Q9Z3JhcGgtZGVwdGgsbmFtZT12ZXJ0ZXgtZGVwdGhde2RlcHRofSAkaSQgaGFzCiAgICBcdGVybXJlZltjZD1jYXJkaW5hbGl0eSxuYW1lPWNhcmRpbmFsaXR5XXtjYXJkaW5hbGl0eX0gJFxwb3dlcjJpJC4KICAgXGVuZHthc3NlcnRpb259CiAgXGl0ZW0KICAgIFxiZWdpbntzcHJvb2Z9W2lkPXNpemUtbGVtbWEtcGYscHJvb2ZlbmQ9LGZvcj1zaXplLWxlbW1hXXt2aWEgaW5kdWN0aW9uIG92ZXIgdGhlIGRlcHRoICRpJC59CiAgICAgIFxiZWdpbntzcGZjYXNlc317V2UgaGF2ZSB0byBjb25zaWRlciB0d28gY2FzZXN9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPTAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICAgdGhlbiAkXGxpdmFye1Z9aT1cc2V0e1xsaXZhcnt2fXJ9JCwgd2hlcmUgJFxsaXZhcnt2fXIkIGlzIHRoZSByb290LCBzbwogICAgICAgICAgICAkXGVxe1xjYXJke1xsaXZhcntWfTB9LFxjYXJke1xzZXR7XGxpdmFye3Z9cn19LDEsXHBvd2VyMjB9JC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICBcZW5ke3NwZmNhc2V9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPjAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICB0aGVuICRcbGl2YXJ7Vn17aS0xfSQgY29udGFpbnMgJFxwb3dlcjJ7aS0xfSQgdmVydGV4ZXMgCiAgICAgICAgICAgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieUlIXShJSClcZW5ke2p1c3RpZmljYXRpb259CiAgICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgICBcYmVnaW57c3Bmc3RlcH0KICAgICAgICAgICBCeSB0aGUgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieURlZl1kZWZpbml0aW9uIG9mIGEgYmluYXJ5CiAgICAgICAgICAgICAgdHJlZVxlbmR7anVzdGlmaWNhdGlvbn0sIGVhY2ggJFxpbnNldHt2fXtcbGl2YXJ7Vn17aS0xfX0kIGlzIGEgbGVhZiBvciBoYXMKICAgICAgICAgICAgdHdvIGNoaWxkcmVuIHRoYXQgYXJlIGF0IGRlcHRoICRpJC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfQogICAgICAgICAgIEFzICRHJCBpcyBcdGVybXJlZltjZD1iYWxhbmNlZC1iaW5hcnktdHJlZXMsbmFtZT1iYWxhbmNlZC1iaW5hcnktdHJlZV17YmFsYW5jZWR9IGFuZCAkXGdkZXB0aHtHfT1uPmkkLCAkXGxpdmFye1Z9e2ktMX0kIGNhbm5vdCBjb250YWluCiAgICAgICAgICAgIGxlYXZlcy4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfVt0eXBlPWNvbmNsdXNpb25dCiAgICAgICAgICAgVGh1cyAkXGVxe1xjYXJke1xsaXZhcntWfWl9LHtcYXRpbWVzW2Nkb3RdezIsXGNhcmR7XGxpdmFye1Z9e2ktMX19fX0se1xhdGltZXNbY2RvdF17MixccG93ZXIye2ktMX19fSxccG93ZXIyaX0kLgogICAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICAgIFxlbmR7c3BmY2FzZX0KICAgICAgXGVuZHtzcGZjYXNlc30KICAgIFxlbmR7c3Byb29mfQogIFxpdGVtIAogICAgXGJlZ2lue2Fzc2VydGlvbn1baWQ9ZmJidCx0eXBlPWNvcm9sbGFyeV0JCiAgICAgIEEgZnVsbHkgYmFsYW5jZWQgdHJlZSBvZiBkZXB0aCAkZCQgaGFzICRccG93ZXIye2QrMX0tMSQgbm9kZXMuCiAgICBcZW5ke2Fzc2VydGlvbn0KICBcaXRlbQogICAgICBcYmVnaW57c3Byb29mfVtmb3I9ZmJidCxpZD1mYmJ0LXBmXXt9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBMZXQgJFxkZWZlcXtHfXtcdHVwe1YsRX19JCBiZSBhIGZ1bGx5IGJhbGFuY2VkIHRyZWUKICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBUaGVuICRcY2FyZHtWfT1cU3VtZnJvbXRve2l9MWR7XHBvd2VyMml9PSBccG93ZXIye2QrMX0tMSQuCiAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICBcZW5ke3Nwcm9vZn0KICAgIFxlbmR7aXRlbWl6ZX0KICBcZW5ke2ZyYW1lfQpcYmVnaW57bm90ZX0KICBcYmVnaW57b210ZXh0fVt0eXBlPWNvbmNsdXNpb24sZm9yPWJpbmFyeS10cmVlXQogICAgVGhpcyBzaG93cyB0aGF0IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyBncm93IGluIGJyZWFkdGggdmVyeSBxdWlja2x5LCBhIGNvbnNlcXVlbmNlIG9mCiAgICB0aGlzIGlzIHRoYXQgdGhleSBhcmUgdmVyeSBzaGFsbG93IChhbmQgdGhpcyBjb21wdXRlIHZlcnkgZmFzdCksIHdoaWNoIGlzIHRoZSBlc3NlbmNlIG9mCiAgICB0aGUgbmV4dCByZXN1bHQuCiAgXGVuZHtvbXRleHR9ClxlbmR7bm90ZX0KXGVuZHttb2R1bGV9CgolJSUgTG9jYWwgVmFyaWFibGVzOiAKJSUlIG1vZGU6IExhVGVYCiUlJSBUZVgtbWFzdGVyOiAiYWxsIgolJSUgRW5kOiBcZW5ke2RvY3VtZW50fQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC9zdGV4PC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/stex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogQXV0aG9yOiBDb25zdGFudGluIEp1Y292c2NoaSAoYy5qdWNvdnNjaGlAamFjb2JzLXVuaXZlcnNpdHkuZGUpCiAqIExpY2VuY2U6IE1JVAogKi8KCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3RleCIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSAKeyAgICAKICAgIGZ1bmN0aW9uIHB1c2hDb21tYW5kKHN0YXRlLCBjb21tYW5kKSB7CglzdGF0ZS5jbWRTdGF0ZS5wdXNoKGNvbW1hbmQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBlZWtDb21tYW5kKHN0YXRlKSB7IAoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKQoJICAgIHJldHVybiBzdGF0ZS5jbWRTdGF0ZVtzdGF0ZS5jbWRTdGF0ZS5sZW5ndGgtMV07CgllbHNlCgkgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gcG9wQ29tbWFuZChzdGF0ZSkgewoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKSB7CgkgICAgdmFyIHBsdWcgPSBzdGF0ZS5jbWRTdGF0ZS5wb3AoKTsKCSAgICBwbHVnLmNsb3NlQnJhY2tldCgpOwoJfQkgICAgCiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlNb3N0UG93ZXJmdWwoc3RhdGUpIHsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jbWRTdGF0ZTsKICAgICAgZm9yICh2YXIgaSA9IGNvbnRleHQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKCSAgdmFyIHBsdWcgPSBjb250ZXh0W2ldOwoJICBpZiAocGx1Zy5uYW1lPT0iREVGQVVMVCIpCgkgICAgICBjb250aW51ZTsKCSAgcmV0dXJuIHBsdWcuc3R5bGVJZGVudGlmaWVyKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkUGx1Z2luUGF0dGVybihwbHVnaW5OYW1lLCBjbWRTdHlsZSwgYnJhY2tldHMsIHN0eWxlcykgewoJcmV0dXJuIGZ1bmN0aW9uICgpIHsKCSAgICB0aGlzLm5hbWU9cGx1Z2luTmFtZTsKCSAgICB0aGlzLmJyYWNrZXRObyA9IDA7CgkgICAgdGhpcy5zdHlsZT1jbWRTdHlsZTsKCSAgICB0aGlzLnN0eWxlcyA9IHN0eWxlczsKCSAgICB0aGlzLmJyYWNrZXRzID0gYnJhY2tldHM7CgoJICAgIHRoaXMuc3R5bGVJZGVudGlmaWVyID0gZnVuY3Rpb24oY29udGVudCkgewoJCWlmICh0aGlzLmJyYWNrZXRObzw9dGhpcy5zdHlsZXMubGVuZ3RoKQoJCSAgICByZXR1cm4gdGhpcy5zdHlsZXNbdGhpcy5icmFja2V0Tm8tMV07CgkJZWxzZQoJCSAgICByZXR1cm4gbnVsbDsKCSAgICB9OwoJICAgIHRoaXMub3BlbkJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7CgkJdGhpcy5icmFja2V0Tm8rKzsKCQlyZXR1cm4gImJyYWNrZXQiOwoJICAgIH07CgkgICAgdGhpcy5jbG9zZUJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7CgkgICAgfTsKCX0KICAgIH0KCiAgICB2YXIgcGx1Z2lucyA9IG5ldyBBcnJheSgpOwogICAKICAgIHBsdWdpbnNbImltcG9ydG1vZHVsZSJdID0gYWRkUGx1Z2luUGF0dGVybigiaW1wb3J0bW9kdWxlIiwgInRhZyIsICJ7WyIsIFsic3RyaW5nIiwgImJ1aWx0aW4iXSk7CiAgICBwbHVnaW5zWyJkb2N1bWVudGNsYXNzIl0gPSBhZGRQbHVnaW5QYXR0ZXJuKCJkb2N1bWVudGNsYXNzIiwgInRhZyIsICJ7WyIsIFsiIiwgImF0b20iXSk7CiAgICBwbHVnaW5zWyJ1c2VwYWNrYWdlIl0gPSBhZGRQbHVnaW5QYXR0ZXJuKCJkb2N1bWVudGNsYXNzIiwgInRhZyIsICJbIiwgWyJhdG9tIl0pOwogICAgcGx1Z2luc1siYmVnaW4iXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAidGFnIiwgIlsiLCBbImF0b20iXSk7CiAgICBwbHVnaW5zWyJlbmQiXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAidGFnIiwgIlsiLCBbImF0b20iXSk7CgogICAgcGx1Z2luc1siREVGQVVMVCJdID0gZnVuY3Rpb24gKCkgewoJdGhpcy5uYW1lPSJERUZBVUxUIjsKCXRoaXMuc3R5bGU9InRhZyI7CgoJdGhpcy5zdHlsZUlkZW50aWZpZXIgPSBmdW5jdGlvbihjb250ZW50KSB7Cgl9OwoJdGhpcy5vcGVuQnJhY2tldCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHsKCX07Cgl0aGlzLmNsb3NlQnJhY2tldCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHsKCX07CiAgICB9OwoKICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBmKSB7CglzdGF0ZS5mID0gZjsKICAgIH0KCiAgICBmdW5jdGlvbiBub3JtYWwoc291cmNlLCBzdGF0ZSkgewoJaWYgKHNvdXJjZS5tYXRjaCgvXlxcW2Etel0rLykpIHsKCSAgICB2YXIgY21kTmFtZSA9IHNvdXJjZS5jdXJyZW50KCk7CgkgICAgY21kTmFtZSA9IGNtZE5hbWUuc3Vic3RyKDEsIGNtZE5hbWUubGVuZ3RoLTEpOwoJICAgIHZhciBwbHVnID0gcGx1Z2luc1tjbWROYW1lXTsKCSAgICBpZiAodHlwZW9mKHBsdWcpID09ICd1bmRlZmluZWQnKSB7CgkJcGx1ZyA9IHBsdWdpbnNbIkRFRkFVTFQiXTsKCSAgICB9CgkgICAgcGx1ZyA9IG5ldyBwbHVnKCk7CgkgICAgcHVzaENvbW1hbmQoc3RhdGUsIHBsdWcpOwoJICAgIHNldFN0YXRlKHN0YXRlLCBiZWdpblBhcmFtcyk7CgkgICAgcmV0dXJuIHBsdWcuc3R5bGU7Cgl9CgoJdmFyIGNoID0gc291cmNlLm5leHQoKTsKCWlmIChjaCA9PSAiJSIpIHsKCSAgICBzZXRTdGF0ZShzdGF0ZSwgaW5DQ29tbWVudCk7CgkgICAgcmV0dXJuICJjb21tZW50IjsKCX0gCgllbHNlIGlmIChjaD09J30nIHx8IGNoPT0nXScpIHsKCSAgICBwbHVnID0gcGVla0NvbW1hbmQoc3RhdGUpOwoJICAgIGlmIChwbHVnKSB7CgkJcGx1Zy5jbG9zZUJyYWNrZXQoY2gpOwoJCXNldFN0YXRlKHN0YXRlLCBiZWdpblBhcmFtcyk7CgkgICAgfSBlbHNlCgkJcmV0dXJuICJlcnJvciI7CgkgICAgcmV0dXJuICJicmFja2V0IjsKCX0gZWxzZSBpZiAoY2g9PSd7JyB8fCBjaD09J1snKSB7CgkgICAgcGx1ZyA9IHBsdWdpbnNbIkRFRkFVTFQiXTsJICAgIAoJICAgIHBsdWcgPSBuZXcgcGx1ZygpOwoJICAgIHB1c2hDb21tYW5kKHN0YXRlLCBwbHVnKTsKCSAgICByZXR1cm4gImJyYWNrZXQiOwkgICAgCgl9CgllbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CgkgICAgc291cmNlLmVhdFdoaWxlKC9bXHcuJV0vKTsKCSAgICByZXR1cm4gImF0b20iOwoJfQoJZWxzZSB7CgkgICAgc291cmNlLmVhdFdoaWxlKC9bXHctX10vKTsKCSAgICByZXR1cm4gYXBwbHlNb3N0UG93ZXJmdWwoc3RhdGUpOwoJfQogICAgfQoKICAgIGZ1bmN0aW9uIGluQ0NvbW1lbnQoc291cmNlLCBzdGF0ZSkgewoJc291cmNlLnNraXBUb0VuZCgpOwoJc2V0U3RhdGUoc3RhdGUsIG5vcm1hbCk7CglyZXR1cm4gImNvbW1lbnQiOwogICAgfQoKICAgIGZ1bmN0aW9uIGJlZ2luUGFyYW1zKHNvdXJjZSwgc3RhdGUpIHsKCXZhciBjaCA9IHNvdXJjZS5wZWVrKCk7CglpZiAoY2ggPT0gJ3snIHx8IGNoID09ICdbJykgewoJICAgdmFyIGxhc3RQbHVnID0gcGVla0NvbW1hbmQoc3RhdGUpOwoJICAgdmFyIHN0eWxlID0gbGFzdFBsdWcub3BlbkJyYWNrZXQoY2gpOwoJICAgc291cmNlLmVhdChjaCk7CgkgICBzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsKTsKCSAgIHJldHVybiAiYnJhY2tldCI7Cgl9CglpZiAoL1sgXHRccl0vLnRlc3QoY2gpKSB7CgkgICAgc291cmNlLmVhdChjaCk7CgkgICAgcmV0dXJuIG51bGw7Cgl9CglzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsKTsKCWxhc3RQbHVnID0gcGVla0NvbW1hbmQoc3RhdGUpOwoJaWYgKGxhc3RQbHVnKSB7CgkgICAgcG9wQ29tbWFuZChzdGF0ZSk7Cgl9CiAgICAgICAgcmV0dXJuIG5vcm1hbChzb3VyY2UsIHN0YXRlKTsKICAgIH0KCiAgICByZXR1cm4gewogICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4geyBmOm5vcm1hbCwgY21kU3RhdGU6W10gfTsgfSwKCSBjb3B5U3RhdGU6IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIHsgZjogcy5mLCBjbWRTdGF0ZTogcy5jbWRTdGF0ZS5zbGljZSgwLCBzLmNtZFN0YXRlLmxlbmd0aCkgfTsgfSwKCSAKCSB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJIHZhciB0ID0gc3RhdGUuZihzdHJlYW0sIHN0YXRlKTsKCSB2YXIgdyA9IHN0cmVhbS5jdXJyZW50KCk7CgkgcmV0dXJuIHQ7CiAgICAgfQogfTsKfSk7CgoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtc3RleCIsICJzdGV4Iik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogWE1MIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ4bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBYTUwgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIiZndDsKICAmbHQ7IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tJmd0OwogICZsdDtoZWFkJmd0OwogICAgJmx0O3RpdGxlJmd0O0hUTUwgRXhhbXBsZSZsdDsvdGl0bGUmZ3Q7CiAgJmx0Oy9oZWFkJmd0OwogICZsdDtib2R5Jmd0OwogICAgVGhlIGluZGVudGF0aW9uIHRyaWVzIHRvIGJlICZsdDtlbSZndDtzb21ld2hhdCAmYW1wO3F1b3Q7ZG8gd2hhdAogICAgSSBtZWFuJmFtcDtxdW90OyZsdDsvZW0mZ3Q7Li4uIGJ1dCBtaWdodCBub3QgbWF0Y2ggeW91ciBzdHlsZS4KICAmbHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDsKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6IHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9fSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPlRoZSBYTUwgbW9kZSBzdXBwb3J0cyB0d28gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOjwvcD4KICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPmh0bWxNb2RlIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBzd2l0Y2hlcyB0aGUgbW9kZSB0byBwYXJzZSBIVE1MIGluc3RlYWQgb2YgWE1MLiBUaGlzCiAgICAgIG1lYW5zIGF0dHJpYnV0ZXMgZG8gbm90IGhhdmUgdG8gYmUgcXVvdGVkLCBhbmQgc29tZSBlbGVtZW50cwogICAgICAoc3VjaCBhcyA8Y29kZT5icjwvY29kZT4pIGRvIG5vdCByZXF1aXJlIGEgY2xvc2luZyB0YWcuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmFsaWduQ0RBVEEgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIGZvcmNlIHRoZSBvcGVuaW5nIHRhZyBvZiBDREFUQQogICAgICBibG9ja3MgdG8gbm90IGJlIGluZGVudGVkLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94bWw8L2NvZGU+LCA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CiAgdmFyIEtsdWRnZXMgPSBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyB7CiAgICBhdXRvU2VsZkNsb3NlcnM6IHsiYnIiOiB0cnVlLCAiaW1nIjogdHJ1ZSwgImhyIjogdHJ1ZSwgImxpbmsiOiB0cnVlLCAiaW5wdXQiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgIm1ldGEiOiB0cnVlLCAiY29sIjogdHJ1ZSwgImZyYW1lIjogdHJ1ZSwgImJhc2UiOiB0cnVlLCAiYXJlYSI6IHRydWV9LAogICAgZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZSwgIiFjZGF0YSI6IHRydWV9LAogICAgYWxsb3dVbnF1b3RlZDogdHJ1ZQogIH0gOiB7YXV0b1NlbGZDbG9zZXJzOiB7fSwgZG9Ob3RJbmRlbnQ6IHsiIWNkYXRhIjogdHJ1ZX0sIGFsbG93VW5xdW90ZWQ6IGZhbHNlfTsKICB2YXIgYWxpZ25DREFUQSA9IHBhcnNlckNvbmZpZy5hbGlnbkNEQVRBOwoKICAvLyBSZXR1cm4gdmFyaWFibGVzIGZvciB0b2tlbml6ZXJzCiAgdmFyIHRhZ05hbWUsIHR5cGU7CgogIGZ1bmN0aW9uIGluVGV4dChzdHJlYW0sIHN0YXRlKSB7CiAgICBmdW5jdGlvbiBjaGFpbihwYXJzZXIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7CiAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CgogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiPCIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIiEiKSkgewogICAgICAgIGlmIChzdHJlYW0uZWF0KCJbIikpIHsKICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goIkNEQVRBWyIpKSByZXR1cm4gY2hhaW4oaW5CbG9jaygiYXRvbSIsICJdXT4iKSk7CiAgICAgICAgICBlbHNlIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHJldHVybiBjaGFpbihpbkJsb2NrKCJjb21tZW50IiwgIi0tPiIpKTsKICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIkRPQ1RZUEUiLCB0cnVlLCB0cnVlKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl9cLV0vKTsKICAgICAgICAgIHJldHVybiBjaGFpbihpbkJsb2NrKCJtZXRhIiwgIj4iKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiPyIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl9cLV0vKTsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQmxvY2soIm1ldGEiLCAiPz4iKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHR5cGUgPSBzdHJlYW0uZWF0KCIvIikgPyAiY2xvc2VUYWciIDogIm9wZW5UYWciOwogICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgICAgIHRhZ05hbWUgPSAiIjsKICAgICAgICB2YXIgYzsKICAgICAgICB3aGlsZSAoKGMgPSBzdHJlYW0uZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKSkpIHRhZ05hbWUgKz0gYzsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnOwogICAgICAgIHJldHVybiAidGFnIjsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIiYiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW147XS8pOwogICAgICBzdHJlYW0uZWF0KCI7Iik7CiAgICAgIHJldHVybiAiYXRvbSI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXiY8XS8pOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGluVGFnKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoY2ggPT0gIj4iIHx8IChjaCA9PSAiLyIgJiYgc3RyZWFtLmVhdCgiPiIpKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKICAgICAgdHlwZSA9IGNoID09ICI+IiA/ICJlbmRUYWciIDogInNlbGZjbG9zZVRhZyI7CiAgICAgIHJldHVybiAidGFnIjsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI9IikgewogICAgICB0eXBlID0gImVxdWFscyI7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZWxzZSBpZiAoL1tcJ1wiXS8udGVzdChjaCkpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkF0dHJpYnV0ZShjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1teXHNcdTAwYTA9PD5cIlwnXC8/XS8pOwogICAgICByZXR1cm4gIndvcmQiOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5BdHRyaWJ1dGUocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgaWYgKHN0cmVhbS5uZXh0KCkgPT0gcXVvdGUpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCh0ZXJtaW5hdG9yKSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgfQogICAgICByZXR1cm4gc3R5bGU7CiAgICB9OwogIH0KCiAgdmFyIGN1clN0YXRlLCBzZXRTdHlsZTsKICBmdW5jdGlvbiBwYXNzKCkgewogICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3VyU3RhdGUuY2MucHVzaChhcmd1bWVudHNbaV0pOwogIH0KICBmdW5jdGlvbiBjb250KCkgewogICAgcGFzcy5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBwdXNoQ29udGV4dCh0YWdOYW1lLCBzdGFydE9mTGluZSkgewogICAgdmFyIG5vSW5kZW50ID0gS2x1ZGdlcy5kb05vdEluZGVudC5oYXNPd25Qcm9wZXJ0eSh0YWdOYW1lKSB8fCAoY3VyU3RhdGUuY29udGV4dCAmJiBjdXJTdGF0ZS5jb250ZXh0Lm5vSW5kZW50KTsKICAgIGN1clN0YXRlLmNvbnRleHQgPSB7CiAgICAgIHByZXY6IGN1clN0YXRlLmNvbnRleHQsCiAgICAgIHRhZ05hbWU6IHRhZ05hbWUsCiAgICAgIGluZGVudDogY3VyU3RhdGUuaW5kZW50ZWQsCiAgICAgIHN0YXJ0T2ZMaW5lOiBzdGFydE9mTGluZSwKICAgICAgbm9JbmRlbnQ6IG5vSW5kZW50CiAgICB9OwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KCkgewogICAgaWYgKGN1clN0YXRlLmNvbnRleHQpIGN1clN0YXRlLmNvbnRleHQgPSBjdXJTdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICBmdW5jdGlvbiBlbGVtZW50KHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJvcGVuVGFnIikge2N1clN0YXRlLnRhZ05hbWUgPSB0YWdOYW1lOyByZXR1cm4gY29udChhdHRyaWJ1dGVzLCBlbmR0YWcoY3VyU3RhdGUuc3RhcnRPZkxpbmUpKTt9CiAgICBlbHNlIGlmICh0eXBlID09ICJjbG9zZVRhZyIpIHsKICAgICAgdmFyIGVyciA9IGZhbHNlOwogICAgICBpZiAoY3VyU3RhdGUuY29udGV4dCkgewogICAgICAgIGVyciA9IGN1clN0YXRlLmNvbnRleHQudGFnTmFtZSAhPSB0YWdOYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIGVyciA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGVycikgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgICByZXR1cm4gY29udChlbmRjbG9zZXRhZyhlcnIpKTsKICAgIH0KICAgIGVsc2UgaWYgKHR5cGUgPT0gInN0cmluZyIpIHsKICAgICAgaWYgKCFjdXJTdGF0ZS5jb250ZXh0IHx8IGN1clN0YXRlLmNvbnRleHQubmFtZSAhPSAiIWNkYXRhIikgcHVzaENvbnRleHQoIiFjZGF0YSIpOwogICAgICBpZiAoY3VyU3RhdGUudG9rZW5pemUgPT0gaW5UZXh0KSBwb3BDb250ZXh0KCk7CiAgICAgIHJldHVybiBjb250KCk7CiAgICB9CiAgICBlbHNlIHJldHVybiBjb250KCk7CiAgfQogIGZ1bmN0aW9uIGVuZHRhZyhzdGFydE9mTGluZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gInNlbGZjbG9zZVRhZyIgfHwKICAgICAgICAgICh0eXBlID09ICJlbmRUYWciICYmIEtsdWRnZXMuYXV0b1NlbGZDbG9zZXJzLmhhc093blByb3BlcnR5KGN1clN0YXRlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpKQogICAgICAgIHJldHVybiBjb250KCk7CiAgICAgIGlmICh0eXBlID09ICJlbmRUYWciKSB7cHVzaENvbnRleHQoY3VyU3RhdGUudGFnTmFtZSwgc3RhcnRPZkxpbmUpOyByZXR1cm4gY29udCgpO30KICAgICAgcmV0dXJuIGNvbnQoKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGVuZGNsb3NldGFnKGVycikgewogICAgcmV0dXJuIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgaWYgKGVycikgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgICBpZiAodHlwZSA9PSAiZW5kVGFnIikgeyBwb3BDb250ZXh0KCk7IHJldHVybiBjb250KCk7IH0KICAgICAgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgICByZXR1cm4gY29udChhcmd1bWVudHMuY2FsbGVlKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGF0dHJpYnV0ZXModHlwZSkgewogICAgaWYgKHR5cGUgPT0gIndvcmQiKSB7c2V0U3R5bGUgPSAiYXR0cmlidXRlIjsgcmV0dXJuIGNvbnQoYXR0cmlidXRlcyk7fQogICAgaWYgKHR5cGUgPT0gImVxdWFscyIpIHJldHVybiBjb250KGF0dHZhbHVlLCBhdHRyaWJ1dGVzKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGF0dHZhbHVlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ3b3JkIiAmJiBLbHVkZ2VzLmFsbG93VW5xdW90ZWQpIHtzZXRTdHlsZSA9ICJzdHJpbmciOyByZXR1cm4gY29udCgpO30KICAgIGlmICh0eXBlID09ICJzdHJpbmciKSByZXR1cm4gY29udChhdHR2YWx1ZW1heWJlKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGF0dHZhbHVlbWF5YmUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBjb250KGF0dHZhbHVlbWF5YmUpOwogICAgZWxzZSByZXR1cm4gcGFzcygpOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiBpblRleHQsIGNjOiBbXSwgaW5kZW50ZWQ6IDAsIHN0YXJ0T2ZMaW5lOiB0cnVlLCB0YWdOYW1lOiBudWxsLCBjb250ZXh0OiBudWxsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CgogICAgICBzZXRTdHlsZSA9IHR5cGUgPSB0YWdOYW1lID0gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmICgoc3R5bGUgfHwgdHlwZSkgJiYgc3R5bGUgIT0gImNvbW1lbnQiKSB7CiAgICAgICAgY3VyU3RhdGUgPSBzdGF0ZTsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgdmFyIGNvbWIgPSBzdGF0ZS5jYy5wb3AoKSB8fCBlbGVtZW50OwogICAgICAgICAgaWYgKGNvbWIodHlwZSB8fCBzdHlsZSkpIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlOwogICAgICByZXR1cm4gc2V0U3R5bGUgfHwgc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICB2YXIgY29udGV4dCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQubm9JbmRlbnQpIHJldHVybiAwOwogICAgICBpZiAoYWxpZ25DREFUQSAmJiAvPCFcW0NEQVRBXFsvLnRlc3QodGV4dEFmdGVyKSkgcmV0dXJuIDA7CiAgICAgIGlmIChjb250ZXh0ICYmIC9ePFwvLy50ZXN0KHRleHRBZnRlcikpCiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKICAgICAgd2hpbGUgKGNvbnRleHQgJiYgIWNvbnRleHQuc3RhcnRPZkxpbmUpCiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKICAgICAgaWYgKGNvbnRleHQpIHJldHVybiBjb250ZXh0LmluZGVudCArIGluZGVudFVuaXQ7CiAgICAgIGVsc2UgcmV0dXJuIDA7CiAgICB9LAoKICAgIGNvbXBhcmVTdGF0ZXM6IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgaWYgKGEuaW5kZW50ZWQgIT0gYi5pbmRlbnRlZCkgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKHZhciBjYSA9IGEuY29udGV4dCwgY2IgPSBiLmNvbnRleHQ7IDsgY2EgPSBjYS5wcmV2LCBjYiA9IGNiLnByZXYpIHsKICAgICAgICBpZiAoIWNhIHx8ICFjYikgcmV0dXJuIGNhID09IGNiOwogICAgICAgIGlmIChjYS50YWdOYW1lICE9IGNiLnRhZ05hbWUpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAiLyIKICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwgInhtbCIpOwpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogWUFNTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ieWFtbC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL2RlZmF1bHQuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDsgfTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Nzcy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogWUFNTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tLSAjIEZhdm9yaXRlIG1vdmllcwotIENhc2FibGFuY2EKLSBOb3J0aCBieSBOb3J0aHdlc3QKLSBUaGUgTWFuIFdobyBXYXNuJ3QgVGhlcmUKLS0tICMgU2hvcHBpbmcgbGlzdApbbWlsaywgcHVtcGtpbiBwaWUsIGVnZ3MsIGp1aWNlXQotLS0gIyBJbmRlbnRlZCBCbG9ja3MsIGNvbW1vbiBpbiBZQU1MIGRhdGEgZmlsZXMsIHVzZSBpbmRlbnRhdGlvbiBhbmQgbmV3IGxpbmVzIHRvIHNlcGFyYXRlIHRoZSBrZXk6IHZhbHVlIHBhaXJzCiAgbmFtZTogSm9obiBTbWl0aAogIGFnZTogMzMKLS0tICMgSW5saW5lIEJsb2NrcywgY29tbW9uIGluIFlBTUwgZGF0YSBzdHJlYW1zLCB1c2UgY29tbWFzIHRvIHNlcGFyYXRlIHRoZSBrZXk6IHZhbHVlIHBhaXJzIGJldHdlZW4gYnJhY2VzCntuYW1lOiBKb2huIFNtaXRoLCBhZ2U6IDMzfQotLS0KcmVjZWlwdDogICAgIE96LVdhcmUgUHVyY2hhc2UgSW52b2ljZQpkYXRlOiAgICAgICAgMjAwNy0wOC0wNgpjdXN0b21lcjoKICAgIGdpdmVuOiAgIERvcm90aHkKICAgIGZhbWlseTogIEdhbGUKCml0ZW1zOgogICAgLSBwYXJ0X25vOiAgIEE0Nzg2CiAgICAgIGRlc2NyaXA6ICAgV2F0ZXIgQnVja2V0IChGaWxsZWQpCiAgICAgIHByaWNlOiAgICAgMS40NwogICAgICBxdWFudGl0eTogIDQKCiAgICAtIHBhcnRfbm86ICAgRTE2MjgKICAgICAgZGVzY3JpcDogICBIaWdoIEhlZWxlZCAiUnVieSIgU2xpcHBlcnMKICAgICAgc2l6ZTogICAgICAgOAogICAgICBwcmljZTogICAgIDEwMC4yNwogICAgICBxdWFudGl0eTogIDEKCmJpbGwtdG86ICAmaWQwMDEKICAgIHN0cmVldDogfAogICAgICAgICAgICAxMjMgVG9ybmFkbyBBbGxleQogICAgICAgICAgICBTdWl0ZSAxNgogICAgY2l0eTogICBFYXN0IENlbnRlcnZpbGxlCiAgICBzdGF0ZTogIEtTCgpzaGlwLXRvOiAgKmlkMDAxCgpzcGVjaWFsRGVsaXZlcnk6ICA+CiAgICBGb2xsb3cgdGhlIFllbGxvdyBCcmljawogICAgUm9hZCB0byB0aGUgRW1lcmFsZCBDaXR5LgogICAgUGF5IG5vIGF0dGVudGlvbiB0byB0aGUKICAgIG1hbiBiZWhpbmQgdGhlIGN1cnRhaW4uCi4uLgo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXlhbWw8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/yaml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ5YW1sIiwgZnVuY3Rpb24oKSB7CgkKCXZhciBjb25zID0gWyd0cnVlJywgJ2ZhbHNlJywgJ29uJywgJ29mZicsICd5ZXMnLCAnbm8nXTsKCXZhciBrZXl3b3JkUmVnZXggPSBuZXcgUmVnRXhwKCJcXGIoKCIrY29ucy5qb2luKCIpfCgiKSsiKSkkIiwgJ2knKTsKCQoJcmV0dXJuIHsKCQl0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJCQl2YXIgY2ggPSBzdHJlYW0ucGVlaygpOwoJCQl2YXIgZXNjID0gc3RhdGUuZXNjYXBlZDsKCQkJc3RhdGUuZXNjYXBlZCA9IGZhbHNlOwoJCQkvKiBjb21tZW50cyAqLwoJCQlpZiAoY2ggPT0gIiMiKSB7IHN0cmVhbS5za2lwVG9FbmQoKTsgcmV0dXJuICJjb21tZW50IjsgfQoJCQlpZiAoc3RhdGUubGl0ZXJhbCAmJiBzdHJlYW0uaW5kZW50YXRpb24oKSA+IHN0YXRlLmtleUNvbCkgewoJCQkJc3RyZWFtLnNraXBUb0VuZCgpOyByZXR1cm4gInN0cmluZyI7CgkJCX0gZWxzZSBpZiAoc3RhdGUubGl0ZXJhbCkgeyBzdGF0ZS5saXRlcmFsID0gZmFsc2U7IH0KCQkJaWYgKHN0cmVhbS5zb2woKSkgewoJCQkJc3RhdGUua2V5Q29sID0gMDsKCQkJCXN0YXRlLnBhaXIgPSBmYWxzZTsKCQkJCXN0YXRlLnBhaXJTdGFydCA9IGZhbHNlOwoJCQkJLyogZG9jdW1lbnQgc3RhcnQgKi8KCQkJCWlmKHN0cmVhbS5tYXRjaCgvLS0tLykpIHsgcmV0dXJuICJkZWYiOyB9CgkJCQkvKiBkb2N1bWVudCBlbmQgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goL1wuXC5cLi8pKSB7IHJldHVybiAiZGVmIjsgfQoJCQkJLyogYXJyYXkgbGlzdCBpdGVtICovCgkJCQlpZiAoc3RyZWFtLm1hdGNoKC9ccyotXHMrLykpIHsgcmV0dXJuICdtZXRhJzsgfQoJCQl9CgkJCS8qIHBhaXJzIChhc3NvY2lhdGl2ZSBhcnJheXMpIC0+IGtleSAqLwoJCQlpZiAoIXN0YXRlLnBhaXIgJiYgc3RyZWFtLm1hdGNoKC9eXHMqKFthLXowLTlcLl8tXSkrKD89XHMqOikvaSkpIHsKCQkJCXN0YXRlLnBhaXIgPSB0cnVlOwoJCQkJc3RhdGUua2V5Q29sID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CgkJCQlyZXR1cm4gImF0b20iOwoJCQl9CgkJCWlmIChzdGF0ZS5wYWlyICYmIHN0cmVhbS5tYXRjaCgvXjpccyovKSkgeyBzdGF0ZS5wYWlyU3RhcnQgPSB0cnVlOyByZXR1cm4gJ21ldGEnOyB9CgkJCQoJCQkvKiBpbmxpbmUgcGFpcnMvbGlzdHMgKi8KCQkJaWYgKHN0cmVhbS5tYXRjaCgvXihce3xcfXxcW3xcXSkvKSkgewoJCQkJaWYgKGNoID09ICd7JykKCQkJCQlzdGF0ZS5pbmxpbmVQYWlycysrOwoJCQkJZWxzZSBpZiAoY2ggPT0gJ30nKQoJCQkJCXN0YXRlLmlubGluZVBhaXJzLS07CgkJCQllbHNlIGlmIChjaCA9PSAnWycpCgkJCQkJc3RhdGUuaW5saW5lTGlzdCsrOwoJCQkJZWxzZQoJCQkJCXN0YXRlLmlubGluZUxpc3QtLTsKCQkJCXJldHVybiAnbWV0YSc7CgkJCX0KCQkJCgkJCS8qIGxpc3Qgc2VwZXJhdG9yICovCgkJCWlmIChzdGF0ZS5pbmxpbmVMaXN0ID4gMCAmJiAhZXNjICYmIGNoID09ICcsJykgewoJCQkJc3RyZWFtLm5leHQoKTsKCQkJCXJldHVybiAnbWV0YSc7CgkJCX0KCQkJLyogcGFpcnMgc2VwZXJhdG9yICovCgkJCWlmIChzdGF0ZS5pbmxpbmVQYWlycyA+IDAgJiYgIWVzYyAmJiBjaCA9PSAnLCcpIHsKCQkJCXN0YXRlLmtleUNvbCA9IDA7CgkJCQlzdGF0ZS5wYWlyID0gZmFsc2U7CgkJCQlzdGF0ZS5wYWlyU3RhcnQgPSBmYWxzZTsKCQkJCXN0cmVhbS5uZXh0KCk7CgkJCQlyZXR1cm4gJ21ldGEnOwoJCQl9CgkJCQoJCQkvKiBzdGFydCBvZiB2YWx1ZSBvZiBhIHBhaXIgKi8KCQkJaWYgKHN0YXRlLnBhaXJTdGFydCkgewoJCQkJLyogYmxvY2sgbGl0ZXJhbHMgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goL15ccyooXHx8XD4pXHMqLykpIHsgc3RhdGUubGl0ZXJhbCA9IHRydWU7IHJldHVybiAnbWV0YSc7IH07CgkJCQkvKiByZWZlcmVuY2VzICovCgkJCQlpZiAoc3RyZWFtLm1hdGNoKC9eXHMqKFwmfFwqKVthLXowLTlcLl8tXStcYi9pKSkgeyByZXR1cm4gJ3ZhcmlhYmxlLTInOyB9CgkJCQkvKiBudW1iZXJzICovCgkJCQlpZiAoc3RhdGUuaW5saW5lUGFpcnMgPT0gMCAmJiBzdHJlYW0ubWF0Y2goL15ccyotP1swLTlcLlwsXStccz8kLykpIHsgcmV0dXJuICdudW1iZXInOyB9CgkJCQlpZiAoc3RhdGUuaW5saW5lUGFpcnMgPiAwICYmIHN0cmVhbS5tYXRjaCgvXlxzKi0/WzAtOVwuXCxdK1xzPyg/PSgsfH0pKS8pKSB7IHJldHVybiAnbnVtYmVyJzsgfQoJCQkJLyoga2V5d29yZHMgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goa2V5d29yZFJlZ2V4KSkgeyByZXR1cm4gJ2tleXdvcmQnOyB9CgkJCX0KCgkJCS8qIG5vdGhpbmcgZm91bmQsIGNvbnRpbnVlICovCgkJCXN0YXRlLnBhaXJTdGFydCA9IGZhbHNlOwoJCQlzdGF0ZS5lc2NhcGVkID0gKGNoID09ICdcXCcpOwoJCQlzdHJlYW0ubmV4dCgpOwoJCQlyZXR1cm4gbnVsbDsKCQl9LAoJCXN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gewoJCQkJcGFpcjogZmFsc2UsCgkJCQlwYWlyU3RhcnQ6IGZhbHNlLAoJCQkJa2V5Q29sOiAwLAoJCQkJaW5saW5lUGFpcnM6IDAsCgkJCQlpbmxpbmVMaXN0OiAwLAoJCQkJbGl0ZXJhbDogZmFsc2UsCgkJCQllc2NhcGVkOiBmYWxzZQoJCQl9OwoJCX0KCX07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gteWFtbCIsICJ5YW1sIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/oldrelease.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImNzcy9kb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvdXNlcl90aW1lbGluZS8yNDIyODMyODgucnNzIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIi8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImNzcy9iYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogT2xkIHJlbGVhc2UgaGlzdG9yeSAqLwoKPC9wcmU+CgogIDxwIGNsYXNzPSJyZWwiPjI4LTAzLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMC56aXAiPlZlcnNpb24gMi4wPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Db2RlTWlycm9yIDIgaXMgYSBjb21wbGV0ZSByZXdyaXRlIHRoYXQncwogIGZhc3Rlciwgc21hbGxlciwgc2ltcGxlciB0byB1c2UsIGFuZCBsZXNzIGRlcGVuZGVudCBvbiBicm93c2VyCiAgcXVpcmtzLiBTZWUgPGEgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPnRoaXM8L2E+CiAgYW5kIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yL2Jyb3dzZV90aHJlYWQvdGhyZWFkLzVhOGU4OTQwMjRhOWY1ODAiPnRoaXM8L2E+CiAgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9hPgoKICA8cCBjbGFzcz0icmVsIj4yOC0wMy0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0xLjAuemlwIj5WZXJzaW9uIDEuMDwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkZpeCBlcnJvciB3aGVuIGRlYnVnIGhpc3Rvcnkgb3ZlcmZsb3dzLjwvbGk+CiAgICA8bGk+UmVmaW5lIGhhbmRsaW5nIG9mIEMjIHZlcmJhdGltIHN0cmluZ3MuPC9saT4KICAgIDxsaT5GaXggc29tZSBpc3N1ZXMgd2l0aCBKYXZhU2NyaXB0IGluZGVudGF0aW9uLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjItMDItMjAxMTogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hcmlqbmgvY29kZW1pcnJvcjIvdHJlZS9iZXRhMiI+VmVyc2lvbiAyLjAgYmV0YSAyPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Tb21ld2hhdGUgbW9yZSBtYXR1cmUgQVBJLCBsb3RzIG9mIGJ1Z3Mgc2hha2VuIG91dC48L2E+CgogIDxwIGNsYXNzPSJyZWwiPjE3LTAyLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOTQuemlwIj5WZXJzaW9uIDAuOTQ8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT48Y29kZT50YWJNb2RlOiAic3BhY2VzIjwvY29kZT4gd2FzIG1vZGlmaWVkIHNsaWdodGx5IChub3cgaW5kZW50cyB3aGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCkuPC9saT4KICAgIDxsaT5GaXhlcyBhIGJ1ZyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBzZWxlY3Rpb24gY29kZSB0byBicmVhayBvbiBzb21lIElFIHZlcnNpb25zLjwvbGk+CiAgICA8bGk+RGlzYWJsaW5nIHNwZWxsLWNoZWNrIG9uIFdlYktpdCBicm93c2VycyBub3cgd29ya3MuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4wOC0wMi0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvMi8iPlZlcnNpb24gMi4wIGJldGEgMTwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+Q29kZU1pcnJvciAyIGlzIGEgY29tcGxldGUgcmV3cml0ZSBvZgogIENvZGVNaXJyb3IsIG5vIGxvbmdlciBkZXBlbmRpbmcgb24gYW4gZWRpdGFibGUgZnJhbWUuPC9wPgoKICA8cCBjbGFzcz0icmVsIj4xOS0wMS0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjkzLnppcCI+VmVyc2lvbiAwLjkzPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkZWQgYSA8YSBocmVmPSJjb250cmliL3JlZ2V4L2luZGV4Lmh0bWwiPlJlZ3VsYXIgRXhwcmVzc2lvbjwvYT4gcGFyc2VyLjwvbGk+CiAgICA8bGk+Rml4ZXMgdG8gdGhlIFBIUCBwYXJzZXIuPC9saT4KICAgIDxsaT5TdXBwb3J0IGZvciByZWd1bGFyIGV4cHJlc3Npb24gaW4gc2VhcmNoL3JlcGxhY2UuPC9saT4KICAgIDxsaT5BZGQgPGNvZGU+c2F2ZTwvY29kZT4gbWV0aG9kIHRvIGluc3RhbmNlcyBjcmVhdGVkIHdpdGggPGNvZGU+ZnJvbVRleHRBcmVhPC9jb2RlPi48L2xpPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciBNUyBULVNRTCBpbiB0aGUgU1FMIHBhcnNlci48L2xpPgogICAgPGxpPlN1cHBvcnQgdXNlIG9mIENTUyBjbGFzc2VzIGZvciBoaWdobGlnaHRpbmcgYnJhY2tldHMuPC9saT4KICAgIDxsaT5GaXggeWV0IGFub3RoZXIgaGFuZyB3aXRoIGxpbmUtbnVtYmVyaW5nIGluIGhpZGRlbiBlZGl0b3JzLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MTctMTItMjAxMDogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45Mi56aXAiPlZlcnNpb24gMC45MjwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPk1ha2UgQ29kZU1pcnJvciB3b3JrIGluIFhIVE1MIGRvY3VtZW50cy48L2xpPgogICAgPGxpPkZpeCBidWcgaW4gaGFuZGxpbmcgb2YgYmFja3NsYXNoZXMgaW4gUHl0aG9uIHN0cmluZ3MuPC9saT4KICAgIDxsaT5UaGUgPGNvZGU+c3R5bGVOdW1iZXJzPC9jb2RlPiBvcHRpb24gaXMgbm93IG9mZmljaWFsbHkKICAgIHN1cHBvcnRlZCBhbmQgZG9jdW1lbnRlZC48L2xpPgogICAgPGxpPjxjb2RlPm9uTGluZU51bWJlckNsaWNrPC9jb2RlPiBvcHRpb24gYWRkZWQuPC9saT4KICAgIDxsaT5Nb3JlIGNvbnNpc3RlbnQgbmFtZXMgPGNvZGU+b25Mb2FkPC9jb2RlPiBhbmQKICAgIDxjb2RlPm9uQ3Vyc29yQWN0aXZpdHk8L2NvZGU+IGNhbGxiYWNrcy4gT2xkIG5hbWVzIHN0aWxsIHdvcmssIGJ1dAogICAgYXJlIGRlcHJlY2F0ZWQuPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJjb250cmliL2ZyZWVtYXJrZXIvaW5kZXguaHRtbCI+RnJlZW1hcmtlcjwvYT4gbW9kZS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjExLTExLTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45MS56aXAiPlZlcnNpb24gMC45MTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZHMgc3VwcG9ydCBmb3IgPGEgaHJlZj0iY29udHJpYi9qYXZhIj5KYXZhPC9hPi48L2xpPgogICAgPGxpPlNtYWxsIGFkZGl0aW9ucyB0byB0aGUgPGEgaHJlZj0iY29udHJpYi9waHAiPlBIUDwvYT4gYW5kIDxhIGhyZWY9ImNvbnRyaWIvc3FsIj5TUUw8L2E+IHBhcnNlcnMuPC9saT4KICAgIDxsaT5Xb3JrIGFyb3VuZCB2YXJpb3VzIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzgwNiI+V2Via2l0PC9hPiA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NzQiPmlzc3VlczwvYT4uPC9saT4KICAgIDxsaT5GaXggPGNvZGU+dG9UZXh0QXJlYTwvY29kZT4gdG8gdXBkYXRlIHRoZSBjb2RlIGluIHRoZSB0ZXh0YXJlYS48L2xpPgogICAgPGxpPkFkZCBhIDxjb2RlPm5vU2NyaXB0Q2FjaGluZzwvY29kZT4gb3B0aW9uIChoYWNrIHRvIGVhc2UgZGV2ZWxvcG1lbnQpLjwvbGk+CiAgICA8bGk+TWFrZSBzdWItbW9kZXMgb2YgPGEgaHJlZj0ibWl4ZWR0ZXN0Lmh0bWwiPkhUTUwgbWl4ZWQ8L2E+IG1vZGUgY29uZmlndXJhYmxlLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MDItMTAtMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjkuemlwIj5WZXJzaW9uIDAuOTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciBzZWFyY2hpbmcgYmFja3dhcmRzLjwvbGk+CiAgICA8bGk+VGhlcmUgYXJlIG5vdyBwYXJzZXJzIGZvciA8YSBocmVmPSJjb250cmliL3NjaGVtZS9pbmRleC5odG1sIj5TY2hlbWU8L2E+LCA8YSBocmVmPSJjb250cmliL3hxdWVyeS9pbmRleC5odG1sIj5YUXVlcnk8L2E+LCBhbmQgPGEgaHJlZj0iY29udHJpYi9vbWV0YS9pbmRleC5odG1sIj5PbWV0YUpTPC9hPi48L2xpPgogICAgPGxpPk1ha2VzIDxjb2RlPmhlaWdodDogImR5bmFtaWMiPC9jb2RlPiBtb3JlIHJvYnVzdC48L2xpPgogICAgPGxpPkZpeGVzIGJ1ZyB3aGVyZSBwYXN0ZSBkaWQgbm90IHdvcmsgb24gT1MgWC48L2xpPgogICAgPGxpPkFkZCBhIDxjb2RlPmVudGVyTW9kZTwvY29kZT4gYW5kIDxjb2RlPmVsZWN0cmljQ2hhcnM8L2NvZGU+IG9wdGlvbnMgdG8gbWFrZSBpbmRlbnRhdGlvbiBldmVuIG1vcmUgY3VzdG9taXphYmxlLjwvbGk+CiAgICA8bGk+QWRkIDxjb2RlPmZpcnN0TGluZU51bWJlcjwvY29kZT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+Rml4IGJhZCBoYW5kbGluZyBvZiA8Y29kZT5AbWVkaWE8L2NvZGU+IHJ1bGVzIGJ5IHRoZSBDU1MgcGFyc2VyLjwvbGk+CiAgICA8bGk+VGFrZSBhIG5ldywgbW9yZSByb2J1c3QgYXBwcm9hY2ggdG8gd29ya2luZyBhcm91bmQgdGhlIGludmlzaWJsZS1sYXN0LWxpbmUgYnVnIGluIFdlYktpdC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjIyLTA3LTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC44LnppcCI+VmVyc2lvbiAwLjg8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgYSA8Y29kZT5jdXJzb3JDb29yZHM8L2NvZGU+IG1ldGhvZCB0byBmaW5kIHRoZSBzY3JlZW4KICAgIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJzb3IuPC9saT4KICAgIDxsaT5BIG51bWJlciBvZiBmaXhlcyBhbmQgc3VwcG9ydCBmb3IgbW9yZSBzeW50YXggaW4gdGhlIFBIUCBwYXJzZXIuPC9saT4KICAgIDxsaT5GaXggaW5kZW50YXRpb24gcHJvYmxlbSB3aXRoIEpTT04tbW9kZSBKUyBwYXJzZXIgaW4gV2Via2l0LjwvbGk+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iY29tcHJlc3MuaHRtbCI+bWluaWZpY2F0aW9uPC9hPiBVSS48L2xpPgogICAgPGxpPlN1cHBvcnQgYSA8Y29kZT5oZWlnaHQ6IGR5bmFtaWM8L2NvZGU+IG1vZGUsIHdoZXJlIHRoZSBlZGl0b3IncwogICAgaGVpZ2h0IHdpbGwgYWRqdXN0IHRvIHRoZSBzaXplIG9mIGl0cyBjb250ZW50LjwvbGk+CiAgICA8bGk+QmV0dGVyIHN1cHBvcnQgZm9yIElNRSBpbnB1dCBtb2RlLjwvbGk+CiAgICA8bGk+Rml4IEphdmFTY3JpcHQgcGFyc2VyIGdldHRpbmcgY29uZnVzZWQgd2hlbiBzZWVpbmcgYSBuby1hcmd1bWVudAogICAgZnVuY3Rpb24gY2FsbC48L2xpPgogICAgPGxpPkhhdmUgQ1NTIHBhcnNlciBzZWUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzZWxlY3RvcnMgYW5kIG90aGVyCiAgICBpZGVudGlmaWVycy48L2xpPgogICAgPGxpPkZpeCBzY3JvbGxpbmcgYnVnIHdoZW4gcGFzdGluZyBpbiBhIGhvcml6b250YWxseS1zY3JvbGxlZAogICAgZWRpdG9yLjwvbGk+CiAgICA8bGk+U3VwcG9ydCA8Y29kZT50b1RleHRBcmVhPC9jb2RlPiBtZXRob2QgaW4gaW5zdGFuY2VzIGNyZWF0ZWQgd2l0aAogICAgPGNvZGU+ZnJvbVRleHRBcmVhPC9jb2RlPi48L2xpPgogICAgPGxpPldvcmsgYXJvdW5kIG5ldyBPcGVyYSBjdXJzb3IgYnVnIHRoYXQgY2F1c2VzIHRoZSBjdXJzb3IgdG8ganVtcAogICAgd2hlbiBwcmVzc2luZyBiYWNrc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGxpbmUuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yNy0wNC0yMDEwOiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjcuemlwIj5WZXJzaW9uCiAgMC42NzwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+TW9yZSBjb25zaXN0ZW50IHBhZ2UtdXAvcGFnZS1kb3duIGJlaGF2aW91cgogIGFjcm9zcyBicm93c2Vycy4gRml4IHNvbWUgaXNzdWVzIHdpdGggaGlkZGVuIGVkaXRvcnMgbG9vcGluZyBmb3JldmVyCiAgd2hlbiBsaW5lLW51bWJlcnMgd2VyZSBlbmFibGVkLiBNYWtlIFBIUCBwYXJzZXIgcGFyc2UKICA8Y29kZT4iXFwiPC9jb2RlPiBjb3JyZWN0bHkuIEhhdmUgPGNvZGU+anVtcFRvTGluZTwvY29kZT4gd29yayBvbgogIGxpbmUgaGFuZGxlcywgYW5kIGFkZCA8Y29kZT5jdXJzb3JMaW5lPC9jb2RlPiBmdW5jdGlvbiB0byBmZXRjaCB0aGUKICBsaW5lIGhhbmRsZSB3aGVyZSB0aGUgY3Vyc29yIGN1cnJlbnRseSBpcy4gQWRkIG5ldwogIDxjb2RlPnNldFN0eWxlc2hlZXQ8L2NvZGU+IGZ1bmN0aW9uIHRvIHN3aXRjaCBzdHlsZS1zaGVldHMgaW4gYQogIHJ1bm5pbmcgZWRpdG9yLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MDEtMDMtMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY2LnppcCI+VmVyc2lvbgogIDAuNjY8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkFkZHMgPGNvZGU+cmVtb3ZlTGluZTwvY29kZT4gbWV0aG9kIHRvIEFQSS4KICBJbnRyb2R1Y2VzIHRoZSA8YSBocmVmPSJjb250cmliL3Bsc3FsL2luZGV4Lmh0bWwiPlBMU1FMIHBhcnNlcjwvYT4uCiAgTWFya3MgWE1MIGVycm9ycyBieSBhZGRpbmcgKHJhdGhlciB0aGFuIHJlcGxhY2luZykgYSBDU1MgY2xhc3MsIHNvCiAgdGhhdCB0aGV5IGNhbiBiZSBkaXNhYmxlZCBieSBtb2RpZnlpbmcgdGhlaXIgc3R5bGUuIEZpeGVzIHNldmVyYWwKICBzZWxlY3Rpb24gYnVncywgYW5kIGEgbnVtYmVyIG9mIHNtYWxsIGdsaXRjaGVzLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MTItMTEtMjAwOTogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY1LnppcCI+VmVyc2lvbgogIDAuNjU8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkFkZCBzdXBwb3J0IGZvciBoYXZpbmcgYm90aCBsaW5lLXdyYXBwaW5nIGFuZAogIGxpbmUtbnVtYmVycyB0dXJuZWQgb24sIG1ha2UgcGFyZW4taGlnaGxpZ2h0aW5nIHN0eWxlIGN1c3RvbWlzYWJsZQogICg8Y29kZT5tYXJrUGFyZW48L2NvZGU+IGFuZCA8Y29kZT51bm1hcmtQYXJlbjwvY29kZT4gY29uZmlnCiAgb3B0aW9ucyksIHdvcmsgYXJvdW5kIGEgc2VsZWN0aW9uIGJ1ZyB0aGF0IE9wZXJhCiAgPGVtPnJlPC9lbT5pbnRyb2R1Y2VkIGluIHZlcnNpb24gMTAuPC9wPgoKICA8cCBjbGFzcz0icmVsIj4yMy0xMC0yMDA5OiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjQuemlwIj5WZXJzaW9uCiAgMC42NDwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+U29sdmVzIHNvbWUgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlCiAgcGFzdGUtaGFuZGxpbmcgY2hhbmdlcyBmcm9tIHRoZSBwcmV2aW91cyByZWxlYXNlLiBBZGRzCiAgPGNvZGU+c2V0U3BlbGxjaGVjazwvY29kZT4sIDxjb2RlPnNldFRleHRXcmFwcGluZzwvY29kZT4sCiAgPGNvZGU+c2V0SW5kZW50VW5pdDwvY29kZT4sIDxjb2RlPnNldFVuZG9EZXB0aDwvY29kZT4sCiAgPGNvZGU+c2V0VGFiTW9kZTwvY29kZT4sIGFuZCA8Y29kZT5zZXRMaW5lTnVtYmVyczwvY29kZT4gdG8KICBjdXN0b21pc2UgYSBydW5uaW5nIGVkaXRvci4gSW50cm9kdWNlcyBhbiA8YQogIGhyZWY9ImNvbnRyaWIvc3FsL2luZGV4Lmh0bWwiPlNRTDwvYT4gcGFyc2VyLiBGaXhlcyBhIGZldyBzbWFsbAogIHByb2JsZW1zIGluIHRoZSA8YSBocmVmPSJjb250cmliL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob248L2E+CiAgcGFyc2VyLiBBbmQsIGFzIHVzdWFsLCBhZGQgd29ya2Fyb3VuZHMgZm9yIHZhcmlvdXMgbmV3bHkgZGlzY292ZXJlZAogIGJyb3dzZXIgaW5jb21wYXRpYmlsaXRpZXMuPC9wPgoKPHAgY2xhc3M9InJlbCI+PGVtPjMxLTA4LTIwMDk8L2VtPjogPGEKaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42My56aXAiPlZlcnNpb24KMC42MzwvYT46PC9wPgo8cCBjbGFzcz0icmVsLW5vdGUiPiBPdmVyaGF1bCBvZiBwYXN0ZS1oYW5kbGluZyAobGVzcyBmcmFnaWxlKSwgZml4ZXMgZm9yIHNldmVyYWwKc2VyaW91cyBJRTggaXNzdWVzIChjdXJzb3IganVtcGluZywgZW5kLW9mLWRvY3VtZW50IGJ1Z3MpIGFuZCBhIG51bWJlcgpvZiBzbWFsbCBwcm9ibGVtcy48L3A+Cgo8cCBjbGFzcz0icmVsIj48ZW0+MzAtMDUtMjAwOTwvZW0+OiA8YQpocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjYyLnppcCI+VmVyc2lvbgowLjYyPC9hPjo8L3A+CjxwIGNsYXNzPSJyZWwtbm90ZSI+SW50cm9kdWNlcyA8YSBocmVmPSJjb250cmliL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob248L2E+CmFuZCA8YSBocmVmPSJjb250cmliL2x1YS9pbmRleC5odG1sIj5MdWE8L2E+IHBhcnNlcnMuIEFkZAo8Y29kZT5zZXRQYXJzZXI8L2NvZGU+IChvbi10aGUtZmx5IG1vZGUgY2hhbmdpbmcpIGFuZAo8Y29kZT5jbGVhckhpc3Rvcnk8L2NvZGU+IG1ldGhvZHMuIE1ha2UgcGFyc2luZyBwYXNzZXMgdGltZS1iYXNlZAppbnN0ZWFkIG9mIGxpbmVzLWJhc2VkIChzZWUgdGhlIDxjb2RlPnBhc3NUaW1lPC9jb2RlPiBvcHRpb24pLjwvcD4KCjwvYm9keT48L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDb2RlTWlycm9yIDIKCkNvZGVNaXJyb3IgMiBpcyBhIHJld3JpdGUgb2YgW0NvZGVNaXJyb3IKMV0oaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yKS4gVGhlIGRvY3MgbGl2ZQpbaGVyZV0oaHR0cDovL2NvZGVtaXJyb3IubmV0L21hbnVhbC5odG1sKSwgYW5kIHRoZSBwcm9qZWN0IHBhZ2UgaXMKW2h0dHA6Ly9jb2RlbWlycm9yLm5ldC9dKGh0dHA6Ly9jb2RlbWlycm9yLm5ldC8pLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/test/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogVGVzdCBTdWl0ZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9kZWZhdWx0LmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0PgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5vayB7Y29sb3I6ICMwZTA7fQogICAgICAuZmFpbHVyZSB7Y29sb3I6ICNlMDA7fQogICAgICAuZXJyb3Ige2NvbG9yOiAjYzkwO30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogVGVzdCBTdWl0ZTwvaDE+CgogICAgPHA+QSBsaW1pdGVkIHNldCBvZiBwcm9ncmFtbWF0aWMgc2FuaXR5IHRlc3RzIGZvciBDb2RlTWlycm9yLjwvcD4KCiAgICA8cHJlIGlkPW91dHB1dD48L3ByZT4KCiAgICA8ZGl2IHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iIGlkPXRlc3Rncm91bmQ+CiAgICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+PC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9b2sgbmFtZT1zdWJtaXQ+PC9mb3JtPgogICAgPC9kaXY+CgogICAgPHNjcmlwdCBzcmM9InRlc3QuanMiPjwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/test.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHRlc3RzID0gW107Cgp0ZXN0KCJmcm9tVGV4dEFyZWEiLCBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHRlLnZhbHVlID0gIkNPTlRFTlQiOwogIHZhciBjbSA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlKTsKICBpcyghdGUub2Zmc2V0SGVpZ2h0KTsKICBlcShjbS5nZXRWYWx1ZSgpLCAiQ09OVEVOVCIpOwogIGNtLnNldFZhbHVlKCJmb29cbmJhciIpOwogIGVxKGNtLmdldFZhbHVlKCksICJmb29cbmJhciIpOwogIGNtLnNhdmUoKTsKICBpcygvXmZvb1xyP1xuYmFyJC8udGVzdCh0ZS52YWx1ZSkpOwogIGNtLnNldFZhbHVlKCJ4eHgiKTsKICBjbS50b1RleHRBcmVhKCk7CiAgaXModGUub2Zmc2V0SGVpZ2h0KTsKICBlcSh0ZS52YWx1ZSwgInh4eCIpOwp9KTsKCnRlc3RDTSgiZ2V0UmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMjM0Iik7CiAgZXEoY20uZ2V0TGluZSgxKSwgIjU2NzgiKTsKICBlcShjbS5nZXRMaW5lKDIpLCBudWxsKTsKICBlcShjbS5nZXRMaW5lKC0xKSwgbnVsbCk7CiAgZXEoY20uZ2V0UmFuZ2Uoe2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDAsIGNoOiAzfSksICIxMjMiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IC0xfSwge2xpbmU6IDAsIGNoOiAyMDB9KSwgIjEyMzQiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IDJ9LCB7bGluZTogMSwgY2g6IDJ9KSwgIjM0XG41NiIpOwogIGVxKGNtLmdldFJhbmdlKHtsaW5lOiAxLCBjaDogMn0sIHtsaW5lOiAxMDAsIGNoOiAwfSksICI3OCIpOwp9LCB7dmFsdWU6ICIxMjM0XG41Njc4In0pOwoKdGVzdENNKCJyZXBsYWNlUmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldFZhbHVlKCksICIiKTsKICBjbS5yZXBsYWNlUmFuZ2UoImZvb1xuIiwge2xpbmU6IDAsIGNoOiAwfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZvb1xuIik7CiAgY20ucmVwbGFjZVJhbmdlKCJhXG5iIiwge2xpbmU6IDAsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZhXG5ib29cbiIpOwogIGVxKGNtLmxpbmVDb3VudCgpLCAzKTsKICBjbS5yZXBsYWNlUmFuZ2UoInh5enp5Iiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgInh5enp5b29cbiIpOwogIGNtLnJlcGxhY2VSYW5nZSgiYWJjIiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEwLCBjaDogMH0pOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5saW5lQ291bnQoKSwgMSk7Cn0pOwoKdGVzdENNKCJzZWxlY3Rpb24iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDR9LCB7bGluZTogMiwgY2g6IDJ9KTsKICBpcyhjbS5zb21ldGhpbmdTZWxlY3RlZCgpKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgIjExXG4yMjIyMjJcbjMzIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKGZhbHNlKSwge2xpbmU6IDIsIGNoOiAyfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMCwgY2g6IDR9KTsKICBjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IDEsIGNoOiAwfSk7CiAgaXMoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDB9KTsKICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJhYmMiKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgImFiYyIpOwogIGVxKGNtLmdldFZhbHVlKCksICIxMTExMTFcbmFiYzIyMjIyMlxuMzMzMzMzIik7CiAgY20ucmVwbGFjZVNlbGVjdGlvbigiZGVmIiwgImVuZCIpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDN9KTsKICBjbS5zZXRDdXJzb3Ioe2xpbmU6IDIsIGNoOiAxfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMiwgY2g6IDF9KTsKICBjbS5zZXRDdXJzb3IoMSwgMik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDJ9KTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgibGluZXMiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMTExMTEiKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiMjIyMjIyIik7CiAgZXEoY20uZ2V0TGluZSgtMSksIG51bGwpOwogIGNtLnJlbW92ZUxpbmUoMSk7CiAgY20uc2V0TGluZSgxLCAiYWJjIik7CiAgZXEoY20uZ2V0VmFsdWUoKSwgIjExMTExMVxuYWJjIik7Cn0sIHt2YWx1ZTogIjExMTExMVxuMjIyMjIyXG4zMzMzMzMifSk7Cgp0ZXN0Q00oImluZGVudCIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uaW5kZW50TGluZSgxKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiICAgYmxhaCgpOyIpOwogIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDgpOwogIGNtLmluZGVudExpbmUoMSk7CiAgZXEoY20uZ2V0TGluZSgxKSwgIlx0YmxhaCgpOyIpOwp9LCB7dmFsdWU6ICJpZiAoeCkge1xuYmxhaCgpO1xufSIsIGluZGVudFVuaXQ6IDMsIGluZGVudFdpdGhUYWJzOiB0cnVlfSk7Cgp0ZXN0KCJkZWZhdWx0cyIsIGZ1bmN0aW9uKCkgewogIHZhciBvbGRkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHMsIGRlZnMgPSBDb2RlTWlycm9yLmRlZmF1bHRzID0ge307CiAgZm9yICh2YXIgb3B0IGluIG9sZGRlZmF1bHRzKSBkZWZzW29wdF0gPSBvbGRkZWZhdWx0c1tvcHRdOwogIGRlZnMuaW5kZW50VW5pdCA9IDU7CiAgZGVmcy52YWx1ZSA9ICJ1dSI7CiAgZGVmcy5lbnRlck1vZGUgPSAia2VlcCI7CiAgZGVmcy50YWJpbmRleCA9IDU1OwogIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSk7CiAgdHJ5IHsKICAgIGVxKGNtLmdldE9wdGlvbigiaW5kZW50VW5pdCIpLCA1KTsKICAgIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDEwKTsKICAgIGVxKGRlZnMuaW5kZW50VW5pdCwgNSk7CiAgICBlcShjbS5nZXRWYWx1ZSgpLCAidXUiKTsKICAgIGVxKGNtLmdldE9wdGlvbigiZW50ZXJNb2RlIiksICJrZWVwIik7CiAgICBlcShjbS5nZXRJbnB1dEZpZWxkKCkudGFiaW5kZXgsIDU1KTsKICB9CiAgZmluYWxseSB7CiAgICBDb2RlTWlycm9yLmRlZmF1bHRzID0gb2xkZGVmYXVsdHM7CiAgICBwbGFjZS5yZW1vdmVDaGlsZChjbS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICB9Cn0pOwoKdGVzdENNKCJsaW5lSW5mbyIsIGZ1bmN0aW9uKGNtKSB7CiAgZXEoY20ubGluZUluZm8oLTEpLCBudWxsKTsKICB2YXIgbGggPSBjbS5zZXRNYXJrZXIoMSwgIkZPTyIsICJiYXIiKTsKICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKDEpOwogIGVxKGluZm8udGV4dCwgIjIyMjIyMiIpOwogIGVxKGluZm8ubWFya2VyVGV4dCwgIkZPTyIpOwogIGVxKGluZm8ubWFya2VyQ2xhc3MsICJiYXIiKTsKICBlcShpbmZvLmxpbmUsIDEpOwogIGVxKGNtLmxpbmVJbmZvKDIpLm1hcmtlclRleHQsIG51bGwpOwogIGNtLmNsZWFyTWFya2VyKGxoKTsKICBlcShjbS5saW5lSW5mbygxKS5tYXJrZXJUZXh0LCBudWxsKTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgiY29vcmRzIiwgZnVuY3Rpb24oY20pIHsKICB2YXIgc2Nyb2xsZXIgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIkNvZGVNaXJyb3Itc2Nyb2xsIilbMF07CiAgc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKICB2YXIgY29udGVudCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgMjAwOyArK2kpIGNvbnRlbnQucHVzaCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiArIGkpOwogIGNtLnNldFZhbHVlKGNvbnRlbnQuam9pbigiXG4iKSk7CiAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDAsIGNoOiAwfSk7CiAgdmFyIGJvdCA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDIwMCwgY2g6IDMwfSk7CiAgaXModG9wLnggPCBib3QueCk7CiAgaXModG9wLnkgPCBib3QueSk7CiAgaXModG9wLnkgPCB0b3AueUJvdCk7CiAgc2Nyb2xsZXIuc2Nyb2xsVG9wID0gMTAwOwogIGNtLnJlZnJlc2goKTsKICB2YXIgdG9wMiA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDAsIGNoOiAwfSk7CiAgaXModG9wLnkgPiB0b3AyLnkpOwogIGVxKHRvcC54LCB0b3AyLngpOwp9KTsKCnRlc3RDTSgiY29vcmRzQ2hhciIsIGZ1bmN0aW9uKGNtKSB7CiAgdmFyIGNvbnRlbnQgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDcwOyArK2kpIGNvbnRlbnQucHVzaCgieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIpOwogIGNtLnNldFZhbHVlKGNvbnRlbnQuam9pbigiXG4iKSk7CiAgZm9yICh2YXIgeCA9IDA7IHggPCAzNTsgeCArPSAyKSB7CiAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDcwOyB5ICs9IDUpIHsKICAgICAgY20uc2V0Q3Vyc29yKHksIHgpOwogICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcihjbS5jaGFyQ29vcmRzKHtsaW5lOiB5LCBjaDogeH0pKTsKICAgICAgZXEocG9zLmxpbmUsIHkpOwogICAgICBlcShwb3MuY2gsIHgpOwogICAgfQogIH0KfSk7Cgp0ZXN0Q00oInVuZG8iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldExpbmUoMCwgImRlZiIpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDApOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMSk7CiAgY20ucmVkbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJkZWYiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDEpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMCk7CiAgY20uc2V0VmFsdWUoIjFcblxuXG4yIik7CiAgZXEoY20uaGlzdG9yeVNpemUoKS51bmRvLCAwKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgIGNtLnJlcGxhY2VSYW5nZSgiYSIsIHtsaW5lOiAwLCBjaDogMH0pOwogICAgY20ucmVwbGFjZVJhbmdlKCJiIiwge2xpbmU6IDMsIGNoOiAwfSk7CiAgfQogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgNDApOwogIGZvciAodmFyIGkgPSAwOyBpIDwgMzg7ICsraSkgY20udW5kbygpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMik7CiAgZXEoY20uaGlzdG9yeVNpemUoKS5yZWRvLCAzOCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImExXG5cblxuYjIiKTsKICBjbS5zZXRPcHRpb24oInVuZG9EZXB0aCIsIDEwKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgIGNtLnJlcGxhY2VSYW5nZSgiYSIsIHtsaW5lOiAwLCBjaDogMH0pOwogICAgY20ucmVwbGFjZVJhbmdlKCJiIiwge2xpbmU6IDMsIGNoOiAwfSk7CiAgfQogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMTApOwp9LCB7dmFsdWU6ICJhYmMifSk7Cgp0ZXN0Q00oInVuZG9NdWx0aUxpbmUiLCBmdW5jdGlvbihjbSkgewogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjAsIGNoOiAwfSk7CiAgY20ucmVwbGFjZVJhbmdlKCJ5Iiwge2xpbmU6MSwgY2g6IDB9KTsKICBjbS51bmRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImFiY1xuZGVmXG5naGkiKTsKICBjbS5yZXBsYWNlUmFuZ2UoInkiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjAsIGNoOiAwfSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmNcbmRlZlxuZ2hpIik7CiAgY20ucmVwbGFjZVJhbmdlKCJ5Iiwge2xpbmU6MiwgY2g6IDB9KTsKICBjbS5yZXBsYWNlUmFuZ2UoIngiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieiIsIHtsaW5lOjIsIGNoOiAwfSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmNcbmRlZlxuZ2hpIik7Cn0sIHt2YWx1ZTogImFiY1xuZGVmXG5naGkifSk7CgovLyBTY2FmZm9sZGluZwoKZnVuY3Rpb24gaHRtbEVzY2FwZShzdHIpIHsKICByZXR1cm4gc3RyLnJlcGxhY2UoL1s8Jl0vZywgZnVuY3Rpb24oc3RyKSB7cmV0dXJuIHN0ciA9PSAiJiIgPyAiJmFtcDsiIDogIiZsdDsiO30pOwp9CmZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7Cn0KCmZ1bmN0aW9uIEZhaWx1cmUod2h5KSB7dGhpcy5tZXNzYWdlID0gd2h5O30KCmZ1bmN0aW9uIHRlc3QobmFtZSwgcnVuKSB7dGVzdHMucHVzaCh7bmFtZTogbmFtZSwgZnVuYzogcnVufSk7fQpmdW5jdGlvbiB0ZXN0Q00obmFtZSwgcnVuLCBvcHRzKSB7CiAgdGVzdChuYW1lLCBmdW5jdGlvbigpIHsKICAgIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSwgb3B0cyk7CiAgICB0cnkge3J1bihjbSk7fQogICAgZmluYWxseSB7cGxhY2UucmVtb3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7fQogIH0pOwp9CgpmdW5jdGlvbiBydW5UZXN0cygpIHsKICB2YXIgZmFpbHVyZXMgPSBbXSwgcnVuID0gMDsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CiAgICB2YXIgdGVzdCA9IHRlc3RzW2ldOwogICAgdHJ5IHt0ZXN0LmZ1bmMoKTt9CiAgICBjYXRjaChlKSB7CiAgICAgIGlmIChlIGluc3RhbmNlb2YgRmFpbHVyZSkKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZmFpbHVyZSIsIHRlc3Q6IHRlc3QubmFtZSwgdGV4dDogZS5tZXNzYWdlfSk7CiAgICAgIGVsc2UKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZXJyb3IiLCB0ZXN0OiB0ZXN0Lm5hbWUsIHRleHQ6IGUudG9TdHJpbmcoKX0pOwogICAgfQogICAgcnVuKys7CiAgfQogIHZhciBodG1sID0gW3J1biArICIgdGVzdHMgcnVuLiJdOwogIGlmIChmYWlsdXJlcy5sZW5ndGgpCiAgICBmb3JFYWNoKGZhaWx1cmVzLCBmdW5jdGlvbihmYWlsKSB7CiAgICAgIGh0bWwucHVzaChmYWlsLnRlc3QgKyAnOiA8c3BhbiBjbGFzcz0iJyArIGZhaWwudHlwZSArICciPicgKyBodG1sRXNjYXBlKGZhaWwudGV4dCkgKyAiPC9zcGFuPiIpOwogICAgfSk7CiAgZWxzZSBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSJvayI+QWxsIHBhc3NlZC48L3NwYW4+Jyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dHB1dCIpLmlubmVySFRNTCA9IGh0bWwuam9pbigiXG4iKTsKfQoKZnVuY3Rpb24gZXEoYSwgYiwgbXNnKSB7CiAgaWYgKGEgIT0gYikgdGhyb3cgbmV3IEZhaWx1cmUoYSArICIgIT0gIiArIGIgKyAobXNnID8gIiAoIiArIG1zZyArICIpIiA6ICIiKSk7Cn0KZnVuY3Rpb24gZXFQb3MoYSwgYiwgbXNnKSB7CiAgZXEoYS5saW5lLCBiLmxpbmUsIG1zZyk7CiAgZXEoYS5jaCwgYi5jaCwgbXNnKTsKfQpmdW5jdGlvbiBpcyhhLCBtc2cpIHsKICBpZiAoIWEpIHRocm93IG5ldyBGYWlsdXJlKCJhc3NlcnRpb24gZmFpbGVkIiArIChtc2cgPyAiICgiICsgbXNnICsgIikiIDogIiIpKTsKfQoKd2luZG93Lm9ubG9hZCA9IHJ1blRlc3RzOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/theme/default.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLWtleXdvcmQge2NvbG9yOiAjNzA4O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWF0b20ge2NvbG9yOiAjMjE5O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tZGVmIHtjb2xvcjogIzAwZjt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDVhO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjMGE1O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXByb3BlcnR5IHtjb2xvcjogYmxhY2s7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tb3BlcmF0b3Ige2NvbG9yOiBibGFjazt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogI2E1MDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjYTExO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1MDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1tZXRhIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2NjNzt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS10YWcge2NvbG9yOiAjMTcwO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/elegant.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZWxlZ2FudCBzcGFuLmNtLW51bWJlciwgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLXN0cmluZywgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWF0b20ge2NvbG9yOiAjNzYyO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWNvbW1lbnQge2NvbG9yOiAjMjYyO2ZvbnQtc3R5bGU6IGl0YWxpYzt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS1tZXRhIHtjb2xvcjogIzU1NTtmb250LXN0eWxlOiBpdGFsaWM7fQouY20tcy1lbGVnYW50IHNwYW4uY20tdmFyaWFibGUge2NvbG9yOiBibGFjazt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS12YXJpYWJsZS0yIHtjb2xvcjogI2IxMTt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS1xdWFsaWZpZXIge2NvbG9yOiAjNTU1O30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWtleXdvcmQge2NvbG9yOiAjNzMwO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWJ1aWx0aW4ge2NvbG9yOiAjMzBhO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWVycm9yIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZmRkO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/neat.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtbmVhdCBzcGFuLmNtLWNvbW1lbnQgeyBjb2xvcjogI2E4NjsgfQouY20tcy1uZWF0IHNwYW4uY20ta2V5d29yZCB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogYmx1ZTsgfQouY20tcy1uZWF0IHNwYW4uY20tc3RyaW5nIHsgY29sb3I6ICNhMjI7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLWJ1aWx0aW4geyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwNzc7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXNwZWNpYWwgeyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwYWE7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXZhcmlhYmxlIHsgY29sb3I6IGJsYWNrOyB9Ci5jbS1zLW5lYXQgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLW5lYXQgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICMzYTM7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLW1ldGEge2NvbG9yOiAjNTU1O30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/night.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogTG9vc2VseSBiYXNlZCBvbiB0aGUgTWlkbmlnaHQgVGV4dG1hdGUgdGhlbWUgKi8KCi5jbS1zLW5pZ2h0IHsgYmFja2dyb3VuZDogIzBhMDAxZjsgY29sb3I6ICNmOGY4Zjg7IH0KLmNtLXMtbmlnaHQgc3Bhbi5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2E4ZiAhaW1wb3J0YW50OyB9Ci5jbS1zLW5pZ2h0IC5Db2RlTWlycm9yLWd1dHRlciB7IGJhY2tncm91bmQ6ICMwYTAwMWY7IGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNhYWE7IH0KLmNtLXMtbmlnaHQgLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgeyBjb2xvcjogI2Y4ZjhmODsgfQouY20tcy1uaWdodCAuQ29kZU1pcnJvci1jdXJzb3IgeyBib3JkZXItbGVmdDogMXB4IHNvbGlkIHdoaXRlICFpbXBvcnRhbnQ7IH0KCi5jbS1zLW5pZ2h0IHNwYW4uY20tY29tbWVudCB7IGNvbG9yOiAjNjkwMGExOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tYXRvbSB7IGNvbG9yOiAjODQ1ZGM0OyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tbnVtYmVyLCAuY20tcy1uaWdodCBzcGFuLmNtLWF0dHJpYnV0ZSB7IGNvbG9yOiAjZmZkNTAwOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20ta2V5d29yZCB7IGNvbG9yOiAjNTk5ZWZmOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tc3RyaW5nIHsgY29sb3I6ICMzN2YxNGE7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1tZXRhIHsgY29sb3I6ICM3Njc4ZTI7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS12YXJpYWJsZS0yLCAuY20tcy1uaWdodCBzcGFuLmNtLXRhZyB7IGNvbG9yOiAjOTliMmZmOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tdmFyaWFibGUtMywgLmNtLXMtbmlnaHQgc3Bhbi5jbS1kZWYgeyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1lcnJvciB7IGNvbG9yOiAjOWQxZTE1OyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tYnJhY2tldCB7IGNvbG9yOiAjOGRhNmNlOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tY29tbWVudCB7IGNvbG9yOiAjNjkwMGExOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tYnVpbHRpbiwgLmNtLXMtbmlnaHQgc3Bhbi5jbS1zcGVjaWFsIHsgY29sb3I6ICNmZjllNTk7IH0K]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbImZyaWVuZGx5bmFtZSJdPSJDb2RlTWlycm9yIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IiOwoKJGxhbmdbInBvc3RpbnN0YWxsIl09IlRoZSBDb2RlTWlycm9yIG1vZHVsZSB3YXMgc3VjZXNzZnVsbHkgaW5zdGFsbGVkIjsKJGxhbmdbIm5lZWRwZXJtaXNzaW9uIl09IidZb3UgbmVlZCB0aGUgJyVzJyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4iOwoKJGxhbmdbInNldHRpbmdzdGFiIl09IlNldHRpbmdzIjsKJGxhbmdbInNhdmVzZXR0aW5ncyJdPSJTYXZlIHNldHRpbmdzIjsKJGxhbmdbInNldHRpbmdzc2F2ZWQiXT0iU2V0dGluZ3Mgc2F2ZWQiOwoKJGxhbmdbImh0bWx0ZXN0Il09IkhUTUwgc3ludGF4IHRlc3QiOwokbGFuZ1siY3NzdGVzdCJdPSJDU1Mgc3ludGF4IHRlc3QiOwokbGFuZ1sicGhwdGVzdCJdPSJQSFAgc3ludGF4IHRlc3QiOwokbGFuZ1sianN0ZXN0Il09IkphdmFTY3JpcHQgc3ludGF4IHRlc3QiOwovLyRsYW5nWyJleGFtcGxlc3ludGF4Il09IlN5bnRheCB0byB0ZXN0IHdpdGgiOwovLyRsYW5nWyJjaGFuZ2UiXT0iQ2hhbmdlLi4uIjsKCiRsYW5nWyJzaG93bGluZW51bWJlcnMiXT0iU2hvdyBsaW5lbnVtYmVycyI7CiRsYW5nWyJhbGxvd2Z1bGxzY3JlZW4iXT0iQWxsb3cgZnVsbHNjcmVlbiBtb2RlIChGMTEpIjsKCi8vJGxhbmdbInRleHR3cmFwcGluZyJdPSJXcmFwIGxvbmcgbGluZXMiOwokbGFuZ1siYXV0b21hdGNocGFyZW5zIl09IkF1dG9tYXRjaCBwYXJlbnRoZXNpcyI7CiRsYW5nWyJ0YWJoYW5kbGluZyJdPSJIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5IjsKJGxhbmdbInRhYmRlZmF1bHQiXT0iTGV0IHRoZSBicm93c2VyIGRlY2lkZSI7CiRsYW5nWyJ0YWJpbmRlbnQiXT0iRG8gaW5kZW50YXRpb24iOwokbGFuZ1sidGFic3BhY2VzIl09Ikluc2VydCBzcGFjZXMiOwokbGFuZ1sidGFic2hpZnQiXT0iU2hpZnQgdG8gdGhlIHJpZ2h0LCBzaGlmdC1UQUIgc2hpZnRzIHRvIGxlZnQiOwoKJGxhbmdbImNzc2FkZGl0aW9ucyJdPSJBZGRpdGlvbnMgdG8gdGhlIENvZGVNaXJyb3ItY3NzLiI7CgokbGFuZ1sidGhlbWUiXT0iVGhlbWUiOwoKCgokbGFuZ1siaGVscCJdPSI8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz88L3N0cm9uZz4KPGJyLz4KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLgpJdCBjYW4gYm90aCByZXBsYWNlIGEgd3lzaXd5Zy1tb2R1bGUsIGFuZCBhY3Qgc3RhbmRhbG9uZSBmb3IgdGVtcGxhdGUvc3R5bGVzaGVldCBlZGl0aW5nIChvbmx5IHN1cHBvcnRlZCBpbiBDTVNtcyAxLjErKQo8YnIvPjxici8+CjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPgpZb3Ugc2ltcGx5IGluc3RhbGwgaXQsIGFuZCBjaG9vc2UgaXQgaW4geW91ciBhZG1pbiB1c2VyIHByZWZlcmVuY2VzLiBOb3RlLCB0aGF0IGlmIHlvdSB1c2UgQ01TbXMgMS4xIG9yIGFib3ZlIHlvdSBjYW4Kc2VsZWN0IENvZGVNaXJyb3IgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuIjsKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/da_DK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgLSBlbiBzeW50YWtzLWZyZW1oJmFlbGlnO3ZlbmRlIGVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0NvZGVNaXJyb3IgbW9kdWxldCBibGV2IGtvcnJla3QgaW5zdGFsbGVyZXQnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtZb3UgbmVlZCB0aGUgJiMwMzk7JXMmIzAzOTsgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoYXQgZnVuY3Rpb24uJzsKJGxhbmdbJ3NldHRpbmdzdGFiJ10gPSAnSW5kc3RpbGxpbmdlcic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdHZW0gaW5kc3RpbGxpbmdlcic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5kc3RpbGxpbmdlcm5lIGJsZXYgZ2VtdCc7CiRsYW5nWydodG1sdGVzdCddID0gJ0hUTUwgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1Mgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ3BocHRlc3QnXSA9ICdQSFAgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2pzdGVzdCddID0gJ0phdmFTY3JpcHQgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YWtzIGRlciBza2FsIHRlc3RlcyBtZWQnOwokbGFuZ1snY2hhbmdlJ10gPSAnU2tpZnQuLi4nOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnVmlzIGxpbmllbnVtcmUnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnT21icnlkIGxhbmdlIGxpbmllcic7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdWaXMgbWF0Y2hlbmRlIHBhcmVudGVzZXInOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5JzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMZXQgdGhlIGJyb3dzZXIgZGVjaWRlJzsKJGxhbmdbJ3RhYmluZGVudCddID0gJ0RvIGluZGVudGF0aW9uJzsKJGxhbmdbJ3RhYnNwYWNlcyddID0gJ0luc2VydCBzcGFjZXMnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTaGlmdCB0byB0aGUgcmlnaHQsIHNoaWZ0LVRBQiBzaGlmdHMgdG8gbGVmdCc7CiRsYW5nWydjc3NhZGRpdGlvbnMnXSA9ICdUaWxmJm9zbGFzaDtqZWxzZXIgdGlsIENvZGVNaXJyb3ItY3NzLic7CiRsYW5nWydoZWxwJ10gPSAnPHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLic7CiRsYW5nWydxY2EnXSA9ICcxMjI5NjAxNzkwLTg1MjQzMTk3LTQzMjYwNzEzJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMzg5Njg0Mzk0LjEzMDExNDIxNDAuMTMwMTI1NDY5Ny4xMzAxNDM1MjU2LjMnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzAxMTQyMTQwLjEuMS51dG1jc3I9KGRpcmVjdCl8dXRtY2NuPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3ItU3ludGF4aGVydm9yaGVidW5nJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnRGFzIENvZGVNaXJyb3ItTW9kdWwgd3VyZGUgZXJmb2xncmVpY2ggaW5zdGFsbGllcnQuJzsKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAnU2llIGJlc2l0emVuIG5pY2h0ICBkaWUgJiMwMzk7JXMmIzAzOTstQmVyZWNodGlndW5nLCB1bSBkaWVzZSBGdW5rdGlvbiBhdXN6dWYmdXVtbDtocmVuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0VpbnN0ZWxsdW5nZW4nOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnRWluc3RlbGx1bmdlbiBzcGVpY2hlcm4nOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0VpbnN0ZWxsdW5nZW4gZ2VzcGVpY2hlcnQnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MLVN5bnRheC1UZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MtU3ludGF4LVRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUC1TeW50YXgtVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0LVN5bnRheC1UZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1plaWxlbm51bW1lcm4gYW56ZWlnZW4nOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlzY2hlIEtsYW1tZXItRXJrZW5udW5nJzsKJGxhbmdbJ3RhYmhhbmRsaW5nJ10gPSAnVW1nYW5nIG1pdCBEciZ1dW1sO2NrZW4gZGVyIFRBQi1UYXN0ZSc7CiRsYW5nWyd0YWJkZWZhdWx0J10gPSAnQnJvd3NlciBlbnRzY2hlaWRlbiBsYXNzZW4nOwokbGFuZ1sndGFiaW5kZW50J10gPSAnRWluciZ1dW1sO2NrdW5nJzsKJGxhbmdbJ3RhYnNwYWNlcyddID0gJ0xlZXJ6ZWljaGVuIGVpbmYmdXVtbDtnZW4nOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTaGlmdCBuYWNoIHJlY2h0cywgU2hpZnQtVEFCIHZlcnNjaGllYnQgc2ljaCBuYWNoIGxpbmtzJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ1p1cyZhdW1sO3R6ZSB6dW0gQ29kZU1pcnJvci1DU1MuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGhlbWEnOwokbGFuZ1snaGVscCddID0gJzxoMz5XYXMgbWFjaHQgZGllc2VzIE1vZHVsPzwvaDM+DQo8cD5EYXMgQ29kZU1pcnJvci1Nb2R1bCBpc3QgZWluIEVkaXRvciBtaXQgU3ludGF4aGVydm9yaGVidW5nLCBtaXQgZGVtIFNpZSBvbmxpbmUgSW5oYWx0LCBUZW1wbGF0ZXMgdW5kIFN0eWxlc2hlZXRzIGJlYXJiZWl0ZW4gayZvdW1sO25uZW4uIERhcyBNb2R1bCBrYW5uIHNvd29obCBkaWUgV1lTSVdZRy1FZGl0b3JlbiBlcnNldHplbiBhbHMgYXVjaCBzZXBhcmF0IHp1bSBFZGl0aWVyZW4gdm9uIFRlbXBsYXRlcyB1bmQgU3R5bGVzaGVldHMgdmVyd2VuZGV0IHdlcmRlbiAodW50ZXJzdCZ1dW1sO3R6dCBhYiBDTVNtcyBWZXJzaW9uIDEuMSkuPC9wPg0KPGgzPldpZSB3aXJkIGVzIGVpbmdlc2V0enQ/PC9oMz4NCjxwPkluc3RhbGxpZXJlbiBTaWUgZGFzIE1vZHVsIHVuZCBha3RpdmllcmVuIFNpZSBlcyBhbnNjaGxpZSZzemxpZztlbmQgaW4gZGVuIGJlbnV0emVyc3BlemlmaXNjaGVuIEVpbnN0ZWxsdW5nZW4uPC9wPg0KPHA+QmVhY2h0ZW4gU2llLCBkYXNzIFNpZSBhYiBDTVNtcy1WZXJzaW9uIDEuMSB1bmQgaCZvdW1sO2hlciBDb2RlTWlycm9yIHNvd29obCBhbHMgV1lTSVdZRy1FZGl0b3IgYWxzIGF1Y2ggYWxzIEVkaXRvciBtaXQgU3ludGF4aGVydm9yaGVidW5nIGF1c3cmYXVtbDtobGVuIGsmb3VtbDtubmVuLjwvcD4nOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/es_ES.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRvciBkZSByZXNhbHRhZG8gZGUgc2ludGF4aXMgQ29kZU1pcnJvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0VsIG0mYW1wO29hY3V0ZTtkdWxvIENvZGVNaXJyb3IgZnVlIHNhdGlzZmFjdG9yaWFtZW50ZSBpbnN0YWxhZG8nOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtTZSBuZWNlc2l0YSBlbCBwZXJtaXNvIGRlICYjMDM5OyVzJiMwMzk7IHBhcmEgcmVhbGl6YXIgZXN0YSBmdW5jaSZhbXA7b2FjdXRlO24uJzsKJGxhbmdbJ3NldHRpbmdzdGFiJ10gPSAnQWp1c3Rlcyc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYWx2YXIgYWp1c3Rlcyc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnQWp1c3RlcyBndWFyZGFkb3MnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdQcnVlYmEgZGUgc2ludGF4aXMgSFRNTCc7CiRsYW5nWydjc3N0ZXN0J10gPSAnUHJ1ZWJhIGRlIHNpbnRheGlzIENTUyc7CiRsYW5nWydwaHB0ZXN0J10gPSAnUHJ1ZWJhIGRlIHNpbnRheGlzIFBIUCc7CiRsYW5nWydleGFtcGxlc3ludGF4J10gPSAnU3ludGF4aXMgdXNhZGEgcGFyYSBwcm9iYXInOwokbGFuZ1snY2hhbmdlJ10gPSAnQ2FtYmlhci4uLic7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdNb3N0YXIgZWwgbiZhbXA7dWFjdXRlO21lcm8gZGUgbCZhbXA7aWFjdXRlO25lYXMnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnQXV0by1hanVzdGFyIGxpbmVhcyBsYXJnYXMnOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+UXUmYW1wO2VhY3V0ZTsgaGFjZSBlc3RlIG0mYW1wO29hY3V0ZTtkdWxvPzwvc3Ryb25nPg0KPGJyLz4NCkVsIG0mYW1wO29hY3V0ZTtkdWxvIENvZGVNaXJyb3IgbGUgcGVybWl0ZSBlZGl0YXIgY29udGVuaWRvLCBwbGFudGlsbGFzIHkgaG9qYXMgZGUgZXN0aWxvIHVzYW5kbyB1biBlZGl0b3IgZGUgcmVzYWx0YWRvIGRlIHNpbnRheGlzIGRlbnRybyBkZSBzdSBuYXZlZ2Fkb3IuDQpFc3RlIHRhbWJpdSZhbXA7ZWFjdXRlO24gcHVlZGUgIHJlZW1wbGF6YXIgZWwgbSZhbXA7b2FjdXRlO2R1bG8gZGUgd3lzaXd5ZywgeSBhY3R1YXIgc29sbyBwYXJhIGVkaWNpJmFtcDtvYWN1dGU7biBkZSBwbGFudGlsbGFzL2hvamFzIGRlIGVzdGlsbyB0ZW1wbGF0ZS9zdHlsZXNoZWV0ICAoc29sbyBzb3BvcnRhZG8gZW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+QyZhbXA7b2FjdXRlO21vIHVzbyBlc3RlIG0mYW1wO29hY3V0ZTtkdWxvPzwvc3Ryb25nPg0KVXN0ZWQgc2ltcGxlbWVudGUgbG8gaW5zdGFsYSwgeSBsbyBzZWxlY2Npb25hIGVuIGxhcyBwcmVmZXJlY2lhcyBkZSBsYSBhZG1pbmlzdHJhY2kmYW1wO29hY3V0ZTtuLiBOb3RlIHF1ZSwgc2kgdXN0ZWQgdXNhIENNU21zIDEuMSBvIHN1cGVyaW9yIGEgZXN0ZSB1c3RlZCBwdWVkZSBzZWxlY2Npb25hciBDb2RlTWlycm9yIGp1bnRvIGNvbiBXWVNJV1lHIHBhcmEgZWwgcmVzYWx0YWRvIGRlIHNpbnRheGlzLic7CiRsYW5nWydxY2EnXSA9ICdQMC0yMDk2MDU0MzcwLTEyNTk4MDM2MTU5MzknOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4yMzg2MDY4NTQuMTI1OTgwNDM2OC4xMjY3NjUyNDU5LjEyNjc2NTk3NzMuNTcnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjY3NjUyNDU5LjU2LjI4LnV0bWNjbj0ocmVmZXJyYWwpfHV0bWNzcj1mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY3Q9L2luZGV4LnBocC90b3BpYywxOTkyOS4wLmh0bWx8dXRtY21kPXJlZmVycmFsJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRldXIgZGUgc3ludGF4ZSBjb2xvciZlYWN1dGU7IENvZGVNaXJyb3InOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdMZSBtb2R1bGUgQ29kZU1pcnJvciBhICZlYWN1dGU7dCZlYWN1dGU7IGluc3RhbGwmZWFjdXRlOyBhdmVjIHN1Y2MmZWdyYXZlO3MnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtWb3VzIGF2ZXogYmVzb2luIGRlIGwmIzAzOTthdXRvcmlzYXRpb24gJiMwMzk7JXMmIzAzOTsgIHBvdXIgY2V0dGUgZm9uY3Rpb24nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdQYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYXV2ZWdhcmRlciBsZXMgcGFyYW0mZWdyYXZlO3RyZXMnOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ1BhcmFtJmVncmF2ZTt0cmVzIHNhdXZlZ2FyZCZlYWN1dGU7cyc7CiRsYW5nWydodG1sdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBIVE1MICc7CiRsYW5nWydjc3N0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIENTUyAnOwokbGFuZ1sncGhwdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBQSFAnOwokbGFuZ1snanN0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIEphdmFTY3JpcHQnOwokbGFuZ1snZXhhbXBsZXN5bnRheCddID0gJ1N5bnRheGUgcG91ciB0ZXN0ZXIgYXZlYyZuYnNwOyc7CiRsYW5nWydjaGFuZ2UnXSA9ICdDaGFuZ2VyIC4uLic7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdBZmZpY2hlciBsZSBub21icmUgZGUgbGlnbmVzJzsKJGxhbmdbJ3RleHR3cmFwcGluZyddID0gJ1JldG91ciAmYWdyYXZlOyBsYSBsaWduZSBhdXRvbWF0aXF1ZSc7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdBZmZpY2hlciBsZXMgY29ycmVzcG9uZGFuY2VzIGRlIHBhcmVudGgmZWdyYXZlO3Nlcyc7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ0NvbW1lbnQgZyZlYWN1dGU7cmVyIGxlIGNsaWMgc3VyIGxhIHRvdWNoZSBUQUInOwokbGFuZ1sndGFiZGVmYXVsdCddID0gJ0xhaXNzZXIgbGUgbmF2aWdhdGV1ciBkJmVhY3V0ZTtjaWRlcic7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdJbmRlbnRlcic7CiRsYW5nWyd0YWJzcGFjZXMnXSA9ICdJbnMmZWFjdXRlO3JlciBkZXMgZXNwYWNlcyc7CiRsYW5nWyd0YWJzaGlmdCddID0gJ1NoaWZ0IHZlcnMgbGEgZHJvaXRlLCBzaGlmdC1UQUIgc2hpZnRzIHZlcnMgbGEgZ2F1Y2hlJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ0Fqb3V0cyAmYWdyYXZlOyBsYSBmZXVpbGxlIGRlIHN0eWxlIGRlIENvZGVNaXJyb3IuJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPlF1ZSBmYWl0IGNlIG1vZHVsZSZuYnNwOz88L3N0cm9uZz4NCjxici8+DQpMZSBtb2R1bGUgQ29kZU1pcnJvciB2b3VzIHBlcm1ldCBkZSBtb2RpZmllciBsZSBjb250ZW51LCBsZXMgZ2FiYXJpdHMgZXQgbGVzIGZldWlsbGVzIGRlIHN0eWxlIGVuIHV0aWxpc2FudCB1biAmZWFjdXRlO2RpdGV1ciBkZSBzeW50YXhlIGNvbG9yJmVhY3V0ZTsgbCYjMDM5O2ludCZlYWN1dGU7cmlldXIgZGUgdm90cmUgbmF2aWdhdGV1ci4gDQpJbCBwZXV0IGF1c3NpIGJpZW4gcmVtcGxhY2VyIGwmIzAzOTsmZWFjdXRlO2RpdGV1ciBXWVNJV1lHLCBldCBwZXJtZXR0cmUgZGUgdmlzdWFsaXNlci0mZWFjdXRlO2RpdGVyIGxlcyBnYWJhcml0cywgZmV1aWxsZXMgZGUgc3R5bGUuIChVbmlxdWVtZW50IHBvdXIgdmVyc2lvbiBDTVNNUyAxLjEgb3UgcGx1cykNCjxici8+PGJyLz4NCjxzdHJvbmc+Q29tbWVudCBsJiMwMzk7dXRpbGlzZXImbmJzcDs/PC9zdHJvbmc+PGJyLz4NCklsIHZvdXMgc3VmZml0IGRlIGwmIzAzOTtpbnN0YWxsZXIsIGV0IGRhbnMgJnF1b3Q7TWVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMgLyBQciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzIGRlIGwmIzAzOTt1dGlsaXNhdGV1ciZxdW90OyBjaG9pc2lyIGF2ZWMgbGUgbWVudSBkJmVhY3V0ZTtyb3VsYW50IENvZGVNaXJyb3IgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9ubmVyIGxhIHN5bnRheGUgc3VybGlnbiZlYWN1dGU7ZSZxdW90OyBldC9vdSAmZWFjdXRlO3ZlbnR1ZWxsZW1lbnQgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9uIGR1IFdZU0lXWUcgJmFncmF2ZTsgdXRpbGlzZXImcXVvdDsuDQonOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xMjU0MTE1OTg4LjEzMDE1ODMyNTkuMTMwMTU4MzI1OS4xMzAxNTgzMjU5LjEnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDE1ODMyNTkuMS4xLnV0bWNjbj0oZGlyZWN0KXx1dG1jc3I9KGRpcmVjdCl8dXRtY21kPShub25lKSc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3Igc3ludGFrc2ZyZW1oZXZpbmdzcmVkaWdlcmVyJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQ29kZU1pcnJvciBtb2R1bGVuIGJsZSBpbnN0YWxsZXJ0JzsKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAnRHUgdHJlbmdlciAmIzAzOTslcyYjMDM5OyB0aWxsYXRlbHNlIGZvciAmYXJpbmc7IHV0ZiZvc2xhc2g7cmUgZGVubmUgZnVua3Nqb25lbi4nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdJbm5zdGlsbGluZ2VyJzsKJGxhbmdbJ3NhdmVzZXR0aW5ncyddID0gJ0xhZ3JlIGlubnN0aWxsaW5nZXInOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0lubnN0aWxsaW5nZXIgbGFncmV0JzsKJGxhbmdbJ2h0bWx0ZXN0J10gPSAnSFRNTCBzeW50YWtzIHRlc3QnOwokbGFuZ1snY3NzdGVzdCddID0gJ0NTUyBzeW50YWtzIHRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBzeW50YWtzIHRlc3QnOwokbGFuZ1snanN0ZXN0J10gPSAnSmF2YVNjcmlwdCBzeW50YWtzdGVzdCc7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdWaXMgbGluamVudW1tZXInOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlza2UgcGFyYW50ZXNlcic7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ0h2b3JkYW4gc2thbCB0cnlrayBhdiBUQUItdGFzdGVuIGgmYXJpbmc7bnRlcmVzJzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMYSBuZXR0bGVzZXJlbiBhdmdqJm9zbGFzaDtyZSc7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdMYWcgaW5ucnlrayc7CiRsYW5nWyd0YWJzcGFjZXMnXSA9ICdTZXR0IGlubiBtZWxsb21yb20nOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTZW5kZXIgdGlsIGgmb3NsYXNoO3lyZSwgc2hpZnQtVEFCIHNlbmRlciB0aWwgdmVuc3RyZSc7CiRsYW5nWydjc3NhZGRpdGlvbnMnXSA9ICdDb2RlTWlycm9yLWNzcyB0aWxsZWdnLic7CiRsYW5nWyd0aGVtZSddID0gJ1RlbWEnOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvc3Ryb25nPg0KPGJyLz4NClRoZSBDb2RlTWlycm9yIG1vZHVsZSBhbGxvd3MgeW91IHRvIGVkaXQgY29udGVudCwgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cyB1c2luZyBhIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IgaW5zaWRlIHlvdXIgYnJvd3Nlci4NCkl0IGNhbiBib3RoIHJlcGxhY2UgYSB3eXNpd3lnLW1vZHVsZSwgYW5kIGFjdCBzdGFuZGFsb25lIGZvciB0ZW1wbGF0ZS9zdHlsZXNoZWV0IGVkaXRpbmcgKG9ubHkgc3VwcG9ydGVkIGluIENNU21zIDEuMSspDQo8YnIvPjxici8+DQo8c3Ryb25nPkhvdyBkbyBJIHVzZSB0aGlzIG1vZHVsZT88L3N0cm9uZz4NCllvdSBzaW1wbHkgaW5zdGFsbCBpdCwgYW5kIGNob29zZSBpdCBpbiB5b3VyIGFkbWluIHVzZXIgcHJlZmVyZW5jZXMuIE5vdGUsIHRoYXQgaWYgeW91IHVzZSBDTVNtcyAxLjEgb3IgYWJvdmUgeW91IGNhbg0Kc2VsZWN0IENvZGVBcmVhIGJvdGggYXMgYSBXWVNJV1lHIGFuZCBhcyBhIHN5bnRheCBoaWdobGlnaHRpbmcgZWRpdG9yLic7CiRsYW5nWydxY2EnXSA9ICdQMC01MzY4NDkxMTUtMTMwNzk4MzQ5NTIxMCc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEwMDU2MDYwODQuMTMwOTA0NzQ3Mi4xMzA5MDQ3NDcyLjEzMDkxMjIyMjEuMic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDc5ODM0OTUuMS4xLnV0bWNzcj0oZGlyZWN0KXx1dG1jY249KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuNS4xMC4xMzA5MTIyMjIxJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgU3ludGF4aGlnaGxpZ2h0aW5nIEVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0RlIENvZGVNaXJyb3IgTW9kdWxlIGlzIGdlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1UgaGVlZnQgJiMwMzk7JXMmIzAzOTsgcmVjaHRlbiBub2RpZyBvbSBkZXplIGZ1bmN0aWUgdGUgZ2VicnVpa2VuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0luc3RlbGxpbmdlbic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdJbnN0ZWxsaW5nZW4gb3BzbGFhbic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5zdGVsbGluZ2VuIG9wZ2VzbGFnZW4nOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIFN5bnRheCBUZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MgU3ludGF4IFRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBTeW50YXggVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IFN5bnRheCBUZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1JlZ2VsbnVtbWVycyB0b25lbic7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdBdXRvbWF0aXNjaCBiaWogZWxrYWFyIGhvcmVuZGUgdGFncyBrbGV1cmVuJzsKJGxhbmdbJ3RhYmhhbmRsaW5nJ10gPSAnV2F0IHRlIGRvZW4gYmlqIGhldCBpbmRydWtrZW4gdmFuIFRBQiB0b2V0cyc7CiRsYW5nWyd0YWJkZWZhdWx0J10gPSAnTGFhdCBkZSBicm93c2VyIGhldCBiZXBhbGVuJzsKJGxhbmdbJ3RhYmluZGVudCddID0gJ01hYWsgcmVnZWwgaW5zcHJpbmdpbmcnOwokbGFuZ1sndGFic3BhY2VzJ10gPSAnVm9lZyBzcGF0aWVzIHRvZSc7CiRsYW5nWyd0YWJzaGlmdCddID0gJ1ZlcnBsYWF0c3QgbmFhciByZWNodHMsIHNoaWZ0LVRBQiB2ZXJwbGFhdHN0IG5hYXIgbGlua3MnOwokbGFuZ1snY3NzYWRkaXRpb25zJ10gPSAnQWFucGFzc2luZ2VuIGFhbiBkZSBDb2RlTWlycm9yLWNzcy4nOwokbGFuZ1sndGhlbWUnXSA9ICdUaGVtZSAnOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPyA8L3N0cm9uZz4NCjxici8+DQpUaGUgQ29kZU1pcnJvciBtb2R1bGUgYWxsb3dzIHlvdSB0byBlZGl0IGNvbnRlbnQsIHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMgdXNpbmcgYSBzeW50YXhoaWdobGlnaHRpbmcgZWRpdG9yIGluc2lkZSB5b3VyIGJyb3dzZXIuDQpJdCBjYW4gYm90aCByZXBsYWNlIGEgd3lzaXd5Zy1tb2R1bGUsIGFuZCBhY3Qgc3RhbmRhbG9uZSBmb3IgdGVtcGxhdGUvc3R5bGVzaGVldCBlZGl0aW5nIChvbmx5IHN1cHBvcnRlZCBpbiBDTVNtcyAxLjErKQ0KPGJyLz48YnIvPg0KPHN0cm9uZz5Ib3cgZG8gSSB1c2UgdGhpcyBtb2R1bGU/PC9zdHJvbmc+DQpZb3Ugc2ltcGx5IGluc3RhbGwgaXQsIGFuZCBjaG9vc2UgaXQgaW4geW91ciBhZG1pbiB1c2VyIHByZWZlcmVuY2VzLiBOb3RlLCB0aGF0IGlmIHlvdSB1c2UgQ01TbXMgMS4xIG9yIGFib3ZlIHlvdSBjYW4NCnNlbGVjdCBDb2RlQXJlYSBib3RoIGFzIGEgV1lTSVdZRyBhbmQgYXMgYSBzeW50YXggaGlnaGxpZ2h0aW5nIGVkaXRvci4nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My43MDgwNTEyMTAuMTMwOTI0MTY0Ni4xMzA5MjQxNjQ2LjEzMDkyNDE2NDYuMSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDkxMTk3NTMuMS4zMi51dG1jc3I9ZGV2LmNtc21hZGVzaW1wbGUub3JnfHV0bWNjbj0ocmVmZXJyYWwpfHV0bWNtZD1yZWZlcnJhbHx1dG1jY3Q9Lyc7CiRsYW5nWydxY2EnXSA9ICdQMC0xMzM3NTUyODE0LTEzMDIzNTYxMjg2NjcnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ro_RO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRvcnVsIENvZGVNaXJyb3IgY3UgZXZpZGVudGlhdG9yIGRlIHNpbnRheGEnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdNb2R1bHVsIENvZGVNaXJyb3IgYSBmb3N0IGluc3RhbGF0IGN1IHN1Y2Nlcyc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ0F2ZXRpIG5ldm9pZSBkZSBwZXJtaXNpdW5lYSAmIzAzOTslcyYjMDM5OyBwZW50cnUgYWNlYXN0YSBmdW5jdGllLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ1NldGFyaSc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYWx2YXJlIHNldGFyaSc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnU2V0YXJpbGUgYXUgZm9zdCBzYWx2YXRlJzsKJGxhbmdbJ2h0bWx0ZXN0J10gPSAndGVzdCBzaW50YXhhIEhUTUwnOwokbGFuZ1snY3NzdGVzdCddID0gJ3Rlc3Qgc2ludGF4YSBDU1MnOwokbGFuZ1sncGhwdGVzdCddID0gJ3Rlc3Qgc2ludGF4YSBQSFAnOwokbGFuZ1snanN0ZXN0J10gPSAndGVzdCBzaW50YXhhIEphdmFTY3JpcHQnOwokbGFuZ1snZXhhbXBsZXN5bnRheCddID0gJ1N5bnRheCB0byB0ZXN0IGN1JzsKJGxhbmdbJ2NoYW5nZSddID0gJ1NjaGltYmEnOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnQWZpc2FyZSBudW1lcmUgZGUgbGluaWUnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnU3RyYW5nZSBsaW5paWxlIGx1bmdpJzsKJGxhbmdbJ2F1dG9tYXRjaHBhcmVucyddID0gJ0F1dG9wb3RyaXZpcmUgcGFyYW50ZXplJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPkNlIGZhY2UgYWNlc3QgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KTW9kdWx1bCBDb2RlTWlycm9yIHZhIHBlcm1pdGUgc2EgZWRpdGF0aSBjb250aW51dCwgdGVtcGxhdGUtdXJpIHNpIHN0eWxlc2hlZXQtdXJpIGZvbG9zaW5kIHVuIGVkaXRvciBjdSBldmlkZW50aWF0b3IgZGUgc2ludGF4YSBkaW4gYnJvd3Nlci4NClBvYXRlIGlubG9jdWkgYXRhdCB1biBtb2R1bCB3eXNpd3lnLCBzaSBzYSBmdW5jdGlvbmV6ZSBkZSBzaW5lIHN0YXRhdG9yIHBlbnRydSBlZGl0YXJlIGRlIHRlbXBsYXRlL3N0eWxlc2hlZXQuDQo8YnIvPjxici8+DQo8c3Ryb25nPkN1bSBzZSBmb2xvc2VzZSBhY2VzdCBtb2R1bD88L3N0cm9uZz4NCkluc3RhbGF0aS1sLCBzaSBhbGVnZXRpLWwgaW4gcHJlZmVyaW50ZWxlIGRlIHV0aWxpemF0b3IgZGluIGFkbWluLic7CiRsYW5nWydxY2EnXSA9ICdQMC0xODM4MjE1MDQzLTEyODI4MDc1MzM5MzQnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjgyODA3OTcyLjEuMi51dG1jc3I9Z29vZ2xlfHV0bWNjbj0ob3JnYW5pYyl8dXRtY21kPW9yZ2FuaWN8dXRtY3RyPWNtc21zJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTE5MTg3MzgxNy4xMjgyODA3NTM0LjEyODI4MDc1MzQuMTI4MjgwNzUzNC4xJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4xMi45LjEyODI4MDc2MTUzNjgnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sv_SE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3Igc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0NvZGVNaXJyb3ItbW9kdWxlbiBpbnN0YWxsZXJhZGVzIHV0YW4gbiZhcmluZztncmEgcHJvYmxlbSc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJyYjMDM5O1lvdSBuZWVkIHRoZSAmIzAzOTslcyYjMDM5OyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdJbnN0JmF1bWw7bGxuaW5nYXInOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnU3BhcmEgaW5zdCZhdW1sO2xsbmluZ2FyJzsKJGxhbmdbJ3NldHRpbmdzc2F2ZWQnXSA9ICdJbnN0JmF1bWw7bGxuaW5nYXIgc3BhcmFkZXMnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIHN5bnRheCB0ZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1Mgc3ludGF4IHRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBzeW50YXggdGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IHN5bnRheCB0ZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YXggYXR0IHRlc3RhIG1lZCc7CiRsYW5nWydjaGFuZ2UnXSA9ICcmQXVtbDtuZHJhLi4uJzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1Zpc2EgcmFkbnVtbWVyJzsKJGxhbmdbJ3RleHR3cmFwcGluZyddID0gJ1dyYXAgbG9uZyBsaW5lcyc7CiRsYW5nWydoZWxwJ10gPSAnPHN0cm9uZz5XaGF0IGRvZXMgdGhpcyBtb2R1bGUgZG8/PC9zdHJvbmc+DQo8YnIvPg0KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLg0KSXQgY2FuIGJvdGggcmVwbGFjZSBhIHd5c2l3eWctbW9kdWxlLCBhbmQgYWN0IHN0YW5kYWxvbmUgZm9yIHRlbXBsYXRlL3N0eWxlc2hlZXQgZWRpdGluZyAob25seSBzdXBwb3J0ZWQgaW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPg0KWW91IHNpbXBseSBpbnN0YWxsIGl0LCBhbmQgY2hvb3NlIGl0IGluIHlvdXIgYWRtaW4gdXNlciBwcmVmZXJlbmNlcy4gTm90ZSwgdGhhdCBpZiB5b3UgdXNlIENNU21zIDEuMSBvciBhYm92ZSB5b3UgY2FuDQpzZWxlY3QgQ29kZUFyZWEgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTEyMzE4NzIzMjUtMTI2OTM1OTMyMTE5NSc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEyNjk3Nzc2MDMuMTI2OTM1OTM0Mi4xMjY5MzU5MzQyLjEyNjkzNTkzNDIuMSc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzLjEuMTAuMTI2OTM1OTM0Mic7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI2OTM1OTM0Mi4xLjEudXRtY3NyPWdvb2dsZXx1dG1jY249KG9yZ2FuaWMpfHV0bWNtZD1vcmdhbmljfHV0bWN0cj1jbXNtcyc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwxKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidXNlYXV0b2NvbXBsZXRlIiwxKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwwKQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAvL1JlbW92ZSBvbGQgc3BlY2lmaWsgcGVybWlzc2lvbgogICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCJtb2RpZnllZGl0YXJlYXNldHRpbmdzIik7Cj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT4yLjIuMCAtIFVwZGF0ZWQgdG8gQ00gMi4xNSwgYWRkZWQgb3B0aW9uYWwgZnVsbHNjcmVlbiBtb2RlPC9saT4KICA8bGk+Mi4xLjIgLSBVcGRhdGVkIHRvIENNIDIuMTIsIGNsZWFuZXIgd2F5IG9mIHNhdmluZyBlZGl0b3IgY29udGVudCB0byB0ZXh0YXJlYTwvbGk+CiAgPGxpPjIuMS4wIC0gVXBkYXRlZCB0byBDTSAyLjEuMSwgb25jZSBhZ2FpbiBjaGFuZ2UgdGVzdG1vZGUuLi4gPC9saT4KICA8bGk+Mi4wLjEgLSBVcGRhdGVkIHRvIENNIDIuMC4xPC9saT4KICA8bGk+Mi4wIC0gVXBkYXRlZCB0byBDTSAyLjAgYW5kIHJld29ya2VkIGp1c3QgYWJvdXQgZXZlcnl0aGluZyB0byBtYWtlIHRoaXMgd29yazwvbGk+CiAgPGxpPjAuMS45IC0gVXBkYXRlZCB0byBDTSAwLjkzPC9saT4KICA8bGk+MC4xLjggLSBVcGRhdGVkIHRvIENNIDAuOSwgYWRkZWQgb3B0aW9uIG9uIGhvdyB0byBoYW5kbGUgVEFCPC9saT4KICA8bGk+MC4xLjcgLSBVcGRhdGVkIHRvIENNIDAuODA8L2xpPgogIDxsaT4wLjEuNiAtIFVwZGF0ZWQgdG8gQ00gMC43MCwgQWRkZWQgb3B0aW9uIHRvIG1hdGNoIHBhcmVudGhlc2lzPC9saT4KICA8bGk+MC4xLjUgLSBVcGRhdGVkIHRvIENNIDAuNjYsIHJlbW92ZWQgYSBzdHJhbmdlIFxuIGNoYXIgZnJvbSBoZWFkZXJvdXRwdXQsIG1hZGUgdGFiYmluZyB3b3JrPC9saT4KICA8bGk+MC4xLjQgLSBGaXhlZCBDUFUgaG9nZ2luZyBwcm9ibGVtcyBieSByZXdyaXRpbmcgdGVzdGFyZWEtY29kZTwvbGk+CiAgPGxpPjAuMS4zIC0gVXBkYXRlZCB0byBDTSAwLjY1LCBhZGRlZCBvcHRpb24gdG8gdG9nZ2xlIHdvcmR3cmFwPC9saT4KICA8bGk+MC4xLjIgLSBVcGRhdGVkIHRvIENNIDAuNjM8L2xpPgogIDxsaT4wLjEuMSAtIFVwZGF0ZWQgdG8gQ00gMC42MiwgZml4ZWQgZXhhbXBsZXMgYW5kIHByb2JhYmx5IGZ1bmN0aW9uYWxpdHkgYXMgd2VsbDwvbGk+CiAgPGxpPjAuMS4wIC0gSW5pdGlhbCByZWxlYXNlIDwvbGk+CjwvdWw+]]></data>
	</file>
	<file>
	  <filename>/templates/codemirror2area.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjazsiID4KPHRleHRhcmVhIGlkPSJ7JHRleHRhcmVhaWR9IiBuYW1lPSJ7JHRleHRhcmVhbmFtZX0iPnskY29udGVudH08L3RleHRhcmVhPgo8L2Rpdj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICB2YXIgeyR0ZXh0YXJlYWlkfSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd7JHRleHRhcmVhaWR9Jyk7CiAgdmFyIGNvZGVtaXJyb3JlZGl0b3J7JGlkfSA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHskdGV4dGFyZWFpZH0sIHtsaXRlcmFsfXt7L2xpdGVyYWx9CgogICAgbW9kZSA6ICd7JG1vZGV9JywKICAgIGluZGVudFVuaXQgOiAyLAogICAgbGluZU51bWJlcnM6IHskbGluZW51bWJlcnN9LAogICAgdGFiTW9kZSA6ICd7JHRhYmhhbmRsaW5nfScsCiAgICB0aGVtZSA6ICd7JHRoZW1lfScsCiAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAge2lmICRhbGxvd2Z1bGxzY3JlZW49PScxJ30KICB7bGl0ZXJhbH0KICAsb25LZXlFdmVudDogZnVuY3Rpb24oaSwgZSkgewoKICAgICAgICAgICAgaWYgKChlLmtleUNvZGUgPT0gMTIyIHx8IGUua2V5Q29kZSA9PSAyNykgJiYgZS50eXBlID09ICdrZXlkb3duJykgewogICAgICAgICAgICAgIGUuc3RvcCgpOwogICAgICAgICAgICAgIHJldHVybiB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZygpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgey9saXRlcmFsfQogIHsvaWZ9CgogIHtsaXRlcmFsfX0pO3svbGl0ZXJhbH0KPC9zY3JpcHQ+Cgo=]]></data>
	</file>
	<file>
	  <filename>/templates/settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHNob3dsaW5lbnVtYmVyc3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc2hvd2xpbmVudW1iZXJzaW5wdXR9PC9wPgoJPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRhbGxvd2Z1bGxzY3JlZW50ZXh0fTwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGFsbG93ZnVsbHNjcmVlbmlucHV0fTwvcD4KCTwvZGl2Pgp7KjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHR3cmFwcGluZ3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGV4dHdyYXBwaW5naW5wdXR9PC9wPgoJPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskYXV0b21hdGNocGFyZW5zdGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRhdXRvbWF0Y2hwYXJlbnNpbnB1dH08L3A+Cgk8L2Rpdj4KKn0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0YWJoYW5kbGluZ3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGFiaGFuZGxpbmdpbnB1dH08L3A+Cgk8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGNzc2FkZGl0aW9uc3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskY3NzYWRkaXRpb25zaW5wdXR9PC9wPgoJPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aGVtZXRleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGhlbWVpbnB1dH08L3A+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
</module>
