<?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.1</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[PHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLjxoMz5QYXJhbWV0cmU8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0cmV0IGFuZ2l2ZXIgaHZpbGtldCBzcHJvZyBkZXIgc2thbCBicnVnZXMgdGlsIHZpc25pbmcgZm9yIGJlcyZvc2xhc2g7Z2VuZGUuIElra2UgYWxsZSBtb2R1bGVyIHVuZGVyc3Qmb3NsYXNoO3R0ZXIgZWxsZXIgYmVoJm9zbGFzaDt2ZXIgZGV0dGUuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+TGF2ZXQgYWY6IE1vcnRlbiBQb3Vsc2VuICZsdDsmbHQ7bW9ydGVuQHBvdWxzZW4ub3JnJmd0OyZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAyLjIuMTxiciAvPjxiciAvPkhpc3RvcmlrIG92ZXIgJmFlbGlnO25kcmluZ2VyOjxiciAvPjx1bD4KICA8bGk+Mi4yLjEgLSBVcGRhdGVkIHRvIENNIDIuMi4wLCBhZGRlZCB0YWItd2lkdGggc2V0dGluZzwvbGk+CiAgPGxpPjIuMi4wIC0gVXBkYXRlZCB0byBDTSAyLjE1LCBhZGRlZCBvcHRpb25hbCBmdWxsc2NyZWVuIG1vZGU8L2xpPgogIDxsaT4yLjEuMiAtIFVwZGF0ZWQgdG8gQ00gMi4xMiwgY2xlYW5lciB3YXkgb2Ygc2F2aW5nIGVkaXRvciBjb250ZW50IHRvIHRleHRhcmVhPC9saT4KICA8bGk+Mi4xLjAgLSBVcGRhdGVkIHRvIENNIDIuMS4xLCBvbmNlIGFnYWluIGNoYW5nZSB0ZXN0bW9kZS4uLiA8L2xpPgogIDxsaT4yLjAuMSAtIFVwZGF0ZWQgdG8gQ00gMi4wLjE8L2xpPgogIDxsaT4yLjAgLSBVcGRhdGVkIHRvIENNIDIuMCBhbmQgcmV3b3JrZWQganVzdCBhYm91dCBldmVyeXRoaW5nIHRvIG1ha2UgdGhpcyB3b3JrPC9saT4KICA8bGk+MC4xLjkgLSBVcGRhdGVkIHRvIENNIDAuOTM8L2xpPgogIDxsaT4wLjEuOCAtIFVwZGF0ZWQgdG8gQ00gMC45LCBhZGRlZCBvcHRpb24gb24gaG93IHRvIGhhbmRsZSBUQUI8L2xpPgogIDxsaT4wLjEuNyAtIFVwZGF0ZWQgdG8gQ00gMC44MDwvbGk+CiAgPGxpPjAuMS42IC0gVXBkYXRlZCB0byBDTSAwLjcwLCBBZGRlZCBvcHRpb24gdG8gbWF0Y2ggcGFyZW50aGVzaXM8L2xpPgogIDxsaT4wLjEuNSAtIFVwZGF0ZWQgdG8gQ00gMC42NiwgcmVtb3ZlZCBhIHN0cmFuZ2UgXG4gY2hhciBmcm9tIGhlYWRlcm91dHB1dCwgbWFkZSB0YWJiaW5nIHdvcms8L2xpPgogIDxsaT4wLjEuNCAtIEZpeGVkIENQVSBob2dnaW5nIHByb2JsZW1zIGJ5IHJld3JpdGluZyB0ZXN0YXJlYS1jb2RlPC9saT4KICA8bGk+MC4xLjMgLSBVcGRhdGVkIHRvIENNIDAuNjUsIGFkZGVkIG9wdGlvbiB0byB0b2dnbGUgd29yZHdyYXA8L2xpPgogIDxsaT4wLjEuMiAtIFVwZGF0ZWQgdG8gQ00gMC42MzwvbGk+CiAgPGxpPjAuMS4xIC0gVXBkYXRlZCB0byBDTSAwLjYyLCBmaXhlZCBleGFtcGxlcyBhbmQgcHJvYmFibHkgZnVuY3Rpb25hbGl0eSBhcyB3ZWxsPC9saT4KICA8bGk+MC4xLjAgLSBJbml0aWFsIHJlbGVhc2UgPC9saT4KPC91bD48YnIgLz4=]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbImV4YW1wbGVzeW50YXgiXSkpIHsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsJHBhcmFtc1siZXhhbXBsZXN5bnRheCJdKTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigic2V0dGluZ3MiLCR0aGlzLT5MYW5nKCJzZXR0aW5nc3RhYiIpKTsKLyplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImh0bWwiLCR0aGlzLT5MYW5nKCJodG1sdGVzdCIpKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCJwaHAiLCR0aGlzLT5MYW5nKCJwaHB0ZXN0IikpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImNzcyIsJHRoaXMtPkxhbmcoImNzc3Rlc3QiKSk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigianMiLCR0aGlzLT5MYW5nKCJqc3Rlc3QiKSk7CiovCmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgoKZWNobyAkdGhpcy0+U3RhcnRUYWIoInNldHRpbmdzIik7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlc2V0dGluZ3MnLCAkcmV0dXJuaWQpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc3RleHQnLCAkdGhpcy0+TGFuZygic2hvd2xpbmVudW1iZXJzIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCJzaG93bGluZW51bWJlcnMiLDEsJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSkpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVudGV4dCcsICR0aGlzLT5MYW5nKCJhbGxvd2Z1bGxzY3JlZW4iKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVuaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImFsbG93ZnVsbHNjcmVlbiIsMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYWxsb3dmdWxsc2NyZWVuIiwxKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnN0ZXh0JywgJHRoaXMtPkxhbmcoImNzc2FkZGl0aW9ucyIpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnNpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5fZGVmYXVsdGNzc2FkZGl0aW9ucyksIjYwIikpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJzaXpldGV4dCcsICR0aGlzLT5MYW5nKCJ0YWJzaXplIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYnNpemVpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJ0YWJzaXplIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGFic2l6ZSIsMiksIjgiKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RoZW1ldGV4dCcsICR0aGlzLT5MYW5nKCJ0aGVtZSIpKTsKJHRoZW1lcz1hcnJheSgKICAnZGVmYXVsdCc9PiJkZWZhdWx0IiwKICAnY29iYWx0Jz0+J2NvYmFsdCcsCiAgJ2VjbGlwc2UnPT4nZWNsaXBzZScsCiAgImVsZWdhbnQiPT4iZWxlZ2FudCIsCiAgJ21vbm9rYWknPT4nbW9ub2thaScsCiAgIm5lYXQiPT4ibmVhdCIsCiAgIm5pZ2h0Ij0+Im5pZ2h0IiwKICAicnVieWJsdWUiPT4icnVieWJsdWUiCik7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGhlbWVpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwidGhlbWUiLCR0aGVtZXMsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoInRoZW1lIiwiZGVmYXVsdCIpKSk7CgovKiR0aGlzLT5zbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5ndGV4dCcsICR0aGlzLT5MYW5nKCJ0ZXh0d3JhcHBpbmciKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5naW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsInRleHR3cmFwcGluZyIsMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGV4dHdyYXBwaW5nIiwxKSkpOwoqLwovKiR0aGlzLT5zbWFydHktPmFzc2lnbignYXV0b21hdGNocGFyZW5zdGV4dCcsICR0aGlzLT5MYW5nKCJhdXRvbWF0Y2hwYXJlbnMiKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYXV0b21hdGNocGFyZW5zaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImF1dG9tYXRjaHBhcmVucyIsIjEiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJhdXRvbWF0Y2hwYXJlbnMiLCIwIikpKTsKKi8KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJoYW5kbGluZ3RleHQnLCAkdGhpcy0+TGFuZygidGFiaGFuZGxpbmciKSk7CiR0YWJmdW5jdGlvbnM9YXJyYXkoCiAgJHRoaXMtPkxhbmcoInRhYmRlZmF1bHQiKT0+ImRlZmF1bHQiLAogICR0aGlzLT5MYW5nKCJ0YWJpbmRlbnQiKT0+ImluZGVudCIsCiAgJHRoaXMtPkxhbmcoInRhYnNwYWNlcyIpPT4iY2xhc3NpYyIsCiAgJHRoaXMtPkxhbmcoInRhYnNoaWZ0Iik9PiJzaGlmdCIKKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJoYW5kbGluZ2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJ0YWJoYW5kbGluZyIsJHRhYmZ1bmN0aW9ucywtMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGFiaGFuZGxpbmciLCJpbmRlbnQiKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywgJHRoaXMtPkxhbmcoJ3NhdmVzZXR0aW5ncycpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3NldHRpbmdzLnRwbCcpOwoKZWNobyAkdGhpcy0+RW5kVGFiKCk7Ci8qCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJodG1sIik7CgokY29udGVudD0iCjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPlRlc3RpbmcgaHRtbC1zeW50YXg8L3RpdGxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIEFuZCBkb2luZyBhYnNvbHV0ZWx5IG5vdGhpbmcgZWxzZQogIDwvYm9keT4KPC9odG1sPgoiOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKTsKZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRjb250ZW50LCJ0ZXN0aHRtbCIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCJodG1sIik7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCmVjaG8gJHRoaXMtPkVuZFRhYigpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWIoInBocCIpOwokY29udGVudD0iCjw/cGhwCiAgZnVuY3Rpb24gdGVzdFBIUChcJHNvbWVwYXJhbSkgewogIGVjaG8gJ0RvIHlvdSB0aGluayB0aGlzIGxvb2tzIG5pY2U/JzsKfQo/PgoiOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKTsKZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRjb250ZW50LCJ0ZXN0cGhwIiwnJywnJywnJywnJywnJywnJywnQ29kZU1pcnJvcicsInBocCIpOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgplY2hvICR0aGlzLT5FbmRUYWIoKTsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJjc3MiKTsKJGNvbnRlbnQ9IgoudGVzdGNzcyB7CiAgZm9udC13ZWlnaHQ6Ym9sZDsKICBoZWlnaHQ6IDEwcHg7Cn0KIjsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwiZGVmYXVsdGFkbWluIik7CmVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkY29udGVudCwidGVzdGNzcyIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCJjc3MiKTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKCgplY2hvICR0aGlzLT5TdGFydFRhYigianMiKTsKICAgICRjb250ZW50PScKZnVuY3Rpb24gbXlqc2Z1bmN0aW9uKHBhcmFtcykgewogIHZhciBtc2cgPSAiVGhpcyBqYXZhc2NyaXB0IGlzIGZhbnRhc3RpYyEiCiAgZm9yICh2YXIgaT0wOyBpPDk5OTk7IGkrKykgewogICAgYWxlcnQobXNnKTsKICAgIC8qVGhpcyBtdXN0IGJlIHRoZSBtb3N0IGFubm95aW5nIGZ1bmN0aW9uIGV2ZXIhKi8KIC8qIH0KICByZXR1cm4gdHJ1ZQp9Cic7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsImRlZmF1bHRhZG1pbiIpOwplY2hvICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGNvbnRlbnQsInRlc3RqcyIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCJqcyIpOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CmVjaG8gJHRoaXMtPkVuZFRhYigpOwoqLwoKZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwoKJGNvbnRlbnQ9IiI7CnN3aXRjaCAoJHRoaXMtPkdldFByZWZlcmVuY2UoImV4YW1wbGVzeW50YXgiLCJodG1sIikpIHsKICBjYXNlICJodG1sIiA6IHsKICAgICRjb250ZW50PSIKPGh0bWw+CiAgPGhlYWQ+CiAgICA8dGl0bGU+VGVzdGluZyBodG1sLXN5bnRheDwvdGl0bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgQW5kIGRvaW5nIGFic29sdXRlbHkgbm90aGluZyBlbHNlCiAgPC9ib2R5Pgo8L2h0bWw+CiI7CiAgYnJlYWs7CiAgfQogIGNhc2UgImNzcyIgOiB7CiAgICAkY29udGVudD0iCi50ZXN0Y3NzIHsKICBmb250LXdlaWdodDpib2xkOwogIGhlaWdodDogMTBweDsKfQoiOwogIGJyZWFrOwogIH0KICBjYXNlICJwaHAiIDogewogICAgJGNvbnRlbnQ9Igo8P3BocAogIGZ1bmN0aW9uIHRlc3RQSFAoXCRzb21lcGFyYW0pIHsKICAgIGVjaG8gJ0RvIHlvdSB0aGluayB0aGlzIGxvb2tzIG5pY2U/JzsKICB9Cj8+CiI7CiAgYnJlYWs7CiAgfQogIGNhc2UgImpzIiA6IHsKICAgICRjb250ZW50PScKZnVuY3Rpb24gbXlqc2Z1bnRpb24ocGFyYW1zKSB7CiAgdmFyIG1zZyA9ICJUaGlzIGphdmFzY3JpcHQgaXMgZmFudGFzdGljISIKICBmb3IgKHZhciBpPTA7IGk8OTk5OTsgaSsrKSB7CiAgICBhbGVydChtc2cpOwoKICB9CiAgcmV0dXJuIHRydWUKfQonOwogIGJyZWFrOwogIH0KfQoKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwiZGVmYXVsdGFkbWluIik7CmVjaG8gJHRoaXMtPkxhbmcoImV4YW1wbGVzeW50YXgiKS4iOiAiOwokc3ludGF4ZXM9YXJyYXkoJHRoaXMtPkxhbmcoImh0bWx0ZXN0Iik9PiJodG1sIiwkdGhpcy0+TGFuZygiY3NzdGVzdCIpPT4iY3NzIiwkdGhpcy0+TGFuZygicGhwdGVzdCIpPT4icGhwIiwkdGhpcy0+TGFuZygianN0ZXN0Iik9PiJqcyIpOwplY2hvICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwiZXhhbXBsZXN5bnRheCIsJHN5bnRheGVzLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJleGFtcGxlc3ludGF4IiwiaHRtbCIpLCJvbmNoYW5nZT0ndGhpcy5mb3JtLnN1Ym1pdCgpJyIpOwovL2VjaG8gJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwiZXhhbXBsZXN1Ym1pdCIsJHRoaXMtPkxhbmcoImNoYW5nZSIpKTsKZWNobyAiPGJyLz4iOwplY2hvICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGNvbnRlbnQsInRlc3RhcmVhMSIsJycsJycsJycsJycsJycsJycsJ0NvZGVNaXJyb3InLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJleGFtcGxlc3ludGF4IiwiaHRtbCIpKTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYoaXNzZXQoJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pKSAKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwgJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pOwplbHNlCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsICcwJyk7CgppZihpc3NldCgkcGFyYW1zWyJhbGxvd2Z1bGxzY3JlZW4iXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsICRwYXJhbXNbImFsbG93ZnVsbHNjcmVlbiJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhbGxvd2Z1bGxzY3JlZW4iLCAnMCcpOwoKLyppZihpc3NldCgkcGFyYW1zWyJ0ZXh0d3JhcHBpbmciXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRleHR3cmFwcGluZyIsICRwYXJhbXNbInRleHR3cmFwcGluZyJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCAnMCcpOyovCiAgCi8qaWYoaXNzZXQoJHBhcmFtc1siYXV0b21hdGNocGFyZW5zIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhdXRvbWF0Y2hwYXJlbnMiLCAkcGFyYW1zWyJhdXRvbWF0Y2hwYXJlbnMiXSk7CmVsc2UKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwgJzAnKTsqLwoKaWYoaXNzZXQoJHBhcmFtc1sidGFiaGFuZGxpbmciXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwgJHBhcmFtc1sidGFiaGFuZGxpbmciXSk7CgppZihpc3NldCgkcGFyYW1zWyJ0YWJzaXplIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0YWJzaXplIiwgJHBhcmFtc1sidGFic2l6ZSJdKTsKCmlmKGlzc2V0KCRwYXJhbXNbImNzc2FkZGl0aW9ucyJdKSkKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiY3NzYWRkaXRpb25zIiwgJHBhcmFtc1siY3NzYWRkaXRpb25zIl0pOwoKaWYoaXNzZXQoJHBhcmFtc1sidGhlbWUiXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRoZW1lIiwgJHBhcmFtc1sidGhlbWUiXSk7CgoKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCxhcnJheSgibW9kdWxlX21lc3NhZ2UiPT4kdGhpcy0+TGFuZygic2V0dGluZ3NzYXZlZCIpLCJ0YWIiPT4ic2V0dGluZ3MiKSk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/CodeMirror.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiNDTVMgLSBDTVMgTWFkZSBTaW1wbGUNCiMoYykyMDA1LTA2IGJ5IE1vcnRlbiBQb3Vsc2VuIChtb3J0ZW5AcG91bHNlbi5vcmcpDQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMNCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KI2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KI1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KI0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiNhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KI0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCg0KDQpjbGFzcyBDb2RlTWlycm9yIGV4dGVuZHMgQ01TTW9kdWxlIHsNCgl2YXIgJG5vZWRpdG9ycz0wOw0KCXZhciAkaGVhZGVyaW5mb3NlbnQ9ZmFsc2U7DQogIHZhciAkX2h0bWxhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfamF2YXNjcmlwdGFjdGl2ZSA9IGZhbHNlOw0KICB2YXIgJF9jc3NhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfcGhwYWN0aXZlID0gZmFsc2U7DQogIHZhciAkX2RlZmF1bHRjc3NhZGRpdGlvbnMgPSAiLkNvZGVNaXJyb3Ige2xpbmUtaGVpZ2h0OiAxLjNlbTsgZm9udC1zaXplOjExcHh9IjsNCg0KDQoJZnVuY3Rpb24gR2V0TmFtZSgpIHsNCgkJcmV0dXJuICdDb2RlTWlycm9yJzsNCgl9DQoNCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCWZ1bmN0aW9uIEhhc0FkbWluKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglmdW5jdGlvbiBHZXRIZWxwKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoImhlbHAiKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBdXRob3IoKSB7DQoJCXJldHVybiAnTW9ydGVuIFBvdWxzZW4nOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgew0KCQlyZXR1cm4gJyZsdDttb3J0ZW5AcG91bHNlbi5vcmcmZ3Q7JzsNCgl9DQoNCglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7DQoJCXJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjaGFuZ2Vsb2cudHBsJyk7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsNCgkJcmV0dXJuICcyLjIuMSc7DQoJfQ0KCQ0KCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgew0KCQlyZXR1cm4gIjEuOSI7DQoJfQ0KDQogIGZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksICRwYXJhbXM9YXJyYXkoKSkgew0KICAgIGlmICgkY2FwYWJpbGl0eT09Ind5c2l3eWciKSByZXR1cm4gdHJ1ZTsNCiAgICBpZiAoJGNhcGFiaWxpdHk9PSJzeW50YXhoaWdobGlnaHRpbmciKSByZXR1cm4gdHJ1ZTsNCiAgICByZXR1cm4gZmFsc2U7DQogIH0NCg0KCWZ1bmN0aW9uIElzV1lTSVdZRygpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gSXNTeW50YXhIaWdobGlnaHRlcigpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgew0KCQlyZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKTsNCgl9DQoNCglmdW5jdGlvbiBTeW50YXhQYWdlRm9ybVN1Ym1pdCgpIHsNCgkJcmV0dXJuICJmb3IgKHZhciBjbnRFZGl0b3IgPSAwOyBjbnRFZGl0b3IgPCBudW1Db2RlTWlycm9yQXJlYXM7IGNudEVkaXRvcisrKSB7XG4iDQoJCS4gIlx0XHR2YXIgZWRpdG9yID0gZXZhbCgnY29kZW1pcnJvcmVkaXRvcicgKyBjbnRFZGl0b3IpO1xuIg0KICAgIC4iXHRcdGVkaXRvci5zYXZlKCkiDQogICAgLyouICJcdFx0dmFyIHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvZGVtaXJyb3JhcmVhJyArIGNudEVkaXRvcik7XG4iDQogICAgICAvLy4iYWxlcnQoZWRpdG9yLmdldENvZGUoKSk7Ig0KCQkvLy4gIlx0XHRlZGl0b3IudGV4dGFyZWEudmFsdWUgPSBlZGl0b3IuZ2V0Q29kZSgpO1xuIg0KICAgICAgLiAiXHRcdHRleHRhcmVhLnZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7XG4iKi8NCgkJLiAiXHR9XG4iOw0KCX0NCgkNCglmdW5jdGlvbiBXWVNJV1lHUGFnZUZvcm1TdWJtaXQoKSB7DQoJCXJldHVybiAkdGhpcy0+U3ludGF4UGFnZUZvcm1TdWJtaXQoKTsNCgl9DQoNCglmdW5jdGlvbiBXWVNJV1lHVGV4dEFyZWEoJG5hbWU9J3RleHRhcmVhJywkY29sdW1ucz0nODAnLCRyb3dzPScxNScsJGVuY29kaW5nPScnLCRjb250ZW50PScnLCRzdHlsZXNoZWV0PScnLCRhZGR0ZXh0PScnKSB7DQoJCSR0aGlzLT53eXNpd3lnYWN0aXZlPXRydWU7DQoJCXJldHVybiAkdGhpcy0+U3ludGF4VGV4dGFyZWEoJG5hbWUsImh0bWwiLCRjb2x1bW5zLCRyb3dzLCRlbmNvZGluZywkY29udGVudCk7DQoJfQ0KDQoJZnVuY3Rpb24gU3ludGF4VGV4dGFyZWEoJG5hbWU9J3RleHRhcmVhJywkc3ludGF4PSJodG1sIiwkY29sdW1ucz0nODAnLCRyb3dzPScxNScsJGVuY29kaW5nPScnLCRjb250ZW50PScnLCRzdHlsZXNoZWV0PScnLCRhZGR0ZXh0PScnKSB7DQoJCS8vJHRleHRhcmVhPSIiOw0KDQoJCSR0aGlzLT5zeW50YXhhY3RpdmU9dHJ1ZTsJDQoJCS8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ1c2VhdXRvY29tcGxldGUiLCIxIik9PSIwIikgJGNsYXNzLj0iIGF1dG9jb21wbGV0ZS1vZmYiOw0KCQlpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsIjEiKT09IjAiKSAkY2xhc3MuPSIgbGluZW51bWJlcnMtb2ZmIjsNCgkJKi8NCiAgICAgIC8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzaG93dG9nZ2xlc3ludGF4IiwiMSIpPT0iMSIpIHsNCiAgICAgDQoJCQkkdGV4dGFyZWEuPSI8YnIvPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgY2hlY2tlZD0nMScgb25jbGljaz0nY29kZXByZXNzIi4kdGhpcy0+bm9lZGl0b3JzLiIudG9nZ2xlRWRpdG9yKCk7JyBjaGVja2VkPSdjaGVja2VkJyBpZD0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+PGxhYmVsIGZvcj0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+Ii4kdGhpcy0+TGFuZygidG9nZ2xlc3ludGF4IikuIjwvbGFiZWw+IjsNCgkJfSovDQogICAgJHNtYXJ0eT0kdGhpcy0+c21hcnR5Ow0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwiMSIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdsaW5lbnVtYmVycycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbignbGluZW51bWJlcnMnLCAiZmFsc2UiKTsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCIxIik9PSIxIil7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ3RleHR3cmFwcGluZycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5nJywgImZhbHNlIik7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwiMCIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnMnLCAidHJ1ZSIpOw0KICAgIH0gZWxzZSB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ2F1dG9tYXRjaHBhcmVucycsICJmYWxzZSIpOw0KICAgIH0NCg0KICAgICR0aGVtZT0kdGhpcy0+R2V0UHJlZmVyZW5jZSgidGhlbWUiLCJkZWZhdWx0Iik7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0aGVtZScsICR0aGVtZSk7DQogICAgJHRhYnNpemU9JHRoaXMtPkdldFByZWZlcmVuY2UoInRhYnNpemUiLCIyIik7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0YWJzaXplJywgJHRhYnNpemUpOw0KDQoNCiAgICAvL2xpbmVOdW1iZXJzOiB0cnVlLA0KICAgIC8vJGNvbmZpZz0kdGhpcy0+R2V0Q29uZmlnKCk7DQogICAgJGNvbmZpZz1jbXNtcygpLT5HZXRDb25maWcoKTsNCg0KICAgICRzbWFydHktPmFzc2lnbigndGV4dGFyZWFpZCcsICJjb2RlbWlycm9yYXJlYSIuJHRoaXMtPm5vZWRpdG9ycyk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0ZXh0YXJlYW5hbWUnLCAkbmFtZSk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCdjb250ZW50JywgJGNvbnRlbnQpOw0KICAgICRzbWFydHktPmFzc2lnbignaWQnLCAkdGhpcy0+bm9lZGl0b3JzKTsNCiAgICAvLyRwYXJzZXJmaWxlPSIiOyAkY3NzZmlsZT0iIjsNCiAgICAvKiRjbWRpcj0kY29uZmlnWyJyb290X3VybCJdLicvbW9kdWxlcy9Db2RlTWlycm9yL2NvZGVtaXJyb3InOw0KICAgIHN3aXRjaCgkc3ludGF4KSB7DQogICAgICANCiAgICAgIGNhc2UgImh0bWwiIDogDQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2V4bWwuanMiJzsgDQogICAgICAgICRjc3NmaWxlPSciJy4kY21kaXIuJy9tb2RlL3htbC94bWwuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiY3NzIiA6DQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2Vjc3MuanMiJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9jc3MuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiamF2YXNjcmlwdCIgOg0KICAgICAgY2FzZSAianMiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyJdJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiJzsNCiAgICAgICAgYnJlYWs7DQogICAgICBjYXNlICJwaHAiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sicGFyc2V4bWwuanMiLCAicGFyc2Vjc3MuanMiLCAidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyIsICJwYXJzZWh0bWxtaXhlZC5qcyIsIi4uL2NvbnRyaWIvcGhwL2pzL3Rva2VuaXplcGhwLmpzIiwgIi4uL2NvbnRyaWIvcGhwL2pzL3BhcnNlcGhwLmpzIiwgICAgICAgICAgICAgICAgICAgICAiLi4vY29udHJpYi9waHAvanMvcGFyc2VwaHBodG1sbWl4ZWQuanMiXSc7DQogICAgICAgICRjc3NmaWxlPSdbIicuJGNtZGlyLicvY3NzL3htbGNvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9jc3Njb2xvcnMuY3NzIiwiJy4kY21kaXIuJy9jb250cmliL3BocC9jc3MvcGhwY29sb3JzLmNzcyJdJzsNCiAgICAgICAgYnJlYWs7DQogICAgfSovDQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhcnNlcmZpbGUnLCAkcGFyc2VyZmlsZSk7DQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Nzc2ZpbGUnLCAkY3NzZmlsZSk7DQoNCiAgICAkc21hcnR5LT5hc3NpZ24oJ3RhYmhhbmRsaW5nJywgJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwiaW5kZW50IikpOw0KICAgICRzbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVuJywgJHRoaXMtPkdldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsIjAiKSk7DQogICAgDQogICAgJHNtYXJ0eS0+YXNzaWduKCdyb290X3VybCcsICRjb25maWdbInJvb3RfdXJsIl0pOw0KDQogICAgc3dpdGNoICgkc3ludGF4KSB7DQogICAgICBjYXNlICJodG1sIiA6ICRzbWFydHktPmFzc2lnbignbW9kZScsICJ0ZXh0L2h0bWwiKTsgJHRoaXMtPl9odG1sYWN0aXZlPXRydWU7IGJyZWFrOw0KICAgICAgY2FzZSAianMiOg0KICAgICAgY2FzZSAiamF2YXNjcmlwdCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAiamF2YXNjcmlwdCIpOyR0aGlzLT5famF2YXNjcmlwdGFjdGl2ZT10cnVlOyAgYnJlYWs7DQogICAgICBjYXNlICJjc3MiIDogJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywgImNzcyIpOyAkdGhpcy0+X2Nzc2FjdGl2ZT10cnVlOyBicmVhazsNCiAgICAgIGNhc2UgInBocCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAicGhwIik7ICR0aGlzLT5fcGhwYWN0aXZlPXRydWU7IGJyZWFrOw0KICAgIH0NCg0KDQogICAgJHRleHRhcmVhPSR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2NvZGVtaXJyb3IyYXJlYS50cGwnKTsNCg0KCQkkdGhpcy0+bm9lZGl0b3JzKys7DQoNCgkJcmV0dXJuICR0ZXh0YXJlYTsNCgl9DQoNCglmdW5jdGlvbiBXWVNJV1lHR2VuZXJhdGVIZWFkZXIoJGh0bWxyZXN1bHQ9JycpIHsNCgkJcmV0dXJuICR0aGlzLT5TeW50YXhHZW5lcmF0ZUhlYWRlcigpOw0KCX0NCg0KCWZ1bmN0aW9uIFN5bnRheEdlbmVyYXRlSGVhZGVyKCRodG1scmVzdWx0PScnKSB7DQoJCWlmICgkdGhpcy0+aGVhZGVyaW5mb3NlbnQpIHJldHVybiAiIjsNCgkJaWYgKCR0aGlzLT5ub2VkaXRvcnM9PTApIHJldHVybiAnJzsNCgkJLy8kR0xPQkFMU1siY29uZmlnIl1bInJvb3RfcGF0aCJdLg0KICAgICRjb25maWc9Y21zbXMoKS0+R2V0Q29uZmlnKCk7DQogICAgJGFscmVhZHlpbj1hcnJheSgpOw0KDQogICAgJHRoZW1lPSR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0aGVtZSIsImRlZmF1bHQiKTsNCg0KCQkkc2NyaXB0cGF0aD0kY29uZmlnWyJyb290X3VybCJdLiIvbW9kdWxlcy9Db2RlTWlycm9yL2NvZGVtaXJyb3IyIjsNCgkJJGhlYWRlcj0iIjsNCiAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL2xpYi9jb2RlbWlycm9yLmNzcyIvPic7DQoJCSRoZWFkZXIuPScNCgkgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0Pic7DQogICAgaWYgKCR0aGVtZSE9ImRlZmF1bHQiKSB7DQogICAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL3RoZW1lLycuJHRoZW1lLicuY3NzIi8+JzsNCiAgICAgIC8qJGhlYWRlci49Jw0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy90aGVtZS9kZWZhdWx0LmNzcyIvPic7Ki8NCiAgICB9DQogICAgaWYgKCR0aGlzLT5faHRtbGFjdGl2ZSkgew0KDQogICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRhbHJlYWR5aW5bXT0iY3NzLmpzIjsNCiAgICAgICRoZWFkZXIuPScNCiAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109ImphdmFzY3JpcHQuanMiOw0KICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109InhtbC5qcyI7DQogICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRhbHJlYWR5aW5bXT0iaHRtbG1peGVkLmpzIjsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5famF2YXNjcmlwdGFjdGl2ZSkgew0KICAgICAgaWYgKCFpbl9hcnJheSgiamF2YXNjcmlwdC5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJqYXZhc2NyaXB0LmpzIjsNCiAgICAgIH0NCiAgICAgICAgICAgIA0KDQogICAgfQ0KICAgIGlmICgkdGhpcy0+X2Nzc2FjdGl2ZSkgew0KICAgICAgaWYgKCFpbl9hcnJheSgiY3NzLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJjc3MuanMiOw0KICAgICAgfQ0KDQogICAgfQ0KICAgIGlmICgkdGhpcy0+X3BocGFjdGl2ZSkgew0KICAgICAgaWYgKCFpbl9hcnJheSgiY3NzLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jc3MvY3NzLmpzIj48L3NjcmlwdD4nOw0KICAgICAgICAkYWxyZWFkeWluW109ImNzcy5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJqYXZhc2NyaXB0LmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iamF2YXNjcmlwdC5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJ4bWwuanMiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0ieG1sLmpzIjsNCiAgICAgIH0NCiAgICAgIGlmICghaW5fYXJyYXkoImNsaWtlLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJjbGlrZS5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJjbGlrZS5jc3MiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY2xpa2UvY2xpa2UuY3NzIiAvPic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iY2xpa2UuY3NzIjsNCiAgICAgIH0NCiAgICAgIGlmICghaW5fYXJyYXkoInBocC5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvcGhwL3BocC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJwaHAuanMiOw0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoJHRoZW1lIT0iZGVmYXVsdCIpIHsNCiAgICAgICRoZWFkZXIuPScNCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRzY3JpcHRwYXRoLicvdGhlbWUvZGVmYXVsdC5jc3MiLz4nOw0KICAgIH0NCiAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL3RoZW1lLycuJHRoZW1lLicuY3NzIi8+JzsNCiAgICAkaGVhZGVyLj0nDQoNCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogIHZhciBudW1Db2RlTWlycm9yQXJlYXM9Jy4kdGhpcy0+bm9lZGl0b3JzLic7DQo8L3NjcmlwdD4NCg0KJzsNCg0KICAgICRoZWFkZXIuPScNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQogICcuJHRoaXMtPkdldFByZWZlcmVuY2UoImNzc2FkZGl0aW9ucyIsJHRoaXMtPl9kZWZhdWx0Y3NzYWRkaXRpb25zKS4nDQo8L3N0eWxlPg0KICAgICc7DQoNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsMCk9PSIxIikgew0KICAgICRiZ2NvbG9yPSJ3aGl0ZSI7DQogICAgaWYgKCR0aGVtZT09Im5pZ2h0IikgJGJnY29sb3I9ImJsYWNrIjsNCiAgICAgICRoZWFkZXIuPScNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQogICAgICAuZnVsbHNjcmVlbiB7DQogICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgICAgICAgIHRvcDogMDsNCiAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7DQogICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgICAgICAgICAgICAgIHotaW5kZXg6IDk5OTk7DQogICAgICAgICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwcHggc29saWQgI0JCQkJCQjsNCiAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7DQogICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOicuJGJnY29sb3IuJzsNCiAgICAgICAgICAgICAgfQ0KPC9zdHlsZT4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogIGZ1bmN0aW9uIHRvZ2dsZUZ1bGxzY3JlZW5FZGl0aW5nKCkNCiAgICAgIHsNCiAgICAgICAgICB2YXIgZWRpdG9yRGl2ID0gJCgiLkNvZGVNaXJyb3Itc2Nyb2xsIik7DQogICAgICAgICAgaWYgKCFlZGl0b3JEaXYuaGFzQ2xhc3MoImZ1bGxzY3JlZW4iKSkgew0KICAgICAgICAgICAgICB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuID0geyBoZWlnaHQ6IGVkaXRvckRpdi5oZWlnaHQoKSwgd2lkdGg6IGVkaXRvckRpdi53aWR0aCgpIH0NCiAgICAgICAgICAgICAgZWRpdG9yRGl2LmFkZENsYXNzKCJmdWxsc2NyZWVuIik7DQogICAgICAgICAgICAgIGVkaXRvckRpdi5oZWlnaHQoIjEwMCUiKTsNCiAgICAgICAgICAgICAgZWRpdG9yRGl2LndpZHRoKCIxMDAlIik7DQogICAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICBlZGl0b3JEaXYucmVtb3ZlQ2xhc3MoImZ1bGxzY3JlZW4iKTsNCiAgICAgICAgICAgICAgZWRpdG9yRGl2LmhlaWdodCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLmhlaWdodCk7DQogICAgICAgICAgICAgIGVkaXRvckRpdi53aWR0aCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLndpZHRoKTsNCiAgICAgICAgICAgICAgZWRpdG9yLnJlZnJlc2goKTsNCiAgICAgICAgICB9DQogICAgICB9DQogIA0KPC9zY3JpcHQ+DQoNCiAgICAgICc7DQogICAgfQ0KDQoNCg0KCQkkdGhpcy0+aGVhZGVyaW5mb3NlbnQ9dHJ1ZTsNCgkJcmV0dXJuICRoZWFkZXI7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/activeline.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEFjdGl2ZSBMaW5lIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5hY3RpdmVsaW5lIHtiYWNrZ3JvdW5kOiAjZjBmY2ZmICFpbXBvcnRhbnQ7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQWN0aXZlIExpbmUgRGVtbzwvaDE+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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1vZGUtQ2hhbmdpbmcgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3NjaGVtZS9zY2hlbWUuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNb2RlLUNoYW5naW5nIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Cjs7IElmIHRoZXJlIGlzIFNjaGVtZSBjb2RlIGluIGhlcmUsIHRoZSBlZGl0b3Igd2lsbCBiZSBpbiBTY2hlbWUgbW9kZS4KOzsgSWYgeW91IHB1dCBpbiBKUyBpbnN0ZWFkLCBpdCdsbCBzd2l0Y2ggdG8gSlMgbW9kZS4KCihkZWZpbmUgKGRvdWJsZSB4KQogICgqIHggeCkpCjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+T24gY2hhbmdlcyB0byB0aGUgY29udGVudCBvZiB0aGUgYWJvdmUgZWRpdG9yLCBhIChjcnVkZSkgc2NyaXB0CnRyaWVzIHRvIGF1dG8tZGV0ZWN0IHRoZSBsYW5ndWFnZSB1c2VkLCBhbmQgc3dpdGNoZXMgdGhlIGVkaXRvciB0bwplaXRoZXIgSmF2YVNjcmlwdCBvciBTY2hlbWUgbW9kZSBiYXNlZCBvbiB0aGF0LjwvcD4KCjxzY3JpcHQ+CiAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgIG1vZGU6ICJzY2hlbWUiLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgdGFiTW9kZTogImluZGVudCIsCiAgICBvbkNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgIGNsZWFyVGltZW91dChwZW5kaW5nKTsKICAgICAgc2V0VGltZW91dCh1cGRhdGUsIDQwMCk7CiAgICB9CiAgfSk7CiAgdmFyIHBlbmRpbmc7CiAgZnVuY3Rpb24gbG9va3NMaWtlU2NoZW1lKGNvZGUpIHsKICAgIHJldHVybiAhL15ccypcKFxzKmZ1bmN0aW9uXGIvLnRlc3QoY29kZSkgJiYgL15ccypbO1woXS8udGVzdChjb2RlKTsKICB9CiAgZnVuY3Rpb24gdXBkYXRlKCkgewogICAgZWRpdG9yLnNldE9wdGlvbigibW9kZSIsIGxvb2tzTGlrZVNjaGVtZShlZGl0b3IuZ2V0VmFsdWUoKSkgPyAic2NoZW1lIiA6ICJqYXZhc2NyaXB0Iik7CiAgfQo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEF1dG9jb21wbGV0ZSBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvdXRpbC9zaW1wbGUtaGludC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2phdmFzY3JpcHQtaGludC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyOiAxcHggc29saWQgI2VlZTt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQXV0b2NvbXBsZXRlIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CmZ1bmN0aW9uIGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KSB7CiAgdmFyIGZvdW5kID0gW10sIHN0YXJ0ID0gdG9rZW4uc3RyaW5nOwogIGZ1bmN0aW9uIG1heWJlQWRkKHN0cikgewogICAgaWYgKHN0ci5pbmRleE9mKHN0YXJ0KSA9PSAwKSBmb3VuZC5wdXNoKHN0cik7CiAgfQogIGZ1bmN0aW9uIGdhdGhlckNvbXBsZXRpb25zKG9iaikgewogICAgaWYgKHR5cGVvZiBvYmogPT0gInN0cmluZyIpIGZvckVhY2goc3RyaW5nUHJvcHMsIG1heWJlQWRkKTsKICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSBmb3JFYWNoKGFycmF5UHJvcHMsIG1heWJlQWRkKTsKICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSBmb3JFYWNoKGZ1bmNQcm9wcywgbWF5YmVBZGQpOwogICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIG1heWJlQWRkKG5hbWUpOwogIH0KCiAgaWYgKGNvbnRleHQpIHsKICAgIC8vIElmIHRoaXMgaXMgYSBwcm9wZXJ0eSwgc2VlIGlmIGl0IGJlbG9uZ3MgdG8gc29tZSBvYmplY3Qgd2UgY2FuCiAgICAvLyBmaW5kIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgdmFyIG9iaiA9IGNvbnRleHQucG9wKCksIGJhc2U7CiAgICBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtdmFyaWFibGUiKQogICAgICBiYXNlID0gd2luZG93W29iai5zdHJpbmddOwogICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtc3RyaW5nIikKICAgICAgYmFzZSA9ICIiOwogICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtYXRvbSIpCiAgICAgIGJhc2UgPSAxOwogICAgd2hpbGUgKGJhc2UgIT0gbnVsbCAmJiBjb250ZXh0Lmxlbmd0aCkKICAgICAgYmFzZSA9IGJhc2VbY29udGV4dC5wb3AoKS5zdHJpbmddOwogICAgaWYgKGJhc2UgIT0gbnVsbCkgZ2F0aGVyQ29tcGxldGlvbnMoYmFzZSk7CiAgfQogIGVsc2UgewogICAgLy8gSWYgbm90LCBqdXN0IGxvb2sgaW4gdGhlIHdpbmRvdyBvYmplY3QgYW5kIGFueSBsb2NhbCBzY29wZQogICAgLy8gKHJlYWRpbmcgaW50byBKUyBtb2RlIGludGVybmFscyB0byBnZXQgYXQgdGhlIGxvY2FsIHZhcmlhYmxlcykKICAgIGZvciAodmFyIHYgPSB0b2tlbi5zdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpIG1heWJlQWRkKHYubmFtZSk7CiAgICBnYXRoZXJDb21wbGV0aW9ucyh3aW5kb3cpOwogICAgZm9yRWFjaChrZXl3b3JkcywgbWF5YmVBZGQpOwogIH0KICByZXR1cm4gZm91bmQ7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5QcmVzcyA8c3Ryb25nPmN0cmwtc3BhY2U8L3N0cm9uZz4gdG8gYWN0aXZhdGUgYXV0b2NvbXBsZXRpb24uIFNlZQp0aGUgY29kZSAoPGEgaHJlZj0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPmhlcmU8L2E+CmFuZCA8YSBocmVmPSIuLi9saWIvdXRpbC9qYXZhc2NyaXB0LWhpbnQuanMiPmhlcmU8L2E+KSB0byBmaWd1cmUgb3V0CmhvdyBpdCB3b3Jrcy48L3A+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBleHRyYUtleXM6IHsiQ3RybC1TcGFjZSI6IGZ1bmN0aW9uKGNtKSB7Q29kZU1pcnJvci5zaW1wbGVIaW50KGNtLCBDb2RlTWlycm9yLmphdmFzY3JpcHRIaW50KTt9fQogICAgICB9KTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICAvLyBNaW5pbWFsIGV2ZW50LWhhbmRsaW5nIHdyYXBwZXIuCiAgZnVuY3Rpb24gc3RvcEV2ZW50KCkgewogICAgaWYgKHRoaXMucHJldmVudERlZmF1bHQpIHt0aGlzLnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7fQogICAgZWxzZSB7dGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB0aGlzLmNhbmNlbEJ1YmJsZSA9IHRydWU7fQogIH0KICBmdW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50LnN0b3ApIGV2ZW50LnN0b3AgPSBzdG9wRXZlbnQ7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSwgdHlwZSwgaGFuZGxlcikgewogICAgZnVuY3Rpb24gd3JhcEhhbmRsZXIoZXZlbnQpIHtoYW5kbGVyKGFkZFN0b3AoZXZlbnQgfHwgd2luZG93LmV2ZW50KSk7fQogICAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gImZ1bmN0aW9uIikKICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHdyYXBIYW5kbGVyLCBmYWxzZSk7CiAgICBlbHNlCiAgICAgIG5vZGUuYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTsKICB9CgogIGZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGFyci5sZW5ndGg7IGkgPCBlOyArK2kpIGYoYXJyW2ldKTsKICB9CgogIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgIHRoZW1lOiAibmlnaHQiLAogICAgb25LZXlFdmVudDogZnVuY3Rpb24oaSwgZSkgewogICAgICAvLyBIb29rIGludG8gY3RybC1zcGFjZQogICAgICBpZiAoZS5rZXlDb2RlID09IDMyICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiAhZS5hbHRLZXkpIHsKICAgICAgICBlLnN0b3AoKTsKICAgICAgICByZXR1cm4gc3RhcnRDb21wbGV0ZSgpOwogICAgICB9CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIHN0YXJ0Q29tcGxldGUoKSB7CiAgICAvLyBXZSB3YW50IGEgc2luZ2xlIGN1cnNvciBwb3NpdGlvbi4KICAgIGlmIChlZGl0b3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkgcmV0dXJuOwogICAgLy8gRmluZCB0aGUgdG9rZW4gYXQgdGhlIGN1cnNvcgogICAgdmFyIGN1ciA9IGVkaXRvci5nZXRDdXJzb3IoZmFsc2UpLCB0b2tlbiA9IGVkaXRvci5nZXRUb2tlbkF0KGN1ciksIHRwcm9wID0gdG9rZW47CiAgICAvLyBJZiBpdCdzIG5vdCBhICd3b3JkLXN0eWxlJyB0b2tlbiwgaWdub3JlIHRoZSB0b2tlbi4KICAgIGlmICghL15bXHckX10qJC8udGVzdCh0b2tlbi5zdHJpbmcpKSB7CiAgICAgIHRva2VuID0gdHByb3AgPSB7c3RhcnQ6IGN1ci5jaCwgZW5kOiBjdXIuY2gsIHN0cmluZzogIiIsIHN0YXRlOiB0b2tlbi5zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHRva2VuLnN0cmluZyA9PSAiLiIgPyAicHJvcGVydHkiIDogbnVsbH07CiAgICB9CiAgICAvLyBJZiBpdCBpcyBhIHByb3BlcnR5LCBmaW5kIG91dCB3aGF0IGl0IGlzIGEgcHJvcGVydHkgb2YuCiAgICB3aGlsZSAodHByb3AuY2xhc3NOYW1lID09ICJwcm9wZXJ0eSIpIHsKICAgICAgdHByb3AgPSBlZGl0b3IuZ2V0VG9rZW5BdCh7bGluZTogY3VyLmxpbmUsIGNoOiB0cHJvcC5zdGFydH0pOwogICAgICBpZiAodHByb3Auc3RyaW5nICE9ICIuIikgcmV0dXJuOwogICAgICB0cHJvcCA9IGVkaXRvci5nZXRUb2tlbkF0KHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgIGlmICghY29udGV4dCkgdmFyIGNvbnRleHQgPSBbXTsKICAgICAgY29udGV4dC5wdXNoKHRwcm9wKTsKICAgIH0KICAgIHZhciBjb21wbGV0aW9ucyA9IGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KTsKICAgIGlmICghY29tcGxldGlvbnMubGVuZ3RoKSByZXR1cm47CiAgICBmdW5jdGlvbiBpbnNlcnQoc3RyKSB7CiAgICAgIGVkaXRvci5yZXBsYWNlUmFuZ2Uoc3RyLCB7bGluZTogY3VyLmxpbmUsIGNoOiB0b2tlbi5zdGFydH0sIHtsaW5lOiBjdXIubGluZSwgY2g6IHRva2VuLmVuZH0pOwogICAgfQogICAgLy8gV2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBjb21wbGV0aW9uLCB1c2UgaXQgZGlyZWN0bHkuCiAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID09IDEpIHtpbnNlcnQoY29tcGxldGlvbnNbMF0pOyByZXR1cm4gdHJ1ZTt9CgogICAgLy8gQnVpbGQgdGhlIHNlbGVjdCB3aWRnZXQKICAgIHZhciBjb21wbGV0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgY29tcGxldGUuY2xhc3NOYW1lID0gImNvbXBsZXRpb25zIjsKICAgIHZhciBzZWwgPSBjb21wbGV0ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSk7CiAgICBzZWwubXVsdGlwbGUgPSB0cnVlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wbGV0aW9ucy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgb3B0ID0gc2VsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTsKICAgICAgb3B0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbXBsZXRpb25zW2ldKSk7CiAgICB9CiAgICBzZWwuZmlyc3RDaGlsZC5zZWxlY3RlZCA9IHRydWU7CiAgICBzZWwuc2l6ZSA9IE1hdGgubWluKDEwLCBjb21wbGV0aW9ucy5sZW5ndGgpOwogICAgdmFyIHBvcyA9IGVkaXRvci5jdXJzb3JDb29yZHMoKTsKICAgIGNvbXBsZXRlLnN0eWxlLmxlZnQgPSBwb3MueCArICJweCI7CiAgICBjb21wbGV0ZS5zdHlsZS50b3AgPSBwb3MueUJvdCArICJweCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbXBsZXRlKTsKICAgIC8vIEhhY2sgdG8gaGlkZSB0aGUgc2Nyb2xsYmFyLgogICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA8PSAxMCkKICAgICAgY29tcGxldGUuc3R5bGUud2lkdGggPSAoc2VsLmNsaWVudFdpZHRoIC0gMSkgKyAicHgiOwoKICAgIHZhciBkb25lID0gZmFsc2U7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGRvbmUpIHJldHVybjsKICAgICAgZG9uZSA9IHRydWU7CiAgICAgIGNvbXBsZXRlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29tcGxldGUpOwogICAgfQogICAgZnVuY3Rpb24gcGljaygpIHsKICAgICAgaW5zZXJ0KHNlbC5vcHRpb25zW3NlbC5zZWxlY3RlZEluZGV4XS50ZXh0KTsKICAgICAgY2xvc2UoKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe2VkaXRvci5mb2N1cygpO30sIDUwKTsKICAgIH0KICAgIGNvbm5lY3Qoc2VsLCAiYmx1ciIsIGNsb3NlKTsKICAgIGNvbm5lY3Qoc2VsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZTsKICAgICAgLy8gRW50ZXIgYW5kIHNwYWNlCiAgICAgIGlmIChjb2RlID09IDEzIHx8IGNvZGUgPT0gMzIpIHtldmVudC5zdG9wKCk7IHBpY2soKTt9CiAgICAgIC8vIEVzY2FwZQogICAgICBlbHNlIGlmIChjb2RlID09IDI3KSB7ZXZlbnQuc3RvcCgpOyBjbG9zZSgpOyBlZGl0b3IuZm9jdXMoKTt9CiAgICAgIGVsc2UgaWYgKGNvZGUgIT0gMzggJiYgY29kZSAhPSA0MCkge2Nsb3NlKCk7IGVkaXRvci5mb2N1cygpOyBzZXRUaW1lb3V0KHN0YXJ0Q29tcGxldGUsIDUwKTt9CiAgICB9KTsKICAgIGNvbm5lY3Qoc2VsLCAiZGJsY2xpY2siLCBwaWNrKTsKCiAgICBzZWwuZm9jdXMoKTsKICAgIC8vIE9wZXJhIHNvbWV0aW1lcyBpZ25vcmVzIGZvY3VzaW5nIGEgZnJlc2hseSBjcmVhdGVkIG5vZGUKICAgIGlmICh3aW5kb3cub3BlcmEpIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZiAoIWRvbmUpIHNlbC5mb2N1cygpO30sIDEwMCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZhciBzdHJpbmdQcm9wcyA9ICgiY2hhckF0IGNoYXJDb2RlQXQgaW5kZXhPZiBsYXN0SW5kZXhPZiBzdWJzdHJpbmcgc3Vic3RyIHNsaWNlIHRyaW0gdHJpbUxlZnQgdHJpbVJpZ2h0ICIgKwogICAgICAgICAgICAgICAgICAgICAidG9VcHBlckNhc2UgdG9Mb3dlckNhc2Ugc3BsaXQgY29uY2F0IG1hdGNoIHJlcGxhY2Ugc2VhcmNoIikuc3BsaXQoIiAiKTsKICB2YXIgYXJyYXlQcm9wcyA9ICgibGVuZ3RoIGNvbmNhdCBqb2luIHNwbGljZSBwdXNoIHBvcCBzaGlmdCB1bnNoaWZ0IHNsaWNlIHJldmVyc2Ugc29ydCBpbmRleE9mICIgKwogICAgICAgICAgICAgICAgICAgICJsYXN0SW5kZXhPZiBldmVyeSBzb21lIGZpbHRlciBmb3JFYWNoIG1hcCByZWR1Y2UgcmVkdWNlUmlnaHQgIikuc3BsaXQoIiAiKTsKICB2YXIgZnVuY1Byb3BzID0gInByb3RvdHlwZSBhcHBseSBjYWxsIGJpbmQiLnNwbGl0KCIgIik7CiAgdmFyIGtleXdvcmRzID0gKCJicmVhayBjYXNlIGNhdGNoIGNvbnRpbnVlIGRlYnVnZ2VyIGRlZmF1bHQgZGVsZXRlIGRvIGVsc2UgZmFsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgICJpZiBpbiBpbnN0YW5jZW9mIG5ldyBudWxsIHJldHVybiBzd2l0Y2ggdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHZhciB2b2lkIHdoaWxlIHdpdGgiKS5zcGxpdCgiICIpOwoKICBmdW5jdGlvbiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCkgewogICAgdmFyIGZvdW5kID0gW10sIHN0YXJ0ID0gdG9rZW4uc3RyaW5nOwogICAgZnVuY3Rpb24gbWF5YmVBZGQoc3RyKSB7CiAgICAgIGlmIChzdHIuaW5kZXhPZihzdGFydCkgPT0gMCkgZm91bmQucHVzaChzdHIpOwogICAgfQogICAgZnVuY3Rpb24gZ2F0aGVyQ29tcGxldGlvbnMob2JqKSB7CiAgICAgIGlmICh0eXBlb2Ygb2JqID09ICJzdHJpbmciKSBmb3JFYWNoKHN0cmluZ1Byb3BzLCBtYXliZUFkZCk7CiAgICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSBmb3JFYWNoKGFycmF5UHJvcHMsIG1heWJlQWRkKTsKICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRnVuY3Rpb24pIGZvckVhY2goZnVuY1Byb3BzLCBtYXliZUFkZCk7CiAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSBtYXliZUFkZChuYW1lKTsKICAgIH0KCiAgICBpZiAoY29udGV4dCkgewogICAgICAvLyBJZiB0aGlzIGlzIGEgcHJvcGVydHksIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNvbWUgb2JqZWN0IHdlIGNhbgogICAgICAvLyBmaW5kIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICB2YXIgb2JqID0gY29udGV4dC5wb3AoKSwgYmFzZTsKICAgICAgaWYgKG9iai5jbGFzc05hbWUgPT0gInZhcmlhYmxlIikKICAgICAgICBiYXNlID0gd2luZG93W29iai5zdHJpbmddOwogICAgICBlbHNlIGlmIChvYmouY2xhc3NOYW1lID09ICJzdHJpbmciKQogICAgICAgIGJhc2UgPSAiIjsKICAgICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAiYXRvbSIpCiAgICAgICAgYmFzZSA9IDE7CiAgICAgIHdoaWxlIChiYXNlICE9IG51bGwgJiYgY29udGV4dC5sZW5ndGgpCiAgICAgICAgYmFzZSA9IGJhc2VbY29udGV4dC5wb3AoKS5zdHJpbmddOwogICAgICBpZiAoYmFzZSAhPSBudWxsKSBnYXRoZXJDb21wbGV0aW9ucyhiYXNlKTsKICAgIH0KICAgIGVsc2UgewogICAgICAvLyBJZiBub3QsIGp1c3QgbG9vayBpbiB0aGUgd2luZG93IG9iamVjdCBhbmQgYW55IGxvY2FsIHNjb3BlCiAgICAgIC8vIChyZWFkaW5nIGludG8gSlMgbW9kZSBpbnRlcm5hbHMgdG8gZ2V0IGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMpCiAgICAgIGZvciAodmFyIHYgPSB0b2tlbi5zdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpIG1heWJlQWRkKHYubmFtZSk7CiAgICAgIGdhdGhlckNvbXBsZXRpb25zKHdpbmRvdyk7CiAgICAgIGZvckVhY2goa2V5d29yZHMsIG1heWJlQWRkKTsKICAgIH0KICAgIHJldHVybiBmb3VuZDsKICB9Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/emacs.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEVtYWNzIGJpbmRpbmdzIGRlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2NsaWtlL2NsaWtlLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9rZXltYXAvZW1hY3MuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRW1hY3MgYmluZGluZ3MgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KI2luY2x1ZGUgInN5c2NhbGxzLmgiCi8qIGdldGNoYXI6ICBzaW1wbGUgYnVmZmVyZWQgdmVyc2lvbiAqLwppbnQgZ2V0Y2hhcih2b2lkKQp7CiAgc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CiAgc3RhdGljIGNoYXIgKmJ1ZnAgPSBidWY7CiAgc3RhdGljIGludCBuID0gMDsKICBpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KICAgIG4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CiAgICBidWZwID0gYnVmOwogIH0KICByZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGhlIGVtYWNzIGtleWJpbmRpbmdzIGFyZSBlbmFibGVkIGJ5CmluY2x1ZGluZyA8YSBocmVmPSIuLi9rZXltYXAvZW1hY3MuanMiPmtleW1hcC9lbWFjcy5qczwvYT4gYW5kIHNldHRpbmcKdGhlIDxjb2RlPmtleU1hcDwvY29kZT4gb3B0aW9uIHRvIDxjb2RlPiJlbWFjcyI8L2NvZGU+LiBCZWNhdXNlCkNvZGVNaXJyb3IncyBpbnRlcm5hbCBBUEkgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gRW1hY3MsIHRoZXkgYXJlIG9ubHkKYSBsb29zZSBhcHByb3hpbWF0aW9uIG9mIGFjdHVhbCBlbWFjcyBiaW5kaW5ncywgdGhvdWdoLjwvcD4KCjxwPkFsc28gbm90ZSB0aGF0IGEgbG90IG9mIGJyb3dzZXJzIGRpc2FsbG93IGNlcnRhaW4ga2V5cyBmcm9tIGJlaW5nCmNhcHR1cmVkLiBGb3IgZXhhbXBsZSwgQ2hyb21lIGJsb2NrcyBib3RoIEN0cmwtVyBhbmQgQ3RybC1OLCB3aXRoIHRoZQpyZXN1bHQgdGhhdCBpZGlvbWF0aWMgdXNlIG9mIEVtYWNzIGtleXMgd2lsbCBjb25zdGFudGx5IGNsb3NlIHlvdXIgdGFiCm9yIG9wZW4gYSBuZXcgd2luZG93LjwvcD4KCiAgICA8c2NyaXB0PgogICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLnNhdmUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWx0ID0gZWRpdG9yLmdldFdyYXBwZXJFbGVtZW50KCk7CiAgICAgICAgZWx0LnN0eWxlLmJhY2tncm91bmQgPSAiI2RlZiI7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZWx0LnN0eWxlLmJhY2tncm91bmQgPSAiIjsgfSwgMzAwKTsKICAgICAgfTsKICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LWNzcmMiLAogICAgICAgIGtleU1hcDogImVtYWNzIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/folding.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvZGUgRm9sZGluZyBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICAuQ29kZU1pcnJvci1ndXR0ZXIge21pbi13aWR0aDogMi42ZW07IGN1cnNvcjogcG9pbnRlcjt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBDb2RlIEZvbGRpbmcgRGVtbzwvaDE+CgogICAgPGZvcm0+PGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA1MGVtIj48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjwvdGV4dGFyZWE+PC9kaXY+PC9mb3JtPgoKICAgIDxzY3JpcHQgaWQ9InNjcmlwdCI+CndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHZhciBzYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JpcHQiKTsKICB0ZS52YWx1ZSA9IChzYy50ZXh0Q29udGVudCB8fCBzYy5pbm5lclRleHQgfHwgc2MuaW5uZXJIVE1MKS5yZXBsYWNlKC9eXHMqLywgIiIpOwoKICB2YXIgZm9sZEZ1bmMgPSBDb2RlTWlycm9yLm5ld0ZvbGRGdW5jdGlvbihDb2RlTWlycm9yLmJyYWNlUmFuZ2VGaW5kZXIpOwogIGZ1bmN0aW9uIGtleUV2ZW50KGNtLCBlKSB7CiAgICBpZiAoZS5rZXlDb2RlID09IDgxICYmIGUuY3RybEtleSkgewogICAgICBpZiAoZS50eXBlID09ICJrZXlkb3duIikgewogICAgICAgIGUuc3RvcCgpOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Zm9sZEZ1bmMoY20sIGNtLmdldEN1cnNvcigpLmxpbmUpO30sIDUwKTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CgogIHdpbmRvdy5lZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSh0ZSwgewogICAgbW9kZTogImphdmFzY3JpcHQiLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICBsaW5lV3JhcHBpbmc6IHRydWUsCiAgICBvbkd1dHRlckNsaWNrOiBmb2xkRnVuYywKICAgIGV4dHJhS2V5czogeyJDdHJsLVEiOiBmdW5jdGlvbihjbSl7Zm9sZEZ1bmMoY20sIGNtLmdldEN1cnNvcigpLmxpbmUpO319CiAgfSk7CgogIGZvbGRGdW5jKGVkaXRvciwgNik7CiAgZm9sZEZ1bmMoZWRpdG9yLCAxNik7Cn07Cjwvc2NyaXB0PgoKICAgIDxwPkRlbW9uc3RyYXRpb24gb2YgY29kZSBmb2xkaW5nIHVzaW5nIHRoZSBjb2RlCiAgICBpbiA8YSBocmVmPSIuLi9saWIvdXRpbC9mb2xkY29kZS5qcyI+PGNvZGU+Zm9sZGNvZGUuanM8L2NvZGU+PC9hPi4KICAgIFByZXNzIGN0cmwtcSBvciBjbGljayBvbiB0aGUgZ3V0dGVyIHRvIGZvbGQgYSBibG9jaywgYWdhaW4KICAgIHRvIHVuZm9sZC48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/formatting.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEZvcm1hdHRpbmcgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2Zvcm1hdHRpbmcuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgfQogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogMjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRm9ybWF0dGluZyBkZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjxzY3JpcHQ+IGZ1bmN0aW9uIChzLGUpeyBmb3IodmFyIGk9MDsgaSA8IDE7IGkrKykgdGVzdCgidGVzdCgpO2E9MSIpO30gPC9zY3JpcHQ+CjxzY3JpcHQ+CmZ1bmN0aW9uIHRlc3QoYyl7ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspewkgICAgICAgICAgcHJvY2VzcygiYS5iKCk7YyA9IG51bGw7IiwgMzAwKTt9Cn0KPC9zY3JpcHQ+Cjx0YWJsZT48dHI+PHRkPnRlc3QgMTwvdGQ+PC90cj48dHI+PHRkPnRlc3QgMjwvdGQ+PC90cj48L3RhYmxlPgo8c2NyaXB0PiBmdW5jdGlvbiB0ZXN0KCkgeyByZXR1cm4gMTt9IDwvc2NyaXB0Pgo8c3R5bGU+IC50ZXN0IHsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IH0KPC9zdHlsZT48L3RleHRhcmVhPjwvZm9ybT4KCjxwPlNlbGVjdCBhIHBpZWNlIG9mIGNvZGUgYW5kIGNsaWNrIG9uZSBvZiB0aGUgbGlua3MgYmVsb3cgdG8gYXBwbHkgYXV0b21hdGljIGZvcm1hdHRpbmcgdG8gdGhlIHNlbGVjdGVkIHRleHQgb3IgY29tbWVudC91bmNvbW1lbnQgdGhlIHNlbGVjdGVkIHRleHQuIE5vdGUgdGhhdCB0aGUgZm9ybWF0dGluZyBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGJsb2NrJ3MgbW9kZS4KICAgIDx0YWJsZT4KICAgICAgPHRyPgogICAgICAgIDx0ZD4KICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YXV0b0Zvcm1hdFNlbGVjdGlvbigpIj4KICAgICAgICAgICAgQXV0b2Zvcm1hdCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjb21tZW50U2VsZWN0aW9uKHRydWUpIj4KICAgICAgICAgICAgQ29tbWVudCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjb21tZW50U2VsZWN0aW9uKGZhbHNlKSI+CiAgICAgICAgICAgIFVuY29tbWVudCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgo8L3A+ICAgIAogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiAiaHRtbG1peGVkIgogICAgICB9KTsKICAgICAgQ29kZU1pcnJvci5jb21tYW5kc1sic2VsZWN0QWxsIl0oZWRpdG9yKTsKICAgICAgCiAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkUmFuZ2UoKSB7CiAgICAgICAgcmV0dXJuIHsgZnJvbTogZWRpdG9yLmdldEN1cnNvcih0cnVlKSwgdG86IGVkaXRvci5nZXRDdXJzb3IoZmFsc2UpIH07CiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIGF1dG9Gb3JtYXRTZWxlY3Rpb24oKSB7CiAgICAgICAgdmFyIHJhbmdlID0gZ2V0U2VsZWN0ZWRSYW5nZSgpOwogICAgICAgIGVkaXRvci5hdXRvRm9ybWF0UmFuZ2UocmFuZ2UuZnJvbSwgcmFuZ2UudG8pOwogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBjb21tZW50U2VsZWN0aW9uKGlzQ29tbWVudCkgewogICAgICAgIHZhciByYW5nZSA9IGdldFNlbGVjdGVkUmFuZ2UoKTsKICAgICAgICBlZGl0b3IuY29tbWVudFJhbmdlKGlzQ29tbWVudCwgcmFuZ2UuZnJvbSwgcmFuZ2UudG8pOwogICAgICB9ICAgICAgCiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/fullscreen.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEZ1bGwgU2NyZWVuIEVkaXRpbmc8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbmlnaHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS42LjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICAgIC5mdWxsc2NyZWVuIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAwOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB6LWluZGV4OiA5OTk5OwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgIGJvcmRlcjogMHB4IHNvbGlkICNCQkJCQkI7CiAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRnVsbCBTY3JlZW4gRWRpdGluZzwvaDE+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+PC9mb3JtPgogPHNjcmlwdD4KCihmdW5jdGlvbiAoKSB7CgogICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICB0aGVtZTogIm5pZ2h0IiwKICAgICAgICBleHRyYUtleXM6IHsiRjExIjogdG9nZ2xlRnVsbHNjcmVlbkVkaXRpbmcsICJFc2MiOiB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZ30KICAgIH0pOwoKICAgIGZ1bmN0aW9uIHRvZ2dsZUZ1bGxzY3JlZW5FZGl0aW5nKCkKICAgIHsKICAgICAgICB2YXIgZWRpdG9yRGl2ID0gJCgnLkNvZGVNaXJyb3Itc2Nyb2xsJyk7CiAgICAgICAgaWYgKCFlZGl0b3JEaXYuaGFzQ2xhc3MoJ2Z1bGxzY3JlZW4nKSkgewogICAgICAgICAgICB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuID0geyBoZWlnaHQ6IGVkaXRvckRpdi5oZWlnaHQoKSwgd2lkdGg6IGVkaXRvckRpdi53aWR0aCgpIH0KICAgICAgICAgICAgZWRpdG9yRGl2LmFkZENsYXNzKCdmdWxsc2NyZWVuJyk7CiAgICAgICAgICAgIGVkaXRvckRpdi5oZWlnaHQoJzEwMCUnKTsKICAgICAgICAgICAgZWRpdG9yRGl2LndpZHRoKCcxMDAlJyk7CiAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBlZGl0b3JEaXYucmVtb3ZlQ2xhc3MoJ2Z1bGxzY3JlZW4nKTsKICAgICAgICAgICAgZWRpdG9yRGl2LmhlaWdodCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLmhlaWdodCk7CiAgICAgICAgICAgIGVkaXRvckRpdi53aWR0aCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLndpZHRoKTsKICAgICAgICAgICAgZWRpdG9yLnJlZnJlc2goKTsKICAgICAgICB9CiAgICB9Cgp9KSgpOwo8L3NjcmlwdD4KCiAgICA8cD5QcmVzcyA8c3Ryb25nPkYxMTwvc3Ryb25nPiAob3IgPHN0cm9uZz5FU0M8L3N0cm9uZz4gaW4gU2FmYXJpIG9uIE1hYyBPUyBYKSB3aGVuIGN1cnNvciBpcyBpbiB0aGUgZWRpdG9yIHRvIHRvZ2dsZSBmdWxsIHNjcmVlbiBlZGl0aW5nLjwvcD4KCiAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IERvZXMgbm90IGN1cnJlbnRseSB3b3JrIGNvcnJlY3RseSBpbiBJRQogICAgNiBhbmQgNywgd2hlcmUgc2V0dGluZyB0aGUgaGVpZ2h0IG9mIHNvbWV0aGluZwogICAgdG8gPGNvZGU+MTAwJTwvY29kZT4gZG9lc24ndCBtYWtlIGl0IGZ1bGwtc2NyZWVuLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/marker.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEJyZWFrcG9pbnQgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvci1ndXR0ZXIgewogICAgICAgIHdpZHRoOiAzZW07CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KICAgICAgLkNvZGVNaXJyb3IgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEJyZWFrcG9pbnQgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogIGxpbmVOdW1iZXJzOiB0cnVlLAogIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICBlbHNlCiAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgfQp9KTsKPC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5DbGljayB0aGUgbGluZS1udW1iZXIgZ3V0dGVyIHRvIGFkZCBvciByZW1vdmUgJ2JyZWFrcG9pbnRzJy48L3A+CgogICAgPHNjcmlwdD4KICAgICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICAgICAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgICAgICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgICAgICAgfQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/mustache.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE92ZXJsYXkgUGFyc2VyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9vdmVybGF5LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5jbS1tdXN0YWNoZSB7Y29sb3I6ICMwY2E7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogT3ZlcmxheSBQYXJzZXIgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KPGh0bWw+CiAgPGJvZHk+CiAgICA8aDE+e3t0aXRsZX19PC9oMT4KICAgIDxwPlRoZXNlIGFyZSBsaW5rcyB0byB7e3RoaW5nc319OjwvcD4KICAgIDx1bD57eyNsaW5rc319CiAgICAgIDxsaT48YSBocmVmPSJ7e3VybH19Ij57e3RleHR9fTwvYT48L2xpPgogICAge3svbGlua3N9fTwvdWw+CiAgPC9ib2R5Pgo8L2h0bWw+CjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibXVzdGFjaGUiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBtdXN0YWNoZU92ZXJsYXkgPSB7CiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKCJ7eyIpKSB7CiAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpCiAgICAgICAgICBpZiAoY2ggPT0gIn0iICYmIHN0cmVhbS5uZXh0KCkgPT0gIn0iKSBicmVhazsKICAgICAgICByZXR1cm4gIm11c3RhY2hlIjsKICAgICAgfQogICAgICB3aGlsZSAoc3RyZWFtLm5leHQoKSAhPSBudWxsICYmICFzdHJlYW0ubWF0Y2goInt7IiwgZmFsc2UpKSB7fQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9OwogIHJldHVybiBDb2RlTWlycm9yLm92ZXJsYXlQYXJzZXIoQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLmJhY2tkcm9wIHx8ICJ0ZXh0L2h0bWwiKSwgbXVzdGFjaGVPdmVybGF5KTsKfSk7CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7bW9kZTogIm11c3RhY2hlIn0pOwo8L3NjcmlwdD4KCiAgICA8cD5EZW1vbnN0cmF0aW9uIG9mIGEgbW9kZSB0aGF0IHBhcnNlcyBIVE1MLCBoaWdobGlnaHRpbmcKICAgIHRoZSA8YSBocmVmPSJodHRwOi8vbXVzdGFjaGUuZ2l0aHViLmNvbS8iPk11c3RhY2hlPC9hPiB0ZW1wbGF0aW5nCiAgICBkaXJlY3RpdmVzIGluc2lkZSBvZiBpdCBieSB1c2luZyB0aGUgY29kZQogICAgaW4gPGEgaHJlZj0iLi4vbGliL3V0aWwvb3ZlcmxheS5qcyI+PGNvZGU+b3ZlcmxheS5qczwvY29kZT48L2E+LiBWaWV3CiAgICBzb3VyY2UgdG8gc2VlIHRoZSAxNSBsaW5lcyBvZiBjb2RlIG5lZWRlZCB0byBhY2NvbXBsaXNoIHRoaXMuPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/preview.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhUTUw1IHByZXZpZXc8L3RpdGxlPgogICAgPG1ldGEgY2hhcnNldD11dGYtOD4KICAgIDxzY3JpcHQgc3JjPS4uL2xpYi9jb2RlbWlycm9yLmpzPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Li4vbW9kZS94bWwveG1sLmpzPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Li4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL2Nzcy9jc3MuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanM+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9c3R5bGVzaGVldCBocmVmPS4uL2xpYi9jb2RlbWlycm9yLmNzcz4KICAgIDxsaW5rIHJlbD1zdHlsZXNoZWV0IGhyZWY9Li4vZG9jL2RvY3MuY3NzPgogICAgPHN0eWxlIHR5cGU9dGV4dC9jc3M+CiAgICAgIC5Db2RlTWlycm9yIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICB9CiAgICAgIGlmcmFtZSB7CiAgICAgICAgd2lkdGg6IDQ5JTsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgIGJvcmRlci1sZWZ0OiAwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEhUTUw1IHByZXZpZXc8L2gxPgogICAgPHRleHRhcmVhIGlkPWNvZGUgbmFtZT1jb2RlPgo8IWRvY3R5cGUgaHRtbD4KPGh0bWw+CiAgPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PXV0Zi04PgogICAgPHRpdGxlPkhUTUw1IGNhbnZhcyBkZW1vPC90aXRsZT4KICAgIDxzdHlsZT5wIHtmb250LWZhbWlseTogbW9ub3NwYWNlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxwPkNhbnZhcyBwYW5lIGdvZXMgaGVyZTo8L3A+CiAgICA8Y2FudmFzIGlkPXBhbmUgd2lkdGg9MzAwIGhlaWdodD0yMDA+PC9jYW52YXM+CiAgICA8c2NyaXB0PgogICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhbmUnKTsKICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKCiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYigyNTAsMCwwKSc7CiAgICAgIGNvbnRleHQuZmlsbFJlY3QoMTAsIDEwLCA1NSwgNTApOwoKICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgwLCAwLCAyNTAsIDAuNSknOwogICAgICBjb250ZXh0LmZpbGxSZWN0KDMwLCAzMCwgNTUsIDUwKTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPjwvdGV4dGFyZWE+CiAgICA8aWZyYW1lIGlkPXByZXZpZXc+PC9pZnJhbWU+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZGVsYXk7CiAgICAgIC8vIEluaXRpYWxpemUgQ29kZU1pcnJvciBlZGl0b3Igd2l0aCBhIG5pY2UgaHRtbDUgY2FudmFzIGRlbW8uCiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29kZScpLCB7CiAgICAgICAgbW9kZTogJ3RleHQvaHRtbCcsCiAgICAgICAgdGFiTW9kZTogJ2luZGVudCcsCiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KGRlbGF5KTsKICAgICAgICAgIGRlbGF5ID0gc2V0VGltZW91dCh1cGRhdGVQcmV2aWV3LCAzMDApOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIAogICAgICBmdW5jdGlvbiB1cGRhdGVQcmV2aWV3KCkgewogICAgICAgIHZhciBwcmV2aWV3RnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJldmlldycpOwogICAgICAgIHZhciBwcmV2aWV3ID0gIHByZXZpZXdGcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgIHByZXZpZXdGcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OwogICAgICAgIHByZXZpZXcub3BlbigpOwogICAgICAgIHByZXZpZXcud3JpdGUoZWRpdG9yLmdldFZhbHVlKCkpOwogICAgICAgIHByZXZpZXcuY2xvc2UoKTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KHVwZGF0ZVByZXZpZXcsIDMwMCk7CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/resize.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEF1dG9yZXNpemUgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3IgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7CiAgICAgIH0KICAgICAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEF1dG9yZXNpemUgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBoZWlnaHQ6IGF1dG87CiAgb3ZlcmZsb3cteTogaGlkZGVuOwogIG92ZXJmbG93LXg6IGF1dG87CiAgd2lkdGg6IDEwMCUKfTwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+Qnkgc2V0dGluZyBhIGZldyBDU1MgcHJvcGVydGllcywgQ29kZU1pcnJvciBjYW4gYmUgbWFkZSB0bwphdXRvbWF0aWNhbGx5IHJlc2l6ZSB0byBmaXQgaXRzIGNvbnRlbnQuPC9wPgoKICAgIDxzY3JpcHQ+CiAgICAgIENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/runmode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1vZGUgUnVubmVyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9ydW5tb2RlLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNb2RlIFJ1bm5lciBEZW1vPC9oMT4KCiAgICA8dGV4dGFyZWEgaWQ9ImNvZGUiIHN0eWxlPSJ3aWR0aDogOTAlOyBoZWlnaHQ6IDdlbTsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6IC4yZW0gLjRlbTsiPgo8Zm9vYmFyPgogIDxibGFoPkVudGVyIHlvdXIgeG1sIGhlcmUgYW5kIHByZXNzIHRoZSBidXR0b24gYmVsb3cgdG8gZGlzcGxheQogICAgaXQgYXMgaGlnaGxpZ2h0ZWQgYnkgdGhlIENvZGVNaXJyb3IgWE1MIG1vZGU8L2JsYWg+CiAgPHRhZzIgZm9vPSIyIiBiYXI9IiZhbXA7cXVvdDtiYXImYW1wO3F1b3Q7Ii8+CjwvZm9vYmFyPjwvdGV4dGFyZWE+PGJyPgogICAgPGJ1dHRvbiBvbmNsaWNrPSJkb0hpZ2hsaWdodCgpOyI+SGlnaGxpZ2h0ITwvYnV0dG9uPgogICAgPHByZSBpZD0ib3V0cHV0IiBjbGFzcz0iY20tcy1kZWZhdWx0Ij48L3ByZT4KCiAgICA8c2NyaXB0PgpmdW5jdGlvbiBkb0hpZ2hsaWdodCgpIHsKICBDb2RlTWlycm9yLnJ1bk1vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKS52YWx1ZSwgImFwcGxpY2F0aW9uL3htbCIsCiAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRwdXQiKSk7Cn0KPC9zY3JpcHQ+CgogICAgPHA+UnVubmluZyBhIENvZGVNaXJyb3IgbW9kZSBvdXRzaWRlIG9mIHRoZSBlZGl0b3IuCiAgICBUaGUgPGNvZGU+Q29kZU1pcnJvci5ydW5Nb2RlPC9jb2RlPiBmdW5jdGlvbiwgZGVmaW5lZAogICAgaW4gPGNvZGU+PGEgaHJlZj0iLi4vbGliL3V0aWwvcnVubW9kZS5qcyI+bGliL3J1bm1vZGUuanM8L2E+PC9jb2RlPiB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+dGV4dCAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIGRvY3VtZW50IHRvIHJ1biB0aHJvdWdoIHRoZSBoaWdobGlnaHRlci48L2RkPgogICAgICA8ZHQ+PGNvZGU+bW9kZSAoPGEgaHJlZj0iLi4vZG9jL21hbnVhbC5odG1sI29wdGlvbl9tb2RlIj5tb2RlIHNwZWM8L2E+KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1vZGUgdG8gdXNlIChtdXN0IGJlIGxvYWRlZCBhcyBub3JtYWwpLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5vdXRwdXQgKGZ1bmN0aW9uIG9yIERPTSBub2RlKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SWYgdGhpcyBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCB0b2tlbiB3aXRoCiAgICAgIHR3byBhcmd1bWVudHMsIHRoZSB0b2tlbidzIHRleHQgYW5kIHRoZSB0b2tlbidzIHN0eWxlIGNsYXNzIChtYXkKICAgICAgYmUgPGNvZGU+bnVsbDwvY29kZT4gZm9yIHVuc3R5bGVkIHRva2VucykuIElmIGl0IGlzIGEgRE9NIG5vZGUsCiAgICAgIHRoZSB0b2tlbnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gPGNvZGU+c3BhbjwvY29kZT4gZWxlbWVudHMgYXMgaW4KICAgICAgYW4gZWRpdG9yLCBhbmQgaW5zZXJ0ZWQgaW50byB0aGUgbm9kZQogICAgICAodGhyb3VnaCA8Y29kZT5pbm5lckhUTUw8L2NvZGU+KS48L2RkPgogICAgPC9kbD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/search.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNlYXJjaC9SZXBsYWNlIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2RpYWxvZy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi91dGlsL2RpYWxvZy5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL3NlYXJjaGN1cnNvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvc2VhcmNoLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICBkdCB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6ICM2NjY7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogU2VhcmNoL1JlcGxhY2UgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio4IHNwYWNlcyBzaG91bGQgYmUKICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fdGFiTW9kZSI+PGNvZGU+dGFiTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogIDxkZD5EZXRlcm1pbmVzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIHRhYiBrZXkuCiAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPiJjbGFzc2ljIiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICBiZWhhdmUgbGlrZSB0aGUgPGNvZGU+InNoaWZ0IjwvY29kZT4gbW9kZS4gKFdoZW4gc2hpZnQgaXMKICAgICAgaGVsZCwgdGhpcyBiZWhhdmVzIGxpa2UgdGhlIDxjb2RlPiJpbmRlbnQiPC9jb2RlPiBtb2RlLik8L2RkPgogICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kZW50IGFsbCBzZWxlY3RlZCBsaW5lcyBieQogICAgICBvbmUgPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0PC9jb2RlPjwvYT4uCiAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICBsaW5lcyBvbmUgdW5pdC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImluZGVudCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgY29udGV4dC4gT25seSB3b3JrcyBpZiB0aGUKICAgICAgbW9kZSA8YSBocmVmPSIjaW5kZW50Ij5zdXBwb3J0czwvYT4gaXQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGNhcHR1cmUgdGFiIHByZXNzZXMsIGxldCB0aGUgYnJvd3NlciBhcHBseSBpdHMKICAgICAgZGVmYXVsdCBiZWhhdmlvdXIgKHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgc2tpcHMgdG8gdGhlIG5leHQKICAgICAgY29udHJvbCkuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHttb2RlOiAidGV4dC9odG1sIiwgbGluZU51bWJlcnM6IHRydWV9KTsKPC9zY3JpcHQ+CgogICAgPHA+RGVtb25zdHJhdGlvbiBvZiBwcmltaXRpdmUgc2VhcmNoL3JlcGxhY2UgZnVuY3Rpb25hbGl0eS4gVGhlCiAgICBrZXliaW5kaW5ncyAod2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gYnkgY3VzdG9tIGtleW1hcHMpIGFyZTo8L3A+CiAgICA8ZGw+CiAgICAgIDxkdD5DdHJsLUYgLyBDbWQtRjwvZHQ+PGRkPlN0YXJ0IHNlYXJjaGluZzwvZGQ+CiAgICAgIDxkdD5DdHJsLUcgLyBDbWQtRzwvZHQ+PGRkPkZpbmQgbmV4dDwvZGQ+CiAgICAgIDxkdD5TaGlmdC1DdHJsLUcgLyBTaGlmdC1DbWQtRzwvZHQ+PGRkPkZpbmQgcHJldmlvdXM8L2RkPgogICAgICA8ZHQ+U2hpZnQtQ3RybC1GIC8gQ21kLU9wdGlvbi1GPC9kdD48ZGQ+UmVwbGFjZTwvZGQ+CiAgICAgIDxkdD5TaGlmdC1DdHJsLVIgLyBTaGlmdC1DbWQtT3B0aW9uLUY8L2R0PjxkZD5SZXBsYWNlIGFsbDwvZGQ+CiAgICA8L2RsPgogICAgPHA+U2VhcmNoaW5nIGlzIGVuYWJsZWQgYnkKICAgIGluY2x1ZGluZyA8YSBocmVmPSIuLi9saWIvdXRpbC9zZWFyY2guanMiPmxpYi91dGlsL3NlYXJjaC5qczwvYT4uCiAgICBGb3IgZ29vZC1sb29raW5nIGlucHV0IGRpYWxvZ3MsIHlvdSBhbHNvIHdhbnQgdG8gaW5jbHVkZQogICAgPGEgaHJlZj0iLi4vbGliL3V0aWwvZGlhbG9nLmpzIj5saWIvdXRpbC9kaWFsb2cuanM8L2E+CiAgICBhbmQgPGEgaHJlZj0iLi4vbGliL3V0aWwvZGlhbG9nLmNzcyI+bGliL3V0aWwvZGlhbG9nLmNzczwvYT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/theme.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRoZW1lIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbmVhdC5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL25pZ2h0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL21vbm9rYWkuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvY29iYWx0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL2VjbGlwc2UuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvcnVieWJsdWUuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFRoZW1lIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CmZ1bmN0aW9uIGZpbmRTZXF1ZW5jZShnb2FsKSB7CiAgZnVuY3Rpb24gZmluZChzdGFydCwgaGlzdG9yeSkgewogICAgaWYgKHN0YXJ0ID09IGdvYWwpCiAgICAgIHJldHVybiBoaXN0b3J5OwogICAgZWxzZSBpZiAoc3RhcnQgPiBnb2FsKQogICAgICByZXR1cm4gbnVsbDsKICAgIGVsc2UKICAgICAgcmV0dXJuIGZpbmQoc3RhcnQgKyA1LCAiKCIgKyBoaXN0b3J5ICsgIiArIDUpIikgfHwKICAgICAgICAgICAgIGZpbmQoc3RhcnQgKiAzLCAiKCIgKyBoaXN0b3J5ICsgIiAqIDMpIik7CiAgfQogIHJldHVybiBmaW5kKDEsICIxIik7Cn08L3RleHRhcmVhPjwvZm9ybT4KCjxwPlNlbGVjdCBhIHRoZW1lOiA8c2VsZWN0IG9uY2hhbmdlPSJzZWxlY3RUaGVtZSh0aGlzKSI+CiAgICA8b3B0aW9uIHNlbGVjdGVkPmRlZmF1bHQ8L29wdGlvbj4KICAgIDxvcHRpb24+bmlnaHQ8L29wdGlvbj4KICAgIDxvcHRpb24+bW9ub2thaTwvb3B0aW9uPgogICAgPG9wdGlvbj5uZWF0PC9vcHRpb24+CiAgICA8b3B0aW9uPmVsZWdhbnQ8L29wdGlvbj4KICAgIDxvcHRpb24+Y29iYWx0PC9vcHRpb24+CiAgICA8b3B0aW9uPmVjbGlwc2U8L29wdGlvbj4KICAgIDxvcHRpb24+cnVieWJsdWU8L29wdGlvbj4KPC9zZWxlY3Q+CjwvcD4KCjxzY3JpcHQ+CiAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgIGxpbmVOdW1iZXJzOiB0cnVlCiAgfSk7CiAgZnVuY3Rpb24gc2VsZWN0VGhlbWUobm9kZSkgewogICAgdmFyIHRoZW1lID0gbm9kZS5vcHRpb25zW25vZGUuc2VsZWN0ZWRJbmRleF0uaW5uZXJIVE1MOwogICAgZWRpdG9yLnNldE9wdGlvbigidGhlbWUiLCB0aGVtZSk7CiAgfQo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/vim.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZpbSBiaW5kaW5ncyBkZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4va2V5bWFwL3ZpbS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWaW0gYmluZGluZ3MgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KI2luY2x1ZGUgInN5c2NhbGxzLmgiCi8qIGdldGNoYXI6ICBzaW1wbGUgYnVmZmVyZWQgdmVyc2lvbiAqLwppbnQgZ2V0Y2hhcih2b2lkKQp7CiAgc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CiAgc3RhdGljIGNoYXIgKmJ1ZnAgPSBidWY7CiAgc3RhdGljIGludCBuID0gMDsKICBpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KICAgIG4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CiAgICBidWZwID0gYnVmOwogIH0KICByZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGhlIHZpbSBrZXliaW5kaW5ncyBhcmUgZW5hYmxlZCBieQppbmNsdWRpbmcgPGEgaHJlZj0iLi4va2V5bWFwL3ZpbS5qcyI+a2V5bWFwL3ZpbS5qczwvYT4gYW5kIHNldHRpbmcKdGhlIDxjb2RlPmtleU1hcDwvY29kZT4gb3B0aW9uIHRvIDxjb2RlPiJ2aW0iPC9jb2RlPi4gQmVjYXVzZQpDb2RlTWlycm9yJ3MgaW50ZXJuYWwgQVBJIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIFZpbSwgdGhleSBhcmUgb25seQphIGxvb3NlIGFwcHJveGltYXRpb24gb2YgYWN0dWFsIHZpbSBiaW5kaW5ncywgdGhvdWdoLjwvcD4KCiAgICA8c2NyaXB0PgogICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLnNhdmUgPSBmdW5jdGlvbigpe2FsZXJ0KCJTYXZpbmciKTt9OwogICAgICBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1jc3JjIiwKICAgICAgICBrZXlNYXA6ICJ2aW0iCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/visibletabs.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZpc2libGUgdGFicyBkZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTt9CiAgICAgIC5jbS10YWI6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICJcMjFlNSI7CiAgICAgICAgZGlzcGxheTogLW1vei1pbmxpbmUtYmxvY2s7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYmxvY2s7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxlZnQ6IC0xLjRlbTsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVmlzaWJsZSB0YWJzIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiNpbmNsdWRlICJzeXNjYWxscy5oIgovKiBnZXRjaGFyOiAgc2ltcGxlIGJ1ZmZlcmVkIHZlcnNpb24gKi8KaW50IGdldGNoYXIodm9pZCkKewoJc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CglzdGF0aWMgY2hhciAqYnVmcCA9IGJ1ZjsKCXN0YXRpYyBpbnQgbiA9IDA7CglpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KCQluID0gcmVhZCgwLCBidWYsIHNpemVvZiBidWYpOwoJCWJ1ZnAgPSBidWY7Cgl9CglyZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGFicyBpbnNpZGUgdGhlIGVkaXRvciBhcmUgc3BhbnMgd2l0aCB0aGUKY2xhc3MgPGNvZGU+Y20tdGFiPC9jb2RlPiwgYW5kIGNhbiBiZSBzdHlsZWQuIFRoaXMgZGVtbyB1c2VzCmFuIDxjb2RlPjphZnRlcjwvY29kZT4gcHNldWRvLWNsYXNzIENTUyBoYWNrIHRoYXQgd2lsbCBub3Qgd29yayBvbiBvbGQKYnJvd3NlcnMuIFlvdSBjYW4gdXNlIGEgbW9yZSBjb25zZXJ2YXRpdmUgdGVjaG5pcXVlIGxpa2UgYSBiYWNrZ3JvdW5kCmltYWdlIGFzIGFuIGFsdGVybmF0aXZlLjwvcD4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIHRhYlNpemU6IDQsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBpbmRlbnRXaXRoVGFiczogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LWNzcmMiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/doc/baboon.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAXsAAADcCAYAAACRUAHpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADVAAAA1QBkANg0QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7J13fBRV18d/d9MTkpBASKEkQCKhBpBAhFAEjKAgJXREelFRAUUExcKj74M8gkp/lEeKSBdQIkWQEjpSAgKhh04CIY20TbI57x+TXbJkd2dmd3Znk8z38zkSd285M3Pv2Tvn3nsuIyIoGIcxxgBUA+ALoKoZ0pyIrthecwUFBYWnOMqtgJwwxtwB1AQQVPLvs3/XBBAIwNmCapoCUIy9goKCrFRoY88YcwQQCqBhiYRB36BXtYEaTQH8aoN6FBQUFIxSIYw9Y8wDQAM8NepaCQXgJKNqANBE5voVSsEYqw7gZQBRRPSO3PooKNiKcmXsGWO+ABqhrFGvA4DJqJopmsqtQGWmZM7leQCvlEgkABWAI3LqpaBga+za2DPG/AF0BNCpRBrKqY+ZhDLG3IgoT25FKguMsaoAYsAZ924A/A0ku2xTpRQUZMaujD1jLAD6xj1cTn0kQgXubeSU3IpUZBhjEXg6en8BgANPFsXYK1QqZDX2jLFA6Bv3BnLqYy4uLi5Qq9WmkjSFYuwlhTHmBaArOOPeHdykuxgUY69QqbCpsS9xy3TGU+P+nC3rtxRfX1+0aNECnTp1QqtWrfDcc88hMDAQjo6OCA4OxoMHD4xlVfz2EsAYawzOsL8CIBqWTb5flUQpBYVygtWNPWOsDoC+AGIBtAXn1rBr/P39ERkZiY4dO6Jly5YICwtDjRo14OLiYjRPy5Yt8ccffxj7WjH2ZlCyyqoznrpn6khY/AnG2GkAx7VCRLclLF9Bwa6wirFnjIWCM+6x4FY/2CW1a9dGVFQUOnTogObNm6N+/fqoXr06nJzEDxg7depkytgryy9FwBjzBDAfwGAAxn9hLcMd3NtBdKl6kwGcwNMfgL+JKMtK9Sso2BTJjD1jrAk4494XQDOpyrUUlUqFkJAQREdHIzo6GhEREQgJCUG1atXg4MA3hyecli1bmvo6kDFWjYgeS1ZhBYUx1hLAOnAb4GxNAIDXSgQAiDF2CU+N/wkA54ioSAbdFBQsglkSG4cx9jyejuBl9b87OjoiLCwMHTp0QNu2bdG0aVPUqVMHPj4+UKnEeY6Kiopw7do1/PPPP7hw4QIuXryIwsJCzJ07F/Xq1TOY586dO6hTx6SX4UUi2i9KkUoGY+xdAP+BZeEprE0eAK375wQ4989NWTVSUBCAaGPPGAsHMBLAQADB1lCKj+DgYLz22mto164dGjdujNq1a8PLywvc/hnhqNVqXLlyRWfQL168iNzcXDRv3hxBQUHIyclBRkaGTlQqFWbPno3atWuXKaugoMCkTx/Au0S0QNyVVg5KNsstx9MRdXkjBcB4IvpNbkUUFIwhyNiXLHMbCM7Iv2BtpUqjUqnQokULDBo0CF27dkWDBg3g5uYmqoz8/HxcvnxZz6hfuHAB169fh0ajKZPe2dkZUVFReOmllzBmzBgEBAQIqsfPzw+pqanGvv6RiMaJUrwSwBiLBrAGQNlf0PLBbQBjiGi33IooKJjCqLEv2WbeCcAocH54d1so5O7ujhdffBEDBgxAdHQ0goODBfvW8/LykJiYqGfQL168iBs3bqC4uNgsfVxcXPD666/jgw8+QHi46T1eXbt2xV9//WXs62NEZNMfSnuGMaYCMB3AF+DfAGWPEIAfAEwloidyK6OgwEcZY88YCwYwAsBwAHWtrYC/vz969eqFXr16oVWrVvD29oazszOvS+bq1as4duwYLly4oDPqN2/eNNuo88EYw+uvv44FCxbA29vbYJp//etf+PTTT40V8QSAN8l4gECJgd0EoI9cOlQg1ADqEpHRzRUKCvYEIyIwxtzAjd5HglvXbLWgYg0bNsSAAQPQpUsXBAcHw8fHB56enibzFBUVISEhAYcOHdJJSkqKtVQ0SUhICFavXo127dqV+W7nzp3o3r27qex15Z7MK3nW+wG0llOPCsI8InpfbiUUFITAACwAMAyA4eGqBTg7O+OFF17Aq6++imbNmqFOnTqoU6cOPDw8TObLycnBsWPHdIb92LFjyM7Ollo9XhhjOtdNeno60tPToVar4eDggI8//hgzZ86Eo+PT1as3btxA/fr1TRX5GhFts67W/DDGagA4Bhu8uVVwcgCEEJHRiRoFBXvBEUAEJDL03t7eiIqKQnR0NBo1aoSwsDA0aNAAzs6mV9I9fPhQb9R+5swZFBXJv5Q5NDQUn3/+Ofr3769zK+Xm5iI9PR1paWlIS0tDjRo1dOkDAwP5imwKQHZjD24XsxKF03I8AEwG8LHciigo8MEAfApukkw0fn5+iIyMRIsWLdCoUSM8//zzaNCAP5bZ1atX9Yz7lSvCT+1zdHSEv78/cnNzkZ2djcLCQnNUF0Xnzp2xfPlyvnX0AICqVasiMzPT2NfriGiwpMqJpCR8xV/gDnZRsJwsAMFElCG3IgoKpmAA2gE4xJdQpVLBz88PERERaNasGV544QW0a9cO/v6GQoU/xRJ/u6+vL2JiYtCoUSM0atQIDRs2RFhYmF44g4KCAmRnZyMzMxMXL17EmTNnkJCQgISEBNy4cQNSzYd6eXlh3rx5GD16tMl00dHROHz4sLGvLxCRbKETSsJY/AVpY8woAJ8S0b/kVkJBgQ9HcKMTMiVfffUV5eTkEB/Z2dm0Z88e+vzzz6lr165UpUoVk+UakqioKFq5ciXl5eXx1meKzMxM2rFjB40ePZqqVasmWg9D0rdvXyooKDBa58cff2wqfyEAZyKCrQVAYwAPpLgHipSRVABV5HiuiigiVLj/cH5kkw168uTJZIiUlBT69ddfafLkyRQZGUmOjo5md5ohQ4ZQQkKCwXospbCwkHbt2kVjxowhX19fizr3oEGDSKPRGKxn69atfPmbGXsY1hJwx/Kl2oFRrMjyga2fqyKKiBHuP8B7fI05IiKCtOTl5dGoUaPoueeek6SjhISE0M6dO8lWZGZm0qRJkyz6YXrzzTcNln358mW+vEPIlg+Yc9Nl2IExrOjyAICrLZ+tIoqIEe4/XAhek42ZMUapqamkJTg42OIOolKp6L333qPs7GySg3/++Yc6duxotv4zZ84sU2Z2djZfvn+TrR4u0AVAth0YwsoiEw08AwcAL4ML2fwVgIng9rREgYstJYtbT5HKJ0//EODP3bhxI2kZMWKERR3D0dGRVq9eTfbA5MmTzb6O77//vkx57u7upvLEkS0eLNADQL4dGMDKJLcBOJXc/9YAvgeQLCBfKoBzAHaBCwhX+kfhBSg/CopIIE//AFbzNcrSrouVK1ea3SlcXFxo69atZC/k5eVReHi4Wdfi6OhIiYmJeuW1atXKVJ5bZO2HCgwAUGAHxq8yyq/gjjy0RtnP/ij8H7gfhVg8/VFwsXb7UqR8ytM/uHg4JhtbeHg4abl9+7bZjTYuLo7sjSNHjpBKpTLrel555RW9sqZMmcKXx5us9UC551hkB0ZPEfkkFTaeG1LE/uXpH1yIWd6GdO/ePdISGhoquiF6eHhQcXEx2SNjx441u4Pt2rVLV8769ev50rcjazxM4G0AxXZgbBSRV+4CcLNGG1Ok/IruCCciugOAdyvrvn37dH+/+OKLfMnLkJubi5ycHNH5bMGnn37KdwCJUebOnav7u3HjxnzJJT+AnDE2DcBCWDGInUK5YRYRKeEwFPR49ry+PXwZ9u7dq/vbHGNPRDh79qzofLagVq1aePPNNwWnDwsLQ1gYd1Tq3r17UVBQAAAGT7J6Bkl30TLGOgKYLWWZClw4kKpVq8qthliuAvhJbiUU7A+bG3sA+P33383KZwtmzJiBKlWqCEqrVqvxzz//4IcffkBAQAD++ecfAICnpydf8DepR/ZyHM5doXBxcUFUVBTee+89TJs2Df3794erqysyMspdyJuZpByIrmCI0j4dAFUBaMDjE7xx4wZpMWcVS/369cme4Ql5oCe///47EXErekqvymnSpImpfGkkoS8OXCA7uf3E5Urq1atHQ4YMoe+//56OHz9OiYmJ9OWXX1KjRo1k180C0R6QI7t/WBH7k7IfACf4GtWyZctIy1tvvWVWwzxz5gzZK+np6eTt7S3oOp5diaPlzTff5Mtbk6R6iNxru9yGxm7F29ubunbtSp988glt27aNHj58SEREycnJNH/+fIqKipJdRwnlBABfqdqWIhVHyn7Ard012aCGDBlCWjZu3GhWo/z444/JnpkxY4ag63BycqLMzMwy+X/++We+vN1IqocI7LYDI2MX4uDgQBERETRu3Dj66aef6MKFC3qrvzIzM2nFihUUExNDDg4OsutrJTkHwF+q9qVIxRBDZ9B2BhcG1yiBgYG4f/8+ACA1NRU1atTAs+XwERYWJiqOva1JTU1FcHAwcnNzedOuX78eAwYM0PssISEBLVq0MJXtQyL6j2VacjDGLgHgP0hAZlQqFVxcXKwirq6uqFWrFlq1aqV3ElpmZiYOHz6M+Ph4xMfH4+TJkzY5A8EOuAKgK3Gr7BQUDBp7FwDpANxMZbx48SIaNmwIAGjWrJluclIMe/bsQZcuXUTnE8uDBw+wf/9+HDhwAAcPHsSTJ0/g7OysMxTjxo3DhAkTyuSbMmUKvv32W97yhw4ditWrV+t9lp6eDl9fX1PZfiaiN0ReikEYYzkA3KUoy1xatGiB+fPnw9PT06AhdnFx0TvC0Vo8fPgQBw8eRHx8PA4ePIizZ89a7RD6csAtAF2I6LrciijIT5neR0RqxthhAF1NZdy7d6/O2L/44otmGfuFCxda3dgvWbIEb731lsk0R48eNWjsP/jgAyxevBhqtdpk/v3795f5rGrVqnBwcIBGozGWTZLll4yxapDZ0L/22mtYs2YNPDw8MG/ePKSnp0Oj0aC4uNjgv6a+syRNVlYWrl27JuetsDeCARxkjHUlootyK6MgM4Z8OwCmgccv2LdvX9IiIIa7Uf/qrVu3SEqK1foHi/z1119l6g0JCaEWLVpQ27ZtqWvXribnDyZMmCDoWkpHBNXCEwI6H4ADWeiHA9DcnHsvlbz//vt6sf0jIiLk9lcrUlYeAWhpaVtTpHyL4Q+5wy5MNiBfX1/dxFdaWprZcWWmT59OQsnMzKRDhw7R4sWLae7cuWW+f7JiPd2p1ZIKzl/SfZaRkUFeXl7Uq1cvWrJkCSUlJQmuj4goKSlJUNz7v/76q0xeAZFBww3dfzECoKccBsTR0ZF++OGHMtccExMjt2FTxLBkwEphOhQpH2L4Q26z1WO+BnT69GnS0rJlS7MaoZ+fH+Xn55MxMjMzacqUKRQSEqKXz8nJiTIyMoiIqDgvn1LfnkFJCKQkBNJt/2ZUcPGKrozCwkKj5QshNjaW9zrmzZtXJt+yZcv48vUX8pBMCYC3bG04qlatSnFxcXT9+nU6dOgQHTlyRHfNw4YNk9uoKWJcssFN2spueBSxvTy7gxYAQETFAPYZ+q40UuymffToETZs2GDwuzVr1iA8PBzz5s3DzZs39b4rLCzEjh07AAD5B4/jyaLluu80KY/waMhTP72lE4Nt2rThTXP+/PkynzVr1owvmxQ7aXljM0hNdnY2evTogfr16+Odd95BnTrc+eXHjx/Htm3bbK2OgnA8AMQxxnrKrYiC7TFo7EsQFTqhc+fOZiuhNdpaLl68iBdffBFDhw7FgwcP9L6rXbs2JkyYgLi4OPTq1QsA4BQeWqbMgoQLKLp9z2ydStO8eXPeNHfulF3hFhISwpetXBr7oiJuN37Pnj1x8OBB1KxZE/v370fXrl3LY3iByoYLgM2MsUFyK6JgY4wN+QGEgue10NPTU+ciycrKMvtM1/79+1Np+vXrVybN6NGj6ezZs2SQ4mK66VFf58bRStbiFQaTHz58mNasWWPSfVSahw8f8l5Do0aNyuQrKioixpipfNcsfTUDcMCce26pvPfee7qJ2e3bt5Orq6vcLgpFxIkGwChL258i5UdMfwnc5Gs0R48eJS1t2rQxq+HFxsZSaXbs2KH7rmbNmrRjxw7i416Ll8oY++RXXi+Tbu7cubqyo6KieMvVEhQUZPIaqlatajBf3bp1+Tqcu7H7L0QA3LClkXBwcKCFCxfqrm/Tpk3k5OQkt+FSxDwpBtDWkvanSPkRU24cgGcnLSCN3/7ZTS8xMTGoU6cOhg8fjvPnz6Nbt268ZRhy5eTvPQTK1Q/rXXrz07Fjx8rMBRiDz5WTkZFhcLdt69atTWVTAeANfm8MxhgDUMvc/GLx9PTEtm3b8PbbbwMAVq1ahYEDB1aWHakVEQZgntxKKNgGPmNvk5DHxI1QnyqlUuHw4cNYsWKF4Hjihow95auR99chvc+GDx+OTz75BN9++y0mTJggJPY8AGF+e20IidK0b9+eL5slfvsAAE4W5BdM7dq1cejQIXTv3h0At1ltxIgRpjaNKZQP2ij++0qCqWE/gBrgOebO1dVV5/vOyckx65X+tddeI7Fol11qyV7/Wxk3ThICKXX8h6LLNsS2bdt4r2P//v1l8h06dIgv37dk5msZgNZi77U58vzzz9P9+/d11zRnzhy53Q+KSCtJUA4qr/BicmRPRA8BmIyDkJ+fj6NHjwIA3N3dBS1TfBYxsUvy8vLQpUsX+Pj4oFOnTsjOzgYAOIUbPr8jN263YB20q0wM0a5dO3BeE+MYGtnXq1ePr2pLRvZWX4nTrVs3xMfHIzAwEADw2Wef4cMPP7R2tQq2JQTAe3IroWBd+Nw4gA1cOWKM/dq1a7F3714QEQ4cOIC1a9cCAJzC6gKqspejuZeMgoQLJsvMzs5G7969sXPnTqNpfHx8eM+WvXev7FJPPz8/k3lgx8Y+IiICGzduhLs7F3pnypQpmDVrljWrrDQ4ODjIrcKzzGCMVZdbCQXrIcTYW32SVoyxZ4whICAA0dHRCAoK0m2YYm6ucKxT02Ce1M1/aN0eZdizZw9atmyJbdu2Yf369Sbrjo6ONvm9oZG9o6MjatY0rFcJNRhjNUwWbByrGfuAgABs27YNVapUQXFxMcaPHy8oAqiCMBo0aCBkIGBLvAF8LrcSClaEz88DbtddAUz4/JycnCg7O5uIuOP5xK65fnadvbkkdxti0G8fH9KSQkNDafTo0TR9+nT69ttv6f/+7/+oRYsWenp4enpSXl6e0fJXr15t8jratWtnMN9rr73Gdw868z0HI89mg5j7LFTc3NzoxIkTRMSFmhg6dKjcPuUKKd988429HaBSCAniNSlinyLUqMTzNZTSa+FffPFFUY1s4sSJJAWPJ31q0NgnIZDCa9cRpMuvv/5qtPybN2/y5r9w4UKZfN988w1fvveEPAcDz+Wo1B2eMUYbN24kIiK1Wk29e/eWrFw7MGZ2JQMHDqSZM2fKrscz8rs5bVER+xchbhzAyn57f39/UemN4dSgvtHvXnbwMPpdaUy5coKDg3mXav7www9lPmvZsiVfteb67auZmc8oX375Jfr164fc3Fz07NkTW7dutbjM6Ohoe/RRy86mTZswaNAghIeHy6kGAfgZgPaAk56MMfPWUCvYNUKNvVX99gEBAbxpHjx4YHK1DAAUhBjfX9T55iNBusTFxSEnJ8fo93x++59//hn5+fl6n4WFGV4pVApzjX04gIbgQiZYzBtvvIEZM2bgyZMn6NatG/7880+LylOpVPj8889x9+5d3mdXGdFoNFiwYAGWLVvGu9JLCFWqVDEnGwPwGxGFgpsDGgagkcXKKNgfQob/4E60yoKJ1z+VSkXp6elERFRQUEDu7u6CXx1///134uPgwYMUExNDd+7cKfNdamoq/e9//6PQunXpKjPsxrmBQAp0ryJIn7Vr1xrVY9GiRbz5x44dq5dHrVbz5clGyRGR5giAmULvtTGJjo4mtVpNjx8/psjISIvdAW5ubrR582Yh8xWVWlxdXSk5OZnefPNNScrq0qWLOXnjrOE2UMS+RHhCYBtfo9myZQtpEXOIxfHjx4mPpKQkArhDM3r37k1TpkyhTz/9lDp16qQ3ybWlbgujfvs3HDxN6uHi4kIAqHfv3kb1OHfunKBrGjduHKnVal0+Pz8/vjz1zX6IQA9LjES9evXo0aNHlJycTE2bNrXY6Hh7e9ORI0do3rx5VjGQFU0++ugjun79uiRldezYkfr27Ss2XxGAQLmNkSLWFeEJuU0XJhvNO++8Q1r+/e9/C25sQo4mLCgoEHQa1rTW7Y0a+9XwLZO+dJm1atUigDP6mZmZBvXQaDTk61u2HEMyZswYXT4BP369zX6IQE1zjUPVqlUpMTGRbt++zXeMouDyTpw4QdeuXSM3NzfJDGJFFm9vb0pLS9MNNiyVRYsWiV4kAWCq3MZIEeuKUJ89YCW/vYODgyCfvZOTE2rU4F+OfjDrsdHv2sAFXioHXXkAt+vX1dUVAJCSkoKIiAio1WqjE5MqlQqxsbG8egDAkSNHdH+HhpaN3fMMZh9ATkT3wJ0zKgpHR0ds3LgRTk5OaN++Pa5cuYIaNWrAx8fHLD18fHywZ88eREZGYty4ccjLy+PPpIDMzEz8+OOPqF/f+AIDMXzyySdYunQpWrRoISbbSEkqV7BfxPwyAHgAnhFCSkoKEXHrsz09TbtNAFBERAQJRYgv2cHBgU7D3+jovje40SZjjKpWrUoAqGHDhrr8PXr0IAD0yiuvGNXjwIEDgkZLzs7Ounj/8+fP50u/3pJfbQC7hOhUWpYuXUpERPHx8XTq1CnKysqiwsJCqlmzpujRpIuLi25tvoDjGBV5RgIDA6l79+6SlTds2DC6d+8eBQYGisnXxpYjTUVsK2JG9oCA0f2+ffsAcKNGAREf+UIA61GrlvHVNtrVDBqNBvsDvY2miwE3iicieHl5AdAPaaDRaBAYGIjdu3fj8WPDbwnt27dHcHAwr74FBQW4fp1b0fb888/zJbf01KozYhJPmjQJ48ePB8BdT8uWLeHp6YmNGzcaDPvAx7x58xAZGYnk5GR88MEHovNXdh48eICTJ09KVt7q1avx4MEDbN68Gc7OzkKzKaP7CoxYYy/5UYVijL12jbuqVAwc7XIzX1/fp0q6kNEyOsIFLuB+GDw9PQFwHa1pU87W7tu3D4MGDUJhYSE+/vhjg2UwxjB8+HBefV1dXXUhmgWstX+OMebCW6hxBBv7Hj16YO7cuQCgCySnxZyQCAMGDMBbb3Fn/k6cOFE5mtBMHj0S7YkzChHh/fffR1RUFJYsWSI02yDGmKtkSijYF2JeA8CtwzX5KhgaGkpaTp06ZTItY4xu375NRNzySUPLKkujDa1bemVLSEgIAaAGDRroPnN3caFEBBh15QwEtyy0du3auhOoxo8fr8s/d+5ccnBwIMYYHThwwKAuGRkZVL16dd5X41WrVunyaN1GJqS5ua9oAJ7j0wUANW3alPbu3UszZ86kiIgImj9/vk6/w4cPm+UySEhIICKiY8eOye4OUURftCvk3n77baF5BtvCpaCI7UV8BuAyX4PRGnCNRkM+Pj5G03Xu3JmIiFauXEnVq1enM2fOkCl++eUXAkDPPfecLm5+q1atCAA1adKEvL29dWX/CB+jxv5P+BErSffSSy8RAJo8eTJ5eHgQABowYAD16dOHAO5HxNhZtQL88PT660+PRmzfvj1f+mFmP0huc8wTPn1Kr/ioUqWK3qojQ2f/8knVqlV1Z9F+8sknshs3RfQlLCyMCgoKKC8vj+rVqyckz59yGyVFrCNi3TiACFeOSqVChw4djKZr06YNOnfujOHDhyM1NZXXD6512WRlZel2pVavzkVlvXr1Kl544QVd2r+8jB/gFAZHdATnMdG6cvbs2YNBg7gDe7Zv344vvvgCXl5euHz5Mv71r38ZLGfChAlo1qyZSZ0TExN1f3fs2NFkWljgtyciApDAl06tVuv+HjZsmG7e4tatW9iyZYvoetu2batzq+3YsUN0fgXrcvXqVSxevBiurq6YP3++kCxdGGNWPydBwfZY1dgDpv32s2fP1k3oenp68i758/Dg4ts8fvwYDRs21OVzdnaGWq3Wm8DdXfAEpgInjwFXVn5ODqpVq4Z//vlHp2t2djZmz56NpUuXAgDmzJmDc+fOlSnDyckJv//+u8kloZcuXdKOvIUsMTV7+WUJoiZptWfJAsCCBQvMOmJQ+wObkpKC06dPi86vYH1mzZqF9PR0vPrqq+jZsydfchWAN2ygloKNMcfY7wNM2lHB6+21RhCAoDXG2kM0CgsLdZO1KSkpukNFtKN8AHicn4fTKDBaVju4oBGccHD/AQwePBgAcPr0ad1KkjVr1uDy5csYO3YsCgsLMWbMGINx94ODg7FlyxbdWv1nycnJwZ07dwBY/dQqQISx79Spk+6+ZWdnY9myZWZVqI3Vf+DAAb3nqWA/pKWlYeXKlQCA6dOnC8kywpr6KMiDaGNPRBkATplKc/fuXVy9ehUA0KRJEz0jbAxT7h4tWmMPQDeavnPnju4wcEdHR70Dyv+AfkCyZxkLDzxR5+PWlato164d5s6dC39/f/Tr1w8A8MUXX6B169Zo2LAh/v77b6xatcpgOW3btsX+/fuNRu+8ePEiAKBRI974UrUYY+btaOIQbOxLj+p/+uknZGZmmlWh9jmcOSPqpULBxvz1F7dqmu+0tRJCGWP866YVyhXmjOwBEa4cxhg6derEW2BMTAxvGq0bB3gaFvnevXuIiIgAwPnHS6/t/81BjUIYH232gBsC4IBtf+5Chw4dUK1aNUydOhWRkZE698T06dN1vvxFixYZLatNmzY4ceKEQR++1m9fp04dvWswgiWunLMAlvMlqlmzJnr37g2AOyVMoC/XINrnkJDAO12gICMHDhxAUVERvLy8EBQUJCTLCCurpGBjrG7sAf7QCU5OTkImL/VG9tqJxYKCAt1h2ImJiWjXrp0uTbqmCHughjEcAYwAV+a38+ZhypQpYIxh2rRpGDJkCAAg3H5yLgAAIABJREFUNTUVhYWFAICTJ0/i77//NlpenTp1cPjw4TJ+Ua2xZ4wJiV1u6STtWACbTKUbP3687jjHbdu26TZ+mYN2ZK8Ye/vmyZMnuk1bderUEZJlAGNM2CEQCuUCc439YQAmA5/s27dP58Pl21zVoUMHQbG4Sxt7R0dH3a5Zbd4bN26UiUGzAbkmyxwMd3iCIV+txurVq3W7Sg8ePKgbAV29elVXN98GlSpVqmDr1q348MMPdZ+VXpGj3bxlAov89kSkATAUgMHT052dnTFu3Djd/1t6rqyPjw9SUlKQnJxsUTkK1kfrynFxEbR3rwqAftbUR8G2mGXsiUgNzuAb5dGjRzh//jwAIDw83ORKlEmTJgmqt/QPglqt1v2/9t/8/PwyE6UHoUYyjK8y8YIKb4PLn5iYCCcnJ4SEhCAuLk7nktm+fbsuqNS6deuQnp5uUk+VSoWvv/4aK1asgLOzs85nD3AHTfNg6SQtiKgAQF8AB5/9LjY2Vud6OXPmDA4csOzcExcXF4MrlRTsD+3btkBjDyjhEyoU5o7sAYlcOc2aNUOPHj0EVejo6KhbF5+bm6ubjFWr1bpwCc+uCNEA+NX0SwhGwAM1wUXDXL58OVq0aIHc3FxdbJwnT57gyZMnAIC8vDysWLFCkL7Dhw/Hn3/+ifz8fDx8+BAAdEtGTWDp8ksAABHlgYtzrzeZPnHiRN3f3333ncX1ODs748qVK4LSCliNpGBFjhw5gvz8fDGxcjowxpSHVkGQ3djPmDFDVKXVqnHHrubm5sLbmwt4lpGRoVtjn5KSohfYDAA28hh7FzBMBfcjkp2drXO7aJdMAsD9+/d1fy9dulTwMsOOHTtiy5YtuHz5MgBBK3K8pdrUQkRZALoBuAgALVq0QNu2bQEAycnJWLdunUXla0eIQox9+/btERUVZVF9CpaRn5+PkydPilkiywAMt6JKCjbEEmN/BkCaqQTx8fG6jTqGjH1YWBiioqIQFxcnePemdgRfemSfnp6uM/bXr18vs2b/FopwwsSaewB4DW5oAW7XrdYwp6Sk6L4vHQHzypUrRiNiaklPT9ety4+JidHpV69ePSGv0Ra7crQQUSqAlxwdHe+UXm65ePFiFBSYvid8iDH2s2fP1t1XBfk4c+aMyTOWDTCcSXFAroLsmG3siagY3AYro2RkZOjWX4eGhuo2Qmm5fv06QkJC0LNnT723AFOUNvaGRvbXrl0zuEHrZ56JWgZgI6pjBXzRg1zhAqY3Air9t7Ozs+4NwxhpaWlo1qwZNm/eDCJC3bp1AXCHtTz33HN8lymZsQcAIrofGhr60pAhQ54A3AhPuzvYErTuAD5jX6dOHURFReHSpUsW16lgGadPny4T6ZSHYADCTiJSsGssGdkDFrpySu9IHTZsmKAK+Yz9+fPnDS7j3IE83C+ZqNWUyLM4gAuBPB9VcQI1MBFV4I6yg5qgoCDwDXbq168PFxcXxMbGIjIyEidOnNB9J8CVI6mxB4DExMTLbm5ucwEu1rkU4XRTU1Nx9OhR3Lp1y2S6AQMG4M6dO2JHlApW4MyZM2KNPaBM1FYIZDX2WhwcHIQc7gFA32df2o2jXTmTmJgINzc3vZj3AGfcpyETI5GGZkjGc3iA6chEnpFNV15Q4X14Yj9q4BXor/DhG9VrGTBgAADg1KlT6Nu3r+5zAbHtJTf2JcwloodSTMxqGTVqFG9MnYEDB+otP1WQj4sXL/K6IA0QyxjzsoY+CrbDImNPRNcAmBzWHTp0SLcpyZix9/f3h4ODg6A6tSP7rKwshISEAODWD3ft2lVn/H/88UeDk4GHoMZ+qOEFFZbAB/+GN9wMjNxL4wcV5sNHz+AnJCTg9u3bvLr2799f9wZw7949ZGVlARC0/DKcMebIW4F4svv163f8woULkhXI55oJCQlBq1at9JafKshHYWGhOW91bgAGWkEdBRti6cge4DmqMCcnB8ePHwfABQ0ztPxOG0xLCFpjv3XrVrz22mtwc3PD1atXsW7dOt1B4PHx8QZH3ypwyyz3wE93PKEh0lGMw1DjQYmzxwHA9/CBb8nt0mg0gnze9erV043ugaeGUcDh487gDiORFMZY2y1btrwidbmmaNWqFQAoI/vyzwi5FVCwDCmMvcWuHIGxOgBAN2LPysrC8uXLdb7+WbNm6Yw9AN2GLi2N4YStqI7P4AUPE6P5kyhAd6TidaShDx4jtSTApyOA+ng62F62bJlebHhjfPXVV3By4lb5aEe3YWFhunAFJpDUlVMSYG0tEQl7hZIIbeAtxdiXe9oyxnhfSRXsF6lG9iYX7vIZe60xFELbtm11IQcWLFiAQYMGgTGG27dv4/Lly7ofjqSkJJ0LJQrO2IJqaArT9WxFHgbjMWpAhcnwxH/grRvNA0C1Un8/evQI69ev59W3fv36mDBhAoCnBs/Z2VnI6F5qv/1PAAQFRZESrbFX3DgVAsNhXRXKBRYbeyJ6COAfU2mOHTuGvDxuY5MhY19UVCSqTq3xzM3NxZYtW9CtWzcA3Fru0hOhRARvqPBf+MCJxzd/GxosQTZWoRp+R3W8iypoDxe9G/QPCvXyLFy4UJC+M2fOhLe3t97oVsBOWsmMPWNsMIDeUpUnhiZNmiA/P583xISC3fMYPCFSFOwbKUb2AI/fXq1W4/Bhrp0EBQWVWWeuncAVyuuvv64LFfzf//4XQ4cOhaOjI1JSUrBr1y69lTj94Qavksu8Bw3eQwbeQjpmIBMbkYv8kpeSKmD4DdXxAgxvJU+GBveeWbD5999/C4oY6efnh6VLl+oZe1stvyzZEPOxFGWZg7e3t3KoScUgriTInkI5RSpjb9FRhWKNvZeXl85XX1BQgPfff18Xn/3q1at66/cH4GmkzK/xBHtKDjSpC0c8AeEauLcKX6jgamL0vxBl1yY3a9ZM0AlbADBo0CB06tRJ5+cXYOxDGGP8oUD56Q1A0IkV1uDgwYOKsa8YbJVbAQXLkMrYxwMwabFN+e3FGnuAc9loDa12RP9sgCc/qBBWalL1DbjjBPyxGD4YCw+Mggea8PjxAeAsCrHWwA7cadOmidL5+++/121AEuDGYZAmKJpso3qAe+6KsS/35AH4U24lFCxDEmNPRNkAjplKc/LkSd0682dPrhLrswc498CmTZt0IY2fPHlSJtZLG+jHoGkFZ5MrcQzxt1Mxxnvklzl0t27duhg4UNzSY3d3d93EbHh4eJmNXwawyNgzxroBELZbzUooxr5CsJuITMcbUbB7pBrZAzyuHI1Gg/j4eADc6Ualz8LMzzd9VqwxmjdvbvKowGsoMhHJ3jQPWDEWNqmJIcWPkZJT1oUzdepUwRvBdu3apXMtaQ28m5ubblOYCSz128s6qge4WEXKSpxyj+LCqQBIaexNTtICxl05fLFVTDFq1CiMGjXK4HeXUIifITwey0MUYyVyMLBqIdrhIeaeP4kiTdm3jpo1a2LkSOHhQl5++eUyo/hbt27xhhmABcaeMdYOQLS5+aVk5cqVcqugYD7FAOLkVkJBAohIEgG37ygL3Jp7gxIREUFaNm/erPddRkYGmUteXh41b97cYJ3uYDQVnnQBAZSEwDJyCv70JbwpCs6kAjOqOwByd3en6dOnU3p6utm63rhxg4YPH06Mma6rRB6JeQak/zx+FlC+TcTX11d2HRQxW+LNbYOK2JdIWxiwzVTDYYxRamoqERE9fvxYz+D9/fffZAnXrl0jb29v4wYHKhoAd5oBL/offGk2vCkaLuQgoME7OjrS+PHj6f79+2brl5KSQm+99RY5OTmJ7WwBYp4Bcc/BF9ykmtyGQpHyL++LbX+K2KdIWxjwHl/j2bRpE2kpPRr/5ZdfyFK2bNkiaUNXqVQ0cOBAunLlitk6FRQU0Pfff08eHh7m6JAJoAFZ4TkooohAqS+2/SlinyKlzx6wwG9/9epViyvv3bs3pk6danE5rq6uGD9+PBITE7Fu3TqEhYWJLqO4uBhr165FQEAA3nvvPXNiua8DEE5E5hzvNM6MPAoKz3KeiPh3DSqUD6T+9QDwACZGCuHh4aRl27Ztus+7dOlCUlBYWEjTpk2j6tWrix7FVKtWjT799FNKSUkxu/7i4mLauXMn1axZ09yR1GUAXcn8+x9tZr0VVkJDQ2XXoZzKl+a2Q0XsT6QvEFjN14ju3btHREQZGRnk4OBAAMjJycmiSdpnUavVtGbNGurXrx8FBAQY1aV69eo0cuRI+u233ygvL8+iOo8fP04NGzY0t2PlAZgJwIUsu/8mJ2bNdCeVa3n//fdl16GcSitL2qIi9iXSF8jFvTbZiFavXk1aIiMjdZ+vXbuWrMX169cpLi6O1q9fTz/99BMtXLiQDhw4QEVFRRaXfenSJXrhhRcs6VQ7IIFvFAImZjt06CC3AbG5HDhwQHYdyqHcAcAsbZOK2I9IXyBQm68hjRo1irR8+OGHus8HDRpE5Ym7d+9Sjx49LOlQdwH0I+nuPe/E7NSpU+U2IjaXvLw8k293ihiURVK1S0XsQ6SeoAUR3QFwxVQaY5O0O3bsMCtOjq1JT0/HqFGjUKtWLcTFmbXfpAjAPHATsJskVI13YrZ169YSVmf/ODo6wtXVtUzwPQVelF2zFQzJjX0JJkMn3Lx5E0lJSQCA9u3b6w4vyczMxKZNUto+acnJycG0adPg5+eH5cuXm1vMEQDPE9H7xMUUkgTGWDQAk6E0XV1ddQezVxbc3NwAAK+++qrMmpQrMgHsl1sJBWmRxdgDT0f3Hh4eiIyM1H0+d+5cK6lkPgUFBfjmm29QvXp1zJkzR0iYA0M8BjAWQDQRnZNWQwDAeL4E/v7+qFWrlhWqtl+0z6pnz55wcXHhSV154DkpbTsR2f8rtoIorGXs9wFlAkXqYcyVc+rUKezfv99KaolDo9FgxYoVqFGjBqZOnWpuwDYCdyRgOBEtoxLnupQwxmoA6MeXLj09He7u7vDx8ZFaBbtF6xb09PTUnWimALzxxhumvlZcOBURa00GADgBExNAgYGBpGXPnj163/Xo0YPkpLi4mLZt20b+/v6WTnKdA9COrDzxAuA/QnVKTU2lJk2ayD35Z1PRsnr1atl1sQdxc3OjS5cuGfteDcDT2m1WEdvL05M9pGcPgEhjXyYnJyMxMRENGzZE27Zt8fnnn8PX1xc+Pj7w9fVFbm4u3N3djWW3GkeOHMEbb7wh6LhBE+QA+BzAd0QkPli/CBhjfgDeEpo+KSkJtWrVwvnz562olX1RWFgIJycnnStHe1pYZcXDwwMNGjRA7dq1cefOnWe/PkpET+TQS8G6WNvYTzf2JRFh7969aNiwIdzc3PDZZ59ZUZWydRcWFkKtViM3NxfZ2dm4d+8epkyZglOnTlla/GYAk4hblWQLpgIQ/KuYlJSEmjVrSqqAj4+PXR8ofuvWLYSGhsLLywsxMTHYtm2b3CrJivb85kaNGhky9srERgXFmsb+MIB8AK7GEuzduxdvv/222RUUFRWhoKAAeXl5yM7OxpMnT5Ceno60tDQ8evQIKSkpuH//Pu7cuYO7d+8iNTUV6enpyM6WbBFMaZIATCSi7dYo3BBiR/XA05G9lIwcORLz588368QxW3D69GndhGT//v3t1tgPGzYMa9eutfp9LG3sd+3a9ezX0o4EFOwGqxl7IlIzxg4B6Goszf79+5GXl4eMjAydkdb+m5aWhuzsbLi5uSE5ORn37t3D7du38ejRI6SlpSEjI8PcVTFSUwDOZ/4VEeXZuO4PAHiIyZCUlITnn5f2pEJ/f3/ExsZi/fr1kpYrFadPn8aAAQMAAH369EGtWrVw9+5dmbUqS2RkJBo2bIgZM2ZYtZ4qVbhz7I2cgxzAGGNE3GSQQgXCmhMCAKbBDiakrCh/wYwQxBLd2+oAssXqHBMTQ9u3b5f0PkyaNImOHj0q97MwKuHh4ZSbm0taSgfgsyf59ttvSaPRUKtWraxaj3anelxcnLE0NeSeTFREerHW0kstvOvtyynJAIYSURcyLwSxFIge1QP6bpyQkBCTZ/gK5f79+4iKikJUVJTFZVmDS5cuYeLEibr/79GjBwYPHiyjRobRaDRQqVSYNWuWVetp1Ijbe/ftt98aSxJkVQUU5MGavyTg1vE/hh2MmiQSDYCFALzl/IUGN6p/Ys41ODs706NHj8jLy4vOnz9PhYWF1LRpU4vui7e3N924cYPWrVsn9/MxKcuXLyctDx8+NCsMtjXl66+/1ulnYWA9k7Jx40b67bffTKV5Ve5RqI37UxUAzQD0BjAFXB/fDm75+BkAF8CFgEkCF8/qIYB0cG/WqQBOAtgE4BsAEwG8CqAxAA+5r03vOm1wIzfJ3Ykkkr/BhTmQ/6EBSy25ljt37tDu3btpx44dtGHDBtq4caPF9ycyMpJycnKodu3aBr/38fGR+/mRm5sbnTt3jrRIcd1SyldffaXT7c8//7RaPfHx8RQcHGwqzVi527iV+08ggFEAfgWQYuXn+rCknhEA/GS9bhvc2AlydyIJJA+As9yNtOR+Pg/uDcOizl5YWEiNGjWinj17UnFxsSQbrSZNmkRff/21we969epl8RuEFBIaGkp3794lLRMnTpRdJ63MmjVLp9eNGzesUodKpaJOnTrxpftM7nZuhX4TCeBLAKfB7e6X4xlrwMXGGg/Azeb3wAY3OVTuTiSRtLGDBssAHLX0WlauXEkLFiwggDtM/eHDh5KNcmfNmmXwgJRu3brZzUg6JCSErl69SkTcITelz1SQUz777DPSsm/fPlvXnw0uGisB+K/cbV3CPtMdQLzcz9aAPAIwC0CAre6FNdfZAwCI6BpjbDM4v1ghuAZV+Iw8+5mQNJaUpQFwFYCYIDFdABwXfwcshzHWEEBHAK8AsHgW9NSpU1i9ejUAbq/CunXrMHHiRDRp0sTinbWfffYZ/Pz8ypy5e/PmTcTGxkpSh6XcvHkT7du3x65du9CsWTNs2LABLVu2lH1jWOn19bdu3bJ19ffAGZ+VKOdr7RljKgD9AXwEoLnM6hijOriT6T5kjH0H4Auy9tJtuX95ZfzF3wBxv8R/2VC3EABvl+gouU/R0dFR7/9btWpFREQbNmyw2kjGycmJCgsLrVqHWPHx8aGjR48SEfFNWNpEPvroI9Lyxhtv2Lr+eyVtbyiAv+Xunxb0nToADsn9LM2QGwC6WfXeyP1wZGwUo0U+jDwArlbUJwRc6AOTAeSsJYmJiZL57o3J5cuXqbi4mBo3bix3x9KJh4cH/fnnn0RENH36dFl1mTp1KhERFRQUWDyh7eXlJTZPZqm2GCN3/zSzD/UDt0pG9nZlgawDUNXAtflYfH/kfkAyNoxaZjyI9hLrEAIZDXxpmTFjBhFZd3Tfq1cv0mg0tH79erk7lJ44OTnR4sWLSaPR0KuvviqbHpMnTyYiop07d1pcVsuWLalu3bpi8hTJ3Sct6EcMwCK525GEkohSZ1KDm3dYaPF9kvtBydxILgh9AN26dbtbWFi46+OPP65rYZ0hsBMDX1rq1KlDxcXFVh/dT5kyxe5G91oZN24cPXr0iMLDw2Wp/9133yUiolGjRllcVoMGDfTOdxYoVntztXI/FhziuxxJKoCOJdd3AFzo6RCL7pPcD0rmRjJPyI0fOnQoFRUV0eXLl8nT0/MRgBdF1hMCOzTwz8q+ffuIyLqjewC0ZMkSu92AFR0dTQcPHqSqVavavO63336bsrKyDK5mEiu1atWikydPis1XTe4+aUYfflfuNmNFKYC+jVpu0b2S+2HJ3FBeNnajVSoVRUVF0Zw5c6ioqIiIyvh0twLoBANLpwA4AGgFbnVDgh00GkEycuRIIiKrj7xVKhUtWbKEGjVqJPs1G5LatWvTV199RSqVyqb1jh8/npYsWSLZNRARBQUFickXLHefFNl/W8PCPSflTIrAnXinGHszGosbuIlXAkBeXl4F/fr1oxUrVtDDhw9Jy507d+iTTz4xNemVBeAUgD/BbasusIOGIVo8PT11AcNs4Vdv3ry57NdsTNzc3Khly5Y2rXPMmDGS3ZOwsDAiIho8eLCYfI3l7pMi+2+cjZ6NBsB1cCfPnQJwDMBBcGESMmzcNjeYfb/kfmByy8SJE3/ZsGFDyq1bt6g0+fn59Mcff1CfPn3IwcHBpp1eTlmzZg0RSTe6r1WrluzXVF5Eyreppk2bEhHR0qVLxeRrLXd/FGy4gBZWeg654Nyt/wXwJrh9Le48ulQH0AbA6wCWA0izYjspBtDcrHsm90OzA/mLSrh//z79/PPP1K9fP6pSpYrsnV8OiYqKuqi9H1KM7keMGCH7NVVGiYyMJCKiw4cPi8nX2Q76o1Bj/4FE9+oJgJ/A7S9oBMBBAt2cwK2g+R+ssxQ0ziy95H5oMjYWdwCvxMbG7u3RowcFBgbK3kHtQLIBNCGib4iINBqNRaNNBwcHWrVqldzXVCmlQ4cORER08eJFMfl6yt0vRfRfS1bgaMCFXx8GnlG7BHr6gHtLkDoeT1vRusj90GRoJAzcYeC5cndIO5R+JfdJRUR/EJFFq2bq1q1Lx48fl/uaKqyY+iHW7sa9cuWKmDIHy90/RfTjOWbcs6sAZgCoLYO+UZB2scY+0TrI/dBkuOmvyN1J7VS+Kn2fGjRo8HJiYmKmRqMxe9VMQEAAPXjwQO7rqrBy7NgxcnJyMvjd6dOniYjo008/FVNmuQltDCAcwkfL18D501Uy6+wA7vQ+qVYQvSSqfrkfmgw3fIXcndQOZaO2IwAYCeAyAOrVq5eGyLLR/e7duyvt/Ic1pUuXLkREBjfAhYaGEhFRXl4e+fn5iSl3ktz9U2Rf/oHneu4AGAfAUW5dn9F7CLiAjJa2g+Oi6pX7wmW40dfl7qh2JpvBHTzvD2Bb6e8YY5SQkECWjO5Hjhxp1R25lVXi4uKIiCgqKqrMd9OnTycioo8++khsuZ/I3T/N6M8zUXaEnwJgEux4RzC406ykcCX3Elyn3Bctw022612sNpat4FYO1AUX4rZMmj59+hARN7p3cHCgbt260S+//ELx8fFGXQilxdvbm2JiYuS+zgol4eHhVFxcTERk8CCSM2fO0JEjR8xZMjxb7v5pZp/uC+70tqXgdqrb1XGAJvTuACDTwvbwDwS6p2S/YBlu8G9yd1Y7kQ3gDL0/OJ+mwXSMMTp79ixpNBpKTk6m0nz11VeC6lLW2ksnXl5elJCQQEREubm51LBhQ73vGzduTE+ePKGwsDBzyl8gd/+sbAJup322he1iCLj5gNEw8XYm+8XKcHOXyN1h7UD+BW5VkjcErBCIjY0lLWlpaTRv3jzKz88njUZD0dHRcl9LpRFnZ2fas2cPEXH++JdeeqlMmgULFlC/fv3MrWO53P2zMgq4NxNLlmbeBHC+5O81RuuR+0JluLEz5e60MkoegCGl7sUWIfkYY3T69GlauHAhVatWjQBQTEwM5eTkUFJSkjmx0xURKYwx+uWXX4iIaP/+/QbnUKpUqUIzZsywpB6zt+IrYjd2abvROuS+SBlu6mtyd1yZ5AFKnaML4B0x+Z2dnct81qFDB8rKyqKVK1fKfW0VXubMmUPXrl2jYcOGGU1Tr149S4O3GTUUitjENq2ToK0cMVq+3Bcoww31l7vjyiBnUGojCbi4IvlSlN2mTRtKT0+n/v37i8rn5uYm9z0pN9KlSxcaMmSItWM0ZaEcrbOviAIuMOPfFj7HC0bLl/sCZbqpSXJ3YBvKZpRanQDAE1xkTsnqaN68OV26dIlq1qwpOE+1atXMnURURFopBhe8q0yobkVksU01wR1cYu7zvGesbBUqJ4flVsAGZAAYTUR9iSin1OefAgiTsqKEhAT07dsX//73v8EYE5Tn8ePHiImJkVINBfEcBxBFRCOJKFluZRQAIroHYLIFRVQ1VXilEwDRkH9EZS0pAuf7CzRw3X6wfJmXUQkNDaW+ffsKTt+5c2caOnSo3PerUsrrr79+HwCTuy8qYtRG7bDg+ToZKpOVFFzpYIwdAfCCFGXVrl376p07d74FF9faz4BUB7em3ZrcBBeq9X9EdN9QAsbY1wA+tKYS/v7+yMrKQl5eHm9axhj279+Pnj17Iisry5pqKZSiffv22L59e0aVKlV85NZFwTCMsWBwyymrmJE9kAy8qVVmY98b3NJDs6lSpQq+/vprvPnmm5sYY/156qsK4z8EHuAmZ9xL/i0tpT8rAOfP08o1cBM6fxP3+meq/urgfhA8zLlWazFlyhTUqVMHkyZNkluVSkFQUBBOnz6NmTNnpvz444/1Sd/Fp2BHMMbeATDfjKxvEtHSMp/K/boi42sSA/ALzHxV6tatG2lPt7p+/fotSHDogZWvd4y512pNqVatGmVnZ1NERITsulQkqVu3Lrm7u+t95uzsTEeOHKF9+/YRY4wAhMrdLhUx2WdV4OYXxT7/BIPlyX1BMt9MBu5QcME3Mjo6mnbv3k1E3OEe3333HTk6OuYD6CT39fBc67/lNkDGZNWqVXTo0CGtASIA5OLiIrte5VWcnJzoxIkTNHnyZL3PlyxZQpmZmRQcHKz9rL3c7VIR3n7bENw8nNh20KZMWXJfjD0IgD7gDhM22nleeuklnZEnIjpz5gy1bt26dLqFcl8HzzWul9sIGZO2bdsSEekdYXjq1CkaO3as3g+AIsJk9uzZRET04MEDcnV1JYCLPkpENHz48NJpB8jdLhUR1HdXmdEOlpcpR+4LsScBF3Z0XXR09P1evXrR6NGjaePGjZSZmUlazp07R7GxsYaM0D3Y8eoGWL5Zw6py7tw5evjwIfn4+JC7u7suqmN8fHyZYF+KGJeuXbvq7l1+fj69++679Pzzz1NeXh5t3rz52fTlKn59ZRVwB7WIPfAkF0BVvXLkvhA7lXfpGUwY+dLSzg50N9ZgHsttiEzJW2+9RUREixcvplatWukF5X2OAAAaaElEQVTde7VaTZ9//rni2uERPz8/un//PhER/ec//6F+/frRvXv36ObNm5ScnEzVq1d/Ns/XcrdLRQT3X3NCKbyrV4bcF2GPEhkZ2aJatWqpzz//fOHLL79MXbt2FepOmCe37kYairfchohPvLy8KDs7mzQaDS1YsIC05Obm6v5OTEykDh06yK6rvYr2QJMffvhB99ny5cuJiKhHjx6G8qySu20qIrgPN4X4yJh6oRNkvwh7FHCz4OlmdLhbcutu5HrKRTygH374gZ6lT58+tGjRItJoNEREVFxcTD/++CP5+PhIWrc2mmd5lXff5V5G169frxcMzdPTkz7++GNj+fbI3TYVEdWPN5vRNlrp8st9AfYqeOaIPhESKbfuBq7FRW5jJETCwsIoKSmJSjN48GACQK1ataKTJ0/qPk9OTqZBgwZJVnerVq2oS5cust8DcyQiIoLy8/Np+/btgk4PKyVGg2YpYn8CoKUZ7eNTXX65L8BeBdzxZuZ0vi/k1t3I9UgS5dLa4uPjQ7/99htpKb18UKVS0dtvv00ZGRm677dv3156KSGvODs7GwzAplKp6OzZs1S1alXZ74EYcXd3p4sXL1J8fLw5kUTT5G6Xiojux3+JfMbHtHkrayA0IRwUkfYSgDkA2gH4wjrqWEyG3AoIIT09Hb169cIHH3yA4uJiBAYG6r4rLi7GokWL0KBBA/zyyy8AgO7du+PChQv46KOPUKUK/87ygoICeHt7Y/Xq1ejevbsucFtxcTGuXbuGRYsWWefCrEDbtm3x+++/Iy8vDz169BAUouIZfBhjrtbQTcFqbBKZPpIx5gcAsv9S2auAi2WTA8O/lkUA4gF8ACBMbl0FXs8lI9dil6Jdfrlq1SqjaV588UVKTEwkLWlpafTFF18I8r8HBwfThQsX6MKFCzRmzBhycXGhCRMmEBHRgAEDZL9+Y+Lg4ED9+/enffv20eXLl2nr1q3k5+dnSZl15W6biojqx4EQP1H7OhEpxp7nxu4pdcOyAfwKYDiA6nLrZsa1HJPbUImRiIgIIiJatmyZyXTOzs40Y8YMvVU72dnZ1LhxY946PD09datVUlJSdH8/fvyYgoKCZL8HhqRmzZoUFBQk5WaztnK3TUVE9+UjIp/xWiJSjD3PTZ0IYCmAVwC4yK2PhdeyU25DJUYGDBhARFRmy78xCQkJoW3btpGW1atXC64rNjaWUlNTqTQ7d+6U/R7YSPrJ3TYVEd2XPxD5jB8TVeIQx5UNxth6AAPk1kMoM2fOxKxZsxATE4Pdu3cLzvfOO+9g/vz50Gg0aNCgAa5fvy4oX1BQEJYvX653oEpqaiqSkpKQlJSEmzdv6v1769Yt5Ofni74uO+RdIlogtxIKwmGM1QcX8VYMQbL/Silis9HAfyHBSFDk0j6z5ZdffiEiosDAQNF5v/76ayIi+u9//ysqH2OM+vfvTwsXLqQTJ06QWq0mYxQXF9P9+/fpyJEjtGbNGpo+fToFBATIPUo3R/5P7rapiFn9+azI59xRGdlXEhhj/wbwkaXlNGjQAH5+fjh06JAEWhnn5MmTqFu3LqpVqyY6L2MMa9euRZ8+fVCvXj3cu2cy1L9RXFxcEBERgdatW+O5556Dq6sr3Nzc4OrqqpNbt25h69at2LNnT3kd6a8kohFyK6EgDsbYvwB8IiLLWNl/oRSx2UjgDUg0GoyPjxd1uLg5kpWVRfHx8Wbnd3Fxofj4eJo3b57cI2d7l11yt01FzOrPg0U+56+VdfaVh3+kKmjnzp349ddf4eLiIlWRegQFBcHT0xPnz583uwy1Wo3evXujY8eOqF69uoTaVTgC+ZMo2CFJItM/pxj7ysNFcGFSLWbOnDkoKirC4sWLpSiuDA0aNAAAi4w9AKSlpaFfv34YNGiQFGpVVILkVkDBLMQa+1DF2FcSiEgN4IoUZRUVFWHw4MHo1asX3nzzTSmK1ENr7C9cuGBxWUlJSdi1axccHR0tLquC4ssYc5ZbCQVxEFEKuJj1QvFUjH3lQjJXzp07dzBixAh89913iI6OlqpYAE+N/blz5yQp7+rVqygqKpKkrAoIAxAgtxIKZnFTRFqVYuwrF9JYzxLi4uIwf/58bNq0CTVr1pSs3AYNGiApKQnp6emSlalgEsWVUz65ISItU4x95UKykb2WGTNmICkpCZs3b5ZswjYgIABnzpyRpCwFQSiTtOUTMX57xdhXMiQd2QNAYWEhBg0ahLCwMMkmbG/fvi1456uCJCjGvnyiFpFWceNUMm4BeCJ5obduYeTIkRg1ahTeeusti8tTDL3NUdw45RMxz00Z2VcmiNuNccQaZf/222/47rvvJJmwvXHjBhwcHCTSTEEAWXIroGAWYoz9I8XYVz5WWavgadOmISEhweIJ2xs3bkClvHTaEmWCpHwixtjfUHpU5WMLgExrFFxQUICBAwfC1dXVognb69evKyN726IY+/KJYuwVjENEeQA2WKv8pKQkjB49Gq1btzZ7wvbmzZvSKqVgirtElCq3EgriYIx5AuA/h/Mp1xVjXzn5BtzRilbh119/xcKFC82esC0oKMD9+/etoJmCAZRRfflE7KS6MrKvjBDRFQA/WLOODz74AKdPnzZ7wlYZ3duMBLkVUDCL+iLTKyP7SswX4M7VtQpqtRoDBgxAXl6eWRO2irG3GcrIvnzyqoi0yQCuKsa+kkJEDwF8bs06rl+/jrFjx8Lf31/0hK1i7G2GYuzLGYwxBqCXiCx/EhEpxr5yMw/AX9asYMOGDVi6dKnoCduUlBQraqVQQjoR3ZRbCQXRtAIg5lV5FwAoxr4SU7LJ6g0AVl2NMXnyZJw9e1bUhG3JaTwK1kXx15dPxolISwB2A4qxr/QQ0X0Ao61ZR35+PgYMGIDs7Gx89913aN++vTWrUxCO4sIpZzDGggEMF5HlNBE9AhRjrwCAiH4HsMSadVy5cgXjx4+Hk5MTNm7cKGlI5MoOYwwxMTFwcnISm1UZ2Zc/ZgAQ86C3av9QjL2ClvfBHV1oNdasWYNly5aZNWGrYBwiwo0bN3Do0CEMHjwY3PydIJSRfTmCMVYfwAgRWQoBLNP9n9ynpCtiPwKgGYB8iDu1XpS4ubnRuXPniIjop59+slo9lVFat25Nt2/fplOnTtFLL71kMq2Tk1MhAEe525wigvumCkC8yDaxtnQZrKQgBQUAAGPsPQDfWbOO8PBwnDx5Eh4eHujZsyfi4uKsWV2lwtfXF0uXLkVsbCzy8vKQnJysk5SUFN3farX6zsqVK+vIra+CMBhjUwDMFZktmogO68pQjL1CaUrW8P4OoIc165k9ezamTZuGadOmYc6cOdasqlLi5+eHV155BV26dEFoaCjq1q2LgAC9o2YfAaghk3oKImCMhYNzubmKyJZARC1Kf+AoqVYK5R4iIsbYcHCTd7WtVc+tW7cAALVq1bJWFZWaR48eYeXKlVi5cqXuM3d3d4SEhKBu3bqoV6+e36+//jrz/v37G4josoyqKpiAMeYAYAXEGXoAWPDsB4qxVygDEaUxxgaC8xFapY1oA50pxt525Obm4uLFi7h4UTcPPwvALMbYaQBrAKwjonuyKahgiA8BtBGZ5wKAlc9+qKzGUTAIER0Ft8zLKjx48ACAYuzthJbgIqHeZoztY4yNZIwpS6VkhjHWFOaFNJlMRJpnP1SMvYIpvgHwhzUKVkb2dokKQCcAPwG4yRj7iDFWVV6VKieMsWoANgJwFpl1GxHtNlimMkGrYIqSRpcAQFKr7OTkBLVaDSKCi4sLioqsFl5fwTKegAuH/R0R3ZVbmcoAY8wdXMyqKJFZCwE0JqKrBstVjL0CH4yxdgD2Q2L/fUpKCmrUqIHg4GDcvn1byqIlxcPDAy+88AKCgoIQEBCAwMBABAQEICAgAK6urnrLG5OTk3Hr1i3s378f+fn5cqsuJYUA/gdgFhE9kFuZikrJhOwWAD3NyP4NEU01+q3cmwUUKR8CYBok3gSUkJBARERt27aVfUPSs+Lt7U1Dhw6lzZs3U25uLhmkqIiK89UGv3ry5AmtXbuWYmNjyd3dXfbrkVByAHwJwFvuNlkRBcCPZj6XfwC4mipbGdkrCKJk/f0fALpLVeb27dvRvXt3DBw4EBs2WO1YXMGoVCoMHjwYQ4YMQdeuXeHszLlLC85fQt5vu1B4/SY0yY+geZDC/fvoMaDRQOXlCQf/6nDw94PK3w8uLZrAvV+P/2/v3KOrKq8E/tvJDUmgEIjII7yuCAjIQysYooFZGPGxYIHOEKbYaWGYqQrRglQHLAGhESmDDFOGmqKCdWx1SRxQGJ1iwTorgTCRCvhMIEASwg15kYQANtwke/74LpQQIMm9JzlJOL+19rrcnHO+b9/Lvft+Z3/7QchtppnQ2bNnWbp0KevXr6e2ttbOl2glpcBLwK9VtcpuZdoDIrICWObHpd8BY1T1+uVO7P4lc6TtCNAdyMeiVeKmTZtUVfWZZ56xe7Wq0dHRmpGRoRep+vMXevr5lzR/yL16nN5+yckRE7Vs+ctaXVSiqqp79+7VYcOG2f5aLZZcTBXGILs/n21ZMGWL/f0/+Elj5nCicRwajaqWADOBemFd/tBawi+XLVtGeno6Y8eO5VzKDk4OvgfPXQ9Sseo/8B4+5ve4F77KpHz5Wk4Om8DZN7cQExPDgQMHWLJkCS5Xu0lx6Y9J+jkkIs2add1eEZEF+F91NkVVX2vMiY6xd2gSqpoKLLViLLvDL0NCQti8eTMrVqygJr+AU/fFUzzjCbzZOVe/IDiY0OjvE7FkPl2X/4yw2LuRRhjt2tIySmYv4FTcDIJOFPDiiy+yb98+evbsWe/cIUOGkJ6ezsyZMwN8dS3OCGCHiKSKyD12K9MWEBGXiCQD6/DPFh+hKY1M7L59caTtCSDADgJ0ATz66KOqqrpnzx5bXBDJycmqqlq1/5Dm9b7jqq6YnDC3Fv/TQj237X+0prxCr6TmTKWW/3KD5nYb2ijXTk6YW8++876qqmZmZmqfPn0u6TN69GgtLCy8NPYnn3yiI0aMsNtN469sB8ba/VltrQJEAB8H8P4WALc0aU67X7QjbVOArpiVhd8GITo6WlVVS0tLtXv37i1qjKZPn66qqlVffqs5nW6tZ5RzI27T04tXavWpIr2SmsqzWvnbd7X4H57SvF6jm+7PlyiteNn80Bw7dkzdbrfGxMRoWVmZ1lZd0KL4x7Xy9bcvzZeRkaELFy7Uvn372m3A/ZE/AhPt/ry2JgEGYnpH+PueVgB3NHVeJxrHwW986dz7gI7+XB8ZGcm3335Ljx49yMjIYOLEiZw/f95aJa9CREQEOTk5RHQIxTP2YbzfHK5zvNPMR7jpN6sJ6tK5zt/V6+Xsq7+j/BfrqCkKvG1vl4VPELn2BTweDxEREXQKD6f475/k3Hum5HNYXCzdX12Da+AAM78q6enp7N+/n8zMTLKyssjMzLzkDmvl7MNE7/y33sBGx5ez8j4m2MEfLgAPq+onTZ77Bn7fHSxARGZiimj5xciRI/n000+JjIzko48+Ytq0ac2eTZuQkMCGDRsoX7aG8qR19Y5HfbGbDiOH1fnbuZQdlP981bX9+X7S7V8TiXjONGEv/cmzVL5e960Ul4uwSRPoNPMROj7yEEGdv1dvjMrKSrKysjh69Ci5ubn1pLKy0lKdA+RLYBWwRa9Sv6W9IiIuTDe4FYC/dYdqgcdU9V2/dHCMvUOgiMg6YIG/148ZM4bdu3fTpUsX3njjDebMmWOhdvU5dOgQI4cPJ7/fGGpOFdU51mHUMKIO7b703JudQ8lj86j6rJnatQYF0XP7b/Eey+P0TxOve6qEh9FxyiQ6/WAaHe4cQXC/qEZtEGdmZpKWlsaePXtIS0sjOzvbKu0DIRtYDfynql6wW5nmRETGARsxneD8pQr4kaqm+K2HY+wdAsXX8f4LoIu/Y8TGxrJz5046duzIypUrSUy8vuHzl8GDB3P48GHOb/+Yommz6x3vtmYpEc/OBUAveCkYN5kLB75qFl0uEtSlM4hQW3GmaRcGB+OK6onL3Q/XgL643P0I9j26BvTF1b8PElq/jtapU6dISUlh8+bNHDxoe8/xk5iCe6+qavP78FoQEemCcV3NJbDIxwpgmqr+b0D6OMbewV98FREXAfOB8EDHi4uL48MPPyQ0NJSEhAReeeWVgHW8kunTp5OSkkLZkl9S8dL6ugeDguh34s8ER5mQyNM/W8GZf9touQ4tRlAQrj69cA26hZBB7kuPoTF3EdzbvMaDBw+ycuXKw++9995NwE02alsC/Ar4jZp8jjaNiPwdsB6ICnCokxgf/ZcB6+QYe4emIiJhwFPA80CklWNPmTKFrVu3EhwcTHx8PFu3brVyeJKSkkhMTKTo0Tmcf/8PdY6Fxd5Nr9T3Afhu56cUPvxDaKffj5DhQwi/fzxh908gbPzdB4K7dR0HTAX+EXgQCLZJtWrgD8DvgO2q+p1NeviFiNyFqUFvRYLZNxhDb0mVQMfYOzQaX0W+H2M2mZqtZWF8fDzvvPMOXq+XBx54gNTUVMvG/uCDD5g6dSonh9yL98jxOsfC4mLptWsLNUUleEbFUVNYbNm8rRqXq8Ttzbv54lMRiQJ+hDH8t9mmlymv/F8Yw/8nVW2VhYV8m69/i7nDtSqh7F1MGQTLdtedDFqHRiEi0zB++c00o6EHSElJYc6cOYSGhrJ9+3Zuv/12y8YePnw4+pcqvEdz6x3TikpQpWT2ghvH0ANUV9dxwamqR1VXq+pQYCImVt4OOgOzgV3ACRFZIyL3+Iyr7YjITSLyPHAcY5ytMPRVwDxV/YGVhh6clb1DA4hILCZqosVT4J988kmSk5PJz88nJiaG/PzAe2cUFhYS+Rcv+QPG1jsWMvgWOs+bzelnXgh4njaGutVz3YWfiIwFlmBcPdIiWl2bM5j+Cn8EdqlqZktNLCIdMD1hZwE/pOmNwK/HUWCGqn5u4ZiXcIy9w1URkRGYSAJ/mihYxsKFC1m7di1ff/0148ePp6ysLKDxzpw5Q8fK85zoc2e9YxIeBrW1aFW7jgS8Fh3d6mnQP+77XPwcmIF9fv0ryces/ndhjH+hVQP79qfGAX/jk3FYEIxwFX6PWdE3MSSr8TjG3qEOItIf+AXGZ9sq3HyJiYkkJSWRlpbGpEmTAuoAVV1dDSWnOdFrtIUatgvC3OppdF16ERkELMbs4YQ0m1b+cRzIuYacvDyZy7dS7wp0u+Lxdoxxvxv/k6AaQzYwV1V3NeMcgGPsHXyIyEAgwSfN+eH2i1WrVrF48WK2bdvG9OnT/WoC4nK58Hq91JaWkdfdun2AdkCJWz03N3xafUSkH/Ac8M80z4rXaryAB/MD1RU/S31YwAWMe/QlVW2R/pWOsb9BEZHuwH3A/T65xV6NGmb9+vU8/fTTJCcnM2/ePL/GqKiooHOHUHK/Nwhqbphs/YY46FZPfb9WExCRHsBCYB5mY9Xh2uwGElQ1qyUnbRW36Q4tg4j0F5HVIvI5UIQvvIs2YOgB5s+fz6ZNm5g7d67fGbZ5eXlIWCgdRg61WLs2TcBx3KpapKqLMZFaizGrZ4e6pAL3qer9LW3owTH2NwQi0kNEfgUcBv4FuBP7IyqajKry+OOP8/bbb5OUlORXDZ28PGPXQmPGWK1eW6bJFRSvhapWqOpqwI0Jmww487MdsBeYpKoTVPVPdinhGPt2jIh0FZEXgWPAT2mFvvimUltby6xZs9i2bRsbN25k8uTJTbo+N9fE14fe4xj7y9hh9YCq6lXVN1V1FPAQJlLmRkIxzUkeUtV7W2IDtiEcY98OEZFQEVmMMfJLgE42q2Qp1dXVxMfH16SmpmZs2bKlNjo6utHXXszGDY+LRUJaWxCJLXztVo//jXYbgaruVNVJwCAgCQvcRq2YAmAlcKuqPqiqO+1W6CLOBm07xJdh+Blwh926NCMHgBhV7Z2dnT1/ypQpT2VlZTWYWRkZGUlxcTFBQUGUzF7A2Te3tICqrZofu9XzVktOKCJBmOCA2ZgyA20hiud6XMAkeL2Oac7SvA0Z/MQx9u0UERkKpGFfJcNSTCXD/lj/Zf4ciFfVOivSRYsWxZWWlsYXFBTEHjt2bOCRI0fCa64ScbN3715iYmK48FUmnlFx7bbYWSP4ErjDrR7bas74ygDPACZjSjNE2KVLEykGPsS4wD5W1bM269MgjrFvx4hINKYC38XN2BpMEscXwHngEcyXLFA3TyVmk28nJuLguKqe8+kgQB/MLfzgKx5vpWlxzkcxTSDWNWb1tGzZsh7l5eWPFRcXP3zixInRmZmZN5eWlgYtX76cF14wJRGKps7i/A67Sr/YSg3woFs9uxs8s4XwFdobgwkFngTEAPUL8tvDaWA/8H+Yqpz7WmthtmvhGPsbHBEJx9xSjwW+75M+17mkFijEuIlSffK5qnr9nL83pgHzRelF3UihGsxKfpeq1q9e1kQWLVoU179//9iEhIQewLiagsJRnrsectUUWJZh31Z42q2eDXYrcT1EpCMwARgPDMEsEAYB9XszWkclpoZ8PmZR9BnwmaoebcY5WwTH2DvUw+fz74apVR+JKfZUjInNL2lrK5oGCD/97IpZZ/79tQ3U1LaWWi/Nzctu9TxntxL+IiK9+Ovd4cU7xa6A6zIJueK5CxOQUoTJATjpkzr/trrSZGvCMfYODkCORM0BXqVli3t9A7wBTAPupflzHyqBuW71/L6Z53FohTjG3sHBR45ETcRUH+zdzFNVA2uAFReLj+VI1ADgMUzZXKsL99RiNhKfdaunVXQbd2h5HGPv4HAZORLVE3gLs0FoNZXAa8B6t3quuf+QI1GDMCv9WN/jUPxb9R8HtgK/dqvneEMnO7RvHGPv4HAVciRqHPAEJiwwkMqIhcAeTLTSW271NLleeY5ERWJKXPTGbGD3vOyxK1CBCXU9jdlbOQiku9VzKgC9HdoZjrF3cLgOORLVFeNTH8ZfNwQHYsJVzwPlV5FSTNLXHsdt4tBa+H8nqYHN7SVqRQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/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/doc/compress.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvbXByZXNzaW9uIEhlbHBlcjwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImJhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBTY3JpcHQgY29tcHJlc3Npb24KICAgaGVscGVyICovCjwvcHJlPgoKICAgIDxwPlRvIG9wdGltaXplIGxvYWRpbmcgQ29kZU1pcnJvciwgZXNwZWNpYWxseSB3aGVuIGluY2x1ZGluZyBhCiAgICBidW5jaCBvZiBkaWZmZXJlbnQgbW9kZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbWJpbmUgYW5kCiAgICBtaW5pZnkgKGFuZCBwcmVmZXJhYmx5IGFsc28gZ3ppcCkgdGhlIHNjcmlwdHMuIFRoaXMgcGFnZSBtYWtlcwogICAgdGhvc2UgZmlyc3QgdHdvIHN0ZXBzIHZlcnkgZWFzeS4gU2ltcGx5IHNlbGVjdCB0aGUgdmVyc2lvbiBhbmQKICAgIHNjcmlwdHMgeW91IG5lZWQgaW4gdGhlIGZvcm0gYmVsb3csIGFuZAogICAgY2xpY2sgPHN0cm9uZz5Db21wcmVzczwvc3Ryb25nPiB0byBkb3dubG9hZCB0aGUgbWluaWZpZWQgc2NyaXB0CiAgICBmaWxlLjwvcD4KCiAgICA8Zm9ybSBpZD0iZm9ybSIgYWN0aW9uPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL3VnbGlmeWpzIiBtZXRob2Q9InBvc3QiPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZG93bmxvYWQiIG5hbWU9ImRvd25sb2FkIiB2YWx1ZT0iY29kZW1pcnJvci1jb21wcmVzc2VkLmpzIi8+CiAgICAgIDxwPlZlcnNpb246IDxzZWxlY3QgaWQ9InZlcnNpb24iIG9uY2hhbmdlPSJzZXRWZXJzaW9uKHRoaXMpOyIgc3R5bGU9InBhZGRpbmc6IDFweCI+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+SEVBRDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4yO2Y9Ij4yLjI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTg7Zj0iPjIuMTg8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTY7Zj0iPjIuMTY8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTU7Zj0iPjIuMTU8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTM7Zj0iPjIuMTM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTI7Zj0iPjIuMTI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTE7Zj0iPjIuMTE8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTtmPSI+Mi4xPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjAyO2Y9Ij4yLjAyPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjAxO2Y9Ij4yLjAxPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjA7Zj0iPjIuMDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj1iZXRhMjtmPSI+YmV0YTI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9YmV0YTE7Zj0iPmJldGExPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PjwvcD4KCiAgICAgIDxzZWxlY3QgbXVsdGlwbGU9Im11bHRpcGxlIiBuYW1lPSJjb2RlX3VybCIgc3R5bGU9IndpZHRoOiA0MGVtOyIgY2xhc3M9ImZpZWxkIiBpZD0iZmlsZXMiPgogICAgICAgIDxvcHRncm91cCBsYWJlbD0iQ29kZU1pcnJvciBMaWJyYXJ5Ij4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvY29kZW1pcnJvci5qcyIgc2VsZWN0ZWQ+Y29kZW1pcnJvci5qczwvb3B0aW9uPgogICAgICAgIDwvb3B0Z3JvdXA+CiAgICAgICAgPG9wdGdyb3VwIGxhYmVsPSJNb2RlcyI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9jbGlrZS9jbGlrZS5qcyI+Y2xpa2UuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2Nsb2p1cmUvY2xvanVyZS5qcyI+Y2xvanVyZS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvY29mZmVlc2NyaXB0L2NvZmZlZXNjcmlwdC5qcyI+Y29mZmVlc2NyaXB0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9jc3MvY3NzLmpzIj5jc3MuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2RpZmYvZGlmZi5qcyI+ZGlmZi5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvZ2ZtL2dmbS5qcyI+Z2ZtLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9ncm9vdnkvZ3Jvb3Z5LmpzIj5ncm9vdnkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2hhc2tlbGwvaGFza2VsbC5qcyI+aGFza2VsbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvaHRtbGVtYmVkZGVkL2h0bWxlbWJlZGRlZC5qcyI+aHRtbGVtYmVkZGVkLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj5odG1sbWl4ZWQuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+amF2YXNjcmlwdC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvamluamEyL2ppbmphMi5qcyI+amluamEyLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9sdWEvbHVhLmpzIj5sdWEuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL21hcmtkb3duL21hcmtkb3duLmpzIj5tYXJrZG93bi5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvbnRyaXBsZXMvbnRyaXBsZXMuanMiPm50cmlwbGVzLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9wYXNjYWwvcGFzY2FsLmpzIj5wYXNjYWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3BlcmwvcGVybC5qcyI+cGVybC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcGhwL3BocC5qcyI+cGhwLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9wbHNxbC9wbHNxbC5qcyI+cGxzcWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3B5dGhvbi9weXRob24uanMiPnB5dGhvbi5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvci9yLmpzIj5yLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9ycG0vY2hhbmdlcy9jaGFuZ2VzLmpzIj5ycG0vY2hhbmdlcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcnBtL3NwZWMvc3BlYy5qcyI+cnBtL3NwZWMuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3JzdC9yc3QuanMiPnJzdC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcnVieS9ydWJ5LmpzIj5ydWJ5LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9ydXN0L3J1c3QuanMiPnJ1c3QuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3NjaGVtZS9zY2hlbWUuanMiPnNjaGVtZS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvc21hbGx0YWxrL3NtYWxsdGFsay5qcyI+c21hbGx0YWxrLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9zcGFycWwvc3BhcnFsLmpzIj5zcGFycWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3N0ZXgvc3RleC5qcyI+c3RleC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvdGlkZGx5d2lraS90aWRkbHl3aWtpLmpzIj50aWRkbHl3aWtpLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS92ZWxvY2l0eS92ZWxvY2l0eS5qcyI+dmVsb2NpdHkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3htbC94bWwuanMiPnhtbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUveWFtbC95YW1sLmpzIj55YW1sLmpzPC9vcHRpb24+CiAgICAgICAgPC9vcHRncm91cD4KICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9IlV0aWxpdGllcyBhbmQgYWRkLW9ucyI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvb3ZlcmxheS5qcyI+b3ZlcmxheS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL3J1bm1vZGUuanMiPnJ1bm1vZGUuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9zaW1wbGUtaGludC5qcyI+c2ltcGxlLWhpbnQuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9qYXZhc2NyaXB0LWhpbnQuanMiPmphdmFzY3JpcHQtaGludC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL2ZvbGRjb2RlLmpzIj5jb2RlZm9sZC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL2RpYWxvZy5qcyI+ZGlhbG9nLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvc2VhcmNoLmpzIj5zZWFyY2guanM8L29wdGlvbj4KICAgICAgICA8L29wdGdyb3VwPgogICAgICAgIDxvcHRncm91cCBsYWJlbD0iS2V5bWFwcyI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQva2V5bWFwL2VtYWNzLmpzIj5lbWFjcy5qczwvb3B0aW9uPgogICAgICAgIDwvb3B0Z3JvdXA+CiAgICAgIDwvc2VsZWN0PjwvcD4KCiAgICAgIDxwPgogICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5Db21wcmVzczwvYnV0dG9uPiB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21pc2hvby9VZ2xpZnlKUy8iPlVnbGlmeUpTPC9hPgogICAgICA8L3A+CgogICAgICA8cD5DdXN0b20gY29kZSB0byBhZGQgdG8gdGhlIGNvbXByZXNzZWQgZmlsZTo8dGV4dGFyZWEgbmFtZT0ianNfY29kZSIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDE1ZW07IiBjbGFzcz0iZmllbGQiPjwvdGV4dGFyZWE+PC9wPgogICAgPC9mb3JtPgoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgZnVuY3Rpb24gc2V0VmVyc2lvbih2ZXIpIHsKICAgICAgICB2YXIgdXJscHJlZml4ID0gdmVyLm9wdGlvbnNbdmVyLnNlbGVjdGVkSW5kZXhdLnZhbHVlOwogICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZXMiKSwgbTsKICAgICAgICBmb3IgKHZhciBvcHRnciA9IHNlbGVjdC5maXJzdENoaWxkOyBvcHRncjsgb3B0Z3IgPSBvcHRnci5uZXh0U2libGluZykKICAgICAgICAgIGZvciAodmFyIG9wdCA9IG9wdGdyLmZpcnN0Q2hpbGQ7IG9wdDsgb3B0ID0gb3B0Lm5leHRTaWJsaW5nKSB7CiAgICAgICAgICAgIGlmIChvcHQubm9kZU5hbWUgIT0gIk9QVElPTiIpCiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGVsc2UgaWYgKG0gPSBvcHQudmFsdWUubWF0Y2goL15odHRwOlwvXC9jb2RlbWlycm9yLm5ldFwvMlwvKC4qKSQvKSkKICAgICAgICAgICAgICBvcHQudmFsdWUgPSB1cmxwcmVmaXggKyBtWzFdOwogICAgICAgICAgICBlbHNlIGlmIChtID0gb3B0LnZhbHVlLm1hdGNoKC9odHRwOlwvXC9tYXJpam5oYXZlcmJla2UubmxcL2dpdFwvY29kZW1pcnJvclw/YT1ibG9iX3BsYWluO2hiPVteO10rO2Y9KC4qKSQvKSkKICAgICAgICAgICAgICBvcHQudmFsdWUgPSB1cmxwcmVmaXggKyBtWzFdOwogICAgICAgICAgfQogICAgICAgfQogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/docs.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ym9keSB7CiAgZm9udC1mYW1pbHk6IERyb2lkIFNhbnMsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWF4LXdpZHRoOiA2NC4zZW07CiAgbWFyZ2luOiAzZW0gYXV0bzsKICBwYWRkaW5nOiAwIDFlbTsKfQoKaDEgewogIGxldHRlci1zcGFjaW5nOiAtM3B4OwogIGZvbnQtc2l6ZTogMy4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogMDsKfQoKaDIgewogIGZvbnQtc2l6ZTogMS4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogLjVlbSAwOwogIGxldHRlci1zcGFjaW5nOiAtMXB4Owp9CgpoMyB7CiAgZm9udC1zaXplOiAxZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbWFyZ2luOiAuNGVtIDA7Cn0KCnByZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsKICBib3JkZXItcmFkaXVzOiA2cHg7CiAgcGFkZGluZzogMWVtOwp9CgpwcmUuY29kZSB7CiAgbWFyZ2luOiAwIDFlbTsKfQoKLmdyZXkgewogIGZvbnQtc2l6ZTogMi4yZW07CiAgcGFkZGluZzogLjVlbSAxZW07CiAgbGluZS1oZWlnaHQ6IDEuMmVtOwogIG1hcmdpbi10b3A6IC41ZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgppbWcubG9nbyB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAtMjVweDsKICBib3R0b206IDRweDsKfQoKYTpsaW5rLCBhOnZpc2l0ZWQsIC5xdWFzaWxpbmsgewogIGNvbG9yOiAjZGYwMDE5OwogIGN1cnNvcjogcG9pbnRlcjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmE6aG92ZXIsIC5xdWFzaWxpbms6aG92ZXIgewogIGNvbG9yOiAjODAwMDA0Owp9CgpoMSBhOmxpbmssIGgxIGE6dmlzaXRlZCwgaDEgYTpob3ZlciB7CiAgY29sb3I6IGJsYWNrOwp9Cgp1bCB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmctbGVmdDogMS4yZW07Cn0KCmEuZG93bmxvYWQgewogIGNvbG9yOiB3aGl0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYwMDE5OwogIHdpZHRoOiAxMDAlOwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LXNpemU6IDEuMjNlbTsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7CiAgYm9yZGVyLXJhZGl1czogNnB4OwogIHBhZGRpbmc6IC41ZW0gMDsKICBtYXJnaW4tYm90dG9tOiAxZW07Cn0KCmEuZG93bmxvYWQ6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNiYjAwMTA7Cn0KCi5yZWwgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5yZWwtbm90ZSB7CiAgY29sb3I6ICM3Nzc7CiAgZm9udC1zaXplOiAuOWVtOwogIG1hcmdpbi10b3A6IC4xZW07Cn0KCi5sb2dvLWJyYWNlcyB7CiAgY29sb3I6ICNkZjAwMTk7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRvcDogLTRweDsKfQoKLmJsayB7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5sZWZ0IHsKICB3aWR0aDogMzdlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07CiAgcGFkZGluZy1ib3R0b206IDFlbTsKfQoKLmxlZnQxIHsKICB3aWR0aDogMTUuMjRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjQ1ZW07Cn0KCi5sZWZ0MiB7CiAgd2lkdGg6IDE1LjI0ZW07Cn0KCi5yaWdodCB7CiAgd2lkdGg6IDIwLjY4ZW07Cn0KCi5sZWZ0YmlnIHsKICB3aWR0aDogNDIuNDRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07Cn0KCi5yaWdodHNtYWxsIHsKICB3aWR0aDogMTUuMjRlbTsKfQoKLmNsZWFyOmFmdGVyIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAwOwogIGNvbnRlbnQ6ICIgIjsKICBjbGVhcjogYm90aDsKICBoZWlnaHQ6IDA7Cn0KLmNsZWFyIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9Ci8qIHN0YXJ0IGNvbW1lbnRlZCBiYWNrc2xhc2ggaGFjayBcKi8KKiBodG1sIC5jbGVhciB7IGhlaWdodDogMSU7IH0KLmNsZWFyIHsgZGlzcGxheTogYmxvY2s7IH0KLyogY2xvc2UgY29tbWVudGVkIGJhY2tzbGFzaCBoYWNrICovCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/internals.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEludGVybmFsczwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgICA8c3R5bGU+ZGwgZGwge21hcmdpbjogMDt9IC51cGRhdGUge2NvbG9yOiAjZDQwICFpbXBvcnRhbnR9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIChSZS0pIEltcGxlbWVudGluZyBBIFN5bnRheC0KICAgSGlnaGxpZ2h0aW5nIEVkaXRvciBpbiBKYXZhU2NyaXB0ICovCjwvcHJlPgoKPGRpdiBjbGFzcz0iY2xlYXIiPjxkaXYgY2xhc3M9ImxlZnRiaWcgYmxrIj4KCjxwIHN0eWxlPSJmb250LXNpemU6IDg1JSIgaWQ9ImludHJvIj4KICA8c3Ryb25nPlRvcGljOjwvc3Ryb25nPiBKYXZhU2NyaXB0LCBjb2RlIGVkaXRvciBpbXBsZW1lbnRhdGlvbjxicj4KICA8c3Ryb25nPkF1dGhvcjo8L3N0cm9uZz4gTWFyaWpuIEhhdmVyYmVrZTxicj4KICA8c3Ryb25nPkRhdGU6PC9zdHJvbmc+IE1hcmNoIDJuZCAyMDExICh1cGRhdGVkIE5vdmVtYmVyIDEzdGggMjAxMSkKPC9wPgoKPHA+VGhpcyBpcyBhIGZvbGxvd3VwIHRvCm15IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5CcnV0YWwgT2R5c3NleSB0byB0aGUKRGFyayBTaWRlIG9mIHRoZSBET00gVHJlZTwvYT4gc3RvcnkuIFRoYXQgb25lIGRlc2NyaWJlcyB0aGUKbWluZC1iZW5kaW5nIHByb2Nlc3Mgb2YgaW1wbGVtZW50aW5nICh3aGF0IHdvdWxkIGJlY29tZSkgQ29kZU1pcnJvciAxLgpUaGlzIG9uZSBkZXNjcmliZXMgdGhlIGludGVybmFscyBvZiBDb2RlTWlycm9yIDIsIGEgY29tcGxldGUgcmV3cml0ZQphbmQgcmV0aGluayBvZiB0aGUgb2xkIGNvZGUgYmFzZS4gSSB3YW50ZWQgdG8gZ2l2ZSB0aGlzIHBpZWNlIGFub3RoZXIKSHVudGVyIFRob21wc29uIGNvcHljYXQgc3VidGl0bGUsIGJ1dCBzb21laG93IHRoYXQgd291bGQgYmUgb3V0IG9mCnBsYWNl4oCUdGhlIHByb2Nlc3MgdGhpcyB0aW1lIGFyb3VuZCB3YXMgb25lIG9mIHN0cmFpZ2h0Zm9yd2FyZAplbmdpbmVlcmluZywgcmVxdWlyaW5nIG5vIHNlcmlvdXMgbWluZC1iZW5kaW5nIHdoYXRzb2V2ZXIuPC9wPgoKPHA+U28sIHdoYXQgaXMgd3Jvbmcgd2l0aCBDb2RlTWlycm9yIDE/IEknZCBlc3RpbWF0ZSwgYnkgbWFpbGluZyBsaXN0CmFjdGl2aXR5IGFuZCBnZW5lcmFsIHNlYXJjaC1lbmdpbmUgcHJlc2VuY2UsIHRoYXQgaXQgaGFzIGJlZW4KaW50ZWdyYXRlZCBpbnRvIGFib3V0IGEgdGhvdXNhbmQgc3lzdGVtcyBieSBub3cuIFRoZSBtb3N0IHByb21pbmVudApvbmUsIHNpbmNlIGEgZmV3IHdlZWtzLApiZWluZyA8YSBocmVmPSJodHRwOi8vZ29vZ2xlY29kZS5ibG9nc3BvdC5jb20vMjAxMS8wMS9tYWtlLXF1aWNrLWZpeGVzLXF1aWNrZXItb24tZ29vZ2xlLmh0bWwiPkdvb2dsZQpjb2RlJ3MgcHJvamVjdCBob3N0aW5nPC9hPi4gSXQgd29ya3MsIGFuZCBpdCdzIGJlaW5nIHVzZWQgd2lkZWx5LjwvYT4KCjxwPlN0aWxsLCBJIGRpZCBub3Qgc3RhcnQgcmVwbGFjaW5nIGl0IGJlY2F1c2UgSSB3YXMgYm9yZWQuIENvZGVNaXJyb3IKMSB3YXMgaGVhdmlseSByZWxpYW50IG9uIDxjb2RlPmRlc2lnbk1vZGU8L2NvZGU+Cm9yIDxjb2RlPmNvbnRlbnRFZGl0YWJsZTwvY29kZT4gKGRlcGVuZGluZyBvbiB0aGUgYnJvd3NlcikuIE5laXRoZXIgb2YKdGhlc2UgYXJlIHdlbGwgc3BlY2lmaWVkIChIVE1MNSB0cmllcwp0byA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lZGl0aW5nLmh0bWwjY29udGVudGVkaXRhYmxlIj5zcGVjaWZ5PC9hPgp0aGVpciBiYXNpY3MpLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZXkgdGVuZCB0byBiZSBvbmUgb2YgdGhlIG1vcmUKb2JzY3VyZSBhbmQgYnVnZ3kgYXJlYXMgb2YgYnJvd3NlciBmdW5jdGlvbmFsaXR54oCUQ29kZU1pcnJvciwgYnkgdXNpbmcKdGhpcyBmdW5jdGlvbmFsaXR5IGluIGEgbm9uLXR5cGljYWwgd2F5LCB3YXMgY29uc3RhbnRseSBydW5uaW5nIHVwCmFnYWluc3QgYnJvd3NlciBidWdzLiBXZWJLaXQgd291bGRuJ3Qgc2hvdyBhbiBlbXB0eSBsaW5lIGF0IHRoZSBlbmQgb2YKdGhlIGRvY3VtZW50LCBhbmQgaW4gc29tZSByZWxlYXNlcyB3b3VsZCBzdWRkZW5seSBnZXQgdW5iZWFyYWJseSBzbG93LgpGaXJlZm94IHdvdWxkIHNob3cgdGhlIGN1cnNvciBpbiB0aGUgd3JvbmcgcGxhY2UuIEludGVybmV0IEV4cGxvcmVyCndvdWxkIGluc2lzdCBvbiBsaW5raWZ5aW5nIGV2ZXJ5dGhpbmcgdGhhdCBsb29rZWQgbGlrZSBhIFVSTCBvciBlbWFpbAphZGRyZXNzLCBhIGJlaGF2aW91ciB0aGF0IGNhbid0IGJlIHR1cm5lZCBvZmYuIFNvbWUgYnVncyBJIG1hbmFnZWQgdG8Kd29yayBhcm91bmQgKHdoaWNoIHdhcyBvZnRlbiBhIGZydXN0cmF0aW5nLCBwYWluZnVsIHByb2Nlc3MpLCBvdGhlcnMsCnN1Y2ggYXMgdGhlIEZpcmVmb3ggY3Vyc29yIHBsYWNlbWVudCwgSSBnYXZlIHVwIG9uLCBhbmQgaGFkIHRvIHRlbGwKdXNlciBhZnRlciB1c2VyIHRoYXQgdGhleSB3ZXJlIGtub3duIHByb2JsZW1zLCBidXQgbm90IHNvbWV0aGluZyBJCmNvdWxkIGhlbHAuPC9wPgoKPHA+QWxzbywgdGhlcmUgaXMgdGhlIGZhY3QgdGhhdCA8Y29kZT5kZXNpZ25Nb2RlPC9jb2RlPiAod2hpY2ggc2VlbWVkCnRvIGJlIGxlc3MgYnVnZ3kgdGhhbiA8Y29kZT5jb250ZW50RWRpdGFibGU8L2NvZGU+IGluIFdlYmtpdCBhbmQKRmlyZWZveCwgYW5kIHdhcyB0aHVzIHVzZWQgYnkgQ29kZU1pcnJvciAxIGluIHRob3NlIGJyb3dzZXJzKSByZXF1aXJlcwphIGZyYW1lLiBGcmFtZXMgYXJlIGFub3RoZXIgdHJpY2t5IGFyZWEuIEl0IHRha2VzIHNvbWUgZWZmb3J0IHRvCnByZXZlbnQgZ2V0dGluZyB0cmlwcGVkIHVwIGJ5IGRvbWFpbiByZXN0cmljdGlvbnMsIHRoZXkgZG9uJ3QKaW5pdGlhbGl6ZSBzeW5jaHJvbm91c2x5LCBiZWhhdmUgc3RyYW5nZWx5IGluIHJlc3BvbnNlIHRvIHRoZSBiYWNrCmJ1dHRvbiwgYW5kLCBvbiBzZXZlcmFsIGJyb3dzZXJzLCBjYW4ndCBiZSBtb3ZlZCBhcm91bmQgdGhlIERPTQp3aXRob3V0IGhhdmluZyB0aGVtIHJlLWluaXRpYWxpemUuIFRoZXkgZGlkIHByb3ZpZGUgYSB2ZXJ5IG5pY2Ugd2F5IHRvCm5hbWVzcGFjZSB0aGUgbGlicmFyeSwgdGhvdWdo4oCUQ29kZU1pcnJvciAxIGNvdWxkIGZyZWVseSBwb2xsdXRlIHRoZQpuYW1lc3BhY2UgaW5zaWRlIHRoZSBmcmFtZS48L3A+Cgo8cD5GaW5hbGx5LCB3b3JraW5nIHdpdGggYW4gZWRpdGFibGUgZG9jdW1lbnQgbWVhbnMgd29ya2luZyB3aXRoCnNlbGVjdGlvbiBpbiBhcmJpdHJhcnkgRE9NIHN0cnVjdHVyZXMuIEludGVybmV0IEV4cGxvcmVyICg4IGFuZApiZWZvcmUpIGhhcyBhbiB1dHRlcmx5IGRpZmZlcmVudCAoYW5kIGF3a3dhcmQpIHNlbGVjdGlvbiBBUEkgdGhhbiBhbGwKb2YgdGhlIG90aGVyIGJyb3dzZXJzLCBhbmQgZXZlbiBhbW9uZyB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZgo8Y29kZT5kb2N1bWVudC5zZWxlY3Rpb248L2NvZGU+LCBkZXRhaWxzIGFib3V0IGhvdyBleGFjdGx5IGEgc2VsZWN0aW9uCmlzIHJlcHJlc2VudGVkIHZhcnkgcXVpdGUgYSBiaXQuIEFkZCB0byB0aGF0IHRoZSBmYWN0IHRoYXQgT3BlcmEncwpzZWxlY3Rpb24gc3VwcG9ydCB0ZW5kZWQgdG8gYmUgdmVyeSBidWdneSB1bnRpbCByZWNlbnRseSwgYW5kIHlvdSBjYW4KaW1hZ2luZSB3aHkgQ29kZU1pcnJvciAxIGNvbnRhaW5zIDcwMCBsaW5lcyBvZiBzZWxlY3Rpb24taGFuZGxpbmcKY29kZS48L3A+Cgo8cD5BbmQgdGhhdCBicmluZ3MgdXMgdG8gdGhlIG1haW4gaXNzdWUgd2l0aCB0aGUgQ29kZU1pcnJvciAxCmNvZGUgYmFzZTogVGhlIHByb3BvcnRpb24gb2YgYnJvd3Nlci1idWctd29ya2Fyb3VuZHMgdG8gcmVhbAphcHBsaWNhdGlvbiBjb2RlIHdhcyBnZXR0aW5nIGRhbmdlcm91c2x5IGhpZ2guIEJ5IGJ1aWxkaW5nIG9uIHRvcCBvZiBhCmZldyBkb2RneSBmZWF0dXJlcywgSSBwdXQgdGhlIHN5c3RlbSBpbiBhIHZ1bG5lcmFibGUgcG9zaXRpb27igJRhbnkKaW5jb21wYXRpYmlsaXR5IGFuZCBidWdnaW5lc3MgaW4gdGhlc2UgZmVhdHVyZXMsIEkgaGFkIHRvIHBhcGVyIG92ZXIKd2l0aCBteSBvd24gY29kZS4gTm90IG9ubHkgZGlkIEkgaGF2ZSB0byBkbyBzb21lIHNlcmlvdXMgc3R1bnQtd29yayB0bwpnZXQgaXQgdG8gd29yayBvbiBvbGRlciBicm93c2VycyAoYXMgZGV0YWlsZWQgaW4gdGhlCnByZXZpb3VzIDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5zdG9yeTwvYT4pLCB0aGluZ3MKYWxzbyBrZXB0IGJyZWFraW5nIGluIG5ld2x5IHJlbGVhc2VkIHZlcnNpb25zLCByZXF1aXJpbmcgbWUgdG8gY29tZSB1cAp3aXRoIDxlbT5uZXc8L2VtPiBzY2FyeSBoYWNrcyBpbiBvcmRlciB0byBrZWVwIHVwLiBUaGlzIHdhcyBzdGFydGluZwp0byBsb3NlIGl0cyBhcHBlYWwuPC9wPgoKPGgyIGlkPSJhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvaDI+Cgo8cD5XaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHRyeSB0byBzaWRlc3RlcCBtb3N0IG9mIHRoZSBoYWlyeSBoYWNrcwp0aGF0IGNhbWUgdXAgaW4gdmVyc2lvbiAxLiBJIG93ZSBhIGxvdCB0byB0aGUKPGEgaHJlZj0iaHR0cDovL2FjZS5hamF4Lm9yZyI+QUNFPC9hPiBlZGl0b3IgZm9yIGluc3BpcmF0aW9uIG9uIGhvdyB0bwphcHByb2FjaCB0aGlzLjwvcD4KCjxwPkkgYWJzb2x1dGVseSBkaWQgbm90IHdhbnQgdG8gYmUgY29tcGxldGVseSByZWxpYW50IG9uIGtleSBldmVudHMgdG8KZ2VuZXJhdGUgbXkgaW5wdXQuIEV2ZXJ5IEphdmFTY3JpcHQgcHJvZ3JhbW1lciBrbm93cyB0aGF0IGtleSBldmVudAppbmZvcm1hdGlvbiBpcyBob3JyaWJsZSBhbmQgaW5jb21wbGV0ZS4gU29tZSBwZW9wbGUgKG1vc3QgYXdlc29tZWx5Ck1paGFpIEJhem9uIHdpdGggPGEgaHJlZj0iaHR0cDovL3ltYWNzLm9yZyI+WW1hY3M8L2E+KSBoYXZlIGJlZW4gYWJsZQp0byBidWlsZCBtb3JlIG9yIGxlc3MgZnVuY3Rpb25pbmcgZWRpdG9ycyBieSBkaXJlY3RseSByZWFkaW5nIGtleQpldmVudHMsIGJ1dCBpdCB0YWtlcyBhIGxvdCBvZiB3b3JrICh0aGUga2luZCBvZiBuZXZlci1lbmRpbmcsIGZyYWdpbGUKd29yayBJIGRlc2NyaWJlZCBlYXJsaWVyKSwgYW5kIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBwcm9wZXJseSBzdXBwb3J0CnRoaW5ncyBsaWtlIG11bHRpLWtleXN0b2tlIGludGVybmF0aW9uYWwgY2hhcmFjdGVyCmlucHV0LiA8YSBocmVmPSIja2V5bWFwIiBjbGFzcz0idXBkYXRlIj5bc2VlIGJlbG93IGZvciBjYXZlYXRdPC9hPjwvcD4KCjxwPlNvIHdoYXQgSSBkbyBpcyBmb2N1cyBhIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGxldCB0aGUgYnJvd3NlcgpiZWxpZXZlIHRoYXQgdGhlIHVzZXIgaXMgdHlwaW5nIGludG8gdGhhdC4gV2hhdCB3ZSBzaG93IHRvIHRoZSB1c2VyIGlzCmEgRE9NIHN0cnVjdHVyZSB3ZSBidWlsdCB0byByZXByZXNlbnQgaGlzIGRvY3VtZW50LiBJZiB0aGlzIGlzIHVwZGF0ZWQKcXVpY2tseSBlbm91Z2gsIGFuZCBzaG93cyBzb21lIGtpbmQgb2YgYmVsaWV2YWJsZSBjdXJzb3IsIGl0IGZlZWxzCmxpa2UgYSByZWFsIHRleHQtaW5wdXQgY29udHJvbC48L3A+Cgo8cD5Bbm90aGVyIGJpZyB3aW4gaXMgdGhhdCB0aGlzIERPTSByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBoYXZlIHRvCnNwYW4gdGhlIHdob2xlIGRvY3VtZW50LiBTb21lIENvZGVNaXJyb3IgMSB1c2VycyBpbnNpc3RlZCB0aGF0IHRoZXkKbmVlZGVkIHRvIHB1dCBhIDMwIHRob3VzYW5kIGxpbmUgWE1MIGRvY3VtZW50IGludG8gQ29kZU1pcnJvci4gUHV0dGluZwphbGwgdGhhdCBpbnRvIHRoZSBET00gdGFrZXMgYSB3aGlsZSwgZXNwZWNpYWxseSBzaW5jZSwgZm9yIHNvbWUKcmVhc29uLCBhbiBlZGl0YWJsZSBET00gdHJlZSBpcyBzbG93ZXIgdGhhbiBhIG5vcm1hbCBvbmUgb24gbW9zdApicm93c2Vycy4gSWYgd2UgaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB3aGF0IHdlIHNob3csIHdlIG11c3Qgb25seQplbnN1cmUgdGhhdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBhZGRlZCwgYW5kIGNhbgpkbyB0aGUgcmVzdCBvbmx5IHdoZW4gbmVlZGVkLiAoRm9ydHVuYXRlbHksIHRoZSA8Y29kZT5vbnNjcm9sbDwvY29kZT4KZXZlbnQgd29ya3MgYWxtb3N0IHRoZSBzYW1lIG9uIGFsbCBicm93c2VycywgYW5kIGxlbmRzIGl0c2VsZiB3ZWxsIHRvCmRpc3BsYXlpbmcgdGhpbmdzIG9ubHkgYXMgdGhleSBhcmUgc2Nyb2xsZWQgaW50byB2aWV3Lik8L3A+Cgo8aDIgaWQ9ImlucHV0Ij5JbnB1dDwvaDI+Cgo8cD5BQ0UgdXNlcyBpdHMgaGlkZGVuIHRleHRhcmVhIG9ubHkgYXMgYSB0ZXh0IGlucHV0IHNoaW0sIGFuZCBkb2VzCmFsbCBjdXJzb3IgbW92ZW1lbnQgYW5kIHRoaW5ncyBsaWtlIHRleHQgZGVsZXRpb24gaXRzZWxmIGJ5IGRpcmVjdGx5CmhhbmRsaW5nIGtleSBldmVudHMuIENvZGVNaXJyb3IncyB3YXkgaXMgdG8gbGV0IHRoZSBicm93c2VyIGRvIGl0cwp0aGluZyBhcyBtdWNoIGFzIHBvc3NpYmxlLCBhbmQgbm90LCBmb3IgZXhhbXBsZSwgZGVmaW5lIGl0cyBvd24gc2V0IG9mCmtleSBiaW5kaW5ncy4gT25lIHdheSB0byBkbyB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0byBoYXZlIHRoZSB3aG9sZQpkb2N1bWVudCBpbnNpZGUgdGhlIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGFmdGVyIGVhY2gga2V5IGV2ZW50IHVwZGF0ZQp0aGUgZGlzcGxheSBET00gdG8gcmVmbGVjdCB3aGF0J3MgaW4gdGhhdCB0ZXh0YXJlYS48L3A+Cgo8cD5UaGF0J2QgYmUgc2ltcGxlLCBidXQgaXQgaXMgbm90IHJlYWxpc3RpYy4gRm9yIGV2ZW4gbWVkaXVtLXNpemVkCmRvY3VtZW50IHRoZSBlZGl0b3Igd291bGQgYmUgY29uc3RhbnRseSBtdW5naW5nIGh1Z2Ugc3RyaW5ncywgYW5kIGdldAp0ZXJyaWJseSBzbG93LiBXaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHB1dCB0aGUgY3VycmVudCBzZWxlY3Rpb24sCmFsb25nIHdpdGggYW4gZXh0cmEgbGluZSBvbiB0aGUgdG9wIGFuZCBvbiB0aGUgYm90dG9tLCBpbnRvIHRoZQp0ZXh0YXJlYS48L3A+Cgo8cD5UaGlzIG1lYW5zIHRoYXQgdGhlIGFycm93IGtleXMgKGFuZCB0aGVpciBjdHJsLXZhcmlhdGlvbnMpLCBob21lLAplbmQsIGV0Y2V0ZXJhLCBkbyBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHNwZWNpYWxseS4gV2UganVzdCByZWFkIHRoZQpjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRlIG91ciBjdXJzb3IgdG8gbWF0Y2ggaXQuCkFsc28sIGNvcHkgYW5kIHBhc3RlIHdvcmsgcHJldHR5IG11Y2ggZm9yIGZyZWUsIGFuZCBwZW9wbGUgZ2V0IHRoZWlyCm5hdGl2ZSBrZXkgYmluZGluZ3MsIHdpdGhvdXQgYW55IHNwZWNpYWwgd29yayBvbiBteSBwYXJ0LiBGb3IgZXhhbXBsZSwKSSBoYXZlIGVtYWNzIGtleSBiaW5kaW5ncyBjb25maWd1cmVkIGZvciBDaHJvbWUgYW5kIEZpcmVmb3guIFRoZXJlIGlzCm5vIHdheSBmb3IgYSBzY3JpcHQgdG8gZGV0ZWN0IHRoaXMuIDxhIGNsYXNzPSJ1cGRhdGUiCmhyZWY9IiNrZXltYXAiPltubyBsb25nZXIgdGhlIGNhc2VdPC9hPjwvcD4KCjxwPk9mIGNvdXJzZSwgc2luY2Ugb25seSBhIHNtYWxsIHBhcnQgb2YgdGhlIGRvY3VtZW50IHNpdHMgaW4gdGhlCnRleHRhcmVhLCBrZXlzIGxpa2UgcGFnZSB1cCBhbmQgY3RybC1lbmQgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgpDb2RlTWlycm9yIGlzIGNhdGNoaW5nIHRob3NlIGV2ZW50cyBhbmQgaGFuZGxpbmcgdGhlbSBpdHNlbGYuPC9wPgoKPGgyIGlkPSJzZWxlY3Rpb24iPlNlbGVjdGlvbjwvaDI+Cgo8cD5HZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugb2YgYSB0ZXh0YXJlYSBpbiBtb2Rlcm4KYnJvd3NlcnMgaXMgdHJpdmlhbOKAlHlvdSBqdXN0IHVzZSB0aGUgPGNvZGU+c2VsZWN0aW9uU3RhcnQ8L2NvZGU+CmFuZCA8Y29kZT5zZWxlY3Rpb25FbmQ8L2NvZGU+IHByb3BlcnRpZXMuIE9uIElFIHlvdSBoYXZlIHRvIGRvIHNvbWUKaW5zYW5lIHN0dWZmIHdpdGggdGVtcG9yYXJ5IHJhbmdlcyBhbmQgY29tcGVuc2F0aW5nIGZvciB0aGUgZmFjdCB0aGF0Cm1vdmluZyB0aGUgc2VsZWN0aW9uIGJ5IGEgJ2NoYXJhY3Rlcicgd2lsbCB0cmVhdCBcclxuIGFzIGEgc2luZ2xlCmNoYXJhY3RlciwgYnV0IGV2ZW4gdGhlcmUgaXQgaXMgcG9zc2libGUgdG8gYnVpbGQgZnVuY3Rpb25zIHRoYXQKcmVsaWFibHkgc2V0IGFuZCBnZXQgdGhlIHNlbGVjdGlvbiByYW5nZS48L3A+Cgo8cD5CdXQgY29uc2lkZXIgdGhpcyB0eXBpY2FsIGNhc2U6IFdoZW4gSSdtIHNvbWV3aGVyZSBpbiBteSBkb2N1bWVudCwKcHJlc3Mgc2hpZnQsIGFuZCBwcmVzcyB0aGUgdXAgYXJyb3csIHNvbWV0aGluZyBnZXRzIHNlbGVjdGVkLiBUaGVuLCBpZgpJLCBzdGlsbCBob2xkaW5nIHNoaWZ0LCBwcmVzcyB0aGUgdXAgYXJyb3cgYWdhaW4sIHRoZSB0b3Agb2YgbXkKc2VsZWN0aW9uIGlzIGFkanVzdGVkLiBUaGUgc2VsZWN0aW9uIHJlbWVtYmVycyB3aGVyZSBpdHMgPGVtPmhlYWQ8L2VtPgphbmQgaXRzIDxlbT5hbmNob3I8L2VtPiBhcmUsIGFuZCBtb3ZlcyB0aGUgaGVhZCB3aGVuIHdlIHNoaWZ0LW1vdmUuClRoaXMgaXMgYSBnZW5lcmFsbHkgYWNjZXB0ZWQgcHJvcGVydHkgb2Ygc2VsZWN0aW9ucywgYW5kIGRvbmUgcmlnaHQgYnkKZXZlcnkgZWRpdGluZyBjb21wb25lbnQgYnVpbHQgaW4gdGhlIHBhc3QgdHdlbnR5IHllYXJzLjwvcD4KCjxwPkJ1dCBub3Qgc29tZXRoaW5nIHRoYXQgdGhlIGJyb3dzZXIgc2VsZWN0aW9uIEFQSXMgZXhwb3NlLjwvcD4KCjxwPkdyZWF0LiBTbyB3aGVuIHNvbWVvbmUgY3JlYXRlcyBhbiAndXBzaWRlLWRvd24nIHNlbGVjdGlvbiwgdGhlIG5leHQKdGltZSBDb2RlTWlycm9yIGhhcyB0byB1cGRhdGUgdGhlIHRleHRhcmVhLCBpdCdsbCByZS1jcmVhdGUgdGhlCnNlbGVjdGlvbiBhcyBhbiAndXBzaWRlLXVwJyBzZWxlY3Rpb24sIHdpdGggdGhlIGFuY2hvciBhdCB0aGUgdG9wLCBhbmQKdGhlIG5leHQgY3Vyc29yIG1vdGlvbiB3aWxsIGJlaGF2ZSBpbiBhbiB1bmV4cGVjdGVkIHdheeKAlG91ciBzZWNvbmQKdXAtYXJyb3cgcHJlc3MgaW4gdGhlIGV4YW1wbGUgYWJvdmUgd2lsbCBub3QgZG8gYW55dGhpbmcsIHNpbmNlIGl0IGlzCmludGVycHJldGVkIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdC48L3A+Cgo8cD5ObyBwcm9ibGVtLiBXZSdsbCBqdXN0LCBlaG0sIGRldGVjdCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMKdXBzaWRlLWRvd24gKHlvdSBjYW4gdGVsbCBieSB0aGUgd2F5IGl0IHdhcyBjcmVhdGVkKSwgYW5kIHRoZW4sIHdoZW4KYW4gdXBzaWRlLWRvd24gc2VsZWN0aW9uIGlzIHByZXNlbnQsIGFuZCBhIGN1cnNvci1tb3Zpbmcga2V5IGlzCnByZXNzZWQgaW4gY29tYmluYXRpb24gd2l0aCBzaGlmdCwgd2UgcXVpY2tseSBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uCmluIHRoZSB0ZXh0YXJlYSB0byBpdHMgc3RhcnQsIGFsbG93IHRoZSBrZXkgdG8gdGFrZSBlZmZlY3QsIGFuZCB0aGVuCmNvbWJpbmUgaXRzIG5ldyBoZWFkIHdpdGggaXRzIG9sZCBhbmNob3IgdG8gZ2V0IHRoZSA8ZW0+cmVhbDwvZW0+CnNlbGVjdGlvbi48L3A+Cgo8cD5JbiBzaG9ydCwgc2NhcnkgaGFja3MgY291bGQgbm90IGJlIGF2b2lkZWQgZW50aXJlbHkgaW4gQ29kZU1pcnJvcgoyLjwvcD4KCjxwPkFuZCwgdGhlIG9ic2VydmFudCByZWFkZXIgbWlnaHQgYXNrLCBob3cgZG8geW91IGV2ZW4ga25vdyB0aGF0IGEKa2V5IGNvbWJvIGlzIGEgY3Vyc29yLW1vdmluZyBjb21ibywgaWYgeW91IGNsYWltIHlvdSBzdXBwb3J0IGFueQpuYXRpdmUga2V5IGJpbmRpbmdzPyBXZWxsLCB3ZSBkb24ndCwgYnV0IHdlIGNhbiBsZWFybi4gVGhlIGVkaXRvcgprZWVwcyBhIHNldCBrbm93biBjdXJzb3ItbW92ZW1lbnQgY29tYm9zIChpbml0aWFsaXplZCB0byB0aGUKcHJlZGljdGFibGUgZGVmYXVsdHMpLCBhbmQgdXBkYXRlcyB0aGlzIHNldCB3aGVuIGl0IG9ic2VydmVzIHRoYXQKcHJlc3NpbmcgYSBjZXJ0YWluIGtleSBoYWQgKG9ubHkpIHRoZSBlZmZlY3Qgb2YgbW92aW5nIHRoZSBjdXJzb3IuClRoaXMsIG9mIGNvdXJzZSwgZG9lc24ndCB3b3JrIGlmIHRoZSBmaXJzdCB0aW1lIHRoZSBrZXkgaXMgdXNlZCB3YXMKZm9yIGV4dGVuZGluZyBhbiBpbnZlcnRlZCBzZWxlY3Rpb24sIGJ1dCBpdCB3b3JrcyBtb3N0IG9mIHRoZQp0aW1lLjwvcD4KCjxoMiBpZD0idXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvaDI+Cgo8cD5PbmUgdGhpbmcgdGhhdCBhbHdheXMgY29tZXMgdXAgd2hlbiB5b3UgaGF2ZSBhIGNvbXBsaWNhdGVkIGludGVybmFsCnN0YXRlIHRoYXQncyByZWZsZWN0ZWQgaW4gc29tZSB1c2VyLXZpc2libGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24KKGluIHRoaXMgY2FzZSwgdGhlIGRpc3BsYXllZCBjb2RlIGFuZCB0aGUgdGV4dGFyZWEncyBjb250ZW50KSBpcwprZWVwaW5nIHRoZSB0d28gaW4gc3luYy4gVGhlIG5haXZlIHdheSBpcyB0byBqdXN0IHVwZGF0ZSB0aGUgZGlzcGxheQpldmVyeSB0aW1lIHlvdSBjaGFuZ2UgeW91ciBzdGF0ZSwgYnV0IHRoaXMgaXMgbm90IG9ubHkgZXJyb3IgcHJvbmUKKHlvdSdsbCBmb3JnZXQpLCBpdCBhbHNvIGVhc2lseSBsZWFkcyB0byBkdXBsaWNhdGUgd29yayBvbiBiaWcsCmNvbXBvc2l0ZSBvcGVyYXRpb25zLiBUaGVuIHlvdSBzdGFydCBwYXNzaW5nIGFyb3VuZCBmbGFncyBpbmRpY2F0aW5nCndoZXRoZXIgdGhlIGRpc3BsYXkgc2hvdWxkIGJlIHVwZGF0ZWQgaW4gYW4gYXR0ZW1wdCB0byBiZSBlZmZpY2llbnQKYWdhaW4gYW5kLCB3ZWxsLCBhdCB0aGF0IHBvaW50IHlvdSBtaWdodCBhcyB3ZWxsIGdpdmUgdXAgY29tcGxldGVseS48L3A+Cgo8cD5JIGRpZCBnbyBkb3duIHRoYXQgcm9hZCwgYnV0IHRoZW4gc3dpdGNoZWQgdG8gYSBtdWNoIHNpbXBsZXIgbW9kZWw6CnNpbXBseSBrZWVwIHRyYWNrIG9mIGFsbCB0aGUgdGhpbmdzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgZHVyaW5nIGFuCmFjdGlvbiwgYW5kIHRoZW4sIG9ubHkgYXQgdGhlIGVuZCwgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gdXBkYXRlIHRoZQp1c2VyLXZpc2libGUgZGlzcGxheS48L3A+Cgo8cD5Db2RlTWlycm9yIHVzZXMgYSBjb25jZXB0IG9mIDxlbT5vcGVyYXRpb25zPC9lbT4sIHdoaWNoIHN0YXJ0IGJ5CmNhbGxpbmcgYSBzcGVjaWZpYyBzZXQtdXAgZnVuY3Rpb24gdGhhdCBjbGVhcnMgdGhlIHN0YXRlIGFuZCBlbmQgYnkKY2FsbGluZyBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgcmVhZHMgdGhpcyBzdGF0ZSBhbmQgZG9lcyB0aGUgcmVxdWlyZWQKdXBkYXRpbmcuIE1vc3QgZXZlbnQgaGFuZGxlcnMsIGFuZCBhbGwgdGhlIHVzZXItdmlzaWJsZSBtZXRob2RzIHRoYXQKY2hhbmdlIHN0YXRlIGFyZSB3cmFwcGVkIGxpa2UgdGhpcy4gVGhlcmUncyBhIG1ldGhvZApjYWxsZWQgPGNvZGU+b3BlcmF0aW9uPC9jb2RlPiB0aGF0IGFjY2VwdHMgYSBmdW5jdGlvbiwgYW5kIHJldHVybnMKYW5vdGhlciBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBnaXZlbiBmdW5jdGlvbiBhcyBhbiBvcGVyYXRpb24uPC9wPgoKPHA+SXQncyB0cml2aWFsIHRvIGV4dGVuZCB0aGlzIChhcyBDb2RlTWlycm9yIGRvZXMpIHRvIGRldGVjdCBuZXN0aW5nLAphbmQsIHdoZW4gYW4gb3BlcmF0aW9uIGlzIHN0YXJ0ZWQgaW5zaWRlIGFuIG9wZXJhdGlvbiwgc2ltcGx5CmluY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCwgYW5kIG9ubHkgZG8gdGhlIHVwZGF0aW5nIHdoZW4gdGhpcyBjb3VudApyZWFjaGVzIHplcm8gYWdhaW4uPC9wPgoKPHA+SWYgd2UgaGF2ZSBhIHNldCBvZiBjaGFuZ2VkIHJhbmdlcyBhbmQga25vdyB0aGUgY3VycmVudGx5IHNob3duCnJhbmdlLCB3ZSBjYW4gKHdpdGggc29tZSBhd2t3YXJkIGNvZGUgdG8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQKY2hhbmdlcyBjYW4gYWRkIGFuZCByZW1vdmUgbGluZXMsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5naW5nCmNvb3JkaW5hdGUgc3lzdGVtKSBjb25zdHJ1Y3QgYSBtYXAgb2YgdGhlIHJhbmdlcyB0aGF0IHdlcmUgbGVmdAppbnRhY3QuIFdlIGNhbiB0aGVuIGNvbXBhcmUgdGhpcyBtYXAgd2l0aCB0aGUgcGFydCBvZiB0aGUgZG9jdW1lbnQKdGhhdCdzIGN1cnJlbnRseSB2aXNpYmxlIChiYXNlZCBvbiBzY3JvbGwgb2Zmc2V0IGFuZCBlZGl0b3IgaGVpZ2h0KSB0bwpkZXRlcm1pbmUgd2hldGhlciBzb21ldGhpbmcgbmVlZHMgdG8gYmUgdXBkYXRlZC48L3A+Cgo8cD5Db2RlTWlycm9yIHVzZXMgdHdvIHVwZGF0ZSBhbGdvcml0aG1z4oCUYSBmdWxsIHJlZnJlc2gsIHdoZXJlIGl0IGp1c3QKZGlzY2FyZHMgdGhlIHdob2xlIHBhcnQgb2YgdGhlIERPTSB0aGF0IGNvbnRhaW5zIHRoZSBlZGl0ZWQgdGV4dCBhbmQKcmVidWlsZHMgaXQsIGFuZCBhIHBhdGNoIGFsZ29yaXRobSwgd2hlcmUgaXQgdXNlcyB0aGUgaW5mb3JtYXRpb24KYWJvdXQgY2hhbmdlZCBhbmQgaW50YWN0IHJhbmdlcyB0byB1cGRhdGUgb25seSB0aGUgb3V0LW9mLWRhdGUgcGFydHMKb2YgdGhlIERPTS4gV2hlbiBtb3JlIHRoYW4gMzAgcGVyY2VudCAod2hpY2ggaXMgdGhlIGN1cnJlbnQgaGV1cmlzdGljLAptaWdodCBjaGFuZ2UpIG9mIHRoZSBsaW5lcyBuZWVkIHRvIGJlIHVwZGF0ZWQsIHRoZSBmdWxsIHJlZnJlc2ggaXMKY2hvc2VuIChzaW5jZSBpdCdzIGZhc3RlciB0byBkbyB0aGFuIHBhaW5zdGFraW5nbHkgZmluZGluZyBhbmQKdXBkYXRpbmcgYWxsIHRoZSBjaGFuZ2VkIGxpbmVzKSwgaW4gdGhlIG90aGVyIGNhc2UgaXQgZG9lcyB0aGUKcGF0Y2hpbmcgKHNvIHRoYXQsIGlmIHlvdSBzY3JvbGwgYSBsaW5lIG9yIHNlbGVjdCBhbm90aGVyIGNoYXJhY3RlciwKdGhlIHdob2xlIHNjcmVlbiBkb2Vzbid0IGhhdmUgdG8gYmUKcmUtcmVuZGVyZWQpLiA8c3BhbiBjbGFzcz0idXBkYXRlIj5bdGhlIGZ1bGwtcmVmcmVzaAphbGdvcml0aG0gd2FzIGRyb3BwZWQsIGl0IHdhc24ndCByZWFsbHkgZmFzdGVyIHRoYW4gdGhlIHBhdGNoaW5nCm9uZV08L3NwYW4+PC9wPgoKPHA+QWxsIHVwZGF0aW5nIHVzZXMgPGNvZGU+aW5uZXJIVE1MPC9jb2RlPiByYXRoZXIgdGhhbiBkaXJlY3QgRE9NCm1hbmlwdWxhdGlvbiwgc2luY2UgdGhhdCBzdGlsbCBzZWVtcyB0byBiZSBieSBmYXIgdGhlIGZhc3Rlc3Qgd2F5IHRvCmJ1aWxkIGRvY3VtZW50cy4gVGhlcmUncyBhIHBlci1saW5lIGZ1bmN0aW9uIHRoYXQgY29tYmluZXMgdGhlCmhpZ2hsaWdodGluZywgPGEgaHJlZj0ibWFudWFsLmh0bWwjbWFya1RleHQiPm1hcmtpbmc8L2E+LCBhbmQKc2VsZWN0aW9uIGluZm8gZm9yIHRoYXQgbGluZSBpbnRvIGEgc25pcHBldCBvZiBIVE1MLiBUaGUgcGF0Y2ggdXBkYXRlcgp1c2VzIHRoaXMgdG8gcmVzZXQgaW5kaXZpZHVhbCBsaW5lcywgdGhlIHJlZnJlc2ggdXBkYXRlciBidWlsZHMgYW4KSFRNTCBjaHVuayBmb3IgdGhlIHdob2xlIHZpc2libGUgZG9jdW1lbnQgYXQgb25jZSwgYW5kIHRoZW4gdXNlcyBhCnNpbmdsZSA8Y29kZT5pbm5lckhUTUw8L2NvZGU+IHVwZGF0ZSB0byBkbyB0aGUgcmVmcmVzaC48L3A+Cgo8aDIgaWQ9InBhcnNlIj5QYXJzZXJzIGNhbiBiZSBTaW1wbGU8L2gyPgoKPHA+V2hlbiBJIHdyb3RlIENvZGVNaXJyb3IgMSwgSQp0aG91Z2h0IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sI3BhcnNlciI+aW50ZXJydXB0YWJsZQpwYXJzZXJzPC9hPiB3ZXJlIGEgaHVnZWx5IHNjYXJ5IGFuZCBjb21wbGljYXRlZCB0aGluZywgYW5kIEkgdXNlZCBhCmJ1bmNoIG9mIGhlYXZ5d2VpZ2h0IGFic3RyYWN0aW9ucyB0byBrZWVwIHRoaXMgc3VwcG9zZWQgY29tcGxleGl0eQp1bmRlciBjb250cm9sOiBwYXJzZXJzCndlcmUgPGEgaHJlZj0iaHR0cDovL2JvYi5weXRob25tYWMub3JnL2FyY2hpdmVzLzIwMDUvMDcvMDYvaXRlcmF0aW9uLWluLWphdmFzY3JpcHQvIj5pdGVyYXRvcnM8L2E+CnRoYXQgY29uc3VtZWQgaW5wdXQgZnJvbSBhbm90aGVyIGl0ZXJhdG9yLCBhbmQgdXNlZCBmdW5ueQpjbG9zdXJlLXJlc2V0dGluZyB0cmlja3MgdG8gY29weSBhbmQgcmVzdW1lIHRoZW1zZWx2ZXMuPC9wPgoKPHA+VGhpcyBtYWRlIGZvciBhIHJhdGhlciBuaWNlIHN5c3RlbSwgaW4gdGhhdCBwYXJzZXJzIGZvcm1lZCBzdHJpY3RseQpzZXBhcmF0ZSBtb2R1bGVzLCBhbmQgY291bGQgYmUgY29tcG9zZWQgaW4gcHJlZGljdGFibGUgd2F5cy4KVW5mb3J0dW5hdGVseSwgaXQgd2FzIHF1aXRlIHNsb3cgKHN0YWNraW5nIHRocmVlIG9yIGZvdXIgaXRlcmF0b3JzIG9uCnRvcCBvZiBlYWNoIG90aGVyKSwgYW5kIGV4dHJlbWVseSBpbnRpbWlkYXRpbmcgdG8gcGVvcGxlIG5vdCB1c2VkIHRvIGEKZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBzdHlsZS48L3A+Cgo8cD5XaXRoIGEgZmV3IHNtYWxsIGNoYW5nZXMsIGhvd2V2ZXIsIHdlIGNhbiBrZWVwIGFsbCB0aG9zZQphZHZhbnRhZ2VzLCBidXQgc2ltcGxpZnkgdGhlIEFQSSBhbmQgbWFrZSB0aGUgd2hvbGUgdGhpbmcgbGVzcwppbmRpcmVjdCBhbmQgaW5lZmZpY2llbnQuIENvZGVNaXJyb3IKMidzIDxhIGhyZWY9Im1hbnVhbC5odG1sI21vZGVhcGkiPm1vZGUgQVBJPC9hPiB1c2VzIGV4cGxpY2l0IHN0YXRlCm9iamVjdHMsIGFuZCBtYWtlcyB0aGUgcGFyc2VyL3Rva2VuaXplciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IHRha2VzIGEKc3RhdGUgYW5kIGEgY2hhcmFjdGVyIHN0cmVhbSBhYnN0cmFjdGlvbiwgYWR2YW5jZXMgdGhlIHN0cmVhbSBvbmUKdG9rZW4sIGFuZCByZXR1cm5zIHRoZSB3YXkgdGhlIHRva2VuIHNob3VsZCBiZSBzdHlsZWQuIFRoaXMgc3RhdGUgbWF5CmJlIGNvcGllZCwgb3B0aW9uYWxseSBpbiBhIG1vZGUtZGVmaW5lZCB3YXksIGluIG9yZGVyIHRvIGJlIGFibGUgdG8KY29udGludWUgYSBwYXJzZSBhdCBhIGdpdmVuIHBvaW50LiBFdmVuIHNvbWVvbmUgd2hvJ3MgbmV2ZXIgdG91Y2hlZCBhCmxhbWJkYSBpbiBoaXMgbGlmZSBjYW4gdW5kZXJzdGFuZCB0aGlzIGFwcHJvYWNoLiBBZGRpdGlvbmFsbHksIGZhcgpmZXdlciBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIGNvdXJzZSBvZiBwYXJzaW5nIG5vdy48L3A+Cgo8cD5UaGUgYmlnZ2VzdCBzcGVlZHVwIGNvbWVzIGZyb20gdGhlIGZhY3QgdGhhdCB0aGUgcGFyc2luZyBubyBsb25nZXIKaGFzIHRvIHRvdWNoIHRoZSBET00gdGhvdWdoLiBJbiBDb2RlTWlycm9yIDEsIG9uIGFuIG9sZGVyIGJyb3dzZXIsIHlvdQpjb3VsZCA8ZW0+c2VlPC9lbT4gdGhlIHBhcnNlciB3b3JrIGl0cyB3YXkgdGhyb3VnaCB0aGUgZG9jdW1lbnQsCm1hbmFnaW5nIHNvbWUgdHdlbnR5IGxpbmVzIGluIGVhY2ggNTAtbWlsbGlzZWNvbmQgdGltZSBzbGljZSBpdCBnb3QuIEl0CndhcyByZWFkaW5nIGl0cyBpbnB1dCBmcm9tIHRoZSBET00sIGFuZCB1cGRhdGluZyB0aGUgRE9NIGFzIGl0IHdlbnQKYWxvbmcsIHdoaWNoIGFueSBleHBlcmllbmNlZCBKYXZhU2NyaXB0IHByb2dyYW1tZXIgd2lsbCBpbW1lZGlhdGVseQpzcG90IGFzIGEgcmVjaXBlIGZvciBzbG93bmVzcy4gSW4gQ29kZU1pcnJvciAyLCB0aGUgcGFyc2VyIHVzdWFsbHkKZmluaXNoZXMgdGhlIHdob2xlIGRvY3VtZW50IGluIGEgc2luZ2xlIDEwMC1taWxsaXNlY29uZCB0aW1lIHNsaWNl4oCUaXQKbWFuYWdlcyBzb21lIDE1MDAgbGluZXMgZHVyaW5nIHRoYXQgdGltZSBvbiBDaHJvbWUuIEFsbCBpdCBoYXMgdG8gZG8KaXMgbXVuZ2Ugc3RyaW5ncywgc28gdGhlcmUgaXMgbm8gcmVhbCByZWFzb24gZm9yIGl0IHRvIGJlIHNsb3cKYW55bW9yZS48L3A+Cgo8aDIgaWQ9InN1bW1hcnkiPldoYXQgR2l2ZXM/PC9oMj4KCjxwPkdpdmVuIGFsbCB0aGlzLCB3aGF0IGNhbiB5b3UgZXhwZWN0IGZyb20gQ29kZU1pcnJvciAyPzwvcD4KCjx1bD4KCjxsaT48c3Ryb25nPlNtYWxsLjwvc3Ryb25nPiB0aGUgYmFzZSBsaWJyYXJ5IGlzCnNvbWUgPHNwYW4gY2xhc3M9InVwZGF0ZSI+NDVrPC9zcGFuPiB3aGVuIG1pbmlmaWVkCm5vdywgPHNwYW4gY2xhc3M9InVwZGF0ZSI+MTdrPC9zcGFuPiB3aGVuIGd6aXBwZWQuIEl0J3Mgc21hbGxlciB0aGFuCml0cyBvd24gbG9nby48L2xpPgoKPGxpPjxzdHJvbmc+TGlnaHR3ZWlnaHQuPC9zdHJvbmc+IENvZGVNaXJyb3IgMiBpbml0aWFsaXplcyB2ZXJ5CnF1aWNrbHksIGFuZCBkb2VzIGFsbW9zdCBubyB3b3JrIHdoZW4gaXQgaXMgbm90IGZvY3VzZWQuIFRoaXMgbWVhbnMKeW91IGNhbiB0cmVhdCBpdCBhbG1vc3QgbGlrZSBhIHRleHRhcmVhLCBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvbiBhCnBhZ2Ugd2l0aG91dCB0cm91YmxlLjwvbGk+Cgo8bGk+PHN0cm9uZz5IdWdlIGRvY3VtZW50IHN1cHBvcnQuPC9zdHJvbmc+IFNpbmNlIGhpZ2hsaWdodGluZyBpcwpyZWFsbHkgZmFzdCwgYW5kIG5vIERPTSBzdHJ1Y3R1cmUgaXMgYmVpbmcgYnVpbHQgZm9yIG5vbi12aXNpYmxlCmNvbnRlbnQsIHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgdXAgeW91ciBicm93c2VyIHdoZW4gYQp1c2VyIGVudGVycyBhIG1lZ2FieXRlLXNpemVkIGRvY3VtZW50LjwvbGk+Cgo8bGk+PHN0cm9uZz5FeHRlbmRlZCBBUEkuPC9zdHJvbmc+IFNvbWUgdGhpbmdzIGtlcHQgY29taW5nIHVwIGluIHRoZQptYWlsaW5nIGxpc3QsIHN1Y2ggYXMgbWFya2luZyBwaWVjZXMgb2YgdGV4dCBvciBsaW5lcywgd2hpY2ggd2VyZQpleHRyZW1lbHkgaGFyZCB0byBkbyB3aXRoIENvZGVNaXJyb3IgMS4gVGhlIG5ldyB2ZXJzaW9uIGhhcyBwcm9wZXIKc3VwcG9ydCBmb3IgdGhlc2UgYnVpbHQgaW4uPC9saT4KCjxsaT48c3Ryb25nPlRhYiBzdXBwb3J0Ljwvc3Ryb25nPiBUYWJzIGluc2lkZSBlZGl0YWJsZSBkb2N1bWVudHMgd2VyZSwKZm9yIHNvbWUgcmVhc29uLCBhIG5vLWdvLiBBdCBsZWFzdCBzaXggZGlmZmVyZW50IHBlb3BsZSBhbm5vdW5jZWQgdGhleQp3ZXJlIGdvaW5nIHRvIGFkZCB0YWIgc3VwcG9ydCB0byBDb2RlTWlycm9yIDEsIG5vbmUgc3Vydml2ZWQgKEkgbWVhbiwKbm9uZSBkZWxpdmVyZWQgYSB3b3JraW5nIHZlcnNpb24pLiBDb2RlTWlycm9yIDIgbm8gbG9uZ2VyIHJlbW92ZXMgdGFicwpmcm9tIHlvdXIgZG9jdW1lbnQuPC9saT4KCjxsaT48c3Ryb25nPlNhbmUgc3R5bGluZy48L3N0cm9uZz4gPGNvZGU+aWZyYW1lPC9jb2RlPiBub2RlcyBhcmVuJ3QKcmVhbGx5IGtub3duIGZvciByZXNwZWN0aW5nIGRvY3VtZW50IGZsb3cuIE5vdyB0aGF0IGFuIGVkaXRvciBpbnN0YW5jZQppcyBhIHBsYWluIDxjb2RlPmRpdjwvY29kZT4gZWxlbWVudCwgaXQgaXMgbXVjaCBlYXNpZXIgdG8gc2l6ZSBpdCB0bwpmaXQgdGhlIHN1cnJvdW5kaW5nIGVsZW1lbnRzLiBZb3UgZG9uJ3QgZXZlbiBoYXZlIHRvIG1ha2UgaXQgc2Nyb2xsIGlmCnlvdSBkbyBub3QgPGEgaHJlZj0iLi4vZGVtby9yZXNpemUuaHRtbCI+d2FudCB0bzwvYT4uPC9saT4KCjwvdWw+Cgo8cD5PbiB0aGUgZG93bnNpZGUsIGEgQ29kZU1pcnJvciAyIGluc3RhbmNlIGlzIDxlbT5ub3Q8L2VtPiBhIG5hdGl2ZQplZGl0YWJsZSBjb21wb25lbnQuIFRob3VnaCBpdCBkb2VzIGl0cyBiZXN0IHRvIGVtdWxhdGUgc3VjaCBhCmNvbXBvbmVudCBhcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGVyZSBpcyBmdW5jdGlvbmFsaXR5IHRoYXQgYnJvd3NlcnMKanVzdCBkbyBub3QgYWxsb3cgdXMgdG8gaG9vayBpbnRvLiBEb2luZyBzZWxlY3QtYWxsIGZyb20gdGhlIGNvbnRleHQKbWVudSwgZm9yIGV4YW1wbGUsIGlzIG5vdCBjdXJyZW50bHkgZGV0ZWN0ZWQgYnkgQ29kZU1pcnJvci48L3A+Cgo8cCBpZD0iY2hhbmdlcyIgc3R5bGU9Im1hcmdpbi10b3A6IDJlbTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDoKYm9sZCI+W1VwZGF0ZXMgZnJvbSBOb3ZlbWJlciAxM3RoIDIwMTFdPC9zcGFuPiBSZWNlbnRseSwgSSd2ZSBtYWRlCnNvbWUgY2hhbmdlcyB0byB0aGUgY29kZWJhc2UgdGhhdCBjYXVzZSBzb21lIG9mIHRoZSB0ZXh0IGFib3ZlIHRvIG5vCmxvbmdlciBiZSBjdXJyZW50LiBJJ3ZlIGxlZnQgdGhlIHRleHQgaW50YWN0LCBidXQgYWRkZWQgbWFya2VycyBhdCB0aGUKcGFzc2FnZXMgdGhhdCBhcmUgbm93IGluYWNjdXJhdGUuIFRoZSBuZXcgc2l0dWF0aW9uIGlzIGRlc2NyaWJlZApiZWxvdy48L3A+Cgo8aDIgaWQ9ImJ0cmVlIj5Db250ZW50IFJlcHJlc2VudGF0aW9uPC9oMj4KCjxwPlRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBDb2RlTWlycm9yIDIgcmVwcmVzZW50ZWQgdGhlCmRvY3VtZW50IGFzIGEgZmxhdCBhcnJheSBvZiBsaW5lIG9iamVjdHMuIFRoaXMgd29ya2VkIHdlbGzigJRzcGxpY2luZwphcnJheXMgd2lsbCByZXF1aXJlIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSBhZnRlciB0aGUgc3BsaWNlIHRvIGJlCm1vdmVkLCBidXQgdGhpcyBpcyBiYXNpY2FsbHkganVzdCBhIHNpbXBsZSA8Y29kZT5tZW1tb3ZlPC9jb2RlPiBvZiBhCmJ1bmNoIG9mIHBvaW50ZXJzLCBzbyBpdCBpcyBjaGVhcCBldmVuIGZvciBodWdlIGRvY3VtZW50cy48L3A+Cgo8cD5Ib3dldmVyLCBJIHJlY2VudGx5IGFkZGVkIGxpbmUgd3JhcHBpbmcgYW5kIGNvZGUgZm9sZGluZyAobGluZQpjb2xsYXBzaW5nLCBiYXNpY2FsbHkpLiBPbmNlIGxpbmVzIHN0YXJ0IHRha2luZyB1cCBhIG5vbi1jb25zdGFudAphbW91bnQgb2YgdmVydGljYWwgc3BhY2UsIGxvb2tpbmcgdXAgYSBsaW5lIGJ5IHZlcnRpY2FsIHBvc2l0aW9uCih3aGljaCBpcyBuZWVkZWQgd2hlbiBzb21lb25lIGNsaWNrcyB0aGUgZG9jdW1lbnQsIGFuZCB0byBkZXRlcm1pbmUKdGhlIHZpc2libGUgcGFydCBvZiB0aGUgZG9jdW1lbnQgZHVyaW5nIHNjcm9sbGluZykgY2FuIG9ubHkgYmUgZG9uZQp3aXRoIGEgbGluZWFyIHNjYW4gdGhyb3VnaCB0aGUgd2hvbGUgYXJyYXksIHN1bW1pbmcgdXAgbGluZSBoZWlnaHRzIGFzCnlvdSBnby4gU2VlaW5nIGhvdyBJJ3ZlIGJlZW4gZ29pbmcgb3V0IG9mIG15IHdheSB0byBtYWtlIGJpZyBkb2N1bWVudHMKZmFzdCwgdGhpcyBpcyBub3QgYWNjZXB0YWJsZS48L3A+Cgo8cD5UaGUgbmV3IHJlcHJlc2VudGF0aW9uIGlzIGJhc2VkIG9uIGEgQi10cmVlLiBUaGUgbGVhdmVzIG9mIHRoZSB0cmVlCmNvbnRhaW4gYXJyYXlzIG9mIGxpbmUgb2JqZWN0cywgd2l0aCBhIGZpeGVkIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSwKYW5kIHRoZSBub24tbGVhZiBub2RlcyBzaW1wbHkgaG9sZCBhcnJheXMgb2YgY2hpbGQgbm9kZXMuIEVhY2ggbm9kZQpzdG9yZXMgYm90aCB0aGUgYW1vdW50IG9mIGxpbmVzIHRoYXQgbGl2ZSBiZWxvdyB0aGVtIGFuZCB0aGUgdmVydGljYWwKc3BhY2UgdGFrZW4gdXAgYnkgdGhlc2UgbGluZXMuIFRoaXMgYWxsb3dzIHRoZSB0cmVlIHRvIGJlIGluZGV4ZWQgYm90aApieSBsaW5lIG51bWJlciBhbmQgYnkgdmVydGljYWwgcG9zaXRpb24sIGFuZCBhbGwgYWNjZXNzIGhhcwpsb2dhcml0aG1pYyBjb21wbGV4aXR5IGluIHJlbGF0aW9uIHRvIHRoZSBkb2N1bWVudCBzaXplLjwvcD4KCjxwPkkgZ2F2ZSBsaW5lIG9iamVjdHMgYW5kIHRyZWUgbm9kZXMgcGFyZW50IHBvaW50ZXJzLCB0byB0aGUgbm9kZQphYm92ZSB0aGVtLiBXaGVuIGEgbGluZSBoYXMgdG8gdXBkYXRlIGl0cyBoZWlnaHQsIGl0IGNhbiBzaW1wbHkgd2Fsawp0aGVzZSBwb2ludGVycyB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLCBhZGRpbmcgb3Igc3VidHJhY3RpbmcgdGhlCmRpZmZlcmVuY2UgaW4gaGVpZ2h0IGZyb20gZWFjaCBub2RlIGl0IGVuY291bnRlcnMuIFRoZSBwYXJlbnQgcG9pbnRlcnMKYWxzbyBtYWtlIGl0IGNoZWFwZXIgKGluIGNvbXBsZXhpdHkgdGVybXMsIHRoZSBkaWZmZXJlbmNlIGlzIHByb2JhYmx5CnRpbnkgaW4gbm9ybWFsLXNpemVkIGRvY3VtZW50cykgdG8gZmluZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciB3aGVuCmdpdmVuIGEgbGluZSBvYmplY3QuIEluIHRoZSBvbGQgYXBwcm9hY2gsIHRoZSB3aG9sZSBkb2N1bWVudCBhcnJheSBoYWQKdG8gYmUgc2VhcmNoZWQuIE5vdywgd2UgY2FuIGp1c3Qgd2FsayB1cCB0aGUgdHJlZSBhbmQgY291bnQgdGhlIHNpemVzCm9mIHRoZSBub2RlcyBjb21pbmcgYmVmb3JlIHVzIGF0IGVhY2ggbGV2ZWwuPC9wPgoKPHA+SSBjaG9zZSBCLXRyZWVzLCBub3QgcmVndWxhciBiaW5hcnkgdHJlZXMsIG1vc3RseSBiZWNhdXNlIHRoZXkKYWxsb3cgZm9yIHZlcnkgZmFzdCBidWxrIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gV2hlbiB0aGVyZSBpcyBhIGJpZwpjaGFuZ2UgdG8gYSBkb2N1bWVudCwgaXQgdHlwaWNhbGx5IGludm9sdmVzIGFkZGluZywgZGVsZXRpbmcsIG9yCnJlcGxhY2luZyBhIGNodW5rIG9mIHN1YnNlcXVlbnQgbGluZXMuIEluIGEgcmVndWxhciBiYWxhbmNlZCB0cmVlLCBhbGwKdGhlc2UgaW5zZXJ0cyBvciBkZWxldGVzIHdvdWxkIGhhdmUgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5LCB3aGljaCBjb3VsZApiZSByZWFsbHkgZXhwZW5zaXZlLiBJbiBhIEItdHJlZSwgdG8gaW5zZXJ0IGEgY2h1bmssIHlvdSBqdXN0IHdhbGsKZG93biB0aGUgdHJlZSBvbmNlIHRvIGZpbmQgd2hlcmUgaXQgc2hvdWxkIGdvLCBpbnNlcnQgdGhlbSBhbGwgaW4gb25lCnNob3QsIGFuZCB0aGVuIGJyZWFrIHVwIHRoZSBub2RlIGlmIG5lZWRlZC4gVGhpcyBicmVha2luZyB1cCBtaWdodAppbnZvbHZlIGJyZWFraW5nIHVwIG5vZGVzIGZ1cnRoZXIgdXAsIGJ1dCBvbmx5IHJlcXVpcmVzIGEgc2luZ2xlIHBhc3MKYmFjayB1cCB0aGUgdHJlZS4gRm9yIGRlbGV0aW9uLCBJJ20gc29tZXdoYXQgbGF4IGluIGtlZXBpbmcgdGhpbmdzCmJhbGFuY2Vk4oCUSSBqdXN0IGNvbGxhcHNlIG5vZGVzIGludG8gYSBsZWFmIHdoZW4gdGhlaXIgY2hpbGQgY291bnQgZ29lcwpiZWxvdyBhIGdpdmVuIG51bWJlci4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBzb21lIHdlaXJkIGVkaXRpbmcKcGF0dGVybnMgdGhhdCBtYXkgcmVzdWx0IGluIGEgc2VyaW91c2x5IHVuYmFsYW5jZWQgdHJlZSwgYnV0IGV2ZW4gc3VjaAphbiB1bmJhbGFuY2VkIHRyZWUgd2lsbCBwZXJmb3JtIHdlbGwsIHVubGVzcyB5b3Ugc3BlbmQgYSBkYXkgbWFraW5nCnN0cmFuZ2VseSByZXBlYXRpbmcgZWRpdHMgdG8gYSByZWFsbHkgYmlnIGRvY3VtZW50LjwvcD4KCjxoMiBpZD0ia2V5bWFwIj5LZXltYXBzPC9oMj4KCjxwPjxhIGhyZWY9IiNhcHByb2FjaCI+QWJvdmU8L2E+LCBJIGNsYWltZWQgdGhhdCBkaXJlY3RseSBjYXRjaGluZyBrZXkKZXZlbnRzIGZvciB0aGluZ3MgbGlrZSBjdXJzb3IgbW92ZW1lbnQgaXMgaW1wcmFjdGljYWwgYmVjYXVzZSBpdApyZXF1aXJlcyBzb21lIGJyb3dzZXItc3BlY2lmaWMga2x1ZGdlcy4gSSB0aGVuIHByb2NlZWRlZCB0byBleHBsYWluCnNvbWUgYXdmdWwgPGEgaHJlZj0iI3NlbGVjdGlvbiI+aGFja3M8L2E+IHRoYXQgd2VyZSBuZWVkZWQgdG8gbWFrZSBpdApwb3NzaWJsZSBmb3IgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzIHRvIGJlIGRldGVjdGVkIHRocm91Z2ggdGhlCnRleHRhcmVhLiBJbiBmYWN0LCB0aGUgc2Vjb25kIGhhY2sgaXMgYWJvdXQgYXMgYmFkIGFzIHRoZSBmaXJzdC48L3A+Cgo8cD5PbiB0b3Agb2YgdGhhdCwgaW4gdGhlIHByZXNlbmNlIG9mIHVzZXItY29uZmlndXJhYmxlIHRhYiBzaXplcyBhbmQKY29sbGFwc2VkIGFuZCB3cmFwcGVkIGxpbmVzLCBsaW5pbmcgdXAgY3Vyc29yIG1vdmVtZW50IGluIHRoZSB0ZXh0YXJlYQp3aXRoIHdoYXQncyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4gYmVjb21lcyBhIG5pZ2h0bWFyZS4gVGh1cywgSSd2ZQpkZWNpZGVkIHRvIG1vdmUgdG8gYSBtb2RlbCB3aGVyZSB0aGUgdGV4dGFyZWEncyBzZWxlY3Rpb24gaXMgbm8gbG9uZ2VyCmRlcGVuZGVkIG9uLjwvcD4KCjxwPlNvIEkgbW92ZWQgdG8gYSBtb2RlbCB3aGVyZSBhbGwgY3Vyc29yIG1vdmVtZW50IGlzIGhhbmRsZWQgYnkgbXkKb3duIGNvZGUuIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBhIGdvYWwgY29sdW1uLCBwcm9wZXIgaW50ZXJhY3Rpb24gb2YKY3Vyc29yIG1vdmVtZW50IHdpdGggY29sbGFwc2VkIGxpbmVzLCBhbmQgbWFrZXMgaXQgcG9zc2libGUgZm9yCnZlcnRpY2FsIG1vdmVtZW50IHRvIG1vdmUgdGhyb3VnaCB3cmFwcGVkIGxpbmVzIHByb3Blcmx5LCBpbnN0ZWFkIG9mCmp1c3QgdHJlYXRpbmcgdGhlbSBsaWtlIG5vbi13cmFwcGVkIGxpbmVzLjwvcD4KCjxwPlRoZSBrZXkgZXZlbnQgaGFuZGxlcnMgbm93IHRyYW5zbGF0ZSB0aGUga2V5IGV2ZW50IGludG8gYSBzdHJpbmcsCnNvbWV0aGluZyBsaWtlIDxjb2RlPkN0cmwtSG9tZTwvY29kZT4gb3IgPGNvZGU+U2hpZnQtQ21kLVI8L2NvZGU+LCBhbmQKdXNlIHRoYXQgc3RyaW5nIHRvIGxvb2sgdXAgYW4gYWN0aW9uIHRvIHBlcmZvcm0uIFRvIG1ha2Uga2V5YmluZGluZwpjdXN0b21pemFibGUsIHRoaXMgbG9va3VwIGdvZXMgdGhyb3VnaAphIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9rZXlNYXAiPnRhYmxlPC9hPiwgdXNpbmcgYSBzY2hlbWUgdGhhdAphbGxvd3Mgc3VjaCB0YWJsZXMgdG8gYmUgY2hhaW5lZCB0b2dldGhlciAoZm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0Ck1hYyBiaW5kaW5ncyBmYWxsIHRocm91Z2ggdG8gYSB0YWJsZSBuYW1lZCAnZW1hY3N5Jywgd2hpY2ggZGVmaW5lcwpiYXNpYyBFbWFjcy1zdHlsZSBiaW5kaW5ncyBsaWtlIDxjb2RlPkN0cmwtRjwvY29kZT4sIGFuZCB3aGljaCBpcyBhbHNvCnVzZWQgYnkgdGhlIGN1c3RvbSBFbWFjcyBiaW5kaW5ncykuPC9wPgoKPHA+QSBuZXcKb3B0aW9uIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9leHRyYUtleXMiPjxjb2RlPmV4dHJhS2V5czwvY29kZT48L2E+CmFsbG93cyBhZC1ob2Mga2V5YmluZGluZ3MgdG8gYmUgZGVmaW5lZCBpbiBhIG11Y2ggbmljZXIgd2F5IHRoYW4gd2hhdAp3YXMgcG9zc2libGUgd2l0aCB0aGUKb2xkIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9vbktleUV2ZW50Ij48Y29kZT5vbktleUV2ZW50PC9jb2RlPjwvYT4KY2FsbGJhY2suIFlvdSBzaW1wbHkgcHJvdmlkZSBhbiBvYmplY3QgbWFwcGluZyBrZXkgaWRlbnRpZmllcnMgdG8KZnVuY3Rpb25zLCBpbnN0ZWFkIG9mIHBhaW5zdGFraW5nbHkgbG9va2luZyBhdCByYXcga2V5IGV2ZW50cy48L3A+Cgo8cD5CdWlsdC1pbiBjb21tYW5kcyBtYXAgdG8gc3RyaW5ncywgcmF0aGVyIHRoYW4gZnVuY3Rpb25zLCBmb3IKZXhhbXBsZSA8Y29kZT4iZ29MaW5lVXAiPC9jb2RlPiBpcyB0aGUgZGVmYXVsdCBhY3Rpb24gYm91bmQgdG8gdGhlIHVwCmFycm93IGtleS4gVGhpcyBhbGxvd3MgbmV3IGtleW1hcHMgdG8gcmVmZXIgdG8gdGhlbSB3aXRob3V0CmR1cGxpY2F0aW5nIGFueSBjb2RlLiBOZXcgY29tbWFuZHMgY2FuIGJlIGRlZmluZWQgYnkgYXNzaWduaW5nIHRvCnRoZSA8Y29kZT5Db2RlTWlycm9yLmNvbW1hbmRzPC9jb2RlPiBvYmplY3QsIHdoaWNoIG1hcHMgc3VjaCBjb21tYW5kcwp0byBmdW5jdGlvbnMuPC9wPgoKPHA+VGhlIGhpZGRlbiB0ZXh0YXJlYSBub3cgb25seSBob2xkcyB0aGUgY3VycmVudCBzZWxlY3Rpb24sIHdpdGggbm8KZXh0cmEgY2hhcmFjdGVycyBhcm91bmQgaXQuIFRoaXMgaGFzIGEgbmljZSBhZHZhbnRhZ2U6IHBvbGxpbmcgZm9yCmlucHV0IGJlY29tZXMgbXVjaCwgbXVjaCBmYXN0ZXIuIElmIHRoZXJlJ3MgYSBiaWcgc2VsZWN0aW9uLCB0aGlzIHRleHQKZG9lcyBub3QgaGF2ZSB0byBiZSByZWFkIGZyb20gdGhlIHRleHRhcmVhIGV2ZXJ5IHRpbWXigJR3aGVuIHdlIHBvbGwsCmp1c3Qgbm90aWNpbmcgdGhhdCBzb21ldGhpbmcgaXMgc3RpbGwgc2VsZWN0ZWQgaXMgZW5vdWdoIHRvIHRlbGwgdXMKdGhhdCBubyBuZXcgdGV4dCB3YXMgdHlwZWQuPC9wPgoKPHA+VGhlIHJlYXNvbiB0aGF0IGNoZWFwIHBvbGxpbmcgaXMgaW1wb3J0YW50IGlzIHRoYXQgbWFueSBicm93c2VycyBkbwpub3QgZmlyZSB1c2VmdWwgZXZlbnRzIG9uIElNRSAoaW5wdXQgbWV0aG9kIGVuZ2luZSkgaW5wdXQsIHdoaWNoIGlzCnRoZSB0aGluZyB3aGVyZSBwZW9wbGUgaW5wdXR0aW5nIGEgbGFuZ3VhZ2UgbGlrZSBKYXBhbmVzZSBvciBDaGluZXNlCnVzZSBtdWx0aXBsZSBrZXlzdHJva2VzIHRvIGNyZWF0ZSBhIGNoYXJhY3RlciBvciBzZXF1ZW5jZSBvZgpjaGFyYWN0ZXJzLiBNb3N0IG1vZGVybiBicm93c2VycyBmaXJlIDxjb2RlPmlucHV0PC9jb2RlPiB3aGVuIHRoZQpjb21wb3NpbmcgaXMgZmluaXNoZWQsIGJ1dCBtYW55IGRvbid0IGZpcmUgYW55dGhpbmcgd2hlbiB0aGUgY2hhcmFjdGVyCmlzIHVwZGF0ZWQgPGVtPmR1cmluZzwvZW0+IGNvbXBvc2l0aW9uLiBTbyB3ZSBwb2xsLCB3aGVuZXZlciB0aGUKZWRpdG9yIGlzIGZvY3VzZWQsIHRvIHByb3ZpZGUgaW1tZWRpYXRlIHVwZGF0ZXMgb2YgdGhlIGRpc3BsYXkuPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0icmlnaHRzbWFsbCBibGsiPgoKICAgIDxoMj5Db250ZW50czwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI2ludHJvIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2lucHV0Ij5JbnB1dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3NlbGVjdGlvbiI+U2VsZWN0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjdXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3BhcnNlIj5QYXJzaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjc3VtbWFyeSI+V2hhdCBHaXZlcz88L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNidHJlZSI+Q29udGVudCBSZXByZXNlbnRhdGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2tleW1hcCI+S2V5IE1hcHM8L2E+PC9saT4KICAgIDwvdWw+Cgo8L2Rpdj48L2Rpdj4KCjxkaXYgc3R5bGU9ImhlaWdodDogMmVtIj4mbmJzcDs8L2Rpdj4KCjwvYm9keT48L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/manual.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVzZXIgTWFudWFsPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzdHlsZT5kbCBkbCB7bWFyZ2luOiAwO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KCjxoMT48c3BhbiBjbGFzcz0ibG9nby1icmFjZXMiPnsgfTwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+Q29kZU1pcnJvcjwvYT48L2gxPgoKPHByZSBjbGFzcz0iZ3JleSI+CjxpbWcgc3JjPSJiYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogVXNlciBtYW51YWwgYW5kCiAgIHJlZmVyZW5jZSBndWlkZSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0YmlnIGJsayI+CgogICAgPGgyIGlkPSJvdmVydmlldyI+T3ZlcnZpZXc8L2gyPgoKICAgIDxwPkNvZGVNaXJyb3IgaXMgYSBjb2RlLWVkaXRvciBjb21wb25lbnQgdGhhdCBjYW4gYmUgZW1iZWRkZWQgaW4KICAgIFdlYiBwYWdlcy4gVGhlIGNvZGUgbGlicmFyeSBwcm92aWRlcyA8ZW0+b25seTwvZW0+IHRoZSBlZGl0b3IKICAgIGNvbXBvbmVudCwgbm8gYWNjb21wYW55aW5nIGJ1dHRvbnMsIGF1dG8tY29tcGxldGlvbiwgb3Igb3RoZXIgSURFCiAgICBmdW5jdGlvbmFsaXR5LiBJdCBkb2VzIHByb3ZpZGUgYSByaWNoIEFQSSBvbiB0b3Agb2Ygd2hpY2ggc3VjaAogICAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgc3RyYWlnaHRmb3J3YXJkbHkgaW1wbGVtZW50ZWQuIFNlZQogICAgdGhlIDxhIGhyZWY9IiNhZGRvbnMiPmFkZC1vbnM8L2E+IGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24sCiAgICBhbmQKICAgIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9jdG9sYWJzLmNvbS9qYXZhc2NyaXB0cy9jb2RlbWlycm9yLXVpLyI+Q29kZU1pcnJvcgogICAgVUk8L2E+IHByb2plY3QsIGZvciByZXVzYWJsZSBpbXBsZW1lbnRhdGlvbnMgb2YgZXh0cmEgZmVhdHVyZXMuPC9wPgoKICAgIDxwPkNvZGVNaXJyb3Igd29ya3Mgd2l0aCBsYW5ndWFnZS1zcGVjaWZpYyBtb2Rlcy4gTW9kZXMgYXJlCiAgICBKYXZhU2NyaXB0IHByb2dyYW1zIHRoYXQgaGVscCBjb2xvciAoYW5kIG9wdGlvbmFsbHkgaW5kZW50KSB0ZXh0CiAgICB3cml0dGVuIGluIGEgZ2l2ZW4gbGFuZ3VhZ2UuIFRoZSBkaXN0cmlidXRpb24gY29tZXMgd2l0aCBhIGZldwogICAgbW9kZXMgKHNlZSB0aGUgPGNvZGU+bW9kZS88L2NvZGU+IGRpcmVjdG9yeSksIGFuZCBpdCBpc24ndCBoYXJkCiAgICB0byA8YSBocmVmPSIjbW9kZWFwaSI+d3JpdGUgbmV3IG9uZXM8L2E+IGZvciBvdGhlciBsYW5ndWFnZXMuPC9wPgoKICAgIDxoMiBpZD0idXNhZ2UiPkJhc2ljIFVzYWdlPC9oMj4KCiAgICA8cD5UaGUgZWFzaWVzdCB3YXkgdG8gdXNlIENvZGVNaXJyb3IgaXMgdG8gc2ltcGx5IGxvYWQgdGhlIHNjcmlwdAogICAgYW5kIHN0eWxlIHNoZWV0IGZvdW5kIHVuZGVyIDxjb2RlPmxpYi88L2NvZGU+IGluIHRoZSBkaXN0cmlidXRpb24sCiAgICBwbHVzIGEgbW9kZSBzY3JpcHQgZnJvbSBvbmUgb2YgdGhlIDxjb2RlPm1vZGUvPC9jb2RlPiBkaXJlY3RvcmllcwogICAgYW5kIGEgdGhlbWUgc3R5bGVzaGVldCBmcm9tIDxjb2RlPnRoZW1lLzwvY29kZT4uIChTZWUKICAgIGFsc28gPGEgaHJlZj0iY29tcHJlc3MuaHRtbCI+dGhlIGNvbXByZXNzaW9uIGhlbHBlcjwvYT4uKSBGb3IKICAgIGV4YW1wbGU6PC9wPgoKICAgIDxwcmU+Jmx0O3NjcmlwdCBzcmM9ImxpYi9jb2RlbWlycm9yLmpzIj4mbHQ7L3NjcmlwdD4KJmx0O2xpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgombHQ7c2NyaXB0IHNyYz0ibW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPiZsdDsvc2NyaXB0PjwvcHJlPgoKICAgIDxwPkhhdmluZyBkb25lIHRoaXMsIGFuIGVkaXRvciBpbnN0YW5jZSBjYW4gYmUgY3JlYXRlZCBsaWtlCiAgICB0aGlzOjwvcD4KCiAgICA8cHJlPnZhciBteUNvZGVNaXJyb3IgPSBDb2RlTWlycm9yKGRvY3VtZW50LmJvZHkpOzwvcHJlPgoKICAgIDxwPlRoZSBlZGl0b3Igd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZG9jdW1lbnQgYm9keSwgd2lsbCBzdGFydAogICAgZW1wdHksIGFuZCB3aWxsIHVzZSB0aGUgbW9kZSB0aGF0IHdlIGxvYWRlZC4gVG8gaGF2ZSBtb3JlIGNvbnRyb2wKICAgIG92ZXIgdGhlIG5ldyBlZGl0b3IsIGEgY29uZmlndXJhdGlvbiBvYmplY3QgY2FuIGJlIHBhc3NlZAogICAgdG8gPGNvZGU+Q29kZU1pcnJvcjwvY29kZT4gYXMgYSBzZWNvbmQgYXJndW1lbnQ6PC9wPgoKICAgIDxwcmU+dmFyIG15Q29kZU1pcnJvciA9IENvZGVNaXJyb3IoZG9jdW1lbnQuYm9keSwgewogIHZhbHVlOiAiZnVuY3Rpb24gbXlTY3JpcHQoKXtyZXR1cm4gMTAwO31cbiIsCiAgbW9kZTogICJqYXZhc2NyaXB0Igp9KTs8L3ByZT4KCiAgICA8cD5UaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZWRpdG9yIHdpdGggYSBwaWVjZSBvZiBjb2RlIGFscmVhZHkgaW4KICAgIGl0LCBhbmQgZXhwbGljaXRseSB0ZWxsIGl0IHRvIHVzZSB0aGUgSmF2YVNjcmlwdCBtb2RlICh3aGljaCBpcwogICAgdXNlZnVsIHdoZW4gbXVsdGlwbGUgbW9kZXMgYXJlIGxvYWRlZCkuCiAgICBTZWUgPGEgaHJlZj0iI2NvbmZpZyI+YmVsb3c8L2E+IGZvciBhIGZ1bGwgZGlzY3Vzc2lvbiBvZiB0aGUKICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IENvZGVNaXJyb3IgYWNjZXB0cy48L3A+CgogICAgPHA+SW4gY2FzZXMgd2hlcmUgeW91IGRvbid0IHdhbnQgdG8gYXBwZW5kIHRoZSBlZGl0b3IgdG8gYW4KICAgIGVsZW1lbnQsIGFuZCBuZWVkIG1vcmUgY29udHJvbCBvdmVyIHRoZSB3YXkgaXQgaXMgaW5zZXJ0ZWQsIHRoZQogICAgZmlyc3QgYXJndW1lbnQgdG8gdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGZ1bmN0aW9uIGNhbiBhbHNvCiAgICBiZSBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gZ2l2ZW4gYSBET00gZWxlbWVudCwgaW5zZXJ0cyBpdCBpbnRvIHRoZQogICAgZG9jdW1lbnQgc29tZXdoZXJlLiBUaGlzIGNvdWxkIGJlIHVzZWQgdG8sIGZvciBleGFtcGxlLCByZXBsYWNlIGEKICAgIHRleHRhcmVhIHdpdGggYSByZWFsIGVkaXRvcjo8L3A+CgogICAgPHByZT52YXIgbXlDb2RlTWlycm9yID0gQ29kZU1pcnJvcihmdW5jdGlvbihlbHQpIHsKICBteVRleHRBcmVhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsdCwgbXlUZXh0QXJlYSk7Cn0sIHt2YWx1ZTogbXlUZXh0QXJlYS52YWx1ZX0pOzwvcHJlPgoKICAgIDxwPkhvd2V2ZXIsIGZvciB0aGlzIHVzZSBjYXNlLCB3aGljaCBpcyBhIGNvbW1vbiB3YXkgdG8gdXNlCiAgICBDb2RlTWlycm9yLCB0aGUgbGlicmFyeSBwcm92aWRlcyBhIG11Y2ggbW9yZSBwb3dlcmZ1bAogICAgc2hvcnRjdXQ6PC9wPgoKICAgIDxwcmU+dmFyIG15Q29kZU1pcnJvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKG15VGV4dEFyZWEpOzwvcHJlPgoKICAgIDxwPlRoaXMgd2lsbCwgYW1vbmcgb3RoZXIgdGhpbmdzLCBlbnN1cmUgdGhhdCB0aGUgdGV4dGFyZWEncyB2YWx1ZQogICAgaXMgdXBkYXRlZCB3aGVuIHRoZSBmb3JtIChpZiBpdCBpcyBwYXJ0IG9mIGEgZm9ybSkgaXMgc3VibWl0dGVkLgogICAgU2VlIHRoZSA8YSBocmVmPSIjZnJvbVRleHRBcmVhIj5BUEkgcmVmZXJlbmNlPC9hPiBmb3IgYSBmdWxsCiAgICBkZXNjcmlwdGlvbiBvZiB0aGlzIG1ldGhvZC48L3A+CgogICAgPGgyIGlkPSJjb25maWciPkNvbmZpZ3VyYXRpb248L2gyPgoKICAgIDxwPkJvdGggdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGZ1bmN0aW9uIGFuZAogICAgaXRzIDxjb2RlPmZyb21UZXh0QXJlYTwvY29kZT4gbWV0aG9kIHRha2UgYXMgc2Vjb25kIChvcHRpb25hbCkKICAgIGFyZ3VtZW50IGFuIG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQW55IG9wdGlvbgogICAgbm90IHN1cHBsaWVkIGxpa2UgdGhpcyB3aWxsIGJlIHRha2VuCiAgICBmcm9tIDxjb2RlPkNvZGVNaXJyb3IuZGVmYXVsdHM8L2NvZGU+LCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUKICAgIGRlZmF1bHQgb3B0aW9ucy4gWW91IGNhbiB1cGRhdGUgdGhpcyBvYmplY3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0cwogICAgb24geW91ciBwYWdlLjwvcD4KCiAgICA8cD5PcHRpb25zIGFyZSBub3QgY2hlY2tlZCBpbiBhbnkgd2F5LCBzbyBzZXR0aW5nIGJvZ3VzIG9wdGlvbgogICAgdmFsdWVzIGlzIGJvdW5kIHRvIGxlYWQgdG8gb2RkIGVycm9ycy48L3A+CgogICAgPHA+VGhlc2UgYXJlIHRoZSBzdXBwb3J0ZWQgb3B0aW9uczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9Im9wdGlvbl92YWx1ZSI+PGNvZGU+dmFsdWUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9tb2RlIj48Y29kZT5tb2RlIChzdHJpbmcgb3Igb2JqZWN0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1vZGUgdG8gdXNlLiBXaGVuIG5vdCBnaXZlbiwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlCiAgICAgIGZpcnN0IG1vZGUgdGhhdCB3YXMgbG9hZGVkLiBJdCBtYXkgYmUgYSBzdHJpbmcsIHdoaWNoIGVpdGhlcgogICAgICBzaW1wbHkgbmFtZXMgdGhlIG1vZGUgb3IgaXMKICAgICAgYSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JTUUiPk1JTUU8L2E+IHR5cGUKICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2RlLiBBbHRlcm5hdGl2ZWx5LCBpdCBtYXkgYmUgYW4gb2JqZWN0CiAgICAgIGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbW9kZSwgd2l0aAogICAgICBhIDxjb2RlPm5hbWU8L2NvZGU+IHByb3BlcnR5IHRoYXQgbmFtZXMgdGhlIG1vZGUgKGZvcgogICAgICBleGFtcGxlIDxjb2RlPntuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9PC9jb2RlPikuIFRoZSBkZW1vCiAgICAgIHBhZ2VzIGZvciBlYWNoIG1vZGUgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGNvbmZpZ3VyYXRpb24KICAgICAgcGFyYW1ldGVycyB0aGUgbW9kZSBzdXBwb3J0cy4gWW91IGNhbiBhc2sgQ29kZU1pcnJvciB3aGljaCBtb2RlcwogICAgICBhbmQgTUlNRSB0eXBlcyBhcmUgbG9hZGVkIHdpdGgKICAgICAgdGhlIDxjb2RlPkNvZGVNaXJyb3IubGlzdE1vZGVzPC9jb2RlPgogICAgICBhbmQgPGNvZGU+Q29kZU1pcnJvci5saXN0TUlNRXM8L2NvZGU+IGZ1bmN0aW9ucy48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fdGhlbWUiPjxjb2RlPnRoZW1lIChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgdGhlbWUgdG8gc3R5bGUgdGhlIGVkaXRvciB3aXRoLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCiAgICAgIENTUyBmaWxlIGRlZmluaW5nIHRoZSBjb3JyZXNwb25kaW5nIDxjb2RlPi5jbS1zLVtuYW1lXTwvY29kZT4KICAgICAgc3R5bGVzIGlzIGxvYWRlZCAoc2VlCiAgICAgIHRoZSA8YSBocmVmPSIuLi90aGVtZS8iPjxjb2RlPnRoZW1lPC9jb2RlPjwvYT4gZGlyZWN0b3J5IGluIHRoZQogICAgICBkaXN0cmlidXRpb24pLiBUaGUgZGVmYXVsdCBpcyA8Y29kZT4iZGVmYXVsdCI8L2NvZGU+LCBmb3Igd2hpY2gKICAgICAgY29sb3JzIGFyZSBpbmNsdWRlZCBpbiA8Y29kZT5jb2RlbWlycm9yLmNzczwvY29kZT4uIEl0IGlzCiAgICAgIHBvc3NpYmxlIHRvIHVzZSBtdWx0aXBsZSB0aGVtaW5nIGNsYXNzZXMgYXQgb25jZeKAlGZvcgogICAgICBleGFtcGxlIDxjb2RlPiJmb28gYmFyIjwvY29kZT4gd2lsbCBhc3NpZ24gYm90aAogICAgICB0aGUgPGNvZGU+Y20tcy1mb288L2NvZGU+IGFuZCB0aGUgPGNvZGU+Y20tcy1iYXI8L2NvZGU+IGNsYXNzZXMKICAgICAgdG8gdGhlIGVkaXRvci48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25faW5kZW50VW5pdCI+PGNvZGU+aW5kZW50VW5pdCAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkhvdyBtYW55IHNwYWNlcyBhIGJsb2NrICh3aGF0ZXZlciB0aGF0IG1lYW5zIGluIHRoZSBlZGl0ZWQKICAgICAgbGFuZ3VhZ2UpIHNob3VsZCBiZSBpbmRlbnRlZC4gVGhlIGRlZmF1bHQgaXMgMi48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fdGFiU2l6ZSI+PGNvZGU+dGFiU2l6ZSAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSB3aWR0aCBvZiBhIHRhYiBjaGFyYWN0ZXIuIERlZmF1bHRzIHRvIDQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2luZGVudFdpdGhUYWJzIj48Y29kZT5pbmRlbnRXaXRoVGFicyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio8Y29kZT50YWJTaXplPC9jb2RlPgogICAgICBzcGFjZXMgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IE4gdGFicy4gRGVmYXVsdCBpcyBmYWxzZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fZWxlY3RyaWNDaGFycyI+PGNvZGU+ZWxlY3RyaWNDaGFycyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNvbmZpZ3VyZXMgd2hldGhlciB0aGUgZWRpdG9yIHNob3VsZCByZS1pbmRlbnQgdGhlIGN1cnJlbnQKICAgICAgbGluZSB3aGVuIGEgY2hhcmFjdGVyIGlzIHR5cGVkIHRoYXQgbWlnaHQgY2hhbmdlIGl0cyBwcm9wZXIKICAgICAgaW5kZW50YXRpb24gKG9ubHkgd29ya3MgaWYgdGhlIG1vZGUgc3VwcG9ydHMgaW5kZW50YXRpb24pLgogICAgICBEZWZhdWx0IGlzIHRydWUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2tleU1hcCI+PGNvZGU+a2V5TWFwIChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Db25maWd1cmVzIHRoZSBrZXltYXAgdG8gdXNlLiBUaGUgZGVmYXVsdAogICAgICBpcyA8Y29kZT4iZGVmYXVsdCI8L2NvZGU+LCB3aGljaCBpcyB0aGUgb25seSBrZXltYXAgZGVmaW5lZAogICAgICBpbiA8Y29kZT5jb2RlbWlycm9yLmpzPC9jb2RlPiBpdHNlbGYuIEV4dHJhIGtleW1hcHMgYXJlIGZvdW5kIGluCiAgICAgIHRoZSA8YSBocmVmPSIuLi9rZXltYXAvIj48Y29kZT5rZXltYXA8L2NvZGU+PC9hPiBkaXJlY3RvcnkuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2V4dHJhS2V5cyI+PGNvZGU+ZXh0cmFLZXlzIChvYmplY3QpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGV4dHJhIGtleWJpbmRpbmdzIGZvciB0aGUgZWRpdG9yLgogICAgICBXaGVuIGdpdmVuLCBzaG91bGQgYmUgYW4gb2JqZWN0IHdpdGggcHJvcGVydHkgbmFtZXMKICAgICAgbGlrZSA8Y29kZT5DdHJsLUE8L2NvZGU+LCA8Y29kZT5Ib21lPC9jb2RlPiwKICAgICAgYW5kIDxjb2RlPkN0cmwtQWx0LUxlZnQ8L2NvZGU+LiBTZWUKICAgICAgdGhlIDxjb2RlPkNvZGVNaXJyb3Iua2V5TmFtZXM8L2NvZGU+IG9iamVjdCBmb3IgdGhlIG5hbWVzIG9mIGFsbAogICAgICB0aGUga2V5cy4gVGhlIHZhbHVlcyBpbiB0aGlzIG9iamVjdCBjYW4gZWl0aGVyIGJlIGZ1bmN0aW9ucywKICAgICAgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgQ29kZU1pcnJvciBpbnN0YW5jZSB3aGVuIHRoZSBrZXkKICAgICAgaXMgcHJlc3NlZCwgb3Igc3RyaW5ncywgd2hpY2ggc2hvdWxkIG5hbWUgY29tbWFuZHMgZGVmaW5lZAogICAgICBpbiA8Y29kZT5Db2RlTWlycm9yLmNvbW1hbmRzPC9jb2RlPiAobm90IGRvY3VtZW50ZWQgcHJvcGVybHksCiAgICAgIGJ1dCBsb29raW5nIGF0IHRoZSBzb3VyY2UgYW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBidWlsdC1pbgogICAgICBrZXltYXBzLCB0aGV5IHNob3VsZCBiZSByYXRoZXIgb2J2aW91cykuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2xpbmVXcmFwcGluZyI+PGNvZGU+bGluZVdyYXBwaW5nIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hldGhlciBDb2RlTWlycm9yIHNob3VsZCBzY3JvbGwgb3Igd3JhcCBmb3IgbG9uZyBsaW5lcy4KICAgICAgRGVmYXVsdHMgdG8gPGNvZGU+ZmFsc2U8L2NvZGU+IChzY3JvbGwpLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9saW5lTnVtYmVycyI+PGNvZGU+bGluZU51bWJlcnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGV0aGVyIHRvIHNob3cgbGluZSBudW1iZXJzIHRvIHRoZSBsZWZ0IG9mIHRoZSBlZGl0b3IuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2ZpcnN0TGluZU51bWJlciI+PGNvZGU+Zmlyc3RMaW5lTnVtYmVyIChpbnRlZ2VyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+QXQgd2hpY2ggbnVtYmVyIHRvIHN0YXJ0IGNvdW50aW5nIGxpbmVzLiBEZWZhdWx0IGlzIDEuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2d1dHRlciI+PGNvZGU+Z3V0dGVyIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2FuIGJlIHVzZWQgdG8gZm9yY2UgYSAnZ3V0dGVyJyAoZW1wdHkgc3BhY2Ugb24gdGhlIGxlZnQgb2YKICAgICAgdGhlIGVkaXRvcikgdG8gYmUgc2hvd24gZXZlbiB3aGVuIG5vIGxpbmUgbnVtYmVycyBhcmUgYWN0aXZlLgogICAgICBUaGlzIGlzIHVzZWZ1bCBmb3Igc2V0dGluZyA8YSBocmVmPSIjc2V0TWFya2VyIj5tYXJrZXJzPC9hPi48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fZml4ZWRHdXR0ZXIiPjxjb2RlPmZpeGVkR3V0dGVyIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiBlbmFibGVkIChvZmYgYnkgZGVmYXVsdCksIHRoaXMgd2lsbCBtYWtlIHRoZSBndXR0ZXIKICAgICAgc3RheSB2aXNpYmxlIHdoZW4gdGhlIGRvY3VtZW50IGlzIHNjcm9sbGVkIGhvcml6b250YWxseS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fcmVhZE9ubHkiPjxjb2RlPnJlYWRPbmx5IChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBkaXNhYmxlcyBlZGl0aW5nIG9mIHRoZSBlZGl0b3IgY29udGVudCBieSB0aGUgdXNlci48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25DaGFuZ2UiPjxjb2RlPm9uQ2hhbmdlIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZ2l2ZW4sIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUKICAgICAgY29udGVudCBvZiB0aGUgZWRpdG9yIGlzIGNoYW5nZWQuIEl0IHdpbGwgYmUgZ2l2ZW4gdGhlIGVkaXRvcgogICAgICBpbnN0YW5jZSBhcyBmaXJzdCBhcmd1bWVudCwgYW5kIGFuIDxjb2RlPntmcm9tLCB0bywgbmV3VGV4dCwKICAgICAgbmV4dH08L2NvZGU+IG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFuZ2VzCiAgICAgIHRoYXQgb2NjdXJyZWQgYXMgc2Vjb25kIGFyZ3VtZW50LiA8Y29kZT5mcm9tPC9jb2RlPgogICAgICBhbmQgPGNvZGU+dG88L2NvZGU+IGFyZSB0aGUgcG9zaXRpb25zIChpbiB0aGUgcHJlLWNoYW5nZQogICAgICBjb29yZGluYXRlIHN5c3RlbSkgd2hlcmUgdGhlIGNoYW5nZSBzdGFydGVkIGFuZAogICAgICBlbmRlZC4gPGNvZGU+bmV3VGV4dDwvY29kZT4gaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcKICAgICAgdGhlIHRleHQgdGhhdCByZXBsYWNlZCB0aGUgY2hhbmdlZCByYW5nZSAoc3BsaXQgYnkgbGluZSkuIElmCiAgICAgIG11bHRpcGxlIGNoYW5nZXMgaGFwcGVuZWQgZHVyaW5nIGEgc2luZ2xlIG9wZXJhdGlvbiwgdGhlIG9iamVjdAogICAgICB3aWxsIGhhdmUgYSA8Y29kZT5uZXh0PC9jb2RlPiBwcm9wZXJ0eSBwb2ludGluZyB0byBhbm90aGVyCiAgICAgIGNoYW5nZSBvYmplY3QgKHdoaWNoIG1heSBwb2ludCB0byBhbm90aGVyLCBldGMpLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkN1cnNvckFjdGl2aXR5Ij48Y29kZT5vbkN1cnNvckFjdGl2aXR5IChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGN1cnNvciBvciBzZWxlY3Rpb24gbW92ZXMsIG9yIGFueQogICAgICBjaGFuZ2UgaXMgbWFkZSB0byB0aGUgZWRpdG9yIGNvbnRlbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uR3V0dGVyQ2xpY2siPjxjb2RlPm9uR3V0dGVyQ2xpY2sgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiBnaXZlbiwgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGVkaXRvciBndXR0ZXIgKHRoZQogICAgICBsaW5lLW51bWJlciBhcmVhKSBpcyBjbGlja2VkLiBXaWxsIGJlIGdpdmVuIHRoZSBlZGl0b3IgaW5zdGFuY2UKICAgICAgYXMgZmlyc3QgYXJndW1lbnQsIHRoZSAoemVyby1iYXNlZCkgbnVtYmVyIG9mIHRoZSBsaW5lIHRoYXQgd2FzCiAgICAgIGNsaWNrZWQgYXMgc2Vjb25kIGFyZ3VtZW50LCBhbmQgdGhlIHJhdyA8Y29kZT5tb3VzZWRvd248L2NvZGU+CiAgICAgIGV2ZW50IG9iamVjdCBhcyB0aGlyZCBhcmd1bWVudC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25Gb2N1cyI+PGNvZGU+b25Gb2N1cywgb25CbHVyIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBnaXZlbiBmdW5jdGlvbnMgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGVkaXRvciBpcwogICAgICBmb2N1c2VkIG9yIHVuZm9jdXNlZC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25TY3JvbGwiPjxjb2RlPm9uU2Nyb2xsIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZ2l2ZW4sIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBlZGl0b3IgaXMKICAgICAgc2Nyb2xsZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uSGlnaGxpZ2h0Q29tcGxldGUiPjxjb2RlPm9uSGlnaGxpZ2h0Q29tcGxldGUgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbmV2ZXIgdGhlIGVkaXRvcidzIGNvbnRlbnQgaGFzIGJlZW4gZnVsbHkgaGlnaGxpZ2h0ZWQsCiAgICAgIHRoaXMgZnVuY3Rpb24gKGlmIGdpdmVuKSB3aWxsIGJlIGNhbGxlZC4gSXQnbGwgYmUgZ2l2ZW4gYSBzaW5nbGUKICAgICAgYXJndW1lbnQsIHRoZSBlZGl0b3IgaW5zdGFuY2UuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uVXBkYXRlIj48Y29kZT5vblVwZGF0ZSAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaWxsIGJlIGNhbGxlZCB3aGVuZXZlciBDb2RlTWlycm9yIHVwZGF0ZXMgaXRzIERPTSBkaXNwbGF5LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9tYXRjaEJyYWNrZXRzIj48Y29kZT5tYXRjaEJyYWNrZXRzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGJyYWNrZXRzIGFyZSBtYXRjaGVkIHdoZW5ldmVyIHRoZSBjdXJzb3IKICAgICAgaXMgbW92ZWQgbmV4dCB0byBhIGJyYWNrZXQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3dvcmtUaW1lIj48Y29kZT53b3JrVGltZSwgd29ya0RlbGF5IChudW1iZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5IaWdobGlnaHRpbmcgaXMgZG9uZSBieSBhIHBzZXVkbyBiYWNrZ3JvdW5kLXRocmVhZCB0aGF0IHdpbGwKICAgICAgd29yayBmb3IgPGNvZGU+d29ya1RpbWU8L2NvZGU+IG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gdXNlCiAgICAgIHRpbWVvdXQgdG8gc2xlZXAgZm9yIDxjb2RlPndvcmtEZWxheTwvY29kZT4gbWlsbGlzZWNvbmRzLiBUaGUKICAgICAgZGVmYXVsdHMgYXJlIDIwMCBhbmQgMzAwLCB5b3UgY2FuIGNoYW5nZSB0aGVzZSBvcHRpb25zIHRvIG1ha2UKICAgICAgdGhlIGhpZ2hsaWdodGluZyBtb3JlIG9yIGxlc3MgYWdncmVzc2l2ZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fcG9sbEludGVydmFsIj48Y29kZT5wb2xsSW50ZXJ2YWwgKG51bWJlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGljYXRlcyBob3cgcXVpY2tseSBDb2RlTWlycm9yIHNob3VsZCBwb2xsIGl0cyBpbnB1dAogICAgICB0ZXh0YXJlYSBmb3IgY2hhbmdlcy4gTW9zdCBpbnB1dCBpcyBjYXB0dXJlZCBieSBldmVudHMsIGJ1dCBzb21lCiAgICAgIHRoaW5ncywgbGlrZSBJTUUgaW5wdXQgb24gc29tZSBicm93c2VycywgZG9lc24ndCBnZW5lcmF0ZSBldmVudHMKICAgICAgdGhhdCBhbGxvdyBDb2RlTWlycm9yIHRvIHByb3Blcmx5IGRldGVjdCBpdC4gVGh1cywgaXQgcG9sbHMuCiAgICAgIERlZmF1bHQgaXMgMTAwIG1pbGxpc2Vjb25kcy48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fdW5kb0RlcHRoIj48Y29kZT51bmRvRGVwdGggKGludGVnZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgdW5kbyBsZXZlbHMgdGhhdCB0aGUgZWRpdG9yIHN0b3Jlcy4KICAgICAgRGVmYXVsdHMgdG8gNDAuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3RhYmluZGV4Ij48Y29kZT50YWJpbmRleCAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAxL2ludGVyYWN0L2Zvcm1zLmh0bWwjYWRlZi10YWJpbmRleCI+dGFiCiAgICAgIGluZGV4PC9hPiB0byBhc3NpZ24gdG8gdGhlIGVkaXRvci4gSWYgbm90IGdpdmVuLCBubyB0YWIgaW5kZXgKICAgICAgd2lsbCBiZSBhc3NpZ25lZC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fZG9jdW1lbnQiPjxjb2RlPmRvY3VtZW50IChET00gZG9jdW1lbnQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhpcyBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZSBlZGl0b3IgaW4gYW5vdGhlciBET00uCiAgICAgIEJ5IGRlZmF1bHQgaXQgd2lsbCB1c2UgdGhlIGdsb2JhbCA8Y29kZT5kb2N1bWVudDwvY29kZT4KICAgICAgb2JqZWN0LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbktleUV2ZW50Ij48Y29kZT5vbktleUV2ZW50IChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoaXMgcHJvdmlkZXMgYSByYXRoZXIgbG93LWxldmVsIGhvb2sgaW50byBDb2RlTWlycm9yJ3Mga2V5CiAgICAgIGhhbmRsaW5nLiBJZiBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbgogICAgICBldmVyeSA8Y29kZT5rZXlkb3duPC9jb2RlPiwgPGNvZGU+a2V5dXA8L2NvZGU+LAogICAgICBhbmQgPGNvZGU+a2V5cHJlc3M8L2NvZGU+IGV2ZW50IHRoYXQgQ29kZU1pcnJvciBjYXB0dXJlcy4gSXQKICAgICAgd2lsbCBiZSBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIGVkaXRvciBpbnN0YW5jZSBhbmQgdGhlIGtleQogICAgICBldmVudC4gVGhpcyBrZXkgZXZlbnQgaXMgcHJldHR5IG11Y2ggdGhlIHJhdyBrZXkgZXZlbnQsIGV4Y2VwdAogICAgICB0aGF0IGEgPGNvZGU+c3RvcCgpPC9jb2RlPiBtZXRob2QgaXMgYWx3YXlzIGFkZGVkIHRvIGl0LiBZb3UKICAgICAgY291bGQgZmVlZCBpdCB0bywgZm9yIGV4YW1wbGUsIDxjb2RlPmpRdWVyeS5FdmVudDwvY29kZT4gdG8KICAgICAgZnVydGhlciBub3JtYWxpemUgaXQuPGJyPlRoaXMgZnVuY3Rpb24gY2FuIGluc3BlY3QgdGhlIGtleQogICAgICBldmVudCwgYW5kIGhhbmRsZSBpdCBpZiBpdCB3YW50cyB0by4gSXQgbWF5IHJldHVybiB0cnVlIHRvIHRlbGwKICAgICAgQ29kZU1pcnJvciB0byBpZ25vcmUgdGhlIGV2ZW50LiBCZSB3YXJ5IHRoYXQsIG9uIHNvbWUgYnJvd3NlcnMsCiAgICAgIHN0b3BwaW5nIGEgPGNvZGU+a2V5ZG93bjwvY29kZT4gZG9lcyBub3Qgc3RvcAogICAgICB0aGUgPGNvZGU+a2V5cHJlc3M8L2NvZGU+IGZyb20gZmlyaW5nLCB3aGVyZWFzIG9uIG90aGVycyBpdAogICAgICBkb2VzLiBJZiB5b3UgcmVzcG9uZCB0byBhbiBldmVudCwgeW91IHNob3VsZCBwcm9iYWJseSBpbnNwZWN0CiAgICAgIGl0cyA8Y29kZT50eXBlPC9jb2RlPiBwcm9wZXJ0eSBhbmQgb25seSBkbyBzb21ldGhpbmcgd2hlbiBpdAogICAgICBpcyA8Y29kZT5rZXlkb3duPC9jb2RlPiAob3IgPGNvZGU+a2V5cHJlc3M8L2NvZGU+IGZvciBhY3Rpb25zCiAgICAgIHRoYXQgbmVlZCBjaGFyYWN0ZXIgZGF0YSkuPC9kZD4KICAgIDwvZGw+CgogICAgPGgyIGlkPSJzdHlsaW5nIj5DdXN0b21pemVkIFN0eWxpbmc8L2gyPgoKICAgIDxwPlVwIHRvIGEgY2VydGFpbiBleHRlbnQsIENvZGVNaXJyb3IncyBsb29rIGNhbiBiZSBjaGFuZ2VkIGJ5CiAgICBtb2RpZnlpbmcgc3R5bGUgc2hlZXQgZmlsZXMuIFRoZSBzdHlsZSBzaGVldHMgc3VwcGxpZWQgYnkgbW9kZXMKICAgIHNpbXBseSBwcm92aWRlIHRoZSBjb2xvcnMgZm9yIHRoYXQgbW9kZSwgYW5kIGNhbiBiZSBhZGFwdGVkIGluIGEKICAgIHZlcnkgc3RyYWlnaHRmb3J3YXJkIHdheS4gVG8gc3R5bGUgdGhlIGVkaXRvciBpdHNlbGYsIGl0IGlzCiAgICBwb3NzaWJsZSB0byBhbHRlciBvciBvdmVycmlkZSB0aGUgc3R5bGVzIGRlZmluZWQKICAgIGluIDxhIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+PGNvZGU+Y29kZW1pcnJvci5jc3M8L2NvZGU+PC9hPi48L3A+CgogICAgPHA+U29tZSBjYXJlIG11c3QgYmUgdGFrZW4gdGhlcmUsIHNpbmNlIGEgbG90IG9mIHRoZSBydWxlcyBpbiB0aGlzCiAgICBmaWxlIGFyZSBuZWNlc3NhcnkgdG8gaGF2ZSBDb2RlTWlycm9yIGZ1bmN0aW9uIHByb3Blcmx5LiBBZGp1c3RpbmcKICAgIGNvbG9ycyBzaG91bGQgYmUgc2FmZSwgb2YgY291cnNlLCBhbmQgd2l0aCBzb21lIGNhcmUgYSBsb3Qgb2YKICAgIG90aGVyIHRoaW5ncyBjYW4gYmUgY2hhbmdlZCBhcyB3ZWxsLiBUaGUgQ1NTIGNsYXNzZXMgZGVmaW5lZCBpbgogICAgdGhpcyBmaWxlIHNlcnZlIHRoZSBmb2xsb3dpbmcgcm9sZXM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yIj48Y29kZT5Db2RlTWlycm9yPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgb3V0ZXIgZWxlbWVudCBvZiB0aGUgZWRpdG9yLiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvcgogICAgICBib3JkZXJzIGFuZCBwb3NpdGlvbmluZy4gQ2FuIGFsc28gYmUgdXNlZCB0byBzZXQgc3R5bGVzIHRoYXQKICAgICAgc2hvdWxkIGhvbGQgZm9yIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSBlZGl0b3IgKHN1Y2ggYXMgZm9udAogICAgICBhbmQgZm9udCBzaXplKSwgb3IgdG8gc2V0IGEgYmFja2dyb3VuZC48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX3Njcm9sbCI+PGNvZGU+Q29kZU1pcnJvci1zY3JvbGw8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBlZGl0b3Igc2Nyb2xscyAoPGNvZGU+b3ZlcmZsb3c6CiAgICAgIGF1dG88L2NvZGU+ICsgZml4ZWQgaGVpZ2h0KS4gQnkgZGVmYXVsdCwgaXQgZG9lcy4gR2l2aW5nCiAgICAgIHRoaXMgPGNvZGU+aGVpZ2h0OiBhdXRvOyBvdmVyZmxvdzogdmlzaWJsZTs8L2NvZGU+IHdpbGwgY2F1c2UKICAgICAgdGhlIGVkaXRvciB0byByZXNpemUgdG8gZml0IGl0cyBjb250ZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfZm9jdXNlZCI+PGNvZGU+Q29kZU1pcnJvci1mb2N1c2VkPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuZXZlciB0aGUgZWRpdG9yIGlzIGZvY3VzZWQsIHRoZSB0b3AgZWxlbWVudCBnZXRzIHRoaXMKICAgICAgY2xhc3MuIFRoaXMgaXMgdXNlZCB0byBoaWRlIHRoZSBjdXJzb3IgYW5kIGdpdmUgdGhlIHNlbGVjdGlvbiBhCiAgICAgIGRpZmZlcmVudCBjb2xvciB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9ndXR0ZXIiPjxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhpcyBmb3IgZ2l2aW5nIGEgYmFja2dyb3VuZCBvciBhIGJvcmRlciB0byB0aGUgZWRpdG9yCiAgICAgIGd1dHRlci4gRG9uJ3Qgc2V0IGFueSBwYWRkaW5nIGhlcmUsCiAgICAgIHVzZSA8Y29kZT5Db2RlTWlycm9yLWd1dHRlci10ZXh0PC9jb2RlPiBmb3IgdGhhdC4gQnkgZGVmYXVsdCwKICAgICAgdGhlIGd1dHRlciBpcyAnZmx1aWQnLCBtZWFuaW5nIGl0IHdpbGwgYWRqdXN0IGl0cyB3aWR0aCB0byB0aGUKICAgICAgbWF4aW11bSBsaW5lIG51bWJlciBvciBsaW5lIG1hcmtlciB3aWR0aC4gWW91IGNhbiBhbHNvIHNldCBhCiAgICAgIGZpeGVkIHdpZHRoIGlmIHlvdSB3YW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfZ3V0dGVyX3RleHQiPjxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPlVzZWQgdG8gc3R5bGUgdGhlIGFjdHVhbCBsaW5lIG51bWJlcnMuIEZvciB0aGUgbnVtYmVycyB0bwogICAgICBsaW5lIHVwLCB5b3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgZm9udCBpbiB0aGUgZ3V0dGVyIGlzIHRoZQogICAgICBzYW1lIGFzIHRoZSBvbmUgaW4gdGhlIHJlc3Qgb2YgdGhlIGVkaXRvciwgc28geW91IHNob3VsZAogICAgICBwcm9iYWJseSBvbmx5IHNldCBmb250IHN0eWxlIGFuZCBzaXplIGluCiAgICAgIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBjbGFzcy48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX2xpbmVzIj48Y29kZT5Db2RlTWlycm9yLWxpbmVzPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgdmlzaWJsZSBsaW5lcy4gSWYgdGhpcyBoYXMgdmVydGljYWwKICAgICAgcGFkZGluZywgPGNvZGU+Q29kZU1pcnJvci1ndXR0ZXI8L2NvZGU+IHNob3VsZCBoYXZlIHRoZSBzYW1lCiAgICAgIHBhZGRpbmcuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9jdXJzb3IiPjxjb2RlPkNvZGVNaXJyb3ItY3Vyc29yPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgY3Vyc29yIGlzIGEgYmxvY2sgZWxlbWVudCB0aGF0IGlzIGFic29sdXRlbHkgcG9zaXRpb25lZC4KICAgICAgWW91IGNhbiBtYWtlIGl0IGxvb2sgd2hpY2hldmVyIHdheSB5b3Ugd2FudC48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX3NlbGVjdGVkIj48Y29kZT5Db2RlTWlycm9yLXNlbGVjdGVkPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgc2VsZWN0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IDxjb2RlPnNwYW48L2NvZGU+IGVsZW1lbnRzCiAgICAgIHdpdGggdGhpcyBjbGFzcy48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX21hdGNoaW5nYnJhY2tldCI+PGNvZGU+Q29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQ8L2NvZGU+LAogICAgICAgIDxjb2RlPkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGVzZSBhcmUgdXNlZCB0byBzdHlsZSBtYXRjaGVkIChvciB1bm1hdGNoZWQpIGJyYWNrZXRzLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPlRoZSBhY3R1YWwgbGluZXMsIGFzIHdlbGwgYXMgdGhlIGN1cnNvciwgYXJlIHJlcHJlc2VudGVkCiAgICBieSA8Y29kZT5wcmU8L2NvZGU+IGVsZW1lbnRzLiBCeSBkZWZhdWx0IG5vIHRleHQgc3R5bGluZyAoc3VjaCBhcwogICAgYm9sZCkgdGhhdCBtaWdodCBjaGFuZ2UgbGluZSBoZWlnaHQgaXMgYXBwbGllZC4gSWYgeW91IGRvIHdhbnQKICAgIHN1Y2ggZWZmZWN0cywgeW91J2xsIGhhdmUgdG8gZ2l2ZSA8Y29kZT5Db2RlTWlycm9yIHByZTwvY29kZT4gYQogICAgZml4ZWQgaGVpZ2h0LiBBbHNvLCB5b3UgbXVzdCBzdGlsbCB0YWtlIGNhcmUgdGhhdCBjaGFyYWN0ZXIgd2lkdGgKICAgIGlzIGNvbnN0YW50LjwvcD4KCiAgICA8cD5JZiB5b3VyIHBhZ2UncyBzdHlsZSBzaGVldHMgZG8gZnVua3kgdGhpbmdzIHRvCiAgICBhbGwgPGNvZGU+ZGl2PC9jb2RlPiBvciA8Y29kZT5wcmU8L2NvZGU+IGVsZW1lbnRzICh5b3UgcHJvYmFibHkKICAgIHNob3VsZG4ndCBkbyB0aGF0KSwgeW91J2xsIGhhdmUgdG8gZGVmaW5lIHJ1bGVzIHRvIGNhbmNlbCB0aGVzZQogICAgZWZmZWN0cyBvdXQgYWdhaW4gZm9yIGVsZW1lbnRzIHVuZGVyIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPgogICAgY2xhc3MuPC9wPgoKICAgIDxwPlRoZW1lcyBhcmUgYWxzbyBzaW1wbHkgQ1NTIGZpbGVzLCB3aGljaCBkZWZpbmUgY29sb3JzIGZvcgogICAgdmFyaW91cyBzeW50YWN0aWMgZWxlbWVudHMuIFNlZSB0aGUgZmlsZXMgaW4KICAgIHRoZSA8YSBocmVmPSIuLi90aGVtZS8iPjxjb2RlPnRoZW1lPC9jb2RlPjwvYT4gZGlyZWN0b3J5LjwvcD4KCiAgICA8aDIgaWQ9ImFwaSI+UHJvZ3JhbW1pbmcgQVBJPC9oMj4KCiAgICA8cD5BIGxvdCBvZiBDb2RlTWlycm9yIGZlYXR1cmVzIGFyZSBvbmx5IGF2YWlsYWJsZSB0aHJvdWdoIGl0cyBBUEkuCiAgICBUaGlzIGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgeW91IG5lZWQgdG8gZG8gd29yayB0byBlbmFibGUgdGhlbSwKICAgIGFuZCB0aGUgYWR2YW50YWdlIHRoYXQgQ29kZU1pcnJvciB3aWxsIGZpdCBzZWFtbGVzc2x5IGludG8geW91cgogICAgYXBwbGljYXRpb24uPC9wPgoKICAgIDxwPldoZW5ldmVyIHBvaW50cyBpbiB0aGUgZG9jdW1lbnQgYXJlIHJlcHJlc2VudGVkLCB0aGUgQVBJIHVzZXMKICAgIG9iamVjdHMgd2l0aCA8Y29kZT5saW5lPC9jb2RlPiBhbmQgPGNvZGU+Y2g8L2NvZGU+IHByb3BlcnRpZXMuCiAgICBCb3RoIGFyZSB6ZXJvLWJhc2VkLiBDb2RlTWlycm9yIG1ha2VzIHN1cmUgdG8gJ2NsaXAnIGFueSBwb3NpdGlvbnMKICAgIHBhc3NlZCBieSBjbGllbnQgY29kZSBzbyB0aGF0IHRoZXkgZml0IGluc2lkZSB0aGUgZG9jdW1lbnQsIHNvIHlvdQogICAgc2hvdWxkbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IHNhbml0aXppbmcgeW91ciBjb29yZGluYXRlcy4gSWYgeW91CiAgICBnaXZlIDxjb2RlPmNoPC9jb2RlPiBhIHZhbHVlIG9mIDxjb2RlPm51bGw8L2NvZGU+LCBvciBkb24ndAogICAgc3BlY2lmeSBpdCwgaXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIHNwZWNpZmllZAogICAgbGluZS48L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9ImdldFZhbHVlIj48Y29kZT5nZXRWYWx1ZSgpIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgY3VycmVudCBlZGl0b3IgY29udGVudC48L2RkPgogICAgICA8ZHQgaWQ9InNldFZhbHVlIj48Y29kZT5zZXRWYWx1ZShzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXQgdGhlIGVkaXRvciBjb250ZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldFNlbGVjdGlvbiI+PGNvZGU+Z2V0U2VsZWN0aW9uKCkg4oaSIHN0cmluZzwvY29kZT48L2R0PgogICAgICA8ZGQ+R2V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29kZS48L2RkPgogICAgICA8ZHQgaWQ9InJlcGxhY2VTZWxlY3Rpb24iPjxjb2RlPnJlcGxhY2VTZWxlY3Rpb24oc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVwbGFjZSB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIGdpdmVuIHN0cmluZy48L2RkPgoKICAgICAgPGR0IGlkPSJmb2N1cyI+PGNvZGU+Zm9jdXMoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+R2l2ZSB0aGUgZWRpdG9yIGZvY3VzLjwvZGQ+CgogICAgICA8ZHQgaWQ9InNldE9wdGlvbiI+PGNvZGU+c2V0T3B0aW9uKG9wdGlvbiwgdmFsdWUpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGVkaXRvci4gPGNvZGU+b3B0aW9uPC9jb2RlPgogICAgICBzaG91bGQgdGhlIG5hbWUgb2YgYW4gPGEgaHJlZj0iI2NvbmZpZyI+b3B0aW9uPC9hPiwKICAgICAgYW5kIDxjb2RlPnZhbHVlPC9jb2RlPiBzaG91bGQgYmUgYSB2YWxpZCB2YWx1ZSBmb3IgdGhhdAogICAgICBvcHRpb24uPC9kZD4KICAgICAgPGR0IGlkPSJnZXRPcHRpb24iPjxjb2RlPmdldE9wdGlvbihvcHRpb24pIOKGkiB2YWx1ZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0cmlldmVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBnaXZlbiBvcHRpb24gZm9yIHRoaXMKICAgICAgZWRpdG9yIGluc3RhbmNlLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImN1cnNvckNvb3JkcyI+PGNvZGU+Y3Vyc29yQ29vcmRzKHN0YXJ0KSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIGFuIDxjb2RlPnt4LCB5LCB5Qm90fTwvY29kZT4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlCiAgICAgIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJzb3IgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUKICAgICAgcGFnZS4gPGNvZGU+eUJvdDwvY29kZT4gaXMgdGhlIGNvb3JkaW5hdGUgb2YgdGhlIGJvdHRvbSBvZiB0aGUKICAgICAgY3Vyc29yLiA8Y29kZT5zdGFydDwvY29kZT4gaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB5b3UKICAgICAgd2FudCB0aGUgc3RhcnQgb3IgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLjwvZGQ+CiAgICAgIDxkdCBpZD0iY2hhckNvb3JkcyI+PGNvZGU+Y2hhckNvb3Jkcyhwb3MpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPkxpa2UgPGNvZGU+Y3Vyc29yQ29vcmRzPC9jb2RlPiwgYnV0IHJldHVybnMgdGhlIHBvc2l0aW9uIG9mCiAgICAgIGFuIGFyYml0cmFyeSBjaGFyYWN0ZXJzLiA8Y29kZT5wb3M8L2NvZGU+IHNob3VsZCBiZQogICAgICBhIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdC48L2RkPgogICAgICA8ZHQgaWQ9ImNvb3Jkc0NoYXIiPjxjb2RlPmNvb3Jkc0NoYXIob2JqZWN0KSDihpIgcG9zPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5HaXZlbiBhbiA8Y29kZT57eCwgeX08L2NvZGU+IG9iamVjdCAoaW4gcGFnZSBjb29yZGluYXRlcyksCiAgICAgIHJldHVybnMgdGhlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IHBvc2l0aW9uIHRoYXQgY29ycmVzcG9uZHMgdG8KICAgICAgaXQuPC9kZD4KCiAgICAgIDxkdCBpZD0idW5kbyI+PGNvZGU+dW5kbygpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5VbmRvIG9uZSBlZGl0IChpZiBhbnkgdW5kbyBldmVudHMgYXJlIHN0b3JlZCkuPC9kZD4KICAgICAgPGR0IGlkPSJyZWRvIj48Y29kZT5yZWRvKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlZG8gb25lIHVuZG9uZSBlZGl0LjwvZGQ+CiAgICAgIDxkdCBpZD0iaGlzdG9yeVNpemUiPjxjb2RlPmhpc3RvcnlTaXplKCkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyBhbiBvYmplY3Qgd2l0aCA8Y29kZT57dW5kbywgcmVkb308L2NvZGU+IHByb3BlcnRpZXMsCiAgICAgIGJvdGggb2Ygd2hpY2ggaG9sZCBpbnRlZ2VycywgaW5kaWNhdGluZyB0aGUgYW1vdW50IG9mIHN0b3JlZAogICAgICB1bmRvIGFuZCByZWRvIG9wZXJhdGlvbnMuPC9kZD4KICAgICAgPGR0IGlkPSJjbGVhckhpc3RvcnkiPjxjb2RlPmNsZWFySGlzdG9yeSgpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DbGVhcnMgdGhlIGVkaXRvcidzIHVuZG8gaGlzdG9yeS48L2RkPgoKICAgICAgPGR0IGlkPSJpbmRlbnRMaW5lIj48Y29kZT5pbmRlbnRMaW5lKGxpbmUsIGRpcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlc2V0IHRoZSBnaXZlbiBsaW5lJ3MgaW5kZW50YXRpb24gdG8gdGhlIGluZGVudGF0aW9uCiAgICAgIHByZXNjcmliZWQgYnkgdGhlIG1vZGUuIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgZ2l2ZW4sCiAgICAgIGluZGVudGF0aW9uIHdpbGwgYmUgaW5jcmVhc2VkIChpZiA8Y29kZT5kaXI8L2NvZGU+IGlzIHRydWUpIG9yCiAgICAgIGRlY3JlYXNlZCAoaWYgZmFsc2UpIGJ5IGFuIDxhIGhyZWY9IiNvcHRpb25faW5kZW50VW5pdCI+aW5kZW50CiAgICAgIHVuaXQ8L2E+IGluc3RlYWQuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0VG9rZW5BdCI+PGNvZGU+Z2V0VG9rZW5BdChwb3MpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHJpZXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdG9rZW4gdGhlIGN1cnJlbnQgbW9kZSBmb3VuZAogICAgICBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gKGEgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0KS4gVGhlCiAgICAgIHJldHVybmVkIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogICAgICA8ZGw+CiAgICAgICAgPGR0Pjxjb2RlPnN0YXJ0PC9jb2RlPjwvZHQ+PGRkPlRoZSBjaGFyYWN0ZXIgKG9uIHRoZSBnaXZlbiBsaW5lKSBhdCB3aGljaCB0aGUgdG9rZW4gc3RhcnRzLjwvZGQ+CiAgICAgICAgPGR0Pjxjb2RlPmVuZDwvY29kZT48L2R0PjxkZD5UaGUgY2hhcmFjdGVyIGF0IHdoaWNoIHRoZSB0b2tlbiBlbmRzLjwvZGQ+CiAgICAgICAgPGR0Pjxjb2RlPnN0cmluZzwvY29kZT48L2R0PjxkZD5UaGUgdG9rZW4ncyBzdHJpbmcuPC9kZD4KICAgICAgICA8ZHQ+PGNvZGU+Y2xhc3NOYW1lPC9jb2RlPjwvZHQ+PGRkPlRoZSBjbGFzcyB0aGUgbW9kZSBhc3NpZ25lZAogICAgICAgIHRvIHRoZSB0b2tlbi4gKENhbiBiZSBudWxsIHdoZW4gbm8gY2xhc3Mgd2FzIGFzc2lnbmVkLik8L2RkPgogICAgICAgIDxkdD48Y29kZT5zdGF0ZTwvY29kZT48L2R0PjxkZD5UaGUgbW9kZSdzIHN0YXRlIGF0IHRoZSBlbmQgb2YgdGhpcyB0b2tlbi48L2RkPgogICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9Im1hcmtUZXh0Ij48Y29kZT5tYXJrVGV4dChmcm9tLCB0bywgY2xhc3NOYW1lKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DYW4gYmUgdXNlZCB0byBtYXJrIGEgcmFuZ2Ugb2YgdGV4dCB3aXRoIGEgc3BlY2lmaWMgQ1NTCiAgICAgIGNsYXNzIG5hbWUuIDxjb2RlPmZyb208L2NvZGU+IGFuZCA8Y29kZT50bzwvY29kZT4gc2hvdWxkCiAgICAgIGJlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdHMuIFRoZSBtZXRob2Qgd2lsbCByZXR1cm4gYW4KICAgICAgb2JqZWN0IHdpdGggdHdvIG1ldGhvZHMsIDxjb2RlPmNsZWFyKCk8L2NvZGU+LCB3aGljaCByZW1vdmVzIHRoZQogICAgICBtYXJrLCBhbmQgPGNvZGU+ZmluZCgpPC9jb2RlPiwgd2hpY2ggcmV0dXJucyBhIDxjb2RlPntmcm9tLAogICAgICB0b308L2NvZGU+IChib3RoIGRvY3VtZW50IHBvc2l0aW9ucyksIGluZGljYXRpbmcgdGhlIGN1cnJlbnQKICAgICAgcG9zaXRpb24gb2YgdGhlIG1hcmtlZCByYW5nZS48L2RkPgoKICAgICAgPGR0IGlkPSJzZXRCb29rbWFyayI+PGNvZGU+c2V0Qm9va21hcmsocG9zKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbnNlcnRzIGEgYm9va21hcmssIGEgaGFuZGxlIHRoYXQgZm9sbG93cyB0aGUgdGV4dCBhcm91bmQgaXQKICAgICAgYXMgaXQgaXMgYmVpbmcgZWRpdGVkLCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uIEEgYm9va21hcmsgaGFzIHR3bwogICAgICBtZXRob2RzIDxjb2RlPmZpbmQoKTwvY29kZT4gYW5kIDxjb2RlPmNsZWFyKCk8L2NvZGU+LiBUaGUgZmlyc3QKICAgICAgcmV0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgYm9va21hcmssIGlmIGl0IGlzIHN0aWxsIGluCiAgICAgIHRoZSBkb2N1bWVudCwgYW5kIHRoZSBzZWNvbmQgZXhwbGljaXRseSByZW1vdmVzIHRoZQogICAgICBib29rbWFyay48L2RkPgoKICAgICAgPGR0IGlkPSJzZXRNYXJrZXIiPjxjb2RlPnNldE1hcmtlcihsaW5lLCB0ZXh0LCBjbGFzc05hbWUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BZGQgYSBndXR0ZXIgbWFya2VyIGZvciB0aGUgZ2l2ZW4gbGluZS4gR3V0dGVyIG1hcmtlcnMgYXJlCiAgICAgIHNob3duIGluIHRoZSBsaW5lLW51bWJlciBhcmVhIChpbnN0ZWFkIG9mIHRoZSBudW1iZXIgZm9yIHRoaXMKICAgICAgbGluZSkuIEJvdGggPGNvZGU+dGV4dDwvY29kZT4gYW5kIDxjb2RlPmNsYXNzTmFtZTwvY29kZT4gYXJlCiAgICAgIG9wdGlvbmFsLiBTZXR0aW5nIDxjb2RlPnRleHQ8L2NvZGU+IHRvIGEgVW5pY29kZSBjaGFyYWN0ZXIgbGlrZQogICAgICDil48gdGVuZHMgdG8gZ2l2ZSBhIG5pY2UgZWZmZWN0LiBUbyBwdXQgYSBwaWN0dXJlIGluIHRoZSBndXR0ZXIsCiAgICAgIHNldCA8Y29kZT50ZXh0PC9jb2RlPiB0byBhIHNwYWNlIGFuZCA8Y29kZT5jbGFzc05hbWU8L2NvZGU+IHRvCiAgICAgIHNvbWV0aGluZyB0aGF0IHNldHMgYSBiYWNrZ3JvdW5kIGltYWdlLiBJZiB5b3UKICAgICAgc3BlY2lmeSA8Y29kZT50ZXh0PC9jb2RlPiwgdGhlIGdpdmVuIHRleHQgKHdoaWNoIG1heSBjb250YWluCiAgICAgIEhUTUwpIHdpbGwsIGJ5IGRlZmF1bHQsIHJlcGxhY2UgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGF0IGxpbmUuCiAgICAgIElmIHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQsIHlvdSBjYW4gaW5jbHVkZSB0aGUKICAgICAgc3RyaW5nIDxjb2RlPiVOJTwvY29kZT4gaW4gdGhlIHRleHQsIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgYnkKICAgICAgdGhlIGxpbmUgbnVtYmVyLjwvZGQ+CiAgICAgIDxkdCBpZD0iY2xlYXJNYXJrZXIiPjxjb2RlPmNsZWFyTWFya2VyKGxpbmUpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DbGVhcnMgYSBtYXJrZXIgY3JlYXRlZAogICAgICB3aXRoIDxjb2RlPnNldE1hcmtlcjwvY29kZT4uIDxjb2RlPmxpbmU8L2NvZGU+IGNhbiBiZSBlaXRoZXIgYQogICAgICBudW1iZXIgb3IgYSBoYW5kbGUgcmV0dXJuZWQgYnkgPGNvZGU+c2V0TWFya2VyPC9jb2RlPiAoc2luY2UgYQogICAgICBudW1iZXIgbWF5IG5vdyByZWZlciB0byBhIGRpZmZlcmVudCBsaW5lIGlmIHNvbWV0aGluZyB3YXMgYWRkZWQKICAgICAgb3IgZGVsZXRlZCkuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRMaW5lQ2xhc3MiPjxjb2RlPnNldExpbmVDbGFzcyhsaW5lLCBjbGFzc05hbWUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXQgYSBDU1MgY2xhc3MgbmFtZSBmb3IgdGhlIGdpdmVuIGxpbmUuIDxjb2RlPmxpbmU8L2NvZGU+CiAgICAgIGNhbiBiZSBhIG51bWJlciBvciBhIGxpbmUgaGFuZGxlIChhcyByZXR1cm5lZAogICAgICBieSA8Y29kZT5zZXRNYXJrZXI8L2NvZGU+IG9yIHRoaXMgZnVuY3Rpb24pLgogICAgICBQYXNzIDxjb2RlPm51bGw8L2NvZGU+IHRvIGNsZWFyIHRoZSBjbGFzcyBmb3IgYSBsaW5lLjwvZGQ+CiAgICAgIDxkdCBpZD0iaGlkZUxpbmUiPjxjb2RlPmhpZGVMaW5lKGxpbmUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5IaWRlIHRoZSBnaXZlbiBsaW5lIChlaXRoZXIgYnkgbnVtYmVyIG9yIGJ5IGhhbmRsZSkuIEhpZGRlbgogICAgICBsaW5lcyBkb24ndCBzaG93IHVwIGluIHRoZSBlZGl0b3IsIGFuZCB0aGVpciBudW1iZXJzIGFyZSBza2lwcGVkCiAgICAgIHdoZW4gPGEgaHJlZj0iI29wdGlvbl9saW5lTnVtYmVycyI+bGluZSBudW1iZXJzPC9hPiBhcmUgZW5hYmxlZC4KICAgICAgRGVsZXRpbmcgYSByZWdpb24gYXJvdW5kIHRoZW0gZG9lcyBkZWxldGUgdGhlbSwgYW5kIGNvcGluZyBhCiAgICAgIHJlZ2lvbiBhcm91bmQgd2lsbCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNvcGllZCB0ZXh0LjwvZGQ+CiAgICAgIDxkdCBpZD0ic2hvd0xpbmUiPjxjb2RlPnNob3dMaW5lKGxpbmUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgaW52ZXJzZSBvZiA8Y29kZT5oaWRlTGluZTwvY29kZT7igJRyZS1zaG93cyBhIHByZXZpb3VzbHkKICAgICAgaGlkZGVuIGxpbmUsIGJ5IG51bWJlciBvciBieSBoYW5kbGUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib25EZWxldGVMaW5lIj48Y29kZT5vbkRlbGV0ZUxpbmUobGluZSwgZnVuYyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIGxpbmUgaXMKICAgICAgZGVsZXRlZCBmcm9tIHRoZSBkb2N1bWVudC48L2RkPgoKICAgICAgPGR0IGlkPSJsaW5lSW5mbyI+PGNvZGU+bGluZUluZm8obGluZSkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbGluZSBudW1iZXIsIHRleHQgY29udGVudCwgYW5kIG1hcmtlciBzdGF0dXMgb2YKICAgICAgdGhlIGdpdmVuIGxpbmUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBudW1iZXIgb3IgYSBoYW5kbGUKICAgICAgcmV0dXJuZWQgYnkgPGNvZGU+c2V0TWFya2VyPC9jb2RlPi4gVGhlIHJldHVybmVkIG9iamVjdCBoYXMgdGhlCiAgICAgIHN0cnVjdHVyZSA8Y29kZT57bGluZSwgaGFuZGxlLCB0ZXh0LCBtYXJrZXJUZXh0LCBtYXJrZXJDbGFzc308L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldExpbmVIYW5kbGUiPjxjb2RlPmdldExpbmVIYW5kbGUobnVtKSDihpIgbGluZUhhbmRsZTwvY29kZT48L2R0PgogICAgICA8ZGQ+RmV0Y2hlcyB0aGUgbGluZSBoYW5kbGUgZm9yIHRoZSBnaXZlbiBsaW5lIG51bWJlci48L2RkPgoKICAgICAgPGR0IGlkPSJhZGRXaWRnZXQiPjxjb2RlPmFkZFdpZGdldChwb3MsIG5vZGUsIHNjcm9sbEludG9WaWV3KTwvY29kZT48L2R0PgogICAgICA8ZGQ+UHV0cyA8Y29kZT5ub2RlPC9jb2RlPiwgd2hpY2ggc2hvdWxkIGJlIGFuIGFic29sdXRlbHkKICAgICAgcG9zaXRpb25lZCBET00gbm9kZSwgaW50byB0aGUgZWRpdG9yLCBwb3NpdGlvbmVkIHJpZ2h0IGJlbG93IHRoZQogICAgICBnaXZlbiA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBwb3NpdGlvbi4KICAgICAgV2hlbiA8Y29kZT5zY3JvbGxJbnRvVmlldzwvY29kZT4gaXMgdHJ1ZSwgdGhlIGVkaXRvciB3aWxsIGVuc3VyZQogICAgICB0aGF0IHRoZSBlbnRpcmUgbm9kZSBpcyB2aXNpYmxlIChpZiBwb3NzaWJsZSkuIFRvIHJlbW92ZSB0aGUKICAgICAgd2lkZ2V0IGFnYWluLCBzaW1wbHkgdXNlIERPTSBtZXRob2RzIChtb3ZlIGl0IHNvbWV3aGVyZSBlbHNlLCBvcgogICAgICBjYWxsIDxjb2RlPnJlbW92ZUNoaWxkPC9jb2RlPiBvbiBpdHMgcGFyZW50KS48L2RkPgoKICAgICAgPGR0IGlkPSJtYXRjaEJyYWNrZXRzIj48Y29kZT5tYXRjaEJyYWNrZXRzKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkZvcmNlIG1hdGNoaW5nLWJyYWNrZXQtaGlnaGxpZ2h0aW5nIHRvIGhhcHBlbi48L2RkPgoKICAgICAgPGR0IGlkPSJsaW5lQ291bnQiPjxjb2RlPmxpbmVDb3VudCgpIOKGkiBudW1iZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBlZGl0b3IuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0Q3Vyc29yIj48Y29kZT5nZXRDdXJzb3Ioc3RhcnQpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPjxjb2RlPnN0YXJ0PC9jb2RlPiBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzdGFydAogICAgICBvciB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gbXVzdCBiZSByZXRyaWV2ZWQuIElmIGl0IGlzIG5vdAogICAgICBnaXZlbiwgdGhlIGN1cnJlbnQgY3Vyc29yIHBvcywgaS5lLiB0aGUgc2lkZSBvZiB0aGUgc2VsZWN0aW9uCiAgICAgIHRoYXQgd291bGQgbW92ZSBpZiB5b3UgcHJlc3NlZCBhbiBhcnJvdyBrZXksIGlzIGNob3Nlbi4KICAgICAgQSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC48L2RkPgogICAgICA8ZHQgaWQ9InNvbWV0aGluZ1NlbGVjdGVkIj48Y29kZT5zb21ldGhpbmdTZWxlY3RlZCgpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm4gdHJ1ZSBpZiBhbnkgdGV4dCBpcyBzZWxlY3RlZC48L2RkPgogICAgICA8ZHQgaWQ9InNldEN1cnNvciI+PGNvZGU+c2V0Q3Vyc29yKHBvcyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlNldCB0aGUgY3Vyc29yIHBvc2l0aW9uLiBZb3UgY2FuIGVpdGhlciBwYXNzIGEKICAgICAgc2luZ2xlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdCwgb3IgdGhlIGxpbmUgYW5kIHRoZQogICAgICBjaGFyYWN0ZXIgYXMgdHdvIHNlcGFyYXRlIHBhcmFtZXRlcnMuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRTZWxlY3Rpb24iPjxjb2RlPnNldFNlbGVjdGlvbihzdGFydCwgZW5kKTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBzZWxlY3Rpb24gcmFuZ2UuIDxjb2RlPnN0YXJ0PC9jb2RlPgogICAgICBhbmQgPGNvZGU+ZW5kPC9jb2RlPiBzaG91bGQgYmUgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0cy48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRMaW5lIj48Y29kZT5nZXRMaW5lKG4pIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgY29udGVudCBvZiBsaW5lIDxjb2RlPm48L2NvZGU+LjwvZGQ+CiAgICAgIDxkdCBpZD0ic2V0TGluZSI+PGNvZGU+c2V0TGluZShuLCB0ZXh0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBjb250ZW50IG9mIGxpbmUgPGNvZGU+bjwvY29kZT4uPC9kZD4KICAgICAgPGR0IGlkPSJyZW1vdmVMaW5lIj48Y29kZT5yZW1vdmVMaW5lKG4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZW1vdmUgdGhlIGdpdmVuIGxpbmUgZnJvbSB0aGUgZG9jdW1lbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0UmFuZ2UiPjxjb2RlPmdldFJhbmdlKGZyb20sIHRvKSDihpIgc3RyaW5nPC9jb2RlPjwvdGQ+CiAgICAgIDxkZD5HZXQgdGhlIHRleHQgYmV0d2VlbiB0aGUgZ2l2ZW4gcG9pbnRzIGluIHRoZSBlZGl0b3IsIHdoaWNoCiAgICAgIHNob3VsZCBiZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3RzLjwvZGQ+CiAgICAgIDxkdCBpZD0icmVwbGFjZVJhbmdlIj48Y29kZT5yZXBsYWNlUmFuZ2Uoc3RyaW5nLCBmcm9tLCB0byk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlcGxhY2UgdGhlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGJldHdlZW4gPGNvZGU+ZnJvbTwvY29kZT4KICAgICAgYW5kIDxjb2RlPnRvPC9jb2RlPiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuIDxjb2RlPmZyb208L2NvZGU+CiAgICAgIGFuZCA8Y29kZT50bzwvY29kZT4gbXVzdCBiZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPgogICAgICBvYmplY3RzLiA8Y29kZT50bzwvY29kZT4gY2FuIGJlIGxlZnQgb2ZmIHRvIHNpbXBseSBpbnNlcnQgdGhlCiAgICAgIHN0cmluZyBhdCBwb3NpdGlvbiA8Y29kZT5mcm9tPC9jb2RlPi48L2RkPgogICAgICAKICAgICAgPGR0IGlkPSJwb3NGcm9tSW5kZXgiPjxjb2RlPnBvc0Zyb21JbmRleChpbmRleCkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2FsY3VsYXRlcyBhbmQgcmV0dXJucyBhIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdCBmb3IgYQogICAgICB6ZXJvLWJhc2VkIDxjb2RlPmluZGV4PC9jb2RlPiB3aG8ncyB2YWx1ZSBpcyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlCiAgICAgIGVkaXRvcidzIHRleHQuIElmIHRoZSA8Y29kZT5pbmRleDwvY29kZT4gaXMgb3V0IG9mIHJhbmdlIG9mIHRoZSB0ZXh0IHRoZW4KICAgICAgdGhlIHJldHVybmVkIG9iamVjdCBpcyBjbGlwcGVkIHRvIHN0YXJ0IG9yIGVuZCBvZiB0aGUgdGV4dAogICAgICByZXNwZWN0aXZlbHkuPC9kZD4KICAgICAgPGR0IGlkPSJpbmRleEZyb21Qb3MiPjxjb2RlPmluZGV4RnJvbVBvcyhvYmplY3QpIOKGkiBudW1iZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSByZXZlcnNlIG9mIDxhIGhyZWY9IiNwb3NGcm9tSW5kZXgiPjxjb2RlPnBvc0Zyb21JbmRleDwvY29kZT48L2E+LjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPlRoZSBmb2xsb3dpbmcgYXJlIG1vcmUgbG93LWxldmVsIG1ldGhvZHM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJvcGVyYXRpb24iPjxjb2RlPm9wZXJhdGlvbihmdW5jKSDihpIgcmVzdWx0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Db2RlTWlycm9yIGludGVybmFsbHkgYnVmZmVycyBjaGFuZ2VzIGFuZCBvbmx5IHVwZGF0ZXMgaXRzCiAgICAgIERPTSBzdHJ1Y3R1cmUgYWZ0ZXIgaXQgaGFzIGZpbmlzaGVkIHBlcmZvcm1pbmcgc29tZSBvcGVyYXRpb24uCiAgICAgIElmIHlvdSBuZWVkIHRvIHBlcmZvcm0gYSBsb3Qgb2Ygb3BlcmF0aW9ucyBvbiBhIENvZGVNaXJyb3IKICAgICAgaW5zdGFuY2UsIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCB3aXRoIGEgZnVuY3Rpb24gYXJndW1lbnQuIEl0CiAgICAgIHdpbGwgY2FsbCB0aGUgZnVuY3Rpb24sIGJ1ZmZlcmluZyB1cCBhbGwgY2hhbmdlcywgYW5kIG9ubHkgZG9pbmcKICAgICAgdGhlIGV4cGVuc2l2ZSB1cGRhdGUgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMuIFRoaXMgY2FuIGJlIGEKICAgICAgbG90IGZhc3Rlci4gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgbWV0aG9kIHdpbGwgYmUgdGhlIHJldHVybgogICAgICB2YWx1ZSBvZiB5b3VyIGZ1bmN0aW9uLjwvZGQ+CgogICAgICA8ZHQgaWQ9InJlZnJlc2giPjxjb2RlPnJlZnJlc2goKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SWYgeW91ciBjb2RlIGRvZXMgc29tZXRoaW5nIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZWRpdG9yCiAgICAgIGVsZW1lbnQgKHdpbmRvdyByZXNpemVzIGFyZSBhbHJlYWR5IGxpc3RlbmVkIGZvciksIG9yIHVuaGlkZXMKICAgICAgaXQsIHlvdSBzaG91bGQgcHJvYmFibHkgZm9sbG93IHVwIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2QgdG8KICAgICAgZW5zdXJlIENvZGVNaXJyb3IgaXMgc3RpbGwgbG9va2luZyBhcyBpbnRlbmRlZC48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRJbnB1dEZpZWxkIj48Y29kZT5nZXRJbnB1dEZpZWxkKCkg4oaSIHRleHRhcmVhPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBoaWRlbiB0ZXh0YXJlYSB1c2VkIHRvIHJlYWQgaW5wdXQuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRXcmFwcGVyRWxlbWVudCI+PGNvZGU+Z2V0V3JhcHBlckVsZW1lbnQoKSDihpIgbm9kZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgRE9NIG5vZGUgdGhhdCByZXByZXNlbnRzIHRoZSBlZGl0b3IuIFJlbW92ZSB0aGlzCiAgICAgIGZyb20geW91ciB0cmVlIHRvIGRlbGV0ZSBhbiBlZGl0b3IgaW5zdGFuY2UuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRTY3JvbGxlckVsZW1lbnQiPjxjb2RlPmdldFNjcm9sbGVyRWxlbWVudCgpIOKGkiBub2RlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBET00gbm9kZSB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgc2l6aW5nIGFuZAogICAgICB0aGUgc2Nyb2xsaW5nIG9mIHRoZSBlZGl0b3IuIFlvdSBjYW4gY2hhbmdlCiAgICAgIHRoZSA8Y29kZT5oZWlnaHQ8L2NvZGU+IGFuZCA8Y29kZT53aWR0aDwvY29kZT4gc3R5bGVzIG9mIHRoaXMKICAgICAgZWxlbWVudCB0byByZXNpemUgYW4gZWRpdG9yLiAoWW91IG1pZ2h0IGhhdmUgdG8gY2FsbAogICAgICB0aGUgPGEgaHJlZj0iI3JlZnJlc2giPjxjb2RlPnJlZnJlc2g8L2NvZGU+PC9hPiBtZXRob2QKICAgICAgYWZ0ZXJ3YXJkcy4pPC9kZD4KICAgICAgPGR0IGlkPSJnZXRHdXR0ZXJFbGVtZW50Ij48Y29kZT5nZXRHdXR0ZXJFbGVtZW50KCkg4oaSIG5vZGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPkZldGNoZXMgdGhlIERPTSBub2RlIHRoYXQgcmVwcmVzZW50cyB0aGUgZWRpdG9yIGd1dHRlci48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRTdGF0ZUFmdGVyIj48Y29kZT5nZXRTdGF0ZUFmdGVyKGxpbmUpIOKGkiBzdGF0ZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbW9kZSdzIHBhcnNlciBzdGF0ZSwgaWYgYW55LCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBnaXZlbiBsaW5lIG51bWJlci4gSWYgbm8gbGluZSBudW1iZXIgaXMgZ2l2ZW4sIHRoZSBzdGF0ZSBhdCB0aGUKICAgICAgZW5kIG9mIHRoZSBkb2N1bWVudCBpcyByZXR1cm5lZC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBzdG9yaW5nCiAgICAgIHBhcnNpbmcgZXJyb3JzIGluIHRoZSBzdGF0ZSwgb3IgZ2V0dGluZyBvdGhlciBraW5kcyBvZgogICAgICBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZvciBhIGxpbmUuPC9kZD4KICAgIDwvZGw+CgogICAgPHAgaWQ9ImZyb21UZXh0QXJlYSI+RmluYWxseSwgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IG9iamVjdAogICAgaXRzZWxmIGhhcyBhIG1ldGhvZCA8Y29kZT5mcm9tVGV4dEFyZWE8L2NvZGU+LiBUaGlzIHRha2VzIGEKICAgIHRleHRhcmVhIERPTSBub2RlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uCiAgICBvYmplY3QgYXMgc2Vjb25kLiBJdCB3aWxsIHJlcGxhY2UgdGhlIHRleHRhcmVhIHdpdGggYSBDb2RlTWlycm9yCiAgICBpbnN0YW5jZSwgYW5kIHdpcmUgdXAgdGhlIGZvcm0gb2YgdGhhdCB0ZXh0YXJlYSAoaWYgYW55KSB0byBtYWtlCiAgICBzdXJlIHRoZSBlZGl0b3IgY29udGVudHMgYXJlIHB1dCBpbnRvIHRoZSB0ZXh0YXJlYSB3aGVuIHRoZSBmb3JtCiAgICBpcyBzdWJtaXR0ZWQuIEEgQ29kZU1pcnJvciBpbnN0YW5jZSBjcmVhdGVkIHRoaXMgd2F5IGhhcyB0d28KICAgIGFkZGl0aW9uYWwgbWV0aG9kczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9InNhdmUiPjxjb2RlPnNhdmUoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29weSB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGludG8gdGhlIHRleHRhcmVhLjwvZGQ+CgogICAgICA8ZHQgaWQ9InRvVGV4dEFyZWEiPjxjb2RlPnRvVGV4dEFyZWEoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVtb3ZlIHRoZSBlZGl0b3IsIGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCB0ZXh0YXJlYSAod2l0aAogICAgICB0aGUgZWRpdG9yJ3MgY3VycmVudCBjb250ZW50KS48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRUZXh0QXJlYSI+PGNvZGU+Z2V0VGV4dEFyZWEoKSDihpIgdGV4dGFyZWE8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIHRleHRhcmVhIHRoYXQgdGhlIGluc3RhbmNlIHdhcyBiYXNlZCBvbi48L2RkPgogICAgPC9kbD4KCiAgICA8cCBpZD0iZGVmaW5lRXh0ZW5zaW9uIj5JZiB5b3Ugd2FudCB0byBkZWZpbmUgZXh0cmEgbWV0aG9kcyBpbiB0ZXJtcwogICAgb2YgdGhlIENvZGVNaXJyb3IgQVBJLCBpdCBpcyBwb3NzaWJsZSB0bwogICAgdXNlIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKG5hbWUsIHZhbHVlKTwvY29kZT4uIFRoaXMKICAgIHdpbGwgY2F1c2UgdGhlIGdpdmVuIHZhbHVlICh1c3VhbGx5IGEgbWV0aG9kKSB0byBiZSBhZGRlZCB0byBhbGwKICAgIENvZGVNaXJyb3IgaW5zdGFuY2VzIGNyZWF0ZWQgZnJvbSB0aGVuIG9uLjwvcD4KCiAgICA8aDIgaWQ9ImFkZG9ucyI+QWRkLW9uczwvaDI+CgogICAgPHA+VGhlIDxjb2RlPmxpYi91dGlsPC9jb2RlPiBkaXJlY3RvcnkgaW4gdGhlIGRpc3RyaWJ1dGlvbgogICAgY29udGFpbnMgYSBudW1iZXIgb2YgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IGltcGxlbWVudCBleHRyYQogICAgZWRpdG9yIGZ1bmN0aW9uYWxpdHkuIEluIGJyaWVmLCB0aGV5IGFyZTo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9InV0aWxfZGlhbG9nIj48YSBocmVmPSIuLi9saWIvdXRpbC9kaWFsb2cuanMiPjxjb2RlPmRpYWxvZy5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPlByb3ZpZGVzIGEgdmVyeSBzaW1wbGUgd2F5IHRvIHF1ZXJ5IHVzZXJzIGZvciB0ZXh0IGlucHV0LgogICAgICBBZGRzIGFuIDxjb2RlPm9wZW5EaWFsb2c8L2NvZGU+IG1ldGhvZCB0byBDb2RlTWlycm9yIGluc3RhbmNlcywKICAgICAgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRoIGFuIEhUTUwgZnJhZ21lbnQgdGhhdCBwcm92aWRlcyB0aGUKICAgICAgcHJvbXB0IChzaG91bGQgaW5jbHVkZSBhbiA8Y29kZT5pbnB1dDwvY29kZT4gdGFnKSwgYW5kIGEKICAgICAgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0ZXh0IGhhcyBiZWVuIGVudGVyZWQuCiAgICAgIERlcGVuZHMgb24gPGNvZGU+bGliL3V0aWwvZGlhbG9nLmNzczwvY29kZT4uPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX3NlYXJjaGN1cnNvciI+PGEgaHJlZj0iLi4vbGliL3V0aWwvc2VhcmNoY3Vyc29yLmpzIj48Y29kZT5zZWFyY2hjdXJzb3IuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5BZGRzIHRoZSA8Y29kZT5nZXRTZWFyY2hDdXJzb3IocXVlcnksIHN0YXJ0LCBjYXNlRm9sZCkg4oaSCiAgICAgIGN1cnNvcjwvY29kZT4gbWV0aG9kIHRvIENvZGVNaXJyb3IgaW5zdGFuY2VzLCB3aGljaCBjYW4gYmUgdXNlZAogICAgICB0byBpbXBsZW1lbnQgc2VhcmNoL3JlcGxhY2UgZnVuY3Rpb25hbGl0eS4gPGNvZGU+cXVlcnk8L2NvZGU+CiAgICAgIGNhbiBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIHN0cmluZyAob25seSBzdHJpbmdzIHdpbGwgbWF0Y2gKICAgICAgYWNyb3NzIGxpbmVz4oCUaWYgdGhleSBjb250YWluIG5ld2xpbmVzKS4gPGNvZGU+c3RhcnQ8L2NvZGU+CiAgICAgIHByb3ZpZGVzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgc2VhcmNoLiBJdCBjYW4gYmUKICAgICAgYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QsIG9yIGNhbiBiZSBsZWZ0IG9mZiB0byBkZWZhdWx0CiAgICAgIHRvIHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuIDxjb2RlPmNhc2VGb2xkPC9jb2RlPiBpcyBvbmx5CiAgICAgIHJlbGV2YW50IHdoZW4gbWF0Y2hpbmcgYSBzdHJpbmcuIEl0IHdpbGwgY2F1c2UgdGhlIHNlYXJjaCB0byBiZQogICAgICBjYXNlLWluc2Vuc2l0aXZlLiBBIHNlYXJjaCBjdXJzb3IgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKICAgICAgICA8ZGw+CiAgICAgICAgICA8ZHQ+PGNvZGU+ZmluZE5leHQoKSwgZmluZFByZXZpb3VzKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgICAgIDxkZD5TZWFyY2ggZm9yd2FyZCBvciBiYWNrd2FyZCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgogICAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhIG1hdGNoIHdhcyBmb3VuZC4gSWYKICAgICAgICAgIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlCiAgICAgICAgICBhcnJheSByZXR1cm5lZCBieSB0aGUgPGNvZGU+bWF0Y2g8L2NvZGU+IG1ldGhvZCwgaW4gY2FzZSB5b3UKICAgICAgICAgIHdhbnQgdG8gZXh0cmFjdCBtYXRjaGVkIGdyb3Vwcy48L2RkPgogICAgICAgICAgPGR0Pjxjb2RlPmZyb20oKSwgdG8oKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+VGhlc2UgYXJlIG9ubHkgdmFsaWQgd2hlbiB0aGUgbGFzdCBjYWxsCiAgICAgICAgICB0byA8Y29kZT5maW5kTmV4dDwvY29kZT4gb3IgPGNvZGU+ZmluZFByZXZpb3VzPC9jb2RlPiBkaWQKICAgICAgICAgIG5vdCByZXR1cm4gZmFsc2UuIFRoZXkgd2lsbCByZXR1cm4gPGNvZGU+e2xpbmUsIGNofTwvY29kZT4KICAgICAgICAgIG9iamVjdHMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIG1hdGNoLjwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+cmVwbGFjZSh0ZXh0KTwvY29kZT48L2R0PgogICAgICAgICAgPGRkPlJlcGxhY2VzIHRoZSBjdXJyZW50bHkgZm91bmQgbWF0Y2ggd2l0aCB0aGUgZ2l2ZW4gdGV4dAogICAgICAgICAgYW5kIGFkanVzdHMgdGhlIGN1cnNvciBwb3NpdGlvbiB0byByZWZsZWN0IHRoZQogICAgICAgICAgcmVwbGFjZW1lbnQuPC9kZD4KICAgICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9InV0aWxfc2VhcmNoIj48YSBocmVmPSIuLi9saWIvdXRpbC9zZWFyY2guanMiPjxjb2RlPnNlYXJjaC5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPkltcGxlbWVudHMgdGhlIHNlYXJjaCBjb21tYW5kcy4gQ29kZU1pcnJvciBoYXMga2V5cyBib3VuZCB0bwogICAgICB0aGVzZSBieSBkZWZhdWx0LCBidXQgd2lsbCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGVtIHVubGVzcyBhbgogICAgICBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZC4gRGVwZW5kcwogICAgICBvbiA8Y29kZT5zZWFyY2hjdXJzb3IuanM8L2NvZGU+LCBhbmQgd2lsbCBtYWtlIHVzZQogICAgICBvZiA8YSBocmVmPSIjdXRpbF9kaWFsb2ciPjxjb2RlPm9wZW5EaWFsb2c8L2NvZGU+PC9hPiB3aGVuCiAgICAgIGF2YWlsYWJsZSB0byBtYWtlIHByb21wdGluZyBmb3Igc2VhcmNoIHF1ZXJpZXMgbGVzcyB1Z2x5LjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9mb2xkY29kZSI+PGEgaHJlZj0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjxjb2RlPmZvbGRjb2RlLmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+SGVscHMgd2l0aCBjb2RlIGZvbGRpbmcuIFNlZSA8YSBocmVmPSIuLi9kZW1vL2ZvbGRpbmcuaHRtbCI+dGhlCiAgICAgIGRlbW88L2E+IGZvciBhbiBleGFtcGxlLgogICAgICBDYWxsIDxjb2RlPkNvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uPC9jb2RlPiB3aXRoIGEgcmFuZ2UtZmluZGVyCiAgICAgIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHdpbGwsIHdoZW4gYXBwbGllZCB0bwogICAgICBhIENvZGVNaXJyb3IgaW5zdGFuY2UgYW5kIGEgbGluZSBudW1iZXIsIGF0dGVtcHQgdG8gZm9sZCBvcgogICAgICB1bmZvbGQgdGhlIGJsb2NrIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBsaW5lLiBBIHJhbmdlLWZpbmRlciBpcyBhCiAgICAgIGxhbmd1YWdlLXNwZWNpZmljIGZ1bmN0b2luIHRoYXQgYWxzbyB0YWtlcyBhbiBpbnN0YW5jZSBhbmQgYQogICAgICBsaW5lIG51bWJlciwgYW5kIHJldHVybnMgYW4gZW5kIGxpbmUgZm9yIHRoZSBibG9jaywgb3IgbnVsbCBpZgogICAgICBubyBibG9jayBpcyBzdGFydGVkIG9uIHRoYXQgbGluZS4gVGhpcyBmaWxlCiAgICAgIHByb3ZpZGVzIDxjb2RlPkNvZGVNaXJyb3IuYnJhY2VSYW5nZUZpbmRlcjwvY29kZT4sIHdoaWNoIGZpbmRzCiAgICAgIGJsb2NrcyBpbiBicmFjZSBsYW5ndWFnZXMgKEphdmFTY3JpcHQsIEMsIEphdmEsIGV0YykuPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX3J1bm1vZGUiPjxhIGhyZWY9Ii4uL2xpYi91dGlsL3J1bm1vZGUuanMiPjxjb2RlPnJ1bm1vZGUuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5DYW4gYmUgdXNlZCB0byBydW4gYSBDb2RlTWlycm9yIG1vZGUgb3ZlciB0ZXh0IHdpdGhvdXQKICAgICAgYWN0dWFsbHkgb3BlbmluZyBhbiBlZGl0b3IgaW5zdGFuY2UuCiAgICAgIFNlZSA8YSBocmVmPSIuLi9kZW1vL3J1bm1vZGUuaHRtbCI+dGhlIGRlbW88L2E+IGZvciBhbgogICAgICBleGFtcGxlLjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9zaW1wbGUtaGludCI+PGEgaHJlZj0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPjxjb2RlPnNpbXBsZS1oaW50LmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+UHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHNob3dpbmcgYXV0b2NvbXBsZXRpb24gaGludHMuCiAgICAgIERlZmluZXMgPGNvZGU+Q29kZU1pcnJvci5zaW1wbGVIaW50PC9jb2RlPiwgd2hpY2ggdGFrZXMgYQogICAgICBDb2RlTWlycm9yIGluc3RhbmNlIGFuZCBhIGhpbnRpbmcgZnVuY3Rpb24sIGFuZCBwb3BzIHVwIGEgd2lkZ2V0CiAgICAgIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBhIGNvbXBsZXRpb24uIEhpbnRpbmcgZnVuY3Rpb25zCiAgICAgIGFyZSBmdW5jdGlvbiB0aGF0IHRha2UgYW4gZWRpdG9yIGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgIGEgPGNvZGU+e2xpc3QsIGZyb20sIHRvfTwvY29kZT4gb2JqZWN0LCB3aGVyZSA8Y29kZT5saXN0PC9jb2RlPgogICAgICBpcyBhbiBhcnJheSBvZiBzdHJpbmdzICh0aGUgY29tcGxldGlvbnMpLCBhbmQgPGNvZGU+ZnJvbTwvY29kZT4KICAgICAgYW5kIDxjb2RlPnRvPC9jb2RlPiBnaXZlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB0b2tlbiB0aGF0IGlzCiAgICAgIGJlaW5nIGNvbXBsZXRlZC4gRGVwZW5kcwogICAgICBvbiA8Y29kZT5saWIvdXRpbC9zaW1wbGUtaGludC5jc3M8L2NvZGU+LjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9qYXZhc2NyaXB0LWhpbnQiPjxhIGhyZWY9Ii4uL2xpYi91dGlsL2phdmFzY3JpcHQtaGludC5qcyI+PGNvZGU+amF2YXNjcmlwdC1oaW50LmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+RGVmaW5lcyA8Y29kZT5Db2RlTWlycm9yLmphdmFTY3JpcHRIaW50PC9jb2RlPiwgd2hpY2ggaXMgYQogICAgICBzaW1wbGUgaGludGluZyBmdW5jdGlvbiBmb3IgdGhlIEphdmFTY3JpcHQgbW9kZS48L2RkPgogICAgPC9kbD4KCiAgICA8aDIgaWQ9Im1vZGVhcGkiPldyaXRpbmcgQ29kZU1pcnJvciBNb2RlczwvaDI+CgogICAgPHA+TW9kZXMgdHlwaWNhbGx5IGNvbnNpc3Qgb2YgYSBzaW5nbGUgSmF2YVNjcmlwdCBmaWxlLiBUaGlzIGZpbGUKICAgIGRlZmluZXMsIGluIHRoZSBzaW1wbGVzdCBjYXNlLCBhIGxleGVyICh0b2tlbml6ZXIpIGZvciB5b3VyCiAgICBsYW5ndWFnZeKAlGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIGNoYXJhY3RlciBzdHJlYW0gYXMgaW5wdXQsCiAgICBhZHZhbmNlcyBpdCBwYXN0IGEgdG9rZW4sIGFuZCByZXR1cm5zIGEgc3R5bGUgZm9yIHRoYXQgdG9rZW4uIE1vcmUKICAgIGFkdmFuY2VkIG1vZGVzIGNhbiBhbHNvIGhhbmRsZSBpbmRlbnRhdGlvbiBmb3IgdGhlIGxhbmd1YWdlLjwvcD4KCiAgICA8cCBpZD0iZGVmaW5lTW9kZSI+VGhlIG1vZGUgc2NyaXB0IHNob3VsZAogICAgY2FsbCA8Y29kZT5Db2RlTWlycm9yLmRlZmluZU1vZGU8L2NvZGU+IHRvIHJlZ2lzdGVyIGl0c2VsZiB3aXRoCiAgICBDb2RlTWlycm9yLiBUaGlzIGZ1bmN0aW9uIHRha2VzIHR3byBhcmd1bWVudHMuIFRoZSBmaXJzdCBzaG91bGQgYmUKICAgIHRoZSBuYW1lIG9mIHRoZSBtb2RlLCBmb3Igd2hpY2ggeW91IHNob3VsZCB1c2UgYSBsb3dlcmNhc2Ugc3RyaW5nLAogICAgcHJlZmVyYWJseSBvbmUgdGhhdCBpcyBhbHNvIHRoZSBuYW1lIG9mIHRoZSBmaWxlcyB0aGF0IGRlZmluZSB0aGUKICAgIG1vZGUgKGkuZS4gPGNvZGU+InhtbCI8L2NvZGU+IGlzIGRlZmluZWQgPGNvZGU+eG1sLmpzPC9jb2RlPikuIFRoZQogICAgc2Vjb25kIGFyZ3VtZW50IHNob3VsZCBiZSBhIGZ1bmN0aW9uIHRoYXQsIGdpdmVuIGEgQ29kZU1pcnJvcgogICAgY29uZmlndXJhdGlvbiBvYmplY3QgKHRoZSB0aGluZyBwYXNzZWQgdG8KICAgIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBmdW5jdGlvbikgYW5kIGFuIG9wdGlvbmFsIG1vZGUKICAgIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChhcyBpbgogICAgdGhlIDxhIGhyZWY9IiNvcHRpb25fbW9kZSI+PGNvZGU+bW9kZTwvY29kZT48L2E+IG9wdGlvbiksIHJldHVybnMKICAgIGEgbW9kZSBvYmplY3QuPC9wPgoKICAgIDxwPlR5cGljYWxseSwgeW91IHNob3VsZCB1c2UgdGhpcyBzZWNvbmQgYXJndW1lbnQKICAgIHRvIDxjb2RlPmRlZmluZU1vZGU8L2NvZGU+IGFzIHlvdXIgbW9kdWxlIHNjb3BlIGZ1bmN0aW9uIChtb2RlcwogICAgc2hvdWxkIG5vdCBsZWFrIGFueXRoaW5nIGludG8gdGhlIGdsb2JhbCBzY29wZSEpLCBpLmUuIHdyaXRlIHlvdXIKICAgIHdob2xlIG1vZGUgaW5zaWRlIHRoaXMgZnVuY3Rpb24uPC9wPgoKICAgIDxwPlRoZSBtYWluIHJlc3BvbnNpYmlsaXR5IG9mIGEgbW9kZSBzY3JpcHQgaXMgPGVtPnBhcnNpbmc8L2VtPgogICAgdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvci4gRGVwZW5kaW5nIG9uIHRoZSBsYW5ndWFnZSBhbmQgdGhlCiAgICBhbW91bnQgb2YgZnVuY3Rpb25hbGl0eSBkZXNpcmVkLCB0aGlzIGNhbiBiZSBkb25lIGluIHJlYWxseSBlYXN5CiAgICBvciBleHRyZW1lbHkgY29tcGxpY2F0ZWQgd2F5cy4gU29tZSBwYXJzZXJzIGNhbiBiZSBzdGF0ZWxlc3MsCiAgICBtZWFuaW5nIHRoYXQgdGhleSBsb29rIGF0IG9uZSBlbGVtZW50ICg8ZW0+dG9rZW48L2VtPikgb2YgdGhlIGNvZGUKICAgIGF0IGEgdGltZSwgd2l0aCBubyBtZW1vcnkgb2Ygd2hhdCBjYW1lIGJlZm9yZS4gTW9zdCwgaG93ZXZlciwgd2lsbAogICAgbmVlZCB0byByZW1lbWJlciBzb21ldGhpbmcuIFRoaXMgaXMgZG9uZSBieSB1c2luZyBhIDxlbT5zdGF0ZQogICAgb2JqZWN0PC9lbT4sIHdoaWNoIGlzIGFuIG9iamVjdCB0aGF0IGlzIGFsd2F5cyBwYXNzZWQgd2hlbgogICAgcmVhZGluZyBhIHRva2VuLCBhbmQgd2hpY2ggY2FuIGJlIG11dGF0ZWQgYnkgdGhlIHRva2VuaXplci48L3A+CgogICAgPHAgaWQ9InN0YXJ0U3RhdGUiPk1vZGVzIHRoYXQgdXNlIGEgc3RhdGUgbXVzdCBkZWZpbmUKICAgIGEgPGNvZGU+c3RhcnRTdGF0ZTwvY29kZT4gbWV0aG9kIG9uIHRoZWlyIG1vZGUgb2JqZWN0LiBUaGlzIGlzIGEKICAgIGZ1bmN0aW9uIG9mIG5vIGFyZ3VtZW50cyB0aGF0IHByb2R1Y2VzIGEgc3RhdGUgb2JqZWN0IHRvIGJlIHVzZWQKICAgIGF0IHRoZSBzdGFydCBvZiBhIGRvY3VtZW50LjwvcD4KCiAgICA8cCBpZD0idG9rZW4iPlRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IG9mIGEgbW9kZSBvYmplY3QgaXMKICAgIGl0cyA8Y29kZT50b2tlbihzdHJlYW0sIHN0YXRlKTwvY29kZT4gbWV0aG9kLiBBbGwgbW9kZXMgbXVzdAogICAgZGVmaW5lIHRoaXMgbWV0aG9kLiBJdCBzaG91bGQgcmVhZCBvbmUgdG9rZW4gZnJvbSB0aGUgc3RyZWFtIGl0IGlzCiAgICBnaXZlbiBhcyBhbiBhcmd1bWVudCwgb3B0aW9uYWxseSB1cGRhdGUgaXRzIHN0YXRlLCBhbmQgcmV0dXJuIGEKICAgIHN0eWxlIHN0cmluZywgb3IgPGNvZGU+bnVsbDwvY29kZT4gZm9yIHRva2VucyB0aGF0IGRvIG5vdCBoYXZlIHRvCiAgICBiZSBzdHlsZWQuIEZvciB5b3VyIHN0eWxlcywgeW91IGNhbiBlaXRoZXIgdXNlIHRoZSAnc3RhbmRhcmQnIG9uZXMKICAgIGRlZmluZWQgaW4gdGhlIHRoZW1lcyAod2l0aG91dCB0aGUgPGNvZGU+Y20tPC9jb2RlPiBwcmVmaXgpLCBvcgogICAgZGVmaW5lIHlvdXIgb3duIChhcyB0aGUgPGEgaHJlZj0iLi4vbW9kZS9kaWZmL2luZGV4Lmh0bWwiPmRpZmY8L2E+CiAgICBtb2RlIGRvZXMpIGFuZCBoYXZlIHBlb3BsZSBpbmNsdWRlIGEgY3VzdG9tIENTUyBmaWxlIGZvciB5b3VyCiAgICBtb2RlLjxwPgoKICAgIDxwIGlkPSJTdHJpbmdTdHJlYW0iPlRoZSBzdHJlYW0gb2JqZWN0IGVuY2Fwc3VsYXRlcyBhIGxpbmUgb2YgY29kZQogICAgKHRva2VucyBtYXkgbmV2ZXIgc3BhbiBsaW5lcykgYW5kIG91ciBjdXJyZW50IHBvc2l0aW9uIGluIHRoYXQKICAgIGxpbmUuIEl0IGhhcyB0aGUgZm9sbG93aW5nIEFQSTo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+ZW9sKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIGVuZCBvZiB0aGUKICAgICAgbGluZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+c29sKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZQogICAgICBsaW5lLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+cGVlaygpIOKGkiBjaGFyYWN0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBzdHJlYW0gd2l0aG91dCBhZHZhbmNpbmcKICAgICAgaXQuIFdpbGwgcmV0dXJuIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gYXQgdGhlIGVuZCBvZiB0aGUKICAgICAgbGluZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+bmV4dCgpIOKGkiBjaGFyYWN0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBzdHJlYW0gYW5kIGFkdmFuY2VzIGl0LgogICAgICBBbHNvIHJldHVybnMgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiB3aGVuIG5vIG1vcmUgY2hhcmFjdGVycyBhcmUKICAgICAgYXZhaWxhYmxlLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+ZWF0KG1hdGNoKSDihpIgY2hhcmFjdGVyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD48Y29kZT5tYXRjaDwvY29kZT4gY2FuIGJlIGEgY2hhcmFjdGVyLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwKICAgICAgb3IgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2hhcmFjdGVyIGFuZCByZXR1cm5zIGEgYm9vbGVhbi4gSWYKICAgICAgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBzdHJlYW0gJ21hdGNoZXMnIHRoZSBnaXZlbiBhcmd1bWVudCwKICAgICAgaXQgaXMgY29uc3VtZWQgYW5kIHJldHVybmVkLiBPdGhlcndpc2UsIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4KICAgICAgaXMgcmV0dXJuZWQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmVhdFdoaWxlKG1hdGNoKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVwZWF0ZWRseSBjYWxscyA8Y29kZT5lYXQ8L2NvZGU+IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50LAogICAgICB1bnRpbCBpdCBmYWlscy4gUmV0dXJucyB0cnVlIGlmIGFueSBjaGFyYWN0ZXJzIHdlcmUgZWF0ZW4uPC9kZD4KICAgICAgPGR0Pjxjb2RlPmVhdFNwYWNlKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlNob3J0Y3V0IGZvciA8Y29kZT5lYXRXaGlsZTwvY29kZT4gd2hlbiBtYXRjaGluZwogICAgICB3aGl0ZS1zcGFjZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+c2tpcFRvRW5kKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPk1vdmVzIHRoZSBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5za2lwVG8oY2gpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Ta2lwcyB0byB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiBjaGFyYWN0ZXIsIGlmCiAgICAgIGZvdW5kIG9uIHRoZSBjdXJyZW50IGxpbmUgKGRvZXNuJ3QgYWR2YW5jZSB0aGUgc3RyZWFtIGlmIHRoZQogICAgICBjaGFyYWN0ZXIgZG9lcyBub3Qgb2NjdXIgb24gdGhlIGxpbmUpLiBSZXR1cm5zIHRydWUgaWYgdGhlCiAgICAgIGNoYXJhY3RlciB3YXMgZm91bmQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPm1hdGNoKHBhdHRlcm4sIGNvbnN1bWUsIGNhc2VGb2xkKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+QWN0IGxpa2UgYQogICAgICBtdWx0aS1jaGFyYWN0ZXIgPGNvZGU+ZWF0PC9jb2RlPuKAlGlmIDxjb2RlPmNvbnN1bWU8L2NvZGU+IGlzIHRydWUKICAgICAgb3Igbm90IGdpdmVu4oCUb3IgYSBsb29rLWFoZWFkIHRoYXQgZG9lc24ndCB1cGRhdGUgdGhlIHN0cmVhbQogICAgICBwb3NpdGlvbuKAlGlmIGl0IGlzIGZhbHNlLiA8Y29kZT5wYXR0ZXJuPC9jb2RlPiBjYW4gYmUgZWl0aGVyIGEKICAgICAgc3RyaW5nIG9yIGEgcmVndWxhciBleHByZXNzaW9uIHN0YXJ0aW5nIHdpdGggPGNvZGU+XjwvY29kZT4uCiAgICAgIFdoZW4gaXQgaXMgYSBzdHJpbmcsIDxjb2RlPmNhc2VGb2xkPC9jb2RlPiBjYW4gYmUgc2V0IHRvIHRydWUgdG8KICAgICAgbWFrZSB0aGUgbWF0Y2ggY2FzZS1pbnNlbnNpdGl2ZS4gV2hlbiBzdWNjZXNzZnVsbHkgbWF0Y2hpbmcgYQogICAgICByZWd1bGFyIGV4cHJlc3Npb24sIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIHRoZSBhcnJheQogICAgICByZXR1cm5lZCBieSA8Y29kZT5tYXRjaDwvY29kZT4sIGluIGNhc2UgeW91IG5lZWQgdG8gZXh0cmFjdAogICAgICBtYXRjaGVkIGdyb3Vwcy48L2RkPgoKICAgICAgPGR0Pjxjb2RlPmJhY2tVcChuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+QmFja3MgdXAgdGhlIHN0cmVhbSA8Y29kZT5uPC9jb2RlPiBjaGFyYWN0ZXJzLiBCYWNraW5nIGl0IHVwCiAgICAgIGZ1cnRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgdG9rZW4gd2lsbCBjYXVzZSB0aGluZ3MgdG8KICAgICAgYnJlYWssIHNvIGJlIGNhcmVmdWwuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmNvbHVtbigpIOKGkiBpbnRlZ2VyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBjb2x1bW4gKHRha2luZyBpbnRvIGFjY291bnQgdGFicykgYXQgd2hpY2ggdGhlCiAgICAgIGN1cnJlbnQgdG9rZW4gc3RhcnRzLiBDYW4gYmUgdXNlZCB0byBmaW5kIG91dCB3aGV0aGVyIGEgdG9rZW4KICAgICAgc3RhcnRzIGEgbmV3IGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmluZGVudGF0aW9uKCkg4oaSIGludGVnZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRlbGxzIHlvdSBob3cgZmFyIHRoZSBjdXJyZW50IGxpbmUgaGFzIGJlZW4gaW5kZW50ZWQsIGluCiAgICAgIHNwYWNlcy4gQ29ycmVjdHMgZm9yIHRhYiBjaGFyYWN0ZXJzLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+Y3VycmVudCgpIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgc3RyaW5nIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHRva2VuIGFuZAogICAgICB0aGUgY3VycmVudCBzdHJlYW0gcG9zaXRpb24uPC9kZD4KICAgIDwvZGw+CgogICAgPHAgaWQ9ImJsYW5rTGluZSI+QnkgZGVmYXVsdCwgYmxhbmsgbGluZXMgYXJlIHNpbXBseSBza2lwcGVkIHdoZW4KICAgIHRva2VuaXppbmcgYSBkb2N1bWVudC4gRm9yIGxhbmd1YWdlcyB0aGF0IGhhdmUgc2lnbmlmaWNhbnQgYmxhbmsKICAgIGxpbmVzLCB5b3UgY2FuIGRlZmluZSBhIDxjb2RlPmJsYW5rTGluZShzdGF0ZSk8L2NvZGU+IG1ldGhvZCBvbgogICAgeW91ciBtb2RlIHRoYXQgd2lsbCBnZXQgY2FsbGVkIHdoZW5ldmVyIGEgYmxhbmsgbGluZSBpcyBwYXNzZWQKICAgIG92ZXIsIHNvIHRoYXQgaXQgY2FuIHVwZGF0ZSB0aGUgcGFyc2VyIHN0YXRlLjwvcD4KCiAgICA8cCBpZD0iY29weVN0YXRlIj5CZWNhdXNlIHN0YXRlIG9iamVjdCBhcmUgbXV0YXRlZCwgYW5kIENvZGVNaXJyb3IKICAgIG5lZWRzIHRvIGtlZXAgdmFsaWQgdmVyc2lvbnMgb2YgYSBzdGF0ZSBhcm91bmQgc28gdGhhdCBpdCBjYW4KICAgIHJlc3RhcnQgYSBwYXJzZSBhdCBhbnkgbGluZSwgY29waWVzIG11c3QgYmUgbWFkZSBvZiBzdGF0ZSBvYmplY3RzLgogICAgVGhlIGRlZmF1bHQgYWxnb3JpdGhtIHVzZWQgaXMgdGhhdCBhIG5ldyBzdGF0ZSBvYmplY3QgaXMgY3JlYXRlZCwKICAgIHdoaWNoIGdldHMgYWxsIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBvbGQgb2JqZWN0LiBBbnkgcHJvcGVydGllcwogICAgd2hpY2ggaG9sZCBhcnJheXMgZ2V0IGEgY29weSBvZiB0aGVzZSBhcnJheXMgKHNpbmNlIGFycmF5cyB0ZW5kIHRvCiAgICBiZSB1c2VkIGFzIG11dGFibGUgc3RhY2tzKS4gV2hlbiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBmb3IgZXhhbXBsZQogICAgYmVjYXVzZSBhIG1vZGUgbXV0YXRlcyBub24tYXJyYXkgcHJvcGVydGllcyBvZiBpdHMgc3RhdGUgb2JqZWN0LCBhCiAgICBtb2RlIG9iamVjdCBzaG91bGQgZGVmaW5lIGEgPGNvZGU+Y29weVN0YXRlPC9jb2RlPiBtZXRob2QsCiAgICB3aGljaCBpcyBnaXZlbiBhIHN0YXRlIGFuZCBzaG91bGQgcmV0dXJuIGEgc2FmZSBjb3B5IG9mIHRoYXQKICAgIHN0YXRlLjwvcD4KCiAgICA8cCBpZD0iY29tcGFyZVN0YXRlcyI+QnkgZGVmYXVsdCwgQ29kZU1pcnJvciB3aWxsIHN0b3AgcmUtcGFyc2luZwogICAgYSBkb2N1bWVudCBhcyBzb29uIGFzIGl0IGVuY291bnRlcnMgYSBmZXcgbGluZXMgdGhhdCB3ZXJlCiAgICBoaWdobGlnaHRlZCB0aGUgc2FtZSBpbiB0aGUgb2xkIHBhcnNlIGFzIGluIHRoZSBuZXcgb25lLiBJdCBpcwogICAgcG9zc2libGUgdG8gcHJvdmlkZSBhbiBleHBsaWNpdCB3YXkgdG8gdGVzdCB3aGV0aGVyIGEgc3RhdGUgaXMKICAgIGVxdWl2YWxlbnQgdG8gYW5vdGhlciBvbmUsIHdoaWNoIENvZGVNaXJyb3Igd2lsbCB1c2UgKGluc3RlYWQgb2YKICAgIHRoZSB1bmNoYW5nZWQtbGluZXMgaGV1cmlzdGljKSB0byBkZWNpZGUgd2hlbiB0byBzdG9wCiAgICBoaWdobGlnaHRpbmcuIFlvdSBkbyB0aGlzIGJ5IHByb3ZpZGluZwogICAgYSA8Y29kZT5jb21wYXJlU3RhdGVzPC9jb2RlPiBtZXRob2Qgb24geW91ciBtb2RlIG9iamVjdCwgd2hpY2gKICAgIHRha2VzIHR3byBzdGF0ZSBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlcgogICAgdGhleSBhcmUgZXF1aXZhbGVudC4gU2VlIHRoZSBYTUwgbW9kZSwgd2hpY2ggdXNlcyB0aGlzIHRvIHByb3ZpZGUKICAgIHJlbGlhYmxlIGhpZ2hsaWdodGluZyBvZiBiYWQgY2xvc2luZyB0YWdzLCBhcyBhbiBleGFtcGxlLjwvcD4KCiAgICA8cCBpZD0iaW5kZW50Ij5JZiB5b3Ugd2FudCB5b3VyIG1vZGUgdG8gcHJvdmlkZSBzbWFydCBpbmRlbnRhdGlvbgogICAgKHRob3VnaCB0aGUgPGEgaHJlZj0iI2luZGVudExpbmUiPjxjb2RlPmluZGVudExpbmU8L2NvZGU+PC9hPgogICAgbWV0aG9kIGFuZCB0aGUgPGNvZGU+aW5kZW50QXV0bzwvY29kZT4KICAgIGFuZCA8Y29kZT5uZXdsaW5lQW5kSW5kZW50PC9jb2RlPiBjb21tYW5kcywgd2hpY2gga2V5cyBjYW4gYmUKICAgIDxhIGhyZWY9IiNvcHRpb25fZXh0cmFLZXlzIj5ib3VuZDwvYT4gdG8pLCB5b3UgbXVzdCBkZWZpbmUKICAgIGFuIDxjb2RlPmluZGVudChzdGF0ZSwgdGV4dEFmdGVyKTwvY29kZT4gbWV0aG9kIG9uIHlvdXIgbW9kZQogICAgb2JqZWN0LjwvcD4KCiAgICA8cD5UaGUgaW5kZW50YXRpb24gbWV0aG9kIHNob3VsZCBpbnNwZWN0IHRoZSBnaXZlbiBzdGF0ZSBvYmplY3QsCiAgICBhbmQgb3B0aW9uYWxseSB0aGUgPGNvZGU+dGV4dEFmdGVyPC9jb2RlPiBzdHJpbmcsIHdoaWNoIGNvbnRhaW5zCiAgICB0aGUgdGV4dCBvbiB0aGUgbGluZSB0aGF0IGlzIGJlaW5nIGluZGVudGVkLCBhbmQgcmV0dXJuIGFuCiAgICBpbnRlZ2VyLCB0aGUgYW1vdW50IG9mIHNwYWNlcyB0byBpbmRlbnQuIEl0IHNob3VsZCB1c3VhbGx5IHRha2UKICAgIHRoZSA8YSBocmVmPSIjb3B0aW9uX2luZGVudFVuaXQiPjxjb2RlPmluZGVudFVuaXQ8L2NvZGU+PC9hPgogICAgb3B0aW9uIGludG8gYWNjb3VudC48L3A+CgogICAgPHAgaWQ9ImVsZWN0cmljQ2hhcnMiPkZpbmFsbHksIGEgbW9kZSBtYXkgZGVmaW5lCiAgICBhbiA8Y29kZT5lbGVjdHJpY0NoYXJzPC9jb2RlPiBwcm9wZXJ0eSwgd2hpY2ggc2hvdWxkIGhvbGQgYSBzdHJpbmcKICAgIGNvbnRhaW5pbmcgYWxsIHRoZSBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIHRyaWdnZXIgdGhlIGJlaGF2aW91cgogICAgZGVzY3JpYmVkIGZvcgogICAgdGhlIDxhIGhyZWY9IiNvcHRpb25fZWxlY3RyaWNDaGFycyI+PGNvZGU+ZWxlY3RyaWNDaGFyczwvY29kZT48L2E+CiAgICBvcHRpb24uPC9wPgoKICAgIDxwPlNvLCB0byBzdW1tYXJpemUsIGEgbW9kZSA8ZW0+bXVzdDwvZW0+IHByb3ZpZGUKICAgIGEgPGNvZGU+dG9rZW48L2NvZGU+IG1ldGhvZCwgYW5kIGl0IDxlbT5tYXk8L2VtPgogICAgcHJvdmlkZSA8Y29kZT5zdGFydFN0YXRlPC9jb2RlPiwgPGNvZGU+Y29weVN0YXRlPC9jb2RlPiwKICAgIDxjb2RlPmNvbXBhcmVTdGF0ZXM8L2NvZGU+LCBhbmQgPGNvZGU+aW5kZW50PC9jb2RlPiBtZXRob2RzLiBGb3IKICAgIGFuIGV4YW1wbGUgb2YgYSB0cml2aWFsIG1vZGUsIHNlZQogICAgdGhlIDxhIGhyZWY9Ii4uL21vZGUvZGlmZi9kaWZmLmpzIj5kaWZmIG1vZGU8L2E+LCBmb3IgYSBtb3JlIGludm9sdmVkCiAgICBleGFtcGxlLCBzZWUgdGhlIDxhIGhyZWY9Ii4uL21vZGUvY2xpa2UvY2xpa2UuanMiPkMtbGlrZQogICAgbW9kZTwvYT4uPC9wPgoKICAgIDxwPlNvbWV0aW1lcywgaXQgaXMgdXNlZnVsIGZvciBtb2RlcyB0byA8ZW0+bmVzdDwvZW0+4oCUdG8gaGF2ZSBvbmUKICAgIG1vZGUgZGVsZWdhdGUgd29yayB0byBhbm90aGVyIG1vZGUuIEFuIGV4YW1wbGUgb2YgdGhpcyBraW5kIG9mCiAgICBtb2RlIGlzIHRoZSA8YSBocmVmPSIuLi9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPm1peGVkLW1vZGUgSFRNTAogICAgbW9kZTwvYT4uIFRvIGltcGxlbWVudCBzdWNoIG5lc3RpbmcsIGl0IGlzIHVzdWFsbHkgbmVjZXNzYXJ5IHRvCiAgICBjcmVhdGUgbW9kZSBvYmplY3RzIGFuZCBjb3B5IHN0YXRlcyB5b3Vyc2VsZi4gVG8gY3JlYXRlIGEgbW9kZQogICAgb2JqZWN0LCB0aGVyZSBhcmUgPGNvZGU+Q29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsCiAgICBwYXJzZXJDb25maWcpPC9jb2RlPiwgd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgY29uZmlndXJhdGlvbgogICAgb2JqZWN0IGFzIHBhc3NlZCB0byB0aGUgbW9kZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgYW5kIHRoZSBzZWNvbmQKICAgIGFyZ3VtZW50IGlzIGEgbW9kZSBzcGVjaWZpY2F0aW9uIGFzIGluCiAgICB0aGUgPGEgaHJlZj0iI29wdGlvbl9tb2RlIj48Y29kZT5tb2RlPC9jb2RlPjwvYT4gb3B0aW9uLiBUbyBjb3B5IGEKICAgIHN0YXRlIG9iamVjdCwgY2FsbCA8Y29kZT5Db2RlTWlycm9yLmNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk8L2NvZGU+LAogICAgd2hlcmUgPGNvZGU+bW9kZTwvY29kZT4gaXMgdGhlIG1vZGUgdGhhdCBjcmVhdGVkIHRoZSBnaXZlbgogICAgc3RhdGUuPC9wPgoKICAgIDxwPlRvIG1ha2UgaW5kZW50YXRpb24gd29yayBwcm9wZXJseSBpbiBhIG5lc3RlZCBwYXJzZXIsIGl0IGlzCiAgICBhZHZpc2FibGUgdG8gZ2l2ZSB0aGUgPGNvZGU+c3RhcnRTdGF0ZTwvY29kZT4gbWV0aG9kIG9mIG1vZGVzIHRoYXQKICAgIGFyZSBpbnRlbmRlZCB0byBiZSBuZXN0ZWQgYW4gb3B0aW9uYWwgYXJndW1lbnQgdGhhdCBwcm92aWRlcyB0aGUKICAgIGJhc2UgaW5kZW50YXRpb24gZm9yIHRoZSBibG9jayBvZiBjb2RlLiBUaGUgSmF2YVNjcmlwdCBhbmQgQ1NTCiAgICBwYXJzZXIgZG8gdGhpcywgZm9yIGV4YW1wbGUsIHRvIGFsbG93IEphdmFTY3JpcHQgYW5kIENTUyBjb2RlCiAgICBpbnNpZGUgdGhlIG1peGVkLW1vZGUgSFRNTCBtb2RlIHRvIGJlIHByb3Blcmx5IGluZGVudGVkLjwvcD4KCiAgICA8cD5GaW5hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBhc3NvY2lhdGUgeW91ciBtb2RlLCBvciBhIGNlcnRhaW4KICAgIGNvbmZpZ3VyYXRpb24gb2YgeW91ciBtb2RlLCB3aXRoCiAgICBhIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTUlNRSI+TUlNRTwvYT4gdHlwZS4gRm9yCiAgICBleGFtcGxlLCB0aGUgSmF2YVNjcmlwdCBtb2RlIGFzc29jaWF0ZXMgaXRzZWxmCiAgICB3aXRoIDxjb2RlPnRleHQvamF2YXNjcmlwdDwvY29kZT4sIGFuZCBpdHMgSlNPTiB2YXJpYW50CiAgICB3aXRoIDxjb2RlPmFwcGxpY2F0aW9uL2pzb248L2NvZGU+LiBUbyBkbyB0aGlzLAogICAgY2FsbCA8Y29kZT5Db2RlTWlycm9yLmRlZmluZU1JTUUobWltZSwgbW9kZVNwZWMpPC9jb2RlPiwKICAgIHdoZXJlIDxjb2RlPm1vZGVTcGVjPC9jb2RlPiBjYW4gYmUgYSBzdHJpbmcgb3Igb2JqZWN0IHNwZWNpZnlpbmcgYQogICAgbW9kZSwgYXMgaW4gdGhlIDxhIGhyZWY9IiNvcHRpb25fbW9kZSI+PGNvZGU+bW9kZTwvY29kZT48L2E+CiAgICBvcHRpb24uPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0icmlnaHRzbWFsbCBibGsiPgoKICAgIDxoMj5Db250ZW50czwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI292ZXJ2aWV3Ij5PdmVydmlldzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3VzYWdlIj5CYXNpYyBVc2FnZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2NvbmZpZyI+Q29uZmlndXJhdGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3N0eWxpbmciPkN1c3RvbWl6ZWQgU3R5bGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2FwaSI+UHJvZ3JhbW1pbmcgQVBJPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjYWRkb25zIj5BZGQtb25zPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjbW9kZWFwaSI+V3JpdGluZyBDb2RlTWlycm9yIE1vZGVzPC9hPjwvbGk+CiAgICA8L3VsPgoKPC9kaXY+PC9kaXY+Cgo8ZGl2IHN0eWxlPSJoZWlnaHQ6IDJlbSI+Jm5ic3A7PC9kaXY+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/oldrelease.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImRvY3MuY3NzIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPgogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIE9sZCByZWxlYXNlIGhpc3RvcnkgKi8KCjwvcHJlPgogIDxwIGNsYXNzPSJyZWwiPjA3LTA2LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMS56aXAiPlZlcnNpb24gMi4xPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5BZGQKICBhIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl90aGVtZSI+dGhlbWU8L2E+IHN5c3RlbQogICg8YSBocmVmPSIuLi9kZW1vL3RoZW1lLmh0bWwiPmRlbW88L2E+KS4gTm90ZSB0aGF0IHRoaXMgaXMgbm90CiAgYmFja3dhcmRzLWNvbXBhdGlibGXigJR5b3UnbGwgaGF2ZSB0byB1cGRhdGUgeW91ciBzdHlsZXMgYW5kCiAgbW9kZXMhPC9wPgoKICA8cCBjbGFzcz0icmVsIj4wNy0wNi0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjAyLnppcCI+VmVyc2lvbiAyLjAyPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iLi4vbW9kZS9sdWEvaW5kZXguaHRtbCI+THVhIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+Rml4IHJldmVyc2Utc2VhcmNoaW5nIGZvciBhIHJlZ2V4cC48L2xpPgogICAgPGxpPkVtcHR5IGxpbmVzIGNhbiBubyBsb25nZXIgYnJlYWsgaGlnaGxpZ2h0aW5nLjwvbGk+CiAgICA8bGk+UmV3b3JrIHNjcm9sbGluZyBtb2RlbCAodGhlIG91dGVyIHdyYXBwZXIgbm8gbG9uZ2VyIGRvZXMgdGhlIHNjcm9sbGluZykuPC9saT4KICAgIDxsaT5Tb2x2ZSBob3Jpem9udGFsIGppdHRlcmluZyBvbiBsb25nIGxpbmVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Ii4uL2RlbW8vcnVubW9kZS5odG1sIj5ydW5tb2RlLmpzPC9hPi48L2xpPgogICAgPGxpPkltbWVkaWF0ZWx5IHJlLWhpZ2hsaWdodCB0ZXh0IHdoZW4gdHlwaW5nLjwvbGk+CiAgICA8bGk+Rml4IHByb2JsZW0gd2l0aCAnc3RpY2tpbmcnIGhvcml6b250YWwgc2Nyb2xsYmFyLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjYtMDUtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4wMS56aXAiPlZlcnNpb24gMi4wMTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Ii4uL21vZGUvc21hbGx0YWxrL2luZGV4Lmh0bWwiPlNtYWxsdGFsayBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Ii4uL21vZGUvcnN0L2luZGV4Lmh0bWwiPnJlU3RydWN0dXJlZFRleHQgbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSIuLi9tb2RlL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob24gbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSIuLi9tb2RlL3Bsc3FsL2luZGV4Lmh0bWwiPlBML1NRTCBtb2RlPC9hPi48L2xpPgogICAgPGxpPjxjb2RlPmNvb3Jkc0NoYXI8L2NvZGU+IG5vdyB3b3JrczwvbGk+CiAgICA8bGk+Rml4IGEgcHJvYmxlbSB3aGVyZSA8Y29kZT5vbkN1cnNvckFjdGl2aXR5PC9jb2RlPiBpbnRlcmZlcmVkIHdpdGggPGNvZGU+b25DaGFuZ2U8L2NvZGU+LjwvbGk+CiAgICA8bGk+Rml4IGEgbnVtYmVyIG9mIHNjcm9sbGluZyBhbmQgbW91c2UtY2xpY2stcG9zaXRpb24gZ2xpdGNoZXMuPC9saT4KICAgIDxsaT5QYXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFuZ2VkIGxpbmVzIHRvIDxjb2RlPm9uQ2hhbmdlPC9jb2RlPi48L2xpPgogICAgPGxpPlN1cHBvcnQgY21kLXVwL2Rvd24gb24gT1MgWC48L2xpPgogICAgPGxpPkFkZCB0cmlwbGUtY2xpY2sgbGluZSBzZWxlY3Rpb24uPC9saT4KICAgIDxsaT5Eb24ndCBoYW5kbGUgc2hpZnQgd2hlbiBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uIHRocm91Z2ggdGhlIEFQSS48L2xpPgogICAgPGxpPlN1cHBvcnQgPGNvZGU+Im5vY3Vyc29yIjwvY29kZT4gbW9kZSBmb3IgPGNvZGU+cmVhZE9ubHk8L2NvZGU+IG9wdGlvbi48L2xpPgogICAgPGxpPkFkZCBhbiA8Y29kZT5vbkhpZ2hsaWdodENvbXBsZXRlPC9jb2RlPiBvcHRpb24uPC9saT4KICAgIDxsaT5GaXggdGhlIGNvbnRleHQgbWVudSBmb3IgRmlyZWZveC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI4LTAzLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMC56aXAiPlZlcnNpb24gMi4wPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Db2RlTWlycm9yIDIgaXMgYSBjb21wbGV0ZSByZXdyaXRlIHRoYXQncwogIGZhc3Rlciwgc21hbGxlciwgc2ltcGxlciB0byB1c2UsIGFuZCBsZXNzIGRlcGVuZGVudCBvbiBicm93c2VyCiAgcXVpcmtzLiBTZWUgPGEgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPnRoaXM8L2E+CiAgYW5kIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yL2Jyb3dzZV90aHJlYWQvdGhyZWFkLzVhOGU4OTQwMjRhOWY1ODAiPnRoaXM8L2E+CiAgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9hPgoKICA8cCBjbGFzcz0icmVsIj4yOC0wMy0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0xLjAuemlwIj5WZXJzaW9uIDEuMDwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkZpeCBlcnJvciB3aGVuIGRlYnVnIGhpc3Rvcnkgb3ZlcmZsb3dzLjwvbGk+CiAgICA8bGk+UmVmaW5lIGhhbmRsaW5nIG9mIEMjIHZlcmJhdGltIHN0cmluZ3MuPC9saT4KICAgIDxsaT5GaXggc29tZSBpc3N1ZXMgd2l0aCBKYXZhU2NyaXB0IGluZGVudGF0aW9uLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjItMDItMjAxMTogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hcmlqbmgvY29kZW1pcnJvcjIvdHJlZS9iZXRhMiI+VmVyc2lvbiAyLjAgYmV0YSAyPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Tb21ld2hhdGUgbW9yZSBtYXR1cmUgQVBJLCBsb3RzIG9mIGJ1Z3Mgc2hha2VuIG91dC48L2E+CgogIDxwIGNsYXNzPSJyZWwiPjE3LTAyLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOTQuemlwIj5WZXJzaW9uIDAuOTQ8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT48Y29kZT50YWJNb2RlOiAic3BhY2VzIjwvY29kZT4gd2FzIG1vZGlmaWVkIHNsaWdodGx5IChub3cgaW5kZW50cyB3aGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCkuPC9saT4KICAgIDxsaT5GaXhlcyBhIGJ1ZyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBzZWxlY3Rpb24gY29kZSB0byBicmVhayBvbiBzb21lIElFIHZlcnNpb25zLjwvbGk+CiAgICA8bGk+RGlzYWJsaW5nIHNwZWxsLWNoZWNrIG9uIFdlYktpdCBicm93c2VycyBub3cgd29ya3MuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4wOC0wMi0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5WZXJzaW9uIDIuMCBiZXRhIDE8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkNvZGVNaXJyb3IgMiBpcyBhIGNvbXBsZXRlIHJld3JpdGUgb2YKICBDb2RlTWlycm9yLCBubyBsb25nZXIgZGVwZW5kaW5nIG9uIGFuIGVkaXRhYmxlIGZyYW1lLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MTktMDEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45My56aXAiPlZlcnNpb24gMC45MzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZGVkIGEgPGEgaHJlZj0iY29udHJpYi9yZWdleC9pbmRleC5odG1sIj5SZWd1bGFyIEV4cHJlc3Npb248L2E+IHBhcnNlci48L2xpPgogICAgPGxpPkZpeGVzIHRvIHRoZSBQSFAgcGFyc2VyLjwvbGk+CiAgICA8bGk+U3VwcG9ydCBmb3IgcmVndWxhciBleHByZXNzaW9uIGluIHNlYXJjaC9yZXBsYWNlLjwvbGk+CiAgICA8bGk+QWRkIDxjb2RlPnNhdmU8L2NvZGU+IG1ldGhvZCB0byBpbnN0YW5jZXMgY3JlYXRlZCB3aXRoIDxjb2RlPmZyb21UZXh0QXJlYTwvY29kZT4uPC9saT4KICAgIDxsaT5BZGQgc3VwcG9ydCBmb3IgTVMgVC1TUUwgaW4gdGhlIFNRTCBwYXJzZXIuPC9saT4KICAgIDxsaT5TdXBwb3J0IHVzZSBvZiBDU1MgY2xhc3NlcyBmb3IgaGlnaGxpZ2h0aW5nIGJyYWNrZXRzLjwvbGk+CiAgICA8bGk+Rml4IHlldCBhbm90aGVyIGhhbmcgd2l0aCBsaW5lLW51bWJlcmluZyBpbiBoaWRkZW4gZWRpdG9ycy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjE3LTEyLTIwMTA6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOTIuemlwIj5WZXJzaW9uIDAuOTI8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5NYWtlIENvZGVNaXJyb3Igd29yayBpbiBYSFRNTCBkb2N1bWVudHMuPC9saT4KICAgIDxsaT5GaXggYnVnIGluIGhhbmRsaW5nIG9mIGJhY2tzbGFzaGVzIGluIFB5dGhvbiBzdHJpbmdzLjwvbGk+CiAgICA8bGk+VGhlIDxjb2RlPnN0eWxlTnVtYmVyczwvY29kZT4gb3B0aW9uIGlzIG5vdyBvZmZpY2lhbGx5CiAgICBzdXBwb3J0ZWQgYW5kIGRvY3VtZW50ZWQuPC9saT4KICAgIDxsaT48Y29kZT5vbkxpbmVOdW1iZXJDbGljazwvY29kZT4gb3B0aW9uIGFkZGVkLjwvbGk+CiAgICA8bGk+TW9yZSBjb25zaXN0ZW50IG5hbWVzIDxjb2RlPm9uTG9hZDwvY29kZT4gYW5kCiAgICA8Y29kZT5vbkN1cnNvckFjdGl2aXR5PC9jb2RlPiBjYWxsYmFja3MuIE9sZCBuYW1lcyBzdGlsbCB3b3JrLCBidXQKICAgIGFyZSBkZXByZWNhdGVkLjwvbGk+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iY29udHJpYi9mcmVlbWFya2VyL2luZGV4Lmh0bWwiPkZyZWVtYXJrZXI8L2E+IG1vZGUuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4xMS0xMS0yMDEwOiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOTEuemlwIj5WZXJzaW9uIDAuOTE8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGRzIHN1cHBvcnQgZm9yIDxhIGhyZWY9ImNvbnRyaWIvamF2YSI+SmF2YTwvYT4uPC9saT4KICAgIDxsaT5TbWFsbCBhZGRpdGlvbnMgdG8gdGhlIDxhIGhyZWY9ImNvbnRyaWIvcGhwIj5QSFA8L2E+IGFuZCA8YSBocmVmPSJjb250cmliL3NxbCI+U1FMPC9hPiBwYXJzZXJzLjwvbGk+CiAgICA8bGk+V29yayBhcm91bmQgdmFyaW91cyA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc4MDYiPldlYmtpdDwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDc0Ij5pc3N1ZXM8L2E+LjwvbGk+CiAgICA8bGk+Rml4IDxjb2RlPnRvVGV4dEFyZWE8L2NvZGU+IHRvIHVwZGF0ZSB0aGUgY29kZSBpbiB0aGUgdGV4dGFyZWEuPC9saT4KICAgIDxsaT5BZGQgYSA8Y29kZT5ub1NjcmlwdENhY2hpbmc8L2NvZGU+IG9wdGlvbiAoaGFjayB0byBlYXNlIGRldmVsb3BtZW50KS48L2xpPgogICAgPGxpPk1ha2Ugc3ViLW1vZGVzIG9mIDxhIGhyZWY9Im1peGVkdGVzdC5odG1sIj5IVE1MIG1peGVkPC9hPiBtb2RlIGNvbmZpZ3VyYWJsZS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjAyLTEwLTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45LnppcCI+VmVyc2lvbiAwLjk8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgc3VwcG9ydCBmb3Igc2VhcmNoaW5nIGJhY2t3YXJkcy48L2xpPgogICAgPGxpPlRoZXJlIGFyZSBub3cgcGFyc2VycyBmb3IgPGEgaHJlZj0iY29udHJpYi9zY2hlbWUvaW5kZXguaHRtbCI+U2NoZW1lPC9hPiwgPGEgaHJlZj0iY29udHJpYi94cXVlcnkvaW5kZXguaHRtbCI+WFF1ZXJ5PC9hPiwgYW5kIDxhIGhyZWY9ImNvbnRyaWIvb21ldGEvaW5kZXguaHRtbCI+T21ldGFKUzwvYT4uPC9saT4KICAgIDxsaT5NYWtlcyA8Y29kZT5oZWlnaHQ6ICJkeW5hbWljIjwvY29kZT4gbW9yZSByb2J1c3QuPC9saT4KICAgIDxsaT5GaXhlcyBidWcgd2hlcmUgcGFzdGUgZGlkIG5vdCB3b3JrIG9uIE9TIFguPC9saT4KICAgIDxsaT5BZGQgYSA8Y29kZT5lbnRlck1vZGU8L2NvZGU+IGFuZCA8Y29kZT5lbGVjdHJpY0NoYXJzPC9jb2RlPiBvcHRpb25zIHRvIG1ha2UgaW5kZW50YXRpb24gZXZlbiBtb3JlIGN1c3RvbWl6YWJsZS48L2xpPgogICAgPGxpPkFkZCA8Y29kZT5maXJzdExpbmVOdW1iZXI8L2NvZGU+IG9wdGlvbi48L2xpPgogICAgPGxpPkZpeCBiYWQgaGFuZGxpbmcgb2YgPGNvZGU+QG1lZGlhPC9jb2RlPiBydWxlcyBieSB0aGUgQ1NTIHBhcnNlci48L2xpPgogICAgPGxpPlRha2UgYSBuZXcsIG1vcmUgcm9idXN0IGFwcHJvYWNoIHRvIHdvcmtpbmcgYXJvdW5kIHRoZSBpbnZpc2libGUtbGFzdC1saW5lIGJ1ZyBpbiBXZWJLaXQuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yMi0wNy0yMDEwOiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOC56aXAiPlZlcnNpb24gMC44PC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIGEgPGNvZGU+Y3Vyc29yQ29vcmRzPC9jb2RlPiBtZXRob2QgdG8gZmluZCB0aGUgc2NyZWVuCiAgICBjb29yZGluYXRlcyBvZiB0aGUgY3Vyc29yLjwvbGk+CiAgICA8bGk+QSBudW1iZXIgb2YgZml4ZXMgYW5kIHN1cHBvcnQgZm9yIG1vcmUgc3ludGF4IGluIHRoZSBQSFAgcGFyc2VyLjwvbGk+CiAgICA8bGk+Rml4IGluZGVudGF0aW9uIHByb2JsZW0gd2l0aCBKU09OLW1vZGUgSlMgcGFyc2VyIGluIFdlYmtpdC48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImNvbXByZXNzLmh0bWwiPm1pbmlmaWNhdGlvbjwvYT4gVUkuPC9saT4KICAgIDxsaT5TdXBwb3J0IGEgPGNvZGU+aGVpZ2h0OiBkeW5hbWljPC9jb2RlPiBtb2RlLCB3aGVyZSB0aGUgZWRpdG9yJ3MKICAgIGhlaWdodCB3aWxsIGFkanVzdCB0byB0aGUgc2l6ZSBvZiBpdHMgY29udGVudC48L2xpPgogICAgPGxpPkJldHRlciBzdXBwb3J0IGZvciBJTUUgaW5wdXQgbW9kZS48L2xpPgogICAgPGxpPkZpeCBKYXZhU2NyaXB0IHBhcnNlciBnZXR0aW5nIGNvbmZ1c2VkIHdoZW4gc2VlaW5nIGEgbm8tYXJndW1lbnQKICAgIGZ1bmN0aW9uIGNhbGwuPC9saT4KICAgIDxsaT5IYXZlIENTUyBwYXJzZXIgc2VlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc2VsZWN0b3JzIGFuZCBvdGhlcgogICAgaWRlbnRpZmllcnMuPC9saT4KICAgIDxsaT5GaXggc2Nyb2xsaW5nIGJ1ZyB3aGVuIHBhc3RpbmcgaW4gYSBob3Jpem9udGFsbHktc2Nyb2xsZWQKICAgIGVkaXRvci48L2xpPgogICAgPGxpPlN1cHBvcnQgPGNvZGU+dG9UZXh0QXJlYTwvY29kZT4gbWV0aG9kIGluIGluc3RhbmNlcyBjcmVhdGVkIHdpdGgKICAgIDxjb2RlPmZyb21UZXh0QXJlYTwvY29kZT4uPC9saT4KICAgIDxsaT5Xb3JrIGFyb3VuZCBuZXcgT3BlcmEgY3Vyc29yIGJ1ZyB0aGF0IGNhdXNlcyB0aGUgY3Vyc29yIHRvIGp1bXAKICAgIHdoZW4gcHJlc3NpbmcgYmFja3NwYWNlIGF0IHRoZSBlbmQgb2YgYSBsaW5lLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjctMDQtMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY3LnppcCI+VmVyc2lvbgogIDAuNjc8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPk1vcmUgY29uc2lzdGVudCBwYWdlLXVwL3BhZ2UtZG93biBiZWhhdmlvdXIKICBhY3Jvc3MgYnJvd3NlcnMuIEZpeCBzb21lIGlzc3VlcyB3aXRoIGhpZGRlbiBlZGl0b3JzIGxvb3BpbmcgZm9yZXZlcgogIHdoZW4gbGluZS1udW1iZXJzIHdlcmUgZW5hYmxlZC4gTWFrZSBQSFAgcGFyc2VyIHBhcnNlCiAgPGNvZGU+IlxcIjwvY29kZT4gY29ycmVjdGx5LiBIYXZlIDxjb2RlPmp1bXBUb0xpbmU8L2NvZGU+IHdvcmsgb24KICBsaW5lIGhhbmRsZXMsIGFuZCBhZGQgPGNvZGU+Y3Vyc29yTGluZTwvY29kZT4gZnVuY3Rpb24gdG8gZmV0Y2ggdGhlCiAgbGluZSBoYW5kbGUgd2hlcmUgdGhlIGN1cnNvciBjdXJyZW50bHkgaXMuIEFkZCBuZXcKICA8Y29kZT5zZXRTdHlsZXNoZWV0PC9jb2RlPiBmdW5jdGlvbiB0byBzd2l0Y2ggc3R5bGUtc2hlZXRzIGluIGEKICBydW5uaW5nIGVkaXRvci48L3A+CgogIDxwIGNsYXNzPSJyZWwiPjAxLTAzLTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42Ni56aXAiPlZlcnNpb24KICAwLjY2PC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5BZGRzIDxjb2RlPnJlbW92ZUxpbmU8L2NvZGU+IG1ldGhvZCB0byBBUEkuCiAgSW50cm9kdWNlcyB0aGUgPGEgaHJlZj0iY29udHJpYi9wbHNxbC9pbmRleC5odG1sIj5QTFNRTCBwYXJzZXI8L2E+LgogIE1hcmtzIFhNTCBlcnJvcnMgYnkgYWRkaW5nIChyYXRoZXIgdGhhbiByZXBsYWNpbmcpIGEgQ1NTIGNsYXNzLCBzbwogIHRoYXQgdGhleSBjYW4gYmUgZGlzYWJsZWQgYnkgbW9kaWZ5aW5nIHRoZWlyIHN0eWxlLiBGaXhlcyBzZXZlcmFsCiAgc2VsZWN0aW9uIGJ1Z3MsIGFuZCBhIG51bWJlciBvZiBzbWFsbCBnbGl0Y2hlcy48L3A+CgogIDxwIGNsYXNzPSJyZWwiPjEyLTExLTIwMDk6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42NS56aXAiPlZlcnNpb24KICAwLjY1PC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5BZGQgc3VwcG9ydCBmb3IgaGF2aW5nIGJvdGggbGluZS13cmFwcGluZyBhbmQKICBsaW5lLW51bWJlcnMgdHVybmVkIG9uLCBtYWtlIHBhcmVuLWhpZ2hsaWdodGluZyBzdHlsZSBjdXN0b21pc2FibGUKICAoPGNvZGU+bWFya1BhcmVuPC9jb2RlPiBhbmQgPGNvZGU+dW5tYXJrUGFyZW48L2NvZGU+IGNvbmZpZwogIG9wdGlvbnMpLCB3b3JrIGFyb3VuZCBhIHNlbGVjdGlvbiBidWcgdGhhdCBPcGVyYQogIDxlbT5yZTwvZW0+aW50cm9kdWNlZCBpbiB2ZXJzaW9uIDEwLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MjMtMTAtMjAwOTogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY0LnppcCI+VmVyc2lvbgogIDAuNjQ8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPlNvbHZlcyBzb21lIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZQogIHBhc3RlLWhhbmRsaW5nIGNoYW5nZXMgZnJvbSB0aGUgcHJldmlvdXMgcmVsZWFzZS4gQWRkcwogIDxjb2RlPnNldFNwZWxsY2hlY2s8L2NvZGU+LCA8Y29kZT5zZXRUZXh0V3JhcHBpbmc8L2NvZGU+LAogIDxjb2RlPnNldEluZGVudFVuaXQ8L2NvZGU+LCA8Y29kZT5zZXRVbmRvRGVwdGg8L2NvZGU+LAogIDxjb2RlPnNldFRhYk1vZGU8L2NvZGU+LCBhbmQgPGNvZGU+c2V0TGluZU51bWJlcnM8L2NvZGU+IHRvCiAgY3VzdG9taXNlIGEgcnVubmluZyBlZGl0b3IuIEludHJvZHVjZXMgYW4gPGEKICBocmVmPSJjb250cmliL3NxbC9pbmRleC5odG1sIj5TUUw8L2E+IHBhcnNlci4gRml4ZXMgYSBmZXcgc21hbGwKICBwcm9ibGVtcyBpbiB0aGUgPGEgaHJlZj0iY29udHJpYi9weXRob24vaW5kZXguaHRtbCI+UHl0aG9uPC9hPgogIHBhcnNlci4gQW5kLCBhcyB1c3VhbCwgYWRkIHdvcmthcm91bmRzIGZvciB2YXJpb3VzIG5ld2x5IGRpc2NvdmVyZWQKICBicm93c2VyIGluY29tcGF0aWJpbGl0aWVzLjwvcD4KCjxwIGNsYXNzPSJyZWwiPjxlbT4zMS0wOC0yMDA5PC9lbT46IDxhCmhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjMuemlwIj5WZXJzaW9uCjAuNjM8L2E+OjwvcD4KPHAgY2xhc3M9InJlbC1ub3RlIj4gT3ZlcmhhdWwgb2YgcGFzdGUtaGFuZGxpbmcgKGxlc3MgZnJhZ2lsZSksIGZpeGVzIGZvciBzZXZlcmFsCnNlcmlvdXMgSUU4IGlzc3VlcyAoY3Vyc29yIGp1bXBpbmcsIGVuZC1vZi1kb2N1bWVudCBidWdzKSBhbmQgYSBudW1iZXIKb2Ygc21hbGwgcHJvYmxlbXMuPC9wPgoKPHAgY2xhc3M9InJlbCI+PGVtPjMwLTA1LTIwMDk8L2VtPjogPGEKaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42Mi56aXAiPlZlcnNpb24KMC42MjwvYT46PC9wPgo8cCBjbGFzcz0icmVsLW5vdGUiPkludHJvZHVjZXMgPGEgaHJlZj0iY29udHJpYi9weXRob24vaW5kZXguaHRtbCI+UHl0aG9uPC9hPgphbmQgPGEgaHJlZj0iY29udHJpYi9sdWEvaW5kZXguaHRtbCI+THVhPC9hPiBwYXJzZXJzLiBBZGQKPGNvZGU+c2V0UGFyc2VyPC9jb2RlPiAob24tdGhlLWZseSBtb2RlIGNoYW5naW5nKSBhbmQKPGNvZGU+Y2xlYXJIaXN0b3J5PC9jb2RlPiBtZXRob2RzLiBNYWtlIHBhcnNpbmcgcGFzc2VzIHRpbWUtYmFzZWQKaW5zdGVhZCBvZiBsaW5lcy1iYXNlZCAoc2VlIHRoZSA8Y29kZT5wYXNzVGltZTwvY29kZT4gb3B0aW9uKS48L3A+Cgo8L2JvZHk+PC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/reporting.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJlcG9ydGluZyBCdWdzPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzdHlsZT5saSB7IG1hcmdpbi10b3A6IDFlbTsgfTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImJhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBSZXBvcnRpbmcgYnVncwogICBlZmZlY3RpdmVseSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImxlZnQiPgoKPHA+U28geW91IGZvdW5kIGEgcHJvYmxlbSBpbiBDb2RlTWlycm9yLiBCeSBhbGwgbWVhbnMsIHJlcG9ydCBpdCEgQnVnCnJlcG9ydHMgZnJvbSB1c2VycyBhcmUgdGhlIG1haW4gZHJpdmUgYmVoaW5kIGltcHJvdmVtZW50cyB0bwpDb2RlTWlycm9yLiBCdXQgZmlyc3QsIHBsZWFzZSByZWFkIG92ZXIgdGhlc2UgcG9pbnRzOjwvcD4KCjxvbD4KICA8bGk+Q29kZU1pcnJvciBpcyBtYWludGFpbmVkIGJ5IHZvbHVudGVlcnMuIFRoZXkgZG9uJ3Qgb3dlIHlvdQogIGFueXRoaW5nLCBzbyBiZSBwb2xpdGUuIFJlcG9ydHMgd2l0aCBhbiBpbmRpZ25hbnQgb3IgYmVsbGlnZXJlbnQKICB0b25lIHRlbmQgdG8gYmUgbW92ZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGlsZS48L2xpPgoKICA8bGk+SW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCA8c3Ryb25nPnRoZSBicm93c2VyIGluIHdoaWNoIHRoZQogIHByb2JsZW0gb2NjdXJyZWQ8L3N0cm9uZz4uIEV2ZW4gaWYgeW91IHRlc3RlZCBzZXZlcmFsIGJyb3dzZXJzLCBhbmQKICB0aGUgcHJvYmxlbSBvY2N1cnJlZCBpbiBhbGwgb2YgdGhlbSwgbWVudGlvbiB0aGlzIGZhY3QgaW4gdGhlIGJ1ZwogIHJlcG9ydC4gQWxzbyBpbmNsdWRlIGJyb3dzZXIgdmVyc2lvbiBudW1iZXJzIGFuZCB0aGUgb3BlcmF0aW5nCiAgc3lzdGVtIHRoYXQgeW91J3JlIG9uLjwvbGk+CgogIDxsaT5NZW50aW9uIHdoaWNoIHJlbGVhc2Ugb2YgQ29kZU1pcnJvciB5b3UncmUgdXNpbmcuIFByZWZlcmFibHksCiAgdHJ5IGFsc28gd2l0aCB0aGUgY3VycmVudCBkZXZlbG9wbWVudCBzbmFwc2hvdCwgdG8gZW5zdXJlIHRoZQogIHByb2JsZW0gaGFzIG5vdCBhbHJlYWR5IGJlZW4gZml4ZWQuPC9saT4KCiAgPGxpPk1lbnRpb24gdmVyeSBwcmVjaXNlbHkgd2hhdCB3ZW50IHdyb25nLiAiWCBpcyBicm9rZW4iIGlzIG5vdCBhCiAgZ29vZCBidWcgcmVwb3J0LiBXaGF0IGRpZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj8gV2hhdCBoYXBwZW5lZAogIGluc3RlYWQ/IERlc2NyaWJlIHRoZSBleGFjdCBzdGVwcyBhIG1haW50YWluZXIgaGFzIHRvIHRha2UgdG8gbWFrZQogIHRoZSBwcm9ibGVtIG9jY3VyLiBXZSBjYW4gbm90IGZpeCBzb21ldGhpbmcgdGhhdCB3ZSBjYW4gbm90CiAgb2JzZXJ2ZS48L2xpPgoKICA8bGk+SWYgdGhlIHByb2JsZW0gY2FuIG5vdCBiZSByZXByb2R1Y2VkIGluIGFueSBvZiB0aGUgZGVtb3MKICBpbmNsdWRlZCBpbiB0aGUgQ29kZU1pcnJvciBkaXN0cmlidXRpb24sIHBsZWFzZSBwcm92aWRlIGFuIEhUTUwKICBkb2N1bWVudCB0aGF0IGRlbW9uc3RyYXRlcyB0aGUgcHJvYmxlbS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgaXMKICB0byBnbyB0byA8YSBocmVmPSJodHRwOi8vanNiaW4uY29tL2lodW5pbi9lZGl0Ij5qc2Jpbi5jb208L2E+LCBlbnRlcgogIGl0IHRoZXJlLCBwcmVzcyBzYXZlLCBhbmQgaW5jbHVkZSB0aGUgcmVzdWx0aW5nIGxpbmsgaW4geW91ciBidWcKICByZXBvcnQuPC9saT4KPC9vbD4KCjwvZGl2PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/upgrade_v2.2.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVwZ3JhZGluZyB0byB2Mi4yPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIFVwZ3JhZGluZyB0byB2Mi4yCiAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImxlZnQiPgoKPHA+VGhlcmUgYXJlIGEgZmV3IHRoaW5ncyBpbiB0aGUgMi4yIHJlbGVhc2UgdGhhdCByZXF1aXJlIHNvbWUgY2FyZQp3aGVuIHVwZ3JhZGluZy48L3A+Cgo8aDI+Tm8gbW9yZSBkZWZhdWx0LmNzczwvaDI+Cgo8cD5UaGUgZGVmYXVsdCB0aGVtZSBpcyBub3cgaW5jbHVkZWQKaW4gPGEgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj48Y29kZT5jb2RlbWlycm9yLmNzczwvY29kZT48L2E+LCBzbwp5b3UgZG8gbm90IGhhdmUgdG8gaW5jbHVkZWQgaXQgc2VwYXJhdGVseSBhbnltb3JlLiAoSXQgd2FzIHRpbnksIHNvCmV2ZW4gaWYgeW91J3JlIG5vdCB1c2luZyBpdCwgdGhlIGV4dHJhIGRhdGEgb3ZlcmhlYWQgaXMgbmVnbGlnaWJsZS4pCgo8aDI+RGlmZmVyZW50IGtleSBjdXN0b21pemF0aW9uPC9oMj4KCjxwPkNvZGVNaXJyb3IgaGFzIG1vdmVkIHRvIGEgc3lzdGVtCndoZXJlIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9rZXlNYXAiPmtleW1hcHM8L2E+IGFyZSB1c2VkIHRvCmJpbmQgYmVoYXZpb3IgdG8ga2V5cy4gVGhpcyBtZWFucyA8YSBocmVmPSIuLi9kZW1vL2VtYWNzLmh0bWwiPmN1c3RvbQpiaW5kaW5nczwvYT4gYXJlIG5vdyBwb3NzaWJsZS48L3A+Cgo8cD5UaHJlZSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlZCBrZXkKYmVoYXZpb3IsIDxjb2RlPnRhYk1vZGU8L2NvZGU+LCA8Y29kZT5lbnRlck1vZGU8L2NvZGU+LAphbmQgPGNvZGU+c21hcnRIb21lPC9jb2RlPiwgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEluc3RlYWQsIHlvdSBjYW4KcHJvdmlkZSBjdXN0b20gYmluZGluZ3MgdG8gaW5mbHVlbmNlIHRoZSB3YXkgdGhlc2Uga2V5cyBhY3QuIFRoaXMgaXMKZG9uZSB0aHJvdWdoIHRoZQpuZXcgPGEgaHJlZj0ibWFudWFsLmh0bWwjb3B0aW9uX2V4dHJhS2V5cyI+PGNvZGU+ZXh0cmFLZXlzPC9jb2RlPjwvYT4Kb3B0aW9uLCB3aGljaCBjYW4gaG9sZCBhbiBvYmplY3QgbWFwcGluZyBrZXkgbmFtZXMgdG8gZnVuY3Rpb25hbGl0eS4gQQpzaW1wbGUgZXhhbXBsZSB3b3VsZCBiZTo8L3A+Cgo8cHJlPiAgZXh0cmFLZXlzOiB7CiAgICAiQ3RybC1TIjogZnVuY3Rpb24oaW5zdGFuY2UpIHsgc2F2ZVRleHQoaW5zdGFuY2UuZ2V0VmFsdWUoKSk7IH0sCiAgICAiQ3RybC0vIjogInVuZG8iCiAgfTwvcHJlPgoKPHA+S2V5cyBjYW4gYmUgbWFwcGVkIGVpdGhlciB0byBmdW5jdGlvbnMsIHdoaWNoIHdpbGwgYmUgZ2l2ZW4gdGhlCmVkaXRvciBpbnN0YW5jZSBhcyBhcmd1bWVudCwgb3IgdG8gc3RyaW5ncywgd2hpY2ggYXJlIG1hcHBlZCB0aHJvdWdoCmZ1bmN0aW9ucyB0aHJvdWdoIHRoZSA8Y29kZT5Db2RlTWlycm9yLmNvbW1hbmRzPC9jb2RlPiB0YWJsZSwgd2hpY2gKY29udGFpbnMgYWxsIHRoZSBidWlsdC1pbiBlZGl0aW5nIGNvbW1hbmRzLCBhbmQgY2FuIGJlIGluc3BlY3RlZCBhbmQKZXh0ZW5kZWQgYnkgZXh0ZXJuYWwgY29kZS48L3A+Cgo8cD5CeSBkZWZhdWx0LCB0aGUgPGNvZGU+SG9tZTwvY29kZT4ga2V5IGlzIGJvdW5kIHRvCnRoZSA8Y29kZT4iZ29MaW5lU3RhcnRTbWFydCI8L2NvZGU+IGNvbW1hbmQsIHdoaWNoIG1vdmVzIHRoZSBjdXJzb3IgdG8KdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBvbiB0aGUgbGluZS4gWW91IGNhbiBzZXQgZG8gdGhpcyB0bwptYWtlIGl0IGFsd2F5cyBnbyB0byB0aGUgdmVyeSBzdGFydCBpbnN0ZWFkOjwvcD4KCjxwcmU+ICBleHRyYUtleXM6IHsiSG9tZSI6ICJnb0xpbmVTdGFydCJ9PC9wcmU+Cgo8cD5TaW1pbGFybHksIDxjb2RlPkVudGVyPC9jb2RlPiBpcyBib3VuZAp0byA8Y29kZT4ibmV3TGluZUFuZEluZGVudCI8L2NvZGU+IGJ5IGRlZmF1bHQuIFlvdSBjYW4gYmluZCBpdCB0bwpzb21ldGhpbmcgZWxzZSB0byBnZXQgZGlmZmVyZW50IGJlaGF2aW9yLiBUbyBkaXNhYmxlIHNwZWNpYWwgaGFuZGxpbmcKY29tcGxldGVseSBhbmQgb25seSBnZXQgYSBuZXdsaW5lIGNoYXJhY3RlciBpbnNlcnRlZCwgeW91IGNhbiBiaW5kIGl0CnRvIDxjb2RlPmZhbHNlPC9jb2RlPjo8L3A+Cgo8cHJlPiAgZXh0cmFLZXlzOiB7IkVudGVyIjogZmFsc2V9PC9wcmU+Cgo8cD5UaGUgc2FtZSB3b3JrcyBmb3IgPGNvZGU+VGFiPC9jb2RlPi4gSWYgeW91IGRvbid0IHdhbnQgQ29kZU1pcnJvcgp0byBoYW5kbGUgaXQsIGJpbmQgaXQgdG8gPGNvZGU+ZmFsc2U8L2NvZGU+LiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMKdG8gaW5kZW50IHRoZSBjdXJyZW50IGxpbmUgbW9yZSAoPGNvZGU+ImluZGVudE1vcmUiPC9jb2RlPiBjb21tYW5kKSwKYW5kIGluZGVudCBpdCBsZXNzIHdoZW4gc2hpZnQgaXMgaGVsZCAoPGNvZGU+ImluZGVudExlc3MiPC9jb2RlPikuClRoZXJlIGFyZSBhbHNvIDxjb2RlPiJpbmRlbnRBdXRvIjwvY29kZT4gKHNtYXJ0IGluZGVudCkKYW5kIDxjb2RlPiJpbnNlcnRUYWIiPC9jb2RlPiBjb21tYW5kcyBwcm92aWRlZCBmb3IgYWx0ZXJuYXRlCmJlaGF2aW9ycy4gT3IgeW91IGNhbiB3cml0ZSB5b3VyIG93biBoYW5kbGVyIGZ1bmN0aW9uIHRvIGRvIHNvbWV0aGluZwpkaWZmZXJlbnQgYWx0b2dldGhlci48L3A+Cgo8aDI+VGFiczwvaDI+Cgo8cD5IYW5kbGluZyBvZiB0YWJzIGNoYW5nZWQgY29tcGxldGVseS4gVGhlIGRpc3BsYXkgd2lkdGggb2YgdGFicyBjYW4Kbm93IGJlIHNldCB3aXRoIHRoZSA8Y29kZT50YWJTaXplPC9jb2RlPiBvcHRpb24sIGFuZCB0YWJzIGNhbgpiZSA8YSBocmVmPSIuLi9kZW1vL3Zpc2libGV0YWJzLmh0bWwiPnN0eWxlZDwvYT4gYnkgc2V0dGluZyBDU1MgcnVsZXMKZm9yIHRoZSA8Y29kZT5jbS10YWI8L2NvZGU+IGNsYXNzLjwvcD4KCjxwPlRoZSBkZWZhdWx0IHdpZHRoIGZvciB0YWJzIGlzIG5vdyA0LCBhcyBvcHBvc2VkIHRvIHRoZSA4IHRoYXQgaXMKaGFyZC13aXJlZCBpbnRvIGJyb3dzZXJzLiBJZiB5b3UgYXJlIHJlbHlpbmcgb24gOC1zcGFjZSB0YWJzLCBtYWtlCnN1cmUgeW91IGV4cGxpY2l0bHkgc2V0IDxjb2RlPnRhYlNpemU6IDg8L2NvZGU+IGluIHlvdXIgb3B0aW9ucy48L3A+Cgo8L2Rpdj4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImRvYy9kb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvdXNlcl90aW1lbGluZS8yNDIyODMyODgucnNzIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIi8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImRvYy9iYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogSW4tYnJvd3NlciBjb2RlIGVkaXRpbmcKICAgbWFkZSBiZWFyYWJsZSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0IGJsayI+CgogIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAwIj5Db2RlTWlycm9yIGlzIGEgSmF2YVNjcmlwdCBsaWJyYXJ5IHRoYXQgY2FuCiAgYmUgdXNlZCB0byBjcmVhdGUgYSByZWxhdGl2ZWx5IHBsZWFzYW50IGVkaXRvciBpbnRlcmZhY2UgZm9yCiAgY29kZS1saWtlIGNvbnRlbnQgJiN4MjAxNTsgY29tcHV0ZXIgcHJvZ3JhbXMsIEhUTUwgbWFya3VwLCBhbmQKICBzaW1pbGFyLiBJZiBhIG1vZGUgaGFzIGJlZW4gd3JpdHRlbiBmb3IgdGhlIGxhbmd1YWdlIHlvdSBhcmUKICBlZGl0aW5nLCB0aGUgY29kZSB3aWxsIGJlIGNvbG91cmVkLCBhbmQgdGhlIGVkaXRvciB3aWxsIG9wdGlvbmFsbHkKICBoZWxwIHlvdSB3aXRoIGluZGVudGF0aW9uLjwvcD4KCiAgPHA+VGhpcyBpcyB0aGUgcHJvamVjdCBwYWdlIGZvciBDb2RlTWlycm9yIDIsIHRoZSBjdXJyZW50bHkgbW9yZQogIGFjdGl2ZWx5IGRldmVsb3BlZCwgYW5kIHJlY29tbWVuZGVkCiAgdmVyc2lvbi4gPGEgaHJlZj0iMS9pbmRleC5odG1sIj5Db2RlTWlycm9yIDE8L2E+IGlzIHN0aWxsIGF2YWlsYWJsZQogIGZyb20gaGVyZS48L3A+CgogIDxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0MSBibGsiPgoKICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDogMCI+U3VwcG9ydGVkIG1vZGVzOjwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9jbGlrZS9pbmRleC5odG1sIj5DLCBKYXZhLCBDIywgYW5kIHNpbWlsYXI8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvY2xvanVyZS9pbmRleC5odG1sIj5DbG9qdXJlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2NvZmZlZXNjcmlwdC9pbmRleC5odG1sIj5Db2ZmZWVTY3JpcHQ8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvY3NzL2luZGV4Lmh0bWwiPkNTUzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9kaWZmL2luZGV4Lmh0bWwiPmRpZmY8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvZ3Jvb3Z5L2luZGV4Lmh0bWwiPkdyb292eTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9oYXNrZWxsL2luZGV4Lmh0bWwiPkhhc2tlbGw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvaHRtbGVtYmVkZGVkL2luZGV4Lmh0bWwiPkhUTUwgZW1iZWRkZWQgc2NyaXB0czwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9odG1sbWl4ZWQvaW5kZXguaHRtbCI+SFRNTCBtaXhlZC1tb2RlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2phdmFzY3JpcHQvaW5kZXguaHRtbCI+SmF2YVNjcmlwdDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9qaW5qYTIvaW5kZXguaHRtbCI+SmluamEyPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2x1YS9pbmRleC5odG1sIj5MdWE8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvbWFya2Rvd24vaW5kZXguaHRtbCI+TWFya2Rvd248L2E+ICg8YSBocmVmPSJtb2RlL2dmbS9pbmRleC5odG1sIj5HaXRodWItZmxhdm91cjwvYT4pPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvbnRyaXBsZXMvaW5kZXguaHRtbCI+TlRyaXBsZXM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcGFzY2FsL2luZGV4Lmh0bWwiPlBhc2NhbDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9wZXJsL2luZGV4Lmh0bWwiPlBlcmw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcGhwL2luZGV4Lmh0bWwiPlBIUDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9wbHNxbC9pbmRleC5odG1sIj5QTC9TUUw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcHl0aG9uL2luZGV4Lmh0bWwiPlB5dGhvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9yL2luZGV4Lmh0bWwiPlI8L2E+PC9saT4KICAgICAgPGxpPlJQTSA8YSBocmVmPSJtb2RlL3JwbS9zcGVjL2luZGV4Lmh0bWwiPnNwZWM8L2E+IGFuZCA8YSBocmVmPSJtb2RlL3JwbS9jaGFuZ2VzL2luZGV4Lmh0bWwiPmNoYW5nZWxvZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9yc3QvaW5kZXguaHRtbCI+cmVTdHJ1Y3R1cmVkVGV4dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9ydWJ5L2luZGV4Lmh0bWwiPlJ1Ynk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcnVzdC9pbmRleC5odG1sIj5SdXN0PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3NjaGVtZS9pbmRleC5odG1sIj5TY2hlbWU8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc21hbGx0YWxrL2luZGV4Lmh0bWwiPlNtYWxsdGFsazwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9zcGFycWwvaW5kZXguaHRtbCI+U1BBUlFMPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3N0ZXgvaW5kZXguaHRtbCI+c1RlWCwgTGFUZVg8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdGlkZGx5d2lraS9pbmRleC5odG1sIj5UaWRkbHl3aWtpPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3ZlbG9jaXR5L2luZGV4Lmh0bWwiPlZlbG9jaXR5PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3htbC9pbmRleC5odG1sIj5YTUwvSFRNTDwvYT4gKDxhIGhyZWY9Im1vZGUveG1scHVyZS9pbmRleC5odG1sIj5hbHRlcm5hdGl2ZSBYTUw8L2E+KTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3lhbWwvaW5kZXguaHRtbCI+WUFNTDwvYT48L2xpPgogICAgPC91bD4KCiAgPC9kaXY+PGRpdiBjbGFzcz0ibGVmdDIgYmxrIj4KCiAgICA8aDIgc3R5bGU9Im1hcmdpbi10b3A6IDAiPlVzYWdlIGRlbW9zOjwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9jb21wbGV0ZS5odG1sIj5BdXRvY29tcGxldGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9tdXN0YWNoZS5odG1sIj5Nb2RlIG92ZXJsYXlzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3NlYXJjaC5odG1sIj5TZWFyY2gvcmVwbGFjZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9mb2xkaW5nLmh0bWwiPkNvZGUgZm9sZGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9wcmV2aWV3Lmh0bWwiPkhUTUwgZWRpdG9yIHdpdGggcHJldmlldzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9yZXNpemUuaHRtbCI+QXV0by1yZXNpemluZyBlZGl0b3I8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vbWFya2VyLmh0bWwiPlNldHRpbmcgYnJlYWtwb2ludHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vYWN0aXZlbGluZS5odG1sIj5IaWdobGlnaHRpbmcgdGhlIGN1cnJlbnQgbGluZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby90aGVtZS5odG1sIj5UaGVtaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3J1bm1vZGUuaHRtbCI+U3RhbmQtYWxvbmUgaGlnaGxpZ2h0aW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2Z1bGxzY3JlZW4uaHRtbCI+RnVsbC1zY3JlZW4gZWRpdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9jaGFuZ2Vtb2RlLmh0bWwiPk1vZGUgYXV0by1jaGFuZ2luZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby92aXNpYmxldGFicy5odG1sIj5WaXNpYmxlIHRhYnM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vZm9ybWF0dGluZy5odG1sIj5BdXRvZm9ybWF0dGluZyBvZiBjb2RlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2VtYWNzLmh0bWwiPkVtYWNzIGtleWJpbmRpbmdzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3ZpbS5odG1sIj5WaW0ga2V5YmluZGluZ3M8L2E+PC9saT4KICAgIDwvdWw+CgogICAgPGgyPlJlYWwtd29ybGQgdXNlczo8L2gyPgoKICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9qc2Jpbi5jb20iPmpzYmluLmNvbTwvYT4gKEpTIHBsYXlncm91bmQpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9idXp6YXJkLnVwcy5lZHUvIj5TYWdlIGRlbW88L2E+IChtYXRoIHN5c3RlbSk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5zb3VyY2VsYWlyLmNvbS8iPnNvdXJjZUxhaXI8L2E+IChvbmxpbmUgSURFKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZWxvcXVlbnRqYXZhc2NyaXB0Lm5ldC9jaGFwdGVyMS5odG1sIj5FbG9xdWVudCBKYXZhU2NyaXB0PC9hPiAoYm9vayk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cubWVyZ2VseS5jb20vIj5NZXJnZWx5PC9hPiAoaW50ZXJhY3RpdmUgZGlmZmluZyk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3BhcGVyanMub3JnLyI+UGFwZXIuanM8L2E+IChncmFwaGljcyBzY3JpcHRpbmcpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cud2VzY2hlbWUub3JnLyI+V2VTY2hlbWU8L2E+IChsZWFybmluZyB0b29sKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd2ViZ2xwbGF5Z3JvdW5kLm5ldC8iPldlYkdMIHBsYXlncm91bmQ8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9xbC5pby8iPnFsLmlvPC9hPiAoaHR0cCBBUEkgcXVlcnkgaGVscGVyKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZWxtLWxhbmcub3JnL0V4YW1wbGVzLmVsbSI+RWxtIGxhbmd1YWdlIGV4YW1wbGVzPC9hPjwvbGk+CiAgICAgPC91bD4KCiAgPC9kaXY+PC9kaXY+CgogIDxoMiBpZD0iY29kZSI+R2V0dGluZyB0aGUgY29kZTwvaDI+CgogIDxwPkFsbCBvZiBDb2RlTWlycm9yIGlzIHJlbGVhc2VkIHVuZGVyIGEgPGEKICBocmVmPSJMSUNFTlNFIj5NSVQtc3R5bGU8L2E+IGxpY2Vuc2UuIFRvIGdldCBpdCwgeW91IGNhbiBkb3dubG9hZAogIHRoZSA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci56aXAiPmxhdGVzdAogIHJlbGVhc2U8L2E+IG9yIHRoZSBjdXJyZW50IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3IyLWxhdGVzdC56aXAiPmRldmVsb3BtZW50CiAgc25hcHNob3Q8L2E+IGFzIHppcCBmaWxlcy4gVG8gY3JlYXRlIGEgY3VzdG9tIG1pbmlmaWVkIHNjcmlwdCBmaWxlLAogIHlvdSBjYW4gdXNlIHRoZSA8YSBocmVmPSJkb2MvY29tcHJlc3MuaHRtbCI+Y29tcHJlc3Npb24gQVBJPC9hPi48L3A+CgogIDxwPldlIHVzZSA8YSBocmVmPSJodHRwOi8vZ2l0LXNjbS5jb20vIj5naXQ8L2E+IGZvciB2ZXJzaW9uIGNvbnRyb2wuCiAgVGhlIG1haW4gcmVwb3NpdG9yeSBjYW4gYmUgZmV0Y2hlZCBpbiB0aGlzIHdheTo8L3A+CgogIDxwcmUgY2xhc3M9ImNvZGUiPmdpdCBjbG9uZSBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMjwvcHJlPgoKICA8cD5Db2RlTWlycm9yIGNhbiBhbHNvIGJlIGZvdW5kIG9uIEdpdEh1YiBhdCA8YQogIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIiPm1hcmlqbmgvQ29kZU1pcnJvcjI8L2E+LgogIElmIHlvdSBwbGFuIHRvIGhhY2sgb24gdGhlIGNvZGUgYW5kIGNvbnRyaWJ1dGUgcGF0Y2hlcywgdGhlIGJlc3Qgd2F5CiAgdG8gZG8gaXQgaXMgdG8gY3JlYXRlIGEgR2l0SHViIGZvcmssIGFuZCBzZW5kIHB1bGwgcmVxdWVzdHMuPC9wPgoKICA8aDIgaWQ9ImRvY3VtZW50aW9uIj5Eb2N1bWVudGF0aW9uPC9oMj4KCiAgPHA+VGhlIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCI+bWFudWFsPC9hPiBpcyB5b3VyIGZpcnN0IHN0b3AgZm9yCiAgbGVhcm5pbmcgaG93IHRvIHVzZSB0aGlzIGxpYnJhcnkuIEl0IHN0YXJ0cyB3aXRoIGEgcXVpY2sgZXhwbGFuYXRpb24KICBvZiBob3cgdG8gdXNlIHRoZSBlZGl0b3IsIGFuZCB0aGVuIGRlc2NyaWJlcyB0aGUgQVBJIGluIGRldGFpbC48L3A+CgogIDxwPkZvciB0aG9zZSB3aG8gd2FudCB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBjb2RlLCB0aGVyZSBpcwogIGFuIDxhIGhyZWY9ImRvYy9pbnRlcm5hbHMuaHRtbCI+b3ZlcnZpZXcgb2YgdGhlIGludGVybmFsczwvYT4gYXZhaWxhYmxlLgogIFRoZSA8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9tYXJpam5oL0NvZGVNaXJyb3IyIj5zb3VyY2UgY29kZTwvYT4KICBpdHNlbGYgaXMsIGZvciB0aGUgbW9zdCBwYXJ0LCBhbHNvIHdlbGwgY29tbWVudGVkLjwvcD4KCiAgPGgyIGlkPSJzdXBwb3J0Ij5TdXBwb3J0IGFuZCBidWcgcmVwb3J0czwvaDI+CgogIDxwPlRoZXJlIGlzCiAgYSA8YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvY29kZW1pcnJvciI+R29vZ2xlCiAgZ3JvdXA8L2E+IChhIHNvcnQgb2YgbWFpbGluZyBsaXN0L25ld3Nncm91cCB0aGluZykgZm9yIGRpc2N1c3Npb24KICBhbmQgbmV3cyByZWxhdGVkIHRvIENvZGVNaXJyb3IuIFdoZW4gcmVwb3J0aW5nIGEgYnVnLAogIDxhIGhyZWY9ImRvYy9yZXBvcnRpbmcuaHRtbCI+cmVhZCB0aGlzIGZpcnN0PC9hPi4gSWYgeW91IGhhdmUKICBhIDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tIj5naXRodWI8L2E+IGFjY291bnQsCiAgc2ltcGx5IDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIvaXNzdWVzIj5vcGVuCiAgYW4gaXNzdWUgdGhlcmU8L2E+LiBPdGhlcndpc2UsIHBvc3Qgc29tZXRoaW5nIHRvCiAgdGhlIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yIj5ncm91cDwvYT4sCiAgb3IgZS1tYWlsIG1lIGRpcmVjdGx5OiA8YSBocmVmPSJtYWlsdG86bWFyaWpuaEBnbWFpbC5jb20iPk1hcmlqbgogIEhhdmVyYmVrZTwvYT4uPC9wPgoKICA8aDIgaWQ9InN1cHBvcnRlZCI+U3VwcG9ydGVkIGJyb3dzZXJzPC9oMj4KCiAgPHA+VGhlIGZvbGxvd2luZyBicm93c2VycyBhcmUgYWJsZSB0byBydW4gQ29kZU1pcnJvcjo8L3A+CgogIDx1bD4KICAgIDxsaT5GaXJlZm94IDIgb3IgaGlnaGVyPC9saT4KICAgIDxsaT5DaHJvbWUsIGFueSB2ZXJzaW9uPC9saT4KICAgIDxsaT5TYWZhcmkgMyBvciBoaWdoZXI8L2xpPgogICAgPGxpPkludGVybmV0IEV4cGxvcmVyIDYgb3IgaGlnaGVyPC9saT4KICAgIDxsaT5PcGVyYSA5IG9yIGhpZ2hlciAod2l0aCBzb21lIGtleS1oYW5kbGluZyBwcm9ibGVtcyBvbiBPUyBYKTwvbGk+CiAgPC91bD4KCiAgPHA+SSBhbSBub3QgYWN0aXZlbHkgdGVzdGluZyBhZ2FpbnN0IGV2ZXJ5IG5ldyBicm93c2VyIHJlbGVhc2UsIGFuZAogIHZlbmRvcnMgaGF2ZSBhIGhhYml0IG9mIGludHJvZHVjaW5nIGJ1Z3MgYWxsIHRoZSB0aW1lLCBzbyBJIGFtCiAgcmVseWluZyBvbiB0aGUgY29tbXVuaXR5IHRvIHRlbGwgbWUgd2hlbiBzb21ldGhpbmcgYnJlYWtzLgogIFNlZSA8YSBocmVmPSIjc3VwcG9ydCI+aGVyZTwvYT4gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0CiAgbWUuPC9wPgoKICA8aDIgaWQ9ImNvbW1lcmNpYWwiPkNvbW1lcmNpYWwgc3VwcG9ydDwvaDI+CgogIDxwPkNvZGVNaXJyb3IgaXMgZGV2ZWxvcGVkIGFuZCBtYWludGFpbmVkIGJ5IG1lLCBNYXJpam4gSGF2ZXJiZWtlLAogIGluIG15IG93biB0aW1lLiBJZiB5b3VyIGNvbXBhbnkgaXMgZ2V0dGluZyB2YWx1ZSBvdXQgb2YgQ29kZU1pcnJvciwKICBwbGVhc2UgY29uc2lkZXIgcHVyY2hhc2luZyBhIHN1cHBvcnQgY29udHJhY3QuPC9wPgoKICA8dWw+CiAgICA8bGk+WW91J2xsIGJlIGZ1bmRpbmcgZnVydGhlciB3b3JrIG9uIENvZGVNaXJyb3IuPC9saT4KICAgIDxsaT5Zb3UgZW5zdXJlIHRoYXQgeW91IGdldCBhIHF1aWNrIHJlc3BvbnNlIHdoZW4geW91IGhhdmUgYQogICAgcHJvYmxlbSwgZXZlbiB3aGVuIEkgYW0gb3RoZXJ3aXNlIGJ1c3kuPC9saT4KICA8L3VsPgoKICA8cD5Db2RlTWlycm9yIHN1cHBvcnQgY29udHJhY3RzIGV4aXN0IGluIHR3bwogIGZvcm1z4oCUPHN0cm9uZz5iYXNpYzwvc3Ryb25nPiBhdCDigqwxMDAgcGVyIG1vbnRoLAogIGFuZCA8c3Ryb25nPnByZW1pdW08L3N0cm9uZz4gYXQg4oKsNTAwIHBlcgogIG1vbnRoLiA8YSBocmVmPSJtYWlsdG86bWFyaWpuaEBnbWFpbC5jb20iPkNvbnRhY3QgbWU8L2E+IGZvciBmdXJ0aGVyCiAgaW5mb3JtYXRpb24uPC9wPgoKPC9kaXY+Cgo8ZGl2IGNsYXNzPSJyaWdodCBibGsiPgoKICA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci56aXAiIGNsYXNzPSJkb3dubG9hZCI+RG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlPC9hPgoKICA8aDI+U3VwcG9ydCBDb2RlTWlycm9yPC9oMj4KCiAgPHVsPgogICAgPGxpPkRvbmF0ZQogICAgKDxzcGFuIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXlwYWwnKS5zdWJtaXQoKTsiCiAgICBjbGFzcz0icXVhc2lsaW5rIj5QYXlwYWw8L3NwYW4+CiAgICBvciA8c3BhbiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFua2luZm8nKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsiCiAgICAgICAgICAgICBjbGFzcz0icXVhc2lsaW5rIj5iYW5rPC9zcGFuPik8L2xpPgogICAgPGxpPlB1cmNoYXNlIDxhIGhyZWY9IiNjb21tZXJjaWFsIj5jb21tZXJjaWFsIHN1cHBvcnQ8L2E+PC9saT4KICA8L3VsPgoKICA8cCBpZD0iYmFua2luZm8iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CiAgICBCYW5rOiA8aT5SYWJvYmFuazwvaT48YnIvPgogICAgQ291bnRyeTogPGk+TmV0aGVybGFuZHM8L2k+PGJyLz4KICAgIFNXSUZUOiA8aT5SQUJPTkwyVTwvaT48YnIvPgogICAgQWNjb3VudDogPGk+MTQ3ODUwNzcwPC9pPjxici8+CiAgICBOYW1lOiA8aT5NYXJpam4gSGF2ZXJiZWtlPC9pPjxici8+CiAgICBJQkFOOiA8aT5OTDI2IFJBQk8gMDE0NyA4NTA3IDcwPC9pPgogIDwvcD4KCiAgPGgyPlJlbGVhc2VzOjwvaDI+CgogIDxwIGNsYXNzPSJyZWwiPjIwLTEyLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMi56aXAiPlZlcnNpb24gMi4yPC9hPjo8L3A+CgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPlNsaWdodGx5IGluY29tcGF0aWJsZSBBUEkgY2hhbmdlcy4gUmVhZCA8YSBocmVmPSJkb2MvdXBncmFkZV92Mi4yLmh0bWwiPnRoaXM8L2E+LjwvbGk+CiAgICA8bGk+TmV3IGFwcHJvYWNoCiAgICB0byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2V4dHJhS2V5cyI+YmluZGluZzwvYT4ga2V5cywKICAgIHN1cHBvcnQgZm9yIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fa2V5TWFwIj5jdXN0b20KICAgIGJpbmRpbmdzPC9hPi48L2xpPgogICAgPGxpPlN1cHBvcnQgZm9yIG92ZXJ3cml0ZSAoaW5zZXJ0KS48L2xpPgogICAgPGxpPjxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fdGFiU2l6ZSI+Q3VzdG9tLXdpZHRoPC9hPgogICAgYW5kIDxhIGhyZWY9ImRlbW8vdmlzaWJsZXRhYnMuaHRtbCI+c3R5bGFibGU8L2E+IHRhYnMuPC9saT4KICAgIDxsaT5Nb3ZlZCBtb3JlIGNvZGUgaW50byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjYWRkb25zIj5hZGQtb24gc2NyaXB0czwvYT4uPC9saT4KICAgIDxsaT5TdXBwb3J0IGZvciBzYW5lIHZlcnRpY2FsIGN1cnNvciBtb3ZlbWVudCBpbiB3cmFwcGVkIGxpbmVzLjwvbGk+CiAgICA8bGk+TW9yZSByZWxpYWJsZSBoYW5kbGluZyBvZgogICAgZWRpdGluZyA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjbWFya1RleHQiPm1hcmtlZCB0ZXh0PC9hPi48L2xpPgogICAgPGxpPkFkZCBtaW5pbWFsIDxhIGhyZWY9ImRlbW8vZW1hY3MuaHRtbCI+ZW1hY3M8L2E+CiAgICBhbmQgPGEgaHJlZj0iZGVtby92aW0uaHRtbCI+dmltPC9hPiBiaW5kaW5ncy48L2xpPgogICAgPGxpPlJlbmFtZSA8Y29kZT5jb29yZHNGcm9tSW5kZXg8L2NvZGU+CiAgICB0byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjcG9zRnJvbUluZGV4Ij48Y29kZT5wb3NGcm9tSW5kZXg8L2NvZGU+PC9hPiwKICAgIGFkZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjaW5kZXhGcm9tUG9zIj48Y29kZT5pbmRleEZyb21Qb3M8L2NvZGU+PC9hPgogICAgbWV0aG9kLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjEtMTEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xOC56aXAiPlZlcnNpb24gMi4xODwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+Rml4ZXMgPGNvZGU+VGV4dE1hcmtlci5jbGVhcjwvY29kZT4sIHdoaWNoIGlzIGJyb2tlbiBpbiAyLjE3LjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MjEtMTEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xNy56aXAiPlZlcnNpb24gMi4xNzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2xpbmVXcmFwcGluZyI+bGluZQogICAgd3JhcHBpbmc8L2E+IGFuZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjaGlkZUxpbmUiPmNvZGUKICAgIGZvbGRpbmc8L2E+LjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1vZGUvZ2ZtL2luZGV4Lmh0bWwiPkdpdGh1Yi1zdHlsZSBNYXJrZG93bjwvYT4gbW9kZS48L2xpPgogICAgPGxpPkFkZCA8YSBocmVmPSJ0aGVtZS9tb25va2FpLmNzcyI+TW9ub2thaTwvYT4KICAgIGFuZCA8YSBocmVmPSJ0aGVtZS9ydWJ5Ymx1ZS5jc3MiPlJ1YnlibHVlPC9hPiB0aGVtZXMuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI3NldEJvb2ttYXJrIj48Y29kZT5zZXRCb29rbWFyazwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogICAgPGxpPk1vdmUgc29tZSBvZiB0aGUgZGVtbyBjb2RlIGludG8gcmV1c2FibGUgY29tcG9uZW50cwogICAgdW5kZXIgPGEgaHJlZj0ibGliL3V0aWwvIj48Y29kZT5saWIvdXRpbDwvY29kZT48L2E+LjwvbGk+CiAgICA8bGk+TWFrZSBzY3JlZW4tY29vcmQtZmluZGluZyBjb2RlIGZhc3RlciBhbmQgbW9yZSByZWxpYWJsZS48L2xpPgogICAgPGxpPkZpeCBkcmFnLWFuZC1kcm9wIGluIEZpcmVmb3guPC9saT4KICAgIDxsaT5JbXByb3ZlIHN1cHBvcnQgZm9yIElNRS48L2xpPgogICAgPGxpPlNwZWVkIHVwIGNvbnRlbnQgcmVuZGVyaW5nLjwvbGk+CiAgICA8bGk+Rml4IGJyb3dzZXIncyBidWlsdC1pbiBzZWFyY2ggaW4gV2Via2l0LjwvbGk+CiAgICA8bGk+TWFrZSBkb3VibGUtIGFuZCB0cmlwbGUtY2xpY2sgd29yayBpbiBJRS48L2xpPgogICAgPGxpPlZhcmlvdXMgZml4ZXMgdG8gbW9kZXMuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yNy0xMC0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjE2LnppcCI+VmVyc2lvbiAyLjE2PC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1vZGUvcGVybC9pbmRleC5odG1sIj5QZXJsPC9hPiwgPGEgaHJlZj0ibW9kZS9ydXN0L2luZGV4Lmh0bWwiPlJ1c3Q8L2E+LCA8YSBocmVmPSJtb2RlL3RpZGRseXdpa2kvaW5kZXguaHRtbCI+VGlkZGx5V2lraTwvYT4sIGFuZCA8YSBocmVmPSJtb2RlL2dyb292eS9pbmRleC5odG1sIj5Hcm9vdnk8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+RHJhZ2dpbmcgdGV4dCBpbnNpZGUgdGhlIGVkaXRvciBub3cgbW92ZXMsIHJhdGhlciB0aGFuIGNvcGllcy48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNjb29yZHNGcm9tSW5kZXgiPjxjb2RlPmNvb3Jkc0Zyb21JbmRleDwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogICAgPGxpPjxzdHJvbmc+QVBJIGNoYW5nZTwvc3Ryb25nPjogPGNvZGU+c2V0VmFsdWU8L2NvZGU+IG5vdyBubyBsb25nZXIgY2xlYXJzIGhpc3RvcnkuIFVzZSA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjY2xlYXJIaXN0b3J5Ij48Y29kZT5jbGVhckhpc3Rvcnk8L2NvZGU+PC9hPiBmb3IgdGhhdC48L2xpPgogICAgPGxpPjxzdHJvbmc+QVBJIGNoYW5nZTwvc3Ryb25nPjogPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI21hcmtUZXh0Ij48Y29kZT5tYXJrVGV4dDwvY29kZT48L2E+IG5vdwogICAgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCA8Y29kZT5jbGVhcjwvY29kZT4gYW5kIDxjb2RlPmZpbmQ8L2NvZGU+CiAgICBtZXRob2RzLiBNYXJrZWQgdGV4dCBpcyBub3cgbW9yZSByb2J1c3Qgd2hlbiBlZGl0ZWQuPC9saT4KICAgIDxsaT5GaXggZWRpdGluZyBjb2RlIHdpdGggdGFicyBpbiBJbnRlcm5ldCBFeHBsb3Jlci48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI2LTA5LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTUuemlwIj5WZXJzaW9uIDIuMTU8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkZpeCBidWcgdGhhdCBzbnVjayBpbnRvIDIuMTQ6IENsaWNraW5nIHRoZQogIGNoYXJhY3RlciB0aGF0IGN1cnJlbnRseSBoYXMgdGhlIGN1cnNvciBkaWRuJ3QgcmUtZm9jdXMgdGhlCiAgZWRpdG9yLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MjYtMDktMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xNC56aXAiPlZlcnNpb24gMi4xNDwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCA8YSBocmVmPSJtb2RlL2Nsb2p1cmUvaW5kZXguaHRtbCI+Q2xvanVyZTwvYT4sIDxhIGhyZWY9Im1vZGUvcGFzY2FsL2luZGV4Lmh0bWwiPlBhc2NhbDwvYT4sIDxhIGhyZWY9Im1vZGUvbnRyaXBsZXMvaW5kZXguaHRtbCI+TlRyaXBsZXM8L2E+LCA8YSBocmVmPSJtb2RlL2ppbmphMi9pbmRleC5odG1sIj5KaW5qYTI8L2E+LCBhbmQgPGEgaHJlZj0ibW9kZS9tYXJrZG93bi9pbmRleC5odG1sIj5NYXJrZG93bjwvYT4gbW9kZXMuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0idGhlbWUvY29iYWx0LmNzcyI+Q29iYWx0PC9hPiBhbmQgPGEgaHJlZj0idGhlbWUvZWNsaXBzZS5jc3MiPkVjbGlwc2U8L2E+IHRoZW1lcy48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fZml4ZWRHdXR0ZXIiPjxjb2RlPmZpeGVkR3V0dGVyPC9jb2RlPjwvYT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+Rml4IGJ1ZyB3aXRoIDxjb2RlPnNldFZhbHVlPC9jb2RlPiBicmVha2luZyBjdXJzb3IgbW92ZW1lbnQuPC9saT4KICAgIDxsaT5NYWtlIGd1dHRlciB1cGRhdGVzIG11Y2ggbW9yZSBlZmZpY2llbnQuPC9saT4KICAgIDxsaT5BbGxvdyBkcmFnZ2luZyBvZiB0ZXh0IG91dCBvZiB0aGUgZWRpdG9yIChvbiBtb2Rlcm4gYnJvd3NlcnMpLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjMtMDgtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xMy56aXAiPlZlcnNpb24gMi4xMzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCA8YSBocmVmPSJtb2RlL3J1YnkvaW5kZXguaHRtbCI+UnVieTwvYT4sIDxhIGhyZWY9Im1vZGUvci9pbmRleC5odG1sIj5SPC9hPiwgPGEgaHJlZj0ibW9kZS9jb2ZmZWVzY3JpcHQvaW5kZXguaHRtbCI+Q29mZmVlU2NyaXB0PC9hPiwgYW5kIDxhIGhyZWY9Im1vZGUvdmVsb2NpdHkvaW5kZXguaHRtbCI+VmVsb2NpdHk8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNnZXRHdXR0ZXJFbGVtZW50Ij48Y29kZT5nZXRHdXR0ZXJFbGVtZW50PC9jb2RlPjwvYT4gdG8gQVBJLjwvbGk+CiAgICA8bGk+U2V2ZXJhbCBmaXhlcyB0byBzY3JvbGxpbmcgYW5kIHBvc2l0aW9uaW5nLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fc21hcnRIb21lIj48Y29kZT5zbWFydEhvbWU8L2NvZGU+PC9hPiBvcHRpb24uPC9saT4KICAgIDxsaT5BZGQgYW4gZXhwZXJpbWVudGFsIDxhIGhyZWY9Im1vZGUveG1scHVyZS9pbmRleC5odG1sIj5wdXJlIFhNTDwvYT4gbW9kZS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI1LTA3LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTIuemlwIj5WZXJzaW9uIDIuMTI8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtb2RlL3NwYXJxbC9pbmRleC5odG1sIj5TUEFSUUw8L2E+IG1vZGUuPC9saT4KICAgIDxsaT5GaXggYnVnIHdpdGggY3Vyc29yIGp1bXBpbmcgYXJvdW5kIGluIGFuIHVuZm9jdXNlZCBlZGl0b3IgaW4gSUUuPC9saT4KICAgIDxsaT5BbGxvdyBrZXkgYW5kIG1vdXNlIGV2ZW50cyB0byBidWJibGUgb3V0IG9mIHRoZSBlZGl0b3IuIElnbm9yZSB3aWRnZXQgY2xpY2tzLjwvbGk+CiAgICA8bGk+U29sdmUgY3Vyc29yIGZsYWtpbmVzcyBhZnRlciB1bmRvL3JlZG8uPC9saT4KICAgIDxsaT5GaXggYmxvY2stcmVpbmRlbnQgaWdub3JpbmcgdGhlIGxhc3QgZmV3IGxpbmVzLjwvbGk+CiAgICA8bGk+Rml4IHBhcnNpbmcgb2YgbXVsdGktbGluZSBhdHRycyBpbiBYTUwgbW9kZS48L2xpPgogICAgPGxpPlVzZSA8Y29kZT5pbm5lckhUTUw8L2NvZGU+IGZvciBIVE1MLWVzY2FwaW5nLjwvbGk+CiAgICA8bGk+U29tZSBmaXhlcyB0byBpbmRlbnRhdGlvbiBpbiBDLWxpa2UgbW9kZS48L2xpPgogICAgPGxpPlNocmluayBob3JpeiBzY3JvbGxiYXJzIHdoZW4gbG9uZyBsaW5lcyByZW1vdmVkLjwvbGk+CiAgICA8bGk+Rml4IHdpZHRoIGZlZWRiYWNrIGxvb3AgYnVnIHRoYXQgY2F1c2VkIHRoZSB3aWR0aCBvZiBhbiBpbm5lciBESVYgdG8gc2hyaW5rLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MDQtMDctMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xMS56aXAiPlZlcnNpb24gMi4xMTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Im1vZGUvc2NoZW1lL2luZGV4Lmh0bWwiPlNjaGVtZSBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIDxjb2RlPnJlcGxhY2U8L2NvZGU+IG1ldGhvZCB0byBzZWFyY2ggY3Vyc29ycywgZm9yIGN1cnNvci1wcmVzZXJ2aW5nIHJlcGxhY2VtZW50cy48L2xpPgogICAgPGxpPk1ha2UgdGhlIDxhIGhyZWY9Im1vZGUvY2xpa2UvaW5kZXguaHRtbCI+Qy1saWtlIG1vZGU8L2E+IG1vZGUgbW9yZSBjdXN0b21pemVhYmxlLjwvbGk+CiAgICA8bGk+VXBkYXRlIFhNTCBtb2RlIHRvIHNwb3QgbWlzbWF0Y2hlZCB0YWdzLjwvbGk+CiAgICA8bGk+QWRkIDxjb2RlPmdldFN0YXRlQWZ0ZXI8L2NvZGU+IEFQSSBhbmQgPGNvZGU+Y29tcGFyZVN0YXRlPC9jb2RlPiBtb2RlIEFQSSBtZXRob2RzIGZvciBmaW5lci1ncmFpbmVkIG1vZGUgbWFnaWMuPC9saT4KICAgIDxsaT5BZGQgYSA8Y29kZT5nZXRTY3JvbGxlckVsZW1lbnQ8L2NvZGU+IEFQSSBtZXRob2QgdG8gbWFuaXB1bGF0ZSB0aGUgc2Nyb2xsaW5nIERJVi48L2xpPgogICAgPGxpPkZpeCBkcmFnLWFuZC1kcm9wIGZvciBGaXJlZm94LjwvbGk+CiAgICA8bGk+QWRkIGEgQyMgY29uZmlndXJhdGlvbiBmb3IgdGhlIDxhIGhyZWY9Im1vZGUvY2xpa2UvaW5kZXguaHRtbCI+Qy1saWtlIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRlbW8vZnVsbHNjcmVlbi5odG1sIj5mdWxsLXNjcmVlbiBlZGl0aW5nPC9hPiBhbmQgPGEgaHJlZj0iZGVtby9jaGFuZ2Vtb2RlLmh0bWwiPm1vZGUtY2hhbmdpbmc8L2E+IGRlbW9zLjwvbGk+CiAgPC91bD4KCiAgPHA+PGEgaHJlZj0iZG9jL29sZHJlbGVhc2UuaHRtbCI+T2xkZXIgcmVsZWFzZXMuLi48L2E+PC9wPgoKPC9kaXY+PC9kaXY+Cgo8ZGl2IHN0eWxlPSJoZWlnaHQ6IDJlbSI+Jm5ic3A7PC9kaXY+CgogIDxmb3JtIGFjdGlvbj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9jZ2ktYmluL3dlYnNjciIgbWV0aG9kPSJwb3N0IiBpZD0icGF5cGFsIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNtZCIgdmFsdWU9Il9zLXhjbGljayIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaG9zdGVkX2J1dHRvbl9pZCIgdmFsdWU9IjNGVkhTNUZHVVk3Q0MiLz4KICA8L2Zvcm0+CgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/keymap/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/keymap/emacs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVE9ETyBudW1iZXIgcHJlZml4ZXMKKGZ1bmN0aW9uKCkgewogIC8vIFJlYWxseSBwcmltaXRpdmUga2lsbC1yaW5nIGltcGxlbWVudGF0aW9uLgogIHZhciBraWxsUmluZyA9IFtdOwogIGZ1bmN0aW9uIGFkZFRvUmluZyhzdHIpIHsKICAgIGtpbGxSaW5nLnB1c2goc3RyKTsKICAgIGlmIChraWxsUmluZy5sZW5ndGggPiA1MCkga2lsbFJpbmcuc2hpZnQoKTsKICB9CiAgZnVuY3Rpb24gZ2V0RnJvbVJpbmcoKSB7IHJldHVybiBraWxsUmluZ1traWxsUmluZy5sZW5ndGggLSAxXSB8fCAiIjsgfQogIGZ1bmN0aW9uIHBvcEZyb21SaW5nKCkgeyBpZiAoa2lsbFJpbmcubGVuZ3RoID4gMSkga2lsbFJpbmcucG9wKCk7IHJldHVybiBnZXRGcm9tUmluZygpOyB9CgogIENvZGVNaXJyb3Iua2V5TWFwLmVtYWNzID0gewogICAgIkN0cmwtWCI6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0T3B0aW9uKCJrZXlNYXAiLCAiZW1hY3MtQ3RybC1YIik7fSwKICAgICJDdHJsLVciOiBmdW5jdGlvbihjbSkge2FkZFRvUmluZyhjbS5nZXRTZWxlY3Rpb24oKSk7IGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIpO30sCiAgICAiQ3RybC1BbHQtVyI6IGZ1bmN0aW9uKGNtKSB7YWRkVG9SaW5nKGNtLmdldFNlbGVjdGlvbigpKTsgY20ucmVwbGFjZVNlbGVjdGlvbigiIik7fSwKICAgICJBbHQtVyI6IGZ1bmN0aW9uKGNtKSB7YWRkVG9SaW5nKGNtLmdldFNlbGVjdGlvbigpKTt9LAogICAgIkN0cmwtWSI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbihnZXRGcm9tUmluZygpKTt9LAogICAgIkFsdC1ZIjogZnVuY3Rpb24oY20pIHtjbS5yZXBsYWNlU2VsZWN0aW9uKHBvcEZyb21SaW5nKCkpO30sCiAgICAiQ3RybC0vIjogInVuZG8iLCAiU2hpZnQtQ3RybC0tIjogInVuZG8iLCAiU2hpZnQtQWx0LSwiOiAiZ29Eb2NTdGFydCIsICJTaGlmdC1BbHQtLiI6ICJnb0RvY0VuZCIsCiAgICAiQ3RybC1TIjogImZpbmROZXh0IiwgIkN0cmwtUiI6ICJmaW5kUHJldiIsICJDdHJsLUciOiAiY2xlYXJTZWFyY2giLCAiU2hpZnQtQWx0LTUiOiAicmVwbGFjZSIsCiAgICAiQ3RybC1aIjogInVuZG8iLCAiQ21kLVoiOiAidW5kbyIsCiAgICBmYWxsdGhyb3VnaDogWyJiYXNpYyIsICJlbWFjc3kiXQogIH07CgogIENvZGVNaXJyb3Iua2V5TWFwWyJlbWFjcy1DdHJsLVgiXSA9IHsKICAgICJDdHJsLVMiOiAic2F2ZSIsICJDdHJsLVciOiAic2F2ZSIsICJTIjogInNhdmVBbGwiLCAiRiI6ICJvcGVuIiwgIlUiOiAidW5kbyIsICJLIjogImNsb3NlIiwKICAgIGF1dG86ICJlbWFjcyIsIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/keymap/vim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIHZhciBjb3VudCA9ICIiOwogIGZ1bmN0aW9uIHB1c2hDb3VudERpZ2l0KGRpZ2l0KSB7IHJldHVybiBmdW5jdGlvbihjbSkge2NvdW50ICs9IGRpZ2l0O30gfQogIGZ1bmN0aW9uIHBvcENvdW50KCkgeyB2YXIgaSA9IHBhcnNlSW50KGNvdW50KTsgY291bnQgPSAiIjsgcmV0dXJuIGkgfHwgMTsgfQogIGZ1bmN0aW9uIGNvdW50VGltZXMoZnVuYykgewogICAgaWYgKHR5cGVvZiBmdW5jID09ICJzdHJpbmciKSBmdW5jID0gQ29kZU1pcnJvci5jb21tYW5kc1tmdW5jXTsKICAgIHJldHVybiBmdW5jdGlvbihjbSkgeyBmb3IgKHZhciBpID0gMCwgYyA9IHBvcENvdW50KCk7IGkgPCBjOyArK2kpIGZ1bmMoY20pOyB9CiAgfQoKICBmdW5jdGlvbiBpdGVyT2JqKG8sIGYpIHsKICAgIGZvciAodmFyIHByb3AgaW4gbykgaWYgKG8uaGFzT3duUHJvcGVydHkocHJvcCkpIGYocHJvcCwgb1twcm9wXSk7CiAgfQoKICB2YXIgd29yZCA9IFsvXHcvLCAvW15cd1xzXS9dLCBiaWdXb3JkID0gWy9cUy9dOwogIGZ1bmN0aW9uIGZpbmRXb3JkKGxpbmUsIHBvcywgZGlyLCByZWdleHBzKSB7CiAgICB2YXIgc3RvcCA9IDAsIG5leHQgPSAtMTsKICAgIGlmIChkaXIgPiAwKSB7IHN0b3AgPSBsaW5lLmxlbmd0aDsgbmV4dCA9IDA7IH0KICAgIHZhciBzdGFydCA9IHN0b3AsIGVuZCA9IHN0b3A7CiAgICAvLyBGaW5kIGJvdW5kcyBvZiBuZXh0IG9uZS4KICAgIG91dGVyOiBmb3IgKDsgcG9zICE9IHN0b3A7IHBvcyArPSBkaXIpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWdleHBzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHJlZ2V4cHNbaV0udGVzdChsaW5lLmNoYXJBdChwb3MgKyBuZXh0KSkpIHsKICAgICAgICAgIHN0YXJ0ID0gcG9zOwogICAgICAgICAgZm9yICg7IHBvcyAhPSBzdG9wOyBwb3MgKz0gZGlyKSB7CiAgICAgICAgICAgIGlmICghcmVnZXhwc1tpXS50ZXN0KGxpbmUuY2hhckF0KHBvcyArIG5leHQpKSkgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBlbmQgPSBwb3M7CiAgICAgICAgICBicmVhayBvdXRlcjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB7ZnJvbTogTWF0aC5taW4oc3RhcnQsIGVuZCksIHRvOiBNYXRoLm1heChzdGFydCwgZW5kKX07CiAgfQogIGZ1bmN0aW9uIG1vdmVUb1dvcmQoY20sIHJlZ2V4cHMsIGRpciwgd2hlcmUpIHsKICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgY2ggPSBjdXIuY2gsIGxpbmUgPSBjbS5nZXRMaW5lKGN1ci5saW5lKSwgd29yZDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHdvcmQgPSBmaW5kV29yZChsaW5lLCBjaCwgZGlyLCByZWdleHBzKTsKICAgICAgY2ggPSB3b3JkW3doZXJlID09ICJlbmQiID8gInRvIiA6ICJmcm9tIl07CiAgICAgIGlmIChjaCA9PSBjdXIuY2ggJiYgd29yZC5mcm9tICE9IHdvcmQudG8pIGNoID0gd29yZFtkaXIgPCAwID8gImZyb20iIDogInRvIl07CiAgICAgIGVsc2UgYnJlYWs7CiAgICB9CiAgICBjbS5zZXRDdXJzb3IoY3VyLmxpbmUsIHdvcmRbd2hlcmUgPT0gImVuZCIgPyAidG8iIDogImZyb20iXSwgdHJ1ZSk7CiAgfQoKICB2YXIgbWFwID0gQ29kZU1pcnJvci5rZXlNYXAudmltID0gewogICAgIjAiOiBmdW5jdGlvbihjbSkge2NvdW50Lmxlbmd0aCA+IDAgPyBwdXNoQ291bnREaWdpdCgiMCIpKGNtKSA6IENvZGVNaXJyb3IuY29tbWFuZHMuZ29MaW5lU3RhcnQoY20pO30sCiAgICAiSSI6IGZ1bmN0aW9uKGNtKSB7cG9wQ291bnQoKTsgY20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLWluc2VydCIpO30sCiAgICAiRyI6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLXByZWZpeC1nIik7fSwKICAgIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKICAvLyBBZGQgYmluZGluZ3MgZm9yIG51bWJlciBrZXlzCiAgZm9yICh2YXIgaSA9IDE7IGkgPCAxMDsgKytpKSBtYXBbaV0gPSBwdXNoQ291bnREaWdpdChpKTsKICAvLyBBZGQgYmluZGluZ3MgdGhhdCBhcmUgaW5mbHVlbmNlZCBieSBudW1iZXIga2V5cwogIGl0ZXJPYmooeyJIIjogImdvQ29sdW1uTGVmdCIsICJMIjogImdvQ29sdW1uUmlnaHQiLCAiSiI6ICJnb0xpbmVEb3duIiwgIksiOiAiZ29MaW5lVXAiLAoJCSAgICAgICAiTGVmdCI6ICJnb0NvbHVtbkxlZnQiLCAiUmlnaHQiOiAiZ29Db2x1bW5SaWdodCIsICJEb3duIjogImdvTGluZURvd24iLCAiVXAiOiAiZ29MaW5lVXAiLAogICAgICAgICAgICJCYWNrc3BhY2UiOiAiZ29DaGFyTGVmdCIsICJTcGFjZSI6ICJnb0NoYXJSaWdodCIsCiAgICAgICAgICAgIkIiOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIHdvcmQsIC0xLCAiZW5kIik7fSwKICAgICAgICAgICAiRSI6IGZ1bmN0aW9uKGNtKSB7bW92ZVRvV29yZChjbSwgd29yZCwgMSwgImVuZCIpO30sCiAgICAgICAgICAgIlciOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIHdvcmQsIDEsICJzdGFydCIpO30sCiAgICAgICAgICAgIlNoaWZ0LUIiOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIGJpZ1dvcmQsIC0xLCAiZW5kIik7fSwKICAgICAgICAgICAiU2hpZnQtRSI6IGZ1bmN0aW9uKGNtKSB7bW92ZVRvV29yZChjbSwgYmlnV29yZCwgMSwgImVuZCIpO30sCiAgICAgICAgICAgIlNoaWZ0LVciOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIGJpZ1dvcmQsIDEsICJzdGFydCIpO30sCiAgICAgICAgICAgIlUiOiAidW5kbyIsICJDdHJsLVIiOiAicmVkbyIsICJTaGlmdC00IjogImdvTGluZUVuZCJ9LAogICAgICAgICAgZnVuY3Rpb24oa2V5LCBjbWQpIHsgbWFwW2tleV0gPSBjb3VudFRpbWVzKGNtZCk7IH0pOwoKICBDb2RlTWlycm9yLmtleU1hcFsidmltLXByZWZpeC1nIl0gPSB7CiAgICAiRSI6IGNvdW50VGltZXMoZnVuY3Rpb24oY20pIHsgbW92ZVRvV29yZChjbSwgd29yZCwgLTEsICJzdGFydCIpO30pLAogICAgIlNoaWZ0LUUiOiBjb3VudFRpbWVzKGZ1bmN0aW9uKGNtKSB7IG1vdmVUb1dvcmQoY20sIGJpZ1dvcmQsIC0xLCAic3RhcnQiKTt9KSwKICAgIGF1dG86ICJ2aW0iLCBjYXRjaGFsbDogZnVuY3Rpb24oY20pIHsvKmlnbm9yZSovfQogIH07CgogIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0taW5zZXJ0Il0gPSB7CiAgICAiRXNjIjogZnVuY3Rpb24oY20pIHtjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0iKTt9LAogICAgZmFsbHRocm91Z2g6IFsiZGVmYXVsdCJdCiAgfTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3IgewogIGxpbmUtaGVpZ2h0OiAxZW07CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBvdmVyZmxvdzogYXV0bzsKICBoZWlnaHQ6IDMwMHB4OwogIC8qIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYW4gSUVbNjddIGJ1ZyB3aGVyZSB0aGUgc2Nyb2xsZWQgY29udGVudAogICAgIGlzIHZpc2libGUgb3V0c2lkZSBvZiB0aGUgc2Nyb2xsaW5nIGJveC4gKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5Db2RlTWlycm9yLWd1dHRlciB7CiAgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7CiAgei1pbmRleDogMTA7CiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjdmNzsKICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZWVlOwogIG1pbi13aWR0aDogMmVtOwogIGhlaWdodDogMTAwJTsKfQouQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7CiAgY29sb3I6ICNhYWE7CiAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgcGFkZGluZzogLjRlbSAuMmVtIC40ZW0gLjRlbTsKICB3aGl0ZS1zcGFjZTogcHJlICFpbXBvcnRhbnQ7Cn0KLkNvZGVNaXJyb3ItbGluZXMgewogIHBhZGRpbmc6IC40ZW07Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAtby1ib3JkZXItcmFkaXVzOiAwOwogIGJvcmRlci1yYWRpdXM6IDA7CiAgYm9yZGVyLXdpZHRoOiAwOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogIGZvbnQtc2l6ZTogaW5oZXJpdDsKICBwYWRkaW5nOiAwOyBtYXJnaW46IDA7CiAgd2hpdGUtc3BhY2U6IHByZTsKICB3b3JkLXdyYXA6IG5vcm1hbDsKfQoKLkNvZGVNaXJyb3Itd3JhcCBwcmUgewogIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Cn0KLkNvZGVNaXJyb3Itd3JhcCAuQ29kZU1pcnJvci1zY3JvbGwgewogIG92ZXJmbG93LXg6IGhpZGRlbjsKfQoKLkNvZGVNaXJyb3IgdGV4dGFyZWEgewogIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsKfQoKLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29yIHsKICB6LWluZGV4OiAxMDsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdmlzaWJpbGl0eTogaGlkZGVuOwogIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7Cn0KLkNvZGVNaXJyb3ItZm9jdXNlZCBwcmUuQ29kZU1pcnJvci1jdXJzb3IgewogIHZpc2liaWxpdHk6IHZpc2libGU7Cn0KCnNwYW4uQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KLkNvZGVNaXJyb3ItZm9jdXNlZCBzcGFuLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDJkY2Y4OyB9CgouQ29kZU1pcnJvci1zZWFyY2hpbmcge2JhY2tncm91bmQ6ICNmZmE7fQoKLyogRGVmYXVsdCB0aGVtZSAqLwoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWtleXdvcmQge2NvbG9yOiAjNzA4O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWF0b20ge2NvbG9yOiAjMjE5O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tZGVmIHtjb2xvcjogIzAwZjt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDVhO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjMDg1O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXByb3BlcnR5IHtjb2xvcjogYmxhY2s7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tb3BlcmF0b3Ige2NvbG9yOiBibGFjazt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogI2E1MDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjYTExO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1MDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1tZXRhIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2NjNzt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS10YWcge2NvbG9yOiAjMTcwO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQouY20tcy1kZWZhdWx0IHNwYW4uY20taGVhZGVyIHtjb2xvcjogI2EwYTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1xdW90ZSB7Y29sb3I6ICMwOTA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20taHIge2NvbG9yOiAjOTk5O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWxpbmsge2NvbG9yOiAjMDBjO30KCnNwYW4uY20taGVhZGVyLCBzcGFuLmNtLXN0cm9uZyB7Zm9udC13ZWlnaHQ6IGJvbGQ7fQpzcGFuLmNtLWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQpzcGFuLmNtLWVtc3Ryb25nIHtmb250LXN0eWxlOiBpdGFsaWM7IGZvbnQtd2VpZ2h0OiBib2xkO30Kc3Bhbi5jbS1saW5rIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9CgpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHtjb2xvcjogIzBmMDt9CmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQge2NvbG9yOiAjZjIyO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvciB2ZXJzaW9uIDIuMgovLwovLyBBbGwgZnVuY3Rpb25zIHRoYXQgbmVlZCBhY2Nlc3MgdG8gdGhlIGVkaXRvcidzIHN0YXRlIGxpdmUgaW5zaWRlCi8vIHRoZSBDb2RlTWlycm9yIGZ1bmN0aW9uLiBCZWxvdyB0aGF0LCBhdCB0aGUgYm90dG9tIG9mIHRoZSBmaWxlLAovLyBzb21lIHV0aWxpdGllcyBhcmUgZGVmaW5lZC4KCi8vIENvZGVNaXJyb3IgaXMgdGhlIG9ubHkgZ2xvYmFsIHZhciB3ZSBjbGFpbQp2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAvLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGFuIGVkaXRvciBpbnN0YW5jZS4gSXQncwogIC8vIGNsb3N1cmUgaXMgdXNlZCB0byBzdG9yZSB0aGUgZWRpdG9yIHN0YXRlLgogIGZ1bmN0aW9uIENvZGVNaXJyb3IocGxhY2UsIGdpdmVuT3B0aW9ucykgewogICAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBvcHRpb25zIGJhc2VkIG9uIGdpdmVuIHZhbHVlcyBhbmQgZGVmYXVsdHMuCiAgICB2YXIgb3B0aW9ucyA9IHt9LCBkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHM7CiAgICBmb3IgKHZhciBvcHQgaW4gZGVmYXVsdHMpCiAgICAgIGlmIChkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShvcHQpKQogICAgICAgIG9wdGlvbnNbb3B0XSA9IChnaXZlbk9wdGlvbnMgJiYgZ2l2ZW5PcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkgPyBnaXZlbk9wdGlvbnMgOiBkZWZhdWx0cylbb3B0XTsKCiAgICB2YXIgdGFyZ2V0RG9jdW1lbnQgPSBvcHRpb25zWyJkb2N1bWVudCJdOwogICAgLy8gVGhlIGVsZW1lbnQgaW4gd2hpY2ggdGhlIGVkaXRvciBsaXZlcy4KICAgIHZhciB3cmFwcGVyID0gdGFyZ2V0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJDb2RlTWlycm9yIiArIChvcHRpb25zLmxpbmVXcmFwcGluZyA/ICIgQ29kZU1pcnJvci13cmFwIiA6ICIiKTsKICAgIC8vIFRoaXMgbWVzcyBjcmVhdGVzIHRoZSBiYXNlIERPTSBzdHJ1Y3R1cmUgZm9yIHRoZSBlZGl0b3IuCiAgICB3cmFwcGVyLmlubmVySFRNTCA9CiAgICAgICc8ZGl2IHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAzcHg7IGhlaWdodDogMHB4OyI+JyArIC8vIFdyYXBzIGFuZCBoaWRlcyBpbnB1dCB0ZXh0YXJlYQogICAgICAgICc8dGV4dGFyZWEgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgcGFkZGluZzogMDsgd2lkdGg6IDFweDsiIHdyYXA9Im9mZiIgJyArCiAgICAgICAgICAnYXV0b2NvcnJlY3Q9Im9mZiIgYXV0b2NhcGl0YWxpemU9Im9mZiI+PC90ZXh0YXJlYT48L2Rpdj4nICsKICAgICAgJzxkaXYgY2xhc3M9IkNvZGVNaXJyb3Itc2Nyb2xsIiB0YWJpbmRleD0iLTEiPicgKwogICAgICAgICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmUiPicgKyAvLyBTZXQgdG8gdGhlIGhlaWdodCBvZiB0aGUgdGV4dCwgY2F1c2VzIHNjcm9sbGluZwogICAgICAgICAgJzxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+JyArIC8vIE1vdmVkIGFyb3VuZCBpdHMgcGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmlldwogICAgICAgICAgICAnPGRpdiBjbGFzcz0iQ29kZU1pcnJvci1ndXR0ZXIiPjxkaXYgY2xhc3M9IkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQiPjwvZGl2PjwvZGl2PicgKwogICAgICAgICAgICAvLyBQcm92aWRlcyBwb3NpdGlvbmluZyByZWxhdGl2ZSB0byAodmlzaWJsZSkgdGV4dCBvcmlnaW4KICAgICAgICAgICAgJzxkaXYgY2xhc3M9IkNvZGVNaXJyb3ItbGluZXMiPjxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+JyArCiAgICAgICAgICAgICAgJzxkaXYgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDEwMCU7IGhlaWdodDogMDsgb3ZlcmZsb3c6IGhpZGRlbjsgdmlzaWJpbGl0eTogaGlkZGVuIj48L2Rpdj4nICsKICAgICAgICAgICAgICAnPHByZSBjbGFzcz0iQ29kZU1pcnJvci1jdXJzb3IiPiYjMTYwOzwvcHJlPicgKyAvLyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYmxpbmt5IGN1cnNvcgogICAgICAgICAgICAgICc8ZGl2PjwvZGl2PicgKyAvLyBUaGlzIERJViBjb250YWlucyB0aGUgYWN0dWFsIGNvZGUKICAgICAgICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICBpZiAocGxhY2UuYXBwZW5kQ2hpbGQpIHBsYWNlLmFwcGVuZENoaWxkKHdyYXBwZXIpOyBlbHNlIHBsYWNlKHdyYXBwZXIpOwogICAgLy8gSSd2ZSBuZXZlciBzZWVuIG1vcmUgZWxlZ2FudCBjb2RlIGluIG15IGxpZmUuCiAgICB2YXIgaW5wdXREaXYgPSB3cmFwcGVyLmZpcnN0Q2hpbGQsIGlucHV0ID0gaW5wdXREaXYuZmlyc3RDaGlsZCwKICAgICAgICBzY3JvbGxlciA9IHdyYXBwZXIubGFzdENoaWxkLCBjb2RlID0gc2Nyb2xsZXIuZmlyc3RDaGlsZCwKICAgICAgICBtb3ZlciA9IGNvZGUuZmlyc3RDaGlsZCwgZ3V0dGVyID0gbW92ZXIuZmlyc3RDaGlsZCwgZ3V0dGVyVGV4dCA9IGd1dHRlci5maXJzdENoaWxkLAogICAgICAgIGxpbmVTcGFjZSA9IGd1dHRlci5uZXh0U2libGluZy5maXJzdENoaWxkLCBtZWFzdXJlID0gbGluZVNwYWNlLmZpcnN0Q2hpbGQsCiAgICAgICAgY3Vyc29yID0gbWVhc3VyZS5uZXh0U2libGluZywgbGluZURpdiA9IGN1cnNvci5uZXh0U2libGluZzsKICAgIHRoZW1lQ2hhbmdlZCgpOwogICAgLy8gTmVlZGVkIHRvIGhpZGUgYmlnIGJsdWUgYmxpbmtpbmcgY3Vyc29yIG9uIE1vYmlsZSBTYWZhcmkKICAgIGlmICgvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL01vYmlsZVwvXHcrLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSBpbnB1dC5zdHlsZS53aWR0aCA9ICIwcHgiOwogICAgaWYgKCF3ZWJraXQpIGxpbmVTcGFjZS5kcmFnZ2FibGUgPSB0cnVlOwogICAgaWYgKG9wdGlvbnMudGFiaW5kZXggIT0gbnVsbCkgaW5wdXQudGFiSW5kZXggPSBvcHRpb25zLnRhYmluZGV4OwogICAgaWYgKCFvcHRpb25zLmd1dHRlciAmJiAhb3B0aW9ucy5saW5lTnVtYmVycykgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CgogICAgLy8gQ2hlY2sgZm9yIHByb2JsZW0gd2l0aCBJRSBpbm5lckhUTUwgbm90IHdvcmtpbmcgd2hlbiB3ZSBoYXZlIGEKICAgIC8vIFAgKG9yIHNpbWlsYXIpIHBhcmVudCBub2RlLgogICAgdHJ5IHsgc3RyaW5nV2lkdGgoIngiKTsgfQogICAgY2F0Y2ggKGUpIHsKICAgICAgaWYgKGUubWVzc2FnZS5tYXRjaCgvcnVudGltZS9pKSkKICAgICAgICBlID0gbmV3IEVycm9yKCJBIENvZGVNaXJyb3IgaW5zaWRlIGEgUC1zdHlsZSBlbGVtZW50IGRvZXMgbm90IHdvcmsgaW4gSW50ZXJuZXQgRXhwbG9yZXIuIChpbm5lckhUTUwgYnVnKSIpOwogICAgICB0aHJvdyBlOwogICAgfQoKICAgIC8vIERlbGF5ZWQgb2JqZWN0IHdyYXAgdGltZW91dHMsIG1ha2luZyBzdXJlIG9ubHkgb25lIGlzIGFjdGl2ZS4gYmxpbmtlciBob2xkcyBhbiBpbnRlcnZhbC4KICAgIHZhciBwb2xsID0gbmV3IERlbGF5ZWQoKSwgaGlnaGxpZ2h0ID0gbmV3IERlbGF5ZWQoKSwgYmxpbmtlcjsKCiAgICAvLyBtb2RlIGhvbGRzIGEgbW9kZSBBUEkgb2JqZWN0LiBkb2MgaXMgdGhlIHRyZWUgb2YgTGluZSBvYmplY3RzLAogICAgLy8gd29yayBhbiBhcnJheSBvZiBsaW5lcyB0aGF0IHNob3VsZCBiZSBwYXJzZWQsIGFuZCBoaXN0b3J5IHRoZQogICAgLy8gdW5kbyBoaXN0b3J5IChpbnN0YW5jZSBvZiBIaXN0b3J5IGNvbnN0cnVjdG9yKS4KICAgIHZhciBtb2RlLCBkb2MgPSBuZXcgQnJhbmNoQ2h1bmsoW25ldyBMZWFmQ2h1bmsoW25ldyBMaW5lKCIiKV0pXSksIHdvcmssIGZvY3VzZWQ7CiAgICBsb2FkTW9kZSgpOwogICAgLy8gVGhlIHNlbGVjdGlvbi4gVGhlc2UgYXJlIGFsd2F5cyBtYWludGFpbmVkIHRvIHBvaW50IGF0IHZhbGlkCiAgICAvLyBwb3NpdGlvbnMuIEludmVydGVkIGlzIHVzZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgdXNlciBpcwogICAgLy8gc2VsZWN0aW5nIGJvdHRvbS10by10b3AuCiAgICB2YXIgc2VsID0ge2Zyb206IHtsaW5lOiAwLCBjaDogMH0sIHRvOiB7bGluZTogMCwgY2g6IDB9LCBpbnZlcnRlZDogZmFsc2V9OwogICAgLy8gU2VsZWN0aW9uLXJlbGF0ZWQgZmxhZ3MuIHNoaWZ0U2VsZWN0aW5nIG9idmlvdXNseSB0cmFja3MKICAgIC8vIHdoZXRoZXIgdGhlIHVzZXIgaXMgaG9sZGluZyBzaGlmdC4KICAgIHZhciBzaGlmdFNlbGVjdGluZywgbGFzdENsaWNrLCBsYXN0RG91YmxlQ2xpY2ssIGRyYWdnaW5nVGV4dCwgb3ZlcndyaXRlID0gZmFsc2U7CiAgICAvLyBWYXJpYWJsZXMgdXNlZCBieSBzdGFydE9wZXJhdGlvbi9lbmRPcGVyYXRpb24gdG8gdHJhY2sgd2hhdAogICAgLy8gaGFwcGVuZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uCiAgICB2YXIgdXBkYXRlSW5wdXQsIHVzZXJTZWxDaGFuZ2UsIGNoYW5nZXMsIHRleHRDaGFuZ2VkLCBzZWxlY3Rpb25DaGFuZ2VkLCBsZWF2ZUlucHV0QWxvbmUsCiAgICAgICAgZ3V0dGVyRGlydHksIGNhbGxiYWNrczsKICAgIC8vIEN1cnJlbnQgdmlzaWJsZSByYW5nZSAobWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCiAgICB2YXIgZGlzcGxheU9mZnNldCA9IDAsIHNob3dpbmdGcm9tID0gMCwgc2hvd2luZ1RvID0gMCwgbGFzdFNpemVDID0gMDsKICAgIC8vIGJyYWNrZXRIaWdobGlnaHRlZCBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoYXQgYSBiYWNrZXQgaGFzIGJlZW4KICAgIC8vIG1hcmtlZC4KICAgIHZhciBicmFja2V0SGlnaGxpZ2h0ZWQ7CiAgICAvLyBUcmFja3MgdGhlIG1heGltdW0gbGluZSBsZW5ndGggc28gdGhhdCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIKICAgIC8vIGNhbiBiZSBrZXB0IHN0YXRpYyB3aGVuIHNjcm9sbGluZy4KICAgIHZhciBtYXhMaW5lID0gIiIsIG1heFdpZHRoLCB0YWJUZXh0ID0gY29tcHV0ZVRhYlRleHQoKTsKCiAgICAvLyBJbml0aWFsaXplIHRoZSBjb250ZW50LgogICAgb3BlcmF0aW9uKGZ1bmN0aW9uKCl7c2V0VmFsdWUob3B0aW9ucy52YWx1ZSB8fCAiIik7IHVwZGF0ZUlucHV0ID0gZmFsc2U7fSkoKTsKICAgIHZhciBoaXN0b3J5ID0gbmV3IEhpc3RvcnkoKTsKCiAgICAvLyBSZWdpc3RlciBvdXIgZXZlbnQgaGFuZGxlcnMuCiAgICBjb25uZWN0KHNjcm9sbGVyLCAibW91c2Vkb3duIiwgb3BlcmF0aW9uKG9uTW91c2VEb3duKSk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAiZGJsY2xpY2siLCBvcGVyYXRpb24ob25Eb3VibGVDbGljaykpOwogICAgY29ubmVjdChsaW5lU3BhY2UsICJkcmFnc3RhcnQiLCBvbkRyYWdTdGFydCk7CiAgICBjb25uZWN0KGxpbmVTcGFjZSwgInNlbGVjdHN0YXJ0IiwgZV9wcmV2ZW50RGVmYXVsdCk7CiAgICAvLyBHZWNrbyBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXQKICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKICAgIC8vIGhhbmRsZWQgaW4gb25Nb3VzZURvd24gZm9yIEdlY2tvLgogICAgaWYgKCFnZWNrbykgY29ubmVjdChzY3JvbGxlciwgImNvbnRleHRtZW51Iiwgb25Db250ZXh0TWVudSk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7CiAgICAgIHVwZGF0ZURpc3BsYXkoW10pOwogICAgICBpZiAob3B0aW9ucy5maXhlZEd1dHRlcikgZ3V0dGVyLnN0eWxlLmxlZnQgPSBzY3JvbGxlci5zY3JvbGxMZWZ0ICsgInB4IjsKICAgICAgaWYgKG9wdGlvbnMub25TY3JvbGwpIG9wdGlvbnMub25TY3JvbGwoaW5zdGFuY2UpOwogICAgfSk7CiAgICBjb25uZWN0KHdpbmRvdywgInJlc2l6ZSIsIGZ1bmN0aW9uKCkge3VwZGF0ZURpc3BsYXkodHJ1ZSk7fSk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5dXAiLCBvcGVyYXRpb24ob25LZXlVcCkpOwogICAgY29ubmVjdChpbnB1dCwgImlucHV0IiwgZmFzdFBvbGwpOwogICAgY29ubmVjdChpbnB1dCwgImtleWRvd24iLCBvcGVyYXRpb24ob25LZXlEb3duKSk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5cHJlc3MiLCBvcGVyYXRpb24ob25LZXlQcmVzcykpOwogICAgY29ubmVjdChpbnB1dCwgImZvY3VzIiwgb25Gb2N1cyk7CiAgICBjb25uZWN0KGlucHV0LCAiYmx1ciIsIG9uQmx1cik7CgogICAgY29ubmVjdChzY3JvbGxlciwgImRyYWdlbnRlciIsIGVfc3RvcCk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAiZHJhZ292ZXIiLCBlX3N0b3ApOwogICAgY29ubmVjdChzY3JvbGxlciwgImRyb3AiLCBvcGVyYXRpb24ob25Ecm9wKSk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAicGFzdGUiLCBmdW5jdGlvbigpe2ZvY3VzSW5wdXQoKTsgZmFzdFBvbGwoKTt9KTsKICAgIGNvbm5lY3QoaW5wdXQsICJwYXN0ZSIsIGZhc3RQb2xsKTsKICAgIGNvbm5lY3QoaW5wdXQsICJjdXQiLCBvcGVyYXRpb24oZnVuY3Rpb24oKXtyZXBsYWNlU2VsZWN0aW9uKCIiKTt9KSk7CgogICAgLy8gSUUgdGhyb3dzIHVuc3BlY2lmaWVkIGVycm9yIGluIGNlcnRhaW4gY2FzZXMsIHdoZW4KICAgIC8vIHRyeWluZyB0byBhY2Nlc3MgYWN0aXZlRWxlbWVudCBiZWZvcmUgb25sb2FkCiAgICB2YXIgaGFzRm9jdXM7IHRyeSB7IGhhc0ZvY3VzID0gKHRhcmdldERvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gaW5wdXQpOyB9IGNhdGNoKGUpIHsgfQogICAgaWYgKGhhc0ZvY3VzKSBzZXRUaW1lb3V0KG9uRm9jdXMsIDIwKTsKICAgIGVsc2Ugb25CbHVyKCk7CgogICAgZnVuY3Rpb24gaXNMaW5lKGwpIHtyZXR1cm4gbCA+PSAwICYmIGwgPCBkb2Muc2l6ZTt9CiAgICAvLyBUaGUgaW5zdGFuY2Ugb2JqZWN0IHRoYXQgd2UnbGwgcmV0dXJuLiBNb3N0bHkgY2FsbHMgb3V0IHRvCiAgICAvLyBsb2NhbCBmdW5jdGlvbnMgaW4gdGhlIENvZGVNaXJyb3IgZnVuY3Rpb24uIFNvbWUgZG8gc29tZSBleHRyYQogICAgLy8gcmFuZ2UgY2hlY2tpbmcgYW5kL29yIGNsaXBwaW5nLiBvcGVyYXRpb24gaXMgdXNlZCB0byB3cmFwIHRoZQogICAgLy8gY2FsbCBzbyB0aGF0IGNoYW5nZXMgaXQgbWFrZXMgYXJlIHRyYWNrZWQsIGFuZCB0aGUgZGlzcGxheSBpcwogICAgLy8gdXBkYXRlZCBhZnRlcndhcmRzLgogICAgdmFyIGluc3RhbmNlID0gd3JhcHBlci5Db2RlTWlycm9yID0gewogICAgICBnZXRWYWx1ZTogZ2V0VmFsdWUsCiAgICAgIHNldFZhbHVlOiBvcGVyYXRpb24oc2V0VmFsdWUpLAogICAgICBnZXRTZWxlY3Rpb246IGdldFNlbGVjdGlvbiwKICAgICAgcmVwbGFjZVNlbGVjdGlvbjogb3BlcmF0aW9uKHJlcGxhY2VTZWxlY3Rpb24pLAogICAgICBmb2N1czogZnVuY3Rpb24oKXtmb2N1c0lucHV0KCk7IG9uRm9jdXMoKTsgZmFzdFBvbGwoKTt9LAogICAgICBzZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHsKICAgICAgICB2YXIgb2xkVmFsID0gb3B0aW9uc1tvcHRpb25dOwogICAgICAgIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlOwogICAgICAgIGlmIChvcHRpb24gPT0gIm1vZGUiIHx8IG9wdGlvbiA9PSAiaW5kZW50VW5pdCIpIGxvYWRNb2RlKCk7CiAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJyZWFkT25seSIgJiYgdmFsdWUpIHtvbkJsdXIoKTsgaW5wdXQuYmx1cigpO30KICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInRoZW1lIikgdGhlbWVDaGFuZ2VkKCk7CiAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJsaW5lV3JhcHBpbmciICYmIG9sZFZhbCAhPSB2YWx1ZSkgb3BlcmF0aW9uKHdyYXBwaW5nQ2hhbmdlZCkoKTsKICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInRhYlNpemUiKSBvcGVyYXRpb24odGFic0NoYW5nZWQpKCk7CiAgICAgICAgaWYgKG9wdGlvbiA9PSAibGluZU51bWJlcnMiIHx8IG9wdGlvbiA9PSAiZ3V0dGVyIiB8fCBvcHRpb24gPT0gImZpcnN0TGluZU51bWJlciIgfHwgb3B0aW9uID09ICJ0aGVtZSIpCiAgICAgICAgICBvcGVyYXRpb24oZ3V0dGVyQ2hhbmdlZCkoKTsKICAgICAgfSwKICAgICAgZ2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24pIHtyZXR1cm4gb3B0aW9uc1tvcHRpb25dO30sCiAgICAgIHVuZG86IG9wZXJhdGlvbih1bmRvKSwKICAgICAgcmVkbzogb3BlcmF0aW9uKHJlZG8pLAogICAgICBpbmRlbnRMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24obiwgZGlyKSB7CiAgICAgICAgaWYgKGlzTGluZShuKSkgaW5kZW50TGluZShuLCBkaXIgPT0gbnVsbCA/ICJzbWFydCIgOiBkaXIgPyAiYWRkIiA6ICJzdWJ0cmFjdCIpOwogICAgICB9KSwKICAgICAgaW5kZW50U2VsZWN0aW9uOiBvcGVyYXRpb24oaW5kZW50U2VsZWN0ZWQpLAogICAgICBoaXN0b3J5U2l6ZTogZnVuY3Rpb24oKSB7cmV0dXJuIHt1bmRvOiBoaXN0b3J5LmRvbmUubGVuZ3RoLCByZWRvOiBoaXN0b3J5LnVuZG9uZS5sZW5ndGh9O30sCiAgICAgIGNsZWFySGlzdG9yeTogZnVuY3Rpb24oKSB7aGlzdG9yeSA9IG5ldyBIaXN0b3J5KCk7fSwKICAgICAgbWF0Y2hCcmFja2V0czogb3BlcmF0aW9uKGZ1bmN0aW9uKCl7bWF0Y2hCcmFja2V0cyh0cnVlKTt9KSwKICAgICAgZ2V0VG9rZW5BdDogb3BlcmF0aW9uKGZ1bmN0aW9uKHBvcykgewogICAgICAgIHBvcyA9IGNsaXBQb3MocG9zKTsKICAgICAgICByZXR1cm4gZ2V0TGluZShwb3MubGluZSkuZ2V0VG9rZW5BdChtb2RlLCBnZXRTdGF0ZUJlZm9yZShwb3MubGluZSksIHBvcy5jaCk7CiAgICAgIH0pLAogICAgICBnZXRTdGF0ZUFmdGVyOiBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgbGluZSA9IGNsaXBMaW5lKGxpbmUgPT0gbnVsbCA/IGRvYy5zaXplIC0gMTogbGluZSk7CiAgICAgICAgcmV0dXJuIGdldFN0YXRlQmVmb3JlKGxpbmUgKyAxKTsKICAgICAgfSwKICAgICAgY3Vyc29yQ29vcmRzOiBmdW5jdGlvbihzdGFydCl7CiAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHN0YXJ0ID0gc2VsLmludmVydGVkOwogICAgICAgIHJldHVybiBwYWdlQ29vcmRzKHN0YXJ0ID8gc2VsLmZyb20gOiBzZWwudG8pOwogICAgICB9LAogICAgICBjaGFyQ29vcmRzOiBmdW5jdGlvbihwb3Mpe3JldHVybiBwYWdlQ29vcmRzKGNsaXBQb3MocG9zKSk7fSwKICAgICAgY29vcmRzQ2hhcjogZnVuY3Rpb24oY29vcmRzKSB7CiAgICAgICAgdmFyIG9mZiA9IGVsdE9mZnNldChsaW5lU3BhY2UpOwogICAgICAgIHJldHVybiBjb29yZHNDaGFyKGNvb3Jkcy54IC0gb2ZmLmxlZnQsIGNvb3Jkcy55IC0gb2ZmLnRvcCk7CiAgICAgIH0sCiAgICAgIG1hcmtUZXh0OiBvcGVyYXRpb24obWFya1RleHQpLAogICAgICBzZXRCb29rbWFyazogc2V0Qm9va21hcmssCiAgICAgIHNldE1hcmtlcjogb3BlcmF0aW9uKGFkZEd1dHRlck1hcmtlciksCiAgICAgIGNsZWFyTWFya2VyOiBvcGVyYXRpb24ocmVtb3ZlR3V0dGVyTWFya2VyKSwKICAgICAgc2V0TGluZUNsYXNzOiBvcGVyYXRpb24oc2V0TGluZUNsYXNzKSwKICAgICAgaGlkZUxpbmU6IG9wZXJhdGlvbihmdW5jdGlvbihoKSB7cmV0dXJuIHNldExpbmVIaWRkZW4oaCwgdHJ1ZSk7fSksCiAgICAgIHNob3dMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24oaCkge3JldHVybiBzZXRMaW5lSGlkZGVuKGgsIGZhbHNlKTt9KSwKICAgICAgb25EZWxldGVMaW5lOiBmdW5jdGlvbihsaW5lLCBmKSB7CiAgICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSB7CiAgICAgICAgICBpZiAoIWlzTGluZShsaW5lKSkgcmV0dXJuIG51bGw7CiAgICAgICAgICBsaW5lID0gZ2V0TGluZShsaW5lKTsKICAgICAgICB9CiAgICAgICAgKGxpbmUuaGFuZGxlcnMgfHwgKGxpbmUuaGFuZGxlcnMgPSBbXSkpLnB1c2goZik7CiAgICAgICAgcmV0dXJuIGxpbmU7CiAgICAgIH0sCiAgICAgIGxpbmVJbmZvOiBsaW5lSW5mbywKICAgICAgYWRkV2lkZ2V0OiBmdW5jdGlvbihwb3MsIG5vZGUsIHNjcm9sbCwgdmVydCwgaG9yaXopIHsKICAgICAgICBwb3MgPSBsb2NhbENvb3JkcyhjbGlwUG9zKHBvcykpOwogICAgICAgIHZhciB0b3AgPSBwb3MueUJvdCwgbGVmdCA9IHBvcy54OwogICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIGNvZGUuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgaWYgKHZlcnQgPT0gIm92ZXIiKSB0b3AgPSBwb3MueTsKICAgICAgICBlbHNlIGlmICh2ZXJ0ID09ICJuZWFyIikgewogICAgICAgICAgdmFyIHZzcGFjZSA9IE1hdGgubWF4KHNjcm9sbGVyLm9mZnNldEhlaWdodCwgZG9jLmhlaWdodCAqIHRleHRIZWlnaHQoKSksCiAgICAgICAgICAgICAgaHNwYWNlID0gTWF0aC5tYXgoY29kZS5jbGllbnRXaWR0aCwgbGluZVNwYWNlLmNsaWVudFdpZHRoKSAtIHBhZGRpbmdMZWZ0KCk7CiAgICAgICAgICBpZiAocG9zLnlCb3QgKyBub2RlLm9mZnNldEhlaWdodCA+IHZzcGFjZSAmJiBwb3MueSA+IG5vZGUub2Zmc2V0SGVpZ2h0KQogICAgICAgICAgICB0b3AgPSBwb3MueSAtIG5vZGUub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgaWYgKGxlZnQgKyBub2RlLm9mZnNldFdpZHRoID4gaHNwYWNlKQogICAgICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKICAgICAgICB9CiAgICAgICAgbm9kZS5zdHlsZS50b3AgPSAodG9wICsgcGFkZGluZ1RvcCgpKSArICJweCI7CiAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbm9kZS5zdHlsZS5yaWdodCA9ICIiOwogICAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7CiAgICAgICAgICBsZWZ0ID0gY29kZS5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGg7CiAgICAgICAgICBub2RlLnN0eWxlLnJpZ2h0ID0gIjBweCI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChob3JpeiA9PSAibGVmdCIpIGxlZnQgPSAwOwogICAgICAgICAgZWxzZSBpZiAoaG9yaXogPT0gIm1pZGRsZSIpIGxlZnQgPSAoY29kZS5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGgpIC8gMjsKICAgICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IChsZWZ0ICsgcGFkZGluZ0xlZnQoKSkgKyAicHgiOwogICAgICAgIH0KICAgICAgICBpZiAoc2Nyb2xsKQogICAgICAgICAgc2Nyb2xsSW50b1ZpZXcobGVmdCwgdG9wLCBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgdG9wICsgbm9kZS5vZmZzZXRIZWlnaHQpOwogICAgICB9LAoKICAgICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gZG9jLnNpemU7fSwKICAgICAgY2xpcFBvczogY2xpcFBvcywKICAgICAgZ2V0Q3Vyc29yOiBmdW5jdGlvbihzdGFydCkgewogICAgICAgIGlmIChzdGFydCA9PSBudWxsKSBzdGFydCA9IHNlbC5pbnZlcnRlZDsKICAgICAgICByZXR1cm4gY29weVBvcyhzdGFydCA/IHNlbC5mcm9tIDogc2VsLnRvKTsKICAgICAgfSwKICAgICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiAhcG9zRXEoc2VsLmZyb20sIHNlbC50byk7fSwKICAgICAgc2V0Q3Vyc29yOiBvcGVyYXRpb24oZnVuY3Rpb24obGluZSwgY2gsIHVzZXIpIHsKICAgICAgICBpZiAoY2ggPT0gbnVsbCAmJiB0eXBlb2YgbGluZS5saW5lID09ICJudW1iZXIiKSBzZXRDdXJzb3IobGluZS5saW5lLCBsaW5lLmNoLCB1c2VyKTsKICAgICAgICBlbHNlIHNldEN1cnNvcihsaW5lLCBjaCwgdXNlcik7CiAgICAgIH0pLAogICAgICBzZXRTZWxlY3Rpb246IG9wZXJhdGlvbihmdW5jdGlvbihmcm9tLCB0bywgdXNlcikgewogICAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNlciA6IHNldFNlbGVjdGlvbikoY2xpcFBvcyhmcm9tKSwgY2xpcFBvcyh0byB8fCBmcm9tKSk7CiAgICAgIH0pLAogICAgICBnZXRMaW5lOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZShsaW5lKSkgcmV0dXJuIGdldExpbmUobGluZSkudGV4dDt9LAogICAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZShsaW5lKSkgcmV0dXJuIGdldExpbmUobGluZSk7fSwKICAgICAgc2V0TGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUsIHRleHQpIHsKICAgICAgICBpZiAoaXNMaW5lKGxpbmUpKSByZXBsYWNlUmFuZ2UodGV4dCwge2xpbmU6IGxpbmUsIGNoOiAwfSwge2xpbmU6IGxpbmUsIGNoOiBnZXRMaW5lKGxpbmUpLnRleHQubGVuZ3RofSk7CiAgICAgIH0pLAogICAgICByZW1vdmVMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChpc0xpbmUobGluZSkpIHJlcGxhY2VSYW5nZSgiIiwge2xpbmU6IGxpbmUsIGNoOiAwfSwgY2xpcFBvcyh7bGluZTogbGluZSsxLCBjaDogMH0pKTsKICAgICAgfSksCiAgICAgIHJlcGxhY2VSYW5nZTogb3BlcmF0aW9uKHJlcGxhY2VSYW5nZSksCiAgICAgIGdldFJhbmdlOiBmdW5jdGlvbihmcm9tLCB0bykge3JldHVybiBnZXRSYW5nZShjbGlwUG9zKGZyb20pLCBjbGlwUG9zKHRvKSk7fSwKCiAgICAgIGV4ZWNDb21tYW5kOiBmdW5jdGlvbihjbWQpIHtyZXR1cm4gY29tbWFuZHNbY21kXShpbnN0YW5jZSk7fSwKICAgICAgLy8gU3R1ZmYgdXNlZCBieSBjb21tYW5kcywgcHJvYmFibHkgbm90IG11Y2ggdXNlIHRvIG91dHNpZGUgY29kZS4KICAgICAgbW92ZUg6IG9wZXJhdGlvbihtb3ZlSCksCiAgICAgIGRlbGV0ZUg6IG9wZXJhdGlvbihkZWxldGVIKSwKICAgICAgbW92ZVY6IG9wZXJhdGlvbihtb3ZlViksCiAgICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24oKSB7b3ZlcndyaXRlID0gIW92ZXJ3cml0ZTt9LAoKICAgICAgcG9zRnJvbUluZGV4OiBmdW5jdGlvbihvZmYpIHsKICAgICAgICB2YXIgbGluZU5vID0gMCwgY2g7CiAgICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgIHZhciBzeiA9IGxpbmUudGV4dC5sZW5ndGggKyAxOwogICAgICAgICAgaWYgKHN6ID4gb2ZmKSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICAgb2ZmIC09IHN6OwogICAgICAgICAgKytsaW5lTm87CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGNsaXBQb3Moe2xpbmU6IGxpbmVObywgY2g6IGNofSk7CiAgICAgIH0sCiAgICAgIGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3JkcykgewogICAgICAgIGlmIChjb29yZHMubGluZSA8IDAgfHwgY29vcmRzLmNoIDwgMCkgcmV0dXJuIDA7CiAgICAgICAgdmFyIGluZGV4ID0gY29vcmRzLmNoOwogICAgICAgIGRvYy5pdGVyKDAsIGNvb3Jkcy5saW5lLCBmdW5jdGlvbiAobGluZSkgewogICAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxlbmd0aCArIDE7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICB9LAoKICAgICAgb3BlcmF0aW9uOiBmdW5jdGlvbihmKXtyZXR1cm4gb3BlcmF0aW9uKGYpKCk7fSwKICAgICAgcmVmcmVzaDogZnVuY3Rpb24oKXt1cGRhdGVEaXNwbGF5KHRydWUpO30sCiAgICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIGlucHV0O30sCiAgICAgIGdldFdyYXBwZXJFbGVtZW50OiBmdW5jdGlvbigpe3JldHVybiB3cmFwcGVyO30sCiAgICAgIGdldFNjcm9sbGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gc2Nyb2xsZXI7fSwKICAgICAgZ2V0R3V0dGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gZ3V0dGVyO30KICAgIH07CgogICAgZnVuY3Rpb24gZ2V0TGluZShuKSB7IHJldHVybiBnZXRMaW5lQXQoZG9jLCBuKTsgfQogICAgZnVuY3Rpb24gdXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpIHsKICAgICAgZ3V0dGVyRGlydHkgPSB0cnVlOwogICAgICB2YXIgZGlmZiA9IGhlaWdodCAtIGxpbmUuaGVpZ2h0OwogICAgICBmb3IgKHZhciBuID0gbGluZTsgbjsgbiA9IG4ucGFyZW50KSBuLmhlaWdodCArPSBkaWZmOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldFZhbHVlKGNvZGUpIHsKICAgICAgdmFyIHRvcCA9IHtsaW5lOiAwLCBjaDogMH07CiAgICAgIHVwZGF0ZUxpbmVzKHRvcCwge2xpbmU6IGRvYy5zaXplIC0gMSwgY2g6IGdldExpbmUoZG9jLnNpemUtMSkudGV4dC5sZW5ndGh9LAogICAgICAgICAgICAgICAgICBzcGxpdExpbmVzKGNvZGUpLCB0b3AsIHRvcCk7CiAgICAgIHVwZGF0ZUlucHV0ID0gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFZhbHVlKGNvZGUpIHsKICAgICAgdmFyIHRleHQgPSBbXTsKICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsgdGV4dC5wdXNoKGxpbmUudGV4dCk7IH0pOwogICAgICByZXR1cm4gdGV4dC5qb2luKCJcbiIpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKICAgICAgc2V0U2hpZnQoZS5zaGlmdEtleSk7CiAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGNsaWNrIGluIGEgd2lkZ2V0CiAgICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChlKTsgbiAhPSB3cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKQogICAgICAgIGlmIChuLnBhcmVudE5vZGUgPT0gY29kZSAmJiBuICE9IG1vdmVyKSByZXR1cm47CgogICAgICAvLyBTZWUgaWYgdGhpcyBpcyBhIGNsaWNrIGluIHRoZSBndXR0ZXIKICAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBndXR0ZXJUZXh0KSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5vbkd1dHRlckNsaWNrKQogICAgICAgICAgICBvcHRpb25zLm9uR3V0dGVyQ2xpY2soaW5zdGFuY2UsIGluZGV4T2YoZ3V0dGVyVGV4dC5jaGlsZE5vZGVzLCBuKSArIHNob3dpbmdGcm9tLCBlKTsKICAgICAgICAgIHJldHVybiBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIH0KCiAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKTsKCiAgICAgIHN3aXRjaCAoZV9idXR0b24oZSkpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmIChnZWNrbyAmJiAhbWFjKSBvbkNvbnRleHRNZW51KGUpOwogICAgICAgIHJldHVybjsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChzdGFydCkgc2V0Q3Vyc29yKHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCB0cnVlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gRm9yIGJ1dHRvbiAxLCBpZiBpdCB3YXMgY2xpY2tlZCBpbnNpZGUgdGhlIGVkaXRvcgogICAgICAvLyAocG9zRnJvbU1vdXNlIHJldHVybmluZyBub24tbnVsbCksIHdlIGhhdmUgdG8gYWRqdXN0IHRoZQogICAgICAvLyBzZWxlY3Rpb24uCiAgICAgIGlmICghc3RhcnQpIHtpZiAoZV90YXJnZXQoZSkgPT0gc2Nyb2xsZXIpIGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CgogICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKCiAgICAgIHZhciBub3cgPSArbmV3IERhdGU7CiAgICAgIGlmIChsYXN0RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdERvdWJsZUNsaWNrLnBvcywgc3RhcnQpKSB7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBzZXRUaW1lb3V0KGZvY3VzSW5wdXQsIDIwKTsKICAgICAgICByZXR1cm4gc2VsZWN0TGluZShzdGFydC5saW5lKTsKICAgICAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdENsaWNrLnBvcywgc3RhcnQpKSB7CiAgICAgICAgbGFzdERvdWJsZUNsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICByZXR1cm4gc2VsZWN0V29yZEF0KHN0YXJ0KTsKICAgICAgfSBlbHNlIHsgbGFzdENsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07IH0KCiAgICAgIHZhciBsYXN0ID0gc3RhcnQsIGdvaW5nOwogICAgICBpZiAoZHJhZ0FuZERyb3AgJiYgIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pICYmCiAgICAgICAgICAhcG9zTGVzcyhzdGFydCwgc2VsLmZyb20pICYmICFwb3NMZXNzKHNlbC50bywgc3RhcnQpKSB7CiAgICAgICAgLy8gTGV0IHRoZSBkcmFnIGhhbmRsZXIgaGFuZGxlIHRoaXMuCiAgICAgICAgaWYgKHdlYmtpdCkgbGluZVNwYWNlLmRyYWdnYWJsZSA9IHRydWU7CiAgICAgICAgdmFyIHVwID0gY29ubmVjdCh0YXJnZXREb2N1bWVudCwgIm1vdXNldXAiLCBvcGVyYXRpb24oZnVuY3Rpb24oZTIpIHsKICAgICAgICAgIGlmICh3ZWJraXQpIGxpbmVTcGFjZS5kcmFnZ2FibGUgPSBmYWxzZTsKICAgICAgICAgIGRyYWdnaW5nVGV4dCA9IGZhbHNlOwogICAgICAgICAgdXAoKTsKICAgICAgICAgIGlmIChNYXRoLmFicyhlLmNsaWVudFggLSBlMi5jbGllbnRYKSArIE1hdGguYWJzKGUuY2xpZW50WSAtIGUyLmNsaWVudFkpIDwgMTApIHsKICAgICAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlMik7CiAgICAgICAgICAgIHNldEN1cnNvcihzdGFydC5saW5lLCBzdGFydC5jaCwgdHJ1ZSk7CiAgICAgICAgICAgIGZvY3VzSW5wdXQoKTsKICAgICAgICAgIH0KICAgICAgICB9KSwgdHJ1ZSk7CiAgICAgICAgZHJhZ2dpbmdUZXh0ID0gdHJ1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgc2V0Q3Vyc29yKHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCB0cnVlKTsKCiAgICAgIGZ1bmN0aW9uIGV4dGVuZChlKSB7CiAgICAgICAgdmFyIGN1ciA9IHBvc0Zyb21Nb3VzZShlLCB0cnVlKTsKICAgICAgICBpZiAoY3VyICYmICFwb3NFcShjdXIsIGxhc3QpKSB7CiAgICAgICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKICAgICAgICAgIGxhc3QgPSBjdXI7CiAgICAgICAgICBzZXRTZWxlY3Rpb25Vc2VyKHN0YXJ0LCBjdXIpOwogICAgICAgICAgdXBkYXRlSW5wdXQgPSBmYWxzZTsKICAgICAgICAgIHZhciB2aXNpYmxlID0gdmlzaWJsZUxpbmVzKCk7CiAgICAgICAgICBpZiAoY3VyLmxpbmUgPj0gdmlzaWJsZS50byB8fCBjdXIubGluZSA8IHZpc2libGUuZnJvbSkKICAgICAgICAgICAgZ29pbmcgPSBzZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5jdGlvbigpe2V4dGVuZChlKTt9KSwgMTUwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBtb3ZlID0gY29ubmVjdCh0YXJnZXREb2N1bWVudCwgIm1vdXNlbW92ZSIsIG9wZXJhdGlvbihmdW5jdGlvbihlKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KGdvaW5nKTsKICAgICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIGV4dGVuZChlKTsKICAgICAgfSksIHRydWUpOwogICAgICB2YXIgdXAgPSBjb25uZWN0KHRhcmdldERvY3VtZW50LCAibW91c2V1cCIsIG9wZXJhdGlvbihmdW5jdGlvbihlKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KGdvaW5nKTsKICAgICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICAgIGlmIChjdXIpIHNldFNlbGVjdGlvblVzZXIoc3RhcnQsIGN1cik7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBmb2N1c0lucHV0KCk7CiAgICAgICAgdXBkYXRlSW5wdXQgPSB0cnVlOwogICAgICAgIG1vdmUoKTsgdXAoKTsKICAgICAgfSksIHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gb25Eb3VibGVDbGljayhlKSB7CiAgICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChlKTsgbiAhPSB3cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKQogICAgICAgIGlmIChuLnBhcmVudE5vZGUgPT0gZ3V0dGVyVGV4dCkgcmV0dXJuIGVfcHJldmVudERlZmF1bHQoZSk7CiAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKTsKICAgICAgaWYgKCFzdGFydCkgcmV0dXJuOwogICAgICBsYXN0RG91YmxlQ2xpY2sgPSB7dGltZTogK25ldyBEYXRlLCBwb3M6IHN0YXJ0fTsKICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgc2VsZWN0V29yZEF0KHN0YXJ0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uRHJvcChlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShlLCB0cnVlKSwgZmlsZXMgPSBlLmRhdGFUcmFuc2Zlci5maWxlczsKICAgICAgaWYgKCFwb3MgfHwgb3B0aW9ucy5yZWFkT25seSkgcmV0dXJuOwogICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlKSB7CiAgICAgICAgZnVuY3Rpb24gbG9hZEZpbGUoZmlsZSwgaSkgewogICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyOwogICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0ZXh0W2ldID0gcmVhZGVyLnJlc3VsdDsKICAgICAgICAgICAgaWYgKCsrcmVhZCA9PSBuKSB7CgkgICAgICBwb3MgPSBjbGlwUG9zKHBvcyk7CgkgICAgICBvcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgZW5kID0gcmVwbGFjZVJhbmdlKHRleHQuam9pbigiIiksIHBvcywgcG9zKTsKICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvblVzZXIocG9zLCBlbmQpOwogICAgICAgICAgICAgIH0pKCk7CgkgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpOwogICAgICAgIH0KICAgICAgICB2YXIgbiA9IGZpbGVzLmxlbmd0aCwgdGV4dCA9IEFycmF5KG4pLCByZWFkID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgbG9hZEZpbGUoZmlsZXNbaV0sIGkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgdGV4dCA9IGUuZGF0YVRyYW5zZmVyLmdldERhdGEoIlRleHQiKTsKICAgICAgICAgIGlmICh0ZXh0KSB7CgkgICAgdmFyIGVuZCA9IHJlcGxhY2VSYW5nZSh0ZXh0LCBwb3MsIHBvcyk7CgkgICAgdmFyIGN1ckZyb20gPSBzZWwuZnJvbSwgY3VyVG8gPSBzZWwudG87CgkgICAgc2V0U2VsZWN0aW9uVXNlcihwb3MsIGVuZCk7CiAgICAgICAgICAgIGlmIChkcmFnZ2luZ1RleHQpIHJlcGxhY2VSYW5nZSgiIiwgY3VyRnJvbSwgY3VyVG8pOwoJICAgIGZvY3VzSW5wdXQoKTsKCSAgfQogICAgICAgIH0KICAgICAgICBjYXRjaChlKXt9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGUpIHsKICAgICAgdmFyIHR4dCA9IGdldFNlbGVjdGlvbigpOwogICAgICAvLyBUaGlzIHdpbGwgcmVzZXQgZXNjYXBlRWxlbWVudAogICAgICBodG1sRXNjYXBlKHR4dCk7CiAgICAgIGUuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlc2NhcGVFbGVtZW50LCAwLCAwKTsKICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIHR4dCk7CiAgICB9CiAgICBmdW5jdGlvbiBoYW5kbGVLZXlCaW5kaW5nKGUpIHsKICAgICAgdmFyIG5hbWUgPSBrZXlOYW1lc1tlLmtleUNvZGVdLCBuZXh0ID0ga2V5TWFwW29wdGlvbnMua2V5TWFwXS5hdXRvLCBib3VuZCwgZHJvcFNoaWZ0OwogICAgICBpZiAobmFtZSA9PSBudWxsIHx8IGUuYWx0R3JhcGhLZXkpIHsKICAgICAgICBpZiAobmV4dCkgb3B0aW9ucy5rZXlNYXAgPSBuZXh0OwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGlmIChlLmFsdEtleSkgbmFtZSA9ICJBbHQtIiArIG5hbWU7CiAgICAgIGlmIChlLmN0cmxLZXkpIG5hbWUgPSAiQ3RybC0iICsgbmFtZTsKICAgICAgaWYgKGUubWV0YUtleSkgbmFtZSA9ICJDbWQtIiArIG5hbWU7CiAgICAgIGlmIChlLnNoaWZ0S2V5ICYmIChib3VuZCA9IGxvb2t1cEtleSgiU2hpZnQtIiArIG5hbWUsIG9wdGlvbnMuZXh0cmFLZXlzLCBvcHRpb25zLmtleU1hcCkpKSB7CiAgICAgICAgZHJvcFNoaWZ0ID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBib3VuZCA9IGxvb2t1cEtleShuYW1lLCBvcHRpb25zLmV4dHJhS2V5cywgb3B0aW9ucy5rZXlNYXApOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgYm91bmQgPT0gInN0cmluZyIpIHsKICAgICAgICBpZiAoY29tbWFuZHMucHJvcGVydHlJc0VudW1lcmFibGUoYm91bmQpKSBib3VuZCA9IGNvbW1hbmRzW2JvdW5kXTsKICAgICAgICBlbHNlIGJvdW5kID0gbnVsbDsKICAgICAgfQogICAgICBpZiAobmV4dCAmJiAoYm91bmQgfHwgIWlzTW9kaWZpZXJLZXkoZSkpKSBvcHRpb25zLmtleU1hcCA9IG5leHQ7CiAgICAgIGlmICghYm91bmQpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGRyb3BTaGlmdCkgewogICAgICAgIHZhciBwcmV2U2hpZnQgPSBzaGlmdFNlbGVjdGluZzsKICAgICAgICBzaGlmdFNlbGVjdGluZyA9IG51bGw7CiAgICAgICAgYm91bmQoaW5zdGFuY2UpOwogICAgICAgIHNoaWZ0U2VsZWN0aW5nID0gcHJldlNoaWZ0OwogICAgICB9IGVsc2UgYm91bmQoaW5zdGFuY2UpOwogICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHZhciBsYXN0U3RvcHBlZEtleSA9IG51bGw7CiAgICBmdW5jdGlvbiBvbktleURvd24oZSkgewogICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKICAgICAgdmFyIGNvZGUgPSBlLmtleUNvZGU7CiAgICAgIC8vIElFIGRvZXMgc3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuCiAgICAgIGlmIChpZSAmJiBjb2RlID09IDI3KSB7IGUucmV0dXJuVmFsdWUgPSBmYWxzZTsgfQogICAgICBzZXRTaGlmdChjb2RlID09IDE2IHx8IGUuc2hpZnRLZXkpOwogICAgICAvLyBGaXJzdCBnaXZlIG9uS2V5RXZlbnQgb3B0aW9uIGEgY2hhbmNlIHRvIGhhbmRsZSB0aGlzLgogICAgICBpZiAob3B0aW9ucy5vbktleUV2ZW50ICYmIG9wdGlvbnMub25LZXlFdmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICAgdmFyIGhhbmRsZWQgPSBoYW5kbGVLZXlCaW5kaW5nKGUpOwogICAgICBpZiAod2luZG93Lm9wZXJhKSB7CiAgICAgICAgbGFzdFN0b3BwZWRLZXkgPSBoYW5kbGVkID8gZS5rZXlDb2RlIDogbnVsbDsKICAgICAgICAvLyBPcGVyYSBoYXMgbm8gY3V0IGV2ZW50Li4uIHdlIHRyeSB0byBhdCBsZWFzdCBjYXRjaCB0aGUga2V5IGNvbWJvCiAgICAgICAgaWYgKCFoYW5kbGVkICYmIChtYWMgPyBlLm1ldGFLZXkgOiBlLmN0cmxLZXkpICYmIGUua2V5Q29kZSA9PSA4OCkKICAgICAgICAgIHJlcGxhY2VTZWxlY3Rpb24oIiIpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBvbktleVByZXNzKGUpIHsKICAgICAgaWYgKHdpbmRvdy5vcGVyYSAmJiBlLmtleUNvZGUgPT0gbGFzdFN0b3BwZWRLZXkpIHtsYXN0U3RvcHBlZEtleSA9IG51bGw7IGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CiAgICAgIGlmIChvcHRpb25zLm9uS2V5RXZlbnQgJiYgb3B0aW9ucy5vbktleUV2ZW50KGluc3RhbmNlLCBhZGRTdG9wKGUpKSkgcmV0dXJuOwogICAgICBpZiAod2luZG93Lm9wZXJhICYmICFlLndoaWNoICYmIGhhbmRsZUtleUJpbmRpbmcoZSkpIHJldHVybjsKICAgICAgaWYgKG9wdGlvbnMuZWxlY3RyaWNDaGFycyAmJiBtb2RlLmVsZWN0cmljQ2hhcnMpIHsKICAgICAgICB2YXIgY2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUgPT0gbnVsbCA/IGUua2V5Q29kZSA6IGUuY2hhckNvZGUpOwogICAgICAgIGlmIChtb2RlLmVsZWN0cmljQ2hhcnMuaW5kZXhPZihjaCkgPiAtMSkKICAgICAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9uKGZ1bmN0aW9uKCkge2luZGVudExpbmUoc2VsLnRvLmxpbmUsICJzbWFydCIpO30pLCA3NSk7CiAgICAgIH0KICAgICAgZmFzdFBvbGwoKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uS2V5VXAoZSkgewogICAgICBpZiAob3B0aW9ucy5vbktleUV2ZW50ICYmIG9wdGlvbnMub25LZXlFdmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICAgaWYgKGUua2V5Q29kZSA9PSAxNikgc2hpZnRTZWxlY3RpbmcgPSBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uRm9jdXMoKSB7CiAgICAgIGlmIChvcHRpb25zLnJlYWRPbmx5KSByZXR1cm47CiAgICAgIGlmICghZm9jdXNlZCkgewogICAgICAgIGlmIChvcHRpb25zLm9uRm9jdXMpIG9wdGlvbnMub25Gb2N1cyhpbnN0YW5jZSk7CiAgICAgICAgZm9jdXNlZCA9IHRydWU7CiAgICAgICAgaWYgKHdyYXBwZXIuY2xhc3NOYW1lLnNlYXJjaCgvXGJDb2RlTWlycm9yLWZvY3VzZWRcYi8pID09IC0xKQogICAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLWZvY3VzZWQiOwogICAgICAgIGlmICghbGVhdmVJbnB1dEFsb25lKSByZXNldElucHV0KHRydWUpOwogICAgICB9CiAgICAgIHNsb3dQb2xsKCk7CiAgICAgIHJlc3RhcnRCbGluaygpOwogICAgfQogICAgZnVuY3Rpb24gb25CbHVyKCkgewogICAgICBpZiAoZm9jdXNlZCkgewogICAgICAgIGlmIChvcHRpb25zLm9uQmx1cikgb3B0aW9ucy5vbkJsdXIoaW5zdGFuY2UpOwogICAgICAgIGZvY3VzZWQgPSBmYWxzZTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IHdyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCAiIik7CiAgICAgIH0KICAgICAgY2xlYXJJbnRlcnZhbChibGlua2VyKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtpZiAoIWZvY3VzZWQpIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDt9LCAxNTApOwogICAgfQoKICAgIC8vIFJlcGxhY2UgdGhlIHJhbmdlIGZyb20gZnJvbSB0byB0byBieSB0aGUgc3RyaW5ncyBpbiBuZXdUZXh0LgogICAgLy8gQWZ0ZXJ3YXJkcywgc2V0IHRoZSBzZWxlY3Rpb24gdG8gc2VsRnJvbSwgc2VsVG8uCiAgICBmdW5jdGlvbiB1cGRhdGVMaW5lcyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pIHsKICAgICAgaWYgKGhpc3RvcnkpIHsKICAgICAgICB2YXIgb2xkID0gW107CiAgICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgeyBvbGQucHVzaChsaW5lLnRleHQpOyB9KTsKICAgICAgICBoaXN0b3J5LmFkZENoYW5nZShmcm9tLmxpbmUsIG5ld1RleHQubGVuZ3RoLCBvbGQpOwogICAgICAgIHdoaWxlIChoaXN0b3J5LmRvbmUubGVuZ3RoID4gb3B0aW9ucy51bmRvRGVwdGgpIGhpc3RvcnkuZG9uZS5zaGlmdCgpOwogICAgICB9CiAgICAgIHVwZGF0ZUxpbmVzTm9VbmRvKGZyb20sIHRvLCBuZXdUZXh0LCBzZWxGcm9tLCBzZWxUbyk7CiAgICB9CiAgICBmdW5jdGlvbiB1bnJlZG9IZWxwZXIoZnJvbSwgdG8pIHsKICAgICAgdmFyIGNoYW5nZSA9IGZyb20ucG9wKCk7CiAgICAgIGlmIChjaGFuZ2UpIHsKICAgICAgICB2YXIgcmVwbGFjZWQgPSBbXSwgZW5kID0gY2hhbmdlLnN0YXJ0ICsgY2hhbmdlLmFkZGVkOwogICAgICAgIGRvYy5pdGVyKGNoYW5nZS5zdGFydCwgZW5kLCBmdW5jdGlvbihsaW5lKSB7IHJlcGxhY2VkLnB1c2gobGluZS50ZXh0KTsgfSk7CiAgICAgICAgdG8ucHVzaCh7c3RhcnQ6IGNoYW5nZS5zdGFydCwgYWRkZWQ6IGNoYW5nZS5vbGQubGVuZ3RoLCBvbGQ6IHJlcGxhY2VkfSk7CiAgICAgICAgdmFyIHBvcyA9IGNsaXBQb3Moe2xpbmU6IGNoYW5nZS5zdGFydCArIGNoYW5nZS5vbGQubGVuZ3RoIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2g6IGVkaXRFbmQocmVwbGFjZWRbcmVwbGFjZWQubGVuZ3RoLTFdLCBjaGFuZ2Uub2xkW2NoYW5nZS5vbGQubGVuZ3RoLTFdKX0pOwogICAgICAgIHVwZGF0ZUxpbmVzTm9VbmRvKHtsaW5lOiBjaGFuZ2Uuc3RhcnQsIGNoOiAwfSwge2xpbmU6IGVuZCAtIDEsIGNoOiBnZXRMaW5lKGVuZC0xKS50ZXh0Lmxlbmd0aH0sIGNoYW5nZS5vbGQsIHBvcywgcG9zKTsKICAgICAgICB1cGRhdGVJbnB1dCA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHVuZG8oKSB7dW5yZWRvSGVscGVyKGhpc3RvcnkuZG9uZSwgaGlzdG9yeS51bmRvbmUpO30KICAgIGZ1bmN0aW9uIHJlZG8oKSB7dW5yZWRvSGVscGVyKGhpc3RvcnkudW5kb25lLCBoaXN0b3J5LmRvbmUpO30KCiAgICBmdW5jdGlvbiB1cGRhdGVMaW5lc05vVW5kbyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pIHsKICAgICAgdmFyIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlLCBtYXhMaW5lTGVuZ3RoID0gbWF4TGluZS5sZW5ndGg7CiAgICAgIGlmICghb3B0aW9ucy5saW5lV3JhcHBpbmcpCiAgICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICBpZiAobGluZS50ZXh0Lmxlbmd0aCA9PSBtYXhMaW5lTGVuZ3RoKSB7cmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTsgcmV0dXJuIHRydWU7fQogICAgICAgIH0pOwogICAgICBpZiAoZnJvbS5saW5lICE9IHRvLmxpbmUgfHwgbmV3VGV4dC5sZW5ndGggPiAxKSBndXR0ZXJEaXJ0eSA9IHRydWU7CgogICAgICB2YXIgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZSwgZmlyc3RMaW5lID0gZ2V0TGluZShmcm9tLmxpbmUpLCBsYXN0TGluZSA9IGdldExpbmUodG8ubGluZSk7CiAgICAgIC8vIEZpcnN0IGFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUsIHRha2luZyBzb21lIGNhcmUgdG8gbGVhdmUgaGlnaGxpZ2h0aW5nIGludGFjdC4KICAgICAgaWYgKGZyb20uY2ggPT0gMCAmJiB0by5jaCA9PSAwICYmIG5ld1RleHRbbmV3VGV4dC5sZW5ndGggLSAxXSA9PSAiIikgewogICAgICAgIC8vIFRoaXMgaXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2UKICAgICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uCiAgICAgICAgdmFyIGFkZGVkID0gW10sIHByZXZMaW5lID0gbnVsbDsKICAgICAgICBpZiAoZnJvbS5saW5lKSB7CiAgICAgICAgICBwcmV2TGluZSA9IGdldExpbmUoZnJvbS5saW5lIC0gMSk7CiAgICAgICAgICBwcmV2TGluZS5maXhNYXJrRW5kcyhsYXN0TGluZSk7CiAgICAgICAgfSBlbHNlIGxhc3RMaW5lLmZpeE1hcmtTdGFydHMoKTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IG5ld1RleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkKICAgICAgICAgIGFkZGVkLnB1c2goTGluZS5pbmhlcml0TWFya3MobmV3VGV4dFtpXSwgcHJldkxpbmUpKTsKICAgICAgICBpZiAobmxpbmVzKSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzLCBjYWxsYmFja3MpOwogICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIGRvYy5pbnNlcnQoZnJvbS5saW5lLCBhZGRlZCk7CiAgICAgIH0gZWxzZSBpZiAoZmlyc3RMaW5lID09IGxhc3RMaW5lKSB7CiAgICAgICAgaWYgKG5ld1RleHQubGVuZ3RoID09IDEpCiAgICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCB0by5jaCwgbmV3VGV4dFswXSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBsYXN0TGluZSA9IGZpcnN0TGluZS5zcGxpdCh0by5jaCwgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aC0xXSk7CiAgICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBudWxsLCBuZXdUZXh0WzBdKTsKICAgICAgICAgIGZpcnN0TGluZS5maXhNYXJrRW5kcyhsYXN0TGluZSk7CiAgICAgICAgICB2YXIgYWRkZWQgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQogICAgICAgICAgICBhZGRlZC5wdXNoKExpbmUuaW5oZXJpdE1hcmtzKG5ld1RleHRbaV0sIGZpcnN0TGluZSkpOwogICAgICAgICAgYWRkZWQucHVzaChsYXN0TGluZSk7CiAgICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobmV3VGV4dC5sZW5ndGggPT0gMSkgewogICAgICAgIGZpcnN0TGluZS5yZXBsYWNlKGZyb20uY2gsIG51bGwsIG5ld1RleHRbMF0pOwogICAgICAgIGxhc3RMaW5lLnJlcGxhY2UobnVsbCwgdG8uY2gsICIiKTsKICAgICAgICBmaXJzdExpbmUuYXBwZW5kKGxhc3RMaW5lKTsKICAgICAgICBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcywgY2FsbGJhY2tzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgYWRkZWQgPSBbXTsKICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBudWxsLCBuZXdUZXh0WzBdKTsKICAgICAgICBsYXN0TGluZS5yZXBsYWNlKG51bGwsIHRvLmNoLCBuZXdUZXh0W25ld1RleHQubGVuZ3RoLTFdKTsKICAgICAgICBmaXJzdExpbmUuZml4TWFya0VuZHMobGFzdExpbmUpOwogICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQogICAgICAgICAgYWRkZWQucHVzaChMaW5lLmluaGVyaXRNYXJrcyhuZXdUZXh0W2ldLCBmaXJzdExpbmUpKTsKICAgICAgICBpZiAobmxpbmVzID4gMSkgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMgLSAxLCBjYWxsYmFja3MpOwogICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwgYWRkZWQpOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgewogICAgICAgIHZhciBwZXJMaW5lID0gc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoKSAtIDM7CiAgICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCBmcm9tLmxpbmUgKyBuZXdUZXh0Lmxlbmd0aCwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgaWYgKGxpbmUuaGlkZGVuKSByZXR1cm47CiAgICAgICAgICB2YXIgZ3Vlc3MgPSBNYXRoLmNlaWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDE7CiAgICAgICAgICBpZiAoZ3Vlc3MgIT0gbGluZS5oZWlnaHQpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZ3Vlc3MpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGRvYy5pdGVyKGZyb20ubGluZSwgaSArIG5ld1RleHQubGVuZ3RoLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICB2YXIgbCA9IGxpbmUudGV4dDsKICAgICAgICAgIGlmIChsLmxlbmd0aCA+IG1heExpbmVMZW5ndGgpIHsKICAgICAgICAgICAgbWF4TGluZSA9IGw7IG1heExpbmVMZW5ndGggPSBsLmxlbmd0aDsgbWF4V2lkdGggPSBudWxsOwogICAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAocmVjb21wdXRlTWF4TGVuZ3RoKSB7CiAgICAgICAgICBtYXhMaW5lTGVuZ3RoID0gMDsgbWF4TGluZSA9ICIiOyBtYXhXaWR0aCA9IG51bGw7CiAgICAgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgICB2YXIgbCA9IGxpbmUudGV4dDsKICAgICAgICAgICAgaWYgKGwubGVuZ3RoID4gbWF4TGluZUxlbmd0aCkgewogICAgICAgICAgICAgIG1heExpbmVMZW5ndGggPSBsLmxlbmd0aDsgbWF4TGluZSA9IGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQWRkIHRoZXNlIGxpbmVzIHRvIHRoZSB3b3JrIGFycmF5LCBzbyB0aGF0IHRoZXkgd2lsbCBiZQogICAgICAvLyBoaWdobGlnaHRlZC4gQWRqdXN0IHdvcmsgbGluZXMgaWYgbGluZXMgd2VyZSBhZGRlZC9yZW1vdmVkLgogICAgICB2YXIgbmV3V29yayA9IFtdLCBsZW5kaWZmID0gbmV3VGV4dC5sZW5ndGggLSBubGluZXMgLSAxOwogICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHdvcmsubGVuZ3RoOyBpIDwgbDsgKytpKSB7CiAgICAgICAgdmFyIHRhc2sgPSB3b3JrW2ldOwogICAgICAgIGlmICh0YXNrIDwgZnJvbS5saW5lKSBuZXdXb3JrLnB1c2godGFzayk7CiAgICAgICAgZWxzZSBpZiAodGFzayA+IHRvLmxpbmUpIG5ld1dvcmsucHVzaCh0YXNrICsgbGVuZGlmZik7CiAgICAgIH0KICAgICAgdmFyIGhsRW5kID0gZnJvbS5saW5lICsgTWF0aC5taW4obmV3VGV4dC5sZW5ndGgsIDUwMCk7CiAgICAgIGhpZ2hsaWdodExpbmVzKGZyb20ubGluZSwgaGxFbmQpOwogICAgICBuZXdXb3JrLnB1c2goaGxFbmQpOwogICAgICB3b3JrID0gbmV3V29yazsKICAgICAgc3RhcnRXb3JrZXIoMTAwKTsKICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGVzZSBsaW5lcyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBmcm9tLmxpbmUsIHRvOiB0by5saW5lICsgMSwgZGlmZjogbGVuZGlmZn0pOwogICAgICB2YXIgY2hhbmdlT2JqID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbmV3VGV4dH07CiAgICAgIGlmICh0ZXh0Q2hhbmdlZCkgewogICAgICAgIGZvciAodmFyIGN1ciA9IHRleHRDaGFuZ2VkOyBjdXIubmV4dDsgY3VyID0gY3VyLm5leHQpIHt9CiAgICAgICAgY3VyLm5leHQgPSBjaGFuZ2VPYmo7CiAgICAgIH0gZWxzZSB0ZXh0Q2hhbmdlZCA9IGNoYW5nZU9iajsKCiAgICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uCiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmUobikge3JldHVybiBuIDw9IE1hdGgubWluKHRvLmxpbmUsIHRvLmxpbmUgKyBsZW5kaWZmKSA/IG4gOiBuICsgbGVuZGlmZjt9CiAgICAgIHNldFNlbGVjdGlvbihzZWxGcm9tLCBzZWxUbywgdXBkYXRlTGluZShzZWwuZnJvbS5saW5lKSwgdXBkYXRlTGluZShzZWwudG8ubGluZSkpOwoKICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY3JvbGwtc2l6ZSBkaXYgaGFzIHRoZSBjb3JyZWN0IGhlaWdodC4KICAgICAgY29kZS5zdHlsZS5oZWlnaHQgPSAoZG9jLmhlaWdodCAqIHRleHRIZWlnaHQoKSArIDIgKiBwYWRkaW5nVG9wKCkpICsgInB4IjsKICAgIH0KCiAgICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UoY29kZSwgZnJvbSwgdG8pIHsKICAgICAgZnJvbSA9IGNsaXBQb3MoZnJvbSk7CiAgICAgIGlmICghdG8pIHRvID0gZnJvbTsgZWxzZSB0byA9IGNsaXBQb3ModG8pOwogICAgICBjb2RlID0gc3BsaXRMaW5lcyhjb2RlKTsKICAgICAgZnVuY3Rpb24gYWRqdXN0UG9zKHBvcykgewogICAgICAgIGlmIChwb3NMZXNzKHBvcywgZnJvbSkpIHJldHVybiBwb3M7CiAgICAgICAgaWYgKCFwb3NMZXNzKHRvLCBwb3MpKSByZXR1cm4gZW5kOwogICAgICAgIHZhciBsaW5lID0gcG9zLmxpbmUgKyBjb2RlLmxlbmd0aCAtICh0by5saW5lIC0gZnJvbS5saW5lKSAtIDE7CiAgICAgICAgdmFyIGNoID0gcG9zLmNoOwogICAgICAgIGlmIChwb3MubGluZSA9PSB0by5saW5lKQogICAgICAgICAgY2ggKz0gY29kZVtjb2RlLmxlbmd0aC0xXS5sZW5ndGggLSAodG8uY2ggLSAodG8ubGluZSA9PSBmcm9tLmxpbmUgPyBmcm9tLmNoIDogMCkpOwogICAgICAgIHJldHVybiB7bGluZTogbGluZSwgY2g6IGNofTsKICAgICAgfQogICAgICB2YXIgZW5kOwogICAgICByZXBsYWNlUmFuZ2UxKGNvZGUsIGZyb20sIHRvLCBmdW5jdGlvbihlbmQxKSB7CiAgICAgICAgZW5kID0gZW5kMTsKICAgICAgICByZXR1cm4ge2Zyb206IGFkanVzdFBvcyhzZWwuZnJvbSksIHRvOiBhZGp1c3RQb3Moc2VsLnRvKX07CiAgICAgIH0pOwogICAgICByZXR1cm4gZW5kOwogICAgfQogICAgZnVuY3Rpb24gcmVwbGFjZVNlbGVjdGlvbihjb2RlLCBjb2xsYXBzZSkgewogICAgICByZXBsYWNlUmFuZ2UxKHNwbGl0TGluZXMoY29kZSksIHNlbC5mcm9tLCBzZWwudG8sIGZ1bmN0aW9uKGVuZCkgewogICAgICAgIGlmIChjb2xsYXBzZSA9PSAiZW5kIikgcmV0dXJuIHtmcm9tOiBlbmQsIHRvOiBlbmR9OwogICAgICAgIGVsc2UgaWYgKGNvbGxhcHNlID09ICJzdGFydCIpIHJldHVybiB7ZnJvbTogc2VsLmZyb20sIHRvOiBzZWwuZnJvbX07CiAgICAgICAgZWxzZSByZXR1cm4ge2Zyb206IHNlbC5mcm9tLCB0bzogZW5kfTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiByZXBsYWNlUmFuZ2UxKGNvZGUsIGZyb20sIHRvLCBjb21wdXRlU2VsKSB7CiAgICAgIHZhciBlbmRjaCA9IGNvZGUubGVuZ3RoID09IDEgPyBjb2RlWzBdLmxlbmd0aCArIGZyb20uY2ggOiBjb2RlW2NvZGUubGVuZ3RoLTFdLmxlbmd0aDsKICAgICAgdmFyIG5ld1NlbCA9IGNvbXB1dGVTZWwoe2xpbmU6IGZyb20ubGluZSArIGNvZGUubGVuZ3RoIC0gMSwgY2g6IGVuZGNofSk7CiAgICAgIHVwZGF0ZUxpbmVzKGZyb20sIHRvLCBjb2RlLCBuZXdTZWwuZnJvbSwgbmV3U2VsLnRvKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRSYW5nZShmcm9tLCB0bykgewogICAgICB2YXIgbDEgPSBmcm9tLmxpbmUsIGwyID0gdG8ubGluZTsKICAgICAgaWYgKGwxID09IGwyKSByZXR1cm4gZ2V0TGluZShsMSkudGV4dC5zbGljZShmcm9tLmNoLCB0by5jaCk7CiAgICAgIHZhciBjb2RlID0gW2dldExpbmUobDEpLnRleHQuc2xpY2UoZnJvbS5jaCldOwogICAgICBkb2MuaXRlcihsMSArIDEsIGwyLCBmdW5jdGlvbihsaW5lKSB7IGNvZGUucHVzaChsaW5lLnRleHQpOyB9KTsKICAgICAgY29kZS5wdXNoKGdldExpbmUobDIpLnRleHQuc2xpY2UoMCwgdG8uY2gpKTsKICAgICAgcmV0dXJuIGNvZGUuam9pbigiXG4iKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFNlbGVjdGlvbigpIHsKICAgICAgcmV0dXJuIGdldFJhbmdlKHNlbC5mcm9tLCBzZWwudG8pOwogICAgfQoKICAgIHZhciBwb2xsaW5nRmFzdCA9IGZhbHNlOyAvLyBFbnN1cmVzIHNsb3dQb2xsIGRvZXNuJ3QgY2FuY2VsIGZhc3RQb2xsCiAgICBmdW5jdGlvbiBzbG93UG9sbCgpIHsKICAgICAgaWYgKHBvbGxpbmdGYXN0KSByZXR1cm47CiAgICAgIHBvbGwuc2V0KG9wdGlvbnMucG9sbEludGVydmFsLCBmdW5jdGlvbigpIHsKICAgICAgICBzdGFydE9wZXJhdGlvbigpOwogICAgICAgIHJlYWRJbnB1dCgpOwogICAgICAgIGlmIChmb2N1c2VkKSBzbG93UG9sbCgpOwogICAgICAgIGVuZE9wZXJhdGlvbigpOwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGZhc3RQb2xsKCkgewogICAgICB2YXIgbWlzc2VkID0gZmFsc2U7CiAgICAgIHBvbGxpbmdGYXN0ID0gdHJ1ZTsKICAgICAgZnVuY3Rpb24gcCgpIHsKICAgICAgICBzdGFydE9wZXJhdGlvbigpOwogICAgICAgIHZhciBjaGFuZ2VkID0gcmVhZElucHV0KCk7CiAgICAgICAgaWYgKCFjaGFuZ2VkICYmICFtaXNzZWQpIHttaXNzZWQgPSB0cnVlOyBwb2xsLnNldCg2MCwgcCk7fQogICAgICAgIGVsc2Uge3BvbGxpbmdGYXN0ID0gZmFsc2U7IHNsb3dQb2xsKCk7fQogICAgICAgIGVuZE9wZXJhdGlvbigpOwogICAgICB9CiAgICAgIHBvbGwuc2V0KDIwLCBwKTsKICAgIH0KCiAgICAvLyBQcmV2aW5wdXQgaXMgYSBoYWNrIHRvIHdvcmsgd2l0aCBJTUUuIElmIHdlIHJlc2V0IHRoZSB0ZXh0YXJlYQogICAgLy8gb24gZXZlcnkgY2hhbmdlLCB0aGF0IGJyZWFrcyBJTUUuIFNvIHdlIGxvb2sgZm9yIGNoYW5nZXMKICAgIC8vIGNvbXBhcmVkIHRvIHRoZSBwcmV2aW91cyBjb250ZW50IGluc3RlYWQuIChNb2Rlcm4gYnJvd3NlcnMgaGF2ZQogICAgLy8gZXZlbnRzIHRoYXQgaW5kaWNhdGUgSU1FIHRha2luZyBwbGFjZSwgYnV0IHRoZXNlIGFyZSBub3Qgd2lkZWx5CiAgICAvLyBzdXBwb3J0ZWQgb3IgY29tcGF0aWJsZSBlbm91Z2ggeWV0IHRvIHJlbHkgb24uKQogICAgdmFyIHByZXZJbnB1dCA9ICIiOwogICAgZnVuY3Rpb24gcmVhZElucHV0KCkgewogICAgICBpZiAobGVhdmVJbnB1dEFsb25lIHx8ICFmb2N1c2VkIHx8IGhhc1NlbGVjdGlvbihpbnB1dCkpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIHRleHQgPSBpbnB1dC52YWx1ZTsKICAgICAgaWYgKHRleHQgPT0gcHJldklucHV0KSByZXR1cm4gZmFsc2U7CiAgICAgIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDsKICAgICAgdmFyIHNhbWUgPSAwLCBsID0gTWF0aC5taW4ocHJldklucHV0Lmxlbmd0aCwgdGV4dC5sZW5ndGgpOwogICAgICB3aGlsZSAoc2FtZSA8IGwgJiYgcHJldklucHV0W3NhbWVdID09IHRleHRbc2FtZV0pICsrc2FtZTsKICAgICAgaWYgKHNhbWUgPCBwcmV2SW5wdXQubGVuZ3RoKQogICAgICAgIHNlbC5mcm9tID0ge2xpbmU6IHNlbC5mcm9tLmxpbmUsIGNoOiBzZWwuZnJvbS5jaCAtIChwcmV2SW5wdXQubGVuZ3RoIC0gc2FtZSl9OwogICAgICBlbHNlIGlmIChvdmVyd3JpdGUgJiYgcG9zRXEoc2VsLmZyb20sIHNlbC50bykpCiAgICAgICAgc2VsLnRvID0ge2xpbmU6IHNlbC50by5saW5lLCBjaDogTWF0aC5taW4oZ2V0TGluZShzZWwudG8ubGluZSkudGV4dC5sZW5ndGgsIHNlbC50by5jaCArICh0ZXh0Lmxlbmd0aCAtIHNhbWUpKX07CiAgICAgIHJlcGxhY2VTZWxlY3Rpb24odGV4dC5zbGljZShzYW1lKSwgImVuZCIpOwogICAgICBwcmV2SW5wdXQgPSB0ZXh0OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlc2V0SW5wdXQodXNlcikgewogICAgICBpZiAoIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSB7CiAgICAgICAgcHJldklucHV0ID0gIiI7CiAgICAgICAgaW5wdXQudmFsdWUgPSBnZXRTZWxlY3Rpb24oKTsKICAgICAgICBpbnB1dC5zZWxlY3QoKTsKICAgICAgfSBlbHNlIGlmICh1c2VyKSBwcmV2SW5wdXQgPSBpbnB1dC52YWx1ZSA9ICIiOwogICAgfQoKICAgIGZ1bmN0aW9uIGZvY3VzSW5wdXQoKSB7CiAgICAgIGlmICghb3B0aW9ucy5yZWFkT25seSkgaW5wdXQuZm9jdXMoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzY3JvbGxFZGl0b3JJbnRvVmlldygpIHsKICAgICAgaWYgKCFjdXJzb3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSByZXR1cm47CiAgICAgIHZhciByZWN0ID0gY3Vyc29yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAvLyBJRSByZXR1cm5zIGJvZ3VzIGNvb3JkaW5hdGVzIHdoZW4gdGhlIGluc3RhbmNlIHNpdHMgaW5zaWRlIG9mIGFuIGlmcmFtZSBhbmQgdGhlIGN1cnNvciBpcyBoaWRkZW4KICAgICAgaWYgKGllICYmIHJlY3QudG9wID09IHJlY3QuYm90dG9tKSByZXR1cm47CiAgICAgIHZhciB3aW5IID0gd2luZG93LmlubmVySGVpZ2h0IHx8IE1hdGgubWF4KGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0KTsKICAgICAgaWYgKHJlY3QudG9wIDwgMCB8fCByZWN0LmJvdHRvbSA+IHdpbkgpIGN1cnNvci5zY3JvbGxJbnRvVmlldygpOwogICAgfQogICAgZnVuY3Rpb24gc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKSB7CiAgICAgIHZhciBjdXJzb3IgPSBsb2NhbENvb3JkcyhzZWwuaW52ZXJ0ZWQgPyBzZWwuZnJvbSA6IHNlbC50byk7CiAgICAgIHZhciB4ID0gb3B0aW9ucy5saW5lV3JhcHBpbmcgPyBNYXRoLm1pbihjdXJzb3IueCwgbGluZVNwYWNlLm9mZnNldFdpZHRoKSA6IGN1cnNvci54OwogICAgICByZXR1cm4gc2Nyb2xsSW50b1ZpZXcoeCwgY3Vyc29yLnksIHgsIGN1cnNvci55Qm90KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KHgxLCB5MSwgeDIsIHkyKSB7CiAgICAgIHZhciBwbCA9IHBhZGRpbmdMZWZ0KCksIHB0ID0gcGFkZGluZ1RvcCgpLCBsaCA9IHRleHRIZWlnaHQoKTsKICAgICAgeTEgKz0gcHQ7IHkyICs9IHB0OyB4MSArPSBwbDsgeDIgKz0gcGw7CiAgICAgIHZhciBzY3JlZW4gPSBzY3JvbGxlci5jbGllbnRIZWlnaHQsIHNjcmVlbnRvcCA9IHNjcm9sbGVyLnNjcm9sbFRvcCwgc2Nyb2xsZWQgPSBmYWxzZSwgcmVzdWx0ID0gdHJ1ZTsKICAgICAgaWYgKHkxIDwgc2NyZWVudG9wKSB7c2Nyb2xsZXIuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgeTEgLSAyKmxoKTsgc2Nyb2xsZWQgPSB0cnVlO30KICAgICAgZWxzZSBpZiAoeTIgPiBzY3JlZW50b3AgKyBzY3JlZW4pIHtzY3JvbGxlci5zY3JvbGxUb3AgPSB5MiArIGxoIC0gc2NyZWVuOyBzY3JvbGxlZCA9IHRydWU7fQoKICAgICAgdmFyIHNjcmVlbncgPSBzY3JvbGxlci5jbGllbnRXaWR0aCwgc2NyZWVubGVmdCA9IHNjcm9sbGVyLnNjcm9sbExlZnQ7CiAgICAgIHZhciBndXR0ZXJ3ID0gb3B0aW9ucy5maXhlZEd1dHRlciA/IGd1dHRlci5jbGllbnRXaWR0aCA6IDA7CiAgICAgIGlmICh4MSA8IHNjcmVlbmxlZnQgKyBndXR0ZXJ3KSB7CiAgICAgICAgaWYgKHgxIDwgNTApIHgxID0gMDsKICAgICAgICBzY3JvbGxlci5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgeDEgLSAxMCAtIGd1dHRlcncpOwogICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgfQogICAgICBlbHNlIGlmICh4MiA+IHNjcmVlbncgKyBzY3JlZW5sZWZ0IC0gMykgewogICAgICAgIHNjcm9sbGVyLnNjcm9sbExlZnQgPSB4MiArIDEwIC0gc2NyZWVudzsKICAgICAgICBzY3JvbGxlZCA9IHRydWU7CiAgICAgICAgaWYgKHgyID4gY29kZS5jbGllbnRXaWR0aCkgcmVzdWx0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHNjcm9sbGVkICYmIG9wdGlvbnMub25TY3JvbGwpIG9wdGlvbnMub25TY3JvbGwoaW5zdGFuY2UpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGZ1bmN0aW9uIHZpc2libGVMaW5lcygpIHsKICAgICAgdmFyIGxoID0gdGV4dEhlaWdodCgpLCB0b3AgPSBzY3JvbGxlci5zY3JvbGxUb3AgLSBwYWRkaW5nVG9wKCk7CiAgICAgIHZhciBmcm9tX2hlaWdodCA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IodG9wIC8gbGgpKTsKICAgICAgdmFyIHRvX2hlaWdodCA9IE1hdGguY2VpbCgodG9wICsgc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSAvIGxoKTsKICAgICAgcmV0dXJuIHtmcm9tOiBsaW5lQXRIZWlnaHQoZG9jLCBmcm9tX2hlaWdodCksCiAgICAgICAgICAgICAgdG86IGxpbmVBdEhlaWdodChkb2MsIHRvX2hlaWdodCl9OwogICAgfQogICAgLy8gVXNlcyBhIHNldCBvZiBjaGFuZ2VzIHBsdXMgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIHRvCiAgICAvLyBkZXRlcm1pbmUgd2hpY2ggRE9NIHVwZGF0ZXMgaGF2ZSB0byBiZSBtYWRlLCBhbmQgbWFrZXMgdGhlCiAgICAvLyB1cGRhdGVzLgogICAgZnVuY3Rpb24gdXBkYXRlRGlzcGxheShjaGFuZ2VzLCBzdXBwcmVzc0NhbGxiYWNrKSB7CiAgICAgIGlmICghc2Nyb2xsZXIuY2xpZW50V2lkdGgpIHsKICAgICAgICBzaG93aW5nRnJvbSA9IHNob3dpbmdUbyA9IGRpc3BsYXlPZmZzZXQgPSAwOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAvLyBDb21wdXRlIHRoZSBuZXcgdmlzaWJsZSB3aW5kb3cKICAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxlTGluZXMoKTsKICAgICAgLy8gQmFpbCBvdXQgaWYgdGhlIHZpc2libGUgYXJlYSBpcyBhbHJlYWR5IHJlbmRlcmVkIGFuZCBub3RoaW5nIGNoYW5nZWQuCiAgICAgIGlmIChjaGFuZ2VzICE9PSB0cnVlICYmIGNoYW5nZXMubGVuZ3RoID09IDAgJiYgdmlzaWJsZS5mcm9tID49IHNob3dpbmdGcm9tICYmIHZpc2libGUudG8gPD0gc2hvd2luZ1RvKSByZXR1cm47CiAgICAgIHZhciBmcm9tID0gTWF0aC5tYXgodmlzaWJsZS5mcm9tIC0gMTAwLCAwKSwgdG8gPSBNYXRoLm1pbihkb2Muc2l6ZSwgdmlzaWJsZS50byArIDEwMCk7CiAgICAgIGlmIChzaG93aW5nRnJvbSA8IGZyb20gJiYgZnJvbSAtIHNob3dpbmdGcm9tIDwgMjApIGZyb20gPSBzaG93aW5nRnJvbTsKICAgICAgaWYgKHNob3dpbmdUbyA+IHRvICYmIHNob3dpbmdUbyAtIHRvIDwgMjApIHRvID0gTWF0aC5taW4oZG9jLnNpemUsIHNob3dpbmdUbyk7CgogICAgICAvLyBDcmVhdGUgYSByYW5nZSBvZiB0aGVvcmV0aWNhbGx5IGludGFjdCBsaW5lcywgYW5kIHB1bmNoIGhvbGVzCiAgICAgIC8vIGluIHRoYXQgdXNpbmcgdGhlIGNoYW5nZSBpbmZvLgogICAgICB2YXIgaW50YWN0ID0gY2hhbmdlcyA9PT0gdHJ1ZSA/IFtdIDoKICAgICAgICBjb21wdXRlSW50YWN0KFt7ZnJvbTogc2hvd2luZ0Zyb20sIHRvOiBzaG93aW5nVG8sIGRvbVN0YXJ0OiAwfV0sIGNoYW5nZXMpOwogICAgICAvLyBDbGlwIG9mZiB0aGUgcGFydHMgdGhhdCB3b24ndCBiZSB2aXNpYmxlCiAgICAgIHZhciBpbnRhY3RMaW5lcyA9IDA7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIHJhbmdlID0gaW50YWN0W2ldOwogICAgICAgIGlmIChyYW5nZS5mcm9tIDwgZnJvbSkge3JhbmdlLmRvbVN0YXJ0ICs9IChmcm9tIC0gcmFuZ2UuZnJvbSk7IHJhbmdlLmZyb20gPSBmcm9tO30KICAgICAgICBpZiAocmFuZ2UudG8gPiB0bykgcmFuZ2UudG8gPSB0bzsKICAgICAgICBpZiAocmFuZ2UuZnJvbSA+PSByYW5nZS50bykgaW50YWN0LnNwbGljZShpLS0sIDEpOwogICAgICAgIGVsc2UgaW50YWN0TGluZXMgKz0gcmFuZ2UudG8gLSByYW5nZS5mcm9tOwogICAgICB9CiAgICAgIGlmIChpbnRhY3RMaW5lcyA9PSB0byAtIGZyb20pIHJldHVybjsKICAgICAgaW50YWN0LnNvcnQoZnVuY3Rpb24oYSwgYikge3JldHVybiBhLmRvbVN0YXJ0IC0gYi5kb21TdGFydDt9KTsKCiAgICAgIHZhciB0aCA9IHRleHRIZWlnaHQoKSwgZ3V0dGVyRGlzcGxheSA9IGd1dHRlci5zdHlsZS5kaXNwbGF5OwogICAgICBsaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgcGF0Y2hEaXNwbGF5KGZyb20sIHRvLCBpbnRhY3QpOwogICAgICBsaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAiIjsKCiAgICAgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxpZ24gd2l0aCB0aGUgbGluZXMgaXQncyBzdXBwb3NlZAogICAgICAvLyB0byBiZSBzaG93aW5nICh3aGljaCB3aWxsIGNvdmVyIHRoZSB2aXNpYmxlIGRpc3BsYXkpCiAgICAgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IHNob3dpbmdGcm9tIHx8IHRvICE9IHNob3dpbmdUbyB8fCBsYXN0U2l6ZUMgIT0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgdGg7CiAgICAgIC8vIFRoaXMgaXMganVzdCBhIGJvZ3VzIGZvcm11bGEgdGhhdCBkZXRlY3RzIHdoZW4gdGhlIGVkaXRvciBpcwogICAgICAvLyByZXNpemVkIG9yIHRoZSBmb250IHNpemUgY2hhbmdlcy4KICAgICAgaWYgKGRpZmZlcmVudCkgbGFzdFNpemVDID0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgdGg7CiAgICAgIHNob3dpbmdGcm9tID0gZnJvbTsgc2hvd2luZ1RvID0gdG87CiAgICAgIGRpc3BsYXlPZmZzZXQgPSBoZWlnaHRBdExpbmUoZG9jLCBmcm9tKTsKICAgICAgbW92ZXIuc3R5bGUudG9wID0gKGRpc3BsYXlPZmZzZXQgKiB0aCkgKyAicHgiOwogICAgICBjb2RlLnN0eWxlLmhlaWdodCA9IChkb2MuaGVpZ2h0ICogdGggKyAyICogcGFkZGluZ1RvcCgpKSArICJweCI7CgogICAgICAvLyBTaW5jZSB0aGlzIGlzIGFsbCByYXRoZXIgZXJyb3IgcHJvbmUsIGl0IGlzIGhvbm91cmVkIHdpdGggdGhlCiAgICAgIC8vIG9ubHkgYXNzZXJ0aW9uIGluIHRoZSB3aG9sZSBmaWxlLgogICAgICBpZiAobGluZURpdi5jaGlsZE5vZGVzLmxlbmd0aCAhPSBzaG93aW5nVG8gLSBzaG93aW5nRnJvbSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJBRCBQQVRDSCEgIiArIEpTT04uc3RyaW5naWZ5KGludGFjdCkgKyAiIHNpemU9IiArIChzaG93aW5nVG8gLSBzaG93aW5nRnJvbSkgKwogICAgICAgICAgICAgICAgICAgICAgICAiIG5vZGVzPSIgKyBsaW5lRGl2LmNoaWxkTm9kZXMubGVuZ3RoKTsKCiAgICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgewogICAgICAgIG1heFdpZHRoID0gc2Nyb2xsZXIuY2xpZW50V2lkdGg7CiAgICAgICAgdmFyIGN1ck5vZGUgPSBsaW5lRGl2LmZpcnN0Q2hpbGQ7CiAgICAgICAgZG9jLml0ZXIoc2hvd2luZ0Zyb20sIHNob3dpbmdUbywgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgaWYgKCFsaW5lLmhpZGRlbikgewogICAgICAgICAgICB2YXIgaGVpZ2h0ID0gTWF0aC5yb3VuZChjdXJOb2RlLm9mZnNldEhlaWdodCAvIHRoKSB8fCAxOwogICAgICAgICAgICBpZiAobGluZS5oZWlnaHQgIT0gaGVpZ2h0KSB7dXBkYXRlTGluZUhlaWdodChsaW5lLCBoZWlnaHQpOyBndXR0ZXJEaXJ0eSA9IHRydWU7fQogICAgICAgICAgfQogICAgICAgICAgY3VyTm9kZSA9IGN1ck5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG1heFdpZHRoID09IG51bGwpIG1heFdpZHRoID0gc3RyaW5nV2lkdGgobWF4TGluZSk7CiAgICAgICAgaWYgKG1heFdpZHRoID4gc2Nyb2xsZXIuY2xpZW50V2lkdGgpIHsKICAgICAgICAgIGxpbmVTcGFjZS5zdHlsZS53aWR0aCA9IG1heFdpZHRoICsgInB4IjsKICAgICAgICAgIC8vIE5lZWRlZCB0byBwcmV2ZW50IG9kZCB3cmFwcGluZy9oaWRpbmcgb2Ygd2lkZ2V0cyBwbGFjZWQgaW4gaGVyZS4KICAgICAgICAgIGNvZGUuc3R5bGUud2lkdGggPSAiIjsKICAgICAgICAgIGNvZGUuc3R5bGUud2lkdGggPSBzY3JvbGxlci5zY3JvbGxXaWR0aCArICJweCI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpbmVTcGFjZS5zdHlsZS53aWR0aCA9IGNvZGUuc3R5bGUud2lkdGggPSAiIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSBndXR0ZXJEaXNwbGF5OwogICAgICBpZiAoZGlmZmVyZW50IHx8IGd1dHRlckRpcnR5KSB1cGRhdGVHdXR0ZXIoKTsKICAgICAgdXBkYXRlQ3Vyc29yKCk7CiAgICAgIGlmICghc3VwcHJlc3NDYWxsYmFjayAmJiBvcHRpb25zLm9uVXBkYXRlKSBvcHRpb25zLm9uVXBkYXRlKGluc3RhbmNlKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gY29tcHV0ZUludGFjdChpbnRhY3QsIGNoYW5nZXMpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGFuZ2VzLmxlbmd0aCB8fCAwOyBpIDwgbDsgKytpKSB7CiAgICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbaV0sIGludGFjdDIgPSBbXSwgZGlmZiA9IGNoYW5nZS5kaWZmIHx8IDA7CiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGwyID0gaW50YWN0Lmxlbmd0aDsgaiA8IGwyOyArK2opIHsKICAgICAgICAgIHZhciByYW5nZSA9IGludGFjdFtqXTsKICAgICAgICAgIGlmIChjaGFuZ2UudG8gPD0gcmFuZ2UuZnJvbSAmJiBjaGFuZ2UuZGlmZikKICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5nZS5mcm9tICsgZGlmZiwgdG86IHJhbmdlLnRvICsgZGlmZiwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb21TdGFydDogcmFuZ2UuZG9tU3RhcnR9KTsKICAgICAgICAgIGVsc2UgaWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tIHx8IGNoYW5nZS5mcm9tID49IHJhbmdlLnRvKQogICAgICAgICAgICBpbnRhY3QyLnB1c2gocmFuZ2UpOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChjaGFuZ2UuZnJvbSA+IHJhbmdlLmZyb20pCiAgICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5nZS5mcm9tLCB0bzogY2hhbmdlLmZyb20sIGRvbVN0YXJ0OiByYW5nZS5kb21TdGFydH0pOwogICAgICAgICAgICBpZiAoY2hhbmdlLnRvIDwgcmFuZ2UudG8pCiAgICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiBjaGFuZ2UudG8gKyBkaWZmLCB0bzogcmFuZ2UudG8gKyBkaWZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0ICsgKGNoYW5nZS50byAtIHJhbmdlLmZyb20pfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGludGFjdCA9IGludGFjdDI7CiAgICAgIH0KICAgICAgcmV0dXJuIGludGFjdDsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXRjaERpc3BsYXkoZnJvbSwgdG8sIGludGFjdCkgewogICAgICAvLyBUaGUgZmlyc3QgcGFzcyByZW1vdmVzIHRoZSBET00gbm9kZXMgdGhhdCBhcmVuJ3QgaW50YWN0LgogICAgICBpZiAoIWludGFjdC5sZW5ndGgpIGxpbmVEaXYuaW5uZXJIVE1MID0gIiI7CiAgICAgIGVsc2UgewogICAgICAgIGZ1bmN0aW9uIGtpbGxOb2RlKG5vZGUpIHsKICAgICAgICAgIHZhciB0bXAgPSBub2RlLm5leHRTaWJsaW5nOwogICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOwogICAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgICB9CiAgICAgICAgdmFyIGRvbVBvcyA9IDAsIGN1ck5vZGUgPSBsaW5lRGl2LmZpcnN0Q2hpbGQsIG47CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRhY3QubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHZhciBjdXIgPSBpbnRhY3RbaV07CiAgICAgICAgICB3aGlsZSAoY3VyLmRvbVN0YXJ0ID4gZG9tUG9zKSB7Y3VyTm9kZSA9IGtpbGxOb2RlKGN1ck5vZGUpOyBkb21Qb3MrKzt9CiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgZSA9IGN1ci50byAtIGN1ci5mcm9tOyBqIDwgZTsgKytqKSB7Y3VyTm9kZSA9IGN1ck5vZGUubmV4dFNpYmxpbmc7IGRvbVBvcysrO30KICAgICAgICB9CiAgICAgICAgd2hpbGUgKGN1ck5vZGUpIGN1ck5vZGUgPSBraWxsTm9kZShjdXJOb2RlKTsKICAgICAgfQogICAgICAvLyBUaGlzIHBhc3MgZmlsbHMgaW4gdGhlIGxpbmVzIHRoYXQgYWN0dWFsbHkgY2hhbmdlZC4KICAgICAgdmFyIG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQoKSwgY3VyTm9kZSA9IGxpbmVEaXYuZmlyc3RDaGlsZCwgaiA9IGZyb207CiAgICAgIHZhciBzZnJvbSA9IHNlbC5mcm9tLmxpbmUsIHN0byA9IHNlbC50by5saW5lLCBpblNlbCA9IHNmcm9tIDwgZnJvbSAmJiBzdG8gPj0gZnJvbTsKICAgICAgdmFyIHNjcmF0Y2ggPSB0YXJnZXREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwgbmV3RWx0OwogICAgICBkb2MuaXRlcihmcm9tLCB0bywgZnVuY3Rpb24obGluZSkgewogICAgICAgIHZhciBjaDEgPSBudWxsLCBjaDIgPSBudWxsOwogICAgICAgIGlmIChpblNlbCkgewogICAgICAgICAgY2gxID0gMDsKICAgICAgICAgIGlmIChzdG8gPT0gaikge2luU2VsID0gZmFsc2U7IGNoMiA9IHNlbC50by5jaDt9CiAgICAgICAgfSBlbHNlIGlmIChzZnJvbSA9PSBqKSB7CiAgICAgICAgICBpZiAoc3RvID09IGopIHtjaDEgPSBzZWwuZnJvbS5jaDsgY2gyID0gc2VsLnRvLmNoO30KICAgICAgICAgIGVsc2Uge2luU2VsID0gdHJ1ZTsgY2gxID0gc2VsLmZyb20uY2g7fQogICAgICAgIH0KICAgICAgICBpZiAobmV4dEludGFjdCAmJiBuZXh0SW50YWN0LnRvID09IGopIG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQoKTsKICAgICAgICBpZiAoIW5leHRJbnRhY3QgfHwgbmV4dEludGFjdC5mcm9tID4gaikgewogICAgICAgICAgaWYgKGxpbmUuaGlkZGVuKSBzY3JhdGNoLmlubmVySFRNTCA9ICI8cHJlPjwvcHJlPiI7CiAgICAgICAgICBlbHNlIHNjcmF0Y2guaW5uZXJIVE1MID0gbGluZS5nZXRIVE1MKGNoMSwgY2gyLCB0cnVlLCB0YWJUZXh0KTsKICAgICAgICAgIGxpbmVEaXYuaW5zZXJ0QmVmb3JlKHNjcmF0Y2guZmlyc3RDaGlsZCwgY3VyTm9kZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1ck5vZGUgPSBjdXJOb2RlLm5leHRTaWJsaW5nOwogICAgICAgIH0KICAgICAgICArK2o7CiAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZUd1dHRlcigpIHsKICAgICAgaWYgKCFvcHRpb25zLmd1dHRlciAmJiAhb3B0aW9ucy5saW5lTnVtYmVycykgcmV0dXJuOwogICAgICB2YXIgaFRleHQgPSBtb3Zlci5vZmZzZXRIZWlnaHQsIGhFZGl0b3IgPSBzY3JvbGxlci5jbGllbnRIZWlnaHQ7CiAgICAgIGd1dHRlci5zdHlsZS5oZWlnaHQgPSAoaFRleHQgLSBoRWRpdG9yIDwgMiA/IGhFZGl0b3IgOiBoVGV4dCkgKyAicHgiOwogICAgICB2YXIgaHRtbCA9IFtdLCBpID0gc2hvd2luZ0Zyb207CiAgICAgIGRvYy5pdGVyKHNob3dpbmdGcm9tLCBNYXRoLm1heChzaG93aW5nVG8sIHNob3dpbmdGcm9tICsgMSksIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBpZiAobGluZS5oaWRkZW4pIHsKICAgICAgICAgIGh0bWwucHVzaCgiPHByZT48L3ByZT4iKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIG1hcmtlciA9IGxpbmUuZ3V0dGVyTWFya2VyOwogICAgICAgICAgdmFyIHRleHQgPSBvcHRpb25zLmxpbmVOdW1iZXJzID8gaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyIDogbnVsbDsKICAgICAgICAgIGlmIChtYXJrZXIgJiYgbWFya2VyLnRleHQpCiAgICAgICAgICAgIHRleHQgPSBtYXJrZXIudGV4dC5yZXBsYWNlKCIlTiUiLCB0ZXh0ICE9IG51bGwgPyB0ZXh0IDogIiIpOwogICAgICAgICAgZWxzZSBpZiAodGV4dCA9PSBudWxsKQogICAgICAgICAgICB0ZXh0ID0gIlx1MDBhMCI7CiAgICAgICAgICBodG1sLnB1c2goKG1hcmtlciAmJiBtYXJrZXIuc3R5bGUgPyAnPHByZSBjbGFzcz0iJyArIG1hcmtlci5zdHlsZSArICciPicgOiAiPHByZT4iKSwgdGV4dCk7CiAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGxpbmUuaGVpZ2h0OyArK2opIGh0bWwucHVzaCgiPGJyLz4mIzE2MDsiKTsKICAgICAgICAgIGh0bWwucHVzaCgiPC9wcmU+Iik7CiAgICAgICAgfQogICAgICAgICsraTsKICAgICAgfSk7CiAgICAgIGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICBndXR0ZXJUZXh0LmlubmVySFRNTCA9IGh0bWwuam9pbigiIik7CiAgICAgIHZhciBtaW53aWR0aCA9IFN0cmluZyhkb2Muc2l6ZSkubGVuZ3RoLCBmaXJzdE5vZGUgPSBndXR0ZXJUZXh0LmZpcnN0Q2hpbGQsIHZhbCA9IGVsdFRleHQoZmlyc3ROb2RlKSwgcGFkID0gIiI7CiAgICAgIHdoaWxlICh2YWwubGVuZ3RoICsgcGFkLmxlbmd0aCA8IG1pbndpZHRoKSBwYWQgKz0gIlx1MDBhMCI7CiAgICAgIGlmIChwYWQpIGZpcnN0Tm9kZS5pbnNlcnRCZWZvcmUodGFyZ2V0RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocGFkKSwgZmlyc3ROb2RlLmZpcnN0Q2hpbGQpOwogICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICBsaW5lU3BhY2Uuc3R5bGUubWFyZ2luTGVmdCA9IGd1dHRlci5vZmZzZXRXaWR0aCArICJweCI7CiAgICAgIGd1dHRlckRpcnR5ID0gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGVDdXJzb3IoKSB7CiAgICAgIHZhciBoZWFkID0gc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8sIGxoID0gdGV4dEhlaWdodCgpOwogICAgICB2YXIgcG9zID0gbG9jYWxDb29yZHMoaGVhZCwgdHJ1ZSk7CiAgICAgIHZhciB3cmFwT2ZmID0gZWx0T2Zmc2V0KHdyYXBwZXIpLCBsaW5lT2ZmID0gZWx0T2Zmc2V0KGxpbmVEaXYpOwogICAgICBpbnB1dERpdi5zdHlsZS50b3AgPSAocG9zLnkgKyBsaW5lT2ZmLnRvcCAtIHdyYXBPZmYudG9wKSArICJweCI7CiAgICAgIGlucHV0RGl2LnN0eWxlLmxlZnQgPSAocG9zLnggKyBsaW5lT2ZmLmxlZnQgLSB3cmFwT2ZmLmxlZnQpICsgInB4IjsKICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSB7CiAgICAgICAgY3Vyc29yLnN0eWxlLnRvcCA9IHBvcy55ICsgInB4IjsKICAgICAgICBjdXJzb3Iuc3R5bGUubGVmdCA9IChvcHRpb25zLmxpbmVXcmFwcGluZyA/IE1hdGgubWluKHBvcy54LCBsaW5lU3BhY2Uub2Zmc2V0V2lkdGgpIDogcG9zLngpICsgInB4IjsKICAgICAgICBjdXJzb3Iuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICB9CiAgICAgIGVsc2UgY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0U2hpZnQodmFsKSB7CiAgICAgIGlmICh2YWwpIHNoaWZ0U2VsZWN0aW5nID0gc2hpZnRTZWxlY3RpbmcgfHwgKHNlbC5pbnZlcnRlZCA/IHNlbC50byA6IHNlbC5mcm9tKTsKICAgICAgZWxzZSBzaGlmdFNlbGVjdGluZyA9IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRTZWxlY3Rpb25Vc2VyKGZyb20sIHRvKSB7CiAgICAgIHZhciBzaCA9IHNoaWZ0U2VsZWN0aW5nICYmIGNsaXBQb3Moc2hpZnRTZWxlY3RpbmcpOwogICAgICBpZiAoc2gpIHsKICAgICAgICBpZiAocG9zTGVzcyhzaCwgZnJvbSkpIGZyb20gPSBzaDsKICAgICAgICBlbHNlIGlmIChwb3NMZXNzKHRvLCBzaCkpIHRvID0gc2g7CiAgICAgIH0KICAgICAgc2V0U2VsZWN0aW9uKGZyb20sIHRvKTsKICAgICAgdXNlclNlbENoYW5nZSA9IHRydWU7CiAgICB9CiAgICAvLyBVcGRhdGUgdGhlIHNlbGVjdGlvbi4gTGFzdCB0d28gYXJncyBhcmUgb25seSB1c2VkIGJ5CiAgICAvLyB1cGRhdGVMaW5lcywgc2luY2UgdGhleSBoYXZlIHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbGluZQogICAgLy8gbnVtYmVycyBiZWZvcmUgdGhlIHVwZGF0ZS4KICAgIGZ1bmN0aW9uIHNldFNlbGVjdGlvbihmcm9tLCB0bywgb2xkRnJvbSwgb2xkVG8pIHsKICAgICAgZ29hbENvbHVtbiA9IG51bGw7CiAgICAgIGlmIChvbGRGcm9tID09IG51bGwpIHtvbGRGcm9tID0gc2VsLmZyb20ubGluZTsgb2xkVG8gPSBzZWwudG8ubGluZTt9CiAgICAgIGlmIChwb3NFcShzZWwuZnJvbSwgZnJvbSkgJiYgcG9zRXEoc2VsLnRvLCB0bykpIHJldHVybjsKICAgICAgaWYgKHBvc0xlc3ModG8sIGZyb20pKSB7dmFyIHRtcCA9IHRvOyB0byA9IGZyb207IGZyb20gPSB0bXA7fQoKICAgICAgLy8gU2tpcCBvdmVyIGhpZGRlbiBsaW5lcy4KICAgICAgaWYgKGZyb20ubGluZSAhPSBvbGRGcm9tKSBmcm9tID0gc2tpcEhpZGRlbihmcm9tLCBvbGRGcm9tLCBzZWwuZnJvbS5jaCk7CiAgICAgIGlmICh0by5saW5lICE9IG9sZFRvKSB0byA9IHNraXBIaWRkZW4odG8sIG9sZFRvLCBzZWwudG8uY2gpOwoKICAgICAgaWYgKHBvc0VxKGZyb20sIHRvKSkgc2VsLmludmVydGVkID0gZmFsc2U7CiAgICAgIGVsc2UgaWYgKHBvc0VxKGZyb20sIHNlbC50bykpIHNlbC5pbnZlcnRlZCA9IGZhbHNlOwogICAgICBlbHNlIGlmIChwb3NFcSh0bywgc2VsLmZyb20pKSBzZWwuaW52ZXJ0ZWQgPSB0cnVlOwoKICAgICAgLy8gU29tZSB1Z2x5IGxvZ2ljIHVzZWQgdG8gb25seSBtYXJrIHRoZSBsaW5lcyB0aGF0IGFjdHVhbGx5IGRpZAogICAgICAvLyBzZWUgYSBjaGFuZ2UgaW4gc2VsZWN0aW9uIGFzIGNoYW5nZWQsIHJhdGhlciB0aGFuIHRoZSB3aG9sZQogICAgICAvLyBzZWxlY3RlZCByYW5nZS4KICAgICAgaWYgKHBvc0VxKGZyb20sIHRvKSkgewogICAgICAgIGlmICghcG9zRXEoc2VsLmZyb20sIHNlbC50bykpCiAgICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IG9sZEZyb20sIHRvOiBvbGRUbyArIDF9KTsKICAgICAgfQogICAgICBlbHNlIGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgewogICAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0bzogdG8ubGluZSArIDF9KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoIXBvc0VxKGZyb20sIHNlbC5mcm9tKSkgewogICAgICAgICAgaWYgKGZyb20ubGluZSA8IG9sZEZyb20pCiAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0bzogTWF0aC5taW4odG8ubGluZSwgb2xkRnJvbSkgKyAxfSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogb2xkRnJvbSwgdG86IE1hdGgubWluKG9sZFRvLCBmcm9tLmxpbmUpICsgMX0pOwogICAgICAgIH0KICAgICAgICBpZiAoIXBvc0VxKHRvLCBzZWwudG8pKSB7CiAgICAgICAgICBpZiAodG8ubGluZSA8IG9sZFRvKQogICAgICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IE1hdGgubWF4KG9sZEZyb20sIGZyb20ubGluZSksIHRvOiBvbGRUbyArIDF9KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBNYXRoLm1heChmcm9tLmxpbmUsIG9sZFRvKSwgdG86IHRvLmxpbmUgKyAxfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNlbC5mcm9tID0gZnJvbTsgc2VsLnRvID0gdG87CiAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gc2tpcEhpZGRlbihwb3MsIG9sZExpbmUsIG9sZENoKSB7CiAgICAgIGZ1bmN0aW9uIGdldE5vbkhpZGRlbihkaXIpIHsKICAgICAgICB2YXIgbE5vID0gcG9zLmxpbmUgKyBkaXIsIGVuZCA9IGRpciA9PSAxID8gZG9jLnNpemUgOiAtMTsKICAgICAgICB3aGlsZSAobE5vICE9IGVuZCkgewogICAgICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGxObyk7CiAgICAgICAgICBpZiAoIWxpbmUuaGlkZGVuKSB7CiAgICAgICAgICAgIHZhciBjaCA9IHBvcy5jaDsKICAgICAgICAgICAgaWYgKGNoID4gb2xkQ2ggfHwgY2ggPiBsaW5lLnRleHQubGVuZ3RoKSBjaCA9IGxpbmUudGV4dC5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiB7bGluZTogbE5vLCBjaDogY2h9OwogICAgICAgICAgfQogICAgICAgICAgbE5vICs9IGRpcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKHBvcy5saW5lKTsKICAgICAgaWYgKCFsaW5lLmhpZGRlbikgcmV0dXJuIHBvczsKICAgICAgaWYgKHBvcy5saW5lID49IG9sZExpbmUpIHJldHVybiBnZXROb25IaWRkZW4oMSkgfHwgZ2V0Tm9uSGlkZGVuKC0xKTsKICAgICAgZWxzZSByZXR1cm4gZ2V0Tm9uSGlkZGVuKC0xKSB8fCBnZXROb25IaWRkZW4oMSk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRDdXJzb3IobGluZSwgY2gsIHVzZXIpIHsKICAgICAgdmFyIHBvcyA9IGNsaXBQb3Moe2xpbmU6IGxpbmUsIGNoOiBjaCB8fCAwfSk7CiAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNlciA6IHNldFNlbGVjdGlvbikocG9zLCBwb3MpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsaXBMaW5lKG4pIHtyZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4obiwgZG9jLnNpemUtMSkpO30KICAgIGZ1bmN0aW9uIGNsaXBQb3MocG9zKSB7CiAgICAgIGlmIChwb3MubGluZSA8IDApIHJldHVybiB7bGluZTogMCwgY2g6IDB9OwogICAgICBpZiAocG9zLmxpbmUgPj0gZG9jLnNpemUpIHJldHVybiB7bGluZTogZG9jLnNpemUtMSwgY2g6IGdldExpbmUoZG9jLnNpemUtMSkudGV4dC5sZW5ndGh9OwogICAgICB2YXIgY2ggPSBwb3MuY2gsIGxpbmVsZW4gPSBnZXRMaW5lKHBvcy5saW5lKS50ZXh0Lmxlbmd0aDsKICAgICAgaWYgKGNoID09IG51bGwgfHwgY2ggPiBsaW5lbGVuKSByZXR1cm4ge2xpbmU6IHBvcy5saW5lLCBjaDogbGluZWxlbn07CiAgICAgIGVsc2UgaWYgKGNoIDwgMCkgcmV0dXJuIHtsaW5lOiBwb3MubGluZSwgY2g6IDB9OwogICAgICBlbHNlIHJldHVybiBwb3M7CiAgICB9CgogICAgZnVuY3Rpb24gZmluZFBvc0goZGlyLCB1bml0KSB7CiAgICAgIHZhciBlbmQgPSBzZWwuaW52ZXJ0ZWQgPyBzZWwuZnJvbSA6IHNlbC50bywgbGluZSA9IGVuZC5saW5lLCBjaCA9IGVuZC5jaDsKICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGxpbmUpOwogICAgICBmdW5jdGlvbiBmaW5kTmV4dExpbmUoKSB7CiAgICAgICAgZm9yICh2YXIgbCA9IGxpbmUgKyBkaXIsIGUgPSBkaXIgPCAwID8gLTEgOiBkb2Muc2l6ZTsgbCAhPSBlOyBsICs9IGRpcikgewogICAgICAgICAgdmFyIGxvID0gZ2V0TGluZShsKTsKICAgICAgICAgIGlmICghbG8uaGlkZGVuKSB7IGxpbmUgPSBsOyBsaW5lT2JqID0gbG87IHJldHVybiB0cnVlOyB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIG1vdmVPbmNlKGJvdW5kVG9MaW5lKSB7CiAgICAgICAgaWYgKGNoID09IChkaXIgPCAwID8gMCA6IGxpbmVPYmoudGV4dC5sZW5ndGgpKSB7CiAgICAgICAgICBpZiAoIWJvdW5kVG9MaW5lICYmIGZpbmROZXh0TGluZSgpKSBjaCA9IGRpciA8IDAgPyBsaW5lT2JqLnRleHQubGVuZ3RoIDogMDsKICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSBjaCArPSBkaXI7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKHVuaXQgPT0gImNoYXIiKSBtb3ZlT25jZSgpOwogICAgICBlbHNlIGlmICh1bml0ID09ICJjb2x1bW4iKSBtb3ZlT25jZSh0cnVlKTsKICAgICAgZWxzZSBpZiAodW5pdCA9PSAid29yZCIpIHsKICAgICAgICB2YXIgc2F3V29yZCA9IGZhbHNlOwogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIGlmIChkaXIgPCAwKSBpZiAoIW1vdmVPbmNlKCkpIGJyZWFrOwogICAgICAgICAgaWYgKGlzV29yZENoYXIobGluZU9iai50ZXh0LmNoYXJBdChjaCkpKSBzYXdXb3JkID0gdHJ1ZTsKICAgICAgICAgIGVsc2UgaWYgKHNhd1dvcmQpIHtpZiAoZGlyIDwgMCkge2RpciA9IDE7IG1vdmVPbmNlKCk7fSBicmVhazt9CiAgICAgICAgICBpZiAoZGlyID4gMCkgaWYgKCFtb3ZlT25jZSgpKSBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lLCBjaDogY2h9OwogICAgfQogICAgZnVuY3Rpb24gbW92ZUgoZGlyLCB1bml0KSB7CiAgICAgIHZhciBwb3MgPSBkaXIgPCAwID8gc2VsLmZyb20gOiBzZWwudG87CiAgICAgIGlmIChzaGlmdFNlbGVjdGluZyB8fCBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcG9zID0gZmluZFBvc0goZGlyLCB1bml0KTsKICAgICAgc2V0Q3Vyc29yKHBvcy5saW5lLCBwb3MuY2gsIHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gZGVsZXRlSChkaXIsIHVuaXQpIHsKICAgICAgaWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgcmVwbGFjZVJhbmdlKCIiLCBzZWwuZnJvbSwgc2VsLnRvKTsKICAgICAgZWxzZSBpZiAoZGlyIDwgMCkgcmVwbGFjZVJhbmdlKCIiLCBmaW5kUG9zSChkaXIsIHVuaXQpLCBzZWwudG8pOwogICAgICBlbHNlIHJlcGxhY2VSYW5nZSgiIiwgc2VsLmZyb20sIGZpbmRQb3NIKGRpciwgdW5pdCkpOwogICAgICB1c2VyU2VsQ2hhbmdlID0gdHJ1ZTsKICAgIH0KICAgIHZhciBnb2FsQ29sdW1uID0gbnVsbDsKICAgIGZ1bmN0aW9uIG1vdmVWKGRpciwgdW5pdCkgewogICAgICB2YXIgZGlzdCA9IDAsIHBvcyA9IGxvY2FsQ29vcmRzKHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvLCB0cnVlKTsKICAgICAgaWYgKGdvYWxDb2x1bW4gIT0gbnVsbCkgcG9zLnggPSBnb2FsQ29sdW1uOwogICAgICBpZiAodW5pdCA9PSAicGFnZSIpIGRpc3QgPSBzY3JvbGxlci5jbGllbnRIZWlnaHQ7CiAgICAgIGVsc2UgaWYgKHVuaXQgPT0gImxpbmUiKSBkaXN0ID0gdGV4dEhlaWdodCgpOwogICAgICB2YXIgdGFyZ2V0ID0gY29vcmRzQ2hhcihwb3MueCwgcG9zLnkgKyBkaXN0ICogZGlyICsgMik7CiAgICAgIHNldEN1cnNvcih0YXJnZXQubGluZSwgdGFyZ2V0LmNoLCB0cnVlKTsKICAgICAgZ29hbENvbHVtbiA9IHBvcy54OwogICAgfQoKICAgIGZ1bmN0aW9uIHNlbGVjdFdvcmRBdChwb3MpIHsKICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKHBvcy5saW5lKS50ZXh0OwogICAgICB2YXIgc3RhcnQgPSBwb3MuY2gsIGVuZCA9IHBvcy5jaDsKICAgICAgd2hpbGUgKHN0YXJ0ID4gMCAmJiBpc1dvcmRDaGFyKGxpbmUuY2hhckF0KHN0YXJ0IC0gMSkpKSAtLXN0YXJ0OwogICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgaXNXb3JkQ2hhcihsaW5lLmNoYXJBdChlbmQpKSkgKytlbmQ7CiAgICAgIHNldFNlbGVjdGlvblVzZXIoe2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnR9LCB7bGluZTogcG9zLmxpbmUsIGNoOiBlbmR9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlbGVjdExpbmUobGluZSkgewogICAgICBzZXRTZWxlY3Rpb25Vc2VyKHtsaW5lOiBsaW5lLCBjaDogMH0sIHtsaW5lOiBsaW5lLCBjaDogZ2V0TGluZShsaW5lKS50ZXh0Lmxlbmd0aH0pOwogICAgfQogICAgZnVuY3Rpb24gaW5kZW50U2VsZWN0ZWQobW9kZSkgewogICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHJldHVybiBpbmRlbnRMaW5lKHNlbC5mcm9tLmxpbmUsIG1vZGUpOwogICAgICB2YXIgZSA9IHNlbC50by5saW5lIC0gKHNlbC50by5jaCA/IDAgOiAxKTsKICAgICAgZm9yICh2YXIgaSA9IHNlbC5mcm9tLmxpbmU7IGkgPD0gZTsgKytpKSBpbmRlbnRMaW5lKGksIG1vZGUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGluZGVudExpbmUobiwgaG93KSB7CiAgICAgIGlmICghaG93KSBob3cgPSAiYWRkIjsKICAgICAgaWYgKGhvdyA9PSAic21hcnQiKSB7CiAgICAgICAgaWYgKCFtb2RlLmluZGVudCkgaG93ID0gInByZXYiOwogICAgICAgIGVsc2UgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUobik7CiAgICAgIH0KCiAgICAgIHZhciBsaW5lID0gZ2V0TGluZShuKSwgY3VyU3BhY2UgPSBsaW5lLmluZGVudGF0aW9uKG9wdGlvbnMudGFiU2l6ZSksCiAgICAgICAgICBjdXJTcGFjZVN0cmluZyA9IGxpbmUudGV4dC5tYXRjaCgvXlxzKi8pWzBdLCBpbmRlbnRhdGlvbjsKICAgICAgaWYgKGhvdyA9PSAicHJldiIpIHsKICAgICAgICBpZiAobikgaW5kZW50YXRpb24gPSBnZXRMaW5lKG4tMSkuaW5kZW50YXRpb24ob3B0aW9ucy50YWJTaXplKTsKICAgICAgICBlbHNlIGluZGVudGF0aW9uID0gMDsKICAgICAgfQogICAgICBlbHNlIGlmIChob3cgPT0gInNtYXJ0IikgaW5kZW50YXRpb24gPSBtb2RlLmluZGVudChzdGF0ZSwgbGluZS50ZXh0LnNsaWNlKGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIGxpbmUudGV4dCk7CiAgICAgIGVsc2UgaWYgKGhvdyA9PSAiYWRkIikgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIG9wdGlvbnMuaW5kZW50VW5pdDsKICAgICAgZWxzZSBpZiAoaG93ID09ICJzdWJ0cmFjdCIpIGluZGVudGF0aW9uID0gY3VyU3BhY2UgLSBvcHRpb25zLmluZGVudFVuaXQ7CiAgICAgIGluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgaW5kZW50YXRpb24pOwogICAgICB2YXIgZGlmZiA9IGluZGVudGF0aW9uIC0gY3VyU3BhY2U7CgogICAgICBpZiAoIWRpZmYpIHsKICAgICAgICBpZiAoc2VsLmZyb20ubGluZSAhPSBuICYmIHNlbC50by5saW5lICE9IG4pIHJldHVybjsKICAgICAgICB2YXIgaW5kZW50U3RyaW5nID0gY3VyU3BhY2VTdHJpbmc7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIGluZGVudFN0cmluZyA9ICIiLCBwb3MgPSAwOwogICAgICAgIGlmIChvcHRpb25zLmluZGVudFdpdGhUYWJzKQogICAgICAgICAgZm9yICh2YXIgaSA9IE1hdGguZmxvb3IoaW5kZW50YXRpb24gLyBvcHRpb25zLnRhYlNpemUpOyBpOyAtLWkpIHtwb3MgKz0gb3B0aW9ucy50YWJTaXplOyBpbmRlbnRTdHJpbmcgKz0gIlx0Ijt9CiAgICAgICAgd2hpbGUgKHBvcyA8IGluZGVudGF0aW9uKSB7Kytwb3M7IGluZGVudFN0cmluZyArPSAiICI7fQogICAgICB9CgogICAgICByZXBsYWNlUmFuZ2UoaW5kZW50U3RyaW5nLCB7bGluZTogbiwgY2g6IDB9LCB7bGluZTogbiwgY2g6IGN1clNwYWNlU3RyaW5nLmxlbmd0aH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGxvYWRNb2RlKCkgewogICAgICBtb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsIG9wdGlvbnMubW9kZSk7CiAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7IGxpbmUuc3RhdGVBZnRlciA9IG51bGw7IH0pOwogICAgICB3b3JrID0gWzBdOwogICAgICBzdGFydFdvcmtlcigpOwogICAgfQogICAgZnVuY3Rpb24gZ3V0dGVyQ2hhbmdlZCgpIHsKICAgICAgdmFyIHZpc2libGUgPSBvcHRpb25zLmd1dHRlciB8fCBvcHRpb25zLmxpbmVOdW1iZXJzOwogICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAiIiA6ICJub25lIjsKICAgICAgaWYgKHZpc2libGUpIGd1dHRlckRpcnR5ID0gdHJ1ZTsKICAgICAgZWxzZSBsaW5lRGl2LnBhcmVudE5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IDA7CiAgICB9CiAgICBmdW5jdGlvbiB3cmFwcGluZ0NoYW5nZWQoZnJvbSwgdG8pIHsKICAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOwogICAgICAgIHZhciBwZXJMaW5lID0gc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoKSAtIDM7CiAgICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgIGlmIChsaW5lLmhpZGRlbikgcmV0dXJuOwogICAgICAgICAgdmFyIGd1ZXNzID0gTWF0aC5jZWlsKGxpbmUudGV4dC5sZW5ndGggLyBwZXJMaW5lKSB8fCAxOwogICAgICAgICAgaWYgKGd1ZXNzICE9IDEpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZ3Vlc3MpOwogICAgICAgIH0pOwogICAgICAgIGxpbmVTcGFjZS5zdHlsZS53aWR0aCA9IGNvZGUuc3R5bGUud2lkdGggPSAiIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IHdyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCAiIik7CiAgICAgICAgbWF4V2lkdGggPSBudWxsOyBtYXhMaW5lID0gIiI7CiAgICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgIGlmIChsaW5lLmhlaWdodCAhPSAxICYmICFsaW5lLmhpZGRlbikgdXBkYXRlTGluZUhlaWdodChsaW5lLCAxKTsKICAgICAgICAgIGlmIChsaW5lLnRleHQubGVuZ3RoID4gbWF4TGluZS5sZW5ndGgpIG1heExpbmUgPSBsaW5lLnRleHQ7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiAwLCB0bzogZG9jLnNpemV9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbXB1dGVUYWJUZXh0KCkgewogICAgICBmb3IgKHZhciBzdHIgPSAnPHNwYW4gY2xhc3M9ImNtLXRhYiI+JywgaSA9IDA7IGkgPCBvcHRpb25zLnRhYlNpemU7ICsraSkgc3RyICs9ICIgIjsKICAgICAgcmV0dXJuIHN0ciArICI8L3NwYW4+IjsKICAgIH0KICAgIGZ1bmN0aW9uIHRhYnNDaGFuZ2VkKCkgewogICAgICB0YWJUZXh0ID0gY29tcHV0ZVRhYlRleHQoKTsKICAgICAgdXBkYXRlRGlzcGxheSh0cnVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHRoZW1lQ2hhbmdlZCgpIHsKICAgICAgc2Nyb2xsZXIuY2xhc3NOYW1lID0gc2Nyb2xsZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXHcrL2csICIiKSArCiAgICAgICAgb3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywgIiBjbS1zLSIpOwogICAgfQoKICAgIGZ1bmN0aW9uIFRleHRNYXJrZXIoKSB7IHRoaXMuc2V0ID0gW107IH0KICAgIFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gb3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWluID0gSW5maW5pdHksIG1heCA9IC1JbmZpbml0eTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLnNldC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2V0W2ldLCBtayA9IGxpbmUubWFya2VkOwogICAgICAgIGlmICghbWsgfHwgIWxpbmUucGFyZW50KSBjb250aW51ZTsKICAgICAgICB2YXIgbGluZU4gPSBsaW5lTm8obGluZSk7CiAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBsaW5lTik7IG1heCA9IE1hdGgubWF4KG1heCwgbGluZU4pOwogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWsubGVuZ3RoOyArK2opCiAgICAgICAgICBpZiAobWtbal0uc2V0ID09IHRoaXMuc2V0KSBtay5zcGxpY2Uoai0tLCAxKTsKICAgICAgfQogICAgICBpZiAobWluICE9IEluZmluaXR5KQogICAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogbWluLCB0bzogbWF4ICsgMX0pOwogICAgfSk7CiAgICBUZXh0TWFya2VyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBmcm9tLCB0bzsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLnNldC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2V0W2ldLCBtayA9IGxpbmUubWFya2VkOwogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWsubGVuZ3RoOyArK2opIHsKICAgICAgICAgIHZhciBtYXJrID0gbWtbal07CiAgICAgICAgICBpZiAobWFyay5zZXQgPT0gdGhpcy5zZXQpIHsKICAgICAgICAgICAgaWYgKG1hcmsuZnJvbSAhPSBudWxsIHx8IG1hcmsudG8gIT0gbnVsbCkgewogICAgICAgICAgICAgIHZhciBmb3VuZCA9IGxpbmVObyhsaW5lKTsKICAgICAgICAgICAgICBpZiAoZm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgaWYgKG1hcmsuZnJvbSAhPSBudWxsKSBmcm9tID0ge2xpbmU6IGZvdW5kLCBjaDogbWFyay5mcm9tfTsKICAgICAgICAgICAgICAgIGlmIChtYXJrLnRvICE9IG51bGwpIHRvID0ge2xpbmU6IGZvdW5kLCBjaDogbWFyay50b307CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB7ZnJvbTogZnJvbSwgdG86IHRvfTsKICAgIH07CgogICAgZnVuY3Rpb24gbWFya1RleHQoZnJvbSwgdG8sIGNsYXNzTmFtZSkgewogICAgICBmcm9tID0gY2xpcFBvcyhmcm9tKTsgdG8gPSBjbGlwUG9zKHRvKTsKICAgICAgdmFyIHRtID0gbmV3IFRleHRNYXJrZXIoKTsKICAgICAgZnVuY3Rpb24gYWRkKGxpbmUsIGZyb20sIHRvLCBjbGFzc05hbWUpIHsKICAgICAgICBnZXRMaW5lKGxpbmUpLmFkZE1hcmsobmV3IE1hcmtlZFRleHQoZnJvbSwgdG8sIGNsYXNzTmFtZSwgdG0uc2V0KSk7CiAgICAgIH0KICAgICAgaWYgKGZyb20ubGluZSA9PSB0by5saW5lKSBhZGQoZnJvbS5saW5lLCBmcm9tLmNoLCB0by5jaCwgY2xhc3NOYW1lKTsKICAgICAgZWxzZSB7CiAgICAgICAgYWRkKGZyb20ubGluZSwgZnJvbS5jaCwgbnVsbCwgY2xhc3NOYW1lKTsKICAgICAgICBmb3IgKHZhciBpID0gZnJvbS5saW5lICsgMSwgZSA9IHRvLmxpbmU7IGkgPCBlOyArK2kpCiAgICAgICAgICBhZGQoaSwgbnVsbCwgbnVsbCwgY2xhc3NOYW1lKTsKICAgICAgICBhZGQodG8ubGluZSwgbnVsbCwgdG8uY2gsIGNsYXNzTmFtZSk7CiAgICAgIH0KICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBmcm9tLmxpbmUsIHRvOiB0by5saW5lICsgMX0pOwogICAgICByZXR1cm4gdG07CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Qm9va21hcmsocG9zKSB7CiAgICAgIHBvcyA9IGNsaXBQb3MocG9zKTsKICAgICAgdmFyIGJtID0gbmV3IEJvb2ttYXJrKHBvcy5jaCk7CiAgICAgIGdldExpbmUocG9zLmxpbmUpLmFkZE1hcmsoYm0pOwogICAgICByZXR1cm4gYm07CiAgICB9CgogICAgZnVuY3Rpb24gYWRkR3V0dGVyTWFya2VyKGxpbmUsIHRleHQsIGNsYXNzTmFtZSkgewogICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIGxpbmUgPSBnZXRMaW5lKGNsaXBMaW5lKGxpbmUpKTsKICAgICAgbGluZS5ndXR0ZXJNYXJrZXIgPSB7dGV4dDogdGV4dCwgc3R5bGU6IGNsYXNzTmFtZX07CiAgICAgIGd1dHRlckRpcnR5ID0gdHJ1ZTsKICAgICAgcmV0dXJuIGxpbmU7CiAgICB9CiAgICBmdW5jdGlvbiByZW1vdmVHdXR0ZXJNYXJrZXIobGluZSkgewogICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIGxpbmUgPSBnZXRMaW5lKGNsaXBMaW5lKGxpbmUpKTsKICAgICAgbGluZS5ndXR0ZXJNYXJrZXIgPSBudWxsOwogICAgICBndXR0ZXJEaXJ0eSA9IHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gY2hhbmdlTGluZShoYW5kbGUsIG9wKSB7CiAgICAgIHZhciBubyA9IGhhbmRsZSwgbGluZSA9IGhhbmRsZTsKICAgICAgaWYgKHR5cGVvZiBoYW5kbGUgPT0gIm51bWJlciIpIGxpbmUgPSBnZXRMaW5lKGNsaXBMaW5lKGhhbmRsZSkpOwogICAgICBlbHNlIG5vID0gbGluZU5vKGhhbmRsZSk7CiAgICAgIGlmIChubyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgaWYgKG9wKGxpbmUsIG5vKSkgY2hhbmdlcy5wdXNoKHtmcm9tOiBubywgdG86IG5vICsgMX0pOwogICAgICBlbHNlIHJldHVybiBudWxsOwogICAgICByZXR1cm4gbGluZTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldExpbmVDbGFzcyhoYW5kbGUsIGNsYXNzTmFtZSkgewogICAgICByZXR1cm4gY2hhbmdlTGluZShoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBpZiAobGluZS5jbGFzc05hbWUgIT0gY2xhc3NOYW1lKSB7CiAgICAgICAgICBsaW5lLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBzZXRMaW5lSGlkZGVuKGhhbmRsZSwgaGlkZGVuKSB7CiAgICAgIHJldHVybiBjaGFuZ2VMaW5lKGhhbmRsZSwgZnVuY3Rpb24obGluZSwgbm8pIHsKICAgICAgICBpZiAobGluZS5oaWRkZW4gIT0gaGlkZGVuKSB7CiAgICAgICAgICBsaW5lLmhpZGRlbiA9IGhpZGRlbjsKICAgICAgICAgIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGlkZGVuID8gMCA6IDEpOwogICAgICAgICAgaWYgKGhpZGRlbiAmJiAoc2VsLmZyb20ubGluZSA9PSBubyB8fCBzZWwudG8ubGluZSA9PSBubykpCiAgICAgICAgICAgIHNldFNlbGVjdGlvbihza2lwSGlkZGVuKHNlbC5mcm9tLCBzZWwuZnJvbS5saW5lLCBzZWwuZnJvbS5jaCksCiAgICAgICAgICAgICAgICAgICAgICAgICBza2lwSGlkZGVuKHNlbC50bywgc2VsLnRvLmxpbmUsIHNlbC50by5jaCkpOwogICAgICAgICAgcmV0dXJuIChndXR0ZXJEaXJ0eSA9IHRydWUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gbGluZUluZm8obGluZSkgewogICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIHsKICAgICAgICBpZiAoIWlzTGluZShsaW5lKSkgcmV0dXJuIG51bGw7CiAgICAgICAgdmFyIG4gPSBsaW5lOwogICAgICAgIGxpbmUgPSBnZXRMaW5lKGxpbmUpOwogICAgICAgIGlmICghbGluZSkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIG4gPSBsaW5lTm8obGluZSk7CiAgICAgICAgaWYgKG4gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgdmFyIG1hcmtlciA9IGxpbmUuZ3V0dGVyTWFya2VyOwogICAgICByZXR1cm4ge2xpbmU6IG4sIGhhbmRsZTogbGluZSwgdGV4dDogbGluZS50ZXh0LCBtYXJrZXJUZXh0OiBtYXJrZXIgJiYgbWFya2VyLnRleHQsCiAgICAgICAgICAgICAgbWFya2VyQ2xhc3M6IG1hcmtlciAmJiBtYXJrZXIuc3R5bGUsIGxpbmVDbGFzczogbGluZS5jbGFzc05hbWV9OwogICAgfQoKICAgIGZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cikgewogICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICI8cHJlPjxzcGFuPng8L3NwYW4+PC9wcmU+IjsKICAgICAgbWVhc3VyZS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBzdHI7CiAgICAgIHJldHVybiBtZWFzdXJlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCB8fCAxMDsKICAgIH0KICAgIC8vIFRoZXNlIGFyZSB1c2VkIHRvIGdvIGZyb20gcGl4ZWwgcG9zaXRpb25zIHRvIGNoYXJhY3RlcgogICAgLy8gcG9zaXRpb25zLCB0YWtpbmcgdmFyeWluZyBjaGFyYWN0ZXIgd2lkdGhzIGludG8gYWNjb3VudC4KICAgIGZ1bmN0aW9uIGNoYXJGcm9tWChsaW5lLCB4KSB7CiAgICAgIGlmICh4IDw9IDApIHJldHVybiAwOwogICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUobGluZSksIHRleHQgPSBsaW5lT2JqLnRleHQ7CiAgICAgIGZ1bmN0aW9uIGdldFgobGVuKSB7CiAgICAgICAgbWVhc3VyZS5pbm5lckhUTUwgPSAiPHByZT48c3Bhbj4iICsgbGluZU9iai5nZXRIVE1MKG51bGwsIG51bGwsIGZhbHNlLCB0YWJUZXh0LCBsZW4pICsgIjwvc3Bhbj48L3ByZT4iOwogICAgICAgIHJldHVybiBtZWFzdXJlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aDsKICAgICAgfQogICAgICB2YXIgZnJvbSA9IDAsIGZyb21YID0gMCwgdG8gPSB0ZXh0Lmxlbmd0aCwgdG9YOwogICAgICAvLyBHdWVzcyBhIHN1aXRhYmxlIHVwcGVyIGJvdW5kIGZvciBvdXIgc2VhcmNoLgogICAgICB2YXIgZXN0aW1hdGVkID0gTWF0aC5taW4odG8sIE1hdGguY2VpbCh4IC8gY2hhcldpZHRoKCkpKTsKICAgICAgZm9yICg7OykgewogICAgICAgIHZhciBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOwogICAgICAgIGlmIChlc3RYIDw9IHggJiYgZXN0aW1hdGVkIDwgdG8pIGVzdGltYXRlZCA9IE1hdGgubWluKHRvLCBNYXRoLmNlaWwoZXN0aW1hdGVkICogMS4yKSk7CiAgICAgICAgZWxzZSB7dG9YID0gZXN0WDsgdG8gPSBlc3RpbWF0ZWQ7IGJyZWFrO30KICAgICAgfQogICAgICBpZiAoeCA+IHRvWCkgcmV0dXJuIHRvOwogICAgICAvLyBUcnkgdG8gZ3Vlc3MgYSBzdWl0YWJsZSBsb3dlciBib3VuZCBhcyB3ZWxsLgogICAgICBlc3RpbWF0ZWQgPSBNYXRoLmZsb29yKHRvICogMC44KTsgZXN0WCA9IGdldFgoZXN0aW1hdGVkKTsKICAgICAgaWYgKGVzdFggPCB4KSB7ZnJvbSA9IGVzdGltYXRlZDsgZnJvbVggPSBlc3RYO30KICAgICAgLy8gRG8gYSBiaW5hcnkgc2VhcmNoIGJldHdlZW4gdGhlc2UgYm91bmRzLgogICAgICBmb3IgKDs7KSB7CiAgICAgICAgaWYgKHRvIC0gZnJvbSA8PSAxKSByZXR1cm4gKHRvWCAtIHggPiB4IC0gZnJvbVgpID8gZnJvbSA6IHRvOwogICAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmNlaWwoKGZyb20gKyB0bykgLyAyKSwgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKICAgICAgICBpZiAobWlkZGxlWCA+IHgpIHt0byA9IG1pZGRsZTsgdG9YID0gbWlkZGxlWDt9CiAgICAgICAgZWxzZSB7ZnJvbSA9IG1pZGRsZTsgZnJvbVggPSBtaWRkbGVYO30KICAgICAgfQogICAgfQoKICAgIHZhciB0ZW1wSWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAweGZmZmZmZikudG9TdHJpbmcoMTYpOwogICAgZnVuY3Rpb24gbWVhc3VyZUxpbmUobGluZSwgY2gpIHsKICAgICAgdmFyIGV4dHJhID0gIiI7CiAgICAgIC8vIEluY2x1ZGUgZXh0cmEgdGV4dCBhdCB0aGUgZW5kIHRvIG1ha2Ugc3VyZSB0aGUgbWVhc3VyZWQgbGluZSBpcyB3cmFwcGVkIGluIHRoZSByaWdodCB3YXkuCiAgICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgewogICAgICAgIHZhciBlbmQgPSBsaW5lLnRleHQuaW5kZXhPZigiICIsIGNoICsgMik7CiAgICAgICAgZXh0cmEgPSBodG1sRXNjYXBlKGxpbmUudGV4dC5zbGljZShjaCArIDEsIGVuZCA8IDAgPyBsaW5lLnRleHQubGVuZ3RoIDogZW5kICsgKGllID8gNSA6IDApKSk7CiAgICAgIH0KICAgICAgbWVhc3VyZS5pbm5lckhUTUwgPSAiPHByZT4iICsgbGluZS5nZXRIVE1MKG51bGwsIG51bGwsIGZhbHNlLCB0YWJUZXh0LCBjaCkgKwogICAgICAgICc8c3BhbiBpZD0iQ29kZU1pcnJvci10ZW1wLScgKyB0ZW1wSWQgKyAnIj4nICsgaHRtbEVzY2FwZShsaW5lLnRleHQuY2hhckF0KGNoKSB8fCAiICIpICsgIjwvc3Bhbj4iICsKICAgICAgICBleHRyYSArICI8L3ByZT4iOwogICAgICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkNvZGVNaXJyb3ItdGVtcC0iICsgdGVtcElkKTsKICAgICAgdmFyIHRvcCA9IGVsdC5vZmZzZXRUb3AsIGxlZnQgPSBlbHQub2Zmc2V0TGVmdDsKICAgICAgLy8gT2xkZXIgSUVzIHJlcG9ydCB6ZXJvIG9mZnNldHMgZm9yIHNwYW5zIGRpcmVjdGx5IGFmdGVyIGEgd3JhcAogICAgICBpZiAoaWUgJiYgY2ggJiYgdG9wID09IDAgJiYgbGVmdCA9PSAwKSB7CiAgICAgICAgdmFyIGJhY2t1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICBiYWNrdXAuaW5uZXJIVE1MID0gIngiOwogICAgICAgIGVsdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiYWNrdXAsIGVsdC5uZXh0U2libGluZyk7CiAgICAgICAgdG9wID0gYmFja3VwLm9mZnNldFRvcDsKICAgICAgfQogICAgICByZXR1cm4ge3RvcDogdG9wLCBsZWZ0OiBsZWZ0fTsKICAgIH0KICAgIGZ1bmN0aW9uIGxvY2FsQ29vcmRzKHBvcywgaW5MaW5lV3JhcCkgewogICAgICB2YXIgeCwgbGggPSB0ZXh0SGVpZ2h0KCksIHkgPSBsaCAqIChoZWlnaHRBdExpbmUoZG9jLCBwb3MubGluZSkgLSAoaW5MaW5lV3JhcCA/IGRpc3BsYXlPZmZzZXQgOiAwKSk7CiAgICAgIGlmIChwb3MuY2ggPT0gMCkgeCA9IDA7CiAgICAgIGVsc2UgewogICAgICAgIHZhciBzcCA9IG1lYXN1cmVMaW5lKGdldExpbmUocG9zLmxpbmUpLCBwb3MuY2gpOwogICAgICAgIHggPSBzcC5sZWZ0OwogICAgICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgeSArPSBNYXRoLm1heCgwLCBzcC50b3ApOwogICAgICB9CiAgICAgIHJldHVybiB7eDogeCwgeTogeSwgeUJvdDogeSArIGxofTsKICAgIH0KICAgIC8vIENvb3JkcyBtdXN0IGJlIGxpbmVTcGFjZS1sb2NhbAogICAgZnVuY3Rpb24gY29vcmRzQ2hhcih4LCB5KSB7CiAgICAgIGlmICh5IDwgMCkgeSA9IDA7CiAgICAgIHZhciB0aCA9IHRleHRIZWlnaHQoKSwgY3cgPSBjaGFyV2lkdGgoKSwgaGVpZ2h0UG9zID0gZGlzcGxheU9mZnNldCArIE1hdGguZmxvb3IoeSAvIHRoKTsKICAgICAgdmFyIGxpbmVObyA9IGxpbmVBdEhlaWdodChkb2MsIGhlaWdodFBvcyk7CiAgICAgIGlmIChsaW5lTm8gPj0gZG9jLnNpemUpIHJldHVybiB7bGluZTogZG9jLnNpemUgLSAxLCBjaDogZ2V0TGluZShkb2Muc2l6ZSAtIDEpLnRleHQubGVuZ3RofTsKICAgICAgdmFyIGxpbmVPYmogPSBnZXRMaW5lKGxpbmVObyksIHRleHQgPSBsaW5lT2JqLnRleHQ7CiAgICAgIHZhciB0dyA9IG9wdGlvbnMubGluZVdyYXBwaW5nLCBpbm5lck9mZiA9IHR3ID8gaGVpZ2h0UG9zIC0gaGVpZ2h0QXRMaW5lKGRvYywgbGluZU5vKSA6IDA7CiAgICAgIGlmICh4IDw9IDAgJiYgaW5uZXJPZmYgPT0gMCkgcmV0dXJuIHtsaW5lOiBsaW5lTm8sIGNoOiAwfTsKICAgICAgZnVuY3Rpb24gZ2V0WChsZW4pIHsKICAgICAgICB2YXIgc3AgPSBtZWFzdXJlTGluZShsaW5lT2JqLCBsZW4pOwogICAgICAgIGlmICh0dykgewogICAgICAgICAgdmFyIG9mZiA9IE1hdGgucm91bmQoc3AudG9wIC8gdGgpOwogICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHNwLmxlZnQgKyAob2ZmIC0gaW5uZXJPZmYpICogc2Nyb2xsZXIuY2xpZW50V2lkdGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3AubGVmdDsKICAgICAgfQogICAgICB2YXIgZnJvbSA9IDAsIGZyb21YID0gMCwgdG8gPSB0ZXh0Lmxlbmd0aCwgdG9YOwogICAgICAvLyBHdWVzcyBhIHN1aXRhYmxlIHVwcGVyIGJvdW5kIGZvciBvdXIgc2VhcmNoLgogICAgICB2YXIgZXN0aW1hdGVkID0gTWF0aC5taW4odG8sIE1hdGguY2VpbCgoeCArIGlubmVyT2ZmICogc2Nyb2xsZXIuY2xpZW50V2lkdGggKiAuOSkgLyBjdykpOwogICAgICBmb3IgKDs7KSB7CiAgICAgICAgdmFyIGVzdFggPSBnZXRYKGVzdGltYXRlZCk7CiAgICAgICAgaWYgKGVzdFggPD0geCAmJiBlc3RpbWF0ZWQgPCB0bykgZXN0aW1hdGVkID0gTWF0aC5taW4odG8sIE1hdGguY2VpbChlc3RpbWF0ZWQgKiAxLjIpKTsKICAgICAgICBlbHNlIHt0b1ggPSBlc3RYOyB0byA9IGVzdGltYXRlZDsgYnJlYWs7fQogICAgICB9CiAgICAgIGlmICh4ID4gdG9YKSByZXR1cm4ge2xpbmU6IGxpbmVObywgY2g6IHRvfTsKICAgICAgLy8gVHJ5IHRvIGd1ZXNzIGEgc3VpdGFibGUgbG93ZXIgYm91bmQgYXMgd2VsbC4KICAgICAgZXN0aW1hdGVkID0gTWF0aC5mbG9vcih0byAqIDAuOCk7IGVzdFggPSBnZXRYKGVzdGltYXRlZCk7CiAgICAgIGlmIChlc3RYIDwgeCkge2Zyb20gPSBlc3RpbWF0ZWQ7IGZyb21YID0gZXN0WDt9CiAgICAgIC8vIERvIGEgYmluYXJ5IHNlYXJjaCBiZXR3ZWVuIHRoZXNlIGJvdW5kcy4KICAgICAgZm9yICg7OykgewogICAgICAgIGlmICh0byAtIGZyb20gPD0gMSkgcmV0dXJuIHtsaW5lOiBsaW5lTm8sIGNoOiAodG9YIC0geCA+IHggLSBmcm9tWCkgPyBmcm9tIDogdG99OwogICAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmNlaWwoKGZyb20gKyB0bykgLyAyKSwgbWlkZGxlWCA9IGdldFgobWlkZGxlKTsKICAgICAgICBpZiAobWlkZGxlWCA+IHgpIHt0byA9IG1pZGRsZTsgdG9YID0gbWlkZGxlWDt9CiAgICAgICAgZWxzZSB7ZnJvbSA9IG1pZGRsZTsgZnJvbVggPSBtaWRkbGVYO30KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gcGFnZUNvb3Jkcyhwb3MpIHsKICAgICAgdmFyIGxvY2FsID0gbG9jYWxDb29yZHMocG9zLCB0cnVlKSwgb2ZmID0gZWx0T2Zmc2V0KGxpbmVTcGFjZSk7CiAgICAgIHJldHVybiB7eDogb2ZmLmxlZnQgKyBsb2NhbC54LCB5OiBvZmYudG9wICsgbG9jYWwueSwgeUJvdDogb2ZmLnRvcCArIGxvY2FsLnlCb3R9OwogICAgfQoKICAgIHZhciBjYWNoZWRIZWlnaHQsIGNhY2hlZEhlaWdodEZvciwgbWVhc3VyZVRleHQ7CiAgICBmdW5jdGlvbiB0ZXh0SGVpZ2h0KCkgewogICAgICBpZiAobWVhc3VyZVRleHQgPT0gbnVsbCkgewogICAgICAgIG1lYXN1cmVUZXh0ID0gIjxwcmU+IjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ5OyArK2kpIG1lYXN1cmVUZXh0ICs9ICJ4PGJyLz4iOwogICAgICAgIG1lYXN1cmVUZXh0ICs9ICJ4PC9wcmU+IjsKICAgICAgfQogICAgICB2YXIgb2Zmc2V0SGVpZ2h0ID0gbGluZURpdi5jbGllbnRIZWlnaHQ7CiAgICAgIGlmIChvZmZzZXRIZWlnaHQgPT0gY2FjaGVkSGVpZ2h0Rm9yKSByZXR1cm4gY2FjaGVkSGVpZ2h0OwogICAgICBjYWNoZWRIZWlnaHRGb3IgPSBvZmZzZXRIZWlnaHQ7CiAgICAgIG1lYXN1cmUuaW5uZXJIVE1MID0gbWVhc3VyZVRleHQ7CiAgICAgIGNhY2hlZEhlaWdodCA9IG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgLyA1MCB8fCAxOwogICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICIiOwogICAgICByZXR1cm4gY2FjaGVkSGVpZ2h0OwogICAgfQogICAgdmFyIGNhY2hlZFdpZHRoLCBjYWNoZWRXaWR0aEZvciA9IDA7CiAgICBmdW5jdGlvbiBjaGFyV2lkdGgoKSB7CiAgICAgIGlmIChzY3JvbGxlci5jbGllbnRXaWR0aCA9PSBjYWNoZWRXaWR0aEZvcikgcmV0dXJuIGNhY2hlZFdpZHRoOwogICAgICBjYWNoZWRXaWR0aEZvciA9IHNjcm9sbGVyLmNsaWVudFdpZHRoOwogICAgICByZXR1cm4gKGNhY2hlZFdpZHRoID0gc3RyaW5nV2lkdGgoIngiKSk7CiAgICB9CiAgICBmdW5jdGlvbiBwYWRkaW5nVG9wKCkge3JldHVybiBsaW5lU3BhY2Uub2Zmc2V0VG9wO30KICAgIGZ1bmN0aW9uIHBhZGRpbmdMZWZ0KCkge3JldHVybiBsaW5lU3BhY2Uub2Zmc2V0TGVmdDt9CgogICAgZnVuY3Rpb24gcG9zRnJvbU1vdXNlKGUsIGxpYmVyYWwpIHsKICAgICAgdmFyIG9mZlcgPSBlbHRPZmZzZXQoc2Nyb2xsZXIsIHRydWUpLCB4LCB5OwogICAgICAvLyBGYWlscyB1bnByZWRpY3RhYmx5IG9uIElFWzY3XSB3aGVuIG1vdXNlIGlzIGRyYWdnZWQgYXJvdW5kIHF1aWNrbHkuCiAgICAgIHRyeSB7IHggPSBlLmNsaWVudFg7IHkgPSBlLmNsaWVudFk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIG51bGw7IH0KICAgICAgLy8gVGhpcyBpcyBhIG1lc3Mgb2YgYSBoZXVyaXN0aWMgdG8gdHJ5IGFuZCBkZXRlcm1pbmUgd2hldGhlciBhCiAgICAgIC8vIHNjcm9sbC1iYXIgd2FzIGNsaWNrZWQgb3Igbm90LCBhbmQgdG8gcmV0dXJuIG51bGwgaWYgb25lIHdhcwogICAgICAvLyAoYW5kICFsaWJlcmFsKS4KICAgICAgaWYgKCFsaWJlcmFsICYmICh4IC0gb2ZmVy5sZWZ0ID4gc2Nyb2xsZXIuY2xpZW50V2lkdGggfHwgeSAtIG9mZlcudG9wID4gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KSkKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgdmFyIG9mZkwgPSBlbHRPZmZzZXQobGluZVNwYWNlLCB0cnVlKTsKICAgICAgcmV0dXJuIGNvb3Jkc0NoYXIoeCAtIG9mZkwubGVmdCwgeSAtIG9mZkwudG9wKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnUoZSkgewogICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICBpZiAoIXBvcyB8fCB3aW5kb3cub3BlcmEpIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgogICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykgfHwgcG9zTGVzcyhwb3MsIHNlbC5mcm9tKSB8fCAhcG9zTGVzcyhwb3MsIHNlbC50bykpCiAgICAgICAgb3BlcmF0aW9uKHNldEN1cnNvcikocG9zLmxpbmUsIHBvcy5jaCk7CgogICAgICB2YXIgb2xkQ1NTID0gaW5wdXQuc3R5bGUuY3NzVGV4dDsKICAgICAgaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICBpbnB1dC5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiICsgKGUuY2xpZW50WSAtIDUpICsKICAgICAgICAicHg7IGxlZnQ6ICIgKyAoZS5jbGllbnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6IHdoaXRlOyAiICsKICAgICAgICAiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiOwogICAgICBsZWF2ZUlucHV0QWxvbmUgPSB0cnVlOwogICAgICB2YXIgdmFsID0gaW5wdXQudmFsdWUgPSBnZXRTZWxlY3Rpb24oKTsKICAgICAgZm9jdXNJbnB1dCgpOwogICAgICBpbnB1dC5zZWxlY3QoKTsKICAgICAgZnVuY3Rpb24gcmVoaWRlKCkgewogICAgICAgIHZhciBuZXdWYWwgPSBzcGxpdExpbmVzKGlucHV0LnZhbHVlKS5qb2luKCJcbiIpOwogICAgICAgIGlmIChuZXdWYWwgIT0gdmFsKSBvcGVyYXRpb24ocmVwbGFjZVNlbGVjdGlvbikobmV3VmFsLCAiZW5kIik7CiAgICAgICAgaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwogICAgICAgIGlucHV0LnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7CiAgICAgICAgbGVhdmVJbnB1dEFsb25lID0gZmFsc2U7CiAgICAgICAgcmVzZXRJbnB1dCh0cnVlKTsKICAgICAgICBzbG93UG9sbCgpOwogICAgICB9CgogICAgICBpZiAoZ2Vja28pIHsKICAgICAgICBlX3N0b3AoZSk7CiAgICAgICAgdmFyIG1vdXNldXAgPSBjb25uZWN0KHdpbmRvdywgIm1vdXNldXAiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIG1vdXNldXAoKTsKICAgICAgICAgIHNldFRpbWVvdXQocmVoaWRlLCAyMCk7CiAgICAgICAgfSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDUwKTsKICAgICAgfQogICAgfQoKICAgIC8vIEN1cnNvci1ibGlua2luZwogICAgZnVuY3Rpb24gcmVzdGFydEJsaW5rKCkgewogICAgICBjbGVhckludGVydmFsKGJsaW5rZXIpOwogICAgICB2YXIgb24gPSB0cnVlOwogICAgICBjdXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9ICIiOwogICAgICBibGlua2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgY3Vyc29yLnN0eWxlLnZpc2liaWxpdHkgPSAob24gPSAhb24pID8gIiIgOiAiaGlkZGVuIjsKICAgICAgfSwgNjUwKTsKICAgIH0KCiAgICB2YXIgbWF0Y2hpbmcgPSB7IigiOiAiKT4iLCAiKSI6ICIoPCIsICJbIjogIl0+IiwgIl0iOiAiWzwiLCAieyI6ICJ9PiIsICJ9IjogIns8In07CiAgICBmdW5jdGlvbiBtYXRjaEJyYWNrZXRzKGF1dG9jbGVhcikgewogICAgICB2YXIgaGVhZCA9IHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvLCBsaW5lID0gZ2V0TGluZShoZWFkLmxpbmUpLCBwb3MgPSBoZWFkLmNoIC0gMTsKICAgICAgdmFyIG1hdGNoID0gKHBvcyA+PSAwICYmIG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQocG9zKV0pIHx8IG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQoKytwb3MpXTsKICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuOwogICAgICB2YXIgY2ggPSBtYXRjaC5jaGFyQXQoMCksIGZvcndhcmQgPSBtYXRjaC5jaGFyQXQoMSkgPT0gIj4iLCBkID0gZm9yd2FyZCA/IDEgOiAtMSwgc3QgPSBsaW5lLnN0eWxlczsKICAgICAgZm9yICh2YXIgb2ZmID0gcG9zICsgMSwgaSA9IDAsIGUgPSBzdC5sZW5ndGg7IGkgPCBlOyBpKz0yKQogICAgICAgIGlmICgob2ZmIC09IHN0W2ldLmxlbmd0aCkgPD0gMCkge3ZhciBzdHlsZSA9IHN0W2krMV07IGJyZWFrO30KCiAgICAgIHZhciBzdGFjayA9IFtsaW5lLnRleHQuY2hhckF0KHBvcyldLCByZSA9IC9bKCl7fVtcXV0vOwogICAgICBmdW5jdGlvbiBzY2FuKGxpbmUsIGZyb20sIHRvKSB7CiAgICAgICAgaWYgKCFsaW5lLnRleHQpIHJldHVybjsKICAgICAgICB2YXIgc3QgPSBsaW5lLnN0eWxlcywgcG9zID0gZm9yd2FyZCA/IDAgOiBsaW5lLnRleHQubGVuZ3RoIC0gMSwgY3VyOwogICAgICAgIGZvciAodmFyIGkgPSBmb3J3YXJkID8gMCA6IHN0Lmxlbmd0aCAtIDIsIGUgPSBmb3J3YXJkID8gc3QubGVuZ3RoIDogLTI7IGkgIT0gZTsgaSArPSAyKmQpIHsKICAgICAgICAgIHZhciB0ZXh0ID0gc3RbaV07CiAgICAgICAgICBpZiAoc3RbaSsxXSAhPSBudWxsICYmIHN0W2krMV0gIT0gc3R5bGUpIHtwb3MgKz0gZCAqIHRleHQubGVuZ3RoOyBjb250aW51ZTt9CiAgICAgICAgICBmb3IgKHZhciBqID0gZm9yd2FyZCA/IDAgOiB0ZXh0Lmxlbmd0aCAtIDEsIHRlID0gZm9yd2FyZCA/IHRleHQubGVuZ3RoIDogLTE7IGogIT0gdGU7IGogKz0gZCwgcG9zKz1kKSB7CiAgICAgICAgICAgIGlmIChwb3MgPj0gZnJvbSAmJiBwb3MgPCB0byAmJiByZS50ZXN0KGN1ciA9IHRleHQuY2hhckF0KGopKSkgewogICAgICAgICAgICAgIHZhciBtYXRjaCA9IG1hdGNoaW5nW2N1cl07CiAgICAgICAgICAgICAgaWYgKG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIgPT0gZm9yd2FyZCkgc3RhY2sucHVzaChjdXIpOwogICAgICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZhbHNlfTsKICAgICAgICAgICAgICBlbHNlIGlmICghc3RhY2subGVuZ3RoKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogdHJ1ZX07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IGhlYWQubGluZSwgZSA9IGZvcndhcmQgPyBNYXRoLm1pbihpICsgMTAwLCBkb2Muc2l6ZSkgOiBNYXRoLm1heCgtMSwgaSAtIDEwMCk7IGkgIT0gZTsgaSs9ZCkgewogICAgICAgIHZhciBsaW5lID0gZ2V0TGluZShpKSwgZmlyc3QgPSBpID09IGhlYWQubGluZTsKICAgICAgICB2YXIgZm91bmQgPSBzY2FuKGxpbmUsIGZpcnN0ICYmIGZvcndhcmQgPyBwb3MgKyAxIDogMCwgZmlyc3QgJiYgIWZvcndhcmQgPyBwb3MgOiBsaW5lLnRleHQubGVuZ3RoKTsKICAgICAgICBpZiAoZm91bmQpIGJyZWFrOwogICAgICB9CiAgICAgIGlmICghZm91bmQpIGZvdW5kID0ge3BvczogbnVsbCwgbWF0Y2g6IGZhbHNlfTsKICAgICAgdmFyIHN0eWxlID0gZm91bmQubWF0Y2ggPyAiQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQiIDogIkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IjsKICAgICAgdmFyIG9uZSA9IG1hcmtUZXh0KHtsaW5lOiBoZWFkLmxpbmUsIGNoOiBwb3N9LCB7bGluZTogaGVhZC5saW5lLCBjaDogcG9zKzF9LCBzdHlsZSksCiAgICAgICAgICB0d28gPSBmb3VuZC5wb3MgIT0gbnVsbCAmJiBtYXJrVGV4dCh7bGluZTogaSwgY2g6IGZvdW5kLnBvc30sIHtsaW5lOiBpLCBjaDogZm91bmQucG9zICsgMX0sIHN0eWxlKTsKICAgICAgdmFyIGNsZWFyID0gb3BlcmF0aW9uKGZ1bmN0aW9uKCl7b25lLmNsZWFyKCk7IHR3byAmJiB0d28uY2xlYXIoKTt9KTsKICAgICAgaWYgKGF1dG9jbGVhcikgc2V0VGltZW91dChjbGVhciwgODAwKTsKICAgICAgZWxzZSBicmFja2V0SGlnaGxpZ2h0ZWQgPSBjbGVhcjsKICAgIH0KCiAgICAvLyBGaW5kcyB0aGUgbGluZSB0byBzdGFydCB3aXRoIHdoZW4gc3RhcnRpbmcgYSBwYXJzZS4gVHJpZXMgdG8KICAgIC8vIGZpbmQgYSBsaW5lIHdpdGggYSBzdGF0ZUFmdGVyLCBzbyB0aGF0IGl0IGNhbiBzdGFydCB3aXRoIGEKICAgIC8vIHZhbGlkIHN0YXRlLiBJZiB0aGF0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBsaW5lIHdpdGggdGhlCiAgICAvLyBzbWFsbGVzdCBpbmRlbnRhdGlvbiwgd2hpY2ggdGVuZHMgdG8gbmVlZCB0aGUgbGVhc3QgY29udGV4dCB0bwogICAgLy8gcGFyc2UgY29ycmVjdGx5LgogICAgZnVuY3Rpb24gZmluZFN0YXJ0TGluZShuKSB7CiAgICAgIHZhciBtaW5pbmRlbnQsIG1pbmxpbmU7CiAgICAgIGZvciAodmFyIHNlYXJjaCA9IG4sIGxpbSA9IG4gLSA0MDsgc2VhcmNoID4gbGltOyAtLXNlYXJjaCkgewogICAgICAgIGlmIChzZWFyY2ggPT0gMCkgcmV0dXJuIDA7CiAgICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKHNlYXJjaC0xKTsKICAgICAgICBpZiAobGluZS5zdGF0ZUFmdGVyKSByZXR1cm4gc2VhcmNoOwogICAgICAgIHZhciBpbmRlbnRlZCA9IGxpbmUuaW5kZW50YXRpb24ob3B0aW9ucy50YWJTaXplKTsKICAgICAgICBpZiAobWlubGluZSA9PSBudWxsIHx8IG1pbmluZGVudCA+IGluZGVudGVkKSB7CiAgICAgICAgICBtaW5saW5lID0gc2VhcmNoIC0gMTsKICAgICAgICAgIG1pbmluZGVudCA9IGluZGVudGVkOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbWlubGluZTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFN0YXRlQmVmb3JlKG4pIHsKICAgICAgdmFyIHN0YXJ0ID0gZmluZFN0YXJ0TGluZShuKSwgc3RhdGUgPSBzdGFydCAmJiBnZXRMaW5lKHN0YXJ0LTEpLnN0YXRlQWZ0ZXI7CiAgICAgIGlmICghc3RhdGUpIHN0YXRlID0gc3RhcnRTdGF0ZShtb2RlKTsKICAgICAgZWxzZSBzdGF0ZSA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgIGRvYy5pdGVyKHN0YXJ0LCBuLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgbGluZS5oaWdobGlnaHQobW9kZSwgc3RhdGUsIG9wdGlvbnMudGFiU2l6ZSk7CiAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgfSk7CiAgICAgIGlmIChzdGFydCA8IG4pIGNoYW5nZXMucHVzaCh7ZnJvbTogc3RhcnQsIHRvOiBufSk7CiAgICAgIGlmIChuIDwgZG9jLnNpemUgJiYgIWdldExpbmUobikuc3RhdGVBZnRlcikgd29yay5wdXNoKG4pOwogICAgICByZXR1cm4gc3RhdGU7CiAgICB9CiAgICBmdW5jdGlvbiBoaWdobGlnaHRMaW5lcyhzdGFydCwgZW5kKSB7CiAgICAgIHZhciBzdGF0ZSA9IGdldFN0YXRlQmVmb3JlKHN0YXJ0KTsKICAgICAgZG9jLml0ZXIoc3RhcnQsIGVuZCwgZnVuY3Rpb24obGluZSkgewogICAgICAgIGxpbmUuaGlnaGxpZ2h0KG1vZGUsIHN0YXRlLCBvcHRpb25zLnRhYlNpemUpOwogICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKCkgewogICAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgb3B0aW9ucy53b3JrVGltZTsKICAgICAgdmFyIGZvdW5kV29yayA9IHdvcmsubGVuZ3RoOwogICAgICB3aGlsZSAod29yay5sZW5ndGgpIHsKICAgICAgICBpZiAoIWdldExpbmUoc2hvd2luZ0Zyb20pLnN0YXRlQWZ0ZXIpIHZhciB0YXNrID0gc2hvd2luZ0Zyb207CiAgICAgICAgZWxzZSB2YXIgdGFzayA9IHdvcmsucG9wKCk7CiAgICAgICAgaWYgKHRhc2sgPj0gZG9jLnNpemUpIGNvbnRpbnVlOwogICAgICAgIHZhciBzdGFydCA9IGZpbmRTdGFydExpbmUodGFzayksIHN0YXRlID0gc3RhcnQgJiYgZ2V0TGluZShzdGFydC0xKS5zdGF0ZUFmdGVyOwogICAgICAgIGlmIChzdGF0ZSkgc3RhdGUgPSBjb3B5U3RhdGUobW9kZSwgc3RhdGUpOwogICAgICAgIGVsc2Ugc3RhdGUgPSBzdGFydFN0YXRlKG1vZGUpOwoKICAgICAgICB2YXIgdW5jaGFuZ2VkID0gMCwgY29tcGFyZSA9IG1vZGUuY29tcGFyZVN0YXRlcywgcmVhbENoYW5nZSA9IGZhbHNlLAogICAgICAgICAgICBpID0gc3RhcnQsIGJhaWwgPSBmYWxzZTsKICAgICAgICBkb2MuaXRlcihpLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgdmFyIGhhZFN0YXRlID0gbGluZS5zdGF0ZUFmdGVyOwogICAgICAgICAgaWYgKCtuZXcgRGF0ZSA+IGVuZCkgewogICAgICAgICAgICB3b3JrLnB1c2goaSk7CiAgICAgICAgICAgIHN0YXJ0V29ya2VyKG9wdGlvbnMud29ya0RlbGF5KTsKICAgICAgICAgICAgaWYgKHJlYWxDaGFuZ2UpIGNoYW5nZXMucHVzaCh7ZnJvbTogdGFzaywgdG86IGkgKyAxfSk7CiAgICAgICAgICAgIHJldHVybiAoYmFpbCA9IHRydWUpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGNoYW5nZWQgPSBsaW5lLmhpZ2hsaWdodChtb2RlLCBzdGF0ZSwgb3B0aW9ucy50YWJTaXplKTsKICAgICAgICAgIGlmIChjaGFuZ2VkKSByZWFsQ2hhbmdlID0gdHJ1ZTsKICAgICAgICAgIGxpbmUuc3RhdGVBZnRlciA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgICAgICBpZiAoY29tcGFyZSkgewogICAgICAgICAgICBpZiAoaGFkU3RhdGUgJiYgY29tcGFyZShoYWRTdGF0ZSwgc3RhdGUpKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChjaGFuZ2VkICE9PSBmYWxzZSB8fCAhaGFkU3RhdGUpIHVuY2hhbmdlZCA9IDA7CiAgICAgICAgICAgIGVsc2UgaWYgKCsrdW5jaGFuZ2VkID4gMyAmJiAoIW1vZGUuaW5kZW50IHx8IG1vZGUuaW5kZW50KGhhZFN0YXRlLCAiIikgPT0gbW9kZS5pbmRlbnQoc3RhdGUsICIiKSkpCiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICArK2k7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGJhaWwpIHJldHVybjsKICAgICAgICBpZiAocmVhbENoYW5nZSkgY2hhbmdlcy5wdXNoKHtmcm9tOiB0YXNrLCB0bzogaSArIDF9KTsKICAgICAgfQogICAgICBpZiAoZm91bmRXb3JrICYmIG9wdGlvbnMub25IaWdobGlnaHRDb21wbGV0ZSkKICAgICAgICBvcHRpb25zLm9uSGlnaGxpZ2h0Q29tcGxldGUoaW5zdGFuY2UpOwogICAgfQogICAgZnVuY3Rpb24gc3RhcnRXb3JrZXIodGltZSkgewogICAgICBpZiAoIXdvcmsubGVuZ3RoKSByZXR1cm47CiAgICAgIGhpZ2hsaWdodC5zZXQodGltZSwgb3BlcmF0aW9uKGhpZ2hsaWdodFdvcmtlcikpOwogICAgfQoKICAgIC8vIE9wZXJhdGlvbnMgYXJlIHVzZWQgdG8gd3JhcCBjaGFuZ2VzIGluIHN1Y2ggYSB3YXkgdGhhdCBlYWNoCiAgICAvLyBjaGFuZ2Ugd29uJ3QgaGF2ZSB0byB1cGRhdGUgdGhlIGN1cnNvciBhbmQgZGlzcGxheSAod2hpY2ggd291bGQKICAgIC8vIGJlIGF3a3dhcmQsIHNsb3csIGFuZCBlcnJvci1wcm9uZSksIGJ1dCBpbnN0ZWFkIHVwZGF0ZXMgYXJlCiAgICAvLyBiYXRjaGVkIGFuZCB0aGVuIGFsbCBjb21iaW5lZCBhbmQgZXhlY3V0ZWQgYXQgb25jZS4KICAgIGZ1bmN0aW9uIHN0YXJ0T3BlcmF0aW9uKCkgewogICAgICB1cGRhdGVJbnB1dCA9IHVzZXJTZWxDaGFuZ2UgPSB0ZXh0Q2hhbmdlZCA9IG51bGw7CiAgICAgIGNoYW5nZXMgPSBbXTsgc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlOyBjYWxsYmFja3MgPSBbXTsKICAgIH0KICAgIGZ1bmN0aW9uIGVuZE9wZXJhdGlvbigpIHsKICAgICAgdmFyIHJlU2Nyb2xsID0gZmFsc2UsIHVwZGF0ZWQ7CiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSByZVNjcm9sbCA9ICFzY3JvbGxDdXJzb3JJbnRvVmlldygpOwogICAgICBpZiAoY2hhbmdlcy5sZW5ndGgpIHVwZGF0ZWQgPSB1cGRhdGVEaXNwbGF5KGNoYW5nZXMsIHRydWUpOwogICAgICBlbHNlIHsKICAgICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkgdXBkYXRlQ3Vyc29yKCk7CiAgICAgICAgaWYgKGd1dHRlckRpcnR5KSB1cGRhdGVHdXR0ZXIoKTsKICAgICAgfQogICAgICBpZiAocmVTY3JvbGwpIHNjcm9sbEN1cnNvckludG9WaWV3KCk7CiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB7c2Nyb2xsRWRpdG9ySW50b1ZpZXcoKTsgcmVzdGFydEJsaW5rKCk7fQoKICAgICAgaWYgKGZvY3VzZWQgJiYgIWxlYXZlSW5wdXRBbG9uZSAmJgogICAgICAgICAgKHVwZGF0ZUlucHV0ID09PSB0cnVlIHx8ICh1cGRhdGVJbnB1dCAhPT0gZmFsc2UgJiYgc2VsZWN0aW9uQ2hhbmdlZCkpKQogICAgICAgIHJlc2V0SW5wdXQodXNlclNlbENoYW5nZSk7CgogICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCAmJiBvcHRpb25zLm1hdGNoQnJhY2tldHMpCiAgICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAoYnJhY2tldEhpZ2hsaWdodGVkKSB7YnJhY2tldEhpZ2hsaWdodGVkKCk7IGJyYWNrZXRIaWdobGlnaHRlZCA9IG51bGw7fQogICAgICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSBtYXRjaEJyYWNrZXRzKGZhbHNlKTsKICAgICAgICB9KSwgMjApOwogICAgICB2YXIgdGMgPSB0ZXh0Q2hhbmdlZCwgY2JzID0gY2FsbGJhY2tzOyAvLyB0aGVzZSBjYW4gYmUgcmVzZXQgYnkgY2FsbGJhY2tzCiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmIG9wdGlvbnMub25DdXJzb3JBY3Rpdml0eSkKICAgICAgICBvcHRpb25zLm9uQ3Vyc29yQWN0aXZpdHkoaW5zdGFuY2UpOwogICAgICBpZiAodGMgJiYgb3B0aW9ucy5vbkNoYW5nZSAmJiBpbnN0YW5jZSkKICAgICAgICBvcHRpb25zLm9uQ2hhbmdlKGluc3RhbmNlLCB0Yyk7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2JzLmxlbmd0aDsgKytpKSBjYnNbaV0oaW5zdGFuY2UpOwogICAgICBpZiAodXBkYXRlZCAmJiBvcHRpb25zLm9uVXBkYXRlKSBvcHRpb25zLm9uVXBkYXRlKGluc3RhbmNlKTsKICAgIH0KICAgIHZhciBuZXN0ZWRPcGVyYXRpb24gPSAwOwogICAgZnVuY3Rpb24gb3BlcmF0aW9uKGYpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghbmVzdGVkT3BlcmF0aW9uKyspIHN0YXJ0T3BlcmF0aW9uKCk7CiAgICAgICAgdHJ5IHt2YXIgcmVzdWx0ID0gZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO30KICAgICAgICBmaW5hbGx5IHtpZiAoIS0tbmVzdGVkT3BlcmF0aW9uKSBlbmRPcGVyYXRpb24oKTt9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgIH0KCiAgICBmb3IgKHZhciBleHQgaW4gZXh0ZW5zaW9ucykKICAgICAgaWYgKGV4dGVuc2lvbnMucHJvcGVydHlJc0VudW1lcmFibGUoZXh0KSAmJgogICAgICAgICAgIWluc3RhbmNlLnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4dCkpCiAgICAgICAgaW5zdGFuY2VbZXh0XSA9IGV4dGVuc2lvbnNbZXh0XTsKICAgIHJldHVybiBpbnN0YW5jZTsKICB9IC8vIChlbmQgb2YgZnVuY3Rpb24gQ29kZU1pcnJvcikKCiAgLy8gVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvcHRpb25zLgogIENvZGVNaXJyb3IuZGVmYXVsdHMgPSB7CiAgICB2YWx1ZTogIiIsCiAgICBtb2RlOiBudWxsLAogICAgdGhlbWU6ICJkZWZhdWx0IiwKICAgIGluZGVudFVuaXQ6IDIsCiAgICBpbmRlbnRXaXRoVGFiczogZmFsc2UsCiAgICB0YWJTaXplOiA0LAogICAga2V5TWFwOiAiZGVmYXVsdCIsCiAgICBleHRyYUtleXM6IG51bGwsCiAgICBlbGVjdHJpY0NoYXJzOiB0cnVlLAogICAgb25LZXlFdmVudDogbnVsbCwKICAgIGxpbmVXcmFwcGluZzogZmFsc2UsCiAgICBsaW5lTnVtYmVyczogZmFsc2UsCiAgICBndXR0ZXI6IGZhbHNlLAogICAgZml4ZWRHdXR0ZXI6IGZhbHNlLAogICAgZmlyc3RMaW5lTnVtYmVyOiAxLAogICAgcmVhZE9ubHk6IGZhbHNlLAogICAgb25DaGFuZ2U6IG51bGwsCiAgICBvbkN1cnNvckFjdGl2aXR5OiBudWxsLAogICAgb25HdXR0ZXJDbGljazogbnVsbCwKICAgIG9uSGlnaGxpZ2h0Q29tcGxldGU6IG51bGwsCiAgICBvblVwZGF0ZTogbnVsbCwKICAgIG9uRm9jdXM6IG51bGwsIG9uQmx1cjogbnVsbCwgb25TY3JvbGw6IG51bGwsCiAgICBtYXRjaEJyYWNrZXRzOiBmYWxzZSwKICAgIHdvcmtUaW1lOiAxMDAsCiAgICB3b3JrRGVsYXk6IDIwMCwKICAgIHBvbGxJbnRlcnZhbDogMTAwLAogICAgdW5kb0RlcHRoOiA0MCwKICAgIHRhYmluZGV4OiBudWxsLAogICAgZG9jdW1lbnQ6IHdpbmRvdy5kb2N1bWVudAogIH07CgogIHZhciBtYWMgPSAvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7CiAgdmFyIHdpbiA9IC9XaW4vLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKCiAgLy8gS25vd24gbW9kZXMsIGJ5IG5hbWUgYW5kIGJ5IE1JTUUKICB2YXIgbW9kZXMgPSB7fSwgbWltZU1vZGVzID0ge307CiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlID0gZnVuY3Rpb24obmFtZSwgbW9kZSkgewogICAgaWYgKCFDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgJiYgbmFtZSAhPSAibnVsbCIpIENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7CiAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7CiAgfTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUgPSBmdW5jdGlvbihtaW1lLCBzcGVjKSB7CiAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjOwogIH07CiAgQ29kZU1pcnJvci5nZXRNb2RlID0gZnVuY3Rpb24ob3B0aW9ucywgc3BlYykgewogICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkKICAgICAgc3BlYyA9IG1pbWVNb2Rlc1tzcGVjXTsKICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIikKICAgICAgdmFyIG1uYW1lID0gc3BlYywgY29uZmlnID0ge307CiAgICBlbHNlIGlmIChzcGVjICE9IG51bGwpCiAgICAgIHZhciBtbmFtZSA9IHNwZWMubmFtZSwgY29uZmlnID0gc3BlYzsKICAgIHZhciBtZmFjdG9yeSA9IG1vZGVzW21uYW1lXTsKICAgIGlmICghbWZhY3RvcnkpIHsKICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKSBjb25zb2xlLndhcm4oIk5vIG1vZGUgIiArIG1uYW1lICsgIiBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHBsYWluIHRleHQuIik7CiAgICAgIHJldHVybiBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywgInRleHQvcGxhaW4iKTsKICAgIH0KICAgIHJldHVybiBtZmFjdG9yeShvcHRpb25zLCBjb25maWcgfHwge30pOwogIH07CiAgQ29kZU1pcnJvci5saXN0TW9kZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBsaXN0ID0gW107CiAgICBmb3IgKHZhciBtIGluIG1vZGVzKQogICAgICBpZiAobW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobSkpIGxpc3QucHVzaChtKTsKICAgIHJldHVybiBsaXN0OwogIH07CiAgQ29kZU1pcnJvci5saXN0TUlNRXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBsaXN0ID0gW107CiAgICBmb3IgKHZhciBtIGluIG1pbWVNb2RlcykKICAgICAgaWYgKG1pbWVNb2Rlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShtKSkgbGlzdC5wdXNoKHttaW1lOiBtLCBtb2RlOiBtaW1lTW9kZXNbbV19KTsKICAgIHJldHVybiBsaXN0OwogIH07CgogIHZhciBleHRlbnNpb25zID0gQ29kZU1pcnJvci5leHRlbnNpb25zID0ge307CiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24gPSBmdW5jdGlvbihuYW1lLCBmdW5jKSB7CiAgICBleHRlbnNpb25zW25hbWVdID0gZnVuYzsKICB9OwoKICB2YXIgY29tbWFuZHMgPSBDb2RlTWlycm9yLmNvbW1hbmRzID0gewogICAgc2VsZWN0QWxsOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDB9LCB7bGluZTogY20ubGluZUNvdW50KCkgLSAxfSk7fSwKICAgIGtpbGxMaW5lOiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgZnJvbSA9IGNtLmdldEN1cnNvcih0cnVlKSwgdG8gPSBjbS5nZXRDdXJzb3IoZmFsc2UpLCBzZWwgPSAhcG9zRXEoZnJvbSwgdG8pOwogICAgICBpZiAoIXNlbCAmJiBjbS5nZXRMaW5lKGZyb20ubGluZSkubGVuZ3RoID09IGZyb20uY2gpIGNtLnJlcGxhY2VSYW5nZSgiIiwgZnJvbSwge2xpbmU6IGZyb20ubGluZSArIDEsIGNoOiAwfSk7CiAgICAgIGVsc2UgY20ucmVwbGFjZVJhbmdlKCIiLCBmcm9tLCBzZWwgPyB0byA6IHtsaW5lOiBmcm9tLmxpbmV9KTsKICAgIH0sCiAgICBkZWxldGVMaW5lOiBmdW5jdGlvbihjbSkge3ZhciBsID0gY20uZ2V0Q3Vyc29yKCkubGluZTsgY20ucmVwbGFjZVJhbmdlKCIiLCB7bGluZTogbCwgY2g6IDB9LCB7bGluZTogbH0pO30sCiAgICB1bmRvOiBmdW5jdGlvbihjbSkge2NtLnVuZG8oKTt9LAogICAgcmVkbzogZnVuY3Rpb24oY20pIHtjbS5yZWRvKCk7fSwKICAgIGdvRG9jU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0Q3Vyc29yKDAsIDAsIHRydWUpO30sCiAgICBnb0RvY0VuZDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IGNtLmxpbmVDb3VudCgpIC0gMX0sIG51bGwsIHRydWUpO30sCiAgICBnb0xpbmVTdGFydDogZnVuY3Rpb24oY20pIHtjbS5zZXRDdXJzb3IoY20uZ2V0Q3Vyc29yKCkubGluZSwgMCwgdHJ1ZSk7fSwKICAgIGdvTGluZVN0YXJ0U21hcnQ6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGN1ci5saW5lKSwgZmlyc3ROb25XUyA9IE1hdGgubWF4KDAsIHRleHQuc2VhcmNoKC9cUy8pKTsKICAgICAgY20uc2V0Q3Vyc29yKGN1ci5saW5lLCBjdXIuY2ggPD0gZmlyc3ROb25XUyAmJiBjdXIuY2ggPyAwIDogZmlyc3ROb25XUywgdHJ1ZSk7CiAgICB9LAogICAgZ29MaW5lRW5kOiBmdW5jdGlvbihjbSkge2NtLnNldFNlbGVjdGlvbih7bGluZTogY20uZ2V0Q3Vyc29yKCkubGluZX0sIG51bGwsIHRydWUpO30sCiAgICBnb0xpbmVVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgImxpbmUiKTt9LAogICAgZ29MaW5lRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAibGluZSIpO30sCiAgICBnb1BhZ2VVcDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigtMSwgInBhZ2UiKTt9LAogICAgZ29QYWdlRG93bjogZnVuY3Rpb24oY20pIHtjbS5tb3ZlVigxLCAicGFnZSIpO30sCiAgICBnb0NoYXJMZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAiY2hhciIpO30sCiAgICBnb0NoYXJSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY2hhciIpO30sCiAgICBnb0NvbHVtbkxlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJjb2x1bW4iKTt9LAogICAgZ29Db2x1bW5SaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAiY29sdW1uIik7fSwKICAgIGdvV29yZExlZnQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoLTEsICJ3b3JkIik7fSwKICAgIGdvV29yZFJpZ2h0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKDEsICJ3b3JkIik7fSwKICAgIGRlbENoYXJMZWZ0OiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJjaGFyIik7fSwKICAgIGRlbENoYXJSaWdodDogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJjaGFyIik7fSwKICAgIGRlbFdvcmRMZWZ0OiBmdW5jdGlvbihjbSkge2NtLmRlbGV0ZUgoLTEsICJ3b3JkIik7fSwKICAgIGRlbFdvcmRSaWdodDogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKDEsICJ3b3JkIik7fSwKICAgIGluZGVudEF1dG86IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzbWFydCIpO30sCiAgICBpbmRlbnRNb3JlOiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigiYWRkIik7fSwKICAgIGluZGVudExlc3M6IGZ1bmN0aW9uKGNtKSB7Y20uaW5kZW50U2VsZWN0aW9uKCJzdWJ0cmFjdCIpO30sCiAgICBpbnNlcnRUYWI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbigiXHQiLCAiZW5kIik7fSwKICAgIHRyYW5zcG9zZUNoYXJzOiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGxpbmUgPSBjbS5nZXRMaW5lKGN1ci5saW5lKTsKICAgICAgaWYgKGN1ci5jaCA+IDAgJiYgY3VyLmNoIDwgbGluZS5sZW5ndGggLSAxKQogICAgICAgIGNtLnJlcGxhY2VSYW5nZShsaW5lLmNoYXJBdChjdXIuY2gpICsgbGluZS5jaGFyQXQoY3VyLmNoIC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaCAtIDF9LCB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2ggKyAxfSk7CiAgICB9LAogICAgbmV3bGluZUFuZEluZGVudDogZnVuY3Rpb24oY20pIHsKICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiXG4iLCAiZW5kIik7CiAgICAgIGNtLmluZGVudExpbmUoY20uZ2V0Q3Vyc29yKCkubGluZSk7CiAgICB9LAogICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbihjbSkge2NtLnRvZ2dsZU92ZXJ3cml0ZSgpO30KICB9OwoKICB2YXIga2V5TWFwID0gQ29kZU1pcnJvci5rZXlNYXAgPSB7fTsKICBrZXlNYXAuYmFzaWMgPSB7CiAgICAiTGVmdCI6ICJnb0NoYXJMZWZ0IiwgIlJpZ2h0IjogImdvQ2hhclJpZ2h0IiwgIlVwIjogImdvTGluZVVwIiwgIkRvd24iOiAiZ29MaW5lRG93biIsCiAgICAiRW5kIjogImdvTGluZUVuZCIsICJIb21lIjogImdvTGluZVN0YXJ0U21hcnQiLCAiUGFnZVVwIjogImdvUGFnZVVwIiwgIlBhZ2VEb3duIjogImdvUGFnZURvd24iLAogICAgIkRlbGV0ZSI6ICJkZWxDaGFyUmlnaHQiLCAiQmFja3NwYWNlIjogImRlbENoYXJMZWZ0IiwgIlRhYiI6ICJpbmRlbnRNb3JlIiwgIlNoaWZ0LVRhYiI6ICJpbmRlbnRMZXNzIiwKICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50IiwgIkluc2VydCI6ICJ0b2dnbGVPdmVyd3JpdGUiCiAgfTsKICAvLyBOb3RlIHRoYXQgdGhlIHNhdmUgYW5kIGZpbmQtcmVsYXRlZCBjb21tYW5kcyBhcmVuJ3QgZGVmaW5lZCBieQogIC8vIGRlZmF1bHQuIFVua25vd24gY29tbWFuZHMgYXJlIHNpbXBseSBpZ25vcmVkLgogIGtleU1hcC5wY0RlZmF1bHQgPSB7CiAgICAiQ3RybC1BIjogInNlbGVjdEFsbCIsICJDdHJsLUQiOiAiZGVsZXRlTGluZSIsICJDdHJsLVoiOiAidW5kbyIsICJTaGlmdC1DdHJsLVoiOiAicmVkbyIsICJDdHJsLVkiOiAicmVkbyIsCiAgICAiQ3RybC1Ib21lIjogImdvRG9jU3RhcnQiLCAiQWx0LVVwIjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKICAgICJDdHJsLUxlZnQiOiAiZ29Xb3JkTGVmdCIsICJDdHJsLVJpZ2h0IjogImdvV29yZFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFsdC1SaWdodCI6ICJnb0xpbmVFbmQiLAogICAgIkN0cmwtQmFja3NwYWNlIjogImRlbFdvcmRMZWZ0IiwgIkN0cmwtRGVsZXRlIjogImRlbFdvcmRSaWdodCIsICJDdHJsLVMiOiAic2F2ZSIsICJDdHJsLUYiOiAiZmluZCIsCiAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUN0cmwtRyI6ICJmaW5kUHJldiIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlmdC1DdHJsLVIiOiAicmVwbGFjZUFsbCIsCiAgICBmYWxsdGhyb3VnaDogImJhc2ljIgogIH07CiAga2V5TWFwLm1hY0RlZmF1bHQgPSB7CiAgICAiQ21kLUEiOiAic2VsZWN0QWxsIiwgIkNtZC1EIjogImRlbGV0ZUxpbmUiLCAiQ21kLVoiOiAidW5kbyIsICJTaGlmdC1DbWQtWiI6ICJyZWRvIiwgIkNtZC1ZIjogInJlZG8iLAogICAgIkNtZC1VcCI6ICJnb0RvY1N0YXJ0IiwgIkNtZC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ21kLURvd24iOiAiZ29Eb2NFbmQiLCAiQWx0LUxlZnQiOiAiZ29Xb3JkTGVmdCIsCiAgICAiQWx0LVJpZ2h0IjogImdvV29yZFJpZ2h0IiwgIkNtZC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkNtZC1SaWdodCI6ICJnb0xpbmVFbmQiLCAiQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkTGVmdCIsCiAgICAiQ3RybC1BbHQtQmFja3NwYWNlIjogImRlbFdvcmRSaWdodCIsICJBbHQtRGVsZXRlIjogImRlbFdvcmRSaWdodCIsICJDbWQtUyI6ICJzYXZlIiwgIkNtZC1GIjogImZpbmQiLAogICAgIkNtZC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUNtZC1HIjogImZpbmRQcmV2IiwgIkNtZC1BbHQtRiI6ICJyZXBsYWNlIiwgIlNoaWZ0LUNtZC1BbHQtRiI6ICJyZXBsYWNlQWxsIiwKICAgIGZhbGx0aHJvdWdoOiBbImJhc2ljIiwgImVtYWNzeSJdCiAgfTsKICBrZXlNYXBbImRlZmF1bHQiXSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDsKICBrZXlNYXAuZW1hY3N5ID0gewogICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIsICJDdHJsLUIiOiAiZ29DaGFyTGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24iLAogICAgIkFsdC1GIjogImdvV29yZFJpZ2h0IiwgIkFsdC1CIjogImdvV29yZExlZnQiLCAiQ3RybC1BIjogImdvTGluZVN0YXJ0IiwgIkN0cmwtRSI6ICJnb0xpbmVFbmQiLAogICAgIkN0cmwtViI6ICJnb1BhZ2VVcCIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdlRG93biIsICJDdHJsLUQiOiAiZGVsQ2hhclJpZ2h0IiwgIkN0cmwtSCI6ICJkZWxDaGFyTGVmdCIsCiAgICAiQWx0LUQiOiAiZGVsV29yZFJpZ2h0IiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZExlZnQiLCAiQ3RybC1LIjogImtpbGxMaW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKICB9OwoKICBmdW5jdGlvbiBsb29rdXBLZXkobmFtZSwgZXh0cmFNYXAsIG1hcCkgewogICAgZnVuY3Rpb24gbG9va3VwKG5hbWUsIG1hcCwgZnQpIHsKICAgICAgdmFyIGZvdW5kID0gbWFwW25hbWVdOwogICAgICBpZiAoZm91bmQgIT0gbnVsbCkgcmV0dXJuIGZvdW5kOwogICAgICBpZiAoZnQgPT0gbnVsbCkgZnQgPSBtYXAuZmFsbHRocm91Z2g7CiAgICAgIGlmIChmdCA9PSBudWxsKSByZXR1cm4gbWFwLmNhdGNoYWxsOwogICAgICBpZiAodHlwZW9mIGZ0ID09ICJzdHJpbmciKSByZXR1cm4gbG9va3VwKG5hbWUsIGtleU1hcFtmdF0pOwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGZ0Lmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIGZvdW5kID0gbG9va3VwKG5hbWUsIGtleU1hcFtmdFtpXV0pOwogICAgICAgIGlmIChmb3VuZCAhPSBudWxsKSByZXR1cm4gZm91bmQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gZXh0cmFNYXAgPyBsb29rdXAobmFtZSwgZXh0cmFNYXAsIG1hcCkgOiBsb29rdXAobmFtZSwga2V5TWFwW21hcF0pOwogIH0KICBmdW5jdGlvbiBpc01vZGlmaWVyS2V5KGV2ZW50KSB7CiAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2V2ZW50LmtleUNvZGVdOwogICAgcmV0dXJuIG5hbWUgPT0gIkN0cmwiIHx8IG5hbWUgPT0gIkFsdCIgfHwgbmFtZSA9PSAiU2hpZnQiIHx8IG5hbWUgPT0gIk1vZCI7CiAgfQoKICBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSA9IGZ1bmN0aW9uKHRleHRhcmVhLCBvcHRpb25zKSB7CiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTsKICAgIG9wdGlvbnMudmFsdWUgPSB0ZXh0YXJlYS52YWx1ZTsKICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJpbmRleCkKICAgICAgb3B0aW9ucy50YWJpbmRleCA9IHRleHRhcmVhLnRhYmluZGV4OwoKICAgIGZ1bmN0aW9uIHNhdmUoKSB7dGV4dGFyZWEudmFsdWUgPSBpbnN0YW5jZS5nZXRWYWx1ZSgpO30KICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7CiAgICAgIC8vIERlcGxvcmFibGUgaGFjayB0byBtYWtlIHRoZSBzdWJtaXQgbWV0aG9kIGRvIHRoZSByaWdodCB0aGluZy4KICAgICAgdmFyIHJtU3VibWl0ID0gY29ubmVjdCh0ZXh0YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSwgdHJ1ZSk7CiAgICAgIGlmICh0eXBlb2YgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhciByZWFsU3VibWl0ID0gdGV4dGFyZWEuZm9ybS5zdWJtaXQ7CiAgICAgICAgZnVuY3Rpb24gd3JhcHBlZFN1Ym1pdCgpIHsKICAgICAgICAgIHNhdmUoKTsKICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0KCk7CiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7CiAgICAgICAgfQogICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gd3JhcHBlZFN1Ym1pdDsKICAgICAgfQogICAgfQoKICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICB2YXIgaW5zdGFuY2UgPSBDb2RlTWlycm9yKGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgdGV4dGFyZWEubmV4dFNpYmxpbmcpOwogICAgfSwgb3B0aW9ucyk7CiAgICBpbnN0YW5jZS5zYXZlID0gc2F2ZTsKICAgIGluc3RhbmNlLmdldFRleHRBcmVhID0gZnVuY3Rpb24oKSB7IHJldHVybiB0ZXh0YXJlYTsgfTsKICAgIGluc3RhbmNlLnRvVGV4dEFyZWEgPSBmdW5jdGlvbigpIHsKICAgICAgc2F2ZSgpOwogICAgICB0ZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGluc3RhbmNlLmdldFdyYXBwZXJFbGVtZW50KCkpOwogICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7CiAgICAgICAgcm1TdWJtaXQoKTsKICAgICAgICBpZiAodHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpCiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7CiAgICAgIH0KICAgIH07CiAgICByZXR1cm4gaW5zdGFuY2U7CiAgfTsKCiAgLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0ZWQgYmVjYXVzZSBtb2RlcwogIC8vIHNvbWV0aW1lcyBuZWVkIHRvIGRvIHRoaXMuCiAgZnVuY3Rpb24gY29weVN0YXRlKG1vZGUsIHN0YXRlKSB7CiAgICBpZiAoc3RhdGUgPT09IHRydWUpIHJldHVybiBzdGF0ZTsKICAgIGlmIChtb2RlLmNvcHlTdGF0ZSkgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRlKTsKICAgIHZhciBuc3RhdGUgPSB7fTsKICAgIGZvciAodmFyIG4gaW4gc3RhdGUpIHsKICAgICAgdmFyIHZhbCA9IHN0YXRlW25dOwogICAgICBpZiAodmFsIGluc3RhbmNlb2YgQXJyYXkpIHZhbCA9IHZhbC5jb25jYXQoW10pOwogICAgICBuc3RhdGVbbl0gPSB2YWw7CiAgICB9CiAgICByZXR1cm4gbnN0YXRlOwogIH0KICBDb2RlTWlycm9yLmNvcHlTdGF0ZSA9IGNvcHlTdGF0ZTsKICBmdW5jdGlvbiBzdGFydFN0YXRlKG1vZGUsIGExLCBhMikgewogICAgcmV0dXJuIG1vZGUuc3RhcnRTdGF0ZSA/IG1vZGUuc3RhcnRTdGF0ZShhMSwgYTIpIDogdHJ1ZTsKICB9CiAgQ29kZU1pcnJvci5zdGFydFN0YXRlID0gc3RhcnRTdGF0ZTsKCiAgLy8gVGhlIGNoYXJhY3RlciBzdHJlYW0gdXNlZCBieSBhIG1vZGUncyBwYXJzZXIuCiAgZnVuY3Rpb24gU3RyaW5nU3RyZWFtKHN0cmluZywgdGFiU2l6ZSkgewogICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0ID0gMDsKICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOwogICAgdGhpcy50YWJTaXplID0gdGFiU2l6ZSB8fCA4OwogIH0KICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewogICAgZW9sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3MgPj0gdGhpcy5zdHJpbmcubGVuZ3RoO30sCiAgICBzb2w6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA9PSAwO30sCiAgICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTt9LAogICAgbmV4dDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLnBvcyA8IHRoaXMuc3RyaW5nLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOwogICAgfSwKICAgIGVhdDogZnVuY3Rpb24obWF0Y2gpIHsKICAgICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKICAgICAgaWYgKHR5cGVvZiBtYXRjaCA9PSAic3RyaW5nIikgdmFyIG9rID0gY2ggPT0gbWF0Y2g7CiAgICAgIGVsc2UgdmFyIG9rID0gY2ggJiYgKG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKSk7CiAgICAgIGlmIChvaykgeysrdGhpcy5wb3M7IHJldHVybiBjaDt9CiAgICB9LAogICAgZWF0V2hpbGU6IGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgICB3aGlsZSAodGhpcy5lYXQobWF0Y2gpKXt9CiAgICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0OwogICAgfSwKICAgIGVhdFNwYWNlOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7CiAgICAgIHdoaWxlICgvW1xzXHUwMGEwXS8udGVzdCh0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpKSkgKyt0aGlzLnBvczsKICAgICAgcmV0dXJuIHRoaXMucG9zID4gc3RhcnQ7CiAgICB9LAogICAgc2tpcFRvRW5kOiBmdW5jdGlvbigpIHt0aGlzLnBvcyA9IHRoaXMuc3RyaW5nLmxlbmd0aDt9LAogICAgc2tpcFRvOiBmdW5jdGlvbihjaCkgewogICAgICB2YXIgZm91bmQgPSB0aGlzLnN0cmluZy5pbmRleE9mKGNoLCB0aGlzLnBvcyk7CiAgICAgIGlmIChmb3VuZCA+IC0xKSB7dGhpcy5wb3MgPSBmb3VuZDsgcmV0dXJuIHRydWU7fQogICAgfSwKICAgIGJhY2tVcDogZnVuY3Rpb24obikge3RoaXMucG9zIC09IG47fSwKICAgIGNvbHVtbjogZnVuY3Rpb24oKSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCB0aGlzLnN0YXJ0LCB0aGlzLnRhYlNpemUpO30sCiAgICBpbmRlbnRhdGlvbjogZnVuY3Rpb24oKSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nLCBudWxsLCB0aGlzLnRhYlNpemUpO30sCiAgICBtYXRjaDogZnVuY3Rpb24ocGF0dGVybiwgY29uc3VtZSwgY2FzZUluc2Vuc2l0aXZlKSB7CiAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICAgIGZ1bmN0aW9uIGNhc2VkKHN0cikge3JldHVybiBjYXNlSW5zZW5zaXRpdmUgPyBzdHIudG9Mb3dlckNhc2UoKSA6IHN0cjt9CiAgICAgICAgaWYgKGNhc2VkKHRoaXMuc3RyaW5nKS5pbmRleE9mKGNhc2VkKHBhdHRlcm4pLCB0aGlzLnBvcykgPT0gdGhpcy5wb3MpIHsKICAgICAgICAgIGlmIChjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gcGF0dGVybi5sZW5ndGg7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5wb3MpLm1hdGNoKHBhdHRlcm4pOwogICAgICAgIGlmIChtYXRjaCAmJiBjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoOwogICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgfQogICAgfSwKICAgIGN1cnJlbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMucG9zKTt9CiAgfTsKICBDb2RlTWlycm9yLlN0cmluZ1N0cmVhbSA9IFN0cmluZ1N0cmVhbTsKCiAgZnVuY3Rpb24gTWFya2VkVGV4dChmcm9tLCB0bywgY2xhc3NOYW1lLCBzZXQpIHsKICAgIHRoaXMuZnJvbSA9IGZyb207IHRoaXMudG8gPSB0bzsgdGhpcy5zdHlsZSA9IGNsYXNzTmFtZTsgdGhpcy5zZXQgPSBzZXQ7CiAgfQogIE1hcmtlZFRleHQucHJvdG90eXBlID0gewogICAgYXR0YWNoOiBmdW5jdGlvbihsaW5lKSB7IHRoaXMuc2V0LnB1c2gobGluZSk7IH0sCiAgICBkZXRhY2g6IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgdmFyIGl4ID0gaW5kZXhPZih0aGlzLnNldCwgbGluZSk7CiAgICAgIGlmIChpeCA+IC0xKSB0aGlzLnNldC5zcGxpY2UoaXgsIDEpOwogICAgfSwKICAgIHNwbGl0OiBmdW5jdGlvbihwb3MsIGxlbkJlZm9yZSkgewogICAgICBpZiAodGhpcy50byA8PSBwb3MgJiYgdGhpcy50byAhPSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIGZyb20gPSB0aGlzLmZyb20gPCBwb3MgfHwgdGhpcy5mcm9tID09IG51bGwgPyBudWxsIDogdGhpcy5mcm9tIC0gcG9zICsgbGVuQmVmb3JlOwogICAgICB2YXIgdG8gPSB0aGlzLnRvID09IG51bGwgPyBudWxsIDogdGhpcy50byAtIHBvcyArIGxlbkJlZm9yZTsKICAgICAgcmV0dXJuIG5ldyBNYXJrZWRUZXh0KGZyb20sIHRvLCB0aGlzLnN0eWxlLCB0aGlzLnNldCk7CiAgICB9LAogICAgZHVwOiBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBNYXJrZWRUZXh0KG51bGwsIG51bGwsIHRoaXMuc3R5bGUsIHRoaXMuc2V0KTsgfSwKICAgIGNsaXBUbzogZnVuY3Rpb24oZnJvbU9wZW4sIGZyb20sIHRvT3BlbiwgdG8sIGRpZmYpIHsKICAgICAgaWYgKHRoaXMuZnJvbSAhPSBudWxsICYmIHRoaXMuZnJvbSA+PSBmcm9tKQogICAgICAgIHRoaXMuZnJvbSA9IE1hdGgubWF4KHRvLCB0aGlzLmZyb20pICsgZGlmZjsKICAgICAgaWYgKHRoaXMudG8gIT0gbnVsbCAmJiB0aGlzLnRvID4gZnJvbSkKICAgICAgICB0aGlzLnRvID0gdG8gPCB0aGlzLnRvID8gdGhpcy50byArIGRpZmYgOiBmcm9tOwogICAgICBpZiAoZnJvbU9wZW4gJiYgdG8gPiB0aGlzLmZyb20gJiYgKHRvIDwgdGhpcy50byB8fCB0aGlzLnRvID09IG51bGwpKQogICAgICAgIHRoaXMuZnJvbSA9IG51bGw7CiAgICAgIGlmICh0b09wZW4gJiYgKGZyb20gPCB0aGlzLnRvIHx8IHRoaXMudG8gPT0gbnVsbCkgJiYgKGZyb20gPiB0aGlzLmZyb20gfHwgdGhpcy5mcm9tID09IG51bGwpKQogICAgICAgIHRoaXMudG8gPSBudWxsOwogICAgfSwKICAgIGlzRGVhZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmZyb20gIT0gbnVsbCAmJiB0aGlzLnRvICE9IG51bGwgJiYgdGhpcy5mcm9tID49IHRoaXMudG87IH0sCiAgICBzYW1lU2V0OiBmdW5jdGlvbih4KSB7IHJldHVybiB0aGlzLnNldCA9PSB4LnNldDsgfQogIH07CgogIGZ1bmN0aW9uIEJvb2ttYXJrKHBvcykgewogICAgdGhpcy5mcm9tID0gcG9zOyB0aGlzLnRvID0gcG9zOyB0aGlzLmxpbmUgPSBudWxsOwogIH0KICBCb29rbWFyay5wcm90b3R5cGUgPSB7CiAgICBhdHRhY2g6IGZ1bmN0aW9uKGxpbmUpIHsgdGhpcy5saW5lID0gbGluZTsgfSwKICAgIGRldGFjaDogZnVuY3Rpb24obGluZSkgeyBpZiAodGhpcy5saW5lID09IGxpbmUpIHRoaXMubGluZSA9IG51bGw7IH0sCiAgICBzcGxpdDogZnVuY3Rpb24ocG9zLCBsZW5CZWZvcmUpIHsKICAgICAgaWYgKHBvcyA8IHRoaXMuZnJvbSkgewogICAgICAgIHRoaXMuZnJvbSA9IHRoaXMudG8gPSAodGhpcy5mcm9tIC0gcG9zKSArIGxlbkJlZm9yZTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgfSwKICAgIGlzRGVhZDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmZyb20gPiB0aGlzLnRvOyB9LAogICAgY2xpcFRvOiBmdW5jdGlvbihmcm9tT3BlbiwgZnJvbSwgdG9PcGVuLCB0bywgZGlmZikgewogICAgICBpZiAoKGZyb21PcGVuIHx8IGZyb20gPCB0aGlzLmZyb20pICYmICh0b09wZW4gfHwgdG8gPiB0aGlzLnRvKSkgewogICAgICAgIHRoaXMuZnJvbSA9IDA7IHRoaXMudG8gPSAtMTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmZyb20gPiBmcm9tKSB7CiAgICAgICAgdGhpcy5mcm9tID0gdGhpcy50byA9IE1hdGgubWF4KHRvLCB0aGlzLmZyb20pICsgZGlmZjsKICAgICAgfQogICAgfSwKICAgIHNhbWVTZXQ6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIGZhbHNlOyB9LAogICAgZmluZDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICghdGhpcy5saW5lIHx8ICF0aGlzLmxpbmUucGFyZW50KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lTm8odGhpcy5saW5lKSwgY2g6IHRoaXMuZnJvbX07CiAgICB9LAogICAgY2xlYXI6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5saW5lKSB7CiAgICAgICAgdmFyIGZvdW5kID0gaW5kZXhPZih0aGlzLmxpbmUubWFya2VkLCB0aGlzKTsKICAgICAgICBpZiAoZm91bmQgIT0gLTEpIHRoaXMubGluZS5tYXJrZWQuc3BsaWNlKGZvdW5kLCAxKTsKICAgICAgICB0aGlzLmxpbmUgPSBudWxsOwogICAgICB9CiAgICB9CiAgfTsKCiAgLy8gTGluZSBvYmplY3RzLiBUaGVzZSBob2xkIHN0YXRlIHJlbGF0ZWQgdG8gYSBsaW5lLCBpbmNsdWRpbmcKICAvLyBoaWdobGlnaHRpbmcgaW5mbyAodGhlIHN0eWxlcyBhcnJheSkuCiAgZnVuY3Rpb24gTGluZSh0ZXh0LCBzdHlsZXMpIHsKICAgIHRoaXMuc3R5bGVzID0gc3R5bGVzIHx8IFt0ZXh0LCBudWxsXTsKICAgIHRoaXMudGV4dCA9IHRleHQ7CiAgICB0aGlzLmhlaWdodCA9IDE7CiAgICB0aGlzLm1hcmtlZCA9IHRoaXMuZ3V0dGVyTWFya2VyID0gdGhpcy5jbGFzc05hbWUgPSB0aGlzLmhhbmRsZXJzID0gbnVsbDsKICAgIHRoaXMuc3RhdGVBZnRlciA9IHRoaXMucGFyZW50ID0gdGhpcy5oaWRkZW4gPSBudWxsOwogIH0KICBMaW5lLmluaGVyaXRNYXJrcyA9IGZ1bmN0aW9uKHRleHQsIG9yaWcpIHsKICAgIHZhciBsbiA9IG5ldyBMaW5lKHRleHQpLCBtayA9IG9yaWcgJiYgb3JpZy5tYXJrZWQ7CiAgICBpZiAobWspIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgewogICAgICAgIGlmIChta1tpXS50byA9PSBudWxsICYmIG1rW2ldLnN0eWxlKSB7CiAgICAgICAgICB2YXIgbmV3bWsgPSBsbi5tYXJrZWQgfHwgKGxuLm1hcmtlZCA9IFtdKSwgbWFyayA9IG1rW2ldOwogICAgICAgICAgdmFyIG5tYXJrID0gbWFyay5kdXAoKTsgbmV3bWsucHVzaChubWFyayk7IG5tYXJrLmF0dGFjaChsbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbG47CiAgfQogIExpbmUucHJvdG90eXBlID0gewogICAgLy8gUmVwbGFjZSBhIHBpZWNlIG9mIGEgbGluZSwga2VlcGluZyB0aGUgc3R5bGVzIGFyb3VuZCBpdCBpbnRhY3QuCiAgICByZXBsYWNlOiBmdW5jdGlvbihmcm9tLCB0b18sIHRleHQpIHsKICAgICAgdmFyIHN0ID0gW10sIG1rID0gdGhpcy5tYXJrZWQsIHRvID0gdG9fID09IG51bGwgPyB0aGlzLnRleHQubGVuZ3RoIDogdG9fOwogICAgICBjb3B5U3R5bGVzKDAsIGZyb20sIHRoaXMuc3R5bGVzLCBzdCk7CiAgICAgIGlmICh0ZXh0KSBzdC5wdXNoKHRleHQsIG51bGwpOwogICAgICBjb3B5U3R5bGVzKHRvLCB0aGlzLnRleHQubGVuZ3RoLCB0aGlzLnN0eWxlcywgc3QpOwogICAgICB0aGlzLnN0eWxlcyA9IHN0OwogICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQuc2xpY2UoMCwgZnJvbSkgKyB0ZXh0ICsgdGhpcy50ZXh0LnNsaWNlKHRvKTsKICAgICAgdGhpcy5zdGF0ZUFmdGVyID0gbnVsbDsKICAgICAgaWYgKG1rKSB7CiAgICAgICAgdmFyIGRpZmYgPSB0ZXh0Lmxlbmd0aCAtICh0byAtIGZyb20pOwogICAgICAgIGZvciAodmFyIGkgPSAwLCBtYXJrID0gbWtbaV07IGkgPCBtay5sZW5ndGg7ICsraSkgewogICAgICAgICAgbWFyay5jbGlwVG8oZnJvbSA9PSBudWxsLCBmcm9tIHx8IDAsIHRvXyA9PSBudWxsLCB0bywgZGlmZik7CiAgICAgICAgICBpZiAobWFyay5pc0RlYWQoKSkge21hcmsuZGV0YWNoKHRoaXMpOyBtay5zcGxpY2UoaS0tLCAxKTt9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLy8gU3BsaXQgYSBwYXJ0IG9mZiBhIGxpbmUsIGtlZXBpbmcgc3R5bGVzIGFuZCBtYXJrZXJzIGludGFjdC4KICAgIHNwbGl0OiBmdW5jdGlvbihwb3MsIHRleHRCZWZvcmUpIHsKICAgICAgdmFyIHN0ID0gW3RleHRCZWZvcmUsIG51bGxdLCBtayA9IHRoaXMubWFya2VkOwogICAgICBjb3B5U3R5bGVzKHBvcywgdGhpcy50ZXh0Lmxlbmd0aCwgdGhpcy5zdHlsZXMsIHN0KTsKICAgICAgdmFyIHRha2VuID0gbmV3IExpbmUodGV4dEJlZm9yZSArIHRoaXMudGV4dC5zbGljZShwb3MpLCBzdCk7CiAgICAgIGlmIChtaykgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWsubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHZhciBtYXJrID0gbWtbaV07CiAgICAgICAgICB2YXIgbmV3bWFyayA9IG1hcmsuc3BsaXQocG9zLCB0ZXh0QmVmb3JlLmxlbmd0aCk7CiAgICAgICAgICBpZiAobmV3bWFyaykgewogICAgICAgICAgICBpZiAoIXRha2VuLm1hcmtlZCkgdGFrZW4ubWFya2VkID0gW107CiAgICAgICAgICAgIHRha2VuLm1hcmtlZC5wdXNoKG5ld21hcmspOyBuZXdtYXJrLmF0dGFjaCh0YWtlbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0YWtlbjsKICAgIH0sCiAgICBhcHBlbmQ6IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgdmFyIG15bGVuID0gdGhpcy50ZXh0Lmxlbmd0aCwgbWsgPSBsaW5lLm1hcmtlZCwgbXltayA9IHRoaXMubWFya2VkOwogICAgICB0aGlzLnRleHQgKz0gbGluZS50ZXh0OwogICAgICBjb3B5U3R5bGVzKDAsIGxpbmUudGV4dC5sZW5ndGgsIGxpbmUuc3R5bGVzLCB0aGlzLnN0eWxlcyk7CiAgICAgIGlmIChteW1rKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBteW1rLmxlbmd0aDsgKytpKQogICAgICAgICAgaWYgKG15bWtbaV0udG8gPT0gbnVsbCkgbXlta1tpXS50byA9IG15bGVuOwogICAgICB9CiAgICAgIGlmIChtayAmJiBtay5sZW5ndGgpIHsKICAgICAgICBpZiAoIW15bWspIHRoaXMubWFya2VkID0gbXltayA9IFtdOwogICAgICAgIG91dGVyOiBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICB2YXIgbWFyayA9IG1rW2ldOwogICAgICAgICAgaWYgKCFtYXJrLmZyb20pIHsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBteW1rLmxlbmd0aDsgKytqKSB7CiAgICAgICAgICAgICAgdmFyIG15bWFyayA9IG15bWtbal07CiAgICAgICAgICAgICAgaWYgKG15bWFyay50byA9PSBteWxlbiAmJiBteW1hcmsuc2FtZVNldChtYXJrKSkgewogICAgICAgICAgICAgICAgbXltYXJrLnRvID0gbWFyay50byA9PSBudWxsID8gbnVsbCA6IG1hcmsudG8gKyBteWxlbjsKICAgICAgICAgICAgICAgIGlmIChteW1hcmsuaXNEZWFkKCkpIHsKICAgICAgICAgICAgICAgICAgbXltYXJrLmRldGFjaCh0aGlzKTsKICAgICAgICAgICAgICAgICAgbWsuc3BsaWNlKGktLSwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIG15bWsucHVzaChtYXJrKTsKICAgICAgICAgIG1hcmsuYXR0YWNoKHRoaXMpOwogICAgICAgICAgbWFyay5mcm9tICs9IG15bGVuOwogICAgICAgICAgaWYgKG1hcmsudG8gIT0gbnVsbCkgbWFyay50byArPSBteWxlbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmaXhNYXJrRW5kczogZnVuY3Rpb24ob3RoZXIpIHsKICAgICAgdmFyIG1rID0gdGhpcy5tYXJrZWQsIG9tayA9IG90aGVyLm1hcmtlZDsKICAgICAgaWYgKCFtaykgcmV0dXJuOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIG1hcmsgPSBta1tpXSwgY2xvc2UgPSBtYXJrLnRvID09IG51bGw7CiAgICAgICAgaWYgKGNsb3NlICYmIG9taykgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvbWsubGVuZ3RoOyArK2opCiAgICAgICAgICAgIGlmIChvbWtbal0uc2FtZVNldChtYXJrKSkge2Nsb3NlID0gZmFsc2U7IGJyZWFrO30KICAgICAgICB9CiAgICAgICAgaWYgKGNsb3NlKSBtYXJrLnRvID0gdGhpcy50ZXh0Lmxlbmd0aDsKICAgICAgfQogICAgfSwKICAgIGZpeE1hcmtTdGFydHM6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWsgPSB0aGlzLm1hcmtlZDsKICAgICAgaWYgKCFtaykgcmV0dXJuOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKQogICAgICAgIGlmIChta1tpXS5mcm9tID09IG51bGwpIG1rW2ldLmZyb20gPSAwOwogICAgfSwKICAgIGFkZE1hcms6IGZ1bmN0aW9uKG1hcmspIHsKICAgICAgbWFyay5hdHRhY2godGhpcyk7CiAgICAgIGlmICh0aGlzLm1hcmtlZCA9PSBudWxsKSB0aGlzLm1hcmtlZCA9IFtdOwogICAgICB0aGlzLm1hcmtlZC5wdXNoKG1hcmspOwogICAgICB0aGlzLm1hcmtlZC5zb3J0KGZ1bmN0aW9uKGEsIGIpe3JldHVybiAoYS5mcm9tIHx8IDApIC0gKGIuZnJvbSB8fCAwKTt9KTsKICAgIH0sCiAgICAvLyBSdW4gdGhlIGdpdmVuIG1vZGUncyBwYXJzZXIgb3ZlciBhIGxpbmUsIHVwZGF0ZSB0aGUgc3R5bGVzCiAgICAvLyBhcnJheSwgd2hpY2ggY29udGFpbnMgYWx0ZXJuYXRpbmcgZnJhZ21lbnRzIG9mIHRleHQgYW5kIENTUwogICAgLy8gY2xhc3Nlcy4KICAgIGhpZ2hsaWdodDogZnVuY3Rpb24obW9kZSwgc3RhdGUsIHRhYlNpemUpIHsKICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGhpcy50ZXh0LCB0YWJTaXplKSwgc3QgPSB0aGlzLnN0eWxlcywgcG9zID0gMDsKICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwgY3VyV29yZCA9IHN0WzBdLCBwcmV2V29yZDsKICAgICAgaWYgKHRoaXMudGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5ibGFua0xpbmUoc3RhdGUpOwogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgdmFyIHN1YnN0ciA9IHRoaXMudGV4dC5zbGljZShzdHJlYW0uc3RhcnQsIHN0cmVhbS5wb3MpOwogICAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICAgICAgaWYgKHBvcyAmJiBzdFtwb3MtMV0gPT0gc3R5bGUpCiAgICAgICAgICBzdFtwb3MtMl0gKz0gc3Vic3RyOwogICAgICAgIGVsc2UgaWYgKHN1YnN0cikgewogICAgICAgICAgaWYgKCFjaGFuZ2VkICYmIChzdFtwb3MrMV0gIT0gc3R5bGUgfHwgKHBvcyAmJiBzdFtwb3MtMl0gIT0gcHJldldvcmQpKSkgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICBzdFtwb3MrK10gPSBzdWJzdHI7IHN0W3BvcysrXSA9IHN0eWxlOwogICAgICAgICAgcHJldldvcmQgPSBjdXJXb3JkOyBjdXJXb3JkID0gc3RbcG9zXTsKICAgICAgICB9CiAgICAgICAgLy8gR2l2ZSB1cCB3aGVuIGxpbmUgaXMgcmlkaWN1bG91c2x5IGxvbmcKICAgICAgICBpZiAoc3RyZWFtLnBvcyA+IDUwMDApIHsKICAgICAgICAgIHN0W3BvcysrXSA9IHRoaXMudGV4dC5zbGljZShzdHJlYW0ucG9zKTsgc3RbcG9zKytdID0gbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3QubGVuZ3RoICE9IHBvcykge3N0Lmxlbmd0aCA9IHBvczsgY2hhbmdlZCA9IHRydWU7fQogICAgICBpZiAocG9zICYmIHN0W3Bvcy0yXSAhPSBwcmV2V29yZCkgY2hhbmdlZCA9IHRydWU7CiAgICAgIC8vIFNob3J0IGxpbmVzIHdpdGggc2ltcGxlIGhpZ2hsaWdodHMgcmV0dXJuIG51bGwsIGFuZCBhcmUKICAgICAgLy8gY291bnRlZCBhcyBjaGFuZ2VkIGJ5IHRoZSBkcml2ZXIgYmVjYXVzZSB0aGV5IGFyZSBsaWtlbHkgdG8KICAgICAgLy8gaGlnaGxpZ2h0IHRoZSBzYW1lIHdheSBpbiB2YXJpb3VzIGNvbnRleHRzLgogICAgICByZXR1cm4gY2hhbmdlZCB8fCAoc3QubGVuZ3RoIDwgNSAmJiB0aGlzLnRleHQubGVuZ3RoIDwgMTAgPyBudWxsIDogZmFsc2UpOwogICAgfSwKICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCiAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCiAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihtb2RlLCBzdGF0ZSwgY2gpIHsKICAgICAgdmFyIHR4dCA9IHRoaXMudGV4dCwgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0eHQpOwogICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IGNoICYmICFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHtzdGFydDogc3RyZWFtLnN0YXJ0LAogICAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKICAgICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJyZW50KCksCiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZSB8fCBudWxsLAogICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZX07CiAgICB9LAogICAgaW5kZW50YXRpb246IGZ1bmN0aW9uKHRhYlNpemUpIHtyZXR1cm4gY291bnRDb2x1bW4odGhpcy50ZXh0LCBudWxsLCB0YWJTaXplKTt9LAogICAgLy8gUHJvZHVjZXMgYW4gSFRNTCBmcmFnbWVudCBmb3IgdGhlIGxpbmUsIHRha2luZyBzZWxlY3Rpb24sCiAgICAvLyBtYXJraW5nLCBhbmQgaGlnaGxpZ2h0aW5nIGludG8gYWNjb3VudC4KICAgIGdldEhUTUw6IGZ1bmN0aW9uKHNmcm9tLCBzdG8sIGluY2x1ZGVQcmUsIHRhYlRleHQsIGVuZEF0KSB7CiAgICAgIHZhciBodG1sID0gW10sIGZpcnN0ID0gdHJ1ZTsKICAgICAgaWYgKGluY2x1ZGVQcmUpCiAgICAgICAgaHRtbC5wdXNoKHRoaXMuY2xhc3NOYW1lID8gJzxwcmUgY2xhc3M9IicgKyB0aGlzLmNsYXNzTmFtZSArICciPic6ICI8cHJlPiIpOwogICAgICBmdW5jdGlvbiBzcGFuKHRleHQsIHN0eWxlKSB7CiAgICAgICAgaWYgKCF0ZXh0KSByZXR1cm47CiAgICAgICAgLy8gV29yayBhcm91bmQgYSBidWcgd2hlcmUsIGluIHNvbWUgY29tcGF0IG1vZGVzLCBJRSBpZ25vcmVzIGxlYWRpbmcgc3BhY2VzCiAgICAgICAgaWYgKGZpcnN0ICYmIGllICYmIHRleHQuY2hhckF0KDApID09ICIgIikgdGV4dCA9ICJcdTAwYTAiICsgdGV4dC5zbGljZSgxKTsKICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICAgIGlmIChzdHlsZSkgaHRtbC5wdXNoKCc8c3BhbiBjbGFzcz0iJywgc3R5bGUsICciPicsIGh0bWxFc2NhcGUodGV4dCkucmVwbGFjZSgvXHQvZywgdGFiVGV4dCksICI8L3NwYW4+Iik7CiAgICAgICAgZWxzZSBodG1sLnB1c2goaHRtbEVzY2FwZSh0ZXh0KS5yZXBsYWNlKC9cdC9nLCB0YWJUZXh0KSk7CiAgICAgIH0KICAgICAgdmFyIHN0ID0gdGhpcy5zdHlsZXMsIGFsbFRleHQgPSB0aGlzLnRleHQsIG1hcmtlZCA9IHRoaXMubWFya2VkOwogICAgICBpZiAoc2Zyb20gPT0gc3RvKSBzZnJvbSA9IG51bGw7CiAgICAgIHZhciBsZW4gPSBhbGxUZXh0Lmxlbmd0aDsKICAgICAgaWYgKGVuZEF0ICE9IG51bGwpIGxlbiA9IE1hdGgubWluKGVuZEF0LCBsZW4pOwoKICAgICAgaWYgKCFhbGxUZXh0ICYmIGVuZEF0ID09IG51bGwpCiAgICAgICAgc3BhbigiICIsIHNmcm9tICE9IG51bGwgJiYgc3RvID09IG51bGwgPyAiQ29kZU1pcnJvci1zZWxlY3RlZCIgOiBudWxsKTsKICAgICAgZWxzZSBpZiAoIW1hcmtlZCAmJiBzZnJvbSA9PSBudWxsKQogICAgICAgIGZvciAodmFyIGkgPSAwLCBjaCA9IDA7IGNoIDwgbGVuOyBpKz0yKSB7CiAgICAgICAgICB2YXIgc3RyID0gc3RbaV0sIHN0eWxlID0gc3RbaSsxXSwgbCA9IHN0ci5sZW5ndGg7CiAgICAgICAgICBpZiAoY2ggKyBsID4gbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgbGVuIC0gY2gpOwogICAgICAgICAgY2ggKz0gbDsKICAgICAgICAgIHNwYW4oc3RyLCBzdHlsZSAmJiAiY20tIiArIHN0eWxlKTsKICAgICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHZhciBwb3MgPSAwLCBpID0gMCwgdGV4dCA9ICIiLCBzdHlsZSwgc2cgPSAwOwogICAgICAgIHZhciBtYXJrcG9zID0gLTEsIG1hcmsgPSBudWxsOwogICAgICAgIGZ1bmN0aW9uIG5leHRNYXJrKCkgewogICAgICAgICAgaWYgKG1hcmtlZCkgewogICAgICAgICAgICBtYXJrcG9zICs9IDE7CiAgICAgICAgICAgIG1hcmsgPSAobWFya3BvcyA8IG1hcmtlZC5sZW5ndGgpID8gbWFya2VkW21hcmtwb3NdIDogbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbmV4dE1hcmsoKTsKICAgICAgICB3aGlsZSAocG9zIDwgbGVuKSB7CiAgICAgICAgICB2YXIgdXB0byA9IGxlbjsKICAgICAgICAgIHZhciBleHRyYVN0eWxlID0gIiI7CiAgICAgICAgICBpZiAoc2Zyb20gIT0gbnVsbCkgewogICAgICAgICAgICBpZiAoc2Zyb20gPiBwb3MpIHVwdG8gPSBzZnJvbTsKICAgICAgICAgICAgZWxzZSBpZiAoc3RvID09IG51bGwgfHwgc3RvID4gcG9zKSB7CiAgICAgICAgICAgICAgZXh0cmFTdHlsZSA9ICIgQ29kZU1pcnJvci1zZWxlY3RlZCI7CiAgICAgICAgICAgICAgaWYgKHN0byAhPSBudWxsKSB1cHRvID0gTWF0aC5taW4odXB0bywgc3RvKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKG1hcmsgJiYgbWFyay50byAhPSBudWxsICYmIG1hcmsudG8gPD0gcG9zKSBuZXh0TWFyaygpOwogICAgICAgICAgaWYgKG1hcmspIHsKICAgICAgICAgICAgaWYgKG1hcmsuZnJvbSA+IHBvcykgdXB0byA9IE1hdGgubWluKHVwdG8sIG1hcmsuZnJvbSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGV4dHJhU3R5bGUgKz0gIiAiICsgbWFyay5zdHlsZTsKICAgICAgICAgICAgICBpZiAobWFyay50byAhPSBudWxsKSB1cHRvID0gTWF0aC5taW4odXB0bywgbWFyay50byk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgdmFyIGVuZCA9IHBvcyArIHRleHQubGVuZ3RoOwogICAgICAgICAgICB2YXIgYXBwbGllZFN0eWxlID0gc3R5bGU7CiAgICAgICAgICAgIGlmIChleHRyYVN0eWxlKSBhcHBsaWVkU3R5bGUgPSBzdHlsZSA/IHN0eWxlICsgZXh0cmFTdHlsZSA6IGV4dHJhU3R5bGU7CiAgICAgICAgICAgIHNwYW4oZW5kID4gdXB0byA/IHRleHQuc2xpY2UoMCwgdXB0byAtIHBvcykgOiB0ZXh0LCBhcHBsaWVkU3R5bGUpOwogICAgICAgICAgICBpZiAoZW5kID49IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9zKTsgcG9zID0gdXB0bzsgYnJlYWs7fQogICAgICAgICAgICBwb3MgPSBlbmQ7CiAgICAgICAgICAgIHRleHQgPSBzdFtpKytdOyBzdHlsZSA9ICJjbS0iICsgc3RbaSsrXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHNmcm9tICE9IG51bGwgJiYgc3RvID09IG51bGwpIHNwYW4oIiAiLCAiQ29kZU1pcnJvci1zZWxlY3RlZCIpOwogICAgICB9CiAgICAgIGlmIChpbmNsdWRlUHJlKSBodG1sLnB1c2goIjwvcHJlPiIpOwogICAgICByZXR1cm4gaHRtbC5qb2luKCIiKTsKICAgIH0sCiAgICBjbGVhblVwOiBmdW5jdGlvbigpIHsKICAgICAgdGhpcy5wYXJlbnQgPSBudWxsOwogICAgICBpZiAodGhpcy5tYXJrZWQpCiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLm1hcmtlZC5sZW5ndGg7IGkgPCBlOyArK2kpIHRoaXMubWFya2VkW2ldLmRldGFjaCh0aGlzKTsKICAgIH0KICB9OwogIC8vIFV0aWxpdHkgdXNlZCBieSByZXBsYWNlIGFuZCBzcGxpdCBhYm92ZQogIGZ1bmN0aW9uIGNvcHlTdHlsZXMoZnJvbSwgdG8sIHNvdXJjZSwgZGVzdCkgewogICAgZm9yICh2YXIgaSA9IDAsIHBvcyA9IDAsIHN0YXRlID0gMDsgcG9zIDwgdG87IGkrPTIpIHsKICAgICAgdmFyIHBhcnQgPSBzb3VyY2VbaV0sIGVuZCA9IHBvcyArIHBhcnQubGVuZ3RoOwogICAgICBpZiAoc3RhdGUgPT0gMCkgewogICAgICAgIGlmIChlbmQgPiBmcm9tKSBkZXN0LnB1c2gocGFydC5zbGljZShmcm9tIC0gcG9zLCBNYXRoLm1pbihwYXJ0Lmxlbmd0aCwgdG8gLSBwb3MpKSwgc291cmNlW2krMV0pOwogICAgICAgIGlmIChlbmQgPj0gZnJvbSkgc3RhdGUgPSAxOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlID09IDEpIHsKICAgICAgICBpZiAoZW5kID4gdG8pIGRlc3QucHVzaChwYXJ0LnNsaWNlKDAsIHRvIC0gcG9zKSwgc291cmNlW2krMV0pOwogICAgICAgIGVsc2UgZGVzdC5wdXNoKHBhcnQsIHNvdXJjZVtpKzFdKTsKICAgICAgfQogICAgICBwb3MgPSBlbmQ7CiAgICB9CiAgfQoKICAvLyBEYXRhIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBzZXF1ZW5jZSBvZiBsaW5lcy4KICBmdW5jdGlvbiBMZWFmQ2h1bmsobGluZXMpIHsKICAgIHRoaXMubGluZXMgPSBsaW5lczsKICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICAgIGZvciAodmFyIGkgPSAwLCBlID0gbGluZXMubGVuZ3RoLCBoZWlnaHQgPSAwOyBpIDwgZTsgKytpKSB7CiAgICAgIGxpbmVzW2ldLnBhcmVudCA9IHRoaXM7CiAgICAgIGhlaWdodCArPSBsaW5lc1tpXS5oZWlnaHQ7CiAgICB9CiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICB9CiAgTGVhZkNodW5rLnByb3RvdHlwZSA9IHsKICAgIGNodW5rU2l6ZTogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmxpbmVzLmxlbmd0aDsgfSwKICAgIHJlbW92ZTogZnVuY3Rpb24oYXQsIG4sIGNhbGxiYWNrcykgewogICAgICBmb3IgKHZhciBpID0gYXQsIGUgPSBhdCArIG47IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgbGluZSA9IHRoaXMubGluZXNbaV07CiAgICAgICAgdGhpcy5oZWlnaHQgLT0gbGluZS5oZWlnaHQ7CiAgICAgICAgbGluZS5jbGVhblVwKCk7CiAgICAgICAgaWYgKGxpbmUuaGFuZGxlcnMpCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmUuaGFuZGxlcnMubGVuZ3RoOyArK2opIGNhbGxiYWNrcy5wdXNoKGxpbmUuaGFuZGxlcnNbal0pOwogICAgICB9CiAgICAgIHRoaXMubGluZXMuc3BsaWNlKGF0LCBuKTsKICAgIH0sCiAgICBjb2xsYXBzZTogZnVuY3Rpb24obGluZXMpIHsKICAgICAgbGluZXMuc3BsaWNlLmFwcGx5KGxpbmVzLCBbbGluZXMubGVuZ3RoLCAwXS5jb25jYXQodGhpcy5saW5lcykpOwogICAgfSwKICAgIGluc2VydEhlaWdodDogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKICAgICAgdGhpcy5oZWlnaHQgKz0gaGVpZ2h0OwogICAgICB0aGlzLmxpbmVzLnNwbGljZS5hcHBseSh0aGlzLmxpbmVzLCBbYXQsIDBdLmNvbmNhdChsaW5lcykpOwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgbGluZXNbaV0ucGFyZW50ID0gdGhpczsKICAgIH0sCiAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7CiAgICAgIGZvciAodmFyIGUgPSBhdCArIG47IGF0IDwgZTsgKythdCkKICAgICAgICBpZiAob3AodGhpcy5saW5lc1thdF0pKSByZXR1cm4gdHJ1ZTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIEJyYW5jaENodW5rKGNoaWxkcmVuKSB7CiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47CiAgICB2YXIgc2l6ZSA9IDAsIGhlaWdodCA9IDA7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICB2YXIgY2ggPSBjaGlsZHJlbltpXTsKICAgICAgc2l6ZSArPSBjaC5jaHVua1NpemUoKTsgaGVpZ2h0ICs9IGNoLmhlaWdodDsKICAgICAgY2gucGFyZW50ID0gdGhpczsKICAgIH0KICAgIHRoaXMuc2l6ZSA9IHNpemU7CiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICB9CiAgQnJhbmNoQ2h1bmsucHJvdG90eXBlID0gewogICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuc2l6ZTsgfSwKICAgIHJlbW92ZTogZnVuY3Rpb24oYXQsIG4sIGNhbGxiYWNrcykgewogICAgICB0aGlzLnNpemUgLT0gbjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICBpZiAoYXQgPCBzeikgewogICAgICAgICAgdmFyIHJtID0gTWF0aC5taW4obiwgc3ogLSBhdCksIG9sZEhlaWdodCA9IGNoaWxkLmhlaWdodDsKICAgICAgICAgIGNoaWxkLnJlbW92ZShhdCwgcm0sIGNhbGxiYWNrcyk7CiAgICAgICAgICB0aGlzLmhlaWdodCAtPSBvbGRIZWlnaHQgLSBjaGlsZC5oZWlnaHQ7CiAgICAgICAgICBpZiAoc3ogPT0gcm0pIHsgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaS0tLCAxKTsgY2hpbGQucGFyZW50ID0gbnVsbDsgfQogICAgICAgICAgaWYgKChuIC09IHJtKSA9PSAwKSBicmVhazsKICAgICAgICAgIGF0ID0gMDsKICAgICAgICB9IGVsc2UgYXQgLT0gc3o7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc2l6ZSAtIG4gPCAyNSkgewogICAgICAgIHZhciBsaW5lcyA9IFtdOwogICAgICAgIHRoaXMuY29sbGFwc2UobGluZXMpOwogICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbbmV3IExlYWZDaHVuayhsaW5lcyldOwogICAgICB9CiAgICB9LAogICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHRoaXMuY2hpbGRyZW5baV0uY29sbGFwc2UobGluZXMpOwogICAgfSwKICAgIGluc2VydDogZnVuY3Rpb24oYXQsIGxpbmVzKSB7CiAgICAgIHZhciBoZWlnaHQgPSAwOwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKICAgICAgdGhpcy5pbnNlcnRIZWlnaHQoYXQsIGxpbmVzLCBoZWlnaHQpOwogICAgfSwKICAgIGluc2VydEhlaWdodDogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKICAgICAgdGhpcy5zaXplICs9IGxpbmVzLmxlbmd0aDsKICAgICAgdGhpcy5oZWlnaHQgKz0gaGVpZ2h0OwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICBpZiAoYXQgPD0gc3opIHsKICAgICAgICAgIGNoaWxkLmluc2VydEhlaWdodChhdCwgbGluZXMsIGhlaWdodCk7CiAgICAgICAgICBpZiAoY2hpbGQubGluZXMgJiYgY2hpbGQubGluZXMubGVuZ3RoID4gNTApIHsKICAgICAgICAgICAgd2hpbGUgKGNoaWxkLmxpbmVzLmxlbmd0aCA+IDUwKSB7CiAgICAgICAgICAgICAgdmFyIHNwaWxsZWQgPSBjaGlsZC5saW5lcy5zcGxpY2UoY2hpbGQubGluZXMubGVuZ3RoIC0gMjUsIDI1KTsKICAgICAgICAgICAgICB2YXIgbmV3bGVhZiA9IG5ldyBMZWFmQ2h1bmsoc3BpbGxlZCk7CiAgICAgICAgICAgICAgY2hpbGQuaGVpZ2h0IC09IG5ld2xlYWYuaGVpZ2h0OwogICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGkgKyAxLCAwLCBuZXdsZWFmKTsKICAgICAgICAgICAgICBuZXdsZWFmLnBhcmVudCA9IHRoaXM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5tYXliZVNwaWxsKCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYXQgLT0gc3o7CiAgICAgIH0KICAgIH0sCiAgICBtYXliZVNwaWxsOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDw9IDEwKSByZXR1cm47CiAgICAgIHZhciBtZSA9IHRoaXM7CiAgICAgIGRvIHsKICAgICAgICB2YXIgc3BpbGxlZCA9IG1lLmNoaWxkcmVuLnNwbGljZShtZS5jaGlsZHJlbi5sZW5ndGggLSA1LCA1KTsKICAgICAgICB2YXIgc2libGluZyA9IG5ldyBCcmFuY2hDaHVuayhzcGlsbGVkKTsKICAgICAgICBpZiAoIW1lLnBhcmVudCkgeyAvLyBCZWNvbWUgdGhlIHBhcmVudCBub2RlCiAgICAgICAgICB2YXIgY29weSA9IG5ldyBCcmFuY2hDaHVuayhtZS5jaGlsZHJlbik7CiAgICAgICAgICBjb3B5LnBhcmVudCA9IG1lOwogICAgICAgICAgbWUuY2hpbGRyZW4gPSBbY29weSwgc2libGluZ107CiAgICAgICAgICBtZSA9IGNvcHk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lLnNpemUgLT0gc2libGluZy5zaXplOwogICAgICAgICAgbWUuaGVpZ2h0IC09IHNpYmxpbmcuaGVpZ2h0OwogICAgICAgICAgdmFyIG15SW5kZXggPSBpbmRleE9mKG1lLnBhcmVudC5jaGlsZHJlbiwgbWUpOwogICAgICAgICAgbWUucGFyZW50LmNoaWxkcmVuLnNwbGljZShteUluZGV4ICsgMSwgMCwgc2libGluZyk7CiAgICAgICAgfQogICAgICAgIHNpYmxpbmcucGFyZW50ID0gbWUucGFyZW50OwogICAgICB9IHdoaWxlIChtZS5jaGlsZHJlbi5sZW5ndGggPiAxMCk7CiAgICAgIG1lLnBhcmVudC5tYXliZVNwaWxsKCk7CiAgICB9LAogICAgaXRlcjogZnVuY3Rpb24oZnJvbSwgdG8sIG9wKSB7IHRoaXMuaXRlck4oZnJvbSwgdG8gLSBmcm9tLCBvcCk7IH0sCiAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgIGlmIChhdCA8IHN6KSB7CiAgICAgICAgICB2YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6IC0gYXQpOwogICAgICAgICAgaWYgKGNoaWxkLml0ZXJOKGF0LCB1c2VkLCBvcCkpIHJldHVybiB0cnVlOwogICAgICAgICAgaWYgKChuIC09IHVzZWQpID09IDApIGJyZWFrOwogICAgICAgICAgYXQgPSAwOwogICAgICAgIH0gZWxzZSBhdCAtPSBzejsKICAgICAgfQogICAgfQogIH07CgogIGZ1bmN0aW9uIGdldExpbmVBdChjaHVuaywgbikgewogICAgd2hpbGUgKCFjaHVuay5saW5lcykgewogICAgICBmb3IgKHZhciBpID0gMDs7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgYnJlYWs7IH0KICAgICAgICBuIC09IHN6OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2h1bmsubGluZXNbbl07CiAgfQogIGZ1bmN0aW9uIGxpbmVObyhsaW5lKSB7CiAgICBpZiAobGluZS5wYXJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB2YXIgY3VyID0gbGluZS5wYXJlbnQsIG5vID0gaW5kZXhPZihjdXIubGluZXMsIGxpbmUpOwogICAgZm9yICh2YXIgY2h1bmsgPSBjdXIucGFyZW50OyBjaHVuazsgY3VyID0gY2h1bmssIGNodW5rID0gY2h1bmsucGFyZW50KSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyA7ICsraSkgewogICAgICAgIGlmIChjaHVuay5jaGlsZHJlbltpXSA9PSBjdXIpIGJyZWFrOwogICAgICAgIG5vICs9IGNodW5rLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm87CiAgfQogIGZ1bmN0aW9uIGxpbmVBdEhlaWdodChjaHVuaywgaCkgewogICAgdmFyIG4gPSAwOwogICAgb3V0ZXI6IGRvIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgY2ggPSBjaGlsZC5oZWlnaHQ7CiAgICAgICAgaWYgKGggPCBjaCkgeyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlcjsgfQogICAgICAgIGggLT0gY2g7CiAgICAgICAgbiArPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgfQogICAgICByZXR1cm4gbjsKICAgIH0gd2hpbGUgKCFjaHVuay5saW5lcyk7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNodW5rLmxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICB2YXIgbGluZSA9IGNodW5rLmxpbmVzW2ldLCBsaCA9IGxpbmUuaGVpZ2h0OwogICAgICBpZiAoaCA8IGxoKSBicmVhazsKICAgICAgaCAtPSBsaDsKICAgIH0KICAgIHJldHVybiBuICsgaTsKICB9CiAgZnVuY3Rpb24gaGVpZ2h0QXRMaW5lKGNodW5rLCBuKSB7CiAgICB2YXIgaCA9IDA7CiAgICBvdXRlcjogZG8gewogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNodW5rLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgY29udGludWUgb3V0ZXI7IH0KICAgICAgICBuIC09IHN6OwogICAgICAgIGggKz0gY2hpbGQuaGVpZ2h0OwogICAgICB9CiAgICAgIHJldHVybiBoOwogICAgfSB3aGlsZSAoIWNodW5rLmxpbmVzKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBoICs9IGNodW5rLmxpbmVzW2ldLmhlaWdodDsKICAgIHJldHVybiBoOwogIH0KCiAgLy8gVGhlIGhpc3Rvcnkgb2JqZWN0ICdjaHVua3MnIGNoYW5nZXMgdGhhdCBhcmUgbWFkZSBjbG9zZSB0b2dldGhlcgogIC8vIGFuZCBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBpbnRvIGJpZ2dlciB1bmRvYWJsZSB1bml0cy4KICBmdW5jdGlvbiBIaXN0b3J5KCkgewogICAgdGhpcy50aW1lID0gMDsKICAgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9IFtdOwogIH0KICBIaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgIGFkZENoYW5nZTogZnVuY3Rpb24oc3RhcnQsIGFkZGVkLCBvbGQpIHsKICAgICAgdGhpcy51bmRvbmUubGVuZ3RoID0gMDsKICAgICAgdmFyIHRpbWUgPSArbmV3IERhdGUsIGxhc3QgPSB0aGlzLmRvbmVbdGhpcy5kb25lLmxlbmd0aCAtIDFdOwogICAgICBpZiAodGltZSAtIHRoaXMudGltZSA+IDQwMCB8fCAhbGFzdCB8fAogICAgICAgICAgbGFzdC5zdGFydCA+IHN0YXJ0ICsgYWRkZWQgfHwgbGFzdC5zdGFydCArIGxhc3QuYWRkZWQgPCBzdGFydCAtIGxhc3QuYWRkZWQgKyBsYXN0Lm9sZC5sZW5ndGgpCiAgICAgICAgdGhpcy5kb25lLnB1c2goe3N0YXJ0OiBzdGFydCwgYWRkZWQ6IGFkZGVkLCBvbGQ6IG9sZH0pOwogICAgICBlbHNlIHsKICAgICAgICB2YXIgb2xkb2ZmID0gMDsKICAgICAgICBpZiAoc3RhcnQgPCBsYXN0LnN0YXJ0KSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gbGFzdC5zdGFydCAtIHN0YXJ0IC0gMTsgaSA+PSAwOyAtLWkpCiAgICAgICAgICAgIGxhc3Qub2xkLnVuc2hpZnQob2xkW2ldKTsKICAgICAgICAgIGxhc3QuYWRkZWQgKz0gbGFzdC5zdGFydCAtIHN0YXJ0OwogICAgICAgICAgbGFzdC5zdGFydCA9IHN0YXJ0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsYXN0LnN0YXJ0IDwgc3RhcnQpIHsKICAgICAgICAgIG9sZG9mZiA9IHN0YXJ0IC0gbGFzdC5zdGFydDsKICAgICAgICAgIGFkZGVkICs9IG9sZG9mZjsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IGxhc3QuYWRkZWQgLSBvbGRvZmYsIGUgPSBvbGQubGVuZ3RoOyBpIDwgZTsgKytpKQogICAgICAgICAgbGFzdC5vbGQucHVzaChvbGRbaV0pOwogICAgICAgIGlmIChsYXN0LmFkZGVkIDwgYWRkZWQpIGxhc3QuYWRkZWQgPSBhZGRlZDsKICAgICAgfQogICAgICB0aGlzLnRpbWUgPSB0aW1lOwogICAgfQogIH07CgogIGZ1bmN0aW9uIHN0b3BNZXRob2QoKSB7ZV9zdG9wKHRoaXMpO30KICAvLyBFbnN1cmUgYW4gZXZlbnQgaGFzIGEgc3RvcCBtZXRob2QuCiAgZnVuY3Rpb24gYWRkU3RvcChldmVudCkgewogICAgaWYgKCFldmVudC5zdG9wKSBldmVudC5zdG9wID0gc3RvcE1ldGhvZDsKICAgIHJldHVybiBldmVudDsKICB9CgogIGZ1bmN0aW9uIGVfcHJldmVudERlZmF1bHQoZSkgewogICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTsKICAgIGVsc2UgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogIH0KICBmdW5jdGlvbiBlX3N0b3BQcm9wYWdhdGlvbihlKSB7CiAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICBlbHNlIGUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gZV9zdG9wKGUpIHtlX3ByZXZlbnREZWZhdWx0KGUpOyBlX3N0b3BQcm9wYWdhdGlvbihlKTt9CiAgQ29kZU1pcnJvci5lX3N0b3AgPSBlX3N0b3A7CiAgQ29kZU1pcnJvci5lX3ByZXZlbnREZWZhdWx0ID0gZV9wcmV2ZW50RGVmYXVsdDsKICBDb2RlTWlycm9yLmVfc3RvcFByb3BhZ2F0aW9uID0gZV9zdG9wUHJvcGFnYXRpb247CgogIGZ1bmN0aW9uIGVfdGFyZ2V0KGUpIHtyZXR1cm4gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O30KICBmdW5jdGlvbiBlX2J1dHRvbihlKSB7CiAgICBpZiAoZS53aGljaCkgcmV0dXJuIGUud2hpY2g7CiAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDEpIHJldHVybiAxOwogICAgZWxzZSBpZiAoZS5idXR0b24gJiAyKSByZXR1cm4gMzsKICAgIGVsc2UgaWYgKGUuYnV0dG9uICYgNCkgcmV0dXJuIDI7CiAgfQoKICAvLyBFdmVudCBoYW5kbGVyIHJlZ2lzdHJhdGlvbi4gSWYgZGlzY29ubmVjdCBpcyB0cnVlLCBpdCdsbCByZXR1cm4gYQogIC8vIGZ1bmN0aW9uIHRoYXQgdW5yZWdpc3RlcnMgdGhlIGhhbmRsZXIuCiAgZnVuY3Rpb24gY29ubmVjdChub2RlLCB0eXBlLCBoYW5kbGVyLCBkaXNjb25uZWN0KSB7CiAgICBpZiAodHlwZW9mIG5vZGUuYWRkRXZlbnRMaXN0ZW5lciA9PSAiZnVuY3Rpb24iKSB7CiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7CiAgICAgIGlmIChkaXNjb25uZWN0KSByZXR1cm4gZnVuY3Rpb24oKSB7bm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTt9OwogICAgfQogICAgZWxzZSB7CiAgICAgIHZhciB3cmFwSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7aGFuZGxlcihldmVudCB8fCB3aW5kb3cuZXZlbnQpO307CiAgICAgIG5vZGUuYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTsKICAgICAgaWYgKGRpc2Nvbm5lY3QpIHJldHVybiBmdW5jdGlvbigpIHtub2RlLmRldGFjaEV2ZW50KCJvbiIgKyB0eXBlLCB3cmFwSGFuZGxlcik7fTsKICAgIH0KICB9CiAgQ29kZU1pcnJvci5jb25uZWN0ID0gY29ubmVjdDsKCiAgZnVuY3Rpb24gRGVsYXllZCgpIHt0aGlzLmlkID0gbnVsbDt9CiAgRGVsYXllZC5wcm90b3R5cGUgPSB7c2V0OiBmdW5jdGlvbihtcywgZikge2NsZWFyVGltZW91dCh0aGlzLmlkKTsgdGhpcy5pZCA9IHNldFRpbWVvdXQoZiwgbXMpO319OwoKICAvLyBEZXRlY3QgZHJhZy1hbmQtZHJvcAogIHZhciBkcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKCkgewogICAgLy8gSUU4IGhhcyBvbmRyYWdzdGFydCBhbmQgb25kcm9wIHByb3BlcnRpZXMsIGJ1dCBkb2Vzbid0IHNlZW0gdG8KICAgIC8vIGFjdHVhbGx5IHN1cHBvcnQgb25kcmFnc3RhcnQgdGhlIHdheSBpdCdzIHN1cHBvc2VkIHRvIHdvcmsuCiAgICBpZiAoL01TSUUgWzEtOF1cYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgcmV0dXJuIGZhbHNlOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgcmV0dXJuICJkcmFnZ2FibGUiIGluIGRpdjsKICB9KCk7CgogIHZhciBnZWNrbyA9IC9nZWNrb1wvXGR7N30vaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBpZSA9IC9NU0lFIFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciB3ZWJraXQgPSAvV2ViS2l0XC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CgogIHZhciBsaW5lU2VwID0gIlxuIjsKICAvLyBGZWF0dXJlLWRldGVjdCB3aGV0aGVyIG5ld2xpbmVzIGluIHRleHRhcmVhcyBhcmUgY29udmVydGVkIHRvIFxyXG4KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIHRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTsKICAgIHRlLnZhbHVlID0gImZvb1xuYmFyIjsKICAgIGlmICh0ZS52YWx1ZS5pbmRleE9mKCJcciIpID4gLTEpIGxpbmVTZXAgPSAiXHJcbiI7CiAgfSgpKTsKCiAgLy8gQ291bnRzIHRoZSBjb2x1bW4gb2Zmc2V0IGluIGEgc3RyaW5nLCB0YWtpbmcgdGFicyBpbnRvIGFjY291bnQuCiAgLy8gVXNlZCBtb3N0bHkgdG8gZmluZCBpbmRlbnRhdGlvbi4KICBmdW5jdGlvbiBjb3VudENvbHVtbihzdHJpbmcsIGVuZCwgdGFiU2l6ZSkgewogICAgaWYgKGVuZCA9PSBudWxsKSB7CiAgICAgIGVuZCA9IHN0cmluZy5zZWFyY2goL1teXHNcdTAwYTBdLyk7CiAgICAgIGlmIChlbmQgPT0gLTEpIGVuZCA9IHN0cmluZy5sZW5ndGg7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMCwgbiA9IDA7IGkgPCBlbmQ7ICsraSkgewogICAgICBpZiAoc3RyaW5nLmNoYXJBdChpKSA9PSAiXHQiKSBuICs9IHRhYlNpemUgLSAobiAlIHRhYlNpemUpOwogICAgICBlbHNlICsrbjsKICAgIH0KICAgIHJldHVybiBuOwogIH0KCiAgZnVuY3Rpb24gY29tcHV0ZWRTdHlsZShlbHQpIHsKICAgIGlmIChlbHQuY3VycmVudFN0eWxlKSByZXR1cm4gZWx0LmN1cnJlbnRTdHlsZTsKICAgIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbHQsIG51bGwpOwogIH0KCiAgLy8gRmluZCB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCBieSBmb2xsb3dpbmcgdGhlIG9mZnNldFBhcmVudCBjaGFpbi4KICAvLyBJZiBzY3JlZW49PXRydWUsIGl0IHJldHVybnMgc2NyZWVuIChyYXRoZXIgdGhhbiBwYWdlKSBjb29yZGluYXRlcy4KICBmdW5jdGlvbiBlbHRPZmZzZXQobm9kZSwgc2NyZWVuKSB7CiAgICB2YXIgYm9kID0gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7CiAgICB2YXIgeCA9IDAsIHkgPSAwLCBza2lwQm9keSA9IGZhbHNlOwogICAgZm9yICh2YXIgbiA9IG5vZGU7IG47IG4gPSBuLm9mZnNldFBhcmVudCkgewogICAgICB2YXIgb2wgPSBuLm9mZnNldExlZnQsIG90ID0gbi5vZmZzZXRUb3A7CiAgICAgIC8vIEZpcmVmb3ggcmVwb3J0cyB3ZWlyZCBpbnZlcnRlZCBvZmZzZXRzIHdoZW4gdGhlIGJvZHkgaGFzIGEgYm9yZGVyLgogICAgICBpZiAobiA9PSBib2QpIHsgeCArPSBNYXRoLmFicyhvbCk7IHkgKz0gTWF0aC5hYnMob3QpOyB9CiAgICAgIGVsc2UgeyB4ICs9IG9sLCB5ICs9IG90OyB9CiAgICAgIGlmIChzY3JlZW4gJiYgY29tcHV0ZWRTdHlsZShuKS5wb3NpdGlvbiA9PSAiZml4ZWQiKQogICAgICAgIHNraXBCb2R5ID0gdHJ1ZTsKICAgIH0KICAgIHZhciBlID0gc2NyZWVuICYmICFza2lwQm9keSA/IG51bGwgOiBib2Q7CiAgICBmb3IgKHZhciBuID0gbm9kZS5wYXJlbnROb2RlOyBuICE9IGU7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgIGlmIChuLnNjcm9sbExlZnQgIT0gbnVsbCkgeyB4IC09IG4uc2Nyb2xsTGVmdDsgeSAtPSBuLnNjcm9sbFRvcDt9CiAgICByZXR1cm4ge2xlZnQ6IHgsIHRvcDogeX07CiAgfQogIC8vIFVzZSB0aGUgZmFzdGVyIGFuZCBzYW5lciBnZXRCb3VuZGluZ0NsaWVudFJlY3QgbWV0aG9kIHdoZW4gcG9zc2libGUuCiAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT0gbnVsbCkgZWx0T2Zmc2V0ID0gZnVuY3Rpb24obm9kZSwgc2NyZWVuKSB7CiAgICAvLyBUYWtlIHRoZSBwYXJ0cyBvZiBib3VuZGluZyBjbGllbnQgcmVjdCB0aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluIHNvIHdlIGFyZSBhYmxlIHRvIGVkaXQgaWYgbmVlZCBiZSwKICAgIC8vIHNpbmNlIHRoZSByZXR1cm5lZCB2YWx1ZSBjYW5ub3QgYmUgY2hhbmdlZCBleHRlcm5hbGx5ICh0aGV5IGFyZSBrZXB0IGluIHN5bmMgYXMgdGhlIGVsZW1lbnQgbW92ZXMgd2l0aGluIHRoZSBwYWdlKQogICAgdHJ5IHsgdmFyIGJveCA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IGJveCA9IHsgdG9wOiBib3gudG9wLCBsZWZ0OiBib3gubGVmdCB9OyB9CiAgICBjYXRjaChlKSB7IGJveCA9IHt0b3A6IDAsIGxlZnQ6IDB9OyB9CiAgICBpZiAoIXNjcmVlbikgewogICAgICAvLyBHZXQgdGhlIHRvcGxldmVsIHNjcm9sbCwgd29ya2luZyBhcm91bmQgYnJvd3NlciBkaWZmZXJlbmNlcy4KICAgICAgaWYgKHdpbmRvdy5wYWdlWU9mZnNldCA9PSBudWxsKSB7CiAgICAgICAgdmFyIHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlOwogICAgICAgIGlmICh0LnNjcm9sbFRvcCA9PSBudWxsKSB0ID0gZG9jdW1lbnQuYm9keTsKICAgICAgICBib3gudG9wICs9IHQuc2Nyb2xsVG9wOyBib3gubGVmdCArPSB0LnNjcm9sbExlZnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYm94LnRvcCArPSB3aW5kb3cucGFnZVlPZmZzZXQ7IGJveC5sZWZ0ICs9IHdpbmRvdy5wYWdlWE9mZnNldDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJveDsKICB9OwoKICAvLyBHZXQgYSBub2RlJ3MgdGV4dCBjb250ZW50LgogIGZ1bmN0aW9uIGVsdFRleHQobm9kZSkgewogICAgcmV0dXJuIG5vZGUudGV4dENvbnRlbnQgfHwgbm9kZS5pbm5lclRleHQgfHwgbm9kZS5ub2RlVmFsdWUgfHwgIiI7CiAgfQoKICAvLyBPcGVyYXRpb25zIG9uIHtsaW5lLCBjaH0gb2JqZWN0cy4KICBmdW5jdGlvbiBwb3NFcShhLCBiKSB7cmV0dXJuIGEubGluZSA9PSBiLmxpbmUgJiYgYS5jaCA9PSBiLmNoO30KICBmdW5jdGlvbiBwb3NMZXNzKGEsIGIpIHtyZXR1cm4gYS5saW5lIDwgYi5saW5lIHx8IChhLmxpbmUgPT0gYi5saW5lICYmIGEuY2ggPCBiLmNoKTt9CiAgZnVuY3Rpb24gY29weVBvcyh4KSB7cmV0dXJuIHtsaW5lOiB4LmxpbmUsIGNoOiB4LmNofTt9CgogIHZhciBlc2NhcGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicHJlIik7CiAgZnVuY3Rpb24gaHRtbEVzY2FwZShzdHIpIHsKICAgIGVzY2FwZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdHI7CiAgICByZXR1cm4gZXNjYXBlRWxlbWVudC5pbm5lckhUTUw7CiAgfQogIC8vIFJlY2VudCAobGF0ZSAyMDExKSBPcGVyYSBiZXRhcyBpbnNlcnQgYm9ndXMgbmV3bGluZXMgYXQgdGhlIHN0YXJ0CiAgLy8gb2YgdGhlIHRleHRDb250ZW50LCBzbyB3ZSBzdHJpcCB0aG9zZS4KICBpZiAoaHRtbEVzY2FwZSgiYSIpID09ICJcbmEiKQogICAgaHRtbEVzY2FwZSA9IGZ1bmN0aW9uKHN0cikgewogICAgICBlc2NhcGVFbGVtZW50LnRleHRDb250ZW50ID0gc3RyOwogICAgICByZXR1cm4gZXNjYXBlRWxlbWVudC5pbm5lckhUTUwuc2xpY2UoMSk7CiAgICB9OwogIC8vIFNvbWUgSUVzIGRvbid0IHByZXNlcnZlIHRhYnMgdGhyb3VnaCBpbm5lckhUTUwKICBlbHNlIGlmIChodG1sRXNjYXBlKCJcdCIpICE9ICJcdCIpCiAgICBodG1sRXNjYXBlID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgIGVzY2FwZUVsZW1lbnQuaW5uZXJIVE1MID0gIiI7CiAgICAgIGVzY2FwZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyKSk7CiAgICAgIHJldHVybiBlc2NhcGVFbGVtZW50LmlubmVySFRNTDsKICAgIH07CiAgQ29kZU1pcnJvci5odG1sRXNjYXBlID0gaHRtbEVzY2FwZTsKCiAgLy8gVXNlZCB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIGFuIHVuZG8vcmVkbyBieSBmaW5kaW5nIHRoZQogIC8vIGxhc3QgZWRpdGVkIGNoYXJhY3Rlci4KICBmdW5jdGlvbiBlZGl0RW5kKGZyb20sIHRvKSB7CiAgICBpZiAoIXRvKSByZXR1cm4gZnJvbSA/IGZyb20ubGVuZ3RoIDogMDsKICAgIGlmICghZnJvbSkgcmV0dXJuIHRvLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA+PSAwICYmIGogPj0gMDsgLS1pLCAtLWopCiAgICAgIGlmIChmcm9tLmNoYXJBdChpKSAhPSB0by5jaGFyQXQoaikpIGJyZWFrOwogICAgcmV0dXJuIGogKyAxOwogIH0KCiAgZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbHQpIHsKICAgIGlmIChjb2xsZWN0aW9uLmluZGV4T2YpIHJldHVybiBjb2xsZWN0aW9uLmluZGV4T2YoZWx0KTsKICAgIGZvciAodmFyIGkgPSAwLCBlID0gY29sbGVjdGlvbi5sZW5ndGg7IGkgPCBlOyArK2kpCiAgICAgIGlmIChjb2xsZWN0aW9uW2ldID09IGVsdCkgcmV0dXJuIGk7CiAgICByZXR1cm4gLTE7CiAgfQogIGZ1bmN0aW9uIGlzV29yZENoYXIoY2gpIHsKICAgIHJldHVybiAvXHcvLnRlc3QoY2gpIHx8IGNoLnRvVXBwZXJDYXNlKCkgIT0gY2gudG9Mb3dlckNhc2UoKTsKICB9CgogIC8vIFNlZSBpZiAiIi5zcGxpdCBpcyB0aGUgYnJva2VuIElFIHZlcnNpb24sIGlmIHNvLCBwcm92aWRlIGFuCiAgLy8gYWx0ZXJuYXRpdmUgd2F5IHRvIHNwbGl0IGxpbmVzLgogIHZhciBzcGxpdExpbmVzID0gIlxuXG5iIi5zcGxpdCgvXG4vKS5sZW5ndGggIT0gMyA/IGZ1bmN0aW9uKHN0cmluZykgewogICAgdmFyIHBvcyA9IDAsIG5sLCByZXN1bHQgPSBbXTsKICAgIHdoaWxlICgobmwgPSBzdHJpbmcuaW5kZXhPZigiXG4iLCBwb3MpKSA+IC0xKSB7CiAgICAgIHJlc3VsdC5wdXNoKHN0cmluZy5zbGljZShwb3MsIHN0cmluZy5jaGFyQXQobmwtMSkgPT0gIlxyIiA/IG5sIC0gMSA6IG5sKSk7CiAgICAgIHBvcyA9IG5sICsgMTsKICAgIH0KICAgIHJlc3VsdC5wdXNoKHN0cmluZy5zbGljZShwb3MpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSA6IGZ1bmN0aW9uKHN0cmluZyl7cmV0dXJuIHN0cmluZy5zcGxpdCgvXHI/XG4vKTt9OwogIENvZGVNaXJyb3Iuc3BsaXRMaW5lcyA9IHNwbGl0TGluZXM7CgogIHZhciBoYXNTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gZnVuY3Rpb24odGUpIHsKICAgIHRyeSB7IHJldHVybiB0ZS5zZWxlY3Rpb25TdGFydCAhPSB0ZS5zZWxlY3Rpb25FbmQ7IH0KICAgIGNhdGNoKGUpIHsgcmV0dXJuIGZhbHNlOyB9CiAgfSA6IGZ1bmN0aW9uKHRlKSB7CiAgICB0cnkge3ZhciByYW5nZSA9IHRlLm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7fQogICAgY2F0Y2goZSkge30KICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UucGFyZW50RWxlbWVudCgpICE9IHRlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gcmFuZ2UuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsIHJhbmdlKSAhPSAwOwogIH07CgogIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgibnVsbCIsIGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHt0b2tlbjogZnVuY3Rpb24oc3RyZWFtKSB7c3RyZWFtLnNraXBUb0VuZCgpO319OwogIH0pOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9wbGFpbiIsICJudWxsIik7CgogIHZhciBrZXlOYW1lcyA9IHszOiAiRW50ZXIiLCA4OiAiQmFja3NwYWNlIiwgOTogIlRhYiIsIDEzOiAiRW50ZXIiLCAxNjogIlNoaWZ0IiwgMTc6ICJDdHJsIiwgMTg6ICJBbHQiLAogICAgICAgICAgICAgICAgICAxOTogIlBhdXNlIiwgMjA6ICJDYXBzTG9jayIsIDI3OiAiRXNjIiwgMzI6ICJTcGFjZSIsIDMzOiAiUGFnZVVwIiwgMzQ6ICJQYWdlRG93biIsIDM1OiAiRW5kIiwKICAgICAgICAgICAgICAgICAgMzY6ICJIb21lIiwgMzc6ICJMZWZ0IiwgMzg6ICJVcCIsIDM5OiAiUmlnaHQiLCA0MDogIkRvd24iLCA0NDogIlByaW50U2NybiIsIDQ1OiAiSW5zZXJ0IiwKICAgICAgICAgICAgICAgICAgNDY6ICJEZWxldGUiLCA1OTogIjsiLCA5MTogIk1vZCIsIDkyOiAiTW9kIiwgOTM6ICJNb2QiLCAxODY6ICI7IiwgMTg3OiAiPSIsIDE4ODogIiwiLAogICAgICAgICAgICAgICAgICAxODk6ICItIiwgMTkwOiAiLiIsIDE5MTogIi8iLCAxOTI6ICJgIiwgMjE5OiAiWyIsIDIyMDogIlxcIiwgMjIxOiAiXSIsIDIyMjogIiciLCA2MzI3NjogIlBhZ2VVcCIsCiAgICAgICAgICAgICAgICAgIDYzMjc3OiAiUGFnZURvd24iLCA2MzI3NTogIkVuZCIsIDYzMjczOiAiSG9tZSIsIDYzMjM0OiAiTGVmdCIsIDYzMjMyOiAiVXAiLCA2MzIzNTogIlJpZ2h0IiwKICAgICAgICAgICAgICAgICAgNjMyMzM6ICJEb3duIiwgNjMzMDI6ICJJbnNlcnQiLCA2MzI3MjogIkRlbGV0ZSJ9OwogIENvZGVNaXJyb3Iua2V5TmFtZXMgPSBrZXlOYW1lczsKICAoZnVuY3Rpb24oKSB7CiAgICAvLyBOdW1iZXIga2V5cwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSBrZXlOYW1lc1tpICsgNDhdID0gU3RyaW5nKGkpOwogICAgLy8gQWxwaGFiZXRpYyBrZXlzCiAgICBmb3IgKHZhciBpID0gNjU7IGkgPD0gOTA7IGkrKykga2V5TmFtZXNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpOwogICAgLy8gRnVuY3Rpb24ga2V5cwogICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMTI7IGkrKykga2V5TmFtZXNbaSArIDExMV0gPSBrZXlOYW1lc1tpICsgNjMyMzVdID0gIkYiICsgaTsKICB9KSgpOwoKICByZXR1cm4gQ29kZU1pcnJvcjsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/dialog.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3ItZGlhbG9nIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5Db2RlTWlycm9yLWRpYWxvZyA+IGRpdiB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsgbGVmdDogMDsgcmlnaHQ6IDA7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7CiAgei1pbmRleDogMTU7CiAgcGFkZGluZzogLjFlbSAuOGVtOwogIG92ZXJmbG93OiBoaWRkZW47CiAgY29sb3I6ICMzMzM7Cn0KCi5Db2RlTWlycm9yLWRpYWxvZyBpbnB1dCB7CiAgYm9yZGVyOiBub25lOwogIG91dGxpbmU6IG5vbmU7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgd2lkdGg6IDIwZW07CiAgY29sb3I6IGluaGVyaXQ7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/dialog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gT3BlbiBzaW1wbGUgZGlhbG9ncyBvbiB0b3Agb2YgYW4gZWRpdG9yLiBSZWxpZXMgb24gZGlhbG9nLmNzcy4KCihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiBkaWFsb2dEaXYoY20sIHRlbXBsYXRlKSB7CiAgICB2YXIgd3JhcCA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCk7CiAgICB2YXIgZGlhbG9nID0gd3JhcC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksIHdyYXAuZmlyc3RDaGlsZCk7CiAgICBkaWFsb2cuY2xhc3NOYW1lID0gIkNvZGVNaXJyb3ItZGlhbG9nIjsKICAgIGRpYWxvZy5pbm5lckhUTUwgPSAnPGRpdj4nICsgdGVtcGxhdGUgKyAnPC9kaXY+JzsKICAgIHJldHVybiBkaWFsb2c7CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigib3BlbkRpYWxvZyIsIGZ1bmN0aW9uKHRlbXBsYXRlLCBjYWxsYmFjaykgewogICAgdmFyIGRpYWxvZyA9IGRpYWxvZ0Rpdih0aGlzLCB0ZW1wbGF0ZSk7CiAgICB2YXIgY2xvc2VkID0gZmFsc2UsIG1lID0gdGhpczsKICAgIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgICBpZiAoY2xvc2VkKSByZXR1cm47CiAgICAgIGNsb3NlZCA9IHRydWU7CiAgICAgIGRpYWxvZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpYWxvZyk7CiAgICB9CiAgICB2YXIgaW5wID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdOwogICAgaWYgKGlucCkgewogICAgICBDb2RlTWlycm9yLmNvbm5lY3QoaW5wLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzIHx8IGUua2V5Q29kZSA9PSAyNykgewogICAgICAgICAgQ29kZU1pcnJvci5lX3N0b3AoZSk7CiAgICAgICAgICBjbG9zZSgpOwogICAgICAgICAgbWUuZm9jdXMoKTsKICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIGNhbGxiYWNrKGlucC52YWx1ZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaW5wLmZvY3VzKCk7CiAgICAgIENvZGVNaXJyb3IuY29ubmVjdChpbnAsICJibHVyIiwgY2xvc2UpOwogICAgfQogICAgcmV0dXJuIGNsb3NlOwogIH0pOwoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigib3BlbkNvbmZpcm0iLCBmdW5jdGlvbih0ZW1wbGF0ZSwgY2FsbGJhY2tzKSB7CiAgICB2YXIgZGlhbG9nID0gZGlhbG9nRGl2KHRoaXMsIHRlbXBsYXRlKTsKICAgIHZhciBidXR0b25zID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0b24iKTsKICAgIHZhciBjbG9zZWQgPSBmYWxzZSwgbWUgPSB0aGlzLCBibHVycmluZyA9IDE7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGNsb3NlZCkgcmV0dXJuOwogICAgICBjbG9zZWQgPSB0cnVlOwogICAgICBkaWFsb2cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaWFsb2cpOwogICAgICBtZS5mb2N1cygpOwogICAgfQogICAgYnV0dG9uc1swXS5mb2N1cygpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBiID0gYnV0dG9uc1tpXTsKICAgICAgKGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICAgICAgQ29kZU1pcnJvci5jb25uZWN0KGIsICJjbGljayIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKG1lKTsKICAgICAgICB9KTsKICAgICAgfSkoY2FsbGJhY2tzW2ldKTsKICAgICAgQ29kZU1pcnJvci5jb25uZWN0KGIsICJibHVyIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgLS1ibHVycmluZzsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBpZiAoYmx1cnJpbmcgPD0gMCkgY2xvc2UoKTsgfSwgMjAwKTsKICAgICAgfSk7CiAgICAgIENvZGVNaXJyb3IuY29ubmVjdChiLCAiZm9jdXMiLCBmdW5jdGlvbigpIHsgKytibHVycmluZzsgfSk7CiAgICB9CiAgfSk7Cn0pKCk7]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/foldcode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5icmFjZVJhbmdlRmluZGVyID0gZnVuY3Rpb24oY20sIGxpbmUpIHsKICB2YXIgbGluZVRleHQgPSBjbS5nZXRMaW5lKGxpbmUpOwogIHZhciBzdGFydENoYXIgPSBsaW5lVGV4dC5sYXN0SW5kZXhPZigieyIpOwogIGlmIChzdGFydENoYXIgPCAwIHx8IGxpbmVUZXh0Lmxhc3RJbmRleE9mKCJ9IikgPiBzdGFydENoYXIpIHJldHVybjsKICB2YXIgdG9rZW5UeXBlID0gY20uZ2V0VG9rZW5BdCh7bGluZTogbGluZSwgY2g6IHN0YXJ0Q2hhcn0pLmNsYXNzTmFtZTsKICB2YXIgY291bnQgPSAxLCBsYXN0TGluZSA9IGNtLmxpbmVDb3VudCgpLCBlbmQ7CiAgb3V0ZXI6IGZvciAodmFyIGkgPSBsaW5lICsgMTsgaSA8IGxhc3RMaW5lOyArK2kpIHsKICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShpKSwgcG9zID0gMDsKICAgIGZvciAoOzspIHsKICAgICAgdmFyIG5leHRPcGVuID0gdGV4dC5pbmRleE9mKCJ7IiwgcG9zKSwgbmV4dENsb3NlID0gdGV4dC5pbmRleE9mKCJ9IiwgcG9zKTsKICAgICAgaWYgKG5leHRPcGVuIDwgMCkgbmV4dE9wZW4gPSB0ZXh0Lmxlbmd0aDsKICAgICAgaWYgKG5leHRDbG9zZSA8IDApIG5leHRDbG9zZSA9IHRleHQubGVuZ3RoOwogICAgICBwb3MgPSBNYXRoLm1pbihuZXh0T3BlbiwgbmV4dENsb3NlKTsKICAgICAgaWYgKHBvcyA9PSB0ZXh0Lmxlbmd0aCkgYnJlYWs7CiAgICAgIGlmIChjbS5nZXRUb2tlbkF0KHtsaW5lOiBpLCBjaDogcG9zICsgMX0pLmNsYXNzTmFtZSA9PSB0b2tlblR5cGUpIHsKICAgICAgICBpZiAocG9zID09IG5leHRPcGVuKSArK2NvdW50OwogICAgICAgIGVsc2UgaWYgKCEtLWNvdW50KSB7IGVuZCA9IGk7IGJyZWFrIG91dGVyOyB9CiAgICAgIH0KICAgICAgKytwb3M7CiAgICB9CiAgfQogIGlmIChlbmQgPT0gbnVsbCB8fCBlbmQgPT0gbGluZSArIDEpIHJldHVybjsKICByZXR1cm4gZW5kOwp9OwoKCkNvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uID0gZnVuY3Rpb24ocmFuZ2VGaW5kZXIsIG1hcmtUZXh0KSB7CiAgdmFyIGZvbGRlZCA9IFtdOwogIGlmIChtYXJrVGV4dCA9PSBudWxsKSBtYXJrVGV4dCA9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDJweDsgY29sb3I6IzYwMCI+JiN4MjViYzs8L2Rpdj4lTiUnOwoKICBmdW5jdGlvbiBpc0ZvbGRlZChjbSwgbikgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkZWQubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIHN0YXJ0ID0gY20ubGluZUluZm8oZm9sZGVkW2ldLnN0YXJ0KTsKICAgICAgaWYgKCFzdGFydCkgZm9sZGVkLnNwbGljZShpLS0sIDEpOwogICAgICBlbHNlIGlmIChzdGFydC5saW5lID09IG4pIHJldHVybiB7cG9zOiBpLCByZWdpb246IGZvbGRlZFtpXX07CiAgICB9CiAgfQoKICBmdW5jdGlvbiBleHBhbmQoY20sIHJlZ2lvbikgewogICAgY20uY2xlYXJNYXJrZXIocmVnaW9uLnN0YXJ0KTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVnaW9uLmhpZGRlbi5sZW5ndGg7ICsraSkKICAgICAgY20uc2hvd0xpbmUocmVnaW9uLmhpZGRlbltpXSk7CiAgfQoKICByZXR1cm4gZnVuY3Rpb24oY20sIGxpbmUpIHsKICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgdmFyIGtub3duID0gaXNGb2xkZWQoY20sIGxpbmUpOwogICAgICBpZiAoa25vd24pIHsKICAgICAgICBmb2xkZWQuc3BsaWNlKGtub3duLnBvcywgMSk7CiAgICAgICAgZXhwYW5kKGNtLCBrbm93bi5yZWdpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBlbmQgPSByYW5nZUZpbmRlcihjbSwgbGluZSk7CiAgICAgICAgaWYgKGVuZCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgdmFyIGhpZGRlbiA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSBsaW5lICsgMTsgaSA8IGVuZDsgKytpKSB7CiAgICAgICAgICB2YXIgaGFuZGxlID0gY20uaGlkZUxpbmUoaSk7CiAgICAgICAgICBpZiAoaGFuZGxlKSBoaWRkZW4ucHVzaChoYW5kbGUpOwogICAgICAgIH0KICAgICAgICB2YXIgZmlyc3QgPSBjbS5zZXRNYXJrZXIobGluZSwgbWFya1RleHQpOwogICAgICAgIHZhciByZWdpb24gPSB7c3RhcnQ6IGZpcnN0LCBoaWRkZW46IGhpZGRlbn07CiAgICAgICAgY20ub25EZWxldGVMaW5lKGZpcnN0LCBmdW5jdGlvbigpIHsgZXhwYW5kKGNtLCByZWdpb24pOyB9KTsKICAgICAgICBmb2xkZWQucHVzaChyZWdpb24pOwogICAgICB9CiAgICB9KTsKICB9Owp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/formatting.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/Ly8gPT09PT09PT09PT09PT0gRm9ybWF0dGluZyBleHRlbnNpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gQSBjb21tb24gc3RvcmFnZSBmb3IgYWxsIG1vZGUtc3BlY2lmaWMgZm9ybWF0dGluZyBmZWF0dXJlcwppZiAoIUNvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnMpIENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnMgPSB7fTsKCi8vIFJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiB0aGUgZWRpdG9yJ3MgY3VycmVudCBtb2RlCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJnZXRNb2RlRXh0IiwgZnVuY3Rpb24gKCkgewogIHJldHVybiBDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zW3RoaXMuZ2V0T3B0aW9uKCJtb2RlIildOwp9KTsKCi8vIElmIHRoZSBjdXJyZW50IG1vZGUgaXMgJ2h0bWxtaXhlZCcsIHJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiBhIG1vZGUgbG9jYXRlZCBhdAovLyB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIChjYW4gYmUgaHRtbG1peGVkLCBjc3Mgb3IgamF2YXNjcmlwdCkuIE90aGVyd2lzZSwgc2ltcGx5Ci8vIHJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiB0aGUgZWRpdG9yJ3MgY3VycmVudCBtb2RlLgpDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiZ2V0TW9kZUV4dEF0UG9zIiwgZnVuY3Rpb24gKHBvcykgewogIHZhciB0b2tlbiA9IHRoaXMuZ2V0VG9rZW5BdChwb3MpOwogIGlmICh0b2tlbiAmJiB0b2tlbi5zdGF0ZSAmJiB0b2tlbi5zdGF0ZS5tb2RlKQogICAgcmV0dXJuIENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbdG9rZW4uc3RhdGUubW9kZSA9PSAiaHRtbCIgPyAiaHRtbG1peGVkIiA6IHRva2VuLnN0YXRlLm1vZGVdOwogIGVsc2UKICAgIHJldHVybiB0aGlzLmdldE1vZGVFeHQoKTsKfSk7CgovLyBDb21tZW50L3VuY29tbWVudCB0aGUgc3BlY2lmaWVkIHJhbmdlCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJjb21tZW50UmFuZ2UiLCBmdW5jdGlvbiAoaXNDb21tZW50LCBmcm9tLCB0bykgewogIHZhciBjdXJNb2RlID0gdGhpcy5nZXRNb2RlRXh0QXRQb3ModGhpcy5nZXRDdXJzb3IoKSk7CiAgaWYgKGlzQ29tbWVudCkgeyAvLyBDb21tZW50IHJhbmdlCiAgICB2YXIgY29tbWVudGVkVGV4dCA9IHRoaXMuZ2V0UmFuZ2UoZnJvbSwgdG8pOwogICAgdGhpcy5yZXBsYWNlUmFuZ2UoY3VyTW9kZS5jb21tZW50U3RhcnQgKyB0aGlzLmdldFJhbmdlKGZyb20sIHRvKSArIGN1ck1vZGUuY29tbWVudEVuZAogICAgICAsIGZyb20sIHRvKTsKICAgIGlmIChmcm9tLmxpbmUgPT0gdG8ubGluZSAmJiBmcm9tLmNoID09IHRvLmNoKSB7IC8vIEFuIGVtcHR5IGNvbW1lbnQgaW5zZXJ0ZWQgLSBwdXQgY3Vyc29yIGluc2lkZQogICAgICB0aGlzLnNldEN1cnNvcihmcm9tLmxpbmUsIGZyb20uY2ggKyBjdXJNb2RlLmNvbW1lbnRTdGFydC5sZW5ndGgpOwogICAgfQogIH0KICBlbHNlIHsgLy8gVW5jb21tZW50IHJhbmdlCiAgICB2YXIgc2VsVGV4dCA9IHRoaXMuZ2V0UmFuZ2UoZnJvbSwgdG8pOwogICAgdmFyIHN0YXJ0SW5kZXggPSBzZWxUZXh0LmluZGV4T2YoY3VyTW9kZS5jb21tZW50U3RhcnQpOwogICAgdmFyIGVuZEluZGV4ID0gc2VsVGV4dC5sYXN0SW5kZXhPZihjdXJNb2RlLmNvbW1lbnRFbmQpOwogICAgaWYgKHN0YXJ0SW5kZXggPiAtMSAmJiBlbmRJbmRleCA+IC0xICYmIGVuZEluZGV4ID4gc3RhcnRJbmRleCkgewogICAgICAvLyBUYWtlIHN0cmluZyB0aWxsIGNvbW1lbnQgc3RhcnQKICAgICAgc2VsVGV4dCA9IHNlbFRleHQuc3Vic3RyKDAsIHN0YXJ0SW5kZXgpCiAgICAgIC8vIEZyb20gY29tbWVudCBzdGFydCB0aWxsIGNvbW1lbnQgZW5kCiAgICAgICAgKyBzZWxUZXh0LnN1YnN0cmluZyhzdGFydEluZGV4ICsgY3VyTW9kZS5jb21tZW50U3RhcnQubGVuZ3RoLCBlbmRJbmRleCkKICAgICAgLy8gRnJvbSBjb21tZW50IGVuZCB0aWxsIHN0cmluZyBlbmQKICAgICAgICArIHNlbFRleHQuc3Vic3RyKGVuZEluZGV4ICsgY3VyTW9kZS5jb21tZW50RW5kLmxlbmd0aCk7CiAgICB9CiAgICB0aGlzLnJlcGxhY2VSYW5nZShzZWxUZXh0LCBmcm9tLCB0byk7CiAgfQp9KTsKCi8vIEFwcGxpZXMgYXV0b21hdGljIG1vZGUtYXdhcmUgaW5kZW50YXRpb24gdG8gdGhlIHNwZWNpZmllZCByYW5nZQpDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiYXV0b0luZGVudFJhbmdlIiwgZnVuY3Rpb24gKGZyb20sIHRvKSB7CiAgdmFyIGNtSW5zdGFuY2UgPSB0aGlzOwogIHRoaXMub3BlcmF0aW9uKGZ1bmN0aW9uICgpIHsKICAgIGZvciAodmFyIGkgPSBmcm9tLmxpbmU7IGkgPD0gdG8ubGluZTsgaSsrKSB7CiAgICAgIGNtSW5zdGFuY2UuaW5kZW50TGluZShpKTsKICAgIH0KICB9KTsKfSk7CgovLyBBcHBsaWVzIGF1dG9tYXRpYyBmb3JtYXR0aW5nIHRvIHRoZSBzcGVjaWZpZWQgcmFuZ2UKQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImF1dG9Gb3JtYXRSYW5nZSIsIGZ1bmN0aW9uIChmcm9tLCB0bykgewogIHZhciBhYnNTdGFydCA9IHRoaXMuaW5kZXhGcm9tUG9zKGZyb20pOwogIHZhciBhYnNFbmQgPSB0aGlzLmluZGV4RnJvbVBvcyh0byk7CiAgLy8gSW5zZXJ0IGFkZGl0aW9uYWwgbGluZSBicmVha3Mgd2hlcmUgbmVjZXNzYXJ5IGFjY29yZGluZyB0byB0aGUKICAvLyBtb2RlJ3Mgc3ludGF4CiAgdmFyIHJlcyA9IHRoaXMuZ2V0TW9kZUV4dCgpLmF1dG9Gb3JtYXRMaW5lQnJlYWtzKHRoaXMuZ2V0VmFsdWUoKSwgYWJzU3RhcnQsIGFic0VuZCk7CiAgdmFyIGNtSW5zdGFuY2UgPSB0aGlzOwoKICAvLyBSZXBsYWNlIGFuZCBhdXRvLWluZGVudCB0aGUgcmFuZ2UKICB0aGlzLm9wZXJhdGlvbihmdW5jdGlvbiAoKSB7CiAgICBjbUluc3RhbmNlLnJlcGxhY2VSYW5nZShyZXMsIGZyb20sIHRvKTsKICAgIHZhciBzdGFydExpbmUgPSBjbUluc3RhbmNlLnBvc0Zyb21JbmRleChhYnNTdGFydCkubGluZTsKICAgIHZhciBlbmRMaW5lID0gY21JbnN0YW5jZS5wb3NGcm9tSW5kZXgoYWJzU3RhcnQgKyByZXMubGVuZ3RoKS5saW5lOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0TGluZTsgaSA8PSBlbmRMaW5lOyBpKyspIHsKICAgICAgY21JbnN0YW5jZS5pbmRlbnRMaW5lKGkpOwogICAgfQogIH0pOwp9KTsKCi8vIERlZmluZSBleHRlbnNpb25zIGZvciBhIGZldyBtb2RlcwoKQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1siY3NzIl0gPSB7CiAgY29tbWVudFN0YXJ0OiAiLyoiLAogIGNvbW1lbnRFbmQ6ICIqLyIsCiAgd29yZFdyYXBDaGFyczogWyI7IiwgIlxceyIsICJcXH0iXSwKICBhdXRvRm9ybWF0TGluZUJyZWFrczogZnVuY3Rpb24gKHRleHQpIHsKICAgIHJldHVybiB0ZXh0LnJlcGxhY2UobmV3IFJlZ0V4cCgiKDt8XFx7fFxcfSkoW15cclxuXSkiLCAiZyIpLCAiJDFcbiQyIik7CiAgfQp9OwoKQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1siamF2YXNjcmlwdCJdID0gewogIGNvbW1lbnRTdGFydDogIi8qIiwKICBjb21tZW50RW5kOiAiKi8iLAogIHdvcmRXcmFwQ2hhcnM6IFsiOyIsICJcXHsiLCAiXFx9Il0sCgogIGdldE5vbkJyZWFrYWJsZUJsb2NrczogZnVuY3Rpb24gKHRleHQpIHsKICAgIHZhciBub25CcmVha2FibGVSZWdleGVzID0gWwogICAgICAgIG5ldyBSZWdFeHAoImZvclxccyo/XFwoKFtcXHNcXFNdKj8pXFwpIiksCiAgICAgICAgbmV3IFJlZ0V4cCgiJyhbXFxzXFxTXSo/KSgnfCQpIiksCiAgICAgICAgbmV3IFJlZ0V4cCgiXCIoW1xcc1xcU10qPykoXCJ8JCkiKSwKICAgICAgICBuZXcgUmVnRXhwKCIvLy4qKFtcclxuXXwkKSIpCiAgICAgIF07CiAgICB2YXIgbm9uQnJlYWthYmxlQmxvY2tzID0gbmV3IEFycmF5KCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkJyZWFrYWJsZVJlZ2V4ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGN1clBvcyA9IDA7CiAgICAgIHdoaWxlIChjdXJQb3MgPCB0ZXh0Lmxlbmd0aCkgewogICAgICAgIHZhciBtID0gdGV4dC5zdWJzdHIoY3VyUG9zKS5tYXRjaChub25CcmVha2FibGVSZWdleGVzW2ldKTsKICAgICAgICBpZiAobSAhPSBudWxsKSB7CiAgICAgICAgICBub25CcmVha2FibGVCbG9ja3MucHVzaCh7CiAgICAgICAgICAgIHN0YXJ0OiBjdXJQb3MgKyBtLmluZGV4LAogICAgICAgICAgICBlbmQ6IGN1clBvcyArIG0uaW5kZXggKyBtWzBdLmxlbmd0aAogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJQb3MgKz0gbS5pbmRleCArIE1hdGgubWF4KDEsIG1bMF0ubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7IC8vIE5vIG1vcmUgbWF0Y2hlcwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBub25CcmVha2FibGVCbG9ja3Muc29ydChmdW5jdGlvbiAoYSwgYikgewogICAgICByZXR1cm4gYS5zdGFydCAtIGIuc3RhcnQ7CiAgICB9KTsKCiAgICByZXR1cm4gbm9uQnJlYWthYmxlQmxvY2tzOwogIH0sCgogIGF1dG9Gb3JtYXRMaW5lQnJlYWtzOiBmdW5jdGlvbiAodGV4dCkgewogICAgdmFyIGN1clBvcyA9IDA7CiAgICB2YXIgcmVMaW5lc1NwbGl0dGVyID0gbmV3IFJlZ0V4cCgiKDt8XFx7fFxcfSkoW15cclxuXSkiLCAiZyIpOwogICAgdmFyIG5vbkJyZWFrYWJsZUJsb2NrcyA9IHRoaXMuZ2V0Tm9uQnJlYWthYmxlQmxvY2tzKHRleHQpOwogICAgaWYgKG5vbkJyZWFrYWJsZUJsb2NrcyAhPSBudWxsKSB7CiAgICAgIHZhciByZXMgPSAiIjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub25CcmVha2FibGVCbG9ja3MubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobm9uQnJlYWthYmxlQmxvY2tzW2ldLnN0YXJ0ID4gY3VyUG9zKSB7IC8vIEJyZWFrIGxpbmVzIHRpbGwgdGhlIGJsb2NrCiAgICAgICAgICByZXMgKz0gdGV4dC5zdWJzdHJpbmcoY3VyUG9zLCBub25CcmVha2FibGVCbG9ja3NbaV0uc3RhcnQpLnJlcGxhY2UocmVMaW5lc1NwbGl0dGVyLCAiJDFcbiQyIik7CiAgICAgICAgICBjdXJQb3MgPSBub25CcmVha2FibGVCbG9ja3NbaV0uc3RhcnQ7CiAgICAgICAgfQogICAgICAgIGlmIChub25CcmVha2FibGVCbG9ja3NbaV0uc3RhcnQgPD0gY3VyUG9zCiAgICAgICAgICAmJiBub25CcmVha2FibGVCbG9ja3NbaV0uZW5kID49IGN1clBvcykgeyAvLyBTa2lwIG5vbi1icmVha2FibGUgYmxvY2sKICAgICAgICAgIHJlcyArPSB0ZXh0LnN1YnN0cmluZyhjdXJQb3MsIG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5lbmQpOwogICAgICAgICAgY3VyUG9zID0gbm9uQnJlYWthYmxlQmxvY2tzW2ldLmVuZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGN1clBvcyA8IHRleHQubGVuZ3RoIC0gMSkgewogICAgICAgIHJlcyArPSB0ZXh0LnN1YnN0cihjdXJQb3MpLnJlcGxhY2UocmVMaW5lc1NwbGl0dGVyLCAiJDFcbiQyIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlczsKICAgIH0KICAgIGVsc2UgewogICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHJlTGluZXNTcGxpdHRlciwgIiQxXG4kMiIpOwogICAgfQogIH0KfTsKCkNvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbInhtbCJdID0gewogIGNvbW1lbnRTdGFydDogIjwhLS0iLAogIGNvbW1lbnRFbmQ6ICItLT4iLAogIHdvcmRXcmFwQ2hhcnM6IFsiPiJdLAoKICBhdXRvRm9ybWF0TGluZUJyZWFrczogZnVuY3Rpb24gKHRleHQpIHsKICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoIlxuIik7CiAgICB2YXIgcmVQcm9jZXNzZWRQb3J0aW9uID0gbmV3IFJlZ0V4cCgiKF5cXHMqPzx8XltePF0qPykoLispKD5cXHMqPyR8W14+XSo/JCkiKTsKICAgIHZhciByZU9wZW5CcmFja2V0cyA9IG5ldyBSZWdFeHAoIjwiLCAiZyIpOwogICAgdmFyIHJlQ2xvc2VCcmFja2V0cyA9IG5ldyBSZWdFeHAoIig+KShbXlxyXG5dKSIsICJnIik7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBtVG9Qcm9jZXNzID0gbGluZXNbaV0ubWF0Y2gocmVQcm9jZXNzZWRQb3J0aW9uKTsKICAgICAgaWYgKG1Ub1Byb2Nlc3MgIT0gbnVsbCAmJiBtVG9Qcm9jZXNzLmxlbmd0aCA+IDMpIHsgLy8gVGhlIGxpbmUgc3RhcnRzIHdpdGggd2hpdGVzcGFjZXMgYW5kIGVuZHMgd2l0aCB3aGl0ZXNwYWNlcwogICAgICAgIGxpbmVzW2ldID0gbVRvUHJvY2Vzc1sxXQogICAgICAgICAgICArIG1Ub1Byb2Nlc3NbMl0ucmVwbGFjZShyZU9wZW5CcmFja2V0cywgIlxuJCYiKS5yZXBsYWNlKHJlQ2xvc2VCcmFja2V0cywgIiQxXG4kMiIpCiAgICAgICAgICAgICsgbVRvUHJvY2Vzc1szXTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBsaW5lcy5qb2luKCJcbiIpOwogIH0KfTsKCkNvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbImh0bWxtaXhlZCJdID0gewogIGNvbW1lbnRTdGFydDogIjwhLS0iLAogIGNvbW1lbnRFbmQ6ICItLT4iLAogIHdvcmRXcmFwQ2hhcnM6IFsiPiIsICI7IiwgIlxceyIsICJcXH0iXSwKCiAgZ2V0TW9kZUluZm9zOiBmdW5jdGlvbiAodGV4dCwgYWJzUG9zKSB7CiAgICB2YXIgbW9kZUluZm9zID0gbmV3IEFycmF5KCk7CiAgICBtb2RlSW5mb3NbMF0gPQogICAgICB7CiAgICAgICAgcG9zOiAwLAogICAgICAgIG1vZGVFeHQ6IENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbInhtbCJdLAogICAgICAgIG1vZGVOYW1lOiAieG1sIgogICAgICB9OwoKICAgIHZhciBtb2RlTWF0Y2hlcnMgPSBuZXcgQXJyYXkoKTsKICAgIG1vZGVNYXRjaGVyc1swXSA9CiAgICAgIHsKICAgICAgICByZWdleDogbmV3IFJlZ0V4cCgiPHN0eWxlW14+XSo+KFtcXHNcXFNdKj8pKDwvc3R5bGVbXj5dKj58JCkiLCAiaSIpLAogICAgICAgIG1vZGVFeHQ6IENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbImNzcyJdLAogICAgICAgIG1vZGVOYW1lOiAiY3NzIgogICAgICB9OwogICAgbW9kZU1hdGNoZXJzWzFdID0KICAgICAgewogICAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKCI8c2NyaXB0W14+XSo+KFtcXHNcXFNdKj8pKDwvc2NyaXB0W14+XSo+fCQpIiwgImkiKSwKICAgICAgICBtb2RlRXh0OiBDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zWyJqYXZhc2NyaXB0Il0sCiAgICAgICAgbW9kZU5hbWU6ICJqYXZhc2NyaXB0IgogICAgICB9OwoKICAgIHZhciBsYXN0Q2hhclBvcyA9ICh0eXBlb2YgKGFic1BvcykgIT09ICJ1bmRlZmluZWQiID8gYWJzUG9zIDogdGV4dC5sZW5ndGggLSAxKTsKICAgIC8vIERldGVjdCBtb2RlcyBmb3IgdGhlIGVudGlyZSB0ZXh0CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGVNYXRjaGVycy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY3VyUG9zID0gMDsKICAgICAgd2hpbGUgKGN1clBvcyA8PSBsYXN0Q2hhclBvcykgewogICAgICAgIHZhciBtID0gdGV4dC5zdWJzdHIoY3VyUG9zKS5tYXRjaChtb2RlTWF0Y2hlcnNbaV0ucmVnZXgpOwogICAgICAgIGlmIChtICE9IG51bGwpIHsKICAgICAgICAgIGlmIChtLmxlbmd0aCA+IDEgJiYgbVsxXS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIC8vIFB1c2ggYmxvY2sgYmVnaW4gcG9zCiAgICAgICAgICAgIHZhciBibG9ja0JlZ2luID0gY3VyUG9zICsgbS5pbmRleCArIG1bMF0uaW5kZXhPZihtWzFdKTsKICAgICAgICAgICAgbW9kZUluZm9zLnB1c2goCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcG9zOiBibG9ja0JlZ2luLAogICAgICAgICAgICAgICAgbW9kZUV4dDogbW9kZU1hdGNoZXJzW2ldLm1vZGVFeHQsCiAgICAgICAgICAgICAgICBtb2RlTmFtZTogbW9kZU1hdGNoZXJzW2ldLm1vZGVOYW1lCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIFB1c2ggYmxvY2sgZW5kIHBvcwogICAgICAgICAgICBtb2RlSW5mb3MucHVzaCgKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwb3M6IGJsb2NrQmVnaW4gKyBtWzFdLmxlbmd0aCwKICAgICAgICAgICAgICAgIG1vZGVFeHQ6IG1vZGVJbmZvc1swXS5tb2RlRXh0LAogICAgICAgICAgICAgICAgbW9kZU5hbWU6IG1vZGVJbmZvc1swXS5tb2RlTmFtZQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjdXJQb3MgKz0gbS5pbmRleCArIG1bMF0ubGVuZ3RoOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBjdXJQb3MgKz0gbS5pbmRleCArIE1hdGgubWF4KG1bMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7IC8vIE5vIG1vcmUgbWF0Y2hlcwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBTb3J0IG1vZGUgaW5mb3MKICAgIG1vZGVJbmZvcy5zb3J0KGZ1bmN0aW9uIHNvcnRNb2RlSW5mbyhhLCBiKSB7CiAgICAgIHJldHVybiBhLnBvcyAtIGIucG9zOwogICAgfSk7CgogICAgcmV0dXJuIG1vZGVJbmZvczsKICB9LAoKICBhdXRvRm9ybWF0TGluZUJyZWFrczogZnVuY3Rpb24gKHRleHQsIHN0YXJ0UG9zLCBlbmRQb3MpIHsKICAgIHZhciBtb2RlSW5mb3MgPSB0aGlzLmdldE1vZGVJbmZvcyh0ZXh0KTsKICAgIHZhciByZUJsb2NrU3RhcnRzV2l0aE5ld2xpbmUgPSBuZXcgUmVnRXhwKCJeXFxzKj9cbiIpOwogICAgdmFyIHJlQmxvY2tFbmRzV2l0aE5ld2xpbmUgPSBuZXcgUmVnRXhwKCJcblxccyo/JCIpOwogICAgdmFyIHJlcyA9ICIiOwogICAgLy8gVXNlIG1vZGVzIGluZm8gdG8gYnJlYWsgbGluZXMgY29ycmVzcG9uZGluZ2x5CiAgICBpZiAobW9kZUluZm9zLmxlbmd0aCA+IDEpIHsgLy8gRGVhbCB3aXRoIG11bHRpLW1vZGUgdGV4dAogICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBtb2RlSW5mb3MubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgc2VsU3RhcnQgPSBtb2RlSW5mb3NbaSAtIDFdLnBvczsKICAgICAgICB2YXIgc2VsRW5kID0gKGkgPCBtb2RlSW5mb3MubGVuZ3RoID8gbW9kZUluZm9zW2ldLnBvcyA6IGVuZFBvcyk7CgogICAgICAgIGlmIChzZWxTdGFydCA+PSBlbmRQb3MpIHsgLy8gVGhlIGJsb2NrIHN0YXJ0cyBsYXRlciB0aGFuIHRoZSBuZWVkZWQgZnJhZ21lbnQKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsU3RhcnQgPCBzdGFydFBvcykgewogICAgICAgICAgaWYgKHNlbEVuZCA8PSBzdGFydFBvcykgeyAvLyBUaGUgYmxvY2sgc3RhcnRzIGVhcmxpZXIgdGhhbiB0aGUgbmVlZGVkIGZyYWdtZW50CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgc2VsU3RhcnQgPSBzdGFydFBvczsKICAgICAgICB9CiAgICAgICAgaWYgKHNlbEVuZCA+IGVuZFBvcykgewogICAgICAgICAgc2VsRW5kID0gZW5kUG9zOwogICAgICAgIH0KICAgICAgICB2YXIgdGV4dFBvcnRpb24gPSB0ZXh0LnN1YnN0cmluZyhzZWxTdGFydCwgc2VsRW5kKTsKICAgICAgICBpZiAobW9kZUluZm9zW2kgLSAxXS5tb2RlTmFtZSAhPSAieG1sIikgeyAvLyBTdGFydGluZyBhIENTUyBvciBKYXZhU2NyaXB0IGJsb2NrCiAgICAgICAgICBpZiAoIXJlQmxvY2tTdGFydHNXaXRoTmV3bGluZS50ZXN0KHRleHRQb3J0aW9uKQogICAgICAgICAgICAgICYmIHNlbFN0YXJ0ID4gMCkgeyAvLyBUaGUgYmxvY2sgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIGxpbmUgYnJlYWsKICAgICAgICAgICAgdGV4dFBvcnRpb24gPSAiXG4iICsgdGV4dFBvcnRpb247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXJlQmxvY2tFbmRzV2l0aE5ld2xpbmUudGVzdCh0ZXh0UG9ydGlvbikKICAgICAgICAgICAgICAmJiBzZWxFbmQgPCB0ZXh0Lmxlbmd0aCAtIDEpIHsgLy8gVGhlIGJsb2NrIGRvZXMgbm90IGVuZCB3aXRoIGEgbGluZSBicmVhawogICAgICAgICAgICB0ZXh0UG9ydGlvbiArPSAiXG4iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXMgKz0gbW9kZUluZm9zW2kgLSAxXS5tb2RlRXh0LmF1dG9Gb3JtYXRMaW5lQnJlYWtzKHRleHRQb3J0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7IC8vIFNpbmdsZS1tb2RlIHRleHQKICAgICAgcmVzID0gbW9kZUluZm9zWzBdLm1vZGVFeHQuYXV0b0Zvcm1hdExpbmVCcmVha3ModGV4dC5zdWJzdHJpbmcoc3RhcnRQb3MsIGVuZFBvcykpOwogICAgfQoKICAgIHJldHVybiByZXM7CiAgfQp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/javascript-hint.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBmb3JFYWNoKGFyciwgZikgewogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7CiAgfQogIAogIGZ1bmN0aW9uIGFycmF5Q29udGFpbnMoYXJyLCBpdGVtKSB7CiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7CiAgICAgIHZhciBpID0gYXJyLmxlbmd0aDsKICAgICAgd2hpbGUgKGktLSkgewogICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gYXJyLmluZGV4T2YoaXRlbSkgIT0gLTE7CiAgfQogIAogIENvZGVNaXJyb3IuamF2YXNjcmlwdEhpbnQgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgIC8vIEZpbmQgdGhlIHRva2VuIGF0IHRoZSBjdXJzb3IKICAgIHZhciBjdXIgPSBlZGl0b3IuZ2V0Q3Vyc29yKCksIHRva2VuID0gZWRpdG9yLmdldFRva2VuQXQoY3VyKSwgdHByb3AgPSB0b2tlbjsKICAgIC8vIElmIGl0J3Mgbm90IGEgJ3dvcmQtc3R5bGUnIHRva2VuLCBpZ25vcmUgdGhlIHRva2VuLgogICAgaWYgKCEvXltcdyRfXSokLy50ZXN0KHRva2VuLnN0cmluZykpIHsKICAgICAgdG9rZW4gPSB0cHJvcCA9IHtzdGFydDogY3VyLmNoLCBlbmQ6IGN1ci5jaCwgc3RyaW5nOiAiIiwgc3RhdGU6IHRva2VuLnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogdG9rZW4uc3RyaW5nID09ICIuIiA/ICJwcm9wZXJ0eSIgOiBudWxsfTsKICAgIH0KICAgIC8vIElmIGl0IGlzIGEgcHJvcGVydHksIGZpbmQgb3V0IHdoYXQgaXQgaXMgYSBwcm9wZXJ0eSBvZi4KICAgIHdoaWxlICh0cHJvcC5jbGFzc05hbWUgPT0gInByb3BlcnR5IikgewogICAgICB0cHJvcCA9IGVkaXRvci5nZXRUb2tlbkF0KHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgIGlmICh0cHJvcC5zdHJpbmcgIT0gIi4iKSByZXR1cm47CiAgICAgIHRwcm9wID0gZWRpdG9yLmdldFRva2VuQXQoe2xpbmU6IGN1ci5saW5lLCBjaDogdHByb3Auc3RhcnR9KTsKICAgICAgaWYgKCFjb250ZXh0KSB2YXIgY29udGV4dCA9IFtdOwogICAgICBjb250ZXh0LnB1c2godHByb3ApOwogICAgfQogICAgcmV0dXJuIHtsaXN0OiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCksCiAgICAgICAgICAgIGZyb206IHtsaW5lOiBjdXIubGluZSwgY2g6IHRva2VuLnN0YXJ0fSwKICAgICAgICAgICAgdG86IHtsaW5lOiBjdXIubGluZSwgY2g6IHRva2VuLmVuZH19OwogIH0KCiAgdmFyIHN0cmluZ1Byb3BzID0gKCJjaGFyQXQgY2hhckNvZGVBdCBpbmRleE9mIGxhc3RJbmRleE9mIHN1YnN0cmluZyBzdWJzdHIgc2xpY2UgdHJpbSB0cmltTGVmdCB0cmltUmlnaHQgIiArCiAgICAgICAgICAgICAgICAgICAgICJ0b1VwcGVyQ2FzZSB0b0xvd2VyQ2FzZSBzcGxpdCBjb25jYXQgbWF0Y2ggcmVwbGFjZSBzZWFyY2giKS5zcGxpdCgiICIpOwogIHZhciBhcnJheVByb3BzID0gKCJsZW5ndGggY29uY2F0IGpvaW4gc3BsaWNlIHB1c2ggcG9wIHNoaWZ0IHVuc2hpZnQgc2xpY2UgcmV2ZXJzZSBzb3J0IGluZGV4T2YgIiArCiAgICAgICAgICAgICAgICAgICAgImxhc3RJbmRleE9mIGV2ZXJ5IHNvbWUgZmlsdGVyIGZvckVhY2ggbWFwIHJlZHVjZSByZWR1Y2VSaWdodCAiKS5zcGxpdCgiICIpOwogIHZhciBmdW5jUHJvcHMgPSAicHJvdG90eXBlIGFwcGx5IGNhbGwgYmluZCIuc3BsaXQoIiAiKTsKICB2YXIga2V5d29yZHMgPSAoImJyZWFrIGNhc2UgY2F0Y2ggY29udGludWUgZGVidWdnZXIgZGVmYXVsdCBkZWxldGUgZG8gZWxzZSBmYWxzZSBmaW5hbGx5IGZvciBmdW5jdGlvbiAiICsKICAgICAgICAgICAgICAgICAgImlmIGluIGluc3RhbmNlb2YgbmV3IG51bGwgcmV0dXJuIHN3aXRjaCB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdmFyIHZvaWQgd2hpbGUgd2l0aCIpLnNwbGl0KCIgIik7CgogIGZ1bmN0aW9uIGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KSB7CiAgICB2YXIgZm91bmQgPSBbXSwgc3RhcnQgPSB0b2tlbi5zdHJpbmc7CiAgICBmdW5jdGlvbiBtYXliZUFkZChzdHIpIHsKICAgICAgaWYgKHN0ci5pbmRleE9mKHN0YXJ0KSA9PSAwICYmICFhcnJheUNvbnRhaW5zKGZvdW5kLCBzdHIpKSBmb3VuZC5wdXNoKHN0cik7CiAgICB9CiAgICBmdW5jdGlvbiBnYXRoZXJDb21wbGV0aW9ucyhvYmopIHsKICAgICAgaWYgKHR5cGVvZiBvYmogPT0gInN0cmluZyIpIGZvckVhY2goc3RyaW5nUHJvcHMsIG1heWJlQWRkKTsKICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIGZvckVhY2goYXJyYXlQcm9wcywgbWF5YmVBZGQpOwogICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikgZm9yRWFjaChmdW5jUHJvcHMsIG1heWJlQWRkKTsKICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIG1heWJlQWRkKG5hbWUpOwogICAgfQoKICAgIGlmIChjb250ZXh0KSB7CiAgICAgIC8vIElmIHRoaXMgaXMgYSBwcm9wZXJ0eSwgc2VlIGlmIGl0IGJlbG9uZ3MgdG8gc29tZSBvYmplY3Qgd2UgY2FuCiAgICAgIC8vIGZpbmQgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgIHZhciBvYmogPSBjb250ZXh0LnBvcCgpLCBiYXNlOwogICAgICBpZiAob2JqLmNsYXNzTmFtZSA9PSAidmFyaWFibGUiKQogICAgICAgIGJhc2UgPSB3aW5kb3dbb2JqLnN0cmluZ107CiAgICAgIGVsc2UgaWYgKG9iai5jbGFzc05hbWUgPT0gInN0cmluZyIpCiAgICAgICAgYmFzZSA9ICIiOwogICAgICBlbHNlIGlmIChvYmouY2xhc3NOYW1lID09ICJhdG9tIikKICAgICAgICBiYXNlID0gMTsKICAgICAgd2hpbGUgKGJhc2UgIT0gbnVsbCAmJiBjb250ZXh0Lmxlbmd0aCkKICAgICAgICBiYXNlID0gYmFzZVtjb250ZXh0LnBvcCgpLnN0cmluZ107CiAgICAgIGlmIChiYXNlICE9IG51bGwpIGdhdGhlckNvbXBsZXRpb25zKGJhc2UpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIElmIG5vdCwganVzdCBsb29rIGluIHRoZSB3aW5kb3cgb2JqZWN0IGFuZCBhbnkgbG9jYWwgc2NvcGUKICAgICAgLy8gKHJlYWRpbmcgaW50byBKUyBtb2RlIGludGVybmFscyB0byBnZXQgYXQgdGhlIGxvY2FsIHZhcmlhYmxlcykKICAgICAgZm9yICh2YXIgdiA9IHRva2VuLnN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dCkgbWF5YmVBZGQodi5uYW1lKTsKICAgICAgZ2F0aGVyQ29tcGxldGlvbnMod2luZG93KTsKICAgICAgZm9yRWFjaChrZXl3b3JkcywgbWF5YmVBZGQpOwogICAgfQogICAgcmV0dXJuIGZvdW5kOwogIH0KfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/overlay.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBtb2RlcyB0byBiZSBjb21iaW5lZC4gVGhlIG1vZGUgZ2l2ZW4KLy8gYXMgdGhlIGJhc2UgYXJndW1lbnQgdGFrZXMgY2FyZSBvZiBtb3N0IG9mIHRoZSBub3JtYWwgbW9kZQovLyBmdW5jdGlvbmFsaXR5LCBidXQgYSBzZWNvbmQgKHR5cGljYWxseSBzaW1wbGUpIG1vZGUgaXMgdXNlZCwgd2hpY2gKLy8gY2FuIG92ZXJyaWRlIHRoZSBzdHlsZSBvZiB0ZXh0LiBCb3RoIG1vZGVzIGdldCB0byBwYXJzZSBhbGwgb2YgdGhlCi8vIHRleHQsIGJ1dCB3aGVuIGJvdGggYXNzaWduIGEgbm9uLW51bGwgc3R5bGUgdG8gYSBwaWVjZSBvZiBjb2RlLCB0aGUKLy8gb3ZlcmxheSB3aW5zLCB1bmxlc3MgdGhlIGNvbWJpbmUgYXJndW1lbnQgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UKLy8gdGhlIHN0eWxlcyBhcmUgY29tYmluZWQuCgpDb2RlTWlycm9yLm92ZXJsYXlQYXJzZXIgPSBmdW5jdGlvbihiYXNlLCBvdmVybGF5LCBjb21iaW5lKSB7CiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShiYXNlKSwKICAgICAgICBvdmVybGF5OiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUob3ZlcmxheSksCiAgICAgICAgYmFzZVBvczogMCwgYmFzZUN1cjogbnVsbCwKICAgICAgICBvdmVybGF5UG9zOiAwLCBvdmVybGF5Q3VyOiBudWxsCiAgICAgIH07CiAgICB9LAogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3IuY29weVN0YXRlKGJhc2UsIHN0YXRlLmJhc2UpLAogICAgICAgIG92ZXJsYXk6IENvZGVNaXJyb3IuY29weVN0YXRlKG92ZXJsYXksIHN0YXRlLm92ZXJsYXkpLAogICAgICAgIGJhc2VQb3M6IHN0YXRlLmJhc2VQb3MsIGJhc2VDdXI6IG51bGwsCiAgICAgICAgb3ZlcmxheVBvczogc3RhdGUub3ZlcmxheVBvcywgb3ZlcmxheUN1cjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLmJhc2VQb3MpIHsKICAgICAgICBzdGF0ZS5iYXNlQ3VyID0gYmFzZS50b2tlbihzdHJlYW0sIHN0YXRlLmJhc2UpOwogICAgICAgIHN0YXRlLmJhc2VQb3MgPSBzdHJlYW0ucG9zOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uc3RhcnQgPT0gc3RhdGUub3ZlcmxheVBvcykgewogICAgICAgIHN0cmVhbS5wb3MgPSBzdHJlYW0uc3RhcnQ7CiAgICAgICAgc3RhdGUub3ZlcmxheUN1ciA9IG92ZXJsYXkudG9rZW4oc3RyZWFtLCBzdGF0ZS5vdmVybGF5KTsKICAgICAgICBzdGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnBvczsKICAgICAgfQogICAgICBzdHJlYW0ucG9zID0gTWF0aC5taW4oc3RhdGUuYmFzZVBvcywgc3RhdGUub3ZlcmxheVBvcyk7CiAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHN0YXRlLmJhc2VQb3MgPSBzdGF0ZS5vdmVybGF5UG9zID0gMDsKCiAgICAgIGlmIChzdGF0ZS5vdmVybGF5Q3VyID09IG51bGwpIHJldHVybiBzdGF0ZS5iYXNlQ3VyOwogICAgICBpZiAoc3RhdGUuYmFzZUN1ciAhPSBudWxsICYmIGNvbWJpbmUpIHJldHVybiBzdGF0ZS5iYXNlQ3VyICsgIiAiICsgc3RhdGUub3ZlcmxheUN1cjsKICAgICAgZWxzZSByZXR1cm4gc3RhdGUub3ZlcmxheUN1cjsKICAgIH0sCiAgICAKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICByZXR1cm4gYmFzZS5pbmRlbnQoc3RhdGUuYmFzZSwgdGV4dEFmdGVyKTsKICAgIH0sCiAgICBlbGVjdHJpY0NoYXJzOiBiYXNlLmVsZWN0cmljQ2hhcnMKICB9Owp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/runmode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5ydW5Nb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBtb2Rlc3BlYywgY2FsbGJhY2spIHsKICB2YXIgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZSh7aW5kZW50VW5pdDogMn0sIG1vZGVzcGVjKTsKICB2YXIgaXNOb2RlID0gY2FsbGJhY2subm9kZVR5cGUgPT0gMTsKICBpZiAoaXNOb2RlKSB7CiAgICB2YXIgbm9kZSA9IGNhbGxiYWNrLCBhY2N1bSA9IFtdOwogICAgY2FsbGJhY2sgPSBmdW5jdGlvbihzdHJpbmcsIHN0eWxlKSB7CiAgICAgIGlmIChzdHJpbmcgPT0gIlxuIikKICAgICAgICBhY2N1bS5wdXNoKCI8YnI+Iik7CiAgICAgIGVsc2UgaWYgKHN0eWxlKQogICAgICAgIGFjY3VtLnB1c2goIjxzcGFuIGNsYXNzPVwiY20tIiArIENvZGVNaXJyb3IuaHRtbEVzY2FwZShzdHlsZSkgKyAiXCI+IiArIENvZGVNaXJyb3IuaHRtbEVzY2FwZShzdHJpbmcpICsgIjwvc3Bhbj4iKTsKICAgICAgZWxzZQogICAgICAgIGFjY3VtLnB1c2goQ29kZU1pcnJvci5odG1sRXNjYXBlKHN0cmluZykpOwogICAgfQogIH0KICB2YXIgbGluZXMgPSBDb2RlTWlycm9yLnNwbGl0TGluZXMoc3RyaW5nKSwgc3RhdGUgPSBDb2RlTWlycm9yLnN0YXJ0U3RhdGUobW9kZSk7CiAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgIGlmIChpKSBjYWxsYmFjaygiXG4iKTsKICAgIHZhciBzdHJlYW0gPSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0obGluZXNbaV0pOwogICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgdmFyIHN0eWxlID0gbW9kZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKICAgICAgY2FsbGJhY2soc3RyZWFtLmN1cnJlbnQoKSwgc3R5bGUsIGksIHN0cmVhbS5zdGFydCk7CiAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICB9CiAgfQogIGlmIChpc05vZGUpCiAgICBub2RlLmlubmVySFRNTCA9IGFjY3VtLmpvaW4oIiIpOwp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/search.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gRGVmaW5lIHNlYXJjaCBjb21tYW5kcy4gRGVwZW5kcyBvbiBkaWFsb2cuanMgb3IgYW5vdGhlcgovLyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlbkRpYWxvZyBtZXRob2QuCgovLyBSZXBsYWNlIHdvcmtzIGEgbGl0dGxlIG9kZGx5IC0tIGl0IHdpbGwgZG8gdGhlIHJlcGxhY2Ugb24gdGhlIG5leHQKLy8gQ3RybC1HIChvciB3aGF0ZXZlciBpcyBib3VuZCB0byBmaW5kTmV4dCkgcHJlc3MuIFlvdSBwcmV2ZW50IGEKLy8gcmVwbGFjZSBieSBtYWtpbmcgc3VyZSB0aGUgbWF0Y2ggaXMgbm8gbG9uZ2VyIHNlbGVjdGVkIHdoZW4gaGl0dGluZwovLyBDdHJsLUcuCgooZnVuY3Rpb24oKSB7CiAgZnVuY3Rpb24gU2VhcmNoU3RhdGUoKSB7CiAgICB0aGlzLnBvc0Zyb20gPSB0aGlzLnBvc1RvID0gdGhpcy5xdWVyeSA9IG51bGw7CiAgICB0aGlzLm1hcmtlZCA9IFtdOwogIH0KICBmdW5jdGlvbiBnZXRTZWFyY2hTdGF0ZShjbSkgewogICAgcmV0dXJuIGNtLl9zZWFyY2hTdGF0ZSB8fCAoY20uX3NlYXJjaFN0YXRlID0gbmV3IFNlYXJjaFN0YXRlKCkpOwogIH0KICBmdW5jdGlvbiBkaWFsb2coY20sIHRleHQsIHNob3J0VGV4dCwgZikgewogICAgaWYgKGNtLm9wZW5EaWFsb2cpIGNtLm9wZW5EaWFsb2codGV4dCwgZik7CiAgICBlbHNlIGYocHJvbXB0KHNob3J0VGV4dCwgIiIpKTsKICB9CiAgZnVuY3Rpb24gY29uZmlybURpYWxvZyhjbSwgdGV4dCwgc2hvcnRUZXh0LCBmcykgewogICAgaWYgKGNtLm9wZW5Db25maXJtKSBjbS5vcGVuQ29uZmlybSh0ZXh0LCBmcyk7CiAgICBlbHNlIGlmIChjb25maXJtKHNob3J0VGV4dCkpIGZzWzBdKCk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlUXVlcnkocXVlcnkpIHsKICAgIHZhciBpc1JFID0gcXVlcnkubWF0Y2goL15cLyguKilcLyQvKTsKICAgIHJldHVybiBpc1JFID8gbmV3IFJlZ0V4cChpc1JFWzFdKSA6IHF1ZXJ5OwogIH0KICB2YXIgcXVlcnlEaWFsb2cgPQogICAgJ1NlYXJjaDogPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMTBlbSI+IDxzcGFuIHN0eWxlPSJjb2xvcjogIzg4OCI+KFVzZSAvcmUvIHN5bnRheCBmb3IgcmVnZXhwIHNlYXJjaCk8L3NwYW4+JzsKICBmdW5jdGlvbiBkb1NlYXJjaChjbSwgcmV2KSB7CiAgICB2YXIgc3RhdGUgPSBnZXRTZWFyY2hTdGF0ZShjbSk7CiAgICBpZiAoc3RhdGUucXVlcnkpIHJldHVybiBmaW5kTmV4dChjbSwgcmV2KTsKICAgIGRpYWxvZyhjbSwgcXVlcnlEaWFsb2csICJTZWFyY2ggZm9yOiIsIGZ1bmN0aW9uKHF1ZXJ5KSB7CiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXF1ZXJ5IHx8IHN0YXRlLnF1ZXJ5KSByZXR1cm47CiAgICAgICAgc3RhdGUucXVlcnkgPSBwYXJzZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICBpZiAoY20ubGluZUNvdW50KCkgPCAyMDAwKSB7IC8vIFRoaXMgaXMgdG9vIGV4cGVuc2l2ZSBvbiBiaWcgZG9jdW1lbnRzLgogICAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gY20uZ2V0U2VhcmNoQ3Vyc29yKHF1ZXJ5KTsgY3Vyc29yLmZpbmROZXh0KCk7KQogICAgICAgICAgICBzdGF0ZS5tYXJrZWQucHVzaChjbS5tYXJrVGV4dChjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSwgIkNvZGVNaXJyb3Itc2VhcmNoaW5nIikpOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5wb3NGcm9tID0gc3RhdGUucG9zVG8gPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgICBmaW5kTmV4dChjbSwgcmV2KTsKICAgICAgfSk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZmluZE5leHQoY20sIHJldikge2NtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgIHZhciBjdXJzb3IgPSBjbS5nZXRTZWFyY2hDdXJzb3Ioc3RhdGUucXVlcnksIHJldiA/IHN0YXRlLnBvc0Zyb20gOiBzdGF0ZS5wb3NUbyk7CiAgICBpZiAoIWN1cnNvci5maW5kKHJldikpIHsKICAgICAgY3Vyc29yID0gY20uZ2V0U2VhcmNoQ3Vyc29yKHN0YXRlLnF1ZXJ5LCByZXYgPyB7bGluZTogY20ubGluZUNvdW50KCkgLSAxfSA6IHtsaW5lOiAwLCBjaDogMH0pOwogICAgICBpZiAoIWN1cnNvci5maW5kKHJldikpIHJldHVybjsKICAgIH0KICAgIGNtLnNldFNlbGVjdGlvbihjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSk7CiAgICBzdGF0ZS5wb3NGcm9tID0gY3Vyc29yLmZyb20oKTsgc3RhdGUucG9zVG8gPSBjdXJzb3IudG8oKTsKICB9KX0KICBmdW5jdGlvbiBjbGVhclNlYXJjaChjbSkge2NtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgIGlmICghc3RhdGUucXVlcnkpIHJldHVybjsKICAgIHN0YXRlLnF1ZXJ5ID0gbnVsbDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubWFya2VkLmxlbmd0aDsgKytpKSBzdGF0ZS5tYXJrZWRbaV0uY2xlYXIoKTsKICAgIHN0YXRlLm1hcmtlZC5sZW5ndGggPSAwOwogIH0pfQoKICB2YXIgcmVwbGFjZVF1ZXJ5RGlhbG9nID0KICAgICdSZXBsYWNlOiA8aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAxMGVtIj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjODg4Ij4oVXNlIC9yZS8gc3ludGF4IGZvciByZWdleHAgc2VhcmNoKTwvc3Bhbj4nOwogIHZhciByZXBsYWNlbWVudFF1ZXJ5RGlhbG9nID0gJ1dpdGg6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDEwZW0iPic7CiAgdmFyIGRvUmVwbGFjZUNvbmZpcm0gPSAiUmVwbGFjZT8gPGJ1dHRvbj5ZZXM8L2J1dHRvbj4gPGJ1dHRvbj5ObzwvYnV0dG9uPiA8YnV0dG9uPlN0b3A8L2J1dHRvbj4iOwogIGZ1bmN0aW9uIHJlcGxhY2UoY20sIGFsbCkgewogICAgZGlhbG9nKGNtLCByZXBsYWNlUXVlcnlEaWFsb2csICJSZXBsYWNlOiIsIGZ1bmN0aW9uKHF1ZXJ5KSB7CiAgICAgIGlmICghcXVlcnkpIHJldHVybjsKICAgICAgcXVlcnkgPSBwYXJzZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgZGlhbG9nKGNtLCByZXBsYWNlbWVudFF1ZXJ5RGlhbG9nLCAiUmVwbGFjZSB3aXRoOiIsIGZ1bmN0aW9uKHRleHQpIHsKICAgICAgICBpZiAoYWxsKSB7CiAgICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAodmFyIGN1cnNvciA9IGNtLmdldFNlYXJjaEN1cnNvcihxdWVyeSk7IGN1cnNvci5maW5kTmV4dCgpOykgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgcXVlcnkgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGNtLmdldFJhbmdlKGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpKS5tYXRjaChxdWVyeSk7CiAgICAgICAgICAgICAgICBjdXJzb3IucmVwbGFjZSh0ZXh0LnJlcGxhY2UoL1wkKFxkKS8sIGZ1bmN0aW9uKHcsIGkpIHtyZXR1cm4gbWF0Y2hbaV07fSkpOwogICAgICAgICAgICAgIH0gZWxzZSBjdXJzb3IucmVwbGFjZSh0ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNsZWFyU2VhcmNoKGNtKTsKICAgICAgICAgIHZhciBjdXJzb3IgPSBjbS5nZXRTZWFyY2hDdXJzb3IocXVlcnksIGNtLmdldEN1cnNvcigpKTsKICAgICAgICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7CiAgICAgICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5mcm9tKCksIG1hdGNoOwogICAgICAgICAgICBpZiAoIShtYXRjaCA9IGN1cnNvci5maW5kTmV4dCgpKSkgewogICAgICAgICAgICAgIGN1cnNvciA9IGNtLmdldFNlYXJjaEN1cnNvcihxdWVyeSk7CiAgICAgICAgICAgICAgaWYgKCEobWF0Y2ggPSBjdXJzb3IuZmluZE5leHQoKSkgfHwKICAgICAgICAgICAgICAgICAgKGN1cnNvci5mcm9tKCkubGluZSA9PSBzdGFydC5saW5lICYmIGN1cnNvci5mcm9tKCkuY2ggPT0gc3RhcnQuY2gpKSByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9uKGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpKTsKICAgICAgICAgICAgY29uZmlybURpYWxvZyhjbSwgZG9SZXBsYWNlQ29uZmlybSwgIlJlcGxhY2U/IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZnVuY3Rpb24oKSB7ZG9SZXBsYWNlKG1hdGNoKTt9LCBhZHZhbmNlXSk7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBkb1JlcGxhY2UobWF0Y2gpIHsKICAgICAgICAgICAgY3Vyc29yLnJlcGxhY2UodHlwZW9mIHF1ZXJ5ID09ICJzdHJpbmciID8gdGV4dCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZSgvXCQoXGQpLywgZnVuY3Rpb24odywgaSkge3JldHVybiBtYXRjaFtpXTt9KSk7CiAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgIH0KICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmQgPSBmdW5jdGlvbihjbSkge2NsZWFyU2VhcmNoKGNtKTsgZG9TZWFyY2goY20pO307CiAgQ29kZU1pcnJvci5jb21tYW5kcy5maW5kTmV4dCA9IGRvU2VhcmNoOwogIENvZGVNaXJyb3IuY29tbWFuZHMuZmluZFByZXYgPSBmdW5jdGlvbihjbSkge2RvU2VhcmNoKGNtLCB0cnVlKTt9OwogIENvZGVNaXJyb3IuY29tbWFuZHMuY2xlYXJTZWFyY2ggPSBjbGVhclNlYXJjaDsKICBDb2RlTWlycm9yLmNvbW1hbmRzLnJlcGxhY2UgPSByZXBsYWNlOwogIENvZGVNaXJyb3IuY29tbWFuZHMucmVwbGFjZUFsbCA9IGZ1bmN0aW9uKGNtKSB7cmVwbGFjZShjbSwgdHJ1ZSk7fTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/searchcursor.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7CiAgZnVuY3Rpb24gU2VhcmNoQ3Vyc29yKGNtLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCkgewogICAgdGhpcy5hdE9jY3VycmVuY2UgPSBmYWxzZTsgdGhpcy5jbSA9IGNtOwogICAgaWYgKGNhc2VGb2xkID09IG51bGwpIGNhc2VGb2xkID0gdHlwZW9mIHF1ZXJ5ID09ICJzdHJpbmciICYmIHF1ZXJ5ID09IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7CgogICAgcG9zID0gcG9zID8gY20uY2xpcFBvcyhwb3MpIDoge2xpbmU6IDAsIGNoOiAwfTsKICAgIHRoaXMucG9zID0ge2Zyb206IHBvcywgdG86IHBvc307CgogICAgLy8gVGhlIG1hdGNoZXMgbWV0aG9kIGlzIGZpbGxlZCBpbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiBxdWVyeS4KICAgIC8vIEl0IHRha2VzIGEgcG9zaXRpb24gYW5kIGEgZGlyZWN0aW9uLCBhbmQgcmV0dXJucyBhbiBvYmplY3QKICAgIC8vIGRlc2NyaWJpbmcgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgcXVlcnksIG9yIG51bGwgaWYgbm8KICAgIC8vIG1vcmUgbWF0Y2hlcyB3ZXJlIGZvdW5kLgogICAgaWYgKHR5cGVvZiBxdWVyeSAhPSAic3RyaW5nIikgLy8gUmVnZXhwIG1hdGNoCiAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykgewogICAgICAgIGlmIChyZXZlcnNlKSB7CiAgICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUocG9zLmxpbmUpLnNsaWNlKDAsIHBvcy5jaCksIG1hdGNoID0gbGluZS5tYXRjaChxdWVyeSksIHN0YXJ0ID0gMDsKICAgICAgICAgIHdoaWxlIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaW5kID0gbGluZS5pbmRleE9mKG1hdGNoWzBdKTsKICAgICAgICAgICAgc3RhcnQgKz0gaW5kOwogICAgICAgICAgICBsaW5lID0gbGluZS5zbGljZShpbmQgKyAxKTsKICAgICAgICAgICAgdmFyIG5ld21hdGNoID0gbGluZS5tYXRjaChxdWVyeSk7CiAgICAgICAgICAgIGlmIChuZXdtYXRjaCkgbWF0Y2ggPSBuZXdtYXRjaDsKICAgICAgICAgICAgZWxzZSBicmVhazsKICAgICAgICAgICAgc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUocG9zLmxpbmUpLnNsaWNlKHBvcy5jaCksIG1hdGNoID0gbGluZS5tYXRjaChxdWVyeSksCiAgICAgICAgICBzdGFydCA9IG1hdGNoICYmIHBvcy5jaCArIGxpbmUuaW5kZXhPZihtYXRjaFswXSk7CiAgICAgICAgfQogICAgICAgIGlmIChtYXRjaCkKICAgICAgICAgIHJldHVybiB7ZnJvbToge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnR9LAogICAgICAgICAgICAgICAgICB0bzoge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnQgKyBtYXRjaFswXS5sZW5ndGh9LAogICAgICAgICAgICAgICAgICBtYXRjaDogbWF0Y2h9OwogICAgICB9OwogICAgZWxzZSB7IC8vIFN0cmluZyBxdWVyeQogICAgICBpZiAoY2FzZUZvbGQpIHF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTsKICAgICAgdmFyIGZvbGQgPSBjYXNlRm9sZCA/IGZ1bmN0aW9uKHN0cil7cmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO30gOiBmdW5jdGlvbihzdHIpe3JldHVybiBzdHI7fTsKICAgICAgdmFyIHRhcmdldCA9IHF1ZXJ5LnNwbGl0KCJcbiIpOwogICAgICAvLyBEaWZmZXJlbnQgbWV0aG9kcyBmb3Igc2luZ2xlLWxpbmUgYW5kIG11bHRpLWxpbmUgcXVlcmllcwogICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA9PSAxKQogICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykgewogICAgICAgICAgdmFyIGxpbmUgPSBmb2xkKGNtLmdldExpbmUocG9zLmxpbmUpKSwgbGVuID0gcXVlcnkubGVuZ3RoLCBtYXRjaDsKICAgICAgICAgIGlmIChyZXZlcnNlID8gKHBvcy5jaCA+PSBsZW4gJiYgKG1hdGNoID0gbGluZS5sYXN0SW5kZXhPZihxdWVyeSwgcG9zLmNoIC0gbGVuKSkgIT0gLTEpCiAgICAgICAgICAgICAgOiAobWF0Y2ggPSBsaW5lLmluZGV4T2YocXVlcnksIHBvcy5jaCkpICE9IC0xKQogICAgICAgICAgICByZXR1cm4ge2Zyb206IHtsaW5lOiBwb3MubGluZSwgY2g6IG1hdGNofSwKICAgICAgICAgICAgICAgICAgICB0bzoge2xpbmU6IHBvcy5saW5lLCBjaDogbWF0Y2ggKyBsZW59fTsKICAgICAgICB9OwogICAgICBlbHNlCiAgICAgICAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24ocmV2ZXJzZSwgcG9zKSB7CiAgICAgICAgICB2YXIgbG4gPSBwb3MubGluZSwgaWR4ID0gKHJldmVyc2UgPyB0YXJnZXQubGVuZ3RoIC0gMSA6IDApLCBtYXRjaCA9IHRhcmdldFtpZHhdLCBsaW5lID0gZm9sZChjbS5nZXRMaW5lKGxuKSk7CiAgICAgICAgICB2YXIgb2Zmc2V0QSA9IChyZXZlcnNlID8gbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCA6IGxpbmUubGFzdEluZGV4T2YobWF0Y2gpKTsKICAgICAgICAgIGlmIChyZXZlcnNlID8gb2Zmc2V0QSA+PSBwb3MuY2ggfHwgb2Zmc2V0QSAhPSBtYXRjaC5sZW5ndGgKICAgICAgICAgICAgICA6IG9mZnNldEEgPD0gcG9zLmNoIHx8IG9mZnNldEEgIT0gbGluZS5sZW5ndGggLSBtYXRjaC5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgaWYgKHJldmVyc2UgPyAhbG4gOiBsbiA9PSBjbS5saW5lQ291bnQoKSAtIDEpIHJldHVybjsKICAgICAgICAgICAgbGluZSA9IGZvbGQoY20uZ2V0TGluZShsbiArPSByZXZlcnNlID8gLTEgOiAxKSk7CiAgICAgICAgICAgIG1hdGNoID0gdGFyZ2V0W3JldmVyc2UgPyAtLWlkeCA6ICsraWR4XTsKICAgICAgICAgICAgaWYgKGlkeCA+IDAgJiYgaWR4IDwgdGFyZ2V0Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgICBpZiAobGluZSAhPSBtYXRjaCkgcmV0dXJuOwogICAgICAgICAgICAgIGVsc2UgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG9mZnNldEIgPSAocmV2ZXJzZSA/IGxpbmUubGFzdEluZGV4T2YobWF0Y2gpIDogbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCk7CiAgICAgICAgICAgIGlmIChyZXZlcnNlID8gb2Zmc2V0QiAhPSBsaW5lLmxlbmd0aCAtIG1hdGNoLmxlbmd0aCA6IG9mZnNldEIgIT0gbWF0Y2gubGVuZ3RoKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge2xpbmU6IHBvcy5saW5lLCBjaDogb2Zmc2V0QX0sIGVuZCA9IHtsaW5lOiBsbiwgY2g6IG9mZnNldEJ9OwogICAgICAgICAgICByZXR1cm4ge2Zyb206IHJldmVyc2UgPyBlbmQgOiBzdGFydCwgdG86IHJldmVyc2UgPyBzdGFydCA6IGVuZH07CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KICB9CgogIFNlYXJjaEN1cnNvci5wcm90b3R5cGUgPSB7CiAgICBmaW5kTmV4dDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmluZChmYWxzZSk7fSwKICAgIGZpbmRQcmV2aW91czogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmluZCh0cnVlKTt9LAoKICAgIGZpbmQ6IGZ1bmN0aW9uKHJldmVyc2UpIHsKICAgICAgdmFyIHNlbGYgPSB0aGlzLCBwb3MgPSB0aGlzLmNtLmNsaXBQb3MocmV2ZXJzZSA/IHRoaXMucG9zLmZyb20gOiB0aGlzLnBvcy50byk7CiAgICAgIGZ1bmN0aW9uIHNhdmVQb3NBbmRGYWlsKGxpbmUpIHsKICAgICAgICB2YXIgcG9zID0ge2xpbmU6IGxpbmUsIGNoOiAwfTsKICAgICAgICBzZWxmLnBvcyA9IHtmcm9tOiBwb3MsIHRvOiBwb3N9OwogICAgICAgIHNlbGYuYXRPY2N1cnJlbmNlID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBmb3IgKDs7KSB7CiAgICAgICAgaWYgKHRoaXMucG9zID0gdGhpcy5tYXRjaGVzKHJldmVyc2UsIHBvcykpIHsKICAgICAgICAgIHRoaXMuYXRPY2N1cnJlbmNlID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiB0aGlzLnBvcy5tYXRjaCB8fCB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICAgaWYgKCFwb3MubGluZSkgcmV0dXJuIHNhdmVQb3NBbmRGYWlsKDApOwogICAgICAgICAgcG9zID0ge2xpbmU6IHBvcy5saW5lLTEsIGNoOiB0aGlzLmNtLmdldExpbmUocG9zLmxpbmUtMSkubGVuZ3RofTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgbWF4TGluZSA9IHRoaXMuY20ubGluZUNvdW50KCk7CiAgICAgICAgICBpZiAocG9zLmxpbmUgPT0gbWF4TGluZSAtIDEpIHJldHVybiBzYXZlUG9zQW5kRmFpbChtYXhMaW5lKTsKICAgICAgICAgIHBvcyA9IHtsaW5lOiBwb3MubGluZSsxLCBjaDogMH07CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIGZyb206IGZ1bmN0aW9uKCkge2lmICh0aGlzLmF0T2NjdXJyZW5jZSkgcmV0dXJuIHRoaXMucG9zLmZyb207fSwKICAgIHRvOiBmdW5jdGlvbigpIHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiB0aGlzLnBvcy50bzt9LAoKICAgIHJlcGxhY2U6IGZ1bmN0aW9uKG5ld1RleHQpIHsKICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICBpZiAodGhpcy5hdE9jY3VycmVuY2UpCiAgICAgICAgc2VsZi5wb3MudG8gPSB0aGlzLmNtLnJlcGxhY2VSYW5nZShuZXdUZXh0LCBzZWxmLnBvcy5mcm9tLCBzZWxmLnBvcy50byk7CiAgICB9CiAgfTsKCiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImdldFNlYXJjaEN1cnNvciIsIGZ1bmN0aW9uKHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKSB7CiAgICByZXR1cm4gbmV3IFNlYXJjaEN1cnNvcih0aGlzLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCk7CiAgfSk7Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/simple-hint.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3ItY29tcGxldGlvbnMgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIC13ZWJraXQtYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLDAsMCwuMik7CiAgLW1vei1ib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsKICBib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsKfQouQ29kZU1pcnJvci1jb21wbGV0aW9ucyBzZWxlY3QgewogIGJhY2tncm91bmQ6ICNmYWZhZmE7CiAgb3V0bGluZTogbm9uZTsKICBib3JkZXI6IG5vbmU7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IDA7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/simple-hint.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIENvZGVNaXJyb3Iuc2ltcGxlSGludCA9IGZ1bmN0aW9uKGVkaXRvciwgZ2V0SGludHMpIHsKICAgIC8vIFdlIHdhbnQgYSBzaW5nbGUgY3Vyc29yIHBvc2l0aW9uLgogICAgaWYgKGVkaXRvci5zb21ldGhpbmdTZWxlY3RlZCgpKSByZXR1cm47CiAgICB2YXIgcmVzdWx0ID0gZ2V0SGludHMoZWRpdG9yKTsKICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubGlzdC5sZW5ndGgpIHJldHVybjsKICAgIHZhciBjb21wbGV0aW9ucyA9IHJlc3VsdC5saXN0OwogICAgZnVuY3Rpb24gaW5zZXJ0KHN0cikgewogICAgICBlZGl0b3IucmVwbGFjZVJhbmdlKHN0ciwgcmVzdWx0LmZyb20sIHJlc3VsdC50byk7CiAgICB9CiAgICAvLyBXaGVuIHRoZXJlIGlzIG9ubHkgb25lIGNvbXBsZXRpb24sIHVzZSBpdCBkaXJlY3RseS4KICAgIGlmIChjb21wbGV0aW9ucy5sZW5ndGggPT0gMSkge2luc2VydChjb21wbGV0aW9uc1swXSk7IHJldHVybiB0cnVlO30KCiAgICAvLyBCdWlsZCB0aGUgc2VsZWN0IHdpZGdldAogICAgdmFyIGNvbXBsZXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjb21wbGV0ZS5jbGFzc05hbWUgPSAiQ29kZU1pcnJvci1jb21wbGV0aW9ucyI7CiAgICB2YXIgc2VsID0gY29tcGxldGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IikpOwogICAgLy8gT3BlcmEgZG9lc24ndCBtb3ZlIHRoZSBzZWxlY3Rpb24gd2hlbiBwcmVzc2luZyB1cC9kb3duIGluIGEKICAgIC8vIG11bHRpLXNlbGVjdCwgYnV0IGl0IGRvZXMgcHJvcGVybHkgc3VwcG9ydCB0aGUgc2l6ZSBwcm9wZXJ0eSBvbgogICAgLy8gc2luZ2xlLXNlbGVjdHMsIHNvIG5vIG11bHRpLXNlbGVjdCBpcyBuZWNlc3NhcnkuCiAgICBpZiAoIXdpbmRvdy5vcGVyYSkgc2VsLm11bHRpcGxlID0gdHJ1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIG9wdCA9IHNlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7CiAgICAgIG9wdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb21wbGV0aW9uc1tpXSkpOwogICAgfQogICAgc2VsLmZpcnN0Q2hpbGQuc2VsZWN0ZWQgPSB0cnVlOwogICAgc2VsLnNpemUgPSBNYXRoLm1pbigxMCwgY29tcGxldGlvbnMubGVuZ3RoKTsKICAgIHZhciBwb3MgPSBlZGl0b3IuY3Vyc29yQ29vcmRzKCk7CiAgICBjb21wbGV0ZS5zdHlsZS5sZWZ0ID0gcG9zLnggKyAicHgiOwogICAgY29tcGxldGUuc3R5bGUudG9wID0gcG9zLnlCb3QgKyAicHgiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb21wbGV0ZSk7CiAgICAvLyBIYWNrIHRvIGhpZGUgdGhlIHNjcm9sbGJhci4KICAgIGlmIChjb21wbGV0aW9ucy5sZW5ndGggPD0gMTApCiAgICAgIGNvbXBsZXRlLnN0eWxlLndpZHRoID0gKHNlbC5jbGllbnRXaWR0aCAtIDEpICsgInB4IjsKCiAgICB2YXIgZG9uZSA9IGZhbHNlOwogICAgZnVuY3Rpb24gY2xvc2UoKSB7CiAgICAgIGlmIChkb25lKSByZXR1cm47CiAgICAgIGRvbmUgPSB0cnVlOwogICAgICBjb21wbGV0ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbXBsZXRlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHBpY2soKSB7CiAgICAgIGluc2VydChjb21wbGV0aW9uc1tzZWwuc2VsZWN0ZWRJbmRleF0pOwogICAgICBjbG9zZSgpOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZWRpdG9yLmZvY3VzKCk7fSwgNTApOwogICAgfQogICAgQ29kZU1pcnJvci5jb25uZWN0KHNlbCwgImJsdXIiLCBjbG9zZSk7CiAgICBDb2RlTWlycm9yLmNvbm5lY3Qoc2VsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZTsKICAgICAgLy8gRW50ZXIKICAgICAgaWYgKGNvZGUgPT0gMTMpIHtDb2RlTWlycm9yLmVfc3RvcChldmVudCk7IHBpY2soKTt9CiAgICAgIC8vIEVzY2FwZQogICAgICBlbHNlIGlmIChjb2RlID09IDI3KSB7Q29kZU1pcnJvci5lX3N0b3AoZXZlbnQpOyBjbG9zZSgpOyBlZGl0b3IuZm9jdXMoKTt9CiAgICAgIGVsc2UgaWYgKGNvZGUgIT0gMzggJiYgY29kZSAhPSA0MCkgewogICAgICAgIGNsb3NlKCk7IGVkaXRvci5mb2N1cygpOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtDb2RlTWlycm9yLnNpbXBsZUhpbnQoZWRpdG9yLCBnZXRIaW50cyk7fSwgNTApOwogICAgICB9CiAgICB9KTsKICAgIENvZGVNaXJyb3IuY29ubmVjdChzZWwsICJkYmxjbGljayIsIHBpY2spOwoKICAgIHNlbC5mb2N1cygpOwogICAgLy8gT3BlcmEgc29tZXRpbWVzIGlnbm9yZXMgZm9jdXNpbmcgYSBmcmVzaGx5IGNyZWF0ZWQgbm9kZQogICAgaWYgKHdpbmRvdy5vcGVyYSkgc2V0VGltZW91dChmdW5jdGlvbigpe2lmICghZG9uZSkgc2VsLmZvY3VzKCk7fSwgMTAwKTsKICAgIHJldHVybiB0cnVlOwogIH07Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmlqbiBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></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[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbGlrZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgPSBwYXJzZXJDb25maWcua2V5d29yZHMgfHwge30sCiAgICAgIGJsb2NrS2V5d29yZHMgPSBwYXJzZXJDb25maWcuYmxvY2tLZXl3b3JkcyB8fCB7fSwKICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge30sCiAgICAgIGhvb2tzID0gcGFyc2VyQ29uZmlnLmhvb2tzIHx8IHt9LAogICAgICBtdWx0aUxpbmVTdHJpbmdzID0gcGFyc2VyQ29uZmlnLm11bHRpTGluZVN0cmluZ3M7CiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xcL10vOwoKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoaG9va3NbY2hdKSB7CiAgICAgIHZhciByZXN1bHQgPSBob29rc1tjaF0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDsKICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgfQogICAgfQogICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfQogICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7CiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsKICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgIH0KICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gImF0b20iOwogICAgcmV0dXJuICJ3b3JkIjsKICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLmFsaWduID0gYWxpZ247CiAgICB0aGlzLnByZXYgPSBwcmV2OwogIH0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpOwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTsKICAgIGlmICh0ID09ICIpIiB8fCB0ID09ICJdIiB8fCB0ID09ICJ9IikKICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkOwogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICAvLyBJbnRlcmZhY2UKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZTogbnVsbCwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJ0b3AiLCBmYWxzZSksCiAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIGN1clB1bmMgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IiB8fCBzdHlsZSA9PSAibWV0YSIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJdIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IikgewogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkKICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAic3RhdGVtZW50Iik7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UgJiYgc3RhdGUudG9rZW5pemUgIT0gbnVsbCkgcmV0dXJuIDA7CiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiICYmIGZpcnN0Q2hhciA9PSAifSIpIGN0eCA9IGN0eC5wcmV2OwogICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogaW5kZW50VW5pdCk7CiAgICAgIGVsc2UgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZSByZXR1cm4gY3R4LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ7fSIKICB9Owp9KTsKCihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsKICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIG9iajsKICB9CiAgdmFyIGNLZXl3b3JkcyA9ICJhdXRvIGlmIGJyZWFrIGludCBjYXNlIGxvbmcgY2hhciByZWdpc3RlciBjb250aW51ZSByZXR1cm4gZGVmYXVsdCBzaG9ydCBkbyBzaXplb2YgIiArCiAgICAiZG91YmxlIHN0YXRpYyBlbHNlIHN0cnVjdCBlbnRyeSBzd2l0Y2ggZXh0ZXJuIHR5cGVkZWYgZmxvYXQgdW5pb24gZm9yIHVuc2lnbmVkICIgKwogICAgImdvdG8gd2hpbGUgZW51bSB2b2lkIGNvbnN0IHNpZ25lZCB2b2xhdGlsZSI7CgogIGZ1bmN0aW9uIGNwcEhvb2soc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKCFzdGF0ZS5zdGFydE9mTGluZSkgcmV0dXJuIGZhbHNlOwogICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgcmV0dXJuICJtZXRhIjsKICB9CgogIC8vIEMjLXN0eWxlIHN0cmluZ3Mgd2hlcmUgIiIgZXNjYXBlcyBhIHF1b3RlLgogIGZ1bmN0aW9uIHRva2VuQXRTdHJpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG5leHQ7CiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChuZXh0ID09ICciJyAmJiAhc3RyZWFtLmVhdCgnIicpKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gInN0cmluZyI7CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jc3JjIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcyhjS2V5d29yZHMpLAogICAgYmxvY2tLZXl3b3Jkczogd29yZHMoImNhc2UgZG8gZWxzZSBmb3IgaWYgc3dpdGNoIHdoaWxlIHN0cnVjdCIpLAogICAgYXRvbXM6IHdvcmRzKCJudWxsIiksCiAgICBob29rczogeyIjIjogY3BwSG9va30KICB9KTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jKytzcmMiLCB7CiAgICBuYW1lOiAiY2xpa2UiLAogICAga2V5d29yZHM6IHdvcmRzKGNLZXl3b3JkcyArICIgYXNtIGR5bmFtaWNfY2FzdCBuYW1lc3BhY2UgcmVpbnRlcnByZXRfY2FzdCB0cnkgYm9vbCBleHBsaWNpdCBuZXcgIiArCiAgICAgICAgICAgICAgICAgICAgInN0YXRpY19jYXN0IHR5cGVpZCBjYXRjaCBvcGVyYXRvciB0ZW1wbGF0ZSB0eXBlbmFtZSBjbGFzcyBmcmllbmQgcHJpdmF0ZSAiICsKICAgICAgICAgICAgICAgICAgICAidGhpcyB1c2luZyBjb25zdF9jYXN0IGlubGluZSBwdWJsaWMgdGhyb3cgdmlydHVhbCBkZWxldGUgbXV0YWJsZSBwcm90ZWN0ZWQgIiArCiAgICAgICAgICAgICAgICAgICAgIndjaGFyX3QiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN0cnVjdCBzd2l0Y2ggdHJ5IHdoaWxlIiksCiAgICBhdG9tczogd29yZHMoInRydWUgZmFsc2UgbnVsbCIpLAogICAgaG9va3M6IHsiIyI6IGNwcEhvb2t9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtamF2YSIsIHsKICAgIG5hbWU6ICJjbGlrZSIsCiAgICBrZXl3b3Jkczogd29yZHMoImFic3RyYWN0IGFzc2VydCBib29sZWFuIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZmF1bHQgIiArIAogICAgICAgICAgICAgICAgICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCAiICsKICAgICAgICAgICAgICAgICAgICAiaW5zdGFuY2VvZiBpbnQgaW50ZXJmYWNlIGxvbmcgbmF0aXZlIG5ldyBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyAiICsKICAgICAgICAgICAgICAgICAgICAicmV0dXJuIHNob3J0IHN0YXRpYyBzdHJpY3RmcCBzdXBlciBzd2l0Y2ggc3luY2hyb25pemVkIHRoaXMgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCAiICsKICAgICAgICAgICAgICAgICAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN3aXRjaCB0cnkgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9CiAgICB9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtY3NoYXJwIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcygiYWJzdHJhY3QgYXMgYmFzZSBib29sIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNoZWNrZWQgY2xhc3MgY29uc3QgY29udGludWUgZGVjaW1hbCIgKyAKICAgICAgICAgICAgICAgICAgICAiIGRlZmF1bHQgZGVsZWdhdGUgZG8gZG91YmxlIGVsc2UgZW51bSBldmVudCBleHBsaWNpdCBleHRlcm4gZmluYWxseSBmaXhlZCBmbG9hdCBmb3IiICsgCiAgICAgICAgICAgICAgICAgICAgIiBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50IGludGVyZmFjZSBpbnRlcm5hbCBpcyBsb2NrIGxvbmcgbmFtZXNwYWNlIG5ldyBvYmplY3QiICsgCiAgICAgICAgICAgICAgICAgICAgIiBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNieXRlIHNlYWxlZCBzaG9ydCIgKyAKICAgICAgICAgICAgICAgICAgICAiIHNpemVvZiBzdGFja2FsbG9jIHN0YXRpYyBzdHJpbmcgc3RydWN0IHN3aXRjaCB0aGlzIHRocm93IHRyeSB0eXBlb2YgdWludCB1bG9uZyB1bmNoZWNrZWQiICsgCiAgICAgICAgICAgICAgICAgICAgIiB1bnNhZmUgdXNob3J0IHVzaW5nIHZpcnR1YWwgdm9pZCB2b2xhdGlsZSB3aGlsZSBhZGQgYWxpYXMgYXNjZW5kaW5nIGRlc2NlbmRpbmcgZHluYW1pYyBmcm9tIGdldCIgKyAKICAgICAgICAgICAgICAgICAgICAiIGdsb2JhbCBncm91cCBpbnRvIGpvaW4gbGV0IG9yZGVyYnkgcGFydGlhbCByZW1vdmUgc2VsZWN0IHNldCB2YWx1ZSB2YXIgeWllbGQiKSwKICAgIGJsb2NrS2V5d29yZHM6IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGZvcmVhY2ggaWYgc3RydWN0IHN3aXRjaCB0cnkgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgnIicpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQXRTdHJpbmc7CiAgICAgICAgICByZXR1cm4gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICAgcmV0dXJuICJtZXRhIjsKICAgICAgfQogICAgfQogIH0pOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWdyb292eSIsIHsKICAgIG5hbWU6ICJjbGlrZSIsCiAgICBrZXl3b3Jkczogd29yZHMoImFic3RyYWN0IGFzIGFzc2VydCBib29sZWFuIGJyZWFrIGJ5dGUgY2FzZSBjYXRjaCBjaGFyIGNsYXNzIGNvbnN0IGNvbnRpbnVlIGRlZiBkZWZhdWx0ICIgKwogICAgICAgICAgICAgICAgICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCAiICsKICAgICAgICAgICAgICAgICAgICAiaW4gaW5zdGFuY2VvZiBpbnQgaW50ZXJmYWNlIGxvbmcgbmF0aXZlIG5ldyBwYWNrYWdlIHByb3BlcnR5IHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyAiICsKICAgICAgICAgICAgICAgICAgICAicmV0dXJuIHNob3J0IHN0YXRpYyBzdHJpY3RmcCBzdXBlciBzd2l0Y2ggc3luY2hyb25pemVkIHRoaXMgdGhyb3cgdGhyb3dzIHRyYW5zaWVudCAiICsKICAgICAgICAgICAgICAgICAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogewogICAgICAiQCI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9CiAgICB9CiAgfSk7Cn0oKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEMtbGlrZSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY2xpa2UuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDJweCBpbnNldCAjZGVlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBDLWxpa2UgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovKiBDIGRlbW8gY29kZSAqLwoKI2luY2x1ZGUgPHptcS5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5jbHVkZSA8c2VtYXBob3JlLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgoKdHlwZWRlZiBzdHJ1Y3QgewogIHZvaWQqIGFyZ19zb2NrZXQ7CiAgem1xX21zZ190KiBhcmdfbXNnOwogIGNoYXIqIGFyZ19zdHJpbmc7CiAgdW5zaWduZWQgbG9uZyBhcmdfbGVuOwogIGludCBhcmdfaW50LCBhcmdfY29tbWFuZDsKCiAgaW50IHNpZ25hbF9mZDsKICBpbnQgcGFkOwogIHZvaWQqIGNvbnRleHQ7CiAgc2VtX3Qgc2VtOwp9IGFjbF96bXFfY29udGV4dDsKCiNkZWZpbmUgcChYKSAoY29udGV4dC0+YXJnXyMjWCkKCnZvaWQqIHptcV90aHJlYWQodm9pZCogY29udGV4dF9wb2ludGVyKSB7CiAgYWNsX3ptcV9jb250ZXh0KiBjb250ZXh0ID0gKGFjbF96bXFfY29udGV4dCopY29udGV4dF9wb2ludGVyOwogIGNoYXIgb2sgPSAnSycsIGVyciA9ICdYJzsKICBpbnQgcmVzOwoKICB3aGlsZSAoMSkgewogICAgd2hpbGUgKChyZXMgPSBzZW1fd2FpdCgmYW1wO2NvbnRleHQtPnNlbSkpID09IEVJTlRSKTsKICAgIGlmIChyZXMpIHt3cml0ZShjb250ZXh0LT5zaWduYWxfZmQsICZhbXA7ZXJyLCAxKTsgZ290byBjbGVhbnVwO30KICAgIHN3aXRjaChwKGNvbW1hbmQpKSB7CiAgICBjYXNlIDA6IGdvdG8gY2xlYW51cDsKICAgIGNhc2UgMTogcChzb2NrZXQpID0gem1xX3NvY2tldChjb250ZXh0LT5jb250ZXh0LCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgMjogcChpbnQpID0gem1xX2Nsb3NlKHAoc29ja2V0KSk7IGJyZWFrOwogICAgY2FzZSAzOiBwKGludCkgPSB6bXFfYmluZChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA0OiBwKGludCkgPSB6bXFfY29ubmVjdChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA1OiBwKGludCkgPSB6bXFfZ2V0c29ja29wdChwKHNvY2tldCksIHAoaW50KSwgKHZvaWQqKXAoc3RyaW5nKSwgJmFtcDtwKGxlbikpOyBicmVhazsKICAgIGNhc2UgNjogcChpbnQpID0gem1xX3NldHNvY2tvcHQocChzb2NrZXQpLCBwKGludCksICh2b2lkKilwKHN0cmluZyksIHAobGVuKSk7IGJyZWFrOwogICAgY2FzZSA3OiBwKGludCkgPSB6bXFfc2VuZChwKHNvY2tldCksIHAobXNnKSwgcChpbnQpKTsgYnJlYWs7CiAgICBjYXNlIDg6IHAoaW50KSA9IHptcV9yZWN2KHAoc29ja2V0KSwgcChtc2cpLCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgOTogcChpbnQpID0gem1xX3BvbGwocChzb2NrZXQpLCBwKGludCksIHAobGVuKSk7IGJyZWFrOwogICAgfQogICAgcChjb21tYW5kKSA9IGVycm5vOwogICAgd3JpdGUoY29udGV4dC0+c2lnbmFsX2ZkLCAmYW1wO29rLCAxKTsKICB9CiBjbGVhbnVwOgogIGNsb3NlKGNvbnRleHQtPnNpZ25hbF9mZCk7CiAgZnJlZShjb250ZXh0X3BvaW50ZXIpOwogIHJldHVybiAwOwp9Cgp2b2lkKiB6bXFfdGhyZWFkX2luaXQodm9pZCogem1xX2NvbnRleHQsIGludCBzaWduYWxfZmQpIHsKICBhY2xfem1xX2NvbnRleHQqIGNvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKGFjbF96bXFfY29udGV4dCkpOwogIHB0aHJlYWRfdCB0aHJlYWQ7CgogIGNvbnRleHQtPmNvbnRleHQgPSB6bXFfY29udGV4dDsKICBjb250ZXh0LT5zaWduYWxfZmQgPSBzaWduYWxfZmQ7CiAgc2VtX2luaXQoJmFtcDtjb250ZXh0LT5zZW0sIDEsIDApOwogIHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCAwLCAmYW1wO3ptcV90aHJlYWQsIGNvbnRleHQpOwogIHB0aHJlYWRfZGV0YWNoKHRocmVhZCk7CiAgcmV0dXJuIGNvbnRleHQ7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtY3NyYyIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgbW9kZSB0aGF0IHRyaWVzIHRvIGhhbmRsZSBDLWxpa2UgbGFuZ3VhZ2VzIGFzIHdlbGwgYXMgaXQKICAgIGNhbi4gVGFrZXMgdHdvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczogPGNvZGU+a2V5d29yZHM8L2NvZGU+LCBhbgogICAgb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIGFyZSB0aGUga2V5d29yZHMgaW4gdGhlIGxhbmd1YWdlLAogICAgYW5kIDxjb2RlPnVzZUNQUDwvY29kZT4sIHdoaWNoIGRldGVybWluZXMgd2hldGhlciBDIHByZXByb2Nlc3NvcgogICAgZGlyZWN0aXZlcyBhcmUgcmVjb2duaXplZC48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1jc3JjPC9jb2RlPgogICAgKEMgY29kZSksIDxjb2RlPnRleHQveC1jKytzcmM8L2NvZGU+IChDKysKICAgIGNvZGUpLCA8Y29kZT50ZXh0L3gtamF2YTwvY29kZT4gKEphdmEKICAgIGNvZGUpLCA8Y29kZT50ZXh0L3gtZ3Jvb3Z5PC9jb2RlPiAoR3Jvb3Z5IGNvZGUpLjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/clojure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEF1dGhvcjogSGFucyBFbmdlbAogKiBCcmFuY2hlZCBmcm9tIENvZGVNaXJyb3IncyBTY2hlbWUgbW9kZSAoYnkgS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW4pCiAqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAoY29uZmlnLCBtb2RlKSB7CiAgICB2YXIgQlVJTFRJTiA9ICJidWlsdGluIiwgQ09NTUVOVCA9ICJjb21tZW50IiwgU1RSSU5HID0gInN0cmluZyIsIFRBRyA9ICJ0YWciLAogICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlXT1JEPSJrZXl3b3JkIjsKICAgIHZhciBJTkRFTlRfV09SRF9TS0lQID0gMiwgS0VZV09SRFNfU0tJUCA9IDE7CgogICAgZnVuY3Rpb24gbWFrZUtleXdvcmRzKHN0cikgewogICAgICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSBvYmpbd29yZHNbaV1dID0gdHJ1ZTsKICAgICAgICByZXR1cm4gb2JqOwogICAgfQoKICAgIHZhciBhdG9tcyA9IG1ha2VLZXl3b3JkcygidHJ1ZSBmYWxzZSBuaWwiKTsKCiAgICB2YXIga2V5d29yZHMgPSBtYWtlS2V5d29yZHMoCiAgICAgICAgLy8gQ29udHJvbCBzdHJ1Y3R1cmVzCiAgICAgICAgImRlZm4gZGVmbi0gZGVmIGRlZi0gZGVmb25jZSBkZWZtdWx0aSBkZWZtZXRob2QgZGVmbWFjcm8gZGVmc3RydWN0IGRlZnR5cGUgZGVmcHJvdG9jb2wgZGVmcmVjb3JkIGRlZnRlc3Qgc2xpY2UgZGVmYWxpYXMgZGVmaGludGVkIGRlZm1hY3JvLSBkZWZuLW1lbW8gZGVmbmsgZGVmbmsgZGVmb25jZS0gZGVmdW5ib3VuZCBkZWZ1bmJvdW5kLSBkZWZ2YXIgZGVmdmFyLSBsZXQgbGV0Zm4gZG8gY2FzZSBjb25kIGNvbmRwIGZvciBsb29wIHJlY3VyIHdoZW4gd2hlbi1ub3Qgd2hlbi1sZXQgd2hlbi1maXJzdCBpZiBpZi1sZXQgaWYtbm90IC4gLi4gLT4gLT4+IGRvdG8gYW5kIG9yIGRvc3luYyBkb3NlcSBkb3RpbWVzIGRvcnVuIGRvYWxsIGxvYWQgaW1wb3J0IHVuaW1wb3J0IG5zIGluLW5zIHJlZmVyIHRyeSBjYXRjaCBmaW5hbGx5IHRocm93IHdpdGgtb3BlbiB3aXRoLWxvY2FsLXZhcnMgYmluZGluZyBnZW4tY2xhc3MgZ2VuLWFuZC1sb2FkLWNsYXNzIGdlbi1hbmQtc2F2ZS1jbGFzcyBoYW5kbGVyLWNhc2UgaGFuZGxlIiArCgogICAgICAgIC8vIEJ1aWx0LWlucwogICAgICAgICIqICoxICoyICozICphZ2VudCogKmFsbG93LXVucmVzb2x2ZWQtdmFycyogKmFzc2VydCAqY2xvanVyZS12ZXJzaW9uKiAqY29tbWFuZC1saW5lLWFyZ3MqICpjb21waWxlLWZpbGVzKiAqY29tcGlsZS1wYXRoKiAqZSAqZXJyKiAqZmlsZSogKmZsdXNoLW9uLW5ld2xpbmUqICppbiogKm1hY3JvLW1ldGEqICptYXRoLWNvbnRleHQqICpucyogKm91dCogKnByaW50LWR1cCogKnByaW50LWxlbmd0aCogKnByaW50LWxldmVsKiAqcHJpbnQtbWV0YSogKnByaW50LXJlYWRhYmx5KiAqcmVhZC1ldmFsKiAqc291cmNlLXBhdGgqICp1c2UtY29udGV4dC1jbGFzc2xvYWRlciogKndhcm4tb24tcmVmbGVjdGlvbiogKyAtIC8gPCA8PSA9ID09ID4gPj0gYWNjZXNzb3IgYWNsb25lIGFnZW50IGFnZW50LWVycm9ycyBhZ2V0IGFsZW5ndGggYWxpYXMgYWxsLW5zIGFsdGVyIGFsdGVyLW1ldGEhIGFsdGVyLXZhci1yb290IGFtYXAgYW5jZXN0b3JzIGFuZCBhcHBseSBhcmVkdWNlIGFycmF5LW1hcCBhc2V0IGFzZXQtYm9vbGVhbiBhc2V0LWJ5dGUgYXNldC1jaGFyIGFzZXQtZG91YmxlIGFzZXQtZmxvYXQgYXNldC1pbnQgYXNldC1sb25nIGFzZXQtc2hvcnQgYXNzZXJ0IGFzc29jIGFzc29jISBhc3NvYy1pbiBhc3NvY2lhdGl2ZT8gYXRvbSBhd2FpdCBhd2FpdC1mb3IgYXdhaXQxIGJhc2VzIGJlYW4gYmlnZGVjIGJpZ2ludCBiaW5kaW5nIGJpdC1hbmQgYml0LWFuZC1ub3QgYml0LWNsZWFyIGJpdC1mbGlwIGJpdC1ub3QgYml0LW9yIGJpdC1zZXQgYml0LXNoaWZ0LWxlZnQgYml0LXNoaWZ0LXJpZ2h0IGJpdC10ZXN0IGJpdC14b3IgYm9vbGVhbiBib29sZWFuLWFycmF5IGJvb2xlYW5zIGJvdW5kLWZuIGJvdW5kLWZuKiBidXRsYXN0IGJ5dGUgYnl0ZS1hcnJheSBieXRlcyBjYXNlIGNhc3QgY2hhciBjaGFyLWFycmF5IGNoYXItZXNjYXBlLXN0cmluZyBjaGFyLW5hbWUtc3RyaW5nIGNoYXI/IGNoYXJzIGNodW5rIGNodW5rLWFwcGVuZCBjaHVuay1idWZmZXIgY2h1bmstY29ucyBjaHVuay1maXJzdCBjaHVuay1uZXh0IGNodW5rLXJlc3QgY2h1bmtlZC1zZXE/IGNsYXNzIGNsYXNzPyBjbGVhci1hZ2VudC1lcnJvcnMgY2xvanVyZS12ZXJzaW9uIGNvbGw/IGNvbW1lbnQgY29tbXV0ZSBjb21wIGNvbXBhcmF0b3IgY29tcGFyZSBjb21wYXJlLWFuZC1zZXQhIGNvbXBpbGUgY29tcGxlbWVudCBjb25jYXQgY29uZCBjb25kcCBjb25qIGNvbmohIGNvbnMgY29uc3RhbnRseSBjb25zdHJ1Y3QtcHJveHkgY29udGFpbnM/IGNvdW50IGNvdW50ZWQ/IGNyZWF0ZS1ucyBjcmVhdGUtc3RydWN0IGN5Y2xlIGRlYyBkZWNpbWFsPyBkZWNsYXJlIGRlZmlubGluZSBkZWZtYWNybyBkZWZtZXRob2QgZGVmbXVsdGkgZGVmbiBkZWZuLSBkZWZvbmNlIGRlZnN0cnVjdCBkZWxheSBkZWxheT8gZGVsaXZlciBkZXJlZiBkZXJpdmUgZGVzY2VuZGFudHMgZGVzdHJ1Y3R1cmUgZGlzaiBkaXNqISBkaXNzb2MgZGlzc29jISBkaXN0aW5jdCBkaXN0aW5jdD8gZG9hbGwgZG9jIGRvcnVuIGRvc2VxIGRvc3luYyBkb3RpbWVzIGRvdG8gZG91YmxlIGRvdWJsZS1hcnJheSBkb3VibGVzIGRyb3AgZHJvcC1sYXN0IGRyb3Atd2hpbGUgZW1wdHkgZW1wdHk/IGVuc3VyZSBlbnVtZXJhdGlvbi1zZXEgZXZhbCBldmVuPyBldmVyeT8gZXh0ZW5kIGV4dGVuZC1wcm90b2NvbCBleHRlbmQtdHlwZSBleHRlbmRzPyBleHRlbmRlcnMgZmFsc2U/IGZmaXJzdCBmaWxlLXNlcSBmaWx0ZXIgZmluZCBmaW5kLWRvYyBmaW5kLW5zIGZpbmQtdmFyIGZpcnN0IGZsb2F0IGZsb2F0LWFycmF5IGZsb2F0PyBmbG9hdHMgZmx1c2ggZm4gZm4/IGZuZXh0IGZvciBmb3JjZSBmb3JtYXQgZnV0dXJlIGZ1dHVyZS1jYWxsIGZ1dHVyZS1jYW5jZWwgZnV0dXJlLWNhbmNlbGxlZD8gZnV0dXJlLWRvbmU/IGZ1dHVyZT8gZ2VuLWNsYXNzIGdlbi1pbnRlcmZhY2UgZ2Vuc3ltIGdldCBnZXQtaW4gZ2V0LW1ldGhvZCBnZXQtcHJveHktY2xhc3MgZ2V0LXRocmVhZC1iaW5kaW5ncyBnZXQtdmFsaWRhdG9yIGhhc2ggaGFzaC1tYXAgaGFzaC1zZXQgaWRlbnRpY2FsPyBpZGVudGl0eSBpZi1sZXQgaWYtbm90IGlmbj8gaW1wb3J0IGluLW5zIGluYyBpbml0LXByb3h5IGluc3RhbmNlPyBpbnQgaW50LWFycmF5IGludGVnZXI/IGludGVybGVhdmUgaW50ZXJuIGludGVycG9zZSBpbnRvIGludG8tYXJyYXkgaW50cyBpbyEgaXNhPyBpdGVyYXRlIGl0ZXJhdG9yLXNlcSBqdXh0IGtleSBrZXlzIGtleXdvcmQga2V5d29yZD8gbGFzdCBsYXp5LWNhdCBsYXp5LXNlcSBsZXQgbGV0Zm4gbGluZS1zZXEgbGlzdCBsaXN0KiBsaXN0PyBsb2FkIGxvYWQtZmlsZSBsb2FkLXJlYWRlciBsb2FkLXN0cmluZyBsb2FkZWQtbGlicyBsb2NraW5nIGxvbmcgbG9uZy1hcnJheSBsb25ncyBsb29wIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgbWFrZS1hcnJheSBtYWtlLWhpZXJhcmNoeSBtYXAgbWFwPyBtYXBjYXQgbWF4IG1heC1rZXkgbWVtZm4gbWVtb2l6ZSBtZXJnZSBtZXJnZS13aXRoIG1ldGEgbWV0aG9kLXNpZyBtZXRob2RzIG1pbiBtaW4ta2V5IG1vZCBuYW1lIG5hbWVzcGFjZSBuZWc/IG5ld2xpbmUgbmV4dCBuZmlyc3QgbmlsPyBubmV4dCBub3Qgbm90LWFueT8gbm90LWVtcHR5IG5vdC1ldmVyeT8gbm90PSBucyBucy1hbGlhc2VzIG5zLWltcG9ydHMgbnMtaW50ZXJucyBucy1tYXAgbnMtbmFtZSBucy1wdWJsaWNzIG5zLXJlZmVycyBucy1yZXNvbHZlIG5zLXVuYWxpYXMgbnMtdW5tYXAgbnRoIG50aG5leHQgbnVtIG51bWJlcj8gb2RkPyBvciBwYXJlbnRzIHBhcnRpYWwgcGFydGl0aW9uIHBjYWxscyBwZWVrIHBlcnNpc3RlbnQhIHBtYXAgcG9wIHBvcCEgcG9wLXRocmVhZC1iaW5kaW5ncyBwb3M/IHByIHByLXN0ciBwcmVmZXItbWV0aG9kIHByZWZlcnMgcHJpbWl0aXZlcy1jbGFzc25hbWVzIHByaW50IHByaW50LWN0b3IgcHJpbnQtZG9jIHByaW50LWR1cCBwcmludC1tZXRob2QgcHJpbnQtbmFtZXNwYWNlLWRvYyBwcmludC1zaW1wbGUgcHJpbnQtc3BlY2lhbC1kb2MgcHJpbnQtc3RyIHByaW50ZiBwcmludGxuIHByaW50bG4tc3RyIHBybiBwcm4tc3RyIHByb21pc2UgcHJveHkgcHJveHktY2FsbC13aXRoLXN1cGVyIHByb3h5LW1hcHBpbmdzIHByb3h5LW5hbWUgcHJveHktc3VwZXIgcHVzaC10aHJlYWQtYmluZGluZ3MgcHZhbHVlcyBxdW90IHJhbmQgcmFuZC1pbnQgcmFuZ2UgcmF0aW8/IHJhdGlvbmFsPyByYXRpb25hbGl6ZSByZS1maW5kIHJlLWdyb3VwcyByZS1tYXRjaGVyIHJlLW1hdGNoZXMgcmUtcGF0dGVybiByZS1zZXEgcmVhZCByZWFkLWxpbmUgcmVhZC1zdHJpbmcgcmVpZnkgcmVkdWNlIHJlZiByZWYtaGlzdG9yeS1jb3VudCByZWYtbWF4LWhpc3RvcnkgcmVmLW1pbi1oaXN0b3J5IHJlZi1zZXQgcmVmZXIgcmVmZXItY2xvanVyZSByZWxlYXNlLXBlbmRpbmctc2VuZHMgcmVtIHJlbW92ZSByZW1vdmUtbWV0aG9kIHJlbW92ZS1ucyByZXBlYXQgcmVwZWF0ZWRseSByZXBsYWNlIHJlcGxpY2F0ZSByZXF1aXJlIHJlc2V0ISByZXNldC1tZXRhISByZXNvbHZlIHJlc3QgcmVzdWx0c2V0LXNlcSByZXZlcnNlIHJldmVyc2libGU/IHJzZXEgcnN1YnNlcSBzYXRpc2ZpZXM/IHNlY29uZCBzZWxlY3Qta2V5cyBzZW5kIHNlbmQtb2ZmIHNlcSBzZXE/IHNlcXVlIHNlcXVlbmNlIHNlcXVlbnRpYWw/IHNldCBzZXQtdmFsaWRhdG9yISBzZXQ/IHNob3J0IHNob3J0LWFycmF5IHNob3J0cyBzaHV0ZG93bi1hZ2VudHMgc2x1cnAgc29tZSBzb3J0IHNvcnQtYnkgc29ydGVkLW1hcCBzb3J0ZWQtbWFwLWJ5IHNvcnRlZC1zZXQgc29ydGVkLXNldC1ieSBzb3J0ZWQ/IHNwZWNpYWwtZm9ybS1hbmNob3Igc3BlY2lhbC1zeW1ib2w/IHNwbGl0LWF0IHNwbGl0LXdpdGggc3RyIHN0cmVhbT8gc3RyaW5nPyBzdHJ1Y3Qgc3RydWN0LW1hcCBzdWJzIHN1YnNlcSBzdWJ2ZWMgc3VwZXJzIHN3YXAhIHN5bWJvbCBzeW1ib2w/IHN5bmMgc3ludGF4LXN5bWJvbC1hbmNob3IgdGFrZSB0YWtlLWxhc3QgdGFrZS1udGggdGFrZS13aGlsZSB0ZXN0IHRoZS1ucyB0aW1lIHRvLWFycmF5IHRvLWFycmF5LTJkIHRyYW1wb2xpbmUgdHJhbnNpZW50IHRyZWUtc2VxIHRydWU/IHR5cGUgdW5jaGVja2VkLWFkZCB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1kaXZpZGUgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtbXVsdGlwbHkgdW5jaGVja2VkLW5lZ2F0ZSB1bmNoZWNrZWQtcmVtYWluZGVyIHVuY2hlY2tlZC1zdWJ0cmFjdCB1bmRlcml2ZSB1bnF1b3RlIHVucXVvdGUtc3BsaWNpbmcgdXBkYXRlLWluIHVwZGF0ZS1wcm94eSB1c2UgdmFsIHZhbHMgdmFyLWdldCB2YXItc2V0IHZhcj8gdmFyeS1tZXRhIHZlYyB2ZWN0b3IgdmVjdG9yPyB3aGVuIHdoZW4tZmlyc3Qgd2hlbi1sZXQgd2hlbi1ub3Qgd2hpbGUgd2l0aC1iaW5kaW5ncyB3aXRoLWJpbmRpbmdzKiB3aXRoLWluLXN0ciB3aXRoLWxvYWRpbmctY29udGV4dCB3aXRoLWxvY2FsLXZhcnMgd2l0aC1tZXRhIHdpdGgtb3BlbiB3aXRoLW91dC1zdHIgd2l0aC1wcmVjaXNpb24geG1sLXNlcSIpOwoKICAgIHZhciBpbmRlbnRLZXlzID0gbWFrZUtleXdvcmRzKAogICAgICAgIC8vIEJ1aWx0LWlucwogICAgICAgICJucyBmbiBkZWYgZGVmbiBkZWZtZXRob2QgYm91bmQtZm4gaWYgaWYtbm90IGNhc2UgY29uZHAgd2hlbiB3aGlsZSB3aGVuLW5vdCB3aGVuLWZpcnN0IGRvIGZ1dHVyZSBjb21tZW50IGRvdG8gbG9ja2luZyBwcm94eSB3aXRoLW9wZW4gd2l0aC1wcmVjaXNpb24gcmVpZnkgZGVmdHlwZSBkZWZyZWNvcmQgZGVmcHJvdG9jb2wgZXh0ZW5kIGV4dGVuZC1wcm90b2NvbCBleHRlbmQtdHlwZSB0cnkgY2F0Y2giICsKCiAgICAgICAgLy8gQmluZGluZyBmb3JtcwogICAgICAgICJsZXQgbGV0Zm4gYmluZGluZyBsb29wIGZvciBkb3NlcSBkb3RpbWVzIHdoZW4tbGV0IGlmLWxldCIgKwoKICAgICAgICAvLyBEYXRhIHN0cnVjdHVyZXMKICAgICAgICAiZGVmc3RydWN0IHN0cnVjdC1tYXAgYXNzb2MiICsKCiAgICAgICAgLy8gY2xvanVyZS50ZXN0CiAgICAgICAgInRlc3RpbmcgZGVmdGVzdCIgKwoKICAgICAgICAvLyBjb250cmliCiAgICAgICAgImhhbmRsZXItY2FzZSBoYW5kbGUgZG90cmFjZSBkZWZ0cmFjZSIpOwoKICAgIHZhciB0ZXN0cyA9IHsKICAgICAgICBkaWdpdDogL1xkLywKICAgICAgICBkaWdpdF9vcl9jb2xvbjogL1tcZDpdLywKICAgICAgICBoZXg6IC9bMC05YS1mQS1GXS8sCiAgICAgICAgc2lnbjogL1srLV0vLAogICAgICAgIGV4cG9uZW50OiAvW2VFXS8sCiAgICAgICAga2V5d29yZF9jaGFyOiAvW15cc1woXFtcO1wpXF1dLywKICAgICAgICBiYXNpYzogL1tcd1wkX1wtXS8sCiAgICAgICAgbGFuZ19rZXl3b3JkOiAvW1x3KishXC1fPzpcL10vCiAgICB9OwoKICAgIGZ1bmN0aW9uIHN0YXRlU3RhY2soaW5kZW50LCB0eXBlLCBwcmV2KSB7IC8vIHJlcHJlc2VudHMgYSBzdGF0ZSBzdGFjayBvYmplY3QKICAgICAgICB0aGlzLmluZGVudCA9IGluZGVudDsKICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIHRoaXMucHJldiA9IHByZXY7CiAgICB9CgogICAgZnVuY3Rpb24gcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnQsIHR5cGUpIHsKICAgICAgICBzdGF0ZS5pbmRlbnRTdGFjayA9IG5ldyBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgc3RhdGUuaW5kZW50U3RhY2spOwogICAgfQoKICAgIGZ1bmN0aW9uIHBvcFN0YWNrKHN0YXRlKSB7CiAgICAgICAgc3RhdGUuaW5kZW50U3RhY2sgPSBzdGF0ZS5pbmRlbnRTdGFjay5wcmV2OwogICAgfQoKICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGNoLCBzdHJlYW0pewogICAgICAgIC8vIGhleAogICAgICAgIGlmICggY2ggPT09ICcwJyAmJiAneCcgPT0gc3RyZWFtLnBlZWsoKS50b0xvd2VyQ2FzZSgpICkgewogICAgICAgICAgICBzdHJlYW0uZWF0KCd4Jyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSh0ZXN0cy5oZXgpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIGxlYWRpbmcgc2lnbgogICAgICAgIGlmICggY2ggPT0gJysnIHx8IGNoID09ICctJyApIHsKICAgICAgICAgIHN0cmVhbS5lYXQodGVzdHMuc2lnbik7CiAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIHRlc3RzLmRpZ2l0LnRlc3QoY2gpICkgewogICAgICAgICAgICBzdHJlYW0uZWF0KGNoKTsKICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHRlc3RzLmRpZ2l0KTsKCiAgICAgICAgICAgIGlmICggJy4nID09IHN0cmVhbS5wZWVrKCkgKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KCcuJyk7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuZGlnaXQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICdlJyA9PSBzdHJlYW0ucGVlaygpLnRvTG93ZXJDYXNlKCkgKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KHRlc3RzLmV4cG9uZW50KTsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQodGVzdHMuc2lnbik7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuZGlnaXQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGluZGVudFN0YWNrOiBudWxsLAogICAgICAgICAgICAgICAgaW5kZW50YXRpb246IDAsCiAgICAgICAgICAgICAgICBtb2RlOiBmYWxzZSwKICAgICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwgJiYgc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaW5kZW50YXRpb24sIGJ1dCBvbmx5IGlmIGluZGVudFN0YWNrIGlzIGVtcHR5CiAgICAgICAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBza2lwIHNwYWNlcwogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByZXR1cm5UeXBlID0gbnVsbDsKCiAgICAgICAgICAgIHN3aXRjaChzdGF0ZS5tb2RlKXsKICAgICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6IC8vIG11bHRpLWxpbmUgc3RyaW5nIHBhcnNpbmcgbW9kZQogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0LCBlc2NhcGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSAiXCIiICYmICFlc2NhcGVkKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFNUUklORzsgLy8gY29udGludWUgb24gaW4gc3RyaW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGRlZmF1bHQgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICJcIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9ICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gU1RSSU5HOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIiciICYmICEoIHRlc3RzLmRpZ2l0X29yX2NvbG9uLnRlc3Qoc3RyZWFtLnBlZWsoKSkgKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICI7IikgeyAvLyBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsgLy8gcmVzdCBvZiB0aGUgbGluZSBpcyBhIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihjaCxzdHJlYW0pKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IE5VTUJFUjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICIoIiB8fCBjaCA9PSAiWyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleVdvcmQgPSAnJzsgdmFyIGluZGVudFRlbXAgPSBzdHJlYW0uY29sdW1uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgKGluZGVudC13b3JkIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIChub24taW5kZW50LXdvcmQgLi4KICAgICAgICAgICAgICAgICAgICAgICAgKDtzb21ldGhpbmcgZWxzZSwgYnJhY2tldCwgZXRjLgogICAgICAgICAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChsZXR0ZXIgPSBzdHJlYW0uZWF0KHRlc3RzLmtleXdvcmRfY2hhcikpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVdvcmQgKz0gbGV0dGVyOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5V29yZC5sZW5ndGggPiAwICYmIGluZGVudEtleXMucHJvcGVydHlJc0VudW1lcmFibGUoa2V5V29yZCkpIHsgLy8gaW5kZW50LXdvcmQKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoU3RhY2soc3RhdGUsIGluZGVudFRlbXAgKyBJTkRFTlRfV09SRF9TS0lQLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIG5vbi1pbmRlbnQgd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgY29udGludWUgZWF0aW5nIHRoZSBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSB8fCBzdHJlYW0ucGVlaygpID09ICI7IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgc2lnbmlmaWNhbnQgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXN0YXJ0IGluZGVudGF0aW9uIDEgc3BhY2UgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoU3RhY2soc3RhdGUsIGluZGVudFRlbXAgKyAxLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoLCBjaCk7IC8vIGVsc2Ugd2UgbWF0Y2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoIC0gMSk7IC8vIHVuZG8gYWxsIHRoZSBlYXRpbmcKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBCUkFDS0VUOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIikiIHx8IGNoID09ICJdIikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlJBQ0tFVDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrICE9IG51bGwgJiYgc3RhdGUuaW5kZW50U3RhY2sudHlwZSA9PSAoY2ggPT0gIikiID8gIigiIDogIlsiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wU3RhY2soc3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggY2ggPT0gIjoiICkgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMubGFuZ19rZXl3b3JkKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRBRzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuYmFzaWMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlVJTFRJTjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggYXRvbXMgJiYgYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJldHVyblR5cGUgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJldHVyblR5cGU7CiAgICAgICAgfSwKCiAgICAgICAgaW5kZW50OiBmdW5jdGlvbiAoc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZiAoc3RhdGUuaW5kZW50U3RhY2sgPT0gbnVsbCkgcmV0dXJuIHN0YXRlLmluZGVudGF0aW9uOwogICAgICAgICAgICByZXR1cm4gc3RhdGUuaW5kZW50U3RhY2suaW5kZW50OwogICAgICAgIH0KICAgIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtY2xvanVyZSIsICJjbG9qdXJlIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENsb2p1cmUgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImNsb2p1cmUuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4O308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBDbG9qdXJlIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KOyBDb253YXkncyBHYW1lIG9mIExpZmUsIGJhc2VkIG9uIHRoZSB3b3JrIG9mOgo7OyBMYXVyZW50IFBldGl0IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEyMDAzNDMKOzsgQ2hyaXN0b3BoZSBHcmFuZCBodHRwOi8vY2xqLW1lLmNncmFuZC5uZXQvMjAxMS8wOC8xOS9jb253YXlzLWdhbWUtb2YtbGlmZQoKKG5zIF57OmRvYyAiQ29ud2F5J3MgR2FtZSBvZiBMaWZlLiJ9CiBnYW1lLW9mLWxpZmUpCgo7OyBDb3JlIGdhbWUgb2YgbGlmZSdzIGFsZ29yaXRobSBmdW5jdGlvbnMKCihkZWZuIG5laWdoYm91cnMgCiAgIkdpdmVuIGEgY2VsbCdzIGNvb3JkaW5hdGVzLCByZXR1cm5zIHRoZSBjb29yZGluYXRlcyBvZiBpdHMgbmVpZ2hib3Vycy4iCiAgW1t4IHldXQogIChmb3IgW2R4IFstMSAwIDFdIGR5IChpZiAoemVybz8gZHgpIFstMSAxXSBbLTEgMCAxXSldCiAgICBbKCsgZHggeCkgKCsgZHkgeSldKSkKCihkZWZuIHN0ZXAgCiAgIkdpdmVuIGEgc2V0IG9mIGxpdmluZyBjZWxscywgY29tcHV0ZXMgdGhlIG5ldyBzZXQgb2YgbGl2aW5nIGNlbGxzLiIKICBbY2VsbHNdCiAgKHNldCAoZm9yIFtbY2VsbCBuXSAoZnJlcXVlbmNpZXMgKG1hcGNhdCBuZWlnaGJvdXJzIGNlbGxzKSkKICAgICAgICAgICAgIDp3aGVuIChvciAoPSBuIDMpIChhbmQgKD0gbiAyKSAoY2VsbHMgY2VsbCkpKV0KICAgICAgICAgY2VsbCkpKQoKOzsgVXRpbGl0eSBtZXRob2RzIGZvciBkaXNwbGF5aW5nIGdhbWUgb24gYSB0ZXh0IHRlcm1pbmFsCgooZGVmbiBwcmludC1ib2FyZCAKICAiUHJpbnRzIGEgYm9hcmQgb24gKm91dCosIHJlcHJlc2VudGluZyBhIHN0ZXAgaW4gdGhlIGdhbWUuIgogIFtib2FyZCB3IGhdCiAgKGRvc2VxIFt4IChyYW5nZSAoaW5jIHcpKSB5IChyYW5nZSAoaW5jIGgpKV0KICAgIChpZiAoPSB5IDApIChwcmludCAiXG4iKSkgCiAgICAocHJpbnQgKGlmIChib2FyZCBbeCB5XSkgIltYXSIgIiAuICIpKSkpCgooZGVmbiBkaXNwbGF5LWdyaWRzIAogICJQcmludHMgYSBzcXVlbmNlIG9mIGJvYXJkcyBvbiAqb3V0KiwgcmVwcmVzZW50aW5nIHNldmVyYWwgc3RlcHMuIgogIFtncmlkcyB3IGhdCiAgKGRvc2VxIFtib2FyZCBncmlkc10KICAgIChwcmludC1ib2FyZCBib2FyZCB3IGgpCiAgICAocHJpbnQgIlxuIikpKQoKOzsgTGF1bmNoZXMgYW4gZXhhbXBsZSBib2FyZAoKKGRlZiAKICBeezpkb2MgImJvYXJkIHJlcHJlc2VudHMgdGhlIGluaXRpYWwgc2V0IG9mIGxpdmluZyBjZWxscyJ9CiAgIGJvYXJkICN7WzIgMV0gWzIgMl0gWzIgM119KQoKKGRpc3BsYXktZ3JpZHMgKHRha2UgMyAoaXRlcmF0ZSBzdGVwIGJvYXJkKSkgNSA1KSA8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LWNsb2p1cmU8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/coffeescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIExpbmsgdG8gdGhlIHByb2plY3QncyBHaXRIdWIgcGFnZToKICogaHR0cHM6Ly9naXRodWIuY29tL3BpY2toYXJkdC9jb2ZmZWVzY3JpcHQtY29kZW1pcnJvci1tb2RlCiAqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoJ2NvZmZlZXNjcmlwdCcsIGZ1bmN0aW9uKGNvbmYpIHsKICAgIHZhciBFUlJPUkNMQVNTID0gJ2Vycm9yJzsKICAgIAogICAgZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3JkcykgewogICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCJeKCgiICsgd29yZHMuam9pbigiKXwoIikgKyAiKSlcXGIiKTsKICAgIH0KICAgIAogICAgdmFyIHNpbmdsZU9wZXJhdG9ycyA9IG5ldyBSZWdFeHAoIl5bXFwrXFwtXFwqLyUmfFxcXn48PiFcP10iKTsKICAgIHZhciBzaW5nbGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cCgnXltcXChcXClcXFtcXF1cXHtcXH1ALDpgPTtcXC5dJyk7CiAgICB2YXIgZG91YmxlT3BlcmF0b3JzID0gbmV3IFJlZ0V4cCgiXigoXC0+KXwoXD0+KXwoXFwrXFwrKXwoXFwrXFw9KXwoXFwtXFwtKXwoXFwtXFw9KXwoXFwqXFwqKXwoXFwqXFw9KXwoXFwvXFwvKXwoXFwvXFw9KXwoPT0pfCghPSl8KDw9KXwoPj0pfCg8Pil8KDw8KXwoPj4pfCgvLykpIik7CiAgICB2YXIgZG91YmxlRGVsaW1pdGVycyA9IG5ldyBSZWdFeHAoIl4oKFxcLlxcLil8KFxcKz0pfChcXC09KXwoXFwqPSl8KCU9KXwoLz0pfCgmPSl8KFxcfD0pfChcXF49KSkiKTsKICAgIHZhciB0cmlwbGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cCgiXigoXFwuXFwuXFwuKXwoLy89KXwoPj49KXwoPDw9KXwoXFwqXFwqPSkpIik7CiAgICB2YXIgaWRlbnRpZmllcnMgPSBuZXcgUmVnRXhwKCJeW19BLVphLXpdW19BLVphLXowLTldKiIpOwoKICAgIHZhciB3b3JkT3BlcmF0b3JzID0gd29yZFJlZ2V4cChbJ2FuZCcsICdvcicsICdub3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMnLCAnaXNudCcsICdpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnN0YW5jZW9mJywgJ3R5cGVvZiddKTsKICAgIHZhciBpbmRlbnRLZXl3b3JkcyA9IFsnZm9yJywgJ3doaWxlJywgJ2xvb3AnLCAnaWYnLCAndW5sZXNzJywgJ2Vsc2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdzd2l0Y2gnLCAndHJ5JywgJ2NhdGNoJywgJ2ZpbmFsbHknLCAnY2xhc3MnXTsKICAgIHZhciBjb21tb25LZXl3b3JkcyA9IFsnYnJlYWsnLCAnYnknLCAnY29udGludWUnLCAnZGVidWdnZXInLCAnZGVsZXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZG8nLCAnaW4nLCAnb2YnLCAnbmV3JywgJ3JldHVybicsICd0aGVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndGhpcycsICd0aHJvdycsICd3aGVuJywgJ3VudGlsJ107CgogICAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChpbmRlbnRLZXl3b3Jkcy5jb25jYXQoY29tbW9uS2V5d29yZHMpKTsKCiAgICBpbmRlbnRLZXl3b3JkcyA9IHdvcmRSZWdleHAoaW5kZW50S2V5d29yZHMpOwoKCiAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKCJeKCd7M318XCJ7M318WydcIl0pIik7CiAgICB2YXIgcmVnZXhQcmVmaXhlcyA9IG5ldyBSZWdFeHAoIl4oL3szfXwvKSIpOwogICAgdmFyIGNvbW1vbkNvbnN0YW50cyA9IFsnSW5maW5pdHknLCAnTmFOJywgJ3VuZGVmaW5lZCcsICdudWxsJywgJ3RydWUnLCAnZmFsc2UnLCAnb24nLCAnb2ZmJywgJ3llcycsICdubyddOwogICAgdmFyIGNvbnN0YW50cyA9IHdvcmRSZWdleHAoY29tbW9uQ29uc3RhbnRzKTsKCiAgICAvLyBUb2tlbml6ZXJzCiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIC8vIEhhbmRsZSBzY29wZSBjaGFuZ2VzCiAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICB2YXIgc2NvcGVPZmZzZXQgPSBzdGF0ZS5zY29wZXNbMF0ub2Zmc2V0OwogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lT2Zmc2V0ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgICAgICBpZiAobGluZU9mZnNldCA+IHNjb3BlT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdpbmRlbnQnOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lT2Zmc2V0IDwgc2NvcGVPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RlZGVudCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChzY29wZU9mZnNldCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBkZWRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpOwogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBjb21tZW50cwogICAgICAgIGlmIChjaCA9PT0gJyMnKSB7CiAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICAgICAgcmV0dXJuICdjb21tZW50JzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIG51bWJlciBsaXRlcmFscwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14tP1swLTlcLl0vLCBmYWxzZSkpIHsKICAgICAgICAgICAgdmFyIGZsb2F0TGl0ZXJhbCA9IGZhbHNlOwogICAgICAgICAgICAvLyBGbG9hdHMKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XGQqXC5cZCsoZVtcK1wtXT9cZCspPy9pKSkgewogICAgICAgICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XGQrXC5cZCovKSkgewogICAgICAgICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XC5cZCsvKSkgewogICAgICAgICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGZsb2F0TGl0ZXJhbCkgewogICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEludGVnZXJzCiAgICAgICAgICAgIHZhciBpbnRMaXRlcmFsID0gZmFsc2U7CiAgICAgICAgICAgIC8vIEhleAogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT8weFswLTlhLWZdKy9pKSkgewogICAgICAgICAgICAgIGludExpdGVyYWwgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIERlY2ltYWwKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/WzEtOV1cZCooZVtcK1wtXT9cZCspPy8pKSB7CiAgICAgICAgICAgICAgICBpbnRMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBaZXJvIGJ5IGl0c2VsZiB3aXRoIG5vIG90aGVyIHBpZWNlIG9mIG51bWJlci4KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/MCg/IVtcZHhdKS9pKSkgewogICAgICAgICAgICAgIGludExpdGVyYWwgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpbnRMaXRlcmFsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ251bWJlcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIHN0cmluZ3MKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHN0cmluZ1ByZWZpeGVzKSkgewogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuRmFjdG9yeShzdHJlYW0uY3VycmVudCgpLCAnc3RyaW5nJyk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgLy8gSGFuZGxlIHJlZ2V4IGxpdGVyYWxzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChyZWdleFByZWZpeGVzKSkgewogICAgICAgICAgICBpZiAoc3RyZWFtLmN1cnJlbnQoKSAhPSAnLycgfHwgc3RyZWFtLm1hdGNoKC9eLipcLy8sIGZhbHNlKSkgeyAvLyBwcmV2ZW50IGhpZ2hsaWdodCBvZiBkaXZpc2lvbgogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSwgJ3N0cmluZy0yJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBvcGVyYXRvcnMgYW5kIGRlbGltaXRlcnMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRyaXBsZURlbGltaXRlcnMpIHx8IHN0cmVhbS5tYXRjaChkb3VibGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3B1bmN0dWF0aW9uJzsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChkb3VibGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaChzaW5nbGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaCh3b3JkT3BlcmF0b3JzKSkgewogICAgICAgICAgICByZXR1cm4gJ29wZXJhdG9yJzsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzaW5nbGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3B1bmN0dWF0aW9uJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChjb25zdGFudHMpKSB7CiAgICAgICAgICAgIHJldHVybiAnYXRvbSc7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSB7CiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goaWRlbnRpZmllcnMpKSB7CiAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgbm9uLWRldGVjdGVkIGl0ZW1zCiAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gdG9rZW5GYWN0b3J5KGRlbGltaXRlciwgb3V0Y2xhc3MpIHsKICAgICAgICB2YXIgZGVsaW1fcmUgPSBuZXcgUmVnRXhwKGRlbGltaXRlcik7CiAgICAgICAgdmFyIHNpbmdsZWxpbmUgPSBkZWxpbWl0ZXIubGVuZ3RoID09IDE7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14nIlwvXFxdLyk7CiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgnXFwnKSkgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZWxpbmUgJiYgc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRjbGFzczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChkZWxpbV9yZSkpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0Y2xhc3M7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL1snIlwvXS8pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzaW5nbGVsaW5lKSB7CiAgICAgICAgICAgICAgICBpZiAoY29uZi5tb2RlLnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMpIHsKICAgICAgICAgICAgICAgICAgICBvdXRjbGFzcyA9IEVSUk9SQ0xBU1MKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIG91dGNsYXNzOwogICAgICAgIH07CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGluZGVudChzdHJlYW0sIHN0YXRlLCB0eXBlKSB7CiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ2NvZmZlZSc7CiAgICAgICAgdmFyIGluZGVudFVuaXQgPSAwOwogICAgICAgIGlmICh0eXBlID09PSAnY29mZmVlJykgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1tpXS50eXBlID09PSAnY29mZmVlJykgewogICAgICAgICAgICAgICAgICAgIGluZGVudFVuaXQgPSBzdGF0ZS5zY29wZXNbaV0ub2Zmc2V0ICsgY29uZi5pbmRlbnRVbml0OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW5kZW50VW5pdCA9IHN0cmVhbS5jb2x1bW4oKSArIHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5zY29wZXMudW5zaGlmdCh7CiAgICAgICAgICAgIG9mZnNldDogaW5kZW50VW5pdCwKICAgICAgICAgICAgdHlwZTogdHlwZQogICAgICAgIH0pOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBkZWRlbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID09IDEpIHJldHVybjsKICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgPT09ICdjb2ZmZWUnKSB7CiAgICAgICAgICAgIHZhciBfaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIHZhciBfaW5kZW50X2luZGV4ID0gLTE7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoX2luZGVudCA9PT0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIF9pbmRlbnRfaW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfaW5kZW50X2luZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgIT09IF9pbmRlbnQpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIHZhciBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKCiAgICAgICAgLy8gSGFuZGxlICcuJyBjb25uZWN0ZWQgaWRlbnRpZmllcnMKICAgICAgICBpZiAoY3VycmVudCA9PT0gJy4nKSB7CiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgICAgICBpZiAoc3R5bGUgPT09ICd2YXJpYWJsZScpIHsKICAgICAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIHByb3BlcnRpZXMKICAgICAgICBpZiAoY3VycmVudCA9PT0gJ0AnKSB7CiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgICAgICBpZiAoc3R5bGUgPT09ICd2YXJpYWJsZScpIHsKICAgICAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUtMic7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlcy4KICAgICAgICBpZiAoY3VycmVudCA9PT0gJ3JldHVybicpIHsKICAgICAgICAgICAgc3RhdGUuZGVkZW50ICs9IDE7CiAgICAgICAgfQogICAgICAgIGlmICgoKGN1cnJlbnQgPT09ICctPicgfHwgY3VycmVudCA9PT0gJz0+JykgJiYKICAgICAgICAgICAgICAgICAgIXN0YXRlLmxhbWJkYSAmJgogICAgICAgICAgICAgICAgICBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAnY29mZmVlJyAmJgogICAgICAgICAgICAgICAgICBzdHJlYW0ucGVlaygpID09PSAnJykKICAgICAgICAgICAgICAgfHwgc3R5bGUgPT09ICdpbmRlbnQnKSB7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGltaXRlcl9pbmRleCA9ICdbKHsnLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaW5kZW50KHN0cmVhbSwgc3RhdGUsICddKX0nLnNsaWNlKGRlbGltaXRlcl9pbmRleCwgZGVsaW1pdGVyX2luZGV4KzEpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGluZGVudEtleXdvcmRzLmV4ZWMoY3VycmVudCkpewogICAgICAgICAgICBpbmRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChjdXJyZW50ID09ICd0aGVuJyl7CiAgICAgICAgICAgIGRlZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgCgogICAgICAgIGlmIChzdHlsZSA9PT0gJ2RlZGVudCcpIHsKICAgICAgICAgICAgaWYgKGRlZGVudChzdHJlYW0sIHN0YXRlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVsaW1pdGVyX2luZGV4ID0gJ10pfScuaW5kZXhPZihjdXJyZW50KTsKICAgICAgICBpZiAoZGVsaW1pdGVyX2luZGV4ICE9PSAtMSkgewogICAgICAgICAgICBpZiAoZGVkZW50KHN0cmVhbSwgc3RhdGUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUuZGVkZW50ID4gMCAmJiBzdHJlYW0uZW9sKCkgJiYgc3RhdGUuc2NvcGVzWzBdLnR5cGUgPT0gJ2NvZmZlZScpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLnNjb3Blcy5sZW5ndGggPiAxKSBzdGF0ZS5zY29wZXMuc2hpZnQoKTsKICAgICAgICAgICAgc3RhdGUuZGVkZW50IC09IDE7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBzdHlsZTsKICAgIH0KCiAgICB2YXIgZXh0ZXJuYWwgPSB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgc2NvcGVzOiBbe29mZnNldDpiYXNlY29sdW1uIHx8IDAsIHR5cGU6J2NvZmZlZSd9XSwKICAgICAgICAgICAgICBsYXN0VG9rZW46IG51bGwsCiAgICAgICAgICAgICAgbGFtYmRhOiBmYWxzZSwKICAgICAgICAgICAgICBkZWRlbnQ6IDAKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICAKICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuID0ge3N0eWxlOnN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLmxhbWJkYSkgewogICAgICAgICAgICAgICAgc3RhdGUubGFtYmRhID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgfQogICAgICAgIAogICAgfTsKICAgIHJldHVybiBleHRlcm5hbDsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQveC1jb2ZmZWVzY3JpcHQnLCAnY29mZmVlc2NyaXB0Jyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvZmZlZVNjcmlwdCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY29mZmVlc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHNpbHZlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHNpbHZlcjt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQ29mZmVlU2NyaXB0IG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2ZmZWVTY3JpcHQgbW9kZSBmb3IgQ29kZU1pcnJvcgojIENvcHlyaWdodCAoYykgMjAxMSBKZWZmIFBpY2toYXJkdCwgcmVsZWFzZWQgdW5kZXIKIyB0aGUgTUlUIExpY2Vuc2UuCiMKIyBNb2RpZmllZCBmcm9tIHRoZSBQeXRob24gQ29kZU1pcnJvciBtb2RlLCB3aGljaCBhbHNvIGlzIAojIHVuZGVyIHRoZSBNSVQgTGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMTAgVGltb3RoeSBGYXJyZWxsLgojCiMgVGhlIGZvbGxvd2luZyBzY3JpcHQsIFVuZGVyc2NvcmUuY29mZmVlLCBpcyB1c2VkIHRvIAojIGRlbW9uc3RyYXRlIENvZmZlZVNjcmlwdCBtb2RlIGZvciBDb2RlTWlycm9yLgojCiMgVG8gZG93bmxvYWQgQ29mZmVlU2NyaXB0IG1vZGUgZm9yIENvZGVNaXJyb3IsIGdvIHRvOgojIGh0dHBzOi8vZ2l0aHViLmNvbS9waWNraGFyZHQvY29mZmVlc2NyaXB0LWNvZGVtaXJyb3ItbW9kZQoKIyAqKlVuZGVyc2NvcmUuY29mZmVlCiMgKGMpIDIwMTEgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIEluYy4qKgojIFVuZGVyc2NvcmUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQojIFtNSVQgbGljZW5zZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSkuCiMgUG9ydGlvbnMgb2YgVW5kZXJzY29yZSBhcmUgaW5zcGlyZWQgYnkgb3IgYm9ycm93ZWQgZnJvbQojIFtQcm90b3R5cGUuanNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcvYXBpKSwgT2xpdmVyIFN0ZWVsZSdzCiMgW0Z1bmN0aW9uYWxdKGh0dHA6Ly9vc3RlZWxlLmNvbSksIGFuZCBKb2huIFJlc2lnJ3MKIyBbTWljcm8tVGVtcGxhdGluZ10oaHR0cDovL2Vqb2huLm9yZykuCiMgRm9yIGFsbCBkZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uOgojIGh0dHA6Ly9kb2N1bWVudGNsb3VkLmdpdGh1Yi5jb20vdW5kZXJzY29yZS8KCgojIEJhc2VsaW5lIHNldHVwCiMgLS0tLS0tLS0tLS0tLS0KCiMgRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBnbG9iYWxgIG9uIHRoZSBzZXJ2ZXIuCnJvb3QgPSB0aGlzCgoKIyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLgpwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll8KCgojIEVzdGFibGlzaCB0aGUgb2JqZWN0IHRoYXQgZ2V0cyB0aHJvd24gdG8gYnJlYWsgb3V0IG9mIGEgbG9vcCBpdGVyYXRpb24uCiMgYFN0b3BJdGVyYXRpb25gIGlzIFNPUCBvbiBNb3ppbGxhLgpicmVha2VyID0gaWYgdHlwZW9mKFN0b3BJdGVyYXRpb24pIGlzICd1bmRlZmluZWQnIHRoZW4gJ19fYnJlYWtfXycgZWxzZSBTdG9wSXRlcmF0aW9uCgoKIyBIZWxwZXIgZnVuY3Rpb24gdG8gZXNjYXBlICoqUmVnRXhwKiogY29udGVudHMsIGJlY2F1c2UgSlMgZG9lc24ndCBoYXZlIG9uZS4KZXNjYXBlUmVnRXhwID0gKHN0cmluZykgLT4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEnKQoKCiMgU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjoKQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZQpPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUKCgojIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLgpzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UKdW5zaGlmdCA9IEFycmF5UHJvdG8udW5zaGlmdAp0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nCmhhc093blByb3BlcnR5ID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHkKcHJvcGVydHlJc0VudW1lcmFibGUgPSBPYmpQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZQoKCiMgQWxsICoqRUNNQTUqKiBuYXRpdmUgaW1wbGVtZW50YXRpb25zIHdlIGhvcGUgdG8gdXNlIGFyZSBkZWNsYXJlZCBoZXJlLgpuYXRpdmVGb3JFYWNoID0gQXJyYXlQcm90by5mb3JFYWNoCm5hdGl2ZU1hcCA9IEFycmF5UHJvdG8ubWFwCm5hdGl2ZVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlCm5hdGl2ZVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodApuYXRpdmVGaWx0ZXIgPSBBcnJheVByb3RvLmZpbHRlcgpuYXRpdmVFdmVyeSA9IEFycmF5UHJvdG8uZXZlcnkKbmF0aXZlU29tZSA9IEFycmF5UHJvdG8uc29tZQpuYXRpdmVJbmRleE9mID0gQXJyYXlQcm90by5pbmRleE9mCm5hdGl2ZUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZgpuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheQpuYXRpdmVLZXlzID0gT2JqZWN0LmtleXMKCgojIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LgpfID0gKG9iaikgLT4gbmV3IHdyYXBwZXIob2JqKQoKCiMgRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipDb21tb25KUyoqLgppZiB0eXBlb2YoZXhwb3J0cykgIT0gJ3VuZGVmaW5lZCcgdGhlbiBleHBvcnRzLl8gPSBfCgoKIyBFeHBvcnQgVW5kZXJzY29yZSB0byBnbG9iYWwgc2NvcGUuCnJvb3QuXyA9IF8KCgojIEN1cnJlbnQgdmVyc2lvbi4KXy5WRVJTSU9OID0gJzEuMS4wJwoKCiMgQ29sbGVjdGlvbiBGdW5jdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBUaGUgY29ybmVyc3RvbmUsIGFuICoqZWFjaCoqIGltcGxlbWVudGF0aW9uLgojIEhhbmRsZXMgb2JqZWN0cyBpbXBsZW1lbnRpbmcgKipmb3JFYWNoKiosIGFycmF5cywgYW5kIHJhdyBvYmplY3RzLgpfLmVhY2ggPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICB0cnkKICAgIGlmIG5hdGl2ZUZvckVhY2ggYW5kIG9iai5mb3JFYWNoIGlzIG5hdGl2ZUZvckVhY2gKICAgICAgb2JqLmZvckVhY2ggaXRlcmF0b3IsIGNvbnRleHQKICAgIGVsc2UgaWYgXy5pc051bWJlciBvYmoubGVuZ3RoCiAgICAgIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgb2JqW2ldLCBpLCBvYmogZm9yIGkgaW4gWzAuLi5vYmoubGVuZ3RoXQogICAgZWxzZQogICAgICBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbCwga2V5LCBvYmogZm9yIG93biBrZXksIHZhbCBvZiBvYmoKICBjYXRjaCBlCiAgICB0aHJvdyBlIGlmIGUgaXNudCBicmVha2VyCiAgb2JqCgoKIyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdG9yIHRvIGVhY2ggZWxlbWVudC4gVXNlIEphdmFTY3JpcHQKIyAxLjYncyB2ZXJzaW9uIG9mICoqbWFwKiosIGlmIHBvc3NpYmxlLgpfLm1hcCA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIHJldHVybiBvYmoubWFwKGl0ZXJhdG9yLCBjb250ZXh0KSBpZiBuYXRpdmVNYXAgYW5kIG9iai5tYXAgaXMgbmF0aXZlTWFwCiAgcmVzdWx0cyA9IFtdCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIHJlc3VsdHMucHVzaCBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogIHJlc3VsdHMKCgojICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMuIEFsc28ga25vd24gYXMKIyAqKmluamVjdCoqLCBvciAqKmZvbGRsKiouIFVzZXMgSmF2YVNjcmlwdCAxLjgncyB2ZXJzaW9uIG9mICoqcmVkdWNlKiosIGlmIHBvc3NpYmxlLgpfLnJlZHVjZSA9IChvYmosIGl0ZXJhdG9yLCBtZW1vLCBjb250ZXh0KSAtPgogIGlmIG5hdGl2ZVJlZHVjZSBhbmQgb2JqLnJlZHVjZSBpcyBuYXRpdmVSZWR1Y2UKICAgIGl0ZXJhdG9yID0gXy5iaW5kIGl0ZXJhdG9yLCBjb250ZXh0IGlmIGNvbnRleHQKICAgIHJldHVybiBvYmoucmVkdWNlIGl0ZXJhdG9yLCBtZW1vCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIG1lbW8gPSBpdGVyYXRvci5jYWxsIGNvbnRleHQsIG1lbW8sIHZhbHVlLCBpbmRleCwgbGlzdAogIG1lbW8KCgojIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mICoqcmVkdWNlKiosIGFsc28ga25vd24gYXMgKipmb2xkcioqLiBVc2VzCiMgSmF2YVNjcmlwdCAxLjgncyB2ZXJzaW9uIG9mICoqcmVkdWNlUmlnaHQqKiwgaWYgYXZhaWxhYmxlLgpfLnJlZHVjZVJpZ2h0ID0gKG9iaiwgaXRlcmF0b3IsIG1lbW8sIGNvbnRleHQpIC0+CiAgaWYgbmF0aXZlUmVkdWNlUmlnaHQgYW5kIG9iai5yZWR1Y2VSaWdodCBpcyBuYXRpdmVSZWR1Y2VSaWdodAogICAgaXRlcmF0b3IgPSBfLmJpbmQgaXRlcmF0b3IsIGNvbnRleHQgaWYgY29udGV4dAogICAgcmV0dXJuIG9iai5yZWR1Y2VSaWdodCBpdGVyYXRvciwgbWVtbwogIHJldmVyc2VkID0gXy5jbG9uZShfLnRvQXJyYXkob2JqKSkucmV2ZXJzZSgpCiAgXy5yZWR1Y2UgcmV2ZXJzZWQsIGl0ZXJhdG9yLCBtZW1vLCBjb250ZXh0CgoKIyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuCl8uZGV0ZWN0ID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmVzdWx0ID0gbnVsbAogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBpZiBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogICAgICByZXN1bHQgPSB2YWx1ZQogICAgICBfLmJyZWFrTG9vcCgpCiAgcmVzdWx0CgoKIyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LiBVc2UgSmF2YVNjcmlwdCAxLjYncwojICoqZmlsdGVyKiosIGlmIGl0IGV4aXN0cy4KXy5maWx0ZXIgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICByZXR1cm4gb2JqLmZpbHRlciBpdGVyYXRvciwgY29udGV4dCBpZiBuYXRpdmVGaWx0ZXIgYW5kIG9iai5maWx0ZXIgaXMgbmF0aXZlRmlsdGVyCiAgcmVzdWx0cyA9IFtdCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIHJlc3VsdHMucHVzaCB2YWx1ZSBpZiBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogIHJlc3VsdHMKCgojIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuCl8ucmVqZWN0ID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmVzdWx0cyA9IFtdCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIHJlc3VsdHMucHVzaCB2YWx1ZSBpZiBub3QgaXRlcmF0b3IuY2FsbCBjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QKICByZXN1bHRzCgoKIyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC4gRGVsZWdhdGUgdG8KIyBKYXZhU2NyaXB0IDEuNidzICoqZXZlcnkqKiwgaWYgaXQgaXMgcHJlc2VudC4KXy5ldmVyeSA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIGl0ZXJhdG9yIHx8PSBfLmlkZW50aXR5CiAgcmV0dXJuIG9iai5ldmVyeSBpdGVyYXRvciwgY29udGV4dCBpZiBuYXRpdmVFdmVyeSBhbmQgb2JqLmV2ZXJ5IGlzIG5hdGl2ZUV2ZXJ5CiAgcmVzdWx0ID0gdHJ1ZQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBfLmJyZWFrTG9vcCgpIHVubGVzcyAocmVzdWx0ID0gcmVzdWx0IGFuZCBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpCiAgcmVzdWx0CgoKIyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC4gVXNlCiMgSmF2YVNjcmlwdCAxLjYncyAqKnNvbWUqKiwgaWYgaXQgZXhpc3RzLgpfLnNvbWUgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICBpdGVyYXRvciB8fD0gXy5pZGVudGl0eQogIHJldHVybiBvYmouc29tZSBpdGVyYXRvciwgY29udGV4dCBpZiBuYXRpdmVTb21lIGFuZCBvYmouc29tZSBpcyBuYXRpdmVTb21lCiAgcmVzdWx0ID0gZmFsc2UKICBfLmVhY2ggb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAgXy5icmVha0xvb3AoKSBpZiAocmVzdWx0ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKQogIHJlc3VsdAoKCiMgRGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gdmFsdWUgaXMgaW5jbHVkZWQgaW4gdGhlIGFycmF5IG9yIG9iamVjdCwKIyBiYXNlZCBvbiBgPT09YC4KXy5pbmNsdWRlID0gKG9iaiwgdGFyZ2V0KSAtPgogIHJldHVybiBfLmluZGV4T2Yob2JqLCB0YXJnZXQpIGlzbnQgLTEgaWYgbmF0aXZlSW5kZXhPZiBhbmQgb2JqLmluZGV4T2YgaXMgbmF0aXZlSW5kZXhPZgogIHJldHVybiB0cnVlIGZvciBvd24ga2V5LCB2YWwgb2Ygb2JqIHdoZW4gdmFsIGlzIHRhcmdldAogIGZhbHNlCgoKIyBJbnZva2UgYSBtZXRob2Qgd2l0aCBhcmd1bWVudHMgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uCl8uaW52b2tlID0gKG9iaiwgbWV0aG9kKSAtPgogIGFyZ3MgPSBfLnJlc3QgYXJndW1lbnRzLCAyCiAgKGlmIG1ldGhvZCB0aGVuIHZhbFttZXRob2RdIGVsc2UgdmFsKS5hcHBseSh2YWwsIGFyZ3MpIGZvciB2YWwgaW4gb2JqCgoKIyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mICoqbWFwKio6IGZldGNoaW5nIGEgcHJvcGVydHkuCl8ucGx1Y2sgPSAob2JqLCBrZXkpIC0+CiAgXy5tYXAob2JqLCAodmFsKSAtPiB2YWxba2V5XSkKCgojIFJldHVybiB0aGUgbWF4aW11bSBpdGVtIG9yIChpdGVtLWJhc2VkIGNvbXB1dGF0aW9uKS4KXy5tYXggPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICByZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCwgb2JqKSBpZiBub3QgaXRlcmF0b3IgYW5kIF8uaXNBcnJheShvYmopCiAgcmVzdWx0ID0gY29tcHV0ZWQ6IC1JbmZpbml0eQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBjb21wdXRlZCA9IGlmIGl0ZXJhdG9yIHRoZW4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpIGVsc2UgdmFsdWUKICAgIGNvbXB1dGVkID49IHJlc3VsdC5jb21wdXRlZCBhbmQgKHJlc3VsdCA9IHt2YWx1ZTogdmFsdWUsIGNvbXB1dGVkOiBjb21wdXRlZH0pCiAgcmVzdWx0LnZhbHVlCgoKIyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuCl8ubWluID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsIG9iaikgaWYgbm90IGl0ZXJhdG9yIGFuZCBfLmlzQXJyYXkob2JqKQogIHJlc3VsdCA9IGNvbXB1dGVkOiBJbmZpbml0eQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBjb21wdXRlZCA9IGlmIGl0ZXJhdG9yIHRoZW4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpIGVsc2UgdmFsdWUKICAgIGNvbXB1dGVkIDwgcmVzdWx0LmNvbXB1dGVkIGFuZCAocmVzdWx0ID0ge3ZhbHVlOiB2YWx1ZSwgY29tcHV0ZWQ6IGNvbXB1dGVkfSkKICByZXN1bHQudmFsdWUKCgojIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRvci4KXy5zb3J0QnkgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICBfLnBsdWNrKCgoXy5tYXAgb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAge3ZhbHVlOiB2YWx1ZSwgY3JpdGVyaWE6IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KX0KICApLnNvcnQoKGxlZnQsIHJpZ2h0KSAtPgogICAgYSA9IGxlZnQuY3JpdGVyaWE7IGIgPSByaWdodC5jcml0ZXJpYQogICAgaWYgYSA8IGIgdGhlbiAtMSBlbHNlIGlmIGEgPiBiIHRoZW4gMSBlbHNlIDAKICApKSwgJ3ZhbHVlJykKCgojIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCBhdCB3aGF0IGluZGV4IGFuIG9iamVjdCBzaG91bGQKIyBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLgpfLnNvcnRlZEluZGV4ID0gKGFycmF5LCBvYmosIGl0ZXJhdG9yKSAtPgogIGl0ZXJhdG9yIHx8PSBfLmlkZW50aXR5CiAgbG93ID0gMAogIGhpZ2ggPSBhcnJheS5sZW5ndGgKICB3aGlsZSBsb3cgPCBoaWdoCiAgICBtaWQgPSAobG93ICsgaGlnaCkgPj4gMQogICAgaWYgaXRlcmF0b3IoYXJyYXlbbWlkXSkgPCBpdGVyYXRvcihvYmopIHRoZW4gbG93ID0gbWlkICsgMSBlbHNlIGhpZ2ggPSBtaWQKICBsb3cKCgojIENvbnZlcnQgYW55dGhpbmcgaXRlcmFibGUgaW50byBhIHJlYWwsIGxpdmUgYXJyYXkuCl8udG9BcnJheSA9IChpdGVyYWJsZSkgLT4KICByZXR1cm4gW10gaWYgKCFpdGVyYWJsZSkKICByZXR1cm4gaXRlcmFibGUudG9BcnJheSgpIGlmIChpdGVyYWJsZS50b0FycmF5KQogIHJldHVybiBpdGVyYWJsZSBpZiAoXy5pc0FycmF5KGl0ZXJhYmxlKSkKICByZXR1cm4gc2xpY2UuY2FsbChpdGVyYWJsZSkgaWYgKF8uaXNBcmd1bWVudHMoaXRlcmFibGUpKQogIF8udmFsdWVzKGl0ZXJhYmxlKQoKCiMgUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LgpfLnNpemUgPSAob2JqKSAtPiBfLnRvQXJyYXkob2JqKS5sZW5ndGgKCgojIEFycmF5IEZ1bmN0aW9ucwojIC0tLS0tLS0tLS0tLS0tLQoKIyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgYG5gIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOCiMgdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyAqKmhlYWQqKi4gVGhlIGBndWFyZGAgY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsKIyB3aXRoICoqbWFwKiouCl8uZmlyc3QgPSAoYXJyYXksIG4sIGd1YXJkKSAtPgogIGlmIG4gYW5kIG5vdCBndWFyZCB0aGVuIHNsaWNlLmNhbGwoYXJyYXksIDAsIG4pIGVsc2UgYXJyYXlbMF0KCgojIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyAqKnRhaWwqKi4KIyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiBgaW5kZXhgIHdpbGwgcmV0dXJuCiMgdGhlIHJlc3Qgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgZnJvbSB0aGF0IGluZGV4IG9ud2FyZC4gVGhlIGBndWFyZGAKIyBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoICoqbWFwKiouCl8ucmVzdCA9IChhcnJheSwgaW5kZXgsIGd1YXJkKSAtPgogIHNsaWNlLmNhbGwoYXJyYXksIGlmIF8uaXNVbmRlZmluZWQoaW5kZXgpIG9yIGd1YXJkIHRoZW4gMSBlbHNlIGluZGV4KQoKCiMgR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuCl8ubGFzdCA9IChhcnJheSkgLT4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV0KCgojIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS4KXy5jb21wYWN0ID0gKGFycmF5KSAtPiBpdGVtIGZvciBpdGVtIGluIGFycmF5IHdoZW4gaXRlbQoKCiMgUmV0dXJuIGEgY29tcGxldGVseSBmbGF0dGVuZWQgdmVyc2lvbiBvZiBhbiBhcnJheS4KXy5mbGF0dGVuID0gKGFycmF5KSAtPgogIF8ucmVkdWNlIGFycmF5LCAobWVtbywgdmFsdWUpIC0+CiAgICByZXR1cm4gbWVtby5jb25jYXQoXy5mbGF0dGVuKHZhbHVlKSkgaWYgXy5pc0FycmF5IHZhbHVlCiAgICBtZW1vLnB1c2ggdmFsdWUKICAgIG1lbW8KICAsIFtdCgoKIyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS4KXy53aXRob3V0ID0gKGFycmF5KSAtPgogIHZhbHVlcyA9IF8ucmVzdCBhcmd1bWVudHMKICB2YWwgZm9yIHZhbCBpbiBfLnRvQXJyYXkoYXJyYXkpIHdoZW4gbm90IF8uaW5jbHVkZSB2YWx1ZXMsIHZhbAoKCiMgUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHkKIyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uCl8udW5pcSA9IChhcnJheSwgaXNTb3J0ZWQpIC0+CiAgbWVtbyA9IFtdCiAgZm9yIGVsLCBpIGluIF8udG9BcnJheSBhcnJheQogICAgbWVtby5wdXNoIGVsIGlmIGkgaXMgMCB8fCAoaWYgaXNTb3J0ZWQgaXMgdHJ1ZSB0aGVuIF8ubGFzdChtZW1vKSBpc250IGVsIGVsc2Ugbm90IF8uaW5jbHVkZShtZW1vLCBlbCkpCiAgbWVtbwoKCiMgUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZQojIHBhc3NlZC1pbiBhcnJheXMuCl8uaW50ZXJzZWN0ID0gKGFycmF5KSAtPgogIHJlc3QgPSBfLnJlc3QgYXJndW1lbnRzCiAgXy5zZWxlY3QgXy51bmlxKGFycmF5KSwgKGl0ZW0pIC0+CiAgICBfLmFsbCByZXN0LCAob3RoZXIpIC0+CiAgICAgIF8uaW5kZXhPZihvdGhlciwgaXRlbSkgPj0gMAoKCiMgWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZQojIGFuIGluZGV4IGdvIHRvZ2V0aGVyLgpfLnppcCA9IC0+CiAgbGVuZ3RoID0gXy5tYXggXy5wbHVjayBhcmd1bWVudHMsICdsZW5ndGgnCiAgcmVzdWx0cyA9IG5ldyBBcnJheSBsZW5ndGgKICBmb3IgaSBpbiBbMC4uLmxlbmd0aF0KICAgIHJlc3VsdHNbaV0gPSBfLnBsdWNrIGFyZ3VtZW50cywgU3RyaW5nIGkKICByZXN1bHRzCgoKIyBJZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBseSB1cyB3aXRoICoqaW5kZXhPZioqIChJJ20gbG9va2luZyBhdCB5b3UsIE1TSUUpLAojIHdlIG5lZWQgdGhpcyBmdW5jdGlvbi4gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbgojIGl0ZW0gaW4gYW4gYXJyYXksIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuCl8uaW5kZXhPZiA9IChhcnJheSwgaXRlbSkgLT4KICByZXR1cm4gYXJyYXkuaW5kZXhPZiBpdGVtIGlmIG5hdGl2ZUluZGV4T2YgYW5kIGFycmF5LmluZGV4T2YgaXMgbmF0aXZlSW5kZXhPZgogIGkgPSAwOyBsID0gYXJyYXkubGVuZ3RoCiAgd2hpbGUgbCAtIGkKICAgIGlmIGFycmF5W2ldIGlzIGl0ZW0gdGhlbiByZXR1cm4gaSBlbHNlIGkrKwogIC0xCgoKIyBQcm92aWRlIEphdmFTY3JpcHQgMS42J3MgKipsYXN0SW5kZXhPZioqLCBkZWxlZ2F0aW5nIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24sCiMgaWYgcG9zc2libGUuCl8ubGFzdEluZGV4T2YgPSAoYXJyYXksIGl0ZW0pIC0+CiAgcmV0dXJuIGFycmF5Lmxhc3RJbmRleE9mKGl0ZW0pIGlmIG5hdGl2ZUxhc3RJbmRleE9mIGFuZCBhcnJheS5sYXN0SW5kZXhPZiBpcyBuYXRpdmVMYXN0SW5kZXhPZgogIGkgPSBhcnJheS5sZW5ndGgKICB3aGlsZSBpCiAgICBpZiBhcnJheVtpXSBpcyBpdGVtIHRoZW4gcmV0dXJuIGkgZWxzZSBpLS0KICAtMQoKCiMgR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZgojIFt0aGUgbmF0aXZlIFB5dGhvbiAqKnJhbmdlKiogZnVuY3Rpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuCl8ucmFuZ2UgPSAoc3RhcnQsIHN0b3AsIHN0ZXApIC0+CiAgYSA9IGFyZ3VtZW50cwogIHNvbG8gPSBhLmxlbmd0aCA8PSAxCiAgaSA9IHN0YXJ0ID0gaWYgc29sbyB0aGVuIDAgZWxzZSBhWzBdCiAgc3RvcCA9IGlmIHNvbG8gdGhlbiBhWzBdIGVsc2UgYVsxXQogIHN0ZXAgPSBhWzJdIG9yIDEKICBsZW4gPSBNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKQogIHJldHVybiBbXSBpZiBsZW4gPD0gMAogIHJhbmdlID0gbmV3IEFycmF5IGxlbgogIGlkeCA9IDAKICBsb29wCiAgICByZXR1cm4gcmFuZ2UgaWYgKGlmIHN0ZXAgPiAwIHRoZW4gaSAtIHN0b3AgZWxzZSBzdG9wIC0gaSkgPj0gMAogICAgcmFuZ2VbaWR4XSA9IGkKICAgIGlkeCsrCiAgICBpKz0gc3RlcAoKCiMgRnVuY3Rpb24gRnVuY3Rpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tCgojIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLAojIG9wdGlvbmFsbHkpLiBCaW5kaW5nIHdpdGggYXJndW1lbnRzIGlzIGFsc28ga25vd24gYXMgKipjdXJyeSoqLgpfLmJpbmQgPSAoZnVuYywgb2JqKSAtPgogIGFyZ3MgPSBfLnJlc3QgYXJndW1lbnRzLCAyCiAgLT4gZnVuYy5hcHBseSBvYmogb3Igcm9vdCwgYXJncy5jb25jYXQgYXJndW1lbnRzCgoKIyBCaW5kIGFsbCBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQKIyBhbGwgY2FsbGJhY2tzIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC4KXy5iaW5kQWxsID0gKG9iaikgLT4KICBmdW5jcyA9IGlmIGFyZ3VtZW50cy5sZW5ndGggPiAxIHRoZW4gXy5yZXN0KGFyZ3VtZW50cykgZWxzZSBfLmZ1bmN0aW9ucyhvYmopCiAgXy5lYWNoIGZ1bmNzLCAoZikgLT4gb2JqW2ZdID0gXy5iaW5kIG9ialtmXSwgb2JqCiAgb2JqCgoKIyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzCiMgaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLgpfLmRlbGF5ID0gKGZ1bmMsIHdhaXQpIC0+CiAgYXJncyA9IF8ucmVzdCBhcmd1bWVudHMsIDIKICBzZXRUaW1lb3V0KCgtPiBmdW5jLmFwcGx5KGZ1bmMsIGFyZ3MpKSwgd2FpdCkKCgojIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuCl8ubWVtb2l6ZSA9IChmdW5jLCBoYXNoZXIpIC0+CiAgbWVtbyA9IHt9CiAgaGFzaGVyIG9yPSBfLmlkZW50aXR5CiAgLT4KICAgIGtleSA9IGhhc2hlci5hcHBseSB0aGlzLCBhcmd1bWVudHMKICAgIHJldHVybiBtZW1vW2tleV0gaWYga2V5IG9mIG1lbW8KICAgIG1lbW9ba2V5XSA9IGZ1bmMuYXBwbHkgdGhpcywgYXJndW1lbnRzCgoKIyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMKIyBjbGVhcmVkLgpfLmRlZmVyID0gKGZ1bmMpIC0+CiAgXy5kZWxheS5hcHBseSBfLCBbZnVuYywgMV0uY29uY2F0IF8ucmVzdCBhcmd1bWVudHMKCgojIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLAojIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmQKIyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgpfLndyYXAgPSAoZnVuYywgd3JhcHBlcikgLT4KICAtPiB3cmFwcGVyLmFwcGx5IHdyYXBwZXIsIFtmdW5jXS5jb25jYXQgYXJndW1lbnRzCgoKIyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaAojIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuCl8uY29tcG9zZSA9IC0+CiAgZnVuY3MgPSBhcmd1bWVudHMKICAtPgogICAgYXJncyA9IGFyZ3VtZW50cwogICAgZm9yIGkgaW4gW2Z1bmNzLmxlbmd0aCAtIDEuLjBdIGJ5IC0xCiAgICAgIGFyZ3MgPSBbZnVuY3NbaV0uYXBwbHkodGhpcywgYXJncyldCiAgICBhcmdzWzBdCgoKIyBPYmplY3QgRnVuY3Rpb25zCiMgLS0tLS0tLS0tLS0tLS0tLQoKIyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy4KXy5rZXlzID0gbmF0aXZlS2V5cyBvciAob2JqKSAtPgogIHJldHVybiBfLnJhbmdlIDAsIG9iai5sZW5ndGggaWYgXy5pc0FycmF5KG9iaikKICBrZXkgZm9yIGtleSwgdmFsIG9mIG9iagoKCiMgUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLgpfLnZhbHVlcyA9IChvYmopIC0+CiAgXy5tYXAgb2JqLCBfLmlkZW50aXR5CgoKIyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIGluIFVuZGVyc2NvcmUuCl8uZnVuY3Rpb25zID0gKG9iaikgLT4KICBfLmZpbHRlcihfLmtleXMob2JqKSwgKGtleSkgLT4gXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkuc29ydCgpCgoKIyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgaW4gYSBzb3VyY2Ugb2JqZWN0LgpfLmV4dGVuZCA9IChvYmopIC0+CiAgZm9yIHNvdXJjZSBpbiBfLnJlc3QoYXJndW1lbnRzKQogICAgb2JqW2tleV0gPSB2YWwgZm9yIGtleSwgdmFsIG9mIHNvdXJjZQogIG9iagoKCiMgQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LgpfLmNsb25lID0gKG9iaikgLT4KICByZXR1cm4gb2JqLnNsaWNlIDAgaWYgXy5pc0FycmF5IG9iagogIF8uZXh0ZW5kIHt9LCBvYmoKCgojIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai4KIyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvICJ0YXAgaW50byIgYSBtZXRob2QgY2hhaW4sCiMgaW4gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbgogdGhlIGNoYWluLgpfLnRhcCA9IChvYmosIGludGVyY2VwdG9yKSAtPgogIGludGVyY2VwdG9yIG9iagogIG9iagoKCiMgUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuCl8uaXNFcXVhbCA9IChhLCBiKSAtPgogICMgQ2hlY2sgb2JqZWN0IGlkZW50aXR5LgogIHJldHVybiB0cnVlIGlmIGEgaXMgYgogICMgRGlmZmVyZW50IHR5cGVzPwogIGF0eXBlID0gdHlwZW9mKGEpOyBidHlwZSA9IHR5cGVvZihiKQogIHJldHVybiBmYWxzZSBpZiBhdHlwZSBpc250IGJ0eXBlCiAgIyBCYXNpYyBlcXVhbGl0eSB0ZXN0ICh3YXRjaCBvdXQgZm9yIGNvZXJjaW9ucykuCiAgcmV0dXJuIHRydWUgaWYgYGEgPT0gYmAKICAjIE9uZSBpcyBmYWxzeSBhbmQgdGhlIG90aGVyIHRydXRoeS4KICByZXR1cm4gZmFsc2UgaWYgKCFhIGFuZCBiKSBvciAoYSBhbmQgIWIpCiAgIyBPbmUgb2YgdGhlbSBpbXBsZW1lbnRzIGFuIGBpc0VxdWFsKClgPwogIHJldHVybiBhLmlzRXF1YWwoYikgaWYgYS5pc0VxdWFsCiAgIyBDaGVjayBkYXRlcycgaW50ZWdlciB2YWx1ZXMuCiAgcmV0dXJuIGEuZ2V0VGltZSgpIGlzIGIuZ2V0VGltZSgpIGlmIF8uaXNEYXRlKGEpIGFuZCBfLmlzRGF0ZShiKQogICMgQm90aCBhcmUgTmFOPwogIHJldHVybiBmYWxzZSBpZiBfLmlzTmFOKGEpIGFuZCBfLmlzTmFOKGIpCiAgIyBDb21wYXJlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAgaWYgXy5pc1JlZ0V4cChhKSBhbmQgXy5pc1JlZ0V4cChiKQogICAgcmV0dXJuIGEuc291cmNlIGlzIGIuc291cmNlIGFuZAogICAgICAgICAgIGEuZ2xvYmFsIGlzIGIuZ2xvYmFsIGFuZAogICAgICAgICAgIGEuaWdub3JlQ2FzZSBpcyBiLmlnbm9yZUNhc2UgYW5kCiAgICAgICAgICAgYS5tdWx0aWxpbmUgaXMgYi5tdWx0aWxpbmUKICAjIElmIGEgaXMgbm90IGFuIG9iamVjdCBieSB0aGlzIHBvaW50LCB3ZSBjYW4ndCBoYW5kbGUgaXQuCiAgcmV0dXJuIGZhbHNlIGlmIGF0eXBlIGlzbnQgJ29iamVjdCcKICAjIENoZWNrIGZvciBkaWZmZXJlbnQgYXJyYXkgbGVuZ3RocyBiZWZvcmUgY29tcGFyaW5nIGNvbnRlbnRzLgogIHJldHVybiBmYWxzZSBpZiBhLmxlbmd0aCBhbmQgKGEubGVuZ3RoIGlzbnQgYi5sZW5ndGgpCiAgIyBOb3RoaW5nIGVsc2Ugd29ya2VkLCBkZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLgogIGFLZXlzID0gXy5rZXlzKGEpOyBiS2V5cyA9IF8ua2V5cyhiKQogICMgRGlmZmVyZW50IG9iamVjdCBzaXplcz8KICByZXR1cm4gZmFsc2UgaWYgYUtleXMubGVuZ3RoIGlzbnQgYktleXMubGVuZ3RoCiAgIyBSZWN1cnNpdmUgY29tcGFyaXNvbiBvZiBjb250ZW50cy4KICByZXR1cm4gZmFsc2UgZm9yIGtleSwgdmFsIG9mIGEgd2hlbiAhKGtleSBvZiBiKSBvciAhXy5pc0VxdWFsKHZhbCwgYltrZXldKQogIHRydWUKCgojIElzIGEgZ2l2ZW4gYXJyYXkgb3Igb2JqZWN0IGVtcHR5PwpfLmlzRW1wdHkgPSAob2JqKSAtPgogIHJldHVybiBvYmoubGVuZ3RoIGlzIDAgaWYgXy5pc0FycmF5KG9iaikgb3IgXy5pc1N0cmluZyhvYmopCiAgcmV0dXJuIGZhbHNlIGZvciBvd24ga2V5IG9mIG9iagogIHRydWUKCgojIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD8KXy5pc0VsZW1lbnQgPSAob2JqKSAtPiBvYmogYW5kIG9iai5ub2RlVHlwZSBpcyAxCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5PwpfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IG9yIChvYmopIC0+ICEhKG9iaiBhbmQgb2JqLmNvbmNhdCBhbmQgb2JqLnVuc2hpZnQgYW5kIG5vdCBvYmouY2FsbGVlKQoKCiMgSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBhcmd1bWVudHMgb2JqZWN0PwpfLmlzQXJndW1lbnRzID0gKG9iaikgLT4gb2JqIGFuZCBvYmouY2FsbGVlCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBmdW5jdGlvbj8KXy5pc0Z1bmN0aW9uID0gKG9iaikgLT4gISEob2JqIGFuZCBvYmouY29uc3RydWN0b3IgYW5kIG9iai5jYWxsIGFuZCBvYmouYXBwbHkpCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBzdHJpbmc/Cl8uaXNTdHJpbmcgPSAob2JqKSAtPiAhIShvYmogaXMgJycgb3IgKG9iaiBhbmQgb2JqLmNoYXJDb2RlQXQgYW5kIG9iai5zdWJzdHIpKQoKCiMgSXMgYSBnaXZlbiB2YWx1ZSBhIG51bWJlcj8KXy5pc051bWJlciA9IChvYmopIC0+IChvYmogaXMgK29iaikgb3IgdG9TdHJpbmcuY2FsbChvYmopIGlzICdbb2JqZWN0IE51bWJlcl0nCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj8KXy5pc0Jvb2xlYW4gPSAob2JqKSAtPiBvYmogaXMgdHJ1ZSBvciBvYmogaXMgZmFsc2UKCgojIElzIGEgZ2l2ZW4gdmFsdWUgYSBEYXRlPwpfLmlzRGF0ZSA9IChvYmopIC0+ICEhKG9iaiBhbmQgb2JqLmdldFRpbWV6b25lT2Zmc2V0IGFuZCBvYmouc2V0VVRDRnVsbFllYXIpCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSByZWd1bGFyIGV4cHJlc3Npb24/Cl8uaXNSZWdFeHAgPSAob2JqKSAtPiAhIShvYmogYW5kIG9iai5leGVjIGFuZCAob2JqLmlnbm9yZUNhc2Ugb3Igb2JqLmlnbm9yZUNhc2UgaXMgZmFsc2UpKQoKCiMgSXMgdGhlIGdpdmVuIHZhbHVlIE5hTiAtLSB0aGlzIG9uZSBpcyBpbnRlcmVzdGluZy4gYE5hTiAhPSBOYU5gLCBhbmQKIyBgaXNOYU4odW5kZWZpbmVkKSA9PSB0cnVlYCwgc28gd2UgbWFrZSBzdXJlIGl0J3MgYSBudW1iZXIgZmlyc3QuCl8uaXNOYU4gPSAob2JqKSAtPiBfLmlzTnVtYmVyKG9iaikgYW5kIHdpbmRvdy5pc05hTihvYmopCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/Cl8uaXNOdWxsID0gKG9iaikgLT4gb2JqIGlzIG51bGwKCgojIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkPwpfLmlzVW5kZWZpbmVkID0gKG9iaikgLT4gdHlwZW9mIG9iaiBpcyAndW5kZWZpbmVkJwoKCiMgVXRpbGl0eSBGdW5jdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLQoKIyBSdW4gVW5kZXJzY29yZS5qcyBpbiBub0NvbmZsaWN0IG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0cwojIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC4KXy5ub0NvbmZsaWN0ID0gLT4KICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmUKICB0aGlzCgoKIyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0b3JzLgpfLmlkZW50aXR5ID0gKHZhbHVlKSAtPiB2YWx1ZQoKCiMgUnVuIGEgZnVuY3Rpb24gYG5gIHRpbWVzLgpfLnRpbWVzID0gKG4sIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgaSBmb3IgaSBpbiBbMC4uLm5dCgoKIyBCcmVhayBvdXQgb2YgdGhlIG1pZGRsZSBvZiBhbiBpdGVyYXRpb24uCl8uYnJlYWtMb29wID0gLT4gdGhyb3cgYnJlYWtlcgoKCiMgQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LCBlbnN1cmluZyB0aGF0CiMgdGhleSdyZSBjb3JyZWN0bHkgYWRkZWQgdG8gdGhlIE9PUCB3cmFwcGVyIGFzIHdlbGwuCl8ubWl4aW4gPSAob2JqKSAtPgogIGZvciBuYW1lIGluIF8uZnVuY3Rpb25zKG9iaikKICAgIGFkZFRvV3JhcHBlciBuYW1lLCBfW25hbWVdID0gb2JqW25hbWVdCgoKIyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLgojIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuCmlkQ291bnRlciA9IDAKXy51bmlxdWVJZCA9IChwcmVmaXgpIC0+CiAgKHByZWZpeCBvciAnJykgKyBpZENvdW50ZXIrKwoKCiMgQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzICoqRVJCKiotc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQojIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KXy50ZW1wbGF0ZVNldHRpbmdzID0gewogIHN0YXJ0OiAnPCUnCiAgZW5kOiAnJT4nCiAgaW50ZXJwb2xhdGU6IC88JT0oLis/KSU+L2cKfQoKCiMgSmF2YVNjcmlwdCB0ZW1wbGF0aW5nIGEtbGEgKipFUkIqKiwgcGlsZmVyZWQgZnJvbSBKb2huIFJlc2lnJ3MKIyAqU2VjcmV0cyBvZiB0aGUgSmF2YVNjcmlwdCBOaW5qYSosIHBhZ2UgODMuCiMgU2luZ2xlLXF1b3RlIGZpeCBmcm9tIFJpY2sgU3RyYWhsLgojIFdpdGggYWx0ZXJhdGlvbnMgZm9yIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBhbmQgdG8gcHJlc2VydmUgd2hpdGVzcGFjZS4KXy50ZW1wbGF0ZSA9IChzdHIsIGRhdGEpIC0+CiAgYyA9IF8udGVtcGxhdGVTZXR0aW5ncwogIGVuZE1hdGNoID0gbmV3IFJlZ0V4cCgiJyg/PVteIitjLmVuZC5zdWJzdHIoMCwgMSkrIl0qIitlc2NhcGVSZWdFeHAoYy5lbmQpKyIpIiwiZyIpCiAgZm4gPSBuZXcgRnVuY3Rpb24gJ29iaicsCiAgICAndmFyIHA9W10scHJpbnQ9ZnVuY3Rpb24oKXtwLnB1c2guYXBwbHkocCxhcmd1bWVudHMpO307JyArCiAgICAnd2l0aChvYmp8fHt9KXtwLnB1c2goXCcnICsKICAgIHN0ci5yZXBsYWNlKC9cci9nLCAnXFxyJykKICAgICAgIC5yZXBsYWNlKC9cbi9nLCAnXFxuJykKICAgICAgIC5yZXBsYWNlKC9cdC9nLCAnXFx0JykKICAgICAgIC5yZXBsYWNlKGVuZE1hdGNoLCLvv73vv73vv70iKQogICAgICAgLnNwbGl0KCInIikuam9pbigiXFwnIikKICAgICAgIC5zcGxpdCgi77+977+977+9Iikuam9pbigiJyIpCiAgICAgICAucmVwbGFjZShjLmludGVycG9sYXRlLCAiJywkMSwnIikKICAgICAgIC5zcGxpdChjLnN0YXJ0KS5qb2luKCInKTsiKQogICAgICAgLnNwbGl0KGMuZW5kKS5qb2luKCJwLnB1c2goJyIpICsKICAgICAgICInKTt9cmV0dXJuIHAuam9pbignJyk7IgogIGlmIGRhdGEgdGhlbiBmbihkYXRhKSBlbHNlIGZuCgoKIyBBbGlhc2VzCiMgLS0tLS0tLQoKXy5mb3JFYWNoID0gXy5lYWNoCl8uZm9sZGwgPSBfLmluamVjdCA9IF8ucmVkdWNlCl8uZm9sZHIgPSBfLnJlZHVjZVJpZ2h0Cl8uc2VsZWN0ID0gXy5maWx0ZXIKXy5hbGwgPSBfLmV2ZXJ5Cl8uYW55ID0gXy5zb21lCl8uY29udGFpbnMgPSBfLmluY2x1ZGUKXy5oZWFkID0gXy5maXJzdApfLnRhaWwgPSBfLnJlc3QKXy5tZXRob2RzID0gXy5mdW5jdGlvbnMKCgojIFNldHVwIHRoZSBPT1AgV3JhcHBlcgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdAojIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlCiMgdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC4Kd3JhcHBlciA9IChvYmopIC0+CiAgdGhpcy5fd3JhcHBlZCA9IG9iagogIHRoaXMKCgojIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy4KcmVzdWx0ID0gKG9iaiwgY2hhaW4pIC0+CiAgaWYgY2hhaW4gdGhlbiBfKG9iaikuY2hhaW4oKSBlbHNlIG9iagoKCiMgQSBtZXRob2QgdG8gZWFzaWx5IGFkZCBmdW5jdGlvbnMgdG8gdGhlIE9PUCB3cmFwcGVyLgphZGRUb1dyYXBwZXIgPSAobmFtZSwgZnVuYykgLT4KICB3cmFwcGVyLnByb3RvdHlwZVtuYW1lXSA9IC0+CiAgICBhcmdzID0gXy50b0FycmF5IGFyZ3VtZW50cwogICAgdW5zaGlmdC5jYWxsIGFyZ3MsIHRoaXMuX3dyYXBwZWQKICAgIHJlc3VsdCBmdW5jLmFwcGx5KF8sIGFyZ3MpLCB0aGlzLl9jaGFpbgoKCiMgQWRkIGFsbCBvZnRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuCl8ubWl4aW4gXwoKCiMgQWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci4KXy5lYWNoIFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIChuYW1lKSAtPgogIG1ldGhvZCA9IEFycmF5LnByb3RvdHlwZVtuYW1lXQogIHdyYXBwZXIucHJvdG90eXBlW25hbWVdID0gLT4KICAgIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpCiAgICByZXN1bHQodGhpcy5fd3JhcHBlZCwgdGhpcy5fY2hhaW4pCgoKIyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci4KXy5lYWNoIFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgKG5hbWUpIC0+CiAgbWV0aG9kID0gQXJyYXkucHJvdG90eXBlW25hbWVdCiAgd3JhcHBlci5wcm90b3R5cGVbbmFtZV0gPSAtPgogICAgcmVzdWx0KG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpLCB0aGlzLl9jaGFpbikKCgojIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC4Kd3JhcHBlcjo6Y2hhaW4gPSAtPgogIHRoaXMuX2NoYWluID0gdHJ1ZQogIHRoaXMKCgojIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0Lgp3cmFwcGVyOjp2YWx1ZSA9IC0+IHRoaXMuX3dyYXBwZWQKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1jb2ZmZWVzY3JpcHQ8L2NvZGU+LjwvcD4KCiAgICA8cD5UaGUgQ29mZmVlU2NyaXB0IG1vZGUgd2FzIHdyaXR0ZW4gYnkgSmVmZiBQaWNraGFyZHQgKDxhIGhyZWY9IkxJQ0VOU0UiPmxpY2Vuc2U8L2E+KS48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTEgSmVmZiBQaWNraGFyZHQKTW9kaWZpZWQgZnJvbSB0aGUgUHl0aG9uIENvZGVNaXJyb3IgbW9kZSwgQ29weXJpZ2h0IChjKSAyMDEwIFRpbW90aHkgRmFycmVsbAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4=]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENTUyBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQ1NTIG1vZGU8L2gxPgogICAgPGZvcm0+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[c3Bhbi5jbS1yYW5nZWluZm8ge2NvbG9yOiAjYTBiO30Kc3Bhbi5jbS1taW51cyB7Y29sb3I6IHJlZDt9CnNwYW4uY20tcGx1cyB7Y29sb3I6ICMyYjI7fQo=]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IERpZmYgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImRpZmYuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkaWZmLmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRGlmZiBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CmRpZmYgLS1naXQgYS9pbmRleC5odG1sIGIvaW5kZXguaHRtbAppbmRleCBjMWQ5MTU2Li43NzY0NzQ0IDEwMDY0NAotLS0gYS9pbmRleC5odG1sCisrKyBiL2luZGV4Lmh0bWwKQEAgLTk1LDcgKzk1LDggQEAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZSA9IHsKICAgICA8c2NyaXB0PgogICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCi0gICAgICAgIGF1dG9NYXRjaEJyYWNrZXRzOiB0cnVlCisgICAgICAgIGF1dG9NYXRjaEJyYWNrZXRzOiB0cnVlLAorICAgICAgb25HdXR0ZXJDbGljazogZnVuY3Rpb24oeCl7Y29uc29sZS5sb2coeCk7fQogICAgICAgfSk7CiAgICAgPC9zY3JpcHQ+CiAgIDwvYm9keT4KZGlmZiAtLWdpdCBhL2xpYi9jb2RlbWlycm9yLmpzIGIvbGliL2NvZGVtaXJyb3IuanMKaW5kZXggMDQ2NDZhOS4uOWEzOWNjNyAxMDA2NDQKLS0tIGEvbGliL2NvZGVtaXJyb3IuanMKKysrIGIvbGliL2NvZGVtaXJyb3IuanMKQEAgLTM5OSwxMCArMzk5LDE2IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KIAogICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKLSAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKSwgbGFzdCA9IHN0YXJ0OworICAgICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1vdXNlKGUpLCBsYXN0ID0gc3RhcnQsIHRhcmdldCA9IGUudGFyZ2V0KCk7CiAgICAgICBpZiAoIXN0YXJ0KSByZXR1cm47CiAgICAgICBzZXRDdXJzb3Ioc3RhcnQubGluZSwgc3RhcnQuY2gsIGZhbHNlKTsKICAgICAgIGlmIChlLmJ1dHRvbigpICE9IDEpIHJldHVybjsKKyAgICAgIGlmICh0YXJnZXQucGFyZW50Tm9kZSA9PSBndXR0ZXIpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMub25HdXR0ZXJDbGljaykKKyAgICAgICAgICBvcHRpb25zLm9uR3V0dGVyQ2xpY2soaW5kZXhPZihndXR0ZXIuY2hpbGROb2RlcywgdGFyZ2V0KSArIHNob3dpbmdGcm9tKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCiAgICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKIAogICAgICAgZS5zdG9wKCk7CkBAIC04MDgsNyArODE0LDcgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBmb3IgKHZhciBpID0gc2hvd2luZ0Zyb207IGkgPCBzaG93aW5nVG87ICsraSkgewogICAgICAgICB2YXIgbWFya2VyID0gbGluZXNbaV0uZ3V0dGVyTWFya2VyOwogICAgICAgICBpZiAobWFya2VyKSBodG1sLnB1c2goJzxkaXYgY2xhc3M9IicgKyBtYXJrZXIuc3R5bGUgKyAnIj4nICsgaHRtbEVzY2FwZShtYXJrZXIudGV4dCkgKyAnPC9kaXY+Jyk7Ci0gICAgICAgIGVsc2UgaHRtbC5wdXNoKCI8ZGl2PiIgKyAob3B0aW9ucy5saW5lTnVtYmVycyA/IGkgKyAxIDogIlx1MDBhMCIpICsgIjwvZGl2PiIpOworICAgICAgICBlbHNlIGh0bWwucHVzaCgiPGRpdj4iICsgKG9wdGlvbnMubGluZU51bWJlcnMgPyBpICsgb3B0aW9ucy5maXJzdExpbmVOdW1iZXIgOiAiXHUwMGEwIikgKyAiPC9kaXY+Iik7CiAgICAgICB9CiAgICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgLy8gVE9ETyB0ZXN0IHdoZXRoZXIgdGhpcyBhY3R1YWxseSBoZWxwcwogICAgICAgZ3V0dGVyLmlubmVySFRNTCA9IGh0bWwuam9pbigiIik7CkBAIC0xMzcxLDEwICsxMzc3LDggQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChvcHRpb24gPT0gInBhcnNlciIpIHNldFBhcnNlcih2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PT0gImxpbmVOdW1iZXJzIikgc2V0TGluZU51bWJlcnModmFsdWUpOwogICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJndXR0ZXIiKSBzZXRHdXR0ZXIodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJyZWFkT25seSIpIG9wdGlvbnMucmVhZE9ubHkgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiaW5kZW50VW5pdCIpIHtvcHRpb25zLmluZGVudFVuaXQgPSBpbmRlbnRVbml0ID0gdmFsdWU7IHNldFBhcnNlcihvcHRpb25zLnBhcnNlcik7fQotICAgICAgICBlbHNlIGlmICgvXig/OmVudGVyTW9kZXx0YWJNb2RlfGluZGVudFdpdGhUYWJzfHJlYWRPbmx5fGF1dG9NYXRjaEJyYWNrZXRzfHVuZG9EZXB0aCkkLy50ZXN0KG9wdGlvbikpIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlOwotICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigiQ2FuJ3Qgc2V0IG9wdGlvbiAiICsgb3B0aW9uKTsKKyAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiaW5kZW50VW5pdCIpIHtvcHRpb25zLmluZGVudFVuaXQgPSB2YWx1ZTsgc2V0UGFyc2VyKG9wdGlvbnMucGFyc2VyKTt9CisgICAgICAgIGVsc2Ugb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7CiAgICAgICB9LAogICAgICAgY3Vyc29yQ29vcmRzOiBjdXJzb3JDb29yZHMsCiAgICAgICB1bmRvOiBvcGVyYXRpb24odW5kbyksCkBAIC0xNDAyLDcgKzE0MDYsOCBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJlcGxhY2VSYW5nZTogb3BlcmF0aW9uKHJlcGxhY2VSYW5nZSksCiAKICAgICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIG9wZXJhdGlvbihmKSgpO30sCi0gICAgICByZWZyZXNoOiBmdW5jdGlvbigpe3VwZGF0ZURpc3BsYXkoW3tmcm9tOiAwLCB0bzogbGluZXMubGVuZ3RofV0pO30KKyAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCl7dXBkYXRlRGlzcGxheShbe2Zyb206IDAsIHRvOiBsaW5lcy5sZW5ndGh9XSk7fSwKKyAgICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIGlucHV0O30KICAgICB9OwogICAgIHJldHVybiBpbnN0YW5jZTsKICAgfQpAQCAtMTQyMCw2ICsxNDI1LDcgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmVhZE9ubHk6IGZhbHNlLAogICAgIG9uQ2hhbmdlOiBudWxsLAogICAgIG9uQ3Vyc29yQWN0aXZpdHk6IG51bGwsCisgICAgb25HdXR0ZXJDbGljazogbnVsbCwKICAgICBhdXRvTWF0Y2hCcmFja2V0czogZmFsc2UsCiAgICAgd29ya1RpbWU6IDIwMCwKICAgICB3b3JrRGVsYXk6IDMwMCwKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1kaWZmPC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/gfm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJnZm0iLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBtZE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAibWFya2Rvd24iKTsKICB2YXIgYWxpYXNlcyA9IHsKICAgIGh0bWw6ICJodG1sbWl4ZWQiLAogICAganM6ICJqYXZhc2NyaXB0IiwKICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgIGM6ICJ0ZXh0L3gtY3NyYyIsCiAgICAiYysrIjogInRleHQveC1jKytzcmMiLAogICAgamF2YTogInRleHQveC1qYXZhIiwKICAgIGNzaGFycDogInRleHQveC1jc2hhcnAiLAogICAgImMjIjogInRleHQveC1jc2hhcnAiLAogIH07CgogIC8vIG1ha2UgdGhpcyBsYXp5IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBsb2FkIEdGTSBsYXN0CiAgdmFyIGdldE1vZGUgPSAoZnVuY3Rpb24gKCkgewogICAgdmFyIGksIG1vZGVzID0ge30sIG1pbWVzID0ge30sIG1pbWU7CgogICAgdmFyIGxpc3QgPSBDb2RlTWlycm9yLmxpc3RNb2RlcygpOwogICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbW9kZXNbbGlzdFtpXV0gPSBsaXN0W2ldOwogICAgfQogICAgdmFyIG1pbWVzTGlzdCA9IENvZGVNaXJyb3IubGlzdE1JTUVzKCk7CiAgICBmb3IgKGkgPSAwOyBpIDwgbWltZXNMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIG1pbWUgPSBtaW1lc0xpc3RbaV0ubWltZTsKICAgICAgbWltZXNbbWltZV0gPSBtaW1lc0xpc3RbaV0ubWltZTsKICAgIH0KCiAgICBmb3IgKHZhciBhIGluIGFsaWFzZXMpIHsKICAgICAgaWYgKGFsaWFzZXNbYV0gaW4gbW9kZXMgfHwgYWxpYXNlc1thXSBpbiBtaW1lcykKICAgICAgICBtb2Rlc1thXSA9IGFsaWFzZXNbYV07CiAgICB9CiAgICAKICAgIHJldHVybiBmdW5jdGlvbiAobGFuZykgewogICAgICByZXR1cm4gbW9kZXNbbGFuZ10gPyBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtb2Rlc1tsYW5nXSkgOiBudWxsOwogICAgfQogIH0oKSk7CgogIGZ1bmN0aW9uIG1hcmtkb3duKHN0cmVhbSwgc3RhdGUpIHsKICAgIC8vIGludGVyY2VwdCBmZW5jZWQgY29kZSBibG9ja3MKICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKC9eYGBgKFtcdysjXSopLykpIHsKICAgICAgLy8gdHJ5IHN3aXRjaGluZyBtb2RlCiAgICAgIHN0YXRlLmxvY2FsTW9kZSA9IGdldE1vZGUoUmVnRXhwLiQxKQogICAgICBpZiAoc3RhdGUubG9jYWxNb2RlKQogICAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBzdGF0ZS5sb2NhbE1vZGUuc3RhcnRTdGF0ZSgpOwoKICAgICAgc3RhdGUudG9rZW4gPSBsb2NhbDsKICAgICAgcmV0dXJuICdjb2RlJzsKICAgIH0KCiAgICByZXR1cm4gbWRNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubWRTdGF0ZSk7CiAgfQoKICBmdW5jdGlvbiBsb2NhbChzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaCgvXmBgYC8pKSB7CiAgICAgIHN0YXRlLmxvY2FsTW9kZSA9IHN0YXRlLmxvY2FsU3RhdGUgPSBudWxsOwogICAgICBzdGF0ZS50b2tlbiA9IG1hcmtkb3duOwogICAgICByZXR1cm4gJ2NvZGUnOwogICAgfQogICAgZWxzZSBpZiAoc3RhdGUubG9jYWxNb2RlKSB7CiAgICAgIHJldHVybiBzdGF0ZS5sb2NhbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICdjb2RlJzsKICAgIH0KICB9CgogIC8vIGN1c3RvbSBoYW5kbGVUZXh0IHRvIHByZXZlbnQgZW1waGFzaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQKICAvLyBhbmQgYWRkIGF1dG9saW5raW5nCiAgZnVuY3Rpb24gaGFuZGxlVGV4dChzdHJlYW0sIG1kU3RhdGUpIHsKICAgIHZhciBtYXRjaDsKICAgIGlmIChzdHJlYW0ubWF0Y2goL15cdys6XC9cL1xTKy8pKSB7CiAgICAgIHJldHVybiAnbGlua2hyZWYnOwogICAgfQogICAgaWYgKHN0cmVhbS5tYXRjaCgvXlteXFsqXFw8PmAgX11bXlxbKlxcPD5gIF0qW15cWypcXDw+YCBfXS8pKSB7CiAgICAgIHJldHVybiBtZE1vZGUuZ2V0VHlwZShtZFN0YXRlKTsKICAgIH0KICAgIGlmIChtYXRjaCA9IHN0cmVhbS5tYXRjaCgvXlteXFsqXFw8PmAgXSsvKSkgewogICAgICB2YXIgd29yZCA9IG1hdGNoWzBdOwogICAgICBpZiAod29yZFswXSA9PT0gJ18nICYmIHdvcmRbd29yZC5sZW5ndGgtMV0gPT09ICdfJykgewogICAgICAgIHN0cmVhbS5iYWNrVXAod29yZC5sZW5ndGgpOwogICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG1kTW9kZS5nZXRUeXBlKG1kU3RhdGUpOwogICAgfQogICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWRTdGF0ZSA9IG1kTW9kZS5zdGFydFN0YXRlKCk7CiAgICAgIG1kU3RhdGUudGV4dCA9IGhhbmRsZVRleHQ7CiAgICAgIHJldHVybiB7dG9rZW46IG1hcmtkb3duLCBtb2RlOiAibWFya2Rvd24iLCBtZFN0YXRlOiBtZFN0YXRlLAogICAgICAgICAgICAgIGxvY2FsTW9kZTogbnVsbCwgbG9jYWxTdGF0ZTogbnVsbH07CiAgICB9LAoKICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgcmV0dXJuIHt0b2tlbjogc3RhdGUudG9rZW4sIG1vZGU6IHN0YXRlLm1vZGUsIG1kU3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKG1kTW9kZSwgc3RhdGUubWRTdGF0ZSksCiAgICAgICAgICAgICAgbG9jYWxNb2RlOiBzdGF0ZS5sb2NhbE1vZGUsCiAgICAgICAgICAgICAgbG9jYWxTdGF0ZTogc3RhdGUubG9jYWxNb2RlID8gQ29kZU1pcnJvci5jb3B5U3RhdGUoc3RhdGUubG9jYWxNb2RlLCBzdGF0ZS5sb2NhbFN0YXRlKSA6IG51bGx9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgfQp9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdGTSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbWFya2Rvd24vbWFya2Rvd24uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImdmbS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbWFya2Rvd24vbWFya2Rvd24uY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBHRk0gbW9kZTwvaDE+Cgo8IS0tIHNvdXJjZTogaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9iYXNpY3MudGV4dCAtLT4KPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KR2l0aHViIEZsYXZvcmVkIE1hcmtkb3duCj09PT09PT09PT09PT09PT09PT09PT09PQoKRXZlcnl0aGluZyBmcm9tIG1hcmtkb3duIHBsdXMgR0ZNIGZlYXR1cmVzOgoKIyMgRmVuY2VkIGNvZGUgYmxvY2tzCgpgYGBqYXZhc2NyaXB0CmZvciAodmFyIGkgPSAwOyBpICZsdDsgaXRlbXMubGVuZ3RoOyBpKyspIHsKICAgIGNvbnNvbGUubG9nKGl0ZW1zW2ldLCBpKTsgLy8gbG9nIHRoZW0KfQpgYGAKClNlZSBodHRwOi8vZ2l0aHViLmdpdGh1Yi5jb20vZ2l0aHViLWZsYXZvcmVkLW1hcmtkb3duLwoKPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiAnZ2ZtJywKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAiZGVmYXVsdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/groovy.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJncm9vdnkiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIGZ1bmN0aW9uIHdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIga2V5d29yZHMgPSB3b3JkcygKICAgICJhYnN0cmFjdCBhcyBhc3NlcnQgYm9vbGVhbiBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjbGFzcyBjb25zdCBjb250aW51ZSBkZWYgZGVmYXVsdCAiICsKICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCBpbiAiICsKICAgICJpbnN0YW5jZW9mIGludCBpbnRlcmZhY2UgbG9uZyBuYXRpdmUgbmV3IHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJldHVybiAiICsKICAgICJzaG9ydCBzdGF0aWMgc3RyaWN0ZnAgc3VwZXIgc3dpdGNoIHN5bmNocm9uaXplZCB0aHJlYWRzYWZlIHRocm93IHRocm93cyB0cmFuc2llbnQgIiArCiAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKTsKICB2YXIgYmxvY2tLZXl3b3JkcyA9IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN3aXRjaCB0cnkgd2hpbGUgZW51bSBpbnRlcmZhY2UgZGVmIik7CiAgdmFyIGF0b21zID0gd29yZHMoIm51bGwgdHJ1ZSBmYWxzZSB0aGlzIik7CgogIHZhciBjdXJQdW5jOwogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgcmV0dXJuIHN0YXJ0U3RyaW5nKGNoLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgvZUUvKSkgeyBzdHJlYW0uZWF0KC9cK1wtLyk7IHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsgfQogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuQ29tbWVudCk7CiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgICAgaWYgKGV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuKSkgewogICAgICAgIHJldHVybiBzdGFydFN0cmluZyhjaCwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjaCA9PSAiLSIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgIGN1clB1bmMgPSAiLT4iOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICgvWytcLSomJT08PiE/fFwvfl0vLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWytcLSomJT08Pnx+XS8pOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgaWYgKGNoID09ICJAIikgeyBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX1wuXS8pOyByZXR1cm4gIm1ldGEiOyB9CiAgICBpZiAoc3RhdGUubGFzdFRva2VuID09ICIuIikgcmV0dXJuICJwcm9wZXJ0eSI7CiAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7IGN1clB1bmMgPSAicHJvcGxhYmVsIjsgcmV0dXJuICJwcm9wZXJ0eSI7IH0KICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpOwogICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsgcmV0dXJuICJhdG9tIjsgfQogICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsKICAgICAgaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgY3VyUHVuYyA9ICJuZXdzdGF0ZW1lbnQiOwogICAgICByZXR1cm4gImtleXdvcmQiOwogICAgfQogICAgcmV0dXJuICJ3b3JkIjsKICB9CiAgdG9rZW5CYXNlLmlzQmFzZSA9IHRydWU7CgogIGZ1bmN0aW9uIHN0YXJ0U3RyaW5nKHF1b3RlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgdHJpcGxlUXVvdGVkID0gZmFsc2U7CiAgICBpZiAocXVvdGUgIT0gIi8iICYmIHN0cmVhbS5lYXQocXVvdGUpKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KHF1b3RlKSkgdHJpcGxlUXVvdGVkID0gdHJ1ZTsKICAgICAgZWxzZSByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBmdW5jdGlvbiB0KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gIXRyaXBsZVF1b3RlZDsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBpZiAoIXRyaXBsZVF1b3RlZCkgeyBicmVhazsgfQogICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChxdW90ZSArIHF1b3RlKSkgeyBlbmQgPSB0cnVlOyBicmVhazsgfQogICAgICAgIH0KICAgICAgICBpZiAocXVvdGUgPT0gJyInICYmIG5leHQgPT0gIiQiICYmICFlc2NhcGVkICYmIHN0cmVhbS5lYXQoInsiKSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkJhc2VVbnRpbEJyYWNlKCkpOwogICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQpIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHQpOwogICAgcmV0dXJuIHQoc3RyZWFtLCBzdGF0ZSk7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkJhc2VVbnRpbEJyYWNlKCkgewogICAgdmFyIGRlcHRoID0gMTsKICAgIGZ1bmN0aW9uIHQoc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAifSIpIHsKICAgICAgICBkZXB0aC0tOwogICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT0gInsiKSB7CiAgICAgICAgZGVwdGgrKzsKICAgICAgfQogICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgdC5pc0Jhc2UgPSB0cnVlOwogICAgcmV0dXJuIHQ7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBleHBlY3RFeHByZXNzaW9uKGxhc3QpIHsKICAgIHJldHVybiAhbGFzdCB8fCBsYXN0ID09ICJvcGVyYXRvciIgfHwgbGFzdCA9PSAiLT4iIHx8IC9bXC5cW1x7XCgsOzpdLy50ZXN0KGxhc3QpIHx8CiAgICAgIGxhc3QgPT0gIm5ld3N0YXRlbWVudCIgfHwgbGFzdCA9PSAia2V5d29yZCIgfHwgbGFzdCA9PSAicHJvcGxhYmVsIjsKICB9CgogIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHsKICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDsKICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMuYWxpZ24gPSBhbGlnbjsKICAgIHRoaXMucHJldiA9IHByZXY7CiAgfQogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlOwogICAgaWYgKHQgPT0gIikiIHx8IHQgPT0gIl0iIHx8IHQgPT0gIn0iKQogICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKICB9CgogIC8vIEludGVyZmFjZQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICByZXR1cm4gewogICAgICAgIHRva2VuaXplOiBbdG9rZW5CYXNlXSwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGNvbmZpZy5pbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLAogICAgICAgIGluZGVudGVkOiAwLAogICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlLAogICAgICAgIGxhc3RUb2tlbjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7CiAgICAgICAgLy8gQXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24KICAgICAgICBpZiAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgIWV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuKSkgewogICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7IGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIGN1clB1bmMgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAvLyBIYW5kbGUgaW5kZW50YXRpb24gZm9yIHt4IC0+IFxuIC4uLiB9CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIi0+IiAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdHgucHJldi50eXBlID09ICJ9IikgewogICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgIHN0YXRlLmNvbnRleHQuYWxpZ24gPSBmYWxzZTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJdIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IikgewogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkKICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAic3RhdGVtZW50Iik7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHN0YXRlLmxhc3RUb2tlbiA9IGN1clB1bmMgfHwgc3R5bGU7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmICghc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdLmlzQmFzZSkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiICYmICFleHBlY3RFeHByZXNzaW9uKHN0YXRlLmxhc3RUb2tlbikpIGN0eCA9IGN0eC5wcmV2OwogICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogY29uZmlnLmluZGVudFVuaXQpOwogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZ3Jvb3Z5IiwgImdyb292eSIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdyb292eSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iZ3Jvb3Z5LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM1MDA7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNTAwO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBHcm9vdnkgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovL1BhdHRlcm4gZm9yIGdyb292eSBzY3JpcHQKZGVmIHAgPSB+Ly4qXC5ncm9vdnkvCm5ldyBGaWxlKCAnZDpcXHNjcmlwdHMnICkuZWFjaEZpbGVNYXRjaChwKSB7ZiAtPgogIC8vIGltcG9ydHMgbGlzdAogIGRlZiBpbXBvcnRzID0gW10KICBmLmVhY2hMaW5lIHsKICAgIC8vIGNvbmRpdGlvbiB0byBkZXRlY3QgYW4gaW1wb3J0IGluc3RydWN0aW9uCiAgICBsbiAtPiBpZiAoIGxuID1+ICdeaW1wb3J0IC4qJyApIHsKICAgICAgaW1wb3J0cyA8PCAiJHtsbiAtICdpbXBvcnQgJ30iCiAgICB9CiAgfQogIC8vIHByaW50IHRobWVuCiAgaWYgKCAhIGltcG9ydHMuZW1wdHkgKSB7CiAgICBwcmludGxuIGYKICAgIGltcG9ydHMuZWFjaHsgcHJpbnRsbiAiICAgJGl0IiB9CiAgfQp9CgovKiBDb2luIGNoYW5nZXIgZGVtbyBjb2RlIGZyb20gaHR0cDovL2dyb292eS5jb2RlaGF1cy5vcmcgKi8KCmVudW0gVXNDb2luIHsKICBxdWFydGVyKDI1KSwgZGltZSgxMCksIG5pY2tlbCg1KSwgcGVubnkoMSkKICBVc0NvaW4odikgeyB2YWx1ZSA9IHYgfQogIGZpbmFsIHZhbHVlCn0KCmVudW0gT3p6aWVDb2luIHsKICBmaWZ0eSg1MCksIHR3ZW50eSgyMCksIHRlbigxMCksIGZpdmUoNSkKICBPenppZUNvaW4odikgeyB2YWx1ZSA9IHYgfQogIGZpbmFsIHZhbHVlCn0KCmRlZiBwbHVyYWwod29yZCwgY291bnQpIHsKICBpZiAoY291bnQgPT0gMSkgcmV0dXJuIHdvcmQKICB3b3JkWy0xXSA9PSAneScgPyB3b3JkWzAuLi0yXSArICJpZXMiIDogd29yZCArICJzIgp9CgpkZWYgY2hhbmdlKGN1cnJlbmN5LCBhbW91bnQpIHsKICBjdXJyZW5jeS52YWx1ZXMoKS5pbmplY3QoW10peyBsaXN0LCBjb2luIC0+CiAgICAgaW50IGNvdW50ID0gYW1vdW50IC8gY29pbi52YWx1ZQogICAgIGFtb3VudCA9IGFtb3VudCAlIGNvaW4udmFsdWUKICAgICBsaXN0ICs9ICIkY291bnQgJHtwbHVyYWwoY29pbi50b1N0cmluZygpLCBjb3VudCl9IgogIH0KfQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1ncm9vdnkiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1ncm9vdnk8L2NvZGU+PC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhhc2tlbGwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imhhc2tlbGwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogSGFza2VsbCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Cm1vZHVsZSBVbmlxdWVQZXJtcyAoCiAgICB1bmlxdWVQZXJtcwogICAgKQp3aGVyZQoKLS0gfCBGaW5kIGFsbCB1bmlxdWUgcGVybXV0YXRpb25zIG9mIGEgbGlzdCB3aGVyZSB0aGVyZSBtaWdodCBiZSBkdXBsaWNhdGVzLgp1bmlxdWVQZXJtcyA6OiAoRXEgYSkgPT4gW2FdIC0+IFtbYV1dCnVuaXF1ZVBlcm1zID0gcGVybUJhZyAuIG1ha2VCYWcKCi0tIHwgQW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24gd2hlcmUgZHVwbGljYXRlIHZhbHVlcyBhcmUgYWxsb3dlZCwKLS0gYnV0IHJlcHJlc2VudGVkIHdpdGggYSBzaW5nbGUgdmFsdWUgYW5kIGEgY291bnQuCnR5cGUgQmFnIGEgPSBbKGEsIEludCldCgptYWtlQmFnIDo6IChFcSBhKSA9PiBbYV0gLT4gQmFnIGEKbWFrZUJhZyBbXSA9IFtdCm1ha2VCYWcgKGE6YXMpID0gbWl4IGEgJCBtYWtlQmFnIGFzCiAgd2hlcmUKICAgIG1peCBhIFtdICAgICAgICAgICAgICAgICAgICAgICAgPSBbKGEsMSldCiAgICBtaXggYSAoYm5AKGIsbik6YnMpIHwgYSA9PSBiICAgID0gKGIsbisxKTpicwogICAgICAgICAgICAgICAgICAgICAgICB8IG90aGVyd2lzZSA9IGJuIDogbWl4IGEgYnMKCnBlcm1CYWcgOjogQmFnIGEgLT4gW1thXV0KcGVybUJhZyBbXSA9IFtbXV0KcGVybUJhZyBicyA9IGNvbmNhdE1hcCAoXChmLGNzKSAtPiBtYXAgKGY6KSAkIHBlcm1CYWcgY3MpIC4gb25lT2ZFYWNoICQgYnMKICB3aGVyZQogICAgb25lT2ZFYWNoIFtdID0gW10KICAgIG9uZU9mRWFjaCAoYW5AKGEsbik6YnMpID0KICAgICAgICBsZXQgYnMnID0gaWYgbiA9PSAxIHRoZW4gYnMgZWxzZSAoYSxuLTEpOmJzCiAgICAgICAgaW4gKGEsYnMnKSA6IG1hcFNuZCAoYW46KSAob25lT2ZFYWNoIGJzKQogICAgCiAgICBhcFNuZCBmIChhLGIpID0gKGEsIGYgYikKICAgIG1hcFNuZCA9IG1hcCAuIGFwU25kCjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogImVsZWdhbnQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1oYXNrZWxsPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/htmlembedded.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sZW1iZWRkZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIAogIC8vY29uZmlnIHNldHRpbmdzCiAgdmFyIHNjcmlwdFN0YXJ0UmVnZXggPSBwYXJzZXJDb25maWcuc2NyaXB0U3RhcnRSZWdleCB8fCAvXjwlL2ksCiAgICAgIHNjcmlwdEVuZFJlZ2V4ID0gcGFyc2VyQ29uZmlnLnNjcmlwdEVuZFJlZ2V4IHx8IC9eJT4vaTsKICAKICAvL2lubmVyIG1vZGVzCiAgdmFyIHNjcmlwdGluZ01vZGUsIGh0bWxNaXhlZE1vZGU7CiAgCiAgLy90b2tlbml6ZXIgd2hlbiBpbiBodG1sIG1vZGUKICBmdW5jdGlvbiBodG1sRGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHNjcmlwdFN0YXJ0UmVnZXgsIGZhbHNlKSkgewogICAgICAgICAgc3RhdGUudG9rZW49c2NyaXB0aW5nRGlzcGF0Y2g7CiAgICAgICAgICByZXR1cm4gc2NyaXB0aW5nTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLnNjcmlwdFN0YXRlKTsKICAgICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGh0bWxNaXhlZE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwogICAgfQoKICAvL3Rva2VuaXplciB3aGVuIGluIHNjcmlwdGluZyBtb2RlCiAgZnVuY3Rpb24gc2NyaXB0aW5nRGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHNjcmlwdEVuZFJlZ2V4LCBmYWxzZSkpICB7CiAgICAgICAgICBzdGF0ZS50b2tlbj1odG1sRGlzcGF0Y2g7CiAgICAgICAgICByZXR1cm4gaHRtbE1peGVkTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHNjcmlwdGluZ01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5zY3JpcHRTdGF0ZSk7CiAgICAgICAgIH0KCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgc2NyaXB0aW5nTW9kZSA9IHNjcmlwdGluZ01vZGUgfHwgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLnNjcmlwdGluZ01vZGVTcGVjKTsKICAgICAgaHRtbE1peGVkTW9kZSA9IGh0bWxNaXhlZE1vZGUgfHwgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImh0bWxtaXhlZCIpOwogICAgICByZXR1cm4geyAKICAgICAgICAgIHRva2VuIDogIHBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBzY3JpcHRpbmdEaXNwYXRjaCA6IGh0bWxEaXNwYXRjaCwKICAgICAgICAgIGh0bWxTdGF0ZSA6IGh0bWxNaXhlZE1vZGUuc3RhcnRTdGF0ZSgpLAogICAgICAgICAgc2NyaXB0U3RhdGUgOiBzY3JpcHRpbmdNb2RlLnN0YXJ0U3RhdGUoKQogICAgICAgICAgfQogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW4gPT0gaHRtbERpc3BhdGNoKQogICAgICAgIHJldHVybiBodG1sTWl4ZWRNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsIHRleHRBZnRlcik7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gc2NyaXB0aW5nTW9kZS5pbmRlbnQoc3RhdGUuc2NyaXB0U3RhdGUsIHRleHRBZnRlcik7CiAgICB9LAogICAgCiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgIHJldHVybiB7CiAgICAgICB0b2tlbiA6IHN0YXRlLnRva2VuLAogICAgICAgaHRtbFN0YXRlIDogQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1peGVkTW9kZSwgc3RhdGUuaHRtbFN0YXRlKSwKICAgICAgIHNjcmlwdFN0YXRlIDogQ29kZU1pcnJvci5jb3B5U3RhdGUoc2NyaXB0aW5nTW9kZSwgc3RhdGUuc2NyaXB0U3RhdGUpCiAgICAgICB9CiAgICB9LAogICAgCgogICAgZWxlY3RyaWNDaGFyczogIi97fToiCiAgfQp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1lanMiLCB7IG5hbWU6ICJodG1sZW1iZWRkZWQiLCBzY3JpcHRpbmdNb2RlU3BlYzoiamF2YXNjcmlwdCJ9KTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWFzcHgiLCB7IG5hbWU6ICJodG1sZW1iZWRkZWQiLCBzY3JpcHRpbmdNb2RlU3BlYzoidGV4dC94LWNzaGFycCJ9KTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWpzcCIsIHsgbmFtZTogImh0bWxlbWJlZGRlZCIsIHNjcmlwdGluZ01vZGVTcGVjOiJ0ZXh0L3gtamF2YSJ9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEh0bWwgRW1iZWRkZWQgU2NyaXB0cyBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodG1sZW1iZWRkZWQuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEh0bWwgRW1iZWRkZWQgU2NyaXB0cyBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CjwlCmZ1bmN0aW9uIGhlbGxvKHdobykgewoJcmV0dXJuICJIZWxsbyAiICsgd2hvOwp9CiU+ClRoaXMgaXMgYW4gZXhhbXBsZSBvZiBFSlMgKGVtYmVkZGVkIGphdmFzY3JpcHQpCjxwPlRoZSBwcm9ncmFtIHNheXMgPCU9IGhlbGxvKCJ3b3JsZCIpICU+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIG5vcm1hbCBKUyBjb2RlIik7IC8vIGFsc28gY29sb3JlZAo8L3NjcmlwdD4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJhcHBsaWNhdGlvbi94LWVqcyIsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBpbmRlbnRXaXRoVGFiczogdHJ1ZSwKICAgICAgICBlbnRlck1vZGU6ICJrZWVwIiwKICAgICAgICB0YWJNb2RlOiAic2hpZnQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+TW9kZSBmb3IgaHRtbCBlbWJlZGRlZCBzY3JpcHRzIGxpa2UgSlNQIGFuZCBBU1AuTkVULiBEZXBlbmRzIG9uIEh0bWxNaXhlZCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24KICAgIEphdmFTY3JpcHQsIENTUyBhbmQgWE1MLjxiciAvPk90aGVyIGRlcGVuZGFuY2llcyBpbmNsdWRlIHRob3NlIG9mIHRoZSBzY3JpcGluZyBsYW5ndWFnZSBjaG9zZW4uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94LWFzcHg8L2NvZGU+IChBU1AuTkVUKSwgCiAgICA8Y29kZT5hcHBsaWNhdGlvbi94LWVqczwvY29kZT4gKEVtYmVkZGVkIEphdmFzY3JpcHQpLCA8Y29kZT5hcHBsaWNhdGlvbi94LWpzcDwvY29kZT4gKEphdmFTZXJ2ZXIgUGFnZXMpPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></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+LywKICAgICAgICAgICAgICAgICAgICAgICBjc3NNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUubG9jYWxTdGF0ZSkpOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhdGUgPSBodG1sTW9kZS5zdGFydFN0YXRlKCk7CiAgICAgIHJldHVybiB7dG9rZW46IGh0bWwsIGxvY2FsU3RhdGU6IG51bGwsIG1vZGU6ICJodG1sIiwgaHRtbFN0YXRlOiBzdGF0ZX07CiAgICB9LAoKICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgaWYgKHN0YXRlLmxvY2FsU3RhdGUpCiAgICAgICAgdmFyIGxvY2FsID0gQ29kZU1pcnJvci5jb3B5U3RhdGUoc3RhdGUudG9rZW4gPT0gY3NzID8gY3NzTW9kZSA6IGpzTW9kZSwgc3RhdGUubG9jYWxTdGF0ZSk7CiAgICAgIHJldHVybiB7dG9rZW46IHN0YXRlLnRva2VuLCBsb2NhbFN0YXRlOiBsb2NhbCwgbW9kZTogc3RhdGUubW9kZSwKICAgICAgICAgICAgICBodG1sU3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKGh0bWxNb2RlLCBzdGF0ZS5odG1sU3RhdGUpfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuID09IGh0bWwgfHwgL15ccyo8XC8vLnRlc3QodGV4dEFmdGVyKSkKICAgICAgICByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgdGV4dEFmdGVyKTsKICAgICAgZWxzZSBpZiAoc3RhdGUudG9rZW4gPT0gamF2YXNjcmlwdCkKICAgICAgICByZXR1cm4ganNNb2RlLmluZGVudChzdGF0ZS5sb2NhbFN0YXRlLCB0ZXh0QWZ0ZXIpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGNzc01vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlcik7CiAgICB9LAoKICAgIGNvbXBhcmVTdGF0ZXM6IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgcmV0dXJuIGh0bWxNb2RlLmNvbXBhcmVTdGF0ZXMoYS5odG1sU3RhdGUsIGIuaHRtbFN0YXRlKTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogIi97fToiCiAgfQp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIiwgImh0bWxtaXhlZCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhUTUwgbWl4ZWQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEhUTUwgbWl4ZWQgbW9kZTwvaDE+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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEphdmFTY3JpcHQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImphdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEphdmFTY3JpcHQgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZSAodGhlIGFjdHVhbCBuZXcgcGFyc2VyIGNoYXJhY3RlciBzdHJlYW0gaW1wbGVtZW50YXRpb24pCgpmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyaW5nKSB7CiAgdGhpcy5wb3MgPSAwOwogIHRoaXMuc3RyaW5nID0gc3RyaW5nOwp9CgpTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewogIGRvbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTt9LAogIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMucG9zICZsdDsgdGhpcy5zdHJpbmcubGVuZ3RoKQogICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOwogIH0sCiAgZWF0OiBmdW5jdGlvbihtYXRjaCkgewogICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOwogICAgZWxzZSB2YXIgb2sgPSBjaCAmYW1wOyZhbXA7IG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKTsKICAgIGlmIChvaykge3RoaXMucG9zKys7IHJldHVybiBjaDt9CiAgfSwKICBlYXRXaGlsZTogZnVuY3Rpb24obWF0Y2gpIHsKICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSk7CiAgICBpZiAodGhpcy5wb3MgPiBzdGFydCkgcmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHN0YXJ0LCB0aGlzLnBvcyk7CiAgfSwKICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCiAgY29sdW1uOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3M7fSwKICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgIHdoaWxlICgvXHMvLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHRoaXMucG9zKys7CiAgICByZXR1cm4gdGhpcy5wb3MgLSBzdGFydDsKICB9LAogIG1hdGNoOiBmdW5jdGlvbihwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHsKICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICBmdW5jdGlvbiBjYXNlZChzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fQogICAgICBpZiAoY2FzZWQodGhpcy5zdHJpbmcpLmluZGV4T2YoY2FzZWQocGF0dGVybiksIHRoaXMucG9zKSA9PSB0aGlzLnBvcykgewogICAgICAgIGlmIChjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gc3RyLmxlbmd0aDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTsKICAgICAgaWYgKG1hdGNoICZhbXA7JmFtcDsgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgcmV0dXJuIG1hdGNoOwogICAgfQogIH0KfTsKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5KYXZhU2NyaXB0IG1vZGUgc3VwcG9ydHMgYSBzaW5nbGUgY29uZmlndXJhdGlvbgogICAgb3B0aW9uLCA8Y29kZT5qc29uPC9jb2RlPiwgd2hpY2ggd2lsbCBzZXQgdGhlIG1vZGUgdG8gZXhwZWN0IEpTT04KICAgIGRhdGEgcmF0aGVyIHRoYW4gYSBKYXZhU2NyaXB0IHByb2dyYW0uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2phdmFzY3JpcHQ8L2NvZGU+LCA8Y29kZT5hcHBsaWNhdGlvbi9qc29uPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZpZy5qc29uOwoKICAvLyBUb2tlbml6ZXIKCiAgdmFyIGtleXdvcmRzID0gZnVuY3Rpb24oKXsKICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiAia2V5d29yZCJ9O30KICAgIHZhciBBID0ga3coImtleXdvcmQgYSIpLCBCID0ga3coImtleXdvcmQgYiIpLCBDID0ga3coImtleXdvcmQgYyIpOwogICAgdmFyIG9wZXJhdG9yID0ga3coIm9wZXJhdG9yIiksIGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifTsKICAgIHJldHVybiB7CiAgICAgICJpZiI6IEEsICJ3aGlsZSI6IEEsICJ3aXRoIjogQSwgImVsc2UiOiBCLCAiZG8iOiBCLCAidHJ5IjogQiwgImZpbmFsbHkiOiBCLAogICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVlIjogQywgIm5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLAogICAgICAidmFyIjoga3coInZhciIpLCAiY29uc3QiOiBrdygidmFyIiksICJsZXQiOiBrdygidmFyIiksCiAgICAgICJmdW5jdGlvbiI6IGt3KCJmdW5jdGlvbiIpLCAiY2F0Y2giOiBrdygiY2F0Y2giKSwKICAgICAgImZvciI6IGt3KCJmb3IiKSwgInN3aXRjaCI6IGt3KCJzd2l0Y2giKSwgImNhc2UiOiBrdygiY2FzZSIpLCAiZGVmYXVsdCI6IGt3KCJkZWZhdWx0IiksCiAgICAgICJpbiI6IG9wZXJhdG9yLCAidHlwZW9mIjogb3BlcmF0b3IsICJpbnN0YW5jZW9mIjogb3BlcmF0b3IsCiAgICAgICJ0cnVlIjogYXRvbSwgImZhbHNlIjogYXRvbSwgIm51bGwiOiBhdG9tLCAidW5kZWZpbmVkIjogYXRvbSwgIk5hTiI6IGF0b20sICJJbmZpbml0eSI6IGF0b20KICAgIH07CiAgfSgpOwoKICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fF0vOwoKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sIGVuZCkgewogICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dDsKICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgaWYgKG5leHQgPT0gZW5kICYmICFlc2NhcGVkKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgIH0KICAgIHJldHVybiBlc2NhcGVkOwogIH0KCiAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlcyB0byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dAogIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgogIHZhciB0eXBlLCBjb250ZW50OwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUsIGNvbnQpIHsKICAgIHR5cGUgPSB0cDsgY29udGVudCA9IGNvbnQ7CiAgICByZXR1cm4gc3R5bGU7CiAgfQoKICBmdW5jdGlvbiBqc1Rva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuU3RyaW5nKGNoKSk7CiAgICBlbHNlIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkKICAgICAgcmV0dXJuIHJldChjaCk7CiAgICBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFtLmVhdCgveC9pKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcZGEtZl0vaSk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKICAgIH0gICAgICAKICAgIGVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXGQqKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy8pOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiLyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuQ29tbWVudCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlLnJlQWxsb3dlZCkgewogICAgICAgIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sICIvIik7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8gJ3knIGlzICJzdGlja3kiIG9wdGlvbiBpbiBNb3ppbGxhCiAgICAgICAgcmV0dXJuIHJldCgicmVnZXhwIiwgInN0cmluZyIpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBudWxsLCBzdHJlYW0uY3VycmVudCgpKTsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIiMiKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiByZXQoImVycm9yIiwgImVycm9yIik7CiAgICB9CiAgICBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsIG51bGwsIHN0cmVhbS5jdXJyZW50KCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCksIGtub3duID0ga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkgJiYga2V5d29yZHNbd29yZF07CiAgICAgIHJldHVybiAoa25vd24gJiYgc3RhdGUua3dBbGxvd2VkKSA/IHJldChrbm93bi50eXBlLCBrbm93bi5zdHlsZSwgd29yZCkgOgogICAgICAgICAgICAgICAgICAgICByZXQoInZhcmlhYmxlIiwgInZhcmlhYmxlIiwgd29yZCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBqc1Rva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoIW5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sIHF1b3RlKSkKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwogICAgICByZXR1cm4gcmV0KCJzdHJpbmciLCAic3RyaW5nIik7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24ganNUb2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICAvLyBQYXJzZXIKCiAgdmFyIGF0b21pY1R5cGVzID0geyJhdG9tIjogdHJ1ZSwgIm51bWJlciI6IHRydWUsICJ2YXJpYWJsZSI6IHRydWUsICJzdHJpbmciOiB0cnVlLCAicmVnZXhwIjogdHJ1ZX07CgogIGZ1bmN0aW9uIEpTTGV4aWNhbChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldiwgaW5mbykgewogICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkOwogICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CiAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy5wcmV2ID0gcHJldjsKICAgIHRoaXMuaW5mbyA9IGluZm87CiAgICBpZiAoYWxpZ24gIT0gbnVsbCkgdGhpcy5hbGlnbiA9IGFsaWduOwogIH0KCiAgZnVuY3Rpb24gaW5TY29wZShzdGF0ZSwgdmFybmFtZSkgewogICAgZm9yICh2YXIgdiA9IHN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dCkKICAgICAgaWYgKHYubmFtZSA9PSB2YXJuYW1lKSByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlSlMoc3RhdGUsIHN0eWxlLCB0eXBlLCBjb250ZW50LCBzdHJlYW0pIHsKICAgIHZhciBjYyA9IHN0YXRlLmNjOwogICAgLy8gQ29tbXVuaWNhdGUgb3VyIGNvbnRleHQgdG8gdGhlIGNvbWJpbmF0b3JzLgogICAgLy8gKExlc3Mgd2FzdGVmdWwgdGhhbiBjb25zaW5nIHVwIGEgaHVuZHJlZCBjbG9zdXJlcyBvbiBldmVyeSBjYWxsLikKICAgIGN4LnN0YXRlID0gc3RhdGU7IGN4LnN0cmVhbSA9IHN0cmVhbTsgY3gubWFya2VkID0gbnVsbCwgY3guY2MgPSBjYzsKICAKICAgIGlmICghc3RhdGUubGV4aWNhbC5oYXNPd25Qcm9wZXJ0eSgiYWxpZ24iKSkKICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IHRydWU7CgogICAgd2hpbGUodHJ1ZSkgewogICAgICB2YXIgY29tYmluYXRvciA9IGNjLmxlbmd0aCA/IGNjLnBvcCgpIDoganNvbk1vZGUgPyBleHByZXNzaW9uIDogc3RhdGVtZW50OwogICAgICBpZiAoY29tYmluYXRvcih0eXBlLCBjb250ZW50KSkgewogICAgICAgIHdoaWxlKGNjLmxlbmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpCiAgICAgICAgICBjYy5wb3AoKSgpOwogICAgICAgIGlmIChjeC5tYXJrZWQpIHJldHVybiBjeC5tYXJrZWQ7CiAgICAgICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIiAmJiBpblNjb3BlKHN0YXRlLCBjb250ZW50KSkgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgICByZXR1cm4gc3R5bGU7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIENvbWJpbmF0b3IgdXRpbHMKCiAgdmFyIGN4ID0ge3N0YXRlOiBudWxsLCBjb2x1bW46IG51bGwsIG1hcmtlZDogbnVsbCwgY2M6IG51bGx9OwogIGZ1bmN0aW9uIHBhc3MoKSB7CiAgICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBjeC5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgfQogIGZ1bmN0aW9uIGNvbnQoKSB7CiAgICBwYXNzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgZnVuY3Rpb24gcmVnaXN0ZXIodmFybmFtZSkgewogICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CiAgICBpZiAoc3RhdGUuY29udGV4dCkgewogICAgICBjeC5tYXJrZWQgPSAiZGVmIjsKICAgICAgZm9yICh2YXIgdiA9IHN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dCkKICAgICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybjsKICAgICAgc3RhdGUubG9jYWxWYXJzID0ge25hbWU6IHZhcm5hbWUsIG5leHQ6IHN0YXRlLmxvY2FsVmFyc307CiAgICB9CiAgfQoKICAvLyBDb21iaW5hdG9ycwoKICB2YXIgZGVmYXVsdFZhcnMgPSB7bmFtZTogInRoaXMiLCBuZXh0OiB7bmFtZTogImFyZ3VtZW50cyJ9fTsKICBmdW5jdGlvbiBwdXNoY29udGV4dCgpIHsKICAgIGlmICghY3guc3RhdGUuY29udGV4dCkgY3guc3RhdGUubG9jYWxWYXJzID0gZGVmYXVsdFZhcnM7CiAgICBjeC5zdGF0ZS5jb250ZXh0ID0ge3ByZXY6IGN4LnN0YXRlLmNvbnRleHQsIHZhcnM6IGN4LnN0YXRlLmxvY2FsVmFyc307CiAgfQogIGZ1bmN0aW9uIHBvcGNvbnRleHQoKSB7CiAgICBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBjeC5zdGF0ZS5jb250ZXh0LnZhcnM7CiAgICBjeC5zdGF0ZS5jb250ZXh0ID0gY3guc3RhdGUuY29udGV4dC5wcmV2OwogIH0KICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHsKICAgIHZhciByZXN1bHQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CiAgICAgIHN0YXRlLmxleGljYWwgPSBuZXcgSlNMZXhpY2FsKHN0YXRlLmluZGVudGVkLCBjeC5zdHJlYW0uY29sdW1uKCksIHR5cGUsIG51bGwsIHN0YXRlLmxleGljYWwsIGluZm8pCiAgICB9OwogICAgcmVzdWx0LmxleCA9IHRydWU7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiBwb3BsZXgoKSB7CiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKICAgIGlmIChzdGF0ZS5sZXhpY2FsLnByZXYpIHsKICAgICAgaWYgKHN0YXRlLmxleGljYWwudHlwZSA9PSAiKSIpCiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5sZXhpY2FsLmluZGVudGVkOwogICAgICBzdGF0ZS5sZXhpY2FsID0gc3RhdGUubGV4aWNhbC5wcmV2OwogICAgfQogIH0KICBwb3BsZXgubGV4ID0gdHJ1ZTsKCiAgZnVuY3Rpb24gZXhwZWN0KHdhbnRlZCkgewogICAgcmV0dXJuIGZ1bmN0aW9uIGV4cGVjdGluZyh0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IHdhbnRlZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgZWxzZSBpZiAod2FudGVkID09ICI7IikgcmV0dXJuIHBhc3MoKTsKICAgICAgZWxzZSByZXR1cm4gY29udChhcmd1bWVudHMuY2FsbGVlKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBzdGF0ZW1lbnQodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInZhciIpIHJldHVybiBjb250KHB1c2hsZXgoInZhcmRlZiIpLCB2YXJkZWYxLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGEiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24sIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGIiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBibG9jaywgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoKTsKICAgIGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cGVjdCgiKCIpLCBwdXNobGV4KCIpIiksIGZvcnNwZWMxLCBleHBlY3QoIikiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BsZXgsIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQiKSwgbWF5YmVsYWJlbCk7CiAgICBpZiAodHlwZSA9PSAic3dpdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBwdXNobGV4KCJ9IiwgInN3aXRjaCIpLCBleHBlY3QoInsiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImNhc2UiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3QoIjoiKSk7CiAgICBpZiAodHlwZSA9PSAiZGVmYXVsdCIpIHJldHVybiBjb250KGV4cGVjdCgiOiIpKTsKICAgIGlmICh0eXBlID09ICJjYXRjaCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgcHVzaGNvbnRleHQsIGV4cGVjdCgiKCIpLCBmdW5hcmcsIGV4cGVjdCgiKSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LCBwb3BsZXgsIHBvcGNvbnRleHQpOwogICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHByZXNzaW9uLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKICB9CiAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlKSB7CiAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwogICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYyIpIHJldHVybiBjb250KG1heWJlZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCIpIiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBjb21tYXNlcChleHByZXNzaW9uLCAiXSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGNvbW1hc2VwKG9ianByb3AsICJ9IiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7CiAgICByZXR1cm4gY29udCgpOwogIH0KICBmdW5jdGlvbiBtYXliZWV4cHJlc3Npb24odHlwZSkgewogICAgaWYgKHR5cGUubWF0Y2goL1s7XH1cKVxdLF0vKSkgcmV0dXJuIHBhc3MoKTsKICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwogIH0KICAgIAogIGZ1bmN0aW9uIG1heWJlb3BlcmF0b3IodHlwZSwgdmFsdWUpIHsKICAgIGlmICh0eXBlID09ICJvcGVyYXRvciIgJiYgL1wrXCt8LS0vLnRlc3QodmFsdWUpKSByZXR1cm4gY29udChtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJvcGVyYXRvciIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm47CiAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgY29tbWFzZXAoZXhwcmVzc2lvbiwgIikiKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICIuIikgcmV0dXJuIGNvbnQocHJvcGVydHksIG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIGV4cHJlc3Npb24sIGV4cGVjdCgiXSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogIH0KICBmdW5jdGlvbiBtYXliZWxhYmVsKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQocG9wbGV4LCBzdGF0ZW1lbnQpOwogICAgcmV0dXJuIHBhc3MobWF5YmVvcGVyYXRvciwgZXhwZWN0KCI7IiksIHBvcGxleCk7CiAgfQogIGZ1bmN0aW9uIHByb3BlcnR5KHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHtjeC5tYXJrZWQgPSAicHJvcGVydHkiOyByZXR1cm4gY29udCgpO30KICB9CiAgZnVuY3Rpb24gb2JqcHJvcCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSBjeC5tYXJrZWQgPSAicHJvcGVydHkiOwogICAgaWYgKGF0b21pY1R5cGVzLmhhc093blByb3BlcnR5KHR5cGUpKSByZXR1cm4gY29udChleHBlY3QoIjoiKSwgZXhwcmVzc2lvbik7CiAgfQogIGZ1bmN0aW9uIGNvbW1hc2VwKHdoYXQsIGVuZCkgewogICAgZnVuY3Rpb24gcHJvY2VlZCh0eXBlKSB7CiAgICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQod2hhdCwgcHJvY2VlZCk7CiAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgcmV0dXJuIGNvbnQoZXhwZWN0KGVuZCkpOwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uIGNvbW1hU2VwYXJhdGVkKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpOwogICAgICBlbHNlIHJldHVybiBwYXNzKHdoYXQsIHByb2NlZWQpOwogICAgfTsKICB9CiAgZnVuY3Rpb24gYmxvY2sodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIHBhc3Moc3RhdGVtZW50LCBibG9jayk7CiAgfQogIGZ1bmN0aW9uIHZhcmRlZjEodHlwZSwgdmFsdWUpIHsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpe3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQodmFyZGVmMik7fQogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gdmFyZGVmMih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID09ICI9IikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgdmFyZGVmMik7CiAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHZhcmRlZjEpOwogIH0KICBmdW5jdGlvbiBmb3JzcGVjMSh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyIikgcmV0dXJuIGNvbnQodmFyZGVmMSwgZm9yc3BlYzIpOwogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gcGFzcyhmb3JzcGVjMik7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSByZXR1cm4gY29udChmb3JtYXliZWluKTsKICAgIHJldHVybiBwYXNzKGZvcnNwZWMyKTsKICB9CiAgZnVuY3Rpb24gZm9ybWF5YmVpbih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID09ICJpbiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvciwgZm9yc3BlYzIpOwogIH0KICBmdW5jdGlvbiBmb3JzcGVjMih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udChmb3JzcGVjMyk7CiAgICBpZiAodmFsdWUgPT0gImluIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CiAgICByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3QoIjsiKSwgZm9yc3BlYzMpOwogIH0KICBmdW5jdGlvbiBmb3JzcGVjMyh0eXBlKSB7CiAgICBpZiAodHlwZSAhPSAiKSIpIGNvbnQoZXhwcmVzc2lvbik7CiAgfQogIGZ1bmN0aW9uIGZ1bmN0aW9uZGVmKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udChmdW5jdGlvbmRlZik7fQogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIHB1c2hjb250ZXh0LCBjb21tYXNlcChmdW5hcmcsICIpIiksIHBvcGxleCwgc3RhdGVtZW50LCBwb3Bjb250ZXh0KTsKICB9CiAgZnVuY3Rpb24gZnVuYXJnKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udCgpO30KICB9CgogIC8vIEludGVyZmFjZQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICByZXR1cm4gewogICAgICAgIHRva2VuaXplOiBqc1Rva2VuQmFzZSwKICAgICAgICByZUFsbG93ZWQ6IHRydWUsCiAgICAgICAga3dBbGxvd2VkOiB0cnVlLAogICAgICAgIGNjOiBbXSwKICAgICAgICBsZXhpY2FsOiBuZXcgSlNMZXhpY2FsKChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgImJsb2NrIiwgZmFsc2UpLAogICAgICAgIGxvY2FsVmFyczogbnVsbCwKICAgICAgICBjb250ZXh0OiBudWxsLAogICAgICAgIGluZGVudGVkOiAwCiAgICAgIH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoImFsaWduIikpCiAgICAgICAgICBzdGF0ZS5sZXhpY2FsLmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHR5cGUgPT0gImNvbW1lbnQiKSByZXR1cm4gc3R5bGU7CiAgICAgIHN0YXRlLnJlQWxsb3dlZCA9IHR5cGUgPT0gIm9wZXJhdG9yIiB8fCB0eXBlID09ICJrZXl3b3JkIGMiIHx8IHR5cGUubWF0Y2goL15bXFt7fVwoLDs6XSQvKTsKICAgICAgc3RhdGUua3dBbGxvd2VkID0gdHlwZSAhPSAnLic7CiAgICAgIHJldHVybiBwYXJzZUpTKHN0YXRlLCBzdHlsZSwgdHlwZSwgY29udGVudCwgc3RyZWFtKTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSBqc1Rva2VuQmFzZSkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWwsCiAgICAgICAgICB0eXBlID0gbGV4aWNhbC50eXBlLCBjbG9zaW5nID0gZmlyc3RDaGFyID09IHR5cGU7CiAgICAgIGlmICh0eXBlID09ICJ2YXJkZWYiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIDQ7CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iICYmIGZpcnN0Q2hhciA9PSAieyIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkOwogICAgICBlbHNlIGlmICh0eXBlID09ICJzdGF0IiB8fCB0eXBlID09ICJmb3JtIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0OwogICAgICBlbHNlIGlmIChsZXhpY2FsLmluZm8gPT0gInN3aXRjaCIgJiYgIWNsb3NpbmcpCiAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoL14oPzpjYXNlfGRlZmF1bHQpXGIvLnRlc3QodGV4dEFmdGVyKSA/IGluZGVudFVuaXQgOiAyICogaW5kZW50VW5pdCk7CiAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICI6e30iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vanNvbiIsIHtuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEppbmphMiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iamluamEyLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBKaW5qYTIgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIiZndDsKICAmbHQ7IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tJmd0OwogICZsdDtoZWFkJmd0OwogICAgJmx0O3RpdGxlJmd0O0ppbmphMiBFeGFtcGxlJmx0Oy90aXRsZSZndDsKICAmbHQ7L2hlYWQmZ3Q7CiAgJmx0O2JvZHkmZ3Q7CiAgICAmbHQ7dWwmZ3Q7CiAgICB7IyB0aGlzIGlzIGEgY29tbWVudCAjfQogICAgeyUtIGZvciBpdGVtIGluIGxpIC0lfQogICAgICAmbHQ7bGkmZ3Q7CiAgICAgICAge3sgaXRlbS5sYWJlbCB9fQogICAgICAmbHQ7L2xpJmd0OwogICAgeyUgZW5kZm9yIC0lfQogICAgJmx0Oy91bCZndDsKICAmbHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDsKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0KICAgICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6CiAgICAgICAge25hbWU6ICJqaW5qYTIiLCBodG1sTW9kZTogdHJ1ZX19KTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/jinja2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqaW5qYTIiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmYpIHsKICAgIHZhciBrZXl3b3JkcyA9IFsiYmxvY2siLCAiZW5kYmxvY2siLCAiZm9yIiwgImVuZGZvciIsICJpbiIsICJ0cnVlIiwgImZhbHNlIiwgCiAgICAgICAgICAgICAgICAgICAgImxvb3AiLCAibm9uZSIsICJzZWxmIiwgInN1cGVyIiwgImlmIiwgImFzIiwgIm5vdCIsICJhbmQiLAogICAgICAgICAgICAgICAgICAgICJlbHNlIiwgImltcG9ydCIsICJ3aXRoIiwgIndpdGhvdXQiLCAiY29udGV4dCJdOwogICAga2V5d29yZHMgPSBuZXcgUmVnRXhwKCJeKCgiICsga2V5d29yZHMuam9pbigiKXwoIikgKyAiKSlcXGIiKTsKCiAgICBmdW5jdGlvbiB0b2tlbkJhc2UgKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgIGlmIChjaCA9PSAieyIpIHsKICAgICAgICAgICAgaWYgKGNoID0gc3RyZWFtLmVhdCgvXHt8JXwjLykpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoIi0iKTsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWcoY2gpOwogICAgICAgICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaW5UYWcgKGNsb3NlKSB7CiAgICAgICAgaWYgKGNsb3NlID09ICJ7IikgewogICAgICAgICAgICBjbG9zZSA9ICJ9IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgIGlmICgoY2ggPT0gY2xvc2UgfHwgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KGNsb3NlKSkpCiAgICAgICAgICAgICAgICAmJiBzdHJlYW0uZWF0KCJ9IikpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjbG9zZSA9PSAiIyIgPyAiY29tbWVudCIgOiAic3RyaW5nIjsKICAgICAgICB9OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZX07CiAgICAgICAgfSwKICAgICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgIH07IAp9KTsK]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEx1YSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ibHVhLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vdGhlbWUvbmVhdC5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTHVhIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLS1bWwpleGFtcGxlIHVzZWxlc3MgY29kZSB0byBzaG93IGx1YSBzeW50YXggaGlnaGxpZ2h0aW5nCnRoaXMgaXMgbXVsdGlsaW5lIGNvbW1lbnQKXV0KCmZ1bmN0aW9uIGJsYWhibGFoYmxhaCh4KQoKICBsb2NhbCB0YWJsZSA9IHsKICAgICJhc2QiID0gMTIzLAogICAgIngiID0gMC4zNCwgIAogIH0KICBpZiB4IH49IDMgdGhlbgogICAgcHJpbnQoIHggKQogIGVsc2VpZiB4ID09ICJzdHJpbmciCiAgICBteV9jdXN0b21fZnVuY3Rpb24oIDB4MzQgKQogIGVsc2UKICAgIHVua25vd25fZnVuY3Rpb24oICJzb21lIHN0cmluZyIgKQogIGVuZAoKICAtLXNpbmdsZSBsaW5lIGNvbW1lbnQKICAKZW5kCgpmdW5jdGlvbiBibGFibGFibGEzKCkKCiAgZm9yIGssdiBpbiBpcGFpcnMoIHRhYmxlICkgZG8KICAgIC0tYWJjZGUuLgogICAgeT1bPVsKICB4PVtbCiAgICAgIHggaXMgYSBtdWx0aSBsaW5lIHN0cmluZwogICBdXQogIGJ1dCBpdHMgZGVmaW5pdGlvbiBpcyBpc2lkZSBhIGhpZ2hlc3QgbGV2ZWwgc3RyaW5nIQogIF09XQogICAgcHJpbnQoIiBcIlwiICIpCgogICAgcyA9IG1hdGguc2luKCB4ICkKICBlbmQKCmVuZAo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgdGFiTW9kZTogImluZGVudCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogIm5lYXQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+TG9vc2VseSBiYXNlZCBvbiBGcmFuY2lzemVrCiAgICBXYXdyemFrJ3MgPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LzEvY29udHJpYi9sdWEiPkNvZGVNaXJyb3IKICAgIDEgbW9kZTwvYT4uIE9uZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBpcwogICAgc3VwcG9ydGVkLCA8Y29kZT5zcGVjaWFsczwvY29kZT4sIHRvIHdoaWNoIHlvdSBjYW4gcHJvdmlkZSBhbgogICAgYXJyYXkgb2Ygc3RyaW5ncyB0byBoYXZlIHRob3NlIGlkZW50aWZpZXJzIGhpZ2hsaWdodGVkIHdpdGgKICAgIHRoZSA8Y29kZT5sdWEtc3BlY2lhbDwvY29kZT4gc3R5bGUuPC9wPgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1sdWE8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/lua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gTFVBIG1vZGUuIFBvcnRlZCB0byBDb2RlTWlycm9yIDIgZnJvbSBGcmFuY2lzemVrIFdhd3J6YWsncwovLyBDb2RlTWlycm9yIDEgbW9kZS4KLy8gaGlnaGxpZ2h0cyBrZXl3b3Jkcywgc3RyaW5ncywgY29tbWVudHMgKG5vIGxldmVsaW5nIHN1cHBvcnRlZCEgKCJbPT1bIikpLCB0b2tlbnMsIGJhc2ljIGluZGVudGluZwogCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibHVhIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwoKICBmdW5jdGlvbiBwcmVmaXhSRSh3b3JkcykgewogICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiICsgd29yZHMuam9pbigifCIpICsgIikiLCAiaSIpOwogIH0KICBmdW5jdGlvbiB3b3JkUkUod29yZHMpIHsKICAgIHJldHVybiBuZXcgUmVnRXhwKCJeKD86IiArIHdvcmRzLmpvaW4oInwiKSArICIpJCIsICJpIik7CiAgfQogIHZhciBzcGVjaWFscyA9IHdvcmRSRShwYXJzZXJDb25maWcuc3BlY2lhbHMgfHwgW10pOwogCiAgLy8gbG9uZyBsaXN0IG9mIHN0YW5kYXJkIGZ1bmN0aW9ucyBmcm9tIGx1YSBtYW51YWwKICB2YXIgYnVpbHRpbnMgPSB3b3JkUkUoWwogICAgIl9HIiwiX1ZFUlNJT04iLCJhc3NlcnQiLCJjb2xsZWN0Z2FyYmFnZSIsImRvZmlsZSIsImVycm9yIiwiZ2V0ZmVudiIsImdldG1ldGF0YWJsZSIsImlwYWlycyIsImxvYWQiLAogICAgImxvYWRmaWxlIiwibG9hZHN0cmluZyIsIm1vZHVsZSIsIm5leHQiLCJwYWlycyIsInBjYWxsIiwicHJpbnQiLCJyYXdlcXVhbCIsInJhd2dldCIsInJhd3NldCIsInJlcXVpcmUiLAogICAgInNlbGVjdCIsInNldGZlbnYiLCJzZXRtZXRhdGFibGUiLCJ0b251bWJlciIsInRvc3RyaW5nIiwidHlwZSIsInVucGFjayIsInhwY2FsbCIsCgogICAgImNvcm91dGluZS5jcmVhdGUiLCJjb3JvdXRpbmUucmVzdW1lIiwiY29yb3V0aW5lLnJ1bm5pbmciLCJjb3JvdXRpbmUuc3RhdHVzIiwiY29yb3V0aW5lLndyYXAiLCJjb3JvdXRpbmUueWllbGQiLAoKICAgICJkZWJ1Zy5kZWJ1ZyIsImRlYnVnLmdldGZlbnYiLCJkZWJ1Zy5nZXRob29rIiwiZGVidWcuZ2V0aW5mbyIsImRlYnVnLmdldGxvY2FsIiwiZGVidWcuZ2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5nZXRyZWdpc3RyeSIsImRlYnVnLmdldHVwdmFsdWUiLCJkZWJ1Zy5zZXRmZW52IiwiZGVidWcuc2V0aG9vayIsImRlYnVnLnNldGxvY2FsIiwiZGVidWcuc2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5zZXR1cHZhbHVlIiwiZGVidWcudHJhY2ViYWNrIiwKCiAgICAiY2xvc2UiLCJmbHVzaCIsImxpbmVzIiwicmVhZCIsInNlZWsiLCJzZXR2YnVmIiwid3JpdGUiLAoKICAgICJpby5jbG9zZSIsImlvLmZsdXNoIiwiaW8uaW5wdXQiLCJpby5saW5lcyIsImlvLm9wZW4iLCJpby5vdXRwdXQiLCJpby5wb3BlbiIsImlvLnJlYWQiLCJpby5zdGRlcnIiLCJpby5zdGRpbiIsCiAgICAiaW8uc3Rkb3V0IiwiaW8udG1wZmlsZSIsImlvLnR5cGUiLCJpby53cml0ZSIsCgogICAgIm1hdGguYWJzIiwibWF0aC5hY29zIiwibWF0aC5hc2luIiwibWF0aC5hdGFuIiwibWF0aC5hdGFuMiIsIm1hdGguY2VpbCIsIm1hdGguY29zIiwibWF0aC5jb3NoIiwibWF0aC5kZWciLAogICAgIm1hdGguZXhwIiwibWF0aC5mbG9vciIsIm1hdGguZm1vZCIsIm1hdGguZnJleHAiLCJtYXRoLmh1Z2UiLCJtYXRoLmxkZXhwIiwibWF0aC5sb2ciLCJtYXRoLmxvZzEwIiwibWF0aC5tYXgiLAogICAgIm1hdGgubWluIiwibWF0aC5tb2RmIiwibWF0aC5waSIsIm1hdGgucG93IiwibWF0aC5yYWQiLCJtYXRoLnJhbmRvbSIsIm1hdGgucmFuZG9tc2VlZCIsIm1hdGguc2luIiwibWF0aC5zaW5oIiwKICAgICJtYXRoLnNxcnQiLCJtYXRoLnRhbiIsIm1hdGgudGFuaCIsCgogICAgIm9zLmNsb2NrIiwib3MuZGF0ZSIsIm9zLmRpZmZ0aW1lIiwib3MuZXhlY3V0ZSIsIm9zLmV4aXQiLCJvcy5nZXRlbnYiLCJvcy5yZW1vdmUiLCJvcy5yZW5hbWUiLCJvcy5zZXRsb2NhbGUiLAogICAgIm9zLnRpbWUiLCJvcy50bXBuYW1lIiwKCiAgICAicGFja2FnZS5jcGF0aCIsInBhY2thZ2UubG9hZGVkIiwicGFja2FnZS5sb2FkZXJzIiwicGFja2FnZS5sb2FkbGliIiwicGFja2FnZS5wYXRoIiwicGFja2FnZS5wcmVsb2FkIiwKICAgICJwYWNrYWdlLnNlZWFsbCIsCgogICAgInN0cmluZy5ieXRlIiwic3RyaW5nLmNoYXIiLCJzdHJpbmcuZHVtcCIsInN0cmluZy5maW5kIiwic3RyaW5nLmZvcm1hdCIsInN0cmluZy5nbWF0Y2giLCJzdHJpbmcuZ3N1YiIsCiAgICAic3RyaW5nLmxlbiIsInN0cmluZy5sb3dlciIsInN0cmluZy5tYXRjaCIsInN0cmluZy5yZXAiLCJzdHJpbmcucmV2ZXJzZSIsInN0cmluZy5zdWIiLCJzdHJpbmcudXBwZXIiLAoKICAgICJ0YWJsZS5jb25jYXQiLCJ0YWJsZS5pbnNlcnQiLCJ0YWJsZS5tYXhuIiwidGFibGUucmVtb3ZlIiwidGFibGUuc29ydCIKICBdKTsKICB2YXIga2V5d29yZHMgPSB3b3JkUkUoWyJhbmQiLCJicmVhayIsImVsc2VpZiIsImZhbHNlIiwibmlsIiwibm90Iiwib3IiLCJyZXR1cm4iLAoJCQkgInRydWUiLCJmdW5jdGlvbiIsICJlbmQiLCAiaWYiLCAidGhlbiIsICJlbHNlIiwgImRvIiwgCgkJCSAid2hpbGUiLCAicmVwZWF0IiwgInVudGlsIiwgImZvciIsICJpbiIsICJsb2NhbCIgXSk7CgogIHZhciBpbmRlbnRUb2tlbnMgPSB3b3JkUkUoWyJmdW5jdGlvbiIsICJpZiIsInJlcGVhdCIsImRvIiwgIlxcKCIsICJ7Il0pOwogIHZhciBkZWRlbnRUb2tlbnMgPSB3b3JkUkUoWyJlbmQiLCAidW50aWwiLCAiXFwpIiwgIn0iXSk7CiAgdmFyIGRlZGVudFBhcnRpYWwgPSBwcmVmaXhSRShbImVuZCIsICJ1bnRpbCIsICJcXCkiLCAifSIsICJlbHNlIiwgImVsc2VpZiJdKTsKCiAgZnVuY3Rpb24gcmVhZEJyYWNrZXQoc3RyZWFtKSB7CiAgICB2YXIgbGV2ZWwgPSAwOwogICAgd2hpbGUgKHN0cmVhbS5lYXQoIj0iKSkgKytsZXZlbDsKICAgIHN0cmVhbS5lYXQoIlsiKTsKICAgIHJldHVybiBsZXZlbDsKICB9CgogIGZ1bmN0aW9uIG5vcm1hbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KCItIikpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIlsiKSkKICAgICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAiY29tbWVudCIpKShzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfSAKICAgIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikKICAgICAgcmV0dXJuIChzdGF0ZS5jdXIgPSBzdHJpbmcoY2gpKShzdHJlYW0sIHN0YXRlKTsKICAgIGlmIChjaCA9PSAiWyIgJiYgL1tcWz1dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKQogICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAic3RyaW5nIikpKHN0cmVhbSwgc3RhdGUpOwogICAgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHcuJV0vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfQogICAgaWYgKC9bXHdfXS8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXy5dLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBicmFja2V0ZWQobGV2ZWwsIHN0eWxlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3VybGV2ID0gbnVsbCwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGN1cmxldiA9PSBudWxsKSB7aWYgKGNoID09ICJdIikgY3VybGV2ID0gMDt9CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIj0iKSArK2N1cmxldjsKICAgICAgICBlbHNlIGlmIChjaCA9PSAiXSIgJiYgY3VybGV2ID09IGxldmVsKSB7IHN0YXRlLmN1ciA9IG5vcm1hbDsgYnJlYWs7IH0KICAgICAgICBlbHNlIGN1cmxldiA9IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhazsKICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoIWVzY2FwZWQpIHN0YXRlLmN1ciA9IG5vcm1hbDsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CiAgICAKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbCkgewogICAgICByZXR1cm4ge2Jhc2Vjb2w6IGJhc2Vjb2wgfHwgMCwgaW5kZW50RGVwdGg6IDAsIGN1cjogbm9ybWFsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUuY3VyKHN0cmVhbSwgc3RhdGUpOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIGlmIChzdHlsZSA9PSAidmFyaWFibGUiKSB7CiAgICAgICAgaWYgKGtleXdvcmRzLnRlc3Qod29yZCkpIHN0eWxlID0gImtleXdvcmQiOwogICAgICAgIGVsc2UgaWYgKGJ1aWx0aW5zLnRlc3Qod29yZCkpIHN0eWxlID0gImJ1aWx0aW4iOwoJZWxzZSBpZiAoc3BlY2lhbHMudGVzdCh3b3JkKSkgc3R5bGUgPSAidmFyaWFibGUtMiI7CiAgICAgIH0KICAgICAgaWYgKChzdHlsZSAhPSAiY29tbWVudCIpICYmIChzdHlsZSAhPSAic3RyaW5nIikpewogICAgICAgIGlmIChpbmRlbnRUb2tlbnMudGVzdCh3b3JkKSkgKytzdGF0ZS5pbmRlbnREZXB0aDsKICAgICAgICBlbHNlIGlmIChkZWRlbnRUb2tlbnMudGVzdCh3b3JkKSkgLS1zdGF0ZS5pbmRlbnREZXB0aDsKICAgICAgfQogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICB2YXIgY2xvc2luZyA9IGRlZGVudFBhcnRpYWwudGVzdCh0ZXh0QWZ0ZXIpOwogICAgICByZXR1cm4gc3RhdGUuYmFzZWNvbCArIGluZGVudFVuaXQgKiAoc3RhdGUuaW5kZW50RGVwdGggLSAoY2xvc2luZyA/IDEgOiAwKSk7CiAgICB9CiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1sdWEiLCAibHVhIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1hcmtkb3duIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJtYXJrZG93bi5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Im1hcmtkb3duLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTWFya2Rvd24gbW9kZTwvaDE+Cgo8IS0tIHNvdXJjZTogaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9iYXNpY3MudGV4dCAtLT4KPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KTWFya2Rvd246IEJhc2ljcwo9PT09PT09PT09PT09PT09CgombHQ7dWwgaWQ9IlByb2plY3RTdWJtZW51IiZndDsKICAgICZsdDtsaSZndDsmbHQ7YSBocmVmPSIvcHJvamVjdHMvbWFya2Rvd24vIiB0aXRsZT0iTWFya2Rvd24gUHJvamVjdCBQYWdlIiZndDtNYWluJmx0Oy9hJmd0OyZsdDsvbGkmZ3Q7CiAgICAmbHQ7bGkmZ3Q7Jmx0O2EgY2xhc3M9InNlbGVjdGVkIiB0aXRsZT0iTWFya2Rvd24gQmFzaWNzIiZndDtCYXNpY3MmbHQ7L2EmZ3Q7Jmx0Oy9saSZndDsKICAgICZsdDtsaSZndDsmbHQ7YSBocmVmPSIvcHJvamVjdHMvbWFya2Rvd24vc3ludGF4IiB0aXRsZT0iTWFya2Rvd24gU3ludGF4IERvY3VtZW50YXRpb24iJmd0O1N5bnRheCZsdDsvYSZndDsmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0OyZsdDthIGhyZWY9Ii9wcm9qZWN0cy9tYXJrZG93bi9saWNlbnNlIiB0aXRsZT0iUHJpY2luZyBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbiImZ3Q7TGljZW5zZSZsdDsvYSZndDsmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0OyZsdDthIGhyZWY9Ii9wcm9qZWN0cy9tYXJrZG93bi9kaW5ndXMiIHRpdGxlPSJPbmxpbmUgTWFya2Rvd24gV2ViIEZvcm0iJmd0O0Rpbmd1cyZsdDsvYSZndDsmbHQ7L2xpJmd0OwombHQ7L3VsJmd0OwoKCkdldHRpbmcgdGhlIEdpc3Qgb2YgTWFya2Rvd24ncyBGb3JtYXR0aW5nIFN5bnRheAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgcGFnZSBvZmZlcnMgYSBicmllZiBvdmVydmlldyBvZiB3aGF0IGl0J3MgbGlrZSB0byB1c2UgTWFya2Rvd24uClRoZSBbc3ludGF4IHBhZ2VdIFtzXSBwcm92aWRlcyBjb21wbGV0ZSwgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBmb3IKZXZlcnkgZmVhdHVyZSwgYnV0IE1hcmtkb3duIHNob3VsZCBiZSB2ZXJ5IGVhc3kgdG8gcGljayB1cCBzaW1wbHkgYnkKbG9va2luZyBhdCBhIGZldyBleGFtcGxlcyBvZiBpdCBpbiBhY3Rpb24uIFRoZSBleGFtcGxlcyBvbiB0aGlzIHBhZ2UKYXJlIHdyaXR0ZW4gaW4gYSBiZWZvcmUvYWZ0ZXIgc3R5bGUsIHNob3dpbmcgZXhhbXBsZSBzeW50YXggYW5kIHRoZQpIVE1MIG91dHB1dCBwcm9kdWNlZCBieSBNYXJrZG93bi4KCkl0J3MgYWxzbyBoZWxwZnVsIHRvIHNpbXBseSB0cnkgTWFya2Rvd24gb3V0OyB0aGUgW0Rpbmd1c10gW2RdIGlzIGEKd2ViIGFwcGxpY2F0aW9uIHRoYXQgYWxsb3dzIHlvdSB0eXBlIHlvdXIgb3duIE1hcmtkb3duLWZvcm1hdHRlZCB0ZXh0CmFuZCB0cmFuc2xhdGUgaXQgdG8gWEhUTUwuCgoqKk5vdGU6KiogVGhpcyBkb2N1bWVudCBpcyBpdHNlbGYgd3JpdHRlbiB1c2luZyBNYXJrZG93bjsgeW91CmNhbiBbc2VlIHRoZSBzb3VyY2UgZm9yIGl0IGJ5IGFkZGluZyAnLnRleHQnIHRvIHRoZSBVUkxdIFtzcmNdLgoKICBbc106IC9wcm9qZWN0cy9tYXJrZG93bi9zeW50YXggICJNYXJrZG93biBTeW50YXgiCiAgW2RdOiAvcHJvamVjdHMvbWFya2Rvd24vZGluZ3VzICAiTWFya2Rvd24gRGluZ3VzIgogIFtzcmNdOiAvcHJvamVjdHMvbWFya2Rvd24vYmFzaWNzLnRleHQKCgojIyBQYXJhZ3JhcGhzLCBIZWFkZXJzLCBCbG9ja3F1b3RlcyAjIwoKQSBwYXJhZ3JhcGggaXMgc2ltcGx5IG9uZSBvciBtb3JlIGNvbnNlY3V0aXZlIGxpbmVzIG9mIHRleHQsIHNlcGFyYXRlZApieSBvbmUgb3IgbW9yZSBibGFuayBsaW5lcy4gKEEgYmxhbmsgbGluZSBpcyBhbnkgbGluZSB0aGF0IGxvb2tzIGxpa2UKYSBibGFuayBsaW5lIC0tIGEgbGluZSBjb250YWluaW5nIG5vdGhpbmcgYnV0IHNwYWNlcyBvciB0YWJzIGlzCmNvbnNpZGVyZWQgYmxhbmsuKSBOb3JtYWwgcGFyYWdyYXBocyBzaG91bGQgbm90IGJlIGluZGVudGVkIHdpdGgKc3BhY2VzIG9yIHRhYnMuCgpNYXJrZG93biBvZmZlcnMgdHdvIHN0eWxlcyBvZiBoZWFkZXJzOiAqU2V0ZXh0KiBhbmQgKmF0eCouClNldGV4dC1zdHlsZSBoZWFkZXJzIGZvciBgJmx0O2gxJmd0O2AgYW5kIGAmbHQ7aDImZ3Q7YCBhcmUgY3JlYXRlZCBieQoidW5kZXJsaW5pbmciIHdpdGggZXF1YWwgc2lnbnMgKGA9YCkgYW5kIGh5cGhlbnMgKGAtYCksIHJlc3BlY3RpdmVseS4KVG8gY3JlYXRlIGFuIGF0eC1zdHlsZSBoZWFkZXIsIHlvdSBwdXQgMS02IGhhc2ggbWFya3MgKGAjYCkgYXQgdGhlCmJlZ2lubmluZyBvZiB0aGUgbGluZSAtLSB0aGUgbnVtYmVyIG9mIGhhc2hlcyBlcXVhbHMgdGhlIHJlc3VsdGluZwpIVE1MIGhlYWRlciBsZXZlbC4KCkJsb2NrcXVvdGVzIGFyZSBpbmRpY2F0ZWQgdXNpbmcgZW1haWwtc3R5bGUgJ2AmZ3Q7YCcgYW5nbGUgYnJhY2tldHMuCgpNYXJrZG93bjoKCiAgICBBIEZpcnN0IExldmVsIEhlYWRlcgogICAgPT09PT09PT09PT09PT09PT09PT0KICAgIAogICAgQSBTZWNvbmQgTGV2ZWwgSGVhZGVyCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBOb3cgaXMgdGhlIHRpbWUgZm9yIGFsbCBnb29kIG1lbiB0byBjb21lIHRvCiAgICB0aGUgYWlkIG9mIHRoZWlyIGNvdW50cnkuIFRoaXMgaXMganVzdCBhCiAgICByZWd1bGFyIHBhcmFncmFwaC4KCiAgICBUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5CiAgICBkb2cncyBiYWNrLgogICAgCiAgICAjIyMgSGVhZGVyIDMKCiAgICAmZ3Q7IFRoaXMgaXMgYSBibG9ja3F1b3RlLgogICAgJmd0OyAKICAgICZndDsgVGhpcyBpcyB0aGUgc2Vjb25kIHBhcmFncmFwaCBpbiB0aGUgYmxvY2txdW90ZS4KICAgICZndDsKICAgICZndDsgIyMgVGhpcyBpcyBhbiBIMiBpbiBhIGJsb2NrcXVvdGUKCgpPdXRwdXQ6CgogICAgJmx0O2gxJmd0O0EgRmlyc3QgTGV2ZWwgSGVhZGVyJmx0Oy9oMSZndDsKICAgIAogICAgJmx0O2gyJmd0O0EgU2Vjb25kIExldmVsIEhlYWRlciZsdDsvaDImZ3Q7CiAgICAKICAgICZsdDtwJmd0O05vdyBpcyB0aGUgdGltZSBmb3IgYWxsIGdvb2QgbWVuIHRvIGNvbWUgdG8KICAgIHRoZSBhaWQgb2YgdGhlaXIgY291bnRyeS4gVGhpcyBpcyBqdXN0IGEKICAgIHJlZ3VsYXIgcGFyYWdyYXBoLiZsdDsvcCZndDsKICAgIAogICAgJmx0O3AmZ3Q7VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eQogICAgZG9nJ3MgYmFjay4mbHQ7L3AmZ3Q7CiAgICAKICAgICZsdDtoMyZndDtIZWFkZXIgMyZsdDsvaDMmZ3Q7CiAgICAKICAgICZsdDtibG9ja3F1b3RlJmd0OwogICAgICAgICZsdDtwJmd0O1RoaXMgaXMgYSBibG9ja3F1b3RlLiZsdDsvcCZndDsKICAgICAgICAKICAgICAgICAmbHQ7cCZndDtUaGlzIGlzIHRoZSBzZWNvbmQgcGFyYWdyYXBoIGluIHRoZSBibG9ja3F1b3RlLiZsdDsvcCZndDsKICAgICAgICAKICAgICAgICAmbHQ7aDImZ3Q7VGhpcyBpcyBhbiBIMiBpbiBhIGJsb2NrcXVvdGUmbHQ7L2gyJmd0OwogICAgJmx0Oy9ibG9ja3F1b3RlJmd0OwoKCgojIyMgUGhyYXNlIEVtcGhhc2lzICMjIwoKTWFya2Rvd24gdXNlcyBhc3Rlcmlza3MgYW5kIHVuZGVyc2NvcmVzIHRvIGluZGljYXRlIHNwYW5zIG9mIGVtcGhhc2lzLgoKTWFya2Rvd246CgogICAgU29tZSBvZiB0aGVzZSB3b3JkcyAqYXJlIGVtcGhhc2l6ZWQqLgogICAgU29tZSBvZiB0aGVzZSB3b3JkcyBfYXJlIGVtcGhhc2l6ZWQgYWxzb18uCiAgICAKICAgIFVzZSB0d28gYXN0ZXJpc2tzIGZvciAqKnN0cm9uZyBlbXBoYXNpcyoqLgogICAgT3IsIGlmIHlvdSBwcmVmZXIsIF9fdXNlIHR3byB1bmRlcnNjb3JlcyBpbnN0ZWFkX18uCgpPdXRwdXQ6CgogICAgJmx0O3AmZ3Q7U29tZSBvZiB0aGVzZSB3b3JkcyAmbHQ7ZW0mZ3Q7YXJlIGVtcGhhc2l6ZWQmbHQ7L2VtJmd0Oy4KICAgIFNvbWUgb2YgdGhlc2Ugd29yZHMgJmx0O2VtJmd0O2FyZSBlbXBoYXNpemVkIGFsc28mbHQ7L2VtJmd0Oy4mbHQ7L3AmZ3Q7CiAgICAKICAgICZsdDtwJmd0O1VzZSB0d28gYXN0ZXJpc2tzIGZvciAmbHQ7c3Ryb25nJmd0O3N0cm9uZyBlbXBoYXNpcyZsdDsvc3Ryb25nJmd0Oy4KICAgIE9yLCBpZiB5b3UgcHJlZmVyLCAmbHQ7c3Ryb25nJmd0O3VzZSB0d28gdW5kZXJzY29yZXMgaW5zdGVhZCZsdDsvc3Ryb25nJmd0Oy4mbHQ7L3AmZ3Q7CiAgIAoKCiMjIExpc3RzICMjCgpVbm9yZGVyZWQgKGJ1bGxldGVkKSBsaXN0cyB1c2UgYXN0ZXJpc2tzLCBwbHVzZXMsIGFuZCBoeXBoZW5zIChgKmAsCmArYCwgYW5kIGAtYCkgYXMgbGlzdCBtYXJrZXJzLiBUaGVzZSB0aHJlZSBtYXJrZXJzIGFyZQppbnRlcmNoYW5nYWJsZTsgdGhpczoKCiAgICAqICAgQ2FuZHkuCiAgICAqICAgR3VtLgogICAgKiAgIEJvb3plLgoKdGhpczoKCiAgICArICAgQ2FuZHkuCiAgICArICAgR3VtLgogICAgKyAgIEJvb3plLgoKYW5kIHRoaXM6CgogICAgLSAgIENhbmR5LgogICAgLSAgIEd1bS4KICAgIC0gICBCb296ZS4KCmFsbCBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dDoKCiAgICAmbHQ7dWwmZ3Q7CiAgICAmbHQ7bGkmZ3Q7Q2FuZHkuJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtHdW0uJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtCb296ZS4mbHQ7L2xpJmd0OwogICAgJmx0Oy91bCZndDsKCk9yZGVyZWQgKG51bWJlcmVkKSBsaXN0cyB1c2UgcmVndWxhciBudW1iZXJzLCBmb2xsb3dlZCBieSBwZXJpb2RzLCBhcwpsaXN0IG1hcmtlcnM6CgogICAgMS4gIFJlZAogICAgMi4gIEdyZWVuCiAgICAzLiAgQmx1ZQoKT3V0cHV0OgoKICAgICZsdDtvbCZndDsKICAgICZsdDtsaSZndDtSZWQmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0O0dyZWVuJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtCbHVlJmx0Oy9saSZndDsKICAgICZsdDsvb2wmZ3Q7CgpJZiB5b3UgcHV0IGJsYW5rIGxpbmVzIGJldHdlZW4gaXRlbXMsIHlvdSdsbCBnZXQgYCZsdDtwJmd0O2AgdGFncyBmb3IgdGhlCmxpc3QgaXRlbSB0ZXh0LiBZb3UgY2FuIGNyZWF0ZSBtdWx0aS1wYXJhZ3JhcGggbGlzdCBpdGVtcyBieSBpbmRlbnRpbmcKdGhlIHBhcmFncmFwaHMgYnkgNCBzcGFjZXMgb3IgMSB0YWI6CgogICAgKiAgIEEgbGlzdCBpdGVtLgogICAgCiAgICAgICAgV2l0aCBtdWx0aXBsZSBwYXJhZ3JhcGhzLgoKICAgICogICBBbm90aGVyIGl0ZW0gaW4gdGhlIGxpc3QuCgpPdXRwdXQ6CgogICAgJmx0O3VsJmd0OwogICAgJmx0O2xpJmd0OyZsdDtwJmd0O0EgbGlzdCBpdGVtLiZsdDsvcCZndDsKICAgICZsdDtwJmd0O1dpdGggbXVsdGlwbGUgcGFyYWdyYXBocy4mbHQ7L3AmZ3Q7Jmx0Oy9saSZndDsKICAgICZsdDtsaSZndDsmbHQ7cCZndDtBbm90aGVyIGl0ZW0gaW4gdGhlIGxpc3QuJmx0Oy9wJmd0OyZsdDsvbGkmZ3Q7CiAgICAmbHQ7L3VsJmd0OwogICAgCgoKIyMjIExpbmtzICMjIwoKTWFya2Rvd24gc3VwcG9ydHMgdHdvIHN0eWxlcyBmb3IgY3JlYXRpbmcgbGlua3M6ICppbmxpbmUqIGFuZAoqcmVmZXJlbmNlKi4gV2l0aCBib3RoIHN0eWxlcywgeW91IHVzZSBzcXVhcmUgYnJhY2tldHMgdG8gZGVsaW1pdCB0aGUKdGV4dCB5b3Ugd2FudCB0byB0dXJuIGludG8gYSBsaW5rLgoKSW5saW5lLXN0eWxlIGxpbmtzIHVzZSBwYXJlbnRoZXNlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGluayB0ZXh0LgpGb3IgZXhhbXBsZToKCiAgICBUaGlzIGlzIGFuIFtleGFtcGxlIGxpbmtdKGh0dHA6Ly9leGFtcGxlLmNvbS8pLgoKT3V0cHV0OgoKICAgICZsdDtwJmd0O1RoaXMgaXMgYW4gJmx0O2EgaHJlZj0iaHR0cDovL2V4YW1wbGUuY29tLyImZ3Q7CiAgICBleGFtcGxlIGxpbmsmbHQ7L2EmZ3Q7LiZsdDsvcCZndDsKCk9wdGlvbmFsbHksIHlvdSBtYXkgaW5jbHVkZSBhIHRpdGxlIGF0dHJpYnV0ZSBpbiB0aGUgcGFyZW50aGVzZXM6CgogICAgVGhpcyBpcyBhbiBbZXhhbXBsZSBsaW5rXShodHRwOi8vZXhhbXBsZS5jb20vICJXaXRoIGEgVGl0bGUiKS4KCk91dHB1dDoKCiAgICAmbHQ7cCZndDtUaGlzIGlzIGFuICZsdDthIGhyZWY9Imh0dHA6Ly9leGFtcGxlLmNvbS8iIHRpdGxlPSJXaXRoIGEgVGl0bGUiJmd0OwogICAgZXhhbXBsZSBsaW5rJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgpSZWZlcmVuY2Utc3R5bGUgbGlua3MgYWxsb3cgeW91IHRvIHJlZmVyIHRvIHlvdXIgbGlua3MgYnkgbmFtZXMsIHdoaWNoCnlvdSBkZWZpbmUgZWxzZXdoZXJlIGluIHlvdXIgZG9jdW1lbnQ6CgogICAgSSBnZXQgMTAgdGltZXMgbW9yZSB0cmFmZmljIGZyb20gW0dvb2dsZV1bMV0gdGhhbiBmcm9tCiAgICBbWWFob29dWzJdIG9yIFtNU05dWzNdLgoKICAgIFsxXTogaHR0cDovL2dvb2dsZS5jb20vICAgICAgICAiR29vZ2xlIgogICAgWzJdOiBodHRwOi8vc2VhcmNoLnlhaG9vLmNvbS8gICJZYWhvbyBTZWFyY2giCiAgICBbM106IGh0dHA6Ly9zZWFyY2gubXNuLmNvbS8gICAgIk1TTiBTZWFyY2giCgpPdXRwdXQ6CgogICAgJmx0O3AmZ3Q7SSBnZXQgMTAgdGltZXMgbW9yZSB0cmFmZmljIGZyb20gJmx0O2EgaHJlZj0iaHR0cDovL2dvb2dsZS5jb20vIgogICAgdGl0bGU9Ikdvb2dsZSImZ3Q7R29vZ2xlJmx0Oy9hJmd0OyB0aGFuIGZyb20gJmx0O2EgaHJlZj0iaHR0cDovL3NlYXJjaC55YWhvby5jb20vIgogICAgdGl0bGU9IllhaG9vIFNlYXJjaCImZ3Q7WWFob28mbHQ7L2EmZ3Q7IG9yICZsdDthIGhyZWY9Imh0dHA6Ly9zZWFyY2gubXNuLmNvbS8iCiAgICB0aXRsZT0iTVNOIFNlYXJjaCImZ3Q7TVNOJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgpUaGUgdGl0bGUgYXR0cmlidXRlIGlzIG9wdGlvbmFsLiBMaW5rIG5hbWVzIG1heSBjb250YWluIGxldHRlcnMsCm51bWJlcnMgYW5kIHNwYWNlcywgYnV0IGFyZSAqbm90KiBjYXNlIHNlbnNpdGl2ZToKCiAgICBJIHN0YXJ0IG15IG1vcm5pbmcgd2l0aCBhIGN1cCBvZiBjb2ZmZWUgYW5kCiAgICBbVGhlIE5ldyBZb3JrIFRpbWVzXVtOWSBUaW1lc10uCgogICAgW255IHRpbWVzXTogaHR0cDovL3d3dy5ueXRpbWVzLmNvbS8KCk91dHB1dDoKCiAgICAmbHQ7cCZndDtJIHN0YXJ0IG15IG1vcm5pbmcgd2l0aCBhIGN1cCBvZiBjb2ZmZWUgYW5kCiAgICAmbHQ7YSBocmVmPSJodHRwOi8vd3d3Lm55dGltZXMuY29tLyImZ3Q7VGhlIE5ldyBZb3JrIFRpbWVzJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgoKIyMjIEltYWdlcyAjIyMKCkltYWdlIHN5bnRheCBpcyB2ZXJ5IG11Y2ggbGlrZSBsaW5rIHN5bnRheC4KCklubGluZSAodGl0bGVzIGFyZSBvcHRpb25hbCk6CgogICAgIVthbHQgdGV4dF0oL3BhdGgvdG8vaW1nLmpwZyAiVGl0bGUiKQoKUmVmZXJlbmNlLXN0eWxlOgoKICAgICFbYWx0IHRleHRdW2lkXQoKICAgIFtpZF06IC9wYXRoL3RvL2ltZy5qcGcgIlRpdGxlIgoKQm90aCBvZiB0aGUgYWJvdmUgZXhhbXBsZXMgcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQ6CgogICAgJmx0O2ltZyBzcmM9Ii9wYXRoL3RvL2ltZy5qcGciIGFsdD0iYWx0IHRleHQiIHRpdGxlPSJUaXRsZSIgLyZndDsKCgoKIyMjIENvZGUgIyMjCgpJbiBhIHJlZ3VsYXIgcGFyYWdyYXBoLCB5b3UgY2FuIGNyZWF0ZSBjb2RlIHNwYW4gYnkgd3JhcHBpbmcgdGV4dCBpbgpiYWNrdGljayBxdW90ZXMuIEFueSBhbXBlcnNhbmRzIChgJmFtcDtgKSBhbmQgYW5nbGUgYnJhY2tldHMgKGAmbHQ7YCBvcgpgJmd0O2ApIHdpbGwgYXV0b21hdGljYWxseSBiZSB0cmFuc2xhdGVkIGludG8gSFRNTCBlbnRpdGllcy4gVGhpcyBtYWtlcwppdCBlYXN5IHRvIHVzZSBNYXJrZG93biB0byB3cml0ZSBhYm91dCBIVE1MIGV4YW1wbGUgY29kZToKCiAgICBJIHN0cm9uZ2x5IHJlY29tbWVuZCBhZ2FpbnN0IHVzaW5nIGFueSBgJmx0O2JsaW5rJmd0O2AgdGFncy4KCiAgICBJIHdpc2ggU21hcnR5UGFudHMgdXNlZCBuYW1lZCBlbnRpdGllcyBsaWtlIGAmYW1wO21kYXNoO2AKICAgIGluc3RlYWQgb2YgZGVjaW1hbC1lbmNvZGVkIGVudGl0ZXMgbGlrZSBgJmFtcDsjODIxMjtgLgoKT3V0cHV0OgoKICAgICZsdDtwJmd0O0kgc3Ryb25nbHkgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcgYW55CiAgICAmbHQ7Y29kZSZndDsmYW1wO2x0O2JsaW5rJmFtcDtndDsmbHQ7L2NvZGUmZ3Q7IHRhZ3MuJmx0Oy9wJmd0OwogICAgCiAgICAmbHQ7cCZndDtJIHdpc2ggU21hcnR5UGFudHMgdXNlZCBuYW1lZCBlbnRpdGllcyBsaWtlCiAgICAmbHQ7Y29kZSZndDsmYW1wO2FtcDttZGFzaDsmbHQ7L2NvZGUmZ3Q7IGluc3RlYWQgb2YgZGVjaW1hbC1lbmNvZGVkCiAgICBlbnRpdGVzIGxpa2UgJmx0O2NvZGUmZ3Q7JmFtcDthbXA7IzgyMTI7Jmx0Oy9jb2RlJmd0Oy4mbHQ7L3AmZ3Q7CgoKVG8gc3BlY2lmeSBhbiBlbnRpcmUgYmxvY2sgb2YgcHJlLWZvcm1hdHRlZCBjb2RlLCBpbmRlbnQgZXZlcnkgbGluZSBvZgp0aGUgYmxvY2sgYnkgNCBzcGFjZXMgb3IgMSB0YWIuIEp1c3QgbGlrZSB3aXRoIGNvZGUgc3BhbnMsIGAmYW1wO2AsIGAmbHQ7YCwKYW5kIGAmZ3Q7YCBjaGFyYWN0ZXJzIHdpbGwgYmUgZXNjYXBlZCBhdXRvbWF0aWNhbGx5LgoKTWFya2Rvd246CgogICAgSWYgeW91IHdhbnQgeW91ciBwYWdlIHRvIHZhbGlkYXRlIHVuZGVyIFhIVE1MIDEuMCBTdHJpY3QsCiAgICB5b3UndmUgZ290IHRvIHB1dCBwYXJhZ3JhcGggdGFncyBpbiB5b3VyIGJsb2NrcXVvdGVzOgoKICAgICAgICAmbHQ7YmxvY2txdW90ZSZndDsKICAgICAgICAgICAgJmx0O3AmZ3Q7Rm9yIGV4YW1wbGUuJmx0Oy9wJmd0OwogICAgICAgICZsdDsvYmxvY2txdW90ZSZndDsKCk91dHB1dDoKCiAgICAmbHQ7cCZndDtJZiB5b3Ugd2FudCB5b3VyIHBhZ2UgdG8gdmFsaWRhdGUgdW5kZXIgWEhUTUwgMS4wIFN0cmljdCwKICAgIHlvdSd2ZSBnb3QgdG8gcHV0IHBhcmFncmFwaCB0YWdzIGluIHlvdXIgYmxvY2txdW90ZXM6Jmx0Oy9wJmd0OwogICAgCiAgICAmbHQ7cHJlJmd0OyZsdDtjb2RlJmd0OyZhbXA7bHQ7YmxvY2txdW90ZSZhbXA7Z3Q7CiAgICAgICAgJmFtcDtsdDtwJmFtcDtndDtGb3IgZXhhbXBsZS4mYW1wO2x0Oy9wJmFtcDtndDsKICAgICZhbXA7bHQ7L2Jsb2NrcXVvdGUmYW1wO2d0OwogICAgJmx0Oy9jb2RlJmd0OyZsdDsvcHJlJmd0Owo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6ICdtYXJrZG93bicsCiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogImRlZmF1bHQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1tYXJrZG93bjwvY29kZT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/markdown.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSB7CgogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjbUNmZywgeyBuYW1lOiAneG1sJywgaHRtbE1vZGU6IHRydWUgfSk7CgogIHZhciBoZWFkZXIgICA9ICdoZWFkZXInCiAgLCAgIGNvZGUgICAgID0gJ2NvbW1lbnQnCiAgLCAgIHF1b3RlICAgID0gJ3F1b3RlJwogICwgICBsaXN0ICAgICA9ICdzdHJpbmcnCiAgLCAgIGhyICAgICAgID0gJ2hyJwogICwgICBsaW5rdGV4dCA9ICdsaW5rJwogICwgICBsaW5raHJlZiA9ICdzdHJpbmcnCiAgLCAgIGVtICAgICAgID0gJ2VtJwogICwgICBzdHJvbmcgICA9ICdzdHJvbmcnCiAgLCAgIGVtc3Ryb25nID0gJ2Vtc3Ryb25nJzsKCiAgdmFyIGhyUkUgPSAvXlsqLT1fXS8KICAsICAgdWxSRSA9IC9eWyotK11ccysvCiAgLCAgIG9sUkUgPSAvXlswLTldXC5ccysvCiAgLCAgIGhlYWRlclJFID0gL14oPzpcPXszLH18LXszLH0pJC8KICAsICAgY29kZVJFID0gL14oazpcdHxcc3s0LH0pLwogICwgICB0ZXh0UkUgPSAvXlteXFsqX1xcPD5gXSsvOwoKICBmdW5jdGlvbiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgZikgewogICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIHN3aXRjaEJsb2NrKHN0cmVhbSwgc3RhdGUsIGYpIHsKICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jayA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgoKICAvLyBCbG9ja3MKCiAgZnVuY3Rpb24gYmxvY2tOb3JtYWwoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5tYXRjaChjb2RlUkUpKSB7CiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuIGNvZGU7CiAgICB9CiAgICAKICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcjJyB8fCBzdHJlYW0ubWF0Y2goaGVhZGVyUkUpKSB7CiAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuIGhlYWRlcjsKICAgIH0KICAgIGlmIChzdHJlYW0uZWF0KCc+JykpIHsKICAgICAgc3RhdGUuaW5kZW50YXRpb24rKzsKICAgICAgcmV0dXJuIHF1b3RlOwogICAgfQogICAgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICdbJykgewogICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGZvb3Rub3RlTGluayk7CiAgICB9CiAgICBpZiAoaHJSRS50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7CiAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJyg/OlxzKlsnK3N0cmVhbS5wZWVrKCkrJ10pezMsfSQnKTsKICAgICAgaWYgKHN0cmVhbS5tYXRjaChyZSwgdHJ1ZSkpIHsKICAgICAgICByZXR1cm4gaHI7CiAgICAgIH0KICAgIH0KICAgIAogICAgdmFyIG1hdGNoOwogICAgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKHVsUkUsIHRydWUpIHx8IHN0cmVhbS5tYXRjaChvbFJFLCB0cnVlKSkgewogICAgICBzdGF0ZS5pbmRlbnRhdGlvbiArPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgIHJldHVybiBsaXN0OwogICAgfQogICAgCiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIHN0YXRlLmlubGluZSk7CiAgfQoKICBmdW5jdGlvbiBodG1sQmxvY2soc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIHN0eWxlID0gaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwogICAgaWYgKHN0eWxlID09PSAndGFnJyAmJiBzdGF0ZS5odG1sU3RhdGUudHlwZSAhPT0gJ29wZW5UYWcnICYmICFzdGF0ZS5odG1sU3RhdGUuY29udGV4dCkgewogICAgICBzdGF0ZS5mID0gaW5saW5lTm9ybWFsOwogICAgICBzdGF0ZS5ibG9jayA9IGJsb2NrTm9ybWFsOwogICAgfQogICAgcmV0dXJuIHN0eWxlOwogIH0KCgogIC8vIElubGluZQogIGZ1bmN0aW9uIGdldFR5cGUoc3RhdGUpIHsKICAgIHJldHVybiBzdGF0ZS5zdHJvbmcgPyAoc3RhdGUuZW0gPyBlbXN0cm9uZyA6IHN0cm9uZykKICAgICAgICAgICAgICAgICAgICAgICAgOiAoc3RhdGUuZW0gPyBlbSAgICAgICA6IG51bGwpOwogIH0KCiAgZnVuY3Rpb24gaGFuZGxlVGV4dChzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKHRleHRSRSwgdHJ1ZSkpIHsKICAgICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogICAgfQogICAgcmV0dXJuIHVuZGVmaW5lZDsgICAgICAgIAogIH0KCiAgZnVuY3Rpb24gaW5saW5lTm9ybWFsKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBzdHlsZSA9IHN0YXRlLnRleHQoc3RyZWFtLCBzdGF0ZSkKICAgIGlmICh0eXBlb2Ygc3R5bGUgIT09ICd1bmRlZmluZWQnKQogICAgICByZXR1cm4gc3R5bGU7CiAgICAKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAKICAgIGlmIChjaCA9PT0gJ1xcJykgewogICAgICBzdHJlYW0ubmV4dCgpOwogICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICB9CiAgICBpZiAoY2ggPT09ICdgJykgewogICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGlubGluZUVsZW1lbnQoY29kZSwgJ2AnKSk7CiAgICB9CiAgICBpZiAoY2ggPT09ICdbJykgewogICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGxpbmtUZXh0KTsKICAgIH0KICAgIGlmIChjaCA9PT0gJzwnICYmIHN0cmVhbS5tYXRjaCgvXlx3LywgZmFsc2UpKSB7CiAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgIHJldHVybiBzd2l0Y2hCbG9jayhzdHJlYW0sIHN0YXRlLCBodG1sQmxvY2spOwogICAgfQoKICAgIHZhciB0ID0gZ2V0VHlwZShzdGF0ZSk7CiAgICBpZiAoY2ggPT09ICcqJyB8fCBjaCA9PT0gJ18nKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KGNoKSkgewogICAgICAgIHJldHVybiAoc3RhdGUuc3Ryb25nID0gIXN0YXRlLnN0cm9uZykgPyBnZXRUeXBlKHN0YXRlKSA6IHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIChzdGF0ZS5lbSA9ICFzdGF0ZS5lbSkgPyBnZXRUeXBlKHN0YXRlKSA6IHQ7CiAgICB9CiAgICAKICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIGxpbmtUZXh0KHN0cmVhbSwgc3RhdGUpIHsKICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgIGlmIChjaCA9PT0gJ1xcJykgc3RyZWFtLm5leHQoKTsKICAgICAgaWYgKGNoID09PSAnXScpIHsKICAgICAgICBzdGF0ZS5pbmxpbmUgPSBzdGF0ZS5mID0gbGlua0hyZWY7CiAgICAgICAgcmV0dXJuIGxpbmt0ZXh0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbGlua3RleHQ7CiAgfQoKICBmdW5jdGlvbiBsaW5rSHJlZihzdHJlYW0sIHN0YXRlKSB7CiAgICBzdHJlYW0uZWF0U3BhY2UoKTsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoY2ggPT09ICcoJyB8fCBjaCA9PT0gJ1snKSB7CiAgICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgaW5saW5lRWxlbWVudChsaW5raHJlZiwgY2ggPT09ICcoJyA/ICcpJyA6ICddJykpOwogICAgfQogICAgcmV0dXJuICdlcnJvcic7CiAgfQoKICBmdW5jdGlvbiBmb290bm90ZUxpbmsoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5tYXRjaCgvXlteXF1dKlxdOi8sIHRydWUpKSB7CiAgICAgIHN0YXRlLmYgPSBmb290bm90ZVVybDsKICAgICAgcmV0dXJuIGxpbmt0ZXh0OwogICAgfQogICAgcmV0dXJuIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBpbmxpbmVOb3JtYWwpOwogIH0KCiAgZnVuY3Rpb24gZm9vdG5vdGVVcmwoc3RyZWFtLCBzdGF0ZSkgewogICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICBzdHJlYW0ubWF0Y2goL15bXlxzXSsvLCB0cnVlKTsKICAgIHN0YXRlLmYgPSBzdGF0ZS5pbmxpbmUgPSBpbmxpbmVOb3JtYWw7CiAgICByZXR1cm4gbGlua2hyZWY7CiAgfQoKICBmdW5jdGlvbiBpbmxpbmVSRShlbmRDaGFyKSB7CiAgICBpZiAoIWlubGluZVJFW2VuZENoYXJdKSB7CiAgICAgIC8vIG1hdGNoIGFueSBub3QtZXNjYXBlZC1ub24tZW5kQ2hhciBhbmQgYW55IGVzY2FwZWQgY2hhcgogICAgICAvLyB0aGVuIG1hdGNoIGVuZENoYXIgb3IgZW9sCiAgICAgIGlubGluZVJFW2VuZENoYXJdID0gbmV3IFJlZ0V4cCgnXig/OlteXFxcXFxcJyArIGVuZENoYXIgKyAnXXxcXFxcLikqKD86XFwnICsgZW5kQ2hhciArICd8JCknKTsKICAgIH0KICAgIHJldHVybiBpbmxpbmVSRVtlbmRDaGFyXTsKICB9CgogIGZ1bmN0aW9uIGlubGluZUVsZW1lbnQodHlwZSwgZW5kQ2hhciwgbmV4dCkgewogICAgbmV4dCA9IG5leHQgfHwgaW5saW5lTm9ybWFsOwogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgc3RyZWFtLm1hdGNoKGlubGluZVJFKGVuZENoYXIpKTsKICAgICAgc3RhdGUuaW5saW5lID0gc3RhdGUuZiA9IG5leHQ7CiAgICAgIHJldHVybiB0eXBlOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBmOiBibG9ja05vcm1hbCwKICAgICAgICAKICAgICAgICBibG9jazogYmxvY2tOb3JtYWwsCiAgICAgICAgaHRtbFN0YXRlOiBodG1sTW9kZS5zdGFydFN0YXRlKCksCiAgICAgICAgaW5kZW50YXRpb246IDAsCiAgICAgICAgCiAgICAgICAgaW5saW5lOiBpbmxpbmVOb3JtYWwsCiAgICAgICAgdGV4dDogaGFuZGxlVGV4dCwKICAgICAgICBlbTogZmFsc2UsCiAgICAgICAgc3Ryb25nOiBmYWxzZQogICAgICB9OwogICAgfSwKCiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHMpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBmOiBzLmYsCiAgICAgICAgCiAgICAgICAgYmxvY2s6IHMuYmxvY2ssCiAgICAgICAgaHRtbFN0YXRlOiBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgcy5odG1sU3RhdGUpLAogICAgICAgIGluZGVudGF0aW9uOiBzLmluZGVudGF0aW9uLAogICAgICAgIAogICAgICAgIGlubGluZTogcy5pbmxpbmUsCiAgICAgICAgdGV4dDogcy50ZXh0LAogICAgICAgIGVtOiBzLmVtLAogICAgICAgIHN0cm9uZzogcy5zdHJvbmcKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIHN0YXRlLmYgPSBzdGF0ZS5ibG9jazsKICAgICAgICB2YXIgcHJldmlvdXNJbmRlbnRhdGlvbiA9IHN0YXRlLmluZGVudGF0aW9uCiAgICAgICAgLCAgIGN1cnJlbnRJbmRlbnRhdGlvbiA9IDA7CiAgICAgICAgd2hpbGUgKHByZXZpb3VzSW5kZW50YXRpb24gPiAwKSB7CiAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgnICcpKSB7CiAgICAgICAgICAgIHByZXZpb3VzSW5kZW50YXRpb24tLTsKICAgICAgICAgICAgY3VycmVudEluZGVudGF0aW9uKys7CiAgICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzSW5kZW50YXRpb24gPj0gNCAmJiBzdHJlYW0uZWF0KCdcdCcpKSB7CiAgICAgICAgICAgIHByZXZpb3VzSW5kZW50YXRpb24gLT0gNDsKICAgICAgICAgICAgY3VycmVudEluZGVudGF0aW9uICs9IDQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBjdXJyZW50SW5kZW50YXRpb247CiAgICAgICAgCiAgICAgICAgaWYgKGN1cnJlbnRJbmRlbnRhdGlvbiA+IDApIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBzdGF0ZS5mKHN0cmVhbSwgc3RhdGUpOwogICAgfSwKCiAgICBnZXRUeXBlOiBnZXRUeXBlCiAgfTsKCn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbWFya2Rvd24iLCAibWFya2Rvd24iKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE5UcmlwbGVzIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJudHJpcGxlcy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgfQogICAgPC9zdHlsZT4gICAKICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTlRyaXBsZXMgbW9kZTwvaDE+Cjxmb3JtPgo8dGV4dGFyZWEgaWQ9Im50cmlwbGVzIiBuYW1lPSJudHJpcGxlcyI+ICAgIAo8aHR0cDovL1N1YjE+ICAgICA8aHR0cDovL3ByZWQxPiAgICAgPGh0dHA6Ly9vYmo+IC4KPGh0dHA6Ly9TdWIyPiAgICAgPGh0dHA6Ly9wcmVkMiNhbjI+ICJsaXRlcmFsIDEiIC4KPGh0dHA6Ly9TdWIzI2FuMz4gPGh0dHA6Ly9wcmVkMz4gICAgIF86Ym5vZGUzIC4KXzpibm9kZTQgICAgICAgICAgPGh0dHA6Ly9wcmVkND4gICAgICJsaXRlcmFsIDIiQGxhbmcgLgpfOmJub2RlNSAgICAgICAgICA8aHR0cDovL3ByZWQ1PiAgICAgImxpdGVyYWwgMyJeXjxodHRwOi8vdHlwZT4gLgo8L3RleHRhcmVhPgo8L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJudHJpcGxlcyIpLCB7fSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L24tdHJpcGxlczwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/ntriples.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBUaGlzIHNjcmlwdCBwcm92aWRlcyBzeW50YXggaGlnaGxpZ2h0aW5nIHN1cHBvcnQgZm9yIAoqIHRoZSBOdHJpcGxlcyBmb3JtYXQuCiogTnRyaXBsZXMgZm9ybWF0IHNwZWNpZmljYXRpb246IAoqICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9yZGYtdGVzdGNhc2VzLyNudHJpcGxlcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qIAogICAgVGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGRlZmluZXMgdGhlIGRlZmluZWQgQVNGIGdyYW1tYXIgdHJhbnNpdGlvbnMuCgogICAgcHJlX3N1YmplY3QgLT4KICAgICAgICB7CiAgICAgICAgKCB3cml0aW5nX3N1YmplY3RfdXJpIHwgd3JpdGluZ19ibm9kZV91cmkgKQogICAgICAgICAgICAtPiBwcmVfcHJlZGljYXRlIAogICAgICAgICAgICAgICAgLT4gd3JpdGluZ19wcmVkaWNhdGVfdXJpIAogICAgICAgICAgICAgICAgICAgIC0+IHByZV9vYmplY3QgCiAgICAgICAgICAgICAgICAgICAgICAgIC0+IHdyaXRpbmdfb2JqZWN0X3VyaSB8IHdyaXRpbmdfb2JqZWN0X2Jub2RlIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdfb2JqZWN0X2xpdGVyYWwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gd3JpdGluZ19saXRlcmFsX2xhbmcgfCB3cml0aW5nX2xpdGVyYWxfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IHBvc3Rfb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gQkVHSU4KICAgICAgICAgfSBvdGhlcndpc2UgewogICAgICAgICAgICAgLT4gRVJST1IKICAgICAgICAgfQoqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoIm50cmlwbGVzIiwgZnVuY3Rpb24oKSB7ICAKCiAgTG9jYXRpb24gPSB7CiAgICBQUkVfU1VCSkVDVCAgICAgICAgIDogMCwKICAgIFdSSVRJTkdfU1VCX1VSSSAgICAgOiAxLAogICAgV1JJVElOR19CTk9ERV9VUkkgICA6IDIsCiAgICBQUkVfUFJFRCAgICAgICAgICAgIDogMywKICAgIFdSSVRJTkdfUFJFRF9VUkkgICAgOiA0LAogICAgUFJFX09CSiAgICAgICAgICAgICA6IDUsCiAgICBXUklUSU5HX09CSl9VUkkgICAgIDogNiwKICAgIFdSSVRJTkdfT0JKX0JOT0RFICAgOiA3LAogICAgV1JJVElOR19PQkpfTElURVJBTCA6IDgsCiAgICBXUklUSU5HX0xJVF9MQU5HICAgIDogOSwKICAgIFdSSVRJTkdfTElUX1RZUEUgICAgOiAxMCwKICAgIFBPU1RfT0JKICAgICAgICAgICAgOiAxMSwKICAgIEVSUk9SICAgICAgICAgICAgICAgOiAxMgogIH07CiAgZnVuY3Rpb24gdHJhbnNpdFN0YXRlKGN1cnJTdGF0ZSwgYykgewogICAgdmFyIGN1cnJMb2NhdGlvbiA9IGN1cnJTdGF0ZS5sb2NhdGlvbjsKICAgIHZhciByZXQ7CiAgICAKICAgIC8vIE9wZW5pbmcuCiAgICBpZiAgICAgKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfU1VCSkVDVCAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19TVUJfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX1NVQkpFQ1QgJiYgYyA9PSAnXycpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfQk5PREVfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX1BSRUQgICAgJiYgYyA9PSAnPCcpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfUFJFRF9VUkk7CiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfT0JKICAgICAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19PQkpfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgJiYgYyA9PSAnXycpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfT0JKX0JOT0RFOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgJiYgYyA9PSAnIicpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfT0JKX0xJVEVSQUw7CiAgICAKICAgIC8vIENsb3NpbmcuCiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX1NVQl9VUkkgICAgICYmIGMgPT0gJz4nKSByZXQgPSBMb2NhdGlvbi5QUkVfUFJFRDsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfQk5PREVfVVJJICAgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBSRV9QUkVEOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19QUkVEX1VSSSAgICAmJiBjID09ICc+JykgcmV0ID0gTG9jYXRpb24uUFJFX09CSjsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfT0JKX1VSSSAgICAgJiYgYyA9PSAnPicpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfQk5PREUgICAmJiBjID09ICcgJykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7CiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX09CSl9MSVRFUkFMICYmIGMgPT0gJyInKSByZXQgPSBMb2NhdGlvbi5QT1NUX09CSjsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfTElUX0xBTkcgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19MSVRfVFlQRSAmJiBjID09ICc+JykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7CiAgICAKICAgIC8vIENsb3NpbmcgdHlwZWQgYW5kIGxhbmd1YWdlIGxpdGVyYWwuCiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX09CSl9MSVRFUkFMICYmIGMgPT0gJ0AnKSByZXQgPSBMb2NhdGlvbi5XUklUSU5HX0xJVF9MQU5HOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfTElURVJBTCAmJiBjID09ICdeJykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19MSVRfVFlQRTsKCiAgICAvLyBTcGFjZXMuCiAgICBlbHNlIGlmKCBjID09ICcgJyAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgIGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfU1VCSkVDVCB8fCAKICAgICAgICAgICAgICAgY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBSRV9QUkVEICAgIHx8IAogICAgICAgICAgICAgICBjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgfHwgCiAgICAgICAgICAgICAgIGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QT1NUX09CSgogICAgICAgICAgICAgKQogICAgICAgICAgICkgcmV0ID0gY3VyckxvY2F0aW9uOwogICAgCiAgICAvLyBSZXNldC4KICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBPU1RfT0JKICYmIGMgPT0gJy4nKSByZXQgPSBMb2NhdGlvbi5QUkVfU1VCSkVDVDsgICAgCiAgICAKICAgIC8vIEVycm9yCiAgICBlbHNlIHJldCA9IExvY2F0aW9uLkVSUk9SOwogICAgCiAgICBjdXJyU3RhdGUubG9jYXRpb249cmV0OwogIH0KCiAgdW50aWxTcGFjZSAgPSBmdW5jdGlvbihjKSB7IHJldHVybiBjICE9ICcgJzsgfTsKICB1bnRpbEVuZFVSSSA9IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIGMgIT0gJz4nOyB9OwogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB7IAogICAgICAgICAgIGxvY2F0aW9uIDogTG9jYXRpb24uUFJFX1NVQkpFQ1QsCiAgICAgICAgICAgdXJpcyAgICAgOiBbXSwKICAgICAgICAgICBhbmNob3JzICA6IFtdLAogICAgICAgICAgIGJub2RlcyAgIDogW10sCiAgICAgICAgICAgbGFuZ3MgICAgOiBbXSwKICAgICAgICAgICB0eXBlcyAgICA6IFtdCiAgICAgICB9OwogICAgfSwKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgIGlmKGNoID09ICc8JykgewogICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgICAgdmFyIHBhcnNlZFVSSSA9ICcnOwogICAgICAgICBzdHJlYW0uZWF0V2hpbGUoIGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyMnICYmIGMgIT0gJz4nICkgeyBwYXJzZWRVUkkgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30gKTsKICAgICAgICAgc3RhdGUudXJpcy5wdXNoKHBhcnNlZFVSSSk7CiAgICAgICAgIGlmKCBzdHJlYW0ubWF0Y2goJyMnLCBmYWxzZSkgKSByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnPicpOwogICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgfQogICAgICBpZihjaCA9PSAnIycpIHsKICAgICAgICB2YXIgcGFyc2VkQW5jaG9yID0gJyc7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoYyAhPSAnPicgJiYgYyAhPSAnICcpIHsgcGFyc2VkQW5jaG9yKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlfSk7CiAgICAgICAgc3RhdGUuYW5jaG9ycy5wdXNoKHBhcnNlZEFuY2hvcik7CiAgICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJzsKICAgICAgfQogICAgICBpZihjaCA9PSAnPicpIHsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTsKICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICB9CiAgICAgIGlmKGNoID09ICdfJykgewogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCBjaCk7CiAgICAgICAgICB2YXIgcGFyc2VkQk5vZGUgPSAnJzsKICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShmdW5jdGlvbihjKSB7IGlmKCBjICE9ICcgJyApIHsgcGFyc2VkQk5vZGUgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30pOwogICAgICAgICAgc3RhdGUuYm5vZGVzLnB1c2gocGFyc2VkQk5vZGUpOwogICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJyAnKTsKICAgICAgICAgIHJldHVybiAnYnVpbHRpbic7CiAgICAgIH0KICAgICAgaWYoY2ggPT0gJyInKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSggZnVuY3Rpb24oYykgeyByZXR1cm4gYyAhPSAnIic7IH0gKTsKICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICBpZiggc3RyZWFtLnBlZWsoKSAhPSAnQCcgJiYgc3RyZWFtLnBlZWsoKSAhPSAnXicgKSB7CiAgICAgICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnIicpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICdzdHJpbmcnOwogICAgICB9CiAgICAgIGlmKCBjaCA9PSAnQCcgKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsICdAJyk7CiAgICAgICAgICB2YXIgcGFyc2VkTGFuZyA9ICcnOwogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyAnICkgeyBwYXJzZWRMYW5nICs9IGM7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9KTsKICAgICAgICAgIHN0YXRlLmxhbmdzLnB1c2gocGFyc2VkTGFuZyk7CiAgICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnICcpOwogICAgICAgICAgcmV0dXJuICdzdHJpbmctMic7CiAgICAgIH0KICAgICAgaWYoIGNoID09ICdeJyApIHsKICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsICdeJyk7CiAgICAgICAgICB2YXIgcGFyc2VkVHlwZSA9ICcnOwogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJz4nICkgeyBwYXJzZWRUeXBlICs9IGM7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9ICk7CiAgICAgICAgICBzdGF0ZS50eXBlcy5wdXNoKHBhcnNlZFR5cGUpOwogICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTsKICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICB9CiAgICAgIGlmKCBjaCA9PSAnICcgKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgfQogICAgICBpZiggY2ggPT0gJy4nICkgewogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCBjaCk7CiAgICAgIH0KICAgIH0KICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9uLXRyaXBsZXMiLCAibnRyaXBsZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBhc2NhbCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGFzY2FsLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQYXNjYWwgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CigqIEV4YW1wbGUgUGFzY2FsIGNvZGUgKikKCndoaWxlIGEgPD4gYiBkbyB3cml0ZWxuKCdXYWl0aW5nJyk7CiAKaWYgYSA+IGIgdGhlbiAKICB3cml0ZWxuKCdDb25kaXRpb24gbWV0JykKZWxzZSAKICB3cml0ZWxuKCdDb25kaXRpb24gbm90IG1ldCcpOwogCmZvciBpIDo9IDEgdG8gMTAgZG8gCiAgd3JpdGVsbignSXRlcmF0aW9uOiAnLCBpOjEpOwogCnJlcGVhdAogIGEgOj0gYSArIDEKdW50aWwgYSA9IDEwOwogCmNhc2UgaSBvZgogIDA6IHdyaXRlKCd6ZXJvJyk7CiAgMTogd3JpdGUoJ29uZScpOwogIDI6IHdyaXRlKCd0d28nKQplbmQ7CjwvdGV4dGFyZWE+PC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtcGFzY2FsIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtcGFzY2FsPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExIHNvdWNlTGFpciA8c3VwcG9ydEBzb3VyY2VsYWlyLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/pascal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwYXNjYWwiLCBmdW5jdGlvbihjb25maWcpIHsKICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsKICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIG9iajsKICB9CiAgdmFyIGtleXdvcmRzID0gd29yZHMoImFuZCBhcnJheSBiZWdpbiBjYXNlIGNvbnN0IGRpdiBkbyBkb3dudG8gZWxzZSBlbmQgZmlsZSBmb3IgZm9yd2FyZCBpbnRlZ2VyICIgKwogICAgICAgICAgICAgICAgICAgICAgICJib29sZWFuIGNoYXIgZnVuY3Rpb24gZ290byBpZiBpbiBsYWJlbCBtb2QgbmlsIG5vdCBvZiBvciBwYWNrZWQgcHJvY2VkdXJlICIgKwogICAgICAgICAgICAgICAgICAgICAgICJwcm9ncmFtIHJlY29yZCByZXBlYXQgc2V0IHN0cmluZyB0aGVuIHRvIHR5cGUgdW50aWwgdmFyIHdoaWxlIHdpdGgiKTsKICB2YXIgYmxvY2tLZXl3b3JkcyA9IHdvcmRzKCJjYXNlIGRvIGVsc2UgZm9yIGlmIHN3aXRjaCB3aGlsZSBzdHJ1Y3QgdGhlbiBvZiIpOwogIHZhciBhdG9tcyA9IHsibnVsbCI6IHRydWV9OwoKICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fFwvXS87CiAgdmFyIGN1clB1bmM7CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICIjIiAmJiBzdGF0ZS5zdGFydE9mTGluZSkgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAibWV0YSI7CiAgICB9CiAgICBpZiAoY2ggPT0gJyInIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgaWYgKGNoID09ICIoIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7CiAgICAgIHJldHVybiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbAogICAgfQogICAgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl0vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfQogICAgaWYgKGNoID09ICIvIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgewogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7CiAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICB9CiAgICBpZiAoYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuICJhdG9tIjsKICAgIHJldHVybiAid29yZCI7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7CiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO30KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQgfHwgIWVzY2FwZWQpIHN0YXRlLnRva2VuaXplID0gbnVsbDsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiKSIgJiYgbWF5YmVFbmQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLmFsaWduID0gYWxpZ247CiAgICB0aGlzLnByZXYgPSBwcmV2OwogIH0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLmluZGVudGVkLCBjb2wsIHR5cGUsIG51bGwsIHN0YXRlLmNvbnRleHQpOwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICB2YXIgdCA9IHN0YXRlLmNvbnRleHQudHlwZTsKICAgIGlmICh0ID09ICIpIiB8fCB0ID09ICJdIiApCiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2OwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IG51bGwsCiAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKGJhc2Vjb2x1bW4gfHwgMCkgLSBjb25maWcuaW5kZW50VW5pdCwgMCwgInRvcCIsIGZhbHNlKSwKICAgICAgICBpbmRlbnRlZDogMCwKICAgICAgICBzdGFydE9mTGluZTogdHJ1ZQogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgY3VyUHVuYyA9IG51bGw7CiAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAoc3R5bGUgPT0gImNvbW1lbnQiIHx8IHN0eWxlID09ICJtZXRhIikgcmV0dXJuIHN0eWxlOwogICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IHRydWU7CgogICAgICBpZiAoKGN1clB1bmMgPT0gIjsiIHx8IGN1clB1bmMgPT0gIjoiKSAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IikgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIlsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiXSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIikiKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSBjdHgudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIGVsc2UgaWYgKCBjdHgudHlwZSA9PSAidG9wIiB8fCAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgY3VyUHVuYyA9PSAibmV3c3RhdGVtZW50IikpCiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgInN0YXRlbWVudCIpOwogICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ7fSIKICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXBhc2NhbCIsICJwYXNjYWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBlcmwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InBlcmwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFBlcmwgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMhL3Vzci9iaW4vcGVybAoKdXNlIFNvbWV0aGluZyBxdyhmdW5jMSBmdW5jMik7CgojIHN0cmluZ3MKbXkgJHMxID0gcXEnc2luZ2xlIGxpbmUnOwpvdXIgJHMyID0gcShtdWx0aS0KICAgICAgICAgICAgICBsaW5lKTsKCj1pdGVtIFNvbWV0aGluZwoJRXhhbXBsZS4KPWN1dAoKbXkgJGh0bWw9PDwnSFRNTCcKPGh0bWw+Cjx0aXRsZT5oaSE8L3RpdGxlPgo8L2h0bWw+CkhUTUwKCnByaW50ICJmaXJzdCwiLmpvaW4oJywnLCAnc2Vjb25kJywgcXF+dGhpcmR+KTsKCmlmKCRzMSA9fiBtWyg/PCFccykobC5uZSlcel1vKSB7CgkkaC0+eyQxfT0kJC4nIHByZWRlZmluZWQgdmFyaWFibGVzJzsKCSRzMiA9fiBzL1wtbGluZS8vb3g7CgkkczEgPX4gc1sKCQkgIGxpbmUgXQoJCVsKCQkgIGJsb2NrCgkJXW94Owp9CgoxOyAjIG51bWJlcnMgYW5kIGNvbW1lbnRzCgpfX0VORF9fCnNvbWV0aGluZy4uLgoKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXBlcmw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IFNhYmFjYSA8bWFpbEBzYWJhY2EuY29tPiB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/perl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvcjIgbW9kZS9wZXJsL3BlcmwuanMgKHRleHQveC1wZXJsKSBiZXRhIDAuMTAgKDIwMTEtMTEtMDgpCi8vIFRoaXMgaXMgYSBwYXJ0IG9mIENvZGVNaXJyb3IgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2FiYWNhL0NvZGVNaXJyb3JfbW9kZV9wZXJsIChtYWlsQHNhYmFjYS5jb20pCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgicGVybCIsZnVuY3Rpb24oY29uZmlnLHBhcnNlckNvbmZpZyl7CgkvLyBodHRwOi8vcGVybGRvYy5wZXJsLm9yZwoJdmFyIFBFUkw9ewkJCQkgICAgCS8vICAgbnVsbCAtIG1hZ2ljIHRvdWNoCgkJCQkJCQkvLyAgIDEgLSBrZXl3b3JkCgkJCQkJCQkvLyAgIDIgLSBkZWYKCQkJCQkJCS8vICAgMyAtIGF0b20KCQkJCQkJCS8vICAgNCAtIG9wZXJhdG9yCgkJCQkJCQkvLyAgIDUgLSB2YXJpYWJsZS0yIChwcmVkZWZpbmVkKQoJCQkJCQkJLy8gICBbeCx5XSAtIHg9MSwyLDM7IHk9bXVzdCBiZSBkZWZpbmVkIGlmIHh7Li4ufQoJCQkJCQkvLwlQRVJMIG9wZXJhdG9ycwoJCSctPicJCQkJOiAgIDQsCgkJJysrJwkJCQk6ICAgNCwKCQknLS0nCQkJCTogICA0LAoJCScqKicJCQkJOiAgIDQsCgkJCQkJCQkvLyAgICEgfiBcIGFuZCB1bmFyeSArIGFuZCAtCgkJJz1+JwkJCQk6ICAgNCwKCQknIX4nCQkJCTogICA0LAoJCScqJwkJCQk6ICAgNCwKCQknLycJCQkJOiAgIDQsCgkJJyUnCQkJCTogICA0LAoJCSd4JwkJCQk6ICAgNCwKCQknKycJCQkJOiAgIDQsCgkJJy0nCQkJCTogICA0LAoJCScuJwkJCQk6ICAgNCwKCQknPDwnCQkJCTogICA0LAoJCSc+PicJCQkJOiAgIDQsCgkJCQkJCQkvLyAgIG5hbWVkIHVuYXJ5IG9wZXJhdG9ycwoJCSc8JwkJCQk6ICAgNCwKCQknPicJCQkJOiAgIDQsCgkJJzw9JwkJCQk6ICAgNCwKCQknPj0nCQkJCTogICA0LAoJCSdsdCcJCQkJOiAgIDQsCgkJJ2d0JwkJCQk6ICAgNCwKCQknbGUnCQkJCTogICA0LAoJCSdnZScJCQkJOiAgIDQsCgkJJz09JwkJCQk6ICAgNCwKCQknIT0nCQkJCTogICA0LAoJCSc8PT4nCQkJCTogICA0LAoJCSdlcScJCQkJOiAgIDQsCgkJJ25lJwkJCQk6ICAgNCwKCQknY21wJwkJCQk6ICAgNCwKCQknfn4nCQkJCTogICA0LAoJCScmJwkJCQk6ICAgNCwKCQknfCcJCQkJOiAgIDQsCgkJJ14nCQkJCTogICA0LAoJCScmJicJCQkJOiAgIDQsCgkJJ3x8JwkJCQk6ICAgNCwKCQknLy8nCQkJCTogICA0LAoJCScuLicJCQkJOiAgIDQsCgkJJy4uLicJCQkJOiAgIDQsCgkJJz8nCQkJCTogICA0LAoJCSc6JwkJCQk6ICAgNCwKCQknPScJCQkJOiAgIDQsCgkJJys9JwkJCQk6ICAgNCwKCQknLT0nCQkJCTogICA0LAoJCScqPScJCQkJOiAgIDQsCS8vICAgZXRjLiA/Pz8KCQknLCcJCQkJOiAgIDQsCgkJJz0+JwkJCQk6ICAgNCwKCQknOjonCQkJCTogICA0LAoJCQkJICAgCQkJLy8gICBsaXN0IG9wZXJhdG9ycyAocmlnaHR3YXJkKQoJCSdub3QnCQkJCTogICA0LAoJCSdhbmQnCQkJCTogICA0LAoJCSdvcicJCQkJOiAgIDQsCgkJJ3hvcicJCQkJOiAgIDQsCgkJCQkJCS8vCVBFUkwgcHJlZGVmaW5lZCB2YXJpYWJsZXMgKEkga25vdywgd2hhdCB0aGlzIGlzIGEgcGFyYW5vaWQgaWRlYSwgYnV0IG1heSBiZSBuZWVkZWQgZm9yIHBlb3BsZSwgd2hvIGxlYXJuIFBFUkwsIGFuZCBmb3IgbWUgYXMgd2VsbCwgLi4uYW5kIG1heSBiZSBmb3IgeW91PzspCgkJJ0JFR0lOJwkJCQk6ICAgWzUsMV0sCgkJJ0VORCcJCQkJOiAgIFs1LDFdLAoJCSdQUklOVCcJCQkJOiAgIFs1LDFdLAoJCSdQUklOVEYnCQkJOiAgIFs1LDFdLAoJCSdHRVRDJwkJCQk6ICAgWzUsMV0sCgkJJ1JFQUQnCQkJCTogICBbNSwxXSwKCQknUkVBRExJTkUnCQkJOiAgIFs1LDFdLAoJCSdERVNUUk9ZJwkJCTogICBbNSwxXSwKCQknVElFJwkJCQk6ICAgWzUsMV0sCgkJJ1RJRUhBTkRMRScJCQk6ICAgWzUsMV0sCgkJJ1VOVElFJwkJCQk6ICAgWzUsMV0sCgkJJ1NURElOJwkJCQk6ICAgIDUsCgkJJ1NURElOX1RPUCcJCQk6ICAgIDUsCgkJJ1NURE9VVCcJCQk6ICAgIDUsCgkJJ1NURE9VVF9UT1AnCQkJOiAgICA1LAoJCSdTVERFUlInCQkJOiAgICA1LAoJCSdTVERFUlJfVE9QJwkJCTogICAgNSwKCQknJEFSRycJCQkJOiAgICA1LAoJCSckXycJCQkJOiAgICA1LAoJCSdAQVJHJwkJCQk6ICAgIDUsCgkJJ0BfJwkJCQk6ICAgIDUsCgkJJyRMSVNUX1NFUEFSQVRPUicJCTogICAgNSwKCQknJCInCQkJCTogICAgNSwKCQknJFBST0NFU1NfSUQnCQkJOiAgICA1LAoJCSckUElEJwkJCQk6ICAgIDUsCgkJJyQkJwkJCQk6ICAgIDUsCgkJJyRSRUFMX0dST1VQX0lEJwkJOiAgICA1LAoJCSckR0lEJwkJCQk6ICAgIDUsCgkJJyQoJwkJCQk6ICAgIDUsCgkJJyRFRkZFQ1RJVkVfR1JPVVBfSUQnCQk6ICAgIDUsCgkJJyRFR0lEJwkJCQk6ICAgIDUsCgkJJyQpJwkJCQk6ICAgIDUsCgkJJyRQUk9HUkFNX05BTUUnCQkJOiAgICA1LAoJCSckMCcJCQkJOiAgICA1LAoJCSckU1VCU0NSSVBUX1NFUEFSQVRPUicJCTogICAgNSwKCQknJFNVQlNFUCcJCQk6ICAgIDUsCgkJJyQ7JwkJCQk6ICAgIDUsCgkJJyRSRUFMX1VTRVJfSUQnCQkJOiAgICA1LAoJCSckVUlEJwkJCQk6ICAgIDUsCgkJJyQ8JwkJCQk6ICAgIDUsCgkJJyRFRkZFQ1RJVkVfVVNFUl9JRCcJCTogICAgNSwKCQknJEVVSUQnCQkJCTogICAgNSwKCQknJD4nCQkJCTogICAgNSwKCQknJGEnCQkJCTogICAgNSwKCQknJGInCQkJCTogICAgNSwKCQknJENPTVBJTElORycJCQk6ICAgIDUsCgkJJyReQycJCQkJOiAgICA1LAoJCSckREVCVUdHSU5HJwkJCTogICAgNSwKCQknJF5EJwkJCQk6ICAgIDUsCgkJJyR7XkVOQ09ESU5HfScJCQk6ICAgIDUsCgkJJyRFTlYnCQkJCTogICAgNSwKCQknJUVOVicJCQkJOiAgICA1LAoJCSckU1lTVEVNX0ZEX01BWCcJCTogICAgNSwKCQknJF5GJwkJCQk6ICAgIDUsCgkJJ0BGJwkJCQk6ICAgIDUsCgkJJyR7XkdMT0JBTF9QSEFTRX0nCQk6ICAgIDUsCgkJJyReSCcJCQkJOiAgICA1LAoJCSclXkgnCQkJCTogICAgNSwKCQknQElOQycJCQkJOiAgICA1LAoJCSclSU5DJwkJCQk6ICAgIDUsCgkJJyRJTlBMQUNFX0VESVQnCQkJOiAgICA1LAoJCSckXkknCQkJCTogICAgNSwKCQknJF5NJwkJCQk6ICAgIDUsCgkJJyRPU05BTUUnCQkJOiAgICA1LAoJCSckXk8nCQkJCTogICAgNSwKCQknJHteT1BFTn0nCQkJOiAgICA1LAoJCSckUEVSTERCJwkJCTogICAgNSwKCQknJF5QJwkJCQk6ICAgIDUsCgkJJyRTSUcnCQkJCTogICAgNSwKCQknJVNJRycJCQkJOiAgICA1LAoJCSckQkFTRVRJTUUnCQkJOiAgICA1LAoJCSckXlQnCQkJCTogICAgNSwKCQknJHteVEFJTlR9JwkJCTogICAgNSwKCQknJHteVU5JQ09ERX0nCQkJOiAgICA1LAoJCScke15VVEY4Q0FDSEV9JwkJCTogICAgNSwKCQknJHteVVRGOExPQ0FMRX0nCQk6ICAgIDUsCgkJJyRQRVJMX1ZFUlNJT04nCQkJOiAgICA1LAoJCSckXlYnCQkJCTogICAgNSwKCQknJHteV0lOMzJfU0xPUFBZX1NUQVR9JwkJOiAgICA1LAoJCSckRVhFQ1VUQUJMRV9OQU1FJwkJOiAgICA1LAoJCSckXlgnCQkJCTogICAgNSwKCQknJDEnCQkJCTogICAgNSwJLy8gLSByZWdleHAgJDEsICQyLi4uCgkJJyRNQVRDSCcJCQk6ICAgIDUsCgkJJyQmJwkJCQk6ICAgIDUsCgkJJyR7Xk1BVENIfScJCQk6ICAgIDUsCgkJJyRQUkVNQVRDSCcJCQk6ICAgIDUsCgkJJyRgJwkJCQk6ICAgIDUsCgkJJyR7XlBSRU1BVENIfScJCQk6ICAgIDUsCgkJJyRQT1NUTUFUQ0gnCQkJOiAgICA1LAoJCSIkJyIJCQkJOiAgICA1LAoJCScke15QT1NUTUFUQ0h9JwkJCTogICAgNSwKCQknJExBU1RfUEFSRU5fTUFUQ0gnCQk6ICAgIDUsCgkJJyQrJwkJCQk6ICAgIDUsCgkJJyRMQVNUX1NVQk1BVENIX1JFU1VMVCcJCTogICAgNSwKCQknJF5OJwkJCQk6ICAgIDUsCgkJJ0BMQVNUX01BVENIX0VORCcJCTogICAgNSwKCQknQCsnCQkJCTogICAgNSwKCQknJUxBU1RfUEFSRU5fTUFUQ0gnCQk6ICAgIDUsCgkJJyUrJwkJCQk6ICAgIDUsCgkJJ0BMQVNUX01BVENIX1NUQVJUJwkJOiAgICA1LAoJCSdALScJCQkJOiAgICA1LAoJCSclTEFTVF9NQVRDSF9TVEFSVCcJCTogICAgNSwKCQknJS0nCQkJCTogICAgNSwKCQknJExBU1RfUkVHRVhQX0NPREVfUkVTVUxUJwk6ICAgIDUsCgkJJyReUicJCQkJOiAgICA1LAoJCScke15SRV9ERUJVR19GTEFHU30nCQk6ICAgIDUsCgkJJyR7XlJFX1RSSUVfTUFYQlVGfScJCTogICAgNSwKCQknJEFSR1YnCQkJCTogICAgNSwKCQknQEFSR1YnCQkJCTogICAgNSwKCQknQVJHVicJCQkJOiAgICA1LAoJCSdBUkdWT1VUJwkJCTogICAgNSwKCQknJE9VVFBVVF9GSUVMRF9TRVBBUkFUT1InCTogICAgNSwKCQknJE9GUycJCQkJOiAgICA1LAoJCSckLCcJCQkJOiAgICA1LAoJCSckSU5QVVRfTElORV9OVU1CRVInCQk6ICAgIDUsCgkJJyROUicJCQkJOiAgICA1LAoJCSckLicJCQkJOiAgICA1LAoJCSckSU5QVVRfUkVDT1JEX1NFUEFSQVRPUicJOiAgICA1LAoJCSckUlMnCQkJCTogICAgNSwKCQknJC8nCQkJCTogICAgNSwKCQknJE9VVFBVVF9SRUNPUkRfU0VQQVJBVE9SJwk6ICAgIDUsCgkJJyRPUlMnCQkJCTogICAgNSwKCQknJFxcJwkJCQk6ICAgIDUsCgkJJyRPVVRQVVRfQVVUT0ZMVVNIJwkJOiAgICA1LAoJCSckfCcJCQkJOiAgICA1LAoJCSckQUNDVU1VTEFUT1InCQkJOiAgICA1LAoJCSckXkEnCQkJCTogICAgNSwKCQknJEZPUk1BVF9GT1JNRkVFRCcJCTogICAgNSwKCQknJF5MJwkJCQk6ICAgIDUsCgkJJyRGT1JNQVRfUEFHRV9OVU1CRVInCQk6ICAgIDUsCgkJJyQlJwkJCQk6ICAgIDUsCgkJJyRGT1JNQVRfTElORVNfTEVGVCcJCTogICAgNSwKCQknJC0nCQkJCTogICAgNSwKCQknJEZPUk1BVF9MSU5FX0JSRUFLX0NIQVJBQ1RFUlMnCTogICAgNSwKCQknJDonCQkJCTogICAgNSwKCQknJEZPUk1BVF9MSU5FU19QRVJfUEFHRScJOiAgICA1LAoJCSckPScJCQkJOiAgICA1LAoJCSckRk9STUFUX1RPUF9OQU1FJwkJOiAgICA1LAoJCSckXicJCQkJOiAgICA1LAoJCSckRk9STUFUX05BTUUnCQkJOiAgICA1LAoJCSckficJCQkJOiAgICA1LAoJCScke15DSElMRF9FUlJPUl9OQVRJVkV9Jwk6ICAgIDUsCgkJJyRFWFRFTkRFRF9PU19FUlJPUicJCTogICAgNSwKCQknJF5FJwkJCQk6ICAgIDUsCgkJJyRFWENFUFRJT05TX0JFSU5HX0NBVUdIVCcJOiAgICA1LAoJCSckXlMnCQkJCTogICAgNSwKCQknJFdBUk5JTkcnCQkJOiAgICA1LAoJCSckXlcnCQkJCTogICAgNSwKCQknJHteV0FSTklOR19CSVRTfScJCTogICAgNSwKCQknJE9TX0VSUk9SJwkJCTogICAgNSwKCQknJEVSUk5PJwkJCTogICAgNSwKCQknJCEnCQkJCTogICAgNSwKCQknJU9TX0VSUk9SJwkJCTogICAgNSwKCQknJUVSUk5PJwkJCTogICAgNSwKCQknJSEnCQkJCTogICAgNSwKCQknJENISUxEX0VSUk9SJwkJCTogICAgNSwKCQknJD8nCQkJCTogICAgNSwKCQknJEVWQUxfRVJST1InCQkJOiAgICA1LAoJCSckQCcJCQkJOiAgICA1LAoJCSckT0ZNVCcJCQkJOiAgICA1LAoJCSckIycJCQkJOiAgICA1LAoJCSckKicJCQkJOiAgICA1LAoJCSckQVJSQVlfQkFTRScJCQk6ICAgIDUsCgkJJyRbJwkJCQk6ICAgIDUsCgkJJyRPTERfUEVSTF9WRVJTSU9OJwkJOiAgICA1LAoJCSckXScJCQkJOiAgICA1LAoJCQkJCQkvLwlQRVJMIGJsb2NrcwoJCSdpZicJCQkJOlsxLDFdLAoJCWVsc2lmCQkJCTpbMSwxXSwKCQknZWxzZScJCQkJOlsxLDFdLAoJCSd3aGlsZScJCQkJOlsxLDFdLAoJCXVubGVzcwkJCQk6WzEsMV0sCgkJJ2ZvcicJCQkJOlsxLDFdLAoJCWZvcmVhY2gJCQkJOlsxLDFdLAoJCQkJCQkvLwlQRVJMIGZ1bmN0aW9ucwoJCSdhYnMnCQkJCToxLAkvLyAtIGFic29sdXRlIHZhbHVlIGZ1bmN0aW9uCgkJYWNjZXB0CQkJCToxLAkvLyAtIGFjY2VwdCBhbiBpbmNvbWluZyBzb2NrZXQgY29ubmVjdAoJCWFsYXJtCQkJCToxLAkvLyAtIHNjaGVkdWxlIGEgU0lHQUxSTQoJCSdhdGFuMicJCQkJOjEsCS8vIC0gYXJjdGFuZ2VudCBvZiBZL1ggaW4gdGhlIHJhbmdlIC1QSSB0byBQSQoJCWJpbmQJCQkJOjEsCS8vIC0gYmluZHMgYW4gYWRkcmVzcyB0byBhIHNvY2tldAoJCWJpbm1vZGUJCQkJOjEsCS8vIC0gcHJlcGFyZSBiaW5hcnkgZmlsZXMgZm9yIEkvTwoJCWJsZXNzCQkJCToxLAkvLyAtIGNyZWF0ZSBhbiBvYmplY3QKCQlib290c3RyYXAJCQk6MSwJLy8KCQknYnJlYWsnCQkJCToxLAkvLyAtIGJyZWFrIG91dCBvZiBhICJnaXZlbiIgYmxvY2sKCQljYWxsZXIJCQkJOjEsCS8vIC0gZ2V0IGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgc3Vicm91dGluZSBjYWxsCgkJY2hkaXIJCQkJOjEsCS8vIC0gY2hhbmdlIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQoJCWNobW9kCQkJCToxLAkvLyAtIGNoYW5nZXMgdGhlIHBlcm1pc3Npb25zIG9uIGEgbGlzdCBvZiBmaWxlcwoJCWNob21wCQkJCToxLAkvLyAtIHJlbW92ZSBhIHRyYWlsaW5nIHJlY29yZCBzZXBhcmF0b3IgZnJvbSBhIHN0cmluZwoJCWNob3AJCQkJOjEsCS8vIC0gcmVtb3ZlIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIGEgc3RyaW5nCgkJY2hvd24JCQkJOjEsCS8vIC0gY2hhbmdlIHRoZSBvd2Vyc2hpcCBvbiBhIGxpc3Qgb2YgZmlsZXMKCQljaHIJCQkJOjEsCS8vIC0gZ2V0IGNoYXJhY3RlciB0aGlzIG51bWJlciByZXByZXNlbnRzCgkJY2hyb290CQkJCToxLAkvLyAtIG1ha2UgZGlyZWN0b3J5IG5ldyByb290IGZvciBwYXRoIGxvb2t1cHMKCQljbG9zZQkJCQk6MSwJLy8gLSBjbG9zZSBmaWxlIChvciBwaXBlIG9yIHNvY2tldCkgaGFuZGxlCgkJY2xvc2VkaXIJCQk6MSwJLy8gLSBjbG9zZSBkaXJlY3RvcnkgaGFuZGxlCgkJY29ubmVjdAkJCQk6MSwJLy8gLSBjb25uZWN0IHRvIGEgcmVtb3RlIHNvY2tldAoJCSdjb250aW51ZScJCQk6WzEsMV0sCS8vIC0gb3B0aW9uYWwgdHJhaWxpbmcgYmxvY2sgaW4gYSB3aGlsZSBvciBmb3JlYWNoCgkJJ2NvcycJCQkJOjEsCS8vIC0gY29zaW5lIGZ1bmN0aW9uCgkJY3J5cHQJCQkJOjEsCS8vIC0gb25lLXdheSBwYXNzd2Qtc3R5bGUgZW5jcnlwdGlvbgoJCWRibWNsb3NlCQkJOjEsCS8vIC0gYnJlYWtzIGJpbmRpbmcgb24gYSB0aWVkIGRibSBmaWxlCgkJZGJtb3BlbgkJCQk6MSwJLy8gLSBjcmVhdGUgYmluZGluZyBvbiBhIHRpZWQgZGJtIGZpbGUKCQknZGVmYXVsdCcJCQk6MSwJLy8KCQlkZWZpbmVkCQkJCToxLAkvLyAtIHRlc3Qgd2hldGhlciBhIHZhbHVlLCB2YXJpYWJsZSwgb3IgZnVuY3Rpb24gaXMgZGVmaW5lZAoJCSdkZWxldGUnCQkJOjEsCS8vIC0gZGVsZXRlcyBhIHZhbHVlIGZyb20gYSBoYXNoCgkJZGllCQkJCToxLAkvLyAtIHJhaXNlIGFuIGV4Y2VwdGlvbiBvciBiYWlsIG91dAoJCSdkbycJCQkJOjEsCS8vIC0gdHVybiBhIEJMT0NLIGludG8gYSBURVJNCgkJZHVtcAkJCQk6MSwJLy8gLSBjcmVhdGUgYW4gaW1tZWRpYXRlIGNvcmUgZHVtcAoJCWVhY2gJCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIG5leHQga2V5L3ZhbHVlIHBhaXIgZnJvbSBhIGhhc2gKCQllbmRncmVudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgZ3JvdXAgZmlsZQoJCWVuZGhvc3RlbnQJCQk6MSwJLy8gLSBiZSBkb25lIHVzaW5nIGhvc3RzIGZpbGUKCQllbmRuZXRlbnQJCQk6MSwJLy8gLSBiZSBkb25lIHVzaW5nIG5ldHdvcmtzIGZpbGUKCQllbmRwcm90b2VudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgcHJvdG9jb2xzIGZpbGUKCQllbmRwd2VudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgcGFzc3dkIGZpbGUKCQllbmRzZXJ2ZW50CQkJOjEsCS8vIC0gYmUgZG9uZSB1c2luZyBzZXJ2aWNlcyBmaWxlCgkJZW9mCQkJCToxLAkvLyAtIHRlc3QgYSBmaWxlaGFuZGxlIGZvciBpdHMgZW5kCgkJJ2V2YWwnCQkJCToxLAkvLyAtIGNhdGNoIGV4Y2VwdGlvbnMgb3IgY29tcGlsZSBhbmQgcnVuIGNvZGUKCQknZXhlYycJCQkJOjEsCS8vIC0gYWJhbmRvbiB0aGlzIHByb2dyYW0gdG8gcnVuIGFub3RoZXIKCQlleGlzdHMJCQkJOjEsCS8vIC0gdGVzdCB3aGV0aGVyIGEgaGFzaCBrZXkgaXMgcHJlc2VudAoJCWV4aXQJCQkJOjEsCS8vIC0gdGVybWluYXRlIHRoaXMgcHJvZ3JhbQoJCSdleHAnCQkJCToxLAkvLyAtIHJhaXNlIEkgdG8gYSBwb3dlcgoJCWZjbnRsCQkJCToxLAkvLyAtIGZpbGUgY29udHJvbCBzeXN0ZW0gY2FsbAoJCWZpbGVubwkJCQk6MSwJLy8gLSByZXR1cm4gZmlsZSBkZXNjcmlwdG9yIGZyb20gZmlsZWhhbmRsZQoJCWZsb2NrCQkJCToxLAkvLyAtIGxvY2sgYW4gZW50aXJlIGZpbGUgd2l0aCBhbiBhZHZpc29yeSBsb2NrCgkJZm9yawkJCQk6MSwJLy8gLSBjcmVhdGUgYSBuZXcgcHJvY2VzcyBqdXN0IGxpa2UgdGhpcyBvbmUKCQlmb3JtYXQJCQkJOjEsCS8vIC0gZGVjbGFyZSBhIHBpY3R1cmUgZm9ybWF0IHdpdGggdXNlIGJ5IHRoZSB3cml0ZSgpIGZ1bmN0aW9uCgkJZm9ybWxpbmUJCQk6MSwJLy8gLSBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBmb3JtYXRzCgkJZ2V0YwkJCQk6MSwJLy8gLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGZpbGVoYW5kbGUKCQlnZXRncmVudAkJCToxLAkvLyAtIGdldCBuZXh0IGdyb3VwIHJlY29yZAoJCWdldGdyZ2lkCQkJOjEsCS8vIC0gZ2V0IGdyb3VwIHJlY29yZCBnaXZlbiBncm91cCB1c2VyIElECgkJZ2V0Z3JuYW0JCQk6MSwJLy8gLSBnZXQgZ3JvdXAgcmVjb3JkIGdpdmVuIGdyb3VwIG5hbWUKCQlnZXRob3N0YnlhZGRyCQkJOjEsCS8vIC0gZ2V0IGhvc3QgcmVjb3JkIGdpdmVuIGl0cyBhZGRyZXNzCgkJZ2V0aG9zdGJ5bmFtZQkJCToxLAkvLyAtIGdldCBob3N0IHJlY29yZCBnaXZlbiBuYW1lCgkJZ2V0aG9zdGVudAkJCToxLAkvLyAtIGdldCBuZXh0IGhvc3RzIHJlY29yZAoJCWdldGxvZ2luCQkJOjEsCS8vIC0gcmV0dXJuIHdobyBsb2dnZWQgaW4gYXQgdGhpcyB0dHkKCQlnZXRuZXRieWFkZHIJCQk6MSwJLy8gLSBnZXQgbmV0d29yayByZWNvcmQgZ2l2ZW4gaXRzIGFkZHJlc3MKCQlnZXRuZXRieW5hbWUJCQk6MSwJLy8gLSBnZXQgbmV0d29ya3MgcmVjb3JkIGdpdmVuIG5hbWUKCQlnZXRuZXRlbnQJCQk6MSwJLy8gLSBnZXQgbmV4dCBuZXR3b3JrcyByZWNvcmQKCQlnZXRwZWVybmFtZQkJCToxLAkvLyAtIGZpbmQgdGhlIG90aGVyIGVuZCBvZiBhIHNvY2tldCBjb25uZWN0aW9uCgkJZ2V0cGdycAkJCQk6MSwJLy8gLSBnZXQgcHJvY2VzcyBncm91cAoJCWdldHBwaWQJCQkJOjEsCS8vIC0gZ2V0IHBhcmVudCBwcm9jZXNzIElECgkJZ2V0cHJpb3JpdHkJCQk6MSwJLy8gLSBnZXQgY3VycmVudCBuaWNlIHZhbHVlCgkJZ2V0cHJvdG9ieW5hbWUJCQk6MSwJLy8gLSBnZXQgcHJvdG9jb2wgcmVjb3JkIGdpdmVuIG5hbWUKCQlnZXRwcm90b2J5bnVtYmVyCQk6MSwJLy8gLSBnZXQgcHJvdG9jb2wgcmVjb3JkIG51bWVyaWMgcHJvdG9jb2wKCQlnZXRwcm90b2VudAkJCToxLAkvLyAtIGdldCBuZXh0IHByb3RvY29scyByZWNvcmQKCQlnZXRwd2VudAkJCToxLAkvLyAtIGdldCBuZXh0IHBhc3N3ZCByZWNvcmQKCQlnZXRwd25hbQkJCToxLAkvLyAtIGdldCBwYXNzd2QgcmVjb3JkIGdpdmVuIHVzZXIgbG9naW4gbmFtZQoJCWdldHB3dWlkCQkJOjEsCS8vIC0gZ2V0IHBhc3N3ZCByZWNvcmQgZ2l2ZW4gdXNlciBJRAoJCWdldHNlcnZieW5hbWUJCQk6MSwJLy8gLSBnZXQgc2VydmljZXMgcmVjb3JkIGdpdmVuIGl0cyBuYW1lCgkJZ2V0c2VydmJ5cG9ydAkJCToxLAkvLyAtIGdldCBzZXJ2aWNlcyByZWNvcmQgZ2l2ZW4gbnVtZXJpYyBwb3J0CgkJZ2V0c2VydmVudAkJCToxLAkvLyAtIGdldCBuZXh0IHNlcnZpY2VzIHJlY29yZAoJCWdldHNvY2tuYW1lCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIHNvY2thZGRyIGZvciBhIGdpdmVuIHNvY2tldAoJCWdldHNvY2tvcHQJCQk6MSwJLy8gLSBnZXQgc29ja2V0IG9wdGlvbnMgb24gYSBnaXZlbiBzb2NrZXQKCQlnaXZlbgkJCQk6MSwJLy8KCQlnbG9iCQkJCToxLAkvLyAtIGV4cGFuZCBmaWxlbmFtZXMgdXNpbmcgd2lsZGNhcmRzCgkJZ210aW1lCQkJCToxLAkvLyAtIGNvbnZlcnQgVU5JWCB0aW1lIGludG8gcmVjb3JkIG9yIHN0cmluZyB1c2luZyBHcmVlbndpY2ggdGltZQoJCSdnb3RvJwkJCQk6MSwJLy8gLSBjcmVhdGUgc3BhZ2hldHRpIGNvZGUKCQlncmVwCQkJCToxLAkvLyAtIGxvY2F0ZSBlbGVtZW50cyBpbiBhIGxpc3QgdGVzdCB0cnVlIGFnYWluc3QgYSBnaXZlbiBjcml0ZXJpb24KCQloZXgJCQkJOjEsCS8vIC0gY29udmVydCBhIHN0cmluZyB0byBhIGhleGFkZWNpbWFsIG51bWJlcgoJCSdpbXBvcnQnCQkJOjEsCS8vIC0gcGF0Y2ggYSBtb2R1bGUncyBuYW1lc3BhY2UgaW50byB5b3VyIG93bgoJCWluZGV4CQkJCToxLAkvLyAtIGZpbmQgYSBzdWJzdHJpbmcgd2l0aGluIGEgc3RyaW5nCgkJaW50CQkJCToxLAkvLyAtIGdldCB0aGUgaW50ZWdlciBwb3J0aW9uIG9mIGEgbnVtYmVyCgkJaW9jdGwJCQkJOjEsCS8vIC0gc3lzdGVtLWRlcGVuZGVudCBkZXZpY2UgY29udHJvbCBzeXN0ZW0gY2FsbAoJCSdqb2luJwkJCQk6MSwJLy8gLSBqb2luIGEgbGlzdCBpbnRvIGEgc3RyaW5nIHVzaW5nIGEgc2VwYXJhdG9yCgkJa2V5cwkJCQk6MSwJLy8gLSByZXRyaWV2ZSBsaXN0IG9mIGluZGljZXMgZnJvbSBhIGhhc2gKCQlraWxsCQkJCToxLAkvLyAtIHNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIG9yIHByb2Nlc3MgZ3JvdXAKCQlsYXN0CQkJCToxLAkvLyAtIGV4aXQgYSBibG9jayBwcmVtYXR1cmVseQoJCWxjCQkJCToxLAkvLyAtIHJldHVybiBsb3dlci1jYXNlIHZlcnNpb24gb2YgYSBzdHJpbmcKCQlsY2ZpcnN0CQkJCToxLAkvLyAtIHJldHVybiBhIHN0cmluZyB3aXRoIGp1c3QgdGhlIG5leHQgbGV0dGVyIGluIGxvd2VyIGNhc2UKCQlsZW5ndGgJCQkJOjEsCS8vIC0gcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBzdHJpbmcKCQknbGluaycJCQkJOjEsCS8vIC0gY3JlYXRlIGEgaGFyZCBsaW5rIGluIHRoZSBmaWxlc3l0ZW0KCQlsaXN0ZW4JCQkJOjEsCS8vIC0gcmVnaXN0ZXIgeW91ciBzb2NrZXQgYXMgYSBzZXJ2ZXIKCQlsb2NhbAkJCQk6IDIsCS8vIC0gY3JlYXRlIGEgdGVtcG9yYXJ5IHZhbHVlIGZvciBhIGdsb2JhbCB2YXJpYWJsZSAoZHluYW1pYyBzY29waW5nKQoJCWxvY2FsdGltZQkJCToxLAkvLyAtIGNvbnZlcnQgVU5JWCB0aW1lIGludG8gcmVjb3JkIG9yIHN0cmluZyB1c2luZyBsb2NhbCB0aW1lCgkJbG9jawkJCQk6MSwJLy8gLSBnZXQgYSB0aHJlYWQgbG9jayBvbiBhIHZhcmlhYmxlLCBzdWJyb3V0aW5lLCBvciBtZXRob2QKCQknbG9nJwkJCQk6MSwJLy8gLSByZXRyaWV2ZSB0aGUgbmF0dXJhbCBsb2dhcml0aG0gZm9yIGEgbnVtYmVyCgkJbHN0YXQJCQkJOjEsCS8vIC0gc3RhdCBhIHN5bWJvbGljIGxpbmsKCQltCQkJCTpudWxsLAkvLyAtIG1hdGNoIGEgc3RyaW5nIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybgoJCW1hcAkJCQk6MSwJLy8gLSBhcHBseSBhIGNoYW5nZSB0byBhIGxpc3QgdG8gZ2V0IGJhY2sgYSBuZXcgbGlzdCB3aXRoIHRoZSBjaGFuZ2VzCgkJbWtkaXIJCQkJOjEsCS8vIC0gY3JlYXRlIGEgZGlyZWN0b3J5CgkJbXNnY3RsCQkJCToxLAkvLyAtIFN5c1YgSVBDIG1lc3NhZ2UgY29udHJvbCBvcGVyYXRpb25zCgkJbXNnZ2V0CQkJCToxLAkvLyAtIGdldCBTeXNWIElQQyBtZXNzYWdlIHF1ZXVlCgkJbXNncmN2CQkJCToxLAkvLyAtIHJlY2VpdmUgYSBTeXNWIElQQyBtZXNzYWdlIGZyb20gYSBtZXNzYWdlIHF1ZXVlCgkJbXNnc25kCQkJCToxLAkvLyAtIHNlbmQgYSBTeXNWIElQQyBtZXNzYWdlIHRvIGEgbWVzc2FnZSBxdWV1ZQoJCW15CQkJCTogMiwJLy8gLSBkZWNsYXJlIGFuZCBhc3NpZ24gYSBsb2NhbCB2YXJpYWJsZSAobGV4aWNhbCBzY29waW5nKQoJCSduZXcnCQkJCToxLAkvLwoJCW5leHQJCQkJOjEsCS8vIC0gaXRlcmF0ZSBhIGJsb2NrIHByZW1hdHVyZWx5CgkJbm8JCQkJOjEsCS8vIC0gdW5pbXBvcnQgc29tZSBtb2R1bGUgc3ltYm9scyBvciBzZW1hbnRpY3MgYXQgY29tcGlsZSB0aW1lCgkJb2N0CQkJCToxLAkvLyAtIGNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gb2N0YWwgbnVtYmVyCgkJb3BlbgkJCQk6MSwJLy8gLSBvcGVuIGEgZmlsZSwgcGlwZSwgb3IgZGVzY3JpcHRvcgoJCW9wZW5kaXIJCQkJOjEsCS8vIC0gb3BlbiBhIGRpcmVjdG9yeQoJCW9yZAkJCQk6MSwJLy8gLSBmaW5kIGEgY2hhcmFjdGVyJ3MgbnVtZXJpYyByZXByZXNlbnRhdGlvbgoJCW91cgkJCQk6IDIsCS8vIC0gZGVjbGFyZSBhbmQgYXNzaWduIGEgcGFja2FnZSB2YXJpYWJsZSAobGV4aWNhbCBzY29waW5nKQoJCXBhY2sJCQkJOjEsCS8vIC0gY29udmVydCBhIGxpc3QgaW50byBhIGJpbmFyeSByZXByZXNlbnRhdGlvbgoJCSdwYWNrYWdlJwkJCToxLAkvLyAtIGRlY2xhcmUgYSBzZXBhcmF0ZSBnbG9iYWwgbmFtZXNwYWNlCgkJcGlwZQkJCQk6MSwJLy8gLSBvcGVuIGEgcGFpciBvZiBjb25uZWN0ZWQgZmlsZWhhbmRsZXMKCQlwb3AJCQkJOjEsCS8vIC0gcmVtb3ZlIHRoZSBsYXN0IGVsZW1lbnQgZnJvbSBhbiBhcnJheSBhbmQgcmV0dXJuIGl0CgkJcG9zCQkJCToxLAkvLyAtIGZpbmQgb3Igc2V0IHRoZSBvZmZzZXQgZm9yIHRoZSBsYXN0L25leHQgbS8vZyBzZWFyY2gKCQlwcmludAkJCQk6MSwJLy8gLSBvdXRwdXQgYSBsaXN0IHRvIGEgZmlsZWhhbmRsZQoJCXByaW50ZgkJCQk6MSwJLy8gLSBvdXRwdXQgYSBmb3JtYXR0ZWQgbGlzdCB0byBhIGZpbGVoYW5kbGUKCQlwcm90b3R5cGUJCQk6MSwJLy8gLSBnZXQgdGhlIHByb3RvdHlwZSAoaWYgYW55KSBvZiBhIHN1YnJvdXRpbmUKCQlwdXNoCQkJCToxLAkvLyAtIGFwcGVuZCBvbmUgb3IgbW9yZSBlbGVtZW50cyB0byBhbiBhcnJheQoJCXEJCQkJOm51bGwsCS8vIC0gc2luZ2x5IHF1b3RlIGEgc3RyaW5nCgkJcXEJCQkJOm51bGwsCS8vIC0gZG91Ymx5IHF1b3RlIGEgc3RyaW5nCgkJcXIJCQkJOm51bGwsCS8vIC0gQ29tcGlsZSBwYXR0ZXJuCgkJcXVvdGVtZXRhCQkJOm51bGwsCS8vIC0gcXVvdGUgcmVndWxhciBleHByZXNzaW9uIG1hZ2ljIGNoYXJhY3RlcnMKCQlxdwkJCQk6bnVsbCwJLy8gLSBxdW90ZSBhIGxpc3Qgb2Ygd29yZHMKCQlxeAkJCQk6bnVsbCwJLy8gLSBiYWNrcXVvdGUgcXVvdGUgYSBzdHJpbmcKCQlyYW5kCQkJCToxLAkvLyAtIHJldHJpZXZlIHRoZSBuZXh0IHBzZXVkb3JhbmRvbSBudW1iZXIKCQlyZWFkCQkJCToxLAkvLyAtIGZpeGVkLWxlbmd0aCBidWZmZXJlZCBpbnB1dCBmcm9tIGEgZmlsZWhhbmRsZQoJCXJlYWRkaXIJCQkJOjEsCS8vIC0gZ2V0IGEgZGlyZWN0b3J5IGZyb20gYSBkaXJlY3RvcnkgaGFuZGxlCgkJcmVhZGxpbmUJCQk6MSwJLy8gLSBmZXRjaCBhIHJlY29yZCBmcm9tIGEgZmlsZQoJCXJlYWRsaW5rCQkJOjEsCS8vIC0gZGV0ZXJtaW5lIHdoZXJlIGEgc3ltYm9saWMgbGluayBpcyBwb2ludGluZwoJCXJlYWRwaXBlCQkJOjEsCS8vIC0gZXhlY3V0ZSBhIHN5c3RlbSBjb21tYW5kIGFuZCBjb2xsZWN0IHN0YW5kYXJkIG91dHB1dAoJCXJlY3YJCQkJOjEsCS8vIC0gcmVjZWl2ZSBhIG1lc3NhZ2Ugb3ZlciBhIFNvY2tldAoJCXJlZG8JCQkJOjEsCS8vIC0gc3RhcnQgdGhpcyBsb29wIGl0ZXJhdGlvbiBvdmVyIGFnYWluCgkJcmVmCQkJCToxLAkvLyAtIGZpbmQgb3V0IHRoZSB0eXBlIG9mIHRoaW5nIGJlaW5nIHJlZmVyZW5jZWQKCQlyZW5hbWUJCQkJOjEsCS8vIC0gY2hhbmdlIGEgZmlsZW5hbWUKCQlyZXF1aXJlCQkJCToxLAkvLyAtIGxvYWQgaW4gZXh0ZXJuYWwgZnVuY3Rpb25zIGZyb20gYSBsaWJyYXJ5IGF0IHJ1bnRpbWUKCQlyZXNldAkJCQk6MSwJLy8gLSBjbGVhciBhbGwgdmFyaWFibGVzIG9mIGEgZ2l2ZW4gbmFtZQoJCSdyZXR1cm4nCQkJOjEsCS8vIC0gZ2V0IG91dCBvZiBhIGZ1bmN0aW9uIGVhcmx5CgkJcmV2ZXJzZQkJCQk6MSwJLy8gLSBmbGlwIGEgc3RyaW5nIG9yIGEgbGlzdAoJCXJld2luZGRpcgkJCToxLAkvLyAtIHJlc2V0IGRpcmVjdG9yeSBoYW5kbGUKCQlyaW5kZXgJCQkJOjEsCS8vIC0gcmlnaHQtdG8tbGVmdCBzdWJzdHJpbmcgc2VhcmNoCgkJcm1kaXIJCQkJOjEsCS8vIC0gcmVtb3ZlIGEgZGlyZWN0b3J5CgkJcwkJCQk6bnVsbCwJLy8gLSByZXBsYWNlIGEgcGF0dGVybiB3aXRoIGEgc3RyaW5nCgkJc2F5CQkJCToxLAkvLyAtIHByaW50IHdpdGggbmV3bGluZQoJCXNjYWxhcgkJCQk6MSwJLy8gLSBmb3JjZSBhIHNjYWxhciBjb250ZXh0CgkJc2VlawkJCQk6MSwJLy8gLSByZXBvc2l0aW9uIGZpbGUgcG9pbnRlciBmb3IgcmFuZG9tLWFjY2VzcyBJL08KCQlzZWVrZGlyCQkJCToxLAkvLyAtIHJlcG9zaXRpb24gZGlyZWN0b3J5IHBvaW50ZXIKCQlzZWxlY3QJCQkJOjEsCS8vIC0gcmVzZXQgZGVmYXVsdCBvdXRwdXQgb3IgZG8gSS9PIG11bHRpcGxleGluZwoJCXNlbWN0bAkJCQk6MSwJLy8gLSBTeXNWIHNlbWFwaG9yZSBjb250cm9sIG9wZXJhdGlvbnMKCQlzZW1nZXQJCQkJOjEsCS8vIC0gZ2V0IHNldCBvZiBTeXNWIHNlbWFwaG9yZXMKCQlzZW1vcAkJCQk6MSwJLy8gLSBTeXNWIHNlbWFwaG9yZSBvcGVyYXRpb25zCgkJc2VuZAkJCQk6MSwJLy8gLSBzZW5kIGEgbWVzc2FnZSBvdmVyIGEgc29ja2V0CgkJc2V0Z3JlbnQJCQk6MSwJLy8gLSBwcmVwYXJlIGdyb3VwIGZpbGUgZm9yIHVzZQoJCXNldGhvc3RlbnQJCQk6MSwJLy8gLSBwcmVwYXJlIGhvc3RzIGZpbGUgZm9yIHVzZQoJCXNldG5ldGVudAkJCToxLAkvLyAtIHByZXBhcmUgbmV0d29ya3MgZmlsZSBmb3IgdXNlCgkJc2V0cGdycAkJCQk6MSwJLy8gLSBzZXQgdGhlIHByb2Nlc3MgZ3JvdXAgb2YgYSBwcm9jZXNzCgkJc2V0cHJpb3JpdHkJCQk6MSwJLy8gLSBzZXQgYSBwcm9jZXNzJ3MgbmljZSB2YWx1ZQoJCXNldHByb3RvZW50CQkJOjEsCS8vIC0gcHJlcGFyZSBwcm90b2NvbHMgZmlsZSBmb3IgdXNlCgkJc2V0cHdlbnQJCQk6MSwJLy8gLSBwcmVwYXJlIHBhc3N3ZCBmaWxlIGZvciB1c2UKCQlzZXRzZXJ2ZW50CQkJOjEsCS8vIC0gcHJlcGFyZSBzZXJ2aWNlcyBmaWxlIGZvciB1c2UKCQlzZXRzb2Nrb3B0CQkJOjEsCS8vIC0gc2V0IHNvbWUgc29ja2V0IG9wdGlvbnMKCQlzaGlmdAkJCQk6MSwJLy8gLSByZW1vdmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXksIGFuZCByZXR1cm4gaXQKCQlzaG1jdGwJCQkJOjEsCS8vIC0gU3lzViBzaGFyZWQgbWVtb3J5IG9wZXJhdGlvbnMKCQlzaG1nZXQJCQkJOjEsCS8vIC0gZ2V0IFN5c1Ygc2hhcmVkIG1lbW9yeSBzZWdtZW50IGlkZW50aWZpZXIKCQlzaG1yZWFkCQkJCToxLAkvLyAtIHJlYWQgU3lzViBzaGFyZWQgbWVtb3J5CgkJc2htd3JpdGUJCQk6MSwJLy8gLSB3cml0ZSBTeXNWIHNoYXJlZCBtZW1vcnkKCQlzaHV0ZG93bgkJCToxLAkvLyAtIGNsb3NlIGRvd24ganVzdCBoYWxmIG9mIGEgc29ja2V0IGNvbm5lY3Rpb24KCQknc2luJwkJCQk6MSwJLy8gLSByZXR1cm4gdGhlIHNpbmUgb2YgYSBudW1iZXIKCQlzbGVlcAkJCQk6MSwJLy8gLSBibG9jayBmb3Igc29tZSBudW1iZXIgb2Ygc2Vjb25kcwoJCXNvY2tldAkJCQk6MSwJLy8gLSBjcmVhdGUgYSBzb2NrZXQKCQlzb2NrZXRwYWlyCQkJOjEsCS8vIC0gY3JlYXRlIGEgcGFpciBvZiBzb2NrZXRzCgkJJ3NvcnQnCQkJCToxLAkvLyAtIHNvcnQgYSBsaXN0IG9mIHZhbHVlcwoJCXNwbGljZQkJCQk6MSwJLy8gLSBhZGQgb3IgcmVtb3ZlIGVsZW1lbnRzIGFueXdoZXJlIGluIGFuIGFycmF5CgkJJ3NwbGl0JwkJCQk6MSwJLy8gLSBzcGxpdCB1cCBhIHN0cmluZyB1c2luZyBhIHJlZ2V4cCBkZWxpbWl0ZXIKCQlzcHJpbnRmCQkJCToxLAkvLyAtIGZvcm1hdHRlZCBwcmludCBpbnRvIGEgc3RyaW5nCgkJJ3NxcnQnCQkJCToxLAkvLyAtIHNxdWFyZSByb290IGZ1bmN0aW9uCgkJc3JhbmQJCQkJOjEsCS8vIC0gc2VlZCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKCQlzdGF0CQkJCToxLAkvLyAtIGdldCBhIGZpbGUncyBzdGF0dXMgaW5mb3JtYXRpb24KCQlzdGF0ZQkJCQk6MSwJLy8gLSBkZWNsYXJlIGFuZCBhc3NpZ24gYSBzdGF0ZSB2YXJpYWJsZSAocGVyc2lzdGVudCBsZXhpY2FsIHNjb3BpbmcpCgkJc3R1ZHkJCQkJOjEsCS8vIC0gb3B0aW1pemUgaW5wdXQgZGF0YSBmb3IgcmVwZWF0ZWQgc2VhcmNoZXMKCQknc3ViJwkJCQk6MSwJLy8gLSBkZWNsYXJlIGEgc3Vicm91dGluZSwgcG9zc2libHkgYW5vbnltb3VzbHkKCQknc3Vic3RyJwkJCToxLAkvLyAtIGdldCBvciBhbHRlciBhIHBvcnRpb24gb2YgYSBzdGlybmcKCQlzeW1saW5rCQkJCToxLAkvLyAtIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgdG8gYSBmaWxlCgkJc3lzY2FsbAkJCQk6MSwJLy8gLSBleGVjdXRlIGFuIGFyYml0cmFyeSBzeXN0ZW0gY2FsbAoJCXN5c29wZW4JCQkJOjEsCS8vIC0gb3BlbiBhIGZpbGUsIHBpcGUsIG9yIGRlc2NyaXB0b3IKCQlzeXNyZWFkCQkJCToxLAkvLyAtIGZpeGVkLWxlbmd0aCB1bmJ1ZmZlcmVkIGlucHV0IGZyb20gYSBmaWxlaGFuZGxlCgkJc3lzc2VlawkJCQk6MSwJLy8gLSBwb3NpdGlvbiBJL08gcG9pbnRlciBvbiBoYW5kbGUgdXNlZCB3aXRoIHN5c3JlYWQgYW5kIHN5c3dyaXRlCgkJc3lzdGVtCQkJCToxLAkvLyAtIHJ1biBhIHNlcGFyYXRlIHByb2dyYW0KCQlzeXN3cml0ZQkJCToxLAkvLyAtIGZpeGVkLWxlbmd0aCB1bmJ1ZmZlcmVkIG91dHB1dCB0byBhIGZpbGVoYW5kbGUKCQl0ZWxsCQkJCToxLAkvLyAtIGdldCBjdXJyZW50IHNlZWtwb2ludGVyIG9uIGEgZmlsZWhhbmRsZQoJCXRlbGxkaXIJCQkJOjEsCS8vIC0gZ2V0IGN1cnJlbnQgc2Vla3BvaW50ZXIgb24gYSBkaXJlY3RvcnkgaGFuZGxlCgkJdGllCQkJCToxLAkvLyAtIGJpbmQgYSB2YXJpYWJsZSB0byBhbiBvYmplY3QgY2xhc3MKCQl0aWVkCQkJCToxLAkvLyAtIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHVuZGVybHlpbmcgYSB0aWVkIHZhcmlhYmxlCgkJdGltZQkJCQk6MSwJLy8gLSByZXR1cm4gbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MAoJCXRpbWVzCQkJCToxLAkvLyAtIHJldHVybiBlbGFwc2VkIHRpbWUgZm9yIHNlbGYgYW5kIGNoaWxkIHByb2Nlc3NlcwoJCXRyCQkJCTpudWxsLAkvLyAtIHRyYW5zbGl0ZXJhdGUgYSBzdHJpbmcKCQl0cnVuY2F0ZQkJCToxLAkvLyAtIHNob3J0ZW4gYSBmaWxlCgkJdWMJCQkJOjEsCS8vIC0gcmV0dXJuIHVwcGVyLWNhc2UgdmVyc2lvbiBvZiBhIHN0cmluZwoJCXVjZmlyc3QJCQkJOjEsCS8vIC0gcmV0dXJuIGEgc3RyaW5nIHdpdGgganVzdCB0aGUgbmV4dCBsZXR0ZXIgaW4gdXBwZXIgY2FzZQoJCXVtYXNrCQkJCToxLAkvLyAtIHNldCBmaWxlIGNyZWF0aW9uIG1vZGUgbWFzawoJCXVuZGVmCQkJCToxLAkvLyAtIHJlbW92ZSBhIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24KCQl1bmxpbmsJCQkJOjEsCS8vIC0gcmVtb3ZlIG9uZSBsaW5rIHRvIGEgZmlsZQoJCXVucGFjawkJCQk6MSwJLy8gLSBjb252ZXJ0IGJpbmFyeSBzdHJ1Y3R1cmUgaW50byBub3JtYWwgcGVybCB2YXJpYWJsZXMKCQl1bnNoaWZ0CQkJCToxLAkvLyAtIHByZXBlbmQgbW9yZSBlbGVtZW50cyB0byB0aGUgYmVnaW5uaW5nIG9mIGEgbGlzdAoJCXVudGllCQkJCToxLAkvLyAtIGJyZWFrIGEgdGllIGJpbmRpbmcgdG8gYSB2YXJpYWJsZQoJCXVzZQkJCQk6MSwJLy8gLSBsb2FkIGluIGEgbW9kdWxlIGF0IGNvbXBpbGUgdGltZQoJCXV0aW1lCQkJCToxLAkvLyAtIHNldCBhIGZpbGUncyBsYXN0IGFjY2VzcyBhbmQgbW9kaWZ5IHRpbWVzCgkJdmFsdWVzCQkJCToxLAkvLyAtIHJldHVybiBhIGxpc3Qgb2YgdGhlIHZhbHVlcyBpbiBhIGhhc2gKCQl2ZWMJCQkJOjEsCS8vIC0gdGVzdCBvciBzZXQgcGFydGljdWxhciBiaXRzIGluIGEgc3RyaW5nCgkJd2FpdAkJCQk6MSwJLy8gLSB3YWl0IGZvciBhbnkgY2hpbGQgcHJvY2VzcyB0byBkaWUKCQl3YWl0cGlkCQkJCToxLAkvLyAtIHdhaXQgZm9yIGEgcGFydGljdWxhciBjaGlsZCBwcm9jZXNzIHRvIGRpZQoJCXdhbnRhcnJheQkJCToxLAkvLyAtIGdldCB2b2lkIHZzIHNjYWxhciB2cyBsaXN0IGNvbnRleHQgb2YgY3VycmVudCBzdWJyb3V0aW5lIGNhbGwKCQl3YXJuCQkJCToxLAkvLyAtIHByaW50IGRlYnVnZ2luZyBpbmZvCgkJd2hlbgkJCQk6MSwJLy8KCQl3cml0ZQkJCQk6MSwJLy8gLSBwcmludCBhIHBpY3R1cmUgcmVjb3JkCgkJeQkJCQk6bnVsbH07CS8vIC0gdHJhbnNsaXRlcmF0ZSBhIHN0cmluZwoKCXZhciBSWHN0eWxlPSJzdHJpbmctMiI7Cgl2YXIgUlhtb2RpZmllcnM9L1tnb3NleGltYWNwbHVkXS87CQkvLyBOT1RFOiAibSIsICJzIiwgInkiIGFuZCAidHIiIG5lZWQgdG8gY29ycmVjdCByZWFsIG1vZGlmaWVycyBmb3IgZWFjaCByZWdleHAgdHlwZQoKCWZ1bmN0aW9uIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLGNoYWluLHN0eWxlLHRhaWwpewkvLyBOT1RFOiBjaGFpbi5sZW5ndGggPiAyIGlzIG5vdCB3b3JraW5nIG5vdyAoaXQncyBmb3Igc1suLi5dWy4uLl1nZW9zOykKCQlzdGF0ZS5jaGFpbj1udWxsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMiAgIDN0YWlsCgkJc3RhdGUuc3R5bGU9bnVsbDsKCQlzdGF0ZS50YWlsPW51bGw7CgkJc3RhdGUudG9rZW5pemU9ZnVuY3Rpb24oc3RyZWFtLHN0YXRlKXsKCQkJdmFyIGU9ZmFsc2UsYyxpPTA7CgkJCXdoaWxlKGM9c3RyZWFtLm5leHQoKSl7CgkJCQlpZihjPT09Y2hhaW5baV0mJiFlKXsKCQkJCQlpZihjaGFpblsrK2ldIT09dW5kZWZpbmVkKXsKCQkJCQkJc3RhdGUuY2hhaW49Y2hhaW5baV07CgkJCQkJCXN0YXRlLnN0eWxlPXN0eWxlOwoJCQkJCQlzdGF0ZS50YWlsPXRhaWx9CgkJCQkJZWxzZSBpZih0YWlsKQoJCQkJCQlzdHJlYW0uZWF0V2hpbGUodGFpbCk7CgkJCQkJc3RhdGUudG9rZW5pemU9dG9rZW5QZXJsOwoJCQkJCXJldHVybiBzdHlsZX0KCQkJCWU9IWUmJmM9PSJcXCJ9CgkJCXJldHVybiBzdHlsZX07CgkJcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSxzdGF0ZSl9CgoJZnVuY3Rpb24gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLHN0cmluZyl7CgkJc3RhdGUudG9rZW5pemU9ZnVuY3Rpb24oc3RyZWFtLHN0YXRlKXsKCQkJaWYoc3RyZWFtLnN0cmluZz09c3RyaW5nKQoJCQkJc3RhdGUudG9rZW5pemU9dG9rZW5QZXJsOwoJCQlzdHJlYW0uc2tpcFRvRW5kKCk7CgkJCXJldHVybiAic3RyaW5nIn07CgkJcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSxzdGF0ZSl9CgoJZnVuY3Rpb24gdG9rZW5QZXJsKHN0cmVhbSxzdGF0ZSl7CgkJaWYoc3RyZWFtLmVhdFNwYWNlKCkpCgkJCXJldHVybiBudWxsOwoJCWlmKHN0YXRlLmNoYWluKQoJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsc3RhdGUuY2hhaW4sc3RhdGUuc3R5bGUsc3RhdGUudGFpbCk7CgkJaWYoc3RyZWFtLm1hdGNoKC9eXC0/W1xkXC5dLyxmYWxzZSkpCgkJCWlmKHN0cmVhbS5tYXRjaCgvXihcLT8oXGQqXC5cZCsoZVsrLV0/XGQrKT98XGQrXC5cZCopfDB4W1xkYS1mQS1GXSt8MGJbMDFdK3xcZCsoZVsrLV0/XGQrKT8pLykpCgkJCQlyZXR1cm4gJ251bWJlcic7CgkJaWYoc3RyZWFtLm1hdGNoKC9ePDwoPz1cdykvKSl7CQkJLy8gTk9URTogPDxTT01FVEhJTkdcbi4uLlxuU09NRVRISU5HXG4KCQkJc3RyZWFtLmVhdFdoaWxlKC9cdy8pOwoJCQlyZXR1cm4gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLHN0cmVhbS5jdXJyZW50KCkuc3Vic3RyKDIpKX0KCQlpZihzdHJlYW0uc29sKCkmJnN0cmVhbS5tYXRjaCgvXlw9aXRlbSg/IVx3KS8pKXsvLyBOT1RFOiBcbj1pdGVtLi4uXG49Y3V0XG4KCQkJcmV0dXJuIHRva2VuU09NRVRISU5HKHN0cmVhbSxzdGF0ZSwnPWN1dCcpfQoJCXZhciBjaD1zdHJlYW0ubmV4dCgpOwoJCWlmKGNoPT0nIid8fGNoPT0iJyIpewkJCQkvLyBOT1RFOiAnIG9yICIgb3IgPDwnU09NRVRISU5HJ1xuLi4uXG5TT01FVEhJTkdcbiBvciA8PCJTT01FVEhJTkciXG4uLi5cblNPTUVUSElOR1xuCgkJCWlmKHN0cmVhbS5wcmVmaXgoMyk9PSI8PCIrY2gpewoJCQkJdmFyIHA9c3RyZWFtLnBvczsKCQkJCXN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKCQkJCXZhciBuPXN0cmVhbS5jdXJyZW50KCkuc3Vic3RyKDEpOwoJCQkJaWYobiYmc3RyZWFtLmVhdChjaCkpCgkJCQkJcmV0dXJuIHRva2VuU09NRVRISU5HKHN0cmVhbSxzdGF0ZSxuKTsKCQkJCXN0cmVhbS5wb3M9cH0KCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjaF0sInN0cmluZyIpfQoJCWlmKGNoPT0icSIpewoJCQl2YXIgYz1zdHJlYW0ubG9vaygtMik7CgkJCWlmKCEoYyYmL1x3Ly50ZXN0KGMpKSl7CgkJCQljPXN0cmVhbS5sb29rKDApOwoJCQkJaWYoYz09IngiKXsKCQkJCQljPXN0cmVhbS5sb29rKDEpOwoJCQkJCWlmKGM9PSIoIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0iWyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJdIl0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSI8Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZigvW1xeJyIhflwvXS8udGVzdChjKSl7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbc3RyZWFtLmVhdChjKV0sUlhzdHlsZSxSWG1vZGlmaWVycyl9fQoJCQkJZWxzZSBpZihjPT0icSIpewoJCQkJCWM9c3RyZWFtLmxvb2soMSk7CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLCJzdHJpbmciKX0KCQkJCQlpZihjPT0iWyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJdIl0sInN0cmluZyIpfQoJCQkJCWlmKGM9PSJ7Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iXSwic3RyaW5nIil9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLCJzdHJpbmciKX0KCQkJCQlpZigvW1xeJyIhflwvXS8udGVzdChjKSl7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbc3RyZWFtLmVhdChjKV0sInN0cmluZyIpfX0KCQkJCWVsc2UgaWYoYz09InciKXsKCQkJCQljPXN0cmVhbS5sb29rKDEpOwoJCQkJCWlmKGM9PSIoIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiXSwiYnJhY2tldCIpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSwiYnJhY2tldCIpfQoJCQkJCWlmKGM9PSJ7Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iXSwiYnJhY2tldCIpfQoJCQkJCWlmKGM9PSI8Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iXSwiYnJhY2tldCIpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSwiYnJhY2tldCIpfX0KCQkJCWVsc2UgaWYoYz09InIiKXsKCQkJCQljPXN0cmVhbS5sb29rKDEpOwoJCQkJCWlmKGM9PSIoIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0iWyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJdIl0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSI8Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZigvW1xeJyIhflwvXS8udGVzdChjKSl7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbc3RyZWFtLmVhdChjKV0sUlhzdHlsZSxSWG1vZGlmaWVycyl9fQoJCQkJZWxzZSBpZigvW1xeJyIhflwvKFxbezxdLy50ZXN0KGMpKXsKCQkJCQlpZihjPT0iKCIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDEpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyIpIl0sInN0cmluZyIpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSwic3RyaW5nIil9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLCJzdHJpbmciKX0KCQkJCQlpZihjPT0iPCIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDEpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+Il0sInN0cmluZyIpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSwic3RyaW5nIil9fX19CgkJaWYoY2g9PSJtIil7CgkJCXZhciBjPXN0cmVhbS5sb29rKC0yKTsKCQkJaWYoIShjJiYvXHcvLnRlc3QoYykpKXsKCQkJCWM9c3RyZWFtLmVhdCgvWyhcW3s8XF4nIiF+XC9dLyk7CgkJCQlpZihjKXsKCQkJCQlpZigvW1xeJyIhflwvXS8udGVzdChjKSl7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbY10sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0ieyIpewoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfX19fQoJCWlmKGNoPT0icyIpewoJCQl2YXIgYz0vW1wvPlxdfSlcd10vLnRlc3Qoc3RyZWFtLmxvb2soLTIpKTsKCQkJaWYoIWMpewoJCQkJYz1zdHJlYW0uZWF0KC9bKFxbezxcXiciIX5cL10vKTsKCQkJCWlmKGMpewoJCQkJCWlmKGM9PSJbIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSIsIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0ieyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iLCJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09IjwiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+IiwiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSIoIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSIsIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2MsY10sUlhzdHlsZSxSWG1vZGlmaWVycyl9fX0KCQlpZihjaD09InkiKXsKCQkJdmFyIGM9L1tcLz5cXX0pXHddLy50ZXN0KHN0cmVhbS5sb29rKC0yKSk7CgkJCWlmKCFjKXsKCQkJCWM9c3RyZWFtLmVhdCgvWyhcW3s8XF4nIiF+XC9dLyk7CgkJCQlpZihjKXsKCQkJCQlpZihjPT0iWyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iLCJdIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09InsiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9IiwifSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSI8IikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiIsIj4iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0iKCIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiLCIpIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjLGNdLFJYc3R5bGUsUlhtb2RpZmllcnMpfX19CgkJaWYoY2g9PSJ0Iil7CgkJCXZhciBjPS9bXC8+XF19KVx3XS8udGVzdChzdHJlYW0ubG9vaygtMikpOwoJCQlpZighYyl7CgkJCQljPXN0cmVhbS5lYXQoInIiKTtpZihjKXsKCQkJCWM9c3RyZWFtLmVhdCgvWyhcW3s8XF4nIiF+XC9dLyk7CgkJCQlpZihjKXsKCQkJCQlpZihjPT0iWyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iLCJdIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09InsiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9IiwifSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSI8IikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiIsIj4iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0iKCIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiLCIpIl0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjLGNdLFJYc3R5bGUsUlhtb2RpZmllcnMpfX19fQoJCWlmKGNoPT0iYCIpewoJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2NoXSwidmFyaWFibGUtMiIpfQoJCWlmKGNoPT0iLyIpewoJCQlpZighL35ccyokLy50ZXN0KHN0cmVhbS5wcmVmaXgoKSkpCgkJCQlyZXR1cm4gIm9wZXJhdG9yIjsKCQkJZWxzZQoJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjaF0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJaWYoY2g9PSIkIil7CgkJCXZhciBwPXN0cmVhbS5wb3M7CgkJCWlmKHN0cmVhbS5lYXRXaGlsZSgvXGQvKXx8c3RyZWFtLmVhdCgieyIpJiZzdHJlYW0uZWF0V2hpbGUoL1xkLykmJnN0cmVhbS5lYXQoIn0iKSkKCQkJCXJldHVybiAidmFyaWFibGUtMiI7CgkJCWVsc2UKCQkJCXN0cmVhbS5wb3M9cH0KCQlpZigvWyRAJV0vLnRlc3QoY2gpKXsKCQkJdmFyIHA9c3RyZWFtLnBvczsKCQkJaWYoc3RyZWFtLmVhdCgiXiIpJiZzdHJlYW0uZWF0KC9bQS1aXS8pfHwhL1tAJCUmXS8udGVzdChzdHJlYW0ubG9vaygtMikpJiZzdHJlYW0uZWF0KC9bPXxcXFwtIz9AOzomYH5cXiFcW1xdKiciJCsuLFwvPD4oKV0vKSl7CgkJCQl2YXIgYz1zdHJlYW0uY3VycmVudCgpOwoJCQkJaWYoUEVSTFtjXSkKCQkJCQlyZXR1cm4gInZhcmlhYmxlLTIifQoJCQlzdHJlYW0ucG9zPXB9CgkJaWYoL1skQCUmXS8udGVzdChjaCkpewoJCQlpZihzdHJlYW0uZWF0V2hpbGUoL1tcdyRcW1xdXS8pfHxzdHJlYW0uZWF0KCJ7IikmJnN0cmVhbS5lYXRXaGlsZSgvW1x3JFxbXF1dLykmJnN0cmVhbS5lYXQoIn0iKSl7CgkJCQl2YXIgYz1zdHJlYW0uY3VycmVudCgpOwoJCQkJaWYoUEVSTFtjXSkKCQkJCQlyZXR1cm4gInZhcmlhYmxlLTIiOwoJCQkJZWxzZQoJCQkJCXJldHVybiAidmFyaWFibGUifX0KCQlpZihjaD09IiMiKXsKCQkJaWYoc3RyZWFtLmxvb2soLTIpIT0iJCIpewoJCQkJc3RyZWFtLnNraXBUb0VuZCgpOwoJCQkJcmV0dXJuICJjb21tZW50In19CgkJaWYoL1s6K1wtXF4qJCYlQD08PiE/fFwvflwuXS8udGVzdChjaCkpewoJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQlzdHJlYW0uZWF0V2hpbGUoL1s6K1wtXF4qJCYlQD08PiE/fFwvflwuXS8pOwoJCQlpZihQRVJMW3N0cmVhbS5jdXJyZW50KCldKQoJCQkJcmV0dXJuICJvcGVyYXRvciI7CgkJCWVsc2UKCQkJCXN0cmVhbS5wb3M9cH0KCQlpZihjaD09Il8iKXsKCQkJaWYoc3RyZWFtLnBvcz09MSl7CgkJCQlpZihzdHJlYW0uc3VmZml4KDYpPT0iX0VORF9fIil7CgkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsnXDAnXSwiY29tbWVudCIpfQoJCQkJZWxzZSBpZihzdHJlYW0uc3VmZml4KDcpPT0iX0RBVEFfXyIpewoJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbJ1wwJ10sInZhcmlhYmxlLTIiKX0KCQkJCWVsc2UgaWYoc3RyZWFtLnN1ZmZpeCg3KT09Il9DX18iKXsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWydcMCddLCJzdHJpbmciKX19fQoJCWlmKC9cdy8udGVzdChjaCkpewoJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQlpZihzdHJlYW0ubG9vaygtMik9PSJ7IiYmKHN0cmVhbS5sb29rKDApPT0ifSJ8fHN0cmVhbS5lYXRXaGlsZSgvXHcvKSYmc3RyZWFtLmxvb2soMCk9PSJ9IikpCgkJCQlyZXR1cm4gInN0cmluZyI7CgkJCWVsc2UKCQkJCXN0cmVhbS5wb3M9cH0KCQlpZigvW0EtWl0vLnRlc3QoY2gpKXsKCQkJdmFyIGw9c3RyZWFtLmxvb2soLTIpOwoJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQlzdHJlYW0uZWF0V2hpbGUoL1tBLVpfXS8pOwoJCQlpZigvW1xkYS16XS8udGVzdChzdHJlYW0ubG9vaygwKSkpewoJCQkJc3RyZWFtLnBvcz1wfQoJCQllbHNlewoJCQkJdmFyIGM9UEVSTFtzdHJlYW0uY3VycmVudCgpXTsKCQkJCWlmKCFjKQoJCQkJCXJldHVybiAibWV0YSI7CgkJCQlpZihjWzFdKQoJCQkJCWM9Y1swXTsKCQkJCWlmKGwhPSI6Iil7CgkJCQkJaWYoYz09MSkKCQkJCQkJcmV0dXJuICJrZXl3b3JkIjsKCQkJCQllbHNlIGlmKGM9PTIpCgkJCQkJCXJldHVybiAiZGVmIjsKCQkJCQllbHNlIGlmKGM9PTMpCgkJCQkJCXJldHVybiAiYXRvbSI7CgkJCQkJZWxzZSBpZihjPT00KQoJCQkJCQlyZXR1cm4gIm9wZXJhdG9yIjsKCQkJCQllbHNlIGlmKGM9PTUpCgkJCQkJCXJldHVybiAidmFyaWFibGUtMiI7CgkJCQkJZWxzZQoJCQkJCQlyZXR1cm4gIm1ldGEifQoJCQkJZWxzZQoJCQkJCXJldHVybiAibWV0YSJ9fQoJCWlmKC9bYS16QS1aX10vLnRlc3QoY2gpKXsKCQkJdmFyIGw9c3RyZWFtLmxvb2soLTIpOwoJCQlzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CgkJCXZhciBjPVBFUkxbc3RyZWFtLmN1cnJlbnQoKV07CgkJCWlmKCFjKQoJCQkJcmV0dXJuICJtZXRhIjsKCQkJaWYoY1sxXSkKCQkJCWM9Y1swXTsKCQkJaWYobCE9IjoiKXsKCQkJCWlmKGM9PTEpCgkJCQkJcmV0dXJuICJrZXl3b3JkIjsKCQkJCWVsc2UgaWYoYz09MikKCQkJCQlyZXR1cm4gImRlZiI7CgkJCQllbHNlIGlmKGM9PTMpCgkJCQkJcmV0dXJuICJhdG9tIjsKCQkJCWVsc2UgaWYoYz09NCkKCQkJCQlyZXR1cm4gIm9wZXJhdG9yIjsKCQkJCWVsc2UgaWYoYz09NSkKCQkJCQlyZXR1cm4gInZhcmlhYmxlLTIiOwoJCQkJZWxzZQoJCQkJCXJldHVybiAibWV0YSJ9CgkJCWVsc2UKCQkJCXJldHVybiAibWV0YSJ9CgkJcmV0dXJuIG51bGx9CgoJcmV0dXJuewoJCXN0YXJ0U3RhdGU6ZnVuY3Rpb24oKXsKCQkJcmV0dXJuewoJCQkJdG9rZW5pemU6dG9rZW5QZXJsLAoJCQkJY2hhaW46bnVsbCwKCQkJCXN0eWxlOm51bGwsCgkJCQl0YWlsOm51bGx9fSwKCQl0b2tlbjpmdW5jdGlvbihzdHJlYW0sc3RhdGUpewoJCQlyZXR1cm4gKHN0YXRlLnRva2VuaXplfHx0b2tlblBlcmwpKHN0cmVhbSxzdGF0ZSl9LAoJCWVsZWN0cmljQ2hhcnM6Int9In19KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXBlcmwiLCAicGVybCIpOwoKLy8gaXQncyBsaWtlICJwZWVrIiwgYnV0IG5lZWQgZm9yIGxvb2stYWhlYWQgb3IgbG9vay1iZWhpbmQgaWYgaW5kZXggPCAwCkNvZGVNaXJyb3IuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5sb29rPWZ1bmN0aW9uKGMpewoJcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysoY3x8MCkpfTsKCi8vIHJldHVybiBhIHBhcnQgb2YgcHJlZml4IG9mIGN1cnJlbnQgc3RyZWFtIGZyb20gY3VycmVudCBwb3NpdGlvbgpDb2RlTWlycm9yLlN0cmluZ1N0cmVhbS5wcm90b3R5cGUucHJlZml4PWZ1bmN0aW9uKGMpewoJaWYoYyl7CgkJdmFyIHg9dGhpcy5wb3MtYzsKCQlyZXR1cm4gdGhpcy5zdHJpbmcuc3Vic3RyKCh4Pj0wP3g6MCksYyl9CgllbHNlewoJCXJldHVybiB0aGlzLnN0cmluZy5zdWJzdHIoMCx0aGlzLnBvcy0xKX19OwoKLy8gcmV0dXJuIGEgcGFydCBvZiBzdWZmaXggb2YgY3VycmVudCBzdHJlYW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uCkNvZGVNaXJyb3IuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5zdWZmaXg9ZnVuY3Rpb24oYyl7Cgl2YXIgeT10aGlzLnN0cmluZy5sZW5ndGg7Cgl2YXIgeD15LXRoaXMucG9zKzE7CglyZXR1cm4gdGhpcy5zdHJpbmcuc3Vic3RyKHRoaXMucG9zLChjJiZjPHk/Yzp4KSl9OwoKLy8gcmV0dXJuIGEgcGFydCBvZiBzdWZmaXggb2YgY3VycmVudCBzdHJlYW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uIGFuZCBjaGFuZ2UgY3VycmVudCBwb3NpdGlvbgpDb2RlTWlycm9yLlN0cmluZ1N0cmVhbS5wcm90b3R5cGUubnN1ZmZpeD1mdW5jdGlvbihjKXsKCXZhciBwPXRoaXMucG9zOwoJdmFyIGw9Y3x8KHRoaXMuc3RyaW5nLmxlbmd0aC10aGlzLnBvcysxKTsKCXRoaXMucG9zKz1sOwoJcmV0dXJuIHRoaXMuc3RyaW5nLnN1YnN0cihwLGwpfTsKCi8vIGVhdGluZyBhbmQgdm9taXRpbmcgYSBwYXJ0IG9mIHN0cmVhbSBmcm9tIGN1cnJlbnQgcG9zaXRpb24KQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmVhdFN1ZmZpeD1mdW5jdGlvbihjKXsKCXZhciB4PXRoaXMucG9zK2M7Cgl2YXIgeTsKCWlmKHg8PTApCgkJdGhpcy5wb3M9MDsKCWVsc2UgaWYoeD49KHk9dGhpcy5zdHJpbmcubGVuZ3RoLTEpKQoJCXRoaXMucG9zPXk7CgllbHNlCgkJdGhpcy5wb3M9eH07Cg==]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBIUCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGhwLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQSFAgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8P3BocApmdW5jdGlvbiBoZWxsbygkd2hvKSB7CglyZXR1cm4gIkhlbGxvICIgLiAkd2hvOwp9Cj8+CjxwPlRoZSBwcm9ncmFtIHNheXMgPD89IGhlbGxvKCJXb3JsZCIpID8+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIEpTIGNvZGUiKTsgLy8gYWxzbyBjb2xvcmVkCjwvc2NyaXB0Pgo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwIiwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIGluZGVudFdpdGhUYWJzOiB0cnVlLAogICAgICAgIGVudGVyTW9kZTogImtlZXAiLAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgSFRNTC9QSFAgbW9kZSBiYXNlZCBvbgogICAgdGhlIDxhIGhyZWY9Ii4uL2NsaWtlLyI+Qy1saWtlPC9hPiBtb2RlLiBEZXBlbmRzIG9uIFhNTCwKICAgIEphdmFTY3JpcHQsIENTUywgYW5kIEMtbGlrZSBtb2Rlcy48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwPC9jb2RlPiAoSFRNTCB3aXRoIFBIUCBjb2RlKSwgPGNvZGU+dGV4dC94LXBocDwvY29kZT4gKHBsYWluLCBub24td3JhcHBlZCBQSFAgY29kZSkuPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICBmdW5jdGlvbiBoZXJlZG9jKGRlbGltKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKGRlbGltKSkgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICBlbHNlIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfQogIH0KICB2YXIgcGhwQ29uZmlnID0gewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiBrZXl3b3JkcygiYWJzdHJhY3QgYW5kIGFycmF5IGFzIGJyZWFrIGNhc2UgY2F0Y2ggY2Z1bmN0aW9uIGNsYXNzIGNsb25lIGNvbnN0IGNvbnRpbnVlIGRlY2xhcmUgIiArCiAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgZG8gZWxzZSBlbHNlaWYgZW5kZGVjbGFyZSBlbmRmb3IgZW5kZm9yZWFjaCBlbmRpZiBlbmRzd2l0Y2ggZW5kd2hpbGUgZXh0ZW5kcyAiICsKICAgICAgICAgICAgICAgICAgICAgICAiZmluYWwgZm9yIGZvcmVhY2ggZnVuY3Rpb24gZ2xvYmFsIGdvdG8gaWYgaW1wbGVtZW50cyBpbnRlcmZhY2UgaW5zdGFuY2VvZiBuYW1lc3BhY2UgIiArCiAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBvciBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgc3RhdGljIHN3aXRjaCB0aHJvdyB0cnkgdXNlIHZhciB3aGlsZSB4b3IgcmV0dXJuIiArCiAgICAgICAgICAgICAgICAgICAgICAgImRpZSBlY2hvIGVtcHR5IGV4aXQgZXZhbCBpbmNsdWRlIGluY2x1ZGVfb25jZSBpc3NldCBsaXN0IHJlcXVpcmUgcmVxdWlyZV9vbmNlIHByaW50IHVuc2V0IiksCiAgICBibG9ja0tleXdvcmRzOiBrZXl3b3JkcygiY2F0Y2ggZG8gZWxzZSBlbHNlaWYgZm9yIGZvcmVhY2ggaWYgc3dpdGNoIHRyeSB3aGlsZSIpLAogICAgYXRvbXM6IGtleXdvcmRzKCJ0cnVlIGZhbHNlIG51bGwgVFJVRSBGQUxTRSBOVUxMIiksCiAgICBtdWx0aUxpbmVTdHJpbmdzOiB0cnVlLAogICAgaG9va3M6IHsKICAgICAgIiQiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgfSwKICAgICAgIjwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvPDwvKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl0vKTsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaGVyZWRvYyhzdHJlYW0uY3VycmVudCgpLnNsaWNlKDMpKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9LAogICAgICAiIyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgfQogICAgfQogIH07CgogIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgicGhwIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKICAgIHZhciBqc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAiamF2YXNjcmlwdCIpOwogICAgdmFyIGNzc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAiY3NzIik7CiAgICB2YXIgcGhwTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHBocENvbmZpZyk7CgogICAgZnVuY3Rpb24gZGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgeyAvLyBUT0RPIG9wZW4gUEhQIGluc2lkZSB0ZXh0L2NzcwogICAgICBpZiAoc3RhdGUuY3VyTW9kZSA9PSBodG1sTW9kZSkgewogICAgICAgIHZhciBzdHlsZSA9IGh0bWxNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuY3VyU3RhdGUpOwogICAgICAgIGlmIChzdHlsZSA9PSAibWV0YSIgJiYgL148XD8vLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgIHN0YXRlLmN1ck1vZGUgPSBwaHBNb2RlOwogICAgICAgICAgc3RhdGUuY3VyU3RhdGUgPSBzdGF0ZS5waHA7CiAgICAgICAgICBzdGF0ZS5jdXJDbG9zZSA9IC9eXD8+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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE9yYWNsZSBQTC9TUUwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InBsc3FsLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyOiAycHggaW5zZXQgI2RlZTt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogT3JhY2xlIFBML1NRTCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFB5dGhvbiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icHl0aG9uLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQeXRob24gbW9kZTwvaDE+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/IVtcZHhdKS9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICBpZiAoaW50TGl0ZXJhbCkgewogICAgICAgICAgICAgICAgLy8gSW50ZWdlciBsaXRlcmFscyBtYXkgYmUgImxvbmciCiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9ML2kpOwogICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBTdHJpbmdzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzdHJpbmdQcmVmaXhlcykpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZ0ZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIG9wZXJhdG9ycyBhbmQgRGVsaW1pdGVycwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2godHJpcGxlRGVsaW1pdGVycykgfHwgc3RyZWFtLm1hdGNoKGRvdWJsZURlbGltaXRlcnMpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGRvdWJsZU9wZXJhdG9ycykKICAgICAgICAgICAgfHwgc3RyZWFtLm1hdGNoKHNpbmdsZU9wZXJhdG9ycykKICAgICAgICAgICAgfHwgc3RyZWFtLm1hdGNoKHdvcmRPcGVyYXRvcnMpKSB7CiAgICAgICAgICAgIHJldHVybiAnb3BlcmF0b3InOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHNpbmdsZURlbGltaXRlcnMpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHR5cGVzKSkgewogICAgICAgICAgICByZXR1cm4gJ2J1aWx0aW4nOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzKSkgewogICAgICAgICAgICByZXR1cm4gJ2tleXdvcmQnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIG5vbi1kZXRlY3RlZCBpdGVtcwogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHRva2VuU3RyaW5nRmFjdG9yeShkZWxpbWl0ZXIpIHsKICAgICAgICB3aGlsZSAoJ3J1YicuaW5kZXhPZihkZWxpbWl0ZXIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpID49IDApIHsKICAgICAgICAgICAgZGVsaW1pdGVyID0gZGVsaW1pdGVyLnN1YnN0cigxKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNpbmdsZWxpbmUgPSBkZWxpbWl0ZXIubGVuZ3RoID09IDE7CiAgICAgICAgdmFyIE9VVENMQVNTID0gJ3N0cmluZyc7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14nIlxcXS8pOwogICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXQoJ1xcJykpIHsKICAgICAgICAgICAgICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChzaW5nbGVsaW5lICYmIHN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2goZGVsaW1pdGVyKSkgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgvWyciXS8pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzaW5nbGVsaW5lKSB7CiAgICAgICAgICAgICAgICBpZiAocGFyc2VyQ29uZi5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUzsKICAgICAgICB9OwogICAgfQogICAgCiAgICBmdW5jdGlvbiBpbmRlbnQoc3RyZWFtLCBzdGF0ZSwgdHlwZSkgewogICAgICAgIHR5cGUgPSB0eXBlIHx8ICdweSc7CiAgICAgICAgdmFyIGluZGVudFVuaXQgPSAwOwogICAgICAgIGlmICh0eXBlID09PSAncHknKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXNbMF0udHlwZSAhPT0gJ3B5JykgewogICAgICAgICAgICAgICAgc3RhdGUuc2NvcGVzWzBdLm9mZnNldCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2NvcGVzW2ldLnR5cGUgPT09ICdweScpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRVbml0ID0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCArIGNvbmYuaW5kZW50VW5pdDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGluZGVudFVuaXQgPSBzdHJlYW0uY29sdW1uKCkgKyBzdHJlYW0uY3VycmVudCgpLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgc3RhdGUuc2NvcGVzLnVuc2hpZnQoewogICAgICAgICAgICBvZmZzZXQ6IGluZGVudFVuaXQsCiAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICB9KTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZGVkZW50KHN0cmVhbSwgc3RhdGUsIHR5cGUpIHsKICAgICAgICB0eXBlID0gdHlwZSB8fCAncHknOwogICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID09IDEpIHJldHVybjsKICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgPT09ICdweScpIHsKICAgICAgICAgICAgdmFyIF9pbmRlbnQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgdmFyIF9pbmRlbnRfaW5kZXggPSAtMTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5zY29wZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICAgIGlmIChfaW5kZW50ID09PSBzdGF0ZS5zY29wZXNbaV0ub2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgX2luZGVudF9pbmRleCA9IGk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKF9pbmRlbnRfaW5kZXggPT09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3aGlsZSAoc3RhdGUuc2NvcGVzWzBdLm9mZnNldCAhPT0gX2luZGVudCkgewogICAgICAgICAgICAgICAgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdweScpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXNbMF0udHlwZSAhPSB0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdGF0ZS5zY29wZXMuc2hpZnQoKTsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpbmRlbnRJbmZvID0gbnVsbDsKICAgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB2YXIgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7CgogICAgICAgIC8vIEhhbmRsZSAnLicgY29ubmVjdGVkIGlkZW50aWZpZXJzCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICcuJykgewogICAgICAgICAgICBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgICAgICAgICAgaWYgKHN0eWxlID09PSAndmFyaWFibGUnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBkZWNvcmF0b3JzCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdAJykgewogICAgICAgICAgICBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgICAgICAgICAgaWYgKHN0eWxlID09PSAndmFyaWFibGUnCiAgICAgICAgICAgICAgICB8fCBjdXJyZW50ID09PSAnQHN0YXRpY21ldGhvZCcKICAgICAgICAgICAgICAgIHx8IGN1cnJlbnQgPT09ICdAY2xhc3NtZXRob2QnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ21ldGEnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXMuCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdwYXNzJyB8fCBjdXJyZW50ID09PSAncmV0dXJuJykgewogICAgICAgICAgICBzdGF0ZS5kZWRlbnQgKz0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKChjdXJyZW50ID09PSAnOicgJiYgIXN0YXRlLmxhbWJkYSAmJiBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAncHknKQogICAgICAgICAgICB8fCBpbmRlbnRJbmZvID09PSAnaW5kZW50JykgewogICAgICAgICAgICBpbmRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIHZhciBkZWxpbWl0ZXJfaW5kZXggPSAnWyh7Jy5pbmRleE9mKGN1cnJlbnQpOwogICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlLCAnXSl9Jy5zbGljZShkZWxpbWl0ZXJfaW5kZXgsIGRlbGltaXRlcl9pbmRleCsxKSk7CiAgICAgICAgfQogICAgICAgIGlmIChpbmRlbnRJbmZvID09PSAnZGVkZW50JykgewogICAgICAgICAgICBpZiAoZGVkZW50KHN0cmVhbSwgc3RhdGUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWxpbWl0ZXJfaW5kZXggPSAnXSl9Jy5pbmRleE9mKGN1cnJlbnQpOwogICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIGlmIChkZWRlbnQoc3RyZWFtLCBzdGF0ZSwgY3VycmVudCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5kZWRlbnQgPiAwICYmIHN0cmVhbS5lb2woKSAmJiBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAncHknKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID4gMSkgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgIHN0YXRlLmRlZGVudCAtPSAxOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gc3R5bGU7CiAgICB9CgogICAgdmFyIGV4dGVybmFsID0gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIHNjb3BlczogW3tvZmZzZXQ6YmFzZWNvbHVtbiB8fCAwLCB0eXBlOidweSd9XSwKICAgICAgICAgICAgICBsYXN0VG9rZW46IG51bGwsCiAgICAgICAgICAgICAgbGFtYmRhOiBmYWxzZSwKICAgICAgICAgICAgICBkZWRlbnQ6IDAKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICAKICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuID0ge3N0eWxlOnN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLmxhbWJkYSkgewogICAgICAgICAgICAgICAgc3RhdGUubGFtYmRhID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgfQogICAgICAgIAogICAgfTsKICAgIHJldHVybiBleHRlcm5hbDsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1weXRob24iLCAicHl0aG9uIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFIgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InIuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuQ29kZU1pcnJvciB7IGJvcmRlci10b3A6IDFweCBzb2xpZCBzaWx2ZXI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBzaWx2ZXI7IH0KICAgICAgLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlbWkgeyBjb2xvcjogYmx1ZTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAgICAgLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWRvbGxhciB7IGNvbG9yOiBvcmFuZ2U7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgICAgIC5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1hcnJvdyB7IGNvbG9yOiBicm93bjsgfQogICAgICAuY20tcy1kZWZhdWx0IHNwYW4uY20tYXJnLWlzIHsgY29sb3I6IGJyb3duOyB9CiAgICA8L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2RlIGZyb20gaHR0cDovL3d3dy5tYXlpbi5vcmcvYWpheXNoYWgvS0IvUi8KCiMgRklSU1QgTEVBUk4gQUJPVVQgTElTVFMgLS0KWCA9IGxpc3QoaGVpZ2h0PTUuNCwgd2VpZ2h0PTU0KQpwcmludCgiVXNlIGRlZmF1bHQgcHJpbnRpbmcgLS0iKQpwcmludChYKQpwcmludCgiQWNjZXNzaW5nIGluZGl2aWR1YWwgZWxlbWVudHMgLS0iKQpjYXQoIllvdXIgaGVpZ2h0IGlzICIsIFgkaGVpZ2h0LCAiIGFuZCB5b3VyIHdlaWdodCBpcyAiLCBYJHdlaWdodCwgIlxuIikKCiMgRlVOQ1RJT05TIC0tCnNxdWFyZSA8LSBmdW5jdGlvbih4KSB7CiAgcmV0dXJuKHgqeCkKfQpjYXQoIlRoZSBzcXVhcmUgb2YgMyBpcyAiLCBzcXVhcmUoMyksICJcbiIpCgogICAgICAgICAgICAgICAgICMgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYXJnIGlzIHNldCB0byA1LgpjdWJlIDwtIGZ1bmN0aW9uKHg9NSkgewogIHJldHVybih4KngqeCk7Cn0KY2F0KCJDYWxsaW5nIGN1YmUgd2l0aCAyIDogIiwgY3ViZSgyKSwgIlxuIikgICAgIyB3aWxsIGdpdmUgMl4zCmNhdCgiQ2FsbGluZyBjdWJlICAgICAgICA6ICIsIGN1YmUoKSwgIlxuIikgICAgICMgd2lsbCBkZWZhdWx0IHRvIDVeMy4KCiMgTEVBUk4gQUJPVVQgRlVOQ1RJT05TIFRIQVQgUkVUVVJOIE1VTFRJUExFIE9CSkVDVFMgLS0KcG93ZXJzIDwtIGZ1bmN0aW9uKHgpIHsKICBwYXJjZWwgPSBsaXN0KHgyPXgqeCwgeDM9eCp4KngsIHg0PXgqeCp4KngpOwogIHJldHVybihwYXJjZWwpOwp9CgpYID0gcG93ZXJzKDMpOwpwcmludCgiU2hvd2luZyBwb3dlcnMgb2YgMyAtLSIpOyBwcmludChYKTsKCiMgV1JJVElORyBUSElTIENPTVBBQ1RMWSAoNCBsaW5lcyBpbnN0ZWFkIG9mIDcpCgpwb3dlcmZ1bCA8LSBmdW5jdGlvbih4KSB7CiAgcmV0dXJuKGxpc3QoeDI9eCp4LCB4Mz14KngqeCwgeDQ9eCp4KngqeCkpOwp9CnByaW50KCJTaG93aW5nIHBvd2VycyBvZiAzIC0tIik7IHByaW50KHBvd2VyZnVsKDMpKTsKCiMgSW4gUiwgdGhlIGxhc3QgZXhwcmVzc2lvbiBpbiBhIGZ1bmN0aW9uIGlzLCBieSBkZWZhdWx0LCB3aGF0IGlzCiMgcmV0dXJuZWQuIFNvIHlvdSBjb3VsZCBlcXVhbGx5IGp1c3Qgc2F5Ogpwb3dlcmZ1bCA8LSBmdW5jdGlvbih4KSB7bGlzdCh4Mj14KngsIHgzPXgqeCp4LCB4ND14KngqeCp4KX0KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1yc3JjPC9jb2RlPi48L3A+CgogICAgPHA+RGV2ZWxvcG1lbnQgb2YgdGhlIENvZGVNaXJyb3IgUiBtb2RlIHdhcyBraW5kbHkgc3BvbnNvcmVkCiAgICBieSA8YSBocmVmPSJodHRwOi8vdWJhbG8uY29tLyI+VWJhbG88L2E+LCB3aG8gaG9sZAogICAgdGhlIDxhIGhyZWY9IkxJQ0VOU0UiPmxpY2Vuc2U8L2E+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBVYmFsbywgSW5jLgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVWJhbG8sIEluYyBub3IgdGhlIG5hbWVzIG9mIGl0cwogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORApBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFVCQUxPLCBJTkMgQkUgTElBQkxFIEZPUiBBTlkKRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/r.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJyIiwgZnVuY3Rpb24oY29uZmlnKSB7CiAgZnVuY3Rpb24gd29yZE9iaihzdHIpIHsKICAgIHZhciB3b3JkcyA9IHN0ci5zcGxpdCgiICIpLCByZXMgPSB7fTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIHJlc1t3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIHJlczsKICB9CiAgdmFyIGF0b21zID0gd29yZE9iaigiTlVMTCBOQSBJbmYgTmFOIE5BX2ludGVnZXJfIE5BX3JlYWxfIE5BX2NvbXBsZXhfIE5BX2NoYXJhY3Rlcl8iKTsKICB2YXIgYnVpbHRpbnMgPSB3b3JkT2JqKCJsaXN0IHF1b3RlIGJxdW90ZSBldmFsIHJldHVybiBjYWxsIHBhcnNlIGRlcGFyc2UiKTsKICB2YXIga2V5d29yZHMgPSB3b3JkT2JqKCJpZiBlbHNlIHJlcGVhdCB3aGlsZSBmdW5jdGlvbiBmb3IgaW4gbmV4dCBicmVhayIpOwogIHZhciBibG9ja2tleXdvcmRzID0gd29yZE9iaigiaWYgZWxzZSByZXBlYXQgd2hpbGUgZnVuY3Rpb24gZm9yIik7CiAgdmFyIG9wQ2hhcnMgPSAvWytcLSpcL148Pj0hJnx+JDpdLzsKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIGN1clB1bmMgPSBudWxsOwogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiIyIpIHsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFtLmVhdCgieCIpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xkYS1mXS9pKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiLiIgJiYgc3RyZWFtLmVhdCgvXGQvKSkgewogICAgICBzdHJlYW0ubWF0Y2goL1xkKig/OmVbK1wtXT9cZCspPy8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9IGVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9cZCooPzpcLlxkKyk/KD86ZVsrXC1dXGQrKT9MPy8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9IGVsc2UgaWYgKGNoID09ICInIiB8fCBjaCA9PSAnIicpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIi4iICYmIHN0cmVhbS5tYXRjaCgvLlsuXGRdKy8pKSB7CiAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICB9IGVsc2UgaWYgKC9bXHdcLl0vLnRlc3QoY2gpICYmIGNoICE9ICJfIikgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkgcmV0dXJuICJhdG9tIjsKICAgICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSB7CiAgICAgICAgaWYgKGJsb2Nra2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIGN1clB1bmMgPSAiYmxvY2siOwogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIH0KICAgICAgaWYgKGJ1aWx0aW5zLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSByZXR1cm4gImJ1aWx0aW4iOwogICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiUiKSB7CiAgICAgIGlmIChzdHJlYW0uc2tpcFRvKCIlIikpIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCItIikpIHsKICAgICAgcmV0dXJuICJhcnJvdyI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI9IiAmJiBzdGF0ZS5jdHguYXJnTGlzdCkgewogICAgICByZXR1cm4gImFyZy1pcyI7CiAgICB9IGVsc2UgaWYgKG9wQ2hhcnMudGVzdChjaCkpIHsKICAgICAgaWYgKGNoID09ICIkIikgcmV0dXJuICJkb2xsYXIiOwogICAgICBzdHJlYW0uZWF0V2hpbGUob3BDaGFycyk7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfSBlbHNlIGlmICgvW1woXCl7fVxbXF07XS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICBpZiAoY2ggPT0gIjsiKSByZXR1cm4gInNlbWkiOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCJcXCIpKSB7CiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICBpZiAoY2ggPT0gIngiKSBzdHJlYW0ubWF0Y2goL15bYS1mMC05XXsyfS9pKTsKICAgICAgICBlbHNlIGlmICgoY2ggPT0gInUiIHx8IGNoID09ICJVIikgJiYgc3RyZWFtLmVhdCgieyIpICYmIHN0cmVhbS5za2lwVG8oIn0iKSkgc3RyZWFtLm5leHQoKTsKICAgICAgICBlbHNlIGlmIChjaCA9PSAidSIpIHN0cmVhbS5tYXRjaCgvXlthLWYwLTldezR9L2kpOwogICAgICAgIGVsc2UgaWYgKGNoID09ICJVIikgc3RyZWFtLm1hdGNoKC9eW2EtZjAtOV17OH0vaSk7CiAgICAgICAgZWxzZSBpZiAoL1swLTddLy50ZXN0KGNoKSkgc3RyZWFtLm1hdGNoKC9eWzAtN117MSwyfS8pOwogICAgICAgIHJldHVybiAic3RyaW5nLTIiOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuZXh0OwogICAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICAgIGlmIChuZXh0ID09IHF1b3RlKSB7IHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOyBicmVhazsgfQogICAgICAgICAgaWYgKG5leHQgPT0gIlxcIikgeyBzdHJlYW0uYmFja1VwKDEpOyBicmVhazsgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgIH0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBwdXNoKHN0YXRlLCB0eXBlLCBzdHJlYW0pIHsKICAgIHN0YXRlLmN0eCA9IHt0eXBlOiB0eXBlLAogICAgICAgICAgICAgICAgIGluZGVudDogc3RhdGUuaW5kZW50LAogICAgICAgICAgICAgICAgIGFsaWduOiBudWxsLAogICAgICAgICAgICAgICAgIGNvbHVtbjogc3RyZWFtLmNvbHVtbigpLAogICAgICAgICAgICAgICAgIHByZXY6IHN0YXRlLmN0eH07CiAgfQogIGZ1bmN0aW9uIHBvcChzdGF0ZSkgewogICAgc3RhdGUuaW5kZW50ID0gc3RhdGUuY3R4LmluZGVudDsKICAgIHN0YXRlLmN0eCA9IHN0YXRlLmN0eC5wcmV2OwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHsKICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIGN0eDoge3R5cGU6ICJ0b3AiLAogICAgICAgICAgICAgICAgICAgIGluZGVudDogLWNvbmZpZy5pbmRlbnRVbml0LAogICAgICAgICAgICAgICAgICAgIGFsaWduOiBmYWxzZX0sCiAgICAgICAgICAgICAgaW5kZW50OiAwLAogICAgICAgICAgICAgIGFmdGVySWRlbnQ6IGZhbHNlfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jdHguYWxpZ24gPT0gbnVsbCkgc3RhdGUuY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSAhPSAiY29tbWVudCIgJiYgc3RhdGUuY3R4LmFsaWduID09IG51bGwpIHN0YXRlLmN0eC5hbGlnbiA9IHRydWU7CgogICAgICB2YXIgY3R5cGUgPSBzdGF0ZS5jdHgudHlwZTsKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICJ7IiB8fCBjdXJQdW5jID09ICJ9IikgJiYgY3R5cGUgPT0gImJsb2NrIikgcG9wKHN0YXRlKTsKICAgICAgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoKHN0YXRlLCAifSIsIHN0cmVhbSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSB7CiAgICAgICAgcHVzaChzdGF0ZSwgIikiLCBzdHJlYW0pOwogICAgICAgIGlmIChzdGF0ZS5hZnRlcklkZW50KSBzdGF0ZS5jdHguYXJnTGlzdCA9IHRydWU7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2goc3RhdGUsICJdIiwgc3RyZWFtKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiYmxvY2siKSBwdXNoKHN0YXRlLCAiYmxvY2siLCBzdHJlYW0pOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eXBlKSBwb3Aoc3RhdGUpOwogICAgICBzdGF0ZS5hZnRlcklkZW50ID0gc3R5bGUgPT0gInZhcmlhYmxlIiB8fCBzdHlsZSA9PSAia2V5d29yZCI7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGN0eCA9IHN0YXRlLmN0eCwKICAgICAgICAgIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7CiAgICAgIGlmIChjdHgudHlwZSA9PSAiYmxvY2siKSByZXR1cm4gY3R4LmluZGVudCArIChmaXJzdENoYXIgPT0gInsiID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgICAgZWxzZSBpZiAoY3R4LmFsaWduKSByZXR1cm4gY3R4LmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ICsgKGNsb3NpbmcgPyAwIDogY29uZmlnLmluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnNyYyIsICJyIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/changes.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjaGFuZ2VzIiwgZnVuY3Rpb24oY29uZmlnLCBtb2RlQ29uZmlnKSB7CiAgdmFyIGhlYWRlclNlcGVyYXRvciA9IC9eLSskLzsKICB2YXIgaGVhZGVyTGluZSA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAgP1xkezEsMn0gXGR7Mn06XGR7Mn0oOlxkezJ9KT8gW0EtWl17Myw0fSBcZHs0fSAtIC87CiAgdmFyIHNpbXBsZUVtYWlsID0gL15bXHcrLi1dK0BbXHcuLV0rLzsKCiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goaGVhZGVyU2VwZXJhdG9yKSkgeyByZXR1cm4gJ3RhZyc7IH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGhlYWRlckxpbmUpKSB7IHJldHVybiAndGFnJzsgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2ltcGxlRW1haWwpKSB7IHJldHVybiAnc3RyaW5nJzsgfQogICAgICBzdHJlYW0ubmV4dCgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXJwbS1jaGFuZ2VzIiwgImNoYW5nZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJQTSBjaGFuZ2VzIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJjaGFuZ2VzLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSUE0gY2hhbmdlcyBtb2RlPC9oMT4KICAgIAogICAgPGRpdj48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBPY3QgMTggMTM6NTg6NDAgVVRDIDIwMTEgLSBtaXN0ZXJ4QGV4YW1wbGUuY29tCgotIFVwZGF0ZSB0byByNjAuMwotIEZpeGVzIGJ1ZyBpbiB0aGUgcmVmbGVjdCBwYWNrYWdlCiAgKiBkaXNhbGxvdyBJbnRlcmZhY2UgbWV0aG9kIG9uIFZhbHVlIG9idGFpbmVkIHZpYSB1bmV4cG9ydGVkIG5hbWUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IE9jdCAgNiAwODoxNDoyNCBVVEMgMjAxMSAtIG1pc3RlcnhAZXhhbXBsZS5jb20KCi0gVXBkYXRlIHRvIHI2MC4yCi0gRml4ZXMgbWVtb3J5IGxlYWsgaW4gY2VydGFpbiBtYXAgdHlwZXMKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIE9jdCAgNSAxNDozNDoxMCBVVEMgMjAxMSAtIG1pc3RlcnhAZXhhbXBsZS5jb20KCi0gVHdlYWtzIGZvciBnZGIgZGVidWdnaW5nCi0gZ28uc3BlYyBjaGFuZ2VzOgogIC0gbW92ZSAlZ29fYXJjaCBkZWZpbml0aW9uIHRvICVwcmVwIHNlY3Rpb24KICAtIHBhc3MgY29ycmVjdCBsb2NhdGlvbiBvZiBnbyBzcGVjaWZpYyBnZGIgcHJldHR5IHByaW50ZXIgYW5kCiAgICBmdW5jdGlvbnMgdG8gY3BwIGFzIEhPU1RfRVhUUkFfQ0ZMQUdTIG1hY3JvCiAgLSBpbnN0YWxsIGdvIGdkYiBmdW5jdGlvbnMgJiBwcmludGVyCi0gZ2RiLXByaW50ZXIucGF0Y2gKICAtIHBhdGNoIGxpbmtlciAoc3JjL2NtZC9sZC9kd2FyZi5jKSB0byBlbWl0IGNvcnJlY3QgbG9jYXRpb24gb2YgZ28KICAgIGdkYiBmdW5jdGlvbnMgYW5kIHByZXR0eSBwcmludGVyCjwvdGV4dGFyZWE+PC9kaXY+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6IHtuYW1lOiAiY2hhbmdlcyJ9LAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgdGFiTW9kZTogInNoaWZ0IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1ycG0tY2hhbmdlczwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJQTSBzcGVjIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJzcGVjLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3BlYy5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFJQTSBzcGVjIG1vZGU8L2gxPgogICAgCiAgICA8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMKIyBzcGVjIGZpbGUgZm9yIHBhY2thZ2UgbWluaWRsbmEKIwojIENvcHlyaWdodCAoYykgMjAxMSwgU2FzY2hhIFBlaWxpY2tlIDxzYXNjaHBlQGdteC5kZT4KIwojIEFsbCBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMgdG8gdGhlIGZpbGUgY29udHJpYnV0ZWQgYnkgdGhpcmQgcGFydGllcwojIHJlbWFpbiB0aGUgcHJvcGVydHkgb2YgdGhlaXIgY29weXJpZ2h0IG93bmVycywgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQKIyB1cG9uLiBUaGUgbGljZW5zZSBmb3IgdGhpcyBmaWxlLCBhbmQgbW9kaWZpY2F0aW9ucyBhbmQgYWRkaXRpb25zIHRvIHRoZQojIGZpbGUsIGlzIHRoZSBzYW1lIGxpY2Vuc2UgYXMgZm9yIHRoZSBwcmlzdGluZSBwYWNrYWdlIGl0c2VsZiAodW5sZXNzIHRoZQojIGxpY2Vuc2UgZm9yIHRoZSBwcmlzdGluZSBwYWNrYWdlIGlzIG5vdCBhbiBPcGVuIFNvdXJjZSBMaWNlbnNlLCBpbiB3aGljaAojIGNhc2UgdGhlIGxpY2Vuc2UgaXMgdGhlIE1JVCBMaWNlbnNlKS4gQW4gIk9wZW4gU291cmNlIExpY2Vuc2UiIGlzIGEKIyBsaWNlbnNlIHRoYXQgY29uZm9ybXMgdG8gdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gKFZlcnNpb24gMS45KQojIHB1Ymxpc2hlZCBieSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4KCgpOYW1lOiAgICAgICAgICAgbGlidXBucDYKVmVyc2lvbjogICAgICAgIDEuNi4xMwpSZWxlYXNlOiAgICAgICAgMApTdW1tYXJ5OiAgICAgICAgUG9ydGFibGUgVW5pdmVyc2FsIFBsdWcgYW5kIFBsYXkgKFVQblApIFNESwpHcm91cDogICAgICAgICAgU3lzdGVtL0xpYnJhcmllcwpMaWNlbnNlOiAgICAgICAgQlNELTMtQ2xhdXNlClVybDogICAgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3B1cG5wLwpTb3VyY2UwOiAgICAgICAgaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHVwbnAvbGlidXBucC0le3ZlcnNpb259LnRhci5iejIKQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1idWlsZAoKJWRlc2NyaXB0aW9uClRoZSBwb3J0YWJsZSBVbml2ZXJzYWwgUGx1ZyBhbmQgUGxheSAoVVBuUCkgU0RLIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGJ1aWxkaW5nClVQblAtY29tcGxpYW50IGNvbnRyb2wgcG9pbnRzLCBkZXZpY2VzLCBhbmQgYnJpZGdlcyBvbiBzZXZlcmFsIG9wZXJhdGluZwpzeXN0ZW1zLgoKJXBhY2thZ2UgLW4gbGlidXBucC1kZXZlbApTdW1tYXJ5OiAgICAgICAgUG9ydGFibGUgVW5pdmVyc2FsIFBsdWcgYW5kIFBsYXkgKFVQblApIFNESwpHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvTGlicmFyaWVzL0MgYW5kIEMrKwpQcm92aWRlczogICAgICAgcGtnY29uZmlnKGxpYnVwbnApClJlcXVpcmVzOiAgICAgICAle25hbWV9ID0gJXt2ZXJzaW9ufQoKJWRlc2NyaXB0aW9uIC1uIGxpYnVwbnAtZGV2ZWwKVGhlIHBvcnRhYmxlIFVuaXZlcnNhbCBQbHVnIGFuZCBQbGF5IChVUG5QKSBTREsgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYnVpbGRpbmcKVVBuUC1jb21wbGlhbnQgY29udHJvbCBwb2ludHMsIGRldmljZXMsIGFuZCBicmlkZ2VzIG9uIHNldmVyYWwgb3BlcmF0aW5nCnN5c3RlbXMuCgolcHJlcAolc2V0dXAgLW4gbGlidXBucC0le3ZlcnNpb259CgolYnVpbGQKJWNvbmZpZ3VyZSAtLWRpc2FibGUtc3RhdGljCm1ha2UgJXs/X3NtcF9tZmxhZ3N9CgolaW5zdGFsbAolbWFrZWluc3RhbGwKZmluZCAle2J1aWxkcm9vdH0gLXR5cGUgZiAtbmFtZSAnKi5sYScgLWV4ZWMgcm0gLWYge30gJzsnCgolcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZwoKJXBvc3R1biAtcCAvc2Jpbi9sZGNvbmZpZwoKJWZpbGVzCiVkZWZhdHRyKC0scm9vdCxyb290LC0pCiVkb2MgQ2hhbmdlTG9nIE5FV1MgUkVBRE1FIFRPRE8KJXtfbGliZGlyfS9saWJpeG1sLnNvLioKJXtfbGliZGlyfS9saWJ0aHJlYWR1dGlsLnNvLioKJXtfbGliZGlyfS9saWJ1cG5wLnNvLioKCiVmaWxlcyAtbiBsaWJ1cG5wLWRldmVsCiVkZWZhdHRyKC0scm9vdCxyb290LC0pCiV7X2xpYmRpcn0vcGtnY29uZmlnL2xpYnVwbnAucGMKJXtfbGliZGlyfS9saWJpeG1sLnNvCiV7X2xpYmRpcn0vbGlidGhyZWFkdXRpbC5zbwole19saWJkaXJ9L2xpYnVwbnAuc28KJXtfaW5jbHVkZWRpcn0vdXBucC8KCiVjaGFuZ2Vsb2c8L3RleHRhcmVhPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiB7bmFtZTogInNwZWMifSwKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJwbS1zcGVjPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/spec.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLXByZWFtYmxlIHtjb2xvcjogI2IyNjgxODsgZm9udC13ZWlnaHQ6IGJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbWFjcm8ge2NvbG9yOiAjYjIxOGIyO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlY3Rpb24ge2NvbG9yOiBncmVlbjsgZm9udC13ZWlnaHQ6IGJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tc2NyaXB0IHtjb2xvcjogcmVkO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWlzc3VlIHtjb2xvcjogeWVsbG93O30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/spec.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gUXVpY2sgYW5kIGRpcnR5IHNwZWMgZmlsZSBoaWdobGlnaHRpbmcKCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3BlYyIsIGZ1bmN0aW9uKGNvbmZpZywgbW9kZUNvbmZpZykgewogIHZhciBhcmNoID0gL14oaTM4NnxpNTg2fGk2ODZ8eDg2XzY0fHBwYzY0fHBwY3xpYTY0fHMzOTB4fHMzOTB8c3BhcmM2NHxzcGFyY3Y5fHNwYXJjfG5vYXJjaHxhbHBoYWV2NnxhbHBoYXxocHBhfG1pcHNlbCkvOwoKICB2YXIgcHJlYW1ibGUgPSAvXihOYW1lfFZlcnNpb258UmVsZWFzZXxMaWNlbnNlfFN1bW1hcnl8VXJsfEdyb3VwfFNvdXJjZXxCdWlsZEFyY2h8QnVpbGRSZXF1aXJlc3xCdWlsZFJvb3R8QXV0b1JlcVByb3Z8UHJvdmlkZXN8UmVxdWlyZXMoXChcdytcKSk/fE9ic29sZXRlc3xDb25mbGljdHN8UmVjb21tZW5kc3xTb3VyY2VcZCp8UGF0Y2hcZCp8RXhjbHVzaXZlQXJjaHxOb1NvdXJjZXxTdXBwbGVtZW50cyk6LzsKICB2YXIgc2VjdGlvbiA9IC9eJShkZWJ1Z19wYWNrYWdlfHBhY2thZ2V8ZGVzY3JpcHRpb258cHJlcHxidWlsZHxpbnN0YWxsfGZpbGVzfGNsZWFufGNoYW5nZWxvZ3xwcmV1bnxwb3N0dW58cHJlfHBvc3R8dHJpZ2dlcmlufHRyaWdnZXJ1bnxwcmV0cmFuc3xwb3N0dHJhbnN8dmVyaWZ5c2NyaXB0fGNoZWNrfHRyaWdnZXJwb3N0dW58dHJpZ2dlcnByZWlufHRyaWdnZXIpLzsKICB2YXIgY29udHJvbF9mbG93X2NvbXBsZXggPSAvXiUoaWZuYXJjaHxpZmFyY2h8aWYpLzsgLy8gcnBtIGNvbnRyb2wgZmxvdyBtYWNyb3MKICB2YXIgY29udHJvbF9mbG93X3NpbXBsZSA9IC9eJShlbHNlfGVuZGlmKS87IC8vIHJwbSBjb250cm9sIGZsb3cgbWFjcm9zCiAgdmFyIG9wZXJhdG9ycyA9IC9eKFwhfFw/fFw8XD18XDx8XD5cPXxcPnxcPVw9fFwmXCZ8XHxcfCkvOyAvLyBvcGVyYXRvcnMgaW4gY29udHJvbCBmbG93IG1hY3JvcwoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBjb250cm9sRmxvdzogZmFsc2UsCiAgICAgICAgICBtYWNyb1BhcmFtZXRlcnM6IGZhbHNlLAogICAgICAgICAgc2VjdGlvbjogZmFsc2UsCiAgICAgICAgfTsKICAgIH0sCiAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTsKICAgICAgaWYgKGNoID09ICIjIikgeyBzdHJlYW0uc2tpcFRvRW5kKCk7IHJldHVybiAiY29tbWVudCI7IH0KCiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHByZWFtYmxlKSkgeyByZXR1cm4gInByZWFtYmxlIjsgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2VjdGlvbikpIHsgcmV0dXJuICJzZWN0aW9uIjsgfQogICAgICB9CgogICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXCRcdysvKSkgeyByZXR1cm4gImRlZiI7IH0gLy8gVmFyaWFibGVzIGxpa2UgJyRSUE1fQlVJTERfUk9PVCcKICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlwkXHtcdytcfS8pKSB7IHJldHVybiAiZGVmIjsgfSAvLyBWYXJpYWJsZXMgbGlrZSAnJHtSUE1fQlVJTERfUk9PVH0nCgogICAgICBpZiAoc3RyZWFtLm1hdGNoKGNvbnRyb2xfZmxvd19zaW1wbGUpKSB7IHJldHVybiAia2V5d29yZCI7IH0KICAgICAgaWYgKHN0cmVhbS5tYXRjaChjb250cm9sX2Zsb3dfY29tcGxleCkpIHsKICAgICAgICBzdGF0ZS5jb250cm9sRmxvdyA9IHRydWU7CiAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgfQogICAgICBpZiAoc3RhdGUuY29udHJvbEZsb3cpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKG9wZXJhdG9ycykpIHsgcmV0dXJuICJvcGVyYXRvciI7IH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eKFxkKykvKSkgeyByZXR1cm4gIm51bWJlciI7IH0KICAgICAgICBpZiAoc3RyZWFtLmVvbCgpKSB7IHN0YXRlLmNvbnRyb2xGbG93ID0gZmFsc2U7IH0KICAgICAgfQoKICAgICAgaWYgKHN0cmVhbS5tYXRjaChhcmNoKSkgeyByZXR1cm4gIm51bWJlciI7IH0KCiAgICAgIC8vIE1hY3JvcyBsaWtlICclbWFrZV9pbnN0YWxsJyBvciAnJWF0dHIoMDc3NSxyb290LHJvb3QpJwogICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eJVtcd10rLykpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXCgvKSkgeyBzdGF0ZS5tYWNyb1BhcmFtZXRlcnMgPSB0cnVlOyB9CiAgICAgICAgcmV0dXJuICJtYWNybyI7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLm1hY3JvUGFyYW1ldGVycykgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cZCsvKSkgeyByZXR1cm4gIm51bWJlciI7fQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cKS8pKSB7CiAgICAgICAgICBzdGF0ZS5tYWNyb1BhcmFtZXRlcnMgPSBmYWxzZTsKICAgICAgICAgIHJldHVybiAibWFjcm8iOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eJVx7XD8/W1x3IFwtXStcfS8pKSB7IHJldHVybiAibWFjcm8iOyB9IC8vIE1hY3JvcyBsaWtlICcle2RlZmluZWQgZmVkb3JhfScKCiAgICAgIC8vVE9ETzogSW5jbHVkZSBiYXNoIHNjcmlwdCBzdWItcGFyc2VyIChDb2RlTWlycm9yIHN1cHBvcnRzIHRoYXQpCiAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnBtLXNwZWMiLCAic3BlYyIpOwo=]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHJlU3RydWN0dXJlZFRleHQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJzdC5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci4uIFRoaXMgaXMgYW4gZXhjZXJwdCBmcm9tIFNwaGlueCBkb2N1bWVudGF0aW9uOiBodHRwOi8vc3BoaW54LnBvY29vLm9yZy9fc291cmNlcy9yZXN0LnR4dAoKLi4gaGlnaGxpZ2h0bGFuZzo6IHJlc3QKCi4uIF9yc3QtcHJpbWVyOgoKcmVTdHJ1Y3R1cmVkVGV4dCBQcmltZXIKPT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgc2VjdGlvbiBpcyBhIGJyaWVmIGludHJvZHVjdGlvbiB0byByZVN0cnVjdHVyZWRUZXh0IChyZVNUKSBjb25jZXB0cyBhbmQKc3ludGF4LCBpbnRlbmRlZCB0byBwcm92aWRlIGF1dGhvcnMgd2l0aCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYXV0aG9yIGRvY3VtZW50cwpwcm9kdWN0aXZlbHkuICBTaW5jZSByZVNUIHdhcyBkZXNpZ25lZCB0byBiZSBhIHNpbXBsZSwgdW5vYnRydXNpdmUgbWFya3VwCmxhbmd1YWdlLCB0aGlzIHdpbGwgbm90IHRha2UgdG9vIGxvbmcuCgouLiBzZWVhbHNvOjoKCiAgIFRoZSBhdXRob3JpdGF0aXZlIGByZVN0cnVjdHVyZWRUZXh0IFVzZXIgRG9jdW1lbnRhdGlvbgogICAmbHQ7aHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldC9yc3QuaHRtbCZndDtgXy4gIFRoZSAicmVmIiBsaW5rcyBpbiB0aGlzCiAgIGRvY3VtZW50IGxpbmsgdG8gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIGNvbnN0cnVjdHMgaW4gdGhlIHJlU1QKICAgcmVmZXJlbmNlLgoKClBhcmFncmFwaHMKLS0tLS0tLS0tLQoKVGhlIHBhcmFncmFwaCAoOmR1cmVmOmByZWYgJmx0O3BhcmFncmFwaHMmZ3Q7YCkgaXMgdGhlIG1vc3QgYmFzaWMgYmxvY2sgaW4gYSByZVNUCmRvY3VtZW50LiAgUGFyYWdyYXBocyBhcmUgc2ltcGx5IGNodW5rcyBvZiB0ZXh0IHNlcGFyYXRlZCBieSBvbmUgb3IgbW9yZSBibGFuawpsaW5lcy4gIEFzIGluIFB5dGhvbiwgaW5kZW50YXRpb24gaXMgc2lnbmlmaWNhbnQgaW4gcmVTVCwgc28gYWxsIGxpbmVzIG9mIHRoZQpzYW1lIHBhcmFncmFwaCBtdXN0IGJlIGxlZnQtYWxpZ25lZCB0byB0aGUgc2FtZSBsZXZlbCBvZiBpbmRlbnRhdGlvbi4KCgouLiBfaW5saW5lbWFya3VwOgoKSW5saW5lIG1hcmt1cAotLS0tLS0tLS0tLS0tCgpUaGUgc3RhbmRhcmQgcmVTVCBpbmxpbmUgbWFya3VwIGlzIHF1aXRlIHNpbXBsZTogdXNlCgoqIG9uZSBhc3RlcmlzazogYGAqdGV4dCpgYCBmb3IgZW1waGFzaXMgKGl0YWxpY3MpLAoqIHR3byBhc3Rlcmlza3M6IGBgKip0ZXh0KipgYCBmb3Igc3Ryb25nIGVtcGhhc2lzIChib2xkZmFjZSksIGFuZAoqIGJhY2txdW90ZXM6IGBgYGB0ZXh0YGBgYCBmb3IgY29kZSBzYW1wbGVzLgoKSWYgYXN0ZXJpc2tzIG9yIGJhY2txdW90ZXMgYXBwZWFyIGluIHJ1bm5pbmcgdGV4dCBhbmQgY291bGQgYmUgY29uZnVzZWQgd2l0aAppbmxpbmUgbWFya3VwIGRlbGltaXRlcnMsIHRoZXkgaGF2ZSB0byBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guCgpCZSBhd2FyZSBvZiBzb21lIHJlc3RyaWN0aW9ucyBvZiB0aGlzIG1hcmt1cDoKCiogaXQgbWF5IG5vdCBiZSBuZXN0ZWQsCiogY29udGVudCBtYXkgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2U6IGBgKiB0ZXh0KmBgIGlzIHdyb25nLAoqIGl0IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gc3Vycm91bmRpbmcgdGV4dCBieSBub24td29yZCBjaGFyYWN0ZXJzLiAgVXNlIGEKICBiYWNrc2xhc2ggZXNjYXBlZCBzcGFjZSB0byB3b3JrIGFyb3VuZCB0aGF0OiBgYHRoaXNpc1wgKm9uZSpcIHdvcmRgYC4KClRoZXNlIHJlc3RyaWN0aW9ucyBtYXkgYmUgbGlmdGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgZG9jdXRpbHMuCgpyZVNUIGFsc28gYWxsb3dzIGZvciBjdXN0b20gImludGVycHJldGVkIHRleHQgcm9sZXMiJywgd2hpY2ggc2lnbmlmeSB0aGF0IHRoZQplbmNsb3NlZCB0ZXh0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBpbiBhIHNwZWNpZmljIHdheS4gIFNwaGlueCB1c2VzIHRoaXMgdG8KcHJvdmlkZSBzZW1hbnRpYyBtYXJrdXAgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIG9mIGlkZW50aWZpZXJzLCBhcyBkZXNjcmliZWQgaW4KdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24uICBUaGUgZ2VuZXJhbCBzeW50YXggaXMgYGA6cm9sZW5hbWU6YGNvbnRlbnRgYGAuCgpTdGFuZGFyZCByZVNUIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgcm9sZXM6CgoqIDpkdXJvbGU6YGVtcGhhc2lzYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgKmVtcGhhc2lzKmBgCiogOmR1cm9sZTpgc3Ryb25nYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgKipzdHJvbmcqKmBgCiogOmR1cm9sZTpgbGl0ZXJhbGAgLS0gYWx0ZXJuYXRlIHNwZWxsaW5nIGZvciBgYGBgbGl0ZXJhbGBgYGAKKiA6ZHVyb2xlOmBzdWJzY3JpcHRgIC0tIHN1YnNjcmlwdCB0ZXh0CiogOmR1cm9sZTpgc3VwZXJzY3JpcHRgIC0tIHN1cGVyc2NyaXB0IHRleHQKKiA6ZHVyb2xlOmB0aXRsZS1yZWZlcmVuY2VgIC0tIGZvciB0aXRsZXMgb2YgYm9va3MsIHBlcmlvZGljYWxzLCBhbmQgb3RoZXIKICBtYXRlcmlhbHMKClNlZSA6cmVmOmBpbmxpbmUtbWFya3VwYCBmb3Igcm9sZXMgYWRkZWQgYnkgU3BoaW54LgoKCkxpc3RzIGFuZCBRdW90ZS1saWtlIGJsb2NrcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkxpc3QgbWFya3VwICg6ZHVyZWY6YHJlZiAmbHQ7YnVsbGV0LWxpc3RzJmd0O2ApIGlzIG5hdHVyYWw6IGp1c3QgcGxhY2UgYW4gYXN0ZXJpc2sgYXQKdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoIGFuZCBpbmRlbnQgcHJvcGVybHkuICBUaGUgc2FtZSBnb2VzIGZvciBudW1iZXJlZCBsaXN0czsKdGhleSBjYW4gYWxzbyBiZSBhdXRvbnVtYmVyZWQgdXNpbmcgYSBgYCNgYCBzaWduOjoKCiAgICogVGhpcyBpcyBhIGJ1bGxldGVkIGxpc3QuCiAgICogSXQgaGFzIHR3byBpdGVtcywgdGhlIHNlY29uZAogICAgIGl0ZW0gdXNlcyB0d28gbGluZXMuCgogICAxLiBUaGlzIGlzIGEgbnVtYmVyZWQgbGlzdC4KICAgMi4gSXQgaGFzIHR3byBpdGVtcyB0b28uCgogICAjLiBUaGlzIGlzIGEgbnVtYmVyZWQgbGlzdC4KICAgIy4gSXQgaGFzIHR3byBpdGVtcyB0b28uCgoKTmVzdGVkIGxpc3RzIGFyZSBwb3NzaWJsZSwgYnV0IGJlIGF3YXJlIHRoYXQgdGhleSBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZQpwYXJlbnQgbGlzdCBpdGVtcyBieSBibGFuayBsaW5lczo6CgogICAqIHRoaXMgaXMKICAgKiBhIGxpc3QKCiAgICAgKiB3aXRoIGEgbmVzdGVkIGxpc3QKICAgICAqIGFuZCBzb21lIHN1Yml0ZW1zCgogICAqIGFuZCBoZXJlIHRoZSBwYXJlbnQgbGlzdCBjb250aW51ZXMKCkRlZmluaXRpb24gbGlzdHMgKDpkdXJlZjpgcmVmICZsdDtkZWZpbml0aW9uLWxpc3RzJmd0O2ApIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6OgoKICAgdGVybSAodXAgdG8gYSBsaW5lIG9mIHRleHQpCiAgICAgIERlZmluaXRpb24gb2YgdGhlIHRlcm0sIHdoaWNoIG11c3QgYmUgaW5kZW50ZWQKCiAgICAgIGFuZCBjYW4gZXZlbiBjb25zaXN0IG9mIG11bHRpcGxlIHBhcmFncmFwaHMKCiAgIG5leHQgdGVybQogICAgICBEZXNjcmlwdGlvbi4KCk5vdGUgdGhhdCB0aGUgdGVybSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGxpbmUgb2YgdGV4dC4KClF1b3RlZCBwYXJhZ3JhcGhzICg6ZHVyZWY6YHJlZiAmbHQ7YmxvY2stcXVvdGVzJmd0O2ApIGFyZSBjcmVhdGVkIGJ5IGp1c3QgaW5kZW50aW5nCnRoZW0gbW9yZSB0aGFuIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzLgoKTGluZSBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtsaW5lLWJsb2NrcyZndDtgKSBhcmUgYSB3YXkgb2YgcHJlc2VydmluZyBsaW5lIGJyZWFrczo6CgogICB8IFRoZXNlIGxpbmVzIGFyZQogICB8IGJyb2tlbiBleGFjdGx5IGxpa2UgaW4KICAgfCB0aGUgc291cmNlIGZpbGUuCgpUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIG1vcmUgc3BlY2lhbCBibG9ja3MgYXZhaWxhYmxlOgoKKiBmaWVsZCBsaXN0cyAoOmR1cmVmOmByZWYgJmx0O2ZpZWxkLWxpc3RzJmd0O2ApCiogb3B0aW9uIGxpc3RzICg6ZHVyZWY6YHJlZiAmbHQ7b3B0aW9uLWxpc3RzJmd0O2ApCiogcXVvdGVkIGxpdGVyYWwgYmxvY2tzICg6ZHVyZWY6YHJlZiAmbHQ7cXVvdGVkLWxpdGVyYWwtYmxvY2tzJmd0O2ApCiogZG9jdGVzdCBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtkb2N0ZXN0LWJsb2NrcyZndDtgKQoKClNvdXJjZSBDb2RlCi0tLS0tLS0tLS0tCgpMaXRlcmFsIGNvZGUgYmxvY2tzICg6ZHVyZWY6YHJlZiAmbHQ7bGl0ZXJhbC1ibG9ja3MmZ3Q7YCkgYXJlIGludHJvZHVjZWQgYnkgZW5kaW5nIGEKcGFyYWdyYXBoIHdpdGggdGhlIHNwZWNpYWwgbWFya2VyIGBgOjpgYC4gIFRoZSBsaXRlcmFsIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQKKGFuZCwgbGlrZSBhbGwgcGFyYWdyYXBocywgc2VwYXJhdGVkIGZyb20gdGhlIHN1cnJvdW5kaW5nIG9uZXMgYnkgYmxhbmsgbGluZXMpOjoKCiAgIFRoaXMgaXMgYSBub3JtYWwgdGV4dCBwYXJhZ3JhcGguIFRoZSBuZXh0IHBhcmFncmFwaCBpcyBhIGNvZGUgc2FtcGxlOjoKCiAgICAgIEl0IGlzIG5vdCBwcm9jZXNzZWQgaW4gYW55IHdheSwgZXhjZXB0CiAgICAgIHRoYXQgdGhlIGluZGVudGF0aW9uIGlzIHJlbW92ZWQuCgogICAgICBJdCBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcy4KCiAgIFRoaXMgaXMgYSBub3JtYWwgdGV4dCBwYXJhZ3JhcGggYWdhaW4uCgpUaGUgaGFuZGxpbmcgb2YgdGhlIGBgOjpgYCBtYXJrZXIgaXMgc21hcnQ6CgoqIElmIGl0IG9jY3VycyBhcyBhIHBhcmFncmFwaCBvZiBpdHMgb3duLCB0aGF0IHBhcmFncmFwaCBpcyBjb21wbGV0ZWx5IGxlZnQKICBvdXQgb2YgdGhlIGRvY3VtZW50LgoqIElmIGl0IGlzIHByZWNlZGVkIGJ5IHdoaXRlc3BhY2UsIHRoZSBtYXJrZXIgaXMgcmVtb3ZlZC4KKiBJZiBpdCBpcyBwcmVjZWRlZCBieSBub24td2hpdGVzcGFjZSwgdGhlIG1hcmtlciBpcyByZXBsYWNlZCBieSBhIHNpbmdsZQogIGNvbG9uLgoKVGhhdCB3YXksIHRoZSBzZWNvbmQgc2VudGVuY2UgaW4gdGhlIGFib3ZlIGV4YW1wbGUncyBmaXJzdCBwYXJhZ3JhcGggd291bGQgYmUKcmVuZGVyZWQgYXMgIlRoZSBuZXh0IHBhcmFncmFwaCBpcyBhIGNvZGUgc2FtcGxlOiIuCgoKLi4gX3JzdC10YWJsZXM6CgpUYWJsZXMKLS0tLS0tCgpUd28gZm9ybXMgb2YgdGFibGVzIGFyZSBzdXBwb3J0ZWQuICBGb3IgKmdyaWQgdGFibGVzKiAoOmR1cmVmOmByZWYKJmx0O2dyaWQtdGFibGVzJmd0O2ApLCB5b3UgaGF2ZSB0byAicGFpbnQiIHRoZSBjZWxsIGdyaWQgeW91cnNlbGYuICBUaGV5IGxvb2sgbGlrZQp0aGlzOjoKCiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKICAgfCBIZWFkZXIgcm93LCBjb2x1bW4gMSAgIHwgSGVhZGVyIDIgICB8IEhlYWRlciAzIHwgSGVhZGVyIDQgfAogICB8IChoZWFkZXIgcm93cyBvcHRpb25hbCkgfCAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICB8CiAgICs9PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT0rPT09PT09PT09PSsKICAgfCBib2R5IHJvdyAxLCBjb2x1bW4gMSAgIHwgY29sdW1uIDIgICB8IGNvbHVtbiAzIHwgY29sdW1uIDQgfAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiAgIHwgYm9keSByb3cgMiAgICAgICAgICAgICB8IC4uLiAgICAgICAgfCAuLi4gICAgICB8ICAgICAgICAgIHwKICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKwoKKlNpbXBsZSB0YWJsZXMqICg6ZHVyZWY6YHJlZiAmbHQ7c2ltcGxlLXRhYmxlcyZndDtgKSBhcmUgZWFzaWVyIHRvIHdyaXRlLCBidXQKbGltaXRlZDogdGhleSBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByb3csIGFuZCB0aGUgZmlyc3QgY29sdW1uIGNhbm5vdApjb250YWluIG11bHRpcGxlIGxpbmVzLiAgVGhleSBsb29rIGxpa2UgdGhpczo6CgogICA9PT09PSAgPT09PT0gID09PT09PT0KICAgQSAgICAgIEIgICAgICBBIGFuZCBCCiAgID09PT09ICA9PT09PSAgPT09PT09PQogICBGYWxzZSAgRmFsc2UgIEZhbHNlCiAgIFRydWUgICBGYWxzZSAgRmFsc2UKICAgRmFsc2UgIFRydWUgICBGYWxzZQogICBUcnVlICAgVHJ1ZSAgIFRydWUKICAgPT09PT0gID09PT09ICA9PT09PT09CgoKSHlwZXJsaW5rcwotLS0tLS0tLS0tCgpFeHRlcm5hbCBsaW5rcwpeXl5eXl5eXl5eXl5eXgoKVXNlIGBgYExpbmsgdGV4dCAmbHQ7aHR0cDovL2V4YW1wbGUuY29tLyZndDtgX2BgIGZvciBpbmxpbmUgd2ViIGxpbmtzLiAgSWYgdGhlIGxpbmsKdGV4dCBzaG91bGQgYmUgdGhlIHdlYiBhZGRyZXNzLCB5b3UgZG9uJ3QgbmVlZCBzcGVjaWFsIG1hcmt1cCBhdCBhbGwsIHRoZSBwYXJzZXIKZmluZHMgbGlua3MgYW5kIG1haWwgYWRkcmVzc2VzIGluIG9yZGluYXJ5IHRleHQuCgpZb3UgY2FuIGFsc28gc2VwYXJhdGUgdGhlIGxpbmsgYW5kIHRoZSB0YXJnZXQgZGVmaW5pdGlvbiAoOmR1cmVmOmByZWYKJmx0O2h5cGVybGluay10YXJnZXRzJmd0O2ApLCBsaWtlIHRoaXM6OgoKICAgVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGNvbnRhaW5zIGBhIGxpbmtgXy4KCiAgIC4uIF9hIGxpbms6IGh0dHA6Ly9leGFtcGxlLmNvbS8KCgpJbnRlcm5hbCBsaW5rcwpeXl5eXl5eXl5eXl5eXgoKSW50ZXJuYWwgbGlua2luZyBpcyBkb25lIHZpYSBhIHNwZWNpYWwgcmVTVCByb2xlIHByb3ZpZGVkIGJ5IFNwaGlueCwgc2VlIHRoZQpzZWN0aW9uIG9uIHNwZWNpZmljIG1hcmt1cCwgOnJlZjpgcmVmLXJvbGVgLgoKClNlY3Rpb25zCi0tLS0tLS0tCgpTZWN0aW9uIGhlYWRlcnMgKDpkdXJlZjpgcmVmICZsdDtzZWN0aW9ucyZndDtgKSBhcmUgY3JlYXRlZCBieSB1bmRlcmxpbmluZyAoYW5kCm9wdGlvbmFsbHkgb3ZlcmxpbmluZykgdGhlIHNlY3Rpb24gdGl0bGUgd2l0aCBhIHB1bmN0dWF0aW9uIGNoYXJhY3RlciwgYXQgbGVhc3QKYXMgbG9uZyBhcyB0aGUgdGV4dDo6CgogICA9PT09PT09PT09PT09PT09PQogICBUaGlzIGlzIGEgaGVhZGluZwogICA9PT09PT09PT09PT09PT09PQoKTm9ybWFsbHksIHRoZXJlIGFyZSBubyBoZWFkaW5nIGxldmVscyBhc3NpZ25lZCB0byBjZXJ0YWluIGNoYXJhY3RlcnMgYXMgdGhlCnN0cnVjdHVyZSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIHN1Y2Nlc3Npb24gb2YgaGVhZGluZ3MuICBIb3dldmVyLCBmb3IgdGhlClB5dGhvbiBkb2N1bWVudGF0aW9uLCB0aGlzIGNvbnZlbnRpb24gaXMgdXNlZCB3aGljaCB5b3UgbWF5IGZvbGxvdzoKCiogYGAjYGAgd2l0aCBvdmVybGluZSwgZm9yIHBhcnRzCiogYGAqYGAgd2l0aCBvdmVybGluZSwgZm9yIGNoYXB0ZXJzCiogYGA9YGAsIGZvciBzZWN0aW9ucwoqIGBgLWBgLCBmb3Igc3Vic2VjdGlvbnMKKiBgYF5gYCwgZm9yIHN1YnN1YnNlY3Rpb25zCiogYGAiYGAsIGZvciBwYXJhZ3JhcGhzCgpPZiBjb3Vyc2UsIHlvdSBhcmUgZnJlZSB0byB1c2UgeW91ciBvd24gbWFya2VyIGNoYXJhY3RlcnMgKHNlZSB0aGUgcmVTVApkb2N1bWVudGF0aW9uKSwgYW5kIHVzZSBhIGRlZXBlciBuZXN0aW5nIGxldmVsLCBidXQga2VlcCBpbiBtaW5kIHRoYXQgbW9zdAp0YXJnZXQgZm9ybWF0cyAoSFRNTCwgTGFUZVgpIGhhdmUgYSBsaW1pdGVkIHN1cHBvcnRlZCBuZXN0aW5nIGRlcHRoLgoKCkV4cGxpY2l0IE1hcmt1cAotLS0tLS0tLS0tLS0tLS0KCiJFeHBsaWNpdCBtYXJrdXAiICg6ZHVyZWY6YHJlZiAmbHQ7ZXhwbGljaXQtbWFya3VwLWJsb2NrcyZndDtgKSBpcyB1c2VkIGluIHJlU1QgZm9yCm1vc3QgY29uc3RydWN0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyBmb290bm90ZXMsCnNwZWNpYWxseS1oaWdobGlnaHRlZCBwYXJhZ3JhcGhzLCBjb21tZW50cywgYW5kIGdlbmVyaWMgZGlyZWN0aXZlcy4KCkFuIGV4cGxpY2l0IG1hcmt1cCBibG9jayBiZWdpbnMgd2l0aCBhIGxpbmUgc3RhcnRpbmcgd2l0aCBgYC4uYGAgZm9sbG93ZWQgYnkKd2hpdGVzcGFjZSBhbmQgaXMgdGVybWluYXRlZCBieSB0aGUgbmV4dCBwYXJhZ3JhcGggYXQgdGhlIHNhbWUgbGV2ZWwgb2YKaW5kZW50YXRpb24uICAoVGhlcmUgbmVlZHMgdG8gYmUgYSBibGFuayBsaW5lIGJldHdlZW4gZXhwbGljaXQgbWFya3VwIGFuZCBub3JtYWwKcGFyYWdyYXBocy4gIFRoaXMgbWF5IGFsbCBzb3VuZCBhIGJpdCBjb21wbGljYXRlZCwgYnV0IGl0IGlzIGludHVpdGl2ZSBlbm91Z2gKd2hlbiB5b3Ugd3JpdGUgaXQuKQoKCi4uIF9kaXJlY3RpdmVzOgoKRGlyZWN0aXZlcwotLS0tLS0tLS0tCgpBIGRpcmVjdGl2ZSAoOmR1cmVmOmByZWYgJmx0O2RpcmVjdGl2ZXMmZ3Q7YCkgaXMgYSBnZW5lcmljIGJsb2NrIG9mIGV4cGxpY2l0IG1hcmt1cC4KQmVzaWRlcyByb2xlcywgaXQgaXMgb25lIG9mIHRoZSBleHRlbnNpb24gbWVjaGFuaXNtcyBvZiByZVNULCBhbmQgU3BoaW54IG1ha2VzCmhlYXZ5IHVzZSBvZiBpdC4KCkRvY3V0aWxzIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlczoKCiogQWRtb25pdGlvbnM6IDpkdWRpcjpgYXR0ZW50aW9uYCwgOmR1ZGlyOmBjYXV0aW9uYCwgOmR1ZGlyOmBkYW5nZXJgLAogIDpkdWRpcjpgZXJyb3JgLCA6ZHVkaXI6YGhpbnRgLCA6ZHVkaXI6YGltcG9ydGFudGAsIDpkdWRpcjpgbm90ZWAsCiAgOmR1ZGlyOmB0aXBgLCA6ZHVkaXI6YHdhcm5pbmdgIGFuZCB0aGUgZ2VuZXJpYyA6ZHVkaXI6YGFkbW9uaXRpb25gLgogIChNb3N0IHRoZW1lcyBzdHlsZSBvbmx5ICJub3RlIiBhbmQgIndhcm5pbmciIHNwZWNpYWxseS4pCgoqIEltYWdlczoKCiAgLSA6ZHVkaXI6YGltYWdlYCAoc2VlIGFsc28gSW1hZ2VzXyBiZWxvdykKICAtIDpkdWRpcjpgZmlndXJlYCAoYW4gaW1hZ2Ugd2l0aCBjYXB0aW9uIGFuZCBvcHRpb25hbCBsZWdlbmQpCgoqIEFkZGl0aW9uYWwgYm9keSBlbGVtZW50czoKCiAgLSA6ZHVkaXI6YGNvbnRlbnRzYCAoYSBsb2NhbCwgaS5lLiBmb3IgdGhlIGN1cnJlbnQgZmlsZSBvbmx5LCB0YWJsZSBvZgogICAgY29udGVudHMpCiAgLSA6ZHVkaXI6YGNvbnRhaW5lcmAgKGEgY29udGFpbmVyIHdpdGggYSBjdXN0b20gY2xhc3MsIHVzZWZ1bCB0byBnZW5lcmF0ZSBhbgogICAgb3V0ZXIgYGAmbHQ7ZGl2Jmd0O2BgIGluIEhUTUwpCiAgLSA6ZHVkaXI6YHJ1YnJpY2AgKGEgaGVhZGluZyB3aXRob3V0IHJlbGF0aW9uIHRvIHRoZSBkb2N1bWVudCBzZWN0aW9uaW5nKQogIC0gOmR1ZGlyOmB0b3BpY2AsIDpkdWRpcjpgc2lkZWJhcmAgKHNwZWNpYWwgaGlnaGxpZ2h0ZWQgYm9keSBlbGVtZW50cykKICAtIDpkdWRpcjpgcGFyc2VkLWxpdGVyYWxgIChsaXRlcmFsIGJsb2NrIHRoYXQgc3VwcG9ydHMgaW5saW5lIG1hcmt1cCkKICAtIDpkdWRpcjpgZXBpZ3JhcGhgIChhIGJsb2NrIHF1b3RlIHdpdGggb3B0aW9uYWwgYXR0cmlidXRpb24gbGluZSkKICAtIDpkdWRpcjpgaGlnaGxpZ2h0c2AsIDpkdWRpcjpgcHVsbC1xdW90ZWAgKGJsb2NrIHF1b3RlcyB3aXRoIHRoZWlyIG93bgogICAgY2xhc3MgYXR0cmlidXRlKQogIC0gOmR1ZGlyOmBjb21wb3VuZGAgKGEgY29tcG91bmQgcGFyYWdyYXBoKQoKKiBTcGVjaWFsIHRhYmxlczoKCiAgLSA6ZHVkaXI6YHRhYmxlYCAoYSB0YWJsZSB3aXRoIHRpdGxlKQogIC0gOmR1ZGlyOmBjc3YtdGFibGVgIChhIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMpCiAgLSA6ZHVkaXI6YGxpc3QtdGFibGVgIChhIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGEgbGlzdCBvZiBsaXN0cykKCiogU3BlY2lhbCBkaXJlY3RpdmVzOgoKICAtIDpkdWRpcjpgcmF3YCAoaW5jbHVkZSByYXcgdGFyZ2V0LWZvcm1hdCBtYXJrdXApCiAgLSA6ZHVkaXI6YGluY2x1ZGVgIChpbmNsdWRlIHJlU3RydWN0dXJlZFRleHQgZnJvbSBhbm90aGVyIGZpbGUpCiAgICAtLSBpbiBTcGhpbngsIHdoZW4gZ2l2ZW4gYW4gYWJzb2x1dGUgaW5jbHVkZSBmaWxlIHBhdGgsIHRoaXMgZGlyZWN0aXZlIHRha2VzCiAgICBpdCBhcyByZWxhdGl2ZSB0byB0aGUgc291cmNlIGRpcmVjdG9yeQogIC0gOmR1ZGlyOmBjbGFzc2AgKGFzc2lnbiBhIGNsYXNzIGF0dHJpYnV0ZSB0byB0aGUgbmV4dCBlbGVtZW50KSBbMV1fCgoqIEhUTUwgc3BlY2lmaWNzOgoKICAtIDpkdWRpcjpgbWV0YWAgKGdlbmVyYXRpb24gb2YgSFRNTCBgYCZsdDttZXRhJmd0O2BgIHRhZ3MpCiAgLSA6ZHVkaXI6YHRpdGxlYCAob3ZlcnJpZGUgZG9jdW1lbnQgdGl0bGUpCgoqIEluZmx1ZW5jaW5nIG1hcmt1cDoKCiAgLSA6ZHVkaXI6YGRlZmF1bHQtcm9sZWAgKHNldCBhIG5ldyBkZWZhdWx0IHJvbGUpCiAgLSA6ZHVkaXI6YHJvbGVgIChjcmVhdGUgYSBuZXcgcm9sZSkKCiAgU2luY2UgdGhlc2UgYXJlIG9ubHkgcGVyLWZpbGUsIGJldHRlciB1c2UgU3BoaW54JyBmYWNpbGl0aWVzIGZvciBzZXR0aW5nIHRoZQogIDpjb25mdmFsOmBkZWZhdWx0X3JvbGVgLgoKRG8gKm5vdCogdXNlIHRoZSBkaXJlY3RpdmVzIDpkdWRpcjpgc2VjdG51bWAsIDpkdWRpcjpgaGVhZGVyYCBhbmQKOmR1ZGlyOmBmb290ZXJgLgoKRGlyZWN0aXZlcyBhZGRlZCBieSBTcGhpbnggYXJlIGRlc2NyaWJlZCBpbiA6cmVmOmBzcGhpbnhtYXJrdXBgLgoKQmFzaWNhbGx5LCBhIGRpcmVjdGl2ZSBjb25zaXN0cyBvZiBhIG5hbWUsIGFyZ3VtZW50cywgb3B0aW9ucyBhbmQgY29udGVudC4gKEtlZXAKdGhpcyB0ZXJtaW5vbG9neSBpbiBtaW5kLCBpdCBpcyB1c2VkIGluIHRoZSBuZXh0IGNoYXB0ZXIgZGVzY3JpYmluZyBjdXN0b20KZGlyZWN0aXZlcy4pICBMb29raW5nIGF0IHRoaXMgZXhhbXBsZSwgOjoKCiAgIC4uIGZ1bmN0aW9uOjogZm9vKHgpCiAgICAgICAgICAgICAgICAgZm9vKHksIHopCiAgICAgIDptb2R1bGU6IHNvbWUubW9kdWxlLm5hbWUKCiAgICAgIFJldHVybiBhIGxpbmUgb2YgdGV4dCBpbnB1dCBmcm9tIHRoZSB1c2VyLgoKYGBmdW5jdGlvbmBgIGlzIHRoZSBkaXJlY3RpdmUgbmFtZS4gIEl0IGlzIGdpdmVuIHR3byBhcmd1bWVudHMgaGVyZSwgdGhlCnJlbWFpbmRlciBvZiB0aGUgZmlyc3QgbGluZSBhbmQgdGhlIHNlY29uZCBsaW5lLCBhcyB3ZWxsIGFzIG9uZSBvcHRpb24KYGBtb2R1bGVgYCAoYXMgeW91IGNhbiBzZWUsIG9wdGlvbnMgYXJlIGdpdmVuIGluIHRoZSBsaW5lcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKdGhlIGFyZ3VtZW50cyBhbmQgaW5kaWNhdGVkIGJ5IHRoZSBjb2xvbnMpLiAgT3B0aW9ucyBtdXN0IGJlIGluZGVudGVkIHRvIHRoZQpzYW1lIGxldmVsIGFzIHRoZSBkaXJlY3RpdmUgY29udGVudC4KClRoZSBkaXJlY3RpdmUgY29udGVudCBmb2xsb3dzIGFmdGVyIGEgYmxhbmsgbGluZSBhbmQgaXMgaW5kZW50ZWQgcmVsYXRpdmUgdG8gdGhlCmRpcmVjdGl2ZSBzdGFydC4KCgpJbWFnZXMKLS0tLS0tCgpyZVNUIHN1cHBvcnRzIGFuIGltYWdlIGRpcmVjdGl2ZSAoOmR1ZGlyOmByZWYgJmx0O2ltYWdlJmd0O2ApLCB1c2VkIGxpa2Ugc286OgoKICAgLi4gaW1hZ2U6OiBnbnUucG5nCiAgICAgIChvcHRpb25zKQoKV2hlbiB1c2VkIHdpdGhpbiBTcGhpbngsIHRoZSBmaWxlIG5hbWUgZ2l2ZW4gKGhlcmUgYGBnbnUucG5nYGApIG11c3QgZWl0aGVyIGJlCnJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZmlsZSwgb3IgYWJzb2x1dGUgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSByZWxhdGl2ZSB0bwp0aGUgdG9wIHNvdXJjZSBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGUgYGBza2V0Y2gvc3BhbS5yc3RgYCBjb3VsZCByZWZlcgp0byB0aGUgaW1hZ2UgYGBpbWFnZXMvc3BhbS5wbmdgYCBhcyBgYC4uL2ltYWdlcy9zcGFtLnBuZ2BgIG9yCmBgL2ltYWdlcy9zcGFtLnBuZ2BgLgoKU3BoaW54IHdpbGwgYXV0b21hdGljYWxseSBjb3B5IGltYWdlIGZpbGVzIG92ZXIgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIG91dHB1dApkaXJlY3Rvcnkgb24gYnVpbGRpbmcgKGUuZy4gdGhlIGBgX3N0YXRpY2BgIGRpcmVjdG9yeSBmb3IgSFRNTCBvdXRwdXQuKQoKSW50ZXJwcmV0YXRpb24gb2YgaW1hZ2Ugc2l6ZSBvcHRpb25zIChgYHdpZHRoYGAgYW5kIGBgaGVpZ2h0YGApIGlzIGFzIGZvbGxvd3M6CmlmIHRoZSBzaXplIGhhcyBubyB1bml0IG9yIHRoZSB1bml0IGlzIHBpeGVscywgdGhlIGdpdmVuIHNpemUgd2lsbCBvbmx5IGJlCnJlc3BlY3RlZCBmb3Igb3V0cHV0IGNoYW5uZWxzIHRoYXQgc3VwcG9ydCBwaXhlbHMgKGkuZS4gbm90IGluIExhVGVYIG91dHB1dCkuCk90aGVyIHVuaXRzIChsaWtlIGBgcHRgYCBmb3IgcG9pbnRzKSB3aWxsIGJlIHVzZWQgZm9yIEhUTUwgYW5kIExhVGVYIG91dHB1dC4KClNwaGlueCBleHRlbmRzIHRoZSBzdGFuZGFyZCBkb2N1dGlscyBiZWhhdmlvciBieSBhbGxvd2luZyBhbiBhc3RlcmlzayBmb3IgdGhlCmV4dGVuc2lvbjo6CgogICAuLiBpbWFnZTo6IGdudS4qCgpTcGhpbnggdGhlbiBzZWFyY2hlcyBmb3IgYWxsIGltYWdlcyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgcGF0dGVybiBhbmQgZGV0ZXJtaW5lcwp0aGVpciB0eXBlLiAgRWFjaCBidWlsZGVyIHRoZW4gY2hvb3NlcyB0aGUgYmVzdCBpbWFnZSBvdXQgb2YgdGhlc2UgY2FuZGlkYXRlcy4KRm9yIGluc3RhbmNlLCBpZiB0aGUgZmlsZSBuYW1lIGBgZ251LipgYCB3YXMgZ2l2ZW4gYW5kIHR3byBmaWxlcyA6ZmlsZTpgZ251LnBkZmAKYW5kIDpmaWxlOmBnbnUucG5nYCBleGlzdGVkIGluIHRoZSBzb3VyY2UgdHJlZSwgdGhlIExhVGVYIGJ1aWxkZXIgd291bGQgY2hvb3NlCnRoZSBmb3JtZXIsIHdoaWxlIHRoZSBIVE1MIGJ1aWxkZXIgd291bGQgcHJlZmVyIHRoZSBsYXR0ZXIuCgouLiB2ZXJzaW9uY2hhbmdlZDo6IDAuNAogICBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgZmlsZSBuYW1lcyBlbmRpbmcgaW4gYW4gYXN0ZXJpc2suCgouLiB2ZXJzaW9uY2hhbmdlZDo6IDAuNgogICBJbWFnZSBwYXRocyBjYW4gbm93IGJlIGFic29sdXRlLgoKCkZvb3Rub3RlcwotLS0tLS0tLS0KCkZvciBmb290bm90ZXMgKDpkdXJlZjpgcmVmICZsdDtmb290bm90ZXMmZ3Q7YCksIHVzZSBgYFsjbmFtZV1fYGAgdG8gbWFyayB0aGUgZm9vdG5vdGUKbG9jYXRpb24sIGFuZCBhZGQgdGhlIGZvb3Rub3RlIGJvZHkgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQgYWZ0ZXIgYQoiRm9vdG5vdGVzIiBydWJyaWMgaGVhZGluZywgbGlrZSBzbzo6CgogICBMb3JlbSBpcHN1bSBbI2YxXV8gZG9sb3Igc2l0IGFtZXQgLi4uIFsjZjJdXwoKICAgLi4gcnVicmljOjogRm9vdG5vdGVzCgogICAuLiBbI2YxXSBUZXh0IG9mIHRoZSBmaXJzdCBmb290bm90ZS4KICAgLi4gWyNmMl0gVGV4dCBvZiB0aGUgc2Vjb25kIGZvb3Rub3RlLgoKWW91IGNhbiBhbHNvIGV4cGxpY2l0bHkgbnVtYmVyIHRoZSBmb290bm90ZXMgKGBgWzFdX2BgKSBvciB1c2UgYXV0by1udW1iZXJlZApmb290bm90ZXMgd2l0aG91dCBuYW1lcyAoYGBbI11fYGApLgoKCkNpdGF0aW9ucwotLS0tLS0tLS0KClN0YW5kYXJkIHJlU1QgY2l0YXRpb25zICg6ZHVyZWY6YHJlZiAmbHQ7Y2l0YXRpb25zJmd0O2ApIGFyZSBzdXBwb3J0ZWQsIHdpdGggdGhlCmFkZGl0aW9uYWwgZmVhdHVyZSB0aGF0IHRoZXkgYXJlICJnbG9iYWwiLCBpLmUuIGFsbCBjaXRhdGlvbnMgY2FuIGJlIHJlZmVyZW5jZWQKZnJvbSBhbGwgZmlsZXMuICBVc2UgdGhlbSBsaWtlIHNvOjoKCiAgIExvcmVtIGlwc3VtIFtSZWZdXyBkb2xvciBzaXQgYW1ldC4KCiAgIC4uIFtSZWZdIEJvb2sgb3IgYXJ0aWNsZSByZWZlcmVuY2UsIFVSTCBvciB3aGF0ZXZlci4KCkNpdGF0aW9uIHVzYWdlIGlzIHNpbWlsYXIgdG8gZm9vdG5vdGUgdXNhZ2UsIGJ1dCB3aXRoIGEgbGFiZWwgdGhhdCBpcyBub3QKbnVtZXJpYyBvciBiZWdpbnMgd2l0aCBgYCNgYC4KCgpTdWJzdGl0dXRpb25zCi0tLS0tLS0tLS0tLS0KCnJlU1Qgc3VwcG9ydHMgInN1YnN0aXR1dGlvbnMiICg6ZHVyZWY6YHJlZiAmbHQ7c3Vic3RpdHV0aW9uLWRlZmluaXRpb25zJmd0O2ApLCB3aGljaAphcmUgcGllY2VzIG9mIHRleHQgYW5kL29yIG1hcmt1cCByZWZlcnJlZCB0byBpbiB0aGUgdGV4dCBieSBgYHxuYW1lfGBgLiAgVGhleQphcmUgZGVmaW5lZCBsaWtlIGZvb3Rub3RlcyB3aXRoIGV4cGxpY2l0IG1hcmt1cCBibG9ja3MsIGxpa2UgdGhpczo6CgogICAuLiB8bmFtZXwgcmVwbGFjZTo6IHJlcGxhY2VtZW50ICp0ZXh0KgoKb3IgdGhpczo6CgogICAuLiB8Y2F1dGlvbnwgaW1hZ2U6OiB3YXJuaW5nLnBuZwogICAgICAgICAgICAgICAgOmFsdDogV2FybmluZyEKClNlZSB0aGUgOmR1cmVmOmByZVNUIHJlZmVyZW5jZSBmb3Igc3Vic3RpdHV0aW9ucyAmbHQ7c3Vic3RpdHV0aW9uLWRlZmluaXRpb25zJmd0O2AKZm9yIGRldGFpbHMuCgpJZiB5b3Ugd2FudCB0byB1c2Ugc29tZSBzdWJzdGl0dXRpb25zIGZvciBhbGwgZG9jdW1lbnRzLCBwdXQgdGhlbSBpbnRvCjpjb25mdmFsOmByc3RfcHJvbG9nYCBvciBwdXQgdGhlbSBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgaW5jbHVkZSBpdCBpbnRvIGFsbApkb2N1bWVudHMgeW91IHdhbnQgdG8gdXNlIHRoZW0gaW4sIHVzaW5nIHRoZSA6cnN0OmRpcjpgaW5jbHVkZWAgZGlyZWN0aXZlLiAgKEJlCnN1cmUgdG8gZ2l2ZSB0aGUgaW5jbHVkZSBmaWxlIGEgZmlsZSBuYW1lIGV4dGVuc2lvbiBkaWZmZXJpbmcgZnJvbSB0aGF0IG9mIG90aGVyCnNvdXJjZSBmaWxlcywgdG8gYXZvaWQgU3BoaW54IGZpbmRpbmcgaXQgYXMgYSBzdGFuZGFsb25lIGRvY3VtZW50LikKClNwaGlueCBkZWZpbmVzIHNvbWUgZGVmYXVsdCBzdWJzdGl0dXRpb25zLCBzZWUgOnJlZjpgZGVmYXVsdC1zdWJzdGl0dXRpb25zYC4KCgpDb21tZW50cwotLS0tLS0tLQoKRXZlcnkgZXhwbGljaXQgbWFya3VwIGJsb2NrIHdoaWNoIGlzbid0IGEgdmFsaWQgbWFya3VwIGNvbnN0cnVjdCAobGlrZSB0aGUKZm9vdG5vdGVzIGFib3ZlKSBpcyByZWdhcmRlZCBhcyBhIGNvbW1lbnQgKDpkdXJlZjpgcmVmICZsdDtjb21tZW50cyZndDtgKS4gIEZvcgpleGFtcGxlOjoKCiAgIC4uIFRoaXMgaXMgYSBjb21tZW50LgoKWW91IGNhbiBpbmRlbnQgdGV4dCBhZnRlciBhIGNvbW1lbnQgc3RhcnQgdG8gZm9ybSBtdWx0aWxpbmUgY29tbWVudHM6OgoKICAgLi4KICAgICAgVGhpcyB3aG9sZSBpbmRlbnRlZCBibG9jawogICAgICBpcyBhIGNvbW1lbnQuCgogICAgICBTdGlsbCBpbiB0aGUgY29tbWVudC4KCgpTb3VyY2UgZW5jb2RpbmcKLS0tLS0tLS0tLS0tLS0tCgpTaW5jZSB0aGUgZWFzaWVzdCB3YXkgdG8gaW5jbHVkZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSBlbSBkYXNoZXMgb3IgY29weXJpZ2h0CnNpZ25zIGluIHJlU1QgaXMgdG8gZGlyZWN0bHkgd3JpdGUgdGhlbSBhcyBVbmljb2RlIGNoYXJhY3RlcnMsIG9uZSBoYXMgdG8Kc3BlY2lmeSBhbiBlbmNvZGluZy4gIFNwaGlueCBhc3N1bWVzIHNvdXJjZSBmaWxlcyB0byBiZSBlbmNvZGVkIGluIFVURi04IGJ5CmRlZmF1bHQ7IHlvdSBjYW4gY2hhbmdlIHRoaXMgd2l0aCB0aGUgOmNvbmZ2YWw6YHNvdXJjZV9lbmNvZGluZ2AgY29uZmlnIHZhbHVlLgoKCkdvdGNoYXMKLS0tLS0tLQoKVGhlcmUgYXJlIHNvbWUgcHJvYmxlbXMgb25lIGNvbW1vbmx5IHJ1bnMgaW50byB3aGlsZSBhdXRob3JpbmcgcmVTVCBkb2N1bWVudHM6CgoqICoqU2VwYXJhdGlvbiBvZiBpbmxpbmUgbWFya3VwOioqIEFzIHNhaWQgYWJvdmUsIGlubGluZSBtYXJrdXAgc3BhbnMgbXVzdCBiZQogIHNlcGFyYXRlZCBmcm9tIHRoZSBzdXJyb3VuZGluZyB0ZXh0IGJ5IG5vbi13b3JkIGNoYXJhY3RlcnMsIHlvdSBoYXZlIHRvIHVzZSBhCiAgYmFja3NsYXNoLWVzY2FwZWQgc3BhY2UgdG8gZ2V0IGFyb3VuZCB0aGF0LiAgU2VlIGB0aGUgcmVmZXJlbmNlCiAgJmx0O2h0dHA6Ly9kb2N1dGlscy5zZi5uZXQvZG9jcy9yZWYvcnN0L3Jlc3RydWN0dXJlZHRleHQuaHRtbCNpbmxpbmUtbWFya3VwJmd0O2BfCiAgZm9yIHRoZSBkZXRhaWxzLgoKKiAqKk5vIG5lc3RlZCBpbmxpbmUgbWFya3VwOioqIFNvbWV0aGluZyBsaWtlIGBgKnNlZSA6ZnVuYzpgZm9vYCpgYCBpcyBub3QKICBwb3NzaWJsZS4KCgouLiBydWJyaWM6OiBGb290bm90ZXMKCi4uIFsxXSBXaGVuIHRoZSBkZWZhdWx0IGRvbWFpbiBjb250YWlucyBhIDpyc3Q6ZGlyOmBjbGFzc2AgZGlyZWN0aXZlLCB0aGlzIGRpcmVjdGl2ZQogICAgICAgd2lsbCBiZSBzaGFkb3dlZC4gIFRoZXJlZm9yZSwgU3BoaW54IHJlLWV4cG9ydHMgaXQgYXMgOnJzdDpkaXI6YHJzdC1jbGFzc2AuCjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CiAgICA8cD5UaGUgcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlIHN1cHBvcnRzIG9uZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjo8L3A+CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT52ZXJiYXRpbSAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+QSBuYW1lIG9yIE1JTUUgdHlwZSBvZiBhIG1vZGUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGhpZ2hsaWdodGluZwogICAgICB2ZXJiYXRpbSBibG9ja3MuIEJ5IGRlZmF1bHQsIHJlU3RydWN0dXJlZFRleHQgbW9kZSB1c2VzIHVuaWZvcm0gY29sb3IKICAgICAgZm9yIHdob2xlIGJsb2NrIG9mIHZlcmJhdGltIHRleHQgaWYgbm8gbW9kZSBpcyBnaXZlbi48L2RkPgogICAgPC9kbD4KICAgIDxwPklmIDxjb2RlPnB5dGhvbjwvY29kZT4gbW9kZSBpcyBhdmFpbGFibGUsCiAgICBpdCB3aWxsIGJlIHVzZWQgZm9yIGhpZ2hsaWdodGluZyBibG9ja3MgY29udGFpbmluZyBQeXRob24vSVB5dGhvbiB0ZXJtaW5hbAogICAgc2Vzc2lvbnMgKGJsb2NrcyBzdGFydGluZyB3aXRoIDxjb2RlPiZndDsmZ3Q7Jmd0OzwvY29kZT4gKGZvciBQeXRob24pIG9yCiAgICA8Y29kZT5JbiBbbnVtXTo8L2NvZGU+IChmb3IgSVB5dGhvbikuCgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1yc3Q8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4KCg==]]></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+PnxJbiBcW1xkK1xdOilccy87CgogICAgZnVuY3Rpb24gbm9ybWFsKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2gsIHNvbCwgaTsKCiAgICAgICAgaWYgKHN0cmVhbS5lYXQoL1xcLykpIHsKICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBzb2wgPSBzdHJlYW0uc29sKCk7CgogICAgICAgIGlmIChzb2wgJiYgKGNoID0gc3RyZWFtLmVhdChyZVNlY3Rpb24pKSkgewogICAgICAgICAgICBmb3IgKGkgPSAwOyBzdHJlYW0uZWF0KGNoKTsgaSsrKTsKCiAgICAgICAgICAgIGlmIChpID49IDMgJiYgc3RyZWFtLm1hdGNoKC9eXHMqJC8pKSB7CiAgICAgICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIG51bGwpOwogICAgICAgICAgICAgICAgcmV0dXJuICdoZWFkZXInOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcChpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRGlyZWN0aXZlTWFya2VyKSkgewogICAgICAgICAgICBpZiAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGRpcmVjdGl2ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdtZXRhJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocmVWZXJiYXRpbU1hcmtlcikpIHsKICAgICAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHZlcmJhdGltTW9kZTsKCiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgdmVyYmF0aW0sIHsKICAgICAgICAgICAgICAgICAgICBtb2RlOiBtb2RlLAogICAgICAgICAgICAgICAgICAgIGxvY2FsOiBtb2RlLnN0YXJ0U3RhdGUoKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdtZXRhJzsKICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRXhhbXBsZXMsIGZhbHNlKSkgewogICAgICAgICAgICBpZiAoIXB5dGhvbk1vZGUpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ21ldGEnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIG1vZGUgPSBweXRob25Nb2RlOwoKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSwgewogICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYWw6IG1vZGUuc3RhcnRTdGF0ZSgpCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdGVzdEJhY2t3YXJkKHJlKSB7CiAgICAgICAgICAgIHJldHVybiBzb2wgfHwgIXN0YXRlLmN0eC5iYWNrIHx8IHJlLnRlc3Qoc3RhdGUuY3R4LmJhY2spOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdGVzdEZvcndhcmQocmUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5lb2woKSB8fCBzdHJlYW0ubWF0Y2gocmUsIGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHRlc3RJbmxpbmUocmUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChyZSkgJiYgdGVzdEJhY2t3YXJkKC9cVy8pICYmIHRlc3RGb3J3YXJkKC9cVy8pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRlc3RJbmxpbmUocmVGb290bm90ZVJlZikpIHsKICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICByZXR1cm4gJ2Zvb3Rub3RlJzsKICAgICAgICB9CgogICAgICAgIGlmICh0ZXN0SW5saW5lKHJlQ2l0YXRpb25SZWYpKSB7CiAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgcmV0dXJuICdjaXRhdGlvbic7CiAgICAgICAgfQoKICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgIGlmICh0ZXN0QmFja3dhcmQocmVQcmVJbmxpbmUpKSB7CiAgICAgICAgICAgIGlmICgoY2ggPT09ICc6JyB8fCBjaCA9PT0gJ3wnKSAmJiBzdHJlYW0uZWF0KC9cUy8pKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW47CgogICAgICAgICAgICAgICAgaWYgKGNoID09PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9ICdidWlsdGluJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSAnYXRvbSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGlubGluZSwgewogICAgICAgICAgICAgICAgICAgIGNoOiBjaCwKICAgICAgICAgICAgICAgICAgICB3aWRlOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBwcmV2OiBudWxsLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoY2ggPT09ICcqJyB8fCBjaCA9PT0gJ2AnKSB7CiAgICAgICAgICAgICAgICB2YXIgb3JpZyA9IGNoLAogICAgICAgICAgICAgICAgICAgIHdpZGUgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgICAgICAgICAgaWYgKGNoID09IG9yaWcpIHsKICAgICAgICAgICAgICAgICAgICB3aWRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGNoICYmICEvXHMvLnRlc3QoY2gpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3JpZyA9PT0gJyonKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gd2lkZSA/ICdzdHJvbmcnIDogJ2VtJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHdpZGUgPyAnc3RyaW5nJyA6ICdzdHJpbmctMic7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgaW5saW5lLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoOiBvcmlnLCAgICAgICAgICAgICAgIC8vIGlubGluZSgpIGhhcyB0byBrbm93IHdoYXQgdG8gc2VhcmNoIGZvcgogICAgICAgICAgICAgICAgICAgICAgICB3aWRlOiB3aWRlLCAgICAgICAgICAgICAvLyBhcmUgd2UgbG9va2luZyBmb3IgYGNoYCBvciBgY2hjaGAKICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogbnVsbCwgICAgICAgICAgICAgLy8gdGVybWluYXRvciBtdXN0IG5vdCBiZSBwcmVjZWVkZWQgd2l0aCB3aGl0ZXNwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbiAgICAgICAgICAgIC8vIEkgZG9uJ3Qgd2FudCB0byByZWNvbXB1dGUgdGhpcyBhbGwgdGhlIHRpbWUKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmxpbmUoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCksCiAgICAgICAgICAgIHRva2VuID0gc3RhdGUuY3R4LnRva2VuOwoKICAgICAgICBmdW5jdGlvbiBmaW5pc2goY2gpIHsKICAgICAgICAgICAgc3RhdGUuY3R4LnByZXYgPSBjaDsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNoICE9IHN0YXRlLmN0eC5jaCkgewogICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICB9CgogICAgICAgIGlmICgvXHMvLnRlc3Qoc3RhdGUuY3R4LnByZXYpKSB7CiAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlLmN0eC53aWRlKSB7CiAgICAgICAgICAgIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgIGlmIChjaCAhPSBzdGF0ZS5jdHguY2gpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIXN0cmVhbS5lb2woKSAmJiAhcmVQb3N0SW5saW5lLnRlc3Qoc3RyZWFtLnBlZWsoKSkpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmN0eC53aWRlKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICB9CgogICAgICAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwpOwogICAgICAgIHNldE5vcm1hbChzdGF0ZSwgY2gpOwoKICAgICAgICByZXR1cm4gdG9rZW47CiAgICB9CgogICAgZnVuY3Rpb24gZGlyZWN0aXZlKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgdG9rZW4gPSBudWxsOwoKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHJlRGlyZWN0aXZlKSkgewogICAgICAgICAgICB0b2tlbiA9ICdhdHRyaWJ1dGUnOwogICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKHJlSHlwZXJsaW5rKSkgewogICAgICAgICAgICB0b2tlbiA9ICdsaW5rJzsKICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChyZUZvb3Rub3RlKSkgewogICAgICAgICAgICB0b2tlbiA9ICdxdW90ZSc7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocmVDaXRhdGlvbikpIHsKICAgICAgICAgICAgdG9rZW4gPSAncXVvdGUnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwoKICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgY29tbWVudCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBGSVhNRSB0aGlzIGlzIHVucmVhY2hhYmxlCiAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGJvZHksIHtzdGFydDogdHJ1ZX0pOwogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBib2R5KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgdG9rZW4gPSAnYm9keSc7CgogICAgICAgIGlmICghc3RhdGUuY3R4LnN0YXJ0IHx8IHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgdG9rZW4pOwogICAgICAgIH0KCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHNldEN0eChzdGF0ZSk7CgogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBjb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgJ2NvbW1lbnQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiB2ZXJiYXRpbShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIGJsb2NrKHN0cmVhbSwgc3RhdGUsICdtZXRhJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICAgICAgaWYgKCFzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHZlcmJhdGltTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN0eC5sb2NhbCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGJsb2NrKHN0cmVhbSwgc3RhdGUsIHRva2VuKSB7CiAgICAgICAgaWYgKHN0cmVhbS5lb2woKSB8fCBzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIHN0cmVhbSk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4ge2ZuOiBub3JtYWwsIGN0eDoge319OwogICAgICAgIH0sCgogICAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHtmbjogc3RhdGUuZm4sIGN0eDogc3RhdGUuY3R4fTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgdG9rZW4gPSBzdGF0ZS5mbihzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0KICAgIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnN0IiwgInJzdCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJ1YnkgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJ1YnkuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICAuY20tcy1kZWZhdWx0IHNwYW4uY20tYXJyb3cgeyBjb2xvcjogcmVkOyB9CiAgICA8L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSdWJ5IG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2RlIGZyb20gaHR0cDovL3NhbmRib3gubWMuZWR1L35iZW5uZXQvcnVieS9jb2RlL3BvbHlfcmIuaHRtbAojCiMgVGhpcyBwcm9ncmFtIGV2YWx1YXRlcyBwb2x5bm9taWFscy4gIEl0IGZpcnN0IGFza3MgZm9yIHRoZSBjb2VmZmljaWVudHMKIyBvZiBhIHBvbHlub21pYWwsIHdoaWNoIG11c3QgYmUgZW50ZXJlZCBvbiBvbmUgbGluZSwgaGlnaGVzdC1vcmRlciBmaXJzdC4KIyBJdCB0aGVuIHJlcXVlc3RzIHZhbHVlcyBvZiB4IGFuZCB3aWxsIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSBwb2x5IGZvcgojIGVhY2ggeC4gIEl0IHdpbGwgcmVwZWF0bHkgYXNrIGZvciB4IHZhbHVlcywgdW5sZXNzIHlvdSB0aGUgdXNlciBlbnRlcnMKIyBhIGJsYW5rIGxpbmUuICBJdCB0aGF0IGNhc2UsIGl0IHdpbGwgYXNrIGZvciBhbm90aGVyIHBvbHlub21pYWwuICBJZiB0aGUKIyB1c2VyIHR5cGVzIHF1aXQgZm9yIGVpdGhlciBpbnB1dCwgdGhlIHByb2dyYW0gaW1tZWRpYXRlbHkgZXhpdHMuCiMKCiMKIyBGdW5jdGlvbiB0byBldmFsdWF0ZSBhIHBvbHlub21pYWwgYXQgeC4gIFRoZSBwb2x5bm9taWFsIGlzIGdpdmVuCiMgYXMgYSBsaXN0IG9mIGNvZWZmaWNpZW50cywgZnJvbSB0aGUgZ3JlYXRlc3QgdG8gdGhlIGxlYXN0LgpkZWYgcG9seXZhbCh4LCBjb2VmKQogICAgc3VtID0gMAogICAgY29lZiA9IGNvZWYuY2xvbmUgICAgICAgICAgICMgRG9uJ3Qgd2FudCB0byBkZXN0cm95IHRoZSBvcmlnaW5hbAogICAgd2hpbGUgdHJ1ZQogICAgICAgIHN1bSArPSBjb2VmLnNoaWZ0ICAgICAgICMgQWRkIGFuZCByZW1vdmUgdGhlIG5leHQgY29lZgogICAgICAgIGJyZWFrIGlmIGNvZWYuZW1wdHk/ICAgICMgSWYgbm8gbW9yZSwgZG9uZSBlbnRpcmVseS4KICAgICAgICBzdW0gKj0geCAgICAgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB0aGUgcmlnaHQgbnVtYmVyIG9mIHRpbWVzLgogICAgZW5kCiAgICByZXR1cm4gc3VtCmVuZAoKIwojIEZ1bmN0aW9uIHRvIHJlYWQgYSBsaW5lIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGludGVnZXJzIGFuZCByZXR1cm4KIyB0aGVtIGFzIGFuIGFycmF5IG9mIGludGVnZXJzLiAgSWYgdGhlIHN0cmluZyBjb252ZXJzaW9uIGZhaWxzLCBpdAojIHRocm93cyBUeXBlRXJyb3IuICBJZiB0aGUgaW5wdXQgbGluZSBpcyB0aGUgd29yZCAncXVpdCcsIHRoZW4gaXQKIyBjb252ZXJ0cyBpdCB0byBhbiBlbmQtb2YtZmlsZSBleGNlcHRpb24KZGVmIHJlYWRpbnRzKHByb21wdCkKICAgICMgUmVhZCBhIGxpbmUKICAgIHByaW50IHByb21wdAogICAgbGluZSA9IHJlYWRsaW5lLmNob21wCiAgICByYWlzZSBFT0ZFcnJvci5uZXcgaWYgbGluZSA9PSAncXVpdCcgIyBZb3UgY2FuIGFsc28gdXNlIGEgcmVhbCBFT0YuCiAgICAgICAgICAgIAogICAgIyBHbyB0aHJvdWdoIGVhY2ggaXRlbSBvbiB0aGUgbGluZSwgY29udmVydGluZyBlYWNoIG9uZSBhbmQgYWRkaW5nIGl0CiAgICAjIHRvIHJldHZhbC4KICAgIHJldHZhbCA9IFsgXQogICAgZm9yIHN0ciBpbiBsaW5lLnNwbGl0KC9ccysvKQogICAgICAgIGlmIHN0ciA9fiAvXlwtP1xkKyQvCiAgICAgICAgICAgIHJldHZhbC5wdXNoKHN0ci50b19pKQogICAgICAgIGVsc2UKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLm5ldwogICAgICAgIGVuZAogICAgZW5kCgogICAgcmV0dXJuIHJldHZhbAplbmQKCiMKIyBUYWtlIGEgY29lZmYgYW5kIGFuIGV4cG9uZW50IGFuZCByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiwgaWdub3JpbmcKIyB0aGUgc2lnbiBvZiB0aGUgY29lZmZpY2llbnQuCmRlZiB0ZXJtX3RvX3N0cihjb2VmLCBleHApCiAgICByZXQgPSAiIgoKICAgICMgU2hvdyBjb2VmZiwgdW5sZXNzIGl0J3MgMSBvciBhdCB0aGUgcmlnaHQKICAgIGNvZWYgPSBjb2VmLmFicwogICAgcmV0ID0gY29lZi50b19zICAgICB1bmxlc3MgY29lZiA9PSAxICYmIGV4cCA+IDAKICAgIHJldCArPSAieCIgaWYgZXhwID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHggaWYgZXhwb25lbnQgbm90IDAKICAgIHJldCArPSAiXiIgKyBleHAudG9fcyBpZiBleHAgPiAxICAgICAgICAgICAgICAgICAgICAjIF5leHBvbmVudCwgaWYgPiAxLgoKICAgIHJldHVybiByZXQKZW5kCgojCiMgQ3JlYXRlIGEgc3RyaW5nIG9mIHRoZSBwb2x5bm9taWFsIGluIHNvcnQtb2YtcmVhZGFibGUgZm9ybS4KZGVmIHBvbHlzdHIocCkKICAgICMgR2V0IHRoZSBleHBvbmVudCBvZiBmaXJzdCBjb2VmZmljaWVudCwgcGx1cyAxLgogICAgZXhwID0gcC5sZW5ndGgKCiAgICAjIEFzc2lnbiBleHBvbmVudHMgdG8gZWFjaCB0ZXJtLCBtYWtpbmcgcGFpcnMgb2YgY29lZmYgYW5kIGV4cG9uZW50LAogICAgIyBUaGVuIGdldCByaWQgb2YgdGhlIHplcm8gdGVybXMuCiAgICBwID0gKHAubWFwIHsgfGN8IGV4cCAtPSAxOyBbIGMsIGV4cCBdIH0pLnNlbGVjdCB7IHxwfCBwWzBdICE9IDAgfQoKICAgICMgSWYgdGhlcmUncyBub3RoaW5nIGxlZnQsIGl0J3MgYSB6ZXJvCiAgICByZXR1cm4gIjAiIGlmIHAuZW1wdHk/CgogICAgIyAqKiogTm93IHAgaXMgYSBub24tZW1wdHkgbGlzdCBvZiBbIGNvZWYsIGV4cG9uZW50IF0gcGFpcnMuICoqKgoKICAgICMgQ29udmVydCB0aGUgZmlyc3QgdGVybSwgcHJlY2VkZWQgYnkgYSAiLSIgaWYgaXQncyBuZWdhdGl2ZS4KICAgIHJlc3VsdCA9IChpZiBwWzBdWzBdIDwgMCB0aGVuICItIiBlbHNlICIiIGVuZCkgKyB0ZXJtX3RvX3N0cigqcFswXSkKCiAgICAjIENvbnZlcnQgdGhlIHJlc3Qgb2YgdGhlIHRlcm1zLCBpbiBlYWNoIGNhc2UgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZQogICAgIyArIG9yIC0gc2VwYXJhdGluZyB0aGVtLiAgCiAgICBmb3IgdGVybSBpbiBwWzEuLi5wLmxlbmd0aF0KICAgICAgICAjIEFkZCB0aGUgc2VwYXJhdG9yIHRoZW4gdGhlIHJlcC4gb2YgdGhlIHRlcm0uCiAgICAgICAgcmVzdWx0ICs9IChpZiB0ZXJtWzBdIDwgMCB0aGVuICIgLSAiIGVsc2UgIiArICIgZW5kKSArIAogICAgICAgICAgICAgICAgdGVybV90b19zdHIoKnRlcm0pCiAgICBlbmQKCiAgICByZXR1cm4gcmVzdWx0CmVuZAogICAgICAgIAojCiMgUnVuIHVudGlsIHNvbWUga2luZCBvZiBlbmRmaWxlLgpiZWdpbgogICAgIyBSZXBlYXQgdW50aWwgYW4gZXhjZXB0aW9uIG9yIHF1aXQgZ2V0cyB1cyBvdXQuCiAgICB3aGlsZSB0cnVlCiAgICAgICAgIyBSZWFkIGEgcG9seSB1bnRpbCBpdCB3b3Jrcy4gIEFuIEVPRiB3aWxsIGV4Y2VwdCBvdXQgb2YgdGhlCiAgICAgICAgIyBwcm9ncmFtLgogICAgICAgIHByaW50ICJcbiIKICAgICAgICBiZWdpbgogICAgICAgICAgICBwb2x5ID0gcmVhZGludHMoIkVudGVyIGEgcG9seW5vbWlhbCBjb2VmZmljaWVudHM6ICIpCiAgICAgICAgcmVzY3VlIFR5cGVFcnJvcgogICAgICAgICAgICBwcmludCAiVHJ5IGFnYWluLlxuIgogICAgICAgICAgICByZXRyeQogICAgICAgIGVuZAogICAgICAgIGJyZWFrIGlmIHBvbHkuZW1wdHk/CgogICAgICAgICMgUmVhZCBhbmQgZXZhbHVhdGUgeCB2YWx1ZXMgdW50aWwgdGhlIHVzZXIgdHlwZXMgYSBibGFuayBsaW5lLgogICAgICAgICMgQWdhaW4sIGFuIEVPRiB3aWxsIGV4Y2VwdCBvdXQgb2YgdGhlIHBnbS4KICAgICAgICB3aGlsZSB0cnVlCiAgICAgICAgICAgICMgUmVxdWVzdCBhbiBpbnRlZ2VyLgogICAgICAgICAgICBwcmludCAiRW50ZXIgeCB2YWx1ZSBvciBibGFuayBsaW5lOiAiCiAgICAgICAgICAgIHggPSByZWFkbGluZS5jaG9tcAogICAgICAgICAgICBicmVhayBpZiB4ID09ICcnCiAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yLm5ldyBpZiB4ID09ICdxdWl0JwoKICAgICAgICAgICAgIyBJZiBpdCBsb29rcyBiYWQsIGxldCdzIHRyeSBhZ2Fpbi4KICAgICAgICAgICAgaWYgeCAhfiAvXlwtP1xkKyQvCiAgICAgICAgICAgICAgICBwcmludCAiVGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBhbiBpbnRlZ2VyLiAgUGxlYXNlIHRyeSBhZ2Fpbi5cbiIKICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAjIENvbnZlcnQgdG8gYW4gaW50ZWdlciBhbmQgcHJpbnQgdGhlIHJlc3VsdC4KICAgICAgICAgICAgeCA9IHgudG9faQogICAgICAgICAgICBwcmludCAicCh4KSA9ICIsIHBvbHlzdHIocG9seSksICJcbiIKICAgICAgICAgICAgcHJpbnQgInAoIiwgeCwgIikgPSAiLCBwb2x5dmFsKHgsIHBvbHkpLCAiXG4iCiAgICAgICAgZW5kCiAgICBlbmQKcmVzY3VlIEVPRkVycm9yCiAgICBwcmludCAiXG49PT0gRU9GID09PVxuIgpyZXNjdWUgSW50ZXJydXB0LCBTaWduYWxFeGNlcHRpb24KICAgIHByaW50ICJcbj09PSBJbnRlcnJ1cHRlZCA9PT1cbiIKZWxzZQogICAgcHJpbnQgIi0tLSBCeWUgLS0tXG4iCmVuZAo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogInRleHQveC1ydWJ5IiwKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJ1Ynk8L2NvZGU+LjwvcD4KCiAgICA8cD5EZXZlbG9wbWVudCBvZiB0aGUgQ29kZU1pcnJvciBSdWJ5IG1vZGUgd2FzIGtpbmRseSBzcG9uc29yZWQKICAgIGJ5IDxhIGhyZWY9Imh0dHA6Ly91YmFsby5jb20vIj5VYmFsbzwvYT4sIHdobyBob2xkCiAgICB0aGUgPGEgaHJlZj0iTElDRU5TRSI+bGljZW5zZTwvYT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBVYmFsbywgSW5jLgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVWJhbG8sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBVQkFMTywgSU5DIEJFIExJQUJMRSBGT1IgQU5ZCkRJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECk9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTClNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/ruby.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJydWJ5IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICBmdW5jdGlvbiB3b3JkT2JqKHdvcmRzKSB7CiAgICB2YXIgbyA9IHt9OwogICAgZm9yICh2YXIgaSA9IDAsIGUgPSB3b3Jkcy5sZW5ndGg7IGkgPCBlOyArK2kpIG9bd29yZHNbaV1dID0gdHJ1ZTsKICAgIHJldHVybiBvOwogIH0KICB2YXIga2V5d29yZHMgPSB3b3JkT2JqKFsKICAgICJhbGlhcyIsICJhbmQiLCAiQkVHSU4iLCAiYmVnaW4iLCAiYnJlYWsiLCAiY2FzZSIsICJjbGFzcyIsICJkZWYiLCAiZGVmaW5lZD8iLCAiZG8iLCAiZWxzZSIsCiAgICAiZWxzaWYiLCAiRU5EIiwgImVuZCIsICJlbnN1cmUiLCAiZmFsc2UiLCAiZm9yIiwgImlmIiwgImluIiwgIm1vZHVsZSIsICJuZXh0IiwgIm5vdCIsICJvciIsCiAgICAicmVkbyIsICJyZXNjdWUiLCAicmV0cnkiLCAicmV0dXJuIiwgInNlbGYiLCAic3VwZXIiLCAidGhlbiIsICJ0cnVlIiwgInVuZGVmIiwgInVubGVzcyIsCiAgICAidW50aWwiLCAid2hlbiIsICJ3aGlsZSIsICJ5aWVsZCIsICJuaWwiLCAicmFpc2UiLCAidGhyb3ciLCAiY2F0Y2giLCAiZmFpbCIsICJsb29wIiwgImNhbGxjYyIsCiAgICAiY2FsbGVyIiwgImxhbWJkYSIsICJwcm9jIiwgInB1YmxpYyIsICJwcm90ZWN0ZWQiLCAicHJpdmF0ZSIsICJyZXF1aXJlIiwgImxvYWQiLAogICAgInJlcXVpcmVfcmVsYXRpdmUiLCAiZXh0ZW5kIiwgImF1dG9sb2FkIgogIF0pOwogIHZhciBpbmRlbnRXb3JkcyA9IHdvcmRPYmooWyJkZWYiLCAiY2xhc3MiLCAiY2FzZSIsICJmb3IiLCAid2hpbGUiLCAiZG8iLCAibW9kdWxlIiwgInRoZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmxlc3MiLCAiY2F0Y2giLCAibG9vcCIsICJwcm9jIl0pOwogIHZhciBkZWRlbnRXb3JkcyA9IHdvcmRPYmooWyJlbmQiLCAidW50aWwiXSk7CiAgdmFyIG1hdGNoaW5nID0geyJbIjogIl0iLCAieyI6ICJ9IiwgIigiOiAiKSJ9OwogIHZhciBjdXJQdW5jOwoKICBmdW5jdGlvbiBjaGFpbihuZXd0b2ssIHN0cmVhbSwgc3RhdGUpIHsKICAgIHN0YXRlLnRva2VuaXplLnB1c2gobmV3dG9rKTsKICAgIHJldHVybiBuZXd0b2soc3RyZWFtLCBzdGF0ZSk7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgY3VyUHVuYyA9IG51bGw7CiAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaCgiPWJlZ2luIikgJiYgc3RyZWFtLmVvbCgpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplLnB1c2gocmVhZEJsb2NrQ29tbWVudCk7CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiYCIgfHwgY2ggPT0gIiciIHx8IGNoID09ICciJyB8fCBjaCA9PSAiLyIpIHsKICAgICAgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoY2gsICJzdHJpbmciLCBjaCA9PSAnIicpLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiUiKSB7CiAgICAgIHZhciBzdHlsZSwgZW1iZWQgPSBmYWxzZTsKICAgICAgaWYgKHN0cmVhbS5lYXQoInMiKSkgc3R5bGUgPSAiYXRvbSI7CiAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoL1tXUV0vKSkgeyBzdHlsZSA9ICJzdHJpbmciOyBlbWJlZCA9IHRydWU7IH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgvW3d4cXJdLykpIHN0eWxlID0gInN0cmluZyI7CiAgICAgIHZhciBkZWxpbSA9IHN0cmVhbS5lYXQoL1teXHdcc10vKTsKICAgICAgaWYgKCFkZWxpbSkgcmV0dXJuICJvcGVyYXRvciI7CiAgICAgIGlmIChtYXRjaGluZy5wcm9wZXJ0eUlzRW51bWVyYWJsZShkZWxpbSkpIGRlbGltID0gbWF0Y2hpbmdbZGVsaW1dOwogICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZChkZWxpbSwgc3R5bGUsIGVtYmVkLCB0cnVlKSwgc3RyZWFtLCBzdGF0ZSk7CiAgICB9IGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCI8IikpIHsKICAgICAgc3RyZWFtLmVhdCgiLSIpOwogICAgICBzdHJlYW0uZWF0KC9bXCdcIlxgXS8pOwogICAgICB2YXIgbWF0Y2ggPSBzdHJlYW0ubWF0Y2goL15cdysvKTsKICAgICAgc3RyZWFtLmVhdCgvW1wnXCJcYF0vKTsKICAgICAgaWYgKG1hdGNoKSByZXR1cm4gY2hhaW4ocmVhZEhlcmVEb2MobWF0Y2hbMF0pLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKGNoID09ICIwIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgieCIpKSBzdHJlYW0uZWF0V2hpbGUoL1tcZGEtZkEtRl0vKTsKICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiYiIpKSBzdHJlYW0uZWF0V2hpbGUoL1swMV0vKTsKICAgICAgZWxzZSBzdHJlYW0uZWF0V2hpbGUoL1swLTddLyk7CiAgICAgIHJldHVybiAibnVtYmVyIjsKICAgIH0gZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0ubWF0Y2goL15bXGRfXSooPzpcLltcZF9dKyk/KD86W2VFXVsrXC1dP1tcZF9dKyk/Lyk7CiAgICAgIHJldHVybiAibnVtYmVyIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIj8iKSB7CiAgICAgIHdoaWxlIChzdHJlYW0ubWF0Y2goL15cXFtDTV0tLykpIHt9CiAgICAgIGlmIChzdHJlYW0uZWF0KCJcXCIpKSBzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CiAgICAgIGVsc2Ugc3RyZWFtLm5leHQoKTsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfSBlbHNlIGlmIChjaCA9PSAiOiIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIiciKSkgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoIiciLCAiYXRvbSIsIGZhbHNlKSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHJlYW0uZWF0KCciJykpIHJldHVybiBjaGFpbihyZWFkUXVvdGVkKCciJywgImF0b20iLCB0cnVlKSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XD9dLyk7CiAgICAgIHJldHVybiAiYXRvbSI7CiAgICB9IGVsc2UgaWYgKGNoID09ICJAIikgewogICAgICBzdHJlYW0uZWF0KCJAIik7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XD9dLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9IGVsc2UgaWYgKGNoID09ICIkIikgewogICAgICBzdHJlYW0ubmV4dCgpOwogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1w/XS8pOwogICAgICByZXR1cm4gInZhcmlhYmxlLTMiOwogICAgfSBlbHNlIGlmICgvXHcvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XD9dLyk7CiAgICAgIGlmIChzdHJlYW0uZWF0KCI6IikpIHJldHVybiAiYXRvbSI7CiAgICAgIHJldHVybiAiaWRlbnQiOwogICAgfSBlbHNlIGlmIChjaCA9PSAifCIgJiYgKHN0YXRlLnZhckxpc3QgfHwgc3RhdGUubGFzdFRvayA9PSAieyIgfHwgc3RhdGUubGFzdFRvayA9PSAiZG8iKSkgewogICAgICBjdXJQdW5jID0gInwiOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoL1tcKFwpXFtcXXt9XFw7XS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIi0iICYmIHN0cmVhbS5lYXQoIj4iKSkgewogICAgICByZXR1cm4gImFycm93IjsKICAgIH0gZWxzZSBpZiAoL1s9K1wtXC8qOlwuXiU8Pn58XS8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bPStcLVwvKjpcLl4lPD5+fF0vKTsKICAgICAgcmV0dXJuICJvcGVyYXRvciI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZVVudGlsQnJhY2UoKSB7CiAgICB2YXIgZGVwdGggPSAxOwogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gIn0iKSB7CiAgICAgICAgZGVwdGgtLTsKICAgICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChzdHJlYW0ucGVlaygpID09ICJ7IikgewogICAgICAgIGRlcHRoKys7CiAgICAgIH0KICAgICAgcmV0dXJuIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHJlYWRRdW90ZWQocXVvdGUsIHN0eWxlLCBlbWJlZCwgdW5lc2NhcGVkKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBjaDsKICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgKHVuZXNjYXBlZCB8fCAhZXNjYXBlZCkpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChlbWJlZCAmJiBjaCA9PSAiIyIgJiYgIWVzY2FwZWQgJiYgc3RyZWFtLmVhdCgieyIpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuQmFzZVVudGlsQnJhY2UoYXJndW1lbnRzLmNhbGxlZSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSAiXFwiOwogICAgICB9CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHJlYWRIZXJlRG9jKHBocmFzZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5tYXRjaChwaHJhc2UpKSBzdGF0ZS50b2tlbml6ZS5wb3AoKTsKICAgICAgZWxzZSBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHJlYWRCbG9ja0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0ubWF0Y2goIj1lbmQiKSAmJiBzdHJlYW0uZW9sKCkpCiAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgcmV0dXJuICJjb21tZW50IjsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHt0b2tlbml6ZTogW3Rva2VuQmFzZV0sCiAgICAgICAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgICAgICAgY29udGV4dDoge3R5cGU6ICJ0b3AiLCBpbmRlbnRlZDogLWNvbmZpZy5pbmRlbnRVbml0fSwKICAgICAgICAgICAgICBjb250aW51ZWRMaW5lOiBmYWxzZSwKICAgICAgICAgICAgICBsYXN0VG9rOiBudWxsLAogICAgICAgICAgICAgIHZhckxpc3Q6IGZhbHNlfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdKHN0cmVhbSwgc3RhdGUpLCBrd3R5cGU7CiAgICAgIGlmIChzdHlsZSA9PSAiaWRlbnQiKSB7CiAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgIHN0eWxlID0ga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkgPyAia2V5d29yZCIKICAgICAgICAgIDogL15bQS1aXS8udGVzdCh3b3JkKSA/ICJ0YWciCiAgICAgICAgICA6IChzdGF0ZS5sYXN0VG9rID09ICJkZWYiIHx8IHN0YXRlLmxhc3RUb2sgPT0gImNsYXNzIiB8fCBzdGF0ZS52YXJMaXN0KSA/ICJkZWYiCiAgICAgICAgICA6ICJ2YXJpYWJsZSI7CiAgICAgICAgaWYgKGluZGVudFdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSBrd3R5cGUgPSAiaW5kZW50IjsKICAgICAgICBlbHNlIGlmIChkZWRlbnRXb3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkga3d0eXBlID0gImRlZGVudCI7CiAgICAgICAgZWxzZSBpZiAod29yZCA9PSAiaWYiICYmIHN0cmVhbS5jb2x1bW4oKSA9PSBzdHJlYW0uaW5kZW50YXRpb24oKSkga3d0eXBlID0gImluZGVudCI7CiAgICAgIH0KICAgICAgaWYgKGN1clB1bmMgfHwgKHN0eWxlICYmIHN0eWxlICE9ICJjb21tZW50IikpIHN0YXRlLmxhc3RUb2sgPSB3b3JkIHx8IGN1clB1bmMgfHwgc3R5bGU7CiAgICAgIGlmIChjdXJQdW5jID09ICJ8Iikgc3RhdGUudmFyTGlzdCA9ICFzdGF0ZS52YXJMaXN0OwoKICAgICAgaWYgKGt3dHlwZSA9PSAiaW5kZW50IiB8fCAvW1woXFtce10vLnRlc3QoY3VyUHVuYykpCiAgICAgICAgc3RhdGUuY29udGV4dCA9IHtwcmV2OiBzdGF0ZS5jb250ZXh0LCB0eXBlOiBjdXJQdW5jIHx8IHN0eWxlLCBpbmRlbnRlZDogc3RhdGUuaW5kZW50ZWR9OwogICAgICBlbHNlIGlmICgoa3d0eXBlID09ICJkZWRlbnQiIHx8IC9bXClcXVx9XS8udGVzdChjdXJQdW5jKSkgJiYgc3RhdGUuY29udGV4dC5wcmV2KQogICAgICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CgogICAgICBpZiAoc3RyZWFtLmVvbCgpKQogICAgICAgIHN0YXRlLmNvbnRpbnVlZExpbmUgPSAoY3VyUHVuYyA9PSAiXFwiIHx8IHN0eWxlID09ICJvcGVyYXRvciIpOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdICE9IHRva2VuQmFzZSkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgdmFyIGN0ID0gc3RhdGUuY29udGV4dDsKICAgICAgdmFyIGNsb3NpbmcgPSBjdC50eXBlID09IG1hdGNoaW5nW2ZpcnN0Q2hhcl0gfHwKICAgICAgICBjdC50eXBlID09ICJrZXl3b3JkIiAmJiAvXig/OmVuZHx1bnRpbHxlbHNlfGVsc2lmfHdoZW4pXGIvLnRlc3QodGV4dEFmdGVyKTsKICAgICAgcmV0dXJuIGN0LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogY29uZmlnLmluZGVudFVuaXQpICsKICAgICAgICAoc3RhdGUuY29udGludWVkTGluZSA/IGNvbmZpZy5pbmRlbnRVbml0IDogMCk7CiAgICB9CiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1ydWJ5IiwgInJ1YnkiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJ1c3QgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJ1c3QuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFJ1c3QgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZS4KCnR5cGUgZm9vPFQ+ID0gaW50Owp0YWcgYmFyIHsKICAgIHNvbWUoaW50LCBmb288ZmxvYXQ+KTsKICAgIG5vbmU7Cn0KCmZuIGNoZWNrX2NyYXRlKHg6IGludCkgewogICAgbGV0IHYgPSAxMDsKICAgIGFsdCBmb28gewogICAgICAxIHRvIDMgewogICAgICAgIHByaW50X2ZvbygpOwogICAgICAgIGlmIHggewogICAgICAgICAgICBibGFoKCkgKyAxMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgKHgsIHkpIHsgImJ5ZSIgfQogICAgICBfIHsgImhpIiB9CiAgICB9Cn0KPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgdGFiTW9kZTogImluZGVudCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJ1c3RzcmM8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/rust.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJydXN0IiwgZnVuY3Rpb24oKSB7CiAgdmFyIGluZGVudFVuaXQgPSA0LCBhbHRJbmRlbnRVbml0ID0gMjsKICB2YXIgdmFsS2V5d29yZHMgPSB7CiAgICAiaWYiOiAiaWYtc3R5bGUiLCAid2hpbGUiOiAiaWYtc3R5bGUiLCAiZWxzZSI6ICJlbHNlLXN0eWxlIiwKICAgICJkbyI6ICJlbHNlLXN0eWxlIiwgInJldCI6ICJlbHNlLXN0eWxlIiwgImZhaWwiOiAiZWxzZS1zdHlsZSIsCiAgICAiYnJlYWsiOiAiYXRvbSIsICJjb250IjogImF0b20iLCAiY29uc3QiOiAibGV0IiwgInJlc291cmNlIjogImZuIiwKICAgICJsZXQiOiAibGV0IiwgImZuIjogImZuIiwgImZvciI6ICJmb3IiLCAiYWx0IjogImFsdCIsICJvYmoiOiAiZm4iLAogICAgImxhbWJkYSI6ICJmbiIsICJ0eXBlIjogInR5cGUiLCAidGFnIjogInRhZyIsICJtb2QiOiAibW9kIiwKICAgICJhcyI6ICJvcCIsICJ0cnVlIjogImF0b20iLCAiZmFsc2UiOiAiYXRvbSIsICJhc3NlcnQiOiAib3AiLCAiY2hlY2siOiAib3AiLAogICAgImNsYWltIjogIm9wIiwgIm5hdGl2ZSI6ICJpZ25vcmUiLCAidW5zYWZlIjogImlnbm9yZSIsICJpbXBvcnQiOiAiZWxzZS1zdHlsZSIsCiAgICAiZXhwb3J0IjogImVsc2Utc3R5bGUiLCAiY29weSI6ICJvcCIsICJsb2ciOiAib3AiLCAibG9nX2VyciI6ICJvcCIsCiAgICAidXNlIjogIm9wIiwgImJpbmQiOiAib3AiCiAgfTsKICB2YXIgdHlwZUtleXdvcmRzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZHMgPSB7ImZuIjogImZuIiwgImJsb2NrIjogImZuIiwgIm9iaiI6ICJvYmoifTsKICAgIHZhciBhdG9tcyA9ICJib29sIHVpbnQgaW50IGk4IGkxNiBpMzIgaTY0IHU4IHUxNiB1MzIgdTY0IGZsb2F0IGYzMiBmNjQgc3RyIGNoYXIiLnNwbGl0KCIgIik7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGF0b21zLmxlbmd0aDsgaSA8IGU7ICsraSkga2V5d29yZHNbYXRvbXNbaV1dID0gImF0b20iOwogICAgcmV0dXJuIGtleXdvcmRzOwogIH0oKTsKICB2YXIgb3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xcLkBdLzsKCiAgLy8gVG9rZW5pemVyCgogIC8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZSB0byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dAogIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgogIHZhciB0Y2F0LCBjb250ZW50OwogIGZ1bmN0aW9uIHIodGMsIHN0eWxlKSB7CiAgICB0Y2F0ID0gdGM7CiAgICByZXR1cm4gc3R5bGU7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAnIicpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZzsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgaWYgKGNoID09ICInIikgewogICAgICB0Y2F0ID0gImF0b20iOwogICAgICBpZiAoc3RyZWFtLmVhdCgiXFwiKSkgewogICAgICAgIGlmIChzdHJlYW0uc2tpcFRvKCInIikpIHsgc3RyZWFtLm5leHQoKTsgcmV0dXJuICJzdHJpbmciOyB9CiAgICAgICAgZWxzZSB7IHJldHVybiAiZXJyb3IiOyB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICByZXR1cm4gc3RyZWFtLmVhdCgiJyIpID8gInN0cmluZyIgOiAiZXJyb3IiOwogICAgICB9CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsgc3RyZWFtLnNraXBUb0VuZCgpOyByZXR1cm4gImNvbW1lbnQiOyB9CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudCgxKTsKICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjaCA9PSAiIyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIlsiKSkgeyB0Y2F0ID0gIm9wZW4tYXR0ciI7IHJldHVybiBudWxsOyB9CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKICAgICAgcmV0dXJuIHIoIm1hY3JvIiwgIm1ldGEiKTsKICAgIH0KICAgIGlmIChjaCA9PSAiOiIgJiYgc3RyZWFtLm1hdGNoKCI6PCIpKSB7CiAgICAgIHJldHVybiByKCJvcCIsIG51bGwpOwogICAgfQogICAgaWYgKGNoLm1hdGNoKC9cZC8pIHx8IChjaCA9PSAiLiIgJiYgc3RyZWFtLmVhdCgvXGQvKSkpIHsKICAgICAgdmFyIGZscCA9IGZhbHNlOwogICAgICBpZiAoIXN0cmVhbS5tYXRjaCgvXnhbXGRhLWZdKy9pKSAmJiAhc3RyZWFtLm1hdGNoKC9eYlswMV0rLykpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1xkLyk7CiAgICAgICAgaWYgKHN0cmVhbS5lYXQoIi4iKSkgeyBmbHAgPSB0cnVlOyBzdHJlYW0uZWF0V2hpbGUoL1xkLyk7IH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eZVsrXC1dP1xkKy9pKSkgeyBmbHAgPSB0cnVlOyB9CiAgICAgIH0KICAgICAgaWYgKGZscCkgc3RyZWFtLm1hdGNoKC9eZig/OjMyfDY0KS8pOwogICAgICBlbHNlIHN0cmVhbS5tYXRjaCgvXlt1aV0oPzo4fDE2fDMyfDY0KS8pOwogICAgICByZXR1cm4gcigiYXRvbSIsICJudW1iZXIiKTsKICAgIH0KICAgIGlmIChjaC5tYXRjaCgvWygpXFtcXXt9OjssXS8pKSByZXR1cm4gcihjaCwgbnVsbCk7CiAgICBpZiAoY2ggPT0gIi0iICYmIHN0cmVhbS5lYXQoIj4iKSkgcmV0dXJuIHIoIi0+IiwgbnVsbCk7CiAgICBpZiAoY2gubWF0Y2gob3BlcmF0b3JDaGFyKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUob3BlcmF0b3JDaGFyKTsKICAgICAgcmV0dXJuIHIoIm9wIiwgbnVsbCk7CiAgICB9CiAgICBzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CiAgICBjb250ZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgIGlmIChzdHJlYW0ubWF0Y2goL146Olx3LykpIHsKICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgcmV0dXJuIHIoInByZWZpeCIsICJ2YXJpYWJsZS0yIik7CiAgICB9CiAgICBpZiAoc3RhdGUua2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY29udGVudCkpCiAgICAgIHJldHVybiByKHN0YXRlLmtleXdvcmRzW2NvbnRlbnRdLCBjb250ZW50Lm1hdGNoKC90cnVlfGZhbHNlLykgPyAiYXRvbSIgOiAia2V5d29yZCIpOwogICAgcmV0dXJuIHIoIm5hbWUiLCAidmFyaWFibGUiKTsKICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCwgZXNjYXBlZCA9IGZhbHNlOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gJyInICYmICFlc2NhcGVkKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgcmV0dXJuIHIoImF0b20iLCAic3RyaW5nIik7CiAgICAgIH0KICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICB9CiAgICAvLyBIYWNrIHRvIG5vdCBjb25mdXNlIHRoZSBwYXJzZXIgd2hlbiBhIHN0cmluZyBpcyBzcGxpdCBpbgogICAgLy8gcGllY2VzLgogICAgcmV0dXJuIHIoIm9wIiwgInN0cmluZyIpOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KGRlcHRoKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgbGFzdENoID0gbnVsbCwgY2g7CiAgICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKICAgICAgICBpZiAoY2ggPT0gIi8iICYmIGxhc3RDaCA9PSAiKiIpIHsKICAgICAgICAgIGlmIChkZXB0aCA9PSAxKSB7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50KGRlcHRoIC0gMSk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNoID09ICIqIiAmJiBsYXN0Q2ggPT0gIi8iKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudChkZXB0aCArIDEpOwogICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgICAgICBsYXN0Q2ggPSBjaDsKICAgICAgfQogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfTsKICB9CgogIC8vIFBhcnNlcgoKICB2YXIgY3ggPSB7c3RhdGU6IG51bGwsIHN0cmVhbTogbnVsbCwgbWFya2VkOiBudWxsLCBjYzogbnVsbH07CiAgZnVuY3Rpb24gcGFzcygpIHsKICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTsKICB9CiAgZnVuY3Rpb24gY29udCgpIHsKICAgIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gcHVzaGxleCh0eXBlLCBpbmZvKSB7CiAgICB2YXIgcmVzdWx0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgICBzdGF0ZS5sZXhpY2FsID0ge2luZGVudGVkOiBzdGF0ZS5pbmRlbnRlZCwgY29sdW1uOiBjeC5zdHJlYW0uY29sdW1uKCksCiAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSwgcHJldjogc3RhdGUubGV4aWNhbCwgaW5mbzogaW5mb307CiAgICB9OwogICAgcmVzdWx0LmxleCA9IHRydWU7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiBwb3BsZXgoKSB7CiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKICAgIGlmIChzdGF0ZS5sZXhpY2FsLnByZXYpIHsKICAgICAgaWYgKHN0YXRlLmxleGljYWwudHlwZSA9PSAiKSIpCiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5sZXhpY2FsLmluZGVudGVkOwogICAgICBzdGF0ZS5sZXhpY2FsID0gc3RhdGUubGV4aWNhbC5wcmV2OwogICAgfQogIH0KICBmdW5jdGlvbiB0eXBlY3goKSB7IGN4LnN0YXRlLmtleXdvcmRzID0gdHlwZUtleXdvcmRzOyB9CiAgZnVuY3Rpb24gdmFsY3goKSB7IGN4LnN0YXRlLmtleXdvcmRzID0gdmFsS2V5d29yZHM7IH0KICBwb3BsZXgubGV4ID0gdHlwZWN4LmxleCA9IHZhbGN4LmxleCA9IHRydWU7CgogIGZ1bmN0aW9uIGNvbW1hc2VwKGNvbWIsIGVuZCkgewogICAgZnVuY3Rpb24gbW9yZSh0eXBlKSB7CiAgICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQoY29tYiwgbW9yZSk7CiAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgcmV0dXJuIGNvbnQobW9yZSk7CiAgICB9CiAgICByZXR1cm4gZnVuY3Rpb24odHlwZSkgewogICAgICBpZiAodHlwZSA9PSBlbmQpIHJldHVybiBjb250KCk7CiAgICAgIHJldHVybiBwYXNzKGNvbWIsIG1vcmUpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGJsb2NrKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIGNvbnQoKTsKICAgIGlmICh0eXBlID09ICJsZXQiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0IiwgImxldCIpLCBsZXRkZWYxLCBwb3BsZXgsIGJsb2NrKTsKICAgIGlmICh0eXBlID09ICJmbiIpIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQiKSwgZm5kZWYsIHBvcGxleCwgYmxvY2spOwogICAgaWYgKHR5cGUgPT0gInR5cGUiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0IiksIHR5ZGVmLCBlbmRzdGF0ZW1lbnQsIHBvcGxleCwgYmxvY2spOwogICAgaWYgKHR5cGUgPT0gInRhZyIpIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQiKSwgdGFnZGVmLCBwb3BsZXgsIGJsb2NrKTsKICAgIGlmICh0eXBlID09ICJtb2QiKSByZXR1cm4gY29udChwdXNobGV4KCJzdGF0IiksIG1vZCwgcG9wbGV4LCBibG9jayk7CiAgICBpZiAodHlwZSA9PSAib3Blbi1hdHRyIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBjb21tYXNlcChleHByZXNzaW9uLCAiXSIpLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImlnbm9yZSIgfHwgdHlwZS5tYXRjaCgvW1xdXCk7LF0vKSkgcmV0dXJuIGNvbnQoYmxvY2spOwogICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHByZXNzaW9uLCBwb3BsZXgsIGVuZHN0YXRlbWVudCwgYmxvY2spOwogIH0KICBmdW5jdGlvbiBlbmRzdGF0ZW1lbnQodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAiYXRvbSIgfHwgdHlwZSA9PSAibmFtZSIpIHJldHVybiBjb250KG1heWJlb3ApOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGV4cHJicmFjZSwgcG9wbGV4KTsKICAgIGlmICh0eXBlLm1hdGNoKC9bXFtcKF0vKSkgcmV0dXJuIG1hdGNoQnJhY2tldHModHlwZSwgZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZS5tYXRjaCgvW1xdXClcfTssXS8pKSByZXR1cm4gcGFzcygpOwogICAgaWYgKHR5cGUgPT0gImlmLXN0eWxlIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiZWxzZS1zdHlsZSIgfHwgdHlwZSA9PSAib3AiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChwYXR0ZXJuLCBtYXliZXR5cGUsIGlub3AsIGV4cHJlc3Npb24sIGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gImFsdCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGFsdGJvZHkpOwogICAgaWYgKHR5cGUgPT0gImZuIikgcmV0dXJuIGNvbnQoZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gIm1hY3JvIikgcmV0dXJuIGNvbnQobWFjcm8pOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVvcCh0eXBlKSB7CiAgICBpZiAoY29udGVudCA9PSAiLiIpIHJldHVybiBjb250KG1heWJlcHJvcCk7CiAgICBpZiAoY29udGVudCA9PSAiOjo8Iil7cmV0dXJuIGNvbnQodHlwYXJhbXMsIG1heWJlb3ApO30KICAgIGlmICh0eXBlID09ICJvcCIgfHwgY29udGVudCA9PSAiOiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gIigiIHx8IHR5cGUgPT0gIlsiKSByZXR1cm4gbWF0Y2hCcmFja2V0cyh0eXBlLCBleHByZXNzaW9uKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIG1heWJlcHJvcCh0eXBlKSB7CiAgICBpZiAoY29udGVudC5tYXRjaCgvXlx3KyQvKSkge2N4Lm1hcmtlZCA9ICJ2YXJpYWJsZSI7IHJldHVybiBjb250KG1heWJlb3ApO30KICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBleHByYnJhY2UodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm9wIikgewogICAgICBpZiAoY29udGVudCA9PSAifCIpIHJldHVybiBjb250KGJsb2NrdmFycywgcG9wbGV4LCBwdXNobGV4KCJ9IiwgImJsb2NrIiksIGJsb2NrKTsKICAgICAgaWYgKGNvbnRlbnQgPT0gInx8IikgcmV0dXJuIGNvbnQocG9wbGV4LCBwdXNobGV4KCJ9IiwgImJsb2NrIiksIGJsb2NrKTsKICAgIH0KICAgIGlmIChjb250ZW50ID09ICJtdXRhYmxlIiB8fCAoY29udGVudC5tYXRjaCgvXlx3KyQvKSAmJiBjeC5zdHJlYW0ucGVlaygpID09ICI6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhY3guc3RyZWFtLm1hdGNoKCI6OiIsIGZhbHNlKSkpCiAgICAgIHJldHVybiBwYXNzKHJlY29yZF9vZihleHByZXNzaW9uKSk7CiAgICByZXR1cm4gcGFzcyhibG9jayk7CiAgfQogIGZ1bmN0aW9uIHJlY29yZF9vZihjb21iKSB7CiAgICBmdW5jdGlvbiBybyh0eXBlKSB7CiAgICAgIGlmIChjb250ZW50ID09ICJtdXRhYmxlIiB8fCBjb250ZW50ID09ICJ3aXRoIikge2N4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQocm8pO30KICAgICAgaWYgKGNvbnRlbnQubWF0Y2goL15cdyokLykpIHtjeC5tYXJrZWQgPSAidmFyaWFibGUiOyByZXR1cm4gY29udChybyk7fQogICAgICBpZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250KGNvbWIsIHJvKTsKICAgICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgICByZXR1cm4gY29udChybyk7CiAgICB9CiAgICByZXR1cm4gcm87CiAgfQogIGZ1bmN0aW9uIGJsb2NrdmFycyh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQoYmxvY2t2YXJzKTt9CiAgICBpZiAodHlwZSA9PSAib3AiICYmIGNvbnRlbnQgPT0gInwiKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIGNvbnQoYmxvY2t2YXJzKTsKICB9CgogIGZ1bmN0aW9uIGxldGRlZjEodHlwZSkgewogICAgaWYgKHR5cGUubWF0Y2goL1tcXVwpXH07XS8pKSByZXR1cm4gY29udCgpOwogICAgaWYgKGNvbnRlbnQgPT0gIj0iKSByZXR1cm4gY29udChleHByZXNzaW9uLCBsZXRkZWYyKTsKICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQobGV0ZGVmMSk7CiAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUsIGxldGRlZjEpOwogIH0KICBmdW5jdGlvbiBsZXRkZWYyKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bXF1cKVx9OyxdLykpIHJldHVybiBwYXNzKGxldGRlZjEpOwogICAgZWxzZSByZXR1cm4gcGFzcyhleHByZXNzaW9uLCBsZXRkZWYyKTsKICB9CiAgZnVuY3Rpb24gbWF5YmV0eXBlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gaW5vcCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIgJiYgY29udGVudCA9PSAiaW4iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udCgpO30KICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGZuZGVmKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udChmbmRlZik7fQogICAgaWYgKGNvbnRlbnQgPT0gIjwiKSByZXR1cm4gY29udCh0eXBhcmFtcywgZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gcGFzcyhleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBjb21tYXNlcChhcmdkZWYsICIpIiksIHBvcGxleCwgZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gIi0+IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gsIGZuZGVmKTsKICAgIHJldHVybiBjb250KGZuZGVmKTsKICB9CiAgZnVuY3Rpb24gdHlkZWYodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KHR5ZGVmKTt9CiAgICBpZiAoY29udGVudCA9PSAiPCIpIHJldHVybiBjb250KHR5cGFyYW1zLCB0eWRlZik7CiAgICBpZiAoY29udGVudCA9PSAiPSIpIHJldHVybiBjb250KHR5cGVjeCwgcnR5cGUsIHZhbGN4KTsKICAgIHJldHVybiBjb250KHR5ZGVmKTsKICB9CiAgZnVuY3Rpb24gdGFnZGVmKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udCh0YWdkZWYpO30KICAgIGlmIChjb250ZW50ID09ICI8IikgcmV0dXJuIGNvbnQodHlwYXJhbXMsIHRhZ2RlZik7CiAgICBpZiAoY29udGVudCA9PSAiPSIpIHJldHVybiBjb250KHR5cGVjeCwgcnR5cGUsIHZhbGN4LCBlbmRzdGF0ZW1lbnQpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIHR5cGVjeCwgdGFnYmxvY2ssIHZhbGN4LCBwb3BsZXgpOwogICAgcmV0dXJuIGNvbnQodGFnZGVmKTsKICB9CiAgZnVuY3Rpb24gdGFnYmxvY2sodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGNvbW1hc2VwKHJ0eXBlLCAiKSIpLCBwb3BsZXgsIHRhZ2Jsb2NrKTsKICAgIGlmIChjb250ZW50Lm1hdGNoKC9eXHcrJC8pKSBjeC5tYXJrZWQgPSAiZGVmIjsKICAgIHJldHVybiBjb250KHRhZ2Jsb2NrKTsKICB9CiAgZnVuY3Rpb24gbW9kKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udChtb2QpO30KICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBibG9jaywgcG9wbGV4KTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIHR5cGFyYW1zKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI+IikgcmV0dXJuIGNvbnQoKTsKICAgIGlmIChjb250ZW50ID09ICIsIikgcmV0dXJuIGNvbnQodHlwYXJhbXMpOwogICAgcmV0dXJuIHBhc3MocnR5cGUsIHR5cGFyYW1zKTsKICB9CiAgZnVuY3Rpb24gYXJnZGVmKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udChhcmdkZWYpO30KICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gcnR5cGUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gInZhcmlhYmxlLTMiOyByZXR1cm4gY29udChydHlwZW1heWJlcGFyYW0pOyB9CiAgICBpZiAoY29udGVudCA9PSAibXV0YWJsZSIpIHtjeC5tYXJrZWQgPSAia2V5d29yZCI7IHJldHVybiBjb250KHJ0eXBlKTt9CiAgICBpZiAodHlwZSA9PSAiYXRvbSIpIHJldHVybiBjb250KHJ0eXBlbWF5YmVwYXJhbSk7CiAgICBpZiAodHlwZSA9PSAib3AiIHx8IHR5cGUgPT0gIm9iaiIpIHJldHVybiBjb250KHJ0eXBlKTsKICAgIGlmICh0eXBlID09ICJmbiIpIHJldHVybiBjb250KGZudHlwZSk7CiAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoInsiKSwgcmVjb3JkX29mKHJ0eXBlKSwgcG9wbGV4KTsKICAgIHJldHVybiBtYXRjaEJyYWNrZXRzKHR5cGUsIHJ0eXBlKTsKICB9CiAgZnVuY3Rpb24gcnR5cGVtYXliZXBhcmFtKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI8IikgcmV0dXJuIGNvbnQodHlwYXJhbXMpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gZm50eXBlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKCIpLCBjb21tYXNlcChydHlwZSwgIikiKSwgcG9wbGV4LCBmbnR5cGUpOwogICAgaWYgKHR5cGUgPT0gIi0+IikgcmV0dXJuIGNvbnQocnR5cGUpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gcGF0dGVybih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQocGF0dGVybm1heWJlb3ApO30KICAgIGlmICh0eXBlID09ICJhdG9tIikgcmV0dXJuIGNvbnQocGF0dGVybm1heWJlb3ApOwogICAgaWYgKHR5cGUgPT0gIm9wIikgcmV0dXJuIGNvbnQocGF0dGVybik7CiAgICBpZiAodHlwZS5tYXRjaCgvW1xdXClcfTssXS8pKSByZXR1cm4gcGFzcygpOwogICAgcmV0dXJuIG1hdGNoQnJhY2tldHModHlwZSwgcGF0dGVybik7CiAgfQogIGZ1bmN0aW9uIHBhdHRlcm5tYXliZW9wKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJvcCIgJiYgY29udGVudCA9PSAiLiIpIHJldHVybiBjb250KCk7CiAgICBpZiAoY29udGVudCA9PSAidG8iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChwYXR0ZXJuKTt9CiAgICBlbHNlIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGFsdGJvZHkodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiwgImFsdCIpLCBhbHRibG9jazEsIHBvcGxleCk7CiAgICByZXR1cm4gcGFzcygpOwogIH0KICBmdW5jdGlvbiBhbHRibG9jazEodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gInwiKSByZXR1cm4gY29udChhbHRibG9jazEpOwogICAgaWYgKGNvbnRlbnQgPT0gIndoZW4iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChleHByZXNzaW9uLCBhbHRibG9jazIpO30KICAgIGlmICh0eXBlLm1hdGNoKC9bXF1cKTssXS8pKSByZXR1cm4gY29udChhbHRibG9jazEpOwogICAgcmV0dXJuIHBhc3MocGF0dGVybiwgYWx0YmxvY2syKTsKICB9CiAgZnVuY3Rpb24gYWx0YmxvY2syKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIsICJhbHQiKSwgYmxvY2ssIHBvcGxleCwgYWx0YmxvY2sxKTsKICAgIGVsc2UgcmV0dXJuIHBhc3MoYWx0YmxvY2sxKTsKICB9CgogIGZ1bmN0aW9uIG1hY3JvKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bXFtcKFx7XS8pKSByZXR1cm4gbWF0Y2hCcmFja2V0cyh0eXBlLCBleHByZXNzaW9uKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHModHlwZSwgY29tYikgewogICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIGNvbW1hc2VwKGNvbWIsICJdIiksIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgY29tbWFzZXAoY29tYiwgIikiKSwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBjb21tYXNlcChjb21iLCAifSIpLCBwb3BsZXgpOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlKHN0YXRlLCBzdHJlYW0sIHN0eWxlKSB7CiAgICB2YXIgY2MgPSBzdGF0ZS5jYzsKICAgIC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy4KICAgIC8vIChMZXNzIHdhc3RlZnVsIHRoYW4gY29uc2luZyB1cCBhIGh1bmRyZWQgY2xvc3VyZXMgb24gZXZlcnkgY2FsbC4pCiAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5wb3AoKSA6IGJsb2NrOwogICAgICBpZiAoY29tYmluYXRvcih0Y2F0KSkgewogICAgICAgIHdoaWxlKGNjLmxlbmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpCiAgICAgICAgICBjYy5wb3AoKSgpOwogICAgICAgIHJldHVybiBjeC5tYXJrZWQgfHwgc3R5bGU7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgIGNjOiBbXSwKICAgICAgICBsZXhpY2FsOiB7aW5kZW50ZWQ6IC1pbmRlbnRVbml0LCBjb2x1bW46IDAsIHR5cGU6ICJ0b3AiLCBhbGlnbjogZmFsc2V9LAogICAgICAgIGtleXdvcmRzOiB2YWxLZXl3b3JkcywKICAgICAgICBpbmRlbnRlZDogMAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdGNhdCA9IGNvbnRlbnQgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwogICAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoImFsaWduIikpCiAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IHRydWU7CiAgICAgIGlmICh0Y2F0ID09ICJwcmVmaXgiKSByZXR1cm4gc3R5bGU7CiAgICAgIGlmICghY29udGVudCkgY29udGVudCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIHJldHVybiBwYXJzZShzdGF0ZSwgc3RyZWFtLCBzdHlsZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDsKICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBsZXhpY2FsID0gc3RhdGUubGV4aWNhbCwKICAgICAgICAgIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTsKICAgICAgaWYgKHR5cGUgPT0gInN0YXQiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIGluZGVudFVuaXQ7CiAgICAgIGlmIChsZXhpY2FsLmFsaWduKSByZXR1cm4gbGV4aWNhbC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiAobGV4aWNhbC5pbmZvID09ICJhbHQiID8gYWx0SW5kZW50VW5pdCA6IGluZGVudFVuaXQpKTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnVzdHNyYyIsICJydXN0Iik7Cg==]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNjaGVtZSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic2NoZW1lLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogU2NoZW1lIG1vZGU8L2gxPgogICAgPGZvcm0+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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNtYWxsdGFsayBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic21hbGx0YWxrLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlcjogMnB4IHNvbGlkICNkZWU7IGJvcmRlci1yaWdodC13aWR0aDogMTBweDt9CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciB7Ym9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiAjZGVlO30KICAgICAgLkNvZGVNaXJyb3ItZ3V0dGVyIHByZSB7Y29sb3I6IHdoaXRlOyBmb250LXdlaWdodDogYm9sZDt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBTbWFsbHRhbGsgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgoiIAogICAgVGhpcyBpcyBhIHRlc3Qgb2YgdGhlIFNtYWxsdGFsayBjb2RlCiIKU2Vhc2lkZS5XQUNvbXBvbmVudCBzdWJjbGFzczogI015Q291bnRlciBbCiAgICB8IGNvdW50IHwKICAgIE15Q291bnRlciBjbGFzcyAmZ3Q7Jmd0OyBjYW5CZVJvb3QgWyBedHJ1ZSBdCgogICAgaW5pdGlhbGl6ZSBbCiAgICAgICAgc3VwZXIgaW5pdGlhbGl6ZS4KICAgICAgICBjb3VudCA6PSAwLgogICAgXQogICAgc3RhdGVzIFsgXnsgc2VsZiB9IF0KICAgIHJlbmRlckNvbnRlbnRPbjogaHRtbCBbCiAgICAgICAgaHRtbCBoZWFkaW5nOiBjb3VudC4KICAgICAgICBodG1sIGFuY2hvciBjYWxsYmFjazogWyBjb3VudCA6PSBjb3VudCArIDEgXTsgd2l0aDogJysrJy4KICAgICAgICBodG1sIHNwYWNlLgogICAgICAgIGh0bWwgYW5jaG9yIGNhbGxiYWNrOiBbIGNvdW50IDo9IGNvdW50IC0gMSBdOyB3aXRoOiAnLS0nLgogICAgXQpdCgpNeUNvdW50ZXIgcmVnaXN0ZXJBc0FwcGxpY2F0aW9uOiAnbXljb3VudGVyJwo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1zdHNyYyIsCiAgICAgICAgaW5kZW50VW5pdDogNAogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlNpbXBsZSBTbWFsbHRhbGsgbW9kZS48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1zdHNyYzwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/smalltalk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCdzbWFsbHRhbGsnLCBmdW5jdGlvbihjb25maWcsIG1vZGVDb25maWcpIHsKCgl2YXIgc3BlY2lhbENoYXJzID0gL1srXC0vXFwqfjw+PUAlfCY/IS46O15dLzsKCXZhciBrZXl3b3JkcyA9IC90cnVlfGZhbHNlfG5pbHxzZWxmfHN1cGVyfHRoaXNDb250ZXh0LzsKCgl2YXIgQ29udGV4dCA9IGZ1bmN0aW9uKHRva2VuaXplciwgcGFyZW50KSB7CgkJdGhpcy5uZXh0ID0gdG9rZW5pemVyOwoJCXRoaXMucGFyZW50ID0gcGFyZW50OwoJfTsKCgl2YXIgVG9rZW4gPSBmdW5jdGlvbihuYW1lLCBjb250ZXh0LCBlb3MpIHsKCQl0aGlzLm5hbWUgPSBuYW1lOwoJCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7CgkJdGhpcy5lb3MgPSBlb3M7Cgl9OwoKCXZhciBTdGF0ZSA9IGZ1bmN0aW9uKCkgewoJCXRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KG5leHQsIG51bGwpOwoJCXRoaXMuZXhwZWN0VmFyaWFibGUgPSB0cnVlOwoJCXRoaXMuaW5kZW50YXRpb24gPSAwOwoJCXRoaXMudXNlckluZGVudGF0aW9uRGVsdGEgPSAwOwoJfTsKCglTdGF0ZS5wcm90b3R5cGUudXNlckluZGVudCA9IGZ1bmN0aW9uKGluZGVudGF0aW9uKSB7CgkJdGhpcy51c2VySW5kZW50YXRpb25EZWx0YSA9IGluZGVudGF0aW9uID4gMCA/IChpbmRlbnRhdGlvbiAvIGNvbmZpZy5pbmRlbnRVbml0IC0gdGhpcy5pbmRlbnRhdGlvbikgOiAwOwoJfTsKCgl2YXIgbmV4dCA9IGZ1bmN0aW9uKHN0cmVhbSwgY29udGV4dCwgc3RhdGUpIHsKCQl2YXIgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgY29udGV4dCwgZmFsc2UpOwoJCXZhciBjaGFyID0gc3RyZWFtLm5leHQoKTsKCgkJaWYgKGNoYXIgPT09ICciJykgewoJCQl0b2tlbiA9IG5leHRDb21tZW50KHN0cmVhbSwgbmV3IENvbnRleHQobmV4dENvbW1lbnQsIGNvbnRleHQpKTsKCgkJfSBlbHNlIGlmIChjaGFyID09PSAnXCcnKSB7CgkJCXRva2VuID0gbmV4dFN0cmluZyhzdHJlYW0sIG5ldyBDb250ZXh0KG5leHRTdHJpbmcsIGNvbnRleHQpKTsKCgkJfSBlbHNlIGlmIChjaGFyID09PSAnIycpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXiAuXS8pOwoJCQl0b2tlbi5uYW1lID0gJ3N0cmluZy0yJzsKCgkJfSBlbHNlIGlmIChjaGFyID09PSAnJCcpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXiBdLyk7CgkJCXRva2VuLm5hbWUgPSAnc3RyaW5nLTInOwoKCQl9IGVsc2UgaWYgKGNoYXIgPT09ICd8JyAmJiBzdGF0ZS5leHBlY3RWYXJpYWJsZSkgewoJCQl0b2tlbi5jb250ZXh0ID0gbmV3IENvbnRleHQobmV4dFRlbXBvcmFyaWVzLCBjb250ZXh0KTsKCgkJfSBlbHNlIGlmICgvW1xbXF17fSgpXS8udGVzdChjaGFyKSkgewoJCQl0b2tlbi5uYW1lID0gJ2JyYWNrZXQnOwoJCQl0b2tlbi5lb3MgPSAvW1xbeyhdLy50ZXN0KGNoYXIpOwoKCQkJaWYgKGNoYXIgPT09ICdbJykgewoJCQkJc3RhdGUuaW5kZW50YXRpb24rKzsKCQkJfSBlbHNlIGlmIChjaGFyID09PSAnXScpIHsKCQkJCXN0YXRlLmluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgc3RhdGUuaW5kZW50YXRpb24gLSAxKTsKCQkJfQoKCQl9IGVsc2UgaWYgKHNwZWNpYWxDaGFycy50ZXN0KGNoYXIpKSB7CgkJCXN0cmVhbS5lYXRXaGlsZShzcGVjaWFsQ2hhcnMpOwoJCQl0b2tlbi5uYW1lID0gJ29wZXJhdG9yJzsKCQkJdG9rZW4uZW9zID0gY2hhciAhPT0gJzsnOyAvLyA7IGNhc2NhZGVkIG1lc3NhZ2UgZXhwcmVzc2lvbgoKCQl9IGVsc2UgaWYgKC9cZC8udGVzdChjaGFyKSkgewoJCQlzdHJlYW0uZWF0V2hpbGUoL1tcd1xkXS8pOwoJCQl0b2tlbi5uYW1lID0gJ251bWJlcicKCgkJfSBlbHNlIGlmICgvW1x3X10vLnRlc3QoY2hhcikpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF9dLyk7CgkJCXRva2VuLm5hbWUgPSBzdGF0ZS5leHBlY3RWYXJpYWJsZSA/IChrZXl3b3Jkcy50ZXN0KHN0cmVhbS5jdXJyZW50KCkpID8gJ2tleXdvcmQnIDogJ3ZhcmlhYmxlJykgOiBudWxsOwoKCQl9IGVsc2UgewoJCQl0b2tlbi5lb3MgPSBzdGF0ZS5leHBlY3RWYXJpYWJsZTsKCQl9CgoJCXJldHVybiB0b2tlbjsKCX07CgoJdmFyIG5leHRDb21tZW50ID0gZnVuY3Rpb24oc3RyZWFtLCBjb250ZXh0KSB7CgkJc3RyZWFtLmVhdFdoaWxlKC9bXiJdLyk7CgkJcmV0dXJuIG5ldyBUb2tlbignY29tbWVudCcsIHN0cmVhbS5lYXQoJyInKSA/IGNvbnRleHQucGFyZW50IDogY29udGV4dCwgdHJ1ZSk7Cgl9OwoKCXZhciBuZXh0U3RyaW5nID0gZnVuY3Rpb24oc3RyZWFtLCBjb250ZXh0KSB7CgkJc3RyZWFtLmVhdFdoaWxlKC9bXiddLyk7CgkJcmV0dXJuIG5ldyBUb2tlbignc3RyaW5nJywgc3RyZWFtLmVhdCgnXCcnKSA/IGNvbnRleHQucGFyZW50IDogY29udGV4dCwgZmFsc2UpOwoJfTsKCgl2YXIgbmV4dFRlbXBvcmFyaWVzID0gZnVuY3Rpb24oc3RyZWFtLCBjb250ZXh0LCBzdGF0ZSkgewoJCXZhciB0b2tlbiA9IG5ldyBUb2tlbihudWxsLCBjb250ZXh0LCBmYWxzZSk7CgkJdmFyIGNoYXIgPSBzdHJlYW0ubmV4dCgpOwoKCQlpZiAoY2hhciA9PT0gJ3wnKSB7CgkJCXRva2VuLmNvbnRleHQgPSBjb250ZXh0LnBhcmVudDsKCQkJdG9rZW4uZW9zID0gdHJ1ZTsKCgkJfSBlbHNlIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXnxdLyk7CgkJCXRva2VuLm5hbWUgPSAndmFyaWFibGUnOwoJCX0KCgkJcmV0dXJuIHRva2VuOwoJfQoKCXJldHVybiB7CgkJc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CgkJCXJldHVybiBuZXcgU3RhdGU7CgkJfSwKCgkJdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKCQkJc3RhdGUudXNlckluZGVudChzdHJlYW0uaW5kZW50YXRpb24oKSk7CgoJCQlpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKCQkJCXJldHVybiBudWxsOwoJCQl9CgoJCQl2YXIgdG9rZW4gPSBzdGF0ZS5jb250ZXh0Lm5leHQoc3RyZWFtLCBzdGF0ZS5jb250ZXh0LCBzdGF0ZSk7CgkJCXN0YXRlLmNvbnRleHQgPSB0b2tlbi5jb250ZXh0OwoJCQlzdGF0ZS5leHBlY3RWYXJpYWJsZSA9IHRva2VuLmVvczsKCgkJCXN0YXRlLmxhc3RUb2tlbiA9IHRva2VuOwoJCQlyZXR1cm4gdG9rZW4ubmFtZTsKCQl9LAoKCQlibGFua0xpbmU6IGZ1bmN0aW9uKHN0YXRlKSB7CgkJCXN0YXRlLnVzZXJJbmRlbnQoMCk7CgkJfSwKCgkJaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CgkJCXZhciBpID0gc3RhdGUuY29udGV4dC5uZXh0ID09PSBuZXh0ICYmIHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApID09PSAnXScgPyAtMSA6IHN0YXRlLnVzZXJJbmRlbnRhdGlvbkRlbHRhOwoJCQlyZXR1cm4gKHN0YXRlLmluZGVudGF0aW9uICsgaSkgKiBjb25maWcuaW5kZW50VW5pdDsKCQl9LAoKCQllbGVjdHJpY0NoYXJzOiAnXScKCX07Cgp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LXN0c3JjJywge25hbWU6ICdzbWFsbHRhbGsnfSk7]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNQQVJRTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic3BhcnFsLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFNQQVJRTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHNUZVggbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InN0ZXguanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4O308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBzVGVYIG1vZGU8L2gxPgogICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+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/tiddlywiki/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRpZGRseVdpa2kgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InRpZGRseXdpa2kuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0aWRkbHl3aWtpLmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVGlkZGx5V2lraSBtb2RlPC9oMT4KCjxkaXY+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIVRpZGRseVdpa2kgRm9ybWF0dGluZwoqIFJlbmRlcmVkIHZlcnNpb25zIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy50aWRkbHl3aWtpLmNvbS8jUmVmZXJlbmNlCgp8IU9wdGlvbnwhU3ludGF4fCFPdXRwdXR8Cnxib2xkIGZvbnR8e3t7Jydib2xkJyd9fX18Jydib2xkJyd8CnxpdGFsaWMgdHlwZXx7e3svL2l0YWxpYy8vfX19fC8vaXRhbGljLy98Cnx1bmRlcmxpbmVkIHRleHR8e3t7X191bmRlcmxpbmVkX199fX18X191bmRlcmxpbmVkX198CnxzdHJpa2V0aHJvdWdoIHRleHR8e3t7LS1zdHJpa2V0aHJvdWdoLS19fX18LS1zdHJpa2V0aHJvdWdoLS18CnxzdXBlcnNjcmlwdCB0ZXh0fHt7e15ec3VwZXJeXnNjcmlwdH19fXxeXnN1cGVyXl5zY3JpcHR8CnxzdWJzY3JpcHQgdGV4dHx7e3t+fnN1Yn5+c2NyaXB0fX19fH5+c3Vifn5zY3JpcHR8CnxoaWdobGlnaHRlZCB0ZXh0fHt7e0BAaGlnaGxpZ2h0ZWRAQH19fXxAQGhpZ2hsaWdodGVkQEB8CnxwcmVmb3JtYXR0ZWQgdGV4dHw8aHRtbD48Y29kZT57e3twcmVmb3JtYXR0ZWR9fX08L2NvZGU+PC9odG1sPnx7e3twcmVmb3JtYXR0ZWR9fX18CgohQmxvY2sgRWxlbWVudHMKISFIZWFkaW5ncwp7e3sKIUhlYWRpbmcgMQohIUhlYWRpbmcgMgohISFIZWFkaW5nIDMKISEhIUhlYWRpbmcgNAohISEhIUhlYWRpbmcgNQp9fX0KPDw8CgohSGVhZGluZyAxCgohIUhlYWRpbmcgMgoKISEhSGVhZGluZyAzCgohISEhSGVhZGluZyA0CgohISEhIUhlYWRpbmcgNQo8PDwKCiEhTGlzdHMKe3t7CiogdW5vcmRlcmVkIGxpc3QsIGxldmVsIDEKKiogdW5vcmRlcmVkIGxpc3QsIGxldmVsIDIKKioqIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAzCgojIG9yZGVyZWQgbGlzdCwgbGV2ZWwgMQojIyBvcmRlcmVkIGxpc3QsIGxldmVsIDIKIyMjIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAzCgo7IGRlZmluaXRpb24gbGlzdCwgdGVybQo6IGRlZmluaXRpb24gbGlzdCwgZGVzY3JpcHRpb24KfX19Cjw8PAoqIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAxCioqIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAyCioqKiB1bm9yZGVyZWQgbGlzdCwgbGV2ZWwgMwoKIyBvcmRlcmVkIGxpc3QsIGxldmVsIDEKIyMgb3JkZXJlZCBsaXN0LCBsZXZlbCAyCiMjIyB1bm9yZGVyZWQgbGlzdCwgbGV2ZWwgMwoKOyBkZWZpbml0aW9uIGxpc3QsIHRlcm0KOiBkZWZpbml0aW9uIGxpc3QsIGRlc2NyaXB0aW9uCjw8PAoKISFCbG9ja3F1b3Rlcwp7e3sKPiBibG9ja3F1b3RlLCBsZXZlbCAxCj4+IGJsb2NrcXVvdGUsIGxldmVsIDIKPj4+IGJsb2NrcXVvdGUsIGxldmVsIDMKCjw8PApibG9ja3F1b3RlCjw8PAp9fX0KPDw8Cj4gYmxvY2txdW90ZSwgbGV2ZWwgMQo+PiBibG9ja3F1b3RlLCBsZXZlbCAyCj4+PiBibG9ja3F1b3RlLCBsZXZlbCAzCgo+IGJsb2NrcXVvdGUKPDw8CgohIVByZWZvcm1hdHRlZCBUZXh0CjxodG1sPjxwcmU+Cnt7ewpwcmVmb3JtYXR0ZWQgKGUuZy4gY29kZSkKfX19CjwvcHJlPjwvaHRtbD4KPDw8Cnt7ewpwcmVmb3JtYXR0ZWQgKGUuZy4gY29kZSkKfX19Cjw8PAoKISFDb2RlIFNlY3Rpb25zCnt7ewpUZXh0IHN0eWxlIGNvZGUKfX19CgovL3t7ewpKUyBzdHlsZWQgY29kZS4gVGlkZGx5V2lraSBtaXhlZCBtb2RlIHNob3VsZCBzdXBwb3J0IGhpZ2hsaWdodGVyIHN3aXRjaGluZyBpbiB0aGUgZnV0dXJlLgovL319fQoKPCEtLXt7ey0tPgpYTUwgc3R5bGVkIGNvZGUuIFRpZGRseVdpa2kgbWl4ZWQgbW9kZSBzaG91bGQgc3VwcG9ydCBoaWdobGlnaHRlciBzd2l0Y2hpbmcgaW4gdGhlIGZ1dHVyZS4KPCEtLX19fS0tPgoKISFUYWJsZXMKe3t7CnxDc3NDbGFzc3xrCnwhaGVhZGluZyBjb2x1bW4gMXwhaGVhZGluZyBjb2x1bW4gMnwKfHJvdyAxLCBjb2x1bW4gMXxyb3cgMSwgY29sdW1uIDJ8Cnxyb3cgMiwgY29sdW1uIDF8cm93IDIsIGNvbHVtbiAyfAp8PnxDT0xTUEFOfAp8Uk9XU1BBTnwgLi4uIHwKfH58IC4uLiB8CnxDc3NQcm9wZXJ0eTp2YWx1ZTsuLi58IC4uLiB8CnxjYXB0aW9ufGMKfX19CicnQW5ub3RhdGlvbjonJwoqIFRoZSB7e3s+fX19IG1hcmtlciBjcmVhdGVzIGEgImNvbHNwYW4iLCBjYXVzaW5nIHRoZSBjdXJyZW50IGNlbGwgdG8gbWVyZ2Ugd2l0aCB0aGUgb25lIHRvIHRoZSByaWdodC4KKiBUaGUge3t7fn19fSBtYXJrZXIgY3JlYXRlcyBhICJyb3dzcGFuIiwgY2F1c2luZyB0aGUgY3VycmVudCBjZWxsIHRvIG1lcmdlIHdpdGggdGhlIG9uZSBhYm92ZS4KPDw8CnxDc3NDbGFzc3xrCnwhaGVhZGluZyBjb2x1bW4gMXwhaGVhZGluZyBjb2x1bW4gMnwKfHJvdyAxLCBjb2x1bW4gMXxyb3cgMSwgY29sdW1uIDJ8Cnxyb3cgMiwgY29sdW1uIDF8cm93IDIsIGNvbHVtbiAyfAp8PnxDT0xTUEFOfAp8Uk9XU1BBTnwgLi4uIHwKfH58IC4uLiB8CnxDc3NQcm9wZXJ0eTp2YWx1ZTsuLi58IC4uLiB8CnxjYXB0aW9ufGMKPDw8CiEhSW1hZ2VzIC8lIFRPRE8gJS8KY2YuIFtbVGlkZGx5V2lraS5jb218aHR0cDovL3d3dy50aWRkbHl3aWtpLmNvbS8jRW1iZWRkZWRJbWFnZXNdXQoKIUh5cGVybGlua3MKKiBbW1dpa2lXb3Jkc3xXaWtpV29yZF1dIGFyZSBhdXRvbWF0aWNhbGx5IHRyYW5zZm9ybWVkIHRvIGh5cGVybGlua3MgdG8gdGhlIHJlc3BlY3RpdmUgdGlkZGxlcgoqKiB0aGUgYXV0b21hdGljIHRyYW5zZm9ybWF0aW9uIGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHByZWNlZGluZyB0aGUgcmVzcGVjdGl2ZSBXaWtpV29yZCB3aXRoIGEgdGlsZGUgKHt7e359fX0pOiB7e3t+V2lraVdvcmR9fX0KKiBbW1ByZXR0eUxpbmtzXV0gYXJlIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cyBhbmQgY29udGFpbiB0aGUgZGVzaXJlZCB0aWRkbGVyIG5hbWU6IHt7e1tbdGlkZGxlciBuYW1lXV19fX0KKiogb3B0aW9uYWxseSwgYSBjdXN0b20gdGl0bGUgb3IgZGVzY3JpcHRpb24gY2FuIGJlIGFkZGVkLCBzZXBhcmF0ZWQgYnkgYSBwaXBlIGNoYXJhY3RlciAoe3t7fH19fSk6IHt7e1tbdGl0bGV8dGFyZ2V0XV19fX08YnI+JycnTi5CLjonJycgSW4gdGhpcyBjYXNlLCB0aGUgdGFyZ2V0IGNhbiBhbHNvIGJlIGFueSB3ZWJzaXRlIChpLmUuIFVSTCkuCgohQ3VzdG9tIFN0eWxpbmcKKiB7e3tAQENzc1Byb3BlcnR5OnZhbHVlO0Nzc1Byb3BlcnR5OnZhbHVlOy4uLkBAfX19PGJyPicnTi5CLjonJyBDU1MgY29sb3IgZGVmaW5pdGlvbnMgc2hvdWxkIHVzZSBsb3dlcmNhc2UgbGV0dGVycyB0byBwcmV2ZW50IHRoZSBpbmFkdmVydGVudCBjcmVhdGlvbiBvZiBXaWtpV29yZHMuCiogPGh0bWw+PGNvZGU+e3tjdXN0b21Dc3NDbGFzc3suLi59fX08L2NvZGU+PC9odG1sPgoqIHJhdyBIVE1MIGNhbiBiZSBpbnNlcnRlZCBieSBlbmNsb3NpbmcgdGhlIHJlc3BlY3RpdmUgY29kZSBpbiBIVE1MIHRhZ3M6IHt7ezxodG1sPiAuLi4gPC9odG1sPn19fQoKIVNwZWNpYWwgTWFya2VycwoqIHt7ezxicj59fX0gZm9yY2VzIGEgbWFudWFsIGxpbmUgYnJlYWsKKiB7e3stLS0tfX19IGNyZWF0ZXMgYSBob3Jpem9udGFsIHJ1bGVyCiogW1tIVE1MIGVudGl0aWVzfGh0dHA6Ly93d3cudGlkZGx5d2lraS5jb20vI0h0bWxFbnRpdGllc11dCiogW1tIVE1MIGVudGl0aWVzIGxvY2FsfEh0bWxFbnRpdGllc11dCioge3t7PDxtYWNyb05hbWU+Pn19fSBjYWxscyB0aGUgcmVzcGVjdGl2ZSBbW21hY3JvfE1hY3Jvc11dCiogVG8gaGlkZSB0ZXh0IHdpdGhpbiBhIHRpZGRsZXIgc28gdGhhdCBpdCBpcyBub3QgZGlzcGxheWVkLCBpdCBjYW4gYmUgd3JhcHBlZCBpbiB7e3svJX19fSBhbmQge3t7JS99fX0uPGJyLz5UaGlzIGNhbiBiZSBhIHVzZWZ1bCB0cmljayBmb3IgaGlkaW5nIGRyYWZ0cyBvciBhbm5vdGF0aW5nIGNvbXBsZXggbWFya3VwLgoqIFRvIHByZXZlbnQgd2lraSBtYXJrdXAgZnJvbSB0YWtpbmcgZWZmZWN0IGZvciBhIHBhcnRpY3VsYXIgc2VjdGlvbiwgdGhhdCBzZWN0aW9uIGNhbiBiZSBlbmNsb3NlZCBpbiB0aHJlZSBkb3VibGUgcXVvdGVzOiBlLmcuIHt7eyIiIldpa2lXb3JkIiIifX19Lgo8L3RleHRhcmVhPjwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogJ3RpZGRseXdpa2knLCAgICAgIAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGVudGVyTW9kZTogJ2tlZXAnLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5UaWRkbHlXaWtpIG1vZGUgc3VwcG9ydHMgYSBzaW5nbGUgY29uZmlndXJhdGlvbi48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC10aWRkbHl3aWtpPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/tiddlywiki.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLWhlYWRlciB7Y29sb3I6IGJsdWU7IGZvbnQtd2VpZ2h0OmJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tY29kZSB7Y29sb3I6ICNhNTA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tY29kZS1pbmxpbmUge2NvbG9yOiAjNjYwO30KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1xdW90ZSB7Y29sb3I6ICM1NTU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbGlzdCB7Y29sb3I6ICNjNjA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20taHIge2NvbG9yOiAjOTk5O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tc3Ryb25nIHtmb250LXdlaWdodDogYm9sZDt9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tbGluay1leHRlcm5hbCB7Y29sb3I6IGJsdWU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tYnJhY2Uge2NvbG9yOiAjMTcwOyBmb250LXdlaWdodDogYm9sZDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1tYWNybyB7Y29sb3I6ICM5RTM4MjU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tdGFibGUge2NvbG9yOiBibHVlO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXdhcm5pbmcge2NvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiBib2xkO30KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS11bmRlcmxpbmVkIHt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1saW5lLXRocm91Z2gge3RleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO30KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogIzY2Njt9Cgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/tiddlywiki.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqKgogfCcnTmFtZScnfHRpZGRseXdpa2kuanN8CiB8JydEZXNjcmlwdGlvbicnfEVuYWJsZXMgVGlkZGx5V2lraXkgc3ludGF4IGhpZ2hsaWdodGluZyB1c2luZyBDb2RlTWlycm9yMnwKIHwnJ0F1dGhvcicnfFBNYXJpb3wKIHwnJ1ZlcnNpb24nJ3wwLjEuNnwKIHwnJ1N0YXR1cycnfCcnYmV0YScnfAogfCcnU291cmNlJyd8W1tHaXRIdWJ8aHR0cHM6Ly9naXRodWIuY29tL3BtYXJpby9Db2RlTWlycm9yMi9ibG9iL3R3LXN5bnRheC9tb2RlL3RpZGRseXdpa2ldXXwKIHwnJ0RvY3VtZW50YXRpb24nJ3xodHRwOi8vY29kZW1pcnJvci50aWRkbHlzcGFjZS5jb20vfAogfCcnTGljZW5zZScnfFtbTUlUIExpY2Vuc2V8aHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBdXXwKIHwnJ0NvcmVWZXJzaW9uJyd8Mi41LjB8CiB8JydSZXF1aXJlcycnfGNvZGVtaXJyb3IuanN8CiB8JydLZXl3b3JkcycnfHN5bnRheCBoaWdobGlnaHRpbmcgY29sb3IgY29kZSBtaXJyb3IgY29kZW1pcnJvcnwKICEgSW5mbwogQ29yZVZlcnNpb24gcGFyYW1ldGVyIGlzIG5lZWRlZCBmb3IgVGlkZGx5V2lraSBvbmx5IQogKioqLwovL3t7ewpDb2RlTWlycm9yLmRlZmluZU1vZGUoInRpZGRseXdpa2kiLCBmdW5jdGlvbiAoY29uZmlnLCBwYXJzZXJDb25maWcpIHsKCXZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CgoJLy8gVG9rZW5pemVyCgl2YXIgdGV4dHdvcmRzID0gZnVuY3Rpb24gKCkgewoJCWZ1bmN0aW9uIGt3KHR5cGUpIHsKCQkJcmV0dXJuIHsKCQkJCXR5cGU6IHR5cGUsCgkJCQlzdHlsZTogInRleHQiCgkJCX07CgkJfQoJCXJldHVybiB7fTsKCX0oKTsKCgl2YXIga2V5d29yZHMgPSBmdW5jdGlvbiAoKSB7CgkJZnVuY3Rpb24ga3codHlwZSkgewoJCQlyZXR1cm4geyB0eXBlOiB0eXBlLCBzdHlsZTogIm1hY3JvIn07CgkJfQoJCXJldHVybiB7CgkJCSJhbGxUYWdzIjoga3coJ2FsbFRhZ3MnKSwgImNsb3NlQWxsIjoga3coJ2Nsb3NlQWxsJyksICJsaXN0Ijoga3coJ2xpc3QnKSwKCQkJIm5ld0pvdXJuYWwiOiBrdygnbmV3Sm91cm5hbCcpLCAibmV3VGlkZGxlciI6IGt3KCduZXdUaWRkbGVyJyksCgkJCSJwZXJtYXZpZXciOiBrdygncGVybWF2aWV3JyksICJzYXZlQ2hhbmdlcyI6IGt3KCdzYXZlQ2hhbmdlcycpLAoJCQkic2VhcmNoIjoga3coJ3NlYXJjaCcpLCAic2xpZGVyIjoga3coJ3NsaWRlcicpLAkidGFicyI6IGt3KCd0YWJzJyksCgkJCSJ0YWciOiBrdygndGFnJyksICJ0YWdnaW5nIjoga3coJ3RhZ2dpbmcnKSwJInRhZ3MiOiBrdygndGFncycpLAoJCQkidGlkZGxlciI6IGt3KCd0aWRkbGVyJyksICJ0aW1lbGluZSI6IGt3KCd0aW1lbGluZScpLAoJCQkidG9kYXkiOiBrdygndG9kYXknKSwgInZlcnNpb24iOiBrdygndmVyc2lvbicpLAkib3B0aW9uIjoga3coJ29wdGlvbicpLAoKCQkJIndpdGgiOiBrdygnd2l0aCcpLAoJCQkiZmlsdGVyIjoga3coJ2ZpbHRlcicpCgkJfTsKCX0oKTsKCgl2YXIgaXNTcGFjZU5hbWUgPSAvW1x3X1wtXS9pLAoJCXJlSFIgPSAvXlwtXC1cLVwtKyQvLAoJCXJlV2lraUNvbW1lbnRTdGFydCA9IC9eXC9cKlwqXCokLywJCS8vIC8qKioKCQlyZVdpa2lDb21tZW50U3RvcCA9IC9eXCpcKlwqXC8kLywJCS8vICoqKi8KCQlyZUJsb2NrUXVvdGUgPSAvXjw8PCQvLAoKCQlyZUpzQ29kZVN0YXJ0ID0gL15cL1wvXHtce1x7JC8sCQkJLy8gLy97e3sKCQlyZUpzQ29kZVN0b3AgPSAvXlwvXC9cfVx9XH0kLywJCQkvLyAvL319fQoJCXJlWG1sQ29kZVN0YXJ0ID0gL148IS0tXHtce1x7LS0+JC8sCgkJcmVYbWxDb2RlU3RvcCA9IC9ePCEtLVx9XH1cfS0tPiQvLAoKCQlyZUNvZGVCbG9ja1N0YXJ0ID0gL15ce1x7XHskLywKCQlyZUNvZGVCbG9ja1N0b3AgPSAvXlx9XH1cfSQvLAoKCQlyZUNvZGVTdGFydCA9IC9ce1x7XHsvLAoJCXJlVW50aWxDb2RlU3RvcCA9IC8uKj9cfVx9XH0vOwoKCWZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHsKCQlzdGF0ZS50b2tlbml6ZSA9IGY7CgkJcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7Cgl9CgoJLy8gdXNlZCBmb3Igc3RyaW5ncwoJZnVuY3Rpb24gbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgZW5kKSB7CgkJdmFyIGVzY2FwZWQgPSBmYWxzZSwKCQkJbmV4dDsKCQl3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CgkJCWlmIChuZXh0ID09IGVuZCAmJiAhZXNjYXBlZCkgcmV0dXJuIGZhbHNlOwoJCQllc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwoJCX0KCQlyZXR1cm4gZXNjYXBlZDsKCX0KCgkvLyBVc2VkIGFzIHNjcmF0Y2ggdmFyaWFibGVzIHRvIGNvbW11bmljYXRlIG11bHRpcGxlIHZhbHVlcyB3aXRob3V0CgkvLyBjb25zaW5nIHVwIHRvbnMgb2Ygb2JqZWN0cy4KCXZhciB0eXBlLCBjb250ZW50OwoKCWZ1bmN0aW9uIHJldCh0cCwgc3R5bGUsIGNvbnQpIHsKCQl0eXBlID0gdHA7CgkJY29udGVudCA9IGNvbnQ7CgkJcmV0dXJuIHN0eWxlOwoJfQoKCWZ1bmN0aW9uIGpzVG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgc29sID0gc3RyZWFtLnNvbCgpLCAKCQkJY2gsIHRjaDsKCQkJCgkJc3RhdGUuYmxvY2sgPSBmYWxzZTsJLy8gaW5kaWNhdGVzIHRoZSBzdGFydCBvZiBhIGNvZGUgYmxvY2suCgoJCWNoID0gc3RyZWFtLnBlZWsoKTsgLy8gZG9uJ3QgZWF0LCB0byBtYWtlIG1hdGNoIHNpbXBsZXIKCQkKCQkvLyBjaGVjayBzdGFydCBvZiAgYmxvY2tzICAgIAoJCWlmIChzb2wgJiYgL1s8XC9cKnt9XC1dLy50ZXN0KGNoKSkgewoJCQlpZiAoc3RyZWFtLm1hdGNoKHJlQ29kZUJsb2NrU3RhcnQpKSB7CgkJCQlzdGF0ZS5ibG9jayA9IHRydWU7CgkJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkNvZGUpOwoJCQl9CgkJCWlmIChzdHJlYW0ubWF0Y2gocmVCbG9ja1F1b3RlKSkgewoJCQkJcmV0dXJuIHJldCgncXVvdGUnLCAncXVvdGUnKTsKCQkJfQoJCQlpZiAoc3RyZWFtLm1hdGNoKHJlV2lraUNvbW1lbnRTdGFydCkgfHwgc3RyZWFtLm1hdGNoKHJlV2lraUNvbW1lbnRTdG9wKSkgewoJCQkJcmV0dXJuIHJldCgnY29kZScsICdjb2RlJyk7CgkJCX0KCQkJaWYgKHN0cmVhbS5tYXRjaChyZUpzQ29kZVN0YXJ0KSB8fCBzdHJlYW0ubWF0Y2gocmVKc0NvZGVTdG9wKSB8fCBzdHJlYW0ubWF0Y2gocmVYbWxDb2RlU3RhcnQpIHx8IHN0cmVhbS5tYXRjaChyZVhtbENvZGVTdG9wKSkgewoJCQkJcmV0dXJuIHJldCgnY29kZScsICdjb2RlJyk7CgkJCX0KCQkJaWYgKHN0cmVhbS5tYXRjaChyZUhSKSkgewoJCQkJcmV0dXJuIHJldCgnaHInLCAnaHInKTsKCQkJfQoJCX0gLy8gc29sCgkJdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCgkJaWYgKHNvbCAmJiAvW1wvXCohIzs6PnxdLy50ZXN0KGNoKSkgewoJCQlpZiAoY2ggPT0gIiEiKSB7IC8vIHR3IGhlYWRlcgoJCQkJc3RyZWFtLnNraXBUb0VuZCgpOwoJCQkJcmV0dXJuIHJldCgiaGVhZGVyIiwgImhlYWRlciIpOwoJCQl9CgkJCWlmIChjaCA9PSAiKiIpIHsgLy8gdHcgbGlzdAoJCQkJc3RyZWFtLmVhdFdoaWxlKCcqJyk7CgkJCQlyZXR1cm4gcmV0KCJsaXN0IiwgImxpc3QiKTsKCQkJfQoJCQlpZiAoY2ggPT0gIiMiKSB7IC8vIHR3IG51bWJlcmVkIGxpc3QKCQkJCXN0cmVhbS5lYXRXaGlsZSgnIycpOwoJCQkJcmV0dXJuIHJldCgibGlzdCIsICJsaXN0Iik7CgkJCX0KCQkJaWYgKGNoID09ICI7IikgeyAvLyB0dyBsaXN0CgkJCQlzdHJlYW0uZWF0V2hpbGUoJzsnKTsKCQkJCXJldHVybiByZXQoImxpc3QiLCAibGlzdCIpOwoJCQl9CgkJCWlmIChjaCA9PSAiOiIpIHsgLy8gdHcgbGlzdAoJCQkJc3RyZWFtLmVhdFdoaWxlKCc6Jyk7CgkJCQlyZXR1cm4gcmV0KCJsaXN0IiwgImxpc3QiKTsKCQkJfQoJCQlpZiAoY2ggPT0gIj4iKSB7IC8vIHNpbmdsZSBsaW5lIHF1b3RlCgkJCQlzdHJlYW0uZWF0V2hpbGUoIj4iKTsKCQkJCXJldHVybiByZXQoInF1b3RlIiwgInF1b3RlIik7CgkJCX0KCQkJaWYgKGNoID09ICd8JykgewoJCQkJcmV0dXJuIHJldCgndGFibGUnLCAndGFibGUnKTsKCQkJfQoJCX0KCgkJaWYgKGNoID09ICd7JyAmJiBzdHJlYW0ubWF0Y2goL1x7XHsvKSkgewoJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkNvZGUpOwoJCX0KCgkJLy8gcnVkaW1lbnRhcnkgaHRtbDovLyBmaWxlOi8vIGxpbmsgbWF0Y2hpbmcuIFRXIGtub3dzIG11Y2ggbW9yZSAuLi4KCQlpZiAoL1toZl0vaS50ZXN0KGNoKSkgewoJCQlpZiAoL1t0aV0vaS50ZXN0KHN0cmVhbS5wZWVrKCkpICYmIHN0cmVhbS5tYXRjaCgvXGIodHRwcz98dHB8aWxlKTpcL1wvW1wtQS1aMC05KyZAI1wvJT89fl98JCE6LC47XSpbQS1aMC05KyZAI1wvJT1+X3wkXS9pKSkgewoJCQkJcmV0dXJuIHJldCgibGluay1leHRlcm5hbCIsICJsaW5rLWV4dGVybmFsIik7CgkJCX0KCQl9CgkJLy8ganVzdCBhIGxpdHRsZSBzdHJpbmcgaW5kaWNhdG9yLCBkb24ndCB3YW50IHRvIGhhdmUgdGhlIHdob2xlIHN0cmluZyBjb3ZlcmVkCgkJaWYgKGNoID09ICciJykgewoJCQlyZXR1cm4gcmV0KCdzdHJpbmcnLCAnc3RyaW5nJyk7CgkJfQoJCWlmICgvW1xbXF1dLy50ZXN0KGNoKSkgeyAvLyBjaGVjayBmb3IgW1suLl1dCgkJCWlmIChzdHJlYW0ucGVlaygpID09IGNoKSB7CgkJCQlzdHJlYW0ubmV4dCgpOwoJCQkJcmV0dXJuIHJldCgnYnJhY2UnLCAnYnJhY2UnKTsKCQkJfQoJCX0KCQlpZiAoY2ggPT0gIkAiKSB7CS8vIGNoZWNrIGZvciBzcGFjZSBsaW5rLiBUT0RPIGZpeCBAQC4uLkBAIGhpZ2hsaWdodGluZwoJCQlzdHJlYW0uZWF0V2hpbGUoaXNTcGFjZU5hbWUpOwoJCQlyZXR1cm4gcmV0KCJsaW5rLWV4dGVybmFsIiwgImxpbmstZXh0ZXJuYWwiKTsKCQl9CgkJaWYgKC9cZC8udGVzdChjaCkpIHsJLy8gbnVtYmVycwoJCQlzdHJlYW0uZWF0V2hpbGUoL1xkLyk7CgkJCXJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKCQl9CgkJaWYgKGNoID09ICIvIikgeyAvLyB0dyBpbnZpc2libGUgY29tbWVudAoJCQlpZiAoc3RyZWFtLmVhdCgiJSIpKSB7CgkJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkNvbW1lbnQpOwoJCQl9CgkJCWVsc2UgaWYgKHN0cmVhbS5lYXQoIi8iKSkgeyAvLyAKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuRW0pOwoJCQl9CgkJfQoJCWlmIChjaCA9PSAiXyIpIHsgLy8gdHcgdW5kZXJsaW5lCgkJCWlmIChzdHJlYW0uZWF0KCJfIikpIHsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuVW5kZXJsaW5lKTsKCQkJfQoJCX0KCQlpZiAoY2ggPT0gIi0iKSB7IC8vIHR3IHN0cmlrZXRocm91Z2ggVE9ETyBsb29rcyB1Z2x5IC4uIGRpZmZlcmVudCBoYW5kbGluZyBzZWUgYmVsb3c7CgkJCWlmIChzdHJlYW0uZWF0KCItIikpIHsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuU3RyaWtlKTsKCQkJfQoJCX0KCQlpZiAoY2ggPT0gIiciKSB7IC8vIHR3IGJvbGQKCQkJaWYgKHN0cmVhbS5lYXQoIiciKSkgewoJCQkJcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5TdHJvbmcpOwoJCQl9CgkJfQoJCWlmIChjaCA9PSAiPCIpIHsgLy8gdHcgbWFjcm8KCQkJaWYgKHN0cmVhbS5lYXQoIjwiKSkgewoJCQkJcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5NYWNybyk7CgkJCX0KCQl9CgkJZWxzZSB7CgkJCXJldHVybiByZXQoY2gpOwoJCX0KCgkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CgkJdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLAoJCQlrbm93biA9IHRleHR3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSAmJiB0ZXh0d29yZHNbd29yZF07CgoJCXJldHVybiBrbm93biA/IHJldChrbm93bi50eXBlLCBrbm93bi5zdHlsZSwgd29yZCkgOiByZXQoInRleHQiLCBudWxsLCB3b3JkKTsKCgl9IC8vIGpzVG9rZW5CYXNlKCkKCglmdW5jdGlvbiB0d1Rva2VuU3RyaW5nKHF1b3RlKSB7CgkJcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7CgkJCWlmICghbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgcXVvdGUpKSBzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQlyZXR1cm4gcmV0KCJzdHJpbmciLCAic3RyaW5nIik7CgkJfTsKCX0KCgkvLyB0dyBpbnZpc2libGUgY29tbWVudAoJZnVuY3Rpb24gdHdUb2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBtYXliZUVuZCA9IGZhbHNlLAoJCQljaDsKCQl3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CgkJCWlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlicmVhazsKCQkJfQoJCQltYXliZUVuZCA9IChjaCA9PSAiJSIpOwoJCX0KCQlyZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKCX0KCgkvLyB0dyBzdHJvbmcgLyBib2xkCglmdW5jdGlvbiB0d1Rva2VuU3Ryb25nKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgbWF5YmVFbmQgPSBmYWxzZSwKCQkJY2g7CgkJd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewoJCQlpZiAoY2ggPT0gIiciICYmIG1heWJlRW5kKSB7CgkJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQkJYnJlYWs7CgkJCX0KCQkJbWF5YmVFbmQgPSAoY2ggPT0gIiciKTsKCQl9CgkJcmV0dXJuIHJldCgidGV4dCIsICJzdHJvbmciKTsKCX0KCgkvLyB0dyBjb2RlCglmdW5jdGlvbiB0d1Rva2VuQ29kZShzdHJlYW0sIHN0YXRlKSB7CgkJdmFyIGNoLCBzYiA9IHN0YXRlLmJsb2NrOwoJCQoJCWlmIChzYiAmJiBzdHJlYW0uY3VycmVudCgpKSB7CgkJCXJldHVybiByZXQoImNvZGUiLCAiY29kZSIpOwoJCX0KCgkJaWYgKCFzYiAmJiBzdHJlYW0ubWF0Y2gocmVVbnRpbENvZGVTdG9wKSkgewoJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQlyZXR1cm4gcmV0KCJjb2RlIiwgImNvZGUtaW5saW5lIik7CgkJfQoKCQlpZiAoc2IgJiYgc3RyZWFtLnNvbCgpICYmIHN0cmVhbS5tYXRjaChyZUNvZGVCbG9ja1N0b3ApKSB7CgkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCXJldHVybiByZXQoImNvZGUiLCAiY29kZSIpOwoJCX0KCgkJY2ggPSBzdHJlYW0ubmV4dCgpOwoJCXJldHVybiAoc2IpID8gcmV0KCJjb2RlIiwgImNvZGUiKSA6IHJldCgiY29kZSIsICJjb2RlLWlubGluZSIpOwoJfQoKCS8vIHR3IGVtIC8gaXRhbGljCglmdW5jdGlvbiB0d1Rva2VuRW0oc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBtYXliZUVuZCA9IGZhbHNlLAoJCQljaDsKCQl3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CgkJCWlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlicmVhazsKCQkJfQoJCQltYXliZUVuZCA9IChjaCA9PSAiLyIpOwoJCX0KCQlyZXR1cm4gcmV0KCJ0ZXh0IiwgImVtIik7Cgl9CgoJLy8gdHcgdW5kZXJsaW5lZCB0ZXh0CglmdW5jdGlvbiB0d1Rva2VuVW5kZXJsaW5lKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgbWF5YmVFbmQgPSBmYWxzZSwKCQkJY2g7CgkJd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewoJCQlpZiAoY2ggPT0gIl8iICYmIG1heWJlRW5kKSB7CgkJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQkJYnJlYWs7CgkJCX0KCQkJbWF5YmVFbmQgPSAoY2ggPT0gIl8iKTsKCQl9CgkJcmV0dXJuIHJldCgidGV4dCIsICJ1bmRlcmxpbmVkIik7Cgl9CgoJLy8gdHcgc3RyaWtlIHRocm91Z2ggdGV4dCBsb29rcyB1Z2x5IAoJLy8gVE9ETyBqdXN0IHN0cmlrZSB0aHJvdWdoIHRoZSBmaXJzdCBhbmQgbGFzdCAyIGNoYXJzIGlmIHBvc3NpYmxlLgoJZnVuY3Rpb24gdHdUb2tlblN0cmlrZShzdHJlYW0sIHN0YXRlKSB7CgkJdmFyIG1heWJlRW5kID0gZmFsc2UsCgkJCWNoLCBucjsKCQkJCgkJd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewoJCQlpZiAoY2ggPT0gIi0iICYmIG1heWJlRW5kKSB7CgkJCQlzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwoJCQkJYnJlYWs7CgkJCX0KCQkJbWF5YmVFbmQgPSAoY2ggPT0gIi0iKTsKCQl9CgkJcmV0dXJuIHJldCgidGV4dCIsICJsaW5lLXRocm91Z2giKTsKCX0KCgkvLyBtYWNybwoJZnVuY3Rpb24gdHdUb2tlbk1hY3JvKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgY2gsIHRtcCwgd29yZCwga25vd247CgoJCWlmIChzdHJlYW0uY3VycmVudCgpID09ICc8PCcpIHsKCQkJcmV0dXJuIHJldCgnYnJhY2UnLCAnbWFjcm8nKTsKCQl9CgoJCWNoID0gc3RyZWFtLm5leHQoKTsKCQlpZiAoIWNoKSB7CgkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCXJldHVybiByZXQoY2gpOwoJCX0KCQlpZiAoY2ggPT0gIj4iKSB7CgkJCWlmIChzdHJlYW0ucGVlaygpID09ICc+JykgewoJCQkJc3RyZWFtLm5leHQoKTsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlyZXR1cm4gcmV0KCJicmFjZSIsICJtYWNybyIpOwoJCQl9CgkJfQoKCQlzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKCQl3b3JkID0gc3RyZWFtLmN1cnJlbnQoKTsKCQlrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIGtleXdvcmRzW3dvcmRdOwoKCQlpZiAoa25vd24pIHsKCQkJcmV0dXJuIHJldChrbm93bi50eXBlLCBrbm93bi5zdHlsZSwgd29yZCk7CgkJfQoJCWVsc2UgewoJCQlyZXR1cm4gcmV0KCJtYWNybyIsIG51bGwsIHdvcmQpOwoJCX0KCX0KCgkvLyBJbnRlcmZhY2UKCXJldHVybiB7CgkJc3RhcnRTdGF0ZTogZnVuY3Rpb24gKGJhc2Vjb2x1bW4pIHsKCQkJcmV0dXJuIHsKCQkJCXRva2VuaXplOiBqc1Rva2VuQmFzZSwKCQkJCWluZGVudGVkOiAwLAoJCQkJbGV2ZWw6IDAKCQkJfTsKCQl9LAoKCQl0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKCQkJaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKCQkJdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CgkJCXJldHVybiBzdHlsZTsKCQl9LAoKCQllbGVjdHJpY0NoYXJzOiAiIgoJfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC10aWRkbHl3aWtpIiwgInRpZGRseXdpa2kiKTsKLy99fX0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZlbG9jaXR5IG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ2ZWxvY2l0eS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL25pZ2h0LmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWZWxvY2l0eSBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMjIFZlbG9jaXR5IENvZGUgRGVtbwojKgogICBiYXNlZCBvbiBQTC9TUUwgbW9kZSBieSBQZXRlciBSYWdhbml0c2NoLCBhZGFwdGVkIHRvIFZlbG9jaXR5IGJ5IFN0ZXZlIE8nSGFyYSAoIGh0dHA6Ly93d3cucGl2b3RhbC1zb2x1dGlvbnMuY28udWsgKQogICBBdWd1c3QgMjAxMQoqIwoKIyoKICAgVGhpcyBpcyBhIG11bHRpbGluZSBjb21tZW50LgogICBUaGlzIGlzIHRoZSBzZWNvbmQgbGluZQoqIwoKI1tbIGhlbGxvIHN0ZXZlCiAgIFRoaXMgaGFzIGludmFsaWQgc3ludGF4IHRoYXQgd291bGQgbm9ybWFsbHkgbmVlZCAicG9vciBtYW4ncyBlc2NhcGluZyIgbGlrZToKCiAgICNkZWZpbmUoKQoKICAgJHtibGFoCl1dIwoKI2luY2x1ZGUoICJkaXNjbGFpbWVyLnR4dCIgIm9waW5pb24udHh0IiApCiNpbmNsdWRlKCAkZm9vICRiYXIgKQoKI3BhcnNlKCAibGVjb3JidXNpZXIudm0iICkKI3BhcnNlKCAkZm9vICkKCiNldmFsdWF0ZSggJ3N0cmluZyB3aXRoIFZUTCAjaWYodHJ1ZSl3aWxsIGJlIGRpc3BsYXllZCNlbmQnICkKCiNkZWZpbmUoICRoZWxsbyApIEhlbGxvICR3aG8gI2VuZCAjc2V0KCAkd2hvID0gIldvcmxkISIpICRoZWxsbyAjIyBkaXNwbGF5cyBIZWxsbyBXb3JsZCEKCiNmb3JlYWNoKCAkY3VzdG9tZXIgaW4gJGN1c3RvbWVyTGlzdCApCgogICAgJGZvcmVhY2guY291bnQgJGN1c3RvbWVyLk5hbWUKCiAgICAjaWYoICRmb28gPT0gJHtiYXJ9KQogICAgICAgIGl0J3MgdHJ1ZSEKICAgICAgICAjYnJlYWsKICAgICN7ZWxzZX0KICAgICAgICBpdCdzIG5vdCEKICAgICAgICAjc3RvcAogICAgI2VuZAoKICAgICNpZiAoJGZvcmVhY2gucGFyZW50Lmhhc05leHQpCiAgICAgICAgJHZlbG9jaXR5Q291bnQKICAgICNlbmQKI2VuZAoKJHNvbWVPYmplY3QuZ2V0VmFsdWVzKCJ0aGlzIGlzIGEgc3RyaW5nIHNwbGl0CiAgICAgICAgYWNyb3NzIGxpbmVzIikKCiNtYWNybyggdGFibGVyb3dzICRjb2xvciAkc29tZWxpc3QgKQogICAgI2ZvcmVhY2goICRzb21ldGhpbmcgaW4gJHNvbWVsaXN0ICkKICAgICAgICA8dHI+PHRkIGJnY29sb3I9JGNvbG9yPiRzb21ldGhpbmc8L3RkPjwvdHI+CiAgICAjZW5kCiNlbmQKCiN0YWJsZXJvd3MoInJlZCIgWyJkYWRzZGYiLCJkc2EiXSkKCiAgIFZhcmlhYmxlIHJlZmVyZW5jZTogI3NldCggJG1vbmtleSA9ICRiaWxsICkKICAgU3RyaW5nIGxpdGVyYWw6ICNzZXQoICRtb25rZXkuRnJpZW5kID0gJ21vbmljYScgKQogICBQcm9wZXJ0eSByZWZlcmVuY2U6ICNzZXQoICRtb25rZXkuQmxhbWUgPSAkd2hpdGVob3VzZS5MZWFrICkKICAgTWV0aG9kIHJlZmVyZW5jZTogI3NldCggJG1vbmtleS5QbGFuID0gJHNwaW5kb2N0b3Iud2VhdmUoJHdlYikgKQogICBOdW1iZXIgbGl0ZXJhbDogI3NldCggJG1vbmtleS5OdW1iZXIgPSAxMjMgKQogICBSYW5nZSBvcGVyYXRvcjogI3NldCggJG1vbmtleS5OdW1iZXJzID0gWzEuLjNdICkKICAgT2JqZWN0IGxpc3Q6ICNzZXQoICRtb25rZXkuU2F5ID0gWyJOb3QiLCAkbXksICJmYXVsdCJdICkKICAgT2JqZWN0IG1hcDogI3NldCggJG1vbmtleS5NYXAgPSB7ImJhbmFuYSIgOiAiZ29vZCIsICJyb2FzdCBiZWVmIiA6ICJiYWQifSkKClRoZSBSSFMgY2FuIGFsc28gYmUgYSBzaW1wbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uLCBzdWNoIGFzOgpBZGRpdGlvbjogI3NldCggJHZhbHVlID0gJGZvbyArIDEgKQogICBTdWJ0cmFjdGlvbjogI3NldCggJHZhbHVlID0gJGJhciAtIDEgKQogICBNdWx0aXBsaWNhdGlvbjogI3NldCggJHZhbHVlID0gJGZvbyAqICRiYXIgKQogICBEaXZpc2lvbjogI3NldCggJHZhbHVlID0gJGZvbyAvICRiYXIgKQogICBSZW1haW5kZXI6ICNzZXQoICR2YWx1ZSA9ICRmb28gJSAkYmFyICkKCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAibmlnaHQiLAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgbW9kZTogInRleHQvdmVsb2NpdHkiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQvdmVsb2NpdHk8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/velocity.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ2ZWxvY2l0eSIsIGZ1bmN0aW9uKGNvbmZpZykgewogICAgZnVuY3Rpb24gcGFyc2VXb3JkcyhzdHIpIHsKICAgICAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KCiAgICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0CiAgICB2YXIga2V5d29yZHMgPSBwYXJzZVdvcmRzKCIjZW5kICNlbHNlICNicmVhayAjc3RvcCAjW1sgI11dICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI3tlbmR9ICN7ZWxzZX0gI3ticmVha30gI3tzdG9wfSIpOwogICAgdmFyIGZ1bmN0aW9ucyA9IHBhcnNlV29yZHMoIiNpZiAjZWxzZWlmICNmb3JlYWNoICNzZXQgI2luY2x1ZGUgI3BhcnNlICNtYWNybyAjZGVmaW5lICNldmFsdWF0ZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIje2lmfSAje2Vsc2VpZn0gI3tmb3JlYWNofSAje3NldH0gI3tpbmNsdWRlfSAje3BhcnNlfSAje21hY3JvfSAje2RlZmluZX0gI3tldmFsdWF0ZX0iKTsKICAgIHZhciBzcGVjaWFscyA9IHBhcnNlV29yZHMoIiRmb3JlYWNoLmNvdW50ICRmb3JlYWNoLmhhc05leHQgJGZvcmVhY2guZmlyc3QgJGZvcmVhY2gubGFzdCAkZm9yZWFjaC50b3Btb3N0ICRmb3JlYWNoLnBhcmVudCAkdmVsb2NpdHlDb3VudCIpOwogICAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hPzpcL3xdLzsKICAgIHZhciBtdWx0aUxpbmVTdHJpbmdzID10cnVlOwoKICAgIGZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICAgICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBiZWZvcmVQYXJhbXMgPSBzdGF0ZS5iZWZvcmVQYXJhbXM7CiAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gZmFsc2U7CiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAvLyBzdGFydCBvZiBzdHJpbmc/CiAgICAgICAgaWYgKChjaCA9PSAnIicgfHwgY2ggPT0gIiciKSAmJiBzdGF0ZS5pblBhcmFtcykKICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuU3RyaW5nKGNoKSk7CiAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFsIHNpZ25zIFtde30oKS4sOz8gU2VwZXJhdG9yPwogICAgICAgIGVsc2UgaWYgKC9bXFtcXXt9XChcKSw7XC5dLy50ZXN0KGNoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIigiICYmIGJlZm9yZVBhcmFtcykgc3RhdGUuaW5QYXJhbXMgPSB0cnVlOwogICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAiKSIpIHN0YXRlLmluUGFyYW1zID0gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAvLyBzdGFydCBvZiBhIG51bWJlciB2YWx1ZT8KICAgICAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5dLyk7CiAgICAgICAgICAgIHJldHVybiAibnVtYmVyIjsKICAgICAgICB9CiAgICAgICAgLy8gbXVsdGkgbGluZSBjb21tZW50PwogICAgICAgIGVsc2UgaWYgKGNoID09ICIjIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuQ29tbWVudCk7CiAgICAgICAgfQogICAgICAgIC8vIHVucGFyc2VkIGNvbnRlbnQ/CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIiMiICYmIHN0cmVhbS5tYXRjaCgvICpcWyAqXFsvKSkgewogICAgICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5VbnBhcnNlZCk7CiAgICAgICAgfQogICAgICAgIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnQ/CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIiMiICYmIHN0cmVhbS5lYXQoIiMiKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgfQogICAgICAgIC8vIHZhcmlhYmxlPwogICAgICAgIGVsc2UgaWYgKGNoID09ICIkIikgewogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xkXCRfXC57fV0vKTsKICAgICAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFscz8KICAgICAgICAgICAgaWYgKHNwZWNpYWxzICYmIHNwZWNpYWxzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5iZWZvcmVQYXJhbXMgPSB0cnVlOwogICAgICAgICAgICAgICAgcmV0dXJuICJidWlsdGluIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBpcyBpdCBhIG9wZXJhdG9yPwogICAgICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gZ2V0IHRoZSB3aG9sZSB3b3JkCiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfe31dLyk7CiAgICAgICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAvLyBpcyBpdCBvbmUgb2YgdGhlIGxpc3RlZCBrZXl3b3Jkcz8KICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKQogICAgICAgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zPwogICAgICAgICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSB8fAogICAgICAgICAgICAgICAgc3RyZWFtLmN1cnJlbnQoKS5tYXRjaCgvXiNbYS16MC05X10rICokL2kpICYmIHN0cmVhbS5wZWVrKCk9PSIoIikgewogICAgICAgICAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZGVmYXVsdDoganVzdCBhICJ3b3JkIgogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHsKICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZW5kKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIiMiICYmIG1heWJlRW5kKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5VbnBhcnNlZChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIG1heWJlRW5kID0gMCwgY2g7CiAgICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIiMiICYmIG1heWJlRW5kID09IDIpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoID09ICJdIikKICAgICAgICAgICAgICAgIG1heWJlRW5kKys7CiAgICAgICAgICAgIGVsc2UgaWYgKGNoICE9ICIgIikKICAgICAgICAgICAgICAgIG1heWJlRW5kID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJtZXRhIjsKICAgIH0KICAgIC8vIEludGVyZmFjZQoKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICAgIGJlZm9yZVBhcmFtczogZmFsc2UsCiAgICAgICAgICAgICAgICBpblBhcmFtczogZmFsc2UKICAgICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdmVsb2NpdHkiLCAidmVsb2NpdHkiKTsK]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFhNTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ieG1sLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBYTUwgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIiZndDsKICAmbHQ7IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tJmd0OwogICZsdDtoZWFkJmd0OwogICAgJmx0O3RpdGxlJmd0O0hUTUwgRXhhbXBsZSZsdDsvdGl0bGUmZ3Q7CiAgJmx0Oy9oZWFkJmd0OwogICZsdDtib2R5Jmd0OwogICAgVGhlIGluZGVudGF0aW9uIHRyaWVzIHRvIGJlICZsdDtlbSZndDtzb21ld2hhdCAmYW1wO3F1b3Q7ZG8gd2hhdAogICAgSSBtZWFuJmFtcDtxdW90OyZsdDsvZW0mZ3Q7Li4uIGJ1dCBtaWdodCBub3QgbWF0Y2ggeW91ciBzdHlsZS4KICAmbHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDsKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6IHtuYW1lOiAieG1sIiwgYWxpZ25DREFUQTogdHJ1ZX0sCiAgICAgICAgbGluZU51bWJlcnM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPlRoZSBYTUwgbW9kZSBzdXBwb3J0cyB0d28gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOjwvcD4KICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPmh0bWxNb2RlIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBzd2l0Y2hlcyB0aGUgbW9kZSB0byBwYXJzZSBIVE1MIGluc3RlYWQgb2YgWE1MLiBUaGlzCiAgICAgIG1lYW5zIGF0dHJpYnV0ZXMgZG8gbm90IGhhdmUgdG8gYmUgcXVvdGVkLCBhbmQgc29tZSBlbGVtZW50cwogICAgICAoc3VjaCBhcyA8Y29kZT5icjwvY29kZT4pIGRvIG5vdCByZXF1aXJlIGEgY2xvc2luZyB0YWcuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmFsaWduQ0RBVEEgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIGZvcmNlIHRoZSBvcGVuaW5nIHRhZyBvZiBDREFUQQogICAgICBibG9ja3MgdG8gbm90IGJlIGluZGVudGVkLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94bWw8L2NvZGU+LCA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CiAgdmFyIEtsdWRnZXMgPSBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyB7CiAgICBhdXRvU2VsZkNsb3NlcnM6IHsiYnIiOiB0cnVlLCAiaW1nIjogdHJ1ZSwgImhyIjogdHJ1ZSwgImxpbmsiOiB0cnVlLCAiaW5wdXQiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgIm1ldGEiOiB0cnVlLCAiY29sIjogdHJ1ZSwgImZyYW1lIjogdHJ1ZSwgImJhc2UiOiB0cnVlLCAiYXJlYSI6IHRydWV9LAogICAgZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZX0sCiAgICBhbGxvd1VucXVvdGVkOiB0cnVlCiAgfSA6IHthdXRvU2VsZkNsb3NlcnM6IHt9LCBkb05vdEluZGVudDoge30sIGFsbG93VW5xdW90ZWQ6IGZhbHNlfTsKICB2YXIgYWxpZ25DREFUQSA9IHBhcnNlckNvbmZpZy5hbGlnbkNEQVRBOwoKICAvLyBSZXR1cm4gdmFyaWFibGVzIGZvciB0b2tlbml6ZXJzCiAgdmFyIHRhZ05hbWUsIHR5cGU7CgogIGZ1bmN0aW9uIGluVGV4dChzdHJlYW0sIHN0YXRlKSB7CiAgICBmdW5jdGlvbiBjaGFpbihwYXJzZXIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7CiAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CgogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiPCIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIiEiKSkgewogICAgICAgIGlmIChzdHJlYW0uZWF0KCJbIikpIHsKICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goIkNEQVRBWyIpKSByZXR1cm4gY2hhaW4oaW5CbG9jaygiYXRvbSIsICJdXT4iKSk7CiAgICAgICAgICBlbHNlIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIi0tIikpIHJldHVybiBjaGFpbihpbkJsb2NrKCJjb21tZW50IiwgIi0tPiIpKTsKICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIkRPQ1RZUEUiLCB0cnVlLCB0cnVlKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl9cLV0vKTsKICAgICAgICAgIHJldHVybiBjaGFpbihkb2N0eXBlKDEpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBlbHNlIGlmIChzdHJlYW0uZWF0KCI/IikpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuX1wtXS8pOwogICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5CbG9jaygibWV0YSIsICI/PiIpOwogICAgICAgIHJldHVybiAibWV0YSI7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdHlwZSA9IHN0cmVhbS5lYXQoIi8iKSA/ICJjbG9zZVRhZyIgOiAib3BlblRhZyI7CiAgICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgICAgdGFnTmFtZSA9ICIiOwogICAgICAgIHZhciBjOwogICAgICAgIHdoaWxlICgoYyA9IHN0cmVhbS5lYXQoL1teXHNcdTAwYTA9PD5cIlwnXC8/XS8pKSkgdGFnTmFtZSArPSBjOwogICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7CiAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiJiIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXjtdLyk7CiAgICAgIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgcmV0dXJuICJhdG9tIjsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJjxdLyk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5UYWcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiPiIgfHwgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCI+IikpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0OwogICAgICB0eXBlID0gY2ggPT0gIj4iID8gImVuZFRhZyIgOiAic2VsZmNsb3NlVGFnIjsKICAgICAgcmV0dXJuICJ0YWciOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIj0iKSB7CiAgICAgIHR5cGUgPSAiZXF1YWxzIjsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmICgvW1wnXCJdLy50ZXN0KGNoKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQXR0cmlidXRlKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7CiAgICAgIHJldHVybiAid29yZCI7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBpbkF0dHJpYnV0ZShxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm5leHQoKSA9PSBxdW90ZSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRhZzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gaW5CbG9jayhzdHlsZSwgdGVybWluYXRvcikgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRlcm1pbmF0b3IpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICB9CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGRvY3R5cGUoZGVwdGgpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjaDsKICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAoY2ggPT0gIjwiKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGRvY3R5cGUoZGVwdGggKyAxKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9IGVsc2UgaWYgKGNoID09ICI+IikgewogICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBkb2N0eXBlKGRlcHRoIC0gMSk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICJtZXRhIjsKICAgIH07CiAgfQoKICB2YXIgY3VyU3RhdGUsIHNldFN0eWxlOwogIGZ1bmN0aW9uIHBhc3MoKSB7CiAgICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBjdXJTdGF0ZS5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgfQogIGZ1bmN0aW9uIGNvbnQoKSB7CiAgICBwYXNzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHRhZ05hbWUsIHN0YXJ0T2ZMaW5lKSB7CiAgICB2YXIgbm9JbmRlbnQgPSBLbHVkZ2VzLmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHRhZ05hbWUpIHx8IChjdXJTdGF0ZS5jb250ZXh0ICYmIGN1clN0YXRlLmNvbnRleHQubm9JbmRlbnQpOwogICAgY3VyU3RhdGUuY29udGV4dCA9IHsKICAgICAgcHJldjogY3VyU3RhdGUuY29udGV4dCwKICAgICAgdGFnTmFtZTogdGFnTmFtZSwKICAgICAgaW5kZW50OiBjdXJTdGF0ZS5pbmRlbnRlZCwKICAgICAgc3RhcnRPZkxpbmU6IHN0YXJ0T2ZMaW5lLAogICAgICBub0luZGVudDogbm9JbmRlbnQKICAgIH07CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoKSB7CiAgICBpZiAoY3VyU3RhdGUuY29udGV4dCkgY3VyU3RhdGUuY29udGV4dCA9IGN1clN0YXRlLmNvbnRleHQucHJldjsKICB9CgogIGZ1bmN0aW9uIGVsZW1lbnQodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm9wZW5UYWciKSB7CiAgICAgIGN1clN0YXRlLnRhZ05hbWUgPSB0YWdOYW1lOwogICAgICByZXR1cm4gY29udChhdHRyaWJ1dGVzLCBlbmR0YWcoY3VyU3RhdGUuc3RhcnRPZkxpbmUpKTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiY2xvc2VUYWciKSB7CiAgICAgIHZhciBlcnIgPSBmYWxzZTsKICAgICAgaWYgKGN1clN0YXRlLmNvbnRleHQpIHsKICAgICAgICBlcnIgPSBjdXJTdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlcnIgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgcmV0dXJuIGNvbnQoZW5kY2xvc2V0YWcoZXJyKSk7CiAgICB9CiAgICByZXR1cm4gY29udCgpOwogIH0KICBmdW5jdGlvbiBlbmR0YWcoc3RhcnRPZkxpbmUpIHsKICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmICh0eXBlID09ICJzZWxmY2xvc2VUYWciIHx8CiAgICAgICAgICAodHlwZSA9PSAiZW5kVGFnIiAmJiBLbHVkZ2VzLmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShjdXJTdGF0ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSkKICAgICAgICByZXR1cm4gY29udCgpOwogICAgICBpZiAodHlwZSA9PSAiZW5kVGFnIikge3B1c2hDb250ZXh0KGN1clN0YXRlLnRhZ05hbWUsIHN0YXJ0T2ZMaW5lKTsgcmV0dXJuIGNvbnQoKTt9CiAgICAgIHJldHVybiBjb250KCk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBlbmRjbG9zZXRhZyhlcnIpIHsKICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgaWYgKHR5cGUgPT0gImVuZFRhZyIpIHsgcG9wQ29udGV4dCgpOyByZXR1cm4gY29udCgpOyB9CiAgICAgIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgcmV0dXJuIGNvbnQoYXJndW1lbnRzLmNhbGxlZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhdHRyaWJ1dGVzKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ3b3JkIikge3NldFN0eWxlID0gImF0dHJpYnV0ZSI7IHJldHVybiBjb250KGF0dHJpYnV0ZXMpO30KICAgIGlmICh0eXBlID09ICJlcXVhbHMiKSByZXR1cm4gY29udChhdHR2YWx1ZSwgYXR0cmlidXRlcyk7CiAgICBpZiAodHlwZSA9PSAic3RyaW5nIikge3NldFN0eWxlID0gImVycm9yIjsgcmV0dXJuIGNvbnQoYXR0cmlidXRlcyk7fQogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gYXR0dmFsdWUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIndvcmQiICYmIEtsdWRnZXMuYWxsb3dVbnF1b3RlZCkge3NldFN0eWxlID0gInN0cmluZyI7IHJldHVybiBjb250KCk7fQogICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBjb250KGF0dHZhbHVlbWF5YmUpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gYXR0dmFsdWVtYXliZSh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAic3RyaW5nIikgcmV0dXJuIGNvbnQoYXR0dmFsdWVtYXliZSk7CiAgICBlbHNlIHJldHVybiBwYXNzKCk7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IGluVGV4dCwgY2M6IFtdLCBpbmRlbnRlZDogMCwgc3RhcnRPZkxpbmU6IHRydWUsIHRhZ05hbWU6IG51bGwsIGNvbnRleHQ6IG51bGx9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKCiAgICAgIHNldFN0eWxlID0gdHlwZSA9IHRhZ05hbWUgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RhdGUudHlwZSA9IHR5cGU7CiAgICAgIGlmICgoc3R5bGUgfHwgdHlwZSkgJiYgc3R5bGUgIT0gImNvbW1lbnQiKSB7CiAgICAgICAgY3VyU3RhdGUgPSBzdGF0ZTsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgdmFyIGNvbWIgPSBzdGF0ZS5jYy5wb3AoKSB8fCBlbGVtZW50OwogICAgICAgICAgaWYgKGNvbWIodHlwZSB8fCBzdHlsZSkpIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IGZhbHNlOwogICAgICByZXR1cm4gc2V0U3R5bGUgfHwgc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlciwgZnVsbExpbmUpIHsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoKHN0YXRlLnRva2VuaXplICE9IGluVGFnICYmIHN0YXRlLnRva2VuaXplICE9IGluVGV4dCkgfHwKICAgICAgICAgIGNvbnRleHQgJiYgY29udGV4dC5ub0luZGVudCkKICAgICAgICByZXR1cm4gZnVsbExpbmUgPyBmdWxsTGluZS5tYXRjaCgvXihccyopLylbMF0ubGVuZ3RoIDogMDsKICAgICAgaWYgKGFsaWduQ0RBVEEgJiYgLzwhXFtDREFUQVxbLy50ZXN0KHRleHRBZnRlcikpIHJldHVybiAwOwogICAgICBpZiAoY29udGV4dCAmJiAvXjxcLy8udGVzdCh0ZXh0QWZ0ZXIpKQogICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CiAgICAgIHdoaWxlIChjb250ZXh0ICYmICFjb250ZXh0LnN0YXJ0T2ZMaW5lKQogICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CiAgICAgIGlmIChjb250ZXh0KSByZXR1cm4gY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0OwogICAgICBlbHNlIHJldHVybiAwOwogICAgfSwKCiAgICBjb21wYXJlU3RhdGVzOiBmdW5jdGlvbihhLCBiKSB7CiAgICAgIGlmIChhLmluZGVudGVkICE9IGIuaW5kZW50ZWQgfHwgYS50b2tlbml6ZSAhPSBiLnRva2VuaXplKSByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAodmFyIGNhID0gYS5jb250ZXh0LCBjYiA9IGIuY29udGV4dDsgOyBjYSA9IGNhLnByZXYsIGNiID0gY2IucHJldikgewogICAgICAgIGlmICghY2EgfHwgIWNiKSByZXR1cm4gY2EgPT0gY2I7CiAgICAgICAgaWYgKGNhLnRhZ05hbWUgIT0gY2IudGFnTmFtZSkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICIvIgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCAieG1sIik7CkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9odG1sIiwge25hbWU6ICJ4bWwiLCBodG1sTW9kZTogdHJ1ZX0pOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xmlpure/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xmlpure/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFB1cmUgWE1MIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ4bWxwdXJlLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBYTUwgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iID8mZ3Q7CgombHQ7IS0tIFRoaXMgaXMgdGhlIHB1cmUgWE1MIG1vZGUsCmFuZCB3ZSdyZSBpbnNpZGUgYSBjb21tZW50ISAtLSZndDsKCiZsdDtjYXRhbG9nJmd0OwogICZsdDtib29rcyZndDsKICAgICZsdDtib29rIGlkPSJiazAxIiZndDsKICAgICAgJmx0O3RpdGxlJmd0O0xvcmQgb2YgTGlnaHQmbHQ7L3RpdGxlJmd0OwogICAgICAmbHQ7YXV0aG9yJmd0O1JvZ2VyIFplbGF6bnkmbHQ7L2F1dGhvciZndDsKICAgICAgJmx0O3llYXImZ3Q7MTk2NyZsdDsveWVhciZndDsKICAgICAgJmx0O2Rlc2NyaXB0aW9uJmd0OyZsdDshW0NEQVRBW1RoaXMgaXMgYSBncmVhdCBib29rLCByZWFsbHkhIV1dJmd0OyZsdDsvZGVzY3JpcHRpb24mZ3Q7CiAgICAmbHQ7L2Jvb2smZ3Q7CiAgJmx0Oy9ib29rcyZndDsKJmx0Oy9jYXRhbG9nJmd0Owo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7bW9kZToge25hbWU6ICJ4bWxwdXJlIn19KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlRoaXMgaXMgbXkgWE1MIHBhcnNlciwgYmFzZWQgb24gdGhlIG9yaWdpbmFsOjwvcD4gCiAgICA8dWw+IAogICAgCTxsaT5ObyBodG1sIG1vZGUgLSB0aGlzIGlzIHB1cmUgeG1sPC9saT4gCiAgICAJPGxpPklsbGVnYWwgYXR0cmlidXRlcyBhbmQgZWxlbWVudCBuYW1lcyBhcmUgZXJyb3JzPC9saT4gCiAgICAJPGxpPkF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgdmFsdWU8L2xpPiAKICAgIAk8bGk+WE1MIGRlY2xhcmF0aW9uIHN1cHBvcnRlZCAoZS5nLjogPGI+Jmx0Oz94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIiA/Jmd0OzwvYj4pPC9saT4gCiAgICAJPGxpPkNEQVRBIGFuZCBjb21tZW50IGJsb2NrcyBhcmUgbm90IGluZGVudGVkIChleGNlcHQgZm9yIHRoZWlyIHN0YXJ0LXRhZyk8L2xpPiAKICAgIAk8bGk+QmV0dGVyIGhhbmRsaW5nIG9mIGVycm9ycyBwZXIgbGluZSB3aXRoIHRoZSBzdGF0ZSBvYmplY3QgLSBwcm92aWRlcyBnb29kIGluZnJhc3RydWN0dXJlIGZvciBleHRlbmRpbmcgaXQ8L2xpPiAKICAgIDwvdWw+IAogCiAgICA8cD5XaGF0J3MgbWlzc2luZzo8L3A+IAogICAgPHVsPiAKICAgIAk8bGk+TWFrZSBzdXJlIG9ubHkgYSBzaW5nbGUgcm9vdCBlbGVtZW50IGV4aXN0cyBhdCB0aGUgZG9jdW1lbnQgbGV2ZWw8L2xpPiAKICAgIAk8bGk+TXVsdGktbGluZSBhdHRyaWJ1dGVzIHNob3VsZCBOT1QgaW5kZW50PC9saT4KICAgIAk8bGk+U3RhcnQgdGFncyBhcmUgbm90IHBhaW50ZWQgcmVkIHdoZW4gdGhleSBoYXZlIG5vIG1hdGNoaW5nIGVuZCB0YWdzIChpcyB0aGlzIHJlYWxseSB3cm9uZz8pPC9saT4gCiAgICA8L3VsPiAKIAogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3htbDwvY29kZT4sIDxjb2RlPnRleHQveG1sPC9jb2RlPi48L3A+IAogCiAgICA8cD48Yj5AYXV0aG9yPC9iPjogRHJvciBCRyAoPGk+ZGVlYnVnLmRldlthdF1nbWFpbC5jb208L2k+KTxici8+IAogICAgPHA+PGI+QGRhdGU8L2I+OiBBdWd1c3QsIDIwMTE8YnIvPiAKICAgIDxwPjxiPkBnaXRodWI8L2I+OiA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vZGVlYnVnZ2VyL0NvZGVNaXJyb3IyJyB0YXJnZXQ9J2JsYW5rJz5odHRwczovL2dpdGh1Yi5jb20vZGVlYnVnZ2VyL0NvZGVNaXJyb3IyPC9hPjwvcD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+YXBwbGljYXRpb24veG1sPC9jb2RlPiwgPGNvZGU+dGV4dC94bWw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xmlpure/xmlpure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIHhtbHB1cmUuanMKICogCiAqIEJ1aWxkaW5nIHVwb24gYW5kIGltcHJvdmluZyB0aGUgQ29kZU1pcnJvciAyIFhNTCBwYXJzZXIKICogQGF1dGhvcjogRHJvciBCRyAoZGVlYnVnLmRldkBnbWFpbC5jb20pCiAqIEBkYXRlOiBBdWd1c3QsIDIwMTEKICovCgpDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbHB1cmUiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgLy8gY29uc3RhbnRzCiAgICB2YXIgU1RZTEVfRVJST1IgPSAiZXJyb3IiOwogICAgdmFyIFNUWUxFX0lOU1RSVUNUSU9OID0gImNvbW1lbnQiOwogICAgdmFyIFNUWUxFX0NPTU1FTlQgPSAiY29tbWVudCI7CiAgICB2YXIgU1RZTEVfRUxFTUVOVF9OQU1FID0gInRhZyI7CiAgICB2YXIgU1RZTEVfQVRUUklCVVRFID0gImF0dHJpYnV0ZSI7CiAgICB2YXIgU1RZTEVfV09SRCA9ICJzdHJpbmciOwogICAgdmFyIFNUWUxFX1RFWFQgPSAiYXRvbSI7CgogICAgdmFyIFRBR19JTlNUUlVDVElPTiA9ICIhaW5zdHJ1Y3Rpb24iOwogICAgdmFyIFRBR19DREFUQSA9ICIhY2RhdGEiOwogICAgdmFyIFRBR19DT01NRU5UID0gIiFjb21tZW50IjsKICAgIHZhciBUQUdfVEVYVCA9ICIhdGV4dCI7CiAgICAKICAgIHZhciBkb05vdEluZGVudCA9IHsKICAgICAgICAiIWNkYXRhIjogdHJ1ZSwKICAgICAgICAiIWNvbW1lbnQiOiB0cnVlLAogICAgICAgICIhdGV4dCI6IHRydWUsCiAgICAgICAgIiFpbnN0cnVjdGlvbiI6IHRydWUKICAgIH07CgogICAgLy8gb3B0aW9ucwogICAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIGhlbHBlciBmdW5jdGlvbnMKICAgIAogICAgLy8gY2hhaW4gYSBwYXJzZXIgdG8gYW5vdGhlciBwYXJzZXIKICAgIGZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIHBhcnNlcikgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VyOwogICAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICAKICAgIC8vIHBhcnNlIGEgYmxvY2sgKGNvbW1lbnQsIENEQVRBIG9yIHRleHQpCiAgICBmdW5jdGlvbiBpbkJsb2NrKHN0eWxlLCB0ZXJtaW5hdG9yLCBuZXh0VG9rZW5pemUpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCh0ZXJtaW5hdG9yKSkgewogICAgICAgICAgICAgICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gbmV4dFRva2VuaXplOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gc3R5bGU7CiAgICAgICAgfTsKICAgIH0KICAgIAogICAgLy8gZ28gZG93biBhIGxldmVsIGluIHRoZSBkb2N1bWVudAogICAgLy8gKGhpbnQ6IGxvb2sgYXQgd2hvIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8ga25vdyB3aGF0IHRoZSBjb250ZXh0cyBhcmUpCiAgICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgdGFnTmFtZSkgewogICAgICAgIHZhciBub0luZGVudCA9IGRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHRhZ05hbWUpIHx8IChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuZG9JbmRlbnQpOwogICAgICAgIHZhciBuZXdDb250ZXh0ID0gewogICAgICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLAogICAgICAgICAgICBwcmV2OiBzdGF0ZS5jb250ZXh0LAogICAgICAgICAgICBpbmRlbnQ6IHN0YXRlLmNvbnRleHQgPyBzdGF0ZS5jb250ZXh0LmluZGVudCArIGluZGVudFVuaXQgOiAwLAogICAgICAgICAgICBsaW5lTnVtYmVyOiBzdGF0ZS5saW5lTnVtYmVyLAogICAgICAgICAgICBpbmRlbnRlZDogc3RhdGUuaW5kZW50ZWQsCiAgICAgICAgICAgIG5vSW5kZW50OiBub0luZGVudAogICAgICAgIH07CiAgICAgICAgc3RhdGUuY29udGV4dCA9IG5ld0NvbnRleHQ7CiAgICB9CiAgICAKICAgIC8vIGdvIHVwIGEgbGV2ZWwgaW4gdGhlIGRvY3VtZW50CiAgICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICAgICAgaWYgKHN0YXRlLmNvbnRleHQpIHsKICAgICAgICAgICAgdmFyIG9sZENvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICAgICAgICBzdGF0ZS5jb250ZXh0ID0gb2xkQ29udGV4dC5wcmV2OwogICAgICAgICAgICByZXR1cm4gb2xkQ29udGV4dDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gd2Ugc2hvdWxkbid0IGJlIGhlcmUgLSBpdCBtZWFucyB3ZSBkaWRuJ3QgaGF2ZSBhIGNvbnRleHQgdG8gcG9wCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAKICAgIC8vIHJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHRva2VuIGlzIHNlcGVyYXRlZCBmcm9tIHRoZSB0b2tlbnMgYmVmb3JlIGl0CiAgICAvLyB3aGljaCBtZWFucyBlaXRoZXIgdGhpcyBpcyB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIG9yIHRoZXJlIGlzIGF0IGxlYXN0CiAgICAvLyBvbmUgc3BhY2Ugb3IgdGFiIGNoYXJhY3RlciBiZWhpbmQgdGhlIHRva2VuCiAgICAvLyBvdGhlcndpc2UgcmV0dXJucyBmYWxzZQogICAgZnVuY3Rpb24gaXNUb2tlblNlcGFyYXRlZChzdHJlYW0pIHsKICAgICAgICByZXR1cm4gc3RyZWFtLnNvbCgpIHx8CiAgICAgICAgICAgIHN0cmVhbS5zdHJpbmcuY2hhckF0KHN0cmVhbS5zdGFydCAtIDEpID09ICIgIiB8fAogICAgICAgICAgICBzdHJlYW0uc3RyaW5nLmNoYXJBdChzdHJlYW0uc3RhcnQgLSAxKSA9PSAiXHQiOwogICAgfQogICAgCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIGNvbnRleHQ6IGRvY3VtZW50CiAgICAvLyAKICAgIC8vIGFuIFhNTCBkb2N1bWVudCBjYW4gY29udGFpbjoKICAgIC8vIC0gYSBzaW5nbGUgZGVjbGFyYXRpb24gKGlmIGRlZmluZWQsIGl0IG11c3QgYmUgdGhlIHZlcnkgZmlyc3QgbGluZSkKICAgIC8vIC0gZXhhY3RseSBvbmUgcm9vdCBlbGVtZW50CiAgICAvLyBAdG9kbyB0cnkgdG8gYWN0dWFsbHkgbGltaXQgdGhlIG51bWJlciBvZiByb290IGVsZW1lbnRzIHRvIDEKICAgIC8vIC0gemVybyBvciBtb3JlIGNvbW1lbnRzCiAgICBmdW5jdGlvbiBwYXJzZURvY3VtZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZihzdHJlYW0uZWF0KCI8IikpIHsKICAgICAgICAgICAgaWYoc3RyZWFtLmVhdCgiPyIpKSB7CiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzaW5nIGluc3RydWN0aW9uCiAgICAgICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgVEFHX0lOU1RSVUNUSU9OKTsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25TdGFydFRhZzsKICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmVhbS5tYXRjaCgiIS0tIikpIHsKICAgICAgICAgICAgICAgIC8vIG5ldyBjb250ZXh0OiBjb21tZW50CiAgICAgICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgVEFHX0NPTU1FTlQpOwogICAgICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIGluQmxvY2soU1RZTEVfQ09NTUVOVCwgIi0tPiIsIHBhcnNlRG9jdW1lbnQpKTsKICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmVhbS5lYXRTcGFjZSgpIHx8IHN0cmVhbS5lb2woKSApIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50VGFnTmFtZTsKICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9FTEVNRU5UX05BTUU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gZXJyb3Igb24gbGluZQogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICB9CgogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAvLyBjb250ZXh0OiBYTUwgZWxlbWVudCBzdGFydC10YWcgb3IgZW5kLXRhZwogICAgLy8KICAgIC8vIC0gZWxlbWVudCBzdGFydC10YWcgY2FuIGNvbnRhaW4gYXR0cmlidXRlcwogICAgLy8gLSBlbGVtZW50IHN0YXJ0LXRhZyBtYXkgc2VsZi1jbG9zZSAob3Igc3RhcnQgYW4gZWxlbWVudCBibG9jayBpZiBpdCBkb2Vzbid0KQogICAgLy8gLSBlbGVtZW50IGVuZC10YWcgY2FuIGNvbnRhaW4gb25seSB0aGUgdGFnIG5hbWUKICAgIGZ1bmN0aW9uIHBhcnNlRWxlbWVudFRhZ05hbWUoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIC8vIGdldCB0aGUgbmFtZSBvZiB0aGUgdGFnCiAgICAgICAgdmFyIHN0YXJ0UG9zID0gc3RyZWFtLnBvczsKICAgICAgICBpZihzdHJlYW0ubWF0Y2goL15bYS16QS1aXzpdWy1hLXpBLVowLTlfOi5dKi8pKSB7CiAgICAgICAgICAgIC8vIGVsZW1lbnQgc3RhcnQtdGFnCiAgICAgICAgICAgIHZhciB0YWdOYW1lID0gc3RyZWFtLnN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3MsIHN0cmVhbS5wb3MpOwogICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgdGFnTmFtZSk7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50OwogICAgICAgICAgICByZXR1cm4gU1RZTEVfRUxFTUVOVF9OQU1FOwogICAgICAgIH0gZWxzZSBpZihzdHJlYW0ubWF0Y2goL15cL1thLXpBLVpfOl1bLWEtekEtWjAtOV86Ll0qKCApKj4vKSkgewogICAgICAgICAgICAvLyBlbGVtZW50IGVuZC10YWcKICAgICAgICAgICAgdmFyIGVuZFRhZ05hbWUgPSBzdHJlYW0uc3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcyArIDEsIHN0cmVhbS5wb3MgLSAxKS50cmltKCk7CiAgICAgICAgICAgIHZhciBvbGRDb250ZXh0ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgICAgICBpZihvbGRDb250ZXh0ID09IG51bGwgfHwgZW5kVGFnTmFtZSAhPSBvbGRDb250ZXh0LnRhZ05hbWUpIHsKICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFydCBhbmQgZW5kIHRhZyBuYW1lcyBzaG91bGQgbWF0Y2ggLSBlcnJvcgogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBTVFlMRV9FTEVNRU5UX05BTUU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gbm8gdGFnIG5hbWUgLSBlcnJvcgogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHN0YXRlLmNvbnRleHQgPT0gbnVsbCA/IHBhcnNlRG9jdW1lbnQgOiBwYXJzZUVsZW1lbnRCbG9jazsKICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXj5dLyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXQoIj4iKTsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIHBhcnNlRWxlbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYoc3RyZWFtLm1hdGNoKC9eXC8+LykpIHsKICAgICAgICAgICAgLy8gc2VsZi1jbG9zaW5nIHRhZwogICAgICAgICAgICBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGF0ZS5jb250ZXh0ID09IG51bGwgPyBwYXJzZURvY3VtZW50IDogcGFyc2VFbGVtZW50QmxvY2s7CiAgICAgICAgICAgIHJldHVybiBTVFlMRV9FTEVNRU5UX05BTUU7CiAgICAgICAgfSBlbHNlIGlmKHN0cmVhbS5lYXQoL14+LykpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnRCbG9jazsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VMRU1FTlRfTkFNRTsKICAgICAgICB9IGVsc2UgaWYoaXNUb2tlblNlcGFyYXRlZChzdHJlYW0pICYmIHN0cmVhbS5tYXRjaCgvXlthLXpBLVpfOl1bLWEtekEtWjAtOV86Ll0qKCApKj0vKSkgewogICAgICAgICAgICAvLyBhdHRyaWJ1dGUKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUF0dHJpYnV0ZTsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0FUVFJJQlVURTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gbm8gb3RoZXIgb3B0aW9ucyAtIHRoaXMgaXMgYW4gZXJyb3IKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHN0YXRlLmNvbnRleHQgPT0gbnVsbCA/IHBhcnNlRG9jdW1lbnQgOiBwYXJzZURvY3VtZW50OwogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14+XS8pOwogICAgICAgIHN0cmVhbS5lYXQoIj4iKTsKICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICB9CiAgICAKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gY29udGV4dDogYXR0cmlidXRlCiAgICAvLyAKICAgIC8vIGF0dHJpYnV0ZSB2YWx1ZXMgbWF5IGNvbnRhaW4gZXZlcnl0aGluZywgZXhjZXB0OgogICAgLy8gLSB0aGUgZW5kaW5nIHF1b3RlICh3aXRoICcgb3IgIikgLSB0aGlzIG1hcmtzIHRoZSBlbmQgb2YgdGhlIHZhbHVlCiAgICAvLyAtIHRoZSBjaGFyYWN0ZXIgIjwiIC0gc2hvdWxkIG5ldmVyIGFwcGVhcgogICAgLy8gLSBhbXBlcnNhbmQgKCImIikgLSB1bmxlc3MgaXQgc3RhcnRzIGEgcmVmZXJlbmNlOiBhIHN0cmluZyB0aGF0IGVuZHMgd2l0aCBhIHNlbWktY29sb24gKCI7IikKICAgIC8vIC0tLT4gbm90ZTogdGhpcyBwYXJzZXIgaXMgbGF4IGluIHdoYXQgbWF5IGJlIHB1dCBpbnRvIGEgcmVmZXJlbmNlIHN0cmluZywKICAgIC8vIC0tLT4gY29uc3VsdCBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1SZWZlcmVuY2UgaWYgeW91IHdhbnQgdG8gbWFrZSBpdCB0aWdodGVyCiAgICBmdW5jdGlvbiBwYXJzZUF0dHJpYnV0ZShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIHF1b3RlID0gc3RyZWFtLm5leHQoKTsKICAgICAgICBpZihxdW90ZSAhPSAiXCIiICYmIHF1b3RlICE9ICInIikgewogICAgICAgICAgICAvLyBhdHRyaWJ1dGUgbXVzdCBiZSBxdW90ZWQKICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRWxlbWVudDsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBzdGF0ZS50b2tQYXJhbXMucXVvdGUgPSBxdW90ZTsgICAgCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUF0dHJpYnV0ZVZhbHVlOwogICAgICAgIHJldHVybiBTVFlMRV9XT1JEOwogICAgfQoKICAgIC8vIEB0b2RvOiBmaW5kIG91dCB3aGV0aGVyIHRoaXMgYXR0cmlidXRlIHZhbHVlIHNwYW5zIG11bHRpcGxlIGxpbmVzLAogICAgLy8gICAgICAgIGFuZCBpZiBzbywgcHVzaCBhIGNvbnRleHQgZm9yIGl0IGluIG9yZGVyIG5vdCB0byBpbmRlbnQgaXQKICAgIC8vICAgICAgICAob3Igc29tZXRoaW5nIG9mIHRoZSBzb3J0Li4pCiAgICBmdW5jdGlvbiBwYXJzZUF0dHJpYnV0ZVZhbHVlKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2ggPSAiIjsKICAgICAgICB3aGlsZSghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAgICAgaWYoY2ggPT0gc3RhdGUudG9rUGFyYW1zLnF1b3RlKSB7CiAgICAgICAgICAgICAgICAvLyBlbmQgcXVvdGUgZm91bmQKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50OwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX1dPUkQ7CiAgICAgICAgICAgIH0gZWxzZSBpZihjaCA9PSAiPCIpIHsKICAgICAgICAgICAgICAgIC8vIGNhbid0IGhhdmUgbGVzcy10aGFuIHNpZ25zIGluIGFuIGF0dHJpYnV0ZSB2YWx1ZSwgZXZlcgogICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpCiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRWxlbWVudDsKICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgICAgICAgICAgfSBlbHNlIGlmKGNoID09ICImIikgewogICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIC0gbG9vayBmb3IgYSBzZW1pLWNvbG9uLCBvciByZXR1cm4gZXJyb3IgaWYgbm9uZSBmb3VuZAogICAgICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzZW1pLWNvbG9uIGlzbid0IHJpZ2h0IGFmdGVyIHRoZSBhbXBlcnNhbmQKICAgICAgICAgICAgICAgIGlmKGNoID09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKQogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50OwogICAgICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIG5vIGxlc3MtdGhhbiBjaGFyYWN0ZXJzIHNsaXBwZWQgaW4KICAgICAgICAgICAgICAgIHdoaWxlKCFzdHJlYW0uZW9sKCkgJiYgY2ggIT0gIjsiKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoY2ggPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IGhhdmUgbGVzcy10aGFuIHNpZ25zIGluIGFuIGF0dHJpYnV0ZSB2YWx1ZSwgZXZlcgogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCkKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoc3RyZWFtLmVvbCgpICYmIGNoICE9ICI7IikgewogICAgICAgICAgICAgICAgICAgIC8vIG5vIGFtcGVyc2FuZCBmb3VuZCAtIGVycm9yCiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50OwogICAgICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYXR0cmlidXRlIHZhbHVlIGNvbnRpbnVlcyB0byBuZXh0IGxpbmUKICAgICAgICByZXR1cm4gU1RZTEVfV09SRDsKICAgIH0KICAgIAogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAvLyBjb250ZXh0OiBlbGVtZW50IGJsb2NrCiAgICAvLwogICAgLy8gYSBibG9jayBjYW4gY29udGFpbjoKICAgIC8vIC0gZWxlbWVudHMKICAgIC8vIC0gdGV4dAogICAgLy8gLSBDREFUQSBzZWN0aW9ucwogICAgLy8gLSBjb21tZW50cwogICAgZnVuY3Rpb24gcGFyc2VFbGVtZW50QmxvY2soc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGlmKHN0cmVhbS5lYXQoIjwiKSkgewogICAgICAgICAgICBpZihzdHJlYW0ubWF0Y2goIj8iKSkgewogICAgICAgICAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIFRBR19JTlNUUlVDVElPTik7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uU3RhcnRUYWc7CiAgICAgICAgICAgICAgICByZXR1cm4gU1RZTEVfSU5TVFJVQ1RJT047CiAgICAgICAgICAgIH0gZWxzZSBpZihzdHJlYW0ubWF0Y2goIiEtLSIpKSB7CiAgICAgICAgICAgICAgICAvLyBuZXcgY29udGV4dDogY29tbWVudAogICAgICAgICAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIFRBR19DT01NRU5UKTsKICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBpbkJsb2NrKFNUWUxFX0NPTU1FTlQsICItLT4iLAogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbnRleHQgPT0gbnVsbCA/IHBhcnNlRG9jdW1lbnQgOiBwYXJzZUVsZW1lbnRCbG9jaykpOwogICAgICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLm1hdGNoKCIhW0NEQVRBWyIpKSB7CiAgICAgICAgICAgICAgICAvLyBuZXcgY29udGV4dDogQ0RBVEEgc2VjdGlvbgogICAgICAgICAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIFRBR19DREFUQSk7CiAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgaW5CbG9jayhTVFlMRV9URVhULCAiXV0+IiwKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5jb250ZXh0ID09IG51bGwgPyBwYXJzZURvY3VtZW50IDogcGFyc2VFbGVtZW50QmxvY2spKTsKICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmVhbS5lYXRTcGFjZSgpIHx8IHN0cmVhbS5lb2woKSApIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50VGFnTmFtZTsKICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9FTEVNRU5UX05BTUU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBuZXcgY29udGV4dDogdGV4dAogICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgVEFHX1RFWFQpOwogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlVGV4dDsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gcGFyc2VUZXh0KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tePF0vKTsKICAgICAgICBpZighc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgIC8vIHdlIGNhbm5vdCBwb3NzaWJseSBiZSBpbiB0aGUgZG9jdW1lbnQgY29udGV4dCwKICAgICAgICAgICAgLy8ganVzdCBpbnNpZGUgYW4gZWxlbWVudCBibG9jawogICAgICAgICAgICBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnRCbG9jazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFNUWUxFX1RFWFQ7CiAgICB9CgogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAvLyBjb250ZXh0OiBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMKICAgIC8vCiAgICAvLyBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgKFBJcykgYWxsb3cgZG9jdW1lbnRzIHRvIGNvbnRhaW4gaW5zdHJ1Y3Rpb25zIGZvciBhcHBsaWNhdGlvbnMuCiAgICAvLyBQSSBmb3JtYXQ6IDw/bmFtZSBkYXRhPz4KICAgIC8vIC0gJ25hbWUnIGNhbiBiZSBhbnl0aGluZyBvdGhlciB0aGFuICd4bWwnIChjYXNlLWluc2Vuc2l0aXZlKQogICAgLy8gLSAnZGF0YScgY2FuIGJlIGFueXRoaW5nIHdoaWNoIGRvZXNuJ3QgY29udGFpbiAnPz4nCiAgICAvLyBYTUwgZGVjbGFyYXRpb24gaXMgYSBzcGVjaWFsIFBJIChzZWUgWE1MIGRlY2xhcmF0aW9uIGNvbnRleHQgYmVsb3cpCiAgICBmdW5jdGlvbiBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvblN0YXJ0VGFnKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZihzdHJlYW0ubWF0Y2goInhtbCIsIHRydWUsIHRydWUpKSB7CiAgICAgICAgICAgIC8vIHhtbCBkZWNsYXJhdGlvbgogICAgICAgICAgICBpZihzdGF0ZS5saW5lTnVtYmVyID4gMSB8fCBzdHJlYW0ucG9zID4gNSkgewogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZURvY3VtZW50OwogICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZURlY2xhcmF0aW9uVmVyc2lvbjsKICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gcmVndWxhciBwcm9jZXNzaW5nIGluc3RydWN0aW9uCiAgICAgICAgaWYoaXNUb2tlblNlcGFyYXRlZChzdHJlYW0pIHx8IHN0cmVhbS5tYXRjaCgiPz4iKSkgewogICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3BhY2UgYWZ0ZXIgdGhlIHN0YXJ0LXRhZywgb3Igbm90aGluZyBidXQgdGhlIGVuZC10YWcKICAgICAgICAgICAgLy8gZWl0aGVyIHdheSAtIGVycm9yIQogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRG9jdW1lbnQ7CiAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgIH0KCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbkJvZHk7CiAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgfQoKICAgIGZ1bmN0aW9uIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uQm9keShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXj9dLyk7CiAgICAgICAgaWYoc3RyZWFtLmVhdCgiPyIpKSB7CiAgICAgICAgICAgIGlmKHN0cmVhbS5lYXQoIj4iKSkgewogICAgICAgICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHN0YXRlLmNvbnRleHQgPT0gbnVsbCA/IHBhcnNlRG9jdW1lbnQgOiBwYXJzZUVsZW1lbnRCbG9jazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gU1RZTEVfSU5TVFJVQ1RJT047CiAgICB9CgogICAgCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIGNvbnRleHQ6IFhNTCBkZWNsYXJhdGlvbgogICAgLy8KICAgIC8vIFhNTCBkZWNsYXJhdGlvbiBpcyBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKICAgIC8vIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyIgPz4KICAgIC8vIC0gbXVzdCBzdGFydCBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBmaXJzdCBsaW5lCiAgICAvLyAtIG1heSBzcGFuIG11bHRpcGxlIGxpbmVzCiAgICAvLyAtIG11c3QgaW5jbHVkZSAndmVyc2lvbicKICAgIC8vIC0gbWF5IGluY2x1ZGUgJ2VuY29kaW5nJyBhbmQgJ3N0YW5kYWxvbmUnIChpbiB0aGF0IG9yZGVyIGFmdGVyICd2ZXJzaW9uJykKICAgIC8vIC0gYXR0cmlidXRlIG5hbWVzIG11c3QgYmUgbG93ZXJjYXNlCiAgICAvLyAtIGNhbm5vdCBjb250YWluIGFueXRoaW5nIGVsc2Ugb24gdGhlIGxpbmUKICAgIGZ1bmN0aW9uIHBhcnNlRGVjbGFyYXRpb25WZXJzaW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRGVjbGFyYXRpb25FbmNvZGluZzsKICAgICAgICAKICAgICAgICBpZihpc1Rva2VuU2VwYXJhdGVkKHN0cmVhbSkgJiYgc3RyZWFtLm1hdGNoKC9edmVyc2lvbiggKSo9KCApKiIoW2EtekEtWjAtOV8uOl18XC0pKyIvKSkgewogICAgICAgICAgICByZXR1cm4gU1RZTEVfSU5TVFJVQ1RJT047CiAgICAgICAgfQogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICB9CgogICAgZnVuY3Rpb24gcGFyc2VEZWNsYXJhdGlvbkVuY29kaW5nKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRGVjbGFyYXRpb25TdGFuZGFsb25lOwogICAgICAgIAogICAgICAgIGlmKGlzVG9rZW5TZXBhcmF0ZWQoc3RyZWFtKSAmJiBzdHJlYW0ubWF0Y2goL15lbmNvZGluZyggKSo9KCApKiJbQS1aYS16XShbQS1aYS16MC05Ll9dfFwtKSoiLykpIHsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZURlY2xhcmF0aW9uU3RhbmRhbG9uZShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZURlY2xhcmF0aW9uRW5kVGFnOwogICAgICAgIAogICAgICAgIGlmKGlzVG9rZW5TZXBhcmF0ZWQoc3RyZWFtKSAmJiBzdHJlYW0ubWF0Y2goL15zdGFuZGFsb25lKCApKj0oICkqIih5ZXN8bm8pIi8pKSB7CiAgICAgICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gcGFyc2VEZWNsYXJhdGlvbkVuZFRhZyhzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZURvY3VtZW50OwogICAgICAgIAogICAgICAgIGlmKHN0cmVhbS5tYXRjaCgiPz4iKSAmJiBzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgICAgICB9CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgIH0KCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIHJldHVybmVkIG9iamVjdAogICAgcmV0dXJuIHsKICAgICAgICBlbGVjdHJpY0NoYXJzOiAiL1siLAogICAgICAgIAogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdG9rZW5pemU6IHBhcnNlRG9jdW1lbnQsCiAgICAgICAgICAgICAgICB0b2tQYXJhbXM6IHt9LAogICAgICAgICAgICAgICAgbGluZU51bWJlcjogMCwKICAgICAgICAgICAgICAgIGxpbmVFcnJvcjogZmFsc2UsCiAgICAgICAgICAgICAgICBjb250ZXh0OiBudWxsLAogICAgICAgICAgICAgICAgaW5kZW50ZWQ6IDAKICAgICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICBpZihzdHJlYW0uc29sKCkpIHsKICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgYSBuZXcgbGluZQogICAgICAgICAgICAgICAgc3RhdGUubGluZU51bWJlcisrOwogICAgICAgICAgICAgICAgc3RhdGUubGluZUVycm9yID0gZmFsc2U7CiAgICAgICAgICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBlYXQgYWxsICh0aGUgc3BhY2VzKSB5b3UgY2FuCiAgICAgICAgICAgIGlmKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKCiAgICAgICAgICAgIC8vIHJ1biB0aGUgY3VycmVudCB0b2tlbml6ZSBmdW5jdGlvbiwgYWNjb3JkaW5nIHRvIHRoZSBzdGF0ZQogICAgICAgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIGlzIHRoZXJlIGFuIGVycm9yIHNvbWV3aGVyZSBpbiB0aGUgbGluZT8KICAgICAgICAgICAgc3RhdGUubGluZUVycm9yID0gKHN0YXRlLmxpbmVFcnJvciB8fCBzdHlsZSA9PSAiZXJyb3IiKTsKCiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGJsYW5rTGluZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICAgICAgLy8gYmxhbmsgbGluZXMgYXJlIGxpbmVzIHRvbyEKICAgICAgICAgICAgc3RhdGUubGluZU51bWJlcisrOwogICAgICAgICAgICBzdGF0ZS5saW5lRXJyb3IgPSBmYWxzZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZihzdGF0ZS5jb250ZXh0KSB7CiAgICAgICAgICAgICAgICBpZihzdGF0ZS5jb250ZXh0Lm5vSW5kZW50ID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgaW5kZW50IC0gbm8gcmV0dXJuIHZhbHVlIGF0IGFsbAogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKHRleHRBZnRlci5tYXRjaCgvXjxcLy4qLykpIHsKICAgICAgICAgICAgICAgICAgICAvLyBlbmQtdGFnIC0gaW5kZW50IGJhY2sgdG8gbGFzdCBjb250ZXh0CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQuaW5kZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYodGV4dEFmdGVyLm1hdGNoKC9ePCFcW0NEQVRBXFsvKSkgewogICAgICAgICAgICAgICAgICAgIC8vIGEgc3RhbmQtYWxvbmUgQ0RBVEEgc3RhcnQtdGFnIC0gaW5kZW50IGJhY2sgdG8gY29sdW1uIDAKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBpbmRlbnQgdG8gbGFzdCBjb250ZXh0ICsgcmVndWxhciBpbmRlbnQgdW5pdAogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmNvbnRleHQuaW5kZW50ICsgaW5kZW50VW5pdDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGNvbXBhcmVTdGF0ZXM6IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgICAgaWYgKGEuaW5kZW50ZWQgIT0gYi5pbmRlbnRlZCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBmb3IgKHZhciBjYSA9IGEuY29udGV4dCwgY2IgPSBiLmNvbnRleHQ7IDsgY2EgPSBjYS5wcmV2LCBjYiA9IGNiLnByZXYpIHsKICAgICAgICAgICAgICAgIGlmICghY2EgfHwgIWNiKSByZXR1cm4gY2EgPT0gY2I7CiAgICAgICAgICAgICAgICBpZiAoY2EudGFnTmFtZSAhPSBjYi50YWdOYW1lKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwgInB1cmV4bWwiKTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3htbCIsICJwdXJleG1sIik7Cg==]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFlBTUwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InlhbWwuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOyB9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogWUFNTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+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/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDb2RlTWlycm9yIDIKCkNvZGVNaXJyb3IgMiBpcyBhIHJld3JpdGUgb2YgW0NvZGVNaXJyb3IKMV0oaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yKS4gVGhlIGRvY3MgbGl2ZQpbaGVyZV0oaHR0cDovL2NvZGVtaXJyb3IubmV0L2RvYy9tYW51YWwuaHRtbCksIGFuZCB0aGUgcHJvamVjdCBwYWdlIGlzCltodHRwOi8vY29kZW1pcnJvci5uZXQvXShodHRwOi8vY29kZW1pcnJvci5uZXQvKS4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/test/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRlc3QgU3VpdGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLm9rIHtjb2xvcjogIzBlMDt9CiAgICAgIC5mYWlsdXJlIHtjb2xvcjogI2UwMDt9CiAgICAgIC5lcnJvciB7Y29sb3I6ICNjOTA7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVGVzdCBTdWl0ZTwvaDE+CgogICAgPHA+QSBsaW1pdGVkIHNldCBvZiBwcm9ncmFtbWF0aWMgc2FuaXR5IHRlc3RzIGZvciBDb2RlTWlycm9yLjwvcD4KCiAgICA8cHJlIGlkPW91dHB1dD48L3ByZT4KCiAgICA8ZGl2IHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iIGlkPXRlc3Rncm91bmQ+CiAgICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+PC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9b2sgbmFtZT1zdWJtaXQ+PC9mb3JtPgogICAgPC9kaXY+CgogICAgPHNjcmlwdCBzcmM9InRlc3QuanMiPjwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/test.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHRlc3RzID0gW107Cgp0ZXN0KCJmcm9tVGV4dEFyZWEiLCBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHRlLnZhbHVlID0gIkNPTlRFTlQiOwogIHZhciBjbSA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlKTsKICBpcyghdGUub2Zmc2V0SGVpZ2h0KTsKICBlcShjbS5nZXRWYWx1ZSgpLCAiQ09OVEVOVCIpOwogIGNtLnNldFZhbHVlKCJmb29cbmJhciIpOwogIGVxKGNtLmdldFZhbHVlKCksICJmb29cbmJhciIpOwogIGNtLnNhdmUoKTsKICBpcygvXmZvb1xyP1xuYmFyJC8udGVzdCh0ZS52YWx1ZSkpOwogIGNtLnNldFZhbHVlKCJ4eHgiKTsKICBjbS50b1RleHRBcmVhKCk7CiAgaXModGUub2Zmc2V0SGVpZ2h0KTsKICBlcSh0ZS52YWx1ZSwgInh4eCIpOwp9KTsKCnRlc3RDTSgiZ2V0UmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMjM0Iik7CiAgZXEoY20uZ2V0TGluZSgxKSwgIjU2NzgiKTsKICBlcShjbS5nZXRMaW5lKDIpLCBudWxsKTsKICBlcShjbS5nZXRMaW5lKC0xKSwgbnVsbCk7CiAgZXEoY20uZ2V0UmFuZ2Uoe2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDAsIGNoOiAzfSksICIxMjMiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IC0xfSwge2xpbmU6IDAsIGNoOiAyMDB9KSwgIjEyMzQiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IDJ9LCB7bGluZTogMSwgY2g6IDJ9KSwgIjM0XG41NiIpOwogIGVxKGNtLmdldFJhbmdlKHtsaW5lOiAxLCBjaDogMn0sIHtsaW5lOiAxMDAsIGNoOiAwfSksICI3OCIpOwp9LCB7dmFsdWU6ICIxMjM0XG41Njc4In0pOwoKdGVzdENNKCJyZXBsYWNlUmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldFZhbHVlKCksICIiKTsKICBjbS5yZXBsYWNlUmFuZ2UoImZvb1xuIiwge2xpbmU6IDAsIGNoOiAwfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZvb1xuIik7CiAgY20ucmVwbGFjZVJhbmdlKCJhXG5iIiwge2xpbmU6IDAsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZhXG5ib29cbiIpOwogIGVxKGNtLmxpbmVDb3VudCgpLCAzKTsKICBjbS5yZXBsYWNlUmFuZ2UoInh5enp5Iiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgInh5enp5b29cbiIpOwogIGNtLnJlcGxhY2VSYW5nZSgiYWJjIiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEwLCBjaDogMH0pOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5saW5lQ291bnQoKSwgMSk7Cn0pOwoKdGVzdENNKCJzZWxlY3Rpb24iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDR9LCB7bGluZTogMiwgY2g6IDJ9KTsKICBpcyhjbS5zb21ldGhpbmdTZWxlY3RlZCgpKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgIjExXG4yMjIyMjJcbjMzIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKGZhbHNlKSwge2xpbmU6IDIsIGNoOiAyfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMCwgY2g6IDR9KTsKICBjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IDEsIGNoOiAwfSk7CiAgaXMoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDB9KTsKICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJhYmMiKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgImFiYyIpOwogIGVxKGNtLmdldFZhbHVlKCksICIxMTExMTFcbmFiYzIyMjIyMlxuMzMzMzMzIik7CiAgY20ucmVwbGFjZVNlbGVjdGlvbigiZGVmIiwgImVuZCIpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDN9KTsKICBjbS5zZXRDdXJzb3Ioe2xpbmU6IDIsIGNoOiAxfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMiwgY2g6IDF9KTsKICBjbS5zZXRDdXJzb3IoMSwgMik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDJ9KTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgibGluZXMiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMTExMTEiKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiMjIyMjIyIik7CiAgZXEoY20uZ2V0TGluZSgtMSksIG51bGwpOwogIGNtLnJlbW92ZUxpbmUoMSk7CiAgY20uc2V0TGluZSgxLCAiYWJjIik7CiAgZXEoY20uZ2V0VmFsdWUoKSwgIjExMTExMVxuYWJjIik7Cn0sIHt2YWx1ZTogIjExMTExMVxuMjIyMjIyXG4zMzMzMzMifSk7Cgp0ZXN0Q00oImluZGVudCIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uaW5kZW50TGluZSgxKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiICAgYmxhaCgpOyIpOwogIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDgpOwogIGNtLmluZGVudExpbmUoMSk7CiAgZXEoY20uZ2V0TGluZSgxKSwgIlx0YmxhaCgpOyIpOwp9LCB7dmFsdWU6ICJpZiAoeCkge1xuYmxhaCgpO1xufSIsIGluZGVudFVuaXQ6IDMsIGluZGVudFdpdGhUYWJzOiB0cnVlLCB0YWJTaXplOiA4fSk7Cgp0ZXN0KCJkZWZhdWx0cyIsIGZ1bmN0aW9uKCkgewogIHZhciBvbGRkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHMsIGRlZnMgPSBDb2RlTWlycm9yLmRlZmF1bHRzID0ge307CiAgZm9yICh2YXIgb3B0IGluIG9sZGRlZmF1bHRzKSBkZWZzW29wdF0gPSBvbGRkZWZhdWx0c1tvcHRdOwogIGRlZnMuaW5kZW50VW5pdCA9IDU7CiAgZGVmcy52YWx1ZSA9ICJ1dSI7CiAgZGVmcy5lbnRlck1vZGUgPSAia2VlcCI7CiAgZGVmcy50YWJpbmRleCA9IDU1OwogIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSk7CiAgdHJ5IHsKICAgIGVxKGNtLmdldE9wdGlvbigiaW5kZW50VW5pdCIpLCA1KTsKICAgIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDEwKTsKICAgIGVxKGRlZnMuaW5kZW50VW5pdCwgNSk7CiAgICBlcShjbS5nZXRWYWx1ZSgpLCAidXUiKTsKICAgIGVxKGNtLmdldE9wdGlvbigiZW50ZXJNb2RlIiksICJrZWVwIik7CiAgICBlcShjbS5nZXRJbnB1dEZpZWxkKCkudGFiSW5kZXgsIDU1KTsKICB9CiAgZmluYWxseSB7CiAgICBDb2RlTWlycm9yLmRlZmF1bHRzID0gb2xkZGVmYXVsdHM7CiAgICBwbGFjZS5yZW1vdmVDaGlsZChjbS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICB9Cn0pOwoKdGVzdENNKCJsaW5lSW5mbyIsIGZ1bmN0aW9uKGNtKSB7CiAgZXEoY20ubGluZUluZm8oLTEpLCBudWxsKTsKICB2YXIgbGggPSBjbS5zZXRNYXJrZXIoMSwgIkZPTyIsICJiYXIiKTsKICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKDEpOwogIGVxKGluZm8udGV4dCwgIjIyMjIyMiIpOwogIGVxKGluZm8ubWFya2VyVGV4dCwgIkZPTyIpOwogIGVxKGluZm8ubWFya2VyQ2xhc3MsICJiYXIiKTsKICBlcShpbmZvLmxpbmUsIDEpOwogIGVxKGNtLmxpbmVJbmZvKDIpLm1hcmtlclRleHQsIG51bGwpOwogIGNtLmNsZWFyTWFya2VyKGxoKTsKICBlcShjbS5saW5lSW5mbygxKS5tYXJrZXJUZXh0LCBudWxsKTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgiY29vcmRzIiwgZnVuY3Rpb24oY20pIHsKICB2YXIgc2Nyb2xsZXIgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIkNvZGVNaXJyb3Itc2Nyb2xsIilbMF07CiAgc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKICB2YXIgY29udGVudCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgMjAwOyArK2kpIGNvbnRlbnQucHVzaCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiArIGkpOwogIGNtLnNldFZhbHVlKGNvbnRlbnQuam9pbigiXG4iKSk7CiAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDAsIGNoOiAwfSk7CiAgdmFyIGJvdCA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDIwMCwgY2g6IDMwfSk7CiAgaXModG9wLnggPCBib3QueCk7CiAgaXModG9wLnkgPCBib3QueSk7CiAgaXModG9wLnkgPCB0b3AueUJvdCk7CiAgc2Nyb2xsZXIuc2Nyb2xsVG9wID0gMTAwOwogIGNtLnJlZnJlc2goKTsKICB2YXIgdG9wMiA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDAsIGNoOiAwfSk7CiAgaXModG9wLnkgPiB0b3AyLnkpOwogIGVxKHRvcC54LCB0b3AyLngpOwp9KTsKCnRlc3RDTSgiY29vcmRzQ2hhciIsIGZ1bmN0aW9uKGNtKSB7CiAgdmFyIGNvbnRlbnQgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDcwOyArK2kpIGNvbnRlbnQucHVzaCgieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIpOwogIGNtLnNldFZhbHVlKGNvbnRlbnQuam9pbigiXG4iKSk7CiAgZm9yICh2YXIgeCA9IDA7IHggPCAzNTsgeCArPSAyKSB7CiAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDcwOyB5ICs9IDUpIHsKICAgICAgY20uc2V0Q3Vyc29yKHksIHgpOwogICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcihjbS5jaGFyQ29vcmRzKHtsaW5lOiB5LCBjaDogeH0pKTsKICAgICAgZXEocG9zLmxpbmUsIHkpOwogICAgICBlcShwb3MuY2gsIHgpOwogICAgfQogIH0KfSk7Cgp0ZXN0Q00oInBvc0Zyb21JbmRleCIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uc2V0VmFsdWUoCiAgICAiVGhpcyBmdW5jdGlvbiBzaG91bGRcbiIgKwogICAgImNvbnZlcnQgYSB6ZXJvIGJhc2VkIGluZGV4XG4iICsKICAgICJ0byBsaW5lIGFuZCBjaC4iCiAgKTsKCiAgdmFyIGV4YW1wbGVzID0gWwogICAgeyBpbmRleDogLTEsIGxpbmU6IDAsIGNoOiAwICB9LCAvLyA8LSBUZXN0cyBjbGlwcGluZwogICAgeyBpbmRleDogMCwgIGxpbmU6IDAsIGNoOiAwICB9LAogICAgeyBpbmRleDogMTAsIGxpbmU6IDAsIGNoOiAxMCB9LAogICAgeyBpbmRleDogMzksIGxpbmU6IDEsIGNoOiAxOCB9LAogICAgeyBpbmRleDogNTUsIGxpbmU6IDIsIGNoOiA3ICB9LAogICAgeyBpbmRleDogNjMsIGxpbmU6IDIsIGNoOiAxNSB9LAogICAgeyBpbmRleDogNjQsIGxpbmU6IDIsIGNoOiAxNSB9ICAvLyA8LSBUZXN0cyBjbGlwcGluZwogIF07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZXhhbXBsZXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBleGFtcGxlID0gZXhhbXBsZXNbaV07CiAgICB2YXIgcG9zID0gY20ucG9zRnJvbUluZGV4KGV4YW1wbGUuaW5kZXgpOwogICAgZXEocG9zLmxpbmUsIGV4YW1wbGUubGluZSk7CiAgICBlcShwb3MuY2gsIGV4YW1wbGUuY2gpOwogICAgaWYgKGV4YW1wbGUuaW5kZXggPj0gMCAmJiBleGFtcGxlLmluZGV4IDwgNjQpCiAgICAgIGVxKGNtLmluZGV4RnJvbVBvcyhwb3MpLCBleGFtcGxlLmluZGV4KTsKICB9ICAKfSk7Cgp0ZXN0Q00oInVuZG8iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldExpbmUoMCwgImRlZiIpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDApOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMSk7CiAgY20ucmVkbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJkZWYiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDEpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMCk7CiAgY20uc2V0VmFsdWUoIjFcblxuXG4yIik7CiAgY20uY2xlYXJIaXN0b3J5KCk7CiAgZXEoY20uaGlzdG9yeVNpemUoKS51bmRvLCAwKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgIGNtLnJlcGxhY2VSYW5nZSgiYSIsIHtsaW5lOiAwLCBjaDogMH0pOwogICAgY20ucmVwbGFjZVJhbmdlKCJiIiwge2xpbmU6IDMsIGNoOiAwfSk7CiAgfQogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgNDApOwogIGZvciAodmFyIGkgPSAwOyBpIDwgMzg7ICsraSkgY20udW5kbygpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMik7CiAgZXEoY20uaGlzdG9yeVNpemUoKS5yZWRvLCAzOCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImExXG5cblxuYjIiKTsKICBjbS5zZXRPcHRpb24oInVuZG9EZXB0aCIsIDEwKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgIGNtLnJlcGxhY2VSYW5nZSgiYSIsIHtsaW5lOiAwLCBjaDogMH0pOwogICAgY20ucmVwbGFjZVJhbmdlKCJiIiwge2xpbmU6IDMsIGNoOiAwfSk7CiAgfQogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMTApOwp9LCB7dmFsdWU6ICJhYmMifSk7Cgp0ZXN0Q00oInVuZG9NdWx0aUxpbmUiLCBmdW5jdGlvbihjbSkgewogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjAsIGNoOiAwfSk7CiAgY20ucmVwbGFjZVJhbmdlKCJ5Iiwge2xpbmU6MSwgY2g6IDB9KTsKICBjbS51bmRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImFiY1xuZGVmXG5naGkiKTsKICBjbS5yZXBsYWNlUmFuZ2UoInkiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjAsIGNoOiAwfSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmNcbmRlZlxuZ2hpIik7CiAgY20ucmVwbGFjZVJhbmdlKCJ5Iiwge2xpbmU6MiwgY2g6IDB9KTsKICBjbS5yZXBsYWNlUmFuZ2UoIngiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieiIsIHtsaW5lOjIsIGNoOiAwfSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmNcbmRlZlxuZ2hpIik7Cn0sIHt2YWx1ZTogImFiY1xuZGVmXG5naGkifSk7Cgp0ZXN0Q00oIm1hcmtUZXh0U2luZ2xlTGluZSIsIGZ1bmN0aW9uKGNtKSB7CiAgZm9yRWFjaChbe2E6IDAsIGI6IDEsIGM6ICIiLCBmOiAyLCB0OiA1fSwKICAgICAgICAgICB7YTogMCwgYjogNCwgYzogIiIsIGY6IDAsIHQ6IDJ9LAogICAgICAgICAgIHthOiAxLCBiOiAyLCBjOiAieCIsIGY6IDMsIHQ6IDZ9LAogICAgICAgICAgIHthOiA0LCBiOiA1LCBjOiAiIiwgZjogMywgdDogNX0sCiAgICAgICAgICAge2E6IDQsIGI6IDUsIGM6ICJ4eCIsIGY6IDMsIHQ6IDd9LAogICAgICAgICAgIHthOiAyLCBiOiA1LCBjOiAiIiwgZjogMiwgdDogM30sCiAgICAgICAgICAge2E6IDIsIGI6IDUsIGM6ICJhYmNkIiwgZjogNiwgdDogN30sCiAgICAgICAgICAge2E6IDIsIGI6IDYsIGM6ICJ4IiwgZjogbnVsbCwgdDogbnVsbH0sCiAgICAgICAgICAge2E6IDMsIGI6IDYsIGM6ICIiLCBmOiBudWxsLCB0OiBudWxsfSwKICAgICAgICAgICB7YTogMCwgYjogOSwgYzogImhhbGxvIiwgZjogbnVsbCwgdDogbnVsbH0sCiAgICAgICAgICAge2E6IDQsIGI6IDYsIGM6ICJ4IiwgZjogMywgdDogNH0sCiAgICAgICAgICAge2E6IDQsIGI6IDgsIGM6ICIiLCBmOiAzLCB0OiA0fSwKICAgICAgICAgICB7YTogNiwgYjogNiwgYzogImEiLCBmOiAzLCB0OiA2fSwKICAgICAgICAgICB7YTogOCwgYjogOSwgYzogIiIsIGY6IDMsIHQ6IDZ9XSwgZnVuY3Rpb24odGVzdCkgewogICAgY20uc2V0VmFsdWUoIjEyMzQ1Njc4OTAiKTsKICAgIHZhciByID0gY20ubWFya1RleHQoe2xpbmU6IDAsIGNoOiAzfSwge2xpbmU6IDAsIGNoOiA2fSwgImZvbyIpOwogICAgY20ucmVwbGFjZVJhbmdlKHRlc3QuYywge2xpbmU6IDAsIGNoOiB0ZXN0LmF9LCB7bGluZTogMCwgY2g6IHRlc3QuYn0pOwogICAgdmFyIGYgPSByLmZpbmQoKTsKICAgIGVxKGYuZnJvbSAmJiBmLmZyb20uY2gsIHRlc3QuZik7IGVxKGYudG8gJiYgZi50by5jaCwgdGVzdC50KTsKICB9KTsKfSk7Cgp0ZXN0Q00oIm1hcmtUZXh0TXVsdGlMaW5lIiwgZnVuY3Rpb24oY20pIHsKICBmdW5jdGlvbiBwKHYpIHsgcmV0dXJuIHYgJiYge2xpbmU6IHZbMF0sIGNoOiB2WzFdfTsgfQogIGZvckVhY2goW3thOiBbMCwgMF0sIGI6IFswLCA1XSwgYzogIiIsIGY6IFswLCAwXSwgdDogWzIsIDVdfSwKICAgICAgICAgICB7YTogWzAsIDFdLCBiOiBbMCwgMTBdLCBjOiAiIiwgZjogWzAsIDFdLCB0OiBbMiwgNV19LAogICAgICAgICAgIHthOiBbMCwgNV0sIGI6IFswLCA2XSwgYzogIngiLCBmOiBbMCwgNl0sIHQ6IFsyLCA1XX0sCiAgICAgICAgICAge2E6IFswLCAwXSwgYjogWzEsIDBdLCBjOiAiIiwgZjogWzAsIDBdLCB0OiBbMSwgNV19LAogICAgICAgICAgIHthOiBbMCwgNl0sIGI6IFsyLCA0XSwgYzogIiIsIGY6IFswLCA1XSwgdDogWzAsIDddfSwKICAgICAgICAgICB7YTogWzAsIDZdLCBiOiBbMiwgNF0sIGM6ICJhYSIsIGY6IFswLCA1XSwgdDogWzAsIDldfSwKICAgICAgICAgICB7YTogWzEsIDJdLCBiOiBbMSwgOF0sIGM6ICIiLCBmOiBbMCwgNV0sIHQ6IFsyLCA1XX0sCiAgICAgICAgICAge2E6IFswLCA1XSwgYjogWzIsIDVdLCBjOiAieHgiLCBmOiBudWxsLCB0OiBudWxsfSwKICAgICAgICAgICB7YTogWzAsIDBdLCBiOiBbMiwgMTBdLCBjOiAieCIsIGY6IG51bGwsIHQ6IG51bGx9LAogICAgICAgICAgIHthOiBbMSwgNV0sIGI6IFsyLCA1XSwgYzogIiIsIGY6IFswLCA1XSwgdDogWzEsIDVdfSwKICAgICAgICAgICB7YTogWzIsIDBdLCBiOiBbMiwgM10sIGM6ICIiLCBmOiBbMCwgNV0sIHQ6IFsyLCAyXX0sCiAgICAgICAgICAge2E6IFsyLCA1XSwgYjogWzMsIDBdLCBjOiAiYVxuYiIsIGY6IFswLCA1XSwgdDogWzIsIDVdfSwKICAgICAgICAgICB7YTogWzIsIDNdLCBiOiBbMywgMF0sIGM6ICJ4IiwgZjogWzAsIDVdLCB0OiBbMiwgM119LAogICAgICAgICAgIHthOiBbMSwgMV0sIGI6IFsxLCA5XSwgYzogIjFcbjJcbjMiLCBmOiBbMCwgNV0sIHQ6IFs0LCA1XX1dLCBmdW5jdGlvbih0ZXN0KSB7CiAgICBjbS5zZXRWYWx1ZSgiYWFhYWFhYWFhYVxuYmJiYmJiYmJiYlxuY2NjY2NjY2NjY1xuZGRkZGRkZGRcbiIpOwogICAgdmFyIHIgPSBjbS5tYXJrVGV4dCh7bGluZTogMCwgY2g6IDV9LCB7bGluZTogMiwgY2g6IDV9LCAiZm9vIik7CiAgICBjbS5yZXBsYWNlUmFuZ2UodGVzdC5jLCBwKHRlc3QuYSksIHAodGVzdC5iKSk7CiAgICB2YXIgZiA9IHIuZmluZCgpOwogICAgZXFQb3MoZi5mcm9tLCBwKHRlc3QuZikpOyBlcVBvcyhmLnRvLCBwKHRlc3QudCkpOwogIH0pOwp9KTsKCnRlc3RDTSgiYm9va21hcmsiLCBmdW5jdGlvbihjbSkgewogIGZ1bmN0aW9uIHAodikgeyByZXR1cm4gdiAmJiB7bGluZTogdlswXSwgY2g6IHZbMV19OyB9CiAgZm9yRWFjaChbe2E6IFsxLCAwXSwgYjogWzEsIDFdLCBjOiAiIiwgZDogWzEsIDRdfSwKICAgICAgICAgICB7YTogWzEsIDFdLCBiOiBbMSwgMV0sIGM6ICJ4eCIsIGQ6IFsxLCA3XX0sCiAgICAgICAgICAge2E6IFsxLCA0XSwgYjogWzEsIDVdLCBjOiAiYWIiLCBkOiBbMSwgNl19LAogICAgICAgICAgIHthOiBbMSwgNF0sIGI6IFsxLCA2XSwgYzogIiIsIGQ6IG51bGx9LAogICAgICAgICAgIHthOiBbMSwgNV0sIGI6IFsxLCA2XSwgYzogImFiYyIsIGQ6IFsxLCA1XX0sCiAgICAgICAgICAge2E6IFsxLCA2XSwgYjogWzEsIDhdLCBjOiAiIiwgZDogWzEsIDVdfSwKICAgICAgICAgICB7YTogWzEsIDRdLCBiOiBbMSwgNF0sIGM6ICJcblxuIiwgZDogWzMsIDFdfV0sIGZ1bmN0aW9uKHRlc3QpIHsKICAgIGNtLnNldFZhbHVlKCIxMjM0NTY3ODkwXG4xMjM0NTY3ODkwXG4xMjM0NTY3ODkwIik7CiAgICB2YXIgYiA9IGNtLnNldEJvb2ttYXJrKHtsaW5lOiAxLCBjaDogNX0pOwogICAgY20ucmVwbGFjZVJhbmdlKHRlc3QuYywgcCh0ZXN0LmEpLCBwKHRlc3QuYikpOwogICAgZXFQb3MoYi5maW5kKCksIHAodGVzdC5kKSk7CiAgfSk7Cn0pOwoKLy8gU2NhZmZvbGRpbmcKCmZ1bmN0aW9uIGh0bWxFc2NhcGUoc3RyKSB7CiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bPCZdL2csIGZ1bmN0aW9uKHN0cikge3JldHVybiBzdHIgPT0gIiYiID8gIiZhbXA7IiA6ICImbHQ7Ijt9KTsKfQpmdW5jdGlvbiBmb3JFYWNoKGFyciwgZikgewogIGZvciAodmFyIGkgPSAwLCBlID0gYXJyLmxlbmd0aDsgaSA8IGU7ICsraSkgZihhcnJbaV0pOwp9CgpmdW5jdGlvbiBGYWlsdXJlKHdoeSkge3RoaXMubWVzc2FnZSA9IHdoeTt9CgpmdW5jdGlvbiB0ZXN0KG5hbWUsIHJ1bikge3Rlc3RzLnB1c2goe25hbWU6IG5hbWUsIGZ1bmM6IHJ1bn0pO30KZnVuY3Rpb24gdGVzdENNKG5hbWUsIHJ1biwgb3B0cykgewogIHRlc3QobmFtZSwgZnVuY3Rpb24oKSB7CiAgICB2YXIgcGxhY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGVzdGdyb3VuZCIpLCBjbSA9IENvZGVNaXJyb3IocGxhY2UsIG9wdHMpOwogICAgdHJ5IHtydW4oY20pO30KICAgIGZpbmFsbHkge3BsYWNlLnJlbW92ZUNoaWxkKGNtLmdldFdyYXBwZXJFbGVtZW50KCkpO30KICB9KTsKfQoKZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAgdmFyIGZhaWx1cmVzID0gW10sIHJ1biA9IDA7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7ICsraSkgewogICAgdmFyIHRlc3QgPSB0ZXN0c1tpXTsKICAgIHRyeSB7dGVzdC5mdW5jKCk7fQogICAgY2F0Y2goZSkgewogICAgICBpZiAoZSBpbnN0YW5jZW9mIEZhaWx1cmUpCiAgICAgICAgZmFpbHVyZXMucHVzaCh7dHlwZTogImZhaWx1cmUiLCB0ZXN0OiB0ZXN0Lm5hbWUsIHRleHQ6IGUubWVzc2FnZX0pOwogICAgICBlbHNlCiAgICAgICAgZmFpbHVyZXMucHVzaCh7dHlwZTogImVycm9yIiwgdGVzdDogdGVzdC5uYW1lLCB0ZXh0OiBlLnRvU3RyaW5nKCl9KTsKICAgIH0KICAgIHJ1bisrOwogIH0KICB2YXIgaHRtbCA9IFtydW4gKyAiIHRlc3RzIHJ1bi4iXTsKICBpZiAoZmFpbHVyZXMubGVuZ3RoKQogICAgZm9yRWFjaChmYWlsdXJlcywgZnVuY3Rpb24oZmFpbCkgewogICAgICBodG1sLnB1c2goZmFpbC50ZXN0ICsgJzogPHNwYW4gY2xhc3M9IicgKyBmYWlsLnR5cGUgKyAnIj4nICsgaHRtbEVzY2FwZShmYWlsLnRleHQpICsgIjwvc3Bhbj4iKTsKICAgIH0pOwogIGVsc2UgaHRtbC5wdXNoKCc8c3BhbiBjbGFzcz0ib2siPkFsbCBwYXNzZWQuPC9zcGFuPicpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRwdXQiKS5pbm5lckhUTUwgPSBodG1sLmpvaW4oIlxuIik7Cn0KCmZ1bmN0aW9uIGVxKGEsIGIsIG1zZykgewogIGlmIChhICE9IGIpIHRocm93IG5ldyBGYWlsdXJlKGEgKyAiICE9ICIgKyBiICsgKG1zZyA/ICIgKCIgKyBtc2cgKyAiKSIgOiAiIikpOwp9CmZ1bmN0aW9uIGVxUG9zKGEsIGIsIG1zZykgewogIGlmIChhID09IGIpIHJldHVybjsKICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgdGhyb3cgbmV3IEZhaWx1cmUoImNvbXBhcmluZyBwb2ludCB0byBudWxsIik7CiAgZXEoYS5saW5lLCBiLmxpbmUsIG1zZyk7CiAgZXEoYS5jaCwgYi5jaCwgbXNnKTsKfQpmdW5jdGlvbiBpcyhhLCBtc2cpIHsKICBpZiAoIWEpIHRocm93IG5ldyBGYWlsdXJlKCJhc3NlcnRpb24gZmFpbGVkIiArIChtc2cgPyAiICgiICsgbXNnICsgIikiIDogIiIpKTsKfQoKd2luZG93Lm9ubG9hZCA9IHJ1blRlc3RzOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/theme/cobalt.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtY29iYWx0IHsgYmFja2dyb3VuZDogIzAwMjI0MDsgY29sb3I6IHdoaXRlOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjYjM2NTM5ICFpbXBvcnRhbnQ7IH0KLmNtLXMtY29iYWx0IC5Db2RlTWlycm9yLWd1dHRlciB7IGJhY2tncm91bmQ6ICMwMDIyNDA7IGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNhYWE7IH0KLmNtLXMtY29iYWx0IC5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHsgY29sb3I6ICNkMGQwZDA7IH0KLmNtLXMtY29iYWx0IC5Db2RlTWlycm9yLWN1cnNvciB7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgd2hpdGUgIWltcG9ydGFudDsgfQoKLmNtLXMtY29iYWx0IHNwYW4uY20tY29tbWVudCB7IGNvbG9yOiAjMDhmOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLWF0b20geyBjb2xvcjogIzg0NWRjNDsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLWNvYmFsdCBzcGFuLmNtLWF0dHJpYnV0ZSB7IGNvbG9yOiAjZmY4MGUxOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLWtleXdvcmQgeyBjb2xvcjogI2ZmZWU4MDsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS1zdHJpbmcgeyBjb2xvcjogIzNhZDkwMDsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS1tZXRhIHsgY29sb3I6ICNmZjlkMDA7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tdmFyaWFibGUtMiwgLmNtLXMtY29iYWx0IHNwYW4uY20tdGFnIHsgY29sb3I6ICM5ZWZmZmY7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tdmFyaWFibGUtMywgLmNtLXMtY29iYWx0IHNwYW4uY20tZGVmIHsgY29sb3I6IHdoaXRlOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLWVycm9yIHsgY29sb3I6ICM5ZDFlMTU7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tYnJhY2tldCB7IGNvbG9yOiAjZDhkOGQ4OyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLWJ1aWx0aW4sIC5jbS1zLWNvYmFsdCBzcGFuLmNtLXNwZWNpYWwgeyBjb2xvcjogI2ZmOWU1OTsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS1saW5rIHsgY29sb3I6ICM4NDVkYzQ7IH0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/eclipse.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZWNsaXBzZSBzcGFuLmNtLW1ldGEge2NvbG9yOiAjRkYxNzE3O30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWtleXdvcmQgeyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICM3RjAwNTU7IH0KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWF0b20ge2NvbG9yOiAjMjE5O30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tZGVmIHtjb2xvcjogIzAwZjt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDAwMEMwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjMDAwMEMwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXByb3BlcnR5IHtjb2xvcjogYmxhY2s7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tb3BlcmF0b3Ige2NvbG9yOiBibGFjazt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogIzNGN0Y1Rjt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjMkEwMEZGO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1MDt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2NjNzt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS10YWcge2NvbG9yOiAjMTcwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tbGluayB7Y29sb3I6ICMyMTk7fQoKLmNtLXMtZWNsaXBzZSAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewoJYm9yZGVyOjFweCBzb2xpZCBncmV5OwoJY29sb3I6YmxhY2sgIWltcG9ydGFudDs7Cn0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/elegant.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZWxlZ2FudCBzcGFuLmNtLW51bWJlciwgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLXN0cmluZywgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWF0b20ge2NvbG9yOiAjNzYyO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWNvbW1lbnQge2NvbG9yOiAjMjYyO2ZvbnQtc3R5bGU6IGl0YWxpYzt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS1tZXRhIHtjb2xvcjogIzU1NTtmb250LXN0eWxlOiBpdGFsaWM7fQouY20tcy1lbGVnYW50IHNwYW4uY20tdmFyaWFibGUge2NvbG9yOiBibGFjazt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS12YXJpYWJsZS0yIHtjb2xvcjogI2IxMTt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS1xdWFsaWZpZXIge2NvbG9yOiAjNTU1O30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWtleXdvcmQge2NvbG9yOiAjNzMwO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWJ1aWx0aW4ge2NvbG9yOiAjMzBhO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWVycm9yIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZmRkO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWxpbmsge2NvbG9yOiAjNzYyO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/monokai.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogQmFzZWQgb24gU3VibGltZSBUZXh0J3MgTW9ub2thaSB0aGVtZSAqLwoKLmNtLXMtbW9ub2thaSB7YmFja2dyb3VuZDogIzI3MjgyMjsgY29sb3I6ICNmOGY4ZjI7fQouY20tcy1tb25va2FpIHNwYW4uQ29kZU1pcnJvci1zZWxlY3RlZCB7YmFja2dyb3VuZDogI2ZmZTc5MiAhaW1wb3J0YW50O30KLmNtLXMtbW9ub2thaSAuQ29kZU1pcnJvci1ndXR0ZXIge2JhY2tncm91bmQ6ICMyNzI4MjI7IGJvcmRlci1yaWdodDogMHB4O30KLmNtLXMtbW9ub2thaSAuQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7Y29sb3I6ICNkMGQwZDA7fQouY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWN1cnNvciB7Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjZjhmOGYwICFpbXBvcnRhbnQ7fQoKLmNtLXMtbW9ub2thaSBzcGFuLmNtLWNvbW1lbnQge2NvbG9yOiAjNzU3MTVlO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWF0b20ge2NvbG9yOiAjYWU4MWZmO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLW51bWJlciB7Y29sb3I6ICNhZTgxZmY7fQoKLmNtLXMtbW9ub2thaSBzcGFuLmNtLXByb3BlcnR5LCAuY20tcy1tb25va2FpIHNwYW4uY20tYXR0cmlidXRlIHtjb2xvcjogI2E2ZTIyZTt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1rZXl3b3JkIHtjb2xvcjogI2Y5MjY3Mjt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjZTZkYjc0O30KCi5jbS1zLW1vbm9rYWkgc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6ICNhNmUyMmU7fQouY20tcy1tb25va2FpIHNwYW4uY20tdmFyaWFibGUtMiB7Y29sb3I6ICM5ZWZmZmY7fQouY20tcy1tb25va2FpIHNwYW4uY20tZGVmIHtjb2xvcjogI2ZkOTcxZjt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1lcnJvciB7YmFja2dyb3VuZDogI2Y5MjY3MjsgY29sb3I6ICNmOGY4ZjA7fQouY20tcy1tb25va2FpIHNwYW4uY20tYnJhY2tldCB7Y29sb3I6ICNmOGY4ZjI7fQouY20tcy1tb25va2FpIHNwYW4uY20tdGFnIHtjb2xvcjogI2Y5MjY3Mjt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1saW5rIHtjb2xvcjogI2FlODFmZjt9CgouY20tcy1tb25va2FpIC5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7Cn0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/neat.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtbmVhdCBzcGFuLmNtLWNvbW1lbnQgeyBjb2xvcjogI2E4NjsgfQouY20tcy1uZWF0IHNwYW4uY20ta2V5d29yZCB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogYmx1ZTsgfQouY20tcy1uZWF0IHNwYW4uY20tc3RyaW5nIHsgY29sb3I6ICNhMjI7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLWJ1aWx0aW4geyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwNzc7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXNwZWNpYWwgeyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwYWE7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXZhcmlhYmxlIHsgY29sb3I6IGJsYWNrOyB9Ci5jbS1zLW5lYXQgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLW5lYXQgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICMzYTM7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLW1ldGEge2NvbG9yOiAjNTU1O30KLmNtLXMtbmVhdCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzNhMzsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/night.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogTG9vc2VseSBiYXNlZCBvbiB0aGUgTWlkbmlnaHQgVGV4dG1hdGUgdGhlbWUgKi8KCi5jbS1zLW5pZ2h0IHsgYmFja2dyb3VuZDogIzBhMDAxZjsgY29sb3I6ICNmOGY4Zjg7IH0KLmNtLXMtbmlnaHQgc3Bhbi5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2E4ZiAhaW1wb3J0YW50OyB9Ci5jbS1zLW5pZ2h0IC5Db2RlTWlycm9yLWd1dHRlciB7IGJhY2tncm91bmQ6ICMwYTAwMWY7IGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNhYWE7IH0KLmNtLXMtbmlnaHQgLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgeyBjb2xvcjogI2Y4ZjhmODsgfQouY20tcy1uaWdodCAuQ29kZU1pcnJvci1jdXJzb3IgeyBib3JkZXItbGVmdDogMXB4IHNvbGlkIHdoaXRlICFpbXBvcnRhbnQ7IH0KCi5jbS1zLW5pZ2h0IHNwYW4uY20tY29tbWVudCB7IGNvbG9yOiAjNjkwMGExOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tYXRvbSB7IGNvbG9yOiAjODQ1ZGM0OyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tbnVtYmVyLCAuY20tcy1uaWdodCBzcGFuLmNtLWF0dHJpYnV0ZSB7IGNvbG9yOiAjZmZkNTAwOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20ta2V5d29yZCB7IGNvbG9yOiAjNTk5ZWZmOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tc3RyaW5nIHsgY29sb3I6ICMzN2YxNGE7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1tZXRhIHsgY29sb3I6ICM3Njc4ZTI7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS12YXJpYWJsZS0yLCAuY20tcy1uaWdodCBzcGFuLmNtLXRhZyB7IGNvbG9yOiAjOTliMmZmOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tdmFyaWFibGUtMywgLmNtLXMtbmlnaHQgc3Bhbi5jbS1kZWYgeyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1lcnJvciB7IGNvbG9yOiAjOWQxZTE1OyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tYnJhY2tldCB7IGNvbG9yOiAjOGRhNmNlOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tY29tbWVudCB7IGNvbG9yOiAjNjkwMGExOyB9Ci5jbS1zLW5pZ2h0IHNwYW4uY20tYnVpbHRpbiwgLmNtLXMtbmlnaHQgc3Bhbi5jbS1zcGVjaWFsIHsgY29sb3I6ICNmZjllNTk7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1saW5rIHsgY29sb3I6ICM4NDVkYzQ7IH0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/rubyblue.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtcnVieWJsdWUgeyBmb250OjEzcHgvMS40ZW0gVHJlYnVjaGV0LCBWZXJkYW5hLCBzYW5zLXNlcmlmOyB9CS8qIC0gY3VzdG9taXplZCBlZGl0b3IgZm9udCAtICovCgouY20tcy1ydWJ5Ymx1ZSB7IGJhY2tncm91bmQ6ICMxMTI0MzU7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjMDAwMEZGICFpbXBvcnRhbnQ7IH0KLmNtLXMtcnVieWJsdWUgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzFGNDY2MTsgYm9yZGVyLXJpZ2h0OiA3cHggc29saWQgIzNFNzA4NzsgbWluLXdpZHRoOjIuNWVtOyB9Ci5jbS1zLXJ1YnlibHVlIC5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHsgY29sb3I6IHdoaXRlOyB9Ci5jbS1zLXJ1YnlibHVlIC5Db2RlTWlycm9yLWN1cnNvciB7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgd2hpdGUgIWltcG9ydGFudDsgfQoKLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICM5OTk7IGZvbnQtc3R5bGU6aXRhbGljOyB9Ci5jbS1zLXJ1YnlibHVlIHNwYW4uY20tYXRvbSB7IGNvbG9yOiAjRjRDMjBCOyB9Ci5jbS1zLXJ1YnlibHVlIHNwYW4uY20tbnVtYmVyLCAuY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWF0dHJpYnV0ZSB7IGNvbG9yOiAjODJDNkUwOyB9Ci5jbS1zLXJ1YnlibHVlIHNwYW4uY20ta2V5d29yZCB7IGNvbG9yOiAjRjBGOyB9Ci5jbS1zLXJ1YnlibHVlIHNwYW4uY20tc3RyaW5nIHsgY29sb3I6ICNGMDgwNDc7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1tZXRhIHsgY29sb3I6ICNGMEY7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS12YXJpYWJsZS0yLCAuY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLXRhZyB7IGNvbG9yOiAjN0JEODI3OyB9Ci5jbS1zLXJ1YnlibHVlIHNwYW4uY20tdmFyaWFibGUtMywgLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1kZWYgeyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1lcnJvciB7IGNvbG9yOiAjQUYyMDE4OyB9Ci5jbS1zLXJ1YnlibHVlIHNwYW4uY20tYnJhY2tldCB7IGNvbG9yOiAjRjBGOyB9Ci5jbS1zLXJ1YnlibHVlIHNwYW4uY20tbGluayB7IGNvbG9yOiAjRjRDMjBCOyB9Ci5jbS1zLXJ1YnlibHVlIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgeyBjb2xvcjojRjBGICFpbXBvcnRhbnQ7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1idWlsdGluLCAuY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLXNwZWNpYWwgeyBjb2xvcjogI0ZGOUQwMDsgfQo=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbImZyaWVuZGx5bmFtZSJdPSJDb2RlTWlycm9yIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IiOwoKJGxhbmdbInBvc3RpbnN0YWxsIl09IlRoZSBDb2RlTWlycm9yIG1vZHVsZSB3YXMgc3VjZXNzZnVsbHkgaW5zdGFsbGVkIjsKJGxhbmdbIm5lZWRwZXJtaXNzaW9uIl09IidZb3UgbmVlZCB0aGUgJyVzJyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4iOwoKJGxhbmdbInNldHRpbmdzdGFiIl09IlNldHRpbmdzIjsKJGxhbmdbInNhdmVzZXR0aW5ncyJdPSJTYXZlIHNldHRpbmdzIjsKJGxhbmdbInNldHRpbmdzc2F2ZWQiXT0iU2V0dGluZ3Mgc2F2ZWQiOwoKJGxhbmdbImh0bWx0ZXN0Il09IkhUTUwgc3ludGF4IHRlc3QiOwokbGFuZ1siY3NzdGVzdCJdPSJDU1Mgc3ludGF4IHRlc3QiOwokbGFuZ1sicGhwdGVzdCJdPSJQSFAgc3ludGF4IHRlc3QiOwokbGFuZ1sianN0ZXN0Il09IkphdmFTY3JpcHQgc3ludGF4IHRlc3QiOwovLyRsYW5nWyJleGFtcGxlc3ludGF4Il09IlN5bnRheCB0byB0ZXN0IHdpdGgiOwovLyRsYW5nWyJjaGFuZ2UiXT0iQ2hhbmdlLi4uIjsKCiRsYW5nWyJzaG93bGluZW51bWJlcnMiXT0iU2hvdyBsaW5lbnVtYmVycyI7CiRsYW5nWyJhbGxvd2Z1bGxzY3JlZW4iXT0iQWxsb3cgZnVsbHNjcmVlbiBtb2RlIChGMTEpIjsKCi8vJGxhbmdbInRleHR3cmFwcGluZyJdPSJXcmFwIGxvbmcgbGluZXMiOwokbGFuZ1siYXV0b21hdGNocGFyZW5zIl09IkF1dG9tYXRjaCBwYXJlbnRoZXNpcyI7CiRsYW5nWyJ0YWJoYW5kbGluZyJdPSJIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5IjsKJGxhbmdbInRhYmRlZmF1bHQiXT0iTGV0IHRoZSBicm93c2VyIGRlY2lkZSI7CiRsYW5nWyJ0YWJpbmRlbnQiXT0iRG8gaW5kZW50YXRpb24iOwokbGFuZ1sidGFic3BhY2VzIl09Ikluc2VydCBzcGFjZXMiOwokbGFuZ1sidGFic2hpZnQiXT0iU2hpZnQgdG8gdGhlIHJpZ2h0LCBzaGlmdC1UQUIgc2hpZnRzIHRvIGxlZnQiOwokbGFuZ1sidGFic2l6ZSJdPSJTaXplIG9mIHRhYnMiOwoKJGxhbmdbImNzc2FkZGl0aW9ucyJdPSJBZGRpdGlvbnMgdG8gdGhlIENvZGVNaXJyb3ItY3NzLiI7CgokbGFuZ1sidGhlbWUiXT0iVGhlbWUiOwoKCgokbGFuZ1siaGVscCJdPSI8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz88L3N0cm9uZz4KPGJyLz4KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLgpJdCBjYW4gYm90aCByZXBsYWNlIGEgd3lzaXd5Zy1tb2R1bGUsIGFuZCBhY3Qgc3RhbmRhbG9uZSBmb3IgdGVtcGxhdGUvc3R5bGVzaGVldCBlZGl0aW5nIChvbmx5IHN1cHBvcnRlZCBpbiBDTVNtcyAxLjErKQo8YnIvPjxici8+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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3ItU3ludGF4aGVydm9yaGVidW5nJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnRGFzIENvZGVNaXJyb3ItTW9kdWwgd3VyZGUgZXJmb2xncmVpY2ggaW5zdGFsbGllcnQuJzsKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAnU2llIGJlc2l0emVuIG5pY2h0ICBkaWUgJiMwMzk7JXMmIzAzOTstQmVyZWNodGlndW5nLCB1bSBkaWVzZSBGdW5rdGlvbiBhdXN6dWYmdXVtbDtocmVuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0VpbnN0ZWxsdW5nZW4nOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnRWluc3RlbGx1bmdlbiBzcGVpY2hlcm4nOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0VpbnN0ZWxsdW5nZW4gZ2VzcGVpY2hlcnQnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MLVN5bnRheC1UZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MtU3ludGF4LVRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUC1TeW50YXgtVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0LVN5bnRheC1UZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1plaWxlbm51bW1lcm4gYW56ZWlnZW4nOwokbGFuZ1snYWxsb3dmdWxsc2NyZWVuJ10gPSAnVm9sbGJpbGRtb2R1cyBlcmxhdWJlbiAoRjExKSc7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdBdXRvbWF0aXNjaGUgS2xhbW1lci1Fcmtlbm51bmcnOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdVbWdhbmcgbWl0IERyJnV1bWw7Y2tlbiBkZXIgVEFCLVRhc3RlJzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdCcm93c2VyIGVudHNjaGVpZGVuIGxhc3Nlbic7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdFaW5yJnV1bWw7Y2t1bmcnOwokbGFuZ1sndGFic3BhY2VzJ10gPSAnTGVlcnplaWNoZW4gZWluZiZ1dW1sO2dlbic7CiRsYW5nWyd0YWJzaGlmdCddID0gJ1NoaWZ0IG5hY2ggcmVjaHRzLCBTaGlmdC1UQUIgdmVyc2NoaWVidCBzaWNoIG5hY2ggbGlua3MnOwokbGFuZ1snY3NzYWRkaXRpb25zJ10gPSAnWnVzJmF1bWw7dHplIHp1bSBDb2RlTWlycm9yLUNTUy4nOwokbGFuZ1sndGhlbWUnXSA9ICdUaGVtYSc7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldhcyBtYWNodCBkaWVzZXMgTW9kdWw/PC9oMz4NCjxwPkRhcyBDb2RlTWlycm9yLU1vZHVsIGlzdCBlaW4gRWRpdG9yIG1pdCBTeW50YXhoZXJ2b3JoZWJ1bmcsIG1pdCBkZW0gU2llIG9ubGluZSBJbmhhbHQsIFRlbXBsYXRlcyB1bmQgU3R5bGVzaGVldHMgYmVhcmJlaXRlbiBrJm91bWw7bm5lbi4gRGFzIE1vZHVsIGthbm4gc293b2hsIGRpZSBXWVNJV1lHLUVkaXRvcmVuIGVyc2V0emVuIGFscyBhdWNoIHNlcGFyYXQgenVtIEVkaXRpZXJlbiB2b24gVGVtcGxhdGVzIHVuZCBTdHlsZXNoZWV0cyB2ZXJ3ZW5kZXQgd2VyZGVuICh1bnRlcnN0JnV1bWw7dHp0IGFiIENNU21zIFZlcnNpb24gMS4xKS48L3A+DQo8aDM+V2llIHdpcmQgZXMgZWluZ2VzZXR6dD88L2gzPg0KPHA+SW5zdGFsbGllcmVuIFNpZSBkYXMgTW9kdWwgdW5kIGFrdGl2aWVyZW4gU2llIGVzIGFuc2NobGllJnN6bGlnO2VuZCBpbiBkZW4gYmVudXR6ZXJzcGV6aWZpc2NoZW4gRWluc3RlbGx1bmdlbi48L3A+DQo8cD5CZWFjaHRlbiBTaWUsIGRhc3MgU2llIGFiIENNU21zLVZlcnNpb24gMS4xIHVuZCBoJm91bWw7aGVyIENvZGVNaXJyb3Igc293b2hsIGFscyBXWVNJV1lHLUVkaXRvciBhbHMgYXVjaCBhbHMgRWRpdG9yIG1pdCBTeW50YXhoZXJ2b3JoZWJ1bmcgYXVzdyZhdW1sO2hsZW4gayZvdW1sO25uZW4uPC9wPic7CiRsYW5nWydxY2EnXSA9ICdQMC0xNTgzMjk4MTEtMTMxODg2MTg3MjEyNyc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE4NzY1NjkzMzQuMTMxOTkwODI5OS4xMzE5OTA4Mjk5LjEzMTk5MDgyOTkuMSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTMxOTkwODI5OS4xLjEudXRtY2NuPShvcmdhbmljKXx1dG1jc3I9Z29vZ2xlfHV0bWN0cj1odHRwOi8vdHJhbnNsYXRpb25zLmNtc21hZGVzaW1wbGUub3JnL3x1dG1jbWQ9b3JnYW5pYyc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgU3ludGF4aGlnaGxpZ2h0aW5nIEVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0RlIENvZGVNaXJyb3IgTW9kdWxlIGlzIGdlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1UgaGVlZnQgJiMwMzk7JXMmIzAzOTsgcmVjaHRlbiBub2RpZyBvbSBkZXplIGZ1bmN0aWUgdGUgZ2VicnVpa2VuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0luc3RlbGxpbmdlbic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdJbnN0ZWxsaW5nZW4gb3BzbGFhbic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5zdGVsbGluZ2VuIG9wZ2VzbGFnZW4nOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIFN5bnRheCBUZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MgU3ludGF4IFRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBTeW50YXggVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IFN5bnRheCBUZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1JlZ2VsbnVtbWVycyB0b25lbic7CiRsYW5nWydhbGxvd2Z1bGxzY3JlZW4nXSA9ICdTdGEgZnVsbHNjcmVlbiBtb2R1cyB0b2UgKEYxMSknOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlzY2ggYmlqIGVsa2FhciBob3JlbmRlIHRhZ3Mga2xldXJlbic7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ1dhdCB0ZSBkb2VuIGJpaiBoZXQgaW5kcnVra2VuIHZhbiBUQUIgdG9ldHMnOwokbGFuZ1sndGFiZGVmYXVsdCddID0gJ0xhYXQgZGUgYnJvd3NlciBoZXQgYmVwYWxlbic7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdNYWFrIHJlZ2VsIGluc3ByaW5naW5nJzsKJGxhbmdbJ3RhYnNwYWNlcyddID0gJ1ZvZWcgc3BhdGllcyB0b2UnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdWZXJwbGFhdHN0IG5hYXIgcmVjaHRzLCBzaGlmdC1UQUIgdmVycGxhYXRzdCBuYWFyIGxpbmtzJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ0FhbnBhc3NpbmdlbiBhYW4gZGUgQ29kZU1pcnJvci1jc3MuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGhlbWUgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz8gPC9zdHJvbmc+DQo8YnIvPg0KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLg0KSXQgY2FuIGJvdGggcmVwbGFjZSBhIHd5c2l3eWctbW9kdWxlLCBhbmQgYWN0IHN0YW5kYWxvbmUgZm9yIHRlbXBsYXRlL3N0eWxlc2hlZXQgZWRpdGluZyAob25seSBzdXBwb3J0ZWQgaW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPg0KWW91IHNpbXBseSBpbnN0YWxsIGl0LCBhbmQgY2hvb3NlIGl0IGluIHlvdXIgYWRtaW4gdXNlciBwcmVmZXJlbmNlcy4gTm90ZSwgdGhhdCBpZiB5b3UgdXNlIENNU21zIDEuMSBvciBhYm92ZSB5b3UgY2FuDQpzZWxlY3QgQ29kZUFyZWEgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTkzMTk1Nzg4My4xMzE5NjIzNjk2LjEzMTk2MjM2OTYuMTMxOTYyMzY5Ni4xJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTMxOTYyMzY5Ni4xLjEudXRtY2NuPShkaXJlY3QpfHV0bWNzcj0oZGlyZWN0KXx1dG1jbWQ9KG5vbmUpJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTE0MDg5MjY2NjEtMTMwOTUyODQ3NTI1Nic7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></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[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInVzZWF1dG9jb21wbGV0ZSIsMSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImF1dG9tYXRjaHBhcmVucyIsMCkKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsKICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsKICAvL1JlbW92ZSBvbGQgc3BlY2lmaWsgcGVybWlzc2lvbgogICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCJtb2RpZnllZGl0YXJlYXNldHRpbmdzIik7Cj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT4yLjIuMSAtIFVwZGF0ZWQgdG8gQ00gMi4yLjAsIGFkZGVkIHRhYi13aWR0aCBzZXR0aW5nPC9saT4KICA8bGk+Mi4yLjAgLSBVcGRhdGVkIHRvIENNIDIuMTUsIGFkZGVkIG9wdGlvbmFsIGZ1bGxzY3JlZW4gbW9kZTwvbGk+CiAgPGxpPjIuMS4yIC0gVXBkYXRlZCB0byBDTSAyLjEyLCBjbGVhbmVyIHdheSBvZiBzYXZpbmcgZWRpdG9yIGNvbnRlbnQgdG8gdGV4dGFyZWE8L2xpPgogIDxsaT4yLjEuMCAtIFVwZGF0ZWQgdG8gQ00gMi4xLjEsIG9uY2UgYWdhaW4gY2hhbmdlIHRlc3Rtb2RlLi4uIDwvbGk+CiAgPGxpPjIuMC4xIC0gVXBkYXRlZCB0byBDTSAyLjAuMTwvbGk+CiAgPGxpPjIuMCAtIFVwZGF0ZWQgdG8gQ00gMi4wIGFuZCByZXdvcmtlZCBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgdG8gbWFrZSB0aGlzIHdvcms8L2xpPgogIDxsaT4wLjEuOSAtIFVwZGF0ZWQgdG8gQ00gMC45MzwvbGk+CiAgPGxpPjAuMS44IC0gVXBkYXRlZCB0byBDTSAwLjksIGFkZGVkIG9wdGlvbiBvbiBob3cgdG8gaGFuZGxlIFRBQjwvbGk+CiAgPGxpPjAuMS43IC0gVXBkYXRlZCB0byBDTSAwLjgwPC9saT4KICA8bGk+MC4xLjYgLSBVcGRhdGVkIHRvIENNIDAuNzAsIEFkZGVkIG9wdGlvbiB0byBtYXRjaCBwYXJlbnRoZXNpczwvbGk+CiAgPGxpPjAuMS41IC0gVXBkYXRlZCB0byBDTSAwLjY2LCByZW1vdmVkIGEgc3RyYW5nZSBcbiBjaGFyIGZyb20gaGVhZGVyb3V0cHV0LCBtYWRlIHRhYmJpbmcgd29yazwvbGk+CiAgPGxpPjAuMS40IC0gRml4ZWQgQ1BVIGhvZ2dpbmcgcHJvYmxlbXMgYnkgcmV3cml0aW5nIHRlc3RhcmVhLWNvZGU8L2xpPgogIDxsaT4wLjEuMyAtIFVwZGF0ZWQgdG8gQ00gMC42NSwgYWRkZWQgb3B0aW9uIHRvIHRvZ2dsZSB3b3Jkd3JhcDwvbGk+CiAgPGxpPjAuMS4yIC0gVXBkYXRlZCB0byBDTSAwLjYzPC9saT4KICA8bGk+MC4xLjEgLSBVcGRhdGVkIHRvIENNIDAuNjIsIGZpeGVkIGV4YW1wbGVzIGFuZCBwcm9iYWJseSBmdW5jdGlvbmFsaXR5IGFzIHdlbGw8L2xpPgogIDxsaT4wLjEuMCAtIEluaXRpYWwgcmVsZWFzZSA8L2xpPgo8L3VsPg==]]></data>
	</file>
	<file>
	  <filename>/templates/codemirror2area.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjazsiID4KPHRleHRhcmVhIGlkPSJ7JHRleHRhcmVhaWR9IiBuYW1lPSJ7JHRleHRhcmVhbmFtZX0iPnskY29udGVudH08L3RleHRhcmVhPgo8L2Rpdj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiAgdmFyIHskdGV4dGFyZWFpZH0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneyR0ZXh0YXJlYWlkfScpOwogIHZhciBjb2RlbWlycm9yZWRpdG9yeyRpZH0gPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSh7JHRleHRhcmVhaWR9LCB7bGl0ZXJhbH17ey9saXRlcmFsfQoKICAgIG1vZGUgOiAneyRtb2RlfScsCiAgICBpbmRlbnRVbml0IDogeyR0YWJzaXplfSwKICAgIGxpbmVOdW1iZXJzOiB7JGxpbmVudW1iZXJzfSwKCiAgICB0YWJNb2RlIDogJ3skdGFiaGFuZGxpbmd9JywKICAgIHRoZW1lIDogJ3skdGhlbWV9JywKICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICB7aWYgJGFsbG93ZnVsbHNjcmVlbj09JzEnfQogIHtsaXRlcmFsfQogICxvbktleUV2ZW50OiBmdW5jdGlvbihpLCBlKSB7CgogICAgICAgICAgICBpZiAoKGUua2V5Q29kZSA9PSAxMjIgfHwgZS5rZXlDb2RlID09IDI3KSAmJiBlLnR5cGUgPT0gJ2tleWRvd24nKSB7CiAgICAgICAgICAgICAgZS5zdG9wKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHRvZ2dsZUZ1bGxzY3JlZW5FZGl0aW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICB7L2xpdGVyYWx9CiAgey9pZn0KCiAge2xpdGVyYWx9fSk7ey9saXRlcmFsfQo8L3NjcmlwdD4KCg==]]></data>
	</file>
	<file>
	  <filename>/templates/settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHNob3dsaW5lbnVtYmVyc3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc2hvd2xpbmVudW1iZXJzaW5wdXR9PC9wPgoJPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRhbGxvd2Z1bGxzY3JlZW50ZXh0fTwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGFsbG93ZnVsbHNjcmVlbmlucHV0fTwvcD4KCTwvZGl2Pgp7KjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHR3cmFwcGluZ3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGV4dHdyYXBwaW5naW5wdXR9PC9wPgoJPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskYXV0b21hdGNocGFyZW5zdGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRhdXRvbWF0Y2hwYXJlbnNpbnB1dH08L3A+Cgk8L2Rpdj4KKn0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0YWJoYW5kbGluZ3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGFiaGFuZGxpbmdpbnB1dH08L3A+Cgk8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0YWJzaXpldGV4dH08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRhYnNpemVpbnB1dH08L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskY3NzYWRkaXRpb25zdGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjc3NhZGRpdGlvbnNpbnB1dH08L3A+Cgk8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRoZW1ldGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0aGVtZWlucHV0fTwvcD4KCTwvZGl2PgoKCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
</module>
